地址接口完成
This commit is contained in:
@@ -37,7 +37,7 @@
|
||||
<!-- 地址列表 -->
|
||||
<div v-else class="address-list">
|
||||
<div
|
||||
v-for="address in addresses"
|
||||
v-for="(address,index) in addresses"
|
||||
:key="address.id"
|
||||
class="address-item"
|
||||
:class="{ 'default-address': address.isDefault }"
|
||||
@@ -77,7 +77,7 @@
|
||||
<el-button
|
||||
v-if="!address.isDefault"
|
||||
type="text"
|
||||
@click="setDefaultAddress(address.id)"
|
||||
@click="setDefaultAddress(index)"
|
||||
class="default-btn"
|
||||
>
|
||||
设为默认
|
||||
@@ -123,8 +123,8 @@
|
||||
:options="regionOptions"
|
||||
placeholder="请选择省市区"
|
||||
style="width: 100%"
|
||||
:props="{ expandTrigger: 'hover' }"
|
||||
:show-all-levels="false"
|
||||
:props="{ expandTrigger: 'hover', value:'code' }"
|
||||
:show-all-levels="true"
|
||||
:collapse-tags="true"
|
||||
:max-collapse-tags="1"
|
||||
:teleported="false"
|
||||
@@ -182,6 +182,7 @@ const addresses = ref([])
|
||||
const showAddDialog = ref(false)
|
||||
const editingAddress = ref(null)
|
||||
const addressFormRef = ref(null)
|
||||
const addressList = ref([])
|
||||
|
||||
// 地址表单数据
|
||||
const addressForm = reactive({
|
||||
@@ -220,74 +221,88 @@ const addressRules = {
|
||||
// 方法
|
||||
const loadRegionOptions = async () => {
|
||||
try {
|
||||
const response = await api.get('/regions')
|
||||
if (response.data.success) {
|
||||
regionOptions.value = response.data.data.regions || []
|
||||
} else {
|
||||
throw new Error(response.data.message || '获取省市区数据失败')
|
||||
// 获取所有省份
|
||||
const provincesResponse = await api.get('/regions/provinces')
|
||||
console.log('获取省份数据:', provincesResponse)
|
||||
if (!provincesResponse.data.success) {
|
||||
throw new Error(provincesResponse.data.message || '获取省份数据失败')
|
||||
}
|
||||
|
||||
regionOptions.value= provincesResponse.data.data || []
|
||||
console.log('获取省份数据:', regionOptions.value);
|
||||
|
||||
} catch (error) {
|
||||
console.error('获取省市区数据失败:', error)
|
||||
ElMessage.error(error.message || '获取省市区数据失败')
|
||||
// 如果API获取失败,使用默认数据
|
||||
|
||||
// 如果API获取失败,使用浙江省数据作为默认数据
|
||||
await loadFallbackRegionData()
|
||||
}
|
||||
}
|
||||
|
||||
// 回退方案:加载浙江省数据
|
||||
const loadFallbackRegionData = async () => {
|
||||
try {
|
||||
const zhejiangResponse = await api.get('/regions/zhejiang')
|
||||
if (zhejiangResponse.data.success) {
|
||||
const zhejiangData = zhejiangResponse.data.data || []
|
||||
// 将浙江省数据转换为级联选择器格式
|
||||
const cityMap = new Map()
|
||||
|
||||
zhejiangData.forEach(item => {
|
||||
if (!cityMap.has(item.city_name)) {
|
||||
cityMap.set(item.city_name, {
|
||||
value: item.city_name,
|
||||
label: item.city_name,
|
||||
children: []
|
||||
})
|
||||
}
|
||||
|
||||
// 添加区县数据(移除is_available过滤条件以确保所有区县都显示)
|
||||
if (item.district_name) {
|
||||
cityMap.get(item.city_name).children.push({
|
||||
value: item.district_name,
|
||||
label: item.district_name,
|
||||
code: item.region_code
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
regionOptions.value = [{
|
||||
value: '浙江省',
|
||||
label: '浙江省',
|
||||
children: Array.from(cityMap.values())
|
||||
}]
|
||||
console.log('已加载浙江省地区数据作为默认选项')
|
||||
} else {
|
||||
throw new Error('获取浙江省数据也失败')
|
||||
}
|
||||
} catch (fallbackError) {
|
||||
console.error('浙江省数据获取失败,使用硬编码数据:', fallbackError)
|
||||
// 最终回退到硬编码数据
|
||||
regionOptions.value = [
|
||||
{
|
||||
value: '北京市',
|
||||
label: '北京市',
|
||||
value: '浙江省',
|
||||
label: '浙江省',
|
||||
children: [
|
||||
{
|
||||
value: '北京市',
|
||||
label: '北京市',
|
||||
value: '宁波市',
|
||||
label: '宁波市',
|
||||
children: [
|
||||
{ value: '东城区', label: '东城区' },
|
||||
{ value: '西城区', label: '西城区' },
|
||||
{ value: '朝阳区', label: '朝阳区' },
|
||||
{ value: '丰台区', label: '丰台区' },
|
||||
{ value: '石景山区', label: '石景山区' },
|
||||
{ value: '海淀区', label: '海淀区' }
|
||||
]
|
||||
}
|
||||
{ value: '鄞州区', label: '鄞州区' },
|
||||
{ value: '海曙区', label: '海曙区' },
|
||||
{ value: '江北区', label: '江北区' },
|
||||
{ value: '北仑区', label: '北仑区' }
|
||||
]
|
||||
},
|
||||
{
|
||||
value: '上海市',
|
||||
label: '上海市',
|
||||
value: '杭州市',
|
||||
label: '杭州市',
|
||||
children: [
|
||||
{
|
||||
value: '上海市',
|
||||
label: '上海市',
|
||||
children: [
|
||||
{ value: '黄浦区', label: '黄浦区' },
|
||||
{ value: '徐汇区', label: '徐汇区' },
|
||||
{ value: '长宁区', label: '长宁区' },
|
||||
{ value: '静安区', label: '静安区' },
|
||||
{ value: '普陀区', label: '普陀区' },
|
||||
{ value: '虹口区', label: '虹口区' }
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
value: '广东省',
|
||||
label: '广东省',
|
||||
children: [
|
||||
{
|
||||
value: '广州市',
|
||||
label: '广州市',
|
||||
children: [
|
||||
{ value: '天河区', label: '天河区' },
|
||||
{ value: '越秀区', label: '越秀区' },
|
||||
{ value: '荔湾区', label: '荔湾区' },
|
||||
{ value: '海珠区', label: '海珠区' }
|
||||
]
|
||||
},
|
||||
{
|
||||
value: '深圳市',
|
||||
label: '深圳市',
|
||||
children: [
|
||||
{ value: '福田区', label: '福田区' },
|
||||
{ value: '罗湖区', label: '罗湖区' },
|
||||
{ value: '南山区', label: '南山区' },
|
||||
{ value: '宝安区', label: '宝安区' }
|
||||
{ value: '西湖区', label: '西湖区' },
|
||||
{ value: '上城区', label: '上城区' },
|
||||
{ value: '拱墅区', label: '拱墅区' },
|
||||
{ value: '余杭区', label: '余杭区' }
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -300,10 +315,30 @@ const loadAddresses = async () => {
|
||||
try {
|
||||
loading.value = true
|
||||
const response = await api.get('/addresses')
|
||||
console.log('获取地址列表响应:', response)
|
||||
if (response.data.success) {
|
||||
addresses.value = response.data.data.addresses || []
|
||||
// 根据接口文档转换数据格式
|
||||
addressList.value = response.data.data || []
|
||||
addresses.value = addressList.value.map(addr => ({
|
||||
id: addr.id,
|
||||
recipientName: addr.receiver_name,
|
||||
recipientPhone: addr.receiver_phone,
|
||||
province: addr.province_name,
|
||||
city: addr.city_name,
|
||||
district: addr.district_name,
|
||||
detailAddress: addr.detailed_address,
|
||||
isDefault: addr.is_default,
|
||||
labelName: addr.label_name,
|
||||
labelColor: addr.label_color,
|
||||
city_code:addr.city_code,
|
||||
province_code:addr.province_code,
|
||||
district_code:addr.district_code,
|
||||
...addr
|
||||
}))
|
||||
} else {
|
||||
// 保留原有的测试数据作为回退
|
||||
addresses.value = [{
|
||||
id: 1,
|
||||
recipientName: '张三',
|
||||
recipientPhone: '11111111111',
|
||||
province: '浙江省',
|
||||
@@ -312,6 +347,7 @@ const loadAddresses = async () => {
|
||||
detailAddress: '宁波外经合作大厦',
|
||||
isDefault: true
|
||||
},{
|
||||
id: 2,
|
||||
recipientName: '李四',
|
||||
recipientPhone: '22222222222',
|
||||
province: '浙江省',
|
||||
@@ -330,6 +366,8 @@ const loadAddresses = async () => {
|
||||
}
|
||||
|
||||
const handleRegionChange = (value) => {
|
||||
console.log(value);
|
||||
|
||||
if (value && value.length === 3) {
|
||||
addressForm.province = value[0]
|
||||
addressForm.city = value[1]
|
||||
@@ -337,6 +375,7 @@ const handleRegionChange = (value) => {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const editAddress = (address) => {
|
||||
editingAddress.value = address
|
||||
addressForm.recipientName = address.recipientName
|
||||
@@ -357,14 +396,15 @@ const saveAddress = async () => {
|
||||
await addressFormRef.value.validate()
|
||||
saving.value = true
|
||||
|
||||
// 根据接口文档构建请求数据
|
||||
const addressData = {
|
||||
recipientName: addressForm.recipientName,
|
||||
recipientPhone: addressForm.recipientPhone,
|
||||
province: addressForm.province,
|
||||
city: addressForm.city,
|
||||
district: addressForm.district,
|
||||
detailAddress: addressForm.detailAddress,
|
||||
isDefault: addressForm.isDefault
|
||||
recipient_name: addressForm.recipientName,
|
||||
phone: addressForm.recipientPhone,
|
||||
province_code: addressForm.province,
|
||||
city_code: addressForm.city,
|
||||
district_code: addressForm.district,
|
||||
detailed_address: addressForm.detailAddress,
|
||||
is_default: addressForm.isDefault
|
||||
}
|
||||
|
||||
let response
|
||||
@@ -373,6 +413,7 @@ const saveAddress = async () => {
|
||||
response = await api.put(`/addresses/${editingAddress.value.id}`, addressData)
|
||||
} else {
|
||||
// 新增地址
|
||||
console.log('表单原始数据:', addressForm)
|
||||
response = await api.post('/addresses', addressData)
|
||||
}
|
||||
|
||||
@@ -406,6 +447,7 @@ const deleteAddress = async (addressId) => {
|
||||
)
|
||||
|
||||
const response = await api.delete(`/addresses/${addressId}`)
|
||||
console.log("删除id",addressId)
|
||||
if (response.data.success) {
|
||||
ElMessage.success('地址删除成功')
|
||||
await loadAddresses()
|
||||
@@ -420,18 +462,67 @@ const deleteAddress = async (addressId) => {
|
||||
}
|
||||
|
||||
const setDefaultAddress = async (addressId) => {
|
||||
console.log(addressId,addresses.value[addressId]);
|
||||
let addressDataTest = addresses.value[addressId]
|
||||
addressDataTest.isDefault = true
|
||||
const addressData = {
|
||||
recipient_name: addressDataTest.receiver_name,
|
||||
phone: addressDataTest.receiver_phone,
|
||||
province_code: addressDataTest.province,
|
||||
city_code: addressDataTest.city,
|
||||
district_code: addressDataTest.district,
|
||||
detailed_address: addressDataTest.detailAddress,
|
||||
is_default: addressDataTest.isDefault
|
||||
}
|
||||
console.log('addressDataTest',addressDataTest);
|
||||
console.log('addressData',addressData);
|
||||
try {
|
||||
const response = await api.put(`/addresses/${addressId}/default`)
|
||||
const response = await api.put(`/addresses/${addressDataTest.id}`, addressData)
|
||||
if (response.data.success) {
|
||||
ElMessage.success('默认地址设置成功')
|
||||
await loadAddresses()
|
||||
} else {
|
||||
throw new Error(response.data.message || '设置默认地址失败')
|
||||
}
|
||||
} catch (error) {
|
||||
ElMessage.error(error.message || '设置默认地址失败')
|
||||
} catch (error) {console.log(error)}
|
||||
return
|
||||
// 从addresses列表中找到对应的地址信息
|
||||
const getDefaultAddress = () => {
|
||||
for(add in addresses.value)
|
||||
{
|
||||
if(addresses.value[add].isDefault)
|
||||
{
|
||||
return addresses.value[add]
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
|
||||
console.log('getDefaultAddress', getDefaultAddress)
|
||||
// const addressData = {
|
||||
// recipient_name: addressList.value[0].receiver_name,
|
||||
// phone: addressList.value[0].receiver_phone,
|
||||
// province_code: addressList.value[0].province,
|
||||
// city_code: addressList.value[0].city,
|
||||
// district_code: addressList.value[0].district,
|
||||
// detailed_address: targetAddress.detailAddress,
|
||||
// is_default: true
|
||||
// }
|
||||
console.log('addresses', addresses.value)
|
||||
console.log('targetaddress', targetAddress)
|
||||
console.log('默认地址替换数据', addressData)
|
||||
try {
|
||||
const response = await api.put(`/addresses/${addressId}`, addressData)
|
||||
if (response.data.success) {
|
||||
ElMessage.success('默认地址设置成功')
|
||||
await loadAddresses()
|
||||
} else {
|
||||
throw new Error(response.data.message || '设置默认地址失败')
|
||||
}
|
||||
} catch (error) {console.log(error)}
|
||||
}
|
||||
|
||||
const cancelEdit = () => {
|
||||
showAddDialog.value = false
|
||||
|
||||
Reference in New Issue
Block a user