HomeLease/pages/agents/agents.vue
WindowBird d838a14669 agent0.2
添加返回按钮
2025-08-16 15:28:26 +08:00

536 lines
11 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="lease-page">
<!-- 头部区域 -->
<custom-nav-bar3 title=""></custom-nav-bar3>
<view class="header">
<image :src="commonEnum.AGENT" class="agent-background" mode="aspectFill"></image>
</view>
<!-- 主要内容区域 -->
<view class="main-content">
<!-- 租赁信息表单 -->
<view class="form-section"></view>
</view>
<!-- 底部导航已由系统tabBar处理 -->
</view>
</template>
<script>
import commonEnum from '../../enum/commonEnum'
import { getLocationWithPermission, handleLocationError } from '@/utils/permission.js'
export default {
name: 'LeasePage',
computed: {
commonEnum() {
return commonEnum
},
},
onLoad() {
// 页面加载时获取当前位置
//this.getCurrentLocation()
},
data() {
return {
formData: {
name: '张珊珊',
phone: '',
address: '',
detailAddress: '',
equipment: '',
period: '1年',
},
currentLocation: null,
showDetails: false,
totalAmount: '100.10',
}
},
methods: {
// 获取当前位置信息
async getCurrentLocation() {
try {
uni.showLoading({
title: '获取位置中...',
})
const location = await getLocationWithPermission()
console.log('位置信息:', location)
this.reverseGeocode(location.latitude, location.longitude)
} catch (err) {
uni.hideLoading()
handleLocationError(err)
}
},
// 处理位置信息
reverseGeocode(latitude, longitude) {
uni.hideLoading()
// 直接使用坐标信息避免依赖外部API
this.currentLocation = {
company: '当前位置',
address: `纬度: ${latitude.toFixed(6)}, 经度: ${longitude.toFixed(6)}`,
latitude: latitude,
longitude: longitude,
}
// 尝试使用uni-app的地理编码如果平台支持
// #ifdef APP-PLUS || MP-WEIXIN
uni.reverseGeocoder({
location: {
latitude: latitude,
longitude: longitude,
},
success: res => {
console.log('逆地理编码结果:', res)
if (res.result) {
this.currentLocation = {
company: res.result.addressComponent?.city || '当前位置',
address:
res.result.formatted_addresses?.recommend || res.result.address || '未知地址',
latitude: latitude,
longitude: longitude,
}
}
},
fail: err => {
console.log('逆地理编码不可用,使用坐标信息')
},
})
// #endif
uni.showToast({
title: '位置获取成功',
icon: 'success',
})
},
selectAddress() {
// 选择地址逻辑
uni.showToast({
title: '选择地址功能',
icon: 'none',
})
},
useCurrentLocation() {
if (!this.currentLocation) {
this.getCurrentLocation()
return
}
this.formData.address = this.currentLocation.company + ' ' + this.currentLocation.address
uni.showToast({
title: '已使用当前定位',
icon: 'success',
})
},
selectEquipment() {
// 选择设备逻辑
uni.showActionSheet({
itemList: ['节能灶', '燃烧器', '燃气灶', '电磁炉'],
success: res => {
const equipmentList = ['节能灶', '燃烧器', '燃气灶', '电磁炉']
this.formData.equipment = equipmentList[res.tapIndex]
},
})
},
selectPeriod() {
// 选择租赁周期逻辑
uni.showActionSheet({
itemList: ['1个月', '3个月', '6个月', '1年', '2年'],
success: res => {
const periodList = ['1个月', '3个月', '6个月', '1年', '2年']
this.formData.period = periodList[res.tapIndex]
},
})
},
toggleDetails() {
this.showDetails = !this.showDetails
},
handlePayment() {
// 支付逻辑
uni.showModal({
title: '确认支付',
content: `确认支付 ¥${this.totalAmount} 吗?`,
success: res => {
if (res.confirm) {
uni.showToast({
title: '支付成功',
icon: 'success',
})
}
},
})
},
// 页面跳转现在由系统tabBar处理
goToHome() {
uni.switchTab({
url: '/pages/index/index',
})
},
goToProfile() {
uni.switchTab({
url: '/pages/profile/profile',
})
},
},
}
</script>
<style lang="scss" scoped>
.lease-page {
position: relative;
background: #f3f5f6;
border: #120d0d solid 2rpx;
}
// 头部区域
.header {
position: relative;
//border: #120d0d solid 2rpx;
background: #fedfcd;
.agent-background {
position: relative;
width: 750rpx;
}
}
// 主要内容区域
.main-content {
position: relative;
top: -34rpx;
background: #ffffff;
border-radius: 40rpx 40rpx 0 0;
margin: 0 30rpx;
padding: 40rpx;
min-height: 60vh;
//border: #120d0d solid 2rpx;
//box-shadow: 0 10rpx 30rpx rgba(0, 0, 0, 0.3);
}
// 表单区域
.form-section {
margin-bottom: 60rpx;
//border: #0c1387 solid 2rpx;
.section-header {
display: flex;
align-items: center;
margin-bottom: 40rpx;
//border: red solid 2rpx;
.section-indicator {
width: 8rpx;
height: 40rpx;
background: #f15a04;
border-radius: 4rpx;
margin-right: 20rpx;
}
.section-title {
font-size: 32rpx;
font-weight: bold;
color: #333;
}
}
}
.form-fields {
.form-item {
//margin-bottom: 40rpx;
display: flex;
align-items: center;
border-bottom: 1rpx solid #d8d8d8;
.field-label {
display: block;
font-size: 28rpx;
color: #333;
font-weight: 400;
flex: 1;
//border: 2rpx solid #d81313;
}
.field-input {
//border: 2rpx solid #d81313;
flex: 3;
height: 80rpx;
padding: 0 20rpx;
font-size: 28rpx;
&:focus {
border-color: #ff9a9e;
background: #fff;
}
}
}
}
// 地址表单项特殊样式
.address-form-item {
margin-bottom: 20rpx;
}
// 地址选择器
.address-selector {
flex: 3;
display: flex;
align-items: center;
justify-content: space-between;
height: 80rpx;
padding: 0 20rpx;
border-radius: 12rpx;
transition: all 0.3s ease;
&:active {
background: #f0f0f0;
border-color: #ff6b6b;
}
.address-text {
flex: 1;
font-size: 28rpx;
color: #666;
margin-right: 20rpx;
}
.map-icon-wrapper {
display: flex;
align-items: center;
justify-content: center;
width: 40rpx;
height: 40rpx;
background: #f15a04;
border-radius: 50%;
.map-icon {
font-size: 24rpx;
color: white;
}
}
}
// 位置建议卡片
.location-suggestion {
margin-bottom: 40rpx;
.location-card {
display: flex;
align-items: center;
justify-content: space-between;
background: white;
border: 2rpx solid #e8f4fd;
border-radius: 16rpx;
padding: 24rpx;
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
position: relative;
&::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 6rpx;
background: #f3f5f6;
border-radius: 6rpx 0 0 6rpx;
}
.location-content {
flex: 1;
margin-right: 20rpx;
.location-header {
display: flex;
align-items: center;
margin-bottom: 8rpx;
.location-title {
font-size: 24rpx;
color: #f15a04;
font-weight: 500;
margin-right: 12rpx;
}
.location-company {
font-size: 26rpx;
color: #333;
font-weight: 500;
}
}
.location-address {
font-size: 24rpx;
color: #666;
line-height: 1.4;
}
}
.use-location-btn {
background: #f3f5f5;
color: #000000;
border: none;
border-radius: 24rpx;
padding: 12rpx 24rpx;
font-size: 24rpx;
font-weight: 500;
box-shadow: 0 4rpx 12rpx rgba(255, 107, 107, 0.3);
transition: all 0.3s ease;
&:active {
transform: translateY(2rpx);
box-shadow: 0 2rpx 8rpx rgba(255, 107, 107, 0.4);
}
}
.get-location-btn {
background: #f15a04;
color: #ffffff;
border: none;
border-radius: 24rpx;
padding: 12rpx 24rpx;
font-size: 24rpx;
font-weight: 500;
box-shadow: 0 4rpx 12rpx rgba(255, 107, 107, 0.3);
transition: all 0.3s ease;
&:active {
transform: translateY(2rpx);
box-shadow: 0 2rpx 8rpx rgba(255, 107, 107, 0.4);
}
}
}
}
// 选择器
.selector {
flex: 3;
display: flex;
justify-content: space-between;
align-items: center;
height: 80rpx;
border-radius: 12rpx;
padding: 0 20rpx;
transition: all 0.3s ease;
&:active {
background: #f0f0f0;
border-color: #ff6b6b;
}
.selector-text {
font-size: 28rpx;
color: #666;
}
.arrow-icon {
font-size: 24rpx;
color: #999;
transition: transform 0.3s ease;
}
&:active .arrow-icon {
transform: scale(1.2);
}
}
// 支付区域
.payment-section {
display: flex;
flex-direction: column;
.pay-button {
width: 100%;
height: 100%;
background: #f15a04;
color: #fff;
border: none;
border-radius: 10rpx;
font-size: 32rpx;
font-weight: bold;
margin-bottom: 40rpx;
box-shadow: 0 10rpx 30rpx rgba(255, 154, 158, 0.3);
}
.payment-details {
.details-header {
display: flex;
align-items: center;
padding: 20rpx 0;
border-bottom: 2rpx solid #f0f0f0;
.details-title {
font-size: 28rpx;
color: #f15a04;
padding-right: 10rpx;
}
.arrow-wrapper {
display: flex;
align-items: center;
justify-content: center;
transition: transform 0.3s ease;
&.expanded {
transform: rotate(180deg);
}
}
.details-arrow {
width: 20rpx;
height: 10rpx;
}
}
.details-content {
padding: 20rpx 0;
.detail-item {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20rpx;
.detail-label {
font-size: 28rpx;
color: #868686;
}
.detail-value {
font-size: 28rpx;
color: #3d3d3d;
font-weight: bold;
}
}
}
}
}
// 底部导航样式已移除使用系统tabBar
// 动画
@keyframes pulse {
0% {
transform: scale(1);
opacity: 1;
}
50% {
transform: scale(1.1);
opacity: 0.8;
}
100% {
transform: scale(1);
opacity: 1;
}
}
</style>