0d77d51R96">96
+        amount: this.data.amount,
97
+        name: this.data.address.userName || '',
98
+        phone: this.data.address.telNumber || '',
99
+        address: this.data.address.detailInfo || '',
100
+        body: '尖货接龙'
101
+      },
102
+      success(res1) {
103
+        const { wxpay_params } = res1.data
104
+        that.setData({
105
+          order_id: res1.data.order_id,
106
+          prepay_id: res1.data.prepay_id
107
+        })
108
+        wx.requestPayment({
109
+          timeStamp: wxpay_params.timeStamp,
110
+          nonceStr: wxpay_params.nonceStr,
111
+          package: wxpay_params.package,
112
+          signType: wxpay_params.signType,
113
+          paySign: wxpay_params.paySign,
114
+          success: _ => {
115
+            wx.redirectTo({
116
+              url: '/template/resultView/resultView'
117
+            })
118
+          },
119
+          fail: res2 => {
120
+            if (res2.errMsg === 'requestPayment:fail cancel') {
121
+              app.network.post({
122
+                url: app.urls.LIVE.ORDER_CANCEL,
123
+                data: {
124
+                  order_id: that.data.order_id,
125
+                  prepay_id: that.data.prepay_id
126
+                }
127
+              })
128
+            }
129
+          }
130
+        })
131
+      }
132
+    })
133
+  }
134
+})

+ 6 - 0
src/pages/live/order/order.json

@@ -0,0 +1,6 @@
1
+{
2
+  "usingComponents": {
3
+    "stepper": "/component/stepper/stepper"
4
+  },
5
+  "disableScroll": true
6
+}

+ 248 - 0
src/pages/live/order/order.less

@@ -0,0 +1,248 @@
1
+@import './src/style/less/variable.less';
2
+@import './src/style/less/layout.less';
3
+@import './src/style/less/shape.less';
4
+@import '/template/footer/footer.wxss';
5
+@import '/template/btn/btn.wxss';
6
+
7
+.order-view {
8
+  .flex-center(column);
9
+  .with-btnFooter();
10
+
11
+  width: 100%;
12
+  background-color: @color-bg;
13
+
14
+  text {
15
+    color: @color-black;
16
+  }
17
+
18
+  view {
19
+    color: @color-black;
20
+  }
21
+}
22
+
23
+.address {
24
+  .flex-center(row);
25
+
26
+  box-sizing: border-box;
27
+  width: @visual-width;
28
+  min-height: 80rpx;
29
+  padding: 0 @spacing-item;
30
+  margin: @spacing-item;
31
+  background-color: @color-white;
32
+  border-radius: @radius;
33
+
34
+  .item() {
35
+    .square(40rpx);
36
+
37
+    .icon {
38
+      .full-image();
39
+    }
40
+  }
41
+
42
+  .left {
43
+    .item();
44
+  }
45
+
46
+  .content {
47
+    .flex-center(column);
48
+
49
+    box-sizing: border-box;
50
+    width: @visual-width - 80rpx - @spacing-item * 2;
51
+    min-height: 80rpx;
52
+    padding: @spacing-inline @spacing-item;
53
+
54
+    view {
55
+      .flex-center(row);
56
+
57
+      width: 100%;
58
+      margin-top: @spacing-inline;
59
+    }
60
+
61
+    .top {
62
+      justify-content: flex-start;
63
+
64
+      .name {
65
+        font-size: @font-primary;
66
+      }
67
+
68
+      .phone {
69
+        margin-left: @spacing-item;
70
+        font-size: @font-quaternary;
71
+        color: @color-gray;
72
+      }
73
+    }
74
+
75
+    .bottom {
76
+      font-size: @font-tertiary;
77
+    }
78
+  }
79
+
80
+  .right {
81
+    .item();
82
+
83
+    .arrow {
84
+      .arrow(right; @color-dark-bg; @icon-small-size);
85
+    }
86
+  }
87
+
88
+  &-hover {
89
+    background-color: darken(@color-white, 15%);
90
+  }
91
+}
92
+
93
+.authorization {
94
+  justify-content: center;
95
+
96
+  text {
97
+    margin-left: @spacing-short-text;
98
+    font-size: @font-primary;
99
+    color: @color-brand;
100
+  }
101
+
102
+  .plus {
103
+    .plus(6rpx; @color-brand);
104
+    .square(@icon-small-size);
105
+  }
106
+}
107
+
108
+.goods {
109
+  .flex-center(row);
110
+
111
+  align-items: center;
112
+  width: @visual-width;
113
+  min-height: 200rpx;
114
+  margin-top: @spacing-inline;
115
+  background-color: @color-white;
116
+  border-radius: @radius;
117
+
118
+  .left {
119
+    .flex-center(row);
120
+
121
+    justify-content: center;
122
+    width: 200rpx;
123
+    height: 200rpx;
124
+
125
+    image {
126
+      .square(160rpx);
127
+
128
+      border-radius: @radius;
129
+    }
130
+  }
131
+
132
+  .right {
133
+    display: flex;
134
+    flex-direction: column;
135
+    justify-content: space-between;
136
+    width: @visual-width - 200rpx;
137
+    min-height: 160rpx;
138
+    margin: @spacing-inline 0;
139
+
140
+    .top {
141
+      display: flex;
142
+      flex-direction: column;
143
+      width: 100%;
144
+
145
+      .title {
146
+        font-size: @font-primary;
147
+      }
148
+
149
+      .inventory {
150
+        font-size: @font-quaternary;
151
+        color: @color-light-gray;
152
+      }
153
+    }
154
+
155
+    .bottom {
156
+      .flex-center(row);
157
+
158
+      box-sizing: border-box;
159
+      justify-content: space-between;
160
+      width: 100%;
161
+      padding-right: @spacing-inline;
162
+
163
+      .price-group {
164
+        .flex-center(row);
165
+
166
+        .price1 {
167
+          display: flex;
168
+          align-items: flex-end;
169
+
170
+          text {
171
+            color: @color-gray;
172
+          }
173
+
174
+          .value {
175
+            font-size: @font-secondary;
176
+          }
177
+
178
+          .symbol {
179
+            margin-bottom: 2px;
180
+            font-size: @font-quaternary;
181
+          }
182
+        }
183
+
184
+        .price2 {
185
+          display: flex;
186
+          align-items: flex-end;
187
+          margin-left: @spacing-inline;
188
+
189
+          text {
190
+            color: @color-light-gray;
191
+          }
192
+
193
+          .value {
194
+            font-size: @font-tertiary;
195
+            text-decoration: line-through;
196
+          }
197
+        }
198
+      }
199
+    }
200
+  }
201
+}
202
+
203
+.btn-footer {
204
+  .flex-center(row);
205
+
206
+  position: fixed;
207
+  bottom: 0;
208
+  box-sizing: border-box;
209
+  justify-content: center;
210
+  width: 100%;
211
+  height: @btnFooter-height;
212
+  padding: @spacing-item;
213
+  background-color: @color-white;
214
+  box-shadow: 0 -5px 9px 2px fade(@color-black, 10%);
215
+
216
+  .btn-footer-container {
217
+    display: flex;
218
+    width: 100%;
219
+    height: 100rpx;
220
+    overflow: hidden;
221
+    border: 1px #09bb07 solid;
222
+    border-radius: @radius;
223
+
224
+    &-disabled {
225
+      border: 1px @color-light-gray solid !important;
226
+    }
227
+
228
+    .left {
229
+      .flex-center(row);
230
+
231
+      justify-content: center;
232
+      width: 40%;
233
+      height: 100rpx;
234
+      background-color: @color-white;
235
+
236
+      text {
237
+        font-size: @font-primary;
238
+        font-weight: 700;
239
+        color: #e64340;
240
+      }
241
+    }
242
+
243
+    .right {
244
+      width: 100%;
245
+      height: 100%;
246
+    }
247
+  }
248
+}

