java-mall-app/pagesub/index/store.vue
2025-10-28 11:10:42 +08:00

1893 lines
61 KiB
Vue
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template name="commonTPL">
<view class="page inddex-store-container">
<uni-nav-bar
:title="navTitle"
:fixed="true"
:border="false"
:left-width="'60rpx'"
:right-width="'40rpx'"
:statusBar="true"
:height="'34px'"
>
<block slot="left">
<view class="left-block" @click="handerSkip">
<image
style="
width: 11px;
height: 18px;
vertical-align: middle;
margin-left: 6px;
"
lazy-load
src="data:image/png;base64,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"
/>
</view>
</block>
</uni-nav-bar>
<view>
<view class="m-banner" v-if="loadStoreInfoComplete && commonTPL.TemplateKey != 'shopdiy'">
<image :src="store_info.BackGroundPath" />
<view class="m-content-box"> </view>
<view :class="['m-logo', {'is-rest': store_info.base.store_biz_state == 2}]">
<image :src="store_info.WapLogoPath" />
<view class="is-rest-bg" v-if="store_info.base.store_biz_state == 2"></view>
<view class="is-rest-tips" v-if="store_info.base.store_biz_state == 2">休息中</view>
</view>
<view class="m-shopinfo">
<view style="display: flex">
<view style="
font-size: 36rpx;
color: #fff;
flex: 1;
height: 40rpx;
line-height: 40rpx;
">{{ store_info.store_name }}</view>
<view class="iconfont icon-qijiandian" v-if="false"></view>
<view class="service-star-box" v-if="store_info.store_star_num > 0">
<view>{{ __("综合体验") }}</view>
<view class="m-startBox" v-for="(itemIndex, ii) in [1, 2, 3, 4, 5]" :key="ii" :class="[
'iconfont',
'icon-start',
itemIndex <= store_info.store_star_num ? 'sel' : '',
]">
</view>
</view>
</view>
<view style="margin-left: 20rpx" v-if="false">{{
store_info.store_grade_name
}}</view>
<text style="
width: 56%;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
" v-if="store_info.store_slogan != ''">{{ sprintf(__("公告:%s"), store_info.store_slogan) }}</text>
</view>
<view class="tag-view">
<uni-tag :text="__('已收藏')" mark="right" type="gray" size="normal" inverted="1" circle="true"
data-type="groupbuy" v-if="store_info.analytics.store_collect"
@click="onUnlikeStore(store_info.store_id)"></uni-tag>
<uni-tag :text="__('收藏')" mark="right" type="lancerdt" size="normal" inverted="1" circle="true"
data-type="groupbuy" v-if="store_info.analytics.store_collect < 1"
@click="onLikeStore(store_info.store_id)"></uni-tag>
<uni-tag :text="sprintf(__(' %d 次'), store_info.analytics.store_favorite_num)
" mark="true" type="lancerdt" size="normal" inverted="1" circle="true" data-type="groupbuy"></uni-tag>
</view>
</view>
<view v-if="loadStoreConfigComplete">
<diy v-if="commonTPL.TemplateKey == 'shopdiy'" :BgConfig="BgConfig" :PageContent="PageContent" :pageId="pageId"
:PageNav="PageNav" :StoreInfo="commonTPL.shopInfo" :loadPageFlag="loadPageFlag"></diy>
<block v-else>
<view class="g-flex m-ba-tab" v-if="commonTPL.TemplateKey != ''">
<view :class="[
'g-flex-item',
commonTPL.tapindex == 1 ? 'm-ba-item-select' : '',
]" @click="clickRecommend" v-if="commonTPL.TemplateKey != 'shop6'">
<view class="m-ba-icon">
<label class="iconfont icon-discount"></label>
</view>
<view>{{ __("推荐") }}</view>
</view>
<view :class="[
'g-flex-item',
commonTPL.tapindex == 2 ? 'm-ba-item-select' : '',
]" @click="clickListAllProduct">
<view class="m-ba-icon">{{ commonTPL.shopInfo.AllProduct }}</view>
<view>{{ __("全部商品") }}</view>
</view>
<view :class="[
'g-flex-item',
commonTPL.tapindex == 3 ? 'm-ba-item-select' : '',
]" @click="clickListNewProduct">
<view class="m-ba-icon">{{ commonTPL.shopInfo.NewProduct }}</view>
<view>{{ __("上新") }}</view>
</view>
<view :class="[
'g-flex-item',
commonTPL.tapindex == 4 ? 'm-ba-item-select' : '',
]" @click="clickGetStoreData">
<view class="m-ba-icon">
<label class="iconfont icon-store"></label>
</view>
<view>{{ __("店铺简介") }}</view>
</view>
<view :class="[
'g-flex-item',
commonTPL.tapindex == 4 ? 'm-ba-item-select hide' : 'hide',
]" @click="showSupplyProducts">
<view class="m-ba-icon">
<label class="iconfont icon-store"></label>
</view>
<view>{{ __("供应商") }}</view>
</view>
</view>
<shoptheme1 v-if="commonTPL.tapindex == 1 && commonTPL.TemplateKey == 'shop1'" :commonTPL="commonTPL" @addCart="addCart">
</shoptheme1>
<shoptheme2 v-if="commonTPL.tapindex == 1 && commonTPL.TemplateKey == 'shop2'" :commonTPL="commonTPL">
</shoptheme2>
<shoptheme3 v-if="commonTPL.tapindex == 1 && commonTPL.TemplateKey == 'shop3'" :commonTPL="commonTPL">
</shoptheme3>
<shoptheme4 v-if="commonTPL.tapindex == 1 && commonTPL.TemplateKey == 'shop4'" :commonTPL="commonTPL">
</shoptheme4>
<shoptheme5 v-if="commonTPL.tapindex == 1 && commonTPL.TemplateKey == 'shop5'" :commonTPL="commonTPL">
</shoptheme5>
<shoptheme6 v-if="commonTPL.tapindex == 1 && commonTPL.TemplateKey == 'shop6'" :commonTPL="commonTPL">
</shoptheme6>
<view v-if="loadStoreCategoryComplete">
<shoptheme6 v-if="commonTPL.tapindex == 2 && commonTPL.TemplateKey == 'shop6'" :commonTPL="commonTPL"
ref="shop6"></shoptheme6>
<view v-else-if="commonTPL.tapindex == 2" class="m-scroll-box">
<scroll-view scroll-y="true" @scrolltolower="scrollbottom" @scroll="scrollView" @scrolltoupper="scrollTop"
class="m-product-all" :class="[
'm-product-all',
'u-pa',
commonTPL.istop ? 'u-patop' : 'u-pabtn',
]">
<view class="m-tab">
<view class="m-navbar">
<view class="m-navbar-item" :class="[
'm-navbar-item',
commonTPL.post.orderby == 'product_sale_num'
? 'm-navbar-item-on'
: '',
]" @click="clickSortBySaleNum">
{{ __("销量") }}
</view>
<view class="m-navbar-item" :class="[
'm-navbar-item',
commonTPL.post.orderby == 'product_add_time'
? 'm-navbar-item-on'
: '',
]" @click="clickNewpd">
{{ __("新品") }}
</view>
<view class="m-navbar-item" :class="[
'm-navbar-item',
commonTPL.post.orderby == 'product_unit_price'
? 'm-navbar-item-on'
: '',
]" @click="clickSortByPrice">
<label class="m-sort">
{{ __("价格") }}
<image :src="'https://media-mall-prod-1259811287.cos.ap-guangzhou.myqcloud.com/static/xcxfile/appicon/images/' +
(commonTPL.sort == 1 ? 'sort-desc' : 'sort-asc') +
'.png'
" />
</label>
</view>
</view>
</view>
<view :class="[
'm-product-list',
commonTPL.viewtype == 1 ? 'fadeIn animated m-listv' : '',
]">
<view v-for="(item, i) in commonTPL.pdlist" :key="i" @click="goShopDetail('/pages/product/detail?is_store_flag=' +
commonTPL.isStoreFlag +
'&pid=' +
item.id)" class="m-product-item" style="border-radius: 19rpx">
<view class="m-product-img">
<image :src="item.ProductPic" mode="aspectFill" style="border-radius: 19rpx" />
</view>
<view class="m-product-info">
<view class="m-product-name">
<label>{{ item.SalesName }}</label>
</view>
<view class="m-product-price">
<block v-if="item.ItemSalePrice">
<label>{{ __("¥")
}}{{ number_format(item.ItemSalePrice, 2) }}</label>
</block>
<view @click.stop="addCart(item, $event)">
<uni-icons type="plus-filled" size="30" color="#fe411b"></uni-icons>
</view>
<block v-if="item.product_unit_points">
<label style="margin: 0rpx 10rpx">+</label><label style="font-size: 32rpx">{{
number_format(item.product_unit_points)
}}</label>
<label>{{ __("积分") }}</label>
</block>
<block v-if="item.product_unit_sp">
<label style="margin: 0rpx 10rpx">+</label><label style="font-size: 32rpx">{{
item.product_unit_sp
}}</label>
<label>{{ __("众宝") }}</label>
</block>
</view>
</view>
</view>
</view>
<!-- <view class="u-top-default">
<view class="u-view" @click="onViewType">
<label :class="[
'iconfont zc',
commonTPL.viewtype == 1
? 'zc-viewlist'
: 'zc-viewgallery',
]"></label>
</view>
<view class="u-back hide" @click="retruntop">
<label class="iconfont icon-fanhuidingbu"></label>
</view>
</view> -->
<view class="m-loading-box">
<block v-if="commonTPL.ispage">
<view class="u-loadmore">
<label class="u-loading"></label>
<text class="u-loadmore-tips">{{ __("正在加载") }}</text>
</view>
</block>
<block v-else>
<view class="u-loadmore u-loadmore-line">
<text class="u-loadmore-tips">{{
__("没有更多数据啦!")
}}</text>
</view>
</block>
</view>
</scroll-view>
</view>
</view>
<view v-if="loadStoreCategoryComplete">
<shoptheme6 v-if="commonTPL.tapindex == 3 && commonTPL.TemplateKey == 'shop6'" :commonTPL="commonTPL"
@ckallPD6="ckallPD6">
</shoptheme6>
<scroll-view v-else-if="commonTPL.tapindex == 3" scroll-y="true" @scrolltolower="scrollbottom"
@scrolltoupper="scrollTop" @scroll="scrollView" :class="[
'm-product-all u-pa',
commonTPL.istop ? 'u-patop' : 'u-pabtn',
]">
<view :class="[
'm-product-list',
'no-tap',
commonTPL.viewtype == 1 ? 'fadeIn animated m-listv' : '',
]">
<block v-for="(item, i) in commonTPL.pdlist" :key="i">
<view @click="goShopDetail('/pages/product/detail?is_store_flag=' +
commonTPL.isStoreFlag +
'&pid=' +
item.id)" class="m-product-item" style="border-radius: 19rpx">
<view class="m-product-img">
<image :src="item.ProductPic" mode="aspectFill" style="border-radius: 19rpx" />
</view>
<view class="m-product-info">
<view class="m-product-name">
<label>{{ item.SalesName }}</label>
</view>
<view class="m-product-price">
<block v-if="item.ItemSalePrice">
<label>{{ __("¥") }}{{ number_format(item.ItemSalePrice, 2) }}</label>
</block>
<block v-if="item.product_unit_points">
<label style="margin: 0rpx 10rpx">+</label><label style="font-size: 32rpx">{{
number_format(item.product_unit_points)
}}</label>
<label>{{ __("积分") }}</label>
</block>
<block v-if="item.product_unit_sp">
<label style="margin: 0rpx 10rpx">+</label><label style="font-size: 32rpx">{{
item.product_unit_sp
}}</label>
<label>{{ __("众宝") }}</label>
</block>
</view>
</view>
</view>
</block>
</view>
<!-- <view class="u-top-default">
<view class="u-view" @click="onViewType" style="line-height: 96rpx">
<label :class="[
'iconfont zc',
commonTPL.viewtype == 1
? 'zc-viewlist'
: 'zc-viewgallery',
]"></label>
</view>
<view class="u-back hide" @click="retruntop">
<label class="iconfont icon-fanhuidingbu"></label>
</view>
</view> -->
<view class="m-loading-box">
<block v-if="commonTPL.ispage">
<view class="u-loadmore">
<label class="u-loading"></label>
<text class="u-loadmore-tips">{{ __("正在加载") }}</text>
</view>
</block>
<block v-else>
<view class="u-loadmore u-loadmore-line">
<text class="u-loadmore-tips">{{
__("没有更多数据啦!")
}}</text>
</view>
</block>
</view>
</scroll-view>
</view>
<view v-if="commonTPL.tapindex == 4" class="m-ShopProfile">
<view class="m-cells" style="">
<view class="shop-address-content">
<view class="shop-address-left-content" @click.stop="gotomap"
:data-lat="commonTPL.shopInfo.store_latitude" :data-address="commonTPL.shopInfo.LegalAdress"
:data-name="commonTPL.shopInfo.store_name" :data-lng="commonTPL.shopInfo.store_longitude">
<label class="zc zc-shouhuodizhi address-icon"></label>
<view class="address-info">
<view class="address-item">
<text style="font-weight: 700">{{
commonTPL.shopInfo.LegalAdress
}}</text>
<text v-if="distance" @click.stop="gotomap" :data-lat="commonTPL.shopInfo.store_latitude"
:data-address="commonTPL.shopInfo.LegalAdress" :data-name="commonTPL.shopInfo.store_name"
:data-lng="commonTPL.shopInfo.store_longitude" style="color: #999; font-size: 20rpx">{{
sprintf(__("距您 %s"), distance) }}</text>
</view>
</view>
</view>
<span>
<image
src="https://media-mall-prod-1259811287.cos.ap-guangzhou.myqcloud.com/static/xcxfile/appicon/images/phone_sp.png"
style="width: 4rpx; height: 70rpx; border-radius: 24%" />
</span>
<view class="shop-address-right-content" @click="callPhone(commonTPL.shopInfo.LegalNumber)">
<view class="shop-address-right-item">
<image
src="https://media-mall-prod-1259811287.cos.ap-guangzhou.myqcloud.com/static/xcxfile/appicon/images/phone.png"
class="phone-img" />
<text style="font-size: 12px">{{ __("联系商家") }}</text>
</view>
</view>
</view>
<view class="m-cell">
<view class="m-cell-bd">
<wxParse :content="commonTPL.shopInfo.VendorInfo || ' '" :imageProp="{ padding: 0 }" />
</view>
</view>
<view class="m-cell" v-if="false" style="margin: 0 20rpx">
<view class="m-cell-bd">
<swiper indicator-dots="true" autoplay="true" interval="3000" duration="300">
<swiper-item v-for="(item, ii) in commonTPL.shopInfo.info.store_slide" :key="ii" v-if="item.check">
<image lazy-load class="slide-image" mode="aspectFill" :src="item.img" :data-src="item.img"
@click="previewProductImg" />
</swiper-item>
</swiper>
</view>
</view>
</view>
</view>
<view v-if="commonTPL.tapindex == 5">
<block v-if="comment_row.length > 0">
<view class="uni-padding-wrap">
<view class="uni-comment">
<view v-for="(comment, cc) in comment_row" :key="cc" class="uni-comment-list"
style="border-bottom: 1px solid #eee">
<view class="uni-comment-face">
<image :src="comment.user_avatar" mode="widthFix"></image>
</view>
<view class="uni-comment-body">
<view class="uni-comment-top">
<text>{{ comment.user_name }}</text>
</view>
<view class="uni-comment-date">
<text>{{ comment.comment_time }}</text>
</view>
<view class="uni-comment-content">{{
comment.comment_content
}}</view>
<view v-if="comment.comment_image[0]" class="m-cell-bd"
style="padding: 0; margin: 0; line-height: 1">
<view class="uni-uploader-body">
<view class="uni-uploader__files">
<block v-for="(image, ii) in comment.comment_image" :key="ii">
<view class="uni-uploader__file">
<image class="uni-uploader__img" :src="comment.comment_image[ii]"></image>
</view>
</block>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<navigator :url="'/pages/index/addcomment?is_store=' + options.store_id" class="m-nullpage"
style="height: 286rpx; margin-top: 0%">
<view class="m-nullpage-middle">
<label class="iconfont icon-xiecomment"></label>
<view class="m-null-tip">
<text>{{ __("我也说两句~") }}</text>
<text>{{ __("去评论~") }}</text>
</view>
</view>
</navigator>
</block>
<block v-else>
<navigator :url="'/pages/index/addcomment?is_store=' + options.store_id" class="m-nullpage">
<view class="m-nullpage-middle">
<label class="iconfont icon-xiecomment"></label>
<view class="m-null-tip">
<text>{{ __("暂时没有评论哦~") }}</text>
<text>{{ __("去评论~") }}</text>
</view>
</view>
</navigator>
</block>
</view>
</block>
<view class="m-scroll-box" v-if="loadStoreConfigComplete && commonTPL.TemplateKey == 'shopdiy'">
<view class="m-tab all_shop_tab">
<view class="m-navbar">
<view class="m-navbar-item" :class="[
'm-navbar-item',
commonTPL.post.orderby == 'product_sale_num'
? 'm-navbar-item-on'
: '',
]" @click="clickSortBySaleNum">
{{ __("销量") }}
</view>
<view class="m-navbar-item" :class="[
'm-navbar-item',
commonTPL.post.orderby == 'product_add_time'
? 'm-navbar-item-on'
: '',
]" @click="clickNewpd">
{{ __("新品") }}
</view>
<view class="m-navbar-item" :class="[
'm-navbar-item',
commonTPL.post.orderby == 'product_unit_price'
? 'm-navbar-item-on'
: '',
]" @click="clickSortByPrice">
<label class="m-sort">
{{ __("价格") }}
<image :src="'https://media-mall-prod-1259811287.cos.ap-guangzhou.myqcloud.com/static/xcxfile/appicon/images/' +
(commonTPL.sort == 1 ? 'sort-desc' : 'sort-asc') +
'.png'
" />
</label>
</view>
</view>
</view>
<view :class="[
'm-product-list',
commonTPL.viewtype == 1 ? 'fadeIn animated m-listv' : '',
]">
<view v-for="(item, i) in commonTPL.pdlist" :key="i" @click="goShopDetail('/pages/product/detail?is_store_flag=' +
commonTPL.isStoreFlag +
'&pid=' +
item.id)" class="m-product-item" style="border-radius: 19rpx">
<view class="m-product-img">
<image :src="item.ProductPic" mode="aspectFill" style="border-radius: 19rpx" />
</view>
<view class="m-product-info">
<view class="m-product-name">
<label>{{ item.SalesName }}</label>
</view>
<view class="m-product-price">
<block v-if="item.ItemSalePrice">
<label>{{ __("¥")
}}{{ number_format(item.ItemSalePrice, 2) }}</label>
</block>
<view @click.stop="addCart(item, $event)">
<uni-icons type="plus-filled" size="20" :color="item.product_quantity == 0 ? '#666' : '#fe411b'"></uni-icons>
</view>
<block v-if="item.product_unit_points">
<label style="margin: 0rpx 10rpx">+</label><label style="font-size: 32rpx">{{
number_format(item.product_unit_points)
}}</label>
<label>{{ __("积分") }}</label>
</block>
<block v-if="item.product_unit_sp">
<label style="margin: 0rpx 10rpx">+</label><label style="font-size: 32rpx">{{
item.product_unit_sp
}}</label>
<label>{{ __("众宝") }}</label>
</block>
</view>
</view>
</view>
</view>
<!-- <view class="u-top-default">
<view class="u-view" @click="onViewType">
<label :class="[
'iconfont zc',
commonTPL.viewtype == 1
? 'zc-viewlist'
: 'zc-viewgallery',
]"></label>
</view>
<view class="u-back hide" @click="retruntop">
<label class="iconfont icon-fanhuidingbu"></label>
</view>
</view> -->
<view class="m-loading-box">
<block v-if="commonTPL.ispage">
<view class="u-loadmore">
<label class="u-loading"></label>
<text class="u-loadmore-tips">{{ __("正在加载") }}</text>
</view>
</block>
<block v-else>
<view class="u-loadmore u-loadmore-line">
<text class="u-loadmore-tips">{{
__("没有更多数据啦!")
}}</text>
</view>
</block>
</view>
</view>
<uni-icons
v-if="loadStoreConfigComplete && commonTPL.TemplateKey == 'shopdiy'"
type="arrowup"
size="24"
class="back-to-top"
:class="{ 'show': showBackTop }"
@click="scrollToTop"
></uni-icons>
</view>
</view>
<MyTabbar :current="1" :cartNum="cartNum" :storeId="shopInfo.store_id" :categoryId="shopInfo.category_id"></MyTabbar>
<loginPopup :show="showLoginPopup" @close="closeLoginPopup"></loginPopup>
</view>
</template>
<script>
// 仅仅作为初始化数据结构使用
var thatProm = {
isStoreFlag: 1,
ProductInfo: {},
addCar: false,
count: 0,
windowHeight: 0,
categoryname: "",
click6: true,
cid: 0,
cartlist: {},
isdata: true,
select_cart_ids: [],
tapindex: 2,
viewtype: 1,
shopInfo: {
analytics: {
store_collect: 0,
},
store_slogan: "",
base: {},
info: {
store_slide: {},
},
VendorInfo: " ",
},
pdlist: [],
sort: 2,
ispage: true,
flag: true,
distance: 0,
istop: false,
TemplateKey: "",
smallCategory: [], // 店铺分类列表
loadStoreCategoryComplete: false, // 当前选中的店铺分类信息是否加载完成
currentCategoryId: 0, // 当前选中的店铺分类ID
currentCategoryName: "", // 当前选中的店铺分类名称
AdContent: {},
post: {
store_id: 0,
orderby: 1,
sort: 2,
isnew: false,
curpage: 1,
},
formdate: "",
pageId: 0,
};
import wxParse from "@/components/u-parse/u-parse.vue";
import paymentBox from "../../components/payment-box.vue";
import uniPopup from "../../components/uni-popup/uni-popup.vue";
import shoptheme1 from "../../components/themes/shoptheme1.vue";
import shoptheme2 from "../../components/themes/shoptheme2.vue";
import shoptheme3 from "../../components/themes/shoptheme3.vue";
import shoptheme4 from "../../components/themes/shoptheme4.vue";
import shoptheme5 from "../../components/themes/shoptheme5.vue";
import shoptheme6 from "../../components/themes/shoptheme6.vue";
import diy from "../../components/themes/diy.vue";
import uniTag from "@/components/uni-tag/uni-tag.vue";
import MyTabbar from "./components/tabbar.vue";
import loginPopup from "@/components/loginPopup.vue";
import favorite from "@/helpers/favorite";
import { mapState, mapMutations } from "vuex";
export default {
data: function () {
return {
options: {},
Coupons: [],
isCancelSuccess: true,
isCancel: true,
CouponAmount: 0,
user_is_new: 0,
pageId: "",
loadPageFlag: false,
PageContent: [],
BgConfig: {
BackgroundObj: {
type: 1,
bgColor: "#ffffff",
pathColor: "#f8f8f8",
path: "",
},
},
PageNav: {
window: {
navigationBarBackgroundColor: "#ffffff",
navigationBarTextStyle: "black",
navigationBarTitleText: "",
backgroundColor: "#f8f8f8",
backgroundTextStyle: "dark",
},
},
AdContent: {},
TemplateKey: "",
commonTPL: Object.assign({}, thatProm),
indexArray: [],
splist: [],
splistStr: [],
pid: 0,
index: 0,
shareImg: "",
shareTitle: "",
navTitle:"",
refresh: true,
ispage: true,
flag: true,
w: 0,
comment_row: [],
latitude: 0,
longitude: 0,
distance: 0,
discountNum: 0,
discountNNum: 0,
initThatProm: Object.assign({}, thatProm),
initPageData: null,
store_id: 1001,
store_info: null,
loadStoreInfoComplete: false, // 加载店铺基本信息完成
loadStoreConfigComplete: false, // 加载店铺配置信息完成
loadStoreCategoryComplete: false, // 加载店铺配置信息完成
isRest:true,
showBackTop: false,
scrollThreshold: 600,
showLoginPopup: false,
};
},
computed: mapState([
"Config",
"StateCode",
"notice",
"plantformInfo",
"shopInfo",
"userInfo",
"hasLogin",
"cartNum",
]),
components: {
shoptheme1,
shoptheme2,
shoptheme3,
shoptheme4,
shoptheme5,
shoptheme6,
diy,
uniTag,
wxParse,
MyTabbar,
loginPopup,
},
onBackPress({ from }) {
console.log("=======", from);
if (from == "backbutton") {
uni.switchTab({ url: "/pages/index/index" });
}
},
onLoad: function (options) {
let that = this;
that.$.showModal({
title: "提示",
content: options,
});
this.initStorePageData(options);
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
this.reloadShop6Data();
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
// 离开页面,注销事件
var that = this;
that.setData({
commonTPL: thatProm,
});
this.notice.removeNotification("RefreshProduct", that);
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: async function () {
this.reloadShop6Data();
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
this.scrollbottom()
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
// #ifdef MP-WEIXIN
wx.showShareMenu({
withShareTicket: true,
menus: ["shareAppMessage", "shareTimeline"],
});
// #endif
return {
title: this.shareTitle,
imageUrl: this.shareImg,
path:
"/pagesub/index/store?store_id=" +
this.options.store_id +
"&uid=" +
this.userInfo.user_id,
};
},
/**
* 用户点击右上角分享朋友圈
*/
onShareTimeline: function () {
return {
title: this.shareTitle,
query: {
uid: this.userInfo.user_id,
store_id: this.options.store_id,
},
imageUrl: this.shareImg,
};
},
/**
* 页面滚动触发事件的处理函数
*/
onPageScroll: function (e) {
const scrollTop = e.scrollTop;
this.showBackTop = scrollTop >= this.scrollThreshold;
},
methods: {
...mapMutations([
"logout",
"getPlantformInfo",
"forceUserInfo",
"getStoreInfo",
]),
closeLoginPopup() {
this.showLoginPopup = false;
},
// 返回顶部
scrollToTop() {
uni.pageScrollTo({
scrollTop: 0,
duration: 300
});
},
goShopDetail(url) {
this.$.gopage(url)
},
handerSkip(){
uni.navigateBack(-1)
uni.switchTab({ url: "/pages/index/index" });
console.log("跳转成功")
},
async addCart(item) {
var that = this;
var params = {
item_id: item.item_id,
proName: item.product_name,
cart_quantity: 1,
activity_id: 0,
SKU_Id: item.item_id,
};
if (!this.hasLogin) {
this.showLoginPopup = true;
return;
}
if(item?.product_quantity == 0){
uni.showToast({
icon: 'error',
title: this.$.__("商品库存不足")
});
return false
}
await this.$store.dispatch(`addCart`, {
params: params,
callback: (data, status, msg, code) => {
if (status == 200) {
if (data.item_quantity != 0) {
that.$.alert(that.__("添加购物车成功"), function () { }, 400);
} else {
uni.showToast({
title: "亲~商品没有库存啦!",
icon: "error",
duration: 500,
});
// that.$.alert(that.__("商品没有库存了"), function () {}, 500);
}
if (that.plantformInfo.prodcut_addcart_flag) {
that.$store.dispatch(`getCartList`, function (data) { });
}
}
},
});
},
ckLabel: function (e) { },
reloadShop6Data: function () {
let that = this;
if (this.$refs.shop6) {
this.$refs.shop6.reloadCategoryProduct();
}
that.$.stopPullDownRefresh();
that.$.hideLoading();
},
initStorePageData: function (options) {
var that = this;
that.$.showLoading();
//that.commonTPL 全局有效,状态保留了。 清除上次数据
that.$set(that.commonTPL, "istop", false);
that.$set(that.commonTPL, "pdlist", []);
if(options.scene){
const decodedParam = decodeURIComponent(options.scene);
const [key, value] = decodedParam.split('=');
options.store_id = value;
}
this.setData({
options: options,
distance: options.d || 0,
store_id: options.store_id ||1001 ,
});
var w = that.$.getSystemInfoSync().windowWidth;
that.setData({
w: w,
});
this.notice.addNotification("RefreshProduct", that.RefreshProduct, that);
// 执行获取店铺信息的回调函数
this.getStoreInfo({
callback: async function (store) {
uni.setNavigationBarTitle({
title: store.store_name,
});
let tmp = Object.assign({}, store);
let coord = that.$.bMapTransQQMap(
tmp["store_longitude"],
tmp["store_latitude"]
);
tmp["store_longitude"] = coord.lng;
tmp["store_latitude"] = coord.lat;
let tmpThatProm = that.commonTPL;
tmpThatProm.shopInfo = tmp;
that.setData({
shareImg: store.WapLogoPath,
shareTitle: store.store_name,
navTitle:store.store_name,
store_info: store,
loadStoreInfoComplete: true,
});
try {
that.$set(
that.commonTPL,
"windowHeight",
that.$.getSystemInfoSync().windowHeight - 50
);
} catch (n) {
//console.log(" Do something when catch error", n)
}
//店铺分类数据
await that.getStoreConfig();
await that.getStoreCategory();
setTimeout(function () {
//初始化微信分享
let $title = store.store_name;
let $desc = "";
let $link = that.$.sprintf(
"%s/h5/pagesub/index/store?store_id=%s",
that.Config.SiteUrl,
options.store_id
);
let $img_url = store.WapLogoPath;
//初始化微信分享
that.$.wxShare($title, $desc, $link, $img_url);
}, 100);
that.$.getLocation({
type: "wgs84",
success: function (response) {
that.setData({
latitude: response.latitude,
longitude: response.longitude,
});
console.info("手机定位:");
console.info(JSON.stringify(response));
//计算距离 shopInfo
/**
* 计算两个经纬度的距离(米)
*/
let getDistance = function (lat1, lng1, lat2, lng2) {
var radLat1 = (lat1 * Math.PI) / 180.0;
var radLat2 = (lat2 * Math.PI) / 180.0;
var a = radLat1 - radLat2;
var b = (lng1 * Math.PI) / 180.0 - (lng2 * Math.PI) / 180.0;
var s =
2 *
Math.asin(
Math.sqrt(
Math.pow(Math.sin(a / 2), 2) +
Math.cos(radLat1) *
Math.cos(radLat2) *
Math.pow(Math.sin(b / 2), 2)
)
);
s = s * 6378.137; // EARTH_RADIUS;
s = Math.round(s * 10000) / 10;
return s;
};
let d = getDistance(
that.latitude,
that.longitude,
coord.lat,
coord.lng
);
if (d) {
d = that.$.distanceFormat(d || 0);
}
that.setData({
distance: d || 0,
});
that.getNearbylist();
},
fail: function () {
that.$.confirm("手机定位失败");
that.getNearbylist();
},
});
},
store_id: options.store_id,
});
//存入本地
uni.setStorageSync("store_id", options.store_id);
},
//读取diy内容
getDivModel: function () {
var that = this,
param = {
store_id: this.store_id,
};
that.$.request({
url: this.Config.URL.store.index_diy,
data: param,
loading: false,
success: function (data, status, msg, code) {
that.setData({
loadPageFlag: true,
pageId: data.page_id,
PageContent: that.$.parseJSON(data.page_code),
BgConfig: that.$.parseJSON(data.page_config),
shareImg: data.page_share_image,
shareTitle: data.page_share_title,
});
},
});
},
RefreshProduct: function (e) {
e
? this.setData({
refresh: true,
})
: this.setData({
refresh: false,
});
},
//初始化数据,获取店铺分类
getStoreCategory: function () {
var that = this;
var param = {
store_id: that.store_id,
};
return new Promise((resolve, reject) => {
that.$.request({
url: that.Config.URL.store.product_category,
data: param,
loading: false,
ajaxCache: {
timeout: that.Config.CACHE_EXPIRE,
},
success: function (data, status, msg, code) {
let tmp = that.commonTPL;
that.$set(that.commonTPL, "smallCategory", data.leaf);
that.$set(that.commonTPL, "loadStoreCategoryComplete", true);
that.setData({
loadStoreCategoryComplete: true,
});
if (data.leaf.length > 0) {
that.$set(that.commonTPL, "cid", data.leaf[0].id);
that.$set(that.commonTPL, "currentCategoryId", data.leaf[0].id);
that.$set(
that.commonTPL,
"categoryname",
data.leaf[0].store_product_cat_name
);
that.$set(
that.commonTPL,
"currentCategoryName",
data.leaf[0].store_product_cat_name
);
}
if (1 == that.commonTPL.tapindex) {
} else if (2 == that.commonTPL.tapindex) {
that.listAllProduct();
} else if (3 == that.commonTPL.tapindex) {
that.listNewProduct();
} else if (4 == that.commonTPL.tapindex) {
that.getStoreData();
} else if (5 == that.commonTPL.tapindex) {
}
that.$.stopPullDownRefresh();
that.$.hideLoading();
},
fail: function (err) { },
});
});
//读取店铺商品分类 todo 根据需要读取。
},
// 点击推荐
clickRecommend: function () {
this.$set(this.commonTPL, "tapindex", 1);
},
clickListAllProduct: function () {
this.$set(this.commonTPL, "tapindex", 2);
this.listAllProduct();
},
// 全部商品
listAllProduct: function (e) {
let that = this;
that.$set(that.commonTPL, "pdlist", []);
// 使用了模块shopthemes在模块中加载数据
if (that.commonTPL.TemplateKey === "shop6") {
that.$set(
that.commonTPL,
"post",
Object.assign({}, that.commonTPL.post, {
store_category_ids: that.commonTPL.currentCategoryId,
store_id: this.store_id,
orderby: 1,
sort: 2,
isnew: false,
curpage: 1,
})
);
} else {
that.$set(
that.commonTPL,
"post",
Object.assign({}, that.commonTPL.post, {
store_id: this.store_id,
orderby: 1,
sort: 2,
isnew: false,
curpage: 1,
is_activity: 3,
})
);
that.getProductList();
}
},
clickListNewProduct: function () {
let that = this;
that.$set(that.commonTPL, "tapindex", 3);
this.listNewProduct();
},
// 新品上市
listNewProduct: function () {
let that = this;
that.$set(that.commonTPL, "pdlist", []);
// 使用了模块shopthemes在模块中加载数据
if (that.commonTPL.TemplateKey === "shop6") {
that.$set(
that.commonTPL,
"post",
Object.assign({}, that.commonTPL.post, {
store_category_ids: that.commonTPL.currentCategoryId,
store_id: this.store_id,
sidx: "product_add_time",
sord: "DESC",
orderby: 1,
sort: 2,
isnew: true,
curpage: 1,
store_id: this.store_id,
})
);
} else {
that.$set(
that.commonTPL,
"post",
Object.assign({}, that.commonTPL.post, {
store_id: that.store_id,
sidx: "product_add_time",
sord: "DESC",
orderby: 2,
sort: 2,
isnew: true,
curpage: 1,
is_activity: 1,
})
);
this.getProductList();
}
},
clickGetStoreData: function () {
let that = this;
that.$set(that.commonTPL, "tapindex", 4);
that.getStoreData();
},
// 查看店铺简介
getStoreData: function () { },
// 切换商品显示方式
onViewType: function () {
var that = this;
that.$set(
that.commonTPL,
"viewtype",
that.commonTPL.viewtype === 0 ? 1 : 0
);
},
clickSortBySaleNum: function () {
this.sortBySaleNum();
},
/**
* 销量排序
*/
sortBySaleNum: function () {
var that = this;
that.$set(that.commonTPL, "pdlist", []);
that.$set(
that.commonTPL,
"post",
Object.assign({}, that.commonTPL.post, {
sidx: "product_sale_num",
sord: "DESC",
curpage: 1,
})
);
this.getProductList();
},
clickNewpd: function () {
this.newpd();
},
/**
* 新品排序
*/
newpd: function () {
var that = this;
that.$set(that.commonTPL, "pdlist", []);
that.$set(
that.commonTPL,
"post",
Object.assign({}, that.commonTPL.post, {
sidx: "product_add_time",
sord: "DESC",
curpage: 1,
})
);
this.getProductList();
},
clickSortByPrice: function () {
this.sortByPrice();
},
/**
* 价格排序
*/
sortByPrice: function () {
let that = this;
that.$set(
that.commonTPL,
"post",
Object.assign({}, that.commonTPL.post, {
sidx: "product_unit_price",
sord: that.commonTPL.sort === 1 ? "DESC" : "ASC",
curpage: 1,
})
);
that.$set(that.commonTPL, "sort", that.commonTPL.sort == 1 ? 2 : 1);
that.$set(that.commonTPL, "pdlist", []);
this.getProductList();
},
scrollbottom: function (e) {
let that = this;
if (that.commonTPL.flag) {
that.setData({
flag: false,
}),
clearTimeout(n);
var n = setTimeout(function () {
that.$set(
that.commonTPL,
"post",
Object.assign({}, that.commonTPL.post, {
curpage: that.commonTPL.post.curpage + 1,
})
);
that.getProductList();
}, 500);
}
},
getProductList: function () {
let that = this;
that.$set(that.commonTPL, "flag", false);
let params = Object.assign({}, that.commonTPL.post, {
isnew: that.commonTPL.post.isnew ? 1 : 0,
user_cart_quantity: that.commonTPL.TemplateKey === "shop6" ? 1 : 0,
});
that.$.request({
url: this.Config.URL.store.product,
loading: true,
data: params,
success: function (data, status, msg, code) {
for (var i = 0; i < data.items.length; i++) {
data.items[i]["id"] = data.items[i]["item_id"];
data.items[i]["DefaultProductSkuId"] = data.items[i]["item_id"];
data.items[i]["productName"] = data.items[i]["product_name"];
data.items[i]["SalesName"] = data.items[i]["product_name"];
data.items[i]["ProductPic"] = data.items[i]["product_image"];
data.items[i]["ItemSalePrice"] =
data.items[i]["product_unit_price"];
data.items[i]["SaleNum"] = data.items[i]["product_sale_num"];
data.items[i]["Stock"] = data.items[i]["product_quantity"];
data.items[i]["HasManualSku"] =
data.items[i]["item_color"].length > 1;
data.items[i]["DefaultProductSkuId"] = data.items[i]["item_id"];
//data.items[i]['user_cart_quantity'] = 1;
}
if (data.items.length > 0) {
if (that.commonTPL.post.curpage == 1 && data.items.length < 10) {
that.$set(that.commonTPL, "flag", false);
that.$set(that.commonTPL, "ispage", false);
} else {
that.$set(that.commonTPL, "flag", true);
that.$set(that.commonTPL, "ispage", true);
}
that.$set(
that.commonTPL,
"pdlist",
that.commonTPL.pdlist.concat(data.items)
);
} else {
that.$set(that.commonTPL, "flag", false);
that.$set(that.commonTPL, "ispage", false);
}
},
});
},
scrollView: function (e) {
let that = this;
if (e.detail.deltaY < -305) {
that.$set(that.commonTPL, "distance", e.detail.deltaY);
that.$set(that.commonTPL, "istop", true);
}
},
scrollTop: function () {
let that = this;
that.$set(that.commonTPL, "istop", false);
},
returnTop: function () {
let that = this;
that.$set(that.commonTPL, "distance", 0);
},
showSupplyProducts: function () {
this.$.gopage("/pages/product/list?store_type=2");
},
//店铺首页信息数据读取
getStoreConfig: function () {
var that = this;
var param = {
store_id: this.store_id,
};
return new Promise((resolve, reject) => {
that.$.request({
url: this.Config.URL.store.contents,
data: param,
loading: false,
success: function (data, status, msg, code) {
that.setData({
loadStoreConfigComplete: true,
});
that.$set(
that.commonTPL,
"TemplateKey",
data.store_template > 1000 || data.store_template === "shop7"
? "shopdiy"
: data.store_template
);
if ("shopdiy" == that.commonTPL.TemplateKey) {
} else {
for (
var i = 0;
i < data.contents["F1ProductContents"].length;
i++
) {
data.contents["F1ProductContents"][i]["ProductContentID"] =
data.contents["F1ProductContents"][i]["item_id"];
data.contents["F1ProductContents"][i]["ProductName"] =
data.contents["F1ProductContents"][i]["product_name"];
data.contents["F1ProductContents"][i]["Price"] =
data.contents["F1ProductContents"][i]["product_unit_price"];
data.contents["F1ProductContents"][i]["ImagePath"] =
data.contents["F1ProductContents"][i]["product_image"];
data.contents["F1ProductContents"][i]["TitleType"] =
data.contents["F1TitleType"];
}
for (
var i = 0;
i < data.contents["F2ProductContents"].length;
i++
) {
data.contents["F2ProductContents"][i]["ProductContentID"] =
data.contents["F2ProductContents"][i]["item"];
data.contents["F2ProductContents"][i]["ProductName"] =
data.contents["F2ProductContents"][i]["name"];
data.contents["F2ProductContents"][i]["Price"] =
data.contents["F2ProductContents"][i]["product_unit_price"];
data.contents["F2ProductContents"][i]["ImagePath"] =
data.contents["F2ProductContents"][i]["img"];
data.contents["F2ProductContents"][i]["TitleType"] =
data.contents["F2TitleType"];
data.contents["F2ProductContents"][i]["ProductLinkUrl"] =
data.contents["F2ProductContents"][i]["url"];
}
for (
var i = 0;
i < data.contents["F3ProductContents"].length;
i++
) {
data.contents["F3ProductContents"][i]["ProductContentID"] =
data.contents["F3ProductContents"][i]["item_id"];
data.contents["F3ProductContents"][i]["ProductName"] =
data.contents["F3ProductContents"][i]["product_name"];
data.contents["F3ProductContents"][i]["Price"] =
data.contents["F3ProductContents"][i]["product_unit_price"];
data.contents["F3ProductContents"][i]["ImagePath"] =
data.contents["F3ProductContents"][i]["product_image"];
data.contents["F3ProductContents"][i]["TitleType"] =
data.contents["F3ProductContents"][i]["title"];
data.contents["F3ProductContents"][i]["ProductLinkUrl"] =
data.contents["F3ProductContents"][i]["link_url"];
}
}
that.$set(that.commonTPL, "AdContent", data.contents);
that.setData({
AdContent: data.contents,
TemplateKey: that.commonTPL.TemplateKey,
commonTPL: that.commonTPL,
discountNum: data.discount_num,
discountNNum: data.no_discount_num,
});
if (
that.commonTPL.smallCategory.length > 0 &&
that.commonTPL.TemplateKey == "shop6"
) {
that.$set(that.commonTPL, "tapindex", 2);
}
that.commonTPL.TemplateKey == "shopdiy" && that.getDivModel(); //shopdiy用户自定义UI
resolve("success");
},
complete: function (res, status) { },
});
});
//读取店铺商品分类
},
sao: function () {
let that = this;
that.$.scanCode({
success: function (e) {
var t = e.result.split("=");
t.length > 2 || t.length < 2
? that.$.alert("无法识别")
: t[0] == "productId"
? that.$.isNull(t[1])
? that.$.alert("无法识别")
: that.$.navigateTo("/pages/product/detail?pid=" + t[1])
: t[0] == "eventId"
? that.$.isNull(t[1])
? that.$.alert("无法识别")
: that.$.navigateTo(
"../activitycheckin/activitycheckin?eventId=" + t[1]
)
: that.$.alert("无法识别");
},
fail: function (e) {
that.$.alert("无法识别");
},
});
},
doReceive: function () {
this.cancel(), this.userReceiveCoupon();
},
cancel: function () {
this.setData({
isCancel: false,
});
},
cancelsuccess: function () {
this.setData({
isCancelSuccess: true,
});
},
userReceiveCoupon: function () {
var e = {
CouponIds: "",
user_is_new: this.user_is_new,
},
that = this;
that.$.xsr(that.$.makeUrl(userapi.UserReceiveCoupon, e), function (e) {
e.Code == 0
? that.setData({
isCancelSuccess: false,
Coupons: e.Info,
})
: that.$.alert(e.Msg);
});
},
onLikeStore: function (store_id) {
favorite.onLikeStore(store_id, (flag) => {
this.commonTPL.shopInfo.analytics.store_collect = 1;
this.commonTPL.shopInfo.analytics.store_favorite_num++;
});
},
onUnlikeStore: function (store_id) {
favorite.onUnlikeStore(store_id, (flag) => {
this.commonTPL.shopInfo.analytics.store_collect = 0;
this.commonTPL.shopInfo.analytics.store_favorite_num--;
});
},
previewProductImg: function (e) {
var that = this,
n = [];
for (var r in this.commonTPL.shopInfo.info.store_slide) {
if (this.ProductInfo.productPicList[r].check) {
n.push(this.ProductInfo.productPicList[r].img);
}
}
var i = e.target.dataset.src;
that.$.previewImage({
current: i,
urls: n,
});
},
callPhone: function (e) {
var that = this;
uni.makePhoneCall({ phoneNumber: e + "" });
},
gotomap: function (e) {
var that = this;
that.$.openLocation({
latitude: parseFloat(e.currentTarget.dataset.lat),
longitude: parseFloat(e.currentTarget.dataset.lng),
name: e.currentTarget.dataset.name,
address: e.currentTarget.dataset.address,
scale: 28,
});
},
getNearbylist: function () {
var post = this.post;
var that = this;
var params = {
lat: that.latitude,
lng: that.longitude,
store_id: that.options.store_id,
is_store: 1,
city: that.$.getStorageSync("city"),
};
},
},
};
</script>
<style lang="scss" scoped>
@import "../../styles/_variables";
@import "../../styles/layout.scss";
@import "../../styles/store_themes.scss";
@import "../../styles/store_tpl.scss";
.m-listv{
padding: 0 0 0 14rpx;
}
.u-pabtn {
position: static;
}
.m-product-info {
width: auto;
.m-product-price {
display: flex;
justify-content: space-between;
}
}
.inddex-store-container {
padding-bottom: 64px;
}
.inddex-store-container {
.shop-address-content {
display: flex;
align-items: center;
justify-content: space-between;
margin: 20px 10px 0 10px;
.shop-address-left-content {
display: flex;
align-items: center;
position: relative;
width: 78%;
justify-content: space-around;
.address-icon {
width: 45px;
height: 45px;
text-align: center;
color: red;
}
.address-info {
max-width: 75%;
line-height: 44rpx;
.address-item {
display: flex;
flex-flow: column;
font-size: 12px;
}
}
}
.shop-address-right-content {
width: 20%;
height: 40px;
text-align: center;
.shop-address-right-item {
display: flex;
flex-flow: column;
align-items: center;
line-height: 40px;
.phone-img {
width: 22px;
height: 22px;
}
}
}
}
}
.tag-view {
position: absolute;
bottom: 20rpx;
right: 20rpx;
z-index: 100;
display: inline-flex;
}
.tag-mark-right {
border-top-left-radius: 15px;
border-bottom-left-radius: 15px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.m-shopinfo {
width: 556rpx;
display: flex;
flex-flow: column;
.iconfont {
color: #fff;
margin-left: 0px;
&.icon-start {
top: 0;
margin-left: 4rpx;
}
&.sel {
color: $default-skin-bg;
}
}
.service-star-box {
background-color: gray;
line-height: 32rpx;
height: 32rpx;
border-radius: 20rpx;
font-size: 12px;
color: white;
width: 240rpx;
padding: 0rpx 6rpx;
margin-left: 0rpx;
float: right;
text-align: center;
display: flex;
.m-startBox {
display: inline-block;
line-height: 30rpx;
height: 30rpx;
font-size: 20rpx;
}
.m-startBox label {
font-size: 20rpx;
}
}
}
.u-pa .m-product-list {
padding-top: calc(90rpx) !important;
}
.uni-comment-date {
font-size: 10px;
color: #999999;
}
.t {
width: 90rpx;
height: 90rpx;
/* left: 0px; */
position: absolute;
top: 18rpx;
}
.m-logo{
overflow: hidden;
}
.is-rest{
.is-rest-bg{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 36rpx;
background: #000;
opacity: 0.5;
z-index: 2;
}
.is-rest-tips{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
line-height: 36rpx;
font-size: 24rpx;
color: #fff;
text-align: center;
z-index: 3;
}
}
.uni-uploader__img {
display: block;
width: 182rpx;
height: 182rpx;
}
.uni-uploader__file {
margin: 9rpx;
width: 182rpx;
height: 182rpx;
}
.u-top-default{
bottom: 150px;
}
.all_shop_tab{
position: sticky;
top: -2px;
z-index: 2;
border-bottom: 1rpx solid #eee;
}
.back-to-top {
position: fixed;
top: 80%;
transform: translateY(-75%);
right: 14rpx;
width: 80rpx;
height: 80rpx;
text-align: center;
border-radius: 50%;
background-color: #fff;
color: #fff;
box-shadow: 0 4rpx 10rpx rgba(0, 0, 0, 0.1);
opacity: 0;
transition: opacity 0.3s ease;
z-index: 98;
pointer-events: none;
opacity: 0;
&.show {
opacity: 1;
pointer-events: auto;
}
}
::v-deep .uni-nav-bar-text {
font-size: 20px !important;
font-weight: 500;
}
</style>