Browse Source

升级vant ui

bding 2 năm trước cách đây
mục cha
commit
4b1fe090c2
100 tập tin đã thay đổi với 2832 bổ sung2871 xóa
  1. 10 3
      activityPages/activityDetail/activityDetail.vue
  2. 3 1
      components/suspen_button.vue
  3. 0 0
      pages-signIn/isSignIn/components/signInItem.vue
  4. 0 0
      pages-signIn/isSignIn/components/uploadContact.vue
  5. 4 4
      pages-signIn/isSignIn/isSignIn.vue
  6. 1 1
      pages.json
  7. 65 64
      wxcomponents/vant/dist/action-sheet/index.js
  8. 2 2
      wxcomponents/vant/dist/action-sheet/index.wxml
  9. 0 0
      wxcomponents/vant/dist/action-sheet/index.wxss
  10. 210 225
      wxcomponents/vant/dist/area/index.js
  11. 1 1
      wxcomponents/vant/dist/area/index.wxml
  12. 53 52
      wxcomponents/vant/dist/button/index.js
  13. 2 1
      wxcomponents/vant/dist/button/index.wxml
  14. 0 0
      wxcomponents/vant/dist/button/index.wxss
  15. 3 2
      wxcomponents/vant/dist/calendar/calendar.wxml
  16. 31 28
      wxcomponents/vant/dist/calendar/components/header/index.js
  17. 1 1
      wxcomponents/vant/dist/calendar/components/header/index.wxml
  18. 1 1
      wxcomponents/vant/dist/calendar/components/header/index.wxss
  19. 6 1
      wxcomponents/vant/dist/calendar/components/month/index.d.ts
  20. 148 157
      wxcomponents/vant/dist/calendar/components/month/index.js
  21. 1 1
      wxcomponents/vant/dist/calendar/components/month/index.wxml
  22. 0 0
      wxcomponents/vant/dist/calendar/components/month/index.wxss
  23. 331 298
      wxcomponents/vant/dist/calendar/index.js
  24. 3 2
      wxcomponents/vant/dist/calendar/index.wxml
  25. 2 2
      wxcomponents/vant/dist/calendar/index.wxs
  26. 1 1
      wxcomponents/vant/dist/calendar/index.wxss
  27. 3 8
      wxcomponents/vant/dist/calendar/utils.d.ts
  28. 62 57
      wxcomponents/vant/dist/calendar/utils.js
  29. 43 43
      wxcomponents/vant/dist/card/index.js
  30. 0 0
      wxcomponents/vant/dist/card/index.wxss
  31. 7 6
      wxcomponents/vant/dist/cell-group/index.js
  32. 4 2
      wxcomponents/vant/dist/cell-group/index.wxml
  33. 1 1
      wxcomponents/vant/dist/cell-group/index.wxss
  34. 32 32
      wxcomponents/vant/dist/cell/index.js
  35. 0 0
      wxcomponents/vant/dist/cell/index.wxss
  36. 30 25
      wxcomponents/vant/dist/checkbox-group/index.js
  37. 5 1
      wxcomponents/vant/dist/checkbox-group/index.wxml
  38. 1 1
      wxcomponents/vant/dist/checkbox-group/index.wxss
  39. 68 65
      wxcomponents/vant/dist/checkbox/index.js
  40. 1 1
      wxcomponents/vant/dist/checkbox/index.wxml
  41. 1 1
      wxcomponents/vant/dist/checkbox/index.wxss
  42. 2 4
      wxcomponents/vant/dist/circle/canvas.d.ts
  43. 41 41
      wxcomponents/vant/dist/circle/canvas.js
  44. 175 172
      wxcomponents/vant/dist/circle/index.js
  45. 1 1
      wxcomponents/vant/dist/circle/index.wxss
  46. 5 5
      wxcomponents/vant/dist/col/index.js
  47. 1 1
      wxcomponents/vant/dist/col/index.wxss
  48. 1 5
      wxcomponents/vant/dist/collapse-item/animate.d.ts
  49. 30 61
      wxcomponents/vant/dist/collapse-item/animate.js
  50. 51 50
      wxcomponents/vant/dist/collapse-item/index.js
  51. 1 0
      wxcomponents/vant/dist/collapse-item/index.wxml
  52. 1 1
      wxcomponents/vant/dist/collapse-item/index.wxss
  53. 40 38
      wxcomponents/vant/dist/collapse/index.js
  54. 2 6
      wxcomponents/vant/dist/common/component.d.ts
  55. 40 39
      wxcomponents/vant/dist/common/component.js
  56. 1 1
      wxcomponents/vant/dist/common/index.wxss
  57. 11 17
      wxcomponents/vant/dist/common/relation.d.ts
  58. 50 58
      wxcomponents/vant/dist/common/relation.js
  59. 1 1
      wxcomponents/vant/dist/common/style/clearfix.wxss
  60. 1 1
      wxcomponents/vant/dist/common/style/ellipsis.wxss
  61. 1 1
      wxcomponents/vant/dist/common/style/hairline.wxss
  62. 12 25
      wxcomponents/vant/dist/common/utils.d.ts
  63. 51 64
      wxcomponents/vant/dist/common/utils.js
  64. 1 3
      wxcomponents/vant/dist/common/validator.d.ts
  65. 10 10
      wxcomponents/vant/dist/common/validator.js
  66. 2 0
      wxcomponents/vant/dist/common/version.d.ts
  67. 39 28
      wxcomponents/vant/dist/common/version.js
  68. 90 89
      wxcomponents/vant/dist/count-down/index.js
  69. 1 1
      wxcomponents/vant/dist/count-down/index.wxss
  70. 1 1
      wxcomponents/vant/dist/count-down/utils.d.ts
  71. 45 41
      wxcomponents/vant/dist/count-down/utils.js
  72. 267 293
      wxcomponents/vant/dist/datetime-picker/index.js
  73. 24 39
      wxcomponents/vant/dist/definitions/index.d.ts
  74. 49 52
      wxcomponents/vant/dist/dialog/dialog.d.ts
  75. 56 63
      wxcomponents/vant/dist/dialog/dialog.js
  76. 111 110
      wxcomponents/vant/dist/dialog/index.js
  77. 2 2
      wxcomponents/vant/dist/dialog/index.wxml
  78. 1 1
      wxcomponents/vant/dist/dialog/index.wxss
  79. 9 9
      wxcomponents/vant/dist/divider/index.js
  80. 1 1
      wxcomponents/vant/dist/divider/index.wxss
  81. 122 103
      wxcomponents/vant/dist/dropdown-item/index.js
  82. 6 4
      wxcomponents/vant/dist/dropdown-item/index.wxml
  83. 1 1
      wxcomponents/vant/dist/dropdown-item/index.wxss
  84. 3 3
      wxcomponents/vant/dist/dropdown-item/shared.d.ts
  85. 106 101
      wxcomponents/vant/dist/dropdown-menu/index.js
  86. 2 2
      wxcomponents/vant/dist/dropdown-menu/index.wxml
  87. 1 1
      wxcomponents/vant/dist/dropdown-menu/index.wxss
  88. 6 6
      wxcomponents/vant/dist/empty/index.js
  89. 1 1
      wxcomponents/vant/dist/empty/index.json
  90. 1 0
      wxcomponents/vant/dist/empty/index.wxs
  91. 1 1
      wxcomponents/vant/dist/empty/index.wxss
  92. 104 118
      wxcomponents/vant/dist/field/index.js
  93. 3 3
      wxcomponents/vant/dist/field/index.wxml
  94. 0 0
      wxcomponents/vant/dist/field/index.wxss
  95. 1 0
      wxcomponents/vant/dist/field/input.wxml
  96. 58 57
      wxcomponents/vant/dist/field/props.js
  97. 28 28
      wxcomponents/vant/dist/goods-action-button/index.js
  98. 1 1
      wxcomponents/vant/dist/goods-action-button/index.wxss
  99. 20 15
      wxcomponents/vant/dist/goods-action-icon/index.js
  100. 2 0
      wxcomponents/vant/dist/goods-action-icon/index.wxml

+ 10 - 3
activityPages/activityDetail/activityDetail.vue

@@ -361,12 +361,12 @@
       <view v-show="false">
         <audioModule ref="childrenAudio" :showAudioPop="showAudioPop" />
       </view>
-      <suspenButton v-if="showSingInImg" :isDlgImg.sync="isDlgImg" type="活动详情" />
-      <van-popup :show="isDlgImg" @close="onCloseHandler">
+      <suspenButton v-if="showSingInImg" :showSingInImg.sync="showSingInImg" :isDlgImg.sync="isDlgImg" type="活动详情" />
+      <van-popup custom-class="custom-class-popup"  :show="isDlgImg" @close="onCloseHandler">
         <view class="sign-in-img-box">
           <image src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/not_have_login.png"></image>
           <view class="button-box">
-            <text @close="onCloseHandler">关闭</text>
+            <text @click="onCloseHandler">关闭</text>
             <text @click="downloadImage">保存图片</text>
           </view>
         </view>
