cd8d442f
wuxw
开始处理水电抄表功能
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<template>
<div class="room-tree-container">
<el-tree ref="tree" :data="treeData" node-key="id" :props="defaultProps" :highlight-current="true"
:expand-on-click-node="false" @node-click="handleNodeClick">
<span slot-scope="{ node, data }" class="custom-tree-node">
<span>
<i :class="data.icon" style="margin-right: 5px"></i>
{{ node.label }}
</span>
</span>
</el-tree>
</div>
</template>
<script>
import { queryUnits, queryRoomsTree } from '@/api/fee/meterWaterManageApi'
import { getCommunityId } from '@/api/community/communityApi'
export default {
name: 'RoomTreeDiv',
data() {
return {
treeData: [],
defaultProps: {
children: 'children',
label: 'text'
},
communityId: ''
}
},
created() {
this.communityId = getCommunityId()
this.loadTreeData()
},
methods: {
async loadTreeData() {
try {
const units = await queryUnits({
communityId: this.communityId
})
this.buildTreeData(units)
} catch (error) {
console.error('Failed to load tree data:', error)
|
9d8dc2e6
wuxw
开发完成水电抄表
|
44
|
this.$message.error(this.$t('roomTree.loadError'))
|
cd8d442f
wuxw
开始处理水电抄表功能
|
45
46
47
|
}
},
buildTreeData(units) {
|
9d8dc2e6
wuxw
开发完成水电抄表
|
48
|
const floorMap = {}
|
cd8d442f
wuxw
开始处理水电抄表功能
|
49
|
|
9d8dc2e6
wuxw
开发完成水电抄表
|
50
|
// Build floor nodes and unit nodes
|
cd8d442f
wuxw
开始处理水电抄表功能
|
51
|
units.forEach(unit => {
|
9d8dc2e6
wuxw
开发完成水电抄表
|
52
53
|
if (!floorMap[unit.floorId]) {
floorMap[unit.floorId] = {
|
cd8d442f
wuxw
开始处理水电抄表功能
|
54
55
56
|
id: `f_${unit.floorId}`,
floorId: unit.floorId,
floorNum: unit.floorNum,
|
9d8dc2e6
wuxw
开发完成水电抄表
|
57
58
|
icon: "/img/floor.png",
text: `${unit.floorNum}${this.$t('room.floorUnitTree.building')}`,
|
cd8d442f
wuxw
开始处理水电抄表功能
|
59
|
children: []
|
9d8dc2e6
wuxw
开发完成水电抄表
|
60
|
}
|
cd8d442f
wuxw
开始处理水电抄表功能
|
61
|
}
|
cd8d442f
wuxw
开始处理水电抄表功能
|
62
|
|
9d8dc2e6
wuxw
开发完成水电抄表
|
63
64
65
66
67
68
69
70
71
|
floorMap[unit.floorId].children.push({
id: `u_${unit.unitId}`,
unitId: unit.unitId,
unitNum: unit.unitNum,
floorId: unit.floorId, // Add floorId reference
icon: "/img/unit.png",
text: `${unit.unitNum}${this.$t('room.floorUnitTree.unit')}`,
children: []
})
|
cd8d442f
wuxw
开始处理水电抄表功能
|
72
73
|
})
|
9d8dc2e6
wuxw
开发完成水电抄表
|
74
|
this.treeData = Object.values(floorMap)
|
cd8d442f
wuxw
开始处理水电抄表功能
|
75
|
},
|
9d8dc2e6
wuxw
开发完成水电抄表
|
76
|
async handleNodeClick(data, node) {
|
cd8d442f
wuxw
开始处理水电抄表功能
|
77
|
if (data.id.startsWith('u_')) {
|
9d8dc2e6
wuxw
开发完成水电抄表
|
78
79
80
81
|
if (!node.expanded) {
await this.loadRooms(data, node)
node.expanded = true
}
|
cd8d442f
wuxw
开始处理水电抄表功能
|
82
83
84
85
86
87
88
|
} else if (data.id.startsWith('r_')) {
this.$emit('selectRoom', {
roomId: data.roomId,
roomName: data.roomName
})
}
},
|
9d8dc2e6
wuxw
开发完成水电抄表
|
89
|
async loadRooms(unitData, node) {
|
cd8d442f
wuxw
开始处理水电抄表功能
|
90
|
try {
|
9d8dc2e6
wuxw
开发完成水电抄表
|
91
92
|
const { rooms } = await queryRoomsTree({
unitId: unitData.unitId,
|
cd8d442f
wuxw
开始处理水电抄表功能
|
93
94
95
96
97
|
communityId: this.communityId,
page: 1,
row: 1000
})
|
9d8dc2e6
wuxw
开发完成水电抄表
|
98
99
100
101
102
103
104
105
106
107
|
if (rooms && rooms.length > 0) {
const roomNodes = rooms.map(room => ({
id: `r_${room.roomId}`,
roomId: room.roomId,
roomName: `${room.floorNum}-${room.unitNum}-${room.roomNum}`,
icon: "/img/room.png",
text: room.ownerName
? `${room.roomNum}${room.ownerName})`
: `${room.roomNum}`
}))
|
cd8d442f
wuxw
开始处理水电抄表功能
|
108
|
|
9d8dc2e6
wuxw
开发完成水电抄表
|
109
110
|
// Update the node's children
this.$set(node.data, 'children', roomNodes)
|
cd8d442f
wuxw
开始处理水电抄表功能
|
111
112
113
|
}
} catch (error) {
console.error('Failed to load rooms:', error)
|
9d8dc2e6
wuxw
开发完成水电抄表
|
114
|
this.$message.error(this.$t('roomTree.loadRoomError'))
|
cd8d442f
wuxw
开始处理水电抄表功能
|
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
}
}
}
}
</script>
<style lang="scss" scoped>
.room-tree-container {
height: 100%;
overflow-y: auto;
padding: 10px;
.custom-tree-node {
flex: 1;
display: flex;
align-items: center;
font-size: 14px;
padding: 5px 0;
}
}
</style>
|