Files
mallplus/mallplusui-uniapp-app/pages/index/nearbyBusiness.vue
guoxing e40ca500b4 2023-02-27
功能完善
2023-02-27 18:10:06 +08:00

562 lines
14 KiB
Vue
Raw 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="content">
<!-- 顶部搜索 -->
<view class="getPosition">
<image src="/static/position.png" @click="openMap()" style="width: 50upx;height: 50upx;" mode=""></image>
<text @click="toAddressList()" >{{ addressData.province }}-{{ addressData.city }}-{{ addressData.region }}</text>
</view>
<!-- 头部 -->
<view class="title-box">
<view @click="scanCode()" class="scan"><image src="http://rs.eonfox.cc/clzy/static/scan-ico.png" mode="" style="width:40upx; height:40upx; "></image></view>
<view class="input-box" @click="openSearch">
<view style="float: left;">
<image src="/static/search.png" mode="" style="width:40upx; height:40upx; margin-left: 10upx; margin-right: 10upx; margin-top: 10upx; "></image>
</view>
<view style=" float:left; height:100%;"><input type="text" value="" placeholder="输入关键字搜索" class="input" /></view>
</view>
</view>
<view class="topTitle">
<image src="http://rs.eonfox.cc/clzy/static/star-ico.png" mode="" style="width:68upx;height:68upx;float:left;margin-right: -10upx;"></image>
<text class="topText">全部商家</text>
</view>
<view class="checkGroup">
<radio-group>
<label class="radio" v-for="(item,index) in disType" :key='index'><radio value="r1" class="radio" @click="gain(item.id)"/>{{item.name}}</label>
</radio-group>
</view>
<view class="classification">
<view class="allClassification typeList" @click="gosort">
<uni-icon type="bars" size="22" class="bars" color="8e8e8e"></uni-icon>
<text>全部分类</text>
</view>
<view class="city typeList" @click="load">
<uni-icon type="refreshempty" size="25" color="8e8e8e"></uni-icon>
<text>加载全部</text>
</view>
</view>
<!-- #ifdef MP-WEIXIN -->
<view class="shop-box" style="margin-top: 80upx;">
<!-- #endif -->
<!-- #ifndef MP-WEIXIN -->
<view class="shop-box">
<!-- #endif -->
<view v-if="!storeList" style="text-align: center; color:#5C5C5C; font-size: 30upx;">暂无商家记录</view>
<view class="shop" v-for="(item, index) in storeList" @click="gobrand" :data-Businessid="item.id" :key="index">
<image :src="item.logo" mode="" class="image" width="100%" height="100%"></image>
<view class="shopText">
<text class="name">{{ item.name }}</text>
<view class="evaluate">
<uni-icon type="star-filled" size="15" class="star-filled" color="8e8e8e"></uni-icon>
<uni-icon type="star-filled" size="15" class="star-filled" color="8e8e8e"></uni-icon>
<uni-icon type="star-filled" size="15" class="star-filled" color="8e8e8e"></uni-icon>
<uni-icon type="star-filled" size="15" class="star-filled" color="8e8e8e"></uni-icon>
<uni-icon type="star-filled" size="15" class="star-filled" color="8e8e8e"></uni-icon>
<text class="garde" style="margin-right:10upx; color:#666666; ">收藏 {{ item.collect }}</text>
</view>
<view class="bottomInformation">
<text v-if="item.addressDetail" class="crux" style="margin-top: 30upx; color:#666666; overflow: hidden; display: inline-block; height: 40upx; text-overflow:ellipsis;">
{{ item.addressDetail }}
</text>
<text v-else class="crux" style="margin-top: 30upx; color:#666666; overflow: hidden; display: inline-block; height: 40upx; text-overflow:ellipsis;">
{{ item.addressProvince }}-{{ item.addressCity }}
</text>
<text class="distance" style=" color:#666666;">{{ item.distance.toFixed(4) }}</text>
</view>
</view>
</view>
<!--<uni-load-more :loadingType="loadingType" :contentText="contentrefresh"></uni-load-more>-->
</view>
<view class="mask" v-show="display" @click="Colse"></view>
<view class="sortBox" v-show="display">
<view class="sortBox-title">
<view>请选择商家类别</view>
<view @click="Colse"><uni-icon type="closeempty" size="30"></uni-icon></view>
</view>
<view class="sortBoxBox" v-for="(items, index1) in Parent" :key="index1">
<view class="sortRight">
<text v-for="(item, index2) in items.son" :key="index2" @click="sublevel(item.type_id)">{{ item.name }}</text>
</view>
</view>
</view>
</view>
</template>
<script>
import uniLoadMore from '@/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue';
import uniIcon from '@/components/uni-icon/uni-icon.vue';
import eonfox from '@/components/eonfox/eonfox.js';
import fns from '@/components/eonfox/fns.js';
import QQMapWX from '@/components/eonfox/qqmap-wx-jssdk.js';
import mallplusCopyright from '@/components/mall-copyright/mallplusCopyright.vue';
import Api from '@/common/api';
import navBar from "@/components/zhouWei-navBar";
var qqmapsdk = new QQMapWX({
key: '5XABZ-AQ764-SMHUQ-DABAC-R7E4H-37FM2'
});
// #ifdef H5
let jweixin = require('jweixin-module');
// #endif
var ef = new eonfox();
export default {
components: {
mallplusCopyright,uniIcon
},
data() {
return {
sjnumber: [],
storeList: [],
name: '',
address: '',
page: 10,
merchant: [],
distance:20,
loadingType: 0,
contentText: {
contentdown: '上拉显示更多',
contentrefresh: '正在加载...',
contentnomore: '没有更多数据了'
},
disType:[
{
id: 5,
name: "5km",
},
{
id: 10,
name: "10km",
},
{
id: 20,
name: "20km",
},
{
id: 40,
name: "40km",
},
],
Parent: [],
display: false,
addressData: {
longitude:0.0,
latitude:0.0,
}, //默认收货地址
addressId: '', //地址id
statusBarHeight: ''
};
},
components: {
uniIcon,
uniLoadMore,
navBar
},
onShow: function() {
(this.latitude = ''), (this.longitude = '');
this.load();
},
async onLoad(options) {
this.load();
},
onReachBottom() {
},
methods: {
openSearch(){
console.log('搜索')
},
Colse() {
this.display = !this.display;
},
toAddressList() {
var type = '1'; //不知道这个type有什么值取大一点
uni.navigateTo({
url: '../../pagesU/address/address?source=' + type
});
},
gobrand: function(e) {
console.log(e);
// return
var sjid = e.currentTarget.dataset.businessid;
console.log('目标', sjid);
uni.navigateTo({
url: '../../pagesC/store/businessDetails?id=' + sjid
+'&lon='+this.addressData.longitude
+'&lat='+this.addressData.latitude
// 参数的传递 newsid
});
},
gosort() {
this.display = !this.display;
},
openMap() {
var _this = this;
uni.chooseLocation({
success: function(res) {
console.log('res', res);
_this.addressData.longitude=res.longitude;
_this.addressData.latitude=res.latitude;
_this.addressId = 1 ;
_this.addressData.province = res.address ;
_this.addressData.name = res.name;
console.log('经度:' + res.longitude);
console.log('详细地址:' + res.address);
console.log('纬度:' + res.latitude);
_this.storeList = {};
}
});
},
async load() {
var that = this;
let params = {};
if(!that.addressId){
that.addressData = await Api.apiCall('get', Api.goods.getItemDefautl, params);
}
console.log(that.addressData);
if(that.addressData.longitude){
params = { geohash: that.addressData.latitude+','+ that.addressData.longitude, pageSize: that.page,distance:this.distance };
console.log(params);
let list = await Api.apiCall('get', Api.index.nearStoreList, params);
that.storeList = list;
}
console.log('that.addressId' + that.addressId);
},
gain(id){
this.distance=id ;
this.load();
},
//点击查询商家分类
sublevel(id) {
var that = this;
that.display = !that.display;
ef.submit({
request: {
s: ['MERCHANTLIST', [{ lon: that.longitude, lat: that.latitude, search: { type_id: id } }]] //子级
},
callback: function(data) {
var res = fns.checkError(data, 's', function(errno, error) {
fns.err(error);
});
that.sjnumber = data.data.s.data.data;
console.log('分类', data);
},
error: function(err) {
fns.err('加载失败', err, 1);
}
});
},
//二维码
scanCode() {
var _this = this;
uni.showToast({
// #ifdef APP-PLUS
title: '这是APP',
icon: 'none',
// #endif
// #ifdef H5
title: '这是H5',
icon: 'none',
// #endif
// #ifdef MP-WEIXIN
title: '这是小程序',
icon: 'none',
// #endif
success() {
setTimeout(function() {}, 1500);
}
});
uni.scanCode({
onlyFromCamera: true,
success: function(res) {
if (res.result) {
var data = JSON.parse(res.result);
console.log('res:', data);
if (!data.errno) {
if (data.type != 'merchant_money_plus') {
uni.showToast({
title: '该二维码非收款二维码'
});
} else if (data.data.merchant_id) {
_this.merchant_id = data.data.merchant_id;
if (data.data && data.data.user_id) {
var user_id = data.data.user_id;
} else {
var user_id = '';
}
uni.navigateTo({
url: '../../pagesB/payUser/payUser?mch_id=' + data.data.merchant_id + '&user_id=' + data.data.user_id
});
} else {
uni.showToast({
title: '扫码失败',
icon: 'none'
});
}
} else {
uni.showToast({
title: data.error,
icon: 'none'
});
}
}
}
});
}
}
};
</script>
<style scoped lang="stylus" ref="stylesheet/stylus">
.content
width 100%
overflow hidden
.title-box
display flex
justify-content center // 水平居中
align-items center // 垂直居中
flex-direction row // 左到右
width 750upx
padding 0 20upx
height 100upx
.scan
width 40upx
height 40upx
.input-box
// margin-left 20upx
width 700upx
height 58upx
// border 1upx solid #d3d3d3
border-radius 50upx
.search
display inline-block
position absolute
top 0
left 0
.input
width 80%
display inline-block
font-size 28upx
text-align center
// text-align left
line-height 100%
height 100%
.chat
flex 1
.topTitle
width 100%
height 80upx
display flex
align-items center // 垂直居中
flex-direction row
padding 0 20upx
color #333
font-size 30upx
.topText{
margin-left 10upx
}
.leftBox
width 300upx
text-align right
.checkGroup{
padding-left 26upx
margin-bottom 10upx
font-size 30upx
.uni-label-pointer {
margin-right 16upx
}
}
.classification
height 80upx
display flex
align-items center
justify-content center // 垂直居中
flex-direction row
font-size 28upx
.typeList
text-align center
line-height 80upx
border 1px solid #d3d3d3
width 50%
height 100%
position relative
.typeList:before
content ""
position absolute
top 34upx
right 66upx
width: 0px;
height: 0px;
border-left: 12upx solid transparent;
border-right: 12upx solid transparent;
border-top: 12upx solid #bfbfbf;
.allClassification{
border-left 0
}
.city{
border-right 0
}
.place
font-size 30upx
height 100upx
text-align left
line-height 100upx
border-bottom 1px solid #d3d3d3
padding-left 20px
.shop-box, width 100%
height auto
.shop
height 200upx
border-bottom 1px solid #eee
display flex
align-items center
justify-content flex-start
flex-direction row
.image
width 160upx
height 160upx
margin-left 25upx
border-radius 50%
.shopText
width 500upx
height 220upx
margin-left 25upx
padding-top 25upx
.name
color #333
font-weight 600
font-size 30upx
width 100%
height 30px
.evaluate
font-size 20upx
margin-top 20upx
.bottomInformation
align-items center
justify-content space-between
flex-direction row
width 100%
color #333
font-size 28upx
.crux
width 240upx
display inline-block
.distance
width calc(100% - 250upx)
float right
text-align right
margin-top 30upx
.icoimg
width 48upx
height 48upx
</style>
<style>
.search-weixin-input {
font-size: 28upx;
background: #f5f5f5;
height: 60upx;
width: 90%;
border-radius: 50upx;
text-align: center;
}
.search-weixin {
background: #ffffff;
height: 80upx;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
border-bottom: 1upx solid #eeeeee;
position: fixed;
}
.sortBox {
position: fixed;
width: 650upx;
height: auto;
padding-top: 20upx;
padding-bottom: 40upx;
top: 25vh;
background-color: #ffffff;
margin-left: 50upx;
font-size: 28upx;
border: #e3e3e3 solid 3upx;
border-radius: 25upx;
z-index: 1000;
}
.sortBox-title {
width: 610upx;
padding: 20upx 20upx;
display: flex;
justify-content: space-between;
align-items: center;
}
.mask {
position: fixed;
top: 0;
left: 0;
z-index: 4;
width: 100%;
height: 100vh;
background: rgba(0, 0, 0, 0.4);
}
.sortBoxBox {
width: 610upx;
padding: 20upx 20upx;
display: flex;
flex-wrap: wrap;
}
.sortRight {
width: auto;
padding-bottom: 20upx;
height: auto;
}
.sortRight text {
padding: 10upx;
border: #cccccc solid 1upx;
border-radius: 10upx;
color: #dd524d;
margin-left: 20upx;
float: left;
margin-bottom: 10upx;
}
.getPosition {
height: 100upx;
display: flex;
justify-content: center;
align-items: center;
font-size: 32upx;
background-color: #fff;
}
.getPosition-weixin {
height: 90upx;
position: fixed;
z-index: 99;
width: 100%;
}
.getPosition-top {
width: 100%;
position: fixed;
top: 0;
z-index: 99;
background: #ffffff;
}
</style>