Browse Source

更换为新的vant微信组件库

zhangyujun 2 years ago
parent
commit
465f1f4d4e
100 changed files with 2648 additions and 4208 deletions
  1. 273 200
      src/otherPages/buyVip/index.vue
  2. 0 5
      src/pages/carVideo/videoList.vue
  3. 1 1
      src/wxcomponents/vant/action-sheet/index.d.ts
  4. 70 62
      src/wxcomponents/vant/action-sheet/index.js
  5. 8 8
      src/wxcomponents/vant/action-sheet/index.json
  6. 0 101
      src/wxcomponents/vant/action-sheet/index.vue
  7. 69 69
      src/wxcomponents/vant/action-sheet/index.wxml
  8. 0 0
      src/wxcomponents/vant/action-sheet/index.wxss
  9. 1 1
      src/wxcomponents/vant/area/index.d.ts
  10. 220 232
      src/wxcomponents/vant/area/index.js
  11. 6 6
      src/wxcomponents/vant/area/index.json
  12. 0 246
      src/wxcomponents/vant/area/index.vue
  13. 20 20
      src/wxcomponents/vant/area/index.wxml
  14. 8 8
      src/wxcomponents/vant/area/index.wxs
  15. 1 1
      src/wxcomponents/vant/button/index.d.ts
  16. 64 58
      src/wxcomponents/vant/button/index.js
  17. 7 7
      src/wxcomponents/vant/button/index.json
  18. 0 84
      src/wxcomponents/vant/button/index.vue
  19. 53 53
      src/wxcomponents/vant/button/index.wxml
  20. 39 39
      src/wxcomponents/vant/button/index.wxs
  21. 0 0
      src/wxcomponents/vant/button/index.wxss
  22. 0 37
      src/wxcomponents/vant/calendar/calendar.vue
  23. 68 65
      src/wxcomponents/vant/calendar/calendar.wxml
  24. 1 1
      src/wxcomponents/vant/calendar/components/header/index.d.ts
  25. 37 16
      src/wxcomponents/vant/calendar/components/header/index.js
  26. 3 3
      src/wxcomponents/vant/calendar/components/header/index.json
  27. 0 43
      src/wxcomponents/vant/calendar/components/header/index.vue
  28. 16 16
      src/wxcomponents/vant/calendar/components/header/index.wxml
  29. 1 1
      src/wxcomponents/vant/calendar/components/header/index.wxss
  30. 6 1
      src/wxcomponents/vant/calendar/components/month/index.d.ts
  31. 154 157
      src/wxcomponents/vant/calendar/components/month/index.js
  32. 3 3
      src/wxcomponents/vant/calendar/components/month/index.json
  33. 0 195
      src/wxcomponents/vant/calendar/components/month/index.vue
  34. 39 39
      src/wxcomponents/vant/calendar/components/month/index.wxml
  35. 71 67
      src/wxcomponents/vant/calendar/components/month/index.wxs
  36. 0 0
      src/wxcomponents/vant/calendar/components/month/index.wxss
  37. 1 1
      src/wxcomponents/vant/calendar/index.d.ts
  38. 337 297
      src/wxcomponents/vant/calendar/index.js
  39. 10 10
      src/wxcomponents/vant/calendar/index.json
  40. 0 325
      src/wxcomponents/vant/calendar/index.vue
  41. 25 25
      src/wxcomponents/vant/calendar/index.wxml
  42. 37 37
      src/wxcomponents/vant/calendar/index.wxs
  43. 1 1
      src/wxcomponents/vant/calendar/index.wxss
  44. 12 17
      src/wxcomponents/vant/calendar/utils.d.ts
  45. 83 78
      src/wxcomponents/vant/calendar/utils.js
  46. 25 25
      src/wxcomponents/vant/calendar/utils.wxs
  47. 1 1
      src/wxcomponents/vant/card/index.d.ts
  48. 49 49
      src/wxcomponents/vant/card/index.js
  49. 6 6
      src/wxcomponents/vant/card/index.json
  50. 0 103
      src/wxcomponents/vant/card/index.vue
  51. 56 56
      src/wxcomponents/vant/card/index.wxml
  52. 0 0
      src/wxcomponents/vant/card/index.wxss
  53. 1 1
      src/wxcomponents/vant/cell-group/index.d.ts
  54. 11 10
      src/wxcomponents/vant/cell-group/index.js
  55. 3 3
      src/wxcomponents/vant/cell-group/index.json
  56. 0 27
      src/wxcomponents/vant/cell-group/index.vue
  57. 11 9
      src/wxcomponents/vant/cell-group/index.wxml
  58. 1 1
      src/wxcomponents/vant/cell-group/index.wxss
  59. 1 1
      src/wxcomponents/vant/cell/index.d.ts
  60. 38 38
      src/wxcomponents/vant/cell/index.js
  61. 6 6
      src/wxcomponents/vant/cell/index.json
  62. 0 73
      src/wxcomponents/vant/cell/index.vue
  63. 47 46
      src/wxcomponents/vant/cell/index.wxml
  64. 17 17
      src/wxcomponents/vant/cell/index.wxs
  65. 0 0
      src/wxcomponents/vant/cell/index.wxss
  66. 1 1
      src/wxcomponents/vant/checkbox-group/index.d.ts
  67. 36 31
      src/wxcomponents/vant/checkbox-group/index.js
  68. 3 3
      src/wxcomponents/vant/checkbox-group/index.json
  69. 0 43
      src/wxcomponents/vant/checkbox-group/index.vue
  70. 5 1
      src/wxcomponents/vant/checkbox-group/index.wxml
  71. 1 1
      src/wxcomponents/vant/checkbox-group/index.wxss
  72. 1 1
      src/wxcomponents/vant/checkbox/index.d.ts
  73. 77 74
      src/wxcomponents/vant/checkbox/index.js
  74. 6 6
      src/wxcomponents/vant/checkbox/index.json
  75. 0 99
      src/wxcomponents/vant/checkbox/index.vue
  76. 31 31
      src/wxcomponents/vant/checkbox/index.wxml
  77. 20 20
      src/wxcomponents/vant/checkbox/index.wxs
  78. 1 1
      src/wxcomponents/vant/checkbox/index.wxss
  79. 4 6
      src/wxcomponents/vant/circle/canvas.d.ts
  80. 43 43
      src/wxcomponents/vant/circle/canvas.js
  81. 1 1
      src/wxcomponents/vant/circle/index.d.ts
  82. 193 186
      src/wxcomponents/vant/circle/index.js
  83. 3 3
      src/wxcomponents/vant/circle/index.json
  84. 0 204
      src/wxcomponents/vant/circle/index.vue
  85. 9 9
      src/wxcomponents/vant/circle/index.wxml
  86. 1 1
      src/wxcomponents/vant/circle/index.wxss
  87. 1 1
      src/wxcomponents/vant/col/index.d.ts
  88. 9 9
      src/wxcomponents/vant/col/index.js
  89. 3 3
      src/wxcomponents/vant/col/index.json
  90. 0 23
      src/wxcomponents/vant/col/index.vue
  91. 9 9
      src/wxcomponents/vant/col/index.wxml
  92. 18 18
      src/wxcomponents/vant/col/index.wxs
  93. 1 1
      src/wxcomponents/vant/col/index.wxss
  94. 2 6
      src/wxcomponents/vant/collapse-item/animate.d.ts
  95. 39 70
      src/wxcomponents/vant/collapse-item/animate.js
  96. 1 1
      src/wxcomponents/vant/collapse-item/index.d.ts
  97. 60 59
      src/wxcomponents/vant/collapse-item/index.js
  98. 6 6
      src/wxcomponents/vant/collapse-item/index.json
  99. 0 85
      src/wxcomponents/vant/collapse-item/index.vue
  100. 45 44
      src/wxcomponents/vant/collapse-item/index.wxml

+ 273 - 200
src/otherPages/buyVip/index.vue

@@ -1,130 +1,135 @@
 <template>
   <view>
-    <userHead></userHead>
-    <view class="content">
-      <view class="vip">
-        <view
-          class="vip-item"
-          style="background: #e1e9f5; border: 2rpx solid #498ef5"
-          @click="
-            () => {
-              vipCodeVisible = true;
-            }
-
-          "
-
-        >
-          <view class="vip-item-icon"> <image :src="jihuoma"></image> </view>
-          <text style="font-size: 26rpx; color: #498ef5; margin-left: 18rpx"
-            >激活码激活</text
-          >
-        </view>
-        <!-- #ifdef MP-TOUTIAO -->
-        <view
-          v-if="ios_vip_open||!isIos"
-          class="vip-item"
-          style="background: #feeaee; border: 2px solid #fe2c55"
-        >
-          <view>
-            <view @click="buy" style="display: flex; align-items: center">
-              <view class="vip-item-icon"> <image :src="douyin"></image> </view>
-
-              <text style="font-size: 26rpx; color: #fe2c55; margin-left: 18rpx"
-                >抖音充值激活\n
-                <text
-                  ><text style="font-size: 36rpx">{{ price }}元</text>
-                  <text
-                    style="margin-left: 12rpx; text-decoration: line-through"
-                    >{{ orginPrice }}元</text
-                  ></text
-                >
-              </text>
-            </view>
-            <!-- <view style="display: flex; align-items: center;margin-top:18rpx;">
-              <view>
-                <text style="color: #ff4d53; font-size: 44rpx">
-                  {{ price }}<text style="font-size: 26rpx;margin-right:14rpx;">元</text></text
-                >
-                <text style="color: #ff4d53; font-size: 26rpx">
-                  {{ orginPrice }}元</text
-                >
-              </view>
-            </view> -->
-          </view>
-        </view>
-        <!-- #endif -->
-      </view>
-    </view>
-    <van-overlay :show="vipCodeVisible">
-      <view class="popUps">
-        <view class="content">
-          <view
+    <m-nav-bar title="开通会员" :transparent="true" />
+    <div v-if="!isIos" class="buyvip-box">
+      <img class="top-img" :src="topImg" alt="头部背景" />
+      <div class="info-warn">您还未开通完整版系统,付费购买后享受更多功能</div>
+      <div class="item-box">
+        <van-cell class="cell-title" title="选择充值方式" />
+        <div class="radio-box">
+          <div
+            v-for="(item, index) in goodsList"
+            class="radio-item"
+            :class="{ select: index === goodsIndex }"
+            :key="index"
             @click="
               () => {
-                vipCodeVisible = false;
+                goodsIndex = index;
               }
             "
-            class="close"
-          >
-            <van-icon name="cross" size="24px" />
-          </view>
-
-          <view
-            style="
-              width: 100%;
-              text-align: center;
-              font-size: 30rpx;
-              margin-top: 20rpx;
-            "
-            >提示</view
-          >
-          <view
-            style="
-              width: 100%;
-              text-align: center;
-              color: #5c6066;
-              font-size: 26rpx;
-              margin-top: 40rpx;
-            "
-            >您还未开通系统,请输入激活码开通!</view
           >
-          <input
-            v-model="vipCode"
-            placeholder-style="font-size:13px"
-            class="content-input"
-            placeholder="请输入激活码"
-          />
-          <view @click="sendVipCode" class="content-open"> 立即开通 </view>
-        </view>
-      </view>
-    </van-overlay>
+            <span>{{ item.dictLabel }}</span>
+            <div v-if="index === 1" class="radio-item-recom">推荐</div>
+            <span>¥{{ item.dictValue.split(",")[0] }}</span>
+            <span>原价{{ item.dictValue.split(",")[1] }}元</span>
+          </div>
+        </div>
+      </div>
+      <div class="item-box">
+        <van-cell class="cell-title" title="使用说明" />
+        <div class="readme">
+          <span>1. 有效期内拥有VIP权限.</span>
+          <span>2. 过期后可以使用免费用户的权限.</span>
+          <span>3. 可以续费.</span>
+        </div>
+      </div>
+      <div class="button-box">
+        <div v-if="!isIos" class="button" @click="buy">立即开通</div>
+        <div v-if="isIos && !ios_vip_open" class="button_gray">ios不支持</div>
+        <div v-if="isIos && ios_vip_open" class="button" @click="buy">
+          立即开通
+        </div>
+      </div>
+      <div style="height: 60px"></div>
+    </div>
+    <view class="" style="width: 100%; text-align: center;display:flex;flex-wrap:wrap" v-if="isIos">
+      <input
+        class="active-input"
+        v-model="activeCode"
+        auto-focus
+        placeholder="请输入激活码"
+      />
+      <button class="active-sure">确定</button>
+      <view class="" style="color:#b6b6b6;text-align:center;width:100%;margin-top:15rpx;">如有疑问,请联系客服</view>
+    </view>
   </view>
 </template>
+
 <script>
+import topImg from "./top-background.png";
 import api from "@/api/index";