+ 79 - 0
src/pages/live/order/order.wxml

@@ -0,0 +1,79 @@
1
+<view class="order-view">
2
+  <view
3
+    class="address"
4
+    hover-class="address-hover"
5
+    bindtap="navigateToAddress"
6
+    wx:if="{{ hasAddress }}"
7
+  >
8
+    <view class="left">
9
+      <image class="icon" src="/resources/common/location.png"></image>
10
+    </view>
11
+    <view class="content">
12
+      <view class="top">
13
+        <text class="name">{{ address.userName }}</text>
14
+        <text class="phone">{{ address.telNumber }}</text>
15
+      </view>
16
+      <view class="bottom">{{ address.detailInfo }}</view>
17
+    </view>
18
+    <view class="right">
19
+      <view class="icon arrow"></view>
20
+    </view>
21
+  </view>
22
+  <view
23
+    class="address authorization"
24
+    hover-class="address-hover"
25
+    bindtap="navigateToAddress"
26
+    wx:elif="{{ !hasAddress }}"
27
+  >
28
+    <view class="plus"></view>
29
+    <text>新建地址</text>
30
+  </view>
31
+  <view class="goods-container" wx:if="{{ isLoading }}">
32
+    <view class="goods">
33
+      <view class="left">
34
+        <image src="{{ goodsInfo.goods_img }}" mode="aspectFit"></image>
35
+      </view>
36
+      <view class="right">
37
+        <view class="top">
38
+          <text class="title">{{ goodsInfo.name }}</text>
39
+          <text class="inventory" wx:if="{{ goodsInfo.inventory > 0 }}"
40
+            >仅剩{{ goodsInfo.inventory }}个</text
41
+          >
42
+          <text class="inventory" wx:else>库存不足</text>
43
+        </view>
44
+        <view class="bottom">
45
+          <view class="price-group">
46
+            <view class="price1">
47
+              <text class="symbol">¥</text>
48
+              <text class="value">{{ goodsInfo.price / 100 }}</text>
49
+            </view>
50
+            <view class="price2" wx:if="{{ goodsInfo.price_type === 3 }}">
51
+              <text class="value">¥{{ goodsInfo.price2 / 100 }}</text>
52
+            </view>
53
+          </view>
54
+          <stepper
55
+            num="{{ num }}"
56
+            bindstepperChanged="bindstepperChanged"
57
+            wx:if="{{ goodsInfo.inventory > 0 }}"
58
+          ></stepper>
59
+        </view>
60
+      </view>
61
+    </view>
62
+  </view>
63
+</view>
64
+
65
+<import src="/template/btn/btn.wxml"></import>
66
+<view class="btn-footer">
67
+  <view
68
+    class="btn-footer-container {{hasAddress && goodsInfo.inventory > 0 ? '' : 'btn-footer-container-disabled'}}">
69
+    <view class="left" wx:if="{{ total > 0 & goodsInfo.inventory > 0 }}">
70
+      <text class="money">¥{{ total / 100 }}</text>
71
+    </view>
72
+    <view class="right">
73
+      <template
74
+        is="iconBtn"
75
+        data="{{btnClass: 'button4', btnTxt: goodsInfo.inventory > 0 ? '立即支付' : '库存不足', disabled: !(hasAddress && goodsInfo.inventory > 0), action: 'confirm'}}"
76
+      ></template>
77
+    </view>
78
+  </view>
79
+</view>

+ 236 - 0
src/pages/live/order/order.wxss

@@ -0,0 +1,236 @@
1
+@import '/template/footer/footer.wxss';
2
+@import '/template/btn/btn.wxss';
3
+.order-view {
4
+  display: flex;
5
+  flex-direction: column;
6
+  align-items: center;
7
+  height: calc(100% - 160rpx);
8
+  width: 100%;
9
+  background-color: #efefef;
10
+}
11
+.order-view text {
12
+  color: #111;
13
+}
14
+.order-view view {
15
+  color: #111;
16
+}
17
+.address {
18
+  display: flex;
19
+  align-items: center;
20
+  box-sizing: border-box;
21
+  width: 702rpx;
22
+  min-height: 80rpx;
23
+  padding: 0 24rpx;
24
+  margin: 24rpx;
25
+  background-color: #fff;
26
+  border-radius: 5px;
27
+}
28
+.address .left {
29
+  width: 40rpx;
30
+  height: 40rpx;
31
+}
32
+.address .left .icon {
33
+  width: 100%;
34
+  height: 100%;
35
+}
36
+.address .content {
37
+  display: flex;
38
+  flex-direction: column;
39
+  align-items: center;
40
+  box-sizing: border-box;
41
+  width: 574rpx;
42
+  min-height: 80rpx;
43
+  padding: 12rpx 24rpx;
44
+}
45
+.address .content view {
46
+  display: flex;
47
+  align-items: center;
48
+  width: 100%;
49
+  margin-top: 12rpx;
50
+}
51
+.address .content .top {
52
+  justify-content: flex-start;
53
+}
54
+.address .content .top .name {
55
+  font-size: 14pt;
56
+}
57
+.address .content .top .phone {
58
+  margin-left: 24rpx;
59
+  font-size: 10pt;
60
+  color: #3e3e3e;
61
+}
62
+.address .content .bottom {
63
+  font-size: 11pt;
64
+}
65
+.address .right {
66
+  width: 40rpx;
67
+  height: 40rpx;
68
+}
69
+.address .right .icon {
70
+  width: 100%;
71
+  height: 100%;
72
+}
73
+.address .right .arrow {
74
+  width: 32rpx;
75
+  height: 32rpx;
76
+  box-sizing: border-box;
77
+  border-top: 2px solid #3e3e3e;
78
+  border-right: 2px solid #3e3e3e;
79
+  transform: rotate(45deg);
80
+}
81
+.address-hover {
82
+  background-color: #d9d9d9;
83
+}
84
+.authorization {
85
+  justify-content: center;
86
+}
87
+.authorization text {
88
+  margin-left: 4rpx;
89
+  font-size: 14pt;
90
+  color: #09bb07;
91
+}
92
+.authorization .plus {
93
+  position: relative;
94
+  width: 32rpx;
95
+  height: 32rpx;
96
+}
97
+.authorization .plus::before {
98
+  position: absolute;
99
+  top: calc(50% - 6rpx / 2);
100
+  left: 0;
101
+  width: 100%;
102
+  height: 6rpx;
103
+  content: '';
104
+  background-color: #09bb07;
105
+  border-radius: 6rpx;
106
+}
107
+.authorization .plus::after {
108
+  position: absolute;
109
+  top: 0;
110
+  left: calc(50% - 6rpx / 2);
111
+  width: 6rpx;
112
+  height: 100%;
113
+  content: '';
114
+  background-color: #09bb07;
115
+  border-radius: 6rpx;
116
+}
117
+.goods {
118
+  display: flex;
119
+  align-items: center;
120
+  width: 702rpx;
121
+  min-height: 200rpx;
122
+  margin-top: 12rpx;
123
+  background-color: #fff;
124
+  border-radius: 5px;
125
+}
126
+.goods .left {
127
+  display: flex;
128
+  align-items: center;
129
+  justify-content: center;
130
+  width: 200rpx;
131
+  height: 200rpx;
132
+}
133
+.goods .left image {
134
+  width: 160rpx;
135
+  height: 160rpx;
136
+  border-radius: 5px;
137
+}
138
+.goods .right {
139
+  display: flex;
140
+  flex-direction: column;
141
+  justify-content: space-between;
142
+  width: 502rpx;
143
+  min-height: 160rpx;
144
+  margin: 12rpx 0;
145
+}
146
+.goods .right .top {
147
+  display: flex;
148
+  flex-direction: column;
149
+  width: 100%;
150
+}
151
+.goods .right .top .title {
152
+  font-size: 14pt;
153
+}
154
+.goods .right .top .inventory {
155
+  font-size: 10pt;
156
+  color: #959595;
157
+}
158
+.goods .right .bottom {
159
+  display: flex;
160
+  align-items: center;
161
+  box-sizing: border-box;
162
+  justify-content: space-between;
163
+  width: 100%;
164
+  padding-right: 12rpx;
165
+}
166
+.goods .right .bottom .price-group {
167
+  display: flex;
168
+  align-items: center;
169
+}
170
+.goods .right .bottom .price-group .price1 {
171
+  display: flex;
172
+  align-items: flex-end;
173
+}
174
+.goods .right .bottom .price-group .price1 text {
175
+  color: #3e3e3e;
176
+}
177
+.goods .right .bottom .price-group .price1 .value {
178
+  font-size: 13pt;
179
+}
180
+.goods .right .bottom .price-group .price1 .symbol {
181
+  margin-bottom: 2px;
182
+  font-size: 10pt;
183
+}
184
+.goods .right .bottom .price-group .price2 {
185
+  display: flex;
186
+  align-items: flex-end;
187
+  margin-left: 12rpx;
188
+}
189
+.goods .right .bottom .price-group .price2 text {
190
+  color: #959595;
191
+}
192
+.goods .right .bottom .price-group .price2 .value {
193
+  font-size: 11pt;
194
+  text-decoration: line-through;
195
+}
196
+.btn-footer {
197
+  display: flex;
198
+  align-items: center;
199
+  position: fixed;
200
+  bottom: 0;
201
+  box-sizing: border-box;
202
+  justify-content: center;
203
+  width: 100%;
204
+  height: 160rpx;
205
+  padding: 24rpx;
206
+  background-color: #fff;
207
+  box-shadow: 0 -5px 9px 2px rgba(17, 17, 17, 0.1);
208
+}
209
+.btn-footer .btn-footer-container {
210
+  display: flex;
211
+  width: 100%;
212
+  height: 100rpx;
213
+  overflow: hidden;
214
+  border: 1px #09bb07 solid;
215
+  border-radius: 5px;
216
+}
217
+.btn-footer .btn-footer-container-disabled {
218
+  border: 1px #959595 solid !important;
219
+}
220
+.btn-footer .btn-footer-container .left {
221
+  display: flex;
222
+  align-items: center;
223
+  justify-content: center;
224
+  width: 40%;
225
+  height: 100rpx;
226
+  background-color: #fff;
227
+}
228
+.btn-footer .btn-footer-container .left text {
229
+  font-size: 14pt;
230
+  font-weight: 700;
231
+  color: #e64340;
232
+}
233
+.btn-footer .btn-footer-container .right {
234
+  width: 100%;
235
+  height: 100%;
236
+}

