app/pages/tabbar/home/template/tpl_search.vue

269 lines
8.1 KiB
Vue
Raw Normal View History

2025-03-14 16:27:50 +08:00
<template>
<div class="layout">
2025-04-25 18:20:19 +08:00
<div class="addres" @click="showPicker">
2025-04-30 14:42:40 +08:00
{{ cityOrCounty == "" ? "请选择" : strsplit(cityOrCounty) }}
2025-03-14 16:27:50 +08:00
</div>
2025-04-21 17:39:41 +08:00
<div class="search" @click="handleSearch">{{ res.list[0].title }}</div>
2025-03-24 10:53:42 +08:00
<div class="shop" @click="toshop"></div>
<m-city
:provinceData="list"
headTitle="区域选择"
ref="cityPicker"
@funcValue="getpickerParentValue"
pickerSize="3"
>
</m-city>
2025-03-14 16:27:50 +08:00
</div>
</template>
<script>
2025-03-24 10:53:42 +08:00
import config from "@/config/config";
import { postAdvertisementjw } from "@/api/home.js";
import gkcity from "@/components/m-city/m-city.vue";
import { Icon } from "uview-ui";
2025-03-14 16:27:50 +08:00
export default {
2025-03-24 10:53:42 +08:00
components: {
"m-city": gkcity,
Icon,
},
title: "搜索栏",
2025-03-14 16:27:50 +08:00
props: ["res"],
2025-03-24 10:53:42 +08:00
data() {
return {
location: null,
// 确保默认值正确读取
cityOrCounty: uni.getStorageSync("cityOrCounty") || "",
form: {},
list: [
{
id: "",
localName: "请选择",
children: [],
},
],
// 添加本地存储的经纬度
storedLat: uni.getStorageSync("latitude") || null,
storedLon: uni.getStorageSync("longitude") || null,
};
},
mounted() {
// 页面加载时,若本地有存储数据就使用
if (this.storedLat && this.storedLon) {
this.form.lat = this.storedLat;
this.form.lon = this.storedLon;
this.getAdvertisementByLocation();
}
// 确保地区名称也被读取
this.cityOrCounty = uni.getStorageSync("cityOrCounty") || "";
// this.getLocation();
},
2025-03-14 16:27:50 +08:00
methods: {
2025-04-30 14:42:40 +08:00
strsplit(str) {
let arr = str.split("");
return arr.slice(0, 3).join("")
},
2025-03-24 10:53:42 +08:00
toshop() {
uni.navigateTo({
url: "/pages/tabbar/cart/cartList",
});
},
// 三级地址联动回调
async getpickerParentValue(e) {
// 将需要绑定的地址设置为空,并赋值
this.form.consigneeAddressIdPath = [];
this.form.consigneeAddressPath = [];
let name = "";
e.forEach((item, index) => {
if (item.id) {
// 遍历数据
this.form.consigneeAddressIdPath.push(item.id);
this.form.consigneeAddressPath.push(item.localName);
name += item.localName;
this.form.___path = name;
}
if (index == e.length - 1) {
//如果是最后一个
let _town = item.children.filter((_child) => {
return _child.id == item.id;
});
this.form.lat = _town[0].center.split(",")[1];
this.form.lon = _town[0].center.split(",")[0];
}
});
2025-04-25 18:20:19 +08:00
2025-03-24 10:53:42 +08:00
const jwobj = {
longitude: Number(this.form.lon),
latitude: Number(this.form.lat),
};
const { data } = await postAdvertisementjw(jwobj);
if (data.success) {
// 确保保存的城市名称正确
this.cityOrCounty = this.form.consigneeAddressPath[2];
uni.setStorageSync("cityOrCounty", this.cityOrCounty);
// 存储经纬度
uni.setStorageSync("longitude", this.form.lon);
uni.setStorageSync("latitude", this.form.lat);
// 更新本地存储的经纬度
this.storedLat = this.form.lat;
this.storedLon = this.form.lon;
}
},
// 根据经纬度获取广告信息
async getAdvertisementByLocation() {
const jwobj = {
longitude: Number(this.storedLon),
latitude: Number(this.storedLat),
};
const { data } = await postAdvertisementjw(jwobj);
if (data.success) {
// 更新页面内容
}
},
showPicker() {
this.$refs.cityPicker.show();
},
2025-03-14 16:27:50 +08:00
handleSearch() {
uni.navigateTo({
url: "/pages/navigation/search/searchPage",
});
},
2025-03-24 10:53:42 +08:00
// async getLocation() {
// const permision = await import("@/js_sdk/wa-permission/permission.js");
// // #ifdef APP-PLUS
// if (plus.os.name == "iOS") {
// if (permision.judgeIosPermissionLocation()) {
// this.getLocationInfo();
// } else {
// this.refuseLocation();
// }
// } else {
// const result = await permision.requestAndroidPermission(
// "android.permission.ACCESS_FINE_LOCATION"
// );
// if (result == 1) {
// this.getLocationInfo();
// } else {
// this.refuseLocation();
// }
// }
// // #endif
// // #ifndef APP-PLUS
// this.getLocationInfo();
// // #endif
// },
// getLocationInfo() {
// uni.getLocation({
// type: "wgs84",
// success: async (resss) => {
// this.location = resss;
// console.log("当前位置:", resss);
// const jwobj = {
// latitude: resss.latitude,
// longitude: resss.longitude,
// };
// const { data } = await postAdvertisementjw(jwobj);
// if (data.success) {
// uni.request({
// url: `https://apis.map.qq.com/ws/geocoder/v1/?location=${resss.latitude},${resss.longitude}&key=${config.aMapKey}`,
// success: (res) => {
// console.log("腾讯地图API接口返回信息", res);
// this.cityOrCounty = res.data.result.address_component.district || res.data.result.address_component.city;
// uni.setStorageSync('cityOrCounty', this.cityOrCounty);
// // 存储经纬度
// uni.setStorageSync('longitude', resss.longitude);
// uni.setStorageSync('latitude', resss.latitude);
// // 更新本地存储的经纬度
// this.storedLat = resss.latitude;
// this.storedLon = resss.longitude;
// },
// fail: (error) => {
// uni.showToast({
// title: "获取位置信息失败222腾讯",
// icon: "none"
// });
// }
// });
// }
// },
// fail: (err) => {
// console.error("获取位置失败:", err);
// },
// });
// },
// refuseLocation() {
// uni.showModal({
// title: "温馨提示",
// content: "您已拒绝定位,请开启",
// confirmText: "去设置",
// success(res) {
// if (res.confirm) {
// //打开授权设置
// // #ifndef MP-WEIXIN
// uni.getSystemInfo({
// success(res) {
// if (res.platform == "ios") {
// //IOS
// plus.runtime.openURL("app-settings://");
// } else if (res.platform == "android") {
// //安卓
// let main = plus.android.runtimeMainActivity();
// let Intent = plus.android.importClass(
// "android.content.Intent"
// );
// let mIntent = new Intent("android.settings.ACTION_SETTINGS");
// main.startActivity(mIntent);
// }
// },
// });
// // #endif
// }
// },
// });
// },
2025-03-14 16:27:50 +08:00
},
};
</script>
<style lang="scss" scoped>
@import "./tpl.scss";
.search {
2025-03-24 10:53:42 +08:00
width: 68%;
height: 32px;
border-radius: 5px;
2025-03-14 16:27:50 +08:00
display: flex;
align-items: center;
justify-content: center;
background: #ededed;
}
.layout {
2025-03-28 16:05:11 +08:00
// background: #fff;
2025-03-24 10:53:42 +08:00
display: flex;
justify-content: space-between;
2025-04-25 18:20:19 +08:00
background: transparent;
2025-03-24 10:53:42 +08:00
}
.addres {
// width: 15%;
2025-04-30 14:42:40 +08:00
width: 42px;
2025-03-24 10:53:42 +08:00
height: 32px;
2025-04-30 14:42:40 +08:00
padding: 0px 0px 0px 10px;
// white-space: nowrap;
// overflow: hidden;
// text-overflow: ellipsis;
2025-04-25 18:20:19 +08:00
line-height: 32px;
2025-03-24 10:53:42 +08:00
}
.layout {
2025-03-28 16:05:11 +08:00
// background: #fff;
2025-04-25 18:20:19 +08:00
background: transparent;
2025-03-24 10:53:42 +08:00
display: flex;
justify-content: space-between;
}
.shop {
width: 10%;
height: 32px;
display: flex;
background: url("@/static/shop.png") no-repeat;
background-size: 100% 100%;
2025-03-14 16:27:50 +08:00
}
</style>