-import userHead from "./component/userHead.vue";
-import douyin from "@/assets/img/douyin.png";
-import jihuoma from "@/assets/img/jihuoma.png";
 export default {
+
   data() {
     return {
-      douyin,
-      isIos:false,
+      isIos: false,
+      activeCode: "",
       ios_vip_open: 0,
-      jihuoma,
-      price: 0,
-      orginPrice: 0,
-      vipCodeVisible: false,
-      vipCode: "",
+      goodsList: [
+        {
+          searchValue: null,
+          createBy: "admin",
+          createTime: "2021-11-18 18:01:26",
+          updateTime: null,
+          updateBy: null,
+          remark: null,
+          params: {},
+          dictCode: 29,
+          dictSort: 0,
+          dictLabel: "一个月",
+          dictValue: "38,48,30",
+          dictType: "vip_type_price",
+          cssClass: null,
+          listClass: null,
+          isDefault: "N",
+          status: "0",
+          default: false,
+        },
+        {
+          searchValue: null,
+          createBy: "admin",
+          createTime: "2021-11-18 18:01:39",
+          updateTime: null,
+          updateBy: null,
+          remark: null,
+          params: {},
+          dictCode: 30,
+          dictSort: 0,
+          dictLabel: "六个月",
+          dictValue: "68,98,180",
+          dictType: "vip_type_price",
+          cssClass: null,
+          listClass: null,
+          isDefault: "N",
+          status: "0",
+          default: false,
+        },
+        {
+          searchValue: null,
+          createBy: "admin",
+          createTime: "2021-11-18 18:01:50",
+          updateTime: null,
+          updateBy: null,
+          remark: null,
+          params: {},
+          dictCode: 31,
+          dictSort: 0,
+          dictLabel: "两年",
+          dictValue: "98,128,730",
+          dictType: "vip_type_price",
+          cssClass: null,
+          listClass: null,
+          isDefault: "N",
+          status: "0",
+          default: false,
+        },
+      ],
+      goodsIndex: 1,
+      topImg,
     };
   },
-  components: {
-    userHead,
-  },
   methods: {
     buy(e) {
-
-      //#ifdef MP-WEIXIN
       api.buy
         .studentXcxWxPrepareOrder({
           dictCode: this.goodsList[this.goodsIndex].dictCode,
@@ -134,31 +139,6 @@ export default {
             ...res.data,
           });
         });
-      //#endif
-      //#ifdef MP-TOUTIAO
-      api.buy.studentTtPrepareOrder().then((res) => {
-        uni.pay({
-          orderInfo: res.data,
-          service: 5,
-          success(res) {},
-        });
-        this.$store.dispatch("GetInfo");
-      });
-
-      //#endif
-    },
-    sendVipCode() {
-      api.code
-        .studentVipCode({
-          vipCode: this.vipCode,
-        })
-        .then((res) => {
-          uni.showToast({
-            title: res.msg,
-            icon: "none",
-          });
-          this.$store.dispatch("GetInfo");
-        });
     },
   },
   mounted() {
@@ -168,93 +148,186 @@ export default {
       this.ios_vip_open = Number(res.data);
     });
     this.isIos = systemInfo.platform == "ios";
-    //#ifdef MP-WEIXIN
+    // this.isIos = true;
     api.buy.systemDictDataType("vip_type_price").then((res) => {
       this.goodsList = res.data;
     });
-    //#endif
-    //#ifdef MP-TOUTIAO
-    this.goodsIndex = 0;
-    api.buy.systemConfigConfigKey("vip_price").then((res) => {
-      this.price = res.data;
-    });
-    api.buy.systemConfigConfigKey("vip_price_original").then((res) => {
-      this.orginPrice = res.data;
-    });
-    //#endif
   },
 };
+// import { getVipPrice, prepareOrder } from "@/api";
+// const goodsIndex = ref(1);
+// const goodsList = ref<any[]>([]);
+// getVipPrice().then((res) => {
+//   goodsList.value = res.data;
+// });
+// const buy = () => {
+//   prepareOrder(goodsList.value[goodsIndex.value].dictCode);
+// };
 </script>
 
 <style scoped lang="scss">
-.popUps {
+.active-input {
+  background: #fff;
+  overflow: hidden;
+  width: 500rpx;
+  height: 70rpx;
+  line-height: 70rpx;
+}
+.active-sure{
+  margin: 0 auto;
+  width: 200rpx;
+  height: 70rpx;
+  line-height: 70rpx;
+  background: #498ef5;
+  color: #fff;
+}
+.buyvip-box {
+  width: 100%;
+  margin-top: -50px;
+  min-height: 100vh;
   display: flex;
-  justify-content: center;
-  align-content: center;
   align-items: center;
-  width: 100%;
-  height: 100vh;
-
-  .content {
-    width: 590rpx;
-    height: 480rpx;
-    background: #fff;
-    border-radius: 20rpx;
+  flex-direction: column;
+  background: #ffdda6;
+  .top-img {
+    width: 100%;
+  }
+  .info-warn {
+    width: 345px;
+    height: 49px;
+    background: #ffffff;
+    border-radius: 10px;
     display: flex;
     justify-content: center;
-    align-content: flex-start;
-    align-items: flex-start;
-    flex-wrap: wrap;
-    position: relative;
-    .close {
-      position: absolute;
-      right: 30rpx;
+    align-items: center;
+    font-size: 13px;
+    font-family: PingFang SC;
+    font-weight: 400;
+    color: #91540f;
+    margin-top: -70px;
+    margin-bottom: 10px;
+  }
+  .item-box {
+    width: 345px;
+    background: #ffffff;
+    border-radius: 10px;
+    padding: 15px;
+    margin-bottom: 10px;
+    .cell-title {
+      font-size: 16px;
+      font-family: PingFang SC;
+      font-weight: bold;
+      line-height: 20px;
+      color: #0a1a33;
+      margin-left: -10px;
+      margin-bottom: 15px;
     }
-    .content-input {
-      width: 500rpx;
-      height: 60rpx;
-      background: rgba(242, 243, 245, 0.39);
-      border: 2rpx solid #e8e8e8;
-      opacity: 1;
-      border-radius: 30rpx;
-      padding-left: 15rpx;
-      margin-top: 40rpx;
+  }
+  .readme {
+    display: flex;
+    flex-direction: column;
+    font-size: 13px;
+    line-height: 20px;
+    span {
+      margin-bottom: 5px;
     }
-    .content-open {
-      width: 200rpx;
-      height: 60rpx;
-      font-size: 26rpx;
-      background: #498ef5;
-      border-radius: 30rpx;
-      margin-top: 40rpx;
-      color: #fff;
-      line-height: 60rpx;
-      text-align: center;
+  }
+  .radio-box {
+    display: flex;
+    justify-content: space-around;
+    align-items: center;
+    .select {
+      background: #fcf1de !important;
+    }
+    .radio-item {
+      position: relative;
+      .radio-item-recom {
+        position: absolute;
+        top: 0;
+        width: 30px;
+        height: 15px;
+        line-height: 15px;
+        font-size: 10px;
+        background: #ff4d53;
+        border-radius: 0%;
+        right: 0;
+        transform: translate(15%, -30%);
+        border-radius: 5px 0px 5px 0px;
+        color: #fff;
+      }
+    }
+    div {
+      width: 98px;
+      font-size: 20px;
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: space-around;
+      background: #ffffff;
+      border: 1px solid #faca93;
+      height: 124px;
+      border-radius: 5px;
+      span {
+        font-family: PingFang SC;
+        &:nth-of-type(1) {
+          font-size: 13px;
+          font-weight: bold;
+          color: #91540f;
+        }
+        &:nth-of-type(2) {
+          font-size: 30px;
+          font-weight: bold;
+          color: #ff4d53;
+        }
+        &:nth-of-type(3) {
+          font-size: 11px;
+          font-weight: 400;
+          color: #8a9099;
+          text-decoration: line-through;
+        }
+      }
     }
   }
-}
-.content {
-  padding-top: 20rpx;
-  padding-left: 30rpx;
-  padding-right: 30rpx;
-  .vip {
+  .button-box {
+    position: fixed;
+    background-color: #ffffff;
+    bottom: 0;
+    width: 375px;
+    height: 60px;
     display: flex;
-    justify-content: space-between;
-    .vip-item {
-      width: 334rpx;
-      height: 200rpx;
+    justify-content: center;
+    align-items: center;
+    .button_gray {
+      width: 152px;
+      height: 40px;
+      background: #b1b1b1;
+      border-radius: 30px;
       display: flex;
       justify-content: center;
-      align-content: center;
       align-items: center;
-      border-radius: 20rpx;
-      .vip-item-icon {
-        width: 42rpx;
-        height: 48rpx;
-        > image {
-          width: 100%;
-          height: 100%;
-        }
+      font-size: 15px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: #fff;
+      letter-spacing: 0px;
+    }
+    .button {
+      width: 152px;
+      height: 40px;
+      background: #faca93;
+      border-radius: 30px;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      font-size: 15px;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: #91540f;
+      letter-spacing: 0px;
+
+      &:active {
+        background-color: red;
+     
       }
     }
   }

+ 0 - 5
src/pages/carVideo/videoList.vue

@@ -45,11 +45,6 @@ export default {
   async onReady() {
 
     await this.$store.dispatch("Login");
-    uni.showToast({
-      title: "你结束了登陆",
-	  duration:2500
-    });
-
     await this.$store.dispatch("GetInfo");
   },
   data: () => ({

+ 1 - 1
src/wxcomponents/vant/action-sheet/index.d.ts

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

+ 70 - 62
src/wxcomponents/vant/action-sheet/index.js

@@ -1,62 +1,70 @@
-import { VantComponent } from '../common/component';
-import { button } from '../mixins/button';
-import { openType } from '../mixins/open-type';
-VantComponent({
-  mixins: [button, openType],
-  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,
-    },
-  },
-  methods: {
-    onSelect(event) {
-      const { index } = event.currentTarget.dataset;
-      const item = this.data.actions[index];
-      if (item && !item.disabled && !item.loading) {
-        this.$emit('select', item);
-        if (this.data.closeOnClickAction) {
-          this.onClose();
-        }
-      }
-    },
-    onCancel() {
-      this.$emit('cancel');
-    },
-    onClose() {
-      this.$emit('close');
-    },
-    onClickOverlay() {
-      this.$emit('click-overlay');
-      this.onClose();
-    },
-  },
-});
+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,
+        },
+        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,
+        },
+    },
+    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();
+        },
+    },
+});

+ 8 - 8
src/wxcomponents/vant/action-sheet/index.json

@@ -1,8 +1,8 @@
-{
-  "component": true,
-  "usingComponents": {
-    "van-icon": "../icon/index",
-    "van-popup": "../popup/index",
-    "van-loading": "../loading/index"
-  }
-}
+{
+  "component": true,
+  "usingComponents": {
+    "van-icon": "../icon/index",
+    "van-popup": "../popup/index",
+    "van-loading": "../loading/index"
+  }
+}

File diff suppressed because it is too large
+ 0 - 101
src/wxcomponents/vant/action-sheet/index.vue


+ 69 - 69
src/wxcomponents/vant/action-sheet/index.wxml

@@ -1,69 +1,69 @@
-<wxs src="../wxs/utils.wxs" module="utils" />
-
-<van-popup
-  show="{{ show }}"
-  position="bottom"
-  round="{{ round }}"
-  z-index="{{ zIndex }}"
-  overlay="{{ overlay }}"
-  custom-class="van-action-sheet"
-  safe-area-inset-bottom="{{ safeAreaInsetBottom }}"
-  close-on-click-overlay="{{ closeOnClickOverlay }}"
-  bind:close="onClickOverlay"
->
-  <view wx:if="{{ title }}" class="van-action-sheet__header">
-    {{ title }}
-    <van-icon
-      name="cross"
-      custom-class="van-action-sheet__close"
-      bind:click="onClose"
-    />
-  </view>
-  <view wx:if="{{ description }}" class="van-action-sheet__description van-hairline--bottom">
-    {{ description }}
-  </view>
-  <view wx:if="{{ actions && actions.length }}">
-    <!-- button外包一层view,防止actions动态变化,导致渲染时button被打散 -->
-    <button
-      wx:for="{{ actions }}"
-      wx:key="index"
-      open-type="{{ item.openType }}"
-      style="{{ item.color ? 'color: ' + item.color : '' }}"
-      class="{{ utils.bem('action-sheet__item', { disabled: item.disabled || item.loading }) }} {{ item.className || '' }}"
-      hover-class="van-action-sheet__item--hover"
-      data-index="{{ index }}"
-      bind:tap="onSelect"
-      bindgetuserinfo="bindGetUserInfo"
-      bindcontact="bindContact"
-      bindgetphonenumber="bindGetPhoneNumber"
-      binderror="bindError"
-      bindlaunchapp="bindLaunchApp"
-      bindopensetting="bindOpenSetting"
-      lang="{{ lang }}"
-      session-from="{{ sessionFrom }}"
-      send-message-title="{{ sendMessageTitle }}"
-      send-message-path="{{ sendMessagePath }}"
-      send-message-img="{{ sendMessageImg }}"
-      show-message-card="{{ showMessageCard }}"
-      app-parameter="{{ appParameter }}"
-    >
-      <block wx:if="{{ !item.loading }}">
-        {{ item.name }}
-        <view wx:if="{{ item.subname }}" class="van-action-sheet__subname" >{{ item.subname }}</view>
-      </block>
-      <van-loading wx:else custom-class="van-action-sheet__loading" size="22px" />
-    </button>
-  </view>
-  <slot />
-  <block wx:if="{{ cancelText }}">
-    <view class="van-action-sheet__gap" />
-    <view
-      class="van-action-sheet__cancel"
-      hover-class="van-action-sheet__cancel--hover"
-      hover-stay-time="70"
-      bind:tap="onCancel"
-    >
-      {{ cancelText }}
-    </view>
-  </block>
-</van-popup>
+<wxs src="../wxs/utils.wxs" module="utils" />
+
+<van-popup
+  show="{{ show }}"
+  position="bottom"
+  round="{{ round }}"
+  z-index="{{ zIndex }}"
+  overlay="{{ overlay }}"
+  custom-class="van-action-sheet"
+  safe-area-inset-bottom="{{ safeAreaInsetBottom }}"
+  close-on-click-overlay="{{ closeOnClickOverlay }}"
+  bind:close="onClickOverlay"
+>
+  <view wx:if="{{ title }}" class="van-action-sheet__header">
+    {{ title }}
+    <van-icon
+      name="cross"
+      custom-class="van-action-sheet__close"
+      bind:click="onClose"
+    />
+  </view>
+  <view wx:if="{{ description }}" class="van-action-sheet__description van-hairline--bottom">
+    {{ description }}
+  </view>
+  <view wx:if="{{ actions && actions.length }}">
+    <!-- button外包一层view,防止actions动态变化,导致渲染时button被打散 -->
+    <button
+      wx:for="{{ actions }}"
+      wx:key="index"
+      open-type="{{ item.disabled || item.loading || (canIUseGetUserProfile && item.openType === 'getUserInfo') ? '' : item.openType }}"
+      style="{{ item.color ? 'color: ' + item.color : '' }}"
+      class="{{ utils.bem('action-sheet__item', { disabled: item.disabled || item.loading }) }} {{ item.className || '' }}"
+      hover-class="van-action-sheet__item--hover"
+      data-index="{{ index }}"
+      bindtap="{{ item.disabled || item.loading ? '' : 'onSelect' }}"
+      bindgetuserinfo="onGetUserInfo"
+      bindcontact="onContact"
+      bindgetphonenumber="onGetPhoneNumber"
+      binderror="onError"
+      bindlaunchapp="onLaunchApp"
+      bindopensetting="onOpenSetting"
+      lang="{{ lang }}"
+      session-from="{{ sessionFrom }}"
+      send-message-title="{{ sendMessageTitle }}"
+      send-message-path="{{ sendMessagePath }}"
+      send-message-img="{{ sendMessageImg }}"
+      show-message-card="{{ showMessageCard }}"
+      app-parameter="{{ appParameter }}"
+    >
+      <block wx:if="{{ !item.loading }}">
+        {{ item.name }}
+        <view wx:if="{{ item.subname }}" class="van-action-sheet__subname" >{{ item.subname }}</view>
+      </block>
+      <van-loading wx:else custom-class="van-action-sheet__loading" size="22px" />
+    </button>
+  </view>
+  <slot />
+  <block wx:if="{{ cancelText }}">
+    <view class="van-action-sheet__gap" />
+    <view
+      class="van-action-sheet__cancel"
+      hover-class="van-action-sheet__cancel--hover"
+      hover-stay-time="70"
+      bind:tap="onCancel"
+    >
+      {{ cancelText }}
+    </view>
+  </block>
+</van-popup>

File diff suppressed because it is too large
+ 0 - 0
src/wxcomponents/vant/action-sheet/index.wxss


+ 1 - 1
src/wxcomponents/vant/area/index.d.ts

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

+ 220 - 232
src/wxcomponents/vant/area/index.js

@@ -1,232 +1,220 @@
-import { VantComponent } from '../common/component';
-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] || '',
-          },
-        });
-      },
-    },
-  }),
-  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) {
-      const { index, picker, value } = event.detail;
-      this.code = value[index].code;
-      this.setValues().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();
-    },
-  },
-});
+import { VantComponent } from '../common/component';
+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), { 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();
+        });
+    },
+    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,
+                });
+            });
+        },
+        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();
+        },
+    },
+});

