jiuling 1 bulan lalu
melakukan
4fb5337744
100 mengubah file dengan 13208 tambahan dan 0 penghapusan
  1. 3 0
      .env.development
  2. 3 0
      .env.production
  3. 17 0
      .gitignore
  4. 17 0
      App.vue
  5. 12 0
      api/base/index.js
  6. 54 0
      config/api.js
  7. 20 0
      index.html
  8. 22 0
      main.js
  9. 80 0
      manifest.json
  10. 17 0
      pages.json
  11. 1695 0
      pages/trace/detail.vue
  12. 3 0
      static/icons/phone.svg
  13. TEMPAT SAMPAH
      static/logo.png
  14. TEMPAT SAMPAH
      static/农场草莓园.png
  15. TEMPAT SAMPAH
      static/合格证 1.png
  16. TEMPAT SAMPAH
      static/检测报告 1.png
  17. TEMPAT SAMPAH
      static/检测报告2.png
  18. TEMPAT SAMPAH
      static/检测报告3.png
  19. TEMPAT SAMPAH
      static/草莓产品.png
  20. 54 0
      store/index.js
  21. 60 0
      test
  22. 13 0
      uni.promisify.adaptor.js
  23. 76 0
      uni.scss
  24. 314 0
      utils/Foundation.js
  25. 420 0
      utils/composables/useDict.js
  26. 130 0
      utils/coordinateUtils.js
  27. 3725 0
      utils/data.json
  28. 72 0
      utils/dateUtils.js
  29. 562 0
      utils/filters.js
  30. 190 0
      utils/geolocationUtils.js
  31. 42 0
      utils/huiZiArea.ts
  32. 98 0
      utils/jessibuca-plugin.js
  33. 31 0
      utils/js_sdk/amap-wx.130.js
  34. 42 0
      utils/js_sdk/h5-copy/h5-copy.js
  35. 104 0
      utils/js_sdk/lili-pay/wx-pay.js
  36. 78 0
      utils/js_sdk/t-jwt/jwt.js
  37. 38 0
      utils/js_sdk/u-draw-poster/draw-poster.d.ts
  38. 194 0
      utils/js_sdk/u-draw-poster/draw-poster.js
  39. 17 0
      utils/js_sdk/u-draw-poster/extends/create-from-list/index.d.ts
  40. 140 0
      utils/js_sdk/u-draw-poster/extends/create-from-list/index.js
  41. 4 0
      utils/js_sdk/u-draw-poster/extends/create-gcanvas/index.d.ts
  42. 9 0
      utils/js_sdk/u-draw-poster/extends/create-gcanvas/index.js
  43. 12 0
      utils/js_sdk/u-draw-poster/extends/draw-function/draw-image-fit.d.ts
  44. 25 0
      utils/js_sdk/u-draw-poster/extends/draw-function/draw-image-fit.js
  45. 4 0
      utils/js_sdk/u-draw-poster/extends/draw-function/draw-image.d.ts
  46. 42 0
      utils/js_sdk/u-draw-poster/extends/draw-function/draw-image.js
  47. 4 0
      utils/js_sdk/u-draw-poster/extends/draw-function/draw-round-image.d.ts
  48. 15 0
      utils/js_sdk/u-draw-poster/extends/draw-function/draw-round-image.js
  49. 4 0
      utils/js_sdk/u-draw-poster/extends/draw-function/fill-round-rect.d.ts
  50. 7 0
      utils/js_sdk/u-draw-poster/extends/draw-function/fill-round-rect.js
  51. 4 0
      utils/js_sdk/u-draw-poster/extends/draw-function/fill-warp-text.d.ts
  52. 76 0
      utils/js_sdk/u-draw-poster/extends/draw-function/fill-warp-text.js
  53. 7 0
      utils/js_sdk/u-draw-poster/extends/draw-function/index.d.ts
  54. 15 0
      utils/js_sdk/u-draw-poster/extends/draw-function/index.js
  55. 4 0
      utils/js_sdk/u-draw-poster/extends/draw-function/round-rect.d.ts
  56. 41 0
      utils/js_sdk/u-draw-poster/extends/draw-function/round-rect.js
  57. 4 0
      utils/js_sdk/u-draw-poster/extends/draw-function/stroke-round-rect.d.ts
  58. 7 0
      utils/js_sdk/u-draw-poster/extends/draw-function/stroke-round-rect.js
  59. 101 0
      utils/js_sdk/u-draw-poster/extends/draw-painter/index.d.ts
  60. 73 0
      utils/js_sdk/u-draw-poster/extends/draw-painter/index.js
  61. 6 0
      utils/js_sdk/u-draw-poster/extends/draw-qr-code/index.d.ts
  62. 6 0
      utils/js_sdk/u-draw-poster/extends/draw-qr-code/index.js
  63. 10 0
      utils/js_sdk/u-draw-poster/extends/draw-qr-code/uQRCode.d.ts
  64. 1355 0
      utils/js_sdk/u-draw-poster/extends/draw-qr-code/uQRCode.js
  65. 11 0
      utils/js_sdk/u-draw-poster/index.d.ts
  66. 22 0
      utils/js_sdk/u-draw-poster/index.js
  67. 13 0
      utils/js_sdk/u-draw-poster/package.json
  68. 7 0
      utils/js_sdk/u-draw-poster/utils/global.d.ts
  69. 11 0
      utils/js_sdk/u-draw-poster/utils/global.js
  70. 175 0
      utils/js_sdk/u-draw-poster/utils/interface.d.ts
  71. 1 0
      utils/js_sdk/u-draw-poster/utils/interface.js
  72. 38 0
      utils/js_sdk/u-draw-poster/utils/object-sizing.d.ts
  73. 78 0
      utils/js_sdk/u-draw-poster/utils/object-sizing.js
  74. 20 0
      utils/js_sdk/u-draw-poster/utils/utils.d.ts
  75. 49 0
      utils/js_sdk/u-draw-poster/utils/utils.js
  76. 3 0
      utils/js_sdk/u-draw-poster/utils/wx-utils.d.ts
  77. 37 0
      utils/js_sdk/u-draw-poster/utils/wx-utils.js
  78. 273 0
      utils/js_sdk/wa-permission/permission.js
  79. 83 0
      utils/lib/request/adapters/index.js
  80. 51 0
      utils/lib/request/core/InterceptorManager.js
  81. 198 0
      utils/lib/request/core/Request.js
  82. 20 0
      utils/lib/request/core/buildFullPath.js
  83. 27 0
      utils/lib/request/core/defaults.js
  84. 7 0
      utils/lib/request/core/dispatchRequest.js
  85. 97 0
      utils/lib/request/core/mergeConfig.js
  86. 16 0
      utils/lib/request/core/settle.js
  87. 69 0
      utils/lib/request/helpers/buildURL.js
  88. 14 0
      utils/lib/request/helpers/combineURLs.js
  89. 14 0
      utils/lib/request/helpers/isAbsoluteURL.js
  90. 2 0
      utils/lib/request/index.js
  91. 131 0
      utils/lib/request/utils.js
  92. 201 0
      utils/mapUtils.js
  93. 219 0
      utils/md5.js
  94. 113 0
      utils/media-utils.js
  95. 553 0
      utils/mixins/dictMixin.js
  96. 65 0
      utils/privacy.js
  97. 218 0
      utils/request.js
  98. 8 0
      utils/staticDict.js
  99. 124 0
      utils/storage.js
  100. 62 0
      utils/testCoordinateUtils.js

+ 3 - 0
.env.development

@@ -0,0 +1,3 @@
+# 开发环境配置
+# H5 开发环境使用 proxy 代理
+VITE_BASE_URL=/base

+ 3 - 0
.env.production

@@ -0,0 +1,3 @@
+# 生产环境配置
+# 生产环境使用真实域名
+VITE_BASE_URL=https://nxy.gbdfarm.com:9001/pro-uniapp

+ 17 - 0
.gitignore

@@ -0,0 +1,17 @@
+# OSX
+#
+.DS_Store
+node_modules/
+
+#Intellij idea
+.idea/
+/idea/
+.vscode/
+/unpackage/**
+/uni_modules/**
+.hbuilderx/launch.json
+
+# 环境变量文件(保留模板文件,忽略本地配置)
+.env
+.env.local
+.env.*.local

+ 17 - 0
App.vue

@@ -0,0 +1,17 @@
+<script>
+	export default {
+		onLaunch: function() {
+			console.log('App Launch')
+		},
+		onShow: function() {
+			console.log('App Show')
+		},
+		onHide: function() {
+			console.log('App Hide')
+		}
+	}
+</script>
+
+<style>
+	/*每个页面公共css */
+</style>

+ 12 - 0
api/base/index.js

@@ -0,0 +1,12 @@
+import { http, Method } from '@/utils/request.js'
+
+/**
+  * 获取车辆作业详细信息
+*/
+export function getTraceDetail(id){
+  return http.request({
+    url: `/base/batch/${id}`,
+    method: Method.GET,
+    needToken: true
+  })
+}

+ 54 - 0
config/api.js

@@ -0,0 +1,54 @@
+/**
+ * API 配置
+ * 
+ * 环境说明:
+ * 1. H5 开发环境:使用 /base 代理路径,通过 vite proxy 转发到本地服务器
+ * 2. H5 生产环境:使用真实域名
+ * 3. 小程序/App/鸿蒙:始终使用真实域名(不支持 proxy)
+ */
+
+// 判断是否为 H5 平台
+// #ifdef H5
+const isH5 = true;
+// #endif
+// #ifndef H5
+const isH5 = false;
+// #endif
+
+// 开发环境配置
+const dev = {
+  // H5 开发环境使用代理路径,其他平台使用真实域名
+  serve: isH5 ? "/base" : "https://azn.gbdfarm.com/prod-api",
+  // serve: "https://nxy.gbdfarm.com:9000/pro-uniapp",
+  upload: import.meta.env.VITE_UPLOAD_URL || "http://nxy.gbdfarm.com",
+  // WVP 服务器地址 - 注意:WVP 可能在不同的端口或路径
+  wvpServer: isH5 ? "/wvp" : "https://nxy.gbdfarm.com:9000/wvp"
+};
+
+// 生产环境配置
+const prod = {
+  serve: import.meta.env.VITE_BASE_URL || "https://azn.gbdfarm.com/prod-api",
+  upload: import.meta.env.VITE_UPLOAD_URL || "https://nxy.gbdfarm.com",
+  // WVP 服务器地址 - 注意:WVP 可能在不同的端口或路径
+  wvpServer: isH5 ? "/wvp" : "https://nxy.gbdfarm.com:9000/wvp"
+};
+
+// 根据环境选择配置
+let api = process.env.NODE_ENV === "development" ? dev : prod;
+console.log("api",api);
+// 微信小程序、App、鸿蒙始终使用生产环境配置
+// // #ifdef MP-WEIXIN
+// api = prod;
+// // #endif
+
+// // #ifdef APP-PLUS
+// api = prod;
+// // #endif
+
+// #ifdef MP-HARMONY
+api = prod;
+// #endif
+
+export default {
+  ...api,
+};

+ 20 - 0
index.html

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+  <head>
+    <meta charset="UTF-8" />
+    <script>
+      var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
+        CSS.supports('top: constant(a)'))
+      document.write(
+        '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
+        (coverSupport ? ', viewport-fit=cover' : '') + '" />')
+    </script>
+    <title></title>
+    <!--preload-links-->
+    <!--app-context-->
+  </head>
+  <body>
+    <div id="app"><!--app-html--></div>
+    <script type="module" src="/main.js"></script>
+  </body>
+</html>

+ 22 - 0
main.js

@@ -0,0 +1,22 @@
+import App from './App'
+
+// #ifndef VUE3
+import Vue from 'vue'
+import './uni.promisify.adaptor'
+Vue.config.productionTip = false
+App.mpType = 'app'
+const app = new Vue({
+  ...App
+})
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from 'vue'
+export function createApp() {
+  const app = createSSRApp(App)
+  return {
+    app
+  }
+}
+// #endif

+ 80 - 0
manifest.json

@@ -0,0 +1,80 @@
+{
+    "name" : "jiayouhouyuan",
+    "appid" : "__UNI__0FDFBE8",
+    "description" : "",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    /* 5+App特有相关 */
+    "app-plus" : {
+        "usingComponents" : true,
+        "nvueStyleCompiler" : "uni-app",
+        "compilerVersion" : 3,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        /* 模块配置 */
+        "modules" : {},
+        /* 应用发布信息 */
+        "distribute" : {
+            /* android打包配置 */
+            "android" : {
+                "permissions" : [
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ]
+            },
+            /* ios打包配置 */
+            "ios" : {},
+            /* SDK配置 */
+            "sdkConfigs" : {}
+        }
+    },
+    /* 快应用特有相关 */
+    "quickapp" : {},
+    /* 小程序特有相关 */
+    "mp-weixin" : {
+        "appid" : "",
+        "setting" : {
+            "urlCheck" : false
+        },
+        "usingComponents" : true
+    },
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "uniStatistics" : {
+        "enable" : false
+    },
+    "vueVersion" : "3",
+    "h5" : {
+        "router" : {
+            "base" : "./"
+        },
+        "devServer" : {
+            "port" : 9001
+        }
+    }
+}

+ 17 - 0
pages.json

@@ -0,0 +1,17 @@
+{
+	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+		{
+			"path": "pages/trace/detail",
+			"style": {
+				"navigationStyle": "custom"
+			}
+		}
+	],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "jiayouhouyuan",
+		"navigationBarBackgroundColor": "#F8F8F8",
+		"backgroundColor": "#F8F8F8"
+	},
+	"uniIdRouter": {}
+}

+ 1695 - 0
pages/trace/detail.vue

@@ -0,0 +1,1695 @@
+<template>
+		<view class="page">
+		<view class="pageDecor">
+			<view class="pageGlow glowA" />
+			<view class="pageGlow glowB" />
+			<view class="pageGlow glowC" />
+			<view class="pageGrain" />
+		</view>
+
+			<!-- 顶部留白:兼容 iOS 刘海 -->
+			<view class="safeTop" />
+
+			<!-- 轻品牌页头:极克制、无导航栏,让独立扫码页有品牌收口 -->
+			<view class="brandPageHeader">
+				<view class="brandPageHeaderInner">
+					<text class="brandPageHeaderName">佳友厚苑</text>
+					<view class="brandPageHeaderDot" />
+					<text class="brandPageHeaderLabel">官方溯源 品质可验</text>
+				</view>
+			</view>
+
+			<view class="hero">
+			<!-- 完整首屏大卡:品牌信任区 + 商品信息面板 -->
+			<view class="heroCard">
+				<!-- Hero 视觉区:商品图 + 品牌氛围 -->
+				<view class="heroBg">
+					<!-- 优先商品图,没有则用农场图 -->
+					<image
+						class="heroImage"
+						:src="traceDetail.product?.image || traceDetail.farm?.image"
+						mode="aspectFill"
+					/>
+					<!-- 底部大字号水印,营造品牌氛围 -->
+					<view class="heroBrandAnchor">
+						<text class="heroBrandAnchorText">JIAYOU</text>
+					</view>
+					<!-- 光感层:多层次渐变 + 景深 + 底部暗化 -->
+					<view class="heroMask" />
+				</view>
+
+				<!-- 商品信息面板:嵌入 Hero 底部,与 Hero 自然过渡 -->
+				<view v-if="traceDetail.product?.name" class="heroInfoPanel">
+					<view class="infoPanelInner">
+						<view class="sectionHeader">
+							<view class="sectionHeaderLeft">
+								<text class="sectionEn">Product</text>
+								<text class="sectionTitle">商品信息</text>
+							</view>
+							<view v-if="traceDetail.batch?.statusBadge" class="trustBadge" :class="traceDetail.batch.statusBadge.type">
+								<!-- 认证徽章 SVG:双圆环 + 对勾,图标主视觉,文字辅助 -->
+								<svg class="trustBadgeIcon" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+									<circle cx="10" cy="10" r="9" stroke="rgba(27,71,42,0.38)" stroke-width="0.9" />
+									<circle cx="10" cy="10" r="5.5" stroke="rgba(27,71,42,0.22)" stroke-width="0.7" />
+									<path d="M6.6 10.4L9.1 12.9L13.8 8" stroke="rgba(27,71,42,0.8)" stroke-width="1.15" stroke-linecap="round" stroke-linejoin="round" />
+								</svg>
+								<text class="trustBadgeText">{{ traceDetail.batch.statusBadge.text }}</text>
+							</view>
+						</view>
+
+						<view class="infoPanelBody">
+							<text class="infoPanelName">{{ traceDetail.product.name }}</text>
+
+							<view v-if="traceDetail.product.spec" class="infoPanelSpec">
+								<view class="specDot" />
+								<text class="specText">{{ traceDetail.product.spec }}</text>
+							</view>
+
+							<view v-if="traceDetail.product?.intro" class="infoPanelIntro">
+								<text>{{ traceDetail.product.intro }}</text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+
+		<scroll-view class="content" scroll-y>
+			<!-- 农场信息(合并为单卡:图片+名称+地区+介绍连续表达) -->
+			<view v-if="traceDetail.farm?.name" class="card cardLevel2 cardFarm">
+				<view class="sectionHeader">
+					<view class="sectionHeaderLeft">
+						<text class="sectionEn">Farm</text>
+						<text class="sectionTitle">农场信息</text>
+					</view>
+				</view>
+
+				<!-- 农场主体:左图右文结构,融入主体内容 -->
+				<view class="farmBody">
+					<view class="farmImageWrap">
+						<image class="farmImage" :src="traceDetail.farm.image" mode="aspectFill" />
+					</view>
+					<view class="farmMeta">
+						<text class="farmName">{{ traceDetail.farm.name }}</text>
+						<view v-if="traceDetail.farm.location" class="farmLocation">
+							<svg class="locationIcon" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+								<path d="M10 2C7.24 2 5 4.24 5 7c0 4 5 11 5 11s5-7 5-11c0-2.76-2.24-5-5-5zm0 6.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" fill="rgba(39,113,76,0.6)"/>
+							</svg>
+							<text class="locationText">{{ traceDetail.farm.location }}</text>
+						</view>
+					</view>
+				</view>
+				<view v-if="traceDetail.farm?.intro" class="farmIntro">
+					<text>{{ traceDetail.farm.intro }}</text>
+				</view>
+			</view>
+
+			<!-- 批次信息(可选:batch 可能不存在) -->
+			<view v-if="traceDetail.batch?.exists" class="card cardLevel1 cardBatch">
+				<view class="sectionHeader">
+					<view class="sectionHeaderLeft">
+						<text class="sectionEn">Batch</text>
+						<text class="sectionTitle">批次信息</text>
+					</view>
+				</view>
+
+				<!-- 批次信息主体:左右两列布局,左列标签固定宽度,右列内容左对齐 -->
+				<view class="batchBody">
+					<view v-if="traceDetail.batch?.no" class="batchRow">
+						<text class="batchRowLabel">批次号</text>
+						<text class="batchRowValue">{{ traceDetail.batch.no }}</text>
+					</view>
+					<view v-if="traceDetail.batch?.harvestTime" class="batchRow">
+						<text class="batchRowLabel">生产/采收时间</text>
+						<text class="batchRowValue">{{ traceDetail.batch.harvestTime }}</text>
+					</view>
+					<view v-if="traceDetail.batch?.packTime" class="batchRow">
+						<text class="batchRowLabel">包装时间</text>
+						<text class="batchRowValue">{{ traceDetail.batch.packTime }}</text>
+					</view>
+				</view>
+			</view>
+
+			<!-- 批次不存在/已下线的说明 -->
+			<view v-else-if="traceDetail.batch?.statusBadge" class="card soft cardLevel1 cardBatchState">
+				<view class="sectionHeader">
+					<view class="sectionHeaderLeft">
+						<text class="sectionEn">Batch</text>
+						<text class="sectionTitle">当前批次状态</text>
+					</view>
+					<view class="statusBadge" :class="traceDetail.batch.statusBadge.type">
+						{{ traceDetail.batch.statusBadge.text }}
+					</view>
+				</view>
+				<view class="emptyText">{{ traceDetail.batch?.emptyMessage || '该批次暂不可查询' }}</view>
+				<view class="btnRow">
+					<button class="primaryBtn" @click="goBackToPurchase">返回购买渠道</button>
+				</view>
+			</view>
+
+			<!-- 检测报告:横向卡片列表 -->
+			<view v-if="traceDetail.batch?.exists" class="card cardLevel2 cardCredential">
+				<view class="sectionHeader">
+					<view class="sectionHeaderLeft">
+						<text class="sectionEn">Report</text>
+						<text class="sectionTitle">检测报告</text>
+					</view>
+				</view>
+
+				<!-- 横向滑动卡片列表 -->
+				<scroll-view
+					v-if="reportItems.length"
+					class="reportCardList"
+					scroll-x
+					:show-scrollbar="false"
+					enhanced
+				>
+					<view class="reportCardTrack">
+						<view
+							v-for="(item, itemIdx) in reportItems"
+							:key="`report-card-${itemIdx}`"
+							class="reportCard"
+							@click="previewDoc('report', getReportGlobalIndex(itemIdx, 0))"
+						>
+							<!-- 报告缩略图(带页数角标) -->
+							<view class="reportCardThumb">
+								<image
+									v-if="item.images && item.images.length"
+									class="reportCardThumbImg"
+									:src="item.images[0]"
+									mode="aspectFit"
+								/>
+								<view v-else class="reportCardThumbEmpty">
+									<text class="reportCardThumbEmptyText">暂无图片</text>
+								</view>
+								<view v-if="item.images && item.images.length > 1" class="reportCardPages">
+									共{{ item.images.length }}页
+								</view>
+							</view>
+
+							<!-- 报告信息 -->
+							<view class="reportCardMeta">
+								<view v-if="item.detectDate" class="reportCardRow">
+									<text class="reportCardLabel">检测日期</text>
+									<text class="reportCardValue">{{ item.detectDate }}</text>
+								</view>
+								<view v-if="item.no" class="reportCardRow">
+									<text class="reportCardLabel">报告编号</text>
+									<text class="reportCardValue reportCardValueNo">{{ item.no }}</text>
+								</view>
+							</view>
+
+							<!-- 点击提示 -->
+							<text class="reportCardHint">点击查看大图</text>
+						</view>
+					</view>
+				</scroll-view>
+
+				<!-- 待补充状态 -->
+				<view v-else class="docPlaceholder">
+					<text class="docPlaceholderTitle">检测报告待补充</text>
+					<text class="docPlaceholderText">
+						{{ traceDetail.report?.emptyMessage || '检测报告待补充,请耐心等待。' }}
+					</text>
+				</view>
+			</view>
+
+			<!-- 合格证:信息摘要 + 缩略图一体化布局 -->
+			<view v-if="traceDetail.batch?.exists" class="card cardLevel1 cardCredential">
+				<view class="sectionHeader">
+					<view class="sectionHeaderLeft">
+						<text class="sectionEn">Certificate</text>
+						<text class="sectionTitle">合格证</text>
+					</view>
+				</view>
+
+				<!-- 信息与缩略图一体化区域 -->
+				<view class="certSummary">
+					<!-- 左侧:信息摘要 -->
+					<view class="certSummaryInfo">
+						<view v-if="traceDetail.certificate?.issueDate" class="certSummaryRow">
+							<text class="certSummaryLabel">开具日期</text>
+							<text class="certSummaryValue">{{ traceDetail.certificate.issueDate }}</text>
+						</view>
+						<view v-if="traceDetail.certificate?.no" class="certSummaryRow">
+							<text class="certSummaryLabel">合格证编号</text>
+							<text class="certSummaryValue">{{ traceDetail.certificate.no }}</text>
+						</view>
+					</view>
+
+					<!-- 右侧:缩略图 -->
+					<view
+						v-if="traceDetail.certificate?.status === 'uploaded' && certificateImages.length"
+						class="certThumbContainer"
+						@click="previewDoc('certificate', 0)"
+					>
+						<view class="certThumbWrap">
+							<image class="certThumbImage" :src="certificateImages[0]" mode="aspectFit" />
+						</view>
+						<text class="certPreviewHint">点击查看</text>
+					</view>
+
+					<!-- 待补充状态:仅显示提示 -->
+					<view v-else class="certPendingHint">
+						<text class="certPendingText">
+							{{ traceDetail.certificate?.emptyMessage || '合格证待补充,请耐心等待。' }}
+						</text>
+					</view>
+				</view>
+			</view>
+
+			<!-- 底部柔和收口渐变 -->
+			<view class="footerFade" />
+			<!-- 轻量页脚 -->
+			<view class="traceFooter">
+				<view class="traceFooterHint">如需帮助,联系客服</view>
+				<view class="traceFooterPhone" @click="contactCustomer">
+					<image class="traceFooterPhoneIcon" src="/static/icons/phone.svg" mode="aspectFit" />
+					<text class="traceFooterPhoneNum">13379508760</text>
+				</view>
+				<view class="traceFooterBrand">佳友厚苑 · 安心之选</view>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script setup>
+import { computed, ref } from 'vue'
+import { onLoad } from '@dcloudio/uni-app'
+import {getTraceDetail } from '@/api/base/index.js'
+// 页面状态选择(H5 演示用):通过路由参数传入 state 即可切换 mock 场景
+// 例如:/pages/trace/detail?state=reportPending
+// 加载状态
+const loading = ref(false)
+// 数据存储
+const traceInfo = ref(null)
+const routeOptions = ref({})
+const mockStateKey = ref('normal')
+
+const MOCK_TRACE_DETAILS = {
+	normal: {
+		product: {
+			name: '',
+			spec: '',			
+			image: '',
+			intro: ''
+		},
+		farm: {
+			name: '',
+			location: '',
+			image: '',
+			intro: ''
+		},
+			batch: {
+			exists: false,
+			statusBadge: { text: '', type: '' },
+			no: '',
+			harvestTime: '',
+			packTime: ''
+		},
+		report: {
+			status: '',
+			statusBadge: { text: '', type: '' },
+			// 每份报告独立 detectDate / no / images
+			items: [
+				{
+					detectDate: '',
+					no: '',
+					images: ['']
+				},
+				{
+					detectDate: '',
+					no: '',
+					images: ['']
+				},
+				{
+					detectDate: '',
+					no: '',
+					images: ['']
+				}
+			]
+		},
+		certificate: {
+			status: '',
+			statusBadge: { text: '', type: '' },
+			issueDate: '',
+			no: '',
+			fileUrl: '',
+			images: ['']
+		}
+	},
+	reportPending: {
+		product: {
+			name: '',
+			spec: '',			
+			image: '',
+			intro: ''
+		},
+		farm: {
+			name: '',
+			location: '',
+			image: null,
+			intro: ''
+		},
+		batch: {
+			exists: false,
+			statusBadge: { text: '', type: '' },
+			no: '',
+			harvestTime: '',
+			packTime: ''
+		},
+		report: {
+			status: '',
+			statusBadge: { text: '', type: '' },
+			emptyMessage: '',
+			items: []
+		},
+		certificate: {
+			status: '',
+			statusBadge: { text: '', type: '' },
+			issueDate: '',
+			no: '',
+			fileUrl: '',
+			images: []
+		}
+	},
+	certificatePending: {
+		product: {
+			name: '',
+			spec: '',	
+			image: '',
+			intro: ''
+		},
+		farm: {
+			name: '',
+			location: '',
+			image: null,
+			intro: ''
+		},
+		batch: {
+			exists: false,
+			statusBadge: { text: '', type: '' },
+			no: '',
+			harvestTime: '',
+			packTime: ''
+		},
+		report: {
+			status: '',
+			statusBadge: { text: '', type: '' },
+			items: [
+				{
+					detectDate: '',
+					no: '',
+					images: []
+				}
+			]
+		},
+		certificate: {
+			status: '',
+			statusBadge: { text: '', type: '' },
+			emptyMessage: ''
+		}
+	},
+	batchNotFound: {
+		product: {
+			name:'',
+			spec: '',
+			image: '',
+			intro: ''
+		},
+		farm: {
+			name: '',
+			location: '',
+			image: null,
+			intro: ''
+		},
+		batch: {
+			exists: false,
+			statusBadge: { text: '', type: '' },
+			emptyMessage: ''
+		},
+		report: null,
+		certificate: null
+	},
+	batchOfflined: {
+		product: {
+			name: '',
+			spec: '',
+			image: '',
+			intro: ''
+		},
+		farm: {
+			name: '',
+			location: '',
+			image: null,
+			intro: ''
+		},
+		batch: {
+			exists: false,
+			statusBadge: { text: '', type: '' },
+			emptyMessage: ''
+		},
+		report: null,
+		certificate: null
+	}
+}
+
+
+function resolveStateKey(opts) {
+	const raw = (opts?.state || opts?.batchState || opts?.scene || '').toString().trim()
+	if (!raw) return 'normal'
+	const allowed = ['normal', 'reportPending', 'certificatePending', 'batchNotFound', 'batchOfflined']
+	return allowed.includes(raw) ? raw : 'normal'
+}
+
+onLoad((opts) => {
+	// 拿到浏览器路径参数
+	const fullPath = window.location.pathname
+	const batchId = fullPath.split('/').filter(Boolean).pop()
+	
+	// 优先使用路由参数中的 id,其次使用 URL 路径中的 id
+	const finalId = batchId || 1
+	loadData(finalId)
+	
+	routeOptions.value = opts || {}
+	mockStateKey.value = resolveStateKey(opts || {})
+})
+
+const loadData = async (batchId) => {
+  loading.value = true
+  
+  try {
+    // 调用接口
+    const res = await getTraceDetail(batchId)
+    traceInfo.value = res.data.data
+    console.log('接口返回数据:', res)
+  } catch (error) {
+    console.error('加载失败', error)
+    // 错误提示已在拦截器中自动处理
+  } finally {
+    // 无论成功失败都关闭 loading
+    loading.value = false
+  }
+}
+
+const traceDetail = computed(() => {
+	// 如果没有真实数据,返回 mock 数据
+	if (!traceInfo.value) {
+		return MOCK_TRACE_DETAILS[mockStateKey.value] || MOCK_TRACE_DETAILS.normal
+	}
+
+	const data = traceInfo.value
+	
+	// 解析 certFiles 和 reportFiles(JSON 字符串转数组)
+	let certFiles = []
+	let reportFiles = []
+	
+	try {
+		if (data.certificate?.certFiles) {
+			certFiles = JSON.parse(data.certificate.certFiles)
+		}
+	} catch (e) {
+		console.error('解析 certFiles 失败', e)
+	}
+	
+	// 构建返回数据结构
+	return {
+		product: {
+			name: data.productName || '',
+			spec: data.productSpec || '',
+			image: data.productImage || '',
+			intro: data.productDesc || ''
+		},
+		farm: {
+			name: data.farmName || '',
+			location: data.farmRegion || '',
+			image: data.farmImage || '',
+			intro: data.farmIntro || ''
+		},
+		batch: {
+			exists: data.status === '1', // status 为 '1' 表示批次正常
+			statusBadge: data.status === '1' 
+				? { text: '检验合格', type: 'ok' }
+				: { text: '批次不存在', type: 'muted' },
+			no: data.batchNo || '',
+			harvestTime: data.produceDate || '',
+			packTime: data.packageDate || '',
+			emptyMessage: data.status !== '1' ? '未找到对应溯源批次信息。请确认二维码是否为佳友厚苑正品批次。' : ''
+		},
+		report: {
+			status: data.reports && data.reports.length > 0 ? 'uploaded' : 'pending',
+			statusBadge: data.reports && data.reports.length > 0 
+				? { text: '已上传', type: 'ok' }
+				: { text: '待补充', type: 'wait' },
+			emptyMessage: '检测报告待补充,上传完成后可查看大图。',
+			items: (data.reports || []).map(report => {
+				let images = []
+				try {
+					if (report.reportFiles) {
+						const files = JSON.parse(report.reportFiles)
+						images = files.map(f => f.url)
+					}
+				} catch (e) {
+					console.error('解析 reportFiles 失败', e)
+				}
+				
+				return {
+					detectDate: report.reportDate || '',
+					no: report.reportNo || '',
+					images: images
+				}
+			})
+		},
+		certificate: {
+			status: data.certificate && certFiles.length > 0 ? 'uploaded' : 'pending',
+			statusBadge: data.certificate && certFiles.length > 0
+				? { text: '已上传', type: 'ok' }
+				: { text: '待补充', type: 'wait' },
+			issueDate: data.certificate?.certIssueDate || '',
+			no: data.certificate?.certNo || '',
+			fileUrl: certFiles.length > 0 ? certFiles[0].url : '',
+			images: certFiles.map(f => f.url),
+			emptyMessage: '合格证待补充,上传完成后可查看大图。'
+		}
+	}
+})
+const reportImages = computed(() => {
+	const items = traceDetail.value?.report?.items
+	if (Array.isArray(items)) {
+		return items.flatMap(item => Array.isArray(item.images) ? item.images : [])
+	}
+	return []
+})
+
+const reportItems = computed(() => {
+	return traceDetail.value?.report?.items || []
+})
+
+// 计算某份报告内某张图在全局 reportImages 扁平数组中的索引
+function getReportGlobalIndex(itemIndex, imgIndex) {
+	const items = reportItems.value
+	let offset = 0
+	for (let i = 0; i < itemIndex; i++) {
+		const imgArr = items[i]?.images
+		offset += Array.isArray(imgArr) ? imgArr.length : 0
+	}
+	return offset + imgIndex
+}
+
+const certificateImages = computed(() => {
+	const c = traceDetail.value?.certificate
+	if (!c) return []
+	if (Array.isArray(c.images) && c.images.length) return c.images
+	return c.fileUrl ? [c.fileUrl] : []
+})
+
+
+function contactCustomer() {
+	uni.makePhoneCall({
+		phoneNumber: '13379508760'
+	})
+}
+
+function goBackToPurchase() {
+	uni.showModal({
+		title: '返回购买渠道',
+		content: 'mock 模式:后续可跳转到直播间/小店页面。',
+		showCancel: true,
+		confirmText: '确认返回'
+	})
+}
+
+
+function previewDoc(kind, index) {
+	const urls = kind === 'report' ? reportImages.value : certificateImages.value
+	if (!urls.length) {
+		uni.showToast({ title: '该文件暂未上传', icon: 'none' })
+		return
+	}
+	uni.previewImage({
+		urls,
+		current: urls[index] || urls[0]
+	})
+}
+</script>
+
+<style scoped>
+.page {
+	position: relative;
+	min-height: 100vh;
+	--bg-cream-1: #f8f2e8;
+	--bg-cream-2: #f3ebdd;
+	--bg-cream-3: #ece1ce;
+	--forest-900: #143a2b;
+	--forest-800: #1f513b;
+	--forest-700: #2d6849;
+	--sage-500: #708f7d;
+	--gold-320: #ccb086;
+	--gold-260: #dcc4a0;
+	--text-900: #233126;
+	--text-700: #3c4d41;
+	--text-500: #6b776d;
+	background: linear-gradient(172deg,
+		#FAF6EF 0%,
+		#F4EEE3 38%,
+		#EDF0EC 68%,
+		#E8EFE9 100%
+	);
+	overflow: hidden;
+}
+
+/* 背景氛围层:三层光感(前景/中景/背景)+ grain */
+.pageDecor {
+	position: fixed;
+	inset: 0;
+	pointer-events: none;
+	z-index: 0;
+}
+
+.pageGlow {
+	position: absolute;
+	border-radius: 50%;
+	filter: blur(14rpx);
+}
+
+/* 背景层:左上森林绿微光 */
+.glowA {
+	width: 780rpx;
+	height: 780rpx;
+	top: -280rpx;
+	left: -300rpx;
+	background: radial-gradient(circle, rgba(26, 84, 58, 0.18) 0%, rgba(20, 72, 50, 0) 70%);
+	opacity: 0.85;
+}
+
+/* 中景层:右下金色暖光 */
+.glowB {
+	width: 720rpx;
+	height: 720rpx;
+	right: -280rpx;
+	top: 480rpx;
+	background: radial-gradient(circle, rgba(200, 170, 120, 0.2) 0%, rgba(200, 170, 120, 0) 72%);
+	opacity: 0.9;
+}
+
+/* 前景层:顶部柔和高光,塑造空间感 */
+.glowC {
+	width: 600rpx;
+	height: 360rpx;
+	top: -60rpx;
+	left: 50%;
+	transform: translateX(-50%);
+	background: radial-gradient(ellipse at 50% 0%, rgba(255, 252, 246, 0.38), transparent 70%);
+	filter: blur(20rpx);
+	opacity: 0.7;
+}
+
+/* 纹理叠加层 */
+.pageGrain {
+	position: absolute;
+	inset: 0;
+	opacity: 0.55;
+	background:
+		radial-gradient(900rpx 380rpx at 48% -4%, rgba(255, 255, 255, 0.55), rgba(255, 255, 255, 0)),
+		radial-gradient(640rpx 400rpx at 104% 48%, rgba(68, 112, 86, 0.09), rgba(68, 112, 86, 0)),
+		radial-gradient(700rpx 320rpx at -4% 76%, rgba(210, 180, 130, 0.12), rgba(210, 180, 130, 0)),
+		linear-gradient(180deg, rgba(248, 244, 236, 0.16) 0%, rgba(228, 242, 232, 0.08) 100%);
+}
+
+.safeTop {
+	height: calc(env(safe-area-inset-top));
+	position: relative;
+	z-index: 1;
+}
+
+/* 轻品牌页头:透明底,不叠在 Hero 上产生「白雾」;层级低于首屏卡 */
+.brandPageHeader {
+	position: relative;
+	z-index: 2;
+	display: flex;
+	align-items: center;
+	min-height: 72rpx;
+	padding: 0 40rpx;
+	box-sizing: border-box;
+	border-bottom: 1rpx solid rgba(39, 75, 57, 0.05);
+	background: transparent;
+}
+
+.brandPageHeaderInner {
+	display: flex;
+	align-items: center;
+	gap: 10rpx;
+	width: 100%;
+}
+
+.brandPageHeaderName {
+	font-size: 22rpx;
+	font-weight: 600;
+	line-height: 1.15;
+	letter-spacing: 0.1em;
+	color: rgba(27, 41, 33, 0.65);
+}
+
+.brandPageHeaderDot {
+	flex-shrink: 0;
+	width: 4rpx;
+	height: 4rpx;
+	border-radius: 50%;
+	background: rgba(39, 113, 76, 0.4);
+}
+
+.brandPageHeaderLabel {
+	font-size: 20rpx;
+	font-weight: 400;
+	line-height: 1.15;
+	letter-spacing: 0.06em;
+	color: rgba(112, 143, 125, 0.7);
+}
+
+.hero,
+.content {
+	position: relative;
+	z-index: 1;
+}
+
+.hero {
+	padding: 0 24rpx;
+}
+
+/* 完整首屏大卡:与品牌页头分离,避免负 margin 上提后被页头遮盖 */
+.heroCard {
+	border-radius: 42rpx;
+	overflow: hidden;
+	margin-top: 20rpx;
+	position: relative;
+	z-index: 4;
+	box-shadow:
+		0 48rpx 120rpx rgba(10, 36, 24, 0.2),
+		0 16rpx 48rpx rgba(10, 36, 24, 0.1),
+		0 2rpx 0 rgba(255, 255, 255, 0.6) inset;
+	backdrop-filter: blur(4px);
+}
+
+/* Hero 视觉区:多层次光感空间,顶部高光 + 景深 + 底部暗化 */
+.heroBg {
+	position: relative;
+	width: 100%;
+	height: 0;
+	padding-bottom: 56.25%;
+	overflow: hidden;
+	background: linear-gradient(160deg, rgba(20, 74, 52, 0.72), rgba(205, 177, 129, 0.3) 70%, rgba(243, 232, 214, 0.36));
+}
+
+/* 前景层光晕:右下淡金色微光(提升质感) */
+.heroBg::before {
+	content: '';
+	position: absolute;
+	right: -100rpx;
+	bottom: -72rpx;
+	width: 520rpx;
+	height: 280rpx;
+	border-radius: 50%;
+	background: radial-gradient(ellipse at 42% 38%, rgba(252, 244, 228, 0.18), transparent 68%);
+	pointer-events: none;
+	z-index: 2;
+}
+
+.heroImage {
+	position: absolute;
+	inset: 0;
+	width: 100%;
+	height: 100%;
+	display: block;
+	z-index: 1;
+}
+
+.heroBrandAnchor {
+	position: absolute;
+	right: -48rpx;
+	bottom: -14rpx;
+	z-index: 2;
+	pointer-events: none;
+}
+
+.heroBrandAnchorText {
+	font-size: 164rpx;
+	font-weight: 760;
+	letter-spacing: 0.1em;
+	line-height: 1;
+	color: rgba(248, 241, 227, 0.045);
+	transform: rotate(-8deg);
+}
+
+/* Hero 遮罩层:提亮后仍保留轻微底部过渡,避免压住真实商品图 */
+.heroMask {
+	position: absolute;
+	inset: 0;
+	z-index: 3;
+	background:
+		radial-gradient(ellipse 180% 60% at 50% 0%, rgba(255, 252, 248, 0.26), transparent 68%),
+		radial-gradient(480rpx 240rpx at 90% 8%, rgba(252, 248, 240, 0.2), transparent 62%),
+		radial-gradient(700rpx 360rpx at 8% 65%, rgba(6, 24, 16, 0.12), transparent 58%),
+		radial-gradient(560rpx 300rpx at 88% 80%, rgba(205, 177, 129, 0.06), transparent 62%),
+		linear-gradient(180deg,
+			rgba(8, 28, 18, 0) 0%,
+			rgba(8, 28, 18, 0) 62%,
+			rgba(10, 36, 24, 0.05) 80%,
+			rgba(8, 26, 18, 0.1) 92%,
+			rgba(248, 244, 238, 0.12) 100%
+		);
+}
+
+/* 商品信息面板:玻璃浮层效果,负margin上浮 + backdrop-filter */
+.heroInfoPanel {
+	background: rgba(252, 248, 242, 0.88);
+	backdrop-filter: blur(14px);
+	-webkit-backdrop-filter: blur(14px);
+	position: relative;
+}
+
+/* 与 Hero 底部自然过渡 */
+.heroInfoPanel::before {
+	content: '';
+	position: absolute;
+	top: -56rpx;
+	left: 0;
+	right: 0;
+	height: 56rpx;
+	background: linear-gradient(180deg,
+		rgba(252, 248, 242, 0) 0%,
+		rgba(252, 248, 242, 0.88) 100%
+	);
+	pointer-events: none;
+	z-index: 1;
+}
+
+.infoPanelInner {
+	position: relative;
+	z-index: 2;
+	padding: 32rpx 30rpx 30rpx;
+}
+
+/* 与下方农场/批次等卡片共用 .sectionHeader / .sectionHeaderLeft 样式 */
+
+.infoPanelBody {
+	padding-top: 0;
+}
+
+.infoPanelName {
+	display: block;
+	font-size: 30rpx;
+	font-weight: 680;
+	line-height: 1.4;
+	letter-spacing: 0.01em;
+	color: rgba(27, 41, 33, 0.92);
+}
+
+.infoPanelSpec {
+	display: inline-flex;
+	align-items: center;
+	gap: 10rpx;
+	margin-top: 14rpx;
+	padding: 8rpx 16rpx;
+	border-radius: 20rpx;
+	background: rgba(39, 113, 76, 0.06);
+	border: 1rpx solid rgba(39, 113, 76, 0.08);
+}
+
+.specDot {
+	width: 6rpx;
+	height: 6rpx;
+	border-radius: 50%;
+	background: rgba(39, 113, 76, 0.5);
+}
+
+.specText {
+	font-size: 20rpx;
+	font-weight: 500;
+	color: rgba(54, 66, 57, 0.85);
+}
+
+.infoPanelIntro {
+	margin-top: 16rpx;
+	padding-top: 16rpx;
+	border-top: 1rpx solid rgba(39, 75, 57, 0.06);
+	font-size: 23rpx;
+	line-height: 1.8;
+	color: rgba(54, 66, 57, 0.75);
+}
+
+.content {
+	padding: 20rpx 0 40rpx;
+}
+
+/* 基础卡片:半透明玻璃质感 */
+.card {
+	margin: 0 24rpx 22rpx;
+	padding: 30rpx 28rpx;
+	border-radius: 36rpx;
+	background: rgba(252, 250, 244, 0.76);
+	box-shadow:
+		0 16rpx 40rpx rgba(38, 41, 32, 0.07),
+		0 1rpx 0 rgba(255, 255, 255, 0.5) inset;
+	backdrop-filter: blur(8px);
+	-webkit-backdrop-filter: blur(8px);
+}
+
+.card.soft {
+	background: rgba(252, 248, 244, 0.6);
+}
+
+/* Hero 之后第一张卡:适度上浮 */
+.cardHeroFirst {
+	margin-top: -28rpx;
+	position: relative;
+	z-index: 3;
+}
+
+/* 层级 0:与 Hero 同级,主卡(商品面板) */
+.cardLevel0 {
+	box-shadow:
+		0 48rpx 120rpx rgba(10, 36, 24, 0.16),
+		0 16rpx 48rpx rgba(10, 36, 24, 0.08),
+		0 1rpx 0 rgba(255, 255, 255, 0.6) inset;
+}
+
+/* 层级 1:次要信息卡,阴影中等 */
+.cardLevel1 {
+	box-shadow:
+		0 20rpx 50rpx rgba(30, 34, 24, 0.09),
+		0 8rpx 24rpx rgba(30, 34, 24, 0.05),
+		0 1rpx 0 rgba(255, 255, 255, 0.55) inset;
+}
+
+/* 层级 2:次次要信息卡,阴影更轻 */
+.cardLevel2 {
+	box-shadow:
+		0 14rpx 36rpx rgba(36, 38, 28, 0.065),
+		0 1rpx 0 rgba(255, 255, 255, 0.5) inset;
+}
+
+/* 层级 3:底部辅助信息卡,最轻 */
+.cardLevel3 {
+	box-shadow:
+		0 8rpx 22rpx rgba(42, 44, 30, 0.04),
+		0 1rpx 0 rgba(255, 255, 255, 0.44) inset;
+}
+
+.cardFarm {
+	background: rgba(250, 248, 242, 0.82);
+}
+
+.cardBatch {
+	background: rgba(251, 248, 242, 0.8);
+}
+
+.cardCredential {
+	background: rgba(252, 248, 240, 0.84);
+}
+
+.cardBatchState {
+	background: rgba(252, 248, 244, 0.74);
+}
+
+/* ================================================
+   微动效:让页面"活起来"
+   ================================================ */
+
+/* Hero 进入:上浮 + 淡入 */
+@keyframes heroEnter {
+	0% {
+		opacity: 0;
+		transform: translateY(28rpx);
+	}
+	100% {
+		opacity: 1;
+		transform: translateY(0);
+	}
+}
+
+.heroCard {
+	animation: heroEnter 0.6s cubic-bezier(0.22, 0.78, 0.35, 1) both;
+}
+
+/* 卡片依次入场:延迟递增,制造节奏感 */
+@keyframes cardEnter {
+	0% {
+		opacity: 0;
+		transform: translateY(20rpx);
+	}
+	100% {
+		opacity: 1;
+		transform: translateY(0);
+	}
+}
+
+/* 商品面板:稍晚于 Hero */
+.heroInfoPanel {
+	animation: cardEnter 0.5s cubic-bezier(0.22, 0.78, 0.35, 1) 0.15s both;
+}
+
+/* 农场卡 */
+.cardFarm {
+	animation: cardEnter 0.5s cubic-bezier(0.22, 0.78, 0.35, 1) 0.25s both;
+}
+
+/* 批次卡 */
+.cardBatch {
+	animation: cardEnter 0.5s cubic-bezier(0.22, 0.78, 0.35, 1) 0.35s both;
+}
+
+/* 凭证卡 */
+.cardCredential {
+	animation: cardEnter 0.5s cubic-bezier(0.22, 0.78, 0.35, 1) 0.45s both;
+}
+
+/* ============================
+   检测报告横向卡片列表
+   ============================ */
+.reportCardList {
+	width: 100%;
+	overflow-x: auto;
+	overflow-y: hidden;
+	-webkit-overflow-scrolling: touch;
+	white-space: nowrap;
+}
+
+.reportCardList::-webkit-scrollbar {
+	display: none;
+}
+
+.reportCardTrack {
+	display: inline-flex;
+	flex-wrap: nowrap;
+	align-items: stretch;
+	gap: 16rpx;
+	padding: 6rpx 4rpx 10rpx;
+	/* 关键:让子项不受 flex 压缩,自然撑开形成横向溢出 */
+	width: max-content;
+}
+
+/* 单张报告卡片 */
+.reportCard {
+	flex-shrink: 0;
+	width: 220rpx;
+	background: #FAFBF9;
+	border: 1rpx solid rgba(39, 75, 57, 0.09);
+	border-radius: 14rpx;
+	padding: 12rpx 12rpx 10rpx;
+	display: flex;
+	flex-direction: column;
+	align-items: stretch;
+	box-shadow: 0 2rpx 8rpx rgba(39, 75, 57, 0.04);
+}
+
+/* 缩略图(带页数角标覆盖层) */
+.reportCardThumb {
+	position: relative;
+	width: 100%;
+	height: 196rpx;
+	background: rgba(39, 75, 57, 0.03);
+	border-radius: 10rpx;
+	overflow: hidden;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	margin-bottom: 10rpx;
+}
+
+.reportCardThumbImg {
+	width: 100%;
+	height: 100%;
+}
+
+.reportCardThumbEmpty {
+	width: 100%;
+	height: 100%;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
+
+.reportCardThumbEmptyText {
+	font-size: 18rpx;
+	color: rgba(39, 75, 57, 0.3);
+}
+
+/* 页数角标:绝对定位在缩略图右下角 */
+.reportCardPages {
+	position: absolute;
+	bottom: 8rpx;
+	right: 8rpx;
+	font-size: 15rpx;
+	color: rgba(39, 75, 57, 0.65);
+	background: rgba(250, 251, 249, 0.88);
+	border: 1rpx solid rgba(39, 75, 57, 0.1);
+	border-radius: 6rpx;
+	padding: 2rpx 8rpx;
+	line-height: 1.4;
+}
+
+/* 报告元信息 */
+.reportCardMeta {
+	flex: 1;
+	margin-bottom: 6rpx;
+}
+
+.reportCardRow {
+	display: flex;
+	justify-content: space-between;
+	align-items: baseline;
+	gap: 4rpx;
+	margin-bottom: 4rpx;
+}
+
+.reportCardLabel {
+	font-size: 16rpx;
+	color: rgba(84, 106, 93, 0.6);
+	flex-shrink: 0;
+}
+
+.reportCardValue {
+	font-size: 16rpx;
+	color: rgba(68, 82, 72, 0.85);
+	font-weight: 460;
+	text-align: right;
+	word-break: break-all;
+}
+
+.reportCardValueNo {
+	font-size: 14rpx;
+	color: rgba(68, 82, 72, 0.72);
+}
+
+/* 点击提示 */
+.reportCardHint {
+	font-size: 14rpx;
+	color: rgba(39, 75, 57, 0.3);
+	text-align: center;
+	margin-top: auto;
+}
+
+/* 底部辅助卡 */
+.cardBatchState {
+	animation: cardEnter 0.5s cubic-bezier(0.22, 0.78, 0.35, 1) 0.55s both;
+}
+
+/* 卡片触摸反馈:阴影增强(模拟按压感) */
+.card:active {
+	transition: box-shadow 0.15s ease, transform 0.15s ease;
+}
+
+/* 触摸时轻微缩小,增加真实感 */
+.card:active:not(.heroInfoPanel) {
+	transform: scale(0.99);
+}
+
+.sectionHeader {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	gap: 18rpx;
+	margin-bottom: 20rpx;
+}
+
+.sectionHeaderLeft {
+	display: flex;
+	flex-direction: column;
+	gap: 10rpx;
+	position: relative;
+	padding-bottom: 8rpx;
+}
+
+.sectionHeaderLeft::after {
+	content: '';
+	position: absolute;
+	left: 0;
+	bottom: 0;
+	width: 78rpx;
+	height: 2rpx;
+	border-radius: 999rpx;
+	background: linear-gradient(90deg, rgba(46, 82, 63, 0.3), rgba(203, 176, 128, 0.26), rgba(46, 82, 63, 0));
+	pointer-events: none;
+}
+
+.sectionEn {
+	font-size: 15rpx;
+	font-weight: 500;
+	letter-spacing: 0.24em;
+	text-transform: uppercase;
+	color: rgba(84, 106, 93, 0.76);
+}
+
+.sectionTitle {
+	font-size: 27rpx;
+	font-weight: 680;
+	color: rgba(60, 72, 64, 0.82);
+}
+
+.statusBadge {
+	font-size: 18rpx;
+	font-weight: 620;
+	padding: 9rpx 15rpx;
+	border-radius: 999rpx;
+	white-space: nowrap;
+	border: 1rpx solid transparent;
+	box-shadow: 0 1rpx 0 rgba(255, 255, 255, 0.34) inset;
+}
+
+.statusBadge.ok {
+	color: #1d5d40;
+	background: rgba(39, 113, 76, 0.12);
+	border-color: rgba(39, 113, 76, 0.2);
+}
+
+.statusBadge.wait {
+	color: #715726;
+	background: rgba(203, 171, 112, 0.2);
+	border-color: rgba(203, 171, 112, 0.26);
+}
+
+.statusBadge.warning {
+	color: #8a5e22;
+	background: rgba(214, 174, 95, 0.22);
+	border-color: rgba(214, 174, 95, 0.28);
+}
+
+.statusBadge.muted {
+	color: #677069;
+	background: rgba(126, 137, 128, 0.14);
+	border-color: rgba(126, 137, 128, 0.2);
+}
+
+/* =============================================
+   商品信息面板专用信任认证徽章:强化图标主视觉、文字辅助
+   ============================================= */
+/* 整体:认证章风格,低饱和细边框,无交互感 */
+.trustBadge {
+	display: inline-flex;
+	align-items: center;
+	gap: 7rpx;
+	padding: 9rpx 18rpx 9rpx 15rpx;
+	border-radius: 999rpx;
+	border: 1rpx solid rgba(39, 113, 76, 0.22);
+	background: rgba(39, 113, 76, 0.06);
+	box-shadow:
+		0 2rpx 6rpx rgba(39, 113, 76, 0.06),
+		0 1rpx 0 rgba(255, 255, 255, 0.55) inset;
+	white-space: nowrap;
+	cursor: default;
+	pointer-events: none;
+	user-select: none;
+}
+
+/* 双圆环认证图标:20×20 viewBox,图标为第一视觉焦点 */
+.trustBadgeIcon {
+	width: 30rpx;
+	height: 30rpx;
+	flex-shrink: 0;
+	vertical-align: middle;
+	display: inline-block;
+}
+
+/* 文案:品牌深绿,字重略降,视觉权重低于图标 */
+.trustBadgeText {
+	font-size: 18rpx;
+	font-weight: 500;
+	letter-spacing: 0.05em;
+	color: rgba(27, 71, 42, 0.68);
+}
+
+.kv {
+	display: flex;
+	flex-direction: column;
+	gap: 16rpx;
+}
+
+.kvRow {
+	display: flex;
+	align-items: baseline;
+	justify-content: space-between;
+	gap: 16rpx;
+}
+
+.kvKey {
+	font-size: 22rpx;
+	font-weight: 480;
+	color: rgba(54, 68, 58, 0.62);
+}
+
+.kvVal {
+	font-size: 24rpx;
+	font-weight: 660;
+	text-align: right;
+	color: rgba(27, 41, 33, 0.92);
+}
+
+/* 农场主体:左图右文,右栏与图片垂直居中,名称/地址成组 */
+.farmBody {
+	display: flex;
+	align-items: center;
+	gap: 24rpx;
+	margin-bottom: 18rpx;
+}
+
+.farmImageWrap {
+	flex-shrink: 0;
+	width: 180rpx;
+	height: 136rpx;
+	border-radius: 22rpx;
+	overflow: hidden;
+	position: relative;
+	box-shadow:
+		0 12rpx 28rpx rgba(24, 41, 30, 0.14),
+		0 2rpx 0 rgba(255, 255, 255, 0.3) inset;
+}
+
+.farmImage {
+	width: 100%;
+	height: 100%;
+	display: block;
+	background: linear-gradient(160deg, rgba(234, 245, 240, 0.9), rgba(220, 238, 228, 0.85));
+}
+
+.farmMeta {
+	flex: 1;
+	display: flex;
+	flex-direction: column;
+	justify-content: center;
+	min-width: 0;
+	gap: 10rpx;
+}
+
+.farmName {
+	font-size: 28rpx;
+	font-weight: 680;
+	line-height: 1.45;
+	letter-spacing: 0.01em;
+	color: rgba(27, 41, 33, 0.94);
+}
+
+/* 农场地址:普通文本样式,弱于标题;多行时图标与首行对齐 */
+.farmLocation {
+	display: flex;
+	align-items: flex-start;
+	gap: 8rpx;
+}
+
+/* 定位小图标:略弱、与首行文字视觉对齐 */
+.locationIcon {
+	width: 18rpx;
+	height: 18rpx;
+	flex-shrink: 0;
+	margin-top: 6rpx;
+	opacity: 0.42;
+}
+.locationText {
+	flex: 1;
+	min-width: 0;
+	font-size: 21rpx;
+	font-weight: 400;
+	color: rgba(84, 106, 93, 0.82);
+	line-height: 1.55;
+	letter-spacing: 0.02em;
+}
+
+/* 农场介绍:融入主体,使用分隔线区分,与商品简介风格统一 */
+.farmIntro {
+	padding-top: 18rpx;
+	border-top: 1rpx solid rgba(39, 75, 57, 0.06);
+	font-size: 23rpx;
+	line-height: 1.86;
+	color: rgba(54, 68, 58, 0.76);
+}
+
+.emptyText {
+	margin-top: 10rpx;
+	font-size: 24rpx;
+	line-height: 1.62;
+	color: rgba(16, 24, 19, 0.72);
+}
+
+.btnRow {
+	margin-top: 22rpx;
+}
+
+/* 合格证紧凑缩略图 */
+/* ============================
+   合格证:信息摘要 + 缩略图一体化布局
+   ============================ */
+.certSummary {
+	display: flex;
+	align-items: flex-start;
+	gap: 24rpx;
+}
+
+.certSummaryInfo {
+	flex: 1;
+	display: flex;
+	flex-direction: column;
+	gap: 14rpx;
+	min-width: 0;
+}
+
+.certSummaryRow {
+	display: flex;
+	flex-direction: column;
+	gap: 4rpx;
+}
+
+.certSummaryLabel {
+	font-size: 20rpx;
+	font-weight: 500;
+	color: rgba(39, 75, 57, 0.55);
+	letter-spacing: 0.02em;
+}
+
+.certSummaryValue {
+	font-size: 25rpx;
+	font-weight: 580;
+	color: rgba(27, 41, 33, 0.9);
+	line-height: 1.4;
+}
+
+.certThumbContainer {
+	flex: 0 0 auto;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	gap: 4rpx;
+}
+
+.certThumbContainer .certThumbWrap {
+	/* 与左侧两行摘要区总高约齐平:缩略图 + gap + 提示行 */
+	width: 88rpx;
+	height: 120rpx;
+	border-radius: 8rpx;
+	overflow: hidden;
+	background: #fff;
+	border: 1rpx solid rgba(200, 180, 140, 0.22);
+	box-shadow: 0 2rpx 8rpx rgba(30, 36, 26, 0.06);
+}
+
+.certThumbContainer .certThumbImage {
+	width: 100%;
+	height: 100%;
+	display: block;
+}
+
+.certPreviewHint {
+	font-size: 16rpx;
+	line-height: 1.15;
+	color: rgba(39, 75, 57, 0.4);
+	letter-spacing: 0.01em;
+}
+
+.certPendingHint {
+	flex: 1;
+	display: flex;
+	align-items: center;
+	padding: 12rpx 0;
+}
+
+.certPendingText {
+	font-size: 21rpx;
+	color: rgba(39, 75, 57, 0.5);
+	line-height: 1.5;
+}
+
+/* 旧样式保留但隐藏(兼容其他模块) */
+.certPreviewCompact {
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	margin-top: 24rpx;
+}
+
+.docPlaceholder {
+	margin-top: 16rpx;
+	padding: 20rpx;
+	border-radius: 26rpx;
+	background: linear-gradient(160deg, rgba(244, 237, 224, 0.82), rgba(237, 244, 235, 0.72));
+	border: 1rpx solid rgba(201, 171, 120, 0.22);
+}
+
+.docPlaceholderTitle {
+	display: block;
+	margin-bottom: 12rpx;
+	font-size: 22rpx;
+	font-weight: 650;
+	color: rgba(35, 93, 64, 0.92);
+}
+
+.docPlaceholderText {
+	display: block;
+	font-size: 22rpx;
+	line-height: 1.75;
+	color: rgba(59, 71, 62, 0.82);
+}
+
+.docBlock {
+	margin-top: 14rpx;
+	padding: 18rpx;
+	border-radius: 22rpx;
+	background: rgba(255, 255, 255, 0.46);
+}
+
+.docBlock:first-of-type {
+	margin-top: 4rpx;
+}
+
+.docTitle {
+	display: block;
+	margin-bottom: 10rpx;
+	font-size: 22rpx;
+	font-weight: 620;
+	color: rgba(45, 87, 64, 0.84);
+}
+
+.docText {
+	font-size: 22rpx;
+	line-height: 1.8;
+	color: rgba(64, 75, 67, 0.8);
+}
+
+/* 批次信息主体:连续信息排版,标签-值对应,与商品信息卡风格统一 */
+.batchBody {
+	display: flex;
+	flex-direction: column;
+}
+
+/* 批次信息主体:左右两列布局,左列固定,右列自适应,内容左对齐 */
+.batchBody {
+	display: flex;
+	flex-direction: column;
+}
+
+.batchRow {
+	display: flex;
+	align-items: baseline;
+	padding: 16rpx 0;
+}
+
+.batchRow + .batchRow {
+	border-top: 1rpx solid rgba(39, 75, 57, 0.05);
+}
+
+.batchRowLabel {
+	flex-shrink: 0;
+	width: 162rpx;
+	font-size: 21rpx;
+	font-weight: 460;
+	color: rgba(84, 106, 93, 0.68);
+	letter-spacing: 0.02em;
+	line-height: 1.5;
+}
+
+.batchRowValue {
+	flex: 1;
+	min-width: 0;
+	font-size: 25rpx;
+	font-weight: 580;
+	line-height: 1.4;
+	letter-spacing: 0.01em;
+	color: rgba(27, 41, 33, 0.9);
+}
+
+.cardCredential .certSummary {
+	margin-top: 4rpx;
+}
+
+/* 底部柔和收口渐变 */
+.footerFade {
+	position: relative;
+	height: 1rpx;
+	margin: 0 80rpx;
+	background: linear-gradient(90deg,
+		transparent 0%,
+		rgba(39, 75, 57, 0.15) 30%,
+		rgba(39, 75, 57, 0.2) 50%,
+		rgba(39, 75, 57, 0.15) 70%,
+		transparent 100%
+	);
+}
+
+.footerFade::before {
+	content: '';
+	position: absolute;
+	top: 0;
+	left: 50%;
+	transform: translateX(-50%);
+	width: 60%;
+	height: 80rpx;
+	background: radial-gradient(ellipse at 50% 100%, rgba(39, 75, 57, 0.06), transparent 70%);
+}
+
+/* 轻量页脚 */
+.traceFooter {
+	padding: 36rpx 32rpx 52rpx;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	gap: 14rpx;
+}
+
+.traceFooterHint {
+	font-size: 20rpx;
+	font-weight: 400;
+	color: rgba(88, 100, 92, 0.45);
+	letter-spacing: 0.03em;
+}
+
+.traceFooterPhone {
+	display: flex;
+	align-items: center;
+	gap: 6rpx;
+	padding: 8rpx 16rpx;
+	border-radius: 6rpx;
+	transition: opacity 0.2s ease;
+}
+
+.traceFooterPhone:active {
+	opacity: 0.55;
+}
+
+.traceFooterPhoneIcon {
+	width: 22rpx;
+	height: 22rpx;
+	opacity: 0.55;
+}
+
+.traceFooterPhoneNum {
+	font-size: 22rpx;
+	font-weight: 400;
+	color: rgba(39, 75, 57, 0.6);
+	letter-spacing: 0.04em;
+}
+
+.traceFooterBrand {
+	font-size: 17rpx;
+	font-weight: 400;
+	letter-spacing: 0.1em;
+	color: rgba(88, 100, 92, 0.3);
+	margin-top: 8rpx;
+}
+</style>

+ 3 - 0
static/icons/phone.svg

@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
+  <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/>
+</svg>

TEMPAT SAMPAH
static/logo.png


TEMPAT SAMPAH
static/农场草莓园.png


TEMPAT SAMPAH
static/合格证 1.png


TEMPAT SAMPAH
static/检测报告 1.png


TEMPAT SAMPAH
static/检测报告2.png


TEMPAT SAMPAH
static/检测报告3.png


TEMPAT SAMPAH
static/草莓产品.png


+ 54 - 0
store/index.js

@@ -0,0 +1,54 @@
+// store/index.js (Vue 3)
+import { createStore } from 'vuex'
+import storage from '@/utils/storage'
+
+const store = createStore({
+  state: {
+    isShowToast: false, // 是否在展示Toast中
+    remark: [], // 填写订单备注
+    shareLink: "", // 分享链接
+    verificationKey: "", // 获取key表示验证通过
+    distributionId: "", // 分销员Id
+    hasLogin: false,
+    userInfo: {},
+    uuid: "",
+    token: "",
+    userName: "",
+  },
+
+  mutations: {
+    // 初始化状态(从存储中恢复)
+    initState(state) {
+      state.hasLogin = storage.getHasLogin() || false;
+      state.userInfo = storage.getUserInfo() || {};
+      state.uuid = storage.getUuid() || "";
+      if (state.hasLogin && state.userInfo) {
+        state.userName = state.userInfo.Name || state.userInfo.Nickname || state.userInfo.Username || "匿名用户";
+      }
+    },
+    login(state, userInfo) {
+      state.userInfo = userInfo || {};
+      state.userName =
+      userInfo.Name || userInfo.Nickname || userInfo.Username || "匿名用户";
+      state.hasLogin = true;
+    },
+    logout(state) {
+      state.userName = "";
+      state.hasLogin = false;
+      state.userInfo = {};
+    },
+    // 设置填写订单中备注
+    setRemark(state, remark) {
+      state.remark = remark;
+    },
+  },
+
+  actions: {
+    // 初始化 store(在应用启动后调用)
+    init({ commit }) {
+      commit('initState');
+    },
+  },
+})
+
+export default store

+ 60 - 0
test

@@ -0,0 +1,60 @@
+{
+    "msg": "操作成功",
+    "code": 200,
+    "data": {
+        "createBy": null,
+        "createTime": null,
+        "updateBy": null,
+        "updateTime": null,
+        "remark": null,
+        "id": 1,
+        "batchNo": "cscscs",
+        "productName": "火腿肠",
+        "productSpec": "测试",
+        "productImage": "https://azn.gbdfarm.com/statics/2026/03/31/icon_20260331114659A046.png",
+        "productDesc": "cs",
+        "farmName": "aaa农场",
+        "farmRegion": "aaa地区",
+        "farmImage": "https://azn.gbdfarm.com/statics/2026/03/31/icon_20260331114719A047.png",
+        "farmIntro": "cs",
+        "produceDate": "2026-03-31",
+        "packageDate": "2026-03-31",
+        "status": "1",
+        "createdAt": "2026-03-31",
+        "updatedAt": "2026-03-31",
+        "produceDateStart": null,
+        "produceDateEnd": null,
+        "packageDateStart": null,
+        "packageDateEnd": null,
+        "certificate": {
+            "createBy": null,
+            "createTime": null,
+            "updateBy": null,
+            "updateTime": null,
+            "remark": null,
+            "id": 1,
+            "batchId": 1,
+            "certStatus": "pending",
+            "certFiles": "[{\"url\": \"https://azn.gbdfarm.com/statics/2026/04/01/图片转PDF_20260401113233A059.pdf\", \"name\": \"图片转PDF_20260401113233A059.pdf\"}]",
+            "certNo": "1121",
+            "certIssueDate": "2026-04-01",
+            "createdAt": "2026-04-01"
+        },
+        "reports": [
+            {
+                "createBy": null,
+                "createTime": null,
+                "updateBy": null,
+                "updateTime": null,
+                "remark": null,
+                "id": 3,
+                "batchId": 1,
+                "reportStatus": "pending",
+                "reportFiles": "[{\"url\": \"https://azn.gbdfarm.com/statics/2026/04/01/图片转PDF_20260401110123A057.pdf\"}]",
+                "reportNo": "aaacs",
+                "reportDate": "2026-04-09",
+                "createdAt": "2026-04-01"
+            }
+        ]
+    }
+}

+ 13 - 0
uni.promisify.adaptor.js

@@ -0,0 +1,13 @@
+uni.addInterceptor({
+  returnValue (res) {
+    if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) {
+      return res;
+    }
+    return new Promise((resolve, reject) => {
+      res.then((res) => {
+        if (!res) return resolve(res) 
+        return res[0] ? reject(res[0]) : resolve(res[1])
+      });
+    });
+  },
+});

+ 76 - 0
uni.scss

@@ -0,0 +1,76 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+
+/* 颜色变量 */
+
+/* 行为相关颜色 */
+$uni-color-primary: #007aff;
+$uni-color-success: #4cd964;
+$uni-color-warning: #f0ad4e;
+$uni-color-error: #dd524d;
+
+/* 文字基本颜色 */
+$uni-text-color:#333;//基本色
+$uni-text-color-inverse:#fff;//反色
+$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
+$uni-text-color-placeholder: #808080;
+$uni-text-color-disable:#c0c0c0;
+
+/* 背景颜色 */
+$uni-bg-color:#ffffff;
+$uni-bg-color-grey:#f8f8f8;
+$uni-bg-color-hover:#f1f1f1;//点击状态颜色
+$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color:#c8c7cc;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm:12px;
+$uni-font-size-base:14px;
+$uni-font-size-lg:16px;
+
+/* 图片尺寸 */
+$uni-img-size-sm:20px;
+$uni-img-size-base:26px;
+$uni-img-size-lg:40px;
+
+/* Border Radius */
+$uni-border-radius-sm: 2px;
+$uni-border-radius-base: 3px;
+$uni-border-radius-lg: 6px;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 5px;
+$uni-spacing-row-base: 10px;
+$uni-spacing-row-lg: 15px;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 4px;
+$uni-spacing-col-base: 8px;
+$uni-spacing-col-lg: 12px;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2C405A; // 文章标题颜色
+$uni-font-size-title:20px;
+$uni-color-subtitle: #555555; // 二级标题颜色
+$uni-font-size-subtitle:26px;
+$uni-color-paragraph: #3F536E; // 文章段落颜色
+$uni-font-size-paragraph:15px;

+ 314 - 0
utils/Foundation.js

@@ -0,0 +1,314 @@
+/**
+ * 一些常用的基础方法
+ * whetherNavigate 登录后跳转判断
+ * unixToDate    将unix时间戳转换为指定格式
+ * dateToUnix    将时间转unix时间戳
+ * deepClone     对一个对象进行深拷贝
+ * formatPrice   货币格式化
+ * secrecyMobile 手机号隐私保护
+ * randomString  随机生成指定长度的字符串
+ * validatePhoneNumber 通用手机号校验方法
+ */
+
+/* 
+  通用手机号校验方 
+ */
+export function validatePhoneNumber(phone) {
+    // 定义黑名单
+    const blackList = ['12345678901', '10987654321', '11111111111', '12222222222']; // 示例黑名单
+
+    // 基本格式校验
+    if (!/^1\d{10}$/.test(phone)) {
+        return {
+            valid: false,
+            message: '请输入正确的手机号'
+        };
+    }
+
+    // 检测重复数字
+    if (/^(.)\1+$/.test(phone)) {
+        return {
+            valid: false,
+            message: '手机号格式异常,请重新输入'
+        };
+    }
+
+    // 检测顺序数字
+    if (/^1(0123456789|9876543210)$/.test(phone)) {
+        return {
+            valid: false,
+            message: '手机号格式异常,请重新输入'
+        };
+    }
+
+    // 检测特殊字符(虽然手机号格式已经限制了只能输入数字,但可以额外检查)
+    if (!/^\d+$/.test(phone)) {
+        return {
+            valid: false,
+            message: '手机号中包含非法字符,请重新输入'
+        };
+    }
+
+    // 检测黑名单
+    if (blackList.includes(phone)) {
+        return {
+            valid: false,
+            message: '手机号已被限制,请联系客服'
+        };
+    }
+
+    // 如果通过所有校验
+    return {
+        valid: true,
+        message: '手机号验证通过'
+    };
+}
+/**
+ * 验证银行卡号
+ */
+export function checkBankno(bankno) {
+  var lastNum = bankno.substr(bankno.length - 1, 1); //取出最后一位(与luhm进行比较)
+  var first15Num = bankno.substr(0, bankno.length - 1); //前15或18位
+  var newArr = [];
+
+  for (var i = first15Num.length - 1; i > -1; i--) {
+    //前15或18位倒序存进数组
+    newArr.push(first15Num.substr(i, 1));
+  }
+
+  var arrJiShu = []; //奇数位*2的积 <9
+  var arrJiShu2 = []; //奇数位*2的积 >9
+  var arrOuShu = []; //偶数位数组
+  for (var j = 0; j < newArr.length; j++) {
+    if ((j + 1) % 2 == 1) {
+      //奇数位
+      if (parseInt(newArr[j]) * 2 < 9) arrJiShu.push(parseInt(newArr[j]) * 2);
+      else arrJiShu2.push(parseInt(newArr[j]) * 2);
+    } //偶数位
+    else arrOuShu.push(newArr[j]);
+  }
+
+  var jishu_child1 = []; //奇数位*2 >9 的分割之后的数组个位数
+  var jishu_child2 = []; //奇数位*2 >9 的分割之后的数组十位数
+  for (var h = 0; h < arrJiShu2.length; h++) {
+    jishu_child1.push(parseInt(arrJiShu2[h]) % 10);
+    jishu_child2.push(parseInt(arrJiShu2[h]) / 10);
+  }
+
+  var sumJiShu = 0; //奇数位*2 < 9 的数组之和
+  var sumOuShu = 0; //偶数位数组之和
+  var sumJiShuChild1 = 0; //奇数位*2 >9 的分割之后的数组个位数之和
+  var sumJiShuChild2 = 0; //奇数位*2 >9 的分割之后的数组十位数之和
+  var sumTotal = 0;
+  for (var m = 0; m < arrJiShu.length; m++) {
+    sumJiShu = sumJiShu + parseInt(arrJiShu[m]);
+  }
+  for (var n = 0; n < arrOuShu.length; n++) {
+    sumOuShu = sumOuShu + parseInt(arrOuShu[n]);
+  }
+  for (var p = 0; p < jishu_child1.length; p++) {
+    sumJiShuChild1 = sumJiShuChild1 + parseInt(jishu_child1[p]);
+    sumJiShuChild2 = sumJiShuChild2 + parseInt(jishu_child2[p]);
+  }
+  //计算总和
+  sumTotal =
+    parseInt(sumJiShu) +
+    parseInt(sumOuShu) +
+    parseInt(sumJiShuChild1) +
+    parseInt(sumJiShuChild2);
+  //计算Luhm值
+  var k = parseInt(sumTotal) % 10 == 0 ? 10 : parseInt(sumTotal) % 10;
+  var luhm = 10 - k;
+  if (lastNum == luhm) {
+    return true;
+  } else {
+    return false;
+  }
+}
+
+/**
+ * 登录后跳转判断
+ * 计算出当前router路径
+ * 1.如果跳转的链接为登录页面或跳转的链接为空页面。则会重新跳转到首页
+ * 2.都不满足返回跳转页面
+ * @param type  'default' || 'wx'  //返回地址会做判断默认为default
+ */
+
+export function whetherNavigate(type = "default") {
+  let navigation = getCurrentPages()[getCurrentPages().length - (getCurrentPages().length ) ];
+  if (getCurrentPages().length > 1) {
+    console.log(navigation, getCurrentPages());
+    if (navigation.route == "pages/passport/login") {
+      navigationToBack(type);
+    } else {
+      if (!navigation.route || navigation.route == "undefined") {
+        navigationToBack(type);
+      } else {
+        uni.navigateBack({
+          delta: getCurrentPages().length-1,
+        });
+      }
+    }
+  } else {
+    uni.switchTab({
+      url: "/pages/tabbar/home/index",
+    });
+  }
+}
+
+/**
+ * 将unix时间戳转换为指定格式
+ * @param unix   时间戳【秒】
+ * @param format 转换格式
+ * @returns {*|string}
+ */
+export function unixToDate(unix, format) {
+  if (!unix) return unix;
+  let _format = format || "yyyy-MM-dd hh:mm:ss";
+  const d = new Date(unix);
+  const o = {
+    "M+": d.getMonth() + 1,
+    "d+": d.getDate(),
+    "h+": d.getHours(),
+    "m+": d.getMinutes(),
+    "s+": d.getSeconds(),
+    "q+": Math.floor((d.getMonth() + 3) / 3),
+    S: d.getMilliseconds(),
+  };
+  if (/(y+)/.test(_format))
+    _format = _format.replace(
+      RegExp.$1,
+      (d.getFullYear() + "").substr(4 - RegExp.$1.length)
+    );
+  for (const k in o)
+    if (new RegExp("(" + k + ")").test(_format))
+      _format = _format.replace(
+        RegExp.$1,
+        RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)
+      );
+  return _format;
+}
+
+/**
+ * 将时间转unix时间戳
+ * @param date
+ * @returns {number} 【秒】
+ */
+export function dateToUnix(date) {
+  let newStr = date.replace(/:/g, "-");
+  newStr = newStr.replace(/ /g, "-");
+  const arr = newStr.split("-");
+  const datum = new Date(
+    Date.UTC(
+      arr[0],
+      arr[1] - 1,
+      arr[2],
+      arr[3] - 8 || -8,
+      arr[4] || 0,
+      arr[5] || 0
+    )
+  );
+  return parseInt(datum.getTime() / 1000);
+}
+
+/**
+ * 货币格式化
+ * @param price
+ * @returns {string}
+ */
+export function formatPrice(price) {
+  if (typeof price !== "number") return price;
+  return String(Number(price).toFixed(2)).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
+}
+
+/**
+ * 手机号隐私保护
+ * 隐藏中间四位数字
+ * @param mobile
+ * @returns {*}
+ */
+export function secrecyMobile(mobile) {
+  mobile = String(mobile);
+  if (!/\d{11}/.test(mobile)) {
+    return mobile;
+  }
+  return mobile.replace(/(\d{3})(\d{4})(\d{4})/, "$1****$3");
+}
+
+/**
+ * 随机生成指定长度的字符串
+ * @param length
+ * @returns {string}
+ */
+export function randomString(length = 32) {
+  const chars =
+    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+  const maxPos = chars.length;
+  let _string = "";
+  for (let i = 0; i < length; i++) {
+    _string += chars.charAt(Math.floor(Math.random() * maxPos));
+  }
+  return _string;
+}
+
+/**
+ * 计算传秒数的倒计时【天、时、分、秒】
+ * @param seconds
+ * @returns {{day : *, hours : *, minutes : *, seconds : *}}
+ */
+
+export function countTimeDown(seconds) {
+  const leftTime = (time) => {
+    if (time < 10) time = "0" + time;
+    return time + "";
+  };
+  return {
+    day: leftTime(parseInt(seconds / 60 / 60 / 24, 10)),
+    hours: leftTime(parseInt((seconds / 60 / 60) % 24, 10)),
+    minutes: leftTime(parseInt((seconds / 60) % 60, 10)),
+    seconds: leftTime(parseInt(seconds % 60, 10)),
+  };
+}
+
+function navigationToBack(type) {
+  if (type == "wx") {
+    // console.log(getCurrentPages().length - 3)
+    uni.navigateBack({
+      delta: getCurrentPages().length,
+    });
+  } else {
+    uni.switchTab({
+      url: "/pages/tabbar/home/index",
+    });
+  }
+}
+
+/**
+ * 计算当前时间到第二天0点的倒计时[秒]
+ * @returns {number}
+ */
+export function theNextDayTime() {
+  const nowDate = new Date();
+  const time =
+    new Date(
+      nowDate.getFullYear(),
+      nowDate.getMonth(),
+      nowDate.getDate() + 1,
+      0,
+      0,
+      0
+    ).getTime() - nowDate.getTime();
+  return parseInt(time / 1000);
+}
+export default {
+  unixToDate,
+  dateToUnix,
+  formatPrice,
+  secrecyMobile,
+  randomString,
+  countTimeDown,
+  theNextDayTime,
+  whetherNavigate,
+  checkBankno,
+  validatePhoneNumber,
+};

+ 420 - 0
utils/composables/useDict.js

@@ -0,0 +1,420 @@
+/**
+ * 字典数据加载 Composable (Vue 3 Composition API)
+ * 
+ * 使用方式:
+ * 1. 在组件中导入 import { useDict } from '@/utils/composables/useDict';
+ * 2. 在 setup 中调用 const { dictData, dictLoading, loadDict, getDictLabel, ... } = useDict(['sys_user_sex', 'sys_normal_disable']);
+ * 3. 在模板中直接使用 dictData 对象获取字典项 v-for="item in dictData.sys_user_sex"
+ */
+
+import { ref, reactive, onMounted } from 'vue';
+import { getDictData } from '@/api/services/dict';
+import storage from '@/utils/storage';
+import staticDict from '@/utils/staticDict';
+
+// 全局字典缓存对象,用于存储已加载的字典数据
+const dictCache = {
+  // 缓存的字典数据,格式为 { dictType: [{label, value, ...}, ...] }
+  data: {},
+  // 缓存过期时间,单位为毫秒
+  expireTime: 1000 * 60 * 60, // 1小时
+  // 缓存最后更新时间
+  lastUpdateTime: {},
+  // 正在加载的字典类型,用于防止重复请求
+  loading: {}
+};
+
+/**
+ * 字典数据加载 Composable
+ * @param {Array} initialDictTypes - 初始需要加载的字典类型数组
+ * @param {Object} options - 配置选项
+ * @param {Boolean} options.autoLoad - 是否自动加载,默认为 true
+ * @returns {Object} - 返回字典相关的响应式数据和方法
+ */
+export function useDict(initialDictTypes = [], options = {}) {
+  const { autoLoad = true } = options;
+  
+  // 组件中的字典数据
+  const dictData = reactive({});
+  
+  // 字典加载状态
+  const dictLoading = ref(false);
+  
+  // 定义组件需要加载的字典类型
+  const dictTypeList = ref(initialDictTypes);
+
+  /**
+   * 从缓存中获取字典数据
+   * @param {String} dictType - 字典类型
+   * @returns {Array|null} - 返回字典数据,不存在或已过期则返回null
+   */
+  const getDictFromCache = (dictType) => {
+    // 判断是否有缓存
+    if (!dictCache.data[dictType]) {
+      return null;
+    }
+
+    // 判断缓存是否过期
+    const lastUpdateTime = dictCache.lastUpdateTime[dictType] || 0;
+    const now = Date.now();
+    if (now - lastUpdateTime > dictCache.expireTime) {
+      // 缓存已过期,删除缓存
+      delete dictCache.data[dictType];
+      delete dictCache.lastUpdateTime[dictType];
+      return null;
+    }
+
+    // 返回缓存的字典数据
+    return dictCache.data[dictType];
+  };
+
+  /**
+   * 更新字典缓存
+   * @param {String} dictType - 字典类型
+   * @param {Array} dictList - 字典数据列表
+   */
+  const updateDictCache = (dictType, dictList) => {
+    dictCache.data[dictType] = dictList;
+    dictCache.lastUpdateTime[dictType] = Date.now();
+
+    // 更新本地存储
+    try {
+      // 只存储最后更新时间,具体数据保存在内存中
+      storage.setDict(`dict_time_${dictType}`, dictCache.lastUpdateTime[dictType]);
+    } catch (e) {
+      console.error('更新字典缓存失败:', e);
+    }
+  };
+
+  /**
+   * 等待指定类型的字典加载完成
+   * @param {Array} types - 字典类型数组
+   * @returns {Promise} - 返回等待的Promise对象
+   */
+  const waitForDictLoading = (types) => {
+    return new Promise(resolve => {
+      const checkInterval = setInterval(() => {
+        const stillLoading = types.some(type => dictCache.loading[type]);
+        if (!stillLoading) {
+          clearInterval(checkInterval);
+
+          // 加载完成后,从缓存中获取数据
+          types.forEach(type => {
+            const cachedDict = getDictFromCache(type);
+            if (cachedDict) {
+              dictData[type] = cachedDict;
+            }
+          });
+
+          resolve(dictData);
+        }
+      }, 50);
+    });
+  };
+
+  /**
+   * 从服务器获取字典数据
+   * @param {Array} dictTypes - 字典类型数组
+   * @returns {Promise} - 返回字典获取的Promise对象
+   */
+  const fetchDictData = (dictTypes) => {
+    // 标记这些字典类型正在加载
+    dictTypes.forEach(type => {
+      dictCache.loading[type] = true;
+    });
+
+    // 单个字典类型
+    if (dictTypes.length === 1) {
+      const dictType = dictTypes[0];
+      console.log(`[useDict] Fetching single dictionary: ${dictType}`);
+      return getDictData(dictType).then(res => {
+        if (res.data.code === 200) {
+          let dictList = [];
+          if (dictType === 'mall_product_category') {
+            dictList.push({
+              dictLabel: '推荐',
+              dictValue: '-1'
+            });
+            dictList.push(...res.data.data);
+          } else {
+            dictList = res.data.data;
+          }
+
+          // 更新组件数据和缓存
+          dictData[dictType] = dictList;
+          updateDictCache(dictType, dictList);
+          delete dictCache.loading[dictType];
+
+          return dictList;
+        } else {
+          console.error(`获取字典[${dictType}]数据失败:`, res.data.msg);
+          delete dictCache.loading[dictType];
+          return Promise.reject(res.data.msg);
+        }
+      }).catch(err => {
+        delete dictCache.loading[dictType];
+        throw err;
+      });
+    }
+
+    // 多个字典类型,并发请求
+    console.log(`[useDict] Concurrently fetching ${dictTypes.length} dictionaries: ${dictTypes.join(', ')}`);
+
+    const requests = dictTypes.map(dictType => {
+      return getDictData(dictType).then(res => {
+        if (res.data.code === 200) {
+          let dictList = [];
+          if (dictType === 'mall_product_category') {
+            dictList.push({
+              dictLabel: '推荐',
+              dictValue: '-1'
+            });
+            dictList.push(...res.data.data);
+          } else {
+            dictList = res.data.data;
+          }
+
+          dictData[dictType] = dictList;
+          updateDictCache(dictType, dictList);
+          delete dictCache.loading[dictType];
+
+          return {
+            dictType,
+            dictList,
+            success: true
+          };
+        } else {
+          console.error(`获取字典[${dictType}]数据失败:`, res.data.msg);
+          delete dictCache.loading[dictType];
+          return {
+            dictType,
+            dictList: [],
+            success: false,
+            msg: res.data.msg
+          };
+        }
+      }).catch(err => {
+        console.error(`获取字典[${dictType}]异常:`, err);
+        delete dictCache.loading[dictType];
+        return {
+          dictType,
+          dictList: [],
+          success: false,
+          msg: err
+        };
+      });
+    });
+
+    // 等所有请求完成
+    return Promise.allSettled(requests).then(results => {
+      const dictMap = {};
+      const failed = [];
+
+      results.forEach(r => {
+        if (r.status === 'fulfilled') {
+          const { dictType, dictList, success, msg } = r.value;
+          if (success) {
+            dictMap[dictType] = dictList;
+          } else {
+            failed.push({ dictType, msg });
+          }
+        } else {
+          console.error(`字典请求失败:`, r.reason);
+        }
+      });
+
+      console.log(`[useDict] Loaded ${Object.keys(dictMap).length} dictionaries, failed ${failed.length}`);
+
+      if (failed.length > 0) {
+        console.warn('以下字典加载失败:', failed);
+      }
+
+      return dictMap;
+    });
+  };
+
+  /**
+   * 加载字典数据
+   * @param {Array} dictTypes - 字典类型数组,如果不传则使用初始化时的dictTypeList
+   * @returns {Promise} - 返回字典加载的Promise对象
+   */
+  const loadDict = (dictTypes) => {
+    const types = dictTypes || dictTypeList.value;
+    if (!types || types.length === 0) {
+      return Promise.resolve({});
+    }
+
+    // 标记加载中
+    dictLoading.value = true;
+
+    // 需要从服务器获取的字典类型
+    const needFetch = [];
+
+    // 检查是否有静态字典或缓存
+    types.forEach(type => {
+      // 先检查是否有静态字典
+      if (staticDict[type]) {
+        // 使用静态字典数据
+        console.log(`[useDict] Using static dictionary for ${type}`);
+        dictData[type] = staticDict[type];
+      } else {
+        // 检查缓存
+        const cachedDict = getDictFromCache(type);
+        if (cachedDict) {
+          // 已有缓存,直接使用
+          console.log(`[useDict] Using cached dictionary for ${type}`);
+          dictData[type] = cachedDict;
+        } else if (!dictCache.loading[type]) {
+          // 需要从服务器获取,并且当前没有其他组件正在加载
+          console.log(`[useDict] Need to fetch dictionary ${type} from server`);
+          needFetch.push(type);
+        } else {
+          console.log(`[useDict] Dictionary ${type} is already being loaded by another component, waiting...`);
+        }
+      }
+    });
+
+    // 如果所有字典都已缓存或使用静态数据,直接返回
+    if (needFetch.length === 0) {
+      dictLoading.value = false;
+
+      // 检查是否有正在加载的字典,如果有,等待它们完成
+      const loadingTypes = types.filter(type => dictCache.loading[type]);
+      if (loadingTypes.length > 0) {
+        return waitForDictLoading(loadingTypes);
+      }
+
+      return Promise.resolve(dictData);
+    }
+
+    // 从服务器获取字典数据
+    return fetchDictData(needFetch).then(res => {
+      dictLoading.value = false;
+      console.log("dictData", dictData);
+      return dictData;
+    }).catch(err => {
+      dictLoading.value = false;
+      console.error('加载字典数据失败:', err);
+      return Promise.reject(err);
+    });
+  };
+
+  /**
+   * 清除字典缓存
+   * @param {String} dictType - 字典类型,不传则清除所有缓存
+   */
+  const clearDictCache = (dictType) => {
+    if (dictType) {
+      delete dictCache.data[dictType];
+      delete dictCache.lastUpdateTime[dictType];
+      storage.removeDict(`dict_time_${dictType}`);
+    } else {
+      dictCache.data = {};
+      dictCache.lastUpdateTime = {};
+      // 清除所有字典相关的本地存储
+      // TODO: 需要根据平台使用不同的方式获取所有存储的key
+      // 原因: uni-app 没有直接获取所有key的API,需要手动管理字典key列表
+      // 推荐: 维护一个字典key列表,在添加字典时记录key,清除时遍历列表删除
+    }
+  };
+
+  /**
+   * 根据字典值获取对应的字典标签
+   * @param {String} dictType - 字典类型
+   * @param {String|Number} value - 字典值
+   * @param {String} defaultLabel - 默认标签
+   * @returns {String} - 字典标签
+   */
+  const getDictLabel = (dictType, value, defaultLabel = '') => {
+    // 首先检查组件数据
+    const dictList = dictData[dictType];
+    if (dictList) {
+      const item = dictList.find(dict => dict.dictValue === value);
+      if (item) return item.dictLabel;
+    }
+
+    // 都没找到,返回默认值
+    return defaultLabel;
+  };
+
+  /**
+   * 根据字典标签获取对应的字典值
+   * @param {String} dictType - 字典类型
+   * @param {String} label - 字典标签
+   * @param {String|Number} defaultValue - 默认值
+   * @returns {String|Number} - 字典值
+   */
+  const getDictValue = (dictType, label, defaultValue = '') => {
+    // 首先检查组件数据
+    const dictList = dictData[dictType];
+    if (dictList) {
+      const item = dictList.find(dict => dict.label === label);
+      if (item) return item.value;
+    }
+
+    // 再检查静态字典
+    const staticDictList = staticDict[dictType];
+    if (staticDictList) {
+      const item = staticDictList.find(dict => dict.label === label);
+      if (item) return item.value;
+    }
+
+    // 都没找到,返回默认值
+    return defaultValue;
+  };
+
+  /**
+   * 获取字典列表
+   * @param {String} dictType - 字典类型
+   * @returns {Array} - 字典列表
+   */
+  const getDictList = (dictType) => {
+    // 首先检查组件数据
+    const dictList = dictData[dictType];
+    if (dictList) return dictList;
+
+    // 再检查静态字典
+    return staticDict[dictType] || [];
+  };
+
+  /**
+   * 获取字典类型对应的样式类
+   * @param {String} dictType - 字典类型
+   * @param {String|Number} value - 字典值
+   * @param {String} defaultClass - 默认样式类
+   * @returns {String} - 字典项的样式类
+   */
+  const getDictClass = (dictType, value, defaultClass = '') => {
+    // 首先检查组件数据
+    const dictList = dictData[dictType];
+    if (dictList) {
+      const item = dictList.find(dict => dict.dictValue === value);
+      if (item && item.listClass) return item.listClass;
+    }
+
+    // 都没找到,返回默认值
+    return defaultClass;
+  };
+
+  // 自动加载字典
+  if (autoLoad && initialDictTypes.length > 0) {
+    onMounted(() => {
+      console.log(`[useDict] Auto-loading dictionaries: ${initialDictTypes.join(', ')}`);
+      loadDict();
+    });
+  }
+
+  return {
+    dictData,
+    dictLoading,
+    dictTypeList,
+    loadDict,
+    clearDictCache,
+    getDictLabel,
+    getDictValue,
+    getDictList,
+    getDictClass
+  };
+}
+
+export default useDict;

+ 130 - 0
utils/coordinateUtils.js

@@ -0,0 +1,130 @@
+/**
+ * 坐标转换工具类
+ * 将高德地图坐标(GCJ-02)转换为WGS84坐标
+ */
+
+// 坐标转换常量
+const PI = Math.PI
+const A = 6378245.0 // WGS84椭球长半轴
+const EE = 0.00669342162296594323 // WGS84椭球扁率
+
+/**
+ * 判断坐标是否在中国境内
+ * @param {number} lng 经度
+ * @param {number} lat 纬度
+ * @returns {boolean} 是否在中国境内
+ */
+function isInChina(lng, lat) {
+  return lng >= 73.66 && lng <= 135.05 && lat >= 3.86 && lat <= 53.55
+}
+
+/**
+ * 将GCJ-02坐标转换为WGS84坐标
+ * @param {number} gcjLng GCJ-02经度
+ * @param {number} gcjLat GCJ-02纬度
+ * @returns {Object} WGS84坐标 {lng, lat}
+ */
+function gcj02ToWgs84(gcjLng, gcjLat) {
+  if (!isInChina(gcjLng, gcjLat)) {
+    return {
+      lng: gcjLng,
+      lat: gcjLat
+    }
+  }
+
+  let dLat = transformLat(gcjLng - 105.0, gcjLat - 35.0)
+  let dLng = transformLng(gcjLng - 105.0, gcjLat - 35.0)
+
+  const radLat = gcjLat / 180.0 * PI
+  let magic = Math.sin(radLat)
+  magic = 1 - EE * magic * magic
+  const sqrtMagic = Math.sqrt(magic)
+
+  dLat = (dLat * 180.0) / ((A * (1 - EE)) / (magic * sqrtMagic) * PI)
+  dLng = (dLng * 180.0) / (A / sqrtMagic * Math.cos(radLat) * PI)
+
+  const wgsLat = gcjLat - dLat
+  const wgsLng = gcjLng - dLng
+
+  return {
+    lng: wgsLng,
+    lat: wgsLat
+  }
+}
+
+/**
+ * 纬度转换函数
+ * @param {number} x
+ * @param {number} y
+ * @returns {number}
+ */
+function transformLat(x, y) {
+  let ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x))
+  ret += (20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0
+  ret += (20.0 * Math.sin(y * PI) + 40.0 * Math.sin(y / 3.0 * PI)) * 2.0 / 3.0
+  ret += (160.0 * Math.sin(y / 12.0 * PI) + 320 * Math.sin(y * PI / 30.0)) * 2.0 / 3.0
+  return ret
+}
+
+/**
+ * 经度转换函数
+ * @param {number} x
+ * @param {number} y
+ * @returns {number}
+ */
+function transformLng(x, y) {
+  let ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x))
+  ret += (20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0
+  ret += (20.0 * Math.sin(x * PI) + 40.0 * Math.sin(x / 3.0 * PI)) * 2.0 / 3.0
+  ret += (150.0 * Math.sin(x / 12.0 * PI) + 300.0 * Math.sin(x / 30.0 * PI)) * 2.0 / 3.0
+  return ret
+}
+
+/**
+ * 转换坐标点数组
+ * @param {Array} points 坐标点数组,每个点包含lng和lat属性
+ * @returns {Array} 转换后的坐标点数组
+ */
+function convertPointsToWgs84(points) {
+  if (!Array.isArray(points)) {
+    return []
+  }
+
+  return points.map(point => {
+    if (!point || typeof point.lng !== 'number' || typeof point.lat !== 'number') {
+      return point // 如果点数据不完整,返回原数据
+    }
+
+    const converted = gcj02ToWgs84(point.lng, point.lat)
+    return {
+      ...point,
+      lng: converted.lng,
+      lat: converted.lat
+    }
+  })
+}
+
+/**
+ * 转换单个坐标点
+ * @param {Object} point 坐标点对象 {lng, lat, ...}
+ * @returns {Object} 转换后的坐标点对象
+ */
+function convertPointToWgs84(point) {
+  if (!point || typeof point.lng !== 'number' || typeof point.lat !== 'number') {
+    return point
+  }
+
+  const converted = gcj02ToWgs84(point.lng, point.lat)
+  return {
+    ...point,
+    lng: converted.lng,
+    lat: converted.lat
+  }
+}
+
+export default {
+  gcj02ToWgs84,
+  convertPointsToWgs84,
+  convertPointToWgs84,
+  isInChina
+}

+ 3725 - 0
utils/data.json

@@ -0,0 +1,3725 @@
+[{ "code": "110000", "name": "北京市", "pinyin": "beijingshi", "zip_code": "100000", "type": 0, "first_letter": "B" },
+  { "code": "110100", "name": "北京市", "pinyin": "beijingshi", "zip_code": "100000", "parent_code": "110000", "type": 1, "first_letter": "B" },
+  { "code": "110101", "name": "东城区", "pinyin": "dongchengqu", "zip_code": "100010", "parent_code": "110100", "type": 2, "first_letter": "D" },
+  { "code": "110102", "name": "西城区", "pinyin": "xichengqu", "zip_code": "100032", "parent_code": "110100", "type": 2, "first_letter": "X" },
+  { "code": "110105", "name": "朝阳区", "pinyin": "chaoyangqu", "zip_code": "100020", "parent_code": "110100", "type": 2, "first_letter": "C" },
+  { "code": "110106", "name": "丰台区", "pinyin": "fengtaiqu", "zip_code": "100071", "parent_code": "110100", "type": 2, "first_letter": "F" },
+  { "code": "110107", "name": "石景山区", "pinyin": "shijingshanqu", "zip_code": "100043", "parent_code": "110100", "type": 2, "first_letter": "S" },
+  { "code": "110108", "name": "海淀区", "pinyin": "haidianqu", "zip_code": "100089", "parent_code": "110100", "type": 2, "first_letter": "H" },
+  { "code": "110109", "name": "门头沟区", "pinyin": "mentougouqu", "zip_code": "102300", "parent_code": "110100", "type": 2, "first_letter": "M" },
+  { "code": "110111", "name": "房山区", "pinyin": "fangshanqu", "zip_code": "102488", "parent_code": "110100", "type": 2, "first_letter": "F" },
+  { "code": "110112", "name": "通州区", "pinyin": "tongzhouqu", "zip_code": "101100", "parent_code": "110100", "type": 2, "first_letter": "T" },
+  { "code": "110113", "name": "顺义区", "pinyin": "shunyiqu", "zip_code": "101300", "parent_code": "110100", "type": 2, "first_letter": "S" },
+  { "code": "110114", "name": "昌平区", "pinyin": "changpingqu", "zip_code": "102200", "parent_code": "110100", "type": 2, "first_letter": "C" },
+  { "code": "110115", "name": "大兴区", "pinyin": "daxingqu", "zip_code": "102600", "parent_code": "110100", "type": 2, "first_letter": "D" },
+  { "code": "110116", "name": "怀柔区", "pinyin": "huairouqu", "zip_code": "101400", "parent_code": "110100", "type": 2, "first_letter": "H" },
+  { "code": "110117", "name": "平谷区", "pinyin": "pingguqu", "zip_code": "101200", "parent_code": "110100", "type": 2, "first_letter": "P" },
+  { "code": "110118", "name": "密云区", "pinyin": "miyunqu", "zip_code": "101500", "parent_code": "110100", "type": 2, "first_letter": "M" },
+  { "code": "110119", "name": "延庆区", "pinyin": "yanqingqu", "zip_code": "102100", "parent_code": "110100", "type": 2, "first_letter": "Y" },
+  { "code": "120000", "name": "天津市", "pinyin": "tianjinshi", "zip_code": "300000", "type": 0, "first_letter": "T" },
+  { "code": "120100", "name": "天津市", "pinyin": "tianjinshi", "zip_code": "300000", "parent_code": "120000", "type": 1, "first_letter": "T" },
+  { "code": "120101", "name": "和平区", "pinyin": "hepingqu", "zip_code": "300041", "parent_code": "120100", "type": 2, "first_letter": "H" },
+  { "code": "120102", "name": "河东区", "pinyin": "hedongqu", "zip_code": "300171", "parent_code": "120100", "type": 2, "first_letter": "H" },
+  { "code": "120103", "name": "河西区", "pinyin": "hexiqu", "zip_code": "572000", "parent_code": "120100", "type": 2, "first_letter": "H" },
+  { "code": "120104", "name": "南开区", "pinyin": "nankaiqu", "zip_code": "300100", "parent_code": "120100", "type": 2, "first_letter": "N" },
+  { "code": "120105", "name": "河北区", "pinyin": "hebeiqu", "zip_code": "300143", "parent_code": "120100", "type": 2, "first_letter": "H" },
+  { "code": "120106", "name": "红桥区", "pinyin": "hongqiaoqu", "zip_code": "300131", "parent_code": "120100", "type": 2, "first_letter": "H" },
+  { "code": "120110", "name": "东丽区", "pinyin": "dongliqu", "zip_code": "300300", "parent_code": "120100", "type": 2, "first_letter": "D" },
+  { "code": "120111", "name": "西青区", "pinyin": "xiqingqu", "zip_code": "300380", "parent_code": "120100", "type": 2, "first_letter": "X" },
+  { "code": "120112", "name": "津南区", "pinyin": "jinnanqu", "zip_code": "300350", "parent_code": "120100", "type": 2, "first_letter": "J" },
+  { "code": "120113", "name": "北辰区", "pinyin": "beichenqu", "zip_code": "300400", "parent_code": "120100", "type": 2, "first_letter": "B" },
+  { "code": "120114", "name": "武清区", "pinyin": "wuqingqu", "zip_code": "301700", "parent_code": "120100", "type": 2, "first_letter": "W" },
+  { "code": "120115", "name": "宝坻区", "pinyin": "baodiqu", "zip_code": "301800", "parent_code": "120100", "type": 2, "first_letter": "B" },
+  { "code": "120116", "name": "滨海新区", "pinyin": "binhaixinqu", "zip_code": "300457", "parent_code": "120100", "type": 2, "first_letter": "B" },
+  { "code": "120117", "name": "宁河区", "pinyin": "ninghequ", "zip_code": "300000", "parent_code": "120100", "type": 2, "first_letter": "N" },
+  { "code": "120118", "name": "静海区", "pinyin": "jinghaiqu", "zip_code": "301600", "parent_code": "120100", "type": 2, "first_letter": "J" },
+  { "code": "120119", "name": "蓟州区", "pinyin": "jizhouqu", "zip_code": "301900", "parent_code": "120100", "type": 2, "first_letter": "J" },
+  { "code": "130000", "name": "河北省", "pinyin": "hebeisheng", "zip_code": "0", "type": 0, "first_letter": "H" },
+  { "code": "130100", "name": "石家庄市", "pinyin": "shijiazhuangshi", "zip_code": "050000", "parent_code": "130000", "type": 1, "first_letter": "S" },
+  { "code": "130102", "name": "长安区", "pinyin": "changanqu", "zip_code": "050011", "parent_code": "130100", "type": 2, "first_letter": "C" },
+  { "code": "130104", "name": "桥西区", "pinyin": "qiaoxiqu", "zip_code": "050051", "parent_code": "130100", "type": 2, "first_letter": "Q" },
+  { "code": "130105", "name": "新华区", "pinyin": "xinhuaqu", "zip_code": "050051", "parent_code": "130100", "type": 2, "first_letter": "X" },
+  { "code": "130107", "name": "井陉矿区", "pinyin": "jingxingkuangqu", "zip_code": "050100", "parent_code": "130100", "type": 2, "first_letter": "J" },
+  { "code": "130108", "name": "裕华区", "pinyin": "yuhuaqu", "zip_code": "050081", "parent_code": "130100", "type": 2, "first_letter": "Y" },
+  { "code": "130109", "name": "藁城区", "pinyin": "gaochengqu", "zip_code": "052160", "parent_code": "130100", "type": 2, "first_letter": "G" },
+  { "code": "130110", "name": "鹿泉区", "pinyin": "luquanqu", "zip_code": "050200", "parent_code": "130100", "type": 2, "first_letter": "L" },
+  { "code": "130111", "name": "栾城区", "pinyin": "luanchengqu", "zip_code": "051430", "parent_code": "130100", "type": 2, "first_letter": "L" },
+  { "code": "130121", "name": "井陉县", "pinyin": "jingxingxian", "zip_code": "050000", "parent_code": "130100", "type": 2, "first_letter": "J" },
+  { "code": "130123", "name": "正定县", "pinyin": "zhengdingxian", "zip_code": "050800", "parent_code": "130100", "type": 2, "first_letter": "Z" },
+  { "code": "130125", "name": "行唐县", "pinyin": "xingtangxian", "zip_code": "050600", "parent_code": "130100", "type": 2, "first_letter": "X" },
+  { "code": "130126", "name": "灵寿县", "pinyin": "lingshouxian", "zip_code": "050500", "parent_code": "130100", "type": 2, "first_letter": "L" },
+  { "code": "130127", "name": "高邑县", "pinyin": "gaoyixian", "zip_code": "051330", "parent_code": "130100", "type": 2, "first_letter": "G" },
+  { "code": "130128", "name": "深泽县", "pinyin": "shenzexian", "zip_code": "052560", "parent_code": "130100", "type": 2, "first_letter": "S" },
+  { "code": "130129", "name": "赞皇县", "pinyin": "zanhuangxian", "zip_code": "051230", "parent_code": "130100", "type": 2, "first_letter": "Z" },
+  { "code": "130130", "name": "无极县", "pinyin": "wujixian", "zip_code": "052400", "parent_code": "130100", "type": 2, "first_letter": "W" },
+  { "code": "130131", "name": "平山县", "pinyin": "pingshanxian", "zip_code": "050400", "parent_code": "130100", "type": 2, "first_letter": "P" },
+  { "code": "130132", "name": "元氏县", "pinyin": "yuanshixian", "zip_code": "051130", "parent_code": "130100", "type": 2, "first_letter": "Y" },
+  { "code": "130133", "name": "赵县", "pinyin": "zhaoxian", "zip_code": "051530", "parent_code": "130100", "type": 2, "first_letter": "Z" },
+  { "code": "130181", "name": "辛集市", "pinyin": "xinjishi", "zip_code": "053800", "parent_code": "130100", "type": 2, "first_letter": "X" },
+  { "code": "130183", "name": "晋州市", "pinyin": "jinzhoushi", "zip_code": "052200", "parent_code": "130100", "type": 2, "first_letter": "J" },
+  { "code": "130184", "name": "新乐市", "pinyin": "xinleshi", "zip_code": "050700", "parent_code": "130100", "type": 2, "first_letter": "X" },
+  { "code": "130200", "name": "唐山市", "pinyin": "tangshanshi", "zip_code": "063000", "parent_code": "130000", "type": 1, "first_letter": "T" },
+  { "code": "130202", "name": "路南区", "pinyin": "lunanqu", "zip_code": "063017", "parent_code": "130200", "type": 2, "first_letter": "L" },
+  { "code": "130203", "name": "路北区", "pinyin": "lubeiqu", "zip_code": "063015", "parent_code": "130200", "type": 2, "first_letter": "L" },
+  { "code": "130204", "name": "古冶区", "pinyin": "guyequ", "zip_code": "063104", "parent_code": "130200", "type": 2, "first_letter": "G" },
+  { "code": "130205", "name": "开平区", "pinyin": "kaipingqu", "zip_code": "063021", "parent_code": "130200", "type": 2, "first_letter": "K" },
+  { "code": "130207", "name": "丰南区", "pinyin": "fengnanqu", "zip_code": "063300", "parent_code": "130200", "type": 2, "first_letter": "F" },
+  { "code": "130208", "name": "丰润区", "pinyin": "fengrunqu", "zip_code": "064000", "parent_code": "130200", "type": 2, "first_letter": "F" },
+  { "code": "130209", "name": "曹妃甸区", "pinyin": "caofeidianqu", "zip_code": "064000", "parent_code": "130200", "type": 2, "first_letter": "C" },
+  { "code": "130223", "name": "滦县", "pinyin": "luanxian", "zip_code": "063700", "parent_code": "130200", "type": 2, "first_letter": "L" },
+  { "code": "130224", "name": "滦南县", "pinyin": "luannanxian", "zip_code": "063500", "parent_code": "130200", "type": 2, "first_letter": "L" },
+  { "code": "130225", "name": "乐亭县", "pinyin": "letingxian", "zip_code": "063600", "parent_code": "130200", "type": 2, "first_letter": "L" },
+  { "code": "130227", "name": "迁西县", "pinyin": "qianxixian", "zip_code": "064300", "parent_code": "130200", "type": 2, "first_letter": "Q" },
+  { "code": "130229", "name": "玉田县", "pinyin": "yutianxian", "zip_code": "064100", "parent_code": "130200", "type": 2, "first_letter": "Y" },
+  { "code": "130281", "name": "遵化市", "pinyin": "zunhuashi", "zip_code": "064200", "parent_code": "130200", "type": 2, "first_letter": "Z" },
+  { "code": "130283", "name": "迁安市", "pinyin": "qiananshi", "zip_code": "064400", "parent_code": "130200", "type": 2, "first_letter": "Q" },
+  { "code": "130300", "name": "秦皇岛市", "pinyin": "qinhuangdaoshi", "zip_code": "066000", "parent_code": "130000", "type": 1, "first_letter": "Q" },
+  { "code": "130302", "name": "海港区", "pinyin": "haigangqu", "zip_code": "066000", "parent_code": "130300", "type": 2, "first_letter": "H" },
+  { "code": "130303", "name": "山海关区", "pinyin": "shanhaiguanqu", "zip_code": "066200", "parent_code": "130300", "type": 2, "first_letter": "S" },
+  { "code": "130304", "name": "北戴河区", "pinyin": "beidaihequ", "zip_code": "066100", "parent_code": "130300", "type": 2, "first_letter": "B" },
+  { "code": "130306", "name": "抚宁区", "pinyin": "funingqu", "zip_code": "066300", "parent_code": "130300", "type": 2, "first_letter": "F" },
+  { "code": "130321", "name": "青龙满族自治县", "pinyin": "qinglongmanzuzizhixian", "zip_code": "066500", "parent_code": "130300", "type": 2, "first_letter": "Q" },
+  { "code": "130322", "name": "昌黎县", "pinyin": "changlixian", "zip_code": "066600", "parent_code": "130300", "type": 2, "first_letter": "C" },
+  { "code": "130324", "name": "卢龙县", "pinyin": "lulongxian", "zip_code": "066400", "parent_code": "130300", "type": 2, "first_letter": "L" },
+  { "code": "130400", "name": "邯郸市", "pinyin": "handanshi", "zip_code": "056000", "parent_code": "130000", "type": 1, "first_letter": "H" },
+  { "code": "130402", "name": "邯山区", "pinyin": "hanshanqu", "zip_code": "056001", "parent_code": "130400", "type": 2, "first_letter": "H" },
+  { "code": "130403", "name": "丛台区", "pinyin": "congtaiqu", "zip_code": "056004", "parent_code": "130400", "type": 2, "first_letter": "C" },
+  { "code": "130404", "name": "复兴区", "pinyin": "fuxingqu", "zip_code": "056003", "parent_code": "130400", "type": 2, "first_letter": "F" },
+  { "code": "130406", "name": "峰峰矿区", "pinyin": "fengfengkuangqu", "zip_code": "056200", "parent_code": "130400", "type": 2, "first_letter": "F" },
+  { "code": "130407", "name": "肥乡区", "pinyin": "feixiangqu", "zip_code": "057550", "parent_code": "130400", "type": 2, "first_letter": "F" },
+  { "code": "130408", "name": "永年区", "pinyin": "yongnianqu", "zip_code": "057151", "parent_code": "130400", "type": 2, "first_letter": "Y" },
+  { "code": "130423", "name": "临漳县", "pinyin": "linzhangxian", "zip_code": "056600", "parent_code": "130400", "type": 2, "first_letter": "L" },
+  { "code": "130424", "name": "成安县", "pinyin": "chenganxian", "zip_code": "056700", "parent_code": "130400", "type": 2, "first_letter": "C" },
+  { "code": "130425", "name": "大名县", "pinyin": "damingxian", "zip_code": "056900", "parent_code": "130400", "type": 2, "first_letter": "D" },
+  { "code": "130426", "name": "涉县", "pinyin": "shexian", "zip_code": "056400", "parent_code": "130400", "type": 2, "first_letter": "S" },
+  { "code": "130427", "name": "磁县", "pinyin": "cixian", "zip_code": "056500", "parent_code": "130400", "type": 2, "first_letter": "C" },
+  { "code": "130430", "name": "邱县", "pinyin": "qiuxian", "zip_code": "057450", "parent_code": "130400", "type": 2, "first_letter": "Q" },
+  { "code": "130431", "name": "鸡泽县", "pinyin": "jizexian", "zip_code": "057350", "parent_code": "130400", "type": 2, "first_letter": "J" },
+  { "code": "130432", "name": "广平县", "pinyin": "guangpingxian", "zip_code": "057650", "parent_code": "130400", "type": 2, "first_letter": "G" },
+  { "code": "130433", "name": "馆陶县", "pinyin": "guantaoxian", "zip_code": "057750", "parent_code": "130400", "type": 2, "first_letter": "G" },
+  { "code": "130434", "name": "魏县", "pinyin": "weixian", "zip_code": "056800", "parent_code": "130400", "type": 2, "first_letter": "W" },
+  { "code": "130435", "name": "曲周县", "pinyin": "quzhouxian", "zip_code": "057250", "parent_code": "130400", "type": 2, "first_letter": "Q" },
+  { "code": "130481", "name": "武安市", "pinyin": "wuanshi", "zip_code": "056300", "parent_code": "130400", "type": 2, "first_letter": "W" },
+  { "code": "130500", "name": "邢台市", "pinyin": "xingtaishi", "zip_code": "054000", "parent_code": "130000", "type": 1, "first_letter": "X" },
+  { "code": "130502", "name": "桥东区", "pinyin": "qiaodongqu", "zip_code": "054001", "parent_code": "130500", "type": 2, "first_letter": "Q" },
+  { "code": "130503", "name": "桥西区", "pinyin": "qiaoxiqu", "zip_code": "054000", "parent_code": "130500", "type": 2, "first_letter": "Q" },
+  { "code": "130521", "name": "邢台县", "pinyin": "xingtaixian", "zip_code": "054001", "parent_code": "130500", "type": 2, "first_letter": "X" },
+  { "code": "130522", "name": "临城县", "pinyin": "linchengxian", "zip_code": "054300", "parent_code": "130500", "type": 2, "first_letter": "L" },
+  { "code": "130523", "name": "内丘县", "pinyin": "neiqiuxian", "zip_code": "054200", "parent_code": "130500", "type": 2, "first_letter": "N" },
+  { "code": "130524", "name": "柏乡县", "pinyin": "baixiangxian", "zip_code": "055450", "parent_code": "130500", "type": 2, "first_letter": "B" },
+  { "code": "130525", "name": "隆尧县", "pinyin": "longyaoxian", "zip_code": "055350", "parent_code": "130500", "type": 2, "first_letter": "L" },
+  { "code": "130526", "name": "任县", "pinyin": "renxian", "zip_code": "055150", "parent_code": "130500", "type": 2, "first_letter": "R" },
+  { "code": "130527", "name": "南和县", "pinyin": "nanhexian", "zip_code": "054400", "parent_code": "130500", "type": 2, "first_letter": "N" },
+  { "code": "130528", "name": "宁晋县", "pinyin": "ningjinxian", "zip_code": "055550", "parent_code": "130500", "type": 2, "first_letter": "N" },
+  { "code": "130529", "name": "巨鹿县", "pinyin": "juluxian", "zip_code": "055250", "parent_code": "130500", "type": 2, "first_letter": "J" },
+  { "code": "130530", "name": "新河县", "pinyin": "xinhexian", "zip_code": "051730", "parent_code": "130500", "type": 2, "first_letter": "X" },
+  { "code": "130531", "name": "广宗县", "pinyin": "guangzongxian", "zip_code": "054600", "parent_code": "130500", "type": 2, "first_letter": "G" },
+  { "code": "130532", "name": "平乡县", "pinyin": "pingxiangxian", "zip_code": "054500", "parent_code": "130500", "type": 2, "first_letter": "P" },
+  { "code": "130533", "name": "威县", "pinyin": "weixian", "zip_code": "054700", "parent_code": "130500", "type": 2, "first_letter": "W" },
+  { "code": "130534", "name": "清河县", "pinyin": "qinghexian", "zip_code": "054800", "parent_code": "130500", "type": 2, "first_letter": "Q" },
+  { "code": "130535", "name": "临西县", "pinyin": "linxixian", "zip_code": "054900", "parent_code": "130500", "type": 2, "first_letter": "L" },
+  { "code": "130581", "name": "南宫市", "pinyin": "nangongshi", "zip_code": "055750", "parent_code": "130500", "type": 2, "first_letter": "N" },
+  { "code": "130582", "name": "沙河市", "pinyin": "shaheshi", "zip_code": "054100", "parent_code": "130500", "type": 2, "first_letter": "S" },
+  { "code": "130600", "name": "保定市", "pinyin": "baodingshi", "zip_code": "071000", "parent_code": "130000", "type": 1, "first_letter": "B" },
+  { "code": "130602", "name": "竞秀区", "pinyin": "jingxiuqu", "zip_code": "071052", "parent_code": "130600", "type": 2, "first_letter": "J" },
+  { "code": "130606", "name": "莲池区", "pinyin": "lianchiqu", "zip_code": "071000", "parent_code": "130600", "type": 2, "first_letter": "L" },
+  { "code": "130607", "name": "满城区", "pinyin": "manchengqu", "zip_code": "071000", "parent_code": "130600", "type": 2, "first_letter": "M" },
+  { "code": "130608", "name": "清苑区", "pinyin": "qingyuanqu", "zip_code": "072150", "parent_code": "130600", "type": 2, "first_letter": "Q" },
+  { "code": "130609", "name": "徐水区", "pinyin": "xushuiqu", "zip_code": "071100", "parent_code": "130600", "type": 2, "first_letter": "X" },
+  { "code": "130623", "name": "涞水县", "pinyin": "laishuixian", "zip_code": "074100", "parent_code": "130600", "type": 2, "first_letter": "L" },
+  { "code": "130624", "name": "阜平县", "pinyin": "fupingxian", "zip_code": "073200", "parent_code": "130600", "type": 2, "first_letter": "F" },
+  { "code": "130626", "name": "定兴县", "pinyin": "dingxingxian", "zip_code": "072650", "parent_code": "130600", "type": 2, "first_letter": "D" },
+  { "code": "130627", "name": "唐县", "pinyin": "tangxian", "zip_code": "072350", "parent_code": "130600", "type": 2, "first_letter": "T" },
+  { "code": "130628", "name": "高阳县", "pinyin": "gaoyangxian", "zip_code": "071500", "parent_code": "130600", "type": 2, "first_letter": "G" },
+  { "code": "130629", "name": "容城县", "pinyin": "rongchengxian", "zip_code": "071700", "parent_code": "130600", "type": 2, "first_letter": "R" },
+  { "code": "130630", "name": "涞源县", "pinyin": "laiyuanxian", "zip_code": "074300", "parent_code": "130600", "type": 2, "first_letter": "L" },
+  { "code": "130631", "name": "望都县", "pinyin": "wangduxian", "zip_code": "072450", "parent_code": "130600", "type": 2, "first_letter": "W" },
+  { "code": "130632", "name": "安新县", "pinyin": "anxinxian", "zip_code": "071600", "parent_code": "130600", "type": 2, "first_letter": "A" },
+  { "code": "130633", "name": "易县", "pinyin": "yixian", "zip_code": "074200", "parent_code": "130600", "type": 2, "first_letter": "Y" },
+  { "code": "130634", "name": "曲阳县", "pinyin": "quyangxian", "zip_code": "073100", "parent_code": "130600", "type": 2, "first_letter": "Q" },
+  { "code": "130635", "name": "蠡县", "pinyin": "lixian", "zip_code": "071400", "parent_code": "130600", "type": 2, "first_letter": "L" },
+  { "code": "130636", "name": "顺平县", "pinyin": "shunpingxian", "zip_code": "072250", "parent_code": "130600", "type": 2, "first_letter": "S" },
+  { "code": "130637", "name": "博野县", "pinyin": "boyexian", "zip_code": "071300", "parent_code": "130600", "type": 2, "first_letter": "B" },
+  { "code": "130638", "name": "雄县", "pinyin": "xiongxian", "zip_code": "071800", "parent_code": "130600", "type": 2, "first_letter": "X" },
+  { "code": "130681", "name": "涿州市", "pinyin": "zhuozhoushi", "zip_code": "072750", "parent_code": "130600", "type": 2, "first_letter": "Z" },
+  { "code": "130682", "name": "定州市", "pinyin": "dingzhoushi", "zip_code": "053800", "parent_code": "130600", "type": 2, "first_letter": "D" },
+  { "code": "130683", "name": "安国市", "pinyin": "anguoshi", "zip_code": "071200", "parent_code": "130600", "type": 2, "first_letter": "A" },
+  { "code": "130684", "name": "高碑店市", "pinyin": "gaobeidianshi", "zip_code": "074000", "parent_code": "130600", "type": 2, "first_letter": "G" },
+  { "code": "130700", "name": "张家口市", "pinyin": "zhangjiakoushi", "zip_code": "075000", "parent_code": "130000", "type": 1, "first_letter": "Z" },
+  { "code": "130702", "name": "桥东区", "pinyin": "qiaodongqu", "zip_code": "075000", "parent_code": "130700", "type": 2, "first_letter": "Q" },
+  { "code": "130703", "name": "桥西区", "pinyin": "qiaoxiqu", "zip_code": "075061", "parent_code": "130700", "type": 2, "first_letter": "Q" },
+  { "code": "130705", "name": "宣化区", "pinyin": "xuanhuaqu", "zip_code": "075100", "parent_code": "130700", "type": 2, "first_letter": "X" },
+  { "code": "130706", "name": "下花园区", "pinyin": "xiahuayuanqu", "zip_code": "075300", "parent_code": "130700", "type": 2, "first_letter": "X" },
+  { "code": "130708", "name": "万全区", "pinyin": "wanquanqu", "zip_code": "075100", "parent_code": "130700", "type": 2, "first_letter": "W" },
+  { "code": "130709", "name": "崇礼区", "pinyin": "chongliqu", "zip_code": "075100", "parent_code": "130700", "type": 2, "first_letter": "C" },
+  { "code": "130722", "name": "张北县", "pinyin": "zhangbeixian", "zip_code": "076450", "parent_code": "130700", "type": 2, "first_letter": "Z" },
+  { "code": "130723", "name": "康保县", "pinyin": "kangbaoxian", "zip_code": "076650", "parent_code": "130700", "type": 2, "first_letter": "K" },
+  { "code": "130724", "name": "沽源县", "pinyin": "guyuanxian", "zip_code": "076550", "parent_code": "130700", "type": 2, "first_letter": "G" },
+  { "code": "130725", "name": "尚义县", "pinyin": "shangyixian", "zip_code": "076750", "parent_code": "130700", "type": 2, "first_letter": "S" },
+  { "code": "130726", "name": "蔚县", "pinyin": "weixian", "zip_code": "075700", "parent_code": "130700", "type": 2, "first_letter": "W" },
+  { "code": "130727", "name": "阳原县", "pinyin": "yangyuanxian", "zip_code": "075800", "parent_code": "130700", "type": 2, "first_letter": "Y" },
+  { "code": "130728", "name": "怀安县", "pinyin": "huaianxian", "zip_code": "076150", "parent_code": "130700", "type": 2, "first_letter": "H" },
+  { "code": "130730", "name": "怀来县", "pinyin": "huailaixian", "zip_code": "075400", "parent_code": "130700", "type": 2, "first_letter": "H" },
+  { "code": "130731", "name": "涿鹿县", "pinyin": "zhuoluxian", "zip_code": "075600", "parent_code": "130700", "type": 2, "first_letter": "Z" },
+  { "code": "130732", "name": "赤城县", "pinyin": "chichengxian", "zip_code": "075500", "parent_code": "130700", "type": 2, "first_letter": "C" },
+  { "code": "130800", "name": "承德市", "pinyin": "chengdeshi", "zip_code": "067000", "parent_code": "130000", "type": 1, "first_letter": "C" },
+  { "code": "130802", "name": "双桥区", "pinyin": "shuangqiaoqu", "zip_code": "400900", "parent_code": "130800", "type": 2, "first_letter": "S" },
+  { "code": "130803", "name": "双滦区", "pinyin": "shuangluanqu", "zip_code": "067000", "parent_code": "130800", "type": 2, "first_letter": "S" },
+  { "code": "130804", "name": "鹰手营子矿区", "pinyin": "yingshouyingzikuangqu", "zip_code": "067200", "parent_code": "130800", "type": 2, "first_letter": "Y" },
+  { "code": "130821", "name": "承德县", "pinyin": "chengdexian", "zip_code": "067400", "parent_code": "130800", "type": 2, "first_letter": "C" },
+  { "code": "130822", "name": "兴隆县", "pinyin": "xinglongxian", "zip_code": "067300", "parent_code": "130800", "type": 2, "first_letter": "X" },
+  { "code": "130824", "name": "滦平县", "pinyin": "luanpingxian", "zip_code": "068250", "parent_code": "130800", "type": 2, "first_letter": "L" },
+  { "code": "130825", "name": "隆化县", "pinyin": "longhuaxian", "zip_code": "068150", "parent_code": "130800", "type": 2, "first_letter": "L" },
+  { "code": "130826", "name": "丰宁满族自治县", "pinyin": "fengningmanzuzizhixian", "zip_code": "068350", "parent_code": "130800", "type": 2, "first_letter": "F" },
+  { "code": "130827", "name": "宽城满族自治县", "pinyin": "kuanchengmanzuzizhixian", "zip_code": "067600", "parent_code": "130800", "type": 2, "first_letter": "K" },
+  { "code": "130828", "name": "围场满族蒙古族自治县", "pinyin": "weichangmanzumengguzuzizhixian", "zip_code": "068450", "parent_code": "130800", "type": 2, "first_letter": "W" },
+  { "code": "130881", "name": "平泉市", "pinyin": "pingquanshi", "zip_code": "067500", "parent_code": "130800", "type": 2, "first_letter": "P" },
+  { "code": "130900", "name": "沧州市", "pinyin": "cangzhoushi", "zip_code": "061000", "parent_code": "130000", "type": 1, "first_letter": "C" },
+  { "code": "130902", "name": "新华区", "pinyin": "xinhuaqu", "zip_code": "061000", "parent_code": "130900", "type": 2, "first_letter": "X" },
+  { "code": "130903", "name": "运河区", "pinyin": "yunhequ", "zip_code": "061000", "parent_code": "130900", "type": 2, "first_letter": "Y" },
+  { "code": "130921", "name": "沧县", "pinyin": "cangxian", "zip_code": "061000", "parent_code": "130900", "type": 2, "first_letter": "C" },
+  { "code": "130922", "name": "青县", "pinyin": "qingxian", "zip_code": "062650", "parent_code": "130900", "type": 2, "first_letter": "Q" },
+  { "code": "130923", "name": "东光县", "pinyin": "dongguangxian", "zip_code": "061600", "parent_code": "130900", "type": 2, "first_letter": "D" },
+  { "code": "130924", "name": "海兴县", "pinyin": "haixingxian", "zip_code": "061200", "parent_code": "130900", "type": 2, "first_letter": "H" },
+  { "code": "130925", "name": "盐山县", "pinyin": "yanshanxian", "zip_code": "061300", "parent_code": "130900", "type": 2, "first_letter": "Y" },
+  { "code": "130926", "name": "肃宁县", "pinyin": "suningxian", "zip_code": "062350", "parent_code": "130900", "type": 2, "first_letter": "S" },
+  { "code": "130927", "name": "南皮县", "pinyin": "nanpixian", "zip_code": "061500", "parent_code": "130900", "type": 2, "first_letter": "N" },
+  { "code": "130928", "name": "吴桥县", "pinyin": "wuqiaoxian", "zip_code": "061800", "parent_code": "130900", "type": 2, "first_letter": "W" },
+  { "code": "130929", "name": "献县", "pinyin": "xianxian", "zip_code": "062250", "parent_code": "130900", "type": 2, "first_letter": "X" },
+  { "code": "130930", "name": "孟村回族自治县", "pinyin": "mengcunhuizuzizhixian", "zip_code": "061400", "parent_code": "130900", "type": 2, "first_letter": "M" },
+  { "code": "130981", "name": "泊头市", "pinyin": "botoushi", "zip_code": "062150", "parent_code": "130900", "type": 2, "first_letter": "B" },
+  { "code": "130982", "name": "任丘市", "pinyin": "renqiushi", "zip_code": "062550", "parent_code": "130900", "type": 2, "first_letter": "R" },
+  { "code": "130983", "name": "黄骅市", "pinyin": "huanghuashi", "zip_code": "061100", "parent_code": "130900", "type": 2, "first_letter": "H" },
+  { "code": "130984", "name": "河间市", "pinyin": "hejianshi", "zip_code": "062450", "parent_code": "130900", "type": 2, "first_letter": "H" },
+  { "code": "131000", "name": "廊坊市", "pinyin": "langfangshi", "zip_code": "065000", "parent_code": "130000", "type": 1, "first_letter": "L" },
+  { "code": "131002", "name": "安次区", "pinyin": "anciqu", "zip_code": "065000", "parent_code": "131000", "type": 2, "first_letter": "A" },
+  { "code": "131003", "name": "广阳区", "pinyin": "guangyangqu", "zip_code": "065000", "parent_code": "131000", "type": 2, "first_letter": "G" },
+  { "code": "131022", "name": "固安县", "pinyin": "guanxian", "zip_code": "065500", "parent_code": "131000", "type": 2, "first_letter": "G" },
+  { "code": "131023", "name": "永清县", "pinyin": "yongqingxian", "zip_code": "065600", "parent_code": "131000", "type": 2, "first_letter": "Y" },
+  { "code": "131024", "name": "香河县", "pinyin": "xianghexian", "zip_code": "065400", "parent_code": "131000", "type": 2, "first_letter": "X" },
+  { "code": "131025", "name": "大城县", "pinyin": "dachengxian", "zip_code": "065900", "parent_code": "131000", "type": 2, "first_letter": "D" },
+  { "code": "131026", "name": "文安县", "pinyin": "wenanxian", "zip_code": "065800", "parent_code": "131000", "type": 2, "first_letter": "W" },
+  { "code": "131028", "name": "大厂回族自治县", "pinyin": "dachanghuizuzizhixian", "zip_code": "065300", "parent_code": "131000", "type": 2, "first_letter": "D" },
+  { "code": "131081", "name": "霸州市", "pinyin": "bazhoushi", "zip_code": "065700", "parent_code": "131000", "type": 2, "first_letter": "B" },
+  { "code": "131082", "name": "三河市", "pinyin": "sanheshi", "zip_code": "065200", "parent_code": "131000", "type": 2, "first_letter": "S" },
+  { "code": "131100", "name": "衡水市", "pinyin": "hengshuishi", "zip_code": "053000", "parent_code": "130000", "type": 1, "first_letter": "H" },
+  { "code": "131102", "name": "桃城区", "pinyin": "taochengqu", "zip_code": "053000", "parent_code": "131100", "type": 2, "first_letter": "T" },
+  { "code": "131103", "name": "冀州区", "pinyin": "jizhouqu", "zip_code": "053000", "parent_code": "131100", "type": 2, "first_letter": "J" },
+  { "code": "131121", "name": "枣强县", "pinyin": "zaoqiangxian", "zip_code": "053100", "parent_code": "131100", "type": 2, "first_letter": "Z" },
+  { "code": "131122", "name": "武邑县", "pinyin": "wuyixian", "zip_code": "053400", "parent_code": "131100", "type": 2, "first_letter": "W" },
+  { "code": "131123", "name": "武强县", "pinyin": "wuqiangxian", "zip_code": "053300", "parent_code": "131100", "type": 2, "first_letter": "W" },
+  { "code": "131124", "name": "饶阳县", "pinyin": "raoyangxian", "zip_code": "053900", "parent_code": "131100", "type": 2, "first_letter": "R" },
+  { "code": "131125", "name": "安平县", "pinyin": "anpingxian", "zip_code": "053600", "parent_code": "131100", "type": 2, "first_letter": "A" },
+  { "code": "131126", "name": "故城县", "pinyin": "guchengxian", "zip_code": "253800", "parent_code": "131100", "type": 2, "first_letter": "G" },
+  { "code": "131127", "name": "景县", "pinyin": "jingxian", "zip_code": "053500", "parent_code": "131100", "type": 2, "first_letter": "J" },
+  { "code": "131128", "name": "阜城县", "pinyin": "fuchengxian", "zip_code": "053700", "parent_code": "131100", "type": 2, "first_letter": "F" },
+  { "code": "131182", "name": "深州市", "pinyin": "shenzhoushi", "zip_code": "053800", "parent_code": "131100", "type": 2, "first_letter": "S" },
+  { "code": "140000", "name": "山西省", "pinyin": "shanxisheng", "zip_code": "0", "type": 0, "first_letter": "S" },
+  { "code": "140100", "name": "太原市", "pinyin": "taiyuanshi", "zip_code": "030000", "parent_code": "140000", "type": 1, "first_letter": "T" },
+  { "code": "140105", "name": "小店区", "pinyin": "xiaodianqu", "zip_code": "030032", "parent_code": "140100", "type": 2, "first_letter": "X" },
+  { "code": "140106", "name": "迎泽区", "pinyin": "yingzequ", "zip_code": "030024", "parent_code": "140100", "type": 2, "first_letter": "Y" },
+  { "code": "140107", "name": "杏花岭区", "pinyin": "xinghualingqu", "zip_code": "030001", "parent_code": "140100", "type": 2, "first_letter": "X" },
+  { "code": "140108", "name": "尖草坪区", "pinyin": "jiancaopingqu", "zip_code": "030003", "parent_code": "140100", "type": 2, "first_letter": "J" },
+  { "code": "140109", "name": "万柏林区", "pinyin": "wanbailinqu", "zip_code": "030027", "parent_code": "140100", "type": 2, "first_letter": "W" },
+  { "code": "140110", "name": "晋源区", "pinyin": "jinyuanqu", "zip_code": "030025", "parent_code": "140100", "type": 2, "first_letter": "J" },
+  { "code": "140121", "name": "清徐县", "pinyin": "qingxuxian", "zip_code": "030400", "parent_code": "140100", "type": 2, "first_letter": "Q" },
+  { "code": "140122", "name": "阳曲县", "pinyin": "yangquxian", "zip_code": "030100", "parent_code": "140100", "type": 2, "first_letter": "Y" },
+  { "code": "140123", "name": "娄烦县", "pinyin": "loufanxian", "zip_code": "030300", "parent_code": "140100", "type": 2, "first_letter": "L" },
+  { "code": "140181", "name": "古交市", "pinyin": "gujiaoshi", "zip_code": "030200", "parent_code": "140100", "type": 2, "first_letter": "G" },
+  { "code": "140200", "name": "大同市", "pinyin": "datongshi", "zip_code": "037000", "parent_code": "140000", "type": 1, "first_letter": "D" },
+  { "code": "140202", "name": "城区", "pinyin": "chengqu", "zip_code": "037008", "parent_code": "140200", "type": 2, "first_letter": "C" },
+  { "code": "140203", "name": "矿区", "pinyin": "kuangqu", "zip_code": "037001", "parent_code": "140200", "type": 2, "first_letter": "K" },
+  { "code": "140211", "name": "南郊区", "pinyin": "nanjiaoqu", "zip_code": "037001", "parent_code": "140200", "type": 2, "first_letter": "N" },
+  { "code": "140212", "name": "新荣区", "pinyin": "xinrongqu", "zip_code": "037002", "parent_code": "140200", "type": 2, "first_letter": "X" },
+  { "code": "140221", "name": "阳高县", "pinyin": "yanggaoxian", "zip_code": "038100", "parent_code": "140200", "type": 2, "first_letter": "Y" },
+  { "code": "140222", "name": "天镇县", "pinyin": "tianzhenxian", "zip_code": "038200", "parent_code": "140200", "type": 2, "first_letter": "T" },
+  { "code": "140223", "name": "广灵县", "pinyin": "guanglingxian", "zip_code": "037500", "parent_code": "140200", "type": 2, "first_letter": "G" },
+  { "code": "140224", "name": "灵丘县", "pinyin": "lingqiuxian", "zip_code": "034400", "parent_code": "140200", "type": 2, "first_letter": "L" },
+  { "code": "140225", "name": "浑源县", "pinyin": "hunyuanxian", "zip_code": "037400", "parent_code": "140200", "type": 2, "first_letter": "H" },
+  { "code": "140226", "name": "左云县", "pinyin": "zuoyunxian", "zip_code": "037100", "parent_code": "140200", "type": 2, "first_letter": "Z" },
+  { "code": "140227", "name": "大同县", "pinyin": "datongxian", "zip_code": "037300", "parent_code": "140200", "type": 2, "first_letter": "D" },
+  { "code": "140300", "name": "阳泉市", "pinyin": "yangquanshi", "zip_code": "045000", "parent_code": "140000", "type": 1, "first_letter": "Y" },
+  { "code": "140302", "name": "城区", "pinyin": "chengqu", "zip_code": "045000", "parent_code": "140300", "type": 2, "first_letter": "C" },
+  { "code": "140303", "name": "矿区", "pinyin": "kuangqu", "zip_code": "045000", "parent_code": "140300", "type": 2, "first_letter": "K" },
+  { "code": "140311", "name": "郊区", "pinyin": "jiaoqu", "zip_code": "045011", "parent_code": "140300", "type": 2, "first_letter": "J" },
+  { "code": "140321", "name": "平定县", "pinyin": "pingdingxian", "zip_code": "045200", "parent_code": "140300", "type": 2, "first_letter": "P" },
+  { "code": "140322", "name": "盂县", "pinyin": "yuxian", "zip_code": "045100", "parent_code": "140300", "type": 2, "first_letter": "Y" },
+  { "code": "140400", "name": "长治市", "pinyin": "changzhishi", "zip_code": "046000", "parent_code": "140000", "type": 1, "first_letter": "C" },
+  { "code": "140402", "name": "城区", "pinyin": "chengqu", "zip_code": "046011", "parent_code": "140400", "type": 2, "first_letter": "C" },
+  { "code": "140411", "name": "郊区", "pinyin": "jiaoqu", "zip_code": "046011", "parent_code": "140400", "type": 2, "first_letter": "J" },
+  { "code": "140421", "name": "长治县", "pinyin": "changzhixian", "zip_code": "047100", "parent_code": "140400", "type": 2, "first_letter": "C" },
+  { "code": "140423", "name": "襄垣县", "pinyin": "xiangyuanxian", "zip_code": "046200", "parent_code": "140400", "type": 2, "first_letter": "X" },
+  { "code": "140424", "name": "屯留县", "pinyin": "tunliuxian", "zip_code": "046100", "parent_code": "140400", "type": 2, "first_letter": "T" },
+  { "code": "140425", "name": "平顺县", "pinyin": "pingshunxian", "zip_code": "047400", "parent_code": "140400", "type": 2, "first_letter": "P" },
+  { "code": "140426", "name": "黎城县", "pinyin": "lichengxian", "zip_code": "047600", "parent_code": "140400", "type": 2, "first_letter": "L" },
+  { "code": "140427", "name": "壶关县", "pinyin": "huguanxian", "zip_code": "047300", "parent_code": "140400", "type": 2, "first_letter": "H" },
+  { "code": "140428", "name": "长子县", "pinyin": "changzixian", "zip_code": "046600", "parent_code": "140400", "type": 2, "first_letter": "C" },
+  { "code": "140429", "name": "武乡县", "pinyin": "wuxiangxian", "zip_code": "046300", "parent_code": "140400", "type": 2, "first_letter": "W" },
+  { "code": "140430", "name": "沁县", "pinyin": "qinxian", "zip_code": "046400", "parent_code": "140400", "type": 2, "first_letter": "Q" },
+  { "code": "140431", "name": "沁源县", "pinyin": "qinyuanxian", "zip_code": "046500", "parent_code": "140400", "type": 2, "first_letter": "Q" },
+  { "code": "140481", "name": "潞城市", "pinyin": "luchengshi", "zip_code": "047500", "parent_code": "140400", "type": 2, "first_letter": "L" },
+  { "code": "140500", "name": "晋城市", "pinyin": "jinchengshi", "zip_code": "048000", "parent_code": "140000", "type": 1, "first_letter": "J" },
+  { "code": "140502", "name": "城区", "pinyin": "chengqu", "zip_code": "048000", "parent_code": "140500", "type": 2, "first_letter": "C" },
+  { "code": "140521", "name": "沁水县", "pinyin": "qinshuixian", "zip_code": "048200", "parent_code": "140500", "type": 2, "first_letter": "Q" },
+  { "code": "140522", "name": "阳城县", "pinyin": "yangchengxian", "zip_code": "048100", "parent_code": "140500", "type": 2, "first_letter": "Y" },
+  { "code": "140524", "name": "陵川县", "pinyin": "lingchuanxian", "zip_code": "048300", "parent_code": "140500", "type": 2, "first_letter": "L" },
+  { "code": "140525", "name": "泽州县", "pinyin": "zezhouxian", "zip_code": "048012", "parent_code": "140500", "type": 2, "first_letter": "Z" },
+  { "code": "140581", "name": "高平市", "pinyin": "gaopingshi", "zip_code": "048400", "parent_code": "140500", "type": 2, "first_letter": "G" },
+  { "code": "140600", "name": "朔州市", "pinyin": "shuozhoushi", "zip_code": "038500", "parent_code": "140000", "type": 1, "first_letter": "S" },
+  { "code": "140602", "name": "朔城区", "pinyin": "shuochengqu", "zip_code": "038500", "parent_code": "140600", "type": 2, "first_letter": "S" },
+  { "code": "140603", "name": "平鲁区", "pinyin": "pingluqu", "zip_code": "038600", "parent_code": "140600", "type": 2, "first_letter": "P" },
+  { "code": "140621", "name": "山阴县", "pinyin": "shanyinxian", "zip_code": "036900", "parent_code": "140600", "type": 2, "first_letter": "S" },
+  { "code": "140622", "name": "应县", "pinyin": "yingxian", "zip_code": "037600", "parent_code": "140600", "type": 2, "first_letter": "Y" },
+  { "code": "140623", "name": "右玉县", "pinyin": "youyuxian", "zip_code": "037200", "parent_code": "140600", "type": 2, "first_letter": "Y" },
+  { "code": "140624", "name": "怀仁县", "pinyin": "huairenxian", "zip_code": "038300", "parent_code": "140600", "type": 2, "first_letter": "H" },
+  { "code": "140700", "name": "晋中市", "pinyin": "jinzhongshi", "zip_code": "038300", "parent_code": "140000", "type": 1, "first_letter": "J" },
+  { "code": "140702", "name": "榆次区", "pinyin": "yuciqu", "zip_code": "030600", "parent_code": "140700", "type": 2, "first_letter": "Y" },
+  { "code": "140721", "name": "榆社县", "pinyin": "yushexian", "zip_code": "031800", "parent_code": "140700", "type": 2, "first_letter": "Y" },
+  { "code": "140722", "name": "左权县", "pinyin": "zuoquanxian", "zip_code": "032600", "parent_code": "140700", "type": 2, "first_letter": "Z" },
+  { "code": "140723", "name": "和顺县", "pinyin": "heshunxian", "zip_code": "032700", "parent_code": "140700", "type": 2, "first_letter": "H" },
+  { "code": "140724", "name": "昔阳县", "pinyin": "xiyangxian", "zip_code": "045300", "parent_code": "140700", "type": 2, "first_letter": "X" },
+  { "code": "140725", "name": "寿阳县", "pinyin": "shouyangxian", "zip_code": "045400", "parent_code": "140700", "type": 2, "first_letter": "S" },
+  { "code": "140726", "name": "太谷县", "pinyin": "taiguxian", "zip_code": "030800", "parent_code": "140700", "type": 2, "first_letter": "T" },
+  { "code": "140727", "name": "祁县", "pinyin": "qixian", "zip_code": "030900", "parent_code": "140700", "type": 2, "first_letter": "Q" },
+  { "code": "140728", "name": "平遥县", "pinyin": "pingyaoxian", "zip_code": "031100", "parent_code": "140700", "type": 2, "first_letter": "P" },
+  { "code": "140729", "name": "灵石县", "pinyin": "lingshixian", "zip_code": "031300", "parent_code": "140700", "type": 2, "first_letter": "L" },
+  { "code": "140781", "name": "介休市", "pinyin": "jiexiushi", "zip_code": "031200", "parent_code": "140700", "type": 2, "first_letter": "J" },
+  { "code": "140800", "name": "运城市", "pinyin": "yunchengshi", "zip_code": "044000", "parent_code": "140000", "type": 1, "first_letter": "Y" },
+  { "code": "140802", "name": "盐湖区", "pinyin": "yanhuqu", "zip_code": "044000", "parent_code": "140800", "type": 2, "first_letter": "Y" },
+  { "code": "140821", "name": "临猗县", "pinyin": "linyixian", "zip_code": "044100", "parent_code": "140800", "type": 2, "first_letter": "L" },
+  { "code": "140822", "name": "万荣县", "pinyin": "wanrongxian", "zip_code": "044200", "parent_code": "140800", "type": 2, "first_letter": "W" },
+  { "code": "140823", "name": "闻喜县", "pinyin": "wenxixian", "zip_code": "043800", "parent_code": "140800", "type": 2, "first_letter": "W" },
+  { "code": "140824", "name": "稷山县", "pinyin": "jishanxian", "zip_code": "043200", "parent_code": "140800", "type": 2, "first_letter": "J" },
+  { "code": "140825", "name": "新绛县", "pinyin": "xinjiangxian", "zip_code": "043100", "parent_code": "140800", "type": 2, "first_letter": "X" },
+  { "code": "140826", "name": "绛县", "pinyin": "jiangxian", "zip_code": "043600", "parent_code": "140800", "type": 2, "first_letter": "J" },
+  { "code": "140827", "name": "垣曲县", "pinyin": "yuanquxian", "zip_code": "043700", "parent_code": "140800", "type": 2, "first_letter": "Y" },
+  { "code": "140828", "name": "夏县", "pinyin": "xiaxian", "zip_code": "044400", "parent_code": "140800", "type": 2, "first_letter": "X" },
+  { "code": "140829", "name": "平陆县", "pinyin": "pingluxian", "zip_code": "044300", "parent_code": "140800", "type": 2, "first_letter": "P" },
+  { "code": "140830", "name": "芮城县", "pinyin": "ruichengxian", "zip_code": "044600", "parent_code": "140800", "type": 2, "first_letter": "R" },
+  { "code": "140881", "name": "永济市", "pinyin": "yongjishi", "zip_code": "044500", "parent_code": "140800", "type": 2, "first_letter": "Y" },
+  { "code": "140882", "name": "河津市", "pinyin": "hejinshi", "zip_code": "043300", "parent_code": "140800", "type": 2, "first_letter": "H" },
+  { "code": "140900", "name": "忻州市", "pinyin": "xinzhoushi", "zip_code": "034000", "parent_code": "140000", "type": 1, "first_letter": "X" },
+  { "code": "140902", "name": "忻府区", "pinyin": "xinfuqu", "zip_code": "034000", "parent_code": "140900", "type": 2, "first_letter": "X" },
+  { "code": "140921", "name": "定襄县", "pinyin": "dingxiangxian", "zip_code": "035400", "parent_code": "140900", "type": 2, "first_letter": "D" },
+  { "code": "140922", "name": "五台县", "pinyin": "wutaixian", "zip_code": "035500", "parent_code": "140900", "type": 2, "first_letter": "W" },
+  { "code": "140923", "name": "代县", "pinyin": "daixian", "zip_code": "034200", "parent_code": "140900", "type": 2, "first_letter": "D" },
+  { "code": "140924", "name": "繁峙县", "pinyin": "fanshixian", "zip_code": "034300", "parent_code": "140900", "type": 2, "first_letter": "F" },
+  { "code": "140925", "name": "宁武县", "pinyin": "ningwuxian", "zip_code": "036700", "parent_code": "140900", "type": 2, "first_letter": "N" },
+  { "code": "140926", "name": "静乐县", "pinyin": "jinglexian", "zip_code": "035100", "parent_code": "140900", "type": 2, "first_letter": "J" },
+  { "code": "140927", "name": "神池县", "pinyin": "shenchixian", "zip_code": "036100", "parent_code": "140900", "type": 2, "first_letter": "S" },
+  { "code": "140928", "name": "五寨县", "pinyin": "wuzhaixian", "zip_code": "036200", "parent_code": "140900", "type": 2, "first_letter": "W" },
+  { "code": "140929", "name": "岢岚县", "pinyin": "kelanxian", "zip_code": "036300", "parent_code": "140900", "type": 2, "first_letter": "K" },
+  { "code": "140930", "name": "河曲县", "pinyin": "hequxian", "zip_code": "036500", "parent_code": "140900", "type": 2, "first_letter": "H" },
+  { "code": "140931", "name": "保德县", "pinyin": "baodexian", "zip_code": "036600", "parent_code": "140900", "type": 2, "first_letter": "B" },
+  { "code": "140932", "name": "偏关县", "pinyin": "pianguanxian", "zip_code": "036400", "parent_code": "140900", "type": 2, "first_letter": "P" },
+  { "code": "140981", "name": "原平市", "pinyin": "yuanpingshi", "zip_code": "034100", "parent_code": "140900", "type": 2, "first_letter": "Y" },
+  { "code": "141000", "name": "临汾市", "pinyin": "linfenshi", "zip_code": "041000", "parent_code": "140000", "type": 1, "first_letter": "L" },
+  { "code": "141002", "name": "尧都区", "pinyin": "yaoduqu", "zip_code": "041000", "parent_code": "141000", "type": 2, "first_letter": "Y" },
+  { "code": "141021", "name": "曲沃县", "pinyin": "quwoxian", "zip_code": "043400", "parent_code": "141000", "type": 2, "first_letter": "Q" },
+  { "code": "141022", "name": "翼城县", "pinyin": "yichengxian", "zip_code": "043500", "parent_code": "141000", "type": 2, "first_letter": "Y" },
+  { "code": "141023", "name": "襄汾县", "pinyin": "xiangfenxian", "zip_code": "041500", "parent_code": "141000", "type": 2, "first_letter": "X" },
+  { "code": "141024", "name": "洪洞县", "pinyin": "hongdongxian", "zip_code": "031600", "parent_code": "141000", "type": 2, "first_letter": "H" },
+  { "code": "141025", "name": "古县", "pinyin": "guxian", "zip_code": "042400", "parent_code": "141000", "type": 2, "first_letter": "G" },
+  { "code": "141026", "name": "安泽县", "pinyin": "anzexian", "zip_code": "042500", "parent_code": "141000", "type": 2, "first_letter": "A" },
+  { "code": "141027", "name": "浮山县", "pinyin": "fushanxian", "zip_code": "042600", "parent_code": "141000", "type": 2, "first_letter": "F" },
+  { "code": "141028", "name": "吉县", "pinyin": "jixian", "zip_code": "042200", "parent_code": "141000", "type": 2, "first_letter": "J" },
+  { "code": "141029", "name": "乡宁县", "pinyin": "xiangningxian", "zip_code": "042100", "parent_code": "141000", "type": 2, "first_letter": "X" },
+  { "code": "141030", "name": "大宁县", "pinyin": "daningxian", "zip_code": "042300", "parent_code": "141000", "type": 2, "first_letter": "D" },
+  { "code": "141031", "name": "隰县", "pinyin": "xixian", "zip_code": "041300", "parent_code": "141000", "type": 2, "first_letter": "X" },
+  { "code": "141032", "name": "永和县", "pinyin": "yonghexian", "zip_code": "041400", "parent_code": "141000", "type": 2, "first_letter": "Y" },
+  { "code": "141033", "name": "蒲县", "pinyin": "puxian", "zip_code": "041200", "parent_code": "141000", "type": 2, "first_letter": "P" },
+  { "code": "141034", "name": "汾西县", "pinyin": "fenxixian", "zip_code": "031500", "parent_code": "141000", "type": 2, "first_letter": "F" },
+  { "code": "141081", "name": "侯马市", "pinyin": "houmashi", "zip_code": "043007", "parent_code": "141000", "type": 2, "first_letter": "H" },
+  { "code": "141082", "name": "霍州市", "pinyin": "huozhoushi", "zip_code": "031400", "parent_code": "141000", "type": 2, "first_letter": "H" },
+  { "code": "141100", "name": "吕梁市", "pinyin": "lvliangshi", "zip_code": "033000", "parent_code": "140000", "type": 1, "first_letter": "L" },
+  { "code": "141102", "name": "离石区", "pinyin": "lishiqu", "zip_code": "033000", "parent_code": "141100", "type": 2, "first_letter": "L" },
+  { "code": "141121", "name": "文水县", "pinyin": "wenshuixian", "zip_code": "032100", "parent_code": "141100", "type": 2, "first_letter": "W" },
+  { "code": "141122", "name": "交城县", "pinyin": "jiaochengxian", "zip_code": "030500", "parent_code": "141100", "type": 2, "first_letter": "J" },
+  { "code": "141123", "name": "兴县", "pinyin": "xingxian", "zip_code": "033600", "parent_code": "141100", "type": 2, "first_letter": "X" },
+  { "code": "141124", "name": "临县", "pinyin": "linxian", "zip_code": "033200", "parent_code": "141100", "type": 2, "first_letter": "L" },
+  { "code": "141125", "name": "柳林县", "pinyin": "liulinxian", "zip_code": "033300", "parent_code": "141100", "type": 2, "first_letter": "L" },
+  { "code": "141126", "name": "石楼县", "pinyin": "shilouxian", "zip_code": "032500", "parent_code": "141100", "type": 2, "first_letter": "S" },
+  { "code": "141127", "name": "岚县", "pinyin": "lanxian", "zip_code": "033500", "parent_code": "141100", "type": 2, "first_letter": "L" },
+  { "code": "141128", "name": "方山县", "pinyin": "fangshanxian", "zip_code": "033100", "parent_code": "141100", "type": 2, "first_letter": "F" },
+  { "code": "141129", "name": "中阳县", "pinyin": "zhongyangxian", "zip_code": "033400", "parent_code": "141100", "type": 2, "first_letter": "Z" },
+  { "code": "141130", "name": "交口县", "pinyin": "jiaokouxian", "zip_code": "032400", "parent_code": "141100", "type": 2, "first_letter": "J" },
+  { "code": "141181", "name": "孝义市", "pinyin": "xiaoyishi", "zip_code": "032300", "parent_code": "141100", "type": 2, "first_letter": "X" },
+  { "code": "141182", "name": "汾阳市", "pinyin": "fenyangshi", "zip_code": "032200", "parent_code": "141100", "type": 2, "first_letter": "F" },
+  { "code": "150000", "name": "内蒙古自治区", "pinyin": "neimengguzizhiqu", "zip_code": "0", "type": 0, "first_letter": "N" },
+  { "code": "150100", "name": "呼和浩特市", "pinyin": "huhehaoteshi", "zip_code": "010000", "parent_code": "150000", "type": 1, "first_letter": "H" },
+  { "code": "150102", "name": "新城区", "pinyin": "xinchengqu", "zip_code": "010030", "parent_code": "150100", "type": 2, "first_letter": "X" },
+  { "code": "150103", "name": "回民区", "pinyin": "huiminqu", "zip_code": "010030", "parent_code": "150100", "type": 2, "first_letter": "H" },
+  { "code": "150104", "name": "玉泉区", "pinyin": "yuquanqu", "zip_code": "010020", "parent_code": "150100", "type": 2, "first_letter": "Y" },
+  { "code": "150105", "name": "赛罕区", "pinyin": "saihanqu", "zip_code": "010020", "parent_code": "150100", "type": 2, "first_letter": "S" },
+  { "code": "150121", "name": "土默特左旗", "pinyin": "tumotezuoqi", "zip_code": "010100", "parent_code": "150100", "type": 2, "first_letter": "T" },
+  { "code": "150122", "name": "托克托县", "pinyin": "tuoketuoxian", "zip_code": "010200", "parent_code": "150100", "type": 2, "first_letter": "T" },
+  { "code": "150123", "name": "和林格尔县", "pinyin": "helingeerxian", "zip_code": "011500", "parent_code": "150100", "type": 2, "first_letter": "H" },
+  { "code": "150124", "name": "清水河县", "pinyin": "qingshuihexian", "zip_code": "011600", "parent_code": "150100", "type": 2, "first_letter": "Q" },
+  { "code": "150125", "name": "武川县", "pinyin": "wuchuanxian", "zip_code": "011700", "parent_code": "150100", "type": 2, "first_letter": "W" },
+  { "code": "150200", "name": "包头市", "pinyin": "baotoushi", "zip_code": "014000", "parent_code": "150000", "type": 1, "first_letter": "B" },
+  { "code": "150202", "name": "东河区", "pinyin": "donghequ", "zip_code": "014040", "parent_code": "150200", "type": 2, "first_letter": "D" },
+  { "code": "150203", "name": "昆都仑区", "pinyin": "kundulunqu", "zip_code": "014010", "parent_code": "150200", "type": 2, "first_letter": "K" },
+  { "code": "150204", "name": "青山区", "pinyin": "qingshanqu", "zip_code": "014030", "parent_code": "150200", "type": 2, "first_letter": "Q" },
+  { "code": "150205", "name": "石拐区", "pinyin": "shiguaiqu", "zip_code": "014070", "parent_code": "150200", "type": 2, "first_letter": "S" },
+  { "code": "150206", "name": "白云鄂博矿区", "pinyin": "baiyunebokuangqu", "zip_code": "0", "parent_code": "150200", "type": 2, "first_letter": "B" },
+  { "code": "150207", "name": "九原区", "pinyin": "jiuyuanqu", "zip_code": "014060", "parent_code": "150200", "type": 2, "first_letter": "J" },
+  { "code": "150221", "name": "土默特右旗", "pinyin": "tumoteyouqi", "zip_code": "014100", "parent_code": "150200", "type": 2, "first_letter": "T" },
+  { "code": "150222", "name": "固阳县", "pinyin": "guyangxian", "zip_code": "014200", "parent_code": "150200", "type": 2, "first_letter": "G" },
+  { "code": "150223", "name": "达尔罕茂明安联合旗", "pinyin": "daerhanmaominganlianheqi", "zip_code": "014500", "parent_code": "150200", "type": 2, "first_letter": "D" },
+  { "code": "150300", "name": "乌海市", "pinyin": "wuhaishi", "zip_code": "016000", "parent_code": "150000", "type": 1, "first_letter": "W" },
+  { "code": "150302", "name": "海勃湾区", "pinyin": "haibowanqu", "zip_code": "016000", "parent_code": "150300", "type": 2, "first_letter": "H" },
+  { "code": "150303", "name": "海南区", "pinyin": "hainanqu", "zip_code": "016030", "parent_code": "150300", "type": 2, "first_letter": "H" },
+  { "code": "150304", "name": "乌达区", "pinyin": "wudaqu", "zip_code": "016040", "parent_code": "150300", "type": 2, "first_letter": "W" },
+  { "code": "150400", "name": "赤峰市", "pinyin": "chifengshi", "zip_code": "024000", "parent_code": "150000", "type": 1, "first_letter": "C" },
+  { "code": "150402", "name": "红山区", "pinyin": "hongshanqu", "zip_code": "024020", "parent_code": "150400", "type": 2, "first_letter": "H" },
+  { "code": "150403", "name": "元宝山区", "pinyin": "yuanbaoshanqu", "zip_code": "024076", "parent_code": "150400", "type": 2, "first_letter": "Y" },
+  { "code": "150404", "name": "松山区", "pinyin": "songshanqu", "zip_code": "024005", "parent_code": "150400", "type": 2, "first_letter": "S" },
+  { "code": "150421", "name": "阿鲁科尔沁旗", "pinyin": "alukeerqinqi", "zip_code": "025550", "parent_code": "150400", "type": 2, "first_letter": "A" },
+  { "code": "150422", "name": "巴林左旗", "pinyin": "balinzuoqi", "zip_code": "025450", "parent_code": "150400", "type": 2, "first_letter": "B" },
+  { "code": "150423", "name": "巴林右旗", "pinyin": "balinyouqi", "zip_code": "025150", "parent_code": "150400", "type": 2, "first_letter": "B" },
+  { "code": "150424", "name": "林西县", "pinyin": "linxixian", "zip_code": "025250", "parent_code": "150400", "type": 2, "first_letter": "L" },
+  { "code": "150425", "name": "克什克腾旗", "pinyin": "keshiketengqi", "zip_code": "025350", "parent_code": "150400", "type": 2, "first_letter": "K" },
+  { "code": "150426", "name": "翁牛特旗", "pinyin": "wengniuteqi", "zip_code": "024500", "parent_code": "150400", "type": 2, "first_letter": "W" },
+  { "code": "150428", "name": "喀喇沁旗", "pinyin": "kalaqinqi", "zip_code": "024400", "parent_code": "150400", "type": 2, "first_letter": "K" },
+  { "code": "150429", "name": "宁城县", "pinyin": "ningchengxian", "zip_code": "024200", "parent_code": "150400", "type": 2, "first_letter": "N" },
+  { "code": "150430", "name": "敖汉旗", "pinyin": "aohanqi", "zip_code": "024300", "parent_code": "150400", "type": 2, "first_letter": "A" },
+  { "code": "150500", "name": "通辽市", "pinyin": "tongliaoshi", "zip_code": "028000", "parent_code": "150000", "type": 1, "first_letter": "T" },
+  { "code": "150502", "name": "科尔沁区", "pinyin": "keerqinqu", "zip_code": "028000", "parent_code": "150500", "type": 2, "first_letter": "K" },
+  { "code": "150521", "name": "科尔沁左翼中旗", "pinyin": "keerqinzuoyizhongqi", "zip_code": "029300", "parent_code": "150500", "type": 2, "first_letter": "K" },
+  { "code": "150522", "name": "科尔沁左翼后旗", "pinyin": "keerqinzuoyihouqi", "zip_code": "028100", "parent_code": "150500", "type": 2, "first_letter": "K" },
+  { "code": "150523", "name": "开鲁县", "pinyin": "kailuxian", "zip_code": "028400", "parent_code": "150500", "type": 2, "first_letter": "K" },
+  { "code": "150524", "name": "库伦旗", "pinyin": "kulunqi", "zip_code": "028200", "parent_code": "150500", "type": 2, "first_letter": "K" },
+  { "code": "150525", "name": "奈曼旗", "pinyin": "naimanqi", "zip_code": "028300", "parent_code": "150500", "type": 2, "first_letter": "N" },
+  { "code": "150526", "name": "扎鲁特旗", "pinyin": "zhaluteqi", "zip_code": "029100", "parent_code": "150500", "type": 2, "first_letter": "Z" },
+  { "code": "150581", "name": "霍林郭勒市", "pinyin": "huolinguoleshi", "zip_code": "029200", "parent_code": "150500", "type": 2, "first_letter": "H" },
+  { "code": "150600", "name": "鄂尔多斯市", "pinyin": "eerduosishi", "zip_code": "017000", "parent_code": "150000", "type": 1, "first_letter": "E" },
+  { "code": "150602", "name": "东胜区", "pinyin": "dongshengqu", "zip_code": "017000", "parent_code": "150600", "type": 2, "first_letter": "D" },
+  { "code": "150603", "name": "康巴什区", "pinyin": "kangbashiqu", "zip_code": "017010", "parent_code": "150600", "type": 2, "first_letter": "K" },
+  { "code": "150621", "name": "达拉特旗", "pinyin": "dalateqi", "zip_code": "014300", "parent_code": "150600", "type": 2, "first_letter": "D" },
+  { "code": "150622", "name": "准格尔旗", "pinyin": "zhungeerqi", "zip_code": "017100", "parent_code": "150600", "type": 2, "first_letter": "Z" },
+  { "code": "150623", "name": "鄂托克前旗", "pinyin": "etuokeqianqi", "zip_code": "016200", "parent_code": "150600", "type": 2, "first_letter": "E" },
+  { "code": "150624", "name": "鄂托克旗", "pinyin": "etuokeqi", "zip_code": "016100", "parent_code": "150600", "type": 2, "first_letter": "E" },
+  { "code": "150625", "name": "杭锦旗", "pinyin": "hangjinqi", "zip_code": "017400", "parent_code": "150600", "type": 2, "first_letter": "H" },
+  { "code": "150626", "name": "乌审旗", "pinyin": "wushenqi", "zip_code": "017300", "parent_code": "150600", "type": 2, "first_letter": "W" },
+  { "code": "150627", "name": "伊金霍洛旗", "pinyin": "yijinhuoluoqi", "zip_code": "017200", "parent_code": "150600", "type": 2, "first_letter": "Y" },
+  { "code": "150700", "name": "呼伦贝尔市", "pinyin": "hulunbeiershi", "zip_code": "021000", "parent_code": "150000", "type": 1, "first_letter": "H" },
+  { "code": "150702", "name": "海拉尔区", "pinyin": "hailaerqu", "zip_code": "021000", "parent_code": "150700", "type": 2, "first_letter": "H" },
+  { "code": "150703", "name": "扎赉诺尔区", "pinyin": "zhalainuoerqu", "zip_code": "021000", "parent_code": "150700", "type": 2, "first_letter": "Z" },
+  { "code": "150721", "name": "阿荣旗", "pinyin": "arongqi", "zip_code": "162750", "parent_code": "150700", "type": 2, "first_letter": "A" },
+  { "code": "150722", "name": "莫力达瓦达斡尔族自治旗", "pinyin": "molidawadawoerzuzizhiqi", "zip_code": "162850", "parent_code": "150700", "type": 2, "first_letter": "M" },
+  { "code": "150723", "name": "鄂伦春自治旗", "pinyin": "elunchunzizhiqi", "zip_code": "165450", "parent_code": "150700", "type": 2, "first_letter": "E" },
+  { "code": "150724", "name": "鄂温克族自治旗", "pinyin": "ewenkezuzizhiqi", "zip_code": "021100", "parent_code": "150700", "type": 2, "first_letter": "E" },
+  { "code": "150725", "name": "陈巴尔虎旗", "pinyin": "chenbaerhuqi", "zip_code": "021500", "parent_code": "150700", "type": 2, "first_letter": "C" },
+  { "code": "150726", "name": "新巴尔虎左旗", "pinyin": "xinbaerhuzuoqi", "zip_code": "021200", "parent_code": "150700", "type": 2, "first_letter": "X" },
+  { "code": "150727", "name": "新巴尔虎右旗", "pinyin": "xinbaerhuyouqi", "zip_code": "021300", "parent_code": "150700", "type": 2, "first_letter": "X" },
+  { "code": "150781", "name": "满洲里市", "pinyin": "manzhoulishi", "zip_code": "021400", "parent_code": "150700", "type": 2, "first_letter": "M" },
+  { "code": "150782", "name": "牙克石市", "pinyin": "yakeshishi", "zip_code": "022150", "parent_code": "150700", "type": 2, "first_letter": "Y" },
+  { "code": "150783", "name": "扎兰屯市", "pinyin": "zhalantunshi", "zip_code": "162650", "parent_code": "150700", "type": 2, "first_letter": "Z" },
+  { "code": "150784", "name": "额尔古纳市", "pinyin": "eergunashi", "zip_code": "022250", "parent_code": "150700", "type": 2, "first_letter": "E" },
+  { "code": "150785", "name": "根河市", "pinyin": "genheshi", "zip_code": "022350", "parent_code": "150700", "type": 2, "first_letter": "G" },
+  { "code": "150800", "name": "巴彦淖尔市", "pinyin": "bayannaoershi", "zip_code": "015000", "parent_code": "150000", "type": 1, "first_letter": "B" },
+  { "code": "150802", "name": "临河区", "pinyin": "linhequ", "zip_code": "015001", "parent_code": "150800", "type": 2, "first_letter": "L" },
+  { "code": "150821", "name": "五原县", "pinyin": "wuyuanxian", "zip_code": "015100", "parent_code": "150800", "type": 2, "first_letter": "W" },
+  { "code": "150822", "name": "磴口县", "pinyin": "dengkouxian", "zip_code": "015200", "parent_code": "150800", "type": 2, "first_letter": "D" },
+  { "code": "150823", "name": "乌拉特前旗", "pinyin": "wulateqianqi", "zip_code": "014400", "parent_code": "150800", "type": 2, "first_letter": "W" },
+  { "code": "150824", "name": "乌拉特中旗", "pinyin": "wulatezhongqi", "zip_code": "015300", "parent_code": "150800", "type": 2, "first_letter": "W" },
+  { "code": "150825", "name": "乌拉特后旗", "pinyin": "wulatehouqi", "zip_code": "015500", "parent_code": "150800", "type": 2, "first_letter": "W" },
+  { "code": "150826", "name": "杭锦后旗", "pinyin": "hangjinhouqi", "zip_code": "015400", "parent_code": "150800", "type": 2, "first_letter": "H" },
+  { "code": "150900", "name": "乌兰察布市", "pinyin": "wulanchabushi", "zip_code": "0", "parent_code": "150000", "type": 1, "first_letter": "W" },
+  { "code": "150902", "name": "集宁区", "pinyin": "jiningqu", "zip_code": "012000", "parent_code": "150900", "type": 2, "first_letter": "J" },
+  { "code": "150921", "name": "卓资县", "pinyin": "zhuozixian", "zip_code": "012300", "parent_code": "150900", "type": 2, "first_letter": "Z" },
+  { "code": "150922", "name": "化德县", "pinyin": "huadexian", "zip_code": "013350", "parent_code": "150900", "type": 2, "first_letter": "H" },
+  { "code": "150923", "name": "商都县", "pinyin": "shangduxian", "zip_code": "013450", "parent_code": "150900", "type": 2, "first_letter": "S" },
+  { "code": "150924", "name": "兴和县", "pinyin": "xinghexian", "zip_code": "013650", "parent_code": "150900", "type": 2, "first_letter": "X" },
+  { "code": "150925", "name": "凉城县", "pinyin": "liangchengxian", "zip_code": "013750", "parent_code": "150900", "type": 2, "first_letter": "L" },
+  { "code": "150926", "name": "察哈尔右翼前旗", "pinyin": "chahaeryouyiqianqi", "zip_code": "012200", "parent_code": "150900", "type": 2, "first_letter": "C" },
+  { "code": "150927", "name": "察哈尔右翼中旗", "pinyin": "chahaeryouyizhongqi", "zip_code": "013550", "parent_code": "150900", "type": 2, "first_letter": "C" },
+  { "code": "150928", "name": "察哈尔右翼后旗", "pinyin": "chahaeryouyihouqi", "zip_code": "012400", "parent_code": "150900", "type": 2, "first_letter": "C" },
+  { "code": "150929", "name": "四子王旗", "pinyin": "siziwangqi", "zip_code": "011800", "parent_code": "150900", "type": 2, "first_letter": "S" },
+  { "code": "150981", "name": "丰镇市", "pinyin": "fengzhenshi", "zip_code": "012100", "parent_code": "150900", "type": 2, "first_letter": "F" },
+  { "code": "152200", "name": "兴安盟", "pinyin": "xinganmeng", "zip_code": "0", "parent_code": "150000", "type": 1, "first_letter": "X" },
+  { "code": "152201", "name": "乌兰浩特市", "pinyin": "wulanhaoteshi", "zip_code": "137400", "parent_code": "152200", "type": 2, "first_letter": "W" },
+  { "code": "152202", "name": "阿尔山市", "pinyin": "aershanshi", "zip_code": "137400", "parent_code": "152200", "type": 2, "first_letter": "A" },
+  { "code": "152221", "name": "科尔沁右翼前旗", "pinyin": "keerqinyouyiqianqi", "zip_code": "137400", "parent_code": "152200", "type": 2, "first_letter": "K" },
+  { "code": "152222", "name": "科尔沁右翼中旗", "pinyin": "keerqinyouyizhongqi", "zip_code": "029400", "parent_code": "152200", "type": 2, "first_letter": "K" },
+  { "code": "152223", "name": "扎赉特旗", "pinyin": "zhalaiteqi", "zip_code": "137600", "parent_code": "152200", "type": 2, "first_letter": "Z" },
+  { "code": "152224", "name": "突泉县", "pinyin": "tuquanxian", "zip_code": "137500", "parent_code": "152200", "type": 2, "first_letter": "T" },
+  { "code": "152500", "name": "锡林郭勒盟", "pinyin": "xilinguoleimeng", "zip_code": "026000", "parent_code": "150000", "type": 1, "first_letter": "X" },
+  { "code": "152501", "name": "二连浩特市", "pinyin": "erlianhaoteshi", "zip_code": "012100", "parent_code": "152500", "type": 2, "first_letter": "E" },
+  { "code": "152502", "name": "锡林浩特市", "pinyin": "xilinhaoteshi", "zip_code": "012100", "parent_code": "152500", "type": 2, "first_letter": "X" },
+  { "code": "152522", "name": "阿巴嘎旗", "pinyin": "abagaqi", "zip_code": "012100", "parent_code": "152500", "type": 2, "first_letter": "A" },
+  { "code": "152523", "name": "苏尼特左旗", "pinyin": "sunitezuoqi", "zip_code": "012100", "parent_code": "152500", "type": 2, "first_letter": "S" },
+  { "code": "152524", "name": "苏尼特右旗", "pinyin": "suniteyouqi", "zip_code": "012100", "parent_code": "152500", "type": 2, "first_letter": "S" },
+  { "code": "152525", "name": "东乌珠穆沁旗", "pinyin": "dongwuzhumuqinqi", "zip_code": "012100", "parent_code": "152500", "type": 2, "first_letter": "D" },
+  { "code": "152526", "name": "西乌珠穆沁旗", "pinyin": "xiwuzhumuqinqi", "zip_code": "012100", "parent_code": "152500", "type": 2, "first_letter": "X" },
+  { "code": "152527", "name": "太仆寺旗", "pinyin": "taipusiqi", "zip_code": "012100", "parent_code": "152500", "type": 2, "first_letter": "T" },
+  { "code": "152528", "name": "镶黄旗", "pinyin": "xianghuangqi", "zip_code": "012100", "parent_code": "152500", "type": 2, "first_letter": "X" },
+  { "code": "152529", "name": "正镶白旗", "pinyin": "zhengxiangbaiqi", "zip_code": "012100", "parent_code": "152500", "type": 2, "first_letter": "Z" },
+  { "code": "152530", "name": "正蓝旗", "pinyin": "zhenglanqi", "zip_code": "012100", "parent_code": "152500", "type": 2, "first_letter": "Z" },
+  { "code": "152531", "name": "多伦县", "pinyin": "duolunxian", "zip_code": "012100", "parent_code": "152500", "type": 2, "first_letter": "D" },
+  { "code": "152900", "name": "阿拉善盟", "pinyin": "alashanmeng", "zip_code": "0", "parent_code": "150000", "type": 1, "first_letter": "A" },
+  { "code": "152921", "name": "阿拉善左旗", "pinyin": "alashanzuoqi", "zip_code": "750300", "parent_code": "152900", "type": 2, "first_letter": "A" },
+  { "code": "152922", "name": "阿拉善右旗", "pinyin": "alashanyouqi", "zip_code": "737300", "parent_code": "152900", "type": 2, "first_letter": "A" },
+  { "code": "152923", "name": "额济纳旗", "pinyin": "ejinaqi", "zip_code": "735400", "parent_code": "152900", "type": 2, "first_letter": "E" },
+  { "code": "210000", "name": "辽宁省", "pinyin": "liaoningsheng", "zip_code": "0", "type": 0, "first_letter": "L" },
+  { "code": "210100", "name": "沈阳市", "pinyin": "shenyangshi", "zip_code": "110000", "parent_code": "210000", "type": 1, "first_letter": "S" },
+  { "code": "210102", "name": "和平区", "pinyin": "hepingqu", "zip_code": "110001", "parent_code": "210100", "type": 2, "first_letter": "H" },
+  { "code": "210103", "name": "沈河区", "pinyin": "shenhequ", "zip_code": "110013", "parent_code": "210100", "type": 2, "first_letter": "S" },
+  { "code": "210104", "name": "大东区", "pinyin": "dadongqu", "zip_code": "110041", "parent_code": "210100", "type": 2, "first_letter": "D" },
+  { "code": "210105", "name": "皇姑区", "pinyin": "huangguqu", "zip_code": "110031", "parent_code": "210100", "type": 2, "first_letter": "H" },
+  { "code": "210106", "name": "铁西区", "pinyin": "tiexiqu", "zip_code": "114013", "parent_code": "210100", "type": 2, "first_letter": "T" },
+  { "code": "210111", "name": "苏家屯区", "pinyin": "sujiatunqu", "zip_code": "110101", "parent_code": "210100", "type": 2, "first_letter": "S" },
+  { "code": "210112", "name": "浑南区", "pinyin": "hunnanqu", "zip_code": "110101", "parent_code": "210100", "type": 2, "first_letter": "H" },
+  { "code": "210113", "name": "沈北新区", "pinyin": "shenbeixinqu", "zip_code": "110121", "parent_code": "210100", "type": 2, "first_letter": "S" },
+  { "code": "210114", "name": "于洪区", "pinyin": "yuhongqu", "zip_code": "110141", "parent_code": "210100", "type": 2, "first_letter": "Y" },
+  { "code": "210115", "name": "辽中区", "pinyin": "liaozhongqu", "zip_code": "110200", "parent_code": "210100", "type": 2, "first_letter": "L" },
+  { "code": "210123", "name": "康平县", "pinyin": "kangpingxian", "zip_code": "110500", "parent_code": "210100", "type": 2, "first_letter": "K" },
+  { "code": "210124", "name": "法库县", "pinyin": "fakuxian", "zip_code": "110400", "parent_code": "210100", "type": 2, "first_letter": "F" },
+  { "code": "210181", "name": "新民市", "pinyin": "xinminshi", "zip_code": "110300", "parent_code": "210100", "type": 2, "first_letter": "X" },
+  { "code": "210200", "name": "大连市", "pinyin": "dalianshi", "zip_code": "116000", "parent_code": "210000", "type": 1, "first_letter": "D" },
+  { "code": "210202", "name": "中山区", "pinyin": "zhongshanqu", "zip_code": "116001", "parent_code": "210200", "type": 2, "first_letter": "Z" },
+  { "code": "210203", "name": "西岗区", "pinyin": "xigangqu", "zip_code": "116011", "parent_code": "210200", "type": 2, "first_letter": "X" },
+  { "code": "210204", "name": "沙河口区", "pinyin": "shahekouqu", "zip_code": "116021", "parent_code": "210200", "type": 2, "first_letter": "S" },
+  { "code": "210211", "name": "甘井子区", "pinyin": "ganjingziqu", "zip_code": "116033", "parent_code": "210200", "type": 2, "first_letter": "G" },
+  { "code": "210212", "name": "旅顺口区", "pinyin": "lvshunkouqu", "zip_code": "116041", "parent_code": "210200", "type": 2, "first_letter": "L" },
+  { "code": "210213", "name": "金州区", "pinyin": "jinzhouqu", "zip_code": "116100", "parent_code": "210200", "type": 2, "first_letter": "J" },
+  { "code": "210214", "name": "普兰店区", "pinyin": "pulandianqu", "zip_code": "116200", "parent_code": "210200", "type": 2, "first_letter": "P" },
+  { "code": "210224", "name": "长海县", "pinyin": "changhaixian", "zip_code": "116500", "parent_code": "210200", "type": 2, "first_letter": "C" },
+  { "code": "210281", "name": "瓦房店市", "pinyin": "wafangdianshi", "zip_code": "116300", "parent_code": "210200", "type": 2, "first_letter": "W" },
+  { "code": "210283", "name": "庄河市", "pinyin": "zhuangheshi", "zip_code": "116400", "parent_code": "210200", "type": 2, "first_letter": "Z" },
+  { "code": "210300", "name": "鞍山市", "pinyin": "anshanshi", "zip_code": "114000", "parent_code": "210000", "type": 1, "first_letter": "A" },
+  { "code": "210302", "name": "铁东区", "pinyin": "tiedongqu", "zip_code": "114001", "parent_code": "210300", "type": 2, "first_letter": "T" },
+  { "code": "210303", "name": "铁西区", "pinyin": "tiexiqu", "zip_code": "136000", "parent_code": "210300", "type": 2, "first_letter": "T" },
+  { "code": "210304", "name": "立山区", "pinyin": "lishanqu", "zip_code": "114031", "parent_code": "210300", "type": 2, "first_letter": "L" },
+  { "code": "210311", "name": "千山区", "pinyin": "qianshanqu", "zip_code": "114041", "parent_code": "210300", "type": 2, "first_letter": "Q" },
+  { "code": "210321", "name": "台安县", "pinyin": "taianxian", "zip_code": "114100", "parent_code": "210300", "type": 2, "first_letter": "T" },
+  { "code": "210323", "name": "岫岩满族自治县", "pinyin": "xiuyanmanzuzizhixian", "zip_code": "114300", "parent_code": "210300", "type": 2, "first_letter": "X" },
+  { "code": "210381", "name": "海城市", "pinyin": "haichengshi", "zip_code": "114200", "parent_code": "210300", "type": 2, "first_letter": "H" },
+  { "code": "210400", "name": "抚顺市", "pinyin": "fushunshi", "zip_code": "113000", "parent_code": "210000", "type": 1, "first_letter": "F" },
+  { "code": "210402", "name": "新抚区", "pinyin": "xinfuqu", "zip_code": "113008", "parent_code": "210400", "type": 2, "first_letter": "X" },
+  { "code": "210403", "name": "东洲区", "pinyin": "dongzhouqu", "zip_code": "113003", "parent_code": "210400", "type": 2, "first_letter": "D" },
+  { "code": "210404", "name": "望花区", "pinyin": "wanghuaqu", "zip_code": "113001", "parent_code": "210400", "type": 2, "first_letter": "W" },
+  { "code": "210411", "name": "顺城区", "pinyin": "shunchengqu", "zip_code": "113006", "parent_code": "210400", "type": 2, "first_letter": "S" },
+  { "code": "210421", "name": "抚顺县", "pinyin": "fushunxian", "zip_code": "113006", "parent_code": "210400", "type": 2, "first_letter": "F" },
+  { "code": "210422", "name": "新宾满族自治县", "pinyin": "xinbinmanzuzizhixian", "zip_code": "113200", "parent_code": "210400", "type": 2, "first_letter": "X" },
+  { "code": "210423", "name": "清原满族自治县", "pinyin": "qingyuanmanzuzizhixian", "zip_code": "113300", "parent_code": "210400", "type": 2, "first_letter": "Q" },
+  { "code": "210500", "name": "本溪市", "pinyin": "benxishi", "zip_code": "117000", "parent_code": "210000", "type": 1, "first_letter": "B" },
+  { "code": "210502", "name": "平山区", "pinyin": "pingshanqu", "zip_code": "117000", "parent_code": "210500", "type": 2, "first_letter": "P" },
+  { "code": "210503", "name": "溪湖区", "pinyin": "xihuqu", "zip_code": "117002", "parent_code": "210500", "type": 2, "first_letter": "X" },
+  { "code": "210504", "name": "明山区", "pinyin": "mingshanqu", "zip_code": "117021", "parent_code": "210500", "type": 2, "first_letter": "M" },
+  { "code": "210505", "name": "南芬区", "pinyin": "nanfenqu", "zip_code": "117014", "parent_code": "210500", "type": 2, "first_letter": "N" },
+  { "code": "210521", "name": "本溪满族自治县", "pinyin": "benximanzuzizhixian", "zip_code": "117100", "parent_code": "210500", "type": 2, "first_letter": "B" },
+  { "code": "210522", "name": "桓仁满族自治县", "pinyin": "huanrenmanzuzizhixian", "zip_code": "117200", "parent_code": "210500", "type": 2, "first_letter": "H" },
+  { "code": "210600", "name": "丹东市", "pinyin": "dandongshi", "zip_code": "118000", "parent_code": "210000", "type": 1, "first_letter": "D" },
+  { "code": "210602", "name": "元宝区", "pinyin": "yuanbaoqu", "zip_code": "118000", "parent_code": "210600", "type": 2, "first_letter": "Y" },
+  { "code": "210603", "name": "振兴区", "pinyin": "zhenxingqu", "zip_code": "118002", "parent_code": "210600", "type": 2, "first_letter": "Z" },
+  { "code": "210604", "name": "振安区", "pinyin": "zhenanqu", "zip_code": "118001", "parent_code": "210600", "type": 2, "first_letter": "Z" },
+  { "code": "210624", "name": "宽甸满族自治县", "pinyin": "kuandianmanzuzizhixian", "zip_code": "118200", "parent_code": "210600", "type": 2, "first_letter": "K" },
+  { "code": "210681", "name": "东港市", "pinyin": "donggangshi", "zip_code": "118300", "parent_code": "210600", "type": 2, "first_letter": "D" },
+  { "code": "210682", "name": "凤城市", "pinyin": "fengchengshi", "zip_code": "118100", "parent_code": "210600", "type": 2, "first_letter": "F" },
+  { "code": "210700", "name": "锦州市", "pinyin": "jinzhoushi", "zip_code": "121000", "parent_code": "210000", "type": 1, "first_letter": "J" },
+  { "code": "210702", "name": "古塔区", "pinyin": "gutaqu", "zip_code": "121001", "parent_code": "210700", "type": 2, "first_letter": "G" },
+  { "code": "210703", "name": "凌河区", "pinyin": "linghequ", "zip_code": "121000", "parent_code": "210700", "type": 2, "first_letter": "L" },
+  { "code": "210711", "name": "太和区", "pinyin": "taihequ", "zip_code": "121011", "parent_code": "210700", "type": 2, "first_letter": "T" },
+  { "code": "210726", "name": "黑山县", "pinyin": "heishanxian", "zip_code": "121400", "parent_code": "210700", "type": 2, "first_letter": "H" },
+  { "code": "210727", "name": "义县", "pinyin": "yixian", "zip_code": "121100", "parent_code": "210700", "type": 2, "first_letter": "Y" },
+  { "code": "210781", "name": "凌海市", "pinyin": "linghaishi", "zip_code": "121200", "parent_code": "210700", "type": 2, "first_letter": "L" },
+  { "code": "210782", "name": "北镇市", "pinyin": "beizhenshi", "zip_code": "0", "parent_code": "210700", "type": 2, "first_letter": "B" },
+  { "code": "210800", "name": "营口市", "pinyin": "yingkoushi", "zip_code": "115000", "parent_code": "210000", "type": 1, "first_letter": "Y" },
+  { "code": "210802", "name": "站前区", "pinyin": "zhanqianqu", "zip_code": "115002", "parent_code": "210800", "type": 2, "first_letter": "Z" },
+  { "code": "210803", "name": "西市区", "pinyin": "xishiqu", "zip_code": "115004", "parent_code": "210800", "type": 2, "first_letter": "X" },
+  { "code": "210804", "name": "鲅鱼圈区", "pinyin": "bayuquanqu", "zip_code": "115004", "parent_code": "210800", "type": 2, "first_letter": "B" },
+  { "code": "210811", "name": "老边区", "pinyin": "laobianqu", "zip_code": "115005", "parent_code": "210800", "type": 2, "first_letter": "L" },
+  { "code": "210881", "name": "盖州市", "pinyin": "gaizhoushi", "zip_code": "115200", "parent_code": "210800", "type": 2, "first_letter": "G" },
+  { "code": "210882", "name": "大石桥市", "pinyin": "dashiqiaoshi", "zip_code": "115100", "parent_code": "210800", "type": 2, "first_letter": "D" },
+  { "code": "210900", "name": "阜新市", "pinyin": "fuxinshi", "zip_code": "123000", "parent_code": "210000", "type": 1, "first_letter": "F" },
+  { "code": "210902", "name": "海州区", "pinyin": "haizhouqu", "zip_code": "123000", "parent_code": "210900", "type": 2, "first_letter": "H" },
+  { "code": "210903", "name": "新邱区", "pinyin": "xinqiuqu", "zip_code": "123005", "parent_code": "210900", "type": 2, "first_letter": "X" },
+  { "code": "210904", "name": "太平区", "pinyin": "taipingqu", "zip_code": "123003", "parent_code": "210900", "type": 2, "first_letter": "T" },
+  { "code": "210905", "name": "清河门区", "pinyin": "qinghemenqu", "zip_code": "123006", "parent_code": "210900", "type": 2, "first_letter": "Q" },
+  { "code": "210911", "name": "细河区", "pinyin": "xihequ", "zip_code": "123000", "parent_code": "210900", "type": 2, "first_letter": "X" },
+  { "code": "210921", "name": "阜新蒙古族自治县", "pinyin": "fuxinmengguzuzizhixian", "zip_code": "123100", "parent_code": "210900", "type": 2, "first_letter": "F" },
+  { "code": "210922", "name": "彰武县", "pinyin": "zhangwuxian", "zip_code": "123200", "parent_code": "210900", "type": 2, "first_letter": "Z" },
+  { "code": "211000", "name": "辽阳市", "pinyin": "liaoyangshi", "zip_code": "111000", "parent_code": "210000", "type": 1, "first_letter": "L" },
+  { "code": "211002", "name": "白塔区", "pinyin": "baitaqu", "zip_code": "111000", "parent_code": "211000", "type": 2, "first_letter": "B" },
+  { "code": "211003", "name": "文圣区", "pinyin": "wenshengqu", "zip_code": "111000", "parent_code": "211000", "type": 2, "first_letter": "W" },
+  { "code": "211004", "name": "宏伟区", "pinyin": "hongweiqu", "zip_code": "111003", "parent_code": "211000", "type": 2, "first_letter": "H" },
+  { "code": "211005", "name": "弓长岭区", "pinyin": "gongchanglingqu", "zip_code": "111008", "parent_code": "211000", "type": 2, "first_letter": "G" },
+  { "code": "211011", "name": "太子河区", "pinyin": "taizihequ", "zip_code": "111000", "parent_code": "211000", "type": 2, "first_letter": "T" },
+  { "code": "211021", "name": "辽阳县", "pinyin": "liaoyangxian", "zip_code": "111200", "parent_code": "211000", "type": 2, "first_letter": "L" },
+  { "code": "211081", "name": "灯塔市", "pinyin": "dengtashi", "zip_code": "111300", "parent_code": "211000", "type": 2, "first_letter": "D" },
+  { "code": "211100", "name": "盘锦市", "pinyin": "panjinshi", "zip_code": "124000", "parent_code": "210000", "type": 1, "first_letter": "P" },
+  { "code": "211102", "name": "双台子区", "pinyin": "shuangtaiziqu", "zip_code": "124000", "parent_code": "211100", "type": 2, "first_letter": "S" },
+  { "code": "211103", "name": "兴隆台区", "pinyin": "xinglongtaiqu", "zip_code": "124010", "parent_code": "211100", "type": 2, "first_letter": "X" },
+  { "code": "211104", "name": "大洼区", "pinyin": "dawaqu", "zip_code": "124200", "parent_code": "211100", "type": 2, "first_letter": "D" },
+  { "code": "211122", "name": "盘山县", "pinyin": "panshanxian", "zip_code": "124000", "parent_code": "211100", "type": 2, "first_letter": "P" },
+  { "code": "211200", "name": "铁岭市", "pinyin": "tielingshi", "zip_code": "112000", "parent_code": "210000", "type": 1, "first_letter": "T" },
+  { "code": "211202", "name": "银州区", "pinyin": "yinzhouqu", "zip_code": "112000", "parent_code": "211200", "type": 2, "first_letter": "Y" },
+  { "code": "211204", "name": "清河区", "pinyin": "qinghequ", "zip_code": "112003", "parent_code": "211200", "type": 2, "first_letter": "Q" },
+  { "code": "211221", "name": "铁岭县", "pinyin": "tielingxian", "zip_code": "112000", "parent_code": "211200", "type": 2, "first_letter": "T" },
+  { "code": "211223", "name": "西丰县", "pinyin": "xifengxian", "zip_code": "112400", "parent_code": "211200", "type": 2, "first_letter": "X" },
+  { "code": "211224", "name": "昌图县", "pinyin": "changtuxian", "zip_code": "112500", "parent_code": "211200", "type": 2, "first_letter": "C" },
+  { "code": "211281", "name": "调兵山市", "pinyin": "diaobingshanshi", "zip_code": "112700", "parent_code": "211200", "type": 2, "first_letter": "D" },
+  { "code": "211282", "name": "开原市", "pinyin": "kaiyuanshi", "zip_code": "112300", "parent_code": "211200", "type": 2, "first_letter": "K" },
+  { "code": "211300", "name": "朝阳市", "pinyin": "chaoyangshi", "zip_code": "122000", "parent_code": "210000", "type": 1, "first_letter": "C" },
+  { "code": "211302", "name": "双塔区", "pinyin": "shuangtaqu", "zip_code": "122000", "parent_code": "211300", "type": 2, "first_letter": "S" },
+  { "code": "211303", "name": "龙城区", "pinyin": "longchengqu", "zip_code": "122000", "parent_code": "211300", "type": 2, "first_letter": "L" },
+  { "code": "211321", "name": "朝阳县", "pinyin": "chaoyangxian", "zip_code": "122000", "parent_code": "211300", "type": 2, "first_letter": "C" },
+  { "code": "211322", "name": "建平县", "pinyin": "jianpingxian", "zip_code": "122400", "parent_code": "211300", "type": 2, "first_letter": "J" },
+  { "code": "211324", "name": "喀喇沁左翼蒙古族自治县", "pinyin": "kalaqinzuoyimengguzuzizhixian", "zip_code": "122300", "parent_code": "211300", "type": 2, "first_letter": "K" },
+  { "code": "211381", "name": "北票市", "pinyin": "beipiaoshi", "zip_code": "122100", "parent_code": "211300", "type": 2, "first_letter": "B" },
+  { "code": "211382", "name": "凌源市", "pinyin": "lingyuanshi", "zip_code": "122500", "parent_code": "211300", "type": 2, "first_letter": "L" },
+  { "code": "211400", "name": "葫芦岛市", "pinyin": "huludaoshi", "zip_code": "125000", "parent_code": "210000", "type": 1, "first_letter": "H" },
+  { "code": "211402", "name": "连山区", "pinyin": "lianshanqu", "zip_code": "125001", "parent_code": "211400", "type": 2, "first_letter": "L" },
+  { "code": "211403", "name": "龙港区", "pinyin": "longgangqu", "zip_code": "125003", "parent_code": "211400", "type": 2, "first_letter": "L" },
+  { "code": "211404", "name": "南票区", "pinyin": "nanpiaoqu", "zip_code": "125027", "parent_code": "211400", "type": 2, "first_letter": "N" },
+  { "code": "211421", "name": "绥中县", "pinyin": "suizhongxian", "zip_code": "125200", "parent_code": "211400", "type": 2, "first_letter": "S" },
+  { "code": "211422", "name": "建昌县", "pinyin": "jianchangxian", "zip_code": "125300", "parent_code": "211400", "type": 2, "first_letter": "J" },
+  { "code": "211481", "name": "兴城市", "pinyin": "xingchengshi", "zip_code": "125100", "parent_code": "211400", "type": 2, "first_letter": "X" },
+  { "code": "220000", "name": "吉林省", "pinyin": "jilinsheng", "zip_code": "0", "type": 0, "first_letter": "J" },
+  { "code": "220100", "name": "长春市", "pinyin": "changchunshi", "zip_code": "130000", "parent_code": "220000", "type": 1, "first_letter": "C" },
+  { "code": "220102", "name": "南关区", "pinyin": "nanguanqu", "zip_code": "130022", "parent_code": "220100", "type": 2, "first_letter": "N" },
+  { "code": "220103", "name": "宽城区", "pinyin": "kuanchengqu", "zip_code": "130051", "parent_code": "220100", "type": 2, "first_letter": "K" },
+  { "code": "220104", "name": "朝阳区", "pinyin": "chaoyangqu", "zip_code": "130012", "parent_code": "220100", "type": 2, "first_letter": "C" },
+  { "code": "220105", "name": "二道区", "pinyin": "erdaoqu", "zip_code": "130031", "parent_code": "220100", "type": 2, "first_letter": "E" },
+  { "code": "220106", "name": "绿园区", "pinyin": "lvyuanqu", "zip_code": "130062", "parent_code": "220100", "type": 2, "first_letter": "L" },
+  { "code": "220112", "name": "双阳区", "pinyin": "shuangyangqu", "zip_code": "130600", "parent_code": "220100", "type": 2, "first_letter": "S" },
+  { "code": "220113", "name": "九台区", "pinyin": "jiutaiqu", "zip_code": "130500", "parent_code": "220100", "type": 2, "first_letter": "J" },
+  { "code": "220122", "name": "农安县", "pinyin": "nonganxian", "zip_code": "130200", "parent_code": "220100", "type": 2, "first_letter": "N" },
+  { "code": "220182", "name": "榆树市", "pinyin": "yushushi", "zip_code": "130400", "parent_code": "220100", "type": 2, "first_letter": "Y" },
+  { "code": "220183", "name": "德惠市", "pinyin": "dehuishi", "zip_code": "130300", "parent_code": "220100", "type": 2, "first_letter": "D" },
+  { "code": "220200", "name": "吉林市", "pinyin": "jilinshi", "zip_code": "132000", "parent_code": "220000", "type": 1, "first_letter": "J" },
+  { "code": "220202", "name": "昌邑区", "pinyin": "changyiqu", "zip_code": "132002", "parent_code": "220200", "type": 2, "first_letter": "C" },
+  { "code": "220203", "name": "龙潭区", "pinyin": "longtanqu", "zip_code": "132021", "parent_code": "220200", "type": 2, "first_letter": "L" },
+  { "code": "220204", "name": "船营区", "pinyin": "chuanyingqu", "zip_code": "132011", "parent_code": "220200", "type": 2, "first_letter": "C" },
+  { "code": "220211", "name": "丰满区", "pinyin": "fengmanqu", "zip_code": "132013", "parent_code": "220200", "type": 2, "first_letter": "F" },
+  { "code": "220221", "name": "永吉县", "pinyin": "yongjixian", "zip_code": "132200", "parent_code": "220200", "type": 2, "first_letter": "Y" },
+  { "code": "220281", "name": "蛟河市", "pinyin": "jiaoheshi", "zip_code": "132500", "parent_code": "220200", "type": 2, "first_letter": "J" },
+  { "code": "220282", "name": "桦甸市", "pinyin": "huadianshi", "zip_code": "132400", "parent_code": "220200", "type": 2, "first_letter": "H" },
+  { "code": "220283", "name": "舒兰市", "pinyin": "shulanshi", "zip_code": "132600", "parent_code": "220200", "type": 2, "first_letter": "S" },
+  { "code": "220284", "name": "磐石市", "pinyin": "panshishi", "zip_code": "132300", "parent_code": "220200", "type": 2, "first_letter": "P" },
+  { "code": "220300", "name": "四平市", "pinyin": "sipingshi", "zip_code": "136000", "parent_code": "220000", "type": 1, "first_letter": "S" },
+  { "code": "220302", "name": "铁西区", "pinyin": "tiexiqu", "zip_code": "136000", "parent_code": "220300", "type": 2, "first_letter": "T" },
+  { "code": "220303", "name": "铁东区", "pinyin": "tiedongqu", "zip_code": "136001", "parent_code": "220300", "type": 2, "first_letter": "T" },
+  { "code": "220322", "name": "梨树县", "pinyin": "lishuxian", "zip_code": "136500", "parent_code": "220300", "type": 2, "first_letter": "L" },
+  { "code": "220323", "name": "伊通满族自治县", "pinyin": "yitongmanzuzizhixian", "zip_code": "130700", "parent_code": "220300", "type": 2, "first_letter": "Y" },
+  { "code": "220381", "name": "公主岭市", "pinyin": "gongzhulingshi", "zip_code": "136100", "parent_code": "220300", "type": 2, "first_letter": "G" },
+  { "code": "220382", "name": "双辽市", "pinyin": "shuangliaoshi", "zip_code": "136400", "parent_code": "220300", "type": 2, "first_letter": "S" },
+  { "code": "220400", "name": "辽源市", "pinyin": "liaoyuanshi", "zip_code": "136200", "parent_code": "220000", "type": 1, "first_letter": "L" },
+  { "code": "220402", "name": "龙山区", "pinyin": "longshanqu", "zip_code": "136200", "parent_code": "220400", "type": 2, "first_letter": "L" },
+  { "code": "220403", "name": "西安区", "pinyin": "xianqu", "zip_code": "136201", "parent_code": "220400", "type": 2, "first_letter": "X" },
+  { "code": "220421", "name": "东丰县", "pinyin": "dongfengxian", "zip_code": "136300", "parent_code": "220400", "type": 2, "first_letter": "D" },
+  { "code": "220422", "name": "东辽县", "pinyin": "dongliaoxian", "zip_code": "136600", "parent_code": "220400", "type": 2, "first_letter": "D" },
+  { "code": "220500", "name": "通化市", "pinyin": "tonghuashi", "zip_code": "134000", "parent_code": "220000", "type": 1, "first_letter": "T" },
+  { "code": "220502", "name": "东昌区", "pinyin": "dongchangqu", "zip_code": "134001", "parent_code": "220500", "type": 2, "first_letter": "D" },
+  { "code": "220503", "name": "二道江区", "pinyin": "erdaojiangqu", "zip_code": "134003", "parent_code": "220500", "type": 2, "first_letter": "E" },
+  { "code": "220521", "name": "通化县", "pinyin": "tonghuaxian", "zip_code": "134100", "parent_code": "220500", "type": 2, "first_letter": "T" },
+  { "code": "220523", "name": "辉南县", "pinyin": "huinanxian", "zip_code": "135100", "parent_code": "220500", "type": 2, "first_letter": "H" },
+  { "code": "220524", "name": "柳河县", "pinyin": "liuhexian", "zip_code": "135300", "parent_code": "220500", "type": 2, "first_letter": "L" },
+  { "code": "220581", "name": "梅河口市", "pinyin": "meihekoushi", "zip_code": "135000", "parent_code": "220500", "type": 2, "first_letter": "M" },
+  { "code": "220582", "name": "集安市", "pinyin": "jianshi", "zip_code": "134200", "parent_code": "220500", "type": 2, "first_letter": "J" },
+  { "code": "220600", "name": "白山市", "pinyin": "baishanshi", "zip_code": "134300", "parent_code": "220000", "type": 1, "first_letter": "B" },
+  { "code": "220602", "name": "浑江区", "pinyin": "hunjiangqu", "zip_code": "134300", "parent_code": "220600", "type": 2, "first_letter": "H" },
+  { "code": "220605", "name": "江源区", "pinyin": "jiangyuanqu", "zip_code": "134300", "parent_code": "220600", "type": 2, "first_letter": "J" },
+  { "code": "220621", "name": "抚松县", "pinyin": "fusongxian", "zip_code": "134500", "parent_code": "220600", "type": 2, "first_letter": "F" },
+  { "code": "220622", "name": "靖宇县", "pinyin": "jingyuxian", "zip_code": "135200", "parent_code": "220600", "type": 2, "first_letter": "J" },
+  { "code": "220623", "name": "长白朝鲜族自治县", "pinyin": "changbaichaoxianzuzizhixian", "zip_code": "134400", "parent_code": "220600", "type": 2, "first_letter": "C" },
+  { "code": "220681", "name": "临江市", "pinyin": "linjiangshi", "zip_code": "134600", "parent_code": "220600", "type": 2, "first_letter": "L" },
+  { "code": "220700", "name": "松原市", "pinyin": "songyuanshi", "zip_code": "138000", "parent_code": "220000", "type": 1, "first_letter": "S" },
+  { "code": "220702", "name": "宁江区", "pinyin": "ningjiangqu", "zip_code": "138000", "parent_code": "220700", "type": 2, "first_letter": "N" },
+  { "code": "220721", "name": "前郭尔罗斯蒙古族自治县", "pinyin": "qianguoerluosimengguzuzizhixian", "zip_code": "138000", "parent_code": "220700", "type": 2, "first_letter": "Q" },
+  { "code": "220722", "name": "长岭县", "pinyin": "changlingxian", "zip_code": "131500", "parent_code": "220700", "type": 2, "first_letter": "C" },
+  { "code": "220723", "name": "乾安县", "pinyin": "qiananxian", "zip_code": "131400", "parent_code": "220700", "type": 2, "first_letter": "Q" },
+  { "code": "220781", "name": "扶余市", "pinyin": "fuyushi", "zip_code": "131200", "parent_code": "220700", "type": 2, "first_letter": "F" },
+  { "code": "220800", "name": "白城市", "pinyin": "baichengshi", "zip_code": "137000", "parent_code": "220000", "type": 1, "first_letter": "B" },
+  { "code": "220802", "name": "洮北区", "pinyin": "taobeiqu", "zip_code": "137000", "parent_code": "220800", "type": 2, "first_letter": "T" },
+  { "code": "220821", "name": "镇赉县", "pinyin": "zhenlaixian", "zip_code": "137300", "parent_code": "220800", "type": 2, "first_letter": "Z" },
+  { "code": "220822", "name": "通榆县", "pinyin": "tongyuxian", "zip_code": "137200", "parent_code": "220800", "type": 2, "first_letter": "T" },
+  { "code": "220881", "name": "洮南市", "pinyin": "taonanshi", "zip_code": "137100", "parent_code": "220800", "type": 2, "first_letter": "T" },
+  { "code": "220882", "name": "大安市", "pinyin": "daanshi", "zip_code": "131300", "parent_code": "220800", "type": 2, "first_letter": "D" },
+  { "code": "222400", "name": "延边朝鲜族自治州", "pinyin": "yanbianchaoxianzuzizhizhou", "zip_code": "133000", "parent_code": "220000", "type": 1, "first_letter": "Y" },
+  { "code": "222401", "name": "延吉市", "pinyin": "yanjishi", "zip_code": "133000", "parent_code": "222400", "type": 2, "first_letter": "Y" },
+  { "code": "222402", "name": "图们市", "pinyin": "tumenshi", "zip_code": "133100", "parent_code": "222400", "type": 2, "first_letter": "T" },
+  { "code": "222403", "name": "敦化市", "pinyin": "dunhuashi", "zip_code": "133700", "parent_code": "222400", "type": 2, "first_letter": "D" },
+  { "code": "222404", "name": "珲春市", "pinyin": "huichunshi", "zip_code": "133300", "parent_code": "222400", "type": 2, "first_letter": "H" },
+  { "code": "222405", "name": "龙井市", "pinyin": "longjingshi", "zip_code": "133400", "parent_code": "222400", "type": 2, "first_letter": "L" },
+  { "code": "222406", "name": "和龙市", "pinyin": "helongshi", "zip_code": "133500", "parent_code": "222400", "type": 2, "first_letter": "H" },
+  { "code": "222424", "name": "汪清县", "pinyin": "wangqingxian", "zip_code": "133200", "parent_code": "222400", "type": 2, "first_letter": "W" },
+  { "code": "222426", "name": "安图县", "pinyin": "antuxian", "zip_code": "133600", "parent_code": "222400", "type": 2, "first_letter": "A" },
+  { "code": "230000", "name": "黑龙江省", "pinyin": "heilongjiangsheng", "zip_code": "0", "type": 0, "first_letter": "H" },
+  { "code": "230100", "name": "哈尔滨市", "pinyin": "haerbinshi", "zip_code": "150000", "parent_code": "230000", "type": 1, "first_letter": "H" },
+  { "code": "230102", "name": "道里区", "pinyin": "daoliqu", "zip_code": "150010", "parent_code": "230100", "type": 2, "first_letter": "D" },
+  { "code": "230103", "name": "南岗区", "pinyin": "nangangqu", "zip_code": "150006", "parent_code": "230100", "type": 2, "first_letter": "N" },
+  { "code": "230104", "name": "道外区", "pinyin": "daowaiqu", "zip_code": "150020", "parent_code": "230100", "type": 2, "first_letter": "D" },
+  { "code": "230108", "name": "平房区", "pinyin": "pingfangqu", "zip_code": "150060", "parent_code": "230100", "type": 2, "first_letter": "P" },
+  { "code": "230109", "name": "松北区", "pinyin": "songbeiqu", "zip_code": "150028", "parent_code": "230100", "type": 2, "first_letter": "S" },
+  { "code": "230110", "name": "香坊区", "pinyin": "xiangfangqu", "zip_code": "150036", "parent_code": "230100", "type": 2, "first_letter": "X" },
+  { "code": "230111", "name": "呼兰区", "pinyin": "hulanqu", "zip_code": "150500", "parent_code": "230100", "type": 2, "first_letter": "H" },
+  { "code": "230112", "name": "阿城区", "pinyin": "achengqu", "zip_code": "150300", "parent_code": "230100", "type": 2, "first_letter": "A" },
+  { "code": "230113", "name": "双城区", "pinyin": "shuangchengqu", "zip_code": "150100", "parent_code": "230100", "type": 2, "first_letter": "S" },
+  { "code": "230123", "name": "依兰县", "pinyin": "yilanxian", "zip_code": "154800", "parent_code": "230100", "type": 2, "first_letter": "Y" },
+  { "code": "230124", "name": "方正县", "pinyin": "fangzhengxian", "zip_code": "150800", "parent_code": "230100", "type": 2, "first_letter": "F" },
+  { "code": "230125", "name": "宾县", "pinyin": "binxian", "zip_code": "150400", "parent_code": "230100", "type": 2, "first_letter": "B" },
+  { "code": "230126", "name": "巴彦县", "pinyin": "bayanxian", "zip_code": "151800", "parent_code": "230100", "type": 2, "first_letter": "B" },
+  { "code": "230127", "name": "木兰县", "pinyin": "mulanxian", "zip_code": "151900", "parent_code": "230100", "type": 2, "first_letter": "M" },
+  { "code": "230128", "name": "通河县", "pinyin": "tonghexian", "zip_code": "150900", "parent_code": "230100", "type": 2, "first_letter": "T" },
+  { "code": "230129", "name": "延寿县", "pinyin": "yanshouxian", "zip_code": "150700", "parent_code": "230100", "type": 2, "first_letter": "Y" },
+  { "code": "230183", "name": "尚志市", "pinyin": "shangzhishi", "zip_code": "150600", "parent_code": "230100", "type": 2, "first_letter": "S" },
+  { "code": "230184", "name": "五常市", "pinyin": "wuchangshi", "zip_code": "150200", "parent_code": "230100", "type": 2, "first_letter": "W" },
+  { "code": "230200", "name": "齐齐哈尔市", "pinyin": "qiqihaershi", "zip_code": "161000", "parent_code": "230000", "type": 1, "first_letter": "Q" },
+  { "code": "230202", "name": "龙沙区", "pinyin": "longshaqu", "zip_code": "161000", "parent_code": "230200", "type": 2, "first_letter": "L" },
+  { "code": "230203", "name": "建华区", "pinyin": "jianhuaqu", "zip_code": "161006", "parent_code": "230200", "type": 2, "first_letter": "J" },
+  { "code": "230204", "name": "铁锋区", "pinyin": "tiefengqu", "zip_code": "161000", "parent_code": "230200", "type": 2, "first_letter": "T" },
+  { "code": "230205", "name": "昂昂溪区", "pinyin": "angangxiqu", "zip_code": "161000", "parent_code": "230200", "type": 2, "first_letter": "A" },
+  { "code": "230206", "name": "富拉尔基区", "pinyin": "fulaerjiqu", "zip_code": "161041", "parent_code": "230200", "type": 2, "first_letter": "F" },
+  { "code": "230207", "name": "碾子山区", "pinyin": "nianzishanqu", "zip_code": "161046", "parent_code": "230200", "type": 2, "first_letter": "N" },
+  { "code": "230208", "name": "梅里斯达斡尔族区", "pinyin": "meilisidawoerzuqu", "zip_code": "161021", "parent_code": "230200", "type": 2, "first_letter": "M" },
+  { "code": "230221", "name": "龙江县", "pinyin": "longjiangxian", "zip_code": "161100", "parent_code": "230200", "type": 2, "first_letter": "L" },
+  { "code": "230223", "name": "依安县", "pinyin": "yianxian", "zip_code": "161500", "parent_code": "230200", "type": 2, "first_letter": "Y" },
+  { "code": "230224", "name": "泰来县", "pinyin": "tailaixian", "zip_code": "162400", "parent_code": "230200", "type": 2, "first_letter": "T" },
+  { "code": "230225", "name": "甘南县", "pinyin": "gannanxian", "zip_code": "162100", "parent_code": "230200", "type": 2, "first_letter": "G" },
+  { "code": "230227", "name": "富裕县", "pinyin": "fuyuxian", "zip_code": "161200", "parent_code": "230200", "type": 2, "first_letter": "F" },
+  { "code": "230229", "name": "克山县", "pinyin": "keshanxian", "zip_code": "161600", "parent_code": "230200", "type": 2, "first_letter": "K" },
+  { "code": "230230", "name": "克东县", "pinyin": "kedongxian", "zip_code": "164800", "parent_code": "230200", "type": 2, "first_letter": "K" },
+  { "code": "230231", "name": "拜泉县", "pinyin": "baiquanxian", "zip_code": "164700", "parent_code": "230200", "type": 2, "first_letter": "B" },
+  { "code": "230281", "name": "讷河市", "pinyin": "neheshi", "zip_code": "161300", "parent_code": "230200", "type": 2, "first_letter": "N" },
+  { "code": "230300", "name": "鸡西市", "pinyin": "jixishi", "zip_code": "158100", "parent_code": "230000", "type": 1, "first_letter": "J" },
+  { "code": "230302", "name": "鸡冠区", "pinyin": "jiguanqu", "zip_code": "158100", "parent_code": "230300", "type": 2, "first_letter": "J" },
+  { "code": "230303", "name": "恒山区", "pinyin": "hengshanqu", "zip_code": "158130", "parent_code": "230300", "type": 2, "first_letter": "H" },
+  { "code": "230304", "name": "滴道区", "pinyin": "didaoqu", "zip_code": "158150", "parent_code": "230300", "type": 2, "first_letter": "D" },
+  { "code": "230305", "name": "梨树区", "pinyin": "lishuqu", "zip_code": "158160", "parent_code": "230300", "type": 2, "first_letter": "L" },
+  { "code": "230306", "name": "城子河区", "pinyin": "chengzihequ", "zip_code": "158170", "parent_code": "230300", "type": 2, "first_letter": "C" },
+  { "code": "230307", "name": "麻山区", "pinyin": "mashanqu", "zip_code": "158180", "parent_code": "230300", "type": 2, "first_letter": "M" },
+  { "code": "230321", "name": "鸡东县", "pinyin": "jidongxian", "zip_code": "158200", "parent_code": "230300", "type": 2, "first_letter": "J" },
+  { "code": "230381", "name": "虎林市", "pinyin": "hulinshi", "zip_code": "158400", "parent_code": "230300", "type": 2, "first_letter": "H" },
+  { "code": "230382", "name": "密山市", "pinyin": "mishanshi", "zip_code": "158300", "parent_code": "230300", "type": 2, "first_letter": "M" },
+  { "code": "230400", "name": "鹤岗市", "pinyin": "hegangshi", "zip_code": "154100", "parent_code": "230000", "type": 1, "first_letter": "H" },
+  { "code": "230402", "name": "向阳区", "pinyin": "xiangyangqu", "zip_code": "154100", "parent_code": "230400", "type": 2, "first_letter": "X" },
+  { "code": "230403", "name": "工农区", "pinyin": "gongnongqu", "zip_code": "154101", "parent_code": "230400", "type": 2, "first_letter": "G" },
+  { "code": "230404", "name": "南山区", "pinyin": "nanshanqu", "zip_code": "154104", "parent_code": "230400", "type": 2, "first_letter": "N" },
+  { "code": "230405", "name": "兴安区", "pinyin": "xinganqu", "zip_code": "154102", "parent_code": "230400", "type": 2, "first_letter": "X" },
+  { "code": "230406", "name": "东山区", "pinyin": "dongshanqu", "zip_code": "522031", "parent_code": "230400", "type": 2, "first_letter": "D" },
+  { "code": "230407", "name": "兴山区", "pinyin": "xingshanqu", "zip_code": "154105", "parent_code": "230400", "type": 2, "first_letter": "X" },
+  { "code": "230421", "name": "萝北县", "pinyin": "luobeixian", "zip_code": "154200", "parent_code": "230400", "type": 2, "first_letter": "L" },
+  { "code": "230422", "name": "绥滨县", "pinyin": "suibinxian", "zip_code": "156200", "parent_code": "230400", "type": 2, "first_letter": "S" },
+  { "code": "230500", "name": "双鸭山市", "pinyin": "shuangyashanshi", "zip_code": "155100", "parent_code": "230000", "type": 1, "first_letter": "S" },
+  { "code": "230502", "name": "尖山区", "pinyin": "jianshanqu", "zip_code": "155100", "parent_code": "230500", "type": 2, "first_letter": "J" },
+  { "code": "230503", "name": "岭东区", "pinyin": "lingdongqu", "zip_code": "155120", "parent_code": "230500", "type": 2, "first_letter": "L" },
+  { "code": "230505", "name": "四方台区", "pinyin": "sifangtaiqu", "zip_code": "155130", "parent_code": "230500", "type": 2, "first_letter": "S" },
+  { "code": "230506", "name": "宝山区", "pinyin": "baoshanqu", "zip_code": "155131", "parent_code": "230500", "type": 2, "first_letter": "B" },
+  { "code": "230521", "name": "集贤县", "pinyin": "jixianxian", "zip_code": "155900", "parent_code": "230500", "type": 2, "first_letter": "J" },
+  { "code": "230522", "name": "友谊县", "pinyin": "youyixian", "zip_code": "155800", "parent_code": "230500", "type": 2, "first_letter": "Y" },
+  { "code": "230523", "name": "宝清县", "pinyin": "baoqingxian", "zip_code": "155600", "parent_code": "230500", "type": 2, "first_letter": "B" },
+  { "code": "230524", "name": "饶河县", "pinyin": "raohexian", "zip_code": "155700", "parent_code": "230500", "type": 2, "first_letter": "R" },
+  { "code": "230600", "name": "大庆市", "pinyin": "daqingshi", "zip_code": "163000", "parent_code": "230000", "type": 1, "first_letter": "D" },
+  { "code": "230602", "name": "萨尔图区", "pinyin": "saertuqu", "zip_code": "163001", "parent_code": "230600", "type": 2, "first_letter": "S" },
+  { "code": "230603", "name": "龙凤区", "pinyin": "longfengqu", "zip_code": "163711", "parent_code": "230600", "type": 2, "first_letter": "L" },
+  { "code": "230604", "name": "让胡路区", "pinyin": "ranghuluqu", "zip_code": "163712", "parent_code": "230600", "type": 2, "first_letter": "R" },
+  { "code": "230605", "name": "红岗区", "pinyin": "honggangqu", "zip_code": "163511", "parent_code": "230600", "type": 2, "first_letter": "H" },
+  { "code": "230606", "name": "大同区", "pinyin": "datongqu", "zip_code": "163515", "parent_code": "230600", "type": 2, "first_letter": "D" },
+  { "code": "230621", "name": "肇州县", "pinyin": "zhaozhouxian", "zip_code": "166400", "parent_code": "230600", "type": 2, "first_letter": "Z" },
+  { "code": "230622", "name": "肇源县", "pinyin": "zhaoyuanxian", "zip_code": "166500", "parent_code": "230600", "type": 2, "first_letter": "Z" },
+  { "code": "230623", "name": "林甸县", "pinyin": "lindianxian", "zip_code": "166300", "parent_code": "230600", "type": 2, "first_letter": "L" },
+  { "code": "230624", "name": "杜尔伯特蒙古族自治县", "pinyin": "duerbaitemengguzuzizhixian", "zip_code": "166200", "parent_code": "230600", "type": 2, "first_letter": "D" },
+  { "code": "230700", "name": "伊春市", "pinyin": "yichunshi", "zip_code": "153000", "parent_code": "230000", "type": 1, "first_letter": "Y" },
+  { "code": "230702", "name": "伊春区", "pinyin": "yichunqu", "zip_code": "153000", "parent_code": "230700", "type": 2, "first_letter": "Y" },
+  { "code": "230703", "name": "南岔区", "pinyin": "nanchaqu", "zip_code": "153100", "parent_code": "230700", "type": 2, "first_letter": "N" },
+  { "code": "230704", "name": "友好区", "pinyin": "youhaoqu", "zip_code": "153031", "parent_code": "230700", "type": 2, "first_letter": "Y" },
+  { "code": "230705", "name": "西林区", "pinyin": "xilinqu", "zip_code": "153025", "parent_code": "230700", "type": 2, "first_letter": "X" },
+  { "code": "230706", "name": "翠峦区", "pinyin": "cuiluanqu", "zip_code": "153013", "parent_code": "230700", "type": 2, "first_letter": "C" },
+  { "code": "230707", "name": "新青区", "pinyin": "xinqingqu", "zip_code": "153036", "parent_code": "230700", "type": 2, "first_letter": "X" },
+  { "code": "230708", "name": "美溪区", "pinyin": "meixiqu", "zip_code": "153021", "parent_code": "230700", "type": 2, "first_letter": "M" },
+  { "code": "230709", "name": "金山屯区", "pinyin": "jinshantunqu", "zip_code": "153026", "parent_code": "230700", "type": 2, "first_letter": "J" },
+  { "code": "230710", "name": "五营区", "pinyin": "wuyingqu", "zip_code": "153033", "parent_code": "230700", "type": 2, "first_letter": "W" },
+  { "code": "230711", "name": "乌马河区", "pinyin": "wumahequ", "zip_code": "153011", "parent_code": "230700", "type": 2, "first_letter": "W" },
+  { "code": "230712", "name": "汤旺河区", "pinyin": "tangwanghequ", "zip_code": "153037", "parent_code": "230700", "type": 2, "first_letter": "T" },
+  { "code": "230713", "name": "带岭区", "pinyin": "dailingqu", "zip_code": "153106", "parent_code": "230700", "type": 2, "first_letter": "D" },
+  { "code": "230714", "name": "乌伊岭区", "pinyin": "wuyilingqu", "zip_code": "153038", "parent_code": "230700", "type": 2, "first_letter": "W" },
+  { "code": "230715", "name": "红星区", "pinyin": "hongxingqu", "zip_code": "153035", "parent_code": "230700", "type": 2, "first_letter": "H" },
+  { "code": "230716", "name": "上甘岭区", "pinyin": "shangganlingqu", "zip_code": "153032", "parent_code": "230700", "type": 2, "first_letter": "S" },
+  { "code": "230722", "name": "嘉荫县", "pinyin": "jiayinxian", "zip_code": "153200", "parent_code": "230700", "type": 2, "first_letter": "J" },
+  { "code": "230781", "name": "铁力市", "pinyin": "tielishi", "zip_code": "152500", "parent_code": "230700", "type": 2, "first_letter": "T" },
+  { "code": "230800", "name": "佳木斯市", "pinyin": "jiamusishi", "zip_code": "154000", "parent_code": "230000", "type": 1, "first_letter": "J" },
+  { "code": "230803", "name": "向阳区", "pinyin": "xiangyangqu", "zip_code": "154002", "parent_code": "230800", "type": 2, "first_letter": "X" },
+  { "code": "230804", "name": "前进区", "pinyin": "qianjinqu", "zip_code": "154002", "parent_code": "230800", "type": 2, "first_letter": "Q" },
+  { "code": "230805", "name": "东风区", "pinyin": "dongfengqu", "zip_code": "154005", "parent_code": "230800", "type": 2, "first_letter": "D" },
+  { "code": "230811", "name": "郊区", "pinyin": "jiaoqu", "zip_code": "244000", "parent_code": "230800", "type": 2, "first_letter": "J" },
+  { "code": "230822", "name": "桦南县", "pinyin": "huananxian", "zip_code": "154400", "parent_code": "230800", "type": 2, "first_letter": "H" },
+  { "code": "230826", "name": "桦川县", "pinyin": "huachuanxian", "zip_code": "154300", "parent_code": "230800", "type": 2, "first_letter": "H" },
+  { "code": "230828", "name": "汤原县", "pinyin": "tangyuanxian", "zip_code": "154700", "parent_code": "230800", "type": 2, "first_letter": "T" },
+  { "code": "230881", "name": "同江市", "pinyin": "tongjiangshi", "zip_code": "156400", "parent_code": "230800", "type": 2, "first_letter": "T" },
+  { "code": "230882", "name": "富锦市", "pinyin": "fujinshi", "zip_code": "156100", "parent_code": "230800", "type": 2, "first_letter": "F" },
+  { "code": "230883", "name": "抚远市", "pinyin": "fuyuanshi", "zip_code": "156500", "parent_code": "230800", "type": 2, "first_letter": "F" },
+  { "code": "230900", "name": "七台河市", "pinyin": "qitaiheshi", "zip_code": "154600", "parent_code": "230000", "type": 1, "first_letter": "Q" },
+  { "code": "230902", "name": "新兴区", "pinyin": "xinxingqu", "zip_code": "154604", "parent_code": "230900", "type": 2, "first_letter": "X" },
+  { "code": "230903", "name": "桃山区", "pinyin": "taoshanqu", "zip_code": "154600", "parent_code": "230900", "type": 2, "first_letter": "T" },
+  { "code": "230904", "name": "茄子河区", "pinyin": "qiezihequ", "zip_code": "154622", "parent_code": "230900", "type": 2, "first_letter": "Q" },
+  { "code": "230921", "name": "勃利县", "pinyin": "bolixian", "zip_code": "154500", "parent_code": "230900", "type": 2, "first_letter": "B" },
+  { "code": "231000", "name": "牡丹江市", "pinyin": "mudanjiangshi", "zip_code": "157000", "parent_code": "230000", "type": 1, "first_letter": "M" },
+  { "code": "231002", "name": "东安区", "pinyin": "donganqu", "zip_code": "157000", "parent_code": "231000", "type": 2, "first_letter": "D" },
+  { "code": "231003", "name": "阳明区", "pinyin": "yangmingqu", "zip_code": "157013", "parent_code": "231000", "type": 2, "first_letter": "Y" },
+  { "code": "231004", "name": "爱民区", "pinyin": "aiminqu", "zip_code": "157009", "parent_code": "231000", "type": 2, "first_letter": "A" },
+  { "code": "231005", "name": "西安区", "pinyin": "xianqu", "zip_code": "157000", "parent_code": "231000", "type": 2, "first_letter": "X" },
+  { "code": "231025", "name": "林口县", "pinyin": "linkouxian", "zip_code": "157600", "parent_code": "231000", "type": 2, "first_letter": "L" },
+  { "code": "231081", "name": "绥芬河市", "pinyin": "suifenheshi", "zip_code": "157300", "parent_code": "231000", "type": 2, "first_letter": "S" },
+  { "code": "231083", "name": "海林市", "pinyin": "hailinshi", "zip_code": "157100", "parent_code": "231000", "type": 2, "first_letter": "H" },
+  { "code": "231084", "name": "宁安市", "pinyin": "ninganshi", "zip_code": "157400", "parent_code": "231000", "type": 2, "first_letter": "N" },
+  { "code": "231085", "name": "穆棱市", "pinyin": "mulingshi", "zip_code": "157500", "parent_code": "231000", "type": 2, "first_letter": "M" },
+  { "code": "231086", "name": "东宁市", "pinyin": "dongningshi", "zip_code": "157200", "parent_code": "231000", "type": 2, "first_letter": "D" },
+  { "code": "231100", "name": "黑河市", "pinyin": "heiheshi", "zip_code": "164300", "parent_code": "230000", "type": 1, "first_letter": "H" },
+  { "code": "231102", "name": "爱辉区", "pinyin": "aihuiqu", "zip_code": "164300", "parent_code": "231100", "type": 2, "first_letter": "A" },
+  { "code": "231121", "name": "嫩江县", "pinyin": "nenjiangxian", "zip_code": "161400", "parent_code": "231100", "type": 2, "first_letter": "N" },
+  { "code": "231123", "name": "逊克县", "pinyin": "xunkexian", "zip_code": "164400", "parent_code": "231100", "type": 2, "first_letter": "X" },
+  { "code": "231124", "name": "孙吴县", "pinyin": "sunwuxian", "zip_code": "164200", "parent_code": "231100", "type": 2, "first_letter": "S" },
+  { "code": "231181", "name": "北安市", "pinyin": "beianshi", "zip_code": "164000", "parent_code": "231100", "type": 2, "first_letter": "B" },
+  { "code": "231182", "name": "五大连池市", "pinyin": "wudalianchishi", "zip_code": "164100", "parent_code": "231100", "type": 2, "first_letter": "W" },
+  { "code": "231200", "name": "绥化市", "pinyin": "suihuashi", "zip_code": "152000", "parent_code": "230000", "type": 1, "first_letter": "S" },
+  { "code": "231202", "name": "北林区", "pinyin": "beilinqu", "zip_code": "152000", "parent_code": "231200", "type": 2, "first_letter": "B" },
+  { "code": "231221", "name": "望奎县", "pinyin": "wangkuixian", "zip_code": "152100", "parent_code": "231200", "type": 2, "first_letter": "W" },
+  { "code": "231222", "name": "兰西县", "pinyin": "lanxixian", "zip_code": "151500", "parent_code": "231200", "type": 2, "first_letter": "L" },
+  { "code": "231223", "name": "青冈县", "pinyin": "qinggangxian", "zip_code": "151600", "parent_code": "231200", "type": 2, "first_letter": "Q" },
+  { "code": "231224", "name": "庆安县", "pinyin": "qinganxian", "zip_code": "152400", "parent_code": "231200", "type": 2, "first_letter": "Q" },
+  { "code": "231225", "name": "明水县", "pinyin": "mingshuixian", "zip_code": "151700", "parent_code": "231200", "type": 2, "first_letter": "M" },
+  { "code": "231226", "name": "绥棱县", "pinyin": "suilingxian", "zip_code": "152200", "parent_code": "231200", "type": 2, "first_letter": "S" },
+  { "code": "231281", "name": "安达市", "pinyin": "andashi", "zip_code": "151400", "parent_code": "231200", "type": 2, "first_letter": "A" },
+  { "code": "231282", "name": "肇东市", "pinyin": "zhaodongshi", "zip_code": "151100", "parent_code": "231200", "type": 2, "first_letter": "Z" },
+  { "code": "231283", "name": "海伦市", "pinyin": "hailunshi", "zip_code": "152300", "parent_code": "231200", "type": 2, "first_letter": "H" },
+  { "code": "232700", "name": "大兴安岭地区", "pinyin": "daxinganlingdiqu", "zip_code": "165000", "parent_code": "230000", "type": 1, "first_letter": "D" },
+  { "code": "232701", "name": "加格达奇区", "pinyin": "jiagedaqiqu", "zip_code": "165000", "parent_code": "232700", "type": 2, "first_letter": "J" },
+  { "code": "232702", "name": "松岭区", "pinyin": "songlingqu", "zip_code": "165010", "parent_code": "232700", "type": 2, "first_letter": "S" },
+  { "code": "232703", "name": "新林区", "pinyin": "xinlinqu", "zip_code": "165000", "parent_code": "232700", "type": 2, "first_letter": "X" },
+  { "code": "232704", "name": "呼中区", "pinyin": "huzhongqu", "zip_code": "165036", "parent_code": "232700", "type": 2, "first_letter": "H" },
+  { "code": "232721", "name": "呼玛县", "pinyin": "humaxian", "zip_code": "165100", "parent_code": "232700", "type": 2, "first_letter": "H" },
+  { "code": "232722", "name": "塔河县", "pinyin": "tahexian", "zip_code": "165200", "parent_code": "232700", "type": 2, "first_letter": "T" },
+  { "code": "232723", "name": "漠河县", "pinyin": "mohexian", "zip_code": "165300", "parent_code": "232700", "type": 2, "first_letter": "M" },
+  { "code": "310000", "name": "上海市", "pinyin": "shanghaishi", "zip_code": "200000", "type": 0, "first_letter": "S" },
+  { "code": "310100", "name": "上海市", "pinyin": "shanghaishi", "zip_code": "200000", "parent_code": "310000", "type": 1, "first_letter": "S" },
+  { "code": "310101", "name": "黄浦区", "pinyin": "huangpuqu", "zip_code": "200001", "parent_code": "310100", "type": 2, "first_letter": "H" },
+  { "code": "310104", "name": "徐汇区", "pinyin": "xuhuiqu", "zip_code": "200030", "parent_code": "310100", "type": 2, "first_letter": "X" },
+  { "code": "310105", "name": "长宁区", "pinyin": "changningqu", "zip_code": "200050", "parent_code": "310100", "type": 2, "first_letter": "C" },
+  { "code": "310106", "name": "静安区", "pinyin": "jinganqu", "zip_code": "200050", "parent_code": "310100", "type": 2, "first_letter": "J" },
+  { "code": "310107", "name": "普陀区", "pinyin": "putuoqu", "zip_code": "200333", "parent_code": "310100", "type": 2, "first_letter": "P" },
+  { "code": "310109", "name": "虹口区", "pinyin": "hongkouqu", "zip_code": "200080", "parent_code": "310100", "type": 2, "first_letter": "H" },
+  { "code": "310110", "name": "杨浦区", "pinyin": "yangpuqu", "zip_code": "200082", "parent_code": "310100", "type": 2, "first_letter": "Y" },
+  { "code": "310112", "name": "闵行区", "pinyin": "minxingqu", "zip_code": "201100", "parent_code": "310100", "type": 2, "first_letter": "M" },
+  { "code": "310113", "name": "宝山区", "pinyin": "baoshanqu", "zip_code": "201900", "parent_code": "310100", "type": 2, "first_letter": "B" },
+  { "code": "310114", "name": "嘉定区", "pinyin": "jiadingqu", "zip_code": "201800", "parent_code": "310100", "type": 2, "first_letter": "J" },
+  { "code": "310115", "name": "浦东新区", "pinyin": "pudongxinqu", "zip_code": "200135", "parent_code": "310100", "type": 2, "first_letter": "P" },
+  { "code": "310116", "name": "金山区", "pinyin": "jinshanqu", "zip_code": "200540", "parent_code": "310100", "type": 2, "first_letter": "J" },
+  { "code": "310117", "name": "松江区", "pinyin": "songjiangqu", "zip_code": "201600", "parent_code": "310100", "type": 2, "first_letter": "S" },
+  { "code": "310118", "name": "青浦区", "pinyin": "qingpuqu", "zip_code": "201700", "parent_code": "310100", "type": 2, "first_letter": "Q" },
+  { "code": "310120", "name": "奉贤区", "pinyin": "fengxianqu", "zip_code": "201400", "parent_code": "310100", "type": 2, "first_letter": "F" },
+  { "code": "310151", "name": "崇明区", "pinyin": "chongmingqu", "zip_code": "202150", "parent_code": "310100", "type": 2, "first_letter": "C" },
+  { "code": "320000", "name": "江苏省", "pinyin": "jiangsusheng", "zip_code": "0", "type": 0, "first_letter": "J" },
+  { "code": "320100", "name": "南京市", "pinyin": "nanjingshi", "zip_code": "210000", "parent_code": "320000", "type": 1, "first_letter": "N" },
+  { "code": "320102", "name": "玄武区", "pinyin": "xuanwuqu", "zip_code": "210018", "parent_code": "320100", "type": 2, "first_letter": "X" },
+  { "code": "320104", "name": "秦淮区", "pinyin": "qinhuaiqu", "zip_code": "210001", "parent_code": "320100", "type": 2, "first_letter": "Q" },
+  { "code": "320105", "name": "建邺区", "pinyin": "jianyequ", "zip_code": "210004", "parent_code": "320100", "type": 2, "first_letter": "J" },
+  { "code": "320106", "name": "鼓楼区", "pinyin": "gulouqu", "zip_code": "210009", "parent_code": "320100", "type": 2, "first_letter": "G" },
+  { "code": "320111", "name": "浦口区", "pinyin": "pukouqu", "zip_code": "211800", "parent_code": "320100", "type": 2, "first_letter": "P" },
+  { "code": "320113", "name": "栖霞区", "pinyin": "qixiaqu", "zip_code": "210046", "parent_code": "320100", "type": 2, "first_letter": "Q" },
+  { "code": "320114", "name": "雨花台区", "pinyin": "yuhuataiqu", "zip_code": "210012", "parent_code": "320100", "type": 2, "first_letter": "Y" },
+  { "code": "320115", "name": "江宁区", "pinyin": "jiangningqu", "zip_code": "211100", "parent_code": "320100", "type": 2, "first_letter": "J" },
+  { "code": "320116", "name": "六合区", "pinyin": "liuhequ", "zip_code": "211500", "parent_code": "320100", "type": 2, "first_letter": "L" },
+  { "code": "320117", "name": "溧水区", "pinyin": "lishuiqu", "zip_code": "211200", "parent_code": "320100", "type": 2, "first_letter": "L" },
+  { "code": "320118", "name": "高淳区", "pinyin": "gaochunqu", "zip_code": "211300", "parent_code": "320100", "type": 2, "first_letter": "G" },
+  { "code": "320200", "name": "无锡市", "pinyin": "wuxishi", "zip_code": "214000", "parent_code": "320000", "type": 1, "first_letter": "W" },
+  { "code": "320205", "name": "锡山区", "pinyin": "xishanqu", "zip_code": "214021", "parent_code": "320200", "type": 2, "first_letter": "X" },
+  { "code": "320206", "name": "惠山区", "pinyin": "huishanqu", "zip_code": "214021", "parent_code": "320200", "type": 2, "first_letter": "H" },
+  { "code": "320211", "name": "滨湖区", "pinyin": "binhuqu", "zip_code": "214062", "parent_code": "320200", "type": 2, "first_letter": "B" },
+  { "code": "320213", "name": "梁溪区", "pinyin": "liangxiqu", "zip_code": "214400", "parent_code": "320200", "type": 2, "first_letter": "L" },
+  { "code": "320214", "name": "新吴区", "pinyin": "xinwuqu", "zip_code": "214200", "parent_code": "320200", "type": 2, "first_letter": "X" },
+  { "code": "320281", "name": "江阴市", "pinyin": "jiangyinshi", "zip_code": "214400", "parent_code": "320200", "type": 2, "first_letter": "J" },
+  { "code": "320282", "name": "宜兴市", "pinyin": "yixingshi", "zip_code": "214200", "parent_code": "320200", "type": 2, "first_letter": "Y" },
+  { "code": "320300", "name": "徐州市", "pinyin": "xuzhoushi", "zip_code": "221000", "parent_code": "320000", "type": 1, "first_letter": "X" },
+  { "code": "320302", "name": "鼓楼区", "pinyin": "gulouqu", "zip_code": "221005", "parent_code": "320300", "type": 2, "first_letter": "G" },
+  { "code": "320303", "name": "云龙区", "pinyin": "yunlongqu", "zip_code": "221009", "parent_code": "320300", "type": 2, "first_letter": "Y" },
+  { "code": "320305", "name": "贾汪区", "pinyin": "jiawangqu", "zip_code": "221011", "parent_code": "320300", "type": 2, "first_letter": "J" },
+  { "code": "320311", "name": "泉山区", "pinyin": "quanshanqu", "zip_code": "221006", "parent_code": "320300", "type": 2, "first_letter": "Q" },
+  { "code": "320312", "name": "铜山区", "pinyin": "tongshanqu", "zip_code": "221000", "parent_code": "320300", "type": 2, "first_letter": "T" },
+  { "code": "320321", "name": "丰县", "pinyin": "fengxian", "zip_code": "221700", "parent_code": "320300", "type": 2, "first_letter": "F" },
+  { "code": "320322", "name": "沛县", "pinyin": "peixian", "zip_code": "221600", "parent_code": "320300", "type": 2, "first_letter": "P" },
+  { "code": "320324", "name": "睢宁县", "pinyin": "suiningxian", "zip_code": "221200", "parent_code": "320300", "type": 2, "first_letter": "S" },
+  { "code": "320381", "name": "新沂市", "pinyin": "xinyishi", "zip_code": "221400", "parent_code": "320300", "type": 2, "first_letter": "X" },
+  { "code": "320382", "name": "邳州市", "pinyin": "pizhoushi", "zip_code": "221300", "parent_code": "320300", "type": 2, "first_letter": "P" },
+  { "code": "320400", "name": "常州市", "pinyin": "changzhoushi", "zip_code": "213000", "parent_code": "320000", "type": 1, "first_letter": "C" },
+  { "code": "320402", "name": "天宁区", "pinyin": "tianningqu", "zip_code": "213003", "parent_code": "320400", "type": 2, "first_letter": "T" },
+  { "code": "320404", "name": "钟楼区", "pinyin": "zhonglouqu", "zip_code": "213002", "parent_code": "320400", "type": 2, "first_letter": "Z" },
+  { "code": "320411", "name": "新北区", "pinyin": "xinbeiqu", "zip_code": "213001", "parent_code": "320400", "type": 2, "first_letter": "X" },
+  { "code": "320412", "name": "武进区", "pinyin": "wujinqu", "zip_code": "213161", "parent_code": "320400", "type": 2, "first_letter": "W" },
+  { "code": "320413", "name": "金坛区", "pinyin": "jintanqu", "zip_code": "213200", "parent_code": "320400", "type": 2, "first_letter": "J" },
+  { "code": "320481", "name": "溧阳市", "pinyin": "liyangshi", "zip_code": "213300", "parent_code": "320400", "type": 2, "first_letter": "L" },
+  { "code": "320500", "name": "苏州市", "pinyin": "suzhoushi", "zip_code": "215000", "parent_code": "320000", "type": 1, "first_letter": "S" },
+  { "code": "320505", "name": "虎丘区", "pinyin": "huqiuqu", "zip_code": "215004", "parent_code": "320500", "type": 2, "first_letter": "H" },
+  { "code": "320506", "name": "吴中区", "pinyin": "wuzhongqu", "zip_code": "215128", "parent_code": "320500", "type": 2, "first_letter": "W" },
+  { "code": "320507", "name": "相城区", "pinyin": "xiangchengqu", "zip_code": "215131", "parent_code": "320500", "type": 2, "first_letter": "X" },
+  { "code": "320508", "name": "姑苏区", "pinyin": "gusuqu", "zip_code": "215000", "parent_code": "320500", "type": 2, "first_letter": "G" },
+  { "code": "320509", "name": "吴江区", "pinyin": "wujiangqu", "zip_code": "215000", "parent_code": "320500", "type": 2, "first_letter": "W" },
+  { "code": "320581", "name": "常熟市", "pinyin": "changshushi", "zip_code": "215500", "parent_code": "320500", "type": 2, "first_letter": "C" },
+  { "code": "320582", "name": "张家港市", "pinyin": "zhangjiagangshi", "zip_code": "215600", "parent_code": "320500", "type": 2, "first_letter": "Z" },
+  { "code": "320583", "name": "昆山市", "pinyin": "kunshanshi", "zip_code": "215300", "parent_code": "320500", "type": 2, "first_letter": "K" },
+  { "code": "320585", "name": "太仓市", "pinyin": "taicangshi", "zip_code": "215400", "parent_code": "320500", "type": 2, "first_letter": "T" },
+  { "code": "320600", "name": "南通市", "pinyin": "nantongshi", "zip_code": "226000", "parent_code": "320000", "type": 1, "first_letter": "N" },
+  { "code": "320602", "name": "崇川区", "pinyin": "chongchuanqu", "zip_code": "226001", "parent_code": "320600", "type": 2, "first_letter": "C" },
+  { "code": "320611", "name": "港闸区", "pinyin": "gangzhaqu", "zip_code": "226001", "parent_code": "320600", "type": 2, "first_letter": "G" },
+  { "code": "320612", "name": "通州区", "pinyin": "tongzhouqu", "zip_code": "226300", "parent_code": "320600", "type": 2, "first_letter": "T" },
+  { "code": "320621", "name": "海安县", "pinyin": "haianxian", "zip_code": "226600", "parent_code": "320600", "type": 2, "first_letter": "H" },
+  { "code": "320623", "name": "如东县", "pinyin": "rudongxian", "zip_code": "226400", "parent_code": "320600", "type": 2, "first_letter": "R" },
+  { "code": "320681", "name": "启东市", "pinyin": "qidongshi", "zip_code": "226200", "parent_code": "320600", "type": 2, "first_letter": "Q" },
+  { "code": "320682", "name": "如皋市", "pinyin": "rugaoshi", "zip_code": "226500", "parent_code": "320600", "type": 2, "first_letter": "R" },
+  { "code": "320684", "name": "海门市", "pinyin": "haimenshi", "zip_code": "226100", "parent_code": "320600", "type": 2, "first_letter": "H" },
+  { "code": "320700", "name": "连云港市", "pinyin": "lianyungangshi", "zip_code": "222000", "parent_code": "320000", "type": 1, "first_letter": "L" },
+  { "code": "320703", "name": "连云区", "pinyin": "lianyunqu", "zip_code": "222042", "parent_code": "320700", "type": 2, "first_letter": "L" },
+  { "code": "320706", "name": "海州区", "pinyin": "haizhouqu", "zip_code": "222023", "parent_code": "320700", "type": 2, "first_letter": "H" },
+  { "code": "320707", "name": "赣榆区", "pinyin": "ganyuqu", "zip_code": "222100", "parent_code": "320700", "type": 2, "first_letter": "G" },
+  { "code": "320722", "name": "东海县", "pinyin": "donghaixian", "zip_code": "222300", "parent_code": "320700", "type": 2, "first_letter": "D" },
+  { "code": "320723", "name": "灌云县", "pinyin": "guanyunxian", "zip_code": "222200", "parent_code": "320700", "type": 2, "first_letter": "G" },
+  { "code": "320724", "name": "灌南县", "pinyin": "guannanxian", "zip_code": "223500", "parent_code": "320700", "type": 2, "first_letter": "G" },
+  { "code": "320800", "name": "淮安市", "pinyin": "huaianshi", "zip_code": "223001", "parent_code": "320000", "type": 1, "first_letter": "H" },
+  { "code": "320803", "name": "淮安区", "pinyin": "huaianqu", "zip_code": "223001", "parent_code": "320800", "type": 2, "first_letter": "H" },
+  { "code": "320804", "name": "淮阴区", "pinyin": "huaiyinqu", "zip_code": "223300", "parent_code": "320800", "type": 2, "first_letter": "H" },
+  { "code": "320812", "name": "清江浦区", "pinyin": "qingjiangpuqu", "zip_code": "223002", "parent_code": "320800", "type": 2, "first_letter": "Q" },
+  { "code": "320813", "name": "洪泽区", "pinyin": "hongzequ", "zip_code": "223100", "parent_code": "320800", "type": 2, "first_letter": "H" },
+  { "code": "320826", "name": "涟水县", "pinyin": "lianshuixian", "zip_code": "223400", "parent_code": "320800", "type": 2, "first_letter": "L" },
+  { "code": "320830", "name": "盱眙县", "pinyin": "xuyixian", "zip_code": "211700", "parent_code": "320800", "type": 2, "first_letter": "X" },
+  { "code": "320831", "name": "金湖县", "pinyin": "jinhuxian", "zip_code": "211600", "parent_code": "320800", "type": 2, "first_letter": "J" },
+  { "code": "320900", "name": "盐城市", "pinyin": "yanchengshi", "zip_code": "224000", "parent_code": "320000", "type": 1, "first_letter": "Y" },
+  { "code": "320902", "name": "亭湖区", "pinyin": "tinghuqu", "zip_code": "224005", "parent_code": "320900", "type": 2, "first_letter": "T" },
+  { "code": "320903", "name": "盐都区", "pinyin": "yanduqu", "zip_code": "224055", "parent_code": "320900", "type": 2, "first_letter": "Y" },
+  { "code": "320904", "name": "大丰区", "pinyin": "dafengqu", "zip_code": "224100", "parent_code": "320900", "type": 2, "first_letter": "D" },
+  { "code": "320921", "name": "响水县", "pinyin": "xiangshuixian", "zip_code": "224600", "parent_code": "320900", "type": 2, "first_letter": "X" },
+  { "code": "320922", "name": "滨海县", "pinyin": "binhaixian", "zip_code": "224500", "parent_code": "320900", "type": 2, "first_letter": "B" },
+  { "code": "320923", "name": "阜宁县", "pinyin": "funingxian", "zip_code": "224400", "parent_code": "320900", "type": 2, "first_letter": "F" },
+  { "code": "320924", "name": "射阳县", "pinyin": "sheyangxian", "zip_code": "224300", "parent_code": "320900", "type": 2, "first_letter": "S" },
+  { "code": "320925", "name": "建湖县", "pinyin": "jianhuxian", "zip_code": "224700", "parent_code": "320900", "type": 2, "first_letter": "J" },
+  { "code": "320981", "name": "东台市", "pinyin": "dongtaishi", "zip_code": "224200", "parent_code": "320900", "type": 2, "first_letter": "D" },
+  { "code": "321000", "name": "扬州市", "pinyin": "yangzhoushi", "zip_code": "225000", "parent_code": "320000", "type": 1, "first_letter": "Y" },
+  { "code": "321002", "name": "广陵区", "pinyin": "guanglingqu", "zip_code": "225002", "parent_code": "321000", "type": 2, "first_letter": "G" },
+  { "code": "321003", "name": "邗江区", "pinyin": "hanjiangqu", "zip_code": "225002", "parent_code": "321000", "type": 2, "first_letter": "H" },
+  { "code": "321012", "name": "江都区", "pinyin": "jiangduqu", "zip_code": "0", "parent_code": "321000", "type": 2, "first_letter": "J" },
+  { "code": "321023", "name": "宝应县", "pinyin": "baoyingxian", "zip_code": "225800", "parent_code": "321000", "type": 2, "first_letter": "B" },
+  { "code": "321081", "name": "仪征市", "pinyin": "yizhengshi", "zip_code": "211400", "parent_code": "321000", "type": 2, "first_letter": "Y" },
+  { "code": "321084", "name": "高邮市", "pinyin": "gaoyoushi", "zip_code": "225600", "parent_code": "321000", "type": 2, "first_letter": "G" },
+  { "code": "321100", "name": "镇江市", "pinyin": "zhenjiangshi", "zip_code": "212000", "parent_code": "320000", "type": 1, "first_letter": "Z" },
+  { "code": "321102", "name": "京口区", "pinyin": "jingkouqu", "zip_code": "212001", "parent_code": "321100", "type": 2, "first_letter": "J" },
+  { "code": "321111", "name": "润州区", "pinyin": "runzhouqu", "zip_code": "212004", "parent_code": "321100", "type": 2, "first_letter": "R" },
+  { "code": "321112", "name": "丹徒区", "pinyin": "dantuqu", "zip_code": "212001", "parent_code": "321100", "type": 2, "first_letter": "D" },
+  { "code": "321181", "name": "丹阳市", "pinyin": "danyangshi", "zip_code": "212300", "parent_code": "321100", "type": 2, "first_letter": "D" },
+  { "code": "321182", "name": "扬中市", "pinyin": "yangzhongshi", "zip_code": "212200", "parent_code": "321100", "type": 2, "first_letter": "Y" },
+  { "code": "321183", "name": "句容市", "pinyin": "jurongshi", "zip_code": "212400", "parent_code": "321100", "type": 2, "first_letter": "J" },
+  { "code": "321200", "name": "泰州市", "pinyin": "taizhoushi", "zip_code": "225300", "parent_code": "320000", "type": 1, "first_letter": "T" },
+  { "code": "321202", "name": "海陵区", "pinyin": "hailingqu", "zip_code": "225300", "parent_code": "321200", "type": 2, "first_letter": "H" },
+  { "code": "321203", "name": "高港区", "pinyin": "gaogangqu", "zip_code": "225321", "parent_code": "321200", "type": 2, "first_letter": "G" },
+  { "code": "321204", "name": "姜堰区", "pinyin": "jiangyanqu", "zip_code": "225500", "parent_code": "321200", "type": 2, "first_letter": "J" },
+  { "code": "321281", "name": "兴化市", "pinyin": "xinghuashi", "zip_code": "225700", "parent_code": "321200", "type": 2, "first_letter": "X" },
+  { "code": "321282", "name": "靖江市", "pinyin": "jingjiangshi", "zip_code": "214500", "parent_code": "321200", "type": 2, "first_letter": "J" },
+  { "code": "321283", "name": "泰兴市", "pinyin": "taixingshi", "zip_code": "225400", "parent_code": "321200", "type": 2, "first_letter": "T" },
+  { "code": "321300", "name": "宿迁市", "pinyin": "suqianshi", "zip_code": "223800", "parent_code": "320000", "type": 1, "first_letter": "S" },
+  { "code": "321302", "name": "宿城区", "pinyin": "suchengqu", "zip_code": "223800", "parent_code": "321300", "type": 2, "first_letter": "S" },
+  { "code": "321311", "name": "宿豫区", "pinyin": "suyuqu", "zip_code": "223800", "parent_code": "321300", "type": 2, "first_letter": "S" },
+  { "code": "321322", "name": "沭阳县", "pinyin": "shuyangxian", "zip_code": "223600", "parent_code": "321300", "type": 2, "first_letter": "S" },
+  { "code": "321323", "name": "泗阳县", "pinyin": "siyangxian", "zip_code": "223700", "parent_code": "321300", "type": 2, "first_letter": "S" },
+  { "code": "321324", "name": "泗洪县", "pinyin": "sihongxian", "zip_code": "223900", "parent_code": "321300", "type": 2, "first_letter": "S" },
+  { "code": "330000", "name": "浙江省", "pinyin": "zhejiangsheng", "zip_code": "0", "type": 0, "first_letter": "Z" },
+  { "code": "330100", "name": "杭州市", "pinyin": "hangzhoushi", "zip_code": "310000", "parent_code": "330000", "type": 1, "first_letter": "H" },
+  { "code": "330102", "name": "上城区", "pinyin": "shangchengqu", "zip_code": "310002", "parent_code": "330100", "type": 2, "first_letter": "S" },
+  { "code": "330105", "name": "拱墅区", "pinyin": "gongshuqu", "zip_code": "310011", "parent_code": "330100", "type": 2, "first_letter": "G" },
+  { "code": "330106", "name": "西湖区", "pinyin": "xihuqu", "zip_code": "310013", "parent_code": "330100", "type": 2, "first_letter": "X" },
+  { "code": "330108", "name": "滨江区", "pinyin": "binjiangqu", "zip_code": "310051", "parent_code": "330100", "type": 2, "first_letter": "B" },
+  { "code": "330109", "name": "萧山区", "pinyin": "xiaoshanqu", "zip_code": "311200", "parent_code": "330100", "type": 2, "first_letter": "X" },
+  { "code": "330110", "name": "余杭区", "pinyin": "yuhangqu", "zip_code": "311100", "parent_code": "330100", "type": 2, "first_letter": "Y" },
+  { "code": "330111", "name": "富阳区", "pinyin": "fuyangqu", "zip_code": "311400", "parent_code": "330100", "type": 2, "first_letter": "F" },
+  { "code": "330112", "name": "临安区", "pinyin": "linanqu", "zip_code": "311300", "parent_code": "330100", "type": 2, "first_letter": "L" },
+  { "code": "330113", "name": "临平区", "pinyin": "linpingqu", "zip_code": "311100", "parent_code": "330100", "type": 2, "first_letter": "L" },
+  { "code": "330114", "name": "钱塘区", "pinyin": "qiantangqu", "zip_code": "311100", "parent_code": "330100", "type": 2, "first_letter": "Q" },
+  { "code": "330122", "name": "桐庐县", "pinyin": "tongluxian", "zip_code": "311500", "parent_code": "330100", "type": 2, "first_letter": "T" },
+  { "code": "330127", "name": "淳安县", "pinyin": "chunanxian", "zip_code": "311700", "parent_code": "330100", "type": 2, "first_letter": "C" },
+  { "code": "330182", "name": "建德市", "pinyin": "jiandeshi", "zip_code": "311600", "parent_code": "330100", "type": 2, "first_letter": "J" },
+  { "code": "330200", "name": "宁波市", "pinyin": "ningboshi", "zip_code": "315000", "parent_code": "330000", "type": 1, "first_letter": "N" },
+  { "code": "330203", "name": "海曙区", "pinyin": "haishuqu", "zip_code": "315000", "parent_code": "330200", "type": 2, "first_letter": "H" },
+  { "code": "330205", "name": "江北区", "pinyin": "jiangbeiqu", "zip_code": "315040", "parent_code": "330200", "type": 2, "first_letter": "J" },
+  { "code": "330206", "name": "北仑区", "pinyin": "beilunqu", "zip_code": "315800", "parent_code": "330200", "type": 2, "first_letter": "B" },
+  { "code": "330211", "name": "镇海区", "pinyin": "zhenhaiqu", "zip_code": "315200", "parent_code": "330200", "type": 2, "first_letter": "Z" },
+  { "code": "330212", "name": "鄞州区", "pinyin": "yinzhouqu", "zip_code": "315100", "parent_code": "330200", "type": 2, "first_letter": "Y" },
+  { "code": "330213", "name": "奉化区", "pinyin": "fenghuaqu", "zip_code": "315500", "parent_code": "330200", "type": 2, "first_letter": "F" },
+  { "code": "330225", "name": "象山县", "pinyin": "xiangshanxian", "zip_code": "315700", "parent_code": "330200", "type": 2, "first_letter": "X" },
+  { "code": "330226", "name": "宁海县", "pinyin": "ninghaixian", "zip_code": "315600", "parent_code": "330200", "type": 2, "first_letter": "N" },
+  { "code": "330281", "name": "余姚市", "pinyin": "yuyaoshi", "zip_code": "315400", "parent_code": "330200", "type": 2, "first_letter": "Y" },
+  { "code": "330282", "name": "慈溪市", "pinyin": "cixishi", "zip_code": "315300", "parent_code": "330200", "type": 2, "first_letter": "C" },
+  { "code": "330300", "name": "温州市", "pinyin": "wenzhoushi", "zip_code": "325000", "parent_code": "330000", "type": 1, "first_letter": "W" },
+  { "code": "330302", "name": "鹿城区", "pinyin": "luchengqu", "zip_code": "325000", "parent_code": "330300", "type": 2, "first_letter": "L" },
+  { "code": "330303", "name": "龙湾区", "pinyin": "longwanqu", "zip_code": "325013", "parent_code": "330300", "type": 2, "first_letter": "L" },
+  { "code": "330304", "name": "瓯海区", "pinyin": "ouhaiqu", "zip_code": "325005", "parent_code": "330300", "type": 2, "first_letter": "O" },
+  { "code": "330305", "name": "洞头区", "pinyin": "dongtouqu", "zip_code": "325700", "parent_code": "330300", "type": 2, "first_letter": "D" },
+  { "code": "330324", "name": "永嘉县", "pinyin": "yongjiaxian", "zip_code": "315100", "parent_code": "330300", "type": 2, "first_letter": "Y" },
+  { "code": "330326", "name": "平阳县", "pinyin": "pingyangxian", "zip_code": "325400", "parent_code": "330300", "type": 2, "first_letter": "P" },
+  { "code": "330327", "name": "苍南县", "pinyin": "cangnanxian", "zip_code": "325800", "parent_code": "330300", "type": 2, "first_letter": "C" },
+  { "code": "330328", "name": "文成县", "pinyin": "wenchengxian", "zip_code": "325300", "parent_code": "330300", "type": 2, "first_letter": "W" },
+  { "code": "330329", "name": "泰顺县", "pinyin": "taishunxian", "zip_code": "325500", "parent_code": "330300", "type": 2, "first_letter": "T" },
+  { "code": "330381", "name": "瑞安市", "pinyin": "ruianshi", "zip_code": "325200", "parent_code": "330300", "type": 2, "first_letter": "R" },
+  { "code": "330382", "name": "乐清市", "pinyin": "leqingshi", "zip_code": "325600", "parent_code": "330300", "type": 2, "first_letter": "L" },
+  { "code": "330400", "name": "嘉兴市", "pinyin": "jiaxingshi", "zip_code": "314000", "parent_code": "330000", "type": 1, "first_letter": "J" },
+  { "code": "330402", "name": "南湖区", "pinyin": "nanhuqu", "zip_code": "314001", "parent_code": "330400", "type": 2, "first_letter": "N" },
+  { "code": "330411", "name": "秀洲区", "pinyin": "xiuzhouqu", "zip_code": "314001", "parent_code": "330400", "type": 2, "first_letter": "X" },
+  { "code": "330421", "name": "嘉善县", "pinyin": "jiashanxian", "zip_code": "314100", "parent_code": "330400", "type": 2, "first_letter": "J" },
+  { "code": "330424", "name": "海盐县", "pinyin": "haiyanxian", "zip_code": "314300", "parent_code": "330400", "type": 2, "first_letter": "H" },
+  { "code": "330481", "name": "海宁市", "pinyin": "hainingshi", "zip_code": "314400", "parent_code": "330400", "type": 2, "first_letter": "H" },
+  { "code": "330482", "name": "平湖市", "pinyin": "pinghushi", "zip_code": "314200", "parent_code": "330400", "type": 2, "first_letter": "P" },
+  { "code": "330483", "name": "桐乡市", "pinyin": "tongxiangshi", "zip_code": "314500", "parent_code": "330400", "type": 2, "first_letter": "T" },
+  { "code": "330500", "name": "湖州市", "pinyin": "huzhoushi", "zip_code": "313000", "parent_code": "330000", "type": 1, "first_letter": "H" },
+  { "code": "330502", "name": "吴兴区", "pinyin": "wuxingqu", "zip_code": "313000", "parent_code": "330500", "type": 2, "first_letter": "W" },
+  { "code": "330503", "name": "南浔区", "pinyin": "nanxunqu", "zip_code": "313009", "parent_code": "330500", "type": 2, "first_letter": "N" },
+  { "code": "330521", "name": "德清县", "pinyin": "deqingxian", "zip_code": "313200", "parent_code": "330500", "type": 2, "first_letter": "D" },
+  { "code": "330522", "name": "长兴县", "pinyin": "changxingxian", "zip_code": "313100", "parent_code": "330500", "type": 2, "first_letter": "C" },
+  { "code": "330523", "name": "安吉县", "pinyin": "anjixian", "zip_code": "313300", "parent_code": "330500", "type": 2, "first_letter": "A" },
+  { "code": "330600", "name": "绍兴市", "pinyin": "shaoxingshi", "zip_code": "312000", "parent_code": "330000", "type": 1, "first_letter": "S" },
+  { "code": "330602", "name": "越城区", "pinyin": "yuechengqu", "zip_code": "312000", "parent_code": "330600", "type": 2, "first_letter": "Y" },
+  { "code": "330603", "name": "柯桥区", "pinyin": "keqiaoqu", "zip_code": "312000", "parent_code": "330600", "type": 2, "first_letter": "K" },
+  { "code": "330604", "name": "上虞区", "pinyin": "shangyuqu", "zip_code": "312300", "parent_code": "330600", "type": 2, "first_letter": "S" },
+  { "code": "330624", "name": "新昌县", "pinyin": "xinchangxian", "zip_code": "312500", "parent_code": "330600", "type": 2, "first_letter": "X" },
+  { "code": "330681", "name": "诸暨市", "pinyin": "zhujishi", "zip_code": "311800", "parent_code": "330600", "type": 2, "first_letter": "Z" },
+  { "code": "330683", "name": "嵊州市", "pinyin": "shengzhoushi", "zip_code": "312400", "parent_code": "330600", "type": 2, "first_letter": "S" },
+  { "code": "330700", "name": "金华市", "pinyin": "jinhuashi", "zip_code": "321000", "parent_code": "330000", "type": 1, "first_letter": "J" },
+  { "code": "330702", "name": "婺城区", "pinyin": "wuchengqu", "zip_code": "321000", "parent_code": "330700", "type": 2, "first_letter": "W" },
+  { "code": "330703", "name": "金东区", "pinyin": "jindongqu", "zip_code": "321000", "parent_code": "330700", "type": 2, "first_letter": "J" },
+  { "code": "330723", "name": "武义县", "pinyin": "wuyixian", "zip_code": "321200", "parent_code": "330700", "type": 2, "first_letter": "W" },
+  { "code": "330726", "name": "浦江县", "pinyin": "pujiangxian", "zip_code": "322200", "parent_code": "330700", "type": 2, "first_letter": "P" },
+  { "code": "330727", "name": "磐安县", "pinyin": "pananxian", "zip_code": "322300", "parent_code": "330700", "type": 2, "first_letter": "P" },
+  { "code": "330781", "name": "兰溪市", "pinyin": "lanxishi", "zip_code": "321100", "parent_code": "330700", "type": 2, "first_letter": "L" },
+  { "code": "330782", "name": "义乌市", "pinyin": "yiwushi", "zip_code": "322000", "parent_code": "330700", "type": 2, "first_letter": "Y" },
+  { "code": "330783", "name": "东阳市", "pinyin": "dongyangshi", "zip_code": "322100", "parent_code": "330700", "type": 2, "first_letter": "D" },
+  { "code": "330784", "name": "永康市", "pinyin": "yongkangshi", "zip_code": "321300", "parent_code": "330700", "type": 2, "first_letter": "Y" },
+  { "code": "330800", "name": "衢州市", "pinyin": "quzhoushi", "zip_code": "324000", "parent_code": "330000", "type": 1, "first_letter": "Q" },
+  { "code": "330802", "name": "柯城区", "pinyin": "kechengqu", "zip_code": "324100", "parent_code": "330800", "type": 2, "first_letter": "K" },
+  { "code": "330803", "name": "衢江区", "pinyin": "qujiangqu", "zip_code": "324022", "parent_code": "330800", "type": 2, "first_letter": "Q" },
+  { "code": "330822", "name": "常山县", "pinyin": "changshanxian", "zip_code": "324200", "parent_code": "330800", "type": 2, "first_letter": "C" },
+  { "code": "330824", "name": "开化县", "pinyin": "kaihuaxian", "zip_code": "324300", "parent_code": "330800", "type": 2, "first_letter": "K" },
+  { "code": "330825", "name": "龙游县", "pinyin": "longyouxian", "zip_code": "324400", "parent_code": "330800", "type": 2, "first_letter": "L" },
+  { "code": "330881", "name": "江山市", "pinyin": "jiangshanshi", "zip_code": "324100", "parent_code": "330800", "type": 2, "first_letter": "J" },
+  { "code": "330900", "name": "舟山市", "pinyin": "zhoushanshi", "zip_code": "316000", "parent_code": "330000", "type": 1, "first_letter": "Z" },
+  { "code": "330902", "name": "定海区", "pinyin": "dinghaiqu", "zip_code": "316000", "parent_code": "330900", "type": 2, "first_letter": "D" },
+  { "code": "330903", "name": "普陀区", "pinyin": "putuoqu", "zip_code": "316100", "parent_code": "330900", "type": 2, "first_letter": "P" },
+  { "code": "330921", "name": "岱山县", "pinyin": "daishanxian", "zip_code": "316200", "parent_code": "330900", "type": 2, "first_letter": "D" },
+  { "code": "330922", "name": "嵊泗县", "pinyin": "shengsixian", "zip_code": "202450", "parent_code": "330900", "type": 2, "first_letter": "S" },
+  { "code": "331000", "name": "台州市", "pinyin": "taizhoushi", "zip_code": "318000", "parent_code": "330000", "type": 1, "first_letter": "T" },
+  { "code": "331002", "name": "椒江区", "pinyin": "jiaojiangqu", "zip_code": "318000", "parent_code": "331000", "type": 2, "first_letter": "J" },
+  { "code": "331003", "name": "黄岩区", "pinyin": "huangyanqu", "zip_code": "318020", "parent_code": "331000", "type": 2, "first_letter": "H" },
+  { "code": "331004", "name": "路桥区", "pinyin": "luqiaoqu", "zip_code": "318050", "parent_code": "331000", "type": 2, "first_letter": "L" },
+  { "code": "331022", "name": "三门县", "pinyin": "sanmenxian", "zip_code": "317100", "parent_code": "331000", "type": 2, "first_letter": "S" },
+  { "code": "331023", "name": "天台县", "pinyin": "tiantaixian", "zip_code": "317200", "parent_code": "331000", "type": 2, "first_letter": "T" },
+  { "code": "331024", "name": "仙居县", "pinyin": "xianjuxian", "zip_code": "317300", "parent_code": "331000", "type": 2, "first_letter": "X" },
+  { "code": "331081", "name": "温岭市", "pinyin": "wenlingshi", "zip_code": "317500", "parent_code": "331000", "type": 2, "first_letter": "W" },
+  { "code": "331082", "name": "临海市", "pinyin": "linhaishi", "zip_code": "317000", "parent_code": "331000", "type": 2, "first_letter": "L" },
+  { "code": "331083", "name": "玉环市", "pinyin": "yuhuanshi", "zip_code": "317600", "parent_code": "331000", "type": 2, "first_letter": "Y" },
+  { "code": "331100", "name": "丽水市", "pinyin": "lishuishi", "zip_code": "323000", "parent_code": "330000", "type": 1, "first_letter": "L" },
+  { "code": "331102", "name": "莲都区", "pinyin": "lianduqu", "zip_code": "323000", "parent_code": "331100", "type": 2, "first_letter": "L" },
+  { "code": "331121", "name": "青田县", "pinyin": "qingtianxian", "zip_code": "323900", "parent_code": "331100", "type": 2, "first_letter": "Q" },
+  { "code": "331122", "name": "缙云县", "pinyin": "jinyunxian", "zip_code": "321400", "parent_code": "331100", "type": 2, "first_letter": "J" },
+  { "code": "331123", "name": "遂昌县", "pinyin": "suichangxian", "zip_code": "323300", "parent_code": "331100", "type": 2, "first_letter": "S" },
+  { "code": "331124", "name": "松阳县", "pinyin": "songyangxian", "zip_code": "323400", "parent_code": "331100", "type": 2, "first_letter": "S" },
+  { "code": "331125", "name": "云和县", "pinyin": "yunhexian", "zip_code": "323600", "parent_code": "331100", "type": 2, "first_letter": "Y" },
+  { "code": "331126", "name": "庆元县", "pinyin": "qingyuanxian", "zip_code": "323800", "parent_code": "331100", "type": 2, "first_letter": "Q" },
+  { "code": "331127", "name": "景宁畲族自治县", "pinyin": "jingningshezuzizhixian", "zip_code": "323500", "parent_code": "331100", "type": 2, "first_letter": "J" },
+  { "code": "331181", "name": "龙泉市", "pinyin": "longquanshi", "zip_code": "323700", "parent_code": "331100", "type": 2, "first_letter": "L" },
+  { "code": "340000", "name": "安徽省", "pinyin": "anhuisheng", "zip_code": "0", "type": 0, "first_letter": "A" },
+  { "code": "340100", "name": "合肥市", "pinyin": "hefeishi", "zip_code": "230000", "parent_code": "340000", "type": 1, "first_letter": "H" },
+  { "code": "340102", "name": "瑶海区", "pinyin": "yaohaiqu", "zip_code": "230011", "parent_code": "340100", "type": 2, "first_letter": "Y" },
+  { "code": "340103", "name": "庐阳区", "pinyin": "luyangqu", "zip_code": "230001", "parent_code": "340100", "type": 2, "first_letter": "L" },
+  { "code": "340104", "name": "蜀山区", "pinyin": "shushanqu", "zip_code": "230031", "parent_code": "340100", "type": 2, "first_letter": "S" },
+  { "code": "340111", "name": "包河区", "pinyin": "baohequ", "zip_code": "230041", "parent_code": "340100", "type": 2, "first_letter": "B" },
+  { "code": "340121", "name": "长丰县", "pinyin": "changfengxian", "zip_code": "231100", "parent_code": "340100", "type": 2, "first_letter": "C" },
+  { "code": "340122", "name": "肥东县", "pinyin": "feidongxian", "zip_code": "231600", "parent_code": "340100", "type": 2, "first_letter": "F" },
+  { "code": "340123", "name": "肥西县", "pinyin": "feixixian", "zip_code": "231200", "parent_code": "340100", "type": 2, "first_letter": "F" },
+  { "code": "340124", "name": "庐江县", "pinyin": "lujiangxian", "zip_code": "231500", "parent_code": "340100", "type": 2, "first_letter": "L" },
+  { "code": "340181", "name": "巢湖市", "pinyin": "chaohushi", "zip_code": "238000", "parent_code": "340100", "type": 2, "first_letter": "C" },
+  { "code": "340200", "name": "芜湖市", "pinyin": "wuhushi", "zip_code": "241000", "parent_code": "340000", "type": 1, "first_letter": "W" },
+  { "code": "340202", "name": "镜湖区", "pinyin": "jinghuqu", "zip_code": "241000", "parent_code": "340200", "type": 2, "first_letter": "J" },
+  { "code": "340203", "name": "弋江区", "pinyin": "yijiangqu", "zip_code": "241000", "parent_code": "340200", "type": 2, "first_letter": "Y" },
+  { "code": "340207", "name": "鸠江区", "pinyin": "jiujiangqu", "zip_code": "241000", "parent_code": "340200", "type": 2, "first_letter": "J" },
+  { "code": "340208", "name": "三山区", "pinyin": "sanshanqu", "zip_code": "241000", "parent_code": "340200", "type": 2, "first_letter": "S" },
+  { "code": "340221", "name": "芜湖县", "pinyin": "wuhuxian", "zip_code": "241100", "parent_code": "340200", "type": 2, "first_letter": "W" },
+  { "code": "340222", "name": "繁昌县", "pinyin": "fanchangxian", "zip_code": "241200", "parent_code": "340200", "type": 2, "first_letter": "F" },
+  { "code": "340223", "name": "南陵县", "pinyin": "nanlingxian", "zip_code": "242400", "parent_code": "340200", "type": 2, "first_letter": "N" },
+  { "code": "340225", "name": "无为县", "pinyin": "wuweixian", "zip_code": "238300", "parent_code": "340200", "type": 2, "first_letter": "W" },
+  { "code": "340300", "name": "蚌埠市", "pinyin": "bengbushi", "zip_code": "233000", "parent_code": "340000", "type": 1, "first_letter": "B" },
+  { "code": "340302", "name": "龙子湖区", "pinyin": "longzihuqu", "zip_code": "233000", "parent_code": "340300", "type": 2, "first_letter": "L" },
+  { "code": "340303", "name": "蚌山区", "pinyin": "bengshanqu", "zip_code": "233000", "parent_code": "340300", "type": 2, "first_letter": "B" },
+  { "code": "340304", "name": "禹会区", "pinyin": "yuhuiqu", "zip_code": "233000", "parent_code": "340300", "type": 2, "first_letter": "Y" },
+  { "code": "340311", "name": "淮上区", "pinyin": "huaishangqu", "zip_code": "233000", "parent_code": "340300", "type": 2, "first_letter": "H" },
+  { "code": "340321", "name": "怀远县", "pinyin": "huaiyuanxian", "zip_code": "233400", "parent_code": "340300", "type": 2, "first_letter": "H" },
+  { "code": "340322", "name": "五河县", "pinyin": "wuhexian", "zip_code": "233300", "parent_code": "340300", "type": 2, "first_letter": "W" },
+  { "code": "340323", "name": "固镇县", "pinyin": "guzhenxian", "zip_code": "233700", "parent_code": "340300", "type": 2, "first_letter": "G" },
+  { "code": "340400", "name": "淮南市", "pinyin": "huainanshi", "zip_code": "232000", "parent_code": "340000", "type": 1, "first_letter": "H" },
+  { "code": "340402", "name": "大通区", "pinyin": "datongqu", "zip_code": "232033", "parent_code": "340400", "type": 2, "first_letter": "D" },
+  { "code": "340403", "name": "田家庵区", "pinyin": "tianjiaanqu", "zip_code": "232000", "parent_code": "340400", "type": 2, "first_letter": "T" },
+  { "code": "340404", "name": "谢家集区", "pinyin": "xiejiajiqu", "zip_code": "232052", "parent_code": "340400", "type": 2, "first_letter": "X" },
+  { "code": "340405", "name": "八公山区", "pinyin": "bagongshanqu", "zip_code": "232072", "parent_code": "340400", "type": 2, "first_letter": "B" },
+  { "code": "340406", "name": "潘集区", "pinyin": "panjiqu", "zip_code": "232082", "parent_code": "340400", "type": 2, "first_letter": "P" },
+  { "code": "340421", "name": "凤台县", "pinyin": "fengtaixian", "zip_code": "232100", "parent_code": "340400", "type": 2, "first_letter": "F" },
+  { "code": "340422", "name": "寿县", "pinyin": "shouxian", "zip_code": "232100", "parent_code": "340400", "type": 2, "first_letter": "S" },
+  { "code": "340500", "name": "马鞍山市", "pinyin": "maanshanshi", "zip_code": "243000", "parent_code": "340000", "type": 1, "first_letter": "M" },
+  { "code": "340503", "name": "花山区", "pinyin": "huashanqu", "zip_code": "243000", "parent_code": "340500", "type": 2, "first_letter": "H" },
+  { "code": "340504", "name": "雨山区", "pinyin": "yushanqu", "zip_code": "243071", "parent_code": "340500", "type": 2, "first_letter": "Y" },
+  { "code": "340506", "name": "博望区", "pinyin": "bowangqu", "zip_code": "243000", "parent_code": "340500", "type": 2, "first_letter": "B" },
+  { "code": "340521", "name": "当涂县", "pinyin": "dangtuxian", "zip_code": "243100", "parent_code": "340500", "type": 2, "first_letter": "D" },
+  { "code": "340522", "name": "含山县", "pinyin": "hanshanxian", "zip_code": "238100", "parent_code": "340500", "type": 2, "first_letter": "H" },
+  { "code": "340523", "name": "和县", "pinyin": "hexian", "zip_code": "238200", "parent_code": "340500", "type": 2, "first_letter": "H" },
+  { "code": "340600", "name": "淮北市", "pinyin": "huaibeishi", "zip_code": "235000", "parent_code": "340000", "type": 1, "first_letter": "H" },
+  { "code": "340602", "name": "杜集区", "pinyin": "dujiqu", "zip_code": "235000", "parent_code": "340600", "type": 2, "first_letter": "D" },
+  { "code": "340603", "name": "相山区", "pinyin": "xiangshanqu", "zip_code": "235000", "parent_code": "340600", "type": 2, "first_letter": "X" },
+  { "code": "340604", "name": "烈山区", "pinyin": "lieshanqu", "zip_code": "235000", "parent_code": "340600", "type": 2, "first_letter": "L" },
+  { "code": "340621", "name": "濉溪县", "pinyin": "suixixian", "zip_code": "235100", "parent_code": "340600", "type": 2, "first_letter": "S" },
+  { "code": "340700", "name": "铜陵市", "pinyin": "tonglingshi", "zip_code": "244000", "parent_code": "340000", "type": 1, "first_letter": "T" },
+  { "code": "340705", "name": "铜官区", "pinyin": "tongguanqu", "zip_code": "244000", "parent_code": "340700", "type": 2, "first_letter": "T" },
+  { "code": "340706", "name": "义安区", "pinyin": "yianqu", "zip_code": "244000", "parent_code": "340700", "type": 2, "first_letter": "Y" },
+  { "code": "340711", "name": "郊区", "pinyin": "jiaoqu", "zip_code": "244000", "parent_code": "340700", "type": 2, "first_letter": "J" },
+  { "code": "340722", "name": "枞阳县", "pinyin": "congyangxian", "zip_code": "244100", "parent_code": "340700", "type": 2, "first_letter": "C" },
+  { "code": "340800", "name": "安庆市", "pinyin": "anqingshi", "zip_code": "246000", "parent_code": "340000", "type": 1, "first_letter": "A" },
+  { "code": "340802", "name": "迎江区", "pinyin": "yingjiangqu", "zip_code": "246001", "parent_code": "340800", "type": 2, "first_letter": "Y" },
+  { "code": "340803", "name": "大观区", "pinyin": "daguanqu", "zip_code": "246002", "parent_code": "340800", "type": 2, "first_letter": "D" },
+  { "code": "340811", "name": "宜秀区", "pinyin": "yixiuqu", "zip_code": "246003", "parent_code": "340800", "type": 2, "first_letter": "Y" },
+  { "code": "340822", "name": "怀宁县", "pinyin": "huainingxian", "zip_code": "246100", "parent_code": "340800", "type": 2, "first_letter": "H" },
+  { "code": "340824", "name": "潜山县", "pinyin": "qianshanxian", "zip_code": "246300", "parent_code": "340800", "type": 2, "first_letter": "Q" },
+  { "code": "340825", "name": "太湖县", "pinyin": "taihuxian", "zip_code": "246400", "parent_code": "340800", "type": 2, "first_letter": "T" },
+  { "code": "340826", "name": "宿松县", "pinyin": "susongxian", "zip_code": "246500", "parent_code": "340800", "type": 2, "first_letter": "S" },
+  { "code": "340827", "name": "望江县", "pinyin": "wangjiangxian", "zip_code": "246200", "parent_code": "340800", "type": 2, "first_letter": "W" },
+  { "code": "340828", "name": "岳西县", "pinyin": "yuexixian", "zip_code": "246600", "parent_code": "340800", "type": 2, "first_letter": "Y" },
+  { "code": "340881", "name": "桐城市", "pinyin": "tongchengshi", "zip_code": "231400", "parent_code": "340800", "type": 2, "first_letter": "T" },
+  { "code": "341000", "name": "黄山市", "pinyin": "huangshanshi", "zip_code": "245000", "parent_code": "340000", "type": 1, "first_letter": "H" },
+  { "code": "341002", "name": "屯溪区", "pinyin": "tunxiqu", "zip_code": "245000", "parent_code": "341000", "type": 2, "first_letter": "T" },
+  { "code": "341003", "name": "黄山区", "pinyin": "huangshanqu", "zip_code": "242700", "parent_code": "341000", "type": 2, "first_letter": "H" },
+  { "code": "341004", "name": "徽州区", "pinyin": "huizhouqu", "zip_code": "245061", "parent_code": "341000", "type": 2, "first_letter": "H" },
+  { "code": "341021", "name": "歙县", "pinyin": "shexian", "zip_code": "245200", "parent_code": "341000", "type": 2, "first_letter": "S" },
+  { "code": "341022", "name": "休宁县", "pinyin": "xiuningxian", "zip_code": "245400", "parent_code": "341000", "type": 2, "first_letter": "X" },
+  { "code": "341023", "name": "黟县", "pinyin": "yixian", "zip_code": "245500", "parent_code": "341000", "type": 2, "first_letter": "Y" },
+  { "code": "341024", "name": "祁门县", "pinyin": "qimenxian", "zip_code": "245600", "parent_code": "341000", "type": 2, "first_letter": "Q" },
+  { "code": "341100", "name": "滁州市", "pinyin": "chuzhoushi", "zip_code": "239000", "parent_code": "340000", "type": 1, "first_letter": "C" },
+  { "code": "341102", "name": "琅琊区", "pinyin": "langyaqu", "zip_code": "239000", "parent_code": "341100", "type": 2, "first_letter": "L" },
+  { "code": "341103", "name": "南谯区", "pinyin": "nanqiaoqu", "zip_code": "239000", "parent_code": "341100", "type": 2, "first_letter": "N" },
+  { "code": "341122", "name": "来安县", "pinyin": "laianxian", "zip_code": "239200", "parent_code": "341100", "type": 2, "first_letter": "L" },
+  { "code": "341124", "name": "全椒县", "pinyin": "quanjiaoxian", "zip_code": "239500", "parent_code": "341100", "type": 2, "first_letter": "Q" },
+  { "code": "341125", "name": "定远县", "pinyin": "dingyuanxian", "zip_code": "233200", "parent_code": "341100", "type": 2, "first_letter": "D" },
+  { "code": "341126", "name": "凤阳县", "pinyin": "fengyangxian", "zip_code": "233100", "parent_code": "341100", "type": 2, "first_letter": "F" },
+  { "code": "341181", "name": "天长市", "pinyin": "tianchangshi", "zip_code": "239300", "parent_code": "341100", "type": 2, "first_letter": "T" },
+  { "code": "341182", "name": "明光市", "pinyin": "mingguangshi", "zip_code": "239400", "parent_code": "341100", "type": 2, "first_letter": "M" },
+  { "code": "341200", "name": "阜阳市", "pinyin": "fuyangshi", "zip_code": "236000", "parent_code": "340000", "type": 1, "first_letter": "F" },
+  { "code": "341202", "name": "颍州区", "pinyin": "yingzhouqu", "zip_code": "236001", "parent_code": "341200", "type": 2, "first_letter": "Y" },
+  { "code": "341203", "name": "颍东区", "pinyin": "yingdongqu", "zip_code": "236058", "parent_code": "341200", "type": 2, "first_letter": "Y" },
+  { "code": "341204", "name": "颍泉区", "pinyin": "yingquanqu", "zip_code": "236045", "parent_code": "341200", "type": 2, "first_letter": "Y" },
+  { "code": "341221", "name": "临泉县", "pinyin": "linquanxian", "zip_code": "236400", "parent_code": "341200", "type": 2, "first_letter": "L" },
+  { "code": "341222", "name": "太和县", "pinyin": "taihexian", "zip_code": "236600", "parent_code": "341200", "type": 2, "first_letter": "T" },
+  { "code": "341225", "name": "阜南县", "pinyin": "funanxian", "zip_code": "236300", "parent_code": "341200", "type": 2, "first_letter": "F" },
+  { "code": "341226", "name": "颍上县", "pinyin": "yingshangxian", "zip_code": "236200", "parent_code": "341200", "type": 2, "first_letter": "Y" },
+  { "code": "341282", "name": "界首市", "pinyin": "jieshoushi", "zip_code": "236500", "parent_code": "341200", "type": 2, "first_letter": "J" },
+  { "code": "341300", "name": "宿州市", "pinyin": "suzhoushi", "zip_code": "234000", "parent_code": "340000", "type": 1, "first_letter": "S" },
+  { "code": "341302", "name": "埇桥区", "pinyin": "yongqiaoqu", "zip_code": "234000", "parent_code": "341300", "type": 2, "first_letter": "Y" },
+  { "code": "341321", "name": "砀山县", "pinyin": "dangshanxian", "zip_code": "235300", "parent_code": "341300", "type": 2, "first_letter": "D" },
+  { "code": "341322", "name": "萧县", "pinyin": "xiaoxian", "zip_code": "235200", "parent_code": "341300", "type": 2, "first_letter": "X" },
+  { "code": "341323", "name": "灵璧县", "pinyin": "lingbixian", "zip_code": "234200", "parent_code": "341300", "type": 2, "first_letter": "L" },
+  { "code": "341324", "name": "泗县", "pinyin": "sixian", "zip_code": "234300", "parent_code": "341300", "type": 2, "first_letter": "S" },
+  { "code": "341500", "name": "六安市", "pinyin": "liuanshi", "zip_code": "237000", "parent_code": "340000", "type": 1, "first_letter": "L" },
+  { "code": "341502", "name": "金安区", "pinyin": "jinanqu", "zip_code": "237000", "parent_code": "341500", "type": 2, "first_letter": "J" },
+  { "code": "341503", "name": "裕安区", "pinyin": "yuanqu", "zip_code": "237010", "parent_code": "341500", "type": 2, "first_letter": "Y" },
+  { "code": "341504", "name": "叶集区", "pinyin": "xejiqu", "zip_code": "237431", "parent_code": "341500", "type": 2, "first_letter": "X" },
+  { "code": "341522", "name": "霍邱县", "pinyin": "huoqiuxian", "zip_code": "237400", "parent_code": "341500", "type": 2, "first_letter": "H" },
+  { "code": "341523", "name": "舒城县", "pinyin": "shuchengxian", "zip_code": "231300", "parent_code": "341500", "type": 2, "first_letter": "S" },
+  { "code": "341524", "name": "金寨县", "pinyin": "jinzhaixian", "zip_code": "237300", "parent_code": "341500", "type": 2, "first_letter": "J" },
+  { "code": "341525", "name": "霍山县", "pinyin": "huoshanxian", "zip_code": "237200", "parent_code": "341500", "type": 2, "first_letter": "H" },
+  { "code": "341600", "name": "亳州市", "pinyin": "bozhoushi", "zip_code": "236000", "parent_code": "340000", "type": 1, "first_letter": "B" },
+  { "code": "341602", "name": "谯城区", "pinyin": "qiaochengqu", "zip_code": "236800", "parent_code": "341600", "type": 2, "first_letter": "Q" },
+  { "code": "341621", "name": "涡阳县", "pinyin": "guoyangxian", "zip_code": "233600", "parent_code": "341600", "type": 2, "first_letter": "G" },
+  { "code": "341622", "name": "蒙城县", "pinyin": "mengchengxian", "zip_code": "233500", "parent_code": "341600", "type": 2, "first_letter": "M" },
+  { "code": "341623", "name": "利辛县", "pinyin": "lixinxian", "zip_code": "236700", "parent_code": "341600", "type": 2, "first_letter": "L" },
+  { "code": "341700", "name": "池州市", "pinyin": "chizhoushi", "zip_code": "247100", "parent_code": "340000", "type": 1, "first_letter": "C" },
+  { "code": "341702", "name": "贵池区", "pinyin": "guichiqu", "zip_code": "247100", "parent_code": "341700", "type": 2, "first_letter": "G" },
+  { "code": "341721", "name": "东至县", "pinyin": "dongzhixian", "zip_code": "247200", "parent_code": "341700", "type": 2, "first_letter": "D" },
+  { "code": "341722", "name": "石台县", "pinyin": "shitaixian", "zip_code": "245100", "parent_code": "341700", "type": 2, "first_letter": "S" },
+  { "code": "341723", "name": "青阳县", "pinyin": "qingyangxian", "zip_code": "242800", "parent_code": "341700", "type": 2, "first_letter": "Q" },
+  { "code": "341800", "name": "宣城市", "pinyin": "xuanchengshi", "zip_code": "242000", "parent_code": "340000", "type": 1, "first_letter": "X" },
+  { "code": "341802", "name": "宣州区", "pinyin": "xuanzhouqu", "zip_code": "242000", "parent_code": "341800", "type": 2, "first_letter": "X" },
+  { "code": "341821", "name": "郎溪县", "pinyin": "langxixian", "zip_code": "242100", "parent_code": "341800", "type": 2, "first_letter": "L" },
+  { "code": "341822", "name": "广德县", "pinyin": "guangdexian", "zip_code": "242200", "parent_code": "341800", "type": 2, "first_letter": "G" },
+  { "code": "341823", "name": "泾县", "pinyin": "jingxian", "zip_code": "242500", "parent_code": "341800", "type": 2, "first_letter": "J" },
+  { "code": "341824", "name": "绩溪县", "pinyin": "jixixian", "zip_code": "245300", "parent_code": "341800", "type": 2, "first_letter": "J" },
+  { "code": "341825", "name": "旌德县", "pinyin": "jingdexian", "zip_code": "242600", "parent_code": "341800", "type": 2, "first_letter": "J" },
+  { "code": "341881", "name": "宁国市", "pinyin": "ningguoshi", "zip_code": "242300", "parent_code": "341800", "type": 2, "first_letter": "N" },
+  { "code": "350000", "name": "福建省", "pinyin": "fujiansheng", "zip_code": "0", "type": 0, "first_letter": "F" },
+  { "code": "350100", "name": "福州市", "pinyin": "fuzhoushi", "zip_code": "350000", "parent_code": "350000", "type": 1, "first_letter": "F" },
+  { "code": "350102", "name": "鼓楼区", "pinyin": "gulouqu", "zip_code": "350001", "parent_code": "350100", "type": 2, "first_letter": "G" },
+  { "code": "350103", "name": "台江区", "pinyin": "taijiangqu", "zip_code": "350004", "parent_code": "350100", "type": 2, "first_letter": "T" },
+  { "code": "350104", "name": "仓山区", "pinyin": "cangshanqu", "zip_code": "350007", "parent_code": "350100", "type": 2, "first_letter": "C" },
+  { "code": "350105", "name": "马尾区", "pinyin": "maweiqu", "zip_code": "350015", "parent_code": "350100", "type": 2, "first_letter": "M" },
+  { "code": "350111", "name": "晋安区", "pinyin": "jinanqu", "zip_code": "350011", "parent_code": "350100", "type": 2, "first_letter": "J" },
+  { "code": "350112", "name": "长乐区", "pinyin": "changlequ", "zip_code": "350200", "parent_code": "350100", "type": 2, "first_letter": "C" },
+  { "code": "350121", "name": "闽侯县", "pinyin": "minhouxian", "zip_code": "350100", "parent_code": "350100", "type": 2, "first_letter": "M" },
+  { "code": "350122", "name": "连江县", "pinyin": "lianjiangxian", "zip_code": "350500", "parent_code": "350100", "type": 2, "first_letter": "L" },
+  { "code": "350123", "name": "罗源县", "pinyin": "luoyuanxian", "zip_code": "350600", "parent_code": "350100", "type": 2, "first_letter": "L" },
+  { "code": "350124", "name": "闽清县", "pinyin": "minqingxian", "zip_code": "350800", "parent_code": "350100", "type": 2, "first_letter": "M" },
+  { "code": "350125", "name": "永泰县", "pinyin": "yongtaixian", "zip_code": "350700", "parent_code": "350100", "type": 2, "first_letter": "Y" },
+  { "code": "350128", "name": "平潭县", "pinyin": "pingtanxian", "zip_code": "350400", "parent_code": "350100", "type": 2, "first_letter": "P" },
+  { "code": "350181", "name": "福清市", "pinyin": "fuqingshi", "zip_code": "350300", "parent_code": "350100", "type": 2, "first_letter": "F" },
+  { "code": "350200", "name": "厦门市", "pinyin": "xiamenshi", "zip_code": "361000", "parent_code": "350000", "type": 1, "first_letter": "X" },
+  { "code": "350203", "name": "思明区", "pinyin": "simingqu", "zip_code": "361001", "parent_code": "350200", "type": 2, "first_letter": "S" },
+  { "code": "350205", "name": "海沧区", "pinyin": "haicangqu", "zip_code": "361026", "parent_code": "350200", "type": 2, "first_letter": "H" },
+  { "code": "350206", "name": "湖里区", "pinyin": "huliqu", "zip_code": "361006", "parent_code": "350200", "type": 2, "first_letter": "H" },
+  { "code": "350211", "name": "集美区", "pinyin": "jimeiqu", "zip_code": "361021", "parent_code": "350200", "type": 2, "first_letter": "J" },
+  { "code": "350212", "name": "同安区", "pinyin": "tonganqu", "zip_code": "361100", "parent_code": "350200", "type": 2, "first_letter": "T" },
+  { "code": "350213", "name": "翔安区", "pinyin": "xianganqu", "zip_code": "361101", "parent_code": "350200", "type": 2, "first_letter": "X" },
+  { "code": "350300", "name": "莆田市", "pinyin": "putianshi", "zip_code": "351100", "parent_code": "350000", "type": 1, "first_letter": "P" },
+  { "code": "350302", "name": "城厢区", "pinyin": "chengxiangqu", "zip_code": "351100", "parent_code": "350300", "type": 2, "first_letter": "C" },
+  { "code": "350303", "name": "涵江区", "pinyin": "hanjiangqu", "zip_code": "351111", "parent_code": "350300", "type": 2, "first_letter": "H" },
+  { "code": "350304", "name": "荔城区", "pinyin": "lichengqu", "zip_code": "351100", "parent_code": "350300", "type": 2, "first_letter": "L" },
+  { "code": "350305", "name": "秀屿区", "pinyin": "xiuyuqu", "zip_code": "351152", "parent_code": "350300", "type": 2, "first_letter": "X" },
+  { "code": "350322", "name": "仙游县", "pinyin": "xianyouxian", "zip_code": "351200", "parent_code": "350300", "type": 2, "first_letter": "X" },
+  { "code": "350400", "name": "三明市", "pinyin": "sanmingshi", "zip_code": "365000", "parent_code": "350000", "type": 1, "first_letter": "S" },
+  { "code": "350404", "name": "三元区", "pinyin": "sanyuanqu", "zip_code": "365001", "parent_code": "350400", "type": 2, "first_letter": "S" },
+  { "code": "350405", "name": "沙县区", "pinyin": "shaxianqu", "zip_code": "365500", "parent_code": "350400", "type": 2, "first_letter": "S" },
+  { "code": "350421", "name": "明溪县", "pinyin": "mingxixian", "zip_code": "365200", "parent_code": "350400", "type": 2, "first_letter": "M" },
+  { "code": "350423", "name": "清流县", "pinyin": "qingliuxian", "zip_code": "365300", "parent_code": "350400", "type": 2, "first_letter": "Q" },
+  { "code": "350424", "name": "宁化县", "pinyin": "ninghuaxian", "zip_code": "365400", "parent_code": "350400", "type": 2, "first_letter": "N" },
+  { "code": "350425", "name": "大田县", "pinyin": "datianxian", "zip_code": "366100", "parent_code": "350400", "type": 2, "first_letter": "D" },
+  { "code": "350426", "name": "尤溪县", "pinyin": "youxixian", "zip_code": "365100", "parent_code": "350400", "type": 2, "first_letter": "Y" },
+  { "code": "350428", "name": "将乐县", "pinyin": "jianglexian", "zip_code": "353300", "parent_code": "350400", "type": 2, "first_letter": "J" },
+  { "code": "350429", "name": "泰宁县", "pinyin": "tainingxian", "zip_code": "354400", "parent_code": "350400", "type": 2, "first_letter": "T" },
+  { "code": "350430", "name": "建宁县", "pinyin": "jianningxian", "zip_code": "354500", "parent_code": "350400", "type": 2, "first_letter": "J" },
+  { "code": "350481", "name": "永安市", "pinyin": "yonganshi", "zip_code": "366000", "parent_code": "350400", "type": 2, "first_letter": "Y" },
+  { "code": "350500", "name": "泉州市", "pinyin": "quanzhoushi", "zip_code": "362000", "parent_code": "350000", "type": 1, "first_letter": "Q" },
+  { "code": "350502", "name": "鲤城区", "pinyin": "lichengqu", "zip_code": "362000", "parent_code": "350500", "type": 2, "first_letter": "L" },
+  { "code": "350503", "name": "丰泽区", "pinyin": "fengzequ", "zip_code": "362000", "parent_code": "350500", "type": 2, "first_letter": "F" },
+  { "code": "350504", "name": "洛江区", "pinyin": "luojiangqu", "zip_code": "362011", "parent_code": "350500", "type": 2, "first_letter": "L" },
+  { "code": "350505", "name": "泉港区", "pinyin": "quangangqu", "zip_code": "362114", "parent_code": "350500", "type": 2, "first_letter": "Q" },
+  { "code": "350521", "name": "惠安县", "pinyin": "huianxian", "zip_code": "362100", "parent_code": "350500", "type": 2, "first_letter": "H" },
+  { "code": "350524", "name": "安溪县", "pinyin": "anxixian", "zip_code": "362400", "parent_code": "350500", "type": 2, "first_letter": "A" },
+  { "code": "350525", "name": "永春县", "pinyin": "yongchunxian", "zip_code": "362600", "parent_code": "350500", "type": 2, "first_letter": "Y" },
+  { "code": "350526", "name": "德化县", "pinyin": "dehuaxian", "zip_code": "362500", "parent_code": "350500", "type": 2, "first_letter": "D" },
+  { "code": "350527", "name": "金门县", "pinyin": "jinmenxian", "zip_code": "362000", "parent_code": "350500", "type": 2, "first_letter": "J" },
+  { "code": "350581", "name": "石狮市", "pinyin": "shishishi", "zip_code": "362700", "parent_code": "350500", "type": 2, "first_letter": "S" },
+  { "code": "350582", "name": "晋江市", "pinyin": "jinjiangshi", "zip_code": "362200", "parent_code": "350500", "type": 2, "first_letter": "J" },
+  { "code": "350583", "name": "南安市", "pinyin": "nananshi", "zip_code": "362300", "parent_code": "350500", "type": 2, "first_letter": "N" },
+  { "code": "350600", "name": "漳州市", "pinyin": "zhangzhoushi", "zip_code": "363000", "parent_code": "350000", "type": 1, "first_letter": "Z" },
+  { "code": "350602", "name": "芗城区", "pinyin": "xiangchengqu", "zip_code": "363000", "parent_code": "350600", "type": 2, "first_letter": "X" },
+  { "code": "350603", "name": "龙文区", "pinyin": "longwenqu", "zip_code": "363005", "parent_code": "350600", "type": 2, "first_letter": "L" },
+  { "code": "350604", "name": "龙海区", "pinyin": "longhaiqu", "zip_code": "363100", "parent_code": "350600", "type": 2, "first_letter": "L" },
+  { "code": "350605", "name": "长泰区", "pinyin": "changtaiqu", "zip_code": "363900", "parent_code": "350600", "type": 2, "first_letter": "C" },
+  { "code": "350622", "name": "云霄县", "pinyin": "yunxiaoxian", "zip_code": "363300", "parent_code": "350600", "type": 2, "first_letter": "Y" },
+  { "code": "350623", "name": "漳浦县", "pinyin": "zhangpuxian", "zip_code": "363200", "parent_code": "350600", "type": 2, "first_letter": "Z" },
+  { "code": "350624", "name": "诏安县", "pinyin": "zhaoanxian", "zip_code": "363500", "parent_code": "350600", "type": 2, "first_letter": "Z" },
+  { "code": "350626", "name": "东山县", "pinyin": "dongshanxian", "zip_code": "363400", "parent_code": "350600", "type": 2, "first_letter": "D" },
+  { "code": "350627", "name": "南靖县", "pinyin": "nanjingxian", "zip_code": "363600", "parent_code": "350600", "type": 2, "first_letter": "N" },
+  { "code": "350628", "name": "平和县", "pinyin": "pinghexian", "zip_code": "363700", "parent_code": "350600", "type": 2, "first_letter": "P" },
+  { "code": "350629", "name": "华安县", "pinyin": "huaanxian", "zip_code": "363800", "parent_code": "350600", "type": 2, "first_letter": "H" },
+  { "code": "350700", "name": "南平市", "pinyin": "nanpingshi", "zip_code": "353000", "parent_code": "350000", "type": 1, "first_letter": "N" },
+  { "code": "350702", "name": "延平区", "pinyin": "yanpingqu", "zip_code": "353000", "parent_code": "350700", "type": 2, "first_letter": "Y" },
+  { "code": "350703", "name": "建阳区", "pinyin": "jianyangqu", "zip_code": "354200", "parent_code": "350700", "type": 2, "first_letter": "J" },
+  { "code": "350721", "name": "顺昌县", "pinyin": "shunchangxian", "zip_code": "353200", "parent_code": "350700", "type": 2, "first_letter": "S" },
+  { "code": "350722", "name": "浦城县", "pinyin": "puchengxian", "zip_code": "353400", "parent_code": "350700", "type": 2, "first_letter": "P" },
+  { "code": "350723", "name": "光泽县", "pinyin": "guangzexian", "zip_code": "354100", "parent_code": "350700", "type": 2, "first_letter": "G" },
+  { "code": "350724", "name": "松溪县", "pinyin": "songxixian", "zip_code": "353500", "parent_code": "350700", "type": 2, "first_letter": "S" },
+  { "code": "350725", "name": "政和县", "pinyin": "zhenghexian", "zip_code": "353600", "parent_code": "350700", "type": 2, "first_letter": "Z" },
+  { "code": "350781", "name": "邵武市", "pinyin": "shaowushi", "zip_code": "354000", "parent_code": "350700", "type": 2, "first_letter": "S" },
+  { "code": "350782", "name": "武夷山市", "pinyin": "wuyishanshi", "zip_code": "354300", "parent_code": "350700", "type": 2, "first_letter": "W" },
+  { "code": "350783", "name": "建瓯市", "pinyin": "jianoushi", "zip_code": "353100", "parent_code": "350700", "type": 2, "first_letter": "J" },
+  { "code": "350800", "name": "龙岩市", "pinyin": "longyanshi", "zip_code": "364000", "parent_code": "350000", "type": 1, "first_letter": "L" },
+  { "code": "350802", "name": "新罗区", "pinyin": "xinluoqu", "zip_code": "364000", "parent_code": "350800", "type": 2, "first_letter": "X" },
+  { "code": "350803", "name": "永定区", "pinyin": "yongdingqu", "zip_code": "427000", "parent_code": "350800", "type": 2, "first_letter": "Y" },
+  { "code": "350821", "name": "长汀县", "pinyin": "changtingxian", "zip_code": "366300", "parent_code": "350800", "type": 2, "first_letter": "C" },
+  { "code": "350823", "name": "上杭县", "pinyin": "shanghangxian", "zip_code": "364200", "parent_code": "350800", "type": 2, "first_letter": "S" },
+  { "code": "350824", "name": "武平县", "pinyin": "wupingxian", "zip_code": "364300", "parent_code": "350800", "type": 2, "first_letter": "W" },
+  { "code": "350825", "name": "连城县", "pinyin": "lianchengxian", "zip_code": "366200", "parent_code": "350800", "type": 2, "first_letter": "L" },
+  { "code": "350881", "name": "漳平市", "pinyin": "zhangpingshi", "zip_code": "364400", "parent_code": "350800", "type": 2, "first_letter": "Z" },
+  { "code": "350900", "name": "宁德市", "pinyin": "ningdeshi", "zip_code": "352000", "parent_code": "350000", "type": 1, "first_letter": "N" },
+  { "code": "350902", "name": "蕉城区", "pinyin": "jiaochengqu", "zip_code": "352100", "parent_code": "350900", "type": 2, "first_letter": "J" },
+  { "code": "350921", "name": "霞浦县", "pinyin": "xiapuxian", "zip_code": "355100", "parent_code": "350900", "type": 2, "first_letter": "X" },
+  { "code": "350922", "name": "古田县", "pinyin": "gutianxian", "zip_code": "352200", "parent_code": "350900", "type": 2, "first_letter": "G" },
+  { "code": "350923", "name": "屏南县", "pinyin": "pingnanxian", "zip_code": "352300", "parent_code": "350900", "type": 2, "first_letter": "P" },
+  { "code": "350924", "name": "寿宁县", "pinyin": "shouningxian", "zip_code": "355500", "parent_code": "350900", "type": 2, "first_letter": "S" },
+  { "code": "350925", "name": "周宁县", "pinyin": "zhouningxian", "zip_code": "355400", "parent_code": "350900", "type": 2, "first_letter": "Z" },
+  { "code": "350926", "name": "柘荣县", "pinyin": "zherongxian", "zip_code": "355300", "parent_code": "350900", "type": 2, "first_letter": "Z" },
+  { "code": "350981", "name": "福安市", "pinyin": "fuanshi", "zip_code": "355000", "parent_code": "350900", "type": 2, "first_letter": "F" },
+  { "code": "350982", "name": "福鼎市", "pinyin": "fudingshi", "zip_code": "355200", "parent_code": "350900", "type": 2, "first_letter": "F" },
+  { "code": "360000", "name": "江西省", "pinyin": "jiangxisheng", "zip_code": "0", "type": 0, "first_letter": "J" },
+  { "code": "360100", "name": "南昌市", "pinyin": "nanchangshi", "zip_code": "330000", "parent_code": "360000", "type": 1, "first_letter": "N" },
+  { "code": "360102", "name": "东湖区", "pinyin": "donghuqu", "zip_code": "330006", "parent_code": "360100", "type": 2, "first_letter": "D" },
+  { "code": "360103", "name": "西湖区", "pinyin": "xihuqu", "zip_code": "330009", "parent_code": "360100", "type": 2, "first_letter": "X" },
+  { "code": "360104", "name": "青云谱区", "pinyin": "qingyunpuqu", "zip_code": "330001", "parent_code": "360100", "type": 2, "first_letter": "Q" },
+  { "code": "360105", "name": "湾里区", "pinyin": "wanliqu", "zip_code": "330004", "parent_code": "360100", "type": 2, "first_letter": "W" },
+  { "code": "360111", "name": "青山湖区", "pinyin": "qingshanhuqu", "zip_code": "330029", "parent_code": "360100", "type": 2, "first_letter": "Q" },
+  { "code": "360112", "name": "新建区", "pinyin": "xinjianqu", "zip_code": "330100", "parent_code": "360100", "type": 2, "first_letter": "X" },
+  { "code": "360121", "name": "南昌县", "pinyin": "nanchangxian", "zip_code": "330200", "parent_code": "360100", "type": 2, "first_letter": "N" },
+  { "code": "360123", "name": "安义县", "pinyin": "anyixian", "zip_code": "330500", "parent_code": "360100", "type": 2, "first_letter": "A" },
+  { "code": "360124", "name": "进贤县", "pinyin": "jinxianxian", "zip_code": "331700", "parent_code": "360100", "type": 2, "first_letter": "J" },
+  { "code": "360200", "name": "景德镇市", "pinyin": "jingdezhenshi", "zip_code": "333000", "parent_code": "360000", "type": 1, "first_letter": "J" },
+  { "code": "360202", "name": "昌江区", "pinyin": "changjiangqu", "zip_code": "333000", "parent_code": "360200", "type": 2, "first_letter": "C" },
+  { "code": "360203", "name": "珠山区", "pinyin": "zhushanqu", "zip_code": "333000", "parent_code": "360200", "type": 2, "first_letter": "Z" },
+  { "code": "360222", "name": "浮梁县", "pinyin": "fuliangxian", "zip_code": "333400", "parent_code": "360200", "type": 2, "first_letter": "F" },
+  { "code": "360281", "name": "乐平市", "pinyin": "lepingshi", "zip_code": "333300", "parent_code": "360200", "type": 2, "first_letter": "L" },
+  { "code": "360300", "name": "萍乡市", "pinyin": "pingxiangshi", "zip_code": "337000", "parent_code": "360000", "type": 1, "first_letter": "P" },
+  { "code": "360302", "name": "安源区", "pinyin": "anyuanqu", "zip_code": "337000", "parent_code": "360300", "type": 2, "first_letter": "A" },
+  { "code": "360313", "name": "湘东区", "pinyin": "xiangdongqu", "zip_code": "337016", "parent_code": "360300", "type": 2, "first_letter": "X" },
+  { "code": "360321", "name": "莲花县", "pinyin": "lianhuaxian", "zip_code": "337100", "parent_code": "360300", "type": 2, "first_letter": "L" },
+  { "code": "360322", "name": "上栗县", "pinyin": "shanglixian", "zip_code": "337009", "parent_code": "360300", "type": 2, "first_letter": "S" },
+  { "code": "360323", "name": "芦溪县", "pinyin": "luxixian", "zip_code": "337053", "parent_code": "360300", "type": 2, "first_letter": "L" },
+  { "code": "360400", "name": "九江市", "pinyin": "jiujiangshi", "zip_code": "332000", "parent_code": "360000", "type": 1, "first_letter": "J" },
+  { "code": "360402", "name": "濂溪区", "pinyin": "lianxiqu", "zip_code": "332005", "parent_code": "360400", "type": 2, "first_letter": "L" },
+  { "code": "360403", "name": "浔阳区", "pinyin": "xunyangqu", "zip_code": "332000", "parent_code": "360400", "type": 2, "first_letter": "X" },
+  { "code": "360404", "name": "柴桑区", "pinyin": "chaisangqu", "zip_code": "332100", "parent_code": "360400", "type": 2, "first_letter": "C" },
+  { "code": "360423", "name": "武宁县", "pinyin": "wuningxian", "zip_code": "332300", "parent_code": "360400", "type": 2, "first_letter": "W" },
+  { "code": "360424", "name": "修水县", "pinyin": "xiushuixian", "zip_code": "332400", "parent_code": "360400", "type": 2, "first_letter": "X" },
+  { "code": "360425", "name": "永修县", "pinyin": "yongxiuxian", "zip_code": "330300", "parent_code": "360400", "type": 2, "first_letter": "Y" },
+  { "code": "360426", "name": "德安县", "pinyin": "deanxian", "zip_code": "330400", "parent_code": "360400", "type": 2, "first_letter": "D" },
+  { "code": "360428", "name": "都昌县", "pinyin": "duchangxian", "zip_code": "332600", "parent_code": "360400", "type": 2, "first_letter": "D" },
+  { "code": "360429", "name": "湖口县", "pinyin": "hukouxian", "zip_code": "332500", "parent_code": "360400", "type": 2, "first_letter": "H" },
+  { "code": "360430", "name": "彭泽县", "pinyin": "pengzexian", "zip_code": "332700", "parent_code": "360400", "type": 2, "first_letter": "P" },
+  { "code": "360481", "name": "瑞昌市", "pinyin": "ruichangshi", "zip_code": "332200", "parent_code": "360400", "type": 2, "first_letter": "R" },
+  { "code": "360482", "name": "共青城市", "pinyin": "gongqingchengshi", "zip_code": "332020", "parent_code": "360400", "type": 2, "first_letter": "G" },
+  { "code": "360483", "name": "庐山市", "pinyin": "lushanshi", "zip_code": "332020", "parent_code": "360400", "type": 2, "first_letter": "L" },
+  { "code": "360500", "name": "新余市", "pinyin": "xinyushi", "zip_code": "336500", "parent_code": "360000", "type": 1, "first_letter": "X" },
+  { "code": "360502", "name": "渝水区", "pinyin": "yushuiqu", "zip_code": "338025", "parent_code": "360500", "type": 2, "first_letter": "Y" },
+  { "code": "360521", "name": "分宜县", "pinyin": "fenyixian", "zip_code": "336600", "parent_code": "360500", "type": 2, "first_letter": "F" },
+  { "code": "360600", "name": "鹰潭市", "pinyin": "yingtanshi", "zip_code": "335000", "parent_code": "360000", "type": 1, "first_letter": "Y" },
+  { "code": "360602", "name": "月湖区", "pinyin": "yuehuqu", "zip_code": "335000", "parent_code": "360600", "type": 2, "first_letter": "Y" },
+  { "code": "360622", "name": "余江区", "pinyin": "yujiangqu", "zip_code": "335200", "parent_code": "360600", "type": 2, "first_letter": "Y" },
+  { "code": "360681", "name": "贵溪市", "pinyin": "guixishi", "zip_code": "335400", "parent_code": "360600", "type": 2, "first_letter": "G" },
+  { "code": "360700", "name": "赣州市", "pinyin": "ganzhoushi", "zip_code": "341000", "parent_code": "360000", "type": 1, "first_letter": "G" },
+  { "code": "360702", "name": "章贡区", "pinyin": "zhanggongqu", "zip_code": "341000", "parent_code": "360700", "type": 2, "first_letter": "Z" },
+  { "code": "360703", "name": "南康区", "pinyin": "nankangqu", "zip_code": "341400", "parent_code": "360700", "type": 2, "first_letter": "N" },
+  { "code": "360704", "name": "赣县区", "pinyin": "ganxianqu", "zip_code": "341100", "parent_code": "360700", "type": 2, "first_letter": "G" },
+  { "code": "360722", "name": "信丰县", "pinyin": "xinfengxian", "zip_code": "341600", "parent_code": "360700", "type": 2, "first_letter": "X" },
+  { "code": "360723", "name": "大余县", "pinyin": "dayuxian", "zip_code": "341500", "parent_code": "360700", "type": 2, "first_letter": "D" },
+  { "code": "360724", "name": "上犹县", "pinyin": "shangyouxian", "zip_code": "341200", "parent_code": "360700", "type": 2, "first_letter": "S" },
+  { "code": "360725", "name": "崇义县", "pinyin": "chongyixian", "zip_code": "341300", "parent_code": "360700", "type": 2, "first_letter": "C" },
+  { "code": "360726", "name": "安远县", "pinyin": "anyuanxian", "zip_code": "342100", "parent_code": "360700", "type": 2, "first_letter": "A" },
+  { "code": "360727", "name": "龙南县", "pinyin": "longnanxian", "zip_code": "341700", "parent_code": "360700", "type": 2, "first_letter": "L" },
+  { "code": "360728", "name": "定南县", "pinyin": "dingnanxian", "zip_code": "341900", "parent_code": "360700", "type": 2, "first_letter": "D" },
+  { "code": "360729", "name": "全南县", "pinyin": "quannanxian", "zip_code": "341800", "parent_code": "360700", "type": 2, "first_letter": "Q" },
+  { "code": "360730", "name": "宁都县", "pinyin": "ningduxian", "zip_code": "342800", "parent_code": "360700", "type": 2, "first_letter": "N" },
+  { "code": "360731", "name": "于都县", "pinyin": "yuduxian", "zip_code": "342300", "parent_code": "360700", "type": 2, "first_letter": "Y" },
+  { "code": "360732", "name": "兴国县", "pinyin": "xingguoxian", "zip_code": "342400", "parent_code": "360700", "type": 2, "first_letter": "X" },
+  { "code": "360733", "name": "会昌县", "pinyin": "huichangxian", "zip_code": "342600", "parent_code": "360700", "type": 2, "first_letter": "H" },
+  { "code": "360734", "name": "寻乌县", "pinyin": "xunwuxian", "zip_code": "342200", "parent_code": "360700", "type": 2, "first_letter": "X" },
+  { "code": "360735", "name": "石城县", "pinyin": "shichengxian", "zip_code": "342700", "parent_code": "360700", "type": 2, "first_letter": "S" },
+  { "code": "360781", "name": "瑞金市", "pinyin": "ruijinshi", "zip_code": "342500", "parent_code": "360700", "type": 2, "first_letter": "R" },
+  { "code": "360800", "name": "吉安市", "pinyin": "jianshi", "zip_code": "343000", "parent_code": "360000", "type": 1, "first_letter": "J" },
+  { "code": "360802", "name": "吉州区", "pinyin": "jizhouqu", "zip_code": "343000", "parent_code": "360800", "type": 2, "first_letter": "J" },
+  { "code": "360803", "name": "青原区", "pinyin": "qingyuanqu", "zip_code": "343009", "parent_code": "360800", "type": 2, "first_letter": "Q" },
+  { "code": "360821", "name": "吉安县", "pinyin": "jianxian", "zip_code": "343100", "parent_code": "360800", "type": 2, "first_letter": "J" },
+  { "code": "360822", "name": "吉水县", "pinyin": "jishuixian", "zip_code": "331600", "parent_code": "360800", "type": 2, "first_letter": "J" },
+  { "code": "360823", "name": "峡江县", "pinyin": "xiajiangxian", "zip_code": "331400", "parent_code": "360800", "type": 2, "first_letter": "X" },
+  { "code": "360824", "name": "新干县", "pinyin": "xinganxian", "zip_code": "331300", "parent_code": "360800", "type": 2, "first_letter": "X" },
+  { "code": "360825", "name": "永丰县", "pinyin": "yongfengxian", "zip_code": "331500", "parent_code": "360800", "type": 2, "first_letter": "Y" },
+  { "code": "360826", "name": "泰和县", "pinyin": "taihexian", "zip_code": "343700", "parent_code": "360800", "type": 2, "first_letter": "T" },
+  { "code": "360827", "name": "遂川县", "pinyin": "suichuanxian", "zip_code": "343900", "parent_code": "360800", "type": 2, "first_letter": "S" },
+  { "code": "360828", "name": "万安县", "pinyin": "wananxian", "zip_code": "343800", "parent_code": "360800", "type": 2, "first_letter": "W" },
+  { "code": "360829", "name": "安福县", "pinyin": "anfuxian", "zip_code": "343200", "parent_code": "360800", "type": 2, "first_letter": "A" },
+  { "code": "360830", "name": "永新县", "pinyin": "yongxinxian", "zip_code": "343400", "parent_code": "360800", "type": 2, "first_letter": "Y" },
+  { "code": "360881", "name": "井冈山市", "pinyin": "jinggangshanshi", "zip_code": "343600", "parent_code": "360800", "type": 2, "first_letter": "J" },
+  { "code": "360900", "name": "宜春市", "pinyin": "yichunshi", "zip_code": "336000", "parent_code": "360000", "type": 1, "first_letter": "Y" },
+  { "code": "360902", "name": "袁州区", "pinyin": "yuanzhouqu", "zip_code": "336000", "parent_code": "360900", "type": 2, "first_letter": "Y" },
+  { "code": "360921", "name": "奉新县", "pinyin": "fengxinxian", "zip_code": "330700", "parent_code": "360900", "type": 2, "first_letter": "F" },
+  { "code": "360922", "name": "万载县", "pinyin": "wanzaixian", "zip_code": "336100", "parent_code": "360900", "type": 2, "first_letter": "W" },
+  { "code": "360923", "name": "上高县", "pinyin": "shanggaoxian", "zip_code": "336400", "parent_code": "360900", "type": 2, "first_letter": "S" },
+  { "code": "360924", "name": "宜丰县", "pinyin": "yifengxian", "zip_code": "336300", "parent_code": "360900", "type": 2, "first_letter": "Y" },
+  { "code": "360925", "name": "靖安县", "pinyin": "jinganxian", "zip_code": "330600", "parent_code": "360900", "type": 2, "first_letter": "J" },
+  { "code": "360926", "name": "铜鼓县", "pinyin": "tongguxian", "zip_code": "336200", "parent_code": "360900", "type": 2, "first_letter": "T" },
+  { "code": "360981", "name": "丰城市", "pinyin": "fengchengshi", "zip_code": "331100", "parent_code": "360900", "type": 2, "first_letter": "F" },
+  { "code": "360982", "name": "樟树市", "pinyin": "zhangshushi", "zip_code": "331200", "parent_code": "360900", "type": 2, "first_letter": "Z" },
+  { "code": "360983", "name": "高安市", "pinyin": "gaoanshi", "zip_code": "330800", "parent_code": "360900", "type": 2, "first_letter": "G" },
+  { "code": "361000", "name": "抚州市", "pinyin": "fuzhoushi", "zip_code": "344000", "parent_code": "360000", "type": 1, "first_letter": "F" },
+  { "code": "361002", "name": "临川区", "pinyin": "linchuanqu", "zip_code": "344100", "parent_code": "361000", "type": 2, "first_letter": "L" },
+  { "code": "361003", "name": "东乡区", "pinyin": "dongxiangqu", "zip_code": "331800", "parent_code": "361000", "type": 2, "first_letter": "D" },
+  { "code": "361021", "name": "南城县", "pinyin": "nanchengxian", "zip_code": "344700", "parent_code": "361000", "type": 2, "first_letter": "N" },
+  { "code": "361022", "name": "黎川县", "pinyin": "lichuanxian", "zip_code": "344600", "parent_code": "361000", "type": 2, "first_letter": "L" },
+  { "code": "361023", "name": "南丰县", "pinyin": "nanfengxian", "zip_code": "344500", "parent_code": "361000", "type": 2, "first_letter": "N" },
+  { "code": "361024", "name": "崇仁县", "pinyin": "chongrenxian", "zip_code": "344200", "parent_code": "361000", "type": 2, "first_letter": "C" },
+  { "code": "361025", "name": "乐安县", "pinyin": "leanxian", "zip_code": "344300", "parent_code": "361000", "type": 2, "first_letter": "L" },
+  { "code": "361026", "name": "宜黄县", "pinyin": "yihuangxian", "zip_code": "344400", "parent_code": "361000", "type": 2, "first_letter": "Y" },
+  { "code": "361027", "name": "金溪县", "pinyin": "jinxixian", "zip_code": "344800", "parent_code": "361000", "type": 2, "first_letter": "J" },
+  { "code": "361028", "name": "资溪县", "pinyin": "zixixian", "zip_code": "335300", "parent_code": "361000", "type": 2, "first_letter": "Z" },
+  { "code": "361030", "name": "广昌县", "pinyin": "guangchangxian", "zip_code": "344900", "parent_code": "361000", "type": 2, "first_letter": "G" },
+  { "code": "361100", "name": "上饶市", "pinyin": "shangraoshi", "zip_code": "334000", "parent_code": "360000", "type": 1, "first_letter": "S" },
+  { "code": "361102", "name": "信州区", "pinyin": "xinzhouqu", "zip_code": "334000", "parent_code": "361100", "type": 2, "first_letter": "X" },
+  { "code": "361103", "name": "广丰区", "pinyin": "guangfengqu", "zip_code": "334600", "parent_code": "361100", "type": 2, "first_letter": "G" },
+  { "code": "361121", "name": "上饶县", "pinyin": "shangraoxian", "zip_code": "334100", "parent_code": "361100", "type": 2, "first_letter": "S" },
+  { "code": "361123", "name": "玉山县", "pinyin": "yushanxian", "zip_code": "334700", "parent_code": "361100", "type": 2, "first_letter": "Y" },
+  { "code": "361124", "name": "铅山县", "pinyin": "qianshanxian", "zip_code": "334500", "parent_code": "361100", "type": 2, "first_letter": "Q" },
+  { "code": "361125", "name": "横峰县", "pinyin": "hengfengxian", "zip_code": "334300", "parent_code": "361100", "type": 2, "first_letter": "H" },
+  { "code": "361126", "name": "弋阳县", "pinyin": "yiyangxian", "zip_code": "334400", "parent_code": "361100", "type": 2, "first_letter": "Y" },
+  { "code": "361127", "name": "余干县", "pinyin": "yuganxian", "zip_code": "335100", "parent_code": "361100", "type": 2, "first_letter": "Y" },
+  { "code": "361128", "name": "鄱阳县", "pinyin": "poyangxian", "zip_code": "333100", "parent_code": "361100", "type": 2, "first_letter": "P" },
+  { "code": "361129", "name": "万年县", "pinyin": "wannianxian", "zip_code": "335500", "parent_code": "361100", "type": 2, "first_letter": "W" },
+  { "code": "361130", "name": "婺源县", "pinyin": "wuyuanxian", "zip_code": "333200", "parent_code": "361100", "type": 2, "first_letter": "W" },
+  { "code": "361181", "name": "德兴市", "pinyin": "dexingshi", "zip_code": "334200", "parent_code": "361100", "type": 2, "first_letter": "D" },
+  { "code": "370000", "name": "山东省", "pinyin": "shandongsheng", "zip_code": "0", "type": 0, "first_letter": "S" },
+  { "code": "370100", "name": "济南市", "pinyin": "jinanshi", "zip_code": "250000", "parent_code": "370000", "type": 1, "first_letter": "J" },
+  { "code": "370102", "name": "历下区", "pinyin": "lixiaqu", "zip_code": "250014", "parent_code": "370100", "type": 2, "first_letter": "L" },
+  { "code": "370103", "name": "市中区", "pinyin": "shizhongqu", "zip_code": "250001", "parent_code": "370100", "type": 2, "first_letter": "S" },
+  { "code": "370104", "name": "槐荫区", "pinyin": "huaiyinqu", "zip_code": "250022", "parent_code": "370100", "type": 2, "first_letter": "H" },
+  { "code": "370105", "name": "天桥区", "pinyin": "tianqiaoqu", "zip_code": "250031", "parent_code": "370100", "type": 2, "first_letter": "T" },
+  { "code": "370112", "name": "历城区", "pinyin": "lichengqu", "zip_code": "250100", "parent_code": "370100", "type": 2, "first_letter": "L" },
+  { "code": "370113", "name": "长清区", "pinyin": "changqingqu", "zip_code": "250300", "parent_code": "370100", "type": 2, "first_letter": "C" },
+  { "code": "370114", "name": "章丘区", "pinyin": "zhangqiuqu", "zip_code": "250200", "parent_code": "370100", "type": 2, "first_letter": "Z" },
+  { "code": "370124", "name": "平阴县", "pinyin": "pingyinxian", "zip_code": "250400", "parent_code": "370100", "type": 2, "first_letter": "P" },
+  { "code": "370125", "name": "济阳县", "pinyin": "jiyangxian", "zip_code": "251400", "parent_code": "370100", "type": 2, "first_letter": "J" },
+  { "code": "370126", "name": "商河县", "pinyin": "shanghexian", "zip_code": "251600", "parent_code": "370100", "type": 2, "first_letter": "S" },
+  { "code": "370200", "name": "青岛市", "pinyin": "qingdaoshi", "zip_code": "266000", "parent_code": "370000", "type": 1, "first_letter": "Q" },
+  { "code": "370202", "name": "市南区", "pinyin": "shinanqu", "zip_code": "266001", "parent_code": "370200", "type": 2, "first_letter": "S" },
+  { "code": "370203", "name": "市北区", "pinyin": "shibeiqu", "zip_code": "266011", "parent_code": "370200", "type": 2, "first_letter": "S" },
+  { "code": "370211", "name": "黄岛区", "pinyin": "huangdaoqu", "zip_code": "266500", "parent_code": "370200", "type": 2, "first_letter": "H" },
+  { "code": "370212", "name": "崂山区", "pinyin": "laoshanqu", "zip_code": "266100", "parent_code": "370200", "type": 2, "first_letter": "L" },
+  { "code": "370213", "name": "李沧区", "pinyin": "licangqu", "zip_code": "266021", "parent_code": "370200", "type": 2, "first_letter": "L" },
+  { "code": "370214", "name": "城阳区", "pinyin": "chengyangqu", "zip_code": "266041", "parent_code": "370200", "type": 2, "first_letter": "C" },
+  { "code": "370215", "name": "即墨区", "pinyin": "jimoqu", "zip_code": "266200", "parent_code": "370200", "type": 2, "first_letter": "J" },
+  { "code": "370281", "name": "胶州市", "pinyin": "jiaozhoushi", "zip_code": "266300", "parent_code": "370200", "type": 2, "first_letter": "J" },
+  { "code": "370283", "name": "平度市", "pinyin": "pingdushi", "zip_code": "266700", "parent_code": "370200", "type": 2, "first_letter": "P" },
+  { "code": "370285", "name": "莱西市", "pinyin": "laixishi", "zip_code": "266600", "parent_code": "370200", "type": 2, "first_letter": "L" },
+  { "code": "370300", "name": "淄博市", "pinyin": "ziboshi", "zip_code": "255000", "parent_code": "370000", "type": 1, "first_letter": "Z" },
+  { "code": "370302", "name": "淄川区", "pinyin": "zichuanqu", "zip_code": "255100", "parent_code": "370300", "type": 2, "first_letter": "Z" },
+  { "code": "370303", "name": "张店区", "pinyin": "zhangdianqu", "zip_code": "255022", "parent_code": "370300", "type": 2, "first_letter": "Z" },
+  { "code": "370304", "name": "博山区", "pinyin": "boshanqu", "zip_code": "255200", "parent_code": "370300", "type": 2, "first_letter": "B" },
+  { "code": "370305", "name": "临淄区", "pinyin": "linziqu", "zip_code": "255400", "parent_code": "370300", "type": 2, "first_letter": "L" },
+  { "code": "370306", "name": "周村区", "pinyin": "zhoucunqu", "zip_code": "255300", "parent_code": "370300", "type": 2, "first_letter": "Z" },
+  { "code": "370321", "name": "桓台县", "pinyin": "huantaixian", "zip_code": "256400", "parent_code": "370300", "type": 2, "first_letter": "H" },
+  { "code": "370322", "name": "高青县", "pinyin": "gaoqingxian", "zip_code": "256300", "parent_code": "370300", "type": 2, "first_letter": "G" },
+  { "code": "370323", "name": "沂源县", "pinyin": "yiyuanxian", "zip_code": "256100", "parent_code": "370300", "type": 2, "first_letter": "Y" },
+  { "code": "370400", "name": "枣庄市", "pinyin": "zaozhuangshi", "zip_code": "277000", "parent_code": "370000", "type": 1, "first_letter": "Z" },
+  { "code": "370402", "name": "市中区", "pinyin": "shizhongqu", "zip_code": "277101", "parent_code": "370400", "type": 2, "first_letter": "S" },
+  { "code": "370403", "name": "薛城区", "pinyin": "xuechengqu", "zip_code": "277000", "parent_code": "370400", "type": 2, "first_letter": "X" },
+  { "code": "370404", "name": "峄城区", "pinyin": "yichengqu", "zip_code": "277300", "parent_code": "370400", "type": 2, "first_letter": "Y" },
+  { "code": "370405", "name": "台儿庄区", "pinyin": "taierzhuangqu", "zip_code": "277400", "parent_code": "370400", "type": 2, "first_letter": "T" },
+  { "code": "370406", "name": "山亭区", "pinyin": "shantingqu", "zip_code": "277200", "parent_code": "370400", "type": 2, "first_letter": "S" },
+  { "code": "370481", "name": "滕州市", "pinyin": "tengzhoushi", "zip_code": "277500", "parent_code": "370400", "type": 2, "first_letter": "T" },
+  { "code": "370500", "name": "东营市", "pinyin": "dongyingshi", "zip_code": "257000", "parent_code": "370000", "type": 1, "first_letter": "D" },
+  { "code": "370502", "name": "东营区", "pinyin": "dongyingqu", "zip_code": "257029", "parent_code": "370500", "type": 2, "first_letter": "D" },
+  { "code": "370503", "name": "河口区", "pinyin": "hekouqu", "zip_code": "257200", "parent_code": "370500", "type": 2, "first_letter": "H" },
+  { "code": "370505", "name": "垦利区", "pinyin": "kenliqu", "zip_code": "257500", "parent_code": "370500", "type": 2, "first_letter": "K" },
+  { "code": "370522", "name": "利津县", "pinyin": "lijinxian", "zip_code": "257400", "parent_code": "370500", "type": 2, "first_letter": "L" },
+  { "code": "370523", "name": "广饶县", "pinyin": "guangraoxian", "zip_code": "257300", "parent_code": "370500", "type": 2, "first_letter": "G" },
+  { "code": "370600", "name": "烟台市", "pinyin": "yantaishi", "zip_code": "264000", "parent_code": "370000", "type": 1, "first_letter": "Y" },
+  { "code": "370602", "name": "芝罘区", "pinyin": "zhifuqu", "zip_code": "264001", "parent_code": "370600", "type": 2, "first_letter": "Z" },
+  { "code": "370611", "name": "福山区", "pinyin": "fushanqu", "zip_code": "265500", "parent_code": "370600", "type": 2, "first_letter": "F" },
+  { "code": "370612", "name": "牟平区", "pinyin": "moupingqu", "zip_code": "264100", "parent_code": "370600", "type": 2, "first_letter": "M" },
+  { "code": "370613", "name": "莱山区", "pinyin": "laishanqu", "zip_code": "264600", "parent_code": "370600", "type": 2, "first_letter": "L" },
+  { "code": "370634", "name": "长岛县", "pinyin": "changdaoxian", "zip_code": "265800", "parent_code": "370600", "type": 2, "first_letter": "C" },
+  { "code": "370681", "name": "龙口市", "pinyin": "longkoushi", "zip_code": "265700", "parent_code": "370600", "type": 2, "first_letter": "L" },
+  { "code": "370682", "name": "莱阳市", "pinyin": "laiyangshi", "zip_code": "265200", "parent_code": "370600", "type": 2, "first_letter": "L" },
+  { "code": "370683", "name": "莱州市", "pinyin": "laizhoushi", "zip_code": "261400", "parent_code": "370600", "type": 2, "first_letter": "L" },
+  { "code": "370684", "name": "蓬莱市", "pinyin": "penglaishi", "zip_code": "265600", "parent_code": "370600", "type": 2, "first_letter": "P" },
+  { "code": "370685", "name": "招远市", "pinyin": "zhaoyuanshi", "zip_code": "265400", "parent_code": "370600", "type": 2, "first_letter": "Z" },
+  { "code": "370686", "name": "栖霞市", "pinyin": "qixiashi", "zip_code": "265300", "parent_code": "370600", "type": 2, "first_letter": "Q" },
+  { "code": "370687", "name": "海阳市", "pinyin": "haiyangshi", "zip_code": "265100", "parent_code": "370600", "type": 2, "first_letter": "H" },
+  { "code": "370700", "name": "潍坊市", "pinyin": "weifangshi", "zip_code": "261000", "parent_code": "370000", "type": 1, "first_letter": "W" },
+  { "code": "370702", "name": "潍城区", "pinyin": "weichengqu", "zip_code": "261021", "parent_code": "370700", "type": 2, "first_letter": "W" },
+  { "code": "370703", "name": "寒亭区", "pinyin": "hantingqu", "zip_code": "261100", "parent_code": "370700", "type": 2, "first_letter": "H" },
+  { "code": "370704", "name": "坊子区", "pinyin": "fangziqu", "zip_code": "261200", "parent_code": "370700", "type": 2, "first_letter": "F" },
+  { "code": "370705", "name": "奎文区", "pinyin": "kuiwenqu", "zip_code": "261031", "parent_code": "370700", "type": 2, "first_letter": "K" },
+  { "code": "370724", "name": "临朐县", "pinyin": "linquxian", "zip_code": "262600", "parent_code": "370700", "type": 2, "first_letter": "L" },
+  { "code": "370725", "name": "昌乐县", "pinyin": "changlexian", "zip_code": "262400", "parent_code": "370700", "type": 2, "first_letter": "C" },
+  { "code": "370781", "name": "青州市", "pinyin": "qingzhoushi", "zip_code": "262500", "parent_code": "370700", "type": 2, "first_letter": "Q" },
+  { "code": "370782", "name": "诸城市", "pinyin": "zhuchengshi", "zip_code": "262200", "parent_code": "370700", "type": 2, "first_letter": "Z" },
+  { "code": "370783", "name": "寿光市", "pinyin": "shouguangshi", "zip_code": "262700", "parent_code": "370700", "type": 2, "first_letter": "S" },
+  { "code": "370784", "name": "安丘市", "pinyin": "anqiushi", "zip_code": "262100", "parent_code": "370700", "type": 2, "first_letter": "A" },
+  { "code": "370785", "name": "高密市", "pinyin": "gaomishi", "zip_code": "261500", "parent_code": "370700", "type": 2, "first_letter": "G" },
+  { "code": "370786", "name": "昌邑市", "pinyin": "changyishi", "zip_code": "261300", "parent_code": "370700", "type": 2, "first_letter": "C" },
+  { "code": "370800", "name": "济宁市", "pinyin": "jiningshi", "zip_code": "272000", "parent_code": "370000", "type": 1, "first_letter": "J" },
+  { "code": "370811", "name": "任城区", "pinyin": "renchengqu", "zip_code": "272113", "parent_code": "370800", "type": 2, "first_letter": "R" },
+  { "code": "370812", "name": "兖州区", "pinyin": "yanzhouqu", "zip_code": "272000", "parent_code": "370800", "type": 2, "first_letter": "Y" },
+  { "code": "370826", "name": "微山县", "pinyin": "weishanxian", "zip_code": "277600", "parent_code": "370800", "type": 2, "first_letter": "W" },
+  { "code": "370827", "name": "鱼台县", "pinyin": "yutaixian", "zip_code": "272300", "parent_code": "370800", "type": 2, "first_letter": "Y" },
+  { "code": "370828", "name": "金乡县", "pinyin": "jinxiangxian", "zip_code": "272200", "parent_code": "370800", "type": 2, "first_letter": "J" },
+  { "code": "370829", "name": "嘉祥县", "pinyin": "jiaxiangxian", "zip_code": "272400", "parent_code": "370800", "type": 2, "first_letter": "J" },
+  { "code": "370830", "name": "汶上县", "pinyin": "wenshangxian", "zip_code": "272501", "parent_code": "370800", "type": 2, "first_letter": "W" },
+  { "code": "370831", "name": "泗水县", "pinyin": "sishuixian", "zip_code": "273200", "parent_code": "370800", "type": 2, "first_letter": "S" },
+  { "code": "370832", "name": "梁山县", "pinyin": "liangshanxian", "zip_code": "272600", "parent_code": "370800", "type": 2, "first_letter": "L" },
+  { "code": "370881", "name": "曲阜市", "pinyin": "qufushi", "zip_code": "273100", "parent_code": "370800", "type": 2, "first_letter": "Q" },
+  { "code": "370883", "name": "邹城市", "pinyin": "zouchengshi", "zip_code": "273500", "parent_code": "370800", "type": 2, "first_letter": "Z" },
+  { "code": "370900", "name": "泰安市", "pinyin": "taianshi", "zip_code": "271000", "parent_code": "370000", "type": 1, "first_letter": "T" },
+  { "code": "370902", "name": "泰山区", "pinyin": "taishanqu", "zip_code": "271000", "parent_code": "370900", "type": 2, "first_letter": "T" },
+  { "code": "370911", "name": "岱岳区", "pinyin": "daiyuequ", "zip_code": "271000", "parent_code": "370900", "type": 2, "first_letter": "D" },
+  { "code": "370921", "name": "宁阳县", "pinyin": "ningyangxian", "zip_code": "271400", "parent_code": "370900", "type": 2, "first_letter": "N" },
+  { "code": "370923", "name": "东平县", "pinyin": "dongpingxian", "zip_code": "271500", "parent_code": "370900", "type": 2, "first_letter": "D" },
+  { "code": "370982", "name": "新泰市", "pinyin": "xintaishi", "zip_code": "271200", "parent_code": "370900", "type": 2, "first_letter": "X" },
+  { "code": "370983", "name": "肥城市", "pinyin": "feichengshi", "zip_code": "271600", "parent_code": "370900", "type": 2, "first_letter": "F" },
+  { "code": "371000", "name": "威海市", "pinyin": "weihaishi", "zip_code": "264200", "parent_code": "370000", "type": 1, "first_letter": "W" },
+  { "code": "371002", "name": "环翠区", "pinyin": "huancuiqu", "zip_code": "264200", "parent_code": "371000", "type": 2, "first_letter": "H" },
+  { "code": "371003", "name": "文登区", "pinyin": "wendengqu", "zip_code": "264400", "parent_code": "371000", "type": 2, "first_letter": "W" },
+  { "code": "371082", "name": "荣成市", "pinyin": "rongchengshi", "zip_code": "264300", "parent_code": "371000", "type": 2, "first_letter": "R" },
+  { "code": "371083", "name": "乳山市", "pinyin": "rushanshi", "zip_code": "264500", "parent_code": "371000", "type": 2, "first_letter": "R" },
+  { "code": "371100", "name": "日照市", "pinyin": "rizhaoshi", "zip_code": "276800", "parent_code": "370000", "type": 1, "first_letter": "R" },
+  { "code": "371102", "name": "东港区", "pinyin": "donggangqu", "zip_code": "276800", "parent_code": "371100", "type": 2, "first_letter": "D" },
+  { "code": "371103", "name": "岚山区", "pinyin": "lanshanqu", "zip_code": "276808", "parent_code": "371100", "type": 2, "first_letter": "L" },
+  { "code": "371121", "name": "五莲县", "pinyin": "wulianxian", "zip_code": "272300", "parent_code": "371100", "type": 2, "first_letter": "W" },
+  { "code": "371122", "name": "莒县", "pinyin": "juxian", "zip_code": "266500", "parent_code": "371100", "type": 2, "first_letter": "J" },
+  { "code": "371200", "name": "莱芜市", "pinyin": "laiwushi", "zip_code": "271100", "parent_code": "370000", "type": 1, "first_letter": "L" },
+  { "code": "371202", "name": "莱城区", "pinyin": "laichengqu", "zip_code": "271100", "parent_code": "371200", "type": 2, "first_letter": "L" },
+  { "code": "371203", "name": "钢城区", "pinyin": "gangchengqu", "zip_code": "271100", "parent_code": "371200", "type": 2, "first_letter": "G" },
+  { "code": "371300", "name": "临沂市", "pinyin": "linyishi", "zip_code": "276000", "parent_code": "370000", "type": 1, "first_letter": "L" },
+  { "code": "371302", "name": "兰山区", "pinyin": "lanshanqu", "zip_code": "276002", "parent_code": "371300", "type": 2, "first_letter": "L" },
+  { "code": "371311", "name": "罗庄区", "pinyin": "luozhuangqu", "zip_code": "276022", "parent_code": "371300", "type": 2, "first_letter": "L" },
+  { "code": "371312", "name": "河东区", "pinyin": "hedongqu", "zip_code": "572000", "parent_code": "371300", "type": 2, "first_letter": "H" },
+  { "code": "371321", "name": "沂南县", "pinyin": "yinanxian", "zip_code": "276300", "parent_code": "371300", "type": 2, "first_letter": "Y" },
+  { "code": "371322", "name": "郯城县", "pinyin": "tanchengxian", "zip_code": "276100", "parent_code": "371300", "type": 2, "first_letter": "T" },
+  { "code": "371323", "name": "沂水县", "pinyin": "yishuixian", "zip_code": "276400", "parent_code": "371300", "type": 2, "first_letter": "Y" },
+  { "code": "371324", "name": "兰陵县", "pinyin": "lanlingxian", "zip_code": "277700", "parent_code": "371300", "type": 2, "first_letter": "L" },
+  { "code": "371325", "name": "费县", "pinyin": "feixian", "zip_code": "273400", "parent_code": "371300", "type": 2, "first_letter": "F" },
+  { "code": "371326", "name": "平邑县", "pinyin": "pingyixian", "zip_code": "273300", "parent_code": "371300", "type": 2, "first_letter": "P" },
+  { "code": "371327", "name": "莒南县", "pinyin": "junanxian", "zip_code": "276600", "parent_code": "371300", "type": 2, "first_letter": "J" },
+  { "code": "371328", "name": "蒙阴县", "pinyin": "mengyinxian", "zip_code": "276200", "parent_code": "371300", "type": 2, "first_letter": "M" },
+  { "code": "371329", "name": "临沭县", "pinyin": "linshuxian", "zip_code": "276700", "parent_code": "371300", "type": 2, "first_letter": "L" },
+  { "code": "371400", "name": "德州市", "pinyin": "dezhoushi", "zip_code": "253000", "parent_code": "370000", "type": 1, "first_letter": "D" },
+  { "code": "371402", "name": "德城区", "pinyin": "dechengqu", "zip_code": "253011", "parent_code": "371400", "type": 2, "first_letter": "D" },
+  { "code": "371403", "name": "陵城区", "pinyin": "lingchengqu", "zip_code": "253500", "parent_code": "371400", "type": 2, "first_letter": "L" },
+  { "code": "371422", "name": "宁津县", "pinyin": "ningjinxian", "zip_code": "253400", "parent_code": "371400", "type": 2, "first_letter": "N" },
+  { "code": "371423", "name": "庆云县", "pinyin": "qingyunxian", "zip_code": "253700", "parent_code": "371400", "type": 2, "first_letter": "Q" },
+  { "code": "371424", "name": "临邑县", "pinyin": "linyixian", "zip_code": "251500", "parent_code": "371400", "type": 2, "first_letter": "L" },
+  { "code": "371425", "name": "齐河县", "pinyin": "qihexian", "zip_code": "251100", "parent_code": "371400", "type": 2, "first_letter": "Q" },
+  { "code": "371426", "name": "平原县", "pinyin": "pingyuanxian", "zip_code": "253100", "parent_code": "371400", "type": 2, "first_letter": "P" },
+  { "code": "371427", "name": "夏津县", "pinyin": "xiajinxian", "zip_code": "253200", "parent_code": "371400", "type": 2, "first_letter": "X" },
+  { "code": "371428", "name": "武城县", "pinyin": "wuchengxian", "zip_code": "253300", "parent_code": "371400", "type": 2, "first_letter": "W" },
+  { "code": "371481", "name": "乐陵市", "pinyin": "lelingshi", "zip_code": "253600", "parent_code": "371400", "type": 2, "first_letter": "L" },
+  { "code": "371482", "name": "禹城市", "pinyin": "yuchengshi", "zip_code": "251200", "parent_code": "371400", "type": 2, "first_letter": "Y" },
+  { "code": "371500", "name": "聊城市", "pinyin": "liaochengshi", "zip_code": "252000", "parent_code": "370000", "type": 1, "first_letter": "L" },
+  { "code": "371502", "name": "东昌府区", "pinyin": "dongchangfuqu", "zip_code": "252000", "parent_code": "371500", "type": 2, "first_letter": "D" },
+  { "code": "371521", "name": "阳谷县", "pinyin": "yangguxian", "zip_code": "252300", "parent_code": "371500", "type": 2, "first_letter": "Y" },
+  { "code": "371522", "name": "莘县", "pinyin": "xinxian", "zip_code": "252400", "parent_code": "371500", "type": 2, "first_letter": "X" },
+  { "code": "371523", "name": "茌平县", "pinyin": "chipingxian", "zip_code": "252100", "parent_code": "371500", "type": 2, "first_letter": "C" },
+  { "code": "371524", "name": "东阿县", "pinyin": "dongaxian", "zip_code": "252200", "parent_code": "371500", "type": 2, "first_letter": "D" },
+  { "code": "371525", "name": "冠县", "pinyin": "guanxian", "zip_code": "252500", "parent_code": "371500", "type": 2, "first_letter": "G" },
+  { "code": "371526", "name": "高唐县", "pinyin": "gaotangxian", "zip_code": "252800", "parent_code": "371500", "type": 2, "first_letter": "G" },
+  { "code": "371581", "name": "临清市", "pinyin": "linqingshi", "zip_code": "252600", "parent_code": "371500", "type": 2, "first_letter": "L" },
+  { "code": "371600", "name": "滨州市", "pinyin": "binzhoushi", "zip_code": "256600", "parent_code": "370000", "type": 1, "first_letter": "B" },
+  { "code": "371602", "name": "滨城区", "pinyin": "binchengqu", "zip_code": "256613", "parent_code": "371600", "type": 2, "first_letter": "B" },
+  { "code": "371603", "name": "沾化区", "pinyin": "zhanhuaqu", "zip_code": "256800", "parent_code": "371600", "type": 2, "first_letter": "Z" },
+  { "code": "371621", "name": "惠民县", "pinyin": "huiminxian", "zip_code": "251700", "parent_code": "371600", "type": 2, "first_letter": "H" },
+  { "code": "371622", "name": "阳信县", "pinyin": "yangxinxian", "zip_code": "251800", "parent_code": "371600", "type": 2, "first_letter": "Y" },
+  { "code": "371623", "name": "无棣县", "pinyin": "wudixian", "zip_code": "251900", "parent_code": "371600", "type": 2, "first_letter": "W" },
+  { "code": "371625", "name": "博兴县", "pinyin": "boxingxian", "zip_code": "256500", "parent_code": "371600", "type": 2, "first_letter": "B" },
+  { "code": "371626", "name": "邹平县", "pinyin": "zoupingxian", "zip_code": "256200", "parent_code": "371600", "type": 2, "first_letter": "Z" },
+  { "code": "371700", "name": "菏泽市", "pinyin": "hezeshi", "zip_code": "0", "parent_code": "370000", "type": 1, "first_letter": "H" },
+  { "code": "371702", "name": "牡丹区", "pinyin": "mudanqu", "zip_code": "274009", "parent_code": "371700", "type": 2, "first_letter": "M" },
+  { "code": "371703", "name": "定陶区", "pinyin": "dingtaoqu", "zip_code": "274100", "parent_code": "371700", "type": 2, "first_letter": "D" },
+  { "code": "371721", "name": "曹县", "pinyin": "caoxian", "zip_code": "274400", "parent_code": "371700", "type": 2, "first_letter": "C" },
+  { "code": "371722", "name": "单县", "pinyin": "shanxian", "zip_code": "274300", "parent_code": "371700", "type": 2, "first_letter": "S" },
+  { "code": "371723", "name": "成武县", "pinyin": "chengwuxian", "zip_code": "274200", "parent_code": "371700", "type": 2, "first_letter": "C" },
+  { "code": "371724", "name": "巨野县", "pinyin": "juyexian", "zip_code": "274900", "parent_code": "371700", "type": 2, "first_letter": "J" },
+  { "code": "371725", "name": "郓城县", "pinyin": "yunchengxian", "zip_code": "274700", "parent_code": "371700", "type": 2, "first_letter": "Y" },
+  { "code": "371726", "name": "鄄城县", "pinyin": "juanchengxian", "zip_code": "274600", "parent_code": "371700", "type": 2, "first_letter": "J" },
+  { "code": "371728", "name": "东明县", "pinyin": "dongmingxian", "zip_code": "274500", "parent_code": "371700", "type": 2, "first_letter": "D" },
+  { "code": "410000", "name": "河南省", "pinyin": "henansheng", "zip_code": "0", "type": 0, "first_letter": "H" },
+  { "code": "410100", "name": "郑州市", "pinyin": "zhengzhoushi", "zip_code": "450000", "parent_code": "410000", "type": 1, "first_letter": "Z" },
+  { "code": "410102", "name": "中原区", "pinyin": "zhongyuanqu", "zip_code": "450007", "parent_code": "410100", "type": 2, "first_letter": "Z" },
+  { "code": "410103", "name": "二七区", "pinyin": "erqiqu", "zip_code": "450052", "parent_code": "410100", "type": 2, "first_letter": "E" },
+  { "code": "410104", "name": "管城回族区", "pinyin": "guanchenghuizuqu", "zip_code": "450000", "parent_code": "410100", "type": 2, "first_letter": "G" },
+  { "code": "410105", "name": "金水区", "pinyin": "jinshuiqu", "zip_code": "450003", "parent_code": "410100", "type": 2, "first_letter": "J" },
+  { "code": "410106", "name": "上街区", "pinyin": "shangjiequ", "zip_code": "450041", "parent_code": "410100", "type": 2, "first_letter": "S" },
+  { "code": "410108", "name": "惠济区", "pinyin": "huijiqu", "zip_code": "450053", "parent_code": "410100", "type": 2, "first_letter": "H" },
+  { "code": "410122", "name": "中牟县", "pinyin": "zhongmuxian", "zip_code": "451450", "parent_code": "410100", "type": 2, "first_letter": "Z" },
+  { "code": "410181", "name": "巩义市", "pinyin": "gongyishi", "zip_code": "451200", "parent_code": "410100", "type": 2, "first_letter": "G" },
+  { "code": "410182", "name": "荥阳市", "pinyin": "xingyangshi", "zip_code": "450100", "parent_code": "410100", "type": 2, "first_letter": "X" },
+  { "code": "410183", "name": "新密市", "pinyin": "xinmishi", "zip_code": "452300", "parent_code": "410100", "type": 2, "first_letter": "X" },
+  { "code": "410184", "name": "新郑市", "pinyin": "xinzhengshi", "zip_code": "451100", "parent_code": "410100", "type": 2, "first_letter": "X" },
+  { "code": "410185", "name": "登封市", "pinyin": "dengfengshi", "zip_code": "452470", "parent_code": "410100", "type": 2, "first_letter": "D" },
+  { "code": "410200", "name": "开封市", "pinyin": "kaifengshi", "zip_code": "475000", "parent_code": "410000", "type": 1, "first_letter": "K" },
+  { "code": "410202", "name": "龙亭区", "pinyin": "longtingqu", "zip_code": "475000", "parent_code": "410200", "type": 2, "first_letter": "L" },
+  { "code": "410203", "name": "顺河回族区", "pinyin": "shunhehuizuqu", "zip_code": "475000", "parent_code": "410200", "type": 2, "first_letter": "S" },
+  { "code": "410204", "name": "鼓楼区", "pinyin": "gulouqu", "zip_code": "475000", "parent_code": "410200", "type": 2, "first_letter": "G" },
+  { "code": "410205", "name": "禹王台区", "pinyin": "yuwangtaiqu", "zip_code": "475000", "parent_code": "410200", "type": 2, "first_letter": "Y" },
+  { "code": "410212", "name": "祥符区", "pinyin": "xiangfuqu", "zip_code": "475100", "parent_code": "410200", "type": 2, "first_letter": "X" },
+  { "code": "410221", "name": "杞县", "pinyin": "qixian", "zip_code": "475200", "parent_code": "410200", "type": 2, "first_letter": "Q" },
+  { "code": "410222", "name": "通许县", "pinyin": "tongxuxian", "zip_code": "452200", "parent_code": "410200", "type": 2, "first_letter": "T" },
+  { "code": "410223", "name": "尉氏县", "pinyin": "weishixian", "zip_code": "452100", "parent_code": "410200", "type": 2, "first_letter": "W" },
+  { "code": "410225", "name": "兰考县", "pinyin": "lankaoxian", "zip_code": "475300", "parent_code": "410200", "type": 2, "first_letter": "L" },
+  { "code": "410300", "name": "洛阳市", "pinyin": "luoyangshi", "zip_code": "471000", "parent_code": "410000", "type": 1, "first_letter": "L" },
+  { "code": "410302", "name": "老城区", "pinyin": "laochengqu", "zip_code": "471002", "parent_code": "410300", "type": 2, "first_letter": "L" },
+  { "code": "410303", "name": "西工区", "pinyin": "xigongqu", "zip_code": "471000", "parent_code": "410300", "type": 2, "first_letter": "X" },
+  { "code": "410304", "name": "瀍河回族区", "pinyin": "chanhehuizuqu", "zip_code": "471002", "parent_code": "410300", "type": 2, "first_letter": "C" },
+  { "code": "410305", "name": "涧西区", "pinyin": "jianxiqu", "zip_code": "471003", "parent_code": "410300", "type": 2, "first_letter": "J" },
+  { "code": "410307", "name": "偃师区", "pinyin": "yanshiqu", "zip_code": "471900", "parent_code": "410300", "type": 2, "first_letter": "Y" },
+  { "code": "410308", "name": "孟津区", "pinyin": "mengjinqu", "zip_code": "471100", "parent_code": "410300", "type": 2, "first_letter": "M" },
+  { "code": "410311", "name": "洛龙区", "pinyin": "luolongqu", "zip_code": "471000", "parent_code": "410300", "type": 2, "first_letter": "L" },
+  { "code": "410323", "name": "新安县", "pinyin": "xinanxian", "zip_code": "471800", "parent_code": "410300", "type": 2, "first_letter": "X" },
+  { "code": "410324", "name": "栾川县", "pinyin": "luanchuanxian", "zip_code": "471500", "parent_code": "410300", "type": 2, "first_letter": "L" },
+  { "code": "410325", "name": "嵩县", "pinyin": "songxian", "zip_code": "471400", "parent_code": "410300", "type": 2, "first_letter": "S" },
+  { "code": "410326", "name": "汝阳县", "pinyin": "ruyangxian", "zip_code": "471200", "parent_code": "410300", "type": 2, "first_letter": "R" },
+  { "code": "410327", "name": "宜阳县", "pinyin": "yiyangxian", "zip_code": "471600", "parent_code": "410300", "type": 2, "first_letter": "Y" },
+  { "code": "410328", "name": "洛宁县", "pinyin": "luoningxian", "zip_code": "471700", "parent_code": "410300", "type": 2, "first_letter": "L" },
+  { "code": "410329", "name": "伊川县", "pinyin": "yichuanxian", "zip_code": "471300", "parent_code": "410300", "type": 2, "first_letter": "Y" },
+  { "code": "410400", "name": "平顶山市", "pinyin": "pingdingshanshi", "zip_code": "467000", "parent_code": "410000", "type": 1, "first_letter": "P" },
+  { "code": "410402", "name": "新华区", "pinyin": "xinhuaqu", "zip_code": "467002", "parent_code": "410400", "type": 2, "first_letter": "X" },
+  { "code": "410403", "name": "卫东区", "pinyin": "weidongqu", "zip_code": "467021", "parent_code": "410400", "type": 2, "first_letter": "W" },
+  { "code": "410404", "name": "石龙区", "pinyin": "shilongqu", "zip_code": "467045", "parent_code": "410400", "type": 2, "first_letter": "S" },
+  { "code": "410411", "name": "湛河区", "pinyin": "zhanhequ", "zip_code": "467000", "parent_code": "410400", "type": 2, "first_letter": "Z" },
+  { "code": "410421", "name": "宝丰县", "pinyin": "baofengxian", "zip_code": "467400", "parent_code": "410400", "type": 2, "first_letter": "B" },
+  { "code": "410422", "name": "叶县", "pinyin": "xexian", "zip_code": "467200", "parent_code": "410400", "type": 2, "first_letter": "X" },
+  { "code": "410423", "name": "鲁山县", "pinyin": "lushanxian", "zip_code": "467300", "parent_code": "410400", "type": 2, "first_letter": "L" },
+  { "code": "410425", "name": "郏县", "pinyin": "jiaxian", "zip_code": "467100", "parent_code": "410400", "type": 2, "first_letter": "J" },
+  { "code": "410481", "name": "舞钢市", "pinyin": "wugangshi", "zip_code": "462500", "parent_code": "410400", "type": 2, "first_letter": "W" },
+  { "code": "410482", "name": "汝州市", "pinyin": "ruzhoushi", "zip_code": "467500", "parent_code": "410400", "type": 2, "first_letter": "R" },
+  { "code": "410500", "name": "安阳市", "pinyin": "anyangshi", "zip_code": "0", "parent_code": "410000", "type": 1, "first_letter": "A" },
+  { "code": "410502", "name": "文峰区", "pinyin": "wenfengqu", "zip_code": "455000", "parent_code": "410500", "type": 2, "first_letter": "W" },
+  { "code": "410503", "name": "北关区", "pinyin": "beiguanqu", "zip_code": "455001", "parent_code": "410500", "type": 2, "first_letter": "B" },
+  { "code": "410505", "name": "殷都区", "pinyin": "yinduqu", "zip_code": "455004", "parent_code": "410500", "type": 2, "first_letter": "Y" },
+  { "code": "410506", "name": "龙安区", "pinyin": "longanqu", "zip_code": "455001", "parent_code": "410500", "type": 2, "first_letter": "L" },
+  { "code": "410522", "name": "安阳县", "pinyin": "anyangxian", "zip_code": "455000", "parent_code": "410500", "type": 2, "first_letter": "A" },
+  { "code": "410523", "name": "汤阴县", "pinyin": "tangyinxian", "zip_code": "456150", "parent_code": "410500", "type": 2, "first_letter": "T" },
+  { "code": "410526", "name": "滑县", "pinyin": "huaxian", "zip_code": "456400", "parent_code": "410500", "type": 2, "first_letter": "H" },
+  { "code": "410527", "name": "内黄县", "pinyin": "neihuangxian", "zip_code": "456350", "parent_code": "410500", "type": 2, "first_letter": "N" },
+  { "code": "410581", "name": "林州市", "pinyin": "linzhoushi", "zip_code": "456500", "parent_code": "410500", "type": 2, "first_letter": "L" },
+  { "code": "410600", "name": "鹤壁市", "pinyin": "hebishi", "zip_code": "458000", "parent_code": "410000", "type": 1, "first_letter": "H" },
+  { "code": "410602", "name": "鹤山区", "pinyin": "heshanqu", "zip_code": "458010", "parent_code": "410600", "type": 2, "first_letter": "H" },
+  { "code": "410603", "name": "山城区", "pinyin": "shanchengqu", "zip_code": "458000", "parent_code": "410600", "type": 2, "first_letter": "S" },
+  { "code": "410611", "name": "淇滨区", "pinyin": "qibinqu", "zip_code": "458000", "parent_code": "410600", "type": 2, "first_letter": "Q" },
+  { "code": "410621", "name": "浚县", "pinyin": "junxian", "zip_code": "456250", "parent_code": "410600", "type": 2, "first_letter": "J" },
+  { "code": "410622", "name": "淇县", "pinyin": "qixian", "zip_code": "456750", "parent_code": "410600", "type": 2, "first_letter": "Q" },
+  { "code": "410700", "name": "新乡市", "pinyin": "xinxiangshi", "zip_code": "453000", "parent_code": "410000", "type": 1, "first_letter": "X" },
+  { "code": "410702", "name": "红旗区", "pinyin": "hongqiqu", "zip_code": "453000", "parent_code": "410700", "type": 2, "first_letter": "H" },
+  { "code": "410703", "name": "卫滨区", "pinyin": "weibinqu", "zip_code": "453000", "parent_code": "410700", "type": 2, "first_letter": "W" },
+  { "code": "410704", "name": "凤泉区", "pinyin": "fengquanqu", "zip_code": "453011", "parent_code": "410700", "type": 2, "first_letter": "F" },
+  { "code": "410711", "name": "牧野区", "pinyin": "muyequ", "zip_code": "453002", "parent_code": "410700", "type": 2, "first_letter": "M" },
+  { "code": "410721", "name": "新乡县", "pinyin": "xinxiangxian", "zip_code": "453700", "parent_code": "410700", "type": 2, "first_letter": "X" },
+  { "code": "410724", "name": "获嘉县", "pinyin": "huojiaxian", "zip_code": "453800", "parent_code": "410700", "type": 2, "first_letter": "H" },
+  { "code": "410725", "name": "原阳县", "pinyin": "yuanyangxian", "zip_code": "453500", "parent_code": "410700", "type": 2, "first_letter": "Y" },
+  { "code": "410726", "name": "延津县", "pinyin": "yanjinxian", "zip_code": "453200", "parent_code": "410700", "type": 2, "first_letter": "Y" },
+  { "code": "410727", "name": "封丘县", "pinyin": "fengqiuxian", "zip_code": "453300", "parent_code": "410700", "type": 2, "first_letter": "F" },
+  { "code": "410728", "name": "长垣县", "pinyin": "changyuanxian", "zip_code": "453400", "parent_code": "410700", "type": 2, "first_letter": "C" },
+  { "code": "410781", "name": "卫辉市", "pinyin": "weihuishi", "zip_code": "453100", "parent_code": "410700", "type": 2, "first_letter": "W" },
+  { "code": "410782", "name": "辉县市", "pinyin": "huixianshi", "zip_code": "453600", "parent_code": "410700", "type": 2, "first_letter": "H" },
+  { "code": "410800", "name": "焦作市", "pinyin": "jiaozuoshi", "zip_code": "454150", "parent_code": "410000", "type": 1, "first_letter": "J" },
+  { "code": "410802", "name": "解放区", "pinyin": "jiefangqu", "zip_code": "454000", "parent_code": "410800", "type": 2, "first_letter": "J" },
+  { "code": "410803", "name": "中站区", "pinyin": "zhongzhanqu", "zip_code": "454191", "parent_code": "410800", "type": 2, "first_letter": "Z" },
+  { "code": "410804", "name": "马村区", "pinyin": "macunqu", "zip_code": "454171", "parent_code": "410800", "type": 2, "first_letter": "M" },
+  { "code": "410811", "name": "山阳区", "pinyin": "shanyangqu", "zip_code": "454002", "parent_code": "410800", "type": 2, "first_letter": "S" },
+  { "code": "410821", "name": "修武县", "pinyin": "xiuwuxian", "zip_code": "454350", "parent_code": "410800", "type": 2, "first_letter": "X" },
+  { "code": "410822", "name": "博爱县", "pinyin": "boaixian", "zip_code": "454450", "parent_code": "410800", "type": 2, "first_letter": "B" },
+  { "code": "410823", "name": "武陟县", "pinyin": "wuzhixian", "zip_code": "454950", "parent_code": "410800", "type": 2, "first_letter": "W" },
+  { "code": "410825", "name": "温县", "pinyin": "wenxian", "zip_code": "454850", "parent_code": "410800", "type": 2, "first_letter": "W" },
+  { "code": "410882", "name": "沁阳市", "pinyin": "qinyangshi", "zip_code": "454550", "parent_code": "410800", "type": 2, "first_letter": "Q" },
+  { "code": "410883", "name": "孟州市", "pinyin": "mengzhoushi", "zip_code": "454750", "parent_code": "410800", "type": 2, "first_letter": "M" },
+  { "code": "410900", "name": "濮阳市", "pinyin": "puyangshi", "zip_code": "457000", "parent_code": "410000", "type": 1, "first_letter": "P" },
+  { "code": "410902", "name": "华龙区", "pinyin": "hualongqu", "zip_code": "457001", "parent_code": "410900", "type": 2, "first_letter": "H" },
+  { "code": "410922", "name": "清丰县", "pinyin": "qingfengxian", "zip_code": "457300", "parent_code": "410900", "type": 2, "first_letter": "Q" },
+  { "code": "410923", "name": "南乐县", "pinyin": "nanlexian", "zip_code": "457400", "parent_code": "410900", "type": 2, "first_letter": "N" },
+  { "code": "410926", "name": "范县", "pinyin": "fanxian", "zip_code": "457500", "parent_code": "410900", "type": 2, "first_letter": "F" },
+  { "code": "410927", "name": "台前县", "pinyin": "taiqianxian", "zip_code": "457600", "parent_code": "410900", "type": 2, "first_letter": "T" },
+  { "code": "410928", "name": "濮阳县", "pinyin": "puyangxian", "zip_code": "457100", "parent_code": "410900", "type": 2, "first_letter": "P" },
+  { "code": "411000", "name": "许昌市", "pinyin": "xuchangshi", "zip_code": "461000", "parent_code": "410000", "type": 1, "first_letter": "X" },
+  { "code": "411002", "name": "魏都区", "pinyin": "weiduqu", "zip_code": "461000", "parent_code": "411000", "type": 2, "first_letter": "W" },
+  { "code": "411003", "name": "建安区", "pinyin": "jiananqu", "zip_code": "461100", "parent_code": "411000", "type": 2, "first_letter": "J" },
+  { "code": "411024", "name": "鄢陵县", "pinyin": "yanlingxian", "zip_code": "461200", "parent_code": "411000", "type": 2, "first_letter": "Y" },
+  { "code": "411025", "name": "襄城县", "pinyin": "xiangchengxian", "zip_code": "461700", "parent_code": "411000", "type": 2, "first_letter": "X" },
+  { "code": "411081", "name": "禹州市", "pinyin": "yuzhoushi", "zip_code": "461670", "parent_code": "411000", "type": 2, "first_letter": "Y" },
+  { "code": "411082", "name": "长葛市", "pinyin": "changgeshi", "zip_code": "461500", "parent_code": "411000", "type": 2, "first_letter": "C" },
+  { "code": "411100", "name": "漯河市", "pinyin": "luoheshi", "zip_code": "462000", "parent_code": "410000", "type": 1, "first_letter": "L" },
+  { "code": "411102", "name": "源汇区", "pinyin": "yuanhuiqu", "zip_code": "462000", "parent_code": "411100", "type": 2, "first_letter": "Y" },
+  { "code": "411103", "name": "郾城区", "pinyin": "yanchengqu", "zip_code": "462300", "parent_code": "411100", "type": 2, "first_letter": "Y" },
+  { "code": "411104", "name": "召陵区", "pinyin": "shaolingqu", "zip_code": "462300", "parent_code": "411100", "type": 2, "first_letter": "S" },
+  { "code": "411121", "name": "舞阳县", "pinyin": "wuyangxian", "zip_code": "462400", "parent_code": "411100", "type": 2, "first_letter": "W" },
+  { "code": "411122", "name": "临颍县", "pinyin": "linyingxian", "zip_code": "462600", "parent_code": "411100", "type": 2, "first_letter": "L" },
+  { "code": "411200", "name": "三门峡市", "pinyin": "sanmenxiashi", "zip_code": "472000", "parent_code": "410000", "type": 1, "first_letter": "S" },
+  { "code": "411202", "name": "湖滨区", "pinyin": "hubinqu", "zip_code": "472000", "parent_code": "411200", "type": 2, "first_letter": "H" },
+  { "code": "411203", "name": "陕州区", "pinyin": "shanzhouqu", "zip_code": "472100", "parent_code": "411200", "type": 2, "first_letter": "S" },
+  { "code": "411221", "name": "渑池县", "pinyin": "minchixian", "zip_code": "472400", "parent_code": "411200", "type": 2, "first_letter": "M" },
+  { "code": "411224", "name": "卢氏县", "pinyin": "lushixian", "zip_code": "472200", "parent_code": "411200", "type": 2, "first_letter": "L" },
+  { "code": "411281", "name": "义马市", "pinyin": "yimashi", "zip_code": "472300", "parent_code": "411200", "type": 2, "first_letter": "Y" },
+  { "code": "411282", "name": "灵宝市", "pinyin": "lingbaoshi", "zip_code": "472500", "parent_code": "411200", "type": 2, "first_letter": "L" },
+  { "code": "411300", "name": "南阳市", "pinyin": "nanyangshi", "zip_code": "473000", "parent_code": "410000", "type": 1, "first_letter": "N" },
+  { "code": "411302", "name": "宛城区", "pinyin": "wanchengqu", "zip_code": "473001", "parent_code": "411300", "type": 2, "first_letter": "W" },
+  { "code": "411303", "name": "卧龙区", "pinyin": "wolongqu", "zip_code": "473003", "parent_code": "411300", "type": 2, "first_letter": "W" },
+  { "code": "411321", "name": "南召县", "pinyin": "nanzhaoxian", "zip_code": "474650", "parent_code": "411300", "type": 2, "first_letter": "N" },
+  { "code": "411322", "name": "方城县", "pinyin": "fangchengxian", "zip_code": "473200", "parent_code": "411300", "type": 2, "first_letter": "F" },
+  { "code": "411323", "name": "西峡县", "pinyin": "xixiaxian", "zip_code": "474550", "parent_code": "411300", "type": 2, "first_letter": "X" },
+  { "code": "411324", "name": "镇平县", "pinyin": "zhenpingxian", "zip_code": "474250", "parent_code": "411300", "type": 2, "first_letter": "Z" },
+  { "code": "411325", "name": "内乡县", "pinyin": "neixiangxian", "zip_code": "474350", "parent_code": "411300", "type": 2, "first_letter": "N" },
+  { "code": "411326", "name": "淅川县", "pinyin": "xichuanxian", "zip_code": "474450", "parent_code": "411300", "type": 2, "first_letter": "X" },
+  { "code": "411327", "name": "社旗县", "pinyin": "sheqixian", "zip_code": "473300", "parent_code": "411300", "type": 2, "first_letter": "S" },
+  { "code": "411328", "name": "唐河县", "pinyin": "tanghexian", "zip_code": "473400", "parent_code": "411300", "type": 2, "first_letter": "T" },
+  { "code": "411329", "name": "新野县", "pinyin": "xinyexian", "zip_code": "473500", "parent_code": "411300", "type": 2, "first_letter": "X" },
+  { "code": "411330", "name": "桐柏县", "pinyin": "tongbaixian", "zip_code": "474750", "parent_code": "411300", "type": 2, "first_letter": "T" },
+  { "code": "411381", "name": "邓州市", "pinyin": "dengzhoushi", "zip_code": "474150", "parent_code": "411300", "type": 2, "first_letter": "D" },
+  { "code": "411400", "name": "商丘市", "pinyin": "shangqiushi", "zip_code": "476000", "parent_code": "410000", "type": 1, "first_letter": "S" },
+  { "code": "411402", "name": "梁园区", "pinyin": "liangyuanqu", "zip_code": "476000", "parent_code": "411400", "type": 2, "first_letter": "L" },
+  { "code": "411403", "name": "睢阳区", "pinyin": "suiyangqu", "zip_code": "476100", "parent_code": "411400", "type": 2, "first_letter": "S" },
+  { "code": "411421", "name": "民权县", "pinyin": "minquanxian", "zip_code": "476800", "parent_code": "411400", "type": 2, "first_letter": "M" },
+  { "code": "411422", "name": "睢县", "pinyin": "suixian", "zip_code": "476900", "parent_code": "411400", "type": 2, "first_letter": "S" },
+  { "code": "411423", "name": "宁陵县", "pinyin": "ninglingxian", "zip_code": "476700", "parent_code": "411400", "type": 2, "first_letter": "N" },
+  { "code": "411424", "name": "柘城县", "pinyin": "zhechengxian", "zip_code": "476200", "parent_code": "411400", "type": 2, "first_letter": "Z" },
+  { "code": "411425", "name": "虞城县", "pinyin": "yuchengxian", "zip_code": "476300", "parent_code": "411400", "type": 2, "first_letter": "Y" },
+  { "code": "411426", "name": "夏邑县", "pinyin": "xiayixian", "zip_code": "476400", "parent_code": "411400", "type": 2, "first_letter": "X" },
+  { "code": "411481", "name": "永城市", "pinyin": "yongchengshi", "zip_code": "476600", "parent_code": "411400", "type": 2, "first_letter": "Y" },
+  { "code": "411500", "name": "信阳市", "pinyin": "xinyangshi", "zip_code": "464000", "parent_code": "410000", "type": 1, "first_letter": "X" },
+  { "code": "411502", "name": "浉河区", "pinyin": "shihequ", "zip_code": "464000", "parent_code": "411500", "type": 2, "first_letter": "S" },
+  { "code": "411503", "name": "平桥区", "pinyin": "pingqiaoqu", "zip_code": "464100", "parent_code": "411500", "type": 2, "first_letter": "P" },
+  { "code": "411521", "name": "罗山县", "pinyin": "luoshanxian", "zip_code": "464200", "parent_code": "411500", "type": 2, "first_letter": "L" },
+  { "code": "411522", "name": "光山县", "pinyin": "guangshanxian", "zip_code": "465450", "parent_code": "411500", "type": 2, "first_letter": "G" },
+  { "code": "411523", "name": "新县", "pinyin": "xinxian", "zip_code": "465550", "parent_code": "411500", "type": 2, "first_letter": "X" },
+  { "code": "411524", "name": "商城县", "pinyin": "shangchengxian", "zip_code": "465350", "parent_code": "411500", "type": 2, "first_letter": "S" },
+  { "code": "411525", "name": "固始县", "pinyin": "gushixian", "zip_code": "465250", "parent_code": "411500", "type": 2, "first_letter": "G" },
+  { "code": "411526", "name": "潢川县", "pinyin": "huangchuanxian", "zip_code": "465150", "parent_code": "411500", "type": 2, "first_letter": "H" },
+  { "code": "411527", "name": "淮滨县", "pinyin": "huaibinxian", "zip_code": "464400", "parent_code": "411500", "type": 2, "first_letter": "H" },
+  { "code": "411528", "name": "息县", "pinyin": "xixian", "zip_code": "464300", "parent_code": "411500", "type": 2, "first_letter": "X" },
+  { "code": "411600", "name": "周口市", "pinyin": "zhoukoushi", "zip_code": "466000", "parent_code": "410000", "type": 1, "first_letter": "Z" },
+  { "code": "411602", "name": "川汇区", "pinyin": "chuanhuiqu", "zip_code": "466000", "parent_code": "411600", "type": 2, "first_letter": "C" },
+  { "code": "411621", "name": "扶沟县", "pinyin": "fugouxian", "zip_code": "461300", "parent_code": "411600", "type": 2, "first_letter": "F" },
+  { "code": "411622", "name": "西华县", "pinyin": "xihuaxian", "zip_code": "466600", "parent_code": "411600", "type": 2, "first_letter": "X" },
+  { "code": "411623", "name": "商水县", "pinyin": "shangshuixian", "zip_code": "466100", "parent_code": "411600", "type": 2, "first_letter": "S" },
+  { "code": "411624", "name": "沈丘县", "pinyin": "shenqiuxian", "zip_code": "466300", "parent_code": "411600", "type": 2, "first_letter": "S" },
+  { "code": "411625", "name": "郸城县", "pinyin": "danchengxian", "zip_code": "477150", "parent_code": "411600", "type": 2, "first_letter": "D" },
+  { "code": "411626", "name": "淮阳县", "pinyin": "huaiyangxian", "zip_code": "477150", "parent_code": "411600", "type": 2, "first_letter": "H" },
+  { "code": "411627", "name": "太康县", "pinyin": "taikangxian", "zip_code": "461400", "parent_code": "411600", "type": 2, "first_letter": "T" },
+  { "code": "411628", "name": "鹿邑县", "pinyin": "luyixian", "zip_code": "477200", "parent_code": "411600", "type": 2, "first_letter": "L" },
+  { "code": "411681", "name": "项城市", "pinyin": "xiangchengshi", "zip_code": "466200", "parent_code": "411600", "type": 2, "first_letter": "X" },
+  { "code": "411700", "name": "驻马店市", "pinyin": "zhumadianshi", "zip_code": "463000", "parent_code": "410000", "type": 1, "first_letter": "Z" },
+  { "code": "411702", "name": "驿城区", "pinyin": "yichengqu", "zip_code": "463000", "parent_code": "411700", "type": 2, "first_letter": "Y" },
+  { "code": "411721", "name": "西平县", "pinyin": "xipingxian", "zip_code": "463900", "parent_code": "411700", "type": 2, "first_letter": "X" },
+  { "code": "411722", "name": "上蔡县", "pinyin": "shangcaixian", "zip_code": "463800", "parent_code": "411700", "type": 2, "first_letter": "S" },
+  { "code": "411723", "name": "平舆县", "pinyin": "pingyuxian", "zip_code": "463400", "parent_code": "411700", "type": 2, "first_letter": "P" },
+  { "code": "411724", "name": "正阳县", "pinyin": "zhengyangxian", "zip_code": "463600", "parent_code": "411700", "type": 2, "first_letter": "Z" },
+  { "code": "411725", "name": "确山县", "pinyin": "queshanxian", "zip_code": "463200", "parent_code": "411700", "type": 2, "first_letter": "Q" },
+  { "code": "411726", "name": "泌阳县", "pinyin": "biyangxian", "zip_code": "463700", "parent_code": "411700", "type": 2, "first_letter": "B" },
+  { "code": "411727", "name": "汝南县", "pinyin": "runanxian", "zip_code": "463300", "parent_code": "411700", "type": 2, "first_letter": "R" },
+  { "code": "411728", "name": "遂平县", "pinyin": "suipingxian", "zip_code": "463100", "parent_code": "411700", "type": 2, "first_letter": "S" },
+  { "code": "411729", "name": "新蔡县", "pinyin": "xincaixian", "zip_code": "463500", "parent_code": "411700", "type": 2, "first_letter": "X" },
+  { "code": "419000", "name": "省直辖县级行政区划", "pinyin": "shengzhixiaxianjixingzhengquhua", "zip_code": "0", "parent_code": "410000", "type": 1, "first_letter": "S" },
+  { "code": "419001", "name": "济源市", "pinyin": "jiyuanshi", "zip_code": "454650", "parent_code": "419000", "type": 2, "first_letter": "J" },
+  { "code": "420000", "name": "湖北省", "pinyin": "hubeisheng", "zip_code": "0", "type": 0, "first_letter": "H" },
+  { "code": "420100", "name": "武汉市", "pinyin": "wuhanshi", "zip_code": "430000", "parent_code": "420000", "type": 1, "first_letter": "W" },
+  { "code": "420102", "name": "江岸区", "pinyin": "jianganqu", "zip_code": "430014", "parent_code": "420100", "type": 2, "first_letter": "J" },
+  { "code": "420103", "name": "江汉区", "pinyin": "jianghanqu", "zip_code": "430021", "parent_code": "420100", "type": 2, "first_letter": "J" },
+  { "code": "420104", "name": "硚口区", "pinyin": "qiaokouqu", "zip_code": "430033", "parent_code": "420100", "type": 2, "first_letter": "Q" },
+  { "code": "420105", "name": "汉阳区", "pinyin": "hanyangqu", "zip_code": "430050", "parent_code": "420100", "type": 2, "first_letter": "H" },
+  { "code": "420106", "name": "武昌区", "pinyin": "wuchangqu", "zip_code": "430061", "parent_code": "420100", "type": 2, "first_letter": "W" },
+  { "code": "420107", "name": "青山区", "pinyin": "qingshanqu", "zip_code": "430080", "parent_code": "420100", "type": 2, "first_letter": "Q" },
+  { "code": "420111", "name": "洪山区", "pinyin": "hongshanqu", "zip_code": "430070", "parent_code": "420100", "type": 2, "first_letter": "H" },
+  { "code": "420112", "name": "东西湖区", "pinyin": "dongxihuqu", "zip_code": "430040", "parent_code": "420100", "type": 2, "first_letter": "D" },
+  { "code": "420113", "name": "汉南区", "pinyin": "hannanqu", "zip_code": "430090", "parent_code": "420100", "type": 2, "first_letter": "H" },
+  { "code": "420114", "name": "蔡甸区", "pinyin": "caidianqu", "zip_code": "430100", "parent_code": "420100", "type": 2, "first_letter": "C" },
+  { "code": "420115", "name": "江夏区", "pinyin": "jiangxiaqu", "zip_code": "430200", "parent_code": "420100", "type": 2, "first_letter": "J" },
+  { "code": "420116", "name": "黄陂区", "pinyin": "huangpoqu", "zip_code": "432200", "parent_code": "420100", "type": 2, "first_letter": "H" },
+  { "code": "420117", "name": "新洲区", "pinyin": "xinzhouqu", "zip_code": "431400", "parent_code": "420100", "type": 2, "first_letter": "X" },
+  { "code": "420200", "name": "黄石市", "pinyin": "huangshishi", "zip_code": "435000", "parent_code": "420000", "type": 1, "first_letter": "H" },
+  { "code": "420202", "name": "黄石港区", "pinyin": "huangshigangqu", "zip_code": "435000", "parent_code": "420200", "type": 2, "first_letter": "H" },
+  { "code": "420203", "name": "西塞山区", "pinyin": "xisaishanqu", "zip_code": "435001", "parent_code": "420200", "type": 2, "first_letter": "X" },
+  { "code": "420204", "name": "下陆区", "pinyin": "xialuqu", "zip_code": "435005", "parent_code": "420200", "type": 2, "first_letter": "X" },
+  { "code": "420205", "name": "铁山区", "pinyin": "tieshanqu", "zip_code": "435006", "parent_code": "420200", "type": 2, "first_letter": "T" },
+  { "code": "420222", "name": "阳新县", "pinyin": "yangxinxian", "zip_code": "435200", "parent_code": "420200", "type": 2, "first_letter": "Y" },
+  { "code": "420281", "name": "大冶市", "pinyin": "dayeshi", "zip_code": "435100", "parent_code": "420200", "type": 2, "first_letter": "D" },
+  { "code": "420300", "name": "十堰市", "pinyin": "shiyanshi", "zip_code": "442000", "parent_code": "420000", "type": 1, "first_letter": "S" },
+  { "code": "420302", "name": "茅箭区", "pinyin": "maojianqu", "zip_code": "442012", "parent_code": "420300", "type": 2, "first_letter": "M" },
+  { "code": "420303", "name": "张湾区", "pinyin": "zhangwanqu", "zip_code": "442001", "parent_code": "420300", "type": 2, "first_letter": "Z" },
+  { "code": "420304", "name": "郧阳区", "pinyin": "yunyangqu", "zip_code": "442500", "parent_code": "420300", "type": 2, "first_letter": "Y" },
+  { "code": "420322", "name": "郧西县", "pinyin": "yunxixian", "zip_code": "442600", "parent_code": "420300", "type": 2, "first_letter": "Y" },
+  { "code": "420323", "name": "竹山县", "pinyin": "zhushanxian", "zip_code": "442200", "parent_code": "420300", "type": 2, "first_letter": "Z" },
+  { "code": "420324", "name": "竹溪县", "pinyin": "zhuxixian", "zip_code": "442300", "parent_code": "420300", "type": 2, "first_letter": "Z" },
+  { "code": "420325", "name": "房县", "pinyin": "fangxian", "zip_code": "442100", "parent_code": "420300", "type": 2, "first_letter": "F" },
+  { "code": "420381", "name": "丹江口市", "pinyin": "danjiangkoushi", "zip_code": "442700", "parent_code": "420300", "type": 2, "first_letter": "D" },
+  { "code": "420500", "name": "宜昌市", "pinyin": "yichangshi", "zip_code": "443000", "parent_code": "420000", "type": 1, "first_letter": "Y" },
+  { "code": "420502", "name": "西陵区", "pinyin": "xilingqu", "zip_code": "443000", "parent_code": "420500", "type": 2, "first_letter": "X" },
+  { "code": "420503", "name": "伍家岗区", "pinyin": "wujiagangqu", "zip_code": "443001", "parent_code": "420500", "type": 2, "first_letter": "W" },
+  { "code": "420504", "name": "点军区", "pinyin": "dianjunqu", "zip_code": "443006", "parent_code": "420500", "type": 2, "first_letter": "D" },
+  { "code": "420505", "name": "猇亭区", "pinyin": "xiaotingqu", "zip_code": "443007", "parent_code": "420500", "type": 2, "first_letter": "X" },
+  { "code": "420506", "name": "夷陵区", "pinyin": "yilingqu", "zip_code": "443100", "parent_code": "420500", "type": 2, "first_letter": "Y" },
+  { "code": "420525", "name": "远安县", "pinyin": "yuananxian", "zip_code": "444200", "parent_code": "420500", "type": 2, "first_letter": "Y" },
+  { "code": "420526", "name": "兴山县", "pinyin": "xingshanxian", "zip_code": "443711", "parent_code": "420500", "type": 2, "first_letter": "X" },
+  { "code": "420527", "name": "秭归县", "pinyin": "ziguixian", "zip_code": "443600", "parent_code": "420500", "type": 2, "first_letter": "Z" },
+  { "code": "420528", "name": "长阳土家族自治县", "pinyin": "changyangtujiazuzizhixian", "zip_code": "443500", "parent_code": "420500", "type": 2, "first_letter": "C" },
+  { "code": "420529", "name": "五峰土家族自治县", "pinyin": "wufengtujiazuzizhixian", "zip_code": "443400", "parent_code": "420500", "type": 2, "first_letter": "W" },
+  { "code": "420581", "name": "宜都市", "pinyin": "yidushi", "zip_code": "443300", "parent_code": "420500", "type": 2, "first_letter": "Y" },
+  { "code": "420582", "name": "当阳市", "pinyin": "dangyangshi", "zip_code": "444100", "parent_code": "420500", "type": 2, "first_letter": "D" },
+  { "code": "420583", "name": "枝江市", "pinyin": "zhijiangshi", "zip_code": "443200", "parent_code": "420500", "type": 2, "first_letter": "Z" },
+  { "code": "420600", "name": "襄阳市", "pinyin": "xiangyangshi", "zip_code": "0", "parent_code": "420000", "type": 1, "first_letter": "X" },
+  { "code": "420602", "name": "襄城区", "pinyin": "xiangchengqu", "zip_code": "441021", "parent_code": "420600", "type": 2, "first_letter": "X" },
+  { "code": "420606", "name": "樊城区", "pinyin": "fanchengqu", "zip_code": "441001", "parent_code": "420600", "type": 2, "first_letter": "F" },
+  { "code": "420607", "name": "襄州区", "pinyin": "xiangzhouqu", "zip_code": "441000", "parent_code": "420600", "type": 2, "first_letter": "X" },
+  { "code": "420624", "name": "南漳县", "pinyin": "nanzhangxian", "zip_code": "441500", "parent_code": "420600", "type": 2, "first_letter": "N" },
+  { "code": "420625", "name": "谷城县", "pinyin": "guchengxian", "zip_code": "441700", "parent_code": "420600", "type": 2, "first_letter": "G" },
+  { "code": "420626", "name": "保康县", "pinyin": "baokangxian", "zip_code": "441600", "parent_code": "420600", "type": 2, "first_letter": "B" },
+  { "code": "420682", "name": "老河口市", "pinyin": "laohekoushi", "zip_code": "441800", "parent_code": "420600", "type": 2, "first_letter": "L" },
+  { "code": "420683", "name": "枣阳市", "pinyin": "zaoyangshi", "zip_code": "441200", "parent_code": "420600", "type": 2, "first_letter": "Z" },
+  { "code": "420684", "name": "宜城市", "pinyin": "yichengshi", "zip_code": "441400", "parent_code": "420600", "type": 2, "first_letter": "Y" },
+  { "code": "420700", "name": "鄂州市", "pinyin": "ezhoushi", "zip_code": "436000", "parent_code": "420000", "type": 1, "first_letter": "E" },
+  { "code": "420702", "name": "梁子湖区", "pinyin": "liangzihuqu", "zip_code": "436064", "parent_code": "420700", "type": 2, "first_letter": "L" },
+  { "code": "420703", "name": "华容区", "pinyin": "huarongqu", "zip_code": "436030", "parent_code": "420700", "type": 2, "first_letter": "H" },
+  { "code": "420704", "name": "鄂城区", "pinyin": "echengqu", "zip_code": "436000", "parent_code": "420700", "type": 2, "first_letter": "E" },
+  { "code": "420800", "name": "荆门市", "pinyin": "jingmenshi", "zip_code": "448000", "parent_code": "420000", "type": 1, "first_letter": "J" },
+  { "code": "420802", "name": "东宝区", "pinyin": "dongbaoqu", "zip_code": "448004", "parent_code": "420800", "type": 2, "first_letter": "D" },
+  { "code": "420804", "name": "掇刀区", "pinyin": "duodaoqu", "zip_code": "448124", "parent_code": "420800", "type": 2, "first_letter": "D" },
+  { "code": "420821", "name": "京山县", "pinyin": "jingshanxian", "zip_code": "431800", "parent_code": "420800", "type": 2, "first_letter": "J" },
+  { "code": "420822", "name": "沙洋县", "pinyin": "shayangxian", "zip_code": "448200", "parent_code": "420800", "type": 2, "first_letter": "S" },
+  { "code": "420881", "name": "钟祥市", "pinyin": "zhongxiangshi", "zip_code": "431900", "parent_code": "420800", "type": 2, "first_letter": "Z" },
+  { "code": "420900", "name": "孝感市", "pinyin": "xiaoganshi", "zip_code": "432000", "parent_code": "420000", "type": 1, "first_letter": "X" },
+  { "code": "420902", "name": "孝南区", "pinyin": "xiaonanqu", "zip_code": "432100", "parent_code": "420900", "type": 2, "first_letter": "X" },
+  { "code": "420921", "name": "孝昌县", "pinyin": "xiaochangxian", "zip_code": "432900", "parent_code": "420900", "type": 2, "first_letter": "X" },
+  { "code": "420922", "name": "大悟县", "pinyin": "dawuxian", "zip_code": "432800", "parent_code": "420900", "type": 2, "first_letter": "D" },
+  { "code": "420923", "name": "云梦县", "pinyin": "yunmengxian", "zip_code": "432500", "parent_code": "420900", "type": 2, "first_letter": "Y" },
+  { "code": "420981", "name": "应城市", "pinyin": "yingchengshi", "zip_code": "432400", "parent_code": "420900", "type": 2, "first_letter": "Y" },
+  { "code": "420982", "name": "安陆市", "pinyin": "anlushi", "zip_code": "432600", "parent_code": "420900", "type": 2, "first_letter": "A" },
+  { "code": "420984", "name": "汉川市", "pinyin": "hanchuanshi", "zip_code": "432300", "parent_code": "420900", "type": 2, "first_letter": "H" },
+  { "code": "421000", "name": "荆州市", "pinyin": "jingzhoushi", "zip_code": "434000", "parent_code": "420000", "type": 1, "first_letter": "J" },
+  { "code": "421002", "name": "沙市区", "pinyin": "shashiqu", "zip_code": "434000", "parent_code": "421000", "type": 2, "first_letter": "S" },
+  { "code": "421003", "name": "荆州区", "pinyin": "jingzhouqu", "zip_code": "434020", "parent_code": "421000", "type": 2, "first_letter": "J" },
+  { "code": "421022", "name": "公安县", "pinyin": "gonganxian", "zip_code": "434300", "parent_code": "421000", "type": 2, "first_letter": "G" },
+  { "code": "421023", "name": "监利县", "pinyin": "jianlixian", "zip_code": "433300", "parent_code": "421000", "type": 2, "first_letter": "J" },
+  { "code": "421024", "name": "江陵县", "pinyin": "jianglingxian", "zip_code": "434101", "parent_code": "421000", "type": 2, "first_letter": "J" },
+  { "code": "421081", "name": "石首市", "pinyin": "shishoushi", "zip_code": "434400", "parent_code": "421000", "type": 2, "first_letter": "S" },
+  { "code": "421083", "name": "洪湖市", "pinyin": "honghushi", "zip_code": "433200", "parent_code": "421000", "type": 2, "first_letter": "H" },
+  { "code": "421087", "name": "松滋市", "pinyin": "songzishi", "zip_code": "434200", "parent_code": "421000", "type": 2, "first_letter": "S" },
+  { "code": "421100", "name": "黄冈市", "pinyin": "huanggangshi", "zip_code": "438000", "parent_code": "420000", "type": 1, "first_letter": "H" },
+  { "code": "421102", "name": "黄州区", "pinyin": "huangzhouqu", "zip_code": "438000", "parent_code": "421100", "type": 2, "first_letter": "H" },
+  { "code": "421121", "name": "团风县", "pinyin": "tuanfengxian", "zip_code": "438000", "parent_code": "421100", "type": 2, "first_letter": "T" },
+  { "code": "421122", "name": "红安县", "pinyin": "honganxian", "zip_code": "438401", "parent_code": "421100", "type": 2, "first_letter": "H" },
+  { "code": "421123", "name": "罗田县", "pinyin": "luotianxian", "zip_code": "438600", "parent_code": "421100", "type": 2, "first_letter": "L" },
+  { "code": "421124", "name": "英山县", "pinyin": "yingshanxian", "zip_code": "438700", "parent_code": "421100", "type": 2, "first_letter": "Y" },
+  { "code": "421125", "name": "浠水县", "pinyin": "xishuixian", "zip_code": "438200", "parent_code": "421100", "type": 2, "first_letter": "X" },
+  { "code": "421126", "name": "蕲春县", "pinyin": "qichunxian", "zip_code": "435300", "parent_code": "421100", "type": 2, "first_letter": "Q" },
+  { "code": "421127", "name": "黄梅县", "pinyin": "huangmeixian", "zip_code": "435500", "parent_code": "421100", "type": 2, "first_letter": "H" },
+  { "code": "421181", "name": "麻城市", "pinyin": "machengshi", "zip_code": "438300", "parent_code": "421100", "type": 2, "first_letter": "M" },
+  { "code": "421182", "name": "武穴市", "pinyin": "wuxueshi", "zip_code": "435400", "parent_code": "421100", "type": 2, "first_letter": "W" },
+  { "code": "421200", "name": "咸宁市", "pinyin": "xianningshi", "zip_code": "437000", "parent_code": "420000", "type": 1, "first_letter": "X" },
+  { "code": "421202", "name": "咸安区", "pinyin": "xiananqu", "zip_code": "437000", "parent_code": "421200", "type": 2, "first_letter": "X" },
+  { "code": "421221", "name": "嘉鱼县", "pinyin": "jiayuxian", "zip_code": "437200", "parent_code": "421200", "type": 2, "first_letter": "J" },
+  { "code": "421222", "name": "通城县", "pinyin": "tongchengxian", "zip_code": "437400", "parent_code": "421200", "type": 2, "first_letter": "T" },
+  { "code": "421223", "name": "崇阳县", "pinyin": "chongyangxian", "zip_code": "437500", "parent_code": "421200", "type": 2, "first_letter": "C" },
+  { "code": "421224", "name": "通山县", "pinyin": "tongshanxian", "zip_code": "437600", "parent_code": "421200", "type": 2, "first_letter": "T" },
+  { "code": "421281", "name": "赤壁市", "pinyin": "chibishi", "zip_code": "437300", "parent_code": "421200", "type": 2, "first_letter": "C" },
+  { "code": "421300", "name": "随州市", "pinyin": "suizhoushi", "zip_code": "441300", "parent_code": "420000", "type": 1, "first_letter": "S" },
+  { "code": "421303", "name": "曾都区", "pinyin": "cengduqu", "zip_code": "441300", "parent_code": "421300", "type": 2, "first_letter": "C" },
+  { "code": "421321", "name": "随县", "pinyin": "suixian", "zip_code": "431500", "parent_code": "421300", "type": 2, "first_letter": "S" },
+  { "code": "421381", "name": "广水市", "pinyin": "guangshuishi", "zip_code": "432700", "parent_code": "421300", "type": 2, "first_letter": "G" },
+  { "code": "422800", "name": "恩施土家族苗族自治州", "pinyin": "enshitujiazumiaozuzizhizhou", "zip_code": "445000", "parent_code": "420000", "type": 1, "first_letter": "E" },
+  { "code": "422801", "name": "恩施市", "pinyin": "enshishi", "zip_code": "445000", "parent_code": "422800", "type": 2, "first_letter": "E" },
+  { "code": "422802", "name": "利川市", "pinyin": "lichuanshi", "zip_code": "445400", "parent_code": "422800", "type": 2, "first_letter": "L" },
+  { "code": "422822", "name": "建始县", "pinyin": "jianshixian", "zip_code": "445300", "parent_code": "422800", "type": 2, "first_letter": "J" },
+  { "code": "422823", "name": "巴东县", "pinyin": "badongxian", "zip_code": "444300", "parent_code": "422800", "type": 2, "first_letter": "B" },
+  { "code": "422825", "name": "宣恩县", "pinyin": "xuanenxian", "zip_code": "445500", "parent_code": "422800", "type": 2, "first_letter": "X" },
+  { "code": "422826", "name": "咸丰县", "pinyin": "xianfengxian", "zip_code": "445600", "parent_code": "422800", "type": 2, "first_letter": "X" },
+  { "code": "422827", "name": "来凤县", "pinyin": "laifengxian", "zip_code": "445700", "parent_code": "422800", "type": 2, "first_letter": "L" },
+  { "code": "422828", "name": "鹤峰县", "pinyin": "hefengxian", "zip_code": "445800", "parent_code": "422800", "type": 2, "first_letter": "H" },
+  { "code": "429000", "name": "省直辖县级行政区划", "pinyin": "shengzhixiaxianjixingzhengquhua", "zip_code": "0", "parent_code": "420000", "type": 1, "first_letter": "S" },
+  { "code": "429004", "name": "仙桃市", "pinyin": "xiantaoshi", "zip_code": "433000", "parent_code": "429000", "type": 2, "first_letter": "X" },
+  { "code": "429005", "name": "潜江市", "pinyin": "qianjiangshi", "zip_code": "433100", "parent_code": "429000", "type": 2, "first_letter": "Q" },
+  { "code": "429006", "name": "天门市", "pinyin": "tianmenshi", "zip_code": "431700", "parent_code": "429000", "type": 2, "first_letter": "T" },
+  { "code": "429021", "name": "神农架林区", "pinyin": "shennongjialinqu", "zip_code": "442400", "parent_code": "429000", "type": 2, "first_letter": "S" },
+  { "code": "430000", "name": "湖南省", "pinyin": "hunansheng", "zip_code": "0", "type": 0, "first_letter": "H" },
+  { "code": "430100", "name": "长沙市", "pinyin": "changshashi", "zip_code": "410000", "parent_code": "430000", "type": 1, "first_letter": "C" },
+  { "code": "430102", "name": "芙蓉区", "pinyin": "furongqu", "zip_code": "410011", "parent_code": "430100", "type": 2, "first_letter": "F" },
+  { "code": "430103", "name": "天心区", "pinyin": "tianxinqu", "zip_code": "410011", "parent_code": "430100", "type": 2, "first_letter": "T" },
+  { "code": "430104", "name": "岳麓区", "pinyin": "yueluqu", "zip_code": "410006", "parent_code": "430100", "type": 2, "first_letter": "Y" },
+  { "code": "430105", "name": "开福区", "pinyin": "kaifuqu", "zip_code": "410008", "parent_code": "430100", "type": 2, "first_letter": "K" },
+  { "code": "430111", "name": "雨花区", "pinyin": "yuhuaqu", "zip_code": "410011", "parent_code": "430100", "type": 2, "first_letter": "Y" },
+  { "code": "430112", "name": "望城区", "pinyin": "wangchengqu", "zip_code": "410000", "parent_code": "430100", "type": 2, "first_letter": "W" },
+  { "code": "430121", "name": "长沙县", "pinyin": "changshaxian", "zip_code": "410100", "parent_code": "430100", "type": 2, "first_letter": "C" },
+  { "code": "430181", "name": "浏阳市", "pinyin": "liuyangshi", "zip_code": "410300", "parent_code": "430100", "type": 2, "first_letter": "L" },
+  { "code": "430182", "name": "宁乡市", "pinyin": "ningxiangshi", "zip_code": "410600", "parent_code": "430100", "type": 2, "first_letter": "N" },
+  { "code": "430200", "name": "株洲市", "pinyin": "zhuzhoushi", "zip_code": "412000", "parent_code": "430000", "type": 1, "first_letter": "Z" },
+  { "code": "430202", "name": "荷塘区", "pinyin": "hetangqu", "zip_code": "412000", "parent_code": "430200", "type": 2, "first_letter": "H" },
+  { "code": "430203", "name": "芦淞区", "pinyin": "lusongqu", "zip_code": "412000", "parent_code": "430200", "type": 2, "first_letter": "L" },
+  { "code": "430204", "name": "石峰区", "pinyin": "shifengqu", "zip_code": "412005", "parent_code": "430200", "type": 2, "first_letter": "S" },
+  { "code": "430211", "name": "天元区", "pinyin": "tianyuanqu", "zip_code": "412007", "parent_code": "430200", "type": 2, "first_letter": "T" },
+  { "code": "430221", "name": "株洲县", "pinyin": "zhuzhouxian", "zip_code": "412100", "parent_code": "430200", "type": 2, "first_letter": "Z" },
+  { "code": "430223", "name": "攸县", "pinyin": "youxian", "zip_code": "412300", "parent_code": "430200", "type": 2, "first_letter": "Y" },
+  { "code": "430224", "name": "茶陵县", "pinyin": "chalingxian", "zip_code": "412400", "parent_code": "430200", "type": 2, "first_letter": "C" },
+  { "code": "430225", "name": "炎陵县", "pinyin": "yanlingxian", "zip_code": "412500", "parent_code": "430200", "type": 2, "first_letter": "Y" },
+  { "code": "430281", "name": "醴陵市", "pinyin": "lilingshi", "zip_code": "412200", "parent_code": "430200", "type": 2, "first_letter": "L" },
+  { "code": "430300", "name": "湘潭市", "pinyin": "xiangtanshi", "zip_code": "411100", "parent_code": "430000", "type": 1, "first_letter": "X" },
+  { "code": "430302", "name": "雨湖区", "pinyin": "yuhuqu", "zip_code": "411100", "parent_code": "430300", "type": 2, "first_letter": "Y" },
+  { "code": "430304", "name": "岳塘区", "pinyin": "yuetangqu", "zip_code": "411101", "parent_code": "430300", "type": 2, "first_letter": "Y" },
+  { "code": "430321", "name": "湘潭县", "pinyin": "xiangtanxian", "zip_code": "411228", "parent_code": "430300", "type": 2, "first_letter": "X" },
+  { "code": "430381", "name": "湘乡市", "pinyin": "xiangxiangshi", "zip_code": "411400", "parent_code": "430300", "type": 2, "first_letter": "X" },
+  { "code": "430382", "name": "韶山市", "pinyin": "shaoshanshi", "zip_code": "411300", "parent_code": "430300", "type": 2, "first_letter": "S" },
+  { "code": "430400", "name": "衡阳市", "pinyin": "hengyangshi", "zip_code": "421000", "parent_code": "430000", "type": 1, "first_letter": "H" },
+  { "code": "430405", "name": "珠晖区", "pinyin": "zhuhuiqu", "zip_code": "421002", "parent_code": "430400", "type": 2, "first_letter": "Z" },
+  { "code": "430406", "name": "雁峰区", "pinyin": "yanfengqu", "zip_code": "421001", "parent_code": "430400", "type": 2, "first_letter": "Y" },
+  { "code": "430407", "name": "石鼓区", "pinyin": "shiguqu", "zip_code": "421001", "parent_code": "430400", "type": 2, "first_letter": "S" },
+  { "code": "430408", "name": "蒸湘区", "pinyin": "zhengxiangqu", "zip_code": "421001", "parent_code": "430400", "type": 2, "first_letter": "Z" },
+  { "code": "430412", "name": "南岳区", "pinyin": "nanyuequ", "zip_code": "421900", "parent_code": "430400", "type": 2, "first_letter": "N" },
+  { "code": "430421", "name": "衡阳县", "pinyin": "hengyangxian", "zip_code": "421200", "parent_code": "430400", "type": 2, "first_letter": "H" },
+  { "code": "430422", "name": "衡南县", "pinyin": "hengnanxian", "zip_code": "421131", "parent_code": "430400", "type": 2, "first_letter": "H" },
+  { "code": "430423", "name": "衡山县", "pinyin": "hengshanxian", "zip_code": "421300", "parent_code": "430400", "type": 2, "first_letter": "H" },
+  { "code": "430424", "name": "衡东县", "pinyin": "hengdongxian", "zip_code": "421400", "parent_code": "430400", "type": 2, "first_letter": "H" },
+  { "code": "430426", "name": "祁东县", "pinyin": "qidongxian", "zip_code": "421600", "parent_code": "430400", "type": 2, "first_letter": "Q" },
+  { "code": "430481", "name": "耒阳市", "pinyin": "leiyangshi", "zip_code": "421800", "parent_code": "430400", "type": 2, "first_letter": "L" },
+  { "code": "430482", "name": "常宁市", "pinyin": "changningshi", "zip_code": "421500", "parent_code": "430400", "type": 2, "first_letter": "C" },
+  { "code": "430500", "name": "邵阳市", "pinyin": "shaoyangshi", "zip_code": "422000", "parent_code": "430000", "type": 1, "first_letter": "S" },
+  { "code": "430502", "name": "双清区", "pinyin": "shuangqingqu", "zip_code": "422001", "parent_code": "430500", "type": 2, "first_letter": "S" },
+  { "code": "430503", "name": "大祥区", "pinyin": "daxiangqu", "zip_code": "422000", "parent_code": "430500", "type": 2, "first_letter": "D" },
+  { "code": "430511", "name": "北塔区", "pinyin": "beitaqu", "zip_code": "422007", "parent_code": "430500", "type": 2, "first_letter": "B" },
+  { "code": "430521", "name": "邵东县", "pinyin": "shaodongxian", "zip_code": "422800", "parent_code": "430500", "type": 2, "first_letter": "S" },
+  { "code": "430522", "name": "新邵县", "pinyin": "xinshaoxian", "zip_code": "422900", "parent_code": "430500", "type": 2, "first_letter": "X" },
+  { "code": "430523", "name": "邵阳县", "pinyin": "shaoyangxian", "zip_code": "422100", "parent_code": "430500", "type": 2, "first_letter": "S" },
+  { "code": "430524", "name": "隆回县", "pinyin": "longhuixian", "zip_code": "422200", "parent_code": "430500", "type": 2, "first_letter": "L" },
+  { "code": "430525", "name": "洞口县", "pinyin": "dongkouxian", "zip_code": "422300", "parent_code": "430500", "type": 2, "first_letter": "D" },
+  { "code": "430527", "name": "绥宁县", "pinyin": "suiningxian", "zip_code": "422600", "parent_code": "430500", "type": 2, "first_letter": "S" },
+  { "code": "430528", "name": "新宁县", "pinyin": "xinningxian", "zip_code": "422700", "parent_code": "430500", "type": 2, "first_letter": "X" },
+  { "code": "430529", "name": "城步苗族自治县", "pinyin": "chengbumiaozuzizhixian", "zip_code": "422500", "parent_code": "430500", "type": 2, "first_letter": "C" },
+  { "code": "430581", "name": "武冈市", "pinyin": "wugangshi", "zip_code": "422400", "parent_code": "430500", "type": 2, "first_letter": "W" },
+  { "code": "430600", "name": "岳阳市", "pinyin": "yueyangshi", "zip_code": "414000", "parent_code": "430000", "type": 1, "first_letter": "Y" },
+  { "code": "430602", "name": "岳阳楼区", "pinyin": "yueyanglouqu", "zip_code": "414000", "parent_code": "430600", "type": 2, "first_letter": "Y" },
+  { "code": "430603", "name": "云溪区", "pinyin": "yunxiqu", "zip_code": "414009", "parent_code": "430600", "type": 2, "first_letter": "Y" },
+  { "code": "430611", "name": "君山区", "pinyin": "junshanqu", "zip_code": "414005", "parent_code": "430600", "type": 2, "first_letter": "J" },
+  { "code": "430621", "name": "岳阳县", "pinyin": "yueyangxian", "zip_code": "414100", "parent_code": "430600", "type": 2, "first_letter": "Y" },
+  { "code": "430623", "name": "华容县", "pinyin": "huarongxian", "zip_code": "414200", "parent_code": "430600", "type": 2, "first_letter": "H" },
+  { "code": "430624", "name": "湘阴县", "pinyin": "xiangyinxian", "zip_code": "414200", "parent_code": "430600", "type": 2, "first_letter": "X" },
+  { "code": "430626", "name": "平江县", "pinyin": "pingjiangxian", "zip_code": "414500", "parent_code": "430600", "type": 2, "first_letter": "P" },
+  { "code": "430681", "name": "汨罗市", "pinyin": "miluoshi", "zip_code": "414400", "parent_code": "430600", "type": 2, "first_letter": "M" },
+  { "code": "430682", "name": "临湘市", "pinyin": "linxiangshi", "zip_code": "414300", "parent_code": "430600", "type": 2, "first_letter": "L" },
+  { "code": "430700", "name": "常德市", "pinyin": "changdeshi", "zip_code": "415000", "parent_code": "430000", "type": 1, "first_letter": "C" },
+  { "code": "430702", "name": "武陵区", "pinyin": "wulingqu", "zip_code": "415000", "parent_code": "430700", "type": 2, "first_letter": "W" },
+  { "code": "430703", "name": "鼎城区", "pinyin": "dingchengqu", "zip_code": "415101", "parent_code": "430700", "type": 2, "first_letter": "D" },
+  { "code": "430721", "name": "安乡县", "pinyin": "anxiangxian", "zip_code": "415600", "parent_code": "430700", "type": 2, "first_letter": "A" },
+  { "code": "430722", "name": "汉寿县", "pinyin": "hanshouxian", "zip_code": "415900", "parent_code": "430700", "type": 2, "first_letter": "H" },
+  { "code": "430723", "name": "澧县", "pinyin": "lixian", "zip_code": "415500", "parent_code": "430700", "type": 2, "first_letter": "L" },
+  { "code": "430724", "name": "临澧县", "pinyin": "linlixian", "zip_code": "415200", "parent_code": "430700", "type": 2, "first_letter": "L" },
+  { "code": "430725", "name": "桃源县", "pinyin": "taoyuanxian", "zip_code": "415700", "parent_code": "430700", "type": 2, "first_letter": "T" },
+  { "code": "430726", "name": "石门县", "pinyin": "shimenxian", "zip_code": "415300", "parent_code": "430700", "type": 2, "first_letter": "S" },
+  { "code": "430781", "name": "津市市", "pinyin": "jinshishi", "zip_code": "415400", "parent_code": "430700", "type": 2, "first_letter": "J" },
+  { "code": "430800", "name": "张家界市", "pinyin": "zhangjiajieshi", "zip_code": "427000", "parent_code": "430000", "type": 1, "first_letter": "Z" },
+  { "code": "430802", "name": "永定区", "pinyin": "yongdingqu", "zip_code": "427000", "parent_code": "430800", "type": 2, "first_letter": "Y" },
+  { "code": "430811", "name": "武陵源区", "pinyin": "wulingyuanqu", "zip_code": "427400", "parent_code": "430800", "type": 2, "first_letter": "W" },
+  { "code": "430821", "name": "慈利县", "pinyin": "cilixian", "zip_code": "427200", "parent_code": "430800", "type": 2, "first_letter": "C" },
+  { "code": "430822", "name": "桑植县", "pinyin": "sangzhixian", "zip_code": "427100", "parent_code": "430800", "type": 2, "first_letter": "S" },
+  { "code": "430900", "name": "益阳市", "pinyin": "yiyangshi", "zip_code": "413000", "parent_code": "430000", "type": 1, "first_letter": "Y" },
+  { "code": "430902", "name": "资阳区", "pinyin": "ziyangqu", "zip_code": "413001", "parent_code": "430900", "type": 2, "first_letter": "Z" },
+  { "code": "430903", "name": "赫山区", "pinyin": "heshanqu", "zip_code": "413002", "parent_code": "430900", "type": 2, "first_letter": "H" },
+  { "code": "430921", "name": "南县", "pinyin": "nanxian", "zip_code": "413200", "parent_code": "430900", "type": 2, "first_letter": "N" },
+  { "code": "430922", "name": "桃江县", "pinyin": "taojiangxian", "zip_code": "413400", "parent_code": "430900", "type": 2, "first_letter": "T" },
+  { "code": "430923", "name": "安化县", "pinyin": "anhuaxian", "zip_code": "413500", "parent_code": "430900", "type": 2, "first_letter": "A" },
+  { "code": "430981", "name": "沅江市", "pinyin": "yuanjiangshi", "zip_code": "413100", "parent_code": "430900", "type": 2, "first_letter": "Y" },
+  { "code": "431000", "name": "郴州市", "pinyin": "chenzhoushi", "zip_code": "423000", "parent_code": "430000", "type": 1, "first_letter": "C" },
+  { "code": "431002", "name": "北湖区", "pinyin": "beihuqu", "zip_code": "423000", "parent_code": "431000", "type": 2, "first_letter": "B" },
+  { "code": "431003", "name": "苏仙区", "pinyin": "suxianqu", "zip_code": "423000", "parent_code": "431000", "type": 2, "first_letter": "S" },
+  { "code": "431021", "name": "桂阳县", "pinyin": "guiyangxian", "zip_code": "424400", "parent_code": "431000", "type": 2, "first_letter": "G" },
+  { "code": "431022", "name": "宜章县", "pinyin": "yizhangxian", "zip_code": "424200", "parent_code": "431000", "type": 2, "first_letter": "Y" },
+  { "code": "431023", "name": "永兴县", "pinyin": "yongxingxian", "zip_code": "423300", "parent_code": "431000", "type": 2, "first_letter": "Y" },
+  { "code": "431024", "name": "嘉禾县", "pinyin": "jiahexian", "zip_code": "424500", "parent_code": "431000", "type": 2, "first_letter": "J" },
+  { "code": "431025", "name": "临武县", "pinyin": "linwuxian", "zip_code": "424300", "parent_code": "431000", "type": 2, "first_letter": "L" },
+  { "code": "431026", "name": "汝城县", "pinyin": "ruchengxian", "zip_code": "424100", "parent_code": "431000", "type": 2, "first_letter": "R" },
+  { "code": "431027", "name": "桂东县", "pinyin": "guidongxian", "zip_code": "423500", "parent_code": "431000", "type": 2, "first_letter": "G" },
+  { "code": "431028", "name": "安仁县", "pinyin": "anrenxian", "zip_code": "423600", "parent_code": "431000", "type": 2, "first_letter": "A" },
+  { "code": "431081", "name": "资兴市", "pinyin": "zixingshi", "zip_code": "423400", "parent_code": "431000", "type": 2, "first_letter": "Z" },
+  { "code": "431100", "name": "永州市", "pinyin": "yongzhoushi", "zip_code": "425000", "parent_code": "430000", "type": 1, "first_letter": "Y" },
+  { "code": "431102", "name": "零陵区", "pinyin": "linglingqu", "zip_code": "425002", "parent_code": "431100", "type": 2, "first_letter": "L" },
+  { "code": "431103", "name": "冷水滩区", "pinyin": "lengshuitanqu", "zip_code": "425100", "parent_code": "431100", "type": 2, "first_letter": "L" },
+  { "code": "431122", "name": "东安县", "pinyin": "donganxian", "zip_code": "425900", "parent_code": "431100", "type": 2, "first_letter": "D" },
+  { "code": "431123", "name": "双牌县", "pinyin": "shuangpaixian", "zip_code": "425200", "parent_code": "431100", "type": 2, "first_letter": "S" },
+  { "code": "431124", "name": "道县", "pinyin": "daoxian", "zip_code": "425300", "parent_code": "431100", "type": 2, "first_letter": "D" },
+  { "code": "431125", "name": "江永县", "pinyin": "jiangyongxian", "zip_code": "425400", "parent_code": "431100", "type": 2, "first_letter": "J" },
+  { "code": "431126", "name": "宁远县", "pinyin": "ningyuanxian", "zip_code": "425600", "parent_code": "431100", "type": 2, "first_letter": "N" },
+  { "code": "431127", "name": "蓝山县", "pinyin": "lanshanxian", "zip_code": "425800", "parent_code": "431100", "type": 2, "first_letter": "L" },
+  { "code": "431128", "name": "新田县", "pinyin": "xintianxian", "zip_code": "425700", "parent_code": "431100", "type": 2, "first_letter": "X" },
+  { "code": "431129", "name": "江华瑶族自治县", "pinyin": "jianghuayaozuzizhixian", "zip_code": "425500", "parent_code": "431100", "type": 2, "first_letter": "J" },
+  { "code": "431181", "name": "祁阳市", "pinyin": "qiyangshi", "zip_code": "426100", "parent_code": "431100", "type": 2, "first_letter": "Q" },
+  { "code": "431200", "name": "怀化市", "pinyin": "huaihuashi", "zip_code": "418000", "parent_code": "430000", "type": 1, "first_letter": "H" },
+  { "code": "431202", "name": "鹤城区", "pinyin": "hechengqu", "zip_code": "418000", "parent_code": "431200", "type": 2, "first_letter": "H" },
+  { "code": "431221", "name": "中方县", "pinyin": "zhongfangxian", "zip_code": "418005", "parent_code": "431200", "type": 2, "first_letter": "Z" },
+  { "code": "431222", "name": "沅陵县", "pinyin": "yuanlingxian", "zip_code": "419600", "parent_code": "431200", "type": 2, "first_letter": "Y" },
+  { "code": "431223", "name": "辰溪县", "pinyin": "chenxixian", "zip_code": "419500", "parent_code": "431200", "type": 2, "first_letter": "C" },
+  { "code": "431224", "name": "溆浦县", "pinyin": "xupuxian", "zip_code": "419300", "parent_code": "431200", "type": 2, "first_letter": "X" },
+  { "code": "431225", "name": "会同县", "pinyin": "huitongxian", "zip_code": "418300", "parent_code": "431200", "type": 2, "first_letter": "H" },
+  { "code": "431226", "name": "麻阳苗族自治县", "pinyin": "mayangmiaozuzizhixian", "zip_code": "419400", "parent_code": "431200", "type": 2, "first_letter": "M" },
+  { "code": "431227", "name": "新晃侗族自治县", "pinyin": "xinhuangtongzuzizhixian", "zip_code": "419200", "parent_code": "431200", "type": 2, "first_letter": "X" },
+  { "code": "431228", "name": "芷江侗族自治县", "pinyin": "zhijiangtongzuzizhixian", "zip_code": "419100", "parent_code": "431200", "type": 2, "first_letter": "Z" },
+  { "code": "431229", "name": "靖州苗族侗族自治县", "pinyin": "jingzhoumiaozutongzuzizhixian", "zip_code": "418400", "parent_code": "431200", "type": 2, "first_letter": "J" },
+  { "code": "431230", "name": "通道侗族自治县", "pinyin": "tongdaotongzuzizhixian", "zip_code": "418500", "parent_code": "431200", "type": 2, "first_letter": "T" },
+  { "code": "431281", "name": "洪江市", "pinyin": "hongjiangshi", "zip_code": "418116", "parent_code": "431200", "type": 2, "first_letter": "H" },
+  { "code": "431300", "name": "娄底市", "pinyin": "loudishi", "zip_code": "417000", "parent_code": "430000", "type": 1, "first_letter": "L" },
+  { "code": "431302", "name": "娄星区", "pinyin": "louxingqu", "zip_code": "417000", "parent_code": "431300", "type": 2, "first_letter": "L" },
+  { "code": "431321", "name": "双峰县", "pinyin": "shuangfengxian", "zip_code": "417700", "parent_code": "431300", "type": 2, "first_letter": "S" },
+  { "code": "431322", "name": "新化县", "pinyin": "xinhuaxian", "zip_code": "417600", "parent_code": "431300", "type": 2, "first_letter": "X" },
+  { "code": "431381", "name": "冷水江市", "pinyin": "lengshuijiangshi", "zip_code": "417500", "parent_code": "431300", "type": 2, "first_letter": "L" },
+  { "code": "431382", "name": "涟源市", "pinyin": "lianyuanshi", "zip_code": "417100", "parent_code": "431300", "type": 2, "first_letter": "L" },
+  { "code": "433100", "name": "湘西土家族苗族自治州", "pinyin": "xiangxitujiazumiaozuzizhizhou", "zip_code": "416000", "parent_code": "430000", "type": 1, "first_letter": "X" },
+  { "code": "433101", "name": "吉首市", "pinyin": "jishoushi", "zip_code": "416000", "parent_code": "433100", "type": 2, "first_letter": "J" },
+  { "code": "433122", "name": "泸溪县", "pinyin": "luxixian", "zip_code": "416100", "parent_code": "433100", "type": 2, "first_letter": "L" },
+  { "code": "433123", "name": "凤凰县", "pinyin": "fenghuangxian", "zip_code": "416200", "parent_code": "433100", "type": 2, "first_letter": "F" },
+  { "code": "433124", "name": "花垣县", "pinyin": "huayuanxian", "zip_code": "416400", "parent_code": "433100", "type": 2, "first_letter": "H" },
+  { "code": "433125", "name": "保靖县", "pinyin": "baojingxian", "zip_code": "416500", "parent_code": "433100", "type": 2, "first_letter": "B" },
+  { "code": "433126", "name": "古丈县", "pinyin": "guzhangxian", "zip_code": "416300", "parent_code": "433100", "type": 2, "first_letter": "G" },
+  { "code": "433127", "name": "永顺县", "pinyin": "yongshunxian", "zip_code": "416700", "parent_code": "433100", "type": 2, "first_letter": "Y" },
+  { "code": "433130", "name": "龙山县", "pinyin": "longshanxian", "zip_code": "416800", "parent_code": "433100", "type": 2, "first_letter": "L" },
+  { "code": "440000", "name": "广东省", "pinyin": "guangdongsheng", "zip_code": "0", "type": 0, "first_letter": "G" },
+  { "code": "440100", "name": "广州市", "pinyin": "guangzhoushi", "zip_code": "510000", "parent_code": "440000", "type": 1, "first_letter": "G" },
+  { "code": "440103", "name": "荔湾区", "pinyin": "liwanqu", "zip_code": "510145", "parent_code": "440100", "type": 2, "first_letter": "L" },
+  { "code": "440104", "name": "越秀区", "pinyin": "yuexiuqu", "zip_code": "510030", "parent_code": "440100", "type": 2, "first_letter": "Y" },
+  { "code": "440105", "name": "海珠区", "pinyin": "haizhuqu", "zip_code": "510220", "parent_code": "440100", "type": 2, "first_letter": "H" },
+  { "code": "440106", "name": "天河区", "pinyin": "tianhequ", "zip_code": "510630", "parent_code": "440100", "type": 2, "first_letter": "T" },
+  { "code": "440111", "name": "白云区", "pinyin": "baiyunqu", "zip_code": "510080", "parent_code": "440100", "type": 2, "first_letter": "B" },
+  { "code": "440112", "name": "黄埔区", "pinyin": "huangpuqu", "zip_code": "510700", "parent_code": "440100", "type": 2, "first_letter": "H" },
+  { "code": "440113", "name": "番禺区", "pinyin": "panyuqu", "zip_code": "511400", "parent_code": "440100", "type": 2, "first_letter": "P" },
+  { "code": "440114", "name": "花都区", "pinyin": "huaduqu", "zip_code": "510800", "parent_code": "440100", "type": 2, "first_letter": "H" },
+  { "code": "440115", "name": "南沙区", "pinyin": "nanshaqu", "zip_code": "511400", "parent_code": "440100", "type": 2, "first_letter": "N" },
+  { "code": "440117", "name": "从化区", "pinyin": "conghuaqu", "zip_code": "510900", "parent_code": "440100", "type": 2, "first_letter": "C" },
+  { "code": "440118", "name": "增城区", "pinyin": "zengchengqu", "zip_code": "511300", "parent_code": "440100", "type": 2, "first_letter": "Z" },
+  { "code": "440200", "name": "韶关市", "pinyin": "shaoguanshi", "zip_code": "512000", "parent_code": "440000", "type": 1, "first_letter": "S" },
+  { "code": "440203", "name": "武江区", "pinyin": "wujiangqu", "zip_code": "512026", "parent_code": "440200", "type": 2, "first_letter": "W" },
+  { "code": "440204", "name": "浈江区", "pinyin": "zhenjiangqu", "zip_code": "512023", "parent_code": "440200", "type": 2, "first_letter": "Z" },
+  { "code": "440205", "name": "曲江区", "pinyin": "qujiangqu", "zip_code": "512100", "parent_code": "440200", "type": 2, "first_letter": "Q" },
+  { "code": "440222", "name": "始兴县", "pinyin": "shixingxian", "zip_code": "512500", "parent_code": "440200", "type": 2, "first_letter": "S" },
+  { "code": "440224", "name": "仁化县", "pinyin": "renhuaxian", "zip_code": "512300", "parent_code": "440200", "type": 2, "first_letter": "R" },
+  { "code": "440229", "name": "翁源县", "pinyin": "wengyuanxian", "zip_code": "512600", "parent_code": "440200", "type": 2, "first_letter": "W" },
+  { "code": "440232", "name": "乳源瑶族自治县", "pinyin": "ruyuanyaozuzizhixian", "zip_code": "512700", "parent_code": "440200", "type": 2, "first_letter": "R" },
+  { "code": "440233", "name": "新丰县", "pinyin": "xinfengxian", "zip_code": "511100", "parent_code": "440200", "type": 2, "first_letter": "X" },
+  { "code": "440281", "name": "乐昌市", "pinyin": "lechangshi", "zip_code": "512200", "parent_code": "440200", "type": 2, "first_letter": "L" },
+  { "code": "440282", "name": "南雄市", "pinyin": "nanxiongshi", "zip_code": "512400", "parent_code": "440200", "type": 2, "first_letter": "N" },
+  { "code": "440300", "name": "深圳市", "pinyin": "shenzhenshi", "zip_code": "518000", "parent_code": "440000", "type": 1, "first_letter": "S" },
+  { "code": "440303", "name": "罗湖区", "pinyin": "luohuqu", "zip_code": "518001", "parent_code": "440300", "type": 2, "first_letter": "L" },
+  { "code": "440304", "name": "福田区", "pinyin": "futianqu", "zip_code": "518033", "parent_code": "440300", "type": 2, "first_letter": "F" },
+  { "code": "440305", "name": "南山区", "pinyin": "nanshanqu", "zip_code": "518052", "parent_code": "440300", "type": 2, "first_letter": "N" },
+  { "code": "440306", "name": "宝安区", "pinyin": "baoanqu", "zip_code": "518101", "parent_code": "440300", "type": 2, "first_letter": "B" },
+  { "code": "440307", "name": "龙岗区", "pinyin": "longgangqu", "zip_code": "518116", "parent_code": "440300", "type": 2, "first_letter": "L" },
+  { "code": "440308", "name": "盐田区", "pinyin": "yantianqu", "zip_code": "518083", "parent_code": "440300", "type": 2, "first_letter": "Y" },
+  { "code": "440309", "name": "龙华区", "pinyin": "longhuaqu", "zip_code": "570105", "parent_code": "440300", "type": 2, "first_letter": "L" },
+  { "code": "440310", "name": "坪山区", "pinyin": "pingshanqu", "zip_code": "518118", "parent_code": "440300", "type": 2, "first_letter": "P" },
+  { "code": "440400", "name": "珠海市", "pinyin": "zhuhaishi", "zip_code": "519000", "parent_code": "440000", "type": 1, "first_letter": "Z" },
+  { "code": "440402", "name": "香洲区", "pinyin": "xiangzhouqu", "zip_code": "519000", "parent_code": "440400", "type": 2, "first_letter": "X" },
+  { "code": "440403", "name": "斗门区", "pinyin": "doumenqu", "zip_code": "519100", "parent_code": "440400", "type": 2, "first_letter": "D" },
+  { "code": "440404", "name": "金湾区", "pinyin": "jinwanqu", "zip_code": "519090", "parent_code": "440400", "type": 2, "first_letter": "J" },
+  { "code": "440500", "name": "汕头市", "pinyin": "shantoushi", "zip_code": "515000", "parent_code": "440000", "type": 1, "first_letter": "S" },
+  { "code": "440507", "name": "龙湖区", "pinyin": "longhuqu", "zip_code": "515041", "parent_code": "440500", "type": 2, "first_letter": "L" },
+  { "code": "440511", "name": "金平区", "pinyin": "jinpingqu", "zip_code": "515041", "parent_code": "440500", "type": 2, "first_letter": "J" },
+  { "code": "440512", "name": "濠江区", "pinyin": "haojiangqu", "zip_code": "515071", "parent_code": "440500", "type": 2, "first_letter": "H" },
+  { "code": "440513", "name": "潮阳区", "pinyin": "chaoyangqu", "zip_code": "515100", "parent_code": "440500", "type": 2, "first_letter": "C" },
+  { "code": "440514", "name": "潮南区", "pinyin": "chaonanqu", "zip_code": "515144", "parent_code": "440500", "type": 2, "first_letter": "C" },
+  { "code": "440515", "name": "澄海区", "pinyin": "chenghaiqu", "zip_code": "515800", "parent_code": "440500", "type": 2, "first_letter": "C" },
+  { "code": "440523", "name": "南澳县", "pinyin": "nanaoxian", "zip_code": "515900", "parent_code": "440500", "type": 2, "first_letter": "N" },
+  { "code": "440600", "name": "佛山市", "pinyin": "foshanshi", "zip_code": "528000", "parent_code": "440000", "type": 1, "first_letter": "F" },
+  { "code": "440604", "name": "禅城区", "pinyin": "chanchengqu", "zip_code": "528000", "parent_code": "440600", "type": 2, "first_letter": "C" },
+  { "code": "440605", "name": "南海区", "pinyin": "nanhaiqu", "zip_code": "528200", "parent_code": "440600", "type": 2, "first_letter": "N" },
+  { "code": "440606", "name": "顺德区", "pinyin": "shundequ", "zip_code": "528300", "parent_code": "440600", "type": 2, "first_letter": "S" },
+  { "code": "440607", "name": "三水区", "pinyin": "sanshuiqu", "zip_code": "528100", "parent_code": "440600", "type": 2, "first_letter": "S" },
+  { "code": "440608", "name": "高明区", "pinyin": "gaomingqu", "zip_code": "528500", "parent_code": "440600", "type": 2, "first_letter": "G" },
+  { "code": "440700", "name": "江门市", "pinyin": "jiangmenshi", "zip_code": "529000", "parent_code": "440000", "type": 1, "first_letter": "J" },
+  { "code": "440703", "name": "蓬江区", "pinyin": "pengjiangqu", "zip_code": "529051", "parent_code": "440700", "type": 2, "first_letter": "P" },
+  { "code": "440704", "name": "江海区", "pinyin": "jianghaiqu", "zip_code": "529000", "parent_code": "440700", "type": 2, "first_letter": "J" },
+  { "code": "440705", "name": "新会区", "pinyin": "xinhuiqu", "zip_code": "529100", "parent_code": "440700", "type": 2, "first_letter": "X" },
+  { "code": "440781", "name": "台山市", "pinyin": "taishanshi", "zip_code": "529211", "parent_code": "440700", "type": 2, "first_letter": "T" },
+  { "code": "440783", "name": "开平市", "pinyin": "kaipingshi", "zip_code": "529312", "parent_code": "440700", "type": 2, "first_letter": "K" },
+  { "code": "440784", "name": "鹤山市", "pinyin": "heshanshi", "zip_code": "529711", "parent_code": "440700", "type": 2, "first_letter": "H" },
+  { "code": "440785", "name": "恩平市", "pinyin": "enpingshi", "zip_code": "529411", "parent_code": "440700", "type": 2, "first_letter": "E" },
+  { "code": "440800", "name": "湛江市", "pinyin": "zhanjiangshi", "zip_code": "524000", "parent_code": "440000", "type": 1, "first_letter": "Z" },
+  { "code": "440802", "name": "赤坎区", "pinyin": "chikanqu", "zip_code": "524033", "parent_code": "440800", "type": 2, "first_letter": "C" },
+  { "code": "440803", "name": "霞山区", "pinyin": "xiashanqu", "zip_code": "524002", "parent_code": "440800", "type": 2, "first_letter": "X" },
+  { "code": "440804", "name": "坡头区", "pinyin": "potouqu", "zip_code": "524057", "parent_code": "440800", "type": 2, "first_letter": "P" },
+  { "code": "440811", "name": "麻章区", "pinyin": "mazhangqu", "zip_code": "524003", "parent_code": "440800", "type": 2, "first_letter": "M" },
+  { "code": "440823", "name": "遂溪县", "pinyin": "suixixian", "zip_code": "524300", "parent_code": "440800", "type": 2, "first_letter": "S" },
+  { "code": "440825", "name": "徐闻县", "pinyin": "xuwenxian", "zip_code": "524100", "parent_code": "440800", "type": 2, "first_letter": "X" },
+  { "code": "440881", "name": "廉江市", "pinyin": "lianjiangshi", "zip_code": "524400", "parent_code": "440800", "type": 2, "first_letter": "L" },
+  { "code": "440882", "name": "雷州市", "pinyin": "leizhoushi", "zip_code": "524200", "parent_code": "440800", "type": 2, "first_letter": "L" },
+  { "code": "440883", "name": "吴川市", "pinyin": "wuchuanshi", "zip_code": "524500", "parent_code": "440800", "type": 2, "first_letter": "W" },
+  { "code": "440900", "name": "茂名市", "pinyin": "maomingshi", "zip_code": "525000", "parent_code": "440000", "type": 1, "first_letter": "M" },
+  { "code": "440902", "name": "茂南区", "pinyin": "maonanqu", "zip_code": "525011", "parent_code": "440900", "type": 2, "first_letter": "M" },
+  { "code": "440904", "name": "电白区", "pinyin": "dianbaiqu", "zip_code": "525400", "parent_code": "440900", "type": 2, "first_letter": "D" },
+  { "code": "440981", "name": "高州市", "pinyin": "gaozhoushi", "zip_code": "525200", "parent_code": "440900", "type": 2, "first_letter": "G" },
+  { "code": "440982", "name": "化州市", "pinyin": "huazhoushi", "zip_code": "525100", "parent_code": "440900", "type": 2, "first_letter": "H" },
+  { "code": "440983", "name": "信宜市", "pinyin": "xinyishi", "zip_code": "525300", "parent_code": "440900", "type": 2, "first_letter": "X" },
+  { "code": "441200", "name": "肇庆市", "pinyin": "zhaoqingshi", "zip_code": "526000", "parent_code": "440000", "type": 1, "first_letter": "Z" },
+  { "code": "441202", "name": "端州区", "pinyin": "duanzhouqu", "zip_code": "526040", "parent_code": "441200", "type": 2, "first_letter": "D" },
+  { "code": "441203", "name": "鼎湖区", "pinyin": "dinghuqu", "zip_code": "526070", "parent_code": "441200", "type": 2, "first_letter": "D" },
+  { "code": "441204", "name": "高要区", "pinyin": "gaoyaoqu", "zip_code": "526100", "parent_code": "441200", "type": 2, "first_letter": "G" },
+  { "code": "441223", "name": "广宁县", "pinyin": "guangningxian", "zip_code": "526300", "parent_code": "441200", "type": 2, "first_letter": "G" },
+  { "code": "441224", "name": "怀集县", "pinyin": "huaijixian", "zip_code": "526400", "parent_code": "441200", "type": 2, "first_letter": "H" },
+  { "code": "441225", "name": "封开县", "pinyin": "fengkaixian", "zip_code": "526500", "parent_code": "441200", "type": 2, "first_letter": "F" },
+  { "code": "441226", "name": "德庆县", "pinyin": "deqingxian", "zip_code": "526600", "parent_code": "441200", "type": 2, "first_letter": "D" },
+  { "code": "441284", "name": "四会市", "pinyin": "sihuishi", "zip_code": "526200", "parent_code": "441200", "type": 2, "first_letter": "S" },
+  { "code": "441300", "name": "惠州市", "pinyin": "huizhoushi", "zip_code": "516000", "parent_code": "440000", "type": 1, "first_letter": "H" },
+  { "code": "441302", "name": "惠城区", "pinyin": "huichengqu", "zip_code": "516001", "parent_code": "441300", "type": 2, "first_letter": "H" },
+  { "code": "441303", "name": "惠阳区", "pinyin": "huiyangqu", "zip_code": "516200", "parent_code": "441300", "type": 2, "first_letter": "H" },
+  { "code": "441322", "name": "博罗县", "pinyin": "boluoxian", "zip_code": "516100", "parent_code": "441300", "type": 2, "first_letter": "B" },
+  { "code": "441323", "name": "惠东县", "pinyin": "huidongxian", "zip_code": "516300", "parent_code": "441300", "type": 2, "first_letter": "H" },
+  { "code": "441324", "name": "龙门县", "pinyin": "longmenxian", "zip_code": "516800", "parent_code": "441300", "type": 2, "first_letter": "L" },
+  { "code": "441400", "name": "梅州市", "pinyin": "meizhoushi", "zip_code": "514000", "parent_code": "440000", "type": 1, "first_letter": "M" },
+  { "code": "441402", "name": "梅江区", "pinyin": "meijiangqu", "zip_code": "514000", "parent_code": "441400", "type": 2, "first_letter": "M" },
+  { "code": "441403", "name": "梅县区", "pinyin": "meixianqu", "zip_code": "514700", "parent_code": "441400", "type": 2, "first_letter": "M" },
+  { "code": "441422", "name": "大埔县", "pinyin": "dapuxian", "zip_code": "514200", "parent_code": "441400", "type": 2, "first_letter": "D" },
+  { "code": "441423", "name": "丰顺县", "pinyin": "fengshunxian", "zip_code": "514300", "parent_code": "441400", "type": 2, "first_letter": "F" },
+  { "code": "441424", "name": "五华县", "pinyin": "wuhuaxian", "zip_code": "514400", "parent_code": "441400", "type": 2, "first_letter": "W" },
+  { "code": "441426", "name": "平远县", "pinyin": "pingyuanxian", "zip_code": "514600", "parent_code": "441400", "type": 2, "first_letter": "P" },
+  { "code": "441427", "name": "蕉岭县", "pinyin": "jiaolingxian", "zip_code": "514100", "parent_code": "441400", "type": 2, "first_letter": "J" },
+  { "code": "441481", "name": "兴宁市", "pinyin": "xingningshi", "zip_code": "514500", "parent_code": "441400", "type": 2, "first_letter": "X" },
+  { "code": "441500", "name": "汕尾市", "pinyin": "shanweishi", "zip_code": "516600", "parent_code": "440000", "type": 1, "first_letter": "S" },
+  { "code": "441502", "name": "城区", "pinyin": "chengqu", "zip_code": "516601", "parent_code": "441500", "type": 2, "first_letter": "C" },
+  { "code": "441521", "name": "海丰县", "pinyin": "haifengxian", "zip_code": "516400", "parent_code": "441500", "type": 2, "first_letter": "H" },
+  { "code": "441523", "name": "陆河县", "pinyin": "luhexian", "zip_code": "516700", "parent_code": "441500", "type": 2, "first_letter": "L" },
+  { "code": "441581", "name": "陆丰市", "pinyin": "lufengshi", "zip_code": "516500", "parent_code": "441500", "type": 2, "first_letter": "L" },
+  { "code": "441600", "name": "河源市", "pinyin": "heyuanshi", "zip_code": "517000", "parent_code": "440000", "type": 1, "first_letter": "H" },
+  { "code": "441602", "name": "源城区", "pinyin": "yuanchengqu", "zip_code": "517000", "parent_code": "441600", "type": 2, "first_letter": "Y" },
+  { "code": "441621", "name": "紫金县", "pinyin": "zijinxian", "zip_code": "517400", "parent_code": "441600", "type": 2, "first_letter": "Z" },
+  { "code": "441622", "name": "龙川县", "pinyin": "longchuanxian", "zip_code": "517300", "parent_code": "441600", "type": 2, "first_letter": "L" },
+  { "code": "441623", "name": "连平县", "pinyin": "lianpingxian", "zip_code": "517100", "parent_code": "441600", "type": 2, "first_letter": "L" },
+  { "code": "441624", "name": "和平县", "pinyin": "hepingxian", "zip_code": "517200", "parent_code": "441600", "type": 2, "first_letter": "H" },
+  { "code": "441625", "name": "东源县", "pinyin": "dongyuanxian", "zip_code": "517500", "parent_code": "441600", "type": 2, "first_letter": "D" },
+  { "code": "441700", "name": "阳江市", "pinyin": "yangjiangshi", "zip_code": "529500", "parent_code": "440000", "type": 1, "first_letter": "Y" },
+  { "code": "441702", "name": "江城区", "pinyin": "jiangchengqu", "zip_code": "529525", "parent_code": "441700", "type": 2, "first_letter": "J" },
+  { "code": "441704", "name": "阳东区", "pinyin": "yangdongqu", "zip_code": "529900", "parent_code": "441700", "type": 2, "first_letter": "Y" },
+  { "code": "441721", "name": "阳西县", "pinyin": "yangxixian", "zip_code": "529800", "parent_code": "441700", "type": 2, "first_letter": "Y" },
+  { "code": "441781", "name": "阳春市", "pinyin": "yangchunshi", "zip_code": "529611", "parent_code": "441700", "type": 2, "first_letter": "Y" },
+  { "code": "441800", "name": "清远市", "pinyin": "qingyuanshi", "zip_code": "511500", "parent_code": "440000", "type": 1, "first_letter": "Q" },
+  { "code": "441802", "name": "清城区", "pinyin": "qingchengqu", "zip_code": "511500", "parent_code": "441800", "type": 2, "first_letter": "Q" },
+  { "code": "441803", "name": "清新区", "pinyin": "qingxinqu", "zip_code": "511800", "parent_code": "441800", "type": 2, "first_letter": "Q" },
+  { "code": "441821", "name": "佛冈县", "pinyin": "fogangxian", "zip_code": "511600", "parent_code": "441800", "type": 2, "first_letter": "F" },
+  { "code": "441823", "name": "阳山县", "pinyin": "yangshanxian", "zip_code": "513100", "parent_code": "441800", "type": 2, "first_letter": "Y" },
+  { "code": "441825", "name": "连山壮族瑶族自治县", "pinyin": "lianshanzhuangzuyaozuzizhixian", "zip_code": "513200", "parent_code": "441800", "type": 2, "first_letter": "L" },
+  { "code": "441826", "name": "连南瑶族自治县", "pinyin": "liannanyaozuzizhixian", "zip_code": "513300", "parent_code": "441800", "type": 2, "first_letter": "L" },
+  { "code": "441881", "name": "英德市", "pinyin": "yingdeshi", "zip_code": "513000", "parent_code": "441800", "type": 2, "first_letter": "Y" },
+  { "code": "441882", "name": "连州市", "pinyin": "lianzhoushi", "zip_code": "513401", "parent_code": "441800", "type": 2, "first_letter": "L" },
+  { "code": "441900", "name": "东莞市", "pinyin": "dongguanshi", "zip_code": "523000", "parent_code": "440000", "type": 1, "first_letter": "D" },
+  { "code": "441901", "name": "东城街道", "pinyin": "dongchengjiedao", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "D" },
+  { "code": "441902", "name": "南城街道", "pinyin": "nanchengjiedao", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "N" },
+  { "code": "441903", "name": "万江街道", "pinyin": "wanjiangjiedao", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "W" },
+  { "code": "441904", "name": "莞城街道", "pinyin": "guanchengjiedao", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "G" },
+  { "code": "441905", "name": "石碣镇", "pinyin": "shijiezhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "S" },
+  { "code": "441906", "name": "石龙镇", "pinyin": "shilongzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "S" },
+  { "code": "441907", "name": "茶山镇", "pinyin": "chashanzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "C" },
+  { "code": "441908", "name": "石排镇", "pinyin": "shipaizhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "S" },
+  { "code": "441909", "name": "企石镇", "pinyin": "qishizhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "Q" },
+  { "code": "441910", "name": "横沥镇", "pinyin": "henglizhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "H" },
+  { "code": "441911", "name": "桥头镇", "pinyin": "qiaotouzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "Q" },
+  { "code": "441912", "name": "谢岗镇", "pinyin": "xiegangzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "X" },
+  { "code": "441913", "name": "东坑镇", "pinyin": "dongkengzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "D" },
+  { "code": "441914", "name": "常平镇", "pinyin": "changpingzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "C" },
+  { "code": "441915", "name": "寮步镇", "pinyin": "liaobuzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "L" },
+  { "code": "441916", "name": "樟木头镇", "pinyin": "zhangmutouzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "Z" },
+  { "code": "441917", "name": "大朗镇", "pinyin": "dalangzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "D" },
+  { "code": "441918", "name": "黄江镇", "pinyin": "huangjiangzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "H" },
+  { "code": "441919", "name": "清溪镇", "pinyin": "qingxizhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "Q" },
+  { "code": "441920", "name": "塘厦镇", "pinyin": "tangxiazhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "T" },
+  { "code": "441921", "name": "凤岗镇", "pinyin": "fenggangzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "F" },
+  { "code": "441922", "name": "大岭山镇", "pinyin": "dalingshanzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "D" },
+  { "code": "441923", "name": "长安镇", "pinyin": "changanzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "C" },
+  { "code": "441924", "name": "虎门镇", "pinyin": "humenzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "H" },
+  { "code": "441925", "name": "厚街镇", "pinyin": "houjiezhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "H" },
+  { "code": "441926", "name": "沙田镇", "pinyin": "shatianzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "S" },
+  { "code": "441927", "name": "道滘镇", "pinyin": "daojiaozhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "D" },
+  { "code": "441928", "name": "洪梅镇", "pinyin": "hongmeizhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "H" },
+  { "code": "441929", "name": "麻涌镇", "pinyin": "machongzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "M" },
+  { "code": "441930", "name": "望牛墩镇", "pinyin": "wangniudunzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "W" },
+  { "code": "441931", "name": "中堂镇", "pinyin": "zhongtangzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "Z" },
+  { "code": "441932", "name": "高埗镇", "pinyin": "gaobuzhen", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "G" },
+  { "code": "441933", "name": "松山湖管委会", "pinyin": "songshanhuguanweihui", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "S" },
+  { "code": "441934", "name": "虎门港管委会", "pinyin": "humengangguanweihui", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "H" },
+  { "code": "441935", "name": "东莞生态园", "pinyin": "dongguanshengtaiyuan", "zip_code": "523000", "parent_code": "441900", "type": 2, "first_letter": "D" },
+  { "code": "442000", "name": "中山市", "pinyin": "zhongshanshi", "zip_code": "528403", "parent_code": "440000", "type": 1, "first_letter": "Z" },
+  { "code": "442001", "name": "石岐区街道", "pinyin": "shiqiqujiedao", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "S" },
+  { "code": "442002", "name": "东区街道", "pinyin": "dongqujiedao", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "D" },
+  { "code": "442003", "name": "火炬开发区", "pinyin": "huojukaifaqu", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "H" },
+  { "code": "442004", "name": "西区街道", "pinyin": "xiqujiedao", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "X" },
+  { "code": "442005", "name": "南区街道", "pinyin": "nanqujiedao", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "N" },
+  { "code": "442006", "name": "五桂山街道", "pinyin": "wuguishanjiedao", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "W" },
+  { "code": "442007", "name": "小榄镇", "pinyin": "xiaolanzhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "X" },
+  { "code": "442008", "name": "黄圃镇", "pinyin": "huangpuzhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "H" },
+  { "code": "442009", "name": "民众镇", "pinyin": "minzhongzhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "M" },
+  { "code": "442010", "name": "东凤镇", "pinyin": "dongfengzhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "D" },
+  { "code": "442011", "name": "东升镇", "pinyin": "dongshengzhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "D" },
+  { "code": "442012", "name": "古镇镇", "pinyin": "guzhenzhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "G" },
+  { "code": "442013", "name": "沙溪镇", "pinyin": "shaxizhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "S" },
+  { "code": "442014", "name": "坦洲镇", "pinyin": "tanzhouzhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "T" },
+  { "code": "442015", "name": "港口镇", "pinyin": "gangkouzhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "G" },
+  { "code": "442016", "name": "三角镇", "pinyin": "sanjiaozhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "S" },
+  { "code": "442017", "name": "横栏镇", "pinyin": "henglanzhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "H" },
+  { "code": "442018", "name": "南头镇", "pinyin": "nantouzhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "N" },
+  { "code": "442019", "name": "阜沙镇", "pinyin": "fushazhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "F" },
+  { "code": "442020", "name": "南朗镇", "pinyin": "nanlangzhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "N" },
+  { "code": "442021", "name": "三乡镇", "pinyin": "sanxiangzhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "S" },
+  { "code": "442022", "name": "板芙镇", "pinyin": "banfuzhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "B" },
+  { "code": "442023", "name": "大涌镇", "pinyin": "dayongzhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "D" },
+  { "code": "442024", "name": "神湾镇", "pinyin": "shenwanzhen", "zip_code": "528403", "parent_code": "442000", "type": 2, "first_letter": "S" },
+  { "code": "445100", "name": "潮州市", "pinyin": "chaozhoushi", "zip_code": "521000", "parent_code": "440000", "type": 1, "first_letter": "C" },
+  { "code": "445102", "name": "湘桥区", "pinyin": "xiangqiaoqu", "zip_code": "521000", "parent_code": "445100", "type": 2, "first_letter": "X" },
+  { "code": "445103", "name": "潮安区", "pinyin": "chaoanqu", "zip_code": "515638", "parent_code": "445100", "type": 2, "first_letter": "C" },
+  { "code": "445122", "name": "饶平县", "pinyin": "raopingxian", "zip_code": "515700", "parent_code": "445100", "type": 2, "first_letter": "R" },
+  { "code": "445200", "name": "揭阳市", "pinyin": "jieyangshi", "zip_code": "522000", "parent_code": "440000", "type": 1, "first_letter": "J" },
+  { "code": "445202", "name": "榕城区", "pinyin": "rongchengqu", "zip_code": "522095", "parent_code": "445200", "type": 2, "first_letter": "R" },
+  { "code": "445203", "name": "揭东区", "pinyin": "jiedongqu", "zip_code": "515500", "parent_code": "445200", "type": 2, "first_letter": "J" },
+  { "code": "445222", "name": "揭西县", "pinyin": "jiexixian", "zip_code": "515400", "parent_code": "445200", "type": 2, "first_letter": "J" },
+  { "code": "445224", "name": "惠来县", "pinyin": "huilaixian", "zip_code": "515200", "parent_code": "445200", "type": 2, "first_letter": "H" },
+  { "code": "445281", "name": "普宁市", "pinyin": "puningshi", "zip_code": "515300", "parent_code": "445200", "type": 2, "first_letter": "P" },
+  { "code": "445300", "name": "云浮市", "pinyin": "yunfushi", "zip_code": "527300", "parent_code": "440000", "type": 1, "first_letter": "Y" },
+  { "code": "445302", "name": "云城区", "pinyin": "yunchengqu", "zip_code": "527300", "parent_code": "445300", "type": 2, "first_letter": "Y" },
+  { "code": "445303", "name": "云安区", "pinyin": "yunanqu", "zip_code": "527500", "parent_code": "445300", "type": 2, "first_letter": "Y" },
+  { "code": "445321", "name": "新兴县", "pinyin": "xinxingxian", "zip_code": "527400", "parent_code": "445300", "type": 2, "first_letter": "X" },
+  { "code": "445322", "name": "郁南县", "pinyin": "yunanxian", "zip_code": "527100", "parent_code": "445300", "type": 2, "first_letter": "Y" },
+  { "code": "445381", "name": "罗定市", "pinyin": "luodingshi", "zip_code": "527500", "parent_code": "445300", "type": 2, "first_letter": "L" },
+  { "code": "450000", "name": "广西壮族自治区", "pinyin": "guangxizhuangzuzizhiqu", "zip_code": "0", "type": 0, "first_letter": "G" },
+  { "code": "450100", "name": "南宁市", "pinyin": "nanningshi", "zip_code": "530000", "parent_code": "450000", "type": 1, "first_letter": "N" },
+  { "code": "450102", "name": "兴宁区", "pinyin": "xingningqu", "zip_code": "530012", "parent_code": "450100", "type": 2, "first_letter": "X" },
+  { "code": "450103", "name": "青秀区", "pinyin": "qingxiuqu", "zip_code": "530022", "parent_code": "450100", "type": 2, "first_letter": "Q" },
+  { "code": "450105", "name": "江南区", "pinyin": "jiangnanqu", "zip_code": "530031", "parent_code": "450100", "type": 2, "first_letter": "J" },
+  { "code": "450107", "name": "西乡塘区", "pinyin": "xixiangtangqu", "zip_code": "530001", "parent_code": "450100", "type": 2, "first_letter": "X" },
+  { "code": "450108", "name": "良庆区", "pinyin": "liangqingqu", "zip_code": "530200", "parent_code": "450100", "type": 2, "first_letter": "L" },
+  { "code": "450109", "name": "邕宁区", "pinyin": "yongningqu", "zip_code": "530200", "parent_code": "450100", "type": 2, "first_letter": "Y" },
+  { "code": "450110", "name": "武鸣区", "pinyin": "wumingqu", "zip_code": "530100", "parent_code": "450100", "type": 2, "first_letter": "W" },
+  { "code": "450123", "name": "隆安县", "pinyin": "longanxian", "zip_code": "532700", "parent_code": "450100", "type": 2, "first_letter": "L" },
+  { "code": "450124", "name": "马山县", "pinyin": "mashanxian", "zip_code": "530600", "parent_code": "450100", "type": 2, "first_letter": "M" },
+  { "code": "450125", "name": "上林县", "pinyin": "shanglinxian", "zip_code": "530500", "parent_code": "450100", "type": 2, "first_letter": "S" },
+  { "code": "450126", "name": "宾阳县", "pinyin": "binyangxian", "zip_code": "530400", "parent_code": "450100", "type": 2, "first_letter": "B" },
+  { "code": "450181", "name": "横州市", "pinyin": "hengzhoushi", "zip_code": "530300", "parent_code": "450100", "type": 2, "first_letter": "H" },
+  { "code": "450200", "name": "柳州市", "pinyin": "liuzhoushi", "zip_code": "545000", "parent_code": "450000", "type": 1, "first_letter": "L" },
+  { "code": "450202", "name": "城中区", "pinyin": "chengzhongqu", "zip_code": "545001", "parent_code": "450200", "type": 2, "first_letter": "C" },
+  { "code": "450203", "name": "鱼峰区", "pinyin": "yufengqu", "zip_code": "545005", "parent_code": "450200", "type": 2, "first_letter": "Y" },
+  { "code": "450204", "name": "柳南区", "pinyin": "liunanqu", "zip_code": "545005", "parent_code": "450200", "type": 2, "first_letter": "L" },
+  { "code": "450205", "name": "柳北区", "pinyin": "liubeiqu", "zip_code": "545001", "parent_code": "450200", "type": 2, "first_letter": "L" },
+  { "code": "450206", "name": "柳江区", "pinyin": "liujiangqu", "zip_code": "545100", "parent_code": "450200", "type": 2, "first_letter": "L" },
+  { "code": "450222", "name": "柳城县", "pinyin": "liuchengxian", "zip_code": "545200", "parent_code": "450200", "type": 2, "first_letter": "L" },
+  { "code": "450223", "name": "鹿寨县", "pinyin": "luzhaixian", "zip_code": "545600", "parent_code": "450200", "type": 2, "first_letter": "L" },
+  { "code": "450224", "name": "融安县", "pinyin": "ronganxian", "zip_code": "545400", "parent_code": "450200", "type": 2, "first_letter": "R" },
+  { "code": "450225", "name": "融水苗族自治县", "pinyin": "rongshuimiaozuzizhixian", "zip_code": "545300", "parent_code": "450200", "type": 2, "first_letter": "R" },
+  { "code": "450226", "name": "三江侗族自治县", "pinyin": "sanjiangtongzuzizhixian", "zip_code": "545500", "parent_code": "450200", "type": 2, "first_letter": "S" },
+  { "code": "450300", "name": "桂林市", "pinyin": "guilinshi", "zip_code": "541000", "parent_code": "450000", "type": 1, "first_letter": "G" },
+  { "code": "450302", "name": "秀峰区", "pinyin": "xiufengqu", "zip_code": "541001", "parent_code": "450300", "type": 2, "first_letter": "X" },
+  { "code": "450303", "name": "叠彩区", "pinyin": "diecaiqu", "zip_code": "541001", "parent_code": "450300", "type": 2, "first_letter": "D" },
+  { "code": "450304", "name": "象山区", "pinyin": "xiangshanqu", "zip_code": "541002", "parent_code": "450300", "type": 2, "first_letter": "X" },
+  { "code": "450305", "name": "七星区", "pinyin": "qixingqu", "zip_code": "541004", "parent_code": "450300", "type": 2, "first_letter": "Q" },
+  { "code": "450311", "name": "雁山区", "pinyin": "yanshanqu", "zip_code": "541006", "parent_code": "450300", "type": 2, "first_letter": "Y" },
+  { "code": "450312", "name": "临桂区", "pinyin": "linguiqu", "zip_code": "541199", "parent_code": "450300", "type": 2, "first_letter": "L" },
+  { "code": "450321", "name": "阳朔县", "pinyin": "yangshuoxian", "zip_code": "541900", "parent_code": "450300", "type": 2, "first_letter": "Y" },
+  { "code": "450323", "name": "灵川县", "pinyin": "lingchuanxian", "zip_code": "541200", "parent_code": "450300", "type": 2, "first_letter": "L" },
+  { "code": "450324", "name": "全州县", "pinyin": "quanzhouxian", "zip_code": "541500", "parent_code": "450300", "type": 2, "first_letter": "Q" },
+  { "code": "450325", "name": "兴安县", "pinyin": "xinganxian", "zip_code": "541300", "parent_code": "450300", "type": 2, "first_letter": "X" },
+  { "code": "450326", "name": "永福县", "pinyin": "yongfuxian", "zip_code": "541800", "parent_code": "450300", "type": 2, "first_letter": "Y" },
+  { "code": "450327", "name": "灌阳县", "pinyin": "guanyangxian", "zip_code": "541600", "parent_code": "450300", "type": 2, "first_letter": "G" },
+  { "code": "450328", "name": "龙胜各族自治县", "pinyin": "longshenggezuzizhixian", "zip_code": "541700", "parent_code": "450300", "type": 2, "first_letter": "L" },
+  { "code": "450329", "name": "资源县", "pinyin": "ziyuanxian", "zip_code": "541400", "parent_code": "450300", "type": 2, "first_letter": "Z" },
+  { "code": "450330", "name": "平乐县", "pinyin": "pinglexian", "zip_code": "542400", "parent_code": "450300", "type": 2, "first_letter": "P" },
+  { "code": "450331", "name": "荔浦县", "pinyin": "lipuxian", "zip_code": "546600", "parent_code": "450300", "type": 2, "first_letter": "L" },
+  { "code": "450332", "name": "恭城瑶族自治县", "pinyin": "gongchengyaozuzizhixian", "zip_code": "542500", "parent_code": "450300", "type": 2, "first_letter": "G" },
+  { "code": "450400", "name": "梧州市", "pinyin": "wuzhoushi", "zip_code": "543000", "parent_code": "450000", "type": 1, "first_letter": "W" },
+  { "code": "450403", "name": "万秀区", "pinyin": "wanxiuqu", "zip_code": "543000", "parent_code": "450400", "type": 2, "first_letter": "W" },
+  { "code": "450405", "name": "长洲区", "pinyin": "changzhouqu", "zip_code": "543002", "parent_code": "450400", "type": 2, "first_letter": "C" },
+  { "code": "450406", "name": "龙圩区", "pinyin": "longxuqu", "zip_code": "543004", "parent_code": "450400", "type": 2, "first_letter": "L" },
+  { "code": "450421", "name": "苍梧县", "pinyin": "cangwuxian", "zip_code": "543100", "parent_code": "450400", "type": 2, "first_letter": "C" },
+  { "code": "450422", "name": "藤县", "pinyin": "tengxian", "zip_code": "543300", "parent_code": "450400", "type": 2, "first_letter": "T" },
+  { "code": "450423", "name": "蒙山县", "pinyin": "mengshanxian", "zip_code": "546700", "parent_code": "450400", "type": 2, "first_letter": "M" },
+  { "code": "450481", "name": "岑溪市", "pinyin": "cenxishi", "zip_code": "543200", "parent_code": "450400", "type": 2, "first_letter": "C" },
+  { "code": "450500", "name": "北海市", "pinyin": "beihaishi", "zip_code": "536000", "parent_code": "450000", "type": 1, "first_letter": "B" },
+  { "code": "450502", "name": "海城区", "pinyin": "haichengqu", "zip_code": "536000", "parent_code": "450500", "type": 2, "first_letter": "H" },
+  { "code": "450503", "name": "银海区", "pinyin": "yinhaiqu", "zip_code": "536000", "parent_code": "450500", "type": 2, "first_letter": "Y" },
+  { "code": "450512", "name": "铁山港区", "pinyin": "tieshangangqu", "zip_code": "536017", "parent_code": "450500", "type": 2, "first_letter": "T" },
+  { "code": "450521", "name": "合浦县", "pinyin": "hepuxian", "zip_code": "536100", "parent_code": "450500", "type": 2, "first_letter": "H" },
+  { "code": "450600", "name": "防城港市", "pinyin": "fangchenggangshi", "zip_code": "538000", "parent_code": "450000", "type": 1, "first_letter": "F" },
+  { "code": "450602", "name": "港口区", "pinyin": "gangkouqu", "zip_code": "538001", "parent_code": "450600", "type": 2, "first_letter": "G" },
+  { "code": "450603", "name": "防城区", "pinyin": "fangchengqu", "zip_code": "538021", "parent_code": "450600", "type": 2, "first_letter": "F" },
+  { "code": "450621", "name": "上思县", "pinyin": "shangsixian", "zip_code": "535500", "parent_code": "450600", "type": 2, "first_letter": "S" },
+  { "code": "450681", "name": "东兴市", "pinyin": "dongxingshi", "zip_code": "538100", "parent_code": "450600", "type": 2, "first_letter": "D" },
+  { "code": "450700", "name": "钦州市", "pinyin": "qinzhoushi", "zip_code": "535000", "parent_code": "450000", "type": 1, "first_letter": "Q" },
+  { "code": "450702", "name": "钦南区", "pinyin": "qinnanqu", "zip_code": "535000", "parent_code": "450700", "type": 2, "first_letter": "Q" },
+  { "code": "450703", "name": "钦北区", "pinyin": "qinbeiqu", "zip_code": "535000", "parent_code": "450700", "type": 2, "first_letter": "Q" },
+  { "code": "450721", "name": "灵山县", "pinyin": "lingshanxian", "zip_code": "535400", "parent_code": "450700", "type": 2, "first_letter": "L" },
+  { "code": "450722", "name": "浦北县", "pinyin": "pubeixian", "zip_code": "535300", "parent_code": "450700", "type": 2, "first_letter": "P" },
+  { "code": "450800", "name": "贵港市", "pinyin": "guigangshi", "zip_code": "537000", "parent_code": "450000", "type": 1, "first_letter": "G" },
+  { "code": "450802", "name": "港北区", "pinyin": "gangbeiqu", "zip_code": "537100", "parent_code": "450800", "type": 2, "first_letter": "G" },
+  { "code": "450803", "name": "港南区", "pinyin": "gangnanqu", "zip_code": "537132", "parent_code": "450800", "type": 2, "first_letter": "G" },
+  { "code": "450804", "name": "覃塘区", "pinyin": "qintangqu", "zip_code": "537121", "parent_code": "450800", "type": 2, "first_letter": "Q" },
+  { "code": "450821", "name": "平南县", "pinyin": "pingnanxian", "zip_code": "537300", "parent_code": "450800", "type": 2, "first_letter": "P" },
+  { "code": "450881", "name": "桂平市", "pinyin": "guipingshi", "zip_code": "537200", "parent_code": "450800", "type": 2, "first_letter": "G" },
+  { "code": "450900", "name": "玉林市", "pinyin": "yulinshi", "zip_code": "0", "parent_code": "450000", "type": 1, "first_letter": "Y" },
+  { "code": "450902", "name": "玉州区", "pinyin": "yuzhouqu", "zip_code": "537200", "parent_code": "450900", "type": 2, "first_letter": "Y" },
+  { "code": "450903", "name": "福绵区", "pinyin": "fumianqu", "zip_code": "537500", "parent_code": "450900", "type": 2, "first_letter": "F" },
+  { "code": "450921", "name": "容县", "pinyin": "rongxian", "zip_code": "537500", "parent_code": "450900", "type": 2, "first_letter": "R" },
+  { "code": "450922", "name": "陆川县", "pinyin": "luchuanxian", "zip_code": "537700", "parent_code": "450900", "type": 2, "first_letter": "L" },
+  { "code": "450923", "name": "博白县", "pinyin": "bobaixian", "zip_code": "537600", "parent_code": "450900", "type": 2, "first_letter": "B" },
+  { "code": "450924", "name": "兴业县", "pinyin": "xingyexian", "zip_code": "537800", "parent_code": "450900", "type": 2, "first_letter": "X" },
+  { "code": "450981", "name": "北流市", "pinyin": "beiliushi", "zip_code": "537400", "parent_code": "450900", "type": 2, "first_letter": "B" },
+  { "code": "451000", "name": "百色市", "pinyin": "baiseshi", "zip_code": "533000", "parent_code": "450000", "type": 1, "first_letter": "B" },
+  { "code": "451002", "name": "右江区", "pinyin": "youjiangqu", "zip_code": "533000", "parent_code": "451000", "type": 2, "first_letter": "Y" },
+  { "code": "451021", "name": "田阳县", "pinyin": "tianyangxian", "zip_code": "533600", "parent_code": "451000", "type": 2, "first_letter": "T" },
+  { "code": "451022", "name": "田东县", "pinyin": "tiandongxian", "zip_code": "531500", "parent_code": "451000", "type": 2, "first_letter": "T" },
+  { "code": "451023", "name": "平果县", "pinyin": "pingguoxian", "zip_code": "531400", "parent_code": "451000", "type": 2, "first_letter": "P" },
+  { "code": "451024", "name": "德保县", "pinyin": "debaoxian", "zip_code": "533700", "parent_code": "451000", "type": 2, "first_letter": "D" },
+  { "code": "451026", "name": "那坡县", "pinyin": "napoxian", "zip_code": "533900", "parent_code": "451000", "type": 2, "first_letter": "N" },
+  { "code": "451027", "name": "凌云县", "pinyin": "lingyunxian", "zip_code": "533100", "parent_code": "451000", "type": 2, "first_letter": "L" },
+  { "code": "451028", "name": "乐业县", "pinyin": "leyexian", "zip_code": "533200", "parent_code": "451000", "type": 2, "first_letter": "L" },
+  { "code": "451029", "name": "田林县", "pinyin": "tianlinxian", "zip_code": "533300", "parent_code": "451000", "type": 2, "first_letter": "T" },
+  { "code": "451030", "name": "西林县", "pinyin": "xilinxian", "zip_code": "533500", "parent_code": "451000", "type": 2, "first_letter": "X" },
+  { "code": "451031", "name": "隆林各族自治县", "pinyin": "longlingezuzizhixian", "zip_code": "533400", "parent_code": "451000", "type": 2, "first_letter": "L" },
+  { "code": "451081", "name": "靖西市", "pinyin": "jingxishi", "zip_code": "533000", "parent_code": "451000", "type": 2, "first_letter": "J" },
+  { "code": "451100", "name": "贺州市", "pinyin": "hezhoushi", "zip_code": "542800", "parent_code": "450000", "type": 1, "first_letter": "H" },
+  { "code": "451102", "name": "八步区", "pinyin": "babuqu", "zip_code": "542800", "parent_code": "451100", "type": 2, "first_letter": "B" },
+  { "code": "451103", "name": "平桂区", "pinyin": "pingguiqu", "zip_code": "542800", "parent_code": "451100", "type": 2, "first_letter": "P" },
+  { "code": "451121", "name": "昭平县", "pinyin": "zhaopingxian", "zip_code": "546800", "parent_code": "451100", "type": 2, "first_letter": "Z" },
+  { "code": "451122", "name": "钟山县", "pinyin": "zhongshanxian", "zip_code": "542600", "parent_code": "451100", "type": 2, "first_letter": "Z" },
+  { "code": "451123", "name": "富川瑶族自治县", "pinyin": "fuchuanyaozuzizhixian", "zip_code": "542700", "parent_code": "451100", "type": 2, "first_letter": "F" },
+  { "code": "451200", "name": "河池市", "pinyin": "hechishi", "zip_code": "547000", "parent_code": "450000", "type": 1, "first_letter": "H" },
+  { "code": "451202", "name": "金城江区", "pinyin": "jinchengjiangqu", "zip_code": "547000", "parent_code": "451200", "type": 2, "first_letter": "J" },
+  { "code": "451203", "name": "宜州区", "pinyin": "yizhouqu", "zip_code": "546300", "parent_code": "451200", "type": 2, "first_letter": "Y" },
+  { "code": "451221", "name": "南丹县", "pinyin": "nandanxian", "zip_code": "547200", "parent_code": "451200", "type": 2, "first_letter": "N" },
+  { "code": "451222", "name": "天峨县", "pinyin": "tianexian", "zip_code": "547300", "parent_code": "451200", "type": 2, "first_letter": "T" },
+  { "code": "451223", "name": "凤山县", "pinyin": "fengshanxian", "zip_code": "547600", "parent_code": "451200", "type": 2, "first_letter": "F" },
+  { "code": "451224", "name": "东兰县", "pinyin": "donglanxian", "zip_code": "547400", "parent_code": "451200", "type": 2, "first_letter": "D" },
+  { "code": "451225", "name": "罗城仫佬族自治县", "pinyin": "luochengmulaozuzizhixian", "zip_code": "546400", "parent_code": "451200", "type": 2, "first_letter": "L" },
+  { "code": "451226", "name": "环江毛南族自治县", "pinyin": "huanjiangmaonanzuzizhixian", "zip_code": "547100", "parent_code": "451200", "type": 2, "first_letter": "H" },
+  { "code": "451227", "name": "巴马瑶族自治县", "pinyin": "bamayaozuzizhixian", "zip_code": "547500", "parent_code": "451200", "type": 2, "first_letter": "B" },
+  { "code": "451228", "name": "都安瑶族自治县", "pinyin": "duanyaozuzizhixian", "zip_code": "530700", "parent_code": "451200", "type": 2, "first_letter": "D" },
+  { "code": "451229", "name": "大化瑶族自治县", "pinyin": "dahuayaozuzizhixian", "zip_code": "530800", "parent_code": "451200", "type": 2, "first_letter": "D" },
+  { "code": "451300", "name": "来宾市", "pinyin": "laibinshi", "zip_code": "546100", "parent_code": "450000", "type": 1, "first_letter": "L" },
+  { "code": "451302", "name": "兴宾区", "pinyin": "xingbinqu", "zip_code": "546100", "parent_code": "451300", "type": 2, "first_letter": "X" },
+  { "code": "451321", "name": "忻城县", "pinyin": "xinchengxian", "zip_code": "546200", "parent_code": "451300", "type": 2, "first_letter": "X" },
+  { "code": "451322", "name": "象州县", "pinyin": "xiangzhouxian", "zip_code": "545800", "parent_code": "451300", "type": 2, "first_letter": "X" },
+  { "code": "451323", "name": "武宣县", "pinyin": "wuxuanxian", "zip_code": "545900", "parent_code": "451300", "type": 2, "first_letter": "W" },
+  { "code": "451324", "name": "金秀瑶族自治县", "pinyin": "jinxiuyaozuzizhixian", "zip_code": "545700", "parent_code": "451300", "type": 2, "first_letter": "J" },
+  { "code": "451381", "name": "合山市", "pinyin": "heshanshi", "zip_code": "546500", "parent_code": "451300", "type": 2, "first_letter": "H" },
+  { "code": "451400", "name": "崇左市", "pinyin": "chongzuoshi", "zip_code": "532200", "parent_code": "450000", "type": 1, "first_letter": "C" },
+  { "code": "451402", "name": "江州区", "pinyin": "jiangzhouqu", "zip_code": "532200", "parent_code": "451400", "type": 2, "first_letter": "J" },
+  { "code": "451421", "name": "扶绥县", "pinyin": "fusuixian", "zip_code": "532100", "parent_code": "451400", "type": 2, "first_letter": "F" },
+  { "code": "451422", "name": "宁明县", "pinyin": "ningmingxian", "zip_code": "532500", "parent_code": "451400", "type": 2, "first_letter": "N" },
+  { "code": "451423", "name": "龙州县", "pinyin": "longzhouxian", "zip_code": "532400", "parent_code": "451400", "type": 2, "first_letter": "L" },
+  { "code": "451424", "name": "大新县", "pinyin": "daxinxian", "zip_code": "532300", "parent_code": "451400", "type": 2, "first_letter": "D" },
+  { "code": "451425", "name": "天等县", "pinyin": "tiandengxian", "zip_code": "532800", "parent_code": "451400", "type": 2, "first_letter": "T" },
+  { "code": "451481", "name": "凭祥市", "pinyin": "pingxiangshi", "zip_code": "532600", "parent_code": "451400", "type": 2, "first_letter": "P" },
+  { "code": "460000", "name": "海南省", "pinyin": "hainansheng", "zip_code": "0", "type": 0, "first_letter": "H" },
+  { "code": "460100", "name": "海口市", "pinyin": "haikoushi", "zip_code": "570100", "parent_code": "460000", "type": 1, "first_letter": "H" },
+  { "code": "460105", "name": "秀英区", "pinyin": "xiuyingqu", "zip_code": "570311", "parent_code": "460100", "type": 2, "first_letter": "X" },
+  { "code": "460106", "name": "龙华区", "pinyin": "longhuaqu", "zip_code": "570105", "parent_code": "460100", "type": 2, "first_letter": "L" },
+  { "code": "460107", "name": "琼山区", "pinyin": "qiongshanqu", "zip_code": "571100", "parent_code": "460100", "type": 2, "first_letter": "Q" },
+  { "code": "460108", "name": "美兰区", "pinyin": "meilanqu", "zip_code": "570203", "parent_code": "460100", "type": 2, "first_letter": "M" },
+  { "code": "460200", "name": "三亚市", "pinyin": "sanyashi", "zip_code": "572000", "parent_code": "460000", "type": 1, "first_letter": "S" },
+  { "code": "460202", "name": "海棠区", "pinyin": "haitangqu", "zip_code": "572000", "parent_code": "460200", "type": 2, "first_letter": "H" },
+  { "code": "460203", "name": "吉阳区", "pinyin": "jiyangqu", "zip_code": "572000", "parent_code": "460200", "type": 2, "first_letter": "J" },
+  { "code": "460204", "name": "天涯区", "pinyin": "tianyaqu", "zip_code": "572000", "parent_code": "460200", "type": 2, "first_letter": "T" },
+  { "code": "460205", "name": "崖州区", "pinyin": "yazhouqu", "zip_code": "572000", "parent_code": "460200", "type": 2, "first_letter": "Y" },
+  { "code": "460300", "name": "三沙市", "pinyin": "sanshashi", "zip_code": "0", "parent_code": "460000", "type": 1, "first_letter": "S" },
+  { "code": "460321", "name": "西沙群岛", "pinyin": "xishaqundao", "zip_code": "572000", "parent_code": "460300", "type": 2, "first_letter": "X" },
+  { "code": "460322", "name": "南沙群岛", "pinyin": "nanshaqundao", "zip_code": "572000", "parent_code": "460300", "type": 2, "first_letter": "N" },
+  { "code": "460323", "name": "中沙群岛的岛礁及其海域", "pinyin": "zhongshaqundaodedaojiaojiqihaiyu", "zip_code": "572000", "parent_code": "460300", "type": 2, "first_letter": "Z" },
+  { "code": "460400", "name": "儋州市", "pinyin": "danzhoushi", "zip_code": "571700", "parent_code": "460000", "type": 1, "first_letter": "D" },
+  { "code": "460401", "name": "那大镇", "pinyin": "nadazhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "N" },
+  { "code": "460402", "name": "和庆镇", "pinyin": "heqingzhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "H" },
+  { "code": "460403", "name": "南丰镇", "pinyin": "nanfengzhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "N" },
+  { "code": "460404", "name": "大成镇", "pinyin": "dachengzhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "D" },
+  { "code": "460405", "name": "雅星镇", "pinyin": "yaxingzhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "Y" },
+  { "code": "460406", "name": "兰洋镇", "pinyin": "lanyangzhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "L" },
+  { "code": "460407", "name": "光村镇", "pinyin": "guangcunzhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "G" },
+  { "code": "460408", "name": "木棠镇", "pinyin": "mutangzhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "M" },
+  { "code": "460409", "name": "海头镇", "pinyin": "haitouzhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "H" },
+  { "code": "460410", "name": "峨蔓镇", "pinyin": "emanzhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "E" },
+  { "code": "460411", "name": "三都镇", "pinyin": "sanduzhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "S" },
+  { "code": "460412", "name": "王五镇", "pinyin": "wangwuzhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "W" },
+  { "code": "460413", "name": "白马井镇", "pinyin": "baimajingzhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "B" },
+  { "code": "460414", "name": "中和镇", "pinyin": "zhonghezhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "Z" },
+  { "code": "460415", "name": "排浦镇", "pinyin": "paipuzhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "P" },
+  { "code": "460416", "name": "东成镇", "pinyin": "dongchengzhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "D" },
+  { "code": "460417", "name": "新州镇", "pinyin": "xinzhouzhen", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "X" },
+  { "code": "460418", "name": "国营西培农场", "pinyin": "guoyingxipeinongchang", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "G" },
+  { "code": "460419", "name": "国营西联农场", "pinyin": "guoyingxiliannongchang", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "G" },
+  { "code": "460420", "name": "国营蓝洋农场", "pinyin": "guoyinglanyangnongchang", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "G" },
+  { "code": "460421", "name": "国营八一农场", "pinyin": "guoyingbayinongchang", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "G" },
+  { "code": "460422", "name": "洋浦经济开发区", "pinyin": "yangpujingjikaifaqu", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "Y" },
+  { "code": "460423", "name": "华南热作学院", "pinyin": "huananrezuoxueyuan", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "H" },
+  { "code": "460424", "name": "红岭农场", "pinyin": "honglingnongchang", "zip_code": "571700", "parent_code": "460400", "type": 2, "first_letter": "H" },
+  { "code": "469000", "name": "省直辖县级行政区划", "pinyin": "shengzhixiaxianjixingzhengquhua", "zip_code": "0", "parent_code": "460000", "type": 1, "first_letter": "S" },
+  { "code": "469001", "name": "五指山市", "pinyin": "wuzhishanshi", "zip_code": "572200", "parent_code": "469000", "type": 2, "first_letter": "W" },
+  { "code": "469002", "name": "琼海市", "pinyin": "qionghaishi", "zip_code": "571400", "parent_code": "469000", "type": 2, "first_letter": "Q" },
+  { "code": "469005", "name": "文昌市", "pinyin": "wenchangshi", "zip_code": "571300", "parent_code": "469000", "type": 2, "first_letter": "W" },
+  { "code": "469006", "name": "万宁市", "pinyin": "wanningshi", "zip_code": "571500", "parent_code": "469000", "type": 2, "first_letter": "W" },
+  { "code": "469007", "name": "东方市", "pinyin": "dongfangshi", "zip_code": "572600", "parent_code": "469000", "type": 2, "first_letter": "D" },
+  { "code": "469021", "name": "定安县", "pinyin": "dinganxian", "zip_code": "571200", "parent_code": "469000", "type": 2, "first_letter": "D" },
+  { "code": "469022", "name": "屯昌县", "pinyin": "tunchangxian", "zip_code": "571600", "parent_code": "469000", "type": 2, "first_letter": "T" },
+  { "code": "469023", "name": "澄迈县", "pinyin": "chengmaixian", "zip_code": "571900", "parent_code": "469000", "type": 2, "first_letter": "C" },
+  { "code": "469024", "name": "临高县", "pinyin": "lingaoxian", "zip_code": "571800", "parent_code": "469000", "type": 2, "first_letter": "L" },
+  { "code": "469025", "name": "白沙黎族自治县", "pinyin": "baishalizuzizhixian", "zip_code": "572800", "parent_code": "469000", "type": 2, "first_letter": "B" },
+  { "code": "469026", "name": "昌江黎族自治县", "pinyin": "changjianglizuzizhixian", "zip_code": "572700", "parent_code": "469000", "type": 2, "first_letter": "C" },
+  { "code": "469027", "name": "乐东黎族自治县", "pinyin": "ledonglizuzizhixian", "zip_code": "572500", "parent_code": "469000", "type": 2, "first_letter": "L" },
+  { "code": "469028", "name": "陵水黎族自治县", "pinyin": "lingshuilizuzizhixian", "zip_code": "572400", "parent_code": "469000", "type": 2, "first_letter": "L" },
+  { "code": "469029", "name": "保亭黎族苗族自治县", "pinyin": "baotinglizumiaozuzizhixian", "zip_code": "572300", "parent_code": "469000", "type": 2, "first_letter": "B" },
+  { "code": "469030", "name": "琼中黎族苗族自治县", "pinyin": "qiongzhonglizumiaozuzizhixian", "zip_code": "572900", "parent_code": "469000", "type": 2, "first_letter": "Q" },
+  { "code": "500000", "name": "重庆市", "pinyin": "chongqingshi", "zip_code": "400000", "type": 0, "first_letter": "C" },
+  { "code": "500100", "name": "重庆市", "pinyin": "chongqingshi", "zip_code": "400000", "parent_code": "500000", "type": 1, "first_letter": "C" },
+  { "code": "500101", "name": "万州区", "pinyin": "wanzhouqu", "zip_code": "404100", "parent_code": "500100", "type": 2, "first_letter": "W" },
+  { "code": "500102", "name": "涪陵区", "pinyin": "fulingqu", "zip_code": "408000", "parent_code": "500100", "type": 2, "first_letter": "F" },
+  { "code": "500103", "name": "渝中区", "pinyin": "yuzhongqu", "zip_code": "400010", "parent_code": "500100", "type": 2, "first_letter": "Y" },
+  { "code": "500104", "name": "大渡口区", "pinyin": "dadukouqu", "zip_code": "400080", "parent_code": "500100", "type": 2, "first_letter": "D" },
+  { "code": "500105", "name": "江北区", "pinyin": "jiangbeiqu", "zip_code": "400020", "parent_code": "500100", "type": 2, "first_letter": "J" },
+  { "code": "500106", "name": "沙坪坝区", "pinyin": "shapingbaqu", "zip_code": "400030", "parent_code": "500100", "type": 2, "first_letter": "S" },
+  { "code": "500107", "name": "九龙坡区", "pinyin": "jiulongpoqu", "zip_code": "400050", "parent_code": "500100", "type": 2, "first_letter": "J" },
+  { "code": "500108", "name": "南岸区", "pinyin": "nananqu", "zip_code": "400064", "parent_code": "500100", "type": 2, "first_letter": "N" },
+  { "code": "500109", "name": "北碚区", "pinyin": "beibeiqu", "zip_code": "400700", "parent_code": "500100", "type": 2, "first_letter": "B" },
+  { "code": "500110", "name": "綦江区", "pinyin": "qijiangqu", "zip_code": "400000", "parent_code": "500100", "type": 2, "first_letter": "Q" },
+  { "code": "500111", "name": "大足区", "pinyin": "dazuqu", "zip_code": "400000", "parent_code": "500100", "type": 2, "first_letter": "D" },
+  { "code": "500112", "name": "渝北区", "pinyin": "yubeiqu", "zip_code": "401120", "parent_code": "500100", "type": 2, "first_letter": "Y" },
+  { "code": "500113", "name": "巴南区", "pinyin": "bananqu", "zip_code": "401320", "parent_code": "500100", "type": 2, "first_letter": "B" },
+  { "code": "500114", "name": "黔江区", "pinyin": "qianjiangqu", "zip_code": "409700", "parent_code": "500100", "type": 2, "first_letter": "Q" },
+  { "code": "500115", "name": "长寿区", "pinyin": "changshouqu", "zip_code": "401220", "parent_code": "500100", "type": 2, "first_letter": "C" },
+  { "code": "500116", "name": "江津区", "pinyin": "jiangjinqu", "zip_code": "402260", "parent_code": "500100", "type": 2, "first_letter": "J" },
+  { "code": "500117", "name": "合川区", "pinyin": "hechuanqu", "zip_code": "401520", "parent_code": "500100", "type": 2, "first_letter": "H" },
+  { "code": "500118", "name": "永川区", "pinyin": "yongchuanqu", "zip_code": "402160", "parent_code": "500100", "type": 2, "first_letter": "Y" },
+  { "code": "500119", "name": "南川区", "pinyin": "nanchuanqu", "zip_code": "408400", "parent_code": "500100", "type": 2, "first_letter": "N" },
+  { "code": "500120", "name": "璧山区", "pinyin": "bishanqu", "zip_code": "408400", "parent_code": "500100", "type": 2, "first_letter": "B" },
+  { "code": "500151", "name": "铜梁区", "pinyin": "tongliangqu", "zip_code": "408400", "parent_code": "500100", "type": 2, "first_letter": "T" },
+  { "code": "500152", "name": "潼南区", "pinyin": "tongnanqu", "zip_code": "402660", "parent_code": "500100", "type": 2, "first_letter": "T" },
+  { "code": "500153", "name": "荣昌区", "pinyin": "rongchangqu", "zip_code": "408400", "parent_code": "500100", "type": 2, "first_letter": "R" },
+  { "code": "500154", "name": "开州区", "pinyin": "kaizhouqu", "zip_code": "408400", "parent_code": "500100", "type": 2, "first_letter": "K" },
+  { "code": "500155", "name": "梁平区", "pinyin": "liangpingqu", "zip_code": "405200", "parent_code": "500100", "type": 2, "first_letter": "L" },
+  { "code": "500156", "name": "武隆区", "pinyin": "wulongqu", "zip_code": "408500", "parent_code": "500100", "type": 2, "first_letter": "W" },
+  { "code": "500200", "name": "县", "pinyin": "xian", "zip_code": "0", "parent_code": "500000", "type": 1, "first_letter": "X" },
+  { "code": "500229", "name": "城口县", "pinyin": "chengkouxian", "zip_code": "405900", "parent_code": "500200", "type": 2, "first_letter": "C" },
+  { "code": "500230", "name": "丰都县", "pinyin": "fengduxian", "zip_code": "408200", "parent_code": "500200", "type": 2, "first_letter": "F" },
+  { "code": "500231", "name": "垫江县", "pinyin": "dianjiangxian", "zip_code": "408300", "parent_code": "500200", "type": 2, "first_letter": "D" },
+  { "code": "500233", "name": "忠县", "pinyin": "zhongxian", "zip_code": "404300", "parent_code": "500200", "type": 2, "first_letter": "Z" },
+  { "code": "500235", "name": "云阳县", "pinyin": "yunyangxian", "zip_code": "404500", "parent_code": "500200", "type": 2, "first_letter": "Y" },
+  { "code": "500236", "name": "奉节县", "pinyin": "fengjiexian", "zip_code": "404600", "parent_code": "500200", "type": 2, "first_letter": "F" },
+  { "code": "500237", "name": "巫山县", "pinyin": "wushanxian", "zip_code": "404700", "parent_code": "500200", "type": 2, "first_letter": "W" },
+  { "code": "500238", "name": "巫溪县", "pinyin": "wuxixian", "zip_code": "405800", "parent_code": "500200", "type": 2, "first_letter": "W" },
+  { "code": "500240", "name": "石柱土家族自治县", "pinyin": "shizhutujiazuzizhixian", "zip_code": "409100", "parent_code": "500200", "type": 2, "first_letter": "S" },
+  { "code": "500241", "name": "秀山土家族苗族自治县", "pinyin": "xiushantujiazumiaozuzizhixian", "zip_code": "409900", "parent_code": "500200", "type": 2, "first_letter": "X" },
+  { "code": "500242", "name": "酉阳土家族苗族自治县", "pinyin": "youyangtujiazumiaozuzizhixian", "zip_code": "409800", "parent_code": "500200", "type": 2, "first_letter": "Y" },
+  { "code": "500243", "name": "彭水苗族土家族自治县", "pinyin": "pengshuimiaozutujiazuzizhixian", "zip_code": "409600", "parent_code": "500200", "type": 2, "first_letter": "P" },
+  { "code": "510000", "name": "四川省", "pinyin": "sichuansheng", "zip_code": "0", "type": 0, "first_letter": "S" },
+  { "code": "510100", "name": "成都市", "pinyin": "chengdushi", "zip_code": "610000", "parent_code": "510000", "type": 1, "first_letter": "C" },
+  { "code": "510104", "name": "锦江区", "pinyin": "jinjiangqu", "zip_code": "610021", "parent_code": "510100", "type": 2, "first_letter": "J" },
+  { "code": "510105", "name": "青羊区", "pinyin": "qingyangqu", "zip_code": "610031", "parent_code": "510100", "type": 2, "first_letter": "Q" },
+  { "code": "510106", "name": "金牛区", "pinyin": "jinniuqu", "zip_code": "610036", "parent_code": "510100", "type": 2, "first_letter": "J" },
+  { "code": "510107", "name": "武侯区", "pinyin": "wuhouqu", "zip_code": "610041", "parent_code": "510100", "type": 2, "first_letter": "W" },
+  { "code": "510108", "name": "成华区", "pinyin": "chenghuaqu", "zip_code": "610066", "parent_code": "510100", "type": 2, "first_letter": "C" },
+  { "code": "510112", "name": "龙泉驿区", "pinyin": "longquanyiqu", "zip_code": "610100", "parent_code": "510100", "type": 2, "first_letter": "L" },
+  { "code": "510113", "name": "青白江区", "pinyin": "qingbaijiangqu", "zip_code": "610300", "parent_code": "510100", "type": 2, "first_letter": "Q" },
+  { "code": "510114", "name": "新都区", "pinyin": "xinduqu", "zip_code": "610500", "parent_code": "510100", "type": 2, "first_letter": "X" },
+  { "code": "510115", "name": "温江区", "pinyin": "wenjiangqu", "zip_code": "611130", "parent_code": "510100", "type": 2, "first_letter": "W" },
+  { "code": "510116", "name": "双流区", "pinyin": "shuangliuqu", "zip_code": "610200", "parent_code": "510100", "type": 2, "first_letter": "S" },
+  { "code": "510117", "name": "郫都区", "pinyin": "piduqu", "zip_code": "611730", "parent_code": "510100", "type": 2, "first_letter": "P" },
+  { "code": "510121", "name": "金堂县", "pinyin": "jintangxian", "zip_code": "610400", "parent_code": "510100", "type": 2, "first_letter": "J" },
+  { "code": "510129", "name": "大邑县", "pinyin": "dayixian", "zip_code": "611300", "parent_code": "510100", "type": 2, "first_letter": "D" },
+  { "code": "510131", "name": "蒲江县", "pinyin": "pujiangxian", "zip_code": "611630", "parent_code": "510100", "type": 2, "first_letter": "P" },
+  { "code": "510132", "name": "新津县", "pinyin": "xinjinxian", "zip_code": "611430", "parent_code": "510100", "type": 2, "first_letter": "X" },
+  { "code": "510181", "name": "都江堰市", "pinyin": "dujiangyanshi", "zip_code": "611830", "parent_code": "510100", "type": 2, "first_letter": "D" },
+  { "code": "510182", "name": "彭州市", "pinyin": "pengzhoushi", "zip_code": "611930", "parent_code": "510100", "type": 2, "first_letter": "P" },
+  { "code": "510183", "name": "邛崃市", "pinyin": "qionglaishi", "zip_code": "611530", "parent_code": "510100", "type": 2, "first_letter": "Q" },
+  { "code": "510184", "name": "崇州市", "pinyin": "chongzhoushi", "zip_code": "611230", "parent_code": "510100", "type": 2, "first_letter": "C" },
+  { "code": "510185", "name": "简阳市", "pinyin": "jianyangshi", "zip_code": "611230", "parent_code": "510100", "type": 2, "first_letter": "J" },
+  { "code": "510300", "name": "自贡市", "pinyin": "zigongshi", "zip_code": "643000", "parent_code": "510000", "type": 1, "first_letter": "Z" },
+  { "code": "510302", "name": "自流井区", "pinyin": "ziliujingqu", "zip_code": "643000", "parent_code": "510300", "type": 2, "first_letter": "Z" },
+  { "code": "510303", "name": "贡井区", "pinyin": "gongjingqu", "zip_code": "643020", "parent_code": "510300", "type": 2, "first_letter": "G" },
+  { "code": "510304", "name": "大安区", "pinyin": "daanqu", "zip_code": "643010", "parent_code": "510300", "type": 2, "first_letter": "D" },
+  { "code": "510311", "name": "沿滩区", "pinyin": "yantanqu", "zip_code": "643030", "parent_code": "510300", "type": 2, "first_letter": "Y" },
+  { "code": "510321", "name": "荣县", "pinyin": "rongxian", "zip_code": "643100", "parent_code": "510300", "type": 2, "first_letter": "R" },
+  { "code": "510322", "name": "富顺县", "pinyin": "fushunxian", "zip_code": "643200", "parent_code": "510300", "type": 2, "first_letter": "F" },
+  { "code": "510400", "name": "攀枝花市", "pinyin": "panzhihuashi", "zip_code": "617000", "parent_code": "510000", "type": 1, "first_letter": "P" },
+  { "code": "510402", "name": "东区", "pinyin": "dongqu", "zip_code": "617067", "parent_code": "510400", "type": 2, "first_letter": "D" },
+  { "code": "510403", "name": "西区", "pinyin": "xiqu", "zip_code": "617068", "parent_code": "510400", "type": 2, "first_letter": "X" },
+  { "code": "510411", "name": "仁和区", "pinyin": "renhequ", "zip_code": "617061", "parent_code": "510400", "type": 2, "first_letter": "R" },
+  { "code": "510421", "name": "米易县", "pinyin": "miyixian", "zip_code": "617200", "parent_code": "510400", "type": 2, "first_letter": "M" },
+  { "code": "510422", "name": "盐边县", "pinyin": "yanbianxian", "zip_code": "617100", "parent_code": "510400", "type": 2, "first_letter": "Y" },
+  { "code": "510500", "name": "泸州市", "pinyin": "luzhoushi", "zip_code": "646000", "parent_code": "510000", "type": 1, "first_letter": "L" },
+  { "code": "510502", "name": "江阳区", "pinyin": "jiangyangqu", "zip_code": "646000", "parent_code": "510500", "type": 2, "first_letter": "J" },
+  { "code": "510503", "name": "纳溪区", "pinyin": "naxiqu", "zip_code": "646300", "parent_code": "510500", "type": 2, "first_letter": "N" },
+  { "code": "510504", "name": "龙马潭区", "pinyin": "longmatanqu", "zip_code": "646000", "parent_code": "510500", "type": 2, "first_letter": "L" },
+  { "code": "510521", "name": "泸县", "pinyin": "luxian", "zip_code": "646106", "parent_code": "510500", "type": 2, "first_letter": "L" },
+  { "code": "510522", "name": "合江县", "pinyin": "hejiangxian", "zip_code": "646200", "parent_code": "510500", "type": 2, "first_letter": "H" },
+  { "code": "510524", "name": "叙永县", "pinyin": "xuyongxian", "zip_code": "646400", "parent_code": "510500", "type": 2, "first_letter": "X" },
+  { "code": "510525", "name": "古蔺县", "pinyin": "gulinxian", "zip_code": "646500", "parent_code": "510500", "type": 2, "first_letter": "G" },
+  { "code": "510600", "name": "德阳市", "pinyin": "deyangshi", "zip_code": "618000", "parent_code": "510000", "type": 1, "first_letter": "D" },
+  { "code": "510603", "name": "旌阳区", "pinyin": "jingyangqu", "zip_code": "618000", "parent_code": "510600", "type": 2, "first_letter": "J" },
+  { "code": "510604", "name": "罗江区", "pinyin": "luojiangqu", "zip_code": "618500", "parent_code": "510600", "type": 2, "first_letter": "L" },
+  { "code": "510623", "name": "中江县", "pinyin": "zhongjiangxian", "zip_code": "618100", "parent_code": "510600", "type": 2, "first_letter": "Z" },
+  { "code": "510681", "name": "广汉市", "pinyin": "guanghanshi", "zip_code": "618300", "parent_code": "510600", "type": 2, "first_letter": "G" },
+  { "code": "510682", "name": "什邡市", "pinyin": "shifangshi", "zip_code": "618300", "parent_code": "510600", "type": 2, "first_letter": "S" },
+  { "code": "510683", "name": "绵竹市", "pinyin": "mianzhushi", "zip_code": "618200", "parent_code": "510600", "type": 2, "first_letter": "M" },
+  { "code": "510700", "name": "绵阳市", "pinyin": "mianyangshi", "zip_code": "621000", "parent_code": "510000", "type": 1, "first_letter": "M" },
+  { "code": "510703", "name": "涪城区", "pinyin": "fuchengqu", "zip_code": "621000", "parent_code": "510700", "type": 2, "first_letter": "F" },
+  { "code": "510704", "name": "游仙区", "pinyin": "youxianqu", "zip_code": "621022", "parent_code": "510700", "type": 2, "first_letter": "Y" },
+  { "code": "510705", "name": "安州区", "pinyin": "anzhouqu", "zip_code": "622650", "parent_code": "510700", "type": 2, "first_letter": "A" },
+  { "code": "510722", "name": "三台县", "pinyin": "santaixian", "zip_code": "621100", "parent_code": "510700", "type": 2, "first_letter": "S" },
+  { "code": "510723", "name": "盐亭县", "pinyin": "yantingxian", "zip_code": "621600", "parent_code": "510700", "type": 2, "first_letter": "Y" },
+  { "code": "510725", "name": "梓潼县", "pinyin": "zitongxian", "zip_code": "622150", "parent_code": "510700", "type": 2, "first_letter": "Z" },
+  { "code": "510726", "name": "北川羌族自治县", "pinyin": "beichuanqiangzuzizhixian", "zip_code": "622750", "parent_code": "510700", "type": 2, "first_letter": "B" },
+  { "code": "510727", "name": "平武县", "pinyin": "pingwuxian", "zip_code": "622550", "parent_code": "510700", "type": 2, "first_letter": "P" },
+  { "code": "510781", "name": "江油市", "pinyin": "jiangyoushi", "zip_code": "621700", "parent_code": "510700", "type": 2, "first_letter": "J" },
+  { "code": "510800", "name": "广元市", "pinyin": "guangyuanshi", "zip_code": "628000", "parent_code": "510000", "type": 1, "first_letter": "G" },
+  { "code": "510802", "name": "利州区", "pinyin": "lizhouqu", "zip_code": "628017", "parent_code": "510800", "type": 2, "first_letter": "L" },
+  { "code": "510811", "name": "昭化区", "pinyin": "zhaohuaqu", "zip_code": "628000", "parent_code": "510800", "type": 2, "first_letter": "Z" },
+  { "code": "510812", "name": "朝天区", "pinyin": "chaotianqu", "zip_code": "628017", "parent_code": "510800", "type": 2, "first_letter": "C" },
+  { "code": "510821", "name": "旺苍县", "pinyin": "wangcangxian", "zip_code": "628200", "parent_code": "510800", "type": 2, "first_letter": "W" },
+  { "code": "510822", "name": "青川县", "pinyin": "qingchuanxian", "zip_code": "628100", "parent_code": "510800", "type": 2, "first_letter": "Q" },
+  { "code": "510823", "name": "剑阁县", "pinyin": "jiangexian", "zip_code": "628300", "parent_code": "510800", "type": 2, "first_letter": "J" },
+  { "code": "510824", "name": "苍溪县", "pinyin": "cangxixian", "zip_code": "628400", "parent_code": "510800", "type": 2, "first_letter": "C" },
+  { "code": "510900", "name": "遂宁市", "pinyin": "suiningshi", "zip_code": "629000", "parent_code": "510000", "type": 1, "first_letter": "S" },
+  { "code": "510903", "name": "船山区", "pinyin": "chuanshanqu", "zip_code": "629000", "parent_code": "510900", "type": 2, "first_letter": "C" },
+  { "code": "510904", "name": "安居区", "pinyin": "anjuqu", "zip_code": "629000", "parent_code": "510900", "type": 2, "first_letter": "A" },
+  { "code": "510921", "name": "蓬溪县", "pinyin": "pengxixian", "zip_code": "629100", "parent_code": "510900", "type": 2, "first_letter": "P" },
+  { "code": "510922", "name": "射洪县", "pinyin": "shehongxian", "zip_code": "629200", "parent_code": "510900", "type": 2, "first_letter": "S" },
+  { "code": "510923", "name": "大英县", "pinyin": "dayingxian", "zip_code": "629300", "parent_code": "510900", "type": 2, "first_letter": "D" },
+  { "code": "511000", "name": "内江市", "pinyin": "neijiangshi", "zip_code": "641000", "parent_code": "510000", "type": 1, "first_letter": "N" },
+  { "code": "511002", "name": "市中区", "pinyin": "shizhongqu", "zip_code": "614000", "parent_code": "511000", "type": 2, "first_letter": "S" },
+  { "code": "511011", "name": "东兴区", "pinyin": "dongxingqu", "zip_code": "641100", "parent_code": "511000", "type": 2, "first_letter": "D" },
+  { "code": "511024", "name": "威远县", "pinyin": "weiyuanxian", "zip_code": "642450", "parent_code": "511000", "type": 2, "first_letter": "W" },
+  { "code": "511025", "name": "资中县", "pinyin": "zizhongxian", "zip_code": "641200", "parent_code": "511000", "type": 2, "first_letter": "Z" },
+  { "code": "511083", "name": "隆昌市", "pinyin": "longchangshi", "zip_code": "642150", "parent_code": "511000", "type": 2, "first_letter": "L" },
+  { "code": "511100", "name": "乐山市", "pinyin": "leshanshi", "zip_code": "614000", "parent_code": "510000", "type": 1, "first_letter": "L" },
+  { "code": "511102", "name": "市中区", "pinyin": "shizhongqu", "zip_code": "614000", "parent_code": "511100", "type": 2, "first_letter": "S" },
+  { "code": "511111", "name": "沙湾区", "pinyin": "shawanqu", "zip_code": "614900", "parent_code": "511100", "type": 2, "first_letter": "S" },
+  { "code": "511112", "name": "五通桥区", "pinyin": "wutongqiaoqu", "zip_code": "614800", "parent_code": "511100", "type": 2, "first_letter": "W" },
+  { "code": "511113", "name": "金口河区", "pinyin": "jinkouhequ", "zip_code": "614700", "parent_code": "511100", "type": 2, "first_letter": "J" },
+  { "code": "511123", "name": "犍为县", "pinyin": "qianweixian", "zip_code": "614400", "parent_code": "511100", "type": 2, "first_letter": "Q" },
+  { "code": "511124", "name": "井研县", "pinyin": "jingyanxian", "zip_code": "613100", "parent_code": "511100", "type": 2, "first_letter": "J" },
+  { "code": "511126", "name": "夹江县", "pinyin": "jiajiangxian", "zip_code": "614100", "parent_code": "511100", "type": 2, "first_letter": "J" },
+  { "code": "511129", "name": "沐川县", "pinyin": "muchuanxian", "zip_code": "614500", "parent_code": "511100", "type": 2, "first_letter": "M" },
+  { "code": "511132", "name": "峨边彝族自治县", "pinyin": "ebianyizuzizhixian", "zip_code": "614300", "parent_code": "511100", "type": 2, "first_letter": "E" },
+  { "code": "511133", "name": "马边彝族自治县", "pinyin": "mabianyizuzizhixian", "zip_code": "614600", "parent_code": "511100", "type": 2, "first_letter": "M" },
+  { "code": "511181", "name": "峨眉山市", "pinyin": "emeishanshi", "zip_code": "614200", "parent_code": "511100", "type": 2, "first_letter": "E" },
+  { "code": "511300", "name": "南充市", "pinyin": "nanchongshi", "zip_code": "637000", "parent_code": "510000", "type": 1, "first_letter": "N" },
+  { "code": "511302", "name": "顺庆区", "pinyin": "shunqingqu", "zip_code": "637000", "parent_code": "511300", "type": 2, "first_letter": "S" },
+  { "code": "511303", "name": "高坪区", "pinyin": "gaopingqu", "zip_code": "637100", "parent_code": "511300", "type": 2, "first_letter": "G" },
+  { "code": "511304", "name": "嘉陵区", "pinyin": "jialingqu", "zip_code": "637100", "parent_code": "511300", "type": 2, "first_letter": "J" },
+  { "code": "511321", "name": "南部县", "pinyin": "nanbuxian", "zip_code": "637300", "parent_code": "511300", "type": 2, "first_letter": "N" },
+  { "code": "511322", "name": "营山县", "pinyin": "yingshanxian", "zip_code": "637700", "parent_code": "511300", "type": 2, "first_letter": "Y" },
+  { "code": "511323", "name": "蓬安县", "pinyin": "penganxian", "zip_code": "637800", "parent_code": "511300", "type": 2, "first_letter": "P" },
+  { "code": "511324", "name": "仪陇县", "pinyin": "yilongxian", "zip_code": "637600", "parent_code": "511300", "type": 2, "first_letter": "Y" },
+  { "code": "511325", "name": "西充县", "pinyin": "xichongxian", "zip_code": "637200", "parent_code": "511300", "type": 2, "first_letter": "X" },
+  { "code": "511381", "name": "阆中市", "pinyin": "langzhongshi", "zip_code": "637400", "parent_code": "511300", "type": 2, "first_letter": "L" },
+  { "code": "511400", "name": "眉山市", "pinyin": "meishanshi", "zip_code": "620000", "parent_code": "510000", "type": 1, "first_letter": "M" },
+  { "code": "511402", "name": "东坡区", "pinyin": "dongpoqu", "zip_code": "620010", "parent_code": "511400", "type": 2, "first_letter": "D" },
+  { "code": "511403", "name": "彭山区", "pinyin": "pengshanqu", "zip_code": "620860", "parent_code": "511400", "type": 2, "first_letter": "P" },
+  { "code": "511421", "name": "仁寿县", "pinyin": "renshouxian", "zip_code": "620500", "parent_code": "511400", "type": 2, "first_letter": "R" },
+  { "code": "511423", "name": "洪雅县", "pinyin": "hongyaxian", "zip_code": "620360", "parent_code": "511400", "type": 2, "first_letter": "H" },
+  { "code": "511424", "name": "丹棱县", "pinyin": "danlingxian", "zip_code": "620200", "parent_code": "511400", "type": 2, "first_letter": "D" },
+  { "code": "511425", "name": "青神县", "pinyin": "qingshenxian", "zip_code": "620460", "parent_code": "511400", "type": 2, "first_letter": "Q" },
+  { "code": "511500", "name": "宜宾市", "pinyin": "yibinshi", "zip_code": "644000", "parent_code": "510000", "type": 1, "first_letter": "Y" },
+  { "code": "511502", "name": "翠屏区", "pinyin": "cuipingqu", "zip_code": "644000", "parent_code": "511500", "type": 2, "first_letter": "C" },
+  { "code": "511503", "name": "南溪区", "pinyin": "nanxiqu", "zip_code": "0", "parent_code": "511500", "type": 2, "first_letter": "N" },
+  { "code": "511521", "name": "宜宾县", "pinyin": "yibinxian", "zip_code": "644600", "parent_code": "511500", "type": 2, "first_letter": "Y" },
+  { "code": "511523", "name": "江安县", "pinyin": "jianganxian", "zip_code": "644200", "parent_code": "511500", "type": 2, "first_letter": "J" },
+  { "code": "511524", "name": "长宁县", "pinyin": "changningxian", "zip_code": "644300", "parent_code": "511500", "type": 2, "first_letter": "C" },
+  { "code": "511525", "name": "高县", "pinyin": "gaoxian", "zip_code": "645150", "parent_code": "511500", "type": 2, "first_letter": "G" },
+  { "code": "511526", "name": "珙县", "pinyin": "gongxian", "zip_code": "644500", "parent_code": "511500", "type": 2, "first_letter": "G" },
+  { "code": "511527", "name": "筠连县", "pinyin": "junlianxian", "zip_code": "645250", "parent_code": "511500", "type": 2, "first_letter": "J" },
+  { "code": "511528", "name": "兴文县", "pinyin": "xingwenxian", "zip_code": "644400", "parent_code": "511500", "type": 2, "first_letter": "X" },
+  { "code": "511529", "name": "屏山县", "pinyin": "pingshanxian", "zip_code": "645350", "parent_code": "511500", "type": 2, "first_letter": "P" },
+  { "code": "511600", "name": "广安市", "pinyin": "guanganshi", "zip_code": "638500", "parent_code": "510000", "type": 1, "first_letter": "G" },
+  { "code": "511602", "name": "广安区", "pinyin": "guanganqu", "zip_code": "638000", "parent_code": "511600", "type": 2, "first_letter": "G" },
+  { "code": "511603", "name": "前锋区", "pinyin": "qianfengqu", "zip_code": "638019", "parent_code": "511600", "type": 2, "first_letter": "Q" },
+  { "code": "511621", "name": "岳池县", "pinyin": "yuechixian", "zip_code": "638300", "parent_code": "511600", "type": 2, "first_letter": "Y" },
+  { "code": "511622", "name": "武胜县", "pinyin": "wushengxian", "zip_code": "638400", "parent_code": "511600", "type": 2, "first_letter": "W" },
+  { "code": "511623", "name": "邻水县", "pinyin": "linshuixian", "zip_code": "638500", "parent_code": "511600", "type": 2, "first_letter": "L" },
+  { "code": "511681", "name": "华蓥市", "pinyin": "huayingshi", "zip_code": "638600", "parent_code": "511600", "type": 2, "first_letter": "H" },
+  { "code": "511700", "name": "达州市", "pinyin": "dazhoushi", "zip_code": "635000", "parent_code": "510000", "type": 1, "first_letter": "D" },
+  { "code": "511702", "name": "通川区", "pinyin": "tongchuanqu", "zip_code": "635000", "parent_code": "511700", "type": 2, "first_letter": "T" },
+  { "code": "511703", "name": "达川区", "pinyin": "dachuanqu", "zip_code": "635000", "parent_code": "511700", "type": 2, "first_letter": "D" },
+  { "code": "511722", "name": "宣汉县", "pinyin": "xuanhanxian", "zip_code": "636150", "parent_code": "511700", "type": 2, "first_letter": "X" },
+  { "code": "511723", "name": "开江县", "pinyin": "kaijiangxian", "zip_code": "636250", "parent_code": "511700", "type": 2, "first_letter": "K" },
+  { "code": "511724", "name": "大竹县", "pinyin": "dazhuxian", "zip_code": "635100", "parent_code": "511700", "type": 2, "first_letter": "D" },
+  { "code": "511725", "name": "渠县", "pinyin": "quxian", "zip_code": "635200", "parent_code": "511700", "type": 2, "first_letter": "Q" },
+  { "code": "511781", "name": "万源市", "pinyin": "wanyuanshi", "zip_code": "636350", "parent_code": "511700", "type": 2, "first_letter": "W" },
+  { "code": "511800", "name": "雅安市", "pinyin": "yaanshi", "zip_code": "625000", "parent_code": "510000", "type": 1, "first_letter": "Y" },
+  { "code": "511802", "name": "雨城区", "pinyin": "yuchengqu", "zip_code": "625000", "parent_code": "511800", "type": 2, "first_letter": "Y" },
+  { "code": "511803", "name": "名山区", "pinyin": "mingshanqu", "zip_code": "0", "parent_code": "511800", "type": 2, "first_letter": "M" },
+  { "code": "511822", "name": "荥经县", "pinyin": "xingjingxian", "zip_code": "625200", "parent_code": "511800", "type": 2, "first_letter": "X" },
+  { "code": "511823", "name": "汉源县", "pinyin": "hanyuanxian", "zip_code": "625300", "parent_code": "511800", "type": 2, "first_letter": "H" },
+  { "code": "511824", "name": "石棉县", "pinyin": "shimianxian", "zip_code": "625400", "parent_code": "511800", "type": 2, "first_letter": "S" },
+  { "code": "511825", "name": "天全县", "pinyin": "tianquanxian", "zip_code": "625500", "parent_code": "511800", "type": 2, "first_letter": "T" },
+  { "code": "511826", "name": "芦山县", "pinyin": "lushanxian", "zip_code": "625600", "parent_code": "511800", "type": 2, "first_letter": "L" },
+  { "code": "511827", "name": "宝兴县", "pinyin": "baoxingxian", "zip_code": "625700", "parent_code": "511800", "type": 2, "first_letter": "B" },
+  { "code": "511900", "name": "巴中市", "pinyin": "bazhongshi", "zip_code": "636600", "parent_code": "510000", "type": 1, "first_letter": "B" },
+  { "code": "511902", "name": "巴州区", "pinyin": "bazhouqu", "zip_code": "636001", "parent_code": "511900", "type": 2, "first_letter": "B" },
+  { "code": "511903", "name": "恩阳区", "pinyin": "enyangqu", "zip_code": "636001", "parent_code": "511900", "type": 2, "first_letter": "E" },
+  { "code": "511921", "name": "通江县", "pinyin": "tongjiangxian", "zip_code": "636700", "parent_code": "511900", "type": 2, "first_letter": "T" },
+  { "code": "511922", "name": "南江县", "pinyin": "nanjiangxian", "zip_code": "636600", "parent_code": "511900", "type": 2, "first_letter": "N" },
+  { "code": "511923", "name": "平昌县", "pinyin": "pingchangxian", "zip_code": "636400", "parent_code": "511900", "type": 2, "first_letter": "P" },
+  { "code": "512000", "name": "资阳市", "pinyin": "ziyangshi", "zip_code": "641300", "parent_code": "510000", "type": 1, "first_letter": "Z" },
+  { "code": "512002", "name": "雁江区", "pinyin": "yanjiangqu", "zip_code": "641300", "parent_code": "512000", "type": 2, "first_letter": "Y" },
+  { "code": "512021", "name": "安岳县", "pinyin": "anyuexian", "zip_code": "642350", "parent_code": "512000", "type": 2, "first_letter": "A" },
+  { "code": "512022", "name": "乐至县", "pinyin": "lezhixian", "zip_code": "641500", "parent_code": "512000", "type": 2, "first_letter": "L" },
+  { "code": "513200", "name": "阿坝藏族羌族自治州", "pinyin": "abazangzuqiangzuzizhizhou", "zip_code": "624000", "parent_code": "510000", "type": 1, "first_letter": "A" },
+  { "code": "513201", "name": "马尔康市", "pinyin": "maerkangshi", "zip_code": "624000", "parent_code": "513200", "type": 2, "first_letter": "M" },
+  { "code": "513221", "name": "汶川县", "pinyin": "wenchuanxian", "zip_code": "623000", "parent_code": "513200", "type": 2, "first_letter": "W" },
+  { "code": "513222", "name": "理县", "pinyin": "lixian", "zip_code": "623100", "parent_code": "513200", "type": 2, "first_letter": "L" },
+  { "code": "513223", "name": "茂县", "pinyin": "maoxian", "zip_code": "623200", "parent_code": "513200", "type": 2, "first_letter": "M" },
+  { "code": "513224", "name": "松潘县", "pinyin": "songpanxian", "zip_code": "623300", "parent_code": "513200", "type": 2, "first_letter": "S" },
+  { "code": "513225", "name": "九寨沟县", "pinyin": "jiuzhaigouxian", "zip_code": "623400", "parent_code": "513200", "type": 2, "first_letter": "J" },
+  { "code": "513226", "name": "金川县", "pinyin": "jinchuanxian", "zip_code": "624100", "parent_code": "513200", "type": 2, "first_letter": "J" },
+  { "code": "513227", "name": "小金县", "pinyin": "xiaojinxian", "zip_code": "624200", "parent_code": "513200", "type": 2, "first_letter": "X" },
+  { "code": "513228", "name": "黑水县", "pinyin": "heishuixian", "zip_code": "623500", "parent_code": "513200", "type": 2, "first_letter": "H" },
+  { "code": "513230", "name": "壤塘县", "pinyin": "rangtangxian", "zip_code": "624300", "parent_code": "513200", "type": 2, "first_letter": "R" },
+  { "code": "513231", "name": "阿坝县", "pinyin": "abaxian", "zip_code": "624600", "parent_code": "513200", "type": 2, "first_letter": "A" },
+  { "code": "513232", "name": "若尔盖县", "pinyin": "ruoergaixian", "zip_code": "624500", "parent_code": "513200", "type": 2, "first_letter": "R" },
+  { "code": "513233", "name": "红原县", "pinyin": "hongyuanxian", "zip_code": "624400", "parent_code": "513200", "type": 2, "first_letter": "H" },
+  { "code": "513300", "name": "甘孜藏族自治州", "pinyin": "ganzizangzuzizhizhou", "zip_code": "626000", "parent_code": "510000", "type": 1, "first_letter": "G" },
+  { "code": "513301", "name": "康定市", "pinyin": "kangdingshi", "zip_code": "626000", "parent_code": "513300", "type": 2, "first_letter": "K" },
+  { "code": "513322", "name": "泸定县", "pinyin": "ludingxian", "zip_code": "626100", "parent_code": "513300", "type": 2, "first_letter": "L" },
+  { "code": "513323", "name": "丹巴县", "pinyin": "danbaxian", "zip_code": "626300", "parent_code": "513300", "type": 2, "first_letter": "D" },
+  { "code": "513324", "name": "九龙县", "pinyin": "jiulongxian", "zip_code": "626200", "parent_code": "513300", "type": 2, "first_letter": "J" },
+  { "code": "513325", "name": "雅江县", "pinyin": "yajiangxian", "zip_code": "627450", "parent_code": "513300", "type": 2, "first_letter": "Y" },
+  { "code": "513326", "name": "道孚县", "pinyin": "daofuxian", "zip_code": "626400", "parent_code": "513300", "type": 2, "first_letter": "D" },
+  { "code": "513327", "name": "炉霍县", "pinyin": "luhuoxian", "zip_code": "626500", "parent_code": "513300", "type": 2, "first_letter": "L" },
+  { "code": "513328", "name": "甘孜县", "pinyin": "ganzixian", "zip_code": "626700", "parent_code": "513300", "type": 2, "first_letter": "G" },
+  { "code": "513329", "name": "新龙县", "pinyin": "xinlongxian", "zip_code": "626800", "parent_code": "513300", "type": 2, "first_letter": "X" },
+  { "code": "513330", "name": "德格县", "pinyin": "degexian", "zip_code": "627250", "parent_code": "513300", "type": 2, "first_letter": "D" },
+  { "code": "513331", "name": "白玉县", "pinyin": "baiyuxian", "zip_code": "627150", "parent_code": "513300", "type": 2, "first_letter": "B" },
+  { "code": "513332", "name": "石渠县", "pinyin": "shiquxian", "zip_code": "627350", "parent_code": "513300", "type": 2, "first_letter": "S" },
+  { "code": "513333", "name": "色达县", "pinyin": "sedaxian", "zip_code": "626600", "parent_code": "513300", "type": 2, "first_letter": "S" },
+  { "code": "513334", "name": "理塘县", "pinyin": "litangxian", "zip_code": "627550", "parent_code": "513300", "type": 2, "first_letter": "L" },
+  { "code": "513335", "name": "巴塘县", "pinyin": "batangxian", "zip_code": "627650", "parent_code": "513300", "type": 2, "first_letter": "B" },
+  { "code": "513336", "name": "乡城县", "pinyin": "xiangchengxian", "zip_code": "627850", "parent_code": "513300", "type": 2, "first_letter": "X" },
+  { "code": "513337", "name": "稻城县", "pinyin": "daochengxian", "zip_code": "627750", "parent_code": "513300", "type": 2, "first_letter": "D" },
+  { "code": "513338", "name": "得荣县", "pinyin": "derongxian", "zip_code": "627950", "parent_code": "513300", "type": 2, "first_letter": "D" },
+  { "code": "513400", "name": "凉山彝族自治州", "pinyin": "liangshanyizuzizhizhou", "zip_code": "615000", "parent_code": "510000", "type": 1, "first_letter": "L" },
+  { "code": "513401", "name": "西昌市", "pinyin": "xichangshi", "zip_code": "615000", "parent_code": "513400", "type": 2, "first_letter": "X" },
+  { "code": "513402", "name": "会理市", "pinyin": "huilishi", "zip_code": "615100", "parent_code": "513400", "type": 2, "first_letter": "H" },
+  { "code": "513422", "name": "木里藏族自治县", "pinyin": "mulizangzuzizhixian", "zip_code": "615800", "parent_code": "513400", "type": 2, "first_letter": "M" },
+  { "code": "513423", "name": "盐源县", "pinyin": "yanyuanxian", "zip_code": "615700", "parent_code": "513400", "type": 2, "first_letter": "Y" },
+  { "code": "513424", "name": "德昌县", "pinyin": "dechangxian", "zip_code": "615500", "parent_code": "513400", "type": 2, "first_letter": "D" },
+  { "code": "513426", "name": "会东县", "pinyin": "huidongxian", "zip_code": "615200", "parent_code": "513400", "type": 2, "first_letter": "H" },
+  { "code": "513427", "name": "宁南县", "pinyin": "ningnanxian", "zip_code": "615400", "parent_code": "513400", "type": 2, "first_letter": "N" },
+  { "code": "513428", "name": "普格县", "pinyin": "pugexian", "zip_code": "615300", "parent_code": "513400", "type": 2, "first_letter": "P" },
+  { "code": "513429", "name": "布拖县", "pinyin": "butuoxian", "zip_code": "615350", "parent_code": "513400", "type": 2, "first_letter": "B" },
+  { "code": "513430", "name": "金阳县", "pinyin": "jinyangxian", "zip_code": "616250", "parent_code": "513400", "type": 2, "first_letter": "J" },
+  { "code": "513431", "name": "昭觉县", "pinyin": "zhaojuexian", "zip_code": "616150", "parent_code": "513400", "type": 2, "first_letter": "Z" },
+  { "code": "513432", "name": "喜德县", "pinyin": "xidexian", "zip_code": "616750", "parent_code": "513400", "type": 2, "first_letter": "X" },
+  { "code": "513433", "name": "冕宁县", "pinyin": "mianningxian", "zip_code": "615600", "parent_code": "513400", "type": 2, "first_letter": "M" },
+  { "code": "513434", "name": "越西县", "pinyin": "yuexixian", "zip_code": "616650", "parent_code": "513400", "type": 2, "first_letter": "Y" },
+  { "code": "513435", "name": "甘洛县", "pinyin": "ganluoxian", "zip_code": "616850", "parent_code": "513400", "type": 2, "first_letter": "G" },
+  { "code": "513436", "name": "美姑县", "pinyin": "meiguxian", "zip_code": "616450", "parent_code": "513400", "type": 2, "first_letter": "M" },
+  { "code": "513437", "name": "雷波县", "pinyin": "leiboxian", "zip_code": "616550", "parent_code": "513400", "type": 2, "first_letter": "L" },
+  { "code": "520000", "name": "贵州省", "pinyin": "guizhousheng", "zip_code": "0", "type": 0, "first_letter": "G" },
+  { "code": "520100", "name": "贵阳市", "pinyin": "guiyangshi", "zip_code": "550000", "parent_code": "520000", "type": 1, "first_letter": "G" },
+  { "code": "520102", "name": "南明区", "pinyin": "nanmingqu", "zip_code": "550001", "parent_code": "520100", "type": 2, "first_letter": "N" },
+  { "code": "520103", "name": "云岩区", "pinyin": "yunyanqu", "zip_code": "550001", "parent_code": "520100", "type": 2, "first_letter": "Y" },
+  { "code": "520111", "name": "花溪区", "pinyin": "huaxiqu", "zip_code": "550025", "parent_code": "520100", "type": 2, "first_letter": "H" },
+  { "code": "520112", "name": "乌当区", "pinyin": "wudangqu", "zip_code": "550018", "parent_code": "520100", "type": 2, "first_letter": "W" },
+  { "code": "520113", "name": "白云区", "pinyin": "baiyunqu", "zip_code": "550014", "parent_code": "520100", "type": 2, "first_letter": "B" },
+  { "code": "520115", "name": "观山湖区", "pinyin": "guanshanhuqu", "zip_code": "550009", "parent_code": "520100", "type": 2, "first_letter": "G" },
+  { "code": "520121", "name": "开阳县", "pinyin": "kaiyangxian", "zip_code": "550300", "parent_code": "520100", "type": 2, "first_letter": "K" },
+  { "code": "520122", "name": "息烽县", "pinyin": "xifengxian", "zip_code": "551100", "parent_code": "520100", "type": 2, "first_letter": "X" },
+  { "code": "520123", "name": "修文县", "pinyin": "xiuwenxian", "zip_code": "550200", "parent_code": "520100", "type": 2, "first_letter": "X" },
+  { "code": "520181", "name": "清镇市", "pinyin": "qingzhenshi", "zip_code": "551400", "parent_code": "520100", "type": 2, "first_letter": "Q" },
+  { "code": "520200", "name": "六盘水市", "pinyin": "liupanshuishi", "zip_code": "553000", "parent_code": "520000", "type": 1, "first_letter": "L" },
+  { "code": "520201", "name": "钟山区", "pinyin": "zhongshanqu", "zip_code": "553000", "parent_code": "520200", "type": 2, "first_letter": "Z" },
+  { "code": "520203", "name": "六枝特区", "pinyin": "liuzhitequ", "zip_code": "553400", "parent_code": "520200", "type": 2, "first_letter": "L" },
+  { "code": "520221", "name": "水城县", "pinyin": "shuichengxian", "zip_code": "553000", "parent_code": "520200", "type": 2, "first_letter": "S" },
+  { "code": "520281", "name": "盘州市", "pinyin": "panzhoushi", "zip_code": "561601", "parent_code": "520200", "type": 2, "first_letter": "P" },
+  { "code": "520300", "name": "遵义市", "pinyin": "zunyishi", "zip_code": "563000", "parent_code": "520000", "type": 1, "first_letter": "Z" },
+  { "code": "520302", "name": "红花岗区", "pinyin": "honghuagangqu", "zip_code": "563000", "parent_code": "520300", "type": 2, "first_letter": "H" },
+  { "code": "520303", "name": "汇川区", "pinyin": "huichuanqu", "zip_code": "563000", "parent_code": "520300", "type": 2, "first_letter": "H" },
+  { "code": "520304", "name": "播州区", "pinyin": "bozhouqu", "zip_code": "563000", "parent_code": "520300", "type": 2, "first_letter": "B" },
+  { "code": "520322", "name": "桐梓县", "pinyin": "tongzixian", "zip_code": "563200", "parent_code": "520300", "type": 2, "first_letter": "T" },
+  { "code": "520323", "name": "绥阳县", "pinyin": "suiyangxian", "zip_code": "563300", "parent_code": "520300", "type": 2, "first_letter": "S" },
+  { "code": "520324", "name": "正安县", "pinyin": "zhenganxian", "zip_code": "563400", "parent_code": "520300", "type": 2, "first_letter": "Z" },
+  { "code": "520325", "name": "道真仡佬族苗族自治县", "pinyin": "daozhengelaozumiaozuzizhixian", "zip_code": "563500", "parent_code": "520300", "type": 2, "first_letter": "D" },
+  { "code": "520326", "name": "务川仡佬族苗族自治县", "pinyin": "wuchuangelaozumiaozuzizhixian", "zip_code": "564300", "parent_code": "520300", "type": 2, "first_letter": "W" },
+  { "code": "520327", "name": "凤冈县", "pinyin": "fenggangxian", "zip_code": "564200", "parent_code": "520300", "type": 2, "first_letter": "F" },
+  { "code": "520328", "name": "湄潭县", "pinyin": "meitanxian", "zip_code": "564100", "parent_code": "520300", "type": 2, "first_letter": "M" },
+  { "code": "520329", "name": "余庆县", "pinyin": "yuqingxian", "zip_code": "564400", "parent_code": "520300", "type": 2, "first_letter": "Y" },
+  { "code": "520330", "name": "习水县", "pinyin": "xishuixian", "zip_code": "564600", "parent_code": "520300", "type": 2, "first_letter": "X" },
+  { "code": "520381", "name": "赤水市", "pinyin": "chishuishi", "zip_code": "564700", "parent_code": "520300", "type": 2, "first_letter": "C" },
+  { "code": "520382", "name": "仁怀市", "pinyin": "renhuaishi", "zip_code": "564500", "parent_code": "520300", "type": 2, "first_letter": "R" },
+  { "code": "520400", "name": "安顺市", "pinyin": "anshunshi", "zip_code": "561000", "parent_code": "520000", "type": 1, "first_letter": "A" },
+  { "code": "520402", "name": "西秀区", "pinyin": "xixiuqu", "zip_code": "561000", "parent_code": "520400", "type": 2, "first_letter": "X" },
+  { "code": "520403", "name": "平坝区", "pinyin": "pingbaqu", "zip_code": "561100", "parent_code": "520400", "type": 2, "first_letter": "P" },
+  { "code": "520422", "name": "普定县", "pinyin": "pudingxian", "zip_code": "562100", "parent_code": "520400", "type": 2, "first_letter": "P" },
+  { "code": "520423", "name": "镇宁布依族苗族自治县", "pinyin": "zhenningbuyizumiaozuzizhixian", "zip_code": "561200", "parent_code": "520400", "type": 2, "first_letter": "Z" },
+  { "code": "520424", "name": "关岭布依族苗族自治县", "pinyin": "guanlingbuyizumiaozuzizhixian", "zip_code": "561300", "parent_code": "520400", "type": 2, "first_letter": "G" },
+  { "code": "520425", "name": "紫云苗族布依族自治县", "pinyin": "ziyunmiaozubuyizuzizhixian", "zip_code": "550800", "parent_code": "520400", "type": 2, "first_letter": "Z" },
+  { "code": "520500", "name": "毕节市", "pinyin": "bijieshi", "zip_code": "551700", "parent_code": "520000", "type": 1, "first_letter": "B" },
+  { "code": "520502", "name": "七星关区", "pinyin": "qixingguanqu", "zip_code": "551700", "parent_code": "520500", "type": 2, "first_letter": "Q" },
+  { "code": "520521", "name": "大方县", "pinyin": "dafangxian", "zip_code": "551600", "parent_code": "520500", "type": 2, "first_letter": "D" },
+  { "code": "520523", "name": "金沙县", "pinyin": "jinshaxian", "zip_code": "551800", "parent_code": "520500", "type": 2, "first_letter": "J" },
+  { "code": "520524", "name": "织金县", "pinyin": "zhijinxian", "zip_code": "552100", "parent_code": "520500", "type": 2, "first_letter": "Z" },
+  { "code": "520525", "name": "纳雍县", "pinyin": "nayongxian", "zip_code": "553300", "parent_code": "520500", "type": 2, "first_letter": "N" },
+  { "code": "520526", "name": "威宁彝族回族苗族自治县", "pinyin": "weiningyizuhuizumiaozuzizhixian", "zip_code": "553100", "parent_code": "520500", "type": 2, "first_letter": "W" },
+  { "code": "520527", "name": "赫章县", "pinyin": "hezhangxian", "zip_code": "553200", "parent_code": "520500", "type": 2, "first_letter": "H" },
+  { "code": "520581", "name": "黔西市", "pinyin": "qianxishi", "zip_code": "551500", "parent_code": "520500", "type": 2, "first_letter": "Q" },
+  { "code": "520600", "name": "铜仁市", "pinyin": "tongrenshi", "zip_code": "554300", "parent_code": "520000", "type": 1, "first_letter": "T" },
+  { "code": "520602", "name": "碧江区", "pinyin": "bijiangqu", "zip_code": "554300", "parent_code": "520600", "type": 2, "first_letter": "B" },
+  { "code": "520603", "name": "万山区", "pinyin": "wanshanqu", "zip_code": "554300", "parent_code": "520600", "type": 2, "first_letter": "W" },
+  { "code": "520621", "name": "江口县", "pinyin": "jiangkouxian", "zip_code": "554400", "parent_code": "520600", "type": 2, "first_letter": "J" },
+  { "code": "520622", "name": "玉屏侗族自治县", "pinyin": "yupingtongzuzizhixian", "zip_code": "554004", "parent_code": "520600", "type": 2, "first_letter": "Y" },
+  { "code": "520623", "name": "石阡县", "pinyin": "shiqianxian", "zip_code": "555100", "parent_code": "520600", "type": 2, "first_letter": "S" },
+  { "code": "520624", "name": "思南县", "pinyin": "sinanxian", "zip_code": "565100", "parent_code": "520600", "type": 2, "first_letter": "S" },
+  { "code": "520625", "name": "印江土家族苗族自治县", "pinyin": "yinjiangtujiazumiaozuzizhixian", "zip_code": "555200", "parent_code": "520600", "type": 2, "first_letter": "Y" },
+  { "code": "520626", "name": "德江县", "pinyin": "dejiangxian", "zip_code": "565200", "parent_code": "520600", "type": 2, "first_letter": "D" },
+  { "code": "520627", "name": "沿河土家族自治县", "pinyin": "yanhetujiazuzizhixian", "zip_code": "565300", "parent_code": "520600", "type": 2, "first_letter": "Y" },
+  { "code": "520628", "name": "松桃苗族自治县", "pinyin": "songtaomiaozuzizhixian", "zip_code": "554100", "parent_code": "520600", "type": 2, "first_letter": "S" },
+  { "code": "522300", "name": "黔西南布依族苗族自治州", "pinyin": "qianxinanbuyizumiaozuzizhizhou", "zip_code": "562400", "parent_code": "520000", "type": 1, "first_letter": "Q" },
+  { "code": "522301", "name": "兴义市", "pinyin": "xingyishi", "zip_code": "562400", "parent_code": "522300", "type": 2, "first_letter": "X" },
+  { "code": "522322", "name": "兴仁县", "pinyin": "xingrenxian", "zip_code": "562300", "parent_code": "522300", "type": 2, "first_letter": "X" },
+  { "code": "522323", "name": "普安县", "pinyin": "puanxian", "zip_code": "561500", "parent_code": "522300", "type": 2, "first_letter": "P" },
+  { "code": "522324", "name": "晴隆县", "pinyin": "qinglongxian", "zip_code": "561400", "parent_code": "522300", "type": 2, "first_letter": "Q" },
+  { "code": "522325", "name": "贞丰县", "pinyin": "zhenfengxian", "zip_code": "562200", "parent_code": "522300", "type": 2, "first_letter": "Z" },
+  { "code": "522326", "name": "望谟县", "pinyin": "wangmoxian", "zip_code": "552300", "parent_code": "522300", "type": 2, "first_letter": "W" },
+  { "code": "522327", "name": "册亨县", "pinyin": "cehengxian", "zip_code": "552200", "parent_code": "522300", "type": 2, "first_letter": "C" },
+  { "code": "522328", "name": "安龙县", "pinyin": "anlongxian", "zip_code": "552400", "parent_code": "522300", "type": 2, "first_letter": "A" },
+  { "code": "522600", "name": "黔东南苗族侗族自治州", "pinyin": "qiandongnanmiaozutongzuzizhizhou", "zip_code": "556000", "parent_code": "520000", "type": 1, "first_letter": "Q" },
+  { "code": "522601", "name": "凯里市", "pinyin": "kailishi", "zip_code": "556000", "parent_code": "522600", "type": 2, "first_letter": "K" },
+  { "code": "522622", "name": "黄平县", "pinyin": "huangpingxian", "zip_code": "556100", "parent_code": "522600", "type": 2, "first_letter": "H" },
+  { "code": "522623", "name": "施秉县", "pinyin": "shibingxian", "zip_code": "556200", "parent_code": "522600", "type": 2, "first_letter": "S" },
+  { "code": "522624", "name": "三穗县", "pinyin": "sansuixian", "zip_code": "556500", "parent_code": "522600", "type": 2, "first_letter": "S" },
+  { "code": "522625", "name": "镇远县", "pinyin": "zhenyuanxian", "zip_code": "557700", "parent_code": "522600", "type": 2, "first_letter": "Z" },
+  { "code": "522626", "name": "岑巩县", "pinyin": "cengongxian", "zip_code": "557800", "parent_code": "522600", "type": 2, "first_letter": "C" },
+  { "code": "522627", "name": "天柱县", "pinyin": "tianzhuxian", "zip_code": "556600", "parent_code": "522600", "type": 2, "first_letter": "T" },
+  { "code": "522628", "name": "锦屏县", "pinyin": "jinpingxian", "zip_code": "556700", "parent_code": "522600", "type": 2, "first_letter": "J" },
+  { "code": "522629", "name": "剑河县", "pinyin": "jianhexian", "zip_code": "556400", "parent_code": "522600", "type": 2, "first_letter": "J" },
+  { "code": "522630", "name": "台江县", "pinyin": "taijiangxian", "zip_code": "556300", "parent_code": "522600", "type": 2, "first_letter": "T" },
+  { "code": "522631", "name": "黎平县", "pinyin": "lipingxian", "zip_code": "557300", "parent_code": "522600", "type": 2, "first_letter": "L" },
+  { "code": "522632", "name": "榕江县", "pinyin": "rongjiangxian", "zip_code": "557200", "parent_code": "522600", "type": 2, "first_letter": "R" },
+  { "code": "522633", "name": "从江县", "pinyin": "congjiangxian", "zip_code": "557400", "parent_code": "522600", "type": 2, "first_letter": "C" },
+  { "code": "522634", "name": "雷山县", "pinyin": "leishanxian", "zip_code": "557100", "parent_code": "522600", "type": 2, "first_letter": "L" },
+  { "code": "522635", "name": "麻江县", "pinyin": "majiangxian", "zip_code": "557600", "parent_code": "522600", "type": 2, "first_letter": "M" },
+  { "code": "522636", "name": "丹寨县", "pinyin": "danzhaixian", "zip_code": "557500", "parent_code": "522600", "type": 2, "first_letter": "D" },
+  { "code": "522700", "name": "黔南布依族苗族自治州", "pinyin": "qiannanbuyizumiaozuzizhizhou", "zip_code": "558000", "parent_code": "520000", "type": 1, "first_letter": "Q" },
+  { "code": "522701", "name": "都匀市", "pinyin": "duyunshi", "zip_code": "558000", "parent_code": "522700", "type": 2, "first_letter": "D" },
+  { "code": "522702", "name": "福泉市", "pinyin": "fuquanshi", "zip_code": "550500", "parent_code": "522700", "type": 2, "first_letter": "F" },
+  { "code": "522722", "name": "荔波县", "pinyin": "liboxian", "zip_code": "558400", "parent_code": "522700", "type": 2, "first_letter": "L" },
+  { "code": "522723", "name": "贵定县", "pinyin": "guidingxian", "zip_code": "551300", "parent_code": "522700", "type": 2, "first_letter": "G" },
+  { "code": "522725", "name": "瓮安县", "pinyin": "wenganxian", "zip_code": "550400", "parent_code": "522700", "type": 2, "first_letter": "W" },
+  { "code": "522726", "name": "独山县", "pinyin": "dushanxian", "zip_code": "558200", "parent_code": "522700", "type": 2, "first_letter": "D" },
+  { "code": "522727", "name": "平塘县", "pinyin": "pingtangxian", "zip_code": "558300", "parent_code": "522700", "type": 2, "first_letter": "P" },
+  { "code": "522728", "name": "罗甸县", "pinyin": "luodianxian", "zip_code": "550100", "parent_code": "522700", "type": 2, "first_letter": "L" },
+  { "code": "522729", "name": "长顺县", "pinyin": "changshunxian", "zip_code": "550700", "parent_code": "522700", "type": 2, "first_letter": "C" },
+  { "code": "522730", "name": "龙里县", "pinyin": "longlixian", "zip_code": "551200", "parent_code": "522700", "type": 2, "first_letter": "L" },
+  { "code": "522731", "name": "惠水县", "pinyin": "huishuixian", "zip_code": "550600", "parent_code": "522700", "type": 2, "first_letter": "H" },
+  { "code": "522732", "name": "三都水族自治县", "pinyin": "sandushuizuzizhixian", "zip_code": "558100", "parent_code": "522700", "type": 2, "first_letter": "S" },
+  { "code": "530000", "name": "云南省", "pinyin": "yunnansheng", "zip_code": "0", "type": 0, "first_letter": "Y" },
+  { "code": "530100", "name": "昆明市", "pinyin": "kunmingshi", "zip_code": "650000", "parent_code": "530000", "type": 1, "first_letter": "K" },
+  { "code": "530102", "name": "五华区", "pinyin": "wuhuaqu", "zip_code": "650032", "parent_code": "530100", "type": 2, "first_letter": "W" },
+  { "code": "530103", "name": "盘龙区", "pinyin": "panlongqu", "zip_code": "650051", "parent_code": "530100", "type": 2, "first_letter": "P" },
+  { "code": "530111", "name": "官渡区", "pinyin": "guanduqu", "zip_code": "650217", "parent_code": "530100", "type": 2, "first_letter": "G" },
+  { "code": "530112", "name": "西山区", "pinyin": "xishanqu", "zip_code": "650100", "parent_code": "530100", "type": 2, "first_letter": "X" },
+  { "code": "530113", "name": "东川区", "pinyin": "dongchuanqu", "zip_code": "654100", "parent_code": "530100", "type": 2, "first_letter": "D" },
+  { "code": "530114", "name": "呈贡区", "pinyin": "chenggongqu", "zip_code": "650000", "parent_code": "530100", "type": 2, "first_letter": "C" },
+  { "code": "530115", "name": "晋宁区", "pinyin": "jinningqu", "zip_code": "650600", "parent_code": "530100", "type": 2, "first_letter": "J" },
+  { "code": "530124", "name": "富民县", "pinyin": "fuminxian", "zip_code": "650400", "parent_code": "530100", "type": 2, "first_letter": "F" },
+  { "code": "530125", "name": "宜良县", "pinyin": "yiliangxian", "zip_code": "652100", "parent_code": "530100", "type": 2, "first_letter": "Y" },
+  { "code": "530126", "name": "石林彝族自治县", "pinyin": "shilinyizuzizhixian", "zip_code": "652200", "parent_code": "530100", "type": 2, "first_letter": "S" },
+  { "code": "530127", "name": "嵩明县", "pinyin": "songmingxian", "zip_code": "651700", "parent_code": "530100", "type": 2, "first_letter": "S" },
+  { "code": "530128", "name": "禄劝彝族苗族自治县", "pinyin": "luquanyizumiaozuzizhixian", "zip_code": "651500", "parent_code": "530100", "type": 2, "first_letter": "L" },
+  { "code": "530129", "name": "寻甸回族彝族自治县", "pinyin": "xundianhuizuyizuzizhixian", "zip_code": "655200", "parent_code": "530100", "type": 2, "first_letter": "X" },
+  { "code": "530181", "name": "安宁市", "pinyin": "anningshi", "zip_code": "650300", "parent_code": "530100", "type": 2, "first_letter": "A" },
+  { "code": "530300", "name": "曲靖市", "pinyin": "qujingshi", "zip_code": "655000", "parent_code": "530000", "type": 1, "first_letter": "Q" },
+  { "code": "530302", "name": "麒麟区", "pinyin": "qilinqu", "zip_code": "655000", "parent_code": "530300", "type": 2, "first_letter": "Q" },
+  { "code": "530303", "name": "沾益区", "pinyin": "zhanyiqu", "zip_code": "655331", "parent_code": "530300", "type": 2, "first_letter": "Z" },
+  { "code": "530321", "name": "马龙县", "pinyin": "malongxian", "zip_code": "655100", "parent_code": "530300", "type": 2, "first_letter": "M" },
+  { "code": "530322", "name": "陆良县", "pinyin": "luliangxian", "zip_code": "655600", "parent_code": "530300", "type": 2, "first_letter": "L" },
+  { "code": "530323", "name": "师宗县", "pinyin": "shizongxian", "zip_code": "655700", "parent_code": "530300", "type": 2, "first_letter": "S" },
+  { "code": "530324", "name": "罗平县", "pinyin": "luopingxian", "zip_code": "655800", "parent_code": "530300", "type": 2, "first_letter": "L" },
+  { "code": "530325", "name": "富源县", "pinyin": "fuyuanxian", "zip_code": "655500", "parent_code": "530300", "type": 2, "first_letter": "F" },
+  { "code": "530326", "name": "会泽县", "pinyin": "huizexian", "zip_code": "654200", "parent_code": "530300", "type": 2, "first_letter": "H" },
+  { "code": "530381", "name": "宣威市", "pinyin": "xuanweishi", "zip_code": "655400", "parent_code": "530300", "type": 2, "first_letter": "X" },
+  { "code": "530400", "name": "玉溪市", "pinyin": "yuxishi", "zip_code": "653100", "parent_code": "530000", "type": 1, "first_letter": "Y" },
+  { "code": "530402", "name": "红塔区", "pinyin": "hongtaqu", "zip_code": "653100", "parent_code": "530400", "type": 2, "first_letter": "H" },
+  { "code": "530403", "name": "江川区", "pinyin": "jiangchuanqu", "zip_code": "652600", "parent_code": "530400", "type": 2, "first_letter": "J" },
+  { "code": "530422", "name": "澄江县", "pinyin": "chengjiangxian", "zip_code": "652500", "parent_code": "530400", "type": 2, "first_letter": "C" },
+  { "code": "530423", "name": "通海县", "pinyin": "tonghaixian", "zip_code": "652700", "parent_code": "530400", "type": 2, "first_letter": "T" },
+  { "code": "530424", "name": "华宁县", "pinyin": "huaningxian", "zip_code": "652800", "parent_code": "530400", "type": 2, "first_letter": "H" },
+  { "code": "530425", "name": "易门县", "pinyin": "yimenxian", "zip_code": "651100", "parent_code": "530400", "type": 2, "first_letter": "Y" },
+  { "code": "530426", "name": "峨山彝族自治县", "pinyin": "eshanyizuzizhixian", "zip_code": "653200", "parent_code": "530400", "type": 2, "first_letter": "E" },
+  { "code": "530427", "name": "新平彝族傣族自治县", "pinyin": "xinpingyizudaizuzizhixian", "zip_code": "653400", "parent_code": "530400", "type": 2, "first_letter": "X" },
+  { "code": "530428", "name": "元江哈尼族彝族傣族自治县", "pinyin": "yuanjianghanizuyizudaizuzizhixian", "zip_code": "653300", "parent_code": "530400", "type": 2, "first_letter": "Y" },
+  { "code": "530500", "name": "保山市", "pinyin": "baoshanshi", "zip_code": "678000", "parent_code": "530000", "type": 1, "first_letter": "B" },
+  { "code": "530502", "name": "隆阳区", "pinyin": "longyangqu", "zip_code": "678000", "parent_code": "530500", "type": 2, "first_letter": "L" },
+  { "code": "530521", "name": "施甸县", "pinyin": "shidianxian", "zip_code": "678200", "parent_code": "530500", "type": 2, "first_letter": "S" },
+  { "code": "530523", "name": "龙陵县", "pinyin": "longlingxian", "zip_code": "678300", "parent_code": "530500", "type": 2, "first_letter": "L" },
+  { "code": "530524", "name": "昌宁县", "pinyin": "changningxian", "zip_code": "678100", "parent_code": "530500", "type": 2, "first_letter": "C" },
+  { "code": "530581", "name": "腾冲市", "pinyin": "tengchongshi", "zip_code": "679100", "parent_code": "530500", "type": 2, "first_letter": "T" },
+  { "code": "530600", "name": "昭通市", "pinyin": "zhaotongshi", "zip_code": "657000", "parent_code": "530000", "type": 1, "first_letter": "Z" },
+  { "code": "530602", "name": "昭阳区", "pinyin": "zhaoyangqu", "zip_code": "657000", "parent_code": "530600", "type": 2, "first_letter": "Z" },
+  { "code": "530621", "name": "鲁甸县", "pinyin": "ludianxian", "zip_code": "657100", "parent_code": "530600", "type": 2, "first_letter": "L" },
+  { "code": "530622", "name": "巧家县", "pinyin": "qiaojiaxian", "zip_code": "654600", "parent_code": "530600", "type": 2, "first_letter": "Q" },
+  { "code": "530623", "name": "盐津县", "pinyin": "yanjinxian", "zip_code": "657500", "parent_code": "530600", "type": 2, "first_letter": "Y" },
+  { "code": "530624", "name": "大关县", "pinyin": "daguanxian", "zip_code": "657400", "parent_code": "530600", "type": 2, "first_letter": "D" },
+  { "code": "530625", "name": "永善县", "pinyin": "yongshanxian", "zip_code": "657300", "parent_code": "530600", "type": 2, "first_letter": "Y" },
+  { "code": "530626", "name": "绥江县", "pinyin": "suijiangxian", "zip_code": "657700", "parent_code": "530600", "type": 2, "first_letter": "S" },
+  { "code": "530627", "name": "镇雄县", "pinyin": "zhenxiongxian", "zip_code": "657200", "parent_code": "530600", "type": 2, "first_letter": "Z" },
+  { "code": "530628", "name": "彝良县", "pinyin": "yiliangxian", "zip_code": "657600", "parent_code": "530600", "type": 2, "first_letter": "Y" },
+  { "code": "530629", "name": "威信县", "pinyin": "weixinxian", "zip_code": "657900", "parent_code": "530600", "type": 2, "first_letter": "W" },
+  { "code": "530630", "name": "水富县", "pinyin": "shuifuxian", "zip_code": "657800", "parent_code": "530600", "type": 2, "first_letter": "S" },
+  { "code": "530700", "name": "丽江市", "pinyin": "lijiangshi", "zip_code": "674100", "parent_code": "530000", "type": 1, "first_letter": "L" },
+  { "code": "530702", "name": "古城区", "pinyin": "guchengqu", "zip_code": "674100", "parent_code": "530700", "type": 2, "first_letter": "G" },
+  { "code": "530721", "name": "玉龙纳西族自治县", "pinyin": "yulongnaxizuzizhixian", "zip_code": "674100", "parent_code": "530700", "type": 2, "first_letter": "Y" },
+  { "code": "530722", "name": "永胜县", "pinyin": "yongshengxian", "zip_code": "674200", "parent_code": "530700", "type": 2, "first_letter": "Y" },
+  { "code": "530723", "name": "华坪县", "pinyin": "huapingxian", "zip_code": "674800", "parent_code": "530700", "type": 2, "first_letter": "H" },
+  { "code": "530724", "name": "宁蒗彝族自治县", "pinyin": "ninglangyizuzizhixian", "zip_code": "674300", "parent_code": "530700", "type": 2, "first_letter": "N" },
+  { "code": "530800", "name": "普洱市", "pinyin": "puershi", "zip_code": "0", "parent_code": "530000", "type": 1, "first_letter": "P" },
+  { "code": "530802", "name": "思茅区", "pinyin": "simaoqu", "zip_code": "665000", "parent_code": "530800", "type": 2, "first_letter": "S" },
+  { "code": "530821", "name": "宁洱哈尼族彝族自治县", "pinyin": "ningerhanizuyizuzizhixian", "zip_code": "665100", "parent_code": "530800", "type": 2, "first_letter": "N" },
+  { "code": "530822", "name": "墨江哈尼族自治县", "pinyin": "mojianghanizuzizhixian", "zip_code": "654800", "parent_code": "530800", "type": 2, "first_letter": "M" },
+  { "code": "530823", "name": "景东彝族自治县", "pinyin": "jingdongyizuzizhixian", "zip_code": "676200", "parent_code": "530800", "type": 2, "first_letter": "J" },
+  { "code": "530824", "name": "景谷傣族彝族自治县", "pinyin": "jinggudaizuyizuzizhixian", "zip_code": "666400", "parent_code": "530800", "type": 2, "first_letter": "J" },
+  { "code": "530825", "name": "镇沅彝族哈尼族拉祜族自治县", "pinyin": "zhenyuanyizuhanizulahuzuzizhixian", "zip_code": "666500", "parent_code": "530800", "type": 2, "first_letter": "Z" },
+  { "code": "530826", "name": "江城哈尼族彝族自治县", "pinyin": "jiangchenghanizuyizuzizhixian", "zip_code": "665900", "parent_code": "530800", "type": 2, "first_letter": "J" },
+  { "code": "530827", "name": "孟连傣族拉祜族佤族自治县", "pinyin": "mengliandaizulahuzuwazuzizhixian", "zip_code": "665800", "parent_code": "530800", "type": 2, "first_letter": "M" },
+  { "code": "530828", "name": "澜沧拉祜族自治县", "pinyin": "lancanglahuzuzizhixian", "zip_code": "665600", "parent_code": "530800", "type": 2, "first_letter": "L" },
+  { "code": "530829", "name": "西盟佤族自治县", "pinyin": "ximengwazuzizhixian", "zip_code": "665700", "parent_code": "530800", "type": 2, "first_letter": "X" },
+  { "code": "530900", "name": "临沧市", "pinyin": "lincangshi", "zip_code": "677000", "parent_code": "530000", "type": 1, "first_letter": "L" },
+  { "code": "530902", "name": "临翔区", "pinyin": "linxiangqu", "zip_code": "677000", "parent_code": "530900", "type": 2, "first_letter": "L" },
+  { "code": "530921", "name": "凤庆县", "pinyin": "fengqingxian", "zip_code": "675900", "parent_code": "530900", "type": 2, "first_letter": "F" },
+  { "code": "530922", "name": "云县", "pinyin": "yunxian", "zip_code": "675800", "parent_code": "530900", "type": 2, "first_letter": "Y" },
+  { "code": "530923", "name": "永德县", "pinyin": "yongdexian", "zip_code": "677600", "parent_code": "530900", "type": 2, "first_letter": "Y" },
+  { "code": "530924", "name": "镇康县", "pinyin": "zhenkangxian", "zip_code": "677704", "parent_code": "530900", "type": 2, "first_letter": "Z" },
+  { "code": "530925", "name": "双江拉祜族佤族布朗族傣族自治县", "pinyin": "shuangjianglahuzuwazubulangzudaizuzizhixian", "zip_code": "677300", "parent_code": "530900", "type": 2, "first_letter": "S" },
+  { "code": "530926", "name": "耿马傣族佤族自治县", "pinyin": "gengmadaizuwazuzizhixian", "zip_code": "677500", "parent_code": "530900", "type": 2, "first_letter": "G" },
+  { "code": "530927", "name": "沧源佤族自治县", "pinyin": "cangyuanwazuzizhixian", "zip_code": "677400", "parent_code": "530900", "type": 2, "first_letter": "C" },
+  { "code": "532300", "name": "楚雄彝族自治州", "pinyin": "chuxiongyizuzizhizhou", "zip_code": "675000", "parent_code": "530000", "type": 1, "first_letter": "C" },
+  { "code": "532301", "name": "楚雄市", "pinyin": "chuxiongshi", "zip_code": "675000", "parent_code": "532300", "type": 2, "first_letter": "C" },
+  { "code": "532302", "name": "禄丰市", "pinyin": "lufengshi", "zip_code": "651200", "parent_code": "532300", "type": 2, "first_letter": "L" },
+  { "code": "532322", "name": "双柏县", "pinyin": "shuangbaixian", "zip_code": "675100", "parent_code": "532300", "type": 2, "first_letter": "S" },
+  { "code": "532323", "name": "牟定县", "pinyin": "moudingxian", "zip_code": "675500", "parent_code": "532300", "type": 2, "first_letter": "M" },
+  { "code": "532324", "name": "南华县", "pinyin": "nanhuaxian", "zip_code": "675200", "parent_code": "532300", "type": 2, "first_letter": "N" },
+  { "code": "532325", "name": "姚安县", "pinyin": "yaoanxian", "zip_code": "675300", "parent_code": "532300", "type": 2, "first_letter": "Y" },
+  { "code": "532326", "name": "大姚县", "pinyin": "dayaoxian", "zip_code": "675400", "parent_code": "532300", "type": 2, "first_letter": "D" },
+  { "code": "532327", "name": "永仁县", "pinyin": "yongrenxian", "zip_code": "651400", "parent_code": "532300", "type": 2, "first_letter": "Y" },
+  { "code": "532328", "name": "元谋县", "pinyin": "yuanmouxian", "zip_code": "651300", "parent_code": "532300", "type": 2, "first_letter": "Y" },
+  { "code": "532329", "name": "武定县", "pinyin": "wudingxian", "zip_code": "651600", "parent_code": "532300", "type": 2, "first_letter": "W" },
+  { "code": "532500", "name": "红河哈尼族彝族自治州", "pinyin": "honghehanizuyizuzizhizhou", "zip_code": "661400", "parent_code": "530000", "type": 1, "first_letter": "H" },
+  { "code": "532501", "name": "个旧市", "pinyin": "gejiushi", "zip_code": "661000", "parent_code": "532500", "type": 2, "first_letter": "G" },
+  { "code": "532502", "name": "开远市", "pinyin": "kaiyuanshi", "zip_code": "661600", "parent_code": "532500", "type": 2, "first_letter": "K" },
+  { "code": "532503", "name": "蒙自市", "pinyin": "mengzishi", "zip_code": "661400", "parent_code": "532500", "type": 2, "first_letter": "M" },
+  { "code": "532504", "name": "弥勒市", "pinyin": "mileishi", "zip_code": "652399", "parent_code": "532500", "type": 2, "first_letter": "M" },
+  { "code": "532523", "name": "屏边苗族自治县", "pinyin": "pingbianmiaozuzizhixian", "zip_code": "661200", "parent_code": "532500", "type": 2, "first_letter": "P" },
+  { "code": "532524", "name": "建水县", "pinyin": "jianshuixian", "zip_code": "654300", "parent_code": "532500", "type": 2, "first_letter": "J" },
+  { "code": "532525", "name": "石屏县", "pinyin": "shipingxian", "zip_code": "654300", "parent_code": "532500", "type": 2, "first_letter": "S" },
+  { "code": "532527", "name": "泸西县", "pinyin": "luxixian", "zip_code": "652400", "parent_code": "532500", "type": 2, "first_letter": "L" },
+  { "code": "532528", "name": "元阳县", "pinyin": "yuanyangxian", "zip_code": "662400", "parent_code": "532500", "type": 2, "first_letter": "Y" },
+  { "code": "532529", "name": "红河县", "pinyin": "honghexian", "zip_code": "654400", "parent_code": "532500", "type": 2, "first_letter": "H" },
+  { "code": "532530", "name": "金平苗族瑶族傣族自治县", "pinyin": "jinpingmiaozuyaozudaizuzizhixian", "zip_code": "661500", "parent_code": "532500", "type": 2, "first_letter": "J" },
+  { "code": "532531", "name": "绿春县", "pinyin": "lvchunxian", "zip_code": "662500", "parent_code": "532500", "type": 2, "first_letter": "L" },
+  { "code": "532532", "name": "河口瑶族自治县", "pinyin": "hekouyaozuzizhixian", "zip_code": "661300", "parent_code": "532500", "type": 2, "first_letter": "H" },
+  { "code": "532600", "name": "文山壮族苗族自治州", "pinyin": "wenshanzhuangzumiaozuzizhizhou", "zip_code": "663000", "parent_code": "530000", "type": 1, "first_letter": "W" },
+  { "code": "532601", "name": "文山市", "pinyin": "wenshanshi", "zip_code": "663000", "parent_code": "532600", "type": 2, "first_letter": "W" },
+  { "code": "532622", "name": "砚山县", "pinyin": "yanshanxian", "zip_code": "663100", "parent_code": "532600", "type": 2, "first_letter": "Y" },
+  { "code": "532623", "name": "西畴县", "pinyin": "xichouxian", "zip_code": "663500", "parent_code": "532600", "type": 2, "first_letter": "X" },
+  { "code": "532624", "name": "麻栗坡县", "pinyin": "malipoxian", "zip_code": "663600", "parent_code": "532600", "type": 2, "first_letter": "M" },
+  { "code": "532625", "name": "马关县", "pinyin": "maguanxian", "zip_code": "663700", "parent_code": "532600", "type": 2, "first_letter": "M" },
+  { "code": "532626", "name": "丘北县", "pinyin": "qiubeixian", "zip_code": "663200", "parent_code": "532600", "type": 2, "first_letter": "Q" },
+  { "code": "532627", "name": "广南县", "pinyin": "guangnanxian", "zip_code": "663300", "parent_code": "532600", "type": 2, "first_letter": "G" },
+  { "code": "532628", "name": "富宁县", "pinyin": "funingxian", "zip_code": "663400", "parent_code": "532600", "type": 2, "first_letter": "F" },
+  { "code": "532800", "name": "西双版纳傣族自治州", "pinyin": "xishuangbannadaizuzizhizhou", "zip_code": "666100", "parent_code": "530000", "type": 1, "first_letter": "X" },
+  { "code": "532801", "name": "景洪市", "pinyin": "jinghongshi", "zip_code": "666100", "parent_code": "532800", "type": 2, "first_letter": "J" },
+  { "code": "532822", "name": "勐海县", "pinyin": "menghaixian", "zip_code": "666200", "parent_code": "532800", "type": 2, "first_letter": "M" },
+  { "code": "532823", "name": "勐腊县", "pinyin": "menglaxian", "zip_code": "666300", "parent_code": "532800", "type": 2, "first_letter": "M" },
+  { "code": "532900", "name": "大理白族自治州", "pinyin": "dalibaizuzizhizhou", "zip_code": "671000", "parent_code": "530000", "type": 1, "first_letter": "D" },
+  { "code": "532901", "name": "大理市", "pinyin": "dalishi", "zip_code": "671000", "parent_code": "532900", "type": 2, "first_letter": "D" },
+  { "code": "532922", "name": "漾濞彝族自治县", "pinyin": "yangbiyizuzizhixian", "zip_code": "672500", "parent_code": "532900", "type": 2, "first_letter": "Y" },
+  { "code": "532923", "name": "祥云县", "pinyin": "xiangyunxian", "zip_code": "672100", "parent_code": "532900", "type": 2, "first_letter": "X" },
+  { "code": "532924", "name": "宾川县", "pinyin": "binchuanxian", "zip_code": "671600", "parent_code": "532900", "type": 2, "first_letter": "B" },
+  { "code": "532925", "name": "弥渡县", "pinyin": "miduxian", "zip_code": "675600", "parent_code": "532900", "type": 2, "first_letter": "M" },
+  { "code": "532926", "name": "南涧彝族自治县", "pinyin": "nanjianyizuzizhixian", "zip_code": "675700", "parent_code": "532900", "type": 2, "first_letter": "N" },
+  { "code": "532927", "name": "巍山彝族回族自治县", "pinyin": "weishanyizuhuizuzizhixian", "zip_code": "672400", "parent_code": "532900", "type": 2, "first_letter": "W" },
+  { "code": "532928", "name": "永平县", "pinyin": "yongpingxian", "zip_code": "672600", "parent_code": "532900", "type": 2, "first_letter": "Y" },
+  { "code": "532929", "name": "云龙县", "pinyin": "yunlongxian", "zip_code": "672700", "parent_code": "532900", "type": 2, "first_letter": "Y" },
+  { "code": "532930", "name": "洱源县", "pinyin": "eryuanxian", "zip_code": "671200", "parent_code": "532900", "type": 2, "first_letter": "E" },
+  { "code": "532931", "name": "剑川县", "pinyin": "jianchuanxian", "zip_code": "671300", "parent_code": "532900", "type": 2, "first_letter": "J" },
+  { "code": "532932", "name": "鹤庆县", "pinyin": "heqingxian", "zip_code": "671500", "parent_code": "532900", "type": 2, "first_letter": "H" },
+  { "code": "533100", "name": "德宏傣族景颇族自治州", "pinyin": "dehongdaizujingpozuzizhizhou", "zip_code": "678400", "parent_code": "530000", "type": 1, "first_letter": "D" },
+  { "code": "533102", "name": "瑞丽市", "pinyin": "ruilishi", "zip_code": "678600", "parent_code": "533100", "type": 2, "first_letter": "R" },
+  { "code": "533103", "name": "芒市", "pinyin": "mangshi", "zip_code": "678400", "parent_code": "533100", "type": 2, "first_letter": "M" },
+  { "code": "533122", "name": "梁河县", "pinyin": "lianghexian", "zip_code": "679200", "parent_code": "533100", "type": 2, "first_letter": "L" },
+  { "code": "533123", "name": "盈江县", "pinyin": "yingjiangxian", "zip_code": "679300", "parent_code": "533100", "type": 2, "first_letter": "Y" },
+  { "code": "533124", "name": "陇川县", "pinyin": "longchuanxian", "zip_code": "678700", "parent_code": "533100", "type": 2, "first_letter": "L" },
+  { "code": "533300", "name": "怒江傈僳族自治州", "pinyin": "nujianglisuzuzizhizhou", "zip_code": "673100", "parent_code": "530000", "type": 1, "first_letter": "N" },
+  { "code": "533301", "name": "泸水市", "pinyin": "lushuishi", "zip_code": "673100", "parent_code": "533300", "type": 2, "first_letter": "L" },
+  { "code": "533323", "name": "福贡县", "pinyin": "fugongxian", "zip_code": "673400", "parent_code": "533300", "type": 2, "first_letter": "F" },
+  { "code": "533324", "name": "贡山独龙族怒族自治县", "pinyin": "gongshandulongzunuzuzizhixian", "zip_code": "673500", "parent_code": "533300", "type": 2, "first_letter": "G" },
+  { "code": "533325", "name": "兰坪白族普米族自治县", "pinyin": "lanpingbaizupumizuzizhixian", "zip_code": "671400", "parent_code": "533300", "type": 2, "first_letter": "L" },
+  { "code": "533400", "name": "迪庆藏族自治州", "pinyin": "diqingzangzuzizhizhou", "zip_code": "674400", "parent_code": "530000", "type": 1, "first_letter": "D" },
+  { "code": "533401", "name": "香格里拉市", "pinyin": "xianggelilashi", "zip_code": "674400", "parent_code": "533400", "type": 2, "first_letter": "X" },
+  { "code": "533422", "name": "德钦县", "pinyin": "deqinxian", "zip_code": "674500", "parent_code": "533400", "type": 2, "first_letter": "D" },
+  { "code": "533423", "name": "维西傈僳族自治县", "pinyin": "weixilisuzuzizhixian", "zip_code": "674600", "parent_code": "533400", "type": 2, "first_letter": "W" },
+  { "code": "540000", "name": "西藏自治区", "pinyin": "xizangzizhiqu", "zip_code": "0", "type": 0, "first_letter": "X" },
+  { "code": "540100", "name": "拉萨市", "pinyin": "lasashi", "zip_code": "850000", "parent_code": "540000", "type": 1, "first_letter": "L" },
+  { "code": "540102", "name": "城关区", "pinyin": "chengguanqu", "zip_code": "850000", "parent_code": "540100", "type": 2, "first_letter": "C" },
+  { "code": "540103", "name": "堆龙德庆区", "pinyin": "duilongdeqingqu", "zip_code": "851400", "parent_code": "540100", "type": 2, "first_letter": "D" },
+  { "code": "540104", "name": "达孜区", "pinyin": "daziqu", "zip_code": "850100", "parent_code": "540100", "type": 2, "first_letter": "D" },
+  { "code": "540121", "name": "林周县", "pinyin": "linzhouxian", "zip_code": "852000", "parent_code": "540100", "type": 2, "first_letter": "L" },
+  { "code": "540122", "name": "当雄县", "pinyin": "dangxiongxian", "zip_code": "851500", "parent_code": "540100", "type": 2, "first_letter": "D" },
+  { "code": "540123", "name": "尼木县", "pinyin": "nimuxian", "zip_code": "851300", "parent_code": "540100", "type": 2, "first_letter": "N" },
+  { "code": "540124", "name": "曲水县", "pinyin": "qushuixian", "zip_code": "850600", "parent_code": "540100", "type": 2, "first_letter": "Q" },
+  { "code": "540127", "name": "墨竹工卡县", "pinyin": "mozhugongkaxian", "zip_code": "850200", "parent_code": "540100", "type": 2, "first_letter": "M" },
+  { "code": "540200", "name": "日喀则市", "pinyin": "rikazeshi", "zip_code": "857000", "parent_code": "540000", "type": 1, "first_letter": "R" },
+  { "code": "540202", "name": "桑珠孜区", "pinyin": "sangzhuziqu", "zip_code": "857000", "parent_code": "540200", "type": 2, "first_letter": "S" },
+  { "code": "540221", "name": "南木林县", "pinyin": "nanmulinxian", "zip_code": "857100", "parent_code": "540200", "type": 2, "first_letter": "N" },
+  { "code": "540222", "name": "江孜县", "pinyin": "jiangzixian", "zip_code": "857400", "parent_code": "540200", "type": 2, "first_letter": "J" },
+  { "code": "540223", "name": "定日县", "pinyin": "dingrixian", "zip_code": "858200", "parent_code": "540200", "type": 2, "first_letter": "D" },
+  { "code": "540224", "name": "萨迦县", "pinyin": "sajiaxian", "zip_code": "857800", "parent_code": "540200", "type": 2, "first_letter": "S" },
+  { "code": "540225", "name": "拉孜县", "pinyin": "lazixian", "zip_code": "858100", "parent_code": "540200", "type": 2, "first_letter": "L" },
+  { "code": "540226", "name": "昂仁县", "pinyin": "angrenxian", "zip_code": "858500", "parent_code": "540200", "type": 2, "first_letter": "A" },
+  { "code": "540227", "name": "谢通门县", "pinyin": "xietongmenxian", "zip_code": "858900", "parent_code": "540200", "type": 2, "first_letter": "X" },
+  { "code": "540228", "name": "白朗县", "pinyin": "bailangxian", "zip_code": "857300", "parent_code": "540200", "type": 2, "first_letter": "B" },
+  { "code": "540229", "name": "仁布县", "pinyin": "renbuxian", "zip_code": "857200", "parent_code": "540200", "type": 2, "first_letter": "R" },
+  { "code": "540230", "name": "康马县", "pinyin": "kangmaxian", "zip_code": "857500", "parent_code": "540200", "type": 2, "first_letter": "K" },
+  { "code": "540231", "name": "定结县", "pinyin": "dingjiexian", "zip_code": "857900", "parent_code": "540200", "type": 2, "first_letter": "D" },
+  { "code": "540232", "name": "仲巴县", "pinyin": "zhongbaxian", "zip_code": "858800", "parent_code": "540200", "type": 2, "first_letter": "Z" },
+  { "code": "540233", "name": "亚东县", "pinyin": "yadongxian", "zip_code": "857600", "parent_code": "540200", "type": 2, "first_letter": "Y" },
+  { "code": "540234", "name": "吉隆县", "pinyin": "jilongxian", "zip_code": "858700", "parent_code": "540200", "type": 2, "first_letter": "J" },
+  { "code": "540235", "name": "聂拉木县", "pinyin": "nielamuxian", "zip_code": "858300", "parent_code": "540200", "type": 2, "first_letter": "N" },
+  { "code": "540236", "name": "萨嘎县", "pinyin": "sagaxian", "zip_code": "857800", "parent_code": "540200", "type": 2, "first_letter": "S" },
+  { "code": "540237", "name": "岗巴县", "pinyin": "gangbaxian", "zip_code": "857700", "parent_code": "540200", "type": 2, "first_letter": "G" },
+  { "code": "540300", "name": "昌都市", "pinyin": "changdushi", "zip_code": "854000", "parent_code": "540000", "type": 1, "first_letter": "C" },
+  { "code": "540302", "name": "卡若区", "pinyin": "karuoqu", "zip_code": "854000", "parent_code": "540300", "type": 2, "first_letter": "K" },
+  { "code": "540321", "name": "江达县", "pinyin": "jiangdaxian", "zip_code": "854100", "parent_code": "540300", "type": 2, "first_letter": "J" },
+  { "code": "540322", "name": "贡觉县", "pinyin": "gongjuexian", "zip_code": "854200", "parent_code": "540300", "type": 2, "first_letter": "G" },
+  { "code": "540323", "name": "类乌齐县", "pinyin": "leiwuqixian", "zip_code": "855600", "parent_code": "540300", "type": 2, "first_letter": "L" },
+  { "code": "540324", "name": "丁青县", "pinyin": "dingqingxian", "zip_code": "855700", "parent_code": "540300", "type": 2, "first_letter": "D" },
+  { "code": "540325", "name": "察雅县", "pinyin": "chayaxian", "zip_code": "854300", "parent_code": "540300", "type": 2, "first_letter": "C" },
+  { "code": "540326", "name": "八宿县", "pinyin": "basuxian", "zip_code": "854600", "parent_code": "540300", "type": 2, "first_letter": "B" },
+  { "code": "540327", "name": "左贡县", "pinyin": "zuogongxian", "zip_code": "854400", "parent_code": "540300", "type": 2, "first_letter": "Z" },
+  { "code": "540328", "name": "芒康县", "pinyin": "mangkangxian", "zip_code": "854500", "parent_code": "540300", "type": 2, "first_letter": "M" },
+  { "code": "540329", "name": "洛隆县", "pinyin": "luolongxian", "zip_code": "855400", "parent_code": "540300", "type": 2, "first_letter": "L" },
+  { "code": "540330", "name": "边坝县", "pinyin": "bianbaxian", "zip_code": "855500", "parent_code": "540300", "type": 2, "first_letter": "B" },
+  { "code": "540400", "name": "林芝市", "pinyin": "linzhishi", "zip_code": "860000", "parent_code": "540000", "type": 1, "first_letter": "L" },
+  { "code": "540402", "name": "巴宜区", "pinyin": "bayiqu", "zip_code": "850400", "parent_code": "540400", "type": 2, "first_letter": "B" },
+  { "code": "540421", "name": "工布江达县", "pinyin": "gongbujiangdaxian", "zip_code": "850300", "parent_code": "540400", "type": 2, "first_letter": "G" },
+  { "code": "540422", "name": "米林县", "pinyin": "milinxian", "zip_code": "860500", "parent_code": "540400", "type": 2, "first_letter": "M" },
+  { "code": "540423", "name": "墨脱县", "pinyin": "motuoxian", "zip_code": "855300", "parent_code": "540400", "type": 2, "first_letter": "M" },
+  { "code": "540424", "name": "波密县", "pinyin": "bomixian", "zip_code": "855200", "parent_code": "540400", "type": 2, "first_letter": "B" },
+  { "code": "540425", "name": "察隅县", "pinyin": "chayuxian", "zip_code": "855100", "parent_code": "540400", "type": 2, "first_letter": "C" },
+  { "code": "540426", "name": "朗县", "pinyin": "langxian", "zip_code": "856500", "parent_code": "540400", "type": 2, "first_letter": "L" },
+  { "code": "540500", "name": "山南市", "pinyin": "shannanshi", "zip_code": "856000", "parent_code": "540000", "type": 1, "first_letter": "S" },
+  { "code": "540502", "name": "乃东区", "pinyin": "naidongqu", "zip_code": "856100", "parent_code": "540500", "type": 2, "first_letter": "N" },
+  { "code": "540521", "name": "扎囊县", "pinyin": "zhanangxian", "zip_code": "850800", "parent_code": "540500", "type": 2, "first_letter": "Z" },
+  { "code": "540522", "name": "贡嘎县", "pinyin": "gonggaxian", "zip_code": "850700", "parent_code": "540500", "type": 2, "first_letter": "G" },
+  { "code": "540523", "name": "桑日县", "pinyin": "sangrixian", "zip_code": "856200", "parent_code": "540500", "type": 2, "first_letter": "S" },
+  { "code": "540524", "name": "琼结县", "pinyin": "qiongjiexian", "zip_code": "856800", "parent_code": "540500", "type": 2, "first_letter": "Q" },
+  { "code": "540525", "name": "曲松县", "pinyin": "qusongxian", "zip_code": "856300", "parent_code": "540500", "type": 2, "first_letter": "Q" },
+  { "code": "540526", "name": "措美县", "pinyin": "cuomeixian", "zip_code": "856900", "parent_code": "540500", "type": 2, "first_letter": "C" },
+  { "code": "540527", "name": "洛扎县", "pinyin": "luozhaxian", "zip_code": "851200", "parent_code": "540500", "type": 2, "first_letter": "L" },
+  { "code": "540528", "name": "加查县", "pinyin": "jiachaxian", "zip_code": "856400", "parent_code": "540500", "type": 2, "first_letter": "J" },
+  { "code": "540529", "name": "隆子县", "pinyin": "longzixian", "zip_code": "856600", "parent_code": "540500", "type": 2, "first_letter": "L" },
+  { "code": "540530", "name": "错那县", "pinyin": "cuonaxian", "zip_code": "856700", "parent_code": "540500", "type": 2, "first_letter": "C" },
+  { "code": "540531", "name": "浪卡子县", "pinyin": "langkazixian", "zip_code": "851000", "parent_code": "540500", "type": 2, "first_letter": "L" },
+  { "code": "542400", "name": "那曲地区", "pinyin": "naqudiqu", "zip_code": "0", "parent_code": "540000", "type": 1, "first_letter": "N" },
+  { "code": "542421", "name": "那曲县", "pinyin": "naquxian", "zip_code": "852000", "parent_code": "542400", "type": 2, "first_letter": "N" },
+  { "code": "542422", "name": "嘉黎县", "pinyin": "jialixian", "zip_code": "852400", "parent_code": "542400", "type": 2, "first_letter": "J" },
+  { "code": "542423", "name": "比如县", "pinyin": "biruxian", "zip_code": "852300", "parent_code": "542400", "type": 2, "first_letter": "B" },
+  { "code": "542424", "name": "聂荣县", "pinyin": "nierongxian", "zip_code": "853500", "parent_code": "542400", "type": 2, "first_letter": "N" },
+  { "code": "542425", "name": "安多县", "pinyin": "anduoxian", "zip_code": "852600", "parent_code": "542400", "type": 2, "first_letter": "A" },
+  { "code": "542426", "name": "申扎县", "pinyin": "shenzhaxian", "zip_code": "853100", "parent_code": "542400", "type": 2, "first_letter": "S" },
+  { "code": "542427", "name": "索县", "pinyin": "suoxian", "zip_code": "852200", "parent_code": "542400", "type": 2, "first_letter": "S" },
+  { "code": "542428", "name": "班戈县", "pinyin": "bangexian", "zip_code": "852500", "parent_code": "542400", "type": 2, "first_letter": "B" },
+  { "code": "542429", "name": "巴青县", "pinyin": "baqingxian", "zip_code": "852100", "parent_code": "542400", "type": 2, "first_letter": "B" },
+  { "code": "542430", "name": "尼玛县", "pinyin": "nimaxian", "zip_code": "853200", "parent_code": "542400", "type": 2, "first_letter": "N" },
+  { "code": "542431", "name": "双湖县", "pinyin": "shuanghuxian", "zip_code": "853300", "parent_code": "542400", "type": 2, "first_letter": "S" },
+  { "code": "542500", "name": "阿里地区", "pinyin": "alidiqu", "zip_code": "859000", "parent_code": "540000", "type": 1, "first_letter": "A" },
+  { "code": "542521", "name": "普兰县", "pinyin": "pulanxian", "zip_code": "859500", "parent_code": "542500", "type": 2, "first_letter": "P" },
+  { "code": "542522", "name": "札达县", "pinyin": "zhadaxian", "zip_code": "859600", "parent_code": "542500", "type": 2, "first_letter": "Z" },
+  { "code": "542523", "name": "噶尔县", "pinyin": "gaerxian", "zip_code": "859400", "parent_code": "542500", "type": 2, "first_letter": "G" },
+  { "code": "542524", "name": "日土县", "pinyin": "rituxian", "zip_code": "859700", "parent_code": "542500", "type": 2, "first_letter": "R" },
+  { "code": "542525", "name": "革吉县", "pinyin": "gejixian", "zip_code": "859100", "parent_code": "542500", "type": 2, "first_letter": "G" },
+  { "code": "542526", "name": "改则县", "pinyin": "gaizexian", "zip_code": "859200", "parent_code": "542500", "type": 2, "first_letter": "G" },
+  { "code": "542527", "name": "措勤县", "pinyin": "cuoqinxian", "zip_code": "859300", "parent_code": "542500", "type": 2, "first_letter": "C" },
+  { "code": "610000", "name": "陕西省", "pinyin": "shanxisheng", "zip_code": "0", "type": 0, "first_letter": "S" },
+  { "code": "610100", "name": "西安市", "pinyin": "xianshi", "zip_code": "710000", "parent_code": "610000", "type": 1, "first_letter": "X" },
+  { "code": "610102", "name": "新城区", "pinyin": "xinchengqu", "zip_code": "710004", "parent_code": "610100", "type": 2, "first_letter": "X" },
+  { "code": "610103", "name": "碑林区", "pinyin": "beilinqu", "zip_code": "710001", "parent_code": "610100", "type": 2, "first_letter": "B" },
+  { "code": "610104", "name": "莲湖区", "pinyin": "lianhuqu", "zip_code": "710003", "parent_code": "610100", "type": 2, "first_letter": "L" },
+  { "code": "610111", "name": "灞桥区", "pinyin": "baqiaoqu", "zip_code": "710038", "parent_code": "610100", "type": 2, "first_letter": "B" },
+  { "code": "610112", "name": "未央区", "pinyin": "weiyangqu", "zip_code": "710014", "parent_code": "610100", "type": 2, "first_letter": "W" },
+  { "code": "610113", "name": "雁塔区", "pinyin": "yantaqu", "zip_code": "710061", "parent_code": "610100", "type": 2, "first_letter": "Y" },
+  { "code": "610114", "name": "阎良区", "pinyin": "yanliangqu", "zip_code": "710087", "parent_code": "610100", "type": 2, "first_letter": "Y" },
+  { "code": "610115", "name": "临潼区", "pinyin": "lintongqu", "zip_code": "710600", "parent_code": "610100", "type": 2, "first_letter": "L" },
+  { "code": "610116", "name": "长安区", "pinyin": "changanqu", "zip_code": "710100", "parent_code": "610100", "type": 2, "first_letter": "C" },
+  { "code": "610117", "name": "高陵区", "pinyin": "gaolingqu", "zip_code": "710200", "parent_code": "610100", "type": 2, "first_letter": "G" },
+  { "code": "610118", "name": "鄠邑区", "pinyin": "huyiqu", "zip_code": "710300", "parent_code": "610100", "type": 2, "first_letter": "H" },
+  { "code": "610122", "name": "蓝田县", "pinyin": "lantianxian", "zip_code": "710500", "parent_code": "610100", "type": 2, "first_letter": "L" },
+  { "code": "610124", "name": "周至县", "pinyin": "zhouzhixian", "zip_code": "710400", "parent_code": "610100", "type": 2, "first_letter": "Z" },
+  { "code": "610200", "name": "铜川市", "pinyin": "tongchuanshi", "zip_code": "727000", "parent_code": "610000", "type": 1, "first_letter": "T" },
+  { "code": "610202", "name": "王益区", "pinyin": "wangyiqu", "zip_code": "727000", "parent_code": "610200", "type": 2, "first_letter": "W" },
+  { "code": "610203", "name": "印台区", "pinyin": "yintaiqu", "zip_code": "727007", "parent_code": "610200", "type": 2, "first_letter": "Y" },
+  { "code": "610204", "name": "耀州区", "pinyin": "yaozhouqu", "zip_code": "727100", "parent_code": "610200", "type": 2, "first_letter": "Y" },
+  { "code": "610222", "name": "宜君县", "pinyin": "yijunxian", "zip_code": "727200", "parent_code": "610200", "type": 2, "first_letter": "Y" },
+  { "code": "610300", "name": "宝鸡市", "pinyin": "baojishi", "zip_code": "721000", "parent_code": "610000", "type": 1, "first_letter": "B" },
+  { "code": "610302", "name": "渭滨区", "pinyin": "weibinqu", "zip_code": "721000", "parent_code": "610300", "type": 2, "first_letter": "W" },
+  { "code": "610303", "name": "金台区", "pinyin": "jintaiqu", "zip_code": "721000", "parent_code": "610300", "type": 2, "first_letter": "J" },
+  { "code": "610304", "name": "陈仓区", "pinyin": "chencangqu", "zip_code": "721300", "parent_code": "610300", "type": 2, "first_letter": "C" },
+  { "code": "610305", "name": "凤翔区", "pinyin": "fengxiangqu", "zip_code": "721400", "parent_code": "610300", "type": 2, "first_letter": "F" },
+  { "code": "610323", "name": "岐山县", "pinyin": "qishanxian", "zip_code": "722400", "parent_code": "610300", "type": 2, "first_letter": "Q" },
+  { "code": "610324", "name": "扶风县", "pinyin": "fufengxian", "zip_code": "722200", "parent_code": "610300", "type": 2, "first_letter": "F" },
+  { "code": "610326", "name": "眉县", "pinyin": "meixian", "zip_code": "722300", "parent_code": "610300", "type": 2, "first_letter": "M" },
+  { "code": "610327", "name": "陇县", "pinyin": "longxian", "zip_code": "721200", "parent_code": "610300", "type": 2, "first_letter": "L" },
+  { "code": "610328", "name": "千阳县", "pinyin": "qianyangxian", "zip_code": "721100", "parent_code": "610300", "type": 2, "first_letter": "Q" },
+  { "code": "610329", "name": "麟游县", "pinyin": "linyouxian", "zip_code": "721500", "parent_code": "610300", "type": 2, "first_letter": "L" },
+  { "code": "610330", "name": "凤县", "pinyin": "fengxian", "zip_code": "721700", "parent_code": "610300", "type": 2, "first_letter": "F" },
+  { "code": "610331", "name": "太白县", "pinyin": "taibaixian", "zip_code": "721600", "parent_code": "610300", "type": 2, "first_letter": "T" },
+  { "code": "610400", "name": "咸阳市", "pinyin": "xianyangshi", "zip_code": "712000", "parent_code": "610000", "type": 1, "first_letter": "X" },
+  { "code": "610402", "name": "秦都区", "pinyin": "qinduqu", "zip_code": "712000", "parent_code": "610400", "type": 2, "first_letter": "Q" },
+  { "code": "610403", "name": "杨陵区", "pinyin": "yanglingqu", "zip_code": "712100", "parent_code": "610400", "type": 2, "first_letter": "Y" },
+  { "code": "610404", "name": "渭城区", "pinyin": "weichengqu", "zip_code": "712000", "parent_code": "610400", "type": 2, "first_letter": "W" },
+  { "code": "610422", "name": "三原县", "pinyin": "sanyuanxian", "zip_code": "713800", "parent_code": "610400", "type": 2, "first_letter": "S" },
+  { "code": "610423", "name": "泾阳县", "pinyin": "jingyangxian", "zip_code": "713700", "parent_code": "610400", "type": 2, "first_letter": "J" },
+  { "code": "610424", "name": "乾县", "pinyin": "qianxian", "zip_code": "713300", "parent_code": "610400", "type": 2, "first_letter": "Q" },
+  { "code": "610425", "name": "礼泉县", "pinyin": "liquanxian", "zip_code": "713200", "parent_code": "610400", "type": 2, "first_letter": "L" },
+  { "code": "610426", "name": "永寿县", "pinyin": "yongshouxian", "zip_code": "713400", "parent_code": "610400", "type": 2, "first_letter": "Y" },
+  { "code": "610427", "name": "彬州市", "pinyin": "binzhoushi", "zip_code": "713500", "parent_code": "610400", "type": 2, "first_letter": "B" },
+  { "code": "610428", "name": "长武县", "pinyin": "changwuxian", "zip_code": "713600", "parent_code": "610400", "type": 2, "first_letter": "C" },
+  { "code": "610429", "name": "旬邑县", "pinyin": "xunyixian", "zip_code": "711300", "parent_code": "610400", "type": 2, "first_letter": "X" },
+  { "code": "610430", "name": "淳化县", "pinyin": "chunhuaxian", "zip_code": "711200", "parent_code": "610400", "type": 2, "first_letter": "C" },
+  { "code": "610431", "name": "武功县", "pinyin": "wugongxian", "zip_code": "712200", "parent_code": "610400", "type": 2, "first_letter": "W" },
+  { "code": "610481", "name": "兴平市", "pinyin": "xingpingshi", "zip_code": "713100", "parent_code": "610400", "type": 2, "first_letter": "X" },
+  { "code": "610500", "name": "渭南市", "pinyin": "weinanshi", "zip_code": "714000", "parent_code": "610000", "type": 1, "first_letter": "W" },
+  { "code": "610502", "name": "临渭区", "pinyin": "linweiqu", "zip_code": "714000", "parent_code": "610500", "type": 2, "first_letter": "L" },
+  { "code": "610503", "name": "华州区", "pinyin": "huazhouqu", "zip_code": "714100", "parent_code": "610500", "type": 2, "first_letter": "H" },
+  { "code": "610522", "name": "潼关县", "pinyin": "tongguanxian", "zip_code": "714300", "parent_code": "610500", "type": 2, "first_letter": "T" },
+  { "code": "610523", "name": "大荔县", "pinyin": "dalixian", "zip_code": "715100", "parent_code": "610500", "type": 2, "first_letter": "D" },
+  { "code": "610524", "name": "合阳县", "pinyin": "heyangxian", "zip_code": "715300", "parent_code": "610500", "type": 2, "first_letter": "H" },
+  { "code": "610525", "name": "澄城县", "pinyin": "chengchengxian", "zip_code": "715200", "parent_code": "610500", "type": 2, "first_letter": "C" },
+  { "code": "610526", "name": "蒲城县", "pinyin": "puchengxian", "zip_code": "715500", "parent_code": "610500", "type": 2, "first_letter": "P" },
+  { "code": "610527", "name": "白水县", "pinyin": "baishuixian", "zip_code": "715600", "parent_code": "610500", "type": 2, "first_letter": "B" },
+  { "code": "610528", "name": "富平县", "pinyin": "fupingxian", "zip_code": "711700", "parent_code": "610500", "type": 2, "first_letter": "F" },
+  { "code": "610581", "name": "韩城市", "pinyin": "hanchengshi", "zip_code": "715400", "parent_code": "610500", "type": 2, "first_letter": "H" },
+  { "code": "610582", "name": "华阴市", "pinyin": "huayinshi", "zip_code": "714200", "parent_code": "610500", "type": 2, "first_letter": "H" },
+  { "code": "610600", "name": "延安市", "pinyin": "yananshi", "zip_code": "716000", "parent_code": "610000", "type": 1, "first_letter": "Y" },
+  { "code": "610602", "name": "宝塔区", "pinyin": "baotaqu", "zip_code": "716000", "parent_code": "610600", "type": 2, "first_letter": "B" },
+  { "code": "610603", "name": "安塞区", "pinyin": "ansaiqu", "zip_code": "717400", "parent_code": "610600", "type": 2, "first_letter": "A" },
+  { "code": "610621", "name": "延长县", "pinyin": "yanchangxian", "zip_code": "717100", "parent_code": "610600", "type": 2, "first_letter": "Y" },
+  { "code": "610622", "name": "延川县", "pinyin": "yanchuanxian", "zip_code": "717200", "parent_code": "610600", "type": 2, "first_letter": "Y" },
+  { "code": "610623", "name": "子长县", "pinyin": "zichangxian", "zip_code": "717300", "parent_code": "610600", "type": 2, "first_letter": "Z" },
+  { "code": "610625", "name": "志丹县", "pinyin": "zhidanxian", "zip_code": "717500", "parent_code": "610600", "type": 2, "first_letter": "Z" },
+  { "code": "610626", "name": "吴起县", "pinyin": "wuqixian", "zip_code": "716000", "parent_code": "610600", "type": 2, "first_letter": "W" },
+  { "code": "610627", "name": "甘泉县", "pinyin": "ganquanxian", "zip_code": "716100", "parent_code": "610600", "type": 2, "first_letter": "G" },
+  { "code": "610628", "name": "富县", "pinyin": "fuxian", "zip_code": "727500", "parent_code": "610600", "type": 2, "first_letter": "F" },
+  { "code": "610629", "name": "洛川县", "pinyin": "luochuanxian", "zip_code": "727400", "parent_code": "610600", "type": 2, "first_letter": "L" },
+  { "code": "610630", "name": "宜川县", "pinyin": "yichuanxian", "zip_code": "716200", "parent_code": "610600", "type": 2, "first_letter": "Y" },
+  { "code": "610631", "name": "黄龙县", "pinyin": "huanglongxian", "zip_code": "715700", "parent_code": "610600", "type": 2, "first_letter": "H" },
+  { "code": "610632", "name": "黄陵县", "pinyin": "huanglingxian", "zip_code": "727300", "parent_code": "610600", "type": 2, "first_letter": "H" },
+  { "code": "610700", "name": "汉中市", "pinyin": "hanzhongshi", "zip_code": "723000", "parent_code": "610000", "type": 1, "first_letter": "H" },
+  { "code": "610702", "name": "汉台区", "pinyin": "hantaiqu", "zip_code": "723000", "parent_code": "610700", "type": 2, "first_letter": "H" },
+  { "code": "610703", "name": "南郑区", "pinyin": "nanzhengqu", "zip_code": "723100", "parent_code": "610700", "type": 2, "first_letter": "N" },
+  { "code": "610722", "name": "城固县", "pinyin": "chengguxian", "zip_code": "723200", "parent_code": "610700", "type": 2, "first_letter": "C" },
+  { "code": "610723", "name": "洋县", "pinyin": "yangxian", "zip_code": "723300", "parent_code": "610700", "type": 2, "first_letter": "Y" },
+  { "code": "610724", "name": "西乡县", "pinyin": "xixiangxian", "zip_code": "723500", "parent_code": "610700", "type": 2, "first_letter": "X" },
+  { "code": "610725", "name": "勉县", "pinyin": "mianxian", "zip_code": "724200", "parent_code": "610700", "type": 2, "first_letter": "M" },
+  { "code": "610726", "name": "宁强县", "pinyin": "ningqiangxian", "zip_code": "724400", "parent_code": "610700", "type": 2, "first_letter": "N" },
+  { "code": "610727", "name": "略阳县", "pinyin": "lveyangxian", "zip_code": "724300", "parent_code": "610700", "type": 2, "first_letter": "L" },
+  { "code": "610728", "name": "镇巴县", "pinyin": "zhenbaxian", "zip_code": "723600", "parent_code": "610700", "type": 2, "first_letter": "Z" },
+  { "code": "610729", "name": "留坝县", "pinyin": "liubaxian", "zip_code": "724100", "parent_code": "610700", "type": 2, "first_letter": "L" },
+  { "code": "610730", "name": "佛坪县", "pinyin": "fopingxian", "zip_code": "723400", "parent_code": "610700", "type": 2, "first_letter": "F" },
+  { "code": "610800", "name": "榆林市", "pinyin": "yulinshi", "zip_code": "719000", "parent_code": "610000", "type": 1, "first_letter": "Y" },
+  { "code": "610802", "name": "榆阳区", "pinyin": "yuyangqu", "zip_code": "719000", "parent_code": "610800", "type": 2, "first_letter": "Y" },
+  { "code": "610803", "name": "横山区", "pinyin": "hengshanqu", "zip_code": "719100", "parent_code": "610800", "type": 2, "first_letter": "H" },
+  { "code": "610822", "name": "府谷县", "pinyin": "fuguxian", "zip_code": "719400", "parent_code": "610800", "type": 2, "first_letter": "F" },
+  { "code": "610824", "name": "靖边县", "pinyin": "jingbianxian", "zip_code": "718500", "parent_code": "610800", "type": 2, "first_letter": "J" },
+  { "code": "610825", "name": "定边县", "pinyin": "dingbianxian", "zip_code": "718600", "parent_code": "610800", "type": 2, "first_letter": "D" },
+  { "code": "610826", "name": "绥德县", "pinyin": "suidexian", "zip_code": "718000", "parent_code": "610800", "type": 2, "first_letter": "S" },
+  { "code": "610827", "name": "米脂县", "pinyin": "mizhixian", "zip_code": "718100", "parent_code": "610800", "type": 2, "first_letter": "M" },
+  { "code": "610828", "name": "佳县", "pinyin": "jiaxian", "zip_code": "719200", "parent_code": "610800", "type": 2, "first_letter": "J" },
+  { "code": "610829", "name": "吴堡县", "pinyin": "wubaoxian", "zip_code": "718200", "parent_code": "610800", "type": 2, "first_letter": "W" },
+  { "code": "610830", "name": "清涧县", "pinyin": "qingjianxian", "zip_code": "718300", "parent_code": "610800", "type": 2, "first_letter": "Q" },
+  { "code": "610831", "name": "子洲县", "pinyin": "zizhouxian", "zip_code": "718400", "parent_code": "610800", "type": 2, "first_letter": "Z" },
+  { "code": "610881", "name": "神木市", "pinyin": "shenmushi", "zip_code": "719300", "parent_code": "610800", "type": 2, "first_letter": "S" },
+  { "code": "610900", "name": "安康市", "pinyin": "ankangshi", "zip_code": "725000", "parent_code": "610000", "type": 1, "first_letter": "A" },
+  { "code": "610902", "name": "汉滨区", "pinyin": "hanbinqu", "zip_code": "725000", "parent_code": "610900", "type": 2, "first_letter": "H" },
+  { "code": "610921", "name": "汉阴县", "pinyin": "hanyinxian", "zip_code": "725100", "parent_code": "610900", "type": 2, "first_letter": "H" },
+  { "code": "610922", "name": "石泉县", "pinyin": "shiquanxian", "zip_code": "725200", "parent_code": "610900", "type": 2, "first_letter": "S" },
+  { "code": "610923", "name": "宁陕县", "pinyin": "ningshanxian", "zip_code": "711600", "parent_code": "610900", "type": 2, "first_letter": "N" },
+  { "code": "610924", "name": "紫阳县", "pinyin": "ziyangxian", "zip_code": "725300", "parent_code": "610900", "type": 2, "first_letter": "Z" },
+  { "code": "610925", "name": "岚皋县", "pinyin": "langaoxian", "zip_code": "725400", "parent_code": "610900", "type": 2, "first_letter": "L" },
+  { "code": "610926", "name": "平利县", "pinyin": "pinglixian", "zip_code": "725500", "parent_code": "610900", "type": 2, "first_letter": "P" },
+  { "code": "610927", "name": "镇坪县", "pinyin": "zhenpingxian", "zip_code": "725600", "parent_code": "610900", "type": 2, "first_letter": "Z" },
+  { "code": "610929", "name": "白河县", "pinyin": "baihexian", "zip_code": "725800", "parent_code": "610900", "type": 2, "first_letter": "B" },
+  { "code": "610981", "name": "旬阳市", "pinyin": "xunyangshi", "zip_code": "725700", "parent_code": "610900", "type": 2, "first_letter": "X" },
+  { "code": "611000", "name": "商洛市", "pinyin": "shangluoshi", "zip_code": "726000", "parent_code": "610000", "type": 1, "first_letter": "S" },
+  { "code": "611002", "name": "商州区", "pinyin": "shangzhouqu", "zip_code": "726000", "parent_code": "611000", "type": 2, "first_letter": "S" },
+  { "code": "611021", "name": "洛南县", "pinyin": "luonanxian", "zip_code": "726100", "parent_code": "611000", "type": 2, "first_letter": "L" },
+  { "code": "611022", "name": "丹凤县", "pinyin": "danfengxian", "zip_code": "726200", "parent_code": "611000", "type": 2, "first_letter": "D" },
+  { "code": "611023", "name": "商南县", "pinyin": "shangnanxian", "zip_code": "726300", "parent_code": "611000", "type": 2, "first_letter": "S" },
+  { "code": "611024", "name": "山阳县", "pinyin": "shanyangxian", "zip_code": "726400", "parent_code": "611000", "type": 2, "first_letter": "S" },
+  { "code": "611025", "name": "镇安县", "pinyin": "zhenanxian", "zip_code": "711500", "parent_code": "611000", "type": 2, "first_letter": "Z" },
+  { "code": "611026", "name": "柞水县", "pinyin": "zhashuixian", "zip_code": "711400", "parent_code": "611000", "type": 2, "first_letter": "Z" },
+  { "code": "620000", "name": "甘肃省", "pinyin": "gansusheng", "zip_code": "0", "type": 0, "first_letter": "G" },
+  { "code": "620100", "name": "兰州市", "pinyin": "lanzhoushi", "zip_code": "730000", "parent_code": "620000", "type": 1, "first_letter": "L" },
+  { "code": "620102", "name": "城关区", "pinyin": "chengguanqu", "zip_code": "730030", "parent_code": "620100", "type": 2, "first_letter": "C" },
+  { "code": "620103", "name": "七里河区", "pinyin": "qilihequ", "zip_code": "730050", "parent_code": "620100", "type": 2, "first_letter": "Q" },
+  { "code": "620104", "name": "西固区", "pinyin": "xiguqu", "zip_code": "730060", "parent_code": "620100", "type": 2, "first_letter": "X" },
+  { "code": "620105", "name": "安宁区", "pinyin": "anningqu", "zip_code": "730070", "parent_code": "620100", "type": 2, "first_letter": "A" },
+  { "code": "620111", "name": "红古区", "pinyin": "hongguqu", "zip_code": "730080", "parent_code": "620100", "type": 2, "first_letter": "H" },
+  { "code": "620121", "name": "永登县", "pinyin": "yongdengxian", "zip_code": "730300", "parent_code": "620100", "type": 2, "first_letter": "Y" },
+  { "code": "620122", "name": "皋兰县", "pinyin": "gaolanxian", "zip_code": "730200", "parent_code": "620100", "type": 2, "first_letter": "G" },
+  { "code": "620123", "name": "榆中县", "pinyin": "yuzhongxian", "zip_code": "730100", "parent_code": "620100", "type": 2, "first_letter": "Y" },
+  { "code": "620200", "name": "嘉峪关市", "pinyin": "jiayuguanshi", "zip_code": "735100", "parent_code": "620000", "type": 1, "first_letter": "J" },
+  { "code": "620201", "name": "雄关区", "pinyin": "xiongguanqu", "zip_code": "735100", "parent_code": "620200", "type": 2, "first_letter": "X" },
+  { "code": "620202", "name": "镜铁区", "pinyin": "jingtiequ", "zip_code": "735100", "parent_code": "620200", "type": 2, "first_letter": "J" },
+  { "code": "620203", "name": "长城区", "pinyin": "changchengqu", "zip_code": "735100", "parent_code": "620200", "type": 2, "first_letter": "C" },
+  { "code": "620300", "name": "金昌市", "pinyin": "jinchangshi", "zip_code": "737100", "parent_code": "620000", "type": 1, "first_letter": "J" },
+  { "code": "620302", "name": "金川区", "pinyin": "jinchuanqu", "zip_code": "737103", "parent_code": "620300", "type": 2, "first_letter": "J" },
+  { "code": "620321", "name": "永昌县", "pinyin": "yongchangxian", "zip_code": "737200", "parent_code": "620300", "type": 2, "first_letter": "Y" },
+  { "code": "620400", "name": "白银市", "pinyin": "baiyinshi", "zip_code": "730900", "parent_code": "620000", "type": 1, "first_letter": "B" },
+  { "code": "620402", "name": "白银区", "pinyin": "baiyinqu", "zip_code": "730900", "parent_code": "620400", "type": 2, "first_letter": "B" },
+  { "code": "620403", "name": "平川区", "pinyin": "pingchuanqu", "zip_code": "730913", "parent_code": "620400", "type": 2, "first_letter": "P" },
+  { "code": "620421", "name": "靖远县", "pinyin": "jingyuanxian", "zip_code": "730600", "parent_code": "620400", "type": 2, "first_letter": "J" },
+  { "code": "620422", "name": "会宁县", "pinyin": "huiningxian", "zip_code": "730700", "parent_code": "620400", "type": 2, "first_letter": "H" },
+  { "code": "620423", "name": "景泰县", "pinyin": "jingtaixian", "zip_code": "730400", "parent_code": "620400", "type": 2, "first_letter": "J" },
+  { "code": "620500", "name": "天水市", "pinyin": "tianshuishi", "zip_code": "741000", "parent_code": "620000", "type": 1, "first_letter": "T" },
+  { "code": "620502", "name": "秦州区", "pinyin": "qinzhouqu", "zip_code": "741000", "parent_code": "620500", "type": 2, "first_letter": "Q" },
+  { "code": "620503", "name": "麦积区", "pinyin": "maijiqu", "zip_code": "741020", "parent_code": "620500", "type": 2, "first_letter": "M" },
+  { "code": "620521", "name": "清水县", "pinyin": "qingshuixian", "zip_code": "741400", "parent_code": "620500", "type": 2, "first_letter": "Q" },
+  { "code": "620522", "name": "秦安县", "pinyin": "qinanxian", "zip_code": "741600", "parent_code": "620500", "type": 2, "first_letter": "Q" },
+  { "code": "620523", "name": "甘谷县", "pinyin": "ganguxian", "zip_code": "741200", "parent_code": "620500", "type": 2, "first_letter": "G" },
+  { "code": "620524", "name": "武山县", "pinyin": "wushanxian", "zip_code": "741300", "parent_code": "620500", "type": 2, "first_letter": "W" },
+  { "code": "620525", "name": "张家川回族自治县", "pinyin": "zhangjiachuanhuizuzizhixian", "zip_code": "741500", "parent_code": "620500", "type": 2, "first_letter": "Z" },
+  { "code": "620600", "name": "武威市", "pinyin": "wuweishi", "zip_code": "733000", "parent_code": "620000", "type": 1, "first_letter": "W" },
+  { "code": "620602", "name": "凉州区", "pinyin": "liangzhouqu", "zip_code": "733000", "parent_code": "620600", "type": 2, "first_letter": "L" },
+  { "code": "620621", "name": "民勤县", "pinyin": "minqinxian", "zip_code": "733300", "parent_code": "620600", "type": 2, "first_letter": "M" },
+  { "code": "620622", "name": "古浪县", "pinyin": "gulangxian", "zip_code": "733100", "parent_code": "620600", "type": 2, "first_letter": "G" },
+  { "code": "620623", "name": "天祝藏族自治县", "pinyin": "tianzhuzangzuzizhixian", "zip_code": "733200", "parent_code": "620600", "type": 2, "first_letter": "T" },
+  { "code": "620700", "name": "张掖市", "pinyin": "zhangyeshi", "zip_code": "734000", "parent_code": "620000", "type": 1, "first_letter": "Z" },
+  { "code": "620702", "name": "甘州区", "pinyin": "ganzhouqu", "zip_code": "734000", "parent_code": "620700", "type": 2, "first_letter": "G" },
+  { "code": "620721", "name": "肃南裕固族自治县", "pinyin": "sunanyuguzuzizhixian", "zip_code": "734400", "parent_code": "620700", "type": 2, "first_letter": "S" },
+  { "code": "620722", "name": "民乐县", "pinyin": "minlexian", "zip_code": "734500", "parent_code": "620700", "type": 2, "first_letter": "M" },
+  { "code": "620723", "name": "临泽县", "pinyin": "linzexian", "zip_code": "734200", "parent_code": "620700", "type": 2, "first_letter": "L" },
+  { "code": "620724", "name": "高台县", "pinyin": "gaotaixian", "zip_code": "734300", "parent_code": "620700", "type": 2, "first_letter": "G" },
+  { "code": "620725", "name": "山丹县", "pinyin": "shandanxian", "zip_code": "734100", "parent_code": "620700", "type": 2, "first_letter": "S" },
+  { "code": "620800", "name": "平凉市", "pinyin": "pingliangshi", "zip_code": "744000", "parent_code": "620000", "type": 1, "first_letter": "P" },
+  { "code": "620802", "name": "崆峒区", "pinyin": "kongdongqu", "zip_code": "744000", "parent_code": "620800", "type": 2, "first_letter": "K" },
+  { "code": "620821", "name": "泾川县", "pinyin": "jingchuanxian", "zip_code": "744300", "parent_code": "620800", "type": 2, "first_letter": "J" },
+  { "code": "620822", "name": "灵台县", "pinyin": "lingtaixian", "zip_code": "744400", "parent_code": "620800", "type": 2, "first_letter": "L" },
+  { "code": "620823", "name": "崇信县", "pinyin": "chongxinxian", "zip_code": "744200", "parent_code": "620800", "type": 2, "first_letter": "C" },
+  { "code": "620824", "name": "华亭县", "pinyin": "huatingxian", "zip_code": "744100", "parent_code": "620800", "type": 2, "first_letter": "H" },
+  { "code": "620825", "name": "庄浪县", "pinyin": "zhuanglangxian", "zip_code": "744600", "parent_code": "620800", "type": 2, "first_letter": "Z" },
+  { "code": "620826", "name": "静宁县", "pinyin": "jingningxian", "zip_code": "743400", "parent_code": "620800", "type": 2, "first_letter": "J" },
+  { "code": "620900", "name": "酒泉市", "pinyin": "jiuquanshi", "zip_code": "735000", "parent_code": "620000", "type": 1, "first_letter": "J" },
+  { "code": "620902", "name": "肃州区", "pinyin": "suzhouqu", "zip_code": "735000", "parent_code": "620900", "type": 2, "first_letter": "S" },
+  { "code": "620921", "name": "金塔县", "pinyin": "jintaxian", "zip_code": "735300", "parent_code": "620900", "type": 2, "first_letter": "J" },
+  { "code": "620922", "name": "瓜州县", "pinyin": "guazhouxian", "zip_code": "735000", "parent_code": "620900", "type": 2, "first_letter": "G" },
+  { "code": "620923", "name": "肃北蒙古族自治县", "pinyin": "subeimengguzuzizhixian", "zip_code": "736300", "parent_code": "620900", "type": 2, "first_letter": "S" },
+  { "code": "620924", "name": "阿克塞哈萨克族自治县", "pinyin": "akesaihasakezuzizhixian", "zip_code": "736400", "parent_code": "620900", "type": 2, "first_letter": "A" },
+  { "code": "620981", "name": "玉门市", "pinyin": "yumenshi", "zip_code": "735200", "parent_code": "620900", "type": 2, "first_letter": "Y" },
+  { "code": "620982", "name": "敦煌市", "pinyin": "dunhuangshi", "zip_code": "736200", "parent_code": "620900", "type": 2, "first_letter": "D" },
+  { "code": "621000", "name": "庆阳市", "pinyin": "qingyangshi", "zip_code": "745000", "parent_code": "620000", "type": 1, "first_letter": "Q" },
+  { "code": "621002", "name": "西峰区", "pinyin": "xifengqu", "zip_code": "745000", "parent_code": "621000", "type": 2, "first_letter": "X" },
+  { "code": "621021", "name": "庆城县", "pinyin": "qingchengxian", "zip_code": "745100", "parent_code": "621000", "type": 2, "first_letter": "Q" },
+  { "code": "621022", "name": "环县", "pinyin": "huanxian", "zip_code": "745700", "parent_code": "621000", "type": 2, "first_letter": "H" },
+  { "code": "621023", "name": "华池县", "pinyin": "huachixian", "zip_code": "745600", "parent_code": "621000", "type": 2, "first_letter": "H" },
+  { "code": "621024", "name": "合水县", "pinyin": "heshuixian", "zip_code": "745400", "parent_code": "621000", "type": 2, "first_letter": "H" },
+  { "code": "621025", "name": "正宁县", "pinyin": "zhengningxian", "zip_code": "745300", "parent_code": "621000", "type": 2, "first_letter": "Z" },
+  { "code": "621026", "name": "宁县", "pinyin": "ningxian", "zip_code": "745200", "parent_code": "621000", "type": 2, "first_letter": "N" },
+  { "code": "621027", "name": "镇原县", "pinyin": "zhenyuanxian", "zip_code": "744500", "parent_code": "621000", "type": 2, "first_letter": "Z" },
+  { "code": "621100", "name": "定西市", "pinyin": "dingxishi", "zip_code": "743000", "parent_code": "620000", "type": 1, "first_letter": "D" },
+  { "code": "621102", "name": "安定区", "pinyin": "andingqu", "zip_code": "744300", "parent_code": "621100", "type": 2, "first_letter": "A" },
+  { "code": "621121", "name": "通渭县", "pinyin": "tongweixian", "zip_code": "743300", "parent_code": "621100", "type": 2, "first_letter": "T" },
+  { "code": "621122", "name": "陇西县", "pinyin": "longxixian", "zip_code": "748100", "parent_code": "621100", "type": 2, "first_letter": "L" },
+  { "code": "621123", "name": "渭源县", "pinyin": "weiyuanxian", "zip_code": "748200", "parent_code": "621100", "type": 2, "first_letter": "W" },
+  { "code": "621124", "name": "临洮县", "pinyin": "lintaoxian", "zip_code": "730500", "parent_code": "621100", "type": 2, "first_letter": "L" },
+  { "code": "621125", "name": "漳县", "pinyin": "zhangxian", "zip_code": "748300", "parent_code": "621100", "type": 2, "first_letter": "Z" },
+  { "code": "621126", "name": "岷县", "pinyin": "minxian", "zip_code": "748400", "parent_code": "621100", "type": 2, "first_letter": "M" },
+  { "code": "621200", "name": "陇南市", "pinyin": "longnanshi", "zip_code": "742500", "parent_code": "620000", "type": 1, "first_letter": "L" },
+  { "code": "621202", "name": "武都区", "pinyin": "wuduqu", "zip_code": "746000", "parent_code": "621200", "type": 2, "first_letter": "W" },
+  { "code": "621221", "name": "成县", "pinyin": "chengxian", "zip_code": "742500", "parent_code": "621200", "type": 2, "first_letter": "C" },
+  { "code": "621222", "name": "文县", "pinyin": "wenxian", "zip_code": "746400", "parent_code": "621200", "type": 2, "first_letter": "W" },
+  { "code": "621223", "name": "宕昌县", "pinyin": "dangchangxian", "zip_code": "748500", "parent_code": "621200", "type": 2, "first_letter": "D" },
+  { "code": "621224", "name": "康县", "pinyin": "kangxian", "zip_code": "746500", "parent_code": "621200", "type": 2, "first_letter": "K" },
+  { "code": "621225", "name": "西和县", "pinyin": "xihexian", "zip_code": "742100", "parent_code": "621200", "type": 2, "first_letter": "X" },
+  { "code": "621226", "name": "礼县", "pinyin": "lixian", "zip_code": "742200", "parent_code": "621200", "type": 2, "first_letter": "L" },
+  { "code": "621227", "name": "徽县", "pinyin": "huixian", "zip_code": "742300", "parent_code": "621200", "type": 2, "first_letter": "H" },
+  { "code": "621228", "name": "两当县", "pinyin": "liangdangxian", "zip_code": "742400", "parent_code": "621200", "type": 2, "first_letter": "L" },
+  { "code": "622900", "name": "临夏回族自治州", "pinyin": "linxiahuizuzizhizhou", "zip_code": "731100", "parent_code": "620000", "type": 1, "first_letter": "L" },
+  { "code": "622901", "name": "临夏市", "pinyin": "linxiashi", "zip_code": "731100", "parent_code": "622900", "type": 2, "first_letter": "L" },
+  { "code": "622921", "name": "临夏县", "pinyin": "linxiaxian", "zip_code": "731800", "parent_code": "622900", "type": 2, "first_letter": "L" },
+  { "code": "622922", "name": "康乐县", "pinyin": "kanglexian", "zip_code": "731500", "parent_code": "622900", "type": 2, "first_letter": "K" },
+  { "code": "622923", "name": "永靖县", "pinyin": "yongjingxian", "zip_code": "731600", "parent_code": "622900", "type": 2, "first_letter": "Y" },
+  { "code": "622924", "name": "广河县", "pinyin": "guanghexian", "zip_code": "731300", "parent_code": "622900", "type": 2, "first_letter": "G" },
+  { "code": "622925", "name": "和政县", "pinyin": "hezhengxian", "zip_code": "731200", "parent_code": "622900", "type": 2, "first_letter": "H" },
+  { "code": "622926", "name": "东乡族自治县", "pinyin": "dongxiangzuzizhixian", "zip_code": "731400", "parent_code": "622900", "type": 2, "first_letter": "D" },
+  { "code": "622927", "name": "积石山保安族东乡族撒拉族自治县", "pinyin": "jishishanbaoanzudongxiangzusalazuzizhixian", "zip_code": "731700", "parent_code": "622900", "type": 2, "first_letter": "J" },
+  { "code": "623000", "name": "甘南藏族自治州", "pinyin": "gannanzangzuzizhizhou", "zip_code": "747000", "parent_code": "620000", "type": 1, "first_letter": "G" },
+  { "code": "623001", "name": "合作市", "pinyin": "hezuoshi", "zip_code": "747000", "parent_code": "623000", "type": 2, "first_letter": "H" },
+  { "code": "623021", "name": "临潭县", "pinyin": "lintanxian", "zip_code": "747500", "parent_code": "623000", "type": 2, "first_letter": "L" },
+  { "code": "623022", "name": "卓尼县", "pinyin": "zhuonixian", "zip_code": "747600", "parent_code": "623000", "type": 2, "first_letter": "Z" },
+  { "code": "623023", "name": "舟曲县", "pinyin": "zhouquxian", "zip_code": "746300", "parent_code": "623000", "type": 2, "first_letter": "Z" },
+  { "code": "623024", "name": "迭部县", "pinyin": "diebuxian", "zip_code": "747400", "parent_code": "623000", "type": 2, "first_letter": "D" },
+  { "code": "623025", "name": "玛曲县", "pinyin": "maquxian", "zip_code": "747300", "parent_code": "623000", "type": 2, "first_letter": "M" },
+  { "code": "623026", "name": "碌曲县", "pinyin": "luquxian", "zip_code": "747200", "parent_code": "623000", "type": 2, "first_letter": "L" },
+  { "code": "623027", "name": "夏河县", "pinyin": "xiahexian", "zip_code": "747100", "parent_code": "623000", "type": 2, "first_letter": "X" },
+  { "code": "630000", "name": "青海省", "pinyin": "qinghaisheng", "zip_code": "0", "type": 0, "first_letter": "Q" },
+  { "code": "630100", "name": "西宁市", "pinyin": "xiningshi", "zip_code": "810000", "parent_code": "630000", "type": 1, "first_letter": "X" },
+  { "code": "630102", "name": "城东区", "pinyin": "chengdongqu", "zip_code": "810000", "parent_code": "630100", "type": 2, "first_letter": "C" },
+  { "code": "630103", "name": "城中区", "pinyin": "chengzhongqu", "zip_code": "810000", "parent_code": "630100", "type": 2, "first_letter": "C" },
+  { "code": "630104", "name": "城西区", "pinyin": "chengxiqu", "zip_code": "810000", "parent_code": "630100", "type": 2, "first_letter": "C" },
+  { "code": "630105", "name": "城北区", "pinyin": "chengbeiqu", "zip_code": "810000", "parent_code": "630100", "type": 2, "first_letter": "C" },
+  { "code": "630121", "name": "大通回族土族自治县", "pinyin": "datonghuizutuzuzizhixian", "zip_code": "810100", "parent_code": "630100", "type": 2, "first_letter": "D" },
+  { "code": "630122", "name": "湟中县", "pinyin": "huangzhongxian", "zip_code": "811600", "parent_code": "630100", "type": 2, "first_letter": "H" },
+  { "code": "630123", "name": "湟源县", "pinyin": "huangyuanxian", "zip_code": "812100", "parent_code": "630100", "type": 2, "first_letter": "H" },
+  { "code": "630200", "name": "海东市", "pinyin": "haidongshi", "zip_code": "810699", "parent_code": "630000", "type": 1, "first_letter": "H" },
+  { "code": "630202", "name": "乐都区", "pinyin": "leduqu", "zip_code": "810700", "parent_code": "630200", "type": 2, "first_letter": "L" },
+  { "code": "630203", "name": "平安区", "pinyin": "pinganqu", "zip_code": "810699", "parent_code": "630200", "type": 2, "first_letter": "P" },
+  { "code": "630222", "name": "民和回族土族自治县", "pinyin": "minhehuizutuzuzizhixian", "zip_code": "810800", "parent_code": "630200", "type": 2, "first_letter": "M" },
+  { "code": "630223", "name": "互助土族自治县", "pinyin": "huzhutuzuzizhixian", "zip_code": "810500", "parent_code": "630200", "type": 2, "first_letter": "H" },
+  { "code": "630224", "name": "化隆回族自治县", "pinyin": "hualonghuizuzizhixian", "zip_code": "810900", "parent_code": "630200", "type": 2, "first_letter": "H" },
+  { "code": "630225", "name": "循化撒拉族自治县", "pinyin": "xunhuasalazuzizhixian", "zip_code": "811100", "parent_code": "630200", "type": 2, "first_letter": "X" },
+  { "code": "632200", "name": "海北藏族自治州", "pinyin": "haibeizangzuzizhizhou", "zip_code": "812200", "parent_code": "630000", "type": 1, "first_letter": "H" },
+  { "code": "632221", "name": "门源回族自治县", "pinyin": "menyuanhuizuzizhixian", "zip_code": "810300", "parent_code": "632200", "type": 2, "first_letter": "M" },
+  { "code": "632222", "name": "祁连县", "pinyin": "qilianxian", "zip_code": "810400", "parent_code": "632200", "type": 2, "first_letter": "Q" },
+  { "code": "632223", "name": "海晏县", "pinyin": "haiyanxian", "zip_code": "812200", "parent_code": "632200", "type": 2, "first_letter": "H" },
+  { "code": "632224", "name": "刚察县", "pinyin": "gangchaxian", "zip_code": "812300", "parent_code": "632200", "type": 2, "first_letter": "G" },
+  { "code": "632300", "name": "黄南藏族自治州", "pinyin": "huangnanzangzuzizhizhou", "zip_code": "811300", "parent_code": "630000", "type": 1, "first_letter": "H" },
+  { "code": "632321", "name": "同仁县", "pinyin": "tongrenxian", "zip_code": "811300", "parent_code": "632300", "type": 2, "first_letter": "T" },
+  { "code": "632322", "name": "尖扎县", "pinyin": "jianzhaxian", "zip_code": "811200", "parent_code": "632300", "type": 2, "first_letter": "J" },
+  { "code": "632323", "name": "泽库县", "pinyin": "zekuxian", "zip_code": "811400", "parent_code": "632300", "type": 2, "first_letter": "Z" },
+  { "code": "632324", "name": "河南蒙古族自治县", "pinyin": "henanmengguzuzizhixian", "zip_code": "811500", "parent_code": "632300", "type": 2, "first_letter": "H" },
+  { "code": "632500", "name": "海南藏族自治州", "pinyin": "hainanzangzuzizhizhou", "zip_code": "813000", "parent_code": "630000", "type": 1, "first_letter": "H" },
+  { "code": "632521", "name": "共和县", "pinyin": "gonghexian", "zip_code": "813000", "parent_code": "632500", "type": 2, "first_letter": "G" },
+  { "code": "632522", "name": "同德县", "pinyin": "tongdexian", "zip_code": "813200", "parent_code": "632500", "type": 2, "first_letter": "T" },
+  { "code": "632523", "name": "贵德县", "pinyin": "guidexian", "zip_code": "811700", "parent_code": "632500", "type": 2, "first_letter": "G" },
+  { "code": "632524", "name": "兴海县", "pinyin": "xinghaixian", "zip_code": "813300", "parent_code": "632500", "type": 2, "first_letter": "X" },
+  { "code": "632525", "name": "贵南县", "pinyin": "guinanxian", "zip_code": "813100", "parent_code": "632500", "type": 2, "first_letter": "G" },
+  { "code": "632600", "name": "果洛藏族自治州", "pinyin": "guoluozangzuzizhizhou", "zip_code": "814000", "parent_code": "630000", "type": 1, "first_letter": "G" },
+  { "code": "632621", "name": "玛沁县", "pinyin": "maqinxian", "zip_code": "814000", "parent_code": "632600", "type": 2, "first_letter": "M" },
+  { "code": "632622", "name": "班玛县", "pinyin": "banmaxian", "zip_code": "814300", "parent_code": "632600", "type": 2, "first_letter": "B" },
+  { "code": "632623", "name": "甘德县", "pinyin": "gandexian", "zip_code": "814100", "parent_code": "632600", "type": 2, "first_letter": "G" },
+  { "code": "632624", "name": "达日县", "pinyin": "darixian", "zip_code": "814200", "parent_code": "632600", "type": 2, "first_letter": "D" },
+  { "code": "632625", "name": "久治县", "pinyin": "jiuzhixian", "zip_code": "624700", "parent_code": "632600", "type": 2, "first_letter": "J" },
+  { "code": "632626", "name": "玛多县", "pinyin": "maduoxian", "zip_code": "813500", "parent_code": "632600", "type": 2, "first_letter": "M" },
+  { "code": "632700", "name": "玉树藏族自治州", "pinyin": "yushuzangzuzizhizhou", "zip_code": "815000", "parent_code": "630000", "type": 1, "first_letter": "Y" },
+  { "code": "632701", "name": "玉树市", "pinyin": "yushushi", "zip_code": "815000", "parent_code": "632700", "type": 2, "first_letter": "Y" },
+  { "code": "632722", "name": "杂多县", "pinyin": "zaduoxian", "zip_code": "815300", "parent_code": "632700", "type": 2, "first_letter": "Z" },
+  { "code": "632723", "name": "称多县", "pinyin": "chengduoxian", "zip_code": "815100", "parent_code": "632700", "type": 2, "first_letter": "C" },
+  { "code": "632724", "name": "治多县", "pinyin": "zhiduoxian", "zip_code": "815400", "parent_code": "632700", "type": 2, "first_letter": "Z" },
+  { "code": "632725", "name": "囊谦县", "pinyin": "nangqianxian", "zip_code": "815200", "parent_code": "632700", "type": 2, "first_letter": "N" },
+  { "code": "632726", "name": "曲麻莱县", "pinyin": "qumalaixian", "zip_code": "815500", "parent_code": "632700", "type": 2, "first_letter": "Q" },
+  { "code": "632800", "name": "海西蒙古族藏族自治州", "pinyin": "haiximengguzuzangzuzizhizhou", "zip_code": "817000", "parent_code": "630000", "type": 1, "first_letter": "H" },
+  { "code": "632801", "name": "格尔木市", "pinyin": "geermushi", "zip_code": "816000", "parent_code": "632800", "type": 2, "first_letter": "G" },
+  { "code": "632802", "name": "德令哈市", "pinyin": "delinghashi", "zip_code": "817000", "parent_code": "632800", "type": 2, "first_letter": "D" },
+  { "code": "632821", "name": "乌兰县", "pinyin": "wulanxian", "zip_code": "817100", "parent_code": "632800", "type": 2, "first_letter": "W" },
+  { "code": "632822", "name": "都兰县", "pinyin": "dulanxian", "zip_code": "816100", "parent_code": "632800", "type": 2, "first_letter": "D" },
+  { "code": "632823", "name": "天峻县", "pinyin": "tianjunxian", "zip_code": "817200", "parent_code": "632800", "type": 2, "first_letter": "T" },
+  { "code": "632824", "name": "冷湖行政委员会", "pinyin": "lenghuxingzhengweiyuanhui", "zip_code": "816300", "parent_code": "632800", "type": 2, "first_letter": "L" },
+  { "code": "632825", "name": "大柴旦行政委员会", "pinyin": "dachaidanxingzhengweiyuanhui", "zip_code": "817000", "parent_code": "632800", "type": 2, "first_letter": "D" },
+  { "code": "632826", "name": "茫崖行政委员会", "pinyin": "mangyaxingzhengweiyuanhui", "zip_code": "817000", "parent_code": "632800", "type": 2, "first_letter": "M" },
+  { "code": "640000", "name": "宁夏回族自治区", "pinyin": "ningxiahuizuzizhiqu", "zip_code": "0", "type": 0, "first_letter": "N" },
+  { "code": "640100", "name": "银川市", "pinyin": "yinchuanshi", "zip_code": "750000", "parent_code": "640000", "type": 1, "first_letter": "Y" },
+  { "code": "640104", "name": "兴庆区", "pinyin": "xingqingqu", "zip_code": "750001", "parent_code": "640100", "type": 2, "first_letter": "X" },
+  { "code": "640105", "name": "西夏区", "pinyin": "xixiaqu", "zip_code": "750021", "parent_code": "640100", "type": 2, "first_letter": "X" },
+  { "code": "640106", "name": "金凤区", "pinyin": "jinfengqu", "zip_code": "750011", "parent_code": "640100", "type": 2, "first_letter": "J" },
+  { "code": "640121", "name": "永宁县", "pinyin": "yongningxian", "zip_code": "750100", "parent_code": "640100", "type": 2, "first_letter": "Y" },
+  { "code": "640122", "name": "贺兰县", "pinyin": "helanxian", "zip_code": "750200", "parent_code": "640100", "type": 2, "first_letter": "H" },
+  { "code": "640181", "name": "灵武市", "pinyin": "lingwushi", "zip_code": "750004", "parent_code": "640100", "type": 2, "first_letter": "L" },
+  { "code": "640200", "name": "石嘴山市", "pinyin": "shizuishanshi", "zip_code": "753000", "parent_code": "640000", "type": 1, "first_letter": "S" },
+  { "code": "640202", "name": "大武口区", "pinyin": "dawukouqu", "zip_code": "753000", "parent_code": "640200", "type": 2, "first_letter": "D" },
+  { "code": "640205", "name": "惠农区", "pinyin": "huinongqu", "zip_code": "753600", "parent_code": "640200", "type": 2, "first_letter": "H" },
+  { "code": "640221", "name": "平罗县", "pinyin": "pingluoxian", "zip_code": "753400", "parent_code": "640200", "type": 2, "first_letter": "P" },
+  { "code": "640300", "name": "吴忠市", "pinyin": "wuzhongshi", "zip_code": "751100", "parent_code": "640000", "type": 1, "first_letter": "W" },
+  { "code": "640302", "name": "利通区", "pinyin": "litongqu", "zip_code": "751100", "parent_code": "640300", "type": 2, "first_letter": "L" },
+  { "code": "640303", "name": "红寺堡区", "pinyin": "hongsibuqu", "zip_code": "751100", "parent_code": "640300", "type": 2, "first_letter": "H" },
+  { "code": "640323", "name": "盐池县", "pinyin": "yanchixian", "zip_code": "751500", "parent_code": "640300", "type": 2, "first_letter": "Y" },
+  { "code": "640324", "name": "同心县", "pinyin": "tongxinxian", "zip_code": "751300", "parent_code": "640300", "type": 2, "first_letter": "T" },
+  { "code": "640381", "name": "青铜峡市", "pinyin": "qingtongxiashi", "zip_code": "751600", "parent_code": "640300", "type": 2, "first_letter": "Q" },
+  { "code": "640400", "name": "固原市", "pinyin": "guyuanshi", "zip_code": "756000", "parent_code": "640000", "type": 1, "first_letter": "G" },
+  { "code": "640402", "name": "原州区", "pinyin": "yuanzhouqu", "zip_code": "756000", "parent_code": "640400", "type": 2, "first_letter": "Y" },
+  { "code": "640422", "name": "西吉县", "pinyin": "xijixian", "zip_code": "756200", "parent_code": "640400", "type": 2, "first_letter": "X" },
+  { "code": "640423", "name": "隆德县", "pinyin": "longdexian", "zip_code": "756300", "parent_code": "640400", "type": 2, "first_letter": "L" },
+  { "code": "640424", "name": "泾源县", "pinyin": "jingyuanxian", "zip_code": "756400", "parent_code": "640400", "type": 2, "first_letter": "J" },
+  { "code": "640425", "name": "彭阳县", "pinyin": "pengyangxian", "zip_code": "756500", "parent_code": "640400", "type": 2, "first_letter": "P" },
+  { "code": "640500", "name": "中卫市", "pinyin": "zhongweishi", "zip_code": "751700", "parent_code": "640000", "type": 1, "first_letter": "Z" },
+  { "code": "640502", "name": "沙坡头区", "pinyin": "shapotouqu", "zip_code": "755000", "parent_code": "640500", "type": 2, "first_letter": "S" },
+  { "code": "640521", "name": "中宁县", "pinyin": "zhongningxian", "zip_code": "755000", "parent_code": "640500", "type": 2, "first_letter": "Z" },
+  { "code": "640522", "name": "海原县", "pinyin": "haiyuanxian", "zip_code": "755200", "parent_code": "640500", "type": 2, "first_letter": "H" },
+  { "code": "650000", "name": "新疆维吾尔自治区", "pinyin": "xinjiangweiwuerzizhiqu", "zip_code": "0", "type": 0, "first_letter": "X" },
+  { "code": "650100", "name": "乌鲁木齐市", "pinyin": "wulumuqishi", "zip_code": "830000", "parent_code": "650000", "type": 1, "first_letter": "W" },
+  { "code": "650102", "name": "天山区", "pinyin": "tianshanqu", "zip_code": "830000", "parent_code": "650100", "type": 2, "first_letter": "T" },
+  { "code": "650103", "name": "沙依巴克区", "pinyin": "shayibakequ", "zip_code": "830002", "parent_code": "650100", "type": 2, "first_letter": "S" },
+  { "code": "650104", "name": "新市区", "pinyin": "xinshiqu", "zip_code": "830011", "parent_code": "650100", "type": 2, "first_letter": "X" },
+  { "code": "650105", "name": "水磨沟区", "pinyin": "shuimogouqu", "zip_code": "830017", "parent_code": "650100", "type": 2, "first_letter": "S" },
+  { "code": "650106", "name": "头屯河区", "pinyin": "toutunhequ", "zip_code": "830022", "parent_code": "650100", "type": 2, "first_letter": "T" },
+  { "code": "650107", "name": "达坂城区", "pinyin": "dabanchengqu", "zip_code": "830039", "parent_code": "650100", "type": 2, "first_letter": "D" },
+  { "code": "650109", "name": "米东区", "pinyin": "midongqu", "zip_code": "830019", "parent_code": "650100", "type": 2, "first_letter": "M" },
+  { "code": "650121", "name": "乌鲁木齐县", "pinyin": "wulumuqixian", "zip_code": "830063", "parent_code": "650100", "type": 2, "first_letter": "W" },
+  { "code": "650200", "name": "克拉玛依市", "pinyin": "kelamayishi", "zip_code": "834000", "parent_code": "650000", "type": 1, "first_letter": "K" },
+  { "code": "650202", "name": "独山子区", "pinyin": "dushanziqu", "zip_code": "834021", "parent_code": "650200", "type": 2, "first_letter": "D" },
+  { "code": "650203", "name": "克拉玛依区", "pinyin": "kelamayiqu", "zip_code": "834000", "parent_code": "650200", "type": 2, "first_letter": "K" },
+  { "code": "650204", "name": "白碱滩区", "pinyin": "baijiantanqu", "zip_code": "834008", "parent_code": "650200", "type": 2, "first_letter": "B" },
+  { "code": "650205", "name": "乌尔禾区", "pinyin": "wuerhequ", "zip_code": "834012", "parent_code": "650200", "type": 2, "first_letter": "W" },
+  { "code": "650400", "name": "吐鲁番市", "pinyin": "tulufanshi", "zip_code": "838000", "parent_code": "650000", "type": 1, "first_letter": "T" },
+  { "code": "650402", "name": "高昌区", "pinyin": "gaochangqu", "zip_code": "838000", "parent_code": "650400", "type": 2, "first_letter": "G" },
+  { "code": "650421", "name": "鄯善县", "pinyin": "shanshanxian", "zip_code": "838200", "parent_code": "650400", "type": 2, "first_letter": "S" },
+  { "code": "650422", "name": "托克逊县", "pinyin": "tuokexunxian", "zip_code": "838100", "parent_code": "650400", "type": 2, "first_letter": "T" },
+  { "code": "650500", "name": "哈密市", "pinyin": "hamishi", "zip_code": "839000", "parent_code": "650000", "type": 1, "first_letter": "H" },
+  { "code": "650502", "name": "伊州区", "pinyin": "yizhouqu", "zip_code": "839000", "parent_code": "650500", "type": 2, "first_letter": "Y" },
+  { "code": "650521", "name": "巴里坤哈萨克自治县", "pinyin": "balikunhasakezizhixian", "zip_code": "839200", "parent_code": "650500", "type": 2, "first_letter": "B" },
+  { "code": "650522", "name": "伊吾县", "pinyin": "yiwuxian", "zip_code": "839300", "parent_code": "650500", "type": 2, "first_letter": "Y" },
+  { "code": "652300", "name": "昌吉回族自治州", "pinyin": "changjihuizuzizhizhou", "zip_code": "831100", "parent_code": "650000", "type": 1, "first_letter": "C" },
+  { "code": "652301", "name": "昌吉市", "pinyin": "changjishi", "zip_code": "831100", "parent_code": "652300", "type": 2, "first_letter": "C" },
+  { "code": "652302", "name": "阜康市", "pinyin": "fukangshi", "zip_code": "831500", "parent_code": "652300", "type": 2, "first_letter": "F" },
+  { "code": "652323", "name": "呼图壁县", "pinyin": "hutubixian", "zip_code": "831200", "parent_code": "652300", "type": 2, "first_letter": "H" },
+  { "code": "652324", "name": "玛纳斯县", "pinyin": "manasixian", "zip_code": "832200", "parent_code": "652300", "type": 2, "first_letter": "M" },
+  { "code": "652325", "name": "奇台县", "pinyin": "qitaixian", "zip_code": "831800", "parent_code": "652300", "type": 2, "first_letter": "Q" },
+  { "code": "652327", "name": "吉木萨尔县", "pinyin": "jimusaerxian", "zip_code": "831700", "parent_code": "652300", "type": 2, "first_letter": "J" },
+  { "code": "652328", "name": "木垒哈萨克自治县", "pinyin": "muleihasakezizhixian", "zip_code": "831900", "parent_code": "652300", "type": 2, "first_letter": "M" },
+  { "code": "652700", "name": "博尔塔拉蒙古自治州", "pinyin": "boertalamengguzizhizhou", "zip_code": "833400", "parent_code": "650000", "type": 1, "first_letter": "B" },
+  { "code": "652701", "name": "博乐市", "pinyin": "boleshi", "zip_code": "833400", "parent_code": "652700", "type": 2, "first_letter": "B" },
+  { "code": "652702", "name": "阿拉山口市", "pinyin": "alashankoushi", "zip_code": "833400", "parent_code": "652700", "type": 2, "first_letter": "A" },
+  { "code": "652722", "name": "精河县", "pinyin": "jinghexian", "zip_code": "833300", "parent_code": "652700", "type": 2, "first_letter": "J" },
+  { "code": "652723", "name": "温泉县", "pinyin": "wenquanxian", "zip_code": "833500", "parent_code": "652700", "type": 2, "first_letter": "W" },
+  { "code": "652800", "name": "巴音郭楞蒙古自治州", "pinyin": "bayinguolengmengguzizhizhou", "zip_code": "841000", "parent_code": "650000", "type": 1, "first_letter": "B" },
+  { "code": "652801", "name": "库尔勒市", "pinyin": "kuerleishi", "zip_code": "841000", "parent_code": "652800", "type": 2, "first_letter": "K" },
+  { "code": "652822", "name": "轮台县", "pinyin": "luntaixian", "zip_code": "841600", "parent_code": "652800", "type": 2, "first_letter": "L" },
+  { "code": "652823", "name": "尉犁县", "pinyin": "weilixian", "zip_code": "841500", "parent_code": "652800", "type": 2, "first_letter": "W" },
+  { "code": "652824", "name": "若羌县", "pinyin": "ruoqiangxian", "zip_code": "841800", "parent_code": "652800", "type": 2, "first_letter": "R" },
+  { "code": "652825", "name": "且末县", "pinyin": "qiemoxian", "zip_code": "841900", "parent_code": "652800", "type": 2, "first_letter": "Q" },
+  { "code": "652826", "name": "焉耆回族自治县", "pinyin": "yanqihuizuzizhixian", "zip_code": "841100", "parent_code": "652800", "type": 2, "first_letter": "Y" },
+  { "code": "652827", "name": "和静县", "pinyin": "hejingxian", "zip_code": "841300", "parent_code": "652800", "type": 2, "first_letter": "H" },
+  { "code": "652828", "name": "和硕县", "pinyin": "heshuoxian", "zip_code": "841200", "parent_code": "652800", "type": 2, "first_letter": "H" },
+  { "code": "652829", "name": "博湖县", "pinyin": "bohuxian", "zip_code": "841400", "parent_code": "652800", "type": 2, "first_letter": "B" },
+  { "code": "652900", "name": "阿克苏地区", "pinyin": "akesudiqu", "zip_code": "843000", "parent_code": "650000", "type": 1, "first_letter": "A" },
+  { "code": "652901", "name": "阿克苏市", "pinyin": "akesushi", "zip_code": "843000", "parent_code": "652900", "type": 2, "first_letter": "A" },
+  { "code": "652922", "name": "温宿县", "pinyin": "wensuxian", "zip_code": "843100", "parent_code": "652900", "type": 2, "first_letter": "W" },
+  { "code": "652923", "name": "库车县", "pinyin": "kuchexian", "zip_code": "842000", "parent_code": "652900", "type": 2, "first_letter": "K" },
+  { "code": "652924", "name": "沙雅县", "pinyin": "shayaxian", "zip_code": "842200", "parent_code": "652900", "type": 2, "first_letter": "S" },
+  { "code": "652925", "name": "新和县", "pinyin": "xinhexian", "zip_code": "842100", "parent_code": "652900", "type": 2, "first_letter": "X" },
+  { "code": "652926", "name": "拜城县", "pinyin": "baichengxian", "zip_code": "842300", "parent_code": "652900", "type": 2, "first_letter": "B" },
+  { "code": "652927", "name": "乌什县", "pinyin": "wushixian", "zip_code": "843400", "parent_code": "652900", "type": 2, "first_letter": "W" },
+  { "code": "652928", "name": "阿瓦提县", "pinyin": "awatixian", "zip_code": "843200", "parent_code": "652900", "type": 2, "first_letter": "A" },
+  { "code": "652929", "name": "柯坪县", "pinyin": "kepingxian", "zip_code": "843600", "parent_code": "652900", "type": 2, "first_letter": "K" },
+  { "code": "653000", "name": "克孜勒苏柯尔克孜自治州", "pinyin": "kezileisukeerkezizizhizhou", "zip_code": "845350", "parent_code": "650000", "type": 1, "first_letter": "K" },
+  { "code": "653001", "name": "阿图什市", "pinyin": "atushishi", "zip_code": "845350", "parent_code": "653000", "type": 2, "first_letter": "A" },
+  { "code": "653022", "name": "阿克陶县", "pinyin": "aketaoxian", "zip_code": "845550", "parent_code": "653000", "type": 2, "first_letter": "A" },
+  { "code": "653023", "name": "阿合奇县", "pinyin": "aheqixian", "zip_code": "843500", "parent_code": "653000", "type": 2, "first_letter": "A" },
+  { "code": "653024", "name": "乌恰县", "pinyin": "wuqiaxian", "zip_code": "845450", "parent_code": "653000", "type": 2, "first_letter": "W" },
+  { "code": "653100", "name": "喀什地区", "pinyin": "kashidiqu", "zip_code": "844000", "parent_code": "650000", "type": 1, "first_letter": "K" },
+  { "code": "653101", "name": "喀什市", "pinyin": "kashishi", "zip_code": "844000", "parent_code": "653100", "type": 2, "first_letter": "K" },
+  { "code": "653121", "name": "疏附县", "pinyin": "shufuxian", "zip_code": "844100", "parent_code": "653100", "type": 2, "first_letter": "S" },
+  { "code": "653122", "name": "疏勒县", "pinyin": "shuleixian", "zip_code": "844200", "parent_code": "653100", "type": 2, "first_letter": "S" },
+  { "code": "653123", "name": "英吉沙县", "pinyin": "yingjishaxian", "zip_code": "844500", "parent_code": "653100", "type": 2, "first_letter": "Y" },
+  { "code": "653124", "name": "泽普县", "pinyin": "zepuxian", "zip_code": "844800", "parent_code": "653100", "type": 2, "first_letter": "Z" },
+  { "code": "653125", "name": "莎车县", "pinyin": "shachexian", "zip_code": "844700", "parent_code": "653100", "type": 2, "first_letter": "S" },
+  { "code": "653126", "name": "叶城县", "pinyin": "xechengxian", "zip_code": "844900", "parent_code": "653100", "type": 2, "first_letter": "X" },
+  { "code": "653127", "name": "麦盖提县", "pinyin": "maigaitixian", "zip_code": "844600", "parent_code": "653100", "type": 2, "first_letter": "M" },
+  { "code": "653128", "name": "岳普湖县", "pinyin": "yuepuhuxian", "zip_code": "844400", "parent_code": "653100", "type": 2, "first_letter": "Y" },
+  { "code": "653129", "name": "伽师县", "pinyin": "gashixian", "zip_code": "844300", "parent_code": "653100", "type": 2, "first_letter": "G" },
+  { "code": "653130", "name": "巴楚县", "pinyin": "bachuxian", "zip_code": "843800", "parent_code": "653100", "type": 2, "first_letter": "B" },
+  { "code": "653131", "name": "塔什库尔干塔吉克自治县", "pinyin": "tashikuergantajikezizhixian", "zip_code": "845250", "parent_code": "653100", "type": 2, "first_letter": "T" },
+  { "code": "653200", "name": "和田地区", "pinyin": "hetiandiqu", "zip_code": "848000", "parent_code": "650000", "type": 1, "first_letter": "H" },
+  { "code": "653201", "name": "和田市", "pinyin": "hetianshi", "zip_code": "848000", "parent_code": "653200", "type": 2, "first_letter": "H" },
+  { "code": "653221", "name": "和田县", "pinyin": "hetianxian", "zip_code": "848000", "parent_code": "653200", "type": 2, "first_letter": "H" },
+  { "code": "653222", "name": "墨玉县", "pinyin": "moyuxian", "zip_code": "848100", "parent_code": "653200", "type": 2, "first_letter": "M" },
+  { "code": "653223", "name": "皮山县", "pinyin": "pishanxian", "zip_code": "845150", "parent_code": "653200", "type": 2, "first_letter": "P" },
+  { "code": "653224", "name": "洛浦县", "pinyin": "luopuxian", "zip_code": "848200", "parent_code": "653200", "type": 2, "first_letter": "L" },
+  { "code": "653225", "name": "策勒县", "pinyin": "celeixian", "zip_code": "848300", "parent_code": "653200", "type": 2, "first_letter": "C" },
+  { "code": "653226", "name": "于田县", "pinyin": "yutianxian", "zip_code": "848400", "parent_code": "653200", "type": 2, "first_letter": "Y" },
+  { "code": "653227", "name": "民丰县", "pinyin": "minfengxian", "zip_code": "848500", "parent_code": "653200", "type": 2, "first_letter": "M" },
+  { "code": "654000", "name": "伊犁哈萨克自治州", "pinyin": "yilihasakezizhizhou", "zip_code": "835000", "parent_code": "650000", "type": 1, "first_letter": "Y" },
+  { "code": "654002", "name": "伊宁市", "pinyin": "yiningshi", "zip_code": "835000", "parent_code": "654000", "type": 2, "first_letter": "Y" },
+  { "code": "654003", "name": "奎屯市", "pinyin": "kuitunshi", "zip_code": "833200", "parent_code": "654000", "type": 2, "first_letter": "K" },
+  { "code": "654004", "name": "霍尔果斯市", "pinyin": "huoerguosishi", "zip_code": "835100", "parent_code": "654000", "type": 2, "first_letter": "H" },
+  { "code": "654021", "name": "伊宁县", "pinyin": "yiningxian", "zip_code": "835100", "parent_code": "654000", "type": 2, "first_letter": "Y" },
+  { "code": "654022", "name": "察布查尔锡伯自治县", "pinyin": "chabuchaerxibaizizhixian", "zip_code": "835300", "parent_code": "654000", "type": 2, "first_letter": "C" },
+  { "code": "654023", "name": "霍城县", "pinyin": "huochengxian", "zip_code": "835200", "parent_code": "654000", "type": 2, "first_letter": "H" },
+  { "code": "654024", "name": "巩留县", "pinyin": "gongliuxian", "zip_code": "835400", "parent_code": "654000", "type": 2, "first_letter": "G" },
+  { "code": "654025", "name": "新源县", "pinyin": "xinyuanxian", "zip_code": "835800", "parent_code": "654000", "type": 2, "first_letter": "X" },
+  { "code": "654026", "name": "昭苏县", "pinyin": "zhaosuxian", "zip_code": "835600", "parent_code": "654000", "type": 2, "first_letter": "Z" },
+  { "code": "654027", "name": "特克斯县", "pinyin": "tekesixian", "zip_code": "835500", "parent_code": "654000", "type": 2, "first_letter": "T" },
+  { "code": "654028", "name": "尼勒克县", "pinyin": "nileikexian", "zip_code": "835700", "parent_code": "654000", "type": 2, "first_letter": "N" },
+  { "code": "654200", "name": "塔城地区", "pinyin": "tachengdiqu", "zip_code": "834700", "parent_code": "650000", "type": 1, "first_letter": "T" },
+  { "code": "654201", "name": "塔城市", "pinyin": "tachengshi", "zip_code": "834700", "parent_code": "654200", "type": 2, "first_letter": "T" },
+  { "code": "654202", "name": "乌苏市", "pinyin": "wusushi", "zip_code": "833300", "parent_code": "654200", "type": 2, "first_letter": "W" },
+  { "code": "654203", "name": "沙湾市", "pinyin": "shawanshi", "zip_code": "832100", "parent_code": "654200", "type": 2, "first_letter": "S" },
+  { "code": "654221", "name": "额敏县", "pinyin": "eminxian", "zip_code": "834600", "parent_code": "654200", "type": 2, "first_letter": "E" },
+  { "code": "654224", "name": "托里县", "pinyin": "tuolixian", "zip_code": "834500", "parent_code": "654200", "type": 2, "first_letter": "T" },
+  { "code": "654225", "name": "裕民县", "pinyin": "yuminxian", "zip_code": "834800", "parent_code": "654200", "type": 2, "first_letter": "Y" },
+  { "code": "654226", "name": "和布克赛尔蒙古自治县", "pinyin": "hebukesaiermengguzizhixian", "zip_code": "834400", "parent_code": "654200", "type": 2, "first_letter": "H" },
+  { "code": "654300", "name": "阿勒泰地区", "pinyin": "aletaidiqu", "zip_code": "836500", "parent_code": "650000", "type": 1, "first_letter": "A" },
+  { "code": "654301", "name": "阿勒泰市", "pinyin": "aletaishi", "zip_code": "836500", "parent_code": "654300", "type": 2, "first_letter": "A" },
+  { "code": "654321", "name": "布尔津县", "pinyin": "buerjinxian", "zip_code": "836600", "parent_code": "654300", "type": 2, "first_letter": "B" },
+  { "code": "654322", "name": "富蕴县", "pinyin": "fuyunxian", "zip_code": "836100", "parent_code": "654300", "type": 2, "first_letter": "F" },
+  { "code": "654323", "name": "福海县", "pinyin": "fuhaixian", "zip_code": "836400", "parent_code": "654300", "type": 2, "first_letter": "F" },
+  { "code": "654324", "name": "哈巴河县", "pinyin": "habahexian", "zip_code": "836700", "parent_code": "654300", "type": 2, "first_letter": "H" },
+  { "code": "654325", "name": "青河县", "pinyin": "qinghexian", "zip_code": "836200", "parent_code": "654300", "type": 2, "first_letter": "Q" },
+  { "code": "654326", "name": "吉木乃县", "pinyin": "jimunaixian", "zip_code": "836800", "parent_code": "654300", "type": 2, "first_letter": "J" },
+  { "code": "659000", "name": "自治区直辖县级行政区划", "pinyin": "zizhiquzhixiaxianjixingzhengquhua", "zip_code": "0", "parent_code": "650000", "type": 1, "first_letter": "Z" },
+  { "code": "659001", "name": "石河子市", "pinyin": "shihezishi", "zip_code": "832000", "parent_code": "659000", "type": 2, "first_letter": "S" },
+  { "code": "659002", "name": "阿拉尔市", "pinyin": "alaershi", "zip_code": "843300", "parent_code": "659000", "type": 2, "first_letter": "A" },
+  { "code": "659003", "name": "图木舒克市", "pinyin": "tumushukeshi", "zip_code": "843806", "parent_code": "659000", "type": 2, "first_letter": "T" },
+  { "code": "659004", "name": "五家渠市", "pinyin": "wujiaqushi", "zip_code": "831300", "parent_code": "659000", "type": 2, "first_letter": "W" },
+  { "code": "659005", "name": "北屯市", "pinyin": "beitunshi", "zip_code": "836000", "parent_code": "659000", "type": 2, "first_letter": "B" },
+  { "code": "659006", "name": "铁门关市", "pinyin": "tiemenguanshi", "zip_code": "831300", "parent_code": "659000", "type": 2, "first_letter": "T" },
+  { "code": "659007", "name": "双河市", "pinyin": "shuangheshi", "zip_code": "833408", "parent_code": "659000", "type": 2, "first_letter": "S" },
+  { "code": "659008", "name": "可克达拉市", "pinyin": "kekedalashi", "zip_code": "835213", "parent_code": "659000", "type": 2, "first_letter": "K" },
+  { "code": "659009", "name": "昆玉市", "pinyin": "kunyushi", "zip_code": "848116", "parent_code": "659000", "type": 2, "first_letter": "K" },
+  { "code": "710000", "name": "台湾省", "pinyin": "taiwansheng", "zip_code": "0", "type": 0, "first_letter": "T" },
+  { "code": "710100", "name": "台北市", "pinyin": "taibeishi", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "T" },
+  { "code": "710101", "name": "中正区", "pinyin": "zhongzhengqu", "zip_code": "0", "parent_code": "710100", "type": 2, "first_letter": "Z" },
+  { "code": "710102", "name": "大同区", "pinyin": "datongqu", "zip_code": "0", "parent_code": "710100", "type": 2, "first_letter": "D" },
+  { "code": "710103", "name": "中山区", "pinyin": "zhongshanqu", "zip_code": "0", "parent_code": "710100", "type": 2, "first_letter": "Z" },
+  { "code": "710104", "name": "松山区", "pinyin": "songshanqu", "zip_code": "0", "parent_code": "710100", "type": 2, "first_letter": "S" },
+  { "code": "710105", "name": "大安区", "pinyin": "daanqu", "zip_code": "0", "parent_code": "710100", "type": 2, "first_letter": "D" },
+  { "code": "710106", "name": "万华区", "pinyin": "wanhuaqu", "zip_code": "0", "parent_code": "710100", "type": 2, "first_letter": "W" },
+  { "code": "710107", "name": "信义区", "pinyin": "xinyiqu", "zip_code": "0", "parent_code": "710100", "type": 2, "first_letter": "X" },
+  { "code": "710108", "name": "士林区", "pinyin": "shilinqu", "zip_code": "0", "parent_code": "710100", "type": 2, "first_letter": "S" },
+  { "code": "710109", "name": "北投区", "pinyin": "beitouqu", "zip_code": "0", "parent_code": "710100", "type": 2, "first_letter": "B" },
+  { "code": "710110", "name": "内湖区", "pinyin": "neihuqu", "zip_code": "0", "parent_code": "710100", "type": 2, "first_letter": "N" },
+  { "code": "710111", "name": "南港区", "pinyin": "nangangqu", "zip_code": "0", "parent_code": "710100", "type": 2, "first_letter": "N" },
+  { "code": "710112", "name": "文山区", "pinyin": "wenshanqu", "zip_code": "0", "parent_code": "710100", "type": 2, "first_letter": "W" },
+  { "code": "710200", "name": "高雄市", "pinyin": "gaoxiongshi", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "G" },
+  { "code": "710201", "name": "新兴区", "pinyin": "xinxingqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "X" },
+  { "code": "710202", "name": "前金区", "pinyin": "qianjinqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "Q" },
+  { "code": "710203", "name": "苓雅区", "pinyin": "lingyaqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "L" },
+  { "code": "710204", "name": "盐埕区", "pinyin": "yanchengqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "Y" },
+  { "code": "710205", "name": "鼓山区", "pinyin": "gushanqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "G" },
+  { "code": "710206", "name": "旗津区", "pinyin": "qijinqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "Q" },
+  { "code": "710207", "name": "前镇区", "pinyin": "qianzhenqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "Q" },
+  { "code": "710208", "name": "三民区", "pinyin": "sanminqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "S" },
+  { "code": "710209", "name": "左营区", "pinyin": "zuoyingqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "Z" },
+  { "code": "710210", "name": "楠梓区", "pinyin": "nanziqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "N" },
+  { "code": "710211", "name": "小港区", "pinyin": "xiaogangqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "X" },
+  { "code": "710242", "name": "仁武区", "pinyin": "renwuqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "R" },
+  { "code": "710243", "name": "大社区", "pinyin": "dashequ", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "D" },
+  { "code": "710244", "name": "冈山区", "pinyin": "gangshanqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "G" },
+  { "code": "710245", "name": "路竹区", "pinyin": "luzhuqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "L" },
+  { "code": "710246", "name": "阿莲区", "pinyin": "alianqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "A" },
+  { "code": "710247", "name": "田寮区", "pinyin": "tianliaoqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "T" },
+  { "code": "710248", "name": "燕巢区", "pinyin": "yanchaoqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "Y" },
+  { "code": "710249", "name": "桥头区", "pinyin": "qiaotouqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "Q" },
+  { "code": "710250", "name": "梓官区", "pinyin": "ziguanqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "Z" },
+  { "code": "710251", "name": "弥陀区", "pinyin": "mituoqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "M" },
+  { "code": "710252", "name": "永安区", "pinyin": "yonganqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "Y" },
+  { "code": "710253", "name": "湖内区", "pinyin": "huneiqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "H" },
+  { "code": "710254", "name": "凤山区", "pinyin": "fengshanqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "F" },
+  { "code": "710255", "name": "大寮区", "pinyin": "daliaoqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "D" },
+  { "code": "710256", "name": "林园区", "pinyin": "linyuanqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "L" },
+  { "code": "710257", "name": "鸟松区", "pinyin": "niaosongqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "N" },
+  { "code": "710258", "name": "大树区", "pinyin": "dashuqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "D" },
+  { "code": "710259", "name": "旗山区", "pinyin": "qishanqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "Q" },
+  { "code": "710260", "name": "美浓区", "pinyin": "meinongqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "M" },
+  { "code": "710261", "name": "六龟区", "pinyin": "liuguiqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "L" },
+  { "code": "710262", "name": "内门区", "pinyin": "neimenqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "N" },
+  { "code": "710263", "name": "杉林区", "pinyin": "shanlinqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "S" },
+  { "code": "710264", "name": "甲仙区", "pinyin": "jiaxianqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "J" },
+  { "code": "710265", "name": "桃源区", "pinyin": "taoyuanqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "T" },
+  { "code": "710266", "name": "那玛夏区", "pinyin": "namaxiaqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "N" },
+  { "code": "710267", "name": "茂林区", "pinyin": "maolinqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "M" },
+  { "code": "710268", "name": "茄萣区", "pinyin": "qiedingqu", "zip_code": "0", "parent_code": "710200", "type": 2, "first_letter": "Q" },
+  { "code": "710300", "name": "台南市", "pinyin": "tainanshi", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "T" },
+  { "code": "710301", "name": "中西区", "pinyin": "zhongxiqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "Z" },
+  { "code": "710302", "name": "东区", "pinyin": "dongqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "D" },
+  { "code": "710303", "name": "南区", "pinyin": "nanqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "N" },
+  { "code": "710304", "name": "北区", "pinyin": "beiqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "B" },
+  { "code": "710305", "name": "安平区", "pinyin": "anpingqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "A" },
+  { "code": "710306", "name": "安南区", "pinyin": "annanqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "A" },
+  { "code": "710339", "name": "永康区", "pinyin": "yongkangqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "Y" },
+  { "code": "710340", "name": "归仁区", "pinyin": "guirenqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "G" },
+  { "code": "710341", "name": "新化区", "pinyin": "xinhuaqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "X" },
+  { "code": "710342", "name": "左镇区", "pinyin": "zuozhenqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "Z" },
+  { "code": "710343", "name": "玉井区", "pinyin": "yujingqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "Y" },
+  { "code": "710344", "name": "楠西区", "pinyin": "nanxiqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "N" },
+  { "code": "710345", "name": "南化区", "pinyin": "nanhuaqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "N" },
+  { "code": "710346", "name": "仁德区", "pinyin": "rendequ", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "R" },
+  { "code": "710347", "name": "关庙区", "pinyin": "guanmiaoqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "G" },
+  { "code": "710348", "name": "龙崎区", "pinyin": "longqiqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "L" },
+  { "code": "710349", "name": "官田区", "pinyin": "guantianqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "G" },
+  { "code": "710350", "name": "麻豆区", "pinyin": "madouqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "M" },
+  { "code": "710351", "name": "佳里区", "pinyin": "jialiqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "J" },
+  { "code": "710352", "name": "西港区", "pinyin": "xigangqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "X" },
+  { "code": "710353", "name": "七股区", "pinyin": "qiguqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "Q" },
+  { "code": "710354", "name": "将军区", "pinyin": "jiangjunqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "J" },
+  { "code": "710355", "name": "学甲区", "pinyin": "xuejiaqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "X" },
+  { "code": "710356", "name": "北门区", "pinyin": "beimenqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "B" },
+  { "code": "710357", "name": "新营区", "pinyin": "xinyingqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "X" },
+  { "code": "710358", "name": "后壁区", "pinyin": "houbiqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "H" },
+  { "code": "710359", "name": "白河区", "pinyin": "baihequ", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "B" },
+  { "code": "710360", "name": "东山区", "pinyin": "dongshanqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "D" },
+  { "code": "710361", "name": "六甲区", "pinyin": "liujiaqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "L" },
+  { "code": "710362", "name": "下营区", "pinyin": "xiayingqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "X" },
+  { "code": "710363", "name": "柳营区", "pinyin": "liuyingqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "L" },
+  { "code": "710364", "name": "盐水区", "pinyin": "yanshuiqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "Y" },
+  { "code": "710365", "name": "善化区", "pinyin": "shanhuaqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "S" },
+  { "code": "710366", "name": "大内区", "pinyin": "daneiqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "D" },
+  { "code": "710367", "name": "山上区", "pinyin": "shanshangqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "S" },
+  { "code": "710368", "name": "新市区", "pinyin": "xinshiqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "X" },
+  { "code": "710369", "name": "安定区", "pinyin": "andingqu", "zip_code": "0", "parent_code": "710300", "type": 2, "first_letter": "A" },
+  { "code": "710400", "name": "台中市", "pinyin": "taizhongshi", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "T" },
+  { "code": "710401", "name": "中区", "pinyin": "zhongqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "Z" },
+  { "code": "710402", "name": "东区", "pinyin": "dongqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "D" },
+  { "code": "710403", "name": "南区", "pinyin": "nanqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "N" },
+  { "code": "710404", "name": "西区", "pinyin": "xiqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "X" },
+  { "code": "710405", "name": "北区", "pinyin": "beiqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "B" },
+  { "code": "710406", "name": "北屯区", "pinyin": "beitunqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "B" },
+  { "code": "710407", "name": "西屯区", "pinyin": "xitunqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "X" },
+  { "code": "710408", "name": "南屯区", "pinyin": "nantunqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "N" },
+  { "code": "710431", "name": "太平区", "pinyin": "taipingqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "T" },
+  { "code": "710432", "name": "大里区", "pinyin": "daliqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "D" },
+  { "code": "710433", "name": "雾峰区", "pinyin": "wufengqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "W" },
+  { "code": "710434", "name": "乌日区", "pinyin": "wuriqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "W" },
+  { "code": "710435", "name": "丰原区", "pinyin": "fengyuanqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "F" },
+  { "code": "710436", "name": "后里区", "pinyin": "houliqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "H" },
+  { "code": "710437", "name": "石冈区", "pinyin": "shigangqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "S" },
+  { "code": "710438", "name": "东势区", "pinyin": "dongshiqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "D" },
+  { "code": "710439", "name": "和平区", "pinyin": "hepingqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "H" },
+  { "code": "710440", "name": "新社区", "pinyin": "xinshequ", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "X" },
+  { "code": "710441", "name": "潭子区", "pinyin": "tanziqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "T" },
+  { "code": "710442", "name": "大雅区", "pinyin": "dayaqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "D" },
+  { "code": "710443", "name": "神冈区", "pinyin": "shengangqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "S" },
+  { "code": "710444", "name": "大肚区", "pinyin": "daduqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "D" },
+  { "code": "710445", "name": "沙鹿区", "pinyin": "shaluqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "S" },
+  { "code": "710446", "name": "龙井区", "pinyin": "longjingqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "L" },
+  { "code": "710447", "name": "梧栖区", "pinyin": "wuxiqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "W" },
+  { "code": "710448", "name": "清水区", "pinyin": "qingshuiqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "Q" },
+  { "code": "710449", "name": "大甲区", "pinyin": "dajiaqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "D" },
+  { "code": "710450", "name": "外埔区", "pinyin": "waipuqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "W" },
+  { "code": "710451", "name": "大安区", "pinyin": "daanqu", "zip_code": "0", "parent_code": "710400", "type": 2, "first_letter": "D" },
+  { "code": "710600", "name": "南投县", "pinyin": "nantouxian", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "N" },
+  { "code": "710614", "name": "南投市", "pinyin": "nantoushi", "zip_code": "0", "parent_code": "710600", "type": 2, "first_letter": "N" },
+  { "code": "710615", "name": "中寮乡", "pinyin": "zhongliaoxiang", "zip_code": "0", "parent_code": "710600", "type": 2, "first_letter": "Z" },
+  { "code": "710616", "name": "草屯镇", "pinyin": "caotunzhen", "zip_code": "0", "parent_code": "710600", "type": 2, "first_letter": "C" },
+  { "code": "710617", "name": "国姓乡", "pinyin": "guoxingxiang", "zip_code": "0", "parent_code": "710600", "type": 2, "first_letter": "G" },
+  { "code": "710618", "name": "埔里镇", "pinyin": "pulizhen", "zip_code": "0", "parent_code": "710600", "type": 2, "first_letter": "P" },
+  { "code": "710619", "name": "仁爱乡", "pinyin": "renaixiang", "zip_code": "0", "parent_code": "710600", "type": 2, "first_letter": "R" },
+  { "code": "710620", "name": "名间乡", "pinyin": "mingjianxiang", "zip_code": "0", "parent_code": "710600", "type": 2, "first_letter": "M" },
+  { "code": "710621", "name": "集集镇", "pinyin": "jijizhen", "zip_code": "0", "parent_code": "710600", "type": 2, "first_letter": "J" },
+  { "code": "710622", "name": "水里乡", "pinyin": "shuilixiang", "zip_code": "0", "parent_code": "710600", "type": 2, "first_letter": "S" },
+  { "code": "710623", "name": "鱼池乡", "pinyin": "yuchixiang", "zip_code": "0", "parent_code": "710600", "type": 2, "first_letter": "Y" },
+  { "code": "710624", "name": "信义乡", "pinyin": "xinyixiang", "zip_code": "0", "parent_code": "710600", "type": 2, "first_letter": "X" },
+  { "code": "710625", "name": "竹山镇", "pinyin": "zhushanzhen", "zip_code": "0", "parent_code": "710600", "type": 2, "first_letter": "Z" },
+  { "code": "710626", "name": "鹿谷乡", "pinyin": "luguxiang", "zip_code": "0", "parent_code": "710600", "type": 2, "first_letter": "L" },
+  { "code": "710700", "name": "基隆市", "pinyin": "jilongshi", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "J" },
+  { "code": "710701", "name": "仁爱区", "pinyin": "renaiqu", "zip_code": "0", "parent_code": "710700", "type": 2, "first_letter": "R" },
+  { "code": "710702", "name": "信义区", "pinyin": "xinyiqu", "zip_code": "0", "parent_code": "710700", "type": 2, "first_letter": "X" },
+  { "code": "710703", "name": "中正区", "pinyin": "zhongzhengqu", "zip_code": "0", "parent_code": "710700", "type": 2, "first_letter": "Z" },
+  { "code": "710704", "name": "中山区", "pinyin": "zhongshanqu", "zip_code": "0", "parent_code": "710700", "type": 2, "first_letter": "Z" },
+  { "code": "710705", "name": "安乐区", "pinyin": "anlequ", "zip_code": "0", "parent_code": "710700", "type": 2, "first_letter": "A" },
+  { "code": "710706", "name": "暖暖区", "pinyin": "nuannuanqu", "zip_code": "0", "parent_code": "710700", "type": 2, "first_letter": "N" },
+  { "code": "710707", "name": "七堵区", "pinyin": "qiduqu", "zip_code": "0", "parent_code": "710700", "type": 2, "first_letter": "Q" },
+  { "code": "710800", "name": "新竹市", "pinyin": "xinzhushi", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "X" },
+  { "code": "710801", "name": "东区", "pinyin": "dongqu", "zip_code": "0", "parent_code": "710800", "type": 2, "first_letter": "D" },
+  { "code": "710802", "name": "北区", "pinyin": "beiqu", "zip_code": "0", "parent_code": "710800", "type": 2, "first_letter": "B" },
+  { "code": "710803", "name": "香山区", "pinyin": "xiangshanqu", "zip_code": "0", "parent_code": "710800", "type": 2, "first_letter": "X" },
+  { "code": "710900", "name": "嘉义市", "pinyin": "jiayishi", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "J" },
+  { "code": "710901", "name": "东区", "pinyin": "dongqu", "zip_code": "0", "parent_code": "710900", "type": 2, "first_letter": "D" },
+  { "code": "710902", "name": "西区", "pinyin": "xiqu", "zip_code": "0", "parent_code": "710900", "type": 2, "first_letter": "X" },
+  { "code": "711100", "name": "新北市", "pinyin": "xinbeishi", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "X" },
+  { "code": "711130", "name": "万里区", "pinyin": "wanliqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "W" },
+  { "code": "711131", "name": "金山区", "pinyin": "jinshanqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "J" },
+  { "code": "711132", "name": "板桥区", "pinyin": "banqiaoqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "B" },
+  { "code": "711133", "name": "汐止区", "pinyin": "xizhiqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "X" },
+  { "code": "711134", "name": "深坑区", "pinyin": "shenkengqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "S" },
+  { "code": "711135", "name": "石碇区", "pinyin": "shidingqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "S" },
+  { "code": "711136", "name": "瑞芳区", "pinyin": "ruifangqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "R" },
+  { "code": "711137", "name": "平溪区", "pinyin": "pingxiqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "P" },
+  { "code": "711138", "name": "双溪区", "pinyin": "shuangxiqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "S" },
+  { "code": "711139", "name": "贡寮区", "pinyin": "gongliaoqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "G" },
+  { "code": "711140", "name": "新店区", "pinyin": "xindianqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "X" },
+  { "code": "711141", "name": "坪林区", "pinyin": "pinglinqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "P" },
+  { "code": "711142", "name": "乌来区", "pinyin": "wulaiqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "W" },
+  { "code": "711143", "name": "永和区", "pinyin": "yonghequ", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "Y" },
+  { "code": "711144", "name": "中和区", "pinyin": "zhonghequ", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "Z" },
+  { "code": "711145", "name": "土城区", "pinyin": "tuchengqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "T" },
+  { "code": "711146", "name": "三峡区", "pinyin": "sanxiaqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "S" },
+  { "code": "711147", "name": "树林区", "pinyin": "shulinqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "S" },
+  { "code": "711148", "name": "莺歌区", "pinyin": "yinggequ", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "Y" },
+  { "code": "711149", "name": "三重区", "pinyin": "sanchongqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "S" },
+  { "code": "711150", "name": "新庄区", "pinyin": "xinzhuangqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "X" },
+  { "code": "711151", "name": "泰山区", "pinyin": "taishanqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "T" },
+  { "code": "711152", "name": "林口区", "pinyin": "linkouqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "L" },
+  { "code": "711153", "name": "芦洲区", "pinyin": "luzhouqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "L" },
+  { "code": "711154", "name": "五股区", "pinyin": "wuguqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "W" },
+  { "code": "711155", "name": "八里区", "pinyin": "baliqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "B" },
+  { "code": "711156", "name": "淡水区", "pinyin": "danshuiqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "D" },
+  { "code": "711157", "name": "三芝区", "pinyin": "sanzhiqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "S" },
+  { "code": "711158", "name": "石门区", "pinyin": "shimenqu", "zip_code": "0", "parent_code": "711100", "type": 2, "first_letter": "S" },
+  { "code": "711200", "name": "宜兰县", "pinyin": "yilanxian", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "Y" },
+  { "code": "711214", "name": "宜兰市", "pinyin": "yilanshi", "zip_code": "0", "parent_code": "711200", "type": 2, "first_letter": "Y" },
+  { "code": "711215", "name": "头城镇", "pinyin": "touchengzhen", "zip_code": "0", "parent_code": "711200", "type": 2, "first_letter": "T" },
+  { "code": "711216", "name": "礁溪乡", "pinyin": "jiaoxixiang", "zip_code": "0", "parent_code": "711200", "type": 2, "first_letter": "J" },
+  { "code": "711217", "name": "壮围乡", "pinyin": "zhuangweixiang", "zip_code": "0", "parent_code": "711200", "type": 2, "first_letter": "Z" },
+  { "code": "711218", "name": "员山乡", "pinyin": "yuanshanxiang", "zip_code": "0", "parent_code": "711200", "type": 2, "first_letter": "Y" },
+  { "code": "711219", "name": "罗东镇", "pinyin": "luodongzhen", "zip_code": "0", "parent_code": "711200", "type": 2, "first_letter": "L" },
+  { "code": "711220", "name": "三星乡", "pinyin": "sanxingxiang", "zip_code": "0", "parent_code": "711200", "type": 2, "first_letter": "S" },
+  { "code": "711221", "name": "大同乡", "pinyin": "datongxiang", "zip_code": "0", "parent_code": "711200", "type": 2, "first_letter": "D" },
+  { "code": "711222", "name": "五结乡", "pinyin": "wujiexiang", "zip_code": "0", "parent_code": "711200", "type": 2, "first_letter": "W" },
+  { "code": "711223", "name": "冬山乡", "pinyin": "dongshanxiang", "zip_code": "0", "parent_code": "711200", "type": 2, "first_letter": "D" },
+  { "code": "711224", "name": "苏澳镇", "pinyin": "suaozhen", "zip_code": "0", "parent_code": "711200", "type": 2, "first_letter": "S" },
+  { "code": "711225", "name": "南澳乡", "pinyin": "nanaoxiang", "zip_code": "0", "parent_code": "711200", "type": 2, "first_letter": "N" },
+  { "code": "711300", "name": "新竹县", "pinyin": "xinzhuxian", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "X" },
+  { "code": "711314", "name": "竹北市", "pinyin": "zhubeishi", "zip_code": "0", "parent_code": "711300", "type": 2, "first_letter": "Z" },
+  { "code": "711315", "name": "湖口乡", "pinyin": "hukouxiang", "zip_code": "0", "parent_code": "711300", "type": 2, "first_letter": "H" },
+  { "code": "711316", "name": "新丰乡", "pinyin": "xinfengxiang", "zip_code": "0", "parent_code": "711300", "type": 2, "first_letter": "X" },
+  { "code": "711317", "name": "新埔镇", "pinyin": "xinpuzhen", "zip_code": "0", "parent_code": "711300", "type": 2, "first_letter": "X" },
+  { "code": "711318", "name": "关西镇", "pinyin": "guanxizhen", "zip_code": "0", "parent_code": "711300", "type": 2, "first_letter": "G" },
+  { "code": "711319", "name": "芎林乡", "pinyin": "xionglinxiang", "zip_code": "0", "parent_code": "711300", "type": 2, "first_letter": "X" },
+  { "code": "711320", "name": "宝山乡", "pinyin": "baoshanxiang", "zip_code": "0", "parent_code": "711300", "type": 2, "first_letter": "B" },
+  { "code": "711321", "name": "竹东镇", "pinyin": "zhudongzhen", "zip_code": "0", "parent_code": "711300", "type": 2, "first_letter": "Z" },
+  { "code": "711322", "name": "五峰乡", "pinyin": "wufengxiang", "zip_code": "0", "parent_code": "711300", "type": 2, "first_letter": "W" },
+  { "code": "711323", "name": "横山乡", "pinyin": "hengshanxiang", "zip_code": "0", "parent_code": "711300", "type": 2, "first_letter": "H" },
+  { "code": "711324", "name": "尖石乡", "pinyin": "jianshixiang", "zip_code": "0", "parent_code": "711300", "type": 2, "first_letter": "J" },
+  { "code": "711325", "name": "北埔乡", "pinyin": "beipuxiang", "zip_code": "0", "parent_code": "711300", "type": 2, "first_letter": "B" },
+  { "code": "711326", "name": "峨眉乡", "pinyin": "emeixiang", "zip_code": "0", "parent_code": "711300", "type": 2, "first_letter": "E" },
+  { "code": "711400", "name": "桃园市", "pinyin": "taoyuanshi", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "T" },
+  { "code": "711414", "name": "中坜区", "pinyin": "zhongliqu", "zip_code": "0", "parent_code": "711400", "type": 2, "first_letter": "Z" },
+  { "code": "711415", "name": "平镇区", "pinyin": "pingzhenqu", "zip_code": "0", "parent_code": "711400", "type": 2, "first_letter": "P" },
+  { "code": "711416", "name": "龙潭区", "pinyin": "longtanqu", "zip_code": "0", "parent_code": "711400", "type": 2, "first_letter": "L" },
+  { "code": "711417", "name": "杨梅区", "pinyin": "yangmeiqu", "zip_code": "0", "parent_code": "711400", "type": 2, "first_letter": "Y" },
+  { "code": "711418", "name": "新屋区", "pinyin": "xinwuqu", "zip_code": "0", "parent_code": "711400", "type": 2, "first_letter": "X" },
+  { "code": "711419", "name": "观音区", "pinyin": "guanyinqu", "zip_code": "0", "parent_code": "711400", "type": 2, "first_letter": "G" },
+  { "code": "711420", "name": "桃园区", "pinyin": "taoyuanqu", "zip_code": "0", "parent_code": "711400", "type": 2, "first_letter": "T" },
+  { "code": "711421", "name": "龟山区", "pinyin": "guishanqu", "zip_code": "0", "parent_code": "711400", "type": 2, "first_letter": "G" },
+  { "code": "711422", "name": "八德区", "pinyin": "badequ", "zip_code": "0", "parent_code": "711400", "type": 2, "first_letter": "B" },
+  { "code": "711423", "name": "大溪区", "pinyin": "daxiqu", "zip_code": "0", "parent_code": "711400", "type": 2, "first_letter": "D" },
+  { "code": "711424", "name": "复兴区", "pinyin": "fuxingqu", "zip_code": "0", "parent_code": "711400", "type": 2, "first_letter": "F" },
+  { "code": "711425", "name": "大园区", "pinyin": "dayuanqu", "zip_code": "0", "parent_code": "711400", "type": 2, "first_letter": "D" },
+  { "code": "711426", "name": "芦竹区", "pinyin": "luzhuqu", "zip_code": "0", "parent_code": "711400", "type": 2, "first_letter": "L" },
+  { "code": "711500", "name": "苗栗县", "pinyin": "miaolixian", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "M" },
+  { "code": "711519", "name": "竹南镇", "pinyin": "zhunanzhen", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "Z" },
+  { "code": "711520", "name": "头份市", "pinyin": "toufenshi", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "T" },
+  { "code": "711521", "name": "三湾乡", "pinyin": "sanwanxiang", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "S" },
+  { "code": "711522", "name": "南庄乡", "pinyin": "nanzhuangxiang", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "N" },
+  { "code": "711523", "name": "狮潭乡", "pinyin": "shitanxiang", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "S" },
+  { "code": "711524", "name": "后龙镇", "pinyin": "houlongzhen", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "H" },
+  { "code": "711525", "name": "通霄镇", "pinyin": "tongxiaozhen", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "T" },
+  { "code": "711526", "name": "苑里镇", "pinyin": "yuanlizhen", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "Y" },
+  { "code": "711527", "name": "苗栗市", "pinyin": "miaolishi", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "M" },
+  { "code": "711528", "name": "造桥乡", "pinyin": "zaoqiaoxiang", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "Z" },
+  { "code": "711529", "name": "头屋乡", "pinyin": "touwuxiang", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "T" },
+  { "code": "711530", "name": "公馆乡", "pinyin": "gongguanxiang", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "G" },
+  { "code": "711531", "name": "大湖乡", "pinyin": "dahuxiang", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "D" },
+  { "code": "711532", "name": "泰安乡", "pinyin": "taianxiang", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "T" },
+  { "code": "711533", "name": "铜锣乡", "pinyin": "tongluoxiang", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "T" },
+  { "code": "711534", "name": "三义乡", "pinyin": "sanyixiang", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "S" },
+  { "code": "711535", "name": "西湖乡", "pinyin": "xihuxiang", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "X" },
+  { "code": "711536", "name": "卓兰镇", "pinyin": "zhuolanzhen", "zip_code": "0", "parent_code": "711500", "type": 2, "first_letter": "Z" },
+  { "code": "711700", "name": "彰化县", "pinyin": "zhanghuaxian", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "Z" },
+  { "code": "711727", "name": "彰化市", "pinyin": "zhanghuashi", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "Z" },
+  { "code": "711728", "name": "芬园乡", "pinyin": "fenyuanxiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "F" },
+  { "code": "711729", "name": "花坛乡", "pinyin": "huatanxiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "H" },
+  { "code": "711730", "name": "秀水乡", "pinyin": "xiushuixiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "X" },
+  { "code": "711731", "name": "鹿港镇", "pinyin": "lugangzhen", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "L" },
+  { "code": "711732", "name": "福兴乡", "pinyin": "fuxingxiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "F" },
+  { "code": "711733", "name": "线西乡", "pinyin": "xianxixiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "X" },
+  { "code": "711734", "name": "和美镇", "pinyin": "hemeizhen", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "H" },
+  { "code": "711735", "name": "伸港乡", "pinyin": "shengangxiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "S" },
+  { "code": "711736", "name": "员林市", "pinyin": "yuanlinshi", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "Y" },
+  { "code": "711737", "name": "社头乡", "pinyin": "shetouxiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "S" },
+  { "code": "711738", "name": "永靖乡", "pinyin": "yongjingxiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "Y" },
+  { "code": "711739", "name": "埔心乡", "pinyin": "puxinxiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "P" },
+  { "code": "711740", "name": "溪湖镇", "pinyin": "xihuzhen", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "X" },
+  { "code": "711741", "name": "大村乡", "pinyin": "dacunxiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "D" },
+  { "code": "711742", "name": "埔盐乡", "pinyin": "puyanxiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "P" },
+  { "code": "711743", "name": "田中镇", "pinyin": "tianzhongzhen", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "T" },
+  { "code": "711744", "name": "北斗镇", "pinyin": "beidouzhen", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "B" },
+  { "code": "711745", "name": "田尾乡", "pinyin": "tianweixiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "T" },
+  { "code": "711746", "name": "埤头乡", "pinyin": "pitouxiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "P" },
+  { "code": "711747", "name": "溪州乡", "pinyin": "xizhouxiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "X" },
+  { "code": "711748", "name": "竹塘乡", "pinyin": "zhutangxiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "Z" },
+  { "code": "711749", "name": "二林镇", "pinyin": "erlinzhen", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "E" },
+  { "code": "711750", "name": "大城乡", "pinyin": "dachengxiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "D" },
+  { "code": "711751", "name": "芳苑乡", "pinyin": "fangyuanxiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "F" },
+  { "code": "711752", "name": "二水乡", "pinyin": "ershuixiang", "zip_code": "0", "parent_code": "711700", "type": 2, "first_letter": "E" },
+  { "code": "711900", "name": "嘉义县", "pinyin": "jiayixian", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "J" },
+  { "code": "711919", "name": "番路乡", "pinyin": "fanluxiang", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "F" },
+  { "code": "711920", "name": "梅山乡", "pinyin": "meishanxiang", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "M" },
+  { "code": "711921", "name": "竹崎乡", "pinyin": "zhuqixiang", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "Z" },
+  { "code": "711922", "name": "阿里山乡", "pinyin": "alishanxiang", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "A" },
+  { "code": "711923", "name": "中埔乡", "pinyin": "zhongpuxiang", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "Z" },
+  { "code": "711924", "name": "大埔乡", "pinyin": "dapuxiang", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "D" },
+  { "code": "711925", "name": "水上乡", "pinyin": "shuishangxiang", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "S" },
+  { "code": "711926", "name": "鹿草乡", "pinyin": "lucaoxiang", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "L" },
+  { "code": "711927", "name": "太保市", "pinyin": "taibaoshi", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "T" },
+  { "code": "711928", "name": "朴子市", "pinyin": "puzishi", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "P" },
+  { "code": "711929", "name": "东石乡", "pinyin": "dongshixiang", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "D" },
+  { "code": "711930", "name": "六脚乡", "pinyin": "liujiaoxiang", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "L" },
+  { "code": "711931", "name": "新港乡", "pinyin": "xingangxiang", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "X" },
+  { "code": "711932", "name": "民雄乡", "pinyin": "minxiongxiang", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "M" },
+  { "code": "711933", "name": "大林镇", "pinyin": "dalinzhen", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "D" },
+  { "code": "711934", "name": "溪口乡", "pinyin": "xikouxiang", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "X" },
+  { "code": "711935", "name": "义竹乡", "pinyin": "yizhuxiang", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "Y" },
+  { "code": "711936", "name": "布袋镇", "pinyin": "budaizhen", "zip_code": "0", "parent_code": "711900", "type": 2, "first_letter": "B" },
+  { "code": "712100", "name": "云林县", "pinyin": "yunlinxian", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "Y" },
+  { "code": "712121", "name": "斗南镇", "pinyin": "dounanzhen", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "D" },
+  { "code": "712122", "name": "大埤乡", "pinyin": "dapixiang", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "D" },
+  { "code": "712123", "name": "虎尾镇", "pinyin": "huweizhen", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "H" },
+  { "code": "712124", "name": "土库镇", "pinyin": "tukuzhen", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "T" },
+  { "code": "712125", "name": "褒忠乡", "pinyin": "baozhongxiang", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "B" },
+  { "code": "712126", "name": "东势乡", "pinyin": "dongshixiang", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "D" },
+  { "code": "712127", "name": "台西乡", "pinyin": "taixixiang", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "T" },
+  { "code": "712128", "name": "仑背乡", "pinyin": "lunbeixiang", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "L" },
+  { "code": "712129", "name": "麦寮乡", "pinyin": "mailiaoxiang", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "M" },
+  { "code": "712130", "name": "斗六市", "pinyin": "douliushi", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "D" },
+  { "code": "712131", "name": "林内乡", "pinyin": "linneixiang", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "L" },
+  { "code": "712132", "name": "古坑乡", "pinyin": "gukengxiang", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "G" },
+  { "code": "712133", "name": "莿桐乡", "pinyin": "citongxiang", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "C" },
+  { "code": "712134", "name": "西螺镇", "pinyin": "xiluozhen", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "X" },
+  { "code": "712135", "name": "二仑乡", "pinyin": "erlunxiang", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "E" },
+  { "code": "712136", "name": "北港镇", "pinyin": "beigangzhen", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "B" },
+  { "code": "712137", "name": "水林乡", "pinyin": "shuilinxiang", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "S" },
+  { "code": "712138", "name": "口湖乡", "pinyin": "kouhuxiang", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "K" },
+  { "code": "712139", "name": "四湖乡", "pinyin": "sihuxiang", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "S" },
+  { "code": "712140", "name": "元长乡", "pinyin": "yuanchangxiang", "zip_code": "0", "parent_code": "712100", "type": 2, "first_letter": "Y" },
+  { "code": "712400", "name": "屏东县", "pinyin": "pingdongxian", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "P" },
+  { "code": "712434", "name": "屏东市", "pinyin": "pingdongshi", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "P" },
+  { "code": "712435", "name": "三地门乡", "pinyin": "sandimenxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "S" },
+  { "code": "712436", "name": "雾台乡", "pinyin": "wutaixiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "W" },
+  { "code": "712437", "name": "玛家乡", "pinyin": "majiaxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "M" },
+  { "code": "712438", "name": "九如乡", "pinyin": "jiuruxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "J" },
+  { "code": "712439", "name": "里港乡", "pinyin": "ligangxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "L" },
+  { "code": "712440", "name": "高树乡", "pinyin": "gaoshuxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "G" },
+  { "code": "712441", "name": "盐埔乡", "pinyin": "yanpuxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "Y" },
+  { "code": "712442", "name": "长治乡", "pinyin": "changzhixiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "C" },
+  { "code": "712443", "name": "麟洛乡", "pinyin": "linluoxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "L" },
+  { "code": "712444", "name": "竹田乡", "pinyin": "zhutianxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "Z" },
+  { "code": "712445", "name": "内埔乡", "pinyin": "neipuxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "N" },
+  { "code": "712446", "name": "万丹乡", "pinyin": "wandanxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "W" },
+  { "code": "712447", "name": "潮州镇", "pinyin": "chaozhouzhen", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "C" },
+  { "code": "712448", "name": "泰武乡", "pinyin": "taiwuxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "T" },
+  { "code": "712449", "name": "来义乡", "pinyin": "laiyixiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "L" },
+  { "code": "712450", "name": "万峦乡", "pinyin": "wanluanxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "W" },
+  { "code": "712451", "name": "崁顶乡", "pinyin": "kandingxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "K" },
+  { "code": "712452", "name": "新埤乡", "pinyin": "xinpixiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "X" },
+  { "code": "712453", "name": "南州乡", "pinyin": "nanzhouxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "N" },
+  { "code": "712454", "name": "林边乡", "pinyin": "linbianxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "L" },
+  { "code": "712455", "name": "东港镇", "pinyin": "donggangzhen", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "D" },
+  { "code": "712456", "name": "琉球乡", "pinyin": "liuqiuxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "L" },
+  { "code": "712457", "name": "佳冬乡", "pinyin": "jiadongxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "J" },
+  { "code": "712458", "name": "新园乡", "pinyin": "xinyuanxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "X" },
+  { "code": "712459", "name": "枋寮乡", "pinyin": "fangliaoxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "F" },
+  { "code": "712460", "name": "枋山乡", "pinyin": "fangshanxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "F" },
+  { "code": "712461", "name": "春日乡", "pinyin": "chunrixiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "C" },
+  { "code": "712462", "name": "狮子乡", "pinyin": "shizixiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "S" },
+  { "code": "712463", "name": "车城乡", "pinyin": "chechengxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "C" },
+  { "code": "712464", "name": "牡丹乡", "pinyin": "mudanxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "M" },
+  { "code": "712465", "name": "恒春镇", "pinyin": "hengchunzhen", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "H" },
+  { "code": "712466", "name": "满州乡", "pinyin": "manzhouxiang", "zip_code": "0", "parent_code": "712400", "type": 2, "first_letter": "M" },
+  { "code": "712500", "name": "台东县", "pinyin": "taidongxian", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "T" },
+  { "code": "712517", "name": "台东市", "pinyin": "taidongshi", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "T" },
+  { "code": "712518", "name": "绿岛乡", "pinyin": "lvdaoxiang", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "L" },
+  { "code": "712519", "name": "兰屿乡", "pinyin": "lanyuxiang", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "L" },
+  { "code": "712520", "name": "延平乡", "pinyin": "yanpingxiang", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "Y" },
+  { "code": "712521", "name": "卑南乡", "pinyin": "beinanxiang", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "B" },
+  { "code": "712522", "name": "鹿野乡", "pinyin": "luyexiang", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "L" },
+  { "code": "712523", "name": "关山镇", "pinyin": "guanshanzhen", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "G" },
+  { "code": "712524", "name": "海端乡", "pinyin": "haiduanxiang", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "H" },
+  { "code": "712525", "name": "池上乡", "pinyin": "chishangxiang", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "C" },
+  { "code": "712526", "name": "东河乡", "pinyin": "donghexiang", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "D" },
+  { "code": "712527", "name": "成功镇", "pinyin": "chenggongzhen", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "C" },
+  { "code": "712528", "name": "长滨乡", "pinyin": "changbinxiang", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "C" },
+  { "code": "712529", "name": "金峰乡", "pinyin": "jinfengxiang", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "J" },
+  { "code": "712530", "name": "大武乡", "pinyin": "dawuxiang", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "D" },
+  { "code": "712531", "name": "达仁乡", "pinyin": "darenxiang", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "D" },
+  { "code": "712532", "name": "太麻里乡", "pinyin": "taimalixiang", "zip_code": "0", "parent_code": "712500", "type": 2, "first_letter": "T" },
+  { "code": "712600", "name": "花莲县", "pinyin": "hualianxian", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "H" },
+  { "code": "712615", "name": "花莲市", "pinyin": "hualianshi", "zip_code": "0", "parent_code": "712600", "type": 2, "first_letter": "H" },
+  { "code": "712616", "name": "新城乡", "pinyin": "xinchengxiang", "zip_code": "0", "parent_code": "712600", "type": 2, "first_letter": "X" },
+  { "code": "712618", "name": "秀林乡", "pinyin": "xiulinxiang", "zip_code": "0", "parent_code": "712600", "type": 2, "first_letter": "X" },
+  { "code": "712619", "name": "吉安乡", "pinyin": "jianxiang", "zip_code": "0", "parent_code": "712600", "type": 2, "first_letter": "J" },
+  { "code": "712620", "name": "寿丰乡", "pinyin": "shoufengxiang", "zip_code": "0", "parent_code": "712600", "type": 2, "first_letter": "S" },
+  { "code": "712621", "name": "凤林镇", "pinyin": "fenglinzhen", "zip_code": "0", "parent_code": "712600", "type": 2, "first_letter": "F" },
+  { "code": "712622", "name": "光复乡", "pinyin": "guangfuxiang", "zip_code": "0", "parent_code": "712600", "type": 2, "first_letter": "G" },
+  { "code": "712623", "name": "丰滨乡", "pinyin": "fengbinxiang", "zip_code": "0", "parent_code": "712600", "type": 2, "first_letter": "F" },
+  { "code": "712624", "name": "瑞穗乡", "pinyin": "ruisuixiang", "zip_code": "0", "parent_code": "712600", "type": 2, "first_letter": "R" },
+  { "code": "712625", "name": "万荣乡", "pinyin": "wanrongxiang", "zip_code": "0", "parent_code": "712600", "type": 2, "first_letter": "W" },
+  { "code": "712626", "name": "玉里镇", "pinyin": "yulizhen", "zip_code": "0", "parent_code": "712600", "type": 2, "first_letter": "Y" },
+  { "code": "712627", "name": "卓溪乡", "pinyin": "zhuoxixiang", "zip_code": "0", "parent_code": "712600", "type": 2, "first_letter": "Z" },
+  { "code": "712628", "name": "富里乡", "pinyin": "fulixiang", "zip_code": "0", "parent_code": "712600", "type": 2, "first_letter": "F" },
+  { "code": "712700", "name": "澎湖县", "pinyin": "penghuxian", "zip_code": "0", "parent_code": "710000", "type": 1, "first_letter": "P" },
+  { "code": "712707", "name": "马公市", "pinyin": "magongshi", "zip_code": "0", "parent_code": "712700", "type": 2, "first_letter": "M" },
+  { "code": "712708", "name": "西屿乡", "pinyin": "xiyuxiang", "zip_code": "0", "parent_code": "712700", "type": 2, "first_letter": "X" },
+  { "code": "712709", "name": "望安乡", "pinyin": "wanganxiang", "zip_code": "0", "parent_code": "712700", "type": 2, "first_letter": "W" },
+  { "code": "712710", "name": "七美乡", "pinyin": "qimeixiang", "zip_code": "0", "parent_code": "712700", "type": 2, "first_letter": "Q" },
+  { "code": "712711", "name": "白沙乡", "pinyin": "baishaxiang", "zip_code": "0", "parent_code": "712700", "type": 2, "first_letter": "B" },
+  { "code": "712712", "name": "湖西乡", "pinyin": "huxixiang", "zip_code": "0", "parent_code": "712700", "type": 2, "first_letter": "H" },
+  { "code": "810000", "name": "香港特别行政区", "pinyin": "xianggangtebiexingzhengqu", "zip_code": "0", "type": 0, "first_letter": "X" },
+  { "code": "810100", "name": "香港特别行政区", "pinyin": "xianggangtebiexingzhengqu", "zip_code": "0", "parent_code": "810000", "type": 1, "first_letter": "X" },
+  { "code": "810101", "name": "中西区", "pinyin": "zhongxiqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "Z" },
+  { "code": "810102", "name": "东区", "pinyin": "dongqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "D" },
+  { "code": "810103", "name": "九龙城区", "pinyin": "jiulongchengqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "J" },
+  { "code": "810104", "name": "观塘区", "pinyin": "guantangqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "G" },
+  { "code": "810105", "name": "南区", "pinyin": "nanqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "N" },
+  { "code": "810106", "name": "深水埗区", "pinyin": "shenshuibuqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "S" },
+  { "code": "810107", "name": "湾仔区", "pinyin": "wanzaiqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "W" },
+  { "code": "810108", "name": "黄大仙区", "pinyin": "huangdaxianqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "H" },
+  { "code": "810109", "name": "油尖旺区", "pinyin": "youjianwangqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "Y" },
+  { "code": "810110", "name": "离岛区", "pinyin": "lidaoqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "L" },
+  { "code": "810111", "name": "葵青区", "pinyin": "kuiqingqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "K" },
+  { "code": "810112", "name": "北区", "pinyin": "beiqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "B" },
+  { "code": "810113", "name": "西贡区", "pinyin": "xigongqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "X" },
+  { "code": "810114", "name": "沙田区", "pinyin": "shatianqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "S" },
+  { "code": "810115", "name": "屯门区", "pinyin": "tunmenqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "T" },
+  { "code": "810116", "name": "大埔区", "pinyin": "dapuqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "D" },
+  { "code": "810117", "name": "荃湾区", "pinyin": "quanwanqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "Q" },
+  { "code": "810118", "name": "元朗区", "pinyin": "yuanlangqu", "zip_code": "0", "parent_code": "810100", "type": 2, "first_letter": "Y" },
+  { "code": "820000", "name": "澳门特别行政区", "pinyin": "aomentebiexingzhengqu", "zip_code": "0", "type": 0, "first_letter": "A" },
+  { "code": "820100", "name": "澳门特别行政区", "pinyin": "aomentebiexingzhengqu", "zip_code": "0", "parent_code": "820000", "type": 1, "first_letter": "A" },
+  { "code": "820101", "name": "澳门半岛", "pinyin": "aomenbandao", "zip_code": "0", "parent_code": "820100", "type": 2, "first_letter": "A" },
+  { "code": "820102", "name": "凼仔", "pinyin": "dangzai", "zip_code": "0", "parent_code": "820100", "type": 2, "first_letter": "D" },
+  { "code": "820103", "name": "路凼城", "pinyin": "ludangcheng", "zip_code": "0", "parent_code": "820100", "type": 2, "first_letter": "L" },
+  { "code": "820104", "name": "路环", "pinyin": "luhuan", "zip_code": "0", "parent_code": "820100", "type": 2, "first_letter": "L" }
+]

+ 72 - 0
utils/dateUtils.js

@@ -0,0 +1,72 @@
+// utils/dateUtils.js
+
+/**
+ * 智能时间格式化:返回 "今天 18:00"、"昨天 18:00" 等
+ */
+export function formatSmartTime(timeStr) {
+  if (!timeStr) return '未知';
+
+  // iOS兼容格式
+  const safeStr = timeStr.replace(' ', 'T');
+  const inputDate = new Date(safeStr);
+  if (isNaN(inputDate.getTime())) return '时间格式错误';
+
+  const now = new Date();
+  const inputDayStart = new Date(inputDate.getFullYear(), inputDate.getMonth(), inputDate.getDate());
+  const nowDayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate());
+
+  const diffTime = nowDayStart - inputDayStart;
+  const oneDay = 1000 * 60 * 60 * 24;
+
+  const timePart = inputDate.toTimeString().slice(0, 5); // HH:mm
+
+  if (diffTime === 0) {
+    return `今天 ${timePart}`;
+  } else if (diffTime === oneDay) {
+    return `昨天 ${timePart}`;
+  } else if (diffTime === oneDay * 2) {
+    return `前天 ${timePart}`;
+  } else {
+    return `${inputDate.getMonth() + 1}月${inputDate.getDate()}日 ${timePart}`;
+  }
+}
+
+/**
+ * 相对时间格式化:返回 "刚刚更新"、"5分钟前更新"、"3天前更新" 等
+ */
+export function formatDate(dateStr) {
+  if (!dateStr) return '未知';
+
+  const parsedStr = dateStr.replace(' ', 'T');
+  const date = new Date(parsedStr);
+  if (isNaN(date.getTime())) return '无效时间';
+
+  const now = new Date();
+  const diff = Math.floor((now - date) / 1000 / 60); // 单位:分钟
+
+  if (diff < 1) return '刚刚更新';
+  if (diff < 5) return '1分钟前更新';
+  if (diff < 10) return '5分钟前更新';
+  if (diff < 60) return `${diff}分钟前更新`;
+
+  if (diff < 120) return '1小时前更新';
+  if (diff < 24 * 60) return `${Math.floor(diff / 60)}小时前更新`;
+  if (diff < 7 * 24 * 60) return `${Math.floor(diff / (60 * 24))}天前更新`;
+
+  return parsedStr.split('T')[0] + ' 更新';
+}
+
+export function getFormattedTime() {
+  const now = new Date();
+  const pad = n => n < 10 ? '0' + n : n;
+
+  const year = now.getFullYear();
+  const month = pad(now.getMonth() + 1);
+  const day = pad(now.getDate());
+
+  const hours = pad(now.getHours());
+  const minutes = pad(now.getMinutes());
+  const seconds = pad(now.getSeconds());
+
+  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+}

+ 562 - 0
utils/filters.js

@@ -0,0 +1,562 @@
+/**
+ * 通用过滤器和工具函数
+ * Vue 3 版本 - 过滤器已转换为普通函数
+ * 
+ * 注意: Vue3 移除了过滤器功能,这些函数应该作为方法或全局方法使用
+ * 在 main.js 中通过 app.config.globalProperties 注册为全局方法
+ */
+
+import storage from "@/utils/storage.js";
+import Foundation from "./Foundation.js";
+
+/**
+ * 金钱单位置换  2999 --> 2,999.00
+ * @param val
+ * @param unit
+ * @param location
+ * @returns {*}
+ */
+export function unitPrice (val, unit, location) {
+  if (!val) val = 0;
+  let price = Foundation.formatPrice(val);
+  if (location === "before") {
+    return price.substr(0, price.length - 3);
+  }
+  if (location === "after") {
+    return price.substr(-2);
+  }
+  return (unit || "") + price;
+}
+
+/**
+ * 格式化价格  1999 --> [1999,00]
+ * @param {*} val
+ * @returns
+ */
+export function goodsFormatPrice (val) {
+  if (typeof val == "undefined") {
+    return val;
+  }
+  let valNum = new Number(val);
+  return valNum.toFixed(2).split(".");
+}
+
+
+/**
+ * 将内容复制到粘贴板
+ */
+import { h5Copy } from "@/utils/js_sdk/h5-copy/h5-copy.js";
+export function setClipboard (val) {
+  // #ifdef H5
+  if (val === null || val === undefined) {
+    val = "";
+  } else val = val + "";
+  const result = h5Copy(val);
+  if (result === false) {
+    uni.showToast({
+      title: "不支持",
+    });
+  } else {
+    uni.showToast({
+      title: "复制成功",
+      icon: "none",
+    });
+  }
+  // #endif
+
+  // #ifndef H5
+  uni.setClipboardData({
+    data: val,
+    success: function () {
+      uni.showToast({
+        title: "复制成功!",
+        duration: 2000,
+        icon: "none",
+      });
+    },
+  });
+  // #endif
+}
+
+/**
+ * 拨打电话
+ */
+
+export function callPhone (phoneNumber) {
+  uni.makePhoneCall({
+    phoneNumber: phoneNumber,
+  });
+}
+
+/**
+ * 脱敏姓名
+ */
+
+export function noPassByName (str) {
+  if (null != str && str != undefined) {
+    if (str.length <= 3) {
+      return "*" + str.substring(1, str.length);
+    } else if (str.length > 3 && str.length <= 6) {
+      return "**" + str.substring(2, str.length);
+    } else if (str.length > 6) {
+      return str.substring(0, 2) + "****" + str.substring(6, str.length);
+    }
+  } else {
+    return "";
+  }
+}
+
+/**
+ * 处理unix时间戳,转换为可阅读时间格式
+ * @param unix
+ * @param format
+ * @returns {*|string}
+ */
+export function unixToDate (unix, format) {
+  let _format = format || "yyyy-MM-dd hh:mm:ss";
+  const d = new Date(unix * 1000);
+  const o = {
+    "M+": d.getMonth() + 1,
+    "d+": d.getDate(),
+    "h+": d.getHours(),
+    "m+": d.getMinutes(),
+    "s+": d.getSeconds(),
+    "q+": Math.floor((d.getMonth() + 3) / 3),
+    S: d.getMilliseconds(),
+  };
+  if (/(y+)/.test(_format))
+    _format = _format.replace(
+      RegExp.$1,
+      (d.getFullYear() + "").substr(4 - RegExp.$1.length)
+    );
+  for (const k in o)
+    if (new RegExp("(" + k + ")").test(_format))
+      _format = _format.replace(
+        RegExp.$1,
+        RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)
+      );
+  return _format;
+}
+
+/**
+ * 人性化显示时间
+ *
+ * @param {Object} datetime
+ */
+export function beautifyTime (datetime = "") {
+  if (datetime == null || datetime == undefined || !datetime) {
+    return "";
+  }
+  datetime = timestampToTime(datetime).replace(/-/g, "/");
+
+  let time = new Date();
+  let outTime = new Date(datetime);
+  if (/^[1-9]\d*$/.test(datetime)) {
+    outTime = new Date(parseInt(datetime) * 1000);
+  }
+
+  if (time.getTime() < outTime.getTime()) {
+    return parseTime(outTime, "{y}/{m}/{d}");
+  }
+
+  if (time.getFullYear() != outTime.getFullYear()) {
+    return parseTime(outTime, "{y}/{m}/{d}");
+  }
+
+  if (time.getMonth() != outTime.getMonth()) {
+    return parseTime(outTime, "{m}/{d}");
+  }
+
+  if (time.getDate() != outTime.getDate()) {
+    let day = outTime.getDate() - time.getDate();
+    if (day == -1) {
+      return parseTime(outTime, "昨天 {h}:{i}");
+    }
+
+    if (day == -2) {
+      return parseTime(outTime, "前天 {h}:{i}");
+    }
+
+    return parseTime(outTime, "{m}-{d}");
+  }
+
+  if (time.getHours() != outTime.getHours()) {
+    return parseTime(outTime, "{h}:{i}");
+  }
+
+  let minutes = outTime.getMinutes() - time.getMinutes();
+  if (minutes == 0) {
+    return "刚刚";
+  }
+
+  minutes = Math.abs(minutes);
+  return `${minutes}分钟前`;
+}
+// 时间转换
+function timestampToTime (timestamp) {
+  var date = new Date(timestamp);//时间戳为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();
+  return Y + M + D + h + m + s;
+}
+
+/**
+ * 13888888888 -> 138****8888
+ * @param mobile
+ * @returns {*}
+ */
+export function secrecyMobile (mobile) {
+  mobile = String(mobile);
+  if (!/\d{11}/.test(mobile)) {
+    return mobile;
+  }
+  return mobile.replace(/(\d{3})(\d{4})(\d{4})/, "$1****$3");
+}
+
+/**
+ * 人性化时间显示
+ *
+ * @param {Object} datetime
+ */
+export function formatTime (datetime) {
+  if (datetime == null) return "";
+
+  datetime = datetime.replace(/-/g, "/");
+
+  let time = new Date();
+  let outTime = new Date(datetime);
+  if (/^[1-9]\d*$/.test(datetime)) {
+    outTime = new Date(parseInt(datetime) * 1000);
+  }
+
+  if (
+    time.getTime() < outTime.getTime() ||
+    time.getFullYear() != outTime.getFullYear()
+  ) {
+    return parseTime(outTime, "{y}-{m}-{d} {h}:{i}");
+  }
+
+  if (time.getMonth() != outTime.getMonth()) {
+    return parseTime(outTime, "{m}-{d} {h}:{i}");
+  }
+
+  if (time.getDate() != outTime.getDate()) {
+    let day = outTime.getDate() - time.getDate();
+    if (day == -1) {
+      return parseTime(outTime, "昨天 {h}:{i}");
+    }
+
+    if (day == -2) {
+      return parseTime(outTime, "前天 {h}:{i}");
+    }
+
+    return parseTime(outTime, "{m}-{d} {h}:{i}");
+  }
+
+  if (time.getHours() != outTime.getHours()) {
+    return parseTime(outTime, "{h}:{i}");
+  }
+
+  let minutes = outTime.getMinutes() - time.getMinutes();
+  if (minutes == 0) {
+    return "刚刚";
+  }
+
+  minutes = Math.abs(minutes);
+  return `${minutes}分钟前`;
+}
+
+/**
+ * 时间格式化方法
+ *
+ * @param {(Object|string|number)} time
+ * @param {String} cFormat
+ * @returns {String | null}
+ */
+export function parseTime (time, cFormat) {
+  if (arguments.length === 0) {
+    return null;
+  }
+
+  let date;
+  const format = cFormat || "{y}-{m}-{d} {h}:{i}:{s}";
+
+  if (typeof time === "object") {
+    date = time;
+  } else {
+    if (typeof time === "string" && /^[0-9]+$/.test(time)) {
+      time = parseInt(time);
+    }
+    if (typeof time === "number" && time.toString().length === 10) {
+      time = time * 1000;
+      console.log("时间判断为number");
+    }
+
+    date = new Date(time.replace(/-/g, "/"));
+  }
+
+  const formatObj = {
+    y: date.getFullYear(),
+    m: date.getMonth() + 1,
+    d: date.getDate(),
+    h: date.getHours(),
+    i: date.getMinutes(),
+    s: date.getSeconds(),
+    a: date.getDay(),
+  };
+
+  const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
+    const value = formatObj[key];
+    // Note: getDay() returns 0 on Sunday
+    if (key === "a") {
+      return ["日", "一", "二", "三", "四", "五", "六"][value];
+    }
+
+    return value.toString().padStart(2, "0");
+  });
+
+  return time_str;
+}
+
+/**
+ * 清除逗号
+ *
+ */
+export function clearStrComma (str) {
+  str = str.replace(/,/g, ""); //取消字符串中出现的所有逗号
+  return str;
+}
+
+/**
+ * 判断用户是否登录
+ * @param val  如果为auth则判断是否登录
+ * 如果传入 auth 则为判断是否登录
+ */
+export function isLogin (val) {
+  let userInfo = storage.getUserInfo();
+  if (val == "auth") {
+    return userInfo && userInfo.id ? true : false;
+  } else {
+    return storage.getUserInfo();
+  }
+}
+
+/**
+ * 退出登录
+ * 
+ * TODO: 需要在迁移后重新实现
+ * 原因: 依赖 logout API 和路由跳转逻辑
+ * 推荐: 在组件中使用 Composition API 实现
+ */
+// export function quiteLoginOut () {
+//   uni.showModal({
+//     title: "提示",
+//     content: "是否退出登录?",
+//     confirmColor: '#ff3c2a',
+//     async success (res) {
+//       if (res.confirm) {
+//         storage.setAccessToken("");
+//         storage.setUserInfo({});
+//         storage.setHasLogin(false)
+//         navigateToLogin("redirectTo");
+//         await logout();
+//       }
+//     },
+//   });
+// }
+
+/**
+ * 用户注销
+ * 
+ * TODO: 需要在迁移后重新实现
+ * 原因: 依赖 logoffConfirm API 和 getCurrentInstance
+ * 推荐: 在组件中使用 Composition API 实现
+ */
+// export function logoff () {
+//   uni.showModal({
+//     title: "提示",
+//     content: "确认注销用户么?注销用户将无法再次登录并失去当前数据。",
+//     confirmColor: getCurrentInstance.proxy.$mainColor,
+//     async success (res) {
+//       if (res.confirm) {
+//         await logoffConfirm();
+//         storage.setAccessToken("");
+//         storage.setRefreshToken("");
+//         storage.setUserInfo({});
+//         navigateToLogin("redirectTo");
+//       }
+//     },
+//   });
+// }
+
+/**
+ * 跳转im
+ * 
+ * TODO: 需要在迁移后重新实现
+ * 原因: 依赖 isLogin 和路由跳转逻辑
+ * 推荐: 在组件中使用 Composition API 实现
+ */
+/* export function talkIm (storeId, goodsId, id) {
+  if (isLogin('auth')) {
+    let url = `/pages/mine/im/index?userId=${storeId}`
+    if(goodsId && id) url = `/pages/mine/im/index?userId=${storeId}&goodsid=${goodsId}&skuid=${id}`
+    uni.navigateTo({
+      url
+    });
+  }
+  else {
+    tipsToLogin()
+  }
+} */
+
+/**
+ * 提示登录
+ * 
+ * TODO: 需要在迁移后重新实现
+ * 原因: 依赖 getCurrentInstance 和路由跳转逻辑
+ * 推荐: 在组件中使用 Composition API 实现
+ */
+/* export function tipsToLogin (type) {
+  if (!isLogin("auth")) {
+    uni.showModal({
+      title: "提示",
+      content: "当前用户未登录是否登录?",
+      confirmText: "确定",
+      cancelText: "取消",
+      confirmColor: getCurrentInstance.proxy.$mainColor,
+      success: (res) => {
+        if (res.confirm) {
+          navigateToLogin();
+        } else if (res.cancel) {
+          if(type !== 'normal'){
+            uni.navigateBack();
+          }
+          
+        }
+      },
+    });
+    return false;
+  }
+  return true;
+} */
+
+/**
+ * 获取用户信息并重新添加到缓存里面
+ * 
+ * TODO: 需要在迁移后重新实现
+ * 原因: 依赖 getUserInfo API
+ * 推荐: 在组件中使用 Composition API 实现
+ */
+export async function userInfo () {
+  // TODO: 需要导入 getUserInfo API
+  // const res = await getUserInfo();
+  // if (res.data.success) {
+  //   storage.setUserInfo(res.data.result);
+  //   return res.data.result;
+  // }
+  console.warn('userInfo function needs to be implemented after migration');
+  return null;
+}
+
+/**
+ * 验证是否登录如果没登录则去登录
+ * @param {*} val
+ * @returns
+ */
+
+export function forceLogin () {
+  let userInfo = storage.getUserInfo();
+  if (!userInfo || !userInfo.id) {
+    // #ifdef MP-WEIXIN || MP-HARMONY
+
+    uni.navigateTo({
+      url: "/pages/passport/wechatMPLogin",
+    });
+
+    // #endif
+
+    // #ifndef MP-WEIXIN || MP-HARMONY
+
+    uni.navigateTo({
+      url: "/pages/passport/login",
+    });
+
+    //  #endif
+  }
+}
+
+/**
+ * 获取当前加载的页面对象
+ * @param val
+ */
+export function getPages (val) {
+  const pages = getCurrentPages(); //获取加载的页面
+  const currentPage = pages[pages.length - 1]; //获取当前页面的对象
+  const url = currentPage.route; //当前页面url
+
+  return val ? currentPage : url;
+}
+
+/**
+ * 跳转到登录页面
+ */
+export function navigateToLogin (type = "navigateTo") {
+  /**
+   * 此处进行条件编译判断
+   * 微信小程序跳转到微信小程序登录页面
+   * H5/App跳转到普通登录页面
+   */
+  // #ifdef MP-WEIXIN || MP-HARMONY
+  uni[type]({
+    url: "/pages/passport/wechatMPLogin",
+  });
+  // #endif
+  // #ifndef MP-WEIXIN || MP-HARMONY
+  uni[type]({
+    url: "/pages/login/index",
+  });
+  //  #endif
+}
+
+/**
+ * 服务状态列表
+ */
+export function serviceStatusList (val) {
+  let statusList = {
+    APPLY: "申请售后",
+    PASS: "通过售后",
+    REFUSE: "拒绝售后",
+    BUYER_RETURN: "买家退货,待卖家收货",
+    SELLER_RE_DELIVERY: "商家换货/补发",
+    SELLER_CONFIRM: "卖家确认收货",
+    SELLER_TERMINATION: "卖家终止售后",
+    BUYER_CONFIRM: "买家确认收货",
+    BUYER_CANCEL: "买家取消售后",
+    WAIT_REFUND: "等待平台退款",
+    COMPLETE: "完成售后",
+  };
+  return statusList[val];
+}
+
+/**
+ * 订单状态列表
+ */
+export function orderStatusList (val) {
+  let orderStatusList = {
+    UNDELIVERED: "待发货",
+    UNPAID: "未付款",
+    PAID: "已付款",
+    PARTS_DELIVERED: "部分发货",
+    DELIVERED: "已发货",
+    CANCELLED: "已取消",
+    COMPLETED: "已完成",
+    COMPLETE: "已完成",
+    TAKE: "待核验",
+    STAY_PICKED_UP: "待自提",
+  };
+  return orderStatusList[val];
+}

+ 190 - 0
utils/geolocationUtils.js

@@ -0,0 +1,190 @@
+/**
+ * 地理定位工具函数模块
+ * 提供浏览器定位相关的通用工具函数
+ * 
+ * 主要功能:
+ * - 浏览器定位 API 封装
+ * - 定位错误处理
+ * - HTTPS 环境检测
+ */
+
+/**
+ * 检查是否为安全上下文(HTTPS)
+ * @returns {boolean} 是否为安全上下文
+ */
+export function isSecureContext() {
+  // #ifdef H5
+  if (typeof window !== 'undefined' && window.location) {
+    return window.isSecureContext || window.location.protocol === 'https:'
+  }
+  // #endif
+  return false
+}
+
+/**
+ * 检查浏览器是否支持定位
+ * @returns {boolean} 是否支持定位
+ */
+export function isGeolocationSupported() {
+  // #ifdef H5
+  return typeof navigator !== 'undefined' && 'geolocation' in navigator
+  // #endif
+  // #ifndef H5
+  return false
+  // #endif
+}
+
+/**
+ * 获取当前位置
+ * 使用浏览器 Geolocation API
+ * @param {Object} options 定位选项
+ * @returns {Promise<{longitude: number, latitude: number}>} 定位结果
+ */
+export function getCurrentPosition(options = {}) {
+  return new Promise((resolve, reject) => {
+    // #ifdef H5
+    if (!isGeolocationSupported()) {
+      reject(new Error('浏览器不支持定位功能'))
+      return
+    }
+    
+    const defaultOptions = {
+      enableHighAccuracy: true,
+      timeout: 10000,
+      maximumAge: 0,
+      ...options
+    }
+    
+    navigator.geolocation.getCurrentPosition(
+      (position) => {
+        resolve({
+          longitude: position.coords.longitude,
+          latitude: position.coords.latitude,
+          accuracy: position.coords.accuracy,
+          timestamp: position.timestamp
+        })
+      },
+      (error) => {
+        reject(error)
+      },
+      defaultOptions
+    )
+    // #endif
+    
+    // #ifndef H5
+    reject(new Error('当前平台不支持浏览器定位 API'))
+    // #endif
+  })
+}
+
+/**
+ * 解析定位错误
+ * @param {GeolocationPositionError} error 定位错误对象
+ * @returns {Object} 包含 message 和 detail 的错误信息对象
+ */
+export function parseGeolocationError(error) {
+  let errorMsg = '定位失败'
+  let errorDetail = ''
+  
+  // #ifdef H5
+  if (error && typeof error.code === 'number') {
+    switch(error.code) {
+      case 1: // PERMISSION_DENIED
+        errorMsg = '定位权限被拒绝'
+        errorDetail = '请在浏览器设置中允许定位权限。'
+        
+        // 检查 HTTPS 环境
+        if (!isSecureContext()) {
+          errorDetail += ' 注意:HTTP 环境下浏览器可能会直接拒绝定位请求,建议使用 HTTPS 访问。'
+        }
+        break
+        
+      case 2: // POSITION_UNAVAILABLE
+        errorMsg = '位置信息不可用'
+        errorDetail = '请检查 GPS 或网络连接,确保设备定位服务已开启。'
+        break
+        
+      case 3: // TIMEOUT
+        errorMsg = '定位请求超时'
+        errorDetail = '定位请求超过设定时间未响应,请重试或检查网络连接。'
+        break
+        
+      default:
+        errorMsg = '定位失败'
+        errorDetail = error.message || '未知错误'
+    }
+  } else if (error && error.message) {
+    errorMsg = '定位失败'
+    errorDetail = error.message
+  }
+  // #endif
+  
+  return {
+    message: errorMsg,
+    detail: errorDetail,
+    code: error?.code
+  }
+}
+
+/**
+ * 监听位置变化
+ * @param {Function} successCallback 成功回调
+ * @param {Function} errorCallback 错误回调
+ * @param {Object} options 定位选项
+ * @returns {number|null} watchId,用于停止监听
+ */
+export function watchPosition(successCallback, errorCallback, options = {}) {
+  // #ifdef H5
+  if (!isGeolocationSupported()) {
+    if (errorCallback) {
+      errorCallback(new Error('浏览器不支持定位功能'))
+    }
+    return null
+  }
+  
+  const defaultOptions = {
+    enableHighAccuracy: true,
+    timeout: 10000,
+    maximumAge: 0,
+    ...options
+  }
+  
+  return navigator.geolocation.watchPosition(
+    (position) => {
+      if (successCallback) {
+        successCallback({
+          longitude: position.coords.longitude,
+          latitude: position.coords.latitude,
+          accuracy: position.coords.accuracy,
+          timestamp: position.timestamp
+        })
+      }
+    },
+    (error) => {
+      if (errorCallback) {
+        errorCallback(error)
+      }
+    },
+    defaultOptions
+  )
+  // #endif
+  
+  // #ifndef H5
+  if (errorCallback) {
+    errorCallback(new Error('当前平台不支持浏览器定位 API'))
+  }
+  return null
+  // #endif
+}
+
+/**
+ * 停止监听位置变化
+ * @param {number} watchId watchPosition 返回的 ID
+ */
+export function clearWatch(watchId) {
+  // #ifdef H5
+  if (watchId !== null && watchId !== undefined && isGeolocationSupported()) {
+    navigator.geolocation.clearWatch(watchId)
+  }
+  // #endif
+}

+ 42 - 0
utils/huiZiArea.ts

@@ -0,0 +1,42 @@
+export type LngLat = [number, number]
+
+/**
+ * generateInnerPolygon (noop)
+ * 外圈/回字形内圈生成逻辑已移除 — 保留同名导出以避免调用处报错。
+ * 返回空数组表示不生成内圈。
+ */
+export function generateInnerPolygon(outer: Array<LngLat>, insetRatio = 0.25): Array<LngLat> {
+  // outer: expected 4 points in order (clockwise or ccw). We compute the polygon
+  // that is an inward-scaled rectangle centered at the outer centroid.
+  // insetRatio: 0..0.5, how far the inner polygon is from the outer towards center.
+  if (!outer || outer.length < 4) return []
+
+  // clamp insetRatio
+  const r = Math.max(0, Math.min(0.49, insetRatio))
+
+  // compute centroid (average)
+  let cx = 0
+  let cy = 0
+  outer.forEach(p => {
+    cx += p[0]
+    cy += p[1]
+  })
+  cx = cx / outer.length
+  cy = cy / outer.length
+
+  // for each corner, move it toward centroid by ratio r
+  const inner: Array<LngLat> = outer.map((p): LngLat => {
+    const dx = p[0] - cx
+    const dy = p[1] - cy
+    return [cx + dx * (1 - r), cy + dy * (1 - r)]
+  })
+
+  return inner
+}
+
+
+
+
+
+
+

+ 98 - 0
utils/jessibuca-plugin.js

@@ -0,0 +1,98 @@
+/**
+ * Jessibuca视频播放器插件
+ * 用于初始化Jessibuca所需的脚本和依赖
+ * Vue 3 版本 - 使用条件编译支持跨平台
+ */
+
+function loadJessibucaScript() {
+  return new Promise((resolve, reject) => {
+    // #ifdef H5
+    if (typeof window === 'undefined') {
+      return reject(new Error('非浏览器环境,无法加载Jessibuca'))
+    }
+
+    if (window.Jessibuca) {
+      return resolve(window.Jessibuca)
+    }
+
+    const script = document.createElement('script')
+    script.src = './static/js/jessibuca/jessibuca.js'
+    script.async = true
+
+    script.onload = () => {
+      console.log('Jessibuca脚本加载成功')
+      resolve(window.Jessibuca)
+    }
+
+    script.onerror = (error) => {
+      console.error('Jessibuca脚本加载失败:', error)
+      // 尝试使用备用路径
+      const backupScript = document.createElement('script')
+      backupScript.src = '/static/js/jessibuca/jessibuca.js' 
+      backupScript.async = true
+      
+      backupScript.onload = () => {
+        console.log('Jessibuca备用脚本加载成功')
+        resolve(window.Jessibuca)
+      }
+      
+      backupScript.onerror = (backupError) => {
+        console.error('Jessibuca备用脚本加载失败:', backupError)
+        reject(backupError)
+      }
+      
+      document.head.appendChild(backupScript)
+    }
+
+    document.head.appendChild(script)
+    // #endif
+    
+    // #ifndef H5
+    // 非H5平台不支持Jessibuca
+    reject(new Error('Jessibuca仅支持H5平台'))
+    // #endif
+  })
+}
+
+// 判断是否支持 Jessibuca(H5环境)
+function isSupported() {
+  // #ifdef H5
+  return typeof window !== 'undefined' && typeof document !== 'undefined'
+  // #endif
+}
+
+export default {
+  install(app) {
+    // Vue 3 使用 app.config.globalProperties 替代 Vue.prototype
+    app.config.globalProperties.$jessibuca = {
+      loadScript: loadJessibucaScript,
+      createPlayer(options) {
+        return loadJessibucaScript().then((Jessibuca) => {
+          if (!Jessibuca) {
+            console.log('Jessibuca 加载失败,无法创建播放器')
+            return null
+          }
+          console.log("options你大爷",options);
+          // 确保设置了decoder和wasm路径
+          options = options || {};
+          options.decoder = options.decoder || './static/js/jessibuca/decoder.js';
+          options.wasmUrl = options.wasmUrl || 'https://nxy.gbdfarm.com:9000/jessibuca/decoder.wasm';
+          
+          return new Jessibuca(options)
+        })
+      },
+      isSupported
+    }
+
+    // 预加载脚本(仅H5环境下执行)
+    // #ifdef H5
+    if (isSupported()) {
+      setTimeout(() => {
+        loadJessibucaScript().catch(err => {
+          console.error('预加载 Jessibuca 失败:', err)
+        })
+      }, 1000)
+    }
+    // #endif
+  }
+}

+ 31 - 0
utils/js_sdk/amap-wx.130.js

@@ -0,0 +1,31 @@
+function AMapWX(a){this.key=a.key;this.requestConfig={key:a.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"};this.MeRequestConfig={key:a.key,serviceName:"https://restapi.amap.com/rest/me"}}
+AMapWX.prototype.getWxLocation=function(a,b){wx.getLocation({type:"gcj02",success:function(c){c=c.longitude+","+c.latitude;wx.setStorage({key:"userLocation",data:c});b(c)},fail:function(c){wx.getStorage({key:"userLocation",success:function(d){d.data&&b(d.data)}});a.fail({errCode:"0",errMsg:c.errMsg||""})}})};
+AMapWX.prototype.getMEKeywordsSearch=function(a){if(!a.options)return a.fail({errCode:"0",errMsg:"\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570"});var b=a.options,c=this.MeRequestConfig,d={key:c.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"};b.layerId&&(d.layerId=b.layerId);b.keywords&&(d.keywords=b.keywords);b.city&&(d.city=b.city);b.filter&&(d.filter=b.filter);b.sortrule&&(d.sortrule=b.sortrule);b.pageNum&&(d.pageNum=b.pageNum);b.pageSize&&(d.pageSize=b.pageSize);b.sig&&(d.sig=
+b.sig);wx.request({url:c.serviceName+"/cpoint/datasearch/local",data:d,method:"GET",header:{"content-type":"application/json"},success:function(e){(e=e.data)&&e.status&&"1"===e.status&&0===e.code?a.success(e.data):a.fail({errCode:"0",errMsg:e})},fail:function(e){a.fail({errCode:"0",errMsg:e.errMsg||""})}})};
+AMapWX.prototype.getMEIdSearch=function(a){if(!a.options)return a.fail({errCode:"0",errMsg:"\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570"});var b=a.options,c=this.MeRequestConfig,d={key:c.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"};b.layerId&&(d.layerId=b.layerId);b.id&&(d.id=b.id);b.sig&&(d.sig=b.sig);wx.request({url:c.serviceName+"/cpoint/datasearch/id",data:d,method:"GET",header:{"content-type":"application/json"},success:function(e){(e=e.data)&&e.status&&"1"===e.status&&
+0===e.code?a.success(e.data):a.fail({errCode:"0",errMsg:e})},fail:function(e){a.fail({errCode:"0",errMsg:e.errMsg||""})}})};
+AMapWX.prototype.getMEPolygonSearch=function(a){if(!a.options)return a.fail({errCode:"0",errMsg:"\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570"});var b=a.options,c=this.MeRequestConfig,d={key:c.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"};b.layerId&&(d.layerId=b.layerId);b.keywords&&(d.keywords=b.keywords);b.polygon&&(d.polygon=b.polygon);b.filter&&(d.filter=b.filter);b.sortrule&&(d.sortrule=b.sortrule);b.pageNum&&(d.pageNum=b.pageNum);b.pageSize&&(d.pageSize=b.pageSize);
+b.sig&&(d.sig=b.sig);wx.request({url:c.serviceName+"/cpoint/datasearch/polygon",data:d,method:"GET",header:{"content-type":"application/json"},success:function(e){(e=e.data)&&e.status&&"1"===e.status&&0===e.code?a.success(e.data):a.fail({errCode:"0",errMsg:e})},fail:function(e){a.fail({errCode:"0",errMsg:e.errMsg||""})}})};
+AMapWX.prototype.getMEaroundSearch=function(a){if(!a.options)return a.fail({errCode:"0",errMsg:"\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570"});var b=a.options,c=this.MeRequestConfig,d={key:c.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"};b.layerId&&(d.layerId=b.layerId);b.keywords&&(d.keywords=b.keywords);b.center&&(d.center=b.center);b.radius&&(d.radius=b.radius);b.filter&&(d.filter=b.filter);b.sortrule&&(d.sortrule=b.sortrule);b.pageNum&&(d.pageNum=b.pageNum);b.pageSize&&
+(d.pageSize=b.pageSize);b.sig&&(d.sig=b.sig);wx.request({url:c.serviceName+"/cpoint/datasearch/around",data:d,method:"GET",header:{"content-type":"application/json"},success:function(e){(e=e.data)&&e.status&&"1"===e.status&&0===e.code?a.success(e.data):a.fail({errCode:"0",errMsg:e})},fail:function(e){a.fail({errCode:"0",errMsg:e.errMsg||""})}})};
+AMapWX.prototype.getGeo=function(a){var b=this.requestConfig,c=a.options;b={key:this.key,extensions:"all",s:b.s,platform:b.platform,appname:this.key,sdkversion:b.sdkversion,logversion:b.logversion};c.address&&(b.address=c.address);c.city&&(b.city=c.city);c.batch&&(b.batch=c.batch);c.sig&&(b.sig=c.sig);wx.request({url:"https://restapi.amap.com/v3/geocode/geo",data:b,method:"GET",header:{"content-type":"application/json"},success:function(d){(d=d.data)&&d.status&&"1"===d.status?a.success(d):a.fail({errCode:"0",
+errMsg:d})},fail:function(d){a.fail({errCode:"0",errMsg:d.errMsg||""})}})};
+AMapWX.prototype.getRegeo=function(a){function b(d){var e=c.requestConfig;wx.request({url:"https://restapi.amap.com/v3/geocode/regeo",data:{key:c.key,location:d,extensions:"all",s:e.s,platform:e.platform,appname:c.key,sdkversion:e.sdkversion,logversion:e.logversion},method:"GET",header:{"content-type":"application/json"},success:function(g){if(g.data.status&&"1"==g.data.status){g=g.data.regeocode;var h=g.addressComponent,f=[],k=g.roads[0].name+"\u9644\u8fd1",m=d.split(",")[0],n=d.split(",")[1];if(g.pois&&
+g.pois[0]){k=g.pois[0].name+"\u9644\u8fd1";var l=g.pois[0].location;l&&(m=parseFloat(l.split(",")[0]),n=parseFloat(l.split(",")[1]))}h.provice&&f.push(h.provice);h.city&&f.push(h.city);h.district&&f.push(h.district);h.streetNumber&&h.streetNumber.street&&h.streetNumber.number?(f.push(h.streetNumber.street),f.push(h.streetNumber.number)):f.push(g.roads[0].name);f=f.join("");a.success([{iconPath:a.iconPath,width:a.iconWidth,height:a.iconHeight,name:f,desc:k,longitude:m,latitude:n,id:0,regeocodeData:g}])}else a.fail({errCode:g.data.infocode,
+errMsg:g.data.info})},fail:function(g){a.fail({errCode:"0",errMsg:g.errMsg||""})}})}var c=this;a.location?b(a.location):c.getWxLocation(a,function(d){b(d)})};
+AMapWX.prototype.getWeather=function(a){function b(g){var h="base";a.type&&"forecast"==a.type&&(h="all");wx.request({url:"https://restapi.amap.com/v3/weather/weatherInfo",data:{key:d.key,city:g,extensions:h,s:e.s,platform:e.platform,appname:d.key,sdkversion:e.sdkversion,logversion:e.logversion},method:"GET",header:{"content-type":"application/json"},success:function(f){if(f.data.status&&"1"==f.data.status)if(f.data.lives){if((f=f.data.lives)&&0<f.length){f=f[0];var k={city:{text:"\u57ce\u5e02",data:f.city},
+weather:{text:"\u5929\u6c14",data:f.weather},temperature:{text:"\u6e29\u5ea6",data:f.temperature},winddirection:{text:"\u98ce\u5411",data:f.winddirection+"\u98ce"},windpower:{text:"\u98ce\u529b",data:f.windpower+"\u7ea7"},humidity:{text:"\u6e7f\u5ea6",data:f.humidity+"%"}};k.liveData=f;a.success(k)}}else f.data.forecasts&&f.data.forecasts[0]&&a.success({forecast:f.data.forecasts[0]});else a.fail({errCode:f.data.infocode,errMsg:f.data.info})},fail:function(f){a.fail({errCode:"0",errMsg:f.errMsg||""})}})}
+function c(g){wx.request({url:"https://restapi.amap.com/v3/geocode/regeo",data:{key:d.key,location:g,extensions:"all",s:e.s,platform:e.platform,appname:d.key,sdkversion:e.sdkversion,logversion:e.logversion},method:"GET",header:{"content-type":"application/json"},success:function(h){if(h.data.status&&"1"==h.data.status){h=h.data.regeocode;if(h.addressComponent)var f=h.addressComponent.adcode;else h.aois&&0<h.aois.length&&(f=h.aois[0].adcode);b(f)}else a.fail({errCode:h.data.infocode,errMsg:h.data.info})},
+fail:function(h){a.fail({errCode:"0",errMsg:h.errMsg||""})}})}var d=this,e=d.requestConfig;a.city?b(a.city):d.getWxLocation(a,function(g){c(g)})};
+AMapWX.prototype.getPoiAround=function(a){function b(e){e={key:c.key,location:e,s:d.s,platform:d.platform,appname:c.key,sdkversion:d.sdkversion,logversion:d.logversion};a.querytypes&&(e.types=a.querytypes);a.querykeywords&&(e.keywords=a.querykeywords);wx.request({url:"https://restapi.amap.com/v3/place/around",data:e,method:"GET",header:{"content-type":"application/json"},success:function(g){if(g.data.status&&"1"==g.data.status){if((g=g.data)&&g.pois){for(var h=[],f=0;f<g.pois.length;f++){var k=0==
+f?a.iconPathSelected:a.iconPath;h.push({latitude:parseFloat(g.pois[f].location.split(",")[1]),longitude:parseFloat(g.pois[f].location.split(",")[0]),iconPath:k,width:22,height:32,id:f,name:g.pois[f].name,address:g.pois[f].address})}a.success({markers:h,poisData:g.pois})}}else a.fail({errCode:g.data.infocode,errMsg:g.data.info})},fail:function(g){a.fail({errCode:"0",errMsg:g.errMsg||""})}})}var c=this,d=c.requestConfig;a.location?b(a.location):c.getWxLocation(a,function(e){b(e)})};
+AMapWX.prototype.getStaticmap=function(a){function b(e){c.push("location="+e);a.zoom&&c.push("zoom="+a.zoom);a.size&&c.push("size="+a.size);a.scale&&c.push("scale="+a.scale);a.markers&&c.push("markers="+a.markers);a.labels&&c.push("labels="+a.labels);a.paths&&c.push("paths="+a.paths);a.traffic&&c.push("traffic="+a.traffic);e="https://restapi.amap.com/v3/staticmap?"+c.join("&");a.success({url:e})}var c=[];c.push("key="+this.key);var d=this.requestConfig;c.push("s="+d.s);c.push("platform="+d.platform);
+c.push("appname="+d.appname);c.push("sdkversion="+d.sdkversion);c.push("logversion="+d.logversion);a.location?b(a.location):this.getWxLocation(a,function(e){b(e)})};
+AMapWX.prototype.getInputtips=function(a){var b=Object.assign({},this.requestConfig);a.location&&(b.location=a.location);a.keywords&&(b.keywords=a.keywords);a.type&&(b.type=a.type);a.city&&(b.city=a.city);a.citylimit&&(b.citylimit=a.citylimit);wx.request({url:"https://restapi.amap.com/v3/assistant/inputtips",data:b,method:"GET",header:{"content-type":"application/json"},success:function(c){c&&c.data&&c.data.tips&&a.success({tips:c.data.tips})},fail:function(c){a.fail({errCode:"0",errMsg:c.errMsg||
+""})}})};
+AMapWX.prototype.getDrivingRoute=function(a){var b=Object.assign({},this.requestConfig);a.origin&&(b.origin=a.origin);a.destination&&(b.destination=a.destination);a.strategy&&(b.strategy=a.strategy);a.waypoints&&(b.waypoints=a.waypoints);a.avoidpolygons&&(b.avoidpolygons=a.avoidpolygons);a.avoidroad&&(b.avoidroad=a.avoidroad);wx.request({url:"https://restapi.amap.com/v3/direction/driving",data:b,method:"GET",header:{"content-type":"application/json"},success:function(c){c&&c.data&&c.data.route&&a.success({paths:c.data.route.paths,
+taxi_cost:c.data.route.taxi_cost||""})},fail:function(c){a.fail({errCode:"0",errMsg:c.errMsg||""})}})};
+AMapWX.prototype.getWalkingRoute=function(a){var b=Object.assign({},this.requestConfig);a.origin&&(b.origin=a.origin);a.destination&&(b.destination=a.destination);wx.request({url:"https://restapi.amap.com/v3/direction/walking",data:b,method:"GET",header:{"content-type":"application/json"},success:function(c){c&&c.data&&c.data.route&&a.success({paths:c.data.route.paths})},fail:function(c){a.fail({errCode:"0",errMsg:c.errMsg||""})}})};
+AMapWX.prototype.getTransitRoute=function(a){var b=Object.assign({},this.requestConfig);a.origin&&(b.origin=a.origin);a.destination&&(b.destination=a.destination);a.strategy&&(b.strategy=a.strategy);a.city&&(b.city=a.city);a.cityd&&(b.cityd=a.cityd);wx.request({url:"https://restapi.amap.com/v3/direction/transit/integrated",data:b,method:"GET",header:{"content-type":"application/json"},success:function(c){c&&c.data&&c.data.route&&(c=c.data.route,a.success({distance:c.distance||"",taxi_cost:c.taxi_cost||
+"",transits:c.transits}))},fail:function(c){a.fail({errCode:"0",errMsg:c.errMsg||""})}})};
+AMapWX.prototype.getRidingRoute=function(a){var b=Object.assign({},this.requestConfig);a.origin&&(b.origin=a.origin);a.destination&&(b.destination=a.destination);wx.request({url:"https://restapi.amap.com/v3/direction/riding",data:b,method:"GET",header:{"content-type":"application/json"},success:function(c){c&&c.data&&c.data.route&&a.success({paths:c.data.route.paths})},fail:function(c){a.fail({errCode:"0",errMsg:c.errMsg||""})}})};module.exports.AMapWX=AMapWX;

+ 42 - 0
utils/js_sdk/h5-copy/h5-copy.js

@@ -0,0 +1,42 @@
+export  function h5Copy(content) {
+  
+  if (!document.queryCommandSupported('copy')) {
+    // 不支持
+    return false
+  }
+  
+  let textarea = document.createElement("textarea")
+  textarea.value = content
+  textarea.readOnly = "readOnly"
+  document.body.appendChild(textarea)
+  textarea.select() // 选择对象
+  textarea.setSelectionRange(0, content.length) //核心
+  let result = document.execCommand("copy") // 执行浏览器复制命令
+  textarea.remove()
+  return result
+  
+}
+
+
+
+/**
+ * 获取系统剪贴板内容
+ */
+ export function getClipboardData() {
+  return new Promise((success, fail) => {
+    // #ifndef H5
+    uni.getClipboardData({
+      success: ({ data }) => success(data),
+      fail
+    })
+    // #endif
+
+    // #ifdef H5
+    try {
+      navigator.clipboard.readText().then(success).catch(fail)
+    } catch (error) {
+      fail(error)
+    }
+    // #endif
+  })
+}

+ 104 - 0
utils/js_sdk/lili-pay/wx-pay.js

@@ -0,0 +1,104 @@
+/**
+ * 微信小程序支付
+ * 此处针对于微信小程序开发的支付插件
+ * 第一次支付成功后会跳出订阅的消息 如果用户拒绝或同意都会跳转到支付成功页面
+ * 如果点击订阅 会将状态写进缓存 之后不再提醒。
+ * 
+ * @param {sn,price}
+ */
+
+import { getWeChatMpMessage } from "@/api/message.js";
+import { initiatePay } from "@/api/trade";
+class LiLiWXPay {
+  constructor(...payList) {
+    this.data = payList[0];
+    console.log(payList);
+    // 调用支付
+    this.pay = () => {
+      uni.showLoading({
+        title: "加载中",
+      });
+
+      let submitData = {
+        sn: this.data.sn,
+        orderType: this.data.orderType || "TRADE",
+        clientType: "WECHAT_MP",
+      };
+      const paymentMethod = "WECHAT";
+      const paymentClient = "MP";
+      // 调用支付
+      initiatePay(paymentMethod, paymentClient, submitData).then((res) => {
+        let response = res.data.result;
+        uni.hideLoading();
+        uni.requestPayment({
+          provider: "wxpay",
+          appid: response.appid,
+          timeStamp: response.timeStamp,
+          nonceStr: response.nonceStr,
+          package: response.package,
+          signType: response.signType,
+          paySign: response.paySign,
+          success: (e) => {
+            uni.showToast({
+              icon: "none",
+              title: "支付成功!",
+            });
+            sendMessage(payList[0].price);
+          },
+          fail: (e) => {
+            this.exception = e;
+            // 支付异常或支付失败之后跳转到订单页面
+            uni.showModal({
+              content: "支付失败,如果您已支付,请勿反复支付",
+              showCancel: false,
+              success: () => {
+                uni.redirectTo({
+                  url: "/pages/order/myOrder?status=0",
+                });
+              },
+            });
+          },
+        });
+      });
+    };
+  }
+}
+
+function sendMessage(price) {
+
+
+  //订阅消息
+  getWeChatMpMessage().then((res) => {
+    var message = res.data.result;
+    var templateid = message.map((item) => item.code);
+    uni.requestSubscribeMessage({
+      tmplIds: templateid,
+      success: (res) => {
+      
+      },
+      fail: (res) => {
+        console.log('fail', res)
+        uni.showToast({
+          icon: "none",
+          title: "订阅消息失败",
+        })
+      },
+      complete: (res) => {
+        console.log('complete', res)
+
+        /**
+         * 已经支付成功
+         */
+        uni.redirectTo({
+          url:
+            "/pages/cart/payment/success?paymentMethod=WECHAT" +
+            "&payPrice=" +
+            price,
+        });
+      },
+    });
+  });
+
+}
+
+export default LiLiWXPay;

+ 78 - 0
utils/js_sdk/t-jwt/jwt.js

@@ -0,0 +1,78 @@
+const b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+const b64re = /^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/;
+
+export function weBtoa(string) {
+  string = String(string);
+  let bitmap, a, b, c, result = "", i = 0, rest = string.length % 3;
+  for (; i < string.length;) {
+    if ((a = string.charCodeAt(i++)) > 255 ||
+        (b = string.charCodeAt(i++)) > 255 ||
+        (c = string.charCodeAt(i++)) > 255) {
+      throw new TypeError("Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.");
+    }
+    bitmap = (a << 16) | (b << 8) | c;
+    result += b64.charAt((bitmap >> 18) & 63)
+            + b64.charAt((bitmap >> 12) & 63)
+            + b64.charAt((bitmap >> 6) & 63)
+            + b64.charAt(bitmap & 63);
+  }
+  return rest ? result.slice(0, rest - 3) + "===".substring(rest) : result;
+}
+
+export function weAtob(string) {
+  string = String(string).replace(/[\t\n\f\r ]+/g, "");
+  if (!b64re.test(string)) {
+    throw new TypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");
+  }
+  string += "==".slice(2 - (string.length & 3));
+  let bitmap, result = "", r1, r2, i = 0;
+  for (; i < string.length;) {
+    bitmap = (b64.indexOf(string.charAt(i++)) << 18) |
+             (b64.indexOf(string.charAt(i++)) << 12) |
+             ((r1 = b64.indexOf(string.charAt(i++))) << 6) |
+             (r2 = b64.indexOf(string.charAt(i++)));
+    result += r1 === 64
+      ? String.fromCharCode((bitmap >> 16) & 255)
+      : r2 === 64
+        ? String.fromCharCode((bitmap >> 16) & 255, (bitmap >> 8) & 255)
+        : String.fromCharCode((bitmap >> 16) & 255, (bitmap >> 8) & 255, bitmap & 255);
+  }
+  return result;
+}
+
+function b64DecodeUnicode(str) {
+  return decodeURIComponent(
+    weAtob(str).replace(/(.)/g, (p) => {
+      let code = p.charCodeAt(0).toString(16).toUpperCase();
+      if (code.length < 2) code = "0" + code;
+      return "%" + code;
+    })
+  );
+}
+
+function base64_url_decode(str) {
+  let output = str.replace(/-/g, "+").replace(/_/g, "/");
+  switch (output.length % 4) {
+    case 0: break;
+    case 2: output += "=="; break;
+    case 3: output += "="; break;
+    default: throw new Error("Illegal base64url string!");
+  }
+  try {
+    return b64DecodeUnicode(output);
+  } catch (err) {
+    return weAtob(output);
+  }
+}
+
+export default function jwt(token, options = {}) {
+  if (typeof token !== "string") {
+    throw new Error("Invalid token specified");
+  }
+  const pos = options.header === true ? 0 : 1;
+  try {
+    return JSON.parse(base64_url_decode(token.split(".")[pos]));
+  } catch (e) {
+    throw new Error("Invalid token specified: " + e.message);
+  }
+}

+ 38 - 0
utils/js_sdk/u-draw-poster/draw-poster.d.ts

@@ -0,0 +1,38 @@
+import { Canvas, DrawPosterCanvasCtx, CreateImagePathOptions, DrawPosterBuildOpts, DrawPosterUseOpts, drawPosterExtends, DrawPosterUseCtxOpts } from "./utils/interface";
+declare type DrawPosterInstanceType = InstanceType<typeof DrawPoster> & drawPosterExtends;
+declare class DrawPoster {
+    canvas: Canvas;
+    ctx: DrawPosterCanvasCtx;
+    canvasId: string;
+    loading: boolean;
+    debugging: boolean;
+    loadingText: string;
+    createText: string;
+    [key: string]: any;
+    private executeOnions;
+    private stopStatus;
+    private drawType;
+    /** 构建器, 构建返回当前实例, 并挂载多个方法 */
+    constructor(canvas: Canvas, ctx: DrawPosterCanvasCtx, canvasId: string, loading: boolean, debugging: boolean, loadingText: string, createText: string, tips: boolean);
+    /** 提示器, 传入消息与数据 */
+    private debuggingLog;
+    /** 传入挂载配置对象, 添加扩展方法 */
+    static use: (opts: DrawPosterUseOpts) => void;
+    /** 传入挂载配置对象, 添加绘画扩展方法 */
+    static useCtx: (opts: DrawPosterUseCtxOpts) => void;
+    /** 构建绘制海报矩形方法, 传入canvas选择器或配置对象, 返回绘制对象 */
+    static build: (options: string | DrawPosterBuildOpts, tips?: boolean) => Promise<DrawPosterInstanceType>;
+    /** 构建多个绘制海报矩形方法, 传入选择器或配置对象的数组, 返回多个绘制对象 */
+    static buildAll: (optionsAll: (string | DrawPosterBuildOpts)[]) => Promise<{
+        [key: string]: DrawPosterInstanceType;
+    }>;
+    /** 绘制器, 接收执行器函数, 添加到绘制容器中 */
+    draw: (execute: (ctx: DrawPosterCanvasCtx) => Promise<any> | void) => void;
+    /** 等待创建绘画, 成功后清空绘制器容器 */
+    awaitCreate: () => Promise<boolean[]>;
+    /** 创建canvas本地地址 @returns {string} 本地地址 */
+    createImagePath: (baseOptions?: CreateImagePathOptions) => Promise<string>;
+    /** 停止当前绘画, 调用则停止当前绘画堆栈的绘画 */
+    stop: () => void;
+}
+export default DrawPoster;

+ 194 - 0
utils/js_sdk/u-draw-poster/draw-poster.js

@@ -0,0 +1,194 @@
+import uni from "./utils/global";
+import { handleBuildOpts, extendMount } from "./utils/utils";
+import { getCanvas2dContext } from "./utils/wx-utils";
+// 扩展挂载储存
+let drawPosterExtend = {};
+let drawCtxPosterExtend = {};
+class DrawPoster {
+    /** 构建器, 构建返回当前实例, 并挂载多个方法 */
+    constructor(canvas, ctx, canvasId, loading, debugging, loadingText, createText, tips) {
+        var _a;
+        this.canvas = canvas;
+        this.ctx = ctx;
+ 
+        this.canvasId = canvasId;
+        this.loading = loading;
+        this.debugging = debugging;
+        this.loadingText = loadingText;
+        this.createText = createText;
+        this.executeOnions = [];
+        this.stopStatus = false;
+        /** 提示器, 传入消息与数据 */
+        this.debuggingLog = (message, data, color = "#3489fd") => {
+            if (this.debugging) {
+                if (data) {
+                    console.log(`%c${this.canvasId} -> ${message}`, `color: ${color}`, data);
+                }
+                else {
+                    console.log(`%c${this.canvasId} -> ${message}`, `color: ${color}`);
+                }
+            }
+        };
+        /** 绘制器, 接收执行器函数, 添加到绘制容器中 */
+        this.draw = (execute) => {
+            const length = this.executeOnions.length;
+            this.executeOnions.push(async () => {
+                var _a, _b;
+                try {
+                    this.ctx.save();
+                    await execute(this.ctx);
+                    this.ctx.restore();
+                    return true;
+                }
+                catch (error) {
+                    const isOutError = ((_b = (_a = error === null || error === void 0 ? void 0 : error.message) === null || _a === void 0 ? void 0 : _a.search) === null || _b === void 0 ? void 0 : _b.call(_a, `'nodeId' of undefined`)) >= 0;
+                    !isOutError && console.error(`${this.canvasId} -> 绘画栈(${length}),绘制错误:`, error);
+                    return false;
+                }
+            });
+        };
+        /** 等待创建绘画, 成功后清空绘制器容器 */
+        this.awaitCreate = async () => {
+            this.debuggingLog('绘制海报中...');
+            this.loading && uni.showLoading({ title: this.loadingText });
+            const tips = [];
+            for (let i = 0; i < this.executeOnions.length; i++) {
+                const execute = this.executeOnions[i];
+                tips.push(await execute());
+            }
+            this.executeOnions = [];
+            this.debuggingLog('绘制状况', tips);
+            // 当前绘制为 type2 绘制
+            if (this.drawType === 'type2d') {
+                this.loading && uni.hideLoading();
+            
+                return tips;
+            }
+            // 当前绘制为 context 绘制
+            return await new Promise((resolve) => {
+                this.ctx.draw(true, () => {
+                    resolve(tips);
+                    this.loading && uni.hideLoading();
+                });
+            });
+        };
+        /** 创建canvas本地地址 @returns {string} 本地地址 */
+        this.createImagePath = async (baseOptions = {}) => {
+            const { canvas, canvasId, executeOnions, awaitCreate } = this;
+            executeOnions.length && await awaitCreate();
+            // 如果当前为停止状态
+            if (this.stopStatus) {
+                this.stopStatus = false;
+                return '---stop createImagePath---';
+            }
+            this.loading && uni.showLoading({ title: this.createText });
+            const options = Object.assign({}, baseOptions);
+            if (this.drawType === 'context')
+                options.canvasId = canvasId;
+            if (this.drawType === 'type2d')
+                options.canvas = canvas;
+
+                console.log(options)
+            return new Promise((resolve, reject) => {
+                options.success = (res) => {
+                    resolve(res.tempFilePath);
+                    this.loading && uni.hideLoading();
+                    this.debuggingLog('绘制成功 🎉', res, '#19be6b');
+                };
+                options.fail = (err) => {
+                    reject(err);
+                    this.loading && uni.hideLoading();
+                    this.debuggingLog('绘制失败 🌟', err, '#fa3534');
+                };
+                uni.canvasToTempFilePath(options);
+            });
+        };
+        /** 停止当前绘画, 调用则停止当前绘画堆栈的绘画 */
+        this.stop = () => {
+            this.executeOnions = [];
+            this.stopStatus = true;
+        };
+        if (!canvas || !ctx || !canvasId) {
+            throw new Error("DrawPoster Error: Use DrawPoster.build(string | ops) to build drawPoster instance objects");
+        }
+        // 判断当前绘制类型
+        ctx.drawType = this.drawType = (ctx.draw) ? 'context' : 'type2d';
+        // 挂载全局实例, 绘画扩展
+        extendMount(this.ctx, drawCtxPosterExtend, (extend, target) => {
+            var _a;
+            (_a = target === null || target === void 0 ? void 0 : target.init) === null || _a === void 0 ? void 0 : _a.call(target, this.canvas, this.ctx);
+            return (...args) => extend(this.canvas, this.ctx, ...args);
+        });
+        extendMount(this, drawPosterExtend, (extend, target) => {
+            var _a;
+            (_a = target === null || target === void 0 ? void 0 : target.init) === null || _a === void 0 ? void 0 : _a.call(target, this);
+            return (...args) => extend(this, ...args);
+        });
+        // 当离开页面时, 自动调用停止绘画
+        const _this = this;
+        const pages = getCurrentPages();
+        const page = pages[pages.length - 1];
+        // 查询标识, 不存在, 在替换页面卸载回调, 避免产生死循环
+        if (!((_a = page === null || page === void 0 ? void 0 : page.onUnload) === null || _a === void 0 ? void 0 : _a.identification)) {
+            page.oldOnUnload = page.onUnload;
+            page.onUnload = function () {
+                _this === null || _this === void 0 ? void 0 : _this.stop();
+                page.oldOnUnload();
+            };
+            page.onUnload.identification = true;
+        }
+        tips && this.debuggingLog('构建完成', { canvas, ctx, selector: canvasId }, '#19be6b');
+    }
+}
+/** 传入挂载配置对象, 添加扩展方法 */
+DrawPoster.use = (opts) => {
+    if (opts.name)
+        drawPosterExtend[opts.name] = opts;
+};
+/** 传入挂载配置对象, 添加绘画扩展方法 */
+DrawPoster.useCtx = (opts) => {
+    if (opts.name)
+        drawCtxPosterExtend[opts.name] = opts;
+};
+/** 构建绘制海报矩形方法, 传入canvas选择器或配置对象, 返回绘制对象 */
+DrawPoster.build = async (options, tips = true) => {
+    var _a, _b, _c, _d, _e;
+    const config = handleBuildOpts(options);
+    // 初始化监测当前页面绘制对象
+    const pages = getCurrentPages();
+    const page = pages[pages.length - 1];
+    const gcanvas = DrawPoster.prototype['gcanvas'];
+    if (page[config.selector + '__dp']) {
+        return page[config.selector + '__dp'];
+    }
+    if (config.gcanvas) {
+        if (!gcanvas)
+            console.error('--- 当前未引入gcanvas扩展, 将自动切换为普通 canvas ---');
+        else
+            gcanvas.enable((_b = (_a = config.componentThis) === null || _a === void 0 ? void 0 : _a.$refs) === null || _b === void 0 ? void 0 : _b[config.selector], {
+                bridge: gcanvas.WeexBridge
+            });
+    }
+    // 获取canvas实例
+    const canvas = config.gcanvas && gcanvas ?
+        gcanvas.enable((_d = (_c = config.componentThis) === null || _c === void 0 ? void 0 : _c.$refs) === null || _d === void 0 ? void 0 : _d[config.selector], {
+            bridge: gcanvas.WeexBridge
+        }) :
+        await getCanvas2dContext(config.selector, config.componentThis);
+    const ctx = (((_e = canvas.getContext) === null || _e === void 0 ? void 0 : _e.call(canvas, "2d")) || uni.createCanvasContext(config.selector, config.componentThis));
+    const dp = new DrawPoster(canvas, ctx, config.selector, config.loading, config.debugging, config.loadingText, config.createText, tips);
+    // 储存当前绘制对象
+    page[config.selector + '__dp'] = dp;
+    return page[config.selector + '__dp'];
+};
+/** 构建多个绘制海报矩形方法, 传入选择器或配置对象的数组, 返回多个绘制对象 */
+DrawPoster.buildAll = async (optionsAll) => {
+    const dpsArr = await Promise.all(optionsAll.map(async (options) => {
+        return await DrawPoster.build(options, false);
+    }));
+    const dpsObj = {};
+    dpsArr.forEach(dp => dpsObj[dp.canvasId] = dp);
+    console.log("%cdraw-poster 构建完成:", "#E3712A", dpsObj);
+    return dpsObj;
+};
+export default DrawPoster;

+ 17 - 0
utils/js_sdk/u-draw-poster/extends/create-from-list/index.d.ts

@@ -0,0 +1,17 @@
+import { DrawPosterUseOpts } from '../../utils/interface';
+export interface CreateLayerOpts {
+    background?: string;
+    self?: boolean;
+    line?: boolean;
+    lineHeight?: number;
+}
+export interface DrawRowOpt {
+    text?: string;
+    font?: string;
+    color?: string;
+    center?: boolean;
+    width?: number;
+}
+declare const _default: DrawPosterUseOpts;
+/** 绘制表单扩展方法 */
+export default _default;

+ 140 - 0
utils/js_sdk/u-draw-poster/extends/create-from-list/index.js

@@ -0,0 +1,140 @@
+/** 绘制表单扩展方法 */
+export default {
+    name: 'createLayer',
+    init: (dp) => {
+        dp.from = {
+            height: 0,
+            padding: 8,
+            margin: 0
+        };
+        dp.setFromOptions = (opts) => {
+            if (typeof opts.height !== 'undefined') {
+                dp.from.height = opts.height;
+            }
+            if (typeof opts.margin !== 'undefined') {
+                dp.from.margin = opts.margin;
+            }
+            if (typeof opts.padding !== 'undefined') {
+                dp.from.padding = opts.padding;
+            }
+        };
+    },
+    handle: (dp, afferOpts, rowList) => {
+        // 当前配置(头部偏移量, 列内边距, 表单外边距)
+        const height = dp.from.height;
+        const margin = dp.from.margin;
+        const padding = dp.from.padding;
+        // 当前层宽度
+        const containerWidth = dp.canvas.width - (margin * 2);
+        // 基本层配置
+        const opts = Object.assign({ background: "#fff", columnY: height || margin, self: true, line: true, lineHeight: 0, border: true }, afferOpts);
+        // 基本列配置
+        const baseRowOpts = {
+            text: "",
+            font: "24px sans-serif",
+            color: "#333",
+            center: false,
+            width: 0,
+        };
+        // 累计最高的列为标准定义为层高度
+        let maxRowHeight = 0;
+        // 累计固定栅格列偏移量
+        let columnOffsetX = margin;
+        // 创建行绘制任务
+        const drawLayerInfos = rowList.map((afferRowOpts = {}, index) => {
+            const rowOpts = Object.assign(Object.assign({}, baseRowOpts), afferRowOpts);
+            let columnX = 0; // 每列的X轴
+            let columnW = 0; // 每列的宽度
+            let fontOffsetX = 0; // 字体偏移X轴
+            let fontMaxWidth = 100; // 字体最大宽度
+            opts.lineHeight = opts.lineHeight || Number(rowOpts.font.replace(/[^0-9.]/g, ""));
+            if (opts.self) {
+                // 自适应栅格格子计算
+                columnX = containerWidth - (containerWidth / (index + 1)) + margin;
+                columnW = containerWidth / rowList.length;
+                if (columnX > 0 && columnX < containerWidth - columnW) {
+                    columnX = (columnW * index) + margin;
+                }
+                fontOffsetX = rowOpts.center ? columnX + (columnW / 2) : columnX + padding;
+                fontMaxWidth = columnW - (padding * 3);
+            }
+            if (!opts.self) {
+                // 固定栅格格子计算
+                columnW = rowOpts.width;
+                columnX = columnOffsetX;
+                fontMaxWidth = columnW - (padding * 3);
+                fontOffsetX = rowOpts.center ? columnOffsetX + (rowOpts.width / 2) : columnOffsetX + padding;
+                columnOffsetX += rowOpts.width;
+            }
+            dp.ctx.font = rowOpts.font;
+            const drawFontInfos = dp.ctx.fillWarpText({
+                text: rowOpts.text,
+                maxWidth: fontMaxWidth,
+                lineHeight: opts.lineHeight,
+                x: fontOffsetX,
+                y: opts.columnY,
+                layer: 10,
+                notFillText: true
+            });
+            // 当前行的高度
+            const rowHeight = (opts.lineHeight * drawFontInfos.length) + (padding * 3);
+            // 若该列高度大于累计高度, 将累计高度替换
+            if (rowHeight > maxRowHeight) {
+                maxRowHeight = rowHeight;
+            }
+            return {
+                font: rowOpts.font,
+                center: rowOpts.center,
+                color: rowOpts.color,
+                border: opts.border,
+                background: opts.background,
+                lineHeight: opts.lineHeight,
+                line: opts.line,
+                drawFontInfos,
+                columnY: opts.columnY,
+                columnX,
+                columnW,
+                columnH: maxRowHeight,
+                margin,
+                padding
+            };
+        });
+        // 将行绘制任务添加至绘制容器中
+        dp.draw((ctx) => drawLayerInfos.forEach((rowOpts, index) => {
+            ctx.font = rowOpts.font;
+            ctx.fillStyle = rowOpts.background;
+            ctx.strokeStyle = "#333";
+            ctx.textBaseline = "middle";
+            ctx.textAlign = 'left';
+            if (rowOpts.center) {
+                ctx.textAlign = "center";
+            }
+            ctx.fillRect(rowOpts.columnX, rowOpts.columnY, rowOpts.columnW, rowOpts.columnH);
+            if (rowOpts.border) {
+                dp.ctx.strokeRect(margin, rowOpts.columnY, dp.canvas.width - margin, maxRowHeight);
+            }
+            if (rowOpts.line && rowOpts.columnX !== margin) {
+                ctx.moveTo(rowOpts.columnX, rowOpts.columnY);
+                ctx.lineTo(rowOpts.columnX, rowOpts.columnY + rowOpts.columnH);
+                ctx.stroke();
+                ctx.beginPath();
+            }
+            ctx.fillStyle = rowOpts.color;
+            rowOpts.drawFontInfos.forEach(fontInfo => {
+                // 计算每行字体绘制y轴长度
+                // y(当前列置顶轴) + (rowOpts.columnH(当前列最高长度) / 2) - (((总列数-1) * 行高) / 2)
+                const textTotal = rowOpts.drawFontInfos.length - 1;
+                const textMiddleY = (textTotal * rowOpts.lineHeight) / 2;
+                let fontOffsetY = fontInfo.y + (rowOpts.columnH / 2);
+                fontOffsetY -= textMiddleY;
+                ctx.fillText(fontInfo.text, fontInfo.x, fontOffsetY);
+            });
+        }));
+        if (opts.columnY === 0 || opts.columnY === margin) {
+            maxRowHeight += margin;
+        }
+        // 叠加高度
+        dp.from.height += maxRowHeight;
+        return maxRowHeight;
+    },
+};

+ 4 - 0
utils/js_sdk/u-draw-poster/extends/create-gcanvas/index.d.ts

@@ -0,0 +1,4 @@
+import { DrawPosterUseOpts } from '../../utils/interface';
+export * from './gcanvas';
+declare const _default: DrawPosterUseOpts;
+export default _default;

+ 9 - 0
utils/js_sdk/u-draw-poster/extends/create-gcanvas/index.js

@@ -0,0 +1,9 @@
+import { WeexBridge, enable, Image } from './gcanvas';
+export * from './gcanvas';
+import DrawPoster from "../../draw-poster";
+DrawPoster.prototype['gcanvas'] = {
+    WeexBridge,
+    enable,
+    Image
+};
+export default {};

+ 12 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/draw-image-fit.d.ts

@@ -0,0 +1,12 @@
+import { DrawPosterUseCtxOpts } from '../../utils/interface';
+import { ObjectFit, ObjectPosition, Size } from "../../utils/object-sizing";
+export interface ImageFitOption {
+    radius?: number;
+    objectFit?: ObjectFit;
+    intrinsicSize?: Size;
+    specifiedSize?: Size;
+    intrinsicPosition?: ObjectPosition;
+    specifiedPosition?: [number, number];
+}
+declare const _default: DrawPosterUseCtxOpts;
+export default _default;

+ 25 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/draw-image-fit.js

@@ -0,0 +1,25 @@
+import { calculateConcreteRect } from "../../utils/object-sizing";
+import uni from "../../utils/global";
+export default {
+    name: 'drawImageFit',
+    handle: async (canvas, ctx, url, options) => {
+        var _a, _b, _c;
+        const [error, imageInfo] = await uni.getImageInfo({ src: url });
+        // 配置默认值
+        const style = Object.assign({ radius: 0, objectFit: 'cover', intrinsicSize: { width: (_a = imageInfo === null || imageInfo === void 0 ? void 0 : imageInfo.width) !== null && _a !== void 0 ? _a : 100, height: (_b = imageInfo === null || imageInfo === void 0 ? void 0 : imageInfo.height) !== null && _b !== void 0 ? _b : 100 }, specifiedSize: { width: 100, height: 100 }, intrinsicPosition: ['center', 'center'], specifiedPosition: [0, 0] }, options);
+        // 计算图片尺寸
+        const drawImageInfo = calculateConcreteRect(style, style.intrinsicSize, style.specifiedSize);
+        // 如有圆角, 则进行裁剪
+        if (style.radius > 0) {
+            ctx.save();
+            (_c = ctx.setFillStyle) === null || _c === void 0 ? void 0 : _c.call(ctx, 'transparent');
+            ctx.fillStyle = 'transparent';
+            ctx.fillRoundRect(style.specifiedPosition[0], style.specifiedPosition[1], style.specifiedSize.width, style.specifiedSize.height, style.radius);
+            ctx.clip();
+        }
+        const result = await ctx.drawImage(url, ...Object.values(drawImageInfo));
+        if (style.radius > 0)
+            ctx.restore();
+        return result;
+    }
+};

+ 4 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/draw-image.d.ts

@@ -0,0 +1,4 @@
+import { DrawPosterUseCtxOpts } from '../../utils/interface';
+declare const _default: DrawPosterUseCtxOpts;
+/** 等待绘制图片原型方法 */
+export default _default;

+ 42 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/draw-image.js

@@ -0,0 +1,42 @@
+import { downloadImgUrl } from '../../utils/wx-utils';
+/** 等待绘制图片原型方法 */
+export default {
+    name: 'drawImage',
+    init: (canvas, ctx) => {
+        ctx.drawImageProto = ctx.drawImage;
+    },
+    handle: async (canvas, ctx, url, sx, sy, sh, sw, dx, dy, dh, dw) => {
+        // 下载路径
+        const path = await downloadImgUrl(url);
+        // 标记当前绘画存在图片绘制
+        let result = false;
+        // 基本绘制方法, 如果是 fit 方式, 则传入所有参数, 不然则只传入四个参数
+        const baseDrawImage = (imageResource) => {
+            const isFit = typeof dx === 'number' && typeof dw === 'number';
+            if (isFit) {
+                ctx.drawImageProto(imageResource, sx, sy, sh, sw, dx, dy, dh, dw);
+            }
+            else {
+                ctx.drawImageProto(imageResource, sx, sy, sh, sw);
+            }
+        };
+        // 如果是 context 绘制方式, 则直接绘制
+        if (ctx.drawType === 'context') {
+            baseDrawImage(path);
+            result = true;
+        }
+        // 如果是 type2d 绘制方式, 则等待图片绘制完毕
+        if (ctx.drawType === 'type2d') {
+            result = await new Promise(resolve => {
+                const image = canvas.createImage();
+                image.src = path;
+                image.onload = () => {
+                    baseDrawImage(image);
+                    resolve(true);
+                };
+                image.onerror = () => resolve(false);
+            });
+        }
+        return result;
+    }
+};

+ 4 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/draw-round-image.d.ts

@@ -0,0 +1,4 @@
+import { DrawPosterUseCtxOpts } from '../../utils/interface';
+declare const _default: DrawPosterUseCtxOpts;
+/** 绘制圆角图片原型方法 */
+export default _default;

+ 15 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/draw-round-image.js

@@ -0,0 +1,15 @@
+/** 绘制圆角图片原型方法 */
+export default {
+    name: 'drawRoundImage',
+    handle: async (canvas, ctx, url, x, y, w, h, r = 15) => {
+        var _a;
+        ctx.save();
+        (_a = ctx.setFillStyle) === null || _a === void 0 ? void 0 : _a.call(ctx, 'transparent');
+        ctx.fillStyle = 'transparent';
+        ctx.fillRoundRect(x, y, w, h, r);
+        ctx.clip();
+        const result = await ctx.drawImage(url, x, y, w, h);
+        ctx.restore();
+        return result;
+    }
+};

+ 4 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/fill-round-rect.d.ts

@@ -0,0 +1,4 @@
+import { DrawPosterUseCtxOpts } from '../../utils/interface';
+declare const _default: DrawPosterUseCtxOpts;
+/** 绘制填充圆角矩形方法 */
+export default _default;

+ 7 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/fill-round-rect.js

@@ -0,0 +1,7 @@
+/** 绘制填充圆角矩形方法 */
+export default {
+    name: 'fillRoundRect',
+    handle: (canvas, ctx, x, y, w, h, r) => {
+        ctx.roundRect(x, y, w, h, r, true);
+    }
+};

+ 4 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/fill-warp-text.d.ts

@@ -0,0 +1,4 @@
+import { DrawPosterUseCtxOpts } from '../../utils/interface';
+declare const _default: DrawPosterUseCtxOpts;
+/** 绘制换行字体原型方法 */
+export default _default;

+ 76 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/fill-warp-text.js

@@ -0,0 +1,76 @@
+/** 绘制换行字体原型方法 */
+export default {
+    name: 'fillWarpText',
+    handle: (canvas, ctx, config) => {
+        const newConfig = config = Object.assign({ maxWidth: 100, layer: 2, lineHeight: Number(ctx.font.replace(/[^0-9.]/g, '')), x: 0, y: Number(ctx.font.replace(/[^0-9.]/g, '')) / 1.2, splitText: '', notFillText: false }, config);
+        const { text, splitText, maxWidth, layer, lineHeight, notFillText, x, y } = newConfig;
+        // 当字符串为空时, 抛出错误
+        if (!text) {
+            throw Error('warpFillText Error: text is empty string');
+        }
+        // 分割所有单个字符串
+        const chr = text.split(splitText);
+        // 存入的每行字体的容器
+        let row = [];
+        // 判断字符串
+        let timp = '';
+        if (splitText) {
+            row = chr;
+        }
+        else {
+            // 遍历所有字符串, 填充行容器
+            for (let i = 0; i < chr.length; i++) {
+                // 当超出行列时, 停止执行遍历, 节省计算时间
+                if (row.length > layer) {
+                    break;
+                }
+                if (ctx.measureText(timp).width < maxWidth) {
+                    // 如果超出长度, 添加进row数组
+                    timp += chr[i];
+                }
+                else {
+                    // 如超出一行长度, 则换行, 并清除容器
+                    i--;
+                    row.push(timp);
+                    timp = '';
+                }
+            }
+            // 如有剩下字体, 则在最后时添加一行
+            if (timp) {
+                row.push(timp);
+            }
+            // 如果数组长度大于指定行数
+            if (row.length > layer) {
+                row = row.slice(0, layer);
+                // 结束的索引
+                const end = layer - 1;
+                for (let i = 0; i < row[end].length; i++) {
+                    const currentWidth = ctx.measureText(`${row[end]}...`).width;
+                    if (currentWidth > maxWidth) {
+                        // 加上... 当前宽度大于最大宽度时, 去除一位字符串
+                        const strEnd = row[end].length - 1;
+                        row[end] = row[end].slice(0, strEnd);
+                    }
+                    else {
+                        row[end] += '...';
+                        break;
+                    }
+                }
+            }
+        }
+        // 储存并返回绘制信息
+        const drawInfos = row.map((item, index) => {
+            const info = {
+                text: item,
+                y: y + index * lineHeight,
+                x: x,
+            };
+            // 默认执行绘制信息
+            if (!notFillText) {
+                ctx.fillText(info.text, info.x, info.y);
+            }
+            return info;
+        });
+        return drawInfos;
+    }
+};

+ 7 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/index.d.ts

@@ -0,0 +1,7 @@
+export { default as drawImage } from "./draw-image";
+export { default as roundRect } from "./round-rect";
+export { default as fillRoundRect } from "./fill-round-rect";
+export { default as strokeRoundRect } from "./stroke-round-rect";
+export { default as fillWarpText } from "./fill-warp-text";
+export { default as drawRoundImage } from "./draw-round-image";
+export { default as drawImageFit } from "./draw-image-fit";

+ 15 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/index.js

@@ -0,0 +1,15 @@
+/*
+ * @Author: Mr.Mao
+ * @LastEditors: Mr.Mao
+ * @Date: 2020-11-11 20:43:33
+ * @LastEditTime: 2021-01-02 00:16:59
+ * @Description:
+ * @任何一个傻子都能写出让电脑能懂的代码,而只有好的程序员可以写出让人能看懂的代码
+ */
+export { default as drawImage } from "./draw-image";
+export { default as roundRect } from "./round-rect";
+export { default as fillRoundRect } from "./fill-round-rect";
+export { default as strokeRoundRect } from "./stroke-round-rect";
+export { default as fillWarpText } from "./fill-warp-text";
+export { default as drawRoundImage } from "./draw-round-image";
+export { default as drawImageFit } from "./draw-image-fit";

+ 4 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/round-rect.d.ts

@@ -0,0 +1,4 @@
+import { DrawPosterUseCtxOpts } from '../../utils/interface';
+declare const _default: DrawPosterUseCtxOpts;
+/** 绘制圆角矩形原型方法 */
+export default _default;

+ 41 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/round-rect.js

@@ -0,0 +1,41 @@
+/** 绘制圆角矩形原型方法 */
+export default {
+    name: 'roundRect',
+    handle: (canvas, ctx, x, y, w, h, r = 15, fill = false, stroke = false) => {
+        if (r === 0) {
+            if (stroke)
+                ctx.strokeRect(x, y, w, h);
+            if (fill)
+                ctx.fillRect(x, y, w, h);
+            return;
+        }
+        if (w < 2 * r) {
+            r = w / 2;
+        }
+        if (h < 2 * r) {
+            r = h / 2;
+        }
+        // 开始绘制
+        ctx.beginPath();
+        ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 1.5);
+        // 移动复制
+        ctx.moveTo(x + r, y);
+        ctx.lineTo(x + w - r, y);
+        ctx.lineTo(x + w, y + r);
+        // (x,y,z,j,f) x,y圆心z半径,j起始弧度f,终止弧度
+        ctx.arc(x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2);
+        ctx.lineTo(x + w, y + h - r);
+        ctx.lineTo(x + w - r, y + h);
+        ctx.arc(x + w - r, y + h - r, r, 0, Math.PI * 0.5);
+        ctx.lineTo(x + r, y + h);
+        ctx.lineTo(x, y + h - r);
+        ctx.arc(x + r, y + h - r, r, Math.PI * 0.5, Math.PI);
+        ctx.lineTo(x, y + r);
+        ctx.lineTo(x + r, y);
+        if (stroke)
+            ctx.stroke();
+        if (fill)
+            ctx.fill();
+        ctx.closePath();
+    }
+};

+ 4 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/stroke-round-rect.d.ts

@@ -0,0 +1,4 @@
+import { DrawPosterUseCtxOpts } from '../../utils/interface';
+declare const _default: DrawPosterUseCtxOpts;
+/** 绘制填充圆角矩形方法 */
+export default _default;

+ 7 - 0
utils/js_sdk/u-draw-poster/extends/draw-function/stroke-round-rect.js

@@ -0,0 +1,7 @@
+/** 绘制填充圆角矩形方法 */
+export default {
+    name: 'strokeRoundRect',
+    handle: (canvas, ctx, x, y, w, h, r) => {
+        ctx.roundRect(x, y, w, h, r, false, true);
+    }
+};

+ 101 - 0
utils/js_sdk/u-draw-poster/extends/draw-painter/index.d.ts

@@ -0,0 +1,101 @@
+import { DrawPosterUseOpts } from '../../utils/interface';
+import { ImageFitOption } from '../draw-function/draw-image-fit';
+/** 矩形基本信息 */
+interface PainterItemSize {
+    /** 容器的宽度,固定值 */
+    width: number;
+    /** 容器的高度,固定值 */
+    height: number;
+}
+/** 元素位置信息 */
+interface PainterItemSite {
+    /** 元素锚点距左边的距离; 默认: 0 */
+    left?: number;
+    /** 元素锚点距上边的距离; 默认: 0 */
+    top?: number;
+}
+/** 绘制图片信息 */
+interface PainterImageInfo extends PainterItemSize, PainterItemSite {
+    /** 绘制图片元素 */
+    type: 'image';
+    /** 图片地址 */
+    src: string;
+    /** 图片自适应, 可参考 css 属性 object-fit */
+    objectFit?: ImageFitOption['objectFit'];
+    /** 图片在元素容器中显示的位置,可参考 css 属性 object-position */
+    position?: ImageFitOption['intrinsicPosition'];
+    /** 圆角尺寸; 默认: 0 */
+    radius?: number;
+}
+/** 绘制矩形信息 */
+interface PainterRectInfo extends PainterItemSize, PainterItemSite {
+    /** 绘制矩形元素 */
+    type: "rect";
+    /** 矩形背景颜色; 默认: "#000" */
+    background?: string;
+    /** 圆角尺寸; 默认: 0 */
+    radius?: number;
+}
+/** 绘制单行文字信息 */
+interface PainterTextInfo extends PainterItemSite {
+    /** 绘制文本元素 */
+    type: "text";
+    /** 文本颜色; 默认: "#000" */
+    color?: string;
+    /** 字体; 默认: "serial" */
+    fontFamily?: string;
+    /** 字号(单位rpx); 默认: 30 rpx */
+    fontSize?: number;
+    /** 字重; 默认: "normal" 可选项: "bold" */
+    fontWeight?: string;
+    /** 字型 默认: "normal" 可选项: "italic" */
+    fontStyle?: string;
+    /** 元素的宽度(单位rpx), 水平排布时影响后一个元素的位置,为 null 时根据文字实际占用的宽度计算 */
+    width?: number;
+    /** 文本内容 */
+    content: string;
+}
+/** 绘制多行文字信息 */
+interface PainterLineFeedTextInfo extends PainterItemSite {
+    /** 绘制换行文本元素 */
+    type: "line-feed-text";
+    /** 文本颜色; 默认: "#000" */
+    color?: string;
+    /** 字体; 默认: "serial" */
+    fontFamily?: string;
+    /** 字号(单位rpx); 默认: 30 rpx */
+    fontSize?: number;
+    /** 字重; 默认: "normal" 可选项: "bold" */
+    fontWeight?: string;
+    /** 字型 默认: "normal" 可选项: "italic" */
+    fontStyle?: string;
+    /** 文本块的宽度,不能为空 */
+    width: number;
+    /** 行高; 默认取当前文字行高 */
+    lineHeight?: number;
+    /** 文本最大行数,超出即显示省略号; 默认3行 */
+    lineClamp?: number;
+    /** 文本内容 */
+    content: string;
+}
+/** 绘制二维码信息 */
+interface PainterQrCodeInfo extends PainterItemSite {
+    /** 绘制换行文本元素 */
+    type: "qr-code";
+    /** 二维码尺寸 */
+    size: number;
+    /** 二维码内容 */
+    content: string;
+    /** 边距,二维码实际尺寸会根据所设边距值进行缩放调整(默认:5) */
+    margin?: number;
+    /** 背景色(默认:'#ffffff')*/
+    backgroundColor?: string;
+    /** 前景色(默认:'#000000') */
+    foregroundColor?: string;
+}
+export interface PainterContainerOption extends PainterItemSize {
+    /** 绘制项的数组 */
+    contents: Array<PainterImageInfo | PainterRectInfo | PainterTextInfo | PainterLineFeedTextInfo | PainterQrCodeInfo>;
+}
+declare const _default: DrawPosterUseOpts;
+export default _default;

+ 73 - 0
utils/js_sdk/u-draw-poster/extends/draw-painter/index.js

@@ -0,0 +1,73 @@
+export default {
+    name: 'painter',
+    handle: (dp, option) => {
+        dp.canvas.width = option.width;
+        dp.canvas.height = option.height;
+        dp.draw(async (ctx) => {
+            for (let i = 0; i < option.contents.length; i++) {
+                ctx.save();
+                const drawInfo = option.contents[i];
+                const { left = 0, top = 0 } = drawInfo;
+                if (drawInfo.type === 'rect') {
+                    ctx.fillStyle = drawInfo.background || '#000000';
+                    ctx.fillRoundRect(left, top, drawInfo.width, drawInfo.height, drawInfo.radius || 0);
+                }
+                if (drawInfo.type === 'image') {
+                    await ctx.drawImageFit(drawInfo.src, {
+                        objectFit: drawInfo.objectFit || 'cover',
+                        intrinsicPosition: drawInfo.position || ['center', 'center'],
+                        specifiedPosition: [left, top],
+                        specifiedSize: {
+                            width: drawInfo.width,
+                            height: drawInfo.height
+                        },
+                        radius: drawInfo.radius
+                    });
+                }
+                if (drawInfo.type === 'text') {
+                    ctx.fillStyle = drawInfo.color || '#000000';
+                    ctx.font = `\
+          ${drawInfo.fontStyle || 'normal'} \
+          ${drawInfo.fontWeight || 'normal'} \
+          ${drawInfo.fontSize || 30} \
+          ${drawInfo.fontFamily || 'serial'}\
+          `;
+                    ctx.fillText(drawInfo.content, left, top, drawInfo.width);
+                }
+                if (drawInfo.type === 'line-feed-text') {
+                    ctx.fillStyle = drawInfo.color || '#000000';
+                    ctx.font = `\
+          ${drawInfo.fontStyle || 'normal'} \
+          ${drawInfo.fontWeight || 'normal'} \
+          ${drawInfo.fontSize || 30} \
+          ${drawInfo.fontFamily || 'serial'}\
+          `;
+                    ctx.fillWarpText({
+                        x: drawInfo.left,
+                        y: drawInfo.top,
+                        layer: drawInfo.lineClamp,
+                        lineHeight: drawInfo.lineHeight,
+                        maxWidth: drawInfo.width,
+                        text: drawInfo.content
+                    });
+                }
+                if (drawInfo.type === 'qr-code') {
+                    if (typeof ctx.drawQrCode !== 'function') {
+                        console.error('--- 当前未引入qr-code扩展, 将自动省略该二维码绘制 ---');
+                        return false;
+                    }
+                    ctx.drawQrCode({
+                        x: left,
+                        y: top,
+                        size: drawInfo.size,
+                        text: drawInfo.content,
+                        margin: drawInfo.margin || 5,
+                        backgroundColor: drawInfo.backgroundColor || '#ffffff',
+                        foregroundColor: drawInfo.foregroundColor || '#000000',
+                    });
+                }
+                ctx.restore();
+            }
+        });
+    }
+};

+ 6 - 0
utils/js_sdk/u-draw-poster/extends/draw-qr-code/index.d.ts

@@ -0,0 +1,6 @@
+declare const _default: {
+    name: string;
+    handle: any;
+    errorCorrectLevel: any;
+};
+export default _default;

+ 6 - 0
utils/js_sdk/u-draw-poster/extends/draw-qr-code/index.js

@@ -0,0 +1,6 @@
+import uQRCode from "./uQRCode";
+export default {
+    name: "drawQrCode",
+    handle: uQRCode.make.bind(uQRCode),
+    errorCorrectLevel: uQRCode.errorCorrectLevel
+};

+ 10 - 0
utils/js_sdk/u-draw-poster/extends/draw-qr-code/uQRCode.d.ts

@@ -0,0 +1,10 @@
+/*
+ * @Author: Mr.Mao
+ * @LastEditors: Mr.Mao
+ * @Date: 2021-01-02 13:30:58
+ * @LastEditTime: 2021-01-02 13:31:27
+ * @Description: 
+ * @任何一个傻子都能写出让电脑能懂的代码,而只有好的程序员可以写出让人能看懂的代码
+ */
+declare const uQRCode: any
+export default uQRCode

+ 1355 - 0
utils/js_sdk/u-draw-poster/extends/draw-qr-code/uQRCode.js

@@ -0,0 +1,1355 @@
+/*
+ * @Author: Mr.Mao
+ * @LastEditors: Mr.Mao
+ * @Date: 2021-01-02 13:30:58
+ * @LastEditTime: 2021-01-02 13:30:58
+ * @Description: 
+ * @任何一个傻子都能写出让电脑能懂的代码,而只有好的程序员可以写出让人能看懂的代码
+ */
+//---------------------------------------------------------------------
+// github https://github.com/Sansnn/uQRCode
+//---------------------------------------------------------------------
+
+let uQRCode = {};
+
+(function () {
+  //---------------------------------------------------------------------
+  // QRCode for JavaScript
+  //
+  // Copyright (c) 2009 Kazuhiko Arase
+  //
+  // URL: http://www.d-project.com/
+  //
+  // Licensed under the MIT license:
+  //   http://www.opensource.org/licenses/mit-license.php
+  //
+  // The word "QR Code" is registered trademark of 
+  // DENSO WAVE INCORPORATED
+  //   http://www.denso-wave.com/qrcode/faqpatent-e.html
+  //
+  //---------------------------------------------------------------------
+
+  //---------------------------------------------------------------------
+  // QR8bitByte
+  //---------------------------------------------------------------------
+
+  function QR8bitByte(data) {
+    this.mode = QRMode.MODE_8BIT_BYTE;
+    this.data = data;
+  }
+
+  QR8bitByte.prototype = {
+
+    getLength: function (buffer) {
+      return this.data.length;
+    },
+
+    write: function (buffer) {
+      for (var i = 0; i < this.data.length; i++) {
+        // not JIS ...
+        buffer.put(this.data.charCodeAt(i), 8);
+      }
+    }
+  };
+
+  //---------------------------------------------------------------------
+  // QRCode
+  //---------------------------------------------------------------------
+
+  function QRCode(typeNumber, errorCorrectLevel) {
+    this.typeNumber = typeNumber;
+    this.errorCorrectLevel = errorCorrectLevel;
+    this.modules = null;
+    this.moduleCount = 0;
+    this.dataCache = null;
+    this.dataList = new Array();
+  }
+
+  QRCode.prototype = {
+
+    addData: function (data) {
+      var newData = new QR8bitByte(data);
+      this.dataList.push(newData);
+      this.dataCache = null;
+    },
+
+    isDark: function (row, col) {
+      if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {
+        throw new Error(row + "," + col);
+      }
+      return this.modules[row][col];
+    },
+
+    getModuleCount: function () {
+      return this.moduleCount;
+    },
+
+    make: function () {
+      // Calculate automatically typeNumber if provided is < 1
+      if (this.typeNumber < 1) {
+        var typeNumber = 1;
+        for (typeNumber = 1; typeNumber < 40; typeNumber++) {
+          var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);
+
+          var buffer = new QRBitBuffer();
+          var totalDataCount = 0;
+          for (var i = 0; i < rsBlocks.length; i++) {
+            totalDataCount += rsBlocks[i].dataCount;
+          }
+
+          for (var i = 0; i < this.dataList.length; i++) {
+            var data = this.dataList[i];
+            buffer.put(data.mode, 4);
+            buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));
+            data.write(buffer);
+          }
+          if (buffer.getLengthInBits() <= totalDataCount * 8)
+            break;
+        }
+        this.typeNumber = typeNumber;
+      }
+      this.makeImpl(false, this.getBestMaskPattern());
+    },
+
+    makeImpl: function (test, maskPattern) {
+
+      this.moduleCount = this.typeNumber * 4 + 17;
+      this.modules = new Array(this.moduleCount);
+
+      for (var row = 0; row < this.moduleCount; row++) {
+
+        this.modules[row] = new Array(this.moduleCount);
+
+        for (var col = 0; col < this.moduleCount; col++) {
+          this.modules[row][col] = null; //(col + row) % 3;
+        }
+      }
+
+      this.setupPositionProbePattern(0, 0);
+      this.setupPositionProbePattern(this.moduleCount - 7, 0);
+      this.setupPositionProbePattern(0, this.moduleCount - 7);
+      this.setupPositionAdjustPattern();
+      this.setupTimingPattern();
+      this.setupTypeInfo(test, maskPattern);
+
+      if (this.typeNumber >= 7) {
+        this.setupTypeNumber(test);
+      }
+
+      if (this.dataCache == null) {
+        this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);
+      }
+
+      this.mapData(this.dataCache, maskPattern);
+    },
+
+    setupPositionProbePattern: function (row, col) {
+
+      for (var r = -1; r <= 7; r++) {
+
+        if (row + r <= -1 || this.moduleCount <= row + r) continue;
+
+        for (var c = -1; c <= 7; c++) {
+
+          if (col + c <= -1 || this.moduleCount <= col + c) continue;
+
+          if ((0 <= r && r <= 6 && (c == 0 || c == 6)) ||
+            (0 <= c && c <= 6 && (r == 0 || r == 6)) ||
+            (2 <= r && r <= 4 && 2 <= c && c <= 4)) {
+            this.modules[row + r][col + c] = true;
+          } else {
+            this.modules[row + r][col + c] = false;
+          }
+        }
+      }
+    },
+
+    getBestMaskPattern: function () {
+
+      var minLostPoint = 0;
+      var pattern = 0;
+
+      for (var i = 0; i < 8; i++) {
+
+        this.makeImpl(true, i);
+
+        var lostPoint = QRUtil.getLostPoint(this);
+
+        if (i == 0 || minLostPoint > lostPoint) {
+          minLostPoint = lostPoint;
+          pattern = i;
+        }
+      }
+
+      return pattern;
+    },
+
+    createMovieClip: function (target_mc, instance_name, depth) {
+
+      var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);
+      var cs = 1;
+
+      this.make();
+
+      for (var row = 0; row < this.modules.length; row++) {
+
+        var y = row * cs;
+
+        for (var col = 0; col < this.modules[row].length; col++) {
+
+          var x = col * cs;
+          var dark = this.modules[row][col];
+
+          if (dark) {
+            qr_mc.beginFill(0, 100);
+            qr_mc.moveTo(x, y);
+            qr_mc.lineTo(x + cs, y);
+            qr_mc.lineTo(x + cs, y + cs);
+            qr_mc.lineTo(x, y + cs);
+            qr_mc.endFill();
+          }
+        }
+      }
+
+      return qr_mc;
+    },
+
+    setupTimingPattern: function () {
+
+      for (var r = 8; r < this.moduleCount - 8; r++) {
+        if (this.modules[r][6] != null) {
+          continue;
+        }
+        this.modules[r][6] = (r % 2 == 0);
+      }
+
+      for (var c = 8; c < this.moduleCount - 8; c++) {
+        if (this.modules[6][c] != null) {
+          continue;
+        }
+        this.modules[6][c] = (c % 2 == 0);
+      }
+    },
+
+    setupPositionAdjustPattern: function () {
+
+      var pos = QRUtil.getPatternPosition(this.typeNumber);
+
+      for (var i = 0; i < pos.length; i++) {
+
+        for (var j = 0; j < pos.length; j++) {
+
+          var row = pos[i];
+          var col = pos[j];
+
+          if (this.modules[row][col] != null) {
+            continue;
+          }
+
+          for (var r = -2; r <= 2; r++) {
+
+            for (var c = -2; c <= 2; c++) {
+
+              if (r == -2 || r == 2 || c == -2 || c == 2 ||
+                (r == 0 && c == 0)) {
+                this.modules[row + r][col + c] = true;
+              } else {
+                this.modules[row + r][col + c] = false;
+              }
+            }
+          }
+        }
+      }
+    },
+
+    setupTypeNumber: function (test) {
+
+      var bits = QRUtil.getBCHTypeNumber(this.typeNumber);
+
+      for (var i = 0; i < 18; i++) {
+        var mod = (!test && ((bits >> i) & 1) == 1);
+        this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;
+      }
+
+      for (var i = 0; i < 18; i++) {
+        var mod = (!test && ((bits >> i) & 1) == 1);
+        this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
+      }
+    },
+
+    setupTypeInfo: function (test, maskPattern) {
+
+      var data = (this.errorCorrectLevel << 3) | maskPattern;
+      var bits = QRUtil.getBCHTypeInfo(data);
+
+      // vertical		
+      for (var i = 0; i < 15; i++) {
+
+        var mod = (!test && ((bits >> i) & 1) == 1);
+
+        if (i < 6) {
+          this.modules[i][8] = mod;
+        } else if (i < 8) {
+          this.modules[i + 1][8] = mod;
+        } else {
+          this.modules[this.moduleCount - 15 + i][8] = mod;
+        }
+      }
+
+      // horizontal
+      for (var i = 0; i < 15; i++) {
+
+        var mod = (!test && ((bits >> i) & 1) == 1);
+
+        if (i < 8) {
+          this.modules[8][this.moduleCount - i - 1] = mod;
+        } else if (i < 9) {
+          this.modules[8][15 - i - 1 + 1] = mod;
+        } else {
+          this.modules[8][15 - i - 1] = mod;
+        }
+      }
+
+      // fixed module
+      this.modules[this.moduleCount - 8][8] = (!test);
+
+    },
+
+    mapData: function (data, maskPattern) {
+
+      var inc = -1;
+      var row = this.moduleCount - 1;
+      var bitIndex = 7;
+      var byteIndex = 0;
+
+      for (var col = this.moduleCount - 1; col > 0; col -= 2) {
+
+        if (col == 6) col--;
+
+        while (true) {
+
+          for (var c = 0; c < 2; c++) {
+
+            if (this.modules[row][col - c] == null) {
+
+              var dark = false;
+
+              if (byteIndex < data.length) {
+                dark = (((data[byteIndex] >>> bitIndex) & 1) == 1);
+              }
+
+              var mask = QRUtil.getMask(maskPattern, row, col - c);
+
+              if (mask) {
+                dark = !dark;
+              }
+
+              this.modules[row][col - c] = dark;
+              bitIndex--;
+
+              if (bitIndex == -1) {
+                byteIndex++;
+                bitIndex = 7;
+              }
+            }
+          }
+
+          row += inc;
+
+          if (row < 0 || this.moduleCount <= row) {
+            row -= inc;
+            inc = -inc;
+            break;
+          }
+        }
+      }
+
+    }
+
+  };
+
+  QRCode.PAD0 = 0xEC;
+  QRCode.PAD1 = 0x11;
+
+  QRCode.createData = function (typeNumber, errorCorrectLevel, dataList) {
+
+    var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
+
+    var buffer = new QRBitBuffer();
+
+    for (var i = 0; i < dataList.length; i++) {
+      var data = dataList[i];
+      buffer.put(data.mode, 4);
+      buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));
+      data.write(buffer);
+    }
+
+    // calc num max data.
+    var totalDataCount = 0;
+    for (var i = 0; i < rsBlocks.length; i++) {
+      totalDataCount += rsBlocks[i].dataCount;
+    }
+
+    if (buffer.getLengthInBits() > totalDataCount * 8) {
+      throw new Error("code length overflow. (" +
+        buffer.getLengthInBits() +
+        ">" +
+        totalDataCount * 8 +
+        ")");
+    }
+
+    // end code
+    if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
+      buffer.put(0, 4);
+    }
+
+    // padding
+    while (buffer.getLengthInBits() % 8 != 0) {
+      buffer.putBit(false);
+    }
+
+    // padding
+    while (true) {
+
+      if (buffer.getLengthInBits() >= totalDataCount * 8) {
+        break;
+      }
+      buffer.put(QRCode.PAD0, 8);
+
+      if (buffer.getLengthInBits() >= totalDataCount * 8) {
+        break;
+      }
+      buffer.put(QRCode.PAD1, 8);
+    }
+
+    return QRCode.createBytes(buffer, rsBlocks);
+  }
+
+  QRCode.createBytes = function (buffer, rsBlocks) {
+
+    var offset = 0;
+
+    var maxDcCount = 0;
+    var maxEcCount = 0;
+
+    var dcdata = new Array(rsBlocks.length);
+    var ecdata = new Array(rsBlocks.length);
+
+    for (var r = 0; r < rsBlocks.length; r++) {
+
+      var dcCount = rsBlocks[r].dataCount;
+      var ecCount = rsBlocks[r].totalCount - dcCount;
+
+      maxDcCount = Math.max(maxDcCount, dcCount);
+      maxEcCount = Math.max(maxEcCount, ecCount);
+
+      dcdata[r] = new Array(dcCount);
+
+      for (var i = 0; i < dcdata[r].length; i++) {
+        dcdata[r][i] = 0xff & buffer.buffer[i + offset];
+      }
+      offset += dcCount;
+
+      var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
+      var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);
+
+      var modPoly = rawPoly.mod(rsPoly);
+      ecdata[r] = new Array(rsPoly.getLength() - 1);
+      for (var i = 0; i < ecdata[r].length; i++) {
+        var modIndex = i + modPoly.getLength() - ecdata[r].length;
+        ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0;
+      }
+
+    }
+
+    var totalCodeCount = 0;
+    for (var i = 0; i < rsBlocks.length; i++) {
+      totalCodeCount += rsBlocks[i].totalCount;
+    }
+
+    var data = new Array(totalCodeCount);
+    var index = 0;
+
+    for (var i = 0; i < maxDcCount; i++) {
+      for (var r = 0; r < rsBlocks.length; r++) {
+        if (i < dcdata[r].length) {
+          data[index++] = dcdata[r][i];
+        }
+      }
+    }
+
+    for (var i = 0; i < maxEcCount; i++) {
+      for (var r = 0; r < rsBlocks.length; r++) {
+        if (i < ecdata[r].length) {
+          data[index++] = ecdata[r][i];
+        }
+      }
+    }
+
+    return data;
+
+  }
+
+  //---------------------------------------------------------------------
+  // QRMode
+  //---------------------------------------------------------------------
+
+  var QRMode = {
+    MODE_NUMBER: 1 << 0,
+    MODE_ALPHA_NUM: 1 << 1,
+    MODE_8BIT_BYTE: 1 << 2,
+    MODE_KANJI: 1 << 3
+  };
+
+  //---------------------------------------------------------------------
+  // QRErrorCorrectLevel
+  //---------------------------------------------------------------------
+
+  var QRErrorCorrectLevel = {
+    L: 1,
+    M: 0,
+    Q: 3,
+    H: 2
+  };
+
+  //---------------------------------------------------------------------
+  // QRMaskPattern
+  //---------------------------------------------------------------------
+
+  var QRMaskPattern = {
+    PATTERN000: 0,
+    PATTERN001: 1,
+    PATTERN010: 2,
+    PATTERN011: 3,
+    PATTERN100: 4,
+    PATTERN101: 5,
+    PATTERN110: 6,
+    PATTERN111: 7
+  };
+
+  //---------------------------------------------------------------------
+  // QRUtil
+  //---------------------------------------------------------------------
+
+  var QRUtil = {
+
+    PATTERN_POSITION_TABLE: [
+      [],
+      [6, 18],
+      [6, 22],
+      [6, 26],
+      [6, 30],
+      [6, 34],
+      [6, 22, 38],
+      [6, 24, 42],
+      [6, 26, 46],
+      [6, 28, 50],
+      [6, 30, 54],
+      [6, 32, 58],
+      [6, 34, 62],
+      [6, 26, 46, 66],
+      [6, 26, 48, 70],
+      [6, 26, 50, 74],
+      [6, 30, 54, 78],
+      [6, 30, 56, 82],
+      [6, 30, 58, 86],
+      [6, 34, 62, 90],
+      [6, 28, 50, 72, 94],
+      [6, 26, 50, 74, 98],
+      [6, 30, 54, 78, 102],
+      [6, 28, 54, 80, 106],
+      [6, 32, 58, 84, 110],
+      [6, 30, 58, 86, 114],
+      [6, 34, 62, 90, 118],
+      [6, 26, 50, 74, 98, 122],
+      [6, 30, 54, 78, 102, 126],
+      [6, 26, 52, 78, 104, 130],
+      [6, 30, 56, 82, 108, 134],
+      [6, 34, 60, 86, 112, 138],
+      [6, 30, 58, 86, 114, 142],
+      [6, 34, 62, 90, 118, 146],
+      [6, 30, 54, 78, 102, 126, 150],
+      [6, 24, 50, 76, 102, 128, 154],
+      [6, 28, 54, 80, 106, 132, 158],
+      [6, 32, 58, 84, 110, 136, 162],
+      [6, 26, 54, 82, 110, 138, 166],
+      [6, 30, 58, 86, 114, 142, 170]
+    ],
+
+    G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),
+    G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),
+    G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1),
+
+    getBCHTypeInfo: function (data) {
+      var d = data << 10;
+      while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
+        d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15)));
+      }
+      return ((data << 10) | d) ^ QRUtil.G15_MASK;
+    },
+
+    getBCHTypeNumber: function (data) {
+      var d = data << 12;
+      while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
+        d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18)));
+      }
+      return (data << 12) | d;
+    },
+
+    getBCHDigit: function (data) {
+
+      var digit = 0;
+
+      while (data != 0) {
+        digit++;
+        data >>>= 1;
+      }
+
+      return digit;
+    },
+
+    getPatternPosition: function (typeNumber) {
+      return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
+    },
+
+    getMask: function (maskPattern, i, j) {
+
+      switch (maskPattern) {
+
+        case QRMaskPattern.PATTERN000:
+          return (i + j) % 2 == 0;
+        case QRMaskPattern.PATTERN001:
+          return i % 2 == 0;
+        case QRMaskPattern.PATTERN010:
+          return j % 3 == 0;
+        case QRMaskPattern.PATTERN011:
+          return (i + j) % 3 == 0;
+        case QRMaskPattern.PATTERN100:
+          return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
+        case QRMaskPattern.PATTERN101:
+          return (i * j) % 2 + (i * j) % 3 == 0;
+        case QRMaskPattern.PATTERN110:
+          return ((i * j) % 2 + (i * j) % 3) % 2 == 0;
+        case QRMaskPattern.PATTERN111:
+          return ((i * j) % 3 + (i + j) % 2) % 2 == 0;
+
+        default:
+          throw new Error("bad maskPattern:" + maskPattern);
+      }
+    },
+
+    getErrorCorrectPolynomial: function (errorCorrectLength) {
+
+      var a = new QRPolynomial([1], 0);
+
+      for (var i = 0; i < errorCorrectLength; i++) {
+        a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));
+      }
+
+      return a;
+    },
+
+    getLengthInBits: function (mode, type) {
+
+      if (1 <= type && type < 10) {
+
+        // 1 - 9
+
+        switch (mode) {
+          case QRMode.MODE_NUMBER:
+            return 10;
+          case QRMode.MODE_ALPHA_NUM:
+            return 9;
+          case QRMode.MODE_8BIT_BYTE:
+            return 8;
+          case QRMode.MODE_KANJI:
+            return 8;
+          default:
+            throw new Error("mode:" + mode);
+        }
+
+      } else if (type < 27) {
+
+        // 10 - 26
+
+        switch (mode) {
+          case QRMode.MODE_NUMBER:
+            return 12;
+          case QRMode.MODE_ALPHA_NUM:
+            return 11;
+          case QRMode.MODE_8BIT_BYTE:
+            return 16;
+          case QRMode.MODE_KANJI:
+            return 10;
+          default:
+            throw new Error("mode:" + mode);
+        }
+
+      } else if (type < 41) {
+
+        // 27 - 40
+
+        switch (mode) {
+          case QRMode.MODE_NUMBER:
+            return 14;
+          case QRMode.MODE_ALPHA_NUM:
+            return 13;
+          case QRMode.MODE_8BIT_BYTE:
+            return 16;
+          case QRMode.MODE_KANJI:
+            return 12;
+          default:
+            throw new Error("mode:" + mode);
+        }
+
+      } else {
+        throw new Error("type:" + type);
+      }
+    },
+
+    getLostPoint: function (qrCode) {
+
+      var moduleCount = qrCode.getModuleCount();
+
+      var lostPoint = 0;
+
+      // LEVEL1
+
+      for (var row = 0; row < moduleCount; row++) {
+
+        for (var col = 0; col < moduleCount; col++) {
+
+          var sameCount = 0;
+          var dark = qrCode.isDark(row, col);
+
+          for (var r = -1; r <= 1; r++) {
+
+            if (row + r < 0 || moduleCount <= row + r) {
+              continue;
+            }
+
+            for (var c = -1; c <= 1; c++) {
+
+              if (col + c < 0 || moduleCount <= col + c) {
+                continue;
+              }
+
+              if (r == 0 && c == 0) {
+                continue;
+              }
+
+              if (dark == qrCode.isDark(row + r, col + c)) {
+                sameCount++;
+              }
+            }
+          }
+
+          if (sameCount > 5) {
+            lostPoint += (3 + sameCount - 5);
+          }
+        }
+      }
+
+      // LEVEL2
+
+      for (var row = 0; row < moduleCount - 1; row++) {
+        for (var col = 0; col < moduleCount - 1; col++) {
+          var count = 0;
+          if (qrCode.isDark(row, col)) count++;
+          if (qrCode.isDark(row + 1, col)) count++;
+          if (qrCode.isDark(row, col + 1)) count++;
+          if (qrCode.isDark(row + 1, col + 1)) count++;
+          if (count == 0 || count == 4) {
+            lostPoint += 3;
+          }
+        }
+      }
+
+      // LEVEL3
+
+      for (var row = 0; row < moduleCount; row++) {
+        for (var col = 0; col < moduleCount - 6; col++) {
+          if (qrCode.isDark(row, col) &&
+            !qrCode.isDark(row, col + 1) &&
+            qrCode.isDark(row, col + 2) &&
+            qrCode.isDark(row, col + 3) &&
+            qrCode.isDark(row, col + 4) &&
+            !qrCode.isDark(row, col + 5) &&
+            qrCode.isDark(row, col + 6)) {
+            lostPoint += 40;
+          }
+        }
+      }
+
+      for (var col = 0; col < moduleCount; col++) {
+        for (var row = 0; row < moduleCount - 6; row++) {
+          if (qrCode.isDark(row, col) &&
+            !qrCode.isDark(row + 1, col) &&
+            qrCode.isDark(row + 2, col) &&
+            qrCode.isDark(row + 3, col) &&
+            qrCode.isDark(row + 4, col) &&
+            !qrCode.isDark(row + 5, col) &&
+            qrCode.isDark(row + 6, col)) {
+            lostPoint += 40;
+          }
+        }
+      }
+
+      // LEVEL4
+
+      var darkCount = 0;
+
+      for (var col = 0; col < moduleCount; col++) {
+        for (var row = 0; row < moduleCount; row++) {
+          if (qrCode.isDark(row, col)) {
+            darkCount++;
+          }
+        }
+      }
+
+      var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
+      lostPoint += ratio * 10;
+
+      return lostPoint;
+    }
+
+  };
+
+
+  //---------------------------------------------------------------------
+  // QRMath
+  //---------------------------------------------------------------------
+
+  var QRMath = {
+
+    glog: function (n) {
+
+      if (n < 1) {
+        throw new Error("glog(" + n + ")");
+      }
+
+      return QRMath.LOG_TABLE[n];
+    },
+
+    gexp: function (n) {
+
+      while (n < 0) {
+        n += 255;
+      }
+
+      while (n >= 256) {
+        n -= 255;
+      }
+
+      return QRMath.EXP_TABLE[n];
+    },
+
+    EXP_TABLE: new Array(256),
+
+    LOG_TABLE: new Array(256)
+
+  };
+
+  for (var i = 0; i < 8; i++) {
+    QRMath.EXP_TABLE[i] = 1 << i;
+  }
+  for (var i = 8; i < 256; i++) {
+    QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^
+      QRMath.EXP_TABLE[i - 5] ^
+      QRMath.EXP_TABLE[i - 6] ^
+      QRMath.EXP_TABLE[i - 8];
+  }
+  for (var i = 0; i < 255; i++) {
+    QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
+  }
+
+  //---------------------------------------------------------------------
+  // QRPolynomial
+  //---------------------------------------------------------------------
+
+  function QRPolynomial(num, shift) {
+
+    if (num.length == undefined) {
+      throw new Error(num.length + "/" + shift);
+    }
+
+    var offset = 0;
+
+    while (offset < num.length && num[offset] == 0) {
+      offset++;
+    }
+
+    this.num = new Array(num.length - offset + shift);
+    for (var i = 0; i < num.length - offset; i++) {
+      this.num[i] = num[i + offset];
+    }
+  }
+
+  QRPolynomial.prototype = {
+
+    get: function (index) {
+      return this.num[index];
+    },
+
+    getLength: function () {
+      return this.num.length;
+    },
+
+    multiply: function (e) {
+
+      var num = new Array(this.getLength() + e.getLength() - 1);
+
+      for (var i = 0; i < this.getLength(); i++) {
+        for (var j = 0; j < e.getLength(); j++) {
+          num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)));
+        }
+      }
+
+      return new QRPolynomial(num, 0);
+    },
+
+    mod: function (e) {
+
+      if (this.getLength() - e.getLength() < 0) {
+        return this;
+      }
+
+      var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));
+
+      var num = new Array(this.getLength());
+
+      for (var i = 0; i < this.getLength(); i++) {
+        num[i] = this.get(i);
+      }
+
+      for (var i = 0; i < e.getLength(); i++) {
+        num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);
+      }
+
+      // recursive call
+      return new QRPolynomial(num, 0).mod(e);
+    }
+  };
+
+  //---------------------------------------------------------------------
+  // QRRSBlock
+  //---------------------------------------------------------------------
+
+  function QRRSBlock(totalCount, dataCount) {
+    this.totalCount = totalCount;
+    this.dataCount = dataCount;
+  }
+
+  QRRSBlock.RS_BLOCK_TABLE = [
+
+    // L
+    // M
+    // Q
+    // H
+
+    // 1
+    [1, 26, 19],
+    [1, 26, 16],
+    [1, 26, 13],
+    [1, 26, 9],
+
+    // 2
+    [1, 44, 34],
+    [1, 44, 28],
+    [1, 44, 22],
+    [1, 44, 16],
+
+    // 3
+    [1, 70, 55],
+    [1, 70, 44],
+    [2, 35, 17],
+    [2, 35, 13],
+
+    // 4		
+    [1, 100, 80],
+    [2, 50, 32],
+    [2, 50, 24],
+    [4, 25, 9],
+
+    // 5
+    [1, 134, 108],
+    [2, 67, 43],
+    [2, 33, 15, 2, 34, 16],
+    [2, 33, 11, 2, 34, 12],
+
+    // 6
+    [2, 86, 68],
+    [4, 43, 27],
+    [4, 43, 19],
+    [4, 43, 15],
+
+    // 7		
+    [2, 98, 78],
+    [4, 49, 31],
+    [2, 32, 14, 4, 33, 15],
+    [4, 39, 13, 1, 40, 14],
+
+    // 8
+    [2, 121, 97],
+    [2, 60, 38, 2, 61, 39],
+    [4, 40, 18, 2, 41, 19],
+    [4, 40, 14, 2, 41, 15],
+
+    // 9
+    [2, 146, 116],
+    [3, 58, 36, 2, 59, 37],
+    [4, 36, 16, 4, 37, 17],
+    [4, 36, 12, 4, 37, 13],
+
+    // 10		
+    [2, 86, 68, 2, 87, 69],
+    [4, 69, 43, 1, 70, 44],
+    [6, 43, 19, 2, 44, 20],
+    [6, 43, 15, 2, 44, 16],
+
+    // 11
+    [4, 101, 81],
+    [1, 80, 50, 4, 81, 51],
+    [4, 50, 22, 4, 51, 23],
+    [3, 36, 12, 8, 37, 13],
+
+    // 12
+    [2, 116, 92, 2, 117, 93],
+    [6, 58, 36, 2, 59, 37],
+    [4, 46, 20, 6, 47, 21],
+    [7, 42, 14, 4, 43, 15],
+
+    // 13
+    [4, 133, 107],
+    [8, 59, 37, 1, 60, 38],
+    [8, 44, 20, 4, 45, 21],
+    [12, 33, 11, 4, 34, 12],
+
+    // 14
+    [3, 145, 115, 1, 146, 116],
+    [4, 64, 40, 5, 65, 41],
+    [11, 36, 16, 5, 37, 17],
+    [11, 36, 12, 5, 37, 13],
+
+    // 15
+    [5, 109, 87, 1, 110, 88],
+    [5, 65, 41, 5, 66, 42],
+    [5, 54, 24, 7, 55, 25],
+    [11, 36, 12],
+
+    // 16
+    [5, 122, 98, 1, 123, 99],
+    [7, 73, 45, 3, 74, 46],
+    [15, 43, 19, 2, 44, 20],
+    [3, 45, 15, 13, 46, 16],
+
+    // 17
+    [1, 135, 107, 5, 136, 108],
+    [10, 74, 46, 1, 75, 47],
+    [1, 50, 22, 15, 51, 23],
+    [2, 42, 14, 17, 43, 15],
+
+    // 18
+    [5, 150, 120, 1, 151, 121],
+    [9, 69, 43, 4, 70, 44],
+    [17, 50, 22, 1, 51, 23],
+    [2, 42, 14, 19, 43, 15],
+
+    // 19
+    [3, 141, 113, 4, 142, 114],
+    [3, 70, 44, 11, 71, 45],
+    [17, 47, 21, 4, 48, 22],
+    [9, 39, 13, 16, 40, 14],
+
+    // 20
+    [3, 135, 107, 5, 136, 108],
+    [3, 67, 41, 13, 68, 42],
+    [15, 54, 24, 5, 55, 25],
+    [15, 43, 15, 10, 44, 16],
+
+    // 21
+    [4, 144, 116, 4, 145, 117],
+    [17, 68, 42],
+    [17, 50, 22, 6, 51, 23],
+    [19, 46, 16, 6, 47, 17],
+
+    // 22
+    [2, 139, 111, 7, 140, 112],
+    [17, 74, 46],
+    [7, 54, 24, 16, 55, 25],
+    [34, 37, 13],
+
+    // 23
+    [4, 151, 121, 5, 152, 122],
+    [4, 75, 47, 14, 76, 48],
+    [11, 54, 24, 14, 55, 25],
+    [16, 45, 15, 14, 46, 16],
+
+    // 24
+    [6, 147, 117, 4, 148, 118],
+    [6, 73, 45, 14, 74, 46],
+    [11, 54, 24, 16, 55, 25],
+    [30, 46, 16, 2, 47, 17],
+
+    // 25
+    [8, 132, 106, 4, 133, 107],
+    [8, 75, 47, 13, 76, 48],
+    [7, 54, 24, 22, 55, 25],
+    [22, 45, 15, 13, 46, 16],
+
+    // 26
+    [10, 142, 114, 2, 143, 115],
+    [19, 74, 46, 4, 75, 47],
+    [28, 50, 22, 6, 51, 23],
+    [33, 46, 16, 4, 47, 17],
+
+    // 27
+    [8, 152, 122, 4, 153, 123],
+    [22, 73, 45, 3, 74, 46],
+    [8, 53, 23, 26, 54, 24],
+    [12, 45, 15, 28, 46, 16],
+
+    // 28
+    [3, 147, 117, 10, 148, 118],
+    [3, 73, 45, 23, 74, 46],
+    [4, 54, 24, 31, 55, 25],
+    [11, 45, 15, 31, 46, 16],
+
+    // 29
+    [7, 146, 116, 7, 147, 117],
+    [21, 73, 45, 7, 74, 46],
+    [1, 53, 23, 37, 54, 24],
+    [19, 45, 15, 26, 46, 16],
+
+    // 30
+    [5, 145, 115, 10, 146, 116],
+    [19, 75, 47, 10, 76, 48],
+    [15, 54, 24, 25, 55, 25],
+    [23, 45, 15, 25, 46, 16],
+
+    // 31
+    [13, 145, 115, 3, 146, 116],
+    [2, 74, 46, 29, 75, 47],
+    [42, 54, 24, 1, 55, 25],
+    [23, 45, 15, 28, 46, 16],
+
+    // 32
+    [17, 145, 115],
+    [10, 74, 46, 23, 75, 47],
+    [10, 54, 24, 35, 55, 25],
+    [19, 45, 15, 35, 46, 16],
+
+    // 33
+    [17, 145, 115, 1, 146, 116],
+    [14, 74, 46, 21, 75, 47],
+    [29, 54, 24, 19, 55, 25],
+    [11, 45, 15, 46, 46, 16],
+
+    // 34
+    [13, 145, 115, 6, 146, 116],
+    [14, 74, 46, 23, 75, 47],
+    [44, 54, 24, 7, 55, 25],
+    [59, 46, 16, 1, 47, 17],
+
+    // 35
+    [12, 151, 121, 7, 152, 122],
+    [12, 75, 47, 26, 76, 48],
+    [39, 54, 24, 14, 55, 25],
+    [22, 45, 15, 41, 46, 16],
+
+    // 36
+    [6, 151, 121, 14, 152, 122],
+    [6, 75, 47, 34, 76, 48],
+    [46, 54, 24, 10, 55, 25],
+    [2, 45, 15, 64, 46, 16],
+
+    // 37
+    [17, 152, 122, 4, 153, 123],
+    [29, 74, 46, 14, 75, 47],
+    [49, 54, 24, 10, 55, 25],
+    [24, 45, 15, 46, 46, 16],
+
+    // 38
+    [4, 152, 122, 18, 153, 123],
+    [13, 74, 46, 32, 75, 47],
+    [48, 54, 24, 14, 55, 25],
+    [42, 45, 15, 32, 46, 16],
+
+    // 39
+    [20, 147, 117, 4, 148, 118],
+    [40, 75, 47, 7, 76, 48],
+    [43, 54, 24, 22, 55, 25],
+    [10, 45, 15, 67, 46, 16],
+
+    // 40
+    [19, 148, 118, 6, 149, 119],
+    [18, 75, 47, 31, 76, 48],
+    [34, 54, 24, 34, 55, 25],
+    [20, 45, 15, 61, 46, 16]
+  ];
+
+  QRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) {
+
+    var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
+
+    if (rsBlock == undefined) {
+      throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel);
+    }
+
+    var length = rsBlock.length / 3;
+
+    var list = new Array();
+
+    for (var i = 0; i < length; i++) {
+
+      var count = rsBlock[i * 3 + 0];
+      var totalCount = rsBlock[i * 3 + 1];
+      var dataCount = rsBlock[i * 3 + 2];
+
+      for (var j = 0; j < count; j++) {
+        list.push(new QRRSBlock(totalCount, dataCount));
+      }
+    }
+
+    return list;
+  }
+
+  QRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) {
+
+    switch (errorCorrectLevel) {
+      case QRErrorCorrectLevel.L:
+        return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
+      case QRErrorCorrectLevel.M:
+        return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
+      case QRErrorCorrectLevel.Q:
+        return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
+      case QRErrorCorrectLevel.H:
+        return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
+      default:
+        return undefined;
+    }
+  }
+
+  //---------------------------------------------------------------------
+  // QRBitBuffer
+  //---------------------------------------------------------------------
+
+  function QRBitBuffer() {
+    this.buffer = new Array();
+    this.length = 0;
+  }
+
+  QRBitBuffer.prototype = {
+
+    get: function (index) {
+      var bufIndex = Math.floor(index / 8);
+      return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) == 1;
+    },
+
+    put: function (num, length) {
+      for (var i = 0; i < length; i++) {
+        this.putBit(((num >>> (length - i - 1)) & 1) == 1);
+      }
+    },
+
+    getLengthInBits: function () {
+      return this.length;
+    },
+
+    putBit: function (bit) {
+
+      var bufIndex = Math.floor(this.length / 8);
+      if (this.buffer.length <= bufIndex) {
+        this.buffer.push(0);
+      }
+
+      if (bit) {
+        this.buffer[bufIndex] |= (0x80 >>> (this.length % 8));
+      }
+
+      this.length++;
+    }
+  };
+
+  //---------------------------------------------------------------------
+  // Support Chinese
+  //---------------------------------------------------------------------
+  function utf16To8(text) {
+    var result = '';
+    var c;
+    for (var i = 0; i < text.length; i++) {
+      c = text.charCodeAt(i);
+      if (c >= 0x0001 && c <= 0x007F) {
+        result += text.charAt(i);
+      } else if (c > 0x07FF) {
+        result += String.fromCharCode(0xE0 | c >> 12 & 0x0F);
+        result += String.fromCharCode(0x80 | c >> 6 & 0x3F);
+        result += String.fromCharCode(0x80 | c >> 0 & 0x3F);
+      } else {
+        result += String.fromCharCode(0xC0 | c >> 6 & 0x1F);
+        result += String.fromCharCode(0x80 | c >> 0 & 0x3F);
+      }
+    }
+    return result;
+  }
+
+  uQRCode = {
+
+    errorCorrectLevel: QRErrorCorrectLevel,
+
+    defaults: {
+      size: 354,
+      margin: 0,
+      backgroundColor: '#ffffff',
+      foregroundColor: '#000000',
+      errorCorrectLevel: QRErrorCorrectLevel.H,
+      typeNumber: -1
+    },
+
+    make: function (canvas, ctx, options) {
+      var defaultOptions = {
+        x: 0,
+        y: 0,
+        text: options.text,
+        size: this.defaults.size,
+        margin: this.defaults.margin,
+        backgroundColor: this.defaults.backgroundColor,
+        foregroundColor: this.defaults.foregroundColor,
+        errorCorrectLevel: this.defaults.errorCorrectLevel,
+        typeNumber: this.defaults.typeNumber
+      };
+      if (options) {
+        for (var i in options) {
+          defaultOptions[i] = options[i];
+        }
+      }
+      options = defaultOptions;
+
+      var qrcode = new QRCode(options.typeNumber, options.errorCorrectLevel);
+      qrcode.addData(utf16To8(options.text));
+      qrcode.make();
+
+      ctx.fill
+      ctx.fillStyle = options.backgroundColor;
+      ctx.fillRect(options.x, options.y, options.size, options.size);
+
+      var tileW = (options.size - options.margin * 2) / qrcode.getModuleCount();
+      var tileH = tileW;
+
+      for (var row = 0; row < qrcode.getModuleCount(); row++) {
+        for (var col = 0; col < qrcode.getModuleCount(); col++) {
+          var style = qrcode.isDark(row, col) ? options.foregroundColor : options.backgroundColor;
+          ctx.fillStyle = style
+          var x = Math.round(col * tileW) + options.margin;
+          var y = Math.round(row * tileH) + options.margin;
+          var w = Math.ceil((col + 1) * tileW) - Math.floor(col * tileW);
+          var h = Math.ceil((row + 1) * tileW) - Math.floor(row * tileW);
+          ctx.fillRect(options.x + x, options.y + y, w, h);
+        }
+      }
+    }
+  }
+
+})()
+
+export default uQRCode

+ 11 - 0
utils/js_sdk/u-draw-poster/index.d.ts

@@ -0,0 +1,11 @@
+import { DrawPosterBuildOpts } from "./utils/interface";
+import DrawPoster from "./draw-poster";
+import drawQrCode from "./extends/draw-qr-code/index";
+import createFromList from './extends/create-from-list/index';
+import drawPainter from './extends/draw-painter/index';
+declare const useDrawPoster: (options: string | DrawPosterBuildOpts) => Promise<DrawPoster & import("./utils/interface").drawPosterExtends>;
+declare const useDrawPosters: (optionsAll: (string | DrawPosterBuildOpts)[]) => Promise<{
+    [key: string]: DrawPoster & import("./utils/interface").drawPosterExtends;
+}>;
+export { DrawPoster, useDrawPoster, useDrawPosters, drawQrCode, drawPainter, createFromList };
+export default DrawPoster;

+ 22 - 0
utils/js_sdk/u-draw-poster/index.js

@@ -0,0 +1,22 @@
+import * as dfucs from "./extends/draw-function/index";
+import DrawPoster from "./draw-poster";
+import drawQrCode from "./extends/draw-qr-code/index";
+import createFromList from './extends/create-from-list/index';
+import drawPainter from './extends/draw-painter/index';
+DrawPoster.useCtx(dfucs.drawImage);
+DrawPoster.useCtx(dfucs.fillWarpText);
+DrawPoster.useCtx(dfucs.roundRect);
+DrawPoster.useCtx(dfucs.fillRoundRect);
+DrawPoster.useCtx(dfucs.strokeRoundRect);
+DrawPoster.useCtx(dfucs.drawRoundImage);
+DrawPoster.useCtx(dfucs.drawImageFit);
+const useDrawPoster = async (options) => {
+    const dp = await DrawPoster.build(options);
+    return dp;
+};
+const useDrawPosters = async (optionsAll) => {
+    const dps = await DrawPoster.buildAll(optionsAll);
+    return dps;
+};
+export { DrawPoster, useDrawPoster, useDrawPosters, drawQrCode, drawPainter, createFromList };
+export default DrawPoster;

+ 13 - 0
utils/js_sdk/u-draw-poster/package.json

@@ -0,0 +1,13 @@
+{
+    "id": "u-draw-poster",
+    "name": "u-draw-poster uniVue2|3适用 海报绘制工具",
+    "version": "1.1.5",
+    "description": "全端支持,内置多种海报绘制方法、表单绘制、二维码生成,图片裁剪。原生开发体验,上手快,不污染组件数据",
+    "keywords": [
+        "海报",
+        "绘制",
+        "分享",
+        "小程序",
+        "canvas"
+    ]
+}

+ 7 - 0
utils/js_sdk/u-draw-poster/utils/global.d.ts

@@ -0,0 +1,7 @@
+/// <reference types="@dcloudio/types" />
+/** 当前环境类型 */
+export declare type UniPlatforms = 'app-plus' | 'app-plus-nvue' | 'h5' | 'mp-weixin' | 'mp-alipay' | 'mp-baidu' | 'mp-toutiao' | 'mp-qq' | 'mp-360' | 'mp' | 'quickapp-webview' | 'quickapp-webview-union' | 'quickapp-webview-huawei' | undefined;
+export declare const PLATFORM: UniPlatforms;
+/** 全局对象 */
+declare const _uni: UniApp.Uni;
+export default _uni;

+ 11 - 0
utils/js_sdk/u-draw-poster/utils/global.js

@@ -0,0 +1,11 @@
+var _a;
+export const PLATFORM = typeof process !== 'undefined' ? (_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a.VUE_APP_PLATFORM : undefined;
+/** 全局对象 */
+const _uni = (function () {
+    if (typeof uni != "undefined")
+        return uni;
+    if (typeof wx != "undefined")
+        return wx;
+    return uni;
+})();
+export default _uni;

+ 175 - 0
utils/js_sdk/u-draw-poster/utils/interface.d.ts

@@ -0,0 +1,175 @@
+/// <reference types="@dcloudio/types" />
+import DrawPoster from "../draw-poster";
+import { ImageFitOption } from '../extends/draw-function/draw-image-fit';
+import { CreateLayerOpts, DrawRowOpt } from "../extends/create-from-list";
+import { PainterContainerOption } from "../extends/draw-painter";
+/** 绘制容器 */
+export declare type Execute = Array<() => Promise<boolean>>;
+export interface drawPosterExtends {
+    from: {
+        height: number;
+        padding: number;
+        margin: number;
+    };
+    createLayer: (afferOpts: CreateLayerOpts, rowList: DrawRowOpt[]) => number;
+    setFromOptions: (opts: Partial<{
+        height: number;
+        padding: number;
+        margin: number;
+    }>) => void;
+    gcanvas: {
+        WeexBridge: any;
+        Image: any;
+        enable: (el: any, options: {
+            bridge?: any;
+            debug?: boolean;
+            disableAutoSwap?: any;
+            disableComboCommands?: any;
+        }) => Canvas;
+    };
+    painter: (option: PainterContainerOption) => void;
+}
+/** 构建器配置 */
+export interface DrawPosterBuildOpts {
+    /** 查询选择器; 注意不需要加# */
+    selector: string;
+    /** 选取组件范围 */
+    componentThis?: any;
+    /** 绘制类型为2d绘制, 默认开启, 在微信小程序的时候动态加载 */
+    type2d?: boolean;
+    /** 是否在绘制时进行加载提示 */
+    loading?: boolean;
+    /** 当存在绘制图片时, 等待绘画完毕的时间(秒)仅App中生效
+     *
+     *  具体查看文档说明:https://github.com/TuiMao233/uni-draw-poster
+     */
+    drawImageTime?: number;
+    /** 是否开启调试模式 */
+    debugging?: boolean;
+    /** 加载提示文字 */
+    loadingText?: string;
+    /** 创建图片提示文字 */
+    createText?: string;
+    /** 是否启动gcanvas(nvue) */
+    gcanvas?: boolean;
+}
+/** 绘制换行配置 */
+export interface FillWarpTextOpts {
+    text: string;
+    maxWidth?: number;
+    lineHeight?: number;
+    layer?: number;
+    x?: number;
+    y?: number;
+    splitText?: string;
+    notFillText?: boolean;
+}
+/** 绘制二维码配置 */
+export interface DrawQrCodeOpts {
+    text: string;
+    x?: number;
+    y?: number;
+    size?: number;
+    margin?: number;
+    backgroundColor?: string;
+    foregroundColor?: string;
+}
+/** 绘制换行, 单行信息 */
+export interface FillWarpTextItemInfo {
+    text: string;
+    y: number;
+    x: number;
+}
+/** 绘制画笔 */
+export interface DrawPosterCanvasCtx extends UniApp.CanvasContext {
+    [key: string]: any;
+    createImageData: () => ImageData;
+    textAlign: CanvasTextDrawingStyles["textAlign"];
+    textBaseline: CanvasTextDrawingStyles["textBaseline"];
+    transform: CanvasTransform["transform"];
+    /** 绘制图片原型 */
+    drawImageProto: UniApp.CanvasContext['drawImage'];
+    /** 当前绘制类型 */
+    drawType: 'context' | 'type2d';
+    /** 等待绘制图片
+     *
+     * 说明文档: https://tuimao233.gitee.io/mao-blog/my-extends/u-draw-poste
+     */
+    drawImage(url: string, dx?: number | undefined, dy?: number | undefined, dWidth?: number | undefined, dHeigt?: number | undefined, sx?: number | undefined, sy?: number | undefined, sWidth?: number | undefined, sHeight?: number | undefined): Promise<boolean>;
+    /** 绘制圆角图片
+     *
+     * 说明文档: https://tuimao233.gitee.io/mao-blog/my-extends/u-draw-poste
+     */
+    drawRoundImage(url: string, x: number, y: number, w: number, h: number, r?: number): Promise<boolean>;
+    /** 绘制 Object-Fit 模式图片
+     *
+     * 说明文档: https://tuimao233.gitee.io/mao-blog/my-extends/u-draw-poste
+     */
+    drawImageFit(url: string, opts?: ImageFitOption): Promise<boolean>;
+    /** 绘制换行字体
+     *
+     * 说明文档: https://tuimao233.gitee.io/mao-blog/my-extends/u-draw-poste
+     */
+    fillWarpText(options: FillWarpTextOpts): Array<FillWarpTextItemInfo>;
+    /** 绘制圆角矩形(原型)
+     *
+     */
+    roundRect(x: number, y: number, w: number, h: number, r: number, fill?: boolean, stroke?: boolean): void;
+    /** 绘制圆角矩形(填充)
+     *
+     * 说明文档: https://tuimao233.gitee.io/mao-blog/my-extends/u-draw-poste
+     */
+    fillRoundRect(x: number, y: number, w: number, h: number, r: number): void;
+    /** 绘制圆角矩形(边框)
+     *
+     * 说明文档: https://tuimao233.gitee.io/mao-blog/my-extends/u-draw-poste
+     */
+    strokeRoundRect(x: number, y: number, w: number, h: number, r: number): void;
+    /** 绘制二维码
+     *
+     * 说明文档: https://tuimao233.gitee.io/mao-blog/my-extends/u-draw-poste
+     */
+    drawQrCode(options: DrawQrCodeOpts): void;
+}
+/** Canvas2d实例 */
+export interface Canvas {
+    width: number;
+    height: number;
+    getContext(contextType: "2d" | "webgl"): DrawPosterCanvasCtx | WebGLRenderingContext;
+    createImage(): {
+        src: string;
+        width: number;
+        height: number;
+        onload: () => void;
+        onerror: () => void;
+    };
+    requestAnimationFrame(callback: Function): number;
+    cancelAnimationFrame(requestID: number): void;
+    createImageData(): ImageData;
+    createPath2D(path: Path2D): Path2D;
+    toDataURL(type: string, encoderOptions: number): string;
+}
+/** 创建图片路径配置项 */
+export interface CreateImagePathOptions {
+    x?: number;
+    y?: number;
+    width?: number;
+    height?: number;
+    destWidth?: number;
+    destHeight?: number;
+}
+/** 绘制实例扩展配置 */
+export interface DrawPosterUseOpts {
+    name: string;
+    init?: (dp: InstanceType<typeof DrawPoster>) => void;
+    handle: (dp: InstanceType<typeof DrawPoster>, ...args: any[]) => any;
+    createImage?: (dp: InstanceType<typeof DrawPoster>) => void;
+    [key: string]: any;
+}
+/** 绘制画笔实例扩展配置 */
+export interface DrawPosterUseCtxOpts {
+    name: string;
+    init?: (canvas: Canvas, ctx: DrawPosterCanvasCtx) => void;
+    handle: (canvas: Canvas, ctx: DrawPosterCanvasCtx, ...args: any[]) => any;
+    [key: string]: any;
+}

+ 1 - 0
utils/js_sdk/u-draw-poster/utils/interface.js

@@ -0,0 +1 @@
+export {};

+ 38 - 0
utils/js_sdk/u-draw-poster/utils/object-sizing.d.ts

@@ -0,0 +1,38 @@
+export declare type ObjectFit = "contain" | "cover";
+export declare type ObjectPosition = ["left" | "center" | "right", "top" | "center" | "bottom"];
+export interface Size {
+    width: number;
+    height: number;
+}
+/**
+ * 用于计算图片的宽高比例
+ * @see https://drafts.csswg.org/css-images-3/#sizing-terms
+ *
+ * ## 名词解释
+ * ### intrinsic dimensions
+ * 图片本身的尺寸
+ *
+ * ### specified size
+ * 用户指定的元素尺寸
+ *
+ * ### concrete object size
+ * 应用了 `objectFit` 之后图片的显示尺寸
+ *
+ * ### default object size
+ */
+export declare function calculateConcreteRect(style: {
+    /** @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-fit */
+    objectFit?: ObjectFit;
+    /** @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-position */
+    intrinsicPosition?: ObjectPosition;
+    specifiedPosition?: [number, number];
+}, intrinsicSize: Size, specifiedSize: Size): {
+    sx: number;
+    sy: number;
+    sw: number;
+    sh: number;
+    dx: number;
+    dy: number;
+    dw: number;
+    dh: number;
+};

+ 78 - 0
utils/js_sdk/u-draw-poster/utils/object-sizing.js

@@ -0,0 +1,78 @@
+/**
+ * 用于计算图片的宽高比例
+ * @see https://drafts.csswg.org/css-images-3/#sizing-terms
+ *
+ * ## 名词解释
+ * ### intrinsic dimensions
+ * 图片本身的尺寸
+ *
+ * ### specified size
+ * 用户指定的元素尺寸
+ *
+ * ### concrete object size
+ * 应用了 `objectFit` 之后图片的显示尺寸
+ *
+ * ### default object size
+ */
+export function calculateConcreteRect(style, intrinsicSize, specifiedSize) {
+    var _a, _b;
+    const isContain = style.objectFit === 'contain';
+    const specifiedPosition = style.specifiedPosition || [0, 0];
+    // ratio 越大表示矩形越"扁"
+    let intrinsicRatio = intrinsicSize.width / intrinsicSize.height;
+    let specifiedRatio = specifiedSize.width / specifiedSize.height;
+    /** 图片原始尺寸与最终尺寸之比 */
+    let concreteScale = 1;
+    if (intrinsicRatio > specifiedRatio && style.objectFit == "contain" ||
+        intrinsicRatio <= specifiedRatio && style.objectFit == "cover")
+        // 图片较"胖"时完整显示图片,图片较"瘦"时完全覆盖容器
+        // 这两种情况下有 concreteRect.width = specifiedSize.width
+        // 因为 concreteRect.width = intrinsicSize.width * concreteScale
+        // 所以:
+        concreteScale = specifiedSize.width / intrinsicSize.width;
+    else if (intrinsicRatio > specifiedRatio && style.objectFit == "cover" ||
+        intrinsicRatio <= specifiedRatio && style.objectFit == "contain")
+        // 图片较"瘦"时完整显示图片,图片较"胖"时完全覆盖容器
+        // 这两种情况下有 concreteRect.height = specifiedSize.height
+        // 因为 concreteRect.height = intrinsicSize.height * concreteScale
+        // 所以:
+        concreteScale = specifiedSize.height / intrinsicSize.height;
+    else
+        throw new Error("Unkonwn concreteScale");
+    let concreteRectWidth = intrinsicSize.width * concreteScale;
+    let concreteRectHeight = intrinsicSize.height * concreteScale;
+    // 这里可以把 left top 的计算想象成投影
+    let xRelativeOrigin = { left: 0, center: .5, right: 1 }[((_a = style.intrinsicPosition) === null || _a === void 0 ? void 0 : _a[0]) || "center"];
+    let yRelativeOrigin = { top: 0, center: .5, bottom: 1 }[((_b = style.intrinsicPosition) === null || _b === void 0 ? void 0 : _b[1]) || "center"];
+    let concreteRectLeft = (specifiedSize.width - concreteRectWidth) * xRelativeOrigin;
+    let concreteRectTop = (specifiedSize.height - concreteRectHeight) * yRelativeOrigin;
+    if (isContain) {
+        concreteRectLeft += specifiedPosition[0];
+        concreteRectTop += specifiedPosition[1];
+    }
+    // 这里有两个坐标系,一个是 specified (dist) 的坐标系,一个是 intrinsic (src) 的坐标系
+    // 这里将两个坐标系的点位置进行变换
+    // 例: 带入 x=0, y=0, 得到的结果就是 specifiedRect 的左上角在 intrinsic 坐标系下的坐标位置
+    // 在 specified 坐标系下, intrinsic 的零点在 (concreteRectLeft, concreteRectTop), 缩放为 concreteScale
+    // 所以有 x_dist = x_src * concreteScale + concreteRectLeft
+    //        y_dist = y_src * concreteScale + concreteRectTop
+    let dist2src = (distX, distY) => [
+        /* srcX = */ (distX - concreteRectLeft) / concreteScale,
+        /* srcY = */ (distY - concreteRectTop) / concreteScale
+    ];
+    let [srcLeft, srcTop] = dist2src(0, 0);
+    // srcRight =  图片 specified 框右边在 src 坐标系下的 x 坐标
+    // srcBottom = 图片 specified 框下边在 src 坐标系下的 y 坐标
+    let [srcRight, srcBottom] = dist2src(specifiedSize.width, specifiedSize.height);
+    // 这里要对 src 和 disc 两个框进行约束
+    return {
+        sx: Math.max(srcLeft, 0),
+        sy: Math.max(srcTop, 0),
+        sw: Math.min(srcRight - srcLeft, intrinsicSize.width),
+        sh: Math.min(srcBottom - srcTop, intrinsicSize.height),
+        dx: isContain ? Math.max(concreteRectLeft, 0) : specifiedPosition[0],
+        dy: isContain ? Math.max(concreteRectTop, 0) : specifiedPosition[1],
+        dw: Math.min(concreteRectWidth, specifiedSize.width),
+        dh: Math.min(concreteRectHeight, specifiedSize.height)
+    };
+}

+ 20 - 0
utils/js_sdk/u-draw-poster/utils/utils.d.ts

@@ -0,0 +1,20 @@
+import { DrawPosterBuildOpts } from "./interface";
+/** 是否是base64本地地址 */
+export declare const isBaseUrl: (str: string) => boolean;
+/** 是否是小程序本地地址 */
+export declare const isTmpUrl: (str: string) => boolean;
+/** 是否是网络地址 */
+export declare const isNetworkUrl: (str: string) => boolean;
+/** 对象target挂载到对象current */
+export declare const extendMount: (current: Record<any, any>, target: Record<any, any>, handle?: (extend: Function, target?: Record<any, any> | undefined) => any) => void;
+/** 处理构建配置 */
+export declare const handleBuildOpts: (options: string | DrawPosterBuildOpts) => {
+    selector: string;
+    componentThis: any;
+    type2d: boolean;
+    loading: boolean;
+    debugging: boolean;
+    loadingText: string;
+    createText: string;
+    gcanvas: boolean;
+};

+ 49 - 0
utils/js_sdk/u-draw-poster/utils/utils.js

@@ -0,0 +1,49 @@
+import { PLATFORM } from "./global";
+/** 是否是base64本地地址 */
+export const isBaseUrl = (str) => {
+    return /^\s*data:(?:[a-z]+\/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*?)\s*$/i.test(str);
+};
+/** 是否是小程序本地地址 */
+export const isTmpUrl = (str) => {
+    return /http:\/\/temp\/wx/.test(str);
+};
+/** 是否是网络地址 */
+export const isNetworkUrl = (str) => {
+    return /^(((ht|f)tps?):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?$/.test(str);
+};
+/** 对象target挂载到对象current */
+export const extendMount = (current, target, handle = (extend, target) => undefined) => {
+    for (const key in target) {
+        current[key] = handle(target[key].handle, target[key]) || target[key].handle;
+    }
+};
+/** 处理构建配置 */
+export const handleBuildOpts = (options) => {
+    let defaultOpts = {
+        selector: '',
+        componentThis: undefined,
+        type2d: true,
+        loading: false,
+        debugging: false,
+        loadingText: '绘制海报中...',
+        createText: '生成图片中...',
+        gcanvas: false
+    };
+    if (typeof options === "string") {
+        defaultOpts.selector = options;
+    }
+    else {
+        defaultOpts = Object.assign(Object.assign({}, defaultOpts), options);
+    }
+    const oldSelector = defaultOpts.selector;
+    if (PLATFORM === 'mp-weixin' && defaultOpts.type2d) {
+        defaultOpts.selector = '#' + defaultOpts.selector;
+    }
+    if (!PLATFORM) {
+        console.error('注意! draw-poster未开启uni条件编译! 当环境是微信小程序将不会动态切换为type2d模式');
+        console.error(`请在vue.config.js中的transpileDependencies中添加'uni-draw-poster'`);
+        console.error(`或者可以在选择器字符串前缀中添加#来切换为type2d绘制`);
+        defaultOpts.selector = oldSelector;
+    }
+    return defaultOpts;
+};

+ 3 - 0
utils/js_sdk/u-draw-poster/utils/wx-utils.d.ts

@@ -0,0 +1,3 @@
+import { Canvas } from "./interface";
+export declare const downloadImgUrl: (url: string) => Promise<string>;
+export declare const getCanvas2dContext: (selector: string, componentThis?: any) => Promise<Canvas | {}>;

+ 37 - 0
utils/js_sdk/u-draw-poster/utils/wx-utils.js

@@ -0,0 +1,37 @@
+/*
+ * @Author: Mr.Mao
+ * @LastEditors: Mr.Mao
+ * @Date: 2020-10-12 08:49:27
+ * @LastEditTime: 2020-12-09 13:54:10
+ * @Description:
+ * @任何一个傻子都能写出让电脑能懂的代码,而只有好的程序员可以写出让人能看懂的代码
+ */
+import uni from "./global";
+import { isBaseUrl, isNetworkUrl, isTmpUrl } from './utils';
+// 下载指定地址图片, 如果不符合下载图片, 则直接返回
+export const downloadImgUrl = (url) => {
+    const isLocalFile = isBaseUrl(url) || isTmpUrl(url) || !isNetworkUrl(url);
+    return new Promise((resolve, reject) => {
+        if (isLocalFile) {
+            return resolve(url);
+        }
+        uni.downloadFile({
+            url,
+            success: (res) => resolve(res.tempFilePath),
+            fail: reject
+        });
+    });
+};
+// 获取当前指定 node 节点
+export const getCanvas2dContext = (selector, componentThis) => {
+    return new Promise(resolve => {
+        const query = (componentThis ?
+            uni.createSelectorQuery().in(componentThis) :
+            uni.createSelectorQuery());
+        query.select(selector)
+            .fields({ node: true }, res => {
+            const node = res === null || res === void 0 ? void 0 : res.node;
+            resolve(node || {});
+        }).exec();
+    });
+};

+ 273 - 0
utils/js_sdk/wa-permission/permission.js

@@ -0,0 +1,273 @@
+/**
+ * 本模块封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启
+ * https://ext.dcloud.net.cn/plugin?id=594
+ */
+
+var isIos
+// #ifdef APP-PLUS
+isIos = (plus.os.name == "iOS")
+// #endif
+
+// 判断推送权限是否开启
+function judgeIosPermissionPush() {
+	var result = false;
+	var UIApplication = plus.ios.import("UIApplication");
+	var app = UIApplication.sharedApplication();
+	var enabledTypes = 0;
+	if (app.currentUserNotificationSettings) {
+		var settings = app.currentUserNotificationSettings();
+		enabledTypes = settings.plusGetAttribute("types");
+		console.log("enabledTypes1:" + enabledTypes);
+		if (enabledTypes == 0) {
+			console.log("推送权限没有开启");
+		} else {
+			result = true;
+			console.log("已经开启推送功能!")
+		}
+		plus.ios.deleteObject(settings);
+	} else {
+		enabledTypes = app.enabledRemoteNotificationTypes();
+		if (enabledTypes == 0) {
+			console.log("推送权限没有开启!");
+		} else {
+			result = true;
+			console.log("已经开启推送功能!")
+		}
+		console.log("enabledTypes2:" + enabledTypes);
+	}
+	plus.ios.deleteObject(app);
+	plus.ios.deleteObject(UIApplication);
+	return result;
+}
+
+// 判断定位权限是否开启
+function judgeIosPermissionLocation() {
+	var result = false;
+	var cllocationManger = plus.ios.import("CLLocationManager");
+	var status = cllocationManger.authorizationStatus();
+	result = (status != 2)
+	console.log("定位权限开启:" + result);
+	// 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation
+	/* var enable = cllocationManger.locationServicesEnabled();
+	var status = cllocationManger.authorizationStatus();
+	console.log("enable:" + enable);
+	console.log("status:" + status);
+	if (enable && status != 2) {
+		result = true;
+		console.log("手机定位服务已开启且已授予定位权限");
+	} else {
+		console.log("手机系统的定位没有打开或未给予定位权限");
+	} */
+	plus.ios.deleteObject(cllocationManger);
+	return result;
+}
+
+// 判断麦克风权限是否开启
+function judgeIosPermissionRecord() {
+	var result = false;
+	var avaudiosession = plus.ios.import("AVAudioSession");
+	var avaudio = avaudiosession.sharedInstance();
+	var permissionStatus = avaudio.recordPermission();
+	console.log("permissionStatus:" + permissionStatus);
+	if (permissionStatus == 1684369017 || permissionStatus == 1970168948) {
+		console.log("麦克风权限没有开启");
+	} else {
+		result = true;
+		console.log("麦克风权限已经开启");
+	}
+	plus.ios.deleteObject(avaudiosession);
+	return result;
+}
+
+// 判断相机权限是否开启
+function judgeIosPermissionCamera() {
+	var result = false;
+	var AVCaptureDevice = plus.ios.import("AVCaptureDevice");
+	var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');
+	console.log("authStatus:" + authStatus);
+	if (authStatus == 3) {
+		result = true;
+		console.log("相机权限已经开启");
+	} else {
+		console.log("相机权限没有开启");
+	}
+	plus.ios.deleteObject(AVCaptureDevice);
+	return result;
+}
+
+// 判断相册权限是否开启
+function judgeIosPermissionPhotoLibrary() {
+	var result = false;
+	var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");
+	var authStatus = PHPhotoLibrary.authorizationStatus();
+	console.log("authStatus:" + authStatus);
+	if (authStatus == 3) {
+		result = true;
+		console.log("相册权限已经开启");
+	} else {
+		console.log("相册权限没有开启");
+	}
+	plus.ios.deleteObject(PHPhotoLibrary);
+	return result;
+}
+
+// 判断通讯录权限是否开启
+function judgeIosPermissionContact() {
+	var result = false;
+	var CNContactStore = plus.ios.import("CNContactStore");
+	var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);
+	if (cnAuthStatus == 3) {
+		result = true;
+		console.log("通讯录权限已经开启");
+	} else {
+		console.log("通讯录权限没有开启");
+	}
+	plus.ios.deleteObject(CNContactStore);
+	return result;
+}
+
+// 判断日历权限是否开启
+function judgeIosPermissionCalendar() {
+	var result = false;
+	var EKEventStore = plus.ios.import("EKEventStore");
+	var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);
+	if (ekAuthStatus == 3) {
+		result = true;
+		console.log("日历权限已经开启");
+	} else {
+		console.log("日历权限没有开启");
+	}
+	plus.ios.deleteObject(EKEventStore);
+	return result;
+}
+
+// 判断备忘录权限是否开启
+function judgeIosPermissionMemo() {
+	var result = false;
+	var EKEventStore = plus.ios.import("EKEventStore");
+	var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);
+	if (ekAuthStatus == 3) {
+		result = true;
+		console.log("备忘录权限已经开启");
+	} else {
+		console.log("备忘录权限没有开启");
+	}
+	plus.ios.deleteObject(EKEventStore);
+	return result;
+}
+
+// Android权限查询
+function requestAndroidPermission(permissionID) {
+	return new Promise((resolve, reject) => {
+		plus.android.requestPermissions(
+			[permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
+			function(resultObj) {
+				var result = 0;
+				for (var i = 0; i < resultObj.granted.length; i++) {
+					var grantedPermission = resultObj.granted[i];
+					console.log('已获取的权限:' + grantedPermission);
+					result = 1
+				}
+				for (var i = 0; i < resultObj.deniedPresent.length; i++) {
+					var deniedPresentPermission = resultObj.deniedPresent[i];
+					console.log('拒绝本次申请的权限:' + deniedPresentPermission);
+					result = 0
+				}
+				for (var i = 0; i < resultObj.deniedAlways.length; i++) {
+					var deniedAlwaysPermission = resultObj.deniedAlways[i];
+					console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
+					result = -1
+				}
+				resolve(result);
+				// 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限
+				// if (result != 1) {
+				// gotoAppPermissionSetting()
+				// }
+			},
+			function(error) {
+				console.log('申请权限错误:' + error.code + " = " + error.message);
+				resolve({
+					code: error.code,
+					message: error.message
+				});
+			}
+		);
+	});
+}
+
+// 使用一个方法,根据参数判断权限
+function judgeIosPermission(permissionID) {
+	if (permissionID == "location") {
+		return judgeIosPermissionLocation()
+	} else if (permissionID == "camera") {
+		return judgeIosPermissionCamera()
+	} else if (permissionID == "photoLibrary") {
+		return judgeIosPermissionPhotoLibrary()
+	} else if (permissionID == "record") {
+		return judgeIosPermissionRecord()
+	} else if (permissionID == "push") {
+		return judgeIosPermissionPush()
+	} else if (permissionID == "contact") {
+		return judgeIosPermissionContact()
+	} else if (permissionID == "calendar") {
+		return judgeIosPermissionCalendar()
+	} else if (permissionID == "memo") {
+		return judgeIosPermissionMemo()
+	}
+	return false;
+}
+
+// 跳转到**应用**的权限页面
+function gotoAppPermissionSetting() {
+	if (isIos) {
+		var UIApplication = plus.ios.import("UIApplication");
+		var application2 = UIApplication.sharedApplication();
+		var NSURL2 = plus.ios.import("NSURL");
+		// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");		
+		var setting2 = NSURL2.URLWithString("app-settings:");
+		application2.openURL(setting2);
+
+		plus.ios.deleteObject(setting2);
+		plus.ios.deleteObject(NSURL2);
+		plus.ios.deleteObject(application2);
+	} else {
+		// console.log(plus.device.vendor);
+		var Intent = plus.android.importClass("android.content.Intent");
+		var Settings = plus.android.importClass("android.provider.Settings");
+		var Uri = plus.android.importClass("android.net.Uri");
+		var mainActivity = plus.android.runtimeMainActivity();
+		var intent = new Intent();
+		intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+		var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
+		intent.setData(uri);
+		mainActivity.startActivity(intent);
+	}
+}
+
+// 检查系统的设备服务是否开启
+// var checkSystemEnableLocation = async function () {
+function checkSystemEnableLocation() {
+	if (isIos) {
+		var result = false;
+		var cllocationManger = plus.ios.import("CLLocationManager");
+		var result = cllocationManger.locationServicesEnabled();
+		console.log("系统定位开启:" + result);
+		plus.ios.deleteObject(cllocationManger);
+		return result;
+	} else {
+		var context = plus.android.importClass("android.content.Context");
+		var locationManager = plus.android.importClass("android.location.LocationManager");
+		var main = plus.android.runtimeMainActivity();
+		var mainSvr = main.getSystemService(context.LOCATION_SERVICE);
+		var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER);
+		console.log("系统定位开启:" + result);
+		return result
+	}
+}
+
+module.exports = {
+	judgeIosPermission: judgeIosPermission,
+	requestAndroidPermission: requestAndroidPermission,
+	checkSystemEnableLocation: checkSystemEnableLocation,
+	gotoAppPermissionSetting: gotoAppPermissionSetting
+}

+ 83 - 0
utils/lib/request/adapters/index.js

@@ -0,0 +1,83 @@
+import buildURL from '../helpers/buildURL'
+import buildFullPath from '../core/buildFullPath'
+import settle from '../core/settle'
+
+/**
+ * 返回可选值存在的配置
+ * @param {Array} keys - 可选值数组
+ * @param {Object} config2 - 配置
+ * @return {{}} - 存在的配置项
+ */
+const mergeKeys = (keys, config2) => {
+  let config = {}
+  keys.forEach(prop => {
+    if (typeof config2[prop] !== 'undefined') {
+      config[prop] = config2[prop]
+    }
+  })
+  return config
+}
+export default (config) => {
+  return new Promise((resolve, reject) => {
+    const _config = {
+      url: buildURL(buildFullPath(config.baseURL, config.url), config.params),
+      header: config.header,
+      complete: (response) => {
+        response.config = config
+        try {
+          // 对可能字符串不是json 的情况容错
+          if (typeof response.data === 'string') {
+            response.data = JSON.parse(response.data)
+          }
+          // eslint-disable-next-line no-empty
+        } catch (e) {
+        }
+        settle(resolve, reject, response)
+      }
+    }
+    let requestTask
+    if (config.method === 'UPLOAD') {
+      let otherConfig = {
+        // #ifdef MP-ALIPAY
+        fileType: config.fileType,
+        // #endif
+        filePath: config.filePath,
+        name: config.name
+      }
+      const optionalKeys = [
+        // #ifdef APP-PLUS || H5 || MP-HARMONY
+        'files',
+        // #endif
+        // #ifdef H5
+        'file',
+        // #endif
+        'formData'
+      ]
+      requestTask = uni.uploadFile({..._config, ...otherConfig, ...mergeKeys(optionalKeys, config)})
+    } else if (config.method === 'DOWNLOAD') {
+      requestTask = uni.downloadFile(_config)
+    } else {
+      const optionalKeys = [
+        'data',
+        'method',
+        // #ifdef MP-ALIPAY || MP-WEIXIN || MP-HARMONY
+        'timeout',
+        // #endif
+        'dataType',
+        // #ifndef MP-ALIPAY || APP-PLUS
+        'responseType',
+        // #endif
+        // #ifdef APP-PLUS
+        'sslVerify',
+        // #endif
+        // #ifdef H5
+        'withCredentials'
+        // #endif
+      ]
+      requestTask = uni.request({..._config,...mergeKeys(optionalKeys, config)})
+    }
+    if (config.getTask) {
+      config.getTask(requestTask, config)
+    }
+  })
+}

+ 51 - 0
utils/lib/request/core/InterceptorManager.js

@@ -0,0 +1,51 @@
+'use strict'
+
+
+function InterceptorManager() {
+  this.handlers = []
+}
+
+/**
+ * Add a new interceptor to the stack
+ *
+ * @param {Function} fulfilled The function to handle `then` for a `Promise`
+ * @param {Function} rejected The function to handle `reject` for a `Promise`
+ *
+ * @return {Number} An ID used to remove interceptor later
+ */
+InterceptorManager.prototype.use = function use(fulfilled, rejected) {
+  this.handlers.push({
+    fulfilled: fulfilled,
+    rejected: rejected
+  })
+  return this.handlers.length - 1
+}
+
+/**
+ * Remove an interceptor from the stack
+ *
+ * @param {Number} id The ID that was returned by `use`
+ */
+InterceptorManager.prototype.eject = function eject(id) {
+  if (this.handlers[id]) {
+    this.handlers[id] = null
+  }
+}
+
+/**
+ * Iterate over all the registered interceptors
+ *
+ * This method is particularly useful for skipping over any
+ * interceptors that may have become `null` calling `eject`.
+ *
+ * @param {Function} fn The function to call for each interceptor
+ */
+InterceptorManager.prototype.forEach = function forEach(fn) {
+  this.handlers.forEach(h => {
+    if (h !== null) {
+      fn(h)
+    }
+  })
+}
+
+export default InterceptorManager

+ 198 - 0
utils/lib/request/core/Request.js

@@ -0,0 +1,198 @@
+/**
+ * @Class Request
+ * @description luch-request http请求插件
+ * @version 3.0.2
+ * @Author lu-ch
+ * @Date 2020-06-04
+ * @Email webwork.s@qq.com
+ * 文档: https://quanzhan.co/luch-request/
+ * github: https://github.com/lei-mu/luch-request
+ * DCloud: http://ext.dcloud.net.cn/plugin?id=392
+ * HBuilderX: 2.7.9
+ */
+
+
+import dispatchRequest from './dispatchRequest'
+import InterceptorManager from './InterceptorManager'
+import mergeConfig from './mergeConfig'
+import defaults from './defaults'
+import { isPlainObject } from '../utils'
+
+export default class Request {
+  /**
+   * @param {Object} arg - 全局配置
+   * @param {String} arg.baseURL - 全局根路径
+   * @param {Object} arg.header - 全局header
+   * @param {String} arg.method = [GET|POST|PUT|DELETE|CONNECT|HEAD|OPTIONS|TRACE] - 全局默认请求方式
+   * @param {String} arg.dataType = [json] - 全局默认的dataType
+   * @param {String} arg.responseType = [text|arraybuffer] - 全局默认的responseType。App和支付宝小程序不支持
+   * @param {Object} arg.custom - 全局默认的自定义参数
+   * @param {Number} arg.timeout - 全局默认的超时时间,单位 ms。默认30000。仅微信小程序(2.10.0)、支付宝小程序支持
+   * @param {Boolean} arg.sslVerify - 全局默认的是否验证 ssl 证书。默认true.仅App安卓端支持(HBuilderX 2.3.3+)
+   * @param {Boolean} arg.withCredentials - 全局默认的跨域请求时是否携带凭证(cookies)。默认false。仅H5支持(HBuilderX 2.6.15+)
+   * @param {Function(statusCode):Boolean} arg.validateStatus - 全局默认的自定义验证器。默认statusCode >= 200 && statusCode < 300
+   */
+  constructor(arg = {}) {
+    if (!isPlainObject(arg)) {
+      arg = {}
+      //console.warn('设置全局参数必须接收一个Object')
+    }
+    this.config = {...defaults, ...arg}
+    this.interceptors = {
+      request: new InterceptorManager(),
+      response: new InterceptorManager()
+    }
+  }
+
+  /**
+   * @Function
+   * @param {Request~setConfigCallback} f - 设置全局默认配置
+   */
+  setConfig(f) {
+    this.config = f(this.config)
+  }
+
+  _middleware(config) {
+    config = mergeConfig(this.config, config)
+    let chain = [dispatchRequest, undefined]
+    let promise = Promise.resolve(config)
+
+    this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
+      chain.unshift(interceptor.fulfilled, interceptor.rejected)
+    })
+
+    this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
+      chain.push(interceptor.fulfilled, interceptor.rejected)
+    })
+
+    while (chain.length) {
+      promise = promise.then(chain.shift(), chain.shift())
+    }
+
+    return promise
+  }
+
+  /**
+   * @Function
+   * @param {Object} config - 请求配置项
+   * @prop {String} options.url - 请求路径
+   * @prop {Object} options.data - 请求参数
+   * @prop {Object} [options.responseType = config.responseType] [text|arraybuffer] - 响应的数据类型
+   * @prop {Object} [options.dataType = config.dataType] - 如果设为 json,会尝试对返回的数据做一次 JSON.parse
+   * @prop {Object} [options.header = config.header] - 请求header
+   * @prop {Object} [options.method = config.method] - 请求方法
+   * @returns {Promise<unknown>}
+   */
+  request(config = {}) {
+    return this._middleware(config)
+  }
+
+  get(url, options = {}) {
+    return this.request({
+      url,
+      method: 'GET',
+      ...options
+    })
+  }
+
+  post(url, data, options = {}) {
+    return this.request({
+      url,
+      data,
+      method: 'POST',
+      ...options
+    })
+  }
+
+  // #ifndef MP-ALIPAY
+  put(url, data, options = {}) {
+    return this.request({
+      url,
+      data,
+      method: 'PUT',
+      ...options
+    })
+  }
+
+  // #endif
+
+  // #ifdef APP-PLUS || H5 || MP-WEIXIN || MP-BAIDU || MP-HARMONY
+  delete(url, data, options = {}) {
+    return this.request({
+      url,
+      data,
+      method: 'DELETE',
+      ...options
+    })
+  }
+
+  // #endif
+
+  // #ifdef APP-PLUS || H5 || MP-WEIXIN || MP-HARMONY
+  connect(url, data, options = {}) {
+    return this.request({
+      url,
+      data,
+      method: 'CONNECT',
+      ...options
+    })
+  }
+
+  // #endif
+
+  // #ifdef APP-PLUS || H5 || MP-WEIXIN || MP-BAIDU || MP-HARMONY
+  head(url, data, options = {}) {
+    return this.request({
+      url,
+      data,
+      method: 'HEAD',
+      ...options
+    })
+  }
+
+  // #endif
+
+  // #ifdef APP-PLUS || H5 || MP-WEIXIN || MP-BAIDU || MP-HARMONY
+  options(url, data, options = {}) {
+    return this.request({
+      url,
+      data,
+      method: 'OPTIONS',
+      ...options
+    })
+  }
+
+  // #endif
+
+  // #ifdef APP-PLUS || H5 || MP-WEIXIN || MP-HARMONY
+  trace(url, data, options = {}) {
+    return this.request({
+      url,
+      data,
+      method: 'TRACE',
+      ...options
+    })
+  }
+
+  // #endif
+
+  upload(url, config = {}) {
+    config.url = url
+    config.method = 'UPLOAD'
+    return this._middleware(config)
+  }
+
+  download(url, config = {}) {
+    config.url = url
+    config.method = 'DOWNLOAD'
+    return this._middleware(config)
+  }
+}
+
+
+/**
+ * setConfig回调
+ * @return {Object} - 返回操作后的config
+ * @callback Request~setConfigCallback
+ * @param {Object} config - 全局默认config
+ */

+ 20 - 0
utils/lib/request/core/buildFullPath.js

@@ -0,0 +1,20 @@
+'use strict'
+
+import isAbsoluteURL from '../helpers/isAbsoluteURL'
+import combineURLs from '../helpers/combineURLs'
+
+/**
+ * Creates a new URL by combining the baseURL with the requestedURL,
+ * only when the requestedURL is not already an absolute URL.
+ * If the requestURL is absolute, this function returns the requestedURL untouched.
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} requestedURL Absolute or relative URL to combine
+ * @returns {string} The combined full path
+ */
+export default function buildFullPath(baseURL, requestedURL) {
+  if (baseURL && !isAbsoluteURL(requestedURL)) {
+    return combineURLs(baseURL, requestedURL)
+  }
+  return requestedURL
+}

+ 27 - 0
utils/lib/request/core/defaults.js

@@ -0,0 +1,27 @@
+/**
+ * 默认的全局配置
+ */
+
+
+export default {
+  baseURL: '',
+  header: {},
+  method: 'GET',
+  dataType: 'json',
+  // #ifndef MP-ALIPAY || APP-PLUS
+  responseType: 'text',
+  // #endif
+  custom: {},
+  // #ifdef MP-ALIPAY || MP-WEIXIN || MP-HARMONY
+  timeout: 30000,
+  // #endif
+  // #ifdef APP-PLUS
+  sslVerify: true,
+  // #endif
+  // #ifdef H5
+  withCredentials: false,
+  // #endif
+  validateStatus: function validateStatus(status) {
+    return status >= 200 && status < 300
+  }
+}

+ 7 - 0
utils/lib/request/core/dispatchRequest.js

@@ -0,0 +1,7 @@
+import adapter from '../adapters/index'
+
+
+export default (config) => {
+  config.header = config.header || {}
+  return adapter(config)
+}

+ 97 - 0
utils/lib/request/core/mergeConfig.js

@@ -0,0 +1,97 @@
+import {deepMerge, isObject} from '../utils'
+
+/**
+ * 合并局部配置优先的配置,如果局部有该配置项则用局部,如果全局有该配置项则用全局
+ * @param {Array} keys - 配置项
+ * @param {Object} globalsConfig - 当前的全局配置
+ * @param {Object} config2 - 局部配置
+ * @return {{}}
+ */
+const mergeKeys = (keys, globalsConfig, config2) => {
+  let config = {}
+  keys.forEach(prop => {
+    if (typeof config2[prop] !== 'undefined') {
+      config[prop] = config2[prop]
+    } else if (typeof globalsConfig[prop] !== 'undefined') {
+      config[prop] = globalsConfig[prop]
+    }
+  })
+  return config
+}
+/**
+ *
+ * @param globalsConfig - 当前实例的全局配置
+ * @param config2 - 当前的局部配置
+ * @return - 合并后的配置
+ */
+export default (globalsConfig, config2 = {}) => {
+  const method = config2.method || globalsConfig.method || 'GET'
+  let config = {
+    baseURL: globalsConfig.baseURL || '',
+    method: method,
+    url: config2.url || ''
+  }
+  const mergeDeepPropertiesKeys = ['header', 'params', 'custom']
+  const defaultToConfig2Keys = ['getTask', 'validateStatus']
+  mergeDeepPropertiesKeys.forEach(prop => {
+    if (isObject(config2[prop])) {
+      config[prop] = deepMerge(globalsConfig[prop], config2[prop])
+    } else if (typeof config2[prop] !== 'undefined') {
+      config[prop] = config2[prop]
+    } else if (isObject(globalsConfig[prop])) {
+      config[prop] = deepMerge(globalsConfig[prop])
+    } else if (typeof globalsConfig[prop] !== 'undefined') {
+      config[prop] = globalsConfig[prop]
+    }
+  })
+  config = {...config, ...mergeKeys(defaultToConfig2Keys, globalsConfig, config2)}
+
+  // eslint-disable-next-line no-empty
+  if (method === 'DOWNLOAD') {
+
+  } else if (method === 'UPLOAD') {
+    if (isObject(config.header)) {
+      delete config.header['content-type']
+      delete config.header['Content-Type']
+    }
+    const uploadKeys = [
+      // #ifdef APP-PLUS || H5 || MP-HARMONY
+      'files',
+      // #endif
+      // #ifdef MP-ALIPAY
+      'fileType',
+      // #endif
+      // #ifdef H5
+      'file',
+      // #endif
+      'filePath',
+      'name',
+      'formData',
+    ]
+    uploadKeys.forEach(prop => {
+      if (typeof config2[prop] !== 'undefined') {
+        config[prop] = config2[prop]
+      }
+    })
+  } else {
+    const defaultsKeys = [
+      'data',
+      // #ifdef MP-ALIPAY || MP-WEIXIN || MP-HARMONY
+      'timeout',
+      // #endif
+      'dataType',
+      // #ifndef MP-ALIPAY || APP-PLUS
+      'responseType',
+      // #endif
+      // #ifdef APP-PLUS
+      'sslVerify',
+      // #endif
+      // #ifdef H5
+      'withCredentials'
+      // #endif
+    ]
+    config = {...config, ...mergeKeys(defaultsKeys, globalsConfig, config2)}
+  }
+
+  return config
+}

+ 16 - 0
utils/lib/request/core/settle.js

@@ -0,0 +1,16 @@
+/**
+ * Resolve or reject a Promise based on response status.
+ *
+ * @param {Function} resolve A function that resolves the promise.
+ * @param {Function} reject A function that rejects the promise.
+ * @param {object} response The response.
+ */
+export default function settle(resolve, reject, response) {
+  const validateStatus = response.config.validateStatus
+  const status = response.statusCode
+  if (status && (!validateStatus || validateStatus(status))) {
+    resolve(response)
+  } else {
+    reject(response)
+  }
+}

+ 69 - 0
utils/lib/request/helpers/buildURL.js

@@ -0,0 +1,69 @@
+'use strict'
+
+import * as utils from './../utils'
+
+function encode(val) {
+  return encodeURIComponent(val).
+    replace(/%40/gi, '@').
+    replace(/%3A/gi, ':').
+    replace(/%24/g, '$').
+    replace(/%2C/gi, ',').
+    replace(/%20/g, '+').
+    replace(/%5B/gi, '[').
+    replace(/%5D/gi, ']')
+}
+
+/**
+ * Build a URL by appending params to the end
+ *
+ * @param {string} url The base of the url (e.g., http://www.google.com)
+ * @param {object} [params] The params to be appended
+ * @returns {string} The formatted url
+ */
+export default function buildURL(url, params) {
+  /*eslint no-param-reassign:0*/
+  if (!params) {
+    return url
+  }
+
+  var serializedParams
+  if (utils.isURLSearchParams(params)) {
+    serializedParams = params.toString()
+  } else {
+    var parts = []
+
+    utils.forEach(params, function serialize(val, key) {
+      if (val === null || typeof val === 'undefined') {
+        return
+      }
+
+      if (utils.isArray(val)) {
+        key = key + '[]'
+      } else {
+        val = [val]
+      }
+
+      utils.forEach(val, function parseValue(v) {
+        if (utils.isDate(v)) {
+          v = v.toISOString()
+        } else if (utils.isObject(v)) {
+          v = JSON.stringify(v)
+        }
+        parts.push(encode(key) + '=' + encode(v))
+      })
+    })
+
+    serializedParams = parts.join('&')
+  }
+
+  if (serializedParams) {
+    var hashmarkIndex = url.indexOf('#')
+    if (hashmarkIndex !== -1) {
+      url = url.slice(0, hashmarkIndex)
+    }
+
+    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams
+  }
+
+  return url
+}

+ 14 - 0
utils/lib/request/helpers/combineURLs.js

@@ -0,0 +1,14 @@
+'use strict'
+
+/**
+ * Creates a new URL by combining the specified URLs
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} relativeURL The relative URL
+ * @returns {string} The combined URL
+ */
+export default function combineURLs(baseURL, relativeURL) {
+  return relativeURL
+    ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
+    : baseURL
+}

+ 14 - 0
utils/lib/request/helpers/isAbsoluteURL.js

@@ -0,0 +1,14 @@
+'use strict'
+
+/**
+ * Determines whether the specified URL is absolute
+ *
+ * @param {string} url The URL to test
+ * @returns {boolean} True if the specified URL is absolute, otherwise false
+ */
+export default function isAbsoluteURL(url) {
+  // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
+  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
+  // by any combination of letters, digits, plus, period, or hyphen.
+  return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url)
+}

+ 2 - 0
utils/lib/request/index.js

@@ -0,0 +1,2 @@
+import Request from './core/Request'
+export default Request

+ 131 - 0
utils/lib/request/utils.js

@@ -0,0 +1,131 @@
+'use strict'
+
+// utils is a library of generic helper functions non-specific to axios
+
+var toString = Object.prototype.toString
+
+/**
+ * Determine if a value is an Array
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an Array, otherwise false
+ */
+export function isArray (val) {
+  return toString.call(val) === '[object Array]'
+}
+
+
+/**
+ * Determine if a value is an Object
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is an Object, otherwise false
+ */
+export function isObject (val) {
+  return val !== null && typeof val === 'object'
+}
+
+/**
+ * Determine if a value is a Date
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a Date, otherwise false
+ */
+export function isDate (val) {
+  return toString.call(val) === '[object Date]'
+}
+
+/**
+ * Determine if a value is a URLSearchParams object
+ *
+ * @param {Object} val The value to test
+ * @returns {boolean} True if value is a URLSearchParams object, otherwise false
+ */
+export function isURLSearchParams (val) {
+  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams
+}
+
+
+/**
+ * Iterate over an Array or an Object invoking a function for each item.
+ *
+ * If `obj` is an Array callback will be called passing
+ * the value, index, and complete array for each item.
+ *
+ * If 'obj' is an Object callback will be called passing
+ * the value, key, and complete object for each property.
+ *
+ * @param {Object|Array} obj The object to iterate
+ * @param {Function} fn The callback to invoke for each item
+ */
+export function forEach (obj, fn) {
+  // Don't bother if no value provided
+  if (obj === null || typeof obj === 'undefined') {
+    return
+  }
+
+  // Force an array if not already something iterable
+  if (typeof obj !== 'object') {
+    /*eslint no-param-reassign:0*/
+    obj = [obj]
+  }
+
+  if (isArray(obj)) {
+    // Iterate over array values
+    for (var i = 0, l = obj.length; i < l; i++) {
+      fn.call(null, obj[i], i, obj)
+    }
+  } else {
+    // Iterate over object keys
+    for (var key in obj) {
+      if (Object.prototype.hasOwnProperty.call(obj, key)) {
+        fn.call(null, obj[key], key, obj)
+      }
+    }
+  }
+}
+
+/**
+ * 是否为boolean 值
+ * @param val
+ * @returns {boolean}
+ */
+export function isBoolean(val) {
+  return typeof val === 'boolean'
+}
+
+/**
+ * 是否为真正的对象{} new Object
+ * @param {any} obj - 检测的对象
+ * @returns {boolean}
+ */
+export function isPlainObject(obj) {
+  return Object.prototype.toString.call(obj) === '[object Object]'
+}
+
+
+
+/**
+ * Function equal to merge with the difference being that no reference
+ * to original objects is kept.
+ *
+ * @see merge
+ * @param {Object} obj1 Object to merge
+ * @returns {Object} Result of all merge properties
+ */
+export function deepMerge(/* obj1, obj2, obj3, ... */) {
+  let result = {}
+  function assignValue(val, key) {
+    if (typeof result[key] === 'object' && typeof val === 'object') {
+      result[key] = deepMerge(result[key], val)
+    } else if (typeof val === 'object') {
+      result[key] = deepMerge({}, val)
+    } else {
+      result[key] = val
+    }
+  }
+  for (let i = 0, l = arguments.length; i < l; i++) {
+    forEach(arguments[i], assignValue)
+  }
+  return result
+}

+ 201 - 0
utils/mapUtils.js

@@ -0,0 +1,201 @@
+/**
+ * 地图工具函数模块
+ * 提供腾讯地图相关的通用工具函数
+ * 
+ * 主要功能:
+ * - 坐标格式转换
+ * - 坐标有效性验证
+ * - 地图实例管理辅助函数
+ */
+
+/**
+ * 验证坐标是否有效
+ * @param {number} lng 经度
+ * @param {number} lat 纬度
+ * @returns {boolean} 坐标是否有效
+ */
+// export function isValidCoordinate(lng, lat) { // 高德
+//   return (
+//     lng !== null &&
+//     lng !== undefined &&
+//     lat !== null &&
+//     lat !== undefined &&
+//     lng >= -180 &&
+//     lng <= 180 &&
+//     lat >= -90 &&
+//     lat <= 90 &&
+//     !isNaN(lng) &&
+//     !isNaN(lat)
+//   )
+// }
+export function isValidCoordinate(lat, lng) {
+  return (
+    lat !== null &&
+    lat !== undefined &&
+    lng !== null &&
+    lng !== undefined &&
+    lat >= -90 &&
+    lat <= 90 &&
+    lng >= -180 &&
+    lng <= 180 &&
+    !isNaN(lat) &&
+    !isNaN(lng)
+  )
+}
+
+/**
+ * 将点对象数组转换为 TMap.LatLng 对象数组
+ * @param {Array<{lng: number, lat: number}>} points 点对象数组
+ * @returns {Array<TMap.LatLng>} TMap.LatLng 对象数组
+ */
+export function convertPointsToLatLng(points) {
+  if (!points || !Array.isArray(points)) {
+    return []
+  }
+  
+  return points
+    .filter(p => p && isValidCoordinate(p.lng, p.lat))
+    .map(p => new TMap.LatLng(p.lat, p.lng))
+}
+
+/**
+ * 将经纬度数组转换为 TMap.LatLng 对象数组
+ * @param {Array<[number, number]>} lngLatArray 经纬度数组 [[lng, lat], ...]
+ * @returns {Array<TMap.LatLng>} TMap.LatLng 对象数组
+ */
+export function convertLngLatArrayToLatLng(lngLatArray) {
+  if (!lngLatArray || !Array.isArray(lngLatArray)) {
+    return []
+  }
+  
+  return lngLatArray
+    .filter(([lng, lat]) => isValidCoordinate(lng, lat))
+    .map(([lng, lat]) => new TMap.LatLng(lat, lng))
+}
+
+/**
+ * 安全地设置地图中心点
+ * @param {Object} map 地图实例
+ * @param {number} lng 经度
+ * @param {number} lat 纬度
+ * @param {number} zoom 缩放级别(可选)
+ * @returns {boolean} 是否设置成功
+ */
+export function safeSetMapCenter(map, lat, lng, zoom) {
+  if (!map || !isValidCoordinate(lat, lng)) {
+    console.warn('[mapUtils] 无效的地图实例或坐标')
+    return false
+  }
+  
+  try {
+    const center = new TMap.LatLng(lat, lng)
+    map.setCenter(center)
+    
+    if (typeof zoom === 'number' && zoom >= 3 && zoom <= 20) {
+      map.setZoom(zoom)
+    }
+    
+    return true
+  } catch (err) {
+    console.error('[mapUtils] 设置地图中心失败', err)
+    return false
+  }
+}
+
+/**
+ * 安全地获取地图中心点
+ * @param {Object} map 地图实例
+ * @returns {Object|null} 包含 lng, lat 的对象,失败返回 null
+ */
+export function safeGetMapCenter(map) {
+  if (!map || typeof map.getCenter !== 'function') {
+    return null
+  }
+  
+  try {
+    const center = map.getCenter()
+    return {
+	  lat: center.lat,
+      lng: center.lng
+    }
+  } catch (err) {
+    console.error('[mapUtils] 获取地图中心失败', err)
+    return null
+  }
+}
+
+/**
+ * 格式化坐标显示
+ * @param {Object} point 点对象 {lng, lat}
+ * @param {number} precision 精度(小数位数),默认 5
+ * @returns {string} 格式化后的坐标字符串
+ */
+export function formatCoordinate(point, precision = 5) {
+  if (!point || !isValidCoordinate(point.lng, point.lat)) {
+    return '--'
+  }
+  
+  return `${point.lng.toFixed(precision)}, ${point.lat.toFixed(precision)}`
+}
+
+/**
+ * 计算两点之间的距离(米)
+ * 使用 Haversine 公式
+ * @param {Object} point1 点1 {lng, lat}
+ * @param {Object} point2 点2 {lng, lat}
+ * @returns {number} 距离(米)
+ */
+export function calculateDistance(point1, point2) {
+  if (!isValidCoordinate(point1.lng, point1.lat) || 
+      !isValidCoordinate(point2.lng, point2.lat)) {
+    return 0
+  }
+  
+  const R = 6371000 // 地球半径(米)
+  const lat1 = point1.lat * Math.PI / 180
+  const lat2 = point2.lat * Math.PI / 180
+  const deltaLat = (point2.lat - point1.lat) * Math.PI / 180
+  const deltaLng = (point2.lng - point1.lng) * Math.PI / 180
+  
+  const a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +
+            Math.cos(lat1) * Math.cos(lat2) *
+            Math.sin(deltaLng / 2) * Math.sin(deltaLng / 2)
+  
+  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
+  
+  return R * c
+}
+
+/**
+ * 判断点是否在多边形内
+ * 使用射线法
+ * @param {Object} point 点 {lng, lat}
+ * @param {Array<Object>} polygon 多边形顶点数组 [{lng, lat}, ...]
+ * @returns {boolean} 点是否在多边形内
+ */
+export function isPointInPolygon(point, polygon) {
+  if (!isValidCoordinate(point.lng, point.lat) || 
+      !polygon || polygon.length < 3) {
+    return false
+  }
+  
+  let inside = false
+  const x = point.lng
+  const y = point.lat
+  
+  for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
+    const xi = polygon[i].lng
+    const yi = polygon[i].lat
+    const xj = polygon[j].lng
+    const yj = polygon[j].lat
+    
+    const intersect = ((yi > y) !== (yj > y)) &&
+                     (x < (xj - xi) * (y - yi) / (yj - yi) + xi)
+    
+    if (intersect) {
+      inside = !inside
+    }
+  }
+  
+  return inside
+}

+ 219 - 0
utils/md5.js

@@ -0,0 +1,219 @@
+/*
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 1.1 Copyright (C) Paul Johnston 1999 - 2002.
+ * Code also contributed by Greg Holt
+ * See http://pajhome.org.uk/site/legal.html for details.
+ */
+
+/*
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+ * to work around bugs in some JS interpreters.
+ */
+function safe_add(x, y) {
+	var lsw = (x & 0xFFFF) + (y & 0xFFFF)
+	var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
+	return (msw << 16) | (lsw & 0xFFFF)
+}
+
+/*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+function rol(num, cnt) {
+	return (num << cnt) | (num >>> (32 - cnt))
+}
+
+/*
+ * These functions implement the four basic operations the algorithm uses.
+ */
+function cmn(q, a, b, x, s, t) {
+	return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
+}
+
+function ff(a, b, c, d, x, s, t) {
+	return cmn((b & c) | ((~b) & d), a, b, x, s, t)
+}
+
+function gg(a, b, c, d, x, s, t) {
+	return cmn((b & d) | (c & (~d)), a, b, x, s, t)
+}
+
+function hh(a, b, c, d, x, s, t) {
+	return cmn(b ^ c ^ d, a, b, x, s, t)
+}
+
+function ii(a, b, c, d, x, s, t) {
+	return cmn(c ^ (b | (~d)), a, b, x, s, t)
+}
+
+/*
+ * Calculate the MD5 of an array of little-endian words, producing an array
+ * of little-endian words.
+ */
+function coreMD5(x) {
+	var a = 1732584193
+	var b = -271733879
+	var c = -1732584194
+	var d = 271733878
+
+	for (var i = 0; i < x.length; i += 16) {
+		var olda = a
+		var oldb = b
+		var oldc = c
+		var oldd = d
+
+		a = ff(a, b, c, d, x[i + 0], 7, -680876936)
+		d = ff(d, a, b, c, x[i + 1], 12, -389564586)
+		c = ff(c, d, a, b, x[i + 2], 17, 606105819)
+		b = ff(b, c, d, a, x[i + 3], 22, -1044525330)
+		a = ff(a, b, c, d, x[i + 4], 7, -176418897)
+		d = ff(d, a, b, c, x[i + 5], 12, 1200080426)
+		c = ff(c, d, a, b, x[i + 6], 17, -1473231341)
+		b = ff(b, c, d, a, x[i + 7], 22, -45705983)
+		a = ff(a, b, c, d, x[i + 8], 7, 1770035416)
+		d = ff(d, a, b, c, x[i + 9], 12, -1958414417)
+		c = ff(c, d, a, b, x[i + 10], 17, -42063)
+		b = ff(b, c, d, a, x[i + 11], 22, -1990404162)
+		a = ff(a, b, c, d, x[i + 12], 7, 1804603682)
+		d = ff(d, a, b, c, x[i + 13], 12, -40341101)
+		c = ff(c, d, a, b, x[i + 14], 17, -1502002290)
+		b = ff(b, c, d, a, x[i + 15], 22, 1236535329)
+
+		a = gg(a, b, c, d, x[i + 1], 5, -165796510)
+		d = gg(d, a, b, c, x[i + 6], 9, -1069501632)
+		c = gg(c, d, a, b, x[i + 11], 14, 643717713)
+		b = gg(b, c, d, a, x[i + 0], 20, -373897302)
+		a = gg(a, b, c, d, x[i + 5], 5, -701558691)
+		d = gg(d, a, b, c, x[i + 10], 9, 38016083)
+		c = gg(c, d, a, b, x[i + 15], 14, -660478335)
+		b = gg(b, c, d, a, x[i + 4], 20, -405537848)
+		a = gg(a, b, c, d, x[i + 9], 5, 568446438)
+		d = gg(d, a, b, c, x[i + 14], 9, -1019803690)
+		c = gg(c, d, a, b, x[i + 3], 14, -187363961)
+		b = gg(b, c, d, a, x[i + 8], 20, 1163531501)
+		a = gg(a, b, c, d, x[i + 13], 5, -1444681467)
+		d = gg(d, a, b, c, x[i + 2], 9, -51403784)
+		c = gg(c, d, a, b, x[i + 7], 14, 1735328473)
+		b = gg(b, c, d, a, x[i + 12], 20, -1926607734)
+
+		a = hh(a, b, c, d, x[i + 5], 4, -378558)
+		d = hh(d, a, b, c, x[i + 8], 11, -2022574463)
+		c = hh(c, d, a, b, x[i + 11], 16, 1839030562)
+		b = hh(b, c, d, a, x[i + 14], 23, -35309556)
+		a = hh(a, b, c, d, x[i + 1], 4, -1530992060)
+		d = hh(d, a, b, c, x[i + 4], 11, 1272893353)
+		c = hh(c, d, a, b, x[i + 7], 16, -155497632)
+		b = hh(b, c, d, a, x[i + 10], 23, -1094730640)
+		a = hh(a, b, c, d, x[i + 13], 4, 681279174)
+		d = hh(d, a, b, c, x[i + 0], 11, -358537222)
+		c = hh(c, d, a, b, x[i + 3], 16, -722521979)
+		b = hh(b, c, d, a, x[i + 6], 23, 76029189)
+		a = hh(a, b, c, d, x[i + 9], 4, -640364487)
+		d = hh(d, a, b, c, x[i + 12], 11, -421815835)
+		c = hh(c, d, a, b, x[i + 15], 16, 530742520)
+		b = hh(b, c, d, a, x[i + 2], 23, -995338651)
+
+		a = ii(a, b, c, d, x[i + 0], 6, -198630844)
+		d = ii(d, a, b, c, x[i + 7], 10, 1126891415)
+		c = ii(c, d, a, b, x[i + 14], 15, -1416354905)
+		b = ii(b, c, d, a, x[i + 5], 21, -57434055)
+		a = ii(a, b, c, d, x[i + 12], 6, 1700485571)
+		d = ii(d, a, b, c, x[i + 3], 10, -1894986606)
+		c = ii(c, d, a, b, x[i + 10], 15, -1051523)
+		b = ii(b, c, d, a, x[i + 1], 21, -2054922799)
+		a = ii(a, b, c, d, x[i + 8], 6, 1873313359)
+		d = ii(d, a, b, c, x[i + 15], 10, -30611744)
+		c = ii(c, d, a, b, x[i + 6], 15, -1560198380)
+		b = ii(b, c, d, a, x[i + 13], 21, 1309151649)
+		a = ii(a, b, c, d, x[i + 4], 6, -145523070)
+		d = ii(d, a, b, c, x[i + 11], 10, -1120210379)
+		c = ii(c, d, a, b, x[i + 2], 15, 718787259)
+		b = ii(b, c, d, a, x[i + 9], 21, -343485551)
+
+		a = safe_add(a, olda)
+		b = safe_add(b, oldb)
+		c = safe_add(c, oldc)
+		d = safe_add(d, oldd)
+	}
+	return [a, b, c, d]
+}
+
+/*
+ * Convert an array of little-endian words to a hex string.
+ */
+function binl2hex(binarray) {
+	var hex_tab = "0123456789abcdef"
+	var str = ""
+	for (var i = 0; i < binarray.length * 4; i++) {
+		str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) +
+			hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF)
+	}
+	return str
+}
+
+/*
+ * Convert an array of little-endian words to a base64 encoded string.
+ */
+function binl2b64(binarray) {
+	var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
+	var str = ""
+	for (var i = 0; i < binarray.length * 32; i += 6) {
+		str += tab.charAt(((binarray[i >> 5] << (i % 32)) & 0x3F) |
+			((binarray[i >> 5 + 1] >> (32 - i % 32)) & 0x3F))
+	}
+	return str
+}
+
+/*
+ * Convert an 8-bit character string to a sequence of 16-word blocks, stored
+ * as an array, and append appropriate padding for MD4/5 calculation.
+ * If any of the characters are >255, the high byte is silently ignored.
+ */
+function str2binl(str) {
+	var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks
+	var blks = new Array(nblk * 16)
+	for (var i = 0; i < nblk * 16; i++) blks[i] = 0
+	for (var i = 0; i < str.length; i++)
+		blks[i >> 2] |= (str.charCodeAt(i) & 0xFF) << ((i % 4) * 8)
+	blks[i >> 2] |= 0x80 << ((i % 4) * 8)
+	blks[nblk * 16 - 2] = str.length * 8
+	return blks
+}
+
+/*
+ * Convert a wide-character string to a sequence of 16-word blocks, stored as
+ * an array, and append appropriate padding for MD4/5 calculation.
+ */
+function strw2binl(str) {
+	var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks
+	var blks = new Array(nblk * 16)
+	for (var i = 0; i < nblk * 16; i++) blks[i] = 0
+	for (var i = 0; i < str.length; i++)
+		blks[i >> 1] |= str.charCodeAt(i) << ((i % 2) * 16)
+	blks[i >> 1] |= 0x80 << ((i % 2) * 16)
+	blks[nblk * 16 - 2] = str.length * 16
+	return blks
+}
+
+/*
+ * External interface
+ */
+export default function hexMD5(str) {
+	return binl2hex(coreMD5(str2binl(str)))
+}
+
+function hexMD5w(str) {
+	return binl2hex(coreMD5(strw2binl(str)))
+}
+
+function b64MD5(str) {
+	return binl2b64(coreMD5(str2binl(str)))
+}
+
+function b64MD5w(str) {
+	return binl2b64(coreMD5(strw2binl(str)))
+}
+/* Backward compatibility */
+function calcMD5(str) {
+	return binl2hex(coreMD5(str2binl(str)))
+}

+ 113 - 0
utils/media-utils.js

@@ -0,0 +1,113 @@
+/**
+ * 媒体工具类 - 处理视频流地址转换
+ */
+
+// 流协议类型
+export const STREAM_PROTOCOLS = {
+  RTMP: 'rtmp://',
+  HTTP_FLV: ['http://', 'https://'],
+  HLS: ['http://', 'https://'],
+  WS_FLV: ['ws://', 'wss://']
+}
+
+/**
+ * 判断视频流类型
+ * @param {String} url 视频流地址
+ * @returns {String} 流类型,如 'rtmp', 'http-flv', 'hls', 'ws-flv'
+ */
+export const getStreamType = (url) => {
+  if (!url) return null
+  
+  const lowerUrl = url.toLowerCase()
+  
+  if (lowerUrl.startsWith(STREAM_PROTOCOLS.RTMP)) {
+    return 'rtmp'
+  }
+  
+  if (STREAM_PROTOCOLS.HTTP_FLV.some(protocol => lowerUrl.startsWith(protocol)) && lowerUrl.endsWith('.flv')) {
+    return 'http-flv'
+  }
+  
+  if (STREAM_PROTOCOLS.HLS.some(protocol => lowerUrl.startsWith(protocol)) && 
+      (lowerUrl.endsWith('.m3u8') || lowerUrl.includes('.m3u8?'))) {
+    return 'hls'
+  }
+  
+  if (STREAM_PROTOCOLS.WS_FLV.some(protocol => lowerUrl.startsWith(protocol)) && 
+      (lowerUrl.endsWith('.flv') || lowerUrl.includes('.flv?') || lowerUrl.includes('live.flv'))) {
+    return 'ws-flv'
+  }
+  
+  return 'unknown'
+}
+
+/**
+ * 检查流是否在小程序中可播放
+ * @param {String} url 视频流地址
+ * @returns {Boolean} 是否可在小程序中播放
+ */
+export const isPlayableInMiniProgram = (url) => {
+  const streamType = getStreamType(url)
+  // 小程序只支持RTMP和HLS(m3u8)
+  return streamType === 'rtmp' || streamType === 'hls'
+}
+
+/**
+ * 构建适用于不同平台的流地址
+ * @param {String} originalUrl 原始流地址
+ * @param {Object} options 配置选项
+ * @returns {Object} 不同平台适用的流地址
+ */
+export const buildPlatformStreamUrls = (originalUrl, options = {}) => {
+  // 提取流的关键信息 (比如设备ID)
+  const streamType = getStreamType(originalUrl)
+  const { streamServer = {}, fallbackToHls = true } = options
+  
+  // 获取流服务器地址
+  const { rtmpServer, hlsServer, wsFlvServer } = streamServer
+  
+  // 提取设备ID或流标识 (示例: 使用正则表达式提取)
+  const streamIdMatch = originalUrl.match(/(\d+_\d+\.live\.flv)/) || 
+                         originalUrl.match(/([^/]+)\.m3u8/) ||
+                         originalUrl.match(/stream=([^&]+)/)
+  
+  const streamId = streamIdMatch ? streamIdMatch[1] : null
+  
+  if (!streamId) {
+    // 如果无法提取流ID,则返回原始URL
+    return {
+      h5Url: originalUrl,
+      miniProgramUrl: isPlayableInMiniProgram(originalUrl) ? originalUrl : null
+    }
+  }
+  
+  // 构建不同平台的URL
+  const urls = {
+    h5Url: originalUrl, // 默认H5使用原始URL
+    miniProgramUrl: null
+  }
+  
+  // 微信小程序优先使用RTMP和HLS
+  if (rtmpServer && streamType !== 'rtmp') {
+    // 构建RTMP URL (小程序支持)
+    urls.miniProgramUrl = `${rtmpServer}/${streamId.replace('.live.flv', '')}`
+  } else if (hlsServer && streamType !== 'hls') {
+    // 构建HLS URL (小程序支持)
+    urls.miniProgramUrl = `${hlsServer}/${streamId.replace('.live.flv', '.m3u8')}`
+  } else if (isPlayableInMiniProgram(originalUrl)) {
+    // 原URL已经是小程序可播放格式
+    urls.miniProgramUrl = originalUrl
+  } else if (fallbackToHls) {
+    // 假设存在通用HLS地址可以使用
+    const deviceId = streamId.split('_')[0] || streamId
+    urls.miniProgramUrl = `${hlsServer || 'https://stream.example.com/hls'}/${deviceId}.m3u8`
+  }
+  
+  return urls
+}
+
+export default {
+  getStreamType,
+  isPlayableInMiniProgram,
+  buildPlatformStreamUrls
+} 

+ 553 - 0
utils/mixins/dictMixin.js

@@ -0,0 +1,553 @@
+/**
+ * 字典数据加载Mixin (Vue 2 Options API)
+ * 
+ * ⚠️ DEPRECATED: 此文件为 Vue2 版本,仅用于向后兼容
+ * 新代码请使用 Vue3 Composition API 版本: @/utils/composables/useDict.js
+ * 
+ * 迁移指南:
+ * Vue2 (Options API):
+ *   mixins: [dictMixin],
+ *   data() { return { dictTypeList: ['sys_user_sex'] } }
+ * 
+ * Vue3 (Composition API):
+ *   import { useDict } from '@/utils/composables/useDict'
+ *   const { dictData, loadDict, getDictLabel } = useDict(['sys_user_sex'])
+ * 
+ * 使用方式:
+ * 1. 在组件中导入 import dictMixin from '@/utils/mixins/dictMixin';
+ * 2. 在组件的mixins选项中注册 mixins: [dictMixin]
+ * 3. 在组件的data中定义需要的字典类型 dictTypeList: ['sys_user_sex', 'sys_normal_disable', ...]
+ * 4. 在组件的methods中调用 getDictLabel 等方法使用字典数据
+ * 5. 在模板中直接使用 dictData 对象获取字典项 v-for="item in dictData.sys_user_sex"
+ */
+import {
+	getDictData,
+	getMultipleDictData
+} from '@/api/services/dict';
+import storage from '@/utils/storage';
+import staticDict from '@/utils/staticDict';
+
+// 全局字典缓存对象,用于存储已加载的字典数据
+const dictCache = {
+	// 缓存的字典数据,格式为 { dictType: [{label, value, ...}, ...] }
+	data: {},
+	// 缓存过期时间,单位为毫秒
+	expireTime: 1000 * 60 * 60, // 1小时
+	// 缓存最后更新时间
+	lastUpdateTime: {},
+	// 正在加载的字典类型,用于防止重复请求
+	loading: {}
+};
+
+/**
+ * 字典数据加载Mixin
+ * 使用方式:
+ * 1. 在组件中导入 import dictMixin from '@/utils/mixins/dictMixin';
+ * 2. 在组件的mixins选项中注册 mixins: [dictMixin]
+ * 3. 在组件的data中定义需要的字典类型 dictTypeList: ['sys_user_sex', 'sys_normal_disable', ...]
+ * 4. 在组件的methods中调用 getDictLabel 等方法使用字典数据
+ * 5. 在模板中直接使用 dictData 对象获取字典项 v-for="item in dictData.sys_user_sex"
+ */
+export default {
+	data() {
+		return {
+			// 组件中的字典数据
+			dictData: {},
+			// 定义组件需要加载的字典类型
+			dictTypeList: [],
+			// 字典加载状态
+			dictLoading: false
+		};
+	},
+	created() {
+		// 组件创建时,如果有定义dictTypeList,则自动加载字典数据
+		if (this.dictTypeList && this.dictTypeList.length > 0) {
+			console.log(`[DictMixin] Component created, loading dictionaries: ${this.dictTypeList.join(', ')}`);
+			this.loadDict();
+		}
+	},
+	methods: {
+		/**
+		 * 加载字典数据
+		 * @param {Array} dictTypes - 字典类型数组,如果不传则使用组件中定义的dictTypeList
+		 * @returns {Promise} - 返回字典加载的Promise对象
+		 */
+		loadDict(dictTypes) {
+			const types = dictTypes || this.dictTypeList;
+			if (!types || types.length === 0) {
+				return Promise.resolve({});
+			}
+
+			// 标记加载中
+			this.dictLoading = true;
+
+			// 需要从服务器获取的字典类型
+			const needFetch = [];
+
+			// 检查是否有静态字典或缓存
+			types.forEach(type => {
+				// 先检查是否有静态字典
+				if (staticDict[type]) {
+					// 使用静态字典数据
+					console.log(`[DictMixin] Using static dictionary for ${type}`);
+					this.$set(this.dictData, type, staticDict[type]);
+				} else {
+					// 检查缓存
+					const cachedDict = this.getDictFromCache(type);
+					if (cachedDict) {
+						// 已有缓存,直接使用
+						console.log(`[DictMixin] Using cached dictionary for ${type}`);
+						this.$set(this.dictData, type, cachedDict);
+					} else if (!dictCache.loading[type]) {
+						// 需要从服务器获取,并且当前没有其他组件正在加载
+						console.log(`[DictMixin] Need to fetch dictionary ${type} from server`);
+						needFetch.push(type);
+					} else {
+						console.log(
+							`[DictMixin] Dictionary ${type} is already being loaded by another component, waiting...`
+							);
+					}
+				}
+			});
+
+			// 如果所有字典都已缓存或使用静态数据,直接返回
+			if (needFetch.length === 0) {
+				this.dictLoading = false;
+
+				// 检查是否有正在加载的字典,如果有,等待它们完成
+				const loadingTypes = types.filter(type => dictCache.loading[type]);
+				if (loadingTypes.length > 0) {
+					return this.waitForDictLoading(loadingTypes);
+				}
+
+				return Promise.resolve(this.dictData);
+			}
+
+			// 从服务器获取字典数据
+			return this.fetchDictData(needFetch).then(res => {
+				this.dictLoading = false;
+				console.log("this.dictData", this.dictData);
+				return this.dictData;
+			}).catch(err => {
+				this.dictLoading = false;
+				console.error('加载字典数据失败:', err);
+				return Promise.reject(err);
+			});
+		},
+
+		/**
+		 * 等待指定类型的字典加载完成
+		 * @param {Array} types - 字典类型数组
+		 * @returns {Promise} - 返回等待的Promise对象
+		 */
+		waitForDictLoading(types) {
+			return new Promise(resolve => {
+				const checkInterval = setInterval(() => {
+					const stillLoading = types.some(type => dictCache.loading[type]);
+					if (!stillLoading) {
+						clearInterval(checkInterval);
+
+						// 加载完成后,从缓存中获取数据
+						types.forEach(type => {
+							const cachedDict = this.getDictFromCache(type);
+							if (cachedDict) {
+								this.$set(this.dictData, type, cachedDict);
+							}
+						});
+
+						resolve(this.dictData);
+					}
+				}, 50);
+			});
+		},
+		/**
+		 * 从服务器获取字典数据
+		 * - 单个字典类型 → 单次请求
+		 * - 多个字典类型 → 并发请求
+		 * - 支持部分失败:失败的字典会忽略,成功的字典会返回
+		 * 
+		 * @param {Array} dictTypes - 字典类型数组
+		 * @returns {Promise<Object|Array>} 
+		 *          - 单个字典时返回 dictList 数组
+		 *          - 多个字典时返回 { dictType: dictList } 的 Map
+		 */
+		fetchDictData(dictTypes) {
+			// 标记这些字典类型正在加载
+			dictTypes.forEach(type => {
+				dictCache.loading[type] = true;
+			});
+
+			// --- 单个字典类型 ---
+			if (dictTypes.length === 1) {
+				const dictType = dictTypes[0];
+				console.log(`[DictMixin] Fetching single dictionary: ${dictType}`);
+				return getDictData(dictType).then(res => {
+					if (res.data.code === 200) {
+						let dictList = [];
+						if (dictType === 'mall_product_category') {
+							dictList.push({
+								dictLabel: '推荐',
+								dictValue: '-1'
+							});
+							dictList.push(...res.data.data);
+						} else {
+							dictList = res.data.data;
+						}
+
+						// 更新组件数据和缓存
+						this.$set(this.dictData, dictType, dictList);
+						this.updateDictCache(dictType, dictList);
+						delete dictCache.loading[dictType];
+
+						return dictList;
+					} else {
+						console.error(`获取字典[${dictType}]数据失败:`, res.data.msg);
+						delete dictCache.loading[dictType];
+						return Promise.reject(res.data.msg);
+					}
+				}).catch(err => {
+					delete dictCache.loading[dictType];
+					throw err;
+				});
+			}
+
+			// --- 多个字典类型,并发请求 ---
+			console.log(`[DictMixin] Concurrently fetching ${dictTypes.length} dictionaries: ${dictTypes.join(', ')}`);
+
+			const requests = dictTypes.map(dictType => {
+				return getDictData(dictType).then(res => {
+					if (res.data.code === 200) {
+						let dictList = [];
+						if (dictType === 'mall_product_category') {
+							dictList.push({
+								dictLabel: '推荐',
+								dictValue: '-1'
+							});
+							dictList.push(...res.data.data);
+						} else {
+							dictList = res.data.data;
+						}
+
+						this.$set(this.dictData, dictType, dictList);
+						this.updateDictCache(dictType, dictList);
+						delete dictCache.loading[dictType];
+
+						return {
+							dictType,
+							dictList,
+							success: true
+						};
+					} else {
+						console.error(`获取字典[${dictType}]数据失败:`, res.data.msg);
+						delete dictCache.loading[dictType];
+						return {
+							dictType,
+							dictList: [],
+							success: false,
+							msg: res.data.msg
+						};
+					}
+				}).catch(err => {
+					console.error(`获取字典[${dictType}]异常:`, err);
+					delete dictCache.loading[dictType];
+					return {
+						dictType,
+						dictList: [],
+						success: false,
+						msg: err
+					};
+				});
+			});
+
+			// 等所有请求完成
+			return Promise.allSettled(requests).then(results => {
+				const dictMap = {};
+				const failed = [];
+
+				results.forEach(r => {
+					if (r.status === 'fulfilled') {
+						const {
+							dictType,
+							dictList,
+							success,
+							msg
+						} = r.value;
+						if (success) {
+							dictMap[dictType] = dictList;
+						} else {
+							failed.push({
+								dictType,
+								msg
+							});
+						}
+					} else {
+						// 理论上不会走这里,因为 catch 已经返回对象了
+						console.error(`字典请求失败:`, r.reason);
+					}
+				});
+
+				console.log(
+					`[DictMixin] Loaded ${Object.keys(dictMap).length} dictionaries, failed ${failed.length}`
+					);
+
+				if (failed.length > 0) {
+					console.warn('以下字典加载失败:', failed);
+				}
+
+				return dictMap;
+			});
+		},
+
+		/**
+		 * 从服务器获取字典数据
+		 * @param {Array} dictTypes - 字典类型数组
+		 * @returns {Promise} - 返回字典获取的Promise对象
+		 */
+		//  fetchDictData(dictTypes) {
+		//    // 标记这些字典类型正在加载
+		//    dictTypes.forEach(type => {
+		//      dictCache.loading[type] = true;
+		//    });
+
+		//    if (dictTypes.length === 1) {
+		//      // 单个字典类型,直接获取
+		//      console.log(`[DictMixin] Fetching single dictionary: ${dictTypes[0]}`);
+		//      return getDictData(dictTypes[0]).then(res => {
+		//        if (res.data.code === 200) {
+		//          const dictType = dictTypes[0];
+		// var dictList = []
+		// if(dictType === 'mall_product_category'){
+		// 	dictList.push({
+		// 		dictLabel:'推荐',
+		// 		dictValue:'-1'
+		// 	})
+		// 	// 展开数组追加
+		// 	 dictList.push(...res.data.data);
+		// }else{
+		// 	dictList = res.data.data
+		// }
+
+
+		//          // 更新组件字典数据
+		//          this.$set(this.dictData, dictType, dictList);
+		//          // 更新缓存
+		//          this.updateDictCache(dictType, dictList);
+
+		//          // 取消加载标记
+		//          delete dictCache.loading[dictType];
+
+		//          return dictList;
+		//        } else {
+		//          console.error(`获取字典[${dictTypes[0]}]数据失败:`, res.data.msg);
+
+		//          // 取消加载标记
+		//          delete dictCache.loading[dictTypes[0]];
+
+		//          return Promise.reject(res.data.msg);
+		//        }
+		//      }).catch(err => {
+		//        // 发生错误时取消加载标记
+		//        delete dictCache.loading[dictTypes[0]];
+		//        throw err;
+		//      });
+		//    } else {
+		//      // 多个字典类型,批量获取
+		//      console.log(`[DictMixin] Batch fetching ${dictTypes.length} dictionaries: ${dictTypes.join(', ')}`);
+		//      return getMultipleDictData(dictTypes).then(res => {
+		//        if (res.data.code === 200) {
+		//          const dictMap = res.data.data || {};
+
+		//          // 更新组件字典数据和缓存
+		//          Object.keys(dictMap).forEach(dictType => {
+		//            const dictList = dictMap[dictType] || [];
+
+		//            // 更新组件字典数据
+		//            this.$set(this.dictData, dictType, dictList);
+
+		//            // 更新缓存
+		//            this.updateDictCache(dictType, dictList);
+
+		//            // 取消加载标记
+		//            delete dictCache.loading[dictType];
+		//          });
+
+		//          console.log(`[DictMixin] Successfully loaded ${Object.keys(dictMap).length} dictionaries`);
+		//          return dictMap;
+		//        } else {
+		//          console.error(`获取字典数据失败:`, res.data.msg);
+
+		//          // 取消所有加载标记
+		//          dictTypes.forEach(type => {
+		//            delete dictCache.loading[type];
+		//          });
+
+		//          return Promise.reject(res.data.msg);
+		//        }
+		//      }).catch(err => {
+		//        // 发生错误时取消所有加载标记
+		//        dictTypes.forEach(type => {
+		//          delete dictCache.loading[type];
+		//        });
+		//        throw err;
+		//      });
+		//    }
+		//  },
+
+		/**
+		 * 从缓存中获取字典数据
+		 * @param {String} dictType - 字典类型
+		 * @returns {Array|null} - 返回字典数据,不存在或已过期则返回null
+		 */
+		getDictFromCache(dictType) {
+			// 判断是否有缓存
+			if (!dictCache.data[dictType]) {
+				return null;
+			}
+
+			// 判断缓存是否过期
+			const lastUpdateTime = dictCache.lastUpdateTime[dictType] || 0;
+			const now = Date.now();
+			if (now - lastUpdateTime > dictCache.expireTime) {
+				// 缓存已过期,删除缓存
+				delete dictCache.data[dictType];
+				delete dictCache.lastUpdateTime[dictType];
+				return null;
+			}
+
+			// 返回缓存的字典数据
+			return dictCache.data[dictType];
+		},
+
+		/**
+		 * 更新字典缓存
+		 * @param {String} dictType - 字典类型
+		 * @param {Array} dictList - 字典数据列表
+		 */
+		updateDictCache(dictType, dictList) {
+			dictCache.data[dictType] = dictList;
+			dictCache.lastUpdateTime[dictType] = Date.now();
+
+			// 更新本地存储
+			try {
+				// 只存储最后更新时间,具体数据保存在内存中
+				storage.setDict(`dict_time_${dictType}`, dictCache.lastUpdateTime[dictType]);
+			} catch (e) {
+				console.error('更新字典缓存失败:', e);
+			}
+		},
+
+		/**
+		 * 清除字典缓存
+		 * @param {String} dictType - 字典类型,不传则清除所有缓存
+		 */
+		clearDictCache(dictType) {
+			if (dictType) {
+				delete dictCache.data[dictType];
+				delete dictCache.lastUpdateTime[dictType];
+				storage.removeDict(`dict_time_${dictType}`);
+			} else {
+				dictCache.data = {};
+				dictCache.lastUpdateTime = {};
+				// 清除所有字典相关的本地存储
+				const keys = Object.keys(localStorage);
+				keys.forEach(key => {
+					if (key.startsWith('dict_time_')) {
+						storage.removeDict(key);
+					}
+				});
+			}
+		},
+
+		/**
+		 * 根据字典值获取对应的字典标签
+		 * @param {String} dictType - 字典类型
+		 * @param {String|Number} value - 字典值
+		 * @param {String} defaultLabel - 默认标签
+		 * @returns {String} - 字典标签
+		 */
+		getDictLabel(dictType, value, defaultLabel = '') {
+			// 首先检查组件数据
+			const dictList = this.dictData[dictType];
+			if (dictList) {
+				const item = dictList.find(dict => dict.dictValue === value);
+				if (item) return item.dictLabel;
+			}
+
+			// 再检查静态字典
+			// const staticDictList = staticDict[dictType];
+			// if (staticDictList) {
+			//   const item = staticDictList.find(dict => dict.value === value);
+			//   if (item) return item.label;
+			// }
+
+			// 都没找到,返回默认值
+			return defaultLabel;
+		},
+
+		/**
+		 * 根据字典标签获取对应的字典值
+		 * @param {String} dictType - 字典类型
+		 * @param {String} label - 字典标签
+		 * @param {String|Number} defaultValue - 默认值
+		 * @returns {String|Number} - 字典值
+		 */
+		getDictValue(dictType, label, defaultValue = '') {
+			// 首先检查组件数据
+			const dictList = this.dictData[dictType];
+			if (dictList) {
+				const item = dictList.find(dict => dict.label === label);
+				if (item) return item.value;
+			}
+
+			// 再检查静态字典
+			const staticDictList = staticDict[dictType];
+			if (staticDictList) {
+				const item = staticDictList.find(dict => dict.label === label);
+				if (item) return item.value;
+			}
+
+			// 都没找到,返回默认值
+			return defaultValue;
+		},
+
+		/**
+		 * 获取字典列表
+		 * @param {String} dictType - 字典类型
+		 * @returns {Array} - 字典列表
+		 */
+		getDictList(dictType) {
+			// 首先检查组件数据
+			const dictList = this.dictData[dictType];
+			if (dictList) return dictList;
+
+			// 再检查静态字典
+			return staticDict[dictType] || [];
+		},
+
+		/**
+		 * 获取字典类型对应的样式类
+		 * @param {String} dictType - 字典类型
+		 * @param {String|Number} value - 字典值
+		 * @param {String} defaultClass - 默认样式类
+		 * @returns {String} - 字典项的样式类
+		 */
+		getDictClass(dictType, value, defaultClass = '') {
+			// 首先检查组件数据
+			const dictList = this.dictData[dictType];
+			if (dictList) {
+				const item = dictList.find(dict => dict.dictValue === value);
+				if (item && item.listClass) return item.listClass;
+			}
+
+			// 再检查静态字典
+			// const staticDictList = staticDict[dictType];
+			// if (staticDictList) {
+			//   const item = staticDictList.find(dict => dict.value === value);
+			//   if (item && item.listClass) return item.listClass;
+			// }
+
+			// 都没找到,返回默认值
+			return defaultClass;
+		}
+	}
+};

+ 65 - 0
utils/privacy.js

@@ -0,0 +1,65 @@
+import storage from './storage.js'
+
+/**
+ * 隐私协议管理工具
+ */
+export default {
+  /**
+   * 检查隐私协议同意状态
+   * @returns {boolean} 是否已同意隐私协议
+   */
+  checkAgreement() {
+    return !!storage.getPrivacyAgreed()
+  },
+
+  /**
+   * 检查隐私协议状态,如果未同意则跳转到协议页面
+   * @returns {boolean} 是否已同意隐私协议
+   */
+  checkAndRedirect() {
+    const agreed = this.checkAgreement()
+    if (!agreed) {
+      console.log('用户未同意隐私协议,跳转到隐私协议页面')
+      uni.reLaunch({
+        url: '/pages/privacy/privacy-agreement'
+      })
+      return false
+    }
+    return true
+  },
+
+  /**
+   * 设置隐私协议同意状态
+   * @param {boolean} agreed 是否同意
+   */
+  setAgreement(agreed) {
+    storage.setPrivacyAgreed(agreed)
+  },
+
+  /**
+   * 清除隐私协议同意状态
+   */
+  clearAgreement() {
+    storage.removePrivacyAgreed()
+  },
+
+  /**
+   * 检查是否需要显示隐私协议(适用于多端)
+   * @returns {boolean} 是否需要显示隐私协议
+   */
+  shouldShowAgreement() {
+    // #ifdef APP-PLUS || APP-HARMONY || H5
+    return !this.checkAgreement()
+    // #endif
+    
+    // #ifdef MP
+    // 小程序环境可能有不同的隐私协议要求
+    return !this.checkAgreement()
+    // #endif
+    
+    // 其他环境默认不显示
+    // #ifndef APP-PLUS || APP-HARMONY || H5 || MP
+    return false
+    // #endif
+  }
+}

+ 218 - 0
utils/request.js

@@ -0,0 +1,218 @@
+// import {
+// 	refreshTokenFn
+// } from "@/api/services/login.js";
+import api from "@/config/api.js";
+import Request from "@/utils/lib/request/index.js";
+import Foundation from "@/utils/Foundation.js";
+import md5 from "@/utils/md5.js";
+import storage from "@/utils/storage.js";
+
+import jwt from '@/utils/js_sdk/t-jwt/jwt.js';
+import uuid from "@/utils/uuid.modified.js";
+// Vue3: Store is already migrated to use createStore from Vuex 4.x
+// Direct state access (store.state.xxx) is still valid in Vuex 4.x
+import store from "../store";
+
+
+let isNavigateTo = false
+
+function cleanStorage() {
+	uni.showToast({
+		title: "你的登录状态已过期,请重新登录",
+		icon: "none",
+		duration: 1500,
+	});
+	if (uni.showLoading()) {
+		uni.hideLoading();
+	}
+
+	storage.setHasLogin(false);
+	storage.setAccessToken("");
+	// storage.setRefreshToken("");
+	storage.setUuid("");
+	storage.setUserInfo({});
+
+
+	/* if (!isNavigateTo) {
+		isNavigateTo = true
+		// 防抖处理跳转
+		// #ifdef MP-WEIXIN || MP-HARMONY
+		uni.navigateTo({
+			url: "/pages/login/index",
+		});
+		// #endif
+		// #ifndef MP-WEIXIN || MP-HARMONY
+		uni.navigateTo({
+			url: "/pages/passport/login",
+		});
+		//  #endif
+	} */
+}
+
+let http = new Request();
+
+
+/**
+ * 创建uuid方法
+ */
+const createUuid = () => {
+	if (!storage.getUuid()) {
+		storage.setUuid(uuid.v4());
+		console.log("uuid", storage.getUuid());
+	}
+}
+
+
+http.setConfig((config) => {
+	createUuid();
+	/* 设置全局配置 */
+	config.baseURL = api.serve;
+	config.header = {
+		...config.header,
+	};
+	config.validateStatus = (statusCode) => {
+		// 不论什么状态,统一在正确中处理
+		return true;
+	};
+	return config;
+});
+
+http.interceptors.request.use(
+	(config) => {
+		/* 请求之前拦截器。可以使用async await 做异步操作 */
+		let accessToken = storage.getAccessToken();
+		if(storage.getInviter()){
+			config.header.inviter = storage.getInviter();
+		}
+		
+		console.log("请求前处理");
+		if (accessToken) {
+			/**
+			 * 使用JWT解析
+			 * 小于当前时间将当前token清除
+			 */
+			const decodeJwt = jwt(accessToken);
+			const timing = new Date().getTime() / 1000
+			if (decodeJwt.exp <= timing) {
+				accessToken = ""
+				storage.setAccessToken('')
+			}
+			
+
+			const nonce = Foundation.randomString(6);
+			const timestamp = parseInt(new Date().getTime() / 1000);
+			const sign = md5(nonce + timestamp + accessToken);
+			const _params = {
+				nonce,
+				timestamp,
+				sign,
+			};
+			let params = config.params || {};
+			params = {
+				...params,
+				..._params
+			};
+
+			config.params = params;
+			// config.header.accessToken = accessToken;
+			config.header.Authorization  = 'Bearer '+accessToken;
+
+
+		}
+		createUuid();
+		config.header = {
+			...config.header,
+			uuid: storage.getUuid()
+		};
+		return config;
+	},
+	(config) => {
+		return Promise.reject(config);
+	}
+);
+
+
+// 是否正在刷新的标记
+let isRefreshing = false;
+//重试队列
+let requests = [];
+// 必须使用异步函数,注意
+http.interceptors.response.use(
+	async (response) => {
+		isNavigateTo = false;
+		uni.showLoading() ? uni.hideLoading() : '';
+		let token = storage.getAccessToken();
+		console.log("请求后的处理",response);
+		// token存在但401,说明过期了
+		if ((token && response.statusCode === 401) || response.data.status === 401) {
+			console.log('token过期或无效,跳转登录', token);
+			cleanStorage(); // 清理缓存中的token、用户信息等
+			uni.showToast({
+				title: '登录已过期,请重新登录',
+				icon: 'none',
+				duration: 2000,
+				complete: () => {
+					setTimeout(() => {
+						uni.navigateTo({
+						  url: '/pages/login/index'
+						}); // 跳转登录页
+					}, 2000);
+				}
+			});
+			return Promise.reject('登录状态过期');
+		}
+
+		// 未登录也跳转
+		if ((!token && !storage.getAccessToken() && response.statusCode === 401) || response.data.code === 401 || response.data.code === 403) {
+			console.log('无token,跳转登录');
+			cleanStorage();
+			uni.showToast({
+				title: `请先登录${storage.getAccessToken()}`,
+				icon: 'none',
+				duration: 2000,
+				complete: () => {
+					setTimeout(() => {
+						uni.navigateTo({
+						  url: '/pages/login/index'
+						});
+					}, 2000);
+				}
+			});
+			return Promise.reject('未登录');
+		}
+
+		// 请求成功但业务失败
+		if (
+			(response.statusCode === 200 && !response.data.success) ||
+			response.statusCode === 400
+		) {
+			if (response.data.message) {
+				uni.showToast({
+					title: response.data.message,
+					icon: "none",
+					duration: 1500,
+					success: () => { store.state.isShowToast = true; },
+					fail: () => { store.state.isShowToast = false; },
+					complete: () => { store.state.isShowToast = false; }
+				});
+			}
+		}
+
+		return response;
+	},
+	(error) => {
+		return Promise.reject(error);
+	}
+);
+
+
+export {
+	http
+};
+
+export const Method = {
+	GET: "GET",
+	POST: "POST",
+	PUT: "PUT",
+	DELETE: "DELETE",
+};

+ 8 - 0
utils/staticDict.js

@@ -0,0 +1,8 @@
+/**
+ * 静态字典数据配置
+ * 对于不需要从后端获取的通用字典,可以在此处配置
+ */
+
+export default {
+
+}; 

+ 124 - 0
utils/storage.js

@@ -0,0 +1,124 @@
+let isDev = process.env.NODE_ENV === "development";
+
+const UUID = isDev ? "uuid_key_dev" : "uuid_key";
+const CURRENT_PLOT = isDev ? "current_plot_dev" : "current_plot";
+const CURRENT_USER_PLOTS_LIST = isDev ? "user_plots_list_dev" : "user_plots_list";
+const HAS_LOGIN = isDev ? "has_login_key_dev" : "has_login_key";
+const ACCESS_TOKEN = isDev ? "access_token_key_dev" : "access_token_key";
+const REFRESH_TOKEN = isDev ? "refresh_token_key_dev" : "refresh_token_key";
+const USER_INFO = isDev ? "user_info_obj_dev" : "user_info_obj";
+const AFTERSALE_DATA = isDev ? "aftersale_data_dev" : "aftersale_data";
+const PRIVACY_AGREED = isDev ? "privacy_agreed_dev" : "privacy_agreed";
+export default {
+	setDict(type,val){
+		uni.setStorageSync(type, val);
+	},
+	removeCurrentPlot(){
+		uni.removeStorageSync(CURRENT_PLOT);
+	},
+	removeUserPlots(){
+		uni.removeStorageSync(CURRENT_USER_PLOTS_LIST);
+	},
+	removeDict(type){
+		uni.removeStorageSync(type);
+	},
+	setInviter(val) {
+		uni.setStorageSync('inviter', val)
+	},
+	getInviter() {
+		return uni.getStorageSync('inviter');
+	},
+	// 写入用户信息
+	setUserInfo(val) {
+		uni.setStorageSync(USER_INFO, val);
+	},
+	setCurrentUserPlotsList(val){
+		uni.setStorageSync(CURRENT_USER_PLOTS_LIST,val)
+	},
+	getCurrentUserPlotsList(){
+		return uni.getStorageSync(CURRENT_USER_PLOTS_LIST);
+	},
+	// 获取用户信息
+	getUserInfo() {
+		return uni.getStorageSync(USER_INFO);
+	},
+	// 写入uuid
+	setUuid(val) {
+		uni.setStorageSync(UUID, val);
+	},
+	// 获取uuid
+	getUuid() {
+		return uni.getStorageSync(UUID);
+	},
+	// 写入登录
+	setHasLogin(val) {
+		uni.setStorageSync(HAS_LOGIN, val);
+	},
+	// 获取是否登录
+	getHasLogin() {
+		return uni.getStorageSync(HAS_LOGIN);
+	},
+	// 删除uuid
+	removeUuid() {
+		uni.removeStorageSync(UUID);
+	},
+	// 写入accessToken
+	setAccessToken(val) {
+		uni.setStorageSync(ACCESS_TOKEN, val);
+	},
+	// 获取accessToken
+	getAccessToken() {
+		return uni.getStorageSync(ACCESS_TOKEN);
+	},
+
+	// 删除token
+	removeAccessToken() {
+		uni.removeStorageSync(ACCESS_TOKEN);
+	},
+	// 写入刷新token
+	setRefreshToken(val) {
+		uni.setStorageSync(REFRESH_TOKEN, val);
+	},
+	// 获取刷新token
+	getRefreshToken() {
+		return uni.getStorageSync(REFRESH_TOKEN);
+	},
+	// 删除token
+	removeRefreshToken() {
+		uni.removeStorageSync(REFRESH_TOKEN);
+	},
+
+	setPlots(val) {
+		uni.setStorageSync(CURRENT_PLOT, val)
+	},
+
+	getPlots() {
+		return uni.getStorageSync(CURRENT_PLOT)
+	},
+	// 删除token
+	removeAfterSaleData() {
+		uni.removeStorageSync(AFTERSALE_DATA);
+	},
+	// 是否登录检查
+	isLoggedIn() {
+		return !!this.getHasLogin() && !!this.getAccessToken();
+	},
+	setWvpAccessToken(val){
+		uni.setStorageSync('wvp_access_token', val);
+	},
+	getWvpAccessToken() {
+		return uni.getStorageSync('wvp_access_token');
+	},
+	// 设置隐私协议同意状态
+	setPrivacyAgreed(val) {
+		uni.setStorageSync(PRIVACY_AGREED, val);
+	},
+	// 获取隐私协议同意状态
+	getPrivacyAgreed() {
+		return uni.getStorageSync(PRIVACY_AGREED);
+	},
+	// 删除隐私协议同意状态
+	removePrivacyAgreed() {
+		uni.removeStorageSync(PRIVACY_AGREED);
+	},
+};

+ 62 - 0
utils/testCoordinateUtils.js

@@ -0,0 +1,62 @@
+/**
+ * 坐标转换工具类测试文件
+ * 用于验证坐标转换功能是否正常工作
+ */
+
+import coordinateUtils from './coordinateUtils.js'
+
+// 测试坐标数据(北京市天安门广场的高德坐标)
+const testGcj02Lng = 116.3974
+const testGcj02Lat = 39.9093
+
+// 预期转换后的WGS84坐标(大致值,用于验证)
+const expectedWgs84Lng = 116.3912
+const expectedWgs84Lat = 39.9073
+
+console.log('=== 坐标转换工具类测试 ===')
+console.log('原始GCJ-02坐标:', { lng: testGcj02Lng, lat: testGcj02Lat })
+
+// 测试单个坐标转换
+const converted = coordinateUtils.gcj02ToWgs84(testGcj02Lng, testGcj02Lat)
+console.log('转换后的WGS84坐标:', converted)
+
+// 验证转换结果是否合理
+const lngDiff = Math.abs(converted.lng - expectedWgs84Lng)
+const latDiff = Math.abs(converted.lat - expectedWgs84Lat)
+
+console.log('经度差异:', lngDiff.toFixed(6), '纬度差异:', latDiff.toFixed(6))
+
+if (lngDiff < 0.01 && latDiff < 0.01) {
+  console.log('✅ 坐标转换测试通过')
+} else {
+  console.log('❌ 坐标转换测试失败,差异过大')
+}
+
+// 测试坐标点数组转换
+const testPoints = [
+  { lng: testGcj02Lng, lat: testGcj02Lat, timestamp: Date.now() },
+  { lng: testGcj02Lng + 0.001, lat: testGcj02Lat + 0.001, timestamp: Date.now() }
+]
+
+console.log('\n=== 测试坐标点数组转换 ===')
+console.log('原始坐标点:', testPoints)
+
+const convertedPoints = coordinateUtils.convertPointsToWgs84(testPoints)
+console.log('转换后坐标点:', convertedPoints)
+
+// 测试单个坐标点转换
+const testPoint = { lng: testGcj02Lng, lat: testGcj02Lat, timestamp: Date.now() }
+console.log('\n=== 测试单个坐标点转换 ===')
+console.log('原始坐标点:', testPoint)
+
+const convertedPoint = coordinateUtils.convertPointToWgs84(testPoint)
+console.log('转换后坐标点:', convertedPoint)
+
+// 测试边界情况
+console.log('\n=== 测试边界情况 ===')
+console.log('无效坐标点:', coordinateUtils.convertPointToWgs84(null))
+console.log('不完整坐标点:', coordinateUtils.convertPointToWgs84({ lng: 116.0 }))
+console.log('空数组:', coordinateUtils.convertPointsToWgs84([]))
+console.log('无效数组:', coordinateUtils.convertPointsToWgs84(null))
+
+console.log('\n=== 测试完成 ===')

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