@@ -1252,6 +1252,8 @@ export default {
     width: 704rpx;
     height: 1121rpx;
     background-color: #fff;
+    border-radius: 8rpx;
+    overflow: hidden;
     image {
       width: 100%;
       height: calc(100% - 108rpx);
@@ -1263,6 +1265,7 @@ export default {
       border-top: 1rpx solid #f0f0f0;
       text {
         flex: 1;
+        height: 100%;
         display: flex;
         align-items: center;
         justify-content: center;
@@ -1273,5 +1276,9 @@ export default {
       }
     }
   }
+  .custom-class-popup {
+    border-radius: 8rpx;
+    overflow: hidden;
+  }
 }
 </style>

+ 3 - 1
components/suspen_button.vue

@@ -2,7 +2,7 @@
   <view class="suspen-button">
     <view
       class="px-suspen-button"
-      :style="{ top: mobileTop, left: mobileLeft }"
+      :style="{ top: mobileTop, left: mobileLeft, bottom: '420rpx' }"
       @touchmove.stop.prevent="onTouchMove"
       @touchend.stop.prevent="ontouchend"
       v-if="type === '活动详情'"
@@ -57,6 +57,7 @@ export default {
       type: String,
       default: "",
     },
+    showSingInImg: {},
   },
   data() {
     return {
@@ -121,6 +122,7 @@ export default {
     // 点击了取消的按钮
     closeButtonHandler() {
       this.$emit("update:show", false);
+      this.$emit("update:showSingInImg", false);
     },
   },
 };

+ 0 - 0
pages-signIn/isSingIn/components/singInItem.vue → pages-signIn/isSignIn/components/signInItem.vue


+ 0 - 0
pages-signIn/isSingIn/components/uploadContact.vue → pages-signIn/isSignIn/components/uploadContact.vue


+ 4 - 4
pages-signIn/isSingIn/isSingIn.vue → pages-signIn/isSignIn/isSignIn.vue

@@ -1,17 +1,17 @@
 <template>
   <view class="container content-sign-in">
     <view class="content-box">
-		<!-- <sing-in-item /> -->
-    <upload-contact />
+		<signInItem />
+    <!-- <upload-contact /> -->
 	</view>
   </view>
 </template>
 
 <script>
-import singInItem from './components/singInItem.vue';
+import signInItem from './components/signInItem.vue';
 import UploadContact from './components/uploadContact.vue';
 export default {
-  components: { singInItem, UploadContact },
+  components: { signInItem, UploadContact },
   data() {
     return {};
   },

+ 1 - 1
pages.json

@@ -364,7 +364,7 @@
       "root": "pages-signIn",
       "pages": [
         {
-          "path": "isSingIn/isSingIn",
+          "path": "isSignIn/isSignIn",
           "style": {
             "navigationBarTitleText": "扫码签到",
             "enablePullDownRefresh": false

+ 65 - 64
wxcomponents/vant/dist/action-sheet/index.js

@@ -1,70 +1,71 @@
 import { VantComponent } from '../common/component';
 import { button } from '../mixins/button';
 VantComponent({
-  mixins: [button],
-  props: {
-    show: Boolean,
-    title: String,
-    cancelText: String,
-    description: String,
-    round: {
-      type: Boolean,
-      value: true,
+    classes: ['list-class'],
+    mixins: [button],
+    props: {
+        show: Boolean,
+        title: String,
+        cancelText: String,
+        description: String,
+        round: {
+            type: Boolean,
+            value: true,
+        },
+        zIndex: {
+            type: Number,
+            value: 100,
+        },
+        actions: {
+            type: Array,
+            value: [],
+        },
+        overlay: {
+            type: Boolean,
+            value: true,
+        },
+        closeOnClickOverlay: {
+            type: Boolean,
+            value: true,
+        },
+        closeOnClickAction: {
+            type: Boolean,
+            value: true,
+        },
+        safeAreaInsetBottom: {
+            type: Boolean,
+            value: true,
+        },
     },
-    zIndex: {
-      type: Number,
-      value: 100,
+    methods: {
+        onSelect(event) {
+            const { index } = event.currentTarget.dataset;
+            const { actions, closeOnClickAction, canIUseGetUserProfile } = this.data;
+            const item = actions[index];
+            if (item) {
+                this.$emit('select', item);
+                if (closeOnClickAction) {
+                    this.onClose();
+                }
+                if (item.openType === 'getUserInfo' && canIUseGetUserProfile) {
+                    wx.getUserProfile({
+                        desc: item.getUserProfileDesc || '  ',
+                        complete: (userProfile) => {
+                            this.$emit('getuserinfo', userProfile);
+                        },
+                    });
+                }
+            }
+        },
+        onCancel() {
+            this.$emit('cancel');
+        },
+        onClose() {
+            this.$emit('close');
+        },
+        onClickOverlay() {
+            this.$emit('click-overlay');
+            this.onClose();
+        },
     },
-    actions: {
-      type: Array,
-      value: [],
-    },
-    overlay: {
-      type: Boolean,
-      value: true,
-    },
-    closeOnClickOverlay: {
-      type: Boolean,
-      value: true,
-    },
-    closeOnClickAction: {
-      type: Boolean,
-      value: true,
-    },
-    safeAreaInsetBottom: {
-      type: Boolean,
-      value: true,
-    },
-  },
-  methods: {
-    onSelect(event) {
-      const { index } = event.currentTarget.dataset;
-      const { actions, closeOnClickAction, canIUseGetUserProfile } = this.data;
-      const item = actions[index];
-      if (item) {
-        this.$emit('select', item);
-        if (closeOnClickAction) {
-          this.onClose();
-        }
-        if (item.openType === 'getUserInfo' && canIUseGetUserProfile) {
-          wx.getUserProfile({
-            desc: item.getUserProfileDesc || '  ',
-            complete: (userProfile) => {
-              this.$emit('getuserinfo', userProfile);
-            },
-          });
-        }
-      }
-    },
-    onCancel() {
-      this.$emit('cancel');
-    },
-    onClose() {
-      this.$emit('close');
-    },
-    onClickOverlay() {
-      this.$emit('click-overlay');
-      this.onClose();
-    },
-  },
 });

+ 2 - 2
wxcomponents/vant/dist/action-sheet/index.wxml

@@ -6,7 +6,7 @@
   round="{{ round }}"
   z-index="{{ zIndex }}"
   overlay="{{ overlay }}"
-  custom-class="van-action-sheet"
+  custom-class="van-action-sheet custom-class"
   safe-area-inset-bottom="{{ safeAreaInsetBottom }}"
   close-on-click-overlay="{{ closeOnClickOverlay }}"
   bind:close="onClickOverlay"
@@ -22,7 +22,7 @@
   <view wx:if="{{ description }}" class="van-action-sheet__description van-hairline--bottom">
     {{ description }}
   </view>
-  <view wx:if="{{ actions && actions.length }}">
+  <view wx:if="{{ actions && actions.length }}" class="list-class">
     <!-- button外包一层view,防止actions动态变化,导致渲染时button被打散 -->
     <button
       wx:for="{{ actions }}"

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
wxcomponents/vant/dist/action-sheet/index.wxss


+ 210 - 225
wxcomponents/vant/dist/area/index.js

@@ -3,233 +3,218 @@ import { pickerProps } from '../picker/shared';
 import { requestAnimationFrame } from '../common/utils';
 const EMPTY_CODE = '000000';
 VantComponent({
-  classes: ['active-class', 'toolbar-class', 'column-class'],
-  props: Object.assign(Object.assign({}, pickerProps), {
-    value: {
-      type: String,
-      observer(value) {
-        this.code = value;
-        this.setValues();
-      },
-    },
-    areaList: {
-      type: Object,
-      value: {},
-      observer: 'setValues',
-    },
-    columnsNum: {
-      type: null,
-      value: 3,
-    },
-    columnsPlaceholder: {
-      type: Array,
-      observer(val) {
-        this.setData({
-          typeToColumnsPlaceholder: {
-            province: val[0] || '',
-            city: val[1] || '',
-            county: val[2] || '',
-          },
+    classes: ['active-class', 'toolbar-class', 'column-class'],
+    props: Object.assign(Object.assign({}, pickerProps), { showToolbar: {
+            type: Boolean,
+            value: true,
+        }, value: {
+            type: String,
+            observer(value) {
+                this.code = value;
+                this.setValues();
+            },
+        }, areaList: {
+            type: Object,
+            value: {},
+            observer: 'setValues',
+        }, columnsNum: {
+            type: null,
+            value: 3,
+        }, columnsPlaceholder: {
+            type: Array,
+            observer(val) {
+                this.setData({
+                    typeToColumnsPlaceholder: {
+                        province: val[0] || '',
+                        city: val[1] || '',
+                        county: val[2] || '',
+                    },
+                });
+            },
+        } }),
+    data: {
+        columns: [{ values: [] }, { values: [] }, { values: [] }],
+        typeToColumnsPlaceholder: {},
+    },
+    mounted() {
+        requestAnimationFrame(() => {
+            this.setValues();
         });
-      },
-    },
-  }),
-  data: {
-    columns: [{ values: [] }, { values: [] }, { values: [] }],
-    typeToColumnsPlaceholder: {},
-  },
-  mounted() {
-    requestAnimationFrame(() => {
-      this.setValues();
-    });
-  },
-  methods: {
-    getPicker() {
-      if (this.picker == null) {
-        this.picker = this.selectComponent('.van-area__picker');
-      }
-      return this.picker;
-    },
-    onCancel(event) {
-      this.emit('cancel', event.detail);
     },
-    onConfirm(event) {
-      const { index } = event.detail;
-      let { value } = event.detail;
-      value = this.parseValues(value);
-      this.emit('confirm', { value, index });
-    },
-    emit(type, detail) {
-      detail.values = detail.value;
-      delete detail.value;
-      this.$emit(type, detail);
-    },
-    parseValues(values) {
-      const { columnsPlaceholder } = this.data;
-      return values.map((value, index) => {
-        if (
-          value &&
-          (!value.code || value.name === columnsPlaceholder[index])
-        ) {
-          return Object.assign(Object.assign({}, value), {
-            code: '',
-            name: '',
-          });
-        }
-        return value;
-      });
-    },
-    onChange(event) {
-      var _a;
-      const { index, picker, value } = event.detail;
-      this.code = value[index].code;
-      (_a = this.setValues()) === null || _a === void 0
-        ? void 0
-        : _a.then(() => {
-            this.$emit('change', {
-              picker,
-              values: this.parseValues(picker.getValues()),
-              index,
+    methods: {
+        getPicker() {
+            if (this.picker == null) {
+                this.picker = this.selectComponent('.van-area__picker');
+            }
+            return this.picker;
+        },
+        onCancel(event) {
+            this.emit('cancel', event.detail);
+        },
+        onConfirm(event) {
+            const { index } = event.detail;
+            let { value } = event.detail;
+            value = this.parseValues(value);
+            this.emit('confirm', { value, index });
+        },
+        emit(type, detail) {
+            detail.values = detail.value;
+            delete detail.value;
+            this.$emit(type, detail);
+        },
+        parseValues(values) {
+            const { columnsPlaceholder } = this.data;
+            return values.map((value, index) => {
+                if (value &&
+                    (!value.code || value.name === columnsPlaceholder[index])) {
+                    return Object.assign(Object.assign({}, value), { code: '', name: '' });
+                }
+                return value;
             });
-          });
-    },
-    getConfig(type) {
-      const { areaList } = this.data;
-      return (areaList && areaList[`${type}_list`]) || {};
-    },
-    getList(type, code) {
-      if (type !== 'province' && !code) {
-        return [];
-      }
-      const { typeToColumnsPlaceholder } = this.data;
-      const list = this.getConfig(type);
-      let result = Object.keys(list).map((code) => ({
-        code,
-        name: list[code],
-      }));
-      if (code != null) {
-        // oversea code
-        if (code[0] === '9' && type === 'city') {
-          code = '9';
-        }
-        result = result.filter((item) => item.code.indexOf(code) === 0);
-      }
-      if (typeToColumnsPlaceholder[type] && result.length) {
-        // set columns placeholder
-        const codeFill =
-          type === 'province'
-            ? ''
-            : type === 'city'
-            ? EMPTY_CODE.slice(2, 4)
-            : EMPTY_CODE.slice(4, 6);
-        result.unshift({
-          code: `${code}${codeFill}`,
-          name: typeToColumnsPlaceholder[type],
-        });
-      }
-      return result;
-    },
-    getIndex(type, code) {
-      let compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6;
-      const list = this.getList(type, code.slice(0, compareNum - 2));
-      // oversea code
-      if (code[0] === '9' && type === 'province') {
-        compareNum = 1;
-      }
-      code = code.slice(0, compareNum);
-      for (let i = 0; i < list.length; i++) {
-        if (list[i].code.slice(0, compareNum) === code) {
-          return i;
-        }
-      }
-      return 0;
-    },
-    setValues() {
-      const picker = this.getPicker();
-      if (!picker) {
-        return;
-      }
-      let code = this.code || this.getDefaultCode();
-      const provinceList = this.getList('province');
-      const cityList = this.getList('city', code.slice(0, 2));
-      const stack = [];
-      const indexes = [];
-      const { columnsNum } = this.data;
-      if (columnsNum >= 1) {
-        stack.push(picker.setColumnValues(0, provinceList, false));
-        indexes.push(this.getIndex('province', code));
-      }
-      if (columnsNum >= 2) {
-        stack.push(picker.setColumnValues(1, cityList, false));
-        indexes.push(this.getIndex('city', code));
-        if (cityList.length && code.slice(2, 4) === '00') {
-          [{ code }] = cityList;
-        }
-      }
-      if (columnsNum === 3) {
-        stack.push(
-          picker.setColumnValues(
-            2,
-            this.getList('county', code.slice(0, 4)),
-            false
-          )
-        );
-        indexes.push(this.getIndex('county', code));
-      }
-      return Promise.all(stack)
-        .catch(() => {})
-        .then(() => picker.setIndexes(indexes))
-        .catch(() => {});
-    },
-    getDefaultCode() {
-      const { columnsPlaceholder } = this.data;
-      if (columnsPlaceholder.length) {
-        return EMPTY_CODE;
-      }
-      const countyCodes = Object.keys(this.getConfig('county'));
-      if (countyCodes[0]) {
-        return countyCodes[0];
-      }
-      const cityCodes = Object.keys(this.getConfig('city'));
-      if (cityCodes[0]) {
-        return cityCodes[0];
-      }
-      return '';
-    },
-    getValues() {
-      const picker = this.getPicker();
-      if (!picker) {
-        return [];
-      }
-      return this.parseValues(picker.getValues().filter((value) => !!value));
-    },
-    getDetail() {
-      const values = this.getValues();
-      const area = {
-        code: '',
-        country: '',
-        province: '',
-        city: '',
-        county: '',
-      };
-      if (!values.length) {
-        return area;
-      }
-      const names = values.map((item) => item.name);
-      area.code = values[values.length - 1].code;
-      if (area.code[0] === '9') {
-        area.country = names[1] || '';
-        area.province = names[2] || '';
-      } else {
-        area.province = names[0] || '';
-        area.city = names[1] || '';
-        area.county = names[2] || '';
-      }
-      return area;
-    },
-    reset(code) {
-      this.code = code || '';
-      return this.setValues();
+        },
+        onChange(event) {
+            var _a;
+            const { index, picker, value } = event.detail;
+            this.code = value[index].code;
+            (_a = this.setValues()) === null || _a === void 0 ? void 0 : _a.then(() => {
+                this.$emit('change', {
+                    picker,
+                    values: this.parseValues(picker.getValues()),
+                    index,
+                });
+            });
+        },
+        getConfig(type) {
+            const { areaList } = this.data;
+            return (areaList && areaList[`${type}_list`]) || {};
+        },
+        getList(type, code) {
+            if (type !== 'province' && !code) {
+                return [];
+            }
+            const { typeToColumnsPlaceholder } = this.data;
+            const list = this.getConfig(type);
+            let result = Object.keys(list).map((code) => ({
+                code,
+                name: list[code],
+            }));
+            if (code != null) {
+                // oversea code
+                if (code[0] === '9' && type === 'city') {
+                    code = '9';
+                }
+                result = result.filter((item) => item.code.indexOf(code) === 0);
+            }
+            if (typeToColumnsPlaceholder[type] && result.length) {
+                // set columns placeholder
+                const codeFill = type === 'province'
+                    ? ''
+                    : type === 'city'
+                        ? EMPTY_CODE.slice(2, 4)
+                        : EMPTY_CODE.slice(4, 6);
+                result.unshift({
+                    code: `${code}${codeFill}`,
+                    name: typeToColumnsPlaceholder[type],
+                });
+            }
+            return result;
+        },
+        getIndex(type, code) {
+            let compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6;
+            const list = this.getList(type, code.slice(0, compareNum - 2));
+            // oversea code
+            if (code[0] === '9' && type === 'province') {
+                compareNum = 1;
+            }
+            code = code.slice(0, compareNum);
+            for (let i = 0; i < list.length; i++) {
+                if (list[i].code.slice(0, compareNum) === code) {
+                    return i;
+                }
+            }
+            return 0;
+        },
+        setValues() {
+            const picker = this.getPicker();
+            if (!picker) {
+                return;
+            }
+            let code = this.code || this.getDefaultCode();
+            const provinceList = this.getList('province');
+            const cityList = this.getList('city', code.slice(0, 2));
+            const stack = [];
+            const indexes = [];
+            const { columnsNum } = this.data;
+            if (columnsNum >= 1) {
+                stack.push(picker.setColumnValues(0, provinceList, false));
+                indexes.push(this.getIndex('province', code));
+            }
+            if (columnsNum >= 2) {
+                stack.push(picker.setColumnValues(1, cityList, false));
+                indexes.push(this.getIndex('city', code));
+                if (cityList.length && code.slice(2, 4) === '00') {
+                    [{ code }] = cityList;
+                }
+            }
+            if (columnsNum === 3) {
+                stack.push(picker.setColumnValues(2, this.getList('county', code.slice(0, 4)), false));
+                indexes.push(this.getIndex('county', code));
+            }
+            return Promise.all(stack)
+                .catch(() => { })
+                .then(() => picker.setIndexes(indexes))
+                .catch(() => { });
+        },
+        getDefaultCode() {
+            const { columnsPlaceholder } = this.data;
+            if (columnsPlaceholder.length) {
+                return EMPTY_CODE;
+            }
+            const countyCodes = Object.keys(this.getConfig('county'));
+            if (countyCodes[0]) {
+                return countyCodes[0];
+            }
+            const cityCodes = Object.keys(this.getConfig('city'));
+            if (cityCodes[0]) {
+                return cityCodes[0];
+            }
+            return '';
+        },
+        getValues() {
+            const picker = this.getPicker();
+            if (!picker) {
+                return [];
+            }
+            return this.parseValues(picker.getValues().filter((value) => !!value));
+        },
+        getDetail() {
+            const values = this.getValues();
+            const area = {
+                code: '',
+                country: '',
+                province: '',
+                city: '',
+                county: '',
+            };
+            if (!values.length) {
+                return area;
+            }
+            const names = values.map((item) => item.name);
+            area.code = values[values.length - 1].code;
+            if (area.code[0] === '9') {
+                area.country = names[1] || '';
+                area.province = names[2] || '';
+            }
+            else {
+                area.province = names[0] || '';
+                area.city = names[1] || '';
+                area.county = names[2] || '';
+            }
+            return area;
+        },
+        reset(code) {
+            this.code = code || '';
+            return this.setValues();
+        },
     },
-  },
 });

+ 1 - 1
wxcomponents/vant/dist/area/index.wxml

@@ -5,7 +5,7 @@
   active-class="active-class"
   toolbar-class="toolbar-class"
   column-class="column-class"
-  show-toolbar
+  show-toolbar="{{ showToolbar }}"
   value-key="name"
   title="{{ title }}"
   loading="{{ loading }}"

+ 53 - 52
wxcomponents/vant/dist/button/index.js

@@ -3,61 +3,62 @@ import { button } from '../mixins/button';
 import { canIUseFormFieldButton } from '../common/version';
 const mixins = [button];
 if (canIUseFormFieldButton()) {
-  mixins.push('wx://form-field-button');
+    mixins.push('wx://form-field-button');
 }
 VantComponent({
-  mixins,
-  classes: ['hover-class', 'loading-class'],
-  data: {
-    baseStyle: '',
-  },
-  props: {
-    formType: String,
-    icon: String,
-    classPrefix: {
-      type: String,
-      value: 'van-icon',
+    mixins,
+    classes: ['hover-class', 'loading-class'],
+    data: {
+        baseStyle: '',
     },
-    plain: Boolean,
-    block: Boolean,
-    round: Boolean,
-    square: Boolean,
-    loading: Boolean,
-    hairline: Boolean,
-    disabled: Boolean,
-    loadingText: String,
-    customStyle: String,
-    loadingType: {
-      type: String,
-      value: 'circular',
+    props: {
+        formType: String,
+        icon: String,
+        classPrefix: {
+            type: String,
+            value: 'van-icon',
+        },
+        plain: Boolean,
+        block: Boolean,
+        round: Boolean,
+        square: Boolean,
+        loading: Boolean,
+        hairline: Boolean,
+        disabled: Boolean,
+        loadingText: String,
+        customStyle: String,
+        loadingType: {
+            type: String,
+            value: 'circular',
+        },
+        type: {
+            type: String,
+            value: 'default',
+        },
+        dataset: null,
+        size: {
+            type: String,
+            value: 'normal',
+        },
+        loadingSize: {
+            type: String,
+            value: '20px',
+        },
+        color: String,
     },
-    type: {
-      type: String,
-      value: 'default',
+    methods: {
+        onClick(event) {
+            this.$emit('click', event);
+            const { canIUseGetUserProfile, openType, getUserProfileDesc, lang, } = this.data;
+            if (openType === 'getUserInfo' && canIUseGetUserProfile) {
+                wx.getUserProfile({
+                    desc: getUserProfileDesc || '  ',
+                    lang: lang || 'en',
+                    complete: (userProfile) => {
+                        this.$emit('getuserinfo', userProfile);
+                    },
+                });
+            }
+        },
     },
-    dataset: null,
-    size: {
-      type: String,
-      value: 'normal',
-    },
-    loadingSize: {
-      type: String,
-      value: '20px',
-    },
-    color: String,
-  },
-  methods: {
-    onClick(event) {
-      this.$emit('click', event);
-      const { canIUseGetUserProfile, openType, getUserProfileDesc } = this.data;
-      if (openType === 'getUserInfo' && canIUseGetUserProfile) {
-        wx.getUserProfile({
-          desc: getUserProfileDesc || '  ',
-          complete: (userProfile) => {
-            this.$emit('getuserinfo', userProfile);
-          },
-        });
-      }
-    },
-  },
 });

+ 2 - 1
wxcomponents/vant/dist/button/index.wxml

@@ -5,7 +5,7 @@
   id="{{ id }}"
   data-detail="{{ dataset }}"
   class="custom-class {{ utils.bem('button', [type, size, { block, round, plain, square, loading, disabled, hairline, unclickable: disabled || loading }]) }} {{ hairline ? 'van-hairline--surround' : '' }}"
-  hover-class="van-button--active hover-class"
+  hover-class="{{ disabled || loading ? '' : 'van-button--active hover-class'}}"
   lang="{{ lang }}"
   form-type="{{ formType }}"
   style="{{ computed.rootStyle({ plain, color, customStyle }) }}"
@@ -25,6 +25,7 @@
   binderror="onError"
   bindlaunchapp="onLaunchApp"
   bindopensetting="onOpenSetting"
+  bindchooseavatar="onChooseAvatar"
 >
   <block wx:if="{{ loading }}">
     <van-loading

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
wxcomponents/vant/dist/button/index.wxss


+ 3 - 2
wxcomponents/vant/dist/calendar/calendar.wxml

@@ -5,6 +5,7 @@
     subtitle="{{ subtitle }}"
     showSubtitle="{{ showSubtitle }}"
     firstDayOfWeek="{{ firstDayOfWeek }}"
+    bind:click-subtitle="onClickSubtitle"
   >
     <slot name="title" slot="title"></slot>
   </header>
@@ -53,12 +54,12 @@
       type="danger"
       color="{{ color }}"
       custom-class="van-calendar__confirm"
-      disabled="{{ computed.getButtonDisabled(type, currentDate) }}"
+      disabled="{{ computed.getButtonDisabled(type, currentDate, minRange) }}"
       nativeType="text"
       bind:click="onConfirm"
     >
       {{
-        computed.getButtonDisabled(type, currentDate)
+        computed.getButtonDisabled(type, currentDate, minRange)
           ? confirmDisabledText
           : confirmText
       }}

+ 31 - 28
wxcomponents/vant/dist/calendar/components/header/index.js

@@ -1,34 +1,37 @@
 import { VantComponent } from '../../../common/component';
 VantComponent({
-  props: {
-    title: {
-      type: String,
-      value: '日期选择',
+    props: {
+        title: {
+            type: String,
+            value: '日期选择',
+        },
+        subtitle: String,
+        showTitle: Boolean,
+        showSubtitle: Boolean,
+        firstDayOfWeek: {
+            type: Number,
+            observer: 'initWeekDay',
+        },
     },
-    subtitle: String,
-    showTitle: Boolean,
-    showSubtitle: Boolean,
-    firstDayOfWeek: {
-      type: Number,
-      observer: 'initWeekDay',
+    data: {
+        weekdays: [],
     },
-  },
-  data: {
-    weekdays: [],
-  },
-  created() {
-    this.initWeekDay();
-  },
-  methods: {
-    initWeekDay() {
-      const defaultWeeks = ['日', '一', '二', '三', '四', '五', '六'];
-      const firstDayOfWeek = this.data.firstDayOfWeek || 0;
-      this.setData({
-        weekdays: [
-          ...defaultWeeks.slice(firstDayOfWeek, 7),
-          ...defaultWeeks.slice(0, firstDayOfWeek),
-        ],
-      });
+    created() {
+        this.initWeekDay();
+    },
+    methods: {
+        initWeekDay() {
+            const defaultWeeks = ['日', '一', '二', '三', '四', '五', '六'];
+            const firstDayOfWeek = this.data.firstDayOfWeek || 0;
+            this.setData({
+                weekdays: [
+                    ...defaultWeeks.slice(firstDayOfWeek, 7),
+                    ...defaultWeeks.slice(0, firstDayOfWeek),
+                ],
+            });
+        },
+        onClickSubtitle(event) {
+            this.$emit('click-subtitle', event);
+        },
     },
-  },
 });

+ 1 - 1
wxcomponents/vant/dist/calendar/components/header/index.wxml

@@ -4,7 +4,7 @@
     <view class="van-calendar__header-title">{{ title }}</view>
   </block>
 
-  <view wx:if="{{ showSubtitle }}" class="van-calendar__header-subtitle">
+  <view wx:if="{{ showSubtitle }}" class="van-calendar__header-subtitle" bind:tap="onClickSubtitle">
     {{ subtitle }}
   </view>
 

+ 1 - 1
wxcomponents/vant/dist/calendar/components/header/index.wxss

@@ -1 +1 @@
-@import '../../../common/index.wxss';.van-calendar__header{-webkit-flex-shrink:0;flex-shrink:0;box-shadow:0 2px 10px rgba(125,126,128,.16);box-shadow:var(--calendar-header-box-shadow,0 2px 10px rgba(125,126,128,.16))}.van-calendar__header-subtitle,.van-calendar__header-title{text-align:center;height:44px;height:var(--calendar-header-title-height,44px);font-weight:500;font-weight:var(--font-weight-bold,500);line-height:44px;line-height:var(--calendar-header-title-height,44px)}.van-calendar__header-title+.van-calendar__header-title,.van-calendar__header-title:empty{display:none}.van-calendar__header-title:empty+.van-calendar__header-title{display:block!important}.van-calendar__weekdays{display:-webkit-flex;display:flex}.van-calendar__weekday{-webkit-flex:1;flex:1;text-align:center;font-size:12px;font-size:var(--calendar-weekdays-font-size,12px);line-height:30px;line-height:var(--calendar-weekdays-height,30px)}
+@import '../../../common/index.wxss';.van-calendar__header{box-shadow:var(--calendar-header-box-shadow,0 2px 10px hsla(220,1%,50%,.16));flex-shrink:0}.van-calendar__header-subtitle,.van-calendar__header-title{font-weight:var(--font-weight-bold,500);height:var(--calendar-header-title-height,44px);line-height:var(--calendar-header-title-height,44px);text-align:center}.van-calendar__header-title+.van-calendar__header-title,.van-calendar__header-title:empty{display:none}.van-calendar__header-title:empty+.van-calendar__header-title{display:block!important}.van-calendar__weekdays{display:flex}.van-calendar__weekday{flex:1;font-size:var(--calendar-weekdays-font-size,12px);line-height:var(--calendar-weekdays-height,30px);text-align:center}

+ 6 - 1
wxcomponents/vant/dist/calendar/components/month/index.d.ts

@@ -1 +1,6 @@
-export {};
+export interface Day {
+    date: Date;
+    type: string;
+    text: number;
+    bottomInfo?: string;
+}

+ 148 - 157
wxcomponents/vant/dist/calendar/components/month/index.js

@@ -1,163 +1,154 @@
 import { VantComponent } from '../../../common/component';
-import {
-  getMonthEndDay,
-  compareDay,
-  getPrevDay,
-  getNextDay,
-} from '../../utils';
+import { getMonthEndDay, compareDay, getPrevDay, getNextDay, } from '../../utils';
 VantComponent({
-  props: {
-    date: {
-      type: null,
-      observer: 'setDays',
+    props: {
+        date: {
+            type: null,
+            observer: 'setDays',
+        },
+        type: {
+            type: String,
+            observer: 'setDays',
+        },
+        color: String,
+        minDate: {
+            type: null,
+            observer: 'setDays',
+        },
+        maxDate: {
+            type: null,
+            observer: 'setDays',
+        },
+        showMark: Boolean,
+        rowHeight: null,
+        formatter: {
+            type: null,
+            observer: 'setDays',
+        },
+        currentDate: {
+            type: null,
+            observer: 'setDays',
+        },
+        firstDayOfWeek: {
+            type: Number,
+            observer: 'setDays',
+        },
+        allowSameDay: Boolean,
+        showSubtitle: Boolean,
+        showMonthTitle: Boolean,
     },
-    type: {
-      type: String,
-      observer: 'setDays',
+    data: {
+        visible: true,
+        days: [],
     },
-    color: String,
-    minDate: {
-      type: null,
-      observer: 'setDays',
+    methods: {
+        onClick(event) {
+            const { index } = event.currentTarget.dataset;
+            const item = this.data.days[index];
+            if (item.type !== 'disabled') {
+                this.$emit('click', item);
+            }
+        },
+        setDays() {
+            const days = [];
+            const startDate = new Date(this.data.date);
+            const year = startDate.getFullYear();
+            const month = startDate.getMonth();
+            const totalDay = getMonthEndDay(startDate.getFullYear(), startDate.getMonth() + 1);
+            for (let day = 1; day <= totalDay; day++) {
+                const date = new Date(year, month, day);
+                const type = this.getDayType(date);
+                let config = {
+                    date,
+                    type,
+                    text: day,
+                    bottomInfo: this.getBottomInfo(type),
+                };
+                if (this.data.formatter) {
+                    config = this.data.formatter(config);
+                }
+                days.push(config);
+            }
+            this.setData({ days });
+        },
+        getMultipleDayType(day) {
+            const { currentDate } = this.data;
+            if (!Array.isArray(currentDate)) {
+                return '';
+            }
+            const isSelected = (date) => currentDate.some((item) => compareDay(item, date) === 0);
+            if (isSelected(day)) {
+                const prevDay = getPrevDay(day);
+                const nextDay = getNextDay(day);
+                const prevSelected = isSelected(prevDay);
+                const nextSelected = isSelected(nextDay);
+                if (prevSelected && nextSelected) {
+                    return 'multiple-middle';
+                }
+                if (prevSelected) {
+                    return 'end';
+                }
+                return nextSelected ? 'start' : 'multiple-selected';
+            }
+            return '';
+        },
+        getRangeDayType(day) {
+            const { currentDate, allowSameDay } = this.data;
+            if (!Array.isArray(currentDate)) {
+                return '';
+            }
+            const [startDay, endDay] = currentDate;
+            if (!startDay) {
+                return '';
+            }
+            const compareToStart = compareDay(day, startDay);
+            if (!endDay) {
+                return compareToStart === 0 ? 'start' : '';
+            }
+            const compareToEnd = compareDay(day, endDay);
+            if (compareToStart === 0 && compareToEnd === 0 && allowSameDay) {
+                return 'start-end';
+            }
+            if (compareToStart === 0) {
+                return 'start';
+            }
+            if (compareToEnd === 0) {
+                return 'end';
+            }
+            if (compareToStart > 0 && compareToEnd < 0) {
+                return 'middle';
+            }
+            return '';
+        },
+        getDayType(day) {
+            const { type, minDate, maxDate, currentDate } = this.data;
+            if (compareDay(day, minDate) < 0 || compareDay(day, maxDate) > 0) {
+                return 'disabled';
+            }
+            if (type === 'single') {
+                return compareDay(day, currentDate) === 0 ? 'selected' : '';
+            }
+            if (type === 'multiple') {
+                return this.getMultipleDayType(day);
+            }
+            /* istanbul ignore else */
+            if (type === 'range') {
+                return this.getRangeDayType(day);
+            }
+            return '';
+        },
+        getBottomInfo(type) {
+            if (this.data.type === 'range') {
+                if (type === 'start') {
+                    return '开始';
+                }
+                if (type === 'end') {
+                    return '结束';
+                }
+                if (type === 'start-end') {
+                    return '开始/结束';
+                }
+            }
+        },
     },
-    maxDate: {
-      type: null,
-      observer: 'setDays',
-    },
-    showMark: Boolean,
-    rowHeight: null,
-    formatter: {
-      type: null,
-      observer: 'setDays',
-    },
-    currentDate: {
-      type: null,
-      observer: 'setDays',
-    },
-    firstDayOfWeek: {
-      type: Number,
-      observer: 'setDays',
-    },
-    allowSameDay: Boolean,
-    showSubtitle: Boolean,
-    showMonthTitle: Boolean,
-  },
-  data: {
-    visible: true,
-    days: [],
-  },
-  methods: {
-    onClick(event) {
-      const { index } = event.currentTarget.dataset;
-      const item = this.data.days[index];
-      if (item.type !== 'disabled') {
-        this.$emit('click', item);
-      }
-    },
-    setDays() {
-      const days = [];
-      const startDate = new Date(this.data.date);
-      const year = startDate.getFullYear();
-      const month = startDate.getMonth();
-      const totalDay = getMonthEndDay(
-        startDate.getFullYear(),
-        startDate.getMonth() + 1
-      );
-      for (let day = 1; day <= totalDay; day++) {
-        const date = new Date(year, month, day);
-        const type = this.getDayType(date);
-        let config = {
-          date,
-          type,
-          text: day,
-          bottomInfo: this.getBottomInfo(type),
-        };
-        if (this.data.formatter) {
-          config = this.data.formatter(config);
-        }
-        days.push(config);
-      }
-      this.setData({ days });
-    },
-    getMultipleDayType(day) {
-      const { currentDate } = this.data;
-      if (!Array.isArray(currentDate)) {
-        return '';
-      }
-      const isSelected = (date) =>
-        currentDate.some((item) => compareDay(item, date) === 0);
-      if (isSelected(day)) {
-        const prevDay = getPrevDay(day);
-        const nextDay = getNextDay(day);
-        const prevSelected = isSelected(prevDay);
-        const nextSelected = isSelected(nextDay);
-        if (prevSelected && nextSelected) {
-          return 'multiple-middle';
-        }
-        if (prevSelected) {
-          return 'end';
-        }
-        return nextSelected ? 'start' : 'multiple-selected';
-      }
-      return '';
-    },
-    getRangeDayType(day) {
-      const { currentDate, allowSameDay } = this.data;
-      if (!Array.isArray(currentDate)) {
-        return '';
-      }
-      const [startDay, endDay] = currentDate;
-      if (!startDay) {
-        return '';
-      }
-      const compareToStart = compareDay(day, startDay);
-      if (!endDay) {
-        return compareToStart === 0 ? 'start' : '';
-      }
-      const compareToEnd = compareDay(day, endDay);
-      if (compareToStart === 0 && compareToEnd === 0 && allowSameDay) {
-        return 'start-end';
-      }
-      if (compareToStart === 0) {
-        return 'start';
-      }
-      if (compareToEnd === 0) {
-        return 'end';
-      }
-      if (compareToStart > 0 && compareToEnd < 0) {
-        return 'middle';
-      }
-      return '';
-    },
-    getDayType(day) {
-      const { type, minDate, maxDate, currentDate } = this.data;
-      if (compareDay(day, minDate) < 0 || compareDay(day, maxDate) > 0) {
-        return 'disabled';
-      }
-      if (type === 'single') {
-        return compareDay(day, currentDate) === 0 ? 'selected' : '';
-      }
-      if (type === 'multiple') {
-        return this.getMultipleDayType(day);
-      }
-      /* istanbul ignore else */
-      if (type === 'range') {
-        return this.getRangeDayType(day);
-      }
-      return '';
-    },
-    getBottomInfo(type) {
-      if (this.data.type === 'range') {
-        if (type === 'start') {
-          return '开始';
-        }
-        if (type === 'end') {
-          return '结束';
-        }
-        if (type === 'start-end') {
-          return '开始/结束';
-        }
-      }
-    },
-  },
 });

+ 1 - 1
wxcomponents/vant/dist/calendar/components/month/index.wxml

@@ -19,7 +19,7 @@
       data-index="{{ index }}"
       bindtap="onClick"
     >
-      <view wx:if="{{ item.type === 'selected' }}" class="van-calendar__selected-day" style="background: {{ color }}">
+      <view wx:if="{{ item.type === 'selected' }}" class="van-calendar__selected-day" style="width: {{ rowHeight }}px; height: {{ rowHeight }}px; background: {{ color }}">
         <view wx:if="{{ item.topInfo }}" class="van-calendar__top-info">{{ item.topInfo }}</view>
         {{ item.text }}
         <view wx:if="{{ item.bottomInfo }}" class="van-calendar__bottom-info">

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
wxcomponents/vant/dist/calendar/components/month/index.wxss


+ 331 - 298
wxcomponents/vant/dist/calendar/index.js

@@ -1,309 +1,342 @@
 import { VantComponent } from '../common/component';
-import {
-  ROW_HEIGHT,
-  getNextDay,
-  compareDay,
-  copyDates,
-  calcDateNum,
-  formatMonthTitle,
-  compareMonth,
-  getMonths,
-  getDayByOffset,
-} from './utils';
+import { ROW_HEIGHT, getPrevDay, getNextDay, getToday, compareDay, copyDates, calcDateNum, formatMonthTitle, compareMonth, getMonths, getDayByOffset, } from './utils';
 import Toast from '../toast/toast';
 import { requestAnimationFrame } from '../common/utils';
+const initialMinDate = getToday().getTime();
+const initialMaxDate = (() => {
+    const now = getToday();
+    return new Date(now.getFullYear(), now.getMonth() + 6, now.getDate()).getTime();
+})();
+const getTime = (date) => date instanceof Date ? date.getTime() : date;
 VantComponent({
-  props: {
-    title: {
-      type: String,
-      value: '日期选择',
-    },
-    color: String,
-    show: {
-      type: Boolean,
-      observer(val) {
-        if (val) {
-          this.initRect();
-          this.scrollIntoView();
-        }
-      },
-    },
-    formatter: null,
-    confirmText: {
-      type: String,
-      value: '确定',
-    },
-    rangePrompt: String,
-    showRangePrompt: {
-      type: Boolean,
-      value: true,
-    },
-    defaultDate: {
-      type: null,
-      observer(val) {
-        this.setData({ currentDate: val });
-        this.scrollIntoView();
-      },
-    },
-    allowSameDay: Boolean,
-    confirmDisabledText: String,
-    type: {
-      type: String,
-      value: 'single',
-      observer: 'reset',
-    },
-    minDate: {
-      type: null,
-      value: Date.now(),
-    },
-    maxDate: {
-      type: null,
-      value: new Date(
-        new Date().getFullYear(),
-        new Date().getMonth() + 6,
-        new Date().getDate()
-      ).getTime(),
-    },
-    position: {
-      type: String,
-      value: 'bottom',
-    },
-    rowHeight: {
-      type: null,
-      value: ROW_HEIGHT,
-    },
-    round: {
-      type: Boolean,
-      value: true,
-    },
-    poppable: {
-      type: Boolean,
-      value: true,
-    },
-    showMark: {
-      type: Boolean,
-      value: true,
-    },
-    showTitle: {
-      type: Boolean,
-      value: true,
-    },
-    showConfirm: {
-      type: Boolean,
-      value: true,
-    },
-    showSubtitle: {
-      type: Boolean,
-      value: true,
-    },
-    safeAreaInsetBottom: {
-      type: Boolean,
-      value: true,
-    },
-    closeOnClickOverlay: {
-      type: Boolean,
-      value: true,
-    },
-    maxRange: {
-      type: null,
-      value: null,
-    },
-    firstDayOfWeek: {
-      type: Number,
-      value: 0,
-    },
-  },
-  data: {
-    subtitle: '',
-    currentDate: null,
-    scrollIntoView: '',
-  },
-  created() {
-    this.setData({
-      currentDate: this.getInitialDate(),
-    });
-  },
-  mounted() {
-    if (this.data.show || !this.data.poppable) {
-      this.initRect();
-      this.scrollIntoView();
-    }
-  },
-  methods: {
-    reset() {
-      this.setData({ currentDate: this.getInitialDate() });
-      this.scrollIntoView();
-    },
-    initRect() {
-      if (this.contentObserver != null) {
-        this.contentObserver.disconnect();
-      }
-      const contentObserver = this.createIntersectionObserver({
-        thresholds: [0, 0.1, 0.9, 1],
-        observeAll: true,
-      });
-      this.contentObserver = contentObserver;
-      contentObserver.relativeTo('.van-calendar__body');
-      contentObserver.observe('.month', (res) => {
-        if (res.boundingClientRect.top <= res.relativeRect.top) {
-          // @ts-ignore
-          this.setData({ subtitle: formatMonthTitle(res.dataset.date) });
-        }
-      });
-    },
-    getInitialDate() {
-      const { type, defaultDate, minDate } = this.data;
-      if (type === 'range') {
-        const [startDay, endDay] = defaultDate || [];
-        return [
-          startDay || minDate,
-          endDay || getNextDay(new Date(minDate)).getTime(),
-        ];
-      }
-      if (type === 'multiple') {
-        return defaultDate || [minDate];
-      }
-      return defaultDate || minDate;
-    },
-    scrollIntoView() {
-      requestAnimationFrame(() => {
-        const {
-          currentDate,
-          type,
-          show,
-          poppable,
-          minDate,
-          maxDate,
-        } = this.data;
-        // @ts-ignore
-        const targetDate = type === 'single' ? currentDate : currentDate[0];
-        const displayed = show || !poppable;
-        if (!targetDate || !displayed) {
-          return;
-        }
-        const months = getMonths(minDate, maxDate);
-        months.some((month, index) => {
-          if (compareMonth(month, targetDate) === 0) {
-            this.setData({ scrollIntoView: `month${index}` });
-            return true;
-          }
-          return false;
+    props: {
+        title: {
+            type: String,
+            value: '日期选择',
+        },
+        color: String,
+        show: {
+            type: Boolean,
+            observer(val) {
+                if (val) {
+                    this.initRect();
+                    this.scrollIntoView();
+                }
+            },
+        },
+        formatter: null,
+        confirmText: {
+            type: String,
+            value: '确定',
+        },
+        confirmDisabledText: {
+            type: String,
+            value: '确定',
+        },
+        rangePrompt: String,
+        showRangePrompt: {
+            type: Boolean,
+            value: true,
+        },
+        defaultDate: {
+            type: null,
+            observer(val) {
+                this.setData({ currentDate: val });
+                this.scrollIntoView();
+            },
+        },
+        allowSameDay: Boolean,
+        type: {
+            type: String,
+            value: 'single',
+            observer: 'reset',
+        },
+        minDate: {
+            type: Number,
+            value: initialMinDate,
+        },
+        maxDate: {
+            type: Number,
+            value: initialMaxDate,
+        },
+        position: {
+            type: String,
+            value: 'bottom',
+        },
+        rowHeight: {
+            type: null,
+            value: ROW_HEIGHT,
+        },
+        round: {
+            type: Boolean,
+            value: true,
+        },
+        poppable: {
+            type: Boolean,
+            value: true,
+        },
+        showMark: {
+            type: Boolean,
+            value: true,
+        },
+        showTitle: {
+            type: Boolean,
+            value: true,
+        },
+        showConfirm: {
+            type: Boolean,
+            value: true,
+        },
+        showSubtitle: {
+            type: Boolean,
+            value: true,
+        },
+        safeAreaInsetBottom: {
+            type: Boolean,
+            value: true,
+        },
+        closeOnClickOverlay: {
+            type: Boolean,
+            value: true,
+        },
+        maxRange: {
+            type: null,
+            value: null,
+        },
+        minRange: {
+            type: Number,
+            value: 1,
+        },
+        firstDayOfWeek: {
+            type: Number,
+            value: 0,
+        },
+        readonly: Boolean,
+    },
+    data: {
+        subtitle: '',
+        currentDate: null,
+        scrollIntoView: '',
+    },
+    created() {
+        this.setData({
+            currentDate: this.getInitialDate(this.data.defaultDate),
         });
-      });
-    },
-    onOpen() {
-      this.$emit('open');
-    },
-    onOpened() {
-      this.$emit('opened');
-    },
-    onClose() {
-      this.$emit('close');
     },
-    onClosed() {
-      this.$emit('closed');
-    },
-    onClickDay(event) {
-      const { date } = event.detail;
-      const { type, currentDate, allowSameDay } = this.data;
-      if (type === 'range') {
-        // @ts-ignore
-        const [startDay, endDay] = currentDate;
-        if (startDay && !endDay) {
-          const compareToStart = compareDay(date, startDay);
-          if (compareToStart === 1) {
-            this.select([startDay, date], true);
-          } else if (compareToStart === -1) {
-            this.select([date, null]);
-          } else if (allowSameDay) {
-            this.select([date, date]);
-          }
-        } else {
-          this.select([date, null]);
-        }
-      } else if (type === 'multiple') {
-        let selectedIndex;
-        // @ts-ignore
-        const selected = currentDate.some((dateItem, index) => {
-          const equal = compareDay(dateItem, date) === 0;
-          if (equal) {
-            selectedIndex = index;
-          }
-          return equal;
-        });
-        if (selected) {
-          // @ts-ignore
-          const cancelDate = currentDate.splice(selectedIndex, 1);
-          this.setData({ currentDate });
-          this.unselect(cancelDate);
-        } else {
-          // @ts-ignore
-          this.select([...currentDate, date]);
+    mounted() {
+        if (this.data.show || !this.data.poppable) {
+            this.initRect();
+            this.scrollIntoView();
         }
-      } else {
-        this.select(date, true);
-      }
     },
-    unselect(dateArray) {
-      const date = dateArray[0];
-      if (date) {
-        this.$emit('unselect', copyDates(date));
-      }
-    },
-    select(date, complete) {
-      if (complete && this.data.type === 'range') {
-        const valid = this.checkRange(date);
-        if (!valid) {
-          // auto selected to max range if showConfirm
-          if (this.data.showConfirm) {
-            this.emit([
-              date[0],
-              getDayByOffset(date[0], this.data.maxRange - 1),
-            ]);
-          } else {
+    methods: {
+        reset() {
+            this.setData({ currentDate: this.getInitialDate() });
+            this.scrollIntoView();
+        },
+        initRect() {
+            if (this.contentObserver != null) {
+                this.contentObserver.disconnect();
+            }
+            const contentObserver = this.createIntersectionObserver({
+                thresholds: [0, 0.1, 0.9, 1],
+                observeAll: true,
+            });
+            this.contentObserver = contentObserver;
+            contentObserver.relativeTo('.van-calendar__body');
+            contentObserver.observe('.month', (res) => {
+                if (res.boundingClientRect.top <= res.relativeRect.top) {
+                    // @ts-ignore
+                    this.setData({ subtitle: formatMonthTitle(res.dataset.date) });
+                }
+            });
+        },
+        limitDateRange(date, minDate = null, maxDate = null) {
+            minDate = minDate || this.data.minDate;
+            maxDate = maxDate || this.data.maxDate;
+            if (compareDay(date, minDate) === -1) {
+                return minDate;
+            }
+            if (compareDay(date, maxDate) === 1) {
+                return maxDate;
+            }
+            return date;
+        },
+        getInitialDate(defaultDate = null) {
+            const { type, minDate, maxDate, allowSameDay } = this.data;
+            const now = getToday().getTime();
+            if (type === 'range') {
+                if (!Array.isArray(defaultDate)) {
+                    defaultDate = [];
+                }
+                const [startDay, endDay] = defaultDate || [];
+                const start = this.limitDateRange(startDay || now, minDate, getPrevDay(new Date(maxDate)).getTime());
+                const date = getTime(endDay || now);
+                const end = this.limitDateRange(date, allowSameDay ? date : getNextDay(new Date(minDate)).getTime());
+                return [start, end];
+            }
+            if (type === 'multiple') {
+                if (Array.isArray(defaultDate)) {
+                    return defaultDate.map((date) => this.limitDateRange(date));
+                }
+                return [this.limitDateRange(now)];
+            }
+            if (!defaultDate || Array.isArray(defaultDate)) {
+                defaultDate = now;
+            }
+            return this.limitDateRange(defaultDate);
+        },
+        scrollIntoView() {
+            requestAnimationFrame(() => {
+                const { currentDate, type, show, poppable, minDate, maxDate } = this.data;
+                // @ts-ignore
+                const targetDate = type === 'single' ? currentDate : currentDate[0];
+                const displayed = show || !poppable;
+                if (!targetDate || !displayed) {
+                    return;
+                }
+                const months = getMonths(minDate, maxDate);
+                months.some((month, index) => {
+                    if (compareMonth(month, targetDate) === 0) {
+                        this.setData({ scrollIntoView: `month${index}` });
+                        return true;
+                    }
+                    return false;
+                });
+            });
+        },
+        onOpen() {
+            this.$emit('open');
+        },
+        onOpened() {
+            this.$emit('opened');
+        },
+        onClose() {
+            this.$emit('close');
+        },
+        onClosed() {
+            this.$emit('closed');
+        },
+        onClickDay(event) {
+            if (this.data.readonly) {
+                return;
+            }
+            let { date } = event.detail;
+            const { type, currentDate, allowSameDay } = this.data;
+            if (type === 'range') {
+                // @ts-ignore
+                const [startDay, endDay] = currentDate;
+                if (startDay && !endDay) {
+                    const compareToStart = compareDay(date, startDay);
+                    if (compareToStart === 1) {
+                        const { days } = this.selectComponent('.month').data;
+                        days.some((day, index) => {
+                            const isDisabled = day.type === 'disabled' &&
+                                getTime(startDay) < getTime(day.date) &&
+                                getTime(day.date) < getTime(date);
+                            if (isDisabled) {
+                                ({ date } = days[index - 1]);
+                            }
+                            return isDisabled;
+                        });
+                        this.select([startDay, date], true);
+                    }
+                    else if (compareToStart === -1) {
+                        this.select([date, null]);
+                    }
+                    else if (allowSameDay) {
+                        this.select([date, date], true);
+                    }
+                }
+                else {
+                    this.select([date, null]);
+                }
+            }
+            else if (type === 'multiple') {
+                let selectedIndex;
+                // @ts-ignore
+                const selected = currentDate.some((dateItem, index) => {
+                    const equal = compareDay(dateItem, date) === 0;
+                    if (equal) {
+                        selectedIndex = index;
+                    }
+                    return equal;
+                });
+                if (selected) {
+                    // @ts-ignore
+                    const cancelDate = currentDate.splice(selectedIndex, 1);
+                    this.setData({ currentDate });
+                    this.unselect(cancelDate);
+                }
+                else {
+                    // @ts-ignore
+                    this.select([...currentDate, date]);
+                }
+            }
+            else {
+                this.select(date, true);
+            }
+        },
+        unselect(dateArray) {
+            const date = dateArray[0];
+            if (date) {
+                this.$emit('unselect', copyDates(date));
+            }
+        },
+        select(date, complete) {
+            if (complete && this.data.type === 'range') {
+                const valid = this.checkRange(date);
+                if (!valid) {
+                    // auto selected to max range if showConfirm
+                    if (this.data.showConfirm) {
+                        this.emit([
+                            date[0],
+                            getDayByOffset(date[0], this.data.maxRange - 1),
+                        ]);
+                    }
+                    else {
+                        this.emit(date);
+                    }
+                    return;
+                }
+            }
             this.emit(date);
-          }
-          return;
-        }
-      }
-      this.emit(date);
-      if (complete && !this.data.showConfirm) {
-        this.onConfirm();
-      }
-    },
-    emit(date) {
-      const getTime = (date) => (date instanceof Date ? date.getTime() : date);
-      this.setData({
-        currentDate: Array.isArray(date) ? date.map(getTime) : getTime(date),
-      });
-      this.$emit('select', copyDates(date));
-    },
-    checkRange(date) {
-      const { maxRange, rangePrompt, showRangePrompt } = this.data;
-      if (maxRange && calcDateNum(date) > maxRange) {
-        if (showRangePrompt) {
-          Toast({
-            duration: 0,
-            context: this,
-            message: rangePrompt || `选择天数不能超过 ${maxRange} 天`,
-          });
-        }
-        this.$emit('over-range');
-        return false;
-      }
-      return true;
-    },
-    onConfirm() {
-      if (
-        this.data.type === 'range' &&
-        !this.checkRange(this.data.currentDate)
-      ) {
-        return;
-      }
-      wx.nextTick(() => {
-        // @ts-ignore
-        this.$emit('confirm', copyDates(this.data.currentDate));
-      });
+            if (complete && !this.data.showConfirm) {
+                this.onConfirm();
+            }
+        },
+        emit(date) {
+            this.setData({
+                currentDate: Array.isArray(date) ? date.map(getTime) : getTime(date),
+            });
+            this.$emit('select', copyDates(date));
+        },
+        checkRange(date) {
+            const { maxRange, rangePrompt, showRangePrompt } = this.data;
+            if (maxRange && calcDateNum(date) > maxRange) {
+                if (showRangePrompt) {
+                    Toast({
+                        context: this,
+                        message: rangePrompt || `选择天数不能超过 ${maxRange} 天`,
+                    });
+                }
+                this.$emit('over-range');
+                return false;
+            }
+            return true;
+        },
+        onConfirm() {
+            if (this.data.type === 'range' &&
+                !this.checkRange(this.data.currentDate)) {
+                return;
+            }
+            wx.nextTick(() => {
+                // @ts-ignore
+                this.$emit('confirm', copyDates(this.data.currentDate));
+            });
+        },
+        onClickSubtitle(event) {
+            this.$emit('click-subtitle', event);
+        },
     },
-  },
 });

+ 3 - 2
wxcomponents/vant/dist/calendar/index.wxml

@@ -12,14 +12,15 @@
   position="{{ position }}"
   closeable="{{ showTitle || showSubtitle }}"
   close-on-click-overlay="{{ closeOnClickOverlay }}"
+  safe-area-inset-bottom="{{ safeAreaInsetBottom }}"
   bind:enter="onOpen"
   bind:close="onClose"
   bind:after-enter="onOpened"
   bind:after-leave="onClosed"
 >
-  <include src="calendar.wxml" />
+  <include src="./calendar.wxml" />
 </van-popup>
 
-<include wx:else src="calendar.wxml" />
+<include wx:else src="./calendar.wxml" />
 
 <van-toast id="van-toast" />

+ 2 - 2
wxcomponents/vant/dist/calendar/index.wxs

@@ -15,7 +15,7 @@ function getMonths(minDate, maxDate) {
   return months;
 }
 
-function getButtonDisabled(type, currentDate) {
+function getButtonDisabled(type, currentDate, minRange) {
   if (currentDate == null) {
     return true;
   }
@@ -25,7 +25,7 @@ function getButtonDisabled(type, currentDate) {
   }
 
   if (type === 'multiple') {
-    return !currentDate.length;
+    return currentDate.length < minRange;
   }
 
   return !currentDate;

+ 1 - 1
wxcomponents/vant/dist/calendar/index.wxss

@@ -1 +1 @@
-@import '../common/index.wxss';.van-calendar{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;height:100%;height:var(--calendar-height,100%);background-color:#fff;background-color:var(--calendar-background-color,#fff)}.van-calendar__close-icon{top:11px}.van-calendar__popup--bottom,.van-calendar__popup--top{height:80%;height:var(--calendar-popup-height,80%)}.van-calendar__popup--left,.van-calendar__popup--right{height:100%}.van-calendar__body{-webkit-flex:1;flex:1;overflow:auto;-webkit-overflow-scrolling:touch}.van-calendar__footer{-webkit-flex-shrink:0;flex-shrink:0;padding:0 16px;padding:0 var(--padding-md,16px)}.van-calendar__footer--safe-area-inset-bottom{padding-bottom:env(safe-area-inset-bottom)}.van-calendar__footer+.van-calendar__footer,.van-calendar__footer:empty{display:none}.van-calendar__footer:empty+.van-calendar__footer{display:block!important}.van-calendar__confirm{height:36px!important;height:var(--calendar-confirm-button-height,36px)!important;margin:7px 0!important;margin:var(--calendar-confirm-button-margin,7px 0)!important;line-height:34px!important;line-height:var(--calendar-confirm-button-line-height,34px)!important}
+@import '../common/index.wxss';.van-calendar{background-color:var(--calendar-background-color,#fff);display:flex;flex-direction:column;height:var(--calendar-height,100%)}.van-calendar__close-icon{top:11px}.van-calendar__popup--bottom,.van-calendar__popup--top{height:var(--calendar-popup-height,80%)}.van-calendar__popup--left,.van-calendar__popup--right{height:100%}.van-calendar__body{-webkit-overflow-scrolling:touch;flex:1;overflow:auto}.van-calendar__footer{flex-shrink:0;padding:0 var(--padding-md,16px)}.van-calendar__footer--safe-area-inset-bottom{padding-bottom:env(safe-area-inset-bottom)}.van-calendar__footer+.van-calendar__footer,.van-calendar__footer:empty{display:none}.van-calendar__footer:empty+.van-calendar__footer{display:block!important}.van-calendar__confirm{height:var(--calendar-confirm-button-height,36px)!important;line-height:var(--calendar-confirm-button-line-height,34px)!important;margin:var(--calendar-confirm-button-margin,7px 0)!important}

+ 3 - 8
wxcomponents/vant/dist/calendar/utils.d.ts

@@ -1,16 +1,11 @@
 export declare const ROW_HEIGHT = 64;
 export declare function formatMonthTitle(date: Date): string;
-export declare function compareMonth(
-  date1: Date | number,
-  date2: Date | number
-): 1 | -1 | 0;
-export declare function compareDay(
-  day1: Date | number,
-  day2: Date | number
-): 1 | -1 | 0;
+export declare function compareMonth(date1: Date | number, date2: Date | number): 0 | 1 | -1;
+export declare function compareDay(day1: Date | number, day2: Date | number): 0 | 1 | -1;
 export declare function getDayByOffset(date: Date, offset: number): Date;
 export declare function getPrevDay(date: Date): Date;
 export declare function getNextDay(date: Date): Date;
+export declare function getToday(): Date;
 export declare function calcDateNum(date: [Date, Date]): number;
 export declare function copyDates(dates: Date | Date[]): Date | Date[];
 export declare function getMonthEndDay(year: number, month: number): number;

+ 62 - 57
wxcomponents/vant/dist/calendar/utils.js

@@ -1,78 +1,83 @@
 export const ROW_HEIGHT = 64;
 export function formatMonthTitle(date) {
-  if (!(date instanceof Date)) {
-    date = new Date(date);
-  }
-  return `${date.getFullYear()}年${date.getMonth() + 1}月`;
+    if (!(date instanceof Date)) {
+        date = new Date(date);
+    }
+    return `${date.getFullYear()}年${date.getMonth() + 1}月`;
 }
 export function compareMonth(date1, date2) {
-  if (!(date1 instanceof Date)) {
-    date1 = new Date(date1);
-  }
-  if (!(date2 instanceof Date)) {
-    date2 = new Date(date2);
-  }
-  const year1 = date1.getFullYear();
-  const year2 = date2.getFullYear();
-  const month1 = date1.getMonth();
-  const month2 = date2.getMonth();
-  if (year1 === year2) {
-    return month1 === month2 ? 0 : month1 > month2 ? 1 : -1;
-  }
-  return year1 > year2 ? 1 : -1;
+    if (!(date1 instanceof Date)) {
+        date1 = new Date(date1);
+    }
+    if (!(date2 instanceof Date)) {
+        date2 = new Date(date2);
+    }
+    const year1 = date1.getFullYear();
+    const year2 = date2.getFullYear();
+    const month1 = date1.getMonth();
+    const month2 = date2.getMonth();
+    if (year1 === year2) {
+        return month1 === month2 ? 0 : month1 > month2 ? 1 : -1;
+    }
+    return year1 > year2 ? 1 : -1;
 }
 export function compareDay(day1, day2) {
-  if (!(day1 instanceof Date)) {
-    day1 = new Date(day1);
-  }
-  if (!(day2 instanceof Date)) {
-    day2 = new Date(day2);
-  }
-  const compareMonthResult = compareMonth(day1, day2);
-  if (compareMonthResult === 0) {
-    const date1 = day1.getDate();
-    const date2 = day2.getDate();
-    return date1 === date2 ? 0 : date1 > date2 ? 1 : -1;
-  }
-  return compareMonthResult;
+    if (!(day1 instanceof Date)) {
+        day1 = new Date(day1);
+    }
+    if (!(day2 instanceof Date)) {
+        day2 = new Date(day2);
+    }
+    const compareMonthResult = compareMonth(day1, day2);
+    if (compareMonthResult === 0) {
+        const date1 = day1.getDate();
+        const date2 = day2.getDate();
+        return date1 === date2 ? 0 : date1 > date2 ? 1 : -1;
+    }
+    return compareMonthResult;
 }
 export function getDayByOffset(date, offset) {
-  date = new Date(date);
-  date.setDate(date.getDate() + offset);
-  return date;
+    date = new Date(date);
+    date.setDate(date.getDate() + offset);
+    return date;
 }
 export function getPrevDay(date) {
-  return getDayByOffset(date, -1);
+    return getDayByOffset(date, -1);
 }
 export function getNextDay(date) {
-  return getDayByOffset(date, 1);
+    return getDayByOffset(date, 1);
+}
+export function getToday() {
+    const today = new Date();
+    today.setHours(0, 0, 0, 0);
+    return today;
 }
 export function calcDateNum(date) {
-  const day1 = new Date(date[0]).getTime();
-  const day2 = new Date(date[1]).getTime();
-  return (day2 - day1) / (1000 * 60 * 60 * 24) + 1;
+    const day1 = new Date(date[0]).getTime();
+    const day2 = new Date(date[1]).getTime();
+    return (day2 - day1) / (1000 * 60 * 60 * 24) + 1;
 }
 export function copyDates(dates) {
-  if (Array.isArray(dates)) {
-    return dates.map((date) => {
-      if (date === null) {
-        return date;
-      }
-      return new Date(date);
-    });
-  }
-  return new Date(dates);
+    if (Array.isArray(dates)) {
+        return dates.map((date) => {
+            if (date === null) {
+                return date;
+            }
+            return new Date(date);
+        });
+    }
+    return new Date(dates);
 }
 export function getMonthEndDay(year, month) {
-  return 32 - new Date(year, month - 1, 32).getDate();
+    return 32 - new Date(year, month - 1, 32).getDate();
 }
 export function getMonths(minDate, maxDate) {
-  const months = [];
-  const cursor = new Date(minDate);
-  cursor.setDate(1);
-  do {
-    months.push(cursor.getTime());
-    cursor.setMonth(cursor.getMonth() + 1);
-  } while (compareMonth(cursor, maxDate) !== 1);
-  return months;
+    const months = [];
+    const cursor = new Date(minDate);
+    cursor.setDate(1);
+    do {
+        months.push(cursor.getTime());
+        cursor.setMonth(cursor.getMonth() + 1);
+    } while (compareMonth(cursor, maxDate) !== 1);
+    return months;
 }

+ 43 - 43
wxcomponents/vant/dist/card/index.js

@@ -1,49 +1,49 @@
 import { link } from '../mixins/link';
 import { VantComponent } from '../common/component';
 VantComponent({
-  classes: [
-    'num-class',
-    'desc-class',
-    'thumb-class',
-    'title-class',
-    'price-class',
-    'origin-price-class',
-  ],
-  mixins: [link],
-  props: {
-    tag: String,
-    num: String,
-    desc: String,
-    thumb: String,
-    title: String,
-    price: {
-      type: String,
-      observer: 'updatePrice',
+    classes: [
+        'num-class',
+        'desc-class',
+        'thumb-class',
+        'title-class',
+        'price-class',
+        'origin-price-class',
+    ],
+    mixins: [link],
+    props: {
+        tag: String,
+        num: String,
+        desc: String,
+        thumb: String,
+        title: String,
+        price: {
+            type: String,
+            observer: 'updatePrice',
+        },
+        centered: Boolean,
+        lazyLoad: Boolean,
+        thumbLink: String,
+        originPrice: String,
+        thumbMode: {
+            type: String,
+            value: 'aspectFit',
+        },
+        currency: {
+            type: String,
+            value: '¥',
+        },
     },
-    centered: Boolean,
-    lazyLoad: Boolean,
-    thumbLink: String,
-    originPrice: String,
-    thumbMode: {
-      type: String,
-      value: 'aspectFit',
+    methods: {
+        updatePrice() {
+            const { price } = this.data;
+            const priceArr = price.toString().split('.');
+            this.setData({
+                integerStr: priceArr[0],
+                decimalStr: priceArr[1] ? `.${priceArr[1]}` : '',
+            });
+        },
+        onClickThumb() {
+            this.jumpLink('thumbLink');
+        },
     },
-    currency: {
-      type: String,
-      value: '¥',
-    },
-  },
-  methods: {
-    updatePrice() {
-      const { price } = this.data;
-      const priceArr = price.toString().split('.');
-      this.setData({
-        integerStr: priceArr[0],
-        decimalStr: priceArr[1] ? `.${priceArr[1]}` : '',
-      });
-    },
-    onClickThumb() {
-      this.jumpLink('thumbLink');
-    },
-  },
 });

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
wxcomponents/vant/dist/card/index.wxss


+ 7 - 6
wxcomponents/vant/dist/cell-group/index.js

@@ -1,10 +1,11 @@
 import { VantComponent } from '../common/component';
 VantComponent({
-  props: {
-    title: String,
-    border: {
-      type: Boolean,
-      value: true,
+    props: {
+        title: String,
+        border: {
+            type: Boolean,
+            value: true,
+        },
+        inset: Boolean,
     },
-  },
 });

+ 4 - 2
wxcomponents/vant/dist/cell-group/index.wxml

@@ -1,9 +1,11 @@
+<wxs src="../wxs/utils.wxs" module="utils" />
+
 <view
   wx:if="{{ title }}"
-  class="van-cell-group__title"
+  class="{{ utils.bem('cell-group__title', { inset }) }}"
 >
   {{ title }}
 </view>
-<view class="custom-class van-cell-group {{ border ? 'van-hairline--top-bottom' : '' }}">
+<view class="custom-class {{ utils.bem('cell-group', { inset }) }} {{ border ? 'van-hairline--top-bottom' : '' }}">
   <slot />
 </view>

+ 1 - 1
wxcomponents/vant/dist/cell-group/index.wxss

@@ -1 +1 @@
-@import '../common/index.wxss';.van-cell-group__title{padding:16px 16px 8px;padding:var(--cell-group-title-padding,16px 16px 8px);font-size:14px;font-size:var(--cell-group-title-font-size,14px);line-height:16px;line-height:var(--cell-group-title-line-height,16px);color:#969799;color:var(--cell-group-title-color,#969799)}
+@import '../common/index.wxss';.van-cell-group--inset{border-radius:var(--cell-group-inset-border-radius,8px);margin:var(--cell-group-inset-padding,0 16px);overflow:hidden}.van-cell-group__title{color:var(--cell-group-title-color,#969799);font-size:var(--cell-group-title-font-size,14px);line-height:var(--cell-group-title-line-height,16px);padding:var(--cell-group-title-padding,16px 16px 8px)}.van-cell-group__title--inset{padding:var(--cell-group-inset-title-padding,16px 16px 8px 32px)}

+ 32 - 32
wxcomponents/vant/dist/cell/index.js

@@ -1,38 +1,38 @@
 import { link } from '../mixins/link';
 import { VantComponent } from '../common/component';
 VantComponent({
-  classes: [
-    'title-class',
-    'label-class',
-    'value-class',
-    'right-icon-class',
-    'hover-class',
-  ],
-  mixins: [link],
-  props: {
-    title: null,
-    value: null,
-    icon: String,
-    size: String,
-    label: String,
-    center: Boolean,
-    isLink: Boolean,
-    required: Boolean,
-    clickable: Boolean,
-    titleWidth: String,
-    customStyle: String,
-    arrowDirection: String,
-    useLabelSlot: Boolean,
-    border: {
-      type: Boolean,
-      value: true,
+    classes: [
+        'title-class',
+        'label-class',
+        'value-class',
+        'right-icon-class',
+        'hover-class',
+    ],
+    mixins: [link],
+    props: {
+        title: null,
+        value: null,
+        icon: String,
+        size: String,
+        label: String,
+        center: Boolean,
+        isLink: Boolean,
+        required: Boolean,
+        clickable: Boolean,
+        titleWidth: String,
+        customStyle: String,
+        arrowDirection: String,
+        useLabelSlot: Boolean,
+        border: {
+            type: Boolean,
+            value: true,
+        },
+        titleStyle: String,
     },
-    titleStyle: String,
-  },
-  methods: {
-    onClick(event) {
-      this.$emit('click', event.detail);
-      this.jumpLink();
+    methods: {
+        onClick(event) {
+            this.$emit('click', event.detail);
+            this.jumpLink();
+        },
     },
-  },
 });

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
wxcomponents/vant/dist/cell/index.wxss


+ 30 - 25
wxcomponents/vant/dist/checkbox-group/index.js

@@ -1,31 +1,36 @@
 import { useChildren } from '../common/relation';
 import { VantComponent } from '../common/component';
 VantComponent({
-  field: true,
-  relation: useChildren('checkbox', function (target) {
-    this.updateChild(target);
-  }),
-  props: {
-    max: Number,
-    value: {
-      type: Array,
-      observer: 'updateChildren',
+    field: true,
+    relation: useChildren('checkbox', function (target) {
+        this.updateChild(target);
+    }),
+    props: {
+        max: Number,
+        value: {
+            type: Array,
+            observer: 'updateChildren',
+        },
+        disabled: {
+            type: Boolean,
+            observer: 'updateChildren',
+        },
+        direction: {
+            type: String,
+            value: 'vertical',
+        },
     },
-    disabled: {
-      type: Boolean,
-      observer: 'updateChildren',
+    methods: {
+        updateChildren() {
+            this.children.forEach((child) => this.updateChild(child));
+        },
+        updateChild(child) {
+            const { value, disabled, direction } = this.data;
+            child.setData({
+                value: value.indexOf(child.data.name) !== -1,
+                parentDisabled: disabled,
+                direction,
+            });
+        },
     },
-  },
-  methods: {
-    updateChildren() {
-      this.children.forEach((child) => this.updateChild(child));
-    },
-    updateChild(child) {
-      const { value, disabled } = this.data;
-      child.setData({
-        value: value.indexOf(child.data.name) !== -1,
-        parentDisabled: disabled,
-      });
-    },
-  },
 });

+ 5 - 1
wxcomponents/vant/dist/checkbox-group/index.wxml

@@ -1 +1,5 @@
-<slot />
+<wxs src="../wxs/utils.wxs" module="utils" />
+
+<view class="{{ utils.bem('checkbox-group', [{ horizontal: direction === 'horizontal' }]) }}">
+  <slot />
+</view>

+ 1 - 1
wxcomponents/vant/dist/checkbox-group/index.wxss

@@ -1 +1 @@
-@import '../common/index.wxss';
+@import '../common/index.wxss';.van-checkbox-group--horizontal{display:flex;flex-wrap:wrap}

+ 68 - 65
wxcomponents/vant/dist/checkbox/index.js

@@ -1,74 +1,77 @@
 import { useParent } from '../common/relation';
 import { VantComponent } from '../common/component';
 function emit(target, value) {
-  target.$emit('input', value);
-  target.$emit('change', value);
+    target.$emit('input', value);
+    target.$emit('change', value);
 }
 VantComponent({
-  field: true,
-  relation: useParent('checkbox-group'),
-  classes: ['icon-class', 'label-class'],
-  props: {
-    value: Boolean,
-    disabled: Boolean,
-    useIconSlot: Boolean,
-    checkedColor: String,
-    labelPosition: {
-      type: String,
-      value: 'right',
+    field: true,
+    relation: useParent('checkbox-group'),
+    classes: ['icon-class', 'label-class'],
+    props: {
+        value: Boolean,
+        disabled: Boolean,
+        useIconSlot: Boolean,
+        checkedColor: String,
+        labelPosition: {
+            type: String,
+            value: 'right',
+        },
+        labelDisabled: Boolean,
+        shape: {
+            type: String,
+            value: 'round',
+        },
+        iconSize: {
+            type: null,
+            value: 20,
+        },
     },
-    labelDisabled: Boolean,
-    shape: {
-      type: String,
-      value: 'round',
+    data: {
+        parentDisabled: false,
+        direction: 'vertical',
     },
-    iconSize: {
-      type: null,
-      value: 20,
+    methods: {
+        emitChange(value) {
+            if (this.parent) {
+                this.setParentValue(this.parent, value);
+            }
+            else {
+                emit(this, value);
+            }
+        },
+        toggle() {
+            const { parentDisabled, disabled, value } = this.data;
+            if (!disabled && !parentDisabled) {
+                this.emitChange(!value);
+            }
+        },
+        onClickLabel() {
+            const { labelDisabled, parentDisabled, disabled, value } = this.data;
+            if (!disabled && !labelDisabled && !parentDisabled) {
+                this.emitChange(!value);
+            }
+        },
+        setParentValue(parent, value) {
+            const parentValue = parent.data.value.slice();
+            const { name } = this.data;
+            const { max } = parent.data;
+            if (value) {
+                if (max && parentValue.length >= max) {
+                    return;
+                }
+                if (parentValue.indexOf(name) === -1) {
+                    parentValue.push(name);
+                    emit(parent, parentValue);
+                }
+            }
+            else {
+                const index = parentValue.indexOf(name);
+                if (index !== -1) {
+                    parentValue.splice(index, 1);
+                    emit(parent, parentValue);
+                }
+            }
+        },
     },
-  },
-  data: {
-    parentDisabled: false,
-  },
-  methods: {
-    emitChange(value) {
-      if (this.parent) {
-        this.setParentValue(this.parent, value);
-      } else {
-        emit(this, value);
-      }
-    },
-    toggle() {
-      const { parentDisabled, disabled, value } = this.data;
-      if (!disabled && !parentDisabled) {
-        this.emitChange(!value);
-      }
-    },
-    onClickLabel() {
-      const { labelDisabled, parentDisabled, disabled, value } = this.data;
-      if (!disabled && !labelDisabled && !parentDisabled) {
-        this.emitChange(!value);
-      }
-    },
-    setParentValue(parent, value) {
-      const parentValue = parent.data.value.slice();
-      const { name } = this.data;
-      const { max } = parent.data;
-      if (value) {
-        if (max && parentValue.length >= max) {
-          return;
-        }
-        if (parentValue.indexOf(name) === -1) {
-          parentValue.push(name);
-          emit(parent, parentValue);
-        }
-      } else {
-        const index = parentValue.indexOf(name);
-        if (index !== -1) {
-          parentValue.splice(index, 1);
-          emit(parent, parentValue);
-        }
-      }
-    },
-  },
 });

+ 1 - 1
wxcomponents/vant/dist/checkbox/index.wxml

@@ -1,7 +1,7 @@
 <wxs src="../wxs/utils.wxs" module="utils" />
 <wxs src="./index.wxs" module="computed" />
 
-<view class="van-checkbox custom-class">
+<view class="{{ utils.bem('checkbox', [{ horizontal: direction === 'horizontal' }]) }} custom-class">
   <view
     wx:if="{{ labelPosition === 'left' }}"
     class="label-class {{ utils.bem('checkbox__label', [labelPosition, { disabled: disabled || parentDisabled }]) }}"

+ 1 - 1
wxcomponents/vant/dist/checkbox/index.wxss

@@ -1 +1 @@
-@import '../common/index.wxss';.van-checkbox{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;overflow:hidden;-webkit-user-select:none;user-select:none}.van-checkbox__icon-wrap,.van-checkbox__label{line-height:20px;line-height:var(--checkbox-size,20px)}.van-checkbox__icon-wrap{-webkit-flex:none;flex:none}.van-checkbox__icon{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:border-box;width:1em;height:1em;color:transparent;text-align:center;transition-property:color,border-color,background-color;font-size:20px;font-size:var(--checkbox-size,20px);border:1px solid #c8c9cc;border:1px solid var(--checkbox-border-color,#c8c9cc);transition-duration:.2s;transition-duration:var(--checkbox-transition-duration,.2s)}.van-checkbox__icon--round{border-radius:100%}.van-checkbox__icon--checked{color:#fff;color:var(--white,#fff);background-color:#1989fa;background-color:var(--checkbox-checked-icon-color,#1989fa);border-color:#1989fa;border-color:var(--checkbox-checked-icon-color,#1989fa)}.van-checkbox__icon--disabled{background-color:#ebedf0;background-color:var(--checkbox-disabled-background-color,#ebedf0);border-color:#c8c9cc;border-color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__icon--disabled.van-checkbox__icon--checked{color:#c8c9cc;color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__label{word-wrap:break-word;margin-left:10px;margin-left:var(--checkbox-label-margin,10px);color:#323233;color:var(--checkbox-label-color,#323233)}.van-checkbox__label--left{float:left;margin:0 10px 0 0;margin:0 var(--checkbox-label-margin,10px) 0 0}.van-checkbox__label--disabled{color:#c8c9cc;color:var(--checkbox-disabled-label-color,#c8c9cc)}.van-checkbox__label:empty{margin:0}
+@import '../common/index.wxss';.van-checkbox{align-items:center;display:flex;overflow:hidden;-webkit-user-select:none;user-select:none}.van-checkbox--horizontal{margin-right:12px}.van-checkbox__icon-wrap,.van-checkbox__label{line-height:var(--checkbox-size,20px)}.van-checkbox__icon-wrap{flex:none}.van-checkbox__icon{align-items:center;border:1px solid var(--checkbox-border-color,#c8c9cc);box-sizing:border-box;color:transparent;display:flex;font-size:var(--checkbox-size,20px);height:1em;justify-content:center;text-align:center;transition-duration:var(--checkbox-transition-duration,.2s);transition-property:color,border-color,background-color;width:1em}.van-checkbox__icon--round{border-radius:100%}.van-checkbox__icon--checked{background-color:var(--checkbox-checked-icon-color,#1989fa);border-color:var(--checkbox-checked-icon-color,#1989fa);color:#fff}.van-checkbox__icon--disabled{background-color:var(--checkbox-disabled-background-color,#ebedf0);border-color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__icon--disabled.van-checkbox__icon--checked{color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__label{word-wrap:break-word;color:var(--checkbox-label-color,#323233);padding-left:var(--checkbox-label-margin,10px)}.van-checkbox__label--left{float:left;margin:0 var(--checkbox-label-margin,10px) 0 0}.van-checkbox__label--disabled{color:var(--checkbox-disabled-label-color,#c8c9cc)}.van-checkbox__label:empty{margin:0}

+ 2 - 4
wxcomponents/vant/dist/circle/canvas.d.ts

@@ -1,6 +1,4 @@
 /// <reference types="miniprogram-api-typings" />
-declare type CanvasContext = WechatMiniprogram.CanvasContext;
-export declare function adaptor(
-  ctx: CanvasContext & Record<string, unknown>
-): CanvasContext;
+type CanvasContext = WechatMiniprogram.CanvasContext;
+export declare function adaptor(ctx: CanvasContext & Record<string, unknown>): CanvasContext;
 export {};

+ 41 - 41
wxcomponents/vant/dist/circle/canvas.js

@@ -1,43 +1,43 @@
 export function adaptor(ctx) {
-  // @ts-ignore
-  return Object.assign(ctx, {
-    setStrokeStyle(val) {
-      ctx.strokeStyle = val;
-    },
-    setLineWidth(val) {
-      ctx.lineWidth = val;
-    },
-    setLineCap(val) {
-      ctx.lineCap = val;
-    },
-    setFillStyle(val) {
-      ctx.fillStyle = val;
-    },
-    setFontSize(val) {
-      ctx.font = String(val);
-    },
-    setGlobalAlpha(val) {
-      ctx.globalAlpha = val;
-    },
-    setLineJoin(val) {
-      ctx.lineJoin = val;
-    },
-    setTextAlign(val) {
-      ctx.textAlign = val;
-    },
-    setMiterLimit(val) {
-      ctx.miterLimit = val;
-    },
-    setShadow(offsetX, offsetY, blur, color) {
-      ctx.shadowOffsetX = offsetX;
-      ctx.shadowOffsetY = offsetY;
-      ctx.shadowBlur = blur;
-      ctx.shadowColor = color;
-    },
-    setTextBaseline(val) {
-      ctx.textBaseline = val;
-    },
-    createCircularGradient() {},
-    draw() {},
-  });
+    // @ts-ignore
+    return Object.assign(ctx, {
+        setStrokeStyle(val) {
+            ctx.strokeStyle = val;
+        },
+        setLineWidth(val) {
+            ctx.lineWidth = val;
+        },
+        setLineCap(val) {
+            ctx.lineCap = val;
+        },
+        setFillStyle(val) {
+            ctx.fillStyle = val;
+        },
+        setFontSize(val) {
+            ctx.font = String(val);
+        },
+        setGlobalAlpha(val) {
+            ctx.globalAlpha = val;
+        },
+        setLineJoin(val) {
+            ctx.lineJoin = val;
+        },
+        setTextAlign(val) {
+            ctx.textAlign = val;
+        },
+        setMiterLimit(val) {
+            ctx.miterLimit = val;
+        },
+        setShadow(offsetX, offsetY, blur, color) {
+            ctx.shadowOffsetX = offsetX;
+            ctx.shadowOffsetY = offsetY;
+            ctx.shadowBlur = blur;
+            ctx.shadowColor = color;
+        },
+        setTextBaseline(val) {
+            ctx.textBaseline = val;
+        },
+        createCircularGradient() { },
+        draw() { },
+    });
 }

+ 175 - 172
wxcomponents/vant/dist/circle/index.js

@@ -5,186 +5,189 @@ import { isObj } from '../common/validator';
 import { canIUseCanvas2d } from '../common/version';
 import { adaptor } from './canvas';
 function format(rate) {
-  return Math.min(Math.max(rate, 0), 100);
+    return Math.min(Math.max(rate, 0), 100);
 }
 const PERIMETER = 2 * Math.PI;
 const BEGIN_ANGLE = -Math.PI / 2;
 const STEP = 1;
 VantComponent({
-  props: {
-    text: String,
-    lineCap: {
-      type: String,
-      value: 'round',
-    },
-    value: {
-      type: Number,
-      value: 0,
-      observer: 'reRender',
-    },
-    speed: {
-      type: Number,
-      value: 50,
-    },
-    size: {
-      type: Number,
-      value: 100,
-      observer() {
-        this.drawCircle(this.currentValue);
-      },
-    },
-    fill: String,
-    layerColor: {
-      type: String,
-      value: WHITE,
-    },
-    color: {
-      type: null,
-      value: BLUE,
-      observer() {
-        this.setHoverColor().then(() => {
-          this.drawCircle(this.currentValue);
-        });
-      },
-    },
-    type: {
-      type: String,
-      value: '',
-    },
-    strokeWidth: {
-      type: Number,
-      value: 4,
-    },
-    clockwise: {
-      type: Boolean,
-      value: true,
-    },
-  },
-  data: {
-    hoverColor: BLUE,
-  },
-  methods: {
-    getContext() {
-      const { type, size } = this.data;
-      if (type === '' || !canIUseCanvas2d()) {
-        const ctx = wx.createCanvasContext('van-circle', this);
-        return Promise.resolve(ctx);
-      }
-      const dpr = getSystemInfoSync().pixelRatio;
-      return new Promise((resolve) => {
-        wx.createSelectorQuery()
-          .in(this)
-          .select('#van-circle')
-          .node()
-          .exec((res) => {
-            const canvas = res[0].node;
-            const ctx = canvas.getContext(type);
-            if (!this.inited) {
-              this.inited = true;
-              canvas.width = size * dpr;
-              canvas.height = size * dpr;
-              ctx.scale(dpr, dpr);
+    props: {
+        text: String,
+        lineCap: {
+            type: String,
+            value: 'round',
+        },
+        value: {
+            type: Number,
+            value: 0,
+            observer: 'reRender',
+        },
+        speed: {
+            type: Number,
+            value: 50,
+        },
+        size: {
+            type: Number,
+            value: 100,
+            observer() {
+                this.drawCircle(this.currentValue);
+            },
+        },
+        fill: String,
+        layerColor: {
+            type: String,
+            value: WHITE,
+        },
+        color: {
+            type: null,
+            value: BLUE,
+            observer() {
+                this.setHoverColor().then(() => {
+                    this.drawCircle(this.currentValue);
+                });
+            },
+        },
+        type: {
+            type: String,
+            value: '',
+        },
+        strokeWidth: {
+            type: Number,
+            value: 4,
+        },
+        clockwise: {
+            type: Boolean,
+            value: true,
+        },
+    },
+    data: {
+        hoverColor: BLUE,
+    },
+    methods: {
+        getContext() {
+            const { type, size } = this.data;
+            if (type === '' || !canIUseCanvas2d()) {
+                const ctx = wx.createCanvasContext('van-circle', this);
+                return Promise.resolve(ctx);
             }
-            resolve(adaptor(ctx));
-          });
-      });
+            const dpr = getSystemInfoSync().pixelRatio;
+            return new Promise((resolve) => {
+                wx.createSelectorQuery()
+                    .in(this)
+                    .select('#van-circle')
+                    .node()
+                    .exec((res) => {
+                    const canvas = res[0].node;
+                    const ctx = canvas.getContext(type);
+                    if (!this.inited) {
+                        this.inited = true;
+                        canvas.width = size * dpr;
+                        canvas.height = size * dpr;
+                        ctx.scale(dpr, dpr);
+                    }
+                    resolve(adaptor(ctx));
+                });
+            });
+        },
+        setHoverColor() {
+            const { color, size } = this.data;
+            if (isObj(color)) {
+                return this.getContext().then((context) => {
+                    const LinearColor = context.createLinearGradient(size, 0, 0, 0);
+                    Object.keys(color)
+                        .sort((a, b) => parseFloat(a) - parseFloat(b))
+                        .map((key) => LinearColor.addColorStop(parseFloat(key) / 100, color[key]));
+                    this.hoverColor = LinearColor;
+                });
+            }
+            this.hoverColor = color;
+            return Promise.resolve();
+        },
+        presetCanvas(context, strokeStyle, beginAngle, endAngle, fill) {
+            const { strokeWidth, lineCap, clockwise, size } = this.data;
+            const position = size / 2;
+            const radius = position - strokeWidth / 2;
+            context.setStrokeStyle(strokeStyle);
+            context.setLineWidth(strokeWidth);
+            context.setLineCap(lineCap);
+            context.beginPath();
+            context.arc(position, position, radius, beginAngle, endAngle, !clockwise);
+            context.stroke();
+            if (fill) {
+                context.setFillStyle(fill);
+                context.fill();
+            }
+        },
+        renderLayerCircle(context) {
+            const { layerColor, fill } = this.data;
+            this.presetCanvas(context, layerColor, 0, PERIMETER, fill);
+        },
+        renderHoverCircle(context, formatValue) {
+            const { clockwise } = this.data;
+            // 结束角度
+            const progress = PERIMETER * (formatValue / 100);
+            const endAngle = clockwise
+                ? BEGIN_ANGLE + progress
+                : 3 * Math.PI - (BEGIN_ANGLE + progress);
+            this.presetCanvas(context, this.hoverColor, BEGIN_ANGLE, endAngle);
+        },
+        drawCircle(currentValue) {
+            const { size } = this.data;
+            this.getContext().then((context) => {
+                context.clearRect(0, 0, size, size);
+                this.renderLayerCircle(context);
+                const formatValue = format(currentValue);
+                if (formatValue !== 0) {
+                    this.renderHoverCircle(context, formatValue);
+                }
+                context.draw();
+            });
+        },
+        reRender() {
+            // tofector 动画暂时没有想到好的解决方案
+            const { value, speed } = this.data;
+            if (speed <= 0 || speed > 1000) {
+                this.drawCircle(value);
+                return;
+            }
+            this.clearMockInterval();
+            this.currentValue = this.currentValue || 0;
+            const run = () => {
+                this.interval = setTimeout(() => {
+                    if (this.currentValue !== value) {
+                        if (Math.abs(this.currentValue - value) < STEP) {
+                            this.currentValue = value;
+                        }
+                        else if (this.currentValue < value) {
+                            this.currentValue += STEP;
+                        }
+                        else {
+                            this.currentValue -= STEP;
+                        }
+                        this.drawCircle(this.currentValue);
+                        run();
+                    }
+                    else {
+                        this.clearMockInterval();
+                    }
+                }, 1000 / speed);
+            };
+            run();
+        },
+        clearMockInterval() {
+            if (this.interval) {
+                clearTimeout(this.interval);
+                this.interval = null;
+            }
+        },
     },
-    setHoverColor() {
-      const { color, size } = this.data;
-      if (isObj(color)) {
-        return this.getContext().then((context) => {
-          const LinearColor = context.createLinearGradient(size, 0, 0, 0);
-          Object.keys(color)
-            .sort((a, b) => parseFloat(a) - parseFloat(b))
-            .map((key) =>
-              LinearColor.addColorStop(parseFloat(key) / 100, color[key])
-            );
-          this.hoverColor = LinearColor;
+    mounted() {
+        this.currentValue = this.data.value;
+        this.setHoverColor().then(() => {
+            this.drawCircle(this.currentValue);
         });
-      }
-      this.hoverColor = color;
-      return Promise.resolve();
-    },
-    presetCanvas(context, strokeStyle, beginAngle, endAngle, fill) {
-      const { strokeWidth, lineCap, clockwise, size } = this.data;
-      const position = size / 2;
-      const radius = position - strokeWidth / 2;
-      context.setStrokeStyle(strokeStyle);
-      context.setLineWidth(strokeWidth);
-      context.setLineCap(lineCap);
-      context.beginPath();
-      context.arc(position, position, radius, beginAngle, endAngle, !clockwise);
-      context.stroke();
-      if (fill) {
-        context.setFillStyle(fill);
-        context.fill();
-      }
-    },
-    renderLayerCircle(context) {
-      const { layerColor, fill } = this.data;
-      this.presetCanvas(context, layerColor, 0, PERIMETER, fill);
-    },
-    renderHoverCircle(context, formatValue) {
-      const { clockwise } = this.data;
-      // 结束角度
-      const progress = PERIMETER * (formatValue / 100);
-      const endAngle = clockwise
-        ? BEGIN_ANGLE + progress
-        : 3 * Math.PI - (BEGIN_ANGLE + progress);
-      this.presetCanvas(context, this.hoverColor, BEGIN_ANGLE, endAngle);
-    },
-    drawCircle(currentValue) {
-      const { size } = this.data;
-      this.getContext().then((context) => {
-        context.clearRect(0, 0, size, size);
-        this.renderLayerCircle(context);
-        const formatValue = format(currentValue);
-        if (formatValue !== 0) {
-          this.renderHoverCircle(context, formatValue);
-        }
-        context.draw();
-      });
-    },
-    reRender() {
-      // tofector 动画暂时没有想到好的解决方案
-      const { value, speed } = this.data;
-      if (speed <= 0 || speed > 1000) {
-        this.drawCircle(value);
-        return;
-      }
-      this.clearInterval();
-      this.currentValue = this.currentValue || 0;
-      this.interval = setInterval(() => {
-        if (this.currentValue !== value) {
-          if (Math.abs(this.currentValue - value) < STEP) {
-            this.currentValue = value;
-          } else {
-            if (this.currentValue < value) {
-              this.currentValue += STEP;
-            } else {
-              this.currentValue -= STEP;
-            }
-          }
-          this.drawCircle(this.currentValue);
-        } else {
-          this.clearInterval();
-        }
-      }, 1000 / speed);
     },
-    clearInterval() {
-      if (this.interval) {
-        clearInterval(this.interval);
-        this.interval = null;
-      }
+    destroyed() {
+        this.clearMockInterval();
     },
-  },
-  mounted() {
-    this.currentValue = this.data.value;
-    this.setHoverColor().then(() => {
-      this.drawCircle(this.currentValue);
-    });
-  },
-  destroyed() {
-    this.clearInterval();
-  },
 });

+ 1 - 1
wxcomponents/vant/dist/circle/index.wxss

@@ -1 +1 @@
-@import '../common/index.wxss';.van-circle{position:relative;display:inline-block;text-align:center}.van-circle__text{position:absolute;top:50%;left:0;width:100%;-webkit-transform:translateY(-50%);transform:translateY(-50%);color:#323233;color:var(--circle-text-color,#323233)}
+@import '../common/index.wxss';.van-circle{display:inline-block;position:relative;text-align:center}.van-circle__text{color:var(--circle-text-color,#323233);left:0;position:absolute;top:50%;transform:translateY(-50%);width:100%}

+ 5 - 5
wxcomponents/vant/dist/col/index.js

@@ -1,9 +1,9 @@
 import { useParent } from '../common/relation';
 import { VantComponent } from '../common/component';
 VantComponent({
-  relation: useParent('row'),
-  props: {
-    span: Number,
-    offset: Number,
-  },
+    relation: useParent('row'),
+    props: {
+        span: Number,
+        offset: Number,
+    },
 });

+ 1 - 1
wxcomponents/vant/dist/col/index.wxss

@@ -1 +1 @@
-@import '../common/index.wxss';.van-col{float:left;box-sizing:border-box}.van-col--1{width:4.16666667%}.van-col--offset-1{margin-left:4.16666667%}.van-col--2{width:8.33333333%}.van-col--offset-2{margin-left:8.33333333%}.van-col--3{width:12.5%}.van-col--offset-3{margin-left:12.5%}.van-col--4{width:16.66666667%}.van-col--offset-4{margin-left:16.66666667%}.van-col--5{width:20.83333333%}.van-col--offset-5{margin-left:20.83333333%}.van-col--6{width:25%}.van-col--offset-6{margin-left:25%}.van-col--7{width:29.16666667%}.van-col--offset-7{margin-left:29.16666667%}.van-col--8{width:33.33333333%}.van-col--offset-8{margin-left:33.33333333%}.van-col--9{width:37.5%}.van-col--offset-9{margin-left:37.5%}.van-col--10{width:41.66666667%}.van-col--offset-10{margin-left:41.66666667%}.van-col--11{width:45.83333333%}.van-col--offset-11{margin-left:45.83333333%}.van-col--12{width:50%}.van-col--offset-12{margin-left:50%}.van-col--13{width:54.16666667%}.van-col--offset-13{margin-left:54.16666667%}.van-col--14{width:58.33333333%}.van-col--offset-14{margin-left:58.33333333%}.van-col--15{width:62.5%}.van-col--offset-15{margin-left:62.5%}.van-col--16{width:66.66666667%}.van-col--offset-16{margin-left:66.66666667%}.van-col--17{width:70.83333333%}.van-col--offset-17{margin-left:70.83333333%}.van-col--18{width:75%}.van-col--offset-18{margin-left:75%}.van-col--19{width:79.16666667%}.van-col--offset-19{margin-left:79.16666667%}.van-col--20{width:83.33333333%}.van-col--offset-20{margin-left:83.33333333%}.van-col--21{width:87.5%}.van-col--offset-21{margin-left:87.5%}.van-col--22{width:91.66666667%}.van-col--offset-22{margin-left:91.66666667%}.van-col--23{width:95.83333333%}.van-col--offset-23{margin-left:95.83333333%}.van-col--24{width:100%}.van-col--offset-24{margin-left:100%}
+@import '../common/index.wxss';.van-col{box-sizing:border-box;float:left}.van-col--1{width:4.16666667%}.van-col--offset-1{margin-left:4.16666667%}.van-col--2{width:8.33333333%}.van-col--offset-2{margin-left:8.33333333%}.van-col--3{width:12.5%}.van-col--offset-3{margin-left:12.5%}.van-col--4{width:16.66666667%}.van-col--offset-4{margin-left:16.66666667%}.van-col--5{width:20.83333333%}.van-col--offset-5{margin-left:20.83333333%}.van-col--6{width:25%}.van-col--offset-6{margin-left:25%}.van-col--7{width:29.16666667%}.van-col--offset-7{margin-left:29.16666667%}.van-col--8{width:33.33333333%}.van-col--offset-8{margin-left:33.33333333%}.van-col--9{width:37.5%}.van-col--offset-9{margin-left:37.5%}.van-col--10{width:41.66666667%}.van-col--offset-10{margin-left:41.66666667%}.van-col--11{width:45.83333333%}.van-col--offset-11{margin-left:45.83333333%}.van-col--12{width:50%}.van-col--offset-12{margin-left:50%}.van-col--13{width:54.16666667%}.van-col--offset-13{margin-left:54.16666667%}.van-col--14{width:58.33333333%}.van-col--offset-14{margin-left:58.33333333%}.van-col--15{width:62.5%}.van-col--offset-15{margin-left:62.5%}.van-col--16{width:66.66666667%}.van-col--offset-16{margin-left:66.66666667%}.van-col--17{width:70.83333333%}.van-col--offset-17{margin-left:70.83333333%}.van-col--18{width:75%}.van-col--offset-18{margin-left:75%}.van-col--19{width:79.16666667%}.van-col--offset-19{margin-left:79.16666667%}.van-col--20{width:83.33333333%}.van-col--offset-20{margin-left:83.33333333%}.van-col--21{width:87.5%}.van-col--offset-21{margin-left:87.5%}.van-col--22{width:91.66666667%}.van-col--offset-22{margin-left:91.66666667%}.van-col--23{width:95.83333333%}.van-col--offset-23{margin-left:95.83333333%}.van-col--24{width:100%}.van-col--offset-24{margin-left:100%}

+ 1 - 5
wxcomponents/vant/dist/collapse-item/animate.d.ts

@@ -1,6 +1,2 @@
 /// <reference types="miniprogram-api-typings" />
-export declare function setContentAnimate(
-  context: WechatMiniprogram.Component.TrivialInstance,
-  expanded: boolean,
-  mounted: boolean
-): void;
+export declare function setContentAnimate(context: WechatMiniprogram.Component.TrivialInstance, expanded: boolean, mounted: boolean): void;

+ 30 - 61
wxcomponents/vant/dist/collapse-item/animate.js

@@ -1,70 +1,39 @@
-import { canIUseAnimate } from '../common/version';
 import { getRect } from '../common/utils';
-function useAnimate(context, expanded, mounted, height) {
-  const selector = '.van-collapse-item__wrapper';
-  if (expanded) {
-    context.animate(
-      selector,
-      [
-        { height: 0, ease: 'ease-in-out', offset: 0 },
-        { height: `${height}px`, ease: 'ease-in-out', offset: 1 },
-        { height: `auto`, ease: 'ease-in-out', offset: 1 },
-      ],
-      mounted ? 300 : 0,
-      () => {
-        context.clearAnimation(selector);
-      }
-    );
-    return;
-  }
-  context.animate(
-    selector,
-    [
-      { height: `${height}px`, ease: 'ease-in-out', offset: 0 },
-      { height: 0, ease: 'ease-in-out', offset: 1 },
-    ],
-    300,
-    () => {
-      context.clearAnimation(selector);
-    }
-  );
-}
 function useAnimation(context, expanded, mounted, height) {
-  const animation = wx.createAnimation({
-    duration: 0,
-    timingFunction: 'ease-in-out',
-  });
-  if (expanded) {
-    if (height === 0) {
-      animation.height('auto').top(1).step();
-    } else {
-      animation
-        .height(height)
-        .top(1)
-        .step({
-          duration: mounted ? 300 : 1,
-        })
-        .height('auto')
-        .step();
+    const animation = wx.createAnimation({
+        duration: 0,
+        timingFunction: 'ease-in-out',
+    });
+    if (expanded) {
+        if (height === 0) {
+            animation.height('auto').top(1).step();
+        }
+        else {
+            animation
+                .height(height)
+                .top(1)
+                .step({
+                duration: mounted ? 300 : 1,
+            })
+                .height('auto')
+                .step();
+        }
+        context.setData({
+            animation: animation.export(),
+        });
+        return;
     }
+    animation.height(height).top(0).step({ duration: 1 }).height(0).step({
+        duration: 300,
+    });
     context.setData({
-      animation: animation.export(),
+        animation: animation.export(),
     });
-    return;
-  }
-  animation.height(height).top(0).step({ duration: 1 }).height(0).step({
-    duration: 300,
-  });
-  context.setData({
-    animation: animation.export(),
-  });
 }
 export function setContentAnimate(context, expanded, mounted) {
-  getRect(context, '.van-collapse-item__content')
-    .then((rect) => rect.height)
-    .then((height) => {
-      canIUseAnimate()
-        ? useAnimate(context, expanded, mounted, height)
-        : useAnimation(context, expanded, mounted, height);
+    getRect(context, '.van-collapse-item__content')
+        .then((rect) => rect.height)
+        .then((height) => {
+        useAnimation(context, expanded, mounted, height);
     });
 }

+ 51 - 50
wxcomponents/vant/dist/collapse-item/index.js

@@ -2,58 +2,59 @@ import { VantComponent } from '../common/component';
 import { useParent } from '../common/relation';
 import { setContentAnimate } from './animate';
 VantComponent({
-  classes: ['title-class', 'content-class'],
-  relation: useParent('collapse'),
-  props: {
-    name: null,
-    title: null,
-    value: null,
-    icon: String,
-    label: String,
-    disabled: Boolean,
-    clickable: Boolean,
-    border: {
-      type: Boolean,
-      value: true,
+    classes: ['title-class', 'content-class'],
+    relation: useParent('collapse'),
+    props: {
+        size: String,
+        name: null,
+        title: null,
+        value: null,
+        icon: String,
+        label: String,
+        disabled: Boolean,
+        clickable: Boolean,
+        border: {
+            type: Boolean,
+            value: true,
+        },
+        isLink: {
+            type: Boolean,
+            value: true,
+        },
     },
-    isLink: {
-      type: Boolean,
-      value: true,
+    data: {
+        expanded: false,
     },
-  },
-  data: {
-    expanded: false,
-  },
-  mounted() {
-    this.updateExpanded();
-    this.mounted = true;
-  },
-  methods: {
-    updateExpanded() {
-      if (!this.parent) {
-        return;
-      }
-      const { value, accordion } = this.parent.data;
-      const { children = [] } = this.parent;
-      const { name } = this.data;
-      const index = children.indexOf(this);
-      const currentName = name == null ? index : name;
-      const expanded = accordion
-        ? value === currentName
-        : (value || []).some((name) => name === currentName);
-      if (expanded !== this.data.expanded) {
-        setContentAnimate(this, expanded, this.mounted);
-      }
-      this.setData({ index, expanded });
+    mounted() {
+        this.updateExpanded();
+        this.mounted = true;
     },
-    onClick() {
-      if (this.data.disabled) {
-        return;
-      }
-      const { name, expanded } = this.data;
-      const index = this.parent.children.indexOf(this);
-      const currentName = name == null ? index : name;
-      this.parent.switch(currentName, !expanded);
+    methods: {
+        updateExpanded() {
+            if (!this.parent) {
+                return;
+            }
+            const { value, accordion } = this.parent.data;
+            const { children = [] } = this.parent;
+            const { name } = this.data;
+            const index = children.indexOf(this);
+            const currentName = name == null ? index : name;
+            const expanded = accordion
+                ? value === currentName
+                : (value || []).some((name) => name === currentName);
+            if (expanded !== this.data.expanded) {
+                setContentAnimate(this, expanded, this.mounted);
+            }
+            this.setData({ index, expanded });
+        },
+        onClick() {
+            if (this.data.disabled) {
+                return;
+            }
+            const { name, expanded } = this.data;
+            const index = this.parent.children.indexOf(this);
+            const currentName = name == null ? index : name;
+            this.parent.switch(currentName, !expanded);
+        },
     },
-  },
 });

+ 1 - 0
wxcomponents/vant/dist/collapse-item/index.wxml

@@ -2,6 +2,7 @@
 
 <view class="van-collapse-item custom-class {{ index !== 0 ? 'van-hairline--top' : '' }}">
   <van-cell
+    size="{{ size }}"
     title="{{ title }}"
     title-class="title-class"
     icon="{{ icon }}"

+ 1 - 1
wxcomponents/vant/dist/collapse-item/index.wxss

@@ -1 +1 @@
-@import '../common/index.wxss';.van-collapse-item__title .van-cell__right-icon{-webkit-transform:rotate(90deg);transform:rotate(90deg);transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;transition:-webkit-transform var(--collapse-item-transition-duration,.3s);transition:transform var(--collapse-item-transition-duration,.3s);transition:transform var(--collapse-item-transition-duration,.3s),-webkit-transform var(--collapse-item-transition-duration,.3s)}.van-collapse-item__title--expanded .van-cell__right-icon{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.van-collapse-item__title--disabled .van-cell,.van-collapse-item__title--disabled .van-cell__right-icon{color:#c8c9cc!important;color:var(--collapse-item-title-disabled-color,#c8c9cc)!important}.van-collapse-item__title--disabled .van-cell--hover{background-color:#fff!important;background-color:var(--white,#fff)!important}.van-collapse-item__wrapper{overflow:hidden}.van-collapse-item__content{padding:15px;padding:var(--collapse-item-content-padding,15px);color:#969799;color:var(--collapse-item-content-text-color,#969799);font-size:13px;font-size:var(--collapse-item-content-font-size,13px);line-height:1.5;line-height:var(--collapse-item-content-line-height,1.5);background-color:#fff;background-color:var(--collapse-item-content-background-color,#fff)}
+@import '../common/index.wxss';.van-collapse-item__title .van-cell__right-icon{transform:rotate(90deg);transition:transform var(--collapse-item-transition-duration,.3s)}.van-collapse-item__title--expanded .van-cell__right-icon{transform:rotate(-90deg)}.van-collapse-item__title--disabled .van-cell,.van-collapse-item__title--disabled .van-cell__right-icon{color:var(--collapse-item-title-disabled-color,#c8c9cc)!important}.van-collapse-item__title--disabled .van-cell--hover{background-color:#fff!important}.van-collapse-item__wrapper{overflow:hidden}.van-collapse-item__content{background-color:var(--collapse-item-content-background-color,#fff);color:var(--collapse-item-content-text-color,#969799);font-size:var(--collapse-item-content-font-size,13px);line-height:var(--collapse-item-content-line-height,1.5);padding:var(--collapse-item-content-padding,15px)}

+ 40 - 38
wxcomponents/vant/dist/collapse/index.js

@@ -1,44 +1,46 @@
 import { VantComponent } from '../common/component';
 import { useChildren } from '../common/relation';
 VantComponent({
-  relation: useChildren('collapse-item'),
-  props: {
-    value: {
-      type: null,
-      observer: 'updateExpanded',
+    relation: useChildren('collapse-item'),
+    props: {
+        value: {
+            type: null,
+            observer: 'updateExpanded',
+        },
+        accordion: {
+            type: Boolean,
+            observer: 'updateExpanded',
+        },
+        border: {
+            type: Boolean,
+            value: true,
+        },
     },
-    accordion: {
-      type: Boolean,
-      observer: 'updateExpanded',
+    methods: {
+        updateExpanded() {
+            this.children.forEach((child) => {
+                child.updateExpanded();
+            });
+        },
+        switch(name, expanded) {
+            const { accordion, value } = this.data;
+            const changeItem = name;
+            if (!accordion) {
+                name = expanded
+                    ? (value || []).concat(name)
+                    : (value || []).filter((activeName) => activeName !== name);
+            }
+            else {
+                name = expanded ? name : '';
+            }
+            if (expanded) {
+                this.$emit('open', changeItem);
+            }
+            else {
+                this.$emit('close', changeItem);
+            }
+            this.$emit('change', name);
+            this.$emit('input', name);
+        },
     },
-    border: {
-      type: Boolean,
-      value: true,
-    },
-  },
-  methods: {
-    updateExpanded() {
-      this.children.forEach((child) => {
-        child.updateExpanded();
-      });
-    },
-    switch(name, expanded) {
-      const { accordion, value } = this.data;
-      const changeItem = name;
-      if (!accordion) {
-        name = expanded
-          ? (value || []).concat(name)
-          : (value || []).filter((activeName) => activeName !== name);
-      } else {
-        name = expanded ? name : '';
-      }
-      if (expanded) {
-        this.$emit('open', changeItem);
-      } else {
-        this.$emit('close', changeItem);
-      }
-      this.$emit('change', name);
-      this.$emit('input', name);
-    },
-  },
 });

+ 2 - 6
wxcomponents/vant/dist/common/component.d.ts

@@ -1,8 +1,4 @@
 /// <reference types="miniprogram-api-typings" />
-import { VantComponentOptions } from '../definitions/index';
-declare function VantComponent<
-  Data extends WechatMiniprogram.Component.DataOption,
-  Props extends WechatMiniprogram.Component.PropertyOption,
-  Methods extends WechatMiniprogram.Component.MethodOption
->(vantOptions: VantComponentOptions<Data, Props, Methods>): void;
+import { VantComponentOptions } from 'definitions/index';
+declare function VantComponent<Data extends WechatMiniprogram.Component.DataOption, Props extends WechatMiniprogram.Component.PropertyOption, Methods extends WechatMiniprogram.Component.MethodOption>(vantOptions: VantComponentOptions<Data, Props, Methods>): void;
 export { VantComponent };

+ 40 - 39
wxcomponents/vant/dist/common/component.js

@@ -1,45 +1,46 @@
 import { basic } from '../mixins/basic';
 function mapKeys(source, target, map) {
-  Object.keys(map).forEach((key) => {
-    if (source[key]) {
-      target[map[key]] = source[key];
-    }
-  });
+    Object.keys(map).forEach((key) => {
+        if (source[key]) {
+            target[map[key]] = source[key];
+        }
+    });
 }
 function VantComponent(vantOptions) {
-  const options = {};
-  mapKeys(vantOptions, options, {
-    data: 'data',
-    props: 'properties',
-    mixins: 'behaviors',
-    methods: 'methods',
-    beforeCreate: 'created',
-    created: 'attached',
-    mounted: 'ready',
-    destroyed: 'detached',
-    classes: 'externalClasses',
-  });
-  // add default externalClasses
-  options.externalClasses = options.externalClasses || [];
-  options.externalClasses.push('custom-class');
-  // add default behaviors
-  options.behaviors = options.behaviors || [];
-  options.behaviors.push(basic);
-  // add relations
-  const { relation } = vantOptions;
-  if (relation) {
-    options.relations = relation.relations;
-    options.behaviors.push(relation.mixin);
-  }
-  // map field to form-field behavior
-  if (vantOptions.field) {
-    options.behaviors.push('wx://form-field');
-  }
-  // add default options
-  options.options = {
-    multipleSlots: true,
-    addGlobalClass: true,
-  };
-  Component(options);
+    const options = {};
+    mapKeys(vantOptions, options, {
+        data: 'data',
+        props: 'properties',
+        watch: 'observers',
+        mixins: 'behaviors',
+        methods: 'methods',
+        beforeCreate: 'created',
+        created: 'attached',
+        mounted: 'ready',
+        destroyed: 'detached',
+        classes: 'externalClasses',
+    });
+    // add default externalClasses
+    options.externalClasses = options.externalClasses || [];
+    options.externalClasses.push('custom-class');
+    // add default behaviors
+    options.behaviors = options.behaviors || [];
+    options.behaviors.push(basic);
+    // add relations
+    const { relation } = vantOptions;
+    if (relation) {
+        options.relations = relation.relations;
+        options.behaviors.push(relation.mixin);
+    }
+    // map field to form-field behavior
+    if (vantOptions.field) {
+        options.behaviors.push('wx://form-field');
+    }
+    // add default options
+    options.options = {
+        multipleSlots: true,
+        addGlobalClass: true,
+    };
+    Component(options);
 }
 export { VantComponent };

+ 1 - 1
wxcomponents/vant/dist/common/index.wxss

@@ -1 +1 @@
-.van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{-webkit-line-clamp:3}.van-clearfix:after{display:table;clear:both;content:""}.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{position:absolute;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;content:" ";pointer-events:none;top:-50%;right:-50%;bottom:-50%;left:-50%;border:0 solid #ebedf0;-webkit-transform:scale(.5);transform:scale(.5)}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px}
+.van-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden;text-overflow:ellipsis}.van-multi-ellipsis--l3{-webkit-line-clamp:3}.van-clearfix:after{clear:both;content:"";display:table}.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{border:0 solid #ebedf0;bottom:-50%;box-sizing:border-box;content:" ";left:-50%;pointer-events:none;position:absolute;right:-50%;top:-50%;transform:scale(.5);transform-origin:center}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px}

+ 11 - 17
wxcomponents/vant/dist/common/relation.d.ts

@@ -1,21 +1,15 @@
 /// <reference types="miniprogram-api-typings" />
-declare type TrivialInstance = WechatMiniprogram.Component.TrivialInstance;
-export declare function useParent(
-  name: string,
-  onEffect?: (this: TrivialInstance) => void
-): {
-  relations: {
-    [x: string]: WechatMiniprogram.Component.RelationOption;
-  };
-  mixin: string;
+type TrivialInstance = WechatMiniprogram.Component.TrivialInstance;
+export declare function useParent(name: string, onEffect?: (this: TrivialInstance) => void): {
+    relations: {
+        [x: string]: WechatMiniprogram.Component.RelationOption;
+    };
+    mixin: string;
 };
-export declare function useChildren(
-  name: string,
-  onEffect?: (this: TrivialInstance, target: TrivialInstance) => void
-): {
-  relations: {
-    [x: string]: WechatMiniprogram.Component.RelationOption;
-  };
-  mixin: string;
+export declare function useChildren(name: string, onEffect?: (this: TrivialInstance, target: TrivialInstance) => void): {
+    relations: {
+        [x: string]: WechatMiniprogram.Component.RelationOption;
+    };
+    mixin: string;
 };
 export {};

+ 50 - 58
wxcomponents/vant/dist/common/relation.js

@@ -1,64 +1,56 @@
 export function useParent(name, onEffect) {
-  const path = `../${name}/index`;
-  return {
-    relations: {
-      [path]: {
-        type: 'ancestor',
-        linked() {
-          onEffect && onEffect.call(this);
+    const path = `../${name}/index`;
+    return {
+        relations: {
+            [path]: {
+                type: 'ancestor',
+                linked() {
+                    onEffect && onEffect.call(this);
+                },
+                linkChanged() {
+                    onEffect && onEffect.call(this);
+                },
+                unlinked() {
+                    onEffect && onEffect.call(this);
+                },
+            },
         },
-        linkChanged() {
-          onEffect && onEffect.call(this);
-        },
-        unlinked() {
-          onEffect && onEffect.call(this);
-        },
-      },
-    },
-    mixin: Behavior({
-      created() {
-        Object.defineProperty(this, 'parent', {
-          get: () => this.getRelationNodes(path)[0],
-        });
-        Object.defineProperty(this, 'index', {
-          // @ts-ignore
-          get: () => {
-            var _a, _b;
-            return (_b =
-              (_a = this.parent) === null || _a === void 0
-                ? void 0
-                : _a.children) === null || _b === void 0
-              ? void 0
-              : _b.indexOf(this);
-          },
-        });
-      },
-    }),
-  };
+        mixin: Behavior({
+            created() {
+                Object.defineProperty(this, 'parent', {
+                    get: () => this.getRelationNodes(path)[0],
+                });
+                Object.defineProperty(this, 'index', {
+                    // @ts-ignore
+                    get: () => { var _a, _b; return (_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b.indexOf(this); },
+                });
+            },
+        }),
+    };
 }
 export function useChildren(name, onEffect) {
-  const path = `../${name}/index`;
-  return {
-    relations: {
-      [path]: {
-        type: 'descendant',
-        linked(target) {
-          onEffect && onEffect.call(this, target);
-        },
-        linkChanged(target) {
-          onEffect && onEffect.call(this, target);
-        },
-        unlinked(target) {
-          onEffect && onEffect.call(this, target);
+    const path = `../${name}/index`;
+    return {
+        relations: {
+            [path]: {
+                type: 'descendant',
+                linked(target) {
+                    onEffect && onEffect.call(this, target);
+                },
+                linkChanged(target) {
+                    onEffect && onEffect.call(this, target);
+                },
+                unlinked(target) {
+                    onEffect && onEffect.call(this, target);
+                },
+            },
         },
-      },
-    },
-    mixin: Behavior({
-      created() {
-        Object.defineProperty(this, 'children', {
-          get: () => this.getRelationNodes(path) || [],
-        });
-      },
-    }),
-  };
+        mixin: Behavior({
+            created() {
+                Object.defineProperty(this, 'children', {
+                    get: () => this.getRelationNodes(path) || [],
+                });
+            },
+        }),
+    };
 }

+ 1 - 1
wxcomponents/vant/dist/common/style/clearfix.wxss

@@ -1 +1 @@
-.van-clearfix:after{display:table;clear:both;content:""}
+.van-clearfix:after{clear:both;content:"";display:table}

+ 1 - 1
wxcomponents/vant/dist/common/style/ellipsis.wxss

@@ -1 +1 @@
-.van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{-webkit-line-clamp:3}
+.van-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden;text-overflow:ellipsis}.van-multi-ellipsis--l3{-webkit-line-clamp:3}

+ 1 - 1
wxcomponents/vant/dist/common/style/hairline.wxss

@@ -1 +1 @@
-.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{position:absolute;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;content:" ";pointer-events:none;top:-50%;right:-50%;bottom:-50%;left:-50%;border:0 solid #ebedf0;-webkit-transform:scale(.5);transform:scale(.5)}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px}
+.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{border:0 solid #ebedf0;bottom:-50%;box-sizing:border-box;content:" ";left:-50%;pointer-events:none;position:absolute;right:-50%;top:-50%;transform:scale(.5);transform-origin:center}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px}

+ 12 - 25
wxcomponents/vant/dist/common/utils.d.ts

@@ -1,30 +1,17 @@
+/// <reference types="node" />
 /// <reference types="miniprogram-api-typings" />
+/// <reference types="miniprogram-api-typings" />
+/// <reference types="miniprogram-api-typings" />
+/// <reference types="miniprogram-api-typings" />
+export { isDef } from './validator';
+export { getSystemInfoSync } from './version';
 export declare function range(num: number, min: number, max: number): number;
 export declare function nextTick(cb: (...args: any[]) => void): void;
-export declare function getSystemInfoSync(): WechatMiniprogram.SystemInfo;
 export declare function addUnit(value?: string | number): string | undefined;
-export declare function requestAnimationFrame(
-  cb: () => void
-): number | WechatMiniprogram.NodesRef;
+export declare function requestAnimationFrame(cb: () => void): NodeJS.Timeout;
 export declare function pickExclude(obj: unknown, keys: string[]): {};
-export declare function getRect(
-  context: WechatMiniprogram.Component.TrivialInstance,
-  selector: string
-): Promise<WechatMiniprogram.BoundingClientRectCallbackResult>;
-export declare function getAllRect(
-  context: WechatMiniprogram.Component.TrivialInstance,
-  selector: string
-): Promise<WechatMiniprogram.BoundingClientRectCallbackResult[]>;
-export declare function groupSetData(
-  context: WechatMiniprogram.Component.TrivialInstance,
-  cb: () => void
-): void;
-export declare function toPromise(
-  promiseLike: Promise<unknown> | unknown
-): Promise<unknown>;
-export declare function getCurrentPage<T>(): T &
-  WechatMiniprogram.OptionalInterface<WechatMiniprogram.Page.ILifetime> &
-  WechatMiniprogram.Page.InstanceProperties &
-  WechatMiniprogram.Page.InstanceMethods<WechatMiniprogram.IAnyObject> &
-  WechatMiniprogram.Page.Data<WechatMiniprogram.IAnyObject> &
-  WechatMiniprogram.IAnyObject;
+export declare function getRect(context: WechatMiniprogram.Component.TrivialInstance, selector: string): Promise<WechatMiniprogram.BoundingClientRectCallbackResult>;
+export declare function getAllRect(context: WechatMiniprogram.Component.TrivialInstance, selector: string): Promise<WechatMiniprogram.BoundingClientRectCallbackResult[]>;
+export declare function groupSetData(context: WechatMiniprogram.Component.TrivialInstance, cb: () => void): void;
+export declare function toPromise(promiseLike: Promise<unknown> | unknown): Promise<unknown>;
+export declare function getCurrentPage<T>(): T & WechatMiniprogram.OptionalInterface<WechatMiniprogram.Page.ILifetime> & WechatMiniprogram.Page.InstanceProperties & WechatMiniprogram.Page.InstanceMethods<WechatMiniprogram.IAnyObject> & WechatMiniprogram.Page.Data<WechatMiniprogram.IAnyObject> & WechatMiniprogram.IAnyObject;

+ 51 - 64
wxcomponents/vant/dist/common/utils.js

@@ -1,89 +1,76 @@
 import { isDef, isNumber, isPlainObject, isPromise } from './validator';
 import { canIUseGroupSetData, canIUseNextTick } from './version';
+export { isDef } from './validator';
+export { getSystemInfoSync } from './version';
 export function range(num, min, max) {
-  return Math.min(Math.max(num, min), max);
+    return Math.min(Math.max(num, min), max);
 }
 export function nextTick(cb) {
-  if (canIUseNextTick()) {
-    wx.nextTick(cb);
-  } else {
-    setTimeout(() => {
-      cb();
-    }, 1000 / 30);
-  }
-}
-let systemInfo;
-export function getSystemInfoSync() {
-  if (systemInfo == null) {
-    systemInfo = wx.getSystemInfoSync();
-  }
-  return systemInfo;
+    if (canIUseNextTick()) {
+        wx.nextTick(cb);
+    }
+    else {
+        setTimeout(() => {
+            cb();
+        }, 1000 / 30);
+    }
 }
 export function addUnit(value) {
-  if (!isDef(value)) {
-    return undefined;
-  }
-  value = String(value);
-  return isNumber(value) ? `${value}px` : value;
+    if (!isDef(value)) {
+        return undefined;
+    }
+    value = String(value);
+    return isNumber(value) ? `${value}px` : value;
 }
 export function requestAnimationFrame(cb) {
-  const systemInfo = getSystemInfoSync();
-  if (systemInfo.platform === 'devtools') {
     return setTimeout(() => {
-      cb();
+        cb();
     }, 1000 / 30);
-  }
-  return wx
-    .createSelectorQuery()
-    .selectViewport()
-    .boundingClientRect()
-    .exec(() => {
-      cb();
-    });
 }
 export function pickExclude(obj, keys) {
-  if (!isPlainObject(obj)) {
-    return {};
-  }
-  return Object.keys(obj).reduce((prev, key) => {
-    if (!keys.includes(key)) {
-      prev[key] = obj[key];
+    if (!isPlainObject(obj)) {
+        return {};
     }
-    return prev;
-  }, {});
+    return Object.keys(obj).reduce((prev, key) => {
+        if (!keys.includes(key)) {
+            prev[key] = obj[key];
+        }
+        return prev;
+    }, {});
 }
 export function getRect(context, selector) {
-  return new Promise((resolve) => {
-    wx.createSelectorQuery()
-      .in(context)
-      .select(selector)
-      .boundingClientRect()
-      .exec((rect = []) => resolve(rect[0]));
-  });
+    return new Promise((resolve) => {
+        wx.createSelectorQuery()
+            .in(context)
+            .select(selector)
+            .boundingClientRect()
+            .exec((rect = []) => resolve(rect[0]));
+    });
 }
 export function getAllRect(context, selector) {
-  return new Promise((resolve) => {
-    wx.createSelectorQuery()
-      .in(context)
-      .selectAll(selector)
-      .boundingClientRect()
-      .exec((rect = []) => resolve(rect[0]));
-  });
+    return new Promise((resolve) => {
+        wx.createSelectorQuery()
+            .in(context)
+            .selectAll(selector)
+            .boundingClientRect()
+            .exec((rect = []) => resolve(rect[0]));
+    });
 }
 export function groupSetData(context, cb) {
-  if (canIUseGroupSetData()) {
-    context.groupSetData(cb);
-  } else {
-    cb();
-  }
+    if (canIUseGroupSetData()) {
+        context.groupSetData(cb);
+    }
+    else {
+        cb();
+    }
 }
 export function toPromise(promiseLike) {
-  if (isPromise(promiseLike)) {
-    return promiseLike;
-  }
-  return Promise.resolve(promiseLike);
+    if (isPromise(promiseLike)) {
+        return promiseLike;
+    }
+    return Promise.resolve(promiseLike);
 }
 export function getCurrentPage() {
-  const pages = getCurrentPages();
-  return pages[pages.length - 1];
+    const pages = getCurrentPages();
+    return pages[pages.length - 1];
 }

+ 1 - 3
wxcomponents/vant/dist/common/validator.d.ts

@@ -1,7 +1,5 @@
 export declare function isFunction(val: unknown): val is Function;
-export declare function isPlainObject(
-  val: unknown
-): val is Record<string, unknown>;
+export declare function isPlainObject(val: unknown): val is Record<string, unknown>;
 export declare function isPromise<T = unknown>(val: unknown): val is Promise<T>;
 export declare function isDef(value: unknown): boolean;
 export declare function isObj(x: unknown): x is Record<string, unknown>;

+ 10 - 10
wxcomponents/vant/dist/common/validator.js

@@ -1,31 +1,31 @@
 // eslint-disable-next-line @typescript-eslint/ban-types
 export function isFunction(val) {
-  return typeof val === 'function';
+    return typeof val === 'function';
 }
 export function isPlainObject(val) {
-  return val !== null && typeof val === 'object' && !Array.isArray(val);
+    return val !== null && typeof val === 'object' && !Array.isArray(val);
 }
 export function isPromise(val) {
-  return isPlainObject(val) && isFunction(val.then) && isFunction(val.catch);
+    return isPlainObject(val) && isFunction(val.then) && isFunction(val.catch);
 }
 export function isDef(value) {
-  return value !== undefined && value !== null;
+    return value !== undefined && value !== null;
 }
 export function isObj(x) {
-  const type = typeof x;
-  return x !== null && (type === 'object' || type === 'function');
+    const type = typeof x;
+    return x !== null && (type === 'object' || type === 'function');
 }
 export function isNumber(value) {
-  return /^\d+(\.\d+)?$/.test(value);
+    return /^\d+(\.\d+)?$/.test(value);
 }
 export function isBoolean(value) {
-  return typeof value === 'boolean';
+    return typeof value === 'boolean';
 }
 const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i;
 const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv)/i;
 export function isImageUrl(url) {
-  return IMAGE_REGEXP.test(url);
+    return IMAGE_REGEXP.test(url);
 }
 export function isVideoUrl(url) {
-  return VIDEO_REGEXP.test(url);
+    return VIDEO_REGEXP.test(url);
 }

+ 2 - 0
wxcomponents/vant/dist/common/version.d.ts

@@ -1,3 +1,5 @@
+/// <reference types="miniprogram-api-typings" />
+export declare function getSystemInfoSync(): WechatMiniprogram.SystemInfo;
 export declare function canIUseModel(): boolean;
 export declare function canIUseFormFieldButton(): boolean;
 export declare function canIUseAnimate(): boolean;

+ 39 - 28
wxcomponents/vant/dist/common/version.js

@@ -1,48 +1,59 @@
-import { getSystemInfoSync } from './utils';
+let systemInfo;
+export function getSystemInfoSync() {
+    if (systemInfo == null) {
+        systemInfo = wx.getSystemInfoSync();
+    }
+    return systemInfo;
+}
 function compareVersion(v1, v2) {
-  v1 = v1.split('.');
-  v2 = v2.split('.');
-  const len = Math.max(v1.length, v2.length);
-  while (v1.length < len) {
-    v1.push('0');
-  }
-  while (v2.length < len) {
-    v2.push('0');
-  }
-  for (let i = 0; i < len; i++) {
-    const num1 = parseInt(v1[i], 10);
-    const num2 = parseInt(v2[i], 10);
-    if (num1 > num2) {
-      return 1;
+    v1 = v1.split('.');
+    v2 = v2.split('.');
+    const len = Math.max(v1.length, v2.length);
+    while (v1.length < len) {
+        v1.push('0');
+    }
+    while (v2.length < len) {
+        v2.push('0');
     }
-    if (num1 < num2) {
-      return -1;
+    for (let i = 0; i < len; i++) {
+        const num1 = parseInt(v1[i], 10);
+        const num2 = parseInt(v2[i], 10);
+        if (num1 > num2) {
+            return 1;
+        }
+        if (num1 < num2) {
+            return -1;
+        }
     }
-  }
-  return 0;
+    return 0;
 }
 function gte(version) {
-  const system = getSystemInfoSync();
-  return compareVersion(system.SDKVersion, version) >= 0;
+    const system = getSystemInfoSync();
+    return compareVersion(system.SDKVersion, version) >= 0;
 }
 export function canIUseModel() {
-  return gte('2.9.3');
+    return gte('2.9.3');
 }
 export function canIUseFormFieldButton() {
-  return gte('2.10.3');
+    return gte('2.10.3');
 }
 export function canIUseAnimate() {
-  return gte('2.9.0');
+    return gte('2.9.0');
 }
 export function canIUseGroupSetData() {
-  return gte('2.4.0');
+    return gte('2.4.0');
 }
 export function canIUseNextTick() {
-  return wx.canIUse('nextTick');
+    try {
+        return wx.canIUse('nextTick');
+    }
+    catch (e) {
+        return gte('2.7.1');
+    }
 }
 export function canIUseCanvas2d() {
-  return gte('2.9.0');
+    return gte('2.9.0');
 }
 export function canIUseGetUserProfile() {
-  return !!wx.getUserProfile;
+    return !!wx.getUserProfile;
 }

+ 90 - 89
wxcomponents/vant/dist/count-down/index.js

@@ -1,99 +1,100 @@
 import { VantComponent } from '../common/component';
 import { isSameSecond, parseFormat, parseTimeData } from './utils';
 function simpleTick(fn) {
-  return setTimeout(fn, 30);
+    return setTimeout(fn, 30);
 }
 VantComponent({
-  props: {
-    useSlot: Boolean,
-    millisecond: Boolean,
-    time: {
-      type: Number,
-      observer: 'reset',
+    props: {
+        useSlot: Boolean,
+        millisecond: Boolean,
+        time: {
+            type: Number,
+            observer: 'reset',
+        },
+        format: {
+            type: String,
+            value: 'HH:mm:ss',
+        },
+        autoStart: {
+            type: Boolean,
+            value: true,
+        },
     },
-    format: {
-      type: String,
-      value: 'HH:mm:ss',
+    data: {
+        timeData: parseTimeData(0),
+        formattedTime: '0',
     },
-    autoStart: {
-      type: Boolean,
-      value: true,
+    destroyed() {
+        clearTimeout(this.tid);
+        this.tid = null;
     },
-  },
-  data: {
-    timeData: parseTimeData(0),
-    formattedTime: '0',
-  },
-  destroyed() {
-    clearTimeout(this.tid);
-    this.tid = null;
-  },
-  methods: {
-    // 开始
-    start() {
-      if (this.counting) {
-        return;
-      }
-      this.counting = true;
-      this.endTime = Date.now() + this.remain;
-      this.tick();
+    methods: {
+        // 开始
+        start() {
+            if (this.counting) {
+                return;
+            }
+            this.counting = true;
+            this.endTime = Date.now() + this.remain;
+            this.tick();
+        },
+        // 暂停
+        pause() {
+            this.counting = false;
+            clearTimeout(this.tid);
+        },
+        // 重置
+        reset() {
+            this.pause();
+            this.remain = this.data.time;
+            this.setRemain(this.remain);
+            if (this.data.autoStart) {
+                this.start();
+            }
+        },
+        tick() {
+            if (this.data.millisecond) {
+                this.microTick();
+            }
+            else {
+                this.macroTick();
+            }
+        },
+        microTick() {
+            this.tid = simpleTick(() => {
+                this.setRemain(this.getRemain());
+                if (this.remain !== 0) {
+                    this.microTick();
+                }
+            });
+        },
+        macroTick() {
+            this.tid = simpleTick(() => {
+                const remain = this.getRemain();
+                if (!isSameSecond(remain, this.remain) || remain === 0) {
+                    this.setRemain(remain);
+                }
+                if (this.remain !== 0) {
+                    this.macroTick();
+                }
+            });
+        },
+        getRemain() {
+            return Math.max(this.endTime - Date.now(), 0);
+        },
+        setRemain(remain) {
+            this.remain = remain;
+            const timeData = parseTimeData(remain);
+            if (this.data.useSlot) {
+                this.$emit('change', timeData);
+            }
+            this.setData({
+                formattedTime: parseFormat(this.data.format, timeData),
+            });
+            if (remain === 0) {
+                this.pause();
+                this.$emit('finish');
+            }
+        },
     },
-    // 暂停
-    pause() {
-      this.counting = false;
-      clearTimeout(this.tid);
-    },
-    // 重置
-    reset() {
-      this.pause();
-      this.remain = this.data.time;
-      this.setRemain(this.remain);
-      if (this.data.autoStart) {
-        this.start();
-      }
-    },
-    tick() {
-      if (this.data.millisecond) {
-        this.microTick();
-      } else {
-        this.macroTick();
-      }
-    },
-    microTick() {
-      this.tid = simpleTick(() => {
-        this.setRemain(this.getRemain());
-        if (this.remain !== 0) {
-          this.microTick();
-        }
-      });
-    },
-    macroTick() {
-      this.tid = simpleTick(() => {
-        const remain = this.getRemain();
-        if (!isSameSecond(remain, this.remain) || remain === 0) {
-          this.setRemain(remain);
-        }
-        if (this.remain !== 0) {
-          this.macroTick();
-        }
-      });
-    },
-    getRemain() {
-      return Math.max(this.endTime - Date.now(), 0);
-    },
-    setRemain(remain) {
-      this.remain = remain;
-      const timeData = parseTimeData(remain);
-      if (this.data.useSlot) {
-        this.$emit('change', timeData);
-      }
-      this.setData({
-        formattedTime: parseFormat(this.data.format, timeData),
-      });
-      if (remain === 0) {
-        this.pause();
-        this.$emit('finish');
-      }
-    },
-  },
 });

+ 1 - 1
wxcomponents/vant/dist/count-down/index.wxss

@@ -1 +1 @@
-@import '../common/index.wxss';.van-count-down{color:#323233;color:var(--count-down-text-color,#323233);font-size:14px;font-size:var(--count-down-font-size,14px);line-height:20px;line-height:var(--count-down-line-height,20px)}
+@import '../common/index.wxss';.van-count-down{color:var(--count-down-text-color,#323233);font-size:var(--count-down-font-size,14px);line-height:var(--count-down-line-height,20px)}

+ 1 - 1
wxcomponents/vant/dist/count-down/utils.d.ts

@@ -1,4 +1,4 @@
-export declare type TimeData = {
+export type TimeData = {
     days: number;
     hours: number;
     minutes: number;

+ 45 - 41
wxcomponents/vant/dist/count-down/utils.js

@@ -1,53 +1,57 @@
 function padZero(num, targetLength = 2) {
-  let str = num + '';
-  while (str.length < targetLength) {
-    str = '0' + str;
-  }
-  return str;
+    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,
-  };
+    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) {
-  const { days } = timeData;
-  let { hours, minutes, seconds, milliseconds } = timeData;
-  if (format.indexOf('DD') === -1) {
-    hours += days * 24;
-  } else {
-    format = format.replace('DD', padZero(days));
-  }
-  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));
+    const { days } = timeData;
+    let { hours, minutes, seconds, milliseconds } = timeData;
+    if (format.indexOf('DD') === -1) {
+        hours += days * 24;
+    }
+    else {
+        format = format.replace('DD', padZero(days));
+    }
+    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);
+    return Math.floor(time1 / 1000) === Math.floor(time2 / 1000);
 }

+ 267 - 293
wxcomponents/vant/dist/datetime-picker/index.js

@@ -3,319 +3,293 @@ import { isDef } from '../common/validator';
 import { pickerProps } from '../picker/shared';
 const currentYear = new Date().getFullYear();
 function isValidDate(date) {
-  return isDef(date) && !isNaN(new Date(date).getTime());
+    return isDef(date) && !isNaN(new Date(date).getTime());
 }
 function range(num, min, max) {
-  return Math.min(Math.max(num, min), max);
+    return Math.min(Math.max(num, min), max);
 }
 function padZero(val) {
-  return `00${val}`.slice(-2);
+    return `00${val}`.slice(-2);
 }
 function times(n, iteratee) {
-  let index = -1;
-  const result = Array(n < 0 ? 0 : n);
-  while (++index < n) {
-    result[index] = iteratee(index);
-  }
-  return result;
+    let index = -1;
+    const result = Array(n < 0 ? 0 : n);
+    while (++index < n) {
+        result[index] = iteratee(index);
+    }
+    return result;
 }
 function getTrueValue(formattedValue) {
-  if (formattedValue === undefined) {
-    formattedValue = '1';
-  }
-  while (isNaN(parseInt(formattedValue, 10))) {
-    formattedValue = formattedValue.slice(1);
-  }
-  return parseInt(formattedValue, 10);
+    if (formattedValue === undefined) {
+        formattedValue = '1';
+    }
+    while (isNaN(parseInt(formattedValue, 10))) {
+        formattedValue = formattedValue.slice(1);
+    }
+    return parseInt(formattedValue, 10);
 }
 function getMonthEndDay(year, month) {
-  return 32 - new Date(year, month - 1, 32).getDate();
+    return 32 - new Date(year, month - 1, 32).getDate();
 }
 const defaultFormatter = (type, value) => value;
 VantComponent({
-  classes: ['active-class', 'toolbar-class', 'column-class'],
-  props: Object.assign(Object.assign({}, pickerProps), {
-    value: {
-      type: null,
-      observer: 'updateValue',
+    classes: ['active-class', 'toolbar-class', 'column-class'],
+    props: Object.assign(Object.assign({}, pickerProps), { value: {
+            type: null,
+            observer: 'updateValue',
+        }, filter: null, type: {
+            type: String,
+            value: 'datetime',
+            observer: 'updateValue',
+        }, showToolbar: {
+            type: Boolean,
+            value: true,
+        }, formatter: {
+            type: null,
+            value: defaultFormatter,
+        }, minDate: {
+            type: Number,
+            value: new Date(currentYear - 10, 0, 1).getTime(),
+            observer: 'updateValue',
+        }, maxDate: {
+            type: Number,
+            value: new Date(currentYear + 10, 11, 31).getTime(),
+            observer: 'updateValue',
+        }, minHour: {
+            type: Number,
+            value: 0,
+            observer: 'updateValue',
+        }, maxHour: {
+            type: Number,
+            value: 23,
+            observer: 'updateValue',
+        }, minMinute: {
+            type: Number,
+            value: 0,
+            observer: 'updateValue',
+        }, maxMinute: {
+            type: Number,
+            value: 59,
+            observer: 'updateValue',
+        } }),
+    data: {
+        innerValue: Date.now(),
+        columns: [],
     },
-    filter: null,
-    type: {
-      type: String,
-      value: 'datetime',
-      observer: 'updateValue',
-    },
-    showToolbar: {
-      type: Boolean,
-      value: true,
-    },
-    formatter: {
-      type: null,
-      value: defaultFormatter,
-    },
-    minDate: {
-      type: Number,
-      value: new Date(currentYear - 10, 0, 1).getTime(),
-      observer: 'updateValue',
-    },
-    maxDate: {
-      type: Number,
-      value: new Date(currentYear + 10, 11, 31).getTime(),
-      observer: 'updateValue',
-    },
-    minHour: {
-      type: Number,
-      value: 0,
-      observer: 'updateValue',
-    },
-    maxHour: {
-      type: Number,
-      value: 23,
-      observer: 'updateValue',
-    },
-    minMinute: {
-      type: Number,
-      value: 0,
-      observer: 'updateValue',
-    },
-    maxMinute: {
-      type: Number,
-      value: 59,
-      observer: 'updateValue',
-    },
-  }),
-  data: {
-    innerValue: Date.now(),
-    columns: [],
-  },
-  methods: {
-    updateValue() {
-      const { data } = this;
-      const val = this.correctValue(data.value);
-      const isEqual = val === data.innerValue;
-      this.updateColumnValue(val).then(() => {
-        if (!isEqual) {
-          this.$emit('input', val);
-        }
-      });
-    },
-    getPicker() {
-      if (this.picker == null) {
-        this.picker = this.selectComponent('.van-datetime-picker');
-        const { picker } = this;
-        const { setColumnValues } = picker;
-        picker.setColumnValues = (...args) =>
-          setColumnValues.apply(picker, [...args, false]);
-      }
-      return this.picker;
-    },
-    updateColumns() {
-      const { formatter = defaultFormatter } = this.data;
-      const results = this.getOriginColumns().map((column) => ({
-        values: column.values.map((value) => formatter(column.type, value)),
-      }));
-      return this.set({ columns: results });
-    },
-    getOriginColumns() {
-      const { filter } = this.data;
-      const results = this.getRanges().map(({ type, range }) => {
-        let values = times(range[1] - range[0] + 1, (index) => {
-          const value = range[0] + index;
-          return type === 'year' ? `${value}` : padZero(value);
-        });
-        if (filter) {
-          values = filter(type, values);
-        }
-        return { type, values };
-      });
-      return results;
-    },
-    getRanges() {
-      const { data } = this;
-      if (data.type === 'time') {
-        return [
-          {
-            type: 'hour',
-            range: [data.minHour, data.maxHour],
-          },
-          {
-            type: 'minute',
-            range: [data.minMinute, data.maxMinute],
-          },
-        ];
-      }
-      const {
-        maxYear,
-        maxDate,
-        maxMonth,
-        maxHour,
-        maxMinute,
-      } = this.getBoundary('max', data.innerValue);
-      const {
-        minYear,
-        minDate,
-        minMonth,
-        minHour,
-        minMinute,
-      } = this.getBoundary('min', data.innerValue);
-      const result = [
-        {
-          type: 'year',
-          range: [minYear, maxYear],
+    methods: {
+        updateValue() {
+            const { data } = this;
+            const val = this.correctValue(data.value);
+            const isEqual = val === data.innerValue;
+            this.updateColumnValue(val).then(() => {
+                if (!isEqual) {
+                    this.$emit('input', val);
+                }
+            });
         },
-        {
-          type: 'month',
-          range: [minMonth, maxMonth],
+        getPicker() {
+            if (this.picker == null) {
+                this.picker = this.selectComponent('.van-datetime-picker');
+                const { picker } = this;
+                const { setColumnValues } = picker;
+                picker.setColumnValues = (...args) => setColumnValues.apply(picker, [...args, false]);
+            }
+            return this.picker;
         },
-        {
-          type: 'day',
-          range: [minDate, maxDate],
+        updateColumns() {
+            const { formatter = defaultFormatter } = this.data;
+            const results = this.getOriginColumns().map((column) => ({
+                values: column.values.map((value) => formatter(column.type, value)),
+            }));
+            return this.set({ columns: results });
         },
-        {
-          type: 'hour',
-          range: [minHour, maxHour],
+        getOriginColumns() {
+            const { filter } = this.data;
+            const results = this.getRanges().map(({ type, range }) => {
+                let values = times(range[1] - range[0] + 1, (index) => {
+                    const value = range[0] + index;
+                    return type === 'year' ? `${value}` : padZero(value);
+                });
+                if (filter) {
+                    values = filter(type, values);
+                }
+                return { type, values };
+            });
+            return results;
         },
-        {
-          type: 'minute',
-          range: [minMinute, maxMinute],
+        getRanges() {
+            const { data } = this;
+            if (data.type === 'time') {
+                return [
+                    {
+                        type: 'hour',
+                        range: [data.minHour, data.maxHour],
+                    },
+                    {
+                        type: 'minute',
+                        range: [data.minMinute, data.maxMinute],
+                    },
+                ];
+            }
+            const { maxYear, maxDate, maxMonth, maxHour, maxMinute, } = this.getBoundary('max', data.innerValue);
+            const { minYear, minDate, minMonth, minHour, minMinute, } = this.getBoundary('min', data.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 (data.type === 'date')
+                result.splice(3, 2);
+            if (data.type === 'year-month')
+                result.splice(2, 3);
+            return result;
         },
-      ];
-      if (data.type === 'date') result.splice(3, 2);
-      if (data.type === 'year-month') result.splice(2, 3);
-      return result;
-    },
-    correctValue(value) {
-      const { data } = this;
-      // validate value
-      const isDateType = data.type !== 'time';
-      if (isDateType && !isValidDate(value)) {
-        value = data.minDate;
-      } else if (!isDateType && !value) {
-        const { minHour } = data;
-        value = `${padZero(minHour)}:00`;
-      }
-      // time type
-      if (!isDateType) {
-        let [hour, minute] = value.split(':');
-        hour = padZero(range(hour, data.minHour, data.maxHour));
-        minute = padZero(range(minute, data.minMinute, data.maxMinute));
-        return `${hour}:${minute}`;
-      }
-      // date type
-      value = Math.max(value, data.minDate);
-      value = Math.min(value, data.maxDate);
-      return value;
-    },
-    getBoundary(type, innerValue) {
-      const value = new Date(innerValue);
-      const boundary = new Date(this.data[`${type}Date`]);
-      const year = boundary.getFullYear();
-      let month = 1;
-      let date = 1;
-      let hour = 0;
-      let minute = 0;
-      if (type === 'max') {
-        month = 12;
-        date = getMonthEndDay(value.getFullYear(), value.getMonth() + 1);
-        hour = 23;
-        minute = 59;
-      }
-      if (value.getFullYear() === year) {
-        month = boundary.getMonth() + 1;
-        if (value.getMonth() + 1 === month) {
-          date = boundary.getDate();
-          if (value.getDate() === date) {
-            hour = boundary.getHours();
-            if (value.getHours() === hour) {
-              minute = boundary.getMinutes();
+        correctValue(value) {
+            const { data } = this;
+            // validate value
+            const isDateType = data.type !== 'time';
+            if (isDateType && !isValidDate(value)) {
+                value = data.minDate;
             }
-          }
-        }
-      }
-      return {
-        [`${type}Year`]: year,
-        [`${type}Month`]: month,
-        [`${type}Date`]: date,
-        [`${type}Hour`]: hour,
-        [`${type}Minute`]: minute,
-      };
-    },
-    onCancel() {
-      this.$emit('cancel');
-    },
-    onConfirm() {
-      this.$emit('confirm', this.data.innerValue);
-    },
-    onChange() {
-      const { data } = this;
-      let value;
-      const picker = this.getPicker();
-      const originColumns = this.getOriginColumns();
-      if (data.type === 'time') {
-        const indexes = picker.getIndexes();
-        value = `${+originColumns[0].values[indexes[0]]}:${+originColumns[1]
-          .values[indexes[1]]}`;
-      } else {
-        const indexes = picker.getIndexes();
-        const values = indexes.map(
-          (value, index) => originColumns[index].values[value]
-        );
-        const year = getTrueValue(values[0]);
-        const month = getTrueValue(values[1]);
-        const maxDate = getMonthEndDay(year, month);
-        let date = getTrueValue(values[2]);
-        if (data.type === 'year-month') {
-          date = 1;
-        }
-        date = date > maxDate ? maxDate : date;
-        let hour = 0;
-        let minute = 0;
-        if (data.type === 'datetime') {
-          hour = getTrueValue(values[3]);
-          minute = getTrueValue(values[4]);
-        }
-        value = new Date(year, month - 1, date, hour, minute);
-      }
-      value = this.correctValue(value);
-      this.updateColumnValue(value).then(() => {
-        this.$emit('input', value);
-        this.$emit('change', picker);
-      });
+            else if (!isDateType && !value) {
+                const { minHour } = data;
+                value = `${padZero(minHour)}:00`;
+            }
+            // time type
+            if (!isDateType) {
+                let [hour, minute] = value.split(':');
+                hour = padZero(range(hour, data.minHour, data.maxHour));
+                minute = padZero(range(minute, data.minMinute, data.maxMinute));
+                return `${hour}:${minute}`;
+            }
+            // date type
+            value = Math.max(value, data.minDate);
+            value = Math.min(value, data.maxDate);
+            return value;
+        },
+        getBoundary(type, innerValue) {
+            const value = new Date(innerValue);
+            const boundary = new Date(this.data[`${type}Date`]);
+            const year = boundary.getFullYear();
+            let month = 1;
+            let date = 1;
+            let hour = 0;
+            let minute = 0;
+            if (type === 'max') {
+                month = 12;
+                date = getMonthEndDay(value.getFullYear(), value.getMonth() + 1);
+                hour = 23;
+                minute = 59;
+            }
+            if (value.getFullYear() === year) {
+                month = boundary.getMonth() + 1;
+                if (value.getMonth() + 1 === month) {
+                    date = boundary.getDate();
+                    if (value.getDate() === date) {
+                        hour = boundary.getHours();
+                        if (value.getHours() === hour) {
+                            minute = boundary.getMinutes();
+                        }
+                    }
+                }
+            }
+            return {
+                [`${type}Year`]: year,
+                [`${type}Month`]: month,
+                [`${type}Date`]: date,
+                [`${type}Hour`]: hour,
+                [`${type}Minute`]: minute,
+            };
+        },
+        onCancel() {
+            this.$emit('cancel');
+        },
+        onConfirm() {
+            this.$emit('confirm', this.data.innerValue);
+        },
+        onChange() {
+            const { data } = this;
+            let value;
+            const picker = this.getPicker();
+            const originColumns = this.getOriginColumns();
+            if (data.type === 'time') {
+                const indexes = picker.getIndexes();
+                value = `${+originColumns[0].values[indexes[0]]}:${+originColumns[1]
+                    .values[indexes[1]]}`;
+            }
+            else {
+                const indexes = picker.getIndexes();
+                const values = indexes.map((value, index) => originColumns[index].values[value]);
+                const year = getTrueValue(values[0]);
+                const month = getTrueValue(values[1]);
+                const maxDate = getMonthEndDay(year, month);
+                let date = getTrueValue(values[2]);
+                if (data.type === 'year-month') {
+                    date = 1;
+                }
+                date = date > maxDate ? maxDate : date;
+                let hour = 0;
+                let minute = 0;
+                if (data.type === 'datetime') {
+                    hour = getTrueValue(values[3]);
+                    minute = getTrueValue(values[4]);
+                }
+                value = new Date(year, month - 1, date, hour, minute);
+            }
+            value = this.correctValue(value);
+            this.updateColumnValue(value).then(() => {
+                this.$emit('input', value);
+                this.$emit('change', picker);
+            });
+        },
+        updateColumnValue(value) {
+            let values = [];
+            const { type } = this.data;
+            const formatter = this.data.formatter || defaultFormatter;
+            const picker = this.getPicker();
+            if (type === 'time') {
+                const pair = value.split(':');
+                values = [formatter('hour', pair[0]), formatter('minute', pair[1])];
+            }
+            else {
+                const date = new Date(value);
+                values = [
+                    formatter('year', `${date.getFullYear()}`),
+                    formatter('month', padZero(date.getMonth() + 1)),
+                ];
+                if (type === 'date') {
+                    values.push(formatter('day', padZero(date.getDate())));
+                }
+                if (type === 'datetime') {
+                    values.push(formatter('day', padZero(date.getDate())), formatter('hour', padZero(date.getHours())), formatter('minute', padZero(date.getMinutes())));
+                }
+            }
+            return this.set({ innerValue: value })
+                .then(() => this.updateColumns())
+                .then(() => picker.setValues(values));
+        },
     },
-    updateColumnValue(value) {
-      let values = [];
-      const { type } = this.data;
-      const formatter = this.data.formatter || defaultFormatter;
-      const picker = this.getPicker();
-      if (type === 'time') {
-        const pair = value.split(':');
-        values = [formatter('hour', pair[0]), formatter('minute', pair[1])];
-      } else {
-        const date = new Date(value);
-        values = [
-          formatter('year', `${date.getFullYear()}`),
-          formatter('month', padZero(date.getMonth() + 1)),
-        ];
-        if (type === 'date') {
-          values.push(formatter('day', padZero(date.getDate())));
-        }
-        if (type === 'datetime') {
-          values.push(
-            formatter('day', padZero(date.getDate())),
-            formatter('hour', padZero(date.getHours())),
-            formatter('minute', padZero(date.getMinutes()))
-          );
-        }
-      }
-      return this.set({ innerValue: value })
-        .then(() => this.updateColumns())
-        .then(() => picker.setValues(values));
+    created() {
+        const innerValue = this.correctValue(this.data.value);
+        this.updateColumnValue(innerValue).then(() => {
+            this.$emit('input', innerValue);
+        });
     },
-  },
-  created() {
-    const innerValue = this.correctValue(this.data.value);
-    this.updateColumnValue(innerValue).then(() => {
-      this.$emit('input', innerValue);
-    });
-  },
 });

+ 24 - 39
wxcomponents/vant/dist/definitions/index.d.ts

@@ -1,43 +1,28 @@
 /// <reference types="miniprogram-api-typings" />
 interface VantComponentInstance {
-  parent: WechatMiniprogram.Component.TrivialInstance;
-  children: WechatMiniprogram.Component.TrivialInstance[];
-  index: number;
-  $emit: (
-    name: string,
-    detail?: unknown,
-    options?: WechatMiniprogram.Component.TriggerEventOption
-  ) => void;
+    parent: WechatMiniprogram.Component.TrivialInstance;
+    children: WechatMiniprogram.Component.TrivialInstance[];
+    index: number;
+    $emit: (name: string, detail?: unknown, options?: WechatMiniprogram.Component.TriggerEventOption) => void;
 }
-export declare type VantComponentOptions<
-  Data extends WechatMiniprogram.Component.DataOption,
-  Props extends WechatMiniprogram.Component.PropertyOption,
-  Methods extends WechatMiniprogram.Component.MethodOption
-> = {
-  data?: Data;
-  field?: boolean;
-  classes?: string[];
-  mixins?: string[];
-  props?: Props;
-  relation?: {
-    relations: Record<string, WechatMiniprogram.Component.RelationOption>;
-    mixin: string;
-  };
-  methods?: Methods;
-  beforeCreate?: () => void;
-  created?: () => void;
-  mounted?: () => void;
-  destroyed?: () => void;
-} & ThisType<
-  VantComponentInstance &
-    WechatMiniprogram.Component.Instance<
-      Data & {
-        name: string;
-        value: any;
-      } & Record<string, any>,
-      Props,
-      Methods
-    > &
-    Record<string, any>
->;
+export type VantComponentOptions<Data extends WechatMiniprogram.Component.DataOption, Props extends WechatMiniprogram.Component.PropertyOption, Methods extends WechatMiniprogram.Component.MethodOption> = {
+    data?: Data;
+    field?: boolean;
+    classes?: string[];
+    mixins?: string[];
+    props?: Props;
+    relation?: {
+        relations: Record<string, WechatMiniprogram.Component.RelationOption>;
+        mixin: string;
+    };
+    watch?: Record<string, (...args: any[]) => any>;
+    methods?: Methods;
+    beforeCreate?: () => void;
+    created?: () => void;
+    mounted?: () => void;
+    destroyed?: () => void;
+} & ThisType<VantComponentInstance & WechatMiniprogram.Component.Instance<Data & {
+    name: string;
+    value: any;
+} & Record<string, any>, Props, Methods> & Record<string, any>>;
 export {};

+ 49 - 52
wxcomponents/vant/dist/dialog/dialog.d.ts

@@ -1,58 +1,55 @@
 /// <reference types="miniprogram-api-typings" />
-export declare type Action = 'confirm' | 'cancel' | 'overlay';
+/// <reference types="miniprogram-api-typings" />
+export type Action = 'confirm' | 'cancel' | 'overlay';
+type DialogContext = WechatMiniprogram.Page.TrivialInstance | WechatMiniprogram.Component.TrivialInstance;
 interface DialogOptions {
-  lang?: string;
-  show?: boolean;
-  title?: string;
-  width?: string | number | null;
-  zIndex?: number;
-  theme?: string;
-  context?:
-    | WechatMiniprogram.Page.TrivialInstance
-    | WechatMiniprogram.Component.TrivialInstance;
-  message?: string;
-  overlay?: boolean;
-  selector?: string;
-  ariaLabel?: string;
-  className?: string;
-  customStyle?: string;
-  transition?: string;
-  /**
-   * @deprecated use beforeClose instead
-   */
-  asyncClose?: boolean;
-  beforeClose?: null | ((action: Action) => Promise<void> | void);
-  businessId?: number;
-  sessionFrom?: string;
-  overlayStyle?: string;
-  appParameter?: string;
-  messageAlign?: string;
-  sendMessageImg?: string;
-  showMessageCard?: boolean;
-  sendMessagePath?: string;
-  sendMessageTitle?: string;
-  confirmButtonText?: string;
-  cancelButtonText?: string;
-  showConfirmButton?: boolean;
-  showCancelButton?: boolean;
-  closeOnClickOverlay?: boolean;
-  confirmButtonOpenType?: string;
+    lang?: string;
+    show?: boolean;
+    title?: string;
+    width?: string | number | null;
+    zIndex?: number;
+    theme?: string;
+    context?: (() => DialogContext) | DialogContext;
+    message?: string;
+    overlay?: boolean;
+    selector?: string;
+    ariaLabel?: string;
+    /**
+     * @deprecated use custom-class instead
+     */
+    className?: string;
+    customStyle?: string;
+    transition?: string;
+    /**
+     * @deprecated use beforeClose instead
+     */
+    asyncClose?: boolean;
+    beforeClose?: null | ((action: Action) => Promise<void | boolean> | void);
+    businessId?: number;
+    sessionFrom?: string;
+    overlayStyle?: string;
+    appParameter?: string;
+    messageAlign?: string;
+    sendMessageImg?: string;
+    showMessageCard?: boolean;
+    sendMessagePath?: string;
+    sendMessageTitle?: string;
+    confirmButtonText?: string;
+    cancelButtonText?: string;
+    showConfirmButton?: boolean;
+    showCancelButton?: boolean;
+    closeOnClickOverlay?: boolean;
+    confirmButtonOpenType?: string;
 }
 declare const Dialog: {
-  (options: DialogOptions): Promise<
-    WechatMiniprogram.Component.TrivialInstance
-  >;
-  alert(
-    options: DialogOptions
-  ): Promise<WechatMiniprogram.Component.TrivialInstance>;
-  confirm(
-    options: DialogOptions
-  ): Promise<WechatMiniprogram.Component.TrivialInstance>;
-  close(): void;
-  stopLoading(): void;
-  currentOptions: DialogOptions;
-  defaultOptions: DialogOptions;
-  setDefaultOptions(options: DialogOptions): void;
-  resetDefaultOptions(): void;
+    (options: DialogOptions): Promise<WechatMiniprogram.Component.TrivialInstance>;
+    alert(options: DialogOptions): Promise<WechatMiniprogram.Component.TrivialInstance>;
+    confirm(options: DialogOptions): Promise<WechatMiniprogram.Component.TrivialInstance>;
+    close(): void;
+    stopLoading(): void;
+    currentOptions: DialogOptions;
+    defaultOptions: DialogOptions;
+    setDefaultOptions(options: DialogOptions): void;
+    resetDefaultOptions(): void;
 };
 export default Dialog;

+ 56 - 63
wxcomponents/vant/dist/dialog/dialog.js

@@ -1,84 +1,77 @@
 let queue = [];
 const defaultOptions = {
-  show: false,
-  title: '',
-  width: null,
-  theme: 'default',
-  message: '',
-  zIndex: 100,
-  overlay: true,
-  selector: '#van-dialog',
-  className: '',
-  asyncClose: false,
-  beforeClose: null,
-  transition: 'scale',
-  customStyle: '',
-  messageAlign: '',
-  overlayStyle: '',
-  confirmButtonText: '确认',
-  cancelButtonText: '取消',
-  showConfirmButton: true,
-  showCancelButton: false,
-  closeOnClickOverlay: false,
-  confirmButtonOpenType: '',
+    show: false,
+    title: '',
+    width: null,
+    theme: 'default',
+    message: '',
+    zIndex: 100,
+    overlay: true,
+    selector: '#van-dialog',
+    className: '',
+    asyncClose: false,
+    beforeClose: null,
+    transition: 'scale',
+    customStyle: '',
+    messageAlign: '',
+    overlayStyle: '',
+    confirmButtonText: '确认',
+    cancelButtonText: '取消',
+    showConfirmButton: true,
+    showCancelButton: false,
+    closeOnClickOverlay: false,
+    confirmButtonOpenType: '',
 };
 let currentOptions = Object.assign({}, defaultOptions);
 function getContext() {
-  const pages = getCurrentPages();
-  return pages[pages.length - 1];
+    const pages = getCurrentPages();
+    return pages[pages.length - 1];
 }
 const Dialog = (options) => {
-  options = Object.assign(Object.assign({}, currentOptions), options);
-  return new Promise((resolve, reject) => {
-    const context = options.context || getContext();
-    const dialog = context.selectComponent(options.selector);
-    delete options.context;
-    delete options.selector;
-    if (dialog) {
-      dialog.setData(
-        Object.assign(
-          {
-            callback: (action, instance) => {
-              action === 'confirm' ? resolve(instance) : reject(instance);
-            },
-          },
-          options
-        )
-      );
-      wx.nextTick(() => {
-        dialog.setData({ show: true });
-      });
-      queue.push(dialog);
-    } else {
-      console.warn(
-        '未找到 van-dialog 节点,请确认 selector 及 context 是否正确'
-      );
-    }
-  });
+    options = Object.assign(Object.assign({}, currentOptions), options);
+    return new Promise((resolve, reject) => {
+        const context = (typeof options.context === 'function'
+            ? options.context()
+            : options.context) || getContext();
+        const dialog = context.selectComponent(options.selector);
+        delete options.context;
+        delete options.selector;
+        if (dialog) {
+            dialog.setData(Object.assign({ callback: (action, instance) => {
+                    action === 'confirm' ? resolve(instance) : reject(instance);
+                } }, options));
+            wx.nextTick(() => {
+                dialog.setData({ show: true });
+            });
+            queue.push(dialog);
+        }
+        else {
+            console.warn('未找到 van-dialog 节点,请确认 selector 及 context 是否正确');
+        }
+    });
 };
 Dialog.alert = (options) => Dialog(options);
-Dialog.confirm = (options) =>
-  Dialog(Object.assign({ showCancelButton: true }, options));
+Dialog.confirm = (options) => Dialog(Object.assign({ showCancelButton: true }, options));
 Dialog.close = () => {
-  queue.forEach((dialog) => {
-    dialog.close();
-  });
-  queue = [];
+    queue.forEach((dialog) => {
+        dialog.close();
+    });
+    queue = [];
 };
 Dialog.stopLoading = () => {
-  queue.forEach((dialog) => {
-    dialog.stopLoading();
-  });
+    queue.forEach((dialog) => {
+        dialog.stopLoading();
+    });
 };
 Dialog.currentOptions = currentOptions;
 Dialog.defaultOptions = defaultOptions;
 Dialog.setDefaultOptions = (options) => {
-  currentOptions = Object.assign(Object.assign({}, currentOptions), options);
-  Dialog.currentOptions = currentOptions;
+    currentOptions = Object.assign(Object.assign({}, currentOptions), options);
+    Dialog.currentOptions = currentOptions;
 };
 Dialog.resetDefaultOptions = () => {
-  currentOptions = Object.assign({}, defaultOptions);
-  Dialog.currentOptions = currentOptions;
+    currentOptions = Object.assign({}, defaultOptions);
+    Dialog.currentOptions = currentOptions;
 };
 Dialog.resetDefaultOptions();
 export default Dialog;

+ 111 - 110
wxcomponents/vant/dist/dialog/index.js

@@ -3,119 +3,120 @@ import { button } from '../mixins/button';
 import { GRAY, RED } from '../common/color';
 import { toPromise } from '../common/utils';
 VantComponent({
-  mixins: [button],
-  props: {
-    show: {
-      type: Boolean,
-      observer(show) {
-        !show && this.stopLoading();
-      },
-    },
-    title: String,
-    message: String,
-    theme: {
-      type: String,
-      value: 'default',
-    },
-    useSlot: Boolean,
-    className: String,
-    customStyle: String,
-    asyncClose: Boolean,
-    messageAlign: String,
-    beforeClose: null,
-    overlayStyle: String,
-    useTitleSlot: Boolean,
-    showCancelButton: Boolean,
-    closeOnClickOverlay: Boolean,
-    confirmButtonOpenType: String,
-    width: null,
-    zIndex: {
-      type: Number,
-      value: 2000,
-    },
-    confirmButtonText: {
-      type: String,
-      value: '确认',
-    },
-    cancelButtonText: {
-      type: String,
-      value: '取消',
-    },
-    confirmButtonColor: {
-      type: String,
-      value: RED,
-    },
-    cancelButtonColor: {
-      type: String,
-      value: GRAY,
-    },
-    showConfirmButton: {
-      type: Boolean,
-      value: true,
-    },
-    overlay: {
-      type: Boolean,
-      value: true,
-    },
-    transition: {
-      type: String,
-      value: 'scale',
-    },
-  },
-  data: {
-    loading: {
-      confirm: false,
-      cancel: false,
-    },
-    callback: () => {},
-  },
-  methods: {
-    onConfirm() {
-      this.handleAction('confirm');
-    },
-    onCancel() {
-      this.handleAction('cancel');
-    },
-    onClickOverlay() {
-      this.close('overlay');
-    },
-    close(action) {
-      this.setData({ show: false });
-      wx.nextTick(() => {
-        this.$emit('close', action);
-        const { callback } = this.data;
-        if (callback) {
-          callback(action, this);
-        }
-      });
+    mixins: [button],
+    props: {
+        show: {
+            type: Boolean,
+            observer(show) {
+                !show && this.stopLoading();
+            },
+        },
+        title: String,
+        message: String,
+        theme: {
+            type: String,
+            value: 'default',
+        },
+        useSlot: Boolean,
+        className: String,
+        customStyle: String,
+        asyncClose: Boolean,
+        messageAlign: String,
+        beforeClose: null,
+        overlayStyle: String,
+        useTitleSlot: Boolean,
+        showCancelButton: Boolean,
+        closeOnClickOverlay: Boolean,
+        confirmButtonOpenType: String,
+        width: null,
+        zIndex: {
+            type: Number,
+            value: 2000,
+        },
+        confirmButtonText: {
+            type: String,
+            value: '确认',
+        },
+        cancelButtonText: {
+            type: String,
+            value: '取消',
+        },
+        confirmButtonColor: {
+            type: String,
+            value: RED,
+        },
+        cancelButtonColor: {
+            type: String,
+            value: GRAY,
+        },
+        showConfirmButton: {
+            type: Boolean,
+            value: true,
+        },
+        overlay: {
+            type: Boolean,
+            value: true,
+        },
+        transition: {
+            type: String,
+            value: 'scale',
+        },
     },
-    stopLoading() {
-      this.setData({
+    data: {
         loading: {
-          confirm: false,
-          cancel: false,
+            confirm: false,
+            cancel: false,
         },
-      });
+        callback: (() => { }),
     },
-    handleAction(action) {
-      this.$emit(action, { dialog: this });
-      const { asyncClose, beforeClose } = this.data;
-      if (!asyncClose && !beforeClose) {
-        this.close(action);
-        return;
-      }
-      this.setData({
-        [`loading.${action}`]: true,
-      });
-      if (beforeClose) {
-        toPromise(beforeClose(action)).then((value) => {
-          if (value) {
-            this.close(action);
-          } else {
-            this.stopLoading();
-          }
-        });
-      }
+    methods: {
+        onConfirm() {
+            this.handleAction('confirm');
+        },
+        onCancel() {
+            this.handleAction('cancel');
+        },
+        onClickOverlay() {
+            this.close('overlay');
+        },
+        close(action) {
+            this.setData({ show: false });
+            wx.nextTick(() => {
+                this.$emit('close', action);
+                const { callback } = this.data;
+                if (callback) {
+                    callback(action, this);
+                }
+            });
+        },
+        stopLoading() {
+            this.setData({
+                loading: {
+                    confirm: false,
+                    cancel: false,
+                },
+            });
+        },
+        handleAction(action) {
+            this.$emit(action, { dialog: this });
+            const { asyncClose, beforeClose } = this.data;
+            if (!asyncClose && !beforeClose) {
+                this.close(action);
+                return;
+            }
+            this.setData({
+                [`loading.${action}`]: true,
+            });
+            if (beforeClose) {
+                toPromise(beforeClose(action)).then((value) => {
+                    if (value) {
+                        this.close(action);
+                    }
+                    else {
+                        this.stopLoading();
+                    }
+                });
+            }
+        },
     },
-  },
 });

+ 2 - 2
wxcomponents/vant/dist/dialog/index.wxml

@@ -5,7 +5,7 @@
   z-index="{{ zIndex }}"
   overlay="{{ overlay }}"
   transition="{{ transition }}"
-  custom-class="van-dialog van-dialog--{{ theme }} {{ className }}"
+  custom-class="van-dialog van-dialog--{{ theme }}{{ className }} custom-class"
   custom-style="width: {{ utils.addUnit(width) }};{{ customStyle }}"
   overlay-style="{{ overlayStyle }}"
   close-on-click-overlay="{{ closeOnClickOverlay }}"
@@ -69,7 +69,7 @@
     </van-goods-action-button>
   </van-goods-action>
 
-  <view wx:else class="van-hairline--top van-dialog__footer">
+  <view wx:elif="{{ showCancelButton || showConfirmButton }}" class="van-hairline--top van-dialog__footer">
     <van-button
       wx:if="{{ showCancelButton }}"
       size="large"

+ 1 - 1
wxcomponents/vant/dist/dialog/index.wxss

@@ -1 +1 @@
-@import '../common/index.wxss';.van-dialog{top:45%!important;overflow:hidden;width:320px;width:var(--dialog-width,320px);font-size:16px;font-size:var(--dialog-font-size,16px);border-radius:16px;border-radius:var(--dialog-border-radius,16px);background-color:#fff;background-color:var(--dialog-background-color,#fff)}@media (max-width:321px){.van-dialog{width:90%;width:var(--dialog-small-screen-width,90%)}}.van-dialog__header{text-align:center;padding-top:24px;padding-top:var(--dialog-header-padding-top,24px);font-weight:500;font-weight:var(--dialog-header-font-weight,500);line-height:24px;line-height:var(--dialog-header-line-height,24px)}.van-dialog__header--isolated{padding:24px 0;padding:var(--dialog-header-isolated-padding,24px 0)}.van-dialog__message{overflow-y:auto;text-align:center;-webkit-overflow-scrolling:touch;font-size:14px;font-size:var(--dialog-message-font-size,14px);line-height:20px;line-height:var(--dialog-message-line-height,20px);max-height:60vh;max-height:var(--dialog-message-max-height,60vh);padding:24px;padding:var(--dialog-message-padding,24px)}.van-dialog__message-text{word-wrap:break-word}.van-dialog__message--hasTitle{padding-top:8px;padding-top:var(--dialog-has-title-message-padding-top,8px);color:#646566;color:var(--dialog-has-title-message-text-color,#646566)}.van-dialog__message--round-button{padding-bottom:16px;color:#323233}.van-dialog__message--left{text-align:left}.van-dialog__message--right{text-align:right}.van-dialog__footer{display:-webkit-flex;display:flex}.van-dialog__footer--round-button{position:relative!important;padding:8px 24px 16px!important}.van-dialog__button{-webkit-flex:1;flex:1}.van-dialog__cancel,.van-dialog__confirm{border:0!important}.van-dialog-bounce-enter{-webkit-transform:translate3d(-50%,-50%,0) scale(.7);transform:translate3d(-50%,-50%,0) scale(.7);opacity:0}.van-dialog-bounce-leave-active{-webkit-transform:translate3d(-50%,-50%,0) scale(.9);transform:translate3d(-50%,-50%,0) scale(.9);opacity:0}
+@import '../common/index.wxss';.van-dialog{background-color:var(--dialog-background-color,#fff);border-radius:var(--dialog-border-radius,16px);font-size:var(--dialog-font-size,16px);overflow:hidden;top:45%!important;width:var(--dialog-width,320px)}@media (max-width:321px){.van-dialog{width:var(--dialog-small-screen-width,90%)}}.van-dialog__header{font-weight:var(--dialog-header-font-weight,500);line-height:var(--dialog-header-line-height,24px);padding-top:var(--dialog-header-padding-top,24px);text-align:center}.van-dialog__header--isolated{padding:var(--dialog-header-isolated-padding,24px 0)}.van-dialog__message{-webkit-overflow-scrolling:touch;font-size:var(--dialog-message-font-size,14px);line-height:var(--dialog-message-line-height,20px);max-height:var(--dialog-message-max-height,60vh);overflow-y:auto;padding:var(--dialog-message-padding,24px);text-align:center}.van-dialog__message-text{word-wrap:break-word}.van-dialog__message--hasTitle{color:var(--dialog-has-title-message-text-color,#646566);padding-top:var(--dialog-has-title-message-padding-top,8px)}.van-dialog__message--round-button{color:#323233;padding-bottom:16px}.van-dialog__message--left{text-align:left}.van-dialog__message--right{text-align:right}.van-dialog__message--justify{text-align:justify}.van-dialog__footer{display:flex}.van-dialog__footer--round-button{padding:8px 24px 16px!important;position:relative!important}.van-dialog__button{flex:1}.van-dialog__cancel,.van-dialog__confirm{border:0!important}.van-dialog-bounce-enter{opacity:0;transform:translate3d(-50%,-50%,0) scale(.7)}.van-dialog-bounce-leave-active{opacity:0;transform:translate3d(-50%,-50%,0) scale(.9)}

+ 9 - 9
wxcomponents/vant/dist/divider/index.js

@@ -1,12 +1,12 @@
 import { VantComponent } from '../common/component';
 VantComponent({
-  props: {
-    dashed: Boolean,
-    hairline: Boolean,
-    contentPosition: String,
-    fontSize: String,
-    borderColor: String,
-    textColor: String,
-    customStyle: String,
-  },
+    props: {
+        dashed: Boolean,
+        hairline: Boolean,
+        contentPosition: String,
+        fontSize: String,
+        borderColor: String,
+        textColor: String,
+        customStyle: String,
+    },
 });

+ 1 - 1
wxcomponents/vant/dist/divider/index.wxss

@@ -1 +1 @@
-@import '../common/index.wxss';.van-divider{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;margin:16px 0;margin:var(--divider-margin,16px 0);color:#969799;color:var(--divider-text-color,#969799);font-size:14px;font-size:var(--divider-font-size,14px);line-height:24px;line-height:var(--divider-line-height,24px);border:0 solid #ebedf0;border-color:var(--divider-border-color,#ebedf0)}.van-divider:after,.van-divider:before{display:block;-webkit-flex:1;flex:1;box-sizing:border-box;height:1px;border-color:inherit;border-style:inherit;border-width:1px 0 0}.van-divider:before{content:""}.van-divider--hairline:after,.van-divider--hairline:before{-webkit-transform:scaleY(.5);transform:scaleY(.5)}.van-divider--dashed{border-style:dashed}.van-divider--center:before,.van-divider--left:before,.van-divider--right:before{margin-right:16px;margin-right:var(--divider-content-padding,16px)}.van-divider--center:after,.van-divider--left:after,.van-divider--right:after{content:"";margin-left:16px;margin-left:var(--divider-content-padding,16px)}.van-divider--left:before{max-width:10%;max-width:var(--divider-content-left-width,10%)}.van-divider--right:after{max-width:10%;max-width:var(--divider-content-right-width,10%)}
+@import '../common/index.wxss';.van-divider{align-items:center;border:0 solid var(--divider-border-color,#ebedf0);color:var(--divider-text-color,#969799);display:flex;font-size:var(--divider-font-size,14px);line-height:var(--divider-line-height,24px);margin:var(--divider-margin,16px 0)}.van-divider:after,.van-divider:before{border-color:inherit;border-style:inherit;border-width:1px 0 0;box-sizing:border-box;display:block;flex:1;height:1px}.van-divider:before{content:""}.van-divider--hairline:after,.van-divider--hairline:before{transform:scaleY(.5)}.van-divider--dashed{border-style:dashed}.van-divider--center:before,.van-divider--left:before,.van-divider--right:before{margin-right:var(--divider-content-padding,16px)}.van-divider--center:after,.van-divider--left:after,.van-divider--right:after{content:"";margin-left:var(--divider-content-padding,16px)}.van-divider--left:before{max-width:var(--divider-content-left-width,10%)}.van-divider--right:after{max-width:var(--divider-content-right-width,10%)}

+ 122 - 103
wxcomponents/vant/dist/dropdown-item/index.js

@@ -1,111 +1,130 @@
 import { useParent } from '../common/relation';
 import { VantComponent } from '../common/component';
 VantComponent({
-  field: true,
-  relation: useParent('dropdown-menu', function () {
-    this.updateDataFromParent();
-  }),
-  props: {
-    value: {
-      type: null,
-      observer: 'rerender',
+    classes: ['item-title-class'],
+    field: true,
+    relation: useParent('dropdown-menu', function () {
+        this.updateDataFromParent();
+    }),
+    props: {
+        value: {
+            type: null,
+            observer: 'rerender',
+        },
+        title: {
+            type: String,
+            observer: 'rerender',
+        },
+        disabled: Boolean,
+        titleClass: {
+            type: String,
+            observer: 'rerender',
+        },
+        options: {
+            type: Array,
+            value: [],
+            observer: 'rerender',
+        },
+        popupStyle: String,
+        useBeforeToggle: {
+            type: Boolean,
+            value: false,
+        },
+        rootPortal: {
+            type: Boolean,
+            value: false,
+        },
     },
-    title: {
-      type: String,
-      observer: 'rerender',
+    data: {
+        transition: true,
+        showPopup: false,
+        showWrapper: false,
+        displayTitle: '',
+        safeAreaTabBar: false,
     },
-    disabled: Boolean,
-    titleClass: {
-      type: String,
-      observer: 'rerender',
-    },
-    options: {
-      type: Array,
-      value: [],
-      observer: 'rerender',
-    },
-    popupStyle: String,
-  },
-  data: {
-    transition: true,
-    showPopup: false,
-    showWrapper: false,
-    displayTitle: '',
-  },
-  methods: {
-    rerender() {
-      wx.nextTick(() => {
-        var _a;
-        (_a = this.parent) === null || _a === void 0
-          ? void 0
-          : _a.updateItemListData();
-      });
-    },
-    updateDataFromParent() {
-      if (this.parent) {
-        const {
-          overlay,
-          duration,
-          activeColor,
-          closeOnClickOverlay,
-          direction,
-        } = this.parent.data;
-        this.setData({
-          overlay,
-          duration,
-          activeColor,
-          closeOnClickOverlay,
-          direction,
-        });
-      }
-    },
-    onOpen() {
-      this.$emit('open');
-    },
-    onOpened() {
-      this.$emit('opened');
-    },
-    onClose() {
-      this.$emit('close');
-    },
-    onClosed() {
-      this.$emit('closed');
-      this.setData({ showWrapper: false });
-    },
-    onOptionTap(event) {
-      const { option } = event.currentTarget.dataset;
-      const { value } = option;
-      const shouldEmitChange = this.data.value !== value;
-      this.setData({ showPopup: false, value });
-      this.$emit('close');
-      this.rerender();
-      if (shouldEmitChange) {
-        this.$emit('change', value);
-      }
-    },
-    toggle(show, options = {}) {
-      var _a;
-      const { showPopup } = this.data;
-      if (typeof show !== 'boolean') {
-        show = !showPopup;
-      }
-      if (show === showPopup) {
-        return;
-      }
-      this.setData({
-        transition: !options.immediate,
-        showPopup: show,
-      });
-      if (show) {
-        (_a = this.parent) === null || _a === void 0
-          ? void 0
-          : _a.getChildWrapperStyle().then((wrapperStyle) => {
-              this.setData({ wrapperStyle, showWrapper: true });
-              this.rerender();
+    methods: {
+        rerender() {
+            wx.nextTick(() => {
+                var _a;
+                (_a = this.parent) === null || _a === void 0 ? void 0 : _a.updateItemListData();
+            });
+        },
+        updateDataFromParent() {
+            if (this.parent) {
+                const { overlay, duration, activeColor, closeOnClickOverlay, direction, safeAreaTabBar, } = this.parent.data;
+                this.setData({
+                    overlay,
+                    duration,
+                    activeColor,
+                    closeOnClickOverlay,
+                    direction,
+                    safeAreaTabBar,
+                });
+            }
+        },
+        onOpen() {
+            this.$emit('open');
+        },
+        onOpened() {
+            this.$emit('opened');
+        },
+        onClose() {
+            this.$emit('close');
+        },
+        onClosed() {
+            this.$emit('closed');
+            this.setData({ showWrapper: false });
+        },
+        onOptionTap(event) {
+            const { option } = event.currentTarget.dataset;
+            const { value } = option;
+            const shouldEmitChange = this.data.value !== value;
+            this.setData({ showPopup: false, value });
+            this.$emit('close');
+            this.rerender();
+            if (shouldEmitChange) {
+                this.$emit('change', value);
+            }
+        },
+        toggle(show, options = {}) {
+            const { showPopup } = this.data;
+            if (typeof show !== 'boolean') {
+                show = !showPopup;
+            }
+            if (show === showPopup) {
+                return;
+            }
+            this.onBeforeToggle(show).then((status) => {
+                var _a;
+                if (!status) {
+                    return;
+                }
+                this.setData({
+                    transition: !options.immediate,
+                    showPopup: show,
+                });
+                if (show) {
+                    (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getChildWrapperStyle().then((wrapperStyle) => {
+                        this.setData({ wrapperStyle, showWrapper: true });
+                        this.rerender();
+                    });
+                }
+                else {
+                    this.rerender();
+                }
+            });
+        },
+        onBeforeToggle(status) {
+            const { useBeforeToggle } = this.data;
+            if (!useBeforeToggle) {
+                return Promise.resolve(true);
+            }
+            return new Promise((resolve) => {
+                this.$emit('before-toggle', {
+                    status,
+                    callback: (value) => resolve(value),
+                });
             });
-      } else {
-        this.rerender();
-      }
+        },
     },
-  },
 });

+ 6 - 4
wxcomponents/vant/dist/dropdown-item/index.wxml

@@ -2,7 +2,7 @@
 
 <view
   wx:if="{{ showWrapper }}"
-  class="{{ utils.bem('dropdown-item', direction) }}"
+  class="{{ utils.bem('dropdown-item', direction) }} custom-class"
   style="{{ wrapperStyle }}"
 >
   <van-popup
@@ -12,12 +12,14 @@
     overlay="{{ overlay }}"
     position="{{ direction === 'down' ? 'top' : 'bottom' }}"
     duration="{{ transition ? duration : 0 }}"
+    safe-area-tab-bar="{{ safeAreaTabBar }}"
     close-on-click-overlay="{{ closeOnClickOverlay }}"
+    rootPortal="{{ rootPortal }}"
     bind:enter="onOpen"
     bind:leave="onClose"
     bind:close="toggle"
-    bind:afterEnter="onOpened"
-    bind:afterLeave="onClosed"
+    bind:after-enter="onOpened"
+    bind:after-leave="onClosed"
   >
     <van-cell
       wx:for="{{ options }}"
@@ -30,7 +32,7 @@
     >
       <view
         slot="title"
-        class="van-dropdown-item__title"
+        class="van-dropdown-item__title item-title-class"
         style="{{ item.value === value  ? 'color:' + activeColor : '' }}"
       >
         {{ item.text }}

+ 1 - 1
wxcomponents/vant/dist/dropdown-item/index.wxss

@@ -1 +1 @@
-@import '../common/index.wxss';.van-dropdown-item{position:fixed;right:0;left:0;overflow:hidden}.van-dropdown-item__option{text-align:left}.van-dropdown-item__option--active .van-dropdown-item__icon,.van-dropdown-item__option--active .van-dropdown-item__title{color:#ee0a24;color:var(--dropdown-menu-option-active-color,#ee0a24)}.van-dropdown-item--up{top:0}.van-dropdown-item--down{bottom:0}.van-dropdown-item__icon{display:block;line-height:inherit}
+@import '../common/index.wxss';.van-dropdown-item{left:0;overflow:hidden;position:fixed;right:0}.van-dropdown-item__option{text-align:left}.van-dropdown-item__option--active .van-dropdown-item__icon,.van-dropdown-item__option--active .van-dropdown-item__title{color:var(--dropdown-menu-option-active-color,#ee0a24)}.van-dropdown-item--up{top:0}.van-dropdown-item--down{bottom:0}.van-dropdown-item__icon{display:block;line-height:inherit}

+ 3 - 3
wxcomponents/vant/dist/dropdown-item/shared.d.ts

@@ -1,5 +1,5 @@
 export interface Option {
-  text: string;
-  value: string | number;
-  icon: string;
+    text: string;
+    value: string | number;
+    icon: string;
 }

+ 106 - 101
wxcomponents/vant/dist/dropdown-menu/index.js

@@ -3,110 +3,115 @@ import { useChildren } from '../common/relation';
 import { addUnit, getRect, getSystemInfoSync } from '../common/utils';
 let ARRAY = [];
 VantComponent({
-  field: true,
-  relation: useChildren('dropdown-item', function () {
-    this.updateItemListData();
-  }),
-  props: {
-    activeColor: {
-      type: String,
-      observer: 'updateChildrenData',
+    field: true,
+    classes: ['title-class'],
+    relation: useChildren('dropdown-item', function () {
+        this.updateItemListData();
+    }),
+    props: {
+        activeColor: {
+            type: String,
+            observer: 'updateChildrenData',
+        },
+        overlay: {
+            type: Boolean,
+            value: true,
+            observer: 'updateChildrenData',
+        },
+        zIndex: {
+            type: Number,
+            value: 10,
+        },
+        duration: {
+            type: Number,
+            value: 200,
+            observer: 'updateChildrenData',
+        },
+        direction: {
+            type: String,
+            value: 'down',
+            observer: 'updateChildrenData',
+        },
+        safeAreaTabBar: {
+            type: Boolean,
+            value: false,
+        },
+        closeOnClickOverlay: {
+            type: Boolean,
+            value: true,
+            observer: 'updateChildrenData',
+        },
+        closeOnClickOutside: {
+            type: Boolean,
+            value: true,
+        },
     },
-    overlay: {
-      type: Boolean,
-      value: true,
-      observer: 'updateChildrenData',
+    data: {
+        itemListData: [],
     },
-    zIndex: {
-      type: Number,
-      value: 10,
+    beforeCreate() {
+        const { windowHeight } = getSystemInfoSync();
+        this.windowHeight = windowHeight;
+        ARRAY.push(this);
     },
-    duration: {
-      type: Number,
-      value: 200,
-      observer: 'updateChildrenData',
+    destroyed() {
+        ARRAY = ARRAY.filter((item) => item !== this);
     },
-    direction: {
-      type: String,
-      value: 'down',
-      observer: 'updateChildrenData',
+    methods: {
+        updateItemListData() {
+            this.setData({
+                itemListData: this.children.map((child) => child.data),
+            });
+        },
+        updateChildrenData() {
+            this.children.forEach((child) => {
+                child.updateDataFromParent();
+            });
+        },
+        toggleItem(active) {
+            this.children.forEach((item, index) => {
+                const { showPopup } = item.data;
+                if (index === active) {
+                    item.toggle();
+                }
+                else if (showPopup) {
+                    item.toggle(false, { immediate: true });
+                }
+            });
+        },
+        close() {
+            this.children.forEach((child) => {
+                child.toggle(false, { immediate: true });
+            });
+        },
+        getChildWrapperStyle() {
+            const { zIndex, direction } = this.data;
+            return getRect(this, '.van-dropdown-menu').then((rect) => {
+                const { top = 0, bottom = 0 } = rect;
+                const offset = direction === 'down' ? bottom : this.windowHeight - top;
+                let wrapperStyle = `z-index: ${zIndex};`;
+                if (direction === 'down') {
+                    wrapperStyle += `top: ${addUnit(offset)};`;
+                }
+                else {
+                    wrapperStyle += `bottom: ${addUnit(offset)};`;
+                }
+                return wrapperStyle;
+            });
+        },
+        onTitleTap(event) {
+            const { index } = event.currentTarget.dataset;
+            const child = this.children[index];
+            if (!child.data.disabled) {
+                ARRAY.forEach((menuItem) => {
+                    if (menuItem &&
+                        menuItem.data.closeOnClickOutside &&
+                        menuItem !== this) {
+                        menuItem.close();
+                    }
+                });
+                this.toggleItem(index);
+            }
+        },
     },
-    closeOnClickOverlay: {
-      type: Boolean,
-      value: true,
-      observer: 'updateChildrenData',
-    },
-    closeOnClickOutside: {
-      type: Boolean,
-      value: true,
-    },
-  },
-  data: {
-    itemListData: [],
-  },
-  beforeCreate() {
-    const { windowHeight } = getSystemInfoSync();
-    this.windowHeight = windowHeight;
-    ARRAY.push(this);
-  },
-  destroyed() {
-    ARRAY = ARRAY.filter((item) => item !== this);
-  },
-  methods: {
-    updateItemListData() {
-      this.setData({
-        itemListData: this.children.map((child) => child.data),
-      });
-    },
-    updateChildrenData() {
-      this.children.forEach((child) => {
-        child.updateDataFromParent();
-      });
-    },
-    toggleItem(active) {
-      this.children.forEach((item, index) => {
-        const { showPopup } = item.data;
-        if (index === active) {
-          item.toggle();
-        } else if (showPopup) {
-          item.toggle(false, { immediate: true });
-        }
-      });
-    },
-    close() {
-      this.children.forEach((child) => {
-        child.toggle(false, { immediate: true });
-      });
-    },
-    getChildWrapperStyle() {
-      const { zIndex, direction } = this.data;
-      return getRect(this, '.van-dropdown-menu').then((rect) => {
-        const { top = 0, bottom = 0 } = rect;
-        const offset = direction === 'down' ? bottom : this.windowHeight - top;
-        let wrapperStyle = `z-index: ${zIndex};`;
-        if (direction === 'down') {
-          wrapperStyle += `top: ${addUnit(offset)};`;
-        } else {
-          wrapperStyle += `bottom: ${addUnit(offset)};`;
-        }
-        return wrapperStyle;
-      });
-    },
-    onTitleTap(event) {
-      const { index } = event.currentTarget.dataset;
-      const child = this.children[index];
-      if (!child.data.disabled) {
-        ARRAY.forEach((menuItem) => {
-          if (
-            menuItem &&
-            menuItem.data.closeOnClickOutside &&
-            menuItem !== this
-          ) {
-            menuItem.close();
-          }
-        });
-        this.toggleItem(index);
-      }
-    },
-  },
 });

+ 2 - 2
wxcomponents/vant/dist/dropdown-menu/index.wxml

@@ -1,7 +1,7 @@
 <wxs src="../wxs/utils.wxs" module="utils" />
 <wxs src="./index.wxs" module="computed" />
 
-<view class="van-dropdown-menu van-dropdown-menu--top-bottom">
+<view class="van-dropdown-menu van-dropdown-menu--top-bottom custom-class">
   <view
     wx:for="{{ itemListData }}"
     wx:key="index"
@@ -10,7 +10,7 @@
     bind:tap="onTitleTap"
   >
     <view
-      class="{{ item.titleClass }} {{ utils.bem('dropdown-menu__title', { active: item.showPopup, down: item.showPopup === (direction === 'down') }) }}"
+      class="{{ item.titleClass }} {{ utils.bem('dropdown-menu__title', { active: item.showPopup, down: item.showPopup === (direction === 'down') }) }} title-class"
       style="{{ item.showPopup ? 'color:' + activeColor : '' }}"
     >
       <view class="van-ellipsis">

+ 1 - 1
wxcomponents/vant/dist/dropdown-menu/index.wxss

@@ -1 +1 @@
-@import '../common/index.wxss';.van-dropdown-menu{display:-webkit-flex;display:flex;box-shadow:0 2px 12px rgba(100,101,102,.12);-webkit-user-select:none;user-select:none;height:50px;height:var(--dropdown-menu-height,50px);background-color:#fff;background-color:var(--dropdown-menu-background-color,#fff)}.van-dropdown-menu__item{display:-webkit-flex;display:flex;-webkit-flex:1;flex:1;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;min-width:0}.van-dropdown-menu__item:active{opacity:.7}.van-dropdown-menu__item--disabled:active{opacity:1}.van-dropdown-menu__item--disabled .van-dropdown-menu__title{color:#969799;color:var(--dropdown-menu-title-disabled-text-color,#969799)}.van-dropdown-menu__title{position:relative;box-sizing:border-box;max-width:100%;padding:0 8px;padding:var(--dropdown-menu-title-padding,0 8px);color:#323233;color:var(--dropdown-menu-title-text-color,#323233);font-size:15px;font-size:var(--dropdown-menu-title-font-size,15px);line-height:18px;line-height:var(--dropdown-menu-title-line-height,18px)}.van-dropdown-menu__title:after{position:absolute;top:50%;right:-4px;margin-top:-5px;border-color:transparent transparent currentcolor currentcolor;border-style:solid;border-width:3px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:.8;content:""}.van-dropdown-menu__title--active{color:#ee0a24;color:var(--dropdown-menu-title-active-text-color,#ee0a24)}.van-dropdown-menu__title--down:after{margin-top:-1px;-webkit-transform:rotate(135deg);transform:rotate(135deg)}
+@import '../common/index.wxss';.van-dropdown-menu{background-color:var(--dropdown-menu-background-color,#fff);box-shadow:var(--dropdown-menu-box-shadow,0 2px 12px hsla(210,1%,40%,.12));display:flex;height:var(--dropdown-menu-height,50px);-webkit-user-select:none;user-select:none}.van-dropdown-menu__item{align-items:center;display:flex;flex:1;justify-content:center;min-width:0}.van-dropdown-menu__item:active{opacity:.7}.van-dropdown-menu__item--disabled:active{opacity:1}.van-dropdown-menu__item--disabled .van-dropdown-menu__title{color:var(--dropdown-menu-title-disabled-text-color,#969799)}.van-dropdown-menu__title{box-sizing:border-box;color:var(--dropdown-menu-title-text-color,#323233);font-size:var(--dropdown-menu-title-font-size,15px);line-height:var(--dropdown-menu-title-line-height,18px);max-width:100%;padding:var(--dropdown-menu-title-padding,0 24px 0 8px);position:relative}.van-dropdown-menu__title:after{border-color:transparent transparent currentcolor currentcolor;border-style:solid;border-width:3px;content:"";margin-top:-5px;opacity:.8;position:absolute;right:11px;top:50%;transform:rotate(-45deg)}.van-dropdown-menu__title--active{color:var(--dropdown-menu-title-active-text-color,#ee0a24)}.van-dropdown-menu__title--down:after{margin-top:-1px;transform:rotate(135deg)}

+ 6 - 6
wxcomponents/vant/dist/empty/index.js

@@ -1,10 +1,10 @@
 import { VantComponent } from '../common/component';
 VantComponent({
-  props: {
-    description: String,
-    image: {
-      type: String,
-      value: 'default',
+    props: {
+        description: String,
+        image: {
+            type: String,
+            value: 'default',
+        },
     },
-  },
 });

+ 1 - 1
wxcomponents/vant/dist/empty/index.json

@@ -1,4 +1,4 @@
 {
   "component": true,
   "usingComponents": {}
-}
+}

+ 1 - 0
wxcomponents/vant/dist/empty/index.wxs

@@ -12,3 +12,4 @@ function imageUrl(image) {
 module.exports = {
   imageUrl: imageUrl,
 };
+

+ 1 - 1
wxcomponents/vant/dist/empty/index.wxss

@@ -1 +1 @@
-@import '../common/index.wxss';.van-empty{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:border-box;padding:32px 0}.van-empty__image{width:160px;height:160px}.van-empty__image:empty{display:none}.van-empty__image__img{width:100%;height:100%}.van-empty__image:not(:empty)+.van-empty__image{display:none}.van-empty__description{margin-top:16px;padding:0 60px;color:#969799;font-size:14px;line-height:20px}.van-empty__description:empty,.van-empty__description:not(:empty)+.van-empty__description{display:none}.van-empty__bottom{margin-top:24px}
+@import '../common/index.wxss';.van-empty{align-items:center;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;padding:32px 0}.van-empty__image{height:160px;width:160px}.van-empty__image:empty{display:none}.van-empty__image__img{height:100%;width:100%}.van-empty__image:not(:empty)+.van-empty__image{display:none}.van-empty__description{color:#969799;font-size:14px;line-height:20px;margin-top:16px;padding:0 60px}.van-empty__description:empty,.van-empty__description:not(:empty)+.van-empty__description{display:none}.van-empty__bottom{margin-top:24px}

+ 104 - 118
wxcomponents/vant/dist/field/index.js

@@ -2,125 +2,111 @@ import { nextTick } from '../common/utils';
 import { VantComponent } from '../common/component';
 import { commonProps, inputProps, textareaProps } from './props';
 VantComponent({
-  field: true,
-  classes: ['input-class', 'right-icon-class', 'label-class'],
-  props: Object.assign(
-    Object.assign(
-      Object.assign(Object.assign({}, commonProps), inputProps),
-      textareaProps
-    ),
-    {
-      size: String,
-      icon: String,
-      label: String,
-      error: Boolean,
-      center: Boolean,
-      isLink: Boolean,
-      leftIcon: String,
-      rightIcon: String,
-      autosize: null,
-      required: Boolean,
-      iconClass: String,
-      clickable: Boolean,
-      inputAlign: String,
-      customStyle: String,
-      errorMessage: String,
-      arrowDirection: String,
-      showWordLimit: Boolean,
-      errorMessageAlign: String,
-      readonly: {
-        type: Boolean,
-        observer: 'setShowClear',
-      },
-      clearable: {
-        type: Boolean,
-        observer: 'setShowClear',
-      },
-      border: {
-        type: Boolean,
-        value: true,
-      },
-      titleWidth: {
-        type: String,
-        value: '6.2em',
-      },
-    }
-  ),
-  data: {
-    focused: false,
-    innerValue: '',
-    showClear: false,
-  },
-  created() {
-    this.value = this.data.value;
-    this.setData({ innerValue: this.value });
-  },
-  methods: {
-    onInput(event) {
-      const { value = '' } = event.detail || {};
-      this.value = value;
-      this.setShowClear();
-      this.emitChange();
+    field: true,
+    classes: ['input-class', 'right-icon-class', 'label-class'],
+    props: Object.assign(Object.assign(Object.assign(Object.assign({}, commonProps), inputProps), textareaProps), { size: String, icon: String, label: String, error: Boolean, center: Boolean, isLink: Boolean, leftIcon: String, rightIcon: String, autosize: null, required: Boolean, iconClass: String, clickable: Boolean, inputAlign: String, customStyle: String, errorMessage: String, arrowDirection: String, showWordLimit: Boolean, errorMessageAlign: String, readonly: {
+            type: Boolean,
+            observer: 'setShowClear',
+        }, clearable: {
+            type: Boolean,
+            observer: 'setShowClear',
+        }, clearTrigger: {
+            type: String,
+            value: 'focus',
+        }, border: {
+            type: Boolean,
+            value: true,
+        }, titleWidth: {
+            type: String,
+            value: '6.2em',
+        }, clearIcon: {
+            type: String,
+            value: 'clear',
+        }, extraEventParams: {
+            type: Boolean,
+            value: false,
+        } }),
+    data: {
+        focused: false,
+        innerValue: '',
+        showClear: false,
     },
-    onFocus(event) {
-      this.focused = true;
-      this.setShowClear();
-      this.$emit('focus', event.detail);
+    created() {
+        this.value = this.data.value;
+        this.setData({ innerValue: this.value });
     },
-    onBlur(event) {
-      this.focused = false;
-      this.setShowClear();
-      this.$emit('blur', event.detail);
+    methods: {
+        onInput(event) {
+            const { value = '' } = event.detail || {};
+            this.value = value;
+            this.setShowClear();
+            this.emitChange(event.detail);
+        },
+        onFocus(event) {
+            this.focused = true;
+            this.setShowClear();
+            this.$emit('focus', event.detail);
+        },
+        onBlur(event) {
+            this.focused = false;
+            this.setShowClear();
+            this.$emit('blur', event.detail);
+        },
+        onClickIcon() {
+            this.$emit('click-icon');
+        },
+        onClickInput(event) {
+            this.$emit('click-input', event.detail);
+        },
+        onClear() {
+            this.setData({ innerValue: '' });
+            this.value = '';
+            this.setShowClear();
+            nextTick(() => {
+                this.emitChange({ value: '' });
+                this.$emit('clear', '');
+            });
+        },
+        onConfirm(event) {
+            const { value = '' } = event.detail || {};
+            this.value = value;
+            this.setShowClear();
+            this.$emit('confirm', value);
+        },
+        setValue(value) {
+            this.value = value;
+            this.setShowClear();
+            if (value === '') {
+                this.setData({ innerValue: '' });
+            }
+            this.emitChange({ value });
+        },
+        onLineChange(event) {
+            this.$emit('linechange', event.detail);
+        },
+        onKeyboardHeightChange(event) {
+            this.$emit('keyboardheightchange', event.detail);
+        },
+        emitChange(detail) {
+            const { extraEventParams } = this.data;
+            this.setData({ value: detail.value });
+            nextTick(() => {
+                const data = extraEventParams ? detail : detail.value;
+                this.$emit('input', data);
+                this.$emit('change', data);
+            });
+        },
+        setShowClear() {
+            const { clearable, readonly, clearTrigger } = this.data;
+            const { focused, value } = this;
+            let showClear = false;
+            if (clearable && !readonly) {
+                const hasValue = !!value;
+                const trigger = clearTrigger === 'always' || (clearTrigger === 'focus' && focused);
+                showClear = hasValue && trigger;
+            }
+            this.setData({ showClear });
+        },
+        noop() { },
     },
-    onClickIcon() {
-      this.$emit('click-icon');
-    },
-    onClickInput(event) {
-      this.$emit('click-input', event.detail);
-    },
-    onClear() {
-      this.setData({ innerValue: '' });
-      this.value = '';
-      this.setShowClear();
-      nextTick(() => {
-        this.emitChange();
-        this.$emit('clear', '');
-      });
-    },
-    onConfirm(event) {
-      const { value = '' } = event.detail || {};
-      this.value = value;
-      this.setShowClear();
-      this.$emit('confirm', value);
-    },
-    setValue(value) {
-      this.value = value;
-      this.setShowClear();
-      if (value === '') {
-        this.setData({ innerValue: '' });
-      }
-      this.emitChange();
-    },
-    onLineChange(event) {
-      this.$emit('linechange', event.detail);
-    },
-    onKeyboardHeightChange(event) {
-      this.$emit('keyboardheightchange', event.detail);
-    },
-    emitChange() {
-      this.setData({ value: this.value });
-      nextTick(() => {
-        this.$emit('input', this.value);
-        this.$emit('change', this.value);
-      });
-    },
-    setShowClear() {
-      const { clearable, readonly } = this.data;
-      const { focused, value } = this;
-      this.setData({
-        showClear: !!clearable && !!focused && !!value && !readonly,
-      });
-    },
-    noop() {},
-  },
 });

+ 3 - 3
wxcomponents/vant/dist/field/index.wxml

@@ -24,12 +24,12 @@
     <view class="{{ utils.bem('field__control', [inputAlign, 'custom']) }}" bindtap="onClickInput">
       <slot name="input" />
     </view>
-    <include wx:if="{{ type === 'textarea' }}" src="textarea.wxml" />
-    <include wx:else src="input.wxml" />
+    <include wx:if="{{ type === 'textarea' }}" src="./textarea.wxml" />
+    <include wx:else src="./input.wxml" />
 
     <van-icon
       wx:if="{{ showClear }}"
-      name="clear"
+      name="{{ clearIcon }}"
       class="van-field__clear-root van-field__icon-root"
       catch:touchstart="onClear"
     />

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
wxcomponents/vant/dist/field/index.wxss


+ 1 - 0
wxcomponents/vant/dist/field/input.wxml

@@ -17,6 +17,7 @@
   adjust-position="{{ adjustPosition }}"
   selection-end="{{ selectionEnd }}"
   selection-start="{{ selectionStart }}"
+  always-embed="{{ alwaysEmbed }}"
   password="{{ password || type === 'password' }}"
   bindinput="onInput"
   bindtap="onClickInput"

+ 58 - 57
wxcomponents/vant/dist/field/props.js

@@ -1,63 +1,64 @@
 export const commonProps = {
-  value: {
-    type: String,
-    observer(value) {
-      if (value !== this.value) {
-        this.setData({ innerValue: value });
-        this.value = value;
-      }
-    },
-  },
-  placeholder: String,
-  placeholderStyle: String,
-  placeholderClass: String,
-  disabled: Boolean,
-  maxlength: {
-    type: Number,
-    value: -1,
-  },
-  cursorSpacing: {
-    type: Number,
-    value: 50,
-  },
-  autoFocus: Boolean,
-  focus: Boolean,
-  cursor: {
-    type: Number,
-    value: -1,
-  },
-  selectionStart: {
-    type: Number,
-    value: -1,
-  },
-  selectionEnd: {
-    type: Number,
-    value: -1,
-  },
-  adjustPosition: {
-    type: Boolean,
-    value: true,
-  },
-  holdKeyboard: Boolean,
+    value: {
+        type: String,
+        observer(value) {
+            if (value !== this.value) {
+                this.setData({ innerValue: value });
+                this.value = value;
+            }
+        },
+    },
+    placeholder: String,
+    placeholderStyle: String,
+    placeholderClass: String,
+    disabled: Boolean,
+    maxlength: {
+        type: Number,
+        value: -1,
+    },
+    cursorSpacing: {
+        type: Number,
+        value: 50,
+    },
+    autoFocus: Boolean,
+    focus: Boolean,
+    cursor: {
+        type: Number,
+        value: -1,
+    },
+    selectionStart: {
+        type: Number,
+        value: -1,
+    },
+    selectionEnd: {
+        type: Number,
+        value: -1,
+    },
+    adjustPosition: {
+        type: Boolean,
+        value: true,
+    },
+    holdKeyboard: Boolean,
 };
 export const inputProps = {
-  type: {
-    type: String,
-    value: 'text',
-  },
-  password: Boolean,
-  confirmType: String,
-  confirmHold: Boolean,
+    type: {
+        type: String,
+        value: 'text',
+    },
+    password: Boolean,
+    confirmType: String,
+    confirmHold: Boolean,
+    alwaysEmbed: Boolean,
 };
 export const textareaProps = {
-  autoHeight: Boolean,
-  fixed: Boolean,
-  showConfirmBar: {
-    type: Boolean,
-    value: true,
-  },
-  disableDefaultPadding: {
-    type: Boolean,
-    value: true,
-  },
+    autoHeight: Boolean,
+    fixed: Boolean,
+    showConfirmBar: {
+        type: Boolean,
+        value: true,
+    },
+    disableDefaultPadding: {
+        type: Boolean,
+        value: true,
+    },
 };

+ 28 - 28
wxcomponents/vant/dist/goods-action-button/index.js

@@ -3,34 +3,34 @@ import { useParent } from '../common/relation';
 import { button } from '../mixins/button';
 import { link } from '../mixins/link';
 VantComponent({
-  mixins: [link, button],
-  relation: useParent('goods-action'),
-  props: {
-    text: String,
-    color: String,
-    loading: Boolean,
-    disabled: Boolean,
-    plain: Boolean,
-    type: {
-      type: String,
-      value: 'danger',
+    mixins: [link, button],
+    relation: useParent('goods-action'),
+    props: {
+        text: String,
+        color: String,
+        loading: Boolean,
+        disabled: Boolean,
+        plain: Boolean,
+        type: {
+            type: String,
+            value: 'danger',
+        },
     },
-  },
-  methods: {
-    onClick(event) {
-      this.$emit('click', event.detail);
-      this.jumpLink();
+    methods: {
+        onClick(event) {
+            this.$emit('click', event.detail);
+            this.jumpLink();
+        },
+        updateStyle() {
+            if (this.parent == null) {
+                return;
+            }
+            const { index } = this;
+            const { children = [] } = this.parent;
+            this.setData({
+                isFirst: index === 0,
+                isLast: index === children.length - 1,
+            });
+        },
     },
-    updateStyle() {
-      if (this.parent == null) {
-        return;
-      }
-      const { index } = this;
-      const { children = [] } = this.parent;
-      this.setData({
-        isFirst: index === 0,
-        isLast: index === children.length - 1,
-      });
-    },
-  },
 });

+ 1 - 1
wxcomponents/vant/dist/goods-action-button/index.wxss

@@ -1 +1 @@
-@import '../common/index.wxss';:host{-webkit-flex:1;flex:1}.van-goods-action-button{--button-warning-background-color:linear-gradient(90deg,#ffd01e,#ff8917);--button-warning-background-color:var(--goods-action-button-warning-color,linear-gradient(90deg,#ffd01e,#ff8917));--button-danger-background-color:linear-gradient(90deg,#ff6034,#ee0a24);--button-danger-background-color:var(--goods-action-button-danger-color,linear-gradient(90deg,#ff6034,#ee0a24));--button-default-height:40px;--button-default-height:var(--goods-action-button-height,40px);--button-line-height:20px;--button-line-height:var(--goods-action-button-line-height,20px);--button-plain-background-color:#fff;--button-plain-background-color:var(--goods-action-button-plain-color,#fff);display:block;--button-border-width:0}.van-goods-action-button--first{margin-left:5px;--button-border-radius:20px 0 0 20px;--button-border-radius:var(--goods-action-button-border-radius,20px) 0 0 var(--goods-action-button-border-radius,20px)}.van-goods-action-button--last{margin-right:5px;--button-border-radius:0 20px 20px 0;--button-border-radius:0 var(--goods-action-button-border-radius,20px) var(--goods-action-button-border-radius,20px) 0}.van-goods-action-button--first.van-goods-action-button--last{--button-border-radius:20px;--button-border-radius:var(--goods-action-button-border-radius,20px)}.van-goods-action-button--plain{--button-border-width:1px}.van-goods-action-button__inner{width:100%;font-weight:500!important;font-weight:var(--font-weight-bold,500)!important}@media (max-width:321px){.van-goods-action-button{font-size:13px}}
+@import '../common/index.wxss';:host{flex:1}.van-goods-action-button{--button-warning-background-color:var(--goods-action-button-warning-color,linear-gradient(to right,#ffd01e,#ff8917));--button-danger-background-color:var(--goods-action-button-danger-color,linear-gradient(to right,#ff6034,#ee0a24));--button-default-height:var(--goods-action-button-height,40px);--button-line-height:var(--goods-action-button-line-height,20px);--button-plain-background-color:var(--goods-action-button-plain-color,#fff);--button-border-width:0;display:block}.van-goods-action-button--first{--button-border-radius:999px 0 0 var(--goods-action-button-border-radius,999px);margin-left:5px}.van-goods-action-button--last{--button-border-radius:0 999px var(--goods-action-button-border-radius,999px) 0;margin-right:5px}.van-goods-action-button--first.van-goods-action-button--last{--button-border-radius:var(--goods-action-button-border-radius,999px)}.van-goods-action-button--plain{--button-border-width:1px}.van-goods-action-button__inner{font-weight:var(--font-weight-bold,500)!important;width:100%}@media (max-width:321px){.van-goods-action-button{font-size:13px}}

+ 20 - 15
wxcomponents/vant/dist/goods-action-icon/index.js

@@ -2,20 +2,25 @@ import { VantComponent } from '../common/component';
 import { button } from '../mixins/button';
 import { link } from '../mixins/link';
 VantComponent({
-  classes: ['icon-class', 'text-class'],
-  mixins: [link, button],
-  props: {
-    text: String,
-    dot: Boolean,
-    info: String,
-    icon: String,
-    disabled: Boolean,
-    loading: Boolean,
-  },
-  methods: {
-    onClick(event) {
-      this.$emit('click', event.detail);
-      this.jumpLink();
+    classes: ['icon-class', 'text-class'],
+    mixins: [link, button],
+    props: {
+        text: String,
+        dot: Boolean,
+        info: String,
+        icon: String,
+        color: String,
+        classPrefix: {
+            type: String,
+            value: 'van-icon',
+        },
+        disabled: Boolean,
+        loading: Boolean,
+    },
+    methods: {
+        onClick(event) {
+            this.$emit('click', event.detail);
+            this.jumpLink();
+        },
     },
-  },
 });

+ 2 - 0
wxcomponents/vant/dist/goods-action-icon/index.wxml

@@ -27,6 +27,8 @@
     name="{{ icon }}"
     dot="{{ dot }}"
     info="{{ info }}"
+    color="{{ color }}"
+    class-prefix="{{ classPrefix }}"
     class="van-goods-action-icon__icon"
     custom-class="icon-class"
   />

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác