Commit 4d10466d307030af81410a85e90b70ffeb124aaa

Authored by zhiyangdu
1 parent fe444f8b

积分商城详情页改版

src/main.js
... ... @@ -17,7 +17,8 @@ import {
17 17 ImagePreview,
18 18 Tab,
19 19 Tabs,
20   - CountDown
  20 + CountDown,
  21 + Stepper
21 22 } from "vant";
22 23 import App from "./App";
23 24 import IdCard from "./common/IdCard";
... ... @@ -37,6 +38,7 @@ Vue.use(VueClipboard);
37 38 Vue.use(Tab);
38 39 Vue.use(Tabs);
39 40 Vue.use(CountDown);
  41 +Vue.use(Stepper);
40 42 Vue.use(Lazyload, {
41 43 preload: 90,
42 44 loading: "static/img/x.jpg",
... ... @@ -377,7 +379,6 @@ Vue.prototype.http = function(path, data, callback, ext) {
377 379 }
378 380 },
379 381 err => {
380   -
381 382 /* 加载错误处理 开始 */
382 383  
383 384 Indicator.close();
... ... @@ -390,7 +391,6 @@ Vue.prototype.http = function(path, data, callback, ext) {
390 391 }
391 392  
392 393 /* 加载错误处理 结束 */
393   -
394 394 }
395 395 );
396 396 }
... ... @@ -434,7 +434,6 @@ Vue.prototype.http = function(path, data, callback, ext) {
434 434 }
435 435 },
436 436 err => {
437   -
438 437 /* 加载错误处理 开始 */
439 438  
440 439 Indicator.close();
... ... @@ -447,7 +446,6 @@ Vue.prototype.http = function(path, data, callback, ext) {
447 446 }
448 447  
449 448 /* 加载错误处理 结束 */
450   -
451 449 }
452 450 );
453 451 }
... ...
src/pages/goodDetails/goodDetails.less
... ... @@ -29,6 +29,7 @@
29 29 }
30 30 .main-box{
31 31 .title{
  32 + width: 414px;
32 33 font-size: 34px;
33 34 font-weight: 500;
34 35 color: #333333;
... ... @@ -48,6 +49,18 @@
48 49 display: flex;
49 50 align-items: center;
50 51 justify-content: center;
  52 + // 积分 + 现金标示
  53 + .goods_tip{
  54 + padding: 3px 8px;
  55 + background: linear-gradient(90deg, #F9EE7A 0%, #FAD844 100%);
  56 + border-radius: 7px;
  57 + height: 30px;
  58 + font-size: 22px;
  59 + font-weight: 400;
  60 + color: #945A08;
  61 + line-height: 30px;
  62 + margin-right: 10px;
  63 + }
51 64 .price{
52 65 height: 40px;
53 66 font-size: 28px;
... ... @@ -142,8 +155,17 @@
142 155 display:flex;
143 156 justify-content: center;
144 157 align-items: center;
  158 + .desc{
  159 + height: 130px;
  160 + font-size: 30px;
  161 + font-weight: 400;
  162 + color: #333333;
  163 + line-height: 130px;
  164 + margin: 0 30px;
  165 + }
145 166 .btn{
146   - width: 690px;
  167 + flex: 1;
  168 + margin: 20px 30px;
147 169 height: 90px;
148 170 line-height: 90px;
149 171 background: #F5A623;
... ... @@ -155,4 +177,136 @@
155 177 color: #FFFFFF;
156 178 }
157 179 }
  180 + /*底部弹窗**/
  181 + .popup_box{
  182 + overflow-y: initial;
  183 + .popup_main{
  184 + height: 834px;
  185 + background: #FFFFFF;
  186 + padding: 30px 50px 37px 50px;
  187 + .goods_box{
  188 + // display: flex;
  189 + // justify-content: flex-end;
  190 + position: relative;
  191 + padding-bottom: 37px;
  192 + border-bottom: solid 1px #E4E4E4;
  193 + .item_pic_box{
  194 + position: absolute;
  195 + top: -70px;
  196 + left: 0;
  197 + width: 220px;
  198 + height: 220px;
  199 + background: #FFFFFF;
  200 + border-radius: 10px;
  201 + .item_pic{
  202 + display: block;
  203 + width: 190px;
  204 + height: 190px;
  205 + margin: 15px auto;
  206 + }
  207 + }
  208 + .right{
  209 + margin-left:260px;
  210 + .title{
  211 + height: 46px;
  212 + display: flex;
  213 + justify-content: space-between;
  214 + .title_t{
  215 + width: 354px;
  216 + font-size: 30px;
  217 + font-weight: 500;
  218 + color: #333333;
  219 + line-height: 42px;
  220 + display: -webkit-box;
  221 + -webkit-line-clamp: 1;
  222 + /*! autoprefixer: off */
  223 + -webkit-box-orient: vertical;
  224 + /*! autoprefixer: on */
  225 + text-overflow: ellipsis;
  226 + overflow: hidden;
  227 + }
  228 + .close{
  229 + display: block;
  230 + width:46px;
  231 + height:46px;
  232 + }
  233 + }
  234 + .pirce{
  235 + width: 304px;
  236 + height: 50px;
  237 + font-size: 36px;
  238 + font-weight: 500;
  239 + color: #FC1541;
  240 + line-height: 50px;
  241 + text-align: left;
  242 + margin-top:42px;
  243 + }
  244 + }
  245 + }
  246 + .num_box{
  247 + display: flex;
  248 + justify-content: space-between;
  249 + align-items: center;
  250 + padding:70px 0;
  251 + border-bottom: solid 1px #E4E4E4;
  252 + .num_tip{
  253 + width: 128px;
  254 + height: 40px;
  255 + font-size: 28px;
  256 + font-weight: 500;
  257 + color: #707070;
  258 + line-height: 40px;
  259 + }
  260 + .right{
  261 + display: flex;
  262 + .num{
  263 + width: 30px;
  264 + height: 48px;
  265 + font-size: 34px;
  266 + font-weight: 400;
  267 + color: #565656;
  268 + line-height: 48px;
  269 + text-align: center;
  270 + margin: 0 16px;
  271 + }
  272 + img{
  273 + display: block;
  274 + width: 54px;
  275 + height: 54px;
  276 + }
  277 + }
  278 + }
  279 + .line_box{
  280 + display: flex;
  281 + justify-content: space-between;
  282 + align-items: center;
  283 + padding:30px 0;
  284 + border-bottom: solid 1px #E4E4E4;
  285 + height: 40px;
  286 + font-size: 28px;
  287 + line-height: 40px;
  288 + .left{
  289 + font-weight: 500;
  290 + color: #707070;
  291 + }
  292 + .right{
  293 + font-weight: 400;
  294 + color: #FC1541;
  295 + }
  296 + }
  297 + .btn{
  298 + width: 546px;
  299 + height: 86px;
  300 + line-height:86px;
  301 + background: #F5A623;
  302 + border-radius: 100px;
  303 + text-align: center;
  304 + font-size: 34px;
  305 + font-weight: 500;
  306 + color: #fff;
  307 + margin: 275px auto 0 auto;
  308 + letter-spacing: 20px;
  309 + }
  310 + }
  311 + }
158 312 }
159 313 \ No newline at end of file
... ...
src/pages/goodDetails/goodDetails.vue
... ... @@ -41,12 +41,17 @@
41 41 <!-- 标题 -->
42 42 <div v-if="goodsInfo && goodsInfo.title" class="title">
43 43 {{goodsInfo.title}}
44   - </div>
  44 + </div>
45 45 <!-- 积分 -->
46 46 <div class="title-t">
47   - <span v-if="goodsInfo && goodsInfo.prices" class="price">¥{{goodsInfo.prices}}</span>
48   - <span v-if="goodsInfo && goodsInfo.num" class="integral">{{goodsInfo.num}}</span>
49   - <span class="integral-in">积分</span>
  47 + <div class="goods_tip">
  48 + 积分+现金
  49 + </div>
  50 + <div>
  51 + <span v-if="goodsInfo && goodsInfo.prices" class="price">¥{{goodsInfo.prices}}</span>
  52 + <span v-if="goodsInfo && goodsInfo.num" class="integral">{{goodsInfo.num}}</span>
  53 + <span class="integral-in">积分</span>
  54 + </div>
50 55 </div>
51 56 <!-- 商品信息 -->
52 57 <div class="goods-info">
... ... @@ -92,18 +97,65 @@
92 97 <!-- 商品样式 7 列表 -->
93 98 <column-list-box class="column-list-box" v-if="goodsInfo && goodsInfo.list && goodsInfo.list.length" @jump="toDetail"
94 99 :lists="goodsInfo"
95   - com="7">
  100 + com="7"
  101 + goodType="1">
96 102 </column-list-box>
97 103 </div>
98 104 </div>
99   - <!-- 页脚 -->
  105 + <!-- 有积分页脚显示 -->
100 106 <div class="footer">
101 107 <div class="btn" @click="exchange">
102 108 立即兑换
103 109 </div>
104 110 </div>
  111 + <!-- 积分不足页脚显示 -->
  112 + <!-- <div class="footer">
  113 + <div class="desc">还差1000积分</div>
  114 + <div class="btn" @click="jumpClientIntegralList">
  115 + 获取积分
  116 + </div>
  117 + </div> -->
105 118 <!-- 地址信息组件 -->
106   - <app-address-toast ref="itemsInfo" @toUpdate="toLinkPointsMall" v-show="pointsToast_control"></app-address-toast>
  119 + <!-- <app-address-toast ref="itemsInfo" @toUpdate="toLinkPointsMall" v-show="pointsToast_control"></app-address-toast> -->
  120 + <!-- 底部弹出层 -->
  121 + <van-popup class="popup_box" v-model="show" position="bottom">
  122 + <div class="popup_main">
  123 + <!-- 商品信息 -->
  124 + <div class="goods_box">
  125 + <div class="item_pic_box">
  126 + <img class="item_pic" src="static/img/1.png" alt="" />
  127 + </div>
  128 + <div class="right">
  129 + <!-- 标题 -->
  130 + <div class="title">
  131 + <div class="title_t">山东沂蒙 优质大蒜山东</div>
  132 + <img @click="show=false" class="close" src="static/img/close_grey.png" alt="" />
  133 + </div>
  134 + <!-- 价格 -->
  135 + <div class="pirce">
  136 + 500积分+9.9元
  137 + </div>
  138 + </div>
  139 + </div>
  140 + <!--购买数量-->
  141 + <div class="num_box">
  142 + <div class="num_tip">购买数量</div>
  143 + <div class="right">
  144 + <van-stepper theme="round" input-width="40px" input-size="32px" button-size="32px" v-model="stepperValue" min="1" max="8" integer />
  145 + <!-- <img src="static/img/reduce.png" alt="" />
  146 + <div class="num">1</div>
  147 + <img src="static/img/plus.png" alt="" /> -->
  148 + </div>
  149 + </div>
  150 + <!-- 支付方式 -->
  151 + <div class="line_box">
  152 + <div class="left">支付方式</div>
  153 + <div class="right">积分加现金</div>
  154 + </div>
  155 + <!-- 按钮 -->
  156 + <div @click="jumpOrderDes" class="btn">确定</div>
  157 + </div>
  158 + </van-popup>
107 159 </div>
108 160 </template>
109 161  
... ... @@ -122,8 +174,10 @@ export default {
122 174 banner: null,
123 175 goodsInfo: null,
124 176 backs: null, // 后退按钮组
125   - pointsToast_control: false,
126   - isExchange: false // 是否已经兑换
  177 + // pointsToast_control: false,
  178 + isExchange: false, // 是否已经兑换
  179 + show: false, // 是否显示底部支付模块
  180 + stepperValue: 2 // 进步器
127 181 }
128 182 },
129 183 //部件
... ... @@ -145,6 +199,24 @@ export default {
145 199 },
146 200 //方法表示一个具体的操作,主要书写业务逻辑;
147 201 methods: {
  202 + // 显示底部模块
  203 + opintsPopup () {
  204 + this.show = true;
  205 + },
  206 + // 跳转到订单详情
  207 + jumpOrderDes (item) {
  208 + // 判断APP内
  209 + if (this.isCNLive.value) {
  210 + // (判断app内是否有该方法)
  211 + if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.jumpOrderDes) {
  212 + // 跳转到原生的任务列表
  213 + window.webkit.messageHandlers.jumpOrderDes.postMessage({ body: { orderId: item.id, type: 1 } })
  214 + } else if (window.obj && window.obj.jumpOrderDes) {
  215 + // 跳转到原生的任务列表
  216 + window.obj.jumpOrderDes(JSON.stringify({ orderId: item.id, type: 1 }));
  217 + }
  218 + }
  219 + },
148 220 // 跳转网家家购买音频协议
149 221 toLink () {
150 222 if (this.isCNLive.value) {
... ... @@ -163,16 +235,28 @@ export default {
163 235 this.$parent.callApp();
164 236 }
165 237 },
166   - toLinkPointsMall () {
167   - // 调用back返回上一页
168   - // this.back();
169   - // this.$router.push({
170   - // path: '/pointsMall',
171   - // query: {
172   - // uid: this.getStore("uid")
173   - // }
174   - // })
175   - },
  238 + // toLinkPointsMall () {
  239 + // // 显示查看地址弹框
  240 + // let options = {
  241 + // message: "兑换成功",
  242 + // messageAlign: "center",
  243 + // confirmButtonText: "我知道了",
  244 + // confirmButtonCallback: ""
  245 + // // confirmButtonCallback: this.addAddressCallback,
  246 + // // params: { shopType: datas.shop_type, id: datas.id }
  247 + // };
  248 + // this.$set(this.$parent, "showOptions", options);
  249 + // // 显示通用浮层
  250 + // this.$parent.$refs.showModal.showLayer();
  251 + // // 调用back返回上一页
  252 + // // this.back();
  253 + // // this.$router.push({
  254 + // // path: '/pointsMall',
  255 + // // query: {
  256 + // // uid: this.getStore("uid")
  257 + // // }
  258 + // // })
  259 + // },
176 260 /**
177 261 * 后退
178 262 */
... ... @@ -217,8 +301,8 @@ export default {
217 301 // 兑换
218 302 exchange () {
219 303 if (this.isCNLive.value) {
220   - // 校验登录
221   - if (this.$parent.checkLogin()){
  304 + // 校验登录
  305 + if (this.$parent.checkLogin()) {
222 306 // 提示用积分兑换兑换
223 307 let options = {
224 308 title: "",
... ... @@ -239,10 +323,19 @@ export default {
239 323 },
240 324 // 确定兑换回调
241 325 addIntegralOrderconfirm () {
242   - // isExchange为false才可兑换防止连续点击
243   - if (!this.isExchange) {
244   - // 兑换
245   - this.addIntegralOrder();
  326 + /**
  327 + * 判断shop_type是否等于1等于1为实物弹出底部商品数量选择,其他商品直接走兑换接口
  328 + */
  329 + if (this.goodsInfo.shop_type == 1) {
  330 + // 实物弹出底部数量填写弹窗
  331 + this.opintsPopup();
  332 + // this.addAddressCallback()
  333 + } else {
  334 + // isExchange为false才可兑换防止连续点击
  335 + if (!this.isExchange) {
  336 + // 兑换
  337 + this.addIntegralOrder();
  338 + }
246 339 }
247 340 },
248 341 /**
... ... @@ -255,7 +348,7 @@ export default {
255 348 }
256 349 },
257 350 /**
258   - * 积分商品详情页页面接口
  351 + * 积分兑换接口
259 352 */
260 353 addIntegralOrder () {
261 354 // 加载中提示
... ... @@ -271,7 +364,7 @@ export default {
271 364 },
272 365  
273 366 /**
274   - * 积分商品详情页页面接口回调
  367 + * 积分兑换接口回调
275 368 * @param {Object} res [服务器返回数据]
276 369 * @param {Object} ext [扩展参数]
277 370 */
... ... @@ -293,9 +386,7 @@ export default {
293 386 }, 1500);
294 387 // 提示语判断
295 388 let tipMessage;
296   - if (datas.shop_type == 1) {
297   - tipMessage = "兑换成功"
298   - } else if (datas.shop_type == 2) {
  389 + if (datas.shop_type == 2) {
299 390 tipMessage = "红包已存入您的账户,可前往“我的”—“我的卡券查看”"
300 391 } else if (datas.shop_type == 3) {
301 392 tipMessage = "付费音频已存入您的账户,可前往“我的”—“我的付费内容”—“已购内容收听”"
... ... @@ -305,8 +396,9 @@ export default {
305 396 message: tipMessage,
306 397 messageAlign: "center",
307 398 confirmButtonText: "我知道了",
308   - confirmButtonCallback: this.addAddressCallback,
309   - params: { shopType: datas.shop_type, id: datas.id }
  399 + confirmButtonCallback: ""
  400 + // confirmButtonCallback: this.addAddressCallback,
  401 + // params: { shopType: datas.shop_type, id: datas.id }
310 402 };
311 403 this.$set(this.$parent, "showOptions", options);
312 404 // 显示通用浮层
... ... @@ -332,14 +424,11 @@ export default {
332 424 }
333 425 },
334 426 // 填写地址
335   - addAddressCallback (params) {
336   - // 如果是实物弹起填写地址弹窗
337   - if (params.shopType == 1) {
338   - this.pointsToast_control = true;
339   - // 礼品兑换弹框派发
340   - this.$refs.itemsInfo.getItemInfo(this.goodsInfo, params.id)
341   - }
342   - },
  427 + // addAddressCallback () {
  428 + // this.pointsToast_control = true;
  429 + // // 礼品兑换弹框派发
  430 + // this.$refs.itemsInfo.getItemInfo(this.goodsInfo, params.id)
  431 + // },
343 432 /**
344 433 * 跳转赚取积分页面
345 434 * @param {Object} item [数据对象]
... ... @@ -461,9 +550,14 @@ export default {
461 550 },
462 551 mounted () {
463 552 var that = this;
  553 + // 原生选中地址回调
464 554 window["appSelectAddressCallback"] = function (result) {
465 555 that.appSelectAddressCallback(result);
466 556 };
  557 + // 原生支付完成回调隐藏底部弹窗
  558 + // window["appPaymentCallback"] = function (result) {
  559 + // that.show = false;
  560 + // };
467 561 // 如果是App外,设置唤起App和微信内分享参数
468 562 // if (!this.isCNLive.value) {
469 563 // // 设置积分首页唤起app参数
... ... @@ -509,5 +603,20 @@ export default {
509 603 display: block;
510 604 width: 100%;
511 605 }
  606 +/* 更改有赞的样式 */
  607 +.van-stepper__input {
  608 + font-size: 34px;
  609 + color: #565656;
  610 +}
  611 +.van-stepper__minus,
  612 +.van-stepper__plus {
  613 + color: #fc1541;
  614 + background-color: #fff;
  615 + border: 1px solid #fc1541;
  616 + /* width: 54px;
  617 + height: 54px;
  618 + background: url('../../../static/img/reduce.png') no-repeat center top;
  619 + background-size: 100%; */
  620 +}
512 621 </style>
513 622  
... ...
static/img/close_grey.png 0 → 100755

1.4 KB

static/img/plus.png 0 → 100755

1.58 KB

static/img/reduce.png 0 → 100755

2.06 KB