liukang 2 年之前
父節點
當前提交
90024300c6
共有 100 個文件被更改,包括 23003 次插入0 次删除
  1. 16 0
      jxtxkj/.hbuilderx/launch.json
  2. 63 0
      jxtxkj/App.vue
  3. 1201 0
      jxtxkj/components/tki-qrcode/qrcode.js
  4. 210 0
      jxtxkj/components/tki-qrcode/tki-qrcode.vue
  5. 10265 0
      jxtxkj/components/wangding-pickerAddress/data.js
  6. 103 0
      jxtxkj/components/wangding-pickerAddress/wangding-pickerAddress.vue
  7. 20 0
      jxtxkj/index.html
  8. 24 0
      jxtxkj/main.js
  9. 75 0
      jxtxkj/manifest.json
  10. 15 0
      jxtxkj/node_modules/.package-lock.json
  11. 21 0
      jxtxkj/node_modules/uview-ui/LICENSE
  12. 104 0
      jxtxkj/node_modules/uview-ui/README.md
  13. 326 0
      jxtxkj/node_modules/uview-ui/changelog.md
  14. 78 0
      jxtxkj/node_modules/uview-ui/components/u--form/u--form.vue
  15. 47 0
      jxtxkj/node_modules/uview-ui/components/u--image/u--image.vue
  16. 72 0
      jxtxkj/node_modules/uview-ui/components/u--input/u--input.vue
  17. 44 0
      jxtxkj/node_modules/uview-ui/components/u--text/u--text.vue
  18. 47 0
      jxtxkj/node_modules/uview-ui/components/u--textarea/u--textarea.vue
  19. 54 0
      jxtxkj/node_modules/uview-ui/components/u-action-sheet/props.js
  20. 278 0
      jxtxkj/node_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue
  21. 59 0
      jxtxkj/node_modules/uview-ui/components/u-album/props.js
  22. 259 0
      jxtxkj/node_modules/uview-ui/components/u-album/u-album.vue
  23. 44 0
      jxtxkj/node_modules/uview-ui/components/u-alert/props.js
  24. 243 0
      jxtxkj/node_modules/uview-ui/components/u-alert/u-alert.vue
  25. 52 0
      jxtxkj/node_modules/uview-ui/components/u-avatar-group/props.js
  26. 103 0
      jxtxkj/node_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue
  27. 78 0
      jxtxkj/node_modules/uview-ui/components/u-avatar/props.js
  28. 58 0
      jxtxkj/node_modules/uview-ui/components/u-avatar/u-avatar.vue
  29. 54 0
      jxtxkj/node_modules/uview-ui/components/u-back-top/props.js
  30. 129 0
      jxtxkj/node_modules/uview-ui/components/u-back-top/u-back-top.vue
  31. 72 0
      jxtxkj/node_modules/uview-ui/components/u-badge/props.js
  32. 171 0
      jxtxkj/node_modules/uview-ui/components/u-badge/u-badge.vue
  33. 46 0
      jxtxkj/node_modules/uview-ui/components/u-button/nvue.scss
  34. 161 0
      jxtxkj/node_modules/uview-ui/components/u-button/props.js
  35. 490 0
      jxtxkj/node_modules/uview-ui/components/u-button/u-button.vue
  36. 80 0
      jxtxkj/node_modules/uview-ui/components/u-button/vue.scss
  37. 99 0
      jxtxkj/node_modules/uview-ui/components/u-calendar/header.vue
  38. 579 0
      jxtxkj/node_modules/uview-ui/components/u-calendar/month.vue
  39. 144 0
      jxtxkj/node_modules/uview-ui/components/u-calendar/props.js
  40. 383 0
      jxtxkj/node_modules/uview-ui/components/u-calendar/u-calendar.vue
  41. 85 0
      jxtxkj/node_modules/uview-ui/components/u-calendar/util.js
  42. 14 0
      jxtxkj/node_modules/uview-ui/components/u-car-keyboard/props.js
  43. 311 0
      jxtxkj/node_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue
  44. 14 0
      jxtxkj/node_modules/uview-ui/components/u-cell-group/props.js
  45. 61 0
      jxtxkj/node_modules/uview-ui/components/u-cell-group/u-cell-group.vue
  46. 110 0
      jxtxkj/node_modules/uview-ui/components/u-cell/props.js
  47. 229 0
      jxtxkj/node_modules/uview-ui/components/u-cell/u-cell.vue
  48. 82 0
      jxtxkj/node_modules/uview-ui/components/u-checkbox-group/props.js
  49. 103 0
      jxtxkj/node_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue
  50. 69 0
      jxtxkj/node_modules/uview-ui/components/u-checkbox/props.js
  51. 344 0
      jxtxkj/node_modules/uview-ui/components/u-checkbox/u-checkbox.vue
  52. 8 0
      jxtxkj/node_modules/uview-ui/components/u-circle-progress/props.js
  53. 198 0
      jxtxkj/node_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue
  54. 74 0
      jxtxkj/node_modules/uview-ui/components/u-code-input/props.js
  55. 251 0
      jxtxkj/node_modules/uview-ui/components/u-code-input/u-code-input.vue
  56. 34 0
      jxtxkj/node_modules/uview-ui/components/u-code/props.js
  57. 129 0
      jxtxkj/node_modules/uview-ui/components/u-code/u-code.vue
  58. 29 0
      jxtxkj/node_modules/uview-ui/components/u-col/props.js
  59. 162 0
      jxtxkj/node_modules/uview-ui/components/u-col/u-col.vue
  60. 59 0
      jxtxkj/node_modules/uview-ui/components/u-collapse-item/props.js
  61. 225 0
      jxtxkj/node_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue
  62. 19 0
      jxtxkj/node_modules/uview-ui/components/u-collapse/props.js
  63. 90 0
      jxtxkj/node_modules/uview-ui/components/u-collapse/u-collapse.vue
  64. 55 0
      jxtxkj/node_modules/uview-ui/components/u-column-notice/props.js
  65. 160 0
      jxtxkj/node_modules/uview-ui/components/u-column-notice/u-column-notice.vue
  66. 24 0
      jxtxkj/node_modules/uview-ui/components/u-count-down/props.js
  67. 163 0
      jxtxkj/node_modules/uview-ui/components/u-count-down/u-count-down.vue
  68. 62 0
      jxtxkj/node_modules/uview-ui/components/u-count-down/utils.js
  69. 59 0
      jxtxkj/node_modules/uview-ui/components/u-count-to/props.js
  70. 184 0
      jxtxkj/node_modules/uview-ui/components/u-count-to/u-count-to.vue
  71. 116 0
      jxtxkj/node_modules/uview-ui/components/u-datetime-picker/props.js
  72. 360 0
      jxtxkj/node_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue
  73. 44 0
      jxtxkj/node_modules/uview-ui/components/u-divider/props.js
  74. 116 0
      jxtxkj/node_modules/uview-ui/components/u-divider/u-divider.vue
  75. 36 0
      jxtxkj/node_modules/uview-ui/components/u-dropdown-item/props.js
  76. 146 0
      jxtxkj/node_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue
  77. 65 0
      jxtxkj/node_modules/uview-ui/components/u-dropdown/props.js
  78. 127 0
      jxtxkj/node_modules/uview-ui/components/u-dropdown/u-dropdown.vue
  79. 59 0
      jxtxkj/node_modules/uview-ui/components/u-empty/props.js
  80. 128 0
      jxtxkj/node_modules/uview-ui/components/u-empty/u-empty.vue
  81. 43 0
      jxtxkj/node_modules/uview-ui/components/u-form-item/props.js
  82. 235 0
      jxtxkj/node_modules/uview-ui/components/u-form-item/u-form-item.vue
  83. 45 0
      jxtxkj/node_modules/uview-ui/components/u-form/props.js
  84. 214 0
      jxtxkj/node_modules/uview-ui/components/u-form/u-form.vue
  85. 24 0
      jxtxkj/node_modules/uview-ui/components/u-gap/props.js
  86. 38 0
      jxtxkj/node_modules/uview-ui/components/u-gap/u-gap.vue
  87. 14 0
      jxtxkj/node_modules/uview-ui/components/u-grid-item/props.js
  88. 209 0
      jxtxkj/node_modules/uview-ui/components/u-grid-item/u-grid-item.vue
  89. 19 0
      jxtxkj/node_modules/uview-ui/components/u-grid/props.js
  90. 97 0
      jxtxkj/node_modules/uview-ui/components/u-grid/u-grid.vue
  91. 214 0
      jxtxkj/node_modules/uview-ui/components/u-icon/icons.js
  92. 89 0
      jxtxkj/node_modules/uview-ui/components/u-icon/props.js
  93. 234 0
      jxtxkj/node_modules/uview-ui/components/u-icon/u-icon.vue
  94. 84 0
      jxtxkj/node_modules/uview-ui/components/u-image/props.js
  95. 232 0
      jxtxkj/node_modules/uview-ui/components/u-image/u-image.vue
  96. 29 0
      jxtxkj/node_modules/uview-ui/components/u-index-anchor/props.js
  97. 91 0
      jxtxkj/node_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue
  98. 5 0
      jxtxkj/node_modules/uview-ui/components/u-index-item/props.js
  99. 87 0
      jxtxkj/node_modules/uview-ui/components/u-index-item/u-index-item.vue
  100. 29 0
      jxtxkj/node_modules/uview-ui/components/u-index-list/props.js

+ 16 - 0
jxtxkj/.hbuilderx/launch.json

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

+ 63 - 0
jxtxkj/App.vue

@@ -0,0 +1,63 @@
+<script>
+	export default {
+		onLaunch: function() {
+			console.log('App Launch')
+		},
+		onShow: function() {
+			console.log('App Show')
+		},
+		onHide: function() {
+			console.log('App Hide')
+		}
+	}
+</script>
+
+<style lang="scss">
+	/*每个页面公共css */
+	@import "uview-ui/index.scss";
+	
+	.web_box {
+		background-color: #f8f8f8;
+		width: 100%;
+		min-height: 100vh;
+		display: flex;
+		flex-direction: column;
+		font-size: 28rpx;
+		color: #333;
+		box-sizing: border-box;
+	}
+	.hflex {
+		display: flex;
+		flex-direction: row;
+		flex-wrap: nowrap;
+	}
+	.vflex {
+		display: flex;
+		flex-direction: column;
+		flex-wrap: nowrap;
+	}
+	.jbetween {
+		justify-content: space-between;
+	}
+	.jaround {
+		justify-content: space-around;
+	}
+	.jend {
+		justify-content: flex-end;
+	}
+	.jcenter {
+		justify-content: center;
+	}
+	.acenter {
+		align-items: center;
+	}
+	.abetween {
+		align-content: space-between;
+	}
+	.aend {
+		align-content: flex-end;
+	}
+	.fwrap {
+		flex-wrap: wrap;
+	}
+</style>

+ 1201 - 0
jxtxkj/components/tki-qrcode/qrcode.js

@@ -0,0 +1,1201 @@
+let QRCode = {};
+(function () {
+    /**
+     * 获取单个字符的utf8编码
+     * unicode BMP平面约65535个字符
+     * @param {num} code
+     * return {array}
+     */
+    function unicodeFormat8(code) {
+        // 1 byte
+        var c0, c1, c2;
+        if (code < 128) {
+            return [code];
+            // 2 bytes
+        } else if (code < 2048) {
+            c0 = 192 + (code >> 6);
+            c1 = 128 + (code & 63);
+            return [c0, c1];
+            // 3 bytes
+        } else {
+            c0 = 224 + (code >> 12);
+            c1 = 128 + (code >> 6 & 63);
+            c2 = 128 + (code & 63);
+            return [c0, c1, c2];
+        }
+    }
+    /**
+     * 获取字符串的utf8编码字节串
+     * @param {string} string
+     * @return {array}
+     */
+    function getUTF8Bytes(string) {
+        var utf8codes = [];
+        for (var i = 0; i < string.length; i++) {
+            var code = string.charCodeAt(i);
+            var utf8 = unicodeFormat8(code);
+            for (var j = 0; j < utf8.length; j++) {
+                utf8codes.push(utf8[j]);
+            }
+        }
+        return utf8codes;
+    }
+    /**
+     * 二维码算法实现
+     * @param {string} data              要编码的信息字符串
+     * @param {num} errorCorrectLevel 纠错等级
+     */
+    function QRCodeAlg(data, errorCorrectLevel) {
+        this.typeNumber = -1; //版本
+        this.errorCorrectLevel = errorCorrectLevel;
+        this.modules = null; //二维矩阵,存放最终结果
+        this.moduleCount = 0; //矩阵大小
+        this.dataCache = null; //数据缓存
+        this.rsBlocks = null; //版本数据信息
+        this.totalDataCount = -1; //可使用的数据量
+        this.data = data;
+        this.utf8bytes = getUTF8Bytes(data);
+        this.make();
+    }
+    QRCodeAlg.prototype = {
+        constructor: QRCodeAlg,
+        /**
+         * 获取二维码矩阵大小
+         * @return {num} 矩阵大小
+         */
+        getModuleCount: function () {
+            return this.moduleCount;
+        },
+        /**
+         * 编码
+         */
+        make: function () {
+            this.getRightType();
+            this.dataCache = this.createData();
+            this.createQrcode();
+        },
+        /**
+         * 设置二位矩阵功能图形
+         * @param  {bool} test 表示是否在寻找最好掩膜阶段
+         * @param  {num} maskPattern 掩膜的版本
+         */
+        makeImpl: function (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);
+            }
+            this.setupPositionProbePattern(0, 0);
+            this.setupPositionProbePattern(this.moduleCount - 7, 0);
+            this.setupPositionProbePattern(0, this.moduleCount - 7);
+            this.setupPositionAdjustPattern();
+            this.setupTimingPattern();
+            this.setupTypeInfo(true, maskPattern);
+            if (this.typeNumber >= 7) {
+                this.setupTypeNumber(true);
+            }
+            this.mapData(this.dataCache, maskPattern);
+        },
+        /**
+         * 设置二维码的位置探测图形
+         * @param  {num} row 探测图形的中心横坐标
+         * @param  {num} col 探测图形的中心纵坐标
+         */
+        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;
+                    }
+                }
+            }
+        },
+        /**
+         * 创建二维码
+         * @return {[type]} [description]
+         */
+        createQrcode: function () {
+            var minLostPoint = 0;
+            var pattern = 0;
+            var bestModules = null;
+            for (var i = 0; i < 8; i++) {
+                this.makeImpl(i);
+                var lostPoint = QRUtil.getLostPoint(this);
+                if (i == 0 || minLostPoint > lostPoint) {
+                    minLostPoint = lostPoint;
+                    pattern = i;
+                    bestModules = this.modules;
+                }
+            }
+            this.modules = bestModules;
+            this.setupTypeInfo(false, pattern);
+            if (this.typeNumber >= 7) {
+                this.setupTypeNumber(false);
+            }
+        },
+        /**
+         * 设置定位图形
+         * @return {[type]} [description]
+         */
+        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);
+                if (this.modules[6][r] != null) {
+                    continue;
+                }
+                this.modules[6][r] = (r % 2 == 0);
+            }
+        },
+        /**
+         * 设置矫正图形
+         * @return {[type]} [description]
+         */
+        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;
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        /**
+         * 设置版本信息(7以上版本才有)
+         * @param  {bool} test 是否处于判断最佳掩膜阶段
+         * @return {[type]}      [description]
+         */
+        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;
+                this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
+            }
+        },
+        /**
+         * 设置格式信息(纠错等级和掩膜版本)
+         * @param  {bool} test
+         * @param  {num} maskPattern 掩膜版本
+         * @return {}
+         */
+        setupTypeInfo: function (test, maskPattern) {
+            var data = (QRErrorCorrectLevel[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
+                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);
+        },
+        /**
+         * 数据编码
+         * @return {[type]} [description]
+         */
+        createData: function () {
+            var buffer = new QRBitBuffer();
+            var lengthBits = this.typeNumber > 9 ? 16 : 8;
+            buffer.put(4, 4); //添加模式
+            buffer.put(this.utf8bytes.length, lengthBits);
+            for (var i = 0, l = this.utf8bytes.length; i < l; i++) {
+                buffer.put(this.utf8bytes[i], 8);
+            }
+            if (buffer.length + 4 <= this.totalDataCount * 8) {
+                buffer.put(0, 4);
+            }
+            // padding
+            while (buffer.length % 8 != 0) {
+                buffer.putBit(false);
+            }
+            // padding
+            while (true) {
+                if (buffer.length >= this.totalDataCount * 8) {
+                    break;
+                }
+                buffer.put(QRCodeAlg.PAD0, 8);
+                if (buffer.length >= this.totalDataCount * 8) {
+                    break;
+                }
+                buffer.put(QRCodeAlg.PAD1, 8);
+            }
+            return this.createBytes(buffer);
+        },
+        /**
+         * 纠错码编码
+         * @param  {buffer} buffer 数据编码
+         * @return {[type]}
+         */
+        createBytes: function (buffer) {
+            var offset = 0;
+            var maxDcCount = 0;
+            var maxEcCount = 0;
+            var length = this.rsBlock.length / 3;
+            var rsBlocks = new Array();
+            for (var i = 0; i < length; i++) {
+                var count = this.rsBlock[i * 3 + 0];
+                var totalCount = this.rsBlock[i * 3 + 1];
+                var dataCount = this.rsBlock[i * 3 + 2];
+                for (var j = 0; j < count; j++) {
+                    rsBlocks.push([dataCount, totalCount]);
+                }
+            }
+            var dcdata = new Array(rsBlocks.length);
+            var ecdata = new Array(rsBlocks.length);
+            for (var r = 0; r < rsBlocks.length; r++) {
+                var dcCount = rsBlocks[r][0];
+                var ecCount = rsBlocks[r][1] - 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 data = new Array(this.totalDataCount);
+            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;
+
+        },
+        /**
+         * 布置模块,构建最终信息
+         * @param  {} data
+         * @param  {} maskPattern
+         * @return {}
+         */
+        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;
+                    }
+                }
+            }
+        }
+    };
+    /**
+     * 填充字段
+     */
+    QRCodeAlg.PAD0 = 0xEC;
+    QRCodeAlg.PAD1 = 0x11;
+    //---------------------------------------------------------------------
+    // 纠错等级对应的编码
+    //---------------------------------------------------------------------
+    var QRErrorCorrectLevel = [1, 0, 3, 2];
+    //---------------------------------------------------------------------
+    // 掩膜版本
+    //---------------------------------------------------------------------
+    var QRMaskPattern = {
+        PATTERN000: 0,
+        PATTERN001: 1,
+        PATTERN010: 2,
+        PATTERN011: 3,
+        PATTERN100: 4,
+        PATTERN101: 5,
+        PATTERN110: 6,
+        PATTERN111: 7
+    };
+    //---------------------------------------------------------------------
+    // 工具类
+    //---------------------------------------------------------------------
+    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),
+        /*
+        BCH编码格式信息
+         */
+        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;
+        },
+        /*
+        BCH编码版本信息
+         */
+        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;
+        },
+        /*
+        获取BCH位信息
+         */
+        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);
+            }
+        },
+        /*
+        获取RS的纠错多项式
+         */
+        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;
+        },
+        /*
+        获取评价
+         */
+        getLostPoint: function (qrCode) {
+            var moduleCount = qrCode.getModuleCount(),
+                lostPoint = 0,
+                darkCount = 0;
+            for (var row = 0; row < moduleCount; row++) {
+                var sameCount = 0;
+                var head = qrCode.modules[row][0];
+                for (var col = 0; col < moduleCount; col++) {
+                    var current = qrCode.modules[row][col];
+                    //level 3 评价
+                    if (col < moduleCount - 6) {
+                        if (current && !qrCode.modules[row][col + 1] && qrCode.modules[row][col + 2] && qrCode.modules[row][col + 3] && qrCode.modules[row][col + 4] && !qrCode.modules[row][col + 5] && qrCode.modules[row][col + 6]) {
+                            if (col < moduleCount - 10) {
+                                if (qrCode.modules[row][col + 7] && qrCode.modules[row][col + 8] && qrCode.modules[row][col + 9] && qrCode.modules[row][col + 10]) {
+                                    lostPoint += 40;
+                                }
+                            } else if (col > 3) {
+                                if (qrCode.modules[row][col - 1] && qrCode.modules[row][col - 2] && qrCode.modules[row][col - 3] && qrCode.modules[row][col - 4]) {
+                                    lostPoint += 40;
+                                }
+                            }
+                        }
+                    }
+                    //level 2 评价
+                    if ((row < moduleCount - 1) && (col < moduleCount - 1)) {
+                        var count = 0;
+                        if (current) count++;
+                        if (qrCode.modules[row + 1][col]) count++;
+                        if (qrCode.modules[row][col + 1]) count++;
+                        if (qrCode.modules[row + 1][col + 1]) count++;
+                        if (count == 0 || count == 4) {
+                            lostPoint += 3;
+                        }
+                    }
+                    //level 1 评价
+                    if (head ^ current) {
+                        sameCount++;
+                    } else {
+                        head = current;
+                        if (sameCount >= 5) {
+                            lostPoint += (3 + sameCount - 5);
+                        }
+                        sameCount = 1;
+                    }
+                    //level 4 评价
+                    if (current) {
+                        darkCount++;
+                    }
+                }
+            }
+            for (var col = 0; col < moduleCount; col++) {
+                var sameCount = 0;
+                var head = qrCode.modules[0][col];
+                for (var row = 0; row < moduleCount; row++) {
+                    var current = qrCode.modules[row][col];
+                    //level 3 评价
+                    if (row < moduleCount - 6) {
+                        if (current && !qrCode.modules[row + 1][col] && qrCode.modules[row + 2][col] && qrCode.modules[row + 3][col] && qrCode.modules[row + 4][col] && !qrCode.modules[row + 5][col] && qrCode.modules[row + 6][col]) {
+                            if (row < moduleCount - 10) {
+                                if (qrCode.modules[row + 7][col] && qrCode.modules[row + 8][col] && qrCode.modules[row + 9][col] && qrCode.modules[row + 10][col]) {
+                                    lostPoint += 40;
+                                }
+                            } else if (row > 3) {
+                                if (qrCode.modules[row - 1][col] && qrCode.modules[row - 2][col] && qrCode.modules[row - 3][col] && qrCode.modules[row - 4][col]) {
+                                    lostPoint += 40;
+                                }
+                            }
+                        }
+                    }
+                    //level 1 评价
+                    if (head ^ current) {
+                        sameCount++;
+                    } else {
+                        head = current;
+                        if (sameCount >= 5) {
+                            lostPoint += (3 + sameCount - 5);
+                        }
+                        sameCount = 1;
+                    }
+                }
+            }
+            // LEVEL4
+            var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
+            lostPoint += ratio * 10;
+            return lostPoint;
+        }
+
+    };
+    //---------------------------------------------------------------------
+    // QRMath使用的数学工具
+    //---------------------------------------------------------------------
+    var QRMath = {
+        /*
+        将n转化为a^m
+         */
+        glog: function (n) {
+            if (n < 1) {
+                throw new Error("glog(" + n + ")");
+            }
+            return QRMath.LOG_TABLE[n];
+        },
+        /*
+        将a^m转化为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 多项式
+    //---------------------------------------------------------------------
+    /**
+     * 多项式类
+     * @param {Array} num   系数
+     * @param {num} shift a^shift
+     */
+    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;
+        },
+        /**
+         * 多项式乘法
+         * @param  {QRPolynomial} e 被乘多项式
+         * @return {[type]}   [description]
+         */
+        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);
+        },
+        /**
+         * 多项式模运算
+         * @param  {QRPolynomial} e 模多项式
+         * @return {}
+         */
+        mod: function (e) {
+            var tl = this.getLength(),
+                el = e.getLength();
+            if (tl - el < 0) {
+                return this;
+            }
+            var num = new Array(tl);
+            for (var i = 0; i < tl; i++) {
+                num[i] = this.get(i);
+            }
+            while (num.length >= el) {
+                var ratio = QRMath.glog(num[0]) - QRMath.glog(e.get(0));
+
+                for (var i = 0; i < e.getLength(); i++) {
+                    num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);
+                }
+                while (num[0] == 0) {
+                    num.shift();
+                }
+            }
+            return new QRPolynomial(num, 0);
+        }
+    };
+
+    //---------------------------------------------------------------------
+    // RS_BLOCK_TABLE
+    //---------------------------------------------------------------------
+    /*
+    二维码各个版本信息[块数, 每块中的数据块数, 每块中的信息块数]
+     */
+    var 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]
+    ];
+
+    /**
+     * 根据数据获取对应版本
+     * @return {[type]} [description]
+     */
+    QRCodeAlg.prototype.getRightType = function () {
+        for (var typeNumber = 1; typeNumber < 41; typeNumber++) {
+            var rsBlock = RS_BLOCK_TABLE[(typeNumber - 1) * 4 + this.errorCorrectLevel];
+            if (rsBlock == undefined) {
+                throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + this.errorCorrectLevel);
+            }
+            var length = rsBlock.length / 3;
+            var totalDataCount = 0;
+            for (var i = 0; i < length; i++) {
+                var count = rsBlock[i * 3 + 0];
+                var dataCount = rsBlock[i * 3 + 2];
+                totalDataCount += dataCount * count;
+            }
+            var lengthBytes = typeNumber > 9 ? 2 : 1;
+            if (this.utf8bytes.length + lengthBytes < totalDataCount || typeNumber == 40) {
+                this.typeNumber = typeNumber;
+                this.rsBlock = rsBlock;
+                this.totalDataCount = totalDataCount;
+                break;
+            }
+        }
+    };
+
+    //---------------------------------------------------------------------
+    // 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);
+        },
+        put: function (num, length) {
+            for (var i = 0; i < length; i++) {
+                this.putBit(((num >>> (length - i - 1)) & 1));
+            }
+        },
+        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++;
+        }
+    };
+
+
+
+    // xzedit
+    let qrcodeAlgObjCache = [];
+    /**
+     * 二维码构造函数,主要用于绘制
+     * @param  {参数列表} opt 传递参数
+     * @return {}
+     */
+    QRCode = function (opt) {
+        //设置默认参数
+        this.options = {
+            text: '',
+            size: 256,
+            correctLevel: 3,
+            background: '#ffffff',
+            foreground: '#000000',
+            pdground: '#000000',
+            image: '',
+            imageSize: 30,
+            canvasId: opt.canvasId,
+            context: opt.context,
+            usingComponents: opt.usingComponents,
+            showLoading: opt.showLoading,
+            loadingText: opt.loadingText,
+        };
+        if (typeof opt === 'string') { // 只编码ASCII字符串
+            opt = {
+                text: opt
+            };
+        }
+        if (opt) {
+            for (var i in opt) {
+                this.options[i] = opt[i];
+            }
+        }
+        //使用QRCodeAlg创建二维码结构
+        var qrCodeAlg = null;
+        for (var i = 0, l = qrcodeAlgObjCache.length; i < l; i++) {
+            if (qrcodeAlgObjCache[i].text == this.options.text && qrcodeAlgObjCache[i].text.correctLevel == this.options.correctLevel) {
+                qrCodeAlg = qrcodeAlgObjCache[i].obj;
+                break;
+            }
+        }
+        if (i == l) {
+            qrCodeAlg = new QRCodeAlg(this.options.text, this.options.correctLevel);
+            qrcodeAlgObjCache.push({
+                text: this.options.text,
+                correctLevel: this.options.correctLevel,
+                obj: qrCodeAlg
+            });
+        }
+        /**
+         * 计算矩阵点的前景色
+         * @param {Obj} config
+         * @param {Number} config.row 点x坐标
+         * @param {Number} config.col 点y坐标
+         * @param {Number} config.count 矩阵大小
+         * @param {Number} config.options 组件的options
+         * @return {String}
+         */
+        let getForeGround = function (config) {
+            var options = config.options;
+            if (options.pdground && (
+                (config.row > 1 && config.row < 5 && config.col > 1 && config.col < 5) ||
+                (config.row > (config.count - 6) && config.row < (config.count - 2) && config.col > 1 && config.col < 5) ||
+                (config.row > 1 && config.row < 5 && config.col > (config.count - 6) && config.col < (config.count - 2))
+            )) {
+                return options.pdground;
+            }
+            return options.foreground;
+        }
+        // 创建canvas
+        let createCanvas = function (options) {
+            if (options.showLoading) {
+                uni.showLoading({
+                    title: options.loadingText,
+                    mask: true
+                });
+            }
+            var ctx = uni.createCanvasContext(options.canvasId, options.context);
+            var count = qrCodeAlg.getModuleCount();
+            var ratioSize = options.size;
+            var ratioImgSize = options.imageSize;
+            //计算每个点的长宽
+            var tileW = (ratioSize / count).toPrecision(4);
+            var tileH = (ratioSize / count).toPrecision(4);
+            //绘制
+            for (var row = 0; row < count; row++) {
+                for (var col = 0; col < count; col++) {
+                    var w = (Math.ceil((col + 1) * tileW) - Math.floor(col * tileW));
+                    var h = (Math.ceil((row + 1) * tileW) - Math.floor(row * tileW));
+                    var foreground = getForeGround({
+                        row: row,
+                        col: col,
+                        count: count,
+                        options: options
+                    });
+                    ctx.setFillStyle(qrCodeAlg.modules[row][col] ? foreground : options.background);
+                    ctx.fillRect(Math.round(col * tileW), Math.round(row * tileH), w, h);
+                }
+            }
+            if (options.image) {
+                var x = Number(((ratioSize - ratioImgSize) / 2).toFixed(2));
+                var y = Number(((ratioSize - ratioImgSize) / 2).toFixed(2));
+                drawRoundedRect(ctx, x, y, ratioImgSize, ratioImgSize, 2, 6, true, true)
+                ctx.drawImage(options.image, x, y, ratioImgSize, ratioImgSize);
+                // 画圆角矩形
+                function drawRoundedRect(ctxi, x, y, width, height, r, lineWidth, fill, stroke) {
+                    ctxi.setLineWidth(lineWidth);
+                    ctxi.setFillStyle(options.background);
+                    ctxi.setStrokeStyle(options.background);
+                    ctxi.beginPath(); // draw top and top right corner 
+                    ctxi.moveTo(x + r, y);
+                    ctxi.arcTo(x + width, y, x + width, y + r, r); // draw right side and bottom right corner 
+                    ctxi.arcTo(x + width, y + height, x + width - r, y + height, r); // draw bottom and bottom left corner 
+                    ctxi.arcTo(x, y + height, x, y + height - r, r); // draw left and top left corner 
+                    ctxi.arcTo(x, y, x + r, y, r);
+                    ctxi.closePath();
+                    if (fill) {
+                        ctxi.fill();
+                    }
+                    if (stroke) {
+                        ctxi.stroke();
+                    }
+                }
+            }
+            setTimeout(() => {
+                ctx.draw(true, () => {
+                    // 保存到临时区域
+                    setTimeout(() => {
+                        uni.canvasToTempFilePath({
+                            width: options.width,
+                            height: options.height,
+                            destWidth: options.width,
+                            destHeight: options.height,
+                            canvasId: options.canvasId,
+                            quality: Number(1),
+                            success: function (res) {
+                                if (options.cbResult) {
+                                    options.cbResult(res.tempFilePath)
+                                }
+                            },
+                            fail: function (res) {
+                                if (options.cbResult) {
+                                    options.cbResult(res)
+                                }
+                            },
+                            complete: function () {
+                                if (options.showLoading){
+                                    uni.hideLoading();
+                                }
+                            },
+                        }, options.context);
+                    }, options.text.length + 100);
+                });
+            }, options.usingComponents ? 0 : 150);
+        }
+        createCanvas(this.options);
+        // 空判定
+        let empty = function (v) {
+            let tp = typeof v,
+                rt = false;
+            if (tp == "number" && String(v) == "") {
+                rt = true
+            } else if (tp == "undefined") {
+                rt = true
+            } else if (tp == "object") {
+                if (JSON.stringify(v) == "{}" || JSON.stringify(v) == "[]" || v == null) rt = true
+            } else if (tp == "string") {
+                if (v == "" || v == "undefined" || v == "null" || v == "{}" || v == "[]") rt = true
+            } else if (tp == "function") {
+                rt = false
+            }
+            return rt
+        }
+    };
+    QRCode.prototype.clear = function (fn) {
+        var ctx = uni.createCanvasContext(this.options.canvasId, this.options.context)
+        ctx.clearRect(0, 0, this.options.size, this.options.size)
+        ctx.draw(false, () => {
+            if (fn) {
+                fn()
+            }
+        })
+    };
+})()
+
+export default QRCode

+ 210 - 0
jxtxkj/components/tki-qrcode/tki-qrcode.vue

@@ -0,0 +1,210 @@
+<template xlang="wxml" minapp="mpvue">
+	<view class="tki-qrcode">
+		<!-- #ifndef MP-ALIPAY -->
+		<canvas class="tki-qrcode-canvas" :canvas-id="cid" :style="{width:cpSize+'px',height:cpSize+'px'}" />
+		<!-- #endif -->
+		<!-- #ifdef MP-ALIPAY -->
+		<canvas :id="cid" :width="cpSize" :height="cpSize" class="tki-qrcode-canvas" />
+		<!-- #endif -->
+		<image v-show="show" :src="result" :style="{width:cpSize+'px',height:cpSize+'px'}" />
+	</view>
+</template>
+
+<script>
+import QRCode from "./qrcode.js"
+let qrcode
+export default {
+	name: "tki-qrcode",
+	props: {
+		cid: {
+			type: String,
+			default: 'tki-qrcode-canvas'
+		},
+		size: {
+			type: Number,
+			default: 200
+		},
+		unit: {
+			type: String,
+			default: 'upx'
+		},
+		show: {
+			type: Boolean,
+			default: true
+		},
+		val: {
+			type: String,
+			default: ''
+		},
+		background: {
+			type: String,
+			default: '#ffffff'
+		},
+		foreground: {
+			type: String,
+			default: '#000000'
+		},
+		pdground: {
+			type: String,
+			default: '#000000'
+		},
+		icon: {
+			type: String,
+			default: ''
+		},
+		iconSize: {
+			type: Number,
+			default: 40
+		},
+		lv: {
+			type: Number,
+			default: 3
+		},
+		onval: {
+			type: Boolean,
+			default: false
+		},
+		loadMake: {
+			type: Boolean,
+			default: false
+		},
+		usingComponents: {
+			type: Boolean,
+			default: true
+		},
+		showLoading: {
+			type: Boolean,
+			default: true
+		},
+		loadingText: {
+			type: String,
+			default: '二维码生成中'
+		},
+	},
+	data() {
+		return {
+			result: '',
+		}
+	},
+	methods: {
+		_makeCode() {
+			let that = this
+			if (!this._empty(this.val)) {
+				qrcode = new QRCode({
+					context: that, // 上下文环境
+					canvasId:that.cid, // canvas-id
+					usingComponents: that.usingComponents, // 是否是自定义组件
+					showLoading: that.showLoading, // 是否显示loading
+					loadingText: that.loadingText, // loading文字
+					text: that.val, // 生成内容
+					size: that.cpSize, // 二维码大小
+					background: that.background, // 背景色
+					foreground: that.foreground, // 前景色
+					pdground: that.pdground, // 定位角点颜色
+					correctLevel: that.lv, // 容错级别
+					image: that.icon, // 二维码图标
+					imageSize: that.iconSize,// 二维码图标大小
+					cbResult: function (res) { // 生成二维码的回调
+						that._result(res)
+					},
+				});
+			} else {
+				uni.showToast({
+					title: '二维码内容不能为空',
+					icon: 'none',
+					duration: 2000
+				});
+			}
+		},
+		_clearCode() {
+			this._result('')
+			qrcode.clear()
+		},
+		_saveCode() {
+			let that = this;
+			if (this.result != "") {
+				uni.saveImageToPhotosAlbum({
+					filePath: that.result,
+					success: function () {
+						uni.showToast({
+							title: '二维码保存成功',
+							icon: 'success',
+							duration: 2000
+						});
+					}
+				});
+			}
+		},
+		_result(res) {
+			this.result = res;
+			this.$emit('result', res)
+		},
+		_empty(v) {
+			let tp = typeof v,
+				rt = false;
+			if (tp == "number" && String(v) == "") {
+				rt = true
+			} else if (tp == "undefined") {
+				rt = true
+			} else if (tp == "object") {
+				if (JSON.stringify(v) == "{}" || JSON.stringify(v) == "[]" || v == null) rt = true
+			} else if (tp == "string") {
+				if (v == "" || v == "undefined" || v == "null" || v == "{}" || v == "[]") rt = true
+			} else if (tp == "function") {
+				rt = false
+			}
+			return rt
+		}
+	},
+	watch: {
+		size: function (n, o) {
+			if (n != o && !this._empty(n)) {
+				this.cSize = n
+				if (!this._empty(this.val)) {
+					setTimeout(() => {
+						this._makeCode()
+					}, 100);
+				}
+			}
+		},
+		val: function (n, o) {
+			if (this.onval) {
+				if (n != o && !this._empty(n)) {
+					setTimeout(() => {
+						this._makeCode()
+					}, 0);
+				}
+			}
+		}
+	},
+	computed: {
+		cpSize() {
+			if(this.unit == "upx"){
+				return uni.upx2px(this.size)
+			}else{
+				return this.size
+			}
+		}
+	},
+	mounted: function () {
+		if (this.loadMake) {
+			if (!this._empty(this.val)) {
+				setTimeout(() => {
+					this._makeCode()
+				}, 0);
+			}
+		}
+	},
+}
+</script>
+<style>
+.tki-qrcode {
+  position: relative;
+}
+.tki-qrcode-canvas {
+  position: fixed;
+  top: -99999upx;
+  left: -99999upx;
+  z-index: -99999;
+}
+</style>

+ 10265 - 0
jxtxkj/components/wangding-pickerAddress/data.js

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

+ 103 - 0
jxtxkj/components/wangding-pickerAddress/wangding-pickerAddress.vue

@@ -0,0 +1,103 @@
+<template>
+	<picker @change="bindPickerChange" @columnchange="columnchange" :range="array" range-key="name" :value="value" mode="multiSelector">
+		<slot></slot>
+	</picker>
+</template>
+
+<script>
+	import AllAddress from './data.js'
+	let selectVal = ['','','']
+	
+	export default {
+		data() {
+			return{
+				value: [0,0,0],
+				array: [],
+				index: 0
+			}
+		},
+		created() {
+			this.initSelect()
+		},
+		methods:{
+			// 初始化地址选项
+			initSelect() {
+				this.updateSourceDate() // 更新源数据
+				.updateAddressDate() // 更新结果数据
+				.$forceUpdate()  // 触发双向绑定
+			},
+			// 地址控件改变控件
+			columnchange(d) {
+				this.updateSelectIndex(d.detail.column, d.detail.value) // 更新选择索引
+				.updateSourceDate() // 更新源数据
+				.updateAddressDate() // 更新结果数据
+				.$forceUpdate()  // 触发双向绑定
+			},
+			
+			/**
+			 * 更新源数据
+			 * */
+			updateSourceDate() {
+				this.array = []
+				this.array[0] = AllAddress.map(obj => {
+					return {
+						name: obj.provinceName
+					}
+				})
+				this.array[1] = AllAddress[this.value[0]].city.map(obj => {
+					return {
+						name: obj.cityName
+					}
+				})
+				this.array[2] = AllAddress[this.value[0]].city[this.value[1]].county.map(obj => { 
+					return {
+						name: obj.countyName
+					}
+				})
+				return this
+			},
+			
+			/**
+			 * 更新索引
+			 * */
+			updateSelectIndex(column, value){
+				let arr = JSON.parse(JSON.stringify(this.value)) 
+				arr[column] = value
+				if(column === 0 ) {
+					arr[1] = 0
+					arr[2] = 0
+				}
+				if(column === 1 ) {
+					arr[2] = 0
+				}
+				this.value = arr
+				return this
+			},
+			
+			/**
+			 * 更新结果数据 
+			 * */
+			updateAddressDate() {
+				selectVal[0] = this.array[0][this.value[0]].name
+				selectVal[1] = this.array[1][this.value[1]].name 
+				selectVal[2] = this.array[2][this.value[2]].name 
+				return this
+			},
+			
+			/**
+			 * 点击确定
+			 * */
+			bindPickerChange(e) {
+				this.$emit('change', {
+					index: this.value,
+					data: selectVal
+				})
+				return this
+			}
+			
+		}
+	}
+</script>
+
+<style>
+</style>

+ 20 - 0
jxtxkj/index.html

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+  <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>

+ 24 - 0
jxtxkj/main.js

@@ -0,0 +1,24 @@
+import App from './App'
+
+// #ifndef VUE3
+import Vue from 'vue'
+import uView from "uview-ui";
+Vue.use(uView);
+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
+

+ 75 - 0
jxtxkj/manifest.json

@@ -0,0 +1,75 @@
+{
+    "name" : "jxtxkj",
+    "appid" : "__UNI__2F1C202",
+    "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" : {
+                "payment" : {},
+                "share" : {}
+            }
+        }
+    },
+    /* 快应用特有相关 */
+    "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" : "2"
+}

+ 15 - 0
jxtxkj/node_modules/.package-lock.json

@@ -0,0 +1,15 @@
+{
+  "name": "jxtxkj",
+  "lockfileVersion": 2,
+  "requires": true,
+  "packages": {
+    "node_modules/uview-ui": {
+      "version": "2.0.31",
+      "resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.31.tgz",
+      "integrity": "sha512-I/0fGuvtiKHH/mBb864SGYk+SJ7WaF32tsBgYgeBOsxlUp+Th+Ac2tgz2cTvsQJl6eZYWsKZ3ixiSXCAcxZ8Sw==",
+      "engines": {
+        "HBuilderX": "^3.1.0"
+      }
+    }
+  }
+}

+ 21 - 0
jxtxkj/node_modules/uview-ui/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 www.uviewui.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 104 - 0
jxtxkj/node_modules/uview-ui/README.md

@@ -0,0 +1,104 @@
+<p align="center">
+    <img alt="logo" src="https://uviewui.com/common/logo.png" width="120" height="120" style="margin-bottom: 10px;">
+</p>
+<h3 align="center" style="margin: 30px 0 30px;font-weight: bold;font-size:40px;">uView</h3>
+<h3 align="center">多平台快速开发的UI框架</h3>
+
+## 说明
+
+uView UI,是[uni-app](https://uniapp.dcloud.io/)生态优秀的UI框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水
+
+## 特性
+
+- 兼容安卓,iOS,微信小程序,H5,QQ小程序,百度小程序,支付宝小程序,头条小程序
+- 60+精选组件,功能丰富,多端兼容,让您快速集成,开箱即用
+- 众多贴心的JS利器,让您飞镖在手,召之即来,百步穿杨
+- 众多的常用页面和布局,让您专注逻辑,事半功倍
+- 详尽的文档支持,现代化的演示效果
+- 按需引入,精简打包体积
+
+
+## 安装
+
+```bash
+# npm方式安装,插件市场导入无需执行此命令
+npm i uview-ui
+```
+
+## 快速上手
+
+1. `main.js`引入uView库
+```js
+// main.js
+import uView from 'uview-ui';
+Vue.use(uView);
+```
+
+2. `App.vue`引入基础样式(注意style标签需声明scss属性支持)
+```css
+/* App.vue */
+<style lang="scss">
+@import "uview-ui/index.scss";
+</style>
+```
+
+3. `uni.scss`引入全局scss变量文件
+```css
+/* uni.scss */
+@import "uview-ui/theme.scss";
+```
+
+4. `pages.json`配置easycom规则(按需引入)
+
+```js
+// pages.json
+{
+	"easycom": {
+		// npm安装的方式不需要前面的"@/",下载安装的方式需要"@/"
+		// npm安装方式
+		"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
+		// 下载安装方式
+		// "^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
+	},
+	// 此为本身已有的内容
+	"pages": [
+		// ......
+	]
+}
+```
+
+请通过[快速上手](https://www.uviewui.com/components/quickstart.html)了解更详细的内容 
+
+## 使用方法
+配置easycom规则后,自动按需引入,无需`import`组件,直接引用即可。
+
+```html
+<template>
+	<u-button text="按钮"></u-button>
+</template>
+```
+
+请通过[快速上手](https://www.uviewui.com/components/quickstart.html)了解更详细的内容 
+
+## 链接
+
+- [官方文档](https://www.uviewui.com/)
+- [更新日志](https://www.www.uviewui.com/components/changelog.html)
+- [升级指南](https://www.uviewui.com/components/changelog.html)
+- [关于我们](https://www.uviewui.com/cooperation/about.html)
+
+## 预览
+
+您可以通过**微信**扫码,查看最佳的演示效果。
+<br>
+<br>
+<img src="https://uviewui.com/common/weixin_mini_qrcode.png" width="220" height="220" >
+
+## 捐赠uView的研发
+
+uView文档和源码全部开源免费,如果您认为uView帮到了您的开发工作,您可以捐赠uView的研发工作,捐赠无门槛,哪怕是一杯可乐也好(相信这比打赏主播更有意义)。
+
+<img src="https://uviewui.com/common/alipay.png" width="220" ><img style="margin-left: 100px;" src="https://uviewui.com/common/wechat.png" width="220" >
+
+## 版权信息
+uView遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议,意味着您无需支付任何费用,也无需授权,即可将uView应用到您的产品中。

+ 326 - 0
jxtxkj/node_modules/uview-ui/changelog.md

@@ -0,0 +1,326 @@
+## 2.0.31(2022-04-19)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复`upload`在`vue`页面上传成功后没有成功标志的问题
+2. 解决演示项目中微信小程序模拟上传图片一直出于上传中问题
+3. 修复`u-code-input`组件在`nvue`页面编译到`app`平台上光标异常问题(`app`去除此功能)
+4. 修复`actionSheet`组件标题关闭按钮点击事件名称错误的问题
+5. 其他修复
+## 2.0.30(2022-04-04)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. `u-rate`增加`readonly`属性
+2. `tabs`滑块支持设置背景图片
+3. 修复`u-subsection` `mode`为`subsection`时,滑块样式不正确的问题
+4. `u-code-input`添加光标效果动画
+5. 修复`popup`的`open`事件不触发
+6. 修复`u-flex-column`无效的问题
+7. 修复`u-datetime-picker`索引在特定场合异常问题
+8. 修复`u-datetime-picker`最小时间字符串模板错误问题
+9. `u-swiper`添加`m3u8`验证
+10. `u-swiper`修改判断image和video逻辑
+11. 修复`swiper`无法使用本地图片问题,增加`type`参数
+12. 修复`u-row-notice`格式错误问题
+13. 修复`u-switch`组件当`unit`为`rpx`时,`nodeStyle`消失的问题
+14. 修复`datetime-picker`组件`showToolbar`与`visibleItemCount`属性无效的问题
+15. 修复`upload`组件条件编译位置判断错误,导致`previewImage`属性设置为`false`时,整个组件都会被隐藏的问题
+16. 修复`u-checkbox-group`设置`shape`属性无效的问题
+17. 修复`u-upload`的`capture`传入字符串的时候不生效的问题
+18. 修复`u-action-sheet`组件,关闭事件逻辑错误的问题
+19. 修复`u-list`触顶事件的触发错误的问题
+20. 修复`u-text`只有手机号可拨打的问题
+21. 修复`u-textarea`不能换行的问题
+22. 其他修复
+## 2.0.29(2022-03-13)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复`u--text`组件设置`decoration`属性未生效的问题
+2. 修复`u-datetime-picker`使用`formatter`后返回值不正确
+3. 修复`u-datetime-picker` `intercept` 可能为undefined
+4. 修复已设置单位 uni..config.unit = 'rpx'时,线型指示器 `transform` 的位置翻倍,导致指示器超出宽度
+5. 修复mixin中bem方法生成的类名在支付宝和字节小程序中失效
+6. 修复默认值传值为空的时候,打开`u-datetime-picker`报错,不能选中第一列时间的bug
+7. 修复`u-datetime-picker`使用`formatter`后返回值不正确
+8. 修复`u-image`组件`loading`无效果的问题
+9. 修复`config.unit`属性设为`rpx`时,导航栏占用高度不足导致塌陷的问题
+10. 修复`u-datetime-picker`组件`itemHeight`无效问题
+11. 其他修复
+## 2.0.28(2022-02-22)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. search组件新增searchIconSize属性
+2. 兼容Safari/Webkit中传入时间格式如2022-02-17 12:00:56
+3. 修复text value.js 判断日期出format错误问题
+4. priceFormat格式化金额出现精度错误
+5. priceFormat在部分情况下出现精度损失问题
+6. 优化表单rules提示
+7. 修复avatar组件src为空时,展示状态不对
+8. 其他修复
+## 2.0.27(2022-01-28)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1.样式修复
+## 2.0.26(2022-01-28)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1.样式修复
+## 2.0.25(2022-01-27)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复text组件mode=price时,可能会导致精度错误的问题
+2. 添加$u.setConfig()方法,可设置uView内置的config, props, zIndex, color属性,详见:[修改uView内置配置方案](https://uviewui.com/components/setting.html#%E9%BB%98%E8%AE%A4%E5%8D%95%E4%BD%8D%E9%85%8D%E7%BD%AE)
+3. 优化form组件在errorType=toast时,如果输入错误页面会有抖动的问题
+4. 修复$u.addUnit()对配置默认单位可能无效的问题
+## 2.0.24(2022-01-25)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复swiper在current指定非0时缩放有误
+2. 修复u-icon添加stop属性的时候报错
+3. 优化遗留的通过正则判断rpx单位的问题
+4. 优化Layout布局 vue使用gutter时,会超出固定区域
+5. 优化search组件高度单位问题(rpx -> px)
+6. 修复u-image slot 加载和错误的图片失去了高度
+7. 修复u-index-list中footer插槽与header插槽存在性判断错误
+8. 修复部分机型下u-popup关闭时会闪烁
+9. 修复u-image在nvue-app下失去宽高
+10. 修复u-popup运行报错
+11. 修复u-tooltip报错
+12. 修复box-sizing在app下的警告
+13. 修复u-navbar在小程序中报运行时错误
+14. 其他修复
+## 2.0.23(2022-01-24)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复image组件在hx3.3.9的nvue下可能会显示异常的问题
+2. 修复col组件gutter参数带rpx单位处理不正确的问题
+3. 修复text组件单行时无法显示省略号的问题
+4. navbar添加titleStyle参数
+5. 升级到hx3.3.9可消除nvue下控制台样式警告的问题
+## 2.0.22(2022-01-19)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. $u.page()方法优化,避免在特殊场景可能报错的问题
+2. picker组件添加immediateChange参数
+3. 新增$u.pages()方法
+## 2.0.21(2022-01-19)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 优化:form组件在用户设置rules的时候提示用户model必传
+2. 优化遗留的通过正则判断rpx单位的问题
+3. 修复微信小程序环境中tabbar组件开启safeAreaInsetBottom属性后,placeholder高度填充不正确
+4. 修复swiper在current指定非0时缩放有误
+5. 修复u-icon添加stop属性的时候报错
+6. 修复upload组件在accept=all的时候没有作用
+7. 修复在text组件mode为phone时call属性无效的问题
+8. 处理u-form clearValidate方法
+9. 其他修复
+## 2.0.20(2022-01-14)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复calendar默认会选择一个日期,如果直接点确定的话,无法取到值的问题
+2. 修复Slider缺少disabled props 还有注释
+3. 修复u-notice-bar点击事件无法拿到index索引值的问题
+4. 修复u-collapse-item在vue文件下,app端自定义插槽不生效的问题
+5. 优化头像为空时显示默认头像 
+6. 修复图片地址赋值后判断加载状态为完成问题
+7. 修复日历滚动到默认日期月份区域
+8. search组件暴露点击左边icon事件
+9. 修复u-form clearValidate方法不生效
+10. upload h5端增加返回文件参数(文件的name参数)
+11. 处理upload选择文件后url为blob类型无法预览的问题
+12. u-code-input 修复输入框没有往左移出一半屏幕
+13. 修复Upload上传 disabled为true时,控制台报hoverClass类型错误
+14. 临时处理ios app下grid点击坍塌问题
+15. 其他修复
+## 2.0.19(2021-12-29)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 优化微信小程序包体积可在微信中预览,请升级HbuilderX3.3.4,同时在“运行->运行到小程序模拟器”中勾选“运行时是否压缩代码”
+2. 优化微信小程序setData性能,处理某些方法如$u.route()无法在模板中使用的问题
+3. navbar添加autoBack参数
+4. 允许avatar组件的事件冒泡
+5. 修复cell组件报错问题
+6. 其他修复
+## 2.0.18(2021-12-28)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复app端编译报错问题
+2. 重新处理微信小程序端setData过大的性能问题
+3. 修复边框问题
+4. 修复最大最小月份不大于0则没有数据出现的问题
+5. 修复SwipeAction微信小程序端无法上下滑动问题
+6. 修复input的placeholder在小程序端默认显示为true问题
+7. 修复divider组件click事件无效问题
+8. 修复u-code-input maxlength 属性值为 String 类型时显示异常
+9. 修复当 grid只有 1到2时 在小程序端algin设置无效的问题
+10. 处理form-item的label为top时,取消错误提示的左边距
+11. 其他修复
+## 2.0.17(2021-12-26)
+## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 解决HBuilderX3.3.3.20211225版本导致的样式问题
+2. calendar日历添加monthNum参数
+3. navbar添加center slot
+## 2.0.16(2021-12-25)
+## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 解决微信小程序setData性能问题
+2. 修复count-down组件change事件不触发问题
+## 2.0.15(2021-12-21)
+## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复Cell单元格titleWidth无效
+2. 修复cheakbox组件ischecked不更新
+3. 修复keyboard是否显示"."按键默认值问题
+4. 修复number-keyboard是否显示键盘的"."符号问题
+5. 修复Input输入框 readonly无效
+6. 修复u-avatar 导致打包app、H5时候报错问题
+7. 修复Upload上传deletable无效
+8. 修复upload当设置maxSize时无效的问题
+9. 修复tabs lineWidth传入带单位的字符串的时候偏移量计算错误问题
+10. 修复rate组件在有padding的view内,显示的星星位置和可触摸区域不匹配,无法正常选中星星
+## 2.0.13(2021-12-14)
+## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复配置默认单位为rpx可能会导致自定义导航栏高度异常的问题
+## 2.0.12(2021-12-14)
+## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复tabs组件在vue环境下划线消失的问题
+2. 修复upload组件在安卓小程序无法选择视频的问题
+3. 添加uni.$u.config.unit配置,用于配置参数默认单位,详见:[默认单位配置](https://www.uviewui.com/components/setting.html#%E9%BB%98%E8%AE%A4%E5%8D%95%E4%BD%8D%E9%85%8D%E7%BD%AE)
+4. 修复textarea组件在没绑定v-model时,字符统计不生效问题
+5. 修复nvue下控制是否出现滚动条失效问题
+## 2.0.11(2021-12-13)
+## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. text组件align参数无效的问题
+2. subsection组件添加keyName参数
+3. upload组件无法判断[Object file]类型的问题
+4. 处理notify层级过低问题
+5. codeInput组件添加disabledDot参数
+6. 处理actionSheet组件round参数无效的问题
+7. calendar组件添加round参数用于控制圆角值
+8. 处理swipeAction组件在vue环境下默认被打开的问题
+9. button组件的throttleTime节流参数无效的问题
+10. 解决u-notify手动关闭方法close()无效的问题
+11. input组件readonly不生效问题
+12. tag组件type参数为info不生效问题
+## 2.0.10(2021-12-08)
+## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复button sendMessagePath属性不生效
+2. 修复DatetimePicker选择器title无效
+3. 修复u-toast设置loading=true不生效
+4. 修复u-text金额模式传0报错
+5. 修复u-toast组件的icon属性配置不生效
+6. button的icon在特殊场景下的颜色优化
+7. IndexList优化,增加#
+## 2.0.9(2021-12-01)
+## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 优化swiper的height支持100%值(仅vue有效),修复嵌入视频时click事件无法触发的问题
+2. 优化tabs组件对list值为空的判断,或者动态变化list时重新计算相关尺寸的问题
+3. 优化datetime-picker组件逻辑,让其后续打开的默认值为上一次的选中值,需要通过v-model绑定值才有效
+4. 修复upload内嵌在其他组件中,选择图片可能不会换行的问题
+## 2.0.8(2021-12-01)
+## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复toast的position参数无效问题
+2. 处理input在ios nvue上无法获得焦点的问题
+3. avatar-group组件添加extraValue参数,让剩余展示数量可手动控制
+4. tabs组件添加keyName参数用于配置从对象中读取的键名
+5. 处理text组件名字脱敏默认配置无效的问题
+6. 处理picker组件item文本太长换行问题
+## 2.0.7(2021-11-30)
+## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复radio和checkbox动态改变v-model无效的问题。
+2. 优化form规则validator在微信小程序用法
+3. 修复backtop组件mode参数在微信小程序无效的问题
+4. 处理Album的previewFullImage属性无效的问题
+5. 处理u-datetime-picker组件mode='time'在选择改变时间时,控制台报错的问题
+## 2.0.6(2021-11-27)
+## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 处理tag组件在vue下边框无效的问题。
+2. 处理popup组件圆角参数可能无效的问题。
+3. 处理tabs组件lineColor参数可能无效的问题。
+4. propgress组件在值很小时,显示异常的问题。
+## 2.0.5(2021-11-25)
+## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. calendar在vue下显示异常问题。 
+2. form组件labelPosition和errorType参数无效的问题
+3. input组件inputAlign无效的问题
+4. 其他一些修复
+## 2.0.4(2021-11-23)
+## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+0. input组件缺失@confirm事件,以及subfix和prefix无效问题
+1. component.scss文件样式在vue下干扰全局布局问题
+2. 修复subsection在vue环境下表现异常的问题
+3. tag组件的bgColor等参数无效的问题
+4. upload组件不换行的问题
+5. 其他的一些修复处理
+## 2.0.3(2021-11-16)
+## [点击加群交流反馈:1129077272](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. uView2.0已实现全面兼容nvue
+2. uView2.0对1.x进行了架构重构,细节和性能都有极大提升
+3. 目前uView2.0为公测阶段,相关细节可能会有变动
+4. 我们写了一份与1.x的对比指南,详见[对比1.x](https://www.uviewui.com/components/diff1.x.html)
+5. 处理modal的confirm回调事件拼写错误问题
+6. 处理input组件@input事件参数错误问题
+7. 其他一些修复
+## 2.0.2(2021-11-16)
+## [点击加群交流反馈:1129077272](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. uView2.0已实现全面兼容nvue
+2. uView2.0对1.x进行了架构重构,细节和性能都有极大提升
+3. 目前uView2.0为公测阶段,相关细节可能会有变动
+4. 我们写了一份与1.x的对比指南,详见[对比1.x](https://www.uviewui.com/components/diff1.x.html)
+5. 修复input组件formatter参数缺失问题
+6. 优化loading-icon组件的scss写法问题,防止不兼容新版本scss
+## 2.0.0(2020-11-15)
+## [点击加群交流反馈:1129077272](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. uView2.0已实现全面兼容nvue
+2. uView2.0对1.x进行了架构重构,细节和性能都有极大提升
+3. 目前uView2.0为公测阶段,相关细节可能会有变动
+4. 我们写了一份与1.x的对比指南,详见[对比1.x](https://www.uviewui.com/components/diff1.x.html)
+5. 修复input组件formatter参数缺失问题
+
+

+ 78 - 0
jxtxkj/node_modules/uview-ui/components/u--form/u--form.vue

@@ -0,0 +1,78 @@
+<template>
+	<uvForm
+		ref="uForm"
+		:model="model"
+		:rules="rules"
+		:errorType="errorType"
+		:borderBottom="borderBottom"
+		:labelPosition="labelPosition"
+		:labelWidth="labelWidth"
+		:labelAlign="labelAlign"
+		:labelStyle="labelStyle"
+		:customStyle="customStyle"
+	>
+		<slot />
+	</uvForm>
+</template>
+
+<script>
+	/**
+	 * 此组件存在的理由是,在nvue下,u-form被uni-app官方占用了,u-form在nvue中相当于form组件
+	 * 所以在nvue下,取名为u--form,内部其实还是u-form.vue,只不过做一层中转
+	 */
+	import uvForm from '../u-form/u-form.vue';
+	import props from '../u-form/props.js'
+	export default {
+		// #ifdef MP-WEIXIN
+		name: 'u-form',
+		// #endif
+		// #ifndef MP-WEIXIN
+		name: 'u--form',
+		// #endif
+		mixins: [uni.$u.mpMixin, props, uni.$u.mixin],
+		components: {
+			uvForm
+		},
+		created() {
+			this.children = []
+		},
+		methods: {
+			// 手动设置校验的规则,如果规则中有函数的话,微信小程序中会过滤掉,所以只能手动调用设置规则
+			setRules(rules) {
+				this.$refs.uForm.setRules(rules)
+			},
+			validate() {
+				/**
+				 * 在微信小程序中,通过this.$parent拿到的父组件是u--form,而不是其内嵌的u-form
+				 * 导致在u-form组件中,拿不到对应的children数组,从而校验无效,所以这里每次调用u-form组件中的
+				 * 对应方法的时候,在小程序中都先将u--form的children赋值给u-form中的children
+				 */
+				// #ifdef MP-WEIXIN
+				this.setMpData()
+				// #endif
+				return this.$refs.uForm.validate()
+			},
+			validateField(value, callback) {
+				// #ifdef MP-WEIXIN
+				this.setMpData()
+				// #endif
+				return this.$refs.uForm.validateField(value, callback)
+			},
+			resetFields() {
+				// #ifdef MP-WEIXIN
+				this.setMpData()
+				// #endif
+				return this.$refs.uForm.resetFields()
+			},
+			clearValidate(props) {
+				// #ifdef MP-WEIXIN
+				this.setMpData()
+				// #endif
+				return this.$refs.uForm.clearValidate(props)
+			},
+			setMpData() {
+				this.$refs.uForm.children = this.children
+			}
+		},
+	}
+</script>

+ 47 - 0
jxtxkj/node_modules/uview-ui/components/u--image/u--image.vue

@@ -0,0 +1,47 @@
+<template>
+	<uvImage 
+		:src="src"
+		:mode="mode"
+		:width="width"
+		:height="height"
+		:shape="shape"
+		:radius="radius"
+		:lazyLoad="lazyLoad"
+		:showMenuByLongpress="showMenuByLongpress"
+		:loadingIcon="loadingIcon"
+		:errorIcon="errorIcon"
+		:showLoading="showLoading"
+		:showError="showError"
+		:fade="fade"
+		:webp="webp"
+		:duration="duration"
+		:bgColor="bgColor"
+		:customStyle="customStyle"
+		@click="$emit('click')"
+		@error="$emit('error')"
+		@load="$emit('load')"
+	>
+		<template v-slot:loading>
+			<slot name="loading"></slot>
+		</template>
+		<template v-slot:error>
+			<slot name="error"></slot>
+		</template>
+	</uvImage>
+</template>
+
+<script>
+	/**
+	 * 此组件存在的理由是,在nvue下,u-image被uni-app官方占用了,u-image在nvue中相当于image组件
+	 * 所以在nvue下,取名为u--image,内部其实还是u-iamge.vue,只不过做一层中转
+	 */
+	import uvImage from '../u-image/u-image.vue';
+	import props from '../u-image/props.js';
+	export default {
+		name: 'u--image',
+		mixins: [uni.$u.mpMixin, props, uni.$u.mixin],
+		components: {
+			uvImage
+		},
+	}
+</script>

+ 72 - 0
jxtxkj/node_modules/uview-ui/components/u--input/u--input.vue

@@ -0,0 +1,72 @@
+<template>
+	<uvInput 
+		:value="value"
+		:type="type"
+		:fixed="fixed"
+		:disabled="disabled"
+		:disabledColor="disabledColor"
+		:clearable="clearable"
+		:password="password"
+		:maxlength="maxlength"
+		:placeholder="placeholder"
+		:placeholderClass="placeholderClass"
+		:placeholderStyle="placeholderStyle"
+		:showWordLimit="showWordLimit"
+		:confirmType="confirmType"
+		:confirmHold="confirmHold"
+		:holdKeyboard="holdKeyboard"
+		:focus="focus"
+		:autoBlur="autoBlur"
+		:disableDefaultPadding="disableDefaultPadding"
+		:cursor="cursor"
+		:cursorSpacing="cursorSpacing"
+		:selectionStart="selectionStart"
+		:selectionEnd="selectionEnd"
+		:adjustPosition="adjustPosition"
+		:inputAlign="inputAlign"
+		:fontSize="fontSize"
+		:color="color"
+		:prefixIcon="prefixIcon"
+		:suffixIcon="suffixIcon"
+		:suffixIconStyle="suffixIconStyle"
+		:prefixIconStyle="prefixIconStyle"
+		:border="border"
+		:readonly="readonly"
+		:shape="shape"
+		:customStyle="customStyle"
+		:formatter="formatter"
+		@focus="$emit('focus')"
+		@blur="$emit('blur')"
+		@keyboardheightchange="$emit('keyboardheightchange')"
+		@change="e => $emit('change', e)"
+		@input="e => $emit('input', e)"
+		@confirm="e => $emit('confirm', e)"
+		@clear="$emit('clear')"
+		@click="$emit('click')"
+	>
+		<!-- #ifdef MP -->
+		<slot name="prefix"></slot>
+		<slot name="suffix"></slot>
+		<!-- #endif -->
+		<!-- #ifndef MP -->
+		<slot name="prefix" slot="prefix"></slot>
+		<slot name="suffix" slot="suffix"></slot>
+		<!-- #endif -->
+	</uvInput>
+</template>
+
+<script>
+	/**
+	 * 此组件存在的理由是,在nvue下,u-input被uni-app官方占用了,u-input在nvue中相当于input组件
+	 * 所以在nvue下,取名为u--input,内部其实还是u-input.vue,只不过做一层中转
+	 */
+	import uvInput from '../u-input/u-input.vue';
+	import props from '../u-input/props.js'
+	export default {
+		name: 'u--input',
+		mixins: [uni.$u.mpMixin, props, uni.$u.mixin],
+		components: {
+			uvInput
+		},
+	}
+</script>

+ 44 - 0
jxtxkj/node_modules/uview-ui/components/u--text/u--text.vue

@@ -0,0 +1,44 @@
+<template>
+    <uvText
+        :type="type"
+        :show="show"
+        :text="text"
+        :prefixIcon="prefixIcon"
+        :suffixIcon="suffixIcon"
+        :mode="mode"
+        :href="href"
+        :format="format"
+        :call="call"
+        :openType="openType"
+        :bold="bold"
+        :block="block"
+        :lines="lines"
+        :color="color"
+		:decoration="decoration"
+        :size="size"
+        :iconStyle="iconStyle"
+        :margin="margin"
+        :lineHeight="lineHeight"
+        :align="align"
+        :wordWrap="wordWrap"
+        :customStyle="customStyle"
+        @click="$emit('click')"
+    ></uvText>
+</template>
+
+<script>
+/**
+ * 此组件存在的理由是,在nvue下,u-text被uni-app官方占用了,u-text在nvue中相当于input组件
+ * 所以在nvue下,取名为u--input,内部其实还是u-text.vue,只不过做一层中转
+ * 不使用v-bind="$attrs",而是分开独立写传参,是因为微信小程序不支持此写法
+ */
+import uvText from "../u-text/u-text.vue";
+import props from "../u-text/props.js";
+export default {
+    name: "u--text",
+    mixins: [uni.$u.mpMixin, props, uni.$u.mixin],
+    components: {
+        uvText,
+    },
+};
+</script>

+ 47 - 0
jxtxkj/node_modules/uview-ui/components/u--textarea/u--textarea.vue

@@ -0,0 +1,47 @@
+<template>
+	<uvTextarea
+		:value="value"
+		:placeholder="placeholder"
+		:height="height"
+		:confirmType="confirmType"
+		:disabled="disabled"
+		:count="count"
+		:focus="focus"
+		:autoHeight="autoHeight"
+		:fixed="fixed"
+		:cursorSpacing="cursorSpacing"
+		:cursor="cursor"
+		:showConfirmBar="showConfirmBar"
+		:selectionStart="selectionStart"
+		:selectionEnd="selectionEnd"
+		:adjustPosition="adjustPosition"
+		:disableDefaultPadding="disableDefaultPadding"
+		:holdKeyboard="holdKeyboard"
+		:maxlength="maxlength"
+		:border="border"
+		:customStyle="customStyle"
+		:formatter="formatter"
+		@focus="e => $emit('focus')"
+		@blur="e => $emit('blur')"
+		@linechange="e => $emit('linechange', e)"
+		@confirm="e => $emit('confirm')"
+		@input="e => $emit('input', e)"
+		@keyboardheightchange="e => $emit('keyboardheightchange')"
+	></uvTextarea>
+</template>
+
+<script>
+	/**
+	 * 此组件存在的理由是,在nvue下,u--textarea被uni-app官方占用了,u-textarea在nvue中相当于textarea组件
+	 * 所以在nvue下,取名为u--textarea,内部其实还是u-textarea.vue,只不过做一层中转
+	 */
+	import uvTextarea from '../u-textarea/u-textarea.vue';
+	import props from '../u-textarea/props.js'
+	export default {
+		name: 'u--textarea',
+		mixins: [uni.$u.mpMixin, props, uni.$u.mixin],
+		components: {
+			uvTextarea
+		},
+	}
+</script>

+ 54 - 0
jxtxkj/node_modules/uview-ui/components/u-action-sheet/props.js

@@ -0,0 +1,54 @@
+export default {
+    props: {
+        // 操作菜单是否展示 (默认false)
+        show: {
+            type: Boolean,
+            default: uni.$u.props.actionSheet.show
+        },
+        // 标题
+        title: {
+            type: String,
+            default: uni.$u.props.actionSheet.title
+        },
+        // 选项上方的描述信息
+        description: {
+            type: String,
+            default: uni.$u.props.actionSheet.description
+        },
+        // 数据
+        actions: {
+            type: Array,
+            default: uni.$u.props.actionSheet.actions
+        },
+        // 取消按钮的文字,不为空时显示按钮
+        cancelText: {
+            type: String,
+            default: uni.$u.props.actionSheet.cancelText
+        },
+        // 点击某个菜单项时是否关闭弹窗
+        closeOnClickAction: {
+            type: Boolean,
+            default: uni.$u.props.actionSheet.closeOnClickAction
+        },
+        // 处理底部安全区(默认true)
+        safeAreaInsetBottom: {
+            type: Boolean,
+            default: uni.$u.props.actionSheet.safeAreaInsetBottom
+        },
+        // 小程序的打开方式
+        openType: {
+            type: String,
+            default: uni.$u.props.actionSheet.openType
+        },
+        // 点击遮罩是否允许关闭 (默认true)
+        closeOnClickOverlay: {
+            type: Boolean,
+            default: uni.$u.props.actionSheet.closeOnClickOverlay
+        },
+        // 圆角值
+        round: {
+            type: [Boolean, String, Number],
+            default: uni.$u.props.actionSheet.round
+        }
+    }
+}

+ 278 - 0
jxtxkj/node_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue

@@ -0,0 +1,278 @@
+
+<template>
+	<u-popup
+	    :show="show"
+	    mode="bottom"
+	    @close="closeHandler"
+	    :safeAreaInsetBottom="safeAreaInsetBottom"
+	    :round="round"
+	>
+		<view class="u-action-sheet">
+			<view
+			    class="u-action-sheet__header"
+			    v-if="title"
+			>
+				<text class="u-action-sheet__header__title u-line-1">{{title}}</text>
+				<view
+				    class="u-action-sheet__header__icon-wrap"
+				    @tap.stop="cancel"
+				>
+					<u-icon
+					    name="close"
+					    size="17"
+					    color="#c8c9cc"
+					    bold
+					></u-icon>
+				</view>
+			</view>
+			<text
+			    class="u-action-sheet__description"
+				:style="[{
+					marginTop: `${title && description ? 0 : '18px'}`
+				}]"
+			    v-if="description"
+			>{{description}}</text>
+			<slot>
+				<u-line v-if="description"></u-line>
+				<view class="u-action-sheet__item-wrap">
+					<template v-for="(item, index) in actions">
+						<!-- #ifdef MP -->
+						<button
+						    :key="index"
+						    class="u-reset-button"
+						    :openType="item.openType"
+						    @getuserinfo="onGetUserInfo"
+						    @contact="onContact"
+						    @getphonenumber="onGetPhoneNumber"
+						    @error="onError"
+						    @launchapp="onLaunchApp"
+						    @opensetting="onOpenSetting"
+						    :lang="lang"
+						    :session-from="sessionFrom"
+						    :send-message-title="sendMessageTitle"
+						    :send-message-path="sendMessagePath"
+						    :send-message-img="sendMessageImg"
+						    :show-message-card="showMessageCard"
+						    :app-parameter="appParameter"
+						    @tap="selectHandler(index)"
+						    :hover-class="!item.disabled && !item.loading ? 'u-action-sheet--hover' : ''"
+						>
+							<!-- #endif -->
+							<view
+							    class="u-action-sheet__item-wrap__item"
+							    @tap.stop="selectHandler(index)"
+							    :hover-class="!item.disabled && !item.loading ? 'u-action-sheet--hover' : ''"
+							    :hover-stay-time="150"
+							>
+								<template v-if="!item.loading">
+									<text
+									    class="u-action-sheet__item-wrap__item__name"
+									    :style="[itemStyle(index)]"
+									>{{ item.name }}</text>
+									<text
+									    v-if="item.subname"
+									    class="u-action-sheet__item-wrap__item__subname"
+									>{{ item.subname }}</text>
+								</template>
+								<u-loading-icon
+								    v-else
+								    custom-class="van-action-sheet__loading"
+								    size="18"
+								    mode="circle"
+								/>
+							</view>
+							<!-- #ifdef MP -->
+						</button>
+						<!-- #endif -->
+						<u-line v-if="index !== actions.length - 1"></u-line>
+					</template>
+				</view>
+			</slot>
+			<u-gap
+			    bgColor="#eaeaec"
+			    height="6"
+			    v-if="cancelText"
+			></u-gap>
+			<view hover-class="u-action-sheet--hover">
+				<text
+				    @touchmove.stop.prevent
+				    :hover-stay-time="150"
+				    v-if="cancelText"
+				    class="u-action-sheet__cancel-text"
+				    @tap="cancel"
+				>{{cancelText}}</text>
+			</view>
+		</view>
+	</u-popup>
+</template>
+
+<script>
+	import openType from '../../libs/mixin/openType'
+	import button from '../../libs/mixin/button'
+	import props from './props.js';
+	/**
+	 * ActionSheet 操作菜单
+	 * @description 本组件用于从底部弹出一个操作菜单,供用户选择并返回结果。本组件功能类似于uni的uni.showActionSheetAPI,配置更加灵活,所有平台都表现一致。
+	 * @tutorial https://www.uviewui.com/components/actionSheet.html
+	 * 
+	 * @property {Boolean}			show				操作菜单是否展示 (默认 false )
+	 * @property {String}			title				操作菜单标题
+	 * @property {String}			description			选项上方的描述信息
+	 * @property {Array<Object>}	actions				按钮的文字数组,见官方文档示例
+	 * @property {String}			cancelText			取消按钮的提示文字,不为空时显示按钮
+	 * @property {Boolean}			closeOnClickAction	点击某个菜单项时是否关闭弹窗 (默认 true )
+	 * @property {Boolean}			safeAreaInsetBottom	处理底部安全区 (默认 true )
+	 * @property {String}			openType			小程序的打开方式 (contact | launchApp | getUserInfo | openSetting |getPhoneNumber |error )
+	 * @property {Boolean}			closeOnClickOverlay	点击遮罩是否允许关闭  (默认 true )
+	 * @property {Number|String}	round				圆角值,默认无圆角  (默认 0 )
+	 * @property {String}			lang				指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文
+	 * @property {String}			sessionFrom			会话来源,openType="contact"时有效
+	 * @property {String}			sendMessageTitle	会话内消息卡片标题,openType="contact"时有效
+	 * @property {String}			sendMessagePath		会话内消息卡片点击跳转小程序路径,openType="contact"时有效
+	 * @property {String}			sendMessageImg		会话内消息卡片图片,openType="contact"时有效
+	 * @property {Boolean}			showMessageCard		是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,用户点击后可以快速发送小程序消息,openType="contact"时有效 (默认 false )
+	 * @property {String}			appParameter		打开 APP 时,向 APP 传递的参数,openType=launchApp 时有效
+	 * 
+	 * @event {Function} select			点击ActionSheet列表项时触发 
+	 * @event {Function} close			点击取消按钮时触发
+	 * @event {Function} getuserinfo	用户点击该按钮时,会返回获取到的用户信息,回调的 detail 数据与 wx.getUserInfo 返回的一致,openType="getUserInfo"时有效
+	 * @event {Function} contact		客服消息回调,openType="contact"时有效
+	 * @event {Function} getphonenumber	获取用户手机号回调,openType="getPhoneNumber"时有效
+	 * @event {Function} error			当使用开放能力时,发生错误的回调,openType="error"时有效
+	 * @event {Function} launchapp		打开 APP 成功的回调,openType="launchApp"时有效
+	 * @event {Function} opensetting	在打开授权设置页后回调,openType="openSetting"时有效
+	 * @example <u-action-sheet :actions="list" :title="title" :show="show"></u-action-sheet>
+	 */
+	export default {
+		name: "u-action-sheet",
+		// 一些props参数和methods方法,通过mixin混入,因为其他文件也会用到
+		mixins: [openType, button, uni.$u.mixin, props],
+		data() {
+			return {
+
+			}
+		},
+		computed: {
+			// 操作项目的样式
+			itemStyle() {
+				return (index) => {
+					let style = {};
+					if (this.actions[index].color) style.color = this.actions[index].color
+					if (this.actions[index].fontSize) style.fontSize = uni.$u.addUnit(this.actions[index].fontSize)
+					// 选项被禁用的样式
+					if (this.actions[index].disabled) style.color = '#c0c4cc'
+					return style;
+				}
+			},
+		},
+		methods: {
+			closeHandler() {
+				// 允许点击遮罩关闭时,才发出close事件
+				if(this.closeOnClickOverlay) {
+					this.$emit('close')
+				}
+			},
+			// 点击取消按钮
+			cancel() {
+				this.$emit('close')
+			},
+			selectHandler(index) {
+				const item = this.actions[index]
+				if (item && !item.disabled && !item.loading) {
+					this.$emit('select', item)
+					if (this.closeOnClickAction) {
+						this.$emit('close')
+					}
+				}
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+	$u-action-sheet-reset-button-width:100% !default;
+	$u-action-sheet-title-font-size: 16px !default;
+	$u-action-sheet-title-padding: 12px 30px !default;
+	$u-action-sheet-title-color: $u-main-color !default;
+	$u-action-sheet-header-icon-wrap-right:15px !default;
+	$u-action-sheet-header-icon-wrap-top:15px !default;
+	$u-action-sheet-description-font-size:13px !default;
+	$u-action-sheet-description-color:14px !default;
+	$u-action-sheet-description-margin: 18px 15px !default;
+	$u-action-sheet-item-wrap-item-padding:15px !default;
+	$u-action-sheet-item-wrap-name-font-size:16px !default;
+	$u-action-sheet-item-wrap-subname-font-size:13px !default;
+	$u-action-sheet-item-wrap-subname-color: #c0c4cc !default;
+	$u-action-sheet-item-wrap-subname-margin-top:10px !default;
+	$u-action-sheet-cancel-text-font-size:16px !default;
+	$u-action-sheet-cancel-text-color:$u-content-color !default;
+	$u-action-sheet-cancel-text-font-size:15px !default;
+	$u-action-sheet-cancel-text-hover-background-color:rgb(242, 243, 245) !default;
+
+	.u-reset-button {
+		width: $u-action-sheet-reset-button-width;
+	}
+
+	.u-action-sheet {
+		text-align: center;
+		&__header {
+			position: relative;
+			padding: $u-action-sheet-title-padding;
+			&__title {
+				font-size: $u-action-sheet-title-font-size;
+				color: $u-action-sheet-title-color;
+				font-weight: bold;
+				text-align: center;
+			}
+
+			&__icon-wrap {
+				position: absolute;
+				right: $u-action-sheet-header-icon-wrap-right;
+				top: $u-action-sheet-header-icon-wrap-top;
+			}
+		}
+
+		&__description {
+			font-size: $u-action-sheet-description-font-size;
+			color: $u-tips-color;
+			margin: $u-action-sheet-description-margin;
+			text-align: center;
+		}
+
+		&__item-wrap {
+
+			&__item {
+				padding: $u-action-sheet-item-wrap-item-padding;
+				@include flex;
+				align-items: center;
+				justify-content: center;
+				flex-direction: column;
+
+				&__name {
+					font-size: $u-action-sheet-item-wrap-name-font-size;
+					color: $u-main-color;
+					text-align: center;
+				}
+
+				&__subname {
+					font-size: $u-action-sheet-item-wrap-subname-font-size;
+					color: $u-action-sheet-item-wrap-subname-color;
+					margin-top: $u-action-sheet-item-wrap-subname-margin-top;
+					text-align: center;
+				}
+			}
+		}
+
+		&__cancel-text {
+			font-size: $u-action-sheet-cancel-text-font-size;
+			color: $u-action-sheet-cancel-text-color;
+			text-align: center;
+			padding: $u-action-sheet-cancel-text-font-size;
+		}
+
+		&--hover {
+			background-color: $u-action-sheet-cancel-text-hover-background-color;
+		}
+	}
+</style>

+ 59 - 0
jxtxkj/node_modules/uview-ui/components/u-album/props.js

@@ -0,0 +1,59 @@
+export default {
+    props: {
+        // 图片地址,Array<String>|Array<Object>形式
+        urls: {
+            type: Array,
+            default: uni.$u.props.album.urls
+        },
+        // 指定从数组的对象元素中读取哪个属性作为图片地址
+        keyName: {
+            type: String,
+            default: uni.$u.props.album.keyName
+        },
+        // 单图时,图片长边的长度
+        singleSize: {
+            type: [String, Number],
+            default: uni.$u.props.album.singleSize
+        },
+        // 多图时,图片边长
+        multipleSize: {
+            type: [String, Number],
+            default: uni.$u.props.album.multipleSize
+        },
+        // 多图时,图片水平和垂直之间的间隔
+        space: {
+            type: [String, Number],
+            default: uni.$u.props.album.space
+        },
+        // 单图时,图片缩放裁剪的模式
+        singleMode: {
+            type: String,
+            default: uni.$u.props.album.singleMode
+        },
+        // 多图时,图片缩放裁剪的模式
+        multipleMode: {
+            type: String,
+            default: uni.$u.props.album.multipleMode
+        },
+        // 最多展示的图片数量,超出时最后一个位置将会显示剩余图片数量
+        maxCount: {
+            type: [String, Number],
+            default: uni.$u.props.album.maxCount
+        },
+        // 是否可以预览图片
+        previewFullImage: {
+            type: Boolean,
+            default: uni.$u.props.album.previewFullImage
+        },
+        // 每行展示图片数量,如设置,singleSize和multipleSize将会无效
+        rowCount: {
+            type: [String, Number],
+            default: uni.$u.props.album.rowCount
+        },
+        // 超出maxCount时是否显示查看更多的提示
+        showMore: {
+            type: Boolean,
+            default: uni.$u.props.album.showMore
+        }
+    }
+}

+ 259 - 0
jxtxkj/node_modules/uview-ui/components/u-album/u-album.vue

@@ -0,0 +1,259 @@
+<template>
+    <view class="u-album">
+        <view
+            class="u-album__row"
+            ref="u-album__row"
+            v-for="(arr, index) in showUrls"
+            :forComputedUse="albumWidth"
+            :key="index"
+        >
+            <view
+                class="u-album__row__wrapper"
+                v-for="(item, index1) in arr"
+                :key="index1"
+                :style="[imageStyle(index + 1, index1 + 1)]"
+                @tap="previewFullImage ? onPreviewTap(getSrc(item)) : ''"
+            >
+                <image
+                    :src="getSrc(item)"
+                    :mode="
+                        urls.length === 1
+                            ? imageHeight > 0
+                                ? singleMode
+                                : 'widthFix'
+                            : multipleMode
+                    "
+                    :style="[
+                        {
+                            width: imageWidth,
+                            height: imageHeight
+                        }
+                    ]"
+                ></image>
+                <view
+                    v-if="
+                        showMore &&
+                        urls.length > rowCount * showUrls.length &&
+                        index === showUrls.length - 1 &&
+                        index1 === showUrls[showUrls.length - 1].length - 1
+                    "
+                    class="u-album__row__wrapper__text"
+                >
+                    <u--text
+                        :text="`+${urls.length - maxCount}`"
+                        color="#fff"
+                        :size="multipleSize * 0.3"
+                        align="center"
+                        customStyle="justify-content: center"
+                    ></u--text>
+                </view>
+            </view>
+        </view>
+    </view>
+</template>
+
+<script>
+import props from './props.js'
+// #ifdef APP-NVUE
+// 由于weex为阿里的KPI业绩考核的产物,所以不支持百分比单位,这里需要通过dom查询组件的宽度
+const dom = uni.requireNativePlugin('dom')
+// #endif
+
+/**
+ * Album 相册
+ * @description 本组件提供一个类似相册的功能,让开发者开发起来更加得心应手。减少重复的模板代码
+ * @tutorial https://www.uviewui.com/components/album.html
+ *
+ * @property {Array}           urls             图片地址列表 Array<String>|Array<Object>形式
+ * @property {String}          keyName          指定从数组的对象元素中读取哪个属性作为图片地址
+ * @property {String | Number} singleSize       单图时,图片长边的长度  (默认 180 )
+ * @property {String | Number} multipleSize     多图时,图片边长 (默认 70 )
+ * @property {String | Number} space            多图时,图片水平和垂直之间的间隔 (默认 6 )
+ * @property {String}          singleMode       单图时,图片缩放裁剪的模式 (默认 'scaleToFill' )
+ * @property {String}          multipleMode     多图时,图片缩放裁剪的模式 (默认 'aspectFill' )
+ * @property {String | Number} maxCount         取消按钮的提示文字 (默认 9 )
+ * @property {Boolean}         previewFullImage 是否可以预览图片 (默认 true )
+ * @property {String | Number} rowCount         每行展示图片数量,如设置,singleSize和multipleSize将会无效	(默认 3 )
+ * @property {Boolean}         showMore         超出maxCount时是否显示查看更多的提示 (默认 true )
+ *
+ * @event    {Function}        albumWidth       某些特殊的情况下,需要让文字与相册的宽度相等,这里事件的形式对外发送  (回调参数 width )
+ * @example <u-album :urls="urls2" @albumWidth="width => albumWidth = width" multipleSize="68" ></u-album>
+ */
+export default {
+    name: 'u-album',
+    mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+    data() {
+        return {
+            // 单图的宽度
+            singleWidth: 0,
+            // 单图的高度
+            singleHeight: 0,
+            // 单图时,如果无法获取图片的尺寸信息,让图片宽度默认为容器的一定百分比
+            singlePercent: 0.6
+        }
+    },
+    watch: {
+        urls: {
+            immediate: true,
+            handler(newVal) {
+                if (newVal.length === 1) {
+                    this.getImageRect()
+                }
+            }
+        }
+    },
+    computed: {
+        imageStyle() {
+            return (index1, index2) => {
+                const { space, rowCount, multipleSize, urls } = this,
+                    { addUnit, addStyle } = uni.$u,
+                    rowLen = this.showUrls.length,
+                    allLen = this.urls.length
+                const style = {
+                    marginRight: addUnit(space),
+                    marginBottom: addUnit(space)
+                }
+                // 如果为最后一行,则每个图片都无需下边框
+                if (index1 === rowLen) style.marginBottom = 0
+                // 每行的最右边一张和总长度的最后一张无需右边框
+                if (
+                    index2 === rowCount ||
+                    (index1 === rowLen &&
+                        index2 === this.showUrls[index1 - 1].length)
+                )
+                    style.marginRight = 0
+                return style
+            }
+        },
+        // 将数组划分为二维数组
+        showUrls() {
+            const arr = []
+            this.urls.map((item, index) => {
+                // 限制最大展示数量
+                if (index + 1 <= this.maxCount) {
+                    // 计算该元素为第几个素组内
+                    const itemIndex = Math.floor(index / this.rowCount)
+                    // 判断对应的索引是否存在
+                    if (!arr[itemIndex]) {
+                        arr[itemIndex] = []
+                    }
+                    arr[itemIndex].push(item)
+                }
+            })
+            return arr
+        },
+        imageWidth() {
+            return uni.$u.addUnit(
+                this.urls.length === 1 ? this.singleWidth : this.multipleSize
+            )
+        },
+        imageHeight() {
+            return uni.$u.addUnit(
+                this.urls.length === 1 ? this.singleHeight : this.multipleSize
+            )
+        },
+        // 此变量无实际用途,仅仅是为了利用computed特性,让其在urls长度等变化时,重新计算图片的宽度
+        // 因为用户在某些特殊的情况下,需要让文字与相册的宽度相等,所以这里事件的形式对外发送
+        albumWidth() {
+            let width = 0
+            if (this.urls.length === 1) {
+                width = this.singleWidth
+            } else {
+                width =
+                    this.showUrls[0].length * this.multipleSize +
+                    this.space * (this.showUrls[0].length - 1)
+            }
+            this.$emit('albumWidth', width)
+            return width
+        }
+    },
+    methods: {
+        // 预览图片
+        onPreviewTap(url) {
+            const urls = this.urls.map((item) => {
+                return this.getSrc(item)
+            })
+            uni.previewImage({
+                current: url,
+                urls
+            })
+        },
+        // 获取图片的路径
+        getSrc(item) {
+            return uni.$u.test.object(item)
+                ? (this.keyName && item[this.keyName]) || item.src
+                : item
+        },
+        // 单图时,获取图片的尺寸
+        // 在小程序中,需要将网络图片的的域名添加到小程序的download域名才可能获取尺寸
+        // 在没有添加的情况下,让单图宽度默认为盒子的一定宽度(singlePercent)
+        getImageRect() {
+            const src = this.getSrc(this.urls[0])
+            uni.getImageInfo({
+                src,
+                success: (res) => {
+                    // 判断图片横向还是竖向展示方式
+                    const isHorizotal = res.width >= res.height
+                    this.singleWidth = isHorizotal
+                        ? this.singleSize
+                        : (res.width / res.height) * this.singleSize
+                    this.singleHeight = !isHorizotal
+                        ? this.singleSize
+                        : (res.height / res.width) * this.singleWidth
+                },
+                fail: () => {
+                    this.getComponentWidth()
+                }
+            })
+        },
+        // 获取组件的宽度
+        async getComponentWidth() {
+            // 延时一定时间,以获取dom尺寸
+            await uni.$u.sleep(30)
+            // #ifndef APP-NVUE
+            this.$uGetRect('.u-album__row').then((size) => {
+                this.singleWidth = size.width * this.singlePercent
+            })
+            // #endif
+
+            // #ifdef APP-NVUE
+            // 这里ref="u-album__row"所在的标签为通过for循环出来,导致this.$refs['u-album__row']是一个数组
+            const ref = this.$refs['u-album__row'][0]
+            ref &&
+                dom.getComponentRect(ref, (res) => {
+                    this.singleWidth = res.size.width * this.singlePercent
+                })
+            // #endif
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+@import '../../libs/css/components.scss';
+
+.u-album {
+    @include flex(column);
+
+    &__row {
+        @include flex(row);
+        flex-wrap: wrap;
+
+        &__wrapper {
+            position: relative;
+
+            &__text {
+                position: absolute;
+                top: 0;
+                left: 0;
+                right: 0;
+                bottom: 0;
+                background-color: rgba(0, 0, 0, 0.3);
+                @include flex(row);
+                justify-content: center;
+                align-items: center;
+            }
+        }
+    }
+}
+</style>

+ 44 - 0
jxtxkj/node_modules/uview-ui/components/u-alert/props.js

@@ -0,0 +1,44 @@
+export default {
+    props: {
+        // 显示文字
+        title: {
+            type: String,
+            default: uni.$u.props.alert.title
+        },
+        // 主题,success/warning/info/error
+        type: {
+            type: String,
+            default: uni.$u.props.alert.type
+        },
+        // 辅助性文字
+        description: {
+            type: String,
+            default: uni.$u.props.alert.description
+        },
+        // 是否可关闭
+        closable: {
+            type: Boolean,
+            default: uni.$u.props.alert.closable
+        },
+        // 是否显示图标
+        showIcon: {
+            type: Boolean,
+            default: uni.$u.props.alert.showIcon
+        },
+        // 浅或深色调,light-浅色,dark-深色
+        effect: {
+            type: String,
+            default: uni.$u.props.alert.effect
+        },
+        // 文字是否居中
+        center: {
+            type: Boolean,
+            default: uni.$u.props.alert.center
+        },
+        // 字体大小
+        fontSize: {
+            type: [String, Number],
+            default: uni.$u.props.alert.fontSize
+        }
+    }
+}

+ 243 - 0
jxtxkj/node_modules/uview-ui/components/u-alert/u-alert.vue

@@ -0,0 +1,243 @@
+<template>
+	<u-transition
+	    mode="fade"
+	    :show="show"
+	>
+		<view
+		    class="u-alert"
+		    :class="[`u-alert--${type}--${effect}`]"
+		    @tap.stop="clickHandler"
+		    :style="[$u.addStyle(customStyle)]"
+		>
+			<view
+			    class="u-alert__icon"
+			    v-if="showIcon"
+			>
+				<u-icon
+				    :name="iconName"
+				    size="18"
+				    :color="iconColor"
+				></u-icon>
+			</view>
+			<view
+			    class="u-alert__content"
+			    :style="[{
+					paddingRight: closable ? '20px' : 0
+				}]"
+			>
+				<text
+				    class="u-alert__content__title"
+				    v-if="title"
+					:style="[{
+						fontSize: $u.addUnit(fontSize),
+						textAlign: center ? 'center' : 'left'
+					}]"
+				    :class="[effect === 'dark' ? 'u-alert__text--dark' : `u-alert__text--${type}--light`]"
+				>{{ title }}</text>
+				<text
+				    class="u-alert__content__desc"
+					v-if="description"
+					:style="[{
+						fontSize: $u.addUnit(fontSize),
+						textAlign: center ? 'center' : 'left'
+					}]"
+				    :class="[effect === 'dark' ? 'u-alert__text--dark' : `u-alert__text--${type}--light`]"
+				>{{ description }}</text>
+			</view>
+			<view
+			    class="u-alert__close"
+			    v-if="closable"
+			    @tap.stop="closeHandler"
+			>
+				<u-icon
+				    name="close"
+				    :color="iconColor"
+				    size="15"
+				></u-icon>
+			</view>
+		</view>
+	</u-transition>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * Alert  警告提示
+	 * @description 警告提示,展现需要关注的信息。
+	 * @tutorial https://www.uviewui.com/components/alertTips.html
+	 * 
+	 * @property {String}			title       显示的文字 
+	 * @property {String}			type        使用预设的颜色  (默认 'warning' )
+	 * @property {String}			description 辅助性文字,颜色比title浅一点,字号也小一点,可选  
+	 * @property {Boolean}			closable    关闭按钮(默认为叉号icon图标)  (默认 false )
+	 * @property {Boolean}			showIcon    是否显示左边的辅助图标   ( 默认 false )
+	 * @property {String}			effect      多图时,图片缩放裁剪的模式  (默认 'light' )
+	 * @property {Boolean}			center		文字是否居中  (默认 false )
+	 * @property {String | Number}	fontSize    字体大小  (默认 14 )
+	 * @property {Object}			customStyle	定义需要用到的外部样式
+	 * @event    {Function}        click       点击组件时触发
+	 * @example  <u-alert :title="title"  type = "warning" :closable="closable" :description = "description"></u-alert>
+	 */
+	export default {
+		name: 'u-alert',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+		data() {
+			return {
+				show: true
+			}
+		},
+		computed: {
+			iconColor() {
+				return this.effect === 'light' ? this.type : '#fff'
+			},
+			// 不同主题对应不同的图标
+			iconName() {
+				switch (this.type) {
+					case 'success':
+						return 'checkmark-circle-fill';
+						break;
+					case 'error':
+						return 'close-circle-fill';
+						break;
+					case 'warning':
+						return 'error-circle-fill';
+						break;
+					case 'info':
+						return 'info-circle-fill';
+						break;
+					case 'primary':
+						return 'more-circle-fill';
+						break;
+					default: 
+						return 'error-circle-fill';
+				}
+			}
+		},
+		methods: {
+			// 点击内容
+			clickHandler() {
+				this.$emit('click')
+			},
+			// 点击关闭按钮
+			closeHandler() {
+				this.show = false
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+
+	.u-alert {
+		position: relative;
+		background-color: $u-primary;
+		padding: 8px 10px;
+		@include flex(row);
+		align-items: center;
+		border-top-left-radius: 4px;
+		border-top-right-radius: 4px;
+		border-bottom-left-radius: 4px;
+		border-bottom-right-radius: 4px;
+
+		&--primary--dark {
+			background-color: $u-primary;
+		}
+
+		&--primary--light {
+			background-color: #ecf5ff;
+		}
+
+		&--error--dark {
+			background-color: $u-error;
+		}
+
+		&--error--light {
+			background-color: #FEF0F0;
+		}
+
+		&--success--dark {
+			background-color: $u-success;
+		}
+
+		&--success--light {
+			background-color: #f5fff0;
+		}
+
+		&--warning--dark {
+			background-color: $u-warning;
+		}
+
+		&--warning--light {
+			background-color: #FDF6EC;
+		}
+
+		&--info--dark {
+			background-color: $u-info;
+		}
+
+		&--info--light {
+			background-color: #f4f4f5;
+		}
+
+		&__icon {
+			margin-right: 5px;
+		}
+
+		&__content {
+			@include flex(column);
+			flex: 1;
+
+			&__title {
+				color: $u-main-color;
+				font-size: 14px;
+				font-weight: bold;
+				color: #fff;
+				margin-bottom: 2px;
+			}
+
+			&__desc {
+				color: $u-main-color;
+				font-size: 14px;
+				flex-wrap: wrap;
+				color: #fff;
+			}
+		}
+
+		&__title--dark,
+		&__desc--dark {
+			color: #FFFFFF;
+		}
+
+		&__text--primary--light,
+		&__text--primary--light {
+			color: $u-primary;
+		}
+
+		&__text--success--light,
+		&__text--success--light {
+			color: $u-success;
+		}
+
+		&__text--warning--light,
+		&__text--warning--light {
+			color: $u-warning;
+		}
+
+		&__text--error--light,
+		&__text--error--light {
+			color: $u-error;
+		}
+
+		&__text--info--light,
+		&__text--info--light {
+			color: $u-info;
+		}
+
+		&__close {
+			position: absolute;
+			top: 11px;
+			right: 10px;
+		}
+	}
+</style>

+ 52 - 0
jxtxkj/node_modules/uview-ui/components/u-avatar-group/props.js

@@ -0,0 +1,52 @@
+export default {
+    props: {
+        // 头像图片组
+        urls: {
+            type: Array,
+            default: uni.$u.props.avatarGroup.urls
+        },
+        // 最多展示的头像数量
+        maxCount: {
+            type: [String, Number],
+            default: uni.$u.props.avatarGroup.maxCount
+        },
+        // 头像形状
+        shape: {
+            type: String,
+            default: uni.$u.props.avatarGroup.shape
+        },
+        // 图片裁剪模式
+        mode: {
+            type: String,
+            default: uni.$u.props.avatarGroup.mode
+        },
+        // 超出maxCount时是否显示查看更多的提示
+        showMore: {
+            type: Boolean,
+            default: uni.$u.props.avatarGroup.showMore
+        },
+        // 头像大小
+        size: {
+            type: [String, Number],
+            default: uni.$u.props.avatarGroup.size
+        },
+        // 指定从数组的对象元素中读取哪个属性作为图片地址
+        keyName: {
+            type: String,
+            default: uni.$u.props.avatarGroup.keyName
+        },
+		// 头像之间的遮挡比例
+        gap: {
+            type: [String, Number],
+            validator(value) {
+                return value >= 0 && value <= 1
+            },
+            default: uni.$u.props.avatarGroup.gap
+        },
+		// 需额外显示的值
+		extraValue: {
+			type: [Number, String],
+			default: uni.$u.props.avatarGroup.extraValue
+		}
+    }
+}

+ 103 - 0
jxtxkj/node_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue

@@ -0,0 +1,103 @@
+<template>
+	<view class="u-avatar-group">
+		<view
+		    class="u-avatar-group__item"
+		    v-for="(item, index) in showUrl"
+		    :key="index"
+		    :style="{
+				marginLeft: index === 0 ? 0 : $u.addUnit(-size * gap)
+			}"
+		>
+			<u-avatar
+			    :size="size"
+			    :shape="shape"
+			    :mode="mode"
+			    :src="$u.test.object(item) ? keyName && item[keyName] || item.url : item"
+			></u-avatar>
+			<view
+			    class="u-avatar-group__item__show-more"
+			    v-if="showMore && index === showUrl.length - 1 && (urls.length > maxCount || extraValue > 0)"
+				@tap="clickHandler"
+			>
+				<u--text
+				    color="#ffffff"
+				    :size="size * 0.4"
+				    :text="`+${extraValue || urls.length - showUrl.length}`"
+					align="center"
+					customStyle="justify-content: center"
+				></u--text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * AvatarGroup  头像组
+	 * @description 本组件一般用于展示头像的地方,如个人中心,或者评论列表页的用户头像展示等场所。
+	 * @tutorial https://www.uviewui.com/components/avatar.html
+	 * 
+	 * @property {Array}           urls     头像图片组 (默认 [] )
+	 * @property {String | Number} maxCount 最多展示的头像数量 ( 默认 5 )
+	 * @property {String}          shape    头像形状( 'circle' (默认) | 'square' )
+	 * @property {String}          mode     图片裁剪模式(默认 'scaleToFill' )
+	 * @property {Boolean}         showMore 超出maxCount时是否显示查看更多的提示 (默认 true )
+	 * @property {String | Number} size      头像大小 (默认 40 )
+	 * @property {String}          keyName  指定从数组的对象元素中读取哪个属性作为图片地址 
+	 * @property {String | Number} gap      头像之间的遮挡比例(0.4代表遮挡40%)  (默认 0.5 )
+	 * @property {String | Number} extraValue  需额外显示的值
+	 * @event    {Function}        showMore 头像组更多点击
+	 * @example  <u-avatar-group:urls="urls" size="35" gap="0.4" ></u-avatar-group:urls=>
+	 */
+	export default {
+		name: 'u-avatar-group',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+		data() {
+			return {
+
+			}
+		},
+		computed: {
+			showUrl() {
+				return this.urls.slice(0, this.maxCount)
+			}
+		},
+		methods: {
+			clickHandler() {
+				this.$emit('showMore')
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+
+	.u-avatar-group {
+		@include flex;
+
+		&__item {
+			margin-left: -10px;
+			position: relative;
+
+			&--no-indent {
+				// 如果你想质疑作者不会使用:first-child,说明你太年轻,因为nvue不支持
+				margin-left: 0;
+			}
+
+			&__show-more {
+				position: absolute;
+				top: 0;
+				bottom: 0;
+				left: 0;
+				right: 0;
+				background-color: rgba(0, 0, 0, 0.3);
+				@include flex;
+				align-items: center;
+				justify-content: center;
+				border-radius: 100px;
+			}
+		}
+	}
+</style>

+ 78 - 0
jxtxkj/node_modules/uview-ui/components/u-avatar/props.js

@@ -0,0 +1,78 @@
+export default {
+    props: {
+        // 头像图片路径(不能为相对路径)
+        src: {
+            type: String,
+            default: uni.$u.props.avatar.src
+        },
+        // 头像形状,circle-圆形,square-方形
+        shape: {
+            type: String,
+            default: uni.$u.props.avatar.shape
+        },
+        // 头像尺寸
+        size: {
+            type: [String, Number],
+            default: uni.$u.props.avatar.size
+        },
+        // 裁剪模式
+        mode: {
+            type: String,
+            default: uni.$u.props.avatar.mode
+        },
+        // 显示的文字
+        text: {
+            type: String,
+            default: uni.$u.props.avatar.text
+        },
+        // 背景色
+        bgColor: {
+            type: String,
+            default: uni.$u.props.avatar.bgColor
+        },
+        // 文字颜色
+        color: {
+            type: String,
+            default: uni.$u.props.avatar.color
+        },
+        // 文字大小
+        fontSize: {
+            type: [String, Number],
+            default: uni.$u.props.avatar.fontSize
+        },
+        // 显示的图标
+        icon: {
+            type: String,
+            default: uni.$u.props.avatar.icon
+        },
+        // 显示小程序头像,只对百度,微信,QQ小程序有效
+        mpAvatar: {
+            type: Boolean,
+            default: uni.$u.props.avatar.mpAvatar
+        },
+        // 是否使用随机背景色
+        randomBgColor: {
+            type: Boolean,
+            default: uni.$u.props.avatar.randomBgColor
+        },
+        // 加载失败的默认头像(组件有内置默认图片)
+        defaultUrl: {
+            type: String,
+            default: uni.$u.props.avatar.defaultUrl
+        },
+        // 如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间
+        colorIndex: {
+            type: [String, Number],
+            // 校验参数规则,索引在0-19之间
+            validator(n) {
+                return uni.$u.test.range(n, [0, 19]) || n === ''
+            },
+            default: uni.$u.props.avatar.colorIndex
+        },
+        // 组件标识符
+        name: {
+            type: String,
+            default: uni.$u.props.avatar.name
+        }
+    }
+}

文件差異過大導致無法顯示
+ 58 - 0
jxtxkj/node_modules/uview-ui/components/u-avatar/u-avatar.vue


+ 54 - 0
jxtxkj/node_modules/uview-ui/components/u-back-top/props.js

@@ -0,0 +1,54 @@
+export default {
+    props: {
+        // 返回顶部的形状,circle-圆形,square-方形
+        mode: {
+            type: String,
+            default: uni.$u.props.backtop.mode
+        },
+        // 自定义图标
+        icon: {
+            type: String,
+            default: uni.$u.props.backtop.icon
+        },
+        // 提示文字
+        text: {
+            type: String,
+            default: uni.$u.props.backtop.text
+        },
+        // 返回顶部滚动时间
+        duration: {
+            type: [String, Number],
+            default: uni.$u.props.backtop.duration
+        },
+        // 滚动距离
+        scrollTop: {
+            type: [String, Number],
+            default: uni.$u.props.backtop.scrollTop
+        },
+        // 距离顶部多少距离显示,单位px
+        top: {
+            type: [String, Number],
+            default: uni.$u.props.backtop.top
+        },
+        // 返回顶部按钮到底部的距离,单位px
+        bottom: {
+            type: [String, Number],
+            default: uni.$u.props.backtop.bottom
+        },
+        // 返回顶部按钮到右边的距离,单位px
+        right: {
+            type: [String, Number],
+            default: uni.$u.props.backtop.right
+        },
+        // 层级
+        zIndex: {
+            type: [String, Number],
+            default: uni.$u.props.backtop.zIndex
+        },
+        // 图标的样式,对象形式
+        iconStyle: {
+            type: Object,
+            default: uni.$u.props.backtop.iconStyle
+        }
+    }
+}

+ 129 - 0
jxtxkj/node_modules/uview-ui/components/u-back-top/u-back-top.vue

@@ -0,0 +1,129 @@
+<template>
+	<u-transition
+	    mode="fade"
+	    :customStyle="backTopStyle"
+	    :show="show"
+	>
+		<view
+		    class="u-back-top"
+			:style="[contentStyle]"
+		    v-if="!$slots.default && !$slots.$default"
+			@click="backToTop"
+		>
+			<u-icon
+			    :name="icon"
+			    :custom-style="iconStyle"
+			></u-icon>
+			<text
+			    v-if="text"
+			    class="u-back-top__text"
+			>{{text}}</text>
+		</view>
+		<slot v-else />
+	</u-transition>
+</template>
+
+<script>
+	import props from './props.js';
+	// #ifdef APP-NVUE
+	const dom = weex.requireModule('dom')
+	// #endif
+	/**
+	 * backTop 返回顶部
+	 * @description 本组件一个用于长页面,滑动一定距离后,出现返回顶部按钮,方便快速返回顶部的场景。
+	 * @tutorial https://uviewui.com/components/backTop.html
+	 * 
+	 * @property {String}			mode  		返回顶部的形状,circle-圆形,square-方形 (默认 'circle' )
+	 * @property {String} 			icon 		自定义图标 (默认 'arrow-upward' ) 见官方文档示例
+	 * @property {String} 			text 		提示文字 
+	 * @property {String | Number}  duration	返回顶部滚动时间 (默认 100)
+	 * @property {String | Number}  scrollTop	滚动距离 (默认 0 )
+	 * @property {String | Number}  top  		距离顶部多少距离显示,单位px (默认 400 )
+	 * @property {String | Number}  bottom  	返回顶部按钮到底部的距离,单位px (默认 100 )
+	 * @property {String | Number}  right  		返回顶部按钮到右边的距离,单位px (默认 20 )
+	 * @property {String | Number}  zIndex 		层级   (默认 9 )
+	 * @property {Object<Object>}  	iconStyle 	图标的样式,对象形式   (默认 {color: '#909399',fontSize: '19px'})
+	 * @property {Object}			customStyle	定义需要用到的外部样式
+	 * 
+	 * @example <u-back-top :scrollTop="scrollTop"></u-back-top>
+	 */
+	export default {
+		name: 'u-back-top',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+		computed: {
+			backTopStyle() {
+				// 动画组件样式
+				const style = {
+					bottom: uni.$u.addUnit(this.bottom),
+					right: uni.$u.addUnit(this.right),
+					width: '40px',
+					height: '40px',
+					position: 'fixed',
+					zIndex: 10,
+				}
+				return style
+			},
+			show() {
+				return uni.$u.getPx(this.scrollTop) > uni.$u.getPx(this.top)
+			},
+			contentStyle() {
+				const style = {}
+				let radius = 0
+				// 是否圆形
+				if(this.mode === 'circle') {
+					radius = '100px'
+				} else {
+					radius = '4px'
+				}
+				// 为了兼容安卓nvue,只能这么分开写
+				style.borderTopLeftRadius = radius
+				style.borderTopRightRadius = radius
+				style.borderBottomLeftRadius = radius
+				style.borderBottomRightRadius = radius
+				return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle))
+			}
+		},
+		methods: {
+			backToTop() {
+				// #ifdef APP-NVUE
+				if (!this.$parent.$refs['u-back-top']) {
+					uni.$u.error(`nvue页面需要给页面最外层元素设置"ref='u-back-top'`)
+				}
+				dom.scrollToElement(this.$parent.$refs['u-back-top'], {
+					offset: 0
+				})
+				// #endif
+				
+				// #ifndef APP-NVUE
+				uni.pageScrollTo({
+					scrollTop: 0,
+					duration: this.duration
+				});
+				// #endif
+				this.$emit('click')
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import '../../libs/css/components.scss';
+     $u-back-top-flex:1 !default;
+     $u-back-top-height:100% !default;
+     $u-back-top-background-color:#E1E1E1 !default;
+     $u-back-top-tips-font-size:12px !default;
+	.u-back-top {
+		@include flex;
+		flex-direction: column;
+		align-items: center;
+		flex:$u-back-top-flex;
+		height: $u-back-top-height;
+		justify-content: center;
+		background-color: $u-back-top-background-color;
+
+		&__tips {
+			font-size:$u-back-top-tips-font-size;
+			transform: scale(0.8);
+		}
+	}
+</style>

+ 72 - 0
jxtxkj/node_modules/uview-ui/components/u-badge/props.js

@@ -0,0 +1,72 @@
+export default {
+    props: {
+        // 是否显示圆点
+        isDot: {
+            type: Boolean,
+            default: uni.$u.props.badge.isDot
+        },
+        // 显示的内容
+        value: {
+            type: [Number, String],
+            default: uni.$u.props.badge.value
+        },
+        // 是否显示
+        show: {
+            type: Boolean,
+            default: uni.$u.props.badge.show
+        },
+        // 最大值,超过最大值会显示 '{max}+'
+        max: {
+            type: [Number, String],
+            default: uni.$u.props.badge.max
+        },
+        // 主题类型,error|warning|success|primary
+        type: {
+            type: String,
+            default: uni.$u.props.badge.type
+        },
+        // 当数值为 0 时,是否展示 Badge
+        showZero: {
+            type: Boolean,
+            default: uni.$u.props.badge.showZero
+        },
+        // 背景颜色,优先级比type高,如设置,type参数会失效
+        bgColor: {
+            type: [String, null],
+            default: uni.$u.props.badge.bgColor
+        },
+        // 字体颜色
+        color: {
+            type: [String, null],
+            default: uni.$u.props.badge.color
+        },
+        // 徽标形状,circle-四角均为圆角,horn-左下角为直角
+        shape: {
+            type: String,
+            default: uni.$u.props.badge.shape
+        },
+        // 设置数字的显示方式,overflow|ellipsis|limit
+        // overflow会根据max字段判断,超出显示`${max}+`
+        // ellipsis会根据max判断,超出显示`${max}...`
+        // limit会依据1000作为判断条件,超出1000,显示`${value/1000}K`,比如2.2k、3.34w,最多保留2位小数
+        numberType: {
+            type: String,
+            default: uni.$u.props.badge.numberType
+        },
+        // 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效
+        offset: {
+            type: Array,
+            default: uni.$u.props.badge.offset
+        },
+        // 是否反转背景和字体颜色
+        inverted: {
+            type: Boolean,
+            default: uni.$u.props.badge.inverted
+        },
+        // 是否绝对定位
+        absolute: {
+            type: Boolean,
+            default: uni.$u.props.badge.absolute
+        }
+    }
+}

+ 171 - 0
jxtxkj/node_modules/uview-ui/components/u-badge/u-badge.vue

@@ -0,0 +1,171 @@
+<template>
+	<text
+		v-if="show && ((Number(value) === 0 ? showZero : true) || isDot)"
+		:class="[isDot ? 'u-badge--dot' : 'u-badge--not-dot', inverted && 'u-badge--inverted', shape === 'horn' && 'u-badge--horn', `u-badge--${type}${inverted ? '--inverted' : ''}`]"
+		:style="[$u.addStyle(customStyle), badgeStyle]"
+		class="u-badge"
+	>{{ isDot ? '' :showValue }}</text>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * badge 徽标数
+	 * @description 该组件一般用于图标右上角显示未读的消息数量,提示用户点击,有圆点和圆包含文字两种形式。
+	 * @tutorial https://uviewui.com/components/badge.html
+	 * 
+	 * @property {Boolean} 			isDot 		是否显示圆点 (默认 false )
+	 * @property {String | Number} 	value 		显示的内容
+	 * @property {Boolean} 			show 		是否显示 (默认 true )
+	 * @property {String | Number} 	max 		最大值,超过最大值会显示 '{max}+'  (默认999)
+	 * @property {String} 			type 		主题类型,error|warning|success|primary (默认 'error' )
+	 * @property {Boolean} 			showZero	当数值为 0 时,是否展示 Badge (默认 false )
+	 * @property {String} 			bgColor 	背景颜色,优先级比type高,如设置,type参数会失效
+	 * @property {String} 			color 		字体颜色 (默认 '#ffffff' )
+	 * @property {String} 			shape 		徽标形状,circle-四角均为圆角,horn-左下角为直角 (默认 'circle' )
+	 * @property {String} 			numberType	设置数字的显示方式,overflow|ellipsis|limit  (默认 'overflow' )
+	 * @property {Array}} 			offset		设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效
+	 * @property {Boolean} 			inverted	是否反转背景和字体颜色(默认 false )
+	 * @property {Boolean} 			absolute	是否绝对定位(默认 false )
+	 * @property {Object}			customStyle	定义需要用到的外部样式
+	 * @example <u-badge :type="type" :count="count"></u-badge>
+	 */
+	export default {
+		name: 'u-badge',
+		mixins: [uni.$u.mpMixin, props, uni.$u.mixin],
+		computed: {
+			// 是否将badge中心与父组件右上角重合
+			boxStyle() {
+				let style = {};
+				return style;
+			},
+			// 整个组件的样式
+			badgeStyle() {
+				const style = {}
+				if(this.color) {
+					style.color = this.color
+				}
+				if (this.bgColor && !this.inverted) {
+					style.backgroundColor = this.bgColor
+				}
+				if (this.absolute) {
+					style.position = 'absolute'
+					// 如果有设置offset参数
+					if(this.offset.length) {
+						// top和right分为为offset的第一个和第二个值,如果没有第二个值,则right等于top
+						const top = this.offset[0]
+						const right = this.offset[1] || top
+						style.top = uni.$u.addUnit(top)
+						style.right = uni.$u.addUnit(right)
+					}
+				}
+				return style
+			},
+			showValue() {
+				switch (this.numberType) {
+					case "overflow":
+						return Number(this.value) > Number(this.max) ? this.max + "+" : this.value
+						break;
+					case "ellipsis":
+						return Number(this.value) > Number(this.max) ? "..." : this.value
+						break;
+					case "limit":
+						return Number(this.value) > 999 ? Number(this.value) >= 9999 ?
+							Math.floor(this.value / 1e4 * 100) / 100 + "w" : Math.floor(this.value /
+								1e3 * 100) / 100 + "k" : this.value
+						break;
+					default:
+						return Number(this.value)
+				}
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+
+	$u-badge-primary: $u-primary !default;
+	$u-badge-error: $u-error !default;
+	$u-badge-success: $u-success !default;
+	$u-badge-info: $u-info !default;
+	$u-badge-warning: $u-warning !default;
+	$u-badge-dot-radius: 100px !default;
+	$u-badge-dot-size: 8px !default;
+	$u-badge-dot-right: 4px !default;
+	$u-badge-dot-top: 0 !default;
+	$u-badge-text-font-size: 11px !default;
+	$u-badge-text-right: 10px !default;
+	$u-badge-text-padding: 2px 5px !default;
+	$u-badge-text-align: center !default;
+	$u-badge-text-color: #FFFFFF !default;
+
+	.u-badge {
+		border-top-right-radius: $u-badge-dot-radius;
+		border-top-left-radius: $u-badge-dot-radius;
+		border-bottom-left-radius: $u-badge-dot-radius;
+		border-bottom-right-radius: $u-badge-dot-radius;
+		@include flex;
+		line-height: $u-badge-text-font-size;
+		text-align: $u-badge-text-align;
+		font-size: $u-badge-text-font-size;
+		color: $u-badge-text-color;
+
+		&--dot {
+			height: $u-badge-dot-size;
+			width: $u-badge-dot-size;
+		}
+		
+		&--inverted {
+			font-size: 13px;
+		}
+		
+		&--not-dot {
+			padding: $u-badge-text-padding;
+		}
+
+		&--horn {
+			border-bottom-left-radius: 0;
+		}
+
+		&--primary {
+			background-color: $u-badge-primary;
+		}
+		
+		&--primary--inverted {
+			color: $u-badge-primary;
+		}
+
+		&--error {
+			background-color: $u-badge-error;
+		}
+		
+		&--error--inverted {
+			color: $u-badge-error;
+		}
+
+		&--success {
+			background-color: $u-badge-success;
+		}
+		
+		&--success--inverted {
+			color: $u-badge-success;
+		}
+
+		&--info {
+			background-color: $u-badge-info;
+		}
+		
+		&--info--inverted {
+			color: $u-badge-info;
+		}
+
+		&--warning {
+			background-color: $u-badge-warning;
+		}
+		
+		&--warning--inverted {
+			color: $u-badge-warning;
+		}
+	}
+</style>

+ 46 - 0
jxtxkj/node_modules/uview-ui/components/u-button/nvue.scss

@@ -0,0 +1,46 @@
+$u-button-active-opacity:0.75 !default;
+$u-button-loading-text-margin-left:4px !default;
+$u-button-text-color: #FFFFFF !default;
+$u-button-text-plain-error-color:$u-error !default;
+$u-button-text-plain-warning-color:$u-warning !default;
+$u-button-text-plain-success-color:$u-success !default;
+$u-button-text-plain-info-color:$u-info !default;
+$u-button-text-plain-primary-color:$u-primary !default;
+.u-button {
+	&--active {
+		opacity: $u-button-active-opacity;
+	}
+	
+	&--active--plain {
+		background-color: rgb(217, 217, 217);
+	}
+	
+	&__loading-text {
+		margin-left:$u-button-loading-text-margin-left;
+	}
+	
+	&__text,
+	&__loading-text {
+		color:$u-button-text-color;
+	}
+	
+	&__text--plain--error {
+		color:$u-button-text-plain-error-color;
+	}
+	
+	&__text--plain--warning {
+		color:$u-button-text-plain-warning-color;
+	}
+	
+	&__text--plain--success{
+		color:$u-button-text-plain-success-color;
+	}
+	
+	&__text--plain--info {
+		color:$u-button-text-plain-info-color;
+	}
+	
+	&__text--plain--primary {
+		color:$u-button-text-plain-primary-color;
+	}
+}

+ 161 - 0
jxtxkj/node_modules/uview-ui/components/u-button/props.js

@@ -0,0 +1,161 @@
+/*
+ * @Author       : LQ
+ * @Description  :
+ * @version      : 1.0
+ * @Date         : 2021-08-16 10:04:04
+ * @LastAuthor   : LQ
+ * @lastTime     : 2021-08-16 10:04:24
+ * @FilePath     : /u-view2.0/uview-ui/components/u-button/props.js
+ */
+export default {
+    props: {
+        // 是否细边框
+        hairline: {
+            type: Boolean,
+            default: uni.$u.props.button.hairline
+        },
+        // 按钮的预置样式,info,primary,error,warning,success
+        type: {
+            type: String,
+            default: uni.$u.props.button.type
+        },
+        // 按钮尺寸,large,normal,small,mini
+        size: {
+            type: String,
+            default: uni.$u.props.button.size
+        },
+        // 按钮形状,circle(两边为半圆),square(带圆角)
+        shape: {
+            type: String,
+            default: uni.$u.props.button.shape
+        },
+        // 按钮是否镂空
+        plain: {
+            type: Boolean,
+            default: uni.$u.props.button.plain
+        },
+        // 是否禁止状态
+        disabled: {
+            type: Boolean,
+            default: uni.$u.props.button.disabled
+        },
+        // 是否加载中
+        loading: {
+            type: Boolean,
+            default: uni.$u.props.button.loading
+        },
+        // 加载中提示文字
+        loadingText: {
+            type: [String, Number],
+            default: uni.$u.props.button.loadingText
+        },
+        // 加载状态图标类型
+        loadingMode: {
+            type: String,
+            default: uni.$u.props.button.loadingMode
+        },
+        // 加载图标大小
+        loadingSize: {
+            type: [String, Number],
+            default: uni.$u.props.button.loadingSize
+        },
+        // 开放能力,具体请看uniapp稳定关于button组件部分说明
+        // https://uniapp.dcloud.io/component/button
+        openType: {
+            type: String,
+            default: uni.$u.props.button.openType
+        },
+        // 用于 <form> 组件,点击分别会触发 <form> 组件的 submit/reset 事件
+        // 取值为submit(提交表单),reset(重置表单)
+        formType: {
+            type: String,
+            default: uni.$u.props.button.formType
+        },
+        // 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效
+        // 只微信小程序、QQ小程序有效
+        appParameter: {
+            type: String,
+            default: uni.$u.props.button.appParameter
+        },
+        // 指定是否阻止本节点的祖先节点出现点击态,微信小程序有效
+        hoverStopPropagation: {
+            type: Boolean,
+            default: uni.$u.props.button.hoverStopPropagation
+        },
+        // 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。只微信小程序有效
+        lang: {
+            type: String,
+            default: uni.$u.props.button.lang
+        },
+        // 会话来源,open-type="contact"时有效。只微信小程序有效
+        sessionFrom: {
+            type: String,
+            default: uni.$u.props.button.sessionFrom
+        },
+        // 会话内消息卡片标题,open-type="contact"时有效
+        // 默认当前标题,只微信小程序有效
+        sendMessageTitle: {
+            type: String,
+            default: uni.$u.props.button.sendMessageTitle
+        },
+        // 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效
+        // 默认当前分享路径,只微信小程序有效
+        sendMessagePath: {
+            type: String,
+            default: uni.$u.props.button.sendMessagePath
+        },
+        // 会话内消息卡片图片,open-type="contact"时有效
+        // 默认当前页面截图,只微信小程序有效
+        sendMessageImg: {
+            type: String,
+            default: uni.$u.props.button.sendMessageImg
+        },
+        // 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,
+        // 用户点击后可以快速发送小程序消息,open-type="contact"时有效
+        showMessageCard: {
+            type: Boolean,
+            default: uni.$u.props.button.showMessageCard
+        },
+        // 额外传参参数,用于小程序的data-xxx属性,通过target.dataset.name获取
+        dataName: {
+            type: String,
+            default: uni.$u.props.button.dataName
+        },
+        // 节流,一定时间内只能触发一次
+        throttleTime: {
+            type: [String, Number],
+            default: uni.$u.props.button.throttleTime
+        },
+        // 按住后多久出现点击态,单位毫秒
+        hoverStartTime: {
+            type: [String, Number],
+            default: uni.$u.props.button.hoverStartTime
+        },
+        // 手指松开后点击态保留时间,单位毫秒
+        hoverStayTime: {
+            type: [String, Number],
+            default: uni.$u.props.button.hoverStayTime
+        },
+        // 按钮文字,之所以通过props传入,是因为slot传入的话
+        // nvue中无法控制文字的样式
+        text: {
+            type: [String, Number],
+            default: uni.$u.props.button.text
+        },
+        // 按钮图标
+        icon: {
+            type: String,
+            default: uni.$u.props.button.icon
+        },
+        // 按钮图标
+        iconColor: {
+            type: String,
+            default: uni.$u.props.button.icon
+        },
+        // 按钮颜色,支持传入linear-gradient渐变色
+        color: {
+            type: String,
+            default: uni.$u.props.button.color
+        }
+    }
+}

+ 490 - 0
jxtxkj/node_modules/uview-ui/components/u-button/u-button.vue

@@ -0,0 +1,490 @@
+<template>
+    <!-- #ifndef APP-NVUE -->
+    <button
+        :hover-start-time="Number(hoverStartTime)"
+        :hover-stay-time="Number(hoverStayTime)"
+        :form-type="formType"
+        :open-type="openType"
+        :app-parameter="appParameter"
+        :hover-stop-propagation="hoverStopPropagation"
+        :send-message-title="sendMessageTitle"
+        :send-message-path="sendMessagePath"
+        :lang="lang"
+        :data-name="dataName"
+        :session-from="sessionFrom"
+        :send-message-img="sendMessageImg"
+        :show-message-card="showMessageCard"
+        @getphonenumber="getphonenumber"
+        @getuserinfo="getuserinfo"
+        @error="error"
+        @opensetting="opensetting"
+        @launchapp="launchapp"
+        :hover-class="!disabled && !loading ? 'u-button--active' : ''"
+        class="u-button u-reset-button"
+        :style="[baseColor, $u.addStyle(customStyle)]"
+        @tap="clickHandler"
+        :class="bemClass"
+    >
+        <template v-if="loading">
+            <u-loading-icon
+                :mode="loadingMode"
+                :size="textSize * 1.15"
+                :color="loadingColor"
+            ></u-loading-icon>
+            <text
+                class="u-button__loading-text"
+                :style="[{ fontSize: textSize + 'px' }]"
+                >{{ loadingText || text }}</text
+            >
+        </template>
+        <template v-else>
+            <u-icon
+                v-if="icon"
+                :name="icon"
+                :color="iconColorCom"
+                :size="textSize * 1.35"
+                :customStyle="{ marginRight: '2px' }"
+            ></u-icon>
+            <slot>
+                <text
+                    class="u-button__text"
+                    :style="[{ fontSize: textSize + 'px' }]"
+                    >{{ text }}</text
+                >
+            </slot>
+        </template>
+    </button>
+    <!-- #endif -->
+
+    <!-- #ifdef APP-NVUE -->
+    <view
+        :hover-start-time="Number(hoverStartTime)"
+        :hover-stay-time="Number(hoverStayTime)"
+        class="u-button"
+        :hover-class="
+            !disabled && !loading && !color && (plain || type === 'info')
+                ? 'u-button--active--plain'
+                : !disabled && !loading && !plain
+                ? 'u-button--active'
+                : ''
+        "
+        @tap="clickHandler"
+        :class="bemClass"
+        :style="[baseColor, $u.addStyle(customStyle)]"
+    >
+        <template v-if="loading">
+            <u-loading-icon
+                :mode="loadingMode"
+                :size="textSize * 1.15"
+                :color="loadingColor"
+            ></u-loading-icon>
+            <text
+                class="u-button__loading-text"
+                :style="[nvueTextStyle]"
+                :class="[plain && `u-button__text--plain--${type}`]"
+                >{{ loadingText || text }}</text
+            >
+        </template>
+        <template v-else>
+            <u-icon
+                v-if="icon"
+                :name="icon"
+                :color="iconColorCom"
+                :size="textSize * 1.35"
+            ></u-icon>
+            <text
+                class="u-button__text"
+                :style="[
+                    {
+                        marginLeft: icon ? '2px' : 0,
+                    },
+                    nvueTextStyle,
+                ]"
+                :class="[plain && `u-button__text--plain--${type}`]"
+                >{{ text }}</text
+            >
+        </template>
+    </view>
+    <!-- #endif -->
+</template>
+
+<script>
+import button from "../../libs/mixin/button.js";
+import openType from "../../libs/mixin/openType.js";
+import props from "./props.js";
+/**
+ * button 按钮
+ * @description Button 按钮
+ * @tutorial https://www.uviewui.com/components/button.html
+ *
+ * @property {Boolean}			hairline				是否显示按钮的细边框 (默认 true )
+ * @property {String}			type					按钮的预置样式,info,primary,error,warning,success (默认 'info' )
+ * @property {String}			size					按钮尺寸,large,normal,mini (默认 normal)
+ * @property {String}			shape					按钮形状,circle(两边为半圆),square(带圆角) (默认 'square' )
+ * @property {Boolean}			plain					按钮是否镂空,背景色透明 (默认 false)
+ * @property {Boolean}			disabled				是否禁用 (默认 false)
+ * @property {Boolean}			loading					按钮名称前是否带 loading 图标(App-nvue 平台,在 ios 上为雪花,Android上为圆圈) (默认 false)
+ * @property {String | Number}	loadingText				加载中提示文字
+ * @property {String}			loadingMode				加载状态图标类型 (默认 'spinner' )
+ * @property {String | Number}	loadingSize				加载图标大小 (默认 15 )
+ * @property {String}			openType				开放能力,具体请看uniapp稳定关于button组件部分说明
+ * @property {String}			formType				用于 <form> 组件,点击分别会触发 <form> 组件的 submit/reset 事件
+ * @property {String}			appParameter			打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 (注:只微信小程序、QQ小程序有效)
+ * @property {Boolean}			hoverStopPropagation	指定是否阻止本节点的祖先节点出现点击态,微信小程序有效(默认 true )
+ * @property {String}			lang					指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文(默认 en )
+ * @property {String}			sessionFrom				会话来源,openType="contact"时有效
+ * @property {String}			sendMessageTitle		会话内消息卡片标题,openType="contact"时有效
+ * @property {String}			sendMessagePath			会话内消息卡片点击跳转小程序路径,openType="contact"时有效
+ * @property {String}			sendMessageImg			会话内消息卡片图片,openType="contact"时有效
+ * @property {Boolean}			showMessageCard			是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,用户点击后可以快速发送小程序消息,openType="contact"时有效(默认false)
+ * @property {String}			dataName				额外传参参数,用于小程序的data-xxx属性,通过target.dataset.name获取
+ * @property {String | Number}	throttleTime			节流,一定时间内只能触发一次 (默认 0 )
+ * @property {String | Number}	hoverStartTime			按住后多久出现点击态,单位毫秒 (默认 0 )
+ * @property {String | Number}	hoverStayTime			手指松开后点击态保留时间,单位毫秒 (默认 200 )
+ * @property {String | Number}	text					按钮文字,之所以通过props传入,是因为slot传入的话(注:nvue中无法控制文字的样式)
+ * @property {String}			icon					按钮图标
+ * @property {String}			iconColor				按钮图标颜色
+ * @property {String}			color					按钮颜色,支持传入linear-gradient渐变色
+ * @property {Object}			customStyle				定义需要用到的外部样式
+ *
+ * @event {Function}	click			非禁止并且非加载中,才能点击
+ * @event {Function}	getphonenumber	open-type="getPhoneNumber"时有效
+ * @event {Function}	getuserinfo		用户点击该按钮时,会返回获取到的用户信息,从返回参数的detail中获取到的值同uni.getUserInfo
+ * @event {Function}	error			当使用开放能力时,发生错误的回调
+ * @event {Function}	opensetting		在打开授权设置页并关闭后回调
+ * @event {Function}	launchapp		打开 APP 成功的回调
+ * @example <u-button>月落</u-button>
+ */
+export default {
+    name: "u-button",
+    // #ifdef MP
+    mixins: [uni.$u.mpMixin, uni.$u.mixin, button, openType, props],
+    // #endif
+    // #ifndef MP
+    mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+    // #endif
+    data() {
+        return {};
+    },
+    computed: {
+        // 生成bem风格的类名
+        bemClass() {
+            // this.bem为一个computed变量,在mixin中
+            if (!this.color) {
+                return this.bem(
+                    "button",
+                    ["type", "shape", "size"],
+                    ["disabled", "plain", "hairline"]
+                );
+            } else {
+                // 由于nvue的原因,在有color参数时,不需要传入type,否则会生成type相关的类型,影响最终的样式
+                return this.bem(
+                    "button",
+                    ["shape", "size"],
+                    ["disabled", "plain", "hairline"]
+                );
+            }
+        },
+        loadingColor() {
+            if (this.plain) {
+                // 如果有设置color值,则用color值,否则使用type主题颜色
+                return this.color
+                    ? this.color
+                    : uni.$u.config.color[`u-${this.type}`];
+            }
+            if (this.type === "info") {
+                return "#c9c9c9";
+            }
+            return "rgb(200, 200, 200)";
+        },
+        iconColorCom() {
+            // 如果是镂空状态,设置了color就用color值,否则使用主题颜色,
+            // u-icon的color能接受一个主题颜色的值
+			if (this.iconColor) return this.iconColor;
+			if (this.plain) {
+                return this.color ? this.color : this.type;
+            } else {
+                return this.type === "info" ? "#000000" : "#ffffff";
+            }
+        },
+        baseColor() {
+            let style = {};
+            if (this.color) {
+                // 针对自定义了color颜色的情况,镂空状态下,就是用自定义的颜色
+                style.color = this.plain ? this.color : "white";
+                if (!this.plain) {
+                    // 非镂空,背景色使用自定义的颜色
+                    style["background-color"] = this.color;
+                }
+                if (this.color.indexOf("gradient") !== -1) {
+                    // 如果自定义的颜色为渐变色,不显示边框,以及通过backgroundImage设置渐变色
+                    // weex文档说明可以写borderWidth的形式,为什么这里需要分开写?
+                    // 因为weex是阿里巴巴为了部门业绩考核而做的你懂的东西,所以需要这么写才有效
+                    style.borderTopWidth = 0;
+                    style.borderRightWidth = 0;
+                    style.borderBottomWidth = 0;
+                    style.borderLeftWidth = 0;
+                    if (!this.plain) {
+                        style.backgroundImage = this.color;
+                    }
+                } else {
+                    // 非渐变色,则设置边框相关的属性
+                    style.borderColor = this.color;
+                    style.borderWidth = "1px";
+                    style.borderStyle = "solid";
+                }
+            }
+            return style;
+        },
+        // nvue版本按钮的字体不会继承父组件的颜色,需要对每一个text组件进行单独的设置
+        nvueTextStyle() {
+            let style = {};
+            // 针对自定义了color颜色的情况,镂空状态下,就是用自定义的颜色
+            if (this.type === "info") {
+                style.color = "#323233";
+            }
+            if (this.color) {
+                style.color = this.plain ? this.color : "white";
+            }
+            style.fontSize = this.textSize + "px";
+            return style;
+        },
+        // 字体大小
+        textSize() {
+            let fontSize = 14,
+                { size } = this;
+            if (size === "large") fontSize = 16;
+            if (size === "normal") fontSize = 14;
+            if (size === "small") fontSize = 12;
+            if (size === "mini") fontSize = 10;
+            return fontSize;
+        },
+    },
+    methods: {
+        clickHandler() {
+            // 非禁止并且非加载中,才能点击
+            if (!this.disabled && !this.loading) {
+				// 进行节流控制,每this.throttle毫秒内,只在开始处执行
+				uni.$u.throttle(() => {
+					this.$emit("click");
+				}, this.throttleTime);
+            }
+        },
+        // 下面为对接uniapp官方按钮开放能力事件回调的对接
+        getphonenumber(res) {
+            this.$emit("getphonenumber", res);
+        },
+        getuserinfo(res) {
+            this.$emit("getuserinfo", res);
+        },
+        error(res) {
+            this.$emit("error", res);
+        },
+        opensetting(res) {
+            this.$emit("opensetting", res);
+        },
+        launchapp(res) {
+            this.$emit("launchapp", res);
+        },
+    },
+};
+</script>
+
+<style lang="scss" scoped>
+@import "../../libs/css/components.scss";
+
+/* #ifndef APP-NVUE */
+@import "./vue.scss";
+/* #endif */
+
+/* #ifdef APP-NVUE */
+@import "./nvue.scss";
+/* #endif */
+
+$u-button-u-button-height: 40px !default;
+$u-button-text-font-size: 15px !default;
+$u-button-loading-text-font-size: 15px !default;
+$u-button-loading-text-margin-left: 4px !default;
+$u-button-large-width: 100% !default;
+$u-button-large-height: 50px !default;
+$u-button-normal-padding: 0 12px !default;
+$u-button-large-padding: 0 15px !default;
+$u-button-normal-font-size: 14px !default;
+$u-button-small-min-width: 60px !default;
+$u-button-small-height: 30px !default;
+$u-button-small-padding: 0px 8px !default;
+$u-button-mini-padding: 0px 8px !default;
+$u-button-small-font-size: 12px !default;
+$u-button-mini-height: 22px !default;
+$u-button-mini-font-size: 10px !default;
+$u-button-mini-min-width: 50px !default;
+$u-button-disabled-opacity: 0.5 !default;
+$u-button-info-color: #323233 !default;
+$u-button-info-background-color: #fff !default;
+$u-button-info-border-color: #ebedf0 !default;
+$u-button-info-border-width: 1px !default;
+$u-button-info-border-style: solid !default;
+$u-button-success-color: #fff !default;
+$u-button-success-background-color: $u-success !default;
+$u-button-success-border-color: $u-button-success-background-color !default;
+$u-button-success-border-width: 1px !default;
+$u-button-success-border-style: solid !default;
+$u-button-primary-color: #fff !default;
+$u-button-primary-background-color: $u-primary !default;
+$u-button-primary-border-color: $u-button-primary-background-color !default;
+$u-button-primary-border-width: 1px !default;
+$u-button-primary-border-style: solid !default;
+$u-button-error-color: #fff !default;
+$u-button-error-background-color: $u-error !default;
+$u-button-error-border-color: $u-button-error-background-color !default;
+$u-button-error-border-width: 1px !default;
+$u-button-error-border-style: solid !default;
+$u-button-warning-color: #fff !default;
+$u-button-warning-background-color: $u-warning !default;
+$u-button-warning-border-color: $u-button-warning-background-color !default;
+$u-button-warning-border-width: 1px !default;
+$u-button-warning-border-style: solid !default;
+$u-button-block-width: 100% !default;
+$u-button-circle-border-top-right-radius: 100px !default;
+$u-button-circle-border-top-left-radius: 100px !default;
+$u-button-circle-border-bottom-left-radius: 100px !default;
+$u-button-circle-border-bottom-right-radius: 100px !default;
+$u-button-square-border-top-right-radius: 3px !default;
+$u-button-square-border-top-left-radius: 3px !default;
+$u-button-square-border-bottom-left-radius: 3px !default;
+$u-button-square-border-bottom-right-radius: 3px !default;
+$u-button-icon-min-width: 1em !default;
+$u-button-plain-background-color: #fff !default;
+$u-button-hairline-border-width: 0.5px !default;
+
+.u-button {
+    height: $u-button-u-button-height;
+    position: relative;
+    align-items: center;
+    justify-content: center;
+    @include flex;
+    /* #ifndef APP-NVUE */
+    box-sizing: border-box;
+    /* #endif */
+    flex-direction: row;
+
+    &__text {
+        font-size: $u-button-text-font-size;
+    }
+
+    &__loading-text {
+        font-size: $u-button-loading-text-font-size;
+        margin-left: $u-button-loading-text-margin-left;
+    }
+
+    &--large {
+        /* #ifndef APP-NVUE */
+        width: $u-button-large-width;
+        /* #endif */
+        height: $u-button-large-height;
+        padding: $u-button-large-padding;
+    }
+
+    &--normal {
+        padding: $u-button-normal-padding;
+        font-size: $u-button-normal-font-size;
+    }
+
+    &--small {
+        /* #ifndef APP-NVUE */
+        min-width: $u-button-small-min-width;
+        /* #endif */
+        height: $u-button-small-height;
+        padding: $u-button-small-padding;
+        font-size: $u-button-small-font-size;
+    }
+
+    &--mini {
+        height: $u-button-mini-height;
+        font-size: $u-button-mini-font-size;
+        /* #ifndef APP-NVUE */
+        min-width: $u-button-mini-min-width;
+        /* #endif */
+        padding: $u-button-mini-padding;
+    }
+
+    &--disabled {
+        opacity: $u-button-disabled-opacity;
+    }
+
+    &--info {
+        color: $u-button-info-color;
+        background-color: $u-button-info-background-color;
+        border-color: $u-button-info-border-color;
+        border-width: $u-button-info-border-width;
+        border-style: $u-button-info-border-style;
+    }
+
+    &--success {
+        color: $u-button-success-color;
+        background-color: $u-button-success-background-color;
+        border-color: $u-button-success-border-color;
+        border-width: $u-button-success-border-width;
+        border-style: $u-button-success-border-style;
+    }
+
+    &--primary {
+        color: $u-button-primary-color;
+        background-color: $u-button-primary-background-color;
+        border-color: $u-button-primary-border-color;
+        border-width: $u-button-primary-border-width;
+        border-style: $u-button-primary-border-style;
+    }
+
+    &--error {
+        color: $u-button-error-color;
+        background-color: $u-button-error-background-color;
+        border-color: $u-button-error-border-color;
+        border-width: $u-button-error-border-width;
+        border-style: $u-button-error-border-style;
+    }
+
+    &--warning {
+        color: $u-button-warning-color;
+        background-color: $u-button-warning-background-color;
+        border-color: $u-button-warning-border-color;
+        border-width: $u-button-warning-border-width;
+        border-style: $u-button-warning-border-style;
+    }
+
+    &--block {
+        @include flex;
+        width: $u-button-block-width;
+    }
+
+    &--circle {
+        border-top-right-radius: $u-button-circle-border-top-right-radius;
+        border-top-left-radius: $u-button-circle-border-top-left-radius;
+        border-bottom-left-radius: $u-button-circle-border-bottom-left-radius;
+        border-bottom-right-radius: $u-button-circle-border-bottom-right-radius;
+    }
+
+    &--square {
+        border-bottom-left-radius: $u-button-square-border-top-right-radius;
+        border-bottom-right-radius: $u-button-square-border-top-left-radius;
+        border-top-left-radius: $u-button-square-border-bottom-left-radius;
+        border-top-right-radius: $u-button-square-border-bottom-right-radius;
+    }
+
+    &__icon {
+        /* #ifndef APP-NVUE */
+        min-width: $u-button-icon-min-width;
+        line-height: inherit !important;
+        vertical-align: top;
+        /* #endif */
+    }
+
+    &--plain {
+        background-color: $u-button-plain-background-color;
+    }
+
+    &--hairline {
+        border-width: $u-button-hairline-border-width !important;
+    }
+}
+</style>

+ 80 - 0
jxtxkj/node_modules/uview-ui/components/u-button/vue.scss

@@ -0,0 +1,80 @@
+// nvue下hover-class无效
+$u-button-before-top:50% !default;
+$u-button-before-left:50% !default;
+$u-button-before-width:100% !default;
+$u-button-before-height:100% !default;
+$u-button-before-transform:translate(-50%, -50%) !default;
+$u-button-before-opacity:0 !default;
+$u-button-before-background-color:#000 !default;
+$u-button-before-border-color:#000 !default;
+$u-button-active-before-opacity:.15 !default;
+$u-button-icon-margin-left:4px !default;
+$u-button-plain-u-button-info-color:$u-info;
+$u-button-plain-u-button-success-color:$u-success;
+$u-button-plain-u-button-error-color:$u-error;
+$u-button-plain-u-button-warning-color:$u-error;
+
+.u-button {
+	width: 100%;
+	
+	&__text {
+		white-space: nowrap;
+		line-height: 1;
+	}
+	
+	&:before {
+		position: absolute;
+		top:$u-button-before-top;
+		left:$u-button-before-left;
+		width:$u-button-before-width;
+		height:$u-button-before-height;
+		border: inherit;
+		border-radius: inherit;
+		transform:$u-button-before-transform;
+		opacity:$u-button-before-opacity;
+		content: " ";
+		background-color:$u-button-before-background-color;
+		border-color:$u-button-before-border-color;
+	}
+	
+	&--active {
+		&:before {
+			opacity: .15
+		}
+	}
+	
+	&__icon+&__text:not(:empty),
+	&__loading-text {
+		margin-left:$u-button-icon-margin-left;
+	}
+	
+	&--plain {
+		&.u-button--primary {
+			color: $u-primary;
+		}
+	}
+	
+	&--plain {
+		&.u-button--info {
+			color:$u-button-plain-u-button-info-color;
+		}
+	}
+	
+	&--plain {
+		&.u-button--success {
+			color:$u-button-plain-u-button-success-color;
+		}
+	}
+	
+	&--plain {
+		&.u-button--error {
+			color:$u-button-plain-u-button-error-color;
+		}
+	}
+	
+	&--plain {
+		&.u-button--warning {
+			color:$u-button-plain-u-button-warning-color;
+		}
+	}
+}

+ 99 - 0
jxtxkj/node_modules/uview-ui/components/u-calendar/header.vue

@@ -0,0 +1,99 @@
+<template>
+	<view class="u-calendar-header u-border-bottom">
+		<text
+			class="u-calendar-header__title"
+			v-if="showTitle"
+		>{{ title }}</text>
+		<text
+			class="u-calendar-header__subtitle"
+			v-if="showSubtitle"
+		>{{ subtitle }}</text>
+		<view class="u-calendar-header__weekdays">
+			<text class="u-calendar-header__weekdays__weekday">一</text>
+			<text class="u-calendar-header__weekdays__weekday">二</text>
+			<text class="u-calendar-header__weekdays__weekday">三</text>
+			<text class="u-calendar-header__weekdays__weekday">四</text>
+			<text class="u-calendar-header__weekdays__weekday">五</text>
+			<text class="u-calendar-header__weekdays__weekday">六</text>
+			<text class="u-calendar-header__weekdays__weekday">日</text>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'u-calendar-header',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin],
+		props: {
+			// 标题
+			title: {
+				type: String,
+				default: ''
+			},
+			// 副标题
+			subtitle: {
+				type: String,
+				default: ''
+			},
+			// 是否显示标题
+			showTitle: {
+				type: Boolean,
+				default: true
+			},
+			// 是否显示副标题
+			showSubtitle: {
+				type: Boolean,
+				default: true
+			},
+		},
+		data() {
+			return {
+
+			}
+		},
+		methods: {
+			name() {
+
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+
+	.u-calendar-header {
+		padding-bottom: 4px;
+
+		&__title {
+			font-size: 16px;
+			color: $u-main-color;
+			text-align: center;
+			height: 42px;
+			line-height: 42px;
+			font-weight: bold;
+		}
+
+		&__subtitle {
+			font-size: 14px;
+			color: $u-main-color;
+			height: 40px;
+			text-align: center;
+			line-height: 40px;
+			font-weight: bold;
+		}
+
+		&__weekdays {
+			@include flex;
+			justify-content: space-between;
+
+			&__weekday {
+				font-size: 13px;
+				color: $u-main-color;
+				line-height: 30px;
+				flex: 1;
+				text-align: center;
+			}
+		}
+	}
+</style>

+ 579 - 0
jxtxkj/node_modules/uview-ui/components/u-calendar/month.vue

@@ -0,0 +1,579 @@
+<template>
+	<view class="u-calendar-month-wrapper" ref="u-calendar-month-wrapper">
+		<view v-for="(item, index) in months" :key="index" :class="[`u-calendar-month-${index}`]"
+			:ref="`u-calendar-month-${index}`" :id="`month-${index}`">
+			<text v-if="index !== 0" class="u-calendar-month__title">{{ item.year }}年{{ item.month }}月</text>
+			<view class="u-calendar-month__days">
+				<view v-if="showMark" class="u-calendar-month__days__month-mark-wrapper">
+					<text class="u-calendar-month__days__month-mark-wrapper__text">{{ item.month }}</text>
+				</view>
+				<view class="u-calendar-month__days__day" v-for="(item1, index1) in item.date" :key="index1"
+					:style="[dayStyle(index, index1, item1)]" @tap="clickHandler(index, index1, item1)"
+					:class="[item1.selected && 'u-calendar-month__days__day__select--selected']">
+					<view class="u-calendar-month__days__day__select" :style="[daySelectStyle(index, index1, item1)]">
+						<text class="u-calendar-month__days__day__select__info"
+							:class="[item1.disabled && 'u-calendar-month__days__day__select__info--disabled']"
+							:style="[textStyle(item1)]">{{ item1.day }}</text>
+						<text v-if="getBottomInfo(index, index1, item1)"
+							class="u-calendar-month__days__day__select__buttom-info"
+							:class="[item1.disabled && 'u-calendar-month__days__day__select__buttom-info--disabled']"
+							:style="[textStyle(item1)]">{{ getBottomInfo(index, index1, item1) }}</text>
+						<text v-if="item1.dot" class="u-calendar-month__days__day__select__dot"></text>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	// #ifdef APP-NVUE
+	// 由于nvue不支持百分比单位,需要查询宽度来计算每个日期的宽度
+	const dom = uni.requireNativePlugin('dom')
+	// #endif
+	import dayjs from '../../libs/util/dayjs.js';
+	export default {
+		name: 'u-calendar-month',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin],
+		props: {
+			// 是否显示月份背景色
+			showMark: {
+				type: Boolean,
+				default: true
+			},
+			// 主题色,对底部按钮和选中日期有效
+			color: {
+				type: String,
+				default: '#3c9cff'
+			},
+			// 月份数据
+			months: {
+				type: Array,
+				default: () => []
+			},
+			// 日期选择类型
+			mode: {
+				type: String,
+				default: 'single'
+			},
+			// 日期行高
+			rowHeight: {
+				type: [String, Number],
+				default: 58
+			},
+			// mode=multiple时,最多可选多少个日期
+			maxCount: {
+				type: [String, Number],
+				default: Infinity
+			},
+			// mode=range时,第一个日期底部的提示文字
+			startText: {
+				type: String,
+				default: '开始'
+			},
+			// mode=range时,最后一个日期底部的提示文字
+			endText: {
+				type: String,
+				default: '结束'
+			},
+			// 默认选中的日期,mode为multiple或range是必须为数组格式
+			defaultDate: {
+				type: [Array, String, Date],
+				default: null
+			},
+			// 最小的可选日期
+			minDate: {
+				type: [String, Number],
+				default: 0
+			},
+			// 最大可选日期
+			maxDate: {
+				type: [String, Number],
+				default: 0
+			},
+			// 如果没有设置maxDate,则往后推多少个月
+			maxMonth: {
+				type: [String, Number],
+				default: 2
+			},
+			// 是否为只读状态,只读状态下禁止选择日期
+			readonly: {
+				type: Boolean,
+				default: uni.$u.props.calendar.readonly
+			},
+			// 日期区间最多可选天数,默认无限制,mode = range时有效
+			maxRange: {
+				type: [Number, String],
+				default: Infinity
+			},
+			// 范围选择超过最多可选天数时的提示文案,mode = range时有效
+			rangePrompt: {
+				type: String,
+				default: ''
+			},
+			// 范围选择超过最多可选天数时,是否展示提示文案,mode = range时有效
+			showRangePrompt: {
+				type: Boolean,
+				default: true
+			},
+			// 是否允许日期范围的起止时间为同一天,mode = range时有效
+			allowSameDay: {
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+				// 每个日期的宽度
+				width: 0,
+				// 当前选中的日期item
+				item: {},
+				selected: []
+			}
+		},
+		watch: {
+			selectedChange: {
+				immediate: true,
+				handler(n) {
+					this.setDefaultDate()
+				}
+			}
+		},
+		computed: {
+			// 多个条件的变化,会引起选中日期的变化,这里统一管理监听
+			selectedChange() {
+				return [this.minDate, this.maxDate, this.defaultDate]
+			},
+			dayStyle(index1, index2, item) {
+				return (index1, index2, item) => {
+					const style = {}
+					let week = item.week
+					// 不进行四舍五入的形式保留2位小数
+					const dayWidth = Number(parseFloat(this.width / 7).toFixed(3).slice(0, -1))
+					// 得出每个日期的宽度
+					// #ifdef APP-NVUE
+					style.width = uni.$u.addUnit(dayWidth)
+					// #endif
+					style.height = uni.$u.addUnit(this.rowHeight)
+					if (index2 === 0) {
+						// 获取当前为星期几,如果为0,则为星期天,减一为每月第一天时,需要向左偏移的item个数
+						week = (week === 0 ? 7 : week) - 1
+						style.marginLeft = uni.$u.addUnit(week * dayWidth)
+					}
+					if (this.mode === 'range') {
+						// 之所以需要这么写,是因为DCloud公司的iOS客户端的开发者能力有限导致的bug
+						style.paddingLeft = 0
+						style.paddingRight = 0
+						style.paddingBottom = 0
+						style.paddingTop = 0
+					}
+					return style
+				}
+			},
+			daySelectStyle() {
+				return (index1, index2, item) => {
+					let date = dayjs(item.date).format("YYYY-MM-DD"),
+						style = {}
+					// 判断date是否在selected数组中,因为月份可能会需要补0,所以使用dateSame判断,而不用数组的includes判断
+					if (this.selected.some(item => this.dateSame(item, date))) {
+						style.backgroundColor = this.color
+					}
+					if (this.mode === 'single') {
+						if (date === this.selected[0]) {
+							// 因为需要对nvue的兼容,只能这么写,无法缩写,也无法通过类名控制等等
+							style.borderTopLeftRadius = '3px'
+							style.borderBottomLeftRadius = '3px'
+							style.borderTopRightRadius = '3px'
+							style.borderBottomRightRadius = '3px'
+						}
+					} else if (this.mode === 'range') {
+						if (this.selected.length >= 2) {
+							const len = this.selected.length - 1
+							// 第一个日期设置左上角和左下角的圆角
+							if (this.dateSame(date, this.selected[0])) {
+								style.borderTopLeftRadius = '3px'
+								style.borderBottomLeftRadius = '3px'
+							}
+							// 最后一个日期设置右上角和右下角的圆角
+							if (this.dateSame(date, this.selected[len])) {
+								style.borderTopRightRadius = '3px'
+								style.borderBottomRightRadius = '3px'
+							}
+							// 处于第一和最后一个之间的日期,背景色设置为浅色,通过将对应颜色进行等分,再取其尾部的颜色值
+							if (dayjs(date).isAfter(dayjs(this.selected[0])) && dayjs(date).isBefore(dayjs(this
+									.selected[len]))) {
+								style.backgroundColor = uni.$u.colorGradient(this.color, '#ffffff', 100)[90]
+								// 增加一个透明度,让范围区间的背景色也能看到底部的mark水印字符
+								style.opacity = 0.7
+							}
+						} else if (this.selected.length === 1) {
+							// 之所以需要这么写,是因为DCloud公司的iOS客户端的开发者能力有限导致的bug
+							// 进行还原操作,否则在nvue的iOS,uni-app有bug,会导致诡异的表现
+							style.borderTopLeftRadius = '3px'
+							style.borderBottomLeftRadius = '3px'
+						}
+					} else {
+						if (this.selected.some(item => this.dateSame(item, date))) {
+							style.borderTopLeftRadius = '3px'
+							style.borderBottomLeftRadius = '3px'
+							style.borderTopRightRadius = '3px'
+							style.borderBottomRightRadius = '3px'
+						}
+					}
+					return style
+				}
+			},
+			// 某个日期是否被选中
+			textStyle() {
+				return (item) => {
+					const date = dayjs(item.date).format("YYYY-MM-DD"),
+						style = {}
+					// 选中的日期,提示文字设置白色
+					if (this.selected.some(item => this.dateSame(item, date))) {
+						style.color = '#ffffff'
+					}
+					if (this.mode === 'range') {
+						const len = this.selected.length - 1
+						// 如果是范围选择模式,第一个和最后一个之间的日期,文字颜色设置为高亮的主题色
+						if (dayjs(date).isAfter(dayjs(this.selected[0])) && dayjs(date).isBefore(dayjs(this
+								.selected[len]))) {
+							style.color = this.color
+						}
+					}
+					return style
+				}
+			},
+			// 获取底部的提示文字
+			getBottomInfo() {
+				return (index1, index2, item) => {
+					const date = dayjs(item.date).format("YYYY-MM-DD")
+					const bottomInfo = item.bottomInfo
+					// 当为日期范围模式时,且选择的日期个数大于0时
+					if (this.mode === 'range' && this.selected.length > 0) {
+						if (this.selected.length === 1) {
+							// 选择了一个日期时,如果当前日期为数组中的第一个日期,则显示底部文字为“开始”
+							if (this.dateSame(date, this.selected[0])) return this.startText
+							else return bottomInfo
+						} else {
+							const len = this.selected.length - 1
+							// 如果数组中的日期大于2个时,第一个和最后一个显示为开始和结束日期
+							if (this.dateSame(date, this.selected[0]) && this.dateSame(date, this.selected[1]) &&
+								len === 1) {
+								// 如果长度为2,且第一个等于第二个日期,则提示语放在同一个item中
+								return `${this.startText}/${this.endText}`
+							} else if (this.dateSame(date, this.selected[0])) {
+								return this.startText
+							} else if (this.dateSame(date, this.selected[len])) {
+								return this.endText
+							} else {
+								return bottomInfo
+							}
+						}
+					} else {
+						return bottomInfo
+					}
+				}
+			}
+		},
+		mounted() {
+			this.init()
+		},
+		methods: {
+			init() {
+				// 初始化默认选中
+				this.$emit('monthSelected', this.selected)
+				this.$nextTick(() => {
+					// 这里需要另一个延时,因为获取宽度后,会进行月份数据渲染,只有渲染完成之后,才有真正的高度
+					// 因为nvue下,$nextTick并不是100%可靠的
+					uni.$u.sleep(10).then(() => {
+						this.getWrapperWidth()
+						this.getMonthRect()
+					})
+				})
+			},
+			// 判断两个日期是否相等
+			dateSame(date1, date2) {
+				return dayjs(date1).isSame(dayjs(date2))
+			},
+			// 获取月份数据区域的宽度,因为nvue不支持百分比,所以无法通过css设置每个日期item的宽度
+			getWrapperWidth() {
+				// #ifdef APP-NVUE
+				dom.getComponentRect(this.$refs['u-calendar-month-wrapper'], res => {
+					this.width = res.size.width
+				})
+				// #endif
+				// #ifndef APP-NVUE
+				this.$uGetRect('.u-calendar-month-wrapper').then(size => {
+					this.width = size.width
+				})
+				// #endif
+			},
+			getMonthRect() {
+				// 获取每个月份数据的尺寸,用于父组件在scroll-view滚动事件中,监听当前滚动到了第几个月份
+				const promiseAllArr = this.months.map((item, index) => this.getMonthRectByPromise(
+					`u-calendar-month-${index}`))
+				// 一次性返回
+				Promise.all(promiseAllArr).then(
+					sizes => {
+						let height = 1
+						const topArr = []
+						for (let i = 0; i < this.months.length; i++) {
+							// 添加到months数组中,供scroll-view滚动事件中,判断当前滚动到哪个月份
+							topArr[i] = height
+							height += sizes[i].height
+						}
+						// 由于微信下,无法通过this.months[i].top的形式(引用类型)去修改父组件的month的top值,所以使用事件形式对外发出
+						this.$emit('updateMonthTop', topArr)
+					})
+			},
+			// 获取每个月份区域的尺寸
+			getMonthRectByPromise(el) {
+				// #ifndef APP-NVUE
+				// $uGetRect为uView自带的节点查询简化方法,详见文档介绍:https://www.uviewui.com/js/getRect.html
+				// 组件内部一般用this.$uGetRect,对外的为uni.$u.getRect,二者功能一致,名称不同
+				return new Promise(resolve => {
+					this.$uGetRect(`.${el}`).then(size => {
+						resolve(size)
+					})
+				})
+				// #endif
+
+				// #ifdef APP-NVUE
+				// nvue下,使用dom模块查询元素高度
+				// 返回一个promise,让调用此方法的主体能使用then回调
+				return new Promise(resolve => {
+					dom.getComponentRect(this.$refs[el][0], res => {
+						resolve(res.size)
+					})
+				})
+				// #endif
+			},
+			// 点击某一个日期
+			clickHandler(index1, index2, item) {
+				if (this.readonly) {
+					return;
+				}
+				this.item = item
+				const date = dayjs(item.date).format("YYYY-MM-DD")
+				if (item.disabled) return
+				// 对上一次选择的日期数组进行深度克隆
+				let selected = uni.$u.deepClone(this.selected)
+				if (this.mode === 'single') {
+					// 单选情况下,让数组中的元素为当前点击的日期
+					selected = [date]
+				} else if (this.mode === 'multiple') {
+					if (selected.some(item => this.dateSame(item, date))) {
+						// 如果点击的日期已在数组中,则进行移除操作,也就是达到反选的效果
+						const itemIndex = selected.findIndex(item => item === date)
+						selected.splice(itemIndex, 1)
+					} else {
+						// 如果点击的日期不在数组中,且已有的长度小于总可选长度时,则添加到数组中去
+						if (selected.length < this.maxCount) selected.push(date)
+					}
+				} else {
+					// 选择区间形式
+					if (selected.length === 0 || selected.length >= 2) {
+						// 如果原来就为0或者大于2的长度,则当前点击的日期,就是开始日期
+						selected = [date]
+					} else if (selected.length === 1) {
+						// 如果已经选择了开始日期
+						const existsDate = selected[0]
+						// 如果当前选择的日期小于上一次选择的日期,则当前的日期定为开始日期
+						if (dayjs(date).isBefore(existsDate)) {
+							selected = [date]
+						} else if (dayjs(date).isAfter(existsDate)) {
+							// 当前日期减去最大可选的日期天数,如果大于起始时间,则进行提示
+							if(dayjs(dayjs(date).subtract(this.maxRange, 'day')).isAfter(dayjs(selected[0])) && this.showRangePrompt) {
+								if(this.rangePrompt) {
+									uni.$u.toast(this.rangePrompt)
+								} else {
+									uni.$u.toast(`选择天数不能超过 ${this.maxRange} 天`)
+								}
+								return
+							}
+							// 如果当前日期大于已有日期,将当前的添加到数组尾部
+							selected.push(date)
+							const startDate = selected[0]
+							const endDate = selected[1]
+							const arr = []
+							let i = 0
+							do {
+								// 将开始和结束日期之间的日期添加到数组中
+								arr.push(dayjs(startDate).add(i, 'day').format("YYYY-MM-DD"))
+								i++
+								// 累加的日期小于结束日期时,继续下一次的循环
+							} while (dayjs(startDate).add(i, 'day').isBefore(dayjs(endDate)))
+							// 为了一次性修改数组,避免computed中多次触发,这里才用arr变量一次性赋值的方式,同时将最后一个日期添加近来
+							arr.push(endDate)
+							selected = arr
+						} else {
+							// 选择区间时,只有一个日期的情况下,且不允许选择起止为同一天的话,不允许选择自己
+							if (selected[0] === date && !this.allowSameDay) return
+							selected.push(date)
+						}
+					}
+				}
+				this.setSelected(selected)
+			},
+			// 设置默认日期
+			setDefaultDate() {
+				if (!this.defaultDate) {
+					// 如果没有设置默认日期,则将当天日期设置为默认选中的日期
+					const selected = [dayjs().format("YYYY-MM-DD")]
+					return this.setSelected(selected, false)
+				}
+				let defaultDate = []
+				const minDate = this.minDate || dayjs().format("YYYY-MM-DD")
+				const maxDate = this.maxDate || dayjs(minDate).add(this.maxMonth - 1, 'month').format("YYYY-MM-DD")
+				if (this.mode === 'single') {
+					// 单选模式,可以是字符串或数组,Date对象等
+					if (!uni.$u.test.array(this.defaultDate)) {
+						defaultDate = [dayjs(this.defaultDate).format("YYYY-MM-DD")]
+					} else {
+						defaultDate = [this.defaultDate[0]]
+					}
+				} else {
+					// 如果为非数组,则不执行
+					if (!uni.$u.test.array(this.defaultDate)) return
+					defaultDate = this.defaultDate
+				}
+				// 过滤用户传递的默认数组,取出只在可允许最大值与最小值之间的元素
+				defaultDate = defaultDate.filter(item => {
+					return dayjs(item).isAfter(dayjs(minDate).subtract(1, 'day')) && dayjs(item).isBefore(dayjs(
+						maxDate).add(1, 'day'))
+				})
+				this.setSelected(defaultDate, false)
+			},
+			setSelected(selected, event = true) {
+				this.selected = selected
+				event && this.$emit('monthSelected', this.selected)
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+
+	.u-calendar-month-wrapper {
+		margin-top: 4px;
+	}
+
+	.u-calendar-month {
+
+		&__title {
+			font-size: 14px;
+			line-height: 42px;
+			height: 42px;
+			color: $u-main-color;
+			text-align: center;
+			font-weight: bold;
+		}
+
+		&__days {
+			position: relative;
+			@include flex;
+			flex-wrap: wrap;
+
+			&__month-mark-wrapper {
+				position: absolute;
+				top: 0;
+				bottom: 0;
+				left: 0;
+				right: 0;
+				@include flex;
+				justify-content: center;
+				align-items: center;
+
+				&__text {
+					font-size: 155px;
+					color: rgba(231, 232, 234, 0.83);
+				}
+			}
+
+			&__day {
+				@include flex;
+				padding: 2px;
+				/* #ifndef APP-NVUE */
+				// vue下使用css进行宽度计算,因为某些安卓机会无法进行js获取父元素宽度进行计算得出,会有偏移
+				width: calc(100% / 7);
+				box-sizing: border-box;
+				/* #endif */
+
+				&__select {
+					flex: 1;
+					@include flex;
+					align-items: center;
+					justify-content: center;
+					position: relative;
+
+					&__dot {
+						width: 7px;
+						height: 7px;
+						border-radius: 100px;
+						background-color: $u-error;
+						position: absolute;
+						top: 12px;
+						right: 7px;
+					}
+
+					&__buttom-info {
+						color: $u-content-color;
+						text-align: center;
+						position: absolute;
+						bottom: 5px;
+						font-size: 10px;
+						text-align: center;
+						left: 0;
+						right: 0;
+
+						&--selected {
+							color: #ffffff;
+						}
+
+						&--disabled {
+							color: #cacbcd;
+						}
+					}
+
+					&__info {
+						text-align: center;
+						font-size: 16px;
+
+						&--selected {
+							color: #ffffff;
+						}
+
+						&--disabled {
+							color: #cacbcd;
+						}
+					}
+
+					&--selected {
+						background-color: $u-primary;
+						@include flex;
+						justify-content: center;
+						align-items: center;
+						flex: 1;
+						border-radius: 3px;
+					}
+
+					&--range-selected {
+						opacity: 0.3;
+						border-radius: 0;
+					}
+
+					&--range-start-selected {
+						border-top-right-radius: 0;
+						border-bottom-right-radius: 0;
+					}
+
+					&--range-end-selected {
+						border-top-left-radius: 0;
+						border-bottom-left-radius: 0;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 144 - 0
jxtxkj/node_modules/uview-ui/components/u-calendar/props.js

@@ -0,0 +1,144 @@
+export default {
+    props: {
+        // 日历顶部标题
+        title: {
+            type: String,
+            default: uni.$u.props.calendar.title
+        },
+        // 是否显示标题
+        showTitle: {
+            type: Boolean,
+            default: uni.$u.props.calendar.showTitle
+        },
+        // 是否显示副标题
+        showSubtitle: {
+            type: Boolean,
+            default: uni.$u.props.calendar.showSubtitle
+        },
+        // 日期类型选择,single-选择单个日期,multiple-可以选择多个日期,range-选择日期范围
+        mode: {
+            type: String,
+            default: uni.$u.props.calendar.mode
+        },
+        // mode=range时,第一个日期底部的提示文字
+        startText: {
+            type: String,
+            default: uni.$u.props.calendar.startText
+        },
+        // mode=range时,最后一个日期底部的提示文字
+        endText: {
+            type: String,
+            default: uni.$u.props.calendar.endText
+        },
+        // 自定义列表
+        customList: {
+            type: Array,
+            default: uni.$u.props.calendar.customList
+        },
+        // 主题色,对底部按钮和选中日期有效
+        color: {
+            type: String,
+            default: uni.$u.props.calendar.color
+        },
+        // 最小的可选日期
+        minDate: {
+            type: [String, Number],
+            default: uni.$u.props.calendar.minDate
+        },
+        // 最大可选日期
+        maxDate: {
+            type: [String, Number],
+            default: uni.$u.props.calendar.maxDate
+        },
+        // 默认选中的日期,mode为multiple或range是必须为数组格式
+        defaultDate: {
+            type: [Array, String, Date, null],
+            default: uni.$u.props.calendar.defaultDate
+        },
+        // mode=multiple时,最多可选多少个日期
+        maxCount: {
+            type: [String, Number],
+            default: uni.$u.props.calendar.maxCount
+        },
+        // 日期行高
+        rowHeight: {
+            type: [String, Number],
+            default: uni.$u.props.calendar.rowHeight
+        },
+        // 日期格式化函数
+        formatter: {
+            type: [Function, null],
+            default: uni.$u.props.calendar.formatter
+        },
+        // 是否显示农历
+        showLunar: {
+            type: Boolean,
+            default: uni.$u.props.calendar.showLunar
+        },
+        // 是否显示月份背景色
+        showMark: {
+            type: Boolean,
+            default: uni.$u.props.calendar.showMark
+        },
+        // 确定按钮的文字
+        confirmText: {
+            type: String,
+            default: uni.$u.props.calendar.confirmText
+        },
+        // 确认按钮处于禁用状态时的文字
+        confirmDisabledText: {
+            type: String,
+            default: uni.$u.props.calendar.confirmDisabledText
+        },
+        // 是否显示日历弹窗
+        show: {
+            type: Boolean,
+            default: uni.$u.props.calendar.show
+        },
+        // 是否允许点击遮罩关闭日历
+        closeOnClickOverlay: {
+            type: Boolean,
+            default: uni.$u.props.calendar.closeOnClickOverlay
+        },
+        // 是否为只读状态,只读状态下禁止选择日期
+        readonly: {
+            type: Boolean,
+            default: uni.$u.props.calendar.readonly
+        },
+        // 	是否展示确认按钮
+        showConfirm: {
+            type: Boolean,
+            default: uni.$u.props.calendar.showConfirm
+        },
+        // 日期区间最多可选天数,默认无限制,mode = range时有效
+        maxRange: {
+            type: [Number, String],
+            default: uni.$u.props.calendar.maxRange
+        },
+        // 范围选择超过最多可选天数时的提示文案,mode = range时有效
+        rangePrompt: {
+            type: String,
+            default: uni.$u.props.calendar.rangePrompt
+        },
+        // 范围选择超过最多可选天数时,是否展示提示文案,mode = range时有效
+        showRangePrompt: {
+            type: Boolean,
+            default: uni.$u.props.calendar.showRangePrompt
+        },
+        // 是否允许日期范围的起止时间为同一天,mode = range时有效
+        allowSameDay: {
+            type: Boolean,
+            default: uni.$u.props.calendar.allowSameDay
+        },
+		// 圆角值
+		round: {
+		    type: [Boolean, String, Number],
+		    default: uni.$u.props.calendar.round
+		},
+		// 最多展示月份数量
+		monthNum: {
+			type: [Number, String],
+			default: 3
+		}	
+    }
+}

+ 383 - 0
jxtxkj/node_modules/uview-ui/components/u-calendar/u-calendar.vue

@@ -0,0 +1,383 @@
+<template>
+	<u-popup
+		:show="show"
+		mode="bottom"
+		closeable
+		@close="close"
+		:round="round"
+		:closeOnClickOverlay="closeOnClickOverlay"
+	>
+		<view class="u-calendar">
+			<uHeader
+				:title="title"
+				:subtitle="subtitle"
+				:showSubtitle="showSubtitle"
+				:showTitle="showTitle"
+			></uHeader>
+			<scroll-view
+				:style="{
+                    height: $u.addUnit(listHeight)
+                }"
+				scroll-y
+				@scroll="onScroll"
+				:scroll-top="scrollTop"
+				:scrollIntoView="scrollIntoView"
+			>
+				<uMonth
+					:color="color"
+					:rowHeight="rowHeight"
+					:showMark="showMark"
+					:months="months"
+					:mode="mode"
+					:maxCount="maxCount"
+					:startText="startText"
+					:endText="endText"
+					:defaultDate="defaultDate"
+					:minDate="innerMinDate"
+					:maxDate="innerMaxDate"
+					:maxMonth="monthNum"
+					:readonly="readonly"
+					:maxRange="maxRange"
+					:rangePrompt="rangePrompt"
+					:showRangePrompt="showRangePrompt"
+					:allowSameDay="allowSameDay"
+					ref="month"
+					@monthSelected="monthSelected"
+					@updateMonthTop="updateMonthTop"
+				></uMonth>
+			</scroll-view>
+			<slot name="footer" v-if="showConfirm">
+				<view class="u-calendar__confirm">
+					<u-button
+						shape="circle"
+						:text="
+                            buttonDisabled ? confirmDisabledText : confirmText
+                        "
+						:color="color"
+						@click="confirm"
+						:disabled="buttonDisabled"
+					></u-button>
+				</view>
+			</slot>
+		</view>
+	</u-popup>
+</template>
+
+<script>
+import uHeader from './header.vue'
+import uMonth from './month.vue'
+import props from './props.js'
+import util from './util.js'
+import dayjs from '../../libs/util/dayjs.js'
+import Calendar from '../../libs/util/calendar.js'
+/**
+ * Calendar 日历
+ * @description  此组件用于单个选择日期,范围选择日期等,日历被包裹在底部弹起的容器中.
+ * @tutorial https://www.uviewui.com/components/calendar.html
+ *
+ * @property {String}				title				标题内容 (默认 日期选择 )
+ * @property {Boolean}				showTitle			是否显示标题  (默认 true )
+ * @property {Boolean}				showSubtitle		是否显示副标题	(默认 true )
+ * @property {String}				mode				日期类型选择  single-选择单个日期,multiple-可以选择多个日期,range-选择日期范围 ( 默认 'single' )
+ * @property {String}				startText			mode=range时,第一个日期底部的提示文字  (默认 '开始' )
+ * @property {String}				endText				mode=range时,最后一个日期底部的提示文字 (默认 '结束' )
+ * @property {Array}				customList			自定义列表
+ * @property {String}				color				主题色,对底部按钮和选中日期有效  (默认 ‘#3c9cff' )
+ * @property {String | Number}		minDate				最小的可选日期	 (默认 0 )
+ * @property {String | Number}		maxDate				最大可选日期  (默认 0 )
+ * @property {Array | String| Date}	defaultDate			默认选中的日期,mode为multiple或range是必须为数组格式
+ * @property {String | Number}		maxCount			mode=multiple时,最多可选多少个日期  (默认 	Number.MAX_SAFE_INTEGER  )
+ * @property {String | Number}		rowHeight			日期行高 (默认 56 )
+ * @property {Function}				formatter			日期格式化函数
+ * @property {Boolean}				showLunar			是否显示农历  (默认 false )
+ * @property {Boolean}				showMark			是否显示月份背景色 (默认 true )
+ * @property {String}				confirmText			确定按钮的文字 (默认 '确定' )
+ * @property {String}				confirmDisabledText	确认按钮处于禁用状态时的文字 (默认 '确定' )
+ * @property {Boolean}				show				是否显示日历弹窗 (默认 false )
+ * @property {Boolean}				closeOnClickOverlay	是否允许点击遮罩关闭日历 (默认 false )
+ * @property {Boolean}				readonly	        是否为只读状态,只读状态下禁止选择日期 (默认 false )
+ * @property {String | Number}		maxRange	        日期区间最多可选天数,默认无限制,mode = range时有效
+ * @property {String}				rangePrompt	        范围选择超过最多可选天数时的提示文案,mode = range时有效
+ * @property {Boolean}				showRangePrompt	    范围选择超过最多可选天数时,是否展示提示文案,mode = range时有效 (默认 true )
+ * @property {Boolean}				allowSameDay	    是否允许日期范围的起止时间为同一天,mode = range时有效 (默认 false )
+ * @property {Number|String}	    round				圆角值,默认无圆角  (默认 0 )
+ * @property {Number|String}	    monthNum			最多展示的月份数量  (默认 3 )
+ *
+ * @event {Function()} confirm 		点击确定按钮时触发		选择日期相关的返回参数
+ * @event {Function()} close 		日历关闭时触发			可定义页面关闭时的回调事件
+ * @example <u-calendar  :defaultDate="defaultDateMultiple" :show="show" mode="multiple" @confirm="confirm">
+	</u-calendar>
+ * */
+export default {
+	name: 'u-calendar',
+	mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+	components: {
+		uHeader,
+		uMonth
+	},
+	data() {
+		return {
+			// 需要显示的月份的数组
+			months: [],
+			// 在月份滚动区域中,当前视图中月份的index索引
+			monthIndex: 0,
+			// 月份滚动区域的高度
+			listHeight: 0,
+			// month组件中选择的日期数组
+			selected: [],
+			scrollIntoView: '',
+			scrollTop:0,
+			// 过滤处理方法
+			innerFormatter: (value) => value
+		}
+	},
+	watch: {
+		selectedChange: {
+			immediate: true,
+			handler(n) {
+				this.setMonth()
+			}
+		},
+		// 打开弹窗时,设置月份数据
+		show: {
+			immediate: true,
+			handler(n) {
+				this.setMonth()
+			}
+		}
+	},
+	computed: {
+		// 由于maxDate和minDate可以为字符串(2021-10-10),或者数值(时间戳),但是dayjs如果接受字符串形式的时间戳会有问题,这里进行处理
+		innerMaxDate() {
+			return uni.$u.test.number(this.maxDate)
+				? Number(this.maxDate)
+				: this.maxDate
+		},
+		innerMinDate() {
+			return uni.$u.test.number(this.minDate)
+				? Number(this.minDate)
+				: this.minDate
+		},
+		// 多个条件的变化,会引起选中日期的变化,这里统一管理监听
+		selectedChange() {
+			return [this.innerMinDate, this.innerMaxDate, this.defaultDate]
+		},
+		subtitle() {
+			// 初始化时,this.months为空数组,所以需要特别判断处理
+			if (this.months.length) {
+				return `${this.months[this.monthIndex].year}年${
+					this.months[this.monthIndex].month
+				}月`
+			} else {
+				return ''
+			}
+		},
+		buttonDisabled() {
+			// 如果为range类型,且选择的日期个数不足1个时,让底部的按钮出于disabled状态
+			if (this.mode === 'range') {
+				if (this.selected.length <= 1) {
+					return true
+				} else {
+					return false
+				}
+			} else {
+				return false
+			}
+		}
+	},
+	mounted() {
+		this.start = Date.now()
+		this.init()
+	},
+	methods: {
+		// 在微信小程序中,不支持将函数当做props参数,故只能通过ref形式调用
+		setFormatter(e) {
+			this.innerFormatter = e
+		},
+		// month组件内部选择日期后,通过事件通知给父组件
+		monthSelected(e) {
+			this.selected = e
+			if (!this.showConfirm) {
+				// 在不需要确认按钮的情况下,如果为单选,或者范围多选且已选长度大于2,则直接进行返还
+				if (
+					this.mode === 'multiple' ||
+					this.mode === 'single' ||
+					(this.mode === 'range' && this.selected.length >= 2)
+				) {
+					this.$emit('confirm', this.selected)
+				}
+			}
+		},
+		init() {
+			// 校验maxDate,不能小于当前时间
+			if (
+				this.innerMaxDate &&
+				new Date(this.innerMaxDate).getTime() <= Date.now()
+			) {
+				return uni.$u.error('maxDate不能小于当前时间')
+			}
+			// 滚动区域的高度
+			this.listHeight = this.rowHeight * 5 + 30
+			this.setMonth()
+		},
+		close() {
+			this.$emit('close')
+		},
+		// 点击确定按钮
+		confirm() {
+			if (!this.buttonDisabled) {
+				this.$emit('confirm', this.selected)
+			}
+		},
+		// 获得两个日期之间的月份数
+		getMonths(minDate, maxDate) {
+			const minYear = dayjs(minDate).year()
+			const minMonth = dayjs(minDate).month() + 1
+			const maxYear = dayjs(maxDate).year()
+			const maxMonth = dayjs(maxDate).month() + 1
+			return (maxYear - minYear) * 12 + (maxMonth - minMonth) + 1
+		},
+		// 设置月份数据
+		setMonth() {
+			// 最小日期的毫秒数
+			const minDate = this.innerMinDate || dayjs().valueOf()
+			// 如果没有指定最大日期,则往后推3个月
+			const maxDate =
+				this.innerMaxDate ||
+				dayjs(minDate)
+					.add(this.monthNum - 1, 'month')
+					.valueOf()
+			// 最大最小月份之间的共有多少个月份,
+			const months = uni.$u.range(
+				1,
+				this.monthNum,
+				this.getMonths(minDate, maxDate)
+			)
+			// 先清空数组
+			this.months = []
+			for (let i = 0; i < months; i++) {
+				this.months.push({
+					date: new Array(
+						dayjs(minDate).add(i, 'month').daysInMonth()
+					)
+						.fill(1)
+						.map((item, index) => {
+							// 日期,取值1-31
+							let day = index + 1
+							// 星期,0-6,0为周日
+							const week = dayjs(minDate)
+								.add(i, 'month')
+								.date(day)
+								.day()
+							const date = dayjs(minDate)
+								.add(i, 'month')
+								.date(day)
+								.format('YYYY-MM-DD')
+							let bottomInfo = ''
+							if (this.showLunar) {
+								// 将日期转为农历格式
+								const lunar = Calendar.solar2lunar(
+									dayjs(date).year(),
+									dayjs(date).month() + 1,
+									dayjs(date).date()
+								)
+								bottomInfo = lunar.IDayCn
+							}
+							let config = {
+								day,
+								week,
+								// 小于最小允许的日期,或者大于最大的日期,则设置为disabled状态
+								disabled:
+									dayjs(date).isBefore(
+										dayjs(minDate).format('YYYY-MM-DD')
+									) ||
+									dayjs(date).isAfter(
+										dayjs(maxDate).format('YYYY-MM-DD')
+									),
+								// 返回一个日期对象,供外部的formatter获取当前日期的年月日等信息,进行加工处理
+								date: new Date(date),
+								bottomInfo,
+								dot: false,
+								month:
+									dayjs(minDate).add(i, 'month').month() + 1
+							}
+							const formatter =
+								this.formatter || this.innerFormatter
+							return formatter(config)
+						}),
+					// 当前所属的月份
+					month: dayjs(minDate).add(i, 'month').month() + 1,
+					// 当前年份
+					year: dayjs(minDate).add(i, 'month').year()
+				})
+			}
+
+		},
+		// 滚动到默认设置的月份
+		scrollIntoDefaultMonth(selected) {
+			// 查询默认日期在可选列表的下标
+			const _index = this.months.findIndex(({
+				  year,
+				  month
+			  }) => {
+				month = uni.$u.padZero(month)
+				return `${year}-${month}` === selected
+			})
+			if (_index !== -1) {
+				// #ifndef MP-WEIXIN
+				this.$nextTick(() => {
+					this.scrollIntoView = `month-${_index}`
+				})
+				// #endif
+				// #ifdef MP-WEIXIN
+				this.scrollTop = this.months[_index].top || 0;
+				// #endif
+			}
+		},
+		// scroll-view滚动监听
+		onScroll(event) {
+			// 不允许小于0的滚动值,如果scroll-view到顶了,继续下拉,会出现负数值
+			const scrollTop = Math.max(0, event.detail.scrollTop)
+			// 将当前滚动条数值,除以滚动区域的高度,可以得出当前滚动到了哪一个月份的索引
+			for (let i = 0; i < this.months.length; i++) {
+				if (scrollTop >= (this.months[i].top || this.listHeight)) {
+					this.monthIndex = i
+				}
+			}
+		},
+		// 更新月份的top值
+		updateMonthTop(topArr = []) {
+			// 设置对应月份的top值,用于onScroll方法更新月份
+			topArr.map((item, index) => {
+				this.months[index].top = item
+			})
+
+			// 获取默认日期的下标
+			if (!this.defaultDate) {
+				// 如果没有设置默认日期,则将当天日期设置为默认选中的日期
+				const selected = dayjs().format("YYYY-MM")
+				this.scrollIntoDefaultMonth(selected)
+				return
+			}
+			let selected = dayjs().format("YYYY-MM");
+			// 单选模式,可以是字符串或数组,Date对象等
+			if (!uni.$u.test.array(this.defaultDate)) {
+				selected = dayjs(this.defaultDate).format("YYYY-MM")
+			} else {
+				selected = dayjs(this.defaultDate[0]).format("YYYY-MM");
+			}
+			this.scrollIntoDefaultMonth(selected)
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+@import '../../libs/css/components.scss';
+
+.u-calendar {
+	&__confirm {
+		padding: 7px 18px;
+	}
+}
+</style>

+ 85 - 0
jxtxkj/node_modules/uview-ui/components/u-calendar/util.js

@@ -0,0 +1,85 @@
+export default {
+    methods: {
+        // 设置月份数据
+        setMonth() {
+            // 月初是周几
+            const day = dayjs(this.date).date(1).day()
+            const start = day == 0 ? 6 : day - 1
+
+            // 本月天数
+            const days = dayjs(this.date).endOf('month').format('D')
+
+            // 上个月天数
+            const prevDays = dayjs(this.date).endOf('month').subtract(1, 'month').format('D')
+
+            // 日期数据
+            const arr = []
+            // 清空表格
+            this.month = []
+
+            // 添加上月数据
+            arr.push(
+                ...new Array(start).fill(1).map((e, i) => {
+                    const day = prevDays - start + i + 1
+
+                    return {
+                        value: day,
+                        disabled: true,
+                        date: dayjs(this.date).subtract(1, 'month').date(day).format('YYYY-MM-DD')
+                    }
+                })
+            )
+
+            // 添加本月数据
+            arr.push(
+                ...new Array(days - 0).fill(1).map((e, i) => {
+                    const day = i + 1
+
+                    return {
+                        value: day,
+                        date: dayjs(this.date).date(day).format('YYYY-MM-DD')
+                    }
+                })
+            )
+
+            // 添加下个月
+            arr.push(
+                ...new Array(42 - days - start).fill(1).map((e, i) => {
+                    const day = i + 1
+
+                    return {
+                        value: day,
+                        disabled: true,
+                        date: dayjs(this.date).add(1, 'month').date(day).format('YYYY-MM-DD')
+                    }
+                })
+            )
+
+            // 分割数组
+            for (let n = 0; n < arr.length; n += 7) {
+                this.month.push(
+                    arr.slice(n, n + 7).map((e, i) => {
+                        e.index = i + n
+
+                        // 自定义信息
+                        const custom = this.customList.find((c) => c.date == e.date)
+
+                        // 农历
+                        if (this.lunar) {
+                            const {
+                                IDayCn,
+                                IMonthCn
+                            } = this.getLunar(e.date)
+                            e.lunar = IDayCn == '初一' ? IMonthCn : IDayCn
+                        }
+
+                        return {
+                            ...e,
+                            ...custom
+                        }
+                    })
+                )
+            }
+        }
+    }
+}

+ 14 - 0
jxtxkj/node_modules/uview-ui/components/u-car-keyboard/props.js

@@ -0,0 +1,14 @@
+export default {
+    props: {
+        // 是否打乱键盘按键的顺序
+        random: {
+            type: Boolean,
+            default: false
+        },
+        // 输入一个中文后,是否自动切换到英文
+        autoChange: {
+            type: Boolean,
+            default: false
+        }
+    }
+}

+ 311 - 0
jxtxkj/node_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue

@@ -0,0 +1,311 @@
+<template>
+	<view
+		class="u-keyboard"
+		@touchmove.stop.prevent="noop"
+	>
+		<view
+			v-for="(group, i) in abc ? engKeyBoardList : areaList"
+			:key="i"
+			class="u-keyboard__button"
+			:index="i"
+			:class="[i + 1 === 4 && 'u-keyboard__button--center']"
+		>
+			<view
+				v-if="i === 3"
+				class="u-keyboard__button__inner-wrapper"
+			>
+				<view
+					class="u-keyboard__button__inner-wrapper__left"
+					hover-class="u-hover-class"
+					:hover-stay-time="200"
+					@tap="changeCarInputMode"
+				>
+					<text
+						class="u-keyboard__button__inner-wrapper__left__lang"
+						:class="[!abc && 'u-keyboard__button__inner-wrapper__left__lang--active']"
+					>中</text>
+					<text class="u-keyboard__button__inner-wrapper__left__line">/</text>
+					<text
+						class="u-keyboard__button__inner-wrapper__left__lang"
+						:class="[abc && 'u-keyboard__button__inner-wrapper__left__lang--active']"
+					>英</text>
+				</view>
+			</view>
+			<view
+				class="u-keyboard__button__inner-wrapper"
+				v-for="(item, j) in group"
+				:key="j"
+			>
+				<view
+					class="u-keyboard__button__inner-wrapper__inner"
+					:hover-stay-time="200"
+					@tap="carInputClick(i, j)"
+					hover-class="u-hover-class"
+				>
+					<text class="u-keyboard__button__inner-wrapper__inner__text">{{ item }}</text>
+				</view>
+			</view>
+			<view
+				v-if="i === 3"
+				@touchstart="backspaceClick"
+				@touchend="clearTimer"
+				class="u-keyboard__button__inner-wrapper"
+			>
+				<view
+					class="u-keyboard__button__inner-wrapper__right"
+					hover-class="u-hover-class"
+					:hover-stay-time="200"
+				>
+					<u-icon
+						size="28"
+						name="backspace"
+						color="#303133"
+					></u-icon>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * keyboard 键盘组件
+	 * @description 此为uView自定义的键盘面板,内含了数字键盘,车牌号键,身份证号键盘3种模式,都有可以打乱按键顺序的选项。
+	 * @tutorial https://uviewui.com/components/keyboard.html
+	 * @property {Boolean} random 是否打乱键盘的顺序
+	 * @event {Function} change 点击键盘触发
+	 * @event {Function} backspace 点击退格键触发
+	 * @example <u-keyboard ref="uKeyboard" mode="car" v-model="show"></u-keyboard>
+	 */
+	export default {
+		name: "u-keyboard",
+		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+		data() {
+			return {
+				// 车牌输入时,abc=true为输入车牌号码,bac=false为输入省份中文简称
+				abc: false
+			};
+		},
+		computed: {
+			areaList() {
+				let data = [
+					'京',
+					'沪',
+					'粤',
+					'津',
+					'冀',
+					'豫',
+					'云',
+					'辽',
+					'黑',
+					'湘',
+					'皖',
+					'鲁',
+					'苏',
+					'浙',
+					'赣',
+					'鄂',
+					'桂',
+					'甘',
+					'晋',
+					'陕',
+					'蒙',
+					'吉',
+					'闽',
+					'贵',
+					'渝',
+					'川',
+					'青',
+					'琼',
+					'宁',
+					'挂',
+					'藏',
+					'港',
+					'澳',
+					'新',
+					'使',
+					'学'
+				];
+				let tmp = [];
+				// 打乱顺序
+				if (this.random) data = uni.$u.randomArray(data);
+				// 切割成二维数组
+				tmp[0] = data.slice(0, 10);
+				tmp[1] = data.slice(10, 20);
+				tmp[2] = data.slice(20, 30);
+				tmp[3] = data.slice(30, 36);
+				return tmp;
+			},
+			engKeyBoardList() {
+				let data = [
+					1,
+					2,
+					3,
+					4,
+					5,
+					6,
+					7,
+					8,
+					9,
+					0,
+					'Q',
+					'W',
+					'E',
+					'R',
+					'T',
+					'Y',
+					'U',
+					'I',
+					'O',
+					'P',
+					'A',
+					'S',
+					'D',
+					'F',
+					'G',
+					'H',
+					'J',
+					'K',
+					'L',
+					'Z',
+					'X',
+					'C',
+					'V',
+					'B',
+					'N',
+					'M'
+				];
+				let tmp = [];
+				if (this.random) data = uni.$u.randomArray(data);
+				tmp[0] = data.slice(0, 10);
+				tmp[1] = data.slice(10, 20);
+				tmp[2] = data.slice(20, 30);
+				tmp[3] = data.slice(30, 36);
+				return tmp;
+			}
+		},
+		methods: {
+			// 点击键盘按钮
+			carInputClick(i, j) {
+				let value = '';
+				// 不同模式,获取不同数组的值
+				if (this.abc) value = this.engKeyBoardList[i][j];
+				else value = this.areaList[i][j];
+				// 如果允许自动切换,则将中文状态切换为英文
+				if (!this.abc && this.autoChange) uni.$u.sleep(200).then(() => this.abc = true)
+				this.$emit('change', value);
+			},
+			// 修改汽车牌键盘的输入模式,中文|英文
+			changeCarInputMode() {
+				this.abc = !this.abc;
+			},
+			// 点击退格键
+			backspaceClick() {
+				this.$emit('backspace');
+				clearInterval(this.timer); //再次清空定时器,防止重复注册定时器
+				this.timer = null;
+				this.timer = setInterval(() => {
+					this.$emit('backspace');
+				}, 250);
+			},
+			clearTimer() {
+				clearInterval(this.timer);
+				this.timer = null;
+			},
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+	$u-car-keyboard-background-color: rgb(224, 228, 230) !default;
+	$u-car-keyboard-padding:6px 0 6px !default;
+	$u-car-keyboard-button-inner-width:64rpx !default;
+	$u-car-keyboard-button-inner-background-color:#FFFFFF !default;
+	$u-car-keyboard-button-height:80rpx !default;
+	$u-car-keyboard-button-inner-box-shadow:0 1px 0px #999992 !default;
+	$u-car-keyboard-button-border-radius:4px !default;
+	$u-car-keyboard-button-inner-margin:8rpx 5rpx !default;
+	$u-car-keyboard-button-text-font-size:16px !default;
+	$u-car-keyboard-button-text-color:$u-main-color !default;
+	$u-car-keyboard-center-inner-margin: 0 4rpx !default;
+	$u-car-keyboard-special-button-width:134rpx !default;
+	$u-car-keyboard-lang-font-size:16px !default;
+	$u-car-keyboard-lang-color:$u-main-color !default;
+	$u-car-keyboard-active-color:$u-primary !default;
+	$u-car-keyboard-line-font-size:15px !default;
+	$u-car-keyboard-line-color:$u-main-color !default;
+	$u-car-keyboard-line-margin:0 1px !default;
+	$u-car-keyboard-u-hover-class-background-color:#BBBCC6 !default;
+
+	.u-keyboard {
+		@include flex(column);
+		justify-content: space-around;
+		background-color: $u-car-keyboard-background-color;
+		align-items: stretch;
+		padding: $u-car-keyboard-padding;
+
+		&__button {
+			@include flex;
+			justify-content: center;
+			flex: 1;
+			/* #ifndef APP-NVUE */
+			/* #endif */
+
+			&__inner-wrapper {
+				box-shadow: $u-car-keyboard-button-inner-box-shadow;
+				margin: $u-car-keyboard-button-inner-margin;
+				border-radius: $u-car-keyboard-button-border-radius;
+
+				&__inner {
+					@include flex;
+					justify-content: center;
+					align-items: center;
+					width: $u-car-keyboard-button-inner-width;
+					background-color: $u-car-keyboard-button-inner-background-color;
+					height: $u-car-keyboard-button-height;
+					border-radius: $u-car-keyboard-button-border-radius;
+
+					&__text {
+						font-size: $u-car-keyboard-button-text-font-size;
+						color: $u-car-keyboard-button-text-color;
+					}
+				}
+
+				&__left,
+				&__right {
+					border-radius: $u-car-keyboard-button-border-radius;
+					width: $u-car-keyboard-special-button-width;
+					height: $u-car-keyboard-button-height;
+					background-color: $u-car-keyboard-u-hover-class-background-color;
+					@include flex;
+					justify-content: center;
+					align-items: center;
+					box-shadow: $u-car-keyboard-button-inner-box-shadow;
+				}
+
+				&__left {
+					&__line {
+						font-size: $u-car-keyboard-line-font-size;
+						color: $u-car-keyboard-line-color;
+						margin: $u-car-keyboard-line-margin;
+					}
+
+					&__lang {
+						font-size: $u-car-keyboard-lang-font-size;
+						color: $u-car-keyboard-lang-color;
+
+						&--active {
+							color: $u-car-keyboard-active-color;
+						}
+					}
+				}
+			}
+		}
+	}
+
+	.u-hover-class {
+		background-color: $u-car-keyboard-u-hover-class-background-color;
+	}
+</style>

+ 14 - 0
jxtxkj/node_modules/uview-ui/components/u-cell-group/props.js

@@ -0,0 +1,14 @@
+export default {
+    props: {
+        // 分组标题
+        title: {
+            type: String,
+            default: uni.$u.props.cellGroup.title
+        },
+        // 是否显示外边框
+        border: {
+            type: Boolean,
+            default: uni.$u.props.cellGroup.border
+        }
+    }
+}

+ 61 - 0
jxtxkj/node_modules/uview-ui/components/u-cell-group/u-cell-group.vue

@@ -0,0 +1,61 @@
+<template>
+    <view :style="[$u.addStyle(customStyle)]" :class="[customClass]" class="u-cell-group">
+        <view v-if="title" class="u-cell-group__title">
+            <slot name="title">
+				<text class="u-cell-group__title__text">{{ title }}</text>
+			</slot>
+        </view>
+        <view class="u-cell-group__wrapper">
+			<u-line v-if="border"></u-line>
+            <slot />
+        </view>
+    </view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * cellGroup  单元格
+	 * @description cell单元格一般用于一组列表的情况,比如个人中心页,设置页等。
+	 * @tutorial https://uviewui.com/components/cell.html
+	 * 
+	 * @property {String}	title		分组标题
+	 * @property {Boolean}	border		是否显示外边框 (默认 true )
+	 * @property {Object}	customStyle	定义需要用到的外部样式
+	 * 
+	 * @event {Function} click 	点击cell列表时触发
+	 * @example <u-cell-group title="设置喜好">
+	 */
+	export default {
+		name: 'u-cell-group',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+	
+	$u-cell-group-title-padding: 16px 16px 8px !default;
+	$u-cell-group-title-font-size: 15px !default;
+	$u-cell-group-title-line-height: 16px !default;
+	$u-cell-group-title-color: $u-main-color !default;
+
+    .u-cell-group {
+		flex: 1;
+		
+        &__title {
+            padding: $u-cell-group-title-padding;
+
+            &__text {
+                font-size: $u-cell-group-title-font-size;
+                line-height: $u-cell-group-title-line-height;
+                color: $u-cell-group-title-color;
+            }
+        }
+		
+		&__wrapper {
+			position: relative;
+		}
+    }
+</style>
+

+ 110 - 0
jxtxkj/node_modules/uview-ui/components/u-cell/props.js

@@ -0,0 +1,110 @@
+export default {
+    props: {
+        // 标题
+        title: {
+            type: [String, Number],
+            default: uni.$u.props.cell.title
+        },
+        // 标题下方的描述信息
+        label: {
+            type: [String, Number],
+            default: uni.$u.props.cell.label
+        },
+        // 右侧的内容
+        value: {
+            type: [String, Number],
+            default: uni.$u.props.cell.value
+        },
+        // 左侧图标名称,或者图片链接(本地文件建议使用绝对地址)
+        icon: {
+            type: String,
+            default: uni.$u.props.cell.icon
+        },
+        // 是否禁用cell
+        disabled: {
+            type: Boolean,
+            default: uni.$u.props.cell.disabled
+        },
+        // 是否显示下边框
+        border: {
+            type: Boolean,
+            default: uni.$u.props.cell.border
+        },
+        // 内容是否垂直居中(主要是针对右侧的value部分)
+        center: {
+            type: Boolean,
+            default: uni.$u.props.cell.center
+        },
+        // 点击后跳转的URL地址
+        url: {
+            type: String,
+            default: uni.$u.props.cell.url
+        },
+        // 链接跳转的方式,内部使用的是uView封装的route方法,可能会进行拦截操作
+        linkType: {
+            type: String,
+            default: uni.$u.props.cell.linkType
+        },
+        // 是否开启点击反馈(表现为点击时加上灰色背景)
+        clickable: {
+            type: Boolean,
+            default: uni.$u.props.cell.clickable
+        },
+        // 是否展示右侧箭头并开启点击反馈
+        isLink: {
+            type: Boolean,
+            default: uni.$u.props.cell.isLink
+        },
+        // 是否显示表单状态下的必填星号(此组件可能会内嵌入input组件)
+        required: {
+            type: Boolean,
+            default: uni.$u.props.cell.required
+        },
+        // 右侧的图标箭头
+        rightIcon: {
+            type: String,
+            default: uni.$u.props.cell.rightIcon
+        },
+        // 右侧箭头的方向,可选值为:left,up,down
+        arrowDirection: {
+            type: String,
+            default: uni.$u.props.cell.arrowDirection
+        },
+        // 左侧图标样式
+        iconStyle: {
+            type: [Object, String],
+            default: () => {
+				return uni.$u.props.cell.iconStyle
+			}
+        },
+        // 右侧箭头图标的样式
+        rightIconStyle: {
+            type: [Object, String],
+            default: () => {
+				return uni.$u.props.cell.rightIconStyle
+			}
+        },
+        // 标题的样式
+        titleStyle: {
+            type: [Object, String],
+			default: () => {
+				return uni.$u.props.cell.titleStyle
+			}
+        },
+        // 单位元的大小,可选值为large
+        size: {
+            type: String,
+            default: uni.$u.props.cell.size
+        },
+        // 点击cell是否阻止事件传播
+        stop: {
+            type: Boolean,
+            default: uni.$u.props.cell.stop
+        },
+        // 标识符,cell被点击时返回
+        name: {
+            type: [Number, String],
+            default: uni.$u.props.cell.name
+        }
+    }
+}

+ 229 - 0
jxtxkj/node_modules/uview-ui/components/u-cell/u-cell.vue

@@ -0,0 +1,229 @@
+<template>
+	<view class="u-cell" :class="[customClass]" :style="[$u.addStyle(customStyle)]"
+		:hover-class="(!disabled && (clickable || isLink)) ? 'u-cell--clickable' : ''" :hover-stay-time="250"
+		@tap="clickHandler">
+		<view class="u-cell__body" :class="[ center && 'u-cell--center', size === 'large' && 'u-cell__body--large']">
+			<view class="u-cell__body__content">
+				<view class="u-cell__left-icon-wrap" v-if="$slots.icon || icon">
+					<slot name="icon" v-if="$slots.icon">
+					</slot>
+					<u-icon v-else :name="icon" :custom-style="iconStyle" :size="size === 'large' ? 22 : 18"></u-icon>
+				</view>
+				<view class="u-cell__title">
+					<slot name="title">
+						<text v-if="title" class="u-cell__title-text" :style="[titleTextStyle]"
+							:class="[disabled && 'u-cell--disabled', size === 'large' && 'u-cell__title-text--large']">{{ title }}</text>
+					</slot>
+					<slot name="label">
+						<text class="u-cell__label" v-if="label"
+							:class="[disabled && 'u-cell--disabled', size === 'large' && 'u-cell__label--large']">{{ label }}</text>
+					</slot>
+				</view>
+			</view>
+			<slot name="value">
+				<text class="u-cell__value"
+					:class="[disabled && 'u-cell--disabled', size === 'large' && 'u-cell__value--large']"
+					v-if="!$u.test.empty(value)">{{ value }}</text>
+			</slot>
+			<view class="u-cell__right-icon-wrap" v-if="$slots['right-icon'] || isLink"
+				:class="[`u-cell__right-icon-wrap--${arrowDirection}`]">
+				<slot name="right-icon" v-if="$slots['right-icon']">
+				</slot>
+				<u-icon v-else :name="rightIcon" :custom-style="rightIconStyle" :color="disabled ? '#c8c9cc' : 'info'"
+					:size="size === 'large' ? 18 : 16"></u-icon>
+			</view>
+		</view>
+		<u-line v-if="border"></u-line>
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * cell  单元格
+	 * @description cell单元格一般用于一组列表的情况,比如个人中心页,设置页等。
+	 * @tutorial https://uviewui.com/components/cell.html
+	 * @property {String | Number}	title			标题
+	 * @property {String | Number}	label			标题下方的描述信息
+	 * @property {String | Number}	value			右侧的内容
+	 * @property {String}			icon			左侧图标名称,或者图片链接(本地文件建议使用绝对地址)
+	 * @property {Boolean}			disabled		是否禁用cell	
+	 * @property {Boolean}			border			是否显示下边框 (默认 true )
+	 * @property {Boolean}			center			内容是否垂直居中(主要是针对右侧的value部分) (默认 false )
+	 * @property {String}			url				点击后跳转的URL地址
+	 * @property {String}			linkType		链接跳转的方式,内部使用的是uView封装的route方法,可能会进行拦截操作 (默认 'navigateTo' )
+	 * @property {Boolean}			clickable		是否开启点击反馈(表现为点击时加上灰色背景) (默认 false ) 
+	 * @property {Boolean}			isLink			是否展示右侧箭头并开启点击反馈 (默认 false )
+	 * @property {Boolean}			required		是否显示表单状态下的必填星号(此组件可能会内嵌入input组件) (默认 false )
+	 * @property {String}			rightIcon		右侧的图标箭头 (默认 'arrow-right')
+	 * @property {String}			arrowDirection	右侧箭头的方向,可选值为:left,up,down
+	 * @property {Object | String}			rightIconStyle	右侧箭头图标的样式
+	 * @property {Object | String}			titleStyle		标题的样式
+	 * @property {Object | String}			iconStyle		左侧图标样式
+	 * @property {String}			size			单位元的大小,可选值为 large,normal,mini 
+	 * @property {Boolean}			stop			点击cell是否阻止事件传播 (默认 true )
+	 * @property {Object}			customStyle		定义需要用到的外部样式
+	 * 
+	 * @event {Function}			click			点击cell列表时触发
+	 * @example 该组件需要搭配cell-group组件使用,见官方文档示例
+	 */
+	export default {
+		name: 'u-cell',
+		data() {
+			return {
+
+			}
+		},
+		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+		computed: {
+			titleTextStyle() {
+				return uni.$u.addStyle(this.titleStyle)
+			}
+		},
+		methods: {
+			// 点击cell
+			clickHandler(e) {
+				if (this.disabled) return
+				this.$emit('click', {
+					name: this.name
+				})
+				// 如果配置了url(此props参数通过mixin引入)参数,跳转页面
+				this.openPage()
+				// 是否阻止事件传播
+				this.stop && this.preventEvent(e)
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+
+	$u-cell-padding: 10px 15px !default;
+	$u-cell-font-size: 15px !default;
+	$u-cell-line-height: 24px !default;
+	$u-cell-color: $u-main-color !default;
+	$u-cell-icon-size: 16px !default;
+	$u-cell-title-font-size: 15px !default;
+	$u-cell-title-line-height: 22px !default;
+	$u-cell-title-color: $u-main-color !default;
+	$u-cell-label-font-size: 12px !default;
+	$u-cell-label-color: $u-tips-color !default;
+	$u-cell-label-line-height: 18px !default;
+	$u-cell-value-font-size: 14px !default;
+	$u-cell-value-color: $u-content-color !default;
+	$u-cell-clickable-color: $u-bg-color !default;
+	$u-cell-disabled-color: #c8c9cc !default;
+	$u-cell-padding-top-large: 13px !default;
+	$u-cell-padding-bottom-large: 13px !default;
+	$u-cell-value-font-size-large: 15px !default;
+	$u-cell-label-font-size-large: 14px !default;
+	$u-cell-title-font-size-large: 16px !default;
+	$u-cell-left-icon-wrap-margin-right: 4px !default;
+	$u-cell-right-icon-wrap-margin-left: 4px !default;
+	$u-cell-title-flex:1 !default;
+	$u-cell-label-margin-top:5px !default;
+
+
+	.u-cell {
+		&__body {
+			@include flex();
+			/* #ifndef APP-NVUE */
+			box-sizing: border-box;
+			/* #endif */
+			padding: $u-cell-padding;
+			font-size: $u-cell-font-size;
+			color: $u-cell-color;
+			// line-height: $u-cell-line-height;
+			align-items: center;
+
+			&__content {
+				@include flex(row);
+				align-items: center;
+				flex: 1;
+			}
+
+			&--large {
+				padding-top: $u-cell-padding-top-large;
+				padding-bottom: $u-cell-padding-bottom-large;
+			}
+		}
+
+		&__left-icon-wrap,
+		&__right-icon-wrap {
+			@include flex();
+			align-items: center;
+			// height: $u-cell-line-height;
+			font-size: $u-cell-icon-size;
+		}
+
+		&__left-icon-wrap {
+			margin-right: $u-cell-left-icon-wrap-margin-right;
+		}
+
+		&__right-icon-wrap {
+			margin-left: $u-cell-right-icon-wrap-margin-left;
+			transition: transform 0.3s;
+
+			&--up {
+				transform: rotate(-90deg);
+			}
+
+			&--down {
+				transform: rotate(90deg);
+			}
+		}
+
+		&__title {
+			flex: $u-cell-title-flex;
+
+			&-text {
+				font-size: $u-cell-title-font-size;
+				line-height: $u-cell-title-line-height;
+				color: $u-cell-title-color;
+
+				&--large {
+					font-size: $u-cell-title-font-size-large;
+				}
+			}
+
+		}
+
+		&__label {
+			margin-top: $u-cell-label-margin-top;
+			font-size: $u-cell-label-font-size;
+			color: $u-cell-label-color;
+			line-height: $u-cell-label-line-height;
+
+			&--large {
+				font-size: $u-cell-label-font-size-large;
+			}
+		}
+
+		&__value {
+			text-align: right;
+			font-size: $u-cell-value-font-size;
+			line-height: $u-cell-line-height;
+			color: $u-cell-value-color;
+
+			&--large {
+				font-size: $u-cell-value-font-size-large;
+			}
+		}
+
+		&--clickable {
+			background-color: $u-cell-clickable-color;
+		}
+
+		&--disabled {
+			color: $u-cell-disabled-color;
+			/* #ifndef APP-NVUE */
+			cursor: not-allowed;
+			/* #endif */
+		}
+
+		&--center {
+			align-items: center;
+		}
+	}
+</style>

+ 82 - 0
jxtxkj/node_modules/uview-ui/components/u-checkbox-group/props.js

@@ -0,0 +1,82 @@
+export default {
+    props: {
+        // 标识符
+        name: {
+            type: String,
+            default: uni.$u.props.checkboxGroup.name
+        },
+        // 绑定的值
+        value: {
+            type: Array,
+            default: uni.$u.props.checkboxGroup.value
+        },
+        // 形状,circle-圆形,square-方形
+        shape: {
+            type: String,
+            default: uni.$u.props.checkboxGroup.shape
+        },
+        // 是否禁用全部checkbox
+        disabled: {
+            type: Boolean,
+            default: uni.$u.props.checkboxGroup.disabled
+        },
+
+        // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值
+        activeColor: {
+            type: String,
+            default: uni.$u.props.checkboxGroup.activeColor
+        },
+        // 未选中的颜色
+        inactiveColor: {
+            type: String,
+            default: uni.$u.props.checkboxGroup.inactiveColor
+        },
+
+        // 整个组件的尺寸,默认px
+        size: {
+            type: [String, Number],
+            default: uni.$u.props.checkboxGroup.size
+        },
+        // 布局方式,row-横向,column-纵向
+        placement: {
+            type: String,
+            default: uni.$u.props.checkboxGroup.placement
+        },
+        // label的字体大小,px单位
+        labelSize: {
+            type: [String, Number],
+            default: uni.$u.props.checkboxGroup.labelSize
+        },
+        // label的字体颜色
+        labelColor: {
+            type: [String],
+            default: uni.$u.props.checkboxGroup.labelColor
+        },
+        // 是否禁止点击文本操作
+        labelDisabled: {
+            type: Boolean,
+            default: uni.$u.props.checkboxGroup.labelDisabled
+        },
+        // 图标颜色
+        iconColor: {
+            type: String,
+            default: uni.$u.props.checkboxGroup.iconColor
+        },
+        // 图标的大小,单位px
+        iconSize: {
+            type: [String, Number],
+            default: uni.$u.props.checkboxGroup.iconSize
+        },
+        // 勾选图标的对齐方式,left-左边,right-右边
+        iconPlacement: {
+            type: String,
+            default: uni.$u.props.checkboxGroup.iconPlacement
+        },
+        // 竖向配列时,是否显示下划线
+        borderBottom: {
+            type: Boolean,
+            default: uni.$u.props.checkboxGroup.borderBottom
+        }
+
+    }
+}

+ 103 - 0
jxtxkj/node_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue

@@ -0,0 +1,103 @@
+<template>
+	<view
+	    class="u-checkbox-group"
+	    :class="bemClass"
+	>
+		<slot></slot>
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * checkboxGroup 复选框组
+	 * @description 复选框组件一般用于需要多个选择的场景,该组件功能完整,使用方便
+	 * @tutorial https://www.uviewui.com/components/checkbox.html
+	 * @property {String}			name			标识符 
+	 * @property {Array}			value			绑定的值
+	 * @property {String}			shape			形状,circle-圆形,square-方形 (默认 'square' )
+	 * @property {Boolean}			disabled		是否禁用全部checkbox (默认 false )
+	 * @property {String}			activeColor		选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 (默认 '#2979ff' )
+	 * @property {String}			inactiveColor	未选中的颜色 (默认 '#c8c9cc' )
+	 * @property {String | Number}	size			整个组件的尺寸 单位px (默认 18 )
+	 * @property {String}			placement		布局方式,row-横向,column-纵向 (默认 'row' )
+	 * @property {String | Number}	labelSize		label的字体大小,px单位  (默认 14 )
+	 * @property {String}			labelColor		label的字体颜色 (默认 '#303133' )
+	 * @property {Boolean}			labelDisabled	是否禁止点击文本操作 (默认 false )
+	 * @property {String}			iconColor		图标颜色 (默认 '#ffffff' )
+	 * @property {String | Number}	iconSize		图标的大小,单位px (默认 12 )
+	 * @property {String}			iconPlacement	勾选图标的对齐方式,left-左边,right-右边  (默认 'left' )
+	 * @property {Boolean}			borderBottom	placement为row时,是否显示下边框 (默认 false )
+	 * @event {Function}	change	任一个checkbox状态发生变化时触发,回调为一个对象
+	 * @event {Function}	input	修改通过v-model绑定的值时触发,回调为一个对象
+	 * @example <u-checkbox-group></u-checkbox-group>
+	 */
+	export default {
+		name: 'u-checkbox-group',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+		computed: {
+			// 这里computed的变量,都是子组件u-checkbox需要用到的,由于头条小程序的兼容性差异,子组件无法实时监听父组件参数的变化
+			// 所以需要手动通知子组件,这里返回一个parentData变量,供watch监听,在其中去通知每一个子组件重新从父组件(u-checkbox-group)
+			// 拉取父组件新的变化后的参数
+			parentData() {
+				return [this.value, this.disabled, this.inactiveColor, this.activeColor, this.size, this.labelDisabled, this.shape,
+					this.iconSize, this.borderBottom, this.placement
+				]
+			},
+			bemClass() {
+				// this.bem为一个computed变量,在mixin中
+				return this.bem('checkbox-group', ['placement'])
+			},
+		},
+		watch: {
+			// 当父组件需要子组件需要共享的参数发生了变化,手动通知子组件
+			parentData() {
+				if (this.children.length) {
+					this.children.map(child => {
+						// 判断子组件(u-checkbox)如果有init方法的话,就就执行(执行的结果是子组件重新从父组件拉取了最新的值)
+						typeof(child.init) === 'function' && child.init()
+					})
+				}
+			},
+		},
+		data() {
+			return {
+
+			}
+		},
+		created() {
+			this.children = []
+		},
+		methods: {
+			// 将其他的checkbox设置为未选中的状态
+			unCheckedOther(childInstance) {
+				const values = []
+				this.children.map(child => {
+					// 将被选中的checkbox,放到数组中返回
+					if (child.isChecked) {
+						values.push(child.name)
+					}
+				})
+				// 发出事件
+				this.$emit('change', values)
+				// 修改通过v-model绑定的值
+				this.$emit('input', values)
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+
+	.u-checkbox-group {
+
+		&--row {
+			@include flex;
+		}
+
+		&--column {
+			@include flex(column);
+		}
+	}
+</style>

+ 69 - 0
jxtxkj/node_modules/uview-ui/components/u-checkbox/props.js

@@ -0,0 +1,69 @@
+export default {
+    props: {
+        // checkbox的名称
+        name: {
+            type: [String, Number, Boolean],
+            default: uni.$u.props.checkbox.name
+        },
+        // 形状,square为方形,circle为圆型
+        shape: {
+            type: String,
+            default: uni.$u.props.checkbox.shape
+        },
+        // 整体的大小
+        size: {
+            type: [String, Number],
+            default: uni.$u.props.checkbox.size
+        },
+        // 是否默认选中
+        checked: {
+            type: Boolean,
+            default: uni.$u.props.checkbox.checked
+        },
+        // 是否禁用
+        disabled: {
+            type: [String, Boolean],
+            default: uni.$u.props.checkbox.disabled
+        },
+        // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值
+        activeColor: {
+            type: String,
+            default: uni.$u.props.checkbox.activeColor
+        },
+        // 未选中的颜色
+        inactiveColor: {
+            type: String,
+            default: uni.$u.props.checkbox.inactiveColor
+        },
+        // 图标的大小,单位px
+        iconSize: {
+            type: [String, Number],
+            default: uni.$u.props.checkbox.iconSize
+        },
+        // 图标颜色
+        iconColor: {
+            type: String,
+            default: uni.$u.props.checkbox.iconColor
+        },
+        // label提示文字,因为nvue下,直接slot进来的文字,由于特殊的结构,无法修改样式
+        label: {
+            type: [String, Number],
+            default: uni.$u.props.checkbox.label
+        },
+        // label的字体大小,px单位
+        labelSize: {
+            type: [String, Number],
+            default: uni.$u.props.checkbox.labelSize
+        },
+        // label的颜色
+        labelColor: {
+            type: String,
+            default: uni.$u.props.checkbox.labelColor
+        },
+        // 是否禁止点击提示语选中复选框
+        labelDisabled: {
+            type: [String, Boolean],
+            default: uni.$u.props.checkbox.labelDisabled
+        }
+    }
+}

+ 344 - 0
jxtxkj/node_modules/uview-ui/components/u-checkbox/u-checkbox.vue

@@ -0,0 +1,344 @@
+<template>
+	<view
+	    class="u-checkbox"
+	    :style="[checkboxStyle]"
+	    @tap.stop="wrapperClickHandler"
+	    :class="[`u-checkbox-label--${parentData.iconPlacement}`, parentData.borderBottom && parentData.placement === 'column' && 'u-border-bottom']"
+	>
+		<view
+		    class="u-checkbox__icon-wrap"
+		    @tap.stop="iconClickHandler"
+		    :class="iconClasses"
+		    :style="[iconWrapStyle]"
+		>
+			<slot name="icon">
+				<u-icon
+				    class="u-checkbox__icon-wrap__icon"
+				    name="checkbox-mark"
+				    :size="elIconSize"
+				    :color="elIconColor"
+				/>
+			</slot>
+		</view>
+		<text
+		    @tap.stop="labelClickHandler"
+		    :style="{
+				color: elDisabled ? elInactiveColor : elLabelColor,
+				fontSize: elLabelSize,
+				lineHeight: elLabelSize
+			}"
+		>{{label}}</text>
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * checkbox  复选框
+	 * @description 复选框组件一般用于需要多个选择的场景,该组件功能完整,使用方便
+	 * @tutorial https://uviewui.com/components/checkbox.html
+	 * @property {String | Number | Boolean}	name			checkbox组件的标示符
+	 * @property {String}						shape			形状,square为方形,circle为圆型
+	 * @property {String | Number}				size			整体的大小
+	 * @property {Boolean}						checked			是否默认选中
+	 * @property {String | Boolean}				disabled		是否禁用
+	 * @property {String}						activeColor		选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值
+	 * @property {String}						inactiveColor	未选中的颜色
+	 * @property {String | Number}				iconSize		图标的大小,单位px
+	 * @property {String}						iconColor		图标颜色
+	 * @property {String | Number}				label			label提示文字,因为nvue下,直接slot进来的文字,由于特殊的结构,无法修改样式
+	 * @property {String}						labelColor 		label的颜色
+	 * @property {String | Number}				labelSize		label的字体大小,px单位
+	 * @property {String | Boolean}				labelDisabled	是否禁止点击提示语选中复选框
+	 * @property {Object}						customStyle		定义需要用到的外部样式
+	 * 
+	 * @event {Function}	change	任一个checkbox状态发生变化时触发,回调为一个对象
+	 * @example <u-checkbox v-model="checked" :disabled="false">天涯</u-checkbox>
+	 */
+	export default {
+		name: "u-checkbox",
+		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+		data() {
+			return {
+				isChecked: false,
+				// 父组件的默认值,因为头条小程序不支持在computed中使用this.parent.shape的形式
+				// 故只能使用如此方法
+				parentData: {
+					iconSize: 12,
+					labelDisabled: null,
+					disabled: null,
+					shape: 'square',
+					activeColor: null,
+					inactiveColor: null,
+					size: 18,
+					value: null,
+					iconColor: null,
+					placement: 'row',
+					borderBottom: false,
+					iconPlacement: 'left'
+				}
+			}
+		},
+		computed: {
+			// 是否禁用,如果父组件u-raios-group禁用的话,将会忽略子组件的配置
+			elDisabled() {
+				return this.disabled !== '' ? this.disabled : this.parentData.disabled !== null ? this.parentData.disabled : false;
+			},
+			// 是否禁用label点击
+			elLabelDisabled() {
+				return this.labelDisabled !== '' ? this.labelDisabled : this.parentData.labelDisabled !== null ? this.parentData.labelDisabled :
+					false;
+			},
+			// 组件尺寸,对应size的值,默认值为21px
+			elSize() {
+				return this.size ? this.size : (this.parentData.size ? this.parentData.size : 21);
+			},
+			// 组件的勾选图标的尺寸,默认12px
+			elIconSize() {
+				return this.iconSize ? this.iconSize : (this.parentData.iconSize ? this.parentData.iconSize : 12);
+			},
+			// 组件选中激活时的颜色
+			elActiveColor() {
+				return this.activeColor ? this.activeColor : (this.parentData.activeColor ? this.parentData.activeColor : '#2979ff');
+			},
+			// 组件选未中激活时的颜色
+			elInactiveColor() {
+				return this.inactiveColor ? this.inactiveColor : (this.parentData.inactiveColor ? this.parentData.inactiveColor :
+					'#c8c9cc');
+			},
+			// label的颜色
+			elLabelColor() {
+				return this.labelColor ? this.labelColor : (this.parentData.labelColor ? this.parentData.labelColor : '#606266')
+			},
+			// 组件的形状
+			elShape() {
+				return this.shape ? this.shape : (this.parentData.shape ? this.parentData.shape : 'circle');
+			},
+			// label大小
+			elLabelSize() {
+				return uni.$u.addUnit(this.labelSize ? this.labelSize : (this.parentData.labelSize ? this.parentData.labelSize :
+					'15'))
+			},
+			elIconColor() {
+				const iconColor = this.iconColor ? this.iconColor : (this.parentData.iconColor ? this.parentData.iconColor :
+					'#ffffff');
+				// 图标的颜色
+				if (this.elDisabled) {
+					// disabled状态下,已勾选的checkbox图标改为elInactiveColor
+					return this.isChecked ? this.elInactiveColor : 'transparent'
+				} else {
+					return this.isChecked ? iconColor : 'transparent'
+				}
+			},
+			iconClasses() {
+				let classes = []
+				// 组件的形状
+				classes.push('u-checkbox__icon-wrap--' + this.elShape)
+				if (this.elDisabled) {
+					classes.push('u-checkbox__icon-wrap--disabled')
+				}
+				if (this.isChecked && this.elDisabled) {
+					classes.push('u-checkbox__icon-wrap--disabled--checked')
+				}
+				// 支付宝,头条小程序无法动态绑定一个数组类名,否则解析出来的结果会带有",",而导致失效
+				// #ifdef MP-ALIPAY || MP-TOUTIAO
+				classes = classes.join(' ')
+				// #endif
+				return classes
+			},
+			iconWrapStyle() {
+				// checkbox的整体样式
+				const style = {}
+				style.backgroundColor = this.isChecked && !this.elDisabled ? this.elActiveColor : '#ffffff'
+				style.borderColor = this.isChecked && !this.elDisabled ? this.elActiveColor : this.elInactiveColor
+				style.width = uni.$u.addUnit(this.elSize)
+				style.height = uni.$u.addUnit(this.elSize)
+				// 如果是图标在右边的话,移除它的右边距
+				if (this.parentData.iconPlacement === 'right') {
+					style.marginRight = 0
+				}
+				return style
+			},
+			checkboxStyle() {
+				const style = {}
+				if (this.parentData.borderBottom && this.parentData.placement === 'row') {
+					uni.$u.error('检测到您将borderBottom设置为true,需要同时将u-checkbox-group的placement设置为column才有效')
+				}
+				// 当父组件设置了显示下边框并且排列形式为纵向时,给内容和边框之间加上一定间隔
+				if (this.parentData.borderBottom && this.parentData.placement === 'column') {
+					style.paddingBottom = '8px'
+				}
+				return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle))
+			}
+		},
+		mounted() {
+			this.init()
+		},
+		methods: {
+			init() {
+				// 支付宝小程序不支持provide/inject,所以使用这个方法获取整个父组件,在created定义,避免循环引用
+				this.updateParentData()
+				if (!this.parent) {
+					uni.$u.error('u-checkbox必须搭配u-checkbox-group组件使用')
+				}
+				// 设置初始化时,是否默认选中的状态,父组件u-checkbox-group的value可能是array,所以额外判断
+				if (this.checked) {
+					this.isChecked = true
+				} else if (uni.$u.test.array(this.parentData.value)) {
+					// 查找数组是是否存在this.name元素值
+					this.isChecked = this.parentData.value.some(item => {
+						return item === this.name
+					})
+				}
+			},
+			updateParentData() {
+				this.getParentData('u-checkbox-group')
+			},
+			// 横向两端排列时,点击组件即可触发选中事件
+			wrapperClickHandler(e) {
+				this.parentData.iconPlacement === 'right' && this.iconClickHandler(e)
+			},
+			// 点击图标
+			iconClickHandler(e) {
+				this.preventEvent(e)
+				// 如果整体被禁用,不允许被点击
+				if (!this.elDisabled) {
+					this.setRadioCheckedStatus()
+				}
+			},
+			// 点击label
+			labelClickHandler(e) {
+				this.preventEvent(e)
+				// 如果按钮整体被禁用或者label被禁用,则不允许点击文字修改状态
+				if (!this.elLabelDisabled && !this.elDisabled) {
+					this.setRadioCheckedStatus()
+				}
+			},
+			emitEvent() {
+				this.$emit('change', this.isChecked)
+				// 尝试调用u-form的验证方法,进行一定延迟,否则微信小程序更新可能会不及时
+				this.$nextTick(() => {
+					uni.$u.formValidate(this, 'change')
+				})
+			},
+			// 改变组件选中状态
+			// 这里的改变的依据是,更改本组件的checked值为true,同时通过父组件遍历所有u-checkbox实例
+			// 将本组件外的其他u-checkbox的checked都设置为false(都被取消选中状态),因而只剩下一个为选中状态
+			setRadioCheckedStatus() {
+				// 将本组件标记为与原来相反的状态
+				this.isChecked = !this.isChecked
+				this.emitEvent()
+				typeof this.parent.unCheckedOther === 'function' && this.parent.unCheckedOther(this)
+			}
+		},
+		watch:{
+			checked(){
+				this.isChecked = this.checked
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+	$u-checkbox-icon-wrap-margin-right:6px !default;
+	$u-checkbox-icon-wrap-font-size:6px !default;
+	$u-checkbox-icon-wrap-border-width:1px !default;
+	$u-checkbox-icon-wrap-border-color:#c8c9cc !default;
+	$u-checkbox-icon-wrap-icon-line-height:0 !default;
+	$u-checkbox-icon-wrap-circle-border-radius:100% !default;
+	$u-checkbox-icon-wrap-square-border-radius:3px !default;
+	$u-checkbox-icon-wrap-checked-color:#fff !default;
+	$u-checkbox-icon-wrap-checked-background-color:red !default;
+	$u-checkbox-icon-wrap-checked-border-color:#2979ff !default;
+	$u-checkbox-icon-wrap-disabled-background-color:#ebedf0 !default;
+	$u-checkbox-icon-wrap-disabled-checked-color:#c8c9cc !default;
+	$u-checkbox-label-margin-left:5px !default;
+	$u-checkbox-label-margin-right:12px !default;
+	$u-checkbox-label-color:$u-content-color !default;
+	$u-checkbox-label-font-size:15px !default;
+	$u-checkbox-label-disabled-color:#c8c9cc !default;
+
+	.u-checkbox {
+		/* #ifndef APP-NVUE */
+		@include flex(row);
+		/* #endif */
+		overflow: hidden;
+		flex-direction: row;
+		align-items: center;
+
+		&-label--left {
+			flex-direction: row
+		}
+
+		&-label--right {
+			flex-direction: row-reverse;
+			justify-content: space-between
+		}
+
+		&__icon-wrap {
+			/* #ifndef APP-NVUE */
+			box-sizing: border-box;
+			// nvue下,border-color过渡有问题
+			transition-property: border-color, background-color, color;
+			transition-duration: 0.2s;
+			/* #endif */
+			color: $u-content-color;
+			@include flex;
+			align-items: center;
+			justify-content: center;
+			color: transparent;
+			text-align: center;
+			margin-right: $u-checkbox-icon-wrap-margin-right;
+
+			font-size: $u-checkbox-icon-wrap-font-size;
+			border-width: $u-checkbox-icon-wrap-border-width;
+			border-color: $u-checkbox-icon-wrap-border-color;
+			border-style: solid;
+
+			/* #ifdef MP-TOUTIAO */
+			// 头条小程序兼容性问题,需要设置行高为0,否则图标偏下
+			&__icon {
+				line-height: $u-checkbox-icon-wrap-icon-line-height;
+			}
+
+			/* #endif */
+
+			&--circle {
+				border-radius: $u-checkbox-icon-wrap-circle-border-radius;
+			}
+
+			&--square {
+				border-radius: $u-checkbox-icon-wrap-square-border-radius;
+			}
+
+			&--checked {
+				color: $u-checkbox-icon-wrap-checked-color;
+				background-color: $u-checkbox-icon-wrap-checked-background-color;
+				border-color: $u-checkbox-icon-wrap-checked-border-color;
+			}
+
+			&--disabled {
+				background-color: $u-checkbox-icon-wrap-disabled-background-color !important;
+			}
+
+			&--disabled--checked {
+				color: $u-checkbox-icon-wrap-disabled-checked-color !important;
+			}
+		}
+
+		&__label {
+			/* #ifndef APP-NVUE */
+			word-wrap: break-word;
+			/* #endif */
+			margin-left: $u-checkbox-label-margin-left;
+			margin-right: $u-checkbox-label-margin-right;
+			color: $u-checkbox-label-color;
+			font-size: $u-checkbox-label-font-size;
+
+			&--disabled {
+				color: $u-checkbox-label-disabled-color;
+			}
+		}
+	}
+</style>

+ 8 - 0
jxtxkj/node_modules/uview-ui/components/u-circle-progress/props.js

@@ -0,0 +1,8 @@
+export default {
+    props: {
+        percentage: {
+            type: [String, Number],
+            default: uni.$u.props.circleProgress.percentage
+        }
+    }
+}

+ 198 - 0
jxtxkj/node_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue

@@ -0,0 +1,198 @@
+<template>
+	<view class="u-circle-progress">
+		<view class="u-circle-progress__left">
+			<view
+			    class="u-circle-progress__left__circle"
+			    :style="[leftSyle]"
+			    ref="left-circle"
+			>
+
+			</view>
+		</view>
+		<view
+		    class="u-circle-progress__right"
+		>
+			<view
+			    class="u-circle-progress__right__circle"
+			    ref="right-circle"
+				:style="[rightSyle]"
+			>
+
+			</view>
+		</view>
+		<view class="u-circle-progress__circle">
+
+		</view>
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	// #ifdef APP-NVUE
+	const animation = uni.requireNativePlugin('animation')
+	// #endif
+	/**
+	 * CircleProgress 圆形进度条 TODO: 待完善 
+	 * @description 展示操作或任务的当前进度,比如上传文件,是一个圆形的进度环。
+	 * @tutorial https://www.uviewui.com/components/circleProgress.html
+	 * @property {String | Number}	percentage	圆环进度百分比值,为数值类型,0-100 (默认 30 )
+	 * @example
+	 */
+	export default {
+		name: 'u-circle-progress',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+		data() {
+			return {
+				leftBorderColor: 'rgb(200, 200, 200)',
+				rightBorderColor: 'rgb(200, 200, 200)',
+			}
+		},
+		computed: {
+			leftSyle() {
+				const style = {}
+				style.borderTopColor = this.leftBorderColor
+				style.borderRightColor = this.leftBorderColor
+				return style
+			},
+			rightSyle() {
+				const style = {}
+				style.borderLeftColor = this.rightBorderColor
+				style.borderBottomColor = this.rightBorderColor
+				return style
+			}
+		},
+		mounted() {
+			uni.$u.sleep().then(() => {
+				this.rightBorderColor = 'rgb(66, 185, 131)'
+				// this.init()
+			})
+		},
+		methods: {
+			init() {
+				animation.transition(this.$refs['right-circle'].ref, {
+					styles: {
+						transform: 'rotate(45deg)',
+						transformOrigin: 'center center'
+					},
+				}, () => {
+					this.rightBorderColor = 'rgb(66, 185, 131)'
+					// animation.transition(this.$refs['right-circle'].ref, {
+					// 	styles: {
+					// 		transform: 'rotate(225deg)',
+					// 		transformOrigin: 'center center'
+					// 	},
+					// 	duration: 3000,
+					// }, () => {
+					// 	animation.transition(this.$refs['left-circle'].ref, {
+					// 		styles: {
+					// 			transform: 'rotate(45deg)',
+					// 			transformOrigin: 'center center'
+					// 		},
+					// 	}, () => {
+					// 		this.leftBorderColor = 'rgb(66, 185, 131)'
+					// 		animation.transition(this.$refs['left-circle'].ref, {
+					// 			styles: {
+					// 				transform: 'rotate(225deg)',
+					// 				transformOrigin: 'center center'
+					// 			},
+					// 			duration: 1500,
+					// 		}, () => {
+
+					// 		})
+					// 	})
+					// })
+				})
+
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+
+	.u-circle-progress {
+		@include flex(row);
+		position: relative;
+		border-radius: 100px;
+		height: 100px;
+		width: 100px;
+		// transform: rotate(0deg);
+		// background-color: rgb(66, 185, 131);
+		background-color: rgb(200, 200, 200);
+		overflow: hidden;
+		justify-content: space-between;
+
+		&__circle {
+			border-radius: 100px;
+			height: 90px;
+			width: 90px;
+			transform: translate(-50%, -50%);
+			background-color: rgb(255, 255, 255);
+			left: 50px;
+			top: 50px;
+			position: absolute;
+		}
+
+		&__left {
+			position: absolute;
+			left: 0;
+			width: 50px;
+			height: 100px;
+			overflow: hidden;
+			box-sizing: border-box;
+			// background-color: rgb(66, 185, 131);
+			// background-color: rgb(200, 200, 200);
+			// transform-origin: left center;
+
+			&__circle {
+				box-sizing: border-box;
+				// background-color: red;
+				border-left-color: transparent;
+				border-bottom-color: transparent;
+				border-top-left-radius: 50px;
+				border-top-right-radius: 50px;
+				border-bottom-right-radius: 50px;
+				// border-left-color: rgb(66, 185, 131);
+				// border-bottom-color: rgb(66, 185, 131);
+				border-top-color: rgb(66, 185, 131);
+				border-right-color: rgb(66, 185, 131);
+				border-width: 5px;
+				width: 100px;
+				height: 100px;
+				transform: rotate(225deg);
+				// border-radius: 100px;
+			}
+		}
+
+		&__right {
+			position: absolute;
+			right: 0;
+			width: 50px;
+			height: 100px;
+			overflow: hidden;
+
+			&__circle {
+				position: absolute;
+				right: 0;
+				box-sizing: border-box;
+				// background-color: red;
+				border-top-color: transparent;
+				border-right-color: transparent;
+				border-top-left-radius: 50px;
+				border-bottom-left-radius: 50px;
+				border-bottom-right-radius: 50px;
+				// border-left-color: rgb(66, 185, 131);
+				// border-bottom-color: rgb(66, 185, 131);
+				border-left-color: rgb(200, 200, 200);
+				border-bottom-color: rgb(200, 200, 200);
+				border-width: 5px;
+				width: 100px;
+				height: 100px;
+				transform: rotate(45deg);
+				transform-origin: center center;
+				// border-radius: 100px;
+			}
+		}
+	}
+</style>

+ 74 - 0
jxtxkj/node_modules/uview-ui/components/u-code-input/props.js

@@ -0,0 +1,74 @@
+export default {
+    props: {
+        // 最大输入长度
+        maxlength: {
+            type: [String, Number],
+            default: uni.$u.props.codeInput.maxlength
+        },
+        // 是否用圆点填充
+        dot: {
+            type: Boolean,
+            default: uni.$u.props.codeInput.dot
+        },
+        // 显示模式,box-盒子模式,line-底部横线模式
+        mode: {
+            type: String,
+            default: uni.$u.props.codeInput.mode
+        },
+        // 是否细边框
+        hairline: {
+            type: Boolean,
+            default: uni.$u.props.codeInput.hairline
+        },
+        // 字符间的距离
+        space: {
+            type: [String, Number],
+            default: uni.$u.props.codeInput.space
+        },
+        // 预置值
+        value: {
+            type: [String, Number],
+            default: uni.$u.props.codeInput.value
+        },
+        // 是否自动获取焦点
+        focus: {
+            type: Boolean,
+            default: uni.$u.props.codeInput.focus
+        },
+        // 字体是否加粗
+        bold: {
+            type: Boolean,
+            default: uni.$u.props.codeInput.bold
+        },
+        // 字体颜色
+        color: {
+            type: String,
+            default: uni.$u.props.codeInput.color
+        },
+        // 字体大小
+        fontSize: {
+            type: [String, Number],
+            default: uni.$u.props.codeInput.fontSize
+        },
+        // 输入框的大小,宽等于高
+        size: {
+            type: [String, Number],
+            default: uni.$u.props.codeInput.size
+        },
+        // 是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true
+        disabledKeyboard: {
+            type: Boolean,
+            default: uni.$u.props.codeInput.disabledKeyboard
+        },
+        // 边框和线条颜色
+        borderColor: {
+            type: String,
+            default: uni.$u.props.codeInput.borderColor
+        },
+		// 是否禁止输入"."符号
+		disabledDot: {
+			type: Boolean,
+			default: uni.$u.props.codeInput.disabledDot
+		}
+    }
+}

+ 251 - 0
jxtxkj/node_modules/uview-ui/components/u-code-input/u-code-input.vue

@@ -0,0 +1,251 @@
+<template>
+	<view class="u-code-input">
+		<view
+			class="u-code-input__item"
+			:style="[itemStyle(index)]"
+			v-for="(item, index) in codeLength"
+			:key="index"
+		>
+			<view
+				class="u-code-input__item__dot"
+				v-if="dot && codeArray.length > index"
+			></view>
+			<text
+				v-else
+				:style="{
+					fontSize: $u.addUnit(fontSize),
+					fontWeight: bold ? 'bold' : 'normal',
+					color: color
+				}"
+			>{{codeArray[index]}}</text>
+			<view
+				class="u-code-input__item__line"
+				v-if="mode === 'line'"
+				:style="[lineStyle]"
+			></view>
+			<!-- #ifndef APP-PLUS -->
+			<view v-if="isFocus && codeArray.length === index" :style="{backgroundColor: color}" class="u-code-input__item__cursor"></view>
+			<!-- #endif -->
+		</view>
+		<input
+			:disabled="disabledKeyboard"
+			type="number"
+			:focus="focus"
+			:value="inputValue"
+			:maxlength="maxlength"
+			class="u-code-input__input"
+			@input="inputHandler"
+			:style="{
+				height: $u.addUnit(size) 
+			}"
+			@focus="isFocus = true"
+			@blur="isFocus = false"
+		/>
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * CodeInput 验证码输入
+	 * @description 该组件一般用于验证用户短信验证码的场景,也可以结合uView的键盘组件使用
+	 * @tutorial https://www.uviewui.com/components/codeInput.html
+	 * @property {String | Number}	maxlength			最大输入长度 (默认 6 )
+	 * @property {Boolean}			dot					是否用圆点填充 (默认 false )
+	 * @property {String}			mode				显示模式,box-盒子模式,line-底部横线模式 (默认 'box' )
+	 * @property {Boolean}			hairline			是否细边框 (默认 false )
+	 * @property {String | Number}	space				字符间的距离 (默认 10 )
+	 * @property {String | Number}	value				预置值
+	 * @property {Boolean}			focus				是否自动获取焦点 (默认 false )
+	 * @property {Boolean}			bold				字体和输入横线是否加粗 (默认 false )
+	 * @property {String}			color				字体颜色 (默认 '#606266' )
+	 * @property {String | Number}	fontSize			字体大小,单位px (默认 18 )
+	 * @property {String | Number}	size				输入框的大小,宽等于高 (默认 35 )
+	 * @property {Boolean}			disabledKeyboard	是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true (默认 false )
+	 * @property {String}			borderColor			边框和线条颜色 (默认 '#c9cacc' )
+	 * @property {Boolean}			disabledDot			是否禁止输入"."符号 (默认 true )
+	 * 
+	 * @event {Function}	change	输入内容发生改变时触发,具体见上方说明			value:当前输入的值
+	 * @event {Function}	finish	输入字符个数达maxlength值时触发,见上方说明	value:当前输入的值
+	 * @example	<u-code-input v-model="value4" :focus="true"></u-code-input>
+	 */
+	export default {
+		name: 'u-code-input',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+		data() {
+			return {
+				inputValue: '',
+				isFocus: this.focus
+			}
+		},
+		watch: {
+			value: {
+				immediate: true,
+				handler(val) {
+					// 转为字符串,超出部分截掉
+					this.inputValue = String(val).substring(0, this.maxlength)
+				}
+			},
+		},
+		computed: {
+			// 根据长度,循环输入框的个数,因为头条小程序数值不能用于v-for
+			codeLength() {
+				return new Array(Number(this.maxlength))
+			},
+			// 循环item的样式
+			itemStyle() {
+				return index => {
+					const addUnit = uni.$u.addUnit
+					const style = {
+						width: addUnit(this.size),
+						height: addUnit(this.size)
+					}
+					// 盒子模式下,需要额外进行处理
+					if (this.mode === 'box') {
+						// 设置盒子的边框,如果是细边框,则设置为0.5px宽度
+						style.border = `${this.hairline ? 0.5 : 1}px solid ${this.borderColor}`
+						// 如果盒子间距为0的话
+						if (uni.$u.getPx(this.space) === 0) {
+							// 给第一和最后一个盒子设置圆角
+							if (index === 0) {
+								style.borderTopLeftRadius = '3px'
+								style.borderBottomLeftRadius = '3px'
+							}
+							if (index === this.codeLength.length - 1) {
+								style.borderTopRightRadius = '3px'
+								style.borderBottomRightRadius = '3px'
+							}
+							// 最后一个盒子的右边框需要保留
+							if (index !== this.codeLength.length - 1) {
+								style.borderRight = 'none'
+							}
+						}
+					}
+					if (index !== this.codeLength.length - 1) {
+						// 设置验证码字符之间的距离,通过margin-right设置,最后一个字符,无需右边框
+						style.marginRight = addUnit(this.space)
+					} else {
+						// 最后一个盒子的有边框需要保留
+						style.marginRight = 0
+					}
+
+					return style
+				}
+			},
+			// 将输入的值,转为数组,给item历遍时,根据当前的索引显示数组的元素
+			codeArray() {
+				return String(this.inputValue).split('')
+			},
+			// 下划线模式下,横线的样式
+			lineStyle() {
+				const style = {}
+				style.height = this.hairline ? '2px' : '4px'
+				style.width = uni.$u.addUnit(this.size)
+				// 线条模式下,背景色即为边框颜色
+				style.backgroundColor = this.borderColor
+				return style
+			}
+		},
+		methods: {
+			// 监听输入框的值发生变化
+			inputHandler(e) {
+				const value = e.detail.value
+				this.inputValue = value
+				// 是否允许输入“.”符号
+				if(this.disabledDot) {
+					this.$nextTick(() => {
+						this.inputValue = value.replace('.', '')
+					})
+				}
+				// 未达到maxlength之前,发送change事件,达到后发送finish事件
+				this.$emit('change', value)
+				// 修改通过v-model双向绑定的值
+				this.$emit('input', value)
+				// 达到用户指定输入长度时,发出完成事件
+				if (String(value).length >= Number(this.maxlength)) {
+					this.$emit('finish', value)
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+	$u-code-input-cursor-width: 1px;
+	$u-code-input-cursor-height: 40%;
+	$u-code-input-cursor-animation-duration: 1s;
+	$u-code-input-cursor-animation-name: u-cursor-flicker;
+
+	.u-code-input {
+		@include flex;
+		position: relative;
+		overflow: hidden;
+
+		&__item {
+			@include flex;
+			justify-content: center;
+			align-items: center;
+			position: relative;
+
+			&__text {
+				font-size: 15px;
+				color: $u-content-color;
+			}
+
+			&__dot {
+				width: 7px;
+				height: 7px;
+				border-radius: 100px;
+				background-color: $u-content-color;
+			}
+
+			&__line {
+				position: absolute;
+				bottom: 0;
+				height: 4px;
+				border-radius: 100px;
+				width: 40px;
+				background-color: $u-content-color;
+			}
+			/* #ifndef APP-PLUS */
+			&__cursor {
+				position: absolute;
+				top: 50%;
+				left: 50%;
+				transform: translate(-50%,-50%);
+				width: $u-code-input-cursor-width;
+				height: $u-code-input-cursor-height;
+				animation: $u-code-input-cursor-animation-duration u-cursor-flicker infinite;
+			}
+			/* #endif */
+			
+		}
+
+		&__input {
+			// 之所以需要input输入框,是因为有它才能唤起键盘
+			// 这里将它设置为两倍的屏幕宽度,再将左边的一半移出屏幕,为了不让用户看到输入的内容
+			position: absolute;
+			left: -750rpx;
+			width: 1500rpx;
+			top: 0;
+			background-color: transparent;
+			text-align: left;
+		}
+	}
+	
+	/* #ifndef APP-PLUS */
+	@keyframes u-cursor-flicker {
+		0% {
+		    opacity: 0;
+		}
+		50% {
+		    opacity: 1;
+		}
+		100% {
+		    opacity: 0;
+		}
+	}
+	/* #endif */
+
+</style>

+ 34 - 0
jxtxkj/node_modules/uview-ui/components/u-code/props.js

@@ -0,0 +1,34 @@
+export default {
+    props: {
+        // 倒计时总秒数
+        seconds: {
+            type: [String, Number],
+            default: uni.$u.props.code.seconds
+        },
+        // 尚未开始时提示
+        startText: {
+            type: String,
+            default: uni.$u.props.code.startText
+        },
+        // 正在倒计时中的提示
+        changeText: {
+            type: String,
+            default: uni.$u.props.code.changeText
+        },
+        // 倒计时结束时的提示
+        endText: {
+            type: String,
+            default: uni.$u.props.code.endText
+        },
+        // 是否在H5刷新或各端返回再进入时继续倒计时
+        keepRunning: {
+            type: Boolean,
+            default: uni.$u.props.code.keepRunning
+        },
+        // 为了区分多个页面,或者一个页面多个倒计时组件本地存储的继续倒计时变了
+        uniqueKey: {
+            type: String,
+            default: uni.$u.props.code.uniqueKey
+        }
+    }
+}

+ 129 - 0
jxtxkj/node_modules/uview-ui/components/u-code/u-code.vue

@@ -0,0 +1,129 @@
+<template>
+	<view class="u-code">
+		<!-- 此组件功能由js完成,无需写html逻辑 -->
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * Code 验证码输入框
+	 * @description 考虑到用户实际发送验证码的场景,可能是一个按钮,也可能是一段文字,提示语各有不同,所以本组件 不提供界面显示,只提供提示语,由用户将提示语嵌入到具体的场景
+	 * @tutorial https://www.uviewui.com/components/code.html
+	 * @property {String | Number}	seconds			倒计时所需的秒数(默认 60 )
+	 * @property {String}			startText		开始前的提示语,见官网说明(默认 '获取验证码' )
+	 * @property {String}			changeText		倒计时期间的提示语,必须带有字母"x",见官网说明(默认 'X秒重新获取' )
+	 * @property {String}			endText			倒计结束的提示语,见官网说明(默认 '重新获取' )
+	 * @property {Boolean}			keepRunning		是否在H5刷新或各端返回再进入时继续倒计时( 默认false )
+	 * @property {String}			uniqueKey		为了区分多个页面,或者一个页面多个倒计时组件本地存储的继续倒计时变了
+	 * 
+	 * @event {Function}	change	倒计时期间,每秒触发一次
+	 * @event {Function}	start	开始倒计时触发
+	 * @event {Function}	end		结束倒计时触发
+	 * @example <u-code ref="uCode" @change="codeChange" seconds="20"></u-code> 
+	 */
+	export default {
+		name: "u-code",
+		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+		data() {
+			return {
+				secNum: this.seconds,
+				timer: null,
+				canGetCode: true, // 是否可以执行验证码操作
+			}
+		},
+		mounted() {
+			this.checkKeepRunning()
+		},
+		watch: {
+			seconds: {
+				immediate: true,
+				handler(n) {
+					this.secNum = n
+				}
+			}
+		},
+		methods: {
+			checkKeepRunning() {
+				// 获取上一次退出页面(H5还包括刷新)时的时间戳,如果没有上次的保存,此值可能为空
+				let lastTimestamp = Number(uni.getStorageSync(this.uniqueKey + '_$uCountDownTimestamp'))
+				if(!lastTimestamp) return this.changeEvent(this.startText)
+				// 当前秒的时间戳
+				let nowTimestamp = Math.floor((+ new Date()) / 1000)
+				// 判断当前的时间戳,是否小于上一次的本该按设定结束,却提前结束的时间戳
+				if(this.keepRunning && lastTimestamp && lastTimestamp > nowTimestamp) {
+					// 剩余尚未执行完的倒计秒数
+					this.secNum = lastTimestamp - nowTimestamp
+					// 清除本地保存的变量
+					uni.removeStorageSync(this.uniqueKey + '_$uCountDownTimestamp')
+					// 开始倒计时
+					this.start()
+				} else {
+					// 如果不存在需要继续上一次的倒计时,执行正常的逻辑
+					this.changeEvent(this.startText)
+				}
+			},
+			// 开始倒计时
+			start() {
+				// 防止快速点击获取验证码的按钮而导致内部产生多个定时器导致混乱
+				if(this.timer) {
+					clearInterval(this.timer)
+					this.timer = null
+				}
+				this.$emit('start')
+				this.canGetCode = false
+				// 这里放这句,是为了一开始时就提示,否则要等setInterval的1秒后才会有提示
+				this.changeEvent(this.changeText.replace(/x|X/, this.secNum))
+				this.setTimeToStorage()
+				this.timer = setInterval(() => {
+					if (--this.secNum) {
+						// 用当前倒计时的秒数替换提示字符串中的"x"字母
+						this.changeEvent(this.changeText.replace(/x|X/, this.secNum))
+					} else {
+						clearInterval(this.timer)
+						this.timer = null
+						this.changeEvent(this.endText)
+						this.secNum = this.seconds
+						this.$emit('end')
+						this.canGetCode = true
+					}
+				}, 1000)
+			},
+			// 重置,可以让用户再次获取验证码
+			reset() {
+				this.canGetCode = true
+				clearInterval(this.timer)
+				this.secNum = this.seconds
+				this.changeEvent(this.endText)
+			},
+			changeEvent(text) {
+				this.$emit('change', text)
+			},
+			// 保存时间戳,为了防止倒计时尚未结束,H5刷新或者各端的右上角返回上一页再进来
+			setTimeToStorage() {
+				if(!this.keepRunning || !this.timer) return
+				// 记录当前的时间戳,为了下次进入页面,如果还在倒计时内的话,继续倒计时
+				// 倒计时尚未结束,结果大于0;倒计时已经开始,就会小于初始值,如果等于初始值,说明没有开始倒计时,无需处理
+				if(this.secNum > 0 && this.secNum <= this.seconds) {
+					// 获取当前时间戳(+ new Date()为特殊写法),除以1000变成秒,再去除小数部分
+					let nowTimestamp = Math.floor((+ new Date()) / 1000)
+					// 将本该结束时候的时间戳保存起来 => 当前时间戳 + 剩余的秒数
+					uni.setStorage({
+						key: this.uniqueKey + '_$uCountDownTimestamp',
+						data: nowTimestamp + Number(this.secNum)
+					})
+				}
+			}
+		},
+		// 组件销毁的时候,清除定时器,否则定时器会继续存在,系统不会自动清除
+		beforeDestroy() {
+			this.setTimeToStorage()
+			clearTimeout(this.timer)
+			this.timer = null
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+</style>

+ 29 - 0
jxtxkj/node_modules/uview-ui/components/u-col/props.js

@@ -0,0 +1,29 @@
+export default {
+    props: {
+        // 占父容器宽度的多少等分,总分为12份
+        span: {
+            type: [String, Number],
+            default: uni.$u.props.col.span
+        },
+        // 指定栅格左侧的间隔数(总12栏)
+        offset: {
+            type: [String, Number],
+            default: uni.$u.props.col.offset
+        },
+        // 水平排列方式,可选值为`start`(或`flex-start`)、`end`(或`flex-end`)、`center`、`around`(或`space-around`)、`between`(或`space-between`)
+        justify: {
+            type: String,
+            default: uni.$u.props.col.justify
+        },
+        // 垂直对齐方式,可选值为top、center、bottom、stretch
+        align: {
+            type: String,
+            default: uni.$u.props.col.align
+        },
+        // 文字对齐方式
+        textAlign: {
+            type: String,
+            default: uni.$u.props.col.textAlign
+        }
+    }
+}

+ 162 - 0
jxtxkj/node_modules/uview-ui/components/u-col/u-col.vue

@@ -0,0 +1,162 @@
+<template>
+	<view
+	    class="u-col"
+		ref="u-col"
+	    :class="[
+			'u-col-' + span
+		]"
+	    :style="[colStyle]"
+	    @tap="clickHandler"
+	>
+		<slot></slot>
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * CodeInput 栅格系统的列 
+	 * @description 该组件一般用于Layout 布局 通过基础的 12 分栏,迅速简便地创建布局
+	 * @tutorial https://www.uviewui.com/components/Layout.html
+	 * @property {String | Number}	span		栅格占据的列数,总12等份 (默认 12 ) 
+	 * @property {String | Number}	offset		分栏左边偏移,计算方式与span相同 (默认 0 ) 
+	 * @property {String}			justify		水平排列方式,可选值为`start`(或`flex-start`)、`end`(或`flex-end`)、`center`、`around`(或`space-around`)、`between`(或`space-between`)  (默认 'start' ) 
+	 * @property {String}			align		垂直对齐方式,可选值为top、center、bottom、stretch (默认 'stretch' ) 
+	 * @property {String}			textAlign	文字水平对齐方式 (默认 'left' ) 
+	 * @property {Object}			customStyle	定义需要用到的外部样式
+	 * @event {Function}	click	col被点击,会阻止事件冒泡到row
+	 * @example	 <u-col  span="3" offset="3" > <view class="demo-layout bg-purple"></view> </u-col>
+	 */
+	export default {
+		name: 'u-col',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+		data() {
+			return {
+				width: 0,
+				parentData: {
+					gutter: 0
+				},
+				gridNum: 12
+			}
+		},
+		computed: {
+			uJustify() {
+				if (this.justify == 'end' || this.justify == 'start') return 'flex-' + this.justify
+				else if (this.justify == 'around' || this.justify == 'between') return 'space-' + this.justify
+				else return this.justify
+			},
+			uAlignItem() {
+				if (this.align == 'top') return 'flex-start'
+				if (this.align == 'bottom') return 'flex-end'
+				else return this.align
+			},
+			colStyle() {
+				const style = {
+					// 这里写成"padding: 0 10px"的形式是因为nvue的需要
+					paddingLeft: uni.$u.addUnit(uni.$u.getPx(this.parentData.gutter)/2),
+					paddingRight: uni.$u.addUnit(uni.$u.getPx(this.parentData.gutter)/2),
+					alignItems: this.uAlignItem,
+					justifyContent: this.uJustify,
+					textAlign: this.textAlign,
+					// #ifndef APP-NVUE
+					// 在非nvue上,使用百分比形式
+					flex: `0 0 ${100 / this.gridNum * this.span}%`,
+					marginLeft: 100 / 12 * this.offset + '%',
+					// #endif
+					// #ifdef APP-NVUE
+					// 在nvue上,由于无法使用百分比单位,这里需要获取父组件的宽度,再计算得出该有对应的百分比尺寸
+					width: uni.$u.addUnit(Math.floor(this.width / this.gridNum * Number(this.span))),
+					marginLeft: uni.$u.addUnit(Math.floor(this.width / this.gridNum * Number(this.offset))),
+					// #endif
+				}
+				return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle))
+			}
+		},
+		mounted() {
+			this.init()
+		},
+		methods: {
+			async init() {
+				// 支付宝小程序不支持provide/inject,所以使用这个方法获取整个父组件,在created定义,避免循环引用
+				this.updateParentData()
+				this.width = await this.parent.getComponentWidth()
+			},
+			updateParentData() {
+				this.getParentData('u-row')
+			},
+			clickHandler(e) {
+				this.$emit('click');
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+
+	.u-col {
+		padding: 0;
+		/* #ifndef APP-NVUE */
+		box-sizing:border-box;
+		/* #endif */
+		/* #ifdef MP */
+		display: block;
+		/* #endif */
+	}
+
+	// nvue下百分比无效
+	/* #ifndef APP-NVUE */
+	.u-col-0 {
+		width: 0;
+	}
+
+	.u-col-1 {
+		width: calc(100%/12);
+	}
+
+	.u-col-2 {
+		width: calc(100%/12 * 2);
+	}
+
+	.u-col-3 {
+		width: calc(100%/12 * 3);
+	}
+
+	.u-col-4 {
+		width: calc(100%/12 * 4);
+	}
+
+	.u-col-5 {
+		width: calc(100%/12 * 5);
+	}
+
+	.u-col-6 {
+		width: calc(100%/12 * 6);
+	}
+
+	.u-col-7 {
+		width: calc(100%/12 * 7);
+	}
+
+	.u-col-8 {
+		width: calc(100%/12 * 8);
+	}
+
+	.u-col-9 {
+		width: calc(100%/12 * 9);
+	}
+
+	.u-col-10 {
+		width: calc(100%/12 * 10);
+	}
+
+	.u-col-11 {
+		width: calc(100%/12 * 11);
+	}
+
+	.u-col-12 {
+		width: calc(100%/12 * 12);
+	}
+
+	/* #endif */
+</style>

+ 59 - 0
jxtxkj/node_modules/uview-ui/components/u-collapse-item/props.js

@@ -0,0 +1,59 @@
+export default {
+    props: {
+        // 标题
+        title: {
+            type: String,
+            default: uni.$u.props.collapseItem.title
+        },
+        // 标题右侧内容
+        value: {
+            type: String,
+            default: uni.$u.props.collapseItem.value
+        },
+        // 标题下方的描述信息
+        label: {
+            type: String,
+            default: uni.$u.props.collapseItem.label
+        },
+        // 是否禁用折叠面板
+        disabled: {
+            type: Boolean,
+            default: uni.$u.props.collapseItem.disabled
+        },
+        // 是否展示右侧箭头并开启点击反馈
+        isLink: {
+            type: Boolean,
+            default: uni.$u.props.collapseItem.isLink
+        },
+        // 是否开启点击反馈
+        clickable: {
+            type: Boolean,
+            default: uni.$u.props.collapseItem.clickable
+        },
+        // 是否显示内边框
+        border: {
+            type: Boolean,
+            default: uni.$u.props.collapseItem.border
+        },
+        // 标题的对齐方式
+        align: {
+            type: String,
+            default: uni.$u.props.collapseItem.align
+        },
+        // 唯一标识符
+        name: {
+            type: [String, Number],
+            default: uni.$u.props.collapseItem.name
+        },
+        // 标题左侧图片,可为绝对路径的图片或内置图标
+        icon: {
+            type: String,
+            default: uni.$u.props.collapseItem.icon
+        },
+        // 面板展开收起的过渡时间,单位ms
+        duration: {
+            type: Number,
+            default: uni.$u.props.collapseItem.duration
+        }
+    }
+}

+ 225 - 0
jxtxkj/node_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue

@@ -0,0 +1,225 @@
+<template>
+	<view class="u-collapse-item">
+		<u-cell
+			:title="title"
+			:value="value"
+			:label="label"
+			:icon="icon"
+			:isLink="isLink"
+			:clickable="clickable"
+			:border="parentData.border && showBorder"
+			@click="clickHandler"
+			:arrowDirection="expanded ? 'up' : 'down'"
+			:disabled="disabled"
+		>
+			<!-- #ifndef MP-WEIXIN -->
+			<!-- 微信小程序不支持,因为微信中不支持 <slot name="title" slot="title" />的写法 -->
+			<template slot="title">
+				<slot name="title"></slot>
+			</template>
+			<template slot="icon">
+				<slot name="icon"></slot>
+			</template>
+			<template slot="value">
+				<slot name="value"></slot>
+			</template>
+			<template slot="right-icon">
+				<slot name="right-icon"></slot>
+			</template>
+			<!-- #endif -->
+		</u-cell>
+		<view
+			class="u-collapse-item__content"
+			:animation="animationData"
+			ref="animation"
+		>
+			<view
+				class="u-collapse-item__content__text content-class"
+				:id="elId"
+				:ref="elId"
+			><slot /></view>
+		</view>
+		<u-line v-if="parentData.border"></u-line>
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	// #ifdef APP-NVUE
+	const animation = uni.requireNativePlugin('animation')
+	const dom = uni.requireNativePlugin('dom')
+	// #endif
+	/**
+	 * collapseItem 折叠面板Item
+	 * @description 通过折叠面板收纳内容区域(搭配u-collapse使用)
+	 * @tutorial https://www.uviewui.com/components/collapse.html
+	 * @property {String}			title 		标题
+	 * @property {String}			value 		标题右侧内容
+	 * @property {String}			label 		标题下方的描述信息
+	 * @property {Boolean}			disbled 	是否禁用折叠面板 ( 默认 false )
+	 * @property {Boolean}			isLink 		是否展示右侧箭头并开启点击反馈 ( 默认 true )
+	 * @property {Boolean}			clickable	是否开启点击反馈 ( 默认 true )
+	 * @property {Boolean}			border		是否显示内边框 ( 默认 true )
+	 * @property {String}			align		标题的对齐方式 ( 默认 'left' )
+	 * @property {String | Number}	name		唯一标识符
+	 * @property {String}			icon		标题左侧图片,可为绝对路径的图片或内置图标
+	 * @event {Function}			change 			某个item被打开或者收起时触发
+	 * @example <u-collapse-item :title="item.head" v-for="(item, index) in itemList" :key="index">{{item.body}}</u-collapse-item>
+	 */
+	export default {
+		name: "u-collapse-item",
+		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+		data() {
+			return {
+				elId: uni.$u.guid(),
+				// uni.createAnimation的导出数据
+				animationData: {},
+				// 是否展开状态
+				expanded: false,
+				// 根据expanded确定是否显示border,为了控制展开时,cell的下划线更好的显示效果,进行一定时间的延时
+				showBorder: false,
+				// 是否动画中,如果是则不允许继续触发点击
+				animating: false,
+				// 父组件u-collapse的参数
+				parentData: {
+					accordion: false,
+					border: false
+				}
+			};
+		},
+		watch: {
+			expanded(n) {
+				clearTimeout(this.timer)
+				this.timer = null
+				// 这里根据expanded的值来进行一定的延时,是为了cell的下划线更好的显示效果
+				this.timer = setTimeout(() => {
+					this.showBorder = n
+				}, n ? 10 : 290)
+			}
+		},
+		mounted() {
+			this.init()
+		},
+		methods: {
+			// 异步获取内容,或者动态修改了内容时,需要重新初始化
+			init() {
+				// 初始化数据
+				this.updateParentData()
+				if (!this.parent) {
+					return uni.$u.error('u-collapse-item必须要搭配u-collapse组件使用')
+				}
+				const {
+					value,
+					accordion,
+					children = []
+				} = this.parent
+
+				if (accordion) {
+					if (uni.$u.test.array(value)) {
+						return uni.$u.error('手风琴模式下,u-collapse组件的value参数不能为数组')
+					}
+					this.expanded = this.name == value
+				} else {
+					if (!uni.$u.test.array(value) && value !== null) {
+						return uni.$u.error('非手风琴模式下,u-collapse组件的value参数必须为数组')
+					}
+					this.expanded = (value || []).some(item => item == this.name)
+				}
+				// 设置组件的展开或收起状态
+				this.$nextTick(function() {
+					this.setContentAnimate()
+				})
+			},
+			updateParentData() {
+				// 此方法在mixin中
+				this.getParentData('u-collapse')
+			},
+			async setContentAnimate() {
+				// 每次面板打开或者收起时,都查询元素尺寸
+				// 好处是,父组件从服务端获取内容后,变更折叠面板后可以获得最新的高度
+				const rect = await this.queryRect()
+				const height = this.expanded ? rect.height : 0
+				this.animating = true
+				// #ifdef APP-NVUE
+				const ref = this.$refs['animation'].ref
+				animation.transition(ref, {
+					styles: {
+						height: height + 'px'
+					},
+					duration: this.duration,
+					// 必须设置为true,否则会到面板收起或展开时,页面其他元素不会随之调整它们的布局
+					needLayout: true,
+					timingFunction: 'ease-in-out',
+				}, () => {
+					this.animating = false
+				})
+				// #endif
+
+				// #ifndef APP-NVUE
+				const animation = uni.createAnimation({
+					timingFunction: 'ease-in-out',
+				});
+				animation
+					.height(height)
+					.step({
+						duration: this.duration,
+					})
+					.step()
+				// 导出动画数据给面板的animationData值
+				this.animationData = animation.export()
+				// 标识动画结束
+				uni.$u.sleep(this.duration).then(() => {
+					this.animating = false
+				})
+				// #endif
+			},
+			// 点击collapsehead头部
+			clickHandler() {
+				if (this.disabled && this.animating) return
+				// 设置本组件为相反的状态
+				this.parent && this.parent.onChange(this)
+			},
+			// 查询内容高度
+			queryRect() {
+				// #ifndef APP-NVUE
+				// $uGetRect为uView自带的节点查询简化方法,详见文档介绍:https://www.uviewui.com/js/getRect.html
+				// 组件内部一般用this.$uGetRect,对外的为uni.$u.getRect,二者功能一致,名称不同
+				return new Promise(resolve => {
+					this.$uGetRect(`#${this.elId}`).then(size => {
+						resolve(size)
+					})
+				})
+				// #endif
+
+				// #ifdef APP-NVUE
+				// nvue下,使用dom模块查询元素高度
+				// 返回一个promise,让调用此方法的主体能使用then回调
+				return new Promise(resolve => {
+					dom.getComponentRect(this.$refs[this.elId], res => {
+						resolve(res.size)
+					})
+				})
+				// #endif
+			}
+		},
+	};
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+
+	.u-collapse-item {
+
+		&__content {
+			overflow: hidden;
+			height: 0;
+
+			&__text {
+				padding: 12px 15px;
+				color: $u-content-color;
+				font-size: 14px;
+				line-height: 18px;
+			}
+		}
+	}
+</style>

+ 19 - 0
jxtxkj/node_modules/uview-ui/components/u-collapse/props.js

@@ -0,0 +1,19 @@
+export default {
+    props: {
+        // 当前展开面板的name,非手风琴模式:[<string | number>],手风琴模式:string | number
+        value: {
+            type: [String, Number, Array, null],
+            default: uni.$u.props.collapse.value
+        },
+        // 是否手风琴模式
+        accordion: {
+            type: Boolean,
+            default: uni.$u.props.collapse.accordion
+        },
+        // 是否显示外边框
+        border: {
+            type: Boolean,
+            default: uni.$u.props.collapse.border
+        }
+    }
+}

+ 90 - 0
jxtxkj/node_modules/uview-ui/components/u-collapse/u-collapse.vue

@@ -0,0 +1,90 @@
+<template>
+	<view class="u-collapse">
+		<u-line v-if="border"></u-line>
+		<slot />
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * collapse 折叠面板 
+	 * @description 通过折叠面板收纳内容区域
+	 * @tutorial https://www.uviewui.com/components/collapse.html
+	 * @property {String | Number | Array}	value		当前展开面板的name,非手风琴模式:[<string | number>],手风琴模式:string | number
+	 * @property {Boolean}					accordion	是否手风琴模式( 默认 false )
+	 * @property {Boolean}					border		是否显示外边框 ( 默认 true )
+	 * @event {Function}	change 		当前激活面板展开时触发(如果是手风琴模式,参数activeNames类型为String,否则为Array)
+	 * @example <u-collapse></u-collapse>
+	 */
+	export default {
+		name: "u-collapse",
+		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+		watch: {
+			needInit() {
+				this.init()
+			}
+		},
+		created() {
+			this.children = []
+		},
+		computed: {
+			needInit() {
+				// 通过computed,同时监听accordion和value值的变化
+				// 再通过watch去执行init()方法,进行再一次的初始化
+				return [this.accordion, this.value]
+			}
+		},
+		watch: {
+			// 当父组件需要子组件需要共享的参数发生了变化,手动通知子组件
+			parentData() {
+				if (this.children.length) {
+					this.children.map(child => {
+						// 判断子组件(u-checkbox)如果有updateParentData方法的话,就就执行(执行的结果是子组件重新从父组件拉取了最新的值)
+						typeof(child.updateParentData) === 'function' && child.updateParentData()
+					})
+				}
+			},
+		},
+		methods: {
+			// 重新初始化一次内部的所有子元素
+			init() {
+				this.children.map(child => {
+					child.init()
+				})
+			},
+			/**
+			 * collapse-item被点击时触发,由collapse统一处理各子组件的状态
+			 * @param {Object} target 被操作的面板的实例
+			 */
+			onChange(target) {
+				let changeArr = []
+				this.children.map((child, index) => {
+					// 如果是手风琴模式,将其他的折叠面板收起来
+					if (this.accordion) {
+						child.expanded = child === target ? !target.expanded : false
+						child.setContentAnimate()
+					} else {
+						if(child === target) {
+							child.expanded = !child.expanded
+							child.setContentAnimate()
+						}
+					}
+					// 拼接change事件中,数组元素的状态
+					changeArr.push({
+						// 如果没有定义name属性,则默认返回组件的index索引
+						name: child.name || index,
+						status: child.expanded ? 'open' : 'close'
+					})
+				})
+
+				this.$emit('change', changeArr)
+				this.$emit(target.expanded ? 'open' : 'close', target.name)
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+</style>

+ 55 - 0
jxtxkj/node_modules/uview-ui/components/u-column-notice/props.js

@@ -0,0 +1,55 @@
+export default {
+    props: {
+        // 显示的内容,字符串
+        text: {
+            type: [Array],
+            default: uni.$u.props.columnNotice.text
+        },
+        // 是否显示左侧的音量图标
+        icon: {
+            type: String,
+            default: uni.$u.props.columnNotice.icon
+        },
+        // 通告模式,link-显示右箭头,closable-显示右侧关闭图标
+        mode: {
+            type: String,
+            default: uni.$u.props.columnNotice.mode
+        },
+        // 文字颜色,各图标也会使用文字颜色
+        color: {
+            type: String,
+            default: uni.$u.props.columnNotice.color
+        },
+        // 背景颜色
+        bgColor: {
+            type: String,
+            default: uni.$u.props.columnNotice.bgColor
+        },
+        // 字体大小,单位px
+        fontSize: {
+            type: [String, Number],
+            default: uni.$u.props.columnNotice.fontSize
+        },
+        // 水平滚动时的滚动速度,即每秒滚动多少px(px),这有利于控制文字无论多少时,都能有一个恒定的速度
+        speed: {
+            type: [String, Number],
+            default: uni.$u.props.columnNotice.speed
+        },
+        // direction = row时,是否使用步进形式滚动
+        step: {
+            type: Boolean,
+            default: uni.$u.props.columnNotice.step
+        },
+        // 滚动一个周期的时间长,单位ms
+        duration: {
+            type: [String, Number],
+            default: uni.$u.props.columnNotice.duration
+        },
+        // 是否禁止用手滑动切换
+        // 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序
+        disableTouch: {
+            type: Boolean,
+            default: uni.$u.props.columnNotice.disableTouch
+        }
+    }
+}

+ 160 - 0
jxtxkj/node_modules/uview-ui/components/u-column-notice/u-column-notice.vue

@@ -0,0 +1,160 @@
+<template>
+	<view
+		class="u-notice"
+		@tap="clickHandler"
+	>
+		<slot name="icon">
+			<view
+				class="u-notice__left-icon"
+				v-if="icon"
+			>
+				<u-icon
+					:name="icon"
+					:color="color"
+					size="19"
+				></u-icon>
+			</view>
+		</slot>
+		<swiper
+			:disable-touch="disableTouch"
+			:vertical="step ? false : true"
+			circular
+			:interval="duration"
+			:autoplay="true"
+			class="u-notice__swiper"
+			@change="noticeChange"
+		>
+			<swiper-item
+				v-for="(item, index) in text"
+				:key="index"
+				class="u-notice__swiper__item"
+			>
+				<text
+					class="u-notice__swiper__item__text u-line-1"
+					:style="[textStyle]"
+				>{{ item }}</text>
+			</swiper-item>
+		</swiper>
+		<view
+			class="u-notice__right-icon"
+			v-if="['link', 'closable'].includes(mode)"
+		>
+			<u-icon
+				v-if="mode === 'link'"
+				name="arrow-right"
+				:size="17"
+				:color="color"
+			></u-icon>
+			<u-icon
+				v-if="mode === 'closable'"
+				name="close"
+				:size="16"
+				:color="color"
+				@click="close"
+			></u-icon>
+		</view>
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * ColumnNotice 滚动通知中的垂直滚动 内部组件
+	 * @description 该组件用于滚动通告场景,是其中的垂直滚动方式
+	 * @tutorial https://www.uviewui.com/components/noticeBar.html
+	 * @property {Array}			text 			显示的内容,字符串
+	 * @property {String}			icon 			是否显示左侧的音量图标 ( 默认 'volume' )
+	 * @property {String}			mode 			通告模式,link-显示右箭头,closable-显示右侧关闭图标
+	 * @property {String}			color 			文字颜色,各图标也会使用文字颜色 ( 默认 '#f9ae3d' )
+	 * @property {String}			bgColor 		背景颜色 ( 默认 '#fdf6ec' )
+	 * @property {String | Number}	fontSize		字体大小,单位px  ( 默认 14 )
+	 * @property {String | Number}	speed			水平滚动时的滚动速度,即每秒滚动多少px(rpx),这有利于控制文字无论多少时,都能有一个恒定的速度 ( 默认 80 )
+	 * @property {Boolean}			step			direction = row时,是否使用步进形式滚动 ( 默认 false )
+	 * @property {String | Number}	duration		滚动一个周期的时间长,单位ms ( 默认 1500 )
+	 * @property {Boolean}			disableTouch	是否禁止用手滑动切换   目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 ( 默认 true )
+	 * @example 
+	 */
+	export default {
+		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+		watch: {
+			text: {
+				immediate: true,
+				handler(newValue, oldValue) {
+					if(!uni.$u.test.array(newValue)) {
+						uni.$u.error('noticebar组件direction为column时,要求text参数为数组形式')
+					}
+				}
+			}
+		},
+		computed: {
+			// 文字内容的样式
+			textStyle() {
+				let style = {}
+				style.color = this.color
+				style.fontSize = uni.$u.addUnit(this.fontSize)
+				return style
+			},
+			// 垂直或者水平滚动
+			vertical() {
+				if (this.mode == 'horizontal') return false
+				else return true
+			},
+		},
+		data() {
+			return {
+				index:0
+			}
+		},
+		methods: {
+			noticeChange(e){
+				this.index = e.detail.current
+			},
+			// 点击通告栏
+			clickHandler() {
+				this.$emit('click', this.index)
+			},
+			// 点击关闭按钮
+			close() {
+				this.$emit('close')
+			}
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+
+	.u-notice {
+		@include flex;
+		align-items: center;
+		justify-content: space-between;
+
+		&__left-icon {
+			align-items: center;
+			margin-right: 5px;
+		}
+
+		&__right-icon {
+			margin-left: 5px;
+			align-items: center;
+		}
+
+		&__swiper {
+			height: 16px;
+			@include flex;
+			align-items: center;
+			flex: 1;
+
+			&__item {
+				@include flex;
+				align-items: center;
+				overflow: hidden;
+
+				&__text {
+					font-size: 14px;
+					color: $u-warning;
+				}
+			}
+		}
+	}
+</style>

+ 24 - 0
jxtxkj/node_modules/uview-ui/components/u-count-down/props.js

@@ -0,0 +1,24 @@
+export default {
+    props: {
+        // 倒计时时长,单位ms
+        time: {
+            type: [String, Number],
+            default: uni.$u.props.countDown.time
+        },
+        // 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒
+        format: {
+            type: String,
+            default: uni.$u.props.countDown.format
+        },
+        // 是否自动开始倒计时
+        autoStart: {
+            type: Boolean,
+            default: uni.$u.props.countDown.autoStart
+        },
+        // 是否展示毫秒倒计时
+        millisecond: {
+            type: Boolean,
+            default: uni.$u.props.countDown.millisecond
+        }
+    }
+}

+ 163 - 0
jxtxkj/node_modules/uview-ui/components/u-count-down/u-count-down.vue

@@ -0,0 +1,163 @@
+<template>
+	<view class="u-count-down">
+		<slot>
+			<text class="u-count-down__text">{{ formattedTime }}</text>
+		</slot>
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	import {
+		isSameSecond,
+		parseFormat,
+		parseTimeData
+	} from './utils';
+	/**
+	 * u-count-down 倒计时
+	 * @description 该组件一般使用于某个活动的截止时间上,通过数字的变化,给用户明确的时间感受,提示用户进行某一个行为操作。
+	 * @tutorial https://uviewui.com/components/countDown.html
+	 * @property {String | Number}	time		倒计时时长,单位ms (默认 0 )
+	 * @property {String}			format		时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒  (默认 'HH:mm:ss' )
+	 * @property {Boolean}			autoStart	是否自动开始倒计时 (默认 true )
+	 * @property {Boolean}			millisecond	是否展示毫秒倒计时 (默认 false )
+	 * @event {Function} finish 倒计时结束时触发 
+	 * @event {Function} change 倒计时变化时触发 
+	 * @event {Function} start	开始倒计时
+	 * @event {Function} pause	暂停倒计时 
+	 * @event {Function} reset	重设倒计时,若 auto-start 为 true,重设后会自动开始倒计时 
+	 * @example <u-count-down :time="time"></u-count-down>
+	 */
+	export default {
+		name: 'u-count-down',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+		data() {
+			return {
+				timer: null,
+				// 各单位(天,时,分等)剩余时间
+				timeData: parseTimeData(0),
+				// 格式化后的时间,如"03:23:21"
+				formattedTime: '0',
+				// 倒计时是否正在进行中
+				runing: false,
+				endTime: 0, // 结束的毫秒时间戳
+				remainTime: 0, // 剩余的毫秒时间
+			}
+		},
+		watch: {
+			time(n) {
+				this.reset()
+			}
+		},
+		mounted() {
+			this.init()
+		},
+		methods: {
+			init() {
+				this.reset()
+			},
+			// 开始倒计时
+			start() {
+				if (this.runing) return
+				// 标识为进行中
+				this.runing = true
+				// 结束时间戳 = 此刻时间戳 + 剩余的时间
+				this.endTime = Date.now() + this.remainTime
+				this.toTick()
+			},
+			// 根据是否展示毫秒,执行不同操作函数
+			toTick() {
+				if (this.millisecond) {
+					this.microTick()
+				} else {
+					this.macroTick()
+				}
+			},
+			macroTick() {
+				this.clearTimeout()
+				// 每隔一定时间,更新一遍定时器的值
+				// 同时此定时器的作用也能带来毫秒级的更新
+				this.timer = setTimeout(() => {
+					// 获取剩余时间
+					const remain = this.getRemainTime()
+					// 重设剩余时间
+					if (!isSameSecond(remain, this.remainTime) || remain === 0) {
+						this.setRemainTime(remain)
+					}
+					// 如果剩余时间不为0,则继续检查更新倒计时
+					if (this.remainTime !== 0) {
+						this.macroTick()
+					}
+				}, 30)
+			},
+			microTick() {
+				this.clearTimeout()
+				this.timer = setTimeout(() => {
+					this.setRemainTime(this.getRemainTime())
+					if (this.remainTime !== 0) {
+						this.microTick()
+					}
+				}, 50)
+			},
+			// 获取剩余的时间
+			getRemainTime() {
+				// 取最大值,防止出现小于0的剩余时间值
+				return Math.max(this.endTime - Date.now(), 0)
+			},
+			// 设置剩余的时间
+			setRemainTime(remain) {
+				this.remainTime = remain
+				// 根据剩余的毫秒时间,得出该有天,小时,分钟等的值,返回一个对象
+				const timeData = parseTimeData(remain)
+				this.$emit('change', timeData)
+				// 得出格式化后的时间
+				this.formattedTime = parseFormat(this.format, timeData)
+				// 如果时间已到,停止倒计时
+				if (remain <= 0) {
+					this.pause()
+					this.$emit('finish')
+				}
+			},
+			// 重置倒计时
+			reset() {
+				this.pause()
+				this.remainTime = this.time
+				this.setRemainTime(this.remainTime)
+				if (this.autoStart) {
+					this.start()
+				}
+			},
+			// 暂停倒计时
+			pause() {
+				this.runing = false;
+				this.clearTimeout()
+			},
+			// 清空定时器
+			clearTimeout() {
+				clearTimeout(this.timer)
+				this.timer = null
+			}
+		},
+		beforeDestroy() {
+			this.clearTimeout()
+		}
+	}
+</script>
+
+<style
+	lang="scss"
+	scoped
+>
+	@import "../../libs/css/components.scss";
+	$u-count-down-text-color:$u-content-color !default;
+	$u-count-down-text-font-size:15px !default;
+	$u-count-down-text-line-height:22px !default;
+
+	.u-count-down {
+		&__text {
+			color: $u-count-down-text-color;
+			font-size: $u-count-down-text-font-size;
+			line-height: $u-count-down-text-line-height;
+		}
+	}
+</style>

+ 62 - 0
jxtxkj/node_modules/uview-ui/components/u-count-down/utils.js

@@ -0,0 +1,62 @@
+// 补0,如1 -> 01
+function padZero(num, targetLength = 2) {
+    let str = `${num}`
+    while (str.length < targetLength) {
+        str = `0${str}`
+    }
+    return str
+}
+const SECOND = 1000
+const MINUTE = 60 * SECOND
+const HOUR = 60 * MINUTE
+const DAY = 24 * HOUR
+export function parseTimeData(time) {
+    const days = Math.floor(time / DAY)
+    const hours = Math.floor((time % DAY) / HOUR)
+    const minutes = Math.floor((time % HOUR) / MINUTE)
+    const seconds = Math.floor((time % MINUTE) / SECOND)
+    const milliseconds = Math.floor(time % SECOND)
+    return {
+        days,
+        hours,
+        minutes,
+        seconds,
+        milliseconds
+    }
+}
+export function parseFormat(format, timeData) {
+    let {
+        days,
+        hours,
+        minutes,
+        seconds,
+        milliseconds
+    } = timeData
+    // 如果格式化字符串中不存在DD(天),则将天的时间转为小时中去
+    if (format.indexOf('DD') === -1) {
+        hours += days * 24
+    } else {
+        // 对天补0
+        format = format.replace('DD', padZero(days))
+    }
+    // 其他同理于DD的格式化处理方式
+    if (format.indexOf('HH') === -1) {
+        minutes += hours * 60
+    } else {
+        format = format.replace('HH', padZero(hours))
+    }
+    if (format.indexOf('mm') === -1) {
+        seconds += minutes * 60
+    } else {
+        format = format.replace('mm', padZero(minutes))
+    }
+    if (format.indexOf('ss') === -1) {
+        milliseconds += seconds * 1000
+    } else {
+        format = format.replace('ss', padZero(seconds))
+    }
+    return format.replace('SSS', padZero(milliseconds, 3))
+}
+export function isSameSecond(time1, time2) {
+    return Math.floor(time1 / 1000) === Math.floor(time2 / 1000)
+}

+ 59 - 0
jxtxkj/node_modules/uview-ui/components/u-count-to/props.js

@@ -0,0 +1,59 @@
+export default {
+    props: {
+        // 开始的数值,默认从0增长到某一个数
+        startVal: {
+            type: [String, Number],
+            default: uni.$u.props.countTo.startVal
+        },
+        // 要滚动的目标数值,必须
+        endVal: {
+            type: [String, Number],
+            default: uni.$u.props.countTo.endVal
+        },
+        // 滚动到目标数值的动画持续时间,单位为毫秒(ms)
+        duration: {
+            type: [String, Number],
+            default: uni.$u.props.countTo.duration
+        },
+        // 设置数值后是否自动开始滚动
+        autoplay: {
+            type: Boolean,
+            default: uni.$u.props.countTo.autoplay
+        },
+        // 要显示的小数位数
+        decimals: {
+            type: [String, Number],
+            default: uni.$u.props.countTo.decimals
+        },
+        // 是否在即将到达目标数值的时候,使用缓慢滚动的效果
+        useEasing: {
+            type: Boolean,
+            default: uni.$u.props.countTo.useEasing
+        },
+        // 十进制分割
+        decimal: {
+            type: [String, Number],
+            default: uni.$u.props.countTo.decimal
+        },
+        // 字体颜色
+        color: {
+            type: String,
+            default: uni.$u.props.countTo.color
+        },
+        // 字体大小
+        fontSize: {
+            type: [String, Number],
+            default: uni.$u.props.countTo.fontSize
+        },
+        // 是否加粗字体
+        bold: {
+            type: Boolean,
+            default: uni.$u.props.countTo.bold
+        },
+        // 千位分隔符,类似金额的分割(¥23,321.05中的",")
+        separator: {
+            type: String,
+            default: uni.$u.props.countTo.separator
+        }
+    }
+}

+ 184 - 0
jxtxkj/node_modules/uview-ui/components/u-count-to/u-count-to.vue

@@ -0,0 +1,184 @@
+<template>
+	<text
+		class="u-count-num"
+		:style="{
+			fontSize: $u.addUnit(fontSize),
+			fontWeight: bold ? 'bold' : 'normal',
+			color: color
+		}"
+	>{{ displayValue }}</text>
+</template>
+
+<script>
+	import props from './props.js';
+/**
+ * countTo 数字滚动
+ * @description 该组件一般用于需要滚动数字到某一个值的场景,目标要求是一个递增的值。
+ * @tutorial https://www.uviewui.com/components/countTo.html
+ * @property {String | Number}	startVal	开始的数值,默认从0增长到某一个数(默认 0 )
+ * @property {String | Number}	endVal		要滚动的目标数值,必须 (默认 0 )
+ * @property {String | Number}	duration	滚动到目标数值的动画持续时间,单位为毫秒(ms) (默认 2000 )
+ * @property {Boolean}			autoplay	设置数值后是否自动开始滚动 (默认 true )
+ * @property {String | Number}	decimals	要显示的小数位数,见官网说明(默认 0 )
+ * @property {Boolean}			useEasing	滚动结束时,是否缓动结尾,见官网说明(默认 true )
+ * @property {String}			decimal		十进制分割 ( 默认 "." )
+ * @property {String}			color		字体颜色( 默认 '#606266' )
+ * @property {String | Number}	fontSize	字体大小,单位px( 默认 22 )
+ * @property {Boolean}			bold		字体是否加粗(默认 false )
+ * @property {String}			separator	千位分隔符,见官网说明
+ * @event {Function} end 数值滚动到目标值时触发
+ * @example <u-count-to ref="uCountTo" :end-val="endVal" :autoplay="autoplay"></u-count-to>
+ */
+export default {
+	name: 'u-count-to',
+	data() {
+		return {
+			localStartVal: this.startVal,
+			displayValue: this.formatNumber(this.startVal),
+			printVal: null,
+			paused: false, // 是否暂停
+			localDuration: Number(this.duration),
+			startTime: null, // 开始的时间
+			timestamp: null, // 时间戳
+			remaining: null, // 停留的时间
+			rAF: null,
+			lastTime: 0 // 上一次的时间
+		};
+	},
+	mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+	computed: {
+		countDown() {
+			return this.startVal > this.endVal;
+		}
+	},
+	watch: {
+		startVal() {
+			this.autoplay && this.start();
+		},
+		endVal() {
+			this.autoplay && this.start();
+		}
+	},
+	mounted() {
+		this.autoplay && this.start();
+	},
+	methods: {
+		easingFn(t, b, c, d) {
+			return (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b;
+		},
+		requestAnimationFrame(callback) {
+			const currTime = new Date().getTime();
+			// 为了使setTimteout的尽可能的接近每秒60帧的效果
+			const timeToCall = Math.max(0, 16 - (currTime - this.lastTime));
+			const id = setTimeout(() => {
+				callback(currTime + timeToCall);
+			}, timeToCall);
+			this.lastTime = currTime + timeToCall;
+			return id;
+		},
+		cancelAnimationFrame(id) {
+			clearTimeout(id);
+		},
+		// 开始滚动数字
+		start() {
+			this.localStartVal = this.startVal;
+			this.startTime = null;
+			this.localDuration = this.duration;
+			this.paused = false;
+			this.rAF = this.requestAnimationFrame(this.count);
+		},
+		// 暂定状态,重新再开始滚动;或者滚动状态下,暂停
+		reStart() {
+			if (this.paused) {
+				this.resume();
+				this.paused = false;
+			} else {
+				this.stop();
+				this.paused = true;
+			}
+		},
+		// 暂停
+		stop() {
+			this.cancelAnimationFrame(this.rAF);
+		},
+		// 重新开始(暂停的情况下)
+		resume() {
+			if (!this.remaining) return
+			this.startTime = 0;
+			this.localDuration = this.remaining;
+			this.localStartVal = this.printVal;
+			this.requestAnimationFrame(this.count);
+		},
+		// 重置
+		reset() {
+			this.startTime = null;
+			this.cancelAnimationFrame(this.rAF);
+			this.displayValue = this.formatNumber(this.startVal);
+		},
+		count(timestamp) {
+			if (!this.startTime) this.startTime = timestamp;
+			this.timestamp = timestamp;
+			const progress = timestamp - this.startTime;
+			this.remaining = this.localDuration - progress;
+			if (this.useEasing) {
+				if (this.countDown) {
+					this.printVal = this.localStartVal - this.easingFn(progress, 0, this.localStartVal - this.endVal, this.localDuration);
+				} else {
+					this.printVal = this.easingFn(progress, this.localStartVal, this.endVal - this.localStartVal, this.localDuration);
+				}
+			} else {
+				if (this.countDown) {
+					this.printVal = this.localStartVal - (this.localStartVal - this.endVal) * (progress / this.localDuration);
+				} else {
+					this.printVal = this.localStartVal + (this.endVal - this.localStartVal) * (progress / this.localDuration);
+				}
+			}
+			if (this.countDown) {
+				this.printVal = this.printVal < this.endVal ? this.endVal : this.printVal;
+			} else {
+				this.printVal = this.printVal > this.endVal ? this.endVal : this.printVal;
+			}
+			this.displayValue = this.formatNumber(this.printVal) || 0;
+			if (progress < this.localDuration) {
+				this.rAF = this.requestAnimationFrame(this.count);
+			} else {
+				this.$emit('end');
+			}
+		},
+		// 判断是否数字
+		isNumber(val) {
+			return !isNaN(parseFloat(val));
+		},
+		formatNumber(num) {
+			// 将num转为Number类型,因为其值可能为字符串数值,调用toFixed会报错
+			num = Number(num);
+			num = num.toFixed(Number(this.decimals));
+			num += '';
+			const x = num.split('.');
+			let x1 = x[0];
+			const x2 = x.length > 1 ? this.decimal + x[1] : '';
+			const rgx = /(\d+)(\d{3})/;
+			if (this.separator && !this.isNumber(this.separator)) {
+				while (rgx.test(x1)) {
+					x1 = x1.replace(rgx, '$1' + this.separator + '$2');
+				}
+			}
+			return x1 + x2;
+		},
+		destroyed() {
+			this.cancelAnimationFrame(this.rAF);
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+@import "../../libs/css/components.scss";
+
+.u-count-num {
+	/* #ifndef APP-NVUE */
+	display: inline-flex;
+	/* #endif */
+	text-align: center;
+}
+</style>

+ 116 - 0
jxtxkj/node_modules/uview-ui/components/u-datetime-picker/props.js

@@ -0,0 +1,116 @@
+export default {
+    props: {
+        // 是否打开组件
+        show: {
+            type: Boolean,
+            default: uni.$u.props.datetimePicker.show
+        },
+        // 是否展示顶部的操作栏
+        showToolbar: {
+            type: Boolean,
+            default: uni.$u.props.datetimePicker.showToolbar
+        },
+        // 绑定值
+        value: {
+            type: [String, Number],
+            default: uni.$u.props.datetimePicker.value
+        },
+        // 顶部标题
+        title: {
+            type: String,
+            default: uni.$u.props.datetimePicker.title
+        },
+        // 展示格式,mode=date为日期选择,mode=time为时间选择,mode=year-month为年月选择,mode=datetime为日期时间选择
+        mode: {
+            type: String,
+            default: uni.$u.props.datetimePicker.mode
+        },
+        // 可选的最大时间
+        maxDate: {
+            type: Number,
+            // 最大默认值为后10年
+            default: uni.$u.props.datetimePicker.maxDate
+        },
+        // 可选的最小时间
+        minDate: {
+            type: Number,
+            // 最小默认值为前10年
+            default: uni.$u.props.datetimePicker.minDate
+        },
+        // 可选的最小小时,仅mode=time有效
+        minHour: {
+            type: Number,
+            default: uni.$u.props.datetimePicker.minHour
+        },
+        // 可选的最大小时,仅mode=time有效
+        maxHour: {
+            type: Number,
+            default: uni.$u.props.datetimePicker.maxHour
+        },
+        // 可选的最小分钟,仅mode=time有效
+        minMinute: {
+            type: Number,
+            default: uni.$u.props.datetimePicker.minMinute
+        },
+        // 可选的最大分钟,仅mode=time有效
+        maxMinute: {
+            type: Number,
+            default: uni.$u.props.datetimePicker.maxMinute
+        },
+        // 选项过滤函数
+        filter: {
+            type: [Function, null],
+            default: uni.$u.props.datetimePicker.filter
+        },
+        // 选项格式化函数
+        formatter: {
+            type: [Function, null],
+            default: uni.$u.props.datetimePicker.formatter
+        },
+        // 是否显示加载中状态
+        loading: {
+            type: Boolean,
+            default: uni.$u.props.datetimePicker.loading
+        },
+        // 各列中,单个选项的高度
+        itemHeight: {
+            type: [String, Number],
+            default: uni.$u.props.datetimePicker.itemHeight
+        },
+        // 取消按钮的文字
+        cancelText: {
+            type: String,
+            default: uni.$u.props.datetimePicker.cancelText
+        },
+        // 确认按钮的文字
+        confirmText: {
+            type: String,
+            default: uni.$u.props.datetimePicker.confirmText
+        },
+        // 取消按钮的颜色
+        cancelColor: {
+            type: String,
+            default: uni.$u.props.datetimePicker.cancelColor
+        },
+        // 确认按钮的颜色
+        confirmColor: {
+            type: String,
+            default: uni.$u.props.datetimePicker.confirmColor
+        },
+        // 每列中可见选项的数量
+        visibleItemCount: {
+            type: [String, Number],
+            default: uni.$u.props.datetimePicker.visibleItemCount
+        },
+        // 是否允许点击遮罩关闭选择器
+        closeOnClickOverlay: {
+            type: Boolean,
+            default: uni.$u.props.datetimePicker.closeOnClickOverlay
+        },
+        // 各列的默认索引
+        defaultIndex: {
+            type: Array,
+            default: uni.$u.props.datetimePicker.defaultIndex
+        }
+    }
+}

+ 360 - 0
jxtxkj/node_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue

@@ -0,0 +1,360 @@
+<template>
+	<u-picker
+		ref="picker"
+		:show="show"
+		:closeOnClickOverlay="closeOnClickOverlay"
+		:columns="columns"
+		:title="title"
+		:itemHeight="itemHeight"
+		:showToolbar="showToolbar"
+		:visibleItemCount="visibleItemCount"
+		:defaultIndex="innerDefaultIndex"
+		:cancelText="cancelText"
+		:confirmText="confirmText"
+		:cancelColor="cancelColor"
+		:confirmColor="confirmColor"
+		@close="close"
+		@cancel="cancel"
+		@confirm="confirm"
+		@change="change"
+	>
+	</u-picker>
+</template>
+
+<script>
+	function times(n, iteratee) {
+	    let index = -1
+	    const result = Array(n < 0 ? 0 : n)
+	    while (++index < n) {
+	        result[index] = iteratee(index)
+	    }
+	    return result
+	}
+	import props from './props.js';
+	import dayjs from '../../libs/util/dayjs.js';
+	/**
+	 * DatetimePicker 时间日期选择器
+	 * @description 此选择器用于时间日期
+	 * @tutorial https://www.uviewui.com/components/datetimePicker.html
+	 * @property {Boolean}			show				用于控制选择器的弹出与收起 ( 默认 false )
+	 * @property {Boolean}			showToolbar			是否显示顶部的操作栏  ( 默认 true )
+	 * @property {String | Number}	value				绑定值
+	 * @property {String}			title				顶部标题
+	 * @property {String}			mode				展示格式 mode=date为日期选择,mode=time为时间选择,mode=year-month为年月选择,mode=datetime为日期时间选择  ( 默认 ‘datetime )
+	 * @property {Number}			maxDate				可选的最大时间  默认值为后10年
+	 * @property {Number}			minDate				可选的最小时间  默认值为前10年
+	 * @property {Number}			minHour				可选的最小小时,仅mode=time有效   ( 默认 0 )
+	 * @property {Number}			maxHour				可选的最大小时,仅mode=time有效	  ( 默认 23 )
+	 * @property {Number}			minMinute			可选的最小分钟,仅mode=time有效	  ( 默认 0 )
+	 * @property {Number}			maxMinute			可选的最大分钟,仅mode=time有效   ( 默认 59 )
+	 * @property {Function}			filter				选项过滤函数
+	 * @property {Function}			formatter			选项格式化函数
+	 * @property {Boolean}			loading				是否显示加载中状态   ( 默认 false )
+	 * @property {String | Number}	itemHeight			各列中,单个选项的高度   ( 默认 44 )
+	 * @property {String}			cancelText			取消按钮的文字  ( 默认 '取消' )
+	 * @property {String}			confirmText			确认按钮的文字  ( 默认 '确认' )
+	 * @property {String}			cancelColor			取消按钮的颜色  ( 默认 '#909193' )
+	 * @property {String}			confirmColor		确认按钮的颜色  ( 默认 '#3c9cff' )
+	 * @property {String | Number}	visibleItemCount	每列中可见选项的数量  ( 默认 5 )
+	 * @property {Boolean}			closeOnClickOverlay	是否允许点击遮罩关闭选择器  ( 默认 false )
+	 * @property {Array}			defaultIndex		各列的默认索引
+	 * @event {Function} close 关闭选择器时触发
+	 * @event {Function} confirm 点击确定按钮,返回当前选择的值
+	 * @event {Function} change 当选择值变化时触发
+	 * @event {Function} cancel 点击取消按钮
+	 * @example  <u-datetime-picker :show="show" :value="value1"  mode="datetime" ></u-datetime-picker>
+	 */
+	export default {
+		name: 'datetime-picker',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+		data() {
+			return {
+				columns: [],
+				innerDefaultIndex: [],
+				innerFormatter: (type, value) => value
+			}
+		},
+		watch: {
+			show(newValue, oldValue) {
+				if (newValue) {
+					this.updateColumnValue(this.innerValue)
+				}
+			},
+			propsChange() {
+				this.init()
+			}
+		},
+		computed: {
+			// 如果以下这些变量发生了变化,意味着需要重新初始化各列的值
+			propsChange() {
+				return [this.mode, this.maxDate, this.minDate, this.minHour, this.maxHour, this.minMinute, this.maxMinute, this.filter, ]
+			}
+		},
+		mounted() {
+			this.init()
+		},
+		methods: {
+			init() {
+				this.innerValue = this.correctValue(this.value)
+				this.updateColumnValue(this.innerValue)
+			},
+			// 在微信小程序中,不支持将函数当做props参数,故只能通过ref形式调用
+			setFormatter(e) {
+				this.innerFormatter = e
+			},
+			// 关闭选择器
+			close() {
+				if (this.closeOnClickOverlay) {
+					this.$emit('close')
+				}
+			},
+			// 点击工具栏的取消按钮
+			cancel() {
+				this.$emit('cancel')
+			},
+			// 点击工具栏的确定按钮
+			confirm() {
+				this.$emit('confirm', {
+					value: this.innerValue,
+					mode: this.mode
+				})
+				this.$emit('input', this.innerValue)
+			},
+			//用正则截取输出值,当出现多组数字时,抛出错误
+			intercept(e,type){
+				let judge = e.match(/\d+/g)
+				//判断是否掺杂数字
+				if(judge.length>1){
+					uni.$u.error("请勿在过滤或格式化函数时添加数字")
+					return 0
+				}else if(type&&judge[0].length==4){//判断是否是年份
+					return judge[0]
+				}else if(judge[0].length>2){
+					uni.$u.error("请勿在过滤或格式化函数时添加数字")
+					return 0
+				}else{
+					return judge[0]
+				}
+			},
+			// 列发生变化时触发
+			change(e) {
+				const { indexs, values } = e
+				let selectValue = ''
+				if(this.mode === 'time') {
+					// 根据value各列索引,从各列数组中,取出当前时间的选中值
+					selectValue = `${this.intercept(values[0][indexs[0]])}:${this.intercept(values[1][indexs[1]])}`
+				} else {
+					// 将选择的值转为数值,比如'03'转为数值的3,'2019'转为数值的2019
+					const year = parseInt(this.intercept(values[0][indexs[0]],'year'))
+					const month = parseInt(this.intercept(values[1][indexs[1]]))
+					let date = parseInt(values[2] ? this.intercept(values[2][indexs[2]]) : 1)
+					let hour = 0, minute = 0
+					// 此月份的最大天数
+					const maxDate = dayjs(`${year}-${month}`).daysInMonth()
+					// year-month模式下,date不会出现在列中,设置为1,为了符合后边需要减1的需求
+					if (this.mode === 'year-month') {
+					    date = 1
+					}
+					// 不允许超过maxDate值
+					date = Math.min(maxDate, date)
+					if (this.mode === 'datetime') {
+					    hour = parseInt(this.intercept(values[3][indexs[3]]))
+					    minute = parseInt(this.intercept(values[4][indexs[4]]))
+					}
+					// 转为时间模式
+					selectValue = Number(new Date(year, month - 1, date, hour, minute))
+				}
+				// 取出准确的合法值,防止超越边界的情况
+				selectValue = this.correctValue(selectValue)
+				this.innerValue = selectValue
+				this.updateColumnValue(selectValue)
+				// 发出change时间,value为当前选中的时间戳
+				this.$emit('change', {
+					value: selectValue,
+					// #ifndef MP-WEIXIN
+					// 微信小程序不能传递this实例,会因为循环引用而报错
+					picker: this.$refs.picker,
+					// #endif
+					mode: this.mode
+				})
+			},
+			// 更新各列的值,进行补0、格式化等操作
+			updateColumnValue(value) {
+				this.innerValue = value
+				this.updateColumns()
+				this.updateIndexs(value)
+			},
+			// 更新索引
+			updateIndexs(value) {
+				let values = []
+				const formatter = this.formatter || this.innerFormatter
+				const padZero = uni.$u.padZero
+				if (this.mode === 'time') {
+					// 将time模式的时间用:分隔成数组
+				    const timeArr = value.split(':')
+					// 使用formatter格式化方法进行管道处理
+				    values = [formatter('hour', timeArr[0]), formatter('minute', timeArr[1])]
+				} else {
+				    const date = new Date(value)
+				    values = [
+				        formatter('year', `${dayjs(value).year()}`),
+						// 月份补0
+				        formatter('month', padZero(dayjs(value).month() + 1))
+				    ]
+				    if (this.mode === 'date') {
+						// date模式,需要添加天列
+				        values.push(formatter('day', padZero(dayjs(value).date())))
+				    }
+				    if (this.mode === 'datetime') {
+						// 数组的push方法,可以写入多个参数
+				        values.push(formatter('day', padZero(dayjs(value).date())), formatter('hour', padZero(dayjs(value).hour())), formatter('minute', padZero(dayjs(value).minute())))
+				    }
+				}
+
+				// 根据当前各列的所有值,从各列默认值中找到默认值在各列中的索引
+				const indexs = this.columns.map((column, index) => {
+					// 通过取大值,可以保证不会出现找不到索引的-1情况
+					return Math.max(0, column.findIndex(item => item === values[index]))
+				})
+				this.innerDefaultIndex = indexs
+			},
+			// 更新各列的值
+			updateColumns() {
+			    const formatter = this.formatter || this.innerFormatter
+				// 获取各列的值,并且map后,对各列的具体值进行补0操作
+			    const results = this.getOriginColumns().map((column) => column.values.map((value) => formatter(column.type, value)))
+				this.columns = results
+			},
+			getOriginColumns() {
+			    // 生成各列的值
+			    const results = this.getRanges().map(({ type, range }) => {
+			        let values = times(range[1] - range[0] + 1, (index) => {
+			            let value = range[0] + index
+			            value = type === 'year' ? `${value}` : uni.$u.padZero(value)
+			            return value
+			        })
+					// 进行过滤
+			        if (this.filter) {
+			            values = this.filter(type, values)
+			        }
+			        return { type, values }
+			    })
+			    return results
+			},
+			// 通过最大值和最小值生成数组
+			generateArray(start, end) {
+				return Array.from(new Array(end + 1).keys()).slice(start)
+			},
+			// 得出合法的时间
+			correctValue(value) {
+				const isDateMode = this.mode !== 'time'
+				if (isDateMode && !uni.$u.test.date(value)) {
+					// 如果是日期类型,但是又没有设置合法的当前时间的话,使用最小时间为当前时间
+					value = this.minDate
+				} else if (!isDateMode && !value) {
+					// 如果是时间类型,而又没有默认值的话,就用最小时间
+					value = `${uni.$u.padZero(this.minHour)}:${uni.$u.padZero(this.minMinute)}`
+				}
+				// 时间类型
+				if (!isDateMode) {
+					if (String(value).indexOf(':') === -1) return uni.$u.error('时间错误,请传递如12:24的格式')
+					let [hour, minute] = value.split(':')
+					// 对时间补零,同时控制在最小值和最大值之间
+					hour = uni.$u.padZero(uni.$u.range(this.minHour, this.maxHour, Number(hour)))
+					minute = uni.$u.padZero(uni.$u.range(this.minMinute, this.maxMinute, Number(minute)))
+					return `${ hour }:${ minute }`
+				} else {
+					// 如果是日期格式,控制在最小日期和最大日期之间
+					value = dayjs(value).isBefore(dayjs(this.minDate)) ? this.minDate : value
+					value = dayjs(value).isAfter(dayjs(this.maxDate)) ? this.maxDate : value
+					return value
+				}
+			},
+			// 获取每列的最大和最小值
+			getRanges() {
+			    if (this.mode === 'time') {
+			        return [
+			            {
+			                type: 'hour',
+			                range: [this.minHour, this.maxHour],
+			            },
+			            {
+			                type: 'minute',
+			                range: [this.minMinute, this.maxMinute],
+			            },
+			        ];
+			    }
+			    const { maxYear, maxDate, maxMonth, maxHour, maxMinute, } = this.getBoundary('max', this.innerValue);
+			    const { minYear, minDate, minMonth, minHour, minMinute, } = this.getBoundary('min', this.innerValue);
+			    const result = [
+			        {
+			            type: 'year',
+			            range: [minYear, maxYear],
+			        },
+			        {
+			            type: 'month',
+			            range: [minMonth, maxMonth],
+			        },
+			        {
+			            type: 'day',
+			            range: [minDate, maxDate],
+			        },
+			        {
+			            type: 'hour',
+			            range: [minHour, maxHour],
+			        },
+			        {
+			            type: 'minute',
+			            range: [minMinute, maxMinute],
+			        },
+			    ];
+			    if (this.mode === 'date')
+			        result.splice(3, 2);
+			    if (this.mode === 'year-month')
+			        result.splice(2, 3);
+			    return result;
+			},
+			// 根据minDate、maxDate、minHour、maxHour等边界值,判断各列的开始和结束边界值
+			getBoundary(type, innerValue) {
+			    const value = new Date(innerValue)
+			    const boundary = new Date(this[`${type}Date`])
+			    const year = dayjs(boundary).year()
+			    let month = 1
+			    let date = 1
+			    let hour = 0
+			    let minute = 0
+			    if (type === 'max') {
+			        month = 12
+					// 月份的天数
+			        date = dayjs(value).daysInMonth()
+			        hour = 23
+			        minute = 59
+			    }
+				// 获取边界值,逻辑是:当年达到了边界值(最大或最小年),就检查月允许的最大和最小值,以此类推
+			    if (dayjs(value).year() === year) {
+			        month = dayjs(boundary).month() + 1
+			        if (dayjs(value).month() + 1 === month) {
+			            date = dayjs(boundary).date()
+			            if (dayjs(value).date() === date) {
+			                hour = dayjs(boundary).hour()
+			                if (dayjs(value).hour() === hour) {
+			                    minute = dayjs(boundary).minute()
+			                }
+			            }
+			        }
+			    }
+			    return {
+			        [`${type}Year`]: year,
+			        [`${type}Month`]: month,
+			        [`${type}Date`]: date,
+			        [`${type}Hour`]: hour,
+			        [`${type}Minute`]: minute
+			    }
+			},
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import '../../libs/css/components.scss';
+</style>

+ 44 - 0
jxtxkj/node_modules/uview-ui/components/u-divider/props.js

@@ -0,0 +1,44 @@
+export default {
+    props: {
+        // 是否虚线
+        dashed: {
+            type: Boolean,
+            default: uni.$u.props.divider.dashed
+        },
+        // 是否细线
+        hairline: {
+            type: Boolean,
+            default: uni.$u.props.divider.hairline
+        },
+        // 是否以点替代文字,优先于text字段起作用
+        dot: {
+            type: Boolean,
+            default: uni.$u.props.divider.dot
+        },
+        // 内容文本的位置,left-左边,center-中间,right-右边
+        textPosition: {
+            type: String,
+            default: uni.$u.props.divider.textPosition
+        },
+        // 文本内容
+        text: {
+            type: [String, Number],
+            default: uni.$u.props.divider.text
+        },
+        // 文本大小
+        textSize: {
+            type: [String, Number],
+            default: uni.$u.props.divider.textSize
+        },
+        // 文本颜色
+        textColor: {
+            type: String,
+            default: uni.$u.props.divider.textColor
+        },
+        // 线条颜色
+        lineColor: {
+            type: String,
+            default: uni.$u.props.divider.lineColor
+        }
+    }
+}

+ 116 - 0
jxtxkj/node_modules/uview-ui/components/u-divider/u-divider.vue

@@ -0,0 +1,116 @@
+<template>
+	<view
+	    class="u-divider"
+	    :style="[$u.addStyle(customStyle)]"
+		@tap="click"
+	>
+		<u-line
+		    :color="lineColor"
+		    :customStyle="leftLineStyle"
+		    :hairline="hairline"
+			:dashed="dashed"
+		></u-line>
+		<text
+		    v-if="dot"
+		    class="u-divider__dot"
+		>●</text>
+		<text
+		    v-else-if="text"
+		    class="u-divider__text"
+		    :style="[textStyle]"
+		>{{text}}</text>
+		<u-line
+		    :color="lineColor"
+		    :customStyle="rightLineStyle"
+		    :hairline="hairline"
+			:dashed="dashed"
+		></u-line>
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * divider 分割线
+	 * @description 区隔内容的分割线,一般用于页面底部"没有更多"的提示。
+	 * @tutorial https://www.uviewui.com/components/divider.html
+	 * @property {Boolean}			dashed			是否虚线 (默认 false )
+	 * @property {Boolean}			hairline		是否细线 (默认  true )
+	 * @property {Boolean}			dot				是否以点替代文字,优先于text字段起作用 (默认 false )
+	 * @property {String}			textPosition	内容文本的位置,left-左边,center-中间,right-右边 (默认 'center' )
+	 * @property {String | Number}	text			文本内容
+	 * @property {String | Number}	textSize		文本大小 (默认 14)
+	 * @property {String}			textColor		文本颜色 (默认 '#909399' )
+	 * @property {String}			lineColor		线条颜色 (默认 '#dcdfe6' )
+	 * @property {Object}			customStyle		定义需要用到的外部样式
+	 *
+	 * @event {Function}	click	divider组件被点击时触发
+	 * @example <u-divider :color="color">锦瑟无端五十弦</u-divider>
+	 */
+	export default {
+		name:'u-divider',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+		computed: {
+			textStyle() {
+				const style = {}
+				style.fontSize = uni.$u.addUnit(this.textSize)
+				style.color = this.textColor
+				return style
+			},
+			// 左边线条的的样式
+			leftLineStyle() {
+				const style = {}
+				// 如果是在左边,设置左边的宽度为固定值
+				if (this.textPosition === 'left') {
+					style.width = '80rpx'
+				} else {
+					style.flex = 1
+				}
+				return style
+			},
+			// 右边线条的的样式
+			rightLineStyle() {
+				const style = {}
+				// 如果是在右边,设置右边的宽度为固定值
+				if (this.textPosition === 'right') {
+					style.width = '80rpx'
+				} else {
+					style.flex = 1
+				}
+				return style
+			}
+		},
+		methods: {
+			// divider组件被点击时触发
+			click() {
+				this.$emit('click');
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import '../../libs/css/components.scss';
+	$u-divider-margin:15px 0 !default;
+	$u-divider-text-margin:0 15px !default;
+	$u-divider-dot-font-size:12px !default;
+	$u-divider-dot-margin:0 12px !default;
+	$u-divider-dot-color: #c0c4cc !default;
+
+	.u-divider {
+		@include flex;
+		flex-direction: row;
+		align-items: center;
+		margin: $u-divider-margin;
+
+		&__text {
+			margin: $u-divider-text-margin;
+		}
+
+		&__dot {
+			font-size: $u-divider-dot-font-size;
+			margin: $u-divider-dot-margin;
+			color: $u-divider-dot-color;
+		}
+	}
+</style>

+ 36 - 0
jxtxkj/node_modules/uview-ui/components/u-dropdown-item/props.js

@@ -0,0 +1,36 @@
+export default {
+    props: {
+        // 当前选中项的value值
+        value: {
+            type: [Number, String, Array],
+            default: ''
+        },
+        // 菜单项标题
+        title: {
+            type: [String, Number],
+            default: ''
+        },
+        // 选项数据,如果传入了默认slot,此参数无效
+        options: {
+            type: Array,
+            default() {
+                return []
+            }
+        },
+        // 是否禁用此菜单项
+        disabled: {
+            type: Boolean,
+            default: false
+        },
+        // 下拉弹窗的高度
+        height: {
+            type: [Number, String],
+            default: 'auto'
+        },
+        // 点击遮罩是否可以收起弹窗
+        closeOnClickOverlay: {
+            type: Boolean,
+            default: true
+        }
+    }
+}

+ 146 - 0
jxtxkj/node_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue

@@ -0,0 +1,146 @@
+<template>
+	<view class="u-drawdown-item">
+		<u-overlay
+			customStyle="top: 126px"
+			:show="show"
+			:closeOnClickOverlay="closeOnClickOverlay"
+			@click="overlayClick"
+		></u-overlay>
+		<view
+			class="u-drawdown-item__content"
+			:style="[style]"
+			:animation="animationData"
+			ref="animation"
+		>
+			<slot />
+		</view>
+	</view>
+</template>
+
+<script>
+	// #ifdef APP-NVUE
+	const animation = uni.requireNativePlugin('animation')
+	const dom = uni.requireNativePlugin('dom')
+	// #endif
+	import props from './props.js';
+	/**
+	 * Drawdownitem
+	 * @description 
+	 * @tutorial url
+	 * @property {String}
+	 * @event {Function}
+	 * @example
+	 */
+	export default {
+		name: 'u-drawdown-item',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+		data() {
+			return {
+				show: false,
+				top: '126px',
+				// uni.createAnimation的导出数据
+				animationData: {},
+			}
+		},
+		mounted() {
+			this.init()
+		},
+		watch: {
+			// 发生变化时,需要去更新父组件对应的值
+			dataChange(newValue, oldValue) {
+				this.updateParentData()
+			}
+		},
+		computed: {
+			// 监听对应变量的变化
+			dataChange() {
+				return [this.title, this.disabled]
+			},
+			style() {
+				const style = {
+					zIndex: 10071,
+					position: 'fixed',
+					display: 'flex',
+					left: 0,
+					right: 0
+				}
+				style.top = uni.$u.addUnit(this.top)
+				return style
+			}
+		},
+		methods: {
+			init() {
+				this.updateParentData()
+			},
+			// 更新父组件所需的数据
+			updateParentData() {
+				// 获取父组件u-dropdown
+				this.getParentData('u-dropdown')
+				if (!this.parent) uni.$u.error('u-dropdown-item必须配合u-dropdown使用')
+				// 查找父组件menuList数组中对应的标题数据
+				const menuIndex = this.parent.menuList.findIndex(item => item.title === this.title)
+				const menuContent = {
+					title: this.title,
+					disabled: this.disabled
+				}
+				if (menuIndex >= 0) {
+					// 如果能找到,则直接修改
+					this.parent.menuList[menuIndex] = menuContent;
+				} else {
+					// 如果无法找到,则为第一次添加,直接push即可
+					this.parent.menuList.push(menuContent);
+				}
+			},
+			async setContentAnimate(height) {
+				this.animating = true
+				// #ifdef APP-NVUE
+				const ref = this.$refs['animation'].ref
+				animation.transition(ref, {
+					styles: {
+						height: uni.$u.addUnit(height)
+					},
+					duration: this.duration,
+					timingFunction: 'ease-in-out',
+				}, () => {
+					this.animating = false
+				})
+				// #endif
+			
+				// #ifndef APP-NVUE
+				const animation = uni.createAnimation({
+					timingFunction: 'ease-in-out',
+				});
+				animation
+					.height(height)
+					.step({
+						duration: this.duration,
+					})
+					.step()
+				// 导出动画数据给面板的animationData值
+				this.animationData = animation.export()
+				// 标识动画结束
+				uni.$u.sleep(this.duration).then(() => {
+					this.animating = false
+				})
+				// #endif
+			},
+			overlayClick() {
+				this.show = false
+				this.setContentAnimate(0)
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import '../../libs/css/components.scss';
+	
+	.u-drawdown-item {
+		
+		&__content {
+			background-color: #FFFFFF;
+			overflow: hidden;
+			height: 0;
+		}
+	}
+</style>

+ 65 - 0
jxtxkj/node_modules/uview-ui/components/u-dropdown/props.js

@@ -0,0 +1,65 @@
+export default {
+    props: {
+        // 标题选中时的样式
+        activeStyle: {
+            type: [String, Object],
+            default: () => ({
+                color: '#2979ff',
+                fontSize: '14px'
+            })
+        },
+        // 标题未选中时的样式
+        inactiveStyle: {
+            type: [String, Object],
+            default: () => ({
+                color: '#606266',
+                fontSize: '14px'
+            })
+        },
+        // 点击遮罩是否关闭菜单
+        closeOnClickMask: {
+            type: Boolean,
+            default: true
+        },
+        // 点击当前激活项标题是否关闭菜单
+        closeOnClickSelf: {
+            type: Boolean,
+            default: true
+        },
+        // 过渡时间
+        duration: {
+            type: [Number, String],
+            default: 300
+        },
+        // 标题菜单的高度
+        height: {
+            type: [Number, String],
+            default: 40
+        },
+        // 是否显示下边框
+        borderBottom: {
+            type: Boolean,
+            default: false
+        },
+        // 标题的字体大小
+        titleSize: {
+            type: [Number, String],
+            default: 14
+        },
+        // 下拉出来的内容部分的圆角值
+        borderRadius: {
+            type: [Number, String],
+            default: 0
+        },
+        // 菜单右侧的icon图标
+        menuIcon: {
+            type: String,
+            default: 'arrow-down'
+        },
+        // 菜单右侧图标的大小
+        menuIconSize: {
+            type: [Number, String],
+            default: 14
+        }
+    }
+}

+ 127 - 0
jxtxkj/node_modules/uview-ui/components/u-dropdown/u-dropdown.vue

@@ -0,0 +1,127 @@
+<template>
+	<view class="u-drawdown">
+		<view
+			class="u-dropdown__menu"
+			:style="{
+				height: $u.addUnit(height)
+			}"
+			ref="u-dropdown__menu"
+		>
+			<view
+				class="u-dropdown__menu__item"
+				v-for="(item, index) in menuList"
+				:key="index"
+				@tap.stop="clickHandler(item, index)"
+			>
+				<view class="u-dropdown__menu__item__content">
+					<text
+						class="u-dropdown__menu__item__content__text"
+						:style="[index === current ? activeStyle : inactiveStyle]"
+					>{{item.title}}</text>
+					<view
+						class="u-dropdown__menu__item__content__arrow"
+						:class="[index === current && 'u-dropdown__menu__item__content__arrow--rotate']"
+					>
+						<u-icon
+							:name="menuIcon"
+							:size="$u.addUnit(menuIconSize)"
+						></u-icon>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="u-dropdown__content">
+			<slot />
+		</view>
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * Dropdown  
+	 * @description 
+	 * @tutorial url
+	 * @property {String}
+	 * @event {Function}
+	 * @example
+	 */
+	export default {
+		name: 'u-dropdown',
+		mixins: [uni.$u.mixin, props],
+		data() {
+			return {
+				// 菜单数组
+				menuList: [],
+				current: 0
+			}
+		},
+		computed: {
+		
+		},
+		created() {
+			// 引用所有子组件(u-dropdown-item)的this,不能在data中声明变量,否则在微信小程序会造成循环引用而报错
+			this.children = [];
+		},
+		methods: {
+			clickHandler(item, index) {
+				this.children.map(child => {
+					if(child.title === item.title) {
+						// this.queryRect('u-dropdown__menu').then(size => {
+							child.$emit('click')
+							child.setContentAnimate(child.show ? 0 : 300)
+							child.show = !child.show
+						// })
+					} else {
+						child.show = false
+						child.setContentAnimate(0)
+					}
+				})
+			},
+			// 获取标签的尺寸位置
+			queryRect(el) {
+				// #ifndef APP-NVUE
+				// $uGetRect为uView自带的节点查询简化方法,详见文档介绍:https://www.uviewui.com/js/getRect.html
+				// 组件内部一般用this.$uGetRect,对外的为this.$u.getRect,二者功能一致,名称不同
+				return new Promise(resolve => {
+					this.$uGetRect(`.${el}`).then(size => {
+						resolve(size)
+					})
+				})
+				// #endif
+			
+				// #ifdef APP-NVUE 
+				// nvue下,使用dom模块查询元素高度
+				// 返回一个promise,让调用此方法的主体能使用then回调
+				return new Promise(resolve => {
+					dom.getComponentRect(this.$refs[el], res => {
+						resolve(res.size)
+					})
+				})
+				// #endif
+			},
+		},
+	}
+</script>
+
+<style lang="scss">
+	@import '../../libs/css/components.scss';
+
+	.u-dropdown {
+
+		&__menu {
+			@include flex;
+
+			&__item {
+				flex: 1;
+				@include flex;
+				justify-content: center;
+
+				&__content {
+					@include flex;
+					align-items: center;
+				}
+			}
+		}
+	}
+</style>

+ 59 - 0
jxtxkj/node_modules/uview-ui/components/u-empty/props.js

@@ -0,0 +1,59 @@
+export default {
+    props: {
+        // 内置图标名称,或图片路径,建议绝对路径
+        icon: {
+            type: String,
+            default: uni.$u.props.empty.icon
+        },
+        // 提示文字
+        text: {
+            type: String,
+            default: uni.$u.props.empty.text
+        },
+        // 文字颜色
+        textColor: {
+            type: String,
+            default: uni.$u.props.empty.textColor
+        },
+        // 文字大小
+        textSize: {
+            type: [String, Number],
+            default: uni.$u.props.empty.textSize
+        },
+        // 图标的颜色
+        iconColor: {
+            type: String,
+            default: uni.$u.props.empty.iconColor
+        },
+        // 图标的大小
+        iconSize: {
+            type: [String, Number],
+            default: uni.$u.props.empty.iconSize
+        },
+        // 选择预置的图标类型
+        mode: {
+            type: String,
+            default: uni.$u.props.empty.mode
+        },
+        //  图标宽度,单位px
+        width: {
+            type: [String, Number],
+            default: uni.$u.props.empty.width
+        },
+        // 图标高度,单位px
+        height: {
+            type: [String, Number],
+            default: uni.$u.props.empty.height
+        },
+        // 是否显示组件
+        show: {
+            type: Boolean,
+            default: uni.$u.props.empty.show
+        },
+        // 组件距离上一个元素之间的距离,默认px单位
+        marginTop: {
+            type: [String, Number],
+            default: uni.$u.props.empty.marginTop
+        }
+    }
+}

+ 128 - 0
jxtxkj/node_modules/uview-ui/components/u-empty/u-empty.vue

@@ -0,0 +1,128 @@
+<template>
+	<view
+	    class="u-empty"
+	    :style="[emptyStyle]"
+	    v-if="show"
+	>
+		<u-icon
+		    v-if="!isSrc"
+		    :name="mode === 'message' ? 'chat' : `empty-${mode}`"
+		    :size="iconSize"
+		    :color="iconColor"
+		    margin-top="14"
+		></u-icon>
+		<image
+		    v-else
+		    :style="{
+				width: $u.addUnit(width),
+				height: $u.addUnit(height),
+			}"
+		    :src="icon"
+		    mode="widthFix"
+		></image>
+		<text
+		    class="u-empty__text"
+		    :style="[textStyle]"
+		>{{text ? text : icons[mode]}}</text>
+		<view class="u-empty__wrap" v-if="$slots.default || $slots.$default">
+			<slot />
+		</view>
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+
+	/**
+	 * empty 内容为空
+	 * @description 该组件用于需要加载内容,但是加载的第一页数据就为空,提示一个"没有内容"的场景, 我们精心挑选了十几个场景的图标,方便您使用。
+	 * @tutorial https://www.uviewui.com/components/empty.html
+	 * @property {String}			icon		内置图标名称,或图片路径,建议绝对路径
+	 * @property {String}			text		提示文字
+	 * @property {String}			textColor	文字颜色 (默认 '#c0c4cc' )
+	 * @property {String | Number}	textSize	文字大小 (默认 14 )
+	 * @property {String}			iconColor	图标的颜色 (默认 '#c0c4cc' )
+	 * @property {String | Number}	iconSize	图标的大小 (默认 90 )
+	 * @property {String}			mode		选择预置的图标类型 (默认 'data' )
+	 * @property {String | Number}	width		图标宽度,单位px (默认 160 )
+	 * @property {String | Number}	height		图标高度,单位px (默认 160 )
+	 * @property {Boolean}			show		是否显示组件 (默认 true )
+	 * @property {String | Number}	marginTop	组件距离上一个元素之间的距离,默认px单位 (默认 0 )
+	 * @property {Object}			customStyle	定义需要用到的外部样式
+	 * 
+	 * @event {Function} click 点击组件时触发
+	 * @event {Function} close 点击关闭按钮时触发
+	 * @example <u-empty text="所谓伊人,在水一方" mode="list"></u-empty>
+	 */
+	export default {
+		name: "u-empty",
+		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+		data() {
+			return {
+				icons: {
+					car: '购物车为空',
+					page: '页面不存在',
+					search: '没有搜索结果',
+					address: '没有收货地址',
+					wifi: '没有WiFi',
+					order: '订单为空',
+					coupon: '没有优惠券',
+					favor: '暂无收藏',
+					permission: '无权限',
+					history: '无历史记录',
+					news: '无新闻列表',
+					message: '消息列表为空',
+					list: '列表为空',
+					data: '数据为空',
+					comment: '暂无评论',
+				}
+			}
+		},
+		computed: {
+			// 组件样式
+			emptyStyle() {
+				const style = {}
+				style.marginTop = uni.$u.addUnit(this.marginTop)
+				// 合并customStyle样式,此参数通过mixin中的props传递
+				return uni.$u.deepMerge(uni.$u.addStyle(this.customStyle), style)
+			},
+			// 文本样式
+			textStyle() {
+				const style = {}
+				style.color = this.textColor
+				style.fontSize = uni.$u.addUnit(this.textSize)
+				return style
+			},
+			// 判断icon是否图片路径
+			isSrc() {
+				return this.icon.indexOf('/') >= 0
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import '../../libs/css/components.scss';
+	$u-empty-text-margin-top:20rpx !default;
+	$u-empty-slot-margin-top:20rpx !default;
+
+	.u-empty {
+		@include flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+
+		&__text {
+			@include flex;
+			justify-content: center;
+			align-items: center;
+			margin-top: $u-empty-text-margin-top;
+		}
+	}
+		.u-slot-wrap {
+			@include flex;
+			justify-content: center;
+			align-items: center;
+			margin-top:$u-empty-slot-margin-top;
+		}
+</style>

+ 43 - 0
jxtxkj/node_modules/uview-ui/components/u-form-item/props.js

@@ -0,0 +1,43 @@
+export default {
+    props: {
+        // input的label提示语
+        label: {
+            type: String,
+            default: uni.$u.props.formItem.label
+        },
+        // 绑定的值
+        prop: {
+            type: String,
+            default: uni.$u.props.formItem.prop
+        },
+        // 是否显示表单域的下划线边框
+        borderBottom: {
+            type: [String, Boolean],
+            default: uni.$u.props.formItem.borderBottom
+        },
+        // label的宽度,单位px
+        labelWidth: {
+            type: [String, Number],
+            default: uni.$u.props.formItem.labelWidth
+        },
+        // 右侧图标
+        rightIcon: {
+            type: String,
+            default: uni.$u.props.formItem.rightIcon
+        },
+        // 左侧图标
+        leftIcon: {
+            type: String,
+            default: uni.$u.props.formItem.leftIcon
+        },
+        // 是否显示左边的必填星号,只作显示用,具体校验必填的逻辑,请在rules中配置
+        required: {
+            type: Boolean,
+            default: uni.$u.props.formItem.required
+        },
+        leftIconStyle: {
+            type: [String, Object],
+            default: uni.$u.props.formItem.leftIconStyle,
+        }
+    }
+}

+ 235 - 0
jxtxkj/node_modules/uview-ui/components/u-form-item/u-form-item.vue

@@ -0,0 +1,235 @@
+<template>
+	<view class="u-form-item">
+		<view
+			class="u-form-item__body"
+			@tap="clickHandler"
+			:style="[$u.addStyle(customStyle), {
+				flexDirection: parentData.labelPosition === 'left' ? 'row' : 'column'
+			}]"
+		>
+			<!-- 微信小程序中,将一个参数设置空字符串,结果会变成字符串"true" -->
+			<slot name="label">
+				<!-- {{required}} -->
+				<view
+					class="u-form-item__body__left"
+					v-if="required || leftIcon || label"
+					:style="{
+						width: $u.addUnit(labelWidth || parentData.labelWidth),
+						marginBottom: parentData.labelPosition === 'left' ? 0 : '5px',
+					}"
+				>
+					<!-- 为了块对齐 -->
+					<view class="u-form-item__body__left__content">
+						<!-- nvue不支持伪元素before -->
+						<text
+							v-if="required"
+							class="u-form-item__body__left__content__required"
+						>*</text>
+						<view
+							class="u-form-item__body__left__content__icon"
+							v-if="leftIcon"
+						>
+							<u-icon
+								:name="leftIcon"
+								:custom-style="leftIconStyle"
+							></u-icon>
+						</view>
+						<text
+							class="u-form-item__body__left__content__label"
+							:style="[parentData.labelStyle, {
+								justifyContent: parentData.labelAlign === 'left' ? 'flex-start' : parentData.labelAlign === 'center' ? 'center' : 'flex-end'
+							}]"
+						>{{ label }}</text>
+					</view>
+				</view>
+			</slot>
+			<view class="u-form-item__body__right">
+				<view class="u-form-item__body__right__content">
+					<view class="u-form-item__body__right__content__slot">
+						<slot />
+					</view>
+					<view
+						class="item__body__right__content__icon"
+						v-if="$slots.right"
+					>
+						<slot name="right" />
+					</view>
+				</view>
+			</view>
+		</view>
+		<slot name="error">
+			<text
+				v-if="!!message && parentData.errorType === 'message'"
+				class="u-form-item__body__right__message"
+				:style="{
+					marginLeft:  $u.addUnit(parentData.labelPosition === 'top' ? 0 : (labelWidth || parentData.labelWidth))
+				}"
+			>{{ message }}</text>
+		</slot>
+		<u-line
+			v-if="borderBottom"
+			:color="message && parentData.errorType === 'border-bottom' ? $u.color.error : propsLine.color"
+			:customStyle="`margin-top: ${message && parentData.errorType === 'message' ? '5px' : 0}`"
+		></u-line>
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * Form 表单
+	 * @description 此组件一般用于表单场景,可以配置Input输入框,Select弹出框,进行表单验证等。
+	 * @tutorial https://www.uviewui.com/components/form.html
+	 * @property {String}			label			input的label提示语
+	 * @property {String}			prop			绑定的值
+	 * @property {String | Boolean}	borderBottom	是否显示表单域的下划线边框
+	 * @property {String | Number}	labelWidth		label的宽度,单位px
+	 * @property {String}			rightIcon		右侧图标
+	 * @property {String}			leftIcon		左侧图标
+	 * @property {String | Object} leftIconStyle 左侧图标的样式
+	 * @property {Boolean}			required		是否显示左边的必填星号,只作显示用,具体校验必填的逻辑,请在rules中配置 (默认 false )
+	 *
+	 * @example <u-form-item label="姓名" prop="userInfo.name" borderBottom ref="item1"></u-form-item>
+	 */
+	export default {
+		name: 'u-form-item',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+		data() {
+			return {
+				// 错误提示语
+				message: '',
+				parentData: {
+					// 提示文本的位置
+					labelPosition: 'left',
+					// 提示文本对齐方式
+					labelAlign: 'left',
+					// 提示文本的样式
+					labelStyle: {},
+					// 提示文本的宽度
+					labelWidth: 45,
+					// 错误提示方式
+					errorType: 'message'
+				}
+			}
+		},
+		// 组件创建完成时,将当前实例保存到u-form中
+		computed: {
+			propsLine() {
+				return uni.$u.props.line
+			}
+		},
+		mounted() {
+			this.init()
+		},
+		methods: {
+			init() {
+				// 父组件的实例
+				this.updateParentData()
+				if (!this.parent) {
+					uni.$u.error('u-form-item需要结合u-form组件使用')
+				}
+			},
+			// 获取父组件的参数
+			updateParentData() {
+				// 此方法写在mixin中
+				this.getParentData('u-form');
+			},
+			// 移除u-form-item的校验结果
+			clearValidate() {
+				this.message = null
+			},
+			// 清空当前的组件的校验结果,并重置为初始值
+			resetField() {
+				// 找到原始值
+				const value = uni.$u.getProperty(this.parent.originalModel, this.prop)
+				// 将u-form的model的prop属性链还原原始值
+				uni.$u.setProperty(this.parent.model, this.prop, value)
+				// 移除校验结果
+				this.message = null
+			},
+			// 点击组件
+			clickHandler() {
+				this.$emit('click')
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+
+	.u-form-item {
+		@include flex(column);
+		font-size: 14px;
+		color: $u-main-color;
+
+		&__body {
+			@include flex;
+			padding: 10px 0;
+
+			&__left {
+				@include flex;
+				align-items: center;
+
+				&__content {
+					position: relative;
+					@include flex;
+					align-items: center;
+					padding-right: 10rpx;
+					flex: 1;
+
+					&__icon {
+						margin-right: 8rpx;
+					}
+
+					&__required {
+						position: absolute;
+						left: -9px;
+						color: $u-error;
+						line-height: 20px;
+						font-size: 20px;
+						top: 3px;
+					}
+
+					&__label {
+						@include flex;
+						align-items: center;
+						flex: 1;
+						color: $u-main-color;
+						font-size: 15px;
+					}
+				}
+			}
+
+			&__right {
+				flex: 1;
+
+				&__content {
+					@include flex;
+					align-items: center;
+					flex: 1;
+
+					&__slot {
+						flex: 1;
+						/* #ifndef MP */
+						@include flex;
+						align-items: center;
+						/* #endif */
+					}
+
+					&__icon {
+						margin-left: 10rpx;
+						color: $u-light-color;
+						font-size: 30rpx;
+					}
+				}
+
+				&__message {
+					font-size: 12px;
+					line-height: 12px;
+					color: $u-error;
+				}
+			}
+		}
+	}
+</style>

+ 45 - 0
jxtxkj/node_modules/uview-ui/components/u-form/props.js

@@ -0,0 +1,45 @@
+export default {
+    props: {
+        // 当前form的需要验证字段的集合
+        model: {
+            type: Object,
+            default: uni.$u.props.form.model
+        },
+        // 验证规则
+        rules: {
+            type: [Object, Function, Array],
+            default: uni.$u.props.form.rules
+        },
+        // 有错误时的提示方式,message-提示信息,toast-进行toast提示
+        // border-bottom-下边框呈现红色,none-无提示
+        errorType: {
+            type: String,
+            default: uni.$u.props.form.errorType
+        },
+        // 是否显示表单域的下划线边框
+        borderBottom: {
+            type: Boolean,
+            default: uni.$u.props.form.borderBottom
+        },
+        // label的位置,left-左边,top-上边
+        labelPosition: {
+            type: String,
+            default: uni.$u.props.form.labelPosition
+        },
+        // label的宽度,单位px
+        labelWidth: {
+            type: [String, Number],
+            default: uni.$u.props.form.labelWidth
+        },
+        // lable字体的对齐方式
+        labelAlign: {
+            type: String,
+            default: uni.$u.props.form.labelAlign
+        },
+        // lable的样式,对象形式
+        labelStyle: {
+            type: Object,
+            default: uni.$u.props.form.labelStyle
+        }
+    }
+}

+ 214 - 0
jxtxkj/node_modules/uview-ui/components/u-form/u-form.vue

@@ -0,0 +1,214 @@
+<template>
+	<view class="u-form">
+		<slot />
+	</view>
+</template>
+
+<script>
+	import props from "./props.js";
+	import Schema from "../../libs/util/async-validator";
+	// 去除警告信息
+	Schema.warning = function() {};
+	/**
+	 * Form 表单
+	 * @description 此组件一般用于表单场景,可以配置Input输入框,Select弹出框,进行表单验证等。
+	 * @tutorial https://www.uviewui.com/components/form.html
+	 * @property {Object}						model			当前form的需要验证字段的集合
+	 * @property {Object | Function | Array}	rules			验证规则
+	 * @property {String}						errorType		错误的提示方式,见上方说明 ( 默认 message )
+	 * @property {Boolean}						borderBottom	是否显示表单域的下划线边框   ( 默认 true )
+	 * @property {String}						labelPosition	表单域提示文字的位置,left-左侧,top-上方 ( 默认 'left' )
+	 * @property {String | Number}				labelWidth		提示文字的宽度,单位px  ( 默认 45 )
+	 * @property {String}						labelAlign		lable字体的对齐方式   ( 默认 ‘left' )
+	 * @property {Object}						labelStyle		lable的样式,对象形式
+	 * @example <u--formlabelPosition="left" :model="model1" :rules="rules" ref="form1"></u--form>
+	 */
+	export default {
+		name: "u-form",
+		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+		provide() {
+			return {
+				uForm: this,
+			};
+		},
+		data() {
+			return {
+				formRules: {},
+				// 规则校验器
+				validator: {},
+				// 原始的model快照,用于resetFields方法重置表单时使用
+				originalModel: null,
+			};
+		},
+		watch: {
+			// 监听规则的变化
+			rules: {
+				immediate: true,
+				handler(n) {
+					this.setRules(n);
+				},
+			},
+			// 监听属性的变化,通知子组件u-form-item重新获取信息
+			propsChange(n) {
+				if (this.children?.length) {
+					this.children.map((child) => {
+						// 判断子组件(u-form-item)如果有updateParentData方法的话,就就执行(执行的结果是子组件重新从父组件拉取了最新的值)
+						typeof child.updateParentData == "function" &&
+							child.updateParentData();
+					});
+				}
+			},
+			// 监听model的初始值作为重置表单的快照
+			model: {
+				immediate: true,
+				handler(n) {
+					if (!this.originalModel) {
+						this.originalModel = uni.$u.deepClone(n);
+					}
+				},
+			},
+		},
+		computed: {
+			propsChange() {
+				return [
+					this.errorType,
+					this.borderBottom,
+					this.labelPosition,
+					this.labelWidth,
+					this.labelAlign,
+					this.labelStyle,
+				];
+			},
+		},
+		created() {
+			// 存储当前form下的所有u-form-item的实例
+			// 不能定义在data中,否则微信小程序会造成循环引用而报错
+			this.children = [];
+		},
+		methods: {
+			// 手动设置校验的规则,如果规则中有函数的话,微信小程序中会过滤掉,所以只能手动调用设置规则
+			setRules(rules) {
+				// 判断是否有规则
+				if (Object.keys(rules).length === 0) return;
+				if (process.env.NODE_ENV === 'development' && Object.keys(this.model).length === 0) {
+					uni.$u.error('设置rules,model必须设置!如果已经设置,请刷新页面。');
+					return;
+				};
+				this.formRules = rules;
+				// 重新将规则赋予Validator
+				this.validator = new Schema(rules);
+			},
+			// 清空所有u-form-item组件的内容,本质上是调用了u-form-item组件中的resetField()方法
+			resetFields() {
+				this.resetModel();
+			},
+			// 重置model为初始值的快照
+			resetModel(obj) {
+				// 历遍所有u-form-item,根据其prop属性,还原model的原始快照
+				this.children.map((child) => {
+					const prop = child?.prop;
+					const value = uni.$u.getProperty(this.originalModel, prop);
+					uni.$u.setProperty(this.model, prop, value);
+				});
+			},
+			// 清空校验结果
+			clearValidate(props) {
+				props = [].concat(props);
+				this.children.map((child) => {
+					// 如果u-form-item的prop在props数组中,则清除对应的校验结果信息
+					if (props[0] === undefined || props.includes(child.prop)) {
+						child.message = null;
+					}
+				});
+			},
+			// 对部分表单字段进行校验
+			async validateField(value, callback, event = null) {
+				// $nextTick是必须的,否则model的变更,可能会延后于此方法的执行
+				this.$nextTick(() => {
+					// 校验错误信息,返回给回调方法,用于存放所有form-item的错误信息
+					const errorsRes = [];
+					// 如果为字符串,转为数组
+					value = [].concat(value);
+					// 历遍children所有子form-item
+					this.children.map((child) => {
+						// 用于存放form-item的错误信息
+						const childErrors = [];
+						if (value.includes(child.prop)) {
+							// 获取对应的属性,通过类似'a.b.c'的形式
+							const propertyVal = uni.$u.getProperty(
+								this.model,
+								child.prop
+							);
+							// 属性链数组
+							const propertyChain = child.prop.split(".");
+							const propertyName =
+								propertyChain[propertyChain.length - 1];
+
+							const rule = this.formRules[child.prop];
+							// 如果不存在对应的规则,直接返回,否则校验器会报错
+							if (!rule) return;
+							// rule规则可为数组形式,也可为对象形式,此处拼接成为数组
+							const rules = [].concat(rule);
+
+							// 对rules数组进行校验
+							for (let i = 0; i < rules.length; i++) {
+								const ruleItem = rules[i];
+								// 将u-form-item的触发器转为数组形式
+								const trigger = [].concat(ruleItem?.trigger);
+								// 如果是有传入触发事件,但是此form-item却没有配置此触发器的话,不执行校验操作
+								if (event && !trigger.includes(event)) continue;
+								// 实例化校验对象,传入构造规则
+								const validator = new Schema({
+									[propertyName]: ruleItem,
+								});
+								validator.validate({
+										[propertyName]: propertyVal,
+									},
+									(errors, fields) => {
+										if (uni.$u.test.array(errors)) {
+											errorsRes.push(...errors);
+											childErrors.push(...errors);
+										}
+										child.message =
+											childErrors[0]?.message ?? null;
+									}
+								);
+							}
+						}
+					});
+					// 执行回调函数
+					typeof callback === "function" && callback(errorsRes);
+				});
+			},
+			// 校验全部数据
+			validate(callback) {
+				// 开发环境才提示,生产环境不会提示
+				if (process.env.NODE_ENV === 'development' && Object.keys(this.formRules).length === 0) {
+					uni.$u.error('未设置rules,请看文档说明!如果已经设置,请刷新页面。');
+					return;
+				}
+				return new Promise((resolve, reject) => {
+					// $nextTick是必须的,否则model的变更,可能会延后于validate方法
+					this.$nextTick(() => {
+						// 获取所有form-item的prop,交给validateField方法进行校验
+						const formItemProps = this.children.map(
+							(item) => item.prop
+						);
+						this.validateField(formItemProps, (errors) => {
+							if(errors.length) {
+								// 如果错误提示方式为toast,则进行提示
+								this.errorType === 'toast' && uni.$u.toast(errors[0].message)
+								reject(errors)
+							} else {
+								resolve(true)
+							}
+						});
+					});
+				});
+			},
+		},
+	};
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 24 - 0
jxtxkj/node_modules/uview-ui/components/u-gap/props.js

@@ -0,0 +1,24 @@
+export default {
+    props: {
+        // 背景颜色(默认transparent)
+        bgColor: {
+            type: String,
+            default: uni.$u.props.gap.bgColor
+        },
+        // 分割槽高度,单位px(默认30)
+        height: {
+            type: [String, Number],
+            default: uni.$u.props.gap.height
+        },
+        // 与上一个组件的距离
+        marginTop: {
+            type: [String, Number],
+            default: uni.$u.props.gap.marginTop
+        },
+        // 与下一个组件的距离
+        marginBottom: {
+            type: [String, Number],
+            default: uni.$u.props.gap.marginBottom
+        }
+    }
+}

+ 38 - 0
jxtxkj/node_modules/uview-ui/components/u-gap/u-gap.vue

@@ -0,0 +1,38 @@
+<template>
+	<view class="u-gap" :style="[gapStyle]"></view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * gap 间隔槽
+	 * @description 该组件一般用于内容块之间的用一个灰色块隔开的场景,方便用户风格统一,减少工作量
+	 * @tutorial https://www.uviewui.com/components/gap.html
+	 * @property {String}			bgColor			背景颜色 (默认 'transparent' )
+	 * @property {String | Number}	height			分割槽高度,单位px (默认 20 )
+	 * @property {String | Number}	marginTop		与前一个组件的距离,单位px( 默认 0 )
+	 * @property {String | Number}	marginBottom	与后一个组件的距离,单位px (默认 0 )
+	 * @property {Object}			customStyle		定义需要用到的外部样式
+	 * 
+	 * @example <u-gap height="80" bg-color="#bbb"></u-gap>
+	 */
+	export default {
+		name: "u-gap",
+		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+		computed: {
+			gapStyle() {
+				const style = {
+					backgroundColor: this.bgColor,
+					height: uni.$u.addUnit(this.height),
+					marginTop: uni.$u.addUnit(this.marginTop),
+					marginBottom: uni.$u.addUnit(this.marginBottom),
+				}
+				return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle))
+			}
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+</style>

+ 14 - 0
jxtxkj/node_modules/uview-ui/components/u-grid-item/props.js

@@ -0,0 +1,14 @@
+export default {
+    props: {
+        // 宫格的name
+        name: {
+            type: [String, Number, null],
+            default: uni.$u.props.gridItem.name
+        },
+        // 背景颜色
+        bgColor: {
+            type: String,
+            default: uni.$u.props.gridItem.bgColor
+        }
+    }
+}

+ 209 - 0
jxtxkj/node_modules/uview-ui/components/u-grid-item/u-grid-item.vue

@@ -0,0 +1,209 @@
+<template>
+	<!-- #ifndef APP-NVUE -->
+	<view
+	    class="u-grid-item"
+	    hover-class="u-grid-item--hover-class"
+	    :hover-stay-time="200"
+	    @tap="clickHandler"
+	    :class="classes"
+	    :style="[itemStyle]"
+	>
+		<slot />
+	</view>
+	<!-- #endif -->
+	<!-- #ifdef APP-NVUE -->
+	<view
+	    class="u-grid-item"
+	    :hover-stay-time="200"
+	    @tap="clickHandler"
+	    :class="classes"
+	    :style="[itemStyle]"
+	>
+		<slot />
+	</view>
+	<!-- #endif -->
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * gridItem 提示
+	 * @description 宫格组件一般用于同时展示多个同类项目的场景,可以给宫格的项目设置徽标组件(badge),或者图标等,也可以扩展为左右滑动的轮播形式。搭配u-grid使用
+	 * @tutorial https://www.uviewui.com/components/grid.html
+	 * @property {String | Number}	name		宫格的name ( 默认 null )
+	 * @property {String}			bgColor		宫格的背景颜色 (默认 'transparent' )
+	 * @property {Object}			customStyle	自定义样式,对象形式
+	 * @event {Function} click 点击宫格触发
+	 * @example <u-grid-item></u-grid-item>
+	 */
+	export default {
+		name: "u-grid-item",
+		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+		data() {
+			return {
+				parentData: {
+					col: 3, // 父组件划分的宫格数
+					border: true, // 是否显示边框,根据父组件决定
+				},
+				// #ifdef APP-NVUE
+				width: 0, // nvue下才这么计算,vue下放到computed中,否则会因为延时造成闪烁
+				// #endif
+				classes: [], // 类名集合,用于判断是否显示右边和下边框
+			};
+		},
+		mounted() {
+			this.init()
+		},
+		computed: {
+			// #ifndef APP-NVUE
+			// vue下放到computed中,否则会因为延时造成闪烁
+			width() {
+				return 100 / Number(this.parentData.col) + '%'
+			},
+			// #endif
+			itemStyle() {
+				const style = {
+					background: this.bgColor,
+					width: this.width
+				}
+				return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle))
+			}
+		},
+		methods: {
+			init() {
+				// 用于在父组件u-grid的children中被添加入子组件时,
+				// 重新计算item的边框
+				uni.$on('$uGridItem', () => {
+					this.gridItemClasses()
+				})
+				// 父组件的实例
+				this.updateParentData()
+				// #ifdef APP-NVUE
+				// 获取元素该有的长度,nvue下要延时才准确
+				this.$nextTick(function(){
+					this.getItemWidth()
+				})
+				// #endif
+				// 发出事件,通知所有的grid-item都重新计算自己的边框
+				uni.$emit('$uGridItem')
+				this.gridItemClasses()
+			},
+			// 获取父组件的参数
+			updateParentData() {
+				// 此方法写在mixin中
+				this.getParentData('u-grid');
+			},
+			clickHandler() {
+				let name = this.name
+				// 如果没有设置name属性,历遍父组件的children数组,判断当前的元素是否和本实例this相等,找出当前组件的索引
+				const children = this.parent?.children
+				if(children && this.name === null) {
+					name = children.findIndex(child => child === this)
+				}
+				// 调用父组件方法,发出事件
+				this.parent && this.parent.childClick(name)
+				this.$emit('click', name)
+			},
+			async getItemWidth() {
+				// 如果是nvue,不能使用百分比,只能使用固定宽度
+				let width = 0
+				if(this.parent) {
+					// 获取父组件宽度后,除以栅格数,得出每个item的宽度
+					const parentWidth = await this.getParentWidth()
+					width = parentWidth / Number(this.parentData.col) + 'px'
+				}
+				this.width = width
+			},
+			// 获取父元素的尺寸
+			getParentWidth() {
+				// #ifdef APP-NVUE
+				// 返回一个promise,让调用者可以用await同步获取
+				const dom = uni.requireNativePlugin('dom')
+				return new Promise(resolve => {
+					// 调用父组件的ref
+					dom.getComponentRect(this.parent.$refs['u-grid'], res => {
+						resolve(res.size.width)
+					})
+				})
+				// #endif
+			},
+			gridItemClasses() {
+				if(this.parentData.border) {
+					const classes = []
+					this.parent.children.map((child, index) =>{
+						if(this === child) {
+							const len = this.parent.children.length
+							// 贴近右边屏幕边沿的child,并且最后一个(比如只有横向2个的时候),无需右边框
+							if((index + 1) % this.parentData.col !== 0 && index + 1 !== len) {
+								classes.push('u-border-right')
+							}
+							// 总的宫格数量对列数取余的值
+							// 如果取余后,值为0,则意味着要将最后一排的宫格,都不需要下边框
+							const lessNum = len % this.parentData.col === 0 ? this.parentData.col : len % this.parentData.col
+							// 最下面的一排child,无需下边框
+							if(index < len - lessNum) {
+								classes.push('u-border-bottom')
+							}
+						}
+					})
+					// 支付宝,头条小程序无法动态绑定一个数组类名,否则解析出来的结果会带有",",而导致失效
+					// #ifdef MP-ALIPAY || MP-TOUTIAO
+					classes = classes.join(' ')
+					// #endif
+					this.classes = classes
+				}
+			}
+		},
+		beforeDestroy() {
+			// 移除事件监听,释放性能
+			uni.$off('$uGridItem')
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+      $u-grid-item-hover-class-opcatiy:.5 !default;
+      $u-grid-item-margin-top:1rpx !default;
+      $u-grid-item-border-right-width:0.5px !default;
+      $u-grid-item-border-bottom-width:0.5px !default;
+      $u-grid-item-border-right-color:$u-border-color !default;
+      $u-grid-item-border-bottom-color:$u-border-color !default;
+	.u-grid-item {
+		align-items: center;
+		justify-content: center;
+		position: relative;
+		flex-direction: column;
+		/* #ifndef APP-NVUE */
+		box-sizing: border-box;
+		display: flex;
+		/* #endif */
+
+		/* #ifdef MP */
+		position: relative;
+		float: left;
+		/* #endif */
+
+		/* #ifdef MP-WEIXIN */
+		margin-top:$u-grid-item-margin-top;
+		/* #endif */
+
+		&--hover-class {
+			opacity:$u-grid-item-hover-class-opcatiy;
+		}
+	}
+
+	/* #ifdef APP-NVUE */
+	// 由于nvue不支持组件内引入app.vue中再引入的样式,所以需要写在这里
+	.u-border-right {
+		border-right-width:$u-grid-item-border-right-width;
+		border-color: $u-grid-item-border-right-color;
+	}
+
+	.u-border-bottom {
+		border-bottom-width:$u-grid-item-border-bottom-width;
+		border-color:$u-grid-item-border-bottom-color;
+	}
+
+	/* #endif */
+</style>

+ 19 - 0
jxtxkj/node_modules/uview-ui/components/u-grid/props.js

@@ -0,0 +1,19 @@
+export default {
+    props: {
+        // 分成几列
+        col: {
+            type: [String, Number],
+            default: uni.$u.props.grid.col
+        },
+        // 是否显示边框
+        border: {
+            type: Boolean,
+            default: uni.$u.props.grid.border
+        },
+        // 宫格对齐方式,表现为数量少的时候,靠左,居中,还是靠右
+        align: {
+            type: String,
+            default: uni.$u.props.grid.align
+        }
+    }
+}

+ 97 - 0
jxtxkj/node_modules/uview-ui/components/u-grid/u-grid.vue

@@ -0,0 +1,97 @@
+<template>
+	<view
+	    class="u-grid"
+		ref='u-grid'
+	    :style="[gridStyle]"
+	>
+		<slot />
+	</view>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * grid 宫格布局
+	 * @description 宫格组件一般用于同时展示多个同类项目的场景,可以给宫格的项目设置徽标组件(badge),或者图标等,也可以扩展为左右滑动的轮播形式。
+	 * @tutorial https://www.uviewui.com/components/grid.html
+	 * @property {String | Number}	col			宫格的列数(默认 3 )
+	 * @property {Boolean}			border		是否显示宫格的边框(默认 false )
+	 * @property {String}			align		宫格对齐方式,表现为数量少的时候,靠左,居中,还是靠右 (默认 'left' )
+	 * @property {Object}			customStyle	定义需要用到的外部样式
+	 * @event {Function} click 点击宫格触发
+	 * @example <u-grid :col="3" @click="click"></u-grid>
+	 */
+	export default {
+		name: 'u-grid',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+		data() {
+			return {
+				index: 0,
+				width: 0
+			}
+		},
+		watch: {
+			// 当父组件需要子组件需要共享的参数发生了变化,手动通知子组件
+			parentData() {
+				if (this.children.length) {
+					this.children.map(child => {
+						// 判断子组件(u-radio)如果有updateParentData方法的话,就就执行(执行的结果是子组件重新从父组件拉取了最新的值)
+						typeof(child.updateParentData) == 'function' && child.updateParentData();
+					})
+				}
+			},
+		},
+		created() {
+			// 如果将children定义在data中,在微信小程序会造成循环引用而报错
+			this.children = []
+		},
+		computed: {
+			// 计算父组件的值是否发生变化
+			parentData() {
+				return [this.hoverClass, this.col, this.size, this.border];
+			},
+			// 宫格对齐方式
+			gridStyle() {
+				let style = {};
+				switch (this.align) {
+					case 'left':
+						style.justifyContent = 'flex-start';
+						break;
+					case 'center':
+						style.justifyContent = 'center';
+						break;
+					case 'right':
+						style.justifyContent = 'flex-end';
+						break;
+					default:
+						style.justifyContent = 'flex-start';
+				};
+				return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle));
+			}
+		},
+		methods: {
+			// 此方法由u-grid-item触发,用于在u-grid发出事件
+			childClick(name) {
+				this.$emit('click', name)
+			}
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+     $u-grid-width:100% !default;
+	.u-grid {
+		/* #ifdef MP */
+		width: $u-grid-width;
+		position: relative;
+		box-sizing: border-box;
+		overflow: hidden;
+		display: block;
+		/* #endif */
+		justify-content: center;
+		@include flex;
+		flex-wrap: wrap;
+		align-items: center;
+	}
+</style>

+ 214 - 0
jxtxkj/node_modules/uview-ui/components/u-icon/icons.js

@@ -0,0 +1,214 @@
+export default {
+    'uicon-level': '\ue693',
+    'uicon-column-line': '\ue68e',
+    'uicon-checkbox-mark': '\ue807',
+    'uicon-folder': '\ue7f5',
+    'uicon-movie': '\ue7f6',
+    'uicon-star-fill': '\ue669',
+    'uicon-star': '\ue65f',
+    'uicon-phone-fill': '\ue64f',
+    'uicon-phone': '\ue622',
+    'uicon-apple-fill': '\ue881',
+    'uicon-chrome-circle-fill': '\ue885',
+    'uicon-backspace': '\ue67b',
+    'uicon-attach': '\ue632',
+    'uicon-cut': '\ue948',
+    'uicon-empty-car': '\ue602',
+    'uicon-empty-coupon': '\ue682',
+    'uicon-empty-address': '\ue646',
+    'uicon-empty-favor': '\ue67c',
+    'uicon-empty-permission': '\ue686',
+    'uicon-empty-news': '\ue687',
+    'uicon-empty-search': '\ue664',
+    'uicon-github-circle-fill': '\ue887',
+    'uicon-rmb': '\ue608',
+    'uicon-person-delete-fill': '\ue66a',
+    'uicon-reload': '\ue788',
+    'uicon-order': '\ue68f',
+    'uicon-server-man': '\ue6bc',
+    'uicon-search': '\ue62a',
+    'uicon-fingerprint': '\ue955',
+    'uicon-more-dot-fill': '\ue630',
+    'uicon-scan': '\ue662',
+    'uicon-share-square': '\ue60b',
+    'uicon-map': '\ue61d',
+    'uicon-map-fill': '\ue64e',
+    'uicon-tags': '\ue629',
+    'uicon-tags-fill': '\ue651',
+    'uicon-bookmark-fill': '\ue63b',
+    'uicon-bookmark': '\ue60a',
+    'uicon-eye': '\ue613',
+    'uicon-eye-fill': '\ue641',
+    'uicon-mic': '\ue64a',
+    'uicon-mic-off': '\ue649',
+    'uicon-calendar': '\ue66e',
+    'uicon-calendar-fill': '\ue634',
+    'uicon-trash': '\ue623',
+    'uicon-trash-fill': '\ue658',
+    'uicon-play-left': '\ue66d',
+    'uicon-play-right': '\ue610',
+    'uicon-minus': '\ue618',
+    'uicon-plus': '\ue62d',
+    'uicon-info': '\ue653',
+    'uicon-info-circle': '\ue7d2',
+    'uicon-info-circle-fill': '\ue64b',
+    'uicon-question': '\ue715',
+    'uicon-error': '\ue6d3',
+    'uicon-close': '\ue685',
+    'uicon-checkmark': '\ue6a8',
+    'uicon-android-circle-fill': '\ue67e',
+    'uicon-android-fill': '\ue67d',
+    'uicon-ie': '\ue87b',
+    'uicon-IE-circle-fill': '\ue889',
+    'uicon-google': '\ue87a',
+    'uicon-google-circle-fill': '\ue88a',
+    'uicon-setting-fill': '\ue872',
+    'uicon-setting': '\ue61f',
+    'uicon-minus-square-fill': '\ue855',
+    'uicon-plus-square-fill': '\ue856',
+    'uicon-heart': '\ue7df',
+    'uicon-heart-fill': '\ue851',
+    'uicon-camera': '\ue7d7',
+    'uicon-camera-fill': '\ue870',
+    'uicon-more-circle': '\ue63e',
+    'uicon-more-circle-fill': '\ue645',
+    'uicon-chat': '\ue620',
+    'uicon-chat-fill': '\ue61e',
+    'uicon-bag-fill': '\ue617',
+    'uicon-bag': '\ue619',
+    'uicon-error-circle-fill': '\ue62c',
+    'uicon-error-circle': '\ue624',
+    'uicon-close-circle': '\ue63f',
+    'uicon-close-circle-fill': '\ue637',
+    'uicon-checkmark-circle': '\ue63d',
+    'uicon-checkmark-circle-fill': '\ue635',
+    'uicon-question-circle-fill': '\ue666',
+    'uicon-question-circle': '\ue625',
+    'uicon-share': '\ue631',
+    'uicon-share-fill': '\ue65e',
+    'uicon-shopping-cart': '\ue621',
+    'uicon-shopping-cart-fill': '\ue65d',
+    'uicon-bell': '\ue609',
+    'uicon-bell-fill': '\ue640',
+    'uicon-list': '\ue650',
+    'uicon-list-dot': '\ue616',
+    'uicon-zhihu': '\ue6ba',
+    'uicon-zhihu-circle-fill': '\ue709',
+    'uicon-zhifubao': '\ue6b9',
+    'uicon-zhifubao-circle-fill': '\ue6b8',
+    'uicon-weixin-circle-fill': '\ue6b1',
+    'uicon-weixin-fill': '\ue6b2',
+    'uicon-twitter-circle-fill': '\ue6ab',
+    'uicon-twitter': '\ue6aa',
+    'uicon-taobao-circle-fill': '\ue6a7',
+    'uicon-taobao': '\ue6a6',
+    'uicon-weibo-circle-fill': '\ue6a5',
+    'uicon-weibo': '\ue6a4',
+    'uicon-qq-fill': '\ue6a1',
+    'uicon-qq-circle-fill': '\ue6a0',
+    'uicon-moments-circel-fill': '\ue69a',
+    'uicon-moments': '\ue69b',
+    'uicon-qzone': '\ue695',
+    'uicon-qzone-circle-fill': '\ue696',
+    'uicon-baidu-circle-fill': '\ue680',
+    'uicon-baidu': '\ue681',
+    'uicon-facebook-circle-fill': '\ue68a',
+    'uicon-facebook': '\ue689',
+    'uicon-car': '\ue60c',
+    'uicon-car-fill': '\ue636',
+    'uicon-warning-fill': '\ue64d',
+    'uicon-warning': '\ue694',
+    'uicon-clock-fill': '\ue638',
+    'uicon-clock': '\ue60f',
+    'uicon-edit-pen': '\ue612',
+    'uicon-edit-pen-fill': '\ue66b',
+    'uicon-email': '\ue611',
+    'uicon-email-fill': '\ue642',
+    'uicon-minus-circle': '\ue61b',
+    'uicon-minus-circle-fill': '\ue652',
+    'uicon-plus-circle': '\ue62e',
+    'uicon-plus-circle-fill': '\ue661',
+    'uicon-file-text': '\ue663',
+    'uicon-file-text-fill': '\ue665',
+    'uicon-pushpin': '\ue7e3',
+    'uicon-pushpin-fill': '\ue86e',
+    'uicon-grid': '\ue673',
+    'uicon-grid-fill': '\ue678',
+    'uicon-play-circle': '\ue647',
+    'uicon-play-circle-fill': '\ue655',
+    'uicon-pause-circle-fill': '\ue654',
+    'uicon-pause': '\ue8fa',
+    'uicon-pause-circle': '\ue643',
+    'uicon-eye-off': '\ue648',
+    'uicon-eye-off-outline': '\ue62b',
+    'uicon-gift-fill': '\ue65c',
+    'uicon-gift': '\ue65b',
+    'uicon-rmb-circle-fill': '\ue657',
+    'uicon-rmb-circle': '\ue677',
+    'uicon-kefu-ermai': '\ue656',
+    'uicon-server-fill': '\ue751',
+    'uicon-coupon-fill': '\ue8c4',
+    'uicon-coupon': '\ue8ae',
+    'uicon-integral': '\ue704',
+    'uicon-integral-fill': '\ue703',
+    'uicon-home-fill': '\ue964',
+    'uicon-home': '\ue965',
+    'uicon-hourglass-half-fill': '\ue966',
+    'uicon-hourglass': '\ue967',
+    'uicon-account': '\ue628',
+    'uicon-plus-people-fill': '\ue626',
+    'uicon-minus-people-fill': '\ue615',
+    'uicon-account-fill': '\ue614',
+    'uicon-thumb-down-fill': '\ue726',
+    'uicon-thumb-down': '\ue727',
+    'uicon-thumb-up': '\ue733',
+    'uicon-thumb-up-fill': '\ue72f',
+    'uicon-lock-fill': '\ue979',
+    'uicon-lock-open': '\ue973',
+    'uicon-lock-opened-fill': '\ue974',
+    'uicon-lock': '\ue97a',
+    'uicon-red-packet-fill': '\ue690',
+    'uicon-photo-fill': '\ue98b',
+    'uicon-photo': '\ue98d',
+    'uicon-volume-off-fill': '\ue659',
+    'uicon-volume-off': '\ue644',
+    'uicon-volume-fill': '\ue670',
+    'uicon-volume': '\ue633',
+    'uicon-red-packet': '\ue691',
+    'uicon-download': '\ue63c',
+    'uicon-arrow-up-fill': '\ue6b0',
+    'uicon-arrow-down-fill': '\ue600',
+    'uicon-play-left-fill': '\ue675',
+    'uicon-play-right-fill': '\ue676',
+    'uicon-rewind-left-fill': '\ue679',
+    'uicon-rewind-right-fill': '\ue67a',
+    'uicon-arrow-downward': '\ue604',
+    'uicon-arrow-leftward': '\ue601',
+    'uicon-arrow-rightward': '\ue603',
+    'uicon-arrow-upward': '\ue607',
+    'uicon-arrow-down': '\ue60d',
+    'uicon-arrow-right': '\ue605',
+    'uicon-arrow-left': '\ue60e',
+    'uicon-arrow-up': '\ue606',
+    'uicon-skip-back-left': '\ue674',
+    'uicon-skip-forward-right': '\ue672',
+    'uicon-rewind-right': '\ue66f',
+    'uicon-rewind-left': '\ue671',
+    'uicon-arrow-right-double': '\ue68d',
+    'uicon-arrow-left-double': '\ue68c',
+    'uicon-wifi-off': '\ue668',
+    'uicon-wifi': '\ue667',
+    'uicon-empty-data': '\ue62f',
+    'uicon-empty-history': '\ue684',
+    'uicon-empty-list': '\ue68b',
+    'uicon-empty-page': '\ue627',
+    'uicon-empty-order': '\ue639',
+    'uicon-man': '\ue697',
+    'uicon-woman': '\ue69c',
+    'uicon-man-add': '\ue61c',
+    'uicon-man-add-fill': '\ue64c',
+    'uicon-man-delete': '\ue61a',
+    'uicon-man-delete-fill': '\ue66a',
+    'uicon-zh': '\ue70a',
+    'uicon-en': '\ue692'
+}

+ 89 - 0
jxtxkj/node_modules/uview-ui/components/u-icon/props.js

@@ -0,0 +1,89 @@
+export default {
+    props: {
+        // 图标类名
+        name: {
+            type: String,
+            default: uni.$u.props.icon.name
+        },
+        // 图标颜色,可接受主题色
+        color: {
+            type: String,
+            default: uni.$u.props.icon.color
+        },
+        // 字体大小,单位px
+        size: {
+            type: [String, Number],
+            default: uni.$u.props.icon.size
+        },
+        // 是否显示粗体
+        bold: {
+            type: Boolean,
+            default: uni.$u.props.icon.bold
+        },
+        // 点击图标的时候传递事件出去的index(用于区分点击了哪一个)
+        index: {
+            type: [String, Number],
+            default: uni.$u.props.icon.index
+        },
+        // 触摸图标时的类名
+        hoverClass: {
+            type: String,
+            default: uni.$u.props.icon.hoverClass
+        },
+        // 自定义扩展前缀,方便用户扩展自己的图标库
+        customPrefix: {
+            type: String,
+            default: uni.$u.props.icon.customPrefix
+        },
+        // 图标右边或者下面的文字
+        label: {
+            type: [String, Number],
+            default: uni.$u.props.icon.label
+        },
+        // label的位置,只能右边或者下边
+        labelPos: {
+            type: String,
+            default: uni.$u.props.icon.labelPos
+        },
+        // label的大小
+        labelSize: {
+            type: [String, Number],
+            default: uni.$u.props.icon.labelSize
+        },
+        // label的颜色
+        labelColor: {
+            type: String,
+            default: uni.$u.props.icon.labelColor
+        },
+        // label与图标的距离
+        space: {
+            type: [String, Number],
+            default: uni.$u.props.icon.space
+        },
+        // 图片的mode
+        imgMode: {
+            type: String,
+            default: uni.$u.props.icon.imgMode
+        },
+        // 用于显示图片小图标时,图片的宽度
+        width: {
+            type: [String, Number],
+            default: uni.$u.props.icon.width
+        },
+        // 用于显示图片小图标时,图片的高度
+        height: {
+            type: [String, Number],
+            default: uni.$u.props.icon.height
+        },
+        // 用于解决某些情况下,让图标垂直居中的用途
+        top: {
+            type: [String, Number],
+            default: uni.$u.props.icon.top
+        },
+        // 是否阻止事件传播
+        stop: {
+            type: Boolean,
+            default: uni.$u.props.icon.stop
+        }
+    }
+}

+ 234 - 0
jxtxkj/node_modules/uview-ui/components/u-icon/u-icon.vue

@@ -0,0 +1,234 @@
+<template>
+	<view
+	    class="u-icon"
+	    @tap="clickHandler"
+	    :class="['u-icon--' + labelPos]"
+	>
+		<image
+		    class="u-icon__img"
+		    v-if="isImg"
+		    :src="name"
+		    :mode="imgMode"
+		    :style="[imgStyle, $u.addStyle(customStyle)]"
+		></image>
+		<text
+		    v-else
+		    class="u-icon__icon"
+		    :class="uClasses"
+		    :style="[iconStyle, $u.addStyle(customStyle)]"
+		    :hover-class="hoverClass"
+		>{{icon}}</text>
+		<!-- 这里进行空字符串判断,如果仅仅是v-if="label",可能会出现传递0的时候,结果也无法显示 -->
+		<text
+		    v-if="label !== ''" 
+		    class="u-icon__label"
+		    :style="{
+			color: labelColor,
+			fontSize: $u.addUnit(labelSize),
+			marginLeft: labelPos == 'right' ? $u.addUnit(space) : 0,
+			marginTop: labelPos == 'bottom' ? $u.addUnit(space) : 0,
+			marginRight: labelPos == 'left' ? $u.addUnit(space) : 0,
+			marginBottom: labelPos == 'top' ? $u.addUnit(space) : 0,
+		}"
+		>{{ label }}</text>
+	</view>
+</template>
+
+<script>
+	// #ifdef APP-NVUE
+	// nvue通过weex的dom模块引入字体,相关文档地址如下:
+	// https://weex.apache.org/zh/docs/modules/dom.html#addrule
+	const fontUrl = 'https://at.alicdn.com/t/font_2225171_8kdcwk4po24.ttf'
+	const domModule = weex.requireModule('dom')
+	domModule.addRule('fontFace', {
+		'fontFamily': "uicon-iconfont",
+		'src': `url('${fontUrl}')`
+	})
+	// #endif
+
+	// 引入图标名称,已经对应的unicode
+	import icons from './icons'
+	
+	import props from './props.js';;
+
+	/**
+	 * icon 图标
+	 * @description 基于字体的图标集,包含了大多数常见场景的图标。
+	 * @tutorial https://www.uviewui.com/components/icon.html
+	 * @property {String}			name			图标名称,见示例图标集
+	 * @property {String}			color			图标颜色,可接受主题色 (默认 color['u-content-color'] )
+	 * @property {String | Number}	size			图标字体大小,单位px (默认 '16px' )
+	 * @property {Boolean}			bold			是否显示粗体 (默认 false )
+	 * @property {String | Number}	index			点击图标的时候传递事件出去的index(用于区分点击了哪一个)
+	 * @property {String}			hoverClass		图标按下去的样式类,用法同uni的view组件的hoverClass参数,详情见官网
+	 * @property {String}			customPrefix	自定义扩展前缀,方便用户扩展自己的图标库 (默认 'uicon' )
+	 * @property {String | Number}	label			图标右侧的label文字
+	 * @property {String}			labelPos		label相对于图标的位置,只能right或bottom (默认 'right' )
+	 * @property {String | Number}	labelSize		label字体大小,单位px (默认 '15px' )
+	 * @property {String}			labelColor		图标右侧的label文字颜色 ( 默认 color['u-content-color'] )
+	 * @property {String | Number}	space			label与图标的距离,单位px (默认 '3px' )
+	 * @property {String}			imgMode			图片的mode
+	 * @property {String | Number}	width			显示图片小图标时的宽度
+	 * @property {String | Number}	height			显示图片小图标时的高度
+	 * @property {String | Number}	top				图标在垂直方向上的定位 用于解决某些情况下,让图标垂直居中的用途  (默认 0 )
+	 * @property {Boolean}			stop			是否阻止事件传播 (默认 false )
+	 * @property {Object}			customStyle		icon的样式,对象形式
+	 * @event {Function} click 点击图标时触发
+	 * @event {Function} touchstart 事件触摸时触发
+	 * @example <u-icon name="photo" color="#2979ff" size="28"></u-icon>
+	 */
+	export default {
+		name: 'u-icon',
+		data() {
+			return {
+
+			}
+		},
+		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+		computed: {
+			uClasses() {
+				let classes = []
+				classes.push(this.customPrefix + '-' + this.name)
+				// // uView的自定义图标类名为u-iconfont
+				// if (this.customPrefix == 'uicon') {
+				// 	classes.push('u-iconfont')
+				// } else {
+				// 	classes.push(this.customPrefix)
+				// }
+				// 主题色,通过类配置
+				if (this.color && uni.$u.config.type.includes(this.color)) classes.push('u-icon__icon--' + this.color)
+				// 阿里,头条,百度小程序通过数组绑定类名时,无法直接使用[a, b, c]的形式,否则无法识别
+				// 故需将其拆成一个字符串的形式,通过空格隔开各个类名
+				//#ifdef MP-ALIPAY || MP-TOUTIAO || MP-BAIDU
+				classes = classes.join(' ')
+				//#endif
+				return classes
+			},
+			iconStyle() {
+				let style = {}
+				style = {
+					fontSize: uni.$u.addUnit(this.size),
+					lineHeight: uni.$u.addUnit(this.size),
+					fontWeight: this.bold ? 'bold' : 'normal',
+					// 某些特殊情况需要设置一个到顶部的距离,才能更好的垂直居中
+					top: uni.$u.addUnit(this.top)
+				}
+				// 非主题色值时,才当作颜色值
+				if (this.color && !uni.$u.config.type.includes(this.color)) style.color = this.color
+
+				return style
+			},
+			// 判断传入的name属性,是否图片路径,只要带有"/"均认为是图片形式
+			isImg() {
+				return this.name.indexOf('/') !== -1
+			},
+			imgStyle() {
+				let style = {}
+				// 如果设置width和height属性,则优先使用,否则使用size属性
+				style.width = this.width ? uni.$u.addUnit(this.width) : uni.$u.addUnit(this.size)
+				style.height = this.height ? uni.$u.addUnit(this.height) : uni.$u.addUnit(this.size)
+				return style
+			},
+			// 通过图标名,查找对应的图标
+			icon() {
+				// 如果内置的图标中找不到对应的图标,就直接返回name值,因为用户可能传入的是unicode代码
+				return icons['uicon-' + this.name] || this.name
+			}
+		},
+		methods: {
+			clickHandler(e) {
+				this.$emit('click', this.index)
+				// 是否阻止事件冒泡
+				this.stop && this.preventEvent(e)
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+
+	// 变量定义
+	$u-icon-primary: $u-primary !default;
+	$u-icon-success: $u-success !default;
+	$u-icon-info: $u-info !default;
+	$u-icon-warning: $u-warning !default;
+	$u-icon-error: $u-error !default;
+	$u-icon-label-line-height:1 !default;
+
+	/* #ifndef APP-NVUE */
+	// 非nvue下加载字体
+	@font-face {
+		font-family: 'uicon-iconfont';
+		src: url('https://at.alicdn.com/t/font_2225171_8kdcwk4po24.ttf') format('truetype');
+	}
+
+	/* #endif */
+
+	.u-icon {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		align-items: center;
+
+		&--left {
+			flex-direction: row-reverse;
+			align-items: center;
+		}
+
+		&--right {
+			flex-direction: row;
+			align-items: center;
+		}
+
+		&--top {
+			flex-direction: column-reverse;
+			justify-content: center;
+		}
+
+		&--bottom {
+			flex-direction: column;
+			justify-content: center;
+		}
+
+		&__icon {
+			font-family: uicon-iconfont;
+			position: relative;
+			@include flex;
+			align-items: center;
+
+			&--primary {
+				color: $u-icon-primary;
+			}
+
+			&--success {
+				color: $u-icon-success;
+			}
+
+			&--error {
+				color: $u-icon-error;
+			}
+
+			&--warning {
+				color: $u-icon-warning;
+			}
+
+			&--info {
+				color: $u-icon-info;
+			}
+		}
+
+		&__img {
+			/* #ifndef APP-NVUE */
+			height: auto;
+			will-change: transform;
+			/* #endif */
+		}
+
+		&__label {
+			/* #ifndef APP-NVUE */
+			line-height: $u-icon-label-line-height;
+			/* #endif */
+		}
+	}
+</style>

+ 84 - 0
jxtxkj/node_modules/uview-ui/components/u-image/props.js

@@ -0,0 +1,84 @@
+export default {
+    props: {
+        // 图片地址
+        src: {
+            type: String,
+            default: uni.$u.props.image.src
+        },
+        // 裁剪模式
+        mode: {
+            type: String,
+            default: uni.$u.props.image.mode
+        },
+        // 宽度,单位任意
+        width: {
+            type: [String, Number],
+            default: uni.$u.props.image.width
+        },
+        // 高度,单位任意
+        height: {
+            type: [String, Number],
+            default: uni.$u.props.image.height
+        },
+        // 图片形状,circle-圆形,square-方形
+        shape: {
+            type: String,
+            default: uni.$u.props.image.shape
+        },
+        // 圆角,单位任意
+        radius: {
+            type: [String, Number],
+            default: uni.$u.props.image.radius
+        },
+        // 是否懒加载,微信小程序、App、百度小程序、字节跳动小程序
+        lazyLoad: {
+            type: Boolean,
+            default: uni.$u.props.image.lazyLoad
+        },
+        // 开启长按图片显示识别微信小程序码菜单
+        showMenuByLongpress: {
+            type: Boolean,
+            default: uni.$u.props.image.showMenuByLongpress
+        },
+        // 加载中的图标,或者小图片
+        loadingIcon: {
+            type: String,
+            default: uni.$u.props.image.loadingIcon
+        },
+        // 加载失败的图标,或者小图片
+        errorIcon: {
+            type: String,
+            default: uni.$u.props.image.errorIcon
+        },
+        // 是否显示加载中的图标或者自定义的slot
+        showLoading: {
+            type: Boolean,
+            default: uni.$u.props.image.showLoading
+        },
+        // 是否显示加载错误的图标或者自定义的slot
+        showError: {
+            type: Boolean,
+            default: uni.$u.props.image.showError
+        },
+        // 是否需要淡入效果
+        fade: {
+            type: Boolean,
+            default: uni.$u.props.image.fade
+        },
+        // 只支持网络资源,只对微信小程序有效
+        webp: {
+            type: Boolean,
+            default: uni.$u.props.image.webp
+        },
+        // 过渡时间,单位ms
+        duration: {
+            type: [String, Number],
+            default: uni.$u.props.image.duration
+        },
+        // 背景颜色,用于深色页面加载图片时,为了和背景色融合
+        bgColor: {
+            type: String,
+            default: uni.$u.props.image.bgColor
+        }
+    }
+}

+ 232 - 0
jxtxkj/node_modules/uview-ui/components/u-image/u-image.vue

@@ -0,0 +1,232 @@
+<template>
+	<u-transition
+		mode="fade"
+		:show="show"
+		:duration="fade ? 1000 : 0"
+	>
+		<view
+			class="u-image"
+			@tap="onClick"
+			:style="[wrapStyle, backgroundStyle]"
+		>
+			<image
+				v-if="!isError"
+				:src="src"
+				:mode="mode"
+				@error="onErrorHandler"
+				@load="onLoadHandler"
+				:show-menu-by-longpress="showMenuByLongpress"
+				:lazy-load="lazyLoad"
+				class="u-image__image"
+				:style="{
+					borderRadius: shape == 'circle' ? '10000px' : $u.addUnit(radius),
+					width: $u.addUnit(width),
+					height: $u.addUnit(height)
+				}"
+			></image>
+			<view
+				v-if="showLoading && loading"
+				class="u-image__loading"
+				:style="{
+					borderRadius: shape == 'circle' ? '50%' : $u.addUnit(radius),
+					backgroundColor: this.bgColor,
+					width: $u.addUnit(width),
+					height: $u.addUnit(height)
+				}"
+			>
+				<slot name="loading">
+					<u-icon
+						:name="loadingIcon"
+						:width="width"
+						:height="height"
+					></u-icon>
+				</slot>
+			</view>
+			<view
+				v-if="showError && isError && !loading"
+				class="u-image__error"
+				:style="{
+					borderRadius: shape == 'circle' ? '50%' : $u.addUnit(radius),
+					width: $u.addUnit(width),
+					height: $u.addUnit(height)
+				}"
+			>
+				<slot name="error">
+					<u-icon
+						:name="errorIcon"
+						:width="width"
+						:height="height"
+					></u-icon>
+				</slot>
+			</view>
+		</view>
+	</u-transition>
+</template>
+
+<script>
+	import props from './props.js';
+	/**
+	 * Image 图片
+	 * @description 此组件为uni-app的image组件的加强版,在继承了原有功能外,还支持淡入动画、加载中、加载失败提示、圆角值和形状等。
+	 * @tutorial https://uviewui.com/components/image.html
+	 * @property {String}			src 				图片地址
+	 * @property {String}			mode 				裁剪模式,见官网说明 (默认 'aspectFill' )
+	 * @property {String | Number}	width 				宽度,单位任意,如果为数值,则为px单位 (默认 '300' )
+	 * @property {String | Number}	height 				高度,单位任意,如果为数值,则为px单位 (默认 '225' )
+	 * @property {String}			shape 				图片形状,circle-圆形,square-方形 (默认 'square' )
+	 * @property {String | Number}	radius		 		圆角值,单位任意,如果为数值,则为px单位 (默认 0 )
+	 * @property {Boolean}			lazyLoad			是否懒加载,仅微信小程序、App、百度小程序、字节跳动小程序有效 (默认 true )
+	 * @property {Boolean}			showMenuByLongpress	是否开启长按图片显示识别小程序码菜单,仅微信小程序有效 (默认 true )
+	 * @property {String}			loadingIcon 		加载中的图标,或者小图片 (默认 'photo' )
+	 * @property {String}			errorIcon 			加载失败的图标,或者小图片 (默认 'error-circle' )
+	 * @property {Boolean}			showLoading 		是否显示加载中的图标或者自定义的slot (默认 true )
+	 * @property {Boolean}			showError 			是否显示加载错误的图标或者自定义的slot (默认 true )
+	 * @property {Boolean}			fade 				是否需要淡入效果 (默认 true )
+	 * @property {Boolean}			webp 				只支持网络资源,只对微信小程序有效 (默认 false )
+	 * @property {String | Number}	duration 			搭配fade参数的过渡时间,单位ms (默认 500 )
+	 * @property {String}			bgColor 			背景颜色,用于深色页面加载图片时,为了和背景色融合  (默认 '#f3f4f6' )
+	 * @property {Object}			customStyle  		定义需要用到的外部样式
+	 * @event {Function}	click	点击图片时触发
+	 * @event {Function}	error	图片加载失败时触发
+	 * @event {Function} load 图片加载成功时触发
+	 * @example <u-image width="100%" height="300px" :src="src"></u-image>
+	 */
+	export default {
+		name: 'u-image',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
+		data() {
+			return {
+				// 图片是否加载错误,如果是,则显示错误占位图
+				isError: false,
+				// 初始化组件时,默认为加载中状态
+				loading: true,
+				// 不透明度,为了实现淡入淡出的效果
+				opacity: 1,
+				// 过渡时间,因为props的值无法修改,故需要一个中间值
+				durationTime: this.duration,
+				// 图片加载完成时,去掉背景颜色,因为如果是png图片,就会显示灰色的背景
+				backgroundStyle: {},
+				// 用于fade模式的控制组件显示与否
+				show: false
+			};
+		},
+		watch: {
+			src: {
+				immediate: true,
+				handler(n) {
+					if (!n) {
+						// 如果传入null或者'',或者false,或者undefined,标记为错误状态
+						this.isError = true
+						
+					} else {
+						this.isError = false;
+						this.loading = true;
+					}
+				}
+			}
+		},
+		computed: {
+			wrapStyle() {
+				let style = {};
+				// 通过调用addUnit()方法,如果有单位,如百分比,px单位等,直接返回,如果是纯粹的数值,则加上rpx单位
+				style.width = this.$u.addUnit(this.width);
+				style.height = this.$u.addUnit(this.height);
+				// 如果是显示圆形,设置一个很多的半径值即可
+				style.borderRadius = this.shape == 'circle' ? '10000px' : uni.$u.addUnit(this.radius)
+				// 如果设置圆角,必须要有hidden,否则可能圆角无效
+				style.overflow = this.borderRadius > 0 ? 'hidden' : 'visible'
+				// if (this.fade) {
+				// 	style.opacity = this.opacity
+				// 	// nvue下,这几个属性必须要分开写
+				// 	style.transitionDuration = `${this.durationTime}ms`
+				// 	style.transitionTimingFunction = 'ease-in-out'
+				// 	style.transitionProperty = 'opacity'
+				// }
+				return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle));
+
+			}
+		},
+		mounted() {
+			this.show = true
+		},
+		methods: {
+			// 点击图片
+			onClick() {
+				this.$emit('click')
+			},
+			// 图片加载失败
+			onErrorHandler(err) {
+				this.loading = false
+				this.isError = true
+				this.$emit('error', err)
+			},
+			// 图片加载完成,标记loading结束
+			onLoadHandler() {
+				this.loading = false
+				this.isError = false
+				this.$emit('load')
+				this.removeBgColor()
+				// 如果不需要动画效果,就不执行下方代码,同时移除加载时的背景颜色
+				// 否则无需fade效果时,png图片依然能看到下方的背景色
+				// if (!this.fade) return this.removeBgColor();
+				// // 原来opacity为1(不透明,是为了显示占位图),改成0(透明,意味着该元素显示的是背景颜色,默认的灰色),再改成1,是为了获得过渡效果
+				// this.opacity = 0;
+				// // 这里设置为0,是为了图片展示到背景全透明这个过程时间为0,延时之后延时之后重新设置为duration,是为了获得背景透明(灰色)
+				// // 到图片展示的过程中的淡入效果
+				// this.durationTime = 0;
+				// // 延时50ms,否则在浏览器H5,过渡效果无效
+				// setTimeout(() => {
+				// 	this.durationTime = this.duration;
+				// 	this.opacity = 1;
+				// 	setTimeout(() => {
+				// 		this.removeBgColor();
+				// 	}, this.durationTime);
+				// }, 50);
+			},
+			// 移除图片的背景色
+			removeBgColor() {
+				// 淡入动画过渡完成后,将背景设置为透明色,否则png图片会看到灰色的背景
+				this.backgroundStyle = {
+					backgroundColor: 'transparent'
+				};
+			}
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	@import '../../libs/css/components.scss';
+
+	$u-image-error-top:0px !default;
+	$u-image-error-left:0px !default;
+	$u-image-error-width:100% !default;
+	$u-image-error-hight:100% !default;
+	$u-image-error-background-color:$u-bg-color !default;
+	$u-image-error-color:$u-tips-color !default;
+	$u-image-error-font-size: 46rpx !default;
+
+	.u-image {
+		position: relative;
+		transition: opacity 0.5s ease-in-out;
+
+		&__image {
+			width: 100%;
+			height: 100%;
+		}
+
+		&__loading,
+		&__error {
+			position: absolute;
+			top: $u-image-error-top;
+			left: $u-image-error-left;
+			width: $u-image-error-width;
+			height: $u-image-error-hight;
+			@include flex;
+			align-items: center;
+			justify-content: center;
+			background-color: $u-image-error-background-color;
+			color: $u-image-error-color;
+			font-size: $u-image-error-font-size;
+		}
+	}
+</style>

+ 29 - 0
jxtxkj/node_modules/uview-ui/components/u-index-anchor/props.js

@@ -0,0 +1,29 @@
+export default {
+    props: {
+        // 列表锚点文本内容
+        text: {
+            type: [String, Number],
+            default: uni.$u.props.indexAnchor.text
+        },
+        // 列表锚点文字颜色
+        color: {
+            type: String,
+            default: uni.$u.props.indexAnchor.color
+        },
+        // 列表锚点文字大小,单位默认px
+        size: {
+            type: [String, Number],
+            default: uni.$u.props.indexAnchor.size
+        },
+        // 列表锚点背景颜色
+        bgColor: {
+            type: String,
+            default: uni.$u.props.indexAnchor.bgColor
+        },
+        // 列表锚点高度,单位默认px
+        height: {
+            type: [String, Number],
+            default: uni.$u.props.indexAnchor.height
+        }
+    }
+}

+ 91 - 0
jxtxkj/node_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue

@@ -0,0 +1,91 @@
+<template>
+	<!-- #ifdef APP-NVUE -->
+	<header>
+	<!-- #endif -->
+	<view
+	    class="u-index-anchor u-border-bottom"
+		:ref="`u-index-anchor-${text}`"
+	    :style="{
+			height: $u.addUnit(height),
+			backgroundColor: bgColor
+		}"
+	>
+		<text
+		    class="u-index-anchor__text"
+		    :style="{
+				fontSize: $u.addUnit(size),
+				color: color
+			}"
+		>{{ text }}</text>
+	</view>
+	<!-- #ifdef APP-NVUE -->
+	</header>
+	<!-- #endif -->
+</template>
+
+<script>
+	import props from './props.js';
+	// #ifdef APP-NVUE
+	const dom = uni.requireNativePlugin('dom')
+	// #endif
+	/**
+	 * IndexAnchor 列表锚点
+	 * @description 
+	 * @tutorial https://uviewui.com/components/indexList.html
+	 * @property {String | Number}	text	列表锚点文本内容
+	 * @property {String}			color	列表锚点文字颜色 ( 默认 '#606266' )
+	 * @property {String | Number}	size	列表锚点文字大小,单位默认px ( 默认 14 )
+	 * @property {String}			bgColor	列表锚点背景颜色 ( 默认 '#dedede' )
+	 * @property {String | Number}	height	列表锚点高度,单位默认px ( 默认 32 )
+	 * @example <u-index-anchor :text="indexList[index]"></u-index-anchor>
+	 */
+	export default {
+		name: 'u-index-anchor',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+		data() {
+			return {
+			}
+		},
+		mounted() {
+			this.init()
+		},
+		methods: {
+			init() {
+				// 此处会活动父组件实例,并赋值给实例的parent属性
+				const indexList = uni.$u.$parent.call(this, 'u-index-list')
+				if (!indexList) { 
+					return uni.$u.error('u-index-anchor必须要搭配u-index-list组件使用')
+				}
+				// 将当前实例放入到u-index-list中
+				indexList.anchors.push(this)
+				const indexListItem = uni.$u.$parent.call(this, 'u-index-item')
+				// #ifndef APP-NVUE
+				// 只有在非nvue下,u-index-anchor才是嵌套在u-index-item中的
+				if (!indexListItem) {
+					return uni.$u.error('u-index-anchor必须要搭配u-index-item组件使用')
+				}
+				// 设置u-index-item的id为anchor的text标识符,因为非nvue下滚动列表需要依赖scroll-view滚动到元素的特性
+				indexListItem.id = this.text.charCodeAt(0)
+				// #endif
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+
+	.u-index-anchor {
+		position: sticky;
+		top: 0;
+		@include flex;
+		align-items: center;
+		padding-left: 15px;
+		z-index: 1;
+
+		&__text {
+			@include flex;
+			align-items: center;
+		}
+	}
+</style>

+ 5 - 0
jxtxkj/node_modules/uview-ui/components/u-index-item/props.js

@@ -0,0 +1,5 @@
+export default {
+    props: {
+
+    }
+}

+ 87 - 0
jxtxkj/node_modules/uview-ui/components/u-index-item/u-index-item.vue

@@ -0,0 +1,87 @@
+<template>
+	<!-- #ifdef APP-NVUE -->
+	<cell ref="u-index-item">
+		<!-- #endif -->
+		<view
+			class="u-index-item"
+			:id="`u-index-item-${id}`"
+			:class="[`u-index-item-${id}`]"
+		>
+			<slot />
+		</view>
+		<!-- #ifdef APP-NVUE -->
+	</cell>
+	<!-- #endif -->
+</template>
+
+<script>
+	import props from './props.js';
+	// #ifdef APP-NVUE
+	// 由于weex为阿里的KPI业绩考核的产物,所以不支持百分比单位,这里需要通过dom查询组件的宽度
+	const dom = uni.requireNativePlugin('dom')
+	// #endif
+	/**
+	 * IndexItem 
+	 * @description 
+	 * @tutorial https://uviewui.com/components/indexList.html
+	 * @property {String}
+	 * @event {Function}
+	 * @example
+	 */
+	export default {
+		name: 'u-index-item',
+		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+		data() {
+			return {
+				// 本组件到滚动条顶部的距离
+				top: 0,
+				height: 0,
+				id: ''
+			}
+		},
+		created() {
+			// 子组件u-index-anchor的实例
+			this.anchor = {}
+		},
+		mounted() {
+			this.init()
+		},
+		methods: {
+			init() {
+				// 此处会活动父组件实例,并赋值给实例的parent属性
+				this.getParentData('u-index-list')
+				if (!this.parent) {
+					return uni.$u.error('u-index-item必须要搭配u-index-list组件使用')
+				}
+				uni.$u.sleep().then(() =>{
+					this.getIndexItemRect().then(size => {
+						// 由于对象的引用特性,此处会同时生效到父组件的children数组的本实例的top属性中,供父组件判断读取
+						this.top = Math.ceil(size.top)
+						this.height = Math.ceil(size.height)
+					})
+				})
+			},
+			getIndexItemRect() {
+				return new Promise(resolve => {
+					// #ifndef APP-NVUE
+					this.$uGetRect('.u-index-item').then(size => {
+						resolve(size)
+					})
+					// #endif
+
+					// #ifdef APP-NVUE
+					const ref = this.$refs['u-index-item']
+					dom.getComponentRect(ref, res => {
+						resolve(res.size)
+					})
+					// #endif
+				}) 
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "../../libs/css/components.scss";
+	
+</style>

+ 29 - 0
jxtxkj/node_modules/uview-ui/components/u-index-list/props.js

@@ -0,0 +1,29 @@
+export default {
+    props: {
+        // 右边锚点非激活的颜色
+        inactiveColor: {
+            type: String,
+            default: uni.$u.props.indexList.inactiveColor
+        },
+        // 右边锚点激活的颜色
+        activeColor: {
+            type: String,
+            default: uni.$u.props.indexList.activeColor
+        },
+        // 索引字符列表,数组形式
+        indexList: {
+            type: Array,
+            default: uni.$u.props.indexList.indexList
+        },
+        // 是否开启锚点自动吸顶
+        sticky: {
+            type: Boolean,
+            default: uni.$u.props.indexList.sticky
+        },
+        // 自定义导航栏的高度
+        customNavHeight: {
+            type: [String, Number],
+            default: uni.$u.props.indexList.customNavHeight
+        }
+    }
+}

部分文件因文件數量過多而無法顯示