java-mall-app/member/address/manage.vue
2025-04-24 15:47:08 +08:00

1597 lines
39 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="view-main liu-chooseAddress-container">
<view class="hander" v-if="showSearchIpunt">
<uni-nav-bar
title=""
:fixed="true"
:statusBar="false"
:border="false"
:left-width="'132rpx'"
:right-width="'0rpx'"
>
<block slot="left">
<view class="left-block" @click="handerSkip">
<text class="iconfontAili icon-dingwei1"></text>
<text class="city-block">{{
originalData.result.addressComponent.city
}}</text>
<text class="iconfontAili icon-xiala"></text>
</view>
</block>
<view class="input-view">
<uni-icons
type="search"
size="22"
color="#666666"
style="line-height: 60rpx"
/>
<input
confirm-type="search"
class="input"
type="text"
placeholder="请输入收货地址"
@click="onSearch"
@input="handerAddress"
/>
</view>
</uni-nav-bar>
</view>
<map
v-if="!showSearchAddress && !isFound"
:latitude="latitude"
:longitude="longitude"
:scale="16"
style="width: 100%; height: 100vh; top: -200px"
ref="map"
id="map"
:enable-zoom="isEnableScroll"
:enable-scroll="isEnableScroll"
:markers="markers"
@regionchange="handerRegionchange"
>
<image class="map-marker" v-if="isDragMarker" :src="markerIcon"></image>
</map>
<view class="page-con" v-if="!showPoisList && !showSearchAddress">
<view class="con-hd" v-if="showCurrAdd">
<view class="current-block-left">
<view class="current-name">{{ currAddress }}</view>
<view class="current-address">{{ currRoadAddress }}</view>
</view>
<view class="current-block-right" @click="chooseAddressView">
<view class="btn-edit-block">修改地址</view>
</view>
</view>
<view class="con-bd">
<view
class="choose-address"
@click="chooseAddressView"
v-if="showSelectAddBtn"
>
选择收货地址<text class="iconfontAili icon-right"></text>
</view>
<view class="con-bd-item">
<view class="con-bd-item-name">门牌号</view>
<view class="con-bd-item-con">
<input
type="text"
v-model="formData.detailAddress"
placeholder="详细地址例如1层101室"
placeholder-class="input-placeholder"
/>
</view>
</view>
<view class="con-bd-item">
<view class="con-bd-item-name">标签</view>
<view class="con-bd-item-con">
<view
:class="
formData.lableName == index
? 'lable-item lable-item-on'
: 'lable-item'
"
v-for="(item, index) in labelData"
:key="index"
@click="chooseLable(index)"
>{{ item }}</view
>
</view>
</view>
<view class="con-bd-item">
<view class="con-bd-item-name">联系人</view>
<view class="con-bd-item-con con-bd-item-con2">
<input
type="text"
v-model="formData.userName"
placeholder="请填写收货人姓名"
placeholder-class="input-placeholder"
/>
<view class="con-bd-sex-box" @click="chooseSex(1)">
<image
:class="['choose-sex-icon', formData.sexType == 1]"
:src="formData.sexType == 1 ? sele2Icon : noseleIcon"
mode=""
></image>
先生
</view>
<view class="con-bd-sex-box" @click="chooseSex(2)">
<image
class="choose-sex-icon"
:src="formData.sexType == 2 ? sele2Icon : noseleIcon"
mode=""
></image>
女士
</view>
</view>
</view>
<view class="con-bd-item">
<view class="con-bd-item-name">手机号</view>
<view class="con-bd-item-con">
<input
type="number"
maxlength="11"
v-model="formData.userPhone"
placeholder="请填写收货人手机号码"
placeholder-class="input-placeholder"
/>
</view>
</view>
<!-- <view class="con-bd-agree" @click="changeAgree">
<image
class="agreeicon"
:src="agreeState ? seleIcon : noseleIcon"
mode=""
></image>
<view class="agreetext">设为默认地址</view>
</view> -->
<view
:class="[
'con-ft-btn',
{
'con-ft-btn1': addressInfo && addressInfo.address,
'con-ft-btn3': !addressInfo || !addressInfo.address,
},
]"
@click="submitAddress"
>
保存地址
</view>
<view
v-if="ud_id"
class="con-ft-btn con-ft-btn2"
@click="deleteAddress"
>
删除地址
</view>
</view>
</view>
<view class="address-list" v-if="showPoisList && !showSearchAddress">
<scroll-view
class="uni-swiper-list"
scroll-y
:scroll-top="0"
enhanced
:show-scrollbar="false"
>
<view
class="address-item"
v-for="(item, index) of nearbyAddressList"
:key="index"
@click="handerSetAddress(item)"
>
<view class="item-left">
<view class="item-name">{{ item.name }}</view>
<view class="item-address">{{ item.addr }}</view>
</view>
<view class="item-right">
<image
class="item-active"
:src="acitveAddress(item)"
mode=""
></image>
</view>
</view>
</scroll-view>
<view
class="reposition-block"
v-if="showReposition"
@click="getLocation('found')"
>
<text class="iconfontAili icon-zhongxindingwei"></text>
</view>
<uMask
:show="showMask"
v-if="showMask"
:zIndex="2"
@click="showMask = false"
></uMask>
</view>
<scroll-view
v-if="showSearchAddress && searchAddress.length > 0"
class="uni-swiper-search-list"
scroll-y
scroll-with-animation="true"
:scroll-top="scrollTop"
>
<view class="search-address-list">
<view
class="search-address-item"
v-for="(item, index) of searchAddress"
:key="index"
>
<view
class="search-address-item-left"
@click="handerSetAddress(item)"
>
<view class="item-left-name" v-html="item.searchName"></view>
<view class="item-left-address">{{
item.detailedInformation
}}</view>
</view>
<view class="search-address-item-right">{{ item.distance }}km</view>
</view>
</view>
</scroll-view>
</view>
</template>
<script>
import uMask from "./umask.vue";
import BMapLib from "../../helpers/GeoUtils.js";
import { mapState, mapMutations } from "vuex";
var bmap = require("../../libs/bmap-wx.js");
export default {
components: { uMask },
data() {
return {
map: null,
showMask: false,
originalData: {
result: {
addressComponent: {
city: "正在定位",
},
sematic_description: "定位中..",
},
},
nearbyAddressList: [],
formData: {
detailAddress: "",
userName: "",
userPhone: "",
lableName: null,
sexType: 1, //1 先生 2 女士
},
labelData: ["家", "公司", "学校"],
addressInfo: {}, //选中的地址信息
agreeState: false, //是否是默认地址
longitude: null,
latitude: null,
markerIcon: "/static/images/marker.png",
seleIcon: require("./static/sele.png"),
sele2Icon: "/static/images/sele2.png",
noseleIcon: require("./static/no-sele.png"),
oldObj: "",
showMarkerIcon: false,
showPoisList: false,
showSearchAddress: false,
searchAddress: [],
map_markers: [],
markers: [],
showSelectAddBtn: true,
showSearchIpunt: false,
showCurrAdd: false,
isDragMarker: false,
isEnableScroll: false,
showReposition: false,
currAddress: "",
currRoadAddress: "",
ud_id: null,
areaData: [],
cityData: [],
provinceData: [],
isFound: false,
issub: false,
options: {},
spid: "",
};
},
computed: {
...mapState([
"Config",
"StateCode",
"notice",
"plantformInfo",
"shopInfo",
"userInfo",
"hasLogin",
]),
},
onUnload() {
uni.removeStorageSync("city");
},
onShow(options) {
this.getAppDistrict();
let city = uni.getStorageSync("city");
if (city) {
this.originalData.result.addressComponent.city = city;
} else {
if (this.ud_id && this.ud_id != "-1") {
this.getCurrAddress();
} else {
this.getLocation();
}
}
},
onLoad(options) {
if (options.ud_id) {
this.ud_id = options.ud_id;
}
this.setData({
issub: options.issub,
ud_id: options.ud_id || 0,
spid: options.spid || "",
options: options,
});
},
methods: {
getAppDistrict() {
let that = this;
// 读取地区数据 【为了不同项目的小程序包体大小考虑,这里不能直接把数据放前端,可以使用服务端缓存和浏览器与小程序的本地存储来优化】
let district_data = uni.getStorageSync("district_data");
if (!district_data) {
that.$.request({
url: that.cf.URL.getAppDistrict,
data: {},
loading: false,
ajaxCache: {
timeout: this.cf.CACHE_EXPIRE,
},
success: function (data, status, msg, code) {
if (status == 200) {
uni.setStorageSync("district_data", data);
that.setDistrictData(data);
}
},
});
} else {
that.setDistrictData(district_data);
}
},
setDistrictData(district_data) {
this.provinceData = district_data.provinceData;
this.cityData = district_data.cityData;
this.areaData = district_data.areaData;
},
getCurrAddress() {
let that = this;
var params = {
ud_id: that.ud_id,
};
that.$.request({
url: this.Config.URL.user.address_get,
data: params,
success: function (data, status, msg, code) {
if (status == 200) {
that.formData.detailAddress = data.ud_street_no;
that.formData.userName = data.ud_name;
that.formData.userPhone = data.ud_mobile;
that.formData.lableName = data.ud_label - 1;
that.formData.sexType = data.ud_gender;
let item = {
name: data.ud_marker,
location: {
lat: data.ud_latitude,
lng: data.ud_longitude,
},
addr: data.ud_street_addr,
};
that.handerSetAddress(item);
let moveMarke = {
id: 94,
latitude: data.ud_latitude,
longitude: data.ud_longitude,
iconPath: that.markerIcon,
width: 20,
height: 30,
};
that.$nextTick(() => {
that.markers.push(moveMarke);
});
}
},
});
},
getBaiduOriginalData(location, type, type2) {
let that = this;
let BMap = new bmap.BMapWX({
ak: "LkqqCMB1qZmjYEkzx0Y1PTfmAUrkWPog",
});
if (type2 == "found") {
that.isFound = true;
uni.removeStorageSync("city");
}
let fail = function (res) {
console.log("fail", res);
};
let success = function (res) {
that.latitude = res.originalData.result.location.lat;
that.longitude = res.originalData.result.location.lng;
console.log(that.latitude, that.longitude);
that.originalData = res.originalData;
let city = uni.getStorageSync("city");
if (city) {
that.originalData.result.addressComponent.city = city;
}
let array = res.originalData.result.pois;
let nearbyObject = array.find((item) => item.distance === "附近");
let numericDistances = array.filter((item) => item.distance !== "附近");
numericDistances.sort(
(a, b) => parseInt(a.distance, 10) - parseInt(b.distance, 10)
);
if (nearbyObject) {
that.nearbyAddressList = [nearbyObject, ...numericDistances];
} else {
that.nearbyAddressList = numericDistances;
}
if (that.markers.length > 0 && that.isFound) {
let item = that.nearbyAddressList[0];
that.markers[0].latitude = that.latitude;
that.markers[0].longitude = that.longitude;
that.markers[1].latitude = that.latitude;
that.markers[1].longitude = that.longitude;
that.markers[0].callout = {
content: item.name,
color: "#000",
fontSize: 14,
borderRadius: 6, //边框圆角
bgColor: "#fff",
borderWidth: 1,
borderColor: "rgba(0, 0, 0, 0.4)",
padding: 8,
display: "ALWAYS",
textAlign: "center",
};
that.currAddress = "";
}
that.isFound = false;
};
BMap.regeocoding({
location: location,
coordtype: type,
ret_coordtype: "gcj02ll",
fail: fail,
success: success,
});
},
handerSetAddress(item) {
let that = this;
that.showMarkerIcon = true;
that.showCurrAdd = true;
that.showMask = false;
that.showSearchAddress = false;
that.showPoisList = false;
that.showSelectAddBtn = false;
that.showSearchIpunt = false;
that.isEnableScroll = false;
that.showReposition = false;
that.currAddress = item.name;
that.isDragMarker = false;
that.currRoadAddress = item.addr
? item.addr
: item.province + item.address.replace(/-/g, "");
var location = item.location
? item.location.lat + "," + item.location.lng
: item.point.y + "," + item.point.x;
that.getBaiduOriginalData(location, "gcj02ll");
},
onSearch() {
this.showMask = true;
},
handerSkip() {
uni.navigateTo({
url: `/address/selectCity?isAdd=true`,
});
},
// 地图移动时
handerRegionchange(e) {
console.log(e);
if (e.type == "begin" && this.markers.length > 0) {
if (this.showPoisList) {
this.isDragMarker = true;
}
this.markers[0].latitude = 0;
this.markers[0].longitude = 0;
this.markers[0].iconPath = "";
if (!this.isDragMarker && this.showCurrAdd) {
this.clearMarkes();
}
console.log("触发了begin");
}
if (e.type == "end" && this.showMarkerIcon && !this.showCurrAdd) {
console.log("触发了:", "end");
if (!e.target.centerLocation) return;
console.log(e.target.centerLocation);
this.isDragMarker = false;
let { latitude, longitude } = e.target.centerLocation;
if (this.markers.length > 0) {
this.markers[0].latitude = latitude;
this.markers[0].longitude = longitude;
this.markers[0].iconPath = this.markerIcon;
}
let location = latitude + "," + longitude;
let that = this;
let BMap = new bmap.BMapWX({
ak: "LkqqCMB1qZmjYEkzx0Y1PTfmAUrkWPog",
});
let fail = function (res) {
console.log("fail", res);
};
let success = function (res) {
console.log("结果地址", res);
that.originalData = res.originalData;
let array = res.originalData.result.pois;
let nearbyObject = array.find((item) => item.distance === "附近");
let numericDistances = array.filter(
(item) => item.distance !== "附近"
);
numericDistances.sort(
(a, b) => parseInt(a.distance, 10) - parseInt(b.distance, 10)
);
if (nearbyObject) {
that.nearbyAddressList = [nearbyObject, ...numericDistances];
} else {
that.nearbyAddressList = numericDistances;
}
let item = that.nearbyAddressList[0];
that.markers[0].callout = {
content: item.name,
color: "#000",
fontSize: 14,
borderRadius: 6, //边框圆角
bgColor: "#fff",
borderWidth: 1,
borderColor: "rgba(0, 0, 0, 0.4)",
padding: 8,
display: "ALWAYS",
textAlign: "center",
};
};
BMap.regeocoding({
location: location,
coordtype: "gcj02ll",
ret_coordtype: "gcj02ll",
fail: fail,
success: success,
});
}
},
//数据回显时使用此方法
// setData(obj) {
// this.oldObj = obj;
// this.formData.detailAddress = obj.detailAddress;
// this.formData.userName = obj.userName;
// this.formData.userPhone = obj.userPhone;
// this.formData.lableName = obj.lableName;
// this.formData.sexType = obj.sexType;
// this.addressInfo.title = obj.title;
// this.addressInfo.address = obj.address;
// this.addressInfo.latitude = obj.latitude;
// this.addressInfo.longitude = obj.longitude;
// this.agreeState = obj.agreeState;
// },
//获取当前的地理位置
getLocation(type) {
let that = this;
console.log(that.markers);
uni.showLoading({
title: "正在获取定位中...",
});
uni.getLocation({
type: "wgs84",
isHighAccuracy: true,
geocode: "true",
highAccuracyExpireTime: 3500,
success: (res) => {
uni.hideLoading();
var location = res.latitude + "," + res.longitude;
that.getBaiduOriginalData(location, "wgs84ll", type);
},
fail: (res) => {
if (res.errMsg == "getLocation:fail auth deny") {
uni.showModal({
content: "检测到您没打开获取信息功能权限,是否去设置打开?",
confirmText: "确认",
cancelText: "取消",
success: (res) => {
if (res.confirm) {
uni.openSetting({
success: (res) => {},
});
} else {
return false;
}
},
});
}
},
});
},
isValidPhoneNumber(phoneNumber) {
// 定义正则表达式,校验中国大陆手机号码
const phoneRegex = /^1[3-9]\d{9}$/;
return phoneRegex.test(phoneNumber);
},
fuzzyMatch(shortStr, longStr) {
if (!shortStr || !longStr) {
console.log("找不到地址");
return;
}
const lowerShortStr = shortStr.toLowerCase();
const lowerLongStr = longStr.toLowerCase();
return lowerShortStr.includes(lowerLongStr);
},
//保存地址
submitAddress() {
if (!this.currAddress) {
uni.showToast({
title: "请选择收货地址",
icon: "none",
});
return;
}
// if (!this.formData.detailAddress) {
// uni.showToast({
// title: "请输入门牌号",
// icon: "none",
// });
// return;
// }
if (!this.formData.userName) {
uni.showToast({
title: "请输入联系人",
icon: "none",
});
return;
}
if (!this.formData.userPhone) {
uni.showToast({
title: "请输入手机号",
icon: "none",
});
return;
}
let isValid = this.isValidPhoneNumber(this.formData.userPhone);
if (!isValid) {
uni.showToast({
title: "请输入正确的手机号",
icon: "none",
});
return;
}
let item = this.originalData;
let province = {
label: "",
value: 0,
};
let city = {
label: "",
value: 0,
};
let county = {
label: "",
value: 0,
};
this.provinceData.forEach((group) => {
let isFind = this.fuzzyMatch(
item.result.addressComponent.province,
group.label
);
if (isFind) {
province = group;
}
});
this.cityData.forEach((group) => {
group.forEach((group1) => {
let isFind = this.fuzzyMatch(
group1.label,
item.result.addressComponent.city
);
if (isFind) {
city = group1;
}
});
});
this.areaData.forEach((group) => {
group.forEach((group1) => {
group1.forEach((group2) => {
let isFind = this.fuzzyMatch(
group2.label,
item.result.addressComponent.district
);
if (isFind) {
county = group2;
}
});
});
});
let lableName = this.formData.lableName;
if (lableName === "" || lableName == -1) {
lableName = "";
} else {
lableName = lableName + 1;
}
let parms = {
ud_id: this.ud_id || 0,
ud_city: item.result.addressComponent.city,
ud_gender: this.formData.sexType,
ud_intl: "+86",
ud_mobile: this.formData.userPhone,
ud_name: this.formData.userName,
ud_marker: this.currAddress,
ud_street_addr: this.currRoadAddress,
ud_street_no: this.formData.detailAddress,
ud_latitude: this.latitude,
ud_longitude: this.longitude,
ud_label: lableName || "",
ud_province_id: province.value, // 省份ID
ud_province: province.label, // 省份名称
ud_city_id: city.value, // ud_city_id 城市ID
ud_city: city.label, // 城市名称
ud_county_id: county.value, // 区ID
ud_county: county.label, // 区名字
ud_address: this.currAddress + this.formData.detailAddress,
ud_is_default: 1,
};
let that = this;
var options = that.options;
this.$.request({
url: this.Config.URL.user.address_edit,
method: "post",
data: parms,
success: (data, status, msg, code) => {
if (status == 200) {
this.$.showToast({
title: "添加成功",
icon: "success",
duration: 2e3,
});
if (options.issub) {
that.$.navigateBack(1, function () {
options.ud_id = data.ud_id;
that.notice.postNotificationName("RefreshOrder", options);
});
} else {
that.$.navigateBack(1, function () {
that.notice.postNotificationName("RefreshAddress", 1);
});
}
}
},
});
},
//删除地址
deleteAddress() {
var that = this;
that.$.showModal({
title: that.__("提示"),
content: that.__("确认删除这个地址吗?"),
showCancel: true,
success: function (n) {
if (n.confirm) {
var params = {
ud_id: that.ud_id,
};
that.$.request({
url: that.Config.URL.user.address_remove,
method: "post",
data: params,
success: function (data, status, msg, code) {
if (200 == status) {
that.$.showToast({
title: that.__("删除成功!"),
});
that.notice.postNotificationName("RefreshOrder", 0);
uni.navigateBack();
}
},
});
}
},
});
},
//选择地址、修改编辑地址
chooseAddressView() {
this.showMarkerIcon = true;
this.showPoisList = true;
this.showSearchIpunt = true;
this.isEnableScroll = true;
this.showCurrAdd = false;
this.showReposition = true;
var item = {};
let group = this.nearbyAddressList.find(
(item) => item.name == this.currAddress
);
if (group) {
item = group;
} else {
item = this.nearbyAddressList[0];
}
let { x, y } = item.point;
console.log(x, y);
let moveMarke = {
id: 94,
latitude: y,
longitude: x,
iconPath: this.markerIcon,
width: 20,
height: 30,
callout: {
content: item.name,
color: "#000",
fontSize: 14,
borderRadius: 6, //边框圆角
bgColor: "#fff",
borderWidth: 1,
borderColor: "rgba(0, 0, 0, 0.4)",
padding: 8,
display: "ALWAYS",
textAlign: "center",
},
};
let currMarke = {
id: 2,
latitude: Number(this.latitude),
longitude: Number(this.longitude),
iconPath: this.sele2Icon,
width: 25,
height: 25,
};
let list = [];
list.push(moveMarke);
list.push(currMarke);
this.$nextTick(() => {
this.markers = list;
});
},
//联系人性别选择
chooseSex(type) {
this.formData.sexType = type;
},
clearMarkes() {
this.$nextTick(() => {
console.log(this.latitude, this.longitude);
this.markers[0].latitude = this.latitude;
this.markers[0].longitude = this.longitude;
this.markers[0].iconPath = this.markerIcon;
this.markers[0].callout = {};
if (this.markers[1]) {
this.markers[1].iconPath = "";
this.markers[1].latitude = 0;
this.markers[1].longitude = 0;
}
});
},
//标签选择
chooseLable(inedx) {
if (this.formData.lableName == inedx) {
this.formData.lableName = -1;
} else {
this.formData.lableName = inedx;
}
},
//点击隐私协议
changeAgree() {
this.agreeState = !this.agreeState;
},
acitveAddress(item) {
if (item.name == this.currAddress) {
return this.sele2Icon;
} else {
return this.noseleIcon;
}
},
// 搜索地址
handerAddress(e) {
let that = this;
let value = e.target.value;
if (value.length == 0) {
this.showSearchAddress = false;
} else {
this.showSearchAddress = true;
}
var fail = function (res) {
console.log("fail", res);
};
var currentPoint = {
lat: that.originalData.result.location.lat,
lng: that.originalData.result.location.lng,
};
var metersToKilometers = function (meters) {
let kilometers = meters / 1000;
// 保留两位小数
return kilometers.toFixed(2);
};
var success = function (res) {
console.log("结果地址", res);
if (res.data.status != 0) {
uni.showToast({
title: res.message,
icon: "none",
duration: 3000,
});
return;
}
that.searchAddress = res.data.result
.filter((item) => "location" in item)
.map((item) => {
let obj = {
...item,
name: item.name,
detailedInformation: item.address.replace(/-/g, ""),
distance: metersToKilometers(
BMapLib.GeoUtils.getDistance(currentPoint, item.location)
),
};
return obj;
});
console.log("that.searchAddress", that.searchAddress);
that.searchAddress.forEach((item) => {
if (item.name.indexOf(value) >= 0) {
item.searchName = item.name.replaceAll(
value,
"<font style='color:#ee852f;padding:0 4px'>" + value + "</font>"
);
} else {
item.searchName = item.name;
}
});
console.log("searchAddress", that.searchAddress);
};
let params = {
query: value,
region: this.originalData.result.addressComponent.city,
output: "json",
city_limit: true,
ak: "qWKt2xbrqXsp2yK35YYXVBNZgrbiCG5v",
ret_coordtype: "gcj02ll",
};
let city = that.originalData.result.addressComponent.city;
if (city) {
params.center = "";
}
if (this.time !== null) {
clearTimeout(this.time);
}
this.time = setTimeout(() => {
uni.request({
url: `https://api.map.baidu.com/place/v2/suggestion`,
data: params,
success: success,
fail: fail,
});
}, 600);
},
},
};
</script>
<style lang="scss" scoped>
/* 隐藏滚动条 */
.scroll-view {
scrollbar-width: none; /* Firefox */
}
.scroll-view::-webkit-scrollbar {
display: none; /* Chrome, Safari */
}
.liu-chooseAddress-container {
background: #fff !important;
.hander {
.uni-navbar__header {
align-items: center;
padding: 10rpx 20rpx !important;
}
.left-block {
display: flex;
align-items: center;
line-height: 60rpx;
}
.city-block {
white-space: nowrap; /* 确保文本在一行内显示 */
overflow: hidden; /* 隐藏超出容器的文本 */
text-overflow: ellipsis; /* 使用省略符号表示文本超出 */
max-width: 140rpx;
padding-right: 4rpx;
}
.icon-dingwei {
font-size: 40rpx;
}
.icon-right {
font-size: 24rpx;
}
}
.uni-swiper-list {
height: 50vh;
}
.current-block-left {
width: 78%;
max-width: 78%;
}
.current-block-right {
width: 22%;
}
.current-name,
.current-address {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.current-name {
font-size: 30rpx;
}
.current-address {
font-size: 24rpx;
color: #848484;
}
.btn-edit-block {
padding: 8rpx;
font-size: 14px;
text-align: center;
border-radius: 12rpx;
border: 1px solid #3579ff;
color: #3579ff;
}
.input-view {
width: 92%;
display: flex;
background-color: #f5f5f5;
height: 60rpx;
border-radius: 30rpx;
padding: 0 4%;
flex-wrap: nowrap;
margin: 10rpx 0;
line-height: 60rpx;
margin-left: 10rpx;
color: #b9b9b9;
}
.input-view .uni-icon {
line-height: 60rpx !important;
font-size: 24rpx;
}
.input-view .uni-icons {
font-size: 32rpx !important;
}
.input-view .input {
height: 60rpx;
line-height: 60rpx;
width: 94%;
padding: 0 2%;
font-size: 24rpx;
}
/* 隐藏滚动条 */
.scroll-view {
scrollbar-width: none; /* Firefox */
}
.scroll-view::-webkit-scrollbar {
display: none; /* Chrome, Safari */
}
.address-list {
position: fixed;
bottom: 0;
left: 26rpx;
width: 654rpx;
height: 50vh;
padding: 8rpx 24rpx 0;
margin-top: 24rpx;
background: #ffffff;
border-radius: 24rpx 24rpx 0rpx 0rpx;
.address-item {
display: flex;
align-items: center;
padding: 14px 0;
border-bottom: 1px solid #f8f8f8;
.item-left {
width: 90%;
max-width: 90%;
.item-name,
.item-address {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.item-name {
font-size: 30rpx;
}
.item-address {
font-size: 24rpx;
color: #848484;
}
}
.item-right {
width: 10%;
.item-active {
margin-left: 28rpx;
margin-top: 28rpx;
width: 36rpx;
height: 36rpx;
}
}
}
}
.search-address-list {
margin: 40rpx;
.search-address-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20rpx 0;
border-bottom: 2rpx solid #f0f0f0;
.search-address-item-left {
width: 80%;
}
.search-address-item-right {
color: #d7d7d7;
width: 20%;
text-align: right;
}
rich-text {
// max-width: 90%;
max-height: 27px;
overflow: hidden;
word-break: break-all; /* break-all(允许在单词内换行。) */
text-overflow: ellipsis; /* 超出部分省略号 */
display: -webkit-box; /** 对象作为伸缩盒子模型显示 **/
-webkit-box-orient: vertical; /** 设置或检索伸缩盒对象的子元素的排列方式 **/
-webkit-line-clamp: 2; /** 显示的行数 **/
}
// .item-left-name rich-text {
// white-space: nowrap; /* 确保文本在一行内显示 */
// overflow: hidden; /* 隐藏超出容器的文本 */
// text-overflow: ellipsis; /* 使用省略符号表示文本超出 */
// -webkit-box-orient: vertical;
// max-width: 90%;
// display: -webkit-box;
// box-sizing: border-box;
// }
.item-left-address {
font-size: 24rpx;
color: #848484;
white-space: nowrap; /* 确保文本在一行内显示 */
overflow: hidden; /* 隐藏超出容器的文本 */
text-overflow: ellipsis; /* 使用省略符号表示文本超出 */
max-width: 90%;
}
}
}
.reposition-block {
position: absolute;
top: -20%;
right: 24rpx;
width: 68rpx;
height: 68rpx;
line-height: 68rpx;
border-radius: 12rpx;
text-align: center;
background: #fff;
z-index: 1;
.icon-zhongxindingwei {
display: block;
font-size: 44rpx;
}
}
}
.view-main {
width: 100%;
height: 100%;
background: #f3f3f3;
}
.map-marker {
width: 20px;
height: 30px;
position: absolute;
top: 48%;
left: 50%;
transform: translate(-50%, -50%);
}
.map-tip {
font-size: 20rpx;
color: #b6b6b6;
line-height: 42rpx;
padding: 0 20rpx;
position: absolute;
left: 50%;
top: 30rpx;
box-shadow: 0px 1px 10px 1px rgba(153, 153, 153, 0.34);
background-color: #fff;
border-radius: 4px;
transform: translateX(-50%);
}
.poiss-box {
width: 100%;
padding: 20rpx 0;
background-color: #ffffff;
font-size: 26rpx;
position: fixed;
bottom: 0;
left: 0;
}
.poiss-item {
display: flex;
align-items: center;
justify-content: space-between;
width: calc(100% - 48rpx);
height: 100rpx;
padding: 0 24rpx;
border-bottom: 1px solid #f9f9f9;
}
.poiss-item-l {
width: calc(100% - 184rpx);
}
.poiss-item-lhd {
font-size: 32rpx;
color: #333333;
line-height: 48rpx;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.poiss-item-lbd {
font-size: 28rpx;
color: #b6b6b6;
line-height: 42rpx;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.poiss-item-r {
width: 36rpx;
height: 36rpx;
margin: 0 30rpx;
}
.primary-btn {
width: 688rpx;
height: 88rpx;
margin: 0 auto;
margin-top: 28rpx;
background: #3579ff;
border-radius: 44rpx;
font-size: 32rpx;
color: #ffffff;
line-height: 88rpx;
text-align: center;
}
.page-con {
width: 702rpx;
height: 75vh;
position: fixed;
bottom: 0;
left: 24rpx;
}
.con-hd {
display: flex;
align-items: center;
width: 654rpx;
height: 128rpx;
margin: 0 auto;
background: #ffffff;
box-shadow: 0rpx 4rpx 8rpx 0rpx rgba(88, 102, 123, 0.2);
border-radius: 24rpx;
padding: 0 24rpx;
}
.choose-address {
display: flex;
align-items: center;
justify-content: center;
width: 92%;
height: 64rpx;
margin: 36rpx auto;
border-radius: 12rpx;
border: 2rpx solid #3579ff;
font-size: 32rpx;
color: #3579ff;
.icon-right {
padding-left: 12rpx;
}
}
.choose-address2 {
display: flex;
align-items: center;
justify-content: space-between;
width: calc(100% - 48rpx);
padding: 0 24rpx;
}
.address2-l {
width: calc(100% - 184rpx);
}
.address2-lhd {
font-size: 32rpx;
font-weight: bold;
color: #333333;
line-height: 48rpx;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.address2-lbd {
font-size: 28rpx;
color: #999999;
line-height: 42rpx;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.address2-r {
width: 144rpx;
height: 60rpx;
background: #ffffff;
border-radius: 12rpx;
border: 2rpx solid #3579ff;
font-size: 28rpx;
color: #3579ff;
line-height: 60rpx;
text-align: center;
}
.con-bd {
width: 654rpx;
height: calc(90vh - 160rpx);
padding: 8rpx 24rpx 0;
margin-top: 24rpx;
background: #ffffff;
border-radius: 24rpx 24rpx 0rpx 0rpx;
}
.con-bd-item {
display: flex;
align-items: center;
width: 100%;
height: 110rpx;
}
.con-bd-item-name {
width: 120rpx;
height: 110rpx;
text-align: left;
font-size: 28rpx;
font-weight: bold;
color: #333333;
line-height: 110rpx;
}
.con-bd-item-con {
display: flex;
align-items: center;
width: calc(100% - 120rpx);
height: 108rpx;
border-bottom: 2rpx solid #f7f7f7;
}
.con-bd-item-con input {
width: 100%;
height: 60rpx;
}
.lable-item {
width: 88rpx;
height: 48rpx;
margin-right: 18rpx;
background: #ffffff;
border-radius: 6rpx;
border: 2rpx solid #e3e3e3;
font-size: 24rpx;
color: #333333;
line-height: 48rpx;
text-align: center;
}
.lable-item-on {
background: #3579ff !important;
border: 2rpx solid #3579ff;
color: #ffffff !important;
}
.con-bd-item-con2 input {
width: 50%;
height: 60rpx;
}
.con-bd-sex-box {
display: flex;
align-items: center;
justify-content: center;
margin-left: 16rpx;
font-size: 28rpx;
}
.choose-sex-icon {
width: 36rpx;
height: 36rpx;
margin-right: 12rpx;
}
.con-bd-agree {
display: flex;
align-items: center;
justify-content: flex-start;
margin-top: 40rpx;
width: 100%;
}
.agreeicon {
width: 36rpx;
height: 36rpx;
margin-right: 20rpx;
margin-top: 2rpx;
}
.agreetext {
display: flex;
align-items: center;
font-size: 28rpx;
line-height: 28rpx;
color: #999999;
}
.con-ft-btn {
width: 644rpx;
height: 72rpx;
margin-top: 60rpx;
border-radius: 12rpx;
font-size: 32rpx;
line-height: 72rpx;
text-align: center;
}
.con-ft-btn:last-child {
margin-top: 32rpx;
}
.con-ft-btn1 {
background: #3579ff;
color: #ffffff;
}
.con-ft-btn2 {
background: #ffffff;
border: 2rpx solid #dedede;
}
.con-ft-btn3 {
background: #3579ff;
border: 2rpx solid #dedede;
font-size: 32rpx;
color: #ffffff;
}
.input-placeholder {
font-size: 28rpx;
color: #999999;
}
</style>