+ 3 - 3
src/pages/order/order.wxss

@@ -9,10 +9,10 @@
9 9
   background-color: #efefef;
10 10
 }
11 11
 .order-view text {
12
-  color: #000;
12
+  color: #111;
13 13
 }
14 14
 .order-view view {
15
-  color: #000;
15
+  color: #111;
16 16
 }
17 17
 .address {
18 18
   display: flex;
@@ -169,7 +169,7 @@
169 169
   height: 160rpx;
170 170
   padding: 24rpx;
171 171
   background-color: #fff;
172
-  box-shadow: 0 -5px 9px 2px rgba(0, 0, 0, 0.1);
172
+  box-shadow: 0 -5px 9px 2px rgba(17, 17, 17, 0.1);
173 173
 }
174 174
 .btn-footer .btn-footer-container {
175 175
   display: flex;

+ 5 - 5
src/project.config.json

@@ -58,16 +58,16 @@
58 58
 			"list": [
59 59
 				{
60 60
 					"id": 0,
61
-					"name": "pages/cameraCompatible/cameraCompatible",
62
-					"pathName": "pages/cameraCompatible/cameraCompatible",
63
-					"query": "activity_id=nBJ56hN9ik94js4duSh34V&isSignIn=1",
64
-					"scene": 1047
61
+					"name": "pages/live/order/order",
62
+					"pathName": "pages/live/order/order",
63
+					"query": "room_id=24&share_openid='ccc'&goods_id=nHUqwuwaygHpos4hiekz7f",
64
+					"scene": 1007
65 65
 				},
66 66
 				{
67 67
 					"id": 1,
68 68
 					"name": "pages/index/index",
69 69
 					"pathName": "pages/index/index",
70
-					"query": "q=http://kodo.tamron.cn/v/0+21+KUjsUKURRRRRRUK6KxxK",
70
+					"query": "room_id=17",
71 71
 					"scene": 1011
72 72
 				},
73 73
 				{

+ 1 - 1
src/style/less/variable.less

@@ -1,7 +1,7 @@
1 1
 //color
2 2
 @color-bg: #efefef;
3 3
 @color-dark-bg: #3e3e3e;
4
-@color-black: #000;
4
+@color-black: #111;
5 5
 @color-white: #fff;
6 6
 @color-brand: #09bb07;
7 7
 @color-other1: #d2b167;

+ 2 - 2
src/template/footer/footer.wxss

@@ -38,7 +38,7 @@
38 38
   width: 100%;
39 39
   height: 160rpx;
40 40
   background-color: #fff;
41
-  box-shadow: 0 -5px 9px 2px rgba(0, 0, 0, 0.1);
41
+  box-shadow: 0 -5px 9px 2px rgba(17, 17, 17, 0.1);
42 42
 }
43 43
 .btn-footer1 button {
44 44
   height: 100rpx;
@@ -55,7 +55,7 @@
55 55
   width: 100%;
56 56
   height: 160rpx;
57 57
   background-color: #fff;
58
-  box-shadow: 0 -5px 9px 2px rgba(0, 0, 0, 0.1);
58
+  box-shadow: 0 -5px 9px 2px rgba(17, 17, 17, 0.1);
59 59
 }
60 60
 .btn-footer2 button {
61 61
   height: 100rpx;

+ 2 - 26
src/template/resultView/resultView.js

@@ -13,32 +13,8 @@ Page({
13 13
     isHightlight: false
14 14
   },
15 15
 
16
-  onLoad(options) {
17
-    if (options.goods) {
18
-      const goods = JSON.parse(options.goods)
19
-      let desc = this.data.desc1
20
-      if (goods.only_for_member) {
21
-        desc = this.data.desc3
22
-      } else if (goods.good_type === 0) {
23
-        desc = this.data.desc2
24
-      }
25
-      this.setData({
26
-        isVirtual: goods.good_type === 1,
27
-        desc
28
-      })
29
-    } else {
30
-      const eventChannel = this.getOpenerEventChannel()
31
-      const that = this
32
-      eventChannel.on('acceptDataFromOpenerPage', data => {
33
-        that.setData({
34
-          title: data.title,
35
-          desc: data.desc,
36
-          action: 'navigateToMine',
37
-          btnTitle: data.btnTitle,
38
-          isHightlight: data.isHightlight
39
-        })
40
-      })
41
-    }
16
+  onLoad() {
17
+    wx.hideHomeButton()
42 18
   },
43 19
 
44 20
   navigateToMine() {

+ 7 - 10
src/template/resultView/resultView.wxml

@@ -1,24 +1,21 @@
1 1
 
2
-<view class="result-view" wx:if="{{isHightlight}}">
2
+<view class="result-view">
3 3
   <view class="logo">
4 4
     <image src="success.svg"></image>
5 5
   </view>
6 6
   <view class="content">
7
-    <text class="title">{{ title }}</text>
8
-    <view class="hint">
7
+    <text class="title">购买成功</text>
8
+    <!-- <view class="hint">
9 9
       <image src="/resources/trumpet.svg"></image>
10
-      <text>{{ desc }}</text>
11
-    </view>
10
+      <text>七天内发货</text>
11
+    </view> -->
12 12
     <view class="official-account">
13 13
       <official-account binderror="officialAccountError"></official-account>
14 14
     </view>
15 15
   </view>
16
-  <view class="action-bottom">
17
-    <view class="goOn" bindtap="{{ action }}">{{ btnTitle }}</view>
18
-  </view>
19 16
 </view>
20 17
 
21
-<view class="result-view" wx:else>
18
+<!-- <view class="result-view" wx:else>
22 19
   <view class="logo">
23 20
     <image src="success.svg"></image>
24 21
   </view>
@@ -30,4 +27,4 @@
30 27
     <view class="goOn" bindtap="{{ action }}">{{ btnTitle }}</view>
31 28
     <view class="detail" bindtap="navigateToVoucher" wx:if="{{ isVirtual }}">去查看</view>
32 29
   </view>
33
-</view>
30
+</view> -->

+ 1 - 1
src/template/resultView/resultView.wxss

@@ -28,7 +28,7 @@
28 28
   margin-top: 24rpx;
29 29
   font-size: 17pt;
30 30
   font-weight: 600;
31
-  color: #000;
31
+  color: #111;
32 32
 }
33 33
 .content .desc {
34 34
   margin-top: 24rpx;

+ 47 - 1
src/utils/network.js

@@ -149,7 +149,53 @@ function post(params, isTip = true) {
149 149
   })
150 150
 }
151 151
 
152
+function liveLogin(data) {
153
+  const params = data
154
+  wx.showLoading({
155
+    title: '加载中...',
156
+    mask: true
157
+  })
158
+  wx.login({
159
+    success(res1) {
160
+      if (res1.code) {
161
+        params.code = res1.code
162
+        wx.request({
163
+          url: urls.LIVE.LOGIN,
164
+          data: params,
165
+          method: 'POST',
166
+          header: {
167
+            'content-type': 'application/x-www-form-urlencoded'
168
+          },
169
+          success(res2) {
170
+            wx.setStorage({
171
+              key: 'userInfo',
172
+              data: res2.data.data
173
+            })
174
+          },
175
+          complete: () => {
176
+            wx.hideLoading()
177
+          }
178
+        })
179
+      } else {
180
+        wx.showToast({
181
+          title: '微信登录异常',
182
+          icon: 'none'
183
+        })
184
+        wx.hideLoading()
185
+      }
186
+    },
187
+    fail() {
188
+      wx.showToast({
189
+        title: '微信登录异常',
190
+        icon: 'none'
191
+      })
192
+      wx.hideLoading()
193
+    }
194
+  })
195
+}
196
+
152 197
 module.exports = {
153 198
   post,
154
-  login
199
+  login,
200
+  liveLogin
155 201
 }

+ 9 - 1
src/utils/urls.js

@@ -7,5 +7,13 @@ module.exports = {
7 7
 
8 8
   PACK: `${config.baseURL}/api/pack`,
9 9
   ORDER_CREATE: `${config.baseURL}/api/pay/wx/order_create`,
10
-  ORDER_CANCEL: `${config.baseURL}/api/pay/wx/order/cancel`
10
+  ORDER_CANCEL: `${config.baseURL}/api/pay/wx/order/cancel`,
11
+
12
+  LIVE: {
13
+    GOODS_DETAIL: `${config.baseURL}/api/live/goods/detail`,
14
+    ORDER_CREATE: `${config.baseURL}/api/live/order/create`,
15
+    ORDER_CANCEL: `${config.baseURL}/api/live/order/cancel`,
16
+    ROOM_ANCHOR: `${config.baseURL}/api/live/room/anchor/detail`,
17
+    LOGIN: `${config.baseURL}/api/mini/live/login`
18
+  }
11 19
 }

paiai_ios - Gogs: Go Git Service

暫無描述

PhotoItem.swift 4.3KB

    // // PhotoItem.swift // PaiAi // // Created by FFIB on 2017/10/9. // Copyright © 2017年 yb. All rights reserved. // import Foundation import ObjectMapper import RxDataSources extension DateTransform { open func transformFromJSON(_ value: Any?) -> Date? { if let timeInt = value as? Double { return Date(timeIntervalSince1970: TimeInterval(timeInt) / 1000) } if let timeStr = value as? String { return Date(timeIntervalSince1970: TimeInterval(atof(timeStr)) / 1000) } return nil } } public struct PhotoItem: JSONCode { public var avatar = "" public var nickname = "" public var comment_num = 0 public var thumbup_num = 0 public var group_avatar = "" public var group_default_avatar = 0 public var group_name = "" public var photo_thumbnail_url = "" public var photo_thumbnail2_url = "" public var photo_url = "" public var photo_share_url = "" public var thumbup = false public var murl = "" public var rurl = "" public var create_at = "" public var create_at_time_interval = "" public var user_id = "" public var porder: [String: String] = [:] public var origin_expired_stamps: Double = 0 public var time_stamps: Date? public var isExpire = true public var sizeCache = CGSize(width: 0, height: 0) public var display_payment_btn = 0 var created_at: Date? var photo_thumbnail2_w = 0 var photo_thumbnail2_h = 0 var photo_thumbnail_w = 0 var photo_thumbnail_h = 0 var photo_h = 0 var photo_w = 0 var photo_from = 0 var photo_id = "" var group_from = 0 var group_id = "" init() {} public init(json: [String: AnyObject]) { self.init(map: Map(mappingType: .fromJSON, JSON: json)) } public static func empty() -> PhotoItem { return PhotoItem() } } extension PhotoItem: Mappable { public init(map: Map) { mapping(map: map) } mutating public func mapping(map: Map) { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'" created_at <- (map["created_at"], DateFormatterTransform(dateFormatter:dateFormatter)) avatar <- map["avatar"] comment_num <- map["comment_num"] group_avatar <- map["group_avatar"] group_default_avatar <- map["group_default_avatar"] group_from <- map["group_from"] group_id <- map["group_id"] group_name <- map["group_name"] nickname <- map["nickname"] photo_from <- map["photo_from"] photo_h <- map["photo_h"] photo_w <- map["photo_w"] photo_id <- map["photo_id"] photo_thumbnail2_h <- map["photo_thumbnail2_h"] photo_thumbnail2_url <- map["photo_thumbnail2_url"] photo_thumbnail2_w <- map["photo_thumbnail2_w"] photo_thumbnail_h <- map["photo_thumbnail_h"] photo_thumbnail_url <- map["photo_thumbnail_url"] photo_thumbnail_w <- map["photo_thumbnail_w"] photo_url <- map["photo_url"] photo_share_url <- map["photo_share_url"] thumbup <- map["thumbup"] thumbup_num <- map["thumbup_num"] user_id <- map["user_id"] porder <- map["porder"] display_payment_btn <- map["display_payment_btn"] rurl = porder["r_photo_url"] ?? "" murl = porder["m_photo_url"] ?? "" guard let date = created_at else { return } let createDateFormatter = DateFormatter() createDateFormatter.dateFormat = "yyyy年MM月dd日" create_at = createDateFormatter.string(from: date) create_at_time_interval = date.getTimeInfoFromDate() } } extension PhotoItem: IdentifiableType, Equatable { public typealias Identity = String public var identity: String { return photo_id } public static func == (lhs: PhotoItem, rhs: PhotoItem) -> Bool { return lhs.photo_id == rhs.photo_id } }