|
@ -0,0 +1,285 @@ |
|
|
|
|
|
<template> |
|
|
|
|
|
<view> |
|
|
|
|
|
|
|
|
|
|
|
<!-- 房源列表 --> |
|
|
|
|
|
<view class="se-pb-200"> |
|
|
|
|
|
<view v-if="list.length > 0"> |
|
|
|
|
|
<view @click="onDetail(item)" class="se-my-10 se-mx-20 se-px-20 se-py-20 se-br-20 se-bgc-white se-flex se-pos" v-for="(item, index) in list" :key="index"> |
|
|
|
|
|
<view class="se-pos se-w-260 se-h-180"> |
|
|
|
|
|
<image v-if="item.iconImage" class="se-a-80 se-pos-lt" :src="item.iconImage" mode=""></image> |
|
|
|
|
|
<image class="se-w-260 se-h-180 se-br-10" :src="item.images && item.images[0] ? item.images[0] : '/static/image/header.png'" mode="aspectFill"></image> |
|
|
|
|
|
</view> |
|
|
|
|
|
<view class="se-pl-10 se-w-p-100"> |
|
|
|
|
|
<view class="se-c-black se-fs-28"> |
|
|
|
|
|
{{ item.title }} |
|
|
|
|
|
</view> |
|
|
|
|
|
<view class="se-flex se-flex-h-sb se-flex-ai-c se-fs-24 se-mt-10 se-c-66"> |
|
|
|
|
|
<text>{{ item.homeType }}</text> |
|
|
|
|
|
<text v-if="item.timeGo">{{ item.timeGo }}年</text> |
|
|
|
|
|
</view> |
|
|
|
|
|
<view class="se-flex se-flex-h-sb se-flex-ai-c se-mt-10"> |
|
|
|
|
|
<template v-if="item.iconTitles && item.iconTitles.length > 0"> |
|
|
|
|
|
<view class="se-flex"> |
|
|
|
|
|
<view class="se-display-ib se-c-white se-bgc-orange se-fs-22 se-br-8 se-px-10 se-py-5 se-mr-10" v-for="(tag, tagIndex) in item.iconTitles" :key="tagIndex"> |
|
|
|
|
|
{{ tag }} |
|
|
|
|
|
</view> |
|
|
|
|
|
</view> |
|
|
|
|
|
</template> |
|
|
|
|
|
<template v-else><view></view></template> |
|
|
|
|
|
<view class="se-c-66 se-flex se-flex-ai-c"> |
|
|
|
|
|
<uv-icon name="eye"></uv-icon> |
|
|
|
|
|
<text class="se-ml-5 se-fs-18">{{ item.num || 0 }}</text> |
|
|
|
|
|
</view> |
|
|
|
|
|
</view> |
|
|
|
|
|
<view class="se-flex se-flex-h-sb se-flex-ai-c se-mt-10"> |
|
|
|
|
|
<text class="se-c-red se-fs-24 se-fw-6 se-toe-1">¥{{ item.price }}元/{{ item.unit }}</text> |
|
|
|
|
|
<text class="se-c-66 se-fs-22 se-toe-1">{{ item.address }}</text> |
|
|
|
|
|
</view> |
|
|
|
|
|
</view> |
|
|
|
|
|
<!-- 操作按钮 --> |
|
|
|
|
|
<view class="action-buttons"> |
|
|
|
|
|
<view class="action-btn edit-btn" @click.stop="onEdit(item)"> |
|
|
|
|
|
<uv-icon name="edit-pen" size="16"></uv-icon> |
|
|
|
|
|
<text>编辑</text> |
|
|
|
|
|
</view> |
|
|
|
|
|
<view class="action-btn delete-btn" @click.stop="onDelete(item)"> |
|
|
|
|
|
<uv-icon name="trash" size="16"></uv-icon> |
|
|
|
|
|
<text>删除</text> |
|
|
|
|
|
</view> |
|
|
|
|
|
</view> |
|
|
|
|
|
</view> |
|
|
|
|
|
</view> |
|
|
|
|
|
|
|
|
|
|
|
<!-- 空状态 --> |
|
|
|
|
|
<view v-else class="empty-container"> |
|
|
|
|
|
<uv-empty mode="list" text="暂无发布的房源"></uv-empty> |
|
|
|
|
|
<view class="empty-tip">快去发布您的第一套房源吧!</view> |
|
|
|
|
|
<view class="publish-btn" @click="goToPublish"> |
|
|
|
|
|
<uv-button type="primary" text="立即发布" customStyle="background-color: #1EC77A; border-radius: 30px;"></uv-button> |
|
|
|
|
|
</view> |
|
|
|
|
|
</view> |
|
|
|
|
|
</view> |
|
|
|
|
|
</view> |
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
|
|
<script> |
|
|
|
|
|
import { MyHousePageList, deleteHouse } from "@/common/api.js" |
|
|
|
|
|
|
|
|
|
|
|
export default { |
|
|
|
|
|
data() { |
|
|
|
|
|
return { |
|
|
|
|
|
list: [], |
|
|
|
|
|
pageNo: 1, |
|
|
|
|
|
pageSize: 10, |
|
|
|
|
|
loading: false |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
onLoad() { |
|
|
|
|
|
// 设置页面标题 |
|
|
|
|
|
uni.setNavigationBarTitle({ |
|
|
|
|
|
title: '我发布的房源' |
|
|
|
|
|
}) |
|
|
|
|
|
this.loadMyHouses() |
|
|
|
|
|
}, |
|
|
|
|
|
onShow() { |
|
|
|
|
|
// 页面显示时刷新数据 |
|
|
|
|
|
this.refreshData() |
|
|
|
|
|
}, |
|
|
|
|
|
onPullDownRefresh() { |
|
|
|
|
|
this.refreshData() |
|
|
|
|
|
}, |
|
|
|
|
|
onReachBottom() { |
|
|
|
|
|
this.loadMore() |
|
|
|
|
|
}, |
|
|
|
|
|
methods: { |
|
|
|
|
|
// 加载我发布的房源 |
|
|
|
|
|
loadMyHouses() { |
|
|
|
|
|
if (this.loading) return |
|
|
|
|
|
this.loading = true |
|
|
|
|
|
const params = { |
|
|
|
|
|
pageNo: this.pageNo, |
|
|
|
|
|
pageSize: this.pageSize |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
MyHousePageList(params).then(response => { |
|
|
|
|
|
uni.stopPullDownRefresh() |
|
|
|
|
|
this.loading = false |
|
|
|
|
|
|
|
|
|
|
|
if (response && response.result && response.result.records) { |
|
|
|
|
|
// 处理图片和标签数据 |
|
|
|
|
|
response.result.records.forEach(item => { |
|
|
|
|
|
if (item.image) { |
|
|
|
|
|
item.images = item.image.split(',') |
|
|
|
|
|
} else { |
|
|
|
|
|
item.images = [] |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (item.homeImage) { |
|
|
|
|
|
item.homeImages = item.homeImage.split(',') |
|
|
|
|
|
} else { |
|
|
|
|
|
item.homeImages = [] |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (item.iconTitle) { |
|
|
|
|
|
item.iconTitles = item.iconTitle.split(',') |
|
|
|
|
|
} else { |
|
|
|
|
|
item.iconTitles = [] |
|
|
|
|
|
} |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
if (this.pageNo === 1) { |
|
|
|
|
|
this.list = response.result.records |
|
|
|
|
|
} else { |
|
|
|
|
|
this.list = this.list.concat(response.result.records) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}).catch(error => { |
|
|
|
|
|
uni.stopPullDownRefresh() |
|
|
|
|
|
this.loading = false |
|
|
|
|
|
console.error('获取房源列表失败:', error) |
|
|
|
|
|
uni.showToast({ |
|
|
|
|
|
title: '获取数据失败', |
|
|
|
|
|
icon: 'none' |
|
|
|
|
|
}) |
|
|
|
|
|
}) |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// 刷新数据 |
|
|
|
|
|
refreshData() { |
|
|
|
|
|
this.pageNo = 1 |
|
|
|
|
|
this.list = [] |
|
|
|
|
|
this.loadMyHouses() |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// 加载更多 |
|
|
|
|
|
loadMore() { |
|
|
|
|
|
this.pageNo += 1 |
|
|
|
|
|
this.loadMyHouses() |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// 查看房源详情 |
|
|
|
|
|
onDetail(item) { |
|
|
|
|
|
uni.navigateTo({ |
|
|
|
|
|
url: `/pages_subpack/detail/index?id=${item.id}` |
|
|
|
|
|
}) |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// 编辑房源 |
|
|
|
|
|
onEdit(item) { |
|
|
|
|
|
// 根据房源类型跳转到对应的编辑页面 |
|
|
|
|
|
let editUrl = '/pages_subpack/house/index' |
|
|
|
|
|
|
|
|
|
|
|
// 根据房源分类判断跳转页面 |
|
|
|
|
|
if (item.category === 'farmhouse') { |
|
|
|
|
|
editUrl = '/pages_subpack/house/farmhouse' |
|
|
|
|
|
} else if (item.category === 'commercial') { |
|
|
|
|
|
editUrl = '/pages_subpack/house/commercial' |
|
|
|
|
|
} else if (item.category === 'other') { |
|
|
|
|
|
editUrl = '/pages_subpack/house/other' |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
uni.navigateTo({ |
|
|
|
|
|
url: `${editUrl}?id=${item.id}&mode=edit` |
|
|
|
|
|
}) |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// 删除房源 |
|
|
|
|
|
onDelete(item) { |
|
|
|
|
|
uni.showModal({ |
|
|
|
|
|
title: '确认删除', |
|
|
|
|
|
content: '确定要删除这个房源吗?删除后无法恢复。', |
|
|
|
|
|
cancelText: '取消', |
|
|
|
|
|
confirmText: '删除', |
|
|
|
|
|
confirmColor: '#ff4757', |
|
|
|
|
|
success: (res) => { |
|
|
|
|
|
if (res.confirm) { |
|
|
|
|
|
this.deleteHouse(item.id) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}) |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// 执行删除 |
|
|
|
|
|
deleteHouse(houseId) { |
|
|
|
|
|
uni.showLoading({ |
|
|
|
|
|
title: '删除中...' |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
deleteHouse({ id: houseId }).then(response => { |
|
|
|
|
|
uni.hideLoading() |
|
|
|
|
|
uni.showToast({ |
|
|
|
|
|
title: '删除成功', |
|
|
|
|
|
icon: 'success' |
|
|
|
|
|
}) |
|
|
|
|
|
// 刷新列表 |
|
|
|
|
|
this.refreshData() |
|
|
|
|
|
}).catch(error => { |
|
|
|
|
|
uni.hideLoading() |
|
|
|
|
|
console.error('删除房源失败:', error) |
|
|
|
|
|
uni.showToast({ |
|
|
|
|
|
title: '删除失败', |
|
|
|
|
|
icon: 'none' |
|
|
|
|
|
}) |
|
|
|
|
|
}) |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// 去发布房源 |
|
|
|
|
|
goToPublish() { |
|
|
|
|
|
uni.navigateTo({ |
|
|
|
|
|
url: '/pages_subpack/house/select' |
|
|
|
|
|
}) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
</script> |
|
|
|
|
|
|
|
|
|
|
|
<style> |
|
|
|
|
|
page { |
|
|
|
|
|
background-color: #f5f5f5; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* 操作按钮样式 */ |
|
|
|
|
|
.action-buttons { |
|
|
|
|
|
position: absolute; |
|
|
|
|
|
top: 20rpx; |
|
|
|
|
|
right: 20rpx; |
|
|
|
|
|
display: flex; |
|
|
|
|
|
gap: 10rpx; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.action-btn { |
|
|
|
|
|
display: flex; |
|
|
|
|
|
flex-direction: column; |
|
|
|
|
|
align-items: center; |
|
|
|
|
|
padding: 8rpx 12rpx; |
|
|
|
|
|
border-radius: 10rpx; |
|
|
|
|
|
background: rgba(255, 255, 255, 0.95); |
|
|
|
|
|
box-shadow: 0 2rpx 10rpx rgba(0,0,0,0.1); |
|
|
|
|
|
font-size: 20rpx; |
|
|
|
|
|
min-width: 60rpx; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.edit-btn { |
|
|
|
|
|
color: #1EC77A; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.delete-btn { |
|
|
|
|
|
color: #ff4757; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* 空状态样式 */ |
|
|
|
|
|
.empty-container { |
|
|
|
|
|
padding: 100rpx 40rpx; |
|
|
|
|
|
text-align: center; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.empty-tip { |
|
|
|
|
|
margin: 30rpx 0; |
|
|
|
|
|
font-size: 28rpx; |
|
|
|
|
|
color: #666; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.publish-btn { |
|
|
|
|
|
margin-top: 40rpx; |
|
|
|
|
|
} |
|
|
|
|
|
</style> |