版本提交
Showing
16 changed files
with
702 additions
and
157 deletions
... | @@ -19,68 +19,68 @@ | ... | @@ -19,68 +19,68 @@ |
19 | // @lazysprite "filetype"; | 19 | // @lazysprite "filetype"; |
20 | 20 | ||
21 | .test { | 21 | .test { |
22 | background-image: url(%ASSETS_IMG%/qr-r.jpg); | 22 | background-image: url(%ASSETS_IMG%/qr-r.jpg); |
23 | } | 23 | } |
24 | 24 | ||
25 | .app { | 25 | .app { |
26 | height: 100%; | 26 | height: 100%; |
27 | justify-content: space-between; | 27 | justify-content: space-between; |
28 | // text-align: center; | 28 | // text-align: center; |
29 | box-sizing: border-box; | 29 | box-sizing: border-box; |
30 | font-family: -apple-system-font, Helvetica Neue, Helvetica, sans-serif, FZY3JW-GB1-0; | 30 | font-family: PingFangSC-Regular, -apple-system-font, Helvetica Neue, Helvetica, sans-serif, FZY3JW-GB1-0; |
31 | } | 31 | } |
32 | 32 | ||
33 | .app__width { | 33 | .app__width { |
34 | width: 750px; | 34 | width: 750px; |
35 | } | 35 | } |
36 | 36 | ||
37 | .app__width { | 37 | .app__width { |
38 | width: 750px; | 38 | width: 750px; |
39 | } | 39 | } |
40 | 40 | ||
41 | .app__inner { | 41 | .app__inner { |
42 | margin: 20px; | 42 | margin: 20px; |
43 | } | 43 | } |
44 | 44 | ||
45 | .app__title { | 45 | .app__title { |
46 | font-size: $fontSize; | 46 | font-size: $fontSize; |
47 | line-height: $fontSize + 4px; | 47 | line-height: $fontSize + 4px; |
48 | font-weight: bold; | 48 | font-weight: bold; |
49 | padding-bottom: 10px; | 49 | padding-bottom: 10px; |
50 | margin-bottom: 20px; | 50 | margin-bottom: 20px; |
51 | border-bottom: .5px solid #EEEEEE; | 51 | border-bottom: .5px solid #EEEEEE; |
52 | } | 52 | } |
53 | 53 | ||
54 | .app__desc { | 54 | .app__desc { |
55 | font-size: $fontSizeSmaller; | 55 | font-size: $fontSizeSmaller; |
56 | line-height: $fontSizeSmaller +2px; | 56 | line-height: $fontSizeSmaller +2px; |
57 | margin-bottom: 20px; | 57 | margin-bottom: 20px; |
58 | color: $colorGray; | 58 | color: $colorGray; |
59 | } | 59 | } |
60 | 60 | ||
61 | .app__bgc { | 61 | .app__bgc { |
62 | position: fixed; | 62 | position: fixed; |
63 | background-color: #ffffff; | 63 | background-color: #ffffff; |
64 | width: 100%; | 64 | width: 100%; |
65 | height: 100%; | 65 | height: 100%; |
66 | } | 66 | } |
67 | 67 | ||
68 | .app__bg { | 68 | .app__bg { |
69 | position: absolute; | 69 | position: absolute; |
70 | width: 100%; | 70 | width: 100%; |
71 | height: 100%; | 71 | height: 100%; |
72 | } | 72 | } |
73 | 73 | ||
74 | .app__top-shadow { | 74 | .app__top-shadow { |
75 | position: fixed; | 75 | position: fixed; |
76 | width: 750px; | 76 | width: 750px; |
77 | height: 1px; | 77 | height: 1px; |
78 | box-shadow: 0px 4px 0.9px 0.1px rgba(6, 0, 1, 0.07); | 78 | box-shadow: 0px 4px 0.9px 0.1px rgba(6, 0, 1, 0.07); |
79 | background-color: #ffffff; | 79 | background-color: #ffffff; |
80 | } | 80 | } |
81 | 81 | ||
82 | .app__content { | 82 | .app__content { |
83 | position: relative; | 83 | position: relative; |
84 | } | 84 | } |
85 | 85 | ||
86 | 86 | ||
... | @@ -88,26 +88,31 @@ | ... | @@ -88,26 +88,31 @@ |
88 | // web font icon | 88 | // web font icon |
89 | 89 | ||
90 | @font-face { | 90 | @font-face { |
91 | font-family: "iconfont"; | 91 | font-family: "iconfont"; |
92 | src:url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAOsAAsAAAAAB6gAAANdAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDBgqDDIJmATYCJAMMCwgABCAFhG0HORuvBsgOJUHBwIABAAlgPHyN/f7c3UVEk0mi+3QSQxJNJCoexUrxUhhKIyT4UsKbL89+kizTNWb3wyt7UkR96ayA4xev1q04fZzIa32ey/Gt5wc26luWy5iT9qKFAcYBBbQ3RgEFWiAJesPYlRdxn0C9YccRqxl5ZcBCYSwLxJFS3gwsUk6lpj7UCtUle4t4Yqo2XaeXAHj0vx//QUhYkFRlxtq1w/Q2kPRz+iOmhipDoM51Gx7PD3aIjBlAITZLgxuoMDODUq8YTerLqxUhjRU3GgFfqeqrzT88kiCqGbWNYAJlEz+nbQmJP1h91rUZVMPcGeAZM51XhqohJw97O/vO23paqy3T6coNhsqQ1esr3nVWF19mTZ3YnOwtWwPk5bvMfvYCQV11V+xUzZx02tPO6H02TtP0y4dn5a7M9ravfPvs/poNl43TTmVrW87O66dcKzd3myo2Tjo5rW07l6+fcXXd3KmUDdBKXH240GtvAAw49qfa2BeatkTevUsumTJX5pzRRVy781FXe+YP15YALi0+kkDHQRm8OLz2sP/U1NGjIPxKdyVpafxHpKWvbajtddvnaxmZHLP0XGY1d2wvLarJWrd3LMD6Q1DiSPHusrPgvOxtlAKDyt7bk32nH3emP+npcwo2dKU/Vj040Jn2+HTvAU5VFtOf5vZDf683NVrpbEvIO7N3IX421A40MRbmdVIPQGXQhMi7/+o3vjanTBtt4/7Vygr4/p/GIHW7aqBWorXqz7QVQMVYCK4xXLnISlup57Ntpvcth3Ju8j8aod2b/tauu8+FWl0xkhpDyGqNEIWZQZUG86hWawH1pmUebtBBQolShynjAKHVFSTNPpG1ekUU5jWqdPuGaq1Bod56OJ7ZYCyUdKqEmjFqgy3dUNkqCozlwXRQX4Lk7VyzlNT4XAWSNMo4DA4IyuYzkYCkMTZoOuQhGDOQkUQeZoDHEMeJUC2JKtSKAxQYq2MCA5myFwW0ijygrZAgzTCkDdSiG6TUSiRg3MEYnft8CUSuHaeZVNNTka6ASDSUo0PBAgS1IDKNQquea3lGo4NcCAxjQAyJiAdlgFkIhyOC1OWzVJBWWABFj5RajECzH9PWGDC/mX++Q1DPGJsjRY6i5hgx1hSNwhTxatwNAAAAAA==') format('woff2'), | 92 | src: url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAOsAAsAAAAAB6gAAANdAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDBgqDDIJmATYCJAMMCwgABCAFhG0HORuvBsgOJUHBwIABAAlgPHyN/f7c3UVEk0mi+3QSQxJNJCoexUrxUhhKIyT4UsKbL89+kizTNWb3wyt7UkR96ayA4xev1q04fZzIa32ey/Gt5wc26luWy5iT9qKFAcYBBbQ3RgEFWiAJesPYlRdxn0C9YccRqxl5ZcBCYSwLxJFS3gwsUk6lpj7UCtUle4t4Yqo2XaeXAHj0vx//QUhYkFRlxtq1w/Q2kPRz+iOmhipDoM51Gx7PD3aIjBlAITZLgxuoMDODUq8YTerLqxUhjRU3GgFfqeqrzT88kiCqGbWNYAJlEz+nbQmJP1h91rUZVMPcGeAZM51XhqohJw97O/vO23paqy3T6coNhsqQ1esr3nVWF19mTZ3YnOwtWwPk5bvMfvYCQV11V+xUzZx02tPO6H02TtP0y4dn5a7M9ravfPvs/poNl43TTmVrW87O66dcKzd3myo2Tjo5rW07l6+fcXXd3KmUDdBKXH240GtvAAw49qfa2BeatkTevUsumTJX5pzRRVy781FXe+YP15YALi0+kkDHQRm8OLz2sP/U1NGjIPxKdyVpafxHpKWvbajtddvnaxmZHLP0XGY1d2wvLarJWrd3LMD6Q1DiSPHusrPgvOxtlAKDyt7bk32nH3emP+npcwo2dKU/Vj040Jn2+HTvAU5VFtOf5vZDf683NVrpbEvIO7N3IX421A40MRbmdVIPQGXQhMi7/+o3vjanTBtt4/7Vygr4/p/GIHW7aqBWorXqz7QVQMVYCK4xXLnISlup57Ntpvcth3Ju8j8aod2b/tauu8+FWl0xkhpDyGqNEIWZQZUG86hWawH1pmUebtBBQolShynjAKHVFSTNPpG1ekUU5jWqdPuGaq1Bod56OJ7ZYCyUdKqEmjFqgy3dUNkqCozlwXRQX4Lk7VyzlNT4XAWSNMo4DA4IyuYzkYCkMTZoOuQhGDOQkUQeZoDHEMeJUC2JKtSKAxQYq2MCA5myFwW0ijygrZAgzTCkDdSiG6TUSiRg3MEYnft8CUSuHaeZVNNTka6ASDSUo0PBAgS1IDKNQquea3lGo4NcCAxjQAyJiAdlgFkIhyOC1OWzVJBWWABFj5RajECzH9PWGDC/mX++Q1DPGJsjRY6i5hgx1hSNwhTxatwNAAAAAA==') format('woff2'), |
93 | } | 93 | } |
94 | 94 | ||
95 | .iconfont { | 95 | .iconfont { |
96 | font-family: "iconfont" !important; | 96 | font-family: "iconfont" !important; |
97 | font-size: 16px; | 97 | font-size: 16px; |
98 | font-style: normal; | 98 | font-style: normal; |
99 | -webkit-font-smoothing: antialiased; | 99 | -webkit-font-smoothing: antialiased; |
100 | -moz-osx-font-smoothing: grayscale; | 100 | -moz-osx-font-smoothing: grayscale; |
101 | } | 101 | } |
102 | 102 | ||
103 | .iconrefresh:before { | 103 | .iconrefresh:before { |
104 | content: "\e874"; | 104 | content: "\e874"; |
105 | } | 105 | } |
106 | 106 | ||
107 | .iconempty:before { | 107 | .iconempty:before { |
108 | content: "\e6a6"; | 108 | content: "\e6a6"; |
109 | } | 109 | } |
110 | 110 | ||
111 | .drop-down-item :last-child { | 111 | .drop-down-item :last-child { |
112 | border-bottom: none; | 112 | border-bottom: none; |
113 | } | ||
114 | |||
115 | .link { | ||
116 | color: $colorBlue; | ||
113 | } | 117 | } |
118 | ... | ... |
... | @@ -8,75 +8,95 @@ | ... | @@ -8,75 +8,95 @@ |
8 | * | 8 | * |
9 | */ | 9 | */ |
10 | 10 | ||
11 | // 居中按钮样式 | ||
12 | @mixin btn-center($width, $height) { | ||
13 | width: $width; | ||
14 | height: $height; | ||
15 | line-height: $height; | ||
16 | text-align: center; | ||
17 | } | ||
18 | |||
19 | // 超过多少行自动省略 默认一行 | ||
20 | @mixin ellipsis($line:1) { | ||
21 | display: -webkit-box; | ||
22 | word-break: break-all; | ||
23 | -webkit-box-orient: vertical; | ||
24 | -webkit-line-clamp: $line; | ||
25 | overflow: hidden; | ||
26 | text-overflow: ellipsis; | ||
27 | } | ||
28 | |||
11 | // 文字截取 | 29 | // 文字截取 |
12 | @mixin text-overflow() { | 30 | @mixin text-overflow() { |
13 | overflow: hidden; | 31 | overflow: hidden; |
14 | white-space: normal; | 32 | white-space: normal; |
15 | text-overflow: ellipsis; | 33 | text-overflow: ellipsis; |
16 | word-break: break-all; | 34 | word-break: break-all; |
17 | word-wrap: normal; | 35 | word-wrap: normal; |
18 | } | 36 | } |
19 | 37 | ||
20 | @mixin word-break() { | 38 | @mixin word-break() { |
21 | word-break: break-all; | 39 | word-break: break-all; |
22 | word-wrap: break-word; | 40 | word-wrap: break-word; |
23 | white-space: normal; | 41 | white-space: normal; |
24 | } | 42 | } |
25 | 43 | ||
26 | // No wrap | 44 | // No wrap |
27 | @mixin no-wrap() { | 45 | @mixin no-wrap() { |
28 | word-break: normal; | 46 | word-break: normal; |
29 | word-wrap: normal; | 47 | word-wrap: normal; |
30 | white-space: nowrap; | 48 | white-space: nowrap; |
31 | } | 49 | } |
32 | 50 | ||
33 | // 清除浮动 | 51 | // 清除浮动 |
34 | @mixin clearfix() { | 52 | @mixin clearfix() { |
35 | &:before, | 53 | |
36 | &:after { | 54 | &:before, |
37 | content: " "; // 1 | 55 | &:after { |
38 | display: table; // 2 | 56 | content: " "; // 1 |
39 | } | 57 | display: table; // 2 |
40 | &:after { | 58 | } |
41 | clear: both; | 59 | |
42 | } | 60 | &:after { |
61 | clear: both; | ||
62 | } | ||
43 | } | 63 | } |
44 | 64 | ||
45 | // Single side border-radius | 65 | // Single side border-radius |
46 | @mixin border-top-radius($radius) { | 66 | @mixin border-top-radius($radius) { |
47 | border-top-right-radius: $radius; | 67 | border-top-right-radius: $radius; |
48 | border-top-left-radius: $radius; | 68 | border-top-left-radius: $radius; |
49 | } | 69 | } |
50 | 70 | ||
51 | @mixin border-right-radius($radius) { | 71 | @mixin border-right-radius($radius) { |
52 | border-bottom-right-radius: $radius; | 72 | border-bottom-right-radius: $radius; |
53 | border-top-right-radius: $radius; | 73 | border-top-right-radius: $radius; |
54 | } | 74 | } |
55 | 75 | ||
56 | @mixin border-bottom-radius($radius) { | 76 | @mixin border-bottom-radius($radius) { |
57 | border-bottom-right-radius: $radius; | 77 | border-bottom-right-radius: $radius; |
58 | border-bottom-left-radius: $radius; | 78 | border-bottom-left-radius: $radius; |
59 | } | 79 | } |
60 | 80 | ||
61 | @mixin border-left-radius($radius) { | 81 | @mixin border-left-radius($radius) { |
62 | border-bottom-left-radius: $radius; | 82 | border-bottom-left-radius: $radius; |
63 | border-top-left-radius: $radius; | 83 | border-top-left-radius: $radius; |
64 | } | 84 | } |
65 | 85 | ||
66 | // Center-align a block level element | 86 | // Center-align a block level element |
67 | @mixin center-block() { | 87 | @mixin center-block() { |
68 | display: block; | 88 | display: block; |
69 | margin-left: auto; | 89 | margin-left: auto; |
70 | margin-right: auto; | 90 | margin-right: auto; |
71 | } | 91 | } |
72 | 92 | ||
73 | // CSS image replacement | 93 | // CSS image replacement |
74 | // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 | 94 | // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 |
75 | @mixin hide-text() { | 95 | @mixin hide-text() { |
76 | font-size: 0; | 96 | font-size: 0; |
77 | line-height: 0; | 97 | line-height: 0; |
78 | color: transparent; | 98 | color: transparent; |
79 | text-shadow: none; | 99 | text-shadow: none; |
80 | background-color: transparent; | 100 | background-color: transparent; |
81 | border: 0; | 101 | border: 0; |
82 | } | 102 | } | ... | ... |
1 | let app = getApp(); | 1 | let app = getApp(); |
2 | Page({ | 2 | Page({ |
3 | data: {}, | 3 | data: {}, |
4 | onLoad(options) {} | 4 | onLoad(options) {}, |
5 | // 编辑收货地址 | ||
6 | onAddressEditHandler() { | ||
7 | app.router.push({ | ||
8 | path: "addressEdit" | ||
9 | }) | ||
10 | }, | ||
11 | // 添加收货地址 | ||
12 | onAddressAddHandler() { | ||
13 | app.router.push({ | ||
14 | path: "addressEdit" | ||
15 | }) | ||
16 | } | ||
5 | }) | 17 | }) | ... | ... |
1 | @import '../../assets/scss/mixins'; | 1 | @import '../../assets/scss/mixins'; |
2 | @import '../../assets/scss/utils'; | 2 | @import '../../assets/scss/utils'; |
3 | 3 | ||
4 | $contentWidth:690px; | ||
5 | |||
4 | .page { | 6 | .page { |
5 | .bgc {} | 7 | .bgc { |
8 | background: #F8F8F8; | ||
9 | } | ||
6 | 10 | ||
7 | .bg {} | 11 | .bg {} |
8 | 12 | ||
9 | .main { | 13 | .main { |
10 | .top-space { | 14 | .top-space { |
11 | height: 0px; | 15 | height: 20px; |
16 | } | ||
17 | |||
18 | // 内容容器通用样式 | ||
19 | .cont-wrap { | ||
20 | margin: 20px auto 0; | ||
21 | width: $contentWidth; | ||
22 | background: #fff; | ||
23 | padding: 30px 28px; | ||
24 | @extend .bb; | ||
25 | @extend .shadow; | ||
12 | } | 26 | } |
13 | 27 | ||
14 | .content { | 28 | .content { |
15 | position: relative; | 29 | position: relative; |
30 | |||
31 | .manage-wrap {} | ||
32 | |||
33 | // 表单 | ||
34 | .form { | ||
35 | padding: 30px 30px; | ||
36 | |||
37 | &-tit { | ||
38 | margin-bottom: 28px; | ||
39 | display: flex; | ||
40 | justify-content: space-between; | ||
41 | font-size: 24px; | ||
42 | |||
43 | .address-message { | ||
44 | color: #333333; | ||
45 | display: flex; | ||
46 | align-content: center; | ||
47 | align-items: center; | ||
48 | height: 36px; | ||
49 | |||
50 | .address { | ||
51 | font-size: 32px; | ||
52 | margin-right: 20px; | ||
53 | vertical-align: middle; | ||
54 | } | ||
55 | |||
56 | .used { | ||
57 | color: #fff; | ||
58 | background: #FF7B21; | ||
59 | border-radius: 8px; | ||
60 | display: inline-block; | ||
61 | padding: 2px 12px; | ||
62 | text-align: center; | ||
63 | } | ||
64 | } | ||
65 | |||
66 | .address-edit { | ||
67 | color: #3680EB; | ||
68 | font-size: 28px; | ||
69 | } | ||
70 | } | ||
71 | |||
72 | &-item { | ||
73 | margin-bottom: 20px; | ||
74 | font-size: 28px; | ||
75 | display: flex; | ||
76 | |||
77 | .label { | ||
78 | min-width: 140px; | ||
79 | color: #666666; | ||
80 | } | ||
81 | |||
82 | .cont { | ||
83 | color: #333333; | ||
84 | @extend .bb; | ||
85 | padding-left: 20px; | ||
86 | } | ||
87 | } | ||
88 | |||
89 | } | ||
90 | |||
91 | // 添加地址 | ||
92 | .manage-add { | ||
93 | width: $contentWidth; | ||
94 | margin: 20px auto; | ||
95 | @extend .bb; | ||
96 | background: #fff; | ||
97 | padding: 38px 30px; | ||
98 | font-size: 32px; | ||
99 | color: #3680EB; | ||
100 | @extend .shadow; | ||
101 | } | ||
16 | } | 102 | } |
17 | } | 103 | } |
18 | } | 104 | } | ... | ... |
... | @@ -3,6 +3,54 @@ | ... | @@ -3,6 +3,54 @@ |
3 | <view class="app__bg bg"></view> | 3 | <view class="app__bg bg"></view> |
4 | <view class="app__content main"> | 4 | <view class="app__content main"> |
5 | <view class="top-space"></view> | 5 | <view class="top-space"></view> |
6 | <view class="content"></view> | 6 | <view class="content"> |
7 | <!-- 地址 item --> | ||
8 | <view class="manage-wrap"> | ||
9 | <view class="cont-wrap form"> | ||
10 | <view class="form-tit"> | ||
11 | <view class="address-message"> | ||
12 | <view class="address">地址一:默认地址</view> | ||
13 | <view class="used">当前使用</view> | ||
14 | </view> | ||
15 | <view bindtap="onAddressEditHandler" class="address-edit">编辑</view> | ||
16 | </view> | ||
17 | <view class="form-item"> | ||
18 | <view class="label">收货人</view> | ||
19 | <view class="cont">郑亮亮</view> | ||
20 | </view> | ||
21 | <view class="form-item"> | ||
22 | <view class="label">收货电话</view> | ||
23 | <view class="cont">13800000000</view> | ||
24 | </view> | ||
25 | <view class="form-item"> | ||
26 | <view class="label">收货地址</view> | ||
27 | <view class="cont">深圳市龙岗区XXX路</view> | ||
28 | </view> | ||
29 | </view> | ||
30 | <view class="cont-wrap form"> | ||
31 | <view class="form-tit"> | ||
32 | <view class="address-message"> | ||
33 | <view class="address">地址一:默认地址</view> | ||
34 | <view class="used">当前使用</view> | ||
35 | </view> | ||
36 | <view bindtap="onAddressEditHandler" class="address-edit">编辑</view> | ||
37 | </view> | ||
38 | <view class="form-item"> | ||
39 | <view class="label">收货人</view> | ||
40 | <view class="cont">郑亮亮</view> | ||
41 | </view> | ||
42 | <view class="form-item"> | ||
43 | <view class="label">收货电话</view> | ||
44 | <view class="cont">13800000000</view> | ||
45 | </view> | ||
46 | <view class="form-item"> | ||
47 | <view class="label">收货地址</view> | ||
48 | <view class="cont">深圳市龙岗区XXX路</view> | ||
49 | </view> | ||
50 | </view> | ||
51 | </view> | ||
52 | <!-- 添加地址 --> | ||
53 | <view bindtap="onAddressAddHandler" class="manage-add">+添加地址</view> | ||
54 | </view> | ||
7 | </view> | 55 | </view> |
8 | </view> | 56 | </view> | ... | ... |
1 | let app = getApp(); | 1 | let app = getApp(); |
2 | Page({ | 2 | Page({ |
3 | data: {}, | 3 | data: {}, |
4 | onLoad(options) {} | 4 | onLoad(options) {}, |
5 | /** | ||
6 | * 确认兑换 / 提交订单 | ||
7 | */ | ||
8 | onSubmitHandler() { | ||
9 | |||
10 | }, | ||
11 | /** | ||
12 | * 收获地址管理 | ||
13 | */ | ||
14 | onAddressManagementHandler() { | ||
15 | app.router.push({ | ||
16 | path:"addressManagement" | ||
17 | }) | ||
18 | } | ||
5 | }) | 19 | }) | ... | ... |
1 | @import '../../assets/scss/mixins'; | 1 | @import '../../assets/scss/mixins'; |
2 | @import '../../assets/scss/utils'; | 2 | @import '../../assets/scss/utils'; |
3 | 3 | ||
4 | $contentWidth:690px; | ||
5 | |||
4 | .page { | 6 | .page { |
5 | .bgc {} | 7 | .bgc { |
8 | background: #F8F8F8; | ||
9 | } | ||
6 | 10 | ||
7 | .bg {} | 11 | .bg {} |
8 | 12 | ||
9 | .main { | 13 | .main { |
10 | .top-space { | 14 | .top-space { |
11 | height: 0px; | 15 | height: 20px; |
12 | } | 16 | } |
13 | 17 | ||
14 | .content { | 18 | .content { |
15 | position: relative; | 19 | position: relative; |
20 | |||
21 | // 内容容器通用样式 | ||
22 | .cont-wrap { | ||
23 | margin: 20px auto 0; | ||
24 | width: $contentWidth; | ||
25 | background: #fff; | ||
26 | padding: 30px 28px; | ||
27 | @extend .bb; | ||
28 | @extend .shadow; | ||
29 | } | ||
30 | |||
31 | // 产品 | ||
32 | .product { | ||
33 | width: $contentWidth; | ||
34 | margin: 0 auto; | ||
35 | |||
36 | &-item { | ||
37 | background: #fff; | ||
38 | width: $contentWidth; | ||
39 | height: 260px; | ||
40 | margin: 20px 0; | ||
41 | @extend .shadow; | ||
42 | @extend .bb; | ||
43 | padding: 30px; | ||
44 | display: flex; | ||
45 | justify-content: space-between; | ||
46 | |||
47 | .image-wrap { | ||
48 | width: 200px; | ||
49 | height: 200px; | ||
50 | |||
51 | .img {} | ||
52 | } | ||
53 | |||
54 | .cont { | ||
55 | position: relative; | ||
56 | flex: 1; | ||
57 | @extend .bb; | ||
58 | padding-left: 20px; | ||
59 | display: flex; | ||
60 | flex-wrap: wrap; | ||
61 | align-content: center; | ||
62 | |||
63 | .name { | ||
64 | font-size: 36px; | ||
65 | color: #333333; | ||
66 | @include ellipsis(2); | ||
67 | } | ||
68 | |||
69 | .integral { | ||
70 | margin-top: 16px; | ||
71 | font-size: 28px; | ||
72 | color: #FF7900; | ||
73 | } | ||
74 | } | ||
75 | |||
76 | |||
77 | } | ||
78 | } | ||
79 | |||
80 | // 京东卡使用规则 | ||
81 | .use-rule { | ||
82 | |||
83 | color: #666666; | ||
84 | font-size: 28px; | ||
85 | line-height: 48px; | ||
86 | } | ||
87 | |||
88 | // 表单 | ||
89 | .form { | ||
90 | padding: 30px 30px 40px; | ||
91 | |||
92 | &-tit { | ||
93 | margin-bottom: 22px; | ||
94 | display: flex; | ||
95 | justify-content: space-between; | ||
96 | font-size: 24px; | ||
97 | |||
98 | .address-message { | ||
99 | color: #333333; | ||
100 | } | ||
101 | |||
102 | .address-edit { | ||
103 | color: #3680EB; | ||
104 | } | ||
105 | } | ||
106 | |||
107 | &-item { | ||
108 | margin-bottom: 30px; | ||
109 | font-size: 28px; | ||
110 | display: flex; | ||
111 | |||
112 | .label { | ||
113 | min-width: 140px; | ||
114 | color: #666666; | ||
115 | } | ||
116 | |||
117 | .cont { | ||
118 | color: #333333; | ||
119 | @extend .bb; | ||
120 | padding-left: 20px; | ||
121 | } | ||
122 | } | ||
123 | |||
124 | &-remark { | ||
125 | background: #F8F8F8; | ||
126 | border: 0 solid #CCCCCC; | ||
127 | border-radius: 4px; | ||
128 | min-height: 200px; | ||
129 | @extend .bb; | ||
130 | padding: 20px; | ||
131 | color: #333333; | ||
132 | font-size: 28px; | ||
133 | } | ||
134 | } | ||
135 | } | ||
136 | |||
137 | // 底部 | ||
138 | .bottom { | ||
139 | position: fixed; | ||
140 | bottom: 0; | ||
141 | |||
142 | // 提交栏 | ||
143 | .submit-bar { | ||
144 | width: 750px; | ||
145 | height: 100px; | ||
146 | display: flex; | ||
147 | justify-content: space-between; | ||
148 | background-color: #fff; | ||
149 | |||
150 | &-cont { | ||
151 | flex: 1; | ||
152 | height: 100px; | ||
153 | line-height: 100px; | ||
154 | font-size: 32px; | ||
155 | @extend .bb; | ||
156 | padding: 0 30px; | ||
157 | |||
158 | .integral { | ||
159 | color: $colorBlue; | ||
160 | } | ||
161 | } | ||
162 | |||
163 | &-btn { | ||
164 | background: #3680EB; | ||
165 | color: #fff; | ||
166 | font-size: 32px; | ||
167 | @include btn-center(240px, 100px); | ||
168 | } | ||
169 | } | ||
16 | } | 170 | } |
17 | } | 171 | } |
18 | } | 172 | } | ... | ... |
... | @@ -3,6 +3,58 @@ | ... | @@ -3,6 +3,58 @@ |
3 | <view class="app__bg bg"></view> | 3 | <view class="app__bg bg"></view> |
4 | <view class="app__content main"> | 4 | <view class="app__content main"> |
5 | <view class="top-space"></view> | 5 | <view class="top-space"></view> |
6 | <view class="content"></view> | 6 | <view class="content"> |
7 | <view class="product"> | ||
8 | <view class="product-item"> | ||
9 | <view class="image-wrap"> | ||
10 | <!-- <image /> --> | ||
11 | </view> | ||
12 | <view class="cont"> | ||
13 | <view class="name">某东购物卡200元某东购物卡200元</view> | ||
14 | <view class="integral">消耗积分:3000分</view> | ||
15 | </view> | ||
16 | </view> | ||
17 | </view> | ||
18 | <block wx:if="{{1<0}}"> | ||
19 | <!-- 使用规则 (京东卡) --> | ||
20 | <view class="cont-wrap use-rule"> | ||
21 | 京东E卡可在京东商城 | ||
22 | <span class="link">www.jd.com</span> | ||
23 | 上购买自营商品(“自营商品”指在商品详情页明确标识为自营的商品),用户可在订单结算时输入E卡密码并使用。 | ||
24 | </view> | ||
25 | </block> | ||
26 | <block wx:else> | ||
27 | <!-- 表单提交 (实物) --> | ||
28 | <view class="cont-wrap form"> | ||
29 | <view class="form-tit"> | ||
30 | <view class="address-message">收货信息</view> | ||
31 | <view bindtap="onAddressManagementHandler" class="address-edit">更改地址</view> | ||
32 | </view> | ||
33 | <view class="form-item"> | ||
34 | <view class="label">收货人</view> | ||
35 | <view class="cont">郑亮亮</view> | ||
36 | </view> | ||
37 | <view class="form-item"> | ||
38 | <view class="label">收货电话</view> | ||
39 | <view class="cont">13800000000</view> | ||
40 | </view> | ||
41 | <view class="form-item"> | ||
42 | <view class="label">收货地址</view> | ||
43 | <view class="cont">深圳市龙岗区XXX路</view> | ||
44 | </view> | ||
45 | <textarea placeholder="备注您的其他要求" class="form-remark"></textarea> | ||
46 | </view> | ||
47 | </block> | ||
48 | </view> | ||
49 | <view class="bottom"> | ||
50 | <view class="submit-bar"> | ||
51 | <view class="submit-bar-cont"> | ||
52 | 现有积分 | ||
53 | <span class="integral">350</span> | ||
54 | 分 | ||
55 | </view> | ||
56 | <view bindtap="onSubmitHandler" class="submit-bar-btn">确认兑换</view> | ||
57 | </view> | ||
58 | </view> | ||
7 | </view> | 59 | </view> |
8 | </view> | 60 | </view> | ... | ... |
... | @@ -82,10 +82,9 @@ $contentWidth:690px; | ... | @@ -82,10 +82,9 @@ $contentWidth:690px; |
82 | &-item { | 82 | &-item { |
83 | background: #fff; | 83 | background: #fff; |
84 | width: $contentWidth; | 84 | width: $contentWidth; |
85 | height: 260px; | 85 | // height: 260px; |
86 | margin: 20px 0; | 86 | margin: 20px 0; |
87 | box-shadow: 0 6px 18px 0 rgba(0, 0, 0, 0.10); | 87 | @extend .shadow; |
88 | border-radius: 8px; | ||
89 | @extend .bb; | 88 | @extend .bb; |
90 | padding: 30px; | 89 | padding: 30px; |
91 | display: flex; | 90 | display: flex; |
... | @@ -100,16 +99,20 @@ $contentWidth:690px; | ... | @@ -100,16 +99,20 @@ $contentWidth:690px; |
100 | .cont { | 99 | .cont { |
101 | position: relative; | 100 | position: relative; |
102 | flex: 1; | 101 | flex: 1; |
102 | @extend .bb; | ||
103 | padding-left: 20px; | ||
103 | 104 | ||
104 | .name { | 105 | .name { |
105 | font-size: 32px; | 106 | font-size: 32px; |
106 | color: #333333; | 107 | color: #333333; |
108 | @include ellipsis; | ||
107 | } | 109 | } |
108 | 110 | ||
109 | .desc { | 111 | .desc { |
110 | font-size: 24px; | 112 | font-size: 24px; |
111 | color: #999999; | 113 | color: #999999; |
112 | margin-top: 12px; | 114 | margin-top: 12px; |
115 | @include ellipsis(2); | ||
113 | } | 116 | } |
114 | 117 | ||
115 | .integral { | 118 | .integral { |
... | @@ -125,9 +128,9 @@ $contentWidth:690px; | ... | @@ -125,9 +128,9 @@ $contentWidth:690px; |
125 | bottom: 0; | 128 | bottom: 0; |
126 | right: 0; | 129 | right: 0; |
127 | 130 | ||
128 | width: 140px; | 131 | width: 142px; |
129 | height: 64px; | 132 | height: 60px; |
130 | line-height: 64px; | 133 | line-height: 60px; |
131 | text-align: center; | 134 | text-align: center; |
132 | color: #fff; | 135 | color: #fff; |
133 | border-radius: 8px; | 136 | border-radius: 8px; | ... | ... |
... | @@ -24,37 +24,15 @@ | ... | @@ -24,37 +24,15 @@ |
24 | <view class="top-space"></view> | 24 | <view class="top-space"></view> |
25 | <view class="content"> | 25 | <view class="content"> |
26 | <view class="product"> | 26 | <view class="product"> |
27 | <view class="product-item"> | 27 | <view class="product-item" wx:for="{{productList}}" wx:key="{{index}}"> |
28 | <view class="image-wrap"> | 28 | <view class="image-wrap"> |
29 | <!-- <image /> --> | 29 | <!-- <image /> --> |
30 | </view> | 30 | </view> |
31 | <view class="cont"> | 31 | <view class="cont"> |
32 | <view class="name">某东购物卡200元</view> | 32 | <view class="name">某东购物卡200元</view> |
33 | <view class="desc">可在xx超市使用,可够买xxx</view> | 33 | <view class="desc">可在xx超市使用,可够买xxx可在xx超市使用,可够买xxx可在xx超市使用,可够买xxx</view> |
34 | <view class="integral">消耗积分:3000分</view> | 34 | <view class="integral">消耗积分:3000分</view> |
35 | <view class="btn">查看</view> | 35 | <view bindtap="onShowGiftDetailHandler" data-data="{{item}}" class="btn">查看</view> |
36 | </view> | ||
37 | </view> | ||
38 | <view class="product-item"> | ||
39 | <view class="image-wrap"> | ||
40 | <!-- <image /> --> | ||
41 | </view> | ||
42 | <view class="cont"> | ||
43 | <view class="name">某东购物卡200元</view> | ||
44 | <view class="desc">可在xx超市使用,可够买xxx</view> | ||
45 | <view class="integral">消耗积分:3000分</view> | ||
46 | <view class="btn">查看</view> | ||
47 | </view> | ||
48 | </view> | ||
49 | <view class="product-item"> | ||
50 | <view class="image-wrap"> | ||
51 | <!-- <image /> --> | ||
52 | </view> | ||
53 | <view class="cont"> | ||
54 | <view class="name">某东购物卡200元</view> | ||
55 | <view class="desc">可在xx超市使用,可够买xxx</view> | ||
56 | <view class="integral">消耗积分:3000分</view> | ||
57 | <view class="btn">查看</view> | ||
58 | </view> | 36 | </view> |
59 | </view> | 37 | </view> |
60 | </view> | 38 | </view> | ... | ... |
... | @@ -28,8 +28,7 @@ $contentWidth:670px; | ... | @@ -28,8 +28,7 @@ $contentWidth:670px; |
28 | width: $contentWidth; | 28 | width: $contentWidth; |
29 | height: 100px; | 29 | height: 100px; |
30 | background: #FFFFFF; | 30 | background: #FFFFFF; |
31 | box-shadow: 0 6px 18px 0 rgba(0, 0, 0, 0.10); | 31 | @extend .shadow; |
32 | border-radius: 8px; | ||
33 | margin: 222px auto 0; | 32 | margin: 222px auto 0; |
34 | display: flex; | 33 | display: flex; |
35 | justify-content: space-between; | 34 | justify-content: space-between; | ... | ... |
1 | // 手机正则 | 1 | // 手机正则 |
2 | const REGEXPS = { | 2 | const REGEXPS = { |
3 | "mobile": /^1\d{10}$/ | 3 | "mobile": /^1\d{10}$/ |
4 | } | 4 | } |
5 | // 验证手机 | 5 | // 验证手机 |
6 | function checkMobile(str) { | 6 | function checkMobile(str) { |
7 | return REGEXPS.mobile.test(str); | 7 | return REGEXPS.mobile.test(str); |
8 | } | 8 | } |
9 | 9 | ||
10 | 10 | ||
11 | function formatTime(date) { | 11 | /** |
12 | var year = date.getFullYear() | 12 | * 链接参数转换为obj |
13 | var month = date.getMonth() + 1 | 13 | * 入参 完整链接 |
14 | var day = date.getDate() | 14 | * @param {*} url |
15 | */ | ||
16 | function param2Obj(url) { | ||
17 | const search = url.split('?')[1] | ||
18 | if (!search) { | ||
19 | return {} | ||
20 | } | ||
21 | return JSON.parse( | ||
22 | '{"' + | ||
23 | decodeURIComponent(search) | ||
24 | .replace(/"/g, '\\"') | ||
25 | .replace(/&/g, '","') | ||
26 | .replace(/=/g, '":"') + | ||
27 | '"}' | ||
28 | ) | ||
29 | } | ||
15 | 30 | ||
16 | var hour = date.getHours() | 31 | /** |
17 | var minute = date.getMinutes() | 32 | * 格式化日期常规日期 |
18 | var second = date.getSeconds() | 33 | * 格式yyyy-MM-dd hh:mm:ss |
34 | * @param {*} date | ||
35 | */ | ||
36 | function formatTime(date) { | ||
37 | var year = date.getFullYear() | ||
38 | var month = date.getMonth() + 1 | ||
39 | var day = date.getDate() | ||
19 | 40 | ||
41 | var hour = date.getHours() | ||
42 | var minute = date.getMinutes() | ||
43 | var second = date.getSeconds() | ||
20 | 44 | ||
21 | return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':') | 45 | return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':') |
22 | } | 46 | } |
23 | 47 | ||
48 | /** | ||
49 | * 格式化数字,不足一位补充0 | ||
50 | * @param {*} n | ||
51 | */ | ||
24 | function formatNumber(n) { | 52 | function formatNumber(n) { |
25 | n = n.toString() | 53 | n = n.toString() |
26 | return n[1] ? n : '0' + n | 54 | return n[1] ? n : '0' + n |
27 | } | 55 | } |
28 | 56 | ||
29 | |||
30 | |||
31 | |||
32 | /** | 57 | /** |
33 | * 获取屏幕剩余高度 | 58 | * 获取屏幕剩余高度 |
34 | * useHeight 单位是rpx | 59 | * useHeight 单位是rpx |
35 | * 默认返回单位是rpx 可通过unit参数改为 px | 60 | * 默认返回单位是rpx 可通过unit参数改为 px |
36 | */ | 61 | */ |
37 | function getLastScreenHeight(useHeight = 0, unit = 'rpx') { | 62 | function getLastScreenHeight(useHeight = 0, unit = 'rpx') { |
38 | let sysInfo = wx.getSystemInfoSync(); | 63 | let sysInfo = wx.getSystemInfoSync(); |
39 | let clientHeight = sysInfo.windowHeight; | 64 | let clientHeight = sysInfo.windowHeight; |
40 | // 获取可使用窗口高度 | 65 | // 获取可使用窗口高度 |
41 | let clientWidth = sysInfo.windowWidth; | 66 | let clientWidth = sysInfo.windowWidth; |
42 | // 算出比例 | 67 | // 算出比例 |
43 | let ratio = 750 / clientWidth; | 68 | let ratio = 750 / clientWidth; |
44 | // 算出屏幕高度(单位rpx) | 69 | // 算出屏幕高度(单位rpx) |
45 | let height = clientHeight * ratio; | 70 | let height = clientHeight * ratio; |
46 | // 计算剩余高度 | 71 | // 计算剩余高度 |
47 | let lastHeight = height - useHeight; | 72 | let lastHeight = height - useHeight; |
48 | // 可转换成px | 73 | // 可转换成px |
49 | if (unit == 'px') { | 74 | if (unit == 'px') { |
50 | lastHeight = lastHeight / 750 * clientWidth | 75 | lastHeight = lastHeight / 750 * clientWidth |
51 | } | 76 | } |
52 | return lastHeight; | 77 | return lastHeight; |
78 | } | ||
79 | |||
80 | |||
81 | /** | ||
82 | * px转rpx | ||
83 | * @param {*} value | ||
84 | */ | ||
85 | function pxToRpx(value) { | ||
86 | let sysInfo = wx.getSystemInfoSync(); | ||
87 | let clientWidth = sysInfo.windowWidth; | ||
88 | let result = value / 750 * clientWidth | ||
89 | return result; | ||
90 | } | ||
91 | |||
92 | |||
93 | // 格式化星期几 | ||
94 | function formatWeek(week) { | ||
95 | let result = ""; | ||
96 | switch (week) { | ||
97 | case 1: | ||
98 | result = "一"; | ||
99 | break; | ||
100 | case 2: | ||
101 | result = "二"; | ||
102 | break; | ||
103 | case 3: | ||
104 | result = "三"; | ||
105 | break; | ||
106 | case 4: | ||
107 | result = "四"; | ||
108 | break; | ||
109 | case 5: | ||
110 | result = "五"; | ||
111 | break; | ||
112 | case 6: | ||
113 | result = "六"; | ||
114 | break; | ||
115 | case 0: | ||
116 | result = "日"; | ||
117 | break; | ||
118 | |||
119 | default: | ||
120 | break; | ||
121 | } | ||
122 | return result; | ||
123 | } | ||
124 | |||
125 | /** | ||
126 | * 获取点击传值 | ||
127 | * @param {*} evt | ||
128 | * @param {*} key | ||
129 | */ | ||
130 | function getBindtapData(evt, key = "data") { | ||
131 | let keyStr = key || "data"; | ||
132 | return evt.currentTarget.dataset[keyStr]; | ||
133 | } | ||
134 | |||
135 | /** | ||
136 | * 获取小程序码 | ||
137 | * path = "/pages/index/index?pa=1" | ||
138 | * @param {*} path | ||
139 | */ | ||
140 | function wxacodeGet(path) { | ||
141 | return " https://api.k.wxpai.cn/bizproxy/mzcfsapi/qrcode/create?path=" + encodeURIComponent(path); | ||
142 | } | ||
143 | |||
144 | |||
145 | /** | ||
146 | * @desc 函数防抖 | ||
147 | * @param func 函数 | ||
148 | * @param wait 延迟执行毫秒数 | ||
149 | * @param immediate true 表立即执行,false 表非立即执行 | ||
150 | */ | ||
151 | function debounce(func, wait, immediate) { | ||
152 | let timeout; | ||
153 | |||
154 | return function () { | ||
155 | let context = this; | ||
156 | let args = arguments; | ||
157 | |||
158 | if (timeout) clearTimeout(timeout); | ||
159 | if (immediate) { | ||
160 | var callNow = !timeout; | ||
161 | timeout = setTimeout(() => { | ||
162 | timeout = null; | ||
163 | }, wait) | ||
164 | if (callNow) func.apply(context, args) | ||
165 | } else { | ||
166 | timeout = setTimeout(function () { | ||
167 | func.apply(context, args) | ||
168 | }, wait); | ||
169 | } | ||
170 | } | ||
171 | } | ||
172 | |||
173 | /** | ||
174 | * @desc 函数节流 | ||
175 | * @param func 函数 | ||
176 | * @param wait 延迟执行毫秒数 | ||
177 | * @param type 1 表时间戳版,2 表定时器版 | ||
178 | * 时间戳版的函数触发是在时间段内开始的时候,而定时器版的函数触发是在时间段内结束的时候。 | ||
179 | */ | ||
180 | function throttle(func, wait, type) { | ||
181 | if (type === 1) { | ||
182 | var previous = 0; | ||
183 | } else if (type === 2) { | ||
184 | var timeout; | ||
185 | } | ||
186 | return function () { | ||
187 | let context = this; | ||
188 | let args = arguments; | ||
189 | if (type === 1) { | ||
190 | let now = Date.now(); | ||
191 | |||
192 | if (now - previous > wait) { | ||
193 | func.apply(context, args); | ||
194 | previous = now; | ||
195 | } | ||
196 | } else if (type === 2) { | ||
197 | if (!timeout) { | ||
198 | timeout = setTimeout(() => { | ||
199 | timeout = null; | ||
200 | func.apply(context, args) | ||
201 | }, wait) | ||
202 | } | ||
203 | } | ||
204 | } | ||
53 | } | 205 | } |
54 | 206 | ||
55 | module.exports = { | 207 | module.exports = { |
56 | formatTime: formatTime, | 208 | formatTime: formatTime, |
57 | checkMobile: checkMobile, | 209 | checkMobile: checkMobile, |
58 | getLastScreenHeight: getLastScreenHeight | 210 | getLastScreenHeight: getLastScreenHeight, |
211 | debounce: debounce, | ||
212 | throttle: throttle, | ||
213 | param2Obj: param2Obj, | ||
214 | pxToRpx: pxToRpx, | ||
215 | formatWeek: formatWeek, | ||
216 | getBindtapData: getBindtapData, | ||
217 | wxacodeGet: wxacodeGet, | ||
59 | } | 218 | } | ... | ... |
-
Please register or sign in to post a comment