地图组件

This commit is contained in:
luJianJun 2023-07-25 17:21:36 +08:00
parent cb5fc462c7
commit 2d20fe1cce
7 changed files with 168 additions and 91 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="700px" height="480px" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient gradientUnits="userSpaceOnUse" x1="506" y1="12805.6956521739" x2="1311" y2="12805.6956521739" id="LinearGradient243">
<stop id="Stop244" stop-color="#ffffff" offset="0" />
<stop id="Stop245" stop-color="#eff7ff" stop-opacity="0.752941176470588" offset="1" />
</linearGradient>
</defs>
<g transform="matrix(1 0 0 1 -611 -12567 )">
<path d="M 611 12577 A 10 10 0 0 1 621 12567 L 1301 12567 A 10 10 0 0 1 1311 12577 L 1311 13037 A 10 10 0 0 1 1301 13047 L 621 13047 A 10 10 0 0 1 611 13037 L 611 12577 Z " fill-rule="nonzero" fill="url(#LinearGradient243)" stroke="none" />
</g>
</svg>

View File

@ -112,7 +112,6 @@ let props = defineProps({
let data = reactive({ data: {} })
watchEffect(() => {
data.data = props.item
console.log(123,data.data)
})

View File

@ -83,7 +83,7 @@
<!-- 广告 -->
</div>
<img :src="itemData.imageLocal || itemData.image" class="live-img" v-if="itemData.type === 'adv'" alt="">
<img :src="itemData.imageLocal || itemData.image" class="live-img" v-if="itemData.type === 'adv'" alt="" @click="watchAdv">
</template>
<script setup>
@ -101,6 +101,10 @@ let itemData = props.data
let location=reactive({data:{}})
location.data=store.state.indexData.config.location
let watchAdv=()=>{
}
</script>
<style scoped>
.pos-r {

View File

@ -115,7 +115,8 @@
<div class="num-box">{{ housingInfo['data'] && housingInfo['data'].info.video ?
housingInfo['data'] && housingInfo['data'].info.video.length : 0 }}</div>
<img src="../assets/img/detail/imageIcon.png" class="img-icon" alt="">
<div class="num-box">{{ housingInfo['data'] && housingInfo['data'].info.picturegroup.length
<div class="num-box">{{ housingInfo['data'] &&
housingInfo['data'].info.picturegroup && housingInfo['data'].info.picturegroup.length
|| 0 }}</div>
</div>
<div class="img-list-box dis-f jus-x al-item" @click="imageShow = true">
@ -229,14 +230,14 @@
<div class="map-box">
<div class="dis-f al-item title-box">
<img src="../assets/img/detail/mapIcon.png" class="img" alt="">
<!-- <span class="title">{{
location[housingInfo['data']&&housingInfo['data']['info'].location.substring(0, 1)]
<span class="title">{{
location&&location[housingInfo['data']&&housingInfo['data']['info'].location.substring(0, 1)]
}} > {{
location[housingInfo['data']&&housingInfo['data']['info'].location]
}}</span> -->
location&&location[housingInfo['data']&&housingInfo['data']['info'].location]
}}</span>
</div>
<div class="dis-f jus-x" style="margin-top:15px;">
<!-- <div class="map-s">
<div class="map-s">
<div class="pop-box">
<div class="address-box dis-f al-item jus-bet">
<div class="dis-f al-item">
@ -247,13 +248,18 @@
<img src="../assets/img/detail/moreNot.svg" class="icon" alt="">
</div>
</div>
</div> -->
<!-- <mapInfo :info="housingInfo['data']&&housingInfo['data'].info"></mapInfo> -->
</div>
{{ housingInfo['data']&&housingInfo['data'].info.longitude }}
{{ housingInfo['data']&&housingInfo['data'].info.latitude }}
<mapInfo :latlng="{
longitude:housingInfo['data']&&housingInfo['data'].info.longitude,
latitude:housingInfo['data']&&housingInfo['data'].info.latitude
}" :name="housingInfo['data']&&housingInfo['data'].info.address"></mapInfo>
</div>
</div>
<div class="dis-f jus-x">
<div class="dis-f jus-x" v-if="distanceList.length">
<div class="distance-box dis-f jus-bet">
<div class="distance-info-box" :class="{ 'show-distance-info-box': showDistance }"
<div class="distance-info-box pos-r" :class="{ 'show-distance-info-box': showDistance }"
:style="{ 'height': showDistance ? `${70 + 42 + 82 * distanceList.length - 1}px` : '0px' }">
<div class="top-box"></div>
<div class="title-box dis-f al-item jus-x">
@ -264,15 +270,15 @@
<div class="dis-f al-item school-info" v-for="(item, index) in distanceList"
:key="index" :class="{ 'mg-t-50': index > 0 }">
<div class="icon-box dis-f al-item jus-x"
:class="{ 'home-icon': item.address }">
:class="{ 'home-icon':item&&item.address }">
<div class="line" v-show="index > 0"></div>
<img src="../assets/img/detail/school.png" class="icon"
v-show="item.address" alt="">
<img src="../assets/img/detail/home.png" class="icon" v-show="!item.address"
v-show="item&&item.address" alt="">
<img src="../assets/img/detail/home.png" class="icon" v-show="item&&!item.address"
alt="">
</div>
{{ item && item.name }}
<div v-for="(items, i) in item.point" :key="i">
<div v-for="(items, i) in item&&item.point" :key="i">
<span class="address-info">
{{ items.title }}
</span>
@ -292,10 +298,10 @@
<div class="line-school-box dis-f al-item" style="justify-content:space-around;">
<div v-for="(item, i) in distanceList" class="box-text" :key="item && item.id">
<div :class="{ 'far-s': item && item.recently_distance > 4 }"
v-if="!item.address" class="text-c">
v-if="item&&!item.address" class="text-c">
{{ item && item.recently_distance }}km
</div>
<div class="dis-f jus-x" v-if="!item.address">
<div class="dis-f jus-x" v-if="item&&!item.address">
<img src="../assets/img/detail/markIcon.svg"
v-if="item && item.recently_distance <= 4" class="marker-icon"
alt="">
@ -304,7 +310,7 @@
alt="">
</div>
<div :class="{ 'far-s': item && item.recently_distance > 4 }" class="text-c"
v-if="!item.address">{{
v-if="item&&!item.address">{{
item && item.alias }}</div>
</div>
</div>
@ -465,75 +471,99 @@
附近房源
</div>
</div>
<div class="dis-f jus-x al-item">
<div class="body-maxWidth" ref="gridContainer"
style="margin-top:15px;display: flex;flex-wrap: wrap;margin-bottom: 50px;">
<indexWaterfallBox v-for="(items, i) in recommendListData" :data="items" :key="items.id">
</indexWaterfallBox>
<div class="dis-f jus-x al-item" style="position: relative;z-index:-1;">
<div class="body-maxWidth">
<div ref="gridContainer"
style="margin-top:15px;display: flex;flex-wrap: wrap;margin-bottom: 50px;width:876px">
<indexWaterfallBox v-for="(items, i) in recommendListData" :data="items" :key="items.id">
</indexWaterfallBox>
</div>
</div>
</div>
<!-- <footerTool></footerTool> -->
<div class="pop-box" v-show="showConcat" @click="showConcat = !showConcat">
<div class="dis-f jus-x bottom-tps">
- {{ loadText }} -
</div>
<footerTool></footerTool>
<div class="pop-box" v-show="showConcat">
<!-- 两种信息 -->
<!-- third-concat -->
<div class="pop-big-box" v-show="concatData.data && concatData.data.count > 1">
<div class="pop-info-box dis-f jus-x al-item">
<div class="pop-big-bg dis-f jus-x al-item">
<div class="user-liner-box dis-f al-item">
<div class="pop-big-box" v-show="concatData.data && concatData.data.count > 1"
:class="{'third-concat':concatData.data&&concatData.data.count===3?!concatData.data.wechatdata.url:concatData.data&&concatData.data.count>3}">
<div class="pop-info-box dis-f jus-x al-item"
:class="{'third-concat':concatData.data&&concatData.data.count===3?!concatData.data.wechatdata.url:concatData.data&&concatData.data.count>3}">
<div class="pop-big-bg dis-f jus-x al-item"
:class="{'third-concat':concatData.data&&concatData.data.count===3?!concatData.data.wechatdata.url:concatData.data&&concatData.data.count>3}">
<div class="user-liner-box dis-f al-item" :class="{'jus-bet':concatData.data&&concatData.data.count>2}" >
<!-- class='s-w-100' -->
<div style="padding:0 0 30px 0;">
<div style="padding:0 0 30px 0;" :class="[{'s-w-100':concatData.data && concatData.data.count === 2}]">
<div class="liner-title">
联系方式
</div>
<div class="whatsapp-box">
<div class="whatsapp-box" v-if="concatData.data && concatData.data.wechat&&concatData.data.count > 2">
<div class="dis-f al-item">
<img src="../assets/img/detail/wxIcon.png" class="whatsapp-icon" alt="">
微信
</div>
<div class="dis-f al-item box-text mg-l-35">
987654321
<div class="clone-btn dis-f al-item jus-x mg-l-70">
<div style="width:120px;">
{{ concatData.data && concatData.data.wechat }}
</div>
<div class="clone-btn dis-f al-item jus-x mg-l-50" @click.stop="clone(concatData.data.wechat)">
<img src="../assets/img/detail/cloneIcon.png" class="icon" alt="">
复制
</div>
</div>
</div>
<div class="whatsapp-box">
<div class="whatsapp-box" v-if="concatData.data && concatData.data.whatsapp&&concatData.data.count > 2">
<div class="dis-f al-item">
<img src="../assets/img/detail/WhatsAppIcon.png" class="whatsapp-icon" alt="">
WhatsApp
</div>
<div class="dis-f al-item box-text mg-l-35">
987654321
<div class="clone-btn dis-f al-item jus-x mg-l-70">
<div style="width:120px;">
{{ concatData.data && concatData.data.whatsapp }}
</div>
<div class="clone-btn dis-f al-item jus-x mg-l-50" @click.stop="clone(concatData.data.whatsapp)">
<img src="../assets/img/detail/cloneIcon.png" class="icon" alt="">
复制
</div>
</div>
</div>
<!-- <div class="whatsapp-box">
<div class="whatsapp-box" v-if="concatData.data && concatData.data.tel&&concatData.data.count > 2">
<div class="dis-f al-item">
<img src="../assets/img/detail/phoneIcon.png" class="whatsapp-icon" alt="">
电话号码
</div>
<div class="dis-f al-item box-text mg-l-35">
987654321
<div class="clone-btn dis-f al-item jus-x mg-l-70">
<div style="width:120px;">
{{ concatData.data && concatData.data.tel }}
</div>
<div class="clone-btn dis-f al-item jus-x mg-l-50"
@click.stop="clone(concatData.data.tel)">
<img src="../assets/img/detail/cloneIcon.png" class="icon" alt="">
复制
</div>
</div>
</div> -->
<!-- <div class="dis-f jus-x al-item whatsapp-wx-box s-w-100">
</div>
<div class="dis-f jus-x al-item whatsapp-wx-box s-w-100"
v-if="concatData.data && concatData.data.count === 2 && concatData.data.wechatdata.aid!==0">
<div>
<div>
WhatsApp
<div v-if="concatData.data.whatsapp">
WhatsApp
</div>
<div v-if="concatData.data.tel">
电话
</div>
<div v-if="concatData.data.wechat">
微信
</div>
</div>
<div class="text-s">
987654321
{{ concatData.data.whatsapp || concatData.data.tel || concatData.data.wechat || '' }}
</div>
<div class="dis-f jus-x al-item mg-t-60">
<div class="clone-btn dis-f al-item jus-x">
<div class="clone-btn dis-f al-item jus-x" @click.stop="clone(concatData.data.whatsapp || concatData.data.tel || concatData.data.wechat || '')">
<img src="../assets/img/detail/cloneIcon.png" class="icon" alt="">
复制
</div>
@ -541,10 +571,11 @@
</div>
<div class="liner"></div>
<div>
<div class="wx-qrcode-s">
<img src="" class="user-img" alt="">
<div class="wx-qrcode-s dis-f jus-x al-item">
<img :src="concatData.data && concatData.data.wechatdata.url" class="user-img"
alt="">
</div>
<div style="margin-top:15px;font-size:14px;">
<div style="margin-top:15px;font-size:14px;text-align: center;">
<div>
微信扫码添加好友
</div>
@ -553,13 +584,13 @@
</div>
</div>
</div>
</div> -->
</div>
<!-- <div>
<div class="wx-qrcode-s">
<img src="" class="user-img" alt="">
</div>
<div style="margin-top:15px;font-size:14px;">
</div>
<div v-if="concatData.data && concatData.data.count > 2&&concatData.data.wechatdata.url">
<div class="wx-qrcode-s">
<img :src="concatData.data && concatData.data.wechatdata.url" class="user-img" alt="">
</div>
<div style="margin-top:15px;font-size:14px;text-align: center;">
<div>
微信扫码添加好友
</div>
@ -567,8 +598,9 @@
备注寄托租房
</div>
</div>
</div> -->
<div class="round dis-f jus-x al-item">
</div>
<div class="round dis-f jus-x al-item"
v-if="concatData.data && !concatData.data.wechatdata.url">
<div class="deepen dis-f jus-x al-item">
<div class="center-box dis-f jus-x al-item">
<div class="center-s dis-f jus-x al-item">
@ -580,15 +612,26 @@
</div>
</div>
</div>
<!-- <img src="../assets/img/detail/threePopBigBg.svg" class="pop-bg third-bg" alt="">
<img src="../assets/img/detail/threePopbigMap.svg" style="width:700px;" class="map third-bg" alt=""> -->
<img src="../assets/img/detail/popBigBg.svg" class="pop-bg third-bg" alt="">
<img src="../assets/img/detail/popBigBgMap.svg" class="map third-bg" alt="">
<img src="../assets/img/detail/threePopBigBg.svg" class="pop-bg third-bg" style="width:700px;" alt=""
v-if="concatData.data&&concatData.data.count===3?!concatData.data.wechatdata.url:concatData.data&&concatData.data.count>3">
<img src="../assets/img/detail/threePopbigMap.svg" style="width:700px;"
v-if="concatData.data&&concatData.data.count===3?!concatData.data.wechatdata.url:concatData.data&&concatData.data.count>3"
class="map third-bg" alt="">
<img src="../assets/img/detail/popBigBg.svg"
v-if="concatData.data&&concatData.data.count===3?concatData.data.wechatdata.url:concatData.data&&concatData.data.count<3"
class="pop-bg third-bg" alt="">
<img src="../assets/img/detail/popBigBgMap.svg"
v-if="concatData.data&&concatData.data.count===3?concatData.data.wechatdata.url:concatData.data&&concatData.data.count<3"
class="map third-bg" alt="">
</div>
</div>
<img src="../assets/img/detail/bigPopBg.svg" class="pop-big-bg" alt="">
<!-- <img src="../assets/img/detail/threeConcatBG.svg" class="third-concat" alt=""> -->
<img src="../assets/img/detail/close.png" class="close-img" alt="">
<img src="../assets/img/detail/bigPopBg.svg"
v-if="concatData.data&&concatData.data.count===3?concatData.data.wechatdata.url:concatData.data&&concatData.data.count<3"
class="pop-big-bg" alt="">
<img src="../assets/img/detail/threeConcatbgImg.svg"
v-if="concatData.data&&concatData.data.count===3?!concatData.data.wechatdata.url:concatData.data&&concatData.data.count>3"
class="third-concat" alt="">
<img src="../assets/img/detail/close.png" class="close-img" @click="showConcat=false" alt="">
</div>
<!-- 一种信息 -->
<div class="pop" v-show="concatData.data && concatData.data.count === 1">
@ -598,7 +641,7 @@
<div class="title s-w-100">
联系方式
</div>
<div class="s-w-100 mg-t-35" v-if="concatData.data && concatData.data.wechatdata">
<div class="s-w-100 mg-t-35" v-if="concatData.data && concatData.data.wechatdata.aid != 0">
<div class="wx-qrcode s-w-100 dis-f al-item jus-x">
<img :src="concatData.data && concatData.data.wechatdata.url" class="img" alt="">
</div>
@ -611,17 +654,25 @@
</div>
</div>
</div>
<div class="s-w-100" v-if="concatData.data && concatData.data.whatsapp">
<div class="whatsapp-title">
<div class="s-w-100"
v-if="concatData.data && (concatData.data.whatsapp || concatData.data.tel || concatData.data.wechat)">
<div class="whatsapp-title" v-if="concatData.data.whatsapp">
WhatsApp
</div>
<div class="whatsapp-title" v-if="concatData.data.tel">
电话
</div>
<div class="whatsapp-title" v-if="concatData.data.wechat">
微信
</div>
<div class="whatsapp-text">
987654321
{{ concatData.data.whatsapp || concatData.data.tel || concatData.data.wechat || '' }}
</div>
</div>
<div class="s-w-100 dis-f jus-x al-item mg-t-35">
<div class="clone-btn dis-f al-item jus-x"
v-if="concatData.data && concatData.data.whatsapp">
v-if="concatData.data && (concatData.data.whatsapp || concatData.data.tel || concatData.data.wechat)"
@click.stop="clone(concatData.data.whatsapp || concatData.data.tel || concatData.data.wechat)">
<img src="../assets/img/detail/cloneIcon.png" class="icon" alt="">
复制
</div>
@ -631,7 +682,7 @@
<img src="../assets/img/detail/popSbgMap.svg" class="pop-bg-s" alt="">
</div>
</div>
<img src="../assets/img/detail/close.png" class="close-img" alt="">
<img src="../assets/img/detail/close.png" @click="showConcat=false" class="close-img" alt="">
<img src="../assets/img/detail/popBg.svg" class="img" alt="">
</div>
</div>
@ -652,6 +703,7 @@ import watchImage from '../components/detail/imageWatch.vue'
import breadcrumb from '../components/detail/breadcrumb.vue'
import mapInfo from '../components/public/viewMap.vue'
import { ElMessage } from 'element-plus'
import { useRouter } from 'vue-router'
import indexWaterfallBox from "../components/indexWaterfallBox/indexWaterfallBox.vue";
import Masonry from 'masonry-layout';
import transmitBtn from '@/components/public/transmitBtn.vue'
@ -662,6 +714,7 @@ import store from '@/store';
let loadMore = ref(true)
//
let pages = ref(1)
let uniqid = ref('')
//
let imageShow = ref(false)
let cloaseImageShow = () => {
@ -714,8 +767,8 @@ let distanceList = ref([])
//
let setDistanceList = (text = '') => {
if (!text) return text
let oRegExp = new RegExp(/\d+\.\d+/, "g");
text = text.replace(/\d+\.\d+/g, `<span style="font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
let oRegExp = new RegExp(/\d+(\.\d+)?/, "g");
text = text.replace(/\d+(\.\d+)?/g, `<span style="font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
font-weight: 400;font-style: normal;
font-size: 14px;
color: #62B1FF;
@ -773,7 +826,7 @@ let concatInfo = reactive({})
let setHousingArr = () => {
let arr = []
arr = housingInfo['data'].info.video ? arr.concat(housingInfo['data'] && housingInfo['data'].info.video) : []
arr = arr.concat(housingInfo['data'] && housingInfo['data'].info.picturegroup)
arr = housingInfo['data'].info.picturegroup ? arr.concat(housingInfo['data'] && housingInfo['data'].info.picturegroup) : []
imgList.value = imgList.value.concat(arr)
imgList.value = imgList.value.concat(arr)
}
@ -798,7 +851,7 @@ let setNavigation = () => {
//
let getHousingInfo = () => {
api.details({
uniqid: '44qeSnfmf9GD'
uniqid: uniqid.value
}).then(res => {
console.log(res)
if (res.code === 200) {
@ -841,6 +894,7 @@ let setOperation = () => {
let concatData = reactive({})
let getConcatData = () => {
showConcat.value = true
console.log(concatData['data'])
if (concatData['data']) return
api.contactData({
token: housingInfo['data'].token
@ -850,7 +904,8 @@ let getConcatData = () => {
concatData['data'] = res.data
let dataCount = 0
Object.keys(concatData['data']).map(res => {
if (concatData['data'][res]) {
console.log(res === 'wechatdata' && concatData['data'][res].aid != 0)
if ((concatData['data'][res] && res != 'wechatdata') || (res === 'wechatdata' && concatData['data'][res].aid != 0)) {
dataCount++
}
})
@ -888,6 +943,7 @@ const onPageSrcoll = (e) => {
if (loadMore.value) {
loadMore.value = false
pages.value += 1
recommendList()
}
}
}
@ -902,13 +958,14 @@ let loadText = ref('加载中......')
let recommendList = () => {
api.recommendList({
page: pages.value,
limit: 10,
limit: 30,
type: 'nearby',
pagevalue: pagevalue.value,
token: housingInfo['data'].token
}).then(res => {
console.log(res)
if (res.code === 200) {
if(res.data.length===0)return
if (res.data.pagevalue) {
recommendListData.value = recommendListData.value.concat(res.data.data)
pagevalue.value = res.data.pagevalue
@ -920,8 +977,6 @@ let recommendList = () => {
loadText.value = '到底了'
}
nextTick(() => {
console.log(recommendListData.value)
masonryInstance.reloadItems();
masonryInstance.layout();
@ -942,11 +997,15 @@ let recommendList = () => {
//
const gridContainer = ref(null);
let masonryInstance = null
let router = useRouter()
onMounted(() => {
let { id } = router.currentRoute.value.query
uniqid.value = id
getHousingInfo()
masonryInstance = new Masonry(gridContainer.value, {
itemSelector: '.waterfall-box',
gutter: 20
gutter: 10
});
setTimeout(() => {
window.addEventListener('scroll', onPageSrcoll, true);
@ -1014,6 +1073,16 @@ img {
color: #333;
}
.bottom-tps {
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
font-weight: 400;
font-style: normal;
font-size: 14px;
color: #555555;
text-align: center;
padding: 30px 0;
}
.clone-btn {
width: 100px;
height: 32px;
@ -1202,8 +1271,8 @@ img {
margin-left: 35px;
}
.mg-l-70 {
margin-left: 70px;
.mg-l-50 {
margin-left: 50px;
}
.whatsapp-box {
@ -1597,6 +1666,8 @@ img {
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.117647058823529);
font-size: 14px;
padding: 30px 20px;
position: relative;
z-index: 666;
.detail-price-box {
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
@ -1999,7 +2070,7 @@ img {
position: absolute;
left: 0;
top: 110px;
z-index: 333;
z-index: 666;
width: 100%;
max-height: 610px;
overflow-y: scroll;
@ -2193,6 +2264,5 @@ img {
}
}
}
}
</style>
}</style>

View File

@ -2,9 +2,6 @@
<div>
<pageTopBar></pageTopBar>
<seachModule :getDataList="setSeachSelectData"></seachModule>
<div @click="btns">
1
</div>
<div class="dis-f jus-x al-item">
<div class="body-maxWidth mg-t-35">
<div class="dis-f jus-bet" v-show="dataList.data && dataList.data.length > 0">
@ -143,11 +140,6 @@ let downLoadMore = () => {
getDataList(seachSelectData.data)
})
}
let btns=()=>{
router.push({
path:'/detail'
})
}
//listImg
onMounted(() => {