+ 6 - 6
src/wxcomponents/vant/area/index.json

@@ -1,6 +1,6 @@
-{
-  "component": true,
-  "usingComponents": {
-    "van-picker": "../picker/index"
-  }
-}
+{
+  "component": true,
+  "usingComponents": {
+    "van-picker": "../picker/index"
+  }
+}

+ 0 - 246
src/wxcomponents/vant/area/index.vue

@@ -1,246 +0,0 @@
-<template>
-<uni-shadow-root class="vant-area-index"><van-picker class="van-area__picker" active-class="active-class" toolbar-class="toolbar-class" column-class="column-class" show-toolbar value-key="name" :title="title" :loading="loading" :columns="computed.displayColumns(columns, columnsNum)" :item-height="itemHeight" :visible-item-count="visibleItemCount" :cancel-button-text="cancelButtonText" :confirm-button-text="confirmButtonText" @change="onChange" @confirm="onConfirm" @cancel="onCancel"></van-picker></uni-shadow-root>
-</template>
-<wxs src="./index.wxs" module="computed"></wxs>
-<script>
-import VanPicker from '../picker/index.vue'
-global['__wxVueOptions'] = {components:{'van-picker': VanPicker}}
-
-global['__wxRoute'] = 'vant/area/index'
-import { VantComponent } from '../common/component';
-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] || '',
-          },
-        });
-      },
-    },
-  }),
-  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) {
-      const { index, picker, value } = event.detail;
-      this.code = value[index].code;
-      this.setValues().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();
-    },
-  },
-});
-export default global['__wxComponents']['vant/area/index']
-</script>
-<style platform="mp-weixin">
-@import '../common/index.css';
-</style>

+ 20 - 20
src/wxcomponents/vant/area/index.wxml

@@ -1,20 +1,20 @@
-<wxs src="./index.wxs" module="computed" />
-
-<van-picker
-  class="van-area__picker"
-  active-class="active-class"
-  toolbar-class="toolbar-class"
-  column-class="column-class"
-  show-toolbar
-  value-key="name"
-  title="{{ title }}"
-  loading="{{ loading }}"
-  columns="{{ computed.displayColumns(columns, columnsNum) }}"
-  item-height="{{ itemHeight }}"
-  visible-item-count="{{ visibleItemCount }}"
-  cancel-button-text="{{ cancelButtonText }}"
-  confirm-button-text="{{ confirmButtonText }}"
-  bind:change="onChange"
-  bind:confirm="onConfirm"
-  bind:cancel="onCancel"
-/>
+<wxs src="./index.wxs" module="computed" />
+
+<van-picker
+  class="van-area__picker"
+  active-class="active-class"
+  toolbar-class="toolbar-class"
+  column-class="column-class"
+  show-toolbar="{{ showToolbar }}"
+  value-key="name"
+  title="{{ title }}"
+  loading="{{ loading }}"
+  columns="{{ computed.displayColumns(columns, columnsNum) }}"
+  item-height="{{ itemHeight }}"
+  visible-item-count="{{ visibleItemCount }}"
+  cancel-button-text="{{ cancelButtonText }}"
+  confirm-button-text="{{ confirmButtonText }}"
+  bind:change="onChange"
+  bind:confirm="onConfirm"
+  bind:cancel="onCancel"
+/>

+ 8 - 8
src/wxcomponents/vant/area/index.wxs

@@ -1,8 +1,8 @@
-/* eslint-disable */
-function displayColumns(columns, columnsNum) {
-  return columns.slice(0, +columnsNum);
-}
-
-module.exports = {
-  displayColumns: displayColumns,
-};
+/* eslint-disable */
+function displayColumns(columns, columnsNum) {
+  return columns.slice(0, +columnsNum);
+}
+
+module.exports = {
+  displayColumns: displayColumns,
+};

+ 1 - 1
src/wxcomponents/vant/button/index.d.ts

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

+ 64 - 58
src/wxcomponents/vant/button/index.js

@@ -1,58 +1,64 @@
-import { VantComponent } from '../common/component';
-import { button } from '../mixins/button';
-import { openType } from '../mixins/open-type';
-import { canIUseFormFieldButton } from '../common/version';
-const mixins = [button, openType];
-if (canIUseFormFieldButton()) {
-  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',
-    },
-    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,
-  },
-  methods: {
-    onClick() {
-      if (!this.data.loading) {
-        this.$emit('click');
-      }
-    },
-    noop() {},
-  },
-});
+import { VantComponent } from '../common/component';
+import { button } from '../mixins/button';
+import { canIUseFormFieldButton } from '../common/version';
+const mixins = [button];
+if (canIUseFormFieldButton()) {
+    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',
+        },
+        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,
+    },
+    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);
+                    },
+                });
+            }
+        },
+    },
+});

+ 7 - 7
src/wxcomponents/vant/button/index.json

@@ -1,7 +1,7 @@
-{
-  "component": true,
-  "usingComponents": {
-    "van-icon": "../icon/index",
-    "van-loading": "../loading/index"
-  }
-}
+{
+  "component": true,
+  "usingComponents": {
+    "van-icon": "../icon/index",
+    "van-loading": "../loading/index"
+  }
+}

File diff suppressed because it is too large
+ 0 - 84
src/wxcomponents/vant/button/index.vue


+ 53 - 53
src/wxcomponents/vant/button/index.wxml

@@ -1,53 +1,53 @@
-<wxs src="../wxs/utils.wxs" module="utils" />
-<wxs src="./index.wxs" module="computed" />
-
-<button
-  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"
-  lang="{{ lang }}"
-  form-type="{{ formType }}"
-  style="{{ computed.rootStyle({ plain, color, customStyle }) }}"
-  open-type="{{ disabled ? '' : openType }}"
-  business-id="{{ businessId }}"
-  session-from="{{ sessionFrom }}"
-  send-message-title="{{ sendMessageTitle }}"
-  send-message-path="{{ sendMessagePath }}"
-  send-message-img="{{ sendMessageImg }}"
-  show-message-card="{{ showMessageCard }}"
-  app-parameter="{{ appParameter }}"
-  aria-label="{{ ariaLabel }}"
-  bindtap="{{ !disabled ? 'onClick' : 'noop' }}"
-  bindgetuserinfo="bindGetUserInfo"
-  bindcontact="bindContact"
-  bindgetphonenumber="bindGetPhoneNumber"
-  binderror="bindError"
-  bindlaunchapp="bindLaunchApp"
-  bindopensetting="bindOpenSetting"
->
-  <block wx:if="{{ loading }}">
-    <van-loading
-      custom-class="loading-class"
-      size="{{ loadingSize }}"
-      type="{{ loadingType }}"
-      color="{{ computed.loadingColor({ type, color, plain }) }}"
-    />
-    <view wx:if="{{ loadingText }}" class="van-button__loading-text">
-      {{ loadingText }}
-    </view>
-  </block>
-  <block wx:else>
-    <van-icon
-      wx:if="{{ icon }}"
-      size="1.2em"
-      name="{{ icon }}"
-      class-prefix="{{ classPrefix }}"
-      class="van-button__icon"
-      custom-style="line-height: inherit;"
-    />
-    <view class="van-button__text">
-      <slot />
-    </view>
-  </block>
-</button>
+<wxs src="../wxs/utils.wxs" module="utils" />
+<wxs src="./index.wxs" module="computed" />
+
+<button
+  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"
+  lang="{{ lang }}"
+  form-type="{{ formType }}"
+  style="{{ computed.rootStyle({ plain, color, customStyle }) }}"
+  open-type="{{ disabled || loading || (canIUseGetUserProfile && openType === 'getUserInfo') ? '' : openType }}"
+  business-id="{{ businessId }}"
+  session-from="{{ sessionFrom }}"
+  send-message-title="{{ sendMessageTitle }}"
+  send-message-path="{{ sendMessagePath }}"
+  send-message-img="{{ sendMessageImg }}"
+  show-message-card="{{ showMessageCard }}"
+  app-parameter="{{ appParameter }}"
+  aria-label="{{ ariaLabel }}"
+  bindtap="{{ disabled || loading ? '' : 'onClick' }}"
+  bindgetuserinfo="onGetUserInfo"
+  bindcontact="onContact"
+  bindgetphonenumber="onGetPhoneNumber"
+  binderror="onError"
+  bindlaunchapp="onLaunchApp"
+  bindopensetting="onOpenSetting"
+>
+  <block wx:if="{{ loading }}">
+    <van-loading
+      custom-class="loading-class"
+      size="{{ loadingSize }}"
+      type="{{ loadingType }}"
+      color="{{ computed.loadingColor({ type, color, plain }) }}"
+    />
+    <view wx:if="{{ loadingText }}" class="van-button__loading-text">
+      {{ loadingText }}
+    </view>
+  </block>
+  <block wx:else>
+    <van-icon
+      wx:if="{{ icon }}"
+      size="1.2em"
+      name="{{ icon }}"
+      class-prefix="{{ classPrefix }}"
+      class="van-button__icon"
+      custom-style="line-height: inherit;"
+    />
+    <view class="van-button__text">
+      <slot />
+    </view>
+  </block>
+</button>

+ 39 - 39
src/wxcomponents/vant/button/index.wxs

@@ -1,39 +1,39 @@
-/* eslint-disable */
-var style = require('../wxs/style.wxs');
-
-function rootStyle(data) {
-  if (!data.color) {
-    return data.customStyle;
-  }
-
-  var properties = {
-    color: data.plain ? data.color : '#fff',
-    background: data.plain ? null : data.color,
-  };
-
-  // hide border when color is linear-gradient
-  if (data.color.indexOf('gradient') !== -1) {
-    properties.border = 0;
-  } else {
-    properties['border-color'] = data.color;
-  }
-
-  return style([properties, data.customStyle]);
-}
-
-function loadingColor(data) {
-  if (data.plain) {
-    return data.color ? data.color : '#c9c9c9';
-  }
-
-  if (data.type === 'default') {
-    return '#c9c9c9';
-  }
-
-  return '#fff';
-}
-
-module.exports = {
-  rootStyle: rootStyle,
-  loadingColor: loadingColor,
-};
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+
+function rootStyle(data) {
+  if (!data.color) {
+    return data.customStyle;
+  }
+
+  var properties = {
+    color: data.plain ? data.color : '#fff',
+    background: data.plain ? null : data.color,
+  };
+
+  // hide border when color is linear-gradient
+  if (data.color.indexOf('gradient') !== -1) {
+    properties.border = 0;
+  } else {
+    properties['border-color'] = data.color;
+  }
+
+  return style([properties, data.customStyle]);
+}
+
+function loadingColor(data) {
+  if (data.plain) {
+    return data.color ? data.color : '#c9c9c9';
+  }
+
+  if (data.type === 'default') {
+    return '#c9c9c9';
+  }
+
+  return '#fff';
+}
+
+module.exports = {
+  rootStyle: rootStyle,
+  loadingColor: loadingColor,
+};

File diff suppressed because it is too large
+ 0 - 0
src/wxcomponents/vant/button/index.wxss


+ 0 - 37
src/wxcomponents/vant/calendar/calendar.vue

@@ -1,37 +0,0 @@
-<template>
-<uni-shadow-root class="vant-calendar-calendar"><view class="van-calendar">
-  <header :title="title" :showTitle="showTitle" :subtitle="subtitle" :showSubtitle="showSubtitle">
-    <slot name="title" slot="title"></slot>
-  </header>
-
-  <scroll-view class="van-calendar__body" scroll-y :scroll-into-view="scrollIntoView">
-    <month v-for="(item,index) in (computed.getMonths(minDate, maxDate))" :key="item.index" :id="'month'+(index)" class="month" :data-date="item" :date="item" :type="type" :color="color" :minDate="minDate" :maxDate="maxDate" :showMark="showMark" :formatter="formatter" :rowHeight="rowHeight" :currentDate="currentDate" :showSubtitle="showSubtitle" :allowSameDay="allowSameDay" :showMonthTitle="index !== 0 || !showSubtitle" @click="onClickDay"></month>
-  </scroll-view>
-
-  <view :class="utils.bem('calendar__footer', { safeAreaInsetBottom })">
-    <slot name="footer"></slot>
-  </view>
-
-  <view :class="utils.bem('calendar__footer', { safeAreaInsetBottom })">
-    <van-button v-if="showConfirm" round block type="danger" :color="color" custom-class="van-calendar__confirm" :disabled="computed.getButtonDisabled(type, currentDate)" nativeType="text" @click="onConfirm">
-      {{
-        computed.getButtonDisabled(type, currentDate)
-          ? confirmDisabledText
-          : confirmText
-      }}
-    </van-button>
-  </view>
-</view></uni-shadow-root>
-</template>
-
-<script>
-
-global['__wxRoute'] = 'vant/calendar/calendar'
-
-Component({})
-
-export default global['__wxComponents']['vant/calendar/calendar']
-</script>
-<style platform="mp-weixin">
-
-</style>

+ 68 - 65
src/wxcomponents/vant/calendar/calendar.wxml

@@ -1,65 +1,68 @@
-<view class="van-calendar">
-  <header
-    title="{{ title }}"
-    showTitle="{{ showTitle }}"
-    subtitle="{{ subtitle }}"
-    showSubtitle="{{ showSubtitle }}"
-  >
-    <slot name="title" slot="title"></slot>
-  </header>
-
-  <scroll-view
-    class="van-calendar__body"
-    scroll-y
-    scroll-into-view="{{ scrollIntoView }}"
-  >
-    <month
-      wx:for="{{ computed.getMonths(minDate, maxDate) }}"
-      wx:key="index"
-      id="month{{ index }}"
-      class="month"
-      data-date="{{ item }}"
-      date="{{ item }}"
-      type="{{ type }}"
-      color="{{ color }}"
-      minDate="{{ minDate }}"
-      maxDate="{{ maxDate }}"
-      showMark="{{ showMark }}"
-      formatter="{{ formatter }}"
-      rowHeight="{{ rowHeight }}"
-      currentDate="{{ currentDate }}"
-      showSubtitle="{{ showSubtitle }}"
-      allowSameDay="{{ allowSameDay }}"
-      showMonthTitle="{{ index !== 0 || !showSubtitle }}"
-      bind:click="onClickDay"
-    />
-  </scroll-view>
-
-  <view
-    class="{{ utils.bem('calendar__footer', { safeAreaInsetBottom }) }}"
-  >
-    <slot name="footer"></slot>
-  </view>
-
-  <view
-    class="{{ utils.bem('calendar__footer', { safeAreaInsetBottom }) }}"
-  >
-    <van-button
-      wx:if="{{ showConfirm }}"
-      round
-      block
-      type="danger"
-      color="{{ color }}"
-      custom-class="van-calendar__confirm"
-      disabled="{{ computed.getButtonDisabled(type, currentDate) }}"
-      nativeType="text"
-      bind:click="onConfirm"
-    >
-      {{
-        computed.getButtonDisabled(type, currentDate)
-          ? confirmDisabledText
-          : confirmText
-      }}
-    </van-button>
-  </view>
-</view>
+<view class="van-calendar">
+  <header
+    title="{{ title }}"
+    showTitle="{{ showTitle }}"
+    subtitle="{{ subtitle }}"
+    showSubtitle="{{ showSubtitle }}"
+    firstDayOfWeek="{{ firstDayOfWeek }}"
+    bind:click-subtitle="onClickSubtitle"
+  >
+    <slot name="title" slot="title"></slot>
+  </header>
+
+  <scroll-view
+    class="van-calendar__body"
+    scroll-y
+    scroll-into-view="{{ scrollIntoView }}"
+  >
+    <month
+      wx:for="{{ computed.getMonths(minDate, maxDate) }}"
+      wx:key="index"
+      id="month{{ index }}"
+      class="month"
+      data-date="{{ item }}"
+      date="{{ item }}"
+      type="{{ type }}"
+      color="{{ color }}"
+      minDate="{{ minDate }}"
+      maxDate="{{ maxDate }}"
+      showMark="{{ showMark }}"
+      formatter="{{ formatter }}"
+      rowHeight="{{ rowHeight }}"
+      currentDate="{{ currentDate }}"
+      showSubtitle="{{ showSubtitle }}"
+      allowSameDay="{{ allowSameDay }}"
+      showMonthTitle="{{ index !== 0 || !showSubtitle }}"
+      firstDayOfWeek="{{ firstDayOfWeek }}"
+      bind:click="onClickDay"
+    />
+  </scroll-view>
+
+  <view
+    class="{{ utils.bem('calendar__footer', { safeAreaInsetBottom }) }}"
+  >
+    <slot name="footer"></slot>
+  </view>
+
+  <view
+    class="{{ utils.bem('calendar__footer', { safeAreaInsetBottom }) }}"
+  >
+    <van-button
+      wx:if="{{ showConfirm }}"
+      round
+      block
+      type="danger"
+      color="{{ color }}"
+      custom-class="van-calendar__confirm"
+      disabled="{{ computed.getButtonDisabled(type, currentDate) }}"
+      nativeType="text"
+      bind:click="onConfirm"
+    >
+      {{
+        computed.getButtonDisabled(type, currentDate)
+          ? confirmDisabledText
+          : confirmText
+      }}
+    </van-button>
+  </view>
+</view>

+ 1 - 1
src/wxcomponents/vant/calendar/components/header/index.d.ts

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

+ 37 - 16
src/wxcomponents/vant/calendar/components/header/index.js

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

+ 3 - 3
src/wxcomponents/vant/calendar/components/header/index.json

@@ -1,3 +1,3 @@
-{
-  "component": true
-}
+{
+  "component": true
+}

+ 0 - 43
src/wxcomponents/vant/calendar/components/header/index.vue

@@ -1,43 +0,0 @@
-<template>
-<uni-shadow-root class="vant-calendar-components-header-index"><view class="van-calendar__header">
-  <block v-if="showTitle">
-    <view class="van-calendar__header-title"><slot name="title"></slot></view>
-    <view class="van-calendar__header-title">{{ title }}</view>
-  </block>
-
-  <view v-if="showSubtitle" class="van-calendar__header-subtitle">
-    {{ subtitle }}
-  </view>
-
-  <view class="van-calendar__weekdays">
-    <view v-for="(item,index) in (weekdays)" :key="item.index" class="van-calendar__weekday">
-      {{ item }}
-    </view>
-  </view>
-</view></uni-shadow-root>
-</template>
-
-<script>
-
-global['__wxRoute'] = 'vant/calendar/components/header/index'
-import { VantComponent } from '../../../common/component';
-VantComponent({
-  props: {
-    title: {
-      type: String,
-      value: '日期选择',
-    },
-    subtitle: String,
-    showTitle: Boolean,
-    showSubtitle: Boolean,
-  },
-  data: {
-    weekdays: ['日', '一', '二', '三', '四', '五', '六'],
-  },
-  methods: {},
-});
-export default global['__wxComponents']['vant/calendar/components/header/index']
-</script>
-<style platform="mp-weixin">
-@import '../../../common/index.css';.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)}
-</style>

+ 16 - 16
src/wxcomponents/vant/calendar/components/header/index.wxml

@@ -1,16 +1,16 @@
-<view class="van-calendar__header">
-  <block wx:if="{{ showTitle }}">
-    <view class="van-calendar__header-title"><slot name="title"></slot></view>
-    <view class="van-calendar__header-title">{{ title }}</view>
-  </block>
-
-  <view wx:if="{{ showSubtitle }}" class="van-calendar__header-subtitle">
-    {{ subtitle }}
-  </view>
-
-  <view class="van-calendar__weekdays">
-    <view wx:for="{{ weekdays }}" wx:key="index" class="van-calendar__weekday">
-      {{ item }}
-    </view>
-  </view>
-</view>
+<view class="van-calendar__header">
+  <block wx:if="{{ showTitle }}">
+    <view class="van-calendar__header-title"><slot name="title"></slot></view>
+    <view class="van-calendar__header-title">{{ title }}</view>
+  </block>
+
+  <view wx:if="{{ showSubtitle }}" class="van-calendar__header-subtitle" bind:tap="onClickSubtitle">
+    {{ subtitle }}
+  </view>
+
+  <view class="van-calendar__weekdays">
+    <view wx:for="{{ weekdays }}" wx:key="index" class="van-calendar__weekday">
+      {{ item }}
+    </view>
+  </view>
+</view>

+ 1 - 1
src/wxcomponents/vant/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
src/wxcomponents/vant/calendar/components/month/index.d.ts

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

+ 154 - 157
src/wxcomponents/vant/calendar/components/month/index.js

@@ -1,157 +1,154 @@
-import { VantComponent } from '../../../common/component';
-import {
-  getMonthEndDay,
-  compareDay,
-  getPrevDay,
-  getNextDay,
-} from '../../utils';
-VantComponent({
-  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',
-    },
-    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';
-      }
-    },
-    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);
-      }
-    },
-    getBottomInfo(type) {
-      if (this.data.type === 'range') {
-        if (type === 'start') {
-          return '开始';
-        }
-        if (type === 'end') {
-          return '结束';
-        }
-        if (type === 'start-end') {
-          return '开始/结束';
-        }
-      }
-    },
-  },
-});
+import { VantComponent } from '../../../common/component';
+import { getMonthEndDay, compareDay, getPrevDay, getNextDay, } from '../../utils';
+VantComponent({
+    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,
+    },
+    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 '开始/结束';
+                }
+            }
+        },
+    },
+});

+ 3 - 3
src/wxcomponents/vant/calendar/components/month/index.json

@@ -1,3 +1,3 @@
-{
-  "component": true
-}
+{
+  "component": true
+}

File diff suppressed because it is too large
+ 0 - 195
src/wxcomponents/vant/calendar/components/month/index.vue


+ 39 - 39
src/wxcomponents/vant/calendar/components/month/index.wxml

@@ -1,39 +1,39 @@
-<wxs src="./index.wxs" module="computed"></wxs>
-<wxs src="../../../wxs/utils.wxs" module="utils" />
-
-<view class="van-calendar__month" style="{{ computed.getMonthStyle(visible, date, rowHeight) }}">
-  <view wx:if="{{ showMonthTitle }}" class="van-calendar__month-title">
-    {{ computed.formatMonthTitle(date) }}
-  </view>
-
-  <view wx:if="{{ visible }}" class="van-calendar__days">
-    <view wx:if="{{ showMark }}" class="van-calendar__month-mark">
-      {{ computed.getMark(date) }}
-    </view>
-
-    <view
-      wx:for="{{ days }}"
-      wx:key="index"
-      style="{{ computed.getDayStyle(item.type, index, date, rowHeight, color) }}"
-      class="{{ utils.bem('calendar__day', [item.type]) }} {{ item.className }}"
-      data-index="{{ index }}"
-      bindtap="onClick"
-    >
-      <view wx:if="{{ item.type === 'selected' }}" class="van-calendar__selected-day" style="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">
-          {{ item.bottomInfo }}
-        </view>
-      </view>
-
-      <view wx:else>
-        <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">
-          {{ item.bottomInfo }}
-        </view>
-      </view>
-    </view>
-  </view>
-</view>
+<wxs src="./index.wxs" module="computed"></wxs>
+<wxs src="../../../wxs/utils.wxs" module="utils" />
+
+<view class="van-calendar__month" style="{{ computed.getMonthStyle(visible, date, rowHeight) }}">
+  <view wx:if="{{ showMonthTitle }}" class="van-calendar__month-title">
+    {{ computed.formatMonthTitle(date) }}
+  </view>
+
+  <view wx:if="{{ visible }}" class="van-calendar__days">
+    <view wx:if="{{ showMark }}" class="van-calendar__month-mark">
+      {{ computed.getMark(date) }}
+    </view>
+
+    <view
+      wx:for="{{ days }}"
+      wx:key="index"
+      style="{{ computed.getDayStyle(item.type, index, date, rowHeight, color, firstDayOfWeek) }}"
+      class="{{ utils.bem('calendar__day', [item.type]) }} {{ item.className }}"
+      data-index="{{ index }}"
+      bindtap="onClick"
+    >
+      <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">
+          {{ item.bottomInfo }}
+        </view>
+      </view>
+
+      <view wx:else>
+        <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">
+          {{ item.bottomInfo }}
+        </view>
+      </view>
+    </view>
+  </view>
+</view>

+ 71 - 67
src/wxcomponents/vant/calendar/components/month/index.wxs

@@ -1,67 +1,71 @@
-/* eslint-disable */
-var utils = require('../../utils.wxs');
-
-function getMark(date) {
-  return getDate(date).getMonth() + 1;
-}
-
-var ROW_HEIGHT = 64;
-
-function getDayStyle(type, index, date, rowHeight, color) {
-  var style = [];
-  var offset = getDate(date).getDay();
-
-  if (index === 0) {
-    style.push(['margin-left', (100 * offset) / 7 + '%']);
-  }
-
-  if (rowHeight !== ROW_HEIGHT) {
-    style.push(['height', rowHeight + 'px']);
-  }
-
-  if (color) {
-    if (
-      type === 'start' ||
-      type === 'end' ||
-      type === 'multiple-selected' ||
-      type === 'multiple-middle'
-    ) {
-      style.push(['background', color]);
-    } else if (type === 'middle') {
-      style.push(['color', color]);
-    }
-  }
-
-  return style
-    .map(function(item) {
-      return item.join(':');
-    })
-    .join(';');
-}
-
-function formatMonthTitle(date) {
-  date = getDate(date);
-  return date.getFullYear() + '年' + (date.getMonth() + 1) + '月';
-}
-
-function getMonthStyle(visible, date, rowHeight) {
-  if (!visible) {
-    date = getDate(date);
-
-    var totalDay = utils.getMonthEndDay(
-      date.getFullYear(),
-      date.getMonth() + 1
-    );
-    var offset = getDate(date).getDay();
-    var padding = Math.ceil((totalDay + offset) / 7) * rowHeight;
-
-    return 'padding-bottom:' + padding + 'px';
-  }
-}
-
-module.exports = {
-  getMark: getMark,
-  getDayStyle: getDayStyle,
-  formatMonthTitle: formatMonthTitle,
-  getMonthStyle: getMonthStyle
-};
+/* eslint-disable */
+var utils = require('../../utils.wxs');
+
+function getMark(date) {
+  return getDate(date).getMonth() + 1;
+}
+
+var ROW_HEIGHT = 64;
+
+function getDayStyle(type, index, date, rowHeight, color, firstDayOfWeek) {
+  var style = [];
+  var current = getDate(date).getDay() || 7;
+  var offset = current < firstDayOfWeek ? (7 - firstDayOfWeek + current) :
+               current === 7 && firstDayOfWeek === 0 ? 0 :
+               (current - firstDayOfWeek);
+
+  if (index === 0) {
+    style.push(['margin-left', (100 * offset) / 7 + '%']);
+  }
+
+  if (rowHeight !== ROW_HEIGHT) {
+    style.push(['height', rowHeight + 'px']);
+  }
+
+  if (color) {
+    if (
+      type === 'start' ||
+      type === 'end' ||
+      type === 'start-end' ||
+      type === 'multiple-selected' ||
+      type === 'multiple-middle'
+    ) {
+      style.push(['background', color]);
+    } else if (type === 'middle') {
+      style.push(['color', color]);
+    }
+  }
+
+  return style
+    .map(function(item) {
+      return item.join(':');
+    })
+    .join(';');
+}
+
+function formatMonthTitle(date) {
+  date = getDate(date);
+  return date.getFullYear() + '年' + (date.getMonth() + 1) + '月';
+}
+
+function getMonthStyle(visible, date, rowHeight) {
+  if (!visible) {
+    date = getDate(date);
+
+    var totalDay = utils.getMonthEndDay(
+      date.getFullYear(),
+      date.getMonth() + 1
+    );
+    var offset = getDate(date).getDay();
+    var padding = Math.ceil((totalDay + offset) / 7) * rowHeight;
+
+    return 'padding-bottom:' + padding + 'px';
+  }
+}
+
+module.exports = {
+  getMark: getMark,
+  getDayStyle: getDayStyle,
+  formatMonthTitle: formatMonthTitle,
+  getMonthStyle: getMonthStyle
+};

File diff suppressed because it is too large
+ 0 - 0
src/wxcomponents/vant/calendar/components/month/index.wxss


+ 1 - 1
src/wxcomponents/vant/calendar/index.d.ts

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

+ 337 - 297
src/wxcomponents/vant/calendar/index.js

@@ -1,297 +1,337 @@
-import { VantComponent } from '../common/component';
-import {
-  ROW_HEIGHT,
-  getNextDay,
-  compareDay,
-  copyDates,
-  calcDateNum,
-  formatMonthTitle,
-  compareMonth,
-  getMonths,
-  getDayByOffset,
-} from './utils';
-import Toast from '../toast/toast';
-import { requestAnimationFrame } from '../common/utils';
-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,
-    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,
-    },
-  },
-  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;
-        });
-      });
-    },
-    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]);
-        }
-      } 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);
-      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 } = this.data;
-      if (maxRange && calcDateNum(date) > maxRange) {
-        Toast({
-          context: this,
-          message: rangePrompt || `选择天数不能超过 ${maxRange} 天`,
-        });
-        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));
-      });
-    },
-  },
-});
+import { VantComponent } from '../common/component';
+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: '确定',
+        },
+        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,
+        },
+        firstDayOfWeek: {
+            type: Number,
+            value: 0,
+        },
+        readonly: Boolean,
+    },
+    data: {
+        subtitle: '',
+        currentDate: null,
+        scrollIntoView: '',
+    },
+    created() {
+        this.setData({
+            currentDate: this.getInitialDate(this.data.defaultDate),
+        });
+    },
+    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) });
+                }
+            });
+        },
+        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 } = 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 end = this.limitDateRange(endDay || now, 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]);
+                    }
+                }
+                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);
+            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);
+        },
+    },
+});

+ 10 - 10
src/wxcomponents/vant/calendar/index.json

@@ -1,10 +1,10 @@
-{
-  "component": true,
-  "usingComponents": {
-    "header": "./components/header/index",
-    "month": "./components/month/index",
-    "van-button": "../button/index",
-    "van-popup": "../popup/index",
-    "van-toast": "../toast/index"
-  }
-}
+{
+  "component": true,
+  "usingComponents": {
+    "header": "./components/header/index",
+    "month": "./components/month/index",
+    "van-button": "../button/index",
+    "van-popup": "../popup/index",
+    "van-toast": "../toast/index"
+  }
+}

+ 0 - 325
src/wxcomponents/vant/calendar/index.vue

@@ -1,325 +0,0 @@
-<template>
-<uni-shadow-root class="vant-calendar-index"><van-popup v-if="poppable" :custom-class="'van-calendar__popup--'+(position)" close-icon-class="van-calendar__close-icon" :show="show" :round="round" :position="position" :closeable="showTitle || showSubtitle" :close-on-click-overlay="closeOnClickOverlay" @enter="onOpen" @close="onClose" @after-enter="onOpened" @after-leave="onClosed">
-  <include src="calendar.wxml"></include>
-</van-popup>
-
-<include v-else src="calendar.wxml"></include>
-
-<van-toast id="van-toast"></van-toast></uni-shadow-root>
-</template>
-<wxs src="./index.wxs" module="computed"></wxs><wxs src="../wxs/utils.wxs" module="utils"></wxs>
-<script>
-
-const __wxTemplateComponentProps = {}
-import __wxTemplateComponent0 from './calendar.vue'
-
-import Header from './components/header/index.vue'
-import Month from './components/month/index.vue'
-import VanButton from '../button/index.vue'
-import VanPopup from '../popup/index.vue'
-import VanToast from '../toast/index.vue'
-global['__wxVueOptions'] = {components:{'header': Header,'month': Month,'van-button': VanButton,'van-popup': VanPopup,'van-toast': VanToast,}}
-
-global['__wxRoute'] = 'vant/calendar/index'
-import { VantComponent } from '../common/component';
-import {
-  ROW_HEIGHT,
-  getNextDay,
-  compareDay,
-  copyDates,
-  calcDateNum,
-  formatMonthTitle,
-  compareMonth,
-  getMonths,
-  getDayByOffset,
-} from './utils';
-import Toast from '../toast/toast';
-import { requestAnimationFrame } from '../common/utils';
-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,
-    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,
-    },
-  },
-  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;
-        });
-      });
-    },
-    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]);
-        }
-      } 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);
-      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 } = this.data;
-      if (maxRange && calcDateNum(date) > maxRange) {
-        Toast({
-          context: this,
-          message: rangePrompt || `选择天数不能超过 ${maxRange} 天`,
-        });
-        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));
-      });
-    },
-  },
-});
-export default global['__wxComponents']['vant/calendar/index']
-</script>
-<style platform="mp-weixin">
-@import '../common/index.css';.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}
-</style>

+ 25 - 25
src/wxcomponents/vant/calendar/index.wxml

@@ -1,25 +1,25 @@
-<wxs src="./index.wxs" module="computed" />
-<wxs src="../wxs/utils.wxs" module="utils" />
-
-<import src="./calendar.wxml" />
-
-<van-popup
-  wx:if="{{ poppable }}"
-  custom-class="van-calendar__popup--{{ position }}"
-  close-icon-class="van-calendar__close-icon"
-  show="{{ show }}"
-  round="{{ round }}"
-  position="{{ position }}"
-  closeable="{{ showTitle || showSubtitle }}"
-  close-on-click-overlay="{{ closeOnClickOverlay }}"
-  bind:enter="onOpen"
-  bind:close="onClose"
-  bind:after-enter="onOpened"
-  bind:after-leave="onClosed"
->
-  <include src="calendar.wxml" />
-</van-popup>
-
-<include wx:else src="calendar.wxml" />
-
-<van-toast id="van-toast" />
+<wxs src="./index.wxs" module="computed" />
+<wxs src="../wxs/utils.wxs" module="utils" />
+
+<import src="./calendar.wxml" />
+
+<van-popup
+  wx:if="{{ poppable }}"
+  custom-class="van-calendar__popup--{{ position }}"
+  close-icon-class="van-calendar__close-icon"
+  show="{{ show }}"
+  round="{{ round }}"
+  position="{{ position }}"
+  closeable="{{ showTitle || showSubtitle }}"
+  close-on-click-overlay="{{ closeOnClickOverlay }}"
+  bind:enter="onOpen"
+  bind:close="onClose"
+  bind:after-enter="onOpened"
+  bind:after-leave="onClosed"
+>
+  <include src="./calendar.wxml" />
+</van-popup>
+
+<include wx:else src="./calendar.wxml" />
+
+<van-toast id="van-toast" />

+ 37 - 37
src/wxcomponents/vant/calendar/index.wxs

@@ -1,37 +1,37 @@
-/* eslint-disable */
-var utils = require('./utils.wxs');
-
-function getMonths(minDate, maxDate) {
-  var months = [];
-  var cursor = getDate(minDate);
-
-  cursor.setDate(1);
-
-  do {
-    months.push(cursor.getTime());
-    cursor.setMonth(cursor.getMonth() + 1);
-  } while (utils.compareMonth(cursor, getDate(maxDate)) !== 1);
-
-  return months;
-}
-
-function getButtonDisabled(type, currentDate) {
-  if (currentDate == null) {
-    return true;
-  }
-
-  if (type === 'range') {
-    return !currentDate[0] || !currentDate[1];
-  }
-
-  if (type === 'multiple') {
-    return !currentDate.length;
-  }
-
-  return !currentDate;
-}
-
-module.exports = {
-  getMonths: getMonths,
-  getButtonDisabled: getButtonDisabled
-};
+/* eslint-disable */
+var utils = require('./utils.wxs');
+
+function getMonths(minDate, maxDate) {
+  var months = [];
+  var cursor = getDate(minDate);
+
+  cursor.setDate(1);
+
+  do {
+    months.push(cursor.getTime());
+    cursor.setMonth(cursor.getMonth() + 1);
+  } while (utils.compareMonth(cursor, getDate(maxDate)) !== 1);
+
+  return months;
+}
+
+function getButtonDisabled(type, currentDate) {
+  if (currentDate == null) {
+    return true;
+  }
+
+  if (type === 'range') {
+    return !currentDate[0] || !currentDate[1];
+  }
+
+  if (type === 'multiple') {
+    return !currentDate.length;
+  }
+
+  return !currentDate;
+}
+
+module.exports = {
+  getMonths: getMonths,
+  getButtonDisabled: getButtonDisabled
+};

+ 1 - 1
src/wxcomponents/vant/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}

+ 12 - 17
src/wxcomponents/vant/calendar/utils.d.ts

@@ -1,17 +1,12 @@
-export declare const ROW_HEIGHT = 64;
-export declare function formatMonthTitle(date: Date): string;
-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 calcDateNum(date: [Date, Date]): number;
-export declare function copyDates(dates: Date | Date[]): Date | Date[];
-export declare function getMonthEndDay(year: number, month: number): number;
-export declare function getMonths(minDate: number, maxDate: number): number[];
+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 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;
+export declare function getMonths(minDate: number, maxDate: number): number[];

+ 83 - 78
src/wxcomponents/vant/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}月`;
-}
-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;
-}
-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;
-}
-export function getDayByOffset(date, offset) {
-  date = new Date(date);
-  date.setDate(date.getDate() + offset);
-  return date;
-}
-export function getPrevDay(date) {
-  return getDayByOffset(date, -1);
-}
-export function getNextDay(date) {
-  return getDayByOffset(date, 1);
-}
-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;
-}
-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);
-}
-export function getMonthEndDay(year, month) {
-  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;
-}
+export const ROW_HEIGHT = 64;
+export function formatMonthTitle(date) {
+    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;
+}
+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;
+}
+export function getDayByOffset(date, offset) {
+    date = new Date(date);
+    date.setDate(date.getDate() + offset);
+    return date;
+}
+export function getPrevDay(date) {
+    return getDayByOffset(date, -1);
+}
+export function getNextDay(date) {
+    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;
+}
+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);
+}
+export function getMonthEndDay(year, month) {
+    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;
+}

+ 25 - 25
src/wxcomponents/vant/calendar/utils.wxs

@@ -1,25 +1,25 @@
-/* eslint-disable */
-function getMonthEndDay(year, month) {
-  return 32 -  getDate(year, month - 1, 32).getDate();
-}
-
-function compareMonth(date1, date2) {
-  date1 = getDate(date1);
-  date2 = getDate(date2);
-
-  var year1 = date1.getFullYear();
-  var year2 = date2.getFullYear();
-  var month1 = date1.getMonth();
-  var month2 = date2.getMonth();
-
-  if (year1 === year2) {
-    return month1 === month2 ? 0 : month1 > month2 ? 1 : -1;
-  }
-
-  return year1 > year2 ? 1 : -1;
-}
-
-module.exports = {
-  getMonthEndDay: getMonthEndDay,
-  compareMonth: compareMonth
-};
+/* eslint-disable */
+function getMonthEndDay(year, month) {
+  return 32 -  getDate(year, month - 1, 32).getDate();
+}
+
+function compareMonth(date1, date2) {
+  date1 = getDate(date1);
+  date2 = getDate(date2);
+
+  var year1 = date1.getFullYear();
+  var year2 = date2.getFullYear();
+  var month1 = date1.getMonth();
+  var month2 = date2.getMonth();
+
+  if (year1 === year2) {
+    return month1 === month2 ? 0 : month1 > month2 ? 1 : -1;
+  }
+
+  return year1 > year2 ? 1 : -1;
+}
+
+module.exports = {
+  getMonthEndDay: getMonthEndDay,
+  compareMonth: compareMonth
+};

+ 1 - 1
src/wxcomponents/vant/card/index.d.ts

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

+ 49 - 49
src/wxcomponents/vant/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',
-    },
-    centered: Boolean,
-    lazyLoad: Boolean,
-    thumbLink: String,
-    originPrice: String,
-    thumbMode: {
-      type: String,
-      value: 'aspectFit',
-    },
-    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');
-    },
-  },
-});
+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',
+        },
+        centered: Boolean,
+        lazyLoad: Boolean,
+        thumbLink: String,
+        originPrice: String,
+        thumbMode: {
+            type: String,
+            value: 'aspectFit',
+        },
+        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');
+        },
+    },
+});

+ 6 - 6
src/wxcomponents/vant/card/index.json

@@ -1,6 +1,6 @@
-{
-  "component": true,
-  "usingComponents": {
-    "van-tag": "../tag/index"
-  }
-}
+{
+  "component": true,
+  "usingComponents": {
+    "van-tag": "../tag/index"
+  }
+}

File diff suppressed because it is too large
+ 0 - 103
src/wxcomponents/vant/card/index.vue


+ 56 - 56
src/wxcomponents/vant/card/index.wxml

@@ -1,56 +1,56 @@
-<wxs src="../wxs/utils.wxs" module="utils" />
-
-<view class="custom-class van-card">
-  <view class="{{ utils.bem('card__header', { center: centered }) }}">
-    <view class="van-card__thumb" bind:tap="onClickThumb">
-      <image
-        wx:if="{{ thumb }}"
-        src="{{ thumb }}"
-        mode="{{ thumbMode }}"
-        lazy-load="{{ lazyLoad }}"
-        class="van-card__img thumb-class"
-      />
-      <slot wx:else name="thumb" />
-      <van-tag
-        wx:if="{{ tag }}"
-        mark
-        type="danger"
-        custom-class="van-card__tag"
-      >
-        {{ tag }}
-      </van-tag>
-      <slot wx:else name="tag" />
-    </view>
-
-    <view class="van-card__content {{ utils.bem('card__content', { center: centered }) }}">
-      <view>
-        <view wx:if="{{ title }}" class="van-card__title title-class">{{ title }}</view>
-        <slot wx:else name="title" />
-
-        <view wx:if="{{ desc }}" class="van-card__desc desc-class">{{ desc }}</view>
-        <slot wx:else name="desc" />
-
-        <slot name="tags" />
-      </view>
-
-      <view class="van-card__bottom">
-        <slot name="price-top" />
-        <view wx:if="{{ price || price === 0 }}" class="van-card__price price-class">
-          <text>{{ currency }}</text>
-          <text class="van-card__price-integer">{{ integerStr }}</text>
-          <text class="van-card__price-decimal">{{ decimalStr }}</text>
-        </view>
-        <slot wx:else name="price" />
-        <view wx:if="{{ originPrice || originPrice === 0 }}" class="van-card__origin-price origin-price-class">{{ currency }} {{ originPrice }}</view>
-        <slot wx:else name="origin-price" />
-        <view wx:if="{{ num }}" class="van-card__num num-class">x {{ num }}</view>
-        <slot wx:else  name="num" />
-        <slot name="bottom" />
-      </view>
-    </view>
-  </view>
-
-  <view class="van-card__footer">
-    <slot name="footer" />
-  </view>
-</view>
+<wxs src="../wxs/utils.wxs" module="utils" />
+
+<view class="custom-class van-card">
+  <view class="{{ utils.bem('card__header', { center: centered }) }}">
+    <view class="van-card__thumb" bind:tap="onClickThumb">
+      <image
+        wx:if="{{ thumb }}"
+        src="{{ thumb }}"
+        mode="{{ thumbMode }}"
+        lazy-load="{{ lazyLoad }}"
+        class="van-card__img thumb-class"
+      />
+      <slot wx:else name="thumb" />
+      <van-tag
+        wx:if="{{ tag }}"
+        mark
+        type="danger"
+        custom-class="van-card__tag"
+      >
+        {{ tag }}
+      </van-tag>
+      <slot wx:else name="tag" />
+    </view>
+
+    <view class="van-card__content {{ utils.bem('card__content', { center: centered }) }}">
+      <view>
+        <view wx:if="{{ title }}" class="van-card__title title-class">{{ title }}</view>
+        <slot wx:else name="title" />
+
+        <view wx:if="{{ desc }}" class="van-card__desc desc-class">{{ desc }}</view>
+        <slot wx:else name="desc" />
+
+        <slot name="tags" />
+      </view>
+
+      <view class="van-card__bottom">
+        <slot name="price-top" />
+        <view wx:if="{{ price || price === 0 }}" class="van-card__price price-class">
+          <text>{{ currency }}</text>
+          <text class="van-card__price-integer">{{ integerStr }}</text>
+          <text class="van-card__price-decimal">{{ decimalStr }}</text>
+        </view>
+        <slot wx:else name="price" />
+        <view wx:if="{{ originPrice || originPrice === 0 }}" class="van-card__origin-price origin-price-class">{{ currency }} {{ originPrice }}</view>
+        <slot wx:else name="origin-price" />
+        <view wx:if="{{ num }}" class="van-card__num num-class">x {{ num }}</view>
+        <slot wx:else  name="num" />
+        <slot name="bottom" />
+      </view>
+    </view>
+  </view>
+
+  <view class="van-card__footer">
+    <slot name="footer" />
+  </view>
+</view>

File diff suppressed because it is too large
+ 0 - 0
src/wxcomponents/vant/card/index.wxss


+ 1 - 1
src/wxcomponents/vant/cell-group/index.d.ts

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

+ 11 - 10
src/wxcomponents/vant/cell-group/index.js

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

+ 3 - 3
src/wxcomponents/vant/cell-group/index.json

@@ -1,3 +1,3 @@
-{
-  "component": true
-}
+{
+  "component": true
+}

+ 0 - 27
src/wxcomponents/vant/cell-group/index.vue

@@ -1,27 +0,0 @@
-<template>
-<uni-shadow-root class="vant-cell-group-index"><view v-if="title" class="van-cell-group__title">
-  {{ title }}
-</view>
-<view :class="'custom-class van-cell-group '+(border ? 'van-hairline--top-bottom' : '')">
-  <slot></slot>
-</view></uni-shadow-root>
-</template>
-
-<script>
-
-global['__wxRoute'] = 'vant/cell-group/index'
-import { VantComponent } from '../common/component';
-VantComponent({
-  props: {
-    title: String,
-    border: {
-      type: Boolean,
-      value: true,
-    },
-  },
-});
-export default global['__wxComponents']['vant/cell-group/index']
-</script>
-<style platform="mp-weixin">
-@import '../common/index.css';.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)}
-</style>

+ 11 - 9
src/wxcomponents/vant/cell-group/index.wxml

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

+ 1 - 1
src/wxcomponents/vant/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)}

+ 1 - 1
src/wxcomponents/vant/cell/index.d.ts

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

+ 38 - 38
src/wxcomponents/vant/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,
-    },
-    titleStyle: String,
-  },
-  methods: {
-    onClick(event) {
-      this.$emit('click', event.detail);
-      this.jumpLink();
-    },
-  },
-});
+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,
+        },
+        titleStyle: String,
+    },
+    methods: {
+        onClick(event) {
+            this.$emit('click', event.detail);
+            this.jumpLink();
+        },
+    },
+});

+ 6 - 6
src/wxcomponents/vant/cell/index.json

@@ -1,6 +1,6 @@
-{
-  "component": true,
-  "usingComponents": {
-    "van-icon": "../icon/index"
-  }
-}
+{
+  "component": true,
+  "usingComponents": {
+    "van-icon": "../icon/index"
+  }
+}

File diff suppressed because it is too large
+ 0 - 73
src/wxcomponents/vant/cell/index.vue


+ 47 - 46
src/wxcomponents/vant/cell/index.wxml

@@ -1,46 +1,47 @@
-<wxs src="../wxs/utils.wxs" module="utils" />
-<wxs src="./index.wxs" module="computed" />
-
-<view
-  class="custom-class {{ utils.bem('cell', [size, { center, required, borderless: !border, clickable: isLink || clickable }]) }}"
-  hover-class="van-cell--hover hover-class"
-  hover-stay-time="70"
-  style="{{ customStyle }}"
-  bind:tap="onClick"
->
-  <van-icon
-    wx:if="{{ icon }}"
-    name="{{ icon }}"
-    class="van-cell__left-icon-wrap"
-    custom-class="van-cell__left-icon"
-  />
-  <slot wx:else name="icon" />
-
-  <view
-    style="{{ computed.titleStyle({ titleWidth, titleStyle }) }}"
-    class="van-cell__title title-class"
-  >
-    <block wx:if="{{ title }}">{{ title }}</block>
-    <slot wx:else name="title" />
-
-    <view wx:if="{{ label || useLabelSlot }}" class="van-cell__label label-class">
-      <slot wx:if="{{ useLabelSlot }}" name="label" />
-      <block wx:elif="{{ label }}">{{ label }}</block>
-    </view>
-  </view>
-
-  <view class="van-cell__value value-class">
-    <block wx:if="{{ value || value === 0 }}">{{ value }}</block>
-    <slot wx:else />
-  </view>
-
-  <van-icon
-    wx:if="{{ isLink }}"
-    name="{{ arrowDirection ? 'arrow' + '-' + arrowDirection : 'arrow' }}"
-    class="van-cell__right-icon-wrap right-icon-class"
-    custom-class="van-cell__right-icon"
-  />
-  <slot wx:else name="right-icon" />
-
-  <slot name="extra" />
-</view>
+<wxs src="../wxs/utils.wxs" module="utils" />
+<wxs src="./index.wxs" module="computed" />
+
+<view
+  class="custom-class {{ utils.bem('cell', [size, { center, required, borderless: !border, clickable: isLink || clickable }]) }}"
+  hover-class="van-cell--hover hover-class"
+  hover-stay-time="70"
+  style="{{ customStyle }}"
+  bind:tap="onClick"
+>
+  <van-icon
+    wx:if="{{ icon }}"
+    name="{{ icon }}"
+    class="van-cell__left-icon-wrap"
+    custom-class="van-cell__left-icon"
+  />
+  <slot wx:else name="icon" />
+
+  <view
+    style="{{ computed.titleStyle({ titleWidth, titleStyle }) }}"
+    class="van-cell__title title-class"
+  >
+
+    <block wx:if="{{ title }}">{{ title }}</block>
+    <slot wx:else name="title" />
+
+    <view wx:if="{{ label || useLabelSlot }}" class="van-cell__label label-class">
+      <slot wx:if="{{ useLabelSlot }}" name="label" />
+      <block wx:elif="{{ label }}">{{ label }}</block>
+    </view>
+  </view>
+
+  <view class="van-cell__value value-class">
+    <block wx:if="{{ value || value === 0 }}">{{ value }}</block>
+    <slot wx:else />
+  </view>
+
+  <van-icon
+    wx:if="{{ isLink }}"
+    name="{{ arrowDirection ? 'arrow' + '-' + arrowDirection : 'arrow' }}"
+    class="van-cell__right-icon-wrap right-icon-class"
+    custom-class="van-cell__right-icon"
+  />
+  <slot wx:else name="right-icon" />
+
+  <slot name="extra" />
+</view>

+ 17 - 17
src/wxcomponents/vant/cell/index.wxs

@@ -1,17 +1,17 @@
-/* eslint-disable */
-var style = require('../wxs/style.wxs');
-var addUnit = require('../wxs/add-unit.wxs');
-
-function titleStyle(data) {
-  return style([
-    {
-      'max-width': addUnit(data.titleWidth),
-      'min-width': addUnit(data.titleWidth),
-    },
-    data.titleStyle,
-  ]);
-}
-
-module.exports = {
-  titleStyle: titleStyle,
-};
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function titleStyle(data) {
+  return style([
+    {
+      'max-width': addUnit(data.titleWidth),
+      'min-width': addUnit(data.titleWidth),
+    },
+    data.titleStyle,
+  ]);
+}
+
+module.exports = {
+  titleStyle: titleStyle,
+};

File diff suppressed because it is too large
+ 0 - 0
src/wxcomponents/vant/cell/index.wxss


+ 1 - 1
src/wxcomponents/vant/checkbox-group/index.d.ts

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

+ 36 - 31
src/wxcomponents/vant/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',
-    },
-    disabled: {
-      type: Boolean,
-      observer: 'updateChildren',
-    },
-  },
-  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,
-      });
-    },
-  },
-});
+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',
+        },
+        disabled: {
+            type: Boolean,
+            observer: 'updateChildren',
+        },
+        direction: {
+            type: String,
+            value: 'vertical',
+        },
+    },
+    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,
+            });
+        },
+    },
+});

+ 3 - 3
src/wxcomponents/vant/checkbox-group/index.json

@@ -1,3 +1,3 @@
-{
-  "component": true
-}
+{
+  "component": true
+}

+ 0 - 43
src/wxcomponents/vant/checkbox-group/index.vue

@@ -1,43 +0,0 @@
-<template>
-<uni-shadow-root class="vant-checkbox-group-index"><slot></slot></uni-shadow-root>
-</template>
-
-<script>
-
-global['__wxRoute'] = 'vant/checkbox-group/index'
-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',
-    },
-    disabled: {
-      type: Boolean,
-      observer: 'updateChildren',
-    },
-  },
-  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,
-      });
-    },
-  },
-});
-export default global['__wxComponents']['vant/checkbox-group/index']
-</script>
-<style platform="mp-weixin">
-@import '../common/index.css';
-</style>

+ 5 - 1
src/wxcomponents/vant/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
src/wxcomponents/vant/checkbox-group/index.wxss

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

+ 1 - 1
src/wxcomponents/vant/checkbox/index.d.ts

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

+ 77 - 74
src/wxcomponents/vant/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);
-}
-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',
-    },
-    labelDisabled: Boolean,
-    shape: {
-      type: String,
-      value: 'round',
-    },
-    iconSize: {
-      type: null,
-      value: 20,
-    },
-  },
-  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);
-        }
-      }
-    },
-  },
-});
+import { useParent } from '../common/relation';
+import { VantComponent } from '../common/component';
+function emit(target, 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',
+        },
+        labelDisabled: Boolean,
+        shape: {
+            type: String,
+            value: 'round',
+        },
+        iconSize: {
+            type: null,
+            value: 20,
+        },
+    },
+    data: {
+        parentDisabled: false,
+        direction: 'vertical',
+    },
+    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);
+                }
+            }
+        },
+    },
+});

+ 6 - 6
src/wxcomponents/vant/checkbox/index.json

@@ -1,6 +1,6 @@
-{
-  "component": true,
-  "usingComponents": {
-    "van-icon": "../icon/index"
-  }
-}
+{
+  "component": true,
+  "usingComponents": {
+    "van-icon": "../icon/index"
+  }
+}

+ 0 - 99
src/wxcomponents/vant/checkbox/index.vue

@@ -1,99 +0,0 @@
-<template>
-<uni-shadow-root class="vant-checkbox-index"><view class="van-checkbox custom-class">
-  <view v-if="labelPosition === 'left'" :class="'label-class '+(utils.bem('checkbox__label', [labelPosition, { disabled: disabled || parentDisabled }]))" @click="onClickLabel">
-    <slot></slot>
-  </view>
-  <view class="van-checkbox__icon-wrap" @click="toggle">
-    <slot v-if="useIconSlot" name="icon"></slot>
-    <van-icon v-else name="success" size="0.8em" :class="utils.bem('checkbox__icon', [shape, { disabled: disabled || parentDisabled, checked: value }])" :style="computed.iconStyle(checkedColor, value, disabled, parentDisabled, iconSize)" custom-class="icon-class" custom-style="line-height: 1.25em;"></van-icon>
-  </view>
-  <view v-if="labelPosition === 'right'" :class="'label-class '+(utils.bem('checkbox__label', [labelPosition, { disabled: disabled || parentDisabled }]))" @click="onClickLabel">
-    <slot></slot>
-  </view>
-</view></uni-shadow-root>
-</template>
-<wxs src="../wxs/utils.wxs" module="utils"></wxs><wxs src="./index.wxs" module="computed"></wxs>
-<script>
-import VanIcon from '../icon/index.vue'
-global['__wxVueOptions'] = {components:{'van-icon': VanIcon}}
-
-global['__wxRoute'] = 'vant/checkbox/index'
-import { useParent } from '../common/relation';
-import { VantComponent } from '../common/component';
-function emit(target, 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',
-    },
-    labelDisabled: Boolean,
-    shape: {
-      type: String,
-      value: 'round',
-    },
-    iconSize: {
-      type: null,
-      value: 20,
-    },
-  },
-  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);
-        }
-      }
-    },
-  },
-});
-export default global['__wxComponents']['vant/checkbox/index']
-</script>
-<style platform="mp-weixin">
-@import '../common/index.css';.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}
-</style>

+ 31 - 31
src/wxcomponents/vant/checkbox/index.wxml

@@ -1,31 +1,31 @@
-<wxs src="../wxs/utils.wxs" module="utils" />
-<wxs src="./index.wxs" module="computed" />
-
-<view class="van-checkbox custom-class">
-  <view
-    wx:if="{{ labelPosition === 'left' }}"
-    class="label-class {{ utils.bem('checkbox__label', [labelPosition, { disabled: disabled || parentDisabled }]) }}"
-    bindtap="onClickLabel"
-  >
-    <slot />
-  </view>
-  <view class="van-checkbox__icon-wrap" bindtap="toggle">
-    <slot wx:if="{{ useIconSlot }}" name="icon" />
-    <van-icon
-      wx:else
-      name="success"
-      size="0.8em"
-      class="{{ utils.bem('checkbox__icon', [shape, { disabled: disabled || parentDisabled, checked: value }]) }}"
-      style="{{ computed.iconStyle(checkedColor, value, disabled, parentDisabled, iconSize) }}"
-      custom-class="icon-class"
-      custom-style="line-height: 1.25em;"
-    />
-  </view>
-  <view
-    wx:if="{{ labelPosition === 'right' }}"
-    class="label-class {{ utils.bem('checkbox__label', [labelPosition, { disabled: disabled || parentDisabled }]) }}"
-    bindtap="onClickLabel"
-  >
-    <slot />
-  </view>
-</view>
+<wxs src="../wxs/utils.wxs" module="utils" />
+<wxs src="./index.wxs" module="computed" />
+
+<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 }]) }}"
+    bindtap="onClickLabel"
+  >
+    <slot />
+  </view>
+  <view class="van-checkbox__icon-wrap" bindtap="toggle">
+    <slot wx:if="{{ useIconSlot }}" name="icon" />
+    <van-icon
+      wx:else
+      name="success"
+      size="0.8em"
+      class="{{ utils.bem('checkbox__icon', [shape, { disabled: disabled || parentDisabled, checked: value }]) }}"
+      style="{{ computed.iconStyle(checkedColor, value, disabled, parentDisabled, iconSize) }}"
+      custom-class="icon-class"
+      custom-style="line-height: 1.25em;"
+    />
+  </view>
+  <view
+    wx:if="{{ labelPosition === 'right' }}"
+    class="label-class {{ utils.bem('checkbox__label', [labelPosition, { disabled: disabled || parentDisabled }]) }}"
+    bindtap="onClickLabel"
+  >
+    <slot />
+  </view>
+</view>

+ 20 - 20
src/wxcomponents/vant/checkbox/index.wxs

@@ -1,20 +1,20 @@
-/* eslint-disable */
-var style = require('../wxs/style.wxs');
-var addUnit = require('../wxs/add-unit.wxs');
-
-function iconStyle(checkedColor, value, disabled, parentDisabled, iconSize) {
-  var styles = {
-    'font-size': addUnit(iconSize),
-  };
-
-  if (checkedColor && value && !disabled && !parentDisabled) {
-    styles['border-color'] = checkedColor;
-    styles['background-color'] = checkedColor;
-  }
-
-  return style(styles);
-}
-
-module.exports = {
-  iconStyle: iconStyle,
-};
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function iconStyle(checkedColor, value, disabled, parentDisabled, iconSize) {
+  var styles = {
+    'font-size': addUnit(iconSize),
+  };
+
+  if (checkedColor && value && !disabled && !parentDisabled) {
+    styles['border-color'] = checkedColor;
+    styles['background-color'] = checkedColor;
+  }
+
+  return style(styles);
+}
+
+module.exports = {
+  iconStyle: iconStyle,
+};

+ 1 - 1
src/wxcomponents/vant/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}

+ 4 - 6
src/wxcomponents/vant/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;
-export {};
+/// <reference types="miniprogram-api-typings" />
+declare type CanvasContext = WechatMiniprogram.CanvasContext;
+export declare function adaptor(ctx: CanvasContext & Record<string, unknown>): CanvasContext;
+export {};

+ 43 - 43
src/wxcomponents/vant/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() {},
-  });
-}
+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() { },
+    });
+}

+ 1 - 1
src/wxcomponents/vant/circle/index.d.ts

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

+ 193 - 186
src/wxcomponents/vant/circle/index.js

@@ -1,186 +1,193 @@
-import { BLUE, WHITE } from '../common/color';
-import { VantComponent } from '../common/component';
-import { getSystemInfoSync } from '../common/utils';
-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);
-}
-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);
-            }
-            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.clearInterval();
-      this.currentValue = this.currentValue || 0;
-      this.interval = setInterval(() => {
-        if (this.currentValue !== value) {
-          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;
-      }
-    },
-  },
-  mounted() {
-    this.currentValue = this.data.value;
-    this.setHoverColor().then(() => {
-      this.drawCircle(this.currentValue);
-    });
-  },
-  destroyed() {
-    this.clearInterval();
-  },
-});
+import { BLUE, WHITE } from '../common/color';
+import { VantComponent } from '../common/component';
+import { getSystemInfoSync } from '../common/utils';
+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);
+}
+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);
+                    }
+                    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;
+            }
+        },
+    },
+    mounted() {
+        this.currentValue = this.data.value;
+        this.setHoverColor().then(() => {
+            this.drawCircle(this.currentValue);
+        });
+    },
+    destroyed() {
+        this.clearMockInterval();
+    },
+});

+ 3 - 3
src/wxcomponents/vant/circle/index.json

@@ -1,3 +1,3 @@
-{
-  "component": true
-}
+{
+  "component": true
+}

+ 0 - 204
src/wxcomponents/vant/circle/index.vue

@@ -1,204 +0,0 @@
-<template>
-<uni-shadow-root class="vant-circle-index"><view class="van-circle">
-  <canvas class="van-circle__canvas" :type="type" :style="'width: '+(utils.addUnit(size))+';height:'+(utils.addUnit(size))" id="van-circle" canvas-id="van-circle"></canvas>
-  <view v-if="(!text)" class="van-circle__text">
-    <slot></slot>
-  </view>
-  <cover-view v-else class="van-circle__text">{{ text }}</cover-view>
-</view></uni-shadow-root>
-</template>
-<wxs src="../wxs/utils.wxs" module="utils"></wxs>
-<script>
-
-global['__wxRoute'] = 'vant/circle/index'
-import { BLUE, WHITE } from '../common/color';
-import { VantComponent } from '../common/component';
-import { getSystemInfoSync } from '../common/utils';
-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);
-}
-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);
-            }
-            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.clearInterval();
-      this.currentValue = this.currentValue || 0;
-      this.interval = setInterval(() => {
-        if (this.currentValue !== value) {
-          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;
-      }
-    },
-  },
-  mounted() {
-    this.currentValue = this.data.value;
-    this.setHoverColor().then(() => {
-      this.drawCircle(this.currentValue);
-    });
-  },
-  destroyed() {
-    this.clearInterval();
-  },
-});
-export default global['__wxComponents']['vant/circle/index']
-</script>
-<style platform="mp-weixin">
-@import '../common/index.css';.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)}
-</style>

+ 9 - 9
src/wxcomponents/vant/circle/index.wxml

@@ -1,9 +1,9 @@
-<wxs src="../wxs/utils.wxs" module="utils" />
-
-<view class="van-circle">
-  <canvas class="van-circle__canvas" type="{{ type }}" style="width: {{ utils.addUnit(size) }};height:{{ utils.addUnit(size) }}" id="van-circle" canvas-id="van-circle"></canvas>
-  <view wx:if="{{ !text }}" class="van-circle__text">
-    <slot></slot>
-  </view>
-  <cover-view wx:else class="van-circle__text">{{ text }}</cover-view>
-</view>
+<wxs src="../wxs/utils.wxs" module="utils" />
+
+<view class="van-circle">
+  <canvas class="van-circle__canvas" type="{{ type }}" style="width: {{ utils.addUnit(size) }};height:{{ utils.addUnit(size) }}" id="van-circle" canvas-id="van-circle"></canvas>
+  <view wx:if="{{ !text }}" class="van-circle__text">
+    <slot></slot>
+  </view>
+  <cover-view wx:else class="van-circle__text">{{ text }}</cover-view>
+</view>

+ 1 - 1
src/wxcomponents/vant/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%}

+ 1 - 1
src/wxcomponents/vant/col/index.d.ts

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

+ 9 - 9
src/wxcomponents/vant/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,
-  },
-});
+import { useParent } from '../common/relation';
+import { VantComponent } from '../common/component';
+VantComponent({
+    relation: useParent('row'),
+    props: {
+        span: Number,
+        offset: Number,
+    },
+});

+ 3 - 3
src/wxcomponents/vant/col/index.json

@@ -1,3 +1,3 @@
-{
-  "component": true
-}
+{
+  "component": true
+}

+ 0 - 23
src/wxcomponents/vant/col/index.vue

@@ -1,23 +0,0 @@
-<template>
-<uni-shadow-root class="vant-col-index"><view :class="'custom-class '+(utils.bem('col', [span]))+' '+(offset ? 'van-col--offset-' + offset : '')" :style="computed.rootStyle({ gutter })">
-  <slot></slot>
-</view></uni-shadow-root>
-</template>
-<wxs src="../wxs/utils.wxs" module="utils"></wxs><wxs src="./index.wxs" module="computed"></wxs>
-<script>
-
-global['__wxRoute'] = 'vant/col/index'
-import { useParent } from '../common/relation';
-import { VantComponent } from '../common/component';
-VantComponent({
-  relation: useParent('row'),
-  props: {
-    span: Number,
-    offset: Number,
-  },
-});
-export default global['__wxComponents']['vant/col/index']
-</script>
-<style platform="mp-weixin">
-@import '../common/index.css';.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%}
-</style>

+ 9 - 9
src/wxcomponents/vant/col/index.wxml

@@ -1,9 +1,9 @@
-<wxs src="../wxs/utils.wxs" module="utils" />
-<wxs src="./index.wxs" module="computed" />
-
-<view
-  class="custom-class {{ utils.bem('col', [span]) }} {{ offset ? 'van-col--offset-' + offset : '' }}"
-  style="{{ computed.rootStyle({ gutter }) }}"
->
-  <slot />
-</view>
+<wxs src="../wxs/utils.wxs" module="utils" />
+<wxs src="./index.wxs" module="computed" />
+
+<view
+  class="custom-class {{ utils.bem('col', [span]) }} {{ offset ? 'van-col--offset-' + offset : '' }}"
+  style="{{ computed.rootStyle({ gutter }) }}"
+>
+  <slot />
+</view>

+ 18 - 18
src/wxcomponents/vant/col/index.wxs

@@ -1,18 +1,18 @@
-/* eslint-disable */
-var style = require('../wxs/style.wxs');
-var addUnit = require('../wxs/add-unit.wxs');
-
-function rootStyle(data) {
-  if (!data.gutter) {
-    return '';
-  }
-
-  return style({
-    'padding-right': addUnit(data.gutter / 2),
-    'padding-left': addUnit(data.gutter / 2),
-  });
-}
-
-module.exports = {
-  rootStyle: rootStyle,
-};
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function rootStyle(data) {
+  if (!data.gutter) {
+    return '';
+  }
+
+  return style({
+    'padding-right': addUnit(data.gutter / 2),
+    'padding-left': addUnit(data.gutter / 2),
+  });
+}
+
+module.exports = {
+  rootStyle: rootStyle,
+};

+ 1 - 1
src/wxcomponents/vant/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%}

+ 2 - 6
src/wxcomponents/vant/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;
+/// <reference types="miniprogram-api-typings" />
+export declare function setContentAnimate(context: WechatMiniprogram.Component.TrivialInstance, expanded: boolean, mounted: boolean): void;

+ 39 - 70
src/wxcomponents/vant/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();
-    }
-    context.setData({
-      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);
-    });
-}
+import { getRect } from '../common/utils';
+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();
+        }
+        context.setData({
+            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) => {
+        useAnimation(context, expanded, mounted, height);
+    });
+}

+ 1 - 1
src/wxcomponents/vant/collapse-item/index.d.ts

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

+ 60 - 59
src/wxcomponents/vant/collapse-item/index.js

@@ -1,59 +1,60 @@
-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,
-    },
-    isLink: {
-      type: Boolean,
-      value: true,
-    },
-  },
-  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 });
-    },
-    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);
-    },
-  },
-});
+import { VantComponent } from '../common/component';
+import { useParent } from '../common/relation';
+import { setContentAnimate } from './animate';
+VantComponent({
+    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,
+        },
+    },
+    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 });
+        },
+        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);
+        },
+    },
+});

+ 6 - 6
src/wxcomponents/vant/collapse-item/index.json

@@ -1,6 +1,6 @@
-{
-  "component": true,
-  "usingComponents": {
-    "van-cell": "../cell/index"
-  }
-}
+{
+  "component": true,
+  "usingComponents": {
+    "van-cell": "../cell/index"
+  }
+}

+ 0 - 85
src/wxcomponents/vant/collapse-item/index.vue

@@ -1,85 +0,0 @@
-<template>
-<uni-shadow-root class="vant-collapse-item-index"><view :class="'van-collapse-item custom-class '+(index !== 0 ? 'van-hairline--top' : '')">
-  <van-cell :title="title" title-class="title-class" :icon="icon" :value="value" :label="label" :is-link="isLink" :clickable="clickable" :border="border && expanded" :class="utils.bem('collapse-item__title', { disabled, expanded })" right-icon-class="van-cell__right-icon" custom-class="van-cell" hover-class="van-cell--hover" @click="onClick">
-    <slot name="title" slot="title"></slot>
-    <slot name="icon" slot="icon"></slot>
-    <slot name="value"></slot>
-    <slot name="right-icon" slot="right-icon"></slot>
-  </van-cell>
-  <view :class="utils.bem('collapse-item__wrapper')" style="height: 0;" :animation="animation">
-    <view class="van-collapse-item__content content-class">
-      <slot></slot>
-    </view>
-  </view>
-</view></uni-shadow-root>
-</template>
-<wxs src="../wxs/utils.wxs" module="utils"></wxs>
-<script>
-import VanCell from '../cell/index.vue'
-global['__wxVueOptions'] = {components:{'van-cell': VanCell}}
-
-global['__wxRoute'] = 'vant/collapse-item/index'
-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,
-    },
-    isLink: {
-      type: Boolean,
-      value: true,
-    },
-  },
-  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 });
-    },
-    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);
-    },
-  },
-});
-export default global['__wxComponents']['vant/collapse-item/index']
-</script>
-<style platform="mp-weixin">
-@import '../common/index.css';.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)}
-</style>

+ 45 - 44
src/wxcomponents/vant/collapse-item/index.wxml

@@ -1,44 +1,45 @@
-<wxs src="../wxs/utils.wxs" module="utils" />
-
-<view class="van-collapse-item custom-class {{ index !== 0 ? 'van-hairline--top' : '' }}">
-  <van-cell
-    title="{{ title }}"
-    title-class="title-class"
-    icon="{{ icon }}"
-    value="{{ value }}"
-    label="{{ label }}"
-    is-link="{{ isLink }}"
-    clickable="{{ clickable }}"
-    border="{{ border && expanded }}"
-    class="{{ utils.bem('collapse-item__title', { disabled, expanded }) }}"
-    right-icon-class="van-cell__right-icon"
-    custom-class="van-cell"
-    hover-class="van-cell--hover"
-    bind:click="onClick"
-  >
-    <slot
-      name="title"
-      slot="title"
-    />
-    <slot
-      name="icon"
-      slot="icon"
-    />
-    <slot name="value" />
-    <slot
-      name="right-icon"
-      slot="right-icon"
-    />
-  </van-cell>
-  <view
-    class="{{ utils.bem('collapse-item__wrapper') }}"
-    style="height: 0;"
-    animation="{{ animation }}"
-  >
-    <view
-      class="van-collapse-item__content content-class"
-    >
-      <slot />
-    </view>
-  </view>
-</view>
+<wxs src="../wxs/utils.wxs" module="utils" />
+
+<view class="van-collapse-item custom-class {{ index !== 0 ? 'van-hairline--top' : '' }}">
+  <van-cell
+    size="{{ size }}"
+    title="{{ title }}"
+    title-class="title-class"
+    icon="{{ icon }}"
+    value="{{ value }}"
+    label="{{ label }}"
+    is-link="{{ isLink }}"
+    clickable="{{ clickable }}"
+    border="{{ border && expanded }}"
+    class="{{ utils.bem('collapse-item__title', { disabled, expanded }) }}"
+    right-icon-class="van-cell__right-icon"
+    custom-class="van-cell"
+    hover-class="van-cell--hover"
+    bind:click="onClick"
+  >
+    <slot
+      name="title"
+      slot="title"
+    />
+    <slot
+      name="icon"
+      slot="icon"
+    />
+    <slot name="value" />
+    <slot
+      name="right-icon"
+      slot="right-icon"
+    />
+  </van-cell>
+  <view
+    class="{{ utils.bem('collapse-item__wrapper') }}"
+    style="height: 0;"
+    animation="{{ animation }}"
+  >
+    <view
+      class="van-collapse-item__content content-class"
+    >
+      <slot />
+    </view>
+  </view>
+</view>

Some files were not shown because too many files changed in this diff