!161 2022-2-14 Leung

Merge pull request !161 from Admin/sit-Leung-v3
This commit is contained in:
Admin 2022-02-14 09:56:36 +00:00 committed by Gitee
commit cc9f3b65db
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
14 changed files with 462 additions and 32 deletions

View File

@ -661,8 +661,19 @@ export const getOrderList = (user, status) => {
} }
//支付宝支付二维码 //支付宝支付二维码
export const generateOrderAlipay = (data) => { export const generateOrderAlipay = (orderNo, payType) => {
return fetch('generateOrderAlipay', data, 'POST' ) //Dictionary : 1: PC, 2: Mobile
} let url = 'generateOrderAlipayPC';
if(payType == 2) {
url = 'generateOrderAlipayPhone'
}
var data = {
orderNo:orderNo
}
return fetch(url, data)
//let ret = { "code": 1, "msg": "操作成功!", "success": true, "data": "<form name=\"punchout_form\" method=\"post\" action=\"https://openapi.alipay.com/gateway.do?charset=utf-8&method=alipay.trade.wap.pay&sign=GK1NjnOYPh%2BHTcTtuZg4YunsBNGPHiyc9BwXLx%2FG4G6Z7S8ILYy2E6VmxkGVwZEwZ1G5PA3u2eZxJN3ysyynL9uwG7L4jGQcOB6I2m1763VBi7euNiyMhimv5AYeXP4KiDtmZNDIAdyi3eKWemKTq74AfS0TTubYvKL8aqhJHTQy2GtYdXA89v53ZeFkXjoqpylwCf2j%2FJWD1nV1eO0a0PB5MFqPaZB5Eif69XkT1TNAt1eZiwIn4AO6yqMFJ41gGN5ymmLQUVcUgc5dxlGkMNgY4FUsI6mFYucQ%2BRPPmuH78YJTFU6VS5E%2BZ%2BCL%2BGLxeJs068n%2BLAPqpPqDbhveYg%3D%3D&return_url=https%3A%2F%2Fshop.royalcanin.com.cn&notify_url=https%3A%2F%2Fshop.royalcanin.com.cn%2Froyalcanin%2Froyalcanin%2Froyalcanin%2FupdateOrderAliPay&version=1.0&app_id=2021003108690157&sign_type=RSA2&timestamp=2022-02-14+15%3A08%3A05&alipay_sdk=alipay-sdk-java-dynamicVersionNo&format=json\">\n<input type=\"hidden\" name=\"biz_content\" value=\"{&quot;out_trade_no&quot;:&quot;02110014172230000&quot;,&quot;total_amount&quot;:&quot;138.0&quot;,&quot;subject&quot;:&quot;皇家宠物食品官方商城&quot;}\">\n<input type=\"submit\" value=\"立即支付\" style=\"display:none\" >\n</form>\n<script>document.forms[0].submit();</script>" };
//ret = JSON.parse(ret);
//return ret;
}

View File

