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

View File

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

View File

@ -14,7 +14,18 @@
"enablePullDownRefresh":true "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", "path": "pages/tabbar/cart/cartList",
"style": { "style": {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,12 @@
<template> <template>
<div class="layout"> <div class="layout">
<div class="menu-list"> <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> <div>
<u-image <u-image
width="88rpx" width="88rpx"
@ -9,7 +14,7 @@
class="menu-img" class="menu-img"
:src="item.img" :src="item.img"
> >
<u-loading slot="loading"></u-loading> <u-loading slot="loading"></u-loading>
</u-image> </u-image>
</div> </div>
<div class="menu-title">{{ item.title }}</div> <div class="menu-title">{{ item.title }}</div>
@ -18,15 +23,15 @@
</div> </div>
</template> </template>
<script> <script>
import {modelNavigateTo} from './tpl' import { modelNavigateTo } from "./tpl";
export default { export default {
title:"五列菜单", title: "五列菜单",
props: ["res"], props: ["res"],
data () { data() {
return { return {
modelNavigateTo, modelNavigateTo,
} };
} },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -34,6 +39,7 @@ export default {
.menu-list { .menu-list {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between;
flex-wrap: wrap; flex-wrap: wrap;
> .menu-item { > .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> <template>
<div class="layout"> <div class="layout" :style="{textAlign: res.list[0].textAlign}" @click="modelNavigateTo(res.list[0])" >
<div class="background"> <div class="background" :style="{ backgroundColor: res.list[0].bk_color}">
<div class="title" :style="{ color: res.list[0].color }"> <div class="title" :style="{ color: res.list[0].color }">
{{ res.list[0].title }} {{ res.list[0].title }}
</div> </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>
</div> </div>
</template> </template>
<script> <script>
import { modelNavigateTo } from "./tpl";
export default { export default {
title: "标题栏", title: "标题栏",
props: ["res"], props: ["res"],
data() {
return {
modelNavigateTo,
};
},
mounted() {}, mounted() {},
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import "./tpl.scss"; @import "./tpl.scss";
.background { .background {
background: url("/static/title.png") no-repeat; // background: url("/static/title.png") no-repeat;
position: absolute; position: absolute;
z-index: 2; z-index: 2;
width: 100%; width: 100%;
@ -43,5 +53,6 @@ export default {
line-height: 84rpx; line-height: 84rpx;
font-size: 30rpx; font-size: 30rpx;
font-weight: bold; font-weight: bold;
margin-left: 8rpx;
} }
</style> </style>

View File

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

View File

@ -5,9 +5,13 @@
</template> </template>
<script> <script>
import configs from "@/config/config";
import storage from "@/utils/storage";
export default { export default {
data() { data() {
return { return {
configs,
storage,
webviewStyles: { webviewStyles: {
progress: { progress: {
color: this.$lightColor, color: this.$lightColor,
@ -17,7 +21,12 @@ export default {
}; };
}, },
onLoad(params) { 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> </script>
@ -29,4 +38,4 @@ export default {
margin: 0; 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) { export default function (isPrompt = false) {
getCurrentNo((version) => { getCurrentNo((version) => {
getServerNo((res) => { getServerNo((res) => {
if (res.versionCode.replace(/\./g, "") <= version.versionCode) { if (res.versionCode.replace(/\./g, "") <= version.version) {
return false; return false;
} }

View File

@ -18,7 +18,16 @@ export default {
getHotWords() { getHotWords() {
return uni.getStorageSync(`hotWords`); 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登录 // 获取face id登录
getFaceLogin() { getFaceLogin() {
return uni.getStorageSync(FACE_LOGIN); return uni.getStorageSync(FACE_LOGIN);