144 lines
4.3 KiB
Vue
144 lines
4.3 KiB
Vue
<template>
|
||
<div class="float-nav bg-white flex-col col-center">
|
||
<div class="nav-list">
|
||
<nuxt-link to="/shop_cart" class="item flex-col col-center lighter">
|
||
<el-badge :value="publicData.cart_num" type="primary">
|
||
<span class="iconfont icon-cart-Empty"></span>
|
||
</el-badge>
|
||
<div class="sm">购物车</div>
|
||
</nuxt-link>
|
||
<nuxt-link
|
||
class="item flex-col col-center lighter"
|
||
to="/user/coupons"
|
||
>
|
||
<el-badge :value="publicData.coupon_num" type="primary">
|
||
<span class="iconfont icon-coupons"></span>
|
||
</el-badge>
|
||
<div class="sm">优惠券</div>
|
||
</nuxt-link>
|
||
<nuxt-link
|
||
class="item flex-col col-center lighter"
|
||
to="/user/order"
|
||
>
|
||
<span class="iconfont icon-icon_order"></span>
|
||
<div class="sm">订单</div>
|
||
</nuxt-link>
|
||
<nuxt-link
|
||
class="item flex-col col-center lighter"
|
||
to="/user/collection"
|
||
>
|
||
<span class="iconfont icon-collection"></span>
|
||
<div class="sm">收藏</div>
|
||
</nuxt-link>
|
||
<nuxt-link
|
||
class="item flex-col col-center lighter"
|
||
to="/help_center"
|
||
>
|
||
<span class="iconfont icon-survey"></span>
|
||
<div class="sm">帮助</div>
|
||
</nuxt-link>
|
||
<el-popover placement="left" width="165" trigger="hover">
|
||
<div
|
||
style="text-align: center; margin: 0"
|
||
class="flex-col col-center"
|
||
>
|
||
<img
|
||
style="width: 100px; height: 100px"
|
||
:src="server.image"
|
||
alt=""
|
||
/>
|
||
<div class="sm m-t-8">{{ server.phone }}</div>
|
||
<div class="sm m-t-10">
|
||
在线时间:{{ server.business_time }}
|
||
</div>
|
||
</div>
|
||
<div class="item flex-col col-center lighter" slot="reference">
|
||
<span class="iconfont icon-service"></span>
|
||
<div class="sm">客服</div>
|
||
</div>
|
||
</el-popover>
|
||
</div>
|
||
<div class="back-top">
|
||
<span class="iconfont icon-top" @click="scrollTop"></span>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import { mapState } from 'vuex'
|
||
export default {
|
||
data() {
|
||
return {
|
||
server: {},
|
||
}
|
||
},
|
||
created() {
|
||
this.getService()
|
||
},
|
||
methods: {
|
||
async getService() {
|
||
const { data, code } = await this.$get(
|
||
'setting/getPlatformCustomerService'
|
||
)
|
||
if (code == 1) {
|
||
this.server = data
|
||
}
|
||
},
|
||
scrollTop() {
|
||
cancelAnimationFrame(this.timer)
|
||
const self = this
|
||
this.timer = requestAnimationFrame(function fn() {
|
||
var oTop =
|
||
document.body.scrollTop ||
|
||
document.documentElement.scrollTop
|
||
if (oTop > 0) {
|
||
scrollTo(0, oTop - 250)
|
||
self.timer = requestAnimationFrame(fn)
|
||
} else {
|
||
cancelAnimationFrame(self.timer)
|
||
}
|
||
})
|
||
},
|
||
},
|
||
computed: {
|
||
...mapState(['publicData']),
|
||
},
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.float-nav {
|
||
height: 100vh;
|
||
position: fixed;
|
||
right: 0;
|
||
top: 0;
|
||
width: 60px;
|
||
z-index: 999;
|
||
box-shadow: -3px 1px 2px rgba(0, 0, 0, 0.04);
|
||
.nav-list {
|
||
position: absolute;
|
||
bottom: 120px;
|
||
.item {
|
||
padding: 10px 4px;
|
||
text-align: center;
|
||
cursor: pointer;
|
||
&:hover {
|
||
color: $--color-primary;
|
||
}
|
||
.iconfont {
|
||
font-size: 24px;
|
||
}
|
||
::v-deep .el-badge__content {
|
||
height: 16px;
|
||
line-height: 16px;
|
||
padding: 0 5px;
|
||
}
|
||
}
|
||
}
|
||
.back-top {
|
||
position: absolute;
|
||
bottom: 20px;
|
||
cursor: pointer;
|
||
}
|
||
}
|
||
</style> |