@ -55,7 +55,7 @@ export default {
}, },
methods:{ methods:{
...mapMutations(["checkIsLogin"]), ...mapMutations(["checkIsLogin"]),
lianxi(item,index){ lianxi(item,index) {
this.checkIsLogin(); this.checkIsLogin();
let user = this.$store.state.userInfo; let user = this.$store.state.userInfo;
let curMemberId = (user?user.data.id:''); let curMemberId = (user?user.data.id:'');
@ -63,7 +63,8 @@ export default {
//this.customerServerStop = true; //this.customerServerStop = true;
/* Stop until 2022-2-10 */ /* Stop until 2022-2-10 */
var option = { var option = {
customer: {id: '', name: '', email: '', mobile: '', memberId: curMemberId} customer: {id: '', name: '', email: '', mobile: '', memberId: curMemberId, types:'14054'},
type:3
} }
dis_livchat(option); dis_livchat(option);
_hmt.push([ _hmt.push([
@ -91,7 +92,8 @@ export default {
//this.customerServerStop = true; //this.customerServerStop = true;
/* Stop until 2022-2-10*/ /* Stop until 2022-2-10*/
var option = { var option = {
customer: {id: '', name: '', email: '', mobile: '', memberId: curMemberId} customer: {id: '', name: '', email: '', mobile: '', memberId: curMemberId, types:'14053'},
type:3
} }
dis_livchat(option); dis_livchat(option);
_hmt.push([ _hmt.push([

View File

@ -343,6 +343,84 @@ let devData={
], ],
}, },
] ]
},
rxgoods:{
dog:[
{
title: "皇家成犬肠道全价处方粮",
productimage: "/images/rxgoods/dog-1.png",
detail: "帮助维持消化系统健康 满足爱宠能量需求 满足爱宠食欲减退",
ecPrice: "",
productCode:'22',
productList: [
{
productCode: "22",
},
],
},
{
title: "皇家成犬泌尿道全价处方粮",
productimage: "/images/rxgoods/dog-2.png",
detail: "高品质高易消化蛋白质 优化尿液PH值和 尿液离子浓度",
ecPrice: "",
productCode:'19',
productList: [
{
productCode: "19",
},
],
},
{
title: "皇家成犬皮肤全价处方粮",
productimage: "/images/rxgoods/dog-3.png",
detail: "抗氧化复合物协同作用帮助中和自由基 添加必须脂肪酸EPA和DHA 帮助维持肠道菌群支持消化系统健康",
ecPrice: "",
productCode:'27',
productList: [
{
productCode: "27",
},
],
},
],
cat:[
{
title: "皇家成猫泌尿道全价处方粮",
productimage: "/images/rxgoods/cat-1.png",
detail: "控制镁、钙及磷含量 促进尿液达到理想离子浓度及PH值 有助于猫咪适应环境带来的新挑战",
ecPrice: "",
productCode:'5',
productList: [
{
productCode: "5",
},
],
},
{
title: "皇家成猫肠道全价处方粮",
productimage: "/images/rxgoods/cat-2.png",
detail: "高易消化成分配以均衡的电解质 含有EPA、DHA、维生素E支持消化健康 益生元帮助促进肠道菌群平衡",
ecPrice: "",
productCode:'12',
productList: [
{
productCode: "12",
},
],
},
{
title: "皇家成猫皮肤被毛全价处方粮",
productimage: "/images/rxgoods/cat-3.png",
detail: "添加皮肤屏障复合物 添加必须脂肪酸EPA和DHA 帮助减少鸟粪石和草酸钙结石形成",
ecPrice: "",
productCode:'8',
productList: [
{
productCode: "8",
},
],
},
]
} }
}; };
@ -693,6 +771,84 @@ let prdData={
], ],
}, },
] ]
},
rxgoods:{
dog:[
{
title: "皇家成犬肠道全价处方粮",
productimage: "/images/rxgoods/dog-1.png",
detail: "帮助维持消化系统健康 满足爱宠能量需求 满足爱宠食欲减退",
ecPrice: "",
productCode:'22',
productList: [
{
productCode: "22",
},
],
},
{
title: "皇家成犬泌尿道全价处方粮",
productimage: "/images/rxgoods/dog-2.png",
detail: "高品质高易消化蛋白质 优化尿液PH值和 尿液离子浓度",
ecPrice: "",
productCode:'19',
productList: [
{
productCode: "19",
},
],
},
{
title: "皇家成犬皮肤全价处方粮",
productimage: "/images/rxgoods/dog-3.png",
detail: "抗氧化复合物协同作用帮助中和自由基 添加必须脂肪酸EPA和DHA 帮助维持肠道菌群支持消化系统健康",
ecPrice: "",
productCode:'27',
productList: [
{
productCode: "27",
},
],
},
],
cat:[
{
title: "皇家成猫泌尿道全价处方粮",
productimage: "/images/rxgoods/cat-1.png",
detail: "控制镁、钙及磷含量 促进尿液达到理想离子浓度及PH值 有助于猫咪适应环境带来的新挑战",
ecPrice: "",
productCode:'5',
productList: [
{
productCode: "5",
},
],
},
{
title: "皇家成猫肠道全价处方粮",
productimage: "/images/rxgoods/cat-2.png",
detail: "高易消化成分配以均衡的电解质 含有EPA、DHA、维生素E支持消化健康 益生元帮助促进肠道菌群平衡",
ecPrice: "",
productCode:'12',
productList: [
{
productCode: "12",
},
],
},
{
title: "皇家成猫皮肤被毛全价处方粮",
productimage: "/images/rxgoods/cat-3.png",
detail: "添加皮肤屏障复合物 添加必须脂肪酸EPA和DHA 帮助减少鸟粪石和草酸钙结石形成",
ecPrice: "",
productCode:'8',
productList: [
{
productCode: "8",
},
],
},
]
} }
}; };
//Production data end //Production data end

View File

