ran 2022-04-29 12:07:37 +08:00
commit 6e5470e20c
25 changed files with 1072 additions and 469 deletions

13
App.vue
View File

@ -64,9 +64,18 @@ export default {
// #endif
},
onShow() {
onShow() {
// #ifndef H5
this.getClipboard();
// this.getClipboard();
// #endif
// #ifdef APP-PLUS
console.log(storage.getShow());
if (storage.getShow()) {
if(uni.getSystemInfoSync().platform == 'ios'){
this.$u.route("/pages/tabbar/screen/fullScreen");
// uni.reLaunch({ url: "/pages/tabbar/screen/fullScreen" });
}
}
// #endif
},
methods: {

17
androidPrivacy.json Normal file
View File

@ -0,0 +1,17 @@
{
"version" : "1",
"prompt" : "template",
"title" : "服务协议和隐私政策",
"message" : "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://pc-b2b2c.pickmall.cn/article/detail?id=1371992704333905920\">《服务协议》</a>和<a href=\"https://pc-b2b2c.pickmall.cn/article/detail?id=1371779927900160000\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
"buttonAccept" : "同意并接受",
"buttonRefuse" : "暂不同意",
"second" : {
"title" : "确认提示",
"message" : "  进入应用前,你需先同意<a href=\"https://pc-b2b2c.pickmall.cn/article/detail?id=1371992704333905920\">《服务协议》</a>和<a href=\"https://pc-b2b2c.pickmall.cn/article/detail?id=1371779927900160000\">《隐私政策》</a>,否则将退出应用。",
"buttonAccept" : "同意并继续",
"buttonRefuse" : "退出应用"
},
"styles" : {
"borderRadius" : "5px"
}
}

View File

@ -6,11 +6,11 @@ export default {
downloadLink: "https://pickmall.cn/download-page/index.html", //下载地址下载app的地址
shareLink: "https://m-b2b2c.pickmall.cn", //分享地址也就是在h5中默认的复制地址
appid: "wx6f10f29075dc1b0b", //小程序唯一凭证,即 AppID可在「微信公众平台 - 设置 - 开发设置」页中获得。(需要已经成为开发者,且帐号没有异常状态)
appSecret: "6dfbe0c72380dce5d49d65b3c91059b1", //可在 manifest.json 查看
aMapKey: "d649892b3937a5ad20b76dacb2bcb5bd", //在高德中申请web端key
aMapKey: "d649892b3937a5ad20b76dacb2bcb5bd", //在高德中申请Web服务key
scanAuthNavigation:['https://m-b2b2c.pickmall.cn/'], //扫码认证跳转域名配置 会根据此处配置的路由进行跳转
iosAppId:"id1564638363", //AppStore的应用地址id 具体在分享->拷贝链接中查看
logo:"https://lilishop-oss.oss-cn-beijing.aliyuncs.com/4c864e133c2944efad1f7282ac8a3b9e.png", //logo地址
customerServiceMobile:"13161366885", //客服电话
customerServiceEmail:"lili@lili.com" //客服邮箱
customerServiceEmail:"lili@lili.com", //客服邮箱
imWebSrc:"https://im.pickmall.cn" //IM地址
};

View File

@ -1,9 +1,9 @@
{
"name" : "lili商城",
"appid" : "__UNI__C100675",
"appid" : "__UNI__83F0C3D",
"description" : "",
"versionName" : "4.2.4",
"versionCode" : 4000240,
"versionName" : "4.2.5",
"versionCode" : 4000250,
"transformPx" : false,
"app-plus" : {
"compatible" : {

View File

@ -14,7 +14,18 @@
"enablePullDownRefresh":true
}
},
{
"path":"pages/tabbar/screen/fullScreen",
"style": {
"navigationStyle": "custom", //
"app-plus":{
"animationType": "fade-in", // fade-in
"background": "transparent", //
"backgroundColor": "rgba(0,0,0,0)", //
"popGesture": "none" // IOS
}
}
},
{
"path": "pages/tabbar/cart/cartList",
"style": {

View File

@ -226,13 +226,18 @@
const paymentMethod = payment;
// APP/NATIVE/JSAPI/H5
const paymentClient = this.paymentClient;
uni.showLoading({
title: "正在唤起支付...",
mask:true
});
// #ifdef APP-PLUS
//APP pay
//
await API_Trade.initiatePay(paymentMethod, paymentClient, params).then(
(signXml) => {
uni.hideLoading();
//
if (!signXml.data.success) {
uni.showToast({
@ -241,33 +246,39 @@
});
return;
}
let payForm = signXml.data.result;
let paymentType = paymentMethod === "WECHAT" ? "wxpay" : "alipay";
uni.requestPayment({
provider: paymentType,
orderInfo: payForm,
success: (e) => {
console.log(e);
uni.showToast({
icon: "none",
title: "支付成功!",
});
this.callback(paymentMethod)
},
fail: (e) => {
console.log(this);
this.exception = e;
uni.showModal({
content: "支付失败,如果您已支付,请勿反复支付",
showCancel: false,
});
},
});
if(paymentMethod === "WALLET"){
uni.showToast({
icon: "none",
title: "支付成功!",
});
this.callback(paymentMethod)
}
else{
uni.requestPayment({
provider: paymentType,
orderInfo: payForm || '',
success: (e) => {
uni.showToast({
icon: "none",
title: "支付成功!",
});
this.callback(paymentMethod)
},
fail: (e) => {
console.log(this);
this.exception = e;
uni.showModal({
content: "支付失败,如果您已支付,请勿反复支付",
showCancel: false,
});
},
});
}
}
);
//APP pay

View File

@ -68,6 +68,8 @@ export default {
params: {
pageNumber: 1,
pageSize: 10,
order: "desc",
sort: "updateTime",
},
trackList: [], //

View File

@ -11,11 +11,11 @@
<u-row class="portrait-box2">
<u-col span="6" class="portrait-box2-col" :gutter="16">
<text>累计获得</text>
<text class="pcolor">{{ pointData.point || 0 }}</text>
<text class="pcolor">{{ pointData.totalPoint || 0 }}</text>
</u-col>
<u-col span="6" class="portrait-box2-col">
<text>未使用</text>
<text class="pcolor">{{ pointData.variablePoint || 0 }}</text>
<text>剩余积分</text>
<text class="pcolor">{{ pointData.point || 0 }}</text>
</u-col>
</u-row>

View File

@ -17,7 +17,8 @@
@clear="submitSearchOrderList(current)"
@custom="submitSearchOrderList(current)"
v-model="orderSn"
></u-search>
>
</u-search>
</div>
<scroll-view class="body-view" scroll-y @scrolltolower="renderDate">
<view
@ -60,78 +61,77 @@
<view>x{{ sku.num }}</view>
</view>
</view>
<view class="btn-view u-flex u-row-between">
<view class="description">
<!-- 售后申请 -->
<view class="description">
<!-- 售后申请 -->
<view v-if="current === 0 && order.groupAfterSaleStatus">
<view
v-if="
current === 0 &&
order.groupAfterSaleStatus &&
order.groupAfterSaleStatus.includes('ALREADY_APPLIED')
"
class="cannot_apply"
v-if="order.groupAfterSaleStatus.includes('ALREADY_APPLIED')"
class="cannot_apply not_center"
>
<u-icon class="icon" name="info-circle-fill"></u-icon>
该商品已申请售后服务
</view>
</view>
<view v-if="current === 0 && order.groupAfterSaleStatus">
<view
class="cannot_apply"
v-if="
current === 0 &&
order.groupAfterSaleStatus &&
order.groupAfterSaleStatus.includes('EXPIRED')
"
v-if="order.groupAfterSaleStatus.includes('EXPIRED')"
class="cannot_apply not_center"
@click="tipsShow = true"
>
<u-icon class="icon" name="info-circle-fill"></u-icon>
该商品无法申请售后
</view>
<div v-if="current === 1 || current === 2">
<!-- 申请中 -->
<view
class="cannot_apply"
v-if="order.serviceType == 'RETURN_GOODS'"
>
退货处理-{{ order.serviceStatus | serviceStatusList }}</view
>
<view
class="cannot_apply"
v-if="order.serviceType == 'SUPPLY_AGAIN_GOODS'"
>
补发商品-{{ order.serviceStatus | serviceStatusList }}</view
>
<view
class="cannot_apply"
v-if="order.serviceType == 'RETURN_MONEY'"
>
退款-{{ order.serviceStatus | serviceStatusList }}</view
>
<view
class="cannot_apply"
v-if="order.serviceType == 'EXCHANGE_GOODS'"
>
换货-{{ order.serviceStatus | serviceStatusList }}</view
>
<view class="cannot_apply" v-if="order.serviceType == 'CANCEL'">
取消订单-{{ order.serviceStatus | serviceStatusList }}</view
>
</div>
<!-- 申请记录 -->
</view>
<!-- 售后申请 -->
<div
v-if="
current === 0 &&
sku.afterSaleStatus &&
(sku.afterSaleStatus.includes('NOT_APPLIED') ||
sku.afterSaleStatus.includes('PART_AFTER_SALE'))
"
@click="applyService(sku.sn, order, sku)"
class="sale"
>
<view class="default-btn border"> 申请售后 </view>
<div v-if="current === 1 || current === 2">
<!-- 申请中 -->
<view
class="cannot_apply not_center"
v-if="order.serviceType == 'RETURN_GOODS'"
>
退货处理-{{ order.serviceStatus | serviceStatusList }}</view
>
<view
class="cannot_apply not_center"
v-if="order.serviceType == 'SUPPLY_AGAIN_GOODS'"
>
补发商品-{{ order.serviceStatus | serviceStatusList }}</view
>
<view
class="cannot_apply not_center"
v-if="order.serviceType == 'RETURN_MONEY'"
>
退款-{{ order.serviceStatus | serviceStatusList }}</view
>
<view
class="cannot_apply not_center"
v-if="order.serviceType == 'EXCHANGE_GOODS'"
>
换货-{{ order.serviceStatus | serviceStatusList }}</view
>
<view
class="cannot_apply not_center"
v-if="order.serviceType == 'CANCEL'"
>
取消订单-{{ order.serviceStatus | serviceStatusList }}</view
>
</div>
<!-- 申请记录 -->
</view>
<view class="btn-view u-flex u-row-right">
<!-- 售后申请 -->
<div class="sale" v-if="current === 0 && sku.afterSaleStatus">
<div
v-if="
sku.afterSaleStatus.includes('NOT_APPLIED') ||
sku.afterSaleStatus.includes('PART_AFTER_SALE')
"
@click="applyService(sku.sn, order, sku)"
>
<view class="default-btn border"> 申请售后 </view>
</div>
</div>
<view class="after-line">
<!-- 申请中 -->
@ -229,7 +229,7 @@ export default {
pageNumber: 1,
pageSize: 10,
sort: "createTime",
flowPrice: 1,
flowPrice: 0,
order: "desc",
},
@ -404,6 +404,10 @@ export default {
*/
onExpress(order, sku) {
sku.storeName = order.storeName;
let data = {
...order,
...sku,
};
storage.setAfterSaleData(data);
uni.navigateTo({
@ -458,31 +462,38 @@ page,
overflow-y: auto;
height: calc(100vh - 44px - 80rpx - 104rpx);
}
.u-tabs-search {
padding: 20rpx;
background: #fff;
}
.countMoney {
margin-left: 7rpx;
color: $main-color;
font-size: 28rpx;
}
.seller-view {
background-color: #fff;
margin: 20rpx 0rpx;
padding: 0rpx 20rpx;
border-radius: 20rpx;
.seller-info {
height: 70rpx;
.seller-name {
font-size: 28rpx;
display: flex;
flex-direction: row;
.name {
margin-left: 15rpx;
margin-top: -2rpx;
}
}
.order-sn {
font-size: 22rpx;
color: #909399;
@ -526,6 +537,7 @@ page,
color: $main-color;
}
}
.btn-view {
padding: 16rpx 0;
@ -535,10 +547,12 @@ page,
}
}
}
.description {
color: #909399;
size: 25rpx;
}
.cannot_apply {
text-align: center;
font-size: 22rpx;
@ -547,6 +561,10 @@ page,
height: 70rpx;
line-height: 70rpx;
}
.not_center {
text-align: left;
}
.icon {
margin-right: 10rpx;
}
@ -556,6 +574,7 @@ page,
display: flex;
justify-content: flex-end;
}
.default-btn {
background-color: #ffffff;
margin-left: 15rpx;
@ -566,9 +585,11 @@ page,
padding: 0 24rpx;
border-radius: 200px;
}
.close {
color: $light-color;
}
.border {
border: 2rpx solid $light-color;
color: $light-color;

View File

@ -10,7 +10,10 @@
<!-- 省市区 -->
<div class="flex flex-a-c">
<span class="default" v-if="address.isDefault"></span>
<div class="address-list" v-if="address.consigneeAddressPath.length != 0">
<div
class="address-list"
v-if="address.consigneeAddressPath.length != 0"
>
<span
class="address-item"
v-for="(item, index) in address.consigneeAddressPath"
@ -89,100 +92,124 @@
</view>
<!-- 店铺商品信息 -->
<div class="box box2" v-for="(item, index) in orderMessage.cartList" :key="index">
<div @click="navigateToStore(item)">
<div class="store-name">
<span>{{ item.storeName }}</span>
</div>
</div>
<div class="promotionNotice">{{ item.promotionNotice || "" }}</div>
<div class="flex goods-item" v-for="(val, i) in item.skuList" :key="i">
<div
class="goods-image"
@click="
navigateTo(
'/pages/product/goods?id=' +
val.goodsSku.id +
'&goodsId=' +
val.goodsSku.goodsId
)
"
:span="3"
>
<u-image
borderRadius="10rpx"
width="200rpx"
height="200rpx"
:src="val.goodsSku.thumbnail"
alt
/>
</div>
<div
@click="
navigateTo(
'/pages/product/goods?id=' +
val.goodsSku.id +
'&goodsId=' +
val.goodsSku.goodsId
)
"
class="goods-detail"
>
<div class="flex">
<p class="goods-name">{{ val.goodsSku.goodsName }}</p>
<span class="nums">x{{ val.num }}</span>
<div
class="box box2"
v-for="(item, index) in orderMessage.cartList"
:key="index"
>
<div v-if="item.checked">
<div @click="navigateToStore(item)">
<div class="store-name">
<span>{{ item.storeName }}</span>
</div>
<p class="goods-prices">
<span></span>
<span class="goods-price">{{ formatPrice(val.goodsSku.price)[0] }}</span>
<span>.{{ formatPrice(val.goodsSku.price)[1] }}</span>
</p>
</div>
</div>
<u-row>
<u-col :offset="0" :span="4">发票信息</u-col>
<u-col :span="8" class="tipsColor" textAlign="right" @click.native="invoice()">
<span v-if="receiptList"
>{{ receiptList.receiptTitle }} - {{ receiptList.receiptContent }}</span
>
<span v-else></span>
</u-col>
</u-row>
<u-row>
<u-col
v-if="orderMessage.cartTypeEnum != 'VIRTUAL'"
:offset="0"
:span="9"
@click="shippingFlag = true"
>配送
</u-col>
<u-col
v-if="orderMessage.cartTypeEnum != 'VIRTUAL'"
:span="3"
textAlign="right"
@click="shippingFlag = true"
<div class="promotionNotice">{{ item.promotionNotice || "" }}</div>
<div
class="flex goods-item"
v-for="(val, i) in item.checkedSkuList"
:key="i"
>
{{
shippingMethod.find((e) => {
return e.value == shippingText;
}).label
}}
</u-col>
</u-row>
<u-row>
<u-col :offset="0" :span="4" class="tl" style="text-align: left">备注信息</u-col>
<u-col :span="8" textAlign="right">
<u-input
style="text-align: right"
class="uinput"
v-model="remarkVal[index].remark"
/>
</u-col>
</u-row>
<div
class="goods-image"
@click="
navigateTo(
'/pages/product/goods?id=' +
val.goodsSku.id +
'&goodsId=' +
val.goodsSku.goodsId
)
"
:span="3"
>
<u-image
borderRadius="10rpx"
width="200rpx"
height="200rpx"
:src="val.goodsSku.thumbnail"
alt
/>
</div>
<div
@click="
navigateTo(
'/pages/product/goods?id=' +
val.goodsSku.id +
'&goodsId=' +
val.goodsSku.goodsId
)
"
class="goods-detail"
>
<div class="flex">
<p class="goods-name">{{ val.goodsSku.goodsName }}</p>
<span class="nums">x{{ val.num }}</span>
</div>
<p class="goods-prices">
<span></span>
<span class="goods-price">{{
formatPrice(val.goodsSku.price)[0]
}}</span>
<span>.{{ formatPrice(val.goodsSku.price)[1] }}</span>
</p>
</div>
</div>
<u-row>
<u-col :offset="0" :span="4">发票信息</u-col>
<u-col
:span="8"
class="tipsColor"
textAlign="right"
@click.native="invoice()"
>
<span v-if="receiptList"
>{{ receiptList.receiptTitle }} -
{{ receiptList.receiptContent }}</span
>
<span v-else></span>
</u-col>
</u-row>
<u-row>
<u-col
v-if="orderMessage.cartTypeEnum != 'VIRTUAL'"
:offset="0"
:span="9"
@click="shippingFlag = true"
>配送
</u-col>
<u-col
v-if="orderMessage.cartTypeEnum != 'VIRTUAL'"
:span="3"
textAlign="right"
@click="shippingFlag = true"
>
{{
shippingMethod.find((e) => {
return e.value == shippingText;
}).label
}}
</u-col>
</u-row>
<u-row>
<u-col :offset="0" :span="4" class="tl" style="text-align: left"
>备注信息</u-col
>
<u-col :span="8" textAlign="right">
<u-input
style="text-align: right"
class="uinput"
v-model="remarkVal[index].remark"
/>
</u-col>
</u-row>
</div>
</div>
<!-- 发票信息 -->
<invoices :res="receiptList" @callbackInvoice="callbackInvoice" v-if="invoiceFlag" />
<invoices
:res="receiptList"
@callbackInvoice="callbackInvoice"
v-if="invoiceFlag"
/>
<u-select v-model="shippingFlag" :list="shippingMethod"></u-select>
<div class="box box5" v-if="orderMessage.priceDetailDTO">
@ -190,22 +217,30 @@
<u-row>
<u-col :span="9">商品合计</u-col>
<u-col :span="3" textAlign="right">
<span>{{ orderMessage.priceDetailDTO.goodsPrice | unitPrice }}</span>
<span
>{{ orderMessage.priceDetailDTO.goodsPrice | unitPrice }}</span
>
</u-col>
</u-row>
</div>
<div>
<u-row>
<u-col v-if="orderMessage.cartTypeEnum != 'VIRTUAL'" :span="7"></u-col>
<u-col v-if="orderMessage.cartTypeEnum != 'VIRTUAL'" :span="7"
>运费</u-col
>
<u-col
v-if="orderMessage.cartTypeEnum != 'VIRTUAL'"
:span="5"
class="tr tipsColor"
textAlign="right"
>
<span v-if="orderMessage.priceDetailDTO.freightPrice == 0"></span>
<span v-if="orderMessage.priceDetailDTO.freightPrice == 0"
>包邮</span
>
<span v-else
>{{ orderMessage.priceDetailDTO.freightPrice | unitPrice }}</span
>{{
orderMessage.priceDetailDTO.freightPrice | unitPrice
}}</span
>
</u-col>
</u-row>
@ -215,7 +250,10 @@
<u-col
:span="3"
v-if="orderMessage.priceDetailDTO && orderMessage.priceDetailDTO.couponPrice"
v-if="
orderMessage.priceDetailDTO &&
orderMessage.priceDetailDTO.couponPrice
"
textAlign="right"
@click="GET_Discount()"
>
@ -249,7 +287,9 @@
<u-col :span="6">活动优惠</u-col>
<u-col :span="6" class="tr tipsColor" textAlign="right">
<span v-if="orderMessage.priceDetailDTO.discountPrice"
>-{{ orderMessage.priceDetailDTO.discountPrice | unitPrice }}</span
>-{{
orderMessage.priceDetailDTO.discountPrice | unitPrice
}}</span
>
<span v-else>0.00</span>
</u-col>
@ -277,7 +317,9 @@
<span class="price">{{
formatPrice(orderMessage.priceDetailDTO.flowPrice)[0]
}}</span>
<span>.{{ formatPrice(orderMessage.priceDetailDTO.flowPrice)[1] }} </span>
<span
>.{{ formatPrice(orderMessage.priceDetailDTO.flowPrice)[1] }}
</span>
</div>
<span v-else class="number"
><span style="margin-right: 10rpx">{{
@ -448,7 +490,9 @@ export default {
this.navigateTo(
`/pages/mine/address/address?from=cart&way=${
this.routerVal.way
}&parentOrder=${encodeURIComponent(JSON.stringify(this.routerVal.parentOrder))}`
}&parentOrder=${encodeURIComponent(
JSON.stringify(this.routerVal.parentOrder)
)}`
);
},
@ -483,9 +527,11 @@ export default {
this.orderMessage.storeCoupons &&
Object.keys(this.orderMessage.storeCoupons)[0]
) {
let storeMemberCouponsId = Object.keys(this.orderMessage.storeCoupons)[0];
let storeCouponId = this.orderMessage.storeCoupons[storeMemberCouponsId]
.memberCoupon.id;
let storeMemberCouponsId = Object.keys(
this.orderMessage.storeCoupons
)[0];
let storeCouponId =
this.orderMessage.storeCoupons[storeMemberCouponsId].memberCoupon.id;
selectedCoupon.push(storeCouponId);
}
this.orderMessage.cartList.forEach((item) => {
@ -608,9 +654,8 @@ export default {
//
API_Address.getAddressDefault().then((res) => {
if (res.data.result) {
res.data.result.consigneeAddressPath = res.data.result.consigneeAddressPath.split(
","
);
res.data.result.consigneeAddressPath =
res.data.result.consigneeAddressPath.split(",");
this.address = res.data.result;
}
});
@ -621,6 +666,14 @@ export default {
this.notSupportFreight = [];
//
API_Trade.getCheckoutParams(this.routerVal.way).then((res) => {
if (
!res.data.result.checkedSkuList ||
res.data.result.checkedSkuList.length === 0
) {
uni.switchTab({
url: "/pages/tabbar/cart/cartList",
});
}
if (res.data.result.skuList.length <= 0) {
uni.redirectTo({
url: "/pages/order/myOrder?status=0",
@ -645,9 +698,8 @@ export default {
this.getUserAddress();
} else {
this.address = res.data.result.memberAddress;
res.data.result.memberAddress.consigneeAddressPath = res.data.result.memberAddress.consigneeAddressPath.split(
","
);
res.data.result.memberAddress.consigneeAddressPath =
res.data.result.memberAddress.consigneeAddressPath.split(",");
}
if (

View File

@ -139,7 +139,7 @@
shape="circle"
class="cancel-btn"
size="mini"
v-if="order.groupAfterSaleStatus.includes('NOT_APPLIED')"
v-if="order.groupAfterSaleStatus && order.groupAfterSaleStatus.includes('NOT_APPLIED')"
@click="applyService(order)"
>
退款/售后
@ -323,7 +323,7 @@ export default {
} else {
this.initData(0);
}
this.loadData(this.status);
// this.loadData(this.status);
},
onShow() {
if (this.tabCurrentIndex) {
@ -331,7 +331,7 @@ export default {
} else {
this.initData(0);
}
this.loadData(this.status);
// this.loadData(this.status);
},
onLoad(options) {
@ -342,9 +342,9 @@ export default {
let status = Number(options.status);
this.status = status;
this.tabCurrentIndex = status;
if (status == 0) {
this.loadData(status);
}
// if (status == 0) {
// this.loadData(status);
// }
},
watch: {

View File

@ -382,7 +382,6 @@ import popupGoods from "@/components/m-buy/goods"; //购物车商品的模块
import popupAddress from "./product/popup/address"; //
import shares from "@/components/m-share/index"; //
import popups from "@/components/popups/popups"; //
import setup from "./product/popup/popup";
export default {
components: {
@ -527,7 +526,8 @@ export default {
};
},
computed: {
computed: {
// udesk IM
IM() {
return this.IMLink + this.storeDetail.merchantEuid;
},
@ -708,40 +708,49 @@ export default {
},
linkMsgDetail() {
if (this.storeDetail.merchantEuid) {
uni.navigateTo({
url: `/pages/tabbar/home/web-view?src=${this.IM}`,
});
} else {
//
// #ifdef MP-WEIXIN
const params = {
storeName: this.storeDetail.storeName,
goodsName: this.goodsDetail.goodsName,
goodsId: this.goodsDetail.goodsId,
goodsImg: this.goodsDetail.thumbnail,
price: this.goodsDetail.promotionPrice || this.goodsDetail.price,
// originalPrice: this.goodsDetail.original || this.goodsDetail.price,
uuid: storage.getUuid(),
token: storage.getAccessToken(),
sign: this.storeDetail.yzfSign,
mpSign: this.storeDetail.yzfMpSign,
};
uni.navigateTo({
url:
"/pages/product/customerservice/index?params=" +
encodeURIComponent(JSON.stringify(params)),
});
// #endif
// #ifndef MP-WEIXIN
const sign = this.storeDetail.yzfSign;
uni.navigateTo({
url:
"/pages/tabbar/home/web-view?src=https://yzf.qq.com/xv/web/static/chat/index.html?sign=" +
sign,
});
// #endif
}
// lili
uni.navigateTo({
url: `/pages/tabbar/home/web-view?IM=${this.storeDetail.storeId}`,
});
// udesk
// if (this.storeDetail.merchantEuid) {
// uni.navigateTo({
// url: `/pages/tabbar/home/web-view?src=${this.IM}`,
// });
// }
//
// // #ifdef MP-WEIXIN
// const params = {
// storeName: this.storeDetail.storeName,
// goodsName: this.goodsDetail.goodsName,
// goodsId: this.goodsDetail.goodsId,
// goodsImg: this.goodsDetail.thumbnail,
// price: this.goodsDetail.promotionPrice || this.goodsDetail.price,
// // originalPrice: this.goodsDetail.original || this.goodsDetail.price,
// uuid: storage.getUuid(),
// token: storage.getAccessToken(),
// sign: this.storeDetail.yzfSign,
// mpSign: this.storeDetail.yzfMpSign,
// };
// uni.navigateTo({
// url:
// "/pages/product/customerservice/index?params=" +
// encodeURIComponent(JSON.stringify(params)),
// });
// // #endif
// // #ifndef MP-WEIXIN
// const sign = this.storeDetail.yzfSign;
// uni.navigateTo({
// url:
// "/pages/tabbar/home/web-view?src=https://yzf.qq.com/xv/web/static/chat/index.html?sign=" +
// sign,
// });
// // #endif
},
// 1999 --> [1999,00]
formatPrice(val) {

View File

@ -1,184 +1,184 @@
<template>
<view class="wrapper">
<div class="coupon-empty" v-if="!res"></div>
<view class="coupon-List" v-for="(item, index) in couponRes" :key="index">
<view class="coupon-item">
<view class="top">
<div class="price">
<span v-if="item.couponType == 'DISCOUNT'">{{ item.couponDiscount }}</span>
<span v-if="item.couponType == 'PRICE'">{{ item.price | unitPrice }}</span>
</div>
<view class="text">
<div class="coupon-List-title">
<view v-if="item.scopeType">
<span v-if="item.scopeType == 'ALL' && item.id == 'platform'"
>全平台</span
>
<span v-if="item.scopeType == 'PORTION_CATEGORY'"></span>
<view v-else
>{{
item.storeName == "platform" ? "全平台" : item.storeName + "店铺"
}}使用</view
>
</view>
</div>
<div>{{ item.consumeThreshold | unitPrice }}可用</div>
</view>
<view class="lingqu-btn" @click="getCoupon(item, index)">
<div :class="yhqFlag[index] ? 'cur' : ''">
{{ yhqFlag[index] ? "已领取或领完" : "立即领取" }}
</div>
</view>
</view>
<view class="line"></view>
<view class="time">{{ item.startTime }} - {{ item.endTime }}</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
yhqFlag: [], //
couponRes: {},
};
},
props: {
res: {
type: null,
default: "",
},
},
watch: {
res: {
handler() {
if (this.res && this.res.length != 0) {
Object.keys(this.res).forEach((item) => {
let key = item.split("-")[0];
if (key === "COUPON") {
this.couponRes[item] = this?.res[item];
}
});
}
},
immediate: true,
},
},
methods: {
//
getCoupon(item, index) {
this.yhqFlag[index] = true;
this.$emit("getCoupon", item);
},
},
};
</script>
<style lang="scss" scoped>
.coupon-item {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.coupon-List {
display: flex;
flex-direction: column;
height: 230rpx;
background: #e9ebfb;
margin: 30rpx 0;
padding: 10rpx 30rpx;
.line {
height: 1px;
background: #fff;
margin: 0 20rpx;
position: relative;
&:before,
&:after {
content: "";
display: block;
width: 15rpx;
height: 30rpx;
background: #fff;
position: absolute;
top: -15rpx;
}
&:before {
left: -50rpx;
}
&:after {
right: -50rpx;
}
}
.time {
flex: 1;
font-size: 24rpx;
align-items: center;
display: flex;
align-items: center;
}
}
.top {
height: 140rpx;
display: flex;
.price {
width: 33%;
justify-content: center;
color: #6772e5;
font-size: 40rpx;
display: flex;
height: 100%;
align-items: center;
span {
font-size: 50rpx;
}
}
.text {
width: 33%;
display: flex;
flex-direction: column;
justify-content: center;
font-size: 26rpx;
color: 333;
margin-left: 40rpx;
.coupon-List-title {
font-size: 30rpx;
font-weight: bold;
}
}
.lingqu-btn {
display: flex;
align-items: center;
margin-left: 40rpx;
text {
width: 140rpx;
height: 40rpx;
text-align: center;
line-height: 40rpx;
color: #fff;
background: #6772e5;
border-radius: 5px;
font-size: 26rpx;
&.cur {
background: none;
transform: rotate(45deg) translate(10rpx, -46rpx);
}
}
}
}
<template>
<view class="wrapper">
<div class="coupon-empty" v-if="!res"></div>
<view class="coupon-List" v-for="(item, index) in couponRes" :key="index">
<view class="coupon-item">
<view class="top">
<div class="price">
<span v-if="item.couponType == 'DISCOUNT'">{{ item.couponDiscount }}</span>
<span v-if="item.couponType == 'PRICE'">{{ item.price | unitPrice }}</span>
</div>
<view class="text">
<div class="coupon-List-title">
<view v-if="item.scopeType">
<span v-if="item.scopeType == 'ALL' && item.id == 'platform'"></span>
<span v-if="item.scopeType == 'PORTION_CATEGORY'"></span>
<view v-else>{{
item.storeName == "platform" ? "全平台" : item.storeName + "店铺"
}}使用</view>
</view>
</div>
<div>{{ item.consumeThreshold | unitPrice }}可用</div>
</view>
<view class="lingqu-btn" @click="getCoupon(item, index)">
<div :class="yhqFlag[index] ? 'cur' : ''">
{{ yhqFlag[index] ? "已领取或领完" : "立即领取" }}
</div>
</view>
</view>
<view class="line"></view>
<view class="time">{{ item.startTime / 1000 | unixToDate }} - {{ item.endTime / 1000 | unixToDate }}</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
yhqFlag: [], //
couponRes: [],
};
},
props: {
res: {
type: null,
default: "",
},
},
watch: {
res: {
handler() {
if (this.res && this.res.length != 0) {
Object.keys(this.res).forEach((item) => {
let key = item.split("-")[0];
if (key === "COUPON") {
this.couponRes.push(this?.res[item]);
}
});
}
},
immediate: true,
},
},
methods: {
//
getCoupon(item, index) {
this.yhqFlag[index] = true;
this.$emit("getCoupon", item);
},
},
};
</script>
<style lang="scss" scoped>
.coupon-item {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.coupon-List {
display: flex;
flex-direction: column;
height: 230rpx;
background: #e9ebfb;
margin: 30rpx 0;
padding: 10rpx 30rpx;
.line {
height: 1px;
background: #fff;
margin: 0 20rpx;
position: relative;
&:before,
&:after {
content: "";
display: block;
width: 15rpx;
height: 30rpx;
background: #fff;
position: absolute;
top: -15rpx;
}
&:before {
left: -50rpx;
}
&:after {
right: -50rpx;
}
}
.time {
flex: 1;
font-size: 24rpx;
align-items: center;
display: flex;
align-items: center;
}
}
.top {
height: 140rpx;
display: flex;
.price {
width: 33%;
justify-content: center;
color: #6772e5;
font-size: 40rpx;
display: flex;
height: 100%;
align-items: center;
span {
font-size: 50rpx;
}
}
.text {
width: 33%;
display: flex;
flex-direction: column;
justify-content: center;
font-size: 26rpx;
color: 333;
margin-left: 40rpx;
.coupon-List-title {
font-size: 30rpx;
font-weight: bold;
}
}
.lingqu-btn {
display: flex;
align-items: center;
margin-left: 40rpx;
text {
width: 140rpx;
height: 40rpx;
text-align: center;
line-height: 40rpx;
color: #fff;
background: #6772e5;
border-radius: 5px;
font-size: 26rpx;
&.cur {
background: none;
transform: rotate(45deg) translate(10rpx, -46rpx);
}
}
}
}
</style>

View File

@ -15,7 +15,7 @@
<span v-if="res[prom].freeFreightFlag"></span>
</span>
</div>
<div class="res_prom_item" v-if="res[prom].fullRate">
<div class="res_prom_item" v-if="res[prom].fullRate && res[prom].fullRateFlag">
<u-tag text="打折" type="error"></u-tag>
<span class="pro-text"
>{{ res[prom].fullMoney }}立享<span class="price"

View File

@ -159,7 +159,7 @@ export default {
let recommendLives = await getLiveList(this.recommendParams);
if (recommendLives.data.success) {
//
if (recommendLives.data.result.records.length != 0) {
if (recommendLives.data.result.records.length ) {
this.status = "loadmore";
this.recommendLives = recommendLives.data.result.records;
} else {
@ -172,7 +172,7 @@ export default {
* 2.如果没有直播间设置一个默认图片
*/
if (this.recommendLives.length == 0) {
if (!this.recommendLives.length) {
if (this.liveList[0].shareImg) {
this.$set(this, "swiperImg", [
{
@ -199,7 +199,7 @@ export default {
let res = await getLiveList(this.params[this.current]);
//
if (res.data.success) {
if (res.data.result.records.length != 0) {
if (res.data.result.records.length ) {
this.status = "loadmore";
this.liveList.push(...res.data.result.records);
} else {
@ -211,7 +211,7 @@ export default {
? (this.status = "loadmore")
: (this.status = "noMore");
console.log(this.status);
this.liveList.forEach((item) => {
if (item.roomGoodsList) {
item.roomGoodsList = JSON.parse(item.roomGoodsList);

View File

@ -102,6 +102,14 @@ export function modelNavigateTo(item) {
url: `/pages/product/shopList`,
});
break;
case "外部链接":
// #ifdef H5
window.location.href = val.url;
// #endif
// #ifdef APP-PLUS
plus.runtime.openURL(val.url) //不需要拼接\
// #endif
break;
}
break;

View File

@ -1,7 +1,12 @@
<template>
<div class="layout">
<div class="menu-list">
<div class="menu-item" @click="modelNavigateTo(item)" v-for="(item, index) in res.list" :key="index">
<div
class="menu-item"
@click="modelNavigateTo(item)"
v-for="(item, index) in res.list"
:key="index"
>
<div>
<u-image
width="88rpx"
@ -9,7 +14,7 @@
class="menu-img"
:src="item.img"
>
<u-loading slot="loading"></u-loading>
<u-loading slot="loading"></u-loading>
</u-image>
</div>
<div class="menu-title">{{ item.title }}</div>
@ -18,15 +23,15 @@
</div>
</template>
<script>
import {modelNavigateTo} from './tpl'
import { modelNavigateTo } from "./tpl";
export default {
title:"五列菜单",
title: "五列菜单",
props: ["res"],
data () {
data() {
return {
modelNavigateTo,
}
}
};
},
};
</script>
<style lang="scss" scoped>
@ -34,6 +39,7 @@ export default {
.menu-list {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
> .menu-item {

View File

@ -0,0 +1,49 @@
<template>
<div class="layout">
<div class="background">
<u-notice-bar mode="vertical" :bg-color="res.list[0].bk_color" :color="res.list[0].color" :list="list"></u-notice-bar>
</div>
</div>
</template>
<script>
export default {
title: "公告",
props: ["res"],
data() {
return {
list: []
}
},
mounted() {
this.list = this.res.list[0].title.map(i => i.context);
},
};
</script>
<style lang="scss" scoped>
@import "./tpl.scss";
.background {
position: absolute;
z-index: 2;
width: 100%;
height: 84rpx;
text-align: left;
font-size: 20rpx;
background-size: cover;
}
.layout {
text-align: center;
position: relative;
height: 84rpx;
display: flex;
align-items: center;
justify-content: center;
background: #ffffff;
}
.title {
line-height: 84rpx;
font-size: 20px;
font-weight: bold;
}
</style>

View File

@ -0,0 +1,271 @@
<template>
<div class="layout">
<div class="join-list">
<div
v-for="(item, index) in res.list"
:key="index"
class="join-list-item"
@click="goToDetail(item.type)"
>
<div>
<div class="join-title">
<div>{{ item.title }}</div>
<div
class="sub"
v-if="item.type !== 'SECKILL'"
:style="{
backgroundColor: item.bk_color,
color: item.color1,
borderColor: item.bk_color,
}"
>
{{ item.title1 }}
</div>
<div class="sub-seckill" v-else>
<div class="sub-seckill-block flex">
<div class="sub-seckill-block-text">
{{ timeLine[0] ? timeLine[0].timeLine : "x" }}点场
</div>
{{ times.hours == "00" ? "0" : times.hours }}:{{
times.minutes
}}:{{ times.seconds }}
</div>
</div>
</div>
<div class="join-box">
<div
class="join-item"
v-for="(i, _index) in item.data"
:key="_index"
>
<div class="item-img-box">
<img
class="item-img"
:src="i.thumbnail ? i.thumbnail : i.goodsImage"
alt
/>
</div>
<div
class="ellipsis"
:class="{ 'max-width': res.list.length <= 1 }"
>
{{ i.goodsName ? i.goodsName : i.name }}
</div>
<div class="item-price">
<span>{{ i.price ? i.price : i.originalPrice }}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import * as API_Promotions from "@/api/promotions";
import Foundation from "@/utils/Foundation.js";
export default {
props: ["res"],
data() {
return {
timeLine: "", //
resTime: 0, //
time: 0, //
times: {}, //
onlyOne: "", //
};
},
mounted() {
let params = {
pageNumber: 1,
pageSize: 2,
status: "START",
promotionStatus: "START",
};
this._setTimeInterval = setInterval(() => {
if (this.time <= 0) {
clearInterval(this._setTimeInterval);
} else {
this.times = Foundation.countTimeDown(this.time);
this.time--;
}
}, 1000);
this.res.list.forEach((ele) => {
switch (ele.type) {
case "PINTUAN":
API_Promotions.getAssembleList(params).then((response) => {
const data = response.data.result.records;
if (data) {
ele.data = data;
}
});
break;
case "SECKILL":
API_Promotions.getSeckillTimeLine().then((response) => {
if (response.data.success && response.data.result) {
ele.data = response.data.result[0].seckillGoodsList.slice(0, 2);
let timeLine = response.data.result.sort(
(x, y) => Number(x.timeLine) - Number(y.timeLine)
);
this.timeLine = timeLine.slice(0, 5);
this.resTime = parseInt(new Date().getTime() / 1000);
this.onlyOne = response.data.result.length === 1;
this.diffTime = parseInt(new Date().getTime() / 1000) - this.resTime;
this.time =
this.timeLine[0].distanceStartTime ||
(this.timeLine[1] && this.timeLine[1].distanceStartTime) ||
Foundation.theNextDayTime() - this.diffTime;
this.times = Foundation.countTimeDown(this.time);
console.log(this.timeLine);
}
});
break;
case "LIVE":
API_Promotions.getLiveList(params).then((response) => {
if (response.success && response.result.records) {
ele.data = response.result.records[0].commodityList.slice(0, 2);
}
});
break;
case "KANJIA":
API_Promotions.getBargainList(params).then((response) => {
if (response.success && response.result) {
ele.data = response.result.records(0, 2);
}
});
break;
default:
break;
}
});
},
methods: {
//
goToDetail(type) {
switch(type) {
case "SECKILL":
uni.navigateTo({
url: `/pages/promotion/seckill`,
});
break;
case "PINTUAN":
uni.navigateTo({
url: `/pages/promotion/joinGroup`,
});
break;
case "LIVE":
uni.navigateTo({
url: `/pages/promotion/lives`,
});
break;
case "KANJIA":
uni.navigateTo({
url: `/pages/promotion/bargain/list`,
});
break;
};
}
},
};
</script>
<style lang="scss" scoped>
@import "./tpl.scss";
.join-box {
display: flex;
}
.join-list {
width: 100%;
display: flex;
overflow: hidden;
}
.join-list-item {
flex: 1;
}
.ellipsis {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 108rpx; // 1
font-size: 22rpx;
}
.max-width {
width: 316rpx !important;
}
.item-price {
> span {
font-size: 28rpx;
font-weight: 500;
color: #e1212b;
}
}
.join-item {
flex: 1;
}
.item-img {
width: 150rpx;
height: 150rpx;
margin: 0 auto;
display: block;
}
.item-img-box {
position: relative;
}
.item-line-through {
> span {
font-size: 20rpx;
font-weight: 400;
text-decoration: line-through;
color: #999;
}
}
.item-position-tips {
position: absolute;
right: 0;
color: #fff;
font-size: 24rpx;
bottom: 0;
}
.join-title {
display: flex;
align-items: center;
background: #fff;
height: 100rpx;
> div:nth-of-type(1) {
font-size: 30rpx;
font-weight: bold;
}
> div:nth-of-type(2) {
font-size: 20rpx;
line-height: 1.75;
border-radius: 16rpx;
text-align: center;
padding: 0 16rpx;
margin-left: 20rpx;
}
.sub {
background-color: #e1212b;
margin-right: 80rpx;
}
.sub-seckill {
white-space: nowrap;
padding: 0 !important;
}
.sub-seckill-block {
background: rgba($main-color, 0.3);
border-radius: 100px !important;
color: rgba($main-color, 0.7);
overflow: hidden;
padding-right: 8rpx;
}
.sub-seckill-block-text {
background-color: $main-color;
color: #fff;
border-top-right-radius: 100px;
border-bottom-right-radius: 100px;
padding: 0 12rpx !important;
margin-right: 12rpx;
}
}
</style>

View File

@ -1,24 +1,34 @@
<template>
<div class="layout">
<div class="background">
<div class="layout" :style="{textAlign: res.list[0].textAlign}" @click="modelNavigateTo(res.list[0])" >
<div class="background" :style="{ backgroundColor: res.list[0].bk_color}">
<div class="title" :style="{ color: res.list[0].color }">
{{ res.list[0].title }}
</div>
<div style="position: absolute;right: 10px;top:2px;color: #fff;line-height: 42px;font-size: 10px">
<a :style="{ color: res.list[0].color1 }" style="text-decoration: none">{{ res.list[0].title1 }}</a>
</div>
</div>
</div>
</template>
<script>
import { modelNavigateTo } from "./tpl";
export default {
title: "标题栏",
props: ["res"],
data() {
return {
modelNavigateTo,
};
},
mounted() {},
};
</script>
<style lang="scss" scoped>
@import "./tpl.scss";
.background {
background: url("/static/title.png") no-repeat;
// background: url("/static/title.png") no-repeat;
position: absolute;
z-index: 2;
width: 100%;
@ -43,5 +53,6 @@ export default {
line-height: 84rpx;
font-size: 30rpx;
font-weight: bold;
margin-left: 8rpx;
}
</style>

View File

@ -1,10 +1,15 @@
<template>
<div class="wrapper">
<!-- uni 中不能使用 vue component 所以用if判断每个组件 -->
<div v-for="(item,index) in pageData.list" :key="index">
<div v-for="(item, index) in pageData.list" :key="index">
<!-- 搜索栏如果在楼层装修顶部则会自动浮动否则不浮动 -->
<u-navbar class="navbar" v-if="item.type == 'search'" :is-back="false" :is-fixed="index ===1 ? false : true">
<search style="width:100%" :res="item.options" />
<u-navbar
class="navbar"
v-if="item.type == 'search'"
:is-back="false"
:is-fixed="index === 1 ? false : true"
>
<search style="width: 100%" :res="item.options" />
<!-- #ifndef H5 -->
<!-- 扫码功能 不兼容h5 详情文档: https://uniapp.dcloud.io/api/system/barcode?id=scancode -->
<div slot="right" class="navbar-right">
@ -14,10 +19,22 @@
</u-navbar>
<carousel v-if="item.type == 'carousel'" :res="item.options" />
<titleLayout v-if="item.type == 'title'" :res="item.options" />
<leftOneRightTwo v-if="item.type == 'leftOneRightTwo'" :res="item.options" />
<leftTwoRightOne v-if="item.type == 'leftTwoRightOne'" :res="item.options" />
<topOneBottomTwo v-if="item.type == 'topOneBottomTwo'" :res="item.options" />
<topTwoBottomOne v-if="item.type == 'topTwoBottomOne'" :res="item.options" />
<leftOneRightTwo
v-if="item.type == 'leftOneRightTwo'"
:res="item.options"
/>
<leftTwoRightOne
v-if="item.type == 'leftTwoRightOne'"
:res="item.options"
/>
<topOneBottomTwo
v-if="item.type == 'topOneBottomTwo'"
:res="item.options"
/>
<topTwoBottomOne
v-if="item.type == 'topTwoBottomOne'"
:res="item.options"
/>
<flexThree v-if="item.type == 'flexThree'" :res="item.options" />
<flexFive v-if="item.type == 'flexFive'" :res="item.options" />
<flexFour v-if="item.type == 'flexFour'" :res="item.options" />
@ -25,14 +42,13 @@
<textPicture v-if="item.type == 'textPicture'" :res="item.options" />
<menuLayout v-if="item.type == 'menu'" :res="item.options" />
<flexOne v-if="item.type == 'flexOne'" :res="item.options" />
<goods v-if="item.type == 'goods'" :res="item.options" />
<group v-if="item.type == 'group'" :res="item.options" />
<notice v-if="item.type == 'notice'" :res="item.options" />
<promotions v-if="item.type == 'promotionDetail'" :res="item.options" />
<!-- <joinGroup v-if="item.type == 'joinGroup'" :res="item.options" /> -->
<!-- <integral v-if="item.type == 'integral'" :res="item.options" /> -->
<!-- <spike v-if="item.type == 'spike'" :res="item.options" /> -->
</div>
<u-no-network></u-no-network>
</div>
@ -60,10 +76,8 @@ import tpl_goods from "@/pages/tabbar/home/template/tpl_goods"; //商品分类
import { getFloorData } from "@/api/home"; //
import permision from "@/js_sdk/wa-permission/permission.js"; //
import config from "@/config/config";
// TODO
// import tpl_join_group from "@/pages/tabbar/home/template/tpl_join_group";
// import tpl_integral from "@/pages/tabbar/home/template/tpl_integral";
// import tpl_spike from "@/pages/tabbar/home/template/tpl_spike";
import tpl_notice from "@/pages/tabbar/home/template/tpl_notice"; //
import tpl_promotions from "@/pages/tabbar/home/template/tpl_promotions_detail"; //
export default {
data() {
@ -90,9 +104,8 @@ export default {
flexOne: tpl_flex_one,
goods: tpl_goods,
group: tpl_group,
// spike: tpl_spike,
// joinGroup: tpl_join_group,
// integral: tpl_integral,
notice: tpl_notice,
promotions: tpl_promotions,
},
mounted() {
@ -131,7 +144,7 @@ export default {
// WX_CODE
if (res.scanType == "WX_CODE") {
console.log(res)
console.log(res);
uni.navigateTo({
url: `/${res.path}`,
});

View File

@ -5,9 +5,13 @@
</template>
<script>
import configs from "@/config/config";
import storage from "@/utils/storage";
export default {
data() {
return {
configs,
storage,
webviewStyles: {
progress: {
color: this.$lightColor,
@ -17,7 +21,12 @@ export default {
};
},
onLoad(params) {
this.src = decodeURIComponent(params.src);
params.IM
? (this.src = `${configs.imWebSrc}?token=${storage.getAccessToken()}&id=${
params.IM
}`)
: (this.src = decodeURIComponent(params.src));
console.log(this.src);
},
};
</script>
@ -29,4 +38,4 @@ export default {
margin: 0;
}
}
</style>
</style>

View File

@ -0,0 +1,95 @@
<template>
<u-modal v-model="show" cancelText="不同意" confirmText="同意" showCancelButton="btnShow" title="服务协议和隐私政策" @confirm="confirm" @cancel="cancel">
<view class="u-update-content">
请您务必审慎阅读,充分理解服务协议隐私政策各条款
包括但不限于为了更好的向你提供服务我们需要收集你的设备标识,
操作日志等信息用于分析优化应用性能 您可阅读你可阅读
<a @click="gotoLink"></a>
<a @click="gotoB"> </a>
如果您同意请点击下面按钮开始接受我们的服务
</view>
</u-modal>
</template>
<script>
import storage from "@/utils/storage";
export default {
created() {
// created
// if (storage.getShow()) {
// // true
// console.log(this.show); // this.show true
// if (!this.show) {
// // false
// this.show = storage.getShow(); //false
// setTimeout(() => {
// //
// uni.reLaunch({
// //
// url: "/pages/tabbar/home/index",
// });
// }, 500);
// }
// }
},
data() {
return {
show: true, //
btnShow:true,
a: "",
};
},
// onReady() {
// this.show = true;
// },
methods: {
gotoLink() {
uni.navigateTo({
//
url:
"/pages/tabbar/home/web-view?src=https://pc-b2b2c.pickmall.cn/article/detail?id=1371992704333905920",
});
},
gotoB() {
uni.navigateTo({
url:
"/pages/tabbar/home/web-view?src=https://pc-b2b2c.pickmall.cn/article/detail?id=1371779927900160000",
});
},
//
cancel(){
// #ifdef APP-PLUS
const threadClass = plus.ios.importClass("NSThread");
const mainThread = plus.ios.invoke(threadClass, "mainThread");
plus.ios.invoke(mainThread, "exit")
// #endif
},
confirm() {
//
this.show = false; // false
storage.setShow(this.show); //
if (!this.show) {
//
setTimeout(() => {
uni.reLaunch({
//
url: "/pages/tabbar/home/index",
});
}, 500);
}
},
},
};
</script>
<style scoped>
.u-update-content {
font-size: 26rpx;
padding: 30rpx;
}
a {
text-decoration: blue;
color: blue;
}
</style>

View File

@ -854,7 +854,7 @@ function downloadPopup(data, callback, cancelCallback, rebootCallback) {
export default function (isPrompt = false) {
getCurrentNo((version) => {
getServerNo((res) => {
if (res.versionCode.replace(/\./g, "") <= version.versionCode) {
if (res.versionCode.replace(/\./g, "") <= version.version) {
return false;
}

View File

@ -18,7 +18,16 @@ export default {
getHotWords() {
return uni.getStorageSync(`hotWords`);
},
//写入 展示还是不展示
setShow(val) {
uni.setStorageSync("show", val);
},
getShow() {
if (uni.getStorageSync(`show`) === "" || uni.getStorageSync(`show`) === undefined) {
return true;
}
return uni.getStorageSync(`show`);
},
// 获取face id登录
getFaceLogin() {
return uni.getStorageSync(FACE_LOGIN);