You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

497 lines
14 KiB
Vue

<template>
<div class="container" hover-class="none" :hover-stop-propagation="false">
<u-skeleton :loading="loading" :animation="true" border-radius="12"></u-skeleton>
<div class="g_p_10 g_pb_80 u-skeleton" :class="loading ? 'g_ml_10 g_mr_10' : ''"
style="min-height: calc(100vh - 30px)">
<!-- <div v-if="infoList.length > 0"> -->
<div class="sub g_bg_f g_radius_8 g_mb_10 flex_center g_p_10" hover-class="none" :data-item="item"
v-for="(item, index) in infoList" :key="index">
<div>
<div class="g_flex_row_between flex_center"
:class="item.classify == 1 ? 'g_fs_17 g_mb_10' : 'g_fs_15'">
<div class="flex-1 u-skeleton-rect">
<div class="g_fw_600 g_c_3 g_fs_18"
:style="{ width: loading ? 'calc(100vw - 240px)' : '' }">
{{ item.storeName || "-" }}
</div>
</div>
<div class="g_text_c g_radius_16 g_flex_column_center u-skeleton-rect"
:class="loading ? 'g_h_20 g_w_20' : 'g_h_32 g_w_32'" style="background-color: #e5f4ff"
hover-stop-propagation hover-class="thover">
<a :href="`tel:${item.phone}`" @click.stop="makePhoneCall" style="text-decoration: none"
hover-class="none">
<!-- @click.stop="makePhoneCall" -->
<div class="iconfont icon-a-dianhua1 g_fs_14 g_c_09f" :mark:tel="item.phone"
hover-class="none"></div>
</a>
</div>
</div>
<div v-if="item.classify == 1" hover-stop-propagation hover-class="thover"
@click.stop="goDetail(item.id)" :data-item="item">
<view v-if="item.imgList != ''" class="u-skeleton-rect" hover-class="none"
style="width: 100%; height: 200px; overflow: hidden" hover-stop-propagation="false">
<image :src="item.imgList[0]" mode="aspectFill"
style="width: 100%; height: 200px; display: block" class="db toppic"></image>
</view>
<!-- <swiper v-if="item.imgList != ''" style="width: 100%; height: 200px; overflow: hidden" :indicator-dots="true" indicator-color="rgba(0,0,0,.3)" :autoplay="true" :interval="5000" :circular="true" class="u-skeleton-rect">
<swiper-item class="" item-id="" v-for="(item, index) in item.imgList" :key="index">
<image :src="item" mode="aspectFill" style="width: 100%; height: 200px; display: block" class="db toppic"></image>
</swiper-item>
</swiper> -->
<div class="g_border_c_b g_mb_4" style="padding: 10px 0px">
<div class="container2 g_flex_row_between flex_center u-skeleton-rect">
<div class="content1 g_fs_16 g_flex_1" :class="{ expanded: true }">{{ item.desp }}</div>
<i class="iconfont icon-gengduo11 g_fs_12 g_c_9 g_ml_12" v-if="item.desp"></i>
</div>
</div>
</div>
<div hover-class="none">
<div class="g_flex_row_start flex_end flex_nw">
<div class="g_flex_1 g_mt_4">
<div class="g_fs_14 g_c_9 g_flex_row_start_none flex_center u-skeleton-rect"
style="width: calc(100vw - 150px)">
<i class="iconfont icon-dizhi1 g_fs_14 g_mr_4" style="line-height: 1"></i>
<div class="g_ell_1" style="width: calc(100vw - 150px)">
{{ item.address || "-" }}
</div>
</div>
<div class="g_fs_14 g_c_9 g_flex_row_start_none flex_center g_mt_8 u-skeleton-rect">
<i class="iconfont icon-lianxiren g_fs_14 g_mr_4"
style="line-height: 1; top: 1px"></i>门店联系人:
{{ item.userName || "-" }}
</div>
<div class="g_flex_row_start flex_nw flex_center g_radius_6 g_mt_8 u-skeleton-rect"
style="overflow: hidden;" @click.stop="showQRCode(item)"
hover-stop-propagation hover-class="thover">
<div class="g_bg_09f g_flex_row_center flex_center g_pl_4 g_pr_4 g_pt_2 g_pb_2">
<i class="iconfont icon-weixindibulan g_c_f"></i>
</div>
<div class="g_p_2 g_pr_6 g_fs_12 g_pl_4 g_c_9"
style="background-color: #e5f4ff; border-radius: 0 6px 6px 0">添加门店微信</div>
</div>
</div>
<div class="g_radius_20 g_p_6 g_c_9 g_fs_12 g_flex_row_center flex_center u-skeleton-rect"
:class="loading ? 'g_h_20 g_w_40' : ''" :mark:address="item" @click.stop="goMap"
style="background-color: #e5f4ff; overflow: hidden" hover-stop-propagation
hover-class="thover">
<i class="iconfont icon-daohang1 g_fs_18 g_mr_4 g_c_09f"></i>
{{ item.distance || "-" }}
</div>
<!-- <div class="g_mt_4 g_text_c" hover-class="thover" :hover-stop-propagation="false">
<image class="dhImg" :mark:address="item" @click.stop="goMap" src="//matripe-cms.oss-cn-beijing.aliyuncs.com/pugongying/daohang.svg"></image>
</div> -->
</div>
</div>
</div>
</div>
<!-- </div> -->
<div v-if="infoList.length <= 0" style="margin-top: 120px">
<g-empty text="暂无门店"></g-empty>
<!-- <div class style="text-align: center" hover-class="none" :hover-stop-propagation="false">
<div class="t-icon t-icon-zanwu" style="width: 80px; height: 80px; margin: 180px auto 20px"></div>
<div class="g_text_c g_fs_14 c045">暂无门店</div>
</div> -->
</div>
</div>
<u-popup v-model="connectModalShow" mode="center" :closeable="true" border-radius="16" width="80%"
:mask-close-able="true">
<div class="g_text_c">
<div class="g_pt_32 g_fw_600 g_pb_24 g_fs_18">联系我们</div>
<div class="g_pb_4 g_fs_14 g_c_6">门店联系人: {{ currentStore.userName }}</div>
<div class="g_pb_32 g_fs_14 g_c_6" @click.stop="makePhoneCall" :mark:tel="currentStore.phone">联系电话:
{{ currentStore.splitPhone }}</div>
<image class="g_w_184 g_h_184" :src="currentStore.userQrcode" mode="aspectFit|aspectFill|widthFix"
lazy-load="false" binderror="" bindload="" show-menu-by-longpress> </image>
<div class="g_mt_16 g_fs_14 g_pb_32 g_fw_600">长按识别二维码</div>
</div>
</u-popup>
</div>
</template>
<script>
const app = getApp();
var QQMapWX = require("../../utils/qqmap-wx-jssdk.min.js");
// const commonUtil = require("../../utils/commonUtil");
// pages/company/company/index.js
export default {
onShareAppMessage() {
return this.G.shareFun();
},
data() {
return {
// isExpanded: false,
loading: true,
storeInfo: {},
infoList: ["", "", "", ""],
agencyId: uni.getStorageSync("apply-agencyId"),
connectModalShow: false,
qqmapsdk: null, // 地图插件实例
currentInfo: {}, // 用户当前位置信息
currentStore: {},
};
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let that = this;
// console.log(JSON.parse(localStorage.getItem("apply-agencyId")));
this.qqmapsdk = new QQMapWX({
key: "LHQBZ-MLTEG-BO4QK-QJ2TH-NLGZJ-7GFAS",
});
// #ifdef MP-WEIXIN
that.getLocation().then(() => {
that.getInfo();
});
// #endif
// #ifdef H5
that.getInfo();
// #endif
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
let that = this;
if (typeof that.$mp.page.getTabBar === 'function' && that.$mp.page.getTabBar()) {
that.$mp.page.getTabBar().setData({
selected: 1,
isShow:true
})
}
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {},
computed: {},
methods: {
getLocation() {
let that = this;
return new Promise((resolve, reject) => {
uni.authorize({
// 检测是否授权位置信息
scope: "scope.userLocation",
success() {
console.log("用户成功授权位置信息");
uni.getLocation({
type: "wgs84",
success(res) {
console.log(res);
that.currentInfo = {
latitude: res.latitude,
longitude: res.longitude,
};
console.log("that.currentInfo", that.currentInfo);
},
fail(err) {
console.log(err);
},
complete() {
console.log();
resolve();
},
});
},
fail(err) {
console.log(err);
console.log("用户拒绝授权位置信息,再次提示用户授权");
uni.showToast({
title: "请开启定位权限以显示距店铺距离",
icon: "none",
});
resolve();
// that.showRefuseLocationPermission();
},
complete() {
console.log();
// resolve();
},
});
});
},
toggleExpand() {
this.isExpanded = !this.isExpanded;
},
goDetail(id) {
console.log("0000");
// if (e.currentTarget.dataset.item.id) {
if (id) {
uni.navigateTo({
url: "/root/detail/company?id=" + id,
});
}
// }
// uni.navigateTo({
// url: "/root/detail/company?id=" + e.currentTarget.dataset.item.id,
// });
},
goMap(e) {
console.log(e.mark.address);
let that = this;
var detail = e.mark.address;
if (that.currentInfo.longitude) {
uni.openLocation({
latitude: Number(detail.lat),
longitude: Number(detail.lng),
name: detail.storeName,
address: detail.address,
scale: 12,
});
} else {
uni.openSetting({
// 显示授权页面
success: (res) => {
console.log("打开设置成功", res);
if (res.authSetting["scope.userLocation"]) {
console.log("成功授权userLocation");
that.getLocation().then(() => {
that.getInfo();
});
}
},
fail: (err) => {
console.log("打开设置失败", err);
},
});
}
},
/**
* 获取企业信息
*/
getInfo() {
let that = this;
return that.G.Post(
that.api.company_list, {
pageSize: 100,
pageNum: 1,
keys: "",
// agencyId: uni.getStorageSync("AGENCY_ID"),
},
(res) => {
console.log(res);
let temp = false;
this.loading = false;
res.recordList.forEach((item) => {
console.log("that.currentInfo", that.currentInfo.longitude);
if (that.currentInfo.longitude) {
let dis = that.gpsDistance([that.currentInfo.longitude, that.currentInfo
.latitude
], [item.lng, item.lat]);
if (dis < 1000) {
item.distance = dis.toFixed(1) + "m";
} else if (dis > 1 * 1000 * 1000) {
item.distance = "999+km";
} else {
item.distance = (dis / 1000).toFixed(1) + "km";
}
item.dis = dis;
} else {
item.distance = "-km";
}
const content = item.desp || "对方还未介绍自己";
item.imgList = item.imgs.split(",");
console.log(item.distance);
});
// res.recordList.sort((a, b) => {
// return a.dis - b.dis;
// });
console.log("that.infoList", res.recordList);
that.infoList = res.recordList;
/* let num = 0;
let timer = setInterval(() => {
if (that.currentInfo && num < that.infoList.length) {
that.getDistance(that.infoList, num);
num++;
} else {
that.$forceUpdate();
clearInterval(timer);
}
}, 500); */
}
);
},
angle2rad(d) {
return (d * Math.PI) / 180.0;
},
gpsDistance(p1, p2) {
var lat1 = this.angle2rad(p1[1]);
var lat2 = this.angle2rad(p2[1]);
var a = lat1 - lat2;
var b = this.angle2rad(p1[0]) - this.angle2rad(p2[0]);
var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(lat1) * Math.cos(lat2) *
Math.pow(Math.sin(b / 2), 2)));
return distance * 6378137;
},
// 计算距离
getDistance(list, ind) {
let that = this;
that.G.Post(
"https://apis.map.qq.com/ws/distance/v1/matrix?mode=driving", {
key: "LHQBZ-MLTEG-BO4QK-QJ2TH-NLGZJ-7GFAS",
from: that.currentInfo.latitude + "," + that.currentInfo.longitude,
to: list[ind].lat + "," + list[ind].lng,
},
(res) => {
console.log("res", res);
let arr = res.result.rows[0].elements[0];
console.log(arr);
let distance = arr.distance;
console.log(distance);
if (distance < 1000) {
list[ind].distance = distance + "m";
} else if (distance > 1 * 1000 * 1000) {
list[ind].distance = "999+km";
} else {
list[ind].distance = (distance / 1000).toFixed(2) + "km";
}
console.log(" this.infoList", that.infoList);
}
);
},
/**
* 拨打电话
*/
makePhoneCall(e) {
var that = this;
if (!e.mark.tel) {
uni.showToast({
title: "暂无联系方式",
icon: "none",
});
return;
}
uni.makePhoneCall({
phoneNumber: e.mark.tel,
});
},
showQRCode(item) {
console.log(item);
this.connectModalShow = true;
this.currentStore = {
...item,
splitPhone: this.G.splitPhone(item.phone),
};
console.log("this.currentStore", this.currentStore);
},
},
};
</script>
<style scoped lang="less">
.container2 {
// display: flex;
// flex-direction: column;
// align-items: center;
}
.lists {
margin: 10px 0;
}
.content1 {
max-height: 45px;
// margin-top: 8px;
/* */
overflow: hidden;
transition: max-height 0.3s ease-in-out;
white-space: initial;
width: 100%;
color: #333;
display: -webkit-box;
-webkit-line-clamp: 2;
/* */
-webkit-box-orient: vertical;
}
.expanded {
max-height: none;
/* */
}
.expand-button1 {
text-align: center;
margin-top: 8px;
color: #999;
// cursor: pointer;
}
.container {
position: relative;
background-color: #f5f5f5;
min-height: 100vh;
overflow: hidden;
}
.servicebox {
padding: 10px;
background-color: #fff;
}
.servicebox .serviceinfo image {
width: 52px;
height: 52px;
}
.servicebox .serviceBottom {
height: 48px;
line-height: 48px;
width: 100%;
justify-content: space-between;
}
.servicebox .serviceBottom>div {
flex: 1;
justify-content: space-between;
padding: 0 10px 0 16px;
}
.icon-dianhua {
position: relative;
width: 28px;
height: 28px;
border-radius: 50%;
background-color: var(--color-ysd-bg);
color: var(--color-hover);
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
float: right;
}
.dhImg {
width: 24px;
height: 24px;
// margin-top: 8px;
}
.sub {
margin-bottom: 10px;
}
</style>