123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610 |
- <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: #2FB57A;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
- }
- 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: #2FB57A;
- padding: 5rpx 15rpx;
- font-size: 24upx;
- letter-spacing: 2rpx;
- border-radius: 8rpx;
- // margin-top: 10rpx;
- margin-right: 8upx;
- }
- </style>
|