@ -15,7 +15,8 @@ export default {
script: [ script: [
//{ src: '/js/rem.js' }, //{ src: '/js/rem.js' },
// { src: '/js/flexible.js', type: 'text/javascript', charset: 'utf-8'}, // { src: '/js/flexible.js', type: 'text/javascript', charset: 'utf-8'},
{ src: 'https://ocstest.royalcanin.com.cn:8081/livechat/chatapp/customer/branch/RoyalCanin/14053/index.js' }, { src: 'https://ocstest.royalcanin.com.cn:8081/livechat/chatapp/customer/branch/RoyalCanin/14054/index.js' },
//{ src: 'https://ocs.royalcanin.com.cn:8081/livechat/chatapp/customer/branch/RoyalCanin/14053/index.js' },
//{ src: 'https://ocstest.royalcanin.com.cn:8081/livechat/chatapp/customer/branch/RoyalCanin/14054/index.js' }, //{ src: 'https://ocstest.royalcanin.com.cn:8081/livechat/chatapp/customer/branch/RoyalCanin/14054/index.js' },
{ innerHTML: trackingScript, type: 'text/javascript', charset: 'utf-8'}, { innerHTML: trackingScript, type: 'text/javascript', charset: 'utf-8'},
{ innerHTML: assetsUrl, type: 'text/javascript', charset: 'utf-8'}, { innerHTML: assetsUrl, type: 'text/javascript', charset: 'utf-8'},

View File

@ -93,10 +93,7 @@
<p>请返回商品结算页面重新支付</p> <p>请返回商品结算页面重新支付</p>
</div> </div>
</el-dialog> </el-dialog>
<div style="display:none"> <div style="display:none" ref="h5SubmitForm">
<form :action="this.h5PayUrl" method="post" ref="h5SubmitForm">
<input type="hidden" v-model="h5payRedirectUrl">
</form>
</div> </div>
</div> </div>
</template> </template>
@ -114,7 +111,6 @@ export default {
data() { data() {
return { return {
util, util,
h5payRedirectUrl:'',
activeIndex: 0, activeIndex: 0,
paymentTimer:undefined, paymentTimer:undefined,
isSucess: false, isSucess: false,
@ -148,28 +144,44 @@ export default {
}, },
mounted() { mounted() {
let isWx = this.util.isWX();
if(!isWx) {
this.disableAlipay = false;
}
let stype=this.$route.query.stype; let stype=this.$route.query.stype;
this.userPayData = JSON.parse(this.$route.query.userPayData); this.userPayData = JSON.parse(this.$route.query.userPayData);
this.defaultHandlePayment(); this.defaultHandlePayment();
}, },
methods: { methods: {
detectQrcodeDisplay(){
let payType = this.util.pickPaytype();
switch(payType) {
case 1:
this.disableQrcode=false;
break;
case 2:
this.disableQrcode=true;
break;
case 3:
//TODO raise WX jsapi pay
break;
}
},
defaultHandlePayment() { defaultHandlePayment() {
let isMobile = this.util.isMobile(); let isMobile = this.util.isMobile();
let isWx = this.util.isWX(); let isWx = this.util.isWX();
let payType = this.util.pickPaytype(); let payType = this.util.pickPaytype();
if(!this.userPayData.wxPay || this.userPayData.wxPay.length<4) if(!this.userPayData.wxPay || this.userPayData.wxPay.length<4)
throw new Error("订单信息错误,请删除商品后再次购买"); throw new Error("订单信息错误,请删除商品后再次购买");
this.detectQrcodeDisplay();
//Dictionary : 1: scan qrcode, 2:redirect 3: raise local app //Dictionary : 1: scan qrcode, 2:redirect 3: raise local app
switch(payType) { switch(payType) {
case 1: case 1:
this.disableQrcode=false;
this.qrtext=this.userPayData.wxPay; this.qrtext=this.userPayData.wxPay;
this.payOrderWX(); this.updateOrderNotification();
break; break;
case 2: case 2:
this.disableQrcode=true; this.$refs["h5SubmitForm"].innerHTML = '<form action="'+this.userPayData.wxPay+'" method="post"><form>';
break; break;
case 3: case 3:
//TODO raise WX jsapi pay //TODO raise WX jsapi pay
@ -185,13 +197,12 @@ export default {
]) ])
}, },
goPayH5() { goPayH5() {
let isMobile = this.util.isMobile(); if(this.userPayData.wxPay) {
if(this.userPayData.wxPay && isMobile) {
//this.$refs["h5SubmitForm"].action="http://47.96.75.242:10086/royalcanin/royalcanin/redirectUrlWXH5"; //this.$refs["h5SubmitForm"].action="http://47.96.75.242:10086/royalcanin/royalcanin/redirectUrlWXH5";
this.$refs["h5SubmitForm"].action=this.userPayData.wxPay; //this.$refs["h5SubmitForm"].action=this.userPayData.wxPay;
this.$refs["h5SubmitForm"].submit(); this.$refs["h5SubmitForm"].children[0].submit()
//window.location.href=this.userPayData.wxPay;; //window.location.href=this.userPayData.wxPay;
this.disableQrcode=true; //this.disableQrcode=true;
} else { } else {
throw new Error("订单信息错误,请删除商品后再次购买"); throw new Error("订单信息错误,请删除商品后再次购买");
} }
@ -217,21 +228,25 @@ export default {
this.paytype = item.paytype; this.paytype = item.paytype;
if (index == 1) { if (index == 1) {
// //
let res = await generateOrderAlipay(this.userPayData.orderId); let isMobile = this.util.isMobile();
this.qrtext = ''; isMobile = (isMobile?2:1);
let res = await generateOrderAlipay(this.userPayData.orderId, isMobile);
if (res.success) { if (res.success) {
this.disableQrcode = true;
this.qrtext=res.data; let virtualForm = res.data;
virtualForm = virtualForm.substr(0,virtualForm.indexOf("</form>")+7);
this.$refs["h5SubmitForm"].innerHTML = virtualForm;
} }
} else { } else {
this.userPayData = JSON.parse(this.$route.query.userPayData); this.userPayData = JSON.parse(this.$route.query.userPayData);
this.qrtext=this.userPayData.wxPay this.qrtext=this.userPayData.wxPay;
this.$refs["h5SubmitForm"].innerHTML = '<form method="get" action="'+this.userPayData.wxPay+'"></form>';
this.detectQrcodeDisplay();
} }
}, },
// //
async payOrderWX() { async updateOrderNotification() {
let res = await monitorOrderNotify(this.userPayData.orderId); let res = await monitorOrderNotify(this.userPayData.orderId);
if (res.success) { if (res.success) {
this.qrtext = '成功加入群的二维码'; this.qrtext = '成功加入群的二维码';
@ -250,7 +265,7 @@ export default {
} else { } else {
let _self = this; let _self = this;
this.paymentTimer = setTimeout(function(){ this.paymentTimer = setTimeout(function(){
_self.payOrderWX() _self.updateOrderNotification()
},5000); },5000);
} }

View File

@ -0,0 +1,245 @@
<template>
<div class="ts-resentation rc-padding-y--lg">
<Myheader></Myheader>
<div class="rc-top"></div>
<div class="ts-banner-swiper-container rc-margin-bottom--lg--desktop">
<picture>
<source
media="(max-width: 768px)"
srcset="/images/rxgoods/banner-mobile.png"
/>
<source
media="(min-width: 769px)"
srcset="/images/rxgoods/banner.png"
/>
<img src="/images/banner/pc-weixin.png" />
</picture>
</div>
<div>
<h2 class="rc-alpha rc-margin-y--md rc-text--center rc-margin-y--lg--mobile">明星犬粮</h2>
<ul class="ts-product-list rc-margin-bottom--lg rc-md-up">
<li
v-for="(item, index) in dataList.rxgoods.dog"
:key="index"
class="rc-margin-top--md"
>
<div class="rc-click rc-margin-bottom--md" @click="selectproduce(item, index)">
<div class="rc-rccontair">
<img :src="item.productimage" alt="" />
</div>
</div>
<div class="rc-column">
<div class="rc-click" @click="selectproduce(item, index)">
<span>{{ item.title }}</span>
<div class="desc">{{ item.detail }}</div>
</div>
<strong
class="
ts-standard-btn ts-standard-btn--two
rc-margin-y--md
center
"
@click="selectproduce(item, index)"
>立即购买</strong
>
</div>
</li>
</ul>
<div class="rc-md-down ts-product-list">
<swiper :options="swiperAOption">
<swiper-slide
v-for="(item, index) in dataList.rxgoods.dog"
:key="index"
>
<div class="rc-click rc-margin-bottom--md" @click="selectproduce(item, index)">
<div class="rc-rccontair">
<img :src="item.productimage" alt="" />
</div>
</div>
<div class="rc-column">
<div class="rc-click" @click="selectproduce(item, index)">
<h2 class="rc-beta">{{ item.title }}</h2>
<div class="desc">{{ item.detail }}</div>
</div>
<strong
class="
ts-standard-btn ts-standard-btn--two
rc-margin-y--md
center
"
@click="selectproduce(item, index)"
>立即购买</strong
>
</div>
</swiper-slide>
</swiper>
<div id="swiperAPagnation" class="swiper-pagination ts-carousel-indicator center"></div>
<div id="swiperAprev" class="swiper-button-prev ts-swiper-arrow"></div>
<div id="swiperAnext" class="swiper-button-next ts-swiper-arrow"></div>
</div>
</div>
<div class="contair rc-margin-y--lg--mobile">
<nuxt-link :to="`/productdetails/productlist/?stype=1&rxgoods=1`">
<span class="ts-standard-btn center">查看更多</span>
</nuxt-link>
</div>
<!-- Dog end -->
<div class="online bold rc-margin-y--lg"></div>
<!-- Cat start -->
<div>
<h2 class="rc-alpha rc-margin-y--md rc-text--center rc-margin-y--lg--mobile">明星猫粮</h2>
<ul class="ts-product-list rc-margin-bottom--lg rc-md-up">
<li
v-for="(item, index) in dataList.rxgoods.cat"
:key="index"
class="rc-margin-top--md"
>
<div class="rc-click rc-margin-bottom--md" @click="selectproduce(item, index)">
<div class="rc-rccontair">
<img :src="item.productimage" alt="" />
</div>
</div>
<div class="rc-column">
<div class="rc-click" @click="selectproduce(item, index)">
<span>{{ item.title }}</span>
<div class="desc">{{ item.detail }}</div>
</div>
<strong
class="
ts-standard-btn ts-standard-btn--two
rc-margin-y--md
center
"
@click="selectproduce(item, index)"
>立即购买</strong
>
</div>
</li>
</ul>
<div class="rc-md-down ts-product-list">
<swiper :options="swiperBOption">
<swiper-slide
v-for="(item, index) in dataList.rxgoods.cat"
:key="index"
>
<div class="rc-click rc-margin-bottom--md" @click="selectproduce(item, index)">
<div class="rc-rccontair">
<img :src="item.productimage" alt="" />
</div>
</div>
<div class="rc-column">
<div class="rc-click" @click="selectproduce(item, index)">
<h2 class="rc-beta">{{ item.title }}</h2>
<div class="desc">{{ item.detail }}</div>
</div>
<strong
class="
ts-standard-btn ts-standard-btn--two
rc-margin-y--md
center
"
@click="selectproduce(item, index)"
>立即购买</strong
>
</div>
</swiper-slide>
</swiper>
<div id="swiperBPagnation" class="swiper-pagination ts-carousel-indicator center"></div>
<div id="swiperBprev" class="swiper-button-prev ts-swiper-arrow"></div>
<div id="swiperBnext" class="swiper-button-next ts-swiper-arrow"></div>
</div>
</div>
<div class="contair rc-margin-y--lg--mobile">
<nuxt-link :to="`/productdetails/productlist/?stype=0&rxgoods=1`">
<span class="ts-standard-btn center">查看更多</span>
</nuxt-link>
</div>
<!-- Cat end-->
</div>
</template>
<script>
import Myheader from "~/components/header.vue";
import envData from "~/config/env-data.js";
export default {
data() {
return {
envData,
dataList:{rxgoods:{dog:[],cat:[]}},
swiperAOption: {
loop: false,
slidesPerView: "auto",
centeredSlides: true,
speed: 1000,
autoplay: {
delay: 3000,
},
spaceBetween: 0,
pagination: {
el: "#swiperAPagnation",
clickable: true,
},
loopAdditionalSlides: 100,
navigation: {
nextEl: "#swiperAprev",
prevEl: "#swiperAnext",
}
},
swiperBOption: {
loop: false,
slidesPerView: "auto",
centeredSlides: true,
speed: 1000,
autoplay: {
delay: 3000,
},
spaceBetween: 0,
pagination: {
el: "#swiperBPagnation",
clickable: true,
},
loopAdditionalSlides: 100,
navigation: {
nextEl: "#swiperBprev",
prevEl: "#swiperBnext",
}
},
}
},
components: {
Myheader,
},
mounted(){
let env=process.env.NODE_ENV;
this.dataList=this.envData[env];
},
methods:{
selectproduce(item) {
let isRxGoods = false;
let productCode = [];
let mainProductCode = item.productCode;
if (!item.ecPrice && !item.price) {
isRxGoods = 1;
productCode = [item.productCode];
} else {
for (let i of item.productList) {
productCode.push(i.productCode);
}
}
this.$router.push({
path: "/productdetails/producted",
query: {
stype: 1,
isRxGoods: isRxGoods,
mainProductCode: mainProductCode,
productCode: productCode.join(","),
},
});
},
}
};
</script>
<style lang="less" scoped >
@import url("../../assets/css/resentation.less");
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB