sadjv3/anmo-shop/pages/index/index1.vue

612 lines
16 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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>
<view class="">
<mescroll-body :sticky="true" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback">
<view class="padding-lr padding-top-sm bg flex " @click.stop="goSearch(1)">
<view class="flex justify-between margin-right-sm" @tap.stop="goSelectCity" style="line-height: 68rpx;">
<image src="../../static/images/index/place.png" style="width: 27rpx;height: 37rpx;"
class="margin-top-xs"></image>
<view class="localName text-white margin-left-sm">{{city}}</view>
</view>
<u-search class="flex-sub" placeholder="搜索你需要的服务" shape="square" disabled :show-action="false"
:animation="true" bg-color="#F7F7F7" color="#1A1A1A"></u-search>
</view>
<view v-if="tabIndex == 0" class="bg">
<view class="padding-lr-sm ">
<swiper class="screen-swiper" style="height: 260rpx;" :circular="true" :autoplay="true"
interval="2500" duration="800">
<swiper-item v-for="(item,index) in swiperList" :key="index">
<image :src="item.imageUrl" mode="aspectFit" class="radius"></image>
</swiper-item>
</swiper>
</view>
<view class="bg" style="color: #333333;">
<u-grid :col="5" :border="false">
<u-grid-item v-for="(item,index) in gridData" :key='index' @click="goNav(item.url)">
<image :src="item.imageUrl" style="width: 92rpx;height: 92rpx;border-radius: 92rpx;">
</image>
<view class="grid-text" style="font-size: 25rpx;margin-top: 10rpx;">{{item.name}}</view>
</u-grid-item>
</u-grid>
</view>
</view>
<ren-dropdown-filter :filterData='filterData' :border="false" :defaultIndex='defaultIndex'
@onSelected='change' class="u-skeleton-rect">
</ren-dropdown-filter>
<view style="background-color: #FFFFFF;" v-if="orderList.length">
<view class="flex margin-bottom-sm bg padding-sm radius margin-lr-sm margin-top-sm "
v-for="(item,index) in orderList" :key='index' @click="goOrder(item)" style="box-shadow: 6rpx 10rpx 4px #F5F5F5;">
<view style="width: 220upx;height: 160upx;border-radius: 10rpx;">
<image :src="item.massageImg?item.massageImg: '../../static/logo.png'"
style="width: 220upx;height: 160upx;border-radius: 10upx;"></image>
</view>
<view class="margin-left text-white flex flex-direction" style="width: 65%;">
<view class="flex justify-between">
<view class="text-bold text-lg margin-left-xs">{{item.title}}</view>
<view style="color: #999999;font-size: 22upx;">已售{{item.sales}}</view>
</view>
<view class="flex flex-wrap" style="margin-top: 10rpx;" v-if="item.labels.length>0">
<text class="margin-bottom-xs box" v-for="(items,index) in item.labels"
:key="index">{{items}}</text>
</view>
<!-- <view class="text-cut" style="color: #999999;">{{item.describes}}</view> -->
<view style="width: 100%;display: flex;justify-content: space-between;align-items: center;">
<view style="color:#FF1200;font-size: 24upx;" v-if="isVip == false">
¥<text
style="font-size: 32upx;font-weight: bold;">{{item.price}}/</text>{{item.duration}}分钟
</view>
<view style="color:#FF1200;font-size: 24upx;" v-else>
¥<text
style="font-size: 32upx;font-weight: bold;">{{item.memberPrice}}/</text>{{item.duration}}分钟
</view>
<!-- <view class="text-green text-df">
¥<text
class="text-green text-xl text-bold">{{item.price}}</text>/<text class="text-sm">会员价:¥{{item.memberPrice}}</text>/</text>{{item.duration}}分钟
</view> -->
<view v-if="XCXIsSelect != '否'"
style="background: #096f4b;color: #ffffff;line-height: 56upx;border-radius: 8rpx;font-size: 24upx;padding: 0upx 23upx;"
>
选择理疗师
</view>
</view>
</view>
</view>
</view>
<empty v-if="orderList.length == 0"></empty>
</mescroll-body>
<!-- <u-skeleton :loading="loading" :animation="true" elColor='#FFFFFF' bgColor='#FFFFFF'></u-skeleton> -->
</view>
</template>
<script>
import MescrollMixin from "@/components/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
import mescrollBody from "@/components/mescroll-uni/components/mescroll-body/mescroll-body.vue";
import meTabs from "@/components/mescroll-uni/me-tabs/me-tabs.vue";
import empty from '@/components/empty.vue'
import RenDropdownFilter from '@/components/ren-dropdown-filter/ren-dropdown-filter.vue'
export default {
mixins: [MescrollMixin], // 使用mixin
components: {
mescrollBody,
meTabs,
empty,
RenDropdownFilter
},
data() {
return {
loading: true, // 是否显示骨架屏组件
defaultSelected: [],
tabIndex: 0, // tab下标
tabData: [{
createTime: "",
gameName: '推荐',
gameImg: "",
id: 0,
status: 0,
updateTime: "",
}],
swiperList: [],
gridData: [],
value1: 0,
value2: 0,
value3: 0,
game: [],
defaultIndex: [0, 0, 0],
filterData: [
[{
label: '推荐',
value: '',
}, ],
[{
label: '价格',
value: '0',
},
{
label: '从高到低',
value: '1',
},
{
label: '从低到高',
value: '2',
}
],
[{
label: '销量',
value: '0',
},
{
label: '从高到低',
value: '1',
},
{
label: '从低到高',
value: '2',
}
],
],
city: '请选择城市',
latitude: '',
longitude: '',
orderList: [],
token: '',
XCXIsSelect: '否',
isVip: false,
myId: uni.getStorageSync('userId') ? uni.getStorageSync('userId') : '',
showModal: true,
arr: [],
tab: '',
age: 0,
birthDate: ''
}
},
onLoad(e) {
let that = this
that.XCXIsSelect = that.$queue.getData('XCXIsSelect');
uni.getLocation({
type: 'gcj02',
geocode: true, //设置该参数为true可直接获取经纬度及城市信息
success: function(res) {
console.log(res, '地理位置')
that.latitude = res.latitude
that.longitude = res.longitude
uni.setStorageSync('latitude', res.latitude)
uni.setStorageSync('longitude', res.longitude)
// #ifdef APP-PLUS
that.city = res.address.city
that.selectCity(that.longitude, that.latitude);
uni.setStorageSync('city', res.address.city)
let data = {
num: 1,
size: 10
}
that.getData(data)
// #endif
// #ifdef H5
that.selectCity(that.longitude, that.latitude);
// #endif
// #ifdef MP-WEIXIN
that.selectCity(that.longitude, that.latitude);
// uni.request({
// url: 'https://apis.map.qq.com/ws/geocoder/v1/?location=' + that.latitude +
// ',' + that.longitude + '&key=5DLBZ-QYMR6-334SQ-MOZUI-Z3GVO-SBFB4',
// success(re) {
// if (re.statusCode === 200) {
// let citydata = re.data.result.address_component.city
// // console.log("获取城市名称成功", citydata)/
// that.city = citydata ? citydata : '未知'
// uni.setStorageSync('city', citydata)
// let data = {
// num: 1,
// size: 10
// }
// that.getData(data)
// } else {
// console.log("获取信息失败,请重试!")
// }
// }
// });
// #endif
},
fail: function() {
console.log('获取地址失败')
}
})
// 获取邀请码保存到本地
if (e.invitation) {
that.$queue.setData('inviterCode', e.invitation);
}
if (this.myId) {
that.$Request.getT('/app/common/type/250').then(res => { //理疗师完成通知
if (res.code == 0) {
if (res.data && res.data.value) {
that.arr.push(res.data.value)
}
}
})
that.$Request.getT('/app/common/type/248').then(res => { //理疗师取消通知
if (res.code == 0) {
if (res.data && res.data.value) {
that.arr.push(res.data.value)
}
}
})
}
},
onShow() {
let that = this
that.city = uni.getStorageSync('city') ? uni.getStorageSync('city') : '请选择城市'
that.getBannerList()
that.getGrid()
// that.getRenZheng()
that.token = uni.getStorageSync('token')
if (uni.getStorageSync('token')) {
that.getIsVip()
}
that.myId = uni.getStorageSync('userId')
// #ifdef MP-WEIXIN
//订阅
if (that.myId) {
if (this.showModal) {
this.openMsg()
}
}
// #endif
let data = {
num: 1,
size: 10
}
that.getData(data)
// that.mescroll.resetUpScroll()
},
methods: {
selectCity(longitude, latitude) {
this.$Request.get('/app/Login/selectCity?lat=' + latitude + '&lng=' + longitude).then(res => {
if (res.code == 0) {
this.city = res.data.city ? res.data.city : '未知'
uni.setStorageSync('city', res.data.city)
let data = {
num: 1,
size: 10
}
this.getData(data)
}
});
},
// 开启订阅消息
openMsg() {
console.log('订阅消息')
var that = this
uni.getSetting({
withSubscriptions: true, //是否获取用户订阅消息的订阅状态默认false不返回
success(ret) {
console.log(ret.subscriptionsSetting, '------------------')
// if (ret.subscriptionsSetting.itemSettings && Object.keys(ret.subscriptionsSetting.itemSettings).length == 2) {
if (ret.subscriptionsSetting.itemSettings) {
uni.setStorageSync('sendMsg', true)
uni.openSetting({ // 打开设置页
success(rea) {
console.log(rea.authSetting)
}
});
} else { // 用户没有点击“总是保持以上,不再询问”则每次都会调起订阅消息
uni.setStorageSync('sendMsg', false)
uni.showModal({
title: '提示',
content: '为了更好的体验,请绑定消息推送',
confirmText: '确定',
cancelText: '取消',
success: function(res) {
if (res.confirm) {
wx.requestSubscribeMessage({
tmplIds: that.arr,
success(re) {
var datas = JSON.stringify(re);
if (datas.indexOf("accept") != -1) {
console.log(re)
// uni.setStorageSync('sendMsg', true)
}
},
fail: (res) => {
console.log(res)
}
})
// uni.setStorageSync('sendMsg', true)
that.showModal = false
} else if (res.cancel) {
console.log('取消')
// uni.setStorageSync('sendMsg', false)
that.showModal = true
}
}
})
}
}
})
},
getIsVip() {
this.$Request.get("/app/UserVip/isUserVip").then(res => {
if (res.code == 0) {
this.isVip = res.data
uni.setStorageSync('isVIP', res.data)
}
});
},
/*下拉刷新的回调 */
downCallback() {
// 这里加载你想下拉刷新的数据, 比如刷新轮播数据
// loadSwiper();
// 下拉刷新的回调,默认重置上拉加载列表为第一页 (自动执行 page.num=1, 再触发upCallback方法 )
// this.$refs.uDropdown.close();
this.mescroll.resetUpScroll()
},
/*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
upCallback(page) {
this.getData(page)
},
getData(page) {
let data = {
// id: curTab,
page: page.num,
limit: page.size,
status: 1,
// isRecommend: num,
condition: this.value1, //智能优选
by: this.value2, //销量
authentication: this.value3, //价格
latitude: this.latitude,
longitude: this.longitude,
city: this.city
}
// debugger;
this.$Request.get("/app/artificer/selectMassageTypePage", data).then(res => {
this.mescroll.endBySize(res.data.list.length, res.data.list)
this.loading = false;
if (res.code == 0) {
if (page.num == 1) {
this.orderList = res.data.list
for (let i = 0; i < this.orderList.length; i++) {
this.orderList[i].labels = this.orderList[i].labels.split(",");
}
} else {
this.orderList = [...this.orderList, ...res.data.list]
for (let i = 0; i < this.orderList.length; i++) {
this.orderList[i].labels = this.orderList[i].labels.split(",");
}
}
}
this.mescroll.endSuccess(res.data.list.length); // 隐藏加载状态栏
}).catch(() => {
//联网失败, 结束加载
this.mescroll.endErr();
});
// this.getClassfly()
this.getBannerList()
this.getGrid()
},
// 切换菜单
tabChange() {
if (uni.getStorageSync('sendMsg')) {
wx.requestSubscribeMessage({
tmplIds: this.arr,
success(re) {
var datas = JSON.stringify(re);
if (datas.indexOf("accept") != -1) {}
},
fail: (res) => {
console.log(res)
}
})
}
this.defaultIndex = [0, 0, 0]
// this.$refs.uDropdown.close();
// this.orderList = []; // 置空列表,显示加载进度条
this.mescroll.resetUpScroll()
},
// 筛选
change(e) {
console.log(e)
this.value1 = e[0][0].value
this.value3 = e[1][0].value
this.value2 = e[2][0].value
this.mescroll.resetUpScroll()
},
// 选择城市
goSelectCity() {
uni.navigateTo({
url: '/pages/index/citys/citys'
});
},
// 跳转游戏列表
goNav(url) {
if (uni.getStorageSync('sendMsg')) {
wx.requestSubscribeMessage({
tmplIds: this.arr,
success(re) {
var datas = JSON.stringify(re);
if (datas.indexOf("accept") != -1) {
console.log(re)
}
},
fail: (res) => {
console.log(res)
}
})
}
if (url.indexOf('/pages/') !== -1) {
uni.navigateTo({
url
});
} else {
//#ifndef H5
uni.navigateTo({
url: '/pages/index/webView?url=' + url
});
//#endif
//#ifdef H5
window.location.href = url;
//#endif
}
},
//获取轮播图
getBannerList() {
this.$Request.get("/app/banner/selectBannerList", {
classify: 1
}).then(res => {
if (res.code == 0) {
this.swiperList = res.data
}
});
},
// 获取金刚区分类
getGrid() {
this.$Request.get("/app/banner/selectBannerList", {
classify: 2
}).then(res => {
if (res.code == 0) {
this.gridData = res.data
// console.log(this.gridData, '')
}
});
},
// 跳转搜索
goSearch(index) {
if (uni.getStorageSync('sendMsg')) {
console.log('授权+1')
wx.requestSubscribeMessage({
tmplIds: this.arr,
success(re) {
var datas = JSON.stringify(re);
if (datas.indexOf("accept") != -1) {
console.log(re)
}
},
fail: (res) => {
console.log(res)
}
})
}
uni.navigateTo({
url: '/pages/index/search/index?index=' + index
});
},
// 跳转订单
goOrder(e) {
console.log('授权', uni.getStorageSync('sendMsg'))
if (uni.getStorageSync('sendMsg')) {
wx.requestSubscribeMessage({
tmplIds: this.arr,
success(re) {
var datas = JSON.stringify(re);
if (datas.indexOf("accept") != -1) {
console.log(re)
}
},
fail: (res) => {
console.log(res)
}
})
}
if (this.token) {
uni.navigateTo({
url: '/pages/index/order/order?massageTypeId=' + e.massageTypeId
});
} else {
uni.navigateTo({
url: '/pages/public/login'
});
}
},
}
}
</script>
<style lang="scss">
page {
background-color: #FFFFFF;
}
.bg {
background: #FFFFFF;
}
.sticky-tabs {
z-index: 990;
position: sticky;
top: var(--window-top);
// background-color: #fff;
}
/* // 使用mescroll-uni,则top为0 */
.mescroll-uni,
/deep/.mescroll-uni {
.sticky-tabs {
top: 0;
}
}
.demo-tip {
padding: 18upx;
font-size: 24upx;
text-align: center;
}
.line_s {
display: inline-flex;
width: 10rpx;
height: 10rpx;
background: #1AD566;
border-radius: 50%;
margin-right: 10rpx;
}
.line_x {
display: inline-flex;
width: 10rpx;
height: 10rpx;
background: #000000;
border-radius: 50%;
margin-right: 10rpx;
}
.box {
// border: 3rpx solid #005dff;
background: #E8FAE1;
color: #096f4b;
padding: 5rpx 15rpx;
font-size: 24upx;
letter-spacing: 2rpx;
border-radius: 8rpx;
// margin-top: 10rpx;
margin-right: 8upx;
}
</style>