<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>
|