You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
277 lines
5.9 KiB
277 lines
5.9 KiB
<template>
|
|
<view class="my-properties-page">
|
|
<!-- 房产列表 -->
|
|
<view class="property-list">
|
|
<view
|
|
class="property-card"
|
|
v-for="(property, index) in properties"
|
|
:key="index"
|
|
>
|
|
<view class="flex justify-between items-center">
|
|
<view class="card-header">
|
|
<image class="community-icon" src="/static/房产.png" mode="aspectFit"></image>
|
|
<view class="flex justify-start items-center">
|
|
<text class="community-name">{{ property.villageName }}</text>
|
|
<text class="mx-25">|</text>
|
|
<text class="text-25 mr-10 text-gray">共{{ property.peopleNum }}人</text>
|
|
</view>
|
|
<view class="identity-badge" :class="identityClass[property.ownerType]">
|
|
{{ ownerType[property.ownerType] }}
|
|
</view>
|
|
</view>
|
|
<u-icon name="arrow-right"/>
|
|
</view>
|
|
|
|
<view class="property-info">
|
|
<view class="info-row">
|
|
<text class="info-label">楼栋:</text>
|
|
<text class="info-value">{{ property.buildingName }}</text>
|
|
</view>
|
|
<view class="info-row">
|
|
<text class="info-label">单元:</text>
|
|
<text class="info-value">{{ property.unitName }}</text>
|
|
</view>
|
|
<view class="info-row">
|
|
<text class="info-label">房号:</text>
|
|
<text class="info-value">{{ property.roomNumber }}</text>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- <view class="card-actions">-->
|
|
<!-- <button class="action-btn danger">-->
|
|
<!-- 解除绑定-->
|
|
<!-- </button>-->
|
|
<!-- </view>-->
|
|
<view class="flex justify-end items-center w-100p">
|
|
<u-button type="primary" shape="circle" :custom-style="{width: '200rpx', margin: '0 20rpx'}"
|
|
size="small"
|
|
@click="showShare(property.baseRoomRoomCode)">
|
|
邀请绑定
|
|
</u-button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<u-gap height="120rpx"></u-gap>
|
|
<!-- 新增按钮 -->
|
|
<view class="add-property-button">
|
|
<button class="add-btn" @click="addProperty">
|
|
<u-icon name="plus" color="#fff" size="30rpx"></u-icon>
|
|
新增房产
|
|
</button>
|
|
</view>
|
|
|
|
<!-- 空状态 -->
|
|
<view class="empty-state" v-if="properties.length === 0">
|
|
<image class="empty-icon" src="/static/empty-property.png" mode="aspectFit"></image>
|
|
<text class="empty-text">您还没有绑定任何房产</text>
|
|
</view>
|
|
<u-popup :show="showPopup" close-on-click-overlay round="10" mode="bottom">
|
|
<view class="p-30">
|
|
<view class="text-30 my-20">邀请家人</view>
|
|
<view class="flex justify-center items-center my-20">
|
|
<u-image :src="qr" width="300rpx" height="300rpx"/>
|
|
</view>
|
|
<u-button shape="circle" type="primary" @click="showPopup = false">关闭</u-button>
|
|
</view>
|
|
</u-popup>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import {roomListReq, wechatMakeJoinQrReq} from "@/api/room";
|
|
|
|
export default {
|
|
data() {
|
|
return {
|
|
properties: [],
|
|
identityClass: [
|
|
'',
|
|
'owner',
|
|
'family',
|
|
'tenant',
|
|
'tenant',
|
|
],
|
|
ownerType: [
|
|
'',
|
|
'业主',
|
|
'家属',
|
|
'租客',
|
|
'工作人员',
|
|
],
|
|
qr: '',
|
|
showPopup: false
|
|
};
|
|
},
|
|
methods: {
|
|
async getRoomList() {
|
|
const {data} = await roomListReq({
|
|
withPeopleNum: true
|
|
})
|
|
this.properties = data
|
|
},
|
|
addProperty() {
|
|
// 跳转到添加房产页面
|
|
uni.navigateTo({
|
|
url: '/pages/user/auth'
|
|
});
|
|
},
|
|
async showShare(roomCode) {
|
|
const {data} = await wechatMakeJoinQrReq({
|
|
roomCode
|
|
})
|
|
this.qr = data
|
|
this.showPopup = true
|
|
}
|
|
},
|
|
onShow() {
|
|
this.getRoomList();
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
page {
|
|
background-color: #f5f5f5;
|
|
}
|
|
|
|
.my-properties-page {
|
|
padding: 24rpx;
|
|
}
|
|
|
|
.property-card {
|
|
background-color: #fff;
|
|
border-radius: 16rpx;
|
|
padding: 24rpx;
|
|
margin-bottom: 24rpx;
|
|
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
|
|
}
|
|
|
|
.card-header {
|
|
display: flex;
|
|
align-items: center;
|
|
padding-bottom: 20rpx;
|
|
border-bottom: 1rpx solid #f0f0f0;
|
|
}
|
|
|
|
.community-icon {
|
|
width: 40rpx;
|
|
height: 40rpx;
|
|
margin-right: 16rpx;
|
|
}
|
|
|
|
.community-name {
|
|
font-size: 32rpx;
|
|
font-weight: bold;
|
|
color: #333;
|
|
flex: 1;
|
|
}
|
|
|
|
.identity-badge {
|
|
font-size: 24rpx;
|
|
padding: 4rpx 12rpx;
|
|
border-radius: 8rpx;
|
|
color: #fff;
|
|
|
|
&.owner {
|
|
background-color: #4facfe;
|
|
}
|
|
|
|
&.family {
|
|
background-color: #28a745;
|
|
}
|
|
|
|
&.tenant {
|
|
background-color: #ffc107;
|
|
color: #333;
|
|
}
|
|
}
|
|
|
|
.property-info {
|
|
padding: 20rpx 0;
|
|
}
|
|
|
|
.info-row {
|
|
display: flex;
|
|
font-size: 28rpx;
|
|
line-height: 1.8;
|
|
}
|
|
|
|
.info-label {
|
|
color: #999;
|
|
width: 120rpx;
|
|
}
|
|
|
|
.info-value {
|
|
color: #333;
|
|
}
|
|
|
|
.card-actions {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
padding-top: 16rpx;
|
|
border-top: 1rpx solid #f0f0f0;
|
|
gap: 20rpx;
|
|
}
|
|
|
|
.action-btn {
|
|
font-size: 26rpx;
|
|
padding: 0 24rpx;
|
|
height: 60rpx;
|
|
line-height: 60rpx;
|
|
border-radius: 30rpx;
|
|
margin: 0;
|
|
|
|
&.default {
|
|
background-color: #fff;
|
|
color: #333;
|
|
border: 1rpx solid #ccc;
|
|
}
|
|
|
|
&.danger {
|
|
background-color: #f56c6c;
|
|
color: #fff;
|
|
}
|
|
}
|
|
|
|
.add-property-button {
|
|
position: fixed;
|
|
bottom: 40rpx;
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
width: 90%;
|
|
}
|
|
|
|
.add-btn {
|
|
background: linear-gradient(to right, #769636, #98C147);
|
|
color: #fff;
|
|
border-radius: 50rpx;
|
|
font-size: 32rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 10rpx;
|
|
border: none;
|
|
}
|
|
|
|
.empty-state {
|
|
text-align: center;
|
|
padding-top: 200rpx;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
.empty-icon {
|
|
width: 200rpx;
|
|
height: 200rpx;
|
|
}
|
|
|
|
.empty-text {
|
|
font-size: 28rpx;
|
|
color: #999;
|
|
margin-top: 20rpx;
|
|
}
|
|
</style>
|
|
|