默认提交
Showing
258 changed files
with
1819 additions
and
511 deletions
... | @@ -11,7 +11,7 @@ module.exports = { | ... | @@ -11,7 +11,7 @@ module.exports = { |
11 | "enabledQcloud": false, //是否开启腾讯云COS 上传功能 | 11 | "enabledQcloud": false, //是否开启腾讯云COS 上传功能 |
12 | // 腾讯云COS 上传功能配置表 | 12 | // 腾讯云COS 上传功能配置表 |
13 | "qcloud": { | 13 | "qcloud": { |
14 | "appid": "1111111", | 14 | "appid": "wxd5e3b4b2e7ce2c1a", |
15 | "secretId": "xxx", | 15 | "secretId": "xxx", |
16 | "secretKey": "xxxxx", | 16 | "secretKey": "xxxxx", |
17 | "bucket": "xxxx", | 17 | "bucket": "xxxx", | ... | ... |
... | @@ -8,7 +8,7 @@ | ... | @@ -8,7 +8,7 @@ |
8 | "minified": true, | 8 | "minified": true, |
9 | "newFeature": true | 9 | "newFeature": true |
10 | }, | 10 | }, |
11 | "appid": "wxc57ed87f2569f701", | 11 | "appid": "wxd5e3b4b2e7ce2c1a", |
12 | "projectname": "gulp-example", | 12 | "projectname": "gulp-example", |
13 | "condition": {} | 13 | "condition": {} |
14 | } | 14 | } | ... | ... |
1 | { | 1 | { |
2 | "pages": [ | 2 | "pages": [ |
3 | "pages/index/index", | 3 | "pages/index/index", |
4 | "pages/detail/detail", | ||
4 | "pages/more/more", | 5 | "pages/more/more", |
5 | "pages/poster-example/poster-example", | 6 | "pages/poster-example/poster-example", |
6 | "pages/authorize/authorize", | 7 | "pages/authorize/authorize", |
... | @@ -9,31 +10,15 @@ | ... | @@ -9,31 +10,15 @@ |
9 | "window": { | 10 | "window": { |
10 | "backgroundTextStyle": "light", | 11 | "backgroundTextStyle": "light", |
11 | "navigationBarBackgroundColor": "#fff", | 12 | "navigationBarBackgroundColor": "#fff", |
12 | "navigationBarTitleText": "mp-gulp-framework", | 13 | "navigationBarTitleText": "家有儿孙", |
13 | "navigationBarTextStyle": "black" | 14 | "navigationBarTextStyle": "black" |
14 | }, | 15 | }, |
15 | "tabBar": { | ||
16 | "color": "#7A7E83", | ||
17 | "selectedColor": "#CF4646", | ||
18 | "borderStyle": "black", | ||
19 | "backgroundColor": "#ffffff", | ||
20 | "list": [{ | ||
21 | "pagePath": "pages/index/index", | ||
22 | "iconPath": "image/tabbar/home_D.png", | ||
23 | "selectedIconPath": "image/tabbar/home.png", | ||
24 | "text": "介绍" | ||
25 | }, | ||
26 | { | ||
27 | "pagePath": "pages/more/more", | ||
28 | "iconPath": "image/tabbar/set_D.png", | ||
29 | "selectedIconPath": "image/tabbar/set.png", | ||
30 | "text": "更多" | ||
31 | } | ||
32 | ] | ||
33 | }, | ||
34 | "usingComponents": { | 16 | "usingComponents": { |
35 | "authorize-comp": "../../component/authorize-comp/authorize-comp", | 17 | "authorize-comp": "../../component/authorize-comp/authorize-comp", |
36 | "empty-tips": "../../component/empty-tips/empty-tips", | 18 | "empty-tips": "../../component/empty-tips/empty-tips", |
37 | "van-popup": "../../ui/vant-weapp/popup/index" | 19 | "van-popup": "../../ui/vant-weapp/popup/index", |
20 | "van-sticky": "../../ui/vant-weapp/sticky/index", | ||
21 | "van-tab": "../../ui/vant-weapp/tab/index", | ||
22 | "van-tabs": "../../ui/vant-weapp/tabs/index" | ||
38 | } | 23 | } |
39 | } | 24 | } | ... | ... |
This diff is collapsed.
Click to expand it.
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 | |||
200 | .bis { | 3 | .bis { |
201 | background-repeat: no-repeat; | 4 | background-repeat: no-repeat; |
202 | background-size: 100% 100%; | 5 | background-size: 100% 100%; |
... | @@ -213,8 +16,6 @@ | ... | @@ -213,8 +16,6 @@ |
213 | justify-content: space-between; | 16 | justify-content: space-between; |
214 | } | 17 | } |
215 | 18 | ||
216 | |||
217 | |||
218 | .fje { | 19 | .fje { |
219 | display: flex; | 20 | display: flex; |
220 | justify-content: flex-end; | 21 | justify-content: flex-end; | ... | ... |
1 | 1 | // Color | |
2 | |||
3 | // // Margin | ||
4 | // $marginTopSmaller: 20px; | ||
5 | // $marginTopSmall: 30px; | ||
6 | // $marginTopMedium: 40px; | ||
7 | // $marginTopLarge: 60px; | ||
8 | // $marginTopLarger: 80px; | ||
9 | |||
10 | // // Padding | ||
11 | // $paddingTopSmaller: 20px; | ||
12 | // $paddingTopSmall: 30px; | ||
13 | // $paddingTopMedium: 40px; | ||
14 | // $paddingTopLarge: 60px; | ||
15 | // $paddingTopLarger: 80px; | ||
16 | |||
17 | // // Color | ||
18 | $colorBlue: #20A0FF; | 2 | $colorBlue: #20A0FF; |
19 | $colorGreen: #13CE66; | 3 | $colorGreen: #13CE66; |
20 | $colorGray: #475669; | 4 | $colorGray: #475669; |
... | @@ -39,3 +23,4 @@ $fontSizeLarger: 44px; | ... | @@ -39,3 +23,4 @@ $fontSizeLarger: 44px; |
39 | $colorMain:#3680EB; | 23 | $colorMain:#3680EB; |
40 | 24 | ||
41 | $pageBottom:80px; | 25 | $pageBottom:80px; |
26 | $contentWidth:690px; | ... | ... |
src/pages/detail/detail.js
0 → 100755
1 | import { | ||
2 | getBindtapData | ||
3 | } from '../../utils/util'; | ||
4 | |||
5 | let app = getApp(); | ||
6 | Page({ | ||
7 | data: { | ||
8 | authorizeVisible: false, | ||
9 | total: 0, | ||
10 | page: 1, | ||
11 | size: 10, | ||
12 | productList: [], // 产品列表 | ||
13 | indexInfo: {}, | ||
14 | userInfo: {}, | ||
15 | }, | ||
16 | onShareAppMessage() {}, | ||
17 | showAuth() { | ||
18 | this.setData({ | ||
19 | authorizeVisible: true | ||
20 | }) | ||
21 | }, | ||
22 | onLoad(options) {}, | ||
23 | |||
24 | /** | ||
25 | * 基础方法 | ||
26 | * 授权完毕重拉数据用 | ||
27 | */ | ||
28 | initData() { | ||
29 | |||
30 | }, | ||
31 | /** | ||
32 | * 到达底部 | ||
33 | * 做加载更多操作 | ||
34 | */ | ||
35 | onReachBottom() { | ||
36 | if (this.data.dataList.length < this.data.total) { | ||
37 | this.setData({ | ||
38 | page: this.data.page + 1 | ||
39 | }); | ||
40 | this.queryDataList(); | ||
41 | } | ||
42 | }, | ||
43 | |||
44 | // 重置页面列表 点击搜索条件时需要 | ||
45 | resetPage() { | ||
46 | this.setData({ | ||
47 | page: 1, | ||
48 | dataList: [] | ||
49 | }) | ||
50 | }, | ||
51 | |||
52 | /** | ||
53 | * 请求DataList | ||
54 | */ | ||
55 | queryDataList() { | ||
56 | return; | ||
57 | return new Promise((resolve, reject) => { | ||
58 | app.post({ | ||
59 | sid: false, | ||
60 | url: app.api.dataList, | ||
61 | data: { | ||
62 | page: this.data.page, | ||
63 | size: this.data.size, | ||
64 | }, | ||
65 | }).then((result) => { | ||
66 | let dataList = result.list; | ||
67 | dataList = this.data.dataList.concat(dataList); | ||
68 | this.setData({ | ||
69 | dataList: dataList, | ||
70 | total: result.total | ||
71 | }) | ||
72 | resolve(); | ||
73 | }) | ||
74 | }); | ||
75 | }, | ||
76 | |||
77 | /** | ||
78 | * 隐藏蒙层 | ||
79 | */ | ||
80 | hideMask() { | ||
81 | this.setData({ | ||
82 | productDetailVisible: false, | ||
83 | authorizeVisible: false, | ||
84 | }) | ||
85 | }, | ||
86 | /** | ||
87 | * 子组件事件 | ||
88 | * @param {*} evt | ||
89 | */ | ||
90 | evtcomp(evt) { | ||
91 | let { | ||
92 | name, | ||
93 | data | ||
94 | } = evt.detail; | ||
95 | switch (name) { | ||
96 | |||
97 | // 隐藏蒙层 | ||
98 | case "_evt_hide_mask": | ||
99 | this.hideMask(); | ||
100 | break; | ||
101 | |||
102 | /** | ||
103 | * 重拉数据已在 | ||
104 | */ | ||
105 | case "_evt_auth_complete": | ||
106 | // this.initData(); | ||
107 | this.hideMask(); | ||
108 | break; | ||
109 | |||
110 | default: | ||
111 | break; | ||
112 | } | ||
113 | }, | ||
114 | }) |
src/pages/detail/detail.json
0 → 100755
src/pages/detail/detail.scss
0 → 100755
1 | @import '../../assets/scss/mixins'; | ||
2 | @import '../../assets/scss/utils'; | ||
3 | |||
4 | .page { | ||
5 | .bgc {} | ||
6 | |||
7 | .bg {} | ||
8 | |||
9 | .main { | ||
10 | .top-space { | ||
11 | height: 0px; | ||
12 | } | ||
13 | |||
14 | .content { | ||
15 | position: relative; | ||
16 | } | ||
17 | } | ||
18 | |||
19 | .detail { | ||
20 | position: relative; | ||
21 | width: 100%; | ||
22 | height: 944px; | ||
23 | background-color: #333333; | ||
24 | |||
25 | .vid { | ||
26 | margin: 232px auto 0; | ||
27 | width: 100%; | ||
28 | height: 360px; | ||
29 | } | ||
30 | |||
31 | .btn-wrap { | ||
32 | color: #ffffff; | ||
33 | margin: 142px auto 0; | ||
34 | display: flex; | ||
35 | |||
36 | .btn { | ||
37 | width: 312px; | ||
38 | height: 94px; | ||
39 | font-size: 30px; | ||
40 | background-color: #3ec03c; | ||
41 | border-radius: 8px; | ||
42 | display: flex; | ||
43 | justify-content: center; | ||
44 | align-items: center; | ||
45 | color: #ffffff; | ||
46 | |||
47 | .iconfont { | ||
48 | font-size: 48px; | ||
49 | } | ||
50 | |||
51 | .t1 { | ||
52 | padding: 0 6px; | ||
53 | } | ||
54 | } | ||
55 | |||
56 | .btn2 { | ||
57 | background-color: #ae3f48; | ||
58 | } | ||
59 | } | ||
60 | } | ||
61 | |||
62 | .func { | ||
63 | position: relative; | ||
64 | @extend .bb; | ||
65 | padding: 24px 24px; | ||
66 | display: flex; | ||
67 | justify-content: space-between; | ||
68 | align-items: center; | ||
69 | |||
70 | .user { | ||
71 | display: flex; | ||
72 | align-items: center; | ||
73 | flex: 1; | ||
74 | |||
75 | .portrait { | ||
76 | width: 72px; | ||
77 | height: 72px; | ||
78 | border-radius: 72px; | ||
79 | } | ||
80 | |||
81 | .desc { | ||
82 | @extend .bb; | ||
83 | padding-left: 24px; | ||
84 | display: flex; | ||
85 | align-items: center; | ||
86 | align-content: center; | ||
87 | flex-wrap: wrap; | ||
88 | |||
89 | .t1 { | ||
90 | width: 100%; | ||
91 | } | ||
92 | |||
93 | .name { | ||
94 | font-size: 28px; | ||
95 | } | ||
96 | |||
97 | .num { | ||
98 | font-size: 24px; | ||
99 | color: #8d8d8d; | ||
100 | } | ||
101 | } | ||
102 | |||
103 | } | ||
104 | |||
105 | .btn-wrap { | ||
106 | display: flex; | ||
107 | |||
108 | .btn { | ||
109 | margin-right: 24px; | ||
110 | width: 180px; | ||
111 | height: 68px; | ||
112 | font-size: 24px; | ||
113 | background-color: #3ec03c; | ||
114 | border-radius: 8px; | ||
115 | display: flex; | ||
116 | justify-content: center; | ||
117 | align-items: center; | ||
118 | color: #ffffff; | ||
119 | |||
120 | .iconfont { | ||
121 | font-size: 32px; | ||
122 | } | ||
123 | |||
124 | .t1 { | ||
125 | padding: 0 6px; | ||
126 | } | ||
127 | |||
128 | &:last-child { | ||
129 | margin-right: 0; | ||
130 | } | ||
131 | } | ||
132 | |||
133 | .btn2 { | ||
134 | background-color: #fecd9f; | ||
135 | color: #7f776e; | ||
136 | } | ||
137 | |||
138 | |||
139 | } | ||
140 | |||
141 | } | ||
142 | |||
143 | .tit{ | ||
144 | @extend .bb; | ||
145 | padding: 0 24px; | ||
146 | } | ||
147 | } |
src/pages/detail/detail.wxml
0 → 100755
1 | <view class="page"> | ||
2 | <view class="app__bgc bgc"></view> | ||
3 | <view class="app__bg bg"></view> | ||
4 | <view class="app__content main"> | ||
5 | <view class="top-space"></view> | ||
6 | <view class="content"> | ||
7 | <view class="detail"> | ||
8 | <video objectFit="cover" class="vid" src="https://kd.cdn.xyiyang.com/pro/mzczcradmin/7e91e8a4c7b84e6fa4bada7c8617c9cf.mp4" /> | ||
9 | <view class="btn-wrap"> | ||
10 | <button class="btn"> | ||
11 | <span class="t1 iconfont iconplane"></span> | ||
12 | <span class="t1">分享给好友</span> | ||
13 | </button> | ||
14 | <button class="btn btn2"> | ||
15 | <span class="t1 iconfont iconplane"></span> | ||
16 | <span class="t1">分享到群</span> | ||
17 | </button> | ||
18 | </view> | ||
19 | </view> | ||
20 | <view class="func"> | ||
21 | <view class="user"> | ||
22 | <image class="portrait" mode="aspectFill" src="https://kd.cdn.xyiyang.com/pro/mzczcradmin/008194acee794506aac4c7200ce654dc.jpg" /> | ||
23 | <view class="desc"> | ||
24 | <view class="t1 name">我爱我家</view> | ||
25 | <view class="t1 num">280个视频</view> | ||
26 | </view> | ||
27 | </view> | ||
28 | <view class="btn-wrap"> | ||
29 | <view class="btn btn2"> | ||
30 | <span>更多推荐</span> | ||
31 | </view> | ||
32 | <view class="btn"> | ||
33 | <span class="t1 iconfont iconhome"></span> | ||
34 | <span>返回首页</span> | ||
35 | </view> | ||
36 | </view> | ||
37 | </view> | ||
38 | <view class="tit">超有创意的全家福,看了你也想拍!</view> | ||
39 | </view> | ||
40 | </view> | ||
41 | </view> |
1 | import { | ||
2 | getBindtapData | ||
3 | } from '../../utils/util' | ||
4 | |||
1 | let app = getApp(); | 5 | let app = getApp(); |
2 | Page({ | 6 | Page({ |
3 | data: {}, | 7 | data: { |
4 | onLoad(options) { | 8 | active: 0 |
9 | }, | ||
10 | onLoad(options) {}, | ||
11 | initData() { | ||
12 | |||
13 | }, | ||
14 | onChange(event) { | ||
15 | wx.showToast({ | ||
16 | title: `切换到标签 ${event.detail.name}`, | ||
17 | icon: 'none' | ||
18 | }); | ||
19 | }, | ||
20 | onVanTabsHandler(event) { | ||
21 | console.log("event:", event); | ||
22 | let { | ||
23 | index, | ||
24 | title | ||
25 | } = event.detail; | ||
26 | }, | ||
27 | onVideoHandler(evt) { | ||
28 | let curItem = getBindtapData(evt); | ||
29 | let curIndex = getBindtapData(evt, "index"); | ||
30 | app.router.push({ | ||
31 | path: "detail", | ||
32 | query: { | ||
33 | c: curIndex + "" | ||
34 | } | ||
35 | }) | ||
36 | console.log("curItem:", curItem); | ||
37 | console.log("curIndex:", curIndex); | ||
38 | }, | ||
39 | /** | ||
40 | * 获取列列表 | ||
41 | */ | ||
42 | queryList() { | ||
43 | |||
5 | } | 44 | } |
6 | }) | 45 | }) | ... | ... |
... | @@ -2,7 +2,12 @@ | ... | @@ -2,7 +2,12 @@ |
2 | @import '../../assets/scss/utils'; | 2 | @import '../../assets/scss/utils'; |
3 | 3 | ||
4 | .page { | 4 | .page { |
5 | .bgc {} | 5 | color: #333333; |
6 | font-size: 24px; | ||
7 | |||
8 | .bgc { | ||
9 | background-color: #efefef; | ||
10 | } | ||
6 | 11 | ||
7 | .bg {} | 12 | .bg {} |
8 | 13 | ||
... | @@ -14,5 +19,101 @@ | ... | @@ -14,5 +19,101 @@ |
14 | .content { | 19 | .content { |
15 | position: relative; | 20 | position: relative; |
16 | } | 21 | } |
22 | |||
23 | .list { | ||
24 | position: relative; | ||
25 | margin: 0 auto; | ||
26 | width: $contentWidth; | ||
27 | |||
28 | &-item { | ||
29 | position: relative; | ||
30 | background-color: #ffffff; | ||
31 | border-radius: 16px; | ||
32 | margin: 24px auto; | ||
33 | |||
34 | &-video { | ||
35 | display: flex; | ||
36 | justify-content: center; | ||
37 | position: relative; | ||
38 | width: $contentWidth; | ||
39 | |||
40 | .vid { | ||
41 | @include border-top-radius(16px); | ||
42 | width: $contentWidth; | ||
43 | pointer-events: none; | ||
44 | } | ||
45 | |||
46 | .tit { | ||
47 | color: #ffffff; | ||
48 | @extend .bb; | ||
49 | padding: 0 24px; | ||
50 | position: absolute; | ||
51 | width: 100%; | ||
52 | height: 64px; | ||
53 | line-height: 64px; | ||
54 | bottom: 0; | ||
55 | background-color: rgba($color: #000000, $alpha: 0.6); | ||
56 | @include border-top-radius(8px); | ||
57 | @include ellipsis(1); | ||
58 | |||
59 | } | ||
60 | } | ||
61 | |||
62 | &-func { | ||
63 | @extend .bb; | ||
64 | padding: 24px 24px; | ||
65 | height: 80px; | ||
66 | display: flex; | ||
67 | justify-content: space-between; | ||
68 | align-items: center; | ||
69 | |||
70 | .user { | ||
71 | display: flex; | ||
72 | align-items: center; | ||
73 | |||
74 | .portrait { | ||
75 | width: 48px; | ||
76 | height: 48px; | ||
77 | border-radius: 48px; | ||
78 | } | ||
79 | |||
80 | .name { | ||
81 | padding-left: 12px; | ||
82 | } | ||
83 | } | ||
84 | |||
85 | .share { | ||
86 | font-size: 24px; | ||
87 | display: flex; | ||
88 | justify-content: center; | ||
89 | align-items: center; | ||
90 | // width: 132px; | ||
91 | height: 48px; | ||
92 | color: #ffffff; | ||
93 | background-color: #3ec03c; | ||
94 | border-radius: 8px; | ||
95 | margin: 0; | ||
96 | |||
97 | .iconfont { | ||
98 | font-size: 32px; | ||
99 | } | ||
100 | |||
101 | .t1 { | ||
102 | padding: 0 6px; | ||
103 | } | ||
104 | } | ||
105 | } | ||
106 | |||
107 | } | ||
108 | } | ||
109 | } | ||
110 | |||
111 | |||
112 | .van-tab--active { | ||
113 | color: #fc464a; | ||
114 | } | ||
115 | |||
116 | .van-hairline--top-bottom:after { | ||
117 | border-width: 0; | ||
17 | } | 118 | } |
18 | } | 119 | } | ... | ... |
... | @@ -4,6 +4,33 @@ | ... | @@ -4,6 +4,33 @@ |
4 | <!-- <view class="app__top-shadow"></view> --> | 4 | <!-- <view class="app__top-shadow"></view> --> |
5 | <view class="app__content main"> | 5 | <view class="app__content main"> |
6 | <view class="top-space"></view> | 6 | <view class="top-space"></view> |
7 | <view class="content">index</view> | 7 | <van-sticky> |
8 | <van-tabs active="{{ active }}" bind:click="onVanTabsHandler"> | ||
9 | <van-tab title="精彩推荐"></van-tab> | ||
10 | <van-tab title="一起旅行"></van-tab> | ||
11 | <van-tab title="齐家欢乐"></van-tab> | ||
12 | <van-tab title="童趣无限"></van-tab> | ||
13 | </van-tabs> | ||
14 | </van-sticky> | ||
15 | <view class="content"> | ||
16 | <view class="list"> | ||
17 | <view bindtap="onVideoHandler" wx:for="{{8}}" wx:key="index" data-data="{{item}}" data-index="{{index}}" class="list-item"> | ||
18 | <view class="list-item-video"> | ||
19 | <video objectFit="cover" class="vid" poster="https://kd.cdn.xyiyang.com/pro/mzczcradmin/008194acee794506aac4c7200ce654dc.jpg" src="https://kd.cdn.xyiyang.com/pro/mzczcradmin/7e91e8a4c7b84e6fa4bada7c8617c9cf.mp4" /> | ||
20 | <view class="tit">这是一个视频</view> | ||
21 | </view> | ||
22 | <view class="list-item-func"> | ||
23 | <view class="user"> | ||
24 | <image class="portrait" mode="aspectFill" src="https://kd.cdn.xyiyang.com/pro/mzczcradmin/008194acee794506aac4c7200ce654dc.jpg" /> | ||
25 | <text class="name">我爱我家</text> | ||
26 | </view> | ||
27 | <button class="share"> | ||
28 | <span class="t1 iconfont iconwechat"></span> | ||
29 | <span class="t1">分享</span> | ||
30 | </button> | ||
31 | </view> | ||
32 | </view> | ||
33 | </view> | ||
34 | </view> | ||
8 | </view> | 35 | </view> |
9 | </view> | 36 | </view> | ... | ... |
1 | const routerPath = { | 1 | const routerPath = { |
2 | index: '/pages/index/index', | 2 | index: '/pages/index/index', |
3 | detail: '/pages/detail/detail', | ||
3 | authorize: '/pages/authorize/authorize', // 授权 | 4 | authorize: '/pages/authorize/authorize', // 授权 |
4 | example: '/pages/example/example', | 5 | example: '/pages/example/example', |
5 | more: '/pages/more/more', | 6 | more: '/pages/more/more', | ... | ... |
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,40 @@ VantComponent({ | ... | @@ -51,20 +54,40 @@ 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; |
85 | let getValues = picker.getValues(); | ||
86 | getValues = this.parseOutputValues(getValues); | ||
64 | this.setValues().then(() => { | 87 | this.setValues().then(() => { |
65 | this.$emit('change', { | 88 | this.$emit('change', { |
66 | picker, | 89 | picker, |
67 | values: picker.getValues(), | 90 | values: getValues, |
68 | index | 91 | index |
69 | }); | 92 | }); |
70 | }); | 93 | }); |
... | @@ -74,6 +97,7 @@ VantComponent({ | ... | @@ -74,6 +97,7 @@ VantComponent({ |
74 | return (areaList && areaList[`${type}_list`]) || {}; | 97 | return (areaList && areaList[`${type}_list`]) || {}; |
75 | }, | 98 | }, |
76 | getList(type, code) { | 99 | getList(type, code) { |
100 | const { typeToColumnsPlaceholder } = this.data; | ||
77 | let result = []; | 101 | let result = []; |
78 | if (type !== 'province' && !code) { | 102 | if (type !== 'province' && !code) { |
79 | return result; | 103 | return result; |
... | @@ -90,6 +114,14 @@ VantComponent({ | ... | @@ -90,6 +114,14 @@ VantComponent({ |
90 | } | 114 | } |
91 | result = result.filter(item => item.code.indexOf(code) === 0); | 115 | result = result.filter(item => item.code.indexOf(code) === 0); |
92 | } | 116 | } |
117 | if (typeToColumnsPlaceholder[type] && result.length) { | ||
118 | // set columns placeholder | ||
119 | const codeFill = type === 'province' ? '' : type === 'city' ? COLUMNSPLACEHOLDERCODE.slice(2, 4) : COLUMNSPLACEHOLDERCODE.slice(4, 6); | ||
120 | result.unshift({ | ||
121 | code: `${code}${codeFill}`, | ||
122 | name: typeToColumnsPlaceholder[type] | ||
123 | }); | ||
124 | } | ||
93 | return result; | 125 | return result; |
94 | }, | 126 | }, |
95 | getIndex(type, code) { | 127 | getIndex(type, code) { |
... | @@ -109,7 +141,18 @@ VantComponent({ | ... | @@ -109,7 +141,18 @@ VantComponent({ |
109 | }, | 141 | }, |
110 | setValues() { | 142 | setValues() { |
111 | const county = this.getConfig('county'); | 143 | const county = this.getConfig('county'); |
112 | let code = this.code || Object.keys(county)[0] || ''; | 144 | let { code } = this; |
145 | if (!code) { | ||
146 | if (this.data.columnsPlaceholder.length) { | ||
147 | code = COLUMNSPLACEHOLDERCODE; | ||
148 | } | ||
149 | else if (Object.keys(county)[0]) { | ||
150 | code = Object.keys(county)[0]; | ||
151 | } | ||
152 | else { | ||
153 | code = ''; | ||
154 | } | ||
155 | } | ||
113 | const province = this.getList('province'); | 156 | const province = this.getList('province'); |
114 | const city = this.getList('city', code.slice(0, 2)); | 157 | const city = this.getList('city', code.slice(0, 2)); |
115 | const picker = this.getPicker(); | 158 | const picker = this.getPicker(); |
... | @@ -120,7 +163,6 @@ VantComponent({ | ... | @@ -120,7 +163,6 @@ VantComponent({ |
120 | stack.push(picker.setColumnValues(0, province, false)); | 163 | stack.push(picker.setColumnValues(0, province, false)); |
121 | stack.push(picker.setColumnValues(1, city, false)); | 164 | stack.push(picker.setColumnValues(1, city, false)); |
122 | if (city.length && code.slice(2, 4) === '00') { | 165 | if (city.length && code.slice(2, 4) === '00') { |
123 | ; | ||
124 | [{ code }] = city; | 166 | [{ code }] = city; |
125 | } | 167 | } |
126 | stack.push(picker.setColumnValues(2, this.getList('county', code.slice(0, 4)), false)); | 168 | stack.push(picker.setColumnValues(2, this.getList('county', code.slice(0, 4)), false)); |
... | @@ -162,8 +204,8 @@ VantComponent({ | ... | @@ -162,8 +204,8 @@ VantComponent({ |
162 | } | 204 | } |
163 | return area; | 205 | return area; |
164 | }, | 206 | }, |
165 | reset() { | 207 | reset(code) { |
166 | this.code = ''; | 208 | this.code = code || ''; |
167 | return this.setValues(); | 209 | return this.setValues(); |
168 | } | 210 | } |
169 | } | 211 | } | ... | ... |
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 | // 收集 dropdown-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:40px/2!important;border-top-left-radius:var(--goods-action-button-height,40px)/2!important;border-bottom-left-radius:40px/2!important;border-bottom-left-radius:var(--goods-action-button-height,40px)/2!important}.van-goods-action-button--last{display:block!important;margin-right:5px;border-top-right-radius:40px/2!important;border-top-right-radius:var(--goods-action-button-height,40px)/2!important;border-bottom-right-radius:40px/2!important;border-bottom-right-radius:var(--goods-action-button-height,40px)/2!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> | ... | ... |
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/grid-item/index.d.ts
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/grid-item/index.js
0 → 100755
This diff is collapsed.
Click to expand it.
src/ui/vant-weapp/grid-item/index.json
0 → 100755
This diff is collapsed.
Click to expand it.
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.
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.
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.
-
Please register or sign in to post a comment