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