lhl 2 tahun lalu
melakukan
bcb5278bba
100 mengubah file dengan 48039 tambahan dan 0 penghapusan
  1. 6 0
      .editorconfig
  2. 2 0
      .gitignore
  3. 16 0
      .hbuilderx/launch.json
  4. 28 0
      .project
  5. 392 0
      App.vue
  6. 121 0
      components/Emotion/index.vue
  7. 204 0
      components/GroupUser.vue
  8. 1498 0
      components/chat-panel.vue
  9. 12548 0
      components/city-data/area.js
  10. 1507 0
      components/city-data/city.js
  11. 143 0
      components/city-data/province.js
  12. 220 0
      components/contact.vue
  13. 239 0
      components/contacts.vue
  14. 41 0
      components/content.vue
  15. 330 0
      components/gamelist.vue
  16. 28 0
      components/gaoyia-parse/components/wxParseAudio.vue
  17. 94 0
      components/gaoyia-parse/components/wxParseImg.vue
  18. 55 0
      components/gaoyia-parse/components/wxParseTable.vue
  19. 98 0
      components/gaoyia-parse/components/wxParseTemplate0.vue
  20. 88 0
      components/gaoyia-parse/components/wxParseTemplate1.vue
  21. 88 0
      components/gaoyia-parse/components/wxParseTemplate10.vue
  22. 86 0
      components/gaoyia-parse/components/wxParseTemplate11.vue
  23. 88 0
      components/gaoyia-parse/components/wxParseTemplate2.vue
  24. 88 0
      components/gaoyia-parse/components/wxParseTemplate3.vue
  25. 88 0
      components/gaoyia-parse/components/wxParseTemplate4.vue
  26. 88 0
      components/gaoyia-parse/components/wxParseTemplate5.vue
  27. 88 0
      components/gaoyia-parse/components/wxParseTemplate6.vue
  28. 88 0
      components/gaoyia-parse/components/wxParseTemplate7.vue
  29. 88 0
      components/gaoyia-parse/components/wxParseTemplate8.vue
  30. 88 0
      components/gaoyia-parse/components/wxParseTemplate9.vue
  31. 15 0
      components/gaoyia-parse/components/wxParseVideo.vue
  32. 261 0
      components/gaoyia-parse/libs/html2json.js
  33. 156 0
      components/gaoyia-parse/libs/htmlparser.js
  34. 209 0
      components/gaoyia-parse/libs/wxDiscode.js
  35. 258 0
      components/gaoyia-parse/parse.css
  36. 228 0
      components/gaoyia-parse/parse.vue
  37. 384 0
      components/get-redpick.vue
  38. 552 0
      components/groupindex.vue
  39. 584 0
      components/header.vue
  40. 185 0
      components/iospay.vue
  41. 137 0
      components/layer.vue
  42. 199 0
      components/load-more.vue
  43. 966 0
      components/loginitem.vue
  44. 189 0
      components/logout_words.vue
  45. 382 0
      components/message.vue
  46. 1273 0
      components/messageitem.vue
  47. 129 0
      components/msgitem.vue
  48. 247 0
      components/noteadd.vue
  49. 137 0
      components/packet.vue
  50. 496 0
      components/payment.vue
  51. 110 0
      components/popup.vue
  52. 160 0
      components/prompt.vue
  53. 148 0
      components/quick-menu.vue
  54. 61 0
      components/result-page.vue
  55. 353 0
      components/searchitem.vue
  56. 974 0
      components/sender.vue
  57. 371 0
      components/simple-address.nvue
  58. 10 0
      components/tabbar.vue
  59. 2362 0
      components/trend.vue
  60. 132 0
      components/uni-icons/icons.js
  61. 10 0
      components/uni-icons/uni-icons.vue
  62. 214 0
      components/url.vue
  63. 6 0
      config.js
  64. 2 0
      config/ios/config.txt
  65. TEMPAT SAMPAH
      config/ios/yqlmapp.mobileprovision
  66. TEMPAT SAMPAH
      config/ios/证书.p12
  67. TEMPAT SAMPAH
      config/logo.png
  68. TEMPAT SAMPAH
      config/yiqu.keystore
  69. 2 0
      config/证书信息.txt
  70. 37 0
      extends/helpers.js
  71. 28 0
      extends/index.js
  72. 1 0
      init.bat
  73. 71 0
      js_sdk/ican-H5Api/ican-H5Api.js
  74. 191 0
      library/SQL.js
  75. 121 0
      library/_data.js
  76. 146 0
      library/_get.js
  77. 13 0
      library/_hook.js
  78. 332 0
      library/action.js
  79. 10267 0
      library/address.js
  80. 22 0
      library/cache.js
  81. 593 0
      library/chat.js
  82. 87 0
      library/helper.js
  83. 139 0
      library/http.js
  84. 175 0
      library/index.js
  85. 63 0
      library/message.js
  86. 91 0
      library/scode.js
  87. 138 0
      library/socket.js
  88. 229 0
      main.js
  89. 181 0
      manifest.json
  90. 686 0
      pages.json
  91. 623 0
      pages/circle/circle.vue
  92. 147 0
      pages/circle/circle/chat_input.vue
  93. 289 0
      pages/circle/circle/send.vue
  94. 279 0
      pages/circle/circle_chat_details.vue
  95. 374 0
      pages/circle/circle_details.vue
  96. 603 0
      pages/circle/mycircle.vue
  97. 391 0
      pages/friend/chat.vue
  98. 851 0
      pages/friend/detail.vue
  99. 76 0
      pages/friend/logout_words.vue
  100. 357 0
      pages/friend/readpacket.vue

+ 6 - 0
.editorconfig

@@ -0,0 +1,6 @@
+root = true
+
+[*]
+charset = utf-8
+indent_size = 4
+indent_style = space

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+/.idea
+/unpackage

+ 16 - 0
.hbuilderx/launch.json

@@ -0,0 +1,16 @@
+{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+    "version": "0.0",
+    "configurations": [{
+     	"app-plus" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"default" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"type" : "uniCloud"
+     }
+    ]
+}

+ 28 - 0
.project

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>mine</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.aptana.ide.core.unifiedBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>com.aptana.projects.webnature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1553748842008</id>
+			<name></name>
+			<type>26</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-name-matches-false-false-node_modules</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>

File diff ditekan karena terlalu besar
+ 392 - 0
App.vue


+ 121 - 0
components/Emotion/index.vue

@@ -0,0 +1,121 @@
+<template>
+	<view>
+		<view class="emotion-box" :style="{height: height + 'px'}">
+			<view class="emotion-box-line" v-for="(line, i) in lists" :key="i">
+				<view class="emotion-item" v-for="(item, index) in line" :key="index" @click="clickHandler(item)">
+            <image :src="'/static/emoji/'+item.name+'.gif'" style="width: 50rpx;height: 50rpx;"></image>				  
+			
+           
+				</view> 
+                
+			</view>
+		</view>
+	</view>
+	
+</template>
+
+<script>
+	export default {
+		props: {
+			height: {
+				type: Number,
+				default: 200
+			}
+		},
+		data() {
+			return {
+				list: [
+					// [{'name':'微笑'}, {'name':撇嘴'}, {'色'}, {'发呆'}, {'得意'}, {'流泪'}, {'害羞'}, {'闭嘴'}],
+					['微笑', '撇嘴', '色', '发呆', '得意', '流泪', '害羞', '闭嘴'],
+					['睡', '大哭', '尴尬', '发怒', '调皮', '呲牙', '惊讶', '难过'],
+					['酷', '冷汗', '抓狂', '吐', '偷笑', '可爱', '白眼', '傲慢'],
+					['饥饿', '困', '惊恐', '流汗', '憨笑', '大兵', '奋斗', '咒骂'],
+					['疑问', '嘘', '晕', '折磨', '衰', '骷髅', '敲打', '再见'],
+					['擦汗', '抠鼻', '鼓掌', '糗大了', '坏笑', '左哼哼', '右哼哼', '哈欠'],
+					['鄙视', '委屈', '快哭了', '阴险', '亲亲', '吓', '可怜', '菜刀'],
+					['西瓜', '啤酒', '篮球', '乒乓', '咖啡', '饭', '猪头', '玫瑰', ],
+					['凋谢', '示爱', '爱心', '心碎', '蛋糕', '闪电', '炸弹', '刀'],
+					['足球', '瓢虫', '便便', '月亮', '太阳', '礼物', '拥抱', '强'],
+					['弱', '握手', '胜利', '抱拳', '勾引', '拳头', '差劲', '爱你'],
+					['NO', 'OK', '爱情', '飞吻', '跳跳', '发抖', '怄火', '转圈'],
+					['磕头', '回头', '跳绳', '挥手', '激动', '街舞', '左太极', '右太极'],
+				],
+				reg: /\S{1,3}/gi,
+                lists:[],
+                listss:[]
+				// item: []
+			}
+		},
+		mounted() {
+		    
+            // function get_img('[weixiao]')
+            // 
+            // list[0]. 
+            var value = '';
+		    this.list = this.list.map((line,index) => {
+                this.listss = [];
+		        line = line.map((item,idx) => {
+                    
+                    value = item;
+                   
+		            item = item.replace(/\S{1,3}/gi,this.emotion(item));
+		           
+                    this.listss.push({"name":item,"index":index,"value":value,"idx":idx})
+                   
+                    return item;
+               
+		        })
+                
+                this.lists.push(this.listss);
+                
+		        return line;
+		    })
+            
+         //   console.log(this.lists);
+		  
+		},
+
+		methods: {
+			
+			clickHandler(i) {
+              //  console.log(i)
+				// let emotion = `#${i};`
+             console.log(i.value)
+				let emotion = `${i}`
+				this.$emit('emotion', i.value)
+			},
+			emotion(res) {
+				//let word = res.replace(/\#|\;/gi,'')
+				const list =['微笑','撇嘴', '色', '发呆', '得意', '流泪', '害羞', '闭嘴', '睡', '大哭', '尴尬', '发怒', '调皮', '呲牙', '惊讶', '难过', '酷', '冷汗', '抓狂', '吐', '偷笑', '可爱', '白眼', '傲慢', '饥饿', '困', '惊恐', '流汗', '憨笑', '大兵', '奋斗', '咒骂', '疑问', '嘘', '晕', '折磨', '衰', '骷髅', '敲打', '再见', '擦汗', '抠鼻', '鼓掌', '糗大了', '坏笑', '左哼哼', '右哼哼', '哈欠', '鄙视', '委屈', '快哭了', '阴险', '亲亲', '吓', '可怜', '菜刀', '西瓜', '啤酒', '篮球', '乒乓', '咖啡', '饭', '猪头', '玫瑰', '凋谢', '示爱', '爱心', '心碎', '蛋糕', '闪电', '炸弹', '刀', '足球', '瓢虫', '便便', '月亮', '太阳', '礼物', '拥抱', '强', '弱', '握手', '胜利', '抱拳', '勾引', '拳头', '差劲', '爱你', 'NO', 'OK', '爱情', '飞吻', '跳跳', '发抖', '怄火', '转圈', '磕头', '回头', '跳绳', '挥手', '激动', '街舞', '献吻', '左太极', '右太极']
+				let index = list.indexOf(res)
+                
+                var index1=index+100;
+                
+                
+				return index1
+			}
+		}
+	}
+</script>
+
+<style scoped>
+	.emotion-box {
+		margin: 0 auto;
+		width: 98%;
+		box-sizing: border-box;
+		padding: 2px;
+	
+		overflow: hidden;
+		overflow-y: auto;
+	}
+
+	.emotion-box-line {
+		display: flex;
+	}
+
+	.emotion-item {
+		flex: 1;
+		text-align: center;
+		cursor: pointer;
+	}
+</style>

+ 204 - 0
components/GroupUser.vue

@@ -0,0 +1,204 @@
+<template>
+	<view v-if="show" class="page" style="position: fixed;z-index: 1000;top:0px;height: 100vh;width: 100vw;padding-top: 100upx;overflow-y: scroll;">
+	      <view class="header">
+              <view class="showtitle" v-if="!showsearch">
+                        <view class="title">
+                               <uni-icons type='arrowleft' @tap="close()" color="#ffffff"></uni-icons>
+            
+                            选择要提醒的人
+                            </view> 
+                  <view class="search-icon" @tap="showsearch=1">
+                         <uni-icons type="search" color="#ffffff" size="28" style="vertical-align: middle;"/>
+                     
+                  </view>
+              </view>
+       <view class="inputbar" v-else>
+       	<input placeholder="搜索" class="searchbox" v-model="name" @input="search( $event.detail.value);" />
+       	<view class="btn" @tap="showsearch=0;members=members1">取消</view>
+       </view>
+          </view>
+	
+		<v-contracts :items="members" @click="paramClick" @avatar="paramClick" v-if="members.length" />
+
+	</view>
+</template>
+
+<script>
+	import {
+		mapState
+	} from 'vuex';
+	import api from '../library/index.js'
+
+  import uniIcons from './uni-icons/uni-icons.vue'
+    export default {
+        components: {
+        	
+            uniIcons
+        },
+            props: {
+            	
+            	groupid: {
+            		type: [Number,String],
+            		default: 0
+            	},
+                show: {
+            		type: Number,
+            		default: 0
+            	},
+                },
+		data() {
+			return {
+				initializing: true,
+			members:[],
+            members1:[],
+               showsearch:0 
+			}
+		},
+		computed: {
+
+		},
+		methods: {
+            getGroupUsers() {
+            	api.getGroupUsers({
+            		group_id: this.groupid,
+                    userid: this.$store.state.userinfo.id,
+            	}).then(res => {
+                    uni.setStorageSync(this.groupid+'_group_members',res.data);
+            	this.members1=this.members=res.data
+            	this.initializing = false
+            	})
+            },
+			paramClick(e) {
+				let page, params;
+	
+					const {
+						id,
+						nickname,
+						avatar
+					} = e;
+					params = {
+						id,
+						nickname,
+						avatar
+					};
+				this.$emit('atuser',params); 
+			
+			},
+            search(value){
+            if(value.length>0){
+             var arr=[];
+             this.members1.forEach(item=>{
+                 if(item.nickname.indexOf(value)>-1) arr.push(item);
+                 
+             })
+             this.members=arr;   
+            }else{
+                this.members=this.members1
+            }
+               
+                
+            },
+            close(){
+              this.$emit('atuser');  
+            },
+		},
+	   
+		mounted() {
+             this.members1= this.members= uni.getStorageSync(this.groupid+'_group_members');
+			this.getGroupUsers();
+            uni.hideKeyboard();
+		},
+        onShow() {
+           uni.hideKeyboard();  
+        }
+	}
+
+	function complement(a, b) {
+		return a.filter(function(v) {
+				return !(b.indexOf(v) > -1)
+			})
+			.concat(b.filter(function(v) {
+				return !(a.indexOf(v) > -1)
+			}))
+	}
+</script>
+
+<style lang="scss">
+	.inputbar {
+		display: flex;
+		align-items: center;
+		height: 45px;
+	background: -webkit-linear-gradient(left top, #01d9ff , #01a9fe);
+	background: -o-linear-gradient(bottom right, #01d9ff, #01a9fe);
+		box-sizing: border-box;
+		padding: $uni-spacing-col-base $uni-spacing-row-base;
+
+		input {
+			background-color: #eee;
+			border-radius: $uni-border-radius-base;
+			height: 100%;
+			padding: 0 $uni-spacing-row-base;
+			flex: 1;
+
+			&.disabled {
+			background: -webkit-linear-gradient(left top, #01d9ff , #01a9fe);
+			background: -o-linear-gradient(bottom right, #01d9ff, #01a9fe);
+			background: -moz-linear-gradient(bottom right, #01d9ff, #01a9fe);
+			background: linear-gradient(to right, #01d9ff , #01a9fe);
+				border: 1upx solid #eee;
+			}
+		}
+.searchbox{
+    background-color: #fff;
+}
+		.btn {
+			padding-top: 0;
+			padding-bottom: 0;
+			height: 100%;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: center;
+			margin-left: $uni-spacing-row-base;
+ background: -webkit-linear-gradient(left top, #3388ff , #2319dc);
+      background: -o-linear-gradient(bottom right, #3388ff, #2319dc);
+      background: -moz-linear-gradient(bottom right, #3388ff, #2319dc);
+      background: linear-gradient(to bottom right, #3388ff , #2319dc);
+      color: #FFF;
+			&:not(.btn-primary) {
+				background-color: #eee;
+			}
+		}
+	}
+    .header{
+        position: fixed;
+        top:0px;
+        width: 100vw;
+        line-height: 45px;
+        height: 45px;
+        border-bottom: 1px #eee solid;
+        color: #fff;z-index: 10000;
+        background: -webkit-linear-gradient(left top, #01d9ff , #01a9fe);
+        background: -o-linear-gradient(bottom right, #01d9ff, #01a9fe);
+        background: -moz-linear-gradient(bottom right, #01d9ff, #01a9fe);
+        background: linear-gradient(to right, #01d9ff , #01a9fe);
+    }
+     .header .title{
+         font-size: 32upx;
+         padding-left: 20upx;
+         font-weight: 600;
+         display: inline-block;
+     }
+     .header .search-icon{
+          display: inline-block;
+         float: right;
+         justify-content: right;
+         padding-right: 26upx;
+         width: 80upx;
+         text-align: right;
+     }
+      .header .search-icon image{
+          height:40upx;width: 40upx;
+          vertical-align: middle;
+      }
+</style>

+ 1498 - 0
components/chat-panel.vue

@@ -0,0 +1,1498 @@
+<template>
+    <view @tap="ontap">
+        <scroll-view class="chat-detail" :style="{'height':chatheight+'px'}" id="chat" scroll-y="true"
+            :scroll-into-view="scrollToView" @scroll="chatscroll">
+
+            <!-- <view class="chat-detail" id="chat" auto-height="true" > -->
+            <!-- 加载历史数据waitingUI -->
+            <view class="nodata" v-if="showmore && system.chattime<3650"> 仅能查看最近{{system.chattime}}日的聊天记录</view>
+            <view class="loading" v-if="showLoading">
+                <view class="spinner">
+                    <view class="rect1"></view>
+                    <view class="rect2"></view>
+                    <view class="rect3"></view>
+                    <view class="rect4"></view>
+                    <view class="rect5"></view>
+                </view>
+            </view>
+            <view v-for="(m,index) in messagelist_old" :key="'itemold_'+m.msg_id" :id="'item_'+m.msg_id"
+                v-if="m.isloading!=3">
+                <messageitem :item="m" :loading_id="loading_id" :userid="userid" :playVoiceId="playVoiceId"
+                    @redpack_open="redpack_open" @atusuer='atusuer' @clickAvatar='clickAvatar' @msgAction='msgAction'
+                    @play_vedio='play_vedio' @playVoice="playVoice"></messageitem>
+            </view>
+            <view v-for="(m,index) in messagelist" :key="'itemnew_'+m.msg_id" :id="'item_'+m.msg_id"
+                v-if="m.isloading!=3">
+                <view class="nodata" v-if="unreadid==m.msg_id">以下是未读消息</view>
+                <messageitem :item="m" :ref="'messageitem_'+index" :loading_id="loading_id" :unreadid="unreadid"
+                    :userid="userid" :playVoiceId="playVoiceId" @redpack_open="redpack_open" @atusuer='atusuer'
+                    @clickAvatar='clickAvatar' @msgAction='msgAction' @play_vedio='play_vedio' @playVoice="playVoice">
+                </messageitem>
+            </view>
+            <view v-if="sending">
+                <messageitem id="self_send" :item="sendingdata" :userid="userid" :loading_id="loading_id"
+                    @clickAvatar='clickAvatar' @redpack_open="redpack_open" @msgAction='msgAction'
+                    @play_vedio='play_vedio' @playVoice="playVoice"></messageitem>
+            </view>
+            <view id="self_bottom1" class="self_bottom">
+            </view>
+            <view id="self_bottom2" class="self_bottom">
+            </view>
+        </scroll-view>
+        <view class="unread" @tap="scrollto_unread" v-if="unreadnum>0">有<view class="num">{{unreadnum}}</view>条未读消息
+        </view>
+        <view :class="touch_class" :style="touch_style" v-if="touch_menu">
+            <block v-for="(m1,index1) in touch_menulist" :key="'menu_'+index1">
+                <view @tap="tap_menu(m1.type)">{{m1.text}}</view>
+            </block>
+        </view>
+        <view class="vedioplay" v-if="videoshow" :style="{'display':videoshow?'inline-block':'none'}">
+            <video id="video_play" :src="videosrc" loop="false" autoplay="true" @play="playVedio()" @ended="endVedio()"
+                @pause="pauseVedio()" :poster="poster"></video>
+
+
+            <view class="bottom">
+                <uni-icons type='closeempty' class="icon1" @tap="endVedio()"></uni-icons>
+
+            </view>
+        </view>
+
+
+
+        <redpick v-if="is_redpack_open" :item="redpack_info" @closePick="is_redpack_open=false;"
+            @fresmsg="freshmsg_fromredopen"></redpick>
+        <logoutwords v-if="showlogout" :item="logoutinfo" @sub="logout_sub" @cancle="showlogout=false;"></logoutwords>
+    </view>
+
+
+
+</template>
+
+<script>
+    import {
+        mapState,
+        mapGetters
+    } from 'vuex';
+    import action from '../library/action.js'
+
+    import messageitem from './messageitem.vue'
+    import http from "../library/http.js"
+    import chat from "../library/chat.js"
+    import uniIcons from './uni-icons/uni-icons.vue'
+    import redpick from './get-redpick.vue'
+    import Vue from 'vue';
+    import logoutwords from './logout_words.vue'
+    const innerAudioContext = uni.createInnerAudioContext();
+    let loadStatus = false;
+    let lastMid = '';
+    var windowHeight = uni.getSystemInfoSync().windowHeight;
+    var windowWidth = uni.getSystemInfoSync().windowWidth;
+    var statusBarHeight = uni.getSystemInfoSync().statusBarHeight;
+    var chatheight = windowHeight - 60;
+    var chattop = 0;
+    // #ifndef APP-PLUS
+    var chattop = statusBarHeight + 45;
+    var windowWidth = uni.getSystemInfoSync().screenHeight;
+    var chatheight = uni.getSystemInfoSync().windowHeight - chattop - 60;
+    // #endif
+
+    function timestampToTime(timestamp) {
+        var date = new Date(timestamp * 1000); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
+        var Y = date.getFullYear();
+        var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1);
+        var D = date.getDate();
+        var h = date.getHours();
+        var m = date.getMinutes();
+        var s = date.getSeconds();
+        if (D < 10) D = '0' + D;
+        if (h < 10) h = '0' + h;
+        if (m < 10) m = '0' + m;
+        if (s < 10) s = '0' + s;
+        return Y + '-' + M + '-' + D + ' ' + h + ':' + m + ':' + s;
+    }
+
+    export default {
+        components: {
+            uniIcons,
+            messageitem,
+            redpick,
+            logoutwords
+
+        },
+        props: {
+            storeKey: {
+
+                require: true
+            },
+            boardheight: {
+                type: Number,
+                default: 0
+            },
+            manager: {
+                type: [Number, String, Object, Boolean],
+                default: 0
+            },
+            thistype: {
+                default: '',
+            },
+            sending: {
+                type: Boolean,
+                default: false
+            },
+            sendingdata: {
+
+                default: {}
+            },
+            no_add: {
+                type: Boolean,
+                default: false
+            },
+            atme: {
+                default: 0
+            },
+            at_msg_id: {
+                default: 0
+            }
+
+        },
+        data() {
+            return {
+
+                chatheight: chatheight,
+                chattop: chattop,
+                panelheight: chatheight,
+                paddingtop: 0,
+                scrollToView: 'self_bottom2',
+                scrollAnimation: true,
+                showLoading: false,
+                playVoiceId: '',
+                isizes: {},
+                pageHeight: 0,
+                contentViewHeight: 0,
+                footViewHeight: 90,
+                mitemHeight: 0,
+                scrollTop: 0,
+                letterDetails: [],
+                senderheight: 0,
+                hide_list: '',
+                loading_id: 0,
+                playVedioId: '',
+                videoshow: false,
+                videosrc: "",
+                video_playing: false,
+                video_end: false,
+                poster: null,
+                isbottom: false,
+                pagemaxtop: 0,
+                isscroll: false,
+                pagetop: 0,
+                storeId: 0,
+                isgroup: 1,
+                page: 0,
+                pagenum: 0,
+                userid: parseInt(uni.getStorageSync('access_token')),
+                isfrist: 0,
+                oldheight: 0,
+                lastmessage: [],
+                oldlength: 0,
+                showmore: false,
+                touch_menu: false,
+                touch_style: "",
+                touch_class: 'touch_menu',
+                touch_menulist: [],
+                touch_time: 0,
+                touch_timer: null,
+                message: [],
+                touch_item: null,
+                isfristload: true,
+                maxheight: 0,
+                msg_id1: 0,
+                messagelist: uni.getStorageSync(uni.getStorageSync('access_token') + "_chat_" + this.storeKey),
+                messagelist_old: [],
+                isupdate: false,
+                lastscroll: 0,
+                scrollpos: 'down',
+                unreadid: 0,
+                unreadnum: 0,
+                redpack_info: {},
+                is_redpack_open: false,
+                showlogout: false,
+                logoutinfo: {},
+                keyboardheight: 0,
+                system: uni.getStorageSync('system')
+
+            };
+        },
+
+        mounted() {
+
+            uni.setStorageSync('storeykey', 'chat');
+            if (this.atme == 1 && this.at_msg_id > 0) {
+
+                this.scrolltoAtme();
+            } else {
+                this.isfristload = false;
+            }
+
+            this.scrollToBottom(0);
+
+            this.storeId = this.storeKey.substr(1, this.storeKey.length - 1);
+
+            if (this.storeKey.indexOf('G') > -1) {
+                this.isgroup = 1;
+                //群组消息
+                this.group_read(this.storeId);
+
+            } else {
+                this.isgroup = 0;
+                this.user_read(this.storeId);
+
+                //私人消息
+            }
+            //  console.log(this.messagelist.length)
+            // if(this.messagelist.length>30){
+            //     for(var i=0;i<this.messagelist.length-30;i++){
+            //         this.messagelist.splice(i,1);
+            //     }
+
+            //     uni.setStorageSync(uni.getStorageSync('access_token')+"_chat_"+this.storeKey,this.messagelist);
+            // }
+            var that = this;
+            that.messageslist(0);
+
+
+            var that = this;
+            this.$socket.on('chat', (res) => {
+
+                this.sendmsg(res);
+            })
+
+
+            // #ifdef APP-PLUS
+            var that = this;
+            setTimeout(function() {
+                var wh = uni.getSystemInfoSync().screenHeight;
+                var ch = wh - statusBarHeight - 105;
+                if (ch < that.chatheight) that.chatheight = ch;
+                else {
+                    var wh = uni.getSystemInfoSync().windowHeight;
+                    var ch = wh - 60;
+                    that.chatheight = ch;
+                }
+            }, 1000)
+            uni.onKeyboardHeightChange(res => {
+
+                if (res.height > 0) {
+                    that.scrollToBottom();
+                }
+                this.chatheight = this.panelheight - res.height;
+                this.$forceUpdate();
+
+                this.keyboardheight = res.height;
+                // console.log(this.chatheight);
+                // console.log(this.panelheight,this.maxheight)
+                // if(this.panelheight<=this.maxheight  && this.messagelist.length<=6){
+                //     // that.paddingtop=res.height;
+                //     // that.$forceUpdate();
+                // }
+            })
+            // #endif
+
+
+
+
+
+            // console.log(message)
+        },
+        destroyed() {
+            this.$socket.off('chat');
+            uni.setStorageSync('storeykey', "index");
+            if (this.isgroup == 1) {
+                this.group_read(this.storeId);
+
+            } else {
+                this.user_read(this.storeId);
+            }
+        },
+        computed: {},
+
+        methods: {
+            redpack_open(m) {
+                this.redpack_info = m;
+                this.is_redpack_open = true;
+
+            },
+            scrolltoAtme() {
+                if (this.atme == 1 && this.at_msg_id > 0 && this.isfristload == true) {
+                    this.scrollToView = 'item_' + this.at_msg_id;
+                    this.isfristload = false;
+                }
+
+            },
+
+            sendmsg(res) {
+                var res = chat.push(res, 'chat');
+                if (res != false) {
+                    //  console.log(res.msglist.length)
+                    this.$store.commit('chat/update_msglist', res.msglist);
+                }
+                this.freshmsg()
+
+            },
+            freshmsg() {
+                this.messagelist = uni.getStorageSync(this.userid + "_chat_" + this.storeKey);
+
+            },
+            freshmsg_fromredopen(e) {
+                //this.messagelist='';
+                this.freshmsg();
+                // var index=this.messagelist.findIndex(v => v.msg_id == e.msg_id);
+                // console.log(index)
+                // this.$set(this.messagelist,index,e)
+
+
+            },
+
+            isindexhtml(str) {
+                var arr = ['<br', '&nbsp;', "<div", "<span"];
+                str = str.toString();
+                for (var i = 0; i < arr.length; i++) {
+                    //console.log(str,arr[i])
+                    if (str.indexOf(arr[i]) > -1) return true;
+                }
+                return false;
+            },
+
+            getautoheight() {
+                // console.log(this.oldheight);
+                this.showLoading = false;
+                var that = this;
+                setTimeout(function() {
+                    if (this.pagenum > 0)
+                        that.scrollToView = 'item_'.that.msg_id1;
+                }, 200)
+
+            },
+
+
+            message_format(data) {
+                var messagedata = [];
+                if (data.length > 0) {
+                    for (var i = 0; i < data.length; i++) {
+                        var item = data[i];
+
+                        try {
+                            if (item.type == 'time') {
+                                var temp = {
+                                    type: 'tips',
+                                    message: {
+                                        content: item.content,
+                                        type: 'tips'
+                                    },
+                                    'msg_id': item.id,
+                                    isloading: 0
+                                };
+                                temp['sender_id'] = item.userid;
+                                temp['sender'] = item.sender;
+                                temp['timestamp'] = item.addtime;
+                                messagedata.push(temp);
+
+                            } else if (item.addtime != undefined && item.addtime > 0) {
+                                var temp = {};
+
+                                temp['_mid'] = 'm' + Math.random().toString(36).substring(2);
+
+                                temp['cache_key'] = this.storeKey;
+
+                                temp['group_id'] = item.groupid;
+
+                                if (this.isgroup == 1) temp['id'] = item.groupid;
+                                else temp['id'] = item.userid;
+
+                                temp['isloading'] = 0;
+                                temp['msg_id'] = item.id;
+                                temp['self'] = item.self;
+                                temp['sender_id'] = item.userid;
+                                temp['sender'] = item.sender;
+                                temp['timestamp'] = item.addtime;
+                                temp['unread'] = 0;
+                                temp['type'] = item.type;
+
+                                temp['message'] = {
+                                    'type': item.type,
+                                    'content': item.content1
+                                };
+
+                                messagedata.push(temp);
+
+                            }
+
+                        } catch (e) {
+                            //TODO handle the exception
+                            /// console.log(e)
+                        }
+                    }
+                }
+
+                return messagedata;
+            },
+            //获取云端消息记录
+            messageslist(totime) {
+                var lists = [];
+                var time1 = (new Date()).getTime() / 1000 - 7 * 24 * 3600;
+                if (totime < 1) {
+                    var isfrist = true;
+                    totime = parseInt((new Date()).getTime() / 1000);
+                } else {
+                    var isfrist = false;
+                    if (this.showLoading == true) return false;
+                }
+                var storekey = this.storeKey
+                var postdata = {
+                    id: parseInt(this.storeId),
+                    userid: parseInt(this.userid),
+                    isgroup: this.isgroup,
+                    totime: totime
+                };
+
+                var that = this;
+
+                http.setWait(false).get('group.php?act=messages2', postdata).then(res => {
+
+                    if (res.code == 200) {
+
+                        //     console.log(res);
+                        var data = res.data;
+                        var messagedata = this.message_format(data);
+                        if (isfrist == true) {
+                            if (messagedata.length < 1) {
+                                this.messagelist = [];
+                                this.showmore = true;
+                            }
+                            uni.setStorageSync(this.userid + "_chat_" + this.storeKey, messagedata);
+                            this.freshmsg();
+
+                            var that = this;
+                            setTimeout(function() {
+
+                                if (that.atme == 1 && that.at_msg_id > 0) {
+
+                                    that.scrolltoAtme();
+                                } else
+                                    that.scrollToBottom();
+                                that.isupdate = true;
+                            }, 300)
+
+                        } else {
+
+                            this.showLoading = false;
+                            if (messagedata.length > 0) {
+                                if (this.messagelist_old.length > 0) {
+                                    var scrollToView = 'item_' + this.messagelist_old[0].msg_id;
+                                    this.messagelist_old.unshift(...messagedata)
+                                } else {
+                                    var scrollToView = 'item_' + this.messagelist[0].msg_id;
+                                    this.messagelist_old = messagedata;
+                                }
+
+                                this.showmore = false;
+                                var that = this;
+                                setTimeout(function() {
+                                    that.scrollToView = scrollToView
+                                }, 200)
+                            } else {
+                                this.showmore = true;
+                            }
+                        }
+
+                    }
+
+                })
+            },
+
+
+
+            update_message(data) {
+                var isin = 0;
+                for (var i = this.messagelist.length - 1; i >= 0; i--) {
+                    var item = this.messagelist[i];
+                    if (parseInt(item.msg_id) == parseInt(data.msg.msg_id)) {
+                        return false;
+                    }
+                }
+
+                var messageold = uni.getStorageSync(this.userid + "_chatold_" + this.storeKey);
+                for (var i = messageold.length - 1; i >= 0; i--) {
+                    var item = messageold[i];
+                    if (parseInt(item.msg_id) == parseInt(data.msg.msg_id)) {
+                        return false;
+                    }
+                }
+                var message = messageold.concat(this.messagelist);
+
+
+            },
+            //设置群未读消息
+            group_read(group_id) {
+                this.$store.commit('chat/clearunread', this.storeKey);
+
+
+            },
+            user_read(userid) {
+
+                this.$store.commit('chat/clearunread', this.storeKey);
+
+
+            },
+            scrollto_unread() {
+                this.scrollToView = "item_" + this.unreadid;
+                this.unreadid = 0;
+                this.unreadnum = 0;
+            },
+            chatscroll(e) {
+
+                // if(this.keyboardheight>0) uni.hideKeyboard();         
+                this.touch_menu = false;
+                var top = e.detail.scrollTop;
+                this.maxheight = e.detail.scrollHeight;
+                if (top > this.maxheight) this.maxheight = top;
+
+
+                if (top + this.panelheight >= this.maxheight - 100 && top > 0) {
+                    this.isbottom = true;
+                    this.unreadid = 0;
+                    this.unreadnum = 0;
+                } else this.isbottom = false;
+
+                if (top > this.lastscroll) this.scrollpos = 'down';
+                else this.scrollpos = 'up';
+                // console.log(this.scrollpos,this.isbottom);
+
+                this.lastscroll = top;
+                if (top < 50 && this.isfristload == false && this.isupdate == true) {
+                    if (this.messagelist_old.length > 0) {
+                        var msg = this.messagelist_old[0];
+                    } else {
+                        var msg = this.messagelist[0];
+                    }
+                    if (msg.timestamp == undefined) var totime = msg.msg_id;
+                    else var totime = msg.timestamp;
+                    if (totime > 0) totime = totime - 1;
+
+                    this.messageslist(parseInt(totime));
+                    this.showLoading = true;
+
+
+                }
+            },
+
+            setAutoHeight(e) {
+                //console.log(e);
+                this.touch_menu = false;
+            },
+
+            vedio_show(m) {
+
+                if (m.isloading == 1) {
+                    return m.message.content.src;
+                } else
+                    return this.image_cache(m.message.content.src)
+
+            },
+
+            poster_show(m) {
+                if (m.isloading == 1) {
+                    return false;
+                } else {
+
+                    var src = m.message.content.src;
+                    try {
+                        var arr = src.split('/');
+                        var filename = arr[arr.length - 1];
+                        var arr1 = filename.split('.');
+                        var newname = arr1[0] + "_video.jpg";
+                        var poster = src.replace(filename, newname);
+                        return poster;
+                    } catch (e) {
+                        //TODO handle the exception
+                        return "/static/img/vediobanner.jpg";
+                    }
+
+
+                }
+
+
+            },
+
+
+            scrollToBottom: function() {
+                var that = this;
+
+                setTimeout(function() {
+                    if (that.scrollToView == "self_bottom1")
+                        that.scrollToView = "self_bottom2";
+                    else {
+                        that.scrollToView = "self_bottom1";
+                    }
+                    that.pagenum = 0;
+                    that.isbottom = true;
+                    that.unreadnum = 0;
+                    that.unreadid = 0;
+                }, 200)
+            },
+
+
+            play_vedio(m) {
+                this.videoshow = true;
+                this.videosrc = this.vedio_show(m);
+                this.poster = this.poster_show(m);
+                this.video_playing = false;
+
+                var that = this;
+                setTimeout(function() {
+                    var videoContext = uni.createVideoContext('video_play');
+                    if (that.video_playing == false) {
+                        //  videoContext.requestFullScreen(0);
+                        // setTimeout(function(){videoContext.play()},100);
+                        that.playVedioId = m._mid;
+                        videoContext.play();
+                    }
+                }, 500)
+            },
+
+            //结束播放
+            endVedio() {
+                this.video_end = true;
+                var videoContext = uni.createVideoContext('video_play');
+                // videoContext.exitFullScreen();
+                videoContext.pause();
+                this.playVedioId = "";
+                this.videosrc = "";
+                this.pauseVedio();
+                var that = this;
+                that.video_end = false;
+
+
+            },
+            playVedio() {
+
+                this.video_playing = true;
+                this.video_end = false;
+                this.videoshow = true;
+
+            },
+            pauseVedio() {
+
+                this.video_playing = false;
+                this.videoshow = false;
+            },
+            screenchange() {
+
+
+                if (this.video_playing == true) {
+                    var videoContext = uni.createVideoContext('video_play');
+                    videoContext.exitFullScreen();
+                    videoContext.pause();
+                    this.playVedioId = "";
+                    this.videosrc = "";
+                    this.pauseVedio();
+
+                } else {
+                    if (this.video_end == false) {
+                        var videoContext = uni.createVideoContext('video_play');
+                        videoContext.play();
+                    }
+                }
+
+
+            },
+
+            playVoice(message) {
+
+
+                var that = this;
+
+                var id = message._mid;
+                if (this.playVoiceId == id) {
+
+                    innerAudioContext.stop();
+                    innerAudioContext.src = '';
+                    that.playVoiceId = "";
+                    that.loading_id = 0;
+                    return false;
+
+                }
+
+                if (this.playVoiceId !== '') {
+
+                    innerAudioContext.stop();
+                    innerAudioContext.src = '';
+                    that.playVoiceId = "";
+                    that.loading_id = 0;
+                }
+
+
+
+                // if (this.playVoiceId == '') {
+
+                this.loading_id = id;
+                innerAudioContext.src = this.image_cache(message.message.content.url);
+                innerAudioContext.volume = 1;
+                innerAudioContext.autoplay = true;
+
+                innerAudioContext.onCanplay(function() {
+                    innerAudioContext.play();
+                    that.playVoiceId = id;
+                    that.loading_id = 0;
+                })
+
+                innerAudioContext.onEnded(() => {
+                    innerAudioContext.stop();
+                    innerAudioContext.src = '';
+                    that.playVoiceId = "";
+                    that.loading_id = 0;
+                });
+
+
+            },
+            atusuer(msg) {
+
+                if (msg.sender.id != this.userid) {
+                    let result = {
+                        id: msg.id,
+                        nickname: msg.sender.nickname
+                    }
+
+                    this.$emit('close', result);
+                }
+
+                //  console.log(msg)  ;
+            },
+            clickAvatar(msg) {
+
+
+                if (msg.id > 0) {
+                    var params = {
+                        id: msg.sender.id,
+                        'group_id': msg.group_id,
+                        thistype: this.thistype
+                    };
+                    // console.log(JSON.stringify(msg));
+                    return this.$jump('friend.detail', params)
+                    //this.$emit('click-avatar', this.messages[index]); 
+                } else {
+                    return false;
+                }
+            },
+            toText(msg) {
+                var text = msg.replace(/&nbsp;/g, ' ');
+
+                text = text.replace(/<br>/g, '\n');
+
+                text = text.replace(/<\/?[^>]*>/g, '');
+
+                return text;
+            },
+            copyText(msg) {
+                var message = msg.message;
+                if (message.content.type == 'remind')
+                    var content = message.content.content;
+                else if (message.type == 'url')
+                    var content = message.content.content;
+                else var content = message.content
+                content = this.toText(content);
+
+                uni.setClipboardData({
+                    data: content,
+                    success: function() {
+                        uni.showToast({
+                            title: '复制成功',
+                            icon: 'none'
+
+                        })
+                    }
+                });
+            },
+            ontap() {
+                if (new Date().getTime() - this.touch_time > 1500) this.touch_menu = false;;
+            },
+
+            delete_msg(msg) {
+
+
+                var list = this.messagelist;
+                var isin = 0;
+                var list11 = [];
+                list.forEach(item => {
+
+                    if (parseInt(item.msg_id) == parseInt(msg.msg_id)) {
+                        // item.isloading=3;
+                        isin = 1;
+                    } else {
+
+                        list11.push(item);
+                    }
+                })
+
+                var that = this;
+                if (isin == 1) {
+                    that.messagelist = list11;
+                    uni.setStorageSync(this.userid + "_chat_" + this.storeKey, list11);
+                } else {
+                    var list = this.messagelist_old;
+
+                    var list11 = [];
+                    list.forEach(item => {
+                        if (parseInt(item.msg_id) == parseInt(msg.msg_id)) {
+
+                        } else {
+
+                            list11.push(item);
+                        }
+                    })
+                    that.messagelist_old = list11;
+                }
+
+                var postdata = {
+                    id: msg.msg_id,
+                    userid: this.userid
+                };
+
+                http.setWait(false).get('group.php?act=clearchatlist', postdata).then(res => {
+
+                })
+                //  this.freshmsg();
+
+            },
+            logout_sub(e) {
+                uni.showToast({
+                    icon: 'none',
+                    title: '操作成功'
+                })
+
+            },
+            tap_menu(type) {
+                var msg = this.touch_item;
+
+                uni.showToast({
+                    title: new Date().getTime() - this.touch_time
+                })
+
+                if (new Date().getTime() - this.touch_time > 1000) {
+
+                    this.touch_menu = false;
+                    var that = this;
+                    if(type == 'quote') {
+                        console.log('this.touch_item:',this.touch_item);
+                        this.$emit('chooseQuote',this.touch_item)
+                    }
+                    if (type == "delete") {
+
+                        // this.clearchatlist(msg);
+                        this.delete_msg(msg)
+                    }
+                    if (type == 'copy') {
+                        that.copyText(msg);
+
+                    }
+                    if (type == 'back') {
+                        let data = {
+                            userid: that.userid,
+                            msg_id: msg.msg_id,
+                            type: 'chat_back',
+                            store: that.storeKey
+                        }
+
+                        that.$socket.send(data);
+                    }
+                    if (type == 'at') {
+                        that.atusuer(msg);
+                    }
+                    if (type == 'view') {
+                        that.clickAvatar(msg);
+                    }
+
+                    if (type == 'manage0') {
+                        var data = {
+                            type: 'groupset1',
+                            mode: 'manage',
+                            settype: 0,
+                            group_id: msg.group_id,
+                            userid: msg.sender.id,
+                            from_uid: uni.getStorageSync('access_token')
+                        };
+                        that.$socket.send(data);
+
+                    }
+                    if (type == 'manage1') {
+                        var data = {
+                            type: 'groupset1',
+                            mode: 'manage',
+                            settype: 1,
+                            group_id: msg.group_id,
+                            userid: msg.sender.id,
+                            from_uid: uni.getStorageSync('access_token')
+                        };
+                        that.$socket.send(data);
+                    }
+                    if (type == 'deny0') {
+                        var data = {
+                            type: 'groupset1',
+                            mode: 'deny',
+                            settype: 0,
+                            group_id: msg.group_id,
+                            userid: msg.sender.id,
+                            from_uid: uni.getStorageSync('access_token')
+                        };
+                        that.$socket.send(data);
+
+                    }
+                    if (type == 'deny1') {
+                        var data = {
+                            type: 'groupset1',
+                            mode: 'deny',
+                            settype: 1,
+                            group_id: msg.group_id,
+                            userid: msg.sender.id,
+                            from_uid: uni.getStorageSync('access_token')
+                        };
+                        that.$socket.send(data);
+                    }
+
+                    if (type == 'deleteuser') {
+                        //    var data={type:'deleteGroup',group_id:msg.group_id,userid:msg.id,fromid:uni.getStorageSync('access_token')};
+
+                        // that.$socket.send(data);  
+                        this.showlogout = true;
+                        this.logoutinfo = {
+                            group_id: msg.group_id,
+                            userid: msg.sender.id,
+                            nickname: msg.sender.nickname
+                        };
+                    }
+
+                    if (type == 'manage0' || type == 'manage1' || type == 'deny0' || type == 'deny1' || type ==
+                        'deleteuser') {
+                        uni.showToast({
+                            title: '操作成功',
+                            icon: 'none'
+                        })
+                    }
+
+                }
+
+
+
+            },
+            msgAction(e, msg) {
+                this.touch_item = msg;
+                this.touch_time = new Date().getTime();
+                var user_id = uni.getStorageSync('access_token');
+
+                var that = this;
+                var itemList = [{
+                    type: 'delete',
+                    text: '删除'
+                }];
+                if ((that.manager == 1 && msg.group_id > 0) || (user_id == msg.sender.id && new Date().getTime() /
+                        1000 - (parseInt(msg.timestamp)) <= 120)) {
+
+                    itemList.push({
+                        type: 'back',
+                        text: '撤回消息'
+                    });
+                }
+                if (msg.message.type == 'text' || msg.message.type == 'url') {
+                    itemList = itemList.concat([{
+                        type: 'copy',
+                        text: '复制'
+                    }, {
+                        type: 'quote',
+                        text: '引用'
+                    }])
+                    // itemList.push({
+                    //     type: 'copy',
+                    //     text: '复制'
+                    // });
+                }
+                if(msg.message.type == 'emotion' || msg.message.type == 'image') {
+                    itemList.push({
+                       type: 'quote',
+                       text: '引用'
+                    });
+                }
+
+
+                if (that.manager == 1 && msg.group_id > 0 && user_id != msg.sender.id) {
+                    var users = uni.getStorageSync(msg.group_id + '_group_members');
+                    var thistype = 'user';
+                    var usertype = "user";
+                    var is_deny = 0;
+                    var isin = 0;
+                    for (var i = 0; i < users.length; i++) {
+
+                        if (users[i].id == user_id) thistype = users[i].type;
+                        if (users[i].id == msg.sender.id) {
+                            usertype = users[i].type;
+                            is_deny = users[i].is_deny;
+                            isin = 1;
+                        }
+
+                    }
+                }
+                if (thistype == 'owner') {
+
+                    if (usertype == 'manager') itemList.push({
+                        'type': 'manage0',
+                        'text': '取消管理'
+                    });
+                    else itemList.push({
+                        'type': 'manage1',
+                        'text': '设为管理'
+                    });
+                    if (is_deny == 1) itemList.push({
+                        'type': 'deny0',
+                        'text': '解除禁言'
+                    });
+                    else itemList.push({
+                        'type': 'deny1',
+                        'text': '禁言'
+                    });
+                    if (isin == 1) itemList.push({
+                        'type': 'deleteuser',
+                        'text': '踢人'
+                    });
+                }
+                if (thistype == 'manager' && usertype == 'user') {
+                    if (is_deny == 1) itemList.push({
+                        'type': 'deny0',
+                        'text': '解除禁言'
+                    });
+                    else itemList.push({
+                        'type': 'deny1',
+                        'text': '禁言'
+                    });
+                    if (isin == 1) itemList.push({
+                        'type': 'deleteuser',
+                        'text': '踢人'
+                    });
+                }
+                // itemList.push({type:'view',text:'查看名片'});
+                this.touch_menulist = itemList;
+
+                this.touch_menu = 0;
+                var y = e.changedTouches[0].clientY + 50;
+                var yy = "top";
+                var xx = "left";
+                var top = 0;
+                var classname = "touch_menu";
+                var len = itemList.length;
+
+                if (y < 160) {
+                    yy = 'top'
+                    top = y - 10
+                    classname += ' top';
+                } else {
+                    top = windowHeight - y + 85;
+                    yy = 'bottom';
+                    classname += ' bottom'
+                }
+
+
+                if (msg.sender.id == this.userid) {
+                    var xx = "right";
+                    //var x=windowWidth-x;
+                    classname += " right";
+                } else classname += " left";
+
+                this.touch_class = classname;
+
+                this.touch_style = yy + ":" + top + "px";
+
+                setTimeout(function() {
+                    that.touch_menu = true;
+                }, 100)
+                clearTimeout(this.touch_timer);
+                this.touch_timer = setTimeout(function() {
+                    that.touch_menu = 0;
+                }, 5000)
+
+            },
+        },
+        watch: {
+
+            messagelist(val) {
+
+                if (val.length > 0) {
+                    var last = val[val.length - 1];
+                    if (last.msg_id != this.lastmessage.msg_id) {
+                        //this.pagenum=0;
+                        //   console.log(last);
+                        if (last.self == 1 && this.sendingdata._mid == last._mid || last.message.type == 'tips') {
+                            this.$emit('setSending', false);
+                            this.scrollToBottom();
+                        } else {
+                            if (this.isbottom == true) {
+                                this.scrollToBottom();
+                            } else {
+                                if (last.self != 1) {
+                                    this.unreadnum++;
+                                    if (this.unreadid == 0) this.unreadid = last.msg_id;
+                                }
+
+                            }
+                        }
+
+                    }
+                    this.lastmessage = last;
+                } else {
+                    this.showmore = true;
+                }
+                var that = this;
+
+                this.$store.commit('chat/clearunread', this.storeKey);
+                //  //创建后调用回到底部方法 
+            },
+            sending(val) {
+
+                if (val != false) {
+                    this.scrollToBottom();
+                }
+            }
+        }
+
+    }
+</script>
+
+<style lang="scss" scoped>
+    $redpackBgColor: #EF9638;
+
+    $reverseTextBgColor: #3388ff;
+
+
+    $voiceBgColor: #fafafa;
+    $voiceColor: #000;
+    $reverseVoiceBgColor: #3388ff;
+    $reverseVoiceColor: #fff;
+
+    .chat-detail {
+        width: 100%;
+        padding: 0px 0px;
+        position: fixed;
+        z-index: 1;
+        left: 0px;
+        bottom: 60px;
+        width: 100%;
+
+
+    }
+
+    .unread {
+        position: fixed;
+        z-index: 999s;
+        right: 5px;
+        bottom: 75px;
+        height: 25px;
+        line-height: 25px;
+        padding: 0px 10px;
+        border-radius: 10px;
+        background-color: #eee;
+        color: #333;
+        font-size: 14px;
+        clear: both;
+    }
+
+    .unread .num {
+        color: #FF0000;
+        padding: 0px 2px;
+        display: inline-block;
+        font-weight: 600;
+    }
+
+    .self_bottom {
+        height: 10px;
+        display: block;
+        clear: both;
+
+        margin-top: 10px;
+    }
+
+    .nodata {
+        height: 30px;
+        line-height: 30px;
+        text-align: center;
+        font-size: 12px;
+        color: #ccc;
+    }
+
+    .vedioplay {
+        position: fixed;
+        z-index: 9999999999;
+        background-color: #000;
+        top: 0px;
+        width: 100%;
+        left: 0px;
+        height: 100vh;
+        line-height: calc(100vh - 45px);
+
+        vertical-align: middle;
+        display: table-cell;
+    }
+
+    .vedioplay video {
+        vertical-align: middle;
+        width: 100%;
+        display: inline-block;
+
+    }
+
+    .vedioplay .bottom {
+
+        position: absolute;
+        z-index: 999;
+        bottom: 10px;
+        left: 0px;
+        ;
+        width: 100%;
+        height: 50px;
+        line-height: 50px;
+        color: #fff;
+        text-align: center;
+    }
+
+    .vedioplay .bottom .icon1 {
+        font-size: 36px !important;
+        color: #eee !important;
+    }
+
+
+
+
+
+    .vedio {
+        display: inline-block;
+        float: left;
+        width: calc(100% - 200upx);
+        border-radius: 10upx;
+        padding-top: 0upx;
+        padding-bottom: 0upx;
+        overflow: hidden;
+        position: relative;
+
+        z-index: 0;
+    }
+
+    .vedio .timeshow {
+        position: absolute;
+        right: 12upx;
+        bottom: 16upx;
+        font-size: 24upx;
+        color: #FFFFFF;
+        z-index: 999999999;
+    }
+
+    .vedio .play_btn {
+        position: absolute;
+        height: 80upx;
+        width: 80upx;
+        left: calc(50% - 40upx);
+        top: calc(50% - 40upx);
+        z-index: 999999999;
+    }
+
+    .vedio_src {
+        max-width: 100%;
+        border-radius: 10upx;
+        max-height: 70vw;
+        z-index: 0 !important;
+    }
+
+    .touch_menu {
+        position: fixed;
+        z-index: 9999;
+        background-color: rgba(0, 0, 0, 0.8);
+        border: 1px #000 solid;
+        border-radius: 10px;
+        padding: 0px 10px;
+        line-height: 30px;
+        max-width: 100%;
+
+        font-size: 14px;
+        min-height: 40px;
+    }
+
+    .touch_menu view {
+        height: 45px;
+        line-height: 45px;
+        color: #fff;
+        display: inline-block;
+        padding: 0px 10px;
+        text-align: center;
+        border-right: 1px #999 solid;
+    }
+
+    .touch_menu view:last-child {
+        border-width: 0px;
+        ;
+    }
+
+    .touch_menu.right view {
+        padding: 0px 15px;
+    }
+
+    .touch_menu::before {
+        display: block;
+        content: " ";
+        position: absolute;
+
+
+        width: 0;
+        height: 0;
+        border-style: solid;
+
+    }
+
+    .touch_menu.top::before {
+        top: -12px;
+
+        border-width: 0px 12px 12px 12px;
+        border-color: #000 transparent;
+    }
+
+    .touch_menu.bottom::before {
+
+        bottom: -24px;
+        border-width: 12px;
+        border-color: #000 transparent transparent transparent;
+    }
+
+    .touch_menu.left {
+        text-align: left;
+        left: 3px;
+    }
+
+    .touch_menu.right {
+        text-align: right;
+        right: 20px;
+    }
+
+    .touch_menu.left::before {
+        left: 70px;
+
+    }
+
+    .touch_menu.right::before {
+
+        right: 50px;
+
+    }
+
+
+
+    .first {
+        width: 2px;
+        height: 2px;
+        background: #fff;
+        top: 22px;
+        left: 22px;
+    }
+
+    .second {
+        width: 12px;
+        height: 12px;
+        top: 17px;
+        left: 17px;
+    }
+
+    .third {
+        width: 20px;
+        height: 20px;
+        top: 12px;
+        left: 12px;
+    }
+
+    @keyframes fadeInOut {
+        0% {
+            opacity: 0;
+        }
+
+        100% {
+            opacity: 1;
+        }
+    }
+
+    /**/
+    .loading {
+        //loading动画
+        display: flex;
+        justify-content: center;
+
+        @keyframes stretchdelay {
+
+            0%,
+            40%,
+            100% {
+                transform: scaleY(0.6);
+            }
+
+            20% {
+                transform: scaleY(1.0);
+            }
+        }
+
+        .spinner {
+            margin: 20upx 0;
+            width: 60upx;
+            height: 25px;
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+
+            view {
+                background-color: #ff9800;
+                height: 25px;
+                width: 3px;
+                border-radius: 3px;
+                animation: stretchdelay 1.2s infinite ease-in-out;
+            }
+
+            .rect2 {
+                animation-delay: -1.1s;
+            }
+
+            .rect3 {
+                animation-delay: -1.0s;
+            }
+
+            .rect4 {
+                animation-delay: -0.9s;
+            }
+
+            .rect5 {
+                animation-delay: -0.8s;
+            }
+        }
+    }
+
+    image {
+        will-change: transform;
+    }
+
+
+
+    .loadingbox {
+        height: 80upx;
+        width: 70upx;
+        justify-content: center;
+        line-height: 80upx;
+        display: inline-block;
+        text-align: center;
+        vertical-align: top;
+    }
+
+    .loadingbox image {
+        height: 36upx;
+        width: 36upx;
+        vertical-align: middle;
+    }
+</style>

+ 12548 - 0
components/city-data/area.js

@@ -0,0 +1,12548 @@
+/* eslint-disable */
+var areaData = [
+	[
+		[{
+				"label": "东城区",
+				"value": "110101"
+			},
+			{
+				"label": "西城区",
+				"value": "110102"
+			},
+			{
+				"label": "朝阳区",
+				"value": "110105"
+			},
+			{
+				"label": "丰台区",
+				"value": "110106"
+			},
+			{
+				"label": "石景山区",
+				"value": "110107"
+			},
+			{
+				"label": "海淀区",
+				"value": "110108"
+			},
+			{
+				"label": "门头沟区",
+				"value": "110109"
+			},
+			{
+				"label": "房山区",
+				"value": "110111"
+			},
+			{
+				"label": "通州区",
+				"value": "110112"
+			},
+			{
+				"label": "顺义区",
+				"value": "110113"
+			},
+			{
+				"label": "昌平区",
+				"value": "110114"
+			},
+			{
+				"label": "大兴区",
+				"value": "110115"
+			},
+			{
+				"label": "怀柔区",
+				"value": "110116"
+			},
+			{
+				"label": "平谷区",
+				"value": "110117"
+			},
+			{
+				"label": "密云区",
+				"value": "110118"
+			},
+			{
+				"label": "延庆区",
+				"value": "110119"
+			}
+		]
+	],
+	[
+		[{
+				"label": "和平区",
+				"value": "120101"
+			},
+			{
+				"label": "河东区",
+				"value": "120102"
+			},
+			{
+				"label": "河西区",
+				"value": "120103"
+			},
+			{
+				"label": "南开区",
+				"value": "120104"
+			},
+			{
+				"label": "河北区",
+				"value": "120105"
+			},
+			{
+				"label": "红桥区",
+				"value": "120106"
+			},
+			{
+				"label": "东丽区",
+				"value": "120110"
+			},
+			{
+				"label": "西青区",
+				"value": "120111"
+			},
+			{
+				"label": "津南区",
+				"value": "120112"
+			},
+			{
+				"label": "北辰区",
+				"value": "120113"
+			},
+			{
+				"label": "武清区",
+				"value": "120114"
+			},
+			{
+				"label": "宝坻区",
+				"value": "120115"
+			},
+			{
+				"label": "滨海新区",
+				"value": "120116"
+			},
+			{
+				"label": "宁河区",
+				"value": "120117"
+			},
+			{
+				"label": "静海区",
+				"value": "120118"
+			},
+			{
+				"label": "蓟州区",
+				"value": "120119"
+			}
+		]
+	],
+	[
+		[{
+				"label": "长安区",
+				"value": "130102"
+			},
+			{
+				"label": "桥西区",
+				"value": "130104"
+			},
+			{
+				"label": "新华区",
+				"value": "130105"
+			},
+			{
+				"label": "井陉矿区",
+				"value": "130107"
+			},
+			{
+				"label": "裕华区",
+				"value": "130108"
+			},
+			{
+				"label": "藁城区",
+				"value": "130109"
+			},
+			{
+				"label": "鹿泉区",
+				"value": "130110"
+			},
+			{
+				"label": "栾城区",
+				"value": "130111"
+			},
+			{
+				"label": "井陉县",
+				"value": "130121"
+			},
+			{
+				"label": "正定县",
+				"value": "130123"
+			},
+			{
+				"label": "行唐县",
+				"value": "130125"
+			},
+			{
+				"label": "灵寿县",
+				"value": "130126"
+			},
+			{
+				"label": "高邑县",
+				"value": "130127"
+			},
+			{
+				"label": "深泽县",
+				"value": "130128"
+			},
+			{
+				"label": "赞皇县",
+				"value": "130129"
+			},
+			{
+				"label": "无极县",
+				"value": "130130"
+			},
+			{
+				"label": "平山县",
+				"value": "130131"
+			},
+			{
+				"label": "元氏县",
+				"value": "130132"
+			},
+			{
+				"label": "赵县",
+				"value": "130133"
+			},
+			{
+				"label": "石家庄高新技术产业开发区",
+				"value": "130171"
+			},
+			{
+				"label": "石家庄循环化工园区",
+				"value": "130172"
+			},
+			{
+				"label": "辛集市",
+				"value": "130181"
+			},
+			{
+				"label": "晋州市",
+				"value": "130183"
+			},
+			{
+				"label": "新乐市",
+				"value": "130184"
+			}
+		],
+		[{
+				"label": "路南区",
+				"value": "130202"
+			},
+			{
+				"label": "路北区",
+				"value": "130203"
+			},
+			{
+				"label": "古冶区",
+				"value": "130204"
+			},
+			{
+				"label": "开平区",
+				"value": "130205"
+			},
+			{
+				"label": "丰南区",
+				"value": "130207"
+			},
+			{
+				"label": "丰润区",
+				"value": "130208"
+			},
+			{
+				"label": "曹妃甸区",
+				"value": "130209"
+			},
+			{
+				"label": "滦县",
+				"value": "130223"
+			},
+			{
+				"label": "滦南县",
+				"value": "130224"
+			},
+			{
+				"label": "乐亭县",
+				"value": "130225"
+			},
+			{
+				"label": "迁西县",
+				"value": "130227"
+			},
+			{
+				"label": "玉田县",
+				"value": "130229"
+			},
+			{
+				"label": "唐山市芦台经济技术开发区",
+				"value": "130271"
+			},
+			{
+				"label": "唐山市汉沽管理区",
+				"value": "130272"
+			},
+			{
+				"label": "唐山高新技术产业开发区",
+				"value": "130273"
+			},
+			{
+				"label": "河北唐山海港经济开发区",
+				"value": "130274"
+			},
+			{
+				"label": "遵化市",
+				"value": "130281"
+			},
+			{
+				"label": "迁安市",
+				"value": "130283"
+			}
+		],
+		[{
+				"label": "海港区",
+				"value": "130302"
+			},
+			{
+				"label": "山海关区",
+				"value": "130303"
+			},
+			{
+				"label": "北戴河区",
+				"value": "130304"
+			},
+			{
+				"label": "抚宁区",
+				"value": "130306"
+			},
+			{
+				"label": "青龙满族自治县",
+				"value": "130321"
+			},
+			{
+				"label": "昌黎县",
+				"value": "130322"
+			},
+			{
+				"label": "卢龙县",
+				"value": "130324"
+			},
+			{
+				"label": "秦皇岛市经济技术开发区",
+				"value": "130371"
+			},
+			{
+				"label": "北戴河新区",
+				"value": "130372"
+			}
+		],
+		[{
+				"label": "邯山区",
+				"value": "130402"
+			},
+			{
+				"label": "丛台区",
+				"value": "130403"
+			},
+			{
+				"label": "复兴区",
+				"value": "130404"
+			},
+			{
+				"label": "峰峰矿区",
+				"value": "130406"
+			},
+			{
+				"label": "肥乡区",
+				"value": "130407"
+			},
+			{
+				"label": "永年区",
+				"value": "130408"
+			},
+			{
+				"label": "临漳县",
+				"value": "130423"
+			},
+			{
+				"label": "成安县",
+				"value": "130424"
+			},
+			{
+				"label": "大名县",
+				"value": "130425"
+			},
+			{
+				"label": "涉县",
+				"value": "130426"
+			},
+			{
+				"label": "磁县",
+				"value": "130427"
+			},
+			{
+				"label": "邱县",
+				"value": "130430"
+			},
+			{
+				"label": "鸡泽县",
+				"value": "130431"
+			},
+			{
+				"label": "广平县",
+				"value": "130432"
+			},
+			{
+				"label": "馆陶县",
+				"value": "130433"
+			},
+			{
+				"label": "魏县",
+				"value": "130434"
+			},
+			{
+				"label": "曲周县",
+				"value": "130435"
+			},
+			{
+				"label": "邯郸经济技术开发区",
+				"value": "130471"
+			},
+			{
+				"label": "邯郸冀南新区",
+				"value": "130473"
+			},
+			{
+				"label": "武安市",
+				"value": "130481"
+			}
+		],
+		[{
+				"label": "桥东区",
+				"value": "130502"
+			},
+			{
+				"label": "桥西区",
+				"value": "130503"
+			},
+			{
+				"label": "邢台县",
+				"value": "130521"
+			},
+			{
+				"label": "临城县",
+				"value": "130522"
+			},
+			{
+				"label": "内丘县",
+				"value": "130523"
+			},
+			{
+				"label": "柏乡县",
+				"value": "130524"
+			},
+			{
+				"label": "隆尧县",
+				"value": "130525"
+			},
+			{
+				"label": "任县",
+				"value": "130526"
+			},
+			{
+				"label": "南和县",
+				"value": "130527"
+			},
+			{
+				"label": "宁晋县",
+				"value": "130528"
+			},
+			{
+				"label": "巨鹿县",
+				"value": "130529"
+			},
+			{
+				"label": "新河县",
+				"value": "130530"
+			},
+			{
+				"label": "广宗县",
+				"value": "130531"
+			},
+			{
+				"label": "平乡县",
+				"value": "130532"
+			},
+			{
+				"label": "威县",
+				"value": "130533"
+			},
+			{
+				"label": "清河县",
+				"value": "130534"
+			},
+			{
+				"label": "临西县",
+				"value": "130535"
+			},
+			{
+				"label": "河北邢台经济开发区",
+				"value": "130571"
+			},
+			{
+				"label": "南宫市",
+				"value": "130581"
+			},
+			{
+				"label": "沙河市",
+				"value": "130582"
+			}
+		],
+		[{
+				"label": "竞秀区",
+				"value": "130602"
+			},
+			{
+				"label": "莲池区",
+				"value": "130606"
+			},
+			{
+				"label": "满城区",
+				"value": "130607"
+			},
+			{
+				"label": "清苑区",
+				"value": "130608"
+			},
+			{
+				"label": "徐水区",
+				"value": "130609"
+			},
+			{
+				"label": "涞水县",
+				"value": "130623"
+			},
+			{
+				"label": "阜平县",
+				"value": "130624"
+			},
+			{
+				"label": "定兴县",
+				"value": "130626"
+			},
+			{
+				"label": "唐县",
+				"value": "130627"
+			},
+			{
+				"label": "高阳县",
+				"value": "130628"
+			},
+			{
+				"label": "容城县",
+				"value": "130629"
+			},
+			{
+				"label": "涞源县",
+				"value": "130630"
+			},
+			{
+				"label": "望都县",
+				"value": "130631"
+			},
+			{
+				"label": "安新县",
+				"value": "130632"
+			},
+			{
+				"label": "易县",
+				"value": "130633"
+			},
+			{
+				"label": "曲阳县",
+				"value": "130634"
+			},
+			{
+				"label": "蠡县",
+				"value": "130635"
+			},
+			{
+				"label": "顺平县",
+				"value": "130636"
+			},
+			{
+				"label": "博野县",
+				"value": "130637"
+			},
+			{
+				"label": "雄县",
+				"value": "130638"
+			},
+			{
+				"label": "保定高新技术产业开发区",
+				"value": "130671"
+			},
+			{
+				"label": "保定白沟新城",
+				"value": "130672"
+			},
+			{
+				"label": "涿州市",
+				"value": "130681"
+			},
+			{
+				"label": "定州市",
+				"value": "130682"
+			},
+			{
+				"label": "安国市",
+				"value": "130683"
+			},
+			{
+				"label": "高碑店市",
+				"value": "130684"
+			}
+		],
+		[{
+				"label": "桥东区",
+				"value": "130702"
+			},
+			{
+				"label": "桥西区",
+				"value": "130703"
+			},
+			{
+				"label": "宣化区",
+				"value": "130705"
+			},
+			{
+				"label": "下花园区",
+				"value": "130706"
+			},
+			{
+				"label": "万全区",
+				"value": "130708"
+			},
+			{
+				"label": "崇礼区",
+				"value": "130709"
+			},
+			{
+				"label": "张北县",
+				"value": "130722"
+			},
+			{
+				"label": "康保县",
+				"value": "130723"
+			},
+			{
+				"label": "沽源县",
+				"value": "130724"
+			},
+			{
+				"label": "尚义县",
+				"value": "130725"
+			},
+			{
+				"label": "蔚县",
+				"value": "130726"
+			},
+			{
+				"label": "阳原县",
+				"value": "130727"
+			},
+			{
+				"label": "怀安县",
+				"value": "130728"
+			},
+			{
+				"label": "怀来县",
+				"value": "130730"
+			},
+			{
+				"label": "涿鹿县",
+				"value": "130731"
+			},
+			{
+				"label": "赤城县",
+				"value": "130732"
+			},
+			{
+				"label": "张家口市高新技术产业开发区",
+				"value": "130771"
+			},
+			{
+				"label": "张家口市察北管理区",
+				"value": "130772"
+			},
+			{
+				"label": "张家口市塞北管理区",
+				"value": "130773"
+			}
+		],
+		[{
+				"label": "双桥区",
+				"value": "130802"
+			},
+			{
+				"label": "双滦区",
+				"value": "130803"
+			},
+			{
+				"label": "鹰手营子矿区",
+				"value": "130804"
+			},
+			{
+				"label": "承德县",
+				"value": "130821"
+			},
+			{
+				"label": "兴隆县",
+				"value": "130822"
+			},
+			{
+				"label": "滦平县",
+				"value": "130824"
+			},
+			{
+				"label": "隆化县",
+				"value": "130825"
+			},
+			{
+				"label": "丰宁满族自治县",
+				"value": "130826"
+			},
+			{
+				"label": "宽城满族自治县",
+				"value": "130827"
+			},
+			{
+				"label": "围场满族蒙古族自治县",
+				"value": "130828"
+			},
+			{
+				"label": "承德高新技术产业开发区",
+				"value": "130871"
+			},
+			{
+				"label": "平泉市",
+				"value": "130881"
+			}
+		],
+		[{
+				"label": "新华区",
+				"value": "130902"
+			},
+			{
+				"label": "运河区",
+				"value": "130903"
+			},
+			{
+				"label": "沧县",
+				"value": "130921"
+			},
+			{
+				"label": "青县",
+				"value": "130922"
+			},
+			{
+				"label": "东光县",
+				"value": "130923"
+			},
+			{
+				"label": "海兴县",
+				"value": "130924"
+			},
+			{
+				"label": "盐山县",
+				"value": "130925"
+			},
+			{
+				"label": "肃宁县",
+				"value": "130926"
+			},
+			{
+				"label": "南皮县",
+				"value": "130927"
+			},
+			{
+				"label": "吴桥县",
+				"value": "130928"
+			},
+			{
+				"label": "献县",
+				"value": "130929"
+			},
+			{
+				"label": "孟村回族自治县",
+				"value": "130930"
+			},
+			{
+				"label": "河北沧州经济开发区",
+				"value": "130971"
+			},
+			{
+				"label": "沧州高新技术产业开发区",
+				"value": "130972"
+			},
+			{
+				"label": "沧州渤海新区",
+				"value": "130973"
+			},
+			{
+				"label": "泊头市",
+				"value": "130981"
+			},
+			{
+				"label": "任丘市",
+				"value": "130982"
+			},
+			{
+				"label": "黄骅市",
+				"value": "130983"
+			},
+			{
+				"label": "河间市",
+				"value": "130984"
+			}
+		],
+		[{
+				"label": "安次区",
+				"value": "131002"
+			},
+			{
+				"label": "广阳区",
+				"value": "131003"
+			},
+			{
+				"label": "固安县",
+				"value": "131022"
+			},
+			{
+				"label": "永清县",
+				"value": "131023"
+			},
+			{
+				"label": "香河县",
+				"value": "131024"
+			},
+			{
+				"label": "大城县",
+				"value": "131025"
+			},
+			{
+				"label": "文安县",
+				"value": "131026"
+			},
+			{
+				"label": "大厂回族自治县",
+				"value": "131028"
+			},
+			{
+				"label": "廊坊经济技术开发区",
+				"value": "131071"
+			},
+			{
+				"label": "霸州市",
+				"value": "131081"
+			},
+			{
+				"label": "三河市",
+				"value": "131082"
+			}
+		],
+		[{
+				"label": "桃城区",
+				"value": "131102"
+			},
+			{
+				"label": "冀州区",
+				"value": "131103"
+			},
+			{
+				"label": "枣强县",
+				"value": "131121"
+			},
+			{
+				"label": "武邑县",
+				"value": "131122"
+			},
+			{
+				"label": "武强县",
+				"value": "131123"
+			},
+			{
+				"label": "饶阳县",
+				"value": "131124"
+			},
+			{
+				"label": "安平县",
+				"value": "131125"
+			},
+			{
+				"label": "故城县",
+				"value": "131126"
+			},
+			{
+				"label": "景县",
+				"value": "131127"
+			},
+			{
+				"label": "阜城县",
+				"value": "131128"
+			},
+			{
+				"label": "河北衡水经济开发区",
+				"value": "131171"
+			},
+			{
+				"label": "衡水滨湖新区",
+				"value": "131172"
+			},
+			{
+				"label": "深州市",
+				"value": "131182"
+			}
+		]
+	],
+	[
+		[{
+				"label": "小店区",
+				"value": "140105"
+			},
+			{
+				"label": "迎泽区",
+				"value": "140106"
+			},
+			{
+				"label": "杏花岭区",
+				"value": "140107"
+			},
+			{
+				"label": "尖草坪区",
+				"value": "140108"
+			},
+			{
+				"label": "万柏林区",
+				"value": "140109"
+			},
+			{
+				"label": "晋源区",
+				"value": "140110"
+			},
+			{
+				"label": "清徐县",
+				"value": "140121"
+			},
+			{
+				"label": "阳曲县",
+				"value": "140122"
+			},
+			{
+				"label": "娄烦县",
+				"value": "140123"
+			},
+			{
+				"label": "山西转型综合改革示范区",
+				"value": "140171"
+			},
+			{
+				"label": "古交市",
+				"value": "140181"
+			}
+		],
+		[{
+				"label": "城区",
+				"value": "140202"
+			},
+			{
+				"label": "矿区",
+				"value": "140203"
+			},
+			{
+				"label": "南郊区",
+				"value": "140211"
+			},
+			{
+				"label": "新荣区",
+				"value": "140212"
+			},
+			{
+				"label": "阳高县",
+				"value": "140221"
+			},
+			{
+				"label": "天镇县",
+				"value": "140222"
+			},
+			{
+				"label": "广灵县",
+				"value": "140223"
+			},
+			{
+				"label": "灵丘县",
+				"value": "140224"
+			},
+			{
+				"label": "浑源县",
+				"value": "140225"
+			},
+			{
+				"label": "左云县",
+				"value": "140226"
+			},
+			{
+				"label": "大同县",
+				"value": "140227"
+			},
+			{
+				"label": "山西大同经济开发区",
+				"value": "140271"
+			}
+		],
+		[{
+				"label": "城区",
+				"value": "140302"
+			},
+			{
+				"label": "矿区",
+				"value": "140303"
+			},
+			{
+				"label": "郊区",
+				"value": "140311"
+			},
+			{
+				"label": "平定县",
+				"value": "140321"
+			},
+			{
+				"label": "盂县",
+				"value": "140322"
+			},
+			{
+				"label": "山西阳泉经济开发区",
+				"value": "140371"
+			}
+		],
+		[{
+				"label": "城区",
+				"value": "140402"
+			},
+			{
+				"label": "郊区",
+				"value": "140411"
+			},
+			{
+				"label": "长治县",
+				"value": "140421"
+			},
+			{
+				"label": "襄垣县",
+				"value": "140423"
+			},
+			{
+				"label": "屯留县",
+				"value": "140424"
+			},
+			{
+				"label": "平顺县",
+				"value": "140425"
+			},
+			{
+				"label": "黎城县",
+				"value": "140426"
+			},
+			{
+				"label": "壶关县",
+				"value": "140427"
+			},
+			{
+				"label": "长子县",
+				"value": "140428"
+			},
+			{
+				"label": "武乡县",
+				"value": "140429"
+			},
+			{
+				"label": "沁县",
+				"value": "140430"
+			},
+			{
+				"label": "沁源县",
+				"value": "140431"
+			},
+			{
+				"label": "山西长治高新技术产业园区",
+				"value": "140471"
+			},
+			{
+				"label": "潞城市",
+				"value": "140481"
+			}
+		],
+		[{
+				"label": "城区",
+				"value": "140502"
+			},
+			{
+				"label": "沁水县",
+				"value": "140521"
+			},
+			{
+				"label": "阳城县",
+				"value": "140522"
+			},
+			{
+				"label": "陵川县",
+				"value": "140524"
+			},
+			{
+				"label": "泽州县",
+				"value": "140525"
+			},
+			{
+				"label": "高平市",
+				"value": "140581"
+			}
+		],
+		[{
+				"label": "朔城区",
+				"value": "140602"
+			},
+			{
+				"label": "平鲁区",
+				"value": "140603"
+			},
+			{
+				"label": "山阴县",
+				"value": "140621"
+			},
+			{
+				"label": "应县",
+				"value": "140622"
+			},
+			{
+				"label": "右玉县",
+				"value": "140623"
+			},
+			{
+				"label": "怀仁县",
+				"value": "140624"
+			},
+			{
+				"label": "山西朔州经济开发区",
+				"value": "140671"
+			}
+		],
+		[{
+				"label": "榆次区",
+				"value": "140702"
+			},
+			{
+				"label": "榆社县",
+				"value": "140721"
+			},
+			{
+				"label": "左权县",
+				"value": "140722"
+			},
+			{
+				"label": "和顺县",
+				"value": "140723"
+			},
+			{
+				"label": "昔阳县",
+				"value": "140724"
+			},
+			{
+				"label": "寿阳县",
+				"value": "140725"
+			},
+			{
+				"label": "太谷县",
+				"value": "140726"
+			},
+			{
+				"label": "祁县",
+				"value": "140727"
+			},
+			{
+				"label": "平遥县",
+				"value": "140728"
+			},
+			{
+				"label": "灵石县",
+				"value": "140729"
+			},
+			{
+				"label": "介休市",
+				"value": "140781"
+			}
+		],
+		[{
+				"label": "盐湖区",
+				"value": "140802"
+			},
+			{
+				"label": "临猗县",
+				"value": "140821"
+			},
+			{
+				"label": "万荣县",
+				"value": "140822"
+			},
+			{
+				"label": "闻喜县",
+				"value": "140823"
+			},
+			{
+				"label": "稷山县",
+				"value": "140824"
+			},
+			{
+				"label": "新绛县",
+				"value": "140825"
+			},
+			{
+				"label": "绛县",
+				"value": "140826"
+			},
+			{
+				"label": "垣曲县",
+				"value": "140827"
+			},
+			{
+				"label": "夏县",
+				"value": "140828"
+			},
+			{
+				"label": "平陆县",
+				"value": "140829"
+			},
+			{
+				"label": "芮城县",
+				"value": "140830"
+			},
+			{
+				"label": "永济市",
+				"value": "140881"
+			},
+			{
+				"label": "河津市",
+				"value": "140882"
+			}
+		],
+		[{
+				"label": "忻府区",
+				"value": "140902"
+			},
+			{
+				"label": "定襄县",
+				"value": "140921"
+			},
+			{
+				"label": "五台县",
+				"value": "140922"
+			},
+			{
+				"label": "代县",
+				"value": "140923"
+			},
+			{
+				"label": "繁峙县",
+				"value": "140924"
+			},
+			{
+				"label": "宁武县",
+				"value": "140925"
+			},
+			{
+				"label": "静乐县",
+				"value": "140926"
+			},
+			{
+				"label": "神池县",
+				"value": "140927"
+			},
+			{
+				"label": "五寨县",
+				"value": "140928"
+			},
+			{
+				"label": "岢岚县",
+				"value": "140929"
+			},
+			{
+				"label": "河曲县",
+				"value": "140930"
+			},
+			{
+				"label": "保德县",
+				"value": "140931"
+			},
+			{
+				"label": "偏关县",
+				"value": "140932"
+			},
+			{
+				"label": "五台山风景名胜区",
+				"value": "140971"
+			},
+			{
+				"label": "原平市",
+				"value": "140981"
+			}
+		],
+		[{
+				"label": "尧都区",
+				"value": "141002"
+			},
+			{
+				"label": "曲沃县",
+				"value": "141021"
+			},
+			{
+				"label": "翼城县",
+				"value": "141022"
+			},
+			{
+				"label": "襄汾县",
+				"value": "141023"
+			},
+			{
+				"label": "洪洞县",
+				"value": "141024"
+			},
+			{
+				"label": "古县",
+				"value": "141025"
+			},
+			{
+				"label": "安泽县",
+				"value": "141026"
+			},
+			{
+				"label": "浮山县",
+				"value": "141027"
+			},
+			{
+				"label": "吉县",
+				"value": "141028"
+			},
+			{
+				"label": "乡宁县",
+				"value": "141029"
+			},
+			{
+				"label": "大宁县",
+				"value": "141030"
+			},
+			{
+				"label": "隰县",
+				"value": "141031"
+			},
+			{
+				"label": "永和县",
+				"value": "141032"
+			},
+			{
+				"label": "蒲县",
+				"value": "141033"
+			},
+			{
+				"label": "汾西县",
+				"value": "141034"
+			},
+			{
+				"label": "侯马市",
+				"value": "141081"
+			},
+			{
+				"label": "霍州市",
+				"value": "141082"
+			}
+		],
+		[{
+				"label": "离石区",
+				"value": "141102"
+			},
+			{
+				"label": "文水县",
+				"value": "141121"
+			},
+			{
+				"label": "交城县",
+				"value": "141122"
+			},
+			{
+				"label": "兴县",
+				"value": "141123"
+			},
+			{
+				"label": "临县",
+				"value": "141124"
+			},
+			{
+				"label": "柳林县",
+				"value": "141125"
+			},
+			{
+				"label": "石楼县",
+				"value": "141126"
+			},
+			{
+				"label": "岚县",
+				"value": "141127"
+			},
+			{
+				"label": "方山县",
+				"value": "141128"
+			},
+			{
+				"label": "中阳县",
+				"value": "141129"
+			},
+			{
+				"label": "交口县",
+				"value": "141130"
+			},
+			{
+				"label": "孝义市",
+				"value": "141181"
+			},
+			{
+				"label": "汾阳市",
+				"value": "141182"
+			}
+		]
+	],
+	[
+		[{
+				"label": "新城区",
+				"value": "150102"
+			},
+			{
+				"label": "回民区",
+				"value": "150103"
+			},
+			{
+				"label": "玉泉区",
+				"value": "150104"
+			},
+			{
+				"label": "赛罕区",
+				"value": "150105"
+			},
+			{
+				"label": "土默特左旗",
+				"value": "150121"
+			},
+			{
+				"label": "托克托县",
+				"value": "150122"
+			},
+			{
+				"label": "和林格尔县",
+				"value": "150123"
+			},
+			{
+				"label": "清水河县",
+				"value": "150124"
+			},
+			{
+				"label": "武川县",
+				"value": "150125"
+			},
+			{
+				"label": "呼和浩特金海工业园区",
+				"value": "150171"
+			},
+			{
+				"label": "呼和浩特经济技术开发区",
+				"value": "150172"
+			}
+		],
+		[{
+				"label": "东河区",
+				"value": "150202"
+			},
+			{
+				"label": "昆都仑区",
+				"value": "150203"
+			},
+			{
+				"label": "青山区",
+				"value": "150204"
+			},
+			{
+				"label": "石拐区",
+				"value": "150205"
+			},
+			{
+				"label": "白云鄂博矿区",
+				"value": "150206"
+			},
+			{
+				"label": "九原区",
+				"value": "150207"
+			},
+			{
+				"label": "土默特右旗",
+				"value": "150221"
+			},
+			{
+				"label": "固阳县",
+				"value": "150222"
+			},
+			{
+				"label": "达尔罕茂明安联合旗",
+				"value": "150223"
+			},
+			{
+				"label": "包头稀土高新技术产业开发区",
+				"value": "150271"
+			}
+		],
+		[{
+				"label": "海勃湾区",
+				"value": "150302"
+			},
+			{
+				"label": "海南区",
+				"value": "150303"
+			},
+			{
+				"label": "乌达区",
+				"value": "150304"
+			}
+		],
+		[{
+				"label": "红山区",
+				"value": "150402"
+			},
+			{
+				"label": "元宝山区",
+				"value": "150403"
+			},
+			{
+				"label": "松山区",
+				"value": "150404"
+			},
+			{
+				"label": "阿鲁科尔沁旗",
+				"value": "150421"
+			},
+			{
+				"label": "巴林左旗",
+				"value": "150422"
+			},
+			{
+				"label": "巴林右旗",
+				"value": "150423"
+			},
+			{
+				"label": "林西县",
+				"value": "150424"
+			},
+			{
+				"label": "克什克腾旗",
+				"value": "150425"
+			},
+			{
+				"label": "翁牛特旗",
+				"value": "150426"
+			},
+			{
+				"label": "喀喇沁旗",
+				"value": "150428"
+			},
+			{
+				"label": "宁城县",
+				"value": "150429"
+			},
+			{
+				"label": "敖汉旗",
+				"value": "150430"
+			}
+		],
+		[{
+				"label": "科尔沁区",
+				"value": "150502"
+			},
+			{
+				"label": "科尔沁左翼中旗",
+				"value": "150521"
+			},
+			{
+				"label": "科尔沁左翼后旗",
+				"value": "150522"
+			},
+			{
+				"label": "开鲁县",
+				"value": "150523"
+			},
+			{
+				"label": "库伦旗",
+				"value": "150524"
+			},
+			{
+				"label": "奈曼旗",
+				"value": "150525"
+			},
+			{
+				"label": "扎鲁特旗",
+				"value": "150526"
+			},
+			{
+				"label": "通辽经济技术开发区",
+				"value": "150571"
+			},
+			{
+				"label": "霍林郭勒市",
+				"value": "150581"
+			}
+		],
+		[{
+				"label": "东胜区",
+				"value": "150602"
+			},
+			{
+				"label": "康巴什区",
+				"value": "150603"
+			},
+			{
+				"label": "达拉特旗",
+				"value": "150621"
+			},
+			{
+				"label": "准格尔旗",
+				"value": "150622"
+			},
+			{
+				"label": "鄂托克前旗",
+				"value": "150623"
+			},
+			{
+				"label": "鄂托克旗",
+				"value": "150624"
+			},
+			{
+				"label": "杭锦旗",
+				"value": "150625"
+			},
+			{
+				"label": "乌审旗",
+				"value": "150626"
+			},
+			{
+				"label": "伊金霍洛旗",
+				"value": "150627"
+			}
+		],
+		[{
+				"label": "海拉尔区",
+				"value": "150702"
+			},
+			{
+				"label": "扎赉诺尔区",
+				"value": "150703"
+			},
+			{
+				"label": "阿荣旗",
+				"value": "150721"
+			},
+			{
+				"label": "莫力达瓦达斡尔族自治旗",
+				"value": "150722"
+			},
+			{
+				"label": "鄂伦春自治旗",
+				"value": "150723"
+			},
+			{
+				"label": "鄂温克族自治旗",
+				"value": "150724"
+			},
+			{
+				"label": "陈巴尔虎旗",
+				"value": "150725"
+			},
+			{
+				"label": "新巴尔虎左旗",
+				"value": "150726"
+			},
+			{
+				"label": "新巴尔虎右旗",
+				"value": "150727"
+			},
+			{
+				"label": "满洲里市",
+				"value": "150781"
+			},
+			{
+				"label": "牙克石市",
+				"value": "150782"
+			},
+			{
+				"label": "扎兰屯市",
+				"value": "150783"
+			},
+			{
+				"label": "额尔古纳市",
+				"value": "150784"
+			},
+			{
+				"label": "根河市",
+				"value": "150785"
+			}
+		],
+		[{
+				"label": "临河区",
+				"value": "150802"
+			},
+			{
+				"label": "五原县",
+				"value": "150821"
+			},
+			{
+				"label": "磴口县",
+				"value": "150822"
+			},
+			{
+				"label": "乌拉特前旗",
+				"value": "150823"
+			},
+			{
+				"label": "乌拉特中旗",
+				"value": "150824"
+			},
+			{
+				"label": "乌拉特后旗",
+				"value": "150825"
+			},
+			{
+				"label": "杭锦后旗",
+				"value": "150826"
+			}
+		],
+		[{
+				"label": "集宁区",
+				"value": "150902"
+			},
+			{
+				"label": "卓资县",
+				"value": "150921"
+			},
+			{
+				"label": "化德县",
+				"value": "150922"
+			},
+			{
+				"label": "商都县",
+				"value": "150923"
+			},
+			{
+				"label": "兴和县",
+				"value": "150924"
+			},
+			{
+				"label": "凉城县",
+				"value": "150925"
+			},
+			{
+				"label": "察哈尔右翼前旗",
+				"value": "150926"
+			},
+			{
+				"label": "察哈尔右翼中旗",
+				"value": "150927"
+			},
+			{
+				"label": "察哈尔右翼后旗",
+				"value": "150928"
+			},
+			{
+				"label": "四子王旗",
+				"value": "150929"
+			},
+			{
+				"label": "丰镇市",
+				"value": "150981"
+			}
+		],
+		[{
+				"label": "乌兰浩特市",
+				"value": "152201"
+			},
+			{
+				"label": "阿尔山市",
+				"value": "152202"
+			},
+			{
+				"label": "科尔沁右翼前旗",
+				"value": "152221"
+			},
+			{
+				"label": "科尔沁右翼中旗",
+				"value": "152222"
+			},
+			{
+				"label": "扎赉特旗",
+				"value": "152223"
+			},
+			{
+				"label": "突泉县",
+				"value": "152224"
+			}
+		],
+		[{
+				"label": "二连浩特市",
+				"value": "152501"
+			},
+			{
+				"label": "锡林浩特市",
+				"value": "152502"
+			},
+			{
+				"label": "阿巴嘎旗",
+				"value": "152522"
+			},
+			{
+				"label": "苏尼特左旗",
+				"value": "152523"
+			},
+			{
+				"label": "苏尼特右旗",
+				"value": "152524"
+			},
+			{
+				"label": "东乌珠穆沁旗",
+				"value": "152525"
+			},
+			{
+				"label": "西乌珠穆沁旗",
+				"value": "152526"
+			},
+			{
+				"label": "太仆寺旗",
+				"value": "152527"
+			},
+			{
+				"label": "镶黄旗",
+				"value": "152528"
+			},
+			{
+				"label": "正镶白旗",
+				"value": "152529"
+			},
+			{
+				"label": "正蓝旗",
+				"value": "152530"
+			},
+			{
+				"label": "多伦县",
+				"value": "152531"
+			},
+			{
+				"label": "乌拉盖管委会",
+				"value": "152571"
+			}
+		],
+		[{
+				"label": "阿拉善左旗",
+				"value": "152921"
+			},
+			{
+				"label": "阿拉善右旗",
+				"value": "152922"
+			},
+			{
+				"label": "额济纳旗",
+				"value": "152923"
+			},
+			{
+				"label": "内蒙古阿拉善经济开发区",
+				"value": "152971"
+			}
+		]
+	],
+	[
+		[{
+				"label": "和平区",
+				"value": "210102"
+			},
+			{
+				"label": "沈河区",
+				"value": "210103"
+			},
+			{
+				"label": "大东区",
+				"value": "210104"
+			},
+			{
+				"label": "皇姑区",
+				"value": "210105"
+			},
+			{
+				"label": "铁西区",
+				"value": "210106"
+			},
+			{
+				"label": "苏家屯区",
+				"value": "210111"
+			},
+			{
+				"label": "浑南区",
+				"value": "210112"
+			},
+			{
+				"label": "沈北新区",
+				"value": "210113"
+			},
+			{
+				"label": "于洪区",
+				"value": "210114"
+			},
+			{
+				"label": "辽中区",
+				"value": "210115"
+			},
+			{
+				"label": "康平县",
+				"value": "210123"
+			},
+			{
+				"label": "法库县",
+				"value": "210124"
+			},
+			{
+				"label": "新民市",
+				"value": "210181"
+			}
+		],
+		[{
+				"label": "中山区",
+				"value": "210202"
+			},
+			{
+				"label": "西岗区",
+				"value": "210203"
+			},
+			{
+				"label": "沙河口区",
+				"value": "210204"
+			},
+			{
+				"label": "甘井子区",
+				"value": "210211"
+			},
+			{
+				"label": "旅顺口区",
+				"value": "210212"
+			},
+			{
+				"label": "金州区",
+				"value": "210213"
+			},
+			{
+				"label": "普兰店区",
+				"value": "210214"
+			},
+			{
+				"label": "长海县",
+				"value": "210224"
+			},
+			{
+				"label": "瓦房店市",
+				"value": "210281"
+			},
+			{
+				"label": "庄河市",
+				"value": "210283"
+			}
+		],
+		[{
+				"label": "铁东区",
+				"value": "210302"
+			},
+			{
+				"label": "铁西区",
+				"value": "210303"
+			},
+			{
+				"label": "立山区",
+				"value": "210304"
+			},
+			{
+				"label": "千山区",
+				"value": "210311"
+			},
+			{
+				"label": "台安县",
+				"value": "210321"
+			},
+			{
+				"label": "岫岩满族自治县",
+				"value": "210323"
+			},
+			{
+				"label": "海城市",
+				"value": "210381"
+			}
+		],
+		[{
+				"label": "新抚区",
+				"value": "210402"
+			},
+			{
+				"label": "东洲区",
+				"value": "210403"
+			},
+			{
+				"label": "望花区",
+				"value": "210404"
+			},
+			{
+				"label": "顺城区",
+				"value": "210411"
+			},
+			{
+				"label": "抚顺县",
+				"value": "210421"
+			},
+			{
+				"label": "新宾满族自治县",
+				"value": "210422"
+			},
+			{
+				"label": "清原满族自治县",
+				"value": "210423"
+			}
+		],
+		[{
+				"label": "平山区",
+				"value": "210502"
+			},
+			{
+				"label": "溪湖区",
+				"value": "210503"
+			},
+			{
+				"label": "明山区",
+				"value": "210504"
+			},
+			{
+				"label": "南芬区",
+				"value": "210505"
+			},
+			{
+				"label": "本溪满族自治县",
+				"value": "210521"
+			},
+			{
+				"label": "桓仁满族自治县",
+				"value": "210522"
+			}
+		],
+		[{
+				"label": "元宝区",
+				"value": "210602"
+			},
+			{
+				"label": "振兴区",
+				"value": "210603"
+			},
+			{
+				"label": "振安区",
+				"value": "210604"
+			},
+			{
+				"label": "宽甸满族自治县",
+				"value": "210624"
+			},
+			{
+				"label": "东港市",
+				"value": "210681"
+			},
+			{
+				"label": "凤城市",
+				"value": "210682"
+			}
+		],
+		[{
+				"label": "古塔区",
+				"value": "210702"
+			},
+			{
+				"label": "凌河区",
+				"value": "210703"
+			},
+			{
+				"label": "太和区",
+				"value": "210711"
+			},
+			{
+				"label": "黑山县",
+				"value": "210726"
+			},
+			{
+				"label": "义县",
+				"value": "210727"
+			},
+			{
+				"label": "凌海市",
+				"value": "210781"
+			},
+			{
+				"label": "北镇市",
+				"value": "210782"
+			}
+		],
+		[{
+				"label": "站前区",
+				"value": "210802"
+			},
+			{
+				"label": "西市区",
+				"value": "210803"
+			},
+			{
+				"label": "鲅鱼圈区",
+				"value": "210804"
+			},
+			{
+				"label": "老边区",
+				"value": "210811"
+			},
+			{
+				"label": "盖州市",
+				"value": "210881"
+			},
+			{
+				"label": "大石桥市",
+				"value": "210882"
+			}
+		],
+		[{
+				"label": "海州区",
+				"value": "210902"
+			},
+			{
+				"label": "新邱区",
+				"value": "210903"
+			},
+			{
+				"label": "太平区",
+				"value": "210904"
+			},
+			{
+				"label": "清河门区",
+				"value": "210905"
+			},
+			{
+				"label": "细河区",
+				"value": "210911"
+			},
+			{
+				"label": "阜新蒙古族自治县",
+				"value": "210921"
+			},
+			{
+				"label": "彰武县",
+				"value": "210922"
+			}
+		],
+		[{
+				"label": "白塔区",
+				"value": "211002"
+			},
+			{
+				"label": "文圣区",
+				"value": "211003"
+			},
+			{
+				"label": "宏伟区",
+				"value": "211004"
+			},
+			{
+				"label": "弓长岭区",
+				"value": "211005"
+			},
+			{
+				"label": "太子河区",
+				"value": "211011"
+			},
+			{
+				"label": "辽阳县",
+				"value": "211021"
+			},
+			{
+				"label": "灯塔市",
+				"value": "211081"
+			}
+		],
+		[{
+				"label": "双台子区",
+				"value": "211102"
+			},
+			{
+				"label": "兴隆台区",
+				"value": "211103"
+			},
+			{
+				"label": "大洼区",
+				"value": "211104"
+			},
+			{
+				"label": "盘山县",
+				"value": "211122"
+			}
+		],
+		[{
+				"label": "银州区",
+				"value": "211202"
+			},
+			{
+				"label": "清河区",
+				"value": "211204"
+			},
+			{
+				"label": "铁岭县",
+				"value": "211221"
+			},
+			{
+				"label": "西丰县",
+				"value": "211223"
+			},
+			{
+				"label": "昌图县",
+				"value": "211224"
+			},
+			{
+				"label": "调兵山市",
+				"value": "211281"
+			},
+			{
+				"label": "开原市",
+				"value": "211282"
+			}
+		],
+		[{
+				"label": "双塔区",
+				"value": "211302"
+			},
+			{
+				"label": "龙城区",
+				"value": "211303"
+			},
+			{
+				"label": "朝阳县",
+				"value": "211321"
+			},
+			{
+				"label": "建平县",
+				"value": "211322"
+			},
+			{
+				"label": "喀喇沁左翼蒙古族自治县",
+				"value": "211324"
+			},
+			{
+				"label": "北票市",
+				"value": "211381"
+			},
+			{
+				"label": "凌源市",
+				"value": "211382"
+			}
+		],
+		[{
+				"label": "连山区",
+				"value": "211402"
+			},
+			{
+				"label": "龙港区",
+				"value": "211403"
+			},
+			{
+				"label": "南票区",
+				"value": "211404"
+			},
+			{
+				"label": "绥中县",
+				"value": "211421"
+			},
+			{
+				"label": "建昌县",
+				"value": "211422"
+			},
+			{
+				"label": "兴城市",
+				"value": "211481"
+			}
+		]
+	],
+	[
+		[{
+				"label": "南关区",
+				"value": "220102"
+			},
+			{
+				"label": "宽城区",
+				"value": "220103"
+			},
+			{
+				"label": "朝阳区",
+				"value": "220104"
+			},
+			{
+				"label": "二道区",
+				"value": "220105"
+			},
+			{
+				"label": "绿园区",
+				"value": "220106"
+			},
+			{
+				"label": "双阳区",
+				"value": "220112"
+			},
+			{
+				"label": "九台区",
+				"value": "220113"
+			},
+			{
+				"label": "农安县",
+				"value": "220122"
+			},
+			{
+				"label": "长春经济技术开发区",
+				"value": "220171"
+			},
+			{
+				"label": "长春净月高新技术产业开发区",
+				"value": "220172"
+			},
+			{
+				"label": "长春高新技术产业开发区",
+				"value": "220173"
+			},
+			{
+				"label": "长春汽车经济技术开发区",
+				"value": "220174"
+			},
+			{
+				"label": "榆树市",
+				"value": "220182"
+			},
+			{
+				"label": "德惠市",
+				"value": "220183"
+			}
+		],
+		[{
+				"label": "昌邑区",
+				"value": "220202"
+			},
+			{
+				"label": "龙潭区",
+				"value": "220203"
+			},
+			{
+				"label": "船营区",
+				"value": "220204"
+			},
+			{
+				"label": "丰满区",
+				"value": "220211"
+			},
+			{
+				"label": "永吉县",
+				"value": "220221"
+			},
+			{
+				"label": "吉林经济开发区",
+				"value": "220271"
+			},
+			{
+				"label": "吉林高新技术产业开发区",
+				"value": "220272"
+			},
+			{
+				"label": "吉林中国新加坡食品区",
+				"value": "220273"
+			},
+			{
+				"label": "蛟河市",
+				"value": "220281"
+			},
+			{
+				"label": "桦甸市",
+				"value": "220282"
+			},
+			{
+				"label": "舒兰市",
+				"value": "220283"
+			},
+			{
+				"label": "磐石市",
+				"value": "220284"
+			}
+		],
+		[{
+				"label": "铁西区",
+				"value": "220302"
+			},
+			{
+				"label": "铁东区",
+				"value": "220303"
+			},
+			{
+				"label": "梨树县",
+				"value": "220322"
+			},
+			{
+				"label": "伊通满族自治县",
+				"value": "220323"
+			},
+			{
+				"label": "公主岭市",
+				"value": "220381"
+			},
+			{
+				"label": "双辽市",
+				"value": "220382"
+			}
+		],
+		[{
+				"label": "龙山区",
+				"value": "220402"
+			},
+			{
+				"label": "西安区",
+				"value": "220403"
+			},
+			{
+				"label": "东丰县",
+				"value": "220421"
+			},
+			{
+				"label": "东辽县",
+				"value": "220422"
+			}
+		],
+		[{
+				"label": "东昌区",
+				"value": "220502"
+			},
+			{
+				"label": "二道江区",
+				"value": "220503"
+			},
+			{
+				"label": "通化县",
+				"value": "220521"
+			},
+			{
+				"label": "辉南县",
+				"value": "220523"
+			},
+			{
+				"label": "柳河县",
+				"value": "220524"
+			},
+			{
+				"label": "梅河口市",
+				"value": "220581"
+			},
+			{
+				"label": "集安市",
+				"value": "220582"
+			}
+		],
+		[{
+				"label": "浑江区",
+				"value": "220602"
+			},
+			{
+				"label": "江源区",
+				"value": "220605"
+			},
+			{
+				"label": "抚松县",
+				"value": "220621"
+			},
+			{
+				"label": "靖宇县",
+				"value": "220622"
+			},
+			{
+				"label": "长白朝鲜族自治县",
+				"value": "220623"
+			},
+			{
+				"label": "临江市",
+				"value": "220681"
+			}
+		],
+		[{
+				"label": "宁江区",
+				"value": "220702"
+			},
+			{
+				"label": "前郭尔罗斯蒙古族自治县",
+				"value": "220721"
+			},
+			{
+				"label": "长岭县",
+				"value": "220722"
+			},
+			{
+				"label": "乾安县",
+				"value": "220723"
+			},
+			{
+				"label": "吉林松原经济开发区",
+				"value": "220771"
+			},
+			{
+				"label": "扶余市",
+				"value": "220781"
+			}
+		],
+		[{
+				"label": "洮北区",
+				"value": "220802"
+			},
+			{
+				"label": "镇赉县",
+				"value": "220821"
+			},
+			{
+				"label": "通榆县",
+				"value": "220822"
+			},
+			{
+				"label": "吉林白城经济开发区",
+				"value": "220871"
+			},
+			{
+				"label": "洮南市",
+				"value": "220881"
+			},
+			{
+				"label": "大安市",
+				"value": "220882"
+			}
+		],
+		[{
+				"label": "延吉市",
+				"value": "222401"
+			},
+			{
+				"label": "图们市",
+				"value": "222402"
+			},
+			{
+				"label": "敦化市",
+				"value": "222403"
+			},
+			{
+				"label": "珲春市",
+				"value": "222404"
+			},
+			{
+				"label": "龙井市",
+				"value": "222405"
+			},
+			{
+				"label": "和龙市",
+				"value": "222406"
+			},
+			{
+				"label": "汪清县",
+				"value": "222424"
+			},
+			{
+				"label": "安图县",
+				"value": "222426"
+			}
+		]
+	],
+	[
+		[{
+				"label": "道里区",
+				"value": "230102"
+			},
+			{
+				"label": "南岗区",
+				"value": "230103"
+			},
+			{
+				"label": "道外区",
+				"value": "230104"
+			},
+			{
+				"label": "平房区",
+				"value": "230108"
+			},
+			{
+				"label": "松北区",
+				"value": "230109"
+			},
+			{
+				"label": "香坊区",
+				"value": "230110"
+			},
+			{
+				"label": "呼兰区",
+				"value": "230111"
+			},
+			{
+				"label": "阿城区",
+				"value": "230112"
+			},
+			{
+				"label": "双城区",
+				"value": "230113"
+			},
+			{
+				"label": "依兰县",
+				"value": "230123"
+			},
+			{
+				"label": "方正县",
+				"value": "230124"
+			},
+			{
+				"label": "宾县",
+				"value": "230125"
+			},
+			{
+				"label": "巴彦县",
+				"value": "230126"
+			},
+			{
+				"label": "木兰县",
+				"value": "230127"
+			},
+			{
+				"label": "通河县",
+				"value": "230128"
+			},
+			{
+				"label": "延寿县",
+				"value": "230129"
+			},
+			{
+				"label": "尚志市",
+				"value": "230183"
+			},
+			{
+				"label": "五常市",
+				"value": "230184"
+			}
+		],
+		[{
+				"label": "龙沙区",
+				"value": "230202"
+			},
+			{
+				"label": "建华区",
+				"value": "230203"
+			},
+			{
+				"label": "铁锋区",
+				"value": "230204"
+			},
+			{
+				"label": "昂昂溪区",
+				"value": "230205"
+			},
+			{
+				"label": "富拉尔基区",
+				"value": "230206"
+			},
+			{
+				"label": "碾子山区",
+				"value": "230207"
+			},
+			{
+				"label": "梅里斯达斡尔族区",
+				"value": "230208"
+			},
+			{
+				"label": "龙江县",
+				"value": "230221"
+			},
+			{
+				"label": "依安县",
+				"value": "230223"
+			},
+			{
+				"label": "泰来县",
+				"value": "230224"
+			},
+			{
+				"label": "甘南县",
+				"value": "230225"
+			},
+			{
+				"label": "富裕县",
+				"value": "230227"
+			},
+			{
+				"label": "克山县",
+				"value": "230229"
+			},
+			{
+				"label": "克东县",
+				"value": "230230"
+			},
+			{
+				"label": "拜泉县",
+				"value": "230231"
+			},
+			{
+				"label": "讷河市",
+				"value": "230281"
+			}
+		],
+		[{
+				"label": "鸡冠区",
+				"value": "230302"
+			},
+			{
+				"label": "恒山区",
+				"value": "230303"
+			},
+			{
+				"label": "滴道区",
+				"value": "230304"
+			},
+			{
+				"label": "梨树区",
+				"value": "230305"
+			},
+			{
+				"label": "城子河区",
+				"value": "230306"
+			},
+			{
+				"label": "麻山区",
+				"value": "230307"
+			},
+			{
+				"label": "鸡东县",
+				"value": "230321"
+			},
+			{
+				"label": "虎林市",
+				"value": "230381"
+			},
+			{
+				"label": "密山市",
+				"value": "230382"
+			}
+		],
+		[{
+				"label": "向阳区",
+				"value": "230402"
+			},
+			{
+				"label": "工农区",
+				"value": "230403"
+			},
+			{
+				"label": "南山区",
+				"value": "230404"
+			},
+			{
+				"label": "兴安区",
+				"value": "230405"
+			},
+			{
+				"label": "东山区",
+				"value": "230406"
+			},
+			{
+				"label": "兴山区",
+				"value": "230407"
+			},
+			{
+				"label": "萝北县",
+				"value": "230421"
+			},
+			{
+				"label": "绥滨县",
+				"value": "230422"
+			}
+		],
+		[{
+				"label": "尖山区",
+				"value": "230502"
+			},
+			{
+				"label": "岭东区",
+				"value": "230503"
+			},
+			{
+				"label": "四方台区",
+				"value": "230505"
+			},
+			{
+				"label": "宝山区",
+				"value": "230506"
+			},
+			{
+				"label": "集贤县",
+				"value": "230521"
+			},
+			{
+				"label": "友谊县",
+				"value": "230522"
+			},
+			{
+				"label": "宝清县",
+				"value": "230523"
+			},
+			{
+				"label": "饶河县",
+				"value": "230524"
+			}
+		],
+		[{
+				"label": "萨尔图区",
+				"value": "230602"
+			},
+			{
+				"label": "龙凤区",
+				"value": "230603"
+			},
+			{
+				"label": "让胡路区",
+				"value": "230604"
+			},
+			{
+				"label": "红岗区",
+				"value": "230605"
+			},
+			{
+				"label": "大同区",
+				"value": "230606"
+			},
+			{
+				"label": "肇州县",
+				"value": "230621"
+			},
+			{
+				"label": "肇源县",
+				"value": "230622"
+			},
+			{
+				"label": "林甸县",
+				"value": "230623"
+			},
+			{
+				"label": "杜尔伯特蒙古族自治县",
+				"value": "230624"
+			},
+			{
+				"label": "大庆高新技术产业开发区",
+				"value": "230671"
+			}
+		],
+		[{
+				"label": "伊春区",
+				"value": "230702"
+			},
+			{
+				"label": "南岔区",
+				"value": "230703"
+			},
+			{
+				"label": "友好区",
+				"value": "230704"
+			},
+			{
+				"label": "西林区",
+				"value": "230705"
+			},
+			{
+				"label": "翠峦区",
+				"value": "230706"
+			},
+			{
+				"label": "新青区",
+				"value": "230707"
+			},
+			{
+				"label": "美溪区",
+				"value": "230708"
+			},
+			{
+				"label": "金山屯区",
+				"value": "230709"
+			},
+			{
+				"label": "五营区",
+				"value": "230710"
+			},
+			{
+				"label": "乌马河区",
+				"value": "230711"
+			},
+			{
+				"label": "汤旺河区",
+				"value": "230712"
+			},
+			{
+				"label": "带岭区",
+				"value": "230713"
+			},
+			{
+				"label": "乌伊岭区",
+				"value": "230714"
+			},
+			{
+				"label": "红星区",
+				"value": "230715"
+			},
+			{
+				"label": "上甘岭区",
+				"value": "230716"
+			},
+			{
+				"label": "嘉荫县",
+				"value": "230722"
+			},
+			{
+				"label": "铁力市",
+				"value": "230781"
+			}
+		],
+		[{
+				"label": "向阳区",
+				"value": "230803"
+			},
+			{
+				"label": "前进区",
+				"value": "230804"
+			},
+			{
+				"label": "东风区",
+				"value": "230805"
+			},
+			{
+				"label": "郊区",
+				"value": "230811"
+			},
+			{
+				"label": "桦南县",
+				"value": "230822"
+			},
+			{
+				"label": "桦川县",
+				"value": "230826"
+			},
+			{
+				"label": "汤原县",
+				"value": "230828"
+			},
+			{
+				"label": "同江市",
+				"value": "230881"
+			},
+			{
+				"label": "富锦市",
+				"value": "230882"
+			},
+			{
+				"label": "抚远市",
+				"value": "230883"
+			}
+		],
+		[{
+				"label": "新兴区",
+				"value": "230902"
+			},
+			{
+				"label": "桃山区",
+				"value": "230903"
+			},
+			{
+				"label": "茄子河区",
+				"value": "230904"
+			},
+			{
+				"label": "勃利县",
+				"value": "230921"
+			}
+		],
+		[{
+				"label": "东安区",
+				"value": "231002"
+			},
+			{
+				"label": "阳明区",
+				"value": "231003"
+			},
+			{
+				"label": "爱民区",
+				"value": "231004"
+			},
+			{
+				"label": "西安区",
+				"value": "231005"
+			},
+			{
+				"label": "林口县",
+				"value": "231025"
+			},
+			{
+				"label": "牡丹江经济技术开发区",
+				"value": "231071"
+			},
+			{
+				"label": "绥芬河市",
+				"value": "231081"
+			},
+			{
+				"label": "海林市",
+				"value": "231083"
+			},
+			{
+				"label": "宁安市",
+				"value": "231084"
+			},
+			{
+				"label": "穆棱市",
+				"value": "231085"
+			},
+			{
+				"label": "东宁市",
+				"value": "231086"
+			}
+		],
+		[{
+				"label": "爱辉区",
+				"value": "231102"
+			},
+			{
+				"label": "嫩江县",
+				"value": "231121"
+			},
+			{
+				"label": "逊克县",
+				"value": "231123"
+			},
+			{
+				"label": "孙吴县",
+				"value": "231124"
+			},
+			{
+				"label": "北安市",
+				"value": "231181"
+			},
+			{
+				"label": "五大连池市",
+				"value": "231182"
+			}
+		],
+		[{
+				"label": "北林区",
+				"value": "231202"
+			},
+			{
+				"label": "望奎县",
+				"value": "231221"
+			},
+			{
+				"label": "兰西县",
+				"value": "231222"
+			},
+			{
+				"label": "青冈县",
+				"value": "231223"
+			},
+			{
+				"label": "庆安县",
+				"value": "231224"
+			},
+			{
+				"label": "明水县",
+				"value": "231225"
+			},
+			{
+				"label": "绥棱县",
+				"value": "231226"
+			},
+			{
+				"label": "安达市",
+				"value": "231281"
+			},
+			{
+				"label": "肇东市",
+				"value": "231282"
+			},
+			{
+				"label": "海伦市",
+				"value": "231283"
+			}
+		],
+		[{
+				"label": "加格达奇区",
+				"value": "232701"
+			},
+			{
+				"label": "松岭区",
+				"value": "232702"
+			},
+			{
+				"label": "新林区",
+				"value": "232703"
+			},
+			{
+				"label": "呼中区",
+				"value": "232704"
+			},
+			{
+				"label": "呼玛县",
+				"value": "232721"
+			},
+			{
+				"label": "塔河县",
+				"value": "232722"
+			},
+			{
+				"label": "漠河县",
+				"value": "232723"
+			}
+		]
+	],
+	[
+		[{
+				"label": "黄浦区",
+				"value": "310101"
+			},
+			{
+				"label": "徐汇区",
+				"value": "310104"
+			},
+			{
+				"label": "长宁区",
+				"value": "310105"
+			},
+			{
+				"label": "静安区",
+				"value": "310106"
+			},
+			{
+				"label": "普陀区",
+				"value": "310107"
+			},
+			{
+				"label": "虹口区",
+				"value": "310109"
+			},
+			{
+				"label": "杨浦区",
+				"value": "310110"
+			},
+			{
+				"label": "闵行区",
+				"value": "310112"
+			},
+			{
+				"label": "宝山区",
+				"value": "310113"
+			},
+			{
+				"label": "嘉定区",
+				"value": "310114"
+			},
+			{
+				"label": "浦东新区",
+				"value": "310115"
+			},
+			{
+				"label": "金山区",
+				"value": "310116"
+			},
+			{
+				"label": "松江区",
+				"value": "310117"
+			},
+			{
+				"label": "青浦区",
+				"value": "310118"
+			},
+			{
+				"label": "奉贤区",
+				"value": "310120"
+			},
+			{
+				"label": "崇明区",
+				"value": "310151"
+			}
+		]
+	],
+	[
+		[{
+				"label": "玄武区",
+				"value": "320102"
+			},
+			{
+				"label": "秦淮区",
+				"value": "320104"
+			},
+			{
+				"label": "建邺区",
+				"value": "320105"
+			},
+			{
+				"label": "鼓楼区",
+				"value": "320106"
+			},
+			{
+				"label": "浦口区",
+				"value": "320111"
+			},
+			{
+				"label": "栖霞区",
+				"value": "320113"
+			},
+			{
+				"label": "雨花台区",
+				"value": "320114"
+			},
+			{
+				"label": "江宁区",
+				"value": "320115"
+			},
+			{
+				"label": "六合区",
+				"value": "320116"
+			},
+			{
+				"label": "溧水区",
+				"value": "320117"
+			},
+			{
+				"label": "高淳区",
+				"value": "320118"
+			}
+		],
+		[{
+				"label": "锡山区",
+				"value": "320205"
+			},
+			{
+				"label": "惠山区",
+				"value": "320206"
+			},
+			{
+				"label": "滨湖区",
+				"value": "320211"
+			},
+			{
+				"label": "梁溪区",
+				"value": "320213"
+			},
+			{
+				"label": "新吴区",
+				"value": "320214"
+			},
+			{
+				"label": "江阴市",
+				"value": "320281"
+			},
+			{
+				"label": "宜兴市",
+				"value": "320282"
+			}
+		],
+		[{
+				"label": "鼓楼区",
+				"value": "320302"
+			},
+			{
+				"label": "云龙区",
+				"value": "320303"
+			},
+			{
+				"label": "贾汪区",
+				"value": "320305"
+			},
+			{
+				"label": "泉山区",
+				"value": "320311"
+			},
+			{
+				"label": "铜山区",
+				"value": "320312"
+			},
+			{
+				"label": "丰县",
+				"value": "320321"
+			},
+			{
+				"label": "沛县",
+				"value": "320322"
+			},
+			{
+				"label": "睢宁县",
+				"value": "320324"
+			},
+			{
+				"label": "徐州经济技术开发区",
+				"value": "320371"
+			},
+			{
+				"label": "新沂市",
+				"value": "320381"
+			},
+			{
+				"label": "邳州市",
+				"value": "320382"
+			}
+		],
+		[{
+				"label": "天宁区",
+				"value": "320402"
+			},
+			{
+				"label": "钟楼区",
+				"value": "320404"
+			},
+			{
+				"label": "新北区",
+				"value": "320411"
+			},
+			{
+				"label": "武进区",
+				"value": "320412"
+			},
+			{
+				"label": "金坛区",
+				"value": "320413"
+			},
+			{
+				"label": "溧阳市",
+				"value": "320481"
+			}
+		],
+		[{
+				"label": "虎丘区",
+				"value": "320505"
+			},
+			{
+				"label": "吴中区",
+				"value": "320506"
+			},
+			{
+				"label": "相城区",
+				"value": "320507"
+			},
+			{
+				"label": "姑苏区",
+				"value": "320508"
+			},
+			{
+				"label": "吴江区",
+				"value": "320509"
+			},
+			{
+				"label": "苏州工业园区",
+				"value": "320571"
+			},
+			{
+				"label": "常熟市",
+				"value": "320581"
+			},
+			{
+				"label": "张家港市",
+				"value": "320582"
+			},
+			{
+				"label": "昆山市",
+				"value": "320583"
+			},
+			{
+				"label": "太仓市",
+				"value": "320585"
+			}
+		],
+		[{
+				"label": "崇川区",
+				"value": "320602"
+			},
+			{
+				"label": "港闸区",
+				"value": "320611"
+			},
+			{
+				"label": "通州区",
+				"value": "320612"
+			},
+			{
+				"label": "海安县",
+				"value": "320621"
+			},
+			{
+				"label": "如东县",
+				"value": "320623"
+			},
+			{
+				"label": "南通经济技术开发区",
+				"value": "320671"
+			},
+			{
+				"label": "启东市",
+				"value": "320681"
+			},
+			{
+				"label": "如皋市",
+				"value": "320682"
+			},
+			{
+				"label": "海门市",
+				"value": "320684"
+			}
+		],
+		[{
+				"label": "连云区",
+				"value": "320703"
+			},
+			{
+				"label": "海州区",
+				"value": "320706"
+			},
+			{
+				"label": "赣榆区",
+				"value": "320707"
+			},
+			{
+				"label": "东海县",
+				"value": "320722"
+			},
+			{
+				"label": "灌云县",
+				"value": "320723"
+			},
+			{
+				"label": "灌南县",
+				"value": "320724"
+			},
+			{
+				"label": "连云港经济技术开发区",
+				"value": "320771"
+			},
+			{
+				"label": "连云港高新技术产业开发区",
+				"value": "320772"
+			}
+		],
+		[{
+				"label": "淮安区",
+				"value": "320803"
+			},
+			{
+				"label": "淮阴区",
+				"value": "320804"
+			},
+			{
+				"label": "清江浦区",
+				"value": "320812"
+			},
+			{
+				"label": "洪泽区",
+				"value": "320813"
+			},
+			{
+				"label": "涟水县",
+				"value": "320826"
+			},
+			{
+				"label": "盱眙县",
+				"value": "320830"
+			},
+			{
+				"label": "金湖县",
+				"value": "320831"
+			},
+			{
+				"label": "淮安经济技术开发区",
+				"value": "320871"
+			}
+		],
+		[{
+				"label": "亭湖区",
+				"value": "320902"
+			},
+			{
+				"label": "盐都区",
+				"value": "320903"
+			},
+			{
+				"label": "大丰区",
+				"value": "320904"
+			},
+			{
+				"label": "响水县",
+				"value": "320921"
+			},
+			{
+				"label": "滨海县",
+				"value": "320922"
+			},
+			{
+				"label": "阜宁县",
+				"value": "320923"
+			},
+			{
+				"label": "射阳县",
+				"value": "320924"
+			},
+			{
+				"label": "建湖县",
+				"value": "320925"
+			},
+			{
+				"label": "盐城经济技术开发区",
+				"value": "320971"
+			},
+			{
+				"label": "东台市",
+				"value": "320981"
+			}
+		],
+		[{
+				"label": "广陵区",
+				"value": "321002"
+			},
+			{
+				"label": "邗江区",
+				"value": "321003"
+			},
+			{
+				"label": "江都区",
+				"value": "321012"
+			},
+			{
+				"label": "宝应县",
+				"value": "321023"
+			},
+			{
+				"label": "扬州经济技术开发区",
+				"value": "321071"
+			},
+			{
+				"label": "仪征市",
+				"value": "321081"
+			},
+			{
+				"label": "高邮市",
+				"value": "321084"
+			}
+		],
+		[{
+				"label": "京口区",
+				"value": "321102"
+			},
+			{
+				"label": "润州区",
+				"value": "321111"
+			},
+			{
+				"label": "丹徒区",
+				"value": "321112"
+			},
+			{
+				"label": "镇江新区",
+				"value": "321171"
+			},
+			{
+				"label": "丹阳市",
+				"value": "321181"
+			},
+			{
+				"label": "扬中市",
+				"value": "321182"
+			},
+			{
+				"label": "句容市",
+				"value": "321183"
+			}
+		],
+		[{
+				"label": "海陵区",
+				"value": "321202"
+			},
+			{
+				"label": "高港区",
+				"value": "321203"
+			},
+			{
+				"label": "姜堰区",
+				"value": "321204"
+			},
+			{
+				"label": "泰州医药高新技术产业开发区",
+				"value": "321271"
+			},
+			{
+				"label": "兴化市",
+				"value": "321281"
+			},
+			{
+				"label": "靖江市",
+				"value": "321282"
+			},
+			{
+				"label": "泰兴市",
+				"value": "321283"
+			}
+		],
+		[{
+				"label": "宿城区",
+				"value": "321302"
+			},
+			{
+				"label": "宿豫区",
+				"value": "321311"
+			},
+			{
+				"label": "沭阳县",
+				"value": "321322"
+			},
+			{
+				"label": "泗阳县",
+				"value": "321323"
+			},
+			{
+				"label": "泗洪县",
+				"value": "321324"
+			},
+			{
+				"label": "宿迁经济技术开发区",
+				"value": "321371"
+			}
+		]
+	],
+	[
+		[{
+				"label": "上城区",
+				"value": "330102"
+			},
+			{
+				"label": "下城区",
+				"value": "330103"
+			},
+			{
+				"label": "江干区",
+				"value": "330104"
+			},
+			{
+				"label": "拱墅区",
+				"value": "330105"
+			},
+			{
+				"label": "西湖区",
+				"value": "330106"
+			},
+			{
+				"label": "滨江区",
+				"value": "330108"
+			},
+			{
+				"label": "萧山区",
+				"value": "330109"
+			},
+			{
+				"label": "余杭区",
+				"value": "330110"
+			},
+			{
+				"label": "富阳区",
+				"value": "330111"
+			},
+			{
+				"label": "临安区",
+				"value": "330112"
+			},
+			{
+				"label": "桐庐县",
+				"value": "330122"
+			},
+			{
+				"label": "淳安县",
+				"value": "330127"
+			},
+			{
+				"label": "建德市",
+				"value": "330182"
+			}
+		],
+		[{
+				"label": "海曙区",
+				"value": "330203"
+			},
+			{
+				"label": "江北区",
+				"value": "330205"
+			},
+			{
+				"label": "北仑区",
+				"value": "330206"
+			},
+			{
+				"label": "镇海区",
+				"value": "330211"
+			},
+			{
+				"label": "鄞州区",
+				"value": "330212"
+			},
+			{
+				"label": "奉化区",
+				"value": "330213"
+			},
+			{
+				"label": "象山县",
+				"value": "330225"
+			},
+			{
+				"label": "宁海县",
+				"value": "330226"
+			},
+			{
+				"label": "余姚市",
+				"value": "330281"
+			},
+			{
+				"label": "慈溪市",
+				"value": "330282"
+			}
+		],
+		[{
+				"label": "鹿城区",
+				"value": "330302"
+			},
+			{
+				"label": "龙湾区",
+				"value": "330303"
+			},
+			{
+				"label": "瓯海区",
+				"value": "330304"
+			},
+			{
+				"label": "洞头区",
+				"value": "330305"
+			},
+			{
+				"label": "永嘉县",
+				"value": "330324"
+			},
+			{
+				"label": "平阳县",
+				"value": "330326"
+			},
+			{
+				"label": "苍南县",
+				"value": "330327"
+			},
+			{
+				"label": "文成县",
+				"value": "330328"
+			},
+			{
+				"label": "泰顺县",
+				"value": "330329"
+			},
+			{
+				"label": "温州经济技术开发区",
+				"value": "330371"
+			},
+			{
+				"label": "瑞安市",
+				"value": "330381"
+			},
+			{
+				"label": "乐清市",
+				"value": "330382"
+			}
+		],
+		[{
+				"label": "南湖区",
+				"value": "330402"
+			},
+			{
+				"label": "秀洲区",
+				"value": "330411"
+			},
+			{
+				"label": "嘉善县",
+				"value": "330421"
+			},
+			{
+				"label": "海盐县",
+				"value": "330424"
+			},
+			{
+				"label": "海宁市",
+				"value": "330481"
+			},
+			{
+				"label": "平湖市",
+				"value": "330482"
+			},
+			{
+				"label": "桐乡市",
+				"value": "330483"
+			}
+		],
+		[{
+				"label": "吴兴区",
+				"value": "330502"
+			},
+			{
+				"label": "南浔区",
+				"value": "330503"
+			},
+			{
+				"label": "德清县",
+				"value": "330521"
+			},
+			{
+				"label": "长兴县",
+				"value": "330522"
+			},
+			{
+				"label": "安吉县",
+				"value": "330523"
+			}
+		],
+		[{
+				"label": "越城区",
+				"value": "330602"
+			},
+			{
+				"label": "柯桥区",
+				"value": "330603"
+			},
+			{
+				"label": "上虞区",
+				"value": "330604"
+			},
+			{
+				"label": "新昌县",
+				"value": "330624"
+			},
+			{
+				"label": "诸暨市",
+				"value": "330681"
+			},
+			{
+				"label": "嵊州市",
+				"value": "330683"
+			}
+		],
+		[{
+				"label": "婺城区",
+				"value": "330702"
+			},
+			{
+				"label": "金东区",
+				"value": "330703"
+			},
+			{
+				"label": "武义县",
+				"value": "330723"
+			},
+			{
+				"label": "浦江县",
+				"value": "330726"
+			},
+			{
+				"label": "磐安县",
+				"value": "330727"
+			},
+			{
+				"label": "兰溪市",
+				"value": "330781"
+			},
+			{
+				"label": "义乌市",
+				"value": "330782"
+			},
+			{
+				"label": "东阳市",
+				"value": "330783"
+			},
+			{
+				"label": "永康市",
+				"value": "330784"
+			}
+		],
+		[{
+				"label": "柯城区",
+				"value": "330802"
+			},
+			{
+				"label": "衢江区",
+				"value": "330803"
+			},
+			{
+				"label": "常山县",
+				"value": "330822"
+			},
+			{
+				"label": "开化县",
+				"value": "330824"
+			},
+			{
+				"label": "龙游县",
+				"value": "330825"
+			},
+			{
+				"label": "江山市",
+				"value": "330881"
+			}
+		],
+		[{
+				"label": "定海区",
+				"value": "330902"
+			},
+			{
+				"label": "普陀区",
+				"value": "330903"
+			},
+			{
+				"label": "岱山县",
+				"value": "330921"
+			},
+			{
+				"label": "嵊泗县",
+				"value": "330922"
+			}
+		],
+		[{
+				"label": "椒江区",
+				"value": "331002"
+			},
+			{
+				"label": "黄岩区",
+				"value": "331003"
+			},
+			{
+				"label": "路桥区",
+				"value": "331004"
+			},
+			{
+				"label": "三门县",
+				"value": "331022"
+			},
+			{
+				"label": "天台县",
+				"value": "331023"
+			},
+			{
+				"label": "仙居县",
+				"value": "331024"
+			},
+			{
+				"label": "温岭市",
+				"value": "331081"
+			},
+			{
+				"label": "临海市",
+				"value": "331082"
+			},
+			{
+				"label": "玉环市",
+				"value": "331083"
+			}
+		],
+		[{
+				"label": "莲都区",
+				"value": "331102"
+			},
+			{
+				"label": "青田县",
+				"value": "331121"
+			},
+			{
+				"label": "缙云县",
+				"value": "331122"
+			},
+			{
+				"label": "遂昌县",
+				"value": "331123"
+			},
+			{
+				"label": "松阳县",
+				"value": "331124"
+			},
+			{
+				"label": "云和县",
+				"value": "331125"
+			},
+			{
+				"label": "庆元县",
+				"value": "331126"
+			},
+			{
+				"label": "景宁畲族自治县",
+				"value": "331127"
+			},
+			{
+				"label": "龙泉市",
+				"value": "331181"
+			}
+		]
+	],
+	[
+		[{
+				"label": "瑶海区",
+				"value": "340102"
+			},
+			{
+				"label": "庐阳区",
+				"value": "340103"
+			},
+			{
+				"label": "蜀山区",
+				"value": "340104"
+			},
+			{
+				"label": "包河区",
+				"value": "340111"
+			},
+			{
+				"label": "长丰县",
+				"value": "340121"
+			},
+			{
+				"label": "肥东县",
+				"value": "340122"
+			},
+			{
+				"label": "肥西县",
+				"value": "340123"
+			},
+			{
+				"label": "庐江县",
+				"value": "340124"
+			},
+			{
+				"label": "合肥高新技术产业开发区",
+				"value": "340171"
+			},
+			{
+				"label": "合肥经济技术开发区",
+				"value": "340172"
+			},
+			{
+				"label": "合肥新站高新技术产业开发区",
+				"value": "340173"
+			},
+			{
+				"label": "巢湖市",
+				"value": "340181"
+			}
+		],
+		[{
+				"label": "镜湖区",
+				"value": "340202"
+			},
+			{
+				"label": "弋江区",
+				"value": "340203"
+			},
+			{
+				"label": "鸠江区",
+				"value": "340207"
+			},
+			{
+				"label": "三山区",
+				"value": "340208"
+			},
+			{
+				"label": "芜湖县",
+				"value": "340221"
+			},
+			{
+				"label": "繁昌县",
+				"value": "340222"
+			},
+			{
+				"label": "南陵县",
+				"value": "340223"
+			},
+			{
+				"label": "无为县",
+				"value": "340225"
+			},
+			{
+				"label": "芜湖经济技术开发区",
+				"value": "340271"
+			},
+			{
+				"label": "安徽芜湖长江大桥经济开发区",
+				"value": "340272"
+			}
+		],
+		[{
+				"label": "龙子湖区",
+				"value": "340302"
+			},
+			{
+				"label": "蚌山区",
+				"value": "340303"
+			},
+			{
+				"label": "禹会区",
+				"value": "340304"
+			},
+			{
+				"label": "淮上区",
+				"value": "340311"
+			},
+			{
+				"label": "怀远县",
+				"value": "340321"
+			},
+			{
+				"label": "五河县",
+				"value": "340322"
+			},
+			{
+				"label": "固镇县",
+				"value": "340323"
+			},
+			{
+				"label": "蚌埠市高新技术开发区",
+				"value": "340371"
+			},
+			{
+				"label": "蚌埠市经济开发区",
+				"value": "340372"
+			}
+		],
+		[{
+				"label": "大通区",
+				"value": "340402"
+			},
+			{
+				"label": "田家庵区",
+				"value": "340403"
+			},
+			{
+				"label": "谢家集区",
+				"value": "340404"
+			},
+			{
+				"label": "八公山区",
+				"value": "340405"
+			},
+			{
+				"label": "潘集区",
+				"value": "340406"
+			},
+			{
+				"label": "凤台县",
+				"value": "340421"
+			},
+			{
+				"label": "寿县",
+				"value": "340422"
+			}
+		],
+		[{
+				"label": "花山区",
+				"value": "340503"
+			},
+			{
+				"label": "雨山区",
+				"value": "340504"
+			},
+			{
+				"label": "博望区",
+				"value": "340506"
+			},
+			{
+				"label": "当涂县",
+				"value": "340521"
+			},
+			{
+				"label": "含山县",
+				"value": "340522"
+			},
+			{
+				"label": "和县",
+				"value": "340523"
+			}
+		],
+		[{
+				"label": "杜集区",
+				"value": "340602"
+			},
+			{
+				"label": "相山区",
+				"value": "340603"
+			},
+			{
+				"label": "烈山区",
+				"value": "340604"
+			},
+			{
+				"label": "濉溪县",
+				"value": "340621"
+			}
+		],
+		[{
+				"label": "铜官区",
+				"value": "340705"
+			},
+			{
+				"label": "义安区",
+				"value": "340706"
+			},
+			{
+				"label": "郊区",
+				"value": "340711"
+			},
+			{
+				"label": "枞阳县",
+				"value": "340722"
+			}
+		],
+		[{
+				"label": "迎江区",
+				"value": "340802"
+			},
+			{
+				"label": "大观区",
+				"value": "340803"
+			},
+			{
+				"label": "宜秀区",
+				"value": "340811"
+			},
+			{
+				"label": "怀宁县",
+				"value": "340822"
+			},
+			{
+				"label": "潜山县",
+				"value": "340824"
+			},
+			{
+				"label": "太湖县",
+				"value": "340825"
+			},
+			{
+				"label": "宿松县",
+				"value": "340826"
+			},
+			{
+				"label": "望江县",
+				"value": "340827"
+			},
+			{
+				"label": "岳西县",
+				"value": "340828"
+			},
+			{
+				"label": "安徽安庆经济开发区",
+				"value": "340871"
+			},
+			{
+				"label": "桐城市",
+				"value": "340881"
+			}
+		],
+		[{
+				"label": "屯溪区",
+				"value": "341002"
+			},
+			{
+				"label": "黄山区",
+				"value": "341003"
+			},
+			{
+				"label": "徽州区",
+				"value": "341004"
+			},
+			{
+				"label": "歙县",
+				"value": "341021"
+			},
+			{
+				"label": "休宁县",
+				"value": "341022"
+			},
+			{
+				"label": "黟县",
+				"value": "341023"
+			},
+			{
+				"label": "祁门县",
+				"value": "341024"
+			}
+		],
+		[{
+				"label": "琅琊区",
+				"value": "341102"
+			},
+			{
+				"label": "南谯区",
+				"value": "341103"
+			},
+			{
+				"label": "来安县",
+				"value": "341122"
+			},
+			{
+				"label": "全椒县",
+				"value": "341124"
+			},
+			{
+				"label": "定远县",
+				"value": "341125"
+			},
+			{
+				"label": "凤阳县",
+				"value": "341126"
+			},
+			{
+				"label": "苏滁现代产业园",
+				"value": "341171"
+			},
+			{
+				"label": "滁州经济技术开发区",
+				"value": "341172"
+			},
+			{
+				"label": "天长市",
+				"value": "341181"
+			},
+			{
+				"label": "明光市",
+				"value": "341182"
+			}
+		],
+		[{
+				"label": "颍州区",
+				"value": "341202"
+			},
+			{
+				"label": "颍东区",
+				"value": "341203"
+			},
+			{
+				"label": "颍泉区",
+				"value": "341204"
+			},
+			{
+				"label": "临泉县",
+				"value": "341221"
+			},
+			{
+				"label": "太和县",
+				"value": "341222"
+			},
+			{
+				"label": "阜南县",
+				"value": "341225"
+			},
+			{
+				"label": "颍上县",
+				"value": "341226"
+			},
+			{
+				"label": "阜阳合肥现代产业园区",
+				"value": "341271"
+			},
+			{
+				"label": "阜阳经济技术开发区",
+				"value": "341272"
+			},
+			{
+				"label": "界首市",
+				"value": "341282"
+			}
+		],
+		[{
+				"label": "埇桥区",
+				"value": "341302"
+			},
+			{
+				"label": "砀山县",
+				"value": "341321"
+			},
+			{
+				"label": "萧县",
+				"value": "341322"
+			},
+			{
+				"label": "灵璧县",
+				"value": "341323"
+			},
+			{
+				"label": "泗县",
+				"value": "341324"
+			},
+			{
+				"label": "宿州马鞍山现代产业园区",
+				"value": "341371"
+			},
+			{
+				"label": "宿州经济技术开发区",
+				"value": "341372"
+			}
+		],
+		[{
+				"label": "金安区",
+				"value": "341502"
+			},
+			{
+				"label": "裕安区",
+				"value": "341503"
+			},
+			{
+				"label": "叶集区",
+				"value": "341504"
+			},
+			{
+				"label": "霍邱县",
+				"value": "341522"
+			},
+			{
+				"label": "舒城县",
+				"value": "341523"
+			},
+			{
+				"label": "金寨县",
+				"value": "341524"
+			},
+			{
+				"label": "霍山县",
+				"value": "341525"
+			}
+		],
+		[{
+				"label": "谯城区",
+				"value": "341602"
+			},
+			{
+				"label": "涡阳县",
+				"value": "341621"
+			},
+			{
+				"label": "蒙城县",
+				"value": "341622"
+			},
+			{
+				"label": "利辛县",
+				"value": "341623"
+			}
+		],
+		[{
+				"label": "贵池区",
+				"value": "341702"
+			},
+			{
+				"label": "东至县",
+				"value": "341721"
+			},
+			{
+				"label": "石台县",
+				"value": "341722"
+			},
+			{
+				"label": "青阳县",
+				"value": "341723"
+			}
+		],
+		[{
+				"label": "宣州区",
+				"value": "341802"
+			},
+			{
+				"label": "郎溪县",
+				"value": "341821"
+			},
+			{
+				"label": "广德县",
+				"value": "341822"
+			},
+			{
+				"label": "泾县",
+				"value": "341823"
+			},
+			{
+				"label": "绩溪县",
+				"value": "341824"
+			},
+			{
+				"label": "旌德县",
+				"value": "341825"
+			},
+			{
+				"label": "宣城市经济开发区",
+				"value": "341871"
+			},
+			{
+				"label": "宁国市",
+				"value": "341881"
+			}
+		]
+	],
+	[
+		[{
+				"label": "鼓楼区",
+				"value": "350102"
+			},
+			{
+				"label": "台江区",
+				"value": "350103"
+			},
+			{
+				"label": "仓山区",
+				"value": "350104"
+			},
+			{
+				"label": "马尾区",
+				"value": "350105"
+			},
+			{
+				"label": "晋安区",
+				"value": "350111"
+			},
+			{
+				"label": "闽侯县",
+				"value": "350121"
+			},
+			{
+				"label": "连江县",
+				"value": "350122"
+			},
+			{
+				"label": "罗源县",
+				"value": "350123"
+			},
+			{
+				"label": "闽清县",
+				"value": "350124"
+			},
+			{
+				"label": "永泰县",
+				"value": "350125"
+			},
+			{
+				"label": "平潭县",
+				"value": "350128"
+			},
+			{
+				"label": "福清市",
+				"value": "350181"
+			},
+			{
+				"label": "长乐市",
+				"value": "350182"
+			}
+		],
+		[{
+				"label": "思明区",
+				"value": "350203"
+			},
+			{
+				"label": "海沧区",
+				"value": "350205"
+			},
+			{
+				"label": "湖里区",
+				"value": "350206"
+			},
+			{
+				"label": "集美区",
+				"value": "350211"
+			},
+			{
+				"label": "同安区",
+				"value": "350212"
+			},
+			{
+				"label": "翔安区",
+				"value": "350213"
+			}
+		],
+		[{
+				"label": "城厢区",
+				"value": "350302"
+			},
+			{
+				"label": "涵江区",
+				"value": "350303"
+			},
+			{
+				"label": "荔城区",
+				"value": "350304"
+			},
+			{
+				"label": "秀屿区",
+				"value": "350305"
+			},
+			{
+				"label": "仙游县",
+				"value": "350322"
+			}
+		],
+		[{
+				"label": "梅列区",
+				"value": "350402"
+			},
+			{
+				"label": "三元区",
+				"value": "350403"
+			},
+			{
+				"label": "明溪县",
+				"value": "350421"
+			},
+			{
+				"label": "清流县",
+				"value": "350423"
+			},
+			{
+				"label": "宁化县",
+				"value": "350424"
+			},
+			{
+				"label": "大田县",
+				"value": "350425"
+			},
+			{
+				"label": "尤溪县",
+				"value": "350426"
+			},
+			{
+				"label": "沙县",
+				"value": "350427"
+			},
+			{
+				"label": "将乐县",
+				"value": "350428"
+			},
+			{
+				"label": "泰宁县",
+				"value": "350429"
+			},
+			{
+				"label": "建宁县",
+				"value": "350430"
+			},
+			{
+				"label": "永安市",
+				"value": "350481"
+			}
+		],
+		[{
+				"label": "鲤城区",
+				"value": "350502"
+			},
+			{
+				"label": "丰泽区",
+				"value": "350503"
+			},
+			{
+				"label": "洛江区",
+				"value": "350504"
+			},
+			{
+				"label": "泉港区",
+				"value": "350505"
+			},
+			{
+				"label": "惠安县",
+				"value": "350521"
+			},
+			{
+				"label": "安溪县",
+				"value": "350524"
+			},
+			{
+				"label": "永春县",
+				"value": "350525"
+			},
+			{
+				"label": "德化县",
+				"value": "350526"
+			},
+			{
+				"label": "金门县",
+				"value": "350527"
+			},
+			{
+				"label": "石狮市",
+				"value": "350581"
+			},
+			{
+				"label": "晋江市",
+				"value": "350582"
+			},
+			{
+				"label": "南安市",
+				"value": "350583"
+			}
+		],
+		[{
+				"label": "芗城区",
+				"value": "350602"
+			},
+			{
+				"label": "龙文区",
+				"value": "350603"
+			},
+			{
+				"label": "云霄县",
+				"value": "350622"
+			},
+			{
+				"label": "漳浦县",
+				"value": "350623"
+			},
+			{
+				"label": "诏安县",
+				"value": "350624"
+			},
+			{
+				"label": "长泰县",
+				"value": "350625"
+			},
+			{
+				"label": "东山县",
+				"value": "350626"
+			},
+			{
+				"label": "南靖县",
+				"value": "350627"
+			},
+			{
+				"label": "平和县",
+				"value": "350628"
+			},
+			{
+				"label": "华安县",
+				"value": "350629"
+			},
+			{
+				"label": "龙海市",
+				"value": "350681"
+			}
+		],
+		[{
+				"label": "延平区",
+				"value": "350702"
+			},
+			{
+				"label": "建阳区",
+				"value": "350703"
+			},
+			{
+				"label": "顺昌县",
+				"value": "350721"
+			},
+			{
+				"label": "浦城县",
+				"value": "350722"
+			},
+			{
+				"label": "光泽县",
+				"value": "350723"
+			},
+			{
+				"label": "松溪县",
+				"value": "350724"
+			},
+			{
+				"label": "政和县",
+				"value": "350725"
+			},
+			{
+				"label": "邵武市",
+				"value": "350781"
+			},
+			{
+				"label": "武夷山市",
+				"value": "350782"
+			},
+			{
+				"label": "建瓯市",
+				"value": "350783"
+			}
+		],
+		[{
+				"label": "新罗区",
+				"value": "350802"
+			},
+			{
+				"label": "永定区",
+				"value": "350803"
+			},
+			{
+				"label": "长汀县",
+				"value": "350821"
+			},
+			{
+				"label": "上杭县",
+				"value": "350823"
+			},
+			{
+				"label": "武平县",
+				"value": "350824"
+			},
+			{
+				"label": "连城县",
+				"value": "350825"
+			},
+			{
+				"label": "漳平市",
+				"value": "350881"
+			}
+		],
+		[{
+				"label": "蕉城区",
+				"value": "350902"
+			},
+			{
+				"label": "霞浦县",
+				"value": "350921"
+			},
+			{
+				"label": "古田县",
+				"value": "350922"
+			},
+			{
+				"label": "屏南县",
+				"value": "350923"
+			},
+			{
+				"label": "寿宁县",
+				"value": "350924"
+			},
+			{
+				"label": "周宁县",
+				"value": "350925"
+			},
+			{
+				"label": "柘荣县",
+				"value": "350926"
+			},
+			{
+				"label": "福安市",
+				"value": "350981"
+			},
+			{
+				"label": "福鼎市",
+				"value": "350982"
+			}
+		]
+	],
+	[
+		[{
+				"label": "东湖区",
+				"value": "360102"
+			},
+			{
+				"label": "西湖区",
+				"value": "360103"
+			},
+			{
+				"label": "青云谱区",
+				"value": "360104"
+			},
+			{
+				"label": "湾里区",
+				"value": "360105"
+			},
+			{
+				"label": "青山湖区",
+				"value": "360111"
+			},
+			{
+				"label": "新建区",
+				"value": "360112"
+			},
+			{
+				"label": "南昌县",
+				"value": "360121"
+			},
+			{
+				"label": "安义县",
+				"value": "360123"
+			},
+			{
+				"label": "进贤县",
+				"value": "360124"
+			}
+		],
+		[{
+				"label": "昌江区",
+				"value": "360202"
+			},
+			{
+				"label": "珠山区",
+				"value": "360203"
+			},
+			{
+				"label": "浮梁县",
+				"value": "360222"
+			},
+			{
+				"label": "乐平市",
+				"value": "360281"
+			}
+		],
+		[{
+				"label": "安源区",
+				"value": "360302"
+			},
+			{
+				"label": "湘东区",
+				"value": "360313"
+			},
+			{
+				"label": "莲花县",
+				"value": "360321"
+			},
+			{
+				"label": "上栗县",
+				"value": "360322"
+			},
+			{
+				"label": "芦溪县",
+				"value": "360323"
+			}
+		],
+		[{
+				"label": "濂溪区",
+				"value": "360402"
+			},
+			{
+				"label": "浔阳区",
+				"value": "360403"
+			},
+			{
+				"label": "柴桑区",
+				"value": "360404"
+			},
+			{
+				"label": "武宁县",
+				"value": "360423"
+			},
+			{
+				"label": "修水县",
+				"value": "360424"
+			},
+			{
+				"label": "永修县",
+				"value": "360425"
+			},
+			{
+				"label": "德安县",
+				"value": "360426"
+			},
+			{
+				"label": "都昌县",
+				"value": "360428"
+			},
+			{
+				"label": "湖口县",
+				"value": "360429"
+			},
+			{
+				"label": "彭泽县",
+				"value": "360430"
+			},
+			{
+				"label": "瑞昌市",
+				"value": "360481"
+			},
+			{
+				"label": "共青城市",
+				"value": "360482"
+			},
+			{
+				"label": "庐山市",
+				"value": "360483"
+			}
+		],
+		[{
+				"label": "渝水区",
+				"value": "360502"
+			},
+			{
+				"label": "分宜县",
+				"value": "360521"
+			}
+		],
+		[{
+				"label": "月湖区",
+				"value": "360602"
+			},
+			{
+				"label": "余江县",
+				"value": "360622"
+			},
+			{
+				"label": "贵溪市",
+				"value": "360681"
+			}
+		],
+		[{
+				"label": "章贡区",
+				"value": "360702"
+			},
+			{
+				"label": "南康区",
+				"value": "360703"
+			},
+			{
+				"label": "赣县区",
+				"value": "360704"
+			},
+			{
+				"label": "信丰县",
+				"value": "360722"
+			},
+			{
+				"label": "大余县",
+				"value": "360723"
+			},
+			{
+				"label": "上犹县",
+				"value": "360724"
+			},
+			{
+				"label": "崇义县",
+				"value": "360725"
+			},
+			{
+				"label": "安远县",
+				"value": "360726"
+			},
+			{
+				"label": "龙南县",
+				"value": "360727"
+			},
+			{
+				"label": "定南县",
+				"value": "360728"
+			},
+			{
+				"label": "全南县",
+				"value": "360729"
+			},
+			{
+				"label": "宁都县",
+				"value": "360730"
+			},
+			{
+				"label": "于都县",
+				"value": "360731"
+			},
+			{
+				"label": "兴国县",
+				"value": "360732"
+			},
+			{
+				"label": "会昌县",
+				"value": "360733"
+			},
+			{
+				"label": "寻乌县",
+				"value": "360734"
+			},
+			{
+				"label": "石城县",
+				"value": "360735"
+			},
+			{
+				"label": "瑞金市",
+				"value": "360781"
+			}
+		],
+		[{
+				"label": "吉州区",
+				"value": "360802"
+			},
+			{
+				"label": "青原区",
+				"value": "360803"
+			},
+			{
+				"label": "吉安县",
+				"value": "360821"
+			},
+			{
+				"label": "吉水县",
+				"value": "360822"
+			},
+			{
+				"label": "峡江县",
+				"value": "360823"
+			},
+			{
+				"label": "新干县",
+				"value": "360824"
+			},
+			{
+				"label": "永丰县",
+				"value": "360825"
+			},
+			{
+				"label": "泰和县",
+				"value": "360826"
+			},
+			{
+				"label": "遂川县",
+				"value": "360827"
+			},
+			{
+				"label": "万安县",
+				"value": "360828"
+			},
+			{
+				"label": "安福县",
+				"value": "360829"
+			},
+			{
+				"label": "永新县",
+				"value": "360830"
+			},
+			{
+				"label": "井冈山市",
+				"value": "360881"
+			}
+		],
+		[{
+				"label": "袁州区",
+				"value": "360902"
+			},
+			{
+				"label": "奉新县",
+				"value": "360921"
+			},
+			{
+				"label": "万载县",
+				"value": "360922"
+			},
+			{
+				"label": "上高县",
+				"value": "360923"
+			},
+			{
+				"label": "宜丰县",
+				"value": "360924"
+			},
+			{
+				"label": "靖安县",
+				"value": "360925"
+			},
+			{
+				"label": "铜鼓县",
+				"value": "360926"
+			},
+			{
+				"label": "丰城市",
+				"value": "360981"
+			},
+			{
+				"label": "樟树市",
+				"value": "360982"
+			},
+			{
+				"label": "高安市",
+				"value": "360983"
+			}
+		],
+		[{
+				"label": "临川区",
+				"value": "361002"
+			},
+			{
+				"label": "东乡区",
+				"value": "361003"
+			},
+			{
+				"label": "南城县",
+				"value": "361021"
+			},
+			{
+				"label": "黎川县",
+				"value": "361022"
+			},
+			{
+				"label": "南丰县",
+				"value": "361023"
+			},
+			{
+				"label": "崇仁县",
+				"value": "361024"
+			},
+			{
+				"label": "乐安县",
+				"value": "361025"
+			},
+			{
+				"label": "宜黄县",
+				"value": "361026"
+			},
+			{
+				"label": "金溪县",
+				"value": "361027"
+			},
+			{
+				"label": "资溪县",
+				"value": "361028"
+			},
+			{
+				"label": "广昌县",
+				"value": "361030"
+			}
+		],
+		[{
+				"label": "信州区",
+				"value": "361102"
+			},
+			{
+				"label": "广丰区",
+				"value": "361103"
+			},
+			{
+				"label": "上饶县",
+				"value": "361121"
+			},
+			{
+				"label": "玉山县",
+				"value": "361123"
+			},
+			{
+				"label": "铅山县",
+				"value": "361124"
+			},
+			{
+				"label": "横峰县",
+				"value": "361125"
+			},
+			{
+				"label": "弋阳县",
+				"value": "361126"
+			},
+			{
+				"label": "余干县",
+				"value": "361127"
+			},
+			{
+				"label": "鄱阳县",
+				"value": "361128"
+			},
+			{
+				"label": "万年县",
+				"value": "361129"
+			},
+			{
+				"label": "婺源县",
+				"value": "361130"
+			},
+			{
+				"label": "德兴市",
+				"value": "361181"
+			}
+		]
+	],
+	[
+		[{
+				"label": "历下区",
+				"value": "370102"
+			},
+			{
+				"label": "市中区",
+				"value": "370103"
+			},
+			{
+				"label": "槐荫区",
+				"value": "370104"
+			},
+			{
+				"label": "天桥区",
+				"value": "370105"
+			},
+			{
+				"label": "历城区",
+				"value": "370112"
+			},
+			{
+				"label": "长清区",
+				"value": "370113"
+			},
+			{
+				"label": "章丘区",
+				"value": "370114"
+			},
+			{
+				"label": "平阴县",
+				"value": "370124"
+			},
+			{
+				"label": "济阳县",
+				"value": "370125"
+			},
+			{
+				"label": "商河县",
+				"value": "370126"
+			},
+			{
+				"label": "济南高新技术产业开发区",
+				"value": "370171"
+			}
+		],
+		[{
+				"label": "市南区",
+				"value": "370202"
+			},
+			{
+				"label": "市北区",
+				"value": "370203"
+			},
+			{
+				"label": "黄岛区",
+				"value": "370211"
+			},
+			{
+				"label": "崂山区",
+				"value": "370212"
+			},
+			{
+				"label": "李沧区",
+				"value": "370213"
+			},
+			{
+				"label": "城阳区",
+				"value": "370214"
+			},
+			{
+				"label": "即墨区",
+				"value": "370215"
+			},
+			{
+				"label": "青岛高新技术产业开发区",
+				"value": "370271"
+			},
+			{
+				"label": "胶州市",
+				"value": "370281"
+			},
+			{
+				"label": "平度市",
+				"value": "370283"
+			},
+			{
+				"label": "莱西市",
+				"value": "370285"
+			}
+		],
+		[{
+				"label": "淄川区",
+				"value": "370302"
+			},
+			{
+				"label": "张店区",
+				"value": "370303"
+			},
+			{
+				"label": "博山区",
+				"value": "370304"
+			},
+			{
+				"label": "临淄区",
+				"value": "370305"
+			},
+			{
+				"label": "周村区",
+				"value": "370306"
+			},
+			{
+				"label": "桓台县",
+				"value": "370321"
+			},
+			{
+				"label": "高青县",
+				"value": "370322"
+			},
+			{
+				"label": "沂源县",
+				"value": "370323"
+			}
+		],
+		[{
+				"label": "市中区",
+				"value": "370402"
+			},
+			{
+				"label": "薛城区",
+				"value": "370403"
+			},
+			{
+				"label": "峄城区",
+				"value": "370404"
+			},
+			{
+				"label": "台儿庄区",
+				"value": "370405"
+			},
+			{
+				"label": "山亭区",
+				"value": "370406"
+			},
+			{
+				"label": "滕州市",
+				"value": "370481"
+			}
+		],
+		[{
+				"label": "东营区",
+				"value": "370502"
+			},
+			{
+				"label": "河口区",
+				"value": "370503"
+			},
+			{
+				"label": "垦利区",
+				"value": "370505"
+			},
+			{
+				"label": "利津县",
+				"value": "370522"
+			},
+			{
+				"label": "广饶县",
+				"value": "370523"
+			},
+			{
+				"label": "东营经济技术开发区",
+				"value": "370571"
+			},
+			{
+				"label": "东营港经济开发区",
+				"value": "370572"
+			}
+		],
+		[{
+				"label": "芝罘区",
+				"value": "370602"
+			},
+			{
+				"label": "福山区",
+				"value": "370611"
+			},
+			{
+				"label": "牟平区",
+				"value": "370612"
+			},
+			{
+				"label": "莱山区",
+				"value": "370613"
+			},
+			{
+				"label": "长岛县",
+				"value": "370634"
+			},
+			{
+				"label": "烟台高新技术产业开发区",
+				"value": "370671"
+			},
+			{
+				"label": "烟台经济技术开发区",
+				"value": "370672"
+			},
+			{
+				"label": "龙口市",
+				"value": "370681"
+			},
+			{
+				"label": "莱阳市",
+				"value": "370682"
+			},
+			{
+				"label": "莱州市",
+				"value": "370683"
+			},
+			{
+				"label": "蓬莱市",
+				"value": "370684"
+			},
+			{
+				"label": "招远市",
+				"value": "370685"
+			},
+			{
+				"label": "栖霞市",
+				"value": "370686"
+			},
+			{
+				"label": "海阳市",
+				"value": "370687"
+			}
+		],
+		[{
+				"label": "潍城区",
+				"value": "370702"
+			},
+			{
+				"label": "寒亭区",
+				"value": "370703"
+			},
+			{
+				"label": "坊子区",
+				"value": "370704"
+			},
+			{
+				"label": "奎文区",
+				"value": "370705"
+			},
+			{
+				"label": "临朐县",
+				"value": "370724"
+			},
+			{
+				"label": "昌乐县",
+				"value": "370725"
+			},
+			{
+				"label": "潍坊滨海经济技术开发区",
+				"value": "370772"
+			},
+			{
+				"label": "青州市",
+				"value": "370781"
+			},
+			{
+				"label": "诸城市",
+				"value": "370782"
+			},
+			{
+				"label": "寿光市",
+				"value": "370783"
+			},
+			{
+				"label": "安丘市",
+				"value": "370784"
+			},
+			{
+				"label": "高密市",
+				"value": "370785"
+			},
+			{
+				"label": "昌邑市",
+				"value": "370786"
+			}
+		],
+		[{
+				"label": "任城区",
+				"value": "370811"
+			},
+			{
+				"label": "兖州区",
+				"value": "370812"
+			},
+			{
+				"label": "微山县",
+				"value": "370826"
+			},
+			{
+				"label": "鱼台县",
+				"value": "370827"
+			},
+			{
+				"label": "金乡县",
+				"value": "370828"
+			},
+			{
+				"label": "嘉祥县",
+				"value": "370829"
+			},
+			{
+				"label": "汶上县",
+				"value": "370830"
+			},
+			{
+				"label": "泗水县",
+				"value": "370831"
+			},
+			{
+				"label": "梁山县",
+				"value": "370832"
+			},
+			{
+				"label": "济宁高新技术产业开发区",
+				"value": "370871"
+			},
+			{
+				"label": "曲阜市",
+				"value": "370881"
+			},
+			{
+				"label": "邹城市",
+				"value": "370883"
+			}
+		],
+		[{
+				"label": "泰山区",
+				"value": "370902"
+			},
+			{
+				"label": "岱岳区",
+				"value": "370911"
+			},
+			{
+				"label": "宁阳县",
+				"value": "370921"
+			},
+			{
+				"label": "东平县",
+				"value": "370923"
+			},
+			{
+				"label": "新泰市",
+				"value": "370982"
+			},
+			{
+				"label": "肥城市",
+				"value": "370983"
+			}
+		],
+		[{
+				"label": "环翠区",
+				"value": "371002"
+			},
+			{
+				"label": "文登区",
+				"value": "371003"
+			},
+			{
+				"label": "威海火炬高技术产业开发区",
+				"value": "371071"
+			},
+			{
+				"label": "威海经济技术开发区",
+				"value": "371072"
+			},
+			{
+				"label": "威海临港经济技术开发区",
+				"value": "371073"
+			},
+			{
+				"label": "荣成市",
+				"value": "371082"
+			},
+			{
+				"label": "乳山市",
+				"value": "371083"
+			}
+		],
+		[{
+				"label": "东港区",
+				"value": "371102"
+			},
+			{
+				"label": "岚山区",
+				"value": "371103"
+			},
+			{
+				"label": "五莲县",
+				"value": "371121"
+			},
+			{
+				"label": "莒县",
+				"value": "371122"
+			},
+			{
+				"label": "日照经济技术开发区",
+				"value": "371171"
+			},
+			{
+				"label": "日照国际海洋城",
+				"value": "371172"
+			}
+		],
+		[{
+				"label": "莱城区",
+				"value": "371202"
+			},
+			{
+				"label": "钢城区",
+				"value": "371203"
+			}
+		],
+		[{
+				"label": "兰山区",
+				"value": "371302"
+			},
+			{
+				"label": "罗庄区",
+				"value": "371311"
+			},
+			{
+				"label": "河东区",
+				"value": "371312"
+			},
+			{
+				"label": "沂南县",
+				"value": "371321"
+			},
+			{
+				"label": "郯城县",
+				"value": "371322"
+			},
+			{
+				"label": "沂水县",
+				"value": "371323"
+			},
+			{
+				"label": "兰陵县",
+				"value": "371324"
+			},
+			{
+				"label": "费县",
+				"value": "371325"
+			},
+			{
+				"label": "平邑县",
+				"value": "371326"
+			},
+			{
+				"label": "莒南县",
+				"value": "371327"
+			},
+			{
+				"label": "蒙阴县",
+				"value": "371328"
+			},
+			{
+				"label": "临沭县",
+				"value": "371329"
+			},
+			{
+				"label": "临沂高新技术产业开发区",
+				"value": "371371"
+			},
+			{
+				"label": "临沂经济技术开发区",
+				"value": "371372"
+			},
+			{
+				"label": "临沂临港经济开发区",
+				"value": "371373"
+			}
+		],
+		[{
+				"label": "德城区",
+				"value": "371402"
+			},
+			{
+				"label": "陵城区",
+				"value": "371403"
+			},
+			{
+				"label": "宁津县",
+				"value": "371422"
+			},
+			{
+				"label": "庆云县",
+				"value": "371423"
+			},
+			{
+				"label": "临邑县",
+				"value": "371424"
+			},
+			{
+				"label": "齐河县",
+				"value": "371425"
+			},
+			{
+				"label": "平原县",
+				"value": "371426"
+			},
+			{
+				"label": "夏津县",
+				"value": "371427"
+			},
+			{
+				"label": "武城县",
+				"value": "371428"
+			},
+			{
+				"label": "德州经济技术开发区",
+				"value": "371471"
+			},
+			{
+				"label": "德州运河经济开发区",
+				"value": "371472"
+			},
+			{
+				"label": "乐陵市",
+				"value": "371481"
+			},
+			{
+				"label": "禹城市",
+				"value": "371482"
+			}
+		],
+		[{
+				"label": "东昌府区",
+				"value": "371502"
+			},
+			{
+				"label": "阳谷县",
+				"value": "371521"
+			},
+			{
+				"label": "莘县",
+				"value": "371522"
+			},
+			{
+				"label": "茌平县",
+				"value": "371523"
+			},
+			{
+				"label": "东阿县",
+				"value": "371524"
+			},
+			{
+				"label": "冠县",
+				"value": "371525"
+			},
+			{
+				"label": "高唐县",
+				"value": "371526"
+			},
+			{
+				"label": "临清市",
+				"value": "371581"
+			}
+		],
+		[{
+				"label": "滨城区",
+				"value": "371602"
+			},
+			{
+				"label": "沾化区",
+				"value": "371603"
+			},
+			{
+				"label": "惠民县",
+				"value": "371621"
+			},
+			{
+				"label": "阳信县",
+				"value": "371622"
+			},
+			{
+				"label": "无棣县",
+				"value": "371623"
+			},
+			{
+				"label": "博兴县",
+				"value": "371625"
+			},
+			{
+				"label": "邹平县",
+				"value": "371626"
+			}
+		],
+		[{
+				"label": "牡丹区",
+				"value": "371702"
+			},
+			{
+				"label": "定陶区",
+				"value": "371703"
+			},
+			{
+				"label": "曹县",
+				"value": "371721"
+			},
+			{
+				"label": "单县",
+				"value": "371722"
+			},
+			{
+				"label": "成武县",
+				"value": "371723"
+			},
+			{
+				"label": "巨野县",
+				"value": "371724"
+			},
+			{
+				"label": "郓城县",
+				"value": "371725"
+			},
+			{
+				"label": "鄄城县",
+				"value": "371726"
+			},
+			{
+				"label": "东明县",
+				"value": "371728"
+			},
+			{
+				"label": "菏泽经济技术开发区",
+				"value": "371771"
+			},
+			{
+				"label": "菏泽高新技术开发区",
+				"value": "371772"
+			}
+		]
+	],
+	[
+		[{
+				"label": "中原区",
+				"value": "410102"
+			},
+			{
+				"label": "二七区",
+				"value": "410103"
+			},
+			{
+				"label": "管城回族区",
+				"value": "410104"
+			},
+			{
+				"label": "金水区",
+				"value": "410105"
+			},
+			{
+				"label": "上街区",
+				"value": "410106"
+			},
+			{
+				"label": "惠济区",
+				"value": "410108"
+			},
+			{
+				"label": "中牟县",
+				"value": "410122"
+			},
+			{
+				"label": "郑州经济技术开发区",
+				"value": "410171"
+			},
+			{
+				"label": "郑州高新技术产业开发区",
+				"value": "410172"
+			},
+			{
+				"label": "郑州航空港经济综合实验区",
+				"value": "410173"
+			},
+			{
+				"label": "巩义市",
+				"value": "410181"
+			},
+			{
+				"label": "荥阳市",
+				"value": "410182"
+			},
+			{
+				"label": "新密市",
+				"value": "410183"
+			},
+			{
+				"label": "新郑市",
+				"value": "410184"
+			},
+			{
+				"label": "登封市",
+				"value": "410185"
+			}
+		],
+		[{
+				"label": "龙亭区",
+				"value": "410202"
+			},
+			{
+				"label": "顺河回族区",
+				"value": "410203"
+			},
+			{
+				"label": "鼓楼区",
+				"value": "410204"
+			},
+			{
+				"label": "禹王台区",
+				"value": "410205"
+			},
+			{
+				"label": "祥符区",
+				"value": "410212"
+			},
+			{
+				"label": "杞县",
+				"value": "410221"
+			},
+			{
+				"label": "通许县",
+				"value": "410222"
+			},
+			{
+				"label": "尉氏县",
+				"value": "410223"
+			},
+			{
+				"label": "兰考县",
+				"value": "410225"
+			}
+		],
+		[{
+				"label": "老城区",
+				"value": "410302"
+			},
+			{
+				"label": "西工区",
+				"value": "410303"
+			},
+			{
+				"label": "瀍河回族区",
+				"value": "410304"
+			},
+			{
+				"label": "涧西区",
+				"value": "410305"
+			},
+			{
+				"label": "吉利区",
+				"value": "410306"
+			},
+			{
+				"label": "洛龙区",
+				"value": "410311"
+			},
+			{
+				"label": "孟津县",
+				"value": "410322"
+			},
+			{
+				"label": "新安县",
+				"value": "410323"
+			},
+			{
+				"label": "栾川县",
+				"value": "410324"
+			},
+			{
+				"label": "嵩县",
+				"value": "410325"
+			},
+			{
+				"label": "汝阳县",
+				"value": "410326"
+			},
+			{
+				"label": "宜阳县",
+				"value": "410327"
+			},
+			{
+				"label": "洛宁县",
+				"value": "410328"
+			},
+			{
+				"label": "伊川县",
+				"value": "410329"
+			},
+			{
+				"label": "洛阳高新技术产业开发区",
+				"value": "410371"
+			},
+			{
+				"label": "偃师市",
+				"value": "410381"
+			}
+		],
+		[{
+				"label": "新华区",
+				"value": "410402"
+			},
+			{
+				"label": "卫东区",
+				"value": "410403"
+			},
+			{
+				"label": "石龙区",
+				"value": "410404"
+			},
+			{
+				"label": "湛河区",
+				"value": "410411"
+			},
+			{
+				"label": "宝丰县",
+				"value": "410421"
+			},
+			{
+				"label": "叶县",
+				"value": "410422"
+			},
+			{
+				"label": "鲁山县",
+				"value": "410423"
+			},
+			{
+				"label": "郏县",
+				"value": "410425"
+			},
+			{
+				"label": "平顶山高新技术产业开发区",
+				"value": "410471"
+			},
+			{
+				"label": "平顶山市新城区",
+				"value": "410472"
+			},
+			{
+				"label": "舞钢市",
+				"value": "410481"
+			},
+			{
+				"label": "汝州市",
+				"value": "410482"
+			}
+		],
+		[{
+				"label": "文峰区",
+				"value": "410502"
+			},
+			{
+				"label": "北关区",
+				"value": "410503"
+			},
+			{
+				"label": "殷都区",
+				"value": "410505"
+			},
+			{
+				"label": "龙安区",
+				"value": "410506"
+			},
+			{
+				"label": "安阳县",
+				"value": "410522"
+			},
+			{
+				"label": "汤阴县",
+				"value": "410523"
+			},
+			{
+				"label": "滑县",
+				"value": "410526"
+			},
+			{
+				"label": "内黄县",
+				"value": "410527"
+			},
+			{
+				"label": "安阳高新技术产业开发区",
+				"value": "410571"
+			},
+			{
+				"label": "林州市",
+				"value": "410581"
+			}
+		],
+		[{
+				"label": "鹤山区",
+				"value": "410602"
+			},
+			{
+				"label": "山城区",
+				"value": "410603"
+			},
+			{
+				"label": "淇滨区",
+				"value": "410611"
+			},
+			{
+				"label": "浚县",
+				"value": "410621"
+			},
+			{
+				"label": "淇县",
+				"value": "410622"
+			},
+			{
+				"label": "鹤壁经济技术开发区",
+				"value": "410671"
+			}
+		],
+		[{
+				"label": "红旗区",
+				"value": "410702"
+			},
+			{
+				"label": "卫滨区",
+				"value": "410703"
+			},
+			{
+				"label": "凤泉区",
+				"value": "410704"
+			},
+			{
+				"label": "牧野区",
+				"value": "410711"
+			},
+			{
+				"label": "新乡县",
+				"value": "410721"
+			},
+			{
+				"label": "获嘉县",
+				"value": "410724"
+			},
+			{
+				"label": "原阳县",
+				"value": "410725"
+			},
+			{
+				"label": "延津县",
+				"value": "410726"
+			},
+			{
+				"label": "封丘县",
+				"value": "410727"
+			},
+			{
+				"label": "长垣县",
+				"value": "410728"
+			},
+			{
+				"label": "新乡高新技术产业开发区",
+				"value": "410771"
+			},
+			{
+				"label": "新乡经济技术开发区",
+				"value": "410772"
+			},
+			{
+				"label": "新乡市平原城乡一体化示范区",
+				"value": "410773"
+			},
+			{
+				"label": "卫辉市",
+				"value": "410781"
+			},
+			{
+				"label": "辉县市",
+				"value": "410782"
+			}
+		],
+		[{
+				"label": "解放区",
+				"value": "410802"
+			},
+			{
+				"label": "中站区",
+				"value": "410803"
+			},
+			{
+				"label": "马村区",
+				"value": "410804"
+			},
+			{
+				"label": "山阳区",
+				"value": "410811"
+			},
+			{
+				"label": "修武县",
+				"value": "410821"
+			},
+			{
+				"label": "博爱县",
+				"value": "410822"
+			},
+			{
+				"label": "武陟县",
+				"value": "410823"
+			},
+			{
+				"label": "温县",
+				"value": "410825"
+			},
+			{
+				"label": "焦作城乡一体化示范区",
+				"value": "410871"
+			},
+			{
+				"label": "沁阳市",
+				"value": "410882"
+			},
+			{
+				"label": "孟州市",
+				"value": "410883"
+			}
+		],
+		[{
+				"label": "华龙区",
+				"value": "410902"
+			},
+			{
+				"label": "清丰县",
+				"value": "410922"
+			},
+			{
+				"label": "南乐县",
+				"value": "410923"
+			},
+			{
+				"label": "范县",
+				"value": "410926"
+			},
+			{
+				"label": "台前县",
+				"value": "410927"
+			},
+			{
+				"label": "濮阳县",
+				"value": "410928"
+			},
+			{
+				"label": "河南濮阳工业园区",
+				"value": "410971"
+			},
+			{
+				"label": "濮阳经济技术开发区",
+				"value": "410972"
+			}
+		],
+		[{
+				"label": "魏都区",
+				"value": "411002"
+			},
+			{
+				"label": "建安区",
+				"value": "411003"
+			},
+			{
+				"label": "鄢陵县",
+				"value": "411024"
+			},
+			{
+				"label": "襄城县",
+				"value": "411025"
+			},
+			{
+				"label": "许昌经济技术开发区",
+				"value": "411071"
+			},
+			{
+				"label": "禹州市",
+				"value": "411081"
+			},
+			{
+				"label": "长葛市",
+				"value": "411082"
+			}
+		],
+		[{
+				"label": "源汇区",
+				"value": "411102"
+			},
+			{
+				"label": "郾城区",
+				"value": "411103"
+			},
+			{
+				"label": "召陵区",
+				"value": "411104"
+			},
+			{
+				"label": "舞阳县",
+				"value": "411121"
+			},
+			{
+				"label": "临颍县",
+				"value": "411122"
+			},
+			{
+				"label": "漯河经济技术开发区",
+				"value": "411171"
+			}
+		],
+		[{
+				"label": "湖滨区",
+				"value": "411202"
+			},
+			{
+				"label": "陕州区",
+				"value": "411203"
+			},
+			{
+				"label": "渑池县",
+				"value": "411221"
+			},
+			{
+				"label": "卢氏县",
+				"value": "411224"
+			},
+			{
+				"label": "河南三门峡经济开发区",
+				"value": "411271"
+			},
+			{
+				"label": "义马市",
+				"value": "411281"
+			},
+			{
+				"label": "灵宝市",
+				"value": "411282"
+			}
+		],
+		[{
+				"label": "宛城区",
+				"value": "411302"
+			},
+			{
+				"label": "卧龙区",
+				"value": "411303"
+			},
+			{
+				"label": "南召县",
+				"value": "411321"
+			},
+			{
+				"label": "方城县",
+				"value": "411322"
+			},
+			{
+				"label": "西峡县",
+				"value": "411323"
+			},
+			{
+				"label": "镇平县",
+				"value": "411324"
+			},
+			{
+				"label": "内乡县",
+				"value": "411325"
+			},
+			{
+				"label": "淅川县",
+				"value": "411326"
+			},
+			{
+				"label": "社旗县",
+				"value": "411327"
+			},
+			{
+				"label": "唐河县",
+				"value": "411328"
+			},
+			{
+				"label": "新野县",
+				"value": "411329"
+			},
+			{
+				"label": "桐柏县",
+				"value": "411330"
+			},
+			{
+				"label": "南阳高新技术产业开发区",
+				"value": "411371"
+			},
+			{
+				"label": "南阳市城乡一体化示范区",
+				"value": "411372"
+			},
+			{
+				"label": "邓州市",
+				"value": "411381"
+			}
+		],
+		[{
+				"label": "梁园区",
+				"value": "411402"
+			},
+			{
+				"label": "睢阳区",
+				"value": "411403"
+			},
+			{
+				"label": "民权县",
+				"value": "411421"
+			},
+			{
+				"label": "睢县",
+				"value": "411422"
+			},
+			{
+				"label": "宁陵县",
+				"value": "411423"
+			},
+			{
+				"label": "柘城县",
+				"value": "411424"
+			},
+			{
+				"label": "虞城县",
+				"value": "411425"
+			},
+			{
+				"label": "夏邑县",
+				"value": "411426"
+			},
+			{
+				"label": "豫东综合物流产业聚集区",
+				"value": "411471"
+			},
+			{
+				"label": "河南商丘经济开发区",
+				"value": "411472"
+			},
+			{
+				"label": "永城市",
+				"value": "411481"
+			}
+		],
+		[{
+				"label": "浉河区",
+				"value": "411502"
+			},
+			{
+				"label": "平桥区",
+				"value": "411503"
+			},
+			{
+				"label": "罗山县",
+				"value": "411521"
+			},
+			{
+				"label": "光山县",
+				"value": "411522"
+			},
+			{
+				"label": "新县",
+				"value": "411523"
+			},
+			{
+				"label": "商城县",
+				"value": "411524"
+			},
+			{
+				"label": "固始县",
+				"value": "411525"
+			},
+			{
+				"label": "潢川县",
+				"value": "411526"
+			},
+			{
+				"label": "淮滨县",
+				"value": "411527"
+			},
+			{
+				"label": "息县",
+				"value": "411528"
+			},
+			{
+				"label": "信阳高新技术产业开发区",
+				"value": "411571"
+			}
+		],
+		[{
+				"label": "川汇区",
+				"value": "411602"
+			},
+			{
+				"label": "扶沟县",
+				"value": "411621"
+			},
+			{
+				"label": "西华县",
+				"value": "411622"
+			},
+			{
+				"label": "商水县",
+				"value": "411623"
+			},
+			{
+				"label": "沈丘县",
+				"value": "411624"
+			},
+			{
+				"label": "郸城县",
+				"value": "411625"
+			},
+			{
+				"label": "淮阳县",
+				"value": "411626"
+			},
+			{
+				"label": "太康县",
+				"value": "411627"
+			},
+			{
+				"label": "鹿邑县",
+				"value": "411628"
+			},
+			{
+				"label": "河南周口经济开发区",
+				"value": "411671"
+			},
+			{
+				"label": "项城市",
+				"value": "411681"
+			}
+		],
+		[{
+				"label": "驿城区",
+				"value": "411702"
+			},
+			{
+				"label": "西平县",
+				"value": "411721"
+			},
+			{
+				"label": "上蔡县",
+				"value": "411722"
+			},
+			{
+				"label": "平舆县",
+				"value": "411723"
+			},
+			{
+				"label": "正阳县",
+				"value": "411724"
+			},
+			{
+				"label": "确山县",
+				"value": "411725"
+			},
+			{
+				"label": "泌阳县",
+				"value": "411726"
+			},
+			{
+				"label": "汝南县",
+				"value": "411727"
+			},
+			{
+				"label": "遂平县",
+				"value": "411728"
+			},
+			{
+				"label": "新蔡县",
+				"value": "411729"
+			},
+			{
+				"label": "河南驻马店经济开发区",
+				"value": "411771"
+			}
+		],
+		[{
+			"label": "济源市",
+			"value": "419001"
+		}]
+	],
+	[
+		[{
+				"label": "江岸区",
+				"value": "420102"
+			},
+			{
+				"label": "江汉区",
+				"value": "420103"
+			},
+			{
+				"label": "硚口区",
+				"value": "420104"
+			},
+			{
+				"label": "汉阳区",
+				"value": "420105"
+			},
+			{
+				"label": "武昌区",
+				"value": "420106"
+			},
+			{
+				"label": "青山区",
+				"value": "420107"
+			},
+			{
+				"label": "洪山区",
+				"value": "420111"
+			},
+			{
+				"label": "东西湖区",
+				"value": "420112"
+			},
+			{
+				"label": "汉南区",
+				"value": "420113"
+			},
+			{
+				"label": "蔡甸区",
+				"value": "420114"
+			},
+			{
+				"label": "江夏区",
+				"value": "420115"
+			},
+			{
+				"label": "黄陂区",
+				"value": "420116"
+			},
+			{
+				"label": "新洲区",
+				"value": "420117"
+			}
+		],
+		[{
+				"label": "黄石港区",
+				"value": "420202"
+			},
+			{
+				"label": "西塞山区",
+				"value": "420203"
+			},
+			{
+				"label": "下陆区",
+				"value": "420204"
+			},
+			{
+				"label": "铁山区",
+				"value": "420205"
+			},
+			{
+				"label": "阳新县",
+				"value": "420222"
+			},
+			{
+				"label": "大冶市",
+				"value": "420281"
+			}
+		],
+		[{
+				"label": "茅箭区",
+				"value": "420302"
+			},
+			{
+				"label": "张湾区",
+				"value": "420303"
+			},
+			{
+				"label": "郧阳区",
+				"value": "420304"
+			},
+			{
+				"label": "郧西县",
+				"value": "420322"
+			},
+			{
+				"label": "竹山县",
+				"value": "420323"
+			},
+			{
+				"label": "竹溪县",
+				"value": "420324"
+			},
+			{
+				"label": "房县",
+				"value": "420325"
+			},
+			{
+				"label": "丹江口市",
+				"value": "420381"
+			}
+		],
+		[{
+				"label": "西陵区",
+				"value": "420502"
+			},
+			{
+				"label": "伍家岗区",
+				"value": "420503"
+			},
+			{
+				"label": "点军区",
+				"value": "420504"
+			},
+			{
+				"label": "猇亭区",
+				"value": "420505"
+			},
+			{
+				"label": "夷陵区",
+				"value": "420506"
+			},
+			{
+				"label": "远安县",
+				"value": "420525"
+			},
+			{
+				"label": "兴山县",
+				"value": "420526"
+			},
+			{
+				"label": "秭归县",
+				"value": "420527"
+			},
+			{
+				"label": "长阳土家族自治县",
+				"value": "420528"
+			},
+			{
+				"label": "五峰土家族自治县",
+				"value": "420529"
+			},
+			{
+				"label": "宜都市",
+				"value": "420581"
+			},
+			{
+				"label": "当阳市",
+				"value": "420582"
+			},
+			{
+				"label": "枝江市",
+				"value": "420583"
+			}
+		],
+		[{
+				"label": "襄城区",
+				"value": "420602"
+			},
+			{
+				"label": "樊城区",
+				"value": "420606"
+			},
+			{
+				"label": "襄州区",
+				"value": "420607"
+			},
+			{
+				"label": "南漳县",
+				"value": "420624"
+			},
+			{
+				"label": "谷城县",
+				"value": "420625"
+			},
+			{
+				"label": "保康县",
+				"value": "420626"
+			},
+			{
+				"label": "老河口市",
+				"value": "420682"
+			},
+			{
+				"label": "枣阳市",
+				"value": "420683"
+			},
+			{
+				"label": "宜城市",
+				"value": "420684"
+			}
+		],
+		[{
+				"label": "梁子湖区",
+				"value": "420702"
+			},
+			{
+				"label": "华容区",
+				"value": "420703"
+			},
+			{
+				"label": "鄂城区",
+				"value": "420704"
+			}
+		],
+		[{
+				"label": "东宝区",
+				"value": "420802"
+			},
+			{
+				"label": "掇刀区",
+				"value": "420804"
+			},
+			{
+				"label": "京山县",
+				"value": "420821"
+			},
+			{
+				"label": "沙洋县",
+				"value": "420822"
+			},
+			{
+				"label": "钟祥市",
+				"value": "420881"
+			}
+		],
+		[{
+				"label": "孝南区",
+				"value": "420902"
+			},
+			{
+				"label": "孝昌县",
+				"value": "420921"
+			},
+			{
+				"label": "大悟县",
+				"value": "420922"
+			},
+			{
+				"label": "云梦县",
+				"value": "420923"
+			},
+			{
+				"label": "应城市",
+				"value": "420981"
+			},
+			{
+				"label": "安陆市",
+				"value": "420982"
+			},
+			{
+				"label": "汉川市",
+				"value": "420984"
+			}
+		],
+		[{
+				"label": "沙市区",
+				"value": "421002"
+			},
+			{
+				"label": "荆州区",
+				"value": "421003"
+			},
+			{
+				"label": "公安县",
+				"value": "421022"
+			},
+			{
+				"label": "监利县",
+				"value": "421023"
+			},
+			{
+				"label": "江陵县",
+				"value": "421024"
+			},
+			{
+				"label": "荆州经济技术开发区",
+				"value": "421071"
+			},
+			{
+				"label": "石首市",
+				"value": "421081"
+			},
+			{
+				"label": "洪湖市",
+				"value": "421083"
+			},
+			{
+				"label": "松滋市",
+				"value": "421087"
+			}
+		],
+		[{
+				"label": "黄州区",
+				"value": "421102"
+			},
+			{
+				"label": "团风县",
+				"value": "421121"
+			},
+			{
+				"label": "红安县",
+				"value": "421122"
+			},
+			{
+				"label": "罗田县",
+				"value": "421123"
+			},
+			{
+				"label": "英山县",
+				"value": "421124"
+			},
+			{
+				"label": "浠水县",
+				"value": "421125"
+			},
+			{
+				"label": "蕲春县",
+				"value": "421126"
+			},
+			{
+				"label": "黄梅县",
+				"value": "421127"
+			},
+			{
+				"label": "龙感湖管理区",
+				"value": "421171"
+			},
+			{
+				"label": "麻城市",
+				"value": "421181"
+			},
+			{
+				"label": "武穴市",
+				"value": "421182"
+			}
+		],
+		[{
+				"label": "咸安区",
+				"value": "421202"
+			},
+			{
+				"label": "嘉鱼县",
+				"value": "421221"
+			},
+			{
+				"label": "通城县",
+				"value": "421222"
+			},
+			{
+				"label": "崇阳县",
+				"value": "421223"
+			},
+			{
+				"label": "通山县",
+				"value": "421224"
+			},
+			{
+				"label": "赤壁市",
+				"value": "421281"
+			}
+		],
+		[{
+				"label": "曾都区",
+				"value": "421303"
+			},
+			{
+				"label": "随县",
+				"value": "421321"
+			},
+			{
+				"label": "广水市",
+				"value": "421381"
+			}
+		],
+		[{
+				"label": "恩施市",
+				"value": "422801"
+			},
+			{
+				"label": "利川市",
+				"value": "422802"
+			},
+			{
+				"label": "建始县",
+				"value": "422822"
+			},
+			{
+				"label": "巴东县",
+				"value": "422823"
+			},
+			{
+				"label": "宣恩县",
+				"value": "422825"
+			},
+			{
+				"label": "咸丰县",
+				"value": "422826"
+			},
+			{
+				"label": "来凤县",
+				"value": "422827"
+			},
+			{
+				"label": "鹤峰县",
+				"value": "422828"
+			}
+		],
+		[{
+				"label": "仙桃市",
+				"value": "429004"
+			},
+			{
+				"label": "潜江市",
+				"value": "429005"
+			},
+			{
+				"label": "天门市",
+				"value": "429006"
+			},
+			{
+				"label": "神农架林区",
+				"value": "429021"
+			}
+		]
+	],
+	[
+		[{
+				"label": "芙蓉区",
+				"value": "430102"
+			},
+			{
+				"label": "天心区",
+				"value": "430103"
+			},
+			{
+				"label": "岳麓区",
+				"value": "430104"
+			},
+			{
+				"label": "开福区",
+				"value": "430105"
+			},
+			{
+				"label": "雨花区",
+				"value": "430111"
+			},
+			{
+				"label": "望城区",
+				"value": "430112"
+			},
+			{
+				"label": "长沙县",
+				"value": "430121"
+			},
+			{
+				"label": "浏阳市",
+				"value": "430181"
+			},
+			{
+				"label": "宁乡市",
+				"value": "430182"
+			}
+		],
+		[{
+				"label": "荷塘区",
+				"value": "430202"
+			},
+			{
+				"label": "芦淞区",
+				"value": "430203"
+			},
+			{
+				"label": "石峰区",
+				"value": "430204"
+			},
+			{
+				"label": "天元区",
+				"value": "430211"
+			},
+			{
+				"label": "株洲县",
+				"value": "430221"
+			},
+			{
+				"label": "攸县",
+				"value": "430223"
+			},
+			{
+				"label": "茶陵县",
+				"value": "430224"
+			},
+			{
+				"label": "炎陵县",
+				"value": "430225"
+			},
+			{
+				"label": "云龙示范区",
+				"value": "430271"
+			},
+			{
+				"label": "醴陵市",
+				"value": "430281"
+			}
+		],
+		[{
+				"label": "雨湖区",
+				"value": "430302"
+			},
+			{
+				"label": "岳塘区",
+				"value": "430304"
+			},
+			{
+				"label": "湘潭县",
+				"value": "430321"
+			},
+			{
+				"label": "湖南湘潭高新技术产业园区",
+				"value": "430371"
+			},
+			{
+				"label": "湘潭昭山示范区",
+				"value": "430372"
+			},
+			{
+				"label": "湘潭九华示范区",
+				"value": "430373"
+			},
+			{
+				"label": "湘乡市",
+				"value": "430381"
+			},
+			{
+				"label": "韶山市",
+				"value": "430382"
+			}
+		],
+		[{
+				"label": "珠晖区",
+				"value": "430405"
+			},
+			{
+				"label": "雁峰区",
+				"value": "430406"
+			},
+			{
+				"label": "石鼓区",
+				"value": "430407"
+			},
+			{
+				"label": "蒸湘区",
+				"value": "430408"
+			},
+			{
+				"label": "南岳区",
+				"value": "430412"
+			},
+			{
+				"label": "衡阳县",
+				"value": "430421"
+			},
+			{
+				"label": "衡南县",
+				"value": "430422"
+			},
+			{
+				"label": "衡山县",
+				"value": "430423"
+			},
+			{
+				"label": "衡东县",
+				"value": "430424"
+			},
+			{
+				"label": "祁东县",
+				"value": "430426"
+			},
+			{
+				"label": "衡阳综合保税区",
+				"value": "430471"
+			},
+			{
+				"label": "湖南衡阳高新技术产业园区",
+				"value": "430472"
+			},
+			{
+				"label": "湖南衡阳松木经济开发区",
+				"value": "430473"
+			},
+			{
+				"label": "耒阳市",
+				"value": "430481"
+			},
+			{
+				"label": "常宁市",
+				"value": "430482"
+			}
+		],
+		[{
+				"label": "双清区",
+				"value": "430502"
+			},
+			{
+				"label": "大祥区",
+				"value": "430503"
+			},
+			{
+				"label": "北塔区",
+				"value": "430511"
+			},
+			{
+				"label": "邵东县",
+				"value": "430521"
+			},
+			{
+				"label": "新邵县",
+				"value": "430522"
+			},
+			{
+				"label": "邵阳县",
+				"value": "430523"
+			},
+			{
+				"label": "隆回县",
+				"value": "430524"
+			},
+			{
+				"label": "洞口县",
+				"value": "430525"
+			},
+			{
+				"label": "绥宁县",
+				"value": "430527"
+			},
+			{
+				"label": "新宁县",
+				"value": "430528"
+			},
+			{
+				"label": "城步苗族自治县",
+				"value": "430529"
+			},
+			{
+				"label": "武冈市",
+				"value": "430581"
+			}
+		],
+		[{
+				"label": "岳阳楼区",
+				"value": "430602"
+			},
+			{
+				"label": "云溪区",
+				"value": "430603"
+			},
+			{
+				"label": "君山区",
+				"value": "430611"
+			},
+			{
+				"label": "岳阳县",
+				"value": "430621"
+			},
+			{
+				"label": "华容县",
+				"value": "430623"
+			},
+			{
+				"label": "湘阴县",
+				"value": "430624"
+			},
+			{
+				"label": "平江县",
+				"value": "430626"
+			},
+			{
+				"label": "岳阳市屈原管理区",
+				"value": "430671"
+			},
+			{
+				"label": "汨罗市",
+				"value": "430681"
+			},
+			{
+				"label": "临湘市",
+				"value": "430682"
+			}
+		],
+		[{
+				"label": "武陵区",
+				"value": "430702"
+			},
+			{
+				"label": "鼎城区",
+				"value": "430703"
+			},
+			{
+				"label": "安乡县",
+				"value": "430721"
+			},
+			{
+				"label": "汉寿县",
+				"value": "430722"
+			},
+			{
+				"label": "澧县",
+				"value": "430723"
+			},
+			{
+				"label": "临澧县",
+				"value": "430724"
+			},
+			{
+				"label": "桃源县",
+				"value": "430725"
+			},
+			{
+				"label": "石门县",
+				"value": "430726"
+			},
+			{
+				"label": "常德市西洞庭管理区",
+				"value": "430771"
+			},
+			{
+				"label": "津市市",
+				"value": "430781"
+			}
+		],
+		[{
+				"label": "永定区",
+				"value": "430802"
+			},
+			{
+				"label": "武陵源区",
+				"value": "430811"
+			},
+			{
+				"label": "慈利县",
+				"value": "430821"
+			},
+			{
+				"label": "桑植县",
+				"value": "430822"
+			}
+		],
+		[{
+				"label": "资阳区",
+				"value": "430902"
+			},
+			{
+				"label": "赫山区",
+				"value": "430903"
+			},
+			{
+				"label": "南县",
+				"value": "430921"
+			},
+			{
+				"label": "桃江县",
+				"value": "430922"
+			},
+			{
+				"label": "安化县",
+				"value": "430923"
+			},
+			{
+				"label": "益阳市大通湖管理区",
+				"value": "430971"
+			},
+			{
+				"label": "湖南益阳高新技术产业园区",
+				"value": "430972"
+			},
+			{
+				"label": "沅江市",
+				"value": "430981"
+			}
+		],
+		[{
+				"label": "北湖区",
+				"value": "431002"
+			},
+			{
+				"label": "苏仙区",
+				"value": "431003"
+			},
+			{
+				"label": "桂阳县",
+				"value": "431021"
+			},
+			{
+				"label": "宜章县",
+				"value": "431022"
+			},
+			{
+				"label": "永兴县",
+				"value": "431023"
+			},
+			{
+				"label": "嘉禾县",
+				"value": "431024"
+			},
+			{
+				"label": "临武县",
+				"value": "431025"
+			},
+			{
+				"label": "汝城县",
+				"value": "431026"
+			},
+			{
+				"label": "桂东县",
+				"value": "431027"
+			},
+			{
+				"label": "安仁县",
+				"value": "431028"
+			},
+			{
+				"label": "资兴市",
+				"value": "431081"
+			}
+		],
+		[{
+				"label": "零陵区",
+				"value": "431102"
+			},
+			{
+				"label": "冷水滩区",
+				"value": "431103"
+			},
+			{
+				"label": "祁阳县",
+				"value": "431121"
+			},
+			{
+				"label": "东安县",
+				"value": "431122"
+			},
+			{
+				"label": "双牌县",
+				"value": "431123"
+			},
+			{
+				"label": "道县",
+				"value": "431124"
+			},
+			{
+				"label": "江永县",
+				"value": "431125"
+			},
+			{
+				"label": "宁远县",
+				"value": "431126"
+			},
+			{
+				"label": "蓝山县",
+				"value": "431127"
+			},
+			{
+				"label": "新田县",
+				"value": "431128"
+			},
+			{
+				"label": "江华瑶族自治县",
+				"value": "431129"
+			},
+			{
+				"label": "永州经济技术开发区",
+				"value": "431171"
+			},
+			{
+				"label": "永州市金洞管理区",
+				"value": "431172"
+			},
+			{
+				"label": "永州市回龙圩管理区",
+				"value": "431173"
+			}
+		],
+		[{
+				"label": "鹤城区",
+				"value": "431202"
+			},
+			{
+				"label": "中方县",
+				"value": "431221"
+			},
+			{
+				"label": "沅陵县",
+				"value": "431222"
+			},
+			{
+				"label": "辰溪县",
+				"value": "431223"
+			},
+			{
+				"label": "溆浦县",
+				"value": "431224"
+			},
+			{
+				"label": "会同县",
+				"value": "431225"
+			},
+			{
+				"label": "麻阳苗族自治县",
+				"value": "431226"
+			},
+			{
+				"label": "新晃侗族自治县",
+				"value": "431227"
+			},
+			{
+				"label": "芷江侗族自治县",
+				"value": "431228"
+			},
+			{
+				"label": "靖州苗族侗族自治县",
+				"value": "431229"
+			},
+			{
+				"label": "通道侗族自治县",
+				"value": "431230"
+			},
+			{
+				"label": "怀化市洪江管理区",
+				"value": "431271"
+			},
+			{
+				"label": "洪江市",
+				"value": "431281"
+			}
+		],
+		[{
+				"label": "娄星区",
+				"value": "431302"
+			},
+			{
+				"label": "双峰县",
+				"value": "431321"
+			},
+			{
+				"label": "新化县",
+				"value": "431322"
+			},
+			{
+				"label": "冷水江市",
+				"value": "431381"
+			},
+			{
+				"label": "涟源市",
+				"value": "431382"
+			}
+		],
+		[{
+				"label": "吉首市",
+				"value": "433101"
+			},
+			{
+				"label": "泸溪县",
+				"value": "433122"
+			},
+			{
+				"label": "凤凰县",
+				"value": "433123"
+			},
+			{
+				"label": "花垣县",
+				"value": "433124"
+			},
+			{
+				"label": "保靖县",
+				"value": "433125"
+			},
+			{
+				"label": "古丈县",
+				"value": "433126"
+			},
+			{
+				"label": "永顺县",
+				"value": "433127"
+			},
+			{
+				"label": "龙山县",
+				"value": "433130"
+			},
+			{
+				"label": "湖南吉首经济开发区",
+				"value": "433172"
+			},
+			{
+				"label": "湖南永顺经济开发区",
+				"value": "433173"
+			}
+		]
+	],
+	[
+		[{
+				"label": "荔湾区",
+				"value": "440103"
+			},
+			{
+				"label": "越秀区",
+				"value": "440104"
+			},
+			{
+				"label": "海珠区",
+				"value": "440105"
+			},
+			{
+				"label": "天河区",
+				"value": "440106"
+			},
+			{
+				"label": "白云区",
+				"value": "440111"
+			},
+			{
+				"label": "黄埔区",
+				"value": "440112"
+			},
+			{
+				"label": "番禺区",
+				"value": "440113"
+			},
+			{
+				"label": "花都区",
+				"value": "440114"
+			},
+			{
+				"label": "南沙区",
+				"value": "440115"
+			},
+			{
+				"label": "从化区",
+				"value": "440117"
+			},
+			{
+				"label": "增城区",
+				"value": "440118"
+			}
+		],
+		[{
+				"label": "武江区",
+				"value": "440203"
+			},
+			{
+				"label": "浈江区",
+				"value": "440204"
+			},
+			{
+				"label": "曲江区",
+				"value": "440205"
+			},
+			{
+				"label": "始兴县",
+				"value": "440222"
+			},
+			{
+				"label": "仁化县",
+				"value": "440224"
+			},
+			{
+				"label": "翁源县",
+				"value": "440229"
+			},
+			{
+				"label": "乳源瑶族自治县",
+				"value": "440232"
+			},
+			{
+				"label": "新丰县",
+				"value": "440233"
+			},
+			{
+				"label": "乐昌市",
+				"value": "440281"
+			},
+			{
+				"label": "南雄市",
+				"value": "440282"
+			}
+		],
+		[{
+				"label": "罗湖区",
+				"value": "440303"
+			},
+			{
+				"label": "福田区",
+				"value": "440304"
+			},
+			{
+				"label": "南山区",
+				"value": "440305"
+			},
+			{
+				"label": "宝安区",
+				"value": "440306"
+			},
+			{
+				"label": "龙岗区",
+				"value": "440307"
+			},
+			{
+				"label": "盐田区",
+				"value": "440308"
+			},
+			{
+				"label": "龙华区",
+				"value": "440309"
+			},
+			{
+				"label": "坪山区",
+				"value": "440310"
+			}
+		],
+		[{
+				"label": "香洲区",
+				"value": "440402"
+			},
+			{
+				"label": "斗门区",
+				"value": "440403"
+			},
+			{
+				"label": "金湾区",
+				"value": "440404"
+			}
+		],
+		[{
+				"label": "龙湖区",
+				"value": "440507"
+			},
+			{
+				"label": "金平区",
+				"value": "440511"
+			},
+			{
+				"label": "濠江区",
+				"value": "440512"
+			},
+			{
+				"label": "潮阳区",
+				"value": "440513"
+			},
+			{
+				"label": "潮南区",
+				"value": "440514"
+			},
+			{
+				"label": "澄海区",
+				"value": "440515"
+			},
+			{
+				"label": "南澳县",
+				"value": "440523"
+			}
+		],
+		[{
+				"label": "禅城区",
+				"value": "440604"
+			},
+			{
+				"label": "南海区",
+				"value": "440605"
+			},
+			{
+				"label": "顺德区",
+				"value": "440606"
+			},
+			{
+				"label": "三水区",
+				"value": "440607"
+			},
+			{
+				"label": "高明区",
+				"value": "440608"
+			}
+		],
+		[{
+				"label": "蓬江区",
+				"value": "440703"
+			},
+			{
+				"label": "江海区",
+				"value": "440704"
+			},
+			{
+				"label": "新会区",
+				"value": "440705"
+			},
+			{
+				"label": "台山市",
+				"value": "440781"
+			},
+			{
+				"label": "开平市",
+				"value": "440783"
+			},
+			{
+				"label": "鹤山市",
+				"value": "440784"
+			},
+			{
+				"label": "恩平市",
+				"value": "440785"
+			}
+		],
+		[{
+				"label": "赤坎区",
+				"value": "440802"
+			},
+			{
+				"label": "霞山区",
+				"value": "440803"
+			},
+			{
+				"label": "坡头区",
+				"value": "440804"
+			},
+			{
+				"label": "麻章区",
+				"value": "440811"
+			},
+			{
+				"label": "遂溪县",
+				"value": "440823"
+			},
+			{
+				"label": "徐闻县",
+				"value": "440825"
+			},
+			{
+				"label": "廉江市",
+				"value": "440881"
+			},
+			{
+				"label": "雷州市",
+				"value": "440882"
+			},
+			{
+				"label": "吴川市",
+				"value": "440883"
+			}
+		],
+		[{
+				"label": "茂南区",
+				"value": "440902"
+			},
+			{
+				"label": "电白区",
+				"value": "440904"
+			},
+			{
+				"label": "高州市",
+				"value": "440981"
+			},
+			{
+				"label": "化州市",
+				"value": "440982"
+			},
+			{
+				"label": "信宜市",
+				"value": "440983"
+			}
+		],
+		[{
+				"label": "端州区",
+				"value": "441202"
+			},
+			{
+				"label": "鼎湖区",
+				"value": "441203"
+			},
+			{
+				"label": "高要区",
+				"value": "441204"
+			},
+			{
+				"label": "广宁县",
+				"value": "441223"
+			},
+			{
+				"label": "怀集县",
+				"value": "441224"
+			},
+			{
+				"label": "封开县",
+				"value": "441225"
+			},
+			{
+				"label": "德庆县",
+				"value": "441226"
+			},
+			{
+				"label": "四会市",
+				"value": "441284"
+			}
+		],
+		[{
+				"label": "惠城区",
+				"value": "441302"
+			},
+			{
+				"label": "惠阳区",
+				"value": "441303"
+			},
+			{
+				"label": "博罗县",
+				"value": "441322"
+			},
+			{
+				"label": "惠东县",
+				"value": "441323"
+			},
+			{
+				"label": "龙门县",
+				"value": "441324"
+			}
+		],
+		[{
+				"label": "梅江区",
+				"value": "441402"
+			},
+			{
+				"label": "梅县区",
+				"value": "441403"
+			},
+			{
+				"label": "大埔县",
+				"value": "441422"
+			},
+			{
+				"label": "丰顺县",
+				"value": "441423"
+			},
+			{
+				"label": "五华县",
+				"value": "441424"
+			},
+			{
+				"label": "平远县",
+				"value": "441426"
+			},
+			{
+				"label": "蕉岭县",
+				"value": "441427"
+			},
+			{
+				"label": "兴宁市",
+				"value": "441481"
+			}
+		],
+		[{
+				"label": "城区",
+				"value": "441502"
+			},
+			{
+				"label": "海丰县",
+				"value": "441521"
+			},
+			{
+				"label": "陆河县",
+				"value": "441523"
+			},
+			{
+				"label": "陆丰市",
+				"value": "441581"
+			}
+		],
+		[{
+				"label": "源城区",
+				"value": "441602"
+			},
+			{
+				"label": "紫金县",
+				"value": "441621"
+			},
+			{
+				"label": "龙川县",
+				"value": "441622"
+			},
+			{
+				"label": "连平县",
+				"value": "441623"
+			},
+			{
+				"label": "和平县",
+				"value": "441624"
+			},
+			{
+				"label": "东源县",
+				"value": "441625"
+			}
+		],
+		[{
+				"label": "江城区",
+				"value": "441702"
+			},
+			{
+				"label": "阳东区",
+				"value": "441704"
+			},
+			{
+				"label": "阳西县",
+				"value": "441721"
+			},
+			{
+				"label": "阳春市",
+				"value": "441781"
+			}
+		],
+		[{
+				"label": "清城区",
+				"value": "441802"
+			},
+			{
+				"label": "清新区",
+				"value": "441803"
+			},
+			{
+				"label": "佛冈县",
+				"value": "441821"
+			},
+			{
+				"label": "阳山县",
+				"value": "441823"
+			},
+			{
+				"label": "连山壮族瑶族自治县",
+				"value": "441825"
+			},
+			{
+				"label": "连南瑶族自治县",
+				"value": "441826"
+			},
+			{
+				"label": "英德市",
+				"value": "441881"
+			},
+			{
+				"label": "连州市",
+				"value": "441882"
+			}
+		],
+		[{
+			"label": "东莞市",
+			"value": "441900"
+		}],
+		[{
+			"label": "中山市",
+			"value": "442000"
+		}],
+		[{
+				"label": "湘桥区",
+				"value": "445102"
+			},
+			{
+				"label": "潮安区",
+				"value": "445103"
+			},
+			{
+				"label": "饶平县",
+				"value": "445122"
+			}
+		],
+		[{
+				"label": "榕城区",
+				"value": "445202"
+			},
+			{
+				"label": "揭东区",
+				"value": "445203"
+			},
+			{
+				"label": "揭西县",
+				"value": "445222"
+			},
+			{
+				"label": "惠来县",
+				"value": "445224"
+			},
+			{
+				"label": "普宁市",
+				"value": "445281"
+			}
+		],
+		[{
+				"label": "云城区",
+				"value": "445302"
+			},
+			{
+				"label": "云安区",
+				"value": "445303"
+			},
+			{
+				"label": "新兴县",
+				"value": "445321"
+			},
+			{
+				"label": "郁南县",
+				"value": "445322"
+			},
+			{
+				"label": "罗定市",
+				"value": "445381"
+			}
+		]
+	],
+	[
+		[{
+				"label": "兴宁区",
+				"value": "450102"
+			},
+			{
+				"label": "青秀区",
+				"value": "450103"
+			},
+			{
+				"label": "江南区",
+				"value": "450105"
+			},
+			{
+				"label": "西乡塘区",
+				"value": "450107"
+			},
+			{
+				"label": "良庆区",
+				"value": "450108"
+			},
+			{
+				"label": "邕宁区",
+				"value": "450109"
+			},
+			{
+				"label": "武鸣区",
+				"value": "450110"
+			},
+			{
+				"label": "隆安县",
+				"value": "450123"
+			},
+			{
+				"label": "马山县",
+				"value": "450124"
+			},
+			{
+				"label": "上林县",
+				"value": "450125"
+			},
+			{
+				"label": "宾阳县",
+				"value": "450126"
+			},
+			{
+				"label": "横县",
+				"value": "450127"
+			}
+		],
+		[{
+				"label": "城中区",
+				"value": "450202"
+			},
+			{
+				"label": "鱼峰区",
+				"value": "450203"
+			},
+			{
+				"label": "柳南区",
+				"value": "450204"
+			},
+			{
+				"label": "柳北区",
+				"value": "450205"
+			},
+			{
+				"label": "柳江区",
+				"value": "450206"
+			},
+			{
+				"label": "柳城县",
+				"value": "450222"
+			},
+			{
+				"label": "鹿寨县",
+				"value": "450223"
+			},
+			{
+				"label": "融安县",
+				"value": "450224"
+			},
+			{
+				"label": "融水苗族自治县",
+				"value": "450225"
+			},
+			{
+				"label": "三江侗族自治县",
+				"value": "450226"
+			}
+		],
+		[{
+				"label": "秀峰区",
+				"value": "450302"
+			},
+			{
+				"label": "叠彩区",
+				"value": "450303"
+			},
+			{
+				"label": "象山区",
+				"value": "450304"
+			},
+			{
+				"label": "七星区",
+				"value": "450305"
+			},
+			{
+				"label": "雁山区",
+				"value": "450311"
+			},
+			{
+				"label": "临桂区",
+				"value": "450312"
+			},
+			{
+				"label": "阳朔县",
+				"value": "450321"
+			},
+			{
+				"label": "灵川县",
+				"value": "450323"
+			},
+			{
+				"label": "全州县",
+				"value": "450324"
+			},
+			{
+				"label": "兴安县",
+				"value": "450325"
+			},
+			{
+				"label": "永福县",
+				"value": "450326"
+			},
+			{
+				"label": "灌阳县",
+				"value": "450327"
+			},
+			{
+				"label": "龙胜各族自治县",
+				"value": "450328"
+			},
+			{
+				"label": "资源县",
+				"value": "450329"
+			},
+			{
+				"label": "平乐县",
+				"value": "450330"
+			},
+			{
+				"label": "荔浦县",
+				"value": "450331"
+			},
+			{
+				"label": "恭城瑶族自治县",
+				"value": "450332"
+			}
+		],
+		[{
+				"label": "万秀区",
+				"value": "450403"
+			},
+			{
+				"label": "长洲区",
+				"value": "450405"
+			},
+			{
+				"label": "龙圩区",
+				"value": "450406"
+			},
+			{
+				"label": "苍梧县",
+				"value": "450421"
+			},
+			{
+				"label": "藤县",
+				"value": "450422"
+			},
+			{
+				"label": "蒙山县",
+				"value": "450423"
+			},
+			{
+				"label": "岑溪市",
+				"value": "450481"
+			}
+		],
+		[{
+				"label": "海城区",
+				"value": "450502"
+			},
+			{
+				"label": "银海区",
+				"value": "450503"
+			},
+			{
+				"label": "铁山港区",
+				"value": "450512"
+			},
+			{
+				"label": "合浦县",
+				"value": "450521"
+			}
+		],
+		[{
+				"label": "港口区",
+				"value": "450602"
+			},
+			{
+				"label": "防城区",
+				"value": "450603"
+			},
+			{
+				"label": "上思县",
+				"value": "450621"
+			},
+			{
+				"label": "东兴市",
+				"value": "450681"
+			}
+		],
+		[{
+				"label": "钦南区",
+				"value": "450702"
+			},
+			{
+				"label": "钦北区",
+				"value": "450703"
+			},
+			{
+				"label": "灵山县",
+				"value": "450721"
+			},
+			{
+				"label": "浦北县",
+				"value": "450722"
+			}
+		],
+		[{
+				"label": "港北区",
+				"value": "450802"
+			},
+			{
+				"label": "港南区",
+				"value": "450803"
+			},
+			{
+				"label": "覃塘区",
+				"value": "450804"
+			},
+			{
+				"label": "平南县",
+				"value": "450821"
+			},
+			{
+				"label": "桂平市",
+				"value": "450881"
+			}
+		],
+		[{
+				"label": "玉州区",
+				"value": "450902"
+			},
+			{
+				"label": "福绵区",
+				"value": "450903"
+			},
+			{
+				"label": "容县",
+				"value": "450921"
+			},
+			{
+				"label": "陆川县",
+				"value": "450922"
+			},
+			{
+				"label": "博白县",
+				"value": "450923"
+			},
+			{
+				"label": "兴业县",
+				"value": "450924"
+			},
+			{
+				"label": "北流市",
+				"value": "450981"
+			}
+		],
+		[{
+				"label": "右江区",
+				"value": "451002"
+			},
+			{
+				"label": "田阳县",
+				"value": "451021"
+			},
+			{
+				"label": "田东县",
+				"value": "451022"
+			},
+			{
+				"label": "平果县",
+				"value": "451023"
+			},
+			{
+				"label": "德保县",
+				"value": "451024"
+			},
+			{
+				"label": "那坡县",
+				"value": "451026"
+			},
+			{
+				"label": "凌云县",
+				"value": "451027"
+			},
+			{
+				"label": "乐业县",
+				"value": "451028"
+			},
+			{
+				"label": "田林县",
+				"value": "451029"
+			},
+			{
+				"label": "西林县",
+				"value": "451030"
+			},
+			{
+				"label": "隆林各族自治县",
+				"value": "451031"
+			},
+			{
+				"label": "靖西市",
+				"value": "451081"
+			}
+		],
+		[{
+				"label": "八步区",
+				"value": "451102"
+			},
+			{
+				"label": "平桂区",
+				"value": "451103"
+			},
+			{
+				"label": "昭平县",
+				"value": "451121"
+			},
+			{
+				"label": "钟山县",
+				"value": "451122"
+			},
+			{
+				"label": "富川瑶族自治县",
+				"value": "451123"
+			}
+		],
+		[{
+				"label": "金城江区",
+				"value": "451202"
+			},
+			{
+				"label": "宜州区",
+				"value": "451203"
+			},
+			{
+				"label": "南丹县",
+				"value": "451221"
+			},
+			{
+				"label": "天峨县",
+				"value": "451222"
+			},
+			{
+				"label": "凤山县",
+				"value": "451223"
+			},
+			{
+				"label": "东兰县",
+				"value": "451224"
+			},
+			{
+				"label": "罗城仫佬族自治县",
+				"value": "451225"
+			},
+			{
+				"label": "环江毛南族自治县",
+				"value": "451226"
+			},
+			{
+				"label": "巴马瑶族自治县",
+				"value": "451227"
+			},
+			{
+				"label": "都安瑶族自治县",
+				"value": "451228"
+			},
+			{
+				"label": "大化瑶族自治县",
+				"value": "451229"
+			}
+		],
+		[{
+				"label": "兴宾区",
+				"value": "451302"
+			},
+			{
+				"label": "忻城县",
+				"value": "451321"
+			},
+			{
+				"label": "象州县",
+				"value": "451322"
+			},
+			{
+				"label": "武宣县",
+				"value": "451323"
+			},
+			{
+				"label": "金秀瑶族自治县",
+				"value": "451324"
+			},
+			{
+				"label": "合山市",
+				"value": "451381"
+			}
+		],
+		[{
+				"label": "江州区",
+				"value": "451402"
+			},
+			{
+				"label": "扶绥县",
+				"value": "451421"
+			},
+			{
+				"label": "宁明县",
+				"value": "451422"
+			},
+			{
+				"label": "龙州县",
+				"value": "451423"
+			},
+			{
+				"label": "大新县",
+				"value": "451424"
+			},
+			{
+				"label": "天等县",
+				"value": "451425"
+			},
+			{
+				"label": "凭祥市",
+				"value": "451481"
+			}
+		]
+	],
+	[
+		[{
+				"label": "秀英区",
+				"value": "460105"
+			},
+			{
+				"label": "龙华区",
+				"value": "460106"
+			},
+			{
+				"label": "琼山区",
+				"value": "460107"
+			},
+			{
+				"label": "美兰区",
+				"value": "460108"
+			}
+		],
+		[{
+				"label": "海棠区",
+				"value": "460202"
+			},
+			{
+				"label": "吉阳区",
+				"value": "460203"
+			},
+			{
+				"label": "天涯区",
+				"value": "460204"
+			},
+			{
+				"label": "崖州区",
+				"value": "460205"
+			}
+		],
+		[{
+				"label": "西沙群岛",
+				"value": "460321"
+			},
+			{
+				"label": "南沙群岛",
+				"value": "460322"
+			},
+			{
+				"label": "中沙群岛的岛礁及其海域",
+				"value": "460323"
+			}
+		],
+		[{
+			"label": "儋州市",
+			"value": "460400"
+		}],
+		[{
+				"label": "五指山市",
+				"value": "469001"
+			},
+			{
+				"label": "琼海市",
+				"value": "469002"
+			},
+			{
+				"label": "文昌市",
+				"value": "469005"
+			},
+			{
+				"label": "万宁市",
+				"value": "469006"
+			},
+			{
+				"label": "东方市",
+				"value": "469007"
+			},
+			{
+				"label": "定安县",
+				"value": "469021"
+			},
+			{
+				"label": "屯昌县",
+				"value": "469022"
+			},
+			{
+				"label": "澄迈县",
+				"value": "469023"
+			},
+			{
+				"label": "临高县",
+				"value": "469024"
+			},
+			{
+				"label": "白沙黎族自治县",
+				"value": "469025"
+			},
+			{
+				"label": "昌江黎族自治县",
+				"value": "469026"
+			},
+			{
+				"label": "乐东黎族自治县",
+				"value": "469027"
+			},
+			{
+				"label": "陵水黎族自治县",
+				"value": "469028"
+			},
+			{
+				"label": "保亭黎族苗族自治县",
+				"value": "469029"
+			},
+			{
+				"label": "琼中黎族苗族自治县",
+				"value": "469030"
+			}
+		]
+	],
+	[
+		[{
+				"label": "万州区",
+				"value": "500101"
+			},
+			{
+				"label": "涪陵区",
+				"value": "500102"
+			},
+			{
+				"label": "渝中区",
+				"value": "500103"
+			},
+			{
+				"label": "大渡口区",
+				"value": "500104"
+			},
+			{
+				"label": "江北区",
+				"value": "500105"
+			},
+			{
+				"label": "沙坪坝区",
+				"value": "500106"
+			},
+			{
+				"label": "九龙坡区",
+				"value": "500107"
+			},
+			{
+				"label": "南岸区",
+				"value": "500108"
+			},
+			{
+				"label": "北碚区",
+				"value": "500109"
+			},
+			{
+				"label": "綦江区",
+				"value": "500110"
+			},
+			{
+				"label": "大足区",
+				"value": "500111"
+			},
+			{
+				"label": "渝北区",
+				"value": "500112"
+			},
+			{
+				"label": "巴南区",
+				"value": "500113"
+			},
+			{
+				"label": "黔江区",
+				"value": "500114"
+			},
+			{
+				"label": "长寿区",
+				"value": "500115"
+			},
+			{
+				"label": "江津区",
+				"value": "500116"
+			},
+			{
+				"label": "合川区",
+				"value": "500117"
+			},
+			{
+				"label": "永川区",
+				"value": "500118"
+			},
+			{
+				"label": "南川区",
+				"value": "500119"
+			},
+			{
+				"label": "璧山区",
+				"value": "500120"
+			},
+			{
+				"label": "铜梁区",
+				"value": "500151"
+			},
+			{
+				"label": "潼南区",
+				"value": "500152"
+			},
+			{
+				"label": "荣昌区",
+				"value": "500153"
+			},
+			{
+				"label": "开州区",
+				"value": "500154"
+			},
+			{
+				"label": "梁平区",
+				"value": "500155"
+			},
+			{
+				"label": "武隆区",
+				"value": "500156"
+			}
+		],
+		[{
+				"label": "城口县",
+				"value": "500229"
+			},
+			{
+				"label": "丰都县",
+				"value": "500230"
+			},
+			{
+				"label": "垫江县",
+				"value": "500231"
+			},
+			{
+				"label": "忠县",
+				"value": "500233"
+			},
+			{
+				"label": "云阳县",
+				"value": "500235"
+			},
+			{
+				"label": "奉节县",
+				"value": "500236"
+			},
+			{
+				"label": "巫山县",
+				"value": "500237"
+			},
+			{
+				"label": "巫溪县",
+				"value": "500238"
+			},
+			{
+				"label": "石柱土家族自治县",
+				"value": "500240"
+			},
+			{
+				"label": "秀山土家族苗族自治县",
+				"value": "500241"
+			},
+			{
+				"label": "酉阳土家族苗族自治县",
+				"value": "500242"
+			},
+			{
+				"label": "彭水苗族土家族自治县",
+				"value": "500243"
+			}
+		]
+	],
+	[
+		[{
+				"label": "锦江区",
+				"value": "510104"
+			},
+			{
+				"label": "青羊区",
+				"value": "510105"
+			},
+			{
+				"label": "金牛区",
+				"value": "510106"
+			},
+			{
+				"label": "武侯区",
+				"value": "510107"
+			},
+			{
+				"label": "成华区",
+				"value": "510108"
+			},
+			{
+				"label": "龙泉驿区",
+				"value": "510112"
+			},
+			{
+				"label": "青白江区",
+				"value": "510113"
+			},
+			{
+				"label": "新都区",
+				"value": "510114"
+			},
+			{
+				"label": "温江区",
+				"value": "510115"
+			},
+			{
+				"label": "双流区",
+				"value": "510116"
+			},
+			{
+				"label": "郫都区",
+				"value": "510117"
+			},
+			{
+				"label": "金堂县",
+				"value": "510121"
+			},
+			{
+				"label": "大邑县",
+				"value": "510129"
+			},
+			{
+				"label": "蒲江县",
+				"value": "510131"
+			},
+			{
+				"label": "新津县",
+				"value": "510132"
+			},
+			{
+				"label": "都江堰市",
+				"value": "510181"
+			},
+			{
+				"label": "彭州市",
+				"value": "510182"
+			},
+			{
+				"label": "邛崃市",
+				"value": "510183"
+			},
+			{
+				"label": "崇州市",
+				"value": "510184"
+			},
+			{
+				"label": "简阳市",
+				"value": "510185"
+			}
+		],
+		[{
+				"label": "自流井区",
+				"value": "510302"
+			},
+			{
+				"label": "贡井区",
+				"value": "510303"
+			},
+			{
+				"label": "大安区",
+				"value": "510304"
+			},
+			{
+				"label": "沿滩区",
+				"value": "510311"
+			},
+			{
+				"label": "荣县",
+				"value": "510321"
+			},
+			{
+				"label": "富顺县",
+				"value": "510322"
+			}
+		],
+		[{
+				"label": "东区",
+				"value": "510402"
+			},
+			{
+				"label": "西区",
+				"value": "510403"
+			},
+			{
+				"label": "仁和区",
+				"value": "510411"
+			},
+			{
+				"label": "米易县",
+				"value": "510421"
+			},
+			{
+				"label": "盐边县",
+				"value": "510422"
+			}
+		],
+		[{
+				"label": "江阳区",
+				"value": "510502"
+			},
+			{
+				"label": "纳溪区",
+				"value": "510503"
+			},
+			{
+				"label": "龙马潭区",
+				"value": "510504"
+			},
+			{
+				"label": "泸县",
+				"value": "510521"
+			},
+			{
+				"label": "合江县",
+				"value": "510522"
+			},
+			{
+				"label": "叙永县",
+				"value": "510524"
+			},
+			{
+				"label": "古蔺县",
+				"value": "510525"
+			}
+		],
+		[{
+				"label": "旌阳区",
+				"value": "510603"
+			},
+			{
+				"label": "罗江区",
+				"value": "510604"
+			},
+			{
+				"label": "中江县",
+				"value": "510623"
+			},
+			{
+				"label": "广汉市",
+				"value": "510681"
+			},
+			{
+				"label": "什邡市",
+				"value": "510682"
+			},
+			{
+				"label": "绵竹市",
+				"value": "510683"
+			}
+		],
+		[{
+				"label": "涪城区",
+				"value": "510703"
+			},
+			{
+				"label": "游仙区",
+				"value": "510704"
+			},
+			{
+				"label": "安州区",
+				"value": "510705"
+			},
+			{
+				"label": "三台县",
+				"value": "510722"
+			},
+			{
+				"label": "盐亭县",
+				"value": "510723"
+			},
+			{
+				"label": "梓潼县",
+				"value": "510725"
+			},
+			{
+				"label": "北川羌族自治县",
+				"value": "510726"
+			},
+			{
+				"label": "平武县",
+				"value": "510727"
+			},
+			{
+				"label": "江油市",
+				"value": "510781"
+			}
+		],
+		[{
+				"label": "利州区",
+				"value": "510802"
+			},
+			{
+				"label": "昭化区",
+				"value": "510811"
+			},
+			{
+				"label": "朝天区",
+				"value": "510812"
+			},
+			{
+				"label": "旺苍县",
+				"value": "510821"
+			},
+			{
+				"label": "青川县",
+				"value": "510822"
+			},
+			{
+				"label": "剑阁县",
+				"value": "510823"
+			},
+			{
+				"label": "苍溪县",
+				"value": "510824"
+			}
+		],
+		[{
+				"label": "船山区",
+				"value": "510903"
+			},
+			{
+				"label": "安居区",
+				"value": "510904"
+			},
+			{
+				"label": "蓬溪县",
+				"value": "510921"
+			},
+			{
+				"label": "射洪县",
+				"value": "510922"
+			},
+			{
+				"label": "大英县",
+				"value": "510923"
+			}
+		],
+		[{
+				"label": "市中区",
+				"value": "511002"
+			},
+			{
+				"label": "东兴区",
+				"value": "511011"
+			},
+			{
+				"label": "威远县",
+				"value": "511024"
+			},
+			{
+				"label": "资中县",
+				"value": "511025"
+			},
+			{
+				"label": "内江经济开发区",
+				"value": "511071"
+			},
+			{
+				"label": "隆昌市",
+				"value": "511083"
+			}
+		],
+		[{
+				"label": "市中区",
+				"value": "511102"
+			},
+			{
+				"label": "沙湾区",
+				"value": "511111"
+			},
+			{
+				"label": "五通桥区",
+				"value": "511112"
+			},
+			{
+				"label": "金口河区",
+				"value": "511113"
+			},
+			{
+				"label": "犍为县",
+				"value": "511123"
+			},
+			{
+				"label": "井研县",
+				"value": "511124"
+			},
+			{
+				"label": "夹江县",
+				"value": "511126"
+			},
+			{
+				"label": "沐川县",
+				"value": "511129"
+			},
+			{
+				"label": "峨边彝族自治县",
+				"value": "511132"
+			},
+			{
+				"label": "马边彝族自治县",
+				"value": "511133"
+			},
+			{
+				"label": "峨眉山市",
+				"value": "511181"
+			}
+		],
+		[{
+				"label": "顺庆区",
+				"value": "511302"
+			},
+			{
+				"label": "高坪区",
+				"value": "511303"
+			},
+			{
+				"label": "嘉陵区",
+				"value": "511304"
+			},
+			{
+				"label": "南部县",
+				"value": "511321"
+			},
+			{
+				"label": "营山县",
+				"value": "511322"
+			},
+			{
+				"label": "蓬安县",
+				"value": "511323"
+			},
+			{
+				"label": "仪陇县",
+				"value": "511324"
+			},
+			{
+				"label": "西充县",
+				"value": "511325"
+			},
+			{
+				"label": "阆中市",
+				"value": "511381"
+			}
+		],
+		[{
+				"label": "东坡区",
+				"value": "511402"
+			},
+			{
+				"label": "彭山区",
+				"value": "511403"
+			},
+			{
+				"label": "仁寿县",
+				"value": "511421"
+			},
+			{
+				"label": "洪雅县",
+				"value": "511423"
+			},
+			{
+				"label": "丹棱县",
+				"value": "511424"
+			},
+			{
+				"label": "青神县",
+				"value": "511425"
+			}
+		],
+		[{
+				"label": "翠屏区",
+				"value": "511502"
+			},
+			{
+				"label": "南溪区",
+				"value": "511503"
+			},
+			{
+				"label": "宜宾县",
+				"value": "511521"
+			},
+			{
+				"label": "江安县",
+				"value": "511523"
+			},
+			{
+				"label": "长宁县",
+				"value": "511524"
+			},
+			{
+				"label": "高县",
+				"value": "511525"
+			},
+			{
+				"label": "珙县",
+				"value": "511526"
+			},
+			{
+				"label": "筠连县",
+				"value": "511527"
+			},
+			{
+				"label": "兴文县",
+				"value": "511528"
+			},
+			{
+				"label": "屏山县",
+				"value": "511529"
+			}
+		],
+		[{
+				"label": "广安区",
+				"value": "511602"
+			},
+			{
+				"label": "前锋区",
+				"value": "511603"
+			},
+			{
+				"label": "岳池县",
+				"value": "511621"
+			},
+			{
+				"label": "武胜县",
+				"value": "511622"
+			},
+			{
+				"label": "邻水县",
+				"value": "511623"
+			},
+			{
+				"label": "华蓥市",
+				"value": "511681"
+			}
+		],
+		[{
+				"label": "通川区",
+				"value": "511702"
+			},
+			{
+				"label": "达川区",
+				"value": "511703"
+			},
+			{
+				"label": "宣汉县",
+				"value": "511722"
+			},
+			{
+				"label": "开江县",
+				"value": "511723"
+			},
+			{
+				"label": "大竹县",
+				"value": "511724"
+			},
+			{
+				"label": "渠县",
+				"value": "511725"
+			},
+			{
+				"label": "达州经济开发区",
+				"value": "511771"
+			},
+			{
+				"label": "万源市",
+				"value": "511781"
+			}
+		],
+		[{
+				"label": "雨城区",
+				"value": "511802"
+			},
+			{
+				"label": "名山区",
+				"value": "511803"
+			},
+			{
+				"label": "荥经县",
+				"value": "511822"
+			},
+			{
+				"label": "汉源县",
+				"value": "511823"
+			},
+			{
+				"label": "石棉县",
+				"value": "511824"
+			},
+			{
+				"label": "天全县",
+				"value": "511825"
+			},
+			{
+				"label": "芦山县",
+				"value": "511826"
+			},
+			{
+				"label": "宝兴县",
+				"value": "511827"
+			}
+		],
+		[{
+				"label": "巴州区",
+				"value": "511902"
+			},
+			{
+				"label": "恩阳区",
+				"value": "511903"
+			},
+			{
+				"label": "通江县",
+				"value": "511921"
+			},
+			{
+				"label": "南江县",
+				"value": "511922"
+			},
+			{
+				"label": "平昌县",
+				"value": "511923"
+			},
+			{
+				"label": "巴中经济开发区",
+				"value": "511971"
+			}
+		],
+		[{
+				"label": "雁江区",
+				"value": "512002"
+			},
+			{
+				"label": "安岳县",
+				"value": "512021"
+			},
+			{
+				"label": "乐至县",
+				"value": "512022"
+			}
+		],
+		[{
+				"label": "马尔康市",
+				"value": "513201"
+			},
+			{
+				"label": "汶川县",
+				"value": "513221"
+			},
+			{
+				"label": "理县",
+				"value": "513222"
+			},
+			{
+				"label": "茂县",
+				"value": "513223"
+			},
+			{
+				"label": "松潘县",
+				"value": "513224"
+			},
+			{
+				"label": "九寨沟县",
+				"value": "513225"
+			},
+			{
+				"label": "金川县",
+				"value": "513226"
+			},
+			{
+				"label": "小金县",
+				"value": "513227"
+			},
+			{
+				"label": "黑水县",
+				"value": "513228"
+			},
+			{
+				"label": "壤塘县",
+				"value": "513230"
+			},
+			{
+				"label": "阿坝县",
+				"value": "513231"
+			},
+			{
+				"label": "若尔盖县",
+				"value": "513232"
+			},
+			{
+				"label": "红原县",
+				"value": "513233"
+			}
+		],
+		[{
+				"label": "康定市",
+				"value": "513301"
+			},
+			{
+				"label": "泸定县",
+				"value": "513322"
+			},
+			{
+				"label": "丹巴县",
+				"value": "513323"
+			},
+			{
+				"label": "九龙县",
+				"value": "513324"
+			},
+			{
+				"label": "雅江县",
+				"value": "513325"
+			},
+			{
+				"label": "道孚县",
+				"value": "513326"
+			},
+			{
+				"label": "炉霍县",
+				"value": "513327"
+			},
+			{
+				"label": "甘孜县",
+				"value": "513328"
+			},
+			{
+				"label": "新龙县",
+				"value": "513329"
+			},
+			{
+				"label": "德格县",
+				"value": "513330"
+			},
+			{
+				"label": "白玉县",
+				"value": "513331"
+			},
+			{
+				"label": "石渠县",
+				"value": "513332"
+			},
+			{
+				"label": "色达县",
+				"value": "513333"
+			},
+			{
+				"label": "理塘县",
+				"value": "513334"
+			},
+			{
+				"label": "巴塘县",
+				"value": "513335"
+			},
+			{
+				"label": "乡城县",
+				"value": "513336"
+			},
+			{
+				"label": "稻城县",
+				"value": "513337"
+			},
+			{
+				"label": "得荣县",
+				"value": "513338"
+			}
+		],
+		[{
+				"label": "西昌市",
+				"value": "513401"
+			},
+			{
+				"label": "木里藏族自治县",
+				"value": "513422"
+			},
+			{
+				"label": "盐源县",
+				"value": "513423"
+			},
+			{
+				"label": "德昌县",
+				"value": "513424"
+			},
+			{
+				"label": "会理县",
+				"value": "513425"
+			},
+			{
+				"label": "会东县",
+				"value": "513426"
+			},
+			{
+				"label": "宁南县",
+				"value": "513427"
+			},
+			{
+				"label": "普格县",
+				"value": "513428"
+			},
+			{
+				"label": "布拖县",
+				"value": "513429"
+			},
+			{
+				"label": "金阳县",
+				"value": "513430"
+			},
+			{
+				"label": "昭觉县",
+				"value": "513431"
+			},
+			{
+				"label": "喜德县",
+				"value": "513432"
+			},
+			{
+				"label": "冕宁县",
+				"value": "513433"
+			},
+			{
+				"label": "越西县",
+				"value": "513434"
+			},
+			{
+				"label": "甘洛县",
+				"value": "513435"
+			},
+			{
+				"label": "美姑县",
+				"value": "513436"
+			},
+			{
+				"label": "雷波县",
+				"value": "513437"
+			}
+		]
+	],
+	[
+		[{
+				"label": "南明区",
+				"value": "520102"
+			},
+			{
+				"label": "云岩区",
+				"value": "520103"
+			},
+			{
+				"label": "花溪区",
+				"value": "520111"
+			},
+			{
+				"label": "乌当区",
+				"value": "520112"
+			},
+			{
+				"label": "白云区",
+				"value": "520113"
+			},
+			{
+				"label": "观山湖区",
+				"value": "520115"
+			},
+			{
+				"label": "开阳县",
+				"value": "520121"
+			},
+			{
+				"label": "息烽县",
+				"value": "520122"
+			},
+			{
+				"label": "修文县",
+				"value": "520123"
+			},
+			{
+				"label": "清镇市",
+				"value": "520181"
+			}
+		],
+		[{
+				"label": "钟山区",
+				"value": "520201"
+			},
+			{
+				"label": "六枝特区",
+				"value": "520203"
+			},
+			{
+				"label": "水城县",
+				"value": "520221"
+			},
+			{
+				"label": "盘州市",
+				"value": "520281"
+			}
+		],
+		[{
+				"label": "红花岗区",
+				"value": "520302"
+			},
+			{
+				"label": "汇川区",
+				"value": "520303"
+			},
+			{
+				"label": "播州区",
+				"value": "520304"
+			},
+			{
+				"label": "桐梓县",
+				"value": "520322"
+			},
+			{
+				"label": "绥阳县",
+				"value": "520323"
+			},
+			{
+				"label": "正安县",
+				"value": "520324"
+			},
+			{
+				"label": "道真仡佬族苗族自治县",
+				"value": "520325"
+			},
+			{
+				"label": "务川仡佬族苗族自治县",
+				"value": "520326"
+			},
+			{
+				"label": "凤冈县",
+				"value": "520327"
+			},
+			{
+				"label": "湄潭县",
+				"value": "520328"
+			},
+			{
+				"label": "余庆县",
+				"value": "520329"
+			},
+			{
+				"label": "习水县",
+				"value": "520330"
+			},
+			{
+				"label": "赤水市",
+				"value": "520381"
+			},
+			{
+				"label": "仁怀市",
+				"value": "520382"
+			}
+		],
+		[{
+				"label": "西秀区",
+				"value": "520402"
+			},
+			{
+				"label": "平坝区",
+				"value": "520403"
+			},
+			{
+				"label": "普定县",
+				"value": "520422"
+			},
+			{
+				"label": "镇宁布依族苗族自治县",
+				"value": "520423"
+			},
+			{
+				"label": "关岭布依族苗族自治县",
+				"value": "520424"
+			},
+			{
+				"label": "紫云苗族布依族自治县",
+				"value": "520425"
+			}
+		],
+		[{
+				"label": "七星关区",
+				"value": "520502"
+			},
+			{
+				"label": "大方县",
+				"value": "520521"
+			},
+			{
+				"label": "黔西县",
+				"value": "520522"
+			},
+			{
+				"label": "金沙县",
+				"value": "520523"
+			},
+			{
+				"label": "织金县",
+				"value": "520524"
+			},
+			{
+				"label": "纳雍县",
+				"value": "520525"
+			},
+			{
+				"label": "威宁彝族回族苗族自治县",
+				"value": "520526"
+			},
+			{
+				"label": "赫章县",
+				"value": "520527"
+			}
+		],
+		[{
+				"label": "碧江区",
+				"value": "520602"
+			},
+			{
+				"label": "万山区",
+				"value": "520603"
+			},
+			{
+				"label": "江口县",
+				"value": "520621"
+			},
+			{
+				"label": "玉屏侗族自治县",
+				"value": "520622"
+			},
+			{
+				"label": "石阡县",
+				"value": "520623"
+			},
+			{
+				"label": "思南县",
+				"value": "520624"
+			},
+			{
+				"label": "印江土家族苗族自治县",
+				"value": "520625"
+			},
+			{
+				"label": "德江县",
+				"value": "520626"
+			},
+			{
+				"label": "沿河土家族自治县",
+				"value": "520627"
+			},
+			{
+				"label": "松桃苗族自治县",
+				"value": "520628"
+			}
+		],
+		[{
+				"label": "兴义市",
+				"value": "522301"
+			},
+			{
+				"label": "兴仁县",
+				"value": "522322"
+			},
+			{
+				"label": "普安县",
+				"value": "522323"
+			},
+			{
+				"label": "晴隆县",
+				"value": "522324"
+			},
+			{
+				"label": "贞丰县",
+				"value": "522325"
+			},
+			{
+				"label": "望谟县",
+				"value": "522326"
+			},
+			{
+				"label": "册亨县",
+				"value": "522327"
+			},
+			{
+				"label": "安龙县",
+				"value": "522328"
+			}
+		],
+		[{
+				"label": "凯里市",
+				"value": "522601"
+			},
+			{
+				"label": "黄平县",
+				"value": "522622"
+			},
+			{
+				"label": "施秉县",
+				"value": "522623"
+			},
+			{
+				"label": "三穗县",
+				"value": "522624"
+			},
+			{
+				"label": "镇远县",
+				"value": "522625"
+			},
+			{
+				"label": "岑巩县",
+				"value": "522626"
+			},
+			{
+				"label": "天柱县",
+				"value": "522627"
+			},
+			{
+				"label": "锦屏县",
+				"value": "522628"
+			},
+			{
+				"label": "剑河县",
+				"value": "522629"
+			},
+			{
+				"label": "台江县",
+				"value": "522630"
+			},
+			{
+				"label": "黎平县",
+				"value": "522631"
+			},
+			{
+				"label": "榕江县",
+				"value": "522632"
+			},
+			{
+				"label": "从江县",
+				"value": "522633"
+			},
+			{
+				"label": "雷山县",
+				"value": "522634"
+			},
+			{
+				"label": "麻江县",
+				"value": "522635"
+			},
+			{
+				"label": "丹寨县",
+				"value": "522636"
+			}
+		],
+		[{
+				"label": "都匀市",
+				"value": "522701"
+			},
+			{
+				"label": "福泉市",
+				"value": "522702"
+			},
+			{
+				"label": "荔波县",
+				"value": "522722"
+			},
+			{
+				"label": "贵定县",
+				"value": "522723"
+			},
+			{
+				"label": "瓮安县",
+				"value": "522725"
+			},
+			{
+				"label": "独山县",
+				"value": "522726"
+			},
+			{
+				"label": "平塘县",
+				"value": "522727"
+			},
+			{
+				"label": "罗甸县",
+				"value": "522728"
+			},
+			{
+				"label": "长顺县",
+				"value": "522729"
+			},
+			{
+				"label": "龙里县",
+				"value": "522730"
+			},
+			{
+				"label": "惠水县",
+				"value": "522731"
+			},
+			{
+				"label": "三都水族自治县",
+				"value": "522732"
+			}
+		]
+	],
+	[
+		[{
+				"label": "五华区",
+				"value": "530102"
+			},
+			{
+				"label": "盘龙区",
+				"value": "530103"
+			},
+			{
+				"label": "官渡区",
+				"value": "530111"
+			},
+			{
+				"label": "西山区",
+				"value": "530112"
+			},
+			{
+				"label": "东川区",
+				"value": "530113"
+			},
+			{
+				"label": "呈贡区",
+				"value": "530114"
+			},
+			{
+				"label": "晋宁区",
+				"value": "530115"
+			},
+			{
+				"label": "富民县",
+				"value": "530124"
+			},
+			{
+				"label": "宜良县",
+				"value": "530125"
+			},
+			{
+				"label": "石林彝族自治县",
+				"value": "530126"
+			},
+			{
+				"label": "嵩明县",
+				"value": "530127"
+			},
+			{
+				"label": "禄劝彝族苗族自治县",
+				"value": "530128"
+			},
+			{
+				"label": "寻甸回族彝族自治县",
+				"value": "530129"
+			},
+			{
+				"label": "安宁市",
+				"value": "530181"
+			}
+		],
+		[{
+				"label": "麒麟区",
+				"value": "530302"
+			},
+			{
+				"label": "沾益区",
+				"value": "530303"
+			},
+			{
+				"label": "马龙县",
+				"value": "530321"
+			},
+			{
+				"label": "陆良县",
+				"value": "530322"
+			},
+			{
+				"label": "师宗县",
+				"value": "530323"
+			},
+			{
+				"label": "罗平县",
+				"value": "530324"
+			},
+			{
+				"label": "富源县",
+				"value": "530325"
+			},
+			{
+				"label": "会泽县",
+				"value": "530326"
+			},
+			{
+				"label": "宣威市",
+				"value": "530381"
+			}
+		],
+		[{
+				"label": "红塔区",
+				"value": "530402"
+			},
+			{
+				"label": "江川区",
+				"value": "530403"
+			},
+			{
+				"label": "澄江县",
+				"value": "530422"
+			},
+			{
+				"label": "通海县",
+				"value": "530423"
+			},
+			{
+				"label": "华宁县",
+				"value": "530424"
+			},
+			{
+				"label": "易门县",
+				"value": "530425"
+			},
+			{
+				"label": "峨山彝族自治县",
+				"value": "530426"
+			},
+			{
+				"label": "新平彝族傣族自治县",
+				"value": "530427"
+			},
+			{
+				"label": "元江哈尼族彝族傣族自治县",
+				"value": "530428"
+			}
+		],
+		[{
+				"label": "隆阳区",
+				"value": "530502"
+			},
+			{
+				"label": "施甸县",
+				"value": "530521"
+			},
+			{
+				"label": "龙陵县",
+				"value": "530523"
+			},
+			{
+				"label": "昌宁县",
+				"value": "530524"
+			},
+			{
+				"label": "腾冲市",
+				"value": "530581"
+			}
+		],
+		[{
+				"label": "昭阳区",
+				"value": "530602"
+			},
+			{
+				"label": "鲁甸县",
+				"value": "530621"
+			},
+			{
+				"label": "巧家县",
+				"value": "530622"
+			},
+			{
+				"label": "盐津县",
+				"value": "530623"
+			},
+			{
+				"label": "大关县",
+				"value": "530624"
+			},
+			{
+				"label": "永善县",
+				"value": "530625"
+			},
+			{
+				"label": "绥江县",
+				"value": "530626"
+			},
+			{
+				"label": "镇雄县",
+				"value": "530627"
+			},
+			{
+				"label": "彝良县",
+				"value": "530628"
+			},
+			{
+				"label": "威信县",
+				"value": "530629"
+			},
+			{
+				"label": "水富县",
+				"value": "530630"
+			}
+		],
+		[{
+				"label": "古城区",
+				"value": "530702"
+			},
+			{
+				"label": "玉龙纳西族自治县",
+				"value": "530721"
+			},
+			{
+				"label": "永胜县",
+				"value": "530722"
+			},
+			{
+				"label": "华坪县",
+				"value": "530723"
+			},
+			{
+				"label": "宁蒗彝族自治县",
+				"value": "530724"
+			}
+		],
+		[{
+				"label": "思茅区",
+				"value": "530802"
+			},
+			{
+				"label": "宁洱哈尼族彝族自治县",
+				"value": "530821"
+			},
+			{
+				"label": "墨江哈尼族自治县",
+				"value": "530822"
+			},
+			{
+				"label": "景东彝族自治县",
+				"value": "530823"
+			},
+			{
+				"label": "景谷傣族彝族自治县",
+				"value": "530824"
+			},
+			{
+				"label": "镇沅彝族哈尼族拉祜族自治县",
+				"value": "530825"
+			},
+			{
+				"label": "江城哈尼族彝族自治县",
+				"value": "530826"
+			},
+			{
+				"label": "孟连傣族拉祜族佤族自治县",
+				"value": "530827"
+			},
+			{
+				"label": "澜沧拉祜族自治县",
+				"value": "530828"
+			},
+			{
+				"label": "西盟佤族自治县",
+				"value": "530829"
+			}
+		],
+		[{
+				"label": "临翔区",
+				"value": "530902"
+			},
+			{
+				"label": "凤庆县",
+				"value": "530921"
+			},
+			{
+				"label": "云县",
+				"value": "530922"
+			},
+			{
+				"label": "永德县",
+				"value": "530923"
+			},
+			{
+				"label": "镇康县",
+				"value": "530924"
+			},
+			{
+				"label": "双江拉祜族佤族布朗族傣族自治县",
+				"value": "530925"
+			},
+			{
+				"label": "耿马傣族佤族自治县",
+				"value": "530926"
+			},
+			{
+				"label": "沧源佤族自治县",
+				"value": "530927"
+			}
+		],
+		[{
+				"label": "楚雄市",
+				"value": "532301"
+			},
+			{
+				"label": "双柏县",
+				"value": "532322"
+			},
+			{
+				"label": "牟定县",
+				"value": "532323"
+			},
+			{
+				"label": "南华县",
+				"value": "532324"
+			},
+			{
+				"label": "姚安县",
+				"value": "532325"
+			},
+			{
+				"label": "大姚县",
+				"value": "532326"
+			},
+			{
+				"label": "永仁县",
+				"value": "532327"
+			},
+			{
+				"label": "元谋县",
+				"value": "532328"
+			},
+			{
+				"label": "武定县",
+				"value": "532329"
+			},
+			{
+				"label": "禄丰县",
+				"value": "532331"
+			}
+		],
+		[{
+				"label": "个旧市",
+				"value": "532501"
+			},
+			{
+				"label": "开远市",
+				"value": "532502"
+			},
+			{
+				"label": "蒙自市",
+				"value": "532503"
+			},
+			{
+				"label": "弥勒市",
+				"value": "532504"
+			},
+			{
+				"label": "屏边苗族自治县",
+				"value": "532523"
+			},
+			{
+				"label": "建水县",
+				"value": "532524"
+			},
+			{
+				"label": "石屏县",
+				"value": "532525"
+			},
+			{
+				"label": "泸西县",
+				"value": "532527"
+			},
+			{
+				"label": "元阳县",
+				"value": "532528"
+			},
+			{
+				"label": "红河县",
+				"value": "532529"
+			},
+			{
+				"label": "金平苗族瑶族傣族自治县",
+				"value": "532530"
+			},
+			{
+				"label": "绿春县",
+				"value": "532531"
+			},
+			{
+				"label": "河口瑶族自治县",
+				"value": "532532"
+			}
+		],
+		[{
+				"label": "文山市",
+				"value": "532601"
+			},
+			{
+				"label": "砚山县",
+				"value": "532622"
+			},
+			{
+				"label": "西畴县",
+				"value": "532623"
+			},
+			{
+				"label": "麻栗坡县",
+				"value": "532624"
+			},
+			{
+				"label": "马关县",
+				"value": "532625"
+			},
+			{
+				"label": "丘北县",
+				"value": "532626"
+			},
+			{
+				"label": "广南县",
+				"value": "532627"
+			},
+			{
+				"label": "富宁县",
+				"value": "532628"
+			}
+		],
+		[{
+				"label": "景洪市",
+				"value": "532801"
+			},
+			{
+				"label": "勐海县",
+				"value": "532822"
+			},
+			{
+				"label": "勐腊县",
+				"value": "532823"
+			}
+		],
+		[{
+				"label": "大理市",
+				"value": "532901"
+			},
+			{
+				"label": "漾濞彝族自治县",
+				"value": "532922"
+			},
+			{
+				"label": "祥云县",
+				"value": "532923"
+			},
+			{
+				"label": "宾川县",
+				"value": "532924"
+			},
+			{
+				"label": "弥渡县",
+				"value": "532925"
+			},
+			{
+				"label": "南涧彝族自治县",
+				"value": "532926"
+			},
+			{
+				"label": "巍山彝族回族自治县",
+				"value": "532927"
+			},
+			{
+				"label": "永平县",
+				"value": "532928"
+			},
+			{
+				"label": "云龙县",
+				"value": "532929"
+			},
+			{
+				"label": "洱源县",
+				"value": "532930"
+			},
+			{
+				"label": "剑川县",
+				"value": "532931"
+			},
+			{
+				"label": "鹤庆县",
+				"value": "532932"
+			}
+		],
+		[{
+				"label": "瑞丽市",
+				"value": "533102"
+			},
+			{
+				"label": "芒市",
+				"value": "533103"
+			},
+			{
+				"label": "梁河县",
+				"value": "533122"
+			},
+			{
+				"label": "盈江县",
+				"value": "533123"
+			},
+			{
+				"label": "陇川县",
+				"value": "533124"
+			}
+		],
+		[{
+				"label": "泸水市",
+				"value": "533301"
+			},
+			{
+				"label": "福贡县",
+				"value": "533323"
+			},
+			{
+				"label": "贡山独龙族怒族自治县",
+				"value": "533324"
+			},
+			{
+				"label": "兰坪白族普米族自治县",
+				"value": "533325"
+			}
+		],
+		[{
+				"label": "香格里拉市",
+				"value": "533401"
+			},
+			{
+				"label": "德钦县",
+				"value": "533422"
+			},
+			{
+				"label": "维西傈僳族自治县",
+				"value": "533423"
+			}
+		]
+	],
+	[
+		[{
+				"label": "城关区",
+				"value": "540102"
+			},
+			{
+				"label": "堆龙德庆区",
+				"value": "540103"
+			},
+			{
+				"label": "林周县",
+				"value": "540121"
+			},
+			{
+				"label": "当雄县",
+				"value": "540122"
+			},
+			{
+				"label": "尼木县",
+				"value": "540123"
+			},
+			{
+				"label": "曲水县",
+				"value": "540124"
+			},
+			{
+				"label": "达孜县",
+				"value": "540126"
+			},
+			{
+				"label": "墨竹工卡县",
+				"value": "540127"
+			},
+			{
+				"label": "格尔木藏青工业园区",
+				"value": "540171"
+			},
+			{
+				"label": "拉萨经济技术开发区",
+				"value": "540172"
+			},
+			{
+				"label": "西藏文化旅游创意园区",
+				"value": "540173"
+			},
+			{
+				"label": "达孜工业园区",
+				"value": "540174"
+			}
+		],
+		[{
+				"label": "桑珠孜区",
+				"value": "540202"
+			},
+			{
+				"label": "南木林县",
+				"value": "540221"
+			},
+			{
+				"label": "江孜县",
+				"value": "540222"
+			},
+			{
+				"label": "定日县",
+				"value": "540223"
+			},
+			{
+				"label": "萨迦县",
+				"value": "540224"
+			},
+			{
+				"label": "拉孜县",
+				"value": "540225"
+			},
+			{
+				"label": "昂仁县",
+				"value": "540226"
+			},
+			{
+				"label": "谢通门县",
+				"value": "540227"
+			},
+			{
+				"label": "白朗县",
+				"value": "540228"
+			},
+			{
+				"label": "仁布县",
+				"value": "540229"
+			},
+			{
+				"label": "康马县",
+				"value": "540230"
+			},
+			{
+				"label": "定结县",
+				"value": "540231"
+			},
+			{
+				"label": "仲巴县",
+				"value": "540232"
+			},
+			{
+				"label": "亚东县",
+				"value": "540233"
+			},
+			{
+				"label": "吉隆县",
+				"value": "540234"
+			},
+			{
+				"label": "聂拉木县",
+				"value": "540235"
+			},
+			{
+				"label": "萨嘎县",
+				"value": "540236"
+			},
+			{
+				"label": "岗巴县",
+				"value": "540237"
+			}
+		],
+		[{
+				"label": "卡若区",
+				"value": "540302"
+			},
+			{
+				"label": "江达县",
+				"value": "540321"
+			},
+			{
+				"label": "贡觉县",
+				"value": "540322"
+			},
+			{
+				"label": "类乌齐县",
+				"value": "540323"
+			},
+			{
+				"label": "丁青县",
+				"value": "540324"
+			},
+			{
+				"label": "察雅县",
+				"value": "540325"
+			},
+			{
+				"label": "八宿县",
+				"value": "540326"
+			},
+			{
+				"label": "左贡县",
+				"value": "540327"
+			},
+			{
+				"label": "芒康县",
+				"value": "540328"
+			},
+			{
+				"label": "洛隆县",
+				"value": "540329"
+			},
+			{
+				"label": "边坝县",
+				"value": "540330"
+			}
+		],
+		[{
+				"label": "巴宜区",
+				"value": "540402"
+			},
+			{
+				"label": "工布江达县",
+				"value": "540421"
+			},
+			{
+				"label": "米林县",
+				"value": "540422"
+			},
+			{
+				"label": "墨脱县",
+				"value": "540423"
+			},
+			{
+				"label": "波密县",
+				"value": "540424"
+			},
+			{
+				"label": "察隅县",
+				"value": "540425"
+			},
+			{
+				"label": "朗县",
+				"value": "540426"
+			}
+		],
+		[{
+				"label": "乃东区",
+				"value": "540502"
+			},
+			{
+				"label": "扎囊县",
+				"value": "540521"
+			},
+			{
+				"label": "贡嘎县",
+				"value": "540522"
+			},
+			{
+				"label": "桑日县",
+				"value": "540523"
+			},
+			{
+				"label": "琼结县",
+				"value": "540524"
+			},
+			{
+				"label": "曲松县",
+				"value": "540525"
+			},
+			{
+				"label": "措美县",
+				"value": "540526"
+			},
+			{
+				"label": "洛扎县",
+				"value": "540527"
+			},
+			{
+				"label": "加查县",
+				"value": "540528"
+			},
+			{
+				"label": "隆子县",
+				"value": "540529"
+			},
+			{
+				"label": "错那县",
+				"value": "540530"
+			},
+			{
+				"label": "浪卡子县",
+				"value": "540531"
+			}
+		],
+		[{
+				"label": "那曲县",
+				"value": "542421"
+			},
+			{
+				"label": "嘉黎县",
+				"value": "542422"
+			},
+			{
+				"label": "比如县",
+				"value": "542423"
+			},
+			{
+				"label": "聂荣县",
+				"value": "542424"
+			},
+			{
+				"label": "安多县",
+				"value": "542425"
+			},
+			{
+				"label": "申扎县",
+				"value": "542426"
+			},
+			{
+				"label": "索县",
+				"value": "542427"
+			},
+			{
+				"label": "班戈县",
+				"value": "542428"
+			},
+			{
+				"label": "巴青县",
+				"value": "542429"
+			},
+			{
+				"label": "尼玛县",
+				"value": "542430"
+			},
+			{
+				"label": "双湖县",
+				"value": "542431"
+			}
+		],
+		[{
+				"label": "普兰县",
+				"value": "542521"
+			},
+			{
+				"label": "札达县",
+				"value": "542522"
+			},
+			{
+				"label": "噶尔县",
+				"value": "542523"
+			},
+			{
+				"label": "日土县",
+				"value": "542524"
+			},
+			{
+				"label": "革吉县",
+				"value": "542525"
+			},
+			{
+				"label": "改则县",
+				"value": "542526"
+			},
+			{
+				"label": "措勤县",
+				"value": "542527"
+			}
+		]
+	],
+	[
+		[{
+				"label": "新城区",
+				"value": "610102"
+			},
+			{
+				"label": "碑林区",
+				"value": "610103"
+			},
+			{
+				"label": "莲湖区",
+				"value": "610104"
+			},
+			{
+				"label": "灞桥区",
+				"value": "610111"
+			},
+			{
+				"label": "未央区",
+				"value": "610112"
+			},
+			{
+				"label": "雁塔区",
+				"value": "610113"
+			},
+			{
+				"label": "阎良区",
+				"value": "610114"
+			},
+			{
+				"label": "临潼区",
+				"value": "610115"
+			},
+			{
+				"label": "长安区",
+				"value": "610116"
+			},
+			{
+				"label": "高陵区",
+				"value": "610117"
+			},
+			{
+				"label": "鄠邑区",
+				"value": "610118"
+			},
+			{
+				"label": "蓝田县",
+				"value": "610122"
+			},
+			{
+				"label": "周至县",
+				"value": "610124"
+			}
+		],
+		[{
+				"label": "王益区",
+				"value": "610202"
+			},
+			{
+				"label": "印台区",
+				"value": "610203"
+			},
+			{
+				"label": "耀州区",
+				"value": "610204"
+			},
+			{
+				"label": "宜君县",
+				"value": "610222"
+			}
+		],
+		[{
+				"label": "渭滨区",
+				"value": "610302"
+			},
+			{
+				"label": "金台区",
+				"value": "610303"
+			},
+			{
+				"label": "陈仓区",
+				"value": "610304"
+			},
+			{
+				"label": "凤翔县",
+				"value": "610322"
+			},
+			{
+				"label": "岐山县",
+				"value": "610323"
+			},
+			{
+				"label": "扶风县",
+				"value": "610324"
+			},
+			{
+				"label": "眉县",
+				"value": "610326"
+			},
+			{
+				"label": "陇县",
+				"value": "610327"
+			},
+			{
+				"label": "千阳县",
+				"value": "610328"
+			},
+			{
+				"label": "麟游县",
+				"value": "610329"
+			},
+			{
+				"label": "凤县",
+				"value": "610330"
+			},
+			{
+				"label": "太白县",
+				"value": "610331"
+			}
+		],
+		[{
+				"label": "秦都区",
+				"value": "610402"
+			},
+			{
+				"label": "杨陵区",
+				"value": "610403"
+			},
+			{
+				"label": "渭城区",
+				"value": "610404"
+			},
+			{
+				"label": "三原县",
+				"value": "610422"
+			},
+			{
+				"label": "泾阳县",
+				"value": "610423"
+			},
+			{
+				"label": "乾县",
+				"value": "610424"
+			},
+			{
+				"label": "礼泉县",
+				"value": "610425"
+			},
+			{
+				"label": "永寿县",
+				"value": "610426"
+			},
+			{
+				"label": "彬县",
+				"value": "610427"
+			},
+			{
+				"label": "长武县",
+				"value": "610428"
+			},
+			{
+				"label": "旬邑县",
+				"value": "610429"
+			},
+			{
+				"label": "淳化县",
+				"value": "610430"
+			},
+			{
+				"label": "武功县",
+				"value": "610431"
+			},
+			{
+				"label": "兴平市",
+				"value": "610481"
+			}
+		],
+		[{
+				"label": "临渭区",
+				"value": "610502"
+			},
+			{
+				"label": "华州区",
+				"value": "610503"
+			},
+			{
+				"label": "潼关县",
+				"value": "610522"
+			},
+			{
+				"label": "大荔县",
+				"value": "610523"
+			},
+			{
+				"label": "合阳县",
+				"value": "610524"
+			},
+			{
+				"label": "澄城县",
+				"value": "610525"
+			},
+			{
+				"label": "蒲城县",
+				"value": "610526"
+			},
+			{
+				"label": "白水县",
+				"value": "610527"
+			},
+			{
+				"label": "富平县",
+				"value": "610528"
+			},
+			{
+				"label": "韩城市",
+				"value": "610581"
+			},
+			{
+				"label": "华阴市",
+				"value": "610582"
+			}
+		],
+		[{
+				"label": "宝塔区",
+				"value": "610602"
+			},
+			{
+				"label": "安塞区",
+				"value": "610603"
+			},
+			{
+				"label": "延长县",
+				"value": "610621"
+			},
+			{
+				"label": "延川县",
+				"value": "610622"
+			},
+			{
+				"label": "子长县",
+				"value": "610623"
+			},
+			{
+				"label": "志丹县",
+				"value": "610625"
+			},
+			{
+				"label": "吴起县",
+				"value": "610626"
+			},
+			{
+				"label": "甘泉县",
+				"value": "610627"
+			},
+			{
+				"label": "富县",
+				"value": "610628"
+			},
+			{
+				"label": "洛川县",
+				"value": "610629"
+			},
+			{
+				"label": "宜川县",
+				"value": "610630"
+			},
+			{
+				"label": "黄龙县",
+				"value": "610631"
+			},
+			{
+				"label": "黄陵县",
+				"value": "610632"
+			}
+		],
+		[{
+				"label": "汉台区",
+				"value": "610702"
+			},
+			{
+				"label": "南郑区",
+				"value": "610703"
+			},
+			{
+				"label": "城固县",
+				"value": "610722"
+			},
+			{
+				"label": "洋县",
+				"value": "610723"
+			},
+			{
+				"label": "西乡县",
+				"value": "610724"
+			},
+			{
+				"label": "勉县",
+				"value": "610725"
+			},
+			{
+				"label": "宁强县",
+				"value": "610726"
+			},
+			{
+				"label": "略阳县",
+				"value": "610727"
+			},
+			{
+				"label": "镇巴县",
+				"value": "610728"
+			},
+			{
+				"label": "留坝县",
+				"value": "610729"
+			},
+			{
+				"label": "佛坪县",
+				"value": "610730"
+			}
+		],
+		[{
+				"label": "榆阳区",
+				"value": "610802"
+			},
+			{
+				"label": "横山区",
+				"value": "610803"
+			},
+			{
+				"label": "府谷县",
+				"value": "610822"
+			},
+			{
+				"label": "靖边县",
+				"value": "610824"
+			},
+			{
+				"label": "定边县",
+				"value": "610825"
+			},
+			{
+				"label": "绥德县",
+				"value": "610826"
+			},
+			{
+				"label": "米脂县",
+				"value": "610827"
+			},
+			{
+				"label": "佳县",
+				"value": "610828"
+			},
+			{
+				"label": "吴堡县",
+				"value": "610829"
+			},
+			{
+				"label": "清涧县",
+				"value": "610830"
+			},
+			{
+				"label": "子洲县",
+				"value": "610831"
+			},
+			{
+				"label": "神木市",
+				"value": "610881"
+			}
+		],
+		[{
+				"label": "汉滨区",
+				"value": "610902"
+			},
+			{
+				"label": "汉阴县",
+				"value": "610921"
+			},
+			{
+				"label": "石泉县",
+				"value": "610922"
+			},
+			{
+				"label": "宁陕县",
+				"value": "610923"
+			},
+			{
+				"label": "紫阳县",
+				"value": "610924"
+			},
+			{
+				"label": "岚皋县",
+				"value": "610925"
+			},
+			{
+				"label": "平利县",
+				"value": "610926"
+			},
+			{
+				"label": "镇坪县",
+				"value": "610927"
+			},
+			{
+				"label": "旬阳县",
+				"value": "610928"
+			},
+			{
+				"label": "白河县",
+				"value": "610929"
+			}
+		],
+		[{
+				"label": "商州区",
+				"value": "611002"
+			},
+			{
+				"label": "洛南县",
+				"value": "611021"
+			},
+			{
+				"label": "丹凤县",
+				"value": "611022"
+			},
+			{
+				"label": "商南县",
+				"value": "611023"
+			},
+			{
+				"label": "山阳县",
+				"value": "611024"
+			},
+			{
+				"label": "镇安县",
+				"value": "611025"
+			},
+			{
+				"label": "柞水县",
+				"value": "611026"
+			}
+		]
+	],
+	[
+		[{
+				"label": "城关区",
+				"value": "620102"
+			},
+			{
+				"label": "七里河区",
+				"value": "620103"
+			},
+			{
+				"label": "西固区",
+				"value": "620104"
+			},
+			{
+				"label": "安宁区",
+				"value": "620105"
+			},
+			{
+				"label": "红古区",
+				"value": "620111"
+			},
+			{
+				"label": "永登县",
+				"value": "620121"
+			},
+			{
+				"label": "皋兰县",
+				"value": "620122"
+			},
+			{
+				"label": "榆中县",
+				"value": "620123"
+			},
+			{
+				"label": "兰州新区",
+				"value": "620171"
+			}
+		],
+		[{
+			"label": "嘉峪关市",
+			"value": "620201"
+		}],
+		[{
+				"label": "金川区",
+				"value": "620302"
+			},
+			{
+				"label": "永昌县",
+				"value": "620321"
+			}
+		],
+		[{
+				"label": "白银区",
+				"value": "620402"
+			},
+			{
+				"label": "平川区",
+				"value": "620403"
+			},
+			{
+				"label": "靖远县",
+				"value": "620421"
+			},
+			{
+				"label": "会宁县",
+				"value": "620422"
+			},
+			{
+				"label": "景泰县",
+				"value": "620423"
+			}
+		],
+		[{
+				"label": "秦州区",
+				"value": "620502"
+			},
+			{
+				"label": "麦积区",
+				"value": "620503"
+			},
+			{
+				"label": "清水县",
+				"value": "620521"
+			},
+			{
+				"label": "秦安县",
+				"value": "620522"
+			},
+			{
+				"label": "甘谷县",
+				"value": "620523"
+			},
+			{
+				"label": "武山县",
+				"value": "620524"
+			},
+			{
+				"label": "张家川回族自治县",
+				"value": "620525"
+			}
+		],
+		[{
+				"label": "凉州区",
+				"value": "620602"
+			},
+			{
+				"label": "民勤县",
+				"value": "620621"
+			},
+			{
+				"label": "古浪县",
+				"value": "620622"
+			},
+			{
+				"label": "天祝藏族自治县",
+				"value": "620623"
+			}
+		],
+		[{
+				"label": "甘州区",
+				"value": "620702"
+			},
+			{
+				"label": "肃南裕固族自治县",
+				"value": "620721"
+			},
+			{
+				"label": "民乐县",
+				"value": "620722"
+			},
+			{
+				"label": "临泽县",
+				"value": "620723"
+			},
+			{
+				"label": "高台县",
+				"value": "620724"
+			},
+			{
+				"label": "山丹县",
+				"value": "620725"
+			}
+		],
+		[{
+				"label": "崆峒区",
+				"value": "620802"
+			},
+			{
+				"label": "泾川县",
+				"value": "620821"
+			},
+			{
+				"label": "灵台县",
+				"value": "620822"
+			},
+			{
+				"label": "崇信县",
+				"value": "620823"
+			},
+			{
+				"label": "华亭县",
+				"value": "620824"
+			},
+			{
+				"label": "庄浪县",
+				"value": "620825"
+			},
+			{
+				"label": "静宁县",
+				"value": "620826"
+			},
+			{
+				"label": "平凉工业园区",
+				"value": "620871"
+			}
+		],
+		[{
+				"label": "肃州区",
+				"value": "620902"
+			},
+			{
+				"label": "金塔县",
+				"value": "620921"
+			},
+			{
+				"label": "瓜州县",
+				"value": "620922"
+			},
+			{
+				"label": "肃北蒙古族自治县",
+				"value": "620923"
+			},
+			{
+				"label": "阿克塞哈萨克族自治县",
+				"value": "620924"
+			},
+			{
+				"label": "玉门市",
+				"value": "620981"
+			},
+			{
+				"label": "敦煌市",
+				"value": "620982"
+			}
+		],
+		[{
+				"label": "西峰区",
+				"value": "621002"
+			},
+			{
+				"label": "庆城县",
+				"value": "621021"
+			},
+			{
+				"label": "环县",
+				"value": "621022"
+			},
+			{
+				"label": "华池县",
+				"value": "621023"
+			},
+			{
+				"label": "合水县",
+				"value": "621024"
+			},
+			{
+				"label": "正宁县",
+				"value": "621025"
+			},
+			{
+				"label": "宁县",
+				"value": "621026"
+			},
+			{
+				"label": "镇原县",
+				"value": "621027"
+			}
+		],
+		[{
+				"label": "安定区",
+				"value": "621102"
+			},
+			{
+				"label": "通渭县",
+				"value": "621121"
+			},
+			{
+				"label": "陇西县",
+				"value": "621122"
+			},
+			{
+				"label": "渭源县",
+				"value": "621123"
+			},
+			{
+				"label": "临洮县",
+				"value": "621124"
+			},
+			{
+				"label": "漳县",
+				"value": "621125"
+			},
+			{
+				"label": "岷县",
+				"value": "621126"
+			}
+		],
+		[{
+				"label": "武都区",
+				"value": "621202"
+			},
+			{
+				"label": "成县",
+				"value": "621221"
+			},
+			{
+				"label": "文县",
+				"value": "621222"
+			},
+			{
+				"label": "宕昌县",
+				"value": "621223"
+			},
+			{
+				"label": "康县",
+				"value": "621224"
+			},
+			{
+				"label": "西和县",
+				"value": "621225"
+			},
+			{
+				"label": "礼县",
+				"value": "621226"
+			},
+			{
+				"label": "徽县",
+				"value": "621227"
+			},
+			{
+				"label": "两当县",
+				"value": "621228"
+			}
+		],
+		[{
+				"label": "临夏市",
+				"value": "622901"
+			},
+			{
+				"label": "临夏县",
+				"value": "622921"
+			},
+			{
+				"label": "康乐县",
+				"value": "622922"
+			},
+			{
+				"label": "永靖县",
+				"value": "622923"
+			},
+			{
+				"label": "广河县",
+				"value": "622924"
+			},
+			{
+				"label": "和政县",
+				"value": "622925"
+			},
+			{
+				"label": "东乡族自治县",
+				"value": "622926"
+			},
+			{
+				"label": "积石山保安族东乡族撒拉族自治县",
+				"value": "622927"
+			}
+		],
+		[{
+				"label": "合作市",
+				"value": "623001"
+			},
+			{
+				"label": "临潭县",
+				"value": "623021"
+			},
+			{
+				"label": "卓尼县",
+				"value": "623022"
+			},
+			{
+				"label": "舟曲县",
+				"value": "623023"
+			},
+			{
+				"label": "迭部县",
+				"value": "623024"
+			},
+			{
+				"label": "玛曲县",
+				"value": "623025"
+			},
+			{
+				"label": "碌曲县",
+				"value": "623026"
+			},
+			{
+				"label": "夏河县",
+				"value": "623027"
+			}
+		]
+	],
+	[
+		[{
+				"label": "城东区",
+				"value": "630102"
+			},
+			{
+				"label": "城中区",
+				"value": "630103"
+			},
+			{
+				"label": "城西区",
+				"value": "630104"
+			},
+			{
+				"label": "城北区",
+				"value": "630105"
+			},
+			{
+				"label": "大通回族土族自治县",
+				"value": "630121"
+			},
+			{
+				"label": "湟中县",
+				"value": "630122"
+			},
+			{
+				"label": "湟源县",
+				"value": "630123"
+			}
+		],
+		[{
+				"label": "乐都区",
+				"value": "630202"
+			},
+			{
+				"label": "平安区",
+				"value": "630203"
+			},
+			{
+				"label": "民和回族土族自治县",
+				"value": "630222"
+			},
+			{
+				"label": "互助土族自治县",
+				"value": "630223"
+			},
+			{
+				"label": "化隆回族自治县",
+				"value": "630224"
+			},
+			{
+				"label": "循化撒拉族自治县",
+				"value": "630225"
+			}
+		],
+		[{
+				"label": "门源回族自治县",
+				"value": "632221"
+			},
+			{
+				"label": "祁连县",
+				"value": "632222"
+			},
+			{
+				"label": "海晏县",
+				"value": "632223"
+			},
+			{
+				"label": "刚察县",
+				"value": "632224"
+			}
+		],
+		[{
+				"label": "同仁县",
+				"value": "632321"
+			},
+			{
+				"label": "尖扎县",
+				"value": "632322"
+			},
+			{
+				"label": "泽库县",
+				"value": "632323"
+			},
+			{
+				"label": "河南蒙古族自治县",
+				"value": "632324"
+			}
+		],
+		[{
+				"label": "共和县",
+				"value": "632521"
+			},
+			{
+				"label": "同德县",
+				"value": "632522"
+			},
+			{
+				"label": "贵德县",
+				"value": "632523"
+			},
+			{
+				"label": "兴海县",
+				"value": "632524"
+			},
+			{
+				"label": "贵南县",
+				"value": "632525"
+			}
+		],
+		[{
+				"label": "玛沁县",
+				"value": "632621"
+			},
+			{
+				"label": "班玛县",
+				"value": "632622"
+			},
+			{
+				"label": "甘德县",
+				"value": "632623"
+			},
+			{
+				"label": "达日县",
+				"value": "632624"
+			},
+			{
+				"label": "久治县",
+				"value": "632625"
+			},
+			{
+				"label": "玛多县",
+				"value": "632626"
+			}
+		],
+		[{
+				"label": "玉树市",
+				"value": "632701"
+			},
+			{
+				"label": "杂多县",
+				"value": "632722"
+			},
+			{
+				"label": "称多县",
+				"value": "632723"
+			},
+			{
+				"label": "治多县",
+				"value": "632724"
+			},
+			{
+				"label": "囊谦县",
+				"value": "632725"
+			},
+			{
+				"label": "曲麻莱县",
+				"value": "632726"
+			}
+		],
+		[{
+				"label": "格尔木市",
+				"value": "632801"
+			},
+			{
+				"label": "德令哈市",
+				"value": "632802"
+			},
+			{
+				"label": "乌兰县",
+				"value": "632821"
+			},
+			{
+				"label": "都兰县",
+				"value": "632822"
+			},
+			{
+				"label": "天峻县",
+				"value": "632823"
+			},
+			{
+				"label": "大柴旦行政委员会",
+				"value": "632857"
+			},
+			{
+				"label": "冷湖行政委员会",
+				"value": "632858"
+			},
+			{
+				"label": "茫崖行政委员会",
+				"value": "632859"
+			}
+		]
+	],
+	[
+		[{
+				"label": "兴庆区",
+				"value": "640104"
+			},
+			{
+				"label": "西夏区",
+				"value": "640105"
+			},
+			{
+				"label": "金凤区",
+				"value": "640106"
+			},
+			{
+				"label": "永宁县",
+				"value": "640121"
+			},
+			{
+				"label": "贺兰县",
+				"value": "640122"
+			},
+			{
+				"label": "灵武市",
+				"value": "640181"
+			}
+		],
+		[{
+				"label": "大武口区",
+				"value": "640202"
+			},
+			{
+				"label": "惠农区",
+				"value": "640205"
+			},
+			{
+				"label": "平罗县",
+				"value": "640221"
+			}
+		],
+		[{
+				"label": "利通区",
+				"value": "640302"
+			},
+			{
+				"label": "红寺堡区",
+				"value": "640303"
+			},
+			{
+				"label": "盐池县",
+				"value": "640323"
+			},
+			{
+				"label": "同心县",
+				"value": "640324"
+			},
+			{
+				"label": "青铜峡市",
+				"value": "640381"
+			}
+		],
+		[{
+				"label": "原州区",
+				"value": "640402"
+			},
+			{
+				"label": "西吉县",
+				"value": "640422"
+			},
+			{
+				"label": "隆德县",
+				"value": "640423"
+			},
+			{
+				"label": "泾源县",
+				"value": "640424"
+			},
+			{
+				"label": "彭阳县",
+				"value": "640425"
+			}
+		],
+		[{
+				"label": "沙坡头区",
+				"value": "640502"
+			},
+			{
+				"label": "中宁县",
+				"value": "640521"
+			},
+			{
+				"label": "海原县",
+				"value": "640522"
+			}
+		]
+	],
+	[
+		[{
+				"label": "天山区",
+				"value": "650102"
+			},
+			{
+				"label": "沙依巴克区",
+				"value": "650103"
+			},
+			{
+				"label": "新市区",
+				"value": "650104"
+			},
+			{
+				"label": "水磨沟区",
+				"value": "650105"
+			},
+			{
+				"label": "头屯河区",
+				"value": "650106"
+			},
+			{
+				"label": "达坂城区",
+				"value": "650107"
+			},
+			{
+				"label": "米东区",
+				"value": "650109"
+			},
+			{
+				"label": "乌鲁木齐县",
+				"value": "650121"
+			},
+			{
+				"label": "乌鲁木齐经济技术开发区",
+				"value": "650171"
+			},
+			{
+				"label": "乌鲁木齐高新技术产业开发区",
+				"value": "650172"
+			}
+		],
+		[{
+				"label": "独山子区",
+				"value": "650202"
+			},
+			{
+				"label": "克拉玛依区",
+				"value": "650203"
+			},
+			{
+				"label": "白碱滩区",
+				"value": "650204"
+			},
+			{
+				"label": "乌尔禾区",
+				"value": "650205"
+			}
+		],
+		[{
+				"label": "高昌区",
+				"value": "650402"
+			},
+			{
+				"label": "鄯善县",
+				"value": "650421"
+			},
+			{
+				"label": "托克逊县",
+				"value": "650422"
+			}
+		],
+		[{
+				"label": "伊州区",
+				"value": "650502"
+			},
+			{
+				"label": "巴里坤哈萨克自治县",
+				"value": "650521"
+			},
+			{
+				"label": "伊吾县",
+				"value": "650522"
+			}
+		],
+		[{
+				"label": "昌吉市",
+				"value": "652301"
+			},
+			{
+				"label": "阜康市",
+				"value": "652302"
+			},
+			{
+				"label": "呼图壁县",
+				"value": "652323"
+			},
+			{
+				"label": "玛纳斯县",
+				"value": "652324"
+			},
+			{
+				"label": "奇台县",
+				"value": "652325"
+			},
+			{
+				"label": "吉木萨尔县",
+				"value": "652327"
+			},
+			{
+				"label": "木垒哈萨克自治县",
+				"value": "652328"
+			}
+		],
+		[{
+				"label": "博乐市",
+				"value": "652701"
+			},
+			{
+				"label": "阿拉山口市",
+				"value": "652702"
+			},
+			{
+				"label": "精河县",
+				"value": "652722"
+			},
+			{
+				"label": "温泉县",
+				"value": "652723"
+			}
+		],
+		[{
+				"label": "库尔勒市",
+				"value": "652801"
+			},
+			{
+				"label": "轮台县",
+				"value": "652822"
+			},
+			{
+				"label": "尉犁县",
+				"value": "652823"
+			},
+			{
+				"label": "若羌县",
+				"value": "652824"
+			},
+			{
+				"label": "且末县",
+				"value": "652825"
+			},
+			{
+				"label": "焉耆回族自治县",
+				"value": "652826"
+			},
+			{
+				"label": "和静县",
+				"value": "652827"
+			},
+			{
+				"label": "和硕县",
+				"value": "652828"
+			},
+			{
+				"label": "博湖县",
+				"value": "652829"
+			},
+			{
+				"label": "库尔勒经济技术开发区",
+				"value": "652871"
+			}
+		],
+		[{
+				"label": "阿克苏市",
+				"value": "652901"
+			},
+			{
+				"label": "温宿县",
+				"value": "652922"
+			},
+			{
+				"label": "库车县",
+				"value": "652923"
+			},
+			{
+				"label": "沙雅县",
+				"value": "652924"
+			},
+			{
+				"label": "新和县",
+				"value": "652925"
+			},
+			{
+				"label": "拜城县",
+				"value": "652926"
+			},
+			{
+				"label": "乌什县",
+				"value": "652927"
+			},
+			{
+				"label": "阿瓦提县",
+				"value": "652928"
+			},
+			{
+				"label": "柯坪县",
+				"value": "652929"
+			}
+		],
+		[{
+				"label": "阿图什市",
+				"value": "653001"
+			},
+			{
+				"label": "阿克陶县",
+				"value": "653022"
+			},
+			{
+				"label": "阿合奇县",
+				"value": "653023"
+			},
+			{
+				"label": "乌恰县",
+				"value": "653024"
+			}
+		],
+		[{
+				"label": "喀什市",
+				"value": "653101"
+			},
+			{
+				"label": "疏附县",
+				"value": "653121"
+			},
+			{
+				"label": "疏勒县",
+				"value": "653122"
+			},
+			{
+				"label": "英吉沙县",
+				"value": "653123"
+			},
+			{
+				"label": "泽普县",
+				"value": "653124"
+			},
+			{
+				"label": "莎车县",
+				"value": "653125"
+			},
+			{
+				"label": "叶城县",
+				"value": "653126"
+			},
+			{
+				"label": "麦盖提县",
+				"value": "653127"
+			},
+			{
+				"label": "岳普湖县",
+				"value": "653128"
+			},
+			{
+				"label": "伽师县",
+				"value": "653129"
+			},
+			{
+				"label": "巴楚县",
+				"value": "653130"
+			},
+			{
+				"label": "塔什库尔干塔吉克自治县",
+				"value": "653131"
+			}
+		],
+		[{
+				"label": "和田市",
+				"value": "653201"
+			},
+			{
+				"label": "和田县",
+				"value": "653221"
+			},
+			{
+				"label": "墨玉县",
+				"value": "653222"
+			},
+			{
+				"label": "皮山县",
+				"value": "653223"
+			},
+			{
+				"label": "洛浦县",
+				"value": "653224"
+			},
+			{
+				"label": "策勒县",
+				"value": "653225"
+			},
+			{
+				"label": "于田县",
+				"value": "653226"
+			},
+			{
+				"label": "民丰县",
+				"value": "653227"
+			}
+		],
+		[{
+				"label": "伊宁市",
+				"value": "654002"
+			},
+			{
+				"label": "奎屯市",
+				"value": "654003"
+			},
+			{
+				"label": "霍尔果斯市",
+				"value": "654004"
+			},
+			{
+				"label": "伊宁县",
+				"value": "654021"
+			},
+			{
+				"label": "察布查尔锡伯自治县",
+				"value": "654022"
+			},
+			{
+				"label": "霍城县",
+				"value": "654023"
+			},
+			{
+				"label": "巩留县",
+				"value": "654024"
+			},
+			{
+				"label": "新源县",
+				"value": "654025"
+			},
+			{
+				"label": "昭苏县",
+				"value": "654026"
+			},
+			{
+				"label": "特克斯县",
+				"value": "654027"
+			},
+			{
+				"label": "尼勒克县",
+				"value": "654028"
+			}
+		],
+		[{
+				"label": "塔城市",
+				"value": "654201"
+			},
+			{
+				"label": "乌苏市",
+				"value": "654202"
+			},
+			{
+				"label": "额敏县",
+				"value": "654221"
+			},
+			{
+				"label": "沙湾县",
+				"value": "654223"
+			},
+			{
+				"label": "托里县",
+				"value": "654224"
+			},
+			{
+				"label": "裕民县",
+				"value": "654225"
+			},
+			{
+				"label": "和布克赛尔蒙古自治县",
+				"value": "654226"
+			}
+		],
+		[{
+				"label": "阿勒泰市",
+				"value": "654301"
+			},
+			{
+				"label": "布尔津县",
+				"value": "654321"
+			},
+			{
+				"label": "富蕴县",
+				"value": "654322"
+			},
+			{
+				"label": "福海县",
+				"value": "654323"
+			},
+			{
+				"label": "哈巴河县",
+				"value": "654324"
+			},
+			{
+				"label": "青河县",
+				"value": "654325"
+			},
+			{
+				"label": "吉木乃县",
+				"value": "654326"
+			}
+		],
+		[{
+				"label": "石河子市",
+				"value": "659001"
+			},
+			{
+				"label": "阿拉尔市",
+				"value": "659002"
+			},
+			{
+				"label": "图木舒克市",
+				"value": "659003"
+			},
+			{
+				"label": "五家渠市",
+				"value": "659004"
+			},
+			{
+				"label": "铁门关市",
+				"value": "659006"
+			}
+		]
+	],
+	[
+		[{
+			"label": "台北",
+			"value": "660101"
+		}],
+		[{
+			"label": "高雄",
+			"value": "660201"
+		}],
+		[{
+			"label": "基隆",
+			"value": "660301"
+		}],
+		[{
+			"label": "台中",
+			"value": "660401"
+		}],
+		[{
+			"label": "台南",
+			"value": "660501"
+		}],
+		[{
+			"label": "新竹",
+			"value": "660601"
+		}],
+		[{
+			"label": "嘉义",
+			"value": "660701"
+		}],
+		[{
+			"label": "宜兰",
+			"value": "660801"
+		}],
+		[{
+			"label": "桃园",
+			"value": "660901"
+		}],
+		[{
+			"label": "苗栗",
+			"value": "661001"
+		}],
+		[{
+			"label": "彰化",
+			"value": "661101"
+		}],
+		[{
+			"label": "南投",
+			"value": "661201"
+		}],
+		[{
+			"label": "云林",
+			"value": "661301"
+		}],
+		[{
+			"label": "屏东",
+			"value": "661401"
+		}],
+		[{
+			"label": "台东",
+			"value": "661501"
+		}],
+		[{
+			"label": "花莲",
+			"value": "661601"
+		}],
+		[{
+			"label": "澎湖",
+			"value": "661701"
+		}]
+	],
+	[
+		[{
+			"label": "香港岛",
+			"value": "670101"
+		}],
+		[{
+			"label": "九龙",
+			"value": "670201"
+		}],
+		[{
+			"label": "新界",
+			"value": "670301"
+		}]
+	],
+	[
+		[{
+			"label": "澳门半岛",
+			"value": "680101"
+		}],
+		[{
+			"label": "氹仔岛",
+			"value": "680201"
+		}],
+		[{
+			"label": "路环岛",
+			"value": "680301"
+		}],
+		[{
+			"label": "路氹城",
+			"value": "680401"
+		}]
+	],
+	[
+		[{
+			"label": "钓鱼岛全岛",
+			"value": "690101"
+		}]
+	]
+]
+export default areaData;

+ 1507 - 0
components/city-data/city.js

@@ -0,0 +1,1507 @@
+/* eslint-disable */
+var cityData = [
+	[{
+		"label": "市辖区",
+		"value": "1101"
+	}],
+	[{
+		"label": "市辖区",
+		"value": "1201"
+	}],
+	[{
+			"label": "石家庄市",
+			"value": "1301"
+		},
+		{
+			"label": "唐山市",
+			"value": "1302"
+		},
+		{
+			"label": "秦皇岛市",
+			"value": "1303"
+		},
+		{
+			"label": "邯郸市",
+			"value": "1304"
+		},
+		{
+			"label": "邢台市",
+			"value": "1305"
+		},
+		{
+			"label": "保定市",
+			"value": "1306"
+		},
+		{
+			"label": "张家口市",
+			"value": "1307"
+		},
+		{
+			"label": "承德市",
+			"value": "1308"
+		},
+		{
+			"label": "沧州市",
+			"value": "1309"
+		},
+		{
+			"label": "廊坊市",
+			"value": "1310"
+		},
+		{
+			"label": "衡水市",
+			"value": "1311"
+		}
+	],
+	[{
+			"label": "太原市",
+			"value": "1401"
+		},
+		{
+			"label": "大同市",
+			"value": "1402"
+		},
+		{
+			"label": "阳泉市",
+			"value": "1403"
+		},
+		{
+			"label": "长治市",
+			"value": "1404"
+		},
+		{
+			"label": "晋城市",
+			"value": "1405"
+		},
+		{
+			"label": "朔州市",
+			"value": "1406"
+		},
+		{
+			"label": "晋中市",
+			"value": "1407"
+		},
+		{
+			"label": "运城市",
+			"value": "1408"
+		},
+		{
+			"label": "忻州市",
+			"value": "1409"
+		},
+		{
+			"label": "临汾市",
+			"value": "1410"
+		},
+		{
+			"label": "吕梁市",
+			"value": "1411"
+		}
+	],
+	[{
+			"label": "呼和浩特市",
+			"value": "1501"
+		},
+		{
+			"label": "包头市",
+			"value": "1502"
+		},
+		{
+			"label": "乌海市",
+			"value": "1503"
+		},
+		{
+			"label": "赤峰市",
+			"value": "1504"
+		},
+		{
+			"label": "通辽市",
+			"value": "1505"
+		},
+		{
+			"label": "鄂尔多斯市",
+			"value": "1506"
+		},
+		{
+			"label": "呼伦贝尔市",
+			"value": "1507"
+		},
+		{
+			"label": "巴彦淖尔市",
+			"value": "1508"
+		},
+		{
+			"label": "乌兰察布市",
+			"value": "1509"
+		},
+		{
+			"label": "兴安盟",
+			"value": "1522"
+		},
+		{
+			"label": "锡林郭勒盟",
+			"value": "1525"
+		},
+		{
+			"label": "阿拉善盟",
+			"value": "1529"
+		}
+	],
+	[{
+			"label": "沈阳市",
+			"value": "2101"
+		},
+		{
+			"label": "大连市",
+			"value": "2102"
+		},
+		{
+			"label": "鞍山市",
+			"value": "2103"
+		},
+		{
+			"label": "抚顺市",
+			"value": "2104"
+		},
+		{
+			"label": "本溪市",
+			"value": "2105"
+		},
+		{
+			"label": "丹东市",
+			"value": "2106"
+		},
+		{
+			"label": "锦州市",
+			"value": "2107"
+		},
+		{
+			"label": "营口市",
+			"value": "2108"
+		},
+		{
+			"label": "阜新市",
+			"value": "2109"
+		},
+		{
+			"label": "辽阳市",
+			"value": "2110"
+		},
+		{
+			"label": "盘锦市",
+			"value": "2111"
+		},
+		{
+			"label": "铁岭市",
+			"value": "2112"
+		},
+		{
+			"label": "朝阳市",
+			"value": "2113"
+		},
+		{
+			"label": "葫芦岛市",
+			"value": "2114"
+		}
+	],
+	[{
+			"label": "长春市",
+			"value": "2201"
+		},
+		{
+			"label": "吉林市",
+			"value": "2202"
+		},
+		{
+			"label": "四平市",
+			"value": "2203"
+		},
+		{
+			"label": "辽源市",
+			"value": "2204"
+		},
+		{
+			"label": "通化市",
+			"value": "2205"
+		},
+		{
+			"label": "白山市",
+			"value": "2206"
+		},
+		{
+			"label": "松原市",
+			"value": "2207"
+		},
+		{
+			"label": "白城市",
+			"value": "2208"
+		},
+		{
+			"label": "延边朝鲜族自治州",
+			"value": "2224"
+		}
+	],
+	[{
+			"label": "哈尔滨市",
+			"value": "2301"
+		},
+		{
+			"label": "齐齐哈尔市",
+			"value": "2302"
+		},
+		{
+			"label": "鸡西市",
+			"value": "2303"
+		},
+		{
+			"label": "鹤岗市",
+			"value": "2304"
+		},
+		{
+			"label": "双鸭山市",
+			"value": "2305"
+		},
+		{
+			"label": "大庆市",
+			"value": "2306"
+		},
+		{
+			"label": "伊春市",
+			"value": "2307"
+		},
+		{
+			"label": "佳木斯市",
+			"value": "2308"
+		},
+		{
+			"label": "七台河市",
+			"value": "2309"
+		},
+		{
+			"label": "牡丹江市",
+			"value": "2310"
+		},
+		{
+			"label": "黑河市",
+			"value": "2311"
+		},
+		{
+			"label": "绥化市",
+			"value": "2312"
+		},
+		{
+			"label": "大兴安岭地区",
+			"value": "2327"
+		}
+	],
+	[{
+		"label": "市辖区",
+		"value": "3101"
+	}],
+	[{
+			"label": "南京市",
+			"value": "3201"
+		},
+		{
+			"label": "无锡市",
+			"value": "3202"
+		},
+		{
+			"label": "徐州市",
+			"value": "3203"
+		},
+		{
+			"label": "常州市",
+			"value": "3204"
+		},
+		{
+			"label": "苏州市",
+			"value": "3205"
+		},
+		{
+			"label": "南通市",
+			"value": "3206"
+		},
+		{
+			"label": "连云港市",
+			"value": "3207"
+		},
+		{
+			"label": "淮安市",
+			"value": "3208"
+		},
+		{
+			"label": "盐城市",
+			"value": "3209"
+		},
+		{
+			"label": "扬州市",
+			"value": "3210"
+		},
+		{
+			"label": "镇江市",
+			"value": "3211"
+		},
+		{
+			"label": "泰州市",
+			"value": "3212"
+		},
+		{
+			"label": "宿迁市",
+			"value": "3213"
+		}
+	],
+	[{
+			"label": "杭州市",
+			"value": "3301"
+		},
+		{
+			"label": "宁波市",
+			"value": "3302"
+		},
+		{
+			"label": "温州市",
+			"value": "3303"
+		},
+		{
+			"label": "嘉兴市",
+			"value": "3304"
+		},
+		{
+			"label": "湖州市",
+			"value": "3305"
+		},
+		{
+			"label": "绍兴市",
+			"value": "3306"
+		},
+		{
+			"label": "金华市",
+			"value": "3307"
+		},
+		{
+			"label": "衢州市",
+			"value": "3308"
+		},
+		{
+			"label": "舟山市",
+			"value": "3309"
+		},
+		{
+			"label": "台州市",
+			"value": "3310"
+		},
+		{
+			"label": "丽水市",
+			"value": "3311"
+		}
+	],
+	[{
+			"label": "合肥市",
+			"value": "3401"
+		},
+		{
+			"label": "芜湖市",
+			"value": "3402"
+		},
+		{
+			"label": "蚌埠市",
+			"value": "3403"
+		},
+		{
+			"label": "淮南市",
+			"value": "3404"
+		},
+		{
+			"label": "马鞍山市",
+			"value": "3405"
+		},
+		{
+			"label": "淮北市",
+			"value": "3406"
+		},
+		{
+			"label": "铜陵市",
+			"value": "3407"
+		},
+		{
+			"label": "安庆市",
+			"value": "3408"
+		},
+		{
+			"label": "黄山市",
+			"value": "3410"
+		},
+		{
+			"label": "滁州市",
+			"value": "3411"
+		},
+		{
+			"label": "阜阳市",
+			"value": "3412"
+		},
+		{
+			"label": "宿州市",
+			"value": "3413"
+		},
+		{
+			"label": "六安市",
+			"value": "3415"
+		},
+		{
+			"label": "亳州市",
+			"value": "3416"
+		},
+		{
+			"label": "池州市",
+			"value": "3417"
+		},
+		{
+			"label": "宣城市",
+			"value": "3418"
+		}
+	],
+	[{
+			"label": "福州市",
+			"value": "3501"
+		},
+		{
+			"label": "厦门市",
+			"value": "3502"
+		},
+		{
+			"label": "莆田市",
+			"value": "3503"
+		},
+		{
+			"label": "三明市",
+			"value": "3504"
+		},
+		{
+			"label": "泉州市",
+			"value": "3505"
+		},
+		{
+			"label": "漳州市",
+			"value": "3506"
+		},
+		{
+			"label": "南平市",
+			"value": "3507"
+		},
+		{
+			"label": "龙岩市",
+			"value": "3508"
+		},
+		{
+			"label": "宁德市",
+			"value": "3509"
+		}
+	],
+	[{
+			"label": "南昌市",
+			"value": "3601"
+		},
+		{
+			"label": "景德镇市",
+			"value": "3602"
+		},
+		{
+			"label": "萍乡市",
+			"value": "3603"
+		},
+		{
+			"label": "九江市",
+			"value": "3604"
+		},
+		{
+			"label": "新余市",
+			"value": "3605"
+		},
+		{
+			"label": "鹰潭市",
+			"value": "3606"
+		},
+		{
+			"label": "赣州市",
+			"value": "3607"
+		},
+		{
+			"label": "吉安市",
+			"value": "3608"
+		},
+		{
+			"label": "宜春市",
+			"value": "3609"
+		},
+		{
+			"label": "抚州市",
+			"value": "3610"
+		},
+		{
+			"label": "上饶市",
+			"value": "3611"
+		}
+	],
+	[{
+			"label": "济南市",
+			"value": "3701"
+		},
+		{
+			"label": "青岛市",
+			"value": "3702"
+		},
+		{
+			"label": "淄博市",
+			"value": "3703"
+		},
+		{
+			"label": "枣庄市",
+			"value": "3704"
+		},
+		{
+			"label": "东营市",
+			"value": "3705"
+		},
+		{
+			"label": "烟台市",
+			"value": "3706"
+		},
+		{
+			"label": "潍坊市",
+			"value": "3707"
+		},
+		{
+			"label": "济宁市",
+			"value": "3708"
+		},
+		{
+			"label": "泰安市",
+			"value": "3709"
+		},
+		{
+			"label": "威海市",
+			"value": "3710"
+		},
+		{
+			"label": "日照市",
+			"value": "3711"
+		},
+		{
+			"label": "莱芜市",
+			"value": "3712"
+		},
+		{
+			"label": "临沂市",
+			"value": "3713"
+		},
+		{
+			"label": "德州市",
+			"value": "3714"
+		},
+		{
+			"label": "聊城市",
+			"value": "3715"
+		},
+		{
+			"label": "滨州市",
+			"value": "3716"
+		},
+		{
+			"label": "菏泽市",
+			"value": "3717"
+		}
+	],
+	[{
+			"label": "郑州市",
+			"value": "4101"
+		},
+		{
+			"label": "开封市",
+			"value": "4102"
+		},
+		{
+			"label": "洛阳市",
+			"value": "4103"
+		},
+		{
+			"label": "平顶山市",
+			"value": "4104"
+		},
+		{
+			"label": "安阳市",
+			"value": "4105"
+		},
+		{
+			"label": "鹤壁市",
+			"value": "4106"
+		},
+		{
+			"label": "新乡市",
+			"value": "4107"
+		},
+		{
+			"label": "焦作市",
+			"value": "4108"
+		},
+		{
+			"label": "濮阳市",
+			"value": "4109"
+		},
+		{
+			"label": "许昌市",
+			"value": "4110"
+		},
+		{
+			"label": "漯河市",
+			"value": "4111"
+		},
+		{
+			"label": "三门峡市",
+			"value": "4112"
+		},
+		{
+			"label": "南阳市",
+			"value": "4113"
+		},
+		{
+			"label": "商丘市",
+			"value": "4114"
+		},
+		{
+			"label": "信阳市",
+			"value": "4115"
+		},
+		{
+			"label": "周口市",
+			"value": "4116"
+		},
+		{
+			"label": "驻马店市",
+			"value": "4117"
+		},
+		{
+			"label": "省直辖县级行政区划",
+			"value": "4190"
+		}
+	],
+	[{
+			"label": "武汉市",
+			"value": "4201"
+		},
+		{
+			"label": "黄石市",
+			"value": "4202"
+		},
+		{
+			"label": "十堰市",
+			"value": "4203"
+		},
+		{
+			"label": "宜昌市",
+			"value": "4205"
+		},
+		{
+			"label": "襄阳市",
+			"value": "4206"
+		},
+		{
+			"label": "鄂州市",
+			"value": "4207"
+		},
+		{
+			"label": "荆门市",
+			"value": "4208"
+		},
+		{
+			"label": "孝感市",
+			"value": "4209"
+		},
+		{
+			"label": "荆州市",
+			"value": "4210"
+		},
+		{
+			"label": "黄冈市",
+			"value": "4211"
+		},
+		{
+			"label": "咸宁市",
+			"value": "4212"
+		},
+		{
+			"label": "随州市",
+			"value": "4213"
+		},
+		{
+			"label": "恩施土家族苗族自治州",
+			"value": "4228"
+		},
+		{
+			"label": "省直辖县级行政区划",
+			"value": "4290"
+		}
+	],
+	[{
+			"label": "长沙市",
+			"value": "4301"
+		},
+		{
+			"label": "株洲市",
+			"value": "4302"
+		},
+		{
+			"label": "湘潭市",
+			"value": "4303"
+		},
+		{
+			"label": "衡阳市",
+			"value": "4304"
+		},
+		{
+			"label": "邵阳市",
+			"value": "4305"
+		},
+		{
+			"label": "岳阳市",
+			"value": "4306"
+		},
+		{
+			"label": "常德市",
+			"value": "4307"
+		},
+		{
+			"label": "张家界市",
+			"value": "4308"
+		},
+		{
+			"label": "益阳市",
+			"value": "4309"
+		},
+		{
+			"label": "郴州市",
+			"value": "4310"
+		},
+		{
+			"label": "永州市",
+			"value": "4311"
+		},
+		{
+			"label": "怀化市",
+			"value": "4312"
+		},
+		{
+			"label": "娄底市",
+			"value": "4313"
+		},
+		{
+			"label": "湘西土家族苗族自治州",
+			"value": "4331"
+		}
+	],
+	[{
+			"label": "广州市",
+			"value": "4401"
+		},
+		{
+			"label": "韶关市",
+			"value": "4402"
+		},
+		{
+			"label": "深圳市",
+			"value": "4403"
+		},
+		{
+			"label": "珠海市",
+			"value": "4404"
+		},
+		{
+			"label": "汕头市",
+			"value": "4405"
+		},
+		{
+			"label": "佛山市",
+			"value": "4406"
+		},
+		{
+			"label": "江门市",
+			"value": "4407"
+		},
+		{
+			"label": "湛江市",
+			"value": "4408"
+		},
+		{
+			"label": "茂名市",
+			"value": "4409"
+		},
+		{
+			"label": "肇庆市",
+			"value": "4412"
+		},
+		{
+			"label": "惠州市",
+			"value": "4413"
+		},
+		{
+			"label": "梅州市",
+			"value": "4414"
+		},
+		{
+			"label": "汕尾市",
+			"value": "4415"
+		},
+		{
+			"label": "河源市",
+			"value": "4416"
+		},
+		{
+			"label": "阳江市",
+			"value": "4417"
+		},
+		{
+			"label": "清远市",
+			"value": "4418"
+		},
+		{
+			"label": "东莞市",
+			"value": "4419"
+		},
+		{
+			"label": "中山市",
+			"value": "4420"
+		},
+		{
+			"label": "潮州市",
+			"value": "4451"
+		},
+		{
+			"label": "揭阳市",
+			"value": "4452"
+		},
+		{
+			"label": "云浮市",
+			"value": "4453"
+		}
+	],
+	[{
+			"label": "南宁市",
+			"value": "4501"
+		},
+		{
+			"label": "柳州市",
+			"value": "4502"
+		},
+		{
+			"label": "桂林市",
+			"value": "4503"
+		},
+		{
+			"label": "梧州市",
+			"value": "4504"
+		},
+		{
+			"label": "北海市",
+			"value": "4505"
+		},
+		{
+			"label": "防城港市",
+			"value": "4506"
+		},
+		{
+			"label": "钦州市",
+			"value": "4507"
+		},
+		{
+			"label": "贵港市",
+			"value": "4508"
+		},
+		{
+			"label": "玉林市",
+			"value": "4509"
+		},
+		{
+			"label": "百色市",
+			"value": "4510"
+		},
+		{
+			"label": "贺州市",
+			"value": "4511"
+		},
+		{
+			"label": "河池市",
+			"value": "4512"
+		},
+		{
+			"label": "来宾市",
+			"value": "4513"
+		},
+		{
+			"label": "崇左市",
+			"value": "4514"
+		}
+	],
+	[{
+			"label": "海口市",
+			"value": "4601"
+		},
+		{
+			"label": "三亚市",
+			"value": "4602"
+		},
+		{
+			"label": "三沙市",
+			"value": "4603"
+		},
+		{
+			"label": "儋州市",
+			"value": "4604"
+		},
+		{
+			"label": "省直辖县级行政区划",
+			"value": "4690"
+		}
+	],
+	[{
+			"label": "市辖区",
+			"value": "5001"
+		},
+		{
+			"label": "县",
+			"value": "5002"
+		}
+	],
+	[{
+			"label": "成都市",
+			"value": "5101"
+		},
+		{
+			"label": "自贡市",
+			"value": "5103"
+		},
+		{
+			"label": "攀枝花市",
+			"value": "5104"
+		},
+		{
+			"label": "泸州市",
+			"value": "5105"
+		},
+		{
+			"label": "德阳市",
+			"value": "5106"
+		},
+		{
+			"label": "绵阳市",
+			"value": "5107"
+		},
+		{
+			"label": "广元市",
+			"value": "5108"
+		},
+		{
+			"label": "遂宁市",
+			"value": "5109"
+		},
+		{
+			"label": "内江市",
+			"value": "5110"
+		},
+		{
+			"label": "乐山市",
+			"value": "5111"
+		},
+		{
+			"label": "南充市",
+			"value": "5113"
+		},
+		{
+			"label": "眉山市",
+			"value": "5114"
+		},
+		{
+			"label": "宜宾市",
+			"value": "5115"
+		},
+		{
+			"label": "广安市",
+			"value": "5116"
+		},
+		{
+			"label": "达州市",
+			"value": "5117"
+		},
+		{
+			"label": "雅安市",
+			"value": "5118"
+		},
+		{
+			"label": "巴中市",
+			"value": "5119"
+		},
+		{
+			"label": "资阳市",
+			"value": "5120"
+		},
+		{
+			"label": "阿坝藏族羌族自治州",
+			"value": "5132"
+		},
+		{
+			"label": "甘孜藏族自治州",
+			"value": "5133"
+		},
+		{
+			"label": "凉山彝族自治州",
+			"value": "5134"
+		}
+	],
+	[{
+			"label": "贵阳市",
+			"value": "5201"
+		},
+		{
+			"label": "六盘水市",
+			"value": "5202"
+		},
+		{
+			"label": "遵义市",
+			"value": "5203"
+		},
+		{
+			"label": "安顺市",
+			"value": "5204"
+		},
+		{
+			"label": "毕节市",
+			"value": "5205"
+		},
+		{
+			"label": "铜仁市",
+			"value": "5206"
+		},
+		{
+			"label": "黔西南布依族苗族自治州",
+			"value": "5223"
+		},
+		{
+			"label": "黔东南苗族侗族自治州",
+			"value": "5226"
+		},
+		{
+			"label": "黔南布依族苗族自治州",
+			"value": "5227"
+		}
+	],
+	[{
+			"label": "昆明市",
+			"value": "5301"
+		},
+		{
+			"label": "曲靖市",
+			"value": "5303"
+		},
+		{
+			"label": "玉溪市",
+			"value": "5304"
+		},
+		{
+			"label": "保山市",
+			"value": "5305"
+		},
+		{
+			"label": "昭通市",
+			"value": "5306"
+		},
+		{
+			"label": "丽江市",
+			"value": "5307"
+		},
+		{
+			"label": "普洱市",
+			"value": "5308"
+		},
+		{
+			"label": "临沧市",
+			"value": "5309"
+		},
+		{
+			"label": "楚雄彝族自治州",
+			"value": "5323"
+		},
+		{
+			"label": "红河哈尼族彝族自治州",
+			"value": "5325"
+		},
+		{
+			"label": "文山壮族苗族自治州",
+			"value": "5326"
+		},
+		{
+			"label": "西双版纳傣族自治州",
+			"value": "5328"
+		},
+		{
+			"label": "大理白族自治州",
+			"value": "5329"
+		},
+		{
+			"label": "德宏傣族景颇族自治州",
+			"value": "5331"
+		},
+		{
+			"label": "怒江傈僳族自治州",
+			"value": "5333"
+		},
+		{
+			"label": "迪庆藏族自治州",
+			"value": "5334"
+		}
+	],
+	[{
+			"label": "拉萨市",
+			"value": "5401"
+		},
+		{
+			"label": "日喀则市",
+			"value": "5402"
+		},
+		{
+			"label": "昌都市",
+			"value": "5403"
+		},
+		{
+			"label": "林芝市",
+			"value": "5404"
+		},
+		{
+			"label": "山南市",
+			"value": "5405"
+		},
+		{
+			"label": "那曲地区",
+			"value": "5424"
+		},
+		{
+			"label": "阿里地区",
+			"value": "5425"
+		}
+	],
+	[{
+			"label": "西安市",
+			"value": "6101"
+		},
+		{
+			"label": "铜川市",
+			"value": "6102"
+		},
+		{
+			"label": "宝鸡市",
+			"value": "6103"
+		},
+		{
+			"label": "咸阳市",
+			"value": "6104"
+		},
+		{
+			"label": "渭南市",
+			"value": "6105"
+		},
+		{
+			"label": "延安市",
+			"value": "6106"
+		},
+		{
+			"label": "汉中市",
+			"value": "6107"
+		},
+		{
+			"label": "榆林市",
+			"value": "6108"
+		},
+		{
+			"label": "安康市",
+			"value": "6109"
+		},
+		{
+			"label": "商洛市",
+			"value": "6110"
+		}
+	],
+	[{
+			"label": "兰州市",
+			"value": "6201"
+		},
+		{
+			"label": "嘉峪关市",
+			"value": "6202"
+		},
+		{
+			"label": "金昌市",
+			"value": "6203"
+		},
+		{
+			"label": "白银市",
+			"value": "6204"
+		},
+		{
+			"label": "天水市",
+			"value": "6205"
+		},
+		{
+			"label": "武威市",
+			"value": "6206"
+		},
+		{
+			"label": "张掖市",
+			"value": "6207"
+		},
+		{
+			"label": "平凉市",
+			"value": "6208"
+		},
+		{
+			"label": "酒泉市",
+			"value": "6209"
+		},
+		{
+			"label": "庆阳市",
+			"value": "6210"
+		},
+		{
+			"label": "定西市",
+			"value": "6211"
+		},
+		{
+			"label": "陇南市",
+			"value": "6212"
+		},
+		{
+			"label": "临夏回族自治州",
+			"value": "6229"
+		},
+		{
+			"label": "甘南藏族自治州",
+			"value": "6230"
+		}
+	],
+	[{
+			"label": "西宁市",
+			"value": "6301"
+		},
+		{
+			"label": "海东市",
+			"value": "6302"
+		},
+		{
+			"label": "海北藏族自治州",
+			"value": "6322"
+		},
+		{
+			"label": "黄南藏族自治州",
+			"value": "6323"
+		},
+		{
+			"label": "海南藏族自治州",
+			"value": "6325"
+		},
+		{
+			"label": "果洛藏族自治州",
+			"value": "6326"
+		},
+		{
+			"label": "玉树藏族自治州",
+			"value": "6327"
+		},
+		{
+			"label": "海西蒙古族藏族自治州",
+			"value": "6328"
+		}
+	],
+	[{
+			"label": "银川市",
+			"value": "6401"
+		},
+		{
+			"label": "石嘴山市",
+			"value": "6402"
+		},
+		{
+			"label": "吴忠市",
+			"value": "6403"
+		},
+		{
+			"label": "固原市",
+			"value": "6404"
+		},
+		{
+			"label": "中卫市",
+			"value": "6405"
+		}
+	],
+	[{
+			"label": "乌鲁木齐市",
+			"value": "6501"
+		},
+		{
+			"label": "克拉玛依市",
+			"value": "6502"
+		},
+		{
+			"label": "吐鲁番市",
+			"value": "6504"
+		},
+		{
+			"label": "哈密市",
+			"value": "6505"
+		},
+		{
+			"label": "昌吉回族自治州",
+			"value": "6523"
+		},
+		{
+			"label": "博尔塔拉蒙古自治州",
+			"value": "6527"
+		},
+		{
+			"label": "巴音郭楞蒙古自治州",
+			"value": "6528"
+		},
+		{
+			"label": "阿克苏地区",
+			"value": "6529"
+		},
+		{
+			"label": "克孜勒苏柯尔克孜自治州",
+			"value": "6530"
+		},
+		{
+			"label": "喀什地区",
+			"value": "6531"
+		},
+		{
+			"label": "和田地区",
+			"value": "6532"
+		},
+		{
+			"label": "伊犁哈萨克自治州",
+			"value": "6540"
+		},
+		{
+			"label": "塔城地区",
+			"value": "6542"
+		},
+		{
+			"label": "阿勒泰地区",
+			"value": "6543"
+		},
+		{
+			"label": "自治区直辖县级行政区划",
+			"value": "6590"
+		}
+	],
+	[{
+			"label": "台北",
+			"value": "6601"
+		},
+		{
+			"label": "高雄",
+			"value": "6602"
+		},
+		{
+			"label": "基隆",
+			"value": "6603"
+		},
+		{
+			"label": "台中",
+			"value": "6604"
+		},
+		{
+			"label": "台南",
+			"value": "6605"
+		},
+		{
+			"label": "新竹",
+			"value": "6606"
+		},
+		{
+			"label": "嘉义",
+			"value": "6607"
+		},
+		{
+			"label": "宜兰",
+			"value": "6608"
+		},
+		{
+			"label": "桃园",
+			"value": "6609"
+		},
+		{
+			"label": "苗栗",
+			"value": "6610"
+		},
+		{
+			"label": "彰化",
+			"value": "6611"
+		},
+		{
+			"label": "南投",
+			"value": "6612"
+		},
+		{
+			"label": "云林",
+			"value": "6613"
+		},
+		{
+			"label": "屏东",
+			"value": "6614"
+		},
+		{
+			"label": "台东",
+			"value": "6615"
+		},
+		{
+			"label": "花莲",
+			"value": "6616"
+		},
+		{
+			"label": "澎湖",
+			"value": "6617"
+		}
+	],
+	[{
+			"label": "香港岛",
+			"value": "6701"
+		},
+		{
+			"label": "九龙",
+			"value": "6702"
+		},
+		{
+			"label": "新界",
+			"value": "6703"
+		}
+	],
+	[{
+			"label": "澳门半岛",
+			"value": "6801"
+		},
+		{
+			"label": "氹仔岛",
+			"value": "6802"
+		},
+		{
+			"label": "路环岛",
+			"value": "6803"
+		},
+		{
+			"label": "路氹城",
+			"value": "6804"
+		}
+	],
+	[{
+		"label": "钓鱼岛",
+		"value": "6901"
+	}, ]
+]
+export default cityData;

+ 143 - 0
components/city-data/province.js

@@ -0,0 +1,143 @@
+/* eslint-disable */
+var provinceData = [{
+    "label": "北京市",
+    "value": "11"
+  },
+  {
+    "label": "天津市",
+    "value": "12"
+  },
+  {
+    "label": "河北省",
+    "value": "13"
+  },
+  {
+    "label": "山西省",
+    "value": "14"
+  },
+  {
+    "label": "内蒙古自治区",
+    "value": "15"
+  },
+  {
+    "label": "辽宁省",
+    "value": "21"
+  },
+  {
+    "label": "吉林省",
+    "value": "22"
+  },
+  {
+    "label": "黑龙江省",
+    "value": "23"
+  },
+  {
+    "label": "上海市",
+    "value": "31"
+  },
+  {
+    "label": "江苏省",
+    "value": "32"
+  },
+  {
+    "label": "浙江省",
+    "value": "33"
+  },
+  {
+    "label": "安徽省",
+    "value": "34"
+  },
+  {
+    "label": "福建省",
+    "value": "35"
+  },
+  {
+    "label": "江西省",
+    "value": "36"
+  },
+  {
+    "label": "山东省",
+    "value": "37"
+  },
+  {
+    "label": "河南省",
+    "value": "41"
+  },
+  {
+    "label": "湖北省",
+    "value": "42"
+  },
+  {
+    "label": "湖南省",
+    "value": "43"
+  },
+  {
+    "label": "广东省",
+    "value": "44"
+  },
+  {
+    "label": "广西壮族自治区",
+    "value": "45"
+  },
+  {
+    "label": "海南省",
+    "value": "46"
+  },
+  {
+    "label": "重庆市",
+    "value": "50"
+  },
+  {
+    "label": "四川省",
+    "value": "51"
+  },
+  {
+    "label": "贵州省",
+    "value": "52"
+  },
+  {
+    "label": "云南省",
+    "value": "53"
+  },
+  {
+    "label": "西藏自治区",
+    "value": "54"
+  },
+  {
+    "label": "陕西省",
+    "value": "61"
+  },
+  {
+    "label": "甘肃省",
+    "value": "62"
+  },
+  {
+    "label": "青海省",
+    "value": "63"
+  },
+  {
+    "label": "宁夏回族自治区",
+    "value": "64"
+  },
+  {
+    "label": "新疆维吾尔自治区",
+    "value": "65"
+  },
+  {
+    "label": "台湾",
+    "value": "66"
+  },
+  {
+    "label": "香港",
+    "value": "67"
+  },
+  {
+    "label": "澳门",
+    "value": "68"
+  },
+  {
+    "label": "钓鱼岛",
+    "value": "69"
+  }
+]
+export default provinceData;

+ 220 - 0
components/contact.vue

@@ -0,0 +1,220 @@
+<template>
+	<view class="list-wrapper">
+            <view class="list">
+                <view class="list-item"
+                    v-for="item in items"
+                    :hover-start-time="20" 
+                    :hover-stay-time="70" 
+                    :key="item.id"
+                    hover-class="commonly-hover"
+                    @tap="handleClick(item)"
+                >
+                    <image class="avatar"
+                        mode="aspectFill"
+                        :src="item.avatar"
+                        @tap.stop="handleAvatar(item)"
+                    />
+                    <view class="info">
+                        <view class="nickname">{{item.nickname || item.name}}</view>
+                    </view>
+                    <checkbox
+                        v-if="selectMode"
+                        :checked="selectedMap[item.id]"
+                        :disabled="disabledMap[item.id]"
+                        @tap.stop="handleClick(item)"
+                    />
+                </view>
+            </view>
+    </view>
+</template>
+
+<script>
+    const hasOwn = Object.prototype.hasOwnProperty;
+
+    export default {
+        props: {
+            items: {
+                required: true,
+            },
+            selectMode: {
+                type: Boolean,
+                default: false
+            },
+            checkedMap: {
+                type: Object,
+                default: () => ({})
+            },
+            disabledMap: {
+                type: Object,
+                default: () => ({})
+            }
+        },
+        data() {
+            return {
+                selectedMap: {}
+            }
+        },
+        watch: {
+            checkedMap() {
+                this.lookCheckedMap();
+            },
+            disabledMap() {
+                this.lookCheckedMap();
+            }
+        },
+        methods: {
+            inDisabledMap(id) {
+                return hasOwn.call(this.disabledMap, id);
+            },
+            inCheckedMap(id) {
+                return hasOwn.call(this.checkedMap, id);
+            },
+            inSelected(id) {
+                return typeof this.selectedMap[id] === 'boolean';
+            },
+            setToSelected(id) {
+                const selected = Boolean(this.selectedMap[id]);
+                this.$set(this.selectedMap, id, !selected);
+            },
+            handleAvatar(item) {
+                if (this.selectMode) {
+                    this.handleClick(item);
+                } else {
+                    this.$emit('avatar', item);
+                }
+            },
+            handleClick(item) {
+                if (!this.inDisabledMap(item.id)) {
+                    if (this.selectMode) {
+                        this.setToSelected(item.id);
+                        item.selected = this.selectedMap[item.id];
+                        this.$emit('select', item);
+                    } else {
+                        this.$emit('click', item);
+                    }
+                }
+            },
+            lookCheckedMap() {
+                Object.keys(this.checkedMap).forEach(id => {
+                    // if (!this.inDisabledMap(id)) {
+                        this.setToSelected(id);
+                    // }
+                })
+            }
+        },
+		created() {
+			console.log(1)
+		},
+        onLoad() {
+            this.lookCheckedMap();
+			console.log(2)
+        }
+    }
+</script>
+
+<style lang="scss" scoped>
+    $list-avatar-width: 88upx;
+    
+    .list-wrapper {
+    	position:relative;
+        box-sizing: border-box;
+        padding: $uni-spacing-col-base $uni-spacing-row-base;
+    }
+    
+    .list {
+    	width: 100%;
+        box-sizing: border-box;
+        
+    	.list-title,
+    	.list-item {
+    		width: 100%;
+    		font-size: 32upx;
+    		padding: 0 20upx;
+            box-sizing: border-box;
+    	}
+
+        .list-title {
+        	background-color: #eee;
+        	height: 92upx;
+        	line-height: 92upx;
+    		font-weight: bold;
+        }
+         
+        .list-item {
+            display: flex;
+            flex-direction: row;
+            align-items: center;
+        	background-color: #fff;
+            position: relative;
+            padding: $uni-spacing-col-base $uni-spacing-row-base;
+            
+            .avatar {
+                width: $list-avatar-width;
+                height: $list-avatar-width;
+                margin-right: $uni-spacing-row-base;
+                border-radius: $uni-border-radius-base;
+                overflow: hidden;
+                display: flex;
+                flex-flow: wrap;
+                justify-content: center;
+                background-color: #eee;
+                align-items: center;
+                flex-shrink: 0;
+                
+                &:not(image) {
+                    padding: 1upx;
+                }
+        
+                view,
+                image {
+                    width: ($list-avatar-width - 2upx * 4) / 3;
+                    height: ($list-avatar-width - 2upx * 4) / 3;
+                    margin: 1upx;
+                }
+            }
+            
+            &:last-child {
+                border-bottom-left-radius: $uni-border-radius-base;
+                border-bottom-right-radius: $uni-border-radius-base;
+            }
+            
+            &:not(:last-child)::before {
+                display: block;
+                content: '';
+                bottom: 0;
+                left: $uni-spacing-row-base * 2 + $list-avatar-width;
+                right: $uni-spacing-row-base;
+                height: 1upx;
+                position: absolute;
+                background-color: #E6E6E6;
+                transform: scaleY(0.5);
+            }
+        
+            &.commonly-hover {
+            	background-color: #eee;
+            }
+            
+            text {
+                flex: 1;
+            }
+        }
+
+        .nickname,
+        .description {
+            width: 750upx - $uni-spacing-row-base * 6 - $list-avatar-width - 44upx;
+            text-overflow: ellipsis;
+            white-space: nowrap;
+            overflow: hidden;
+        }
+        
+        .description {
+            font-size: 28upx;
+            color: #999;
+        }
+        
+        .list-title + .list-item {
+            border-top-left-radius: $uni-border-radius-base;
+            border-top-right-radius: $uni-border-radius-base;
+        }
+    }
+</style>

+ 239 - 0
components/contacts.vue

@@ -0,0 +1,239 @@
+<template>
+	<view class="list-wrapper">
+            <view class="list">
+                <view class="list-item"
+                    v-for="item in items"
+                    :hover-start-time="20" 
+                    :hover-stay-time="70" 
+                    :key="item.id"
+                    hover-class="commonly-hover"
+                    @tap="handleClick(item)"
+                >
+                    <image class="avatar"
+                        mode="aspectFill"
+                        :src="image_cache(item.avatar)"
+                        @tap.stop="handleAvatar(item)"
+                    />
+                    <view class="info">
+                        <view class="nickname">{{item.nickname || item.name}}</view>
+                    </view>
+                    <checkbox
+                        v-if="selectMode"
+                   
+                        :checked="selectedMap[item.id]"
+                        :disabled="disabledMap[item.id]"
+                        @tap.stop="handleClick(item)"
+                    />
+                </view>
+            </view>
+    </view>
+</template>
+
+<script>
+    const hasOwn = Object.prototype.hasOwnProperty;
+   import config from '../config.js'
+   import action from '../library/action.js'
+   
+    export default {
+        props: {
+            items: {
+                required: true,
+            },
+            selectMode: {
+                type: Boolean,
+                default: false
+            },
+            checkedMap: {
+                type: Object,
+                default: () => ({})
+            },
+            disabledMap: {
+                type: Object,
+                default: () => ({})
+            },
+            selectedMap: {
+                type:[Array,Object],
+                default: () => ({})
+            }
+        },
+        data() {
+            return {
+                
+            }
+        },
+        watch: {
+            checkedMap() {
+                
+                this.lookCheckedMap();
+            },
+            disabledMap() {
+                this.lookCheckedMap();
+            }
+        },
+        methods: {
+            img_path(path){
+             console.log(path);
+            },
+            
+            photo(path){
+                // if(path.indexOf('http')<=-1) path=config.imgUri+path;
+                
+                // action.image_cache(path,this.img_path)
+            	return this.image_cache(path);
+            },
+            inDisabledMap(id) {
+                return hasOwn.call(this.disabledMap, id);
+            },
+            inCheckedMap(id) {
+                return hasOwn.call(this.checkedMap, id);
+            },
+            inSelected(id) {
+                return typeof this.selectedMap[id] === 'boolean';
+            },
+            setToSelected(id) {
+                const selected = Boolean(this.selectedMap[id]);
+                this.$set(this.selectedMap, id, !selected);
+            },
+            handleAvatar(item) {
+                if (this.selectMode) {
+                    this.handleClick(item);
+                } else {
+                    this.$emit('avatar', item);
+                }
+            },
+            handleClick(item) {
+
+                if (!this.inDisabledMap(item.id)) {
+               
+                    if (this.selectMode) {
+                        this.setToSelected(item.id);
+                        item.selected = this.selectedMap[item.id];
+                        this.$emit('select', item);
+                    } else {
+                        this.$emit('click', item);
+                    }
+                }
+            },
+            lookCheckedMap() {
+                Object.keys(this.checkedMap).forEach(id => {
+                    // if (!this.inDisabledMap(id)) {
+                        this.setToSelected(id);
+                    // }
+                })
+            }
+        },
+		created() {
+		},
+        onLoad() {
+      
+            this.lookCheckedMap();
+        }
+    }
+</script>
+
+<style lang="scss" scoped>
+    $list-avatar-width: 88upx;
+    
+    .list-wrapper {
+    	position:relative;
+        box-sizing: border-box;
+        padding: $uni-spacing-col-base $uni-spacing-row-base;
+    }
+    
+    .list {
+    	width: 100%;
+        box-sizing: border-box;
+        
+    	.list-title,
+    	.list-item {
+    		width: 100%;
+    		font-size: 32upx;
+    		padding: 0 20upx;
+            box-sizing: border-box;
+    	}
+
+        .list-title {
+        	background-color: #eee;
+        	height: 92upx;
+        	line-height: 92upx;
+    		font-weight: bold;
+        }
+         
+        .list-item {
+            display: flex;
+            flex-direction: row;
+            align-items: center;
+        	background-color: #fff;
+            position: relative;
+            padding: $uni-spacing-col-base $uni-spacing-row-base;
+            
+            .avatar {
+                width: $list-avatar-width;
+                height: $list-avatar-width;
+                margin-right: $uni-spacing-row-base;
+                border-radius: $uni-border-radius-base;
+                overflow: hidden;
+                display: flex;
+                flex-flow: wrap;
+                justify-content: center;
+                background-color: #eee;
+                align-items: center;
+                flex-shrink: 0;
+                
+                &:not(image) {
+                    padding: 1upx;
+                }
+        
+                view,
+                image {
+                    width: ($list-avatar-width - 2upx * 4) / 3;
+                    height: ($list-avatar-width - 2upx * 4) / 3;
+                    margin: 1upx;
+                }
+            }
+            
+            &:last-child {
+                border-bottom-left-radius: $uni-border-radius-base;
+                border-bottom-right-radius: $uni-border-radius-base;
+            }
+            
+            &:not(:last-child)::before {
+                display: block;
+                content: '';
+                bottom: 0;
+                left: $uni-spacing-row-base * 2 + $list-avatar-width;
+                right: $uni-spacing-row-base;
+                height: 1upx;
+                position: absolute;
+                background-color: #E6E6E6;
+                transform: scaleY(0.5);
+            }
+        
+            &.commonly-hover {
+            	background-color: #eee;
+            }
+            
+            text {
+                flex: 1;
+            }
+        }
+
+        .nickname,
+        .description {
+            width: 750upx - $uni-spacing-row-base * 6 - $list-avatar-width - 44upx;
+            text-overflow: ellipsis;
+            white-space: nowrap;
+            overflow: hidden;
+        }
+        
+        .description {
+            font-size: 28upx;
+            color: #999;
+        }
+        
+        .list-title + .list-item {
+            border-top-left-radius: $uni-border-radius-base;
+            border-top-right-radius: $uni-border-radius-base;
+        }
+    }
+</style>

+ 41 - 0
components/content.vue

@@ -0,0 +1,41 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+        props: {
+        	posts: {
+        		type: [Number, String,Object],
+        		require: true
+        	},
+            manager: {
+            	type: [Number, String],
+            	default: 0
+            },
+        	sending: {
+        		type: Boolean,
+        		default: false
+        	},
+            no_add: {
+            	type: Boolean,
+            	default: false
+            },
+                     
+        },
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 330 - 0
components/gamelist.vue

@@ -0,0 +1,330 @@
+<template>
+	<view class="gameitem">
+	<view><view class="issue">{{item.issueNo}}期</view><view class="time">{{item.predictedTime}}</view></view>	
+    <view>
+        <view :class="ballclass" >
+            <block v-for="(m1,index1) in number" :key="index1"   >
+                <view class="ball" v-if="gametype=='ssc' || gametype=='ffc' || gametype=='11x5'" >{{m1}}</view>
+                <view :class="k3class(m1)" v-if="gametype=='k3'" ></view>
+                <view :class="pk10class(m1)" v-if="gametype=='pk10'" >{{m1}}</view>
+            </block>      
+             <view :class="SXclass" v-if="gametype=='ssc' || gametype=='ffc'" >组选{{SX}}</view>
+        </view> 
+    </view>
+	</view>
+</template>
+
+<script>
+	export default {
+        props: {
+            item: {
+                required: true
+            },
+            num:{
+                type: Number,
+                default: 1
+            },
+            isloading:{
+              type: Number,
+              default: 0  
+            }
+           
+        },
+        
+		data() {
+			return {
+			     number:'',
+                  gametype:"",
+                    SX:"24",
+                    SXclass:"zx"
+                   
+			}
+		},
+        computed:{
+            ballclass(){
+               if(this.item.isloading==1) {
+                   return "balls code_loading";
+               } 
+               else return 'balls';
+                
+            }
+        },
+		methods: {
+            k3class(num){
+              
+              return 'k3 num_'+num;  
+            },
+            pk10class(num){
+              
+              return 'pk10 num_'+num;  
+            },
+			showdata(){
+                  var ball='';
+                       this.gametype=this.item['gametype'];
+                       this.number=this.item['openCode'].split(',');
+                      if(this.gametype=='ffc' || this.gametype=='ssc') this.setsxnum();
+                 
+            },
+            setsxnum(){
+                var number=this.number.toString().split(',');
+              
+                var arr1=[];
+                for(var i=1;i<number.length;i++){
+                   var isin=0;
+                    if(i==1) arr1.push(number[i]);
+                    else{
+                        for(var j=0;j<arr1.length;j++){
+                            if(arr1[j]==number[i]){
+                               isin=1;
+                               break;
+                            }
+                        }
+                        if(isin==0) arr1.push(number[i]);
+                    }
+                }
+              
+              
+          
+                var len=arr1.length;
+               
+                if(len==4) this.SX='24';
+                    else if(len==3) this.SX=12;
+                    else if(len==2) {
+                        this.SX=6;
+                        for(var j=0;j<arr1.length;j++){
+                            var times=0;
+                           for(var i=1;i<number.length;i++){
+                              if(arr1[j]==number[i]){
+                                  times++;
+                                  if(times==3){
+                                      this.SX=4;
+                                  break;
+                                  }
+                              }
+                           }
+                        }
+                       
+                    }
+           if(this.SX>0){
+                         this.SXclass="zx zx"+this.SX;
+                     }
+            }
+		},
+        created() {
+            this.showdata(); 
+        },
+	}
+</script>
+
+<style>
+.gameitem{
+	    padding: 5px 15px;
+	    border-bottom:1px dashed #5250ae;
+	    background-color: #fff;
+	    font-size: 14px;
+	    clear: both;
+         display: inline-block;
+         width: calc(100% - 30px);
+         
+	
+	}
+	
+	 .gameitem >view{
+         width: 100%;
+	    clear: both;
+	}
+	 .gameitem >view:first-child{
+	    height: 25px;
+	    line-height: 25px;
+	}
+	 .gameitem .issue{
+         display: inline-block;
+	    font-size: 16px;
+	    color: #333;
+	    float: left;
+	}
+	
+	 .gameitem .time{
+          display: inline-block;
+	    font-size: 12px;
+	    color: #ccc;
+	    float: right;
+	}
+	.gameitem >view:nth-child(2){
+	    height: 40px;
+	    line-height: 40px;
+	
+	}
+    .gameitem .balls view{
+        display: inline-block;
+    }
+      .gameitem .balls .zx{
+          float: right;
+      }
+	 .gameitem .ball{
+	    display: inline-block;
+	    width: 28px;
+	    height: 28px;
+	    text-align: center;
+	    line-height: 28px;
+	    border-radius: 50%;
+	    background: -webkit-linear-gradient(#5250ae,#702dfe);
+	    background: -moz-linear-gradient(#262732,#702dfe);
+	    background: -o-linear-gradient(#5250ae,#702dfe);
+	    background: linear-gradient(#5250ae,#702dfe);
+	    margin-left: 20px;
+	    vertical-align: middle;
+	    color: #fff;
+	    font-size: 16px;
+	
+	}
+.zx24{
+    color: #872db1;
+}
+.zx12{
+    color: #4b87d0;
+}
+.zx6{
+    color: #409940;
+}
+.zx4{
+    color: #ed6e08;
+}
+.k3{
+    display: inline-block;
+    height: 30px;
+    width: 30px;
+    margin: 0px 5px;
+    background-size: 100% 100%;
+    vertical-align:middle ;
+}
+.balls .k3:first-child{
+ margin-left: 180upx;   
+}
+.k3.num_1{
+    background-image: url("../static/img/num-1.png");
+}
+.k3.num_2{
+    background-image: url("../static/img/num-2.png");
+}
+.k3.num_3{
+    background-image: url("../static/img/num-3.png");
+}
+.k3.num_4{
+    background-image: url("../static/img/num-4.png");
+}
+.k3.num_5{
+    background-image: url("../static/img/num-5.png");
+}
+.k3.num_6{
+    background-image: url("../static/img/num-6.png");
+}
+
+.pk10{
+    display: inline-block;
+    height: 25px;
+    width: 25px;
+    line-height: 25px;
+    margin: 0px 4px;
+    border-radius: 5px;
+    text-align: center;
+    color: #fff;
+}
+
+.pk10.num_01{
+    background-color: #e7df00;
+}
+.pk10.num_02{
+    background-color: #0093dd;
+}
+.pk10.num_03{
+    background-color: #4a4a4a;
+}
+.pk10.num_04{
+    background-color: #ff7600;
+}
+.pk10.num_05{
+    background-color: #16e3e5;
+}
+.pk10.num_06{
+    background-color: #5234ff;
+}
+.pk10.num_07{
+    background-color: #ff0066;
+}
+.pk10.num_08{
+    background-color: #ff2600;
+}
+.pk10.num_09{
+    background-color: #780a00;
+}
+.pk10{
+    background-color: #06bf00;
+}
+
+@keyframes issueBoxH {
+    0% {
+        transform: translateY(-39px); }
+    25% {
+        transform: translateY(20px); }
+    50% {
+        transform: translateY(-9px); }
+    75% {
+        transform: translateY(5px); }
+    100% {
+        transform: translateY(0); } }
+
+@-webkit-keyframes issueBoxH {
+    0% {
+        transform: translateY(-39px); }
+    25% {
+        transform: translateY(20px); }
+    50% {
+        transform: translateY(-9px); }
+    75% {
+        transform: translateY(5px); }
+    100% {
+        transform: translateY(0); } }
+
+
+.lotterylist .code_loading view:nth-child(1) {
+    animation: issueBoxH 0.6s forwards; }
+.lotterylist .code_loading view:nth-child(2) {
+    animation: issueBoxH 0.8s forwards; }
+.lotterylist .code_loading view:nth-child(3) {
+    animation: issueBoxH 1.0s forwards; }
+.lotterylist .code_loading view:nth-child(4) {
+    animation: issueBoxH 1.2s forwards; }
+.lotterylist .code_loading view:nth-child(5) {
+    animation: issueBoxH 1.4s forwards; }
+.lotterylist .code_loading view:nth-child(6) {
+    animation: issueBoxH 1.6s forwards; }
+.lotterylist .code_loading view:nth-child(7) {
+    animation: issueBoxH 1.8s forwards; }
+.lotterylist .code_loading view:nth-child(8) {
+    animation: issueBoxH 2s forwards; }
+.lotterylist .code_loading view:nth-child(9) {
+    animation: issueBoxH 2.1s forwards; }
+.lotterylist .code_loading view:nth-child(9) {
+    animation: issueBoxH 2.2s forwards; }
+.lotterylist .code_loading view:nth-child(10) {
+    animation: issueBoxH 2.3s forwards; }
+.lotterylist .code_loading view:nth-child(11) {
+    animation: issueBoxH 2.4s forwards; }
+.lotterylist .code_loading view:nth-child(12) {
+    animation: issueBoxH 2.5s forwards; }
+.lotterylist .code_loading view:nth-child(13) {
+    animation: issueBoxH 2.6s forwards; }
+.lotterylist .code_loading view:nth-child(14) {
+    animation: issueBoxH 2.7s forwards; }
+.lotterylist .code_loading view:nth-child(15) {
+    animation: issueBoxH 2.8s forwards; }
+.lotterylist .code_loading view:nth-child(16) {
+    animation: issueBoxH 2.9s forwards; }
+.lotterylist .code_loading view:nth-child(17) {
+    animation: issueBoxH 3s forwards; }
+.lotterylist .code_loading view:nth-child(18) {
+    animation: issueBoxH 3.1s forwards; }
+.lotterylist .code_loading view:nth-child(19) {
+    animation: issueBoxH 3.2s forwards; }
+</style>

+ 28 - 0
components/gaoyia-parse/components/wxParseAudio.vue

@@ -0,0 +1,28 @@
+<template>
+	<!-- '<audio/>' 组件不再维护,建议使用能力更强的 'uni.createInnerAudioContext' 接口 有时间再改-->
+  <!--增加audio标签支持-->
+  <audio
+    :id="node.attr.id"
+    :class="node.classStr"
+    :style="node.styleStr"
+    :src="node.attr.src"
+    :loop="node.attr.loop"
+    :poster="node.attr.poster"
+    :name="node.attr.name"
+    :author="node.attr.author"
+    controls></audio>
+</template>
+
+<script>
+export default {
+  name: 'wxParseAudio',
+  props: {
+    node: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+};
+</script>

+ 94 - 0
components/gaoyia-parse/components/wxParseImg.vue

@@ -0,0 +1,94 @@
+<template>
+	<image
+		:mode="node.attr.mode"
+		:lazy-load="node.attr.lazyLoad"
+		:class="node.classStr"
+		:style="newStyleStr || node.styleStr"
+		:data-src="node.attr.src"
+		:src="node.attr.src"
+		@tap="wxParseImgTap"
+		@load="wxParseImgLoad"
+	/>
+</template>
+
+<script>
+export default {
+	name: 'wxParseImg',
+	data() {
+		return {
+			newStyleStr: '',
+			preview: true
+		};
+	},
+	inject: ['parseWidth'],
+	mounted() {},
+	props: {
+		node: {
+			type: Object,
+			default() {
+				return {};
+			}
+		}
+	},
+	
+	methods: {
+		wxParseImgTap(e) {
+			if (!this.preview) return;
+			const { src } = e.currentTarget.dataset;
+			if (!src) return;
+			let parent = this.$parent;
+			while (!parent.preview || typeof parent.preview !== 'function') {
+				// TODO 遍历获取父节点执行方法
+				parent = parent.$parent;
+			}
+			parent.preview(src, e);
+		},
+		// 图片视觉宽高计算函数区
+		wxParseImgLoad(e) {
+			const { src } = e.currentTarget.dataset;
+			if (!src) return;
+			let { width, height } = e.mp.detail;
+
+			const recal = this.wxAutoImageCal(width, height);
+
+			const { imageheight, imageWidth } = recal;
+			const { padding, mode } = this.node.attr;//删除padding
+			// const { mode } = this.node.attr;
+
+			const { styleStr } = this.node;
+			const imageHeightStyle = mode === 'widthFix' ? '' : `height: ${imageheight}px;`;
+
+			this.newStyleStr = `${styleStr}; ${imageHeightStyle}; width: ${imageWidth}px; padding: 0 ${+padding}px;`;//删除padding
+			// this.newStyleStr = `${styleStr}; ${imageHeightStyle}; width: ${imageWidth}px;`;
+		},
+		// 计算视觉优先的图片宽高
+		wxAutoImageCal(originalWidth, originalHeight) {
+			// 获取图片的原始长宽
+			const windowWidth = this.parseWidth.value;
+			const results = {};
+
+			if (originalWidth < 60 || originalHeight < 60) {
+				const { src } = this.node.attr;
+				let parent = this.$parent;
+				while (!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.removeImageUrl(src);
+				this.preview = false;
+			}
+
+			// 判断按照那种方式进行缩放
+			if (originalWidth > windowWidth) {
+				// 在图片width大于手机屏幕width时候
+				results.imageWidth = windowWidth;
+				results.imageheight = windowWidth * (originalHeight / originalWidth);
+			} else {
+				// 否则展示原来的数据
+				results.imageWidth = originalWidth;
+				results.imageheight = originalHeight;
+			}
+			return results;
+		}
+	}
+};
+</script>

+ 55 - 0
components/gaoyia-parse/components/wxParseTable.vue

@@ -0,0 +1,55 @@
+<template>
+	<div class='tablebox'>
+		<rich-text :nodes="nodes" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
+	</div>
+</template>
+<script>
+export default {
+	name: 'wxParseTable',
+	props: {
+		node: {
+			type: Object,
+			default() {
+				return {};
+			},
+		},
+	},
+	inject: ['parseSelect'],
+	data() {
+		return {
+			nodes:[]
+		};
+	},
+	mounted() {
+		this.nodes=this.loadNode([this.node]);
+	},
+	methods: {
+		loadNode(node) {
+			let obj = [];
+			for (let children of node) {
+				if (children.node=='element') {
+					let t = {
+						name:children.tag,
+						attrs: {
+							class: children.classStr,
+							// style: children.styleStr,
+						},
+						children: children.nodes?this.loadNode(children.nodes):[]
+					}
+					
+					obj.push(t)
+				} else if(children.node=='text'){
+					obj.push({
+						type: 'text',
+						text: children.text
+					})
+				}
+			}
+			return obj
+		}
+	}
+};
+</script>
+<style>
+	@import url("../parse.css");
+</style>

+ 98 - 0
components/gaoyia-parse/components/wxParseTemplate0.vue

@@ -0,0 +1,98 @@
+<template>
+	<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node"/>
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	// #ifdef APP-PLUS | H5
+	import wxParseTemplate from './wxParseTemplate0';
+	// #endif
+	// #ifdef MP
+	import wxParseTemplate from './wxParseTemplate1';
+	// #endif
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+
+	export default {
+		// #ifdef APP-PLUS | H5
+		name: 'wxParseTemplate',
+		// #endif
+		// #ifdef MP
+		name: 'wxParseTemplate0',
+		// #endif
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;// TODO currentTarget才有dataset
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {// TODO 遍历获取父节点执行方法
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate1.vue

@@ -0,0 +1,88 @@
+<template>
+	<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate2';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate1',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate10.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate11';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate10',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 86 - 0
components/gaoyia-parse/components/wxParseTemplate11.vue

@@ -0,0 +1,86 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<rich-text :nodes="node" :class="node.classStr" :style="'user-select:' + parseSelect"></rich-text>
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate11',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate2.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate3';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate2',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate3.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate4';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate3',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate4.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate5';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate4',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate5.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate6';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate5',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate6.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate7';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate6',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate7.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate8';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate7',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate8.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate9';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate8',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 88 - 0
components/gaoyia-parse/components/wxParseTemplate9.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap(node.attr,$event)" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'" :style="node.styleStr"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text' ">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate10';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate9',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(attr,e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e, attr);
+			}
+		}
+	};
+</script>

+ 15 - 0
components/gaoyia-parse/components/wxParseVideo.vue

@@ -0,0 +1,15 @@
+<template>
+  <!--增加video标签支持,并循环添加-->
+  <view :class="node.classStr" :style="node.styleStr">
+    <video :class="node.classStr" :style="node.styleStr" class="video-video" :src="node.attr.src"></video>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'wxParseVideo',
+  props: {
+    node: {},
+  },
+};
+</script>

+ 261 - 0
components/gaoyia-parse/libs/html2json.js

@@ -0,0 +1,261 @@
+/**
+ * html2Json 改造来自: https://github.com/Jxck/html2json
+ *
+ *
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ *               垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+
+import wxDiscode from './wxDiscode';
+import HTMLParser from './htmlparser';
+
+function makeMap(str) {
+  const obj = {};
+  const items = str.split(',');
+  for (let i = 0; i < items.length; i += 1) obj[items[i]] = true;
+  return obj;
+}
+
+// Block Elements - HTML 5
+const block = makeMap('br,code,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video');
+
+// Inline Elements - HTML 5
+const inline = makeMap('a,abbr,acronym,applet,b,basefont,bdo,big,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var');
+
+// Elements that you can, intentionally, leave open
+// (and which close themselves)
+const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');
+
+function removeDOCTYPE(html) {
+  const isDocument = /<body.*>([^]*)<\/body>/.test(html);
+  return isDocument ? RegExp.$1 : html;
+}
+
+function trimHtml(html) {
+  return html
+    .replace(/<!--.*?-->/gi, '')
+    .replace(/\/\*.*?\*\//gi, '')
+    .replace(/[ ]+</gi, '<')
+    .replace(/<script[^]*<\/script>/gi, '')
+    .replace(/<style[^]*<\/style>/gi, '');
+}
+
+function getScreenInfo() {
+  const screen = {};
+  wx.getSystemInfo({
+    success: (res) => {
+      screen.width = res.windowWidth;
+      screen.height = res.windowHeight;
+    },
+  });
+  return screen;
+}
+
+function html2json(html, customHandler, imageProp, host) {
+  // 处理字符串
+  html = removeDOCTYPE(html);
+  html = trimHtml(html);
+  html = wxDiscode.strDiscode(html);
+  // 生成node节点
+  const bufArray = [];
+  const results = {
+    nodes: [],
+    imageUrls: [],
+  };
+
+	const screen = getScreenInfo();
+  function Node(tag) {
+    this.node = 'element';
+    this.tag = tag;
+		
+		this.$screen = screen;
+  }
+
+  HTMLParser(html, {
+    start(tag, attrs, unary) {
+      // node for this element
+      const node = new Node(tag);
+
+      if (bufArray.length !== 0) {
+        const parent = bufArray[0];
+        if (parent.nodes === undefined) {
+          parent.nodes = [];
+        }
+      }
+
+      if (block[tag]) {
+        node.tagType = 'block';
+      } else if (inline[tag]) {
+        node.tagType = 'inline';
+      } else if (closeSelf[tag]) {
+        node.tagType = 'closeSelf';
+      }
+
+      node.attr = attrs.reduce((pre, attr) => {
+        const { name } = attr;
+        let { value } = attr;
+        if (name === 'class') {
+          node.classStr = value;
+        }
+        // has multi attibutes
+        // make it array of attribute
+        if (name === 'style') {
+          node.styleStr = value;
+        }
+        if (value.match(/ /)) {
+          value = value.split(' ');
+        }
+
+        // if attr already exists
+        // merge it
+        if (pre[name]) {
+          if (Array.isArray(pre[name])) {
+            // already array, push to last
+            pre[name].push(value);
+          } else {
+            // single value, make it array
+            pre[name] = [pre[name], value];
+          }
+        } else {
+          // not exist, put it
+          pre[name] = value;
+        }
+
+        return pre;
+      }, {});
+
+      // 优化样式相关属性
+      if (node.classStr) {
+        node.classStr += ` ${node.tag}`;
+      } else {
+        node.classStr = node.tag;
+      }
+      if (node.tagType === 'inline') {
+        node.classStr += ' inline';
+      }
+
+      // 对img添加额外数据
+      if (node.tag === 'img') {
+        let imgUrl = node.attr.src;
+        imgUrl = wxDiscode.urlToHttpUrl(imgUrl, imageProp.domain);
+        Object.assign(node.attr, imageProp, {
+          src: imgUrl || '',
+        });
+        if (imgUrl) {
+          results.imageUrls.push(imgUrl);
+        }
+      }
+
+      // 处理a标签属性
+      if (node.tag === 'a') {
+        node.attr.href = node.attr.href || '';
+      }
+
+      // 处理font标签样式属性
+      if (node.tag === 'font') {
+        const fontSize = [
+          'x-small',
+          'small',
+          'medium',
+          'large',
+          'x-large',
+          'xx-large',
+          '-webkit-xxx-large',
+        ];
+        const styleAttrs = {
+          color: 'color',
+          face: 'font-family',
+          size: 'font-size',
+        };
+        if (!node.styleStr) node.styleStr = '';
+        Object.keys(styleAttrs).forEach((key) => {
+          if (node.attr[key]) {
+            const value = key === 'size' ? fontSize[node.attr[key] - 1] : node.attr[key];
+            node.styleStr += `${styleAttrs[key]}: ${value};`;
+          }
+        });
+      }
+
+      // 临时记录source资源
+      if (node.tag === 'source') {
+        results.source = node.attr.src;
+      }
+
+      if (customHandler.start) {
+        customHandler.start(node, results);
+      }
+
+      if (unary) {
+        // if this tag doesn't have end tag
+        // like <img src="hoge.png"/>
+        // add to parents
+        const parent = bufArray[0] || results;
+        if (parent.nodes === undefined) {
+          parent.nodes = [];
+        }
+        parent.nodes.push(node);
+      } else {
+        bufArray.unshift(node);
+      }
+    },
+    end(tag) {
+      // merge into parent tag
+      const node = bufArray.shift();
+      if (node.tag !== tag) {
+        console.error('invalid state: mismatch end tag');
+      }
+
+      // 当有缓存source资源时于于video补上src资源
+      if (node.tag === 'video' && results.source) {
+        node.attr.src = results.source;
+        delete results.source;
+      }
+
+      if (customHandler.end) {
+        customHandler.end(node, results);
+      }
+
+      if (bufArray.length === 0) {
+        results.nodes.push(node);
+      } else {
+        const parent = bufArray[0];
+        if (!parent.nodes) {
+          parent.nodes = [];
+        }
+        parent.nodes.push(node);
+      }
+    },
+    chars(text) {
+      if (!text.trim()) return;
+
+      const node = {
+        node: 'text',
+        text,
+      };
+
+      if (customHandler.chars) {
+        customHandler.chars(node, results);
+      }
+
+      if (bufArray.length === 0) {
+        results.nodes.push(node);
+      } else {
+        const parent = bufArray[0];
+        if (parent.nodes === undefined) {
+          parent.nodes = [];
+        }
+        parent.nodes.push(node);
+      }
+    },
+  });
+
+  return results;
+}
+
+export default html2json;

+ 156 - 0
components/gaoyia-parse/libs/htmlparser.js

@@ -0,0 +1,156 @@
+/**
+ *
+ * htmlParser改造自: https://github.com/blowsie/Pure-JavaScript-HTML5-Parser
+ *
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ *               垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+// Regular Expressions for parsing tags and attributes
+
+const startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z0-9_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/;
+const endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/;
+const attr = /([a-zA-Z0-9_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;
+
+function makeMap(str) {
+  const obj = {};
+  const items = str.split(',');
+  for (let i = 0; i < items.length; i += 1) obj[items[i]] = true;
+  return obj;
+}
+
+// Empty Elements - HTML 5
+const empty = makeMap('area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr');
+
+// Block Elements - HTML 5
+const block = makeMap('address,code,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video');
+
+// Inline Elements - HTML 5
+const inline = makeMap('a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var');
+
+// Elements that you can, intentionally, leave open
+// (and which close themselves)
+const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');
+
+// Attributes that have their values filled in disabled="disabled"
+const fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected');
+
+function HTMLParser(html, handler) {
+  let index;
+  let chars;
+  let match;
+  let last = html;
+  const stack = [];
+
+  stack.last = () => stack[stack.length - 1];
+
+  function parseEndTag(tag, tagName) {
+    // If no tag name is provided, clean shop
+    let pos;
+    if (!tagName) {
+      pos = 0;
+    } else {
+      // Find the closest opened tag of the same type
+      tagName = tagName.toLowerCase();
+      for (pos = stack.length - 1; pos >= 0; pos -= 1) {
+        if (stack[pos] === tagName) break;
+      }
+    }
+    if (pos >= 0) {
+      // Close all the open elements, up the stack
+      for (let i = stack.length - 1; i >= pos; i -= 1) {
+        if (handler.end) handler.end(stack[i]);
+      }
+
+      // Remove the open elements from the stack
+      stack.length = pos;
+    }
+  }
+
+  function parseStartTag(tag, tagName, rest, unary) {
+    tagName = tagName.toLowerCase();
+
+    if (block[tagName]) {
+      while (stack.last() && inline[stack.last()]) {
+        parseEndTag('', stack.last());
+      }
+    }
+
+    if (closeSelf[tagName] && stack.last() === tagName) {
+      parseEndTag('', tagName);
+    }
+
+    unary = empty[tagName] || !!unary;
+
+    if (!unary) stack.push(tagName);
+
+    if (handler.start) {
+      const attrs = [];
+
+      rest.replace(attr, function genAttr(matches, name) {
+        const value = arguments[2] || arguments[3] || arguments[4] || (fillAttrs[name] ? name : '');
+
+        attrs.push({
+          name,
+          value,
+          escaped: value.replace(/(^|[^\\])"/g, '$1\\"'), // "
+        });
+      });
+
+      if (handler.start) {
+        handler.start(tagName, attrs, unary);
+      }
+    }
+  }
+
+  while (html) {
+    chars = true;
+
+    if (html.indexOf('</') === 0) {
+      match = html.match(endTag);
+
+      if (match) {
+        html = html.substring(match[0].length);
+        match[0].replace(endTag, parseEndTag);
+        chars = false;
+      }
+
+      // start tag
+    } else if (html.indexOf('<') === 0) {
+      match = html.match(startTag);
+
+      if (match) {
+        html = html.substring(match[0].length);
+        match[0].replace(startTag, parseStartTag);
+        chars = false;
+      }
+    }
+
+    if (chars) {
+      index = html.indexOf('<');
+      let text = '';
+      while (index === 0) {
+        text += '<';
+        html = html.substring(1);
+        index = html.indexOf('<');
+      }
+      text += index < 0 ? html : html.substring(0, index);
+      html = index < 0 ? '' : html.substring(index);
+
+      if (handler.chars) handler.chars(text);
+    }
+
+    if (html === last) throw new Error(`Parse Error: ${html}`);
+    last = html;
+  }
+
+  // Clean up any remaining tags
+  parseEndTag();
+}
+
+export default HTMLParser;

+ 209 - 0
components/gaoyia-parse/libs/wxDiscode.js

@@ -0,0 +1,209 @@
+// HTML 支持的数学符号
+function strNumDiscode(str) {
+str = str.replace(/&forall;|&#8704;|&#x2200;/g, '∀');
+str = str.replace(/&part;|&#8706;|&#x2202;/g, '∂');
+str = str.replace(/&exist;|&#8707;|&#x2203;/g, '∃');
+str = str.replace(/&empty;|&#8709;|&#x2205;/g, '∅');
+str = str.replace(/&nabla;|&#8711;|&#x2207;/g, '∇');
+str = str.replace(/&isin;|&#8712;|&#x2208;/g, '∈');
+str = str.replace(/&notin;|&#8713;|&#x2209;/g, '∉');
+str = str.replace(/&ni;|&#8715;|&#x220b;/g, '∋');
+str = str.replace(/&prod;|&#8719;|&#x220f;/g, '∏');
+str = str.replace(/&sum;|&#8721;|&#x2211;/g, '∑');
+str = str.replace(/&minus;|&#8722;|&#x2212;/g, '−');
+str = str.replace(/&lowast;|&#8727;|&#x2217;/g, '∗');
+str = str.replace(/&radic;|&#8730;|&#x221a;/g, '√');
+str = str.replace(/&prop;|&#8733;|&#x221d;/g, '∝');
+str = str.replace(/&infin;|&#8734;|&#x221e;/g, '∞');
+str = str.replace(/&ang;|&#8736;|&#x2220;/g, '∠');
+str = str.replace(/&and;|&#8743;|&#x2227;/g, '∧');
+str = str.replace(/&or;|&#8744;|&#x2228;/g, '∨');
+str = str.replace(/&cap;|&#8745;|&#x2229;/g, '∩');
+str = str.replace(/&cup;|&#8746;|&#x222a;/g, '∪');
+str = str.replace(/&int;|&#8747;|&#x222b;/g, '∫');
+str = str.replace(/&there4;|&#8756;|&#x2234;/g, '∴');
+str = str.replace(/&sim;|&#8764;|&#x223c;/g, '∼');
+str = str.replace(/&cong;|&#8773;|&#x2245;/g, '≅');
+str = str.replace(/&asymp;|&#8776;|&#x2248;/g, '≈');
+str = str.replace(/&ne;|&#8800;|&#x2260;/g, '≠');
+str = str.replace(/&le;|&#8804;|&#x2264;/g, '≤');
+str = str.replace(/&ge;|&#8805;|&#x2265;/g, '≥');
+str = str.replace(/&sub;|&#8834;|&#x2282;/g, '⊂');
+str = str.replace(/&sup;|&#8835;|&#x2283;/g, '⊃');
+str = str.replace(/&nsub;|&#8836;|&#x2284;/g, '⊄');
+str = str.replace(/&sube;|&#8838;|&#x2286;/g, '⊆');
+str = str.replace(/&supe;|&#8839;|&#x2287;/g, '⊇');
+str = str.replace(/&oplus;|&#8853;|&#x2295;/g, '⊕');
+str = str.replace(/&otimes;|&#8855;|&#x2297;/g, '⊗');
+str = str.replace(/&perp;|&#8869;|&#x22a5;/g, '⊥');
+str = str.replace(/&sdot;|&#8901;|&#x22c5;/g, '⋅');
+return str;
+}
+
+// HTML 支持的希腊字母
+function strGreeceDiscode(str) {
+str = str.replace(/&Alpha;|&#913;|&#x391;/g, 'Α');
+str = str.replace(/&Beta;|&#914;|&#x392;/g, 'Β');
+str = str.replace(/&Gamma;|&#915;|&#x393;/g, 'Γ');
+str = str.replace(/&Delta;|&#916;|&#x394;/g, 'Δ');
+str = str.replace(/&Epsilon;|&#917;|&#x395;/g, 'Ε');
+str = str.replace(/&Zeta;|&#918;|&#x396;/g, 'Ζ');
+str = str.replace(/&Eta;|&#919;|&#x397;/g, 'Η');
+str = str.replace(/&Theta;|&#920;|&#x398;/g, 'Θ');
+str = str.replace(/&Iota;|&#921;|&#x399;/g, 'Ι');
+str = str.replace(/&Kappa;|&#922;|&#x39a;/g, 'Κ');
+str = str.replace(/&Lambda;|&#923;|&#x39b;/g, 'Λ');
+str = str.replace(/&Mu;|&#924;|&#x39c;/g, 'Μ');
+str = str.replace(/&Nu;|&#925;|&#x39d;/g, 'Ν');
+str = str.replace(/&Xi;|&#925;|&#x39d;/g, 'Ν');
+str = str.replace(/&Omicron;|&#927;|&#x39f;/g, 'Ο');
+str = str.replace(/&Pi;|&#928;|&#x3a0;/g, 'Π');
+str = str.replace(/&Rho;|&#929;|&#x3a1;/g, 'Ρ');
+str = str.replace(/&Sigma;|&#931;|&#x3a3;/g, 'Σ');
+str = str.replace(/&Tau;|&#932;|&#x3a4;/g, 'Τ');
+str = str.replace(/&Upsilon;|&#933;|&#x3a5;/g, 'Υ');
+str = str.replace(/&Phi;|&#934;|&#x3a6;/g, 'Φ');
+str = str.replace(/&Chi;|&#935;|&#x3a7;/g, 'Χ');
+str = str.replace(/&Psi;|&#936;|&#x3a8;/g, 'Ψ');
+str = str.replace(/&Omega;|&#937;|&#x3a9;/g, 'Ω');
+
+str = str.replace(/&alpha;|&#945;|&#x3b1;/g, 'α');
+str = str.replace(/&beta;|&#946;|&#x3b2;/g, 'β');
+str = str.replace(/&gamma;|&#947;|&#x3b3;/g, 'γ');
+str = str.replace(/&delta;|&#948;|&#x3b4;/g, 'δ');
+str = str.replace(/&epsilon;|&#949;|&#x3b5;/g, 'ε');
+str = str.replace(/&zeta;|&#950;|&#x3b6;/g, 'ζ');
+str = str.replace(/&eta;|&#951;|&#x3b7;/g, 'η');
+str = str.replace(/&theta;|&#952;|&#x3b8;/g, 'θ');
+str = str.replace(/&iota;|&#953;|&#x3b9;/g, 'ι');
+str = str.replace(/&kappa;|&#954;|&#x3ba;/g, 'κ');
+str = str.replace(/&lambda;|&#955;|&#x3bb;/g, 'λ');
+str = str.replace(/&mu;|&#956;|&#x3bc;/g, 'μ');
+str = str.replace(/&nu;|&#957;|&#x3bd;/g, 'ν');
+str = str.replace(/&xi;|&#958;|&#x3be;/g, 'ξ');
+str = str.replace(/&omicron;|&#959;|&#x3bf;/g, 'ο');
+str = str.replace(/&pi;|&#960;|&#x3c0;/g, 'π');
+str = str.replace(/&rho;|&#961;|&#x3c1;/g, 'ρ');
+str = str.replace(/&sigmaf;|&#962;|&#x3c2;/g, 'ς');
+str = str.replace(/&sigma;|&#963;|&#x3c3;/g, 'σ');
+str = str.replace(/&tau;|&#964;|&#x3c4;/g, 'τ');
+str = str.replace(/&upsilon;|&#965;|&#x3c5;/g, 'υ');
+str = str.replace(/&phi;|&#966;|&#x3c6;/g, 'φ');
+str = str.replace(/&chi;|&#967;|&#x3c7;/g, 'χ');
+str = str.replace(/&psi;|&#968;|&#x3c8;/g, 'ψ');
+str = str.replace(/&omega;|&#969;|&#x3c9;/g, 'ω');
+str = str.replace(/&thetasym;|&#977;|&#x3d1;/g, 'ϑ');
+str = str.replace(/&upsih;|&#978;|&#x3d2;/g, 'ϒ');
+str = str.replace(/&piv;|&#982;|&#x3d6;/g, 'ϖ');
+str = str.replace(/&middot;|&#183;|&#xb7;/g, '·');
+return str;
+}
+
+function strcharacterDiscode(str) {
+// 加入常用解析
+
+// str = str.replace(/&nbsp;|&#32;|&#x20;/g, "&nbsp;");
+// str = str.replace(/&ensp;|&#8194;|&#x2002;/g, '&ensp;');
+// str = str.replace(/&#12288;|&#x3000;/g, '<span class=\'spaceshow\'> </span>');
+// str = str.replace(/&emsp;|&#8195;|&#x2003;/g, '&emsp;');
+// str = str.replace(/&quot;|&#34;|&#x22;/g, "\"");
+// str = str.replace(/&apos;|&#39;|&#x27;/g, "&apos;");
+// str = str.replace(/&acute;|&#180;|&#xB4;/g, "´");
+// str = str.replace(/&times;|&#215;|&#xD7;/g, "×");
+// str = str.replace(/&divide;|&#247;|&#xF7;/g, "÷");
+// str = str.replace(/&amp;|&#38;|&#x26;/g, '&amp;');
+// str = str.replace(/&lt;|&#60;|&#x3c;/g, '&lt;');
+// str = str.replace(/&gt;|&#62;|&#x3e;/g, '&gt;');
+
+
+
+
+str = str.replace(/&nbsp;|&#32;|&#x20;/g, "<span class='spaceshow'> </span>");
+str = str.replace(/&ensp;|&#8194;|&#x2002;/g, '<span class=\'spaceshow\'> </span>');
+str = str.replace(/&#12288;|&#x3000;/g, '<span class=\'spaceshow\'> </span>');
+str = str.replace(/&emsp;|&#8195;|&#x2003;/g, '<span class=\'spaceshow\'> </span>');
+str = str.replace(/&quot;|&#34;|&#x22;/g, "\"");
+str = str.replace(/&quot;|&#39;|&#x27;/g, "'");
+str = str.replace(/&acute;|&#180;|&#xB4;/g, "´");
+str = str.replace(/&times;|&#215;|&#xD7;/g, "×");
+str = str.replace(/&divide;|&#247;|&#xF7;/g, "÷");
+str = str.replace(/&amp;|&#38;|&#x26;/g, '&');
+str = str.replace(/&lt;|&#60;|&#x3c;/g, '<');
+str = str.replace(/&gt;|&#62;|&#x3e;/g, '>');
+return str;
+}
+
+// HTML 支持的其他实体
+function strOtherDiscode(str) {
+str = str.replace(/&OElig;|&#338;|&#x152;/g, 'Œ');
+str = str.replace(/&oelig;|&#339;|&#x153;/g, 'œ');
+str = str.replace(/&Scaron;|&#352;|&#x160;/g, 'Š');
+str = str.replace(/&scaron;|&#353;|&#x161;/g, 'š');
+str = str.replace(/&Yuml;|&#376;|&#x178;/g, 'Ÿ');
+str = str.replace(/&fnof;|&#402;|&#x192;/g, 'ƒ');
+str = str.replace(/&circ;|&#710;|&#x2c6;/g, 'ˆ');
+str = str.replace(/&tilde;|&#732;|&#x2dc;/g, '˜');
+str = str.replace(/&thinsp;|$#8201;|&#x2009;/g, '<span class=\'spaceshow\'> </span>');
+str = str.replace(/&zwnj;|&#8204;|&#x200C;/g, '<span class=\'spaceshow\'>‌</span>');
+str = str.replace(/&zwj;|$#8205;|&#x200D;/g, '<span class=\'spaceshow\'>‍</span>');
+str = str.replace(/&lrm;|$#8206;|&#x200E;/g, '<span class=\'spaceshow\'>‎</span>');
+str = str.replace(/&rlm;|&#8207;|&#x200F;/g, '<span class=\'spaceshow\'>‏</span>');
+str = str.replace(/&ndash;|&#8211;|&#x2013;/g, '–');
+str = str.replace(/&mdash;|&#8212;|&#x2014;/g, '—');
+str = str.replace(/&lsquo;|&#8216;|&#x2018;/g, '‘');
+str = str.replace(/&rsquo;|&#8217;|&#x2019;/g, '’');
+str = str.replace(/&sbquo;|&#8218;|&#x201a;/g, '‚');
+str = str.replace(/&ldquo;|&#8220;|&#x201c;/g, '“');
+str = str.replace(/&rdquo;|&#8221;|&#x201d;/g, '”');
+str = str.replace(/&bdquo;|&#8222;|&#x201e;/g, '„');
+str = str.replace(/&dagger;|&#8224;|&#x2020;/g, '†');
+str = str.replace(/&Dagger;|&#8225;|&#x2021;/g, '‡');
+str = str.replace(/&bull;|&#8226;|&#x2022;/g, '•');
+str = str.replace(/&hellip;|&#8230;|&#x2026;/g, '…');
+str = str.replace(/&permil;|&#8240;|&#x2030;/g, '‰');
+str = str.replace(/&prime;|&#8242;|&#x2032;/g, '′');
+str = str.replace(/&Prime;|&#8243;|&#x2033;/g, '″');
+str = str.replace(/&lsaquo;|&#8249;|&#x2039;/g, '‹');
+str = str.replace(/&rsaquo;|&#8250;|&#x203a;/g, '›');
+str = str.replace(/&oline;|&#8254;|&#x203e;/g, '‾');
+str = str.replace(/&euro;|&#8364;|&#x20ac;/g, '€');
+str = str.replace(/&trade;|&#8482;|&#x2122;/g, '™');
+str = str.replace(/&larr;|&#8592;|&#x2190;/g, '←');
+str = str.replace(/&uarr;|&#8593;|&#x2191;/g, '↑');
+str = str.replace(/&rarr;|&#8594;|&#x2192;/g, '→');
+str = str.replace(/&darr;|&#8595;|&#x2193;/g, '↓');
+str = str.replace(/&harr;|&#8596;|&#x2194;/g, '↔');
+str = str.replace(/&crarr;|&#8629;|&#x21b5;/g, '↵');
+str = str.replace(/&lceil;|&#8968;|&#x2308;/g, '⌈');
+str = str.replace(/&rceil;|&#8969;|&#x2309;/g, '⌉');
+str = str.replace(/&lfloor;|&#8970;|&#x230a;/g, '⌊');
+str = str.replace(/&rfloor;|&#8971;|&#x230b;/g, '⌋');
+str = str.replace(/&loz;|&#9674;|&#x25ca;/g, '◊');
+str = str.replace(/&spades;|&#9824;|&#x2660;/g, '♠');
+str = str.replace(/&clubs;|&#9827;|&#x2663;/g, '♣');
+str = str.replace(/&hearts;|&#9829;|&#x2665;/g, '♥');
+str = str.replace(/&diams;|&#9830;|&#x2666;/g, '♦');
+return str;
+}
+
+function strDiscode(str) {
+  str = strNumDiscode(str);
+  str = strGreeceDiscode(str);
+  str = strcharacterDiscode(str);
+  str = strOtherDiscode(str);
+  return str;
+}
+
+function urlToHttpUrl(url, domain) {
+  if (/^\/\//.test(url)) {
+    return `https:${url}`;
+  } else if (/^\//.test(url)) {
+    return `https://${domain}${url}`;
+  }
+  return url;
+}
+
+export default {
+  strDiscode,
+  urlToHttpUrl,
+};

+ 258 - 0
components/gaoyia-parse/parse.css

@@ -0,0 +1,258 @@
+/**
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ *         垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+/**
+ * 请在全局下引入该文件,@import '/static/wxParse.css';
+ */
+.wxParse {
+	user-select:none;
+	width: 100%;
+	font-family: Helvetica, "PingFangSC", 'Microsoft Yahei', '微软雅黑', Arial, sans-serif;
+	color: #333;
+	line-height: 1.5;
+	font-size: 1em;
+	text-align:justify;/* //左右两端对齐 */
+}
+.wxParse view ,.wxParse uni-view{
+	word-break: break-word;
+}
+.wxParse .p {
+	padding-bottom: 0.5em;
+	clear: both;
+	/* letter-spacing: 0;//字间距 */
+}
+.wxParse .inline {
+  display: inline;
+  margin: 0;
+  padding: 0;
+}
+
+.wxParse .div {
+  margin: 0;
+  padding: 0;
+  display: block;
+}
+
+.wxParse .h1{
+  font-size: 2em;
+  line-height: 1.2em;
+  margin: 0.67em 0;
+}
+.wxParse .h2{
+  font-size: 1.5em;
+  margin: 0.83em 0;
+}
+.wxParse .h3{
+  font-size: 1.17em;
+  margin: 1em 0;
+}
+.wxParse .h4{
+  margin: 1.33em 0;
+}
+.wxParse .h5{
+  font-size: 0.83em;
+  margin: 1.67em 0;
+}
+.wxParse .h6{
+  font-size: 0.83em;
+  margin: 1.67em 0;
+}
+
+.wxParse .h1,
+.wxParse .h2,
+.wxParse .h3,
+.wxParse .h4,
+.wxParse .h5,
+.wxParse .h6,
+.wxParse .b,
+.wxParse .strong{
+  font-weight: bolder;
+}
+
+.wxParse .i,
+.wxParse .cite,
+.wxParse .em,
+.wxParse .var,
+.wxParse .address {
+  font-style: italic;
+}
+.wxParse .spaceshow{
+	  white-space: pre;
+}
+.wxParse .pre,
+.wxParse .tt,
+.wxParse .code,
+.wxParse .kbd,
+.wxParse .samp {
+  font-family: monospace;
+}
+.wxParse .pre {
+  overflow: auto;
+  background: #f5f5f5;
+  padding: 16upx;
+  white-space: pre;
+  margin: 1em 0upx;
+  font-size: 24upx;
+}
+.wxParse .code {
+	overflow: auto;
+	padding: 16upx;
+	white-space: pre;
+	margin: 1em 0upx;
+	background: #f5f5f5;
+	font-size: 24upx;
+}
+
+.wxParse .big {
+  font-size: 1.17em;
+}
+
+.wxParse .small,
+.wxParse .sub,
+.wxParse .sup {
+  font-size: 0.83em;
+}
+
+.wxParse .sub {
+  vertical-align: sub;
+}
+.wxParse .sup {
+  vertical-align: super;
+}
+
+.wxParse .s,
+.wxParse .strike,
+.wxParse .del {
+  text-decoration: line-through;
+}
+
+.wxParse .strong,
+.wxParse .text,
+.wxParse .span,
+.wxParse .s {
+  display: inline;
+}
+
+.wxParse .a {
+  color: deepskyblue;
+}
+
+.wxParse .video {
+  text-align: center;
+  margin: 22upx 0;
+}
+
+.wxParse .video-video {
+  width: 100%;
+}
+.wxParse .uni-image{
+	max-width: 100%;
+}
+.wxParse .img {
+  display: block;
+  max-width: 100%;
+  margin-bottom: 0em;/* //与p标签底部padding同时修改 */
+  overflow: hidden;
+}
+
+.wxParse .blockquote {
+  margin: 10upx 0;
+  padding: 22upx 0 22upx 22upx;
+  font-family: Courier, Calibri, "宋体";
+  background: #f5f5f5;
+  border-left: 6upx solid #dbdbdb;
+}
+.wxParse .blockquote .p {
+  margin: 0;
+}
+.wxParse .ul, .wxParse .ol {
+  display: block;
+  margin: 1em 0;
+  padding-left: 2em;
+}
+.wxParse .ol {
+  list-style-type: disc;
+}
+.wxParse .ol {
+  list-style-type: decimal;
+}
+.wxParse .ol>weixin-parse-template,.wxParse .ul>weixin-parse-template {
+  display: list-item;
+  align-items: baseline;
+  text-align: match-parent;
+}
+
+.wxParse .ol>.li,.wxParse .ul>.li {
+  display: list-item;
+  align-items: baseline;
+  text-align: match-parent;
+}
+.wxParse .ul .ul, .wxParse .ol .ul {
+  list-style-type: circle;
+}
+.wxParse .ol .ol .ul, .wxParse .ol .ul .ul, .wxParse .ul .ol .ul, .wxParse .ul .ul .ul {
+    list-style-type: square;
+}
+
+.wxParse .u {
+  text-decoration: underline;
+}
+.wxParse .hide {
+  display: none;
+}
+.wxParse .del {
+  display: inline;
+}
+.wxParse .figure {
+  overflow: hidden;
+}
+.wxParse .tablebox{
+	overflow: auto;
+	background-color: #f5f5f5;
+	background: #f5f5f5;
+	font-size: 13px;
+	padding: 8px;
+}
+.wxParse .table .table,.wxParse .table{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	/* 内边框 */
+	/* width: 100%; */
+	overflow: auto;
+	white-space: pre;
+}
+.wxParse .tbody{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	/* 内边框 */
+	border: 1px solid #dadada;
+}
+.wxParse .table  .thead, .wxParse  .table .tfoot, .wxParse  .table .th{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	background: #ececec;
+	font-weight: 40;
+}
+.wxParse  .table .tr {
+	border-collapse:collapse;
+	box-sizing: border-box;
+	/* border: 2px solid #F0AD4E; */
+	overflow:auto;
+}
+.wxParse  .table .th,
+.wxParse  .table .td{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	border: 2upx solid #dadada;
+	overflow:auto;
+}
+.wxParse .audio, .wxParse .uni-audio-default{
+	display: block;
+}

+ 228 - 0
components/gaoyia-parse/parse.vue

@@ -0,0 +1,228 @@
+<!--**
+ * forked from:https://github.com/F-loat/mpvue-wxParse
+ *
+ * github地址: https://github.com/dcloudio/uParse
+ *
+ * for: uni-app框架下 富文本解析
+ * 
+ * 优化 by gaoyia@qq.com  https://github.com/gaoyia/parse
+ */-->
+
+<template>
+	
+	<!--基础元素-->
+	<div class="wxParse" :class="className" :style="'user-select:' + userSelect">
+		<block v-for="(node, index) of nodes" :key="index" v-if="!loading">
+			<wxParseTemplate :node="node" />
+		</block>
+	</div>
+</template>
+
+<script>
+import HtmlToJson from './libs/html2json';
+import wxParseTemplate from './components/wxParseTemplate0';
+
+	
+	export default {
+		name: 'wxParse',
+		props: {
+			// user-select:none;
+			userSelect: {
+				type: String,
+				default: 'text' //none |text| all | element
+			},
+			imgOptions: {
+				type: [Object, Boolean],
+				default: function() {
+					return {
+						loop: false,
+						indicator: 'number',
+						longPressActions: false
+						// longPressActions: {
+						// 	 itemList: ['发送给朋友', '保存图片', '收藏'],
+						// 		success: function (res) {
+						// 			console.log('选中了第' + (res.tapIndex + 1) + '个按钮');
+						// 		},
+						// 		fail: function (res) {
+						// 			console.log(res.errMsg);
+						// 		}    
+						// 	}
+						// }
+					}
+				}
+			},
+			loading: {
+				type: Boolean,
+				default: false
+			},
+			className: {
+				type: String,
+				default: ''
+			},
+			content: {
+				type: String,
+				default: ''
+			},
+			noData: {
+				type: String,
+				default: '<div style="color: red;">数据不能为空</div>'
+			},
+			startHandler: {
+				type: Function,
+				default () {
+					return node => {
+						node.attr.class = null;
+						node.attr.style = null;
+					};
+				}
+			},
+			endHandler: {
+				type: Function,
+				default: null
+			},
+			charsHandler: {
+				type: Function,
+				default: null
+			},
+			imageProp: {
+				type: Object,
+				default () {
+					return {
+						mode: 'aspectFit',
+						padding: 0,
+						lazyLoad: false,
+						domain: ''
+					};
+				}
+			}
+		},
+		components: {
+			wxParseTemplate
+		},
+		data() {
+			return {
+				nodes: {},
+				imageUrls: [],
+				wxParseWidth: {
+					value: 0
+				}
+			};
+		},
+		computed: {},
+		mounted() {
+			this.setHtml()
+		},
+		methods: {
+			setHtml() {
+				this.getWidth().then((data) => {
+					this.wxParseWidth.value = data;
+				})
+				let {
+					content,
+					noData,
+					imageProp,
+					startHandler,
+					endHandler,
+					charsHandler
+				} = this;
+				let parseData = content || noData;
+				let customHandler = {
+					start: startHandler,
+					end: endHandler,
+					chars: charsHandler
+				};
+				let results = HtmlToJson(parseData, customHandler, imageProp, this);
+
+				this.imageUrls = results.imageUrls;
+				// this.nodes = results.nodes;
+				
+				
+				this.nodes = [];
+				results.nodes.forEach((item) => {
+					setTimeout(() => {
+						this.nodes.push(item)
+					}, 0);
+				})
+			},
+			getWidth() {
+				return new Promise((res, rej) => {
+					// #ifndef MP-ALIPAY || MP-BAIDU
+					uni.createSelectorQuery()
+						.in(this)
+						.select('.wxParse')
+						.fields({
+								size: true,
+								scrollOffset: true
+							},
+							data => {
+								res(data.width);
+							}
+						).exec();
+					// #endif
+					// #ifdef MP-BAIDU
+					const query = swan.createSelectorQuery();
+					query.select('.wxParse').boundingClientRect();
+					query.exec(obj => {
+						const rect = obj[0]
+						if (rect) {
+							res(rect.width);
+						}
+					});
+					// #endif
+					// #ifdef MP-ALIPAY
+					my.createSelectorQuery()
+						.select('.wxParse')
+						.boundingClientRect().exec((ret) => {
+							res(ret[0].width);
+						});
+					// #endif
+				});
+			},
+			navigate(href, $event, attr) {
+				console.log(href, attr);
+				this.$emit('navigate', href, $event);
+			},
+			preview(src, $event) {
+				if (!this.imageUrls.length || typeof this.imgOptions === 'boolean') {
+
+				} else {
+					uni.previewImage({
+						current: src,
+						urls: this.imageUrls,
+						loop: this.imgOptions.loop,
+						indicator: this.imgOptions.indicator,
+						longPressActions: this.imgOptions.longPressActions
+					});
+				}
+				this.$emit('preview', src, $event);
+			},
+			removeImageUrl(src) {
+				const {
+					imageUrls
+				} = this;
+				imageUrls.splice(imageUrls.indexOf(src), 1);
+			}
+		},
+		// 父组件中提供
+		provide() {
+			return {
+				parseWidth: this.wxParseWidth,
+				parseSelect: this.userSelect
+				// 提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。
+			};
+		},
+		watch: {
+			content(){
+				this.setHtml()
+			}
+			// content: {
+			// 	handler: function(newVal, oldVal) {
+			// 		if (newVal !== oldVal) {
+			// 			
+			// 		}
+			// 	},
+			// 	deep: true
+			// }
+		}
+	};
+</script>

+ 384 - 0
components/get-redpick.vue

@@ -0,0 +1,384 @@
+<template>
+	<view>
+		<view class="mask">
+		<view class="redpick-close" @click="closeMask">
+			<image src="../static/close.png" mode="widthFix"></image>
+		</view>
+			<view class="bag" >
+               
+                    <view class="redpick-info">
+                    	<view class="redpick-info-avatar">
+                    		<view >
+                                <image :src="image_cache(item.sender.avatar)" style="border-radius: 12upx;" />
+                               <view class="redpick-info-nickname">{{item.sender.nickname}}</view> 
+                                  <view class="redpick-info-nickname">的红包</view> 
+                             </view>
+                    		
+                    	</view>
+                    	<view class="redpick-info-title" >
+                            <block v-if="isopen==0">
+                               	{{item.message.content.title || '恭喜发财,大吉大利'}} 
+                               
+                            </block>
+                            <block v-else>
+                                <view v-if="money>0" class="money">
+                                 <span style='font-size: 16px;'>¥</span><span style='font-size: 52px;font-weight: 600;'>{{money}}</span>
+                                </view>
+                                <block v-else>
+                                    手慢了,红包派完了
+                                    
+                                </block>
+                            </block>
+                    	
+                    	</view>
+                    </view>
+                    
+                    <view v-if="isopen==0" :class="{'stick':true,'opening':opening}" @click="goDetail" >
+                    	<span class="rmb">開</span>
+                    </view>
+                    <view v-else class="error-text" @tap="opendetail()">
+                    	看看大家的手气
+                    </view>
+                    
+                 
+			</view>
+            
+            
+            
+			
+		</view>
+	</view>
+</template>
+<script>
+    import http from "../library/http.js"
+	export default {
+		data() {
+			return {
+				user: uni.getStorageSync('userInfo'),
+                status:1,
+                opening:false,
+                timer:null,
+                isopen:false,
+                isget:false,
+                msg:'',
+                money:0,
+                id:0,
+			}
+		},
+		props: {
+            item:{
+                
+            },
+			
+		},
+		methods: {
+			closeMask() {
+				this.$emit('closePick')
+			},
+			goDetail() {
+                
+                if(this.user.banknum<1){
+                    uni.showModal({
+                    	title: '提示',
+                    	content: "绑定银行卡后才可以枪红包",
+                    	showCancel: true,
+                    	cancelText: '关闭',
+                    	confirmText: '立即绑定',
+                    	success: res => { 
+                    		if(res.confirm) {
+                              uni.navigateTo({
+                                url:"/pages/mine/bank" 
+                              })
+                    		}
+                    	}
+                    });  
+                    return  false;
+                }
+				this.opening=true;
+                var that=this;
+                clearInterval(this.timer)
+              this.timer=  setInterval(function(){
+                 that.opening=!that.opening;
+                    
+                },500)
+                
+          
+                var postdata={userid:this.user.id,id:this.id}
+                
+               http.setWait(false).get('group.php?act=get_redpacket',postdata).then(res=>{
+              
+                  if(res.code==200){
+                      this.getover(res.data);
+                  }
+                  else{
+                      clearInterval(this.timer)
+                       uni.showToast({
+                           title:'网络异常,请稍后再试',
+                           icon:'none'
+                       })
+                  }
+               
+               })
+			},
+            getover(money){
+          clearInterval(this.timer)
+              this.status=2;
+              this.money=money;
+              this.isopen=true;
+              this.updatemsg(money);
+              if(money>0){
+                  if( this.item.sender.id!=this.user.id){
+                      if(this.item.message.content.isgroup==1){
+                          var data = {
+                                  user_id: this.item.sender.id,
+                                  tip_uid: this.item.sender.id,
+                                  type: 'sendtips',
+                                  group_id: this.item.group_id,
+                                  content: this.user.nickname+'领取了您的红包',
+                          
+                              };
+                      }else{
+                          var data = {
+                                  fromid: this.user.id,
+                                  touid: this.item.sender.id,
+                                  tip_uid: this.item.sender.id,
+                                  type: 'sendtips',
+                                  content: this.user.nickname+'领取了您的红包',
+                              };
+                      }
+                       this.$socket.send(data);
+                  }
+                  
+              }
+              
+             
+           
+              
+               
+            },
+            
+            updatemsg(money){
+                //更新聊天记录中的红包打开状态
+                var msgkey=this.user.id+"_chat_"+this.item.cache_key;
+                var msglist=uni.getStorageSync(msgkey);
+                for(var i=0;i<msglist.length;i++){
+                    var msg=msglist[i];
+                    if(msg.msg_id==this.item.msg_id){
+                        try{
+                            msglist[i].message.content=JSON.parse(msglist[i].message.content);
+                        }catch(e){
+                            //TODO handle the exception
+                        }
+                       
+                       msglist[i].message.content.isopen=1;
+                       msglist[i].message.content.money=money;
+                       msglist[i].message.content=JSON.stringify(msglist[i].message.content);
+                          uni.setStorageSync(msgkey,msglist);
+                         this.$emit('fresmsg',msglist[i]);
+                       
+                        break;
+                    }
+                }
+            },
+            opendetail(){
+                uni.navigateTo({
+                    url:'../friend/redpacket_detail?msg_id='+this.item.msg_id+'&storekey='+this.item.cache_key
+                })
+            }
+            
+		},
+		created() {
+            this.status=this.item.message.content.status;
+            this.id=this.item.message.content.id;
+            this.money=this.item.message.content.money;
+            
+            this.isopen=this.item.message.content.isopen;
+                
+              
+       // uni.getStorageSync(this.userid+"_chat_"+this.storeKey)
+           
+        }
+	}
+</script>
+
+<style lang="scss" scoped>
+	.mask {
+		width: 100%;
+		height: 100vh;
+		overflow: hidden;
+		z-index: 10;
+		position: fixed;
+		background: rgba(255,255,255,0.5);
+		left: 0;
+		top: 0;
+	}
+
+	.bag {
+		position: absolute;
+		top: 50%;
+		left: 50%;
+		width: 500upx;
+		height: 800upx;
+		margin: 0 auto;
+		overflow: hidden;
+		text-align: center;
+		background-color: #F25542;
+		border-radius: 12upx;
+		transform: translate(-50%,-50%);
+	}
+
+	.redpick-close {
+		position: absolute;
+		left: 50%;
+		bottom: 10%;
+		width: 60upx;
+		height: 60upx;
+		z-index: 100;
+		transform: translateX(-50%);
+		image {
+			width: 60upx;
+			height: 60upx;
+		}
+	}
+
+	.bag:before {
+		content: '';
+		position: absolute;
+		top: -20%;
+		left: 50%;
+		z-index: 0;
+		width: 200%;
+		height: 100%;
+		border-radius: 100%;
+		background-color: #F45E4D;
+		box-shadow: 0px 4upx 10upx 0px rgba(0,0,0,0.2);
+		transform: translateX(-50%);
+	}
+
+	.bag .header {
+		position: absolute;
+		left: 0;
+		top: 45%;
+		width: 100%;
+		text-align: center;
+		z-index: 1;
+		color: #fff;
+		font-size: 80upx;
+		opacity: .9;
+	}
+
+	.bag .header .subtitle {
+		font-size: 32upx;
+	}
+
+	.bag .header .num {
+		color: #FEED4C;
+	}
+
+	.bag .stick {
+		position: relative;
+		z-index: 1;
+		width: 140upx;
+		height: 140upx;
+		margin: 0 auto;
+		margin-top: 112%;
+		border-radius: 9999px;
+		background-color: #EBCD99;
+		box-shadow: 0 0 10upx 0 rgba(0,0,0,0.4);
+	}
+
+	.bag .stick .rmb {
+		font-size: 70upx;
+		line-height: 150upx;
+		color: #3B3A37;
+	}
+	
+	.bag .detail-btn {
+		display: block;
+		font-size: 32upx;
+		color: #fff;
+	}
+
+	.message {
+		font-size: 28upx;
+		text-align: center;
+		color: #eee;
+	}
+
+	.bag .money{
+        color:#fff;
+    }
+	
+	.error-text{
+		position: absolute;
+		left: 50%;
+		bottom: 4%;
+		transform: translateX(-50%);
+		color: #f4e4ae;
+		font-size: 28upx;
+		width: 100%;
+	}
+
+
+.opening {
+		animation: openboom 0.5s;
+	}
+
+	@keyframes openboom {
+
+		/*定义关键帧、scaleDrew是需要绑定到选择器的关键帧名称*/
+		0% {
+		 transform: rotateY(0deg);
+		}
+
+		
+	
+
+		100% {
+		 transform: rotateY(360deg);
+		}
+		}
+
+		.redpick-info{
+			position: absolute;
+			left:0;
+			top: 0;
+			width: 100%;
+		
+			color: #F4E4AE;
+			&-avatar{
+				display: block;
+				align-items: center;
+				justify-content: center;
+				margin-top: 25%;
+				font-size: 28upx;
+				image{
+					width: 60upx;
+					height:60upx;
+                    vertical-align: middle;
+				}
+			}
+			&-nickname{
+                display: inline-block;
+                max-width: 100px;
+			max-width: 80%;
+			text-overflow: ellipsis;
+			white-space: nowrap;
+			overflow: hidden;
+            vertical-align: middle;
+			}
+			&-title{
+				margin-top:30px;
+				font-size: 40upx;
+			}
+		}
+		.redpick-over{
+            
+			max-width: 80%;
+			text-overflow: ellipsis;
+			white-space: nowrap;
+			overflow: hidden;
+			display: block;
+            margin: 0px auto;
+		}
+</style>

+ 552 - 0
components/groupindex.vue

@@ -0,0 +1,552 @@
+<template>
+	<view class="page page--divider">
+         <view class="menu" :style="{top:menutop}">
+             <block v-if='showsearch'>
+                 
+                 <view class="seacrchitem" >
+                    <span class="back"  @tap="showsearch=!showsearch">
+                           <uni-icons type='arrowleft' color="#000" style="font-weight: 600;" size="28" class="icons"></uni-icons>
+                    </span>
+                     <span><input class="input1" id="keyword" :placeholder="searchtips" v-model="keyword" /> </span>
+                 
+                     <span  @tap="go_search();">
+                         <div class="btn"><uni-icons style="font-size: 16px;color:#fff;margin-right:2px;font-weight: 600;" type="search"></uni-icons>搜索</div>
+                     </span>
+                 
+                 </view>
+                 
+                 
+             </block>
+             <block v-else>
+                 
+                 <li v-for="(m,index) in navitem" :key='index' :class="{'active':navselect==index}" @tap="tapnav(index)" >
+                     {{m}}
+                 </li>
+               
+             </block>
+          
+         </view>
+        
+         <scroll-view class="lotterybox"  :style="{height:lottHeight,top:contenttop}"  scroll-y="true" lower-threshold='80' @scrolltolower="gamenextpage()">
+             <view  class="grouplist" v-if="!showsearch">
+                 <block v-for="(m,index) in groupData" :key='index'>
+                   <li   @tap="gochat(m)" >
+                       <div class="avatar">
+                          
+                          <image :src="imgshow(m.avatar)"></image>
+                          </div>
+                           <div class="info">
+                                   <div class="title">
+                                   {{m.name}}
+                                   </div>
+                                   <div>
+                                       <uni-icons type='person' style="font-size: 16px;font-weight: 700;"></uni-icons>
+                                   {{m.people_count}}/{{m.people_max}}人</div>
+                                   <div class="tag">{{m.tags}}</div>
+                       </div></li>  
+                     
+                     
+                 </block>
+                 <view class="loading" v-if="loading && loadstatus=='loading'" >
+                 	<view class="spinner">
+                 		<view class="rect1"></view>
+                 		<view class="rect2"></view>
+                 		<view class="rect3"></view>
+                 		<view class="rect4"></view>
+                 		<view class="rect5"></view>
+                 	</view>
+                 </view>
+                   <view v-if="loading && loadstatus=='nomore'" style="text-align: center;height: 30px;line-height: 30px;" >
+                     亲爱的到底了
+                     </view>
+             </view>
+             
+             <view class="grouplist" v-else>
+                <block v-if="searchData.length>0">
+                <block v-for="(m,index) in searchData" :key='index'>
+                  <li   @tap="gochat(m)" >
+                      <div class="avatar">
+                         
+                         <image :src="imgshow(m.avatar)"></image>
+                         </div>
+                          <div class="info">
+                                  <div class="title">
+                                    <rich-text :nodes="m.name"></rich-text>
+                                </div>
+                                  <div>
+                                      <uni-icons type='person' style="font-size: 16px;font-weight: 700;"></uni-icons>
+                                  {{m.people_count}}/{{m.people_max}}人</div>
+                                  <div class="tag">
+                                       <rich-text :nodes="m.tags"></rich-text>
+                                  </div>
+                      </div></li>  
+                    
+                    
+                </block>
+                
+                </block>
+                <view v-else-if="subsearch" style="text-align: center;height: 30px;line-height: 30px;margin-top: 10px;color: #666;" >
+                  没有搜索到任何相关聊天室
+                  </view>
+                   
+                 
+             </view>
+            
+ <!-- #ifdef H5 -->
+ <view style="height: 10px;"></view>
+           <!-- #endif -->
+      </scroll-view>
+
+	</view>
+</template>
+
+<script>
+
+	import api from "../library/index.js"
+
+import http from "../library/http.js"
+   import uniIcons from '../components/uni-icons/uni-icons.vue'
+     
+     var windowHeight= uni.getSystemInfoSync().windowHeight;	
+  var statusBarHeight = uni.getSystemInfoSync().statusBarHeight ;
+    var menutop=statusBarHeight+45;
+  var contenttop=menutop+41;
+  var conentheight=windowHeight-contenttop;
+  
+  // #ifndef APP-PLUS
+        var conentheight=conentheight - 50;
+        // #endif
+  var lottHeight= conentheight;
+	export default {
+   components: {
+  uniIcons,
+
+     
+      },
+		data() {
+			return {
+                   statusBarHeight: statusBarHeight+ 'px',
+                   menutop:menutop+'px',
+                   contenttop:contenttop+'px',
+                   contentheight:conentheight+'px',
+                    lottHeight:lottHeight+'px',
+				newfriendNotify: false,
+				showMenu: false,
+				initializing: true,
+                groupData: uni.getStorageSync('groups_top'),
+                searchData:[],
+                subsearch:false,
+           navitem:['推荐','最新'],
+           navselect:0,
+           navstyle:"width:50%;left:25%",
+           userid:uni.getStorageSync('access_token'),
+           page:1,
+           act:'top',
+           loading:true,
+           loadstatus:'loading',
+           onseach:false,
+           showsearch:false,
+           searchtips:'请输入要搜索的群组名称',
+           keyword:''
+           
+          
+			}
+		},
+          mounted() {
+            this.tapnav(0)  
+          },
+		methods: {
+          tapnav(num){
+              this.navselect=num;
+              if(num==0) this.act='top';
+              else this.act='new'
+            this.page=1;
+             this.getGroupList();
+          },
+          
+			getGroupList() {
+           var postdata={act:this.act,page:this.page};
+           var that=this;
+           that.loading=true;
+              that.loadstatus='loading';
+           http.setWait(false).post('group.php?act=group_list',postdata).then(res=>{
+             if(res.code==200){
+                
+                
+                   that.loading=false;
+              if(that.page==1){
+                  this.groupData=res.data;
+                 uni.setStorageSync('groups_'+that.act,res.data);
+              } 
+              else{
+                  for(var i=0;i<res.data.length;i++){
+                      
+                   this.groupData.push(res.data[i]);
+                  } 
+                  
+                  if(res.data.length<10) {
+                      that.loading=true;
+                      that.loadstatus='nomore';
+                  }
+              }
+          
+             }else{
+              uni.showToast({
+                  title:'网络错误,请稍后再试',
+                  icon:'none'
+              })     
+             }
+                            
+           
+           })
+           
+    
+			},
+          imgshow(image_url){
+                 if(image_url.indexOf('http')<=-1) image_url=config.imgUri+image_url;
+                return this.image_cache(image_url)
+          },
+          gochat(m){
+              this.$jump('group.detail', {
+              	id: m.id,
+              	from:'index'
+              });
+          }
+		,
+           gamenextpage(){
+               if(!this.onseach){
+                   this.page++;
+                   this.getGroupList();
+               }
+         
+           },
+     
+           go_search(){
+               var e=this.keyword;
+               if(e==''){
+                   uni.showToast({
+                       title:"请输入群组关键",
+                       icon:'none'
+                   })
+                   this.searchData=[];
+                   return false;
+               }
+           var postdata={keyword:this.keyword};
+          
+           var that=this;
+           that.loading=true;
+              that.loadstatus='loading';
+              that.subsearch=false;
+           http.setWait(false).post('group.php?act=group_search',postdata).then(res=>{
+             if(res.code==200){
+                
+                 that.subsearch=true;
+                 that.loading=false;
+                 that.searchData=[];
+                 for(var i=0;i<res.data.length;i++){
+                    var item=res.data[i];
+                    item.name=item.name.replace(e,'<span style="color: #ff0000">'+e+'</span>');
+                   item.tags=item.tags.replace(e,'<span style="color: #ff0000">'+e+'</span>');
+                     that.searchData.push(item);
+                 }
+                 
+               
+                     
+             }else{
+              uni.showToast({
+                  title:'网络错误,请稍后再试',
+                  icon:'none'
+              })     
+             }
+                            
+           
+           })
+           
+             console.log(e);  
+           },
+           
+           
+		},
+		
+		onShow() {
+			
+			
+var userid=parseInt(uni.getStorageSync('access_token'));
+     if(userid>0) {
+   this.getGroupList();   
+       this.$action.setStatusTips();
+     }else{
+     
+         uni.setStorageSync('gourl','/pages/group/index');
+        
+         this.$jump('login.index');
+     }
+
+		},
+		onLoad(opts) {
+		    if(opts.method>0) this.navselect=opts.method;
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+     @import "@/static/css/group.css";
+     .menu{
+         position: fixed;
+         left: 0px;
+         width: 100%;
+         height: 30px;
+          padding: 5px 0px;
+          background-color: #fff;
+         text-align: center;
+         border-bottom: 1px solid #eee;
+     }
+     .menu  li{
+         display: inline-block;
+         height: 28px;
+         line-height: 28px;
+         margin: 0px 10px;
+         border:1px #666 solid;
+         border-radius: 5px;
+         width: 80px;
+         text-align: center;
+         color:#000000;
+         
+     }
+      .menu  li.active{
+          background-color: #2319DC;
+           border:1px #2319dc solid;
+           color: #fff;
+           font-weight: 600;
+      }
+       .menu  .right{
+           position: absolute;
+           right: 0px;
+           padding-right:5px;
+           top:0px;
+           padding-top: 5px;;
+       }
+
+    .item {
+        height: 100upx;
+    	border-bottom: 1px solid #F0F0F0;
+    	overflow: hidden;
+    	padding: $uni-spacing-col-lg 30upx;
+    	display: flex;
+    	flex-direction: row;
+    	justify-content: flex-start;
+    	align-items: center;
+        background-color: #ffffff;
+        border-radius: 20upx;
+        
+    }
+    
+    .leftImg {
+    	width: 100upx;
+    	height: 100upx;
+    	margin-right: $uni-spacing-row-base;
+    	border-radius: $uni-border-radius-base;
+    	display: flex;
+    	flex-flow: wrap;
+    	justify-content: center;
+    	background-color: #eee;
+    	align-items: center;
+    
+    	&:not(image) {
+    		padding: 1upx;
+    	}
+    
+    	view,
+    	image {
+    		width: (76upx-2upx*4)/3;
+    		height: (76upx-2upx*4)/3;
+    		margin: 1upx;
+    	}
+    }
+    
+    .rightContent {
+    	flex: 1;
+    }
+    
+    .rightContent,
+    .topCont {
+    	overflow: hidden;
+    	line-height: 1.25;
+    }
+    
+    .topCont {
+    	display: flex;
+    	flex-direction: row;
+    	justify-content: space-between;
+    	align-items: center;
+    }
+    
+    .userName {
+    	color: $uni-text-color;
+    	font-size: 38upx;
+    }
+    
+    .time {
+    	color: #999999;
+    	font-size: 30upx;
+    }
+    
+    .bottomCont {
+    	width: 100%;
+    	font-size: 24upx;
+    	color: #999999;
+    
+    	display: flex;
+    	align-items: center;
+    	justify-content: space-between;
+    }
+    
+    .content {
+        font-size: 28upx;
+    	overflow: hidden;
+    	text-overflow: ellipsis;
+    	white-space: nowrap;
+    }
+    
+    .badge {
+    	background-color: red;
+    	color: #fff;
+    	border-radius: 40upx;
+    	line-height: 40upx;
+    	width: 40upx;
+    	height: 40upx;
+    	font-size: 24upx;
+    	text-align: center;
+    	flex-shrink: 0;
+    }
+    .loading {
+    	//loading动画
+    	display: flex;
+    	justify-content: center;
+    padding-bottom: 20px;
+    	@keyframes stretchdelay {
+    
+    		0%,
+    		40%,
+    		100% {
+    			transform: scaleY(0.6);
+    		}
+    
+    		20% {
+    			transform: scaleY(1.0);
+    		}
+    	}
+    
+    	.spinner {
+    		margin: 20upx 0;
+    		width: 60upx;
+    		height: 25px;
+    		display: flex;
+    		align-items: center;
+    		justify-content: space-between;
+    
+    		view {
+    			background-color: #ff9800;
+    			height: 25px;
+    			width: 3px;
+    			border-radius: 3px;
+    			animation: stretchdelay 1.2s infinite ease-in-out;
+    		}
+    
+    		.rect2 {
+    			animation-delay: -1.1s;
+    		}
+    
+    		.rect3 {
+    			animation-delay: -1.0s;
+    		}
+    
+    		.rect4 {
+    			animation-delay: -0.9s;
+    		}
+    
+    		.rect5 {
+    			animation-delay: -0.8s;
+    		}
+    	}
+    }
+    .lotterybox {
+       position: fixed;
+       left: 0px;
+      width: 100%;
+        overflow-y: scroll;
+        -webkit-overflow-scrolling: touch;
+        overflow-x: hidden;
+        display: inline-block;
+        transition: all .3s;
+         transform: translate(0,0);
+    }
+    
+    .seacrchitem{
+   
+        width: 100%;
+        height: 30px;
+        line-height: 30px;
+        text-align: center;
+            display: table;
+        padding-top:0px;
+        table-layout: fixed;
+    }
+    .seacrchitem > span{
+        display: table-cell;
+        text-align: center;
+        vertical-align: top;
+    }
+    .seacrchitem > span:first-child{
+    
+        width: 50px;
+        padding-top:3px;
+    }
+
+    .seacrchitem > span:nth-child(2){
+        width: calc(100% - 108px) !important;
+        text-align: right;
+    }
+    .seacrchitem > span:last-child{
+        width: 68px;
+        padding-right: 10px;
+        text-align: left;
+    }
+    .seacrchitem > span .input1{
+        width:calc(100% - 12px);
+        height: 28px;
+        line-height: 28px;
+    
+        padding: 0px 5px;
+        font-size: 14px;
+        
+        color: #222;
+     
+        border-bottom:1px solid #ccc;
+        border-right: 0px;
+        text-align: left;
+        vertical-align: top;
+ 
+    }
+      .seacrchitem > span .input1::placeholder{
+          color:#999;
+          font-size: 12px;
+      }
+    .seacrchitem > span .btn{
+        background: -webkit-linear-gradient(left top, #3388ff , #2319dc);
+        background: -o-linear-gradient(bottom right, #3388ff, #2319dc);
+        background: -moz-linear-gradient(bottom right, #3388ff, #2319dc);
+        background: linear-gradient(to bottom right, #3388ff , #2319dc);
+        height: 30px;line-height: 30px;
+       width: 100%;
+        text-align: center;
+        padding: 0px 0px;
+        display: inline-block;
+        color: #fff;
+        border: 0px;
+        cursor: pointer;
+
+             vertical-align: top;
+    }
+    
+</style>

+ 584 - 0
components/header.vue

@@ -0,0 +1,584 @@
+<template>
+    <view>
+  <view  class="status-bar"  :style="{ height: statusbarheight }" ></view>
+        	<view class="headerline"  :style="{ top: statusbarheight }">
+                <block v-if="!showsearch && !showsearch1">
+                    <view class="back" v-if="isback" @tap="clickback()">
+                          
+                          <uni-icons type='arrowleft'  class="icons"></uni-icons>
+                      </view>
+                    <view class="logo" v-if="islogo" > <image src="/static/logo.png" ></image> </view>
+                    <view class="title" v-if="!shownav">{{title}}</view>
+                    <view class="nav" v-if="shownav"  :style="navstyle">
+                        <block v-for="(m,index) in navitem" :key="index"  >
+                            <view :class="{'navitem':true,'active':index==navselect}"  @tap="tapnav(index)" :style="'width:'+(100/navitem.length)+'%'">{{m}}
+                          
+                         <view class="red" v-if="reditem1[index]>0"></view>
+                            </view>
+                        </block>
+                    </view>
+                    
+                    <view  class="right" v-if="issearch || rightmenu || isright">
+                        <uni-icons @tap="clickshowsearch()"  v-if="issearch" type="search" color="#ffffff" size="28" style="vertical-align: middle;margin-right: 1px;"/>
+                                
+                          <uni-icons @tap="clickmenu()"  v-if="rightmenu" type="plusempty" color="#ffffff" size="28" style="vertical-align: middle;"/>
+                          <uni-icons @tap="click_right()"  v-if="isright" :type="righticon" color="#ffffff" size="28" style="vertical-align: middle;"/>
+                </view>
+                    
+                </block>
+                
+                <block v-else>
+                
+                    
+                    <view class="seacrchtop"  :style="{'display': 'table','margin-top':statusbarheight}">
+                       <li class="back"  @tap="closesearch()">
+                              <uni-icons type='arrowleft'  class="icons" ></uni-icons>
+                       </li>
+                        <li><input class="input1" id="keyword" :placeholder="searchtips" v-model="keyword" @input="listen_input($event.detail.value)" /> </li>
+                    
+                        <li  @tap="click_type('all');">
+                            <div class="btn"><uni-icons style="font-size: 16px;color:#fff;margin-right:2px;font-weight: 600;" type="search"></uni-icons>搜索</div>
+                        </li>
+                    
+                    </view>
+                    
+                   
+                    
+                    
+                </block>
+               
+        	</view>
+            
+            
+        	<view :class="{'menunav':true,'active':showmenu}" :style="'top:calc('+statusbarheight+' + 50px);'">
+                
+                <block v-for="(m,index) in menuitem" :key="index"  >    
+                    <view   @tap="tapmenu(index)"><uni-icons :type='m.icon' class="iconshow" />{{m.title}}</view>
+                </block>
+        	    
+        	</view>
+              <view  :style="{ height: statusbarheight }" ></view>
+   <view style="height: 45px;display: inline-block;width: 100%;"></view>
+   	<view class="search_tips" v-if="keyword && showsearch1  && issearchresult==false">
+   	    <view @tap="click_type('user')"><view> <image src="/static/img/user_add.png"></image>找人:</view><view>{{keyword}}</view></view>
+   	    <view @tap="click_type('group')"><view><image src="../static/img/group_add.png"></image>找群:</view><view>{{keyword}}</view></view>
+   
+   	</view>
+    <searchitem v-if="issearchresult==true" :data="serachdata" :type='searchtype' :keyword="keyword" :loading="loading" @showmore="click_type" @getnext="getnext"></searchitem>
+    </view>
+</template>
+
+<script>
+      import uniIcons from './uni-icons/uni-icons.vue'
+      	import http from "../library/http.js"
+        import searchitem from './searchitem.vue'
+    export default {
+        components: {
+        	
+            uniIcons,
+            searchitem,
+        },
+        props: {
+            shownav: {
+         
+              default: false 
+            },
+            rightmenu:{
+                default:false
+            },
+            islogo: {
+              
+              default: false 
+            },
+            isback: {
+              
+              default: false 
+            },
+            gameshow:{
+                
+            },
+            title:{
+                
+            },
+            statusbarheight:{
+                
+            },
+            navitem:{
+                
+            },
+            reditem:{
+                
+               default:false,
+            },
+            navselect:{
+                default:0
+            },
+            menuitem:{
+                
+            },
+            navstyle:{
+                
+            },
+            issearch:{
+              default:false  
+            },
+           showsearch:{
+             default:false  
+           }, 
+           searchtips:{
+               default:'请输入要搜索的内容'
+           },
+           isright:{
+               default:false
+           },
+           righticon:{
+               default:false
+           }
+            
+           
+        },
+        data() {
+            return {
+                showtrend:false,
+                trendactive:false,
+                showmenu:false,
+                menutop:55,
+             
+                keyword:'',
+                reditem1:[0,0,0,0],
+                showsearch1:false,
+                searchtype:'all',
+                page:1,
+                serachdata:[],
+                issearchresult:false,
+                loading:false,
+            }
+        },
+       
+        methods: {
+            clickback(){
+                var urls=  uni.getStorageSync('thisurl');
+       
+               if(urls && !uni.getStorageSync('access_token')){
+                    uni.reLaunch({
+                        url:urls
+                    })
+               }
+                else{
+                   
+                 uni.navigateBack({
+                     delta:1
+                 });
+                }
+            
+           
+           
+            },
+            click_right(){
+              this.$emit('click_right');  
+            },
+            clickmenu(){
+               
+              this.showmenu=!this.showmenu;  
+                 },
+                 tapnav(num){
+                     this.$emit('tapnav',num);
+                 },
+                 tapmenu(num){
+                     this.showmenu=false;
+                     
+                     this.$emit('tapmenu',num);
+                 },
+            clickshowsearch(){
+              this.showsearch1=true
+              this.showmenu=false;
+              this.$emit('clicksearch',true) 
+            },     
+           clicksearch(){
+              
+               this.$emit('clicksearch',true)
+           },  
+           closesearch(){
+                 this.showsearch1=false;
+                 this.issearchresult=false;
+                 this.keyword='';
+                 this.searchtype='all';
+                 this.page=1;
+                this.$emit('clicksearch',false)
+           },
+           listen_input(value){
+              this.issearchresult=false;
+               this.searchtype='all';
+               this.page=1;
+           },
+           click_type(type){
+          
+                 this.page=1;
+                    this.issearchresult=false;
+             this.searchtype=type;
+             this.go_search();
+           },
+           getnext(e){
+              
+             this.loading=true;  
+             this.page++;
+             this.searchtype=e;
+             this.go_search();
+           },
+           
+           go_search(){
+               if(this.keyword.length<1){
+                   uni.showToast({
+                       title:'搜索内容不能为空',
+                       icon:'none'
+                   }) 
+                     return false;
+               }
+               
+               http.setWait(false).get('index.php?act=search',{keyword:this.keyword,type:this.searchtype,page:this.page,userid:uni.getStorageSync('access_token')}).then(res=>{
+                 var reg =/^\d{5}$/;
+                  var reg1 =/^\d{6}$/;
+                  
+                 if(reg.test(this.keyword) && res.data.user.length==1){
+                     
+                      this.$jump('friend.detail',{id:res.data.user[0].id});
+                 }else if(reg1.test(this.keyword) && res.data.group.length==1){
+                     this.$jump('group.detail',{id:res.data.group[0].id});
+                 }else{
+                     if(res.data.user.length==0 && res.data.group.length==0  && this.page==1){
+                        uni.showToast({
+                            title:'没有搜索到相关内容',
+                            icon:'none'
+                        })  
+                     }else{
+                         if(this.page>1 && this.searchtype!='all'){
+                             this.serachdata[this.searchtype].push(...res.data[this.searchtype])
+                         }else{
+                        this.serachdata=res.data;            
+                         }
+                 
+                        this.issearchresult=true; 
+                     }
+                    
+                 }
+                this.loading=false;
+               })
+                 
+             // this.$emit('go_search',this.keyword)
+           
+           },
+          showdata(){
+                
+          },
+          
+         
+        },
+    	created() {
+    	    this.showdata(); 
+            if(this.reditem!=false) {
+                this.reditem1=this.reditem;
+            }
+    	},
+        watch:{
+            reditem(val){
+                if(val!=false)this.reditem1=val;
+            }
+        },
+        onLoad() {
+           
+    		
+        }
+    }
+</script>
+
+<style>
+  
+      .status-bar{
+         position: fixed;
+         z-index: 10;
+         left: 0px;
+         top: 0px;
+         width: 100%;
+         /* background: -webkit-linear-gradient(left top, #01d9ff , #01a9fe);
+         background: -o-linear-gradient(bottom right, #01d9ff, #01a9fe);
+         background: -moz-linear-gradient(bottom right, #01d9ff, #01a9fe);
+         background: linear-gradient(to right, #01d9ff , #01a9fe); */
+         background: $uni-color-primary;
+      }
+      .headerline{
+           position: fixed;
+           z-index: 10;
+           left: 0px;
+           top:0px;
+           width: 100%;
+           height: 40px;
+           line-height:40px;
+           padding: 2px 0px;
+           text-align: center;
+          /* background: -webkit-linear-gradient(left top, #01d9ff , #01a9fe);
+           background: -o-linear-gradient(bottom right, #01d9ff, #01a9fe);
+           background: -moz-linear-gradient(bottom right, #01d9ff, #01a9fe);
+           background: linear-gradient(to right, #01d9ff , #01a9fe); */
+           background-color:#01a9fe ;
+           display: table;
+           table-layout: fixed;
+           text-align: center;
+           color:#fff;
+           font-size: 28upx;
+           border-bottom: 0px ;
+      }
+      .headerline view{
+          display: table-cell;
+          vertical-align: middle;
+      }
+      .headerline .back {
+            text-align: left;
+            padding-left: 5px; 
+            height: 40px;;
+            line-height: 40px;
+            color: black;
+         }
+         .headerline .back .icons{
+             color:#000 !important;
+             font-size: 30px !important;
+             height: 30px !important;
+             vertical-align: middle;
+         }
+     .headerline .logo {
+           text-align: left;
+            padding-left: 7px;
+        }
+    .headerline .logo  image{
+         height: 35px;
+         vertical-align: middle;
+         width: 90px;
+     }
+        .headerline .right{
+            text-align: right;
+            padding-right: 7px;
+        }
+      .headerline .title{
+          position: absolute;
+          left: 25%;
+          width: 50%;
+          top:5px;
+          line-height: 35px;
+          font-size: 16px;
+          font-weight: 600;
+      }
+      .headerline .nav{
+          position: absolute;
+          left: 30%;
+          top:9px;
+          width: 40%;
+          display: table;
+          margin: 0px auto;
+          height: 28px;
+          line-height: 28px;
+          color: #fff;
+          border:1px solid #2319dc;
+          border-radius: 5px;
+      }
+      .headerline .nav .navitem {
+          display: table-cell;
+          border-right:1px solid #2319dc;
+        
+      }
+      .headerline .nav .navitem:first-child{
+          border-left: 0px;
+      }
+      .headerline .nav .navitem.active{
+          background-color: #2319dc;
+      }
+       .headerline .nav .navitem .red{
+           display: inline-block;
+           height: 7px;
+           width: 7px;
+           border-radius: 50%;
+           margin-left: 1px;
+           margin-top: 5px;
+          background-color: #FF0000;
+          vertical-align: top;
+       }
+      .menunav{
+          position: fixed;
+          top:70px;
+          right: 1px;
+          width: 120px;
+          box-shadow: 0 0 20rpx 10rpx rgba(0, 0, 0, .1);
+          z-index: 99;
+          /* background-color: rgba(0,0,0,0.8); */
+          background-color: #fff;
+          line-height: 35px;
+          padding: 5px 5px;
+          transform: translate(0,-100vh);
+          transition: .5s;
+          font-size: 14px;
+          border-radius: 5px;
+      
+      }
+      .menunav.active{
+          transform: translate(0,0);
+      }
+      .menunav:before{
+          display: block;
+          content: "";
+          position: absolute;
+          top: -6px;
+          right:26upx;
+          width: 0;
+          height: 0;
+          border-style: solid;
+          border-width: 0px 7px 7px 7px;
+          border-color:  #fff transparent;
+      
+      }
+      .menunav >view{
+          height: 35px;
+          line-height: 35px;
+          color: #000;
+          cursor: pointer;
+          width: 100%;
+          border-bottom:1px dashed #fff;
+          font-size: 14px;
+          text-align: center;
+          display: flex;
+          
+          flex-direction: row;
+          justify-content: center;
+      }
+  .menunav >view > .iconshow{
+      color: #000 !important;
+      /* color: #000; */
+      font-size: 16px !important;
+      margin-right: 5px;
+      display:inline-block ;
+  }
+  
+  .seacrchtop{
+      /* background: -webkit-linear-gradient(left top, #01d9ff , #01a9fe);
+      background: -o-linear-gradient(bottom right, #01d9ff, #01a9fe);
+      background: -moz-linear-gradient(bottom right, #01d9ff, #01a9fe);
+      background: linear-gradient(to right, #01d9ff , #01a9fe); */
+      background-color: #fff;
+      position: fixed;
+      top:0px;
+      left: 0px;
+      width: 100%;
+      height: 30px;
+      line-height: 30px;
+      text-align: center;
+      color:#fff;
+      padding-top: 10px;
+  
+   z-index: 19;
+      display: none;
+      table-layout: fixed;
+  }
+  .seacrchtop li{
+      display: inline-block;
+      text-align: center;
+      vertical-align: top;
+  }
+  .seacrchtop li:first-child{
+      width: 35px;
+      line-height: 30px;
+      text-align: center;
+  }
+  .seacrchtop li:first-child .icon{
+     font-size: 20px;
+      cursor: pointer;
+      color: #fff;
+  }
+    
+    .seacrchtop li:nth-child(2){
+        width: calc(100% - 120px);
+        overflow: hidden;
+    }
+  .seacrchtop li:last-child{
+      width: 68px;
+      padding-right: 10px;
+      text-align: left;
+  }
+  .seacrchtop li .input1{
+      width:100%;
+      height: 28px;
+      line-height: 28px;
+      padding-left: 5px;
+      font-size: 14px;
+      background-color: #fff;
+      color: #222;
+      border:1px solid  #2da2fd;
+      border-right: 0px;
+      text-align: left;
+      vertical-align: top;
+      border-top-left-radius:5px;
+      border-bottom-left-radius:5px;
+      
+  }
+    .seacrchtop li .input1::placeholder{
+        color:#999;
+        font-size: 12px;
+    }
+  .seacrchtop li .btn{
+     /* background: -webkit-linear-gradient(left top, #3388ff , #2319dc);
+      background: -o-linear-gradient(bottom right, #3388ff, #2319dc);
+      background: -moz-linear-gradient(bottom right, #3388ff, #2319dc);
+      background: linear-gradient(to bottom right, #3388ff , #2319dc); */
+      background: #2da2fd;
+      height: 30px;line-height: 30px;
+        border:1px solid $uni-color-primary;
+     width: 100%;
+      text-align: center;
+      padding: 0px 0px;
+      display: inline-block;
+      color: #fff;
+      border: 0px;
+      cursor: pointer;
+      border-top-left-radius: 0px;
+           border-bottom-left-radius: 0px;
+           vertical-align: top;
+  }
+.search_tips {
+    font-size: 14px;
+    line-height: 40px;
+    display: flex;
+      flex-direction: column;
+    width: 100%;
+    
+    
+}
+.search_tips  > view{
+    height: 50px;
+    line-height: 50px;
+  background-color: #fff;
+    border-bottom: 1px solid #eee;
+    color: #000;
+    display: flex;
+    flex-direction: row;
+}
+
+.search_tips  > view >view:nth-child(1){
+    width: 78px;
+    justify-content: right;
+    text-align: right;
+    align-items: right;
+    color: #888;
+    display: inline-flex;
+    flex-direction: row;  
+     padding-left: 10px;
+}
+.search_tips > view  image{
+    height: 30px;
+    width: 30px;
+    vertical-align: middle;
+    border-radius: 5px;
+    margin-right: 5px;
+    margin-top: 10px;
+    justify-content: right;
+    justify-items: ;
+    text-align: right;
+    align-items: right
+}
+
+</style>

+ 185 - 0
components/iospay.vue

@@ -0,0 +1,185 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+    import http from "../library/http.js"
+	export default {
+        props:{
+          type:{
+              default:'recharge'
+          },
+          money_select:{
+              default:0
+          },
+          money:{
+              default:0
+          }
+           
+        },
+		data() {
+			return {
+				iapChannel:null,
+				productId:'vip_month',//默认苹果内购商品ID
+				productIds: ['vip_month'],
+                user:uni.getStorageSync('userInfo'),
+                system:uni.getStorageSync('system'),
+			};
+		},
+        mounted() {
+           
+            this.plusReady();
+        },
+        methods:{
+            errorMsg(title){
+                uni.showToast({
+                    icon:'none',
+                    title:title
+                })
+                this.cancel_pay();
+            },
+            cancel_pay(){
+              this.$emit('cancel_pay',false);  
+            },
+            plusReady() { 
+                
+                if(this.type=='recharge'){
+                   this.productIds=this.system.iospay_recharge.split('|');
+                   
+                }else{
+                   this.productIds=this.system.iospay_vip.split('|');
+                }
+                this.productId=this.productIds[this.money_select];
+                  // console.log(this.productId);        
+        
+                var that=this;
+               plus.payment.getChannels((channels) => {
+                        for (var i in channels) {
+                            var channel = channels[i];
+                            //苹果支付
+                            if (channel.id === 'appleiap') {
+                                this.iapChannel = channel;
+                                this.requestOrder();//关键
+                            }
+                        }
+                        if(!this.iapChannel){
+                            that.errorMsg('未获取到ios内购通道')
+                        }
+                        else{
+                            var that1=that;
+                           // setTimeout(function(){ that1.pay_start();},300)
+                           
+                        }
+                       // console.log(this.iapChannel);
+            
+                    }, (error) => {
+                        that.errorMsg('iOS内购通道获取失败')
+            
+                    });  
+                        }  ,
+                        
+             requestOrder() {
+                          uni.showLoading({
+                                 title:'正在请求支付通道...'
+                              })
+          
+                         this.iapChannel.requestOrder(this.productIds, (orderList) => { //必须调用此方法才能进行 iap 支付
+                              uni.hideLoading();
+                                 this.pay_start()
+                         }, (e) => {
+                          uni.hideLoading();
+                        
+                           this.errorMsg('支付通道请求失败')
+                      });
+                        
+                     },
+                        
+                                
+                  pay_start(){
+                      let that = this;
+                         uni.showLoading({
+                              title: '正在调起支付...'
+                           });
+                      uni.requestPayment({
+                           provider:'appleiap',
+                           orderInfo:{
+                               productid: that.productId,
+                               username: that.user.id 
+                            },
+                            success: (e) => {
+                                 this.pay_ok(e);
+                                   },
+                            fail: (e) => {
+                                  uni.hideLoading();
+                                this.errorMsg('支付失败,请重试')
+                                },
+                            complete: (e) => {
+                                     uni.hideLoading();
+                                   }
+                                   
+                                  })
+
+                                },
+                                
+                 pay_ok(e){
+                 
+                     var postdata={type:this.type,money:this.money,userid:this.user.id,money_select:this.money_select}
+                                                          
+                     http.setWait(false).post('pay.php?act=iospay',postdata).then(res=>{
+                        uni.showToast({
+                            icon:'none',
+                            title:res.message
+                        })
+                            this.getuserinfo();
+                        if(this.type=='recharge'){
+                           uni.showModal({
+                           	title: '提示',
+                           	content: "充值已到账",
+                           	showCancel: true,
+                           	cancelText: '关闭',
+                           	confirmText: '查看账单',
+                           	success: res => { 
+                           		if(res.confirm) {
+                                     uni.redirectTo({
+                                       url:"/pages/mine/order" 
+                                     })
+                           		}else{
+                                   this.cancel_pay();  
+                                   }
+                           	}
+                           });  
+                        }
+                        else{
+                            setTimeout(function(){
+                            uni.navigateBack();       
+                            },800)
+                         
+                        }
+                       
+                         
+                          
+                     })
+                  
+                 },
+                 getuserinfo(){
+                     var postdata={
+                              	id: uni.getStorageSync('access_token')
+                                 };
+                     http.setWait(false).post('user.php?act=userinfo',postdata).then(res=>{
+                              this.user=res.data;
+                              uni.setStorageSync('userInfo',this.user)
+                              })
+                          
+                 },
+                                
+                                
+        }
+	}
+</script>
+
+<style lang="scss">
+
+
+</style>

+ 137 - 0
components/layer.vue

@@ -0,0 +1,137 @@
+<template>
+	<view class="modalhtml">
+		<view class="modal">
+            <view v-if="title!=''" class="title">{{title}}</view>
+            <view class="content">
+                
+                <input class="input" :placeholder="placeholder" v-model="input" />
+                
+                <view style="text-align: center;padding: 0px 0px;" v-if="isradio">
+                   <radio :checked="rediocheck" @tap="rediocheck=!rediocheck">{{radiotext}}</radio>
+                    
+                </view>
+                
+            </view>
+            <view class="btns">
+                <span @tap="close()" >{{btn_cancle}}</span>
+                <span @tap="sub()" >{{btn_ok}}</span>
+            </view>
+        </view>
+	</view>
+</template>
+
+<script>
+	export default {
+        props:{
+           title:{
+               default:'',
+           } ,
+           btn_cancle:{
+               default:'取消'
+           },
+           btn_ok:{
+               default:'确认'
+           },
+           placeholder:{
+               default:''
+           },
+           value:{
+               default:''
+           },
+           
+           isradio:{
+               default:false,
+           },
+           radiotext:{
+               default:''
+           }
+           
+        },
+        methods:{
+            close(){
+              this.$emit('close')  
+            },
+            sub(){
+              this.$emit('sub',{input:this.input,rediocheck:this.rediocheck})  
+            },
+        },
+		data() {
+			return {
+				input:'',
+                rediocheck:false,
+			};
+		},
+       mounted() {
+           this.input=this.value;
+       }
+	}
+</script>
+
+<style lang="scss">
+ .modalhtml{
+            position: fixed;
+            z-index: 999;
+            top:0px;
+            width: 100%;
+            left: 0px;height: 100vh;
+            background-color: rgba(0,0,0,0.7);
+            font-size: 14px;;
+        }
+        .modalhtml .modal{
+            background-color: #fff;
+            border-radius: 10px;;
+            top:30vh;
+            width: 80vw;
+            left: 10vw;
+            position: fixed;
+            border: 1px #ddd solid;
+        }
+        .modalhtml .modal .title{
+            text-align: center;
+            height: 35px;
+            line-height: 35px;
+            color: #000;;
+            font-size: 16px;;
+            font-weight: 600;
+            margin-top: 5px;;
+        }
+        
+         .modalhtml .modal .content{
+             padding: 5px 10px;
+             max-height: 160px;;
+   
+             line-height: 30px;;
+             overflow-y: scroll;
+             font-size: 14px;
+         }
+         .modalhtml .modal .content .input{
+             height: 30px;
+             line-height: 30px;
+             display: inline-block;
+             padding: 0px 5px;
+             border: 1px #eee solid;
+             border-radius: 5px;
+             font-size: 14px;
+             width: calc(100% - 12px);
+         }
+         .modalhtml .modal .btns{
+             text-align: center;
+             height: 35px;
+             line-height: 35px;
+             color: #000;;
+             font-size: 16px;;
+             font-weight: 600;
+            border-top: #eee 1px solid;
+         }
+         .modalhtml .modal .btns >span{
+             display: inline-block;
+             width: calc(50% - 1px);
+             height: 35px;
+             line-height: 35px;
+         }
+         .modalhtml .modal .btns >span:last-child{
+             border-left: #eee 1px solid;
+             color:#2319DC
+         }
+         
+</style>

+ 199 - 0
components/load-more.vue

@@ -0,0 +1,199 @@
+<template>
+    <view class="load-more">
+        <view class="load-more__img" v-show="status === 'loading' && showIcon">
+            <view class="load1">
+                <view :style="{ background: color }"></view>
+                <view :style="{ background: color }"></view>
+                <view :style="{ background: color }"></view>
+                <view :style="{ background: color }"></view>
+            </view>
+            <view class="load2">
+                <view :style="{ background: color }"></view>
+                <view :style="{ background: color }"></view>
+                <view :style="{ background: color }"></view>
+                <view :style="{ background: color }"></view>
+            </view>
+            <view class="load3">
+                <view :style="{ background: color }"></view>
+                <view :style="{ background: color }"></view>
+                <view :style="{ background: color }"></view>
+                <view :style="{ background: color }"></view>
+            </view>
+        </view>
+        <text class="load-more__text" :style="{ color }">{{ text }}</text>
+    </view>
+</template>
+
+<script>
+export default {
+    name: 'load-more',
+    props: {
+        status: {
+            // more - 上拉的状态
+            // loading - 下拉加载
+            // nomore - 没有更多了
+            type: String,
+            default: 'more'
+        },
+        showIcon: {
+            type: Boolean,
+            default: true
+        },
+        color: {
+            type: String,
+            default: '#777777'
+        },
+        contentText: {
+            type: Object,
+            default() {
+                return {
+                    pulldown: '上拉显示更多',
+                    refresh: '正在加载...',
+                    nomore: '没有更多数据了'
+                };
+            }
+        }
+    },
+    computed: {
+        text() {
+            const { status, contentText } = this;
+            if (status === 'more') return contentText.pulldown;
+            if (status === 'loading') return contentText.refresh;
+            return contentText.nomore;
+        }
+    }
+};
+</script>
+
+<style lang="scss">
+.load-more {
+    display: flex;
+    flex-direction: row;
+    height: 80upx;
+    align-items: center;
+    justify-content: center;
+
+    &__text {
+        font-size: 28upx;
+        color: #999;
+    }
+
+    &__img {
+        height: 24px;
+        width: 24px;
+        margin-right: 10px;
+
+        > view {
+            position: absolute;
+
+            view {
+                width: 6px;
+                height: 2px;
+                border-top-left-radius: 1px;
+                border-bottom-left-radius: 1px;
+                background: #999;
+                position: absolute;
+                opacity: 0.2;
+                transform-origin: 50%;
+                animation: load 1.56s ease infinite;
+
+                &:nth-child(1) {
+                    transform: rotate(90deg);
+                    top: 2px;
+                    left: 9px;
+                }
+
+                &:nth-child(2) {
+                    transform: rotate(180deg);
+                    top: 11px;
+                    right: 0;
+                }
+
+                &:nth-child(3) {
+                    transform: rotate(270deg);
+                    bottom: 2px;
+                    left: 9px;
+                }
+
+                &:nth-child(4) {
+                    top: 11px;
+                    left: 0;
+                }
+            }
+        }
+    }
+}
+
+.load1,
+.load2,
+.load3 {
+    height: 24px;
+    width: 24px;
+}
+
+.load2 {
+    transform: rotate(30deg);
+}
+
+.load3 {
+    transform: rotate(60deg);
+}
+
+.load1 view:nth-child(1) {
+    animation-delay: 0s;
+}
+
+.load2 view:nth-child(1) {
+    animation-delay: 0.13s;
+}
+
+.load3 view:nth-child(1) {
+    animation-delay: 0.26s;
+}
+
+.load1 view:nth-child(2) {
+    animation-delay: 0.39s;
+}
+
+.load2 view:nth-child(2) {
+    animation-delay: 0.52s;
+}
+
+.load3 view:nth-child(2) {
+    animation-delay: 0.65s;
+}
+
+.load1 view:nth-child(3) {
+    animation-delay: 0.78s;
+}
+
+.load2 view:nth-child(3) {
+    animation-delay: 0.91s;
+}
+
+.load3 view:nth-child(3) {
+    animation-delay: 1.04s;
+}
+
+.load1 view:nth-child(4) {
+    animation-delay: 1.17s;
+}
+
+.load2 view:nth-child(4) {
+    animation-delay: 1.3s;
+}
+
+.load3 view:nth-child(4) {
+    animation-delay: 1.43s;
+}
+
+@-webkit-keyframes load {
+    0% {
+        opacity: 1;
+    }
+
+    100% {
+        opacity: 0.2;
+    }
+}
+</style>

+ 966 - 0
components/loginitem.vue

@@ -0,0 +1,966 @@
+<template>
+	<view class="page" :style="'height:'+windowHeight">
+		<view class="loginbox">
+            <image src="../static/img/closebtn.png" class="close" @tap='close'></image>
+               <ul class="nav1">
+                    <li :class="{'active':type=='login'}"   @tap="changetype('login')">登录</li>
+                    <li :class="{'active':type=='reg'}"    @tap="changetype('reg')">注册</li>
+                </ul>
+            
+               <view class="login-bg">
+               		<view class="login-card">
+               			
+               		
+          
+               				<view  v-if="type=='login'">
+               					
+               				<label class="lines" >
+               					<label class="label-2-text" >
+               					   <image src="../static/img/icon_user.png" class="icons" style="width: 20px;height: 20px;" ></image>
+               					</label>
+               					<view >
+               						<input type="text" class="uni-input"  placeholder="ID\用户名\手机号" v-model="form.username"  />
+               					</view>
+               				
+               					
+               				</label>
+               				<label class="lines" >
+               						<label class="label-2-text" >
+               						  <image src="../static/img/icon_lock.png" class="icons" style="width: 16px;"></image>
+               						</label>				   
+               						<view >
+               						   <input class="uni-input" placeholder="请输入密码" :password="showPassword" v-model="form.password"/>
+               						</view>
+               						<uni-icons style="display: none;" class='tip-icons' type="eye-filled" :class="[showPassword ? '' : 'active']" @tap="changePassword"></uni-icons>
+               						
+               				</label>	
+               					<view  class="line" style="display: none;">
+               						<checkbox id="save" :checked="form.save" value="1">记住登录状态</checkbox>
+               					</view>
+               				</view>
+               				
+               				
+               				<view  v-if="type=='reg'">
+               					
+               					<label class="lines" >
+               						<label class="label-2-text"  >
+               						   <image src="../static/img/icon_user.png" class="icons" style="width: 20px;height: 20px;" ></image>
+               						</label>
+               						<view >
+               							<input class="uni-input" maxlength="11" placeholder="请输入用户名" v-model="form.username"  @blur="check_name($event.detail.value)" />
+               						</view>	
+               					
+               							<uni-icons :type="usernamemsg=='ok'?'checkbox-filled':'clear'" :class="{'tip-icons':true,'ok':usernamemsg=='ok','error':usernamemsg=='error'}" ></uni-icons>
+               					</label>
+               				
+               				<label class="lines" >
+               						<label class="label-2-text" >
+               						  <image src="../static/img/icon_lock.png" class="icons" style="width: 16px;"></image>
+               						</label>				   
+               						<view >
+               						   <input class="uni-input" placeholder="请输入登录密码" :password="showPassword" v-model="form.password"   @input="checkpwd($event.detail.value)"  @blur="check_other($event.detail.value,'password')"/>
+               						</view>
+               						<uni-icons :type="passwordmsg=='ok'?'checkbox-filled':'clear'" :class="{'tip-icons':true,'ok':passwordmsg=='ok','error':passwordmsg=='error'}" ></uni-icons>
+               						
+               				</label>
+                               <view class="passwordtips" v-if="passwordtips">
+                                   密码强度:<view :class="passwordcolor">{{passwordtiphtml}}</view>
+                                   
+                               </view>
+                               <label class="lines" >
+                               		<label class="label-2-text" >
+                               		<image src="../static/img/icon_lock.png" class="icons" style="width: 16px;"></image>
+                               		</label>				   
+                               		<view >
+                               		   <input class="uni-input" placeholder="请再次输入密码" :password="showPassword" v-model="form.password2" @blur="check_other($event.detail.value,'password1')"/>
+                               		</view>
+                               		<uni-icons :type="passwordmsg2=='ok'?'checkbox-filled':'clear'" :class="{'tip-icons':true,'ok':passwordmsg2=='ok','error':passwordmsg2=='error'}" ></uni-icons>
+                               		
+                               		
+                               </label>
+                               <label class="lines" v-if="system.inviteopen==1">
+                               	<label class="label-2-text"  >
+                               	   <image src="../static/img/icon-tip.png" class="icons" style="width: 20px;height: 20px;" ></image>
+                               	</label>
+                               	<view >
+                               		<input class="uni-input" maxlength="6" placeholder="请输入邀请码" v-model="form.randcode"   />
+                                       <view class="getcode" @tap="getcode" v-if="system.invite_code!=''"  >获取邀请码</view>
+                                       
+                               	</view>	
+                                   
+                               </label>
+                               <label class="lines" >
+                               	<label class="label-2-text"  >
+                               	<image src="../static/img/icon-tip.png" class="icons" ></image>
+                                    
+                               	</label>
+                               	<view >
+                               		<input class="uni-input" style="width: 100%;" maxlength="4" placeholder="输入右侧验证码" v-model="form.captch" @blur="check_other($event.detail.value,'randcode')"   />
+                               	</view>	
+                               		<image :src="codeurl" class="captchimg" @tap="changecode()" ></image>
+                                       <uni-icons :type="captchmsg=='ok'?'checkbox-filled':'clear'" :class="{'tip-icons':true,'ok':captchmsg=='ok','error':captchmsg=='error'}" ></uni-icons>
+                                       
+                               </label>
+               				
+               				</view>
+               			
+               		
+               	</view>
+               	<view class="login-btn">
+                       
+                       
+               		<button  v-if="type=='login'" class="landing_true"  :disabled="checkIn ? false : true" type="primary" @tap="click_login">立即登录</button> 
+               	<button  v-else class="landing_true"  :disabled="checkIn ? false : true"  type="primary" @tap="click_reg">确认并注册</button> 
+               	</view>
+                   
+               <view class="line1">
+                   <view    style="color:#2319DC;"   v-if="type=='login'"  @tap="changetype('reg')">免费注册 </view>
+                       <view    style="color:#2319DC;"   v-else  @tap="changetype('login')">立即登录</view>
+                       
+               		<view  @click="go_forget">忘记密码</view>
+               				
+               			</view>
+                 </view>
+                 <view style="text-align: center;margin-top: 30px;display: none;">
+                     <checkbox  v-bind:checked="isread"  @tap="isread=!isread" id="readrule" value="1">我已阅读并同意</checkbox>《<view class="rule" @tap="go_rule(0)">用户协议</view>》及《<view class="rule" @tap="go_rule(1)">隐私条款</view>》
+                     
+                     
+                 </view>
+        </view>
+	</view>
+</template>
+
+<script>
+     var windowHeight= uni.getSystemInfoSync().windowHeight;	
+
+	import cache from '../library/cache.js'
+		import api from "../library/index.js"
+	      import uniIcons from '../components/uni-icons/uni-icons.vue'
+	      import config from "../config.js";
+	          import http from '../library/http.js'
+	    
+	            var windowHeight= uni.getSystemInfoSync().windowHeight;	
+	             var statusBarHeight = uni.getSystemInfoSync().statusBarHeight ;
+	export default {
+	    components: {
+	    uniIcons,
+	    },
+        props:{
+         isreg:{
+             default:true
+         }  
+        },
+		data() {
+			return {
+			windowHeight:windowHeight+'px'	,
+            showPassword: true,
+            type: 'login',
+            getCodeTime:60,
+            				issend:false,
+            				timer1:'',
+            				method:'login',
+                              system:uni.getStorageSync('system'),
+             codeurl:'',
+             passwordcolor:'color0',
+             passwordtiphtml:'',
+             passwordtips:false,
+             usernamemsg:false,
+             passwordmsg:false,
+             passwordmsg2:false,
+             captchmsg:false,
+            name_status:false,
+             code_status:false,
+             checkIn:true,
+             title:'登录',
+             isread:true,
+            form: {
+            	username: '',
+            	password: '',
+                password2:'',
+            	mobile:'',
+            	captch:'',
+                nickname:'',
+                save:true,
+                randcode:uni.getStorageSync('invite_code')
+            	
+            },
+            
+			};
+		},
+        methods:{
+            close(){
+               this.$emit('close') 
+            },
+            getcode(){
+              this.form.randcode=this.system.invite_code; 
+            },
+            changecode(){
+                this.codeurl=config.imgUri+'inc/checkcode.inc.php?rand='+Math.random()+'&agentid='+this.agentid();
+              },
+            			changePassword() {
+            				this.showPassword = !this.showPassword;
+            			},
+            			delInputUsernameText(){
+            				this.form.username = ''
+            			},
+            			delInputPasswordText(){
+            				this.form.password = ''
+            			},
+              delInputMobileText(){
+                this.form.mobile='';  
+              },
+              delInputCaptchText(){
+                   this.form.captch='';  
+              },
+            			agentid(){
+            			     if(uni.getStorageSync('agentid')) return uni.getStorageSync('agentid');
+            			     else{
+            			         var agentid=this.randomstr(18);
+            			         uni.setStorageSync('agentid',agentid);
+            			         return agentid;
+            			     }
+            			 },
+            			 randomstr(len){
+            			  var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; 
+            			    var maxPos = chars.length;
+            			    var pwd='';
+            			  
+            			  for (var i = 0; i < len; i++) {
+            			      pwd += chars.charAt(Math.floor(Math.random() * maxPos));
+            			  }
+            			  return pwd;
+            			 },
+              changetype(type){
+                  this.type=type;
+                  if(type=='login'){
+                      // uni.setNavigationBarTitle({
+                      //     title: '登录'
+                      // });
+                      this.title='登录'
+                  }else{
+                      // uni.setNavigationBarTitle({
+                      //     title: '注册'
+                      // });
+                      this.title='注册'
+                  }
+                  
+              },
+              
+              login_success(res){
+                    console.log(res);
+                  var resdata=res.data;
+                  var id=resdata.id;
+                  uni.setStorageSync('access_token', id);
+                  uni.setStorageSync('userid', id);
+                  uni.setStorageSync(id+'_groups',res.groups);
+                    uni.setStorageSync(id+'_frienddata',res.friends);
+                  uni.setStorageSync('shownote',true);
+                    this.$socket.send({type:'otherlogin',uid:id});
+                 this.$socket.emit('no_auth');
+                uni.setStorageSync('userInfo',resdata);
+            //  this.$store.commit('update_userinfo', resdata);
+               // console.log(res);
+               //    api.getMyGroup({userid:id}).then(res => {
+               //    	uni.setStorageSync(id+'_groups',res.data)
+               //    })
+                  
+                                     
+               //    api.getMyFriend({userid:id}).then(resss => {
+               //        uni.setStorageSync(id+'_frienddata',resss.data);
+               //    })             
+                       var data11 = {
+                        token:id,
+                        type:'setting'
+                      }
+                      this.$socket.send(data11);	
+                       var urls=  uni.getStorageSync('loginurl');      
+                          if(urls){
+                              // console.log(urls);
+                               uni.reLaunch({
+                                   url:urls
+                               })
+                          }
+                           else{
+                               uni.reLaunch({
+                               	url: '../mine/index'
+                               })
+                           }
+                 
+                  
+              },
+            			
+            			click_login(){
+            				let _this = this;
+                  
+            			if(this.isread==false){
+            			    uni.showToast({
+            			       icon:'none',
+            			       title:'请阅读《用户协议》及《隐私条款》',
+            			       duration:1000
+            			    })
+            			    return false;
+            			}
+                      if(_this.form.username==''){
+                          uni.showToast({
+                             icon:'none',
+                             title:'请输入登录账号',
+                             duration:1000
+                          })
+                          return false;
+                      }
+                      
+                      if(_this.form.password==''){
+                          uni.showToast({
+                             icon:'none',
+                             title:'请输入登录密码',
+                             duration:1000
+                          })
+                          return false;
+                      }
+            				var data ={username:_this.form.username,password:_this.form.password};
+                  this.checkIn=false;
+            				api.login(data).then(res=>{
+                      this.checkIn=true;
+                     this.login_success(res);
+                  })
+                  var that=this;
+                 setTimeout(function(){
+                       that.checkIn=true;
+                     
+                 },2000)
+            				
+            			},
+              
+              check_name(value) {
+                      var reg=/^[\d\w]+$/;
+                      if(reg.test(value)){
+                          if(value.length>5){
+                             
+                              http.setWait(false).post('user.php?act=checkname1',{username:value}).then(res=>{
+                                
+                               var data=res.data;
+                               
+                              if(res.status==200){
+                             
+                                  this.name_status=true;
+                                  this.usernamemsg='ok';
+                              }else{
+                                  
+                                  this.usernamemsg='error';
+                                  this.name_status=false;
+                                 uni.showToast({
+                                    icon:'none',
+                                    title:res.message,
+                                    duration:1000
+                                 })
+                              }
+                              })
+              
+              
+                          }else{
+            
+                              this.name_status=false;
+                               this.usernamemsg='error';
+              
+                          }
+              
+              
+                      }else{
+                           this.usernamemsg='error';
+                          this.name_status=false;
+                          
+              
+                      }
+                  },
+                  checkpwd(pwd) {
+                      
+                      var p1 = (pwd.search(/[a-zA-Z]/) != -1) ? 1 : 0;
+                      var p2 = (pwd.search(/[0-9]/) != -1) ? 1 : 0;
+                      var p3 = (pwd.search(/[A-Z]/) != -1) ? 1 : 0;
+                      var pa = p1 + p2 + p3;
+              
+                      if(pa>0){
+              
+                          var num=pa-1;
+                         var arr=['弱','中','强'];
+                          this.passwordtiphtml=arr[num];
+                          this.passwordcolor='color'+num;
+                         this.passwordtips=true;
+              
+                      }else{
+                          this.passwordtips=false;
+                      }
+              
+                  },
+                   check_other(value,name) {
+              
+                        
+                         if(name=='password'){
+                            if(value.length>0){
+                                  if(value.length>5){
+                                      this.passwordmsg='ok';
+                                  
+                                  }   else{
+                                      this.passwordmsg='error';
+                                  }
+                                  
+                                
+                              }
+                              else{
+                                  this.passwordmsg=false;
+                              }
+                          }
+                         
+                          
+                          
+                              if(name=='password1'){
+                                    if(value.length>0){
+                                        if(value==this.form.password){
+                                        this.passwordmsg2='ok';
+                                        
+                                        }   else{
+                                            this.passwordmsg2='error';
+                                        }
+                                        
+                                    }
+                                    else{
+                                        this.passwordmsg2=false; 
+                                    }
+                                 
+                              }
+                              if(name=='randcode'){
+                                  
+                                  if(value.length>0){
+                                      
+                                  if(value.length==4){
+                                      http.setWait(false).post('user.php?act=checkcode1',{randcode:value}).then(res=>{
+                                       var data=res.data;
+                                       
+                                      if(res.status==200){
+                                                                 
+                                          this.code_status=true;
+                                          this.captchmsg='ok';
+                                      }else{
+                                          
+                                          this.captchmsg='error';
+                                          this.code_status=false;
+                                         uni.showToast({
+                                            icon:'none',
+                                            title:"验证码错误",
+                                            duration:1000
+                                         })
+                                      }
+                                      })
+                                     
+                                  }else{
+                                      this.code_status=false;
+                                       this.captchmsg='error';
+                                  }    
+                                      
+                                  }else{
+                                      
+                                     this.code_status=false;
+                                      this.captchmsg=false; 
+                                      
+                                  }
+                               
+              
+                              }
+                 
+              
+                  },
+              click_reg() {
+                  var _this=this;
+                 
+                  if(this.isread==false){
+                      uni.showToast({
+                         icon:'none',
+                         title:'请阅读《用户协议》及《隐私条款》',
+                         duration:1000
+                      })
+                      return false;
+                  }
+                  
+              if(_this.form.username==''){
+                  uni.showToast({
+                     icon:'none',
+                     title:'请输入用户名',
+                     duration:1000
+                  })
+                  return false;
+              }
+              if(_this.form.username.length<6){
+                  uni.showToast({
+                     icon:'none',
+                     title:'用户长度不能小于6位',
+                     duration:1000
+                  })
+                  return false;
+              }
+            
+               if(_this.form.password==''){
+                          uni.showToast({
+                             icon:'none',
+                             title:'请输入登录密码',
+                             duration:1000
+                          })
+                          return false;
+                      }
+                      if(this.form.password.length<6){
+                          uni.showToast({
+                             icon:'none',
+                             title:'密码长度不能小于6位',
+                             duration:1000
+                          })
+                          return false;
+                      }
+                      
+                      if(this.form.password!=this.form.password2){
+                          uni.showToast({
+                             icon:'none',
+                             title:'两次密码输入不一致',
+                             duration:1000
+                          })
+                          return false;
+                      }
+            if(this.system.inviteopen==1 && this.form.randcode==''){
+             uni.showToast({
+                icon:'none',
+                title:'请输入邀请码',
+                duration:1000
+             })
+             return false;    
+            }
+                      if(this.form.captch==''){
+                                 uni.showToast({
+                                    icon:'none',
+                                    title:'请输入验证码',
+                                    duration:1000
+                                 })
+                                 return false;
+                             }
+                             
+                             if(this.form.captch.length!=4){
+                                 uni.showToast({
+                                    icon:'none',
+                                    title:'验证码长度不正确',
+                                    duration:1000
+                                 })
+                                 return false;
+                             }
+                     if(this.name_status==false){
+                       uni.showToast({
+                          icon:'none',
+                          title:'该账号已被注册',
+                          duration:1000
+                       })
+                       return false;  
+                     }
+                     
+                     if(this.code_status==false){
+                       uni.showToast({
+                          icon:'none',
+                          title:'您输入的验证码不正确',
+                          duration:1000
+                       })
+                       this.changecode();
+                       return false;  
+                     }
+                       this.checkIn=false;
+                      api.register({username:this.form.username,password:this.form.password,randcode:this.form.captch,invite_code:this.form.randcode}).then(res=>{
+                       this.checkIn=true;
+                          if(res.code==200){
+                               this.login_success(res); 
+                               // var reg=res.data.reg;
+                               //  var that=this;
+                               //  var uid=id;
+                               //  setTimeout(function(){
+                               //      that.sendtips(reg,uid);
+                               //  },500)
+                          }else{
+                              this.changecode();
+                          }
+            
+                      })
+                      var that=this;
+                      setTimeout(function(){
+                            that.checkIn=true;
+                            that.changecode();
+                      },2000)
+                  },
+              sendtips(reg,uid){
+                  if(reg.kefu && reg.kefu_tips){
+                     let data = {
+                       userid: reg.kefu,
+                       friend_uid:uid,
+                       content:reg.kefu_tips,
+                       msgtype:'text',
+                       type:'chat'
+                     }
+                     
+                     this.$socket.send(data);   
+                  }
+                  if(reg.admin && reg.admin_tips){
+                     let data = {
+                       userid: reg.admin,
+                       friend_uid:uid,
+                       content:reg.admin_tips,
+                       msgtype:'text',
+                       type:'chat'
+                     }
+                     this.$socket.send(data);   
+                  }
+                  
+              },
+              
+            			go_forget(){
+            				uni.navigateTo({
+            				    url: '/pages/login/froget'
+            				})
+                             //this.$emit('forget')
+            			},
+            		
+            			go_rule(type){
+            			   console.log(type)
+            			    uni.navigateTo({
+            			        url: 'rule?type='+type
+            			    })
+            			},
+        },
+        mounted() {
+               this.codeurl=config.imgUri+'inc/checkcode.inc.php?rand='+Math.random()+'&agentid='+this.agentid();
+               if(this.isreg) this.type='reg';
+        }
+	}
+</script>
+
+<style lang="scss">
+    @import '../static/css/uni.css';
+   .page{
+       position: fixed;
+       z-index: 100;
+       left: 0px;
+       width: 100%;
+       top:0px;
+       background-color: rgba($color: #000000, $alpha: 0.3);
+   }
+   .getcode{
+       position: absolute;
+       right:10px;
+       top:8px;
+       height: 30px;
+       line-height: 30px;
+       display: inline-block;
+       color:#666;
+   }
+   .loginbox{
+       position: fixed;
+       left: 10%;
+       width: 80%;
+       top: 20%;
+       height: auto;
+
+ 
+       border-radius: 10px;
+       background-color: #fff;
+       padding-bottom: 10px;
+   }
+   .loginbox .close{
+       position: absolute;
+       right: -12px;
+       top:-12px;
+       width: 30px;
+       height:30px;
+     
+   }
+   
+   
+   .nav1{
+       width: 100%;
+       display: table;
+       height: 50px;
+       line-height: 50px;
+       padding: 0px !important;
+       margin: 0px !important;
+    
+         border-top-right-radius: 10px;
+   }
+   .nav1 li{
+       display: table-cell;
+       color:#666;
+       background-color: #eee;
+       text-align: center;
+       font-size: 16px;
+       cursor: pointer;
+   }
+    .nav1 li:first-child{
+          border-top-left-radius: 10px;
+    }
+    
+    .nav1 li:last-child{
+         border-top-right-radius: 10px;
+    }
+   .nav1 li i{
+       margin-right: 0px;
+   }
+   .nav1 li.active{
+       background-color: #3f6df5;
+       color: #fff;
+   }
+   .lines  {
+       display: inline-block;
+
+       width: calc(100% - 16px);
+       clear: both;
+       border-bottom: 1px solid #eee;
+       padding: 2px 8px;
+       margin-top: 10px;
+       text-align: left;
+       position: relative;
+   }
+   .lines> view ,.lines> label{
+      padding: 0px 0px;
+      margin: 0px 0px;
+       display: inline-block;;
+       
+       height: 40px;
+       line-height: 40px;;
+       vertical-align: middle;
+   }
+   .lines> label{
+       width: 40px;
+       text-align: center;
+   }
+   .lines> label image{
+       vertical-align: middle;
+   }
+     .lines > view {
+         width: calc(100% - 100px) !important;
+        
+     }
+     .lines .uni-input{
+         vertical-align: bottom;
+         padding-bottom: 0px;
+     }
+   .rule{
+          color:#2319dc;
+          display:inline-block ;
+       }
+       .passwordtips{
+           width:calc(100% - 52px);
+           padding-left: 52px;
+           height: 16px;
+           line-height: 16px;
+           color:#666;
+           text-align: left;
+           display:block;
+           font-size: 12px;
+           margin-top: 5px;;
+       }
+       .passwordtips > view{
+           display: inline-block;
+       }
+       
+       .passwordtips .color0{
+          color: #ff0000;
+       }
+       .passwordtips .color1{
+           color: #1834ab;
+       }
+       .passwordtips .color2{
+           color: #2FE30E;
+       }
+       .label-2-text{
+           width: 40px;
+           display: inline-block;
+           text-align: center;
+           margin: 0px 0px;
+       }
+       .icons{
+           font-size: 26px !important;
+           color: #1834AB !important;
+           height: 23px;
+           width: 23px;
+           
+       }
+   .tip-icons {
+       position: absolute;
+       right:5px;
+       top:11px;
+       font-size: 22px !important;
+       display: none;
+   
+   }
+   .tip-icons.ok{
+       color: #1D830D !important; 
+       display: inline-block;
+   }
+   .tip-icons.error{
+       color: #e7202a !important;
+       display: inline-block;
+   }
+   .tip-icons.active {
+       color: #2319dc !important;
+   }
+   .captchimg{
+       position: absolute;
+       right: 30px;;
+       height: 40px;top:3px;
+       width: 80px;;
+       border-radius: 5px;;
+   }
+           .line{
+               text-align: left;display:block;
+               margin: 0 auto;
+               width: calc(100% - 30px);
+               height: 30px;line-height: 30px;
+               margin-top: 20px;;
+           }
+   .uni-media-image{
+   	padding: 10upx 10upx;
+   	margin-top: 10upx;
+   	text-align: center;
+   }
+   .uni-media-loading {
+   	width:180px;
+   	height:75px;
+   	
+   }
+   .landing {
+   	height: 84upx;
+   	line-height: 84upx;
+   	color: #FFFFFF;
+   	font-size: 32upx;
+   	bordor: none;
+   	border-radius: 10upx;
+   }
+   .placeholdertext{
+   	/* #ifdef H5 */
+   	width: 40upx;
+   	/* #endif */
+   	
+   	/*#ifdef APP-PLUS */
+   	width: 40upx;
+   	/* #endif */
+   	
+   	height:24upx;
+   }
+   .landing_true {
+   	
+   }
+   .landing_false {
+   	background-color: #d8d8d8;
+   }
+   .uni-button[type=primary] {
+   	
+   }
+    
+   .login-btn{
+   	padding: 10upx 20upx;
+   	margin-top: 30upx;
+   	text-align: center;
+      
+   }
+   .login-btn button{
+        border-radius: 25px;
+            background: -webkit-linear-gradient(left top, #3388ff , #2319dc);
+            background: -o-linear-gradient(bottom right, #3388ff, #2319dc);
+            background: -moz-linear-gradient(bottom right, #3388ff, #2319dc);
+            background: linear-gradient(to bottom right, #3388ff , #2319dc);
+   }
+   .login-function{
+   	
+   	/* #ifdef H5 */
+   	margin-top:350upx;
+   	/* #endif */
+   	
+   	/*#ifdef APP-PLUS */
+   	margin-top: 260upx;
+   	
+   	
+   	/* #endif */
+   	
+   	color: #999;
+   	text-align: center;
+   }
+   .login-function-old{
+   	margin-top:60upx; 
+   	margin-right:30upx;
+   	color: red;
+   	text-align: center;
+   }
+   .login-forget{
+   	float: left;
+   	font-size: 26upx;
+   	color: #999;
+   }
+   .textspace {
+   	padding: 10upx 10upx;
+   }
+   
+   .line1{
+       width: calc(100% - 100px);
+       margin: 10px auto;
+       display: block;
+       height: 20px;
+       line-height: 20px;
+       text-align: center;
+   }
+    .line1 view{
+        color: #666;
+        float: text-align;
+        font-size: 28upx;
+        width: calc(50% - 1px);
+        display: inline-block;
+        border-right: 0px solid #666;
+        height: 20px;
+        line-height: 20px;
+    }
+      .line1 view:last-child{
+          border-right: 0px;;
+      }
+   .login-register{
+   	color: #666;
+   	float: text-align;
+   	font-size: 26upx;
+       width: 50%;
+       display: inline-block;
+   }
+   .login-input input{
+   	background: #F2F5F6;
+   	font-size: 28upx;
+   	padding: 10upx 25upx;
+   	height: 62upx;
+   	line-height: 62upx;
+   	border-radius: 8upx;
+   }
+   .login-margin-b{
+   	margin-bottom: 25upx;
+   }
+   .login-input{
+   	padding: 20upx 20upx;
+   }
+   .login-head{
+   	font-size: 34upx;
+   	text-align: center;
+   	height: 30upx;
+   }
+   .login-card{
+   	background: #fff;
+   	border-radius: 12upx;
+   	padding: 10upx 25upx;
+   	/* box-shadow: 0 6upx 18upx rgba(0,0,0,0.12); */
+   	position: relative;
+   
+   }
+   .login-bg {
+   	/* height: 260upx;
+   	padding: 25upx;
+   	background: linear-gradient(#FF978D, #FFBB69); */
+   }
+
+   .uni-form-item .with-fun .uni-icon {
+   	text-align: left;
+   }
+ 
+</style>

+ 189 - 0
components/logout_words.vue

@@ -0,0 +1,189 @@
+<template>
+    <view class="body"  :style="'height:'+windowHeight">
+	<view class="warp">
+        <view class="title">
+            移除[{{item.nickname}}]的理由
+        </view>
+        <view class="words">
+	    <view  v-for="(m,index) in words" :key='index' :class="checked.indexOf(m)>-1?'word active':'word'" @tap="check_word(m)">
+            {{m}}
+        </view>            
+        </view>
+ <view style="margin-top:10px;text-align:  center;">
+                <button class="layer_btns cancel"  @tap="cancel">
+                    <uni-icons type='close' style="font-size: 18px;margin-right: 5px;color: #333;font-weight: 600;"></uni-icons>
+                    取消</button>
+                 <button class="layer_btns ok" @tap="sub()">
+                        <uni-icons type='checkbox' style="font-size: 18px;color: #fff;margin-right: 5px;"></uni-icons>
+                     确认</button>
+            </view>
+        
+	</view>
+    </view>
+</template>
+
+<script>
+      var windowHeight= uni.getSystemInfoSync().screenHeight;	
+      
+      import uniIcons from './uni-icons/uni-icons.vue'
+	export default {
+        components:{
+          uniIcons  
+        },
+        props: {
+            item: {
+                required: true
+            }
+           
+        },
+		data() {
+         
+			return {
+                windowHeight:windowHeight+'px',
+				system:uni.getStorageSync('system'),
+                words:'',
+                checked:'',
+                user:uni.getStorageSync('userInfo')
+			};
+		},
+        methods:{
+            cancel(){
+                this.$emit('cancle')
+                    },
+            sub(){
+                var tips="是否要将["+this.item.nickname+"]移除本群?";
+                  var that=this;
+                  uni.showModal({
+                      title: '提示',
+                      content: tips,
+                      success: function (res) {
+                          if (res.confirm) {
+                            var data={type:'deleteGroup',group_id:that.item.group_id,userid:that.item.userid,fromid:that.user.id,mark:that.checked};
+                             that.$socket.send(data);  
+                           
+                             setTimeout(function(){
+                                   that.$emit('sub')
+                                   that.$emit('cancle')
+                                   
+                             },100)
+                          }
+                          
+                      }
+                  });
+            },   
+          check_word(word){
+                  var checked=this.checked.split(',');
+              if(this.checked.indexOf(word)>-1){
+             
+                 var arr=[];
+                 for(var i=0;i<checked.length;i++){
+                    
+                     if(checked[i]!=word){
+                         arr.push(checked[i]);
+                     }
+                 }
+               
+                 this.checked=arr.join(',');
+              }else{
+                  if(checked.length>=this.system['logout_wordsnum']){
+                      uni.showToast({
+                          icon:'none',
+                          title:'最多可以选择'+this.system['logout_wordsnum']+'个踢出理由'
+                      })
+                      return false;
+                  }
+                  if(this.checked!='') this.checked+=','
+                  this.checked+=word;
+              }
+             
+          }  
+        },
+        mounted(){
+         this.words=this.system['logout_words'].split('|');   
+        }
+	}
+</script>
+
+<style lang="scss">
+    .body{
+        position: fixed;
+        left: 0px;
+        width: 100%;
+        top:0px;
+        z-index: 10;
+        background-color: rgba($color: #000000, $alpha:0.6);
+    }
+ .warp {
+     position: fixed;
+     left: 10%;
+     width: 80%;
+     top:25%;
+     max-height: 400px;
+     z-index: 10;
+     background-color: #fff;
+     border-radius: 10px;
+     padding: 5px 0px;
+     border: 1px #eee solid;
+ }
+
+ .warp .title{
+     height:40px;
+     line-height: 40px;
+     text-align: center;
+     color: #000;
+     font-size: 16px;
+     
+ }
+ .words{
+     max-height: 300px;
+     overflow-y: scroll;
+     width: 100%;
+     text-align: center;
+ }
+ 
+ .words .word{
+    display: inline-block;
+    margin: 5px 8px;
+    height: 32px; line-height: 32px;
+    padding: 0px 5px;
+    min-width: 70px;
+    border: 1px #666 solid;
+    border-radius: 5px;
+    color: #666;
+    background-color: #fff;
+ }
+  .words .word.active{
+      border: 1px #2319dc solid;
+      color: #fff;
+      background-color: #2319dc;
+  }
+  .layer_btns{
+     
+  
+  display: inline-block;
+      line-height:35px;
+      padding: 0px 20px;
+      border-radius: 5px;
+      border: 0px;
+      text-align: center;
+      cursor: pointer;
+      height:35px;
+      color:#fff;
+      margin:0px 10px;
+      font-size:16px;
+  }
+  .layer_btns.ok{
+      background: -webkit-linear-gradient(left top, #3388ff , #2319dc);
+      background: -o-linear-gradient(bottom right, #3388ff, #2319dc);
+      background: -moz-linear-gradient(bottom right, #3388ff, #2319dc);
+      background: linear-gradient(to bottom right, #3388ff , #2319dc);
+
+  }
+  .layer_btns.cancel{
+      border: 1px solid #666;
+      color: #666;
+      background-color: #fff;
+
+   
+  }
+</style>

+ 382 - 0
components/message.vue

@@ -0,0 +1,382 @@
+<template>
+	<view>
+		<view :class="{item:true,'item-reverse':m.sender.id==userInfo.id}">
+			<view class="avatar">
+				<image :src="m.sender?m.sender.avatar:m.receiver?m.receiver.avatar:''" mode=""></image>
+			</view>
+			<view v-if="m.message.type == 'text'" :class="{'text': true,'reverse blueBg':m.sender.id==userInfo.id}">
+				{{m.message.content}}
+			</view>
+			<view v-if="m.message.type == 'image'" :class="{'text': true,'reverse blueBg':m.sender.id==userInfo.id}">
+				<image :src="m.message.content" mode="widthFix" style="max-width: 300upx;" @click="showImages"></image>
+			</view>
+			<view v-if="m.message.type == 'redpack'" :class="{'redpack': true,'reverse':m.sender.id==userInfo.id,'redpack-open':m.message.content.hasget||hasget}" @click="grab">
+				<view class="redpack-body">
+					<view class="redpack-body-image"></view>
+					<view class="redpack-body-content">
+						<view>{{m.message.content.money}}</view>
+						<view class="description">{{m.message.content.note||'恭喜发财,大吉大利!'}}</view>
+					</view>
+				</view>
+				<view class="redpack-footer">
+					红包
+				</view>
+			</view>
+			<view v-if="m.message.type == 'voice'" :class="{'voice': true,reverse:m.sender.id==userInfo.id,'voice-play':msgId == $store.state.currentVoiceId}" @click="showVoice">
+				<view :class="{'box': true,'mybox':m.sender.id==userInfo.id}">
+					<view class="wifi-symbol">
+						<view class="wifi-circle first"></view>
+						<view class="wifi-circle second"></view>
+						<view class="wifi-circle third"></view>
+					</view>
+				</view>
+				<view :class="{'voice-text': true,'voice-text-right':m.sender.id==userInfo.id}">
+					{{m.message.content.time}}''
+				</view>
+			</view>
+			<view v-if="m.message.type == 'face'" :class="{'text': true,'reverse blueBg':m.sender.id==userInfo.id}">
+				<image :src="m.message.content" :style="{width:(faceSize.width/2) + 'px', height: (faceSize.height/2) + 'px'}" @load="setEmoji"></image>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+	import api from "../library/index.js"
+	const innerAudioContext = uni.createInnerAudioContext();
+	export default {
+		data(){
+			return{
+				userInfo:  uni.getStorageSync('userInfo'),
+				hasget:false,
+				onVoice:false,
+				faceSize: {width:'',height:''}
+			}
+		},
+		props: {
+			m: {
+				type: Object,
+				require: true
+			},
+			msgId:  {
+				type: [Number, String],
+				require: true
+			}
+		},
+		methods:{
+			setEmoji(e){
+				this.faceSize = e.detail
+			},
+			grab(){
+				if(this.m.group_id>0){
+					let group = uni.getStorageSync('group_'+this.m.group_id)
+					let index = this.m.message.content.id
+					for(let i in group){
+						if(group[i].message.content.id==index){
+							group[i].message.content.hasget=true
+						}
+					}
+					uni.setStorageSync('group_'+this.m.group_id,group)
+					this.hasget = true
+					api.grab({id:this.m.message.content.id}).then(res=>{
+						this.$emit('getPick',{content:this.m.message.content,data:res,sender: this.m.sender})
+					}).catch(data=>{
+						this.$emit('getPick',{content:this.m.message.content,data:data,sender: this.m.sender})
+					})
+				}else{
+					let chat = uni.getStorageSync('chat_'+this.m.receiver.id);
+                    console.log(JSON.stringify(chat));
+					let index = this.m.message.content.id
+					for(let i in chat){
+						if(chat[i].message.content.id==index){
+							chat[i].message.content.hasget=true
+						}
+					}
+					uni.setStorageSync('chat_'+this.m.receiver.id,chat)
+					this.hasget = true
+					api.grab({id:this.m.message.content.id}).then(res=>{
+						this.$emit('getPick',{content:this.m.message.content,data:res,sender: this.m.sender})
+					}).catch(data=>{
+						this.$emit('getPick',{content:this.m.message.content,data:data,sender: this.m.sender})
+					})
+				}
+				
+			},
+			showVoice(){
+				if(innerAudioContext.paused) {
+					this.$store.state.currentVoiceId = this.msgId;
+					innerAudioContext.play()
+				} else {
+					this.$store.state.currentVoiceId = -1;
+					innerAudioContext.stop()
+				}
+			},
+			showImages(){
+				uni.previewImage({
+					urls:[this.m.message.content]
+				})
+			}
+		},
+		created() {
+			innerAudioContext.src = this.m.message.content.url
+			innerAudioContext.onCanplay(function(){
+				innerAudioContext.pause();
+			})
+			innerAudioContext.onEnded(()=>{
+				this.$store.state.currentVoiceId = -1;
+			})
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.item {
+		display: flex;
+		font-size: 28upx;
+		padding: 20upx;
+		&-reverse{
+			flex-direction: row-reverse;
+			
+		}
+		.avatar {
+			width: 90upx;
+			height: 90upx;
+			border-radius: 12upx;
+			background: #fff;
+			overflow: hidden;
+
+			image {
+				width: 90upx;
+				height: 90upx;
+			}
+		}
+
+		.text,
+		.redpack,
+		.voice {
+			margin: 0 20upx;
+			border-radius: 12upx;
+			max-width: 70%;
+			position: relative;
+			&:before {
+				display: block;
+				content: "";
+				position: absolute;
+				left: -12upx;
+				top: 39upx;
+				width: 0;
+				height: 0;
+				border-style: solid;
+				border-width: 12upx 12upx 12upx 0;
+			}
+			&.reverse:after {
+				display: block;
+				content: "";
+				position: absolute;
+				right: -12upx;
+				top: 39upx;
+				width: 0;
+				height: 0;
+				border-style: solid;
+				border-width: 12upx 0upx 12upx 12upx;
+			}
+			&.reverse:before{
+				display: none;
+			}
+		}
+
+		.text {
+			line-height: 35upx;
+			padding: 30upx 20upx;
+			background: #fff;
+			color: #000;
+			word-wrap: break-word;
+			&:before{
+				border-color: transparent #fff transparent transparent;
+			}
+			&.reverse:after{
+				border-color: transparent transparent transparent #007aff;
+			}
+		}
+
+		.redpack {
+			background: #EF9638;
+			color: #fff;
+			&:before{
+				border-color: transparent #EF9638 transparent transparent;
+			}
+			&.reverse:after{
+				border-color: transparent transparent transparent #EF9638;
+			}
+			&-open{
+				background: #FDE1C3;
+				.redpack-body-image{
+					background: #FB998A;
+				}
+				.redpack-body-image::before{
+					background: #FFF3E7;
+					top: -110upx;
+				}
+				&:after{
+					border-color: transparent transparent transparent #FDE1C3 !important;
+				}
+			}
+			&-body {
+				padding: 20upx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+
+				&-image {
+					background: #CD3D35;
+					width: 70upx;
+					height: 90upx;
+					overflow: hidden;
+					position: relative;
+					border-radius: 6upx;
+
+					&:before {
+						content: "";
+						display: block;
+						width: 140upx;
+						height: 140upx;
+						border-radius: 50%;
+						position: absolute;
+						top: -90upx;
+						left: 50%;
+						transform: translateX(-50%);
+						background: #FA5151;
+					}
+
+					&:after {
+						position: relative;
+						display: block;
+						content: '¥';
+						width: 28upx;
+						height: 28upx;
+						background-color: #f2d252;
+						color: #E08B34;
+						border-radius: 28upx;
+						line-height: 32upx;
+						font-size: 24upx;
+						transform: scale(.8);
+						margin: 36upx auto;
+						text-align: center;
+					}
+				}
+
+				&-content {
+					padding-left: 20upx;
+					
+				}
+			}
+
+			&-footer {
+				font-size: 24upx;
+				padding: 10upx 20upx;
+				background: #fff;
+				color: #999;
+				border-bottom-left-radius: 12upx;
+				border-bottom-right-radius: 12upx;
+			}
+		}
+
+		.voice {
+			width: 30%;
+			position: relative;
+			background: #007aff;
+			color: #fff;
+			&:before{
+				border-color: transparent #007aff transparent transparent;
+			}
+			&.reverse:after{
+				border-color: transparent transparent transparent #007aff;
+			}
+			&-text{
+				margin-left: 60upx;
+				line-height: 90upx;
+				margin-right: 60upx;
+			}
+			&-text-right{
+				text-align: right;
+			}
+			&-play{
+				.second {
+					animation: fadeInOut 1s infinite 0.2s;
+				}
+				
+				.third {
+					animation: fadeInOut 1s infinite 0.4s;
+				}
+			}
+		}
+	}
+
+	.box {
+		position: absolute;
+		top: 50%;
+		transform: translate(30upx,-50%);
+	}
+	.mybox{
+		transform: rotateY(180deg);
+		top: 25%;
+		right: 15%;
+	}
+
+	.wifi-symbol {
+		border: 1px solid red;
+		width: 25px;
+		height: 25px;
+		box-sizing: border-box;
+		overflow: hidden;
+		transform: rotate(135deg);
+		position: relative;
+	}
+
+	.wifi-circle {
+		border: 2px solid #fff;
+		border-radius: 50%;
+		position: absolute;
+	}
+
+	.first {
+		width: 2px;
+		height: 2px;
+		background: #fff;
+		top: 22px;
+		left: 22px;
+	}
+
+	.second {
+		width: 12px;
+		height: 12px;
+		top: 17px;
+		left: 17px;
+	}
+
+	.third {
+		width: 20px;
+		height: 20px;
+		top: 12px;
+		left: 12px;
+	}
+
+	@keyframes fadeInOut {
+		0% {
+			opacity: 0;
+		}
+
+		100% {
+			opacity: 1;
+		}
+	}
+	.blueBg{
+		background: #007aff!important;
+		color: #fff!important;
+	}
+	.description{
+		min-width: 250upx;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		overflow: hidden;
+	}
+</style>

+ 1273 - 0
components/messageitem.vue

@@ -0,0 +1,1273 @@
+<template>
+
+
+    <block v-if="isshow">
+
+
+
+
+
+        <view v-if="m.type=='tips' || m.message.type=='tips'" class="chat-tips">
+            <view v-if="m.message.content.type=='time'  && m.message.content.text!=''" class="chat-tips-time">
+                {{m.message.content.text}}
+            </view>
+            <view v-else class="chat-tips-time">{{m.message.content}}</view>
+            <view v-if="m.message.content.type=='redpack_tip'" class="chat-tips-time">
+                <text class="redpack-icon"></text>
+                {{m.message.content.text}}
+            </view>
+        </view>
+
+
+        <!-- 消息类型 开始 -->
+        <view v-else :class="{'chat-item':true,'chat-item-reverse': m.sender.id==userid}" :id="m._mid">
+
+
+            <!-- 头像 -->
+            <view class="avatar" @tap="clickAvatar(m)" @longtap="atusuer(m)">
+                <image :src="image_cache(m.sender.avatar)"></image>
+            </view>
+
+            <view class="content" :id="'msg_'+m.msg_id" >
+                <!-- 用户昵称 -->
+                <view class="nickname" v-if="m.sender.id!=userid && m.group_id>0 || m.id==0">
+                    {{m.sender.nickname}}
+                </view>
+                
+
+                <view class="item">
+
+                    <view v-if="m.message.type=='text'" class="text" @longtap="msgAction($event,m)">
+
+                        <block v-if="m.message.content.type=='remind' || m.message.content.type=='emotion'">
+
+                            <view v-if="m.message.content.remind.id==userid" style="color: #FF0000;">
+
+                                <block v-if="isindexhtml(m.message.content.content)">
+                                    <rich-text :nodes="m.message.content.content"></rich-text>
+                                </block>
+                                <block v-else> {{m.message.content.content}}</block>
+                            </view>
+                            <block v-else>
+                                <block v-if="isindexhtml(m.message.content.content)">
+                                    <rich-text :nodes="m.message.content.content"></rich-text>
+                                </block>
+                                <block v-else> {{m.message.content.content}}</block>
+
+                            </block>
+                        </block>
+
+                        <block v-else>
+
+                            <block v-if="isindexhtml(m.message.content)">
+                                <rich-text :nodes="m.message.content"></rich-text>
+                            </block>
+                            <block v-else> {{m.message.content}}</block>
+                        </block>
+
+                    </view>
+
+
+                    <!-- 表情 -->
+                    <view v-if="m.message.type=='emotion' " class="text" @longtap="msgAction($event,m)">
+                        <block v-for="(m1,index1) in faces" :key="index1">
+                            <block v-if="m1.type=='img'">
+                                <image :src="m1.content" class="emotion"></image>
+                            </block>
+
+                            <block v-else>{{m1.content}}</block>
+                        </block>
+                    </view>
+
+
+                    <!-- 超链接 -->
+                    <view v-if="m.message.type=='url'" class="text" @longtap="msgAction($event,m)">
+                        <url :content="m.message.content" :self="m.self" @clickurl="clickurl" />
+                    </view>
+                    <!-- 加群申请 -->
+                    <view v-if="m.message.type=='apply'" class="text" style="font-size: 14px;"
+                        @longtap="msgAction($event,m)">
+                        <view class="showname">{{m.message.content.other.nickname}}</view>
+                        申请加入<view class="showname">{{m.message.content.other.groupname}}</view>
+                        <view v-if="m.message.content.other.content">
+                            <span style="color: #666;">附言:</span>
+                            {{m.message.content.other.content}}
+                        </view>
+
+                    </view>
+
+                    <!-- 视频 -->
+                    <view v-if="m.message.type=='vedio'" class="vedio" @tap="play_vedio(m)"
+                        @longtap="msgAction($event,m)">
+                        <block v-if="m.isloading==1">
+
+                        </block>
+                        <block v-else>
+                            <image :src="poster_show(m)" class="vedio_src"></image>
+                            <image src="/static/img/play.png" class="play_btn"></image>
+                            <view class="timeshow" v-if="m.message.content.time>0">{{showtime(m.message.content.time)}}
+                            </view>
+
+                        </block>
+                    </view>
+                    <!-- 图片 -->
+                    <view v-if="m.message.type=='image'" class="image" @longtap="msgAction($event,m)">
+                        <image @click="onPreview(m.message.content,m.message.type!='face')" :src="image_show(m)"
+                            :data-src="image_show(m)" mode="aspectFit" @load="onSetImageSize($event,m.message.content)"
+                            class='chatimg'
+                            :style="{width: (isizes[m.message.content] && isizes[m.message.content].width || 0) + 'px', 'height': (isizes[m.message.content] && isizes[m.message.content].height || 200) + 'px'}">
+                        </image>
+                    </view>
+
+
+                    <!-- 语音 -->
+                    <view v-if="m.message.type=='voice'" :class="{'voice': true,'voice-play': playVoiceId == m._mid}"
+                        @tap="playVoice(m)" @longtap="msgAction($event,m)">
+                        <view class="box">
+                            <view class="wifi-symbol">
+                                <view class="wifi-circle first"></view>
+                                <view class="wifi-circle second"></view>
+                                <view class="wifi-circle third"></view>
+                            </view>
+                        </view>
+                        <view :class="{'voice-text': true,'voice-text-right': m.self}">
+                            {{m.message.content.time}}''
+                        </view>
+                    </view>
+
+                    <!-- 红包 -->
+                    <view v-if="m.message.type=='redpacket' " @tap='redpack_open(m)'
+                        :class="{'redpack':true,'redpack-open':m.message.content.isopen==1}"
+                        @longtap="msgAction($event,m)">
+                        <view class="info">
+                            <block v-if="m.sender.id==userid">
+                                <view class="showtext">{{m.message.content.title}}</view>
+                                <view class="icon">
+                                    <image
+                                        :src="m.message.content.isopen==1?'/static/img/redpackopen-icon.png':'/static/img/redpack-icon.png'">
+                                    </image>
+                                </view>
+
+                            </block>
+
+                            <block v-else>
+
+                                <view class="icon">
+                                    <image
+                                        :src="m.message.content.isopen==1?'/static/img/redpackopen-icon.png':'/static/img/redpack-icon.png'">
+                                    </image>
+                                </view>
+                                <view class="showtext">{{m.message.content.title}}</view>
+                            </block>
+
+                        </view>
+                        <view class="title">红包</view>
+                    </view>
+
+                </view>
+                <view class="qute" v-if="m.message.qute">
+                    {{parseQuery(m.message.qute).nickname}}:{{parseQuery(m.message.qute).content}}
+                </view>
+
+                <!-- 加载中 -->
+                <view class="loadingbox" v-if="m._mid==loading_id || m.isloading==1  ||  m.isloading==2">
+                    <image src="/static/loading.gif" v-if="m._mid==loading_id || m.isloading==1"></image>
+                    <image src="/static/fail.png" v-if="m.isloading==2"></image>
+                </view>
+            </view>
+            
+
+        </view>
+
+    </block>
+
+</template>
+
+<script>
+    import url from './url.vue'
+    export default {
+        components: {
+            url
+
+        },
+        props: {
+            item: {
+                required: true
+            },
+            loading_id: {
+                default: 0
+            },
+            playVoiceId: {
+                default: 0
+            },
+            userid: {
+                default: 0
+            },
+            unreadid: {
+                default: 0
+            },
+
+
+        },
+
+        data() {
+            return {
+                isizes: {},
+                faces: [],
+                m: [],
+                isshow: false,
+
+
+            }
+        },
+        computed: {
+
+        },
+        methods: {
+            touchend() {
+                return false;
+            },
+            clickAvatar(m) {
+                this.$emit('clickAvatar', m)
+            },
+            msgAction(e, m) {
+                this.$emit('msgAction', e, m)
+            },
+            play_vedio(m) {
+                this.$emit('play_vedio', m)
+            },
+            playVoice(m) {
+                this.$emit('playVoice', m)
+            },
+            atusuer(m) {
+
+                this.$emit('atusuer', m)
+            },
+            redpack_open(m) {
+
+                if (m.message.content.isgroup != 1 && (m.message.content.money > 0 || m.sender.id == this.userid)) {
+                    uni.navigateTo({
+                        url: '../friend/redpacket_detail?msg_id=' + m.msg_id + '&storekey=' + m.cache_key
+                    })
+                } else
+                    this.$emit('redpack_open', m)
+            },
+            updatedata(m) {
+                console.log(m);
+            },
+            toText(str) {
+                str = str.replace(/&nbsp;/g, " ");
+                str = str.replace(/<br>/g, " \n");
+                return str;
+            },
+
+            toHtml(str) {
+                var text = msg.replace(/<\/?[^>]*>/g, '');
+                text = text.replace(/\n/g, '<br>');
+                text = text.replace(/ /g, '&nbsp;');
+                return text;
+            },
+            isindexhtml(str) {
+                var arr = ['<br', '&nbsp;', "<div", "<span"];
+                str = str.toString();
+                for (var i = 0; i < arr.length; i++) {
+                    //console.log(str,arr[i])
+                    if (str.indexOf(arr[i]) > -1) return true;
+                }
+                return false;
+            },
+            poster_show(m) {
+                console.log(m, '-------------');
+                if (m.isloading == 1) {
+                    return false;
+                } else {
+
+                    // try{
+                    //     var src=m.message.content.src;
+                    //     var arr=src.split('/');
+                    //     var filename=arr[arr.length-1];
+                    //      var arr1=filename.split('.');
+                    //      var newname=arr1[0]+"_video.jpg";
+                    //       var poster= src.replace(filename,newname);
+                    //     return poster;
+                    // }catch(e){
+                    //     //TODO handle the exception
+                    //   return "/static/img/vediobanner.jpg";
+                    // }
+                    if (m.message.content && m.message.content.src) {
+                        console.log(m.message.content.src, 'm.message.content.src');
+                        var src = m.message.content.src;
+                        var arr = src.split('/');
+                        var filename = arr[arr.length - 1];
+                        var arr1 = filename.split('.');
+                        var newname = arr1[0] + "_video.jpg";
+                        var poster = src.replace(filename, newname);
+                        console.log(poster, 'poster');
+                        return poster;
+                    } else {
+                        return "/static/img/vediobanner.jpg";
+                    }
+                }
+
+
+            },
+            clickurl(url) {
+                //  console.log(url);
+                if (url.indexOf('http') <= -1) url = 'http://' + url;
+                let params = {
+                    url: url
+                };
+
+                return this.$jump('web.index', params)
+            },
+            httpString(str) {
+                if (str.toString().indexOf('http') <= -1) {
+                    //  str='https://'+str;
+                    //  str=str.toString()
+                    // console.log(str)
+                }
+
+                // var reg = /(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/g;
+                var reg =
+                    /(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9\/][-a-zA-Z0-9\/]{0,62})+(:\d+)*(\/\w+\.\w+)*$/g
+                // console.log(str);
+
+                try {
+
+                    var s = str.match(reg);
+                    if (s != null) {
+                        return s;
+                    } else {
+                        return false;
+                    }
+                } catch (e) {
+                    return false;
+                }
+
+
+
+            },
+            showtime(time) {
+                var lost_s = parseInt(time);
+                if (lost_s >= 0) {
+                    var l_s = Math.floor(lost_s % 60);
+                    var next_s = Math.floor(lost_s / 60);
+                    var l_m = Math.floor(next_s % 60);
+                    var next_m = Math.floor(next_s / 60);
+                    var l_h = Math.floor(next_m % 60);
+
+
+
+                    if (l_h - 10 < 0) {
+                        var n_h = "0" + (l_h);
+                    } else {
+                        var n_h = (l_h);
+                    }
+                    if (l_m - 10 < 0) {
+                        var n_m = "0" + (l_m);
+                    } else {
+                        var n_m = (l_m);
+                    }
+                    if (l_s - 10 < 0) {
+                        var n_s = "0" + (l_s);
+                    } else {
+                        var n_s = (l_s);
+                    }
+
+                    if (n_h != '00') var hh = n_h + ":";
+                    else var hh = '';
+                    var str = hh + n_m + ':' + n_s + '';
+                    return str;
+                } else {
+                    return "00:00";
+                }
+            },
+            image_show(m) {
+                var src = m.message.content;
+                if (src.indexOf('"') > -1) src = src.replace(/"/g, '');
+                if (m.isloading == 1) {
+                    return src;
+                } else
+                    return this.image_cache(src)
+
+            },
+            onSetImageSize(e, index) {
+                let {
+                    width,
+                    height
+                } = e.detail;
+                let size = 150;
+                if (height > size) {
+                    let p = size / height;
+                    height = size;
+                    width = width * p;
+                }
+                this.$set(this.isizes, index, {
+                    width,
+                    height
+                });
+            },
+            onPreview(url, show) {
+                if (show) {
+                    uni.previewImage({
+                        current: this.image_cache(url),
+                        urls: [this.image_cache(url)]
+                    });
+                }
+            },
+            emotion(res) {
+
+                let word = res.replace(/\[|\]/gi, '')
+
+                const list = ['微笑', '撇嘴', '色', '发呆', '得意', '流泪', '害羞', '闭嘴', '睡', '大哭', '尴尬', '发怒', '调皮', '呲牙', '惊讶',
+                    '难过', '酷', '冷汗', '抓狂', '吐', '偷笑', '可爱', '白眼', '傲慢', '饥饿', '困', '惊恐', '流汗', '憨笑', '大兵', '奋斗',
+                    '咒骂', '疑问', '嘘', '晕', '折磨', '衰', '骷髅', '敲打', '再见', '擦汗', '抠鼻', '鼓掌', '糗大了', '坏笑', '左哼哼', '右哼哼',
+                    '哈欠', '鄙视', '委屈', '快哭了', '阴险', '亲亲', '吓', '可怜', '菜刀', '西瓜', '啤酒', '篮球', '乒乓', '咖啡', '饭', '猪头',
+                    '玫瑰', '凋谢', '示爱', '爱心', '心碎', '蛋糕', '闪电', '炸弹', '刀', '足球', '瓢虫', '便便', '月亮', '太阳', '礼物', '拥抱',
+                    '强', '弱', '握手', '胜利', '抱拳', '勾引', '拳头', '差劲', '爱你', 'NO', 'OK', '爱情', '飞吻', '跳跳', '发抖', '怄火',
+                    '转圈', '磕头', '回头', '跳绳', '挥手', '激动',
+                    '闭嘴', '笑哭', '吐舌', '耶', '跳舞', '恐惧', '失望', '脸红', '无语', '奸笑', '嘿哈', '鬼混', '福', '合十', '强壮', '红包',
+                    '发财', '庆祝', '礼物'
+                ]
+                let index = list.indexOf(word);
+                var index1 = index + 100;
+                return '^' + index1 + '^';
+
+            },
+
+            getGroupmemebrs(group_id, userid) {
+
+                var members = uni.getStorageSync(group_id + '_group_members');
+                if (!members) members = [];
+                let result = [];
+                members.forEach(item => {
+                    if (item.id == userid) result = item;
+
+                })
+                return result;
+            },
+
+            message_format(v) {
+
+
+                if (v.message.type == 'text' && v.message.content.type != 'emotion') {
+                    try {
+                        
+                        v.message.content = JSON.parse(v.message.content);
+                        console.log(v.message.content,'v.message.content');
+                        // console.log(v.message.content,'v.message.content');
+                    } catch (e) {
+                        var content = v.message.content;
+                    }
+                    var type = v.message.content.type;
+                    if (type == 'remind') {
+                        console.log(v,'+++++++++++++++++');
+                        if (v.message.content.remind.id == uni.getStorageSync('access_token')) {
+                            // 区分
+                            console.log(v.message.content.content);
+                            let arr = v.message.content.content.split('-qute-')
+                            // v.message.content.content = arr[0]
+                            v.message.qute = arr[1]
+                            console.log(arr,'v.message.qute.rmd');
+                            v.message.content.content = v.message.content.content.replace('@{' + v.message.content
+                                .remind.id + '}', '<span style="color:#ff0000;">有人@我</span>');
+                        } else {
+                            var str = v.message.content.content;
+                            //    var reg =/@{(.*)}/g;
+                            // var tt=reg.exec(str);
+
+                            var mem = this.getGroupmemebrs(v.group_id, v.message.content.remind.id);
+
+                            if (mem.id == v.message.content.remind.id) {
+                                var atname = mem.nickname;
+                            } else
+                                var atname = v.message.content.remind.nickname;
+                            if (v.self == 1) var color = "#ff0000;"
+                            else var color = "#2319dc";
+                            let arr = v.message.content.content.split('-qute-')
+                            v.message.content.content = arr[0]
+                            v.message.content.qute = arr[1]
+                            v.message.content.content = v.message.content.content.replace('@{' + v.message.content
+                                .remind.id + '}', '<span style="color:' + color + ';">@' + atname + "</span>");
+
+                        }
+                        var content = v.message.content.content;
+
+                    } else {
+                        let arr = v.message.content.split('-qute-')
+                        v.message.content = arr[0]
+                        v.message.qute = arr[1]
+                        var content = v.message.content;
+                    }
+
+                    if (this.isindexhtml(content)) var content1 = this.toText(content);
+                    else var content1 = content;
+
+                    var res = this.httpString(content);
+                    if (res != false) {
+
+                        v.message.type = 'url';
+                        v.message.content = {};
+                        v.message.content.content = content;
+                        v.message.content.urls = res;
+                    }
+                }
+                if (v.message.type == 'redpacket') {
+                    try {
+                        v.message.content = JSON.parse(v.message.content)
+                    } catch (e) {
+                        //TODO handle the exception
+                    }
+                    //console.log( v.message.content)
+                }
+                this.isshow = true;
+                return v;
+            },
+            parseQuery(query) {
+                let baseArr = query.split('&')
+                let result = {}
+                baseArr.forEach(item => {
+                    let arr = item.split('=')
+                    let key = arr[0]
+                    let val = arr[1]
+                    result[key] = val
+                })
+                return result
+            },
+            init() {
+
+                try {
+                    if (this.item.message.type == 'emotion') {
+                        try {
+                            this.item.message.content = JSON.parse(this.item.message.content);
+
+                        } catch (e) {
+                            //TODO handle the exception
+
+
+                        }
+                        let arr = this.item.message.content.content.split('-qute-')
+                        this.item.message.content.content = arr[0]
+                        this.item.message.content.qute = arr[1] ? this.parseQuery(arr[1]) : ''
+
+                        // console.log(this.item.message.content.qute);
+                        var content = this.item.message.content.content.replace(/\[\S{1,3}\]/gi, this.emotion);
+
+                        content = content.split('^');
+
+
+                        var imgs = [];
+                        for (var i = 0; i < content.length; i++) {
+                            if (content[i] >= 100 && content[i] <= 222) {
+                                imgs.push({
+                                    'type': 'img',
+                                    'content': "/static/emoji/" + content[i] + '.gif'
+                                })
+                            } else {
+                                imgs.push({
+                                    'type': 'text',
+                                    'content': content[i]
+                                })
+                            }
+                        }
+                        this.faces = imgs;
+                        //  if(this.item.message.content.content.indexOf('[')>-1) console.log(imgs)
+                    }
+
+
+                } catch (e) {
+                    //TODO handle the exception
+
+                }
+
+                try {
+
+                    this.m = this.message_format(this.item);
+                    //console.log(this.m)
+                } catch (e) {
+                    //TODO handle the exception
+
+                    this.m = this.item;
+
+                }
+            }
+        },
+        watch: {
+            item(val) {
+                this.init();
+            }
+        },
+        mounted() {
+
+            this.init();
+
+            /// 
+        }
+
+    }
+</script>
+
+<style lang="scss" scoped>
+    $redpackBgColor: #fa9e3b;
+
+    $reverseTextBgColor: #3388ff;
+
+
+    $voiceBgColor: #fafafa;
+    $voiceColor: #000;
+    $reverseVoiceBgColor: #3388ff;
+    $reverseVoiceColor: #fff;
+
+
+
+    .emotion {
+        height: 30px;
+        width: 30px;
+        ;
+        vertical-align: middle;
+    }
+
+    .chatimg {
+        max-width: 70vw;
+        vertical-align: top;
+        border-radius: 5px;
+    }
+
+    .chatimg img {
+        vertical-align: top;
+    }
+
+    .showname {
+        display: inline-block;
+        color: #2319DC;
+    }
+
+
+    .chat-tips {
+        text-align: center;
+
+        &-time {
+            display: inline-block;
+            padding: 0upx 20upx;
+            font-size: 24upx;
+            line-height: 40upx;
+
+            color: #bbb;
+            border-radius: 30upx;
+        }
+    }
+
+    .chat-panel {
+        width: 96%;
+        padding: 0 2%;
+        position: absolute;
+        top: 0;
+        left: 0;
+
+
+
+    }
+
+    .vedio {
+        display: inline-block;
+        float: left;
+        width: calc(100% - 200upx);
+        border-radius: 10upx;
+        padding-top: 0upx;
+        padding-bottom: 0upx;
+        overflow: hidden;
+        position: relative;
+
+        z-index: 0;
+    }
+
+    .vedio .timeshow {
+        position: absolute;
+        right: 12upx;
+        bottom: 16upx;
+        font-size: 24upx;
+        color: #FFFFFF;
+        z-index: 999999999;
+    }
+
+    .vedio .play_btn {
+        position: absolute;
+        height: 80upx;
+        width: 80upx;
+        left: calc(50% - 40upx);
+        top: calc(50% - 40upx);
+        z-index: 999999999;
+    }
+
+    .vedio_src {
+        max-width: 100%;
+        border-radius: 10upx;
+        max-height: 70vw;
+        z-index: 0 !important;
+    }
+
+    .chat-item .item {
+        display: inline;
+
+    }
+
+    .touch_menu {
+        position: fixed;
+        z-index: 9999;
+        background-color: rgba(0, 0, 0, 0.8);
+        border: 1px #000 solid;
+        border-radius: 10px;
+        padding: 0px 10px;
+        line-height: 30px;
+        max-width: 100%;
+
+        font-size: 14px;
+        min-height: 40px;
+    }
+
+    .chat-item {
+        display: flex;
+        font-size: 32upx;
+        padding-bottom: 20upx;
+        padding: 10upx 12upx;
+        position: relative;
+
+        /*反向*/
+        &-reverse {
+            flex-direction: row-reverse;
+            .loadingbox,
+            .vedio {
+                float: right;
+            }
+            .content {
+                display: flex;
+                flex-direction: column;
+            }
+            .text,
+            .redpack,
+            .voice,
+            .image {
+                float: right;
+
+                &:before {
+                    opacity: 0;
+                }
+
+                &:after {
+                    display: block;
+                    content: "";
+                    position: absolute;
+                    right: -12upx;
+                    top: 22upx;
+                    width: 0;
+                    height: 0;
+                    border-style: solid;
+                    border-width: 12upx 0upx 12upx 12upx;
+                }
+            }
+
+            .image:after {
+                opacity: 0
+            }
+
+            .text {
+                color: #fff !important;
+                background-color: $reverseTextBgColor !important;
+
+                &:after {
+                    border-color: transparent transparent transparent $reverseTextBgColor;
+                }
+            }
+
+            .redpack {
+                text-align: right !important;
+
+                &:after {
+                    border-color: transparent transparent transparent $redpackBgColor;
+                }
+
+                &-open {
+                    &:after {
+                        border-color: transparent transparent transparent #FDE1C3;
+                    }
+                }
+            }
+
+            .voice {
+                background-color: $reverseVoiceBgColor !important;
+                color: $reverseVoiceColor !important;
+
+                &:after {
+                    border-color: transparent transparent transparent $reverseVoiceBgColor;
+                }
+
+                .box {
+                    transform: rotate(180deg) translate(15px, 50%);
+                    transform-origin: center;
+                    right: 0;
+
+                    .first {
+                        background: $reverseVoiceColor;
+                    }
+
+                    .wifi-circle {
+                        border-color: $reverseVoiceColor;
+                    }
+                }
+            }
+
+            .voice:hover,
+            .text:hover {
+                background-color: #2319DC !important;
+
+                &:after {
+                    border-color: transparent transparent transparent #2319DC !important;
+                }
+            }
+        }
+
+        .avatar {
+            width: 90upx;
+            height: 90upx;
+            border-radius: 12upx;
+            background: rgba(0, 0, 0, 0.05);
+            overflow: hidden;
+
+            image {
+                width: 90upx;
+                height: 90upx;
+            }
+        }
+
+        .content {
+            margin: 0 20upx;
+
+            width: 70%;
+            
+            position: relative;
+
+            .nickname {
+                max-width: 100%;
+                height: 24upx;
+                padding-bottom: 10upx;
+                font-size: 24upx;
+                line-height: 24upx;
+                color: #222;
+                text-align: left;
+
+            }
+        }
+
+        .text,
+        .redpack,
+        .voice,
+        .image {
+
+            display: inline-block;
+            width: auto;
+            border-radius: 12upx;
+            max-width: 100%;
+            position: relative;
+
+
+            &:before {
+                display: block;
+                content: "";
+                position: absolute;
+                left: -12upx;
+                top: 26upx;
+                width: 0;
+                height: 0;
+                border-style: solid;
+                border-width: 12upx 12upx 12upx 0;
+            }
+        }
+
+        .redpack {
+            width: 200px;
+            height: 86px;
+            text-align: left;
+            padding: 0px 10px;
+        }
+
+        .redpack image {
+            height: 40px;
+            width: 30px;
+        }
+
+        .redpack .info {
+            display: table;
+            table-layout: fixed;
+            width: 100%;
+            height: 60px;
+            line-height: 60px;
+        }
+
+        .redpack .info view {
+            display: table-cell;
+            vertical-align: middle;
+            padding: 0px 0px;
+            margin: 0px 0px;
+        }
+
+        .redpack .info view.icon {
+            width: 55px;
+            text-align: center;
+        }
+
+        .redpack .info view.showtext {
+            color: #fff;
+            font-size: 16px;
+            ;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            white-space: nowrap;
+        }
+
+        .redpack .info view.icon image {
+            vertical-align: middle;
+        }
+
+        .redpack .title {
+            height: 25px;
+            line-height: 25px;
+            color: #eee;
+            font-size: 12px;
+            border-top: #fdac53 solid 1px;
+        }
+
+        .redpack.redpack-open .title {
+            color: #fef5ec;
+            border-top: #ffe6ca solid 1px;
+        }
+
+        .image:before {
+            opacity: 0
+        }
+
+        .text {
+            line-height: 50upx;
+
+            padding: 12upx 20upx;
+            background: #e5e5e5;
+            color: #000;
+            word-break: break-all;
+
+            &:before {
+                border-color: transparent #e5e5e5 transparent transparent;
+            }
+        }
+
+        .text:hover,
+        .voice:hover {
+            background-color: #bbb;
+
+            &:after {
+                border-color: transparent #bbb transparent transparent;
+            }
+        }
+
+        .redpack {
+            background: $redpackBgColor;
+            color: #fff;
+
+            &:before {
+                border-color: transparent $redpackBgColor transparent transparent;
+            }
+
+            &-open {
+                background: #fce1c3;
+
+                .redpack-body-image {
+                    background: #FB998A;
+                }
+
+                .redpack-body-image::before {
+                    background: #FFF3E7;
+                    top: -110upx;
+                }
+
+                &:before {
+                    border-color: transparent #FDE1C3 transparent transparent;
+                }
+            }
+
+            &-body {
+                padding: 20upx;
+                display: flex;
+                align-items: center;
+
+                &-image {
+                    background: #CD3D35;
+                    width: 70upx;
+                    height: 90upx;
+                    overflow: hidden;
+                    position: relative;
+                    border-radius: 6upx;
+
+                    &:before {
+                        content: "";
+                        display: block;
+                        width: 140upx;
+                        height: 140upx;
+                        border-radius: 50%;
+                        position: absolute;
+                        top: -90upx;
+                        left: 50%;
+                        transform: translateX(-50%);
+                        background: #FA5151;
+                    }
+
+                    &:after {
+                        position: relative;
+                        display: block;
+                        content: '¥';
+                        width: 28upx;
+                        height: 28upx;
+                        background-color: #f2d252;
+                        color: #E08B34;
+                        border-radius: 28upx;
+                        line-height: 32upx;
+                        font-size: 24upx;
+                        transform: scale(.8);
+                        margin: 36upx auto;
+                        text-align: center;
+                    }
+                }
+
+                &-content {
+                    padding-left: 20upx;
+
+                }
+            }
+
+            &-footer {
+                font-size: 24upx;
+                padding: 10upx 20upx;
+                background: #fff;
+                color: #999;
+                border-bottom-left-radius: 12upx;
+                border-bottom-right-radius: 12upx;
+            }
+        }
+
+        .voice {
+            display: inline-block;
+            width: auto;
+            position: relative;
+            background: $voiceBgColor;
+            color: $voiceColor;
+
+            &:before {
+                border-color: transparent $voiceBgColor transparent transparent;
+            }
+
+            &-text {
+                margin-left: 60upx;
+                line-height: 90upx;
+                margin-right: 60upx;
+            }
+
+            &-text-right {
+                text-align: right;
+            }
+
+            &-play {
+                .second {
+                    animation: fadeInOut 1s infinite 0.2s;
+                }
+
+                .third {
+                    animation: fadeInOut 1s infinite 0.4s;
+                }
+            }
+
+            .first {
+                background: $voiceColor;
+            }
+
+            .wifi-circle {
+                border-color: $voiceColor;
+            }
+        }
+
+    }
+
+    /*语音*/
+    .box {
+        position: absolute;
+        top: 50%;
+        transform: translate(30upx, -50%);
+    }
+
+    .wifi-symbol {
+        width: 25px;
+        height: 25px;
+        // box-sizing: border-box;
+        position: relative;
+        overflow: hidden;
+        transform: rotate(135deg);
+    }
+
+    .wifi-circle {
+        border: 2px solid #fff;
+        border-radius: 50%;
+        position: absolute;
+    }
+
+    .first {
+        width: 2px;
+        height: 2px;
+        background: #fff;
+        top: 22px;
+        left: 22px;
+    }
+
+    .second {
+        width: 12px;
+        height: 12px;
+        top: 17px;
+        left: 17px;
+    }
+
+    .third {
+        width: 20px;
+        height: 20px;
+        top: 12px;
+        left: 12px;
+    }
+
+    @keyframes fadeInOut {
+        0% {
+            opacity: 0;
+        }
+
+        100% {
+            opacity: 1;
+        }
+    }
+
+    /**/
+    .loading {
+        //loading动画
+        display: flex;
+        justify-content: center;
+
+        @keyframes stretchdelay {
+
+            0%,
+            40%,
+            100% {
+                transform: scaleY(0.6);
+            }
+
+            20% {
+                transform: scaleY(1.0);
+            }
+        }
+
+        .spinner {
+            margin: 20upx 0;
+            width: 60upx;
+            height: 25px;
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+
+            view {
+                background-color: #ff9800;
+                height: 25px;
+                width: 3px;
+                border-radius: 3px;
+                animation: stretchdelay 1.2s infinite ease-in-out;
+            }
+
+            .rect2 {
+                animation-delay: -1.1s;
+            }
+
+            .rect3 {
+                animation-delay: -1.0s;
+            }
+
+            .rect4 {
+                animation-delay: -0.9s;
+            }
+
+            .rect5 {
+                animation-delay: -0.8s;
+            }
+        }
+    }
+
+    image {
+        will-change: transform;
+    }
+
+    .cssload-container {
+        width: 100%;
+        height: 17px;
+        text-align: center;
+    }
+
+    .cssload-zenith {
+        width: 17px;
+        height: 17px;
+        margin: 0 auto;
+        border-radius: 50%;
+        border-top-color: transparent;
+        border-left-color: transparent;
+        border-right-color: transparent;
+        box-shadow: 1px 1px 0px rgb(255, 255, 255);
+        animation: cssload-spin 690ms infinite linear;
+    }
+
+
+
+    @keyframes cssload-spin {
+        100% {
+            transform: rotate(360deg);
+            transform: rotate(360deg);
+        }
+    }
+
+    /*红包小图标*/
+    @font-face {
+        font-family: "redpackfont";
+        src: url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAMcAAsAAAAABugAAALQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCCcAqBcIFeATYCJAMICwYABCAFhG0HMxsHBsgekiRQQKEUijquIAIkxMPT2v/OnZ1ns188qUZtAmSTkEikJCKpEeqHRDTvtP2zrv7NrtNrZEk0khlnKp3laf0BnYSTeFbdobqDbWl6PM0n7p3+3wAKZL7zLse1N03qAowDKdA9MIoSaIOE3jB2aQnpNIFiWjbDidbuYfCS+ZMCcdVslMGrEZBlNd0V2gMrM8Qd7rppT3oD3M6+H38UhhdIWhX4VaevtGhQ/z01yKrWmjXTCUF4nA3qOipsApk4P5g4yVWoDFcl4WYePKs8+J7aNIlJPFUv1L/OL+0Dk1BAJ2EkoipvApn+nAIub7oZVV8Fsvvcfx/XkiXV7fwRrfc9Xj8bhgx5N8NvRp3cG3I8vXz0pNfOhI4AevDkzAlJgnItv/NQCR5e3ncqPFHa93z9JEKTSLl0Wf+9d7H/8b9vP/xyu1l5D8uN++wTNuD/dvTrq4HRX5++i6PliVOv3/vVN+4mmI509oYOH87wpAxnjKF36eWbsXxfn8if3nCxfjnxz78PxF438/vx8d+vz3HqAZovldk1RXJ/Y/bnnX1z/tX/vSQ3gA//VuXM13zJsMwFulRwBlIpXNiWHbFvTNkSDmaSU1ypWFMUNIA9Iz5v1YzTOxO6xmnv6piqUOlaJDN9Ey21LbR17aPY0La+NopzFdkbWLcNEIbcRTLgLSpD3pKZ/gktE76jbShcUVyM4B1ry2FGTZzIgmhYWcFmlTloaBYoLx8kxgWbzOvijDlKuG4O44Lc/Ha6jTgIP2KOvmgsFIJiypkdt4LziM3GsJMzC1FFrkkIZ2VeHh26Uq7K7IAcxxEygdBgihWYmYpxoEl3AXU+P4gwWmAj4xMtbf5RBKczD44VyJW/gGxTOBa1fMolukVGhQSBwiiOscNagY2wBQkGcw4PsyBUQi7ThphTpTzUiS5V5F6vsotuDxS+NkVgd4UezfNzBNEFAA==') format('woff2');
+    }
+
+    .redpack-icon {
+        font-family: "redpackfont" !important;
+    }
+
+    .redpack-icon:before {
+        content: "\e626";
+        color: red;
+        display: inline-block;
+        transform: scale(1.5);
+        margin-right: 10upx;
+    }
+
+    .loadingbox {
+        height: 80upx;
+        width: 70upx;
+        justify-content: center;
+        line-height: 80upx;
+        display: inline-block;
+        text-align: center;
+        vertical-align: top;
+    }
+
+    .loadingbox image {
+        height: 36upx;
+        width: 36upx;
+        vertical-align: middle;
+    }
+    .qute {
+        text-overflow:ellipsis;
+        white-space:nowrap;
+        overflow:hidden;
+        max-width: 90%;
+    }
+</style>

+ 129 - 0
components/msgitem.vue

@@ -0,0 +1,129 @@
+<template>
+	<view v-if="isshow">
+		<image :src="image_cache(item.avatar)" class="leftImg" />
+		
+	</view>
+</template>
+
+<script>
+     import config from "../config.js"
+	export default {
+        props: {
+            msg: {
+                required: true,
+            },
+        
+        },
+		data() {
+			return {
+				item:[],
+                isshow:false,
+			};
+		},
+        mounted() {
+               var msg=this.msg.msg;
+          if(msg.avatar.indexOf('http')<=-1) msg.avatar=config.imgUri+msg.avatar;
+                
+               this.item=msg;
+              this.isshow=true;
+        }
+	}
+</script>
+
+
+<style lang="scss">
+	.item {
+        height: 100upx;
+		border-bottom: 1px solid #F0F0F0;
+		overflow: hidden;
+		padding: $uni-spacing-col-lg 30upx;
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+		align-items: center;
+	}
+    .item:hover{
+        background-color: #eee;
+    }
+
+	.leftImg {
+		width: 100upx;
+		height: 100upx;
+		margin-right: $uni-spacing-row-base;
+		border-radius: $uni-border-radius-base;
+		display: flex;
+		flex-flow: wrap;
+		justify-content: center;
+		background-color: #eee;
+		align-items: center;
+
+		&:not(image) {
+			padding: 1upx;
+		}
+
+		view,
+		image {
+			width: (76upx-2upx*4)/3;
+			height: (76upx-2upx*4)/3;
+			margin: 1upx;
+		}
+	}
+
+	.rightContent {
+		flex: 1;
+	}
+
+	.rightContent,
+	.topCont {
+		overflow: hidden;
+		line-height:50upx;
+	}
+
+	.topCont {
+		display: flex;
+		flex-direction: row;
+		justify-content: space-between;
+		align-items: center;
+        vertical-align: top;
+	}
+
+	.userName {
+		color: $uni-text-color;
+		font-size: 32upx;
+	}
+
+	.time {
+		color: #999999;
+		font-size: 30upx;
+	}
+
+	.bottomCont {
+		width: 100%;
+		font-size: 24upx;
+		color: #999999;
+
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+	}
+
+	.content {
+        font-size: 28upx;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	overflow: hidden;
+	word-break: break-all;
+	}
+
+	.badge {
+		background-color: red;
+		color: #fff;
+		border-radius: 40upx;
+		line-height: 40upx;
+		width: 40upx;
+		height: 40upx;
+		font-size: 24upx;
+		text-align: center;
+		flex-shrink: 0;
+	}
+</style>

+ 247 - 0
components/noteadd.vue

@@ -0,0 +1,247 @@
+<template>
+    <view class="page">
+        <view class="group_note">
+            <div class="menu">
+                <block v-if="noteinfo.id>0">编辑公告</block>
+                <block v-else>发布公告</block>
+                <div class="btn" @tap="back()"><uni-icons type="undo"
+                        style="color:#fff;margin-right: 3px;;"></uni-icons>返回</div>
+
+            </div>
+            <div class="group_note" style="background-color: #fff;">
+
+                <div class="contentadd">
+
+                    <textarea placeholder="请输入通知内容" v-model="noteinfo.content"></textarea>
+
+                    <view style="margin-top: 15px;">
+                        <block v-for="(m,index) in imglist" :key="index">
+                            <view :class="{'images':true,'uploading':index>=images.length}">
+                                <image :src="imgshow(m)"></image>
+                                <uni-icons class="close" type="close" @tap="delimg(index)"></uni-icons>
+                                <view class="status">上传中</view>
+                            </view>
+
+                        </block>
+
+                        <view class="images">
+                            <image src="../static/img/icon-plus.png" @tap="uploadImage"></image>
+                        </view>
+
+
+                    </view>
+
+                </div>
+
+
+                <view style="width: 80%;margin: 15px auto;display: block">
+                    <div class="button1" @tap="click_add()">确认<block v-if="noteinfo.id>0">编辑</block>
+                        <block v-else>发布</block>
+                    </div>
+                </view>
+
+
+
+            </div>
+
+        </view>
+
+    </view>
+</template>
+
+<script>
+    import uniIcons from './uni-icons/uni-icons.vue'
+    import config from "../config.js"
+    import http from "../library/http.js"
+    import helper from "../library/helper.js"
+    export default {
+        components: {
+            uniIcons,
+
+        },
+        props: {
+            group: {
+                required: true
+            },
+            noteinfo: {
+                default: {
+                    id: 0,
+                    content: '',
+                    imgs: ''
+                }
+            },
+
+        },
+        data() {
+            return {
+                imglist: [],
+                images: [],
+                action: 'noteadd'
+            };
+        },
+        methods: {
+            click_add() {
+                // if (this.noteinfo.content.length < 10) {
+                //     uni.showToast({
+                //         title: '公告内容最少10个字符',
+                //         icon: 'none'
+                //     })
+                //     return false;
+                // }
+                if (this.images.length != this.imglist.length) {
+                    ni.showToast({
+                        title: '图片正在上传中,请稍后',
+                        icon: 'none'
+                    })
+                    return false;
+                }
+
+                var postdata = {
+                    id: this.noteinfo.id,
+                    group_id: this.group.id,
+                    content: this.noteinfo.content,
+                    imgs: this.images.join('|'),
+                    userid: uni.getStorageSync('access_token')
+                };
+                http.setWait(true).post('group.php?act=' + this.action, postdata).then(res => {
+                    if (res.code == 200) {
+                        if (this.action == 'noteadd') {
+                            uni.showToast({
+                                title: '发布成功'
+                            })
+                        } else {
+                            uni.showToast({
+                                title: '编辑成功'
+                            })
+                        }
+
+                        this.$emit('getnoteinfo');
+                        this.back();
+                    } else {
+                        uni.showToast({
+                            title: '网络错误,请稍后再试',
+                            icon: 'none'
+                        })
+                    }
+
+
+                })
+
+
+            },
+            uploadImage() {
+                if (this.imglist.length >= 1) {
+                    uni.showToast({
+                        title: '只能上传一张图片',
+                        icon: 'none'
+                    })
+                    return false;
+                }
+
+                uni.chooseImage({
+                    count: 1,
+                    success: (chooseImageRes) => {
+                        for (var i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
+                            var tempFilePaths = chooseImageRes.tempFilePaths[i];
+
+                            this.imglist.push(tempFilePaths);
+
+
+                            helper.uploadFiles([tempFilePaths], 'images', {
+                                type: 'avatar'
+                            }).then(res => {
+
+                                this.images.push(res.replace(config.imgUri, ''));
+
+
+                            })
+                        }
+                    }
+                });
+            },
+            delimg(num) {
+                this.images.splice(num, 1);
+                this.imglist.splice(num, 1);
+
+            },
+            back() {
+                this.$emit('back');
+            },
+            imgshow(image_url) {
+                if (image_url.indexOf('http') <= -1) image_url = config.imgUri + image_url;
+                if (this.noteinfo.id > 0)
+                    return image_url;
+                else
+                    return this.image_cache(image_url)
+            }
+        },
+        mounted() {
+            if (this.noteinfo.id > 0) {
+                this.images = this.noteinfo.imgs.split('|')
+                this.imglist = this.noteinfo.imgs.split('|')
+                this.action = 'noteedit';
+            }
+        }
+    }
+</script>
+
+<style>
+    @import "@/static/css/group.css";
+
+    .page {
+        background-color: #fff;
+    }
+
+    .images {
+        display: inline-block;
+        width: 50px;
+        ;
+        height: 50px;
+        text-align: center;
+        margin: 0px 5px;
+        position: relative;
+    }
+
+    .images image {
+        height: 50px;
+        width: 50px;
+        ;
+        vertical-align: middle;
+        border-radius: 5px;
+        ;
+    }
+
+    .images .close {
+        position: absolute;
+        top: -7px;
+        right: -7px;
+        color: #666 !important;
+        font-size: 18px !important;
+        z-index: 1;
+        font-weight: 700;
+
+    }
+
+    .images .status {
+        position: absolute;
+        z-index: 2;
+        left: 0px;
+        top: 0px;
+        width: 100%;
+        height: 50px;
+        line-height: 50px;
+        background-color: rgba(0, 0, 0, 0.7);
+        color: #fff;
+        font-size: 12px;
+        text-align: center;
+        display: none;
+    }
+
+    .images.uploading .close {
+        display: none;
+    }
+
+    .images.uploading .status {
+        display: block;
+    }
+</style>

+ 137 - 0
components/packet.vue

@@ -0,0 +1,137 @@
+<template>
+    <view class="dialog" @touchmove.stop="">
+        <view class="dialog-body">
+            <view>
+                <image class="avatar" :src="sender.avatar" />
+                <view class="username">{{sender.name}}</view>
+                <view class="note" v-if="!info.mines.length">{{info.note}}</view>
+                <view class="odds">{{mine}}</view>
+                <view class="placeholder"></view>
+                <view class="empty" v-if="!info.can">手慢了,红包已被抢光了</view>
+                <image v-else class="open" src="/static/khb.png" @tap="$emit('open')" />
+                <view class="log" @tap="$emit('logs')">看看大家的手气 &gt; </view>
+                <view class="emoji" @tap="$emit('close')">&#xe8e7;</view>
+            </view>
+        </view>
+    </view>
+</template>
+
+<script>
+    export default {
+        props: {
+            info: {
+                type: Object,
+                required: true
+            }
+        },
+        computed: {
+            sender() {
+                return this.info.sender;
+            },
+            mine() {
+                const {mines, count} = this.info;
+                if (!mines.length) return count + '包';
+                const string = '单双三四五六七八九'.charAt(mines.length-1) + '雷';
+                return count + '包' + string;
+            }
+        }
+    }
+</script>
+
+<style lang="scss" scoped>
+    .dialog {
+        z-index: 1000;
+        position: fixed;
+        top: 0;
+        left: 0;
+        width: 100vw;
+        height: 100vh;
+        background-color: rgba(#000, .5);
+    
+        &-body {
+            background-color: #d4533d;
+            border-radius: $uni-border-radius-base;
+            width: 540upx;
+            height: 780upx;
+            margin: 10vh auto;
+            position: relative;
+            overflow: hidden;
+            color: #c3a774;
+            font-weight: bold;
+            box-shadow: 0 0 8upx rgba(0,0,0,0.3);
+    
+            &::before {
+                z-index: 0;
+                position: absolute;
+                display: block;
+                width: 600upx;
+                height: 620upx;
+                content: '';
+                top: -40upx;
+                left: -30upx;
+                background-color: #db5443;
+                border-radius: 600upx/300upx;
+                box-shadow: 0 4px 4upx rgba(0,0,0,0.1);
+            }
+            
+            > view {
+                position: relative;
+                z-index: 10;
+                width: 100%;
+                height: 100%;
+                display: flex;
+                flex-direction: column;
+                justify-content: center;
+                align-items:  center;
+                padding: $uni-spacing-col-lg $uni-spacing-row-lg;
+                box-sizing: border-box;
+            }
+        }
+    
+        .emoji {
+            position: absolute;
+            width: 76upx;
+            height: 76upx;
+            line-height: 76upx;
+            text-align: center;
+            top: 10upx;
+            right: 10upx;
+            color: #777;
+        }
+    
+        .avatar {
+            width: 100upx;
+            height: 100upx;
+            border-radius: $uni-border-radius-base;
+            background-color: #ddd;
+            margin-top: 20upx;
+        }
+        .username {
+            margin-top: 10upx;
+            font-size: 28upx;
+        }
+        .note {
+            padding: $uni-spacing-col-lg $uni-spacing-row-base;
+        }
+        .placeholder {
+            flex: 1;
+            width: 10upx;
+        }
+        .open {
+            width: 150upx;
+            height: 150upx;
+            border-radius: 50%;
+            margin-bottom: 60upx;
+        }
+        .log {
+            font-weight: normal;
+            text-decoration: underline;
+            font-size: 28upx;
+        }
+        
+        .empty {
+            margin-bottom: 220upx;
+            color: #fff;
+        }
+    }
+</style>

+ 496 - 0
components/payment.vue

@@ -0,0 +1,496 @@
+<template>
+	<view class="popup">
+     
+		<view class="box">
+                  <view class="title" v-if="title">{{title}}</view>
+            <block v-if="step==0" >
+          
+                    <view class="group_detail">
+                      <ul class="profile" style="text-align:center;line-height: 50px;height: 50px;vertical-align: middle;">
+                   
+                                <span style="font-size: 20px;vertical-align: middle;">¥</span>
+                                <input type="digit" class="input1" :focus="false0"  v-model="money" placeholder="输入金额">
+                        </ul>
+                        <ul class="profile" id="money_list" style="line-height: 30px;height: 30px;text-align: center;padding-top: 5px;" >
+                    <block v-for="(m,index) in money_arr" :key='index'>
+                        <span :class="{'money':true,'active':m==money}" @tap="money=m" >
+                          {{m}}元
+                        </span>
+                        
+                    </block>
+                     
+                        </ul>
+                     
+                       
+                    </view>
+                    <view style="padding: 10px 10px;height: 30px;text-align: center;margin-top: 10px;">
+                        <button class="layer_btns cancel"  @tap="click_close()" style="margin-right: 15px;">
+                            <uni-icons type='close' style="font-size: 14px;margin-right: 5px;color: #333;font-weight: 600;"></uni-icons>
+                            关闭</button>
+                         <button class="layer_btns ok" @tap="click_next()">
+                                <uni-icons type='checkbox' style="font-size: 14px;color: #fff;margin-right: 5px;"></uni-icons>下一步
+                         </button>
+                    </view>
+                
+                
+                
+            </block>
+            
+            <block v-else>
+                <view  style="text-align:center;line-height: 40px;height:40px;vertical-align: bottom;">
+                                   
+                          <span style="font-size: 16px;vertical-align: bottom;">¥</span>
+                      <span style="font-size:30px;vertical-align: bottom;font-weight: 600;">{{money}}</span>
+                  </view>
+                <view class="payMent-input">
+                	<input maxlength="6" class="payMent-input-passInput" type="digit" @input="passInputTwo" v-model="pwdPass" :focus="focus" />
+                	<view class="payMent-input-item ">
+                		<view>
+                			<block v-if="passInputLenght != 0 && passInputLenght <=6" >·</block>
+                		</view>
+                		<view >
+                			<block v-if="passInputLenght >= 2 && passInputLenght <=6" >·</block>
+                		</view>
+                		<view >
+                			<block v-if="passInputLenght >= 3 && passInputLenght <=6" >·</block>
+                		</view>
+                		<view >
+                			<block v-if="passInputLenght >= 4 && passInputLenght <=6" >·</block>
+                		</view>
+                		<view >
+                			<block v-if="passInputLenght >= 5 && passInputLenght <=6" >·</block>
+                		</view>
+                		<view style="border-right: 0px;">
+                			<block v-if="passInputLenght == 6" >·</block>
+                		</view>
+                	</view>
+      </view>
+            </block>
+		<image src="../static/img/closebtn.png" class="close-btn"  @tap="click_close()"></image>
+	</view>
+	</view>
+</template>
+
+<script>
+            import uniIcons from './uni-icons/uni-icons.vue'
+	import http from "../library/http.js"
+	export default {
+		components: {
+			
+		    uniIcons,
+		
+		},
+        props: {
+           getmoney:{
+             
+           },
+           fix:{
+               default:false
+           },
+           title:{
+               default:'支付'
+           },
+           type:{
+               default:'reward',
+              
+           },
+           id:{
+               default:0
+           },
+           payinfo:{
+               default:{}
+           }
+           
+           
+        },
+		data() {
+			return {
+			  step:0,
+              money:10,
+              money_arr:[5,10,50,100],
+              focus:false,
+              focus0:false,
+            user: uni.getStorageSync('userInfo'),
+             passInputLenght: '',
+             pwdPassCw: false ,
+             
+             pwdPass:'',
+             pwd:''
+              
+                 
+			};
+		},
+		methods: {
+            passInputTwo: function(e) {
+            		this.passInputLenght = e.detail.value.length;
+                    this.pwd= e.detail.value;
+                    
+            		// #ifdef APP-PLUS
+            		if (e.detail.value.length == 6) {
+            			plus.key.hideSoftKeybord();
+            		}
+            	// #endif
+                
+                if (e.detail.value.length == 6){
+                   this.paysubmit();
+                    
+                }
+            	},
+           paysubmit(){
+            var data={type:this.type,payinfo:JSON.stringify(this.payinfo),money:this.money,pwd:this.pwd,id:this.id,userid:this.user.id};
+            
+            
+               http.setWait(true).post('pay.php?act=paymoney',data).then(res=>{
+                  
+                        if(res.code==200){
+                            
+                            uni.showToast({
+                                title:res.message,
+                                
+                            })
+                             this.getuserinfo();
+                           
+                            if(this.type=='redpacket' || this.type=='vip'){
+                                this.$emit('payresult',res.data)
+                            }
+                            else this.click_close();
+                        }
+                        else if(res.code==1){
+                            uni.showModal({
+                            	title: '提示',
+                            	content: "您的余额不足,请先去充值!",
+                            	showCancel: true,
+                            	cancelText: '取消',
+                            	confirmText: '去充值',
+                            	success: res => {
+                                  
+                            		if(res.confirm) {
+                                        
+                                      uni.redirectTo({
+                                        url:"/pages/mine/recharge"  
+                                      })
+                            		}
+                            	}
+                            });
+                        }
+                        
+                        })
+           },
+			click_close(){
+              this.$emit('close');  
+            },
+            click_next(){
+                if (isNaN(this.money)) {
+                    uni.showToast({
+                        title:'金额必须为数字',
+                        icon:'none'
+                    })
+                    this.focus=true;
+                    return false;
+                }
+                if(this.money==''){
+                    uni.showToast({
+                        title:'请输入金额',
+                        icon:'none'
+                    })
+                    this.focus=true;
+                   return false;
+                }
+                if(this.money<1){
+                    uni.showToast({
+                        title:'最低支付金额为1元',
+                        icon:'none'
+                    })
+                    this.focus=true;
+                    return false;
+                }
+                
+                if(parseFloat(this.money)>parseFloat(this.user.money)){
+                    
+                    uni.showModal({
+                    	title: '提示',
+                    	content: "您的余额不足,请先去充值!",
+                    	showCancel: true,
+                    	cancelText: '取消',
+                    	confirmText: '去充值',
+                    	success: res => {
+                          
+                    		if(res.confirm) {
+                                
+                              uni.redirectTo({
+                                url:"/pages/mine/recharge"  
+                              })
+                    		}
+                    	}
+                    });
+                }
+           
+                    this.step=1;
+                     this.focus=true;
+               
+              
+            },
+            getuserinfo(){
+                var postdata={
+                         	id: uni.getStorageSync('access_token')
+                            };
+                http.setWait(false).post('user.php?act=userinfo',postdata).then(res=>{
+                         this.user=res.data;
+                         uni.setStorageSync('userInfo',this.user)
+                         })
+                     
+            },
+            init(){
+                if(this.step==1) {
+             
+                    this.focus=true;
+                }
+                else{
+                    this.focus0=true;
+                }
+            }
+		},
+		mounted() {
+	        if(this.getmoney>0) this.money=this.getmoney;
+          if(this.fix===true && this.getmoney>0) {
+           this.step=1;
+              
+          }
+          else{
+          
+          }
+            this.getuserinfo();
+            var that=this;
+            setTimeout(function(){
+                that.init();
+            },200)
+		},
+		    
+	}
+</script>
+
+<style lang="scss" scoped>
+
+.popup{
+        position: fixed;
+        z-index: 10;
+        background-color: rgba(0,0,0,0.6);
+        top:0;
+        left: 0;
+        width: 100%;
+        height: 100vh;
+    }
+    .popup  .box{
+        position: fixed;
+        left: 5%;
+        width: 90%;
+        top:25vh;
+        height: auto;
+        background-color: #fff;
+        border-radius: 10px;
+    }
+   .popup  .box   .close-btn{
+        position: absolute;
+        right:-9px;
+        top:-9px;
+        height: 30px;
+        width: 30px;
+    }
+      .popup .title{
+          height:45px;
+          line-height:45px;
+          text-align: center;
+          color: #000;
+          font-size: 16px;font-weight: 600;
+          width: 100%;
+          
+          display: block;
+          border-bottom: 1px solid #DDDDDD;
+          border-top-left-radius: 10px;
+              border-top-right-radius: 10px;
+              margin-bottom: 5px;
+      }
+    .popup .textarea {
+    display: block;
+    height: 160px;
+    padding: 5px 10px;
+    margin: 10px auto;
+    width: calc(100% - 42px);
+    border-radius: 5px;
+    border: 1px solid #ddd;
+    overflow-y: scroll;
+}
+    .layer_nav{
+        width: 100%;
+        display: block;
+        height: 50px;
+        line-height: 50px;
+        padding: 0px !important;
+        margin: 0px !important;
+        background-color: #eee;
+        border-top-right-radius: 8px;
+        border-top-left-radius: 8px;
+    }
+    .layer_nav li{
+        display: inline-block;
+        float: left;
+        color:#666;
+        background-color: #eee;
+        text-align: center;
+        font-size: 16px;
+        cursor: pointer;
+        width: 150px;
+    }
+    .layer_nav li i{
+        margin-right: 0px;
+    }
+    .layer_nav li.active{
+        background-color: #3f6df5;
+        color: #fff;
+    }
+    .layer_nav li:first-child{
+        border-top-left-radius: 8px;
+    }
+    .layer_btns{
+       
+    
+    display: inline-block;
+        line-height: 30px;
+        padding: 0px 15px;
+        border-radius: 5px;
+        border: 0px;
+        text-align: center;
+        cursor: pointer;
+        height: 30px;
+        color:#fff;
+        margin-left:15px;
+        font-size: 14px;
+    }
+    .layer_btns.ok{
+        background: -webkit-linear-gradient(left top, #3388ff , #2319dc);
+        background: -o-linear-gradient(bottom right, #3388ff, #2319dc);
+        background: -moz-linear-gradient(bottom right, #3388ff, #2319dc);
+        background: linear-gradient(to bottom right, #3388ff , #2319dc);
+     height:30px !important;
+    }
+    .layer_btns.cancel{
+        border: 1px solid #666;
+        color: #666;
+        background-color: #fff;
+        height: 30px;
+        line-height: 30px !important;
+     
+    }
+    .popup  .box{
+        left: 10%;
+        width: 80%;
+    }
+.profile{
+height: 50px;
+    line-height: 50px;
+clear: both;
+  width:100%;
+    margin: 0 auto;
+}
+
+.profile li{
+    display:inline-block;
+    text-align: left;
+}
+.profile li:first-child{
+    text-align: right;
+    padding-right: 5px;
+    width:80px; ;
+}
+.profile li:last-child{
+ width:calc(100% - 90px);
+}
+.profile  .input1{
+    width:90px;
+    height:35px;
+    line-height: 35px;
+
+    padding: 0px 10px;
+    font-size: 14px;
+    background-color: transparent;
+    color: #222;
+    border:1px solid #ccc;
+    border-radius: 5px;
+    display: inline-block;
+    vertical-align: middle;
+    text-align: left;
+}
+.profile  .input1::placeholder{
+    color: #666;
+}
+.profile  .input1:focus{
+    border-color: #000;
+    box-shadow: 0 0 15px #000
+}
+     .profile .money{
+            height: 25px;
+            line-height: 25px;
+            margin: 5px 5px;
+            text-align: center;
+            border-radius: 5px;
+            background-color: #fff;
+            border:1px solid #666;
+            color: #555;
+            width:50px;
+            display: inline-block;
+            cursor: pointer;
+        }
+        .profile .money.active{
+            background-color: #2319dc;
+            border-color: #2319dc;
+            color: #fff;
+        }
+        .payMent-input {
+        		width: calc(100% - 30px);
+                margin: 10px 15px;
+        		height: 80upx;
+        	
+        		border-right: 2upx solid #333;
+        	
+        		border: 2upx solid #333;
+        		position: relative;
+        		/* border-right: none; */
+              
+        	}
+        
+        	.payMent-input-passInput {
+        		position: absolute !important;
+        		width: 100%;
+        		height: 100%;
+        		top: 0;
+        		left: 0;
+        		z-index: 1;
+        		opacity: 0;
+        	
+        	}
+        
+        	.payMent-input-item {
+        		width: 100%;
+        		height: 100%;
+                display: flex;
+                flex-direction: row;
+                justify-content: center;
+                height: 80upx;
+                line-height: 80upx;
+                padding: 0px 0px !important;
+                overflow: hidden;
+                
+        	}
+            .payMent-input-item > view{
+       
+                border-right: 2upx solid #000000; text-align: center;
+                height: 80upx;
+                line-height: 80upx !important;
+                overflow: hidden;
+        
+                font-size: 34px;
+                font-weight: 700;
+                width: calc(16.6% - 1px);
+            }
+    
+</style>

+ 110 - 0
components/popup.vue

@@ -0,0 +1,110 @@
+<template>
+	<view class="modalhtml" v-if="isshow">
+		<view class="modal">
+		    <view class="title">
+		       {{title}}
+		    </view>
+		    <view class="content">
+		      {{content}}
+		    </view>
+		    <view class="btns">
+		      <view class="cancel">关闭</view>
+              <view class="ok" @tap="ok">确认</view>
+		   </view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+        props: {
+           
+           
+        },
+		data() {
+			return {
+			     isshow:false,
+                 title:'提示',
+                 content:'',
+                 data:[],
+			}
+		},
+        
+		methods: {
+			open(data){
+              this.data=data;
+                this.isshow=true;
+            },
+            ok(){
+                  this.$emit('ok',this.data.ok)
+                  this.isshow=false;
+            }
+            
+		}
+	}
+</script>
+
+<style lang="scss">
+.modalhtml{
+            position: fixed;
+            z-index: 999999;
+            top:0px;
+            width: 100%;
+            left: 0px;height: 100vh;
+            background-color: rgba(0,0,0,0.7);
+            font-size: 14px;
+        }
+        .modalhtml .modal{
+            background-color: #fff;
+            border-radius: 10px;;
+            top:28vh;
+            width: 80vw;
+            left: 10vw;
+            position: fixed;
+            border: 1px #ddd solid;
+        }
+        .modalhtml .modal .title{
+            text-align: center;
+            height: 35px;
+            line-height: 35px;
+            color: #000;;
+            font-size: 16px;;
+            font-weight: 600;
+            margin-top: 5px;;
+        }
+        
+         .modalhtml .modal .content{
+             padding: 5px 10px;
+             max-height: 160px;;
+             min-height: 30px;
+             line-height: 30px;;
+             overflow-y: scroll;
+             font-size: 14px;
+         }
+         .modalhtml .modal .btns{
+             text-align: center;
+             height: 40px;
+             line-height: 40px;
+             color: #3388ff;;
+             font-size: 14px;;
+            
+            border-top: #ddd 1px solid;
+            display: table;
+            width: 100%;
+            table-layout: fixed;
+         }
+         .modalhtml .modal .btns .ok{
+         
+             display: table-cell;
+              font-weight: 600;
+             
+         }
+         .modalhtml .modal .btns .cancel{
+             color:#666;
+             
+               display: table-cell;
+              width: calc(50% - 1px);
+              border-right: #ddd solid 1px;
+             
+         }
+</style>

+ 160 - 0
components/prompt.vue

@@ -0,0 +1,160 @@
+<template>
+	<view class="prompt-box" :hidden="isHidden">
+		<view class="prompt-content contentFontColor">
+			<view class="prompt-title">{{title}}</view>
+			<view class="prompt-text">{{text}}</view>
+			<input class="prompt-input" type="text" @input="_input" :value="cost" :placeholder="placeholder"/>
+			<view class="prompt-btn-group">
+	
+				<button class="btn-item prompt-certain-btn" @tap="_confirm">{{btn_certain}}</button>
+                <button class="btn-item prompt-cancel-btn contentFontColor" @tap="_cancel">{{btn_cancel}}</button>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+	export default {
+		data() {
+			return {
+				multipleSlots: true,// 在组件定义时的选项中启用多slot支持
+				isHidden: true,
+		
+                 plac:''
+			};
+		},
+		props:{
+			title: {            
+			  type: String,    
+			  default: '提示'    
+			},
+			btn_cancel: {
+			  type: String,
+			  default: '取消'
+			},
+			btn_certain: {
+			  type: String,
+			  default: '确定'
+			},
+			text:{
+				type: String,
+				default: '',
+			},
+            placeholder:{
+                type:String,
+                default:''
+            },
+            cost: {
+              type: String,
+              default: ''
+            },
+		},
+		watch:{
+			
+		},
+		methods: {
+			hide: function () {
+			  this.isHidden=true;
+			},
+			show(e) {
+			  this.isHidden=false;
+				if(e!=null&&e!=undefined&&e!=""){
+					this.text = e;
+				}
+			},
+			/*
+			 * 内部私有方法建议以下划线开头
+	 		 * triggerEvent 用于触发事件
+			 */
+			_cancel () {
+				//触发cancel事件,即在外部,在组件上绑定cancel事件即可,bind:cancel,像绑定tap一样
+			 // this.cost = '';
+			  this.hide();
+			  this.$emit('onCancel');
+			},
+			_confirm () {
+			  //this.triggerEvent("confirm");
+			//  console.log(this.cost);
+			  this.$emit('onConfirm', this.cost);
+			 // this.cost = '';
+			},
+			_input(e){
+				//将参数传出去,这样在getInput函数中可以通过e去获得必要的参数
+				//this.triggerEvent("getInput",e.detail);
+				this.cost = e.detail.value;
+			}
+		}
+	}
+</script>
+
+<style>
+/* components/vas-prompt/vas-prompt.wxss */
+.prompt-box {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 11;
+  background: rgba(0, 0, 0, 0.5);
+}
+
+.prompt-content {
+  position: absolute;
+  left: 50%;
+  top: 40%;
+  width: 80%;
+  max-width: 600rpx;
+  border: 2rpx solid #ccc;
+  border-radius: 10rpx;
+  box-sizing: bordre-box;
+  transform: translate(-50%, -50%); 
+  overflow: hidden;
+  background: #fff;
+}
+
+.prompt-title {
+  width: 100%;
+  padding: 10rpx;
+  text-align: center;
+  font-size: 30rpx;
+  border-bottom: 2rpx solid #eee;
+  color:#333;
+  font-weight: 600;
+  
+}
+.prompt-input{
+  margin: 8%;
+  padding: 10rpx 15rpx;
+  width: 80%;
+  height:60rpx;
+  border: 1px solid #ccc;
+  border-radius: 10rpx;
+}
+.prompt-btn-group{
+  display: flex;
+}
+
+.btn-item {
+  width: 35%;
+  margin-bottom: 20rpx;
+  height: 60rpx;
+  line-height: 60rpx;
+  background-color: white;
+  justify-content: space-around;
+}
+.prompt-certain-btn{
+  color: white;
+  background-color: #2319dc;
+}
+.prompt-cancel-btn{
+   background-color: #dddddd;
+   color:#111;
+}
+.contentFontColor {
+  color: #868686;
+}
+.prompt-text{
+	margin-top:10rpx;
+	font-size:30rpx;
+}
+</style>

+ 148 - 0
components/quick-menu.vue

@@ -0,0 +1,148 @@
+<!-- 下拉菜单组件 -->
+<template>
+    <view class="quick-menu">
+        <view class="menu">
+            <view class="triangle"></view>
+            <view class="title">
+                <view class="lines" v-for="(item,index) in actions" :key="index" @click="handleClick(item, index)" >
+              <uni-icons :type='item.icon' class="icon" />
+           {{item.text}}
+                </view>
+            </view>
+        </view>
+    </view>
+</template> 
+ 
+<script>
+  import uniIcons from './uni-icons/uni-icons.vue'
+    export default {
+        components: {
+        	
+            uniIcons
+        },
+        name: 'quick-menu',
+        props: {
+            actions: {
+                type: Array,
+                default() {
+                    return []
+                }
+            }
+        },
+        methods: {
+            handleClick(data, index) {
+                if (typeof data.click === 'function') {
+                    data.click(data, index)
+                } else {
+                    this.$emit('click', data, index)
+                }
+            }
+        }
+    }
+</script>
+
+<style scoped>
+        .quick-menu{
+            width: 110px;
+            z-index: 999;
+            background-color:rgba(0,0,0,0.8);
+            position: fixed;
+             top: 90upx;
+           
+           /* #ifndef H5 */
+           top:16upx;
+           /* #endif */
+           
+            right: 0upx;
+            border-radius: 5px;
+            animation-name: zoomin;
+            animation-duration: 0.2s;
+            -webkit-animation-name: zoomin;
+            -webkit-animation-duration: 0.2s;
+            font-size: 14px;
+        }
+        .triangle {
+            width:0;
+            height:0;
+            z-index: 999;
+            position: fixed;
+        top: 70upx;
+        
+        /* #ifndef H5 */
+        top: 0upx;
+        /* #endif */
+       
+            right: 15upx;
+            border-right: 10px solid transparent;
+            border-left: 10px solid transparent;
+            border-bottom: 12px solid #393A3E;
+        }
+        
+        .lines{
+            width: calc(100% - 20px);
+            padding: 0px 10px;
+            height: 35px;
+            line-height: 35px;
+            border-bottom: 1px #fff dashed    ;
+            color: #fff;
+            text-align: center;
+        }
+            
+        .content{
+            display: flex;
+            align-items: center;
+            margin-top: 15upx;
+            padding-bottom: 15upx;
+            border-bottom: 1px solid #2E2F33;
+        }
+        
+        .lastContent{
+            display: flex;
+            align-items: center;
+            margin-top: 15upx;
+            padding-bottom: 15upx;
+        }
+            
+            
+      .lines  .icon {
+           color:#fff !important
+            
+        }
+        
+        .text {
+            color: #FFFFFF;
+            margin-top: 4upx;
+            font-size: 14px;
+        }
+        
+/* 下拉列表组件动画 */        
+        
+@keyframes zoomin {
+    from {
+        transform: scale(0.5,0.5);
+        opacity: 0;
+        filter: alpha(opacity=0);
+    }
+
+    to {
+        transform: scale(1,1);
+        opacity: 1;
+        filter: alpha(opacity=100);
+    }
+}
+
+@-webkit-keyframes zoomin {
+    from {
+        -webkit-transform: scale(0.5,0.5);
+        opacity: 0;
+        filter: alpha(opacity=0);
+    }
+
+    to {
+        -webkit-transform: scale(1,1);
+        opacity: 1;
+        filter: alpha(opacity=100);
+    }
+}
+        
+</style>

File diff ditekan karena terlalu besar
+ 61 - 0
components/result-page.vue


+ 353 - 0
components/searchitem.vue

@@ -0,0 +1,353 @@
+<template>
+	<view  class="page" >
+        
+      <scroll-view class="scroll" :style="'height:'+scrollheight+';top:'+top" lower-threshold='50' scroll-y="true" @scrolltolower="scrolltolower">
+		<block v-if="user.length>0">
+              <view class="more" style="text-align: left;padding-left: 10px;" v-if="type=='all'">人</view>
+            <view  v-for="(item, index) in user" :key="index" class="lines"  @tap="user_detail(item)">
+                
+                <view class="avatar">
+                    <image  :src="image_cache(item.avatar)"></image>
+                </view>
+                <view class="showname">
+                    <view>
+                 
+                      <rich-text :nodes="item.nickname" style="display: inline-block;"></rich-text>
+                      <span class='id'>(Id:{{item.id}})    </span> 
+                    </view>
+                    <view>
+                   <image src="../static/img/vip1.png" class="icon" v-if="item.vip>0"></image>
+                      
+                        <view v-if="item.iskefu==1" class="btn_green">客服</view>
+                        <view v-if="item.iskefu==2" class="btn_blue">官方</view>   
+                       
+                    </view>
+                   
+                </view>
+            </view>
+            
+            <view class="more"  v-if="user.length>=3 && type=='all'" @tap="showmore('user')">查看更多</view>
+        
+        </block>
+        
+        
+        <block v-if="group.length>0">
+              <view class="more" style="text-align: left;padding-left: 10px;" v-if="type=='all'">群组</view>
+            <view  v-for="(item, index) in group" :key="index" class="lines"  @tap="group_detail(item)">
+                
+                <view class="avatar">
+                    <image  :src="image_cache(item.avatar)"></image>
+                </view>
+                <view class="showname">
+                    <view>
+                 
+                      <rich-text :nodes="item.name" style="display: inline-block;"></rich-text>
+                       <span class='id'>(ID:{{item.id}})    </span> 
+                    
+                    </view>
+                    <view>
+                  <uni-icons type='person' style="font-size: 16px;font-weight: 700;"></uni-icons>
+                  {{item.people_count}}/{{item.people_max}}人
+                 
+                       
+                    </view>
+                   
+                </view>
+            </view>
+            
+            <view class="more" v-if="group.length>=3  && type=='all'" @tap="showmore('group')">查看更多群组</view>
+               </block>
+               
+           
+                <view class="loading" v-if="loading==true" >
+                	<view class="spinner">
+                		<view class="rect1"></view>
+                		<view class="rect2"></view>
+                		<view class="rect3"></view>
+                		<view class="rect4"></view>
+                		<view class="rect5"></view>
+                	</view>
+                </view>
+                </scroll-view>
+	</view>
+</template>
+
+<script>
+      import uniIcons from '../components/uni-icons/uni-icons.vue'
+        var windowHeight= uni.getSystemInfoSync().windowHeight;
+          var statusBarHeight = uni.getSystemInfoSync().statusBarHeight ;
+          var top=statusBarHeight+50;
+        var scrollheight=windowHeight - top ;
+        // #ifndef APP-PLUS
+         scrollheight=scrollheight - 50;
+        // #endif
+	export default {
+        components:{
+           uniIcons 
+        },
+        props: {
+            data: {
+                
+            },
+            type:{
+                default:'all'
+            },
+            keyword:{
+                default:''
+            },
+            loading:{
+                default:false
+            }
+        },
+		data() {
+			return {
+				user:[],
+                plan:[],
+                group:[],
+                plan_status:['未开始','进行中','已完结'],
+                scrollheight:scrollheight+'px',
+                top:top+'px'
+			};
+		},
+        watch:{
+            data(val){
+                this.init();
+            }
+        },
+       mounted() {
+           
+          this.init();
+           uni.$once('onReachBottom',function(data){  
+                      console.log('触底了!');  
+                  })  
+       },
+   
+       methods:{
+           init(){
+             this.user=this.data.user;
+             for(var i=0;i<this.user.length;i++){
+                    this.user[i].nickname=this.user[i].nickname.replace(this.keyword,'<span style="color: #ff0000">'+this.keyword+'</span>');
+                 
+             }
+             
+               this.plan=this.data.plan;
+               for(var i=0;i<this.plan.length;i++){
+                
+                      this.plan[i].title=this.plan[i].title.replace(this.keyword,'<span style="color: #ff0000">'+this.keyword+'</span>');
+                        }
+               this.group=this.data.group;
+               for(var i=0;i<this.group.length;i++){
+                      this.group[i].name=this.group[i].name.replace(this.keyword,'<span style="color: #ff0000">'+this.keyword+'</span>');
+                     }
+               
+           },
+           showmore(type){
+             this.$emit('showmore',type);  
+           },
+           user_detail(item){
+           
+                this.$jump('friend.detail',{id:item.id});
+           },
+           plan_detail(item){
+           
+                this.$jump('plan.detail',{id:item.id});
+           },
+           group_detail(m){
+               this.$jump('group.detail', {
+               	id: m.id,
+               	from:'search'
+               });
+           },
+           
+           scrolltolower() {
+               console.log(this.type,1)
+              if(this.type!='all'){
+                  this.$emit('getnext',this.type);
+              } 
+           },
+       }
+	}
+</script>
+
+<style lang="scss">
+   .page{
+   font-size: 14px;
+       background-color: #FAFAFA;
+   } 
+   .page .scroll{
+       position: fixed;
+       left: 0px;
+       width: 100%;
+       z-index: 1;
+   }
+    
+ .lines{
+        padding: 5px 0px;
+       
+        height: 50px;
+        line-height: 50px;
+        display: table;
+        table-layout: fixed;
+        width: calc(100% - 0px);
+        background-color: #fff;
+        margin-bottom: 10px;
+    font-size: 14px;
+    }
+    .lines .avatar{
+        display: table-cell;
+        width: 70px;
+        text-align: center;
+    }
+    .lines .avatar  > image{
+        height: 50px;
+        width: 50px;
+        border-radius: 5px;;
+        vertical-align: middle;
+    }
+     .lines .showname {
+         text-align:left;
+         display: table-cell;
+         font-size: 14px;
+   
+         color: #333;
+         line-height: 25px;;
+         vertical-align: middle;
+          margin: 0px 0px;
+          padding: 0px 0px;
+            
+               }
+               
+  .lines .id{
+      font-size: 12px;
+      color: #666;
+      margin-left: 5px;
+  }  
+             .lines .icon{
+                   margin: 0px 2px;
+                   height: 20px;
+                   width: 20px;
+                   display: inline-block;
+             }
+               .btn_yellow{
+                   background-color: yellow;
+                   color: #000;
+                   font-size: 12px;
+                   display: inline-block;
+                   height:18px;
+                   line-height: 18px;
+                   padding: 0px 5px;
+                   border-radius: 5px;
+                   text-align: center;
+                    margin: 0px 2px;
+               }
+               .btn_green{
+                   background-color: #0aad6c;
+                   color: #fff;font-size: 12px;
+                   display: inline-block;
+                   height: 18px;
+                   line-height: 18px;
+                   padding: 0px 5px;
+                   border-radius: 5px;
+                   text-align: center;
+               
+                   margin: 0px 2px;
+               }
+               .btn_blue{
+                   background-color: #2319dc;
+                   color: #fff;font-size: 12px;
+                   display: inline-block;
+                   height: 18px;
+                   line-height: 18px;
+                   padding: 0px 5px;
+                   border-radius: 5px;
+                   text-align: center;
+                margin: 0px 2px;
+               }
+               
+               .btn_grey{
+                   background-color: #ddd;
+                   color: #000;font-size: 12px;
+                   display: inline-block;
+                   height: 18px;
+                   line-height: 18px;
+                   padding: 0px 5px;
+                   border-radius: 5px;
+                   text-align: center;
+                    margin: 0px 2px;
+               }
+               .nodata{
+                   height: 35px;
+                   line-height: 35px;
+                   color: #666;
+                   font-size: 12px;
+                   text-align: center;
+               }
+               
+               .more{
+                   height: 25px;
+                   line-height: 25px;
+                   color: #333;
+                   font-size: 14px;
+                   text-align: center;
+               }
+               .color-0{
+                   color: #666;
+               }
+               .color-1{
+                   color: #0aad6c;
+               }
+               .color-2{
+                   color:#ff6600;
+               }
+     .loading {
+     	//loading动画
+     	display: flex;
+     	justify-content: center;
+     padding-bottom: 20px;
+     	@keyframes stretchdelay {
+     
+     		0%,
+     		40%,
+     		100% {
+     			transform: scaleY(0.6);
+     		}
+     
+     		20% {
+     			transform: scaleY(1.0);
+     		}
+     	}
+     
+     	.spinner {
+     		margin: 20upx 0;
+     		width: 60upx;
+     		height: 25px;
+     		display: flex;
+     		align-items: center;
+     		justify-content: space-between;
+     
+     		view {
+     			background-color: #ff9800;
+     			height: 25px;
+     			width: 3px;
+     			border-radius: 3px;
+     			animation: stretchdelay 1.2s infinite ease-in-out;
+     		}
+     
+     		.rect2 {
+     			animation-delay: -1.1s;
+     		}
+     
+     		.rect3 {
+     			animation-delay: -1.0s;
+     		}
+     
+     		.rect4 {
+     			animation-delay: -0.9s;
+     		}
+     
+     		.rect5 {
+     			animation-delay: -0.8s;
+     		}
+     	}
+     }          
+</style>

+ 974 - 0
components/sender.vue

@@ -0,0 +1,974 @@
+<template>
+    <view>
+        <view v-if="showPanel" style="height:75px;display: block;">
+        </view>
+        <view class="v-sender" id="v-send">
+            <view class="v-sender__control v-sender__control_t" v-if="qute && qute.id && !voice">
+                <!-- #ifndef H5 -->
+                <view class="emoji" style="width: 64rpx;">
+                </view>
+                <!-- #endif -->
+                <!-- 引用 -->
+                <view class=" textarea qute-wrap">
+                    <!-- 文本 -->
+                    <template  v-if="qute.message.type == 'text'">
+                        <view class="content" v-if="qute.message.content.type && qute.message.content.type == 'remind'">
+                            {{qute.sender.nickname}}: <text v-html="showCall(qute.message.content.content)"></text>
+                        </view>
+                        <view class="content" v-else>
+                            {{qute.sender.nickname}}:{{qute.message && qute.message.content ? qute.message.content: ''}}
+                        </view>
+                    </template>
+                    
+                    <!--  -->
+                   <view class="content" v-if="qute.message.type == 'emotion'">
+                         {{qute.sender.nickname}}:{{qute.message && qute.message.content.content ? qute.message.content.content: ''}}
+                    </view>
+                    <view class="content" v-if="qute.message.type == 'image'">
+                         {{qute.sender.nickname}}:[图片]
+                    </view>
+                    <image src="../static/img/del.png" mode="" @click="clearQute"></image>
+                </view>
+            </view>
+            <view class="v-sender__control">
+                <!-- #ifndef H5 -->
+                <view class="emoji" @tap="sendVoice">
+                    <text v-if="!voice && !noSpeaking" class="n-icon n-icon-voice"></text>
+                    <text v-else class="n-icon n-icon-keyboard"></text>
+                </view>
+                <!-- #endif -->
+                <block v-if="noSpeaking">
+                    <view class="falseinput"
+                        style="text-align: center;color: #999;margin-left: 16upx;margin-right: 20upx;margin-left:10px;">
+                        {{speaking_tips}}
+                    </view>
+                </block>
+                <block v-else>
+                   <textarea   v-if="!voice" ref="shuru" id="sendbox" maxlength="99999999999" auto-height="true"
+                       :class="{'textarea':true,'input':input_value && !voice}" v-model="input_value" 
+                       type="text" @input="listen('input', $event.detail.value)" @confirm="set_focos()"
+                       @tap="sendertap();" confirm-type='发送' adjust-position="ture" confirm-hold="true"
+                       cursor-spacing="15" style="overflow-y: auto;" :focus='focusState'>
+                   </textarea>
+                    <view v-if="voice" :class="{'falseinput':true,'press':setting}"
+                        style="text-align: center;color: #222;margin-right: 20upx;" @touchstart="startVoice"
+                        @touchend="endVoice" @touchmove.stop.prevent="voiceIng" @touchcancel="voiceCancel">{{voiceTis}}
+                    </view>
+                    <!-- 图片/表情 -->
+                    <view class="emoji" @tap="showemoji();" v-if="!emoji"><text class="n-icon n-icon-face"></text>
+                    </view>
+                    <view class="emoji" @tap="hideemoji();" v-if="emoji"><text class="n-icon n-icon-keyboard"></text>
+                    </view>
+                    <view class="btn sendbtn" v-if="input_value && !voice" @touchend.prevent="tapsender">发送</view>
+                    <view class="bigbox3" v-if="!input_value && !voice">
+                        <view class="emoji" @tap="show_panel();" v-if="!showPanel&&!input_value"><text>&#xe634;</text>
+                        </view>
+                        <view class="emoji" @tap="hide_panel();" v-else-if="showPanel&&!input_value">
+                            <text>&#xe603;</text>
+                        </view>
+                    </view>
+                </block>
+            </view>
+            <view class="record" :class="setting?'':'hidden'">
+                <view class="ing" :class="willStop?'hidden':''">
+                    <view class="icon luyin2"></view>
+                </view>
+                <view class="cancel" :class="willStop?'':'hidden'">
+                    <view class="icon chehui"></view>
+                </view>
+                <view class="tis" :class="willStop?'change':''">{{recordTis}}</view>
+            </view>
+            <view v-if="emoji" class="face_box">
+                <view style="width: 100%;">
+                    <view class="emotion-box" style="height:200px">
+                        <view class="emotion-box-line" v-for="(line, i) in lists" :key="i">
+                            <view class="emotion-item" v-for="(item, index) in line" :key="index"
+                                @click="handleEmotion(item)">
+                                <image :src="'/static/emoji/'+item.name+'.gif'" style="width: 50rpx;height: 50rpx;">
+                                </image>
+                            </view>
+                        </view>
+                    </view>
+                </view>
+            </view>
+            <view v-if="showPanel" class="v-sender__panel">
+                <view @click="sendImg('album')">
+                    <view class="icons"><text class="n-icon n-icon-image"></text></view>
+                    <view>图片</view>
+                </view>
+                <view class="box" @click="sendImg('camera')">
+                    <view class="icons"><text class="n-icon n-icon-paizhao"></text></view>
+                    <view>拍照</view>
+                </view>
+                <view class="box" @click="sendVedio('album')">
+                    <view class="icons">
+                        <image src="../static/img/vedio.png"></image>
+                    </view>
+                    <view>视频</view>
+                </view>
+                <view class="box" @click="sendVedio('camera')">
+                    <view class="icons">
+                        <image src="../static/img/camera.png"></image>
+                    </view>
+                    <view>录像</view>
+                </view>
+                <!-- <view class="box" @click="sendRedpactet()">
+            	<view  class="icons"><image src="../static/img/redpacket.png" style="width: 26px;" ></image></view>
+            	<view>红包</view>
+            </view> -->
+            </view>
+        </view>
+    </view>
+</template>
+
+<script>
+    const recorderManager = uni.getRecorderManager();
+
+    const {
+        windowWidth,
+        windowHeight
+    } = uni.getSystemInfoSync();
+
+    import helper from "../library/helper.js"
+    import api from "../library/index.js"
+    import action from "../library/action.js"
+    export default {
+        name: 'v-sender',
+        props: {
+
+            placeholder: {
+                type: String,
+                default: '说点什么吧'
+            },
+            value: {
+                type: String,
+                default: ''
+            },
+            noSpeaking: {
+                type: Boolean,
+                default: false
+            },
+            speaking_tips: {
+
+            },
+
+            forbidRedpack: {
+                type: Boolean,
+                default: false
+            },
+            showboard: {
+                type: Boolean,
+                default: false
+            },
+            groupid: {
+                type: [Number, String],
+                default: 0
+            },
+            isgroup: {
+                default: 0
+            },
+            sendtype: {
+                type: [Number, String],
+                default: 'text'
+            }
+        },
+
+
+        data() {
+            return {
+                focusState: false,
+                qute: {},
+                showPanel: false,
+                showPacket: false,
+                voice: false,
+                text: 'uni-app',
+                voicePath: '',
+                setting: false,
+                emoji: false,
+                faceImg: {},
+                swipers: [],
+
+                voiceTis: '按住 说话',
+                recordTis: "手指上滑 取消发送",
+                recording: false,
+                willStop: false,
+                initPoint: {
+                    identifier: 0,
+                    Y: 0
+                },
+                recordTimer: null,
+                recordLength: 0,
+                mids: {},
+                uploadnum: 0,
+                starttime: 0,
+                endtime: 0,
+                voice_mid: '',
+                focus: false,
+                input_value: '',
+                area_value: '',
+                inputclass: 'textarea',
+                sendtime: 0,
+                keyboardheight: 0,
+                borderheight: 0,
+                user: uni.getStorageSync('userInfo'),
+                list: [
+                    ['微笑', '撇嘴', '色', '发呆', '得意', '流泪', '害羞', '闭嘴'],
+                    ['睡', '大哭', '尴尬', '发怒', '调皮', '呲牙', '惊讶', '难过'],
+                    ['酷', '冷汗', '抓狂', '吐', '偷笑', '可爱', '白眼', '傲慢'],
+                    ['饥饿', '困', '惊恐', '流汗', '憨笑', '大兵', '奋斗', '咒骂'],
+                    ['疑问', '嘘', '晕', '折磨', '衰', '骷髅', '敲打', '再见'],
+                    ['擦汗', '抠鼻', '鼓掌', '糗大了', '坏笑', '左哼哼', '右哼哼', '哈欠'],
+                    ['鄙视', '委屈', '快哭了', '阴险', '亲亲', '吓', '可怜', '菜刀'],
+                    ['西瓜', '啤酒', '篮球', '乒乓', '咖啡', '饭', '猪头', '玫瑰', ],
+                    ['凋谢', '示爱', '爱心', '心碎', '蛋糕', '闪电', '炸弹', '刀'],
+                    ['足球', '瓢虫', '便便', '月亮', '太阳', '礼物', '拥抱', '强'],
+                    ['弱', '握手', '胜利', '抱拳', '勾引', '拳头', '差劲', '爱你'],
+                    ['NO', 'OK', '爱情', '飞吻', '跳跳', '发抖', '怄火', '转圈'],
+                    ['磕头', '回头', '跳绳', '挥手', '激动', '闭嘴', '笑哭', '吐舌'],
+                    ['耶', '跳舞', '恐惧', '失望', '脸红', '无语', '奸笑', '嘿哈'],
+                    ['鬼混', '福', '合十', '强壮', '红包', '发财', '庆祝', '礼物']
+                ],
+                reg: /\S{1,3}/gi,
+                lists: [],
+                listss: []
+            }
+        },
+
+
+        mounted() {
+
+            let that = this;
+            // #ifdef APP-PLUS
+            recorderManager.onStart((e) => {
+
+                this.recordBegin(e);
+            })
+            recorderManager.onStop(res => {
+                this.recordStop(res);
+
+            });
+
+
+
+
+            // #endif
+            var value = '';
+            this.list = this.list.map((line, index) => {
+                this.listss = [];
+                line = line.map((item, idx) => {
+
+                    value = item;
+
+                    item = item.replace(/\S{1,3}/gi, this.emotion(item));
+
+                    this.listss.push({
+                        "name": item,
+                        "index": index,
+                        "value": value,
+                        "idx": idx
+                    })
+
+                    return item;
+
+                })
+
+                this.lists.push(this.listss);
+
+                return line;
+            })
+
+
+
+
+
+
+        },
+        computed: {
+
+            sendShowing() {
+                return this.value.length > 0
+            },
+        },
+        methods: {
+            showCall(val) {
+                val = val + ''
+                let str = ''
+                if(val) {
+                    str = val.replace(/<span.*?>|<\/span>/g, "")
+                }
+                return str
+            },
+            // 清理引用
+            clearQute() {
+              this.qute = {}  
+            },
+            // 保存引用
+            setQute(item) {
+                let that = this
+                that.qute = item
+                console.log('that.qute',that.qute);
+                let data = this.$refs.shuru
+               that.focusState = false
+               
+                this.$nextTick(()=> {
+                    that.focusState = true
+                })
+            },
+            emotion(res) {
+                //let word = res.replace(/\#|\;/gi,'')
+
+                const list = ['微笑', '撇嘴', '色', '发呆', '得意', '流泪', '害羞', '闭嘴', '睡', '大哭', '尴尬', '发怒', '调皮', '呲牙', '惊讶',
+                    '难过', '酷', '冷汗', '抓狂', '吐', '偷笑', '可爱', '白眼', '傲慢', '饥饿', '困', '惊恐', '流汗', '憨笑', '大兵', '奋斗',
+                    '咒骂', '疑问', '嘘', '晕', '折磨', '衰', '骷髅', '敲打', '再见', '擦汗', '抠鼻', '鼓掌', '糗大了', '坏笑', '左哼哼', '右哼哼',
+                    '哈欠', '鄙视', '委屈', '快哭了', '阴险', '亲亲', '吓', '可怜', '菜刀', '西瓜', '啤酒', '篮球', '乒乓', '咖啡', '饭', '猪头',
+                    '玫瑰', '凋谢', '示爱', '爱心', '心碎', '蛋糕', '闪电', '炸弹', '刀', '足球', '瓢虫', '便便', '月亮', '太阳', '礼物', '拥抱',
+                    '强', '弱', '握手', '胜利', '抱拳', '勾引', '拳头', '差劲', '爱你', 'NO', 'OK', '爱情', '飞吻', '跳跳', '发抖', '怄火',
+                    '转圈', '磕头', '回头', '跳绳', '挥手', '激动', '闭嘴', '笑哭', '吐舌', '耶', '跳舞', '恐惧', '失望', '脸红', '无语', '奸笑',
+                    '嘿哈', '鬼混', '福', '合十', '强壮', '红包', '发财', '庆祝', '礼物'
+                ]
+                let index = list.indexOf(res)
+                var index1 = index + 100;
+                return index1
+            },
+            showemoji() {
+                this.showPanel = false;
+                this.emoji = true;
+                //   this.setChatHeight();
+            },
+            hideemoji() {
+                this.showPanel = false;
+
+                this.emoji = false;
+                //  this.setChatHeight();
+            },
+
+            show_panel() {
+                this.showPanel = true;
+                this.emoji = false;
+                this.setChatHeight();
+            },
+            hide_panel() {
+                this.showPanel = false;
+                this.emoji = false;
+                this.setChatHeight();
+            },
+
+            setChatHeight() {
+                // 
+
+                //  console.log(this.sendHeight);
+                var that = this;
+                setTimeout(() => {
+
+                    var that = this;
+                    var query = uni.createSelectorQuery(); // 这里要加上select
+
+                    query.in(that).select('#v-send').boundingClientRect(res => {
+                        var hh = (parseInt(res.height) - 60);
+                        this.$emit("senderheight", hh);
+
+                    }).exec();
+
+                }, 100);
+            },
+
+            sendVedio(type) {
+                let that = this
+                uni.chooseVideo({
+                    sourceType: [type],
+                    maxDuration: 15,
+                    compressed: false,
+
+                    success(re) {
+                        // console.log(re.tempFilePath);
+                        //console.log(re.tempFilePaths[0]);
+                        that.sendertap();
+
+                        var mids = 'm' + Math.random().toString(36).substring(2);
+
+
+                        var duration = re.duration;
+                        that.$emit('sendVedio', {
+                            mid: mids,
+                            src: re.tempFilePath,
+                            time: duration
+                        });
+                        var _that = that;
+                        helper.uploadFiles([re.tempFilePath], 'Vedio', {
+                            type: 'vedio'
+                        }).then(res => {
+
+                            that.$emit('sendVedio', {
+                                mid: mids,
+                                src: res,
+                                time: duration
+                            });
+                        });
+
+
+                    }
+                })
+            },
+
+            sendImg(type) {
+                let that = this
+                uni.chooseImage({
+                    sourceType: [type],
+                    sizeType: ['original', 'compressed'],
+                    success(re) {
+                        //console.log(re.tempFilePaths.length);
+                        //console.log(re.tempFilePaths[0]);
+                        that.sendertap();
+                        that.uploadnum = 0;
+                        for (var i = 0; i < re.tempFilePaths.length; i++) {
+                            that.mids[i] = 'm' + Math.random().toString(36).substring(2);
+                            // that.$emit('sendImage', {mid:that.mids[i],src: re.tempFilePaths[i]});
+                            var _that = that;
+                            //  console.log(re.tempFilePaths[i]);
+                            helper.uploadFiles([re.tempFilePaths[i]], 'images', {
+                                type: 'images'
+                            }).then(res => {
+
+                                that.$emit('sendImage', {
+                                    mid: _that.mids[that.uploadnum],
+                                    src: res
+                                });
+                            });
+                        }
+
+                    }
+                })
+            },
+
+
+            sendRedpactet() {
+
+                if (this.user.banknum < 1) {
+                    uni.showModal({
+                        title: '提示',
+                        content: "绑定银行卡后才可以发送红包",
+                        showCancel: true,
+                        cancelText: '关闭',
+                        confirmText: '立即绑定',
+                        success: res => {
+                            if (res.confirm) {
+                                uni.navigateTo({
+                                    url: "/pages/mine/bank"
+                                })
+                            }
+                        }
+                    });
+                    return false;
+                } else {
+                    uni.navigateTo({
+                        url: '../friend/readpacket?isgroup=' + this.isgroup + '&id=' + this.groupid
+                    })
+                }
+
+                this.hide_panel();
+
+            },
+            listen(name, eventOrValue) {
+
+                this.$emit(name, eventOrValue);
+                this.focus = false;
+            },
+            set_focos() {
+                if (this.focus == false) this.focus = true;
+            },
+            getfocus(detail) {
+
+                this.boardheight = detail.height;
+                // #ifdef APP-PLUS
+                if (plus.os.name == 'Android') this.$emit("keyboardheight", detail.height);
+                // #endif
+
+
+            },
+            unfocus() {
+                this.boardheight = 0;
+                //   console.log('sender失去焦点')
+                this.$emit("keyboardheight", 0);
+
+            },
+            unfocus1() {
+                // console.log('box失去焦点')
+                this.$emit("keyboardheight", 0);
+
+            },
+            sendertap() {
+
+                this.showPanel = false;
+
+                this.emoji = false;
+                // z  uni.hideKeyboard();
+
+            },
+
+            setinputvalue(e) {
+                this.input_value = this.input_value + e + ' ';
+                this.$emit('input', this.input_value);
+            },
+            istap() {
+
+            },
+            tapsender() {
+
+                //this.inputclass='textarea sending'
+                if (this.input_value != '') {
+
+
+
+                    var that = this;
+                    //  setTimeout(function(){that.$emit('send',that.$event);},1000)
+                    that.$emit('send', that.$event);
+                    this.area_value = '';
+                    this.input_value = '';
+                    //that.$emit("senderheight",0);   
+                    //this.keyboardheight=this.boardheight;
+
+                    //  this.$emit("senderheight",300);
+                    if (this.sendtype != 'text') {
+                        this.hideemoji();
+                        this.hide_panel();
+                    }
+                    // #ifdef APP-PLUS
+                    //if(plus.os.name=="iOS") uni.hideKeyboard();
+                    // #endif
+
+
+                }
+
+
+
+            },
+
+            listen1(e) {
+                //   console.log(e);
+                this.input_value = e;
+                this.listen('input', e);
+                //   console.log(e);
+
+            },
+            clickbox(e) {
+                var x = e.touches[0].clientX;
+                var y = e.touches[0].clientY;
+                //  console.log( windowWidth-x, windowHeight-y)
+                if (windowWidth - x < 65) this.tapsender();
+            },
+            startVoice(e) {
+                this.setting = true;
+                this.willStop = false;
+                this.voiceTis = '手指上滑 取消发送'
+                recorderManager.start({
+                    format: 'mp3',
+                    numberOfChannels: 2,
+                    duration: 6000
+                });
+                this.starttime = new Date().getTime();
+                this.initPoint.Y = e.touches[0].clientY;
+                this.initPoint.identifier = e.touches[0].identifier;
+                console.log('start');
+            },
+            //录音开始UI效果
+            recordBegin(e) {
+
+                /** 暂停语音播放 */
+                console.log('录音开始UI效果');
+                recorderManager.pause();
+
+                this.setting = true;
+                this.voiceTis = '松开 结束';
+                this.recordLength = 0;
+                this.recordTimer = setInterval(() => {
+                    this.recordLength++;
+                }, 1000)
+            },
+            //录音停止   上传到服务器
+            recordStop(res) {
+                var that = this;
+                this.endtime = new Date().getTime();
+                that.voicePath = res.tempFilePath;
+                if (!this.willStop) {
+
+                    if (this.endtime - this.starttime < 1000) return that.$toast('时间太短了');
+                    var duration = (this.endtime - this.starttime) / 1000;
+                    this.voice_mid = 'm' + Math.random().toString(36).substring(2);
+                    that.$emit('face', {
+                        url: that.voicePath,
+                        time: duration.toFixed(2),
+                        mid: this.voice_mid
+                    })
+                    helper.uploadFiles([that.voicePath], 'audio', {
+                        type: 'audio'
+                    }).then(res => {
+
+                        that.$emit('face', {
+                            url: res,
+                            time: duration.toFixed(2),
+                            mid: this.voice_mid
+                        })
+
+                    });
+                    action.playVoice('/static/voice/voice.mp3');
+                } else {
+                    console.log('取消发送录音');
+                }
+            },
+            // 录音被打断
+            voiceCancel() {
+                this.setting = false;
+
+                this.willStop = true; //不发送录音
+                recorderManager.stop(); //录音结束
+                this.voiceTis = '按住 说话';
+                this.recordTis = '手指上滑 取消发送'
+            },
+            // 录音中(判断是否触发上滑取消发送)
+            voiceIng(e) {
+                if (!this.setting) {
+                    return;
+                }
+                let touche = e.touches[0];
+                //上滑一个导航栏的高度触发上滑取消发送
+                if (this.initPoint.Y - touche.clientY >= uni.upx2px(100)) {
+                    this.willStop = true;
+                    this.recordTis = '松开手指 取消发送'
+                } else {
+                    this.willStop = false;
+                    this.recordTis = '手指上滑 取消发送'
+                }
+            },
+
+            endVoice() {
+                this.setting = false
+                recorderManager.stop();
+                this.voiceTis = '按住 说话';
+                this.recordTis = '手指上滑 取消发送';
+
+
+            },
+            sendVoice() {
+                this.voice = !this.voice;
+            },
+            getEmoji() {
+
+            },
+            sendEmoji(e) {
+                //this.showPanel = false;
+                this.emoji = false
+                this.$emit('emoji', e)
+            },
+            handleEmotion(item) {
+                var v = item.value;
+
+                this.input_value += '[' + v + ']';
+                this.area_value = this.input_value
+                this.listen1(this.input_value);
+
+                this.$emit('handleEmotion', this.input_value);
+
+            },
+        },
+        created() {
+            this.getEmoji()
+        },
+        onLoad() {
+
+
+        },
+    }
+</script>
+
+<style lang="scss" scoped>
+    @import "@/static/css/chat/style.scss";
+    $control-height: 120upx;
+    $input-height: $control-height - $uni-spacing-col-base * 2;
+
+    .face_box {
+        position: fixed;
+        bottom: 60px;
+        ;
+        left: 1px;
+        width: calc(100% - 4px);
+        z-index: 99;
+        background-color: #fff;
+        border: 1px #ddd solid;
+        padding-top: 5px;
+        ;
+        border-top-right-radius: 5px;
+        border-top-left-radius: 5px;
+    }
+
+    .faceImg {
+        width: 100upx;
+        flex-basis: 100upx;
+    }
+
+    .n-icon {
+        font-size: 33px;
+        line-height: 33px;
+        color: #333;
+        vertical-align: middle;
+    }
+
+    .icons {
+        height: 70upx;
+        line-height: 70upx;
+        vertical-align: middle;
+    }
+
+    .icons image {
+        width: 65upx;
+        height: 55upx;
+        vertical-align: middle;
+    }
+
+    .bigbox {
+        position: fixed;
+        bottom: 0px;
+        left: 110upx;
+        width: calc(100vw - 100upx);
+        height: 120upx;
+        line-height: 120upx;
+        padding: 0px;
+        z-index: 0;
+
+        border: 0px #eee solid;
+        color: transparent !important;
+    }
+
+    .bigbox2 {
+        position: absolute;
+        top: 10px;
+        right: 80upx;
+        width: 84upx;
+        height: 120upx;
+        line-height: 120upx;
+        padding: 0px;
+        z-index: 10;
+        border: 0px #eee solid;
+
+    }
+
+    .bigbox3 {
+        position: absolute;
+        top: 10px;
+        right: 0upx;
+        width: 80upx;
+        height: 120upx;
+        line-height: 120upx;
+
+        padding: 0px;
+        z-index: 0;
+        text-align: right;
+        justify-content: right;
+        border: 0px #eee solid;
+
+    }
+
+
+
+
+    .sending {
+        color: transparent !important;
+    }
+
+    .v-sender {
+        z-index: 99999999;
+        position: fixed;
+        bottom: 0;
+        left: 0;
+        width: 99vw;
+        padding-left: 1vw;
+        background-color: #fafafa;
+        border-top: 1px solid #ddd;
+        
+        &__panel,
+        
+        &__control {
+            position: relative;
+            width: 100%;
+           
+            &::before {
+                display: block;
+                content: '\20';
+                position: absolute;
+                top: 0;
+                left: 0;
+                width: 100%;
+                // background-color: #ddd;
+                height: 1upx;
+                transform: scaleY(0.5);
+            }
+        }
+
+        &__panel {
+            width: 100%;
+            display: table;
+            padding: 20upx 0;
+            font-size: 28upx;
+            background: #fafafa;
+
+            >view {
+                .n-icon {
+                    font-size: 33px;
+                    color: #999;
+                }
+
+                text-align: center;
+                display: table-cell;
+            }
+        }
+
+        &__control {
+            height: $control-height;
+
+            padding: $uni-spacing-col-base 0px $uni-spacing-col-base 0;
+
+            &,
+            .emoji,
+            .btn {
+                display: flex;
+                flex-direction: row;
+                flex-wrap: nowrap;
+                align-items: center;
+                box-sizing: border-box;
+
+            }
+
+            >.emoji,
+            >.btn,
+            >input {
+                margin-left: $uni-spacing-row-base;
+            }
+
+            view {
+
+                height: $input-height;
+                flex-shrink: 0;
+            }
+
+            .emoji {
+                font-size: 64upx;
+                line-height: $input-height;
+            }
+
+            input,
+            .falseinput {
+                flex: 1;
+                height: $input-height;
+                border-radius: $uni-border-radius-base;
+
+                box-sizing: border-box;
+                background-color: #ccc;
+                height: 68upx;
+                line-height: 68upx;
+                margin-left: 10px;
+                ;
+            }
+
+            .falseinput.press {
+                background-color: #666;
+                color: #fff !important;
+            }
+
+            .btn {
+                line-height: $input-height - 10upx;
+                height: $input-height - 10upx;
+                color: #fff;
+                text-align: center;
+                background-color: $uni-color-primary;
+            }
+        }
+        &__control_t {
+            height: 80upx;
+            padding: 0;
+            .qute-wrap {
+                border: none;
+                background-color: #eaeaea;
+               height: 40upx;
+               font-size: 26upx;
+               color: #6d6d6d;
+               display: flex;
+               justify-content: space-between;
+               flex-wrap: nowrap;
+               .content {
+                flex-grow: 1;
+                text-overflow:ellipsis;
+                white-space:nowrap;
+                overflow:hidden;
+                max-width: 90%;
+               }
+               image {
+                   flex-shrink: 0;
+                   width: 28upx;
+                   height: 28upx;
+               }
+            }
+        }
+    }
+
+    .textarea,
+    .textareas {
+        font-size: 32upx;
+        background: #fff;
+        border: 1px solid #ddd;
+        max-height: 80upx;
+        min-height: 40upx;
+        line-height: 40upx;
+        padding: 12upx 10upx;
+        border-radius: 3px;
+        ;
+    }
+
+    .textarea {
+        margin-left: 10px;
+        /* #ifndef H5 */
+        width: calc(100% - 290upx);
+        /* #endif */
+
+
+        /* #ifdef H5 */
+        width: calc(100% - 210upx);
+        /* #endif */
+
+    }
+
+    .textarea.input {
+        /* #ifndef H5 */
+        width: calc(100% - 360upx);
+        /* #endif */
+
+
+        /* #ifdef H5 */
+        width: calc(100% - 280upx);
+        /* #endif */
+    }
+
+    .sendbtn {
+
+        margin-left: 16upx !important;
+        padding: 0px 40upx !important;
+
+    }
+
+    .emotion-box {
+        margin: 0 auto;
+        width: calc(100% - 4px);
+        box-sizing: border-box;
+        padding: 2px;
+        overflow: hidden;
+        overflow-y: auto;
+    }
+
+    .emotion-box-line {
+        display: flex;
+    }
+
+    .emotion-item {
+        flex: 1;
+        text-align: center;
+        cursor: pointer;
+    }
+</style>

+ 371 - 0
components/simple-address.nvue

@@ -0,0 +1,371 @@
+<template>
+	<view class="simple-address"  @touchmove.stop.prevent="clear">
+		<!-- 遮罩层 -->
+		<view class="simple-address-mask" @touchmove.stop.prevent="clear" v-if="maskClick" :class="[ani+'-mask', animation ? 'mask-ani' : '']" :style="{
+					'background-color': maskBgColor
+				}"
+		 @tap="hideMask(true)"></view>
+
+		<view class="simple-address-content simple-address--fixed" :class="[type,ani+'-content', animation ? 'content-ani' : '']">
+			<view class="simple-address__header">
+				<view class="simple-address__header-btn-box" @click="pickerCancel">
+					<text class="simple-address__header-text">取消</text>
+				</view>
+				<view class="simple-address__header-btn-box" @click="pickerConfirm">
+					<text class="simple-address__header-text" :style="{color:themeColor}">确定</text>
+				</view>
+			</view>
+			<view class="simple-address__box">
+				<picker-view indicator-style="height: 70rpx;" class="simple-address-view" :value="pickerValue" @change="pickerChange">
+
+					<picker-view-column>
+						<!-- #ifndef APP-NVUE -->
+						<view class="picker-item" v-for="(item,index) in provinceDataList" :key="index">{{item.label}}</view>
+						<!-- #endif -->
+						<!-- #ifdef APP-NVUE -->
+						<text class="picker-item" v-for="(item,index) in provinceDataList" :key="index">{{item.label}}</text>
+						<!-- #endif -->
+					</picker-view-column>
+					<picker-view-column>
+						<!-- #ifndef APP-NVUE -->
+						<view class="picker-item" v-for="(item,index) in cityDataList" :key="index">{{item.label}}</view>
+						<!-- #endif -->
+						<!-- #ifdef APP-NVUE -->
+						<text class="picker-item" v-for="(item,index) in cityDataList" :key="index">{{item.label}}</text>
+						<!-- #endif -->
+
+					</picker-view-column>
+					<picker-view-column>
+						<!-- #ifndef APP-NVUE -->
+						<view class="picker-item" v-for="(item,index) in areaDataList" :key="index">{{item.label}}</view>
+						<!-- #endif -->
+						<!-- #ifdef APP-NVUE -->
+						<text class="picker-item" v-for="(item,index) in areaDataList" :key="index">{{item.label}}</text>
+						<!-- #endif -->
+
+					</picker-view-column>
+
+				</picker-view>
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import provinceData from './city-data/province.js';
+	import cityData from './city-data/city.js';
+	import areaData from './city-data/area.js';
+	export default {
+		name: "simpleAddress",
+		props: {
+			// 开启动画
+			animation: {
+				type: Boolean,
+				default: true
+			},
+			/* 弹出层类型,可选值;
+				bottom:底部弹出层
+			*/
+			type: {
+				type: String,
+				default: 'bottom'
+			},
+			// maskClick
+			maskClick: {
+				type: Boolean,
+				default: true
+			},
+			show: {
+				type: Boolean,
+				default: true
+			},
+			maskBgColor: {
+				type: String,
+				default: 'rgba(0, 0, 0, 0.4)', //背景颜色 rgba(0, 0, 0, 0.4) 为空则调用 uni.scss
+			},
+			themeColor: {
+				type: String,
+				default: '', // 主题色
+			},
+            showPopup:{
+              type:Boolean,
+                default:0
+            },
+			/* 默认值 */
+			pickerValueDefault: {
+				type: Array,
+				default () {
+					return [0, 0, 0]
+				}
+			},
+		},
+		data() {
+			return {
+				ani: '',
+				pickerValue: [0, 0, 0],
+				provinceDataList: [],
+				cityDataList: [],
+				areaDataList: [],
+			}
+		},
+		watch: {
+			show(newValue) {
+				if (newValue) {
+					this.open()
+				} else {
+					this.close()
+				}
+			},
+			pickerValueDefault() {
+				this.init();
+			}
+		},
+		created() {
+			this.init()
+		},
+		methods: {
+			init() {
+				this.handPickValueDefault(); // 对 pickerValueDefault 做兼容处理
+				this.provinceDataList = provinceData;
+				this.cityDataList = cityData[this.pickerValueDefault[0]];
+				this.areaDataList = areaData[this.pickerValueDefault[0]][this.pickerValueDefault[1]];
+				this.pickerValue = this.pickerValueDefault;
+			},
+			handPickValueDefault() {
+				if (this.pickerValueDefault !== [0, 0, 0]) {
+					if (this.pickerValueDefault[0] > provinceData.length - 1) {
+						this.pickerValueDefault[0] = provinceData.length - 1;
+					}
+					if (this.pickerValueDefault[1] > cityData[this.pickerValueDefault[0]].length - 1) {
+						this.pickerValueDefault[1] = cityData[this.pickerValueDefault[0]].length - 1;
+					}
+					if (this.pickerValueDefault[2] > areaData[this.pickerValueDefault[0]][this.pickerValueDefault[1]].length - 1) {
+						this.pickerValueDefault[2] = areaData[this.pickerValueDefault[0]][this.pickerValueDefault[1]].length - 1;
+					}
+				}
+			},
+			pickerChange(e) {
+				let changePickerValue = e.detail.value;
+				if (this.pickerValue[0] !== changePickerValue[0]) {
+					// 第一级发生滚动
+					this.cityDataList = cityData[changePickerValue[0]];
+					this.areaDataList = areaData[changePickerValue[0]][0];
+					changePickerValue[1] = 0;
+					changePickerValue[2] = 0;
+				} else if (this.pickerValue[1] !== changePickerValue[1]) {
+					// 第二级滚动
+					this.areaDataList =
+						areaData[changePickerValue[0]][changePickerValue[1]];
+					changePickerValue[2] = 0;
+				}
+				this.pickerValue = changePickerValue;
+				this._$emit('onChange');
+			},
+			_$emit(emitName) {
+				let pickObj = {
+					label: this._getLabel(),
+					value: this.pickerValue,
+					cityCode: this._getCityCode(),
+					areaCode: this._getAreaCode(),
+					provinceCode: this._getProvinceCode()
+				};
+				this.$emit(emitName, pickObj);
+			},
+			_getLabel() {
+				let pcikerLabel =
+					this.provinceDataList[this.pickerValue[0]].label +
+					'-' +
+					this.cityDataList[this.pickerValue[1]].label +
+					'-' +
+					this.areaDataList[this.pickerValue[2]].label;
+				return pcikerLabel;
+			},
+			_getCityCode() {
+				return this.cityDataList[this.pickerValue[1]].value;
+			},
+			_getProvinceCode() {
+				return this.provinceDataList[this.pickerValue[0]].value;
+			},
+			_getAreaCode() {
+				return this.areaDataList[this.pickerValue[2]].value;
+			},
+			clear() {
+
+			},
+			hideMask() {
+				this._$emit('onCancel');
+				this.close();
+			},
+			pickerCancel() {
+				this._$emit('onCancel');
+				this.close();
+			},
+			pickerConfirm() {
+				this._$emit('onConfirm');
+				this.close();
+			},
+			open() {
+				this.showPopup = true
+				this.$nextTick(() => {
+					setTimeout(() => {
+						this.ani = 'simple-' + this.type
+					}, 100)
+				})
+			},
+			close(type) {
+				if (!this.maskClick && type) return;
+				this.ani = ''
+				this.$nextTick(() => {
+					setTimeout(() => {
+						this.showPopup = false
+					}, 300)
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.simple-address {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: column;
+	}
+
+	.simple-address-mask {
+		position: fixed;
+		bottom: 0;
+		top: 0;
+		left: 0;
+		right: 0;
+
+		transition-property: opacity;
+		transition-duration: 0.3s;
+		opacity: 0;
+		/* #ifndef APP-NVUE */
+		z-index: 99;
+		/* #endif */
+	}
+
+
+	.mask-ani {
+		transition-property: opacity;
+		transition-duration: 0.2s;
+	}
+
+	.simple-bottom-mask {
+		opacity: 1;
+	}
+
+	.simple-center-mask {
+		opacity: 1;
+	}
+
+	.simple-address--fixed {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		transition-property: transform;
+		transition-duration: 0.3s;
+		transform: translateY(460rpx);
+		/* #ifndef APP-NVUE */
+		z-index: 99;
+		/* #endif */
+	}
+
+	.simple-address-content {
+		background-color: #FFFFFF;
+	}
+
+	.simple-content-bottom {
+		bottom: 0;
+		left: 0;
+		right: 0;
+		transform: translateY(500rpx);
+	}
+
+	.content-ani {
+		transition-property: transform, opacity;
+		transition-duration: 0.2s;
+	}
+
+	.simple-bottom-content {
+		transform: translateY(0);
+	}
+
+	.simple-center-content {
+		transform: scale(1);
+		opacity: 1;
+	}
+
+	.simple-address__header {
+		position: relative;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		flex-wrap: nowrap;
+		justify-content: space-between;
+		border-bottom-color: #f2f2f2;
+		border-bottom-style: solid;
+		border-bottom-width: 1rpx;
+	}
+
+	.simple-address--fixed-top {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		justify-content: space-between;
+		border-top-color: $uni-border-color;
+		border-top-style: solid;
+		border-top-width: 1rpx;
+	}
+
+	.simple-address__header-btn-box {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		align-items: center;
+		justify-content: center;
+		height: 70rpx;
+	}
+
+	.simple-address__header-text {
+		text-align: center;
+		font-size: $uni-font-size-base;
+		color: #1aad19;
+		line-height: 70rpx;
+		padding-left: 40rpx;
+		padding-right: 40rpx;
+	}
+
+	.simple-address__box {
+		position: relative;
+	}
+
+	.simple-address-view {
+		position: relative;
+		bottom: 0;
+		left: 0;
+		/* #ifndef APP-NVUE */
+		width: 100%;
+		/* #endif */
+		/* #ifdef APP-NVUE */
+		width: 750rpx;
+		/* #endif */
+		height: 408rpx;
+		background-color: rgba(255, 255, 255, 1);
+	}
+
+	.picker-item {
+		text-align: center;
+		line-height: 70rpx;
+		text-overflow: ellipsis;
+		font-size: 28rpx;
+	}
+</style>

+ 10 - 0
components/tabbar.vue

@@ -0,0 +1,10 @@
+<template>
+	<view>
+      
+   
+	</view>
+</template>
+
+<script>
+    
+</script>

+ 2362 - 0
components/trend.vue

@@ -0,0 +1,2362 @@
+<template>
+	<view >
+<view class="query-form" style="height:65px;top:0px;">
+<view class="menu">
+    <block v-for="(item,index1) in toparr" :key="index1"  >
+    <view :class="index1==topselect?'current':''" @tap="change_num(index1)" >{{item}}</view>
+   </block>
+
+ </view>
+   <view class="menu2">
+
+        <view @tap="show_gamenav1()" style="float: left;padding-left: 10px;color: #2319dc;">{{gameshow['title']}}
+         <uni-icons  :type="gameico" style="color: #2319dc;display: inline-block;"/>
+         </view>
+
+<view id="wanfa_title" style="display: inline-block;color: #2319dc" @tap="tapshowmenu()">{{wanfa_title}}</view>
+        <input type="checkbox" name="checkbox2" value="checkbox" id="has_line" style="display:none ">
+        <input type="checkbox" name="checkbox" value="checkbox" id="no_miss" checked="checked" style="display:none ">
+       
+        <view style="display: inline-block;float: right;width: 50px;text-align: center;color: #2319dc" @tap="tapshowmenu()">
+           <uni-icons  :type="showmenu?'gear-filled':'gear'" style="color: #2319dc;display: inline-block;"/>切换
+        </view>
+    </view>   
+</view>
+
+<view :class="{'gamenav':true,'active':gamenav}">
+    <view v-for="(m,index) in gametype" :key="index"  >
+        <view>{{m}}</view>
+        <view>
+            <block v-for="(game,index1) in gamelist" :key="index1"  >
+                <view v-if="game['type']==index && game['id']!=gameid" @tap="change_game(game['id'])">{{game['title']}}</view>
+              <view v-if="game['type']==index && game['id']==gameid" class="active">{{game['title']}}</view>
+            </block>
+        </view>
+    </view>
+
+</view>
+<scroll-view  scroll-y="true" :class="{'showtabs':true,'active':showmenu}"  :style="{'height':tableheight}">
+    <block v-for="(item,key) in tabs_nav1" :key="key"  >
+         <view class="lines"> {{item}}</view>
+        <view class="line-btn " >
+           <block v-for="(item1,key1) in wei_arr[key]" :key="key1" >
+   <view  :class="wanfa_key1==key && wanfa_key2==key1?'item current':'item'" @tap="show_wanfa(key,key1);">{{item1}}</view>
+            </block>
+        </view>
+        
+  </block>
+<!-- #ifdef H5 -->
+<view style="height: 50px;"></view>
+          <!-- #endif -->
+</scroll-view>
+
+<scroll-view   scroll-y="true" id="tablebox" :scroll-top="scrollTop"  @scroll="table_scroll" upper-threshold="50" @scrolltoupper="scrolltoupper"   class="query-tablebox" :style="{'height':tableheight}">
+    
+    <table class="query-table" >
+        <tr class="tr">
+          <block v-for="(item1,key1) in LotteryHeadLines" :key="key1" >
+          <th class="td">{{item1}}</th>
+         </block>   
+        </tr>
+        
+        
+        <tr class="tr" v-for="(item1,key1) in LotteryLines" :key="key1">
+          <block v-for="(item2,key2) in item1" :key="key2" >
+          <td ><view :class="item2.class">{{item2.value}}</view>
+              <view class="times" v-if="wanfa_key1=='duohao' && item2.times>1">{{item2.times}}</view>
+          </td>
+         </block>   
+        </tr>
+        
+      
+      <block  v-for="(item1,key1) in LotteryBottomLines" :key="'info2-'+key1">
+      <tr :class="bottomcolor(key1)">
+        <block v-for="(item2,key2) in item1" :key="key2" >
+        <td :class="item2.class"><view>{{item2.value}}</view>
+        
+    
+        </td>
+       </block>   
+      </tr>
+     </block>
+    </table>
+    <block v-if="pagesum>1">
+      
+    <view class="pages" >
+             <view @tap='next_page(-1)'>&lt;</view>
+             <block v-for="(m,index) in pagenum" :key='index'>
+                 
+               <view  :class="{'active':m==page}"  @tap="click_page(m)">{{m}}</view>
+             </block>
+      <view @tap='next_page(1)'>&gt;</view>
+             
+             
+         </view>  
+         <view style="height: 20px;"></view>
+    </block>
+
+        
+    
+    <!-- #ifdef H5 -->
+<view style="height: 50px;"></view>
+          <!-- #endif -->
+    <canvas canvas-id="ballchart" v-if="ischart" class="canvas" :style="{'height':31*LotteryLines.length+'px'}"></canvas>
+    
+</scroll-view>
+
+     
+	</view>
+</template>
+
+<script>
+    
+    	import uniIcons from './uni-icons/uni-icons.vue'
+            import http from '../library/http.js'
+            
+            
+	export default {
+        components: {
+        	
+            uniIcons
+        },
+        props: {
+            gamelist:{
+             
+            },
+            lotterylist:{
+               
+            },
+            gameid:{
+               
+                
+            },
+            gameshow:{
+               
+                
+            },
+            windowHeight:{
+                
+            }
+           
+        },
+        
+		data() {
+			return {
+                    tableheight:"",
+			       gameico:'arrowdown',
+                    toparr:{'30':'30期','50':'50期','day0':'今日数据','day1':'昨日数据','day2':'前日数据'},
+                    topselect:'30',
+                    tabs_nav1:{'danhao':'单号走势','duohao':'多号走势','lhh':'龙虎和','dx':'大小走势','ds':'单双走势','5xhz':'五星和值','hz':'和值','kd':'跨度'},
+                    wei_arr:[],
+                    wanfa_key1:'danhao',
+                    wanfa_key2:'0',
+                    showmenu:false,
+                    historylist:[],
+                    LotteryHeadLines:[],
+                    LotteryLines:[],
+                    LotteryBottomLines:[],
+                    charttop:'96px',
+                    scrollTop:1200,
+                    wanfa_title:'',
+                    last_issue:"",
+                    lotteryTime1:null,
+                    lotteryTime2:null,
+                    gamenav:false,
+                    ischart:false,
+                    gametype:uni.getStorageSync('gametype'),
+                    listall:[],
+                    isscrolltop:false,
+                    page:1,
+                    pagesum:0,
+                    pagenum:[],
+                    pagebottom:10,
+			}
+		},
+        computed:{
+       
+        },
+		methods: {
+          change_num(num){
+              this.topselect=num; 
+              this.load_lottery(true);
+          },
+          change_game(id){
+              this.$emit('change_game',id);
+         // this.load_lottery(true);
+         var that=this;
+         setTimeout(function(){
+                 that.load_trend();
+         },100)
+              this.init_data(true);
+               //this.load_trend();
+              this.gamenav=false;
+          },
+          show_gamenav1(){
+            this.gamenav=!this.gamenav;
+              
+          },
+          tapshowmenu(){
+            this.showmenu=!this.showmenu;  
+          },
+     
+          loadmethod(){
+              this.tableheight="calc("+this.windowHeight+" - 65px)";
+              var wei_arr=[];
+              var type=this.gameshow.type;
+              if(type=='ssc' || type=='ffc'){
+                  
+                  this.tabs_nav1={'danhao':'单号走势','duohao':'多号走势','lhh':'龙虎和','dx':'大小走势','ds':'单双走势','5xhz':'五星和值','hz':'和值','kd':'跨度'}  
+             wei_arr['danhao']={'0':'万位','1':'千位','2':'百位','3':'十位','4':'个位'};
+             wei_arr['duohao']={'0-4':'五星','1-4':'后四','0-2':'前四','2-4':'后三','1-3':'中三','0-2':'前三','3-4':'后二','0-1':'前二'};
+              wei_arr['dx']={'0-2':'万千百','2-4':'百十个'};
+              wei_arr['ds']={'0-2':'万千百','2-4':'百十个'};
+              wei_arr['5xhz']=['大小单双'];
+               wei_arr['hz']=['各类'];
+              wei_arr['kd']=['各类'];
+              wei_arr['lhh']={'01-02':'万千 万百','03-04':'万十 万个','12-13':'千百 千十','14-23':'千个 百十','24-34':'百个 十个'};
+             
+              }
+              else if(type=='11x5'){
+                  this.tabs_nav1={'danhao':'单号走势','duohao':'多号走势','dx':'大小走势','ds':'单双走势','hmds':'号码单双'}
+                  wei_arr['danhao']={'0':'第一名','1':'第二名','2':'第三名','3':'第四名','4':'第五名'};
+                  wei_arr['duohao']={'0-4':'五星','0-1':'前二','0-2':'前三'};
+                   wei_arr['dx']={'0-2':'一二三','2-4':'三四五'};
+                   wei_arr['ds']={'0-2':'一二三','2-4':'三四五'};
+                   wei_arr['hmds']=['个数比'];
+              }
+              else if(type=='pk10'){
+                  this.tabs_nav1={'danhao':'单号走势','duohao':'多号走势','dx':'大小走势','ds':'单双走势'}
+                  wei_arr['danhao']={'0':'第一名','1':'第二名','2':'第三名','3':'第四名','4':'第五名','5':'第六名','6':'第七名','7':'第八名','8':'第九名','9':'第十名'};
+                  wei_arr['duohao']={'0-1':'前二','0-2':'前三','0-4':'前五','5-9':'后五'};
+                   wei_arr['dx']={'0-2':'一二三'};
+                   wei_arr['ds']={'0-2':'一二三'};
+              }
+              else if(type=='k3'){
+                  this.tabs_nav1={'danhao':'单号走势','duohao':'多号走势','dx':'大小走势','ds':'单双走势','hzxt':'和值形态'}
+                  wei_arr['danhao']={'0':'一位','1':'二位','2':'三位'};
+                  wei_arr['duohao']={'0-2':'三码','0-1':'前二','1-2':'后二'};
+                   wei_arr['dx']={'0-2':'百十个'};
+                   wei_arr['ds']={'0-2':'百十个'};
+                   wei_arr['hzxt']=['三码'];
+              }
+ 
+
+     this.wei_arr=wei_arr;
+     this.wanfa_key1='danhao'
+     this.wanfa_key2='0'
+       this.init_data(false);
+           },
+           
+           init_data(type){
+               this.set_wanfatitle();
+               if(this.lotterylist.length<parseInt(this.topselect))
+               this.historylist=this.lotterylist;
+               else {
+                   for(var i=0;i<parseInt(this.topselect);i++){
+                       this.historylist.push(this.lotterylist[i]);
+                   }
+               }
+               
+               var that=this;
+               setTimeout(function(){
+                       that.load_lottery(type);
+               },100)
+           
+           },
+           set_wanfatitle(){
+               var title='';
+               for(var ii in this.tabs_nav1){
+                   if(ii==this.wanfa_key1) {
+                    title+=this.tabs_nav1[ii];
+                       break;
+                   }
+               }
+               
+               for(var ii in this.wei_arr[this.wanfa_key1]){
+                  if(ii==this.wanfa_key2) {
+                   title+="_"+this.wei_arr[this.wanfa_key1][ii];
+                      break;
+                  }
+               }
+               
+               this.wanfa_title=title;
+           },
+           show_wanfa(key,key1){
+                  this.wanfa_key1=key;
+                  this.wanfa_key2=key1;
+                     this.set_wanfatitle();  
+                     this.showmenu=false;
+            this.load_trend();
+           },
+           
+           scrolltoupper(){
+              
+              // if(this.historylist.length<this.listall.length){
+              //     var len=this.listall.length-this.historylist.length;
+              //     if(len>50) len=50;
+              //     var from=this.historylist.length;
+              //     var historylist=[];
+              //     for(var i=from;i<from+len;i++){
+              //        historylist.push(this.listall[i]);
+              //     }
+              //     this.historylist=historylist;
+              //     this.isscrolltop=true;
+              // } 
+              // else {
+              //     this.isscrolltop=false;
+              // }
+              
+              this.next_page(1);
+           },
+           
+           pagedata(){
+             var from=(this.page-1)*100;
+               var to=from+100;
+               if(to>this.listall.length) to=this.listall.length;
+               var historylist=[];
+               for(var i=from;i<to;i++){
+                  historylist.push(this.listall[i]);
+               }
+               this.historylist=historylist;
+               
+           },
+            click_page(num){
+              if(num>0 && num<=this.pagesum && this.page!=num){
+                  
+                  this.page=num;
+                  this.pagedata();
+              }  
+            },
+            next_page(num){
+              var page=this.page+num;
+                this.click_page(page);
+            },
+            setpage() {
+                 var sum=this.pagesum;
+                 var page=this.page;
+                 var pagenum=[];
+                    var html="";
+                      if(page>4){
+                          var from=page-2;
+                          var to=page+2;
+                      }
+                      else {var from=1;
+                      var to=6;
+                      }
+                     if(to>sum)  to=sum;
+                      if(from>2){
+                       pagenum.push(1);
+                       pagenum.push('...');
+                      }
+                       for(var i=from;i<=to;i++){
+                             pagenum.push(i);
+                    
+                       }
+                       if(to<sum-1)  {
+                             pagenum.push('...');
+                          pagenum.push(sum);
+                         
+                       }
+                    this.pagenum=pagenum;
+            
+                },
+         load_lottery(type){
+             clearTimeout(this.lotteryTime1);
+             clearTimeout(this.lotteryTime2);
+             var pageSize=this.topselect;
+           // console.log(this.gameid)
+             http.setWait(type).get('index.php?act=lotterylist',{lotteryId:this.gameid,current:1,type:'trend',pageSize:pageSize,from:'app'}).then(res=>{    
+                    
+                    this.listall=res.data.records;
+                  //  console.log(this.listall)
+                  
+                  this.pagesum=Math.ceil(this.listall.length/100);
+                  this.page=1;
+                  this.pagedata();
+                  this.setpage();
+                  
+                    // if(res.data.records.length<=50)
+                    // this.historylist=res.data.records;
+                    // else{
+                    //     var historylist=[];
+                    //     for(var i=0;i<50;i++){
+                    //         historylist.push( this.listall[i]);
+                    //     }
+                    //     this.historylist=historylist;
+                          
+                    // }
+                
+                    
+                   //已开奖
+                    if(this.last_issue!=res.data.records[0].issueNo){
+                      this.last_issue=res.data.records[0].issueNo;
+                    //  this.load_trend();
+                      // var that=this;      
+                      //         //  console.log(1000*parseInt(res.data.records[0]['lastsecond']));
+                      // this.lotteryTime1=setTimeout(function(){
+                      //     that.load_lottery(false);
+                      //    // console.log('222')
+                      // },1000*parseInt(res.data.records[0]['lastsecond']))
+                    }
+                    else{
+                     //    //未开奖   3秒监控
+                     //      var that=this; 
+                     // // clearTimeout(this.lotteryTime2);
+                     //  this.lotteryTime2=clearTimeout(function(){
+                     //     // console.log('lottery');
+                     //      that.load_lottery(false); 
+                     //  },3000)  
+                    }
+                                          
+             });
+         },
+         update_lottery(data){
+             var that=this;
+           if(data.length>0){ 
+               for(var i=0;i<data.length;i++){
+                   var item=data[i];
+                  
+                   var gameitem=this.getgamebykey(item.gamekey);
+                   var id=gameitem.id;
+                   var data1=this.dataformat(item,gameitem);
+                
+                       if(item.expect!=this.last_issue){
+                          
+                          
+                          if(id==this.gameid){
+                              this.last_issue=data1.issueNo;
+                              this.historylist.unshift(data1);
+                              this.historylist.splice(this.historylist.length-1,1);
+                                
+                           //  this.load_trend();
+                              //console.log(this.historylist)
+                          }  
+                        
+                     }
+                 
+               }
+           }
+           
+           
+         },
+         timestampToTime(timestamp) {
+                 var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
+                 var Y = date.getFullYear() ;
+                 var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1);
+                 var D = date.getDate();
+                 var h = date.getHours();
+                 var m = date.getMinutes();
+                 var s = date.getSeconds();
+                 if(D<10) D='0'+D;
+                  if(h<10) h='0'+h;
+                   if(m<10) m='0'+m;
+                    if(s<10) s='0'+s;
+                 return Y+'-'+M+'-'+D+' '+h+':'+m+':'+s;
+         },
+             
+         dataformat(item,game){
+           var data={};
+             data.gametype=game.type;
+             data.issueNo=item.expect;
+             data.openCode=item.number;
+             if(item.lasttime>parseInt((new Date()).getTime() / 1000))
+                data.lastsecond=item.lastsecond - parseInt((new Date()).getTime() / 1000)
+             else
+             data.lastsecond=item.lasttime;
+             data.predictedTime=this.timestampToTime(item.time);
+            
+             return data;
+         },
+         getgamebykey(gamekey){
+             var key1=gamekey.toLowerCase();
+             var key2=gamekey.toUpperCase();
+             for(var i=0;i<this.gamelist.length;i++){
+                 if(this.gamelist[i].showkey==key1 || this.gamelist[i].showkey==key2){
+                     return this.gamelist[i];
+                   }
+             }
+             return false;
+         },
+                   
+          scrollToBottom: function() {
+         if(this.isscrolltop==false){
+             var that=this;
+              setTimeout(function(){
+             that.scrollTop=  32*(that.LotteryLines.length+5)
+               },500) 
+         }
+                  
+          }, 
+           table_scroll(e){
+               var top=96-e.detail.scrollTop;
+               this.charttop=top+'px';
+           },
+          bottomcolor(num){
+           //    console.log(num)              
+              return "tr color"+num;
+          },
+           issue(num){
+               if(num.indexOf('-')>-1){
+             var issue=num.split('-');
+               return issue[1];      
+               }
+               else{
+                   return num.substr(num.length-3,3);
+               }
+             
+           },
+           
+           //单号走势
+           danhaoList(){
+               
+               this.LotteryHeadLines=[];
+               this.LotteryHeadLines.push('期号');
+               var type=this.gameshow.type;
+               if(type=='ssc' || type=='ffc'){
+                   var min=0;
+                   var max=9;
+               }
+               else if(type=='pk10'){
+                   var min=1;
+                   var max=10;
+               }
+               else if(type=='11x5'){
+                   var min=1;
+                   var max=11;
+               }
+               else if(type=='k3'){
+                   var min=1;
+                   var max=6;
+               }
+            
+               for(var i=min;i<=max;i++){
+                   this.LotteryHeadLines.push(i);
+               }
+                   var countArray = new Array();
+                       var MaxNum = new Array();
+                       var MaxNumArray = new Array();
+                       var MaxLostNum = new Array();
+                       var strArray = new Array();
+                       var numArray = new Array();
+                       var wei_num=this.wanfa_key2;
+                      
+                           for (var j = min; j <= max; j++) {
+                               countArray[j] = 0;
+                               MaxNum[j] = 0;
+                               MaxNumArray[j] = 0;
+                               MaxLostNum[j] = 0;
+                               strArray[j] = 0;
+                               numArray[j] = 0;
+                           }
+                       
+               var lines=[];
+           
+               for(var i=this.historylist.length-1;i>=0;i--){
+                   var item=this.historylist[i];
+                   var line=[];
+                
+                   line.push({'class':'issue','value':this.issue(item['issueNo'])});
+                    var strArray2 = item['openCode'].split(',');
+                  var code= parseInt(strArray2[wei_num]);
+                                  var  num0 = min;
+                                   while (num0 <= max) {
+                                       if (num0 == code) {
+                                           countArray[num0]++;
+                                           numArray[num0] = -1;
+                                           MaxNumArray[num0]++;
+                                           if (MaxNum[num0] < MaxNumArray[num0])
+                                               MaxNum[num0] = MaxNumArray[num0];
+                                       }
+                                       else {
+                                           MaxNumArray[num0] = 0;
+                                           numArray[num0]++;
+                                           if (MaxLostNum[num0] < numArray[num0])
+                                               MaxLostNum[num0] = numArray[num0];
+                                       }
+                                       if (num0 ==code) {
+                                           line.push({'class':'ball','value':code});
+                                           numArray[num0]++;
+                                       }
+                                       else {
+                                             line.push({'class':'num','value':numArray[num0]});
+                   
+                                       }
+                                       num0++;
+                                   }
+                               
+                lines.push(line);
+               }
+              // console.log(lines);
+               this.LotteryLines=lines;
+           this.drawchart();
+              
+             this.ischart=true;
+              var lists=new Array();
+              var line=[{'class':'issue','value':'最大连出'}];
+   
+                      
+                var num0 = min;
+                  while (num0 <= max) {
+                       line.push({'class':'num','value':MaxNum[num0]});
+                             num0++;
+                 }
+                 
+               lists.push(line);
+               var line=[{'class':'issue','value':'最大遗漏'}];
+                  
+                       
+                 var num0 = min;
+                   while (num0 <= max) {
+                        line.push({'class':'num','value':MaxLostNum[num0]});
+                              num0++;
+                  }
+                  
+                lists.push(line);
+               var line=[{'class':'issue','value':'出现次数'}];
+                  
+                 var num0 = min;
+                   while (num0 <= max) {
+                        line.push({'class':'num','value':countArray[num0]});
+                              num0++;
+                 
+                  }
+                lists.push(line);
+                var line=[{'class':'issue','value':'平均遗漏'}];
+                   
+                       
+                  var num0 = min;
+                    while (num0 <= max) {
+                               if(countArray[num0]>0)
+                                      var tt= (this.historylist.length-countArray[num0])/countArray[num0];
+                                        else
+                                      var tt= this.historylist.length;
+                                        tt=parseInt(tt);
+                         line.push({'class':'num','value':tt});
+                               num0++;
+                   }
+                  
+                 lists.push(line);
+           this.LotteryBottomLines=new Array();
+           this.LotteryBottomLines=lists;
+            this.scrollToBottom();
+        
+           },
+           
+           //多号走势
+           duohaoList() {
+                this.ischart=false;
+           this.LotteryHeadLines=[];
+           this.LotteryHeadLines.push('期号');
+     var type=this.gameshow.type;
+     if(type=='ssc' || type=='ffc'){
+         var min=0;
+         var max=9;
+     }
+     else if(type=='pk10'){
+         var min=1;
+         var max=10;
+     }
+     else if(type=='11x5'){
+         var min=1;
+         var max=11;
+     }
+     else if(type=='k3'){
+         var min=1;
+         var max=6;
+     }
+           for(var i=min;i<=max;i++){
+               this.LotteryHeadLines.push(i);
+           }
+            var countArray = new Array();
+                   var MaxNum = new Array();
+                   var MaxNumArray = new Array();
+                   var MaxLostNum = new Array();
+                   var strArray = new Array();
+                   var numArray = new Array();
+                   var wei_num=this.wanfa_key2;
+                  
+                       for (var j = min; j <= max; j++) {
+                           countArray[j] = 0;
+                           MaxNum[j] = 0;
+                           MaxNumArray[j] = 0;
+                           MaxLostNum[j] = 0;
+                           strArray[j] = 0;
+                           numArray[j] = 0;
+                       }
+                      var wei_num = this.wanfa_key2.split('-');
+                   
+                           var wei_from = parseInt(wei_num[0]);
+                           var wei_to = parseInt(wei_num[1]);
+           var lines=[];
+         
+           
+                for(var i=this.historylist.length-1;i>=0;i--){
+                    var item=this.historylist[i];
+                    var line=[];
+                 //  console.log(item);
+                    line.push({'class':'issue','value':this.issue(item['issueNo'])});
+                     var strArray2 = item['openCode'].split(',');
+                   var code= parseInt(strArray2[wei_num]);
+                                   var  num0 = min;
+                       strArray2 = this.Lot_New(strArray2,wei_from,wei_to);
+           
+                       num0 = min;
+                       while (num0 <= max) {
+           
+           
+                           var temp = this.in_arr_num(strArray2, num0);
+                           if (temp>0) {
+                               countArray[num0]= countArray[num0]+temp;
+                               numArray[num0] = -1;
+                               MaxNumArray[num0]++;
+                               if (MaxNum[num0] < MaxNumArray[num0])
+                                   MaxNum[num0] = MaxNumArray[num0];
+                           }
+                           else {
+                               MaxNumArray[num0] = 0;
+                               numArray[num0]++;
+                               if (MaxLostNum[num0] < numArray[num0])
+                                   MaxLostNum[num0] = numArray[num0];
+                           }
+           
+                           if (temp > 0) {
+                             
+                            
+                              // str3 += "<td class=\"charball td0\"><div class=\"ball01\">"+tt+ num0 + times_str+"</div></td>";
+                                   line.push({'class':'ball','value': num0,'times':temp});
+                               numArray[num0]++;
+                           }
+                           else {
+                                    line.push({'class':'num','value':numArray[num0]});
+                              // str3 += "<td class=\"wdh td0\"><div class=\"ball14\">" + numArray[num0] + "</div></td>";
+           
+                           }
+                           num0++;
+                       }
+              
+                  
+                                lines.push(line);
+                               }
+                              // console.log(lines);
+                               this.LotteryLines=lines;
+                           this.drawchart();
+                              
+                             
+                              var lists=new Array();
+                              var line=[{'class':'issue','value':'最大连出'}];
+                   
+                                      
+                                var num0 = min;
+                                  while (num0 <= max) {
+                                       line.push({'class':'num','value':MaxNum[num0]});
+                                             num0++;
+                                 }
+                                 
+                               lists.push(line);
+                               var line=[{'class':'issue','value':'最大遗漏'}];
+                                  
+                                       
+                                 var num0 = min;
+                                   while (num0 <= max) {
+                                        line.push({'class':'num','value':MaxLostNum[num0]});
+                                              num0++;
+                                  }
+                                  
+                                lists.push(line);
+                               var line=[{'class':'issue','value':'出现次数'}];
+                                  
+                                 var num0 = min;
+                                   while (num0 <= max) {
+                                        line.push({'class':'num','value':countArray[num0]});
+                                              num0++;
+                                 
+                                  }
+                                lists.push(line);
+                                var line=[{'class':'issue','value':'平均遗漏'}];
+                                   
+                                       
+                                  var num0 = min;
+                                    while (num0 <= max) {
+                                               if(countArray[num0]>0)
+                                                      var tt= (this.historylist.length-countArray[num0])/countArray[num0];
+                                                        else
+                                                      var tt= this.historylist.length;
+                                                        tt=parseInt(tt);
+                                         line.push({'class':'num','value':tt});
+                                               num0++;
+                                   }
+                                  
+                                 lists.push(line);
+                  this.LotteryBottomLines=new Array();
+                           this.LotteryBottomLines=lists;
+                            this.scrollToBottom();
+         
+               },
+               
+               //龙虎走势
+               
+               lhhList(type) {
+   this.ischart=false;
+                          var wei_num = this.wanfa_key2.split('-');
+                            var wei_from = wei_num[0];
+                               var wei_to = wei_num[1];
+               var lines=[];
+                     var min = 0;
+                       var max = 5;
+                       var count = 10;
+                       var ballNum = 1;
+                
+               this.LotteryHeadLines=[];
+               this.LotteryHeadLines.push('期号');
+             
+             
+               var wanfa_title2='';
+               for(var ii in this.wei_arr[this.wanfa_key1]){
+                  if(ii==this.wanfa_key2) {
+                    wanfa_title2= this.wei_arr[this.wanfa_key1][ii];
+                      break;
+                  }
+               }
+                       for (var j = 0; j <2; j++) {
+                             this.LotteryHeadLines.push(wanfa_title2.substr(j,1));
+                          
+                       }
+               this.LotteryHeadLines.push('龙');this.LotteryHeadLines.push('虎');this.LotteryHeadLines.push('和');
+     
+                       for (var j = 3; j <5; j++) {
+                            this.LotteryHeadLines.push(wanfa_title2.substr(j,1));
+                       }
+                     this.LotteryHeadLines.push('龙');this.LotteryHeadLines.push('虎');this.LotteryHeadLines.push('和');
+ 
+                       var countArray = new Array();
+                       var MaxNum = new Array();
+                       var MaxNumArray = new Array();
+                       var MaxLostNum = new Array();
+                       var strArray = new Array();
+                       var numArray = new Array();
+               
+               
+                       for (var j = min; j <= max; j++) {
+                           countArray[j] = 0;
+                           MaxNum[j] = 0;
+                           MaxNumArray[j] = 0;
+                           MaxLostNum[j] = 0;
+                           strArray[j] = 0;
+                           numArray[j] = 0;
+                       }
+              
+                    for(var i=this.historylist.length-1;i>=0;i--){
+                        var item=this.historylist[i];
+                        var line=[];
+                           var dt = item;
+                           var num0;
+                         var strArray2 = item['openCode'].split(',');
+                              line.push({'class':'issue','value':this.issue(item['issueNo'])});
+               
+                           num0 = min;
+                           var showarr=new Array('龙','和','虎');
+                           var arr1= new Array(strArray2[parseInt(wei_from.substr(0,1))],strArray2[parseInt(wei_from.substr(1,1))]);
+               
+                           for(var tt=0;tt<arr1.length;tt++){
+                                  line.push({'class':'noborder','value':arr1[tt]});
+                               
+                           }
+                           var code1=parseInt(arr1[0]);
+                           var code2=parseInt(arr1[1]);
+                           for(var j=0;j<3;j++){
+               
+                               num0=j;
+               
+               
+                               if((j%3==0 && code1>code2) || (j%3==1 && code1==code2) || (j%3==2 && code1<code2) ){
+               
+                                   var sta=1;
+                                   var showname=showarr[j%3];
+                               }else sta=0;
+               
+               
+                               if (sta==1) {
+                                   countArray[num0]++;
+                                   numArray[num0] = -1;
+                                   MaxNumArray[num0]++;
+                                   if (MaxNum[num0] < MaxNumArray[num0])
+                                       MaxNum[num0] = MaxNumArray[num0];
+                                    line.push({'class':'numbg'+j%3,'value':showname});
+                                  // str3 += "<td class='numbg"+j%3+"'>"+showname+"</td>";
+                               }
+                               else {
+                                   MaxNumArray[num0] = 0;
+                                   numArray[num0]++;
+                                   if (MaxLostNum[num0] < numArray[num0])
+                                       MaxLostNum[num0] = numArray[num0];
+               
+                                  // str3 += "<td class=\"wdh td0\">"+numArray[num0]+"</td>";
+                                   line.push({'class':'noborder','value':numArray[num0]});
+               
+                               }
+
+                           }
+  
+                           var arr1= new Array(strArray2[parseInt(wei_to.substr(0,1))],strArray2[parseInt(wei_to.substr(1,1))]);
+               
+               
+                           for(var tt=0;tt<arr1.length;tt++){
+                               line.push({'class':'noborder','value':arr1[tt]});
+                           }
+               
+                           var code1=parseInt(arr1[0]);
+                           var code2=parseInt(arr1[1]);
+                           for(var j=3;j<6;j++){
+               
+                               num0=j;
+               
+               
+                               if((j%3==0 && code1>code2) || (j%3==1 && code1==code2) || (j%3==2 && code1<code2) ){
+               
+                                   var sta=1;
+                                   var showname=showarr[j%3];
+                               }else sta=0;
+               
+               
+                               if (sta==1) {
+                                   countArray[num0]++;
+                                   numArray[num0] = -1;
+                                   MaxNumArray[num0]++;
+                                   if (MaxNum[num0] < MaxNumArray[num0])
+                                       MaxNum[num0] = MaxNumArray[num0];
+                line.push({'class':'numbg'+j%3,'value':showname});
+                                  // str3 += "<td class='numbg"+j%3+"'>"+showname+"</td>";
+                               }
+                               else {
+                                   MaxNumArray[num0] = 0;
+                                   numArray[num0]++;
+                                   if (MaxLostNum[num0] < numArray[num0])
+                                       MaxLostNum[num0] = numArray[num0];
+               
+                                 //  str3 += "<td class=\"wdh td0\">"+numArray[num0]+"</td>";
+               line.push({'class':'noborder','value':numArray[num0]});
+                               }
+                    }
+               
+
+                   lines.push(line);
+                    }
+                   // console.log(lines);
+                    this.LotteryLines=lines;
+               
+               
+               
+               var lists=new Array();
+                           var line=[{'class':'issue','value':'最大连出'}];
+                
+                                  line.push({'class':'num','value':''});
+                                  line.push({'class':'num','value':''}); 
+                             var num0 = min;
+                               while (num0 <= max) {
+                                    
+                                    line.push({'class':'num','value':MaxNum[num0]});
+                                    if(num0==2){
+                                        line.push({'class':'num','value':''});
+                                        line.push({'class':'num','value':''}); 
+                                    }
+                                          num0++;
+                              }
+                              
+                            lists.push(line);
+                            var line=[{'class':'issue','value':'最大遗漏'}];
+                     line.push({'class':'num','value':''});
+                     line.push({'class':'num','value':''}); 
+                                    
+                              var num0 = min;
+                                while (num0 <= max) {
+                                     line.push({'class':'num','value':MaxLostNum[num0]});
+                                     if(num0==2){
+                                         line.push({'class':'num','value':''});
+                                         line.push({'class':'num','value':''}); 
+                                     }
+                                           num0++;
+                               }
+                               
+                             lists.push(line);
+                            var line=[{'class':'issue','value':'出现次数'}];
+                            line.push({'class':'num','value':''});
+                            line.push({'class':'num','value':''}); 
+                              var num0 = min;
+                                while (num0 <= max) {
+                                     line.push({'class':'num','value':countArray[num0]});
+                                     if(num0==2){
+                                         line.push({'class':'num','value':''});
+                                         line.push({'class':'num','value':''}); 
+                                     }
+                                           num0++;
+                              
+                               }
+                             lists.push(line);
+                             var line=[{'class':'issue','value':'平均遗漏'}];
+                                
+                                 line.push({'class':'num','value':''});
+                                 line.push({'class':'num','value':''}); 
+                               var num0 = min;
+                                 while (num0 <= max) {
+                                            if(countArray[num0]>0)
+                                                   var tt= (this.historylist.length-countArray[num0])/countArray[num0];
+                                                     else
+                                                   var tt= this.historylist.length;
+                                                     tt=parseInt(tt);
+                                      line.push({'class':'num','value':tt});
+                                      if(num0==2){
+                                         line.push({'class':'num','value':''});
+                                         line.push({'class':'num','value':''}); 
+                                      }
+                                            num0++;
+                                }
+                               
+                              lists.push(line);
+               this.LotteryBottomLines=new Array();
+                        this.LotteryBottomLines=lists;
+                         this.scrollToBottom();
+  
+                   },
+                   
+                   //大小单双
+                    dxList(type) {
+                   
+                          this.ischart=false;
+                           var wei_num = this.wanfa_key2.split('-');
+                   
+                           var wei_from = parseInt(wei_num[0]);
+                           var wei_to = parseInt(wei_num[1]);
+                   
+                       
+                           var min = 0;
+                           var max = 5;
+                           var count = 10;
+                           var ballNum = 1;
+                   
+          this.LotteryHeadLines=[];
+          this.LotteryHeadLines.push('期号');
+            var gametype=this.gameshow.type;          
+                       var type=this.wanfa_key1;
+          var wanfa_title2='';
+          for(var ii in this.wei_arr[this.wanfa_key1]){
+             if(ii==this.wanfa_key2) {
+               wanfa_title2= this.wei_arr[this.wanfa_key1][ii];
+                 break;
+             }
+          }
+                   
+                         
+                           for (var j = 0; j < wanfa_title2.length; j++) {
+                                 this.LotteryHeadLines.push(wanfa_title2.substr(j,1));
+
+                           }
+                   
+                   
+                           for (var j = 0; j < wanfa_title2.length; j++) {
+                     this.LotteryHeadLines.push(wanfa_title2.substr(j,1)); 
+                     this.LotteryHeadLines.push('位');
+                   
+                           }
+                        
+                           var countArray = new Array();
+                           var MaxNum = new Array();
+                           var MaxNumArray = new Array();
+                           var MaxLostNum = new Array();
+                           var strArray = new Array();
+                           var numArray = new Array();
+                   
+                   
+                           for (var j = min; j <= max; j++) {
+                               countArray[j] = 0;
+                               MaxNum[j] = 0;
+                               MaxNumArray[j] = 0;
+                               MaxLostNum[j] = 0;
+                               strArray[j] = 0;
+                               numArray[j] = 0;
+                           }
+                   
+                           var lines=[];
+                        for(var i=this.historylist.length-1;i>=0;i--){
+                            var item=this.historylist[i];
+                            var line=[];
+                               var dt = item;
+                               var num0;
+                             var strArray2 = item['openCode'].split(',');
+                                  line.push({'class':'issue','value':this.issue(item['issueNo'])});
+                                       
+                              
+                   
+                               num0 = min;
+                               strArray2=this.Lot_New(strArray2,wei_from,wei_to);
+                               for(var tt=0;tt<strArray2.length;tt++){
+                                    line.push({'class':'noborder','value':strArray2[tt]});
+                                   //str3+="<td class='noborder'>"+strArray2[tt]+"</td>";
+                               }
+                   
+                   
+                   
+                   
+                               for(var j=0;j<3;j++){
+                   
+                                   for(var k=0;k<2;k++){
+                                    var   code=parseInt(strArray2[j]);
+                                       num0=2*j+k;
+                                       if(k==0){
+                   
+                                           if((type=='ds' && code%2==1) || (type=='dx' && (((gametype=='ssc' || gametype=='dp') && code>=5) || (gametype=='11x5'
+                                                   && code>=7)|| (gametype=='k3' && code>=4) || (gametype=='pk10' && code>=6))) ){
+                   
+                                               var sta=1;
+                                               if(type=='ds') var showname='单';
+                                               else var showname='大';
+                                           }else sta=0;
+                  
+                                       }else{
+                                           if((type=='ds' && code%2==0) || (type=='dx' &&  (((gametype=='ssc' || gametype=='dp')  && code<5) || (gametype=='11x5'
+                                                   && code<7) || (gametype=='k3' && code<4)|| (gametype=='pk10' && code<6))) ){
+                   
+                                               var sta=1;
+                                               if(type=='ds') var showname='双';
+                                               else var showname='小';
+                                           }else sta=0;
+                   
+                                       }
+                   
+                                       if (sta==1) {
+                                           countArray[num0]++;
+                                           numArray[num0] = -1;
+                                           MaxNumArray[num0]++;
+                                           if (MaxNum[num0] < MaxNumArray[num0])
+                                               MaxNum[num0] = MaxNumArray[num0];
+                                            line.push({'class':'numbg'+k,'value':showname});
+                                           //str3 += "<td class='numbg"+k+"'>"+showname+"</td>";
+                                       }
+                                       else {
+                                           MaxNumArray[num0] = 0;
+                                           numArray[num0]++;
+                                           if (MaxLostNum[num0] < numArray[num0])
+                                               MaxLostNum[num0] = numArray[num0];
+                   line.push({'class':'','value':numArray[num0]});
+                                       //    str3 += "<td class=\"wdh td0\">"+numArray[num0]+"</td>";
+                   
+                                       }
+                   
+                                   }
+                   
+                               }
+                   
+                   
+                              lines.push(line);
+                               }
+                              // console.log(lines);
+                               this.LotteryLines=lines;
+                   
+                         var lists=new Array();
+                                     var line=[{'class':'issue','value':'最大连出'}];
+                                          line.push({'class':'num','value':''});
+                                               line.push({'class':'num','value':''});
+                                                line.push({'class':'num','value':''});
+                          
+                                       var num0 = min;
+                                         while (num0 <= max) {
+                                              line.push({'class':'num','value':MaxNum[num0]});
+                                                    num0++;
+                                        }
+                                        
+                                      lists.push(line);
+                                      var line=[{'class':'issue','value':'最大遗漏'}];
+                                         
+                                              line.push({'class':'num','value':''});
+                                                   line.push({'class':'num','value':''});
+                                                    line.push({'class':'num','value':''});
+                                        var num0 = min;
+                                          while (num0 <= max) {
+                                               line.push({'class':'num','value':MaxLostNum[num0]});
+                                                     num0++;
+                                         }
+                                         
+                                       lists.push(line);
+                                      var line=[{'class':'issue','value':'出现次数'}];
+                                         line.push({'class':'num','value':''});
+                                              line.push({'class':'num','value':''});
+                                               line.push({'class':'num','value':''});
+                                        var num0 = min;
+                                          while (num0 <= max) {
+                                               line.push({'class':'num','value':countArray[num0]});
+                                                     num0++;
+                                        
+                                         }
+                                       lists.push(line);
+                                       var line=[{'class':'issue','value':'平均遗漏'}];
+                                          line.push({'class':'num','value':''});
+                                               line.push({'class':'num','value':''});
+                                                line.push({'class':'num','value':''});
+                                              
+                                         var num0 = min;
+                                           while (num0 <= max) {
+                                                      if(countArray[num0]>0)
+                                                             var tt= (this.historylist.length-countArray[num0])/countArray[num0];
+                                                               else
+                                                             var tt= this.historylist.length;
+                                                               tt=parseInt(tt);
+                                                line.push({'class':'num','value':tt});
+                                                      num0++;
+                                          }
+                                         
+                                        lists.push(line);
+                         this.LotteryBottomLines=new Array();
+                                  this.LotteryBottomLines=lists;
+                                   this.scrollToBottom();
+                  
+                   
+                       },
+                       //快三和值形态
+                       hzxtList() {
+                       
+                       
+                            this.ischart=false;
+                                   
+                                   
+                                     
+                            this.LotteryHeadLines=[];
+                            this.LotteryHeadLines.push('期号');
+                           
+                               var min = 0;
+                               var max = 2;
+                       
+                       
+                            this.LotteryHeadLines.push('一');
+                             this.LotteryHeadLines.push('二');
+                              this.LotteryHeadLines.push('三');
+                               this.LotteryHeadLines.push('和值');
+                                this.LotteryHeadLines.push('三同号');
+                                 this.LotteryHeadLines.push('三不同号');
+                                  this.LotteryHeadLines.push('二同号');
+                      
+                               var countArray = new Array();
+                               var MaxNum = new Array();
+                               var MaxNumArray = new Array();
+                               var MaxLostNum = new Array();
+                               var strArray = new Array();
+                               var numArray = new Array();
+                       
+                       
+                               for (var j = min; j <= max; j++) {
+                                   countArray[j] = 0;
+                                   MaxNum[j] = 0;
+                                   MaxNumArray[j] = 0;
+                                   MaxLostNum[j] = 0;
+                                   strArray[j] = 0;
+                                   numArray[j] = 0;
+                               }
+                  
+                             var lines=[];
+                             for(var i=this.historylist.length-1;i>=0;i--){
+                                 var line=[];
+                                 var item=this.historylist[i];
+                                   
+                       var strArray2 = item['openCode'].split(',');
+                            line.push({'class':'issue','value':this.issue(item['issueNo'])});
+                       
+                       
+
+                       
+                                   num0 = min;
+                                   for(var tt=0;tt<strArray2.length;tt++){
+                                  
+                                       line.push({'class':'noborder','value':strArray2[tt]});
+                                   }
+                                   var sum=this.arr_sum(strArray2);
+                                   
+                                     line.push({'class':'numbg4','value':sum});
+                                  
+                       
+                                   var showarr=new Array('三同号','三不同号','二同号');
+                                  
+                                   for(var j=0;j<3;j++){
+                       
+                       
+                       
+                                       if(strArray2[0]==strArray2[1] && strArray2[1]==strArray2[2] ){
+                       
+                                          if(j==0) var sta=1;
+                                          else sta=0;
+                       
+                                       }else if(strArray2[0]!=strArray2[1] && strArray2[1]!=strArray2[2] && strArray2[0]!=strArray2[2]) {
+                       
+                                           if(j==1) var sta=1;
+                                           else sta=0;
+                                       }
+                                       else{
+                                           if(j==2) var sta=1;
+                                           else sta=0;
+                                       }
+                       
+                       
+                                       var showname=showarr[j];
+                       num0=j;
+                                       if (sta==1) {
+                                           countArray[num0]++;
+                                           numArray[num0] = -1;
+                                           MaxNumArray[num0]++;
+                                           if (MaxNum[num0] < MaxNumArray[num0])
+                                               MaxNum[num0] = MaxNumArray[num0];
+                        line.push({'class':'numbg'+j,'value':showname});
+                                           //str3 += "<td class='numbg"+j+"'>"+showname+"</td>";
+                                       }
+                                       else {
+                                           MaxNumArray[num0] = 0;
+                                           numArray[num0]++;
+                                           if (MaxLostNum[num0] < numArray[num0])
+                                               MaxLostNum[num0] = numArray[num0];
+                       line.push({'class':'noborder','value':numArray[num0]});
+                                       
+                       
+                                       }
+                       
+                                     num0++;
+                       
+                                   }
+                       
+                       
+                                   lines.push(line);
+                                                  }
+                                                 // console.log(lines);
+                                                  this.LotteryLines=lines;
+                                             
+                                             
+                                             
+                                             var lists=new Array();
+                                                         var line=[{'class':'issue','value':'最大连出'}];
+                                              
+                                                                line.push({'class':'num','value':''});
+                                                                line.push({'class':'num','value':''}); 
+                                                                line.push({'class':'num','value':''});
+                                                         line.push({'class':'num','value':''});
+                                                               
+                                                           var num0 = min;
+                                                             while (num0 <= max) {
+                                                                  
+                                                                  line.push({'class':'num','value':MaxNum[num0]});
+                                                                 
+                                                                        num0++;
+                                                            }
+                                                            
+                                                          lists.push(line);
+                                                          var line=[{'class':'issue','value':'最大遗漏'}];
+                                                line.push({'class':'num','value':''});
+                                                line.push({'class':'num','value':''}); 
+                                                line.push({'class':'num','value':''});
+                                          line.push({'class':'num','value':''});
+                                                            var num0 = min;
+                                                              while (num0 <= max) {
+                                                                   line.push({'class':'num','value':MaxLostNum[num0]});
+                                                                 
+                                                                         num0++;
+                                                             }
+                                                             
+                                                           lists.push(line);
+                                                          var line=[{'class':'issue','value':'出现次数'}];
+                                               line.push({'class':'num','value':''});
+                                               line.push({'class':'num','value':''}); 
+                                               line.push({'class':'num','value':''});
+                                              line.push({'class':'num','value':''});
+                                                            var num0 = min;
+                                                              while (num0 <= max) {
+                                                                   line.push({'class':'num','value':countArray[num0]});
+                                                                 
+                                                                         num0++;
+                                                            
+                                                             }
+                                                           lists.push(line);
+                                                           var line=[{'class':'issue','value':'平均遗漏'}];
+                                                              
+                                                             line.push({'class':'num','value':''});
+                                                             line.push({'class':'num','value':''}); 
+                                                             line.push({'class':'num','value':''});
+                                                             line.push({'class':'num','value':''}); 
+                                                             
+                                                             var num0 = min;
+                                                               while (num0 <= max) {
+                                                                          if(countArray[num0]>0)
+                                                                                 var tt= (this.historylist.length-countArray[num0])/countArray[num0];
+                                                                                   else
+                                                                                 var tt= this.historylist.length;
+                                                                                   tt=parseInt(tt);
+                                                                    line.push({'class':'num','value':tt});
+                                                                   
+                                                                          num0++;
+                                                              }
+                                                       
+                                   
+                                   lists.push(line);
+                                   this.LotteryBottomLines=new Array();
+                                       this.LotteryBottomLines=lists;
+                                        this.scrollToBottom();
+                                   
+                       
+                           },
+                       
+                       
+                       
+            //11选5和值个数比
+                       hmdsList() {
+                       
+                       this.ischart=false;
+                             this.LotteryHeadLines=[];
+                             this.LotteryHeadLines.push('期号');
+                          this.LotteryHeadLines.push('一');
+                             this.LotteryHeadLines.push('二');
+                          this.LotteryHeadLines.push('三');
+                             this.LotteryHeadLines.push('四');
+                                this.LotteryHeadLines.push('五');
+                                   this.LotteryHeadLines.push('5:0');
+                                      this.LotteryHeadLines.push('4:1');
+                                         this.LotteryHeadLines.push('3:2');
+                                            this.LotteryHeadLines.push('2:3');
+                                               this.LotteryHeadLines.push('1:4');
+                                                  this.LotteryHeadLines.push('0:5');
+                             
+                               var min = 0;
+                               var max = 5;
+                       
+                      
+                       
+                      
+                       
+                       
+                               var countArray = new Array();
+                               var MaxNum = new Array();
+                               var MaxNumArray = new Array();
+                               var MaxLostNum = new Array();
+                               var strArray = new Array();
+                               var numArray = new Array();
+                       
+                       
+                               for (var j = min; j <= max; j++) {
+                                   countArray[j] = 0;
+                                   MaxNum[j] = 0;
+                                   MaxNumArray[j] = 0;
+                                   MaxLostNum[j] = 0;
+                                   strArray[j] = 0;
+                                   numArray[j] = 0;
+                               }
+                       
+                             var lines=[];
+                      
+                             for(var i=this.historylist.length-1;i>=0;i--){
+                                 var item=this.historylist[i];
+                                    var line=[];
+                                  
+                                   var num0=min;
+                               
+                              
+                       var strArray2 = item['openCode'].split(',');
+                            line.push({'class':'issue','value':this.issue(item['issueNo'])});
+                       
+                       
+
+                       
+                                  
+                                   for(var tt=0;tt<strArray2.length;tt++){
+                                        line.push({'class':'noborder','value':strArray2[tt]});
+                                   }
+                       
+                       
+                       
+                                   var showarr=new Array('5:0','4:1','3:2','2:3','1:4','0:5');
+                                   for(var j=0;j<6;j++){
+                                       var dan=0;
+                                       var shuang=0;
+                                       for(var tt=0;tt<strArray2.length;tt++){
+                       
+                                           if(strArray2[tt]%2==1) dan++;
+                                           else shuang++;
+                                       }
+                                       var code=showarr[j].split(':');
+                                       if(dan==parseInt(code[0])){
+                       
+                                           var sta=1;
+                                           var showname=showarr[j];
+                                       }else sta=0;
+                       
+                       
+                       
+                                       if (sta==1) {
+                                           countArray[num0]++;
+                                           numArray[num0] = -1;
+                                           MaxNumArray[num0]++;
+                                           if (MaxNum[num0] < MaxNumArray[num0])
+                                               MaxNum[num0] = MaxNumArray[num0];
+                                              line.push({'class':'numbg'+j,'value':showname});
+                                         
+                                       }
+                                       else {
+                                           MaxNumArray[num0] = 0;
+                                           numArray[num0]++;
+                                           if (MaxLostNum[num0] < numArray[num0])
+                                               MaxLostNum[num0] = numArray[num0];
+                       
+                                                line.push({'class':'noborder','value':numArray[num0]});
+                                          
+                                       }
+                       
+                         num0++;
+                       
+                                   }
+                       
+                       
+                                 lines.push(line);
+                                      }
+                                     // console.log(lines);
+                                      this.LotteryLines=lines;
+                                 
+                                 
+                                 
+                                 var lists=new Array();
+                                             var line=[{'class':'issue','value':'最大连出'}];
+                                  
+                                                    line.push({'class':'num','value':''});
+                                                    line.push({'class':'num','value':''}); 
+                                                    line.push({'class':'num','value':''});
+                                                    line.push({'class':'num','value':''}); 
+                                                    line.push({'class':'num','value':''});
+                                                   
+                                               var num0 = min;
+                                                 while (num0 <= max) {
+                                                      
+                                                      line.push({'class':'num','value':MaxNum[num0]});
+                                                     
+                                                            num0++;
+                                                }
+                                                
+                                              lists.push(line);
+                                              var line=[{'class':'issue','value':'最大遗漏'}];
+                                    line.push({'class':'num','value':''});
+                                    line.push({'class':'num','value':''}); 
+                                    line.push({'class':'num','value':''});
+                                    line.push({'class':'num','value':''}); 
+                                    line.push({'class':'num','value':''});     
+                                                var num0 = min;
+                                                  while (num0 <= max) {
+                                                       line.push({'class':'num','value':MaxLostNum[num0]});
+                                                     
+                                                             num0++;
+                                                 }
+                                                 
+                                               lists.push(line);
+                                              var line=[{'class':'issue','value':'出现次数'}];
+                                   line.push({'class':'num','value':''});
+                                   line.push({'class':'num','value':''}); 
+                                   line.push({'class':'num','value':''});
+                                   line.push({'class':'num','value':''}); 
+                                   line.push({'class':'num','value':''});
+                                                var num0 = min;
+                                                  while (num0 <= max) {
+                                                       line.push({'class':'num','value':countArray[num0]});
+                                                     
+                                                             num0++;
+                                                
+                                                 }
+                                               lists.push(line);
+                                               var line=[{'class':'issue','value':'平均遗漏'}];
+                                                  
+                                                 line.push({'class':'num','value':''});
+                                                 line.push({'class':'num','value':''}); 
+                                                 line.push({'class':'num','value':''});
+                                                 line.push({'class':'num','value':''}); 
+                                                 line.push({'class':'num','value':''});
+                                                 var num0 = min;
+                                                   while (num0 <= max) {
+                                                              if(countArray[num0]>0)
+                                                                     var tt= (this.historylist.length-countArray[num0])/countArray[num0];
+                                                                       else
+                                                                     var tt= this.historylist.length;
+                                                                       tt=parseInt(tt);
+                                                        line.push({'class':'num','value':tt});
+                                                       
+                                                              num0++;
+                                                  }
+                                           
+                       
+                       lists.push(line);
+                       this.LotteryBottomLines=new Array();
+                           this.LotteryBottomLines=lists;
+                            this.scrollToBottom();
+                       
+                           },
+
+                       //五星和值
+       hz5xList() {
+            this.ischart=false;
+      
+        var LotteryHeadLines = "";
+        var LotteryLines = "";
+        var min = 0;
+        var max = 9;
+
+
+        min = 0;
+        max = 3;
+
+this.LotteryHeadLines=[];
+          this.LotteryHeadLines.push('期号');
+            this.LotteryHeadLines.push('万');
+             this.LotteryHeadLines.push('千');
+              this.LotteryHeadLines.push('百');
+               this.LotteryHeadLines.push('十');
+                this.LotteryHeadLines.push('个');
+                 this.LotteryHeadLines.push('和值');
+                  this.LotteryHeadLines.push('大');
+                   this.LotteryHeadLines.push('小');
+                    this.LotteryHeadLines.push('单');
+                     this.LotteryHeadLines.push('双');
+       
+ 
+        var countArray = new Array();
+        var MaxNum = new Array();
+        var MaxNumArray = new Array();
+        var MaxLostNum = new Array();
+        var strArray = new Array();
+        var numArray = new Array();
+
+
+        for (var j = min; j <= max; j++) {
+            countArray[j] = 0;
+            MaxNum[j] = 0;
+            MaxNumArray[j] = 0;
+            MaxLostNum[j] = 0;
+            strArray[j] = 0;
+            numArray[j] = 0;
+        }
+
+       var lines=[];
+       for(var i=this.historylist.length-1;i>=0;i--){
+           var item=this.historylist[i];
+           var line=[];
+              var dt = item;
+              var num0;
+            var strArray2 = item['openCode'].split(',');
+                 line.push({'class':'issue','value':this.issue(item['issueNo'])});
+         
+            num0 = min;
+            for(var tt=0;tt<strArray2.length;tt++){
+                 line.push({'class':'noborder','value':strArray2[tt]});
+              //  str3+="<td class='noborder'>"+strArray2[tt]+"</td>";
+            }
+            var sum=this.arr_sum(strArray2);
+             line.push({'class':'numbg4','value':sum});
+           
+
+            var showarr=new Array('大','小','单','双');
+            for(var j=0;j<4;j++){
+
+
+               var  code=parseInt(strArray2[j]);
+                num0=j;
+
+                if((j==0 && code>5) || (j==1 && code<5) || (j==2 && code%2==1) || (j==3 && code%2==0) ){
+
+                    var sta=1;
+                    var showname=showarr[j];
+                }else sta=0;
+
+
+
+                if (sta==1) {
+                    countArray[num0]++;
+                    numArray[num0] = -1;
+                    MaxNumArray[num0]++;
+                    if (MaxNum[num0] < MaxNumArray[num0])
+                        MaxNum[num0] = MaxNumArray[num0];
+      line.push({'class':'numbg'+j,'value':showname});
+                  //  str3 += "<td class='numbg"+j+"'>"+showname+"</td>";
+                }
+                else {
+                    MaxNumArray[num0] = 0;
+                    numArray[num0]++;
+                    if (MaxLostNum[num0] < numArray[num0])
+                        MaxLostNum[num0] = numArray[num0];
+                   line.push({'class':'','value':numArray[num0]});
+                  //  str3 += "<td class=\"wdh td0\">"+numArray[num0]+"</td>";
+                }
+            }
+       lines.push(line);
+        }
+       // console.log(lines);
+        this.LotteryLines=lines;
+  var lists=new Array();
+                                     var line=[{'class':'issue','value':'最大连出'}];
+                                     for(var i=0;i<6;i++){
+                                        line.push({'class':'num','value':''}); 
+                                     }
+                                    
+                                       var num0 = min;
+                                         while (num0 <= max) {
+                                              line.push({'class':'num','value':MaxNum[num0]});
+                                                    num0++;
+                                        }
+                                        
+                                      lists.push(line);
+                                      var line=[{'class':'issue','value':'最大遗漏'}];
+                               for(var i=0;i<6;i++){
+                                  line.push({'class':'num','value':''}); 
+                               }
+                                                                   
+                                        var num0 = min;
+                                          while (num0 <= max) {
+                                               line.push({'class':'num','value':MaxLostNum[num0]});
+                                                     num0++;
+                                         }
+                                         
+                                       lists.push(line);
+                                      var line=[{'class':'issue','value':'出现次数'}];
+                                       for(var i=0;i<6;i++){
+                                          line.push({'class':'num','value':''}); 
+                                       }
+                                                                           
+                                        var num0 = min;
+                                          while (num0 <= max) {
+                                               line.push({'class':'num','value':countArray[num0]});
+                                                     num0++;
+                                        
+                                         }
+                                       lists.push(line);
+                                       var line=[{'class':'issue','value':'平均遗漏'}];
+                                         for(var i=0;i<6;i++){
+                                            line.push({'class':'num','value':''}); 
+                                         }
+                                                                             
+                                         var num0 = min;
+                                           while (num0 <= max) {
+                                                      if(countArray[num0]>0)
+                                                             var tt= (this.historylist.length-countArray[num0])/countArray[num0];
+                                                               else
+                                                             var tt= this.historylist.length;
+                                                               tt=parseInt(tt);
+                                                line.push({'class':'num','value':tt});
+                                                      num0++;
+                                          }
+                                         
+                                        lists.push(line);
+                              this.LotteryBottomLines=new Array();
+                                  this.LotteryBottomLines=lists;
+                                   this.scrollToBottom();
+                
+
+    },
+    
+    //和值跨度
+    hzList(type) {
+    this.ischart=false;
+    
+
+            var min = 0;
+            var max = 9;
+    
+ 
+            min = 0;
+            max = 3;
+    
+    this.LotteryHeadLines=[];
+              this.LotteryHeadLines.push('期号');
+                this.LotteryHeadLines.push('万');
+                 this.LotteryHeadLines.push('千');
+                  this.LotteryHeadLines.push('百');
+                   this.LotteryHeadLines.push('十');
+                    this.LotteryHeadLines.push('个');
+             
+                      this.LotteryHeadLines.push('前二');
+                       this.LotteryHeadLines.push('前三');
+                        this.LotteryHeadLines.push('中三');
+                         this.LotteryHeadLines.push('后三');
+                          this.LotteryHeadLines.push('后二');
+                 var type= this.wanfa_key1; 
+
+ var lines=[];
+ for(var i=this.historylist.length-1;i>=0;i--){
+     var item=this.historylist[i];
+     var line=[];
+        var dt = item;
+        var num0;
+      var strArray2 = item['openCode'].split(',');
+           line.push({'class':'issue','value':this.issue(item['issueNo'])});
+               
+  
+              
+                num0 = min;
+                for(var tt=0;tt<strArray2.length;tt++){
+                   
+                     line.push({'class':'','value':strArray2[tt]});
+                    
+                }
+    
+    
+                var showarr=new Array('0-1','0-2','1-3','2-4','3-4');
+                for(var j=0;j<5;j++){
+                    var weinum=showarr[j].split('-');
+    
+                    var codearr=this.Lot_New(strArray2,parseInt(weinum[0]),parseInt(weinum[1]));
+                    if(type=='hz')
+                        var sum=this.arr_sum(codearr);
+                    else var sum=this.arr_kd(codearr);
+                    //str3 += "<td class='numbg"+j+"'>"+sum+"</td>";
+                     line.push({'class':'numbg'+j,'value':sum});
+    
+    
+                }
+    
+  
+            lines.push(line);
+             }
+            // console.log(lines);
+             this.LotteryLines=lines;
+               this.LotteryBottomLines=new Array();
+        },
+       arr_sum( arr ) {
+            var sum=0;
+            for(var i=0;i<arr.length;i++){
+                sum+=parseInt(arr[i]);
+            }
+            return sum;
+        },
+        arr_kd( arr ) {
+                var sum=0;
+                for(var i=0;i<arr.length-1;i++){
+                    for(var j=i+1;j<arr.length;j++){
+                        var cha=arr[i]-arr[j];
+                        if(cha<0) cha=-cha;
+                        if(cha>sum) sum=cha;
+                    }
+                }
+                return sum;
+            },
+                Lot_New(arr,begin,to){
+                       var arr11=Array();
+                       for(var i=begin;i<to+1;i++){
+               
+                           arr11[arr11.length]=arr[i];
+                       }
+                       return arr11;
+               
+                   },
+                   in_arr_num(arr,str) {
+                           var num=0;
+                           for(var i=0;i<arr.length;i++){
+                   
+                               if(arr[i]==str) num++;
+                           }
+                           return num;
+                       },
+           drawchart(){
+            var windowWidth= uni.getSystemInfoSync().windowWidth;
+              var type=this.gameshow.type;
+              if(type=='k3') var ballnum=6;
+              else if(type=='11x5') var ballnum=11;
+              else var ballnum=10;
+            
+            var w=(windowWidth - 56)/ballnum;
+               var context = uni.createCanvasContext('ballchart',this);
+               var lineheight=31;
+               //#ifdef APP-PLUS
+              if(plus.os.name=='iOS')
+               var lineheight=31;
+               else var lineheight=30.5;
+               //#endif
+                   context.setStrokeStyle("#5250ae")
+                   context.setLineWidth(1)
+                   context.clearRect(0,0,windowWidth,this.historylist.length*lineheight);
+                      var num=0;
+                   for(var i=this.historylist.length-1;i>=0;i--){
+                         var item=this.historylist[i];
+                          var strArray2 = item['openCode'].split(',');
+                          var code=strArray2[this.wanfa_key2];
+                          if(type!='ssc' && type!='ffc') code=parseInt(code)-1;
+                          var y=lineheight*num+16;
+                         
+                          var x=w*code+w/2;
+                          if(num==0){
+                               context.moveTo(x,y);
+                          }
+                          else{
+                               context.lineTo(x,y);
+                          }
+                       num++;
+                   
+                   }
+
+                   setTimeout(function() { //必须延迟执行 不然H5不显示
+                   context.stroke()
+                   context.draw()
+                   }, 200)
+                  
+           },
+           
+           load_trend(){
+              if(this.wanfa_key1=='danhao') this.danhaoList();
+                if(this.wanfa_key1=='duohao') this.duohaoList();
+                if(this.wanfa_key1=='lhh') this.lhhList();
+                if(this.wanfa_key1=='ds' || this.wanfa_key1=='dx') this.dxList();
+               if(this.wanfa_key1=='5xhz') this.hz5xList();
+               if(this.wanfa_key1=='hz' || this.wanfa_key1=='kd') this.hzList();
+               if(this.wanfa_key1=='hmds') this.hmdsList();
+               if(this.wanfa_key1=='hzxt') this.hzxtList();
+           },
+			showdata(){
+           
+            this.loadmethod();
+          //  this.load_trend();
+               
+            }
+		},
+        watch:{
+          historylist(){
+       
+              this.load_trend();
+          }  ,
+          gameid(){
+                this.historylist=this.lotterylist;
+               this.loadmethod();
+          }
+        },
+        created() {
+            this.showdata(); 
+            // #ifndef APP-PLUS
+               this.pagebottom='55'
+            // #endif
+            
+            
+            this.$socket.on('sendlottery', (res) => {
+             //  console.log(res.data)
+               this.update_lottery(res.data)
+             })  
+        },
+        destroyed() {
+         
+            this.$socket.off('sendlottery');
+        }
+	}
+</script>
+
+<style>
+    .pages{
+         height: 35px;
+         line-height: 35px;
+         text-align: center;
+         font-size: 14px;
+       
+         
+     }
+     
+     .pages > view{
+         display: inline-block;
+         height: 35px;
+         width: 34px;
+         line-height: 35px;
+         border: 1px #eee solid;
+         margin: 10px auto;
+         background-color: #fff;
+    
+     }
+    .pages > view.active{
+        color:#fff;
+        border: 1px solid #2319DC;
+        background-color: #2319DC;
+    }
+       
+    .canvas{
+        position: absolute;
+     top:32px;
+        left:56px;
+        width: calc(100% - 56px);
+        display: inline-block;
+        z-index: 1;
+        border: 0px #FF0000 solid;
+    }
+.query-form
+{
+   position: fixed;
+top:-2px;
+    left: 0px;
+    width: 100%;
+    height:60px;
+    line-height: 30px;
+    display: inline-block;
+    background-color: #fff;
+    border-bottom: 1px #ccc solid;
+    z-index: 999999;
+    text-align: center;
+}
+.showtabs{
+    position: fixed;
+    top:65px;
+    left: 0px;
+    width: 100%;
+  
+    line-height: 35px;
+
+    background-color: #fff;
+
+    z-index: 9999999;
+    text-align: center;
+overflow-y: scroll;
+    -webkit-transform: translate(100vw,-50%);
+    -moz-transform: translate(100vw,-50%);
+    -ms-transform: translate(100vw,-50%);
+    transform: translate(100vw,-50%);
+    -webkit-transition: .5s;
+    -moz-transition: .5s;
+    -ms-transition: .5s;
+    transition: .5s;
+   font-size: 14px;
+    -webkit-overflow-scrolling: touch;
+
+}
+.showtabs.active{
+    transform: translate(0,0%);
+
+}
+.showtabs::-webkit-scrollbar{
+    display: none;
+}
+.showtabs .lines{
+
+    height:28;
+    line-height:28px;
+    background-color: #ccc;
+    color: #333;
+    text-align: left;padding-left: 10px;
+    clear: both;
+    margin-top: 0px;
+}
+.showtabs .line-btn{
+    clear: both;
+    display:inline-block;
+    padding:5px 0px;
+    width: 100%;
+    margin-bottom: 0px;
+}
+.showtabs .line-btn .item{
+    display: inline-block;
+    width: 80px;
+    margin: 5px 20px;
+text-align: center;
+    border: 1px #ddd solid;
+    border-radius: 15px;
+    height:30px;
+    line-height:30px;
+
+}
+.showtabs .line-btn .item:nth-child(3n+1){
+    float: left;
+
+}
+.showtabs .line-btn .item:nth-child(3n+2){
+    float: left;
+
+}
+.showtabs .line-btn .item:nth-child(3n){
+    float: right;
+
+}
+.showtabs .line-btn .item.current{
+    background-color: #5250ae;
+    color: #fff;
+}
+.query-form .menu{
+    height: 30px;
+    line-height: 30px;
+}
+.query-form .menu view{
+    display: inline-block;
+    height:25px;
+    line-height: 25px;
+    width: 60px;
+    text-align: center;
+    border:1px solid  #5250ae;
+    border-radius: 5px;
+    color: #5250ae;
+    background-color: #fff;
+    font-size: 12px;
+    margin: 0 2px;
+    vertical-align:middle;
+}
+.query-form .menu view.current{
+    background-color: #5250ae;
+    color: #fff;
+
+}
+.query-form .menu2{
+    height: 30px;
+    line-height: 30px;
+    font-size: 28upx;
+    margin-top: 10upx;
+}
+.query-form .lab, .query-form .ipt, .query-form select, .query-form .to, .query-form .btn, .query-form .query-date
+{
+    float: left;
+    margin-right: 10px;
+    margin-bottom: 10px;
+}
+.query-form .ipt, .query-form select
+{
+    border: 1px solid #e7eaeb;
+}
+.query-form .ipt
+{
+    width: 100px;
+    height: 24px;
+    padding: 2px 9px;
+}
+.query-form .lab, .query-form .to
+{
+    height: 30px;
+    line-height: 30px;
+    overflow: hidden;
+}
+.query-form .query-date
+{
+    position: relative;
+}
+.query-form .query-date .ipt
+{
+    margin-right: 0;
+    margin-bottom: 0;
+}
+
+.query-form select
+{
+    width: 100px;
+    height: 30px;
+    padding-left: 5px;
+}
+.query-form .btn-query
+{
+    width: 60px;
+    height: 30px;
+    margin-right: 5px;
+    border-radius: 3px;
+    color: #fff;
+    background-color: #fba026;
+}
+.query-form .btn-query2
+{
+    width: 60px;
+    height: 30px;
+    line-height: 30px;
+    margin: auto 5px auto 0px;
+    border-radius: 3px;
+    color: #fff;
+    background-color: #fba026;
+}
+.query-form .time-range
+{
+    float: left;
+}
+.query-form .time-range li
+{
+    float: left;
+    width: 88px;
+    height: 28px;
+    line-height: 28px;
+    margin-right: 10px;
+    border: 1px solid #e7eaeb;
+    text-align: center;
+    color: #999;
+    cursor: pointer;
+}
+.query-form .time-range .selected
+{
+    color: #fff;
+    border-color: #fba026;
+    background-color: #fba026;
+}
+
+.query-tablebox{
+    overflow-y: scroll;
+    -webkit-overflow-scrolling: touch;
+    overflow-x: hidden;
+    position: fixed;
+    top:65px;
+    left:0px;
+    width: 100%;;
+    display: inline-block;
+    z-index: 2;
+}
+.query-table
+{
+    width: 100%;
+    max-width: 100%;
+    border-spacing: 0;
+    border-collapse: collapse;
+    text-align: center;
+    display: table;
+    table-layout: fixed;
+ 
+     font-size: 12px;
+     line-height: 30px;;
+
+}
+
+
+.query-table th, .query-table td {
+    height: 30px;
+    line-height: 30px;
+    padding: 0px 0px !important;
+      margin: 0px 0px !important;
+    text-align: center;
+    border: 1px solid #ddd;
+}
+.query-table tr th:first-child, .query-table tr td:first-child{
+    width: 55px;;
+}
+.query-table th {
+    background-color: #f2f2f2;
+}
+.query-table td.num{
+    color: #ccc;
+}
+.query-table td{
+    position: relative;
+}
+.query-table td .ball
+{
+    
+    position: absolute;
+    z-index: 100;
+    left: calc(50% -16px);
+    top:0px;
+    color: #FFF;
+    font-size: 12px;
+    color: #fff;
+    background: -webkit-linear-gradient(#5250ae,#702dfe);
+    background: -moz-linear-gradient(#262732,#702dfe);
+    background: -o-linear-gradient(#5250ae,#702dfe);
+    background: linear-gradient(#5250ae,#702dfe);
+
+    border-radius: 50%;
+    width: 24px;
+    height: 24px;
+    line-height: 24px;
+    display: inline-block;
+    margin: 0 auto;
+    position:relative ;
+}
+.query-table td  .times{
+
+    position: absolute;
+    top:0px;
+    right:0px;
+    background-color: #1d830d;
+    color: #fff;
+    border-radius: 50%;
+    width: 16px;
+    height: 16px;
+    line-height: 16px;
+    text-align: center;
+    z-index: 101;
+    font-size:20upx;
+;
+}
+
+.color1 td,.color1 view{
+    color:#872db1;
+}
+.color2 td,.color2 view{
+    color:#4b87d0;
+}
+.color3 td,.color3 view{
+    color:#409940;
+}
+.color0 td,.color0 view{
+    color:#ed6e08;
+}
+.numbg0,.numbg5{
+    background-color: #7b9ce3;
+    color:#fff;
+}
+.numbg1{
+    background-color: #3fc7b5;
+    color:#fff;
+}
+.numbg2{
+    background-color: #98b658;
+    color:#fff;
+}
+.numbg3{
+    background-color: #cc9f33;
+    color:#fff;
+}
+.numbg4{
+    background-color: #179d69;
+    color:#fff;
+}
+.noborder{
+
+    border-right: 0px !important;
+    border-left: 0px !important;
+}
+.f12{
+    font-size: 12px;
+    line-height: 14px !important;
+
+}
+  .gamenav{
+      position: fixed;
+    top:65px;
+      left: 0px;
+      width: calc(100% - 10px);
+      z-index:5;
+      background-color: rgba(0,0,0,0.8);
+      line-height: 35px;
+      padding: 5px 5px;
+      transform: translate(0,-100vh);
+      transition: .5s;
+      border-bottom-right-radius: 8px;
+      border-bottom-left-radius: 8px;
+  }
+  .gamenav.active{
+      transform: translate(0,0);
+  }
+  
+  .gamenav > view{
+      display: table;
+      table-layout: fixed;
+      color: #fff;
+      width: 100%;
+      margin: 5px auto;
+  }
+  
+  .gamenav > view > view{
+      display: table-cell;
+      text-align: left;
+  }
+  .gamenav > view > view:first-child{
+      width: 60px;
+      text-align: right;
+      padding-right: 5px;
+      font-size: 14px;
+  }
+  .gamenav > view > view:last-child {
+      line-height: 30px;
+  }
+  .gamenav > view > view:last-child > view{
+      display:inline-block ;
+  
+      margin: 0px 5px;
+      background: #ffffff;
+      font-size: 12px;
+      color: #000;
+      height: 20px;
+      line-height: 20px;
+      width: 80px;
+      text-align: center;
+      border-radius: 10px;
+  
+  }
+  .gamenav > view > view:last-child >view:hover,.gamenav > view > view:last-child >view.active{
+      text-decoration: underline;
+      color:#2319dc ;
+  }
+
+</style>

+ 132 - 0
components/uni-icons/icons.js

@@ -0,0 +1,132 @@
+export default {
+	"pulldown": "\ue588",
+	"refreshempty": "\ue461",
+	"back": "\ue471",
+	"forward": "\ue470",
+	"more": "\ue507",
+	"more-filled": "\ue537",
+	"scan": "\ue612",
+	"qq": "\ue264",
+	"weibo": "\ue260",
+	"weixin": "\ue261",
+	"pengyouquan": "\ue262",
+	"loop": "\ue565",
+	"refresh": "\ue407",
+	"refresh-filled": "\ue437",
+	"arrowthindown": "\ue585",
+	"arrowthinleft": "\ue586",
+	"arrowthinright": "\ue587",
+	"arrowthinup": "\ue584",
+	"undo-filled": "\ue7d6",
+	"undo": "\ue406",
+	"redo": "\ue405",
+	"redo-filled": "\ue7d9",
+	"bars": "\ue563",
+	"chatboxes": "\ue203",
+	"camera": "\ue301",
+	"chatboxes-filled": "\ue233",
+	"camera-filled": "\ue7ef",
+	"cart-filled": "\ue7f4",
+	"cart": "\ue7f5",
+	"checkbox-filled": "\ue442",
+	"checkbox": "\ue7fa",
+	"arrowleft": "\ue582",
+	"arrowdown": "\ue581",
+	"arrowright": "\ue583",
+	"smallcircle-filled": "\ue801",
+	"arrowup": "\ue580",
+	"circle": "\ue411",
+	"eye-filled": "\ue568",
+	"eye-slash-filled": "\ue822",
+	"eye-slash": "\ue823",
+	"eye": "\ue824",
+	"flag-filled": "\ue825",
+	"flag": "\ue508",
+	"gear-filled": "\ue532",
+	"reload": "\ue462",
+	"gear": "\ue502",
+	"hand-thumbsdown-filled": "\ue83b",
+	"hand-thumbsdown": "\ue83c",
+	"hand-thumbsup-filled": "\ue83d",
+	"heart-filled": "\ue83e",
+	"hand-thumbsup": "\ue83f",
+	"heart": "\ue840",
+	"home": "\ue500",
+	"info": "\ue504",
+	"home-filled": "\ue530",
+	"info-filled": "\ue534",
+	"circle-filled": "\ue441",
+	"chat-filled": "\ue847",
+	"chat": "\ue263",
+	"mail-open-filled": "\ue84d",
+	"email-filled": "\ue231",
+	"mail-open": "\ue84e",
+	"email": "\ue201",
+	"checkmarkempty": "\ue472",
+	"list": "\ue562",
+	"locked-filled": "\ue856",
+	"locked": "\ue506",
+	"map-filled": "\ue85c",
+	"map-pin": "\ue85e",
+	"map-pin-ellipse": "\ue864",
+	"map": "\ue364",
+	"minus-filled": "\ue440",
+	"mic-filled": "\ue332",
+	"minus": "\ue410",
+	"micoff": "\ue360",
+	"mic": "\ue302",
+	"clear": "\ue434",
+	"smallcircle": "\ue868",
+	"close": "\ue404",
+	"closeempty": "\ue460",
+	"paperclip": "\ue567",
+	"paperplane": "\ue503",
+	"paperplane-filled": "\ue86e",
+	"person-filled": "\ue131",
+	"contact-filled": "\ue130",
+	"person": "\ue101",
+	"contact": "\ue100",
+	"images-filled": "\ue87a",
+	"phone": "\ue200",
+	"images": "\ue87b",
+	"image": "\ue363",
+	"image-filled": "\ue877",
+	"location-filled": "\ue333",
+	"location": "\ue303",
+	"plus-filled": "\ue439",
+	"plus": "\ue409",
+	"plusempty": "\ue468",
+	"help-filled": "\ue535",
+	"help": "\ue505",
+	"navigate-filled": "\ue884",
+	"navigate": "\ue501",
+	"mic-slash-filled": "\ue892",
+	"search": "\ue466",
+	"settings": "\ue560",
+	"sound": "\ue590",
+	"sound-filled": "\ue8a1",
+	"spinner-cycle": "\ue465",
+	"download-filled": "\ue8a4",
+	"personadd-filled": "\ue132",
+	"videocam-filled": "\ue8af",
+	"personadd": "\ue102",
+	"upload": "\ue402",
+	"upload-filled": "\ue8b1",
+	"starhalf": "\ue463",
+	"star-filled": "\ue438",
+	"star": "\ue408",
+	"trash": "\ue401",
+	"phone-filled": "\ue230",
+	"compose": "\ue400",
+	"videocam": "\ue300",
+	"trash-filled": "\ue8dc",
+	"download": "\ue403",
+	"chatbubble-filled": "\ue232",
+	"chatbubble": "\ue202",
+	"cloud-download": "\ue8e4",
+	"cloud-upload-filled": "\ue8e5",
+	"cloud-upload": "\ue8e6",
+	"cloud-download-filled": "\ue8e9",
+	"headphones":"\ue8bf",
+	"shop":"\ue609"
+}

File diff ditekan karena terlalu besar
+ 10 - 0
components/uni-icons/uni-icons.vue


+ 214 - 0
components/url.vue

@@ -0,0 +1,214 @@
+<template>
+    <view :class="{'self':self}">
+        <block v-if="messages.length==1 && messages[0].type=='url'">
+            
+            <view v-if="showinfo" class="des" @tap="click_url(messages[0].content)">
+                
+                <view class="des_title">{{title}}</view>
+                 <view class="des_content" v-if="description!=''">{{description}}</view>
+                  <view class="des_url">
+                  <uni-icons type='chatboxes' class="icon"></uni-icons>
+                 
+                 {{messages[0].content}}
+                  
+                  </view>
+            </view>
+            
+           <view  class="url" v-else  @tap="click_url(messages[0].content)">
+               
+           {{messages[0].content}}
+           </view>  
+            
+            
+        </block>
+        <block v-else>
+           <block v-for="(m,index) in messages" :key="index"   >
+              <view v-if="m.type=='url'" class="url"  @tap="click_url(m.content)">
+           {{m.content}} 
+              </view> 
+              <block v-else >
+                
+              <rich-text :nodes="m.content" class="text"></rich-text>
+                 </block>
+
+           </block>   
+            
+            
+        </block>
+         
+   
+    </view>
+</template>
+
+<script>
+      import uniIcons from './uni-icons/uni-icons.vue'
+    export default {
+        components: {
+            uniIcons
+        },
+        props: {
+            content: {
+                required: true,
+            },
+           self:{
+               default:0
+           }
+        },
+        data() {
+            return {
+                res: {},
+                messages:[],
+                showinfo:false,
+                title:'',
+                description:'',
+            }
+        },
+       
+        methods: {
+          showdata(){
+              
+              for(var i=0;i<this.content.urls.length;i++){
+                  var url=this.content.urls[i];
+                  try{
+                      
+                   var content=this.content.content.replace(url,'^'+url+"^") ;    
+                  }catch(e){
+                      //TODO handle the exception
+                     // console.log(this.content.content.content)
+                    var content=this.content.content.content.replace(url,'^'+url) ; 
+                  }
+                
+              }
+          
+              var arr=content.split('^');
+                 var reg=/(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9\/][-a-zA-Z0-9\/]{0,62})+(:\d+)*(\/\w+\.\w+)*$/g
+              // console.log(arr)
+            for(var i=0;i<arr.length;i++){
+                var isin=0;
+               for(var j=0;j<this.content.urls.length;j++){
+                   // console.log(arr[i],this.content.urls[j])
+                   if(arr[i]==this.content.urls[j]) isin=1;
+               }
+               if(arr[i]!=''){
+                   if(isin==1){
+                      var data={type:'url',content:arr[i]} 
+                   }
+                   else{
+                      
+                     var data={type:'text',content:arr[i]} 
+                   
+                   }
+                  this.messages.push(data);
+               }
+            }
+           
+              // #ifdef APP-PLUS
+            if(this.messages.length==1 && this.messages[0].type=='url'){
+                
+               
+                if(this.messages[0].content.indexOf('http')<=-1) this.messages[0].content='http://'+this.messages[0].content;
+                 var url=this.messages[0].content;
+                 
+            //    console.log(url);
+                uni.request({
+                    url:url,
+                    method:'GET',
+                    success: (res) => {
+                      
+                       this.gethtmlinfo(res.data);
+       
+                    }
+                })
+            }
+            // #endif
+            
+           // console.log( this.messages);
+             //this.res=this.content.content; 
+          },
+          gethtmlinfo(data){
+            
+              var reg = /<title(.*)>(.*)<\/title/;
+                var match=reg.exec(data);
+                
+                var title=match[2];
+               if(title!=undefined && title.length>1){
+                   this.showinfo=true;
+                   this.title=title;
+                   this.description="";
+               }
+                var reg = /<meta(\s)name=[\'\"]description[\'\"](\s)content=[\'\"]?([^\'\"]*)[\'\"]?/i;
+                  var match=reg.exec(data);
+                  
+                  try{
+                     var content=match[3];
+                     if(title!=undefined && title.length>1 && content!=undefined && content.length>1  ){
+                         this.showinfo=true;
+                         this.title=title;
+                         this.description=content;
+                     }
+                      
+                  }catch(e){
+                      //TODO handle the exception
+                       //console.log(title);
+                      if(title!=undefined && title.length>1){
+                          this.showinfo=true;
+                          this.title=title;
+                          this.description="";
+                      }
+                  }
+               
+              
+              
+      },
+          click_url(url){
+              this.$emit('clickurl',url);
+              //console.log(url)
+          },
+        },
+    	created() {
+            //console.log(this.content)
+    	this.showdata(); 
+    	},
+       
+        onLoad() {
+           
+    		
+        }
+    }
+</script>
+
+<style>
+    .text ,.url {
+  display:inline-block ;
+    }
+     .url{
+         color: #2319DC;
+         text-decoration: underline;
+         
+     }
+     .des{}
+     .des_content{
+         font-size: 12px;
+         line-height:18px;
+         overflow : hidden;
+         text-overflow: ellipsis;
+         display: -webkit-box;
+         -webkit-line-clamp: 3;
+         -webkit-box-orient: vertical;
+     }
+     .des_url{
+         font-size: 12px;
+         color: #666;
+   
+     }
+     .icon{
+         font-size: 12px !important;
+         color: #666 !important;
+     }
+     .self .des_url{
+         color: #eee;
+     }
+      .self .icon{
+           color: #eee !important;
+      }
+</style>

+ 6 - 0
config.js

@@ -0,0 +1,6 @@
+var weburl='chat.yiqushangshi.com';
+export default {
+    apiUri: 'https://'+weburl+'/api/',
+    socketUri: 'wss://'+weburl+'/ws',
+    imgUri: 'https://'+weburl+'/',
+}

+ 2 - 0
config/ios/config.txt

@@ -0,0 +1,2 @@
+包名:com.yqlm.name
+密码yqlm1234

TEMPAT SAMPAH
config/ios/yqlmapp.mobileprovision


TEMPAT SAMPAH
config/ios/证书.p12


TEMPAT SAMPAH
config/logo.png


TEMPAT SAMPAH
config/yiqu.keystore


+ 2 - 0
config/证书信息.txt

@@ -0,0 +1,2 @@
+别名:inc.yiqu.com
+秘钥:112233

+ 37 - 0
extends/helpers.js

@@ -0,0 +1,37 @@
+import {networkImage} from '../utility/lang';
+import {jump} from '../utility/api';
+
+function toast(message, icon = 'none') {
+    if (message && message.message) {
+        message = message.message;
+    }
+
+    if (!message) {
+        return;
+    }
+
+    if (typeof message !== 'string') {
+        message = JSON.stringify(message);
+    }
+
+    //console.log('[toast] ' + message);
+
+    return new Promise((resolve,reject)=>{
+		uni.showToast({
+		    title: message,
+		    icon,
+			duration: 1500
+		});
+		setTimeout(()=>{
+			resolve();
+		},1500);
+	});
+}
+
+export default function install(Vue) {
+    Object.defineProperties(Vue.prototype, {
+        $toast: {get: () => toast},
+        $img: {get: () => networkImage},
+        $jump: {get: () => jump},
+    });
+}

+ 28 - 0
extends/index.js

@@ -0,0 +1,28 @@
+import Emitter from '../utility/emitter';
+import storage from './storage';
+import store from './store';
+import helper from './helpers';
+
+let bus = null;
+
+function install(Vue) {
+    if (bus instanceof Emitter) {
+        return;
+    }
+
+    bus = new Emitter();
+
+    Object.defineProperties(Vue.prototype, {
+        $bus: {get: () => bus},
+        $storage: {get: () => storage},
+    });
+
+    // 爲什麽不能使用 Object.defineProperty 只定義 getter ???
+    Vue.prototype.$store = store;
+
+    helper(Vue);
+}
+
+export default {
+    install,
+}

+ 1 - 0
init.bat

@@ -0,0 +1 @@
+start https://www.wusuo8.com

+ 71 - 0
js_sdk/ican-H5Api/ican-H5Api.js

@@ -0,0 +1,71 @@
+//#ifdef H5
+/** clipboard.js v2.0.4**/
+!function(t,e){try{window.ClipboardJS=e();}catch(e){};"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}
+  return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}
+  return function(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}}(),a=o(n(1)),c=o(n(3)),u=o(n(4));function o(t){return t&&t.__esModule?t:{default:t}}
+  var l=function(t){function o(t,e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,o);var n=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(o.__proto__||Object.getPrototypeOf(o)).call(this));return n.resolveOptions(e),n.listenClick(t),n}
+    return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(o,c.default),i(o,[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===r(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,u.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new a.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return s("action",t)||'copy'}},{key:"defaultTarget",value:function(t){var e=s("target",t);if(e){return document.querySelector(e)}}},{key:"defaultText",value:function(t){return s("text",t)||this.text}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),o}();function s(t,e){var n="data-clipboard-"+t;let isFun=e&&typeof e.hasAttribute==='function';if(isFun&&e.hasAttribute(n)){return e.getAttribute(n)}}
+  t.exports=l},function(t,e,n){"use strict";var o,r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}
+  return function(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}}(),a=n(2),c=(o=a)&&o.__esModule?o:{default:o};var u=function(){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.resolveOptions(t),this.initSelection()}
+  return i(e,[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,c.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,c.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}
+      this.handleResult(e)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),e}();t.exports=u},function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(t),o.removeAllRanges(),o.addRange(r),e=o.toString()}
+  return e}},function(t,e){function n(){}
+  n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var o=this;function r(){o.off(t,r),e.apply(n,arguments)}
+      return r._=e,this.on(t,r,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;o<r;o++)n[o].fn.apply(n[o].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),o=n[t],r=[];if(o&&e)for(var i=0,a=o.length;i<a;i++)o[i].fn!==e&&o[i].fn._!==e&&r.push(o[i]);return r.length?n[t]=r:delete n[t],this}},t.exports=n},function(t,e,n){var d=n(5),h=n(6);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!d.string(e))throw new TypeError("Second argument must be a String");if(!d.fn(n))throw new TypeError("Third argument must be a Function");if(d.node(t))return s=e,f=n,(l=t).addEventListener(s,f),{destroy:function(){l.removeEventListener(s,f)}};if(d.nodeList(t))return a=t,c=e,u=n,Array.prototype.forEach.call(a,function(t){t.addEventListener(c,u)}),{destroy:function(){Array.prototype.forEach.call(a,function(t){t.removeEventListener(c,u)})}};if(d.string(t))return o=t,r=e,i=n,h(document.body,o,r,i);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList");var o,r,i,a,c,u,l,s,f}},function(t,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e,n){var a=n(7);function i(t,e,n,o,r){var i=function(e,n,t,o){return function(t){t.delegateTarget=a(t.target,n),t.delegateTarget&&o.call(e,t)}}.apply(this,arguments);return t.addEventListener(n,i,r),{destroy:function(){t.removeEventListener(n,i,r)}}}
+  t.exports=function(t,e,n,o,r){return"function"==typeof t.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return i(t,e,n,o,r)}))}},function(t,e){if("undefined"!=typeof Element&&!Element.prototype.matches){var n=Element.prototype;n.matches=n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector}
+  t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}}])});let Types={isFunction:function(obj){var type=Object.prototype.toString.call(obj)
+    return type=='[object Function]'},isObject:function(obj){var type=Object.prototype.toString.call(obj)
+    return type=='[object Object]'},isString:function(obj){var type=Object.prototype.toString.call(obj)
+    return type=='[object String]'}}
+uni.setClipboardData=function(options){let emptyFun=function(){}
+  let config={data:null,event:null,success:emptyFun,fail:emptyFun,complete:emptyFun}
+  if(options&&Types.isObject(options)){config=Object.assign({},config,options)}
+  if(options&&Types.isString(options)){config=Object.assign({},config,{data:options})}
+  let data=config.data
+  let success=config.success||emptyFun
+  let fail=config.fail||emptyFun
+  let complete=config.complete||emptyFun
+  let e=config.event||window.event||{}
+  let cb=new ClipboardJS('.null',{text:()=>data})
+  cb.on('success',function(res){
+    window.__clipboard__=data;
+    success&&Types.isFunction(success)&&success({data:res.text})
+    complete&&Types.isFunction(complete)&&complete()
+    cb.off('error')
+    cb.off('success')
+    cb.destroy()})
+  cb.on('error',function(err){fail&&Types.isFunction(fail)&&fail(err)
+    complete&&Types.isFunction(complete)&&complete()
+    cb.off('error')
+    cb.off('success')
+    cb.destroy()})
+  cb.onClick(e)};
+uni.getClipboardData=function(options){let emptyFun=function(){}
+    let config={data:null,event:null,success:emptyFun,fail:emptyFun,complete:emptyFun}
+    if(options&&Types.isObject(options)){config=Object.assign({},config,options)}
+    let success=config.success||emptyFun
+    let fail=config.fail||emptyFun
+    let complete=config.complete||emptyFun
+    if(window.__clipboard__!==undefined){success&&Types.isFunction(success)&&success({data:window.__clipboard__})}else{fail&&Types.isFunction(fail)&&fail({data:null})}
+    complete&&Types.isFunction(complete)&&complete()};
+function fileDownLoad(data){var linkElement=document.createElement('a')
+  linkElement.setAttribute('href',data.blob)
+  linkElement.setAttribute('downLoad',data.name)
+  linkElement.click()}
+uni.saveImageToPhotosAlbum=uni.saveVideoToPhotosAlbum=function(options){let emptyFun=function(){}
+  let config={filePath:null,success:emptyFun,fail:emptyFun,complete:emptyFun}
+  if(options&&Types.isObject(options)){config=Object.assign({},config,options)}
+  if(options&&Types.isString(options)){config=Object.assign({},config,{filePath:options})}
+  let filePath=config.filePath
+  let success=config.success||emptyFun
+  let fail=config.fail||emptyFun
+  let complete=config.complete||emptyFun
+  if(!filePath){fail&&Types.isFunction(fail)&&fail({msg:'no File'})
+    complete&&Types.isFunction(complete)&&complete()
+    return}
+  let names=filePath.split('/')
+  let name=names[names.length-1]
+  uni.downloadFile({url:filePath,success:function(res){let tempFilePath=res.tempFilePath
+      fileDownLoad({name:name,blob:tempFilePath})
+      success&&Types.isFunction(success)&&success({filePath:filePath})},fail:function(err){fail&&Types.isFunction(fail)&&fail({msg:err})},complete:function(){complete&&Types.isFunction(complete)&&complete()}})}
+//#endif

+ 191 - 0
library/SQL.js

@@ -0,0 +1,191 @@
+class SQL{
+	
+    constructor(plus){
+		// 数据库名称一个软件只需要一个库这里写死
+        this.name = 'sqlite_mine_sql';
+        this.plus = plus;
+		// 存储路径
+		this.path = `_doc/sqlite_mine.db`;
+    }
+
+    initDatabase(){
+        return new Promise((resolve , reject) => {
+            const that = this;
+            let sql = `SELECT count(*) FROM sqlite_master WHERE type='table' AND name= database`;
+            that.plus.sqlite.executeSql({
+                name: that.name,
+                sql,
+                success(data){
+                    if(data === 0){
+                        that.plus.sqlite.executeSql({
+                            name: that.name,
+                            sql: `create table if not exists database("value" TEXT,"time" CHAR(100),"chat_id" CHAR(50))`,
+                            success(data){
+                                resolve(data);
+                            }
+                        });
+                    }else{
+						resolve();
+					}
+                    console.log('initDatabase success: '+JSON.stringify(data));
+                },
+                fail(e){
+                    that.plus.sqlite.executeSql({
+                        name: that.name,
+                        sql: `create table if not exists database("value" TEXT,"time" CHAR(100),"chat_id" CHAR(50))`,
+                        success(data){
+                            resolve(data);
+                        }
+                    });
+					// reject();
+                    console.log('initDatabase failed: '+JSON.stringify(e));
+                }
+            });
+        })
+    }
+	
+	// 连接数据库
+    openDB(){
+        return new Promise((resolve , reject)=>{
+			if(this.isOpen()){
+				return resolve();
+			}
+            this.plus.sqlite.openDatabase({
+                name: this.name,
+                path: this.path,
+                success(data){
+					console.log(`openDB success`,data)
+                    resolve(data);
+                },
+                fail(e){
+                    console.log('openDB failed: '+JSON.stringify(e));
+                    reject(e);
+                }
+            });
+        });
+    }
+	
+	// 判断数据库是否打开
+    isOpen(){
+        return this.plus.sqlite.isOpenDatabase({
+            name: this.name,
+            path: this.path
+        });
+    }
+	
+	// 关闭数据库
+    closeDB(){
+        this.plus.sqlite.closeDatabase({
+            name: this.name,
+            success(e){
+                console.log('closeDatabase success!');
+            },
+            fail(e){
+                console.log('closeDatabase failed: '+JSON.stringify(e));
+            }
+        });
+    }
+	
+	// 执行sql语句
+    async handleSQL(handleType, options, isClose){
+        await this.openDB();
+        await this.initDatabase();
+        switch(handleType){
+            case 'insert':
+                return this.insertSQL(options, isClose);
+            case 'delete':
+                return this.deleteSQL(options, isClose);
+            case 'select':
+                return this.selectSQL(options, isClose);
+            default:
+                throw new Error('没有这个操作!!!');
+        }
+    }
+	
+	// 插入sql语句
+    insertSQL(options, isClose) {
+		console.log('insert');
+        const that = this;
+        return new Promise((resolve , reject)=>{
+            const sql = `insert into database values(${options.value},${options.time},${options.chat_id})`;
+            that.plus.sqlite.executeSql({
+                name: that.name,
+                sql,
+                success(data){
+                    console.log('insertSQL success: '+JSON.stringify(data));
+                    isClose && that.closeDB();
+                    resolve(data);
+                },
+                fail(e){
+                    console.log('insertSQL failed: '+JSON.stringify(e));
+                    isClose && that.closeDB();
+                    reject(e);
+                }
+            });
+        });
+    }
+	
+	// 删除sql语句
+    deleteSQL(options, isClose){
+        return new Promise((resolve , reject)=>{
+            const that = that || this;
+            const sql = options.time ? `delete from database where chat_id = ${options.chat_id}where time > ${options.time}`:`delete from database where chat_id = ${options.chat_id}`;
+            that.plus.sqlite.executeSql({
+                name: that.name,
+                sql,
+                success(data){
+                    console.log('deleteSQL success: '+JSON.stringify(data));
+                    isClose && that.closeDB();
+                    resolve(data);
+                },
+                fail(e){
+                    console.log('deleteSQL failed: '+JSON.stringify(e));
+                    isClose && that.closeDB();
+                    reject(e);
+                }
+            });
+        });
+    }
+	
+	// 查询sql语句
+    selectSQL(options, isClose){
+        return new Promise((resolve , reject)=>{
+            const that = that || this; 
+            const sql = `select * from database where chat_id = ${options.chat_id}`;
+            that.plus.sqlite.selectSql({
+                name: that.name,
+                sql,
+                success(data){
+                    console.log('selectSQL success: '+JSON.stringify(data));
+					if(options.hasOwnProperty('pageNum') && options.hasOwnProperty('pageSize')){
+						let {pageNum,pageSize} = options;
+						let total = data.length;
+						let page = Math.ceil(total/pageSize);
+						let req = {
+							pageNum,
+							pageSize,
+							list:[],
+							total
+						};
+						let startIndex = (pageNum - 1) * pageSize;
+						if(pageNum<page){
+							req.list = data.slice(startIndex,startIndex+pageSize);
+							return resolve(req);
+						}
+					}else{
+						resolve(data);
+					}
+                    isClose && that.closeDB();
+                },
+                fail(e){
+                    console.log('selectSQL failed: '+JSON.stringify(e));
+                    isClose && that.closeDB();
+                    reject(e);
+                }
+            });
+            
+        });
+    }
+}
+
+export default new SQL(plus);

+ 121 - 0
library/_data.js

@@ -0,0 +1,121 @@
+export default {
+	/**
+	 * [设置获取globalData数据]
+	 * @param {Object} k 设置/获取的键
+	 * @param {Object} v 设置的值,没有传值就是获取这个键的值
+	 * @return {String|Array|Object}
+	 */
+	data(k,v){
+        
+         k=uni.getStorageSync('access_token')+'_'+k;
+   
+		if(v === undefined){
+			return getApp().globalData[k];
+		}
+		else{
+			getApp().globalData[k] = v;
+		}
+	},
+	/**
+	 * [设置获取保存在本地的页面数据]
+	 * @param {Object} k 设置/获取的键
+	 * @param {Object} v 设置的值,v为undefined获取这个键的值,v为null,移除这个键的数据
+	 * @return {String|Array|Object}
+	 */
+	localData(k,v){
+        k=uni.getStorageSync('access_token')+'_'+k;
+        
+		if(v === undefined){
+			return uni.getStorageSync(k);
+		}
+		else if(v === null){
+			uni.removeStorage({
+				key: k,
+				fail(){
+					uni.showModal({
+						content: '删除本地数据失败',
+					});
+				}
+			});
+		}
+		else {
+			uni.setStorage({
+				key: k,
+				data: v,
+				fail(){
+					uni.showModal({
+						content: '本地数据设置失败,请检测storage存储',
+					});
+				}
+			});
+		}
+	},
+    cache(k){
+          k=uni.getStorageSync('access_token')+'_'+k; 
+          return uni.getStorageSync(k);
+    },
+    addData(k,v){
+         k=uni.getStorageSync('access_token')+'_'+k;
+         //console.log(k);
+        // console.log(v);
+        let data=uni.getStorageSync(k);
+       // data=[];
+      if(v!=undefined){
+        
+        if(!data){
+            data=[];
+            v.map(item=>{
+                 data.push(item);
+            })
+           
+        }
+        else {
+            v.map(item=>{
+                 data.unshift(item);
+            })
+        }
+      }
+       
+        let item11=[];
+         data.map(item=>{
+             if(item!=null) {
+                 var add=1;
+              item11.map(item2=>{
+                  if(item2.id==item.id) {
+                    add=0;   
+                  }
+              })
+              if(add==1)
+              item11.push(item);   
+             }
+             
+         })
+         item11.sort((a, b) => parseInt(b.time)- parseInt(a.time));
+        uni.setStorageSync(k,item11);
+        return item11;
+        
+    },
+	/** 聊天静态文件地址 */
+	staticChat(){
+		return getApp().globalData.static_url + '/static/chat/';
+	},
+	/** 朋友圈静态文件地址 */
+	staticCircle(){
+		return getApp().globalData.static_url + '/static/circle/';
+	},
+	/** 头像地址 */
+	staticPhoto(){
+		return getApp().globalData.static_url + '/static/photo/';
+	},
+	/** 获取会话界面有多少未读消息 */
+	chatTipsNum(){
+		let num = 0,
+		chat_list = uni.getStorageSync('chat_list');
+		if(chat_list){
+			for(let value of chat_list){
+				num += (value.no_reader_num * 1);
+			}
+		}
+		return num;
+	},
+}

+ 146 - 0
library/_get.js

@@ -0,0 +1,146 @@
+import _mixins from './_mixins';
+import _action from './action';
+import _data from './_data';
+
+export default {
+	/** 获得会话列表数据 */
+	getChatList(){
+		_mixins.methods.$httpSend({
+			path: '/im/get/chatList',
+			success(data) {
+				_data.localData('chat_list',data);
+				uni.$emit('data_chat_list',data);
+				_action.setStatusTips();
+			}
+		});
+	},
+   /**
+	 * 获得对话数据 
+	 * @param {
+			发送的数据
+			send_data: {
+				list_id: list_id,
+				time: 0,
+				是否更新未读消息数
+				is_up: 1,
+			},
+			回调函数
+			calllback(data){
+				
+			},
+			是否需要操作本地缓存数据
+			is_action_data: 1,
+		}
+	 */
+	getChatData(config){
+		_mixins.methods.$httpSend({
+			path: '/im/get/chatData',
+			data: config.send_data,
+			success(data) {
+				if(config.is_action_data){
+					uni.$emit('data_chat_data',data);
+					_data.localData(data.list_id,data);
+				}
+				else{
+					uni.$emit('data_chat_data_unshift',data.list);
+				}
+				if('callback' in config){
+					config.callback(data);
+				}
+			}
+		});
+	},
+	/** 获得通讯录数据 */
+	getFriendList(send_data,callback){
+		if(!send_data){
+			send_data = {};
+		}
+		_mixins.methods.$httpSend({
+			path: '/im/get/friendList',
+			data: send_data,
+			success(data) {
+				if(data.data.length || 'up' in send_data){
+					_data.localData('friend_list',data.data);
+					uni.$emit('data_friend_list',data.data);
+				}
+				if(callback){
+					callback(data);
+				}
+			}
+		});
+	},
+	/** 获得朋友圈数据 data要发送的数据 type 0加载最新数据 1加载历史数据 */
+	getCircleList(send_data,callback){
+		_mixins.methods.$httpSend({
+			path: '/im/get/circleData',
+			data: send_data,
+			success(data) {
+				let circle_data = _data.localData('circle_data');
+				if(!circle_data){
+					circle_data = [];
+				}
+				if(send_data.type){
+					circle_data.push(...data.data);
+				} else {
+					circle_data.unshift(...data.data);
+				}
+				
+				_data.localData('circle_data',circle_data);
+				uni.$emit('data_circle_data',circle_data);
+				
+				if(callback) {
+					callback(data);
+				}
+			}
+		});
+	},
+	/** 获得基础数据 */
+	base(){
+		_mixins.methods.$httpSend({
+			path: '/im/get/base',
+			success(data) {
+				
+				data.user_info.photo += '?_=' + Math.random();
+				data.user_info.circle_img += '?_=' + Math.random();
+				
+				_data.data('user_info',data.user_info);
+				uni.$emit('data_user_info',data.user_info);
+				
+				_data.data('new_friend_tips_num',data.new_friend_tips_num);
+				_data.data('no_reader_chat_num',data.no_reader_chat_num);
+				_data.data('no_reader_circle',data.no_reader_circle);
+				_data.data('no_reader_circle_chat_num',data.no_reader_circle_chat_num);
+				_data.data('new_group_tips_num',data.new_group_tips_num);
+				
+				_action.setStatusTips();
+				_action.downloadPhoto();
+			}
+		});
+	},
+	/** 获得好友申请列表数据 */
+	getFriendApplyList(callback){
+		_mixins.methods.$httpSend({
+			path: '/im/get/applyFriend',
+			success(data) {
+				_data.localData('friend_apply_list',data);
+				uni.$emit('data_friend_apply_list',data);
+				if(callback){
+					callback(data);
+				}
+			}
+		});
+	},
+	/** 获得群认证列表数据 */
+	getGroupApplyList(callback){
+		_mixins.methods.$httpSend({
+			path: '/im/get/applyGroup',
+			success(data) {
+				_data.localData('group_apply_list',data);
+				uni.$emit('data_group_apply_data',data);
+				if(callback){
+					callback(data);
+				}
+			}
+		});
+	},
+}

+ 13 - 0
library/_hook.js

@@ -0,0 +1,13 @@
+import _action from './action';
+
+export default {
+	/** tabBar路由钩子 */
+	routeTabBarHook(){
+		_action.routeTool();
+		_action.setStatusTips();
+	},
+	/** 除了tabBar页面的路由钩子 */
+	routeSonHook(){
+		_action.routeTool();
+	},
+}

+ 332 - 0
library/action.js

@@ -0,0 +1,332 @@
+		import http from "./http.js"
+ class Action {
+	
+	/** 播放音效 */
+	playVoice(path){
+
+        var innerAudioContext = uni.createInnerAudioContext();  
+        innerAudioContext.autoplay = true;  
+        innerAudioContext.src=path;
+         innerAudioContext.play();
+        
+	}
+    toChat(message){
+        if(uni.getStorageSync('ispush')===true){
+              uni.setStorageSync('ispush',false)
+               if(uni.getStorageSync('access_token')>0){
+                   
+        if(message.id>0){
+             var url="../friend/chat?id="+message.id;
+             if(message.type=='group') url="../group/chat?id="+message.id;
+             else if(message.type=='request') {
+                 url="../friend/request?type="+message.senderid;
+             }
+             uni.navigateTo({
+                 url:url
+             }) 
+          
+         }
+         else{
+            uni.reLaunch({
+                url:'../index/index'
+            }) 
+         }        
+     }
+     else{
+         uni.navigateTo({
+             url:'../login/index'
+         }) 
+     }
+         }
+    }
+     timestampToTime(timestamp) {
+            var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
+            var Y = date.getFullYear() ;
+            var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1);
+            var D = date.getDate();
+            var h = date.getHours();
+            var m = date.getMinutes();
+            var s = date.getSeconds();
+            if(D<10) D='0'+D;
+             if(h<10) h='0'+h;
+              if(m<10) m='0'+m;
+               if(s<10) s='0'+s;
+            return Y+'-'+M+'-'+D+' '+h+':'+m+':'+s;
+    }
+	/** 时间戳转换 */
+	timestampFormat( timestamp ) {
+		let curTimestamp = parseInt(new Date().getTime() / 1000), //当前时间戳
+		timestampDiff = curTimestamp - timestamp, // 参数时间戳与当前时间戳相差秒数
+		curDate = new Date( curTimestamp * 1000 ), // 当前时间日期对象
+		tmDate = new Date( timestamp * 1000 ),  // 参数时间戳转换成的日期对象
+		Y = tmDate.getFullYear(), 
+		m = tmDate.getMonth() + 1, d = tmDate.getDate(),
+		H = tmDate.getHours(), i = tmDate.getMinutes(), 
+		s = tmDate.getSeconds();
+		if ( timestampDiff < 60 ) { // 一分钟以内
+			return "刚刚";
+		} else if( timestampDiff < 3600 ) { // 一小时前之内
+			return Math.floor( timestampDiff / 60 ) + "分钟前";
+		} else if ( curDate.getFullYear() == Y && curDate.getMonth()+1 == m && curDate.getDate() == d ) {
+			return '今天 ' + ((String(H).length == 1 ? '0' : '') + H) + ':' + ((String(i).length == 1 ? '0' : '') + i);
+		} else {
+			var newDate = new Date( (curTimestamp - 86400) * 1000 ); // 参数中的时间戳加一天转换成的日期对象
+			if ( newDate.getFullYear() == Y && newDate.getMonth()+1 == m && newDate.getDate() == d ) {
+				return '昨天 ' + ((String(H).length == 1 ? '0' : '') + H) + ':' + ((String(i).length == 1 ? '0' : '') + i);
+			} else if ( curDate.getFullYear() == Y ) {
+				return  ((String(m).length == 1 ? '0' : '') + m) + '月' + ((String(d).length == 1 ? '0' : '') + d) + '日 ' + ((String(H).length == 1 ? '0' : '') + H) + ':' + ((String(i).length == 1 ? '0' : '') + i);
+			} else {
+				return  Y + '年' + ((String(m).length == 1 ? '0' : '') + m) + '月' + ((String(d).length == 1 ? '0' : '') + d) + '日 ' + ((String(H).length == 1 ? '0' : '') + H) + ':' + ((String(i).length == 1 ? '0' : '') + i);
+			}
+		}
+	}
+    
+    
+    /** 显示状态通知提醒 */
+    setStatusTips(){
+    	let pages = getCurrentPages();
+     
+    	if(pages.length < 1){
+    		return;
+    	}
+    	let route = pages[pages.length - 1].route;
+    
+        
+         var num=0;
+         if(uni.getStorageSync('access_token')){
+             try{
+                   var msg_key=uni.getStorageSync('access_token')+'_chat_msglist';
+                    var msg_list=uni.getStorageSync(msg_key);
+                   msg_list.map(item=>{
+                    
+                     num+=parseInt(item.msg.unread)
+                   })
+                        
+                }catch(e){
+                    
+                }
+                  
+                 	if(num){
+                 		uni.setTabBarBadge({
+                 		 index: 0,
+                 		 text: (num + ''),
+                    
+                 		});
+                 		if(route == 'pages/index/index'){
+                 			uni.setNavigationBarTitle({
+                 				title: '消息' + '(' + num +')',
+                 			});
+                 		}
+                 	}
+              else{
+             uni.removeTabBarBadge({ index: 0 });
+              
+                if(route == 'pages/index/index'){
+                	uni.setNavigationBarTitle({
+                		title: '消息' ,
+                	});
+                }  
+              }
+             
+         }
+         // #ifdef APP-PLUS
+       if(plus.os.name=='iOS') 
+         plus.runtime.setBadgeNumber(num);
+          // #endif
+    
+     
+       return num;
+    	
+    }
+    
+     
+    
+    /** 路由守卫执行方法 */
+    routeTool() {
+    	let token =  uni.getStorageSync('access_token');
+    	/** 没有token就跳转到登陆去获得token */
+    	if(!token){
+    		uni.reLaunch({
+    			url: '/pages/login/index'
+    		});
+    		return;
+    	}
+    	/** 如果没有连接上socket,则连接 */
+    	if(!_data.data('socket_state')) {
+    		_mixins.methods.$socketSend();
+    	}
+    }
+    
+    addFrend(userid,mark){
+
+        
+    }
+    
+    
+    circleUpate(data){
+
+        var k=uni.getStorageSync('access_token')+'_circle_data';
+        var circle_data=uni.getStorageSync(k);
+        var newdata=[];
+        var info=data.info;
+        try{
+            circle_data.map(item=>{
+              
+                if(parseInt(item.id)==parseInt(data.id)){
+                    if(data.action!='delete'){
+                        item.like=info.like;
+                        item.comment=info.comment;
+                        newdata.push(item);
+                    }
+                }else{
+                    newdata.push(item);
+                }
+            })
+            uni.setStorageSync(k,newdata);
+        }catch(e){
+            //TODO handle the exception
+        }
+       
+    }
+    
+   image_cache(image_url,call_back) {
+    		var store=uni.getStorageSync(image_url);
+            if(store){
+                 console.log('本地存在缓存',store); 
+            
+            }else{
+                console.log('本地没有缓存,需要下载');
+                uni.downloadFile({
+                	url: image_url,
+                	success: (res) => {
+                        console.log('图片下载成功',res);
+                		if (res.statusCode === 200) {
+                			uni.setStorageSync(res);
+                		}
+                	}
+                }); 
+                
+                
+            }
+            
+         
+    	}
+        
+       
+        
+        
+       init(){
+           
+       http.setWait(false).get('index.php?act=init',{}).then(res=>{
+        var data=res.data;
+ 
+       uni.setStorageSync('system',data.system);
+
+         uni.setStorageSync('note',data.note);
+       })
+       // #ifdef APP-PLUS
+       this.bindcid()
+        // #endif
+       }
+       
+       bindcid(){
+        // #ifdef APP-PLUS
+          var user=uni.getStorageSync('userInfo');
+            if(user.id>0){
+               /*var clientid= plus.push.getClientInfo().clientid;
+             
+               http.setWait(false).get('index.php?act=bindcid',{cid:clientid,userid:user.id,osname:plus.os.name}).then(res=>{
+              
+               })*/
+            }
+            // #endif
+       }
+       quitcid(){
+             // #ifdef APP-PLUS
+              /*  var clientid= plus.push.getClientInfo().clientid;
+         http.setWait(false).get('index.php?act=quitcid',{cid:clientid}).then(res=>{
+                       
+         })  */
+         // #endif
+       }
+       
+   profileTips(tips,path){
+     
+     uni.showModal({
+     	title: '提示',
+     	content: tips,
+     	showCancel: true,
+     	cancelText: '取消',
+     	confirmText: '去设置',
+     	success: res => {
+           
+     		if(res.confirm) {
+                 uni.setStorageSync('profileback',path);
+               uni.redirectTo({
+                 url:"/pages/mine/profile"  
+               })
+     		}
+     	}
+     });
+       
+   }
+   
+   loginTips(tips,path){
+       
+        if(uni.getStorageSync('access_token')>0) {
+            return true;
+        }
+    else{
+         uni.showModal({
+         	title: '提示',
+         	content: tips,
+         	showCancel: true,
+         	cancelText: '取消',
+         	confirmText: '登录',
+         	success: res => {
+               
+         		if(res.confirm) {
+                     uni.setStorageSync('gourl',path);
+                   uni.redirectTo({
+                     url:"/pages/login/index"  
+                   })
+         		}
+         	}
+         });
+         return false;
+     }  
+   }
+   //检查用户是否被冻结
+   check_userlock(){
+       var user= uni.getStorageSync('userInfo');
+       if(user.lock_time==undefined || user.lock_time==null) user.lock_time=0;
+       if(user.status==1 || (user.status==2 && parseInt(user.lock_time)>= Date.parse(new Date())/1000)){
+      
+           uni.showModal({
+           	title: '提示',
+           	content: "您的账户已被冻结,无法完成此项操作\n如有问题,请联系客服",
+           	showCancel: true,
+           	cancelText: '取消',
+           	confirmText: '联系客服',
+           	success: res => { 
+           		if(res.confirm) {
+                       var system=uni.getStorageSync('system');
+                     uni.redirectTo({
+                       url:"/pages/friend/chat?id="+system['admin_id']  
+                     })
+           		}
+           	}
+           });
+           return false;
+       }
+       else{
+           return true;
+       }
+   }
+   
+  
+   
+   
+        
+}
+export default new Action();

+ 10267 - 0
library/address.js

@@ -0,0 +1,10267 @@
+export default [
+    {
+    	"provinceCode": "000000",
+    	"provinceName": "省份",
+    	"city": [{
+    		"cityCode": "00000-1",
+    		"cityName": "城市",
+    		"county": []
+    	}]
+    },
+	 {
+		"provinceCode": "110000",
+		"provinceName": "北京",
+		
+		
+			"city": [{
+				"cityCode": "110115",
+				"cityName": "大兴区"
+			}, {
+				"countyCode": "110116",
+				"cityName": "怀柔区"
+			}, {
+				"countyCode": "110105",
+				"cityName": "朝阳区"
+			}, {
+				"countyCode": "110229",
+				"cityName": "延庆区"
+			}, {
+				"countyCode": "110114",
+				"cityName": "昌平区"
+			}, {
+				"countyCode": "110108",
+				"cityName": "海淀区"
+			}, {
+				"countyCode": "110107",
+				"cityName": "石景山区"
+			}, {
+				"countyCode": "110112",
+				"cityName": "通州区"
+			}, {
+				"countyCode": "110228",
+				"cityName": "密云区"
+			}, {
+				"countyCode": "110117",
+				"cityName": "平谷区"
+			}, {
+				"countyCode": "110109",
+				"cityName": "门头沟区"
+			}, {
+				"countyCode": "110113",
+				"cityName": "顺义区"
+			}, {
+				"countyCode": "110106",
+				"cityName": "丰台区"
+			}, {
+				"countyCode": "110111",
+				"cityName": "房山区"
+			}, {
+				"countyCode": "110101",
+				"cityName": "东城区"
+			}, {
+				"countyCode": "110102",
+				"cityName": "西城区"
+			}]
+		
+	}, {
+		"provinceCode": "120000",
+		"provinceName": "天津",
+		"city": [{
+		
+				"countyCode": "120103",
+				"cityName": "河西区"
+			}, {
+				"countyCode": "120106",
+				"cityName": "红桥区"
+			}, {
+				"countyCode": "120223",
+				"cityName": "静海区"
+			}, {
+				"countyCode": "120114",
+				"cityName": "武清区"
+			}, {
+				"countyCode": "120110",
+				"cityName": "东丽区"
+			}, {
+				"countyCode": "120111",
+				"cityName": "西青区"
+			}, {
+				"countyCode": "120225",
+				"cityName": "蓟州区"
+			}, {
+				"countyCode": "120116",
+				"cityName": "滨海新区"
+			}, {
+				"countyCode": "120113",
+				"cityName": "北辰区"
+			}, {
+				"countyCode": "120115",
+				"cityName": "宝坻区"
+			}, {
+				"countyCode": "120101",
+				"cityName": "和平区"
+			}, {
+				"countyCode": "120112",
+				"cityName": "津南区"
+			}, {
+				"countyCode": "120221",
+				"cityName": "宁河区"
+			}, {
+				"countyCode": "120104",
+				"cityName": "南开区"
+			}, {
+				"countyCode": "120105",
+				"countyName": "河北区"
+			}, {
+				"countyCode": "120102",
+				"cityName": "河东区"
+			
+		}]
+	}, {
+		"provinceCode": "130000",
+		"provinceName": "河北省",
+		"city": [{
+			"cityCode": "130400",
+			"cityName": "邯郸市",
+			"county": [{
+				"countyCode": "130404",
+				"countyName": "复兴区"
+			}, {
+				"countyCode": "130424",
+				"countyName": "成安县"
+			}, {
+				"countyCode": "130403",
+				"countyName": "丛台区"
+			}, {
+				"countyCode": "130402",
+				"countyName": "邯山区"
+			}, {
+				"countyCode": "130434",
+				"countyName": "魏县"
+			}, {
+				"countyCode": "130429",
+				"countyName": "永年区"
+			}, {
+				"countyCode": "130427",
+				"countyName": "磁县"
+			}, {
+				"countyCode": "130433",
+				"countyName": "馆陶县"
+			}, {
+				"countyCode": "130421",
+				"countyName": "邯郸县"
+			}, {
+				"countyCode": "130435",
+				"countyName": "曲周县"
+			}, {
+				"countyCode": "130425",
+				"countyName": "大名县"
+			}, {
+				"countyCode": "130426",
+				"countyName": "涉县"
+			}, {
+				"countyCode": "130423",
+				"countyName": "临漳县"
+			}, {
+				"countyCode": "130431",
+				"countyName": "鸡泽县"
+			}, {
+				"countyCode": "130406",
+				"countyName": "峰峰矿区"
+			}, {
+				"countyCode": "130430",
+				"countyName": "邱县"
+			}, {
+				"countyCode": "130428",
+				"countyName": "肥乡区"
+			}, {
+				"countyCode": "130432",
+				"countyName": "广平县"
+			}, {
+				"countyCode": "130481",
+				"countyName": "武安市"
+			}]
+		}, {
+			"cityCode": "131100",
+			"cityName": "衡水市",
+			"county": [{
+				"countyCode": "131127",
+				"countyName": "景县"
+			}, {
+				"countyCode": "131102",
+				"countyName": "桃城区"
+			}, {
+				"countyCode": "131128",
+				"countyName": "阜城县"
+			}, {
+				"countyCode": "131125",
+				"countyName": "安平县"
+			}, {
+				"countyCode": "131121",
+				"countyName": "枣强县"
+			}, {
+				"countyCode": "131123",
+				"countyName": "武强县"
+			}, {
+				"countyCode": "131122",
+				"countyName": "武邑县"
+			}, {
+				"countyCode": "131181",
+				"countyName": "冀州区"
+			}, {
+				"countyCode": "131126",
+				"countyName": "故城县"
+			}, {
+				"countyCode": "131124",
+				"countyName": "饶阳县"
+			}, {
+				"countyCode": "131182",
+				"countyName": "深州市"
+			}]
+		}, {
+			"cityCode": "130900",
+			"cityName": "沧州市",
+			"county": [{
+				"countyCode": "130930",
+				"countyName": "孟村回族自治县"
+			}, {
+				"countyCode": "130923",
+				"countyName": "东光县"
+			}, {
+				"countyCode": "130981",
+				"countyName": "泊头市"
+			}, {
+				"countyCode": "130924",
+				"countyName": "海兴县"
+			}, {
+				"countyCode": "130927",
+				"countyName": "南皮县"
+			}, {
+				"countyCode": "130922",
+				"countyName": "青县"
+			}, {
+				"countyCode": "130902",
+				"countyName": "新华区"
+			}, {
+				"countyCode": "130925",
+				"countyName": "盐山县"
+			}, {
+				"countyCode": "130903",
+				"countyName": "运河区"
+			}, {
+				"countyCode": "130921",
+				"countyName": "沧县"
+			}, {
+				"countyCode": "130984",
+				"countyName": "河间市"
+			}, {
+				"countyCode": "130926",
+				"countyName": "肃宁县"
+			}, {
+				"countyCode": "130982",
+				"countyName": "任丘市"
+			}, {
+				"countyCode": "130983",
+				"countyName": "黄骅市"
+			}, {
+				"countyCode": "130928",
+				"countyName": "吴桥县"
+			}, {
+				"countyCode": "130929",
+				"countyName": "献县"
+			}]
+		}, {
+			"cityCode": "130200",
+			"cityName": "唐山市",
+			"county": [{
+				"countyCode": "130207",
+				"countyName": "丰南区"
+			}, {
+				"countyCode": "130204",
+				"countyName": "古冶区"
+			}, {
+				"countyCode": "130224",
+				"countyName": "滦南县"
+			}, {
+				"countyCode": "130209",
+				"countyName": "曹妃甸区"
+			}, {
+				"countyCode": "130202",
+				"countyName": "路南区"
+			}, {
+				"countyCode": "130208",
+				"countyName": "丰润区"
+			}, {
+				"countyCode": "130203",
+				"countyName": "路北区"
+			}, {
+				"countyCode": "130281",
+				"countyName": "遵化市"
+			}, {
+				"countyCode": "130205",
+				"countyName": "开平区"
+			}, {
+				"countyCode": "130283",
+				"countyName": "迁安市"
+			}, {
+				"countyCode": "130227",
+				"countyName": "迁西县"
+			}, {
+				"countyCode": "130229",
+				"countyName": "玉田县"
+			}, {
+				"countyCode": "130225",
+				"countyName": "乐亭县"
+			}, {
+				"countyCode": "130223",
+				"countyName": "滦州市"
+			}]
+		}, {
+			"cityCode": "130700",
+			"cityName": "张家口市",
+			"county": [{
+				"countyCode": "130728",
+				"countyName": "怀安县"
+			}, {
+				"countyCode": "130723",
+				"countyName": "康保县"
+			}, {
+				"countyCode": "130702",
+				"countyName": "桥东区"
+			}, {
+				"countyCode": "130732",
+				"countyName": "赤城县"
+			}, {
+				"countyCode": "130733",
+				"countyName": "崇礼区"
+			}, {
+				"countyCode": "130727",
+				"countyName": "阳原县"
+			}, {
+				"countyCode": "130731",
+				"countyName": "涿鹿县"
+			}, {
+				"countyCode": "130705",
+				"countyName": "宣化区"
+			}, {
+				"countyCode": "130722",
+				"countyName": "张北县"
+			}, {
+				"countyCode": "130729",
+				"countyName": "万全区"
+			}, {
+				"countyCode": "130724",
+				"countyName": "沽源县"
+			}, {
+				"countyCode": "130703",
+				"countyName": "桥西区"
+			}, {
+				"countyCode": "130706",
+				"countyName": "下花园区"
+			}, {
+				"countyCode": "130730",
+				"countyName": "怀来县"
+			}, {
+				"countyCode": "130725",
+				"countyName": "尚义县"
+			}, {
+				"countyCode": "130726",
+				"countyName": "蔚县"
+			}, {
+				"countyCode": "130721",
+				"countyName": "宣化县"
+			}]
+		}, {
+			"cityCode": "131000",
+			"cityName": "廊坊市",
+			"county": [{
+				"countyCode": "131002",
+				"countyName": "安次区"
+			}, {
+				"countyCode": "131082",
+				"countyName": "三河市"
+			}, {
+				"countyCode": "131025",
+				"countyName": "大城县"
+			}, {
+				"countyCode": "131023",
+				"countyName": "永清县"
+			}, {
+				"countyCode": "131028",
+				"countyName": "大厂回族自治县"
+			}, {
+				"countyCode": "131022",
+				"countyName": "固安县"
+			}, {
+				"countyCode": "131003",
+				"countyName": "广阳区"
+			}, {
+				"countyCode": "131081",
+				"countyName": "霸州市"
+			}, {
+				"countyCode": "131026",
+				"countyName": "文安县"
+			}, {
+				"countyCode": "131024",
+				"countyName": "香河县"
+			}]
+		}, {
+			"cityCode": "130300",
+			"cityName": "秦皇岛市",
+			"county": [{
+				"countyCode": "130323",
+				"countyName": "抚宁区"
+			}, {
+				"countyCode": "130321",
+				"countyName": "青龙满族自治县"
+			}, {
+				"countyCode": "130303",
+				"countyName": "山海关区"
+			}, {
+				"countyCode": "130304",
+				"countyName": "北戴河区"
+			}, {
+				"countyCode": "130302",
+				"countyName": "海港区"
+			}, {
+				"countyCode": "130322",
+				"countyName": "昌黎县"
+			}, {
+				"countyCode": "130324",
+				"countyName": "卢龙县"
+			}]
+		}, {
+			"cityCode": "130500",
+			"cityName": "邢台市",
+			"county": [{
+				"countyCode": "130533",
+				"countyName": "威县"
+			}, {
+				"countyCode": "130532",
+				"countyName": "平乡县"
+			}, {
+				"countyCode": "130527",
+				"countyName": "南和县"
+			}, {
+				"countyCode": "130521",
+				"countyName": "邢台县"
+			}, {
+				"countyCode": "130524",
+				"countyName": "柏乡县"
+			}, {
+				"countyCode": "130522",
+				"countyName": "临城县"
+			}, {
+				"countyCode": "130530",
+				"countyName": "新河县"
+			}, {
+				"countyCode": "130534",
+				"countyName": "清河县"
+			}, {
+				"countyCode": "130582",
+				"countyName": "沙河市"
+			}, {
+				"countyCode": "130531",
+				"countyName": "广宗县"
+			}, {
+				"countyCode": "130525",
+				"countyName": "隆尧县"
+			}, {
+				"countyCode": "130529",
+				"countyName": "巨鹿县"
+			}, {
+				"countyCode": "130523",
+				"countyName": "内丘县"
+			}, {
+				"countyCode": "130528",
+				"countyName": "宁晋县"
+			}, {
+				"countyCode": "130526",
+				"countyName": "任县"
+			}, {
+				"countyCode": "130581",
+				"countyName": "南宫市"
+			}, {
+				"countyCode": "130535",
+				"countyName": "临西县"
+			}, {
+				"countyCode": "130502",
+				"countyName": "桥东区"
+			}, {
+				"countyCode": "130503",
+				"countyName": "桥西区"
+			}]
+		}, {
+			"cityCode": "130100",
+			"cityName": "石家庄市",
+			"county": [{
+				"countyCode": "130125",
+				"countyName": "行唐县"
+			}, {
+				"countyCode": "130185",
+				"countyName": "鹿泉区"
+			}, {
+				"countyCode": "130123",
+				"countyName": "正定县"
+			}, {
+				"countyCode": "130107",
+				"countyName": "井陉矿区"
+			}, {
+				"countyCode": "130102",
+				"countyName": "长安区"
+			}, {
+				"countyCode": "130184",
+				"countyName": "新乐市"
+			}, {
+				"countyCode": "130183",
+				"countyName": "晋州市"
+			}, {
+				"countyCode": "130128",
+				"countyName": "深泽县"
+			}, {
+				"countyCode": "130181",
+				"countyName": "辛集市"
+			}, {
+				"countyCode": "130124",
+				"countyName": "栾城区"
+			}, {
+				"countyCode": "130126",
+				"countyName": "灵寿县"
+			}, {
+				"countyCode": "130104",
+				"countyName": "桥西区"
+			}, {
+				"countyCode": "130130",
+				"countyName": "无极县"
+			}, {
+				"countyCode": "130108",
+				"countyName": "裕华区"
+			}, {
+				"countyCode": "130129",
+				"countyName": "赞皇县"
+			}, {
+				"countyCode": "130133",
+				"countyName": "赵县"
+			}, {
+				"countyCode": "130182",
+				"countyName": "藁城区"
+			}, {
+				"countyCode": "130127",
+				"countyName": "高邑县"
+			}, {
+				"countyCode": "130132",
+				"countyName": "元氏县"
+			}, {
+				"countyCode": "130131",
+				"countyName": "平山县"
+			}, {
+				"countyCode": "130121",
+				"countyName": "井陉县"
+			}, {
+				"countyCode": "130105",
+				"countyName": "新华区"
+			}]
+		}, {
+			"cityCode": "130800",
+			"cityName": "承德市",
+			"county": [{
+				"countyCode": "130803",
+				"countyName": "双滦区"
+			}, {
+				"countyCode": "130827",
+				"countyName": "宽城满族自治县"
+			}, {
+				"countyCode": "130802",
+				"countyName": "双桥区"
+			}, {
+				"countyCode": "130826",
+				"countyName": "丰宁满族自治县"
+			}, {
+				"countyCode": "130821",
+				"countyName": "承德县"
+			}, {
+				"countyCode": "130828",
+				"countyName": "围场满族蒙古族自治县"
+			}, {
+				"countyCode": "130822",
+				"countyName": "兴隆县"
+			}, {
+				"countyCode": "130825",
+				"countyName": "隆化县"
+			}, {
+				"countyCode": "130823",
+				"countyName": "平泉市"
+			}, {
+				"countyCode": "130804",
+				"countyName": "鹰手营子矿区"
+			}, {
+				"countyCode": "130824",
+				"countyName": "滦平县"
+			}]
+		}, {
+			"cityCode": "130600",
+			"cityName": "保定市",
+			"county": [{
+				"countyCode": "130638",
+				"countyName": "雄县"
+			}, {
+				"countyCode": "130625",
+				"countyName": "徐水区"
+			}, {
+				"countyCode": "130682",
+				"countyName": "定州市"
+			}, {
+				"countyCode": "130631",
+				"countyName": "望都县"
+			}, {
+				"countyCode": "130630",
+				"countyName": "涞源县"
+			}, {
+				"countyCode": "130621",
+				"countyName": "满城区"
+			}, {
+				"countyCode": "130626",
+				"countyName": "定兴县"
+			}, {
+				"countyCode": "130624",
+				"countyName": "阜平县"
+			}, {
+				"countyCode": "130636",
+				"countyName": "顺平县"
+			}, {
+				"countyCode": "130627",
+				"countyName": "唐县"
+			}, {
+				"countyCode": "130623",
+				"countyName": "涞水县"
+			}, {
+				"countyCode": "130629",
+				"countyName": "容城县"
+			}, {
+				"countyCode": "130634",
+				"countyName": "曲阳县"
+			}, {
+				"countyCode": "130637",
+				"countyName": "博野县"
+			}, {
+				"countyCode": "130622",
+				"countyName": "清苑区"
+			}, {
+				"countyCode": "130632",
+				"countyName": "安新县"
+			}, {
+				"countyCode": "130684",
+				"countyName": "高碑店市"
+			}, {
+				"countyCode": "130633",
+				"countyName": "易县"
+			}, {
+				"countyCode": "130628",
+				"countyName": "高阳县"
+			}, {
+				"countyCode": "130683",
+				"countyName": "安国市"
+			}, {
+				"countyCode": "130604",
+				"countyName": "南市区"
+			}, {
+				"countyCode": "130603",
+				"countyName": "北市区"
+			}, {
+				"countyCode": "130681",
+				"countyName": "涿州市"
+			}, {
+				"countyCode": "130635",
+				"countyName": "蠡县"
+			}, {
+				"countyCode": "130602",
+				"countyName": "竞秀区"
+			}, {
+				"countyCode": "130606",
+				"countyName": "莲池区"
+			}]
+		}]
+	}, {
+		"provinceCode": "140000",
+		"provinceName": "山西省",
+		"city": [{
+			"cityCode": "141000",
+			"cityName": "临汾市",
+			"county": [{
+				"countyCode": "141033",
+				"countyName": "蒲县"
+			}, {
+				"countyCode": "141025",
+				"countyName": "古县"
+			}, {
+				"countyCode": "141034",
+				"countyName": "汾西县"
+			}, {
+				"countyCode": "141027",
+				"countyName": "浮山县"
+			}, {
+				"countyCode": "141021",
+				"countyName": "曲沃县"
+			}, {
+				"countyCode": "141032",
+				"countyName": "永和县"
+			}, {
+				"countyCode": "141082",
+				"countyName": "霍州市"
+			}, {
+				"countyCode": "141028",
+				"countyName": "吉县"
+			}, {
+				"countyCode": "141022",
+				"countyName": "翼城县"
+			}, {
+				"countyCode": "141030",
+				"countyName": "大宁县"
+			}, {
+				"countyCode": "141081",
+				"countyName": "侯马市"
+			}, {
+				"countyCode": "141002",
+				"countyName": "尧都区"
+			}, {
+				"countyCode": "141026",
+				"countyName": "安泽县"
+			}, {
+				"countyCode": "141024",
+				"countyName": "洪洞县"
+			}, {
+				"countyCode": "141023",
+				"countyName": "襄汾县"
+			}, {
+				"countyCode": "141029",
+				"countyName": "乡宁县"
+			}, {
+				"countyCode": "141031",
+				"countyName": "隰县"
+			}]
+		}, {
+			"cityCode": "140200",
+			"cityName": "大同市",
+			"county": [{
+				"countyCode": "140223",
+				"countyName": "广灵县"
+			}, {
+				"countyCode": "140203",
+				"countyName": "矿区"
+			}, {
+				"countyCode": "140212",
+				"countyName": "新荣区"
+			}, {
+				"countyCode": "140224",
+				"countyName": "灵丘县"
+			}, {
+				"countyCode": "140222",
+				"countyName": "天镇县"
+			}, {
+				"countyCode": "140213",
+				"countyName": "平城区"
+			}, {
+				"countyCode": "140227",
+				"countyName": "云州区"
+			}, {
+				"countyCode": "140202",
+				"countyName": "城区"
+			}, {
+				"countyCode": "140225",
+				"countyName": "浑源县"
+			}, {
+				"countyCode": "140221",
+				"countyName": "阳高县"
+			}, {
+				"countyCode": "140211",
+				"countyName": "南郊区"
+			}, {
+				"countyCode": "140214",
+				"countyName": "云冈区"
+			}, {
+				"countyCode": "140226",
+				"countyName": "左云县"
+			}]
+		}, {
+			"cityCode": "140700",
+			"cityName": "晋中市",
+			"county": [{
+				"countyCode": "140722",
+				"countyName": "左权县"
+			}, {
+				"countyCode": "140721",
+				"countyName": "榆社县"
+			}, {
+				"countyCode": "140728",
+				"countyName": "平遥县"
+			}, {
+				"countyCode": "140723",
+				"countyName": "和顺县"
+			}, {
+				"countyCode": "140726",
+				"countyName": "太谷县"
+			}, {
+				"countyCode": "140781",
+				"countyName": "介休市"
+			}, {
+				"countyCode": "140725",
+				"countyName": "寿阳县"
+			}, {
+				"countyCode": "140727",
+				"countyName": "祁县"
+			}, {
+				"countyCode": "140724",
+				"countyName": "昔阳县"
+			}, {
+				"countyCode": "140702",
+				"countyName": "榆次区"
+			}, {
+				"countyCode": "140729",
+				"countyName": "灵石县"
+			}]
+		}, {
+			"cityCode": "140500",
+			"cityName": "晋城市",
+			"county": [{
+				"countyCode": "140521",
+				"countyName": "沁水县"
+			}, {
+				"countyCode": "140581",
+				"countyName": "高平市"
+			}, {
+				"countyCode": "140524",
+				"countyName": "陵川县"
+			}, {
+				"countyCode": "140522",
+				"countyName": "阳城县"
+			}, {
+				"countyCode": "140525",
+				"countyName": "泽州县"
+			}, {
+				"countyCode": "140502",
+				"countyName": "城区"
+			}]
+		}, {
+			"cityCode": "140600",
+			"cityName": "朔州市",
+			"county": [{
+				"countyCode": "140621",
+				"countyName": "山阴县"
+			}, {
+				"countyCode": "140623",
+				"countyName": "右玉县"
+			}, {
+				"countyCode": "140603",
+				"countyName": "平鲁区"
+			}, {
+				"countyCode": "140602",
+				"countyName": "朔城区"
+			}, {
+				"countyCode": "140622",
+				"countyName": "应县"
+			}, {
+				"countyCode": "140624",
+				"countyName": "怀仁市"
+			}]
+		}, {
+			"cityCode": "141100",
+			"cityName": "吕梁市",
+			"county": [{
+				"countyCode": "141125",
+				"countyName": "柳林县"
+			}, {
+				"countyCode": "141127",
+				"countyName": "岚县"
+			}, {
+				"countyCode": "141122",
+				"countyName": "交城县"
+			}, {
+				"countyCode": "141128",
+				"countyName": "方山县"
+			}, {
+				"countyCode": "141129",
+				"countyName": "中阳县"
+			}, {
+				"countyCode": "141102",
+				"countyName": "离石区"
+			}, {
+				"countyCode": "141126",
+				"countyName": "石楼县"
+			}, {
+				"countyCode": "141182",
+				"countyName": "汾阳市"
+			}, {
+				"countyCode": "141130",
+				"countyName": "交口县"
+			}, {
+				"countyCode": "141124",
+				"countyName": "临县"
+			}, {
+				"countyCode": "141181",
+				"countyName": "孝义市"
+			}, {
+				"countyCode": "141123",
+				"countyName": "兴县"
+			}, {
+				"countyCode": "141121",
+				"countyName": "文水县"
+			}]
+		}, {
+			"cityCode": "140900",
+			"cityName": "忻州市",
+			"county": [{
+				"countyCode": "140902",
+				"countyName": "忻府区"
+			}, {
+				"countyCode": "140922",
+				"countyName": "五台县"
+			}, {
+				"countyCode": "140981",
+				"countyName": "原平市"
+			}, {
+				"countyCode": "140932",
+				"countyName": "偏关县"
+			}, {
+				"countyCode": "140927",
+				"countyName": "神池县"
+			}, {
+				"countyCode": "140925",
+				"countyName": "宁武县"
+			}, {
+				"countyCode": "140924",
+				"countyName": "繁峙县"
+			}, {
+				"countyCode": "140931",
+				"countyName": "保德县"
+			}, {
+				"countyCode": "140926",
+				"countyName": "静乐县"
+			}, {
+				"countyCode": "140930",
+				"countyName": "河曲县"
+			}, {
+				"countyCode": "140921",
+				"countyName": "定襄县"
+			}, {
+				"countyCode": "140923",
+				"countyName": "代县"
+			}, {
+				"countyCode": "140928",
+				"countyName": "五寨县"
+			}, {
+				"countyCode": "140929",
+				"countyName": "岢岚县"
+			}]
+		}, {
+			"cityCode": "140100",
+			"cityName": "太原市",
+			"county": [{
+				"countyCode": "140107",
+				"countyName": "杏花岭区"
+			}, {
+				"countyCode": "140109",
+				"countyName": "万柏林区"
+			}, {
+				"countyCode": "140105",
+				"countyName": "小店区"
+			}, {
+				"countyCode": "140181",
+				"countyName": "古交市"
+			}, {
+				"countyCode": "140110",
+				"countyName": "晋源区"
+			}, {
+				"countyCode": "140122",
+				"countyName": "阳曲县"
+			}, {
+				"countyCode": "140108",
+				"countyName": "尖草坪区"
+			}, {
+				"countyCode": "140121",
+				"countyName": "清徐县"
+			}, {
+				"countyCode": "140123",
+				"countyName": "娄烦县"
+			}, {
+				"countyCode": "140106",
+				"countyName": "迎泽区"
+			}]
+		}, {
+			"cityCode": "140300",
+			"cityName": "阳泉市",
+			"county": [{
+				"countyCode": "140302",
+				"countyName": "城区"
+			}, {
+				"countyCode": "140321",
+				"countyName": "平定县"
+			}, {
+				"countyCode": "140311",
+				"countyName": "郊区"
+			}, {
+				"countyCode": "140303",
+				"countyName": "矿区"
+			}, {
+				"countyCode": "140322",
+				"countyName": "盂县"
+			}]
+		}, {
+			"cityCode": "140800",
+			"cityName": "运城市",
+			"county": [{
+				"countyCode": "140802",
+				"countyName": "盐湖区"
+			}, {
+				"countyCode": "140829",
+				"countyName": "平陆县"
+			}, {
+				"countyCode": "140828",
+				"countyName": "夏县"
+			}, {
+				"countyCode": "140825",
+				"countyName": "新绛县"
+			}, {
+				"countyCode": "140830",
+				"countyName": "芮城县"
+			}, {
+				"countyCode": "140823",
+				"countyName": "闻喜县"
+			}, {
+				"countyCode": "140826",
+				"countyName": "绛县"
+			}, {
+				"countyCode": "140822",
+				"countyName": "万荣县"
+			}, {
+				"countyCode": "140821",
+				"countyName": "临猗县"
+			}, {
+				"countyCode": "140827",
+				"countyName": "垣曲县"
+			}, {
+				"countyCode": "140824",
+				"countyName": "稷山县"
+			}, {
+				"countyCode": "140881",
+				"countyName": "永济市"
+			}, {
+				"countyCode": "140882",
+				"countyName": "河津市"
+			}]
+		}, {
+			"cityCode": "140400",
+			"cityName": "长治市",
+			"county": [{
+				"countyCode": "140428",
+				"countyName": "长子县"
+			}, {
+				"countyCode": "140430",
+				"countyName": "沁县"
+			}, {
+				"countyCode": "140426",
+				"countyName": "黎城县"
+			}, {
+				"countyCode": "140481",
+				"countyName": "潞城市"
+			}, {
+				"countyCode": "140403",
+				"countyName": "潞州区"
+			}, {
+				"countyCode": "140402",
+				"countyName": "城区"
+			}, {
+				"countyCode": "140427",
+				"countyName": "壶关县"
+			}, {
+				"countyCode": "140429",
+				"countyName": "武乡县"
+			}, {
+				"countyCode": "140425",
+				"countyName": "平顺县"
+			}, {
+				"countyCode": "140421",
+				"countyName": "长治县"
+			}, {
+				"countyCode": "140424",
+				"countyName": "屯留县"
+			}, {
+				"countyCode": "140431",
+				"countyName": "沁源县"
+			}, {
+				"countyCode": "140411",
+				"countyName": "郊区"
+			}, {
+				"countyCode": "140423",
+				"countyName": "襄垣县"
+			}]
+		}]
+	}, {
+		"provinceCode": "150000",
+		"provinceName": "内蒙古自治区",
+		"city": [{
+			"cityCode": "150100",
+			"cityName": "呼和浩特市",
+			"county": [{
+				"countyCode": "150125",
+				"countyName": "武川县"
+			}, {
+				"countyCode": "150124",
+				"countyName": "清水河县"
+			}, {
+				"countyCode": "150105",
+				"countyName": "赛罕区"
+			}, {
+				"countyCode": "150122",
+				"countyName": "托克托县"
+			}, {
+				"countyCode": "150121",
+				"countyName": "土默特左旗"
+			}, {
+				"countyCode": "150102",
+				"countyName": "新城区"
+			}, {
+				"countyCode": "150104",
+				"countyName": "玉泉区"
+			}, {
+				"countyCode": "150123",
+				"countyName": "和林格尔县"
+			}, {
+				"countyCode": "150103",
+				"countyName": "回民区"
+			}]
+		}, {
+			"cityCode": "150300",
+			"cityName": "乌海市",
+			"county": [{
+				"countyCode": "150303",
+				"countyName": "海南区"
+			}, {
+				"countyCode": "150302",
+				"countyName": "海勃湾区"
+			}, {
+				"countyCode": "150304",
+				"countyName": "乌达区"
+			}]
+		}, {
+			"cityCode": "150500",
+			"cityName": "通辽市",
+			"county": [{
+				"countyCode": "150502",
+				"countyName": "科尔沁区"
+			}, {
+				"countyCode": "150526",
+				"countyName": "扎鲁特旗"
+			}, {
+				"countyCode": "150522",
+				"countyName": "科尔沁左翼后旗"
+			}, {
+				"countyCode": "150523",
+				"countyName": "开鲁县"
+			}, {
+				"countyCode": "150524",
+				"countyName": "库伦旗"
+			}, {
+				"countyCode": "150525",
+				"countyName": "奈曼旗"
+			}, {
+				"countyCode": "150521",
+				"countyName": "科尔沁左翼中旗"
+			}, {
+				"countyCode": "150581",
+				"countyName": "霍林郭勒市"
+			}]
+		}, {
+			"cityCode": "150400",
+			"cityName": "赤峰市",
+			"county": [{
+				"countyCode": "150422",
+				"countyName": "巴林左旗"
+			}, {
+				"countyCode": "150429",
+				"countyName": "宁城县"
+			}, {
+				"countyCode": "150421",
+				"countyName": "阿鲁科尔沁旗"
+			}, {
+				"countyCode": "150423",
+				"countyName": "巴林右旗"
+			}, {
+				"countyCode": "150425",
+				"countyName": "克什克腾旗"
+			}, {
+				"countyCode": "150426",
+				"countyName": "翁牛特旗"
+			}, {
+				"countyCode": "150402",
+				"countyName": "红山区"
+			}, {
+				"countyCode": "150430",
+				"countyName": "敖汉旗"
+			}, {
+				"countyCode": "150428",
+				"countyName": "喀喇沁旗"
+			}, {
+				"countyCode": "150404",
+				"countyName": "松山区"
+			}, {
+				"countyCode": "150424",
+				"countyName": "林西县"
+			}, {
+				"countyCode": "150403",
+				"countyName": "元宝山区"
+			}]
+		}, {
+			"cityCode": "150200",
+			"cityName": "包头市",
+			"county": [{
+				"countyCode": "150203",
+				"countyName": "昆都仑区"
+			}, {
+				"countyCode": "150204",
+				"countyName": "青山区"
+			}, {
+				"countyCode": "150205",
+				"countyName": "石拐区"
+			}, {
+				"countyCode": "150221",
+				"countyName": "土默特右旗"
+			}, {
+				"countyCode": "150222",
+				"countyName": "固阳县"
+			}, {
+				"countyCode": "150223",
+				"countyName": "达尔罕茂明安联合旗"
+			}, {
+				"countyCode": "150206",
+				"countyName": "白云鄂博矿区"
+			}, {
+				"countyCode": "150202",
+				"countyName": "东河区"
+			}, {
+				"countyCode": "150207",
+				"countyName": "九原区"
+			}]
+		}, {
+			"cityCode": "150700",
+			"cityName": "呼伦贝尔市",
+			"county": [{
+				"countyCode": "150721",
+				"countyName": "阿荣旗"
+			}, {
+				"countyCode": "150723",
+				"countyName": "鄂伦春自治旗"
+			}, {
+				"countyCode": "150785",
+				"countyName": "根河市"
+			}, {
+				"countyCode": "150782",
+				"countyName": "牙克石市"
+			}, {
+				"countyCode": "150783",
+				"countyName": "扎兰屯市"
+			}, {
+				"countyCode": "150724",
+				"countyName": "鄂温克族自治旗"
+			}, {
+				"countyCode": "150784",
+				"countyName": "额尔古纳市"
+			}, {
+				"countyCode": "150727",
+				"countyName": "新巴尔虎右旗"
+			}, {
+				"countyCode": "150726",
+				"countyName": "新巴尔虎左旗"
+			}, {
+				"countyCode": "150702",
+				"countyName": "海拉尔区"
+			}, {
+				"countyCode": "150703",
+				"countyName": "扎赉诺尔区"
+			}, {
+				"countyCode": "150781",
+				"countyName": "满洲里市"
+			}, {
+				"countyCode": "150725",
+				"countyName": "陈巴尔虎旗"
+			}, {
+				"countyCode": "150722",
+				"countyName": "莫力达瓦达斡尔族自治旗"
+			}]
+		}, {
+			"cityCode": "152500",
+			"cityName": "锡林郭勒盟",
+			"county": [{
+				"countyCode": "152529",
+				"countyName": "正镶白旗"
+			}, {
+				"countyCode": "152501",
+				"countyName": "二连浩特市"
+			}, {
+				"countyCode": "152525",
+				"countyName": "东乌珠穆沁旗"
+			}, {
+				"countyCode": "152524",
+				"countyName": "苏尼特右旗"
+			}, {
+				"countyCode": "152523",
+				"countyName": "苏尼特左旗"
+			}, {
+				"countyCode": "152526",
+				"countyName": "西乌珠穆沁旗"
+			}, {
+				"countyCode": "152531",
+				"countyName": "多伦县"
+			}, {
+				"countyCode": "152528",
+				"countyName": "镶黄旗"
+			}, {
+				"countyCode": "152530",
+				"countyName": "正蓝旗"
+			}, {
+				"countyCode": "152522",
+				"countyName": "阿巴嘎旗"
+			}, {
+				"countyCode": "152502",
+				"countyName": "锡林浩特市"
+			}, {
+				"countyCode": "152527",
+				"countyName": "太仆寺旗"
+			}]
+		}, {
+			"cityCode": "152200",
+			"cityName": "兴安盟",
+			"county": [{
+				"countyCode": "152221",
+				"countyName": "科尔沁右翼前旗"
+			}, {
+				"countyCode": "152223",
+				"countyName": "扎赉特旗"
+			}, {
+				"countyCode": "152201",
+				"countyName": "乌兰浩特市"
+			}, {
+				"countyCode": "152224",
+				"countyName": "突泉县"
+			}, {
+				"countyCode": "152222",
+				"countyName": "科尔沁右翼中旗"
+			}, {
+				"countyCode": "152202",
+				"countyName": "阿尔山市"
+			}]
+		}, {
+			"cityCode": "150900",
+			"cityName": "乌兰察布市",
+			"county": [{
+				"countyCode": "150902",
+				"countyName": "集宁区"
+			}, {
+				"countyCode": "150921",
+				"countyName": "卓资县"
+			}, {
+				"countyCode": "150922",
+				"countyName": "化德县"
+			}, {
+				"countyCode": "150923",
+				"countyName": "商都县"
+			}, {
+				"countyCode": "150928",
+				"countyName": "察哈尔右翼后旗"
+			}, {
+				"countyCode": "150926",
+				"countyName": "察哈尔右翼前旗"
+			}, {
+				"countyCode": "150927",
+				"countyName": "察哈尔右翼中旗"
+			}, {
+				"countyCode": "150929",
+				"countyName": "四子王旗"
+			}, {
+				"countyCode": "150981",
+				"countyName": "丰镇市"
+			}, {
+				"countyCode": "150925",
+				"countyName": "凉城县"
+			}, {
+				"countyCode": "150924",
+				"countyName": "兴和县"
+			}]
+		}, {
+			"cityCode": "150600",
+			"cityName": "鄂尔多斯市",
+			"county": [{
+				"countyCode": "150624",
+				"countyName": "鄂托克旗"
+			}, {
+				"countyCode": "150621",
+				"countyName": "达拉特旗"
+			}, {
+				"countyCode": "150626",
+				"countyName": "乌审旗"
+			}, {
+				"countyCode": "150602",
+				"countyName": "东胜区"
+			}, {
+				"countyCode": "150603",
+				"countyName": "康巴什区"
+			}, {
+				"countyCode": "150623",
+				"countyName": "鄂托克前旗"
+			}, {
+				"countyCode": "150622",
+				"countyName": "准格尔旗"
+			}, {
+				"countyCode": "150625",
+				"countyName": "杭锦旗"
+			}, {
+				"countyCode": "150627",
+				"countyName": "伊金霍洛旗"
+			}]
+		}, {
+			"cityCode": "152900",
+			"cityName": "阿拉善盟",
+			"county": [{
+				"countyCode": "152923",
+				"countyName": "额济纳旗"
+			}, {
+				"countyCode": "152921",
+				"countyName": "阿拉善左旗"
+			}, {
+				"countyCode": "152922",
+				"countyName": "阿拉善右旗"
+			}]
+		}, {
+			"cityCode": "150800",
+			"cityName": "巴彦淖尔市",
+			"county": [{
+				"countyCode": "150802",
+				"countyName": "临河区"
+			}, {
+				"countyCode": "150823",
+				"countyName": "乌拉特前旗"
+			}, {
+				"countyCode": "150821",
+				"countyName": "五原县"
+			}, {
+				"countyCode": "150826",
+				"countyName": "杭锦后旗"
+			}, {
+				"countyCode": "150825",
+				"countyName": "乌拉特后旗"
+			}, {
+				"countyCode": "150824",
+				"countyName": "乌拉特中旗"
+			}, {
+				"countyCode": "150822",
+				"countyName": "磴口县"
+			}]
+		}]
+	}, {
+		"provinceCode": "210000",
+		"provinceName": "辽宁省",
+		"city": [{
+			"cityCode": "211200",
+			"cityName": "铁岭市",
+			"county": [{
+				"countyCode": "211281",
+				"countyName": "调兵山市"
+			}, {
+				"countyCode": "211221",
+				"countyName": "铁岭县"
+			}, {
+				"countyCode": "211224",
+				"countyName": "昌图县"
+			}, {
+				"countyCode": "211223",
+				"countyName": "西丰县"
+			}, {
+				"countyCode": "211282",
+				"countyName": "开原市"
+			}, {
+				"countyCode": "211202",
+				"countyName": "银州区"
+			}, {
+				"countyCode": "211204",
+				"countyName": "清河区"
+			}]
+		}, {
+			"cityCode": "210500",
+			"cityName": "本溪市",
+			"county": [{
+				"countyCode": "210522",
+				"countyName": "桓仁满族自治县"
+			}, {
+				"countyCode": "210502",
+				"countyName": "平山区"
+			}, {
+				"countyCode": "210503",
+				"countyName": "溪湖区"
+			}, {
+				"countyCode": "210505",
+				"countyName": "南芬区"
+			}, {
+				"countyCode": "210504",
+				"countyName": "明山区"
+			}, {
+				"countyCode": "210521",
+				"countyName": "本溪满族自治县"
+			}]
+		}, {
+			"cityCode": "211400",
+			"cityName": "葫芦岛市",
+			"county": [{
+				"countyCode": "211421",
+				"countyName": "绥中县"
+			}, {
+				"countyCode": "211481",
+				"countyName": "兴城市"
+			}, {
+				"countyCode": "211403",
+				"countyName": "龙港区"
+			}, {
+				"countyCode": "211404",
+				"countyName": "南票区"
+			}, {
+				"countyCode": "211422",
+				"countyName": "建昌县"
+			}, {
+				"countyCode": "211402",
+				"countyName": "连山区"
+			}]
+		}, {
+			"cityCode": "210100",
+			"cityName": "沈阳市",
+			"county": [{
+				"countyCode": "210122",
+				"countyName": "辽中区"
+			}, {
+				"countyCode": "210104",
+				"countyName": "大东区"
+			}, {
+				"countyCode": "210105",
+				"countyName": "皇姑区"
+			}, {
+				"countyCode": "210123",
+				"countyName": "康平县"
+			}, {
+				"countyCode": "210124",
+				"countyName": "法库县"
+			}, {
+				"countyCode": "210181",
+				"countyName": "新民市"
+			}, {
+				"countyCode": "210103",
+				"countyName": "沈河区"
+			}, {
+				"countyCode": "210111",
+				"countyName": "苏家屯区"
+			}, {
+				"countyCode": "210106",
+				"countyName": "铁西区"
+			}, {
+				"countyCode": "210102",
+				"countyName": "和平区"
+			}, {
+				"countyCode": "210113",
+				"countyName": "沈北新区"
+			}, {
+				"countyCode": "210114",
+				"countyName": "于洪区"
+			}, {
+				"countyCode": "210112",
+				"countyName": "浑南区"
+			}]
+		}, {
+			"cityCode": "210900",
+			"cityName": "阜新市",
+			"county": [{
+				"countyCode": "210905",
+				"countyName": "清河门区"
+			}, {
+				"countyCode": "210911",
+				"countyName": "细河区"
+			}, {
+				"countyCode": "210921",
+				"countyName": "阜新蒙古族自治县"
+			}, {
+				"countyCode": "210902",
+				"countyName": "海州区"
+			}, {
+				"countyCode": "210903",
+				"countyName": "新邱区"
+			}, {
+				"countyCode": "210922",
+				"countyName": "彰武县"
+			}, {
+				"countyCode": "210904",
+				"countyName": "太平区"
+			}]
+		}, {
+			"cityCode": "210800",
+			"cityName": "营口市",
+			"county": [{
+				"countyCode": "210802",
+				"countyName": "站前区"
+			}, {
+				"countyCode": "210804",
+				"countyName": "鲅鱼圈区"
+			}, {
+				"countyCode": "210811",
+				"countyName": "老边区"
+			}, {
+				"countyCode": "210882",
+				"countyName": "大石桥市"
+			}, {
+				"countyCode": "210881",
+				"countyName": "盖州市"
+			}, {
+				"countyCode": "210803",
+				"countyName": "西市区"
+			}]
+		}, {
+			"cityCode": "210300",
+			"cityName": "鞍山市",
+			"county": [{
+				"countyCode": "210304",
+				"countyName": "立山区"
+			}, {
+				"countyCode": "210381",
+				"countyName": "海城市"
+			}, {
+				"countyCode": "210321",
+				"countyName": "台安县"
+			}, {
+				"countyCode": "210311",
+				"countyName": "千山区"
+			}, {
+				"countyCode": "210302",
+				"countyName": "铁东区"
+			}, {
+				"countyCode": "210303",
+				"countyName": "铁西区"
+			}, {
+				"countyCode": "210323",
+				"countyName": "岫岩满族自治县"
+			}]
+		}, {
+			"cityCode": "210700",
+			"cityName": "锦州市",
+			"county": [{
+				"countyCode": "210727",
+				"countyName": "义县"
+			}, {
+				"countyCode": "210781",
+				"countyName": "凌海市"
+			}, {
+				"countyCode": "210711",
+				"countyName": "太和区"
+			}, {
+				"countyCode": "210726",
+				"countyName": "黑山县"
+			}, {
+				"countyCode": "210782",
+				"countyName": "北镇市"
+			}, {
+				"countyCode": "210702",
+				"countyName": "古塔区"
+			}, {
+				"countyCode": "210703",
+				"countyName": "凌河区"
+			}]
+		}, {
+			"cityCode": "210400",
+			"cityName": "抚顺市",
+			"county": [{
+				"countyCode": "210403",
+				"countyName": "东洲区"
+			}, {
+				"countyCode": "210411",
+				"countyName": "顺城区"
+			}, {
+				"countyCode": "210404",
+				"countyName": "望花区"
+			}, {
+				"countyCode": "210402",
+				"countyName": "新抚区"
+			}, {
+				"countyCode": "210421",
+				"countyName": "抚顺县"
+			}, {
+				"countyCode": "210423",
+				"countyName": "清原满族自治县"
+			}, {
+				"countyCode": "210422",
+				"countyName": "新宾满族自治县"
+			}]
+		}, {
+			"cityCode": "210200",
+			"cityName": "大连市",
+			"county": [{
+				"countyCode": "210213",
+				"countyName": "金州区"
+			}, {
+				"countyCode": "210202",
+				"countyName": "中山区"
+			}, {
+				"countyCode": "210282",
+				"countyName": "普兰店区"
+			}, {
+				"countyCode": "210204",
+				"countyName": "沙河口区"
+			}, {
+				"countyCode": "210203",
+				"countyName": "西岗区"
+			}, {
+				"countyCode": "210281",
+				"countyName": "瓦房店市"
+			}, {
+				"countyCode": "210211",
+				"countyName": "甘井子区"
+			}, {
+				"countyCode": "210212",
+				"countyName": "旅顺口区"
+			}, {
+				"countyCode": "210224",
+				"countyName": "长海县"
+			}, {
+				"countyCode": "210283",
+				"countyName": "庄河市"
+			}]
+		}, {
+			"cityCode": "211000",
+			"cityName": "辽阳市",
+			"county": [{
+				"countyCode": "211003",
+				"countyName": "文圣区"
+			}, {
+				"countyCode": "211081",
+				"countyName": "灯塔市"
+			}, {
+				"countyCode": "211011",
+				"countyName": "太子河区"
+			}, {
+				"countyCode": "211005",
+				"countyName": "弓长岭区"
+			}, {
+				"countyCode": "211004",
+				"countyName": "宏伟区"
+			}, {
+				"countyCode": "211021",
+				"countyName": "辽阳县"
+			}, {
+				"countyCode": "211002",
+				"countyName": "白塔区"
+			}]
+		}, {
+			"cityCode": "210600",
+			"cityName": "丹东市",
+			"county": [{
+				"countyCode": "210603",
+				"countyName": "振兴区"
+			}, {
+				"countyCode": "210681",
+				"countyName": "东港市"
+			}, {
+				"countyCode": "210624",
+				"countyName": "宽甸满族自治县"
+			}, {
+				"countyCode": "210682",
+				"countyName": "凤城市"
+			}, {
+				"countyCode": "210604",
+				"countyName": "振安区"
+			}, {
+				"countyCode": "210602",
+				"countyName": "元宝区"
+			}]
+		}, {
+			"cityCode": "211300",
+			"cityName": "朝阳市",
+			"county": [{
+				"countyCode": "211382",
+				"countyName": "凌源市"
+			}, {
+				"countyCode": "211322",
+				"countyName": "建平县"
+			}, {
+				"countyCode": "211381",
+				"countyName": "北票市"
+			}, {
+				"countyCode": "211303",
+				"countyName": "龙城区"
+			}, {
+				"countyCode": "211302",
+				"countyName": "双塔区"
+			}, {
+				"countyCode": "211324",
+				"countyName": "喀喇沁左翼蒙古族自治县"
+			}, {
+				"countyCode": "211321",
+				"countyName": "朝阳县"
+			}]
+		}, {
+			"cityCode": "211100",
+			"cityName": "盘锦市",
+			"county": [{
+				"countyCode": "211122",
+				"countyName": "盘山县"
+			}, {
+				"countyCode": "211103",
+				"countyName": "兴隆台区"
+			}, {
+				"countyCode": "211102",
+				"countyName": "双台子区"
+			}, {
+				"countyCode": "211121",
+				"countyName": "大洼区"
+			}]
+		}]
+	}, {
+		"provinceCode": "220000",
+		"provinceName": "吉林省",
+		"city": [{
+			"cityCode": "220600",
+			"cityName": "白山市",
+			"county": [{
+				"countyCode": "220621",
+				"countyName": "抚松县"
+			}, {
+				"countyCode": "220602",
+				"countyName": "浑江区"
+			}, {
+				"countyCode": "220622",
+				"countyName": "靖宇县"
+			}, {
+				"countyCode": "220605",
+				"countyName": "江源区"
+			}, {
+				"countyCode": "220681",
+				"countyName": "临江市"
+			}, {
+				"countyCode": "220623",
+				"countyName": "长白朝鲜族自治县"
+			}]
+		}, {
+			"cityCode": "220500",
+			"cityName": "通化市",
+			"county": [{
+				"countyCode": "220523",
+				"countyName": "辉南县"
+			}, {
+				"countyCode": "220521",
+				"countyName": "通化县"
+			}, {
+				"countyCode": "220581",
+				"countyName": "梅河口市"
+			}, {
+				"countyCode": "220502",
+				"countyName": "东昌区"
+			}, {
+				"countyCode": "220524",
+				"countyName": "柳河县"
+			}, {
+				"countyCode": "220503",
+				"countyName": "二道江区"
+			}, {
+				"countyCode": "220582",
+				"countyName": "集安市"
+			}]
+		}, {
+			"cityCode": "220700",
+			"cityName": "松原市",
+			"county": [{
+				"countyCode": "220722",
+				"countyName": "长岭县"
+			}, {
+				"countyCode": "220702",
+				"countyName": "宁江区"
+			}, {
+				"countyCode": "220724",
+				"countyName": "扶余市"
+			}, {
+				"countyCode": "220721",
+				"countyName": "前郭尔罗斯蒙古族自治县"
+			}, {
+				"countyCode": "220723",
+				"countyName": "乾安县"
+			}]
+		}, {
+			"cityCode": "220800",
+			"cityName": "白城市",
+			"county": [{
+				"countyCode": "220802",
+				"countyName": "洮北区"
+			}, {
+				"countyCode": "220821",
+				"countyName": "镇赉县"
+			}, {
+				"countyCode": "220822",
+				"countyName": "通榆县"
+			}, {
+				"countyCode": "220881",
+				"countyName": "洮南市"
+			}, {
+				"countyCode": "220882",
+				"countyName": "大安市"
+			}]
+		}, {
+			"cityCode": "220100",
+			"cityName": "长春市",
+			"county": [{
+				"countyCode": "220105",
+				"countyName": "二道区"
+			}, {
+				"countyCode": "220182",
+				"countyName": "榆树市"
+			}, {
+				"countyCode": "220106",
+				"countyName": "绿园区"
+			}, {
+				"countyCode": "220181",
+				"countyName": "九台区"
+			}, {
+				"countyCode": "220122",
+				"countyName": "农安县"
+			}, {
+				"countyCode": "220103",
+				"countyName": "宽城区"
+			}, {
+				"countyCode": "220102",
+				"countyName": "南关区"
+			}, {
+				"countyCode": "220104",
+				"countyName": "朝阳区"
+			}, {
+				"countyCode": "220183",
+				"countyName": "德惠市"
+			}, {
+				"countyCode": "220112",
+				"countyName": "双阳区"
+			}]
+		}, {
+			"cityCode": "222400",
+			"cityName": "延边朝鲜族自治州",
+			"county": [{
+				"countyCode": "222424",
+				"countyName": "汪清县"
+			}, {
+				"countyCode": "222401",
+				"countyName": "延吉市"
+			}, {
+				"countyCode": "222404",
+				"countyName": "珲春市"
+			}, {
+				"countyCode": "222405",
+				"countyName": "龙井市"
+			}, {
+				"countyCode": "222402",
+				"countyName": "图们市"
+			}, {
+				"countyCode": "222426",
+				"countyName": "安图县"
+			}, {
+				"countyCode": "222406",
+				"countyName": "和龙市"
+			}, {
+				"countyCode": "222403",
+				"countyName": "敦化市"
+			}]
+		}, {
+			"cityCode": "220400",
+			"cityName": "辽源市",
+			"county": [{
+				"countyCode": "220422",
+				"countyName": "东辽县"
+			}, {
+				"countyCode": "220402",
+				"countyName": "龙山区"
+			}, {
+				"countyCode": "220421",
+				"countyName": "东丰县"
+			}, {
+				"countyCode": "220403",
+				"countyName": "西安区"
+			}]
+		}, {
+			"cityCode": "220300",
+			"cityName": "四平市",
+			"county": [{
+				"countyCode": "220381",
+				"countyName": "公主岭市"
+			}, {
+				"countyCode": "220323",
+				"countyName": "伊通满族自治县"
+			}, {
+				"countyCode": "220322",
+				"countyName": "梨树县"
+			}, {
+				"countyCode": "220382",
+				"countyName": "双辽市"
+			}, {
+				"countyCode": "220302",
+				"countyName": "铁西区"
+			}, {
+				"countyCode": "220303",
+				"countyName": "铁东区"
+			}]
+		}, {
+			"cityCode": "220200",
+			"cityName": "吉林市",
+			"county": [{
+				"countyCode": "220204",
+				"countyName": "船营区"
+			}, {
+				"countyCode": "220283",
+				"countyName": "舒兰市"
+			}, {
+				"countyCode": "220282",
+				"countyName": "桦甸市"
+			}, {
+				"countyCode": "220202",
+				"countyName": "昌邑区"
+			}, {
+				"countyCode": "220281",
+				"countyName": "蛟河市"
+			}, {
+				"countyCode": "220284",
+				"countyName": "磐石市"
+			}, {
+				"countyCode": "220211",
+				"countyName": "丰满区"
+			}, {
+				"countyCode": "220203",
+				"countyName": "龙潭区"
+			}, {
+				"countyCode": "220221",
+				"countyName": "永吉县"
+			}]
+		}]
+	}, {
+		"provinceCode": "230000",
+		"provinceName": "黑龙江省",
+		"city": [{
+			"cityCode": "230400",
+			"cityName": "鹤岗市",
+			"county": [{
+				"countyCode": "230406",
+				"countyName": "东山区"
+			}, {
+				"countyCode": "230407",
+				"countyName": "兴山区"
+			}, {
+				"countyCode": "230422",
+				"countyName": "绥滨县"
+			}, {
+				"countyCode": "230403",
+				"countyName": "工农区"
+			}, {
+				"countyCode": "230404",
+				"countyName": "南山区"
+			}, {
+				"countyCode": "230421",
+				"countyName": "萝北县"
+			}, {
+				"countyCode": "230402",
+				"countyName": "向阳区"
+			}, {
+				"countyCode": "230405",
+				"countyName": "兴安区"
+			}]
+		}, {
+			"cityCode": "230700",
+			"cityName": "伊春市",
+			"county": [{
+				"countyCode": "230708",
+				"countyName": "美溪区"
+			}, {
+				"countyCode": "230705",
+				"countyName": "西林区"
+			}, {
+				"countyCode": "230722",
+				"countyName": "嘉荫县"
+			}, {
+				"countyCode": "230709",
+				"countyName": "金山屯区"
+			}, {
+				"countyCode": "230711",
+				"countyName": "乌马河区"
+			}, {
+				"countyCode": "230707",
+				"countyName": "新青区"
+			}, {
+				"countyCode": "230702",
+				"countyName": "伊春区"
+			}, {
+				"countyCode": "230704",
+				"countyName": "友好区"
+			}, {
+				"countyCode": "230703",
+				"countyName": "南岔区"
+			}, {
+				"countyCode": "230710",
+				"countyName": "五营区"
+			}, {
+				"countyCode": "230716",
+				"countyName": "上甘岭区"
+			}, {
+				"countyCode": "230712",
+				"countyName": "汤旺河区"
+			}, {
+				"countyCode": "230781",
+				"countyName": "铁力市"
+			}, {
+				"countyCode": "230714",
+				"countyName": "乌伊岭区"
+			}, {
+				"countyCode": "230715",
+				"countyName": "红星区"
+			}, {
+				"countyCode": "230706",
+				"countyName": "翠峦区"
+			}, {
+				"countyCode": "230713",
+				"countyName": "带岭区"
+			}]
+		}, {
+			"cityCode": "230800",
+			"cityName": "佳木斯市",
+			"county": [{
+				"countyCode": "230881",
+				"countyName": "同江市"
+			}, {
+				"countyCode": "230805",
+				"countyName": "东风区"
+			}, {
+				"countyCode": "230811",
+				"countyName": "郊区"
+			}, {
+				"countyCode": "230882",
+				"countyName": "富锦市"
+			}, {
+				"countyCode": "230828",
+				"countyName": "汤原县"
+			}, {
+				"countyCode": "230833",
+				"countyName": "抚远市"
+			}, {
+				"countyCode": "230804",
+				"countyName": "前进区"
+			}, {
+				"countyCode": "230803",
+				"countyName": "向阳区"
+			}, {
+				"countyCode": "230826",
+				"countyName": "桦川县"
+			}, {
+				"countyCode": "230822",
+				"countyName": "桦南县"
+			}]
+		}, {
+			"cityCode": "230200",
+			"cityName": "齐齐哈尔市",
+			"county": [{
+				"countyCode": "230207",
+				"countyName": "碾子山区"
+			}, {
+				"countyCode": "230203",
+				"countyName": "建华区"
+			}, {
+				"countyCode": "230204",
+				"countyName": "铁锋区"
+			}, {
+				"countyCode": "230208",
+				"countyName": "梅里斯达斡尔族区"
+			}, {
+				"countyCode": "230230",
+				"countyName": "克东县"
+			}, {
+				"countyCode": "230227",
+				"countyName": "富裕县"
+			}, {
+				"countyCode": "230205",
+				"countyName": "昂昂溪区"
+			}, {
+				"countyCode": "230221",
+				"countyName": "龙江县"
+			}, {
+				"countyCode": "230206",
+				"countyName": "富拉尔基区"
+			}, {
+				"countyCode": "230223",
+				"countyName": "依安县"
+			}, {
+				"countyCode": "230225",
+				"countyName": "甘南县"
+			}, {
+				"countyCode": "230229",
+				"countyName": "克山县"
+			}, {
+				"countyCode": "230281",
+				"countyName": "讷河市"
+			}, {
+				"countyCode": "230202",
+				"countyName": "龙沙区"
+			}, {
+				"countyCode": "230231",
+				"countyName": "拜泉县"
+			}, {
+				"countyCode": "230224",
+				"countyName": "泰来县"
+			}]
+		}, {
+			"cityCode": "230500",
+			"cityName": "双鸭山市",
+			"county": [{
+				"countyCode": "230524",
+				"countyName": "饶河县"
+			}, {
+				"countyCode": "230506",
+				"countyName": "宝山区"
+			}, {
+				"countyCode": "230503",
+				"countyName": "岭东区"
+			}, {
+				"countyCode": "230505",
+				"countyName": "四方台区"
+			}, {
+				"countyCode": "230523",
+				"countyName": "宝清县"
+			}, {
+				"countyCode": "230521",
+				"countyName": "集贤县"
+			}, {
+				"countyCode": "230522",
+				"countyName": "友谊县"
+			}, {
+				"countyCode": "230502",
+				"countyName": "尖山区"
+			}]
+		}, {
+			"cityCode": "230100",
+			"cityName": "哈尔滨市",
+			"county": [{
+				"countyCode": "230109",
+				"countyName": "松北区"
+			}, {
+				"countyCode": "230127",
+				"countyName": "木兰县"
+			}, {
+				"countyCode": "230124",
+				"countyName": "方正县"
+			}, {
+				"countyCode": "230103",
+				"countyName": "南岗区"
+			}, {
+				"countyCode": "230183",
+				"countyName": "尚志市"
+			}, {
+				"countyCode": "230129",
+				"countyName": "延寿县"
+			}, {
+				"countyCode": "230126",
+				"countyName": "巴彦县"
+			}, {
+				"countyCode": "230125",
+				"countyName": "宾县"
+			}, {
+				"countyCode": "230102",
+				"countyName": "道里区"
+			}, {
+				"countyCode": "230111",
+				"countyName": "呼兰区"
+			}, {
+				"countyCode": "230112",
+				"countyName": "阿城区"
+			}, {
+				"countyCode": "230110",
+				"countyName": "香坊区"
+			}, {
+				"countyCode": "230108",
+				"countyName": "平房区"
+			}, {
+				"countyCode": "230182",
+				"countyName": "双城区"
+			}, {
+				"countyCode": "230123",
+				"countyName": "依兰县"
+			}, {
+				"countyCode": "230184",
+				"countyName": "五常市"
+			}, {
+				"countyCode": "230104",
+				"countyName": "道外区"
+			}, {
+				"countyCode": "230128",
+				"countyName": "通河县"
+			}]
+		}, {
+			"cityCode": "231000",
+			"cityName": "牡丹江市",
+			"county": [{
+				"countyCode": "231003",
+				"countyName": "阳明区"
+			}, {
+				"countyCode": "231005",
+				"countyName": "西安区"
+			}, {
+				"countyCode": "231025",
+				"countyName": "林口县"
+			}, {
+				"countyCode": "231024",
+				"countyName": "东宁市"
+			}, {
+				"countyCode": "231004",
+				"countyName": "爱民区"
+			}, {
+				"countyCode": "231084",
+				"countyName": "宁安市"
+			}, {
+				"countyCode": "231083",
+				"countyName": "海林市"
+			}, {
+				"countyCode": "231002",
+				"countyName": "东安区"
+			}, {
+				"countyCode": "231085",
+				"countyName": "穆棱市"
+			}, {
+				"countyCode": "231081",
+				"countyName": "绥芬河市"
+			}]
+		}, {
+			"cityCode": "230900",
+			"cityName": "七台河市",
+			"county": [{
+				"countyCode": "230904",
+				"countyName": "茄子河区"
+			}, {
+				"countyCode": "230921",
+				"countyName": "勃利县"
+			}, {
+				"countyCode": "230902",
+				"countyName": "新兴区"
+			}, {
+				"countyCode": "230903",
+				"countyName": "桃山区"
+			}]
+		}, {
+			"cityCode": "231100",
+			"cityName": "黑河市",
+			"county": [{
+				"countyCode": "231102",
+				"countyName": "爱辉区"
+			}, {
+				"countyCode": "231182",
+				"countyName": "五大连池市"
+			}, {
+				"countyCode": "231181",
+				"countyName": "北安市"
+			}, {
+				"countyCode": "231124",
+				"countyName": "孙吴县"
+			}, {
+				"countyCode": "231123",
+				"countyName": "逊克县"
+			}, {
+				"countyCode": "231121",
+				"countyName": "嫩江县"
+			}]
+		}, {
+			"cityCode": "230600",
+			"cityName": "大庆市",
+			"county": [{
+				"countyCode": "230605",
+				"countyName": "红岗区"
+			}, {
+				"countyCode": "230606",
+				"countyName": "大同区"
+			}, {
+				"countyCode": "230623",
+				"countyName": "林甸县"
+			}, {
+				"countyCode": "230622",
+				"countyName": "肇源县"
+			}, {
+				"countyCode": "230621",
+				"countyName": "肇州县"
+			}, {
+				"countyCode": "230624",
+				"countyName": "杜尔伯特蒙古族自治县"
+			}, {
+				"countyCode": "230603",
+				"countyName": "龙凤区"
+			}, {
+				"countyCode": "230602",
+				"countyName": "萨尔图区"
+			}, {
+				"countyCode": "230604",
+				"countyName": "让胡路区"
+			}]
+		}, {
+			"cityCode": "232700",
+			"cityName": "大兴安岭地区",
+			"county": [{
+				"countyCode": "232703",
+				"countyName": "新林区"
+			}, {
+				"countyCode": "232702",
+				"countyName": "松岭区"
+			}, {
+				"countyCode": "232701",
+				"countyName": "加格达奇区"
+			}, {
+				"countyCode": "232722",
+				"countyName": "塔河县"
+			}, {
+				"countyCode": "232721",
+				"countyName": "呼玛县"
+			}, {
+				"countyCode": "232704",
+				"countyName": "呼中区"
+			}, {
+				"countyCode": "232723",
+				"countyName": "漠河市"
+			}]
+		}, {
+			"cityCode": "231200",
+			"cityName": "绥化市",
+			"county": [{
+				"countyCode": "231281",
+				"countyName": "安达市"
+			}, {
+				"countyCode": "231224",
+				"countyName": "庆安县"
+			}, {
+				"countyCode": "231282",
+				"countyName": "肇东市"
+			}, {
+				"countyCode": "231283",
+				"countyName": "海伦市"
+			}, {
+				"countyCode": "231225",
+				"countyName": "明水县"
+			}, {
+				"countyCode": "231222",
+				"countyName": "兰西县"
+			}, {
+				"countyCode": "231223",
+				"countyName": "青冈县"
+			}, {
+				"countyCode": "231226",
+				"countyName": "绥棱县"
+			}, {
+				"countyCode": "231221",
+				"countyName": "望奎县"
+			}, {
+				"countyCode": "231202",
+				"countyName": "北林区"
+			}]
+		}, {
+			"cityCode": "230300",
+			"cityName": "鸡西市",
+			"county": [{
+				"countyCode": "230303",
+				"countyName": "恒山区"
+			}, {
+				"countyCode": "230302",
+				"countyName": "鸡冠区"
+			}, {
+				"countyCode": "230305",
+				"countyName": "梨树区"
+			}, {
+				"countyCode": "230321",
+				"countyName": "鸡东县"
+			}, {
+				"countyCode": "230304",
+				"countyName": "滴道区"
+			}, {
+				"countyCode": "230381",
+				"countyName": "虎林市"
+			}, {
+				"countyCode": "230307",
+				"countyName": "麻山区"
+			}, {
+				"countyCode": "230306",
+				"countyName": "城子河区"
+			}, {
+				"countyCode": "230382",
+				"countyName": "密山市"
+			}]
+		}]
+	}, {
+		"provinceCode": "310000",
+		"provinceName": "上海",
+		"city": [{
+		
+				"countyCode": "310115",
+				"cityName": "浦东新区"
+			}, {
+				"countyCode": "310110",
+				"cityName": "杨浦区"
+			}, {
+				"countyCode": "310230",
+				"cityName": "崇明区"
+			}, {
+				"countyCode": "310113",
+				"cityName": "宝山区"
+			}, {
+				"countyCode": "310114",
+				"cityName": "嘉定区"
+			}, {
+				"countyCode": "310109",
+				"cityName": "虹口区"
+			}, {
+				"countyCode": "310101",
+				"cityName": "黄浦区"
+			}, {
+				"countyCode": "310120",
+				"cityName": "奉贤区"
+			}, {
+				"countyCode": "310118",
+				"cityName": "青浦区"
+			}, {
+				"countyCode": "310112",
+				"cityName": "闵行区"
+			}, {
+				"countyCode": "310105",
+				"cityName": "长宁区"
+			}, {
+				"countyCode": "310104",
+				"cityName": "徐汇区"
+			}, {
+				"countyCode": "310117",
+				"cityName": "松江区"
+			}, {
+				"countyCode": "310106",
+				"cityName": "静安区"
+			}, {
+				"countyCode": "310107",
+				"cityName": "普陀区"
+			}, {
+				"countyCode": "310116",
+				"cityName": "金山区"
+			
+		}]
+	}, {
+		"provinceCode": "340000",
+		"provinceName": "安徽省",
+		"city": [{
+			"cityCode": "341000",
+			"cityName": "黄山市",
+			"county": [{
+				"countyCode": "341022",
+				"countyName": "休宁县"
+			}, {
+				"countyCode": "341024",
+				"countyName": "祁门县"
+			}, {
+				"countyCode": "341021",
+				"countyName": "歙县"
+			}, {
+				"countyCode": "341003",
+				"countyName": "黄山区"
+			}, {
+				"countyCode": "341023",
+				"countyName": "黟县"
+			}, {
+				"countyCode": "341004",
+				"countyName": "徽州区"
+			}, {
+				"countyCode": "341002",
+				"countyName": "屯溪区"
+			}]
+		}, {
+			"cityCode": "340200",
+			"cityName": "芜湖市",
+			"county": [{
+				"countyCode": "340208",
+				"countyName": "三山区"
+			}, {
+				"countyCode": "340222",
+				"countyName": "繁昌县"
+			}, {
+				"countyCode": "340207",
+				"countyName": "鸠江区"
+			}, {
+				"countyCode": "340221",
+				"countyName": "芜湖县"
+			}, {
+				"countyCode": "340202",
+				"countyName": "镜湖区"
+			}, {
+				"countyCode": "340203",
+				"countyName": "弋江区"
+			}, {
+				"countyCode": "340225",
+				"countyName": "无为县"
+			}, {
+				"countyCode": "340223",
+				"countyName": "南陵县"
+			}]
+		}, {
+			"cityCode": "340800",
+			"cityName": "安庆市",
+			"county": [{
+				"countyCode": "340826",
+				"countyName": "宿松县"
+			}, {
+				"countyCode": "340824",
+				"countyName": "潜山市"
+			}, {
+				"countyCode": "340881",
+				"countyName": "桐城市"
+			}, {
+				"countyCode": "340828",
+				"countyName": "岳西县"
+			}, {
+				"countyCode": "340825",
+				"countyName": "太湖县"
+			}, {
+				"countyCode": "340811",
+				"countyName": "宜秀区"
+			}, {
+				"countyCode": "340803",
+				"countyName": "大观区"
+			}, {
+				"countyCode": "340827",
+				"countyName": "望江县"
+			}, {
+				"countyCode": "340802",
+				"countyName": "迎江区"
+			}, {
+				"countyCode": "340822",
+				"countyName": "怀宁县"
+			}]
+		}, {
+			"cityCode": "341100",
+			"cityName": "滁州市",
+			"county": [{
+				"countyCode": "341103",
+				"countyName": "南谯区"
+			}, {
+				"countyCode": "341102",
+				"countyName": "琅琊区"
+			}, {
+				"countyCode": "341181",
+				"countyName": "天长市"
+			}, {
+				"countyCode": "341125",
+				"countyName": "定远县"
+			}, {
+				"countyCode": "341124",
+				"countyName": "全椒县"
+			}, {
+				"countyCode": "341122",
+				"countyName": "来安县"
+			}, {
+				"countyCode": "341182",
+				"countyName": "明光市"
+			}, {
+				"countyCode": "341126",
+				"countyName": "凤阳县"
+			}]
+		}, {
+			"cityCode": "340600",
+			"cityName": "淮北市",
+			"county": [{
+				"countyCode": "340621",
+				"countyName": "濉溪县"
+			}, {
+				"countyCode": "340603",
+				"countyName": "相山区"
+			}, {
+				"countyCode": "340602",
+				"countyName": "杜集区"
+			}, {
+				"countyCode": "340604",
+				"countyName": "烈山区"
+			}]
+		}, {
+			"cityCode": "340700",
+			"cityName": "铜陵市",
+			"county": [{
+				"countyCode": "340711",
+				"countyName": "郊区"
+			}, {
+				"countyCode": "340702",
+				"countyName": "铜官山区"
+			}, {
+				"countyCode": "340823",
+				"countyName": "枞阳县"
+			}, {
+				"countyCode": "340703",
+				"countyName": "铜官区"
+			}, {
+				"countyCode": "340721",
+				"countyName": "义安区"
+			}]
+		}, {
+			"cityCode": "340300",
+			"cityName": "蚌埠市",
+			"county": [{
+				"countyCode": "340303",
+				"countyName": "蚌山区"
+			}, {
+				"countyCode": "340323",
+				"countyName": "固镇县"
+			}, {
+				"countyCode": "340322",
+				"countyName": "五河县"
+			}, {
+				"countyCode": "340304",
+				"countyName": "禹会区"
+			}, {
+				"countyCode": "340311",
+				"countyName": "淮上区"
+			}, {
+				"countyCode": "340302",
+				"countyName": "龙子湖区"
+			}, {
+				"countyCode": "340321",
+				"countyName": "怀远县"
+			}]
+		}, {
+			"cityCode": "340400",
+			"cityName": "淮南市",
+			"county": [{
+				"countyCode": "340421",
+				"countyName": "凤台县"
+			}, {
+				"countyCode": "341521",
+				"countyName": "寿县"
+			}, {
+				"countyCode": "340403",
+				"countyName": "田家庵区"
+			}, {
+				"countyCode": "340404",
+				"countyName": "谢家集区"
+			}, {
+				"countyCode": "340406",
+				"countyName": "潘集区"
+			}, {
+				"countyCode": "340405",
+				"countyName": "八公山区"
+			}, {
+				"countyCode": "340402",
+				"countyName": "大通区"
+			}]
+		}, {
+			"cityCode": "341300",
+			"cityName": "宿州市",
+			"county": [{
+				"countyCode": "341321",
+				"countyName": "砀山县"
+			}, {
+				"countyCode": "341322",
+				"countyName": "萧县"
+			}, {
+				"countyCode": "341324",
+				"countyName": "泗县"
+			}, {
+				"countyCode": "341323",
+				"countyName": "灵璧县"
+			}, {
+				"countyCode": "341302",
+				"countyName": "埇桥区"
+			}]
+		}, {
+			"cityCode": "341700",
+			"cityName": "池州市",
+			"county": [{
+				"countyCode": "341723",
+				"countyName": "青阳县"
+			}, {
+				"countyCode": "341722",
+				"countyName": "石台县"
+			}, {
+				"countyCode": "341721",
+				"countyName": "东至县"
+			}, {
+				"countyCode": "341702",
+				"countyName": "贵池区"
+			}]
+		}, {
+			"cityCode": "340500",
+			"cityName": "马鞍山市",
+			"county": [{
+				"countyCode": "340522",
+				"countyName": "含山县"
+			}, {
+				"countyCode": "340503",
+				"countyName": "花山区"
+			}, {
+				"countyCode": "340506",
+				"countyName": "博望区"
+			}, {
+				"countyCode": "340523",
+				"countyName": "和县"
+			}, {
+				"countyCode": "340521",
+				"countyName": "当涂县"
+			}, {
+				"countyCode": "340504",
+				"countyName": "雨山区"
+			}]
+		}, {
+			"cityCode": "341200",
+			"cityName": "阜阳市",
+			"county": [{
+				"countyCode": "341222",
+				"countyName": "太和县"
+			}, {
+				"countyCode": "341226",
+				"countyName": "颍上县"
+			}, {
+				"countyCode": "341221",
+				"countyName": "临泉县"
+			}, {
+				"countyCode": "341204",
+				"countyName": "颍泉区"
+			}, {
+				"countyCode": "341225",
+				"countyName": "阜南县"
+			}, {
+				"countyCode": "341282",
+				"countyName": "界首市"
+			}, {
+				"countyCode": "341203",
+				"countyName": "颍东区"
+			}, {
+				"countyCode": "341202",
+				"countyName": "颍州区"
+			}]
+		}, {
+			"cityCode": "341600",
+			"cityName": "亳州市",
+			"county": [{
+				"countyCode": "341621",
+				"countyName": "涡阳县"
+			}, {
+				"countyCode": "341623",
+				"countyName": "利辛县"
+			}, {
+				"countyCode": "341602",
+				"countyName": "谯城区"
+			}, {
+				"countyCode": "341622",
+				"countyName": "蒙城县"
+			}]
+		}, {
+			"cityCode": "341800",
+			"cityName": "宣城市",
+			"county": [{
+				"countyCode": "341881",
+				"countyName": "宁国市"
+			}, {
+				"countyCode": "341822",
+				"countyName": "广德县"
+			}, {
+				"countyCode": "341821",
+				"countyName": "郎溪县"
+			}, {
+				"countyCode": "341823",
+				"countyName": "泾县"
+			}, {
+				"countyCode": "341825",
+				"countyName": "旌德县"
+			}, {
+				"countyCode": "341802",
+				"countyName": "宣州区"
+			}, {
+				"countyCode": "341824",
+				"countyName": "绩溪县"
+			}]
+		}, {
+			"cityCode": "340100",
+			"cityName": "合肥市",
+			"county": [{
+				"countyCode": "340181",
+				"countyName": "巢湖市"
+			}, {
+				"countyCode": "340104",
+				"countyName": "蜀山区"
+			}, {
+				"countyCode": "340122",
+				"countyName": "肥东县"
+			}, {
+				"countyCode": "340111",
+				"countyName": "包河区"
+			}, {
+				"countyCode": "340102",
+				"countyName": "瑶海区"
+			}, {
+				"countyCode": "340123",
+				"countyName": "肥西县"
+			}, {
+				"countyCode": "340124",
+				"countyName": "庐江县"
+			}, {
+				"countyCode": "340121",
+				"countyName": "长丰县"
+			}, {
+				"countyCode": "340103",
+				"countyName": "庐阳区"
+			}]
+		}, {
+			"cityCode": "341500",
+			"cityName": "六安市",
+			"county": [{
+				"countyCode": "341525",
+				"countyName": "霍山县"
+			}, {
+				"countyCode": "341502",
+				"countyName": "金安区"
+			}, {
+				"countyCode": "341503",
+				"countyName": "裕安区"
+			}, {
+				"countyCode": "341522",
+				"countyName": "霍邱县"
+			}, {
+				"countyCode": "341504",
+				"countyName": "叶集区"
+			}, {
+				"countyCode": "341523",
+				"countyName": "舒城县"
+			}, {
+				"countyCode": "341524",
+				"countyName": "金寨县"
+			}]
+		}]
+	}, {
+		"provinceCode": "350000",
+		"provinceName": "福建省",
+		"city": [{
+			"cityCode": "350200",
+			"cityName": "厦门市",
+			"county": [{
+				"countyCode": "350206",
+				"countyName": "湖里区"
+			}, {
+				"countyCode": "350212",
+				"countyName": "同安区"
+			}, {
+				"countyCode": "350203",
+				"countyName": "思明区"
+			}, {
+				"countyCode": "350213",
+				"countyName": "翔安区"
+			}, {
+				"countyCode": "350205",
+				"countyName": "海沧区"
+			}, {
+				"countyCode": "350211",
+				"countyName": "集美区"
+			}]
+		}, {
+			"cityCode": "350800",
+			"cityName": "龙岩市",
+			"county": [{
+				"countyCode": "350881",
+				"countyName": "漳平市"
+			}, {
+				"countyCode": "350825",
+				"countyName": "连城县"
+			}, {
+				"countyCode": "350821",
+				"countyName": "长汀县"
+			}, {
+				"countyCode": "350802",
+				"countyName": "新罗区"
+			}, {
+				"countyCode": "350823",
+				"countyName": "上杭县"
+			}, {
+				"countyCode": "350822",
+				"countyName": "永定区"
+			}, {
+				"countyCode": "350824",
+				"countyName": "武平县"
+			}]
+		}, {
+			"cityCode": "350100",
+			"cityName": "福州市",
+			"county": [{
+				"countyCode": "350124",
+				"countyName": "闽清县"
+			}, {
+				"countyCode": "350103",
+				"countyName": "台江区"
+			}, {
+				"countyCode": "350121",
+				"countyName": "闽侯县"
+			}, {
+				"countyCode": "350182",
+				"countyName": "长乐区"
+			}, {
+				"countyCode": "350125",
+				"countyName": "永泰县"
+			}, {
+				"countyCode": "350111",
+				"countyName": "晋安区"
+			}, {
+				"countyCode": "350123",
+				"countyName": "罗源县"
+			}, {
+				"countyCode": "350102",
+				"countyName": "鼓楼区"
+			}, {
+				"countyCode": "350105",
+				"countyName": "马尾区"
+			}, {
+				"countyCode": "350104",
+				"countyName": "仓山区"
+			}, {
+				"countyCode": "350128",
+				"countyName": "平潭县"
+			}, {
+				"countyCode": "350181",
+				"countyName": "福清市"
+			}, {
+				"countyCode": "350122",
+				"countyName": "连江县"
+			}]
+		}, {
+			"cityCode": "350700",
+			"cityName": "南平市",
+			"county": [{
+				"countyCode": "350724",
+				"countyName": "松溪县"
+			}, {
+				"countyCode": "350783",
+				"countyName": "建瓯市"
+			}, {
+				"countyCode": "350725",
+				"countyName": "政和县"
+			}, {
+				"countyCode": "350723",
+				"countyName": "光泽县"
+			}, {
+				"countyCode": "350721",
+				"countyName": "顺昌县"
+			}, {
+				"countyCode": "350781",
+				"countyName": "邵武市"
+			}, {
+				"countyCode": "350782",
+				"countyName": "武夷山市"
+			}, {
+				"countyCode": "350722",
+				"countyName": "浦城县"
+			}, {
+				"countyCode": "350784",
+				"countyName": "建阳区"
+			}, {
+				"countyCode": "350702",
+				"countyName": "延平区"
+			}]
+		}, {
+			"cityCode": "350900",
+			"cityName": "宁德市",
+			"county": [{
+				"countyCode": "350922",
+				"countyName": "古田县"
+			}, {
+				"countyCode": "350924",
+				"countyName": "寿宁县"
+			}, {
+				"countyCode": "350902",
+				"countyName": "蕉城区"
+			}, {
+				"countyCode": "350926",
+				"countyName": "柘荣县"
+			}, {
+				"countyCode": "350925",
+				"countyName": "周宁县"
+			}, {
+				"countyCode": "350982",
+				"countyName": "福鼎市"
+			}, {
+				"countyCode": "350923",
+				"countyName": "屏南县"
+			}, {
+				"countyCode": "350981",
+				"countyName": "福安市"
+			}, {
+				"countyCode": "350921",
+				"countyName": "霞浦县"
+			}]
+		}, {
+			"cityCode": "350500",
+			"cityName": "泉州市",
+			"county": [{
+				"countyCode": "350526",
+				"countyName": "德化县"
+			}, {
+				"countyCode": "350582",
+				"countyName": "晋江市"
+			}, {
+				"countyCode": "350583",
+				"countyName": "南安市"
+			}, {
+				"countyCode": "350503",
+				"countyName": "丰泽区"
+			}, {
+				"countyCode": "350581",
+				"countyName": "石狮市"
+			}, {
+				"countyCode": "350525",
+				"countyName": "永春县"
+			}, {
+				"countyCode": "350521",
+				"countyName": "惠安县"
+			}, {
+				"countyCode": "350524",
+				"countyName": "安溪县"
+			}, {
+				"countyCode": "350502",
+				"countyName": "鲤城区"
+			}, {
+				"countyCode": "350505",
+				"countyName": "泉港区"
+			}, {
+				"countyCode": "350527",
+				"countyName": "金门县"
+			}, {
+				"countyCode": "350504",
+				"countyName": "洛江区"
+			}]
+		}, {
+			"cityCode": "350400",
+			"cityName": "三明市",
+			"county": [{
+				"countyCode": "350421",
+				"countyName": "明溪县"
+			}, {
+				"countyCode": "350403",
+				"countyName": "三元区"
+			}, {
+				"countyCode": "350423",
+				"countyName": "清流县"
+			}, {
+				"countyCode": "350426",
+				"countyName": "尤溪县"
+			}, {
+				"countyCode": "350481",
+				"countyName": "永安市"
+			}, {
+				"countyCode": "350424",
+				"countyName": "宁化县"
+			}, {
+				"countyCode": "350425",
+				"countyName": "大田县"
+			}, {
+				"countyCode": "350427",
+				"countyName": "沙县"
+			}, {
+				"countyCode": "350430",
+				"countyName": "建宁县"
+			}, {
+				"countyCode": "350428",
+				"countyName": "将乐县"
+			}, {
+				"countyCode": "350402",
+				"countyName": "梅列区"
+			}, {
+				"countyCode": "350429",
+				"countyName": "泰宁县"
+			}]
+		}, {
+			"cityCode": "350300",
+			"cityName": "莆田市",
+			"county": [{
+				"countyCode": "350322",
+				"countyName": "仙游县"
+			}, {
+				"countyCode": "350303",
+				"countyName": "涵江区"
+			}, {
+				"countyCode": "350304",
+				"countyName": "荔城区"
+			}, {
+				"countyCode": "350302",
+				"countyName": "城厢区"
+			}, {
+				"countyCode": "350305",
+				"countyName": "秀屿区"
+			}]
+		}, {
+			"cityCode": "350600",
+			"cityName": "漳州市",
+			"county": [{
+				"countyCode": "350629",
+				"countyName": "华安县"
+			}, {
+				"countyCode": "350623",
+				"countyName": "漳浦县"
+			}, {
+				"countyCode": "350602",
+				"countyName": "芗城区"
+			}, {
+				"countyCode": "350625",
+				"countyName": "长泰县"
+			}, {
+				"countyCode": "350603",
+				"countyName": "龙文区"
+			}, {
+				"countyCode": "350622",
+				"countyName": "云霄县"
+			}, {
+				"countyCode": "350628",
+				"countyName": "平和县"
+			}, {
+				"countyCode": "350627",
+				"countyName": "南靖县"
+			}, {
+				"countyCode": "350681",
+				"countyName": "龙海市"
+			}, {
+				"countyCode": "350624",
+				"countyName": "诏安县"
+			}, {
+				"countyCode": "350626",
+				"countyName": "东山县"
+			}]
+		}]
+	}, {
+		"provinceCode": "360000",
+		"provinceName": "江西省",
+		"city": [{
+			"cityCode": "361000",
+			"cityName": "抚州市",
+			"county": [{
+				"countyCode": "361002",
+				"countyName": "临川区"
+			}, {
+				"countyCode": "361023",
+				"countyName": "南丰县"
+			}, {
+				"countyCode": "361026",
+				"countyName": "宜黄县"
+			}, {
+				"countyCode": "361028",
+				"countyName": "资溪县"
+			}, {
+				"countyCode": "361029",
+				"countyName": "东乡区"
+			}, {
+				"countyCode": "361027",
+				"countyName": "金溪县"
+			}, {
+				"countyCode": "361022",
+				"countyName": "黎川县"
+			}, {
+				"countyCode": "361021",
+				"countyName": "南城县"
+			}, {
+				"countyCode": "361025",
+				"countyName": "乐安县"
+			}, {
+				"countyCode": "361024",
+				"countyName": "崇仁县"
+			}, {
+				"countyCode": "361030",
+				"countyName": "广昌县"
+			}]
+		}, {
+			"cityCode": "360900",
+			"cityName": "宜春市",
+			"county": [{
+				"countyCode": "360981",
+				"countyName": "丰城市"
+			}, {
+				"countyCode": "360902",
+				"countyName": "袁州区"
+			}, {
+				"countyCode": "360921",
+				"countyName": "奉新县"
+			}, {
+				"countyCode": "360983",
+				"countyName": "高安市"
+			}, {
+				"countyCode": "360922",
+				"countyName": "万载县"
+			}, {
+				"countyCode": "360926",
+				"countyName": "铜鼓县"
+			}, {
+				"countyCode": "360923",
+				"countyName": "上高县"
+			}, {
+				"countyCode": "360924",
+				"countyName": "宜丰县"
+			}, {
+				"countyCode": "360925",
+				"countyName": "靖安县"
+			}, {
+				"countyCode": "360982",
+				"countyName": "樟树市"
+			}]
+		}, {
+			"cityCode": "360100",
+			"cityName": "南昌市",
+			"county": [{
+				"countyCode": "360104",
+				"countyName": "青云谱区"
+			}, {
+				"countyCode": "360105",
+				"countyName": "湾里区"
+			}, {
+				"countyCode": "360124",
+				"countyName": "进贤县"
+			}, {
+				"countyCode": "360102",
+				"countyName": "东湖区"
+			}, {
+				"countyCode": "360123",
+				"countyName": "安义县"
+			}, {
+				"countyCode": "360122",
+				"countyName": "新建区"
+			}, {
+				"countyCode": "360121",
+				"countyName": "南昌县"
+			}, {
+				"countyCode": "360111",
+				"countyName": "青山湖区"
+			}, {
+				"countyCode": "360103",
+				"countyName": "西湖区"
+			}]
+		}, {
+			"cityCode": "360700",
+			"cityName": "赣州市",
+			"county": [{
+				"countyCode": "360725",
+				"countyName": "崇义县"
+			}, {
+				"countyCode": "360727",
+				"countyName": "龙南县"
+			}, {
+				"countyCode": "360728",
+				"countyName": "定南县"
+			}, {
+				"countyCode": "360723",
+				"countyName": "大余县"
+			}, {
+				"countyCode": "360734",
+				"countyName": "寻乌县"
+			}, {
+				"countyCode": "360702",
+				"countyName": "章贡区"
+			}, {
+				"countyCode": "360726",
+				"countyName": "安远县"
+			}, {
+				"countyCode": "360729",
+				"countyName": "全南县"
+			}, {
+				"countyCode": "360735",
+				"countyName": "石城县"
+			}, {
+				"countyCode": "360782",
+				"countyName": "南康区"
+			}, {
+				"countyCode": "360721",
+				"countyName": "赣县区"
+			}, {
+				"countyCode": "360732",
+				"countyName": "兴国县"
+			}, {
+				"countyCode": "360781",
+				"countyName": "瑞金市"
+			}, {
+				"countyCode": "360724",
+				"countyName": "上犹县"
+			}, {
+				"countyCode": "360730",
+				"countyName": "宁都县"
+			}, {
+				"countyCode": "360733",
+				"countyName": "会昌县"
+			}, {
+				"countyCode": "360722",
+				"countyName": "信丰县"
+			}, {
+				"countyCode": "360731",
+				"countyName": "于都县"
+			}]
+		}, {
+			"cityCode": "360200",
+			"cityName": "景德镇市",
+			"county": [{
+				"countyCode": "360222",
+				"countyName": "浮梁县"
+			}, {
+				"countyCode": "360281",
+				"countyName": "乐平市"
+			}, {
+				"countyCode": "360202",
+				"countyName": "昌江区"
+			}, {
+				"countyCode": "360203",
+				"countyName": "珠山区"
+			}]
+		}, {
+			"cityCode": "360800",
+			"cityName": "吉安市",
+			"county": [{
+				"countyCode": "360829",
+				"countyName": "安福县"
+			}, {
+				"countyCode": "360821",
+				"countyName": "吉安县"
+			}, {
+				"countyCode": "360827",
+				"countyName": "遂川县"
+			}, {
+				"countyCode": "360803",
+				"countyName": "青原区"
+			}, {
+				"countyCode": "360828",
+				"countyName": "万安县"
+			}, {
+				"countyCode": "360826",
+				"countyName": "泰和县"
+			}, {
+				"countyCode": "360823",
+				"countyName": "峡江县"
+			}, {
+				"countyCode": "360822",
+				"countyName": "吉水县"
+			}, {
+				"countyCode": "360802",
+				"countyName": "吉州区"
+			}, {
+				"countyCode": "360824",
+				"countyName": "新干县"
+			}, {
+				"countyCode": "360830",
+				"countyName": "永新县"
+			}, {
+				"countyCode": "360881",
+				"countyName": "井冈山市"
+			}, {
+				"countyCode": "360825",
+				"countyName": "永丰县"
+			}]
+		}, {
+			"cityCode": "360400",
+			"cityName": "九江市",
+			"county": [{
+				"countyCode": "360423",
+				"countyName": "武宁县"
+			}, {
+				"countyCode": "360421",
+				"countyName": "柴桑区"
+			}, {
+				"countyCode": "360429",
+				"countyName": "湖口县"
+			}, {
+				"countyCode": "360427",
+				"countyName": "庐山市"
+			}, {
+				"countyCode": "360426",
+				"countyName": "德安县"
+			}, {
+				"countyCode": "360428",
+				"countyName": "都昌县"
+			}, {
+				"countyCode": "360430",
+				"countyName": "彭泽县"
+			}, {
+				"countyCode": "360403",
+				"countyName": "浔阳区"
+			}, {
+				"countyCode": "360402",
+				"countyName": "濂溪区"
+			}, {
+				"countyCode": "360424",
+				"countyName": "修水县"
+			}, {
+				"countyCode": "360481",
+				"countyName": "瑞昌市"
+			}, {
+				"countyCode": "360425",
+				"countyName": "永修县"
+			}, {
+				"countyCode": "360482",
+				"countyName": "共青城市"
+			}]
+		}, {
+			"cityCode": "360600",
+			"cityName": "鹰潭市",
+			"county": [{
+				"countyCode": "360602",
+				"countyName": "月湖区"
+			}, {
+				"countyCode": "360622",
+				"countyName": "余江区"
+			}, {
+				"countyCode": "360681",
+				"countyName": "贵溪市"
+			}]
+		}, {
+			"cityCode": "360500",
+			"cityName": "新余市",
+			"county": [{
+				"countyCode": "360521",
+				"countyName": "分宜县"
+			}, {
+				"countyCode": "360502",
+				"countyName": "渝水区"
+			}]
+		}, {
+			"cityCode": "361100",
+			"cityName": "上饶市",
+			"county": [{
+				"countyCode": "361181",
+				"countyName": "德兴市"
+			}, {
+				"countyCode": "361102",
+				"countyName": "信州区"
+			}, {
+				"countyCode": "361130",
+				"countyName": "婺源县"
+			}, {
+				"countyCode": "361128",
+				"countyName": "鄱阳县"
+			}, {
+				"countyCode": "361129",
+				"countyName": "万年县"
+			}, {
+				"countyCode": "361123",
+				"countyName": "玉山县"
+			}, {
+				"countyCode": "361122",
+				"countyName": "广丰区"
+			}, {
+				"countyCode": "361124",
+				"countyName": "铅山县"
+			}, {
+				"countyCode": "361121",
+				"countyName": "上饶县"
+			}, {
+				"countyCode": "361127",
+				"countyName": "余干县"
+			}, {
+				"countyCode": "361126",
+				"countyName": "弋阳县"
+			}, {
+				"countyCode": "361125",
+				"countyName": "横峰县"
+			}]
+		}, {
+			"cityCode": "360300",
+			"cityName": "萍乡市",
+			"county": [{
+				"countyCode": "360322",
+				"countyName": "上栗县"
+			}, {
+				"countyCode": "360313",
+				"countyName": "湘东区"
+			}, {
+				"countyCode": "360302",
+				"countyName": "安源区"
+			}, {
+				"countyCode": "360323",
+				"countyName": "芦溪县"
+			}, {
+				"countyCode": "360321",
+				"countyName": "莲花县"
+			}]
+		}]
+	}, {
+		"provinceCode": "370000",
+		"provinceName": "山东省",
+		"city": [{
+			"cityCode": "370400",
+			"cityName": "枣庄市",
+			"county": [{
+				"countyCode": "370402",
+				"countyName": "市中区"
+			}, {
+				"countyCode": "370481",
+				"countyName": "滕州市"
+			}, {
+				"countyCode": "370406",
+				"countyName": "山亭区"
+			}, {
+				"countyCode": "370405",
+				"countyName": "台儿庄区"
+			}, {
+				"countyCode": "370403",
+				"countyName": "薛城区"
+			}, {
+				"countyCode": "370404",
+				"countyName": "峄城区"
+			}]
+		}, {
+			"cityCode": "371100",
+			"cityName": "日照市",
+			"county": [{
+				"countyCode": "371121",
+				"countyName": "五莲县"
+			}, {
+				"countyCode": "371102",
+				"countyName": "东港区"
+			}, {
+				"countyCode": "371122",
+				"countyName": "莒县"
+			}, {
+				"countyCode": "371103",
+				"countyName": "岚山区"
+			}]
+		}, {
+			"cityCode": "371700",
+			"cityName": "菏泽市",
+			"county": [{
+				"countyCode": "371722",
+				"countyName": "单县"
+			}, {
+				"countyCode": "371724",
+				"countyName": "巨野县"
+			}, {
+				"countyCode": "371721",
+				"countyName": "曹县"
+			}, {
+				"countyCode": "371702",
+				"countyName": "牡丹区"
+			}, {
+				"countyCode": "371727",
+				"countyName": "定陶区"
+			}, {
+				"countyCode": "371728",
+				"countyName": "东明县"
+			}, {
+				"countyCode": "371723",
+				"countyName": "成武县"
+			}, {
+				"countyCode": "371725",
+				"countyName": "郓城县"
+			}, {
+				"countyCode": "371726",
+				"countyName": "鄄城县"
+			}]
+		}, {
+			"cityCode": "371500",
+			"cityName": "聊城市",
+			"county": [{
+				"countyCode": "371524",
+				"countyName": "东阿县"
+			}, {
+				"countyCode": "371521",
+				"countyName": "阳谷县"
+			}, {
+				"countyCode": "371526",
+				"countyName": "高唐县"
+			}, {
+				"countyCode": "371502",
+				"countyName": "东昌府区"
+			}, {
+				"countyCode": "371581",
+				"countyName": "临清市"
+			}, {
+				"countyCode": "371522",
+				"countyName": "莘县"
+			}, {
+				"countyCode": "371525",
+				"countyName": "冠县"
+			}, {
+				"countyCode": "371523",
+				"countyName": "茌平县"
+			}]
+		}, {
+			"cityCode": "371000",
+			"cityName": "威海市",
+			"county": [{
+				"countyCode": "371002",
+				"countyName": "环翠区"
+			}, {
+				"countyCode": "371083",
+				"countyName": "乳山市"
+			}, {
+				"countyCode": "371082",
+				"countyName": "荣成市"
+			}, {
+				"countyCode": "371081",
+				"countyName": "文登区"
+			}]
+		}, {
+			"cityCode": "370300",
+			"cityName": "淄博市",
+			"county": [{
+				"countyCode": "370322",
+				"countyName": "高青县"
+			}, {
+				"countyCode": "370321",
+				"countyName": "桓台县"
+			}, {
+				"countyCode": "370305",
+				"countyName": "临淄区"
+			}, {
+				"countyCode": "370306",
+				"countyName": "周村区"
+			}, {
+				"countyCode": "370323",
+				"countyName": "沂源县"
+			}, {
+				"countyCode": "370304",
+				"countyName": "博山区"
+			}, {
+				"countyCode": "370302",
+				"countyName": "淄川区"
+			}, {
+				"countyCode": "370303",
+				"countyName": "张店区"
+			}]
+		}, {
+			"cityCode": "370800",
+			"cityName": "济宁市",
+			"county": [{
+				"countyCode": "370811",
+				"countyName": "任城区"
+			}, {
+				"countyCode": "370802",
+				"countyName": "市中区"
+			}, {
+				"countyCode": "370882",
+				"countyName": "兖州区"
+			}, {
+				"countyCode": "370830",
+				"countyName": "汶上县"
+			}, {
+				"countyCode": "370883",
+				"countyName": "邹城市"
+			}, {
+				"countyCode": "370828",
+				"countyName": "金乡县"
+			}, {
+				"countyCode": "370829",
+				"countyName": "嘉祥县"
+			}, {
+				"countyCode": "370826",
+				"countyName": "微山县"
+			}, {
+				"countyCode": "370881",
+				"countyName": "曲阜市"
+			}, {
+				"countyCode": "370827",
+				"countyName": "鱼台县"
+			}, {
+				"countyCode": "370831",
+				"countyName": "泗水县"
+			}, {
+				"countyCode": "370832",
+				"countyName": "梁山县"
+			}]
+		}, {
+			"cityCode": "371200",
+			"cityName": "莱芜市",
+			"county": [{
+				"countyCode": "371202",
+				"countyName": "莱城区"
+			}, {
+				"countyCode": "371203",
+				"countyName": "钢城区"
+			}]
+		}, {
+			"cityCode": "370500",
+			"cityName": "东营市",
+			"county": [{
+				"countyCode": "370523",
+				"countyName": "广饶县"
+			}, {
+				"countyCode": "370521",
+				"countyName": "垦利区"
+			}, {
+				"countyCode": "370502",
+				"countyName": "东营区"
+			}, {
+				"countyCode": "370522",
+				"countyName": "利津县"
+			}, {
+				"countyCode": "370503",
+				"countyName": "河口区"
+			}]
+		}, {
+			"cityCode": "371600",
+			"cityName": "滨州市",
+			"county": [{
+				"countyCode": "371625",
+				"countyName": "博兴县"
+			}, {
+				"countyCode": "371622",
+				"countyName": "阳信县"
+			}, {
+				"countyCode": "371621",
+				"countyName": "惠民县"
+			}, {
+				"countyCode": "371626",
+				"countyName": "邹平市"
+			}, {
+				"countyCode": "371602",
+				"countyName": "滨城区"
+			}, {
+				"countyCode": "371623",
+				"countyName": "无棣县"
+			}, {
+				"countyCode": "371624",
+				"countyName": "沾化区"
+			}]
+		}, {
+			"cityCode": "371300",
+			"cityName": "临沂市",
+			"county": [{
+				"countyCode": "371328",
+				"countyName": "蒙阴县"
+			}, {
+				"countyCode": "371302",
+				"countyName": "兰山区"
+			}, {
+				"countyCode": "371329",
+				"countyName": "临沭县"
+			}, {
+				"countyCode": "371321",
+				"countyName": "沂南县"
+			}, {
+				"countyCode": "371311",
+				"countyName": "罗庄区"
+			}, {
+				"countyCode": "371325",
+				"countyName": "费县"
+			}, {
+				"countyCode": "371326",
+				"countyName": "平邑县"
+			}, {
+				"countyCode": "371327",
+				"countyName": "莒南县"
+			}, {
+				"countyCode": "371312",
+				"countyName": "河东区"
+			}, {
+				"countyCode": "371324",
+				"countyName": "兰陵县"
+			}, {
+				"countyCode": "371323",
+				"countyName": "沂水县"
+			}, {
+				"countyCode": "371322",
+				"countyName": "郯城县"
+			}]
+		}, {
+			"cityCode": "370200",
+			"cityName": "青岛市",
+			"county": [{
+				"countyCode": "370211",
+				"countyName": "黄岛区"
+			}, {
+				"countyCode": "370203",
+				"countyName": "市北区"
+			}, {
+				"countyCode": "370281",
+				"countyName": "胶州市"
+			}, {
+				"countyCode": "370212",
+				"countyName": "崂山区"
+			}, {
+				"countyCode": "370202",
+				"countyName": "市南区"
+			}, {
+				"countyCode": "370282",
+				"countyName": "即墨区"
+			}, {
+				"countyCode": "370205",
+				"countyName": "四方区"
+			}, {
+				"countyCode": "370214",
+				"countyName": "城阳区"
+			}, {
+				"countyCode": "370283",
+				"countyName": "平度市"
+			}, {
+				"countyCode": "370213",
+				"countyName": "李沧区"
+			}, {
+				"countyCode": "370285",
+				"countyName": "莱西市"
+			}]
+		}, {
+			"cityCode": "370100",
+			"cityName": "济南市",
+			"county": [{
+				"countyCode": "370124",
+				"countyName": "平阴县"
+			}, {
+				"countyCode": "370103",
+				"countyName": "市中区"
+			}, {
+				"countyCode": "370181",
+				"countyName": "章丘区"
+			}, {
+				"countyCode": "370126",
+				"countyName": "商河县"
+			}, {
+				"countyCode": "370125",
+				"countyName": "济阳区"
+			}, {
+				"countyCode": "370113",
+				"countyName": "长清区"
+			}, {
+				"countyCode": "370102",
+				"countyName": "历下区"
+			}, {
+				"countyCode": "370112",
+				"countyName": "历城区"
+			}, {
+				"countyCode": "370105",
+				"countyName": "天桥区"
+			}, {
+				"countyCode": "370104",
+				"countyName": "槐荫区"
+			}]
+		}, {
+			"cityCode": "371400",
+			"cityName": "德州市",
+			"county": [{
+				"countyCode": "371481",
+				"countyName": "乐陵市"
+			}, {
+				"countyCode": "371423",
+				"countyName": "庆云县"
+			}, {
+				"countyCode": "371421",
+				"countyName": "陵城区"
+			}, {
+				"countyCode": "371482",
+				"countyName": "禹城市"
+			}, {
+				"countyCode": "371424",
+				"countyName": "临邑县"
+			}, {
+				"countyCode": "371426",
+				"countyName": "平原县"
+			}, {
+				"countyCode": "371425",
+				"countyName": "齐河县"
+			}, {
+				"countyCode": "371427",
+				"countyName": "夏津县"
+			}, {
+				"countyCode": "371422",
+				"countyName": "宁津县"
+			}, {
+				"countyCode": "371428",
+				"countyName": "武城县"
+			}, {
+				"countyCode": "371402",
+				"countyName": "德城区"
+			}]
+		}, {
+			"cityCode": "370900",
+			"cityName": "泰安市",
+			"county": [{
+				"countyCode": "370911",
+				"countyName": "岱岳区"
+			}, {
+				"countyCode": "370923",
+				"countyName": "东平县"
+			}, {
+				"countyCode": "370983",
+				"countyName": "肥城市"
+			}, {
+				"countyCode": "370921",
+				"countyName": "宁阳县"
+			}, {
+				"countyCode": "370982",
+				"countyName": "新泰市"
+			}, {
+				"countyCode": "370902",
+				"countyName": "泰山区"
+			}]
+		}, {
+			"cityCode": "370600",
+			"cityName": "烟台市",
+			"county": [{
+				"countyCode": "370686",
+				"countyName": "栖霞市"
+			}, {
+				"countyCode": "370634",
+				"countyName": "长岛县"
+			}, {
+				"countyCode": "370613",
+				"countyName": "莱山区"
+			}, {
+				"countyCode": "370612",
+				"countyName": "牟平区"
+			}, {
+				"countyCode": "370681",
+				"countyName": "龙口市"
+			}, {
+				"countyCode": "370683",
+				"countyName": "莱州市"
+			}, {
+				"countyCode": "370602",
+				"countyName": "芝罘区"
+			}, {
+				"countyCode": "370682",
+				"countyName": "莱阳市"
+			}, {
+				"countyCode": "370685",
+				"countyName": "招远市"
+			}, {
+				"countyCode": "370611",
+				"countyName": "福山区"
+			}, {
+				"countyCode": "370684",
+				"countyName": "蓬莱市"
+			}, {
+				"countyCode": "370687",
+				"countyName": "海阳市"
+			}]
+		}, {
+			"cityCode": "370700",
+			"cityName": "潍坊市",
+			"county": [{
+				"countyCode": "370781",
+				"countyName": "青州市"
+			}, {
+				"countyCode": "370782",
+				"countyName": "诸城市"
+			}, {
+				"countyCode": "370703",
+				"countyName": "寒亭区"
+			}, {
+				"countyCode": "370785",
+				"countyName": "高密市"
+			}, {
+				"countyCode": "370702",
+				"countyName": "潍城区"
+			}, {
+				"countyCode": "370725",
+				"countyName": "昌乐县"
+			}, {
+				"countyCode": "370704",
+				"countyName": "坊子区"
+			}, {
+				"countyCode": "370784",
+				"countyName": "安丘市"
+			}, {
+				"countyCode": "370705",
+				"countyName": "奎文区"
+			}, {
+				"countyCode": "370724",
+				"countyName": "临朐县"
+			}, {
+				"countyCode": "370786",
+				"countyName": "昌邑市"
+			}, {
+				"countyCode": "370783",
+				"countyName": "寿光市"
+			}]
+		}]
+	}, {
+		"provinceCode": "410000",
+		"provinceName": "河南省",
+		"city": [{
+			"cityCode": "411500",
+			"cityName": "信阳市",
+			"county": [{
+				"countyCode": "411523",
+				"countyName": "新县"
+			}, {
+				"countyCode": "411525",
+				"countyName": "固始县"
+			}, {
+				"countyCode": "411524",
+				"countyName": "商城县"
+			}, {
+				"countyCode": "411528",
+				"countyName": "息县"
+			}, {
+				"countyCode": "411502",
+				"countyName": "浉河区"
+			}, {
+				"countyCode": "411521",
+				"countyName": "罗山县"
+			}, {
+				"countyCode": "411522",
+				"countyName": "光山县"
+			}, {
+				"countyCode": "411503",
+				"countyName": "平桥区"
+			}, {
+				"countyCode": "411526",
+				"countyName": "潢川县"
+			}, {
+				"countyCode": "411527",
+				"countyName": "淮滨县"
+			}]
+		}, {
+			"cityCode": "410300",
+			"cityName": "洛阳市",
+			"county": [{
+				"countyCode": "410323",
+				"countyName": "新安县"
+			}, {
+				"countyCode": "410306",
+				"countyName": "吉利区"
+			}, {
+				"countyCode": "410328",
+				"countyName": "洛宁县"
+			}, {
+				"countyCode": "410325",
+				"countyName": "嵩县"
+			}, {
+				"countyCode": "410302",
+				"countyName": "老城区"
+			}, {
+				"countyCode": "410322",
+				"countyName": "孟津县"
+			}, {
+				"countyCode": "410311",
+				"countyName": "洛龙区"
+			}, {
+				"countyCode": "410304",
+				"countyName": "瀍河回族区"
+			}, {
+				"countyCode": "410327",
+				"countyName": "宜阳县"
+			}, {
+				"countyCode": "410381",
+				"countyName": "偃师市"
+			}, {
+				"countyCode": "410326",
+				"countyName": "汝阳县"
+			}, {
+				"countyCode": "410329",
+				"countyName": "伊川县"
+			}, {
+				"countyCode": "410305",
+				"countyName": "涧西区"
+			}, {
+				"countyCode": "410324",
+				"countyName": "栾川县"
+			}, {
+				"countyCode": "410303",
+				"countyName": "西工区"
+			}]
+		}, {
+			"cityCode": "411200",
+			"cityName": "三门峡市",
+			"county": [{
+				"countyCode": "411222",
+				"countyName": "陕州区"
+			}, {
+				"countyCode": "411281",
+				"countyName": "义马市"
+			}, {
+				"countyCode": "411282",
+				"countyName": "灵宝市"
+			}, {
+				"countyCode": "411221",
+				"countyName": "渑池县"
+			}, {
+				"countyCode": "411202",
+				"countyName": "湖滨区"
+			}, {
+				"countyCode": "411224",
+				"countyName": "卢氏县"
+			}]
+		}, {
+			"cityCode": "411700",
+			"cityName": "驻马店市",
+			"county": [{
+				"countyCode": "411729",
+				"countyName": "新蔡县"
+			}, {
+				"countyCode": "411728",
+				"countyName": "遂平县"
+			}, {
+				"countyCode": "411727",
+				"countyName": "汝南县"
+			}, {
+				"countyCode": "411724",
+				"countyName": "正阳县"
+			}, {
+				"countyCode": "411723",
+				"countyName": "平舆县"
+			}, {
+				"countyCode": "411725",
+				"countyName": "确山县"
+			}, {
+				"countyCode": "411722",
+				"countyName": "上蔡县"
+			}, {
+				"countyCode": "411702",
+				"countyName": "驿城区"
+			}, {
+				"countyCode": "411721",
+				"countyName": "西平县"
+			}, {
+				"countyCode": "411726",
+				"countyName": "泌阳县"
+			}]
+		}, {
+			"cityCode": "410500",
+			"cityName": "安阳市",
+			"county": [{
+				"countyCode": "410505",
+				"countyName": "殷都区"
+			}, {
+				"countyCode": "410527",
+				"countyName": "内黄县"
+			}, {
+				"countyCode": "410522",
+				"countyName": "安阳县"
+			}, {
+				"countyCode": "410526",
+				"countyName": "滑县"
+			}, {
+				"countyCode": "410502",
+				"countyName": "文峰区"
+			}, {
+				"countyCode": "410503",
+				"countyName": "北关区"
+			}, {
+				"countyCode": "410506",
+				"countyName": "龙安区"
+			}, {
+				"countyCode": "410523",
+				"countyName": "汤阴县"
+			}, {
+				"countyCode": "410581",
+				"countyName": "林州市"
+			}]
+		}, {
+			"cityCode": "411300",
+			"cityName": "南阳市",
+			"county": [{
+				"countyCode": "411325",
+				"countyName": "内乡县"
+			}, {
+				"countyCode": "411328",
+				"countyName": "唐河县"
+			}, {
+				"countyCode": "411381",
+				"countyName": "邓州市"
+			}, {
+				"countyCode": "411322",
+				"countyName": "方城县"
+			}, {
+				"countyCode": "411330",
+				"countyName": "桐柏县"
+			}, {
+				"countyCode": "411321",
+				"countyName": "南召县"
+			}, {
+				"countyCode": "411323",
+				"countyName": "西峡县"
+			}, {
+				"countyCode": "411327",
+				"countyName": "社旗县"
+			}, {
+				"countyCode": "411302",
+				"countyName": "宛城区"
+			}, {
+				"countyCode": "411303",
+				"countyName": "卧龙区"
+			}, {
+				"countyCode": "411326",
+				"countyName": "淅川县"
+			}, {
+				"countyCode": "411329",
+				"countyName": "新野县"
+			}, {
+				"countyCode": "411324",
+				"countyName": "镇平县"
+			}]
+		}, {
+			"cityCode": "410700",
+			"cityName": "新乡市",
+			"county": [{
+				"countyCode": "410711",
+				"countyName": "牧野区"
+			}, {
+				"countyCode": "410721",
+				"countyName": "新乡县"
+			}, {
+				"countyCode": "410704",
+				"countyName": "凤泉区"
+			}, {
+				"countyCode": "410781",
+				"countyName": "卫辉市"
+			}, {
+				"countyCode": "410727",
+				"countyName": "封丘县"
+			}, {
+				"countyCode": "410702",
+				"countyName": "红旗区"
+			}, {
+				"countyCode": "410726",
+				"countyName": "延津县"
+			}, {
+				"countyCode": "410703",
+				"countyName": "卫滨区"
+			}, {
+				"countyCode": "410782",
+				"countyName": "辉县市"
+			}, {
+				"countyCode": "410728",
+				"countyName": "长垣县"
+			}, {
+				"countyCode": "410724",
+				"countyName": "获嘉县"
+			}, {
+				"countyCode": "410725",
+				"countyName": "原阳县"
+			}]
+		}, {
+			"cityCode": "410200",
+			"cityName": "开封市",
+			"county": [{
+				"countyCode": "410205",
+				"countyName": "禹王台区"
+			}, {
+				"countyCode": "410222",
+				"countyName": "通许县"
+			}, {
+				"countyCode": "410225",
+				"countyName": "兰考县"
+			}, {
+				"countyCode": "410223",
+				"countyName": "尉氏县"
+			}, {
+				"countyCode": "410203",
+				"countyName": "顺河回族区"
+			}, {
+				"countyCode": "410204",
+				"countyName": "鼓楼区"
+			}, {
+				"countyCode": "410224",
+				"countyName": "祥符区"
+			}, {
+				"countyCode": "410221",
+				"countyName": "杞县"
+			}, {
+				"countyCode": "410211",
+				"countyName": "金明区"
+			}, {
+				"countyCode": "410202",
+				"countyName": "龙亭区"
+			}]
+		}, {
+			"cityCode": "411400",
+			"cityName": "商丘市",
+			"county": [{
+				"countyCode": "411402",
+				"countyName": "梁园区"
+			}, {
+				"countyCode": "411422",
+				"countyName": "睢县"
+			}, {
+				"countyCode": "411423",
+				"countyName": "宁陵县"
+			}, {
+				"countyCode": "411421",
+				"countyName": "民权县"
+			}, {
+				"countyCode": "411424",
+				"countyName": "柘城县"
+			}, {
+				"countyCode": "411425",
+				"countyName": "虞城县"
+			}, {
+				"countyCode": "411426",
+				"countyName": "夏邑县"
+			}, {
+				"countyCode": "411481",
+				"countyName": "永城市"
+			}, {
+				"countyCode": "411403",
+				"countyName": "睢阳区"
+			}]
+		}, {
+			"cityCode": "411000",
+			"cityName": "许昌市",
+			"county": [{
+				"countyCode": "411024",
+				"countyName": "鄢陵县"
+			}, {
+				"countyCode": "411082",
+				"countyName": "长葛市"
+			}, {
+				"countyCode": "411002",
+				"countyName": "魏都区"
+			}, {
+				"countyCode": "411081",
+				"countyName": "禹州市"
+			}, {
+				"countyCode": "411025",
+				"countyName": "襄城县"
+			}, {
+				"countyCode": "411023",
+				"countyName": "建安区"
+			}]
+		}, {
+			"cityCode": "410100",
+			"cityName": "郑州市",
+			"county": [{
+				"countyCode": "410185",
+				"countyName": "登封市"
+			}, {
+				"countyCode": "410182",
+				"countyName": "荥阳市"
+			}, {
+				"countyCode": "410104",
+				"countyName": "管城回族区"
+			}, {
+				"countyCode": "410108",
+				"countyName": "惠济区"
+			}, {
+				"countyCode": "410122",
+				"countyName": "中牟县"
+			}, {
+				"countyCode": "410105",
+				"countyName": "金水区"
+			}, {
+				"countyCode": "410183",
+				"countyName": "新密市"
+			}, {
+				"countyCode": "410184",
+				"countyName": "新郑市"
+			}, {
+				"countyCode": "410181",
+				"countyName": "巩义市"
+			}, {
+				"countyCode": "410106",
+				"countyName": "上街区"
+			}, {
+				"countyCode": "410103",
+				"countyName": "二七区"
+			}, {
+				"countyCode": "410102",
+				"countyName": "中原区"
+			}]
+		}, {
+			"cityCode": "419001",
+			"cityName": "济源市",
+			"county": [{
+				"countyCode": "419001-1",
+				"countyName": "济源市"
+			}]
+		}, {
+			"cityCode": "410400",
+			"cityName": "平顶山市",
+			"county": [{
+				"countyCode": "410481",
+				"countyName": "舞钢市"
+			}, {
+				"countyCode": "410421",
+				"countyName": "宝丰县"
+			}, {
+				"countyCode": "410482",
+				"countyName": "汝州市"
+			}, {
+				"countyCode": "410404",
+				"countyName": "石龙区"
+			}, {
+				"countyCode": "410403",
+				"countyName": "卫东区"
+			}, {
+				"countyCode": "410411",
+				"countyName": "湛河区"
+			}, {
+				"countyCode": "410402",
+				"countyName": "新华区"
+			}, {
+				"countyCode": "410423",
+				"countyName": "鲁山县"
+			}, {
+				"countyCode": "410422",
+				"countyName": "叶县"
+			}, {
+				"countyCode": "410425",
+				"countyName": "郏县"
+			}]
+		}, {
+			"cityCode": "410900",
+			"cityName": "濮阳市",
+			"county": [{
+				"countyCode": "410902",
+				"countyName": "华龙区"
+			}, {
+				"countyCode": "410922",
+				"countyName": "清丰县"
+			}, {
+				"countyCode": "410926",
+				"countyName": "范县"
+			}, {
+				"countyCode": "410927",
+				"countyName": "台前县"
+			}, {
+				"countyCode": "410923",
+				"countyName": "南乐县"
+			}, {
+				"countyCode": "410928",
+				"countyName": "濮阳县"
+			}]
+		}, {
+			"cityCode": "410600",
+			"cityName": "鹤壁市",
+			"county": [{
+				"countyCode": "410603",
+				"countyName": "山城区"
+			}, {
+				"countyCode": "410611",
+				"countyName": "淇滨区"
+			}, {
+				"countyCode": "410602",
+				"countyName": "鹤山区"
+			}, {
+				"countyCode": "410621",
+				"countyName": "浚县"
+			}, {
+				"countyCode": "410622",
+				"countyName": "淇县"
+			}]
+		}, {
+			"cityCode": "411100",
+			"cityName": "漯河市",
+			"county": [{
+				"countyCode": "411102",
+				"countyName": "源汇区"
+			}, {
+				"countyCode": "411122",
+				"countyName": "临颍县"
+			}, {
+				"countyCode": "411103",
+				"countyName": "郾城区"
+			}, {
+				"countyCode": "411104",
+				"countyName": "召陵区"
+			}, {
+				"countyCode": "411121",
+				"countyName": "舞阳县"
+			}]
+		}, {
+			"cityCode": "411600",
+			"cityName": "周口市",
+			"county": [{
+				"countyCode": "411626",
+				"countyName": "淮阳县"
+			}, {
+				"countyCode": "411681",
+				"countyName": "项城市"
+			}, {
+				"countyCode": "411624",
+				"countyName": "沈丘县"
+			}, {
+				"countyCode": "411622",
+				"countyName": "西华县"
+			}, {
+				"countyCode": "411627",
+				"countyName": "太康县"
+			}, {
+				"countyCode": "411623",
+				"countyName": "商水县"
+			}, {
+				"countyCode": "411628",
+				"countyName": "鹿邑县"
+			}, {
+				"countyCode": "411602",
+				"countyName": "川汇区"
+			}, {
+				"countyCode": "411621",
+				"countyName": "扶沟县"
+			}, {
+				"countyCode": "411625",
+				"countyName": "郸城县"
+			}]
+		}, {
+			"cityCode": "410800",
+			"cityName": "焦作市",
+			"county": [{
+				"countyCode": "410883",
+				"countyName": "孟州市"
+			}, {
+				"countyCode": "410823",
+				"countyName": "武陟县"
+			}, {
+				"countyCode": "410882",
+				"countyName": "沁阳市"
+			}, {
+				"countyCode": "410822",
+				"countyName": "博爱县"
+			}, {
+				"countyCode": "410821",
+				"countyName": "修武县"
+			}, {
+				"countyCode": "410825",
+				"countyName": "温县"
+			}, {
+				"countyCode": "410804",
+				"countyName": "马村区"
+			}, {
+				"countyCode": "410802",
+				"countyName": "解放区"
+			}, {
+				"countyCode": "410811",
+				"countyName": "山阳区"
+			}, {
+				"countyCode": "410803",
+				"countyName": "中站区"
+			}]
+		}]
+	}, {
+		"provinceCode": "420000",
+		"provinceName": "湖北省",
+		"city": [{
+			"cityCode": "429004",
+			"cityName": "仙桃市",
+			"county": [{
+				"countyCode": "429004-1",
+				"countyName": "仙桃市"
+			}]
+		}, {
+			"cityCode": "421200",
+			"cityName": "咸宁市",
+			"county": [{
+				"countyCode": "421223",
+				"countyName": "崇阳县"
+			}, {
+				"countyCode": "421224",
+				"countyName": "通山县"
+			}, {
+				"countyCode": "421202",
+				"countyName": "咸安区"
+			}, {
+				"countyCode": "421222",
+				"countyName": "通城县"
+			}, {
+				"countyCode": "421221",
+				"countyName": "嘉鱼县"
+			}, {
+				"countyCode": "421281",
+				"countyName": "赤壁市"
+			}]
+		}, {
+			"cityCode": "421300",
+			"cityName": "随州市",
+			"county": [{
+				"countyCode": "421381",
+				"countyName": "广水市"
+			}, {
+				"countyCode": "421303",
+				"countyName": "曾都区"
+			}, {
+				"countyCode": "421321",
+				"countyName": "随县"
+			}]
+		}, {
+			"cityCode": "422800",
+			"cityName": "恩施土家族苗族自治州",
+			"county": [{
+				"countyCode": "422828",
+				"countyName": "鹤峰县"
+			}, {
+				"countyCode": "422825",
+				"countyName": "宣恩县"
+			}, {
+				"countyCode": "422801",
+				"countyName": "恩施市"
+			}, {
+				"countyCode": "422822",
+				"countyName": "建始县"
+			}, {
+				"countyCode": "422823",
+				"countyName": "巴东县"
+			}, {
+				"countyCode": "422826",
+				"countyName": "咸丰县"
+			}, {
+				"countyCode": "422827",
+				"countyName": "来凤县"
+			}, {
+				"countyCode": "422802",
+				"countyName": "利川市"
+			}]
+		}, {
+			"cityCode": "420900",
+			"cityName": "孝感市",
+			"county": [{
+				"countyCode": "420902",
+				"countyName": "孝南区"
+			}, {
+				"countyCode": "420981",
+				"countyName": "应城市"
+			}, {
+				"countyCode": "420923",
+				"countyName": "云梦县"
+			}, {
+				"countyCode": "420982",
+				"countyName": "安陆市"
+			}, {
+				"countyCode": "420922",
+				"countyName": "大悟县"
+			}, {
+				"countyCode": "420921",
+				"countyName": "孝昌县"
+			}, {
+				"countyCode": "420984",
+				"countyName": "汉川市"
+			}]
+		}, {
+			"cityCode": "420100",
+			"cityName": "武汉市",
+			"county": [{
+				"countyCode": "420104",
+				"countyName": "硚口区"
+			}, {
+				"countyCode": "420107",
+				"countyName": "青山区"
+			}, {
+				"countyCode": "420116",
+				"countyName": "黄陂区"
+			}, {
+				"countyCode": "420102",
+				"countyName": "江岸区"
+			}, {
+				"countyCode": "420115",
+				"countyName": "江夏区"
+			}, {
+				"countyCode": "420114",
+				"countyName": "蔡甸区"
+			}, {
+				"countyCode": "420106",
+				"countyName": "武昌区"
+			}, {
+				"countyCode": "420112",
+				"countyName": "东西湖区"
+			}, {
+				"countyCode": "420105",
+				"countyName": "汉阳区"
+			}, {
+				"countyCode": "420113",
+				"countyName": "汉南区"
+			}, {
+				"countyCode": "420111",
+				"countyName": "洪山区"
+			}, {
+				"countyCode": "420103",
+				"countyName": "江汉区"
+			}, {
+				"countyCode": "420117",
+				"countyName": "新洲区"
+			}]
+		}, {
+			"cityCode": "420500",
+			"cityName": "宜昌市",
+			"county": [{
+				"countyCode": "420502",
+				"countyName": "西陵区"
+			}, {
+				"countyCode": "420505",
+				"countyName": "猇亭区"
+			}, {
+				"countyCode": "420503",
+				"countyName": "伍家岗区"
+			}, {
+				"countyCode": "420581",
+				"countyName": "宜都市"
+			}, {
+				"countyCode": "420504",
+				"countyName": "点军区"
+			}, {
+				"countyCode": "420526",
+				"countyName": "兴山县"
+			}, {
+				"countyCode": "420525",
+				"countyName": "远安县"
+			}, {
+				"countyCode": "420527",
+				"countyName": "秭归县"
+			}, {
+				"countyCode": "420583",
+				"countyName": "枝江市"
+			}, {
+				"countyCode": "420529",
+				"countyName": "五峰土家族自治县"
+			}, {
+				"countyCode": "420582",
+				"countyName": "当阳市"
+			}, {
+				"countyCode": "420506",
+				"countyName": "夷陵区"
+			}, {
+				"countyCode": "420528",
+				"countyName": "长阳土家族自治县"
+			}]
+		}, {
+			"cityCode": "420800",
+			"cityName": "荆门市",
+			"county": [{
+				"countyCode": "420804",
+				"countyName": "掇刀区"
+			}, {
+				"countyCode": "420822",
+				"countyName": "沙洋县"
+			}, {
+				"countyCode": "420802",
+				"countyName": "东宝区"
+			}, {
+				"countyCode": "420881",
+				"countyName": "钟祥市"
+			}, {
+				"countyCode": "420821",
+				"countyName": "京山市"
+			}]
+		}, {
+			"cityCode": "429006",
+			"cityName": "天门市",
+			"county": [{
+				"countyCode": "429006-1",
+				"countyName": "天门市"
+			}]
+		}, {
+			"cityCode": "421000",
+			"cityName": "荆州市",
+			"county": [{
+				"countyCode": "421003",
+				"countyName": "荆州区"
+			}, {
+				"countyCode": "421023",
+				"countyName": "监利县"
+			}, {
+				"countyCode": "421087",
+				"countyName": "松滋市"
+			}, {
+				"countyCode": "421022",
+				"countyName": "公安县"
+			}, {
+				"countyCode": "421002",
+				"countyName": "沙市区"
+			}, {
+				"countyCode": "421024",
+				"countyName": "江陵县"
+			}, {
+				"countyCode": "421081",
+				"countyName": "石首市"
+			}, {
+				"countyCode": "421083",
+				"countyName": "洪湖市"
+			}]
+		}, {
+			"cityCode": "420600",
+			"cityName": "襄阳市",
+			"county": [{
+				"countyCode": "420625",
+				"countyName": "谷城县"
+			}, {
+				"countyCode": "420607",
+				"countyName": "襄州区"
+			}, {
+				"countyCode": "420606",
+				"countyName": "樊城区"
+			}, {
+				"countyCode": "420602",
+				"countyName": "襄城区"
+			}, {
+				"countyCode": "420626",
+				"countyName": "保康县"
+			}, {
+				"countyCode": "420624",
+				"countyName": "南漳县"
+			}, {
+				"countyCode": "420683",
+				"countyName": "枣阳市"
+			}, {
+				"countyCode": "420682",
+				"countyName": "老河口市"
+			}, {
+				"countyCode": "420684",
+				"countyName": "宜城市"
+			}]
+		}, {
+			"cityCode": "420700",
+			"cityName": "鄂州市",
+			"county": [{
+				"countyCode": "420702",
+				"countyName": "梁子湖区"
+			}, {
+				"countyCode": "420703",
+				"countyName": "华容区"
+			}, {
+				"countyCode": "420704",
+				"countyName": "鄂城区"
+			}]
+		}, {
+			"cityCode": "429021",
+			"cityName": "神农架林区",
+			"county": [{
+				"countyCode": "429021-1",
+				"countyName": "神农架林区"
+			}]
+		}, {
+			"cityCode": "420200",
+			"cityName": "黄石市",
+			"county": [{
+				"countyCode": "420202",
+				"countyName": "黄石港区"
+			}, {
+				"countyCode": "420281",
+				"countyName": "大冶市"
+			}, {
+				"countyCode": "420205",
+				"countyName": "铁山区"
+			}, {
+				"countyCode": "420222",
+				"countyName": "阳新县"
+			}, {
+				"countyCode": "420203",
+				"countyName": "西塞山区"
+			}, {
+				"countyCode": "420204",
+				"countyName": "下陆区"
+			}]
+		}, {
+			"cityCode": "421100",
+			"cityName": "黄冈市",
+			"county": [{
+				"countyCode": "421181",
+				"countyName": "麻城市"
+			}, {
+				"countyCode": "421125",
+				"countyName": "浠水县"
+			}, {
+				"countyCode": "421121",
+				"countyName": "团风县"
+			}, {
+				"countyCode": "421182",
+				"countyName": "武穴市"
+			}, {
+				"countyCode": "421124",
+				"countyName": "英山县"
+			}, {
+				"countyCode": "421122",
+				"countyName": "红安县"
+			}, {
+				"countyCode": "421102",
+				"countyName": "黄州区"
+			}, {
+				"countyCode": "421123",
+				"countyName": "罗田县"
+			}, {
+				"countyCode": "421126",
+				"countyName": "蕲春县"
+			}, {
+				"countyCode": "421127",
+				"countyName": "黄梅县"
+			}]
+		}, {
+			"cityCode": "420300",
+			"cityName": "十堰市",
+			"county": [{
+				"countyCode": "420322",
+				"countyName": "郧西县"
+			}, {
+				"countyCode": "420321",
+				"countyName": "郧阳区"
+			}, {
+				"countyCode": "420323",
+				"countyName": "竹山县"
+			}, {
+				"countyCode": "420324",
+				"countyName": "竹溪县"
+			}, {
+				"countyCode": "420325",
+				"countyName": "房县"
+			}, {
+				"countyCode": "420302",
+				"countyName": "茅箭区"
+			}, {
+				"countyCode": "420303",
+				"countyName": "张湾区"
+			}, {
+				"countyCode": "420381",
+				"countyName": "丹江口市"
+			}]
+		}, {
+			"cityCode": "429005",
+			"cityName": "潜江市",
+			"county": [{
+				"countyCode": "429005-1",
+				"countyName": "潜江市"
+			}]
+		}]
+	}, {
+		"provinceCode": "430000",
+		"provinceName": "湖南省",
+		"city": [{
+			"cityCode": "430300",
+			"cityName": "湘潭市",
+			"county": [{
+				"countyCode": "430381",
+				"countyName": "湘乡市"
+			}, {
+				"countyCode": "430302",
+				"countyName": "雨湖区"
+			}, {
+				"countyCode": "430382",
+				"countyName": "韶山市"
+			}, {
+				"countyCode": "430321",
+				"countyName": "湘潭县"
+			}, {
+				"countyCode": "430304",
+				"countyName": "岳塘区"
+			}]
+		}, {
+			"cityCode": "430600",
+			"cityName": "岳阳市",
+			"county": [{
+				"countyCode": "430623",
+				"countyName": "华容县"
+			}, {
+				"countyCode": "430682",
+				"countyName": "临湘市"
+			}, {
+				"countyCode": "430603",
+				"countyName": "云溪区"
+			}, {
+				"countyCode": "430681",
+				"countyName": "汨罗市"
+			}, {
+				"countyCode": "430624",
+				"countyName": "湘阴县"
+			}, {
+				"countyCode": "430602",
+				"countyName": "岳阳楼区"
+			}, {
+				"countyCode": "430626",
+				"countyName": "平江县"
+			}, {
+				"countyCode": "430611",
+				"countyName": "君山区"
+			}, {
+				"countyCode": "430621",
+				"countyName": "岳阳县"
+			}]
+		}, {
+			"cityCode": "430100",
+			"cityName": "长沙市",
+			"county": [{
+				"countyCode": "430111",
+				"countyName": "雨花区"
+			}, {
+				"countyCode": "430103",
+				"countyName": "天心区"
+			}, {
+				"countyCode": "430104",
+				"countyName": "岳麓区"
+			}, {
+				"countyCode": "430181",
+				"countyName": "浏阳市"
+			}, {
+				"countyCode": "430124",
+				"countyName": "宁乡市"
+			}, {
+				"countyCode": "430112",
+				"countyName": "望城区"
+			}, {
+				"countyCode": "430121",
+				"countyName": "长沙县"
+			}, {
+				"countyCode": "430105",
+				"countyName": "开福区"
+			}, {
+				"countyCode": "430102",
+				"countyName": "芙蓉区"
+			}]
+		}, {
+			"cityCode": "430200",
+			"cityName": "株洲市",
+			"county": [{
+				"countyCode": "430202",
+				"countyName": "荷塘区"
+			}, {
+				"countyCode": "430225",
+				"countyName": "炎陵县"
+			}, {
+				"countyCode": "430281",
+				"countyName": "醴陵市"
+			}, {
+				"countyCode": "430203",
+				"countyName": "芦淞区"
+			}, {
+				"countyCode": "430224",
+				"countyName": "茶陵县"
+			}, {
+				"countyCode": "430211",
+				"countyName": "天元区"
+			}, {
+				"countyCode": "430221",
+				"countyName": "株洲县"
+			}, {
+				"countyCode": "430223",
+				"countyName": "攸县"
+			}, {
+				"countyCode": "430204",
+				"countyName": "石峰区"
+			}]
+		}, {
+			"cityCode": "431000",
+			"cityName": "郴州市",
+			"county": [{
+				"countyCode": "431028",
+				"countyName": "安仁县"
+			}, {
+				"countyCode": "431021",
+				"countyName": "桂阳县"
+			}, {
+				"countyCode": "431002",
+				"countyName": "北湖区"
+			}, {
+				"countyCode": "431027",
+				"countyName": "桂东县"
+			}, {
+				"countyCode": "431024",
+				"countyName": "嘉禾县"
+			}, {
+				"countyCode": "431026",
+				"countyName": "汝城县"
+			}, {
+				"countyCode": "431023",
+				"countyName": "永兴县"
+			}, {
+				"countyCode": "431025",
+				"countyName": "临武县"
+			}, {
+				"countyCode": "431022",
+				"countyName": "宜章县"
+			}, {
+				"countyCode": "431003",
+				"countyName": "苏仙区"
+			}, {
+				"countyCode": "431081",
+				"countyName": "资兴市"
+			}]
+		}, {
+			"cityCode": "431200",
+			"cityName": "怀化市",
+			"county": [{
+				"countyCode": "431223",
+				"countyName": "辰溪县"
+			}, {
+				"countyCode": "431202",
+				"countyName": "鹤城区"
+			}, {
+				"countyCode": "431224",
+				"countyName": "溆浦县"
+			}, {
+				"countyCode": "431226",
+				"countyName": "麻阳苗族自治县"
+			}, {
+				"countyCode": "431229",
+				"countyName": "靖州苗族侗族自治县"
+			}, {
+				"countyCode": "431230",
+				"countyName": "通道侗族自治县"
+			}, {
+				"countyCode": "431281",
+				"countyName": "洪江市"
+			}, {
+				"countyCode": "431228",
+				"countyName": "芷江侗族自治县"
+			}, {
+				"countyCode": "431221",
+				"countyName": "中方县"
+			}, {
+				"countyCode": "431225",
+				"countyName": "会同县"
+			}, {
+				"countyCode": "431227",
+				"countyName": "新晃侗族自治县"
+			}, {
+				"countyCode": "431222",
+				"countyName": "沅陵县"
+			}]
+		}, {
+			"cityCode": "431100",
+			"cityName": "永州市",
+			"county": [{
+				"countyCode": "431123",
+				"countyName": "双牌县"
+			}, {
+				"countyCode": "431125",
+				"countyName": "江永县"
+			}, {
+				"countyCode": "431102",
+				"countyName": "零陵区"
+			}, {
+				"countyCode": "431129",
+				"countyName": "江华瑶族自治县"
+			}, {
+				"countyCode": "431124",
+				"countyName": "道县"
+			}, {
+				"countyCode": "431127",
+				"countyName": "蓝山县"
+			}, {
+				"countyCode": "431103",
+				"countyName": "冷水滩区"
+			}, {
+				"countyCode": "431122",
+				"countyName": "东安县"
+			}, {
+				"countyCode": "431128",
+				"countyName": "新田县"
+			}, {
+				"countyCode": "431121",
+				"countyName": "祁阳县"
+			}, {
+				"countyCode": "431126",
+				"countyName": "宁远县"
+			}]
+		}, {
+			"cityCode": "430700",
+			"cityName": "常德市",
+			"county": [{
+				"countyCode": "430703",
+				"countyName": "鼎城区"
+			}, {
+				"countyCode": "430725",
+				"countyName": "桃源县"
+			}, {
+				"countyCode": "430724",
+				"countyName": "临澧县"
+			}, {
+				"countyCode": "430781",
+				"countyName": "津市市"
+			}, {
+				"countyCode": "430702",
+				"countyName": "武陵区"
+			}, {
+				"countyCode": "430721",
+				"countyName": "安乡县"
+			}, {
+				"countyCode": "430726",
+				"countyName": "石门县"
+			}, {
+				"countyCode": "430722",
+				"countyName": "汉寿县"
+			}, {
+				"countyCode": "430723",
+				"countyName": "澧县"
+			}]
+		}, {
+			"cityCode": "431300",
+			"cityName": "娄底市",
+			"county": [{
+				"countyCode": "431322",
+				"countyName": "新化县"
+			}, {
+				"countyCode": "431302",
+				"countyName": "娄星区"
+			}, {
+				"countyCode": "431321",
+				"countyName": "双峰县"
+			}, {
+				"countyCode": "431381",
+				"countyName": "冷水江市"
+			}, {
+				"countyCode": "431382",
+				"countyName": "涟源市"
+			}]
+		}, {
+			"cityCode": "430800",
+			"cityName": "张家界市",
+			"county": [{
+				"countyCode": "430821",
+				"countyName": "慈利县"
+			}, {
+				"countyCode": "430822",
+				"countyName": "桑植县"
+			}, {
+				"countyCode": "430802",
+				"countyName": "永定区"
+			}, {
+				"countyCode": "430811",
+				"countyName": "武陵源区"
+			}]
+		}, {
+			"cityCode": "430400",
+			"cityName": "衡阳市",
+			"county": [{
+				"countyCode": "430423",
+				"countyName": "衡山县"
+			}, {
+				"countyCode": "430408",
+				"countyName": "蒸湘区"
+			}, {
+				"countyCode": "430405",
+				"countyName": "珠晖区"
+			}, {
+				"countyCode": "430481",
+				"countyName": "耒阳市"
+			}, {
+				"countyCode": "430422",
+				"countyName": "衡南县"
+			}, {
+				"countyCode": "430426",
+				"countyName": "祁东县"
+			}, {
+				"countyCode": "430407",
+				"countyName": "石鼓区"
+			}, {
+				"countyCode": "430482",
+				"countyName": "常宁市"
+			}, {
+				"countyCode": "430424",
+				"countyName": "衡东县"
+			}, {
+				"countyCode": "430406",
+				"countyName": "雁峰区"
+			}, {
+				"countyCode": "430421",
+				"countyName": "衡阳县"
+			}, {
+				"countyCode": "430412",
+				"countyName": "南岳区"
+			}]
+		}, {
+			"cityCode": "430500",
+			"cityName": "邵阳市",
+			"county": [{
+				"countyCode": "430524",
+				"countyName": "隆回县"
+			}, {
+				"countyCode": "430503",
+				"countyName": "大祥区"
+			}, {
+				"countyCode": "430528",
+				"countyName": "新宁县"
+			}, {
+				"countyCode": "430529",
+				"countyName": "城步苗族自治县"
+			}, {
+				"countyCode": "430581",
+				"countyName": "武冈市"
+			}, {
+				"countyCode": "430502",
+				"countyName": "双清区"
+			}, {
+				"countyCode": "430523",
+				"countyName": "邵阳县"
+			}, {
+				"countyCode": "430522",
+				"countyName": "新邵县"
+			}, {
+				"countyCode": "430521",
+				"countyName": "邵东县"
+			}, {
+				"countyCode": "430525",
+				"countyName": "洞口县"
+			}, {
+				"countyCode": "430511",
+				"countyName": "北塔区"
+			}, {
+				"countyCode": "430527",
+				"countyName": "绥宁县"
+			}]
+		}, {
+			"cityCode": "433100",
+			"cityName": "湘西土家族苗族自治州",
+			"county": [{
+				"countyCode": "433123",
+				"countyName": "凤凰县"
+			}, {
+				"countyCode": "433126",
+				"countyName": "古丈县"
+			}, {
+				"countyCode": "433125",
+				"countyName": "保靖县"
+			}, {
+				"countyCode": "433124",
+				"countyName": "花垣县"
+			}, {
+				"countyCode": "433127",
+				"countyName": "永顺县"
+			}, {
+				"countyCode": "433122",
+				"countyName": "泸溪县"
+			}, {
+				"countyCode": "433101",
+				"countyName": "吉首市"
+			}, {
+				"countyCode": "433130",
+				"countyName": "龙山县"
+			}]
+		}, {
+			"cityCode": "430900",
+			"cityName": "益阳市",
+			"county": [{
+				"countyCode": "430923",
+				"countyName": "安化县"
+			}, {
+				"countyCode": "430921",
+				"countyName": "南县"
+			}, {
+				"countyCode": "430902",
+				"countyName": "资阳区"
+			}, {
+				"countyCode": "430981",
+				"countyName": "沅江市"
+			}, {
+				"countyCode": "430903",
+				"countyName": "赫山区"
+			}, {
+				"countyCode": "430922",
+				"countyName": "桃江县"
+			}]
+		}]
+	}, {
+		"provinceCode": "450000",
+		"provinceName": "广西壮族自治区",
+		"city": [{
+			"cityCode": "450400",
+			"cityName": "梧州市",
+			"county": [{
+				"countyCode": "450481",
+				"countyName": "岑溪市"
+			}, {
+				"countyCode": "450423",
+				"countyName": "蒙山县"
+			}, {
+				"countyCode": "450421",
+				"countyName": "苍梧县"
+			}, {
+				"countyCode": "450422",
+				"countyName": "藤县"
+			}, {
+				"countyCode": "450403",
+				"countyName": "万秀区"
+			}, {
+				"countyCode": "450405",
+				"countyName": "长洲区"
+			}, {
+				"countyCode": "450424",
+				"countyName": "龙圩区"
+			}, {
+				"countyCode": "450404",
+				"countyName": "蝶山区"
+			}]
+		}, {
+			"cityCode": "450500",
+			"cityName": "北海市",
+			"county": [{
+				"countyCode": "450521",
+				"countyName": "合浦县"
+			}, {
+				"countyCode": "450512",
+				"countyName": "铁山港区"
+			}, {
+				"countyCode": "450502",
+				"countyName": "海城区"
+			}, {
+				"countyCode": "450503",
+				"countyName": "银海区"
+			}]
+		}, {
+			"cityCode": "450300",
+			"cityName": "桂林市",
+			"county": [{
+				"countyCode": "450327",
+				"countyName": "灌阳县"
+			}, {
+				"countyCode": "450305",
+				"countyName": "七星区"
+			}, {
+				"countyCode": "450326",
+				"countyName": "永福县"
+			}, {
+				"countyCode": "450325",
+				"countyName": "兴安县"
+			}, {
+				"countyCode": "450321",
+				"countyName": "阳朔县"
+			}, {
+				"countyCode": "450332",
+				"countyName": "恭城瑶族自治县"
+			}, {
+				"countyCode": "450302",
+				"countyName": "秀峰区"
+			}, {
+				"countyCode": "450304",
+				"countyName": "象山区"
+			}, {
+				"countyCode": "450330",
+				"countyName": "平乐县"
+			}, {
+				"countyCode": "450331",
+				"countyName": "荔浦县"
+			}, {
+				"countyCode": "450329",
+				"countyName": "资源县"
+			}, {
+				"countyCode": "450323",
+				"countyName": "灵川县"
+			}, {
+				"countyCode": "450324",
+				"countyName": "全州县"
+			}, {
+				"countyCode": "450322",
+				"countyName": "临桂区"
+			}, {
+				"countyCode": "450303",
+				"countyName": "叠彩区"
+			}, {
+				"countyCode": "450311",
+				"countyName": "雁山区"
+			}, {
+				"countyCode": "450328",
+				"countyName": "龙胜各族自治县"
+			}]
+		}, {
+			"cityCode": "451100",
+			"cityName": "贺州市",
+			"county": [{
+				"countyCode": "451121",
+				"countyName": "昭平县"
+			}, {
+				"countyCode": "451122",
+				"countyName": "钟山县"
+			}, {
+				"countyCode": "451102",
+				"countyName": "八步区"
+			}, {
+				"countyCode": "451123",
+				"countyName": "富川瑶族自治县"
+			}, {
+				"countyCode": "451103",
+				"countyName": "平桂区"
+			}]
+		}, {
+			"cityCode": "450800",
+			"cityName": "贵港市",
+			"county": [{
+				"countyCode": "450804",
+				"countyName": "覃塘区"
+			}, {
+				"countyCode": "450881",
+				"countyName": "桂平市"
+			}, {
+				"countyCode": "450821",
+				"countyName": "平南县"
+			}, {
+				"countyCode": "450803",
+				"countyName": "港南区"
+			}, {
+				"countyCode": "450802",
+				"countyName": "港北区"
+			}]
+		}, {
+			"cityCode": "450900",
+			"cityName": "玉林市",
+			"county": [{
+				"countyCode": "450921",
+				"countyName": "容县"
+			}, {
+				"countyCode": "450924",
+				"countyName": "兴业县"
+			}, {
+				"countyCode": "450902",
+				"countyName": "玉州区"
+			}, {
+				"countyCode": "450903",
+				"countyName": "福绵区"
+			}, {
+				"countyCode": "450981",
+				"countyName": "北流市"
+			}, {
+				"countyCode": "450923",
+				"countyName": "博白县"
+			}, {
+				"countyCode": "450922",
+				"countyName": "陆川县"
+			}]
+		}, {
+			"cityCode": "450200",
+			"cityName": "柳州市",
+			"county": [{
+				"countyCode": "450225",
+				"countyName": "融水苗族自治县"
+			}, {
+				"countyCode": "450202",
+				"countyName": "城中区"
+			}, {
+				"countyCode": "450223",
+				"countyName": "鹿寨县"
+			}, {
+				"countyCode": "450226",
+				"countyName": "三江侗族自治县"
+			}, {
+				"countyCode": "450204",
+				"countyName": "柳南区"
+			}, {
+				"countyCode": "450203",
+				"countyName": "鱼峰区"
+			}, {
+				"countyCode": "450222",
+				"countyName": "柳城县"
+			}, {
+				"countyCode": "450224",
+				"countyName": "融安县"
+			}, {
+				"countyCode": "450205",
+				"countyName": "柳北区"
+			}, {
+				"countyCode": "450221",
+				"countyName": "柳江区"
+			}]
+		}, {
+			"cityCode": "451000",
+			"cityName": "百色市",
+			"county": [{
+				"countyCode": "451002",
+				"countyName": "右江区"
+			}, {
+				"countyCode": "451031",
+				"countyName": "隆林各族自治县"
+			}, {
+				"countyCode": "451027",
+				"countyName": "凌云县"
+			}, {
+				"countyCode": "451023",
+				"countyName": "平果县"
+			}, {
+				"countyCode": "451026",
+				"countyName": "那坡县"
+			}, {
+				"countyCode": "451030",
+				"countyName": "西林县"
+			}, {
+				"countyCode": "451024",
+				"countyName": "德保县"
+			}, {
+				"countyCode": "451022",
+				"countyName": "田东县"
+			}, {
+				"countyCode": "451021",
+				"countyName": "田阳县"
+			}, {
+				"countyCode": "451028",
+				"countyName": "乐业县"
+			}, {
+				"countyCode": "451029",
+				"countyName": "田林县"
+			}, {
+				"countyCode": "451025",
+				"countyName": "靖西市"
+			}]
+		}, {
+			"cityCode": "451300",
+			"cityName": "来宾市",
+			"county": [{
+				"countyCode": "451381",
+				"countyName": "合山市"
+			}, {
+				"countyCode": "451322",
+				"countyName": "象州县"
+			}, {
+				"countyCode": "451324",
+				"countyName": "金秀瑶族自治县"
+			}, {
+				"countyCode": "451321",
+				"countyName": "忻城县"
+			}, {
+				"countyCode": "451302",
+				"countyName": "兴宾区"
+			}, {
+				"countyCode": "451323",
+				"countyName": "武宣县"
+			}]
+		}, {
+			"cityCode": "450100",
+			"cityName": "南宁市",
+			"county": [{
+				"countyCode": "450105",
+				"countyName": "江南区"
+			}, {
+				"countyCode": "450107",
+				"countyName": "西乡塘区"
+			}, {
+				"countyCode": "450109",
+				"countyName": "邕宁区"
+			}, {
+				"countyCode": "450126",
+				"countyName": "宾阳县"
+			}, {
+				"countyCode": "450108",
+				"countyName": "良庆区"
+			}, {
+				"countyCode": "450125",
+				"countyName": "上林县"
+			}, {
+				"countyCode": "450123",
+				"countyName": "隆安县"
+			}, {
+				"countyCode": "450124",
+				"countyName": "马山县"
+			}, {
+				"countyCode": "450122",
+				"countyName": "武鸣区"
+			}, {
+				"countyCode": "450102",
+				"countyName": "兴宁区"
+			}, {
+				"countyCode": "450127",
+				"countyName": "横县"
+			}, {
+				"countyCode": "450103",
+				"countyName": "青秀区"
+			}]
+		}, {
+			"cityCode": "450700",
+			"cityName": "钦州市",
+			"county": [{
+				"countyCode": "450702",
+				"countyName": "钦南区"
+			}, {
+				"countyCode": "450722",
+				"countyName": "浦北县"
+			}, {
+				"countyCode": "450721",
+				"countyName": "灵山县"
+			}, {
+				"countyCode": "450703",
+				"countyName": "钦北区"
+			}]
+		}, {
+			"cityCode": "450600",
+			"cityName": "防城港市",
+			"county": [{
+				"countyCode": "450603",
+				"countyName": "防城区"
+			}, {
+				"countyCode": "450621",
+				"countyName": "上思县"
+			}, {
+				"countyCode": "450602",
+				"countyName": "港口区"
+			}, {
+				"countyCode": "450681",
+				"countyName": "东兴市"
+			}]
+		}, {
+			"cityCode": "451200",
+			"cityName": "河池市",
+			"county": [{
+				"countyCode": "451202",
+				"countyName": "金城江区"
+			}, {
+				"countyCode": "451281",
+				"countyName": "宜州区"
+			}, {
+				"countyCode": "451221",
+				"countyName": "南丹县"
+			}, {
+				"countyCode": "451224",
+				"countyName": "东兰县"
+			}, {
+				"countyCode": "451228",
+				"countyName": "都安瑶族自治县"
+			}, {
+				"countyCode": "451229",
+				"countyName": "大化瑶族自治县"
+			}, {
+				"countyCode": "451222",
+				"countyName": "天峨县"
+			}, {
+				"countyCode": "451225",
+				"countyName": "罗城仫佬族自治县"
+			}, {
+				"countyCode": "451227",
+				"countyName": "巴马瑶族自治县"
+			}, {
+				"countyCode": "451226",
+				"countyName": "环江毛南族自治县"
+			}, {
+				"countyCode": "451223",
+				"countyName": "凤山县"
+			}]
+		}, {
+			"cityCode": "451400",
+			"cityName": "崇左市",
+			"county": [{
+				"countyCode": "451423",
+				"countyName": "龙州县"
+			}, {
+				"countyCode": "451425",
+				"countyName": "天等县"
+			}, {
+				"countyCode": "451481",
+				"countyName": "凭祥市"
+			}, {
+				"countyCode": "451422",
+				"countyName": "宁明县"
+			}, {
+				"countyCode": "451402",
+				"countyName": "江州区"
+			}, {
+				"countyCode": "451421",
+				"countyName": "扶绥县"
+			}, {
+				"countyCode": "451424",
+				"countyName": "大新县"
+			}]
+		}]
+	}, {
+		"provinceCode": "460000",
+		"provinceName": "海南省",
+		"city": [{
+			"cityCode": "469005",
+			"cityName": "文昌市",
+			"county": [{
+				"countyCode": "469005-1",
+				"countyName": "文昌市"
+			}]
+		}, {
+			"cityCode": "460300",
+			"cityName": "三沙市",
+			"county": [{
+				"countyCode": "460321",
+				"countyName": "西沙群岛"
+			}, {
+				"countyCode": "460322",
+				"countyName": "南沙群岛"
+			}, {
+				"countyCode": "469031",
+				"countyName": "西沙群岛"
+			}, {
+				"countyCode": "469032",
+				"countyName": "南沙群岛"
+			}, {
+				"countyCode": "460323",
+				"countyName": "中沙群岛的岛礁及其海域"
+			}]
+		}, {
+			"cityCode": "469027",
+			"cityName": "乐东黎族自治县",
+			"county": [{
+				"countyCode": "469027-1",
+				"countyName": "乐东黎族自治县"
+			}]
+		}, {
+			"cityCode": "460200",
+			"cityName": "三亚市",
+			"county": [{
+				"countyCode": "460203",
+				"countyName": "吉阳区"
+			}, {
+				"countyCode": "460202",
+				"countyName": "海棠区"
+			}, {
+				"countyCode": "460205",
+				"countyName": "崖州区"
+			}, {
+				"countyCode": "460204",
+				"countyName": "天涯区"
+			}]
+		}, {
+			"cityCode": "469002",
+			"cityName": "琼海市",
+			"county": [{
+				"countyCode": "469002-1",
+				"countyName": "琼海市"
+			}]
+		}, {
+			"cityCode": "469021",
+			"cityName": "定安县",
+			"county": [{
+				"countyCode": "469021-1",
+				"countyName": "定安县"
+			}]
+		}, {
+			"cityCode": "460100",
+			"cityName": "海口市",
+			"county": [{
+				"countyCode": "460107",
+				"countyName": "琼山区"
+			}, {
+				"countyCode": "460108",
+				"countyName": "美兰区"
+			}, {
+				"countyCode": "460105",
+				"countyName": "秀英区"
+			}, {
+				"countyCode": "460106",
+				"countyName": "龙华区"
+			}]
+		}, {
+			"cityCode": "469006",
+			"cityName": "万宁市",
+			"county": [{
+				"countyCode": "469006-1",
+				"countyName": "万宁市"
+			}]
+		}, {
+			"cityCode": "469029",
+			"cityName": "保亭黎族苗族自治县",
+			"county": [{
+				"countyCode": "469029-1",
+				"countyName": "保亭黎族苗族自治县"
+			}]
+		}, {
+			"cityCode": "469003",
+			"cityName": "儋州市",
+			"county": [{
+				"countyCode": "469003-1",
+				"countyName": "儋州市"
+			}]
+		}, {
+			"cityCode": "469023",
+			"cityName": "澄迈县",
+			"county": [{
+				"countyCode": "469023-1",
+				"countyName": "澄迈县"
+			}]
+		}, {
+			"cityCode": "469022",
+			"cityName": "屯昌县",
+			"county": [{
+				"countyCode": "469022-1",
+				"countyName": "屯昌县"
+			}]
+		}, {
+			"cityCode": "469028",
+			"cityName": "陵水黎族自治县",
+			"county": [{
+				"countyCode": "469028-1",
+				"countyName": "陵水黎族自治县"
+			}]
+		}, {
+			"cityCode": "469007",
+			"cityName": "东方市",
+			"county": [{
+				"countyCode": "469007-1",
+				"countyName": "东方市"
+			}]
+		}, {
+			"cityCode": "469001",
+			"cityName": "五指山市",
+			"county": [{
+				"countyCode": "469001-1",
+				"countyName": "五指山市"
+			}]
+		}, {
+			"cityCode": "469025",
+			"cityName": "白沙黎族自治县",
+			"county": [{
+				"countyCode": "469025-1",
+				"countyName": "白沙黎族自治县"
+			}]
+		}, {
+			"cityCode": "469026",
+			"cityName": "昌江黎族自治县",
+			"county": [{
+				"countyCode": "469026-1",
+				"countyName": "昌江黎族自治县"
+			}]
+		}, {
+			"cityCode": "469024",
+			"cityName": "临高县",
+			"county": [{
+				"countyCode": "469024-1",
+				"countyName": "临高县"
+			}]
+		}, {
+			"cityCode": "469030",
+			"cityName": "琼中黎族苗族自治县",
+			"county": [{
+				"countyCode": "469030-1",
+				"countyName": "琼中黎族苗族自治县"
+			}]
+		}]
+	}, {
+		"provinceCode": "500000",
+		"provinceName": "重庆",
+		"city": [{
+			
+				"countyCode": "500108",
+				"cityName": "南岸区"
+			}, {
+				"countyCode": "500101",
+				"cityName": "万州区"
+			}, {
+				"countyCode": "500103",
+				"cityName": "渝中区"
+			}, {
+				"countyCode": "500106",
+				"cityName": "沙坪坝区"
+			}, {
+				"countyCode": "500102",
+				"cityName": "涪陵区"
+			}, {
+				"countyCode": "500226",
+				"cityName": "荣昌区"
+			}, {
+				"countyCode": "500223",
+				"cityName": "潼南区"
+			}, {
+				"countyCode": "500242",
+				"cityName": "酉阳土家族苗族自治县"
+			}, {
+				"countyCode": "500232",
+				"cityName": "武隆区"
+			}, {
+				"countyCode": "500113",
+				"cityName": "巴南区"
+			}, {
+				"countyCode": "500109",
+				"cityName": "北碚区"
+			}, {
+				"countyCode": "500104",
+				"cityName": "大渡口区"
+			}, {
+				"countyCode": "500117",
+				"cityName": "合川区"
+			}, {
+				"countyCode": "500112",
+				"cityName": "渝北区"
+			}, {
+				"countyCode": "500116",
+				"cityName": "江津区"
+			}, {
+				"countyCode": "500228",
+				"cityName": "梁平区"
+			}, {
+				"countyCode": "500119",
+				"cityName": "南川区"
+			}, {
+				"countyCode": "500110",
+				"cityName": "綦江区"
+			}, {
+				"countyCode": "500227",
+				"cityName": "璧山区"
+			}, {
+				"countyCode": "500115",
+				"cityName": "长寿区"
+			}, {
+				"countyCode": "500231",
+				"cityName": "垫江县"
+			}, {
+				"countyCode": "500230",
+				"cityName": "丰都县"
+			}, {
+				"countyCode": "500224",
+				"cityName": "铜梁区"
+			}, {
+				"countyCode": "500243",
+				"cityName": "彭水苗族土家族自治县"
+			}, {
+				"countyCode": "500105",
+				"cityName": "江北区"
+			}, {
+				"countyCode": "500107",
+				"cityName": "九龙坡区"
+			}, {
+				"countyCode": "500236",
+				"cityName": "奉节县"
+			}, {
+				"countyCode": "500111",
+				"cityName": "大足区"
+			}, {
+				"countyCode": "500234",
+				"cityName": "开州区"
+			}, {
+				"countyCode": "500241",
+				"cityName": "秀山土家族苗族自治县"
+			}, {
+				"countyCode": "500229",
+				"cityName": "城口县"
+			}, {
+				"countyCode": "500238",
+				"cityName": "巫溪县"
+			}, {
+				"countyCode": "500118",
+				"cityName": "永川区"
+			}, {
+				"countyCode": "500233",
+				"cityName": "忠县"
+			}, {
+				"countyCode": "500240",
+				"cityName": "石柱土家族自治县"
+			}, {
+				"countyCode": "500114",
+				"cityName": "黔江区"
+			}, {
+				"countyCode": "500237",
+				"cityName": "巫山县"
+			}, {
+				"countyCode": "500235",
+				"cityName": "云阳县"
+			
+		}]
+	}, {
+		"provinceCode": "510000",
+		"provinceName": "四川省",
+		"city": [{
+			"cityCode": "511300",
+			"cityName": "南充市",
+			"county": [{
+				"countyCode": "511304",
+				"countyName": "嘉陵区"
+			}, {
+				"countyCode": "511323",
+				"countyName": "蓬安县"
+			}, {
+				"countyCode": "511322",
+				"countyName": "营山县"
+			}, {
+				"countyCode": "511381",
+				"countyName": "阆中市"
+			}, {
+				"countyCode": "511303",
+				"countyName": "高坪区"
+			}, {
+				"countyCode": "511324",
+				"countyName": "仪陇县"
+			}, {
+				"countyCode": "511302",
+				"countyName": "顺庆区"
+			}, {
+				"countyCode": "511321",
+				"countyName": "南部县"
+			}, {
+				"countyCode": "511325",
+				"countyName": "西充县"
+			}]
+		}, {
+			"cityCode": "511800",
+			"cityName": "雅安市",
+			"county": [{
+				"countyCode": "511826",
+				"countyName": "芦山县"
+			}, {
+				"countyCode": "511824",
+				"countyName": "石棉县"
+			}, {
+				"countyCode": "511803",
+				"countyName": "名山区"
+			}, {
+				"countyCode": "511827",
+				"countyName": "宝兴县"
+			}, {
+				"countyCode": "511802",
+				"countyName": "雨城区"
+			}, {
+				"countyCode": "511823",
+				"countyName": "汉源县"
+			}, {
+				"countyCode": "511825",
+				"countyName": "天全县"
+			}, {
+				"countyCode": "511822",
+				"countyName": "荥经县"
+			}]
+		}, {
+			"cityCode": "513400",
+			"cityName": "凉山彝族自治州",
+			"county": [{
+				"countyCode": "513427",
+				"countyName": "宁南县"
+			}, {
+				"countyCode": "513432",
+				"countyName": "喜德县"
+			}, {
+				"countyCode": "513431",
+				"countyName": "昭觉县"
+			}, {
+				"countyCode": "513401",
+				"countyName": "西昌市"
+			}, {
+				"countyCode": "513437",
+				"countyName": "雷波县"
+			}, {
+				"countyCode": "513433",
+				"countyName": "冕宁县"
+			}, {
+				"countyCode": "513434",
+				"countyName": "越西县"
+			}, {
+				"countyCode": "513435",
+				"countyName": "甘洛县"
+			}, {
+				"countyCode": "513429",
+				"countyName": "布拖县"
+			}, {
+				"countyCode": "513430",
+				"countyName": "金阳县"
+			}, {
+				"countyCode": "513436",
+				"countyName": "美姑县"
+			}, {
+				"countyCode": "513428",
+				"countyName": "普格县"
+			}, {
+				"countyCode": "513424",
+				"countyName": "德昌县"
+			}, {
+				"countyCode": "513425",
+				"countyName": "会理县"
+			}, {
+				"countyCode": "513423",
+				"countyName": "盐源县"
+			}, {
+				"countyCode": "513426",
+				"countyName": "会东县"
+			}, {
+				"countyCode": "513422",
+				"countyName": "木里藏族自治县"
+			}]
+		}, {
+			"cityCode": "511400",
+			"cityName": "眉山市",
+			"county": [{
+				"countyCode": "511422",
+				"countyName": "彭山区"
+			}, {
+				"countyCode": "511424",
+				"countyName": "丹棱县"
+			}, {
+				"countyCode": "511425",
+				"countyName": "青神县"
+			}, {
+				"countyCode": "511402",
+				"countyName": "东坡区"
+			}, {
+				"countyCode": "511423",
+				"countyName": "洪雅县"
+			}, {
+				"countyCode": "511421",
+				"countyName": "仁寿县"
+			}]
+		}, {
+			"cityCode": "510300",
+			"cityName": "自贡市",
+			"county": [{
+				"countyCode": "510304",
+				"countyName": "大安区"
+			}, {
+				"countyCode": "510302",
+				"countyName": "自流井区"
+			}, {
+				"countyCode": "510321",
+				"countyName": "荣县"
+			}, {
+				"countyCode": "510303",
+				"countyName": "贡井区"
+			}, {
+				"countyCode": "510322",
+				"countyName": "富顺县"
+			}, {
+				"countyCode": "510311",
+				"countyName": "沿滩区"
+			}]
+		}, {
+			"cityCode": "511900",
+			"cityName": "巴中市",
+			"county": [{
+				"countyCode": "511903",
+				"countyName": "恩阳区"
+			}, {
+				"countyCode": "511921",
+				"countyName": "通江县"
+			}, {
+				"countyCode": "511922",
+				"countyName": "南江县"
+			}, {
+				"countyCode": "511902",
+				"countyName": "巴州区"
+			}, {
+				"countyCode": "511923",
+				"countyName": "平昌县"
+			}]
+		}, {
+			"cityCode": "513300",
+			"cityName": "甘孜藏族自治州",
+			"county": [{
+				"countyCode": "513328",
+				"countyName": "甘孜县"
+			}, {
+				"countyCode": "513324",
+				"countyName": "九龙县"
+			}, {
+				"countyCode": "513332",
+				"countyName": "石渠县"
+			}, {
+				"countyCode": "513337",
+				"countyName": "稻城县"
+			}, {
+				"countyCode": "513326",
+				"countyName": "道孚县"
+			}, {
+				"countyCode": "513330",
+				"countyName": "德格县"
+			}, {
+				"countyCode": "513336",
+				"countyName": "乡城县"
+			}, {
+				"countyCode": "513325",
+				"countyName": "雅江县"
+			}, {
+				"countyCode": "513334",
+				"countyName": "理塘县"
+			}, {
+				"countyCode": "513329",
+				"countyName": "新龙县"
+			}, {
+				"countyCode": "513338",
+				"countyName": "得荣县"
+			}, {
+				"countyCode": "513331",
+				"countyName": "白玉县"
+			}, {
+				"countyCode": "513323",
+				"countyName": "丹巴县"
+			}, {
+				"countyCode": "513327",
+				"countyName": "炉霍县"
+			}, {
+				"countyCode": "513335",
+				"countyName": "巴塘县"
+			}, {
+				"countyCode": "513321",
+				"countyName": "康定市"
+			}, {
+				"countyCode": "513333",
+				"countyName": "色达县"
+			}, {
+				"countyCode": "513322",
+				"countyName": "泸定县"
+			}]
+		}, {
+			"cityCode": "511700",
+			"cityName": "达州市",
+			"county": [{
+				"countyCode": "511722",
+				"countyName": "宣汉县"
+			}, {
+				"countyCode": "511781",
+				"countyName": "万源市"
+			}, {
+				"countyCode": "511724",
+				"countyName": "大竹县"
+			}, {
+				"countyCode": "511723",
+				"countyName": "开江县"
+			}, {
+				"countyCode": "511721",
+				"countyName": "达川区"
+			}, {
+				"countyCode": "511702",
+				"countyName": "通川区"
+			}, {
+				"countyCode": "511725",
+				"countyName": "渠县"
+			}]
+		}, {
+			"cityCode": "510500",
+			"cityName": "泸州市",
+			"county": [{
+				"countyCode": "510524",
+				"countyName": "叙永县"
+			}, {
+				"countyCode": "510521",
+				"countyName": "泸县"
+			}, {
+				"countyCode": "510502",
+				"countyName": "江阳区"
+			}, {
+				"countyCode": "510504",
+				"countyName": "龙马潭区"
+			}, {
+				"countyCode": "510525",
+				"countyName": "古蔺县"
+			}, {
+				"countyCode": "510522",
+				"countyName": "合江县"
+			}, {
+				"countyCode": "510503",
+				"countyName": "纳溪区"
+			}]
+		}, {
+			"cityCode": "510800",
+			"cityName": "广元市",
+			"county": [{
+				"countyCode": "510802",
+				"countyName": "利州区"
+			}, {
+				"countyCode": "510811",
+				"countyName": "昭化区"
+			}, {
+				"countyCode": "510824",
+				"countyName": "苍溪县"
+			}, {
+				"countyCode": "510812",
+				"countyName": "朝天区"
+			}, {
+				"countyCode": "510823",
+				"countyName": "剑阁县"
+			}, {
+				"countyCode": "510821",
+				"countyName": "旺苍县"
+			}, {
+				"countyCode": "510822",
+				"countyName": "青川县"
+			}]
+		}, {
+			"cityCode": "512000",
+			"cityName": "资阳市",
+			"county": [{
+				"countyCode": "512022",
+				"countyName": "乐至县"
+			}, {
+				"countyCode": "512021",
+				"countyName": "安岳县"
+			}, {
+				"countyCode": "512002",
+				"countyName": "雁江区"
+			}]
+		}, {
+			"cityCode": "510400",
+			"cityName": "攀枝花市",
+			"county": [{
+				"countyCode": "510411",
+				"countyName": "仁和区"
+			}, {
+				"countyCode": "510422",
+				"countyName": "盐边县"
+			}, {
+				"countyCode": "510403",
+				"countyName": "西区"
+			}, {
+				"countyCode": "510421",
+				"countyName": "米易县"
+			}, {
+				"countyCode": "510402",
+				"countyName": "东区"
+			}]
+		}, {
+			"cityCode": "510100",
+			"cityName": "成都市",
+			"county": [{
+				"countyCode": "510115",
+				"countyName": "温江区"
+			}, {
+				"countyCode": "510105",
+				"countyName": "青羊区"
+			}, {
+				"countyCode": "510124",
+				"countyName": "郫都区"
+			}, {
+				"countyCode": "510122",
+				"countyName": "双流区"
+			}, {
+				"countyCode": "510129",
+				"countyName": "大邑县"
+			}, {
+				"countyCode": "510106",
+				"countyName": "金牛区"
+			}, {
+				"countyCode": "510112",
+				"countyName": "龙泉驿区"
+			}, {
+				"countyCode": "512081",
+				"countyName": "简阳市"
+			}, {
+				"countyCode": "510181",
+				"countyName": "都江堰市"
+			}, {
+				"countyCode": "510108",
+				"countyName": "成华区"
+			}, {
+				"countyCode": "510132",
+				"countyName": "新津县"
+			}, {
+				"countyCode": "510113",
+				"countyName": "青白江区"
+			}, {
+				"countyCode": "510182",
+				"countyName": "彭州市"
+			}, {
+				"countyCode": "510114",
+				"countyName": "新都区"
+			}, {
+				"countyCode": "510184",
+				"countyName": "崇州市"
+			}, {
+				"countyCode": "510121",
+				"countyName": "金堂县"
+			}, {
+				"countyCode": "510107",
+				"countyName": "武侯区"
+			}, {
+				"countyCode": "510104",
+				"countyName": "锦江区"
+			}, {
+				"countyCode": "510131",
+				"countyName": "蒲江县"
+			}, {
+				"countyCode": "510183",
+				"countyName": "邛崃市"
+			}]
+		}, {
+			"cityCode": "511100",
+			"cityName": "乐山市",
+			"county": [{
+				"countyCode": "511132",
+				"countyName": "峨边彝族自治县"
+			}, {
+				"countyCode": "511113",
+				"countyName": "金口河区"
+			}, {
+				"countyCode": "511111",
+				"countyName": "沙湾区"
+			}, {
+				"countyCode": "511181",
+				"countyName": "峨眉山市"
+			}, {
+				"countyCode": "511126",
+				"countyName": "夹江县"
+			}, {
+				"countyCode": "511102",
+				"countyName": "市中区"
+			}, {
+				"countyCode": "511112",
+				"countyName": "五通桥区"
+			}, {
+				"countyCode": "511124",
+				"countyName": "井研县"
+			}, {
+				"countyCode": "511129",
+				"countyName": "沐川县"
+			}, {
+				"countyCode": "511123",
+				"countyName": "犍为县"
+			}, {
+				"countyCode": "511133",
+				"countyName": "马边彝族自治县"
+			}]
+		}, {
+			"cityCode": "510700",
+			"cityName": "绵阳市",
+			"county": [{
+				"countyCode": "510724",
+				"countyName": "安州区"
+			}, {
+				"countyCode": "510725",
+				"countyName": "梓潼县"
+			}, {
+				"countyCode": "510781",
+				"countyName": "江油市"
+			}, {
+				"countyCode": "510704",
+				"countyName": "游仙区"
+			}, {
+				"countyCode": "510727",
+				"countyName": "平武县"
+			}, {
+				"countyCode": "510723",
+				"countyName": "盐亭县"
+			}, {
+				"countyCode": "510703",
+				"countyName": "涪城区"
+			}, {
+				"countyCode": "510722",
+				"countyName": "三台县"
+			}, {
+				"countyCode": "510726",
+				"countyName": "北川羌族自治县"
+			}]
+		}, {
+			"cityCode": "511600",
+			"cityName": "广安市",
+			"county": [{
+				"countyCode": "511623",
+				"countyName": "邻水县"
+			}, {
+				"countyCode": "511622",
+				"countyName": "武胜县"
+			}, {
+				"countyCode": "511603000000",
+				"countyName": "前锋区"
+			}, {
+				"countyCode": "511602",
+				"countyName": "广安区"
+			}, {
+				"countyCode": "511621",
+				"countyName": "岳池县"
+			}, {
+				"countyCode": "511681",
+				"countyName": "华蓥市"
+			}]
+		}, {
+			"cityCode": "511500",
+			"cityName": "宜宾市",
+			"county": [{
+				"countyCode": "511523",
+				"countyName": "江安县"
+			}, {
+				"countyCode": "511521",
+				"countyName": "叙州区"
+			}, {
+				"countyCode": "511525",
+				"countyName": "高县"
+			}, {
+				"countyCode": "511529",
+				"countyName": "屏山县"
+			}, {
+				"countyCode": "511528",
+				"countyName": "兴文县"
+			}, {
+				"countyCode": "511502",
+				"countyName": "翠屏区"
+			}, {
+				"countyCode": "511527",
+				"countyName": "筠连县"
+			}, {
+				"countyCode": "511524",
+				"countyName": "长宁县"
+			}, {
+				"countyCode": "511526",
+				"countyName": "珙县"
+			}, {
+				"countyCode": "511503",
+				"countyName": "南溪区"
+			}]
+		}, {
+			"cityCode": "511000",
+			"cityName": "内江市",
+			"county": [{
+				"countyCode": "511024",
+				"countyName": "威远县"
+			}, {
+				"countyCode": "511002",
+				"countyName": "市中区"
+			}, {
+				"countyCode": "511011",
+				"countyName": "东兴区"
+			}, {
+				"countyCode": "511028",
+				"countyName": "隆昌市"
+			}, {
+				"countyCode": "511025",
+				"countyName": "资中县"
+			}]
+		}, {
+			"cityCode": "513200",
+			"cityName": "阿坝藏族羌族自治州",
+			"county": [{
+				"countyCode": "513230",
+				"countyName": "壤塘县"
+			}, {
+				"countyCode": "513225",
+				"countyName": "九寨沟县"
+			}, {
+				"countyCode": "513223",
+				"countyName": "茂县"
+			}, {
+				"countyCode": "513226",
+				"countyName": "金川县"
+			}, {
+				"countyCode": "513227",
+				"countyName": "小金县"
+			}, {
+				"countyCode": "513233",
+				"countyName": "红原县"
+			}, {
+				"countyCode": "513222",
+				"countyName": "理县"
+			}, {
+				"countyCode": "513232",
+				"countyName": "若尔盖县"
+			}, {
+				"countyCode": "513221",
+				"countyName": "汶川县"
+			}, {
+				"countyCode": "513228",
+				"countyName": "黑水县"
+			}, {
+				"countyCode": "513229",
+				"countyName": "马尔康市"
+			}, {
+				"countyCode": "513231",
+				"countyName": "阿坝县"
+			}, {
+				"countyCode": "513224",
+				"countyName": "松潘县"
+			}]
+		}, {
+			"cityCode": "510900",
+			"cityName": "遂宁市",
+			"county": [{
+				"countyCode": "510904",
+				"countyName": "安居区"
+			}, {
+				"countyCode": "510923",
+				"countyName": "大英县"
+			}, {
+				"countyCode": "510922",
+				"countyName": "射洪县"
+			}, {
+				"countyCode": "510903",
+				"countyName": "船山区"
+			}, {
+				"countyCode": "510921",
+				"countyName": "蓬溪县"
+			}]
+		}, {
+			"cityCode": "510600",
+			"cityName": "德阳市",
+			"county": [{
+				"countyCode": "510682",
+				"countyName": "什邡市"
+			}, {
+				"countyCode": "510683",
+				"countyName": "绵竹市"
+			}, {
+				"countyCode": "510623",
+				"countyName": "中江县"
+			}, {
+				"countyCode": "510681",
+				"countyName": "广汉市"
+			}, {
+				"countyCode": "510626",
+				"countyName": "罗江区"
+			}, {
+				"countyCode": "510603",
+				"countyName": "旌阳区"
+			}]
+		}]
+	}, {
+		"provinceCode": "520000",
+		"provinceName": "贵州省",
+		"city": [{
+			"cityCode": "520100",
+			"cityName": "贵阳市",
+			"county": [{
+				"countyCode": "520103",
+				"countyName": "云岩区"
+			}, {
+				"countyCode": "520123",
+				"countyName": "修文县"
+			}, {
+				"countyCode": "520121",
+				"countyName": "开阳县"
+			}, {
+				"countyCode": "520114",
+				"countyName": "小河区"
+			}, {
+				"countyCode": "520122",
+				"countyName": "息烽县"
+			}, {
+				"countyCode": "520113",
+				"countyName": "白云区"
+			}, {
+				"countyCode": "520115",
+				"countyName": "观山湖区"
+			}, {
+				"countyCode": "520102",
+				"countyName": "南明区"
+			}, {
+				"countyCode": "520181",
+				"countyName": "清镇市"
+			}, {
+				"countyCode": "520112",
+				"countyName": "乌当区"
+			}, {
+				"countyCode": "520111",
+				"countyName": "花溪区"
+			}]
+		}, {
+			"cityCode": "520300",
+			"cityName": "遵义市",
+			"county": [{
+				"countyCode": "520381",
+				"countyName": "赤水市"
+			}, {
+				"countyCode": "520329",
+				"countyName": "余庆县"
+			}, {
+				"countyCode": "520325",
+				"countyName": "道真仡佬族苗族自治县"
+			}, {
+				"countyCode": "520326",
+				"countyName": "务川仡佬族苗族自治县"
+			}, {
+				"countyCode": "520328",
+				"countyName": "湄潭县"
+			}, {
+				"countyCode": "520327",
+				"countyName": "凤冈县"
+			}, {
+				"countyCode": "520302",
+				"countyName": "红花岗区"
+			}, {
+				"countyCode": "520382",
+				"countyName": "仁怀市"
+			}, {
+				"countyCode": "520321",
+				"countyName": "播州区"
+			}, {
+				"countyCode": "520330",
+				"countyName": "习水县"
+			}, {
+				"countyCode": "520324",
+				"countyName": "正安县"
+			}, {
+				"countyCode": "520303",
+				"countyName": "汇川区"
+			}, {
+				"countyCode": "520323",
+				"countyName": "绥阳县"
+			}, {
+				"countyCode": "520322",
+				"countyName": "桐梓县"
+			}]
+		}, {
+			"cityCode": "522700",
+			"cityName": "黔南布依族苗族自治州",
+			"county": [{
+				"countyCode": "522722",
+				"countyName": "荔波县"
+			}, {
+				"countyCode": "522725",
+				"countyName": "瓮安县"
+			}, {
+				"countyCode": "522702",
+				"countyName": "福泉市"
+			}, {
+				"countyCode": "522728",
+				"countyName": "罗甸县"
+			}, {
+				"countyCode": "522723",
+				"countyName": "贵定县"
+			}, {
+				"countyCode": "522701",
+				"countyName": "都匀市"
+			}, {
+				"countyCode": "522726",
+				"countyName": "独山县"
+			}, {
+				"countyCode": "522731",
+				"countyName": "惠水县"
+			}, {
+				"countyCode": "522732",
+				"countyName": "三都水族自治县"
+			}, {
+				"countyCode": "522727",
+				"countyName": "平塘县"
+			}, {
+				"countyCode": "522729",
+				"countyName": "长顺县"
+			}, {
+				"countyCode": "522730",
+				"countyName": "龙里县"
+			}]
+		}, {
+			"cityCode": "520200",
+			"cityName": "六盘水市",
+			"county": [{
+				"countyCode": "520222",
+				"countyName": "盘州市"
+			}, {
+				"countyCode": "520203",
+				"countyName": "六枝特区"
+			}, {
+				"countyCode": "520201",
+				"countyName": "钟山区"
+			}, {
+				"countyCode": "520221",
+				"countyName": "水城县"
+			}]
+		}, {
+			"cityCode": "520400",
+			"cityName": "安顺市",
+			"county": [{
+				"countyCode": "520424",
+				"countyName": "关岭布依族苗族自治县"
+			}, {
+				"countyCode": "520423",
+				"countyName": "镇宁布依族苗族自治县"
+			}, {
+				"countyCode": "520422",
+				"countyName": "普定县"
+			}, {
+				"countyCode": "520421",
+				"countyName": "平坝区"
+			}, {
+				"countyCode": "520425",
+				"countyName": "紫云苗族布依族自治县"
+			}, {
+				"countyCode": "520402",
+				"countyName": "西秀区"
+			}]
+		}, {
+			"cityCode": "520500",
+			"cityName": "毕节市",
+			"county": [{
+				"countyCode": "520523",
+				"countyName": "金沙县"
+			}, {
+				"countyCode": "520524",
+				"countyName": "织金县"
+			}, {
+				"countyCode": "520525",
+				"countyName": "纳雍县"
+			}, {
+				"countyCode": "520522",
+				"countyName": "黔西县"
+			}, {
+				"countyCode": "520526",
+				"countyName": "威宁彝族回族苗族自治县"
+			}, {
+				"countyCode": "520527",
+				"countyName": "赫章县"
+			}, {
+				"countyCode": "520521",
+				"countyName": "大方县"
+			}, {
+				"countyCode": "520502",
+				"countyName": "七星关区"
+			}]
+		}, {
+			"cityCode": "522600",
+			"cityName": "黔东南苗族侗族自治州",
+			"county": [{
+				"countyCode": "522626",
+				"countyName": "岑巩县"
+			}, {
+				"countyCode": "522630",
+				"countyName": "台江县"
+			}, {
+				"countyCode": "522624",
+				"countyName": "三穗县"
+			}, {
+				"countyCode": "522625",
+				"countyName": "镇远县"
+			}, {
+				"countyCode": "522636",
+				"countyName": "丹寨县"
+			}, {
+				"countyCode": "522633",
+				"countyName": "从江县"
+			}, {
+				"countyCode": "522634",
+				"countyName": "雷山县"
+			}, {
+				"countyCode": "522623",
+				"countyName": "施秉县"
+			}, {
+				"countyCode": "522629",
+				"countyName": "剑河县"
+			}, {
+				"countyCode": "522628",
+				"countyName": "锦屏县"
+			}, {
+				"countyCode": "522632",
+				"countyName": "榕江县"
+			}, {
+				"countyCode": "522631",
+				"countyName": "黎平县"
+			}, {
+				"countyCode": "522627",
+				"countyName": "天柱县"
+			}, {
+				"countyCode": "522622",
+				"countyName": "黄平县"
+			}, {
+				"countyCode": "522635",
+				"countyName": "麻江县"
+			}, {
+				"countyCode": "522601",
+				"countyName": "凯里市"
+			}]
+		}, {
+			"cityCode": "522300",
+			"cityName": "黔西南布依族苗族自治州",
+			"county": [{
+				"countyCode": "522326",
+				"countyName": "望谟县"
+			}, {
+				"countyCode": "522327",
+				"countyName": "册亨县"
+			}, {
+				"countyCode": "522323",
+				"countyName": "普安县"
+			}, {
+				"countyCode": "522322",
+				"countyName": "兴仁县"
+			}, {
+				"countyCode": "522301",
+				"countyName": "兴义市"
+			}, {
+				"countyCode": "522328",
+				"countyName": "安龙县"
+			}, {
+				"countyCode": "522324",
+				"countyName": "晴隆县"
+			}, {
+				"countyCode": "522325",
+				"countyName": "贞丰县"
+			}]
+		}, {
+			"cityCode": "520600",
+			"cityName": "铜仁市",
+			"county": [{
+				"countyCode": "520602",
+				"countyName": "碧江区"
+			}, {
+				"countyCode": "520622",
+				"countyName": "玉屏侗族自治县"
+			}, {
+				"countyCode": "520603",
+				"countyName": "万山区"
+			}, {
+				"countyCode": "520627",
+				"countyName": "沿河土家族自治县"
+			}, {
+				"countyCode": "520624",
+				"countyName": "思南县"
+			}, {
+				"countyCode": "520626",
+				"countyName": "德江县"
+			}, {
+				"countyCode": "520628",
+				"countyName": "松桃苗族自治县"
+			}, {
+				"countyCode": "520621",
+				"countyName": "江口县"
+			}, {
+				"countyCode": "520623",
+				"countyName": "石阡县"
+			}, {
+				"countyCode": "520625",
+				"countyName": "印江土家族苗族自治县"
+			}]
+		}]
+	}, {
+		"provinceCode": "530000",
+		"provinceName": "云南省",
+		"city": [{
+			"cityCode": "530400",
+			"cityName": "玉溪市",
+			"county": [{
+				"countyCode": "530425",
+				"countyName": "易门县"
+			}, {
+				"countyCode": "530423",
+				"countyName": "通海县"
+			}, {
+				"countyCode": "530421",
+				"countyName": "江川区"
+			}, {
+				"countyCode": "530424",
+				"countyName": "华宁县"
+			}, {
+				"countyCode": "530426",
+				"countyName": "峨山彝族自治县"
+			}, {
+				"countyCode": "530402",
+				"countyName": "红塔区"
+			}, {
+				"countyCode": "530422",
+				"countyName": "澄江县"
+			}, {
+				"countyCode": "530427",
+				"countyName": "新平彝族傣族自治县"
+			}, {
+				"countyCode": "530428",
+				"countyName": "元江哈尼族彝族傣族自治县"
+			}]
+		}, {
+			"cityCode": "533100",
+			"cityName": "德宏傣族景颇族自治州",
+			"county": [{
+				"countyCode": "533124",
+				"countyName": "陇川县"
+			}, {
+				"countyCode": "533122",
+				"countyName": "梁河县"
+			}, {
+				"countyCode": "533123",
+				"countyName": "盈江县"
+			}, {
+				"countyCode": "533103",
+				"countyName": "芒市"
+			}, {
+				"countyCode": "533102",
+				"countyName": "瑞丽市"
+			}]
+		}, {
+			"cityCode": "532900",
+			"cityName": "大理白族自治州",
+			"county": [{
+				"countyCode": "532927",
+				"countyName": "巍山彝族回族自治县"
+			}, {
+				"countyCode": "532931",
+				"countyName": "剑川县"
+			}, {
+				"countyCode": "532923",
+				"countyName": "祥云县"
+			}, {
+				"countyCode": "532932",
+				"countyName": "鹤庆县"
+			}, {
+				"countyCode": "532928",
+				"countyName": "永平县"
+			}, {
+				"countyCode": "532929",
+				"countyName": "云龙县"
+			}, {
+				"countyCode": "532930",
+				"countyName": "洱源县"
+			}, {
+				"countyCode": "532924",
+				"countyName": "宾川县"
+			}, {
+				"countyCode": "532925",
+				"countyName": "弥渡县"
+			}, {
+				"countyCode": "532926",
+				"countyName": "南涧彝族自治县"
+			}, {
+				"countyCode": "532901",
+				"countyName": "大理市"
+			}, {
+				"countyCode": "532922",
+				"countyName": "漾濞彝族自治县"
+			}]
+		}, {
+			"cityCode": "530100",
+			"cityName": "昆明市",
+			"county": [{
+				"countyCode": "530124",
+				"countyName": "富民县"
+			}, {
+				"countyCode": "530114",
+				"countyName": "呈贡区"
+			}, {
+				"countyCode": "530126",
+				"countyName": "石林彝族自治县"
+			}, {
+				"countyCode": "530181",
+				"countyName": "安宁市"
+			}, {
+				"countyCode": "530128",
+				"countyName": "禄劝彝族苗族自治县"
+			}, {
+				"countyCode": "530125",
+				"countyName": "宜良县"
+			}, {
+				"countyCode": "530103",
+				"countyName": "盘龙区"
+			}, {
+				"countyCode": "530102",
+				"countyName": "五华区"
+			}, {
+				"countyCode": "530122",
+				"countyName": "晋宁区"
+			}, {
+				"countyCode": "530113",
+				"countyName": "东川区"
+			}, {
+				"countyCode": "530111",
+				"countyName": "官渡区"
+			}, {
+				"countyCode": "530127",
+				"countyName": "嵩明县"
+			}, {
+				"countyCode": "530112",
+				"countyName": "西山区"
+			}, {
+				"countyCode": "530129",
+				"countyName": "寻甸回族彝族自治县"
+			}]
+		}, {
+			"cityCode": "530900",
+			"cityName": "临沧市",
+			"county": [{
+				"countyCode": "530921",
+				"countyName": "凤庆县"
+			}, {
+				"countyCode": "530926",
+				"countyName": "耿马傣族佤族自治县"
+			}, {
+				"countyCode": "530922",
+				"countyName": "云县"
+			}, {
+				"countyCode": "530924",
+				"countyName": "镇康县"
+			}, {
+				"countyCode": "530923",
+				"countyName": "永德县"
+			}, {
+				"countyCode": "530927",
+				"countyName": "沧源佤族自治县"
+			}, {
+				"countyCode": "530925",
+				"countyName": "双江拉祜族佤族布朗族傣族自治县"
+			}, {
+				"countyCode": "530902",
+				"countyName": "临翔区"
+			}]
+		}, {
+			"cityCode": "532300",
+			"cityName": "楚雄彝族自治州",
+			"county": [{
+				"countyCode": "532329",
+				"countyName": "武定县"
+			}, {
+				"countyCode": "532324",
+				"countyName": "南华县"
+			}, {
+				"countyCode": "532327",
+				"countyName": "永仁县"
+			}, {
+				"countyCode": "532328",
+				"countyName": "元谋县"
+			}, {
+				"countyCode": "532331",
+				"countyName": "禄丰县"
+			}, {
+				"countyCode": "532326",
+				"countyName": "大姚县"
+			}, {
+				"countyCode": "532325",
+				"countyName": "姚安县"
+			}, {
+				"countyCode": "532301",
+				"countyName": "楚雄市"
+			}, {
+				"countyCode": "532323",
+				"countyName": "牟定县"
+			}, {
+				"countyCode": "532322",
+				"countyName": "双柏县"
+			}]
+		}, {
+			"cityCode": "532800",
+			"cityName": "西双版纳傣族自治州",
+			"county": [{
+				"countyCode": "532823",
+				"countyName": "勐腊县"
+			}, {
+				"countyCode": "532801",
+				"countyName": "景洪市"
+			}, {
+				"countyCode": "532822",
+				"countyName": "勐海县"
+			}]
+		}, {
+			"cityCode": "532600",
+			"cityName": "文山壮族苗族自治州",
+			"county": [{
+				"countyCode": "532601",
+				"countyName": "文山市"
+			}, {
+				"countyCode": "532623",
+				"countyName": "西畴县"
+			}, {
+				"countyCode": "532627",
+				"countyName": "广南县"
+			}, {
+				"countyCode": "532625",
+				"countyName": "马关县"
+			}, {
+				"countyCode": "532622",
+				"countyName": "砚山县"
+			}, {
+				"countyCode": "532628",
+				"countyName": "富宁县"
+			}, {
+				"countyCode": "532624",
+				"countyName": "麻栗坡县"
+			}, {
+				"countyCode": "532626",
+				"countyName": "丘北县"
+			}]
+		}, {
+			"cityCode": "530300",
+			"cityName": "曲靖市",
+			"county": [{
+				"countyCode": "530302",
+				"countyName": "麒麟区"
+			}, {
+				"countyCode": "530325",
+				"countyName": "富源县"
+			}, {
+				"countyCode": "530326",
+				"countyName": "会泽县"
+			}, {
+				"countyCode": "530324",
+				"countyName": "罗平县"
+			}, {
+				"countyCode": "530328",
+				"countyName": "沾益区"
+			}, {
+				"countyCode": "530323",
+				"countyName": "师宗县"
+			}, {
+				"countyCode": "530321",
+				"countyName": "马龙区"
+			}, {
+				"countyCode": "530322",
+				"countyName": "陆良县"
+			}, {
+				"countyCode": "530381",
+				"countyName": "宣威市"
+			}]
+		}, {
+			"cityCode": "533400",
+			"cityName": "迪庆藏族自治州",
+			"county": [{
+				"countyCode": "533421",
+				"countyName": "香格里拉市"
+			}, {
+				"countyCode": "533422",
+				"countyName": "德钦县"
+			}, {
+				"countyCode": "533423",
+				"countyName": "维西傈僳族自治县"
+			}]
+		}, {
+			"cityCode": "530600",
+			"cityName": "昭通市",
+			"county": [{
+				"countyCode": "530629",
+				"countyName": "威信县"
+			}, {
+				"countyCode": "530624",
+				"countyName": "大关县"
+			}, {
+				"countyCode": "530630",
+				"countyName": "水富县"
+			}, {
+				"countyCode": "530626",
+				"countyName": "绥江县"
+			}, {
+				"countyCode": "530628",
+				"countyName": "彝良县"
+			}, {
+				"countyCode": "530623",
+				"countyName": "盐津县"
+			}, {
+				"countyCode": "530602",
+				"countyName": "昭阳区"
+			}, {
+				"countyCode": "530621",
+				"countyName": "鲁甸县"
+			}, {
+				"countyCode": "530627",
+				"countyName": "镇雄县"
+			}, {
+				"countyCode": "530625",
+				"countyName": "永善县"
+			}, {
+				"countyCode": "530622",
+				"countyName": "巧家县"
+			}]
+		}, {
+			"cityCode": "533300",
+			"cityName": "怒江傈僳族自治州",
+			"county": [{
+				"countyCode": "533323",
+				"countyName": "福贡县"
+			}, {
+				"countyCode": "533324",
+				"countyName": "贡山独龙族怒族自治县"
+			}, {
+				"countyCode": "533321",
+				"countyName": "泸水市"
+			}, {
+				"countyCode": "533325",
+				"countyName": "兰坪白族普米族自治县"
+			}]
+		}, {
+			"cityCode": "530700",
+			"cityName": "丽江市",
+			"county": [{
+				"countyCode": "530724",
+				"countyName": "宁蒗彝族自治县"
+			}, {
+				"countyCode": "530722",
+				"countyName": "永胜县"
+			}, {
+				"countyCode": "530702",
+				"countyName": "古城区"
+			}, {
+				"countyCode": "530721",
+				"countyName": "玉龙纳西族自治县"
+			}, {
+				"countyCode": "530723",
+				"countyName": "华坪县"
+			}]
+		}, {
+			"cityCode": "530800",
+			"cityName": "普洱市",
+			"county": [{
+				"countyCode": "530822",
+				"countyName": "墨江哈尼族自治县"
+			}, {
+				"countyCode": "530823",
+				"countyName": "景东彝族自治县"
+			}, {
+				"countyCode": "530827",
+				"countyName": "孟连傣族拉祜族佤族自治县"
+			}, {
+				"countyCode": "530825",
+				"countyName": "镇沅彝族哈尼族拉祜族自治县"
+			}, {
+				"countyCode": "530828",
+				"countyName": "澜沧拉祜族自治县"
+			}, {
+				"countyCode": "530829",
+				"countyName": "西盟佤族自治县"
+			}, {
+				"countyCode": "530821",
+				"countyName": "宁洱哈尼族彝族自治县"
+			}, {
+				"countyCode": "530802",
+				"countyName": "思茅区"
+			}, {
+				"countyCode": "530826",
+				"countyName": "江城哈尼族彝族自治县"
+			}, {
+				"countyCode": "530824",
+				"countyName": "景谷傣族彝族自治县"
+			}]
+		}, {
+			"cityCode": "532500",
+			"cityName": "红河哈尼族彝族自治州",
+			"county": [{
+				"countyCode": "532525",
+				"countyName": "石屏县"
+			}, {
+				"countyCode": "532530",
+				"countyName": "金平苗族瑶族傣族自治县"
+			}, {
+				"countyCode": "532503",
+				"countyName": "蒙自市"
+			}, {
+				"countyCode": "532528",
+				"countyName": "元阳县"
+			}, {
+				"countyCode": "532527",
+				"countyName": "泸西县"
+			}, {
+				"countyCode": "532502",
+				"countyName": "开远市"
+			}, {
+				"countyCode": "532524",
+				"countyName": "建水县"
+			}, {
+				"countyCode": "532532",
+				"countyName": "河口瑶族自治县"
+			}, {
+				"countyCode": "532529",
+				"countyName": "红河县"
+			}, {
+				"countyCode": "532531",
+				"countyName": "绿春县"
+			}, {
+				"countyCode": "532501",
+				"countyName": "个旧市"
+			}, {
+				"countyCode": "532523",
+				"countyName": "屏边苗族自治县"
+			}, {
+				"countyCode": "532526",
+				"countyName": "弥勒市"
+			}]
+		}, {
+			"cityCode": "530500",
+			"cityName": "保山市",
+			"county": [{
+				"countyCode": "530523",
+				"countyName": "龙陵县"
+			}, {
+				"countyCode": "530522",
+				"countyName": "腾冲市"
+			}, {
+				"countyCode": "530521",
+				"countyName": "施甸县"
+			}, {
+				"countyCode": "530502",
+				"countyName": "隆阳区"
+			}, {
+				"countyCode": "530524",
+				"countyName": "昌宁县"
+			}]
+		}]
+	}, {
+		"provinceCode": "540000",
+		"provinceName": "西藏自治区",
+		"city": [{
+			"cityCode": "542100",
+			"cityName": "昌都市",
+			"county": [{
+				"countyCode": "542122",
+				"countyName": "江达县"
+			}, {
+				"countyCode": "542129",
+				"countyName": "芒康县"
+			}, {
+				"countyCode": "542128",
+				"countyName": "左贡县"
+			}, {
+				"countyCode": "542126",
+				"countyName": "察雅县"
+			}, {
+				"countyCode": "542132",
+				"countyName": "洛隆县"
+			}, {
+				"countyCode": "542121",
+				"countyName": "卡若区"
+			}, {
+				"countyCode": "542125",
+				"countyName": "丁青县"
+			}, {
+				"countyCode": "542133",
+				"countyName": "边坝县"
+			}, {
+				"countyCode": "542123",
+				"countyName": "贡觉县"
+			}, {
+				"countyCode": "542127",
+				"countyName": "八宿县"
+			}, {
+				"countyCode": "542124",
+				"countyName": "类乌齐县"
+			}]
+		}, {
+			"cityCode": "542200",
+			"cityName": "山南市",
+			"county": [{
+				"countyCode": "542229",
+				"countyName": "加查县"
+			}, {
+				"countyCode": "542225",
+				"countyName": "琼结县"
+			}, {
+				"countyCode": "542232",
+				"countyName": "错那县"
+			}, {
+				"countyCode": "542221",
+				"countyName": "乃东区"
+			}, {
+				"countyCode": "542224",
+				"countyName": "桑日县"
+			}, {
+				"countyCode": "542222",
+				"countyName": "扎囊县"
+			}, {
+				"countyCode": "542227",
+				"countyName": "措美县"
+			}, {
+				"countyCode": "542223",
+				"countyName": "贡嘎县"
+			}, {
+				"countyCode": "542228",
+				"countyName": "洛扎县"
+			}, {
+				"countyCode": "542226",
+				"countyName": "曲松县"
+			}, {
+				"countyCode": "542233",
+				"countyName": "浪卡子县"
+			}, {
+				"countyCode": "542231",
+				"countyName": "隆子县"
+			}]
+		}, {
+			"cityCode": "542400",
+			"cityName": "那曲市",
+			"county": [{
+				"countyCode": "542426",
+				"countyName": "申扎县"
+			}, {
+				"countyCode": "542423",
+				"countyName": "比如县"
+			}, {
+				"countyCode": "542430",
+				"countyName": "尼玛县"
+			}, {
+				"countyCode": "542421",
+				"countyName": "色尼区"
+			}, {
+				"countyCode": "542422",
+				"countyName": "嘉黎县"
+			}, {
+				"countyCode": "542424",
+				"countyName": "聂荣县"
+			}, {
+				"countyCode": "542427",
+				"countyName": "索县"
+			}, {
+				"countyCode": "542425",
+				"countyName": "安多县"
+			}, {
+				"countyCode": "542428",
+				"countyName": "班戈县"
+			}, {
+				"countyCode": "542429",
+				"countyName": "巴青县"
+			}]
+		}, {
+			"cityCode": "542600",
+			"cityName": "林芝市",
+			"county": [{
+				"countyCode": "542623",
+				"countyName": "米林县"
+			}, {
+				"countyCode": "542626",
+				"countyName": "察隅县"
+			}, {
+				"countyCode": "542627",
+				"countyName": "朗县"
+			}, {
+				"countyCode": "542622",
+				"countyName": "工布江达县"
+			}, {
+				"countyCode": "542625",
+				"countyName": "波密县"
+			}, {
+				"countyCode": "542624",
+				"countyName": "墨脱县"
+			}, {
+				"countyCode": "542621",
+				"countyName": "巴宜区"
+			}]
+		}, {
+			"cityCode": "540100",
+			"cityName": "拉萨市",
+			"county": [{
+				"countyCode": "540121",
+				"countyName": "林周县"
+			}, {
+				"countyCode": "540124",
+				"countyName": "曲水县"
+			}, {
+				"countyCode": "540126",
+				"countyName": "达孜区"
+			}, {
+				"countyCode": "540125",
+				"countyName": "堆龙德庆区"
+			}, {
+				"countyCode": "540122",
+				"countyName": "当雄县"
+			}, {
+				"countyCode": "540127",
+				"countyName": "墨竹工卡县"
+			}, {
+				"countyCode": "540123",
+				"countyName": "尼木县"
+			}, {
+				"countyCode": "540102",
+				"countyName": "城关区"
+			}]
+		}, {
+			"cityCode": "542300",
+			"cityName": "日喀则市",
+			"county": [{
+				"countyCode": "542335",
+				"countyName": "吉隆县"
+			}, {
+				"countyCode": "542323",
+				"countyName": "江孜县"
+			}, {
+				"countyCode": "542331",
+				"countyName": "康马县"
+			}, {
+				"countyCode": "542322",
+				"countyName": "南木林县"
+			}, {
+				"countyCode": "542338",
+				"countyName": "岗巴县"
+			}, {
+				"countyCode": "542336",
+				"countyName": "聂拉木县"
+			}, {
+				"countyCode": "542328",
+				"countyName": "谢通门县"
+			}, {
+				"countyCode": "542325",
+				"countyName": "萨迦县"
+			}, {
+				"countyCode": "542329",
+				"countyName": "白朗县"
+			}, {
+				"countyCode": "542326",
+				"countyName": "拉孜县"
+			}, {
+				"countyCode": "542332",
+				"countyName": "定结县"
+			}, {
+				"countyCode": "542327",
+				"countyName": "昂仁县"
+			}, {
+				"countyCode": "542334",
+				"countyName": "亚东县"
+			}, {
+				"countyCode": "542337",
+				"countyName": "萨嘎县"
+			}, {
+				"countyCode": "542324",
+				"countyName": "定日县"
+			}, {
+				"countyCode": "542333",
+				"countyName": "仲巴县"
+			}, {
+				"countyCode": "542301",
+				"countyName": "桑珠孜区"
+			}, {
+				"countyCode": "542330",
+				"countyName": "仁布县"
+			}]
+		}, {
+			"cityCode": "542500",
+			"cityName": "阿里地区",
+			"county": [{
+				"countyCode": "542523",
+				"countyName": "噶尔县"
+			}, {
+				"countyCode": "542525",
+				"countyName": "革吉县"
+			}, {
+				"countyCode": "542524",
+				"countyName": "日土县"
+			}, {
+				"countyCode": "542527",
+				"countyName": "措勤县"
+			}, {
+				"countyCode": "542521",
+				"countyName": "普兰县"
+			}, {
+				"countyCode": "542526",
+				"countyName": "改则县"
+			}, {
+				"countyCode": "542522",
+				"countyName": "札达县"
+			}]
+		}]
+	}, {
+		"provinceCode": "610000",
+		"provinceName": "陕西省",
+		"city": [{
+			"cityCode": "610800",
+			"cityName": "榆林市",
+			"county": [{
+				"countyCode": "610831",
+				"countyName": "子洲县"
+			}, {
+				"countyCode": "610825",
+				"countyName": "定边县"
+			}, {
+				"countyCode": "610827",
+				"countyName": "米脂县"
+			}, {
+				"countyCode": "610821",
+				"countyName": "神木市"
+			}, {
+				"countyCode": "610829",
+				"countyName": "吴堡县"
+			}, {
+				"countyCode": "610822",
+				"countyName": "府谷县"
+			}, {
+				"countyCode": "610830",
+				"countyName": "清涧县"
+			}, {
+				"countyCode": "610823",
+				"countyName": "横山区"
+			}, {
+				"countyCode": "610824",
+				"countyName": "靖边县"
+			}, {
+				"countyCode": "610826",
+				"countyName": "绥德县"
+			}, {
+				"countyCode": "610802",
+				"countyName": "榆阳区"
+			}, {
+				"countyCode": "610828",
+				"countyName": "佳县"
+			}]
+		}, {
+			"cityCode": "610200",
+			"cityName": "铜川市",
+			"county": [{
+				"countyCode": "610202",
+				"countyName": "王益区"
+			}, {
+				"countyCode": "610203",
+				"countyName": "印台区"
+			}, {
+				"countyCode": "610204",
+				"countyName": "耀州区"
+			}, {
+				"countyCode": "610222",
+				"countyName": "宜君县"
+			}]
+		}, {
+			"cityCode": "611000",
+			"cityName": "商洛市",
+			"county": [{
+				"countyCode": "611022",
+				"countyName": "丹凤县"
+			}, {
+				"countyCode": "611023",
+				"countyName": "商南县"
+			}, {
+				"countyCode": "611026",
+				"countyName": "柞水县"
+			}, {
+				"countyCode": "611025",
+				"countyName": "镇安县"
+			}, {
+				"countyCode": "611024",
+				"countyName": "山阳县"
+			}, {
+				"countyCode": "611021",
+				"countyName": "洛南县"
+			}, {
+				"countyCode": "611002",
+				"countyName": "商州区"
+			}]
+		}, {
+			"cityCode": "610500",
+			"cityName": "渭南市",
+			"county": [{
+				"countyCode": "610582",
+				"countyName": "华阴市"
+			}, {
+				"countyCode": "610524",
+				"countyName": "合阳县"
+			}, {
+				"countyCode": "610521",
+				"countyName": "华州区"
+			}, {
+				"countyCode": "610581",
+				"countyName": "韩城市"
+			}, {
+				"countyCode": "610526",
+				"countyName": "蒲城县"
+			}, {
+				"countyCode": "610527",
+				"countyName": "白水县"
+			}, {
+				"countyCode": "610522",
+				"countyName": "潼关县"
+			}, {
+				"countyCode": "610528",
+				"countyName": "富平县"
+			}, {
+				"countyCode": "610523",
+				"countyName": "大荔县"
+			}, {
+				"countyCode": "610502",
+				"countyName": "临渭区"
+			}, {
+				"countyCode": "610525",
+				"countyName": "澄城县"
+			}]
+		}, {
+			"cityCode": "610300",
+			"cityName": "宝鸡市",
+			"county": [{
+				"countyCode": "610328",
+				"countyName": "千阳县"
+			}, {
+				"countyCode": "610330",
+				"countyName": "凤县"
+			}, {
+				"countyCode": "610329",
+				"countyName": "麟游县"
+			}, {
+				"countyCode": "610323",
+				"countyName": "岐山县"
+			}, {
+				"countyCode": "610302",
+				"countyName": "渭滨区"
+			}, {
+				"countyCode": "610327",
+				"countyName": "陇县"
+			}, {
+				"countyCode": "610322",
+				"countyName": "凤翔县"
+			}, {
+				"countyCode": "610324",
+				"countyName": "扶风县"
+			}, {
+				"countyCode": "610304",
+				"countyName": "陈仓区"
+			}, {
+				"countyCode": "610303",
+				"countyName": "金台区"
+			}, {
+				"countyCode": "610326",
+				"countyName": "眉县"
+			}, {
+				"countyCode": "610331",
+				"countyName": "太白县"
+			}]
+		}, {
+			"cityCode": "610900",
+			"cityName": "安康市",
+			"county": [{
+				"countyCode": "610927",
+				"countyName": "镇坪县"
+			}, {
+				"countyCode": "610923",
+				"countyName": "宁陕县"
+			}, {
+				"countyCode": "610922",
+				"countyName": "石泉县"
+			}, {
+				"countyCode": "610921",
+				"countyName": "汉阴县"
+			}, {
+				"countyCode": "610925",
+				"countyName": "岚皋县"
+			}, {
+				"countyCode": "610926",
+				"countyName": "平利县"
+			}, {
+				"countyCode": "610928",
+				"countyName": "旬阳县"
+			}, {
+				"countyCode": "610929",
+				"countyName": "白河县"
+			}, {
+				"countyCode": "610902",
+				"countyName": "汉滨区"
+			}, {
+				"countyCode": "610924",
+				"countyName": "紫阳县"
+			}]
+		}, {
+			"cityCode": "610700",
+			"cityName": "汉中市",
+			"county": [{
+				"countyCode": "610724",
+				"countyName": "西乡县"
+			}, {
+				"countyCode": "610721",
+				"countyName": "南郑区"
+			}, {
+				"countyCode": "610722",
+				"countyName": "城固县"
+			}, {
+				"countyCode": "610727",
+				"countyName": "略阳县"
+			}, {
+				"countyCode": "610728",
+				"countyName": "镇巴县"
+			}, {
+				"countyCode": "610702",
+				"countyName": "汉台区"
+			}, {
+				"countyCode": "610729",
+				"countyName": "留坝县"
+			}, {
+				"countyCode": "610723",
+				"countyName": "洋县"
+			}, {
+				"countyCode": "610730",
+				"countyName": "佛坪县"
+			}, {
+				"countyCode": "610726",
+				"countyName": "宁强县"
+			}, {
+				"countyCode": "610725",
+				"countyName": "勉县"
+			}]
+		}, {
+			"cityCode": "610600",
+			"cityName": "延安市",
+			"county": [{
+				"countyCode": "610628",
+				"countyName": "富县"
+			}, {
+				"countyCode": "610631",
+				"countyName": "黄龙县"
+			}, {
+				"countyCode": "610602",
+				"countyName": "宝塔区"
+			}, {
+				"countyCode": "610630",
+				"countyName": "宜川县"
+			}, {
+				"countyCode": "610624",
+				"countyName": "安塞区"
+			}, {
+				"countyCode": "610629",
+				"countyName": "洛川县"
+			}, {
+				"countyCode": "610621",
+				"countyName": "延长县"
+			}, {
+				"countyCode": "610632",
+				"countyName": "黄陵县"
+			}, {
+				"countyCode": "610626",
+				"countyName": "吴起县"
+			}, {
+				"countyCode": "610623",
+				"countyName": "子长县"
+			}, {
+				"countyCode": "610627",
+				"countyName": "甘泉县"
+			}, {
+				"countyCode": "610625",
+				"countyName": "志丹县"
+			}, {
+				"countyCode": "610622",
+				"countyName": "延川县"
+			}]
+		}, {
+			"cityCode": "610100",
+			"cityName": "西安市",
+			"county": [{
+				"countyCode": "610116",
+				"countyName": "长安区"
+			}, {
+				"countyCode": "610112",
+				"countyName": "未央区"
+			}, {
+				"countyCode": "610102",
+				"countyName": "新城区"
+			}, {
+				"countyCode": "610114",
+				"countyName": "阎良区"
+			}, {
+				"countyCode": "610111",
+				"countyName": "灞桥区"
+			}, {
+				"countyCode": "610126",
+				"countyName": "高陵区"
+			}, {
+				"countyCode": "610122",
+				"countyName": "蓝田县"
+			}, {
+				"countyCode": "610103",
+				"countyName": "碑林区"
+			}, {
+				"countyCode": "610115",
+				"countyName": "临潼区"
+			}, {
+				"countyCode": "610113",
+				"countyName": "雁塔区"
+			}, {
+				"countyCode": "610124",
+				"countyName": "周至县"
+			}, {
+				"countyCode": "610104",
+				"countyName": "莲湖区"
+			}, {
+				"countyCode": "610125",
+				"countyName": "鄠邑区"
+			}]
+		}, {
+			"cityCode": "610400",
+			"cityName": "咸阳市",
+			"county": [{
+				"countyCode": "610430",
+				"countyName": "淳化县"
+			}, {
+				"countyCode": "610423",
+				"countyName": "泾阳县"
+			}, {
+				"countyCode": "610481",
+				"countyName": "兴平市"
+			}, {
+				"countyCode": "610422",
+				"countyName": "三原县"
+			}, {
+				"countyCode": "610424",
+				"countyName": "乾县"
+			}, {
+				"countyCode": "610426",
+				"countyName": "永寿县"
+			}, {
+				"countyCode": "610427",
+				"countyName": "彬州市"
+			}, {
+				"countyCode": "610402",
+				"countyName": "秦都区"
+			}, {
+				"countyCode": "610404",
+				"countyName": "渭城区"
+			}, {
+				"countyCode": "610403",
+				"countyName": "杨陵区"
+			}, {
+				"countyCode": "610431",
+				"countyName": "武功县"
+			}, {
+				"countyCode": "610428",
+				"countyName": "长武县"
+			}, {
+				"countyCode": "610425",
+				"countyName": "礼泉县"
+			}, {
+				"countyCode": "610429",
+				"countyName": "旬邑县"
+			}]
+		}]
+	}, {
+		"provinceCode": "620000",
+		"provinceName": "甘肃省",
+		"city": [{
+			"cityCode": "620500",
+			"cityName": "天水市",
+			"county": [{
+				"countyCode": "620524",
+				"countyName": "武山县"
+			}, {
+				"countyCode": "620502",
+				"countyName": "秦州区"
+			}, {
+				"countyCode": "620521",
+				"countyName": "清水县"
+			}, {
+				"countyCode": "620523",
+				"countyName": "甘谷县"
+			}, {
+				"countyCode": "620522",
+				"countyName": "秦安县"
+			}, {
+				"countyCode": "620503",
+				"countyName": "麦积区"
+			}, {
+				"countyCode": "620525",
+				"countyName": "张家川回族自治县"
+			}]
+		}, {
+			"cityCode": "620300",
+			"cityName": "金昌市",
+			"county": [{
+				"countyCode": "620302",
+				"countyName": "金川区"
+			}, {
+				"countyCode": "620321",
+				"countyName": "永昌县"
+			}]
+		}, {
+			"cityCode": "620600",
+			"cityName": "武威市",
+			"county": [{
+				"countyCode": "620602",
+				"countyName": "凉州区"
+			}, {
+				"countyCode": "620623",
+				"countyName": "天祝藏族自治县"
+			}, {
+				"countyCode": "620622",
+				"countyName": "古浪县"
+			}, {
+				"countyCode": "620621",
+				"countyName": "民勤县"
+			}]
+		}, {
+			"cityCode": "620700",
+			"cityName": "张掖市",
+			"county": [{
+				"countyCode": "620702",
+				"countyName": "甘州区"
+			}, {
+				"countyCode": "620724",
+				"countyName": "高台县"
+			}, {
+				"countyCode": "620725",
+				"countyName": "山丹县"
+			}, {
+				"countyCode": "620723",
+				"countyName": "临泽县"
+			}, {
+				"countyCode": "620722",
+				"countyName": "民乐县"
+			}, {
+				"countyCode": "620721",
+				"countyName": "肃南裕固族自治县"
+			}]
+		}, {
+			"cityCode": "621200",
+			"cityName": "陇南市",
+			"county": [{
+				"countyCode": "621225",
+				"countyName": "西和县"
+			}, {
+				"countyCode": "621223",
+				"countyName": "宕昌县"
+			}, {
+				"countyCode": "621227",
+				"countyName": "徽县"
+			}, {
+				"countyCode": "621224",
+				"countyName": "康县"
+			}, {
+				"countyCode": "621221",
+				"countyName": "成县"
+			}, {
+				"countyCode": "621228",
+				"countyName": "两当县"
+			}, {
+				"countyCode": "621226",
+				"countyName": "礼县"
+			}, {
+				"countyCode": "621222",
+				"countyName": "文县"
+			}, {
+				"countyCode": "621202",
+				"countyName": "武都区"
+			}]
+		}, {
+			"cityCode": "620100",
+			"cityName": "兰州市",
+			"county": [{
+				"countyCode": "620121",
+				"countyName": "永登县"
+			}, {
+				"countyCode": "620111",
+				"countyName": "红古区"
+			}, {
+				"countyCode": "620103",
+				"countyName": "七里河区"
+			}, {
+				"countyCode": "620122",
+				"countyName": "皋兰县"
+			}, {
+				"countyCode": "620104",
+				"countyName": "西固区"
+			}, {
+				"countyCode": "620102",
+				"countyName": "城关区"
+			}, {
+				"countyCode": "620105",
+				"countyName": "安宁区"
+			}, {
+				"countyCode": "620123",
+				"countyName": "榆中县"
+			}]
+		}, {
+			"cityCode": "621000",
+			"cityName": "庆阳市",
+			"county": [{
+				"countyCode": "621025",
+				"countyName": "正宁县"
+			}, {
+				"countyCode": "621026",
+				"countyName": "宁县"
+			}, {
+				"countyCode": "621027",
+				"countyName": "镇原县"
+			}, {
+				"countyCode": "621023",
+				"countyName": "华池县"
+			}, {
+				"countyCode": "621002",
+				"countyName": "西峰区"
+			}, {
+				"countyCode": "621024",
+				"countyName": "合水县"
+			}, {
+				"countyCode": "621022",
+				"countyName": "环县"
+			}, {
+				"countyCode": "621021",
+				"countyName": "庆城县"
+			}]
+		}, {
+			"cityCode": "620200",
+			"cityName": "嘉峪关市",
+			"county": [{
+				"countyCode": "620200-1",
+				"countyName": "嘉峪关市"
+			}]
+		}, {
+			"cityCode": "620800",
+			"cityName": "平凉市",
+			"county": [{
+				"countyCode": "620826",
+				"countyName": "静宁县"
+			}, {
+				"countyCode": "620822",
+				"countyName": "灵台县"
+			}, {
+				"countyCode": "620823",
+				"countyName": "崇信县"
+			}, {
+				"countyCode": "620825",
+				"countyName": "庄浪县"
+			}, {
+				"countyCode": "620824",
+				"countyName": "华亭县"
+			}, {
+				"countyCode": "620821",
+				"countyName": "泾川县"
+			}, {
+				"countyCode": "620802",
+				"countyName": "崆峒区"
+			}]
+		}, {
+			"cityCode": "623000",
+			"cityName": "甘南藏族自治州",
+			"county": [{
+				"countyCode": "623024",
+				"countyName": "迭部县"
+			}, {
+				"countyCode": "623026",
+				"countyName": "碌曲县"
+			}, {
+				"countyCode": "623022",
+				"countyName": "卓尼县"
+			}, {
+				"countyCode": "623021",
+				"countyName": "临潭县"
+			}, {
+				"countyCode": "623025",
+				"countyName": "玛曲县"
+			}, {
+				"countyCode": "623001",
+				"countyName": "合作市"
+			}, {
+				"countyCode": "623027",
+				"countyName": "夏河县"
+			}, {
+				"countyCode": "623023",
+				"countyName": "舟曲县"
+			}]
+		}, {
+			"cityCode": "620400",
+			"cityName": "白银市",
+			"county": [{
+				"countyCode": "620422",
+				"countyName": "会宁县"
+			}, {
+				"countyCode": "620403",
+				"countyName": "平川区"
+			}, {
+				"countyCode": "620423",
+				"countyName": "景泰县"
+			}, {
+				"countyCode": "620421",
+				"countyName": "靖远县"
+			}, {
+				"countyCode": "620402",
+				"countyName": "白银区"
+			}]
+		}, {
+			"cityCode": "620900",
+			"cityName": "酒泉市",
+			"county": [{
+				"countyCode": "620921",
+				"countyName": "金塔县"
+			}, {
+				"countyCode": "620924",
+				"countyName": "阿克塞哈萨克族自治县"
+			}, {
+				"countyCode": "620923",
+				"countyName": "肃北蒙古族自治县"
+			}, {
+				"countyCode": "620922",
+				"countyName": "瓜州县"
+			}, {
+				"countyCode": "620981",
+				"countyName": "玉门市"
+			}, {
+				"countyCode": "620902",
+				"countyName": "肃州区"
+			}, {
+				"countyCode": "620982",
+				"countyName": "敦煌市"
+			}]
+		}, {
+			"cityCode": "621100",
+			"cityName": "定西市",
+			"county": [{
+				"countyCode": "621122",
+				"countyName": "陇西县"
+			}, {
+				"countyCode": "621123",
+				"countyName": "渭源县"
+			}, {
+				"countyCode": "621125",
+				"countyName": "漳县"
+			}, {
+				"countyCode": "621124",
+				"countyName": "临洮县"
+			}, {
+				"countyCode": "621121",
+				"countyName": "通渭县"
+			}, {
+				"countyCode": "621126",
+				"countyName": "岷县"
+			}, {
+				"countyCode": "621102",
+				"countyName": "安定区"
+			}]
+		}, {
+			"cityCode": "622900",
+			"cityName": "临夏回族自治州",
+			"county": [{
+				"countyCode": "622921",
+				"countyName": "临夏县"
+			}, {
+				"countyCode": "622925",
+				"countyName": "和政县"
+			}, {
+				"countyCode": "622924",
+				"countyName": "广河县"
+			}, {
+				"countyCode": "622901",
+				"countyName": "临夏市"
+			}, {
+				"countyCode": "622926",
+				"countyName": "东乡族自治县"
+			}, {
+				"countyCode": "622923",
+				"countyName": "永靖县"
+			}, {
+				"countyCode": "622927",
+				"countyName": "积石山保安族东乡族撒拉族自治县"
+			}, {
+				"countyCode": "622922",
+				"countyName": "康乐县"
+			}]
+		}]
+	}, {
+		"provinceCode": "630000",
+		"provinceName": "青海省",
+		"city": [{
+			"cityCode": "632200",
+			"cityName": "海北藏族自治州",
+			"county": [{
+				"countyCode": "632224",
+				"countyName": "刚察县"
+			}, {
+				"countyCode": "632222",
+				"countyName": "祁连县"
+			}, {
+				"countyCode": "632223",
+				"countyName": "海晏县"
+			}, {
+				"countyCode": "632221",
+				"countyName": "门源回族自治县"
+			}]
+		}, {
+			"cityCode": "632500",
+			"cityName": "海南藏族自治州",
+			"county": [{
+				"countyCode": "632522",
+				"countyName": "同德县"
+			}, {
+				"countyCode": "632525",
+				"countyName": "贵南县"
+			}, {
+				"countyCode": "632524",
+				"countyName": "兴海县"
+			}, {
+				"countyCode": "632523",
+				"countyName": "贵德县"
+			}, {
+				"countyCode": "632521",
+				"countyName": "共和县"
+			}]
+		}, {
+			"cityCode": "630100",
+			"cityName": "西宁市",
+			"county": [{
+				"countyCode": "630102",
+				"countyName": "城东区"
+			}, {
+				"countyCode": "630122",
+				"countyName": "湟中县"
+			}, {
+				"countyCode": "630105",
+				"countyName": "城北区"
+			}, {
+				"countyCode": "630121",
+				"countyName": "大通回族土族自治县"
+			}, {
+				"countyCode": "630103",
+				"countyName": "城中区"
+			}, {
+				"countyCode": "630104",
+				"countyName": "城西区"
+			}, {
+				"countyCode": "630123",
+				"countyName": "湟源县"
+			}]
+		}, {
+			"cityCode": "632700",
+			"cityName": "玉树藏族自治州",
+			"county": [{
+				"countyCode": "632726",
+				"countyName": "曲麻莱县"
+			}, {
+				"countyCode": "632721",
+				"countyName": "玉树市"
+			}, {
+				"countyCode": "632723",
+				"countyName": "称多县"
+			}, {
+				"countyCode": "632722",
+				"countyName": "杂多县"
+			}, {
+				"countyCode": "632725",
+				"countyName": "囊谦县"
+			}, {
+				"countyCode": "632724",
+				"countyName": "治多县"
+			}]
+		}, {
+			"cityCode": "632800",
+			"cityName": "海西蒙古族藏族自治州",
+			"county": [{
+				"countyCode": "632801",
+				"countyName": "格尔木市"
+			}, {
+				"countyCode": "632823",
+				"countyName": "天峻县"
+			}, {
+				"countyCode": "632802",
+				"countyName": "德令哈市"
+			}, {
+				"countyCode": "632822",
+				"countyName": "都兰县"
+			}, {
+				"countyCode": "632821",
+				"countyName": "乌兰县"
+			}, {
+				"countyCode": "632803",
+				"countyName": "茫崖市"
+			}]
+		}, {
+			"cityCode": "632100",
+			"cityName": "海东市",
+			"county": [{
+				"countyCode": "632128",
+				"countyName": "循化撒拉族自治县"
+			}, {
+				"countyCode": "632126",
+				"countyName": "互助土族自治县"
+			}, {
+				"countyCode": "632127",
+				"countyName": "化隆回族自治县"
+			}, {
+				"countyCode": "632122",
+				"countyName": "民和回族土族自治县"
+			}, {
+				"countyCode": "632121",
+				"countyName": "平安区"
+			}, {
+				"countyCode": "632123",
+				"countyName": "乐都区"
+			}]
+		}, {
+			"cityCode": "632300",
+			"cityName": "黄南藏族自治州",
+			"county": [{
+				"countyCode": "632322",
+				"countyName": "尖扎县"
+			}, {
+				"countyCode": "632323",
+				"countyName": "泽库县"
+			}, {
+				"countyCode": "632324",
+				"countyName": "河南蒙古族自治县"
+			}, {
+				"countyCode": "632321",
+				"countyName": "同仁县"
+			}]
+		}, {
+			"cityCode": "632600",
+			"cityName": "果洛藏族自治州",
+			"county": [{
+				"countyCode": "632625",
+				"countyName": "久治县"
+			}, {
+				"countyCode": "632623",
+				"countyName": "甘德县"
+			}, {
+				"countyCode": "632622",
+				"countyName": "班玛县"
+			}, {
+				"countyCode": "632626",
+				"countyName": "玛多县"
+			}, {
+				"countyCode": "632624",
+				"countyName": "达日县"
+			}, {
+				"countyCode": "632621",
+				"countyName": "玛沁县"
+			}]
+		}]
+	}, {
+		"provinceCode": "640000",
+		"provinceName": "宁夏回族自治区",
+		"city": [{
+			"cityCode": "640200",
+			"cityName": "石嘴山市",
+			"county": [{
+				"countyCode": "640205",
+				"countyName": "惠农区"
+			}, {
+				"countyCode": "640202",
+				"countyName": "大武口区"
+			}, {
+				"countyCode": "640221",
+				"countyName": "平罗县"
+			}]
+		}, {
+			"cityCode": "640300",
+			"cityName": "吴忠市",
+			"county": [{
+				"countyCode": "640323",
+				"countyName": "盐池县"
+			}, {
+				"countyCode": "640381",
+				"countyName": "青铜峡市"
+			}, {
+				"countyCode": "640302",
+				"countyName": "利通区"
+			}, {
+				"countyCode": "640303",
+				"countyName": "红寺堡区"
+			}, {
+				"countyCode": "640324",
+				"countyName": "同心县"
+			}]
+		}, {
+			"cityCode": "640500",
+			"cityName": "中卫市",
+			"county": [{
+				"countyCode": "640522",
+				"countyName": "海原县"
+			}, {
+				"countyCode": "640502",
+				"countyName": "沙坡头区"
+			}, {
+				"countyCode": "640521",
+				"countyName": "中宁县"
+			}]
+		}, {
+			"cityCode": "640400",
+			"cityName": "固原市",
+			"county": [{
+				"countyCode": "640402",
+				"countyName": "原州区"
+			}, {
+				"countyCode": "640423",
+				"countyName": "隆德县"
+			}, {
+				"countyCode": "640424",
+				"countyName": "泾源县"
+			}, {
+				"countyCode": "640422",
+				"countyName": "西吉县"
+			}, {
+				"countyCode": "640425",
+				"countyName": "彭阳县"
+			}]
+		}, {
+			"cityCode": "640100",
+			"cityName": "银川市",
+			"county": [{
+				"countyCode": "640106",
+				"countyName": "金凤区"
+			}, {
+				"countyCode": "640105",
+				"countyName": "西夏区"
+			}, {
+				"countyCode": "640122",
+				"countyName": "贺兰县"
+			}, {
+				"countyCode": "640104",
+				"countyName": "兴庆区"
+			}, {
+				"countyCode": "640181",
+				"countyName": "灵武市"
+			}, {
+				"countyCode": "640121",
+				"countyName": "永宁县"
+			}]
+		}]
+	}, {
+		"provinceCode": "650000",
+		"provinceName": "新疆维吾尔自治区",
+		"city": [{
+			"cityCode": "650200",
+			"cityName": "克拉玛依市",
+			"county": [{
+				"countyCode": "650203",
+				"countyName": "克拉玛依区"
+			}, {
+				"countyCode": "650205",
+				"countyName": "乌尔禾区"
+			}, {
+				"countyCode": "650202",
+				"countyName": "独山子区"
+			}, {
+				"countyCode": "650204",
+				"countyName": "白碱滩区"
+			}]
+		}, {
+			"cityCode": "652800",
+			"cityName": "巴音郭楞蒙古自治州",
+			"county": [{
+				"countyCode": "652829",
+				"countyName": "博湖县"
+			}, {
+				"countyCode": "652824",
+				"countyName": "若羌县"
+			}, {
+				"countyCode": "652826",
+				"countyName": "焉耆回族自治县"
+			}, {
+				"countyCode": "652823",
+				"countyName": "尉犁县"
+			}, {
+				"countyCode": "652822",
+				"countyName": "轮台县"
+			}, {
+				"countyCode": "652825",
+				"countyName": "且末县"
+			}, {
+				"countyCode": "652801",
+				"countyName": "库尔勒市"
+			}, {
+				"countyCode": "652827",
+				"countyName": "和静县"
+			}, {
+				"countyCode": "652828",
+				"countyName": "和硕县"
+			}]
+		}, {
+			"cityCode": "654200",
+			"cityName": "塔城地区",
+			"county": [{
+				"countyCode": "654223",
+				"countyName": "沙湾县"
+			}, {
+				"countyCode": "654201",
+				"countyName": "塔城市"
+			}, {
+				"countyCode": "654226",
+				"countyName": "和布克赛尔蒙古自治县"
+			}, {
+				"countyCode": "654202",
+				"countyName": "乌苏市"
+			}, {
+				"countyCode": "654224",
+				"countyName": "托里县"
+			}, {
+				"countyCode": "654221",
+				"countyName": "额敏县"
+			}, {
+				"countyCode": "654225",
+				"countyName": "裕民县"
+			}]
+		}, {
+			"cityCode": "652200",
+			"cityName": "哈密市",
+			"county": [{
+				"countyCode": "652222",
+				"countyName": "巴里坤哈萨克自治县"
+			}, {
+				"countyCode": "652201",
+				"countyName": "伊州区"
+			}, {
+				"countyCode": "652223",
+				"countyName": "伊吾县"
+			}]
+		}, {
+			"cityCode": "654000",
+			"cityName": "伊犁哈萨克自治州",
+			"county": [{
+				"countyCode": "654027",
+				"countyName": "特克斯县"
+			}, {
+				"countyCode": "654024",
+				"countyName": "巩留县"
+			}, {
+				"countyCode": "654022",
+				"countyName": "察布查尔锡伯自治县"
+			}, {
+				"countyCode": "654004",
+				"countyName": "霍尔果斯市"
+			}, {
+				"countyCode": "654023",
+				"countyName": "霍城县"
+			}, {
+				"countyCode": "654028",
+				"countyName": "尼勒克县"
+			}, {
+				"countyCode": "654003",
+				"countyName": "奎屯市"
+			}, {
+				"countyCode": "654021",
+				"countyName": "伊宁县"
+			}, {
+				"countyCode": "654025",
+				"countyName": "新源县"
+			}, {
+				"countyCode": "654002",
+				"countyName": "伊宁市"
+			}, {
+				"countyCode": "654026",
+				"countyName": "昭苏县"
+			}]
+		}, {
+			"cityCode": "654300",
+			"cityName": "阿勒泰地区",
+			"county": [{
+				"countyCode": "654325",
+				"countyName": "青河县"
+			}, {
+				"countyCode": "654326",
+				"countyName": "吉木乃县"
+			}, {
+				"countyCode": "654321",
+				"countyName": "布尔津县"
+			}, {
+				"countyCode": "654323",
+				"countyName": "福海县"
+			}, {
+				"countyCode": "654301",
+				"countyName": "阿勒泰市"
+			}, {
+				"countyCode": "654322",
+				"countyName": "富蕴县"
+			}, {
+				"countyCode": "654324",
+				"countyName": "哈巴河县"
+			}]
+		}, {
+			"cityCode": "652100",
+			"cityName": "吐鲁番市",
+			"county": [{
+				"countyCode": "652122",
+				"countyName": "鄯善县"
+			}, {
+				"countyCode": "652101",
+				"countyName": "高昌区"
+			}, {
+				"countyCode": "652123",
+				"countyName": "托克逊县"
+			}]
+		}, {
+			"cityCode": "650100",
+			"cityName": "乌鲁木齐市",
+			"county": [{
+				"countyCode": "650121",
+				"countyName": "乌鲁木齐县"
+			}, {
+				"countyCode": "650109",
+				"countyName": "米东区"
+			}, {
+				"countyCode": "650103",
+				"countyName": "沙依巴克区"
+			}, {
+				"countyCode": "650105",
+				"countyName": "水磨沟区"
+			}, {
+				"countyCode": "650107",
+				"countyName": "达坂城区"
+			}, {
+				"countyCode": "650104",
+				"countyName": "新市区"
+			}, {
+				"countyCode": "650102",
+				"countyName": "天山区"
+			}, {
+				"countyCode": "650106",
+				"countyName": "头屯河区"
+			}]
+		}, {
+			"cityCode": "659002",
+			"cityName": "阿拉尔市",
+			"county": [{
+				"countyCode": "659002-1",
+				"countyName": "阿拉尔市"
+			}]
+		}, {
+			"cityCode": "653200",
+			"cityName": "和田地区",
+			"county": [{
+				"countyCode": "653222",
+				"countyName": "墨玉县"
+			}, {
+				"countyCode": "653226",
+				"countyName": "于田县"
+			}, {
+				"countyCode": "653223",
+				"countyName": "皮山县"
+			}, {
+				"countyCode": "653221",
+				"countyName": "和田县"
+			}, {
+				"countyCode": "653224",
+				"countyName": "洛浦县"
+			}, {
+				"countyCode": "653225",
+				"countyName": "策勒县"
+			}, {
+				"countyCode": "653227",
+				"countyName": "民丰县"
+			}, {
+				"countyCode": "653201",
+				"countyName": "和田市"
+			}]
+		}, {
+			"cityCode": "659003",
+			"cityName": "图木舒克市",
+			"county": [{
+				"countyCode": "659003-1",
+				"countyName": "图木舒克市"
+			}]
+		}, {
+			"cityCode": "695005",
+			"cityName": "北屯市",
+			"county": [{
+				"countyCode": "695005-1",
+				"countyName": "北屯市"
+			}]
+		}, {
+			"cityCode": "652300",
+			"cityName": "昌吉回族自治州",
+			"county": [{
+				"countyCode": "652302",
+				"countyName": "阜康市"
+			}, {
+				"countyCode": "652324",
+				"countyName": "玛纳斯县"
+			}, {
+				"countyCode": "652325",
+				"countyName": "奇台县"
+			}, {
+				"countyCode": "652323",
+				"countyName": "呼图壁县"
+			}, {
+				"countyCode": "652301",
+				"countyName": "昌吉市"
+			}, {
+				"countyCode": "652327",
+				"countyName": "吉木萨尔县"
+			}, {
+				"countyCode": "652328",
+				"countyName": "木垒哈萨克自治县"
+			}, {
+				"countyCode": "652303",
+				"countyName": "准东开发区"
+			}]
+		}, {
+			"cityCode": "653100",
+			"cityName": "喀什地区",
+			"county": [{
+				"countyCode": "653128",
+				"countyName": "岳普湖县"
+			}, {
+				"countyCode": "653129",
+				"countyName": "伽师县"
+			}, {
+				"countyCode": "653126",
+				"countyName": "叶城县"
+			}, {
+				"countyCode": "653122",
+				"countyName": "疏勒县"
+			}, {
+				"countyCode": "653124",
+				"countyName": "泽普县"
+			}, {
+				"countyCode": "653121",
+				"countyName": "疏附县"
+			}, {
+				"countyCode": "653131",
+				"countyName": "塔什库尔干塔吉克自治县"
+			}, {
+				"countyCode": "653130",
+				"countyName": "巴楚县"
+			}, {
+				"countyCode": "653123",
+				"countyName": "英吉沙县"
+			}, {
+				"countyCode": "653127",
+				"countyName": "麦盖提县"
+			}, {
+				"countyCode": "653125",
+				"countyName": "莎车县"
+			}, {
+				"countyCode": "653101",
+				"countyName": "喀什市"
+			}]
+		}, {
+			"cityCode": "659001",
+			"cityName": "石河子市",
+			"county": [{
+				"countyCode": "659001-1",
+				"countyName": "石河子市"
+			}]
+		}, {
+			"cityCode": "695006",
+			"cityName": "铁门关市",
+			"county": [{
+				"countyCode": "695006-1",
+				"countyName": "铁门关市"
+			}]
+		}, {
+			"cityCode": "652900",
+			"cityName": "阿克苏地区",
+			"county": [{
+				"countyCode": "652901",
+				"countyName": "阿克苏市"
+			}, {
+				"countyCode": "652922",
+				"countyName": "温宿县"
+			}, {
+				"countyCode": "652928",
+				"countyName": "阿瓦提县"
+			}, {
+				"countyCode": "652929",
+				"countyName": "柯坪县"
+			}, {
+				"countyCode": "652925",
+				"countyName": "新和县"
+			}, {
+				"countyCode": "652924",
+				"countyName": "沙雅县"
+			}, {
+				"countyCode": "652927",
+				"countyName": "乌什县"
+			}, {
+				"countyCode": "652923",
+				"countyName": "库车县"
+			}, {
+				"countyCode": "652926",
+				"countyName": "拜城县"
+			}]
+		}, {
+			"cityCode": "653000",
+			"cityName": "克孜勒苏柯尔克孜自治州",
+			"county": [{
+				"countyCode": "653023",
+				"countyName": "阿合奇县"
+			}, {
+				"countyCode": "653022",
+				"countyName": "阿克陶县"
+			}, {
+				"countyCode": "653001",
+				"countyName": "阿图什市"
+			}, {
+				"countyCode": "653024",
+				"countyName": "乌恰县"
+			}]
+		}, {
+			"cityCode": "659004",
+			"cityName": "五家渠市",
+			"county": [{
+				"countyCode": "659004-1",
+				"countyName": "五家渠市"
+			}]
+		}, {
+			"cityCode": "652700",
+			"cityName": "博尔塔拉蒙古自治州",
+			"county": [{
+				"countyCode": "652701",
+				"countyName": "博乐市"
+			}, {
+				"countyCode": "652723",
+				"countyName": "温泉县"
+			}, {
+				"countyCode": "652722",
+				"countyName": "精河县"
+			}]
+		}, {
+			"cityCode": "695007",
+			"cityName": "双河市",
+			"county": [{
+				"countyCode": "695007-1",
+				"countyName": "双河市"
+			}]
+		}]
+		}, {
+		"provinceCode": "330000",
+		"provinceName": "浙江省",
+		"city": [{
+			"cityCode": "330900",
+			"cityName": "舟山市",
+			"county": [{
+				"countyCode": "330922",
+				"countyName": "嵊泗县"
+			}, {
+				"countyCode": "330903",
+				"countyName": "普陀区"
+			}, {
+				"countyCode": "330902",
+				"countyName": "定海区"
+			}, {
+				"countyCode": "330921",
+				"countyName": "岱山县"
+			}]
+		}, {
+			"cityCode": "330800",
+			"cityName": "衢州市",
+			"county": [{
+				"countyCode": "330824",
+				"countyName": "开化县"
+			}, {
+				"countyCode": "330803",
+				"countyName": "衢江区"
+			}, {
+				"countyCode": "330881",
+				"countyName": "江山市"
+			}, {
+				"countyCode": "330802",
+				"countyName": "柯城区"
+			}, {
+				"countyCode": "330822",
+				"countyName": "常山县"
+			}, {
+				"countyCode": "330825",
+				"countyName": "龙游县"
+			}]
+		}, {
+			"cityCode": "330700",
+			"cityName": "金华市",
+			"county": [{
+				"countyCode": "330782",
+				"countyName": "义乌市"
+			}, {
+				"countyCode": "330784",
+				"countyName": "永康市"
+			}, {
+				"countyCode": "330727",
+				"countyName": "磐安县"
+			}, {
+				"countyCode": "330702",
+				"countyName": "婺城区"
+			}, {
+				"countyCode": "330726",
+				"countyName": "浦江县"
+			}, {
+				"countyCode": "330783",
+				"countyName": "东阳市"
+			}, {
+				"countyCode": "330781",
+				"countyName": "兰溪市"
+			}, {
+				"countyCode": "330723",
+				"countyName": "武义县"
+			}, {
+				"countyCode": "330703",
+				"countyName": "金东区"
+			}]
+		}, {
+			"cityCode": "330300",
+			"cityName": "温州市",
+			"county": [{
+				"countyCode": "330302",
+				"countyName": "鹿城区"
+			}, {
+				"countyCode": "330322",
+				"countyName": "洞头区"
+			}, {
+				"countyCode": "330381",
+				"countyName": "瑞安市"
+			}, {
+				"countyCode": "330329",
+				"countyName": "泰顺县"
+			}, {
+				"countyCode": "330324",
+				"countyName": "永嘉县"
+			}, {
+				"countyCode": "330304",
+				"countyName": "瓯海区"
+			}, {
+				"countyCode": "330327",
+				"countyName": "苍南县"
+			}, {
+				"countyCode": "330328",
+				"countyName": "文成县"
+			}, {
+				"countyCode": "330326",
+				"countyName": "平阳县"
+			}, {
+				"countyCode": "330382",
+				"countyName": "乐清市"
+			}, {
+				"countyCode": "330303",
+				"countyName": "龙湾区"
+			}]
+		}, {
+			"cityCode": "330200",
+			"cityName": "宁波市",
+			"county": [{
+				"countyCode": "330204",
+				"countyName": "江东区"
+			}, {
+				"countyCode": "330225",
+				"countyName": "象山县"
+			}, {
+				"countyCode": "330212",
+				"countyName": "鄞州区"
+			}, {
+				"countyCode": "330226",
+				"countyName": "宁海县"
+			}, {
+				"countyCode": "330283",
+				"countyName": "奉化区"
+			}, {
+				"countyCode": "330282",
+				"countyName": "慈溪市"
+			}, {
+				"countyCode": "330281",
+				"countyName": "余姚市"
+			}, {
+				"countyCode": "330211",
+				"countyName": "镇海区"
+			}, {
+				"countyCode": "330205",
+				"countyName": "江北区"
+			}, {
+				"countyCode": "330206",
+				"countyName": "北仑区"
+			}, {
+				"countyCode": "330203",
+				"countyName": "海曙区"
+			}]
+		}, {
+			"cityCode": "330100",
+			"cityName": "杭州市",
+			"county": [{
+				"countyCode": "330110",
+				"countyName": "余杭区"
+			}, {
+				"countyCode": "330106",
+				"countyName": "西湖区"
+			}, {
+				"countyCode": "330109",
+				"countyName": "萧山区"
+			}, {
+				"countyCode": "330185",
+				"countyName": "临安区"
+			}, {
+				"countyCode": "330122",
+				"countyName": "桐庐县"
+			}, {
+				"countyCode": "330103",
+				"countyName": "下城区"
+			}, {
+				"countyCode": "330182",
+				"countyName": "建德市"
+			}, {
+				"countyCode": "330102",
+				"countyName": "上城区"
+			}, {
+				"countyCode": "330127",
+				"countyName": "淳安县"
+			}, {
+				"countyCode": "330105",
+				"countyName": "拱墅区"
+			}, {
+				"countyCode": "330104",
+				"countyName": "江干区"
+			}, {
+				"countyCode": "330108",
+				"countyName": "滨江区"
+			}, {
+				"countyCode": "330183",
+				"countyName": "富阳区"
+			}]
+		}, {
+			"cityCode": "330400",
+			"cityName": "嘉兴市",
+			"county": [{
+				"countyCode": "330482",
+				"countyName": "平湖市"
+			}, {
+				"countyCode": "330402",
+				"countyName": "南湖区"
+			}, {
+				"countyCode": "330481",
+				"countyName": "海宁市"
+			}, {
+				"countyCode": "330421",
+				"countyName": "嘉善县"
+			}, {
+				"countyCode": "330424",
+				"countyName": "海盐县"
+			}, {
+				"countyCode": "330411",
+				"countyName": "秀洲区"
+			}, {
+				"countyCode": "330483",
+				"countyName": "桐乡市"
+			}]
+		}, {
+			"cityCode": "330600",
+			"cityName": "绍兴市",
+			"county": [{
+				"countyCode": "330681",
+				"countyName": "诸暨市"
+			}, {
+				"countyCode": "330602",
+				"countyName": "越城区"
+			}, {
+				"countyCode": "330682",
+				"countyName": "上虞区"
+			}, {
+				"countyCode": "330683",
+				"countyName": "嵊州市"
+			}, {
+				"countyCode": "330624",
+				"countyName": "新昌县"
+			}, {
+				"countyCode": "330621",
+				"countyName": "柯桥区"
+			}]
+		}, {
+			"cityCode": "331100",
+			"cityName": "丽水市",
+			"county": [{
+				"countyCode": "331125",
+				"countyName": "云和县"
+			}, {
+				"countyCode": "331121",
+				"countyName": "青田县"
+			}, {
+				"countyCode": "331126",
+				"countyName": "庆元县"
+			}, {
+				"countyCode": "331124",
+				"countyName": "松阳县"
+			}, {
+				"countyCode": "331123",
+				"countyName": "遂昌县"
+			}, {
+				"countyCode": "331122",
+				"countyName": "缙云县"
+			}, {
+				"countyCode": "331127",
+				"countyName": "景宁畲族自治县"
+			}, {
+				"countyCode": "331102",
+				"countyName": "莲都区"
+			}, {
+				"countyCode": "331181",
+				"countyName": "龙泉市"
+			}]
+		}, {
+			"cityCode": "330500",
+			"cityName": "湖州市",
+			"county": [{
+				"countyCode": "330522",
+				"countyName": "长兴县"
+			}, {
+				"countyCode": "330503",
+				"countyName": "南浔区"
+			}, {
+				"countyCode": "330523",
+				"countyName": "安吉县"
+			}, {
+				"countyCode": "330502",
+				"countyName": "吴兴区"
+			}, {
+				"countyCode": "330521",
+				"countyName": "德清县"
+			}]
+		}, {
+			"cityCode": "331000",
+			"cityName": "台州市",
+			"county": [{
+				"countyCode": "331024",
+				"countyName": "仙居县"
+			}, {
+				"countyCode": "331021",
+				"countyName": "玉环市"
+			}, {
+				"countyCode": "331082",
+				"countyName": "临海市"
+			}, {
+				"countyCode": "331023",
+				"countyName": "天台县"
+			}, {
+				"countyCode": "331003",
+				"countyName": "黄岩区"
+			}, {
+				"countyCode": "331004",
+				"countyName": "路桥区"
+			}, {
+				"countyCode": "331022",
+				"countyName": "三门县"
+			}, {
+				"countyCode": "331002",
+				"countyName": "椒江区"
+			}, {
+				"countyCode": "331081",
+				"countyName": "温岭市"
+			}]
+		}]
+	}, {
+		"provinceCode": "320000",
+		"provinceName": "江苏省",
+		"city": [{
+			"cityCode": "320200",
+			"cityName": "无锡市",
+			"county": [{
+				"countyCode": "320282",
+				"countyName": "宜兴市"
+			}, {
+				"countyCode": "320205",
+				"countyName": "锡山区"
+			}, {
+				"countyCode": "320211",
+				"countyName": "滨湖区"
+			}, {
+				"countyCode": "320281",
+				"countyName": "江阴市"
+			}, {
+				"countyCode": "320206",
+				"countyName": "惠山区"
+			}, {
+				"countyCode": "320207",
+				"countyName": "梁溪区"
+			}, {
+				"countyCode": "320214",
+				"countyName": "新吴区"
+			}]
+		}, {
+			"cityCode": "320400",
+			"cityName": "常州市",
+			"county": [{
+				"countyCode": "320412",
+				"countyName": "武进区"
+			}, {
+				"countyCode": "320405",
+				"countyName": "戚墅堰区"
+			}, {
+				"countyCode": "320481",
+				"countyName": "溧阳市"
+			}, {
+				"countyCode": "320402",
+				"countyName": "天宁区"
+			}, {
+				"countyCode": "320411",
+				"countyName": "新北区"
+			}, {
+				"countyCode": "320404",
+				"countyName": "钟楼区"
+			}, {
+				"countyCode": "320482",
+				"countyName": "金坛区"
+			}]
+		}, {
+			"cityCode": "320500",
+			"cityName": "苏州市",
+			"county": [{
+				"countyCode": "320509",
+				"countyName": "吴江区"
+			}, {
+				"countyCode": "320506",
+				"countyName": "吴中区"
+			}, {
+				"countyCode": "320582",
+				"countyName": "张家港市"
+			}, {
+				"countyCode": "320508",
+				"countyName": "姑苏区"
+			}, {
+				"countyCode": "320571",
+				"countyName": "苏州工业园区"
+			}, {
+				"countyCode": "320583",
+				"countyName": "昆山市"
+			}, {
+				"countyCode": "320581",
+				"countyName": "常熟市"
+			}, {
+				"countyCode": "320505",
+				"countyName": "虎丘区"
+			}, {
+				"countyCode": "320507",
+				"countyName": "相城区"
+			}, {
+				"countyCode": "320585",
+				"countyName": "太仓市"
+			}]
+		}, {
+			"cityCode": "320800",
+			"cityName": "淮安市",
+			"county": [{
+				"countyCode": "320811",
+				"countyName": "清浦区"
+			}, {
+				"countyCode": "320829",
+				"countyName": "洪泽区"
+			}, {
+				"countyCode": "320802",
+				"countyName": "清江浦区"
+			}, {
+				"countyCode": "320803",
+				"countyName": "淮安区"
+			}, {
+				"countyCode": "320831",
+				"countyName": "金湖县"
+			}, {
+				"countyCode": "320804",
+				"countyName": "淮阴区"
+			}, {
+				"countyCode": "320830",
+				"countyName": "盱眙县"
+			}, {
+				"countyCode": "320826",
+				"countyName": "涟水县"
+			}]
+		}, {
+			"cityCode": "320300",
+			"cityName": "徐州市",
+			"county": [{
+				"countyCode": "320381",
+				"countyName": "新沂市"
+			}, {
+				"countyCode": "320324",
+				"countyName": "睢宁县"
+			}, {
+				"countyCode": "320311",
+				"countyName": "泉山区"
+			}, {
+				"countyCode": "320302",
+				"countyName": "鼓楼区"
+			}, {
+				"countyCode": "320305",
+				"countyName": "贾汪区"
+			}, {
+				"countyCode": "320303",
+				"countyName": "云龙区"
+			}, {
+				"countyCode": "320312",
+				"countyName": "铜山区"
+			}, {
+				"countyCode": "320321",
+				"countyName": "丰县"
+			}, {
+				"countyCode": "320322",
+				"countyName": "沛县"
+			}, {
+				"countyCode": "320382",
+				"countyName": "邳州市"
+			}]
+		}, {
+			"cityCode": "321200",
+			"cityName": "泰州市",
+			"county": [{
+				"countyCode": "321203",
+				"countyName": "高港区"
+			}, {
+				"countyCode": "321202",
+				"countyName": "海陵区"
+			}, {
+				"countyCode": "321283",
+				"countyName": "泰兴市"
+			}, {
+				"countyCode": "321284",
+				"countyName": "姜堰区"
+			}, {
+				"countyCode": "321282",
+				"countyName": "靖江市"
+			}, {
+				"countyCode": "321281",
+				"countyName": "兴化市"
+			}]
+		}, {
+			"cityCode": "320700",
+			"cityName": "连云港市",
+			"county": [{
+				"countyCode": "320723",
+				"countyName": "灌云县"
+			}, {
+				"countyCode": "320721",
+				"countyName": "赣榆区"
+			}, {
+				"countyCode": "320705",
+				"countyName": "新浦区"
+			}, {
+				"countyCode": "320722",
+				"countyName": "东海县"
+			}, {
+				"countyCode": "320706",
+				"countyName": "海州区"
+			}, {
+				"countyCode": "320703",
+				"countyName": "连云区"
+			}, {
+				"countyCode": "320724",
+				"countyName": "灌南县"
+			}]
+		}, {
+			"cityCode": "321100",
+			"cityName": "镇江市",
+			"county": [{
+				"countyCode": "321112",
+				"countyName": "丹徒区"
+			}, {
+				"countyCode": "321102",
+				"countyName": "京口区"
+			}, {
+				"countyCode": "321182",
+				"countyName": "扬中市"
+			}, {
+				"countyCode": "321181",
+				"countyName": "丹阳市"
+			}, {
+				"countyCode": "321183",
+				"countyName": "句容市"
+			}, {
+				"countyCode": "321111",
+				"countyName": "润州区"
+			}]
+		}, {
+			"cityCode": "320600",
+			"cityName": "南通市",
+			"county": [{
+				"countyCode": "320602",
+				"countyName": "崇川区"
+			}, {
+				"countyCode": "320684",
+				"countyName": "海门市"
+			}, {
+				"countyCode": "320681",
+				"countyName": "启东市"
+			}, {
+				"countyCode": "320612",
+				"countyName": "通州区"
+			}, {
+				"countyCode": "320621",
+				"countyName": "海安市"
+			}, {
+				"countyCode": "320623",
+				"countyName": "如东县"
+			}, {
+				"countyCode": "320611",
+				"countyName": "港闸区"
+			}, {
+				"countyCode": "320682",
+				"countyName": "如皋市"
+			}]
+		}, {
+			"cityCode": "320900",
+			"cityName": "盐城市",
+			"county": [{
+				"countyCode": "320922",
+				"countyName": "滨海县"
+			}, {
+				"countyCode": "320981",
+				"countyName": "东台市"
+			}, {
+				"countyCode": "320925",
+				"countyName": "建湖县"
+			}, {
+				"countyCode": "320903",
+				"countyName": "盐都区"
+			}, {
+				"countyCode": "320921",
+				"countyName": "响水县"
+			}, {
+				"countyCode": "320924",
+				"countyName": "射阳县"
+			}, {
+				"countyCode": "320902",
+				"countyName": "亭湖区"
+			}, {
+				"countyCode": "320923",
+				"countyName": "阜宁县"
+			}, {
+				"countyCode": "320982",
+				"countyName": "大丰区"
+			}]
+		}, {
+			"cityCode": "320100",
+			"cityName": "南京市",
+			"county": [{
+				"countyCode": "320106",
+				"countyName": "鼓楼区"
+			}, {
+				"countyCode": "320115",
+				"countyName": "江宁区"
+			}, {
+				"countyCode": "320111",
+				"countyName": "浦口区"
+			}, {
+				"countyCode": "320116",
+				"countyName": "六合区"
+			}, {
+				"countyCode": "320104",
+				"countyName": "秦淮区"
+			}, {
+				"countyCode": "320124",
+				"countyName": "溧水区"
+			}, {
+				"countyCode": "320125",
+				"countyName": "高淳区"
+			}, {
+				"countyCode": "320113",
+				"countyName": "栖霞区"
+			}, {
+				"countyCode": "320107",
+				"countyName": "下关区"
+			}, {
+				"countyCode": "320102",
+				"countyName": "玄武区"
+			}, {
+				"countyCode": "320105",
+				"countyName": "建邺区"
+			}, {
+				"countyCode": "320114",
+				"countyName": "雨花台区"
+			}, {
+				"countyCode": "320103",
+				"countyName": "白下区"
+			}]
+		}, {
+			"cityCode": "321000",
+			"cityName": "扬州市",
+			"county": [{
+				"countyCode": "321084",
+				"countyName": "高邮市"
+			}, {
+				"countyCode": "321023",
+				"countyName": "宝应县"
+			}, {
+				"countyCode": "321012",
+				"countyName": "江都区"
+			}, {
+				"countyCode": "321003",
+				"countyName": "邗江区"
+			}, {
+				"countyCode": "321081",
+				"countyName": "仪征市"
+			}, {
+				"countyCode": "321002",
+				"countyName": "广陵区"
+			}]
+		}, {
+			"cityCode": "321300",
+			"cityName": "宿迁市",
+			"county": [{
+				"countyCode": "321323",
+				"countyName": "泗阳县"
+			}, {
+				"countyCode": "321302",
+				"countyName": "宿城区"
+			}, {
+				"countyCode": "321311",
+				"countyName": "宿豫区"
+			}, {
+				"countyCode": "321324",
+				"countyName": "泗洪县"
+			}, {
+				"countyCode": "321322",
+				"countyName": "沭阳县"
+			}]
+		}]
+	}, {
+		"provinceCode": "440000",
+		"provinceName": "广东省",
+		"city": [{
+			"cityCode": "445100",
+			"cityName": "潮州市",
+			"county": [{
+				"countyCode": "445123",
+				"countyName": "潮安县"
+			}, {
+				"countyCode": "445122",
+				"countyName": "饶平县"
+			}, {
+				"countyCode": "445121",
+				"countyName": "潮安区"
+			}, {
+				"countyCode": "445102",
+				"countyName": "湘桥区"
+			}]
+		}, {
+			"cityCode": "441800",
+			"cityName": "清远市",
+			"county": [{
+				"countyCode": "441802",
+				"countyName": "清城区"
+			}, {
+				"countyCode": "441825",
+				"countyName": "连山壮族瑶族自治县"
+			}, {
+				"countyCode": "441821",
+				"countyName": "佛冈县"
+			}, {
+				"countyCode": "441882",
+				"countyName": "连州市"
+			}, {
+				"countyCode": "441823",
+				"countyName": "阳山县"
+			}, {
+				"countyCode": "441826",
+				"countyName": "连南瑶族自治县"
+			}, {
+				"countyCode": "441827",
+				"countyName": "清新区"
+			}, {
+				"countyCode": "441881",
+				"countyName": "英德市"
+			}]
+		}, {
+			"cityCode": "441300",
+			"cityName": "惠州市",
+			"county": [{
+				"countyCode": "441303",
+				"countyName": "惠阳区"
+			}, {
+				"countyCode": "441322",
+				"countyName": "博罗县"
+			}, {
+				"countyCode": "441323",
+				"countyName": "惠东县"
+			}, {
+				"countyCode": "441324",
+				"countyName": "龙门县"
+			}, {
+				"countyCode": "441302",
+				"countyName": "惠城区"
+			}]
+		}, {
+			"cityCode": "445200",
+			"cityName": "揭阳市",
+			"county": [{
+				"countyCode": "445221",
+				"countyName": "揭东区"
+			}, {
+				"countyCode": "445224",
+				"countyName": "惠来县"
+			}, {
+				"countyCode": "445222",
+				"countyName": "揭西县"
+			}, {
+				"countyCode": "445281",
+				"countyName": "普宁市"
+			}, {
+				"countyCode": "445202",
+				"countyName": "榕城区"
+			}]
+		}, {
+			"cityCode": "440300",
+			"cityName": "深圳市",
+			"county": [{
+				"countyCode": "440303",
+				"countyName": "罗湖区"
+			}, {
+				"countyCode": "440306",
+				"countyName": "宝安区"
+			}, {
+				"countyCode": "440305",
+				"countyName": "南山区"
+			}, {
+				"countyCode": "440307",
+				"countyName": "龙岗区"
+			}, {
+				"countyCode": "440311",
+				"countyName": "光明区"
+			}, {
+				"countyCode": "440309",
+				"countyName": "龙华区"
+			}, {
+				"countyCode": "440308",
+				"countyName": "盐田区"
+			}, {
+				"countyCode": "440304",
+				"countyName": "福田区"
+			}, {
+				"countyCode": "440312",
+				"countyName": "坪山区"
+			}, {
+				"countyCode": "440313",
+				"countyName": "大鹏新区"
+			}]
+		}, {
+			"cityCode": "441900",
+			"cityName": "东莞市",
+			"county": [{
+				"countyCode": "441900-1",
+				"countyName": "东莞市"
+			}]
+		}, {
+			"cityCode": "441400",
+			"cityName": "梅州市",
+			"county": [{
+				"countyCode": "441422",
+				"countyName": "大埔县"
+			}, {
+				"countyCode": "441423",
+				"countyName": "丰顺县"
+			}, {
+				"countyCode": "441426",
+				"countyName": "平远县"
+			}, {
+				"countyCode": "441481",
+				"countyName": "兴宁市"
+			}, {
+				"countyCode": "441427",
+				"countyName": "蕉岭县"
+			}, {
+				"countyCode": "441421",
+				"countyName": "梅县区"
+			}, {
+				"countyCode": "441424",
+				"countyName": "五华县"
+			}, {
+				"countyCode": "441402",
+				"countyName": "梅江区"
+			}]
+		}, {
+			"cityCode": "440500-1",
+			"cityName": "汕头市",
+			"county": [{
+				"countyCode": "440515",
+				"countyName": "澄海区"
+			}, {
+				"countyCode": "440511",
+				"countyName": "金平区"
+			}, {
+				"countyCode": "440523",
+				"countyName": "南澳县"
+			}, {
+				"countyCode": "440513",
+				"countyName": "潮阳区"
+			}, {
+				"countyCode": "440514",
+				"countyName": "潮南区"
+			}, {
+				"countyCode": "440507",
+				"countyName": "龙湖区"
+			}, {
+				"countyCode": "440512",
+				"countyName": "濠江区"
+			}]
+		}, {
+			"cityCode": "441600",
+			"cityName": "河源市",
+			"county": [{
+				"countyCode": "441602",
+				"countyName": "源城区"
+			}, {
+				"countyCode": "441621",
+				"countyName": "紫金县"
+			}, {
+				"countyCode": "441624",
+				"countyName": "和平县"
+			}, {
+				"countyCode": "441622",
+				"countyName": "龙川县"
+			}, {
+				"countyCode": "441625",
+				"countyName": "东源县"
+			}, {
+				"countyCode": "441623",
+				"countyName": "连平县"
+			}]
+		}, {
+			"cityCode": "445300",
+			"cityName": "云浮市",
+			"county": [{
+				"countyCode": "445322",
+				"countyName": "郁南县"
+			}, {
+				"countyCode": "445381",
+				"countyName": "罗定市"
+			}, {
+				"countyCode": "445302",
+				"countyName": "云城区"
+			}, {
+				"countyCode": "445321",
+				"countyName": "新兴县"
+			}, {
+				"countyCode": "445323",
+				"countyName": "云安区"
+			}]
+		}, {
+			"cityCode": "440400",
+			"cityName": "珠海市",
+			"county": [{
+				"countyCode": "440404",
+				"countyName": "金湾区"
+			}, {
+				"countyCode": "440403",
+				"countyName": "斗门区"
+			}, {
+				"countyCode": "440402",
+				"countyName": "香洲区"
+			}]
+		}, {
+			"cityCode": "440700",
+			"cityName": "江门市",
+			"county": [{
+				"countyCode": "440785",
+				"countyName": "恩平市"
+			}, {
+				"countyCode": "440704",
+				"countyName": "江海区"
+			}, {
+				"countyCode": "440705",
+				"countyName": "新会区"
+			}, {
+				"countyCode": "440784",
+				"countyName": "鹤山市"
+			}, {
+				"countyCode": "440703",
+				"countyName": "蓬江区"
+			}, {
+				"countyCode": "440783",
+				"countyName": "开平市"
+			}, {
+				"countyCode": "440781",
+				"countyName": "台山市"
+			}]
+		}, {
+			"cityCode": "441500",
+			"cityName": "汕尾市",
+			"county": [{
+				"countyCode": "441523",
+				"countyName": "陆河县"
+			}, {
+				"countyCode": "441502",
+				"countyName": "城区"
+			}, {
+				"countyCode": "441581",
+				"countyName": "陆丰市"
+			}, {
+				"countyCode": "441521",
+				"countyName": "海丰县"
+			}]
+		}, {
+			"cityCode": "441200",
+			"cityName": "肇庆市",
+			"county": [{
+				"countyCode": "441203",
+				"countyName": "鼎湖区"
+			}, {
+				"countyCode": "441224",
+				"countyName": "怀集县"
+			}, {
+				"countyCode": "441283",
+				"countyName": "高要区"
+			}, {
+				"countyCode": "441284",
+				"countyName": "四会市"
+			}, {
+				"countyCode": "441202",
+				"countyName": "端州区"
+			}, {
+				"countyCode": "441225",
+				"countyName": "封开县"
+			}, {
+				"countyCode": "441226",
+				"countyName": "德庆县"
+			}, {
+				"countyCode": "441223",
+				"countyName": "广宁县"
+			}]
+		}, {
+			"cityCode": "440200",
+			"cityName": "韶关市",
+			"county": [{
+				"countyCode": "440222",
+				"countyName": "始兴县"
+			}, {
+				"countyCode": "440281",
+				"countyName": "乐昌市"
+			}, {
+				"countyCode": "440203",
+				"countyName": "武江区"
+			}, {
+				"countyCode": "440233",
+				"countyName": "新丰县"
+			}, {
+				"countyCode": "440224",
+				"countyName": "仁化县"
+			}, {
+				"countyCode": "440232",
+				"countyName": "乳源瑶族自治县"
+			}, {
+				"countyCode": "440229",
+				"countyName": "翁源县"
+			}, {
+				"countyCode": "440282",
+				"countyName": "南雄市"
+			}, {
+				"countyCode": "440205",
+				"countyName": "曲江区"
+			}, {
+				"countyCode": "440204",
+				"countyName": "浈江区"
+			}]
+		}, {
+			"cityCode": "440600",
+			"cityName": "佛山市",
+			"county": [{
+				"countyCode": "440606",
+				"countyName": "顺德区"
+			}, {
+				"countyCode": "440604",
+				"countyName": "禅城区"
+			}, {
+				"countyCode": "440607",
+				"countyName": "三水区"
+			}, {
+				"countyCode": "440608",
+				"countyName": "高明区"
+			}, {
+				"countyCode": "440605",
+				"countyName": "南海区"
+			}]
+		}, {
+			"cityCode": "440100",
+			"cityName": "广州市",
+			"county": [{
+				"countyCode": "440114",
+				"countyName": "花都区"
+			}, {
+				"countyCode": "440111",
+				"countyName": "白云区"
+			}, {
+				"countyCode": "440115",
+				"countyName": "南沙区"
+			}, {
+				"countyCode": "440113",
+				"countyName": "番禺区"
+			}, {
+				"countyCode": "440183",
+				"countyName": "增城区"
+			}, {
+				"countyCode": "440112",
+				"countyName": "黄埔区"
+			}, {
+				"countyCode": "440106",
+				"countyName": "天河区"
+			}, {
+				"countyCode": "440184",
+				"countyName": "从化区"
+			}, {
+				"countyCode": "440105",
+				"countyName": "海珠区"
+			}, {
+				"countyCode": "440103",
+				"countyName": "荔湾区"
+			}, {
+				"countyCode": "440104",
+				"countyName": "越秀区"
+			}]
+		}, {
+			"cityCode": "442000",
+			"cityName": "中山市",
+			"county": [{
+				"countyCode": "442000-1",
+				"countyName": "中山市"
+			}]
+		}, {
+			"cityCode": "440800",
+			"cityName": "湛江市",
+			"county": [{
+				"countyCode": "440881",
+				"countyName": "廉江市"
+			}, {
+				"countyCode": "440804",
+				"countyName": "坡头区"
+			}, {
+				"countyCode": "440882",
+				"countyName": "雷州市"
+			}, {
+				"countyCode": "440823",
+				"countyName": "遂溪县"
+			}, {
+				"countyCode": "440803",
+				"countyName": "霞山区"
+			}, {
+				"countyCode": "440825",
+				"countyName": "徐闻县"
+			}, {
+				"countyCode": "440802",
+				"countyName": "赤坎区"
+			}, {
+				"countyCode": "440811",
+				"countyName": "麻章区"
+			}, {
+				"countyCode": "440883",
+				"countyName": "吴川市"
+			}]
+		}, {
+			"cityCode": "441700",
+			"cityName": "阳江市",
+			"county": [{
+				"countyCode": "441781",
+				"countyName": "阳春市"
+			}, {
+				"countyCode": "441702",
+				"countyName": "江城区"
+			}, {
+				"countyCode": "441721",
+				"countyName": "阳西县"
+			}, {
+				"countyCode": "441723",
+				"countyName": "阳东区"
+			}]
+		}, {
+			"cityCode": "440900",
+			"cityName": "茂名市",
+			"county": [{
+				"countyCode": "440902",
+				"countyName": "茂南区"
+			}, {
+				"countyCode": "440923",
+				"countyName": "电白区"
+			}, {
+				"countyCode": "440982",
+				"countyName": "化州市"
+			}, {
+				"countyCode": "440903",
+				"countyName": "茂港区 "
+			}, {
+				"countyCode": "440981",
+				"countyName": "高州市"
+			}, {
+				"countyCode": "440983",
+				"countyName": "信宜市"
+			}]
+		}]
+	}, {
+		"provinceCode": "810000",
+		"provinceName": "香港特别行政区",
+		"city": [{
+			"cityCode": "810000-1",
+			"cityName": "香港",
+			"county": [{
+				"countyCode": "810400",
+				"countyName": "离岛"
+			}, {
+				"countyCode": "810100",
+				"countyName": "香港岛"
+			}, {
+				"countyCode": "810300",
+				"countyName": "新界"
+			}, {
+				"countyCode": "810200",
+				"countyName": "九龙"
+			}]
+		}]
+	}
+]

+ 22 - 0
library/cache.js

@@ -0,0 +1,22 @@
+
+export default {
+	storage(key, value){
+			try{
+				if(arguments.length == 1) {
+					return uni.getStorageSync(key);
+				}
+				if(arguments.length > 1) {
+					if(value === null){
+						uni.removeStorageSync(key);
+					} else {
+						uni.setStorageSync(key, value);
+					}
+				}
+			}catch(e){
+				uni.showToast({
+					icon:'none',
+					title: '程序发生错误'
+				});
+			}
+		}
+}

+ 593 - 0
library/chat.js

@@ -0,0 +1,593 @@
+ import action from "./action.js"
+ 
+ class chat {
+     push(res,fromway){
+   
+         if(fromway!=uni.getStorageSync('storeykey')) return false;
+        var   data={ id: res.data.cache_key, msg: res.data}
+       
+         let key = prefix(data.id);
+       
+         var msg_list_key = msglist_key();
+         var statesource = cache(key) ? cache(key) : [];
+        // console.log(statesource[statesource.length-1].msg_id,res.data.msg_id)
+   if(statesource.length>0){
+       if(statesource[statesource.length-1].msg_id==res.data.msg_id) return false;  
+   }
+        
+         if (data.msg.sender_id != uni.getStorageSync('access_token')) data.msg.unread = 1;
+         else data.msg.unread = 0;
+         
+         var statelist = [];
+                var msglist = cache(msg_list_key) || [];    
+
+            statesource.push(data.msg);
+         //  console.log(data.msg.message);
+         if (data.msg.message.type != 'tips' || data.msg.message.msg_type == 'show') {
+             //更新消息列表
+         
+             if (data.msg.isloading == 0 || data.msg.message.msg_type == 'show') {
+                
+                 let msgindex = msglist.findIndex(v => v.key == key);
+                 let unreadCount = 0;
+                 var readtime=0;
+                 if (msgindex >= 0) {
+                     let tmp = msglist.splice(msgindex, 1);
+                     unreadCount = tmp[0].msg.unread || 0;
+                     readtime=tmp[0].msg.readtime || 0;
+                 }
+                    // console.log(data.msg);
+                    //  console.log(data.msg.cache_key , uni.getStorageSync('cache_key'))
+                 if (data.msg.self != 1 && data.msg.cache_key != uni.getStorageSync('cache_key')) {
+                     var no_tip = 0;
+                     var msgnotip = uni.getStorageSync('msgnotip');
+                     if (!msgnotip) msgnotip = [];
+                     msgnotip.map(item => {
+                         if (item == data.msg.cache_key) {
+                             no_tip = 1;
+                         }
+         
+                     })
+                     try {
+                         data.msg.message.content = JSON.parse(data.msg.message.content);
+         
+                     } catch (e) {
+         
+                     }
+                     if (data.msg.message.content.type == 'remind' && data.msg.message.content.remind.id == uni.getStorageSync('access_token')) {
+                         no_tip = 0;
+                         data.msg.message.content.content = data.msg.message.content.content.replace('@{' + data.msg
+                             .message.content.remind.id + '}', '有人@我');
+                         cache('remid_' + key, data.msg);
+         
+                     }
+         
+                     if (no_tip == 0) {
+                         try{
+                             let userinfo = cache('userInfo');
+                           
+                             if(parseInt(data.msg.group_id)>0){
+                               if (parseInt(userinfo.note1) != 0) action.playVoice('/static/voice/chat.mp3');
+                               if (parseInt(userinfo.note2) != 0) uni.vibrateLong();  
+                             } 
+                             else{
+                                 if (parseInt(userinfo.note3) != 0) action.playVoice('/static/voice/friend.mp3');
+                                 if (parseInt(userinfo.note4) != 0) uni.vibrateLong();
+                             }
+                         }catch(e){
+                             //TODO handle the exception
+                         }
+         
+                     }
+                 }
+                 //console.log(data.msg);
+                 if (cache('remid_' + key)) var datamsg = cache('remid_' + key)
+                 else
+                     var datamsg = data.msg
+                 delete datamsg['receiver']
+         
+                 msglist.push({
+                     key,
+                     msg: {
+                         ...datamsg,
+                         unread: data.msg.self ? unreadCount : unreadCount + 1,
+                         readtime:0,
+                         istop: 0
+                     }
+                 });
+               
+                 uni.setStorageSync(msg_list_key, msglist);
+                 
+            
+             }
+         
+             // console.log(data.msg);
+       
+         } else {
+         
+             let list1 = statesource;
+           
+             
+             //测回消息
+             if (data.msg.message.msg_type == 'chat_back') {
+                 // #ifdef APP-PLUS
+                  /*  plus.push.clear(); */
+                   // #endif
+                try{
+                   var msg_id = data.msg.message.data.msg_id; 
+                }catch(e){
+                    //TODO handle the exception
+                    var msg_id = data.msg.msg_id;
+                }
+                
+                 var list = [];
+                 if (msg_id > 0) {
+                     var unread = 0;
+                     var tempdata = '';
+                       var num=0;
+                       for(var i=0;i<statesource.length;i++){
+                           var item=statesource[i];
+                          if (parseInt(item.msg_id) == parseInt(msg_id) ) {
+                                
+                              
+                            }
+                          else{
+                           list.push(item);
+                              if (item.message.type != 'tips') {
+                                  tempdata = item;
+                                  unread = unread + item.unread;
+                              }
+                                       
+                          } 
+                       }
+                  
+                     
+                    statesource= list;
+         
+                    
+                     let msgindex = msglist.findIndex(v => v.key == key);
+                     let unreadCount = 0;
+                     if (msgindex >= 0) {
+                         let tmp = msglist.splice(msgindex, 1);
+                         unreadCount = tmp[0].msg.unread || 0;
+                     }
+                     msglist.push({
+                         key,
+                         msg: {
+                             ...tempdata,
+                             unread: unread,
+                             istop: set_msgtop(data.msg.cache_key)
+                         }
+                     });
+                    
+                     cache(msg_list_key, msglist);
+                   
+                 }
+                 
+             }else{
+                // console.log(data);
+             }
+         
+         }
+     
+           uni.setStorageSync(key, statesource);
+         return {'source':statesource,'msglist':msglist};
+     }
+ 
+     send(data){
+         
+         
+         console.log(data);
+     }
+     
+     //最近聊天记录
+     msglist() {
+         let tmp = [];
+     
+         var msg_list_key = msglist_key();
+     
+         let lists11 = cache(msg_list_key) ? cache(msg_list_key) : [];
+
+         let lists = [];
+         var userid=uni.getStorageSync('access_token') ;
+         for (var i = 0; i < lists11.length; i++) {
+             try {
+                 //	console.log(lists11[i]['key'],uni.getStorageSync('access_token'));
+                 if (lists11[i]['key'].indexOf(userid + '_chat_') > -1) lists.push(lists11[i]);
+             } catch (e) {
+     
+             }
+     
+         }
+        lists.forEach(v => {
+     
+             v.msg = Object.assign(v.msg, (+v.msg.group_id > 1) ? getGroupInfoById(v.msg.group_id) :
+                 getUserInfo(v.msg));
+     
+             try {
+                 v.msg.message.content = JSON.parse(v.msg.message.content);
+     
+             } catch (e) {
+     
+             }
+     
+             if (v.msg.message.content.type == 'remind') {
+               if(v.msg.message.content.remind.id == uni.getStorageSync('access_token')){
+                   
+                     v.msg.message.content.content = v.msg.message.content.content.replace('@{' + v.msg.message.content.remind.id + '}', "有人@我"); 
+               }else{
+                  
+                  var mem = getGroupmemebrs(v.msg.group_id, v.msg.message.content.remind.id);
+                  if (mem.id==v.msg.message.content.remind.id) {
+                      var atname = mem.nickname;
+                  } else var atname = v.msg.message.content.remind.nickname;
+                  v.msg.message.content.content = v.msg.message.content.content.replace('@{' + v.msg.message.content.remind.id + '}', '@' + atname); 
+               }
+              
+     
+             }
+     
+            // if (!v.msg.group_id) console.log(getUserInfoById(v.msg.id))
+             if (!v.msg.none) tmp.push(v.msg);
+         
+     
+         });
+         let temp1 = [];
+         let temp2 = [];
+         tmp.map(item => {
+             if (item.istop > 0) temp1.push(item)
+             else temp2.push(item)
+         })
+         temp1.sort((a, b) => b.istop - a.istop);
+         temp2.sort((a, b) => b.timestamp - a.timestamp);
+         // tmp.sort((a, b) => b.timestamp - a.timestamp);
+     
+         action.setStatusTips();
+         var res= temp1.concat(temp2);
+           
+         return res;
+     }
+     
+     
+ }
+ 
+ export default new chat();
+ const cache = function(key, value) {
+ 
+     try {
+         if (arguments.length == 1) {
+             //            console.log(key);
+             return uni.getStorageSync(key)
+         }
+         if (arguments.length > 1) {
+             if (value === null) {
+                 uni.removeStorageSync(key);
+             } else {
+                 uni.setStorageSync(key, value);
+             }
+         }
+     } catch (e) {
+         uni.showToast({
+             icon: 'none',
+             title: '程序发生错误'
+         });
+     }
+ };
+ const parseDate = (str) => new Date(str.replace(/(-|年|月)/g, '/').replace('日', ''));
+ const dateToTime = (date) => date.getTime() / 1000;
+ const cutTimeStr = (str) => str.substr(0, 11);
+ 
+ function timestampToTime(timestamp) {
+     var date = new Date(timestamp * 1000); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
+     var Y = date.getFullYear();
+     var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1);
+     var D = date.getDate();
+     var h = date.getHours();
+     var m = date.getMinutes();
+     var s = date.getSeconds();
+     if (D < 10) D = '0' + D;
+     if (h < 10) h = '0' + h;
+     if (m < 10) m = '0' + m;
+     if (s < 10) s = '0' + s;
+     return Y + '-' + M + '-' + D + ' ' + h + ':' + m + ':' + s;
+ }
+ 
+ function setTimeShow(timestamp) {
+     var time = timestampToTime(timestamp);
+ 
+     var now = new Date();
+     var Year = now.getFullYear();
+     var month = now.getMonth() + 1;
+     if (month < 10) month = '0' + month;
+     var day = now.getDate();
+     if (day < 10) day = '0' + day;
+     var today = Year + '-' + month + '-' + day;
+     if (time.substr(0, 10) == today) return time.substr(11, 8);
+     if (time.substr(0, 4) == Year) return time.substr(5, 14);
+     return time;
+ }
+ 
+ function prefix(id) {
+ 
+     return uni.getStorageSync('access_token') + '_chat_' + id;
+ }
+ 
+ function prefixIndex(id) {
+     return uni.getStorageSync('access_token') + prefix(id) + '_index';
+ }
+ 
+ function msglist_key() {
+     return prefix('msglist');
+ }
+ 
+function set_msgtop(key) {
+    var msgtop = cache('msgtop');
+
+    var istop = 0;
+    for (var i = 0; i < msgtop.length; i++) {
+        if ( msgtop[i]== key) {
+            return true;
+        }
+    }
+    return false;
+}
+
+ 
+ 
+ function set_senderlist(sender) {
+     var list = uni.getStorageSync(prefix('senderlist'));
+ 
+     var isin = 0;
+     if (list.length > 0) {
+ 
+         for (var i = 0; i < list.length; i++) {
+             if (parseInt(list[i].id) == parseInt(sender.id) && isin == 0) {
+                 list[i].nickname = sender.nickname;
+                 list[i].avatar = sender.avatar;
+                 isin = 1;
+             }
+ 
+         }
+ 
+     } else var list = Array();
+     if (isin == 0) list.push(sender);
+ 
+ 
+     uni.setStorageSync(prefix('senderlist'), list);
+ 
+ }
+ 
+ function getUserInfoById(id) {
+     if (id > 0) {
+ 
+         var result = {
+             id,
+             avatar: config.imgUri + '/uploads/avatar.jpg',
+             nickname: '未知用户',
+         };
+         let list = uni.getStorageSync(uni.getStorageSync('access_token') + '_frienddata');
+         if (!list) list = [];
+         list.forEach(v => {
+             if (v.id == id) {
+                 result.nickname = v.nickname;
+ 
+                 if (v.avatar.indexOf('http') > -1) {
+ 
+                 } else v.avatar = config.imgUri + v.avatar
+ 
+                 result.avatar = v.avatar;
+             }
+ 
+         })
+     } else {
+         var system = uni.getStorageSync('system');
+ 
+         var result = {
+             id,
+             avatar: config.imgUri + system['admin_logo'],
+             nickname: system['admin_nickname'],
+         };
+     }
+ 
+ 
+ 
+ 
+ 
+ 
+     return result;
+ }
+ 
+ function getGroupInfoById(id) {
+     var groups = uni.getStorageSync(uni.getStorageSync('access_token') + '_groups');
+     for (var i = 0; i < groups.length; i++) {
+         if (groups[i].id == id) {
+             var avatar = groups[i].avatar;
+             if (avatar !== null && avatar.indexOf('http') > -1) {
+ 
+             } else avatar = config.imgUri + avatar
+             var result = {
+                 id: id,
+                 avatar: avatar,
+                 nickname: groups[i].nickname,
+                 none: false
+             };
+ 
+ 
+             return result;
+ 
+         }
+     }
+ 
+     return {
+         id,
+         avatar: config.imgUri + '/uploads/group.jpg',
+         nickname: '未知群组',
+         none: false
+     };
+ 
+ 
+ }
+ 
+ function getGroupmemebrs(group_id, userid) {
+     var members = uni.getStorageSync(group_id + '_group_members');
+     if (!members) members = [];
+     let result = [];
+     members.forEach(item => {
+         if (item.id == userid) result = item;
+ 
+     })
+     return result;
+ }
+ 
+ function get_chat_list(id) {
+   
+     try{
+   var temp = cache(prefix(id)) ? cache(prefix(id)) : [];
+       
+   return temp;
+     }catch(e){
+         //TODO handle the exception
+         return [];
+     }
+ }
+ 
+ function get_chatold_list(id) {
+     try{
+       var temp = cache(prefix('old' + id)) ? cache(prefix('old' + id)) : [];
+       return lists;  
+     }catch(e){
+         //TODO handle the exception
+         return [];
+     }
+    
+ }
+ 
+ function msg_vocice(data) {
+     if (data.msg.self != 1 && data.msg.cache_key != uni.getStorageSync('cache_key')) {
+         var no_tip = 0;
+         var msgnotip = uni.getStorageSync('msgnotip');
+         if (!msgnotip) msgnotip = [];
+         msgnotip.map(item => {
+             if (item.storekey == data.msg.cache_key) {
+                 no_tip = 1;
+ 
+             }
+ 
+         })
+         if (data.msg.message.content.type == 'remind' && data.msg.message.content.remind.id == uni.getStorageSync(
+                 'access_token')) {
+             no_tip = 0;
+             data.msg.message.content.content = data.msg.message.content.content.replace('@{' + data.msg.message.content
+                 .remind.id + '}', '有人@我');
+             cache('remid_' + key, data.msg);
+ 
+         }
+ 
+         if (no_tip == 0) {
+             let userinfo = cache('userInfo');
+ 
+             //  console.log(userinfo);
+             if (parseInt(userinfo.note2) != 0) uni.vibrateLong();
+             if (parseInt(userinfo.note1) != 0) action.playVoice('/static/voice/chat.mp3');
+ 
+         }
+     }
+ 
+     return data;
+ 
+ 
+ }
+ 
+ function httpString(str) {
+ 
+     var reg = /(https?|http|ftp|file):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/g;
+     //  console.log(str);
+     
+     try{
+         
+       var s = str.match(reg);
+       if (s != null) {
+           return s;
+       } else {
+           return false;
+       }  
+     }catch(e){
+        return false; 
+     }
+     
+     
+ 
+ }
+ 
+ function get_senderinfo(v) {
+ 
+ 
+     try {
+         if (v.group_id > 0) {
+             var mem = getGroupmemebrs(v.group_id, v.sender_id);
+             if (mem.id > 0) v.sender = mem;
+             //  console.log(mem);
+         }
+         var avatar = v.sender.avatar;
+         if (avatar.indexOf('http') > -1) {
+ 
+         } else avatar = config.imgUri + avatar
+         var obj = {
+             id: v.sender_id,
+             avatar: avatar,
+             nickname: v.sender.nickname,
+         };
+     } catch (e) {
+         //                 console.log(v);
+         var obj = {
+             id: v.sender_id,
+             avatar: '',
+             nickname: v.nickname,
+         };
+     }
+ 
+     return obj;
+ }
+ 
+ function message_format(v) {
+       
+     try {
+     v.message.content = JSON.parse(v.message.content);
+         var type = v.message.content.type;
+        
+     } catch (e) {
+         //TODO handle the exception
+    
+         var type = v.message.content.type;
+     }
+ 
+    
+     if (type == 'remind') {
+ 
+  var mem = getGroupmemebrs(v.group_id, v.message.content.remind.id);
+                     if (mem.id==v.message.content.remind.id  ) {
+                         var atname = mem.nickname;
+                     } else 
+       var atname = v.message.content.remind.nickname;
+          
+         v.message.content.content = v.message.content.content.replace('@{' + v.message.content.remind.id + '}', '@' +
+             atname);
+ 
+     }
+     if (v.message.type == 'text' && v.message.content.type != 'emotion') {
+ 
+         if (type == 'remind')
+             var content = v.message.content.content;
+         else var content = v.message.content;
+ 
+         var res = httpString(content);
+         if (res != false) {
+             v.message.type = 'url';
+             v.message.content = {};
+             v.message.content.content = content;
+             v.message.content.urls = res;
+         }
+     }
+ 
+     return v;
+ }

+ 87 - 0
library/helper.js

@@ -0,0 +1,87 @@
+import config from '../config.js'
+export default {
+	/**
+	 * 图片上传,支持多图
+	 * @author nullfeng
+	 * @param Array <images> 本地路径数组
+	 * @param Function [complete] 回调函数()
+	 * @return Promise
+	 */
+	uploadFiles(images, type,data,complete){
+       //console.log(config.apiUri)
+       if(type=='images' || type=='avatar') var url=config.apiUri+'upload.php?act=uploadImage';
+       else if(type=='Vedio')var url=config.apiUri+'upload.php?act=uploadVedio';
+       else var url=config.apiUri+'upload.php?act=uploadFile';
+		let queue = [];
+		images.forEach(image=>{
+			queue.push(new Promise((resolve,reject)=>{
+				uni.uploadFile({
+					url: url,
+					filePath: image,
+					name: 'file',
+					fileType: type,
+					formData:data,
+                    header: {
+                 
+                    },
+					success: res => {
+                            
+						let result = JSON.parse(res.data);
+
+						if(result.uploaded) {
+                             
+                            var url=config.imgUri+result.url;
+                      
+							resolve(url);
+						} else {
+							uni.showModal({
+								content: result.message,
+								showCancel: false
+							});
+						}
+					},
+					fail: err => {
+						uni.showModal({
+							content: err.errMsg,
+							showCancel: false
+						});
+						reject();
+					}
+				});
+			}));
+		});
+		if(!queue.length) queue.push(new Promise((resolve,reject)=>{resolve("")}));
+		return new Promise((resolve,reject)=>{
+			Promise.all(queue).then(res=>{
+				complete && complete(res.join('|'));
+				resolve(res.join('|'));
+			}).catch(res=>{
+				reject();
+			});
+		});
+	},
+    
+    
+	/**
+	 * 格式化时间
+	 */
+	formatDate(date, fmt) {
+		if(typeof(date)=="string") {
+			date = new Date(date.replace('年','/').replace('月','/').replace('日','').replace(/-/g,'/'));
+		}
+		var o = {
+			"m+": date.getMonth() + 1, //月份   
+			"d+": date.getDate(), //日   
+			"h+": date.getHours(), //小时   
+			"i+": date.getMinutes(), //分   
+			"s+": date.getSeconds(), //秒   
+			"q+": Math.floor((date.getMonth() + 3) / 3), //季度
+		};
+		if (/(y+)/.test(fmt))
+			fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
+		for (var k in o)
+			if (new RegExp("(" + k + ")").test(fmt))
+				fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
+		return fmt;
+	}
+};

+ 139 - 0
library/http.js

@@ -0,0 +1,139 @@
+import config from '../config.js'
+class Http {
+    constructor(base_url = '') {
+        this._baseUrl = base_url;
+        this._requestCount = 0;
+        this._showWait = true;
+        this._showError = true;
+
+    }
+    setWait(value) {
+        this._showWait = value;
+        return this;
+    }
+    autoError(value) {
+        this._showError = value;
+        return this;
+    }
+    request(url, option = {}) {
+        let that = this;
+        return new Promise((resolve, reject) => {
+            option.url = that._baseUrl + url;
+            option.method = option.method || "POST";
+            option.header = {
+                'Content-Type': 'application/x-www-form-urlencoded',
+               
+            };
+          //	option.header.token = uni.getStorageSync('access_token') || "";
+
+            option.fail = function(res) {
+                 setTimeout(function(){
+                     var nowtime=(new Date().getTime())/1000;
+                     var errortime=uni.getStorageSync('errortime');
+                     if(!errortime) {
+                         errortime=nowtime;
+                         uni.setStorageSync('errortime',nowtime);
+                     }
+                     if(nowtime-errortime>3600*12){
+                         
+                         uni.setStorageSync('errortime',nowtime);
+                        
+                         uni.showToast({
+                             title: '网络连接不可用,请稍后重试',
+                            icon:'none',
+                            duration: 1000,
+                            position: "bottom"
+                         }); 
+                     }
+                 },100)
+           
+            };
+            
+
+            option.success = function(res) {
+
+                if (res.statusCode == 200) {
+                    if (res.data && res.data.code == 200) {
+                        resolve(res.data, res);
+                    } else {
+                        if (res.data && res.data.message && that._showError) {
+                          
+                            setTimeout(() => {
+                                uni.showToast({
+                                    icon: 'none',
+                                    title: res.data.message
+                                });
+                            }, 20);
+                        }
+                        reject(res.data, res);
+                    }
+                } else {
+                    if (res.data && res.data.message && that._showError) {
+                        setTimeout(() => {
+                            uni.showToast({
+                                icon: 'none',
+                                title: res.data.message
+                            });
+                        }, 20);
+                    }
+                    reject(res.data, res);
+                }
+            };
+            let _complete = option.complete;
+            option.complete = function(res) {
+                that._showWait = true;
+                that._showError = true;
+                if (!(--that._requestCount)) uni.hideLoading();
+                _complete && _complete(res);
+            };
+            if (that._showWait && !that._requestCount) {
+                uni.showLoading({
+                    title: '加载中',
+                    mask: true
+                });
+            }
+            that._requestCount++;
+
+            uni.request(option);
+        });
+    }
+    get(url, data = {}) {
+
+        if (data._showWait === false) this.setWait(false);
+        data.agentid=this.agentid();
+        
+        return this.request(url, {
+            method: "GET",
+            data
+        });
+    }
+    
+    post(url, data = {}) {
+
+        if (data._showWait === false) this.setWait(false);
+         data.agentid=this.agentid();
+        
+        return this.request(url, {
+            method: "POST",
+            data
+        });
+    }
+    agentid(){
+        if(uni.getStorageSync('agentid')) return uni.getStorageSync('agentid');
+        else{
+            var agentid=this.randomstr(18);
+            uni.setStorageSync('agentid',agentid);
+            return agentid;
+        }
+    }
+    randomstr(len){
+     var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; 
+       var maxPos = chars.length;
+       var pwd='';
+     for (var i = 0; i < len; i++) {
+         pwd += chars.charAt(Math.floor(Math.random() * maxPos));
+     }
+     return pwd;
+    }
+}
+export default new Http(config.apiUri);

+ 175 - 0
library/index.js

@@ -0,0 +1,175 @@
+import http from './http.js'
+class Ht{
+    
+    update(data){
+    	return http.setWait(false).post('index.php?act=update',data)
+    }
+	//注册
+	register(data){
+		return http.setWait(false).post('user.php?act=reg',data)
+	}
+	//登录
+	login(data){
+		return http.setWait(false).post('user.php?act=userlogin',data)
+	}
+	// 搜索好友
+	searchFriend(data){
+		return http.get('user.php?act=searchUser',data)
+	}
+    
+    setmark(data){
+        return http.post('user.php?act=setmark',data)
+        
+    }
+	
+	//添加好友
+	applyAddFriend(data){
+		return http.setWait(false).post('user.php?act=applyAddFriend',data)
+	}
+	//处理好友请求
+	handleFriendApply(data){
+		return http.setWait(false).post('user.php?act=handleFriendApply',data)
+	}
+	//获取新朋友
+	getFriendApply(data){
+		return http.setWait(false).post('user.php?act=getFriendApply',data)
+	}
+	//获取新朋友数量
+	getFriendApplyCount(data){
+		return http.setWait(false).post('user.php?act=getFriendApplyCount',data)
+	}
+	
+	//获取用户信息
+	getUserInfo(data){
+		return http.setWait(false).post('user.php?act=getUserInfo',data)
+	}
+	// 重置登录密码
+	resetPas(data){
+		return http.setWait(false).post('user.php?act=resetPassword',data)
+	}
+	changePass(data){
+		return http.setWait(false).post('user.php?act=changePass',data)
+	}
+	// 获取我的好友
+	getMyFriend(data){
+		return http.setWait(false).get('user.php?act=getMyFriend',data)
+	}
+	// 获取我的好友
+	createGroup(data){
+        
+		return http.setWait(false).post('group.php?act=createGroup',data)
+	}
+	// 获取加入的群
+	getMyGroup(data){
+		return http.setWait(false).get('group.php?act=getMyGroup',data)
+	}
+	// 加入群聊
+	joinGroup(data){
+		return http.get('group.php?act=joinGroup',data)
+	}
+	// 发送红包
+	sendPacket(data){
+		return http.setWait(false).post('api/v1.redpack/create',data)
+	}
+	// 编辑用户信息
+	changeProfile(data){
+		return http.setWait(false).post('user.php?act=changeProfile',data)
+	}
+	
+	//获取二维码链接
+	getMyQrcodeCard(data){
+		return http.get('index.php?act=getMyQrcodeCard',data)
+	}
+	
+	//获取群成员
+	getGroupUsers(data){
+		return http.setWait(false).post('group.php?act=getGroupUsers',data)
+	}
+    setGroupNickname(data){
+    	return http.setWait(false).post('group.php?act=setGroupNickname',data)
+    }
+	//获取群信息
+	getGroupInfo(data){
+		return http.setWait(false).post('group.php?act=getGroupInfo',data)
+	}
+	//获取群二维码
+	getQrcodeCard(data){
+		return http.setWait(false).post('group.php?act=getQrcodeCard',data)
+	}
+	//修改群名
+	changeGroupName(data){
+		return http.setWait(false).post('group.php?act=changeGroupName',data)
+	}
+	//群移除用户
+	removeUserForGroup(data){
+		return http.setWait(false).post('group.php?act=removeUserForGroup',data)
+	}
+	//群邀请用户
+	inviteIntoGroup(data){
+		return http.setWait(false).post('group.php?act=inviteIntoGroup',data)
+	}
+	//获取验证码
+	sendCode(data){
+		return http.setWait(false).post('user.php?act=sendCode',data)
+	}
+	
+	
+	//删除好友
+	deleteFriend(data){
+		return http.setWait(false).post('user.php?act=deleteFriend',data)
+	}
+	//删除群
+	removeGroup(data){
+		return http.setWait(false).post('group.php?act=removeGroup',data)
+	}
+	//退出群
+	quitGroup(data){
+		return http.setWait(false).post('group.php?act=quitGroup',data)
+	}
+	//全体成员是否禁言
+	changeSpeak(data){
+		return http.setWait(false).post('group.php?act=changeSpeak',data)
+	}
+	
+	//获取群红包记录
+	getPayWays(data){
+		return http.setWait(false).post('user.php?act=chargeways',data)
+	}
+    
+    sendCircle(data){
+    	return http.setWait(false).post('circle.php?act=send',data)
+    }
+    getCircleList(data){
+        return http.setWait(false).post('circle.php?act=list',data)
+        
+    }
+    getMyCircle(data){
+        return http.setWait(false).post('circle.php?act=mycircle',data)
+        
+    }
+    setCircleLike(data){
+        return http.setWait(false).post('circle.php?act=like',data)
+        
+    }
+    setCircleComment(data){
+        return http.setWait(false).post('circle.php?act=comment',data)
+     
+    }
+    getCircleMsg(data){
+        return http.setWait(false).post('circle.php?act=msg',data)
+     
+    }
+    getCircleImg(data){
+        return http.setWait(false).post('user.php?act=circleImg',data)
+     
+    }
+    CircleDelete(data){
+        
+         return http.setWait(false).post('circle.php?act=delete',data)
+    }
+    CommentDelete(data){
+        return http.setWait(false).post('circle.php?act=delete_comment',data)
+    }
+    
+}
+export default new Ht()

+ 63 - 0
library/message.js

@@ -0,0 +1,63 @@
+
+import config from '../config.js'
+const parseDate = (str) => new Date(str.replace(/(-|年|月)/g, '/').replace('日', ''));
+const dateToTime = (date) => date.getTime() / 1000;
+const cutTimeStr = (str) => str.substr(0,11);
+class Message {
+	//注册
+	list(){
+        
+     
+       var msg_list_key=uni.getStorageSync('access_token')+'_chat_msglist';
+     let tmp = [];
+     let lists11 =uni.getStorageSync(msg_list_key)?uni.getStorageSync(msg_list_key):[];
+     	let list= [];
+
+         let lists=[];
+         for(var i=0;i<lists11.length;i++){
+        
+         try{
+         	console.log(lists11[i]['key'],uni.getStorageSync('access_token'));
+         	if(lists11[i]['key'].indexOf(uni.getStorageSync('access_token')+'_chat_')>-1) lists.push(lists11[i]);
+         }catch(e){
+         	
+         }
+         }
+     
+        uni.setStorageSync(msg_list_key,lists);
+    
+     	lists.forEach(v => {
+    
+           if(v.msg.group_id>0){
+               
+               
+               
+           }
+           else{
+             var avatar=v.msg.avatar;
+             if(avatar!==null && avatar.indexOf('http')>-1) {
+                 
+             }else avatar=config.imgUri+avatar
+             var  userinfo = {
+             	avatar:avatar,
+             	nickname:v.msg.nickname,
+                 
+             }; 
+                               
+           }
+                
+            
+             v.msg = Object.assign(v.msg, (+v.msg.group_id > 0) ? getGroupInfoById(v.msg.receiver) :userinfo);
+             
+     		if(!v.msg.none) tmp.push(v.msg);
+          // console.log(JSON.stringify(v));
+             
+     	});
+     	tmp.sort((a, b) => dateToTime(parseDate(b.time)) - dateToTime(parseDate(a.time)));
+     	//console.log(tmp)
+     	return tmp;
+    
+	}
+    
+    }
+    export default new Message()

+ 91 - 0
library/scode.js

@@ -0,0 +1,91 @@
+import api from './index.js'
+export default {
+	getScode(data){
+		try{
+			let res = JSON.parse(data.result)
+            //用户
+			if(res.action == 'user'){
+               let params = `?id=${res.id}&from=qrcode`;
+                uni.navigateTo({
+                	url:'../friend/detail'+params
+                })
+            
+			}
+            //群组
+            else if(res.action == "group"){
+				api.joinGroup({group_id:res.id,userid:uni.getStorageSync('access_token')}).then(()=>{
+					if(res.data==true){
+                   let params = `?id=${res.id}`
+                   uni.navigateTo({
+                   	url:'../group/chat'+params
+                   })     
+                    }
+                   else{
+                       uni.showToast({
+                       	icon:'none',
+                       	title:res.message
+                       })
+                   }
+				}).catch((e)=>{
+					if(!e.message){
+						let params = `?id=${res.id}`
+						uni.navigateTo({
+							url:'../group/chat'+params
+						})
+					}
+				})
+			}
+            else if(res.action=='login' && res.from=='cj666'){
+             
+              uni.navigateTo({
+                  url:"/pages/login/qrcode?agent="+res.agent
+              })
+            }
+		}catch(e){
+            
+            var reg= /(https?|http|ftp|file):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/g;
+            //  console.log(str);
+             
+              var s = data.result.match(reg);
+              if(s!=null){
+               
+                  
+                  if(data.result.indexOf('detail?from=qrcode&id=')>-1){
+                      var arr=data.result.split('#');
+                     
+                      uni.navigateTo({
+                          url:arr[1]
+                      })
+                    
+                  }
+                  else if(data.result.indexOf('from=invite&invite_code=')>-1){
+                      var arr=data.result.split('=');
+                     
+                      uni.navigateTo({
+                          url:"/pages/login/index?invite_code="+arr[arr.length-1]
+                      })
+                    
+                  }
+                  else{
+                      let params = `?url=`+data.result;
+                       uni.navigateTo({
+                       	url:'../web/index'+params
+                       })
+                  }
+                  
+                  
+              
+              
+                 
+              }else{
+                uni.showToast({
+                	icon:'none',
+                	title:data.result
+                })
+              }
+              
+		
+		}
+		
+	}
+}

+ 138 - 0
library/socket.js

@@ -0,0 +1,138 @@
+const LOG_DEBUG = false;
+export default new class {
+	constructor() {
+		this.handlers = {};
+		this.queue = [];
+		this.status = false;
+		this.timer = null;
+        this.timer1 = null;
+        this.timer2 =null;
+        this.url='';
+        
+	}
+	connect(url) {
+        this.url=url;
+		uni.connectSocket({
+			url,
+             fail: () => {
+               this.status=false;
+                if(this.timer1!=null)clearInterval(this.timer1)
+                 this.timer1=setInterval(()=>{
+                 	if(!this.status) {
+              	  this.connect(this.url);
+              	     }
+           
+              }, 3* 1000);
+              
+            },
+		});
+        if(this.timer!=null)clearInterval(this.timer)
+		this.timer = setInterval(()=>{
+			if(!this.status) {
+				
+				this.connect(url);
+              
+                LOG_DEBUG && console.log('[socket] reconnect');
+			}
+        
+		}, 5 * 1000);
+		uni.onSocketOpen(() => {
+			this.status = true;
+			while (this.queue.length) this.send(this.queue.pop());
+			LOG_DEBUG && console.log('[socket] init');
+        clearInterval(this.timer2)
+               this.timer2=setInterval(()=>{
+               	if(this.status) {
+            	 this.send({
+            	 	type: 'ping'
+            	 });
+      }
+                       
+            }, 5* 1000);
+			this.emit('init');
+		});
+		uni.onSocketError(() => {
+			this.status = false;
+			LOG_DEBUG && console.log('[socket] error');
+			this.emit('error');
+		});
+		uni.onSocketMessage((res) => {
+			let result = JSON.parse(res.data);
+			if (result) {
+				LOG_DEBUG && console.log('[socket] recevice : ', result);
+				switch (result.type) {
+					case 'ping':
+                      // console.log(result);
+						this.send({
+							type: 'pong'
+						});
+						break;
+					case 'message':
+						this.send({
+							type: 'commit',
+							data: result.commit_id
+						});
+						this.emit('message', result.data);
+						break;
+					default:
+						this.emit(result.type, result);
+						break;
+				}
+			}
+		});
+		uni.onSocketClose(() => {
+			this.status = false;
+			LOG_DEBUG && console.log('[socket] close');
+			this.emit('close');
+		});
+	}
+	send(data) {
+		if (this.status) {
+			LOG_DEBUG && console.log('[socket] send', data);
+			uni.sendSocketMessage({
+				data: typeof(data) == 'string' ? data : JSON.stringify(data),
+                success: () => {
+                },
+                fail: () => {
+                  this.status = false;
+                  this.connect(this.url);
+                  this.queue.push(data);
+                },
+                
+			});
+		} else {
+			this.queue.push(data);
+            this.connect(this.url);
+		}
+	}
+	on(eventType, handler) {
+		var self = this;
+		if (!(eventType in self.handlers)) {
+			self.handlers[eventType] = [];
+		}
+		self.handlers[eventType].push(handler);
+		return this;
+	}
+	emit(eventType) {
+		var self = this;
+		var handlerArgs = Array.prototype.slice.call(arguments, 1);
+		if (!self.handlers[eventType]) return self;
+		for (var i = 0; i < self.handlers[eventType].length; i++) {
+			self.handlers[eventType][i].apply(self, handlerArgs);
+		}
+		return self;
+	}
+	off(eventType, handler) {
+		var currentEvent = this.handlers[eventType];
+		var len = 0;
+		if (currentEvent) {
+			len = currentEvent.length;
+			for (var i = len - 1; i >= 0; i--) {
+				if (currentEvent[i] === handler) {
+					currentEvent.splice(i, 1);
+				}
+			}
+		}
+		return this;
+	}
+};

+ 229 - 0
main.js

@@ -0,0 +1,229 @@
+import Vue from 'vue';
+import App from './App';
+import store from "./store";
+import helper from "./extends/helpers";
+import {
+	mapMutations
+} from 'vuex';
+
+import LoadMore from './components/load-more';
+import Result from './components/result-page';
+import Sender from './components/sender';
+
+import Payment from './components/payment';
+import Contracts from './components/contacts';
+import socket from "./library/socket"
+import config from "./config.js";
+import action from "./library/action.js";
+import chat from "./library/chat.js";
+import ican  from './js_sdk/ican-H5Api/ican-H5Api.js'
+helper(Vue);
+uni.setStorageSync('storeykey',"index");
+//打包消息数据
+const packMsg = function(res) {
+ 
+	return {
+		id: res.cache_key,
+		msg: res
+	};
+};
+//连接
+socket.connect(config.socketUri);
+//初始化
+socket.on('init', () => { //连接初始化
+
+   if( uni.getStorageSync('access_token')>0){
+    socket.send({
+    	type: 'login',
+    	token: uni.getStorageSync('access_token'),
+        imgUri:config.imgUri
+    });   
+   }
+  
+}).on('no_auth', () => { 
+    //收到这条指令需要重新验证身份
+   if( uni.getStorageSync('access_token')>0){
+    socket.send({
+    	type: 'login',
+    	token: uni.getStorageSync('access_token'),
+        imgUri:config.imgUri
+    });   
+   }
+
+}).on('userinfo', (res) => { //收到自己的用户信息
+//console.log(res.data);
+uni.setStorageSync('userinfo',JSON.parse(res.data));
+	store.commit('update_userinfo', JSON.parse(res.data));
+}).on('message', (res) => { //有用户或群发来的消息
+   console.log(res);
+	//store.commit('chat/push', packMsg(res));
+}).on('setting', (res) => { 
+	store.commit('chat/setting', res.data);
+}).on('chat', (res) => { //有用户或群发来的消息
+//console.log(res);
+chat.push(res,'index');
+ // try{
+
+ //    store.commit('chat/push', packMsg(res.data)); 
+ // }catch(e){
+ //     store.commit('chat/push', packMsg(JSON.parse(res.data))); 
+ // }
+
+	//
+}).on('request', (res) => {
+    //接收好友申请人数
+   if(parseInt(res.num)>parseInt(uni.getStorageSync('newfriendnum'))){
+       var   userinfo=uni.getStorageSync('userInfo');
+       if(parseInt(userinfo.note2)!=0) uni.vibrateLong();
+       if(parseInt(userinfo.note1)!=0) action.playVoice('/static/voice/friend.mp3');
+   }
+    uni.setStorageSync('newfriendnum',res.num);
+   action.setStatusTips();
+}).on('data_circle_tips', (res) => { 
+    uni.setStorageSync('data_circle_tips',res.data);
+   action.setStatusTips();
+}).on('circle_push', (res) => {//更新朋友圈消息
+    action.circleUpate(res.data)
+
+}).on('otherlogin', (res) => {//另一台设备登录
+      socket.send({
+        	type: 'logout',
+        	token: uni.getStorageSync('access_token'),
+        }); 
+       action.quitcid();
+       uni.removeStorageSync('userInfo');
+       uni.removeStorageSync('access_token'); 
+   uni.showModal({
+           title:'强制下线提醒',
+           content:'您的账号于'+res.time+'在另一台设备登录',
+       })
+  setTimeout(function(){
+ uni.reLaunch({
+     url:'/pages/game/index',
+ })      
+  },1500)     
+
+}).on('clearmsg', (res) => { //清空聊天记录
+//console.log(res);
+store.commit('chat/delete_msglist',res.key);
+
+}).on('response', (res) => { //接收响应消息
+
+	 console.log(res.message);
+});
+
+
+
+Vue.prototype.sendmsg = function (data){
+    
+   // console.log(packMsg(data))
+store.commit('chat/push', packMsg(data));
+
+}
+
+
+Vue.prototype.clearchatlist = function (msg){
+ store.commit('chat/clearchatlist',msg);
+
+}
+
+Vue.prototype.delete_msg = function (cache_key){
+ store.commit('chat/delete_msglist',cache_key);
+
+}
+Vue.prototype.update_msglist = function (data){
+ store.commit('chat/update_msglist',data);
+
+}
+
+
+
+Vue.prototype.image_cache= function(image_url) {
+       
+    // #ifndef APP-PLUS
+    
+    if(image_url==undefined) return false;
+        
+        
+    if(image_url.indexOf('http')<=-1) image_url=config.imgUri+image_url;
+   
+     return image_url;
+       
+    // #endif
+     // #ifdef APP-PLUS
+                if(image_url==undefined) return false;
+    
+           if(image_url.indexOf('http')<=-1) image_url=config.imgUri+image_url;
+    		var store=uni.getStorageSync('file_cache_'+image_url);
+            if(store.length>10){
+              uni.getSavedFileInfo({
+                  filePath:store,
+                  success: (res) => {
+                 
+                  },
+                  fail: (res) => {
+                      uni.removeStorageSync('file_cache_'+image_url)
+                      return image_url;
+                  }
+              })
+              //  console.log('本地存在缓存',store); 
+          
+           return store;
+            }else{
+          
+                uni.downloadFile({
+                	url: image_url,
+                	success: (res) => {
+                    
+                		if (res.statusCode === 200) {
+                             uni.saveFile({
+                                  tempFilePath:res.tempFilePath,
+                                  success: function (res1) {
+                                    
+                                    var savedFilePath = res1.savedFilePath;
+                              
+                                    uni.setStorageSync('file_cache_'+image_url,savedFilePath);
+                                  }
+                                });
+                			
+                		}
+                	}
+                }); 
+                return image_url;
+            }
+           
+           // #endif
+    	}
+Vue.prototype.GetUserinfo = function(userid){
+  var friendlist =  uni.getStorageSync(uni.getStorageSync('access_token')+'_frienddata');
+   if(!friendlist) friendlist=[];
+   for(var i=0;i<friendlist.length;i++){
+       if(friendlist[i].id==userid) return friendlist[i];
+   }
+  return [];
+}
+
+Vue.prototype.$socket = socket;
+Vue.prototype.$store = store;
+Vue.prototype.$packMsg = packMsg;
+Vue.prototype.$action = action;
+
+Vue.component('load-more', LoadMore);
+Vue.component('result', Result);
+Vue.component('v-sender', Sender);
+Vue.component('v-payment', Payment);
+Vue.component('v-contracts', Contracts);
+
+
+Vue.config.productionTip = false;
+
+App.mpType = 'app';
+const app = new Vue({
+	...App,
+	store
+});
+
+app.$mount();
+
+
+

+ 181 - 0
manifest.json

@@ -0,0 +1,181 @@
+{
+    "name" : "易趣联盟",
+    "appid" : "__UNI__E85CC4B",
+    "description" : "最好用的即时通讯APP",
+    "versionName" : "1.1.9",
+    "versionCode" : 119,
+    "transformPx" : false,
+    "app-plus" : {
+        /* 5+App特有相关 */
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : false,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        "runmode" : "liberate",
+        "softinputMode" : "adjustPan",
+        "modules" : {
+            "VideoPlayer" : {},
+            "Camera" : {},
+            "Barcode" : {},
+            "Record" : {}
+        },
+        /* 模块配置 */
+        "distribute" : {
+            /* 应用发布信息 */
+            "android" : {
+                /* android打包配置 */
+                "permissions" : [
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-permission android:name=\"android.permission.INTERNET\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ],
+                "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ]
+            },
+            "ios" : {
+                "idfa" : false,
+                "UIBackgroundModes" : "fetch,audio",
+                "dSYMs" : false,
+                "privacyDescription" : {
+                    "NSPhotoLibraryUsageDescription" : "该应用需要读取你的相册,以便为你编辑用户信息",
+                    "NSPhotoLibraryAddUsageDescription" : "该应用需要读取你的相册,以便为你编辑用户信息",
+                    "NSCameraUsageDescription" : "该应用需要读取你的相册,以便为你编辑用户信息",
+                    "NSMicrophoneUsageDescription" : "该应用需要使用你的麦克风,以便语音播放"
+                }
+            },
+            /* ios打包配置 */
+            "sdkConfigs" : {
+                "payment" : {},
+                "speech" : {
+                    "ifly" : {}
+                },
+                "ad" : {},
+                "geolocation" : {},
+                "share" : {},
+                "maps" : {}
+            },
+            "icons" : {
+                "ios" : {
+                    "appstore" : "unpackage/res/icons/1024x1024.png",
+                    "ipad" : {
+                        "app" : "unpackage/res/icons/76x76.png",
+                        "app@2x" : "unpackage/res/icons/152x152.png",
+                        "notification" : "unpackage/res/icons/20x20.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "proapp@2x" : "unpackage/res/icons/167x167.png",
+                        "settings" : "unpackage/res/icons/29x29.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "spotlight" : "unpackage/res/icons/40x40.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
+                    },
+                    "iphone" : {
+                        "app@2x" : "unpackage/res/icons/120x120.png",
+                        "app@3x" : "unpackage/res/icons/180x180.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "notification@3x" : "unpackage/res/icons/60x60.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "settings@3x" : "unpackage/res/icons/87x87.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
+                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
+                    }
+                },
+                "android" : {
+                    "hdpi" : "unpackage/res/icons/72x72.png",
+                    "ldpi" : "unpackage/res/icons/48x48.png",
+                    "mdpi" : "unpackage/res/icons/48x48.png",
+                    "xhdpi" : "unpackage/res/icons/96x96.png",
+                    "xxhdpi" : "unpackage/res/icons/144x144.png",
+                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
+                }
+            },
+            "splashscreen" : {
+                "android" : {
+                    "hdpi" : "C:/Users/Administrator/Desktop/cj666.png",
+                    "xhdpi" : "C:/Users/Administrator/Desktop/cj666.png",
+                    "xxhdpi" : "C:/Users/Administrator/Desktop/cj666.png"
+                },
+                "ios" : {
+                    "iphone" : {
+                        "portrait-896h@3x" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "landscape-896h@3x" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "portrait-896h@2x" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "landscape-896h@2x" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "iphonex" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "iphonexl" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "retina55" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "retina55l" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "retina47" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "retina47l" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "retina40" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "retina40l" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "retina35" : "C:/Users/Administrator/Desktop/cj666.png"
+                    },
+                    "ipad" : {
+                        "portrait-1366h@2x" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "landscape-1366h@2x" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "portrait-1194h@2x" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "landscape-1194h@2x" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "portrait-1112h@2x" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "landscape-1112h@2x" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "portrait-retina7" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "landscape-retina7" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "portrait7" : "C:/Users/Administrator/Desktop/cj666.png",
+                        "landscape7" : "C:/Users/Administrator/Desktop/cj666.png"
+                    },
+                    "storyboard" : "C:/Users/Administrator/Desktop/CustomStoryboard/CustomStoryboard.zip"
+                },
+                "iosStyle" : "common",
+                "androidStyle" : "common"
+            }
+        },
+        "usingComponents" : false,
+        "compatible" : {
+            "ignoreVersion" : true
+        },
+        "compilerVersion" : 3,
+        "nvueLaunchMode" : "fast"
+    },
+    /* SDK配置 */
+    "quickapp" : {},
+    /* 快应用特有相关 */
+    "mp-weixin" : {
+        /* 小程序特有相关 */
+        "appid" : "",
+        "setting" : {
+            "urlCheck" : true
+        }
+    },
+    "h5" : {
+        "devServer" : {
+            "https" : false,
+            "disableHostCheck" : true
+        },
+        "optimization" : {
+            "treeShaking" : {
+                "enable" : true
+            }
+        },
+        "router" : {
+            "mode" : "hash",
+            "base" : "/h5"
+        },
+        "domain" : "https://chat.accle.xyz",
+        "title" : "易趣联盟"
+    }
+}

+ 686 - 0
pages.json

@@ -0,0 +1,686 @@
+{
+
+    "pages": [
+        {
+            "path": "pages/index/launch",
+            "style": {
+                "navigationBarTitleText": "",
+                "app-plus": {
+                    "titleNView": false,
+                    "bounce": "none"
+                }
+            }
+        }, {
+            "path": "pages/index/index",
+            "style": {
+                "navigationBarTitleText": "消息",
+
+                "app-plus": {
+                    "titleNView": false
+                }
+            }
+        },
+        {
+            "path": "pages/index/upApp",
+            "style": {
+                "navigationBarTitleText": "更新"
+            }
+        },
+        {
+            "path": "pages/index/record",
+            "style": {
+                "navigationBarTitleText": "聊天记录"
+            }
+        },
+        {
+            "path": "pages/index/cropper",
+            "style": {
+                "navigationBarTitleText": "图片裁切"
+            }
+        },
+        {
+            "path": "pages/login/index",
+            "style": {
+
+                "navigationBarTitleText": "登录",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        },
+        {
+            "path": "pages/login/rule",
+            "style": {
+
+                "navigationBarTitleText": "用户协议",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        },
+
+        {
+            "path": "pages/circle/circle",
+            "style": {
+                "navigationBarTitleText": "朋友圈",
+                "app-plus": {
+                    "titleNView": {
+                        "buttons": [{
+                            "text": "\ue8e1",
+                            "fontSize": "20",
+                            "fontSrc": "/static/iconfont.ttf",
+                            "name": "add"
+                        }]
+                    }
+                },
+                "enablePullDownRefresh": true
+            }
+        },
+        {
+            "path": "pages/circle/circle_details",
+            "style": {
+                "navigationBarTitleText": "",
+                "app-plus": {
+                    "softinputMode": "adjustResize",
+                    "titleNView": {
+                        "type": "transparent",
+                        "buttons": []
+                    }
+                }
+            }
+        },
+        {
+            "path": "pages/circle/circle_chat_details",
+            "style": {
+                "navigationBarTitleText": "我的消息",
+                "app-plus": {
+
+                    "titleNView": {
+                        "buttons": {
+                            "text": "\ue60b",
+                            "color": "#1AAD19",
+                            "fontSrc": "/static/fonts/iconfont.ttf",
+                            "fontSize": "17px"
+                        }
+                    }
+                }
+            }
+        },
+        {
+            "path": "pages/circle/circle/send",
+            "style": {
+                "navigationBarTitleText": "发布我的动态",
+                "app-plus": {
+                    "titleNView": {
+                        "buttons": [{
+                            "text": "\ue60b",
+                            "color": "#000000",
+                            "fontSrc": "/static/fonts/iconfont.ttf",
+                            "fontSize": "17px"
+                        }]
+                    }
+                }
+            }
+        },
+
+
+
+        {
+            "path": "pages/mine/order",
+            "style": {
+                "navigationBarTitleText": "账单",
+                "app-plus": {
+                    "bounce": "none",
+                    "titleNView": true
+                }
+            }
+        },
+
+
+        {
+            "path": "pages/mine/profile",
+            "style": {
+                "navigationBarTitleText": "个人资料",
+                "app-plus": {
+                    "bounce": "none"
+                }
+            }
+        },
+
+        {
+            "path": "pages/mine/qrcode",
+            "style": {
+                "navigationBarTitleText": "用户二维码",
+                "app-plus": {
+                    "bounce": "none",
+                    "titleNView": {
+                        "buttons": [{
+                            "text": "\ueb9f",
+                            "fontSize": "20",
+                            "fontSrc": "/static/iconfont.ttf"
+                        }]
+                    }
+
+                },
+                "h5": {
+                    "titleNView": {
+                        "buttons": false
+                    }
+                }
+            }
+        },
+
+
+        {
+            "path": "pages/group/list",
+            "style": {
+                "navigationBarTitleText": "我的群组",
+                "app-plus": {
+                    "bounce": "all",
+                    "titleNView": false
+                }
+            }
+        },
+        {
+            "path": "pages/group/qrcode",
+            "style": {
+                "navigationBarTitleText": "群聊二维码",
+                "app-plus": {
+                    "bounce": "none",
+                    "titleNView": {
+
+                    }
+                }
+            }
+        },
+        {
+            "path": "pages/group/create",
+            "style": {
+                "navigationBarTitleText": "发起群聊",
+                "app-plus": {
+                    "bounce": "none"
+                }
+            }
+        },
+        {
+            "path": "pages/index/contact",
+            "style": {
+                "navigationBarTitleText": "通讯录",
+                "app-plus": {
+                    "titleNView": false,
+                    "bounce": "none"
+                }
+            }
+        },
+
+
+        {
+            "path": "pages/friend/detail",
+            "style": {
+                "navigationBarTitleText": "",
+                "navigationBarTextStyle": "black",
+                "app-plus": {
+                    "titleNView": {
+                        "backgroundColor": "#fff",
+                        "titleColor": "#000000",
+
+                        "buttons": [{
+
+                            "text": "\ueb9f",
+                            "fontSize": "20",
+                            "fontSrc": "/static/iconfont.ttf"
+
+                        }]
+                    }
+                }
+            }
+        },
+        {
+            "path": "pages/friend/request",
+            "style": {
+                "navigationBarTitleText": "验证消息",
+                "app-plus": {
+                    "bounce": "all",
+                    "titleNView": false
+
+
+                }
+            }
+        },
+        {
+            "path": "pages/mine/password",
+            "style": {
+                "navigationBarTitleText": "设置密码",
+                "app-plus": {
+                    "bounce": "none",
+                    "titleNView": false
+
+                }
+            }
+        },
+
+
+        {
+            "path": "pages/friend/chat",
+            "style": {
+                "navigationBarTitleText": "私聊",
+                "enablePullDownRefresh": false,
+                "app-plus": {
+                    "bounce": "none",
+                    "titleNView": {
+                        "buttons": [{
+                            "text": "\ueb9f",
+                            "fontSize": "20",
+                            "fontSrc": "/static/iconfont.ttf"
+                        }]
+                    },
+                    "softinput": {
+                        "mode": "adjustResize"
+                    }
+                }
+            }
+        },
+        {
+            "path": "pages/group/chat",
+            "style": {
+                "navigationBarTitleText": "群聊",
+
+
+                "app-plus": {
+
+                    "bounce": "none",
+                    "titleNView": {
+                        "buttons": [{
+                            "text": "\ueb9f",
+                            "fontSize": "20",
+                            "fontSrc": "/static/iconfont.ttf"
+                        }]
+                    },
+                    "softinput": {
+                        "mode": "adjustResize"
+                    }
+
+
+
+                }
+            }
+        },
+        {
+            "path": "pages/group/detail",
+            "style": {
+                "navigationBarTitleText": "",
+                "app-plus": {
+                    "titleNView": false
+                }
+            }
+        },
+
+        {
+            "path": "pages/mine/index",
+            "style": {
+
+                "app-plus": {
+                    "bounce": "none",
+                    "titleNView": false
+                }
+            }
+        },
+
+        {
+            "path": "pages/mine/recharge",
+            "style": {
+                "navigationBarTitleText": "充值",
+                "app-plus": {
+                    "bounce": "none"
+                }
+            }
+        },
+        {
+            "path": "pages/mine/cash",
+            "style": {
+                "navigationBarTitleText": "提现",
+                "app-plus": {
+                    "bounce": "none"
+                }
+            }
+        },
+
+
+        {
+            "path": "pages/web/index",
+            "style": {
+                "navigationBarTitleText": "",
+                "app-plus": {
+                    "bounce": "none",
+                    "titleNView": {
+                        "buttons": [{
+                            "text": "\ueb9f",
+                            "fontSize": "20",
+                            "fontSrc": "/static/iconfont.ttf"
+                        }]
+                    }
+                },
+                "h5": {
+                    "titleNView": {
+                        "buttons": false
+                    }
+                }
+            }
+        }, {
+            "path": "pages/login/froget",
+            "style": {
+
+                "navigationBarTitleText": "忘记密码",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        }
+
+
+
+        , {
+            "path": "pages/circle/mycircle",
+            "style": {
+                "navigationBarTitleText": "我的朋友圈"
+                // "app-plus": {
+                //     "bounce": "none",
+                //     "titleNView": false
+                // }
+            }
+        }
+
+        , {
+            "path": "pages/mine/note",
+            "style": {
+                "navigationBarTitleText": "消息通知设置",
+                "app-plus": {
+                    "bounce": "none",
+                    "titleNView": true
+                }
+            }
+        }
+
+
+        , {
+            "path": "pages/group/index",
+            "style": {
+                "navigationBarTitleText": "聊天室",
+                "app-plus": {
+                    "bounce": "all",
+                    "titleNView": false
+                }
+            }
+        }, {
+            "path": "pages/mine/mobile",
+            "style": {
+                "navigationBarTitleText": "绑定手机",
+                "app-plus": {
+                    "bounce": "all",
+                    "titleNView": true
+                }
+            }
+        }, {
+            "path": "pages/mine/bank",
+            "style": {
+                "navigationBarTitleText": "我的银行卡",
+                "app-plus": {
+                    "bounce": "none",
+                    "titleNView": false
+
+                }
+            }
+        }, {
+            "path": "pages/mine/password1",
+            "style": {
+                "navigationBarTitleText": "设置密码",
+                "app-plus": {
+                    "bounce": "none",
+                    "titleNView": false
+
+                }
+            }
+        },
+        {
+            "path": "pages/mine/zxzh",
+            "style": {
+                "navigationBarTitleText": "注销账户"
+            }
+        }, {
+            "path": "pages/group/userset",
+            "style": {
+                "navigationBarTitleText": "设置",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        }, {
+            "path": "pages/friend/userset",
+            "style": {
+                "navigationBarTitleText": "设置",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        }
+
+        , {
+            "path": "pages/friend/userlist",
+            "style": {
+                "navigationBarTitleText": "选择联系人",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        },
+        {
+            "path": "pages/login/qrcode",
+            "style": {
+                "navigationBarTitleText": "登录确认",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        }, {
+            "path": "pages/mine/note1",
+            "style": {
+                "navigationBarTitleText": "系统公告",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        }, {
+            "path": "pages/mine/notedetail",
+            "style": {
+                "navigationBarTitleText": "公告详情",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        }
+
+        , {
+            "path": "pages/friend/readpacket",
+            "style": {
+                "navigationBarTitleText": "发红包",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        }, {
+            "path": "pages/friend/redpacket_detail",
+            "style": {
+                "navigationBarTitleText": "红包详情",
+                "app-plus": {
+                    "titleNView": false,
+                    "bounce": "none"
+                }
+            }
+        }, {
+            "path": "pages/friend/logout_words",
+            "style": {
+                "navigationBarTitleText": "群印象",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        },
+        // {
+        //     "path": "pages/mine/joinvip",
+        //     "style": {
+        //         "navigationBarTitleText": "加入VIP",
+        //         "app-plus": {
+        //             "titleNView": true,
+        //             "bounce": "none"
+        //         }
+        //     }
+        // },
+        {
+            "path": "pages/mine/invite",
+            "style": {
+                "navigationBarTitleText": "邀请好友",
+                "app-plus": {
+                    "titleNView": false,
+                    "bounce": "none"
+                }
+            }
+        }, {
+            "path": "pages/mine/my_invite",
+            "style": {
+                "navigationBarTitleText": "我的团队",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        }, {
+            "path": "pages/mine/user_add",
+            "style": {
+                "navigationBarTitleText": "手动开户",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        }, {
+            "path": "pages/mine/user_invite",
+            "style": {
+                "navigationBarTitleText": "Ta的下级",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        },
+        // {
+        //     "path": "pages/mine/vipinfo",
+        //     "style": {
+        //         "navigationBarTitleText": "VIP特权介绍",
+        //         "app-plus": {
+        //             "titleNView": true,
+        //             "bounce": "none"
+        //         }
+        //     }
+        // },
+        {
+            "path": "pages/index/find",
+            "style": {
+                "navigationBarTitleText": "发现",
+                "app-plus": {
+                    "titleNView": false,
+                    "bounce": "none"
+                }
+            }
+        },
+        {
+            "path": "pages/mine/menu",
+            "style": {
+                "navigationBarTitleText": "设置",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        }, {
+            "path": "pages/mine/bag",
+            "style": {
+                "navigationBarTitleText": "我的钱包",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        }, {
+            "path": "pages/index/backlist",
+            "style": {
+                "navigationBarTitleText": "黑名单",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        }, {
+            "path": "pages/friend/report",
+            "style": {
+                "navigationBarTitleText": "投诉",
+                "app-plus": {
+                    "titleNView": true,
+                    "bounce": "none"
+                }
+            }
+        }
+
+    ],
+    "globalStyle": {
+        "navigationBarTextStyle": "black",
+        "navigationBarTitleText": "易趣联盟",
+        // "navigationBarBackgroundColor": "#4399fe",
+        "navigationBarBackgroundColor": "#ffffff",
+        "backgroundColor": "#FFFFFF"
+    },
+    "tabBar": {
+        "color": "#333333",
+        "selectedColor": "#ff443f",
+        "borderStyle": "black",
+        "backgroundColor": "#fbfbfb",
+        "list": [{
+                "pagePath": "pages/index/index",
+                "iconPath": "static/tabbar/hh.png",
+                "selectedIconPath": "static/tabbar/hh1.png",
+                "text": "消息"
+            },
+            {
+                "pagePath": "pages/index/contact",
+                "iconPath": "static/tabbar/txl.png",
+                "selectedIconPath": "static/tabbar/txl1.png",
+                "text": "通信录"
+            },
+
+            {
+                "pagePath": "pages/index/find",
+                "iconPath": "static/tabbar/cl1.png",
+                "selectedIconPath": "static/tabbar/cl.png",
+                "text": "发现"
+            },
+
+
+            {
+                "pagePath": "pages/mine/index",
+                "iconPath": "static/tabbar/wd.png",
+                "selectedIconPath": "static/tabbar/wd1.png",
+                "text": "我的"
+            }
+        ]
+    }
+}

+ 623 - 0
pages/circle/circle.vue

@@ -0,0 +1,623 @@
+<template>
+	<view id="moments" class="page">
+			
+		<view class="home-pic">
+		<image :src="photo(my_data.circle_img)" @tap="upload" style="width: 100vw;height:65vw;"></image>
+			<view class="home-pic-base">
+				<view class="top-pic">
+					<image class="header" :src="image_cache(myPhoto)"  @tap.stop="goDetails(my_data.id)" :lazy-load="true" />
+				</view>
+				<view class="top-name">{{ my_data.nickname }}</view>
+			</view>
+		</view>
+		
+		<view class="new_msg" style="color: #333333;" @tap="goCircleChat" v-if="no_reader_msg">你有<view style="color: #ff0000;display: inline;">{{no_reader_msg}}条</view>新的消息</view>
+         
+		<view class="moments__post1" v-for="(post,index) in posts" :key="index" :id="'post-'+index">
+			<view class="moments__post">
+              <view class="post-left">
+              	<image class="post_header" :src="image_cache(post.header_image)" @tap="goDetails(post.userid)" :lazy-load="true"/>
+              </view>
+              
+              <view class="post_right">
+              	<view class="post-username" @tap="goDetails(post.uid)">{{post.username}}</view>
+              	<view id="paragraph" class="paragraph" @tap="init_input()">{{post.content.text}}</view>
+              	
+              	<!-- 相册 -->
+              	<view class="thumbnails" v-if="post.type == 0" @tap="init_input()">
+              		<view :class="post.content.value.length === 1 ? 'my-gallery' : 'thumbnail' " 
+              		v-for="(image, index_images) in post.content.value" 
+              		:key="index_images">
+              			<image class="gallery_img"
+              			:lazy-load="true"
+              			mode="aspectFill"
+              			:src="image_cache(staticPath  + image)"
+              			:data-src="image"
+              			@tap="previewImage(index,index_images)"
+                        
+              			/>
+              		</view>
+              	</view>
+              	
+              	<!-- 资料条 -->
+              	<view class="toolbar">
+              		<view class="timestamp">{{ post.timestamp }}
+                    <view class="delete" v-if="post.userid==myid" @tap="circle_delete(index)">删除</view>
+                    </view>
+              		<view class="like" @tap="like(index)">
+              			<image :src="post.islike === 0 ? '../../static/push/circle/islike.png' : '../../static/push/circle/like.png'" :lazy-load="true"/>
+              		</view>
+              		<view class="comment" @tap="comment(index)">
+              			<image src="../../static/push/circle/comment.png" :lazy-load="true"></image>
+              		</view>
+              	</view>
+              	<!-- 赞/评论区 -->
+              	<view class="post-footer">
+              		<view class="footer_content" v-if="post.like.length">
+              			<image class="liked" src="../../static/push/circle/liked.png" :lazy-load="true"></image>
+              			<view class="nickname" 
+              			v-for="(user,index_like) in post.like" 
+              			:key="index_like"
+              			@tap="goDetails(user.uid)"
+              			>
+              				{{(index_like ? ',' : '' ) + user.username}}
+              			</view>
+              		</view>
+              		<view class="footer_content" 
+              			v-for="(comment,comment_index) in post.comment" 
+              			:key="comment_index" 
+              			@tap="reply(index,comment_index)">
+              			
+              			<view class="comment-nickname" style="word-break:break-all;line-height: 40upx;">
+              				{{comment.username + comment.reply + ': '}}
+              				<text class="comment-content">
+              					{{comment.content}}
+                                
+                                 
+              				</text>
+                              <view class="delete" style="float: right;" v-if="comment.uid==myid" @tap="comment_delete(index,comment_index)">删除</view>
+              			</view>
+              			
+              		</view>
+                      
+                    
+              	</view>
+                      
+              </view>  
+                
+                
+            </view>
+            
+    
+			<!-- 结束 post -->
+		</view>
+ <view class="foot" style="z-index: 999999;" v-show="showInput">
+     
+     	<chat-input @send-message="send_comment" @blur="blur" :focus="focus" :placeholder="input_placeholder"></chat-input>
+     	<!-- <chat-input @send-message="send_comment" @blur="blur" :placeholder="input_placeholder"></chat-input> -->
+     </view>
+		<view class="loadmore" v-if="showLoadMore">{{loadMoreText}}</view>
+	</view>
+
+</template>
+
+<script>
+    
+    import {
+    	mapState
+    } from 'vuex';
+	import chatInput from './circle/chat_input.vue'; //输入消息框
+	import _data from "../../library/_data.js"
+ 
+		import api from "../../library/index.js"
+        import action from "../../library/action.js"
+        import config from "../../config.js"
+        	import helper from "../../library/helper.js"
+	export default {
+		components: {
+			chatInput
+		},
+		data() {
+			return {
+				my_data: {
+				},
+				user_id: 0,
+				
+			    posts:[],
+				index: '',
+				comment_index: '',
+				input_placeholder: '评论', //占位内容
+				focus: false, //是否自动聚焦输入框
+				is_reply: false, //回复还是评论
+				showInput: false, //评论输入框
+				screenHeight: '', //屏幕高度(系统)
+				platform: '',
+				windowHeight: '' ,//可用窗口高度(不计入软键盘)
+				loadMoreText: "加载中...",
+				showLoadMore: false,
+				is_more: false,
+				no_reader_msg: uni.getStorageSync('data_circle_tips')?uni.getStorageSync('data_circle_tips'):0,
+                loaddata:[],
+                myid:uni.getStorageSync('access_token'),
+                userinfo:uni.getStorageInfoSync('userInfo'),
+                page:1,             
+			}
+		},
+        created() {
+            this.my_data= {
+					id: uni.getStorageSync('access_token'),
+					nickname: this.userinfo.nickname,
+					photo: '../../static/logo.png',
+					circle_img: '../../static/img/default_circle_img.jpg',
+				}
+        },
+		computed:{
+			myPhoto(){
+				return this.my_data.photo ;
+			},
+			circleImg(){
+              
+				return this.my_data.circle_img;
+			},
+			staticPath(){
+				return config.imgUri;
+			},
+			
+			imgRan(){
+				return Math.random();
+			},
+          
+		},
+		onLoad(option) {
+			// let _this = this;
+			
+			// uni.getSystemInfo({ //获取设备信息
+			// 	success: (res) => {
+			// 		_this.screenHeight = res.screenHeight;
+			// 		_this.platform = res.platform;
+			// 	}
+			// });
+            //this.onGetData();
+			this.onshowlisten();
+		},
+		onShow() {
+		
+		
+			var _this = this;
+                this.getUserInfo();
+			var circle_data =_data.cache('circle_data');
+            
+   
+           // console.log('onshow');
+			/** 加载本地缓存数据,让页面秒速渲染出来 */
+			if(circle_data){
+              setTimeout(function(){_this.setCircleData(circle_data);},10);	
+				_this.pullDownRefresh();
+				
+			}
+			else{
+                _this.setCircleData([]);
+				_this.pullDownRefresh();
+			}
+			
+			
+			console.log('+++');
+		},
+		onUnload() {
+			this.$socket.off('data_circle_tips');
+            this.$socket.off('circle_push');
+			uni.offWindowResize(); //取消监听窗口尺寸变化
+			this.max = 0,
+			this.data = [],
+			this.loadMoreText = "加载更多",
+			this.showLoadMore = false;
+		},
+        
+     
+		onReachBottom() { //监听上拉触底事件
+			let _this =this;
+			_this.showLoadMore = true;
+			if(_this.is_more){
+				return;
+			}
+			this.page++;
+
+          this.onGetData();
+		},
+		onPullDownRefresh() { //监听下拉刷新动作
+			if(_data.data('no_reader_circle') || _data.data('no_reader_circle_chat_num')){
+				this.posts = [];
+				_data.data('circle_data',[]);
+			}
+			this.pullDownRefresh();
+		},
+		onNavigationBarButtonTap(e) {//监听标题栏点击事件
+			if (e.index == 0) {
+				this.navigateTo('./circle/send');
+			}
+		},
+		methods: {
+            photo(path){
+                if(path.indexOf('http')<=-1) return path;
+                else  return this.image_cache(path)
+         
+            },
+            onshowlisten(){
+                this.no_reader_msg = uni.getStorageSync('data_circle_tips') ?  uni.getStorageSync('data_circle_tips') : 0;
+                action.setStatusTips();
+                _data.data('no_reader_circle',0);
+                
+                // 监听窗口尺寸变化,窗口尺寸不包括底部导航栏
+                uni.onWindowResize((res) => { 
+                	if(this.platform === 'ios'){
+                		this.windowHeight = res.size.windowHeight;
+                		this.adjust();
+                	}else{
+                		if (this.screenHeight - res.size.windowHeight > 60 && this.windowHeight <= res.size.windowHeight) {
+                			this.windowHeight = res.size.windowHeight;
+                			this.adjust();
+                		}
+                	}
+                });	
+                        
+                        
+                   this.$socket.on('circle_push', (res) => {//更新朋友圈消息
+                        action.circleUpate(res.data);
+                       this.posts =_data.cache('circle_data');
+                    })    
+                        
+                
+                
+                /** 监听朋友圈动态提示 */
+                this.$socket.on('data_circle_tips',function(res){
+                	if(!isNaN(res.data)){
+                		_this.no_reader_msg = res.data;
+                	};
+                    uni.setStorageSync('data_circle_tips',res.data);
+                    action.setStatusTips();
+                });
+            },
+			upload(e){
+                
+             
+                uni.chooseImage({
+                	success: (chooseImageRes) => {
+                          uni.showLoading();
+                		const tempFilePaths = chooseImageRes.tempFilePaths;
+                		helper.uploadFiles(tempFilePaths,'image',{type:'avatar'}).then(res=>{
+                              
+                			this.my_data.circle_img= res;
+                          //  console.log(res);
+                             var  avatar= res.replace(config.imgUri,'');         
+                              api.changeProfile({circle_img:avatar,id:this.my_data.id}).then(res => {
+                                  uni.hideLoading()
+                                  this.$toast('更新成功').then(() => {
+                                 
+                                  });
+                                
+                              
+                              });
+                		})
+                	}
+                });
+
+			},
+            onGetData(){
+                let time = 0;
+                    let circle_data11 = _data.localData('circle_data');
+                  
+                if(circle_data11.length>0){
+                	time = circle_data11[0].time;
+                }
+                let that =this;
+            
+               // _data.localData('circle_data',[])
+                api.getCircleList({userid:uni.getStorageSync('access_token'),page:this.page}).then(res=>{
+                         
+                                if(this.page==1)_data.addData('circle_data',res.data)
+                                //  console.log(circle_data);
+                    				that.setCircleData(res.data);
+                    			//	uni.$emit('data_circle_data',circle_data);
+                                    if(res.data.length < 10){
+                                    	this.loadMoreText = '没有更多数据了';
+                                    	this.is_more = true;
+                                        this.showLoadMore=true;
+                                    }
+                    
+                })
+                
+            },
+            
+            setCircleData(data){
+               var list11=[];
+               var len=data.length;
+               let circle_data11 = _data.localData('circle_data');
+                
+               if(circle_data11.length>0 && this.page>1){
+               	var time = circle_data11[circle_data11.length-1].time;
+               }
+         
+               
+              // if(len>20) len=20;
+               for(var i=0;i<len;i++){
+                   var item=data[i];
+                  if(item.like==false) item.like=[];
+                  if(item.comment==false) item.comment=[];
+                 item.timestamp=action.timestampFormat(item.time);
+                 item.islike=this.setisLike(uni.getStorageSync('access_token'),item.like);
+                 if(item.time<time || this.page==1)  list11.push(item);  
+               }
+                 if(this.page==1) {
+                this.posts=list11;        
+                 }
+             
+                else this.posts.push(...list11);
+            },
+            
+            setisLike(id,data){
+                if(data.length==0 || data==[]) return 0;
+                for(var i=0;i<data.length;i++){
+                    if(data[i].uid==id) return 1;
+                }
+                 return 0;
+            },
+            
+            
+			goCircleChat(){
+				_data.data('no_reader_circle_chat_num',0);
+				this.navigateTo('./circle_chat_details');
+			},
+            getUserInfo(){
+                let _this=this;
+                api.getUserInfo({friend_uid:uni.getStorageSync('access_token')}).then(res=>{
+                _this.my_data.id=res.data.id;
+                  _this.my_data.nickname=res.data.nickname;
+                  var photo=res.data.avatar;
+                  if(photo.indexOf('http')<=-1)photo=config.imgUri+photo;
+                    _this.my_data.photo=photo;
+                    if(res.data.circle_img!=null){
+                        this.my_data.circle_img=this.image_cache(res.data.circle_img);
+                      
+                    }
+                    
+                })
+            },
+            
+			pullDownRefresh() {
+				var  _this = this;
+				//初始化数据
+            
+            
+               // this.onGetData();
+               
+                setTimeout(function(){_this.onGetData();},100);
+                
+	
+				uni.stopPullDownRefresh(); //停止下拉刷新
+				/** 取消好友动态提示 */
+				_data.data('no_reader_circle',0);
+			},
+			goDetails(user_id){
+				this.navigateTo('../friend/detail?id=' + user_id);
+			},
+			navigateTo(url) {
+				uni.navigateTo({
+					url: url
+				});
+			},
+            socket_push(id,action,userid,issend){
+                let data={
+                    type:'circle_push',
+                    id:id,
+                    action:action,
+                    fromid:uni.getStorageSync('access_token'),
+                    userid:userid,
+                    issend:issend
+                }
+                this.$socket.send(data);
+            },
+            circle_delete(index){
+                let _this = this
+               uni.showModal({
+               	title: '提示',
+               	content: '确定要删除吗?',
+               	showCancel: true,
+               	cancelText: '取消',
+               	confirmText: '删除',
+               	success: res => {
+               		if(res.confirm) {
+                       var id=_this.posts[index].id;
+                       api.CircleDelete({id:id}).then(res=>{
+                           if(res.data==1){
+                               _this.posts.splice(index, 1);
+                                 _data.localData('circle_data',_this.posts);
+                             _this.socket_push(_this.posts[index].id,'delete',_this.posts[index].userid,0);
+                           }else{
+                               uni.showModal({
+                                   title:'网络连接失败'
+                               })
+                           }
+                       })
+               		}
+               	} });
+            },
+            
+            comment_delete(index,index1){
+                let _this = this
+                    var id=_this.posts[index].id;
+                console.log(id);
+                uni.showModal({
+                	title: '提示',
+                	content: '确定要删除吗?',
+                	showCancel: true,
+                	cancelText: '取消',
+                	confirmText: '删除',
+                	success: res => {
+                		if(res.confirm) {
+                    
+                        api.CommentDelete({id:id,index:index1}).then(res=>{
+                            if(res.data==1){
+                                  this.socket_push(_this.posts[index].id,'delete',_this.posts[index].userid,0);
+                                _this.posts[index].comment.splice(index1, 1);
+                                
+                                 _data.localData('circle_data',_this.posts);
+                             
+                            }else{
+                                uni.showModal({
+                                    title:'网络连接失败'
+                                })
+                            }
+                        })
+                		}
+                	} });
+            },
+			like(index) {
+              
+				let _this = this,
+				is_like = (_this.posts[index].islike ? 0 : 1);
+                 // console.log( _this.posts[index]);
+                var data={id:_this.posts[index].id,userid:uni.getStorageSync('access_token')};
+                
+                api.setCircleLike(data).then(res=>{
+                    var data=res.data;
+                    _this.posts[index].islike=data.action;
+                    if (data.action) {
+                        
+                    			_this.posts[index].like.push({
+                    				"uid": _this.my_data.id,
+                    				"username": _this.my_data.nickname,
+                    			});
+                    		} else {
+                    			let likes = [];
+                    			for(let i = 0,j = _this.posts[index].like.length;i < j; i ++){
+
+                    				if(parseInt(_this.posts[index].like[i].uid) ==parseInt(uni.getStorageSync('access_token'))){
+                    					_this.posts[index].like.splice(i, 1);
+                    					break;
+                    				}
+                    			}
+                    			
+                    		}
+                            _data.localData('circle_data',_this.posts);
+                            this.socket_push(_this.posts[index].id,'like',_this.posts[index].userid,data.action);
+                })
+                
+                
+				
+			},
+			comment(index) {
+				if(this.showInput){
+					this.showInput = false;
+					this.focus = false;
+					this.index = '';
+				}else{
+					this.showInput = true; //调起input框
+					this.focus = true;
+					this.index = index;
+				}
+			},
+			adjust() { //当弹出软键盘发生评论动作时,调整页面位置pageScrollTo
+
+			
+			},
+			reply(index, comment_index) {
+				this.is_reply = true; //回复中
+				this.showInput = true; //调起input框
+				let replyTo = this.posts[index].comment[comment_index].username;
+				this.input_placeholder = '回复' + replyTo;
+				this.index = index; //post索引
+				this.comment_index = comment_index; //评论索引
+				this.focus = true;
+			},
+			blur: function() {
+				//this.init_input();
+			},
+			send_comment: function(message) {
+				let _this = this,
+				is_posts_obj = this.posts[this.index],
+				chat_user_id = is_posts_obj.userid,
+				reply = '';
+                if(chat_user_id==undefined) chat_user_id=0
+				if (this.is_reply) {
+					let is_reply_obj = is_posts_obj.comment[this.comment_index];
+					chat_user_id = is_reply_obj.uid;
+					if(is_posts_obj.userid != chat_user_id){
+						reply = '回复' + is_reply_obj.username;
+					}
+				}
+                var data={
+						message,
+						id: is_posts_obj.id,
+						chat_user_id,
+                        reply:reply,
+                        uid:uni.getStorageSync('access_token')
+					}
+               
+                    
+                    api.setCircleComment(data).then(res=>{
+                        is_posts_obj.comment.push({
+                        	"uid": _this.my_data.id,
+                        	'reply': reply,
+                        	"username": _this.my_data.nickname,
+                        	"content": message
+                        });
+                        _this.init_input();
+                        _data.localData('circle_data',_this.posts);
+                        this.socket_push(_this.posts[this.index].id,'comment',_this.posts[this.index].userid,1);
+                    })
+                
+			
+			},
+			init_input() {
+				this.showInput = false;
+				this.focus = false;
+				this.input_placeholder = '评论';
+				this.is_reply = false;
+			},
+			previewImage(index, image_index) {
+				let data = this.posts[index],
+				images_all = [];
+				for(let i = 0,j = data.content.value.length;i<j;i++){
+					images_all.push(this.image_cache(data.content.value[i]));
+				}
+				var current = images_all[image_index];
+				uni.previewImage({
+					current: current,
+					urls: images_all
+				});
+			},
+			goPublish() {
+				uni.navigateTo({
+					url: './circle/send',
+					success: res => {},
+					fail: () => {},
+					complete: () => {}
+				});
+			}
+		},
+		watch: {
+			
+		},
+	}
+</script>
+
+<style scoped>
+	@import url("../../static/css/circle.css");
+	.new_msg {
+		text-align: center;
+		color: #333333;
+		font-size: 32upx;
+	}
+    .inputbox{
+        clear: both;
+        width: 100%;
+        display: flex;
+    }
+    .delete{
+        display: inline-block;
+        padding: 0px 20upx;
+        color: #2319dc;
+        font-size: 24upx;
+    }
+
+</style>

+ 147 - 0
pages/circle/circle/chat_input.vue

@@ -0,0 +1,147 @@
+<template>
+	<view class="footer">
+		<!-- <view class="footer-left">
+			<view class="uni-icon uni-icon-mic" @tap="startRecognize"> </view>
+		</view> -->
+		<view class="footer-center">
+			
+			<textarea
+			auto-height="true"
+			class="input-text"
+			@confirm="sendMessge"
+			v-model="inputValue"
+		
+			@blur="blur"
+			:placeholder="placeholder"
+			:maxlength="-1"
+			:show-confirm-bar="false"
+			style="max-height: 65upx;"
+            cursor-spacing='15' 
+            confirm-hold="true"
+			/>
+				
+			<!-- <input class="input-text" type="text" @confirm="sendMessge" v-model="inputValue" :focus="focus" @blur="blur" :placeholder="placeholder" /> -->
+			
+		</view>
+		<view class="footer-right">
+			<view id='msg-type' class="send-comment" @tap="sendMessge">发送</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		
+		data() {
+			return {
+				inputValue: ''
+			}
+		},
+		props:{
+			placeholder: {
+				type: String,
+				required: true
+			},
+			focus: {
+				type:Boolean,
+				required: true
+			}
+		},
+		onLoad(){
+			
+		},
+		methods: {
+			blur: function() {//失焦触发通知父组件
+				var that = this;
+				this.$emit('blur')
+			},
+			startRecognize: function () {
+				var options = {};
+				var that = this;
+				options.engine = 'iFly';
+				that.inputValue = "";
+				plus.speech.startRecognize(options, function (s) {
+					console.log(s);
+					that.inputValue += s;
+				}, function (e) {
+					console.log("语音识别失败:" + e.message);
+				});
+			},
+			sendMessge: function () {				
+				if (!this.inputValue) {
+					uni.showModal({
+						content:"还没有输入内容哦!",
+						showCancel:false
+					})
+					return;
+				}
+				//点击发送按钮时,通知父组件用户输入的内容
+				this.$emit('send-message', this.inputValue);
+				this.inputValue = '';//清空上次输入的内容
+			}
+		}
+	}
+</script>
+
+<style>
+	.footer {
+		display: flex;
+		flex-direction: row;
+		width: 100%;
+		height: 80upx;
+		min-height: 80upx;
+		border-top: solid 1px #bbb;
+		overflow: hidden;
+		padding: 5upx;
+		background-color: #F4F5F6;
+	}
+	.footer-left {
+
+		width: 80upx;
+		height: 80upx;
+
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+	.footer-right {
+		width: 120upx;
+		height: 80upx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		color: #1482D1;
+	}
+	.footer-center {
+		flex: 1;
+		padding-left: 20upx;
+		height: 80upx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+	.footer-center .input-text {
+		flex: 1;
+		background: #fff;
+		/* border: solid 1upx #ddd; */
+		padding: 10upx 14upx;
+		font-family: verdana !important;
+        font-size: 28upx;
+        line-height:40upx;
+		overflow: hidden;
+		border-radius: 15upx;
+        width: calc(100% - 28upx);
+        
+	}
+	.footer-right .send-comment{
+		background-color: #007AFF;
+		text-align: center;
+		line-height: 60upx;
+		color: #FFFFFF;
+		width: 80upx;
+		height: 60upx;
+		border-radius: 5px;
+		font-size: 10px;
+		/* height: 60upx; */
+	}
+</style>

+ 289 - 0
pages/circle/circle/send.vue

@@ -0,0 +1,289 @@
+<template>
+	<view class="page" @touchstart="touchStart" @touchend="touchEnd">
+		<form>
+			<view class="uni-textarea">
+				<textarea placeholder="这一刻的想法..." v-model="input_content"/>
+			</view>
+			<view class="uni-list list-pd">
+				<view class="uni-list-cell cell-pd">
+					<view class="uni-uploader">
+						<view class="uni-uploader-head">
+							<view class="uni-uploader-title"></view>
+							<view class="uni-uploader-info">{{imageList.length}}/9</view>
+						</view>
+						<view class="uni-uploader-body">
+							<view class="uni-uploader__files">
+								<block v-for="(image,index) in imageList" :key="index">
+									<view class="uni-uploader__file" style="position: relative;">
+										<image class="uni-uploader__img" mode="aspectFill" :src="image" :data-src="image" @tap="previewImage"></image>
+										<view class="close-view" @click="close(index)">x</view>
+									</view>
+								</block>
+								<view class="uni-uploader__input-box" v-show="imageList.length < 9">
+									<view class="uni-uploader__input" @tap="chooseImage"></view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>			
+		</form>
+	</view>
+</template>
+
+<script>
+	import helper from "../../../library/helper.js"
+	import api from "../../../library/index.js"
+    import action from "../../../library/action.js"
+	import config from "../../../config.js"
+    import _data from "../../../library/_data.js"
+	var sourceType = [
+		['camera'],
+		['album'],
+		['camera', 'album']
+	]
+	var sizeType = [
+		['compressed'],
+		['original'],
+		['compressed', 'original']
+	]
+	export default {
+		data() {
+			return {
+				// title: 'choose/previewImage',
+				input_content:'',
+				imageList: [],
+				sourceTypeIndex: 2,
+				sourceType: ['拍照', '相册', '拍照或相册'],
+				sizeTypeIndex: 2,
+				sizeType: ['压缩', '原图', '压缩或原图'],
+				countIndex: 8,
+				count: [1, 2, 3, 4, 5, 6, 7, 8, 9],
+				
+				//侧滑返回start
+				startX: 0, //点击屏幕起始位置
+				movedX: 0, //横向移动的距离
+				endX: 0, //接触屏幕后移开时的位置
+				//end
+				
+				send_status: false,
+			}
+		},
+		onShow(){
+			
+		},
+		onUnload() {
+			this.imageList = [],
+			this.sourceTypeIndex = 2,
+			this.sourceType = ['拍照', '相册', '拍照或相册'],
+			this.sizeTypeIndex = 2,
+			this.sizeType = ['压缩', '原图', '压缩或原图'],
+			this.countIndex = 8;
+		},
+		methods: {
+			publish(){
+        
+				if (!this.input_content && this.imageList.length==0) {
+					uni.showToast({ title: '内容不能为空', icon:'none', });
+					return;
+				}
+				if(this.send_status){
+					return;
+				}
+				
+				this.send_status = true;
+				
+				let _this = this;
+				
+				uni.showLoading({title:'发布中'});
+				
+				// #ifndef H5
+				//var location = await this.getLocation(); //位置信息,可删除
+				// #endif
+				
+			
+					let content = {
+						text: this.input_content,
+						value: [],
+					};
+					if(_this.imageList.length){
+                     
+						for(var i = 0,len = _this.imageList.length; i < len; i++){
+                            
+                            helper.uploadFiles([ _this.imageList[i]], 'images', {
+                            	type: 'images'
+                            }).then(res => {
+                                res= res.replace(config.imgUri,'');
+                                content.value.push(res);
+                                
+                                if(content.value.length==len){
+                                  _this.save(content);  
+                                }
+                            });
+                            
+					
+						}
+						return;
+					}
+                    else{
+                        _this.save(content);
+                    }
+				
+			},
+            
+            save(content){
+                api.sendCircle({userid:uni.getStorageSync('access_token'),data:JSON.stringify(content)}).then(res=>{
+                    
+                    uni.hideLoading();
+                    this.send_status = false;
+                    if(res.data>0){
+                        uni.showToast({
+                        	icon: 'success',
+                        	title: '发布成功',
+                        	success(){
+                        	let circle_data1 = _data.localData('circle_data');
+                            var postdata={userid:uni.getStorageSync('access_token'),time:(circle_data1.length ? circle_data1[0].time: 0)};
+                        		api.getCircleList(postdata).then(res=>{
+                                    console.log(res.data);
+                                 let   circle_data=_data.addData('circle_data',res.data)
+                                 
+                                   uni.$emit('data_circle_data',circle_data);
+                                    
+                                })
+                                
+                        		uni.redirectTo({
+                        			url: '../../circle/circle'
+                        		});
+                        	}
+                        });
+                    } 
+                })
+            },
+            
+			// #ifndef H5
+			getLocation(){ 
+				// h5中可能不支持,自己选择
+				return new Promise((resolve, reject) => {
+					uni.getLocation({
+						type: 'wgs84',
+						success: function (res) {
+							resolve(res);
+						},
+						fail: (e) => {  
+							reject(e);
+						}
+					});
+				});
+			},
+			// #endif
+			close(e){
+			    this.imageList.splice(e,1);
+			},
+			chooseImage: async function() {
+				if (this.imageList.length === 9) {
+					let isContinue = await this.isFullImg();
+					console.log("是否继续?", isContinue);
+					if (!isContinue) {
+						return;
+					}
+				}
+				uni.chooseImage({
+					sourceType: sourceType[this.sourceTypeIndex],
+					sizeType: sizeType[this.sizeTypeIndex],
+					count: this.imageList.length + this.count[this.countIndex] > 9 ? 9 - this.imageList.length : this.count[this.countIndex],
+					success: (res) => {
+						this.imageList = this.imageList.concat(res.tempFilePaths);
+                        
+                        console.log(this.imageList);
+					}
+				})
+			},
+			isFullImg: function() {
+				return new Promise((res) => {
+					uni.showModal({
+						content: "已经有9张图片了,是否清空现有图片?",
+						success: (e) => {
+							if (e.confirm) {
+								this.imageList = [];
+								res(true);
+							} else {
+								res(false)
+							}
+						},
+						fail: () => {
+							res(false)
+						}
+					})
+				})
+			},
+			previewImage: function(e) {
+				var current = e.target.dataset.src
+				// 					var current = 'https://i.loli.net/2019/02/18/5c6a6e2623448.jpg'
+				// 					this.imageList = ['https://i.loli.net/2019/02/18/5c6a6e2623448.jpg','https://i.loli.net/2019/02/18/5c6a6e49829ea.jpg']
+				console.log(current);
+				console.log(this.imageList);
+				uni.previewImage({
+					current: current,
+					urls: this.imageList
+				})
+			},
+			touchStart: function(e) {
+				this.startX = e.mp.changedTouches[0].pageX;
+			},
+			
+			touchEnd: function(e) {
+				this.endX = e.mp.changedTouches[0].pageX;
+				if (this.endX - this.startX > 200) {
+					uni.navigateBack();
+				}
+			}
+		},
+		onNavigationBarButtonTap(e) {
+			if (e.index == 0) {
+				this.publish();
+			}
+		},
+	}
+</script>
+
+<style scoped>
+    	@import url("../../../static/css/uni.css");
+		@import url("../../../static/css/circle.css");
+	.cell-pd {
+		padding: 20upx 30upx;
+	}
+
+	.uni-textarea {
+		width: auto;
+		padding: 20upx 25upx;
+		line-height: 1.6;
+		height: 150upx;
+	}
+	.uni-list::before {
+		height: 0;
+	}
+	.uni-list:after {
+		height: 0;
+	}
+	.list-pd {
+		margin-top: 0;
+		margin-bottom: 80upx;
+	}
+	.close-view {
+	    text-align: center;
+		line-height:22upx;
+		height: 24upx;
+		width: 24upx;
+		border-radius: 50%;
+		background: #ef5350;
+		color: #FFFFFF;
+		position: absolute;
+		top: 6upx;
+		right: 8upx;
+		font-size: 24upx;
+	}
+	.page {
+		width: 750upx;
+		height: 100%;
+	}
+</style>

+ 279 - 0
pages/circle/circle_chat_details.vue

@@ -0,0 +1,279 @@
+<template>
+	<view id="moments">
+		
+		<view class="moments__post1" v-for="(post,index) in posts" :key="index" :id="'post-'+index">
+			<view class="moments__post">
+                <view class="post-left">
+                	<image class="post_header" :src="photo(post.user.avatar)" @tap="goDetails(post.uid)" :lazy-load="true"/>
+                </view>
+                
+                <view class="post_right">
+                	<text class="post-username" @tap="goDetails(post.from_uid)">{{post.user.nickname}}</text>
+                	<view id="paragraph" class="paragraph" >
+                    <view v-if="post.type=='like'">
+                       	<image src="../../static/push/circle/liked.png" :lazy-load="true" style="height:40upx;width: 40upx;"/> 
+                    </view>
+                    <view v-else> {{post.content}}</view>
+                   
+                    </view>
+                	
+                
+                	
+                	<!-- 资料条 -->
+                	<view class="toolbar">
+                		<view class="timestamp">{{ timestamp(post.time) }}</view>
+                
+                	</view>
+                	
+                </view>
+                <view class="post-info">
+                  
+                    <view v-if="post.info.type=='delete'" class="text">该说说已删除</view>
+                    <view v-else-if="post.info.type=='text'" class="text">{{post.info.content}}</view>
+                       <view v-else>
+                           
+                           <image :src="photo(post.info.content)" style="width: 140upx;height: 140upx;vertical-align: middle;"></image>
+                           
+                       </view>
+                </view>
+                
+            </view>
+           
+			<!-- 结束 post -->
+		</view>
+
+		<view class="foot" v-show="showInput">
+			<chat-input @blur="blur" :focus="focus" :placeholder="input_placeholder"></chat-input>
+	
+		</view>
+		<view class="uni-loadmore" v-if="showLoadMore">{{loadMoreText}}</view>
+	</view>
+
+</template>
+
+<script>
+	import chatInput from './circle/chat_input.vue'; //输入消息框
+	import _data from "../../library/_data.js"
+  
+		import api from "../../library/index.js"
+        import action from "../../library/action.js"
+        import config from "../../config.js"
+        	import helper from "../../library/helper.js"
+	export default {
+		components: {
+			chatInput
+		},
+		data() {
+			return {
+				user_id: 0,
+				posts: [],//模拟数据
+				index: '',
+				comment_index: '',
+				input_placeholder: '评论', //占位内容
+				focus: false, //是否自动聚焦输入框
+				is_reply: false, //回复还是评论
+				showInput: false, //评论输入框
+				screenHeight: '', //屏幕高度(系统)
+				platform: '',
+				windowHeight: '' ,//可用窗口高度(不计入软键盘)
+				loadMoreText: "加载中...",
+				showLoadMore: true,
+				is_more: false,
+				my_data: {},
+                page:1
+			}
+		},
+		computed:{
+			staticPath(){
+				return _data.staticCircle();
+			},
+			staticPhoto(){
+				return _data.staticPhoto();
+			},
+		},
+		onLoad(option) {
+			let _this = this;
+			
+			_this.my_data = _data.data('user_info');
+			
+			uni.getSystemInfo({ //获取设备信息
+				success: (res) => {
+					_this.screenHeight = res.screenHeight;
+					_this.platform = res.platform;
+				}
+			});
+		},
+		onShow() {
+	
+			let _this = this;
+			uni.onWindowResize((res) => { //监听窗口尺寸变化,窗口尺寸不包括底部导航栏
+				if(this.platform === 'ios'){
+					this.windowHeight = res.size.windowHeight;
+					this.adjust();
+				}else{
+					if (this.screenHeight - res.size.windowHeight > 60 && this.windowHeight <= res.size.windowHeight) {
+						this.windowHeight = res.size.windowHeight;
+						this.adjust();
+					}
+				}
+			});
+			this.pullDownRefresh();
+			/** 监听新的个人数据 */
+			uni.$on('data_user_info',function(data){
+				_this.my_data = data;
+			});
+            uni.setStorageSync('data_circle_tips',0);
+            action.setStatusTips();
+		},
+		onUnload() {
+			uni.$off('data_user_info');
+			uni.offWindowResize(); //取消监听窗口尺寸变化
+			this.max = 0,
+			this.data = [],
+			this.loadMoreText = "加载更多",
+			this.showLoadMore = false;
+		},
+		onReachBottom() { //监听上拉触底事件
+			this.showLoadMore = true;
+			if(this.is_more){
+				return;
+			}
+			let time = 0,
+			is_length = this.posts.length;
+			if(is_length){
+				time = this.posts[is_length - 1].time;
+			}
+			this.getCircleList({
+				time,
+				type: 1,
+				user_id: this.user_id,
+				chat: 1,
+			});
+		},
+		onPullDownRefresh() { //监听下拉刷新动作
+			this.pullDownRefresh();
+		},
+		onNavigationBarButtonTap(e) {//监听标题栏点击事件
+			if (e.index == 0) {
+				this.navigateTo('./circle/send')
+			}
+		},
+		methods: {
+			photo(path){
+                if(path.indexOf('http')<=-1) path=config.imgUri+path;
+				return path;
+			},
+            timestamp(time){
+              return action.timestampFormat(time);  
+            },
+			pullDownRefresh() {
+				//初始化数据
+				let time = 0;
+				if(this.posts.length){
+					time = this.posts[0].time;
+				}					
+				this.getCircleList({
+					time,
+					type: 0,
+					user_id: this.user_id,
+					chat: 1,
+				});
+				uni.stopPullDownRefresh(); // 停止下拉刷新
+			},
+			getCircleList(send_data){
+				let _this = this;
+                var data={userid:uni.getStorageSync('access_token'),page:this.page};
+               // console.log(this.page);
+          
+               api.getCircleMsg(data).then(res=>{
+                 
+                 if(res.data.length){
+                 		
+                 		_this.posts.push(...res.data);
+                 		this.page++
+                 		}else{
+                            if(this.page==1)
+                            _this.loadMoreText = '暂无通知';
+                            else 
+                 			_this.loadMoreText = '没有数据了';
+                 			_this.is_more = true;
+                 		}
+                   
+               })
+              },
+			goDetails(user_id){
+				this.navigateTo('../friend/detail?id=' + user_id);
+			},
+			navigateTo(url) {
+				uni.navigateTo({
+					url: url
+				});
+			},
+			
+			adjust() { //当弹出软键盘发生评论动作时,调整页面位置pageScrollTo
+				return;
+				uni.createSelectorQuery().selectViewport().scrollOffset(res => {
+					var scrollTop = res.scrollTop;
+					let view = uni.createSelectorQuery().select("#post-" + this.index);
+					view.boundingClientRect(data => {
+						
+						// console.log("data:" + JSON.stringify(data));
+						// console.log("手机屏幕高度:" + this.screenHeight);
+						// console.log("竖直滚动位置" + scrollTop);
+						// console.log("节点离页面顶部的距离为" + data.top);
+						// console.log("节点高度为" + data.height);
+						// console.log("窗口高度为" + this.windowHeight);
+
+						uni.pageScrollTo({
+							scrollTop: scrollTop - (this.windowHeight - (data.height + data.top + 45)), //一顿乱算
+							// scrollTop: 50, 
+							duration: 300
+						});
+					}).exec();
+				}).exec();
+			},
+			
+			blur: function() {
+				//this.init_input();
+			},
+			
+			init_input() {
+				this.showInput = false;
+				this.focus = false;
+				this.input_placeholder = '评论';
+				this.is_reply = false;
+			},
+			previewImage(index, image_index) {
+				let data = this.posts[index],
+				images_all = [];
+				for(let i = 0,j = data.content.value.length;i<j;i++){
+					images_all.push(this.staticPath + data.post_id + '/' + data.content.value[i].replace('_thumb',''));
+				}
+				var current = images_all[image_index];
+				uni.previewImage({
+					current: current,
+					urls: images_all
+				});
+			},
+			goPublish() {
+				uni.navigateTo({
+					url: './circle/send',
+					success: res => {},
+					fail: () => {},
+					complete: () => {}
+				});
+			}
+		},
+		watch: {
+		},
+	}
+</script>
+
+<style scoped>
+	@import url("../../static/css/circle.css");
+	.new_msg {
+		text-align: center;
+		color: #36648B;
+		font-weight: bold;
+	}
+</style>

+ 374 - 0
pages/circle/circle_details.vue

@@ -0,0 +1,374 @@
+<template>
+	<view id="moments">
+
+		<view class="home-pic">
+			
+			<image 
+				:src="circleImg"
+				style="width: 750upx; height: 500upx; border-radius: 0upx;"
+				/>
+			</image>
+			
+			<view class="home-pic-base">
+				<view class="top-pic">
+					<image class="header" :src="myPhoto" @tap.stop="goDetails(my_data.id)" :lazy-load="true"></image>
+				</view>
+				<view class="top-name">{{ my_data.nickname }}</view>
+			</view>
+		</view>
+		
+		<view class="moments__post" v-for="(post,index) in posts" :key="index" :id="'post-'+index">
+			<view class="post-left">
+				<image class="post_header" :src="staticPhoto + post.header_image" @tap="goDetails(post.uid)" :lazy-load="true"/>
+			</view>
+
+			<view class="post_right">
+				<text class="post-username" @tap="goDetails(post.uid)">{{post.username}}</text>
+				<view id="paragraph" class="paragraph" @tap="init_input()">{{post.content.text}}</view>
+				
+				<!-- 相册 -->
+				<view class="thumbnails" v-if="post.type == 0" @tap="init_input()">
+					<view :class="post.content.value.length === 1?'my-gallery':'thumbnail'" v-for="(image, index_images) in post.content.value" :key="index_images">
+						<image class="gallery_img" 
+						:lazy-load="true"
+						mode="aspectFill" 
+						:src="staticPath + post.post_id +'/' + image" 
+						:data-src="image" 
+						@tap="previewImage(index,index_images)"
+						/>
+					</view>
+				</view>
+				
+				<!-- 资料条 -->
+				<view class="toolbar">
+					<view class="timestamp">{{ post.timestamp }}</view>
+					<view class="like" @tap="like(index)">
+						<image :src="post.islike === 0 ? '../../static/push/circle/islike.png' : '../../static/push/circle/like.png'" :lazy-load="true"/>
+					</view>
+					<view class="comment" @tap="comment(index)">
+						<image src="../../static/push/circle/comment.png" :lazy-load="true"></image>
+					</view>
+				</view>
+				<!-- 赞/评论区 -->
+				<view class="post-footer">
+					<view class="footer_content" v-if="post.like.length">
+						<image class="liked" src="../../static/push/circle/liked.png" :lazy-load="true"></image>
+						<text class="nickname" 
+						v-for="(user,index_like) in post.like" 
+						:key="index_like"
+						@tap="goDetails(user.uid)"
+						>
+							{{(index_like ? ',' : '' ) + user.username}}
+						</text>
+					</view>
+					<view class="footer_content" v-for="(comment,comment_index) in post.comments" :key="comment_index" @tap="reply(index,comment_index)">
+						<text class="comment-nickname" style="word-break:break-all;">{{comment.username + comment.reply}}: <text class="comment-content">{{comment.content}}</text></text>
+					</view>
+				</view>
+			</view>
+			<!-- 结束 post -->
+		</view>
+
+		<view class="foot" v-show="showInput">
+			<chat-input @send-message="send_comment" @blur="blur" :focus="focus" :placeholder="input_placeholder"></chat-input>
+			<!-- <chat-input @send-message="send_comment" @blur="blur" :placeholder="input_placeholder"></chat-input> -->
+		</view>
+		<view class="uni-loadmore" v-if="showLoadMore">{{loadMoreText}}</view>
+	</view>
+
+</template>
+
+<script>
+	import chatInput from './circle/chat_input.vue'; //输入消息框
+
+	export default {
+		components: {
+			chatInput,
+			
+		},
+		data() {
+			return {
+				my_data: {},
+				user_id: 0,
+				
+				posts: [],//模拟数据
+				index: '',
+				comment_index: '',
+				input_placeholder: '评论', //占位内容
+				focus: false, //是否自动聚焦输入框
+				is_reply: false, //回复还是评论
+				showInput: false, //评论输入框
+				screenHeight: '', //屏幕高度(系统)
+				platform: '',
+				windowHeight: '' ,//可用窗口高度(不计入软键盘)
+				loadMoreText: "加载中...",
+				showLoadMore: false,
+				is_more: false,
+			}
+		},
+		computed:{
+			myPhoto(){
+				return _data.staticPhoto() + this.my_data.photo + '?_=' + Math.random();
+			},
+			circleImg(){
+				return _data.staticPhoto() + this.my_data.circle_img + '?_=' + Math.random();
+			},
+			isNickname(){
+				return this.my_data.nickname;
+			},
+			staticPath(){
+				return _data.staticCircle();
+			},
+			staticPhoto(){
+				return _data.staticPhoto();
+			},
+		},
+		onLoad(option) {
+			let _this = this;
+			
+			_this.user_id = option.user_id;
+			
+			_this.my_data = _data.data('user_info');
+			
+			uni.getSystemInfo({ //获取设备信息
+				success: (res) => {
+					_this.screenHeight = res.screenHeight;
+					_this.platform = res.platform;
+				}
+			});
+		},
+		onShow() {
+			_hook.routeSonHook();
+			let _this = this;
+			uni.onWindowResize((res) => { //监听窗口尺寸变化,窗口尺寸不包括底部导航栏
+				if(this.platform === 'ios'){
+					this.windowHeight = res.size.windowHeight;
+					this.adjust();
+				}else{
+					if (this.screenHeight - res.size.windowHeight > 60 && this.windowHeight <= res.size.windowHeight) {
+						this.windowHeight = res.size.windowHeight;
+						this.adjust();
+					}
+				}
+			});
+			this.pullDownRefresh();
+			/** 监听新的个人数据 */
+			uni.$on('data_user_info',function(data){
+				_this.my_data = data;
+			});
+		},
+		onUnload() {
+			uni.offWindowResize(); //取消监听窗口尺寸变化
+			uni.$off('data_user_info');
+			this.max = 0,
+			this.data = [],
+			this.loadMoreText = "加载更多",
+			this.showLoadMore = false;
+		},
+		onReachBottom() { //监听上拉触底事件
+			this.showLoadMore = true;
+			if(this.is_more) {
+				return;
+			}
+			let time = 0,
+			is_length = this.posts.length;
+			if(is_length){
+				time = this.posts[is_length - 1].time;
+			}
+			this.getCircleList({
+				time,
+				type: 1,
+				user_id: this.user_id,
+			},(data) => {
+				_this.my_data = data.user_info;
+			});
+		},
+		onPullDownRefresh() { //监听下拉刷新动作
+			this.pullDownRefresh();
+		},
+		onNavigationBarButtonTap(e) {//监听标题栏点击事件
+			if (e.index == 0) {
+				this.navigateTo('./circle/send')
+			}
+		},
+		methods: {
+			pullDownRefresh() {
+				//初始化数据
+				let time = 0;
+				if(this.posts.length){
+					time = this.posts[0].time;
+				}					
+				this.getCircleList({
+					time,
+					type: 0,
+					user_id: this.user_id,
+				},(data) => {
+					_this.my_data = data.user_info;
+				});
+				uni.stopPullDownRefresh(); //停止下拉刷新
+			},
+			getCircleList(send_data){
+				let _this = this;
+				this.$httpSend({
+					path: '/im/get/circleData',
+					data: send_data,
+					success(data) {
+						if(data.data.length){
+							let circle_data = [];
+							if(send_data.type){
+								_this.posts.push(...data.data);
+							}else{
+								_this.posts.unshift(...data.data);
+							}
+						} else {
+							_this.loadMoreText = '没有更多数据了';
+							_this.is_more = true;
+						}
+						_this.my_data = data.user_info;
+					}
+				});
+			},
+			goDetails(user_id){
+				this.navigateTo('../details/index?user_id=' + user_id);
+			},
+			navigateTo(url) {
+				uni.navigateTo({
+					url: url
+				});
+			},
+			like(index) {
+				let _this = this,
+				is_like = (_this.posts[index].islike ? 0 : 1);
+				_this.$httpSend({
+					path: '/im/circle/likeAction',
+					data: {
+						is_like: is_like,
+						id: _this.posts[index].post_id,
+					},
+					success(data) {
+						_this.posts[index].islike = data.action;
+						if (data.action) {
+							_this.posts[index].like.push({
+								"uid": _this.my_data.id,
+								"username": _this.my_data.nickname,
+							});
+						} else {
+							let likes = [];
+							for(let i = 0,j = _this.posts[index].like.length;i < j; i ++){
+								if(_this.posts[index].like[i].uid == _this.my_data.id){
+									_this.posts[index].like.splice(i, 1);
+									break;
+								}
+							}
+							
+						}
+					}
+				});
+			},
+			comment(index) {
+				if(this.showInput){
+					this.showInput = false;
+					this.focus = false;
+					this.index = '';
+				}else{
+					this.showInput = true; //调起input框
+					this.focus = true;
+					this.index = index;
+				}
+			},
+			adjust() { //当弹出软键盘发生评论动作时,调整页面位置pageScrollTo
+				return;
+				uni.createSelectorQuery().selectViewport().scrollOffset(res => {
+					var scrollTop = res.scrollTop;
+					let view = uni.createSelectorQuery().select("#post-" + this.index);
+					view.boundingClientRect(data => {
+						
+						
+
+						uni.pageScrollTo({
+							scrollTop: scrollTop - (this.windowHeight - (data.height + data.top + 45)), //一顿乱算
+							// scrollTop: 50, 
+							duration: 300
+						});
+					}).exec();
+				}).exec();
+			},
+			reply(index, comment_index) {
+				this.is_reply = true; //回复中
+				this.showInput = true; //调起input框
+				let replyTo = this.posts[index].comments[comment_index].username;
+				this.input_placeholder = '回复' + replyTo;
+				this.index = index; //post索引
+				this.comment_index = comment_index; //评论索引
+				this.focus = true;
+			},
+			blur: function() {
+				//this.init_input();
+			},
+			send_comment: function(message) {
+				let _this = this,
+				is_posts_obj = this.posts[this.index],
+				chat_user_id = is_posts_obj.uid,
+				reply = '';
+				if (this.is_reply) {
+					let is_reply_obj = is_posts_obj.comments[this.comment_index];
+					chat_user_id = is_reply_obj.uid;
+					if(is_posts_obj.uid != chat_user_id){
+						reply = '回复' + is_reply_obj.username;
+					}
+				}
+				_this.$httpSend({
+					path: '/im/circle/comment',
+					data: {
+						message,
+						id: is_posts_obj.post_id,
+						chat_user_id,
+					},
+					success(data) {
+						is_posts_obj.comments.push({
+							"uid": _this.my_data.id,
+							'reply': reply,
+							"username": _this.my_data.nickname,
+							"content": message
+						});
+						_this.init_input();
+					}
+				});
+			},
+			init_input() {
+				this.showInput = false;
+				this.focus = false;
+				this.input_placeholder = '评论';
+				this.is_reply = false;
+			},
+			previewImage(index, image_index) {
+				let data = this.posts[index],
+				images_all = [];
+				for(let i = 0,j = data.content.value.length;i<j;i++){
+					images_all.push(this.staticPath + data.post_id + '/' + data.content.value[i].replace('_thumb',''));
+				}
+				var current = images_all[image_index];
+				uni.previewImage({
+					current: current,
+					urls: images_all
+				});
+			},
+		},
+		watch: {
+			isNickname(new_val,old_val){
+				uni.setNavigationBarTitle({
+					title: new_val, 
+				});
+			}
+		},
+	}
+</script>
+
+<style scoped>
+	@import url("../../static/css/circle.css");
+	.new_msg {
+		text-align: center;
+		color: #36648B;
+		font-weight: bold;
+	}
+</style>

+ 603 - 0
pages/circle/mycircle.vue

@@ -0,0 +1,603 @@
+<template>
+
+
+    <view id="moments" class="page">
+        <view class="back" @tap="back()">
+            <image src="../../static/img/back.png"></image>
+        </view>
+        <view class="home-pic">
+            <image :src="my_data.circle_img" @tap="upload" style="width: 100vw;height:65vw;"></image>
+            <view class="home-pic-base">
+                <view class="top-pic">
+                    <image class="header" :src="image_cache(myPhoto)" @tap.stop="goDetails(my_data.id)"
+                        :lazy-load="true" />
+                </view>
+                <view class="top-name">{{ my_data.nickname }}</view>
+            </view>
+        </view>
+        <view class="sign" v-if="my_data.signature">{{my_data.signature}}</view>
+
+        <view class="moments__post1" v-for="(post,index) in posts" :key="index" :id="'post-'+index">
+            <view class="moments__post">
+                <view class="post-left">
+                    <image class="post_header" :src="image_cache(post.header_image)" @tap="goDetails(post.userid)"
+                        :lazy-load="true" />
+                </view>
+
+                <view class="post_right">
+                    <text class="post-username" @tap="goDetails(post.uid)">{{post.username}}</text>
+                    <view id="paragraph" class="paragraph" @tap="init_input()">{{post.content.text}}</view>
+
+                    <!-- 相册 -->
+                    <view class="thumbnails" v-if="post.type == 0" @tap="init_input()">
+                        <view :class="post.content.value.length === 1 ? 'my-gallery' : 'thumbnail' "
+                            v-for="(image, index_images) in post.content.value" :key="index_images">
+                            <image class="gallery_img" :lazy-load="true" mode="aspectFill"
+                                :src="image_cache(staticPath  + image)" :data-src="image_cache(image)"
+                                @tap="previewImage(index,index_images)" />
+                        </view>
+                    </view>
+
+                    <!-- 资料条 -->
+                    <view class="toolbar">
+                        <view class="timestamp">{{ timestamp(post.time) }}
+                            <view class="delete" v-if="post.userid==meid" @tap="circle_delete(index)">删除</view>
+                        </view>
+                        <view class="like" @tap="like(index)">
+                            <image
+                                :src="post.islike === 0 ? '../../static/push/circle/islike.png' : '../../static/push/circle/like.png'"
+                                :lazy-load="true" />
+                        </view>
+                        <view class="comment" @tap="comment(index)">
+                            <image src="../../static/push/circle/comment.png" :lazy-load="true"></image>
+                        </view>
+                    </view>
+                    <!-- 赞/评论区 -->
+                    <view class="post-footer">
+                        <view class="footer_content" v-if="post.like.length">
+                            <image class="liked" src="../../static/push/circle/liked.png" :lazy-load="true"></image>
+                            <text class="nickname" v-for="(user,index_like) in post.like" :key="index_like"
+                                @tap="goDetails(user.uid)">
+                                {{(index_like ? ',' : '' ) + user.username}}
+                            </text>
+                        </view>
+                        <view class="footer_content" v-for="(comment,comment_index) in post.comment"
+                            :key="comment_index" @tap="reply(index,comment_index)">
+
+                            <view class="comment-nickname" style="word-break:break-all;line-height: 40upx;">
+                                {{comment.username + comment.reply + ': '}}
+                                <text class="comment-content">
+                                    {{comment.content}}
+
+
+                                </text>
+                                <view class="delete" style="float: right;" v-if="comment.uid==meid"
+                                    @tap="comment_delete(index,comment_index)">删除</view>
+                            </view>
+
+                        </view>
+
+
+                    </view>
+
+                </view>
+
+
+            </view>
+
+
+            <!-- 结束 post -->
+        </view>
+        <view class="foot" style="z-index: 999999;" v-show="showInput">
+
+            <chat-input @send-message="send_comment" @blur="blur" :focus="focus"
+                :placeholder="input_placeholder"></chat-input>
+            <!-- <chat-input @send-message="send_comment" @blur="blur" :placeholder="input_placeholder"></chat-input> -->
+        </view>
+        <view class="loadmore" v-if="showLoadMore">{{loadMoreText}}</view>
+    </view>
+
+</template>
+
+<script>
+    import chatInput from './circle/chat_input.vue'; //输入消息框
+    import _data from "../../library/_data.js"
+
+    import api from "../../library/index.js"
+    import action from "../../library/action.js"
+    import config from "../../config.js"
+    import helper from "../../library/helper.js"
+    export default {
+        components: {
+            chatInput
+        },
+        data() {
+            return {
+                my_data: {},
+                user_id: 0,
+
+                posts: [],
+                index: '',
+                comment_index: '',
+                input_placeholder: '评论', //占位内容
+                focus: false, //是否自动聚焦输入框
+                is_reply: false, //回复还是评论
+                showInput: false, //评论输入框
+                screenHeight: '', //屏幕高度(系统)
+                platform: '',
+                windowHeight: '', //可用窗口高度(不计入软键盘)
+                loadMoreText: "加载中...",
+                showLoadMore: false,
+                is_more: false,
+                no_reader_msg: uni.getStorageSync('data_circle_tips') ? uni.getStorageSync('data_circle_tips') : 0,
+                loaddata: [],
+                myid: '',
+                page: 1,
+                meid: uni.getStorageSync('access_token'),
+
+
+            }
+        },
+        created() {
+            this.my_data = {
+                id: uni.getStorageSync('access_token'),
+                nickname: this.$store.state.userinfo.nickname,
+                photo: '../../static/logo.png',
+                circle_img: '../../static/img/default_circle_img.jpg',
+                signature: '',
+            }
+        },
+        computed: {
+            myPhoto() {
+                return this.my_data.photo + '?_=' + this.imgRan;
+            },
+            circleImg() {
+
+                return this.my_data.circle_img;
+            },
+            staticPath() {
+                return config.imgUri;
+            },
+            staticPhoto() {
+                return _data.staticPhoto();
+            },
+            imgRan() {
+                return Math.random();
+            },
+            
+
+
+        },
+        onLoad(option) {
+            let _this = this;
+            this.myid = option.id;
+
+            uni.getSystemInfo({ //获取设备信息
+                success: (res) => {
+                    _this.screenHeight = res.screenHeight;
+                    _this.platform = res.platform;
+                }
+            });
+            // this.onGetData();
+
+        },
+        onShow() {
+
+            let _this = this;
+
+            _this.pullDownRefresh();
+
+
+            // 监听窗口尺寸变化,窗口尺寸不包括底部导航栏
+
+
+
+
+        },
+        onUnload() {
+
+
+            this.max = 0,
+                this.data = [],
+                this.loadMoreText = "加载更多",
+                this.showLoadMore = false;
+        },
+
+
+        onReachBottom() { //监听上拉触底事件
+            let _this = this;
+            _this.showLoadMore = true;
+            if (_this.is_more) {
+                return;
+            }
+            //	this.page++;
+
+            this.onGetData();
+        },
+        onPullDownRefresh() { //监听下拉刷新动作
+
+            this.pullDownRefresh();
+        },
+        onNavigationBarButtonTap(e) { //监听标题栏点击事件
+            if (e.index == 0) {
+                this.navigateTo('./circle/send');
+            }
+        },
+        methods: {
+            back() {
+                uni.navigateBack();
+            },
+            photo(path) {
+                if (path.indexOf('http') <= -1) path = config.imgUri + path;
+                return path;
+            },
+            timestamp(time) {
+                return action.timestampFormat(time);
+            },
+            upload(e) {
+                if (this.myid != uni.getStorageSync('access_token')) return false;
+
+                uni.chooseImage({
+                    success: (chooseImageRes) => {
+                        uni.showLoading();
+                        const tempFilePaths = chooseImageRes.tempFilePaths;
+                        helper.uploadFiles(tempFilePaths, 'image', {
+                            type: 'avatar'
+                        }).then(res => {
+
+                            this.my_data.circle_img = res;
+                            //  console.log(res);
+                            var avatar = res.replace(config.imgUri, '');
+                            api.changeProfile({
+                                circle_img: avatar,
+                                id: this.my_data.id
+                            }).then(res => {
+                                uni.hideLoading()
+                                this.$toast('更新成功').then(() => {
+
+                                });
+
+
+                            });
+                        })
+                    }
+                });
+
+            },
+            onGetData() {
+
+                let that = this;
+
+                api.getMyCircle({
+                    page: this.page,
+                    userid: this.myid
+                }).then(res => {
+                    this.posts.push(...res.data);
+                    if (res.data.length < 20) {
+                        this.loadMoreText = '没有更多数据了';
+                        this.is_more = true;
+                    } else {
+
+                        this.page++;
+                    }
+
+                })
+
+            },
+
+            setCircleData(data) {
+                var list11 = [];
+                for (var i = 0; i < data.length; i++) {
+                    var item = data[i];
+                    if (item.like == false) item.like = [];
+                    if (item.comment == false) item.comment = [];
+                    item.timestamp = action.timestampFormat(item.time);
+                    item.islike = this.setisLike(uni.getStorageSync('access_token'), item.like);
+
+                    list11.push(item);
+                }
+
+                this.posts = list11;
+            },
+
+            setisLike(id, data) {
+                if (data.length == 0 || data == []) return 0;
+                for (var i = 0; i < data.length; i++) {
+                    if (data[i].uid == id) return 1;
+                }
+                return 0;
+            },
+
+
+            goCircleChat() {
+                _data.data('no_reader_circle_chat_num', 0);
+                this.navigateTo('./circle_chat_details');
+            },
+            getUserInfo() {
+                let _this = this;
+                api.getUserInfo({
+                    friend_uid: this.myid
+                }).then(res => {
+                    _this.my_data.id = res.data.id;
+                    _this.my_data.nickname = res.data.nickname;
+
+                    _this.my_data.photo = res.data.avatar;
+                    if (res.data.circle_img != null) {
+                        this.my_data.circle_img = this.image_cache(res.data.circle_img);
+
+                    }
+
+                    this.my_data.signature = res.data.sign;
+                })
+            },
+
+            pullDownRefresh() {
+                let _this = this;
+                //初始化数据
+                this.getUserInfo();
+                this.onGetData();
+
+                uni.stopPullDownRefresh();
+            },
+            goDetails(user_id) {
+                this.navigateTo('../friend/detail?id=' + user_id);
+            },
+            navigateTo(url) {
+                uni.navigateTo({
+                    url: url
+                });
+            },
+            socket_push(id, action, userid, issend) {
+                let data = {
+                    type: 'circle_push',
+                    id: id,
+                    action: action,
+                    fromid: uni.getStorageSync('access_token'),
+                    userid: userid,
+                    issend: issend
+                }
+                this.$socket.send(data);
+            },
+            circle_delete(index) {
+                let _this = this
+                uni.showModal({
+                    title: '提示',
+                    content: '确定要删除吗?',
+                    showCancel: true,
+                    cancelText: '取消',
+                    confirmText: '删除',
+                    success: res => {
+                        if (res.confirm) {
+                            var id = _this.posts[index].id;
+                            api.CircleDelete({
+                                id: id
+                            }).then(res => {
+                                if (res.data == 1) {
+                                    _this.socket_push(_this.posts[index].id, 'delete', _this.posts[
+                                        index].userid, 0);
+                                    _this.posts.splice(index, 1);
+
+                                } else {
+                                    uni.showModal({
+                                        title: '网络连接失败'
+                                    })
+                                }
+                            })
+                        }
+                    }
+                });
+            },
+
+            comment_delete(index, index1) {
+                let _this = this
+                var id = _this.posts[index].id;
+                console.log(index1);
+                uni.showModal({
+                    title: '提示',
+                    content: '确定要删除吗?',
+                    showCancel: true,
+                    cancelText: '取消',
+                    confirmText: '删除',
+                    success: res => {
+                        if (res.confirm) {
+
+                            api.CommentDelete({
+                                id: id,
+                                index: index1
+                            }).then(res => {
+                                if (res.data == 1) {
+                                    _this.posts[index].comment.splice(index1, 1);
+
+                                    _this.socket_push(_this.posts[index].id, 'delete', _this.posts[
+                                        index].userid, 0);
+                                } else {
+                                    uni.showModal({
+                                        title: '网络连接失败'
+                                    })
+                                }
+                            })
+                        }
+                    }
+                });
+            },
+            like(index) {
+
+                let _this = this,
+                    is_like = (_this.posts[index].islike ? 0 : 1);
+                // console.log( _this.posts[index]);
+                var data = {
+                    id: _this.posts[index].id,
+                    userid: uni.getStorageSync('access_token')
+                };
+
+                api.setCircleLike(data).then(res => {
+                    var data = res.data;
+                    _this.posts[index].islike = data.action;
+                    if (data.action) {
+
+                        _this.posts[index].like.push({
+                            "uid": _this.my_data.id,
+                            "username": _this.my_data.nickname,
+                        });
+                    } else {
+                        let likes = [];
+                        for (let i = 0, j = _this.posts[index].like.length; i < j; i++) {
+
+                            if (parseInt(_this.posts[index].like[i].uid) == parseInt(uni.getStorageSync(
+                                    'access_token'))) {
+                                _this.posts[index].like.splice(i, 1);
+                                break;
+                            }
+                        }
+
+                    }
+
+                    this.socket_push(_this.posts[index].id, 'like', _this.posts[index].userid, data.action);
+                })
+
+
+
+            },
+            comment(index) {
+                if (this.showInput) {
+                    this.showInput = false;
+                    this.focus = false;
+                    this.index = '';
+                } else {
+                    this.showInput = true; //调起input框
+                    this.focus = true;
+                    this.index = index;
+                }
+            },
+
+            reply(index, comment_index) {
+                this.is_reply = true; //回复中
+                this.showInput = true; //调起input框
+                let replyTo = this.posts[index].comment[comment_index].username;
+                this.input_placeholder = '回复' + replyTo;
+                this.index = index; //post索引
+                this.comment_index = comment_index; //评论索引
+                this.focus = true;
+            },
+            blur: function() {
+                //this.init_input();
+            },
+            send_comment: function(message) {
+                let _this = this,
+                    is_posts_obj = this.posts[this.index],
+                    chat_user_id = is_posts_obj.userid,
+                    reply = '';
+                if (chat_user_id == undefined) chat_user_id = 0
+                if (this.is_reply) {
+                    let is_reply_obj = is_posts_obj.comment[this.comment_index];
+                    chat_user_id = is_reply_obj.uid;
+                    if (is_posts_obj.userid != chat_user_id) {
+                        reply = '回复' + is_reply_obj.username;
+                    }
+                }
+                var data = {
+                    message,
+                    id: is_posts_obj.id,
+                    chat_user_id,
+                    reply: reply,
+                    uid: uni.getStorageSync('access_token')
+                }
+
+
+                api.setCircleComment(data).then(res => {
+                    is_posts_obj.comment.push({
+                        "uid": _this.my_data.id,
+                        'reply': reply,
+                        "username": _this.my_data.nickname,
+                        "content": message
+                    });
+                    _this.init_input();
+
+                    this.socket_push(_this.posts[this.index].id, 'comment', _this.posts[this.index].userid,
+                        1);
+                })
+
+
+            },
+            init_input() {
+                this.showInput = false;
+                this.focus = false;
+                this.input_placeholder = '评论';
+                this.is_reply = false;
+            },
+            previewImage(index, image_index) {
+                let data = this.posts[index],
+                    images_all = [];
+                for (let i = 0, j = data.content.value.length; i < j; i++) {
+                    images_all.push(this.image_cache(data.content.value[i]));
+                }
+                var current = images_all[image_index];
+                uni.previewImage({
+                    current: current,
+                    urls: images_all
+                });
+            },
+            goPublish() {
+                uni.navigateTo({
+                    url: './circle/send',
+                    success: res => {},
+                    fail: () => {},
+                    complete: () => {}
+                });
+            }
+        },
+        watch: {
+
+        },
+    }
+</script>
+
+<style scoped>
+    @import url("../../static/css/circle.css");
+
+    .new_msg {
+        text-align: center;
+        color: #333333;
+        font-size: 32upx;
+    }
+
+    .inputbox {
+        clear: both;
+        width: 100%;
+        display: flex;
+    }
+
+    .delete {
+        display: inline-block;
+        padding: 0px 20upx;
+        color: #2319dc;
+        font-size: 24upx;
+    }
+
+    .sign {
+        display: block;
+        padding-right: 190upx;
+        margin-top: -65upx;
+        min-height: 50upx;
+        line-height: 50upx;
+        font-size: 24upx;
+        color: #666;
+
+        text-align: right;
+    }
+
+    .back {
+        position: fixed;
+        top: 50upx;
+        left: 10upx;
+        z-index: 10000;
+        height: 150upx;
+        width: 150upx;
+    }
+
+    .back image {
+        height: 40upx;
+        width: 20upx;
+        margin-left: 20upx;
+    }
+</style>

+ 391 - 0
pages/friend/chat.vue

@@ -0,0 +1,391 @@
+<template>
+    <view class="page" ref="page">
+        <view style="display: none;position: fixed;left: 50%;top: 50%;">{{ $store.state.hackUpdate }}</view>
+        <load-more status="loading" v-if="initializing" />
+        <!-- 消息记录 -->
+        <chat-panel :storeKey="storeKey" :sending="sending" :sendingdata="sendingdata" @click-avatar="openProfile" @setSending="setSending" :boardheight="boardheight" @chooseQuote="setQuote" ref="panel" />
+        <!-- 底部 -->
+       <v-sender
+            v-if="!initializing"
+            v-model="message"
+            ref="sender"
+            @send="sendTextMessage"
+            @face="sendVoice"
+            @sendImage="sendImg"
+            @sendVedio="sendVedio"
+            @emoji="sendEmoji"
+            @input="inputMessage"
+            @handleEmotion="handleEmotion"
+            @senderheight="set_sheight"
+            @keyboardheight="keyboardheight"
+            :showboard="showboard"
+            :sendtype="type"
+            :isgroup="0"
+            :groupid="friend.id"
+            :quote="quoteItem"
+        />
+    </view>
+</template>
+
+
+<script>
+	import {
+		mapState,
+		mapGetters
+	} from 'vuex';
+import ChatPanel from '../../components/chat-panel.vue';
+import api from '../../library/index.js';
+import http from '../../library/http.js';
+import config from '../../config.js';
+
+export default {
+    components: {
+        ChatPanel
+    },
+    data() {
+        return {
+            quoteItem: {},
+            friend: {},
+            message: '',
+            initializing: false,
+            getPick: false,
+            showPickMoney: '',
+            pickMsg: '',
+            pickId: '',
+            pickSender: {},
+            pickTitle: '',
+            pickErrorText: '',
+            storeKey: '',
+            redpackInfo: {},
+            sending: false,
+            sendingdata:[],
+            senderheight: 120,
+            sender: [],
+            receiver: [],
+            inpuvalue: '',
+            boardheight: 0,
+            showboard: false,
+            type: '',
+            user:uni.getStorageSync('userInfo'),
+            system:uni.getStorageSync('system'),
+            
+        };
+    },
+    onShow(event) {
+        uni.setNavigationBarTitle({
+            title: decodeURI(this.friend.nickname)
+        });
+ 
+             
+  
+    },
+
+    onLoad(opts) {
+    
+            uni.setNavigationBarTitle({
+                title: decodeURI(opts.nickname)
+            });
+                         // #ifdef APP-PLUS  
+                         let currentWebview = this.$mp.page.$getAppWebview();  
+                         currentWebview.setStyle({  
+                         titleNView: {  
+                         titleText:''  
+                         },  
+                         })  
+                         // #endif
+
+        this.friend = opts;
+
+        this.storeKey = 'U' + this.friend.id;
+         uni.setStorageSync('cache_key',this.storeKey);
+        
+        this.getUserInfo(this.friend.id);
+        this.sender =this.user;
+        this.receiver = this.friend;
+        
+    },
+    onUnload() {
+       
+           uni.setStorageSync('cache_key',''); 
+    },
+       
+
+    methods: {
+        // 选择引用的聊天记录
+        setQuote(item) {
+            this.$refs.sender.setQute(item)
+            this.quoteItem = item
+        },
+        // 检测输入值
+        inputMessage(e) {
+            //  console.log(e);
+            this.emotion = e;
+        },
+        getUserInfo(id) {
+            if(id>0){
+                
+               id = parseInt(id);
+             http.setWait(false).get('user.php?act=userdetail',{id:id,group_id:0,userid:this.user.id}).then(res=>{
+                 this.friend = res.data;
+                 uni.setNavigationBarTitle({
+                     title: decodeURI(this.friend.nickname)
+                 });
+                 
+             })
+             
+              
+            }else{
+                var avatar=this.system.admin_logo;
+                if(avatar.indexOf('http')<=-1) avatar=config.imgUri+avatar;
+                  this.friend={id:0,nickname:this.system.admin_nickname,avatar:avatar};
+          
+            }
+           
+        },
+        toHtml(str) {
+                str=str.replace(/ /g,"&nbsp;");
+                str=str.replace(/\n/g,"<br>");
+                return str;
+            },
+        set_sheight(e) {
+             this.$refs.panel.setAutoHeight(e); 
+        },
+        keyboardheight(e) {
+            this.boardheight = e;
+
+            this.$refs.panel.setAutoHeight(0);
+        },
+
+        // 选择表情
+        handleEmotion(value) {
+            //  console.log(value);
+            this.emotion = value;
+            this.type = 'emotion';
+        },
+        sendEmoji(e) {
+            this.commitMessage('face', e);
+        },
+        sendImg(e) {
+            this.commitMessage('image', e);
+        },
+        sendVedio(e) {
+            this.commitMessage('vedio', e);
+        },
+       
+        // 发送文本消息
+        sendTextMessage() {
+            // this.commitMessage('text',this.message);
+            let that = this
+            let addStr = '-qute-';
+           if(this.quoteItem && this.quoteItem.id) {
+               addStr += 'nickname=' + that.quoteItem.sender.nickname + '&content=' + ( that.quoteItem.type == 'emotion'?that.quoteItem.message.content.content:that.quoteItem.message.content) + '&type=' + that.quoteItem.type
+           }
+           this.emotionInfo = {
+               "type": "emotion",
+               "value": that.quoteItem.id ? (this.emotion + addStr): this.emotion,
+               "content": that.quoteItem.id ? (this.emotion + addStr): this.emotion
+           }
+           if (this.type == "emotion") {
+               console.log( 'emotion',this.emotion);
+               this.commitMessage('emotion', this.emotionInfo);
+           } else {
+               var msg=this.toHtml(this.message);
+               if(that.quoteItem.id) {
+                   msg += addStr
+               }
+               console.log( 'text',msg);
+               this.commitMessage('text', msg);
+           }
+           this.quoteItem = {}
+           this.$refs.sender.clearQute()
+        },
+
+       setSending(e){
+        
+       this.sending=e;
+           
+       },
+
+        commitMessage(type, sendData) {
+            this.message = '';
+            //   this.showboard=true
+
+            if (type == 'image') {
+                var mid = sendData.mid;
+                sendData = sendData.src;
+            } else if (type == 'vedio') {
+                var mid = sendData.mid;
+                //  sendData=sendData.src;
+            } else if (type == 'voice') {
+                var mid = sendData.mid;
+            } else {
+                var mid =
+                    'm' +
+                    Math.random()
+                        .toString(36)
+                        .substring(2);
+            }
+
+            let data = {
+                userid: this.user.id,
+                friend_uid: this.friend.id,
+                type: 'chat',
+                msgtype: type,
+                content: sendData,
+                mid: mid
+            };
+       //    console.log(data);
+         
+         var sendlocal=0;
+         if((type=='image' && sendData.indexOf('http')<=-1) || (type=='vedio' && sendData.src.indexOf('http')<=-1) || (type=='voice'&& sendData.url.indexOf('http')<=-1) ){
+           //本地图片不发到服务器  
+           // console.log(sendData);
+            sendlocal=1;
+         }
+          else {
+             this.$socket.send(data);   
+          }
+           if(type!=='image' && type!=='voice')  sendlocal=1;
+            // uni.showLoading({
+            //     title: '发送中'
+            // });
+
+            var that = this;
+            if (sendlocal == 1) {
+               
+                        var arr = {};
+                        arr.id = that.receiver.id;
+                        arr.cache_key = 'U' + arr.id;
+                        arr['self'] = 1;
+                        arr['isloading'] = 1;
+                        arr['receiver_id'] = arr['id'];
+                        arr['sender_id'] = that.sender.id;
+                        arr['group_id'] = 0;
+                        arr['timestamp'] = parseInt(new Date().getTime() / 1000);
+                        arr['time'] = '';
+                        arr['message'] = { type: type, content: sendData };
+                        arr['sender'] = that.sender;
+                        arr['receiver'] = that.receiver;
+                        arr['nickname'] = that.sender.nickname;
+                        arr['avatar'] = that.sender.avatar;
+                        arr['msg_id'] = '';
+                        arr['_mid'] = mid;
+                         that.sendingdata=arr;
+                      that.sending=true;
+                        this.type='text';
+                     
+                        //that.sendmsg(arr);
+               // console.log(sendlocal);
+            }
+            
+              //that.sending=true;
+        },
+
+        sendVoice(e) {
+            this.commitMessage('voice', e);
+        },
+        openProfile(e) {
+            //     console.log(JSON.stringify(e));
+            let params = { id: e.id, status: 'friend' };
+            return this.$jump('friend.detail', params);
+        }
+    },
+    onNavigationBarButtonTap(e) {
+        let params = { ...this.friend, status: 'friend' };
+        return this.$jump('friend.userset', params);
+    }
+};
+</script>
+
+<style lang="scss">
+$avatar-width: 80upx;
+$control-height: 100upx;
+$control-input-height: $control-height - $uni-spacing-col-base * 2;
+
+
+.placeholder {
+    width: 750upx;
+    height: 1upx;
+}
+
+.message {
+    &-time {
+        color: #999;
+        font-size: 24upx;
+        text-align: center;
+    }
+
+    &-info {
+        display: flex;
+        flex-direction: row;
+        justify-content: flex-start;
+        align-items: flex-start;
+        padding: $uni-spacing-col-lg $uni-spacing-row-lg;
+
+        .spacing {
+            width: $uni-spacing-row-lg;
+            height: $avatar-width;
+            position: relative;
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            justify-content: center;
+            flex-shrink: 0;
+
+            &::before {
+                display: block;
+                content: '';
+                border: $uni-spacing-row-lg/2 solid transparent;
+                border-right-color: #fff;
+            }
+        }
+    }
+
+    &.right &-info {
+        flex-direction: row-reverse;
+        padding-left: $uni-spacing-row-lg;
+        padding-right: $uni-spacing-row-lg * 2 + $avatar-width;
+
+        .spacing::before {
+            border-right-color: transparent;
+            border-left-color: $uni-color-primary;
+        }
+    }
+
+    &.right &-info {
+        padding-left: $uni-spacing-row-lg * 2 + $avatar-width;
+        padding-right: $uni-spacing-row-lg;
+    }
+
+    &-avatar {
+        width: $avatar-width;
+        height: $avatar-width;
+        vertical-align: middle;
+        border-radius: $uni-border-radius-base;
+        flex-shrink: 0;
+    }
+
+    &-content {
+        font-size: 32upx;
+        background: rgba(255, 255, 255, 1);
+        border-radius: $uni-border-radius-base;
+    }
+
+    &.right &-content {
+        color: white;
+        background-color: $uni-color-primary;
+    }
+
+    &--text &-content {
+        padding: 20upx $uni-spacing-row-base;
+    }
+
+    &-failed {
+        width: 30upx;
+        height: 30upx;
+        background-color: $uni-color-error;
+        border-radius: 50%;
+        margin: ($avatar-width - 30upx)/2 $uni-spacing-row-base 0;
+    }
+}
+</style>

+ 851 - 0
pages/friend/detail.vue

@@ -0,0 +1,851 @@
+<template>
+    <view class="page">
+
+        <view class="profile">
+            <image :src="image_cache(userInfo.avatar)" class="avatar"
+                @click="showAvatar(image_cache(userInfo.avatar))" />
+            <view>
+                <view class="nickname">
+                    <text :class="userInfo.mark?'':'non-nickname'">{{userInfo.mark || userInfo.nickname}}</text>
+
+                    <block class="emoji" v-if="userInfo.sex==1">
+                        <image src="../../static/img/gender1.png"
+                            style="width:30upx;height:30upx;margin-left:10upx;border-radius: 5px;"></image>
+                    </block>
+                    <block class="emoji" v-if="userInfo.sex==2">
+                        <image src="../../static/img/gender2.png"
+                            style="width:30upx;height:30upx;margin-left:10upx;border-radius: 5px;"></image>
+                    </block>
+
+                </view>
+                <view class="id" v-if="userInfo.nickname!=userInfo.showname">昵称: {{userInfo.showname}}</view>
+                <view class="id">ID: {{userInfo.id}}</view>
+                <view class="id" v-if="userInfo.province && userInfo.province!='省份'">
+                    地区:{{userInfo.province}}{{userInfo.city}}</view>
+
+            </view>
+        </view>
+        <view class="cell-wrapper" style="margin-top: 20px;">
+            <view class="cell" v-if="userInfo.from">
+                <view class="cell-hd" style="color: #666;font-size: 14px;">来源</view>
+                <view class="cell-hb" style="font-size: 14px;">{{userInfo.from}}</view>
+            </view>
+            <view class="cell arrow" style="margin-top: 0px;" @tap="toCircle">
+                <view class="cell-hd" style="color: #666;width: 150upx;font-size: 14px;">朋友圈</view>
+                <view class="cell-hd" style="text-align: left;width:calc(100% - 260upx) ;">
+                    <view class="imgs" v-for="(value,index) in imgs" :key="index">
+
+                        <image :src="image_cache(value)"></image>
+                    </view>
+
+                </view>
+                <view class="cell-hb emoji" style="width: 100upx;"></view>
+            </view>
+
+
+            <view class="cell arrow" style="margin-top: 0px;" @tap="towords" v-if="userInfo.logout_words.length>0">
+                <view class="cell-hd" style="color: #666;width: 150upx;font-size: 14px;">群印象</view>
+                <view class="cell-hd" style="text-align: left;width:calc(100% - 260upx) ;">
+                    <block class="words" v-for="(value,index) in userInfo.logout_words" :key="index">
+                        <view class="tag">{{value.title}}</view>
+
+                    </block>
+
+                </view>
+                <view class="cell-hb emoji" style="width: 100upx;"></view>
+            </view>
+
+            <view class="cell" style="margin-top: 0px;" v-if="userInfo.sign && userInfo.sign != 'null'">
+                <view class="cell-hd" style="color: #666;width: 140upx;font-size: 14px;">个性签名</view>
+                <view class="cell-hd"
+                    style="text-align: left;width:calc(100% - 150upx) ;color:#666;font-size: 12px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; word-break: break-all;">
+
+                    {{userInfo.sign}}
+                </view>
+
+            </view>
+
+
+            <view class="cell arrow" style="margin-top: 0px;" v-if="userInfo.isfriend" @tap="open_friendset">
+                <view class="cell-hd" style="color: #666;font-size: 14px;">更多设置</view>
+                <view class="cell-hd" style="text-align: left;width:calc(100% - 260upx) ;">
+
+
+                </view>
+                <view class="cell-hb emoji" style="width: 100upx;"></view>
+            </view>
+        </view>
+
+
+        <block v-if="!isSelf">
+
+            <view style="width: 60%;margin: 20px auto;">
+                <button class="button1" v-if="userInfo.isfriend" @tap="handleChat">
+                    <uni-icons type="chat" color="#ffffff" style="margin-right: 5px;"></uni-icons>发消息
+                </button>
+                <button class="button1" v-else @tap="apply_adduser">
+                    <uni-icons type="plus" color="#ffffff" style="margin-right: 5px;"></uni-icons> 添加到通讯录
+                </button>
+            </view>
+
+            <!-- <view style="margin-top:20px;color:#2319DC;text-align: center;font-size: 12px;text-decoration: underline;"
+                @tap="toreport">
+                投诉
+            </view> -->
+        </block>
+
+
+        <view class="popup" v-if="isreq">
+            <view class="box">
+                <ul class="layer_nav" style="height: 40px;line-height: 40px;">
+                    <li class="active">加为好友</li>
+                </ul>
+                <view class="group_detail">
+
+                    <ul class="avatarline" style="position: relative;">
+                        <li>
+                            <image :src="image_cache(userInfo.avatar)" class="avatar"></image>
+                        </li>
+                        <li>
+                            <div class="title" id="group_title">昵称:{{decodeURI(userInfo.nickname)}}</div>
+                            <div>
+                                ID:{{userInfo.id}}
+                            </div>
+                        </li>
+                    </ul>
+                    <textarea class="textarea" placeholder="我是..." v-model="reqcon"></textarea>
+                </view>
+                <view style="padding: 10px 10px;height: 30px;text-align: right;">
+                    <button class="layer_btns cancel" @tap="isreq=false;">
+                        <uni-icons type='closeempty'
+                            style="font-size: 14px;margin-right:1px;color: #333;font-weight: 600;"></uni-icons>
+                        取消</button>
+                    <button class="layer_btns ok" @tap="apply_join()">
+                        <uni-icons type='checkmarkempty'
+                            style="font-size: 14px;color: #fff;margin-right: 1px;"></uni-icons>
+                        确定</button>
+                </view>
+            </view>
+
+
+        </view>
+
+    </view>
+
+</template>
+
+<script>
+    import api from '../../library/index.js';
+    import http from '../../library/http.js';
+
+    import config from "../../config.js"
+    import uniIcons from '../../components/uni-icons/uni-icons.vue'
+    export default {
+        data() {
+            return {
+                id: '',
+                nickname: '',
+                isFriend: false,
+                avatar: '',
+                isSelf: false,
+                gender: 0,
+                hasDeny: false,
+                roomId: 0,
+                isGroup: false,
+                description: '',
+                userInfo: [],
+                istop: false,
+                from: '',
+                imgs: [],
+                showMenu: false,
+                no_tip: false,
+                pro_title: '添加好友请求',
+                pro_text: '',
+                placeholder: '',
+                pro_type: '',
+                tipstype: 0,
+                user: uni.getStorageSync('userInfo'),
+                group_id: 0,
+                isreq: false,
+                reqcon: ''
+            }
+        },
+        components: {
+            uniIcons
+        },
+        methods: {
+            onNavigationBarButtonTap() {
+                if (this.userInfo.isfriend) {
+                    this.open_friendset();
+                    return false;
+                } else {
+                    if (this.userInfo.id != uni.getStorageSync('access_token')) var itemList = ['添加到通讯录']
+                }
+
+                var that = this;
+                uni.showActionSheet({
+                    itemList: itemList,
+                    success: function(res) {
+                        that.apply_adduser();
+
+                    },
+                    fail: function(res) {
+                        //console.log(res.errMsg);
+                    }
+                });
+
+                //this.quickMenuVisible(!this.showMenu);
+            },
+
+            apply_adduser() {
+
+                if (uni.getStorageSync('access_token') > 0) {
+                    var user = uni.getStorageSync('userInfo');
+                    if (user.issetname == 1) {
+
+                        this.isreq = true;
+
+
+
+                    } else {
+                        this.$action.profileTips('未设置昵称,不能添加好友', '/pages/friend/detail?id=' + this.user.id + '&from=' +
+                            this.from);
+                    }
+
+                } else {
+                    this.$action.loginTips('您还没有登录,不能添加好友', '/pages/friend/detail?id=' + this.user.id + '&from=' + this
+                        .from);
+                }
+
+            },
+
+            apply_join() {
+
+
+                var postdata = {
+                    userid: this.user.id,
+                    friend_uid: this.id,
+                    mark: this.reqcon,
+                    from: this.from
+                };
+                http.setWait(false).post('user.php?act=applyAddFriend', postdata).then(res => {
+                    if (res.code == 200) {
+                        var send = res.data.send;
+                        uni.showToast({
+                            title: res.data.message,
+                            icon: 'none'
+                        })
+                        if (send == 2) {
+                            var that = this;
+                            setTimeout(function() {
+                                uni.redirectTo({
+                                    url: 'chat?id=' + that.userid + "&nickname=" + that.userinfo
+                                        .nickname
+                                })
+                            }, 1000)
+                        } else {
+
+                        }
+
+
+                    } else {
+                        uni.showToast({
+                            title: '网络错误,请稍后再试',
+                            icon: 'none'
+                        })
+                    }
+
+                })
+                this.isreq = false;
+            },
+
+
+
+
+            getGroupuser(userid, group_id) {
+                var group_users = uni.getStorageSync(group_id + '_group_members');
+                if (group_users.length > 0) {
+                    this.users_set(group_users);
+                }
+
+                api.getGroupUsers({
+                    group_id: group_id,
+                    userid: userid,
+                }).then(res => {
+                    this.users_set(res.data);
+
+                })
+            },
+            users_set(data) {
+
+                if (data.length > 0) {
+                    for (var i = 0; i < data.length; i++) {
+
+                        if (this.myid == data[i].id) {
+                            this.myinfo = data[i];
+
+                        }
+                    }
+
+
+                    for (var i = 0; i < data.length; i++) {
+                        if (this.userid == data[i].id) {
+                            this.group_user = data[i];
+
+                            if ((this.myinfo.type != data[i].type) && (this.myinfo.type == 'owner' || (this.myinfo
+                                    .type == 'manager' && data[i].type == 'user'))) {
+                                this.isset = true;
+                            } else this.isset = false;
+
+                        }
+
+
+                    }
+                    uni.setStorageSync(this.group_id + '_group_members', data);
+                }
+
+
+            },
+            open_userset() {
+                uni.navigateTo({
+                    url: '../group/userset?id=' + this.id + '&group_id=' + this.group_id + '&thistype=' + this
+                        .thistype + '&usertype=' + this.group_user.type
+
+                })
+            },
+            open_friendset() {
+                uni.navigateTo({
+                    url: '../friend/userset?id=' + this.id + '&from=detail'
+
+                })
+            },
+            getUserInfo(id) {
+                var userid = id;
+
+                if (uni.getStorageSync('members_' + userid)) this.userInfo = uni.getStorageSync('members_' + userid);
+                if (this.userInfo.id == userid) {
+                    this.isloading = false;
+                }
+                http.setWait(false).get('user.php?act=userdetail', {
+                    id: userid,
+                    group_id: this.group_id,
+                    userid: this.user.id
+                }).then(res => {
+                    if (res.code == 200) {
+                        this.isloading = false;
+                        this.userInfo = res.data;
+
+
+                        uni.setStorageSync('members_' + userid, res.data)
+                    } else {
+                        uni.showToast({
+                            title: '网络错误,请稍后再试',
+                            icon: 'none'
+                        })
+                    }
+
+
+                })
+
+
+                api.getCircleImg({
+                    id: id
+                }).then(res => {
+
+                    this.imgs = res.data;
+
+                })
+
+
+            },
+            photo(path) {
+                if (path.indexOf('http') <= -1) path = config.imgUri + path;
+                return path;
+            },
+            handleChat() {
+
+                uni.redirectTo({
+                    url: 'chat?id=' + this.id + "&nickname=" + this.userInfo.nickname
+                })
+
+
+            },
+            toreport() {
+                this.$jump('friend.report', {
+                    id: this.userInfo.id
+                });
+            },
+
+            toCircle() {
+                this.$jump('circle.mycircle', {
+                    id: this.userInfo.id
+                });
+            },
+            towords() {
+                this.$jump('friend.logout_words', {
+                    id: this.userInfo.id
+                });
+            },
+            showAvatar(e) {
+                uni.previewImage({
+                    urls: [e]
+                })
+            },
+
+        },
+        onLoad(opts) {
+            uni.setStorageSync('cache_key', '');
+
+            this.id = opts.id;
+            if (opts.group_id) this.group_id = opts.group_id;
+            //this.userInfo=this.GetUserinfo(this.id);
+            this.getUserInfo(opts.id)
+
+            if (this.user.id == this.id) {
+                this.isSelf = true;
+                uni.hideTabBarRedDot()
+            }
+            this.from = opts.from;
+            var msgtop = uni.getStorageSync('msgtop');
+            msgtop.map(item => {
+                if (item.storekey == 'U' + this.userInfo.id) this.istop = true;
+
+            })
+            var msgnotip = uni.getStorageSync('msgnotip');
+            msgnotip.map(item => {
+                // console.log(item);
+                if (item.storekey == 'U' + this.id) this.no_tip = true;
+
+            })
+
+        },
+        onShow() {
+            uni.setNavigationBarColor({
+                frontColor: '#000000'
+            })
+            uni.hideKeyboard();
+        }
+    }
+</script>
+
+<style lang="scss" scoped>
+    .page {
+        background-color: #fafafa;
+    }
+
+    .button1 {
+        height: 40px;
+        line-height: 40px;
+        border: 0px;
+        border-radius: 20px;
+        color: #fff;
+        // background: -webkit-linear-gradient(left top, #3388ff, #2319dc);
+        // background: -o-linear-gradient(bottom right, #3388ff, #2319dc);
+        // background: -moz-linear-gradient(bottom right, #3388ff, #2319dc);
+        // background: linear-gradient(to bottom right, #3388ff, #2319dc);
+        background-color: $base-color;
+        width: 100%;
+        font-size: 16px;
+        font-weight: 600;
+        text-align: center;
+    }
+
+    .profile {
+        display: flex;
+        align-items: center;
+        padding: 10px 20px;
+        background-color: #fff;
+        margin-top: 10px;
+        padding-bottom: 30px;
+
+        .avatar {
+            width: 120upx;
+            height: 120upx;
+            background-color: #fff;
+            border-radius: $uni-border-radius-base;
+            margin-right: $uni-spacing-col-lg;
+            vertical-align: top;
+            margin-left: 10px;
+        }
+
+        .nickname {
+            font-size: 42upx;
+            font-weight: 700;
+            vertical-align: top;
+            color: #000 !important;
+
+        }
+
+        .id {
+            color: #666;
+            font-size: 24upx;
+            margin-top: $uni-spacing-col-sm;
+        }
+
+        .emoji {
+            font-size: 32upx;
+        }
+    }
+
+    .imgs {
+        display: inline-block;
+        padding: 0px 20upx;
+
+    }
+
+    .imgs image {
+        height: 80upx;
+        width: 80upx;
+        vertical-align: middle;
+        border-radius: 5px;
+    }
+
+    .center {
+        justify-content: center;
+    }
+
+    .cell {
+        margin-top: $uni-spacing-col-lg;
+        font-size: 14px;
+        background-color: #fff;
+        color: $uni-color-primary;
+
+        &.to-room,
+        &.has-deny {
+            padding: 0;
+            padding-right: 0;
+        }
+
+        .deny,
+        .agree {
+            flex: 1;
+            text-align: center;
+        }
+
+        .deny {
+            color: $uni-color-error;
+        }
+
+        .divider {
+            width: 1upx;
+            height: 40upx;
+            flex-shrink: 0;
+            background-color: #eee;
+        }
+    }
+
+    .btn-wrapper {
+        margin-top: $uni-spacing-col-base;
+        padding: $uni-spacing-col-lg $uni-spacing-row-lg;
+    }
+
+    .non-nickname {
+        color: gray;
+    }
+
+    .popup {
+        position: fixed;
+        z-index: 1000;
+        background-color: rgba(0, 0, 0, 0.6);
+        top: 0;
+        left: 0;
+        width: 100%;
+        height: 100vh;
+    }
+
+    .popup .box {
+        position: fixed;
+        left: 10%;
+        width: 80%;
+        top: 20vh;
+        height: auto;
+        background-color: #fff;
+        border-radius: 10px;
+    }
+
+    .popup .textarea {
+        display: block;
+        height: 100px;
+        padding: 5px 10px;
+        margin: 10px auto;
+        width: calc(100% - 42px);
+        border-radius: 5px;
+        border: 1px solid #ddd;
+    }
+
+    .layer_nav {
+        width: 100%;
+        display: block;
+        height: 50px;
+        line-height: 50px;
+        padding: 0px !important;
+        margin: 0px !important;
+        background-color: $base-color;
+        border-top-right-radius: 8px;
+        border-top-left-radius: 8px;
+    }
+
+    .layer_nav li {
+        display: inline-block;
+        float: left;
+        color: #666;
+        background-color: #eee;
+        text-align: center;
+        font-size: 16px;
+        cursor: pointer;
+        width: 150px;
+    }
+
+    .layer_nav li i {
+        margin-right: 0px;
+    }
+
+    .layer_nav li.active {
+        width: 100%;
+        background-color: $base-color;
+        color: #fff;
+    }
+
+    .layer_nav li:first-child {
+        border-top-left-radius: 8px;
+    }
+
+    .layer_btns {
+
+
+        display: inline-block;
+        line-height: 30px;
+        padding: 0px 15px;
+        border-radius: 5px;
+        border: 0px;
+        text-align: right;
+        cursor: pointer;
+        height: 30px;
+        color: #fff;
+        margin-left: 15px;
+        font-size: 14px;
+    }
+
+    .layer_btns.ok {
+        // background: -webkit-linear-gradient(left top, #3388ff, #2319dc);
+        // background: -o-linear-gradient(bottom right, #3388ff, #2319dc);
+        // background: -moz-linear-gradient(bottom right, #3388ff, #2319dc);
+        // background: linear-gradient(to bottom right, #3388ff, #2319dc);
+        background: $base-color;
+        height: 30px !important;
+    }
+
+    .layer_btns.cancel {
+        border: 1px solid #666;
+        color: #666;
+        background-color: #fff;
+        height: 30px;
+        line-height: 30px !important;
+
+    }
+
+    .group_detail .avatar {
+        height: 50px;
+        width: 50px;
+        border-radius: 5px;
+    }
+
+    .group_detail {
+
+
+        -webkit-overflow-scrolling: touch;
+        overflow-y: scroll;
+        width: 100%;
+
+    }
+
+    .group_detail::-webkit-scrollbar {
+        display: none;
+    }
+
+    .group_detail .avatarline {
+        height: 50px;
+        line-height: 50px;
+        display: inline-block;
+
+        table-layout: fixed;
+        width: 100%;
+        background-color: #fff;
+        margin-bottom: 0px;
+        padding: 10px 0px;
+        padding-bottom: 0px !important;
+    }
+
+    .group_detail .avatarline li {
+        display: inline-block;
+        padding: 0px 0px;
+        padding-bottom: 0px !important;
+    }
+
+    .group_detail .avatarline li:first-child {
+        width: 60px;
+        padding-left: 10px;
+        text-align: left;
+        vertical-align: middle;
+    }
+
+    .group_detail .avatarline li:first-child img {
+        vertical-align: middle;
+        height: 50px;
+        width: 50px;
+        border-radius: 5px;
+    }
+
+    .group_detail .avatarline li:nth-child(2) {
+        padding-left: 5px;
+        line-height: 25px;
+
+        vertical-align: top;
+    }
+
+    .group_detail .avatarline li:nth-child(2)>div {
+        height: 25px;
+        line-height: 25px;
+        width: 100%;
+    }
+
+    .group_detail .avatarline li:nth-child(2)>div:last-child {
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        color: #666;
+    }
+
+
+    .group_detail .mark {
+        background-color: #fff;
+        line-height: 20px;
+        display: inline-block;
+        color: #999;
+        margin-bottom: 15px;
+        clear: both;
+        width: calc(100% - 20px);
+        padding: 5px 10px;
+    }
+
+    .group_detail .users {
+        display: block;
+
+        background-color: #fff;
+        padding: 5px 0px;
+        margin-bottom: 15px;
+        margin-top: -15px;
+    }
+
+    .group_detail .users>div {
+        display: inline-block;
+        clear: both;
+        padding: 0px 10px;
+        width: calc(100% - 20px);
+    }
+
+
+    .group_detail .users>div {
+
+        line-height: 25px;
+        text-align: left;
+        position: relative;
+    }
+
+    .group_detail .users>div i {
+        position: absolute;
+        right: 0px;
+        top: 15px;
+        color: #666;
+        font-size: 20px;
+    }
+
+    .group_detail .users>div li {
+        display: inline-block;
+        text-align: center;
+        width: calc(20% - 0px);
+        color: #666;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        line-height: 25px;
+        vertical-align: top;
+    }
+
+    .group_detail .users>div li img {
+        height: 50px;
+        width: 50px;
+        border-radius: 5px;
+        vertical-align: top;
+    }
+
+    .group_detail .lines {
+        height: 50px;
+        line-height: 50px;
+        margin-bottom: 15px;
+        background-color: #fff;
+        display: table;
+        width: 100%;
+        table-layout: fixed;
+        padding-left: 0px;
+        padding-right: 0px;
+    }
+
+    .group_detail .lines>li {
+        display: table-cell;
+    }
+
+    .group_detail .lines>li:first-child {
+        width: 60px;
+        padding-left: 10px;
+        text-align: left;
+    }
+
+    .group_detail .lines>li:nth-child(2) {
+        width: calc(100vw - 90px);
+        text-align: right;
+
+        color: #999;
+    }
+
+    .group_detail .lines>li:last-child {
+        width: 20px;
+
+        text-align: left;
+    }
+
+    .group_detail .lines>li:last-child i {
+        font-size: 20px;
+        color: #666;
+    }
+
+    .group_detail .note {
+        display: block;
+
+        background-color: #fff;
+        padding: 5px 0px;
+        margin-bottom: 10px;
+    }
+
+    .group_detail .note>div {
+        display: inline-block;
+        clear: both;
+        padding: 0px 10px;
+        width: calc(100% - 20px);
+
+    }
+
+    .group_detail .note>div:first-child {
+        height: 25px;
+        line-height: 25px;
+    }
+
+    .group_detail .note>div:last-child {
+
+        line-height: 20px;
+        text-align: left;
+        padding: 5px 0px;
+        font-size: 12px;
+        color: #999;
+    }
+</style>

+ 76 - 0
pages/friend/logout_words.vue

@@ -0,0 +1,76 @@
+<template>
+	<view class="page">
+	    <view v-if="words">
+           <view class="words">
+           <view class="word" v-for="(m,index) in words" :key='index' >
+               <view class="title">{{m.title}}</view>
+           </view>            
+           </view>
+            
+        </view>
+         <view v-else class="nodata">
+             该用户还有群印象!
+             
+         </view>
+        
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				userinfo:{},
+                words:""
+			}
+		},
+		methods: {
+			
+		},
+        onLoad(opts) {
+            this.userinfo=uni.getStorageSync('members_'+opts.id);
+            this.words=this.userinfo.logout_words;
+            
+             uni.setNavigationBarTitle({
+                title:this.userinfo.nickname+"的群印象"
+            })
+        }
+        
+	}
+</script>
+
+<style lang="scss">
+    .page{
+        font-size: 12px;
+    }
+   .nodata{
+       height: 40px;
+       line-height: 40px;
+       text-align: center;
+       color:#666;
+       
+   }
+   .words{
+       
+       overflow-y: scroll;
+       width: 100%;
+       text-align: center;
+   }
+   
+   .words .word{
+      display: inline-block;
+      margin: 5px 8px;
+ 
+   }
+    .words .word .title{
+        height: 25px; line-height:25px;
+        padding: 0px 5px;
+        min-width: 70px;
+        
+        border-radius: 5px;
+        border: 1px #2319dc solid;
+          color: #fff;
+          background-color: #2319dc;
+    }
+  
+</style>

+ 357 - 0
pages/friend/readpacket.vue

@@ -0,0 +1,357 @@
+<template>
+	<view class="page">
+        <view class="line">
+            <view class="left">
+              <view class="pin"  v-if="isgroup==1 && type==1">拼</view>  {{money_title}}
+            </view>
+        <view class="right">
+            <input class="input" type="digit" v-if="money>0" v-model="money" maxlength="5"/>
+                    <input class="input" type="digit" v-else placeholder="0.00" @input="money=$event.detail.value" />
+            元
+            
+        </view>            
+        </view>
+        
+        
+        <block v-if="isgroup==1">
+            <view class="tips">
+                <block v-if="type==1">
+                    当前为拼手气红包,<span class='text' @tap="change_type(2)">改为普通红包</span>
+                </block>
+                
+                <block v-else>
+                    当前为普通红包,<span class='text'  @tap="change_type(1)">改为拼手气红包</span>
+                </block>
+                
+            </view>
+            
+            <view class="line">
+                <view class="left">
+                    红包个数
+                </view>
+            <view class="right">
+                <input class="input" type="number" v-if="num"  v-model="num" @input="listen_num($event.detail.value)" maxlength="3" />
+                 <input class="input" type="number"  v-else placeholder="填写个数" @input="listen_num($event.detail.value)"  />个
+                
+            </view>            
+            </view>
+            <view class="tips" style="color: #666;">
+                   本群共<span class='text'>{{group.people_count}}</span>人
+            </view>
+        </block>
+       
+        
+        <view class="line">
+           
+            <input class="input1" :placeholder="system.redpacket_title" v-model="title"/>
+                 
+        </view>
+		
+        <view class="money_show">
+            <view class="icon">¥</view>
+            <view class="title">{{moneytotal}}</view>
+        </view>
+        
+        <view :class="{'sendbtn':true,'active':issend}" @tap='subsend()'>塞进红包</view>
+        
+        <view class="bottom">
+            未领取的红包,将在{{system.redpacket_backtime}}小时退回到您的账户
+        </view>
+        <payment v-if="showpay" @payresult='payresult' :payinfo="payinfo" title="支付" :getmoney="moneytotal" :fix='fix' type="redpacket"  :id="id" @close="showpay=false;"></payment>
+        
+	</view>
+</template>
+
+<script>
+          import payment from '../../components/payment.vue'
+	export default {
+        components: {
+            payment,
+         
+        },
+		data() {
+			return {
+			   isgroup:0,	
+                id:0,
+                money_title:'总金额',
+                type:1,
+                money:'0.00',
+                num:0,
+                title:'',
+                group:'',
+                system:uni.getStorageSync('system'),
+                user:uni.getStorageSync('userInfo'),
+                showpay:false,
+                payinfo:{},
+                fix:true
+			}
+    
+		},
+        computed:{
+            moneytotal(){
+             if(this.type==1) var res = this.money;
+                else var res = this.money*this.num;
+       
+                if(res>this.system.redpacket_min) return parseFloat(res).toFixed(2);
+                else  return '0.00'
+            },
+            issend(){
+                if(this.moneytotal>0  && this.num>0) return true;
+                else return false;
+            }
+        },
+        methods:{
+            listen_num(v){
+        
+              if(v>0 && parseInt(v)<this.group.people_count) this.num=parseInt(v); 
+              else this.num=1;
+           
+              
+            },
+            change_type(type){
+                this.type=type;
+                if(type==1) this.money_title='总金额';
+                else this.money_title='单个金额'
+            },
+            payresult(e){
+              if(e>0){
+                  
+                  var mid ='m' +Math.random().toString(36).substring(2);
+                  var sendData={title:this.payinfo.title,status:1,id:e,isgroup:this.isgroup,type:this.type,isopen:0};
+                  if(this.isgroup==1){
+                      var data = {
+                          userid: this.user.id,
+                          group_id: this.id,
+                          type: 'group',
+                          msgtype: 'redpacket',
+                          content: sendData,
+                          mid: mid
+                      };
+                  }else{
+                     var data = {
+                         userid: this.user.id,
+                         friend_uid: this.id,
+                         type: 'chat',
+                         msgtype: 'redpacket',
+                         content: sendData,
+                         mid: mid
+                     }; 
+                  }
+                 this.$socket.send(data);   
+                
+                 setTimeout(function(){
+                     uni.navigateBack();
+                 },100)
+              }
+              else{
+                  uni.showToast({
+                      title:'支付发生错误',
+                      icon:'none'
+                  })
+                
+              }
+              
+               
+               this.showpay=false; 
+            },
+            subsend(){
+                
+                if(!this.issend) return false;
+                if(parseFloat(this.money)<0.01){
+                    uni.showToast({
+                        title:'请输入红包金额',
+                        icon:'none'
+                    })
+                    return false;
+                }
+                if(parseInt(this.num)<1){
+                    uni.showToast({
+                        title:'请输入红包个数',
+                        icon:'none'
+                    })
+                    return false;
+                }
+                if(parseFloat(this.money)/parseInt(this.num)<0.01){
+                    uni.showToast({
+                        title:'红包不够分了!',
+                        icon:'none'
+                    })
+                    return false;
+                }
+                if(this.isgroup==1 &&  parseInt(this.num) > parseInt(this.group.people_count)){
+                    uni.showToast({
+                        title:'红包个数不能大于群总人数',
+                        icon:'none'
+                    })
+                    return false;
+                }
+                if(parseFloat(this.moneytotal)<parseFloat(this.system.redpacket_min) || parseFloat(this.moneytotal)>parseFloat(this.system.redpacket_max)){
+                    uni.showToast({
+                        title:'红包金额范围:'+this.system.redpacket_min+'-'+this.system.redpacket_max+'元',
+                        icon:'none'
+                    })
+                    return false;
+                }
+                if(parseFloat(this.moneytotal)>parseFloat(this.user.money1)){
+                   uni.showModal({
+                   	title: '可用余额不足',
+                   	content: "您的可用余额不足,请先去充值!",
+                   	showCancel: true,
+                   	cancelText: '取消',
+                   	confirmText: '去充值',
+                   	success: res => {
+                         
+                   		if(res.confirm) {
+                             uni.redirectTo({
+                               url:"/pages/mine/recharge"  
+                             })
+                   		}
+                   	}
+                   });
+                    return false;
+                }
+                if(this.title) var title=this.title;
+                else var title=this.system.redpacket_title;
+                this.payinfo={isgroup:this.isgroup,type:this.type,permoney:this.money,num:this.num,title:title,chatid:this.id,summoney:this.moneytotal}
+                this.showpay=true;
+               
+                
+            },
+        },
+        onLoad(opts){
+             this.id=opts.id;
+             this.isgroup=opts.isgroup;
+             if(this.isgroup==0){
+                 this.type=2;
+                 this.num=1;
+             }
+               else{
+                    this.group = uni.getStorageSync('group_'+this.id);
+                    
+               }
+           }
+        
+	}
+</script>
+
+<style lang="scss">
+view{
+    padding: 0px 0px;
+    margin: 0px 0px;
+}
+.page{
+    background-color: #FAFAFA;
+    font-size: 14px;;
+    padding-top: 1px;
+}
+.page .tips{
+    height: 22px;
+    line-height: 22px;
+    text-align: left;
+    font-size: 12px;
+    padding: 0px 10px;
+    
+}
+.page .tips .text{
+    display: inline-block;
+    color: #c69848;
+}
+.page .line{
+    background-color: #FFFFFF;
+    margin-top: 15px;
+    height: 50px;
+    line-height: 50px;
+    padding: 0px 10px;;
+}
+.page .line .left{
+    width: 100px;
+    display: inline-block;
+    text-align: left;
+    vertical-align: top;
+}
+.page .line .right{
+    width: calc(100% - 100px);
+     vertical-align: top;
+    display: inline-block;
+    text-align: right;
+}
+.page .line .right .input{
+    height: 40px;
+    line-height: 40px;
+    width: calc(100% - 30px);
+    padding: 0px 5px;
+    border: 0px;
+    text-align: right;
+    display: inline-block;
+    vertical-align: middle;
+}
+.page .line .input1{
+    height: 40px;
+    line-height: 40px;
+    width: calc(100% - 10px);
+    padding: 0px 5px;
+    border: 0px;
+    text-align: left;
+    display: inline-block;
+    vertical-align: middle;
+}
+
+.pin{
+    height: 18px;
+    width: 18px;line-height: 18px;
+    text-align: center;
+    color:#FFF;
+    background-color: #c69848;
+    border-radius: 3px;
+    display: inline-block;
+    margin-right: 5px;
+}
+
+.money_show{
+    margin-top: 15px;
+    height: 50px;
+    line-height: 50px;
+    padding: 0px 10px;;
+    text-align: center;
+    
+}
+.money_show .icon{
+    font-size: 14px;
+    color: #333;
+    display: inline-block;
+}
+.money_show .title{
+    font-size: 34px;
+    font-weight: 700;
+    color: #000;
+     display: inline-block;
+}
+
+.sendbtn{
+   height: 40px;
+   line-height: 40px; 
+   width: 240px;
+   display: block;
+   margin: 15px auto;
+   border: 0px;
+   color:#fff;
+   background-color:#e1e1e1;
+   font-size:16px;
+   font-weight:600;
+   text-align:center;
+   border-radius: 5px;
+}
+.sendbtn.active{
+    background-color: #2319DC;
+}
+.bottom{
+    height: 30px;
+    line-height: 30px;
+    color: #666;
+    text-align: center;
+    position: fixed;
+    left: 0px;
+    bottom: 0px;
+    width: 100%;
+}
+</style>

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini