默认提交
Showing
268 changed files
with
1501 additions
and
480 deletions
1 | @import "support"; | 1 | @import "support"; |
2 | 2 | ||
3 | // // Margin | ||
4 | // .u-mt-smaller { | ||
5 | // margin-top: $marginTopSmaller; | ||
6 | // } | ||
7 | |||
8 | // .u-mt-small { | ||
9 | // margin-top: $marginTopSmall; | ||
10 | // } | ||
11 | |||
12 | // .u-mt-medium { | ||
13 | // margin-top: $marginTopMedium; | ||
14 | // } | ||
15 | |||
16 | // .u-mt-large { | ||
17 | // margin-top: $marginTopLarge; | ||
18 | // } | ||
19 | |||
20 | // .u-mt-larger { | ||
21 | // margin-top: $marginTopLarger; | ||
22 | // } | ||
23 | |||
24 | // .u-mb-smaller { | ||
25 | // margin-bottom: $marginTopSmaller; | ||
26 | // } | ||
27 | |||
28 | // .u-mb-small { | ||
29 | // margin-bottom: $marginTopSmall; | ||
30 | // } | ||
31 | |||
32 | // .u-mb-medium { | ||
33 | // margin-bottom: $marginTopMedium; | ||
34 | // } | ||
35 | |||
36 | // .u-mb-large { | ||
37 | // margin-bottom: $marginTopLarge; | ||
38 | // } | ||
39 | |||
40 | // .u-mb-larger { | ||
41 | // margin-bottom: $marginTopLarger; | ||
42 | // } | ||
43 | |||
44 | // // Padding | ||
45 | // .u-pt-smaller { | ||
46 | // padding-top: $paddingTopSmaller; | ||
47 | // } | ||
48 | |||
49 | // .u-pt-small { | ||
50 | // padding-top: $paddingTopSmall; | ||
51 | // } | ||
52 | |||
53 | // .u-pt-medium { | ||
54 | // padding-top: $paddingTopMedium; | ||
55 | // } | ||
56 | |||
57 | // .u-pt-large { | ||
58 | // padding-top: $paddingTopLarge; | ||
59 | // } | ||
60 | |||
61 | // .u-pt-larger { | ||
62 | // padding-top: $paddingTopLarger; | ||
63 | // } | ||
64 | |||
65 | // .u-pb-smaller { | ||
66 | // padding-bottom: $paddingTopSmaller; | ||
67 | // } | ||
68 | |||
69 | // .u-pb-small { | ||
70 | // padding-bottom: $paddingTopSmall; | ||
71 | // } | ||
72 | |||
73 | // .u-pb-medium { | ||
74 | // padding-bottom: $paddingTopMedium; | ||
75 | // } | ||
76 | |||
77 | // .u-pb-large { | ||
78 | // padding-bottom: $paddingTopLarge; | ||
79 | // } | ||
80 | |||
81 | // .u-pb-larger { | ||
82 | // padding-bottom: $paddingTopLarger; | ||
83 | // } | ||
84 | |||
85 | // // 布局方位 | ||
86 | // .u-ta-c { | ||
87 | // text-align: center !important; | ||
88 | // } | ||
89 | |||
90 | // .u-ta-l { | ||
91 | // text-align: left !important; | ||
92 | // } | ||
93 | |||
94 | // .u-ta-r { | ||
95 | // text-align: right !important; | ||
96 | // } | ||
97 | |||
98 | // .u-fl-l { | ||
99 | // float: left; | ||
100 | // } | ||
101 | |||
102 | // .u-fl-n { | ||
103 | // float: none; | ||
104 | // } | ||
105 | |||
106 | // .u-fl-r { | ||
107 | // float: right; | ||
108 | // } | ||
109 | |||
110 | // .u-d-b { | ||
111 | // display: block; | ||
112 | // } | ||
113 | |||
114 | // .u-d-i { | ||
115 | // display: inline !important; | ||
116 | // } | ||
117 | |||
118 | // .u-d-ib { | ||
119 | // display: inline-block !important; | ||
120 | // } | ||
121 | |||
122 | // .u-d-n { | ||
123 | // display: none !important; | ||
124 | // } | ||
125 | |||
126 | // .u-d-t { | ||
127 | // display: table; | ||
128 | // table-layout: fixed; | ||
129 | // } | ||
130 | |||
131 | // .u-d-tc { | ||
132 | // display: table-cell; | ||
133 | // } | ||
134 | |||
135 | // .u-va-b { | ||
136 | // vertical-align: bottom; | ||
137 | // } | ||
138 | |||
139 | // .u-va-m { | ||
140 | // vertical-align: middle; | ||
141 | // } | ||
142 | |||
143 | // .u-va-t { | ||
144 | // vertical-align: top; | ||
145 | // } | ||
146 | |||
147 | // // clearfix | ||
148 | // .u-clearfix { | ||
149 | // @include clearfix; | ||
150 | // } | ||
151 | |||
152 | // // 虚拟格式 | ||
153 | // .u-cur-d { | ||
154 | // cursor: default; | ||
155 | // } | ||
156 | |||
157 | // .u-cur-p { | ||
158 | // cursor: pointer; | ||
159 | // } | ||
160 | |||
161 | // // flex | ||
162 | // .u-flex { | ||
163 | // display: -webkit-box; | ||
164 | // display: -webkit-flex; | ||
165 | // display: flex; | ||
166 | // } | ||
167 | |||
168 | // .u-flex-item { | ||
169 | // -webkit-box-flex: 1; | ||
170 | // -webkit-flex: 1; | ||
171 | // flex: 1; | ||
172 | // } | ||
173 | |||
174 | // // 小程序中模拟ul、li | ||
175 | // .u-ul { | ||
176 | // padding-left: 30px; | ||
177 | // text-align: left; | ||
178 | // display: block; | ||
179 | // } | ||
180 | |||
181 | // .u-li { | ||
182 | // position: relative; | ||
183 | // font-size: $fontSizeSmall; | ||
184 | // line-height: $fontSizeSmall + 4px; | ||
185 | // margin-bottom: $marginTopSmall; | ||
186 | // &:before { | ||
187 | // position: absolute; | ||
188 | // content: " "; | ||
189 | // top: 14px; | ||
190 | // left: -20px; | ||
191 | // width: 8px; | ||
192 | // height: 8px; | ||
193 | // border-radius: 8px; | ||
194 | // background-color: $colorBlack; | ||
195 | // } | ||
196 | // } | ||
197 | |||
198 | |||
199 | 3 | ||
200 | .bis { | 4 | .bis { |
201 | background-repeat: no-repeat; | 5 | background-repeat: no-repeat; |
... | @@ -213,6 +17,10 @@ | ... | @@ -213,6 +17,10 @@ |
213 | justify-content: space-between; | 17 | justify-content: space-between; |
214 | } | 18 | } |
215 | 19 | ||
20 | .fla{ | ||
21 | display: flex; | ||
22 | align-items: center; | ||
23 | } | ||
216 | 24 | ||
217 | 25 | ||
218 | .fje { | 26 | .fje { | ... | ... |
... | @@ -57,10 +57,24 @@ Component({ | ... | @@ -57,10 +57,24 @@ Component({ |
57 | }, | 57 | }, |
58 | onStepperChange(e) { | 58 | onStepperChange(e) { |
59 | let val = e.detail; | 59 | let val = e.detail; |
60 | if(val > this.properties.productInfo.maxNum) val = this.properties.productInfo.maxNum; | 60 | // if(val > this.properties.productInfo.maxNum) val = this.properties.productInfo.maxNum; |
61 | if(val < this.properties.productInfo.minNum) val = this.properties.productInfo.minNum; | 61 | // if(val < this.properties.productInfo.minNum) val = this.properties.productInfo.minNum; |
62 | this.setNum(val); | 62 | this.setNum(val); |
63 | }, | 63 | }, |
64 | onStepperBlur(e) { | ||
65 | let val = e.detail.value; | ||
66 | this.fixStepperVal(val); | ||
67 | }, | ||
68 | onStepperMod(e) { | ||
69 | let val = this.data.num; | ||
70 | this.fixStepperVal(val); | ||
71 | }, | ||
72 | fixStepperVal(val) { | ||
73 | if (val > this.properties.productInfo.maxNum) val = this.properties.productInfo.maxNum; | ||
74 | if (val < this.properties.productInfo.minNum) val = this.properties.productInfo.minNum; | ||
75 | this.setNum(val); | ||
76 | }, | ||
77 | |||
64 | bindRemarkInput(e) { | 78 | bindRemarkInput(e) { |
65 | this.setData({ | 79 | this.setData({ |
66 | remark: e.detail.value | 80 | remark: e.detail.value | ... | ... |
... | @@ -44,8 +44,8 @@ | ... | @@ -44,8 +44,8 @@ |
44 | 44 | ||
45 | .prize { | 45 | .prize { |
46 | .image { | 46 | .image { |
47 | width: 180px; | 47 | width: 200px; |
48 | height: 180px; | 48 | height: 200px; |
49 | } | 49 | } |
50 | } | 50 | } |
51 | 51 | ||
... | @@ -71,9 +71,9 @@ | ... | @@ -71,9 +71,9 @@ |
71 | } | 71 | } |
72 | 72 | ||
73 | .t2 { | 73 | .t2 { |
74 | // margin-top: 16px; | 74 | margin-top: 4px; |
75 | display: flex; | 75 | // display: flex; |
76 | align-items: center; | 76 | // align-items: center; |
77 | 77 | ||
78 | .t2-1 { | 78 | .t2-1 { |
79 | font-size: 30px; | 79 | font-size: 30px; |
... | @@ -82,12 +82,17 @@ | ... | @@ -82,12 +82,17 @@ |
82 | .t2-2 { | 82 | .t2-2 { |
83 | font-size: 20px; | 83 | font-size: 20px; |
84 | color: #888888; | 84 | color: #888888; |
85 | // margin-left: 20px; | ||
86 | } | ||
87 | |||
88 | .ml-20{ | ||
85 | margin-left: 20px; | 89 | margin-left: 20px; |
86 | } | 90 | } |
87 | } | 91 | } |
88 | 92 | ||
89 | .t3 { | 93 | .t3 { |
90 | font-size: 36px; | 94 | font-size: 36px; |
95 | |||
91 | } | 96 | } |
92 | } | 97 | } |
93 | } | 98 | } | ... | ... |
... | @@ -12,10 +12,11 @@ | ... | @@ -12,10 +12,11 @@ |
12 | <view class="con"> | 12 | <view class="con"> |
13 | <view class="tt t1">{{productInfo.seckillName}}</view> | 13 | <view class="tt t1">{{productInfo.seckillName}}</view> |
14 | <block wx:if="{{productInfo.minNum == productInfo.maxNum}}"> | 14 | <block wx:if="{{productInfo.minNum == productInfo.maxNum}}"> |
15 | <!-- <block wx:if="{{1>0}}"> --> | ||
15 | <!-- 固定个数 --> | 16 | <!-- 固定个数 --> |
16 | <view class="tt t2" wx:if="{{orderStatus != 1}}"> | 17 | <view class="tt t2 fla" wx:if="{{orderStatus != 1}}"> |
17 | <view class="t2-1">{{productInfo.minNum}}个</view> | 18 | <view class="t2-1">{{productInfo.minNum}}个</view> |
18 | <view class="t2-2">数量不可修改</view> | 19 | <view class="t2-2 ml-20">数量不可修改</view> |
19 | </view> | 20 | </view> |
20 | <view class="num" wx:else>{{num}}个</view> | 21 | <view class="num" wx:else>{{num}}个</view> |
21 | </block> | 22 | </block> |
... | @@ -23,7 +24,8 @@ | ... | @@ -23,7 +24,8 @@ |
23 | <!-- 不定个数 --> | 24 | <!-- 不定个数 --> |
24 | <view class="tt t2" wx:if="{{orderStatus != 1}}"> | 25 | <view class="tt t2" wx:if="{{orderStatus != 1}}"> |
25 | <view class="t2-1"> | 26 | <view class="t2-1"> |
26 | <van-stepper bind:change="onStepperChange" value="{{ num }}" min="{{productInfo.minNum}}" max="{{productInfo.maxNum}}" integer /> | 27 | <!-- <van-stepper bind:change="onStepperChange" value="{{ num }}" min="{{productInfo.minNum}}" max="{{productInfo.maxNum}}" integer /> --> |
28 | <van-stepper button-size="32px" input-width="64px" bind:change="onStepperChange" min="{{0}}" value="{{ num }}" integer bind:blur="onStepperBlur" bind:plus="onStepperMod" bind:minus="onStepperMod" /> | ||
27 | </view> | 29 | </view> |
28 | <view class="t2-2">可选填{{productInfo.minNum}}-{{productInfo.maxNum}}个</view> | 30 | <view class="t2-2">可选填{{productInfo.minNum}}-{{productInfo.maxNum}}个</view> |
29 | </view> | 31 | </view> |
... | @@ -40,7 +42,7 @@ | ... | @@ -40,7 +42,7 @@ |
40 | </view> | 42 | </view> |
41 | <!-- 表单 --> | 43 | <!-- 表单 --> |
42 | <view class="table" wx:else> | 44 | <view class="table" wx:else> |
43 | <view class="tips">*本活动仅记录订单,无需付款,后期由线下工作人员另行安排支付与配送,请确保收货信息准确。</view> | 45 | <view class="tips">*本活动仅记录订单,无需付款,后期由线下工作人员另行安排支付与配送,请确保信息准确。</view> |
44 | <view class="form"> | 46 | <view class="form"> |
45 | <view class="form-item"> | 47 | <view class="form-item"> |
46 | <view class="label">收件人:</view> | 48 | <view class="label">收件人:</view> | ... | ... |
... | @@ -2,7 +2,7 @@ let ENV_CONFIG = require('./env/index'); | ... | @@ -2,7 +2,7 @@ let ENV_CONFIG = require('./env/index'); |
2 | 2 | ||
3 | const APPID = '' | 3 | const APPID = '' |
4 | /** ====每次发布版本记得修改此环境配置==== */ | 4 | /** ====每次发布版本记得修改此环境配置==== */ |
5 | const ENV = 'Prod'; // Dev Prod | 5 | const ENV = 'Dev'; // Dev Prod |
6 | const NET_CONFIG = ENV_CONFIG[ENV]; | 6 | const NET_CONFIG = ENV_CONFIG[ENV]; |
7 | const MOCKAPI = ENV_CONFIG.mockApi; | 7 | const MOCKAPI = ENV_CONFIG.mockApi; |
8 | 8 | ... | ... |
... | @@ -243,7 +243,7 @@ Page({ | ... | @@ -243,7 +243,7 @@ Page({ |
243 | price: price * 100 //转成分 | 243 | price: price * 100 //转成分 |
244 | } | 244 | } |
245 | }).then((result) => { | 245 | }).then((result) => { |
246 | console.log("result:", result); | 246 | // console.log("result:", result); |
247 | this.queryAuctionRecordLast().then((res2) => { | 247 | this.queryAuctionRecordLast().then((res2) => { |
248 | this.setData({ | 248 | this.setData({ |
249 | auctionBidSuccessVisible: true | 249 | auctionBidSuccessVisible: true |
... | @@ -337,7 +337,7 @@ Page({ | ... | @@ -337,7 +337,7 @@ Page({ |
337 | let parseData = JSON.parse(socketData); | 337 | let parseData = JSON.parse(socketData); |
338 | result = parseData && parseData.content || null; | 338 | result = parseData && parseData.content || null; |
339 | } | 339 | } |
340 | console.log("result:", result); | 340 | // console.log("result:", result); |
341 | 341 | ||
342 | if (!result) return; | 342 | if (!result) return; |
343 | let priceInfo = result.list || []; | 343 | let priceInfo = result.list || []; | ... | ... |
... | @@ -7,6 +7,7 @@ let app = getApp(); | ... | @@ -7,6 +7,7 @@ let app = getApp(); |
7 | Page({ | 7 | Page({ |
8 | data: { | 8 | data: { |
9 | authorizeVisible: false, | 9 | authorizeVisible: false, |
10 | signTipsCompVisible:false, | ||
10 | isInit: false, | 11 | isInit: false, |
11 | total: 0, | 12 | total: 0, |
12 | page: 1, | 13 | page: 1, |
... | @@ -70,6 +71,10 @@ Page({ | ... | @@ -70,6 +71,10 @@ Page({ |
70 | title: curData.auctionName | 71 | title: curData.auctionName |
71 | } | 72 | } |
72 | }) | 73 | }) |
74 | } else if(curData.isCanDetail == 2){ | ||
75 | this.setData({ | ||
76 | signTipsCompVisible: true, | ||
77 | }) | ||
73 | } else { | 78 | } else { |
74 | wx.showModal({ | 79 | wx.showModal({ |
75 | content: curData.reason || "您未达到进入条件", | 80 | content: curData.reason || "您未达到进入条件", |
... | @@ -111,10 +116,21 @@ Page({ | ... | @@ -111,10 +116,21 @@ Page({ |
111 | }) | 116 | }) |
112 | }, | 117 | }, |
113 | 118 | ||
119 | /** | ||
120 | * 去验证 | ||
121 | */ | ||
122 | toVipLoginHandler() { | ||
123 | app.router.push({ | ||
124 | openType: "redirect", | ||
125 | path: "vipLogin" | ||
126 | }) | ||
127 | }, | ||
128 | |||
114 | // 隐藏蒙层 | 129 | // 隐藏蒙层 |
115 | hideMask() { | 130 | hideMask() { |
116 | this.setData({ | 131 | this.setData({ |
117 | authorizeVisible: false, | 132 | authorizeVisible: false, |
133 | signTipsCompVisible: false, | ||
118 | }) | 134 | }) |
119 | }, | 135 | }, |
120 | // 子组件事件 | 136 | // 子组件事件 |
... | @@ -125,6 +141,19 @@ Page({ | ... | @@ -125,6 +141,19 @@ Page({ |
125 | } = evt.detail; | 141 | } = evt.detail; |
126 | switch (name) { | 142 | switch (name) { |
127 | 143 | ||
144 | |||
145 | // 去验证 | ||
146 | case "_evt_to_verify": | ||
147 | this.hideMask(); | ||
148 | this.toVipLoginHandler(); | ||
149 | break; | ||
150 | |||
151 | |||
152 | // 暂不验证 | ||
153 | case "_evt_not_verify": | ||
154 | this.hideMask(); | ||
155 | break; | ||
156 | |||
128 | // 隐藏弹窗 | 157 | // 隐藏弹窗 |
129 | case "_evt_hide_mask": | 158 | case "_evt_hide_mask": |
130 | this.hideMask(); | 159 | this.hideMask(); | ... | ... |
... | @@ -36,3 +36,7 @@ | ... | @@ -36,3 +36,7 @@ |
36 | <van-popup show="{{ authorizeVisible }}"> | 36 | <van-popup show="{{ authorizeVisible }}"> |
37 | <authorize-comp bind:evtcomp="evtcomp"></authorize-comp> | 37 | <authorize-comp bind:evtcomp="evtcomp"></authorize-comp> |
38 | </van-popup> | 38 | </van-popup> |
39 | |||
40 | <van-popup show="{{ signTipsCompVisible }}"> | ||
41 | <sign-tips-comp bind:evtcomp="evtcomp"></sign-tips-comp> | ||
42 | </van-popup> | ... | ... |
... | @@ -147,7 +147,7 @@ Page({ | ... | @@ -147,7 +147,7 @@ Page({ |
147 | this.setData({ | 147 | this.setData({ |
148 | productInfo: result | 148 | productInfo: result |
149 | }) | 149 | }) |
150 | console.log("result:", result); | 150 | // console.log("result:", result); |
151 | resolve(); | 151 | resolve(); |
152 | }).catch((err) => { | 152 | }).catch((err) => { |
153 | if (err.code == 1002) { | 153 | if (err.code == 1002) { |
... | @@ -178,7 +178,7 @@ Page({ | ... | @@ -178,7 +178,7 @@ Page({ |
178 | url: app.api.seckillSubmit, | 178 | url: app.api.seckillSubmit, |
179 | data: data | 179 | data: data |
180 | }).then((result) => { | 180 | }).then((result) => { |
181 | console.log("result:", result); | 181 | // console.log("result:", result); |
182 | this.setData({ | 182 | this.setData({ |
183 | orderStatus: 1, | 183 | orderStatus: 1, |
184 | }) | 184 | }) | ... | ... |
... | @@ -7,6 +7,7 @@ let app = getApp(); | ... | @@ -7,6 +7,7 @@ let app = getApp(); |
7 | Page({ | 7 | Page({ |
8 | data: { | 8 | data: { |
9 | authorizeVisible: false, | 9 | authorizeVisible: false, |
10 | signTipsCompVisible:false, | ||
10 | isInit: false, | 11 | isInit: false, |
11 | total: 0, | 12 | total: 0, |
12 | page: 1, | 13 | page: 1, |
... | @@ -63,6 +64,7 @@ Page({ | ... | @@ -63,6 +64,7 @@ Page({ |
63 | onDetailHandler(evt) { | 64 | onDetailHandler(evt) { |
64 | let curData = getBindtapData(evt); | 65 | let curData = getBindtapData(evt); |
65 | console.log("curData:", curData); | 66 | console.log("curData:", curData); |
67 | // curData.isCanDetail = 2; | ||
66 | if (curData.status == 0 || curData.status == 1) { | 68 | if (curData.status == 0 || curData.status == 1) { |
67 | if (curData.isCanDetail == 1) { | 69 | if (curData.isCanDetail == 1) { |
68 | app.router.push({ | 70 | app.router.push({ |
... | @@ -71,6 +73,10 @@ Page({ | ... | @@ -71,6 +73,10 @@ Page({ |
71 | code: curData.seckillCode, | 73 | code: curData.seckillCode, |
72 | } | 74 | } |
73 | }) | 75 | }) |
76 | } else if(curData.isCanDetail == 2){ | ||
77 | this.setData({ | ||
78 | signTipsCompVisible: true, | ||
79 | }) | ||
74 | } else { | 80 | } else { |
75 | wx.showModal({ | 81 | wx.showModal({ |
76 | content: curData.reason || "您未达到进入条件", | 82 | content: curData.reason || "您未达到进入条件", |
... | @@ -106,10 +112,21 @@ Page({ | ... | @@ -106,10 +112,21 @@ Page({ |
106 | }) | 112 | }) |
107 | }, | 113 | }, |
108 | 114 | ||
115 | /** | ||
116 | * 去验证 | ||
117 | */ | ||
118 | toVipLoginHandler() { | ||
119 | app.router.push({ | ||
120 | openType: "redirect", | ||
121 | path: "vipLogin" | ||
122 | }) | ||
123 | }, | ||
124 | |||
109 | // 隐藏蒙层 | 125 | // 隐藏蒙层 |
110 | hideMask() { | 126 | hideMask() { |
111 | this.setData({ | 127 | this.setData({ |
112 | authorizeVisible: false, | 128 | authorizeVisible: false, |
129 | signTipsCompVisible: false, | ||
113 | }) | 130 | }) |
114 | }, | 131 | }, |
115 | // 子组件事件 | 132 | // 子组件事件 |
... | @@ -120,6 +137,18 @@ Page({ | ... | @@ -120,6 +137,18 @@ Page({ |
120 | } = evt.detail; | 137 | } = evt.detail; |
121 | switch (name) { | 138 | switch (name) { |
122 | 139 | ||
140 | // 去验证 | ||
141 | case "_evt_to_verify": | ||
142 | this.hideMask(); | ||
143 | this.toVipLoginHandler(); | ||
144 | break; | ||
145 | |||
146 | // 暂不验证 | ||
147 | case "_evt_not_verify": | ||
148 | this.hideMask(); | ||
149 | break; | ||
150 | |||
151 | |||
123 | // 隐藏弹窗 | 152 | // 隐藏弹窗 |
124 | case "_evt_hide_mask": | 153 | case "_evt_hide_mask": |
125 | this.hideMask(); | 154 | this.hideMask(); | ... | ... |
... | @@ -36,3 +36,7 @@ | ... | @@ -36,3 +36,7 @@ |
36 | <van-popup show="{{ authorizeVisible }}"> | 36 | <van-popup show="{{ authorizeVisible }}"> |
37 | <authorize-comp bind:evtcomp="evtcomp"></authorize-comp> | 37 | <authorize-comp bind:evtcomp="evtcomp"></authorize-comp> |
38 | </van-popup> | 38 | </van-popup> |
39 | |||
40 | <van-popup show="{{ signTipsCompVisible }}"> | ||
41 | <sign-tips-comp bind:evtcomp="evtcomp"></sign-tips-comp> | ||
42 | </van-popup> | ... | ... |
1 | import { VantComponent } from '../common/component'; | 1 | import { VantComponent } from '../common/component'; |
2 | import { safeArea } from '../mixins/safe-area'; | ||
3 | VantComponent({ | 2 | VantComponent({ |
4 | mixins: [safeArea()], | ||
5 | props: { | 3 | props: { |
6 | show: Boolean, | 4 | show: Boolean, |
7 | title: String, | 5 | title: String, |
8 | cancelText: String, | 6 | cancelText: String, |
7 | description: String, | ||
8 | round: { | ||
9 | type: Boolean, | ||
10 | value: true | ||
11 | }, | ||
9 | zIndex: { | 12 | zIndex: { |
10 | type: Number, | 13 | type: Number, |
11 | value: 100 | 14 | value: 100 |
... | @@ -21,6 +24,14 @@ VantComponent({ | ... | @@ -21,6 +24,14 @@ VantComponent({ |
21 | closeOnClickOverlay: { | 24 | closeOnClickOverlay: { |
22 | type: Boolean, | 25 | type: Boolean, |
23 | value: true | 26 | value: true |
27 | }, | ||
28 | closeOnClickAction: { | ||
29 | type: Boolean, | ||
30 | value: true | ||
31 | }, | ||
32 | safeAreaInsetBottom: { | ||
33 | type: Boolean, | ||
34 | value: true | ||
24 | } | 35 | } |
25 | }, | 36 | }, |
26 | methods: { | 37 | methods: { |
... | @@ -29,6 +40,9 @@ VantComponent({ | ... | @@ -29,6 +40,9 @@ VantComponent({ |
29 | const item = this.data.actions[index]; | 40 | const item = this.data.actions[index]; |
30 | if (item && !item.disabled && !item.loading) { | 41 | if (item && !item.disabled && !item.loading) { |
31 | this.$emit('select', item); | 42 | this.$emit('select', item); |
43 | if (this.data.closeOnClickAction) { | ||
44 | this.onClose(); | ||
45 | } | ||
32 | } | 46 | } |
33 | }, | 47 | }, |
34 | onCancel() { | 48 | onCancel() { |
... | @@ -36,6 +50,10 @@ VantComponent({ | ... | @@ -36,6 +50,10 @@ VantComponent({ |
36 | }, | 50 | }, |
37 | onClose() { | 51 | onClose() { |
38 | this.$emit('close'); | 52 | this.$emit('close'); |
53 | }, | ||
54 | onClickOverlay() { | ||
55 | this.$emit('click-overlay'); | ||
56 | this.onClose(); | ||
39 | } | 57 | } |
40 | } | 58 | } |
41 | }); | 59 | }); | ... | ... |
... | @@ -3,12 +3,13 @@ | ... | @@ -3,12 +3,13 @@ |
3 | <van-popup | 3 | <van-popup |
4 | show="{{ show }}" | 4 | show="{{ show }}" |
5 | position="bottom" | 5 | position="bottom" |
6 | round="{{ round }}" | ||
6 | z-index="{{ zIndex }}" | 7 | z-index="{{ zIndex }}" |
7 | overlay="{{ overlay }}" | 8 | overlay="{{ overlay }}" |
8 | custom-class="van-action-sheet" | 9 | custom-class="van-action-sheet" |
9 | safe-area-inset-bottom="{{ safeAreaInsetBottom }}" | 10 | safe-area-inset-bottom="{{ safeAreaInsetBottom }}" |
10 | close-on-click-overlay="{{ closeOnClickOverlay }}" | 11 | close-on-click-overlay="{{ closeOnClickOverlay }}" |
11 | bind:close="onClose" | 12 | bind:close="onClickOverlay" |
12 | > | 13 | > |
13 | <view wx:if="{{ title }}" class="van-hairline--bottom van-action-sheet__header"> | 14 | <view wx:if="{{ title }}" class="van-hairline--bottom van-action-sheet__header"> |
14 | {{ title }} | 15 | {{ title }} |
... | @@ -18,12 +19,16 @@ | ... | @@ -18,12 +19,16 @@ |
18 | bind:click="onClose" | 19 | bind:click="onClose" |
19 | /> | 20 | /> |
20 | </view> | 21 | </view> |
22 | <view wx:if="{{ description }}" class="van-action-sheet__description"> | ||
23 | {{ description }} | ||
24 | </view> | ||
21 | <view wx:if="{{ actions && actions.length }}"> | 25 | <view wx:if="{{ actions && actions.length }}"> |
22 | <!-- button外包一层view,防止actions动态变化,导致渲染时button被打散 --> | 26 | <!-- button外包一层view,防止actions动态变化,导致渲染时button被打散 --> |
23 | <button | 27 | <button |
24 | wx:for="{{ actions }}" | 28 | wx:for="{{ actions }}" |
25 | wx:key="index" | 29 | wx:key="index" |
26 | open-type="{{ item.openType }}" | 30 | open-type="{{ item.openType }}" |
31 | style="{{ item.color ? 'color: ' + item.color : '' }}" | ||
27 | class="{{ utils.bem('action-sheet__item', { disabled: item.disabled || item.loading }) }} van-hairline--top {{ item.className || '' }}" | 32 | class="{{ utils.bem('action-sheet__item', { disabled: item.disabled || item.loading }) }} van-hairline--top {{ item.className || '' }}" |
28 | hover-class="van-action-sheet__item--hover" | 33 | hover-class="van-action-sheet__item--hover" |
29 | data-index="{{ index }}" | 34 | data-index="{{ index }}" |
... | @@ -33,7 +38,7 @@ | ... | @@ -33,7 +38,7 @@ |
33 | {{ item.name }} | 38 | {{ item.name }} |
34 | <text wx:if="{{ item.subname }}" class="van-action-sheet__subname" >{{ item.subname }}</text> | 39 | <text wx:if="{{ item.subname }}" class="van-action-sheet__subname" >{{ item.subname }}</text> |
35 | </block> | 40 | </block> |
36 | <van-loading wx:else size="20px" /> | 41 | <van-loading wx:else custom-class="van-action-sheet__loading" size="20px" /> |
37 | </button> | 42 | </button> |
38 | </view> | 43 | </view> |
39 | <slot /> | 44 | <slot /> | ... | ... |
1 | @import '../common/index.wxss';.van-action-sheet{max-height:90%!important;color:#333}.van-action-sheet__cancel,.van-action-sheet__item{height:50px;font-size:16px;line-height:50px;text-align:center;background-color:#fff}.van-action-sheet__cancel--hover,.van-action-sheet__item--hover{background-color:#f2f3f5}.van-action-sheet__cancel{height:60px}.van-action-sheet__cancel:before{display:block;height:10px;background-color:#f8f8f8;content:" "}.van-action-sheet__item--disabled{color:#c9c9c9}.van-action-sheet__item--disabled.van-action-sheet__item--hover{background-color:#fff}.van-action-sheet__subname{margin-left:5px;font-size:12px;color:#7d7e80}.van-action-sheet__header{font-size:16px;font-weight:500;line-height:44px;text-align:center}.van-action-sheet__close{position:absolute!important;top:0;right:0;padding:0 15px;font-size:18px!important;line-height:inherit!important;color:#999} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | @import '../common/index.wxss';.van-action-sheet{max-height:90%!important;max-height:var(--action-sheet-max-height,90%)!important;color:#323233;color:var(--action-sheet-item-text-color,#323233)}.van-action-sheet__cancel,.van-action-sheet__item{text-align:center;font-size:16px;font-size:var(--action-sheet-item-font-size,16px);line-height:50px;line-height:var(--action-sheet-item-height,50px);background-color:#fff;background-color:var(--action-sheet-item-background,#fff)}.van-action-sheet__cancel--hover,.van-action-sheet__item--hover{background-color:#f2f3f5;background-color:var(--active-color,#f2f3f5)}.van-action-sheet__cancel:before{display:block;content:" ";height:8px;height:var(--action-sheet-cancel-padding-top,8px);background-color:#f8f8f8;background-color:var(--action-sheet-cancel-padding-color,#f8f8f8)}.van-action-sheet__item--disabled{color:#c8c9cc;color:var(--action-sheet-item-disabled-text-color,#c8c9cc)}.van-action-sheet__item--disabled.van-action-sheet__item--hover{background-color:#fff;background-color:var(--action-sheet-item-background,#fff)}.van-action-sheet__subname{margin-left:4px;margin-left:var(--padding-base,4px);font-size:12px;font-size:var(--action-sheet-subname-font-size,12px);color:#7d7e80;color:var(--action-sheet-subname-color,#7d7e80)}.van-action-sheet__header{text-align:center;font-weight:500;font-weight:var(--font-weight-bold,500);font-size:16px;font-size:var(--action-sheet-header-font-size,16px);line-height:44px;line-height:var(--action-sheet-header-height,44px)}.van-action-sheet__description{text-align:center;padding:16px;padding:var(--padding-md,16px);color:#7d7e80;color:var(--action-sheet-description-color,#7d7e80);font-size:14px;font-size:var(--action-sheet-description-font-size,14px);line-height:20px;line-height:var(--action-sheet-description-line-height,20px)}.van-action-sheet__close{position:absolute!important;top:0;right:0;line-height:inherit!important;padding:0 12px;padding:var(--action-sheet-close-icon-padding,0 12px);font-size:18px!important;font-size:var(--action-sheet-close-icon-size,18px)!important;color:#969799;color:var(--action-sheet-close-icon-color,#969799)}.van-action-sheet__loading{display:-webkit-flex!important;display:flex!important;height:50px;height:var(--action-sheet-item-height,50px)} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | import { VantComponent } from '../common/component'; | 1 | import { VantComponent } from '../common/component'; |
2 | import { pickerProps } from '../picker/shared'; | ||
3 | const COLUMNSPLACEHOLDERCODE = '000000'; | ||
2 | VantComponent({ | 4 | VantComponent({ |
3 | classes: ['active-class', 'toolbar-class', 'column-class'], | 5 | classes: ['active-class', 'toolbar-class', 'column-class'], |
4 | props: { | 6 | props: Object.assign(Object.assign({}, pickerProps), { value: String, areaList: { |
5 | title: String, | ||
6 | value: String, | ||
7 | loading: Boolean, | ||
8 | cancelButtonText: String, | ||
9 | confirmButtonText: String, | ||
10 | itemHeight: { | ||
11 | type: Number, | ||
12 | value: 44 | ||
13 | }, | ||
14 | visibleItemCount: { | ||
15 | type: Number, | ||
16 | value: 5 | ||
17 | }, | ||
18 | columnsNum: { | ||
19 | type: [String, Number], | ||
20 | value: 3 | ||
21 | }, | ||
22 | areaList: { | ||
23 | type: Object, | 7 | type: Object, |
24 | value: {} | 8 | value: {} |
9 | }, columnsNum: { | ||
10 | type: null, | ||
11 | value: 3 | ||
12 | }, columnsPlaceholder: { | ||
13 | type: Array, | ||
14 | observer(val) { | ||
15 | this.setData({ | ||
16 | typeToColumnsPlaceholder: { | ||
17 | province: val[0] || '', | ||
18 | city: val[1] || '', | ||
19 | county: val[2] || '', | ||
25 | } | 20 | } |
26 | }, | 21 | }); |
22 | } | ||
23 | } }), | ||
27 | data: { | 24 | data: { |
28 | columns: [{ values: [] }, { values: [] }, { values: [] }], | 25 | columns: [{ values: [] }, { values: [] }, { values: [] }], |
29 | displayColumns: [{ values: [] }, { values: [] }, { values: [] }] | 26 | displayColumns: [{ values: [] }, { values: [] }, { values: [] }], |
27 | typeToColumnsPlaceholder: {} | ||
30 | }, | 28 | }, |
31 | watch: { | 29 | watch: { |
32 | value(value) { | 30 | value(value) { |
... | @@ -35,11 +33,16 @@ VantComponent({ | ... | @@ -35,11 +33,16 @@ VantComponent({ |
35 | }, | 33 | }, |
36 | areaList: 'setValues', | 34 | areaList: 'setValues', |
37 | columnsNum(value) { | 35 | columnsNum(value) { |
38 | this.set({ | 36 | this.setData({ |
39 | displayColumns: this.data.columns.slice(0, +value) | 37 | displayColumns: this.data.columns.slice(0, +value) |
40 | }); | 38 | }); |
41 | } | 39 | } |
42 | }, | 40 | }, |
41 | mounted() { | ||
42 | setTimeout(() => { | ||
43 | this.setValues(); | ||
44 | }, 0); | ||
45 | }, | ||
43 | methods: { | 46 | methods: { |
44 | getPicker() { | 47 | getPicker() { |
45 | if (this.picker == null) { | 48 | if (this.picker == null) { |
... | @@ -51,20 +54,38 @@ VantComponent({ | ... | @@ -51,20 +54,38 @@ VantComponent({ |
51 | this.emit('cancel', event.detail); | 54 | this.emit('cancel', event.detail); |
52 | }, | 55 | }, |
53 | onConfirm(event) { | 56 | onConfirm(event) { |
54 | this.emit('confirm', event.detail); | 57 | const { index } = event.detail; |
58 | let { value } = event.detail; | ||
59 | value = this.parseOutputValues(value); | ||
60 | this.emit('confirm', { value, index }); | ||
55 | }, | 61 | }, |
56 | emit(type, detail) { | 62 | emit(type, detail) { |
57 | detail.values = detail.value; | 63 | detail.values = detail.value; |
58 | delete detail.value; | 64 | delete detail.value; |
59 | this.$emit(type, detail); | 65 | this.$emit(type, detail); |
60 | }, | 66 | }, |
67 | // parse output columns data | ||
68 | parseOutputValues(values) { | ||
69 | const { columnsPlaceholder } = this.data; | ||
70 | return values.map((value, index) => { | ||
71 | // save undefined value | ||
72 | if (!value) | ||
73 | return value; | ||
74 | value = JSON.parse(JSON.stringify(value)); | ||
75 | if (!value.code || value.name === columnsPlaceholder[index]) { | ||
76 | value.code = ''; | ||
77 | value.name = ''; | ||
78 | } | ||
79 | return value; | ||
80 | }); | ||
81 | }, | ||
61 | onChange(event) { | 82 | onChange(event) { |
62 | const { index, picker, value } = event.detail; | 83 | const { index, picker, value } = event.detail; |
63 | this.code = value[index].code; | 84 | this.code = value[index].code; |
64 | this.setValues().then(() => { | 85 | this.setValues().then(() => { |
65 | this.$emit('change', { | 86 | this.$emit('change', { |
66 | picker, | 87 | picker, |
67 | values: picker.getValues(), | 88 | values: this.parseOutputValues(picker.getValues()), |
68 | index | 89 | index |
69 | }); | 90 | }); |
70 | }); | 91 | }); |
... | @@ -74,6 +95,7 @@ VantComponent({ | ... | @@ -74,6 +95,7 @@ VantComponent({ |
74 | return (areaList && areaList[`${type}_list`]) || {}; | 95 | return (areaList && areaList[`${type}_list`]) || {}; |
75 | }, | 96 | }, |
76 | getList(type, code) { | 97 | getList(type, code) { |
98 | const { typeToColumnsPlaceholder } = this.data; | ||
77 | let result = []; | 99 | let result = []; |
78 | if (type !== 'province' && !code) { | 100 | if (type !== 'province' && !code) { |
79 | return result; | 101 | return result; |
... | @@ -90,6 +112,14 @@ VantComponent({ | ... | @@ -90,6 +112,14 @@ VantComponent({ |
90 | } | 112 | } |
91 | result = result.filter(item => item.code.indexOf(code) === 0); | 113 | result = result.filter(item => item.code.indexOf(code) === 0); |
92 | } | 114 | } |
115 | if (typeToColumnsPlaceholder[type] && result.length) { | ||
116 | // set columns placeholder | ||
117 | const codeFill = type === 'province' ? '' : type === 'city' ? COLUMNSPLACEHOLDERCODE.slice(2, 4) : COLUMNSPLACEHOLDERCODE.slice(4, 6); | ||
118 | result.unshift({ | ||
119 | code: `${code}${codeFill}`, | ||
120 | name: typeToColumnsPlaceholder[type] | ||
121 | }); | ||
122 | } | ||
93 | return result; | 123 | return result; |
94 | }, | 124 | }, |
95 | getIndex(type, code) { | 125 | getIndex(type, code) { |
... | @@ -109,7 +139,18 @@ VantComponent({ | ... | @@ -109,7 +139,18 @@ VantComponent({ |
109 | }, | 139 | }, |
110 | setValues() { | 140 | setValues() { |
111 | const county = this.getConfig('county'); | 141 | const county = this.getConfig('county'); |
112 | let code = this.code || Object.keys(county)[0] || ''; | 142 | let { code } = this; |
143 | if (!code) { | ||
144 | if (this.data.columnsPlaceholder.length) { | ||
145 | code = COLUMNSPLACEHOLDERCODE; | ||
146 | } | ||
147 | else if (Object.keys(county)[0]) { | ||
148 | code = Object.keys(county)[0]; | ||
149 | } | ||
150 | else { | ||
151 | code = ''; | ||
152 | } | ||
153 | } | ||
113 | const province = this.getList('province'); | 154 | const province = this.getList('province'); |
114 | const city = this.getList('city', code.slice(0, 2)); | 155 | const city = this.getList('city', code.slice(0, 2)); |
115 | const picker = this.getPicker(); | 156 | const picker = this.getPicker(); |
... | @@ -120,7 +161,6 @@ VantComponent({ | ... | @@ -120,7 +161,6 @@ VantComponent({ |
120 | stack.push(picker.setColumnValues(0, province, false)); | 161 | stack.push(picker.setColumnValues(0, province, false)); |
121 | stack.push(picker.setColumnValues(1, city, false)); | 162 | stack.push(picker.setColumnValues(1, city, false)); |
122 | if (city.length && code.slice(2, 4) === '00') { | 163 | if (city.length && code.slice(2, 4) === '00') { |
123 | ; | ||
124 | [{ code }] = city; | 164 | [{ code }] = city; |
125 | } | 165 | } |
126 | stack.push(picker.setColumnValues(2, this.getList('county', code.slice(0, 4)), false)); | 166 | stack.push(picker.setColumnValues(2, this.getList('county', code.slice(0, 4)), false)); |
... | @@ -162,8 +202,8 @@ VantComponent({ | ... | @@ -162,8 +202,8 @@ VantComponent({ |
162 | } | 202 | } |
163 | return area; | 203 | return area; |
164 | }, | 204 | }, |
165 | reset() { | 205 | reset(code) { |
166 | this.code = ''; | 206 | this.code = code || ''; |
167 | return this.setValues(); | 207 | return this.setValues(); |
168 | } | 208 | } |
169 | } | 209 | } | ... | ... |
1 | @import '../common/index.wxss';.van-badge-group{width:85px} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
src/ui/vant-weapp/badge/index.wxss
deleted
100755 → 0
1 | @import '../common/index.wxss';.van-badge{display:block;padding:20px 12px 20px 9px;overflow:hidden;font-size:14px;line-height:1.4;color:#7d7e80;word-break:break-all;background-color:#f8f8f8;border-left:3px solid transparent;box-sizing:border-box;-webkit-user-select:none;user-select:none}.van-badge--hover{background-color:#f2f3f5}.van-badge:after{border-bottom-width:1px}.van-badge--active{font-weight:700;color:#333;border-color:#f44}.van-badge--active:after{border-right-width:1px}.van-badge--active,.van-badge--active.van-badge--hover{background-color:#fff}.van-badge__text{position:relative} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
... | @@ -4,7 +4,11 @@ import { openType } from '../mixins/open-type'; | ... | @@ -4,7 +4,11 @@ import { openType } from '../mixins/open-type'; |
4 | VantComponent({ | 4 | VantComponent({ |
5 | mixins: [button, openType], | 5 | mixins: [button, openType], |
6 | classes: ['hover-class', 'loading-class'], | 6 | classes: ['hover-class', 'loading-class'], |
7 | data: { | ||
8 | style: '' | ||
9 | }, | ||
7 | props: { | 10 | props: { |
11 | icon: String, | ||
8 | plain: Boolean, | 12 | plain: Boolean, |
9 | block: Boolean, | 13 | block: Boolean, |
10 | round: Boolean, | 14 | round: Boolean, |
... | @@ -13,6 +17,11 @@ VantComponent({ | ... | @@ -13,6 +17,11 @@ VantComponent({ |
13 | hairline: Boolean, | 17 | hairline: Boolean, |
14 | disabled: Boolean, | 18 | disabled: Boolean, |
15 | loadingText: String, | 19 | loadingText: String, |
20 | customStyle: String, | ||
21 | loadingType: { | ||
22 | type: String, | ||
23 | value: 'circular' | ||
24 | }, | ||
16 | type: { | 25 | type: { |
17 | type: String, | 26 | type: String, |
18 | value: 'default' | 27 | value: 'default' |
... | @@ -24,6 +33,29 @@ VantComponent({ | ... | @@ -24,6 +33,29 @@ VantComponent({ |
24 | loadingSize: { | 33 | loadingSize: { |
25 | type: String, | 34 | type: String, |
26 | value: '20px' | 35 | value: '20px' |
36 | }, | ||
37 | color: { | ||
38 | type: String, | ||
39 | observer(color) { | ||
40 | let style = ''; | ||
41 | if (color) { | ||
42 | style += `color: ${this.data.plain ? color : 'white'};`; | ||
43 | if (!this.data.plain) { | ||
44 | // Use background instead of backgroundColor to make linear-gradient work | ||
45 | style += `background: ${color};`; | ||
46 | } | ||
47 | // hide border when color is linear-gradient | ||
48 | if (color.indexOf('gradient') !== -1) { | ||
49 | style += 'border: 0;'; | ||
50 | } | ||
51 | else { | ||
52 | style += `border-color: ${color};`; | ||
53 | } | ||
54 | } | ||
55 | if (style !== this.data.style) { | ||
56 | this.setData({ style }); | ||
57 | } | ||
58 | } | ||
27 | } | 59 | } |
28 | }, | 60 | }, |
29 | methods: { | 61 | methods: { | ... | ... |
... | @@ -3,9 +3,10 @@ | ... | @@ -3,9 +3,10 @@ |
3 | <button | 3 | <button |
4 | id="{{ id }}" | 4 | id="{{ id }}" |
5 | class="custom-class {{ utils.bem('button', [type, size, { block, round, plain, square, loading, disabled, hairline, unclickable: disabled || loading }]) }} {{ hairline ? 'van-hairline--surround' : '' }}" | 5 | class="custom-class {{ utils.bem('button', [type, size, { block, round, plain, square, loading, disabled, hairline, unclickable: disabled || loading }]) }} {{ hairline ? 'van-hairline--surround' : '' }}" |
6 | open-type="{{ openType }}" | ||
7 | hover-class="van-button--active hover-class" | 6 | hover-class="van-button--active hover-class" |
8 | lang="{{ lang }}" | 7 | lang="{{ lang }}" |
8 | style="{{ style }} {{ customStyle }}" | ||
9 | open-type="{{ openType }}" | ||
9 | business-id="{{ businessId }}" | 10 | business-id="{{ businessId }}" |
10 | session-from="{{ sessionFrom }}" | 11 | session-from="{{ sessionFrom }}" |
11 | send-message-title="{{ sendMessageTitle }}" | 12 | send-message-title="{{ sendMessageTitle }}" |
... | @@ -26,7 +27,8 @@ | ... | @@ -26,7 +27,8 @@ |
26 | <van-loading | 27 | <van-loading |
27 | custom-class="loading-class" | 28 | custom-class="loading-class" |
28 | size="{{ loadingSize }}" | 29 | size="{{ loadingSize }}" |
29 | color="{{ type === 'default' ? '#c9c9c9' : '' }}" | 30 | type="{{ loadingType }}" |
31 | color="{{ type === 'default' ? '#c9c9c9' : 'white' }}" | ||
30 | /> | 32 | /> |
31 | <view | 33 | <view |
32 | wx:if="{{ loadingText }}" | 34 | wx:if="{{ loadingText }}" |
... | @@ -35,5 +37,16 @@ | ... | @@ -35,5 +37,16 @@ |
35 | {{ loadingText }} | 37 | {{ loadingText }} |
36 | </view> | 38 | </view> |
37 | </block> | 39 | </block> |
38 | <slot wx:else /> | 40 | <block wx:else> |
41 | <van-icon | ||
42 | wx:if="{{ icon }}" | ||
43 | size="1.2em" | ||
44 | name="{{ icon }}" | ||
45 | class="van-button__icon" | ||
46 | custom-style="line-height: inherit;" | ||
47 | /> | ||
48 | <view class="van-button__text"> | ||
49 | <slot /> | ||
50 | </view> | ||
51 | </block> | ||
39 | </button> | 52 | </button> | ... | ... |
1 | @import '../common/index.wxss';.van-button{position:relative;display:inline-block;height:44px;padding:0;font-size:16px;line-height:42px;text-align:center;vertical-align:middle;box-sizing:border-box;border-radius:2px;-webkit-appearance:none;-webkit-text-size-adjust:100%}.van-button:before{position:absolute;top:50%;left:50%;width:100%;height:100%;background-color:#000;border:inherit;border-color:#000;border-radius:inherit;content:" ";opacity:0;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.van-button:after{border-width:0}.van-button--active:before{opacity:.15}.van-button--unclickable:after{display:none}.van-button--default{color:#333;background-color:#fff;border:1px solid #eee}.van-button--primary{color:#fff;background-color:#07c160;border:1px solid #07c160}.van-button--info{color:#fff;background-color:#1989fa;border:1px solid #1989fa}.van-button--danger{color:#fff;background-color:#f44;border:1px solid #f44}.van-button--warning{color:#fff;background-color:#ff976a;border:1px solid #ff976a}.van-button--plain{background-color:#fff}.van-button--plain.van-button--primary{color:#07c160}.van-button--plain.van-button--info{color:#1989fa}.van-button--plain.van-button--danger{color:#f44}.van-button--plain.van-button--warning{color:#ff976a}.van-button--large{width:100%;height:50px;line-height:48px}.van-button--normal{padding:0 15px;font-size:14px}.van-button--small{height:30px;min-width:60px;padding:0 8px;font-size:12px;line-height:28px}.van-button--mini{display:inline-block;width:50px;height:22px;font-size:10px;line-height:20px}.van-button--mini+.van-button--mini{margin-left:5px}.van-button--block{display:block;width:100%}.van-button--round{border-radius:10em}.van-button--square{border-radius:0}.van-button--disabled{opacity:.5}.van-button__loading-text{margin-left:5px;display:inline-block;vertical-align:middle}.van-button--hairline{border-width:0;padding-top:1px}.van-button--hairline:after{border-width:1px;border-color:inherit;border-radius:4px}.van-button--hairline.van-button--round:after{border-radius:10em}.van-button--hairline.van-button--square:after{border-radius:0} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | @import '../common/index.wxss';.van-button{position:relative;display:-webkit-inline-flex;display:inline-flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:border-box;padding:0;line-height:20px;text-align:center;vertical-align:middle;-webkit-appearance:none;-webkit-text-size-adjust:100%;height:44px;height:var(--button-default-height,44px);font-size:16px;font-size:var(--button-default-font-size,16px);transition:opacity .2s;transition:opacity var(--animation-duration-fast,.2s);border-radius:2px;border-radius:var(--button-border-radius,2px)}.van-button:before{position:absolute;top:50%;left:50%;width:100%;height:100%;border:inherit;border-radius:inherit;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);opacity:0;content:" ";background-color:#000;background-color:var(--black,#000);border-color:#000;border-color:var(--black,#000)}.van-button:after{border-width:0}.van-button--active:before{opacity:.15}.van-button--unclickable:after{display:none}.van-button--default{color:#323233;color:var(--button-default-color,#323233);background-color:#fff;background-color:var(--button-default-background-color,#fff);border:1px solid #ebedf0;border:1px solid var(--button-default-border-color,#ebedf0)}.van-button--primary{color:#fff;color:var(--button-primary-color,#fff);background-color:#07c160;background-color:var(--button-primary-background-color,#07c160);border:1px solid #07c160;border:1px solid var(--button-primary-border-color,#07c160)}.van-button--info{color:#fff;color:var(--button-info-color,#fff);background-color:#1989fa;background-color:var(--button-info-background-color,#1989fa);border:1px solid #1989fa;border:1px solid var(--button-info-border-color,#1989fa)}.van-button--danger{color:#fff;color:var(--button-danger-color,#fff);background-color:#ee0a24;background-color:var(--button-danger-background-color,#ee0a24);border:1px solid #ee0a24;border:1px solid var(--button-danger-border-color,#ee0a24)}.van-button--warning{color:#fff;color:var(--button-warning-color,#fff);background-color:#ff976a;background-color:var(--button-warning-background-color,#ff976a);border:1px solid #ff976a;border:1px solid var(--button-warning-border-color,#ff976a)}.van-button--plain{background-color:#fff;background-color:var(--button-plain-background-color,#fff)}.van-button--plain.van-button--primary{color:#07c160;color:var(--button-primary-background-color,#07c160)}.van-button--plain.van-button--info{color:#1989fa;color:var(--button-info-background-color,#1989fa)}.van-button--plain.van-button--danger{color:#ee0a24;color:var(--button-danger-background-color,#ee0a24)}.van-button--plain.van-button--warning{color:#ff976a;color:var(--button-warning-background-color,#ff976a)}.van-button--large{width:100%;height:50px;height:var(--button-large-height,50px)}.van-button--normal{padding:0 15px;font-size:14px;font-size:var(--button-normal-font-size,14px)}.van-button--small{min-width:60px;min-width:var(--button-small-min-width,60px);height:30px;height:var(--button-small-height,30px);padding:0 8px;padding:0 var(--padding-xs,8px);font-size:12px;font-size:var(--button-small-font-size,12px)}.van-button--mini{display:inline-block;min-width:50px;min-width:var(--button-mini-min-width,50px);height:22px;height:var(--button-mini-height,22px);font-size:10px;font-size:var(--button-mini-font-size,10px)}.van-button--mini+.van-button--mini{margin-left:5px}.van-button--block{display:-webkit-flex;display:flex;width:100%}.van-button--round{border-radius:999px;border-radius:var(--button-round-border-radius,999px)}.van-button--square{border-radius:0}.van-button--disabled{opacity:.5;opacity:var(--button-disabled-opacity,.5)}.van-button__text{display:inline}.van-button__icon+.van-button__text:not(:empty),.van-button__loading-text{margin-left:4px}.van-button__icon{min-width:1em;line-height:inherit!important;vertical-align:top}.van-button--hairline{padding-top:1px;border-width:0}.van-button--hairline:after{border-color:inherit;border-width:1px;border-radius:4px;border-radius:calc(var(--button-border-radius, 2px)*2)}.van-button--hairline.van-button--round:after{border-radius:999px;border-radius:var(--button-round-border-radius,999px)}.van-button--hairline.van-button--square:after{border-radius:0} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -34,6 +34,7 @@ | ... | @@ -34,6 +34,7 @@ |
34 | <view wx:if="{{ price || price === 0 }}" class="van-card__price price-class">{{ currency }} {{ price }}</view> | 34 | <view wx:if="{{ price || price === 0 }}" class="van-card__price price-class">{{ currency }} {{ price }}</view> |
35 | <view wx:if="{{ originPrice || originPrice === 0 }}" class="van-card__origin-price origin-price-class">{{ currency }} {{ originPrice }}</view> | 35 | <view wx:if="{{ originPrice || originPrice === 0 }}" class="van-card__origin-price origin-price-class">{{ currency }} {{ originPrice }}</view> |
36 | <view wx:if="{{ num }}" class="van-card__num num-class">x {{ num }}</view> | 36 | <view wx:if="{{ num }}" class="van-card__num num-class">x {{ num }}</view> |
37 | <slot name="bottom" /> | ||
37 | </view> | 38 | </view> |
38 | </view> | 39 | </view> |
39 | </view> | 40 | </view> | ... | ... |
1 | @import '../common/index.wxss';.van-card{position:relative;padding:5px 15px;font-size:12px;color:#333;background-color:#fafafa;box-sizing:border-box}.van-card__header{display:-webkit-flex;display:flex}.van-card__header--center{-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.van-card__thumb{position:relative;width:90px;height:90px;margin-right:10px;-webkit-flex:none;flex:none}.van-card__thumb:empty{display:none}.van-card__img{width:100%;height:100%}.van-card__content{position:relative;min-width:0;-webkit-flex:1;flex:1}.van-card__desc,.van-card__title{word-break:break-all}.van-card__title{font-weight:700;line-height:16px}.van-card__desc{color:#7d7e80}.van-card__bottom,.van-card__desc{line-height:20px}.van-card__price{display:inline-block;font-weight:700;color:#f44}.van-card__origin-price{display:inline-block;margin-left:5px;font-size:10px;color:#7d7e80;text-decoration:line-through}.van-card__num{float:right}.van-card__tag{position:absolute;top:2px;left:0}.van-card__footer{width:100%;text-align:right;-webkit-flex:none;flex:none} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | @import '../common/index.wxss';.van-card{position:relative;box-sizing:border-box;padding:8px 16px;padding:var(--card-padding,8px 16px);font-size:12px;font-size:var(--card-font-size,12px);color:#323233;color:var(--card-text-color,#323233);background-color:#fafafa;background-color:var(--card-background-color,#fafafa)}.van-card__header{display:-webkit-flex;display:flex}.van-card__header--center{-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.van-card__thumb{position:relative;-webkit-flex:none;flex:none;width:90px;width:var(--card-thumb-size,90px);height:90px;height:var(--card-thumb-size,90px);margin-right:8px;margin-right:var(--padding-xs,8px)}.van-card__thumb:empty{display:none}.van-card__img{width:100%;height:100%}.van-card__content{position:relative;-webkit-flex:1;flex:1;min-width:0}.van-card__desc,.van-card__title{word-wrap:break-word}.van-card__title{font-weight:700;line-height:16px;line-height:var(--card-title-line-height,16px)}.van-card__desc{line-height:20px;line-height:var(--card-desc-line-height,20px);color:#7d7e80;color:var(--card-desc-color,#7d7e80)}.van-card__bottom{line-height:20px}.van-card__price{display:inline-block;font-weight:700;color:#ee0a24;color:var(--card-price-color,#ee0a24)}.van-card__origin-price{display:inline-block;margin-left:5px;text-decoration:line-through;font-size:10px;font-size:var(--card-origin-price-font-size,10px);color:#7d7e80;color:var(--card-origin-price-color,#7d7e80)}.van-card__num{float:right}.van-card__tag{position:absolute;top:2px;left:0}.van-card__footer{-webkit-flex:none;flex:none;width:100%;text-align:right} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | @import '../common/index.wxss';.van-cell-group__title{font-size:14px;padding:15px 15px 5px;color:#999;line-height:16px} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
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)} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -22,6 +22,7 @@ VantComponent({ | ... | @@ -22,6 +22,7 @@ VantComponent({ |
22 | titleWidth: String, | 22 | titleWidth: String, |
23 | customStyle: String, | 23 | customStyle: String, |
24 | arrowDirection: String, | 24 | arrowDirection: String, |
25 | useLabelSlot: Boolean, | ||
25 | border: { | 26 | border: { |
26 | type: Boolean, | 27 | type: Boolean, |
27 | value: true | 28 | value: true | ... | ... |
... | @@ -19,11 +19,13 @@ | ... | @@ -19,11 +19,13 @@ |
19 | style="{{ titleWidth ? 'max-width:' + titleWidth + ';min-width:' + titleWidth : '' }}" | 19 | style="{{ titleWidth ? 'max-width:' + titleWidth + ';min-width:' + titleWidth : '' }}" |
20 | class="van-cell__title title-class" | 20 | class="van-cell__title title-class" |
21 | > | 21 | > |
22 | <block wx:if="{{ title }}"> | 22 | <block wx:if="{{ title }}">{{ title }}</block> |
23 | {{ title }} | ||
24 | <view wx:if="{{ label }}" class="van-cell__label label-class">{{ label }}</view> | ||
25 | </block> | ||
26 | <slot wx:else name="title" /> | 23 | <slot wx:else name="title" /> |
24 | |||
25 | <view wx:if="{{ label || useLabelSlot }}" class="van-cell__label label-class"> | ||
26 | <slot wx:if="{{ useLabelSlot }}" name="label" /> | ||
27 | <block wx:elif="{{ label }}">{{ label }}</block> | ||
28 | </view> | ||
27 | </view> | 29 | </view> |
28 | 30 | ||
29 | <view class="van-cell__value value-class"> | 31 | <view class="van-cell__value value-class"> | ... | ... |
1 | @import '../common/index.wxss';.van-cell{position:relative;display:-webkit-flex;display:flex;width:100%;padding:10px 15px;font-size:14px;line-height:24px;color:#333;background-color:#fff;box-sizing:border-box}.van-cell:after{content:" ";position:absolute;pointer-events:none;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;top:auto;left:15px;right:0;bottom:0;-webkit-transform:scaleY(.5);transform:scaleY(.5);border-bottom:1px solid #eee}.van-cell--borderless:after{display:none}.van-cell-group{background-color:#fff}.van-cell__label{margin-top:3px;font-size:12px;line-height:18px;color:#999}.van-cell__value{overflow:hidden;color:#999;text-align:right;vertical-align:middle}.van-cell__title,.van-cell__value{-webkit-flex:1;flex:1}.van-cell__title:empty,.van-cell__value:empty{display:none}.van-cell__left-icon-wrap,.van-cell__right-icon-wrap{display:-webkit-flex;display:flex;height:24px;font-size:16px;-webkit-align-items:center;align-items:center}.van-cell__left-icon-wrap{margin-right:5px}.van-cell__right-icon-wrap{margin-left:5px;color:#999}.van-cell__left-icon{line-height:24px;vertical-align:middle}.van-cell__right-icon{line-height:24px}.van-cell--clickable.van-cell--hover{background-color:#f2f3f5}.van-cell--required{overflow:visible}.van-cell--required:before{position:absolute;left:7px;font-size:14px;color:#f44;content:"*"}.van-cell--center{-webkit-align-items:center;align-items:center}.van-cell--large{padding-top:12px;padding-bottom:12px}.van-cell--large .van-cell__title{font-size:16px}.van-cell--large .van-cell__label{font-size:14px} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | @import '../common/index.wxss';.van-cell{position:relative;display:-webkit-flex;display:flex;box-sizing:border-box;width:100%;padding:10px 16px;padding:var(--cell-vertical-padding,10px) var(--cell-horizontal-padding,16px);font-size:14px;font-size:var(--cell-font-size,14px);line-height:24px;line-height:var(--cell-line-height,24px);color:#323233;color:var(--cell-text-color,#323233);background-color:#fff;background-color:var(--cell-background-color,#fff)}.van-cell:after{position:absolute;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;content:" ";pointer-events:none;top:auto;right:0;bottom:0;left:16px;border-bottom:1px solid #ebedf0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.van-cell--borderless:after{display:none}.van-cell-group{background-color:#fff;background-color:var(--cell-background-color,#fff)}.van-cell__label{margin-top:3px;margin-top:var(--cell-label-margin-top,3px);font-size:12px;font-size:var(--cell-label-font-size,12px);line-height:18px;line-height:var(--cell-label-line-height,18px);color:#969799;color:var(--cell-label-color,#969799)}.van-cell__value{overflow:hidden;text-align:right;vertical-align:middle;color:#969799;color:var(--cell-value-color,#969799)}.van-cell__title,.van-cell__value{-webkit-flex:1;flex:1}.van-cell__title:empty,.van-cell__value:empty{display:none}.van-cell__left-icon-wrap,.van-cell__right-icon-wrap{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;height:24px;height:var(--cell-line-height,24px);font-size:16px;font-size:var(--cell-icon-size,16px)}.van-cell__left-icon-wrap{margin-right:5px}.van-cell__right-icon-wrap{margin-left:5px;color:#969799;color:var(--cell-right-icon-color,#969799)}.van-cell__left-icon{vertical-align:middle}.van-cell__left-icon,.van-cell__right-icon{line-height:24px;line-height:var(--cell-line-height,24px)}.van-cell--clickable.van-cell--hover{background-color:#f2f3f5;background-color:var(--cell-active-color,#f2f3f5)}.van-cell--required{overflow:visible}.van-cell--required:before{position:absolute;content:"*";left:8px;left:var(--padding-xs,8px);font-size:14px;font-size:var(--cell-font-size,14px);color:#ee0a24;color:var(--cell-required-color,#ee0a24)}.van-cell--center{-webkit-align-items:center;align-items:center}.van-cell--large{padding-top:12px;padding-top:var(--cell-large-vertical-padding,12px);padding-bottom:12px;padding-bottom:var(--cell-large-vertical-padding,12px)}.van-cell--large .van-cell__title{font-size:16px;font-size:var(--cell-large-title-font-size,16px)}.van-cell--large .van-cell__label{font-size:14px;font-size:var(--cell-large-label-font-size,14px)} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -5,29 +5,34 @@ VantComponent({ | ... | @@ -5,29 +5,34 @@ VantComponent({ |
5 | name: 'checkbox', | 5 | name: 'checkbox', |
6 | type: 'descendant', | 6 | type: 'descendant', |
7 | linked(target) { | 7 | linked(target) { |
8 | const { value, disabled } = this.data; | 8 | this.children = this.children || []; |
9 | target.set({ | 9 | this.children.push(target); |
10 | value: value.indexOf(target.data.name) !== -1, | 10 | this.updateChild(target); |
11 | disabled: disabled || target.data.disabled | 11 | }, |
12 | }); | 12 | unlinked(target) { |
13 | this.children = this.children.filter((child) => child !== target); | ||
13 | } | 14 | } |
14 | }, | 15 | }, |
15 | props: { | 16 | props: { |
16 | max: Number, | 17 | max: Number, |
17 | value: Array, | 18 | value: { |
18 | disabled: Boolean | 19 | type: Array, |
20 | observer: 'updateChildren' | ||
19 | }, | 21 | }, |
20 | watch: { | 22 | disabled: { |
21 | value(value) { | 23 | type: Boolean, |
22 | const children = this.getRelationNodes('../checkbox/index'); | 24 | observer: 'updateChildren' |
23 | children.forEach(child => { | 25 | } |
24 | child.set({ value: value.indexOf(child.data.name) !== -1 }); | 26 | }, |
25 | }); | 27 | methods: { |
28 | updateChildren() { | ||
29 | (this.children || []).forEach((child) => this.updateChild(child)); | ||
26 | }, | 30 | }, |
27 | disabled(disabled) { | 31 | updateChild(child) { |
28 | const children = this.getRelationNodes('../checkbox/index'); | 32 | const { value, disabled } = this.data; |
29 | children.forEach(child => { | 33 | child.setData({ |
30 | child.set({ disabled: disabled || child.data.disabled }); | 34 | value: value.indexOf(child.data.name) !== -1, |
35 | disabled: disabled || child.data.disabled | ||
31 | }); | 36 | }); |
32 | } | 37 | } |
33 | } | 38 | } | ... | ... |
1 | import { VantComponent } from '../common/component'; | 1 | import { VantComponent } from '../common/component'; |
2 | import { addUnit } from '../common/utils'; | ||
3 | function emit(target, value) { | ||
4 | target.$emit('input', value); | ||
5 | target.$emit('change', value); | ||
6 | } | ||
2 | VantComponent({ | 7 | VantComponent({ |
3 | field: true, | 8 | field: true, |
4 | relation: { | 9 | relation: { |
5 | name: 'checkbox-group', | 10 | name: 'checkbox-group', |
6 | type: 'ancestor' | 11 | type: 'ancestor', |
12 | linked(target) { | ||
13 | this.parent = target; | ||
14 | }, | ||
15 | unlinked() { | ||
16 | this.parent = null; | ||
17 | } | ||
7 | }, | 18 | }, |
8 | classes: ['icon-class', 'label-class'], | 19 | classes: ['icon-class', 'label-class'], |
9 | props: { | 20 | props: { |
10 | value: null, | 21 | value: Boolean, |
11 | disabled: Boolean, | 22 | disabled: Boolean, |
12 | useIconSlot: Boolean, | 23 | useIconSlot: Boolean, |
13 | checkedColor: String, | 24 | checkedColor: String, |
... | @@ -16,52 +27,61 @@ VantComponent({ | ... | @@ -16,52 +27,61 @@ VantComponent({ |
16 | shape: { | 27 | shape: { |
17 | type: String, | 28 | type: String, |
18 | value: 'round' | 29 | value: 'round' |
30 | }, | ||
31 | iconSize: { | ||
32 | type: null, | ||
33 | observer: 'setSizeWithUnit' | ||
19 | } | 34 | } |
20 | }, | 35 | }, |
36 | data: { | ||
37 | sizeWithUnit: '20px' | ||
38 | }, | ||
21 | methods: { | 39 | methods: { |
22 | emitChange(value) { | 40 | emitChange(value) { |
23 | const parent = this.getRelationNodes('../checkbox-group/index')[0]; | 41 | if (this.parent) { |
24 | if (parent) { | 42 | this.setParentValue(this.parent, value); |
25 | this.setParentValue(parent, value); | ||
26 | } | 43 | } |
27 | else { | 44 | else { |
28 | this.$emit('input', value); | 45 | emit(this, value); |
29 | this.$emit('change', value); | ||
30 | } | 46 | } |
31 | }, | 47 | }, |
32 | toggle() { | 48 | toggle() { |
33 | if (!this.data.disabled) { | 49 | const { disabled, value } = this.data; |
34 | this.emitChange(!this.data.value); | 50 | if (!disabled) { |
51 | this.emitChange(!value); | ||
35 | } | 52 | } |
36 | }, | 53 | }, |
37 | onClickLabel() { | 54 | onClickLabel() { |
38 | if (!this.data.disabled && !this.data.labelDisabled) { | 55 | const { labelDisabled, disabled, value } = this.data; |
39 | this.emitChange(!this.data.value); | 56 | if (!disabled && !labelDisabled) { |
57 | this.emitChange(!value); | ||
40 | } | 58 | } |
41 | }, | 59 | }, |
42 | setParentValue(parent, value) { | 60 | setParentValue(parent, value) { |
43 | const parentValue = parent.data.value.slice(); | 61 | const parentValue = parent.data.value.slice(); |
44 | const { name } = this.data; | 62 | const { name } = this.data; |
63 | const { max } = parent.data; | ||
45 | if (value) { | 64 | if (value) { |
46 | if (parent.data.max && parentValue.length >= parent.data.max) { | 65 | if (max && parentValue.length >= max) { |
47 | return; | 66 | return; |
48 | } | 67 | } |
49 | /* istanbul ignore else */ | ||
50 | if (parentValue.indexOf(name) === -1) { | 68 | if (parentValue.indexOf(name) === -1) { |
51 | parentValue.push(name); | 69 | parentValue.push(name); |
52 | parent.$emit('input', parentValue); | 70 | emit(parent, parentValue); |
53 | parent.$emit('change', parentValue); | ||
54 | } | 71 | } |
55 | } | 72 | } |
56 | else { | 73 | else { |
57 | const index = parentValue.indexOf(name); | 74 | const index = parentValue.indexOf(name); |
58 | /* istanbul ignore else */ | ||
59 | if (index !== -1) { | 75 | if (index !== -1) { |
60 | parentValue.splice(index, 1); | 76 | parentValue.splice(index, 1); |
61 | parent.$emit('input', parentValue); | 77 | emit(parent, parentValue); |
62 | parent.$emit('change', parentValue); | ||
63 | } | ||
64 | } | 78 | } |
65 | } | 79 | } |
80 | }, | ||
81 | setSizeWithUnit(size) { | ||
82 | this.set({ | ||
83 | sizeWithUnit: addUnit(size) | ||
84 | }); | ||
85 | }, | ||
66 | } | 86 | } |
67 | }); | 87 | }); | ... | ... |
... | @@ -6,10 +6,11 @@ | ... | @@ -6,10 +6,11 @@ |
6 | <van-icon | 6 | <van-icon |
7 | wx:else | 7 | wx:else |
8 | name="success" | 8 | name="success" |
9 | size="0.8em" | ||
9 | class="{{ utils.bem('checkbox__icon', [shape, { disabled, checked: value }]) }}" | 10 | class="{{ utils.bem('checkbox__icon', [shape, { disabled, checked: value }]) }}" |
10 | style="{{ checkedColor && value && !disabled ? 'border-color:' + checkedColor + '; background-color:' + checkedColor : '' }}" | 11 | style="font-size: {{ sizeWithUnit }};{{ checkedColor && value && !disabled ? 'border-color:' + checkedColor + '; background-color:' + checkedColor : '' }}" |
11 | custom-class="icon-class" | 12 | custom-class="icon-class" |
12 | custom-style="line-height: 20px;" | 13 | custom-style="line-height: 1.25em;" |
13 | /> | 14 | /> |
14 | </view> | 15 | </view> |
15 | <view class="label-class {{ utils.bem('checkbox__label', [labelPosition, { disabled }]) }}" bindtap="onClickLabel"> | 16 | <view class="label-class {{ utils.bem('checkbox__label', [labelPosition, { disabled }]) }}" bindtap="onClickLabel"> | ... | ... |
1 | @import '../common/index.wxss';.van-checkbox{overflow:hidden;-webkit-user-select:none;user-select:none}.van-checkbox__icon-wrap,.van-checkbox__label{display:inline-block;line-height:20px;vertical-align:middle}.van-checkbox__icon{display:block;font-size:14px;width:20px;height:20px;color:transparent;text-align:center;box-sizing:border-box;border:1px solid #e5e5e5;transition:.2s}.van-checkbox__icon--round{border-radius:100%}.van-checkbox__icon--checked{color:#fff;border-color:#1989fa;background-color:#1989fa}.van-checkbox__icon--disabled{border-color:#c9c9c9;background-color:#eee}.van-checkbox__icon--disabled.van-checkbox__icon--checked{color:#c9c9c9}.van-checkbox__label{color:#333;margin-left:10px}.van-checkbox__label--left{float:left;margin:0 10px 0 0}.van-checkbox__label--disabled{color:#c9c9c9}.van-checkbox__label:empty{margin:0} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | @import '../common/index.wxss';.van-checkbox{display:-webkit-flex;display:flex;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 #e5e5e5;border:1px solid var(--checkbox-border-color,#e5e5e5);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} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
src/ui/vant-weapp/circle/index.js
0 → 100755
1 | import { VantComponent } from '../common/component'; | ||
2 | import { isObj } from '../common/utils'; | ||
3 | import { BLUE, WHITE } from '../common/color'; | ||
4 | function format(rate) { | ||
5 | return Math.min(Math.max(rate, 0), 100); | ||
6 | } | ||
7 | const PERIMETER = 2 * Math.PI; | ||
8 | const BEGIN_ANGLE = -Math.PI / 2; | ||
9 | const STEP = 1; | ||
10 | VantComponent({ | ||
11 | props: { | ||
12 | text: String, | ||
13 | lineCap: { | ||
14 | type: String, | ||
15 | value: 'round' | ||
16 | }, | ||
17 | value: { | ||
18 | type: Number, | ||
19 | value: 0, | ||
20 | observer: 'reRender' | ||
21 | }, | ||
22 | speed: { | ||
23 | type: Number, | ||
24 | value: 50 | ||
25 | }, | ||
26 | size: { | ||
27 | type: Number, | ||
28 | value: 100, | ||
29 | observer: 'setStyle' | ||
30 | }, | ||
31 | fill: String, | ||
32 | layerColor: { | ||
33 | type: String, | ||
34 | value: WHITE | ||
35 | }, | ||
36 | color: { | ||
37 | type: [String, Object], | ||
38 | value: BLUE, | ||
39 | observer: 'setHoverColor' | ||
40 | }, | ||
41 | strokeWidth: { | ||
42 | type: Number, | ||
43 | value: 4 | ||
44 | }, | ||
45 | clockwise: { | ||
46 | type: Boolean, | ||
47 | value: true | ||
48 | } | ||
49 | }, | ||
50 | data: { | ||
51 | style: 'width: 100px; height: 100px;', | ||
52 | hoverColor: BLUE | ||
53 | }, | ||
54 | methods: { | ||
55 | getContext() { | ||
56 | if (!this.ctx) { | ||
57 | this.ctx = wx.createCanvasContext('van-circle', this); | ||
58 | } | ||
59 | return this.ctx; | ||
60 | }, | ||
61 | setHoverColor() { | ||
62 | const context = this.getContext(); | ||
63 | const { color, size } = this.data; | ||
64 | let hoverColor = color; | ||
65 | if (isObj(color)) { | ||
66 | const LinearColor = context.createLinearGradient(size, 0, 0, 0); | ||
67 | Object.keys(color) | ||
68 | .sort((a, b) => parseFloat(a) - parseFloat(b)) | ||
69 | .map(key => LinearColor.addColorStop(parseFloat(key) / 100, color[key])); | ||
70 | hoverColor = LinearColor; | ||
71 | } | ||
72 | this.setData({ hoverColor }); | ||
73 | }, | ||
74 | setStyle() { | ||
75 | const { size } = this.data; | ||
76 | const style = `width: ${size}px; height: ${size}px;`; | ||
77 | this.setData({ style }); | ||
78 | }, | ||
79 | presetCanvas(context, strokeStyle, beginAngle, endAngle, fill) { | ||
80 | const { strokeWidth, lineCap, clockwise, size } = this.data; | ||
81 | const position = size / 2; | ||
82 | const radius = position - strokeWidth / 2; | ||
83 | context.setStrokeStyle(strokeStyle); | ||
84 | context.setLineWidth(strokeWidth); | ||
85 | context.setLineCap(lineCap); | ||
86 | context.beginPath(); | ||
87 | context.arc(position, position, radius, beginAngle, endAngle, !clockwise); | ||
88 | context.stroke(); | ||
89 | if (fill) { | ||
90 | context.setFillStyle(fill); | ||
91 | context.fill(); | ||
92 | } | ||
93 | }, | ||
94 | renderLayerCircle(context) { | ||
95 | const { layerColor, fill } = this.data; | ||
96 | this.presetCanvas(context, layerColor, 0, PERIMETER, fill); | ||
97 | }, | ||
98 | renderHoverCircle(context, formatValue) { | ||
99 | const { clockwise, hoverColor } = this.data; | ||
100 | // 结束角度 | ||
101 | const progress = PERIMETER * (formatValue / 100); | ||
102 | const endAngle = clockwise | ||
103 | ? BEGIN_ANGLE + progress | ||
104 | : 3 * Math.PI - (BEGIN_ANGLE + progress); | ||
105 | this.presetCanvas(context, hoverColor, BEGIN_ANGLE, endAngle); | ||
106 | }, | ||
107 | drawCircle(currentValue) { | ||
108 | const context = this.getContext(); | ||
109 | const { size } = this.data; | ||
110 | context.clearRect(0, 0, size, size); | ||
111 | this.renderLayerCircle(context); | ||
112 | const formatValue = format(currentValue); | ||
113 | if (formatValue !== 0) { | ||
114 | this.renderHoverCircle(context, formatValue); | ||
115 | } | ||
116 | context.draw(); | ||
117 | }, | ||
118 | reRender() { | ||
119 | // tofector 动画暂时没有想到好的解决方案 | ||
120 | const { value, speed } = this.data; | ||
121 | if (speed <= 0 || speed > 1000) { | ||
122 | this.drawCircle(value); | ||
123 | return; | ||
124 | } | ||
125 | this.clearInterval(); | ||
126 | this.currentValue = this.currentValue || 0; | ||
127 | this.interval = setInterval(() => { | ||
128 | if (this.currentValue !== value) { | ||
129 | if (this.currentValue < value) { | ||
130 | this.currentValue += STEP; | ||
131 | } | ||
132 | else { | ||
133 | this.currentValue -= STEP; | ||
134 | } | ||
135 | this.drawCircle(this.currentValue); | ||
136 | } | ||
137 | else { | ||
138 | this.clearInterval(); | ||
139 | } | ||
140 | }, 1000 / speed); | ||
141 | }, | ||
142 | clearInterval() { | ||
143 | if (this.interval) { | ||
144 | clearInterval(this.interval); | ||
145 | this.interval = null; | ||
146 | } | ||
147 | } | ||
148 | }, | ||
149 | created() { | ||
150 | const { value } = this.data; | ||
151 | this.currentValue = value; | ||
152 | this.drawCircle(value); | ||
153 | }, | ||
154 | destroyed() { | ||
155 | this.ctx = null; | ||
156 | this.clearInterval(); | ||
157 | } | ||
158 | }); |
src/ui/vant-weapp/circle/index.wxml
0 → 100755
1 | <view class="van-circle"> | ||
2 | <canvas class="van-circle__canvas" style="{{ style }}" canvas-id="van-circle"></canvas> | ||
3 | <view wx:if="{{ !text }}" class="van-circle__text"> | ||
4 | <slot></slot> | ||
5 | </view> | ||
6 | <cover-view wx:else class="van-circle__text">{{ text }}</cover-view> | ||
7 | </view> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
src/ui/vant-weapp/circle/index.wxss
0 → 100755
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)} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
... | @@ -16,7 +16,7 @@ VantComponent({ | ... | @@ -16,7 +16,7 @@ VantComponent({ |
16 | const padding = `${gutter / 2}px`; | 16 | const padding = `${gutter / 2}px`; |
17 | const style = gutter ? `padding-left: ${padding}; padding-right: ${padding};` : ''; | 17 | const style = gutter ? `padding-left: ${padding}; padding-right: ${padding};` : ''; |
18 | if (style !== this.data.style) { | 18 | if (style !== this.data.style) { |
19 | this.set({ style }); | 19 | this.setData({ style }); |
20 | } | 20 | } |
21 | } | 21 | } |
22 | } | 22 | } | ... | ... |
... | @@ -16,6 +16,7 @@ VantComponent({ | ... | @@ -16,6 +16,7 @@ VantComponent({ |
16 | icon: String, | 16 | icon: String, |
17 | label: String, | 17 | label: String, |
18 | disabled: Boolean, | 18 | disabled: Boolean, |
19 | clickable: Boolean, | ||
19 | border: { | 20 | border: { |
20 | type: Boolean, | 21 | type: Boolean, |
21 | value: true | 22 | value: true |
... | @@ -34,7 +35,11 @@ VantComponent({ | ... | @@ -34,7 +35,11 @@ VantComponent({ |
34 | this.updateExpanded() | 35 | this.updateExpanded() |
35 | .then(nextTick) | 36 | .then(nextTick) |
36 | .then(() => { | 37 | .then(() => { |
37 | this.set({ transition: true }); | 38 | const data = { transition: true }; |
39 | if (this.data.expanded) { | ||
40 | data.contentHeight = 'auto'; | ||
41 | } | ||
42 | this.setData(data); | ||
38 | }); | 43 | }); |
39 | }, | 44 | }, |
40 | methods: { | 45 | methods: { |
... | @@ -66,11 +71,9 @@ VantComponent({ | ... | @@ -66,11 +71,9 @@ VantComponent({ |
66 | contentHeight: height ? `${height}px` : 'auto' | 71 | contentHeight: height ? `${height}px` : 'auto' |
67 | }); | 72 | }); |
68 | } | 73 | } |
69 | else { | ||
70 | return this.set({ contentHeight: `${height}px` }) | 74 | return this.set({ contentHeight: `${height}px` }) |
71 | .then(nextTick) | 75 | .then(nextTick) |
72 | .then(() => this.set({ contentHeight: 0 })); | 76 | .then(() => this.set({ contentHeight: 0 })); |
73 | } | ||
74 | }); | 77 | }); |
75 | }, | 78 | }, |
76 | onClick() { | 79 | onClick() { |
... | @@ -84,7 +87,7 @@ VantComponent({ | ... | @@ -84,7 +87,7 @@ VantComponent({ |
84 | }, | 87 | }, |
85 | onTransitionEnd() { | 88 | onTransitionEnd() { |
86 | if (this.data.expanded) { | 89 | if (this.data.expanded) { |
87 | this.set({ | 90 | this.setData({ |
88 | contentHeight: 'auto' | 91 | contentHeight: 'auto' |
89 | }); | 92 | }); |
90 | } | 93 | } | ... | ... |
... | @@ -5,9 +5,10 @@ | ... | @@ -5,9 +5,10 @@ |
5 | title="{{ title }}" | 5 | title="{{ title }}" |
6 | title-class="title-class" | 6 | title-class="title-class" |
7 | icon="{{ icon }}" | 7 | icon="{{ icon }}" |
8 | is-link="{{ isLink }}" | ||
9 | value="{{ value }}" | 8 | value="{{ value }}" |
10 | label="{{ label }}" | 9 | label="{{ label }}" |
10 | is-link="{{ isLink }}" | ||
11 | clickable="{{ clickable }}" | ||
11 | border="{{ border && expanded }}" | 12 | border="{{ border && expanded }}" |
12 | class="{{ utils.bem('collapse-item__title', { disabled, expanded }) }}" | 13 | class="{{ utils.bem('collapse-item__title', { disabled, expanded }) }}" |
13 | right-icon-class="van-cell__right-icon" | 14 | right-icon-class="van-cell__right-icon" | ... | ... |
1 | @import '../common/index.wxss';.van-collapse-item__title .van-cell__right-icon{-webkit-transform:rotate(90deg);transform:rotate(90deg);transition:.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:#c9c9c9!important}.van-collapse-item__title--disabled .van-cell--hover{background-color:#fff!important}.van-collapse-item__wrapper{overflow:hidden}.van-collapse-item__wrapper--transition{transition:height .3s ease-in-out}.van-collapse-item__content{padding:15px;font-size:13px;line-height:1.5;color:#999;background-color:#fff} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | @import '../common/index.wxss';.van-collapse-item__title .van-cell__right-icon{-webkit-transform:rotate(90deg);transform:rotate(90deg);transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;transition:-webkit-transform var(--collapse-item-transition-duration,.3s);transition:transform var(--collapse-item-transition-duration,.3s);transition:transform var(--collapse-item-transition-duration,.3s),-webkit-transform var(--collapse-item-transition-duration,.3s)}.van-collapse-item__title--expanded .van-cell__right-icon{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.van-collapse-item__title--disabled .van-cell,.van-collapse-item__title--disabled .van-cell__right-icon{color:#c8c9cc!important;color:var(--collapse-item-title-disabled-color,#c8c9cc)!important}.van-collapse-item__title--disabled .van-cell--hover{background-color:#fff!important;background-color:var(--white,#fff)!important}.van-collapse-item__wrapper{overflow:hidden}.van-collapse-item__wrapper--transition{transition:height .3s ease-in-out}.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)} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -5,6 +5,9 @@ VantComponent({ | ... | @@ -5,6 +5,9 @@ VantComponent({ |
5 | type: 'descendant', | 5 | type: 'descendant', |
6 | linked(child) { | 6 | linked(child) { |
7 | this.children.push(child); | 7 | this.children.push(child); |
8 | }, | ||
9 | unlinked(child) { | ||
10 | this.children = this.children.filter((item) => item !== child); | ||
8 | } | 11 | } |
9 | }, | 12 | }, |
10 | props: { | 13 | props: { | ... | ... |
1 | export declare const RED = "#f44"; | 1 | export declare const RED = "#ee0a24"; |
2 | export declare const BLUE = "#1989fa"; | 2 | export declare const BLUE = "#1989fa"; |
3 | export declare const WHITE = "#fff"; | ||
3 | export declare const GREEN = "#07c160"; | 4 | export declare const GREEN = "#07c160"; |
5 | export declare const ORANGE = "#ff976a"; | ||
6 | export declare const GRAY = "#323233"; | ||
7 | export declare const GRAY_DARK = "#969799"; | ... | ... |
1 | export const RED = '#f44'; | 1 | export const RED = '#ee0a24'; |
2 | export const BLUE = '#1989fa'; | 2 | export const BLUE = '#1989fa'; |
3 | export const WHITE = '#fff'; | ||
3 | export const GREEN = '#07c160'; | 4 | export const GREEN = '#07c160'; |
5 | export const ORANGE = '#ff976a'; | ||
6 | export const GRAY = '#323233'; | ||
7 | export const GRAY_DARK = '#969799'; | ... | ... |
1 | declare function VantComponent<Data, Props, Watch, Methods, Computed>(vantOptions?: VantComponentOptions<Data, Props, Watch, Methods, Computed, CombinedComponentInstance<Data, Props, Watch, Methods, Computed>>): void; | 1 | import { VantComponentOptions, CombinedComponentInstance } from '../definitions/index'; |
2 | declare function VantComponent<Data, Props, Methods>(vantOptions?: VantComponentOptions<Data, Props, Methods, CombinedComponentInstance<Data, Props, Methods>>): void; | ||
2 | export { VantComponent }; | 3 | export { VantComponent }; | ... | ... |
1 | .van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{-webkit-line-clamp:3}.van-clearfix:after{content:"";display:table;clear:both}.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{content:" ";position:absolute;pointer-events:none;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;top:-50%;left:-50%;right:-50%;bottom:-50%;-webkit-transform:scale(.5);transform:scale(.5);border:0 solid #eee}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | .van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{-webkit-line-clamp:3}.van-clearfix:after{display:table;clear:both;content:""}.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{position:absolute;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;content:" ";pointer-events:none;top:-50%;right:-50%;bottom:-50%;left:-50%;border:0 solid #eee;-webkit-transform:scale(.5);transform:scale(.5)}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | .van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{-webkit-line-clamp:3} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | .van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{-webkit-line-clamp:3} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | .van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{content:" ";position:absolute;pointer-events:none;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;top:-50%;left:-50%;right:-50%;bottom:-50%;-webkit-transform:scale(.5);transform:scale(.5);border:0 solid #eee}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | .van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{position:absolute;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;content:" ";pointer-events:none;top:-50%;right:-50%;bottom:-50%;left:-50%;border:0 solid #eee;-webkit-transform:scale(.5);transform:scale(.5)}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
src/ui/vant-weapp/common/style/theme.wxss
0 → 100755
File mode changed
1 | declare function isDef(value: any): boolean; | 1 | /// <reference types="miniprogram-api-typings" /> |
2 | declare function isObj(x: any): boolean; | 2 | export declare function isDef(value: any): boolean; |
3 | declare function isNumber(value: any): boolean; | 3 | export declare function isObj(x: any): boolean; |
4 | declare function range(num: number, min: number, max: number): number; | 4 | export declare function isNumber(value: any): boolean; |
5 | export { isObj, isDef, isNumber, range }; | 5 | export declare function range(num: number, min: number, max: number): number; |
6 | export declare function nextTick(fn: Function): void; | ||
7 | export declare function getSystemInfoSync(): WechatMiniprogram.GetSystemInfoSuccessCallbackResult; | ||
8 | export declare function addUnit(value?: string | number): string | undefined; | ... | ... |
1 | function isDef(value) { | 1 | export function isDef(value) { |
2 | return value !== undefined && value !== null; | 2 | return value !== undefined && value !== null; |
3 | } | 3 | } |
4 | function isObj(x) { | 4 | export function isObj(x) { |
5 | const type = typeof x; | 5 | const type = typeof x; |
6 | return x !== null && (type === 'object' || type === 'function'); | 6 | return x !== null && (type === 'object' || type === 'function'); |
7 | } | 7 | } |
8 | function isNumber(value) { | 8 | export function isNumber(value) { |
9 | return /^\d+$/.test(value); | 9 | return /^\d+(\.\d+)?$/.test(value); |
10 | } | 10 | } |
11 | function range(num, min, max) { | 11 | export function range(num, min, max) { |
12 | return Math.min(Math.max(num, min), max); | 12 | return Math.min(Math.max(num, min), max); |
13 | } | 13 | } |
14 | export { isObj, isDef, isNumber, range }; | 14 | export function nextTick(fn) { |
15 | setTimeout(() => { | ||
16 | fn(); | ||
17 | }, 1000 / 30); | ||
18 | } | ||
19 | let systemInfo = null; | ||
20 | export function getSystemInfoSync() { | ||
21 | if (systemInfo == null) { | ||
22 | systemInfo = wx.getSystemInfoSync(); | ||
23 | } | ||
24 | return systemInfo; | ||
25 | } | ||
26 | export function addUnit(value) { | ||
27 | if (!isDef(value)) { | ||
28 | return undefined; | ||
29 | } | ||
30 | value = String(value); | ||
31 | return isNumber(value) ? `${value}px` : value; | ||
32 | } | ... | ... |
src/ui/vant-weapp/count-down/index.js
0 → 100755
1 | import { VantComponent } from '../common/component'; | ||
2 | import { isSameSecond, parseFormat, parseTimeData } from './utils'; | ||
3 | function simpleTick(fn) { | ||
4 | return setTimeout(fn, 30); | ||
5 | } | ||
6 | VantComponent({ | ||
7 | props: { | ||
8 | useSlot: Boolean, | ||
9 | millisecond: Boolean, | ||
10 | time: { | ||
11 | type: Number, | ||
12 | observer: 'reset' | ||
13 | }, | ||
14 | format: { | ||
15 | type: String, | ||
16 | value: 'HH:mm:ss' | ||
17 | }, | ||
18 | autoStart: { | ||
19 | type: Boolean, | ||
20 | value: true | ||
21 | } | ||
22 | }, | ||
23 | data: { | ||
24 | timeData: parseTimeData(0), | ||
25 | formattedTime: '0' | ||
26 | }, | ||
27 | destroyed() { | ||
28 | clearTimeout(this.tid); | ||
29 | this.tid = null; | ||
30 | }, | ||
31 | methods: { | ||
32 | // 开始 | ||
33 | start() { | ||
34 | if (this.counting) { | ||
35 | return; | ||
36 | } | ||
37 | this.counting = true; | ||
38 | this.endTime = Date.now() + this.remain; | ||
39 | this.tick(); | ||
40 | }, | ||
41 | // 暂停 | ||
42 | pause() { | ||
43 | this.counting = false; | ||
44 | clearTimeout(this.tid); | ||
45 | }, | ||
46 | // 重置 | ||
47 | reset() { | ||
48 | this.pause(); | ||
49 | this.remain = this.data.time; | ||
50 | this.setRemain(this.remain); | ||
51 | if (this.data.autoStart) { | ||
52 | this.start(); | ||
53 | } | ||
54 | }, | ||
55 | tick() { | ||
56 | if (this.data.millisecond) { | ||
57 | this.microTick(); | ||
58 | } | ||
59 | else { | ||
60 | this.macroTick(); | ||
61 | } | ||
62 | }, | ||
63 | microTick() { | ||
64 | this.tid = simpleTick(() => { | ||
65 | this.setRemain(this.getRemain()); | ||
66 | if (this.remain !== 0) { | ||
67 | this.microTick(); | ||
68 | } | ||
69 | }); | ||
70 | }, | ||
71 | macroTick() { | ||
72 | this.tid = simpleTick(() => { | ||
73 | const remain = this.getRemain(); | ||
74 | if (!isSameSecond(remain, this.remain) || remain === 0) { | ||
75 | this.setRemain(remain); | ||
76 | } | ||
77 | if (this.remain !== 0) { | ||
78 | this.macroTick(); | ||
79 | } | ||
80 | }); | ||
81 | }, | ||
82 | getRemain() { | ||
83 | return Math.max(this.endTime - Date.now(), 0); | ||
84 | }, | ||
85 | setRemain(remain) { | ||
86 | this.remain = remain; | ||
87 | const timeData = parseTimeData(remain); | ||
88 | if (this.data.useSlot) { | ||
89 | this.$emit('change', timeData); | ||
90 | } | ||
91 | this.setData({ | ||
92 | formattedTime: parseFormat(this.data.format, timeData) | ||
93 | }); | ||
94 | if (remain === 0) { | ||
95 | this.pause(); | ||
96 | this.$emit('finish'); | ||
97 | } | ||
98 | } | ||
99 | } | ||
100 | }); |
src/ui/vant-weapp/count-down/index.json
0 → 100755
src/ui/vant-weapp/count-down/index.wxml
0 → 100755
src/ui/vant-weapp/count-down/index.wxss
0 → 100755
1 | @import '../common/index.wxss';.van-count-down{color:#323233;color:var(--count-down-text-color,#323233);font-size:14px;font-size:var(--count-down-font-size,14px);line-height:20px;line-height:var(--count-down-line-height,20px)} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
src/ui/vant-weapp/count-down/utils.d.ts
0 → 100755
1 | export declare type TimeData = { | ||
2 | days: number; | ||
3 | hours: number; | ||
4 | minutes: number; | ||
5 | seconds: number; | ||
6 | milliseconds: number; | ||
7 | }; | ||
8 | export declare function parseTimeData(time: number): TimeData; | ||
9 | export declare function parseFormat(format: string, timeData: TimeData): string; | ||
10 | export declare function isSameSecond(time1: number, time2: number): boolean; |
src/ui/vant-weapp/count-down/utils.js
0 → 100755
1 | function padZero(num, targetLength = 2) { | ||
2 | let str = num + ''; | ||
3 | while (str.length < targetLength) { | ||
4 | str = '0' + str; | ||
5 | } | ||
6 | return str; | ||
7 | } | ||
8 | const SECOND = 1000; | ||
9 | const MINUTE = 60 * SECOND; | ||
10 | const HOUR = 60 * MINUTE; | ||
11 | const DAY = 24 * HOUR; | ||
12 | export function parseTimeData(time) { | ||
13 | const days = Math.floor(time / DAY); | ||
14 | const hours = Math.floor((time % DAY) / HOUR); | ||
15 | const minutes = Math.floor((time % HOUR) / MINUTE); | ||
16 | const seconds = Math.floor((time % MINUTE) / SECOND); | ||
17 | const milliseconds = Math.floor(time % SECOND); | ||
18 | return { | ||
19 | days, | ||
20 | hours, | ||
21 | minutes, | ||
22 | seconds, | ||
23 | milliseconds | ||
24 | }; | ||
25 | } | ||
26 | export function parseFormat(format, timeData) { | ||
27 | const { days } = timeData; | ||
28 | let { hours, minutes, seconds, milliseconds } = timeData; | ||
29 | if (format.indexOf('DD') === -1) { | ||
30 | hours += days * 24; | ||
31 | } | ||
32 | else { | ||
33 | format = format.replace('DD', padZero(days)); | ||
34 | } | ||
35 | if (format.indexOf('HH') === -1) { | ||
36 | minutes += hours * 60; | ||
37 | } | ||
38 | else { | ||
39 | format = format.replace('HH', padZero(hours)); | ||
40 | } | ||
41 | if (format.indexOf('mm') === -1) { | ||
42 | seconds += minutes * 60; | ||
43 | } | ||
44 | else { | ||
45 | format = format.replace('mm', padZero(minutes)); | ||
46 | } | ||
47 | if (format.indexOf('ss') === -1) { | ||
48 | milliseconds += seconds * 1000; | ||
49 | } | ||
50 | else { | ||
51 | format = format.replace('ss', padZero(seconds)); | ||
52 | } | ||
53 | return format.replace('SSS', padZero(milliseconds, 3)); | ||
54 | } | ||
55 | export function isSameSecond(time1, time2) { | ||
56 | return Math.floor(time1 / 1000) === Math.floor(time2 / 1000); | ||
57 | } |
1 | import { VantComponent } from '../common/component'; | 1 | import { VantComponent } from '../common/component'; |
2 | import { isDef } from '../common/utils'; | 2 | import { isDef } from '../common/utils'; |
3 | import { pickerProps } from '../picker/shared'; | ||
3 | const currentYear = new Date().getFullYear(); | 4 | const currentYear = new Date().getFullYear(); |
4 | function isValidDate(date) { | 5 | function isValidDate(date) { |
5 | return isDef(date) && !isNaN(new Date(date).getTime()); | 6 | return isDef(date) && !isNaN(new Date(date).getTime()); |
... | @@ -12,7 +13,7 @@ function padZero(val) { | ... | @@ -12,7 +13,7 @@ function padZero(val) { |
12 | } | 13 | } |
13 | function times(n, iteratee) { | 14 | function times(n, iteratee) { |
14 | let index = -1; | 15 | let index = -1; |
15 | const result = Array(n); | 16 | const result = Array(n < 0 ? 0 : n); |
16 | while (++index < n) { | 17 | while (++index < n) { |
17 | result[index] = iteratee(index); | 18 | result[index] = iteratee(index); |
18 | } | 19 | } |
... | @@ -29,100 +30,95 @@ function getTrueValue(formattedValue) { | ... | @@ -29,100 +30,95 @@ function getTrueValue(formattedValue) { |
29 | function getMonthEndDay(year, month) { | 30 | function getMonthEndDay(year, month) { |
30 | return 32 - new Date(year, month - 1, 32).getDate(); | 31 | return 32 - new Date(year, month - 1, 32).getDate(); |
31 | } | 32 | } |
33 | const defaultFormatter = (_, value) => value; | ||
32 | VantComponent({ | 34 | VantComponent({ |
33 | props: { | 35 | classes: ['active-class', 'toolbar-class', 'column-class'], |
34 | value: null, | 36 | props: Object.assign(Object.assign({}, pickerProps), { value: null, filter: null, type: { |
35 | title: String, | ||
36 | loading: Boolean, | ||
37 | itemHeight: { | ||
38 | type: Number, | ||
39 | value: 44 | ||
40 | }, | ||
41 | visibleItemCount: { | ||
42 | type: Number, | ||
43 | value: 5 | ||
44 | }, | ||
45 | confirmButtonText: { | ||
46 | type: String, | ||
47 | value: '确认' | ||
48 | }, | ||
49 | cancelButtonText: { | ||
50 | type: String, | ||
51 | value: '取消' | ||
52 | }, | ||
53 | type: { | ||
54 | type: String, | 37 | type: String, |
55 | value: 'datetime' | 38 | value: 'datetime' |
56 | }, | 39 | }, showToolbar: { |
57 | showToolbar: { | ||
58 | type: Boolean, | 40 | type: Boolean, |
59 | value: true | 41 | value: true |
60 | }, | 42 | }, formatter: { |
61 | minDate: { | 43 | type: null, |
44 | value: defaultFormatter | ||
45 | }, minDate: { | ||
62 | type: Number, | 46 | type: Number, |
63 | value: new Date(currentYear - 10, 0, 1).getTime() | 47 | value: new Date(currentYear - 10, 0, 1).getTime() |
64 | }, | 48 | }, maxDate: { |
65 | maxDate: { | ||
66 | type: Number, | 49 | type: Number, |
67 | value: new Date(currentYear + 10, 11, 31).getTime() | 50 | value: new Date(currentYear + 10, 11, 31).getTime() |
68 | }, | 51 | }, minHour: { |
69 | minHour: { | ||
70 | type: Number, | 52 | type: Number, |
71 | value: 0 | 53 | value: 0 |
72 | }, | 54 | }, maxHour: { |
73 | maxHour: { | ||
74 | type: Number, | 55 | type: Number, |
75 | value: 23 | 56 | value: 23 |
76 | }, | 57 | }, minMinute: { |
77 | minMinute: { | ||
78 | type: Number, | 58 | type: Number, |
79 | value: 0 | 59 | value: 0 |
80 | }, | 60 | }, maxMinute: { |
81 | maxMinute: { | ||
82 | type: Number, | 61 | type: Number, |
83 | value: 59 | 62 | value: 59 |
84 | } | 63 | } }), |
85 | }, | ||
86 | data: { | 64 | data: { |
87 | innerValue: Date.now(), | 65 | innerValue: Date.now(), |
88 | columns: [] | 66 | columns: [] |
89 | }, | 67 | }, |
90 | watch: { | 68 | watch: { |
91 | value(val) { | 69 | value: 'updateValue', |
70 | type: 'updateValue', | ||
71 | minDate: 'updateValue', | ||
72 | maxDate: 'updateValue', | ||
73 | minHour: 'updateValue', | ||
74 | maxHour: 'updateValue', | ||
75 | minMinute: 'updateValue', | ||
76 | maxMinute: 'updateValue' | ||
77 | }, | ||
78 | methods: { | ||
79 | updateValue() { | ||
92 | const { data } = this; | 80 | const { data } = this; |
93 | val = this.correctValue(val); | 81 | const val = this.correctValue(this.data.value); |
94 | const isEqual = val === data.innerValue; | 82 | const isEqual = val === data.innerValue; |
95 | if (!isEqual) { | 83 | if (!isEqual) { |
96 | this.updateColumnValue(val).then(() => { | 84 | this.updateColumnValue(val).then(() => { |
97 | this.$emit('input', val); | 85 | this.$emit('input', val); |
98 | }); | 86 | }); |
99 | } | 87 | } |
88 | else { | ||
89 | this.updateColumns(); | ||
90 | } | ||
100 | }, | 91 | }, |
101 | type: 'updateColumns', | ||
102 | minHour: 'updateColumns', | ||
103 | maxHour: 'updateColumns', | ||
104 | minMinute: 'updateColumns', | ||
105 | maxMinute: 'updateColumns' | ||
106 | }, | ||
107 | methods: { | ||
108 | getPicker() { | 92 | getPicker() { |
109 | if (this.picker == null) { | 93 | if (this.picker == null) { |
110 | const picker = this.picker = this.selectComponent('.van-datetime-picker'); | 94 | this.picker = this.selectComponent('.van-datetime-picker'); |
95 | const { picker } = this; | ||
111 | const { setColumnValues } = picker; | 96 | const { setColumnValues } = picker; |
112 | picker.setColumnValues = (...args) => setColumnValues.apply(picker, [...args, false]); | 97 | picker.setColumnValues = (...args) => setColumnValues.apply(picker, [...args, false]); |
113 | } | 98 | } |
114 | return this.picker; | 99 | return this.picker; |
115 | }, | 100 | }, |
116 | updateColumns() { | 101 | updateColumns() { |
117 | const results = this.getRanges().map(({ type, range }, index) => { | 102 | const { formatter = defaultFormatter } = this.data; |
118 | const values = times(range[1] - range[0] + 1, index => { | 103 | const results = this.getOriginColumns().map(column => ({ |
104 | values: column.values.map(value => formatter(column.type, value)) | ||
105 | })); | ||
106 | return this.set({ columns: results }); | ||
107 | }, | ||
108 | getOriginColumns() { | ||
109 | const { filter } = this.data; | ||
110 | const results = this.getRanges().map(({ type, range }) => { | ||
111 | let values = times(range[1] - range[0] + 1, index => { | ||
119 | let value = range[0] + index; | 112 | let value = range[0] + index; |
120 | value = type === 'year' ? `${value}` : padZero(value); | 113 | value = type === 'year' ? `${value}` : padZero(value); |
121 | return value; | 114 | return value; |
122 | }); | 115 | }); |
123 | return { values }; | 116 | if (filter) { |
117 | values = filter(type, values); | ||
118 | } | ||
119 | return { type, values }; | ||
124 | }); | 120 | }); |
125 | return this.set({ columns: results }); | 121 | return results; |
126 | }, | 122 | }, |
127 | getRanges() { | 123 | getRanges() { |
128 | const { data } = this; | 124 | const { data } = this; |
... | @@ -237,7 +233,7 @@ VantComponent({ | ... | @@ -237,7 +233,7 @@ VantComponent({ |
237 | const picker = this.getPicker(); | 233 | const picker = this.getPicker(); |
238 | if (data.type === 'time') { | 234 | if (data.type === 'time') { |
239 | const indexes = picker.getIndexes(); | 235 | const indexes = picker.getIndexes(); |
240 | value = `${indexes[0] + data.minHour}:${indexes[1] + data.minMinute}`; | 236 | value = `${+data.columns[0].values[indexes[0]]}:${+data.columns[1].values[indexes[1]]}`; |
241 | } | 237 | } |
242 | else { | 238 | else { |
243 | const values = picker.getValues(); | 239 | const values = picker.getValues(); |
... | @@ -265,20 +261,26 @@ VantComponent({ | ... | @@ -265,20 +261,26 @@ VantComponent({ |
265 | }, | 261 | }, |
266 | updateColumnValue(value) { | 262 | updateColumnValue(value) { |
267 | let values = []; | 263 | let values = []; |
268 | const { data } = this; | 264 | const { type, formatter = defaultFormatter } = this.data; |
269 | const picker = this.getPicker(); | 265 | const picker = this.getPicker(); |
270 | if (data.type === 'time') { | 266 | if (type === 'time') { |
271 | const pair = value.split(':'); | 267 | const pair = value.split(':'); |
272 | values = [pair[0], pair[1]]; | 268 | values = [ |
269 | formatter('hour', pair[0]), | ||
270 | formatter('minute', pair[1]) | ||
271 | ]; | ||
273 | } | 272 | } |
274 | else { | 273 | else { |
275 | const date = new Date(value); | 274 | const date = new Date(value); |
276 | values = [`${date.getFullYear()}`, padZero(date.getMonth() + 1)]; | 275 | values = [ |
277 | if (data.type === 'date') { | 276 | formatter('year', `${date.getFullYear()}`), |
278 | values.push(padZero(date.getDate())); | 277 | formatter('month', padZero(date.getMonth() + 1)) |
278 | ]; | ||
279 | if (type === 'date') { | ||
280 | values.push(formatter('day', padZero(date.getDate()))); | ||
279 | } | 281 | } |
280 | if (data.type === 'datetime') { | 282 | if (type === 'datetime') { |
281 | values.push(padZero(date.getDate()), padZero(date.getHours()), padZero(date.getMinutes())); | 283 | values.push(formatter('day', padZero(date.getDate())), formatter('hour', padZero(date.getHours())), formatter('minute', padZero(date.getMinutes()))); |
282 | } | 284 | } |
283 | } | 285 | } |
284 | return this.set({ innerValue: value }) | 286 | return this.set({ innerValue: value }) | ... | ... |
1 | <van-picker | 1 | <van-picker |
2 | class="van-datetime-picker" | 2 | class="van-datetime-picker" |
3 | active-class="active-class" | ||
4 | toolbar-class="toolbar-class" | ||
5 | column-class="column-class" | ||
3 | title="{{ title }}" | 6 | title="{{ title }}" |
4 | columns="{{ columns }}" | 7 | columns="{{ columns }}" |
5 | item-height="{{ itemHeight }}" | 8 | item-height="{{ itemHeight }}" | ... | ... |
src/ui/vant-weapp/definitions/index.d.ts
0 → 100755
1 | /// <reference types="miniprogram-api-typings" /> | ||
2 | import { Weapp } from './weapp'; | ||
3 | declare type RecordToAny<T> = { | ||
4 | [K in keyof T]: any; | ||
5 | }; | ||
6 | export declare type CombinedComponentInstance<Data, Props, Methods> = Methods & WechatMiniprogram.Component.TrivialInstance & Weapp.FormField & { | ||
7 | data: Data & RecordToAny<Props>; | ||
8 | }; | ||
9 | export interface VantComponentOptions<Data, Props, Methods, Instance> { | ||
10 | data?: Data; | ||
11 | field?: boolean; | ||
12 | classes?: string[]; | ||
13 | mixins?: string[]; | ||
14 | props?: Props & Weapp.PropertyOption; | ||
15 | watch?: Weapp.WatchOption<Instance>; | ||
16 | relation?: Weapp.RelationOption<Instance> & { | ||
17 | name: string; | ||
18 | }; | ||
19 | relations?: { | ||
20 | [componentName: string]: Weapp.RelationOption<Instance>; | ||
21 | }; | ||
22 | methods?: Methods & Weapp.MethodOption<Instance>; | ||
23 | beforeCreate?: (this: Instance) => void; | ||
24 | created?: (this: Instance) => void; | ||
25 | mounted?: (this: Instance) => void; | ||
26 | destroyed?: (this: Instance) => void; | ||
27 | } | ||
28 | export {}; |
src/ui/vant-weapp/definitions/index.js
0 → 100755
File mode changed
src/ui/vant-weapp/definitions/weapp.d.ts
0 → 100755
1 | /// <reference types="miniprogram-api-typings" /> | ||
2 | export declare namespace Weapp { | ||
3 | export interface FormField { | ||
4 | data: { | ||
5 | name: string; | ||
6 | value: any; | ||
7 | }; | ||
8 | } | ||
9 | interface Target { | ||
10 | id: string; | ||
11 | tagName: string; | ||
12 | dataset: { | ||
13 | [key: string]: any; | ||
14 | }; | ||
15 | } | ||
16 | export interface Event { | ||
17 | /** | ||
18 | * 代表事件的类型。 | ||
19 | */ | ||
20 | type: string; | ||
21 | /** | ||
22 | * 页面打开到触发事件所经过的毫秒数。 | ||
23 | */ | ||
24 | timeStamp: number; | ||
25 | /** | ||
26 | * 触发事件的源组件。 | ||
27 | */ | ||
28 | target: Target; | ||
29 | /** | ||
30 | * 事件绑定的当前组件。 | ||
31 | */ | ||
32 | currentTarget: Target; | ||
33 | /** | ||
34 | * 额外的信息 | ||
35 | */ | ||
36 | detail: any; | ||
37 | } | ||
38 | interface Touch { | ||
39 | /** | ||
40 | * 触摸点的标识符 | ||
41 | */ | ||
42 | identifier: number; | ||
43 | /** | ||
44 | * 距离文档左上角的距离,文档的左上角为原点 ,横向为X轴,纵向为Y轴 | ||
45 | */ | ||
46 | pageX: number; | ||
47 | /** | ||
48 | * 距离文档左上角的距离,文档的左上角为原点 ,横向为X轴,纵向为Y轴 | ||
49 | */ | ||
50 | pageY: number; | ||
51 | /** | ||
52 | * 距离页面可显示区域(屏幕除去导航条)左上角距离,横向为X轴,纵向为Y轴 | ||
53 | */ | ||
54 | clientX: number; | ||
55 | /** | ||
56 | * 距离页面可显示区域(屏幕除去导航条)左上角距离,横向为X轴,纵向为Y轴 | ||
57 | */ | ||
58 | clientY: number; | ||
59 | } | ||
60 | export interface TouchEvent extends Event { | ||
61 | touches: Array<Touch>; | ||
62 | changedTouches: Array<Touch>; | ||
63 | } | ||
64 | /** | ||
65 | * relation定义,miniprogram-api-typings缺少this定义 | ||
66 | */ | ||
67 | export interface RelationOption<Instance> { | ||
68 | /** 目标组件的相对关系 */ | ||
69 | type: 'parent' | 'child' | 'ancestor' | 'descendant'; | ||
70 | /** 关系生命周期函数,当关系被建立在页面节点树中时触发,触发时机在组件attached生命周期之后 */ | ||
71 | linked?(this: Instance, target: WechatMiniprogram.Component.TrivialInstance): void; | ||
72 | /** 关系生命周期函数,当关系在页面节点树中发生改变时触发,触发时机在组件moved生命周期之后 */ | ||
73 | linkChanged?(this: Instance, target: WechatMiniprogram.Component.TrivialInstance): void; | ||
74 | /** 关系生命周期函数,当关系脱离页面节点树时触发,触发时机在组件detached生命周期之后 */ | ||
75 | unlinked?(this: Instance, target: WechatMiniprogram.Component.TrivialInstance): void; | ||
76 | /** 如果这一项被设置,则它表示关联的目标节点所应具有的behavior,所有拥有这一behavior的组件节点都会被关联 */ | ||
77 | target?: string; | ||
78 | } | ||
79 | /** | ||
80 | * obverser定义,miniprogram-api-typings缺少this定义 | ||
81 | */ | ||
82 | type Observer<Instance, T> = (this: Instance, newVal: T, oldVal: T, changedPath: Array<string | number>) => void; | ||
83 | /** | ||
84 | * watch定义 | ||
85 | */ | ||
86 | export interface WatchOption<Instance> { | ||
87 | [name: string]: string | Observer<Instance, any>; | ||
88 | } | ||
89 | /** | ||
90 | * methods定义,miniprogram-api-typings缺少this定义 | ||
91 | */ | ||
92 | export interface MethodOption<Instance> { | ||
93 | [name: string]: (this: Instance, ...args: any[]) => any; | ||
94 | } | ||
95 | export interface ComputedOption<Instance> { | ||
96 | [name: string]: (this: Instance) => any; | ||
97 | } | ||
98 | type PropertyType = StringConstructor | NumberConstructor | BooleanConstructor | ArrayConstructor | ObjectConstructor | FunctionConstructor | null; | ||
99 | export interface PropertyOption { | ||
100 | [name: string]: PropertyType | PropertyType[] | { | ||
101 | /** 属性类型 */ | ||
102 | type: PropertyType | PropertyType[]; | ||
103 | /** 属性初始值 */ | ||
104 | value?: any; | ||
105 | /** 属性值被更改时的响应函数 */ | ||
106 | observer?: string | Observer<WechatMiniprogram.Component.TrivialInstance, any>; | ||
107 | /** 属性的类型(可以指定多个) */ | ||
108 | optionalTypes?: PropertyType[]; | ||
109 | }; | ||
110 | } | ||
111 | export {}; | ||
112 | } |
src/ui/vant-weapp/definitions/weapp.js
0 → 100755
File mode changed
1 | /// <reference types="miniprogram-api-typings" /> | ||
1 | declare type DialogAction = 'confirm' | 'cancel'; | 2 | declare type DialogAction = 'confirm' | 'cancel'; |
2 | declare type DialogOptions = { | 3 | declare type DialogOptions = { |
3 | lang?: string; | 4 | lang?: string; |
4 | show?: boolean; | 5 | show?: boolean; |
5 | title?: string; | 6 | title?: string; |
7 | width?: string | number; | ||
6 | zIndex?: number; | 8 | zIndex?: number; |
7 | context?: any; | 9 | context?: WechatMiniprogram.Page.TrivialInstance | WechatMiniprogram.Component.TrivialInstance; |
8 | message?: string; | 10 | message?: string; |
9 | overlay?: boolean; | 11 | overlay?: boolean; |
10 | selector?: string; | 12 | selector?: string; |
11 | ariaLabel?: string; | 13 | ariaLabel?: string; |
14 | className?: string; | ||
15 | customStyle?: string; | ||
12 | transition?: string; | 16 | transition?: string; |
13 | asyncClose?: boolean; | 17 | asyncClose?: boolean; |
14 | businessId?: number; | 18 | businessId?: number; |
15 | sessionFrom?: string; | 19 | sessionFrom?: string; |
20 | overlayStyle?: string; | ||
16 | appParameter?: string; | 21 | appParameter?: string; |
17 | messageAlign?: string; | 22 | messageAlign?: string; |
18 | sendMessageImg?: string; | 23 | sendMessageImg?: string; | ... | ... |
... | @@ -4,13 +4,14 @@ function getContext() { | ... | @@ -4,13 +4,14 @@ function getContext() { |
4 | return pages[pages.length - 1]; | 4 | return pages[pages.length - 1]; |
5 | } | 5 | } |
6 | const Dialog = options => { | 6 | const Dialog = options => { |
7 | options = Object.assign({}, Dialog.currentOptions, options); | 7 | options = Object.assign(Object.assign({}, Dialog.currentOptions), options); |
8 | return new Promise((resolve, reject) => { | 8 | return new Promise((resolve, reject) => { |
9 | const context = options.context || getContext(); | 9 | const context = options.context || getContext(); |
10 | const dialog = context.selectComponent(options.selector); | 10 | const dialog = context.selectComponent(options.selector); |
11 | delete options.context; | ||
11 | delete options.selector; | 12 | delete options.selector; |
12 | if (dialog) { | 13 | if (dialog) { |
13 | dialog.set(Object.assign({ onCancel: reject, onConfirm: resolve }, options)); | 14 | dialog.setData(Object.assign({ onCancel: reject, onConfirm: resolve }, options)); |
14 | queue.push(dialog); | 15 | queue.push(dialog); |
15 | } | 16 | } |
16 | else { | 17 | else { |
... | @@ -21,13 +22,17 @@ const Dialog = options => { | ... | @@ -21,13 +22,17 @@ const Dialog = options => { |
21 | Dialog.defaultOptions = { | 22 | Dialog.defaultOptions = { |
22 | show: true, | 23 | show: true, |
23 | title: '', | 24 | title: '', |
25 | width: null, | ||
24 | message: '', | 26 | message: '', |
25 | zIndex: 100, | 27 | zIndex: 100, |
26 | overlay: true, | 28 | overlay: true, |
29 | selector: '#van-dialog', | ||
30 | className: '', | ||
27 | asyncClose: false, | 31 | asyncClose: false, |
28 | messageAlign: '', | ||
29 | transition: 'scale', | 32 | transition: 'scale', |
30 | selector: '#van-dialog', | 33 | customStyle: '', |
34 | messageAlign: '', | ||
35 | overlayStyle: '', | ||
31 | confirmButtonText: '确认', | 36 | confirmButtonText: '确认', |
32 | cancelButtonText: '取消', | 37 | cancelButtonText: '取消', |
33 | showConfirmButton: true, | 38 | showConfirmButton: true, | ... | ... |
1 | import { VantComponent } from '../common/component'; | 1 | import { VantComponent } from '../common/component'; |
2 | import { button } from '../mixins/button'; | 2 | import { button } from '../mixins/button'; |
3 | import { openType } from '../mixins/open-type'; | 3 | import { openType } from '../mixins/open-type'; |
4 | import { addUnit } from '../common/utils'; | ||
5 | import { GRAY, BLUE } from '../common/color'; | ||
4 | VantComponent({ | 6 | VantComponent({ |
5 | mixins: [button, openType], | 7 | mixins: [button, openType], |
6 | props: { | 8 | props: { |
... | @@ -8,11 +10,19 @@ VantComponent({ | ... | @@ -8,11 +10,19 @@ VantComponent({ |
8 | title: String, | 10 | title: String, |
9 | message: String, | 11 | message: String, |
10 | useSlot: Boolean, | 12 | useSlot: Boolean, |
13 | className: String, | ||
14 | customStyle: String, | ||
11 | asyncClose: Boolean, | 15 | asyncClose: Boolean, |
12 | messageAlign: String, | 16 | messageAlign: String, |
17 | overlayStyle: String, | ||
18 | useTitleSlot: Boolean, | ||
13 | showCancelButton: Boolean, | 19 | showCancelButton: Boolean, |
14 | closeOnClickOverlay: Boolean, | 20 | closeOnClickOverlay: Boolean, |
15 | confirmButtonOpenType: String, | 21 | confirmButtonOpenType: String, |
22 | width: { | ||
23 | type: null, | ||
24 | observer: 'setWidthWithUnit' | ||
25 | }, | ||
16 | zIndex: { | 26 | zIndex: { |
17 | type: Number, | 27 | type: Number, |
18 | value: 2000 | 28 | value: 2000 |
... | @@ -25,6 +35,14 @@ VantComponent({ | ... | @@ -25,6 +35,14 @@ VantComponent({ |
25 | type: String, | 35 | type: String, |
26 | value: '取消' | 36 | value: '取消' |
27 | }, | 37 | }, |
38 | confirmButtonColor: { | ||
39 | type: String, | ||
40 | value: BLUE | ||
41 | }, | ||
42 | cancelButtonColor: { | ||
43 | type: String, | ||
44 | value: GRAY | ||
45 | }, | ||
28 | showConfirmButton: { | 46 | showConfirmButton: { |
29 | type: Boolean, | 47 | type: Boolean, |
30 | value: true | 48 | value: true |
... | @@ -61,19 +79,19 @@ VantComponent({ | ... | @@ -61,19 +79,19 @@ VantComponent({ |
61 | }, | 79 | }, |
62 | handleAction(action) { | 80 | handleAction(action) { |
63 | if (this.data.asyncClose) { | 81 | if (this.data.asyncClose) { |
64 | this.set({ | 82 | this.setData({ |
65 | [`loading.${action}`]: true | 83 | [`loading.${action}`]: true |
66 | }); | 84 | }); |
67 | } | 85 | } |
68 | this.onClose(action); | 86 | this.onClose(action); |
69 | }, | 87 | }, |
70 | close() { | 88 | close() { |
71 | this.set({ | 89 | this.setData({ |
72 | show: false | 90 | show: false |
73 | }); | 91 | }); |
74 | }, | 92 | }, |
75 | stopLoading() { | 93 | stopLoading() { |
76 | this.set({ | 94 | this.setData({ |
77 | loading: { | 95 | loading: { |
78 | confirm: false, | 96 | confirm: false, |
79 | cancel: false | 97 | cancel: false |
... | @@ -85,12 +103,17 @@ VantComponent({ | ... | @@ -85,12 +103,17 @@ VantComponent({ |
85 | this.close(); | 103 | this.close(); |
86 | } | 104 | } |
87 | this.$emit('close', action); | 105 | this.$emit('close', action); |
88 | //把 dialog 实例传递出去,可以通过 stopLoading() 在外部关闭按钮的 loading | 106 | // 把 dialog 实例传递出去,可以通过 stopLoading() 在外部关闭按钮的 loading |
89 | this.$emit(action, { dialog: this }); | 107 | this.$emit(action, { dialog: this }); |
90 | const callback = this.data[action === 'confirm' ? 'onConfirm' : 'onCancel']; | 108 | const callback = this.data[action === 'confirm' ? 'onConfirm' : 'onCancel']; |
91 | if (callback) { | 109 | if (callback) { |
92 | callback(this); | 110 | callback(this); |
93 | } | 111 | } |
112 | }, | ||
113 | setWidthWithUnit(val) { | ||
114 | this.setData({ | ||
115 | widthWithUnit: addUnit(val) | ||
116 | }); | ||
94 | } | 117 | } |
95 | } | 118 | } |
96 | }); | 119 | }); | ... | ... |
... | @@ -2,16 +2,19 @@ | ... | @@ -2,16 +2,19 @@ |
2 | show="{{ show }}" | 2 | show="{{ show }}" |
3 | z-index="{{ zIndex }}" | 3 | z-index="{{ zIndex }}" |
4 | overlay="{{ overlay }}" | 4 | overlay="{{ overlay }}" |
5 | custom-class="van-dialog" | ||
6 | transition="{{ transition }}" | 5 | transition="{{ transition }}" |
6 | custom-class="van-dialog {{ className }}" | ||
7 | custom-style="{{ widthWithUnit ? 'width: ' + widthWithUnit + ';' : '' }}{{ customStyle }}" | ||
8 | overlay-style="{{ overlayStyle }}" | ||
7 | close-on-click-overlay="{{ closeOnClickOverlay }}" | 9 | close-on-click-overlay="{{ closeOnClickOverlay }}" |
8 | bind:close="onClickOverlay" | 10 | bind:close="onClickOverlay" |
9 | > | 11 | > |
10 | <view | 12 | <view |
11 | wx:if="{{ title }}" | 13 | wx:if="{{ title || useTitleSlot }}" |
12 | class="van-dialog__header {{ message || useSlot ? '' : 'van-dialog--isolated' }}" | 14 | class="van-dialog__header {{ message || useSlot ? '' : 'van-dialog--isolated' }}" |
13 | > | 15 | > |
14 | {{ title }} | 16 | <slot wx:if="{{ useTitleSlot }}" name="title" /> |
17 | <block wx:elif="{{ title }}"> {{ title }}</block> | ||
15 | </view> | 18 | </view> |
16 | 19 | ||
17 | <slot wx:if="{{ useSlot }}" /> | 20 | <slot wx:if="{{ useSlot }}" /> |
... | @@ -19,7 +22,7 @@ | ... | @@ -19,7 +22,7 @@ |
19 | wx:elif="{{ message }}" | 22 | wx:elif="{{ message }}" |
20 | class="van-dialog__message {{ title ? 'van-dialog__message--has-title' : '' }} {{ messageAlign ? 'van-dialog__message--' + messageAlign : '' }}" | 23 | class="van-dialog__message {{ title ? 'van-dialog__message--has-title' : '' }} {{ messageAlign ? 'van-dialog__message--' + messageAlign : '' }}" |
21 | > | 24 | > |
22 | <text>{{ message }}</text> | 25 | <text class="van-dialog__message-text">{{ message }}</text> |
23 | </view> | 26 | </view> |
24 | 27 | ||
25 | <view class="van-hairline--top van-dialog__footer"> | 28 | <view class="van-hairline--top van-dialog__footer"> |
... | @@ -29,6 +32,7 @@ | ... | @@ -29,6 +32,7 @@ |
29 | loading="{{ loading.cancel }}" | 32 | loading="{{ loading.cancel }}" |
30 | class="van-dialog__button van-hairline--right" | 33 | class="van-dialog__button van-hairline--right" |
31 | custom-class="van-dialog__cancel" | 34 | custom-class="van-dialog__cancel" |
35 | custom-style="color: {{ cancelButtonColor }}" | ||
32 | bind:click="onCancel" | 36 | bind:click="onCancel" |
33 | > | 37 | > |
34 | {{ cancelButtonText }} | 38 | {{ cancelButtonText }} |
... | @@ -39,6 +43,7 @@ | ... | @@ -39,6 +43,7 @@ |
39 | class="van-dialog__button" | 43 | class="van-dialog__button" |
40 | loading="{{ loading.confirm }}" | 44 | loading="{{ loading.confirm }}" |
41 | custom-class="van-dialog__confirm" | 45 | custom-class="van-dialog__confirm" |
46 | custom-style="color: {{ confirmButtonColor }}" | ||
42 | 47 | ||
43 | open-type="{{ confirmButtonOpenType }}" | 48 | open-type="{{ confirmButtonOpenType }}" |
44 | lang="{{ lang }}" | 49 | lang="{{ lang }}" | ... | ... |
1 | @import '../common/index.wxss';.van-dialog{width:85%;overflow:hidden;font-size:16px;background-color:#fff;border-radius:4px}.van-dialog__header{padding-top:25px;font-weight:500;text-align:center}.van-dialog__header--isolated{padding:25px 0}.van-dialog__message{max-height:60vh;padding:25px;overflow-y:auto;font-size:14px;line-height:1.5;text-align:center;-webkit-overflow-scrolling:touch}.van-dialog__message--has-title{padding-top:12px;color:#7d7e80}.van-dialog__message--left{text-align:left}.van-dialog__message--right{text-align:right}.van-dialog__footer{display:-webkit-flex;display:flex}.van-dialog__button{-webkit-flex:1;flex:1}.van-dialog__cancel,.van-dialog__confirm{border:0!important}.van-dialog__confirm{color:#1989fa!important}.van-dialog-bounce-enter{opacity:0;-webkit-transform:translate3d(-50%,-50%,0) scale(.7);transform:translate3d(-50%,-50%,0) scale(.7)}.van-dialog-bounce-leave-active{opacity:0;-webkit-transform:translate3d(-50%,-50%,0) scale(.9);transform:translate3d(-50%,-50%,0) scale(.9)} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | @import '../common/index.wxss';.van-dialog{top:45%!important;overflow:hidden;width:320px;width:var(--dialog-width,320px);font-size:16px;font-size:var(--dialog-font-size,16px);border-radius:16px;border-radius:var(--dialog-border-radius,16px);background-color:#fff;background-color:var(--dialog-background-color,#fff)}@media (max-width:321px){.van-dialog{width:90%;width:var(--dialog-small-screen-width,90%)}}.van-dialog__header{text-align:center;padding-top:24px;padding-top:var(--dialog-header-padding-top,24px);font-weight:500;font-weight:var(--dialog-header-font-weight,500);line-height:24px;line-height:var(--dialog-header-line-height,24px)}.van-dialog__header--isolated{padding:24px 0;padding:var(--dialog-header-isolated-padding,24px 0)}.van-dialog__message{overflow-y:auto;text-align:center;-webkit-overflow-scrolling:touch;font-size:14px;font-size:var(--dialog-message-font-size,14px);line-height:20px;line-height:var(--dialog-message-line-height,20px);max-height:60vh;max-height:var(--dialog-message-max-height,60vh);padding:24px;padding:var(--dialog-message-padding,24px)}.van-dialog__message-text{word-wrap:break-word}.van-dialog__message--has-title{padding-top:12px;padding-top:var(--dialog-has-title-message-padding-top,12px);color:#7d7e80;color:var(--dialog-has-title-message-text-color,#7d7e80)}.van-dialog__message--left{text-align:left}.van-dialog__message--right{text-align:right}.van-dialog__footer{display:-webkit-flex;display:flex}.van-dialog__button{-webkit-flex:1;flex:1}.van-dialog__cancel,.van-dialog__confirm{border:0!important}.van-dialog-bounce-enter{-webkit-transform:translate3d(-50%,-50%,0) scale(.7);transform:translate3d(-50%,-50%,0) scale(.7);opacity:0}.van-dialog-bounce-leave-active{-webkit-transform:translate3d(-50%,-50%,0) scale(.9);transform:translate3d(-50%,-50%,0) scale(.9);opacity:0} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
src/ui/vant-weapp/divider/index.js
0 → 100755
1 | import { VantComponent } from '../common/component'; | ||
2 | VantComponent({ | ||
3 | props: { | ||
4 | dashed: { | ||
5 | type: Boolean, | ||
6 | value: false | ||
7 | }, | ||
8 | hairline: { | ||
9 | type: Boolean, | ||
10 | value: false | ||
11 | }, | ||
12 | contentPosition: { | ||
13 | type: String, | ||
14 | value: '' | ||
15 | }, | ||
16 | fontSize: { | ||
17 | type: Number, | ||
18 | value: '' | ||
19 | }, | ||
20 | borderColor: { | ||
21 | type: String, | ||
22 | value: '' | ||
23 | }, | ||
24 | textColor: { | ||
25 | type: String, | ||
26 | value: '' | ||
27 | }, | ||
28 | customStyle: { | ||
29 | type: String, | ||
30 | value: '' | ||
31 | } | ||
32 | } | ||
33 | }); |
src/ui/vant-weapp/divider/index.json
0 → 100755
src/ui/vant-weapp/divider/index.wxml
0 → 100755
1 | <wxs src="../wxs/utils.wxs" module="utils" /> | ||
2 | |||
3 | <view | ||
4 | class="custom-class {{ utils.bem('divider', [{dashed, hairline}, contentPosition]) }}" | ||
5 | style="{{ borderColor ? 'border-color: ' + borderColor + ';' : '' }}{{ textColor ? 'color: ' + textColor + ';' : '' }} {{ fontSize ? 'font-size: ' + fontSize + 'px;' : '' }} {{ customStyle }}" | ||
6 | > | ||
7 | <slot /> | ||
8 | </view> |
src/ui/vant-weapp/divider/index.wxss
0 → 100755
1 | @import '../common/index.wxss';.van-divider{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;margin:16px 0;margin:var(--divider-margin,16px 0);color:#969799;color:var(--divider-text-color,#969799);font-size:14px;font-size:var(--divider-font-size,14px);line-height:24px;line-height:var(--divider-line-height,24px);border:0 solid #ebedf0;border-color:var(--divider-border-color,#ebedf0)}.van-divider:after,.van-divider:before{display:block;-webkit-flex:1;flex:1;box-sizing:border-box;height:1px;border-color:inherit;border-style:inherit;border-width:1px 0 0}.van-divider:before{content:""}.van-divider--hairline:after,.van-divider--hairline:before{-webkit-transform:scaleY(.5);transform:scaleY(.5)}.van-divider--dashed{border-style:dashed}.van-divider--center:before,.van-divider--left:before,.van-divider--right:before{margin-right:16px;margin-right:var(--divider-content-padding,16px)}.van-divider--center:after,.van-divider--left:after,.van-divider--right:after{content:"";margin-left:16px;margin-left:var(--divider-content-padding,16px)}.van-divider--left:before{max-width:10%;max-width:var(--divider-content-left-width,10%)}.van-divider--right:after{max-width:10%;max-width:var(--divider-content-right-width,10%)} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
src/ui/vant-weapp/dropdown-item/index.d.ts
0 → 100755
1 | export {}; |
src/ui/vant-weapp/dropdown-item/index.js
0 → 100755
1 | import { VantComponent } from '../common/component'; | ||
2 | VantComponent({ | ||
3 | field: true, | ||
4 | relation: { | ||
5 | name: 'dropdown-menu', | ||
6 | type: 'ancestor', | ||
7 | linked(target) { | ||
8 | this.parent = target; | ||
9 | }, | ||
10 | unlinked() { | ||
11 | this.parent = null; | ||
12 | } | ||
13 | }, | ||
14 | props: { | ||
15 | value: null, | ||
16 | title: String, | ||
17 | disabled: Boolean, | ||
18 | titleClass: String, | ||
19 | options: { | ||
20 | type: Array, | ||
21 | value: [] | ||
22 | } | ||
23 | }, | ||
24 | data: { | ||
25 | transition: true, | ||
26 | showPopup: false, | ||
27 | showWrapper: false, | ||
28 | displayTitle: '' | ||
29 | }, | ||
30 | created() { | ||
31 | this.setData({ displayTitle: this.computedDisplayTitle(this.data.value) }); | ||
32 | }, | ||
33 | methods: { | ||
34 | computedDisplayTitle(curValue) { | ||
35 | const { title, options } = this.data; | ||
36 | if (title) { | ||
37 | return title; | ||
38 | } | ||
39 | const match = options.filter(option => option.value === curValue); | ||
40 | const displayTitle = match.length ? match[0].text : ''; | ||
41 | return displayTitle; | ||
42 | }, | ||
43 | onClickOverlay() { | ||
44 | this.toggle(); | ||
45 | this.$emit('close'); | ||
46 | }, | ||
47 | onOptionTap(event) { | ||
48 | let { value, displayTitle } = this.data; | ||
49 | const { option } = event.currentTarget.dataset; | ||
50 | const { value: optionValue } = option; | ||
51 | if (optionValue !== value) { | ||
52 | value = optionValue; | ||
53 | displayTitle = this.computedDisplayTitle(optionValue); | ||
54 | this.$emit('change', optionValue); | ||
55 | } | ||
56 | this.setData({ showPopup: false, value, displayTitle }); | ||
57 | const time = this.data.duration || 0; | ||
58 | setTimeout(() => { | ||
59 | this.setData({ showWrapper: false }); | ||
60 | }, time); | ||
61 | // parent 中的 itemListData 是 children 上的数据的集合 | ||
62 | // 数据的更新由 children 各自维护,但是模板的更新需要额外触发 parent 的 setData | ||
63 | this.parent.setData({ itemListData: this.parent.data.itemListData }); | ||
64 | }, | ||
65 | toggle() { | ||
66 | const { childIndex } = this.data; | ||
67 | this.parent.toggleItem(childIndex); | ||
68 | } | ||
69 | } | ||
70 | }); |
src/ui/vant-weapp/dropdown-item/index.wxml
0 → 100755
1 | <wxs src="../wxs/utils.wxs" module="utils" /> | ||
2 | |||
3 | <view | ||
4 | wx:if="{{ showWrapper }}" | ||
5 | class="{{ utils.bem('dropdown-item', direction) }}" | ||
6 | style="{{ wrapperStyle }}" | ||
7 | > | ||
8 | <van-popup | ||
9 | show="{{ showPopup }}" | ||
10 | custom-style="position: absolute;" | ||
11 | overlay-style="position: absolute;" | ||
12 | overlay="{{ overlay }}" | ||
13 | position="{{ direction === 'down' ? 'top' : 'bottom' }}" | ||
14 | duration="{{ transition ? duration : 0 }}" | ||
15 | close-on-click-overlay="{{ closeOnClickOverlay }}" | ||
16 | bind:close="onClickOverlay" | ||
17 | > | ||
18 | <van-cell | ||
19 | wx:for="{{ options }}" | ||
20 | wx:key="{{ item.value }}" | ||
21 | data-option="{{ item }}" | ||
22 | class="{{ utils.bem('dropdown-item__option', { active: item.value === value } ) }}" | ||
23 | clickable | ||
24 | icon="{{ item.icon }}" | ||
25 | bind:tap="onOptionTap" | ||
26 | > | ||
27 | <view | ||
28 | slot="title" | ||
29 | class="van-dropdown-item__title" | ||
30 | style="{{ item.value === value ? 'color:' + activeColor : '' }}" | ||
31 | > | ||
32 | {{ item.text }} | ||
33 | </view> | ||
34 | <van-icon | ||
35 | wx:if="{{ item.value === value }}" | ||
36 | name="success" | ||
37 | class="van-dropdown-item__icon" | ||
38 | color="{{ activeColor }}" | ||
39 | /> | ||
40 | </van-cell> | ||
41 | |||
42 | <slot /> | ||
43 | </van-popup> | ||
44 | </view> |
src/ui/vant-weapp/dropdown-item/index.wxss
0 → 100755
1 | @import '../common/index.wxss';.van-dropdown-item{position:fixed;right:0;left:0;overflow:hidden}.van-dropdown-item__option{text-align:left}.van-dropdown-item__option--active .van-dropdown-item__icon,.van-dropdown-item__option--active .van-dropdown-item__title{color:#1989fa;color:var(--dropdown-menu-option-active-color,#1989fa)}.van-dropdown-item--up{top:0}.van-dropdown-item--down{bottom:0}.van-dropdown-item__icon{display:block;line-height:inherit} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
src/ui/vant-weapp/dropdown-menu/index.d.ts
0 → 100755
1 | export {}; |
src/ui/vant-weapp/dropdown-menu/index.js
0 → 100755
1 | import { VantComponent } from '../common/component'; | ||
2 | import { addUnit } from '../common/utils'; | ||
3 | let ARRAY = []; | ||
4 | VantComponent({ | ||
5 | field: true, | ||
6 | relation: { | ||
7 | name: 'dropdown-item', | ||
8 | type: 'descendant', | ||
9 | linked(target) { | ||
10 | this.children = this.children || []; | ||
11 | // 透传 props 给 dropdown-item | ||
12 | const { overlay, duration, activeColor, closeOnClickOverlay, direction } = this.data; | ||
13 | this.updateChildData(target, { | ||
14 | overlay, | ||
15 | duration, | ||
16 | activeColor, | ||
17 | closeOnClickOverlay, | ||
18 | direction, | ||
19 | childIndex: this.children.length | ||
20 | }); | ||
21 | this.children.push(target); | ||
22 | // 收集 dorpdown-item 的 data 挂在 data 上 | ||
23 | target && | ||
24 | this.setData({ | ||
25 | itemListData: this.data.itemListData.concat([target.data]) | ||
26 | }); | ||
27 | }, | ||
28 | unlinked(target) { | ||
29 | this.children = this.children.filter((child) => child !== target); | ||
30 | } | ||
31 | }, | ||
32 | props: { | ||
33 | activeColor: String, | ||
34 | overlay: { | ||
35 | type: Boolean, | ||
36 | value: true | ||
37 | }, | ||
38 | zIndex: { | ||
39 | type: Number, | ||
40 | value: 10 | ||
41 | }, | ||
42 | duration: { | ||
43 | type: Number, | ||
44 | value: 200 | ||
45 | }, | ||
46 | direction: { | ||
47 | type: String, | ||
48 | value: 'down' | ||
49 | }, | ||
50 | closeOnClickOverlay: { | ||
51 | type: Boolean, | ||
52 | value: true | ||
53 | }, | ||
54 | closeOnClickOutside: { | ||
55 | type: Boolean, | ||
56 | value: true | ||
57 | } | ||
58 | }, | ||
59 | data: { | ||
60 | itemListData: [] | ||
61 | }, | ||
62 | created() { | ||
63 | ARRAY.push(this); | ||
64 | }, | ||
65 | destroyed() { | ||
66 | ARRAY = ARRAY.filter(item => item !== this); | ||
67 | }, | ||
68 | methods: { | ||
69 | updateChildData(childItem, newData, needRefreshList = false) { | ||
70 | childItem.setData(newData); | ||
71 | if (needRefreshList) { | ||
72 | // dropdown-item data 更新,涉及到 title 的展示,触发模板更新 | ||
73 | this.setData({ itemListData: this.data.itemListData }); | ||
74 | } | ||
75 | }, | ||
76 | toggleItem(active) { | ||
77 | this.children.forEach((item, index) => { | ||
78 | const { showPopup } = item.data; | ||
79 | if (index === active) { | ||
80 | this.toggleChildItem(item); | ||
81 | } | ||
82 | else if (showPopup) { | ||
83 | this.toggleChildItem(item, false, { immediate: true }); | ||
84 | } | ||
85 | }); | ||
86 | }, | ||
87 | toggleChildItem(childItem, show, options = {}) { | ||
88 | const { showPopup, duration } = childItem.data; | ||
89 | if (show === undefined) | ||
90 | show = !showPopup; | ||
91 | if (show === showPopup) { | ||
92 | return; | ||
93 | } | ||
94 | const newChildData = { transition: !options.immediate, showPopup: show }; | ||
95 | if (!show) { | ||
96 | const time = options.immediate ? 0 : duration; | ||
97 | this.updateChildData(childItem, Object.assign({}, newChildData), true); | ||
98 | setTimeout(() => { | ||
99 | this.updateChildData(childItem, { showWrapper: false }, true); | ||
100 | }, time); | ||
101 | return; | ||
102 | } | ||
103 | this.getChildWrapperStyle().then((wrapperStyle = '') => { | ||
104 | this.updateChildData(childItem, Object.assign(Object.assign({}, newChildData), { wrapperStyle, showWrapper: true }), true); | ||
105 | }); | ||
106 | }, | ||
107 | close() { | ||
108 | this.children.forEach((item) => { | ||
109 | this.toggleChildItem(item, false, { immediate: true }); | ||
110 | }); | ||
111 | }, | ||
112 | getChildWrapperStyle() { | ||
113 | const { windowHeight } = wx.getSystemInfoSync(); | ||
114 | const { zIndex, direction } = this.data; | ||
115 | let offset = 0; | ||
116 | return this.getRect('.van-dropdown-menu').then(rect => { | ||
117 | const { top = 0, bottom = 0 } = rect; | ||
118 | if (direction === 'down') { | ||
119 | offset = bottom; | ||
120 | } | ||
121 | else { | ||
122 | offset = windowHeight - top; | ||
123 | } | ||
124 | let wrapperStyle = `z-index: ${zIndex};`; | ||
125 | if (direction === 'down') { | ||
126 | wrapperStyle += `top: ${addUnit(offset)};`; | ||
127 | } | ||
128 | else { | ||
129 | wrapperStyle += `bottom: ${addUnit(offset)};`; | ||
130 | } | ||
131 | return Promise.resolve(wrapperStyle); | ||
132 | }); | ||
133 | }, | ||
134 | onTitleTap(event) { | ||
135 | // item ---> dropdown-item | ||
136 | const { item, index } = event.currentTarget.dataset; | ||
137 | if (!item.disabled) { | ||
138 | // menuItem ---> dropdown-menu | ||
139 | ARRAY.forEach(menuItem => { | ||
140 | if (menuItem && menuItem.data.closeOnClickOutside && menuItem !== this) { | ||
141 | menuItem.close(); | ||
142 | } | ||
143 | }); | ||
144 | this.toggleItem(index); | ||
145 | } | ||
146 | } | ||
147 | } | ||
148 | }); |
src/ui/vant-weapp/dropdown-menu/index.json
0 → 100755
src/ui/vant-weapp/dropdown-menu/index.wxml
0 → 100755
1 | <wxs src="../wxs/utils.wxs" module="utils" /> | ||
2 | |||
3 | <view class="van-dropdown-menu van-dropdown-menu--top-bottom"> | ||
4 | <view | ||
5 | wx:for="{{ itemListData }}" | ||
6 | wx:key="index" | ||
7 | data-item="{{ item }}" | ||
8 | data-index="{{ index }}" | ||
9 | class="{{ utils.bem('dropdown-menu__item', { disabled: item.disabled }) }}" | ||
10 | bind:tap="onTitleTap" | ||
11 | > | ||
12 | <view | ||
13 | class="{{ item.titleClass }} {{ utils.bem('dropdown-menu__title', { active: item.showPopup, down: item.showPopup === (direction === 'down') }) }}" | ||
14 | style="{{ item.showPopup ? 'color:' + activeColor : '' }}" | ||
15 | > | ||
16 | <view class="van-ellipsis"> | ||
17 | {{item.displayTitle}} | ||
18 | </view> | ||
19 | </view> | ||
20 | </view> | ||
21 | |||
22 | <slot /> | ||
23 | </view> |
src/ui/vant-weapp/dropdown-menu/index.wxss
0 → 100755
1 | @import '../common/index.wxss';.van-dropdown-menu{display:-webkit-flex;display:flex;-webkit-user-select:none;user-select:none;height:50px;height:var(--dropdown-menu-height,50px);background-color:#fff;background-color:var(--dropdown-menu-background-color,#fff)}.van-dropdown-menu__item{display:-webkit-flex;display:flex;-webkit-flex:1;flex:1;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;min-width:0}.van-dropdown-menu__item:active{opacity:.7}.van-dropdown-menu__item--disabled:active{opacity:1}.van-dropdown-menu__item--disabled .van-dropdown-menu__title{color:#969799;color:var(--dropdown-menu-title-disabled-text-color,#969799)}.van-dropdown-menu__title{position:relative;box-sizing:border-box;max-width:100%;padding:0 8px;padding:var(--dropdown-menu-title-padding,0 8px);color:#323233;color:var(--dropdown-menu-title-text-color,#323233);font-size:15px;font-size:var(--dropdown-menu-title-font-size,15px);line-height:18px;line-height:var(--dropdown-menu-title-line-height,18px)}.van-dropdown-menu__title:after{position:absolute;top:50%;right:-4px;margin-top:-5px;border-color:transparent transparent currentcolor currentcolor;border-style:solid;border-width:3px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:.8;content:""}.van-dropdown-menu__title--active{color:#1989fa;color:var(--dropdown-menu-title-active-text-color,#1989fa)}.van-dropdown-menu__title--down:after{margin-top:-1px;-webkit-transform:rotate(135deg);transform:rotate(135deg)} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | import { VantComponent } from '../common/component'; | 1 | import { VantComponent } from '../common/component'; |
2 | import { getSystemInfoSync } from '../common/utils'; | ||
2 | VantComponent({ | 3 | VantComponent({ |
3 | field: true, | 4 | field: true, |
4 | classes: ['input-class'], | 5 | classes: ['input-class', 'right-icon-class'], |
5 | props: { | 6 | props: { |
6 | size: String, | 7 | size: String, |
7 | icon: String, | 8 | icon: String, |
... | @@ -12,27 +13,37 @@ VantComponent({ | ... | @@ -12,27 +13,37 @@ VantComponent({ |
12 | center: Boolean, | 13 | center: Boolean, |
13 | isLink: Boolean, | 14 | isLink: Boolean, |
14 | leftIcon: String, | 15 | leftIcon: String, |
16 | rightIcon: String, | ||
15 | disabled: Boolean, | 17 | disabled: Boolean, |
16 | autosize: Boolean, | 18 | autosize: Boolean, |
17 | readonly: Boolean, | 19 | readonly: Boolean, |
18 | required: Boolean, | 20 | required: Boolean, |
21 | password: Boolean, | ||
19 | iconClass: String, | 22 | iconClass: String, |
20 | clearable: Boolean, | 23 | clearable: Boolean, |
24 | clickable: Boolean, | ||
21 | inputAlign: String, | 25 | inputAlign: String, |
22 | errorMessageAlign: String, | 26 | placeholder: String, |
23 | customClass: String, | 27 | customStyle: String, |
24 | confirmType: String, | 28 | confirmType: String, |
25 | confirmHold: Boolean, | 29 | confirmHold: Boolean, |
30 | holdKeyboard: Boolean, | ||
26 | errorMessage: String, | 31 | errorMessage: String, |
27 | placeholder: String, | 32 | arrowDirection: String, |
28 | customStyle: String, | 33 | placeholderStyle: String, |
29 | useIconSlot: Boolean, | 34 | errorMessageAlign: String, |
30 | useButtonSlot: Boolean, | 35 | selectionEnd: { |
36 | type: Number, | ||
37 | value: -1 | ||
38 | }, | ||
39 | selectionStart: { | ||
40 | type: Number, | ||
41 | value: -1 | ||
42 | }, | ||
31 | showConfirmBar: { | 43 | showConfirmBar: { |
32 | type: Boolean, | 44 | type: Boolean, |
33 | value: true | 45 | value: true |
34 | }, | 46 | }, |
35 | placeholderStyle: String, | ||
36 | adjustPosition: { | 47 | adjustPosition: { |
37 | type: Boolean, | 48 | type: Boolean, |
38 | value: true | 49 | value: true |
... | @@ -59,63 +70,29 @@ VantComponent({ | ... | @@ -59,63 +70,29 @@ VantComponent({ |
59 | } | 70 | } |
60 | }, | 71 | }, |
61 | data: { | 72 | data: { |
62 | showClear: false | 73 | focused: false, |
63 | }, | 74 | system: getSystemInfoSync().system.split(' ').shift().toLowerCase() |
64 | beforeCreate() { | ||
65 | this.focused = false; | ||
66 | }, | 75 | }, |
67 | methods: { | 76 | methods: { |
68 | onInput(event) { | 77 | onInput(event) { |
69 | const { value = '' } = event.detail || {}; | 78 | const { value = '' } = event.detail || {}; |
70 | this.set({ | 79 | this.setData({ value }, () => { |
71 | value, | ||
72 | showClear: this.getShowClear(value) | ||
73 | }, () => { | ||
74 | this.emitChange(value); | 80 | this.emitChange(value); |
75 | }); | 81 | }); |
76 | }, | 82 | }, |
77 | onFocus(event) { | 83 | onFocus(event) { |
78 | const { value = '', height = 0 } = event.detail || {}; | 84 | this.setData({ focused: true }); |
79 | this.$emit('focus', { value, height }); | 85 | this.$emit('focus', event.detail); |
80 | this.focused = true; | ||
81 | this.blurFromClear = false; | ||
82 | this.set({ | ||
83 | showClear: this.getShowClear() | ||
84 | }); | ||
85 | }, | 86 | }, |
86 | onBlur(event) { | 87 | onBlur(event) { |
87 | const { value = '', cursor = 0 } = event.detail || {}; | 88 | this.setData({ focused: false }); |
88 | this.$emit('blur', { value, cursor }); | 89 | this.$emit('blur', event.detail); |
89 | this.focused = false; | ||
90 | const showClear = this.getShowClear(); | ||
91 | if (this.data.value === value) { | ||
92 | this.set({ | ||
93 | showClear | ||
94 | }); | ||
95 | } | ||
96 | else if (!this.blurFromClear) { | ||
97 | // fix: the handwritten keyboard does not trigger input change | ||
98 | this.set({ | ||
99 | value, | ||
100 | showClear | ||
101 | }, () => { | ||
102 | this.emitChange(value); | ||
103 | }); | ||
104 | } | ||
105 | }, | 90 | }, |
106 | onClickIcon() { | 91 | onClickIcon() { |
107 | this.$emit('click-icon'); | 92 | this.$emit('click-icon'); |
108 | }, | 93 | }, |
109 | getShowClear(value) { | ||
110 | value = value === undefined ? this.data.value : value; | ||
111 | return (this.data.clearable && this.focused && value && !this.data.readonly); | ||
112 | }, | ||
113 | onClear() { | 94 | onClear() { |
114 | this.blurFromClear = true; | 95 | this.setData({ value: '' }, () => { |
115 | this.set({ | ||
116 | value: '', | ||
117 | showClear: this.getShowClear('') | ||
118 | }, () => { | ||
119 | this.emitChange(''); | 96 | this.emitChange(''); |
120 | this.$emit('clear', ''); | 97 | this.$emit('clear', ''); |
121 | }); | 98 | }); | ... | ... |
1 | <wxs src="../wxs/utils.wxs" module="utils" /> | 1 | <wxs src="../wxs/utils.wxs" module="utils" /> |
2 | 2 | ||
3 | <van-cell | 3 | <van-cell |
4 | size="{{ size }}" | ||
4 | icon="{{ leftIcon }}" | 5 | icon="{{ leftIcon }}" |
5 | title="{{ label }}" | 6 | title="{{ label }}" |
6 | center="{{ center }}" | 7 | center="{{ center }}" |
7 | border="{{ border }}" | 8 | border="{{ border }}" |
8 | is-link="{{ isLink }}" | 9 | is-link="{{ isLink }}" |
9 | required="{{ required }}" | 10 | required="{{ required }}" |
10 | custom-style="{{ customStyle }}" | 11 | clickable="{{ clickable }}" |
11 | title-width="{{ titleWidth }}" | 12 | title-width="{{ titleWidth }}" |
13 | custom-style="{{ customStyle }}" | ||
14 | arrow-direction="{{ arrowDirection }}" | ||
12 | custom-class="van-field" | 15 | custom-class="van-field" |
13 | size="{{ size }}" | ||
14 | > | 16 | > |
15 | <slot name="left-icon" slot="icon" /> | 17 | <slot name="left-icon" slot="icon" /> |
16 | <slot name="label" slot="title" /> | 18 | <slot name="label" slot="title" /> |
17 | <view class="van-field__body {{ type === 'textarea' ? 'van-field__body--textarea' : '' }}"> | 19 | <view class="{{ utils.bem('field__body', [type, system]) }}"> |
18 | <textarea | 20 | <textarea |
19 | wx:if="{{ type === 'textarea' }}" | 21 | wx:if="{{ type === 'textarea' }}" |
20 | class="input-class {{ utils.bem('field__input', [inputAlign, { disabled, error }]) }}" | 22 | class="input-class {{ utils.bem('field__input', [inputAlign, type, { disabled, error }]) }}" |
21 | fixed="{{ fixed }}" | 23 | fixed="{{ fixed }}" |
22 | focus="{{ focus }}" | 24 | focus="{{ focus }}" |
23 | value="{{ value }}" | 25 | value="{{ value }}" |
24 | disabled="{{ disabled || readonly }}" | 26 | disabled="{{ disabled || readonly }}" |
25 | maxlength="{{ maxlength }}" | 27 | maxlength="{{ maxlength }}" |
26 | auto-height="{{ autosize }}" | ||
27 | placeholder="{{ placeholder }}" | 28 | placeholder="{{ placeholder }}" |
28 | placeholder-style="{{ placeholderStyle }}" | 29 | placeholder-style="{{ placeholderStyle }}" |
29 | placeholder-class="{{ error ? 'van-field__input--error' : 'van-field__placeholder' }}" | 30 | placeholder-class="{{ utils.bem('field__placeholder', { error }) }}" |
31 | auto-height="{{ autosize }}" | ||
30 | cursor-spacing="{{ cursorSpacing }}" | 32 | cursor-spacing="{{ cursorSpacing }}" |
31 | adjust-position="{{ adjustPosition }}" | 33 | adjust-position="{{ adjustPosition }}" |
32 | show-confirm-bar="{{ showConfirmBar }}" | 34 | show-confirm-bar="{{ showConfirmBar }}" |
35 | hold-keyboard="{{ holdKeyboard }}" | ||
36 | selection-end="{{ selectionEnd }}" | ||
37 | selection-start="{{ selectionStart }}" | ||
33 | bindinput="onInput" | 38 | bindinput="onInput" |
34 | bind:blur="onBlur" | 39 | bind:blur="onBlur" |
35 | bind:focus="onFocus" | 40 | bind:focus="onFocus" |
36 | bind:confirm="onConfirm" | 41 | bind:confirm="onConfirm" |
37 | /> | 42 | > |
43 | </textarea> | ||
38 | <input | 44 | <input |
39 | wx:else | 45 | wx:else |
40 | class="input-class {{ utils.bem('field__input', [inputAlign, { disabled, error }]) }}" | 46 | class="input-class {{ utils.bem('field__input', [inputAlign, { disabled, error }]) }}" |
... | @@ -45,34 +51,39 @@ | ... | @@ -45,34 +51,39 @@ |
45 | maxlength="{{ maxlength }}" | 51 | maxlength="{{ maxlength }}" |
46 | placeholder="{{ placeholder }}" | 52 | placeholder="{{ placeholder }}" |
47 | placeholder-style="{{ placeholderStyle }}" | 53 | placeholder-style="{{ placeholderStyle }}" |
48 | placeholder-class="{{ error ? 'van-field__input--error' : 'van-field__placeholder' }}" | 54 | placeholder-class="{{ utils.bem('field__placeholder', { error }) }}" |
49 | confirm-type="{{ confirmType }}" | 55 | confirm-type="{{ confirmType }}" |
50 | confirm-hold="{{ confirmHold }}" | 56 | confirm-hold="{{ confirmHold }}" |
57 | hold-keyboard="{{ holdKeyboard }}" | ||
51 | cursor-spacing="{{ cursorSpacing }}" | 58 | cursor-spacing="{{ cursorSpacing }}" |
52 | adjust-position="{{ adjustPosition }}" | 59 | adjust-position="{{ adjustPosition }}" |
60 | selection-end="{{ selectionEnd }}" | ||
61 | selection-start="{{ selectionStart }}" | ||
62 | password="{{ password || type === 'password' }}" | ||
53 | bindinput="onInput" | 63 | bindinput="onInput" |
54 | bind:blur="onBlur" | 64 | bind:blur="onBlur" |
55 | bind:focus="onFocus" | 65 | bind:focus="onFocus" |
56 | bind:confirm="onConfirm" | 66 | bind:confirm="onConfirm" |
57 | /> | 67 | /> |
58 | <van-icon | 68 | <van-icon |
59 | wx:if="{{ showClear }}" | 69 | wx:if="{{ clearable && focused && value && !readonly }}" |
60 | size="16px" | 70 | size="16px" |
61 | name="clear" | 71 | name="clear" |
62 | class="van-field__clear-root" | 72 | class="van-field__clear-root van-field__icon-root" |
63 | custom-class="van-field__clear" | 73 | bindtouchstart="onClear" |
64 | bind:touchstart="onClear" | ||
65 | /> | 74 | /> |
66 | <view class="van-field__icon-container" wx:if="{{ icon || useIconSlot }}" bind:tap="onClickIcon"> | 75 | <view class="van-field__icon-container" bind:tap="onClickIcon"> |
67 | <van-icon | 76 | <van-icon |
68 | wx:if="{{ icon }}" | 77 | wx:if="{{ rightIcon || icon }}" |
69 | size="16px" | 78 | size="16px" |
70 | name="{{ icon }}" | 79 | name="{{ rightIcon || icon }}" |
71 | custom-class="van-field__icon {{ iconClass }}" | 80 | class="van-field__icon-root {{ iconClass }}" |
81 | custom-class="right-icon-class" | ||
72 | /> | 82 | /> |
73 | <slot wx:else name="icon" /> | 83 | <slot name="right-icon" /> |
84 | <slot name="icon" /> | ||
74 | </view> | 85 | </view> |
75 | <view wx:if="{{ useButtonSlot }}" class="van-field__button"> | 86 | <view class="van-field__button"> |
76 | <slot name="button" /> | 87 | <slot name="button" /> |
77 | </view> | 88 | </view> |
78 | </view> | 89 | </view> | ... | ... |
1 | @import '../common/index.wxss';.van-field__body{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center}.van-field__body--textarea{min-height:24px}.van-field__input{display:block;width:100%;height:24px;min-height:24px;padding:0;margin:0;line-height:inherit;color:#333;text-align:left;background-color:initial;border:0;box-sizing:border-box;resize:none}.van-field__input--disabled{color:#999;background-color:initial;opacity:1}.van-field__input--center{text-align:center}.van-field__input--right{text-align:right}.van-field__input--error{color:#f44}.van-field__placeholder{color:#999}.van-field__clear-root{display:-webkit-flex;display:flex;height:24px;-webkit-align-items:center;align-items:center}.van-field__button,.van-field__clear,.van-field__icon-container{-webkit-flex-shrink:0;flex-shrink:0}.van-field__clear,.van-field__icon-container{padding:0 10px;margin-right:-10px;line-height:inherit;vertical-align:middle}.van-field__clear{color:#c9c9c9}.van-field__icon-container{color:#999}.van-field__icon{display:block!important}.van-field__button{padding-left:10px}.van-field__error-message{font-size:12px;color:#f44;text-align:left}.van-field__error--center{text-align:center}.van-field__error--right{text-align:right} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | @import '../common/index.wxss';.van-field__body{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center}.van-field__body--textarea{line-height:1.2em;min-height:24px;min-height:var(--cell-line-height,24px)}.van-field__body--textarea.van-field__body--ios{margin-top:-4.5px}.van-field__input{position:relative;display:block;box-sizing:border-box;width:100%;margin:0;padding:0;line-height:inherit;text-align:left;background-color:initial;border:0;resize:none;color:#323233;color:var(--field-input-text-color,#323233);height:24px;height:var(--cell-line-height,24px);min-height:24px;min-height:var(--cell-line-height,24px)}.van-field__input--textarea{height:18px;height:var(--field-text-area-min-height,18px);min-height:18px;min-height:var(--field-text-area-min-height,18px)}.van-field__input--error{color:#ee0a24;color:var(--field-input-error-text-color,#ee0a24)}.van-field__input--disabled{background-color:initial;opacity:1;color:#969799;color:var(--field-input-disabled-text-color,#969799)}.van-field__input--center{text-align:center}.van-field__input--right{text-align:right}.van-field__placeholder{position:absolute;top:0;right:0;left:0;pointer-events:none;color:#969799;color:var(--field-placeholder-text-color,#969799)}.van-field__placeholder--error{color:#ee0a24;color:var(--field-error-message-color,#ee0a24)}.van-field__icon-root{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;min-height:24px;min-height:var(--cell-line-height,24px)}.van-field__clear-root,.van-field__icon-container{line-height:inherit;vertical-align:middle;padding:0 8px;padding:0 var(--padding-xs,8px);margin-right:-8px;margin-right:-var(--padding-xs,8px)}.van-field__button,.van-field__clear-root,.van-field__icon-container{-webkit-flex-shrink:0;flex-shrink:0}.van-field__clear-root{color:#c8c9cc;color:var(--field-clear-icon-color,#c8c9cc)}.van-field__icon-container{color:#969799;color:var(--field-icon-container-color,#969799)}.van-field__icon-container:empty{display:none}.van-field__button{padding-left:8px;padding-left:var(--padding-xs,8px)}.van-field__button:empty{display:none}.van-field__error-message{text-align:left;font-size:12px;font-size:var(--field-error-message-text-font-size,12px);color:#ee0a24;color:var(--field-error-message-color,#ee0a24)}.van-field__error-message--center{text-align:center}.van-field__error-message--right{text-align:right} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -4,8 +4,16 @@ import { button } from '../mixins/button'; | ... | @@ -4,8 +4,16 @@ import { button } from '../mixins/button'; |
4 | import { openType } from '../mixins/open-type'; | 4 | import { openType } from '../mixins/open-type'; |
5 | VantComponent({ | 5 | VantComponent({ |
6 | mixins: [link, button, openType], | 6 | mixins: [link, button, openType], |
7 | relation: { | ||
8 | type: 'ancestor', | ||
9 | name: 'goods-action', | ||
10 | linked(parent) { | ||
11 | this.parent = parent; | ||
12 | } | ||
13 | }, | ||
7 | props: { | 14 | props: { |
8 | text: String, | 15 | text: String, |
16 | color: String, | ||
9 | loading: Boolean, | 17 | loading: Boolean, |
10 | disabled: Boolean, | 18 | disabled: Boolean, |
11 | type: { | 19 | type: { |
... | @@ -13,10 +21,21 @@ VantComponent({ | ... | @@ -13,10 +21,21 @@ VantComponent({ |
13 | value: 'danger' | 21 | value: 'danger' |
14 | } | 22 | } |
15 | }, | 23 | }, |
24 | mounted() { | ||
25 | this.updateStyle(); | ||
26 | }, | ||
16 | methods: { | 27 | methods: { |
17 | onClick(event) { | 28 | onClick(event) { |
18 | this.$emit('click', event.detail); | 29 | this.$emit('click', event.detail); |
19 | this.jumpLink(); | 30 | this.jumpLink(); |
31 | }, | ||
32 | updateStyle() { | ||
33 | const { children = [] } = this.parent; | ||
34 | const index = children.indexOf(this); | ||
35 | this.setData({ | ||
36 | isFirst: index === 0, | ||
37 | isLast: index === children.length - 1 | ||
38 | }); | ||
20 | } | 39 | } |
21 | } | 40 | } |
22 | }); | 41 | }); | ... | ... |
1 | <wxs src="../wxs/utils.wxs" module="utils" /> | ||
1 | <van-button | 2 | <van-button |
2 | square | 3 | square |
3 | id="{{ id }}" | 4 | id="{{ id }}" |
4 | size="large" | ||
5 | lang="{{ lang }}" | 5 | lang="{{ lang }}" |
6 | type="{{ type }}" | 6 | type="{{ type }}" |
7 | color="{{ color }}" | ||
7 | loading="{{ loading }}" | 8 | loading="{{ loading }}" |
8 | disabled="{{ disabled }}" | 9 | disabled="{{ disabled }}" |
9 | open-type="{{ openType }}" | 10 | open-type="{{ openType }}" |
10 | custom-class="custom-class" | 11 | custom-class="{{ utils.bem('goods-action-button', [type, { first: isFirst, last: isLast }]) }}" |
11 | business-id="{{ businessId }}" | 12 | business-id="{{ businessId }}" |
12 | session-from="{{ sessionFrom }}" | 13 | session-from="{{ sessionFrom }}" |
13 | app-parameter="{{ appParameter }}" | 14 | app-parameter="{{ appParameter }}" | ... | ... |
1 | @import '../common/index.wxss';:host{-webkit-flex:1;flex:1} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | @import '../common/index.wxss';:host{-webkit-flex:1;flex:1}.van-goods-action-button{border:none!important;height:40px!important;height:var(--goods-action-button-height,40px)!important;font-weight:500!important;font-weight:var(--font-weight-bold,500)!important;line-height:40px!important;line-height:var(--goods-action-button-height,40px)!important}.van-goods-action-button--first{display:block!important;margin-left:5px;border-top-left-radius:20px!important;border-top-left-radius:var(--goods-action-button-border-radius,20px)!important;border-bottom-left-radius:20px!important;border-bottom-left-radius:var(--goods-action-button-border-radius,20px)!important}.van-goods-action-button--last{display:block!important;margin-right:5px;border-top-right-radius:20px!important;border-top-right-radius:var(--goods-action-button-border-radius,20px)!important;border-bottom-right-radius:20px!important;border-bottom-right-radius:var(--goods-action-button-border-radius,20px)!important}.van-goods-action-button--warning{background:linear-gradient(90deg,#ffd01e,#ff8917);background:var(--goods-action-button-warning-color,linear-gradient(90deg,#ffd01e,#ff8917))}.van-goods-action-button--danger{background:linear-gradient(90deg,#ff6034,#ee0a24);background:var(--goods-action-button-danger-color,linear-gradient(90deg,#ff6034,#ee0a24))}@media (max-width:321px){.van-goods-action-button{font-size:13px}} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -7,6 +7,7 @@ VantComponent({ | ... | @@ -7,6 +7,7 @@ VantComponent({ |
7 | mixins: [link, button, openType], | 7 | mixins: [link, button, openType], |
8 | props: { | 8 | props: { |
9 | text: String, | 9 | text: String, |
10 | dot: Boolean, | ||
10 | info: String, | 11 | info: String, |
11 | icon: String, | 12 | icon: String, |
12 | disabled: Boolean, | 13 | disabled: Boolean, | ... | ... |
... | @@ -22,14 +22,17 @@ | ... | @@ -22,14 +22,17 @@ |
22 | bindgetphonenumber="bindGetPhoneNumber" | 22 | bindgetphonenumber="bindGetPhoneNumber" |
23 | bindlaunchapp="bindLaunchApp" | 23 | bindlaunchapp="bindLaunchApp" |
24 | > | 24 | > |
25 | <view class="van-goods-action-icon__content van-hairline--right"> | 25 | <view class="van-goods-action-icon__content"> |
26 | <van-icon | 26 | <van-icon |
27 | wx:if="{{ icon }}" | ||
27 | size="20px" | 28 | size="20px" |
28 | name="{{ icon }}" | 29 | name="{{ icon }}" |
30 | dot="{{ dot }}" | ||
29 | info="{{ info }}" | 31 | info="{{ info }}" |
30 | class="van-goods-action-icon__icon" | 32 | class="van-goods-action-icon__icon" |
31 | custom-class="icon-class" | 33 | custom-class="icon-class" |
32 | /> | 34 | /> |
35 | <slot name="icon" /> | ||
33 | <text class="text-class">{{ text }}</text> | 36 | <text class="text-class">{{ text }}</text> |
34 | </view> | 37 | </view> |
35 | </van-button> | 38 | </van-button> | ... | ... |
1 | @import '../common/index.wxss';.van-goods-action-icon{width:50px!important;border:none!important}.van-goods-action-icon__content{display:-webkit-flex;display:flex;height:100%;font-size:10px;line-height:1;color:#7d7e80;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:center;justify-content:center}.van-goods-action-icon__icon{margin-bottom:4px} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | @import '../common/index.wxss';.van-goods-action-icon{border:none!important;width:50px!important;width:var(--goods-action-icon-height,50px)!important}.van-goods-action-icon__content{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:center;justify-content:center;height:100%;line-height:1;font-size:10px;font-size:var(--goods-action-icon-font-size,10px);color:#7d7e80;color:var(--goods-action-icon-text-color,#7d7e80)}.van-goods-action-icon__icon{margin-bottom:4px} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | import { VantComponent } from '../common/component'; | 1 | import { VantComponent } from '../common/component'; |
2 | import { safeArea } from '../mixins/safe-area'; | ||
3 | VantComponent({ | 2 | VantComponent({ |
4 | mixins: [safeArea()] | 3 | relation: { |
4 | type: 'descendant', | ||
5 | name: 'goods-action-button', | ||
6 | linked(child) { | ||
7 | this.children.push(child); | ||
8 | }, | ||
9 | unlinked(child) { | ||
10 | this.children = this.children.filter((item) => item !== child); | ||
11 | } | ||
12 | }, | ||
13 | beforeCreate() { | ||
14 | this.children = []; | ||
15 | }, | ||
16 | props: { | ||
17 | safeAreaInsetBottom: { | ||
18 | type: Boolean, | ||
19 | value: true | ||
20 | } | ||
21 | } | ||
5 | }); | 22 | }); | ... | ... |
1 | <wxs src="../wxs/utils.wxs" module="utils" /> | 1 | <wxs src="../wxs/utils.wxs" module="utils" /> |
2 | 2 | ||
3 | <view class="custom-class {{ utils.bem('goods-action', { safe: isIPhoneX && safeAreaInsetBottom }) }}"> | 3 | <view class="custom-class {{ utils.bem('goods-action', { safe: safeAreaInsetBottom }) }}"> |
4 | <slot /> | 4 | <slot /> |
5 | </view> | 5 | </view> | ... | ... |
1 | @import '../common/index.wxss';.van-goods-action{position:fixed;right:0;bottom:0;left:0;display:-webkit-flex;display:flex;background-color:#fff}.van-goods-action--safe{padding-bottom:34px} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | @import '../common/index.wxss';.van-goods-action{position:fixed;right:0;bottom:0;left:0;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;background-color:#fff;background-color:var(--goods-action-background-color,#fff)}.van-goods-action--safe{padding-bottom:env(safe-area-inset-bottom)} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
src/ui/vant-weapp/grid-item/index.d.ts
0 → 100755
1 | export {}; |
src/ui/vant-weapp/grid-item/index.js
0 → 100755
1 | import { link } from '../mixins/link'; | ||
2 | import { VantComponent } from '../common/component'; | ||
3 | VantComponent({ | ||
4 | relation: { | ||
5 | name: 'grid', | ||
6 | type: 'ancestor', | ||
7 | linked(parent) { | ||
8 | this.parent = parent; | ||
9 | } | ||
10 | }, | ||
11 | mixins: [link], | ||
12 | props: { | ||
13 | icon: String, | ||
14 | dot: Boolean, | ||
15 | info: null, | ||
16 | text: String, | ||
17 | useSlot: Boolean | ||
18 | }, | ||
19 | mounted() { | ||
20 | this.updateStyle(); | ||
21 | }, | ||
22 | methods: { | ||
23 | updateStyle() { | ||
24 | if (!this.parent) { | ||
25 | return; | ||
26 | } | ||
27 | const { data, children } = this.parent; | ||
28 | const { columnNum, border, square, gutter, clickable, center } = data; | ||
29 | const width = `${100 / columnNum}%`; | ||
30 | const styleWrapper = []; | ||
31 | styleWrapper.push(`width: ${width}`); | ||
32 | if (square) { | ||
33 | styleWrapper.push(`padding-top: ${width}`); | ||
34 | } | ||
35 | if (gutter) { | ||
36 | styleWrapper.push(`padding-right: ${gutter}px`); | ||
37 | const index = children.indexOf(this); | ||
38 | if (index >= columnNum) { | ||
39 | styleWrapper.push(`margin-top: ${gutter}px`); | ||
40 | } | ||
41 | } | ||
42 | this.setData({ | ||
43 | style: styleWrapper.join('; '), | ||
44 | center, | ||
45 | border, | ||
46 | square, | ||
47 | gutter, | ||
48 | clickable | ||
49 | }); | ||
50 | }, | ||
51 | onClick() { | ||
52 | this.$emit('click'); | ||
53 | this.jumpLink(); | ||
54 | } | ||
55 | } | ||
56 | }); |
src/ui/vant-weapp/grid-item/index.json
0 → 100755
src/ui/vant-weapp/grid-item/index.wxml
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/grid-item/index.wxss
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/grid/index.d.ts
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/grid/index.js
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/grid/index.json
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/grid/index.wxml
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/grid/index.wxss
0 → 100755
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/image/index.d.ts
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/image/index.js
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/image/index.json
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/image/index.wxml
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/image/index.wxss
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/index-anchor/index.d.ts
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/index-anchor/index.js
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/index-anchor/index.json
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/index-anchor/index.wxml
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/index-anchor/index.wxss
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/index-bar/index.d.ts
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/index-bar/index.js
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/index-bar/index.json
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/index-bar/index.wxml
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/index-bar/index.wxss
0 → 100755
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/picker-column/index.wxs
0 → 100755
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/picker/shared.d.ts
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/picker/shared.js
0 → 100755
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/progress/index.wxs
0 → 100755
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/sidebar-item/index.d.ts
0 → 100755
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/sidebar-item/index.wxss
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/sidebar/index.d.ts
0 → 100755
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/sidebar/index.json
0 → 100755
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/sidebar/index.wxss
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/skeleton/index.d.ts
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/skeleton/index.js
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/skeleton/index.json
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/skeleton/index.wxml
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/skeleton/index.wxss
0 → 100755
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/sticky/index.d.ts
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/sticky/index.js
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/sticky/index.json
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/sticky/index.wxml
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/sticky/index.wxss
0 → 100755
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/tabs/index.wxs
0 → 100755
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/tree-select/index.wxs
0 → 100755
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/uploader/index.d.ts
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/uploader/index.js
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/uploader/index.json
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/uploader/index.wxml
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/uploader/index.wxss
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/uploader/utils.d.ts
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/uploader/utils.js
0 → 100755
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
-
Please register or sign in to post a comment