Commit 81955f616e3cc3e63d2ba902348672023c5fdf4a

Authored by wuxw
1 parent af1bcbd6

优化房屋页面

Showing 73 changed files with 896 additions and 1402 deletions
public/import/hc.xlsx 0 → 100644
No preview for this file type
public/import/hc20200610.xlsx 0 → 100644
No preview for this file type
public/import/importCar.xlsx 0 → 100644
No preview for this file type
public/import/importCarFeeDetail.xlsx 0 → 100644
No preview for this file type
public/import/importFeeDetail.xlsx 0 → 100644
No preview for this file type
public/import/importResourceStore.xlsx 0 → 100644
No preview for this file type
public/import/importRoom.xlsx 0 → 100644
No preview for this file type
public/import/meterMachine.xlsx 0 → 100644
No preview for this file type
public/import/wy.xlsx 0 → 100644
No preview for this file type
src/api/room/addFloorApi.js
@@ -3,11 +3,11 @@ import request from '@/utils/request' @@ -3,11 +3,11 @@ import request from '@/utils/request'
3 export function addFloor(data) { 3 export function addFloor(data) {
4 return new Promise((resolve, reject) => { 4 return new Promise((resolve, reject) => {
5 request({ 5 request({
6 - url: '/floor/saveFloor', 6 + url: '/floor.saveFloor',
7 method: 'post', 7 method: 'post',
8 data 8 data
9 }).then(response => { 9 }).then(response => {
10 - resolve(response) 10 + resolve(response.data)
11 }).catch(error => { 11 }).catch(error => {
12 reject(error) 12 reject(error)
13 }) 13 })
src/api/room/deleteFloorApi.js
@@ -3,11 +3,11 @@ import request from '@/utils/request' @@ -3,11 +3,11 @@ import request from '@/utils/request'
3 export function deleteFloor(data) { 3 export function deleteFloor(data) {
4 return new Promise((resolve, reject) => { 4 return new Promise((resolve, reject) => {
5 request({ 5 request({
6 - url: '/floor/deleteFloor', 6 + url: '/floor.deleteFloor',
7 method: 'post', 7 method: 'post',
8 data 8 data
9 }).then(response => { 9 }).then(response => {
10 - resolve(response) 10 + resolve(response.data)
11 }).catch(error => { 11 }).catch(error => {
12 reject(error) 12 reject(error)
13 }) 13 })
src/api/room/deleteUnitApi.js
1 import request from '@/utils/request' 1 import request from '@/utils/request'
2 2
3 -export function deleteUnit(params) { 3 +export function deleteUnit(data) {
4 return new Promise((resolve, reject) => { 4 return new Promise((resolve, reject) => {
5 request({ 5 request({
6 url: '/unit.deleteUnit', 6 url: '/unit.deleteUnit',
7 method: 'post', 7 method: 'post',
8 - params 8 + data
9 }).then(response => { 9 }).then(response => {
10 const res = response.data 10 const res = response.data
11 - if (res.code === 0) { 11 + if (res.code == 0) {
12 resolve(res) 12 resolve(res)
13 } else { 13 } else {
14 reject(new Error(res.msg || '删除单元失败')) 14 reject(new Error(res.msg || '删除单元失败'))
src/api/room/editFloorApi.js
@@ -3,11 +3,11 @@ import request from '@/utils/request' @@ -3,11 +3,11 @@ import request from '@/utils/request'
3 export function editFloor(data) { 3 export function editFloor(data) {
4 return new Promise((resolve, reject) => { 4 return new Promise((resolve, reject) => {
5 request({ 5 request({
6 - url: '/floor/editFloor', 6 + url: '/floor.editFloor',
7 method: 'post', 7 method: 'post',
8 data 8 data
9 }).then(response => { 9 }).then(response => {
10 - resolve(response) 10 + resolve(response.data)
11 }).catch(error => { 11 }).catch(error => {
12 reject(error) 12 reject(error)
13 }) 13 })
src/api/room/editRoomApi.js
@@ -27,11 +27,8 @@ export function getUnits(params) { @@ -27,11 +27,8 @@ export function getUnits(params) {
27 params 27 params
28 }).then(response => { 28 }).then(response => {
29 const res = response.data 29 const res = response.data
30 - if (res.code === 0) {  
31 - resolve(res.data)  
32 - } else {  
33 - reject(new Error(res.msg || '获取单元列表失败'))  
34 - } 30 +
  31 + resolve(res)
35 }).catch(error => { 32 }).catch(error => {
36 reject(error) 33 reject(error)
37 }) 34 })
src/api/room/floorUnitTreeApi.js
@@ -8,11 +8,7 @@ export function getFloorAndUnits(communityId) { @@ -8,11 +8,7 @@ export function getFloorAndUnits(communityId) {
8 params: { communityId } 8 params: { communityId }
9 }).then(response => { 9 }).then(response => {
10 const res = response.data 10 const res = response.data
11 - if (res.code === 0) {  
12 - resolve(res.data)  
13 - } else {  
14 - reject(new Error(res.msg || '获取楼栋单元失败'))  
15 - } 11 + resolve(res)
16 }).catch(error => { 12 }).catch(error => {
17 reject(error) 13 reject(error)
18 }) 14 })
src/api/room/ownerRoomsApi.js
@@ -8,11 +8,7 @@ export function queryRoomsByOwner(params) { @@ -8,11 +8,7 @@ export function queryRoomsByOwner(params) {
8 params 8 params
9 }).then(response => { 9 }).then(response => {
10 const res = response.data 10 const res = response.data
11 - if (res.code === 0) {  
12 - resolve(res.data)  
13 - } else {  
14 - reject(new Error(res.msg || '获取业主房屋失败'))  
15 - } 11 + resolve(res)
16 }).catch(error => { 12 }).catch(error => {
17 reject(error) 13 reject(error)
18 }) 14 })
src/api/room/roomApi.js
@@ -9,11 +9,7 @@ export function queryRooms(params) { @@ -9,11 +9,7 @@ export function queryRooms(params) {
9 params 9 params
10 }).then(response => { 10 }).then(response => {
11 const res = response.data 11 const res = response.data
12 - if (res.code === 0) {  
13 resolve(res) 12 resolve(res)
14 - } else {  
15 - reject(new Error(res.msg || '获取房屋列表失败'))  
16 - }  
17 }).catch(error => { 13 }).catch(error => {
18 reject(error) 14 reject(error)
19 }) 15 })
@@ -29,11 +25,8 @@ export function getFloors(params) { @@ -29,11 +25,8 @@ export function getFloors(params) {
29 params 25 params
30 }).then(response => { 26 }).then(response => {
31 const res = response.data 27 const res = response.data
32 - if (res.code === 0) { 28 +
33 resolve(res) 29 resolve(res)
34 - } else {  
35 - reject(new Error(res.msg || '获取楼栋列表失败'))  
36 - }  
37 }).catch(error => { 30 }).catch(error => {
38 reject(error) 31 reject(error)
39 }) 32 })
@@ -49,11 +42,8 @@ export function getUnits(params) { @@ -49,11 +42,8 @@ export function getUnits(params) {
49 params 42 params
50 }).then(response => { 43 }).then(response => {
51 const res = response.data 44 const res = response.data
52 - if (res.code === 0) { 45 +
53 resolve(res) 46 resolve(res)
54 - } else {  
55 - reject(new Error(res.msg || '获取单元列表失败'))  
56 - }  
57 }).catch(error => { 47 }).catch(error => {
58 reject(error) 48 reject(error)
59 }) 49 })
src/components/admin/WriteAdvertMachine.vue
@@ -44,7 +44,7 @@ export default { @@ -44,7 +44,7 @@ export default {
44 path: '/advertVedio', 44 path: '/advertVedio',
45 query: { 45 query: {
46 machineCode: this.machineCode, 46 machineCode: this.machineCode,
47 - communityId: this.$store.getters.communityId 47 + communityId: this.getCommunityId()
48 } 48 }
49 }) 49 })
50 this.visible = false 50 this.visible = false
src/components/community/DeleteRoomRenovation.vue
@@ -38,7 +38,7 @@ export default { @@ -38,7 +38,7 @@ export default {
38 open(row) { 38 open(row) {
39 this.form = { 39 this.form = {
40 rId: row.rId, 40 rId: row.rId,
41 - communityId: this.$store.getters.communityId 41 + communityId: this.getCommunityId()
42 } 42 }
43 this.visible = true 43 this.visible = true
44 }, 44 },
src/components/community/EditRoomRenovation.vue
@@ -177,7 +177,7 @@ export default { @@ -177,7 +177,7 @@ export default {
177 this.getDictData() 177 this.getDictData()
178 this.form = { 178 this.form = {
179 ...row, 179 ...row,
180 - communityId: this.$store.getters.communityId 180 + communityId: this.getCommunityId()
181 } 181 }
182 this.visible = true 182 this.visible = true
183 }, 183 },
src/components/community/RoomDecorationAcceptance.vue
@@ -71,7 +71,7 @@ export default { @@ -71,7 +71,7 @@ export default {
71 state: '', 71 state: '',
72 remark: '', 72 remark: '',
73 detailType: '1001', 73 detailType: '1001',
74 - communityId: this.$store.getters.communityId 74 + communityId: this.getCommunityId()
75 } 75 }
76 this.visible = true 76 this.visible = true
77 }, 77 },
@@ -83,7 +83,7 @@ export default { @@ -83,7 +83,7 @@ export default {
83 state: '', 83 state: '',
84 remark: '', 84 remark: '',
85 detailType: '1001', 85 detailType: '1001',
86 - communityId: this.$store.getters.communityId 86 + communityId: this.getCommunityId()
87 } 87 }
88 }, 88 },
89 89
src/components/community/RoomRenovationCompleted.vue
@@ -38,7 +38,7 @@ export default { @@ -38,7 +38,7 @@ export default {
38 open(row) { 38 open(row) {
39 this.form = { 39 this.form = {
40 rId: row.rId, 40 rId: row.rId,
41 - communityId: this.$store.getters.communityId 41 + communityId: this.getCommunityId()
42 } 42 }
43 this.visible = true 43 this.visible = true
44 }, 44 },
src/components/community/RoomToExamine.vue
@@ -69,7 +69,7 @@ export default { @@ -69,7 +69,7 @@ export default {
69 roomName: row.roomName, 69 roomName: row.roomName,
70 state: '', 70 state: '',
71 examineRemark: '', 71 examineRemark: '',
72 - communityId: this.$store.getters.communityId 72 + communityId: this.getCommunityId()
73 } 73 }
74 this.visible = true 74 this.visible = true
75 }, 75 },
src/components/mall/DeleteJunkRequirement.vue
@@ -39,7 +39,7 @@ export default { @@ -39,7 +39,7 @@ export default {
39 try { 39 try {
40 await deleteJunkRequirement({ 40 await deleteJunkRequirement({
41 junkRequirementId: this.junkRequirementId, 41 junkRequirementId: this.junkRequirementId,
42 - communityId: this.$store.getters.communityId 42 + communityId: this.getCommunityId()
43 }) 43 })
44 this.$message.success(this.$t('junkRequirement.delete.success')) 44 this.$message.success(this.$t('junkRequirement.delete.success'))
45 this.$emit('success') 45 this.$emit('success')
src/components/mall/EditJunkRequirement.vue
@@ -120,7 +120,7 @@ export default { @@ -120,7 +120,7 @@ export default {
120 try { 120 try {
121 await updateJunkRequirement({ 121 await updateJunkRequirement({
122 ...this.editJunkRequirementInfo, 122 ...this.editJunkRequirementInfo,
123 - communityId: this.$store.getters.communityId 123 + communityId: this.getCommunityId()
124 }) 124 })
125 this.$message.success(this.$t('junkRequirement.edit.success')) 125 this.$message.success(this.$t('junkRequirement.edit.success'))
126 this.$emit('success') 126 this.$emit('success')
src/components/owner/ownerCars.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :visible.sync="dialogVisible"  
4 - :title="$t('ownerCars.title')"  
5 - width="80%"  
6 - top="5vh"  
7 - @close="handleClose"  
8 - > 2 + <el-dialog :visible.sync="dialogVisible" :title="$t('ownerCars.title')" width="80%" top="5vh" @close="handleClose">
9 <el-row> 3 <el-row>
10 <el-col :span="24"> 4 <el-col :span="24">
11 <div class="table-container"> 5 <div class="table-container">
@@ -42,15 +36,8 @@ @@ -42,15 +36,8 @@
42 </el-table-column> 36 </el-table-column>
43 </el-table> 37 </el-table>
44 </div> 38 </div>
45 - <el-pagination  
46 - background  
47 - layout="prev, pager, next, sizes, total"  
48 - :total="totalCount"  
49 - :page-size="pageSize"  
50 - :current-page="currentPage"  
51 - @size-change="handleSizeChange"  
52 - @current-change="handleCurrentChange"  
53 - /> 39 + <el-pagination background layout="prev, pager, next, sizes, total" :total="totalCount" :page-size="pageSize"
  40 + :current-page="currentPage" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
54 </el-col> 41 </el-col>
55 </el-row> 42 </el-row>
56 </el-dialog> 43 </el-dialog>
@@ -95,10 +82,10 @@ export default { @@ -95,10 +82,10 @@ export default {
95 const params = { 82 const params = {
96 page: page, 83 page: page,
97 row: size, 84 row: size,
98 - communityId: this.$store.getters.communityId, 85 + communityId: this.getCommunityId(),
99 ownerId: this.ownerCarsInfo.ownerId 86 ownerId: this.ownerCarsInfo.ownerId
100 } 87 }
101 - 88 +
102 const response = await queryOwnerCars(params) 89 const response = await queryOwnerCars(params)
103 this.ownerCarsInfo.cars = response.data 90 this.ownerCarsInfo.cars = response.data
104 this.totalCount = response.total 91 this.totalCount = response.total
src/components/owner/ownerComplaints.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :visible.sync="dialogVisible"  
4 - :title="$t('ownerComplaints.title')"  
5 - width="80%"  
6 - top="5vh"  
7 - @close="handleClose"  
8 - > 2 + <el-dialog :visible.sync="dialogVisible" :title="$t('ownerComplaints.title')" width="80%" top="5vh"
  3 + @close="handleClose">
9 <el-row> 4 <el-row>
10 <el-col :span="24"> 5 <el-col :span="24">
11 <div class="table-container"> 6 <div class="table-container">
@@ -32,15 +27,8 @@ @@ -32,15 +27,8 @@
32 <el-table-column prop="createTime" :label="$t('ownerComplaints.createTime')" align="center" /> 27 <el-table-column prop="createTime" :label="$t('ownerComplaints.createTime')" align="center" />
33 </el-table> 28 </el-table>
34 </div> 29 </div>
35 - <el-pagination  
36 - background  
37 - layout="prev, pager, next, sizes, total"  
38 - :total="totalCount"  
39 - :page-size="pageSize"  
40 - :current-page="currentPage"  
41 - @size-change="handleSizeChange"  
42 - @current-change="handleCurrentChange"  
43 - /> 30 + <el-pagination background layout="prev, pager, next, sizes, total" :total="totalCount" :page-size="pageSize"
  31 + :current-page="currentPage" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
44 </el-col> 32 </el-col>
45 </el-row> 33 </el-row>
46 </el-dialog> 34 </el-dialog>
@@ -85,10 +73,10 @@ export default { @@ -85,10 +73,10 @@ export default {
85 const params = { 73 const params = {
86 page: page, 74 page: page,
87 row: size, 75 row: size,
88 - communityId: this.$store.getters.communityId, 76 + communityId: this.getCommunityId(),
89 ownerId: this.ownerComplaintsInfo.ownerId 77 ownerId: this.ownerComplaintsInfo.ownerId
90 } 78 }
91 - 79 +
92 const response = await listComplaints(params) 80 const response = await listComplaints(params)
93 this.ownerComplaintsInfo.complaints = response.data 81 this.ownerComplaintsInfo.complaints = response.data
94 this.totalCount = response.total 82 this.totalCount = response.total
src/components/owner/ownerMembers.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :visible.sync="dialogVisible"  
4 - :title="$t('ownerMembers.title')"  
5 - width="80%"  
6 - top="5vh"  
7 - @close="handleClose"  
8 - > 2 + <el-dialog :visible.sync="dialogVisible" :title="$t('ownerMembers.title')" width="80%" top="5vh" @close="handleClose">
9 <el-row> 3 <el-row>
10 <el-col :span="24"> 4 <el-col :span="24">
11 <div class="table-container"> 5 <div class="table-container">
@@ -23,15 +17,8 @@ @@ -23,15 +17,8 @@
23 <el-table-column prop="address" :label="$t('ownerMembers.address')" align="center" /> 17 <el-table-column prop="address" :label="$t('ownerMembers.address')" align="center" />
24 </el-table> 18 </el-table>
25 </div> 19 </div>
26 - <el-pagination  
27 - background  
28 - layout="prev, pager, next, sizes, total"  
29 - :total="totalCount"  
30 - :page-size="pageSize"  
31 - :current-page="currentPage"  
32 - @size-change="handleSizeChange"  
33 - @current-change="handleCurrentChange"  
34 - /> 20 + <el-pagination background layout="prev, pager, next, sizes, total" class="margin-top" :total="totalCount" :page-size="pageSize"
  21 + :current-page="currentPage" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
35 </el-col> 22 </el-col>
36 </el-row> 23 </el-row>
37 </el-dialog> 24 </el-dialog>
@@ -76,10 +63,10 @@ export default { @@ -76,10 +63,10 @@ export default {
76 const params = { 63 const params = {
77 page: page, 64 page: page,
78 row: size, 65 row: size,
79 - communityId: this.$store.getters.communityId, 66 + communityId: this.getCommunityId(),
80 ownerId: this.ownerMembersInfo.ownerId 67 ownerId: this.ownerMembersInfo.ownerId
81 } 68 }
82 - 69 +
83 const response = await queryOwnerMembers(params) 70 const response = await queryOwnerMembers(params)
84 this.ownerMembersInfo.members = response.data 71 this.ownerMembersInfo.members = response.data
85 this.totalCount = response.total 72 this.totalCount = response.total
src/components/owner/ownerOweFees.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :visible.sync="visible"  
4 - :title="$t('ownerOweFees.title')"  
5 - width="80%"  
6 - top="5vh"  
7 - custom-class="custom-modal"  
8 - @close="handleClose"  
9 - >  
10 - <el-table  
11 - :data="ownerOweFeesInfo.fees"  
12 - stripe  
13 - border  
14 - style="width: 100%; margin-top: 15px"  
15 - >  
16 - <el-table-column  
17 - prop="payerObjName"  
18 - :label="$t('ownerOweFees.payerObj')"  
19 - align="center"  
20 - />  
21 - <el-table-column  
22 - prop="ownerName"  
23 - :label="$t('ownerOweFees.ownerName')"  
24 - align="center"  
25 - />  
26 - <el-table-column  
27 - prop="ownerTel"  
28 - :label="$t('ownerOweFees.phone')"  
29 - align="center"  
30 - />  
31 - <el-table-column  
32 - prop="endTime"  
33 - :label="$t('ownerOweFees.startTime')"  
34 - align="center"  
35 - />  
36 - <el-table-column  
37 - prop="deadlineTime"  
38 - :label="$t('ownerOweFees.endTime')"  
39 - align="center"  
40 - />  
41 - <el-table-column  
42 - prop="amountOwed"  
43 - :label="`${$t('ownerOweFees.total')} (${$t('ownerOweFees.unit')})`"  
44 - align="center"  
45 - />  
46 - <el-table-column  
47 - prop="updateTime"  
48 - :label="$t('ownerOweFees.updateTime')"  
49 - align="center"  
50 - /> 2 + <el-dialog :visible.sync="visible" :title="$t('ownerOweFees.title')" width="80%" top="5vh" custom-class="custom-modal"
  3 + @close="handleClose">
  4 + <el-table :data="ownerOweFeesInfo.fees" stripe border style="width: 100%; margin-top: 15px">
  5 + <el-table-column prop="payerObjName" :label="$t('ownerOweFees.payerObj')" align="center" />
  6 + <el-table-column prop="ownerName" :label="$t('ownerOweFees.ownerName')" align="center" />
  7 + <el-table-column prop="ownerTel" :label="$t('ownerOweFees.phone')" align="center" />
  8 + <el-table-column prop="endTime" :label="$t('ownerOweFees.startTime')" align="center" />
  9 + <el-table-column prop="deadlineTime" :label="$t('ownerOweFees.endTime')" align="center" />
  10 + <el-table-column prop="amountOwed" :label="`${$t('ownerOweFees.total')} (${$t('ownerOweFees.unit')})`"
  11 + align="center" />
  12 + <el-table-column prop="updateTime" :label="$t('ownerOweFees.updateTime')" align="center" />
51 </el-table> 13 </el-table>
52 -  
53 - <el-pagination  
54 - v-if="pagination.total > 0"  
55 - background  
56 - layout="prev, pager, next"  
57 - :total="pagination.total"  
58 - :page-size="pagination.pageSize"  
59 - :current-page="pagination.currentPage"  
60 - @current-change="handlePageChange"  
61 - style="margin-top: 20px; text-align: right"  
62 - /> 14 +
  15 + <el-pagination v-if="pagination.total > 0" background layout="prev, pager, next" :total="pagination.total"
  16 + :page-size="pagination.pageSize" :current-page="pagination.currentPage" @current-change="handlePageChange"
  17 + style="margin-top: 20px; text-align: right" />
63 </el-dialog> 18 </el-dialog>
64 </template> 19 </template>
65 20
@@ -104,7 +59,7 @@ export default { @@ -104,7 +59,7 @@ export default {
104 communityId: this.getCommunityId(), 59 communityId: this.getCommunityId(),
105 ownerId: this.ownerOweFeesInfo.ownerId 60 ownerId: this.ownerOweFeesInfo.ownerId
106 } 61 }
107 - 62 +
108 const response = await getOwnerOweFees(params) 63 const response = await getOwnerOweFees(params)
109 this.ownerOweFeesInfo.fees = response.data 64 this.ownerOweFeesInfo.fees = response.data
110 this.pagination.total = response.records 65 this.pagination.total = response.records
@@ -113,15 +68,12 @@ export default { @@ -113,15 +68,12 @@ export default {
113 this.$message.error(this.$t('common.loadFailed')) 68 this.$message.error(this.$t('common.loadFailed'))
114 } 69 }
115 }, 70 },
116 - getCommunityId() {  
117 - return this.$store.state.user.currentCommunity.communityId  
118 - }  
119 } 71 }
120 } 72 }
121 </script> 73 </script>
122 74
123 <style scoped> 75 <style scoped>
124 -.custom-modal >>> .el-dialog__body { 76 +.custom-modal>>>.el-dialog__body {
125 padding: 15px 20px; 77 padding: 15px 20px;
126 } 78 }
127 </style> 79 </style>
128 \ No newline at end of file 80 \ No newline at end of file
src/components/owner/ownerRepairs.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :visible.sync="dialogVisible"  
4 - :title="$t('ownerRepairs.title')"  
5 - width="80%"  
6 - top="5vh"  
7 - @close="handleClose"  
8 - > 2 + <el-dialog :visible.sync="dialogVisible" :title="$t('ownerRepairs.title')" width="80%" top="5vh" @close="handleClose">
9 <el-row> 3 <el-row>
10 <el-col :span="24"> 4 <el-col :span="24">
11 <div class="table-container"> 5 <div class="table-container">
@@ -28,15 +22,8 @@ @@ -28,15 +22,8 @@
28 </el-table-column> 22 </el-table-column>
29 </el-table> 23 </el-table>
30 </div> 24 </div>
31 - <el-pagination  
32 - background  
33 - layout="prev, pager, next, sizes, total"  
34 - :total="totalCount"  
35 - :page-size="pageSize"  
36 - :current-page="currentPage"  
37 - @size-change="handleSizeChange"  
38 - @current-change="handleCurrentChange"  
39 - /> 25 + <el-pagination background layout="prev, pager, next, sizes, total" :total="totalCount" :page-size="pageSize"
  26 + :current-page="currentPage" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
40 </el-col> 27 </el-col>
41 </el-row> 28 </el-row>
42 </el-dialog> 29 </el-dialog>
@@ -81,10 +68,10 @@ export default { @@ -81,10 +68,10 @@ export default {
81 const params = { 68 const params = {
82 page: page, 69 page: page,
83 row: size, 70 row: size,
84 - communityId: this.$store.getters.communityId, 71 + communityId: this.getCommunityId(),
85 ownerId: this.ownerRepairsInfo.ownerId 72 ownerId: this.ownerRepairsInfo.ownerId
86 } 73 }
87 - 74 +
88 const response = await listOwnerRepairs(params) 75 const response = await listOwnerRepairs(params)
89 this.ownerRepairsInfo.repairs = response.data 76 this.ownerRepairsInfo.repairs = response.data
90 this.totalCount = response.total 77 this.totalCount = response.total
src/components/owner/ownerRooms.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :title="$t('ownerRooms.title')"  
4 - :visible.sync="visible"  
5 - width="70%"  
6 - :before-close="handleClose"  
7 - > 2 + <el-dialog :title="$t('ownerRooms.title')" :visible.sync="visible" width="70%" :before-close="handleClose">
8 <el-table :data="ownerRoomsInfo.rooms" style="width: 100%"> 3 <el-table :data="ownerRoomsInfo.rooms" style="width: 100%">
9 <el-table-column prop="roomId" :label="$t('ownerRooms.roomId')" align="center" /> 4 <el-table-column prop="roomId" :label="$t('ownerRooms.roomId')" align="center" />
10 <el-table-column prop="layer" :label="$t('ownerRooms.layer')" align="center" /> 5 <el-table-column prop="layer" :label="$t('ownerRooms.layer')" align="center" />
@@ -22,19 +17,14 @@ @@ -22,19 +17,14 @@
22 </template> 17 </template>
23 </el-table-column> 18 </el-table-column>
24 </el-table> 19 </el-table>
25 -  
26 - <el-row class="mt-3"> 20 +
  21 + <el-row class="mt-3 margin-top">
27 <el-col :span="8"> 22 <el-col :span="8">
28 <span>{{ $t('ownerRooms.subtotal') }}: {{ ownerRoomsInfo.allOweFeeAmount }}</span> 23 <span>{{ $t('ownerRooms.subtotal') }}: {{ ownerRoomsInfo.allOweFeeAmount }}</span>
29 </el-col> 24 </el-col>
30 <el-col :span="16" class="text-right"> 25 <el-col :span="16" class="text-right">
31 - <el-pagination  
32 - :current-page="pagination.currentPage"  
33 - :page-size="pagination.pageSize"  
34 - :total="pagination.total"  
35 - layout="prev, pager, next"  
36 - @current-change="handlePageChange"  
37 - /> 26 + <el-pagination :current-page="pagination.currentPage" :page-size="pagination.pageSize" :total="pagination.total"
  27 + layout="prev, pager, next" @current-change="handlePageChange" />
38 </el-col> 28 </el-col>
39 </el-row> 29 </el-row>
40 </el-dialog> 30 </el-dialog>
@@ -81,7 +71,7 @@ export default { @@ -81,7 +71,7 @@ export default {
81 communityId: this.getCommunityId(), 71 communityId: this.getCommunityId(),
82 ownerId: this.ownerRoomsInfo.ownerId 72 ownerId: this.ownerRoomsInfo.ownerId
83 } 73 }
84 - 74 +
85 const response = await queryRoomsByOwner(params) 75 const response = await queryRoomsByOwner(params)
86 this.ownerRoomsInfo.rooms = response.rooms 76 this.ownerRoomsInfo.rooms = response.rooms
87 this.pagination.total = response.total || 0 77 this.pagination.total = response.total || 0
src/components/room/addFloor.vue
@@ -20,7 +20,7 @@ @@ -20,7 +20,7 @@
20 </el-input> 20 </el-input>
21 </el-form-item> 21 </el-form-item>
22 22
23 - <el-form-item :label="$t('room.addFloor.seq')" prop="seq"> 23 + <el-form-item :label="$t('room.addFloor.seq')" class="text-left" prop="seq">
24 <el-input-number v-model="form.seq" :min="1" /> 24 <el-input-number v-model="form.seq" :min="1" />
25 </el-form-item> 25 </el-form-item>
26 26
@@ -28,7 +28,6 @@ @@ -28,7 +28,6 @@
28 <el-input v-model="form.remark" type="textarea" :placeholder="$t('room.addFloor.remarkPlaceholder')" /> 28 <el-input v-model="form.remark" type="textarea" :placeholder="$t('room.addFloor.remarkPlaceholder')" />
29 </el-form-item> 29 </el-form-item>
30 30
31 - <el-alert v-if="errorInfo" :title="errorInfo" type="error" show-icon />  
32 </el-form> 31 </el-form>
33 32
34 <span slot="footer" class="dialog-footer"> 33 <span slot="footer" class="dialog-footer">
@@ -117,21 +116,13 @@ export default { @@ -117,21 +116,13 @@ export default {
117 if (!valid) return 116 if (!valid) return
118 117
119 try { 118 try {
120 - if (this.callBackListener && this.callBackFunction) {  
121 - const floorInfo = { ...this.form }  
122 - floorInfo.floorName = this.form.name  
123 - this.$emit(this.callBackFunction, floorInfo)  
124 - this.handleClose()  
125 - return  
126 - }  
127 - 119 +
128 const response = await addFloor(this.form) 120 const response = await addFloor(this.form)
129 121
130 - if (response.code === 0) { 122 + if (response.code == 0) {
131 this.$message.success(this.$t('room.addFloor.saveSuccess')) 123 this.$message.success(this.$t('room.addFloor.saveSuccess'))
132 this.handleClose() 124 this.handleClose()
133 - this.$emit('refresh-data')  
134 - this.$emit('refresh-tree') 125 + this.$emit('handleRefreshTree', {})
135 } else { 126 } else {
136 this.errorInfo = response.msg || this.$t('room.addFloor.saveFailed') 127 this.errorInfo = response.msg || this.$t('room.addFloor.saveFailed')
137 } 128 }
@@ -140,10 +131,6 @@ export default { @@ -140,10 +131,6 @@ export default {
140 } 131 }
141 }) 132 })
142 }, 133 },
143 - getCommunityId() {  
144 - // 实际项目中替换为获取社区ID的逻辑  
145 - return 'your-community-id'  
146 - }  
147 } 134 }
148 } 135 }
149 </script> 136 </script>
150 \ No newline at end of file 137 \ No newline at end of file
src/components/room/addUnit.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :title="$t('addUnit.title')"  
4 - :visible.sync="visible"  
5 - width="50%"  
6 - :before-close="handleClose"  
7 - > 2 + <el-dialog :title="$t('addUnit.title')" :visible.sync="visible" width="50%" :before-close="handleClose">
8 <el-form ref="form" :model="addUnitInfo" label-width="120px"> 3 <el-form ref="form" :model="addUnitInfo" label-width="120px">
9 <el-form-item :label="$t('addUnit.unitNum')" prop="unitNum" required> 4 <el-form-item :label="$t('addUnit.unitNum')" prop="unitNum" required>
10 - <el-input  
11 - v-model="addUnitInfo.unitNum"  
12 - :placeholder="$t('addUnit.unitNumPlaceholder')"  
13 - ></el-input> 5 + <el-input v-model="addUnitInfo.unitNum" :placeholder="$t('addUnit.unitNumPlaceholder')"></el-input>
14 </el-form-item> 6 </el-form-item>
15 - 7 +
16 <el-form-item :label="$t('addUnit.layerCount')" prop="layerCount" required> 8 <el-form-item :label="$t('addUnit.layerCount')" prop="layerCount" required>
17 - <el-input  
18 - v-model.number="addUnitInfo.layerCount"  
19 - type="number"  
20 - :placeholder="$t('addUnit.layerCountPlaceholder')"  
21 - ></el-input> 9 + <el-input v-model.number="addUnitInfo.layerCount" type="number"
  10 + :placeholder="$t('addUnit.layerCountPlaceholder')"></el-input>
22 </el-form-item> 11 </el-form-item>
23 - 12 +
24 <el-form-item :label="$t('addUnit.unitArea')" prop="unitArea" required> 13 <el-form-item :label="$t('addUnit.unitArea')" prop="unitArea" required>
25 - <el-input  
26 - v-model="addUnitInfo.unitArea"  
27 - :placeholder="$t('addUnit.unitAreaPlaceholder')"  
28 - ></el-input> 14 + <el-input v-model="addUnitInfo.unitArea" :placeholder="$t('addUnit.unitAreaPlaceholder')"></el-input>
29 </el-form-item> 15 </el-form-item>
30 - 16 +
31 <el-form-item :label="$t('addUnit.lift')" prop="lift" required> 17 <el-form-item :label="$t('addUnit.lift')" prop="lift" required>
32 - <el-select  
33 - v-model="addUnitInfo.lift"  
34 - :placeholder="$t('addUnit.liftPlaceholder')"  
35 - style="width: 100%"  
36 - >  
37 - <el-option  
38 - :label="$t('addUnit.liftOption1')"  
39 - value="1010"  
40 - ></el-option>  
41 - <el-option  
42 - :label="$t('addUnit.liftOption2')"  
43 - value="2020"  
44 - ></el-option> 18 + <el-select v-model="addUnitInfo.lift" :placeholder="$t('addUnit.liftPlaceholder')" style="width: 100%">
  19 + <el-option :label="$t('addUnit.liftOption1')" value="1010"></el-option>
  20 + <el-option :label="$t('addUnit.liftOption2')" value="2020"></el-option>
45 </el-select> 21 </el-select>
46 </el-form-item> 22 </el-form-item>
47 - 23 +
48 <el-form-item :label="$t('addUnit.remark')"> 24 <el-form-item :label="$t('addUnit.remark')">
49 - <el-input  
50 - v-model="addUnitInfo.remark"  
51 - type="textarea"  
52 - :rows="3"  
53 - :placeholder="$t('addUnit.remarkPlaceholder')"  
54 - ></el-input> 25 + <el-input v-model="addUnitInfo.remark" type="textarea" :rows="3"
  26 + :placeholder="$t('addUnit.remarkPlaceholder')"></el-input>
55 </el-form-item> 27 </el-form-item>
56 </el-form> 28 </el-form>
57 - 29 +
58 <span slot="footer" class="dialog-footer"> 30 <span slot="footer" class="dialog-footer">
59 <el-button @click="handleClose">{{ $t('addUnit.cancel') }}</el-button> 31 <el-button @click="handleClose">{{ $t('addUnit.cancel') }}</el-button>
60 <el-button type="primary" @click="addUnit">{{ $t('addUnit.save') }}</el-button> 32 <el-button type="primary" @click="addUnit">{{ $t('addUnit.save') }}</el-button>
@@ -119,17 +91,17 @@ export default { @@ -119,17 +91,17 @@ export default {
119 async addUnit() { 91 async addUnit() {
120 const isValid = await this.validateForm() 92 const isValid = await this.validateForm()
121 if (!isValid) return 93 if (!isValid) return
122 - 94 +
123 if (this.addUnitInfo.unitNum === '0') { 95 if (this.addUnitInfo.unitNum === '0') {
124 this.$message.warning(this.$t('addUnit.zeroUnitWarning')) 96 this.$message.warning(this.$t('addUnit.zeroUnitWarning'))
125 return 97 return
126 } 98 }
127 - 99 +
128 try { 100 try {
129 await saveUnit(this.addUnitInfo) 101 await saveUnit(this.addUnitInfo)
130 this.$message.success(this.$t('addUnit.successMessage')) 102 this.$message.success(this.$t('addUnit.successMessage'))
131 - this.$emit('refresh-tree', { floorId: this.addUnitInfo.floorId })  
132 - this.$emit('refresh-data', { floorId: this.addUnitInfo.floorId }) 103 + this.$emit('handleRefreshTree', {})
  104 +
133 this.handleClose() 105 this.handleClose()
134 } catch (error) { 106 } catch (error) {
135 console.error('添加单元失败:', error) 107 console.error('添加单元失败:', error)
src/components/room/deleteFloor.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :title="$t('room.deleteFloor.title')"  
4 - :visible.sync="visible"  
5 - width="30%"  
6 - :before-close="handleClose"  
7 - > 2 + <el-dialog :title="$t('room.deleteFloor.title')" :visible.sync="visible" width="30%" :before-close="handleClose">
8 <p>{{ $t('room.deleteFloor.confirmMessage') }}</p> 3 <p>{{ $t('room.deleteFloor.confirmMessage') }}</p>
9 <span slot="footer" class="dialog-footer"> 4 <span slot="footer" class="dialog-footer">
10 <el-button @click="handleClose">{{ $t('room.deleteFloor.cancelText') }}</el-button> 5 <el-button @click="handleClose">{{ $t('room.deleteFloor.cancelText') }}</el-button>
@@ -41,12 +36,12 @@ export default { @@ -41,12 +36,12 @@ export default {
41 async handleDelete() { 36 async handleDelete() {
42 try { 37 try {
43 const response = await deleteFloor(this.floorInfo) 38 const response = await deleteFloor(this.floorInfo)
44 -  
45 - if (response.code === 0) { 39 +
  40 + if (response.code == 0) {
46 this.$message.success(this.$t('room.deleteFloor.deleteSuccess')) 41 this.$message.success(this.$t('room.deleteFloor.deleteSuccess'))
47 this.handleClose() 42 this.handleClose()
48 - this.$emit('refresh-data')  
49 - this.$emit('refresh-tree') 43 + this.$emit('handleRefreshTree', {})
  44 +
50 } else { 45 } else {
51 this.$message.error(response.msg || this.$t('room.deleteFloor.deleteFailed')) 46 this.$message.error(response.msg || this.$t('room.deleteFloor.deleteFailed'))
52 } 47 }
@@ -54,10 +49,6 @@ export default { @@ -54,10 +49,6 @@ export default {
54 this.$message.error(this.$t('room.deleteFloor.deleteError')) 49 this.$message.error(this.$t('room.deleteFloor.deleteError'))
55 } 50 }
56 }, 51 },
57 - getCommunityId() {  
58 - // 实际项目中替换为获取社区ID的逻辑  
59 - return 'your-community-id'  
60 - }  
61 } 52 }
62 } 53 }
63 </script> 54 </script>
64 \ No newline at end of file 55 \ No newline at end of file
src/components/room/deleteRoom.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :title="$t('room.deleteRoom.title')"  
4 - :visible.sync="dialogVisible"  
5 - width="30%"  
6 - > 2 + <el-dialog :title="$t('room.deleteRoom.title')" :visible.sync="dialogVisible" width="30%">
7 <div style="text-align: center"> 3 <div style="text-align: center">
8 <p>{{ $t('room.deleteRoom.confirmMessage') }}</p> 4 <p>{{ $t('room.deleteRoom.confirmMessage') }}</p>
9 </div> 5 </div>
10 <div slot="footer"> 6 <div slot="footer">
11 <el-button @click="dialogVisible = false">{{ $t('common.cancel') }}</el-button> 7 <el-button @click="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
12 - <el-button type="danger" @click="deleteRoom">{{ $t('common.confirmDelete') }}</el-button> 8 + <el-button type="danger" @click="deleteRoom">{{ $t('common.confirm') }}</el-button>
13 </div> 9 </div>
14 </el-dialog> 10 </el-dialog>
15 </template> 11 </template>
@@ -39,21 +35,18 @@ export default { @@ -39,21 +35,18 @@ export default {
39 async deleteRoom() { 35 async deleteRoom() {
40 try { 36 try {
41 this.roomInfo.communityId = this.getCommunityId() 37 this.roomInfo.communityId = this.getCommunityId()
42 - 38 +
43 await deleteRoom(this.roomInfo) 39 await deleteRoom(this.roomInfo)
44 - 40 +
45 this.dialogVisible = false 41 this.dialogVisible = false
46 - this.$emit('room-deleted')  
47 - this.$eventBus.$emit('room', 'loadData', { floorId: this.roomInfo.floorId }) 42 + this.$emit('handleRefreshRoom')
  43 +
48 this.$message.success(this.$t('common.deleteSuccess')) 44 this.$message.success(this.$t('common.deleteSuccess'))
49 } catch (error) { 45 } catch (error) {
50 console.error('删除房屋失败', error) 46 console.error('删除房屋失败', error)
51 this.$message.error(error.message || this.$t('common.deleteFailed')) 47 this.$message.error(error.message || this.$t('common.deleteFailed'))
52 } 48 }
53 }, 49 },
54 - getCommunityId() {  
55 - return this.$store.state.community.currentCommunity.communityId  
56 - }  
57 } 50 }
58 } 51 }
59 </script> 52 </script>
60 \ No newline at end of file 53 \ No newline at end of file
src/components/room/deleteUnit.vue
@@ -48,8 +48,8 @@ export default { @@ -48,8 +48,8 @@ export default {
48 try { 48 try {
49 await deleteUnit(param) 49 await deleteUnit(param)
50 this.$message.success(this.$t('deleteUnit.successMessage')) 50 this.$message.success(this.$t('deleteUnit.successMessage'))
51 - this.$emit('refresh-tree', { floorId: this.deleteUnitInfo._currentFloorId })  
52 - this.$emit('refresh-data', { floorId: this.deleteUnitInfo._currentFloorId }) 51 + this.$emit('handleRefreshTree', {})
  52 +
53 this.handleClose() 53 this.handleClose()
54 } catch (error) { 54 } catch (error) {
55 console.error('删除单元失败:', error) 55 console.error('删除单元失败:', error)
src/components/room/editFloor.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :title="$t('room.editFloor.title')"  
4 - :visible.sync="visible"  
5 - width="50%"  
6 - :before-close="handleClose"  
7 - > 2 + <el-dialog :title="$t('room.editFloor.title')" :visible.sync="visible" width="50%" :before-close="handleClose">
8 <el-form ref="form" :model="form" :rules="rules" label-width="120px"> 3 <el-form ref="form" :model="form" :rules="rules" label-width="120px">
9 <el-form-item :label="$t('room.editFloor.floorNum')" prop="floorNum"> 4 <el-form-item :label="$t('room.editFloor.floorNum')" prop="floorNum">
10 <el-input v-model="form.floorNum" :placeholder="$t('room.editFloor.floorNumPlaceholder')" /> 5 <el-input v-model="form.floorNum" :placeholder="$t('room.editFloor.floorNumPlaceholder')" />
11 </el-form-item> 6 </el-form-item>
12 - 7 +
13 <el-form-item :label="$t('room.editFloor.floorName')" prop="floorName"> 8 <el-form-item :label="$t('room.editFloor.floorName')" prop="floorName">
14 <el-input v-model="form.floorName" :placeholder="$t('room.editFloor.floorNamePlaceholder')" /> 9 <el-input v-model="form.floorName" :placeholder="$t('room.editFloor.floorNamePlaceholder')" />
15 </el-form-item> 10 </el-form-item>
16 - 11 +
17 <el-form-item :label="$t('room.editFloor.floorArea')" prop="floorArea"> 12 <el-form-item :label="$t('room.editFloor.floorArea')" prop="floorArea">
18 <el-input v-model="form.floorArea" :placeholder="$t('room.editFloor.floorAreaPlaceholder')"> 13 <el-input v-model="form.floorArea" :placeholder="$t('room.editFloor.floorAreaPlaceholder')">
19 <template slot="append">m²</template> 14 <template slot="append">m²</template>
20 </el-input> 15 </el-input>
21 </el-form-item> 16 </el-form-item>
22 -  
23 - <el-form-item :label="$t('room.editFloor.seq')" prop="seq"> 17 +
  18 + <el-form-item :label="$t('room.editFloor.seq')" class="text-left" prop="seq">
24 <el-input-number v-model="form.seq" :min="1" /> 19 <el-input-number v-model="form.seq" :min="1" />
25 </el-form-item> 20 </el-form-item>
26 - 21 +
27 <el-form-item :label="$t('room.editFloor.remark')" prop="remark"> 22 <el-form-item :label="$t('room.editFloor.remark')" prop="remark">
28 <el-input v-model="form.remark" type="textarea" :placeholder="$t('room.editFloor.remarkPlaceholder')" /> 23 <el-input v-model="form.remark" type="textarea" :placeholder="$t('room.editFloor.remarkPlaceholder')" />
29 </el-form-item> 24 </el-form-item>
30 - 25 +
31 <el-alert v-if="errorInfo" :title="errorInfo" type="error" show-icon /> 26 <el-alert v-if="errorInfo" :title="errorInfo" type="error" show-icon />
32 </el-form> 27 </el-form>
33 - 28 +
34 <span slot="footer" class="dialog-footer"> 29 <span slot="footer" class="dialog-footer">
35 <el-button @click="handleClose">{{ $t('common.cancel') }}</el-button> 30 <el-button @click="handleClose">{{ $t('common.cancel') }}</el-button>
36 <el-button type="primary" @click="handleUpdate">{{ $t('common.update') }}</el-button> 31 <el-button type="primary" @click="handleUpdate">{{ $t('common.update') }}</el-button>
@@ -107,20 +102,20 @@ export default { @@ -107,20 +102,20 @@ export default {
107 async handleUpdate() { 102 async handleUpdate() {
108 this.$refs.form.validate(async (valid) => { 103 this.$refs.form.validate(async (valid) => {
109 if (!valid) return 104 if (!valid) return
110 - 105 +
111 try { 106 try {
112 const payload = { 107 const payload = {
113 ...this.form, 108 ...this.form,
114 name: this.form.floorName 109 name: this.form.floorName
115 } 110 }
116 - 111 +
117 const response = await editFloor(payload) 112 const response = await editFloor(payload)
118 -  
119 - if (response.code === 0) { 113 +
  114 + if (response.code == 0) {
120 this.$message.success(this.$t('room.editFloor.updateSuccess')) 115 this.$message.success(this.$t('room.editFloor.updateSuccess'))
121 this.handleClose() 116 this.handleClose()
122 - this.$emit('refresh-data')  
123 - this.$emit('refresh-tree', { floorId: this.form.floorId }) 117 + this.$emit('handleRefreshTree', {})
  118 +
124 } else { 119 } else {
125 this.errorInfo = response.msg || this.$t('room.editFloor.updateFailed') 120 this.errorInfo = response.msg || this.$t('room.editFloor.updateFailed')
126 } 121 }
@@ -129,10 +124,6 @@ export default { @@ -129,10 +124,6 @@ export default {
129 } 124 }
130 }) 125 })
131 }, 126 },
132 - getCommunityId() {  
133 - // 实际项目中替换为获取社区ID的逻辑  
134 - return 'your-community-id'  
135 - }  
136 } 127 }
137 } 128 }
138 </script> 129 </script>
139 \ No newline at end of file 130 \ No newline at end of file
src/components/room/editRoom.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :title="$t('room.editRoom.title')"  
4 - :visible.sync="dialogVisible"  
5 - width="50%"  
6 - > 2 + <el-dialog :title="$t('room.editRoom.title')" :visible.sync="dialogVisible" width="50%">
7 <el-form :model="form" label-width="120px" label-position="right"> 3 <el-form :model="form" label-width="120px" label-position="right">
8 <el-row> 4 <el-row>
9 <el-col :span="12"> 5 <el-col :span="12">
@@ -17,65 +13,47 @@ @@ -17,65 +13,47 @@
17 </el-form-item> 13 </el-form-item>
18 </el-col> 14 </el-col>
19 </el-row> 15 </el-row>
20 - 16 +
21 <el-row> 17 <el-row>
22 <el-col :span="12"> 18 <el-col :span="12">
23 <el-form-item :label="$t('room.editRoom.unit')" required> 19 <el-form-item :label="$t('room.editRoom.unit')" required>
24 - <el-select v-model="form.unitId" :placeholder="$t('room.editRoom.placeholder.unit')">  
25 - <el-option  
26 - v-for="unit in units"  
27 - :key="unit.unitId"  
28 - :label="`${unit.unitNum}${$t('room.editRoom.unit')}`"  
29 - :value="unit.unitId"  
30 - /> 20 + <el-select v-model="form.unitId" :placeholder="$t('room.editRoom.placeholder.unit')" style="width: 100%;">
  21 + <el-option v-for="unit in units" :key="unit.unitId" :label="`${unit.unitNum}${$t('room.editRoom.unit')}`"
  22 + :value="unit.unitId" />
31 </el-select> 23 </el-select>
32 </el-form-item> 24 </el-form-item>
33 </el-col> 25 </el-col>
34 <el-col :span="12"> 26 <el-col :span="12">
35 <el-form-item :label="$t('room.editRoom.roomType')" required> 27 <el-form-item :label="$t('room.editRoom.roomType')" required>
36 - <el-select v-model="form.roomSubType" :placeholder="$t('room.editRoom.placeholder.roomType')">  
37 - <el-option  
38 - v-for="item in roomSubTypes"  
39 - :key="item.statusCd"  
40 - :label="item.name"  
41 - :value="item.statusCd"  
42 - /> 28 + <el-select v-model="form.roomSubType" :placeholder="$t('room.editRoom.placeholder.roomType')" style="width: 100%;">
  29 + <el-option v-for="item in roomSubTypes" :key="item.statusCd" :label="item.name" :value="item.statusCd" />
43 </el-select> 30 </el-select>
44 </el-form-item> 31 </el-form-item>
45 </el-col> 32 </el-col>
46 </el-row> 33 </el-row>
47 - 34 +
48 <el-row> 35 <el-row>
49 <el-col :span="12"> 36 <el-col :span="12">
50 <el-form-item :label="$t('room.editRoom.apartment1')" required> 37 <el-form-item :label="$t('room.editRoom.apartment1')" required>
51 - <el-select v-model="form.apartment1" :placeholder="$t('room.editRoom.placeholder.apartment')">  
52 - <el-option  
53 - v-for="item in apartment1Options"  
54 - :key="item.value"  
55 - :label="item.label"  
56 - :value="item.value"  
57 - /> 38 + <el-select v-model="form.apartment1" :placeholder="$t('room.editRoom.placeholder.apartment')" style="width: 100%;">
  39 + <el-option v-for="item in apartment1Options" :key="item.value" :label="item.label" :value="item.value" />
58 </el-select> 40 </el-select>
59 </el-form-item> 41 </el-form-item>
60 </el-col> 42 </el-col>
61 <el-col :span="12"> 43 <el-col :span="12">
62 <el-form-item :label="$t('room.editRoom.apartment2')" required> 44 <el-form-item :label="$t('room.editRoom.apartment2')" required>
63 - <el-select v-model="form.apartment2" :placeholder="$t('room.editRoom.placeholder.apartment')">  
64 - <el-option  
65 - v-for="item in apartment2Options"  
66 - :key="item.value"  
67 - :label="item.label"  
68 - :value="item.value"  
69 - /> 45 + <el-select v-model="form.apartment2" :placeholder="$t('room.editRoom.placeholder.apartment')" style="width: 100%;">
  46 + <el-option v-for="item in apartment2Options" :key="item.value" :label="item.label" :value="item.value" />
70 </el-select> 47 </el-select>
71 </el-form-item> 48 </el-form-item>
72 </el-col> 49 </el-col>
73 </el-row> 50 </el-row>
74 - 51 +
75 <el-row> 52 <el-row>
76 <el-col :span="12"> 53 <el-col :span="12">
77 <el-form-item :label="$t('room.editRoom.builtUpArea')" required> 54 <el-form-item :label="$t('room.editRoom.builtUpArea')" required>
78 - <el-input v-model="form.builtUpArea" type="number" :placeholder="$t('room.editRoom.placeholder.builtUpArea')" /> 55 + <el-input v-model="form.builtUpArea" type="number"
  56 + :placeholder="$t('room.editRoom.placeholder.builtUpArea')" />
79 </el-form-item> 57 </el-form-item>
80 </el-col> 58 </el-col>
81 <el-col :span="12"> 59 <el-col :span="12">
@@ -84,7 +62,7 @@ @@ -84,7 +62,7 @@
84 </el-form-item> 62 </el-form-item>
85 </el-col> 63 </el-col>
86 </el-row> 64 </el-row>
87 - 65 +
88 <el-row> 66 <el-row>
89 <el-col :span="12"> 67 <el-col :span="12">
90 <el-form-item :label="$t('room.editRoom.feeCoefficient')"> 68 <el-form-item :label="$t('room.editRoom.feeCoefficient')">
@@ -97,64 +75,37 @@ @@ -97,64 +75,37 @@
97 </el-form-item> 75 </el-form-item>
98 </el-col> 76 </el-col>
99 </el-row> 77 </el-row>
100 - 78 +
101 <el-row v-if="form.state !== '2002'"> 79 <el-row v-if="form.state !== '2002'">
102 <el-col :span="12"> 80 <el-col :span="12">
103 <el-form-item :label="$t('room.editRoom.roomState')" required> 81 <el-form-item :label="$t('room.editRoom.roomState')" required>
104 - <el-select v-model="form.state" :placeholder="$t('room.editRoom.placeholder.roomState')">  
105 - <el-option  
106 - v-for="item in roomStateOptions"  
107 - :key="item.value"  
108 - :label="item.label"  
109 - :value="item.value"  
110 - /> 82 + <el-select v-model="form.state" :placeholder="$t('room.editRoom.placeholder.roomState')" style="width: 100%;">
  83 + <el-option v-for="item in roomStateOptions" :key="item.value" :label="item.label" :value="item.value" />
111 </el-select> 84 </el-select>
112 </el-form-item> 85 </el-form-item>
113 </el-col> 86 </el-col>
114 <el-col :span="12"> 87 <el-col :span="12">
115 <el-form-item :label="$t('room.editRoom.endTime')" required> 88 <el-form-item :label="$t('room.editRoom.endTime')" required>
116 - <el-date-picker  
117 - v-model="form.endTime"  
118 - type="date"  
119 - :placeholder="$t('room.editRoom.placeholder.endTime')"  
120 - value-format="yyyy-MM-dd"  
121 - /> 89 + <el-date-picker v-model="form.endTime" type="date" :placeholder="$t('room.editRoom.placeholder.endTime')" style="width: 100%;"
  90 + value-format="yyyy-MM-dd" />
122 </el-form-item> 91 </el-form-item>
123 </el-col> 92 </el-col>
124 </el-row> 93 </el-row>
125 - 94 +
126 <div v-for="(item, index) in form.attrs" :key="index"> 95 <div v-for="(item, index) in form.attrs" :key="index">
127 <el-form-item :label="item.specName"> 96 <el-form-item :label="item.specName">
128 - <el-input  
129 - v-if="item.specType === '2233'"  
130 - v-model="item.value"  
131 - :placeholder="item.specHoldplace"  
132 - />  
133 - <el-select  
134 - v-else-if="item.specType === '3344'"  
135 - v-model="item.value"  
136 - :placeholder="item.specHoldplace"  
137 - >  
138 - <el-option  
139 - v-for="value in item.values"  
140 - :key="value.value"  
141 - :label="value.valueName"  
142 - :value="value.value"  
143 - /> 97 + <el-input v-if="item.specType === '2233'" v-model="item.value" :placeholder="item.specHoldplace" />
  98 + <el-select v-else-if="item.specType === '3344'" v-model="item.value" :placeholder="item.specHoldplace">
  99 + <el-option v-for="value in item.values" :key="value.value" :label="value.valueName" :value="value.value" />
144 </el-select> 100 </el-select>
145 </el-form-item> 101 </el-form-item>
146 </div> 102 </div>
147 - 103 +
148 <el-form-item :label="$t('room.editRoom.remark')"> 104 <el-form-item :label="$t('room.editRoom.remark')">
149 - <el-input  
150 - v-model="form.remark"  
151 - type="textarea"  
152 - :placeholder="$t('room.editRoom.placeholder.remark')"  
153 - :rows="3"  
154 - /> 105 + <el-input v-model="form.remark" type="textarea" :placeholder="$t('room.editRoom.placeholder.remark')" :rows="3" />
155 </el-form-item> 106 </el-form-item>
156 </el-form> 107 </el-form>
157 - 108 +
158 <div slot="footer"> 109 <div slot="footer">
159 <el-button @click="dialogVisible = false">{{ $t('common.cancel') }}</el-button> 110 <el-button @click="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
160 <el-button type="primary" @click="editRoom">{{ $t('common.save') }}</el-button> 111 <el-button type="primary" @click="editRoom">{{ $t('common.save') }}</el-button>
@@ -223,24 +174,22 @@ export default { @@ -223,24 +174,22 @@ export default {
223 }, 174 },
224 created() { 175 created() {
225 this.loadRoomAttrSpec() 176 this.loadRoomAttrSpec()
226 - this.$eventBus.$on('editRoom', this.open)  
227 }, 177 },
228 beforeDestroy() { 178 beforeDestroy() {
229 - this.$eventBus.$off('editRoom', this.open)  
230 }, 179 },
231 methods: { 180 methods: {
232 async open(room) { 181 async open(room) {
233 this.resetForm() 182 this.resetForm()
234 this.form = { ...this.form, ...room } 183 this.form = { ...this.form, ...room }
235 - 184 +
236 try { 185 try {
237 // 加载房屋类型字典 186 // 加载房屋类型字典
238 const data = await getDict('building_room', 'room_sub_type') 187 const data = await getDict('building_room', 'room_sub_type')
239 this.roomSubTypes = data 188 this.roomSubTypes = data
240 - 189 +
241 // 加载单元列表 190 // 加载单元列表
242 await this.loadUnits(room.floorId) 191 await this.loadUnits(room.floorId)
243 - 192 +
244 this.dialogVisible = true 193 this.dialogVisible = true
245 } catch (error) { 194 } catch (error) {
246 console.error('打开编辑房屋失败', error) 195 console.error('打开编辑房屋失败', error)
@@ -270,13 +219,11 @@ export default { @@ -270,13 +219,11 @@ export default {
270 try { 219 try {
271 this.form.apartment = this.form.apartment1 + this.form.apartment2 220 this.form.apartment = this.form.apartment1 + this.form.apartment2
272 this.form.communityId = this.getCommunityId() 221 this.form.communityId = this.getCommunityId()
273 - 222 +
274 await updateRoom(this.form) 223 await updateRoom(this.form)
275 - 224 +
276 this.dialogVisible = false 225 this.dialogVisible = false
277 - this.$emit('room-updated')  
278 - this.$eventBus.$emit('room', 'loadData', { floorId: this.form.floorId })  
279 - this.$message.success(this.$t('common.updateSuccess')) 226 + this.$emit('handleRefreshRoom')
280 } catch (error) { 227 } catch (error) {
281 console.error('更新房屋失败', error) 228 console.error('更新房屋失败', error)
282 this.$message.error(error.message || this.$t('common.updateFailed')) 229 this.$message.error(error.message || this.$t('common.updateFailed'))
@@ -303,9 +250,6 @@ export default { @@ -303,9 +250,6 @@ export default {
303 endTime: '' 250 endTime: ''
304 } 251 }
305 }, 252 },
306 - getCommunityId() {  
307 - return this.$store.state.community.currentCommunity.communityId  
308 - }  
309 } 253 }
310 } 254 }
311 </script> 255 </script>
312 \ No newline at end of file 256 \ No newline at end of file
src/components/room/editUnit.vue
@@ -110,8 +110,8 @@ export default { @@ -110,8 +110,8 @@ export default {
110 try { 110 try {
111 await updateUnit(this.editUnitInfo) 111 await updateUnit(this.editUnitInfo)
112 this.$message.success(this.$t('editUnit.successMessage')) 112 this.$message.success(this.$t('editUnit.successMessage'))
113 - this.$emit('refresh-tree', { floorId: this.editUnitInfo.floorId })  
114 - this.$emit('refresh-data', { floorId: this.editUnitInfo.floorId }) 113 + this.$emit('handleRefreshTree', {})
  114 +
115 this.handleClose() 115 this.handleClose()
116 } catch (error) { 116 } catch (error) {
117 console.error('修改单元失败:', error) 117 console.error('修改单元失败:', error)
src/components/room/floorUnitTree.vue
@@ -5,7 +5,6 @@ @@ -5,7 +5,6 @@
5 :data="treeData" 5 :data="treeData"
6 :props="defaultProps" 6 :props="defaultProps"
7 node-key="id" 7 node-key="id"
8 - default-expand-all  
9 :expand-on-click-node="false" 8 :expand-on-click-node="false"
10 @node-click="handleNodeClick" 9 @node-click="handleNodeClick"
11 > 10 >
@@ -35,19 +34,20 @@ export default { @@ -35,19 +34,20 @@ export default {
35 treeData: [], 34 treeData: [],
36 defaultProps: { 35 defaultProps: {
37 children: 'children', 36 children: 'children',
38 - label: 'text' 37 + label: 'text',
39 }, 38 },
40 currentFloorId: '' 39 currentFloorId: ''
41 } 40 }
42 }, 41 },
43 mounted() { 42 mounted() {
44 this.loadData() 43 this.loadData()
45 - this.$eventBus.$on('floorUnitTree', this.handleRefreshTree)  
46 }, 44 },
47 beforeDestroy() { 45 beforeDestroy() {
48 - this.$eventBus.$off('floorUnitTree', this.handleRefreshTree)  
49 }, 46 },
50 methods: { 47 methods: {
  48 + refreshTree(param) {
  49 + this.handleRefreshTree(param)
  50 + },
51 handleRefreshTree(param) { 51 handleRefreshTree(param) {
52 if (param) { 52 if (param) {
53 this.currentFloorId = param.floorId 53 this.currentFloorId = param.floorId
@@ -94,11 +94,9 @@ export default { @@ -94,11 +94,9 @@ export default {
94 }, 94 },
95 handleNodeClick(data) { 95 handleNodeClick(data) {
96 if (data.id.startsWith('f_')) { 96 if (data.id.startsWith('f_')) {
97 - this.$emit('switchFloor', { floorId: data.floorId })  
98 - this.$eventBus.$emit(this.callBackListener, 'switchFloor', { floorId: data.floorId }) 97 + this.$emit('switchFloorUnit', { floorId: data.floorId,unitId: '' })
99 } else { 98 } else {
100 - this.$emit('switchUnit', { unitId: data.unitId })  
101 - this.$eventBus.$emit(this.callBackListener, 'switchUnit', { unitId: data.unitId }) 99 + this.$emit('switchFloorUnit', { floorId:'',unitId: data.unitId })
102 } 100 }
103 }, 101 },
104 } 102 }
@@ -118,4 +116,10 @@ export default { @@ -118,4 +116,10 @@ export default {
118 padding: 20px; 116 padding: 20px;
119 color: #909399; 117 color: #909399;
120 } 118 }
  119 +.custom-tree-node {
  120 + white-space: nowrap;
  121 + overflow: hidden;
  122 + text-overflow: ellipsis;
  123 + max-width: 200px; /* 根据你的布局调整 */
  124 +}
121 </style> 125 </style>
122 \ No newline at end of file 126 \ No newline at end of file
src/components/room/importOwnerRoom.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :title="$t('room.importOwnerRoom.title')"  
4 - :visible.sync="visible"  
5 - width="50%"  
6 - :before-close="handleClose"  
7 - >  
8 - <el-form ref="form" :model="form" label-width="120px"> 2 + <el-dialog :title="$t('room.importOwnerRoom.title')" :visible.sync="visible" width="40%" :before-close="handleClose">
  3 + <el-form ref="form" :model="form" label-width="120px" class="text-left">
9 <el-form-item :label="$t('room.importOwnerRoom.selectFile')"> 4 <el-form-item :label="$t('room.importOwnerRoom.selectFile')">
10 - <el-upload  
11 - ref="upload"  
12 - action=""  
13 - :auto-upload="false"  
14 - :on-change="handleFileChange"  
15 - accept=".xls,.xlsx"  
16 - > 5 + <el-upload ref="upload" action="" :auto-upload="false" :on-change="handleFileChange" accept=".xls,.xlsx" class="margin-left">
17 <el-button size="small" type="primary">{{ $t('room.importOwnerRoom.clickUpload') }}</el-button> 6 <el-button size="small" type="primary">{{ $t('room.importOwnerRoom.clickUpload') }}</el-button>
18 <div slot="tip" class="el-upload__tip"> 7 <div slot="tip" class="el-upload__tip">
19 {{ fileName || $t('room.importOwnerRoom.requiredFile') }} 8 {{ fileName || $t('room.importOwnerRoom.requiredFile') }}
20 </div> 9 </div>
21 </el-upload> 10 </el-upload>
22 </el-form-item> 11 </el-form-item>
23 - 12 +
24 <el-form-item :label="$t('room.importOwnerRoom.downloadTemplate')"> 13 <el-form-item :label="$t('room.importOwnerRoom.downloadTemplate')">
25 - <span>{{ $t('room.importOwnerRoom.downloadFirst') }}</span> 14 + <span class="margin-left">{{ $t('room.importOwnerRoom.downloadFirst') }}</span>
26 <el-link type="primary" :href="templateUrl" target="_blank"> 15 <el-link type="primary" :href="templateUrl" target="_blank">
27 {{ $t('room.importOwnerRoom.propertyTemplate') }} 16 {{ $t('room.importOwnerRoom.propertyTemplate') }}
28 </el-link> 17 </el-link>
29 <span>{{ $t('room.importOwnerRoom.prepareData') }}</span> 18 <span>{{ $t('room.importOwnerRoom.prepareData') }}</span>
30 </el-form-item> 19 </el-form-item>
31 </el-form> 20 </el-form>
32 - 21 +
33 <span slot="footer" class="dialog-footer"> 22 <span slot="footer" class="dialog-footer">
34 <el-button @click="handleClose">{{ $t('common.cancel') }}</el-button> 23 <el-button @click="handleClose">{{ $t('common.cancel') }}</el-button>
35 <el-button type="primary" @click="handleImport">{{ $t('common.import') }}</el-button> 24 <el-button type="primary" @click="handleImport">{{ $t('common.import') }}</el-button>
@@ -78,31 +67,31 @@ export default { @@ -78,31 +67,31 @@ export default {
78 this.$message.error(this.$t('room.importOwnerRoom.fileRequired')) 67 this.$message.error(this.$t('room.importOwnerRoom.fileRequired'))
79 return false 68 return false
80 } 69 }
81 - 70 +
82 const fileType = this.fileName.split('.').pop().toLowerCase() 71 const fileType = this.fileName.split('.').pop().toLowerCase()
83 if (!['xls', 'xlsx'].includes(fileType)) { 72 if (!['xls', 'xlsx'].includes(fileType)) {
84 this.$message.error(this.$t('room.importOwnerRoom.invalidFormat')) 73 this.$message.error(this.$t('room.importOwnerRoom.invalidFormat'))
85 return false 74 return false
86 } 75 }
87 - 76 +
88 if (this.form.file.size > 2 * 1024 * 1024) { 77 if (this.form.file.size > 2 * 1024 * 1024) {
89 this.$message.error(this.$t('room.importOwnerRoom.fileSizeExceeded')) 78 this.$message.error(this.$t('room.importOwnerRoom.fileSizeExceeded'))
90 return false 79 return false
91 } 80 }
92 - 81 +
93 return true 82 return true
94 }, 83 },
95 async handleImport() { 84 async handleImport() {
96 if (!this.validate()) return 85 if (!this.validate()) return
97 - 86 +
98 try { 87 try {
99 const formData = new FormData() 88 const formData = new FormData()
100 formData.append('uploadFile', this.form.file) 89 formData.append('uploadFile', this.form.file)
101 formData.append('communityId', this.form.communityId) 90 formData.append('communityId', this.form.communityId)
102 formData.append('importAdapt', 'importRoomOwner') 91 formData.append('importAdapt', 'importRoomOwner')
103 - 92 +
104 const response = await importOwnerRoom(formData) 93 const response = await importOwnerRoom(formData)
105 - 94 +
106 if (response.code === 0) { 95 if (response.code === 0) {
107 this.$message.success(this.$t('room.importOwnerRoom.importSuccess')) 96 this.$message.success(this.$t('room.importOwnerRoom.importSuccess'))
108 this.handleClose() 97 this.handleClose()
@@ -120,10 +109,6 @@ export default { @@ -120,10 +109,6 @@ export default {
120 this.$message.error(this.$t('room.importOwnerRoom.importError')) 109 this.$message.error(this.$t('room.importOwnerRoom.importError'))
121 } 110 }
122 }, 111 },
123 - getCommunityId() {  
124 - // 实际项目中替换为获取社区ID的逻辑  
125 - return 'your-community-id'  
126 - }  
127 } 112 }
128 } 113 }
129 </script> 114 </script>
130 \ No newline at end of file 115 \ No newline at end of file
src/components/room/roomContracts.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :visible.sync="visible"  
4 - :title="$t('roomContracts.title')"  
5 - width="90%"  
6 - top="5vh"  
7 - custom-class="custom-modal"  
8 - @close="handleClose"  
9 - >  
10 - <el-table  
11 - :data="roomContractsInfo.contracts"  
12 - stripe  
13 - border  
14 - style="width: 100%; margin-top: 15px"  
15 - >  
16 - <el-table-column  
17 - prop="contractName"  
18 - :label="$t('roomContracts.contractName')"  
19 - align="center"  
20 - />  
21 - <el-table-column  
22 - prop="contractCode"  
23 - :label="$t('roomContracts.contractCode')"  
24 - align="center"  
25 - />  
26 - <el-table-column  
27 - prop="parentContractCode"  
28 - :label="$t('roomContracts.parentContractCode')"  
29 - align="center"  
30 - > 2 + <el-dialog :visible.sync="visible" :title="$t('roomContracts.title')" width="90%" top="5vh" custom-class="custom-modal"
  3 + @close="handleClose">
  4 + <el-table :data="roomContractsInfo.contracts" stripe border style="width: 100%; margin-top: 15px">
  5 + <el-table-column prop="contractName" :label="$t('roomContracts.contractName')" align="center" />
  6 + <el-table-column prop="contractCode" :label="$t('roomContracts.contractCode')" align="center" />
  7 + <el-table-column prop="parentContractCode" :label="$t('roomContracts.parentContractCode')" align="center">
31 <template slot-scope="scope"> 8 <template slot-scope="scope">
32 {{ scope.row.parentContractCode || '-' }} 9 {{ scope.row.parentContractCode || '-' }}
33 </template> 10 </template>
34 </el-table-column> 11 </el-table-column>
35 - <el-table-column  
36 - prop="contractTypeName"  
37 - :label="$t('roomContracts.contractType')"  
38 - align="center"  
39 - />  
40 - <el-table-column  
41 - prop="operator"  
42 - :label="$t('roomContracts.operator')"  
43 - align="center"  
44 - />  
45 - <el-table-column  
46 - prop="amount"  
47 - :label="$t('roomContracts.amount')"  
48 - align="center"  
49 - />  
50 - <el-table-column  
51 - prop="startTime"  
52 - :label="$t('roomContracts.startTime')"  
53 - align="center"  
54 - />  
55 - <el-table-column  
56 - prop="endTime"  
57 - :label="$t('roomContracts.endTime')"  
58 - align="center"  
59 - />  
60 - <el-table-column  
61 - prop="createTime"  
62 - :label="$t('roomContracts.createTime')"  
63 - align="center"  
64 - />  
65 - <el-table-column  
66 - prop="stateName"  
67 - :label="$t('roomContracts.state')"  
68 - align="center"  
69 - /> 12 + <el-table-column prop="contractTypeName" :label="$t('roomContracts.contractType')" align="center" />
  13 + <el-table-column prop="operator" :label="$t('roomContracts.operator')" align="center" />
  14 + <el-table-column prop="amount" :label="$t('roomContracts.amount')" align="center" />
  15 + <el-table-column prop="startTime" :label="$t('roomContracts.startTime')" align="center" />
  16 + <el-table-column prop="endTime" :label="$t('roomContracts.endTime')" align="center" />
  17 + <el-table-column prop="createTime" :label="$t('roomContracts.createTime')" align="center" />
  18 + <el-table-column prop="stateName" :label="$t('roomContracts.state')" align="center" />
70 </el-table> 19 </el-table>
71 -  
72 - <el-pagination  
73 - v-if="pagination.total > 0"  
74 - background  
75 - layout="prev, pager, next"  
76 - :total="pagination.total"  
77 - :page-size="pagination.pageSize"  
78 - :current-page="pagination.currentPage"  
79 - @current-change="handlePageChange"  
80 - style="margin-top: 20px; text-align: right"  
81 - /> 20 +
  21 + <el-pagination v-if="pagination.total > 0" background layout="prev, pager, next" :total="pagination.total"
  22 + :page-size="pagination.pageSize" :current-page="pagination.currentPage" @current-change="handlePageChange"
  23 + style="margin-top: 20px; text-align: right" />
82 </el-dialog> 24 </el-dialog>
83 </template> 25 </template>
84 26
@@ -125,11 +67,11 @@ export default { @@ -125,11 +67,11 @@ export default {
125 communityId: this.getCommunityId(), 67 communityId: this.getCommunityId(),
126 objId: this.roomContractsInfo.ownerId 68 objId: this.roomContractsInfo.ownerId
127 } 69 }
128 - 70 +
129 if (this.roomContractsInfo.roomId) { 71 if (this.roomContractsInfo.roomId) {
130 params.roomId = this.roomContractsInfo.roomId 72 params.roomId = this.roomContractsInfo.roomId
131 } 73 }
132 - 74 +
133 const response = await getRoomContracts(params, this.roomContractsInfo.roomId) 75 const response = await getRoomContracts(params, this.roomContractsInfo.roomId)
134 this.roomContractsInfo.contracts = response.data 76 this.roomContractsInfo.contracts = response.data
135 this.pagination.total = response.records 77 this.pagination.total = response.records
@@ -138,15 +80,13 @@ export default { @@ -138,15 +80,13 @@ export default {
138 this.$message.error(this.$t('common.loadFailed')) 80 this.$message.error(this.$t('common.loadFailed'))
139 } 81 }
140 }, 82 },
141 - getCommunityId() {  
142 - return this.$store.state.user.currentCommunity.communityId  
143 - } 83 +
144 } 84 }
145 } 85 }
146 </script> 86 </script>
147 87
148 <style scoped> 88 <style scoped>
149 -.custom-modal >>> .el-dialog__body { 89 +.custom-modal>>>.el-dialog__body {
150 padding: 15px 20px; 90 padding: 15px 20px;
151 } 91 }
152 </style> 92 </style>
153 \ No newline at end of file 93 \ No newline at end of file
src/components/room/roomOweFees.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :visible.sync="visible"  
4 - :title="$t('roomOweFees.title')"  
5 - width="80%"  
6 - top="5vh"  
7 - custom-class="custom-modal"  
8 - @close="handleClose"  
9 - >  
10 - <el-table  
11 - :data="roomOweFeesInfo.fees"  
12 - stripe  
13 - border  
14 - style="width: 100%; margin-top: 15px"  
15 - >  
16 - <el-table-column  
17 - prop="payerObjName"  
18 - :label="$t('roomOweFees.payerObj')"  
19 - align="center"  
20 - />  
21 - <el-table-column  
22 - prop="ownerName"  
23 - :label="$t('roomOweFees.ownerName')"  
24 - align="center"  
25 - />  
26 - <el-table-column  
27 - prop="ownerTel"  
28 - :label="$t('roomOweFees.phone')"  
29 - align="center"  
30 - />  
31 - <el-table-column  
32 - prop="endTime"  
33 - :label="$t('roomOweFees.startTime')"  
34 - align="center"  
35 - />  
36 - <el-table-column  
37 - prop="deadlineTime"  
38 - :label="$t('roomOweFees.endTime')"  
39 - align="center"  
40 - />  
41 - <el-table-column  
42 - prop="amountOwed"  
43 - :label="`${$t('roomOweFees.total')} (${$t('roomOweFees.unit')})`"  
44 - align="center"  
45 - />  
46 - <el-table-column  
47 - prop="updateTime"  
48 - :label="$t('roomOweFees.updateTime')"  
49 - align="center"  
50 - /> 2 + <el-dialog :visible.sync="visible" :title="$t('roomOweFees.title')" width="80%" top="5vh" custom-class="custom-modal"
  3 + @close="handleClose">
  4 + <el-table :data="roomOweFeesInfo.fees" stripe border style="width: 100%; margin-top: 15px">
  5 + <el-table-column prop="payerObjName" :label="$t('roomOweFees.payerObj')" align="center" />
  6 + <el-table-column prop="ownerName" :label="$t('roomOweFees.ownerName')" align="center" />
  7 + <el-table-column prop="ownerTel" :label="$t('roomOweFees.phone')" align="center" />
  8 + <el-table-column prop="endTime" :label="$t('roomOweFees.startTime')" align="center" />
  9 + <el-table-column prop="deadlineTime" :label="$t('roomOweFees.endTime')" align="center" />
  10 + <el-table-column prop="amountOwed" :label="`${$t('roomOweFees.total')} (${$t('roomOweFees.unit')})`"
  11 + align="center" />
  12 + <el-table-column prop="updateTime" :label="$t('roomOweFees.updateTime')" align="center" />
51 </el-table> 13 </el-table>
52 -  
53 - <el-pagination  
54 - v-if="pagination.total > 0"  
55 - background  
56 - layout="prev, pager, next"  
57 - :total="pagination.total"  
58 - :page-size="pagination.pageSize"  
59 - :current-page="pagination.currentPage"  
60 - @current-change="handlePageChange"  
61 - style="margin-top: 20px; text-align: right"  
62 - /> 14 +
  15 + <el-pagination v-if="pagination.total > 0" background layout="prev, pager, next" :total="pagination.total"
  16 + :page-size="pagination.pageSize" :current-page="pagination.currentPage" @current-change="handlePageChange"
  17 + style="margin-top: 20px; text-align: right" />
63 </el-dialog> 18 </el-dialog>
64 </template> 19 </template>
65 20
@@ -105,7 +60,7 @@ export default { @@ -105,7 +60,7 @@ export default {
105 payerObjId: this.roomOweFeesInfo.roomId, 60 payerObjId: this.roomOweFeesInfo.roomId,
106 payerObjType: '3333' 61 payerObjType: '3333'
107 } 62 }
108 - 63 +
109 const response = await getRoomOweFees(params) 64 const response = await getRoomOweFees(params)
110 this.roomOweFeesInfo.fees = response.data 65 this.roomOweFeesInfo.fees = response.data
111 this.pagination.total = response.records 66 this.pagination.total = response.records
@@ -114,15 +69,13 @@ export default { @@ -114,15 +69,13 @@ export default {
114 this.$message.error(this.$t('common.loadFailed')) 69 this.$message.error(this.$t('common.loadFailed'))
115 } 70 }
116 }, 71 },
117 - getCommunityId() {  
118 - return this.$store.state.user.currentCommunity.communityId  
119 - } 72 +
120 } 73 }
121 } 74 }
122 </script> 75 </script>
123 76
124 <style scoped> 77 <style scoped>
125 -.custom-modal >>> .el-dialog__body { 78 +.custom-modal>>>.el-dialog__body {
126 padding: 15px 20px; 79 padding: 15px 20px;
127 } 80 }
128 </style> 81 </style>
129 \ No newline at end of file 82 \ No newline at end of file
src/components/room/searchFloor.vue
@@ -132,9 +132,6 @@ export default { @@ -132,9 +132,6 @@ export default {
132 this.$eventBus.$emit(this.emitLoadData, 'loadData', { floorId: floor.floorId }) 132 this.$eventBus.$emit(this.emitLoadData, 'loadData', { floorId: floor.floorId })
133 this.dialogVisible = false 133 this.dialogVisible = false
134 }, 134 },
135 - getCommunityId() {  
136 - return this.$store.state.community.currentCommunity.communityId  
137 - }  
138 } 135 }
139 } 136 }
140 </script> 137 </script>
141 \ No newline at end of file 138 \ No newline at end of file
src/components/work/ReplyRepairAppraise.vue
@@ -60,7 +60,7 @@ export default { @@ -60,7 +60,7 @@ export default {
60 try { 60 try {
61 await replyRepairAppraise({ 61 await replyRepairAppraise({
62 ...this.form, 62 ...this.form,
63 - communityId: this.$store.getters.communityId 63 + communityId: this.getCommunityId()
64 }) 64 })
65 this.$message.success(this.$t('adminRepairDetail.replySuccess')) 65 this.$message.success(this.$t('adminRepairDetail.replySuccess'))
66 this.visible = false 66 this.visible = false
src/i18n/commonLang.js
@@ -39,6 +39,7 @@ export const messages = { @@ -39,6 +39,7 @@ export const messages = {
39 status: 'Status', 39 status: 'Status',
40 enabled: 'Enabled', 40 enabled: 'Enabled',
41 disabled: 'Disabled', 41 disabled: 'Disabled',
  42 + import: 'Import',
42 } 43 }
43 }, 44 },
44 zh: { 45 zh: {
@@ -81,6 +82,7 @@ export const messages = { @@ -81,6 +82,7 @@ export const messages = {
81 status: '状态', 82 status: '状态',
82 enabled: '启用', 83 enabled: '启用',
83 disabled: '禁用', 84 disabled: '禁用',
  85 + import: '导入',
84 } 86 }
85 } 87 }
86 } 88 }
87 \ No newline at end of file 89 \ No newline at end of file
src/i18n/index.js
@@ -373,7 +373,7 @@ const messages = { @@ -373,7 +373,7 @@ const messages = {
373 ...roomRenovationManageMessages.zh, 373 ...roomRenovationManageMessages.zh,
374 ...feeConfigManageMessages.zh, 374 ...feeConfigManageMessages.zh,
375 ...payFeeConfigDiscountManageMessages.zh, 375 ...payFeeConfigDiscountManageMessages.zh,
376 - ...roomMessages.en, 376 + ...roomMessages.zh,
377 } 377 }
378 } 378 }
379 379
src/router/index.js
@@ -625,6 +625,9 @@ router.beforeEach((to, from, next) =&gt; { @@ -625,6 +625,9 @@ router.beforeEach((to, from, next) =&gt; {
625 if (to.path.startsWith('/img/') || to.path.startsWith('/static/')) { 625 if (to.path.startsWith('/img/') || to.path.startsWith('/static/')) {
626 return next(); // 直接放行 626 return next(); // 直接放行
627 } 627 }
  628 + if (to.path.endsWith('.xlsx')) {
  629 + return next(); // 直接放行
  630 + }
628 const token = localStorage.getItem('token') 631 const token = localStorage.getItem('token')
629 if (to.path !== '/views/user/login' && !token) { 632 if (to.path !== '/views/user/login' && !token) {
630 next('/views/user/login') 633 next('/views/user/login')
src/views/community/roomRenovationManageList.vue
@@ -270,7 +270,7 @@ export default { @@ -270,7 +270,7 @@ export default {
270 renovationTime: '', 270 renovationTime: '',
271 startTime: '', 271 startTime: '',
272 endTime: '', 272 endTime: '',
273 - communityId: this.$store.getters.communityId 273 + communityId: this.getCommunityId()
274 } 274 }
275 this.page.current = 1 275 this.page.current = 1
276 this.listRoomRenovation() 276 this.listRoomRenovation()
src/views/mall/junkRequirementManageList.vue
@@ -135,7 +135,7 @@ export default { @@ -135,7 +135,7 @@ export default {
135 page: page, 135 page: page,
136 row: size, 136 row: size,
137 ...this.junkRequirementManageInfo.conditions, 137 ...this.junkRequirementManageInfo.conditions,
138 - communityId: this.$store.getters.communityId 138 + communityId: this.getCommunityId()
139 } 139 }
140 const { data, total } = await listJunkRequirements(params) 140 const { data, total } = await listJunkRequirements(params)
141 this.junkRequirementManageInfo.junkRequirements = data 141 this.junkRequirementManageInfo.junkRequirements = data
src/views/room/addFloorLang.js deleted
1 -export default {  
2 - en: {  
3 - room: {  
4 - addFloor: {  
5 - title: 'Add Building',  
6 - floorNum: 'Building Number',  
7 - name: 'Building Name',  
8 - floorArea: 'Floor Area',  
9 - seq: 'Sequence',  
10 - remark: 'Remark',  
11 - buildingSuffix: ' Building',  
12 - floorNumPlaceholder: 'Required, please enter number',  
13 - namePlaceholder: 'Required, please enter name',  
14 - floorAreaPlaceholder: 'Required, please enter floor area',  
15 - remarkPlaceholder: 'Optional, please enter remark',  
16 - floorNumRequired: 'Building number is required',  
17 - floorNumLength: 'Building number must be 1-64 characters',  
18 - nameRequired: 'Building name is required',  
19 - nameLength: 'Building name must be 2-64 characters',  
20 - floorAreaRequired: 'Floor area is required',  
21 - floorAreaFormat: 'Invalid floor area format, e.g. 300.00',  
22 - seqRequired: 'Sequence is required',  
23 - seqNumber: 'Sequence must be a number',  
24 - remarkMaxLength: 'Remark cannot exceed 200 characters',  
25 - saveSuccess: 'Add successful',  
26 - saveFailed: 'Add failed',  
27 - saveError: 'Error adding building'  
28 - }  
29 - }  
30 - },  
31 - zh: {  
32 - room: {  
33 - addFloor: {  
34 - title: '添加楼栋',  
35 - floorNum: '楼栋编号',  
36 - name: '楼栋名称',  
37 - floorArea: '建筑面积',  
38 - seq: '排序',  
39 - remark: '备注',  
40 - buildingSuffix: '号楼',  
41 - floorNumPlaceholder: '必填,请填写编号',  
42 - namePlaceholder: '必填,请填写名称',  
43 - floorAreaPlaceholder: '必填,请填写建筑面积',  
44 - remarkPlaceholder: '可填,请填写备注',  
45 - floorNumRequired: '楼栋编号不能为空',  
46 - floorNumLength: '楼栋编号长度必须在1位至64位',  
47 - nameRequired: '楼栋名称不能为空',  
48 - nameLength: '楼栋名称长度必须在2位至64位',  
49 - floorAreaRequired: '建筑面积不能为空',  
50 - floorAreaFormat: '建筑面积错误,如300.00',  
51 - seqRequired: '排序不能为空',  
52 - seqNumber: '排序必须是数字',  
53 - remarkMaxLength: '备注长度不能超过200位',  
54 - saveSuccess: '添加成功',  
55 - saveFailed: '添加失败',  
56 - saveError: '添加楼栋出错'  
57 - }  
58 - }  
59 - }  
60 -}  
61 \ No newline at end of file 0 \ No newline at end of file
src/views/room/addUnitLang.js deleted
1 -export const messages = {  
2 - en: {  
3 - addUnit: {  
4 - title: 'Add Unit',  
5 - unitNum: 'Unit Number',  
6 - unitNumPlaceholder: 'Required, please enter unit number',  
7 - layerCount: 'Total Floors',  
8 - layerCountPlaceholder: 'Required, please enter total floors',  
9 - unitArea: 'Building Area',  
10 - unitAreaPlaceholder: 'Required, please enter building area',  
11 - lift: 'Elevator',  
12 - liftPlaceholder: 'Required, please select elevator availability',  
13 - liftOption1: 'Yes',  
14 - liftOption2: 'No',  
15 - remark: 'Remark',  
16 - remarkPlaceholder: 'Please enter remarks',  
17 - save: 'Save',  
18 - cancel: 'Cancel',  
19 - zeroUnitWarning: 'Unit 0 is specific to shops and cannot be added',  
20 - successMessage: 'Unit added successfully',  
21 - errorMessage: 'Failed to add unit'  
22 - }  
23 - },  
24 - zh: {  
25 - addUnit: {  
26 - title: '添加单元',  
27 - unitNum: '单元编号',  
28 - unitNumPlaceholder: '必填,请填写单元编号',  
29 - layerCount: '总层数',  
30 - layerCountPlaceholder: '必填,请填写单元总层数',  
31 - unitArea: '建筑面积',  
32 - unitAreaPlaceholder: '必填,请填写建筑面积',  
33 - lift: '电梯',  
34 - liftPlaceholder: '必填,请选择是否有电梯',  
35 - liftOption1: '有',  
36 - liftOption2: '无',  
37 - remark: '备注',  
38 - remarkPlaceholder: '请填写备注信息',  
39 - save: '保存',  
40 - cancel: '取消',  
41 - zeroUnitWarning: '0单元为商铺特有,不允许添加',  
42 - successMessage: '单元添加成功',  
43 - errorMessage: '添加单元失败'  
44 - }  
45 - }  
46 -}  
47 \ No newline at end of file 0 \ No newline at end of file
src/views/room/deleteFloorLang.js deleted
1 -export default {  
2 - en: {  
3 - room: {  
4 - deleteFloor: {  
5 - title: 'Confirm Operation',  
6 - confirmMessage: 'Are you sure you want to delete?',  
7 - cancelText: 'Cancel',  
8 - confirmDelete: 'Confirm Delete',  
9 - deleteSuccess: 'Delete successful',  
10 - deleteFailed: 'Delete failed',  
11 - deleteError: 'Error deleting building'  
12 - }  
13 - }  
14 - },  
15 - zh: {  
16 - room: {  
17 - deleteFloor: {  
18 - title: '请确认您的操作',  
19 - confirmMessage: '确认是否删除?',  
20 - cancelText: '点错了',  
21 - confirmDelete: '确认删除',  
22 - deleteSuccess: '删除成功',  
23 - deleteFailed: '删除失败',  
24 - deleteError: '删除楼栋出错'  
25 - }  
26 - }  
27 - }  
28 -}  
29 \ No newline at end of file 0 \ No newline at end of file
src/views/room/deleteRoomLang.js deleted
1 -export const messages = {  
2 - en: {  
3 - room: {  
4 - deleteRoom: {  
5 - title: 'Confirm Operation',  
6 - confirmMessage: 'Confirm deletion! Deleting a room will delete associated fees and payment records, and automatically unbind owners!'  
7 - }  
8 - }  
9 - },  
10 - zh: {  
11 - room: {  
12 - deleteRoom: {  
13 - title: '请确认您的操作',  
14 - confirmMessage: '确认是否删除! 删除房屋会关联删除房屋下的费用以及缴费记录,并且自动解绑业主!'  
15 - }  
16 - }  
17 - }  
18 -}  
19 \ No newline at end of file 0 \ No newline at end of file
src/views/room/deleteUnitLang.js deleted
1 -export const messages = {  
2 - en: {  
3 - deleteUnit: {  
4 - title: 'Confirm Operation',  
5 - confirmMessage: 'Are you sure you want to delete this unit?',  
6 - cancel: 'Cancel',  
7 - confirm: 'Confirm Delete',  
8 - successMessage: 'Unit deleted successfully',  
9 - errorMessage: 'Failed to delete unit'  
10 - }  
11 - },  
12 - zh: {  
13 - deleteUnit: {  
14 - title: '请确认您的操作',  
15 - confirmMessage: '确定删除小区单元?',  
16 - cancel: '点错了',  
17 - confirm: '确认删除',  
18 - successMessage: '单元删除成功',  
19 - errorMessage: '删除单元失败'  
20 - }  
21 - }  
22 -}  
23 \ No newline at end of file 0 \ No newline at end of file
src/views/room/editFloorLang.js deleted
1 -export default {  
2 - en: {  
3 - room: {  
4 - editFloor: {  
5 - title: 'Edit Building',  
6 - floorNum: 'Building Number',  
7 - floorName: 'Building Name',  
8 - floorArea: 'Floor Area',  
9 - seq: 'Sequence',  
10 - remark: 'Remark',  
11 - floorNumPlaceholder: 'Required, please enter number',  
12 - floorNamePlaceholder: 'Required, please enter name',  
13 - floorAreaPlaceholder: 'Required, please enter floor area',  
14 - remarkPlaceholder: 'Optional, please enter remark',  
15 - floorNumRequired: 'Building number is required',  
16 - floorNumLength: 'Building number must be 1-64 characters',  
17 - floorNameRequired: 'Building name is required',  
18 - floorNameLength: 'Building name must be 2-64 characters',  
19 - floorAreaRequired: 'Floor area is required',  
20 - floorAreaFormat: 'Invalid floor area format, e.g. 300.00',  
21 - seqRequired: 'Sequence is required',  
22 - seqNumber: 'Sequence must be a number',  
23 - remarkMaxLength: 'Remark cannot exceed 200 characters',  
24 - updateSuccess: 'Update successful',  
25 - updateFailed: 'Update failed',  
26 - updateError: 'Error updating building'  
27 - }  
28 - }  
29 - },  
30 - zh: {  
31 - room: {  
32 - editFloor: {  
33 - title: '修改楼栋',  
34 - floorNum: '楼栋编号',  
35 - floorName: '楼栋名称',  
36 - floorArea: '建筑面积',  
37 - seq: '排序',  
38 - remark: '备注',  
39 - floorNumPlaceholder: '必填,请填写编号',  
40 - floorNamePlaceholder: '必填,请填写名称',  
41 - floorAreaPlaceholder: '必填,请填写建筑面积',  
42 - remarkPlaceholder: '可填,请填写备注',  
43 - floorNumRequired: '楼栋编号不能为空',  
44 - floorNumLength: '楼栋编号长度必须在1位至64位',  
45 - floorNameRequired: '楼栋名称不能为空',  
46 - floorNameLength: '楼栋名称长度必须在2位至64位',  
47 - floorAreaRequired: '建筑面积不能为空',  
48 - floorAreaFormat: '建筑面积错误,如300.00',  
49 - seqRequired: '排序不能为空',  
50 - seqNumber: '排序必须是数字',  
51 - remarkMaxLength: '备注长度不能超过200位',  
52 - updateSuccess: '修改成功',  
53 - updateFailed: '修改失败',  
54 - updateError: '修改楼栋出错'  
55 - }  
56 - }  
57 - }  
58 -}  
59 \ No newline at end of file 0 \ No newline at end of file
src/views/room/editRoomLang.js deleted
1 -export const messages = {  
2 - en: {  
3 - room: {  
4 - editRoom: {  
5 - title: 'Edit Room',  
6 - roomNum: 'Room Number',  
7 - layer: 'Floor',  
8 - unit: 'Unit',  
9 - roomType: 'Room Type',  
10 - apartment1: 'Bedrooms',  
11 - apartment2: 'Living Rooms',  
12 - builtUpArea: 'Built-up Area (m²)',  
13 - roomArea: 'Indoor Area (m²)',  
14 - feeCoefficient: 'Fee Coefficient',  
15 - roomRent: 'Rent',  
16 - roomState: 'Room State',  
17 - endTime: 'End Time',  
18 - remark: 'Remark',  
19 - placeholder: {  
20 - roomNum: 'Required, please enter room number',  
21 - layer: 'Required, please enter floor',  
22 - unit: 'Required, please select unit',  
23 - roomType: 'Required, please select room type',  
24 - apartment: 'Required, please select apartment layout',  
25 - builtUpArea: 'Required, please enter built-up area! m²',  
26 - roomArea: 'Required, please enter indoor area! m²',  
27 - feeCoefficient: 'Please enter fee coefficient',  
28 - roomRent: 'Required, please enter rent',  
29 - roomState: 'Required, please select room state',  
30 - endTime: 'Required, please select end time',  
31 - remark: 'Please enter remark information'  
32 - },  
33 - apartment1Options: {  
34 - oneRoom: 'One Bedroom',  
35 - twoRooms: 'Two Bedrooms',  
36 - threeRooms: 'Three Bedrooms',  
37 - fourRooms: 'Four Bedrooms',  
38 - fiveRooms: 'Five Bedrooms',  
39 - sixRooms: 'Six Bedrooms',  
40 - sevenRooms: 'Seven Bedrooms',  
41 - eightRooms: 'Eight Bedrooms'  
42 - },  
43 - apartment2Options: {  
44 - oneHall: 'One Living Room',  
45 - twoHalls: 'Two Living Rooms',  
46 - threeHalls: 'Three Living Rooms',  
47 - fourHalls: 'Four Living Rooms',  
48 - fiveHalls: 'Five Living Rooms',  
49 - sixHalls: 'Six Living Rooms',  
50 - sevenHalls: 'Seven Living Rooms',  
51 - eightHalls: 'Eight Living Rooms'  
52 - },  
53 - roomStateOptions: {  
54 - occupied: 'Occupied',  
55 - delivered: 'Delivered',  
56 - decorated: 'Decorated',  
57 - vacant: 'Vacant',  
58 - decorating: 'Decorating'  
59 - }  
60 - }  
61 - }  
62 - },  
63 - zh: {  
64 - room: {  
65 - editRoom: {  
66 - title: '修改房屋',  
67 - roomNum: '房屋编号',  
68 - layer: '房屋楼层',  
69 - unit: '房屋单元',  
70 - roomType: '房屋类型',  
71 - apartment1: '户型室',  
72 - apartment2: '户型厅',  
73 - builtUpArea: '建筑面积(平方)',  
74 - roomArea: '室内面积(平方)',  
75 - feeCoefficient: '算费系数',  
76 - roomRent: '租金',  
77 - roomState: '房屋状态',  
78 - endTime: '结束时间',  
79 - remark: '备注',  
80 - placeholder: {  
81 - roomNum: '必填,请填写房屋编号',  
82 - layer: '必填,请填写房屋楼层',  
83 - unit: '必填,请选择单元',  
84 - roomType: '必填,请选择房屋类型',  
85 - apartment: '必填,请选择房屋户型',  
86 - builtUpArea: '必填,请填写房屋建筑面积! 平方',  
87 - roomArea: '必填,请填写室内面积! 平方',  
88 - feeCoefficient: '请填写算费系数',  
89 - roomRent: '必填,请填写租金',  
90 - roomState: '必填,请选择房屋状态',  
91 - endTime: '必填,请选择结束时间',  
92 - remark: '请填写备注信息'  
93 - },  
94 - apartment1Options: {  
95 - oneRoom: '一室',  
96 - twoRooms: '两室',  
97 - threeRooms: '三室',  
98 - fourRooms: '四室',  
99 - fiveRooms: '五室',  
100 - sixRooms: '六室',  
101 - sevenRooms: '七室',  
102 - eightRooms: '八室'  
103 - },  
104 - apartment2Options: {  
105 - oneHall: '一厅',  
106 - twoHalls: '两厅',  
107 - threeHalls: '三厅',  
108 - fourHalls: '四厅',  
109 - fiveHalls: '五厅',  
110 - sixHalls: '六厅',  
111 - sevenHalls: '七厅',  
112 - eightHalls: '八厅'  
113 - },  
114 - roomStateOptions: {  
115 - occupied: '已入住',  
116 - delivered: '已交房',  
117 - decorated: '已装修',  
118 - vacant: '未入住',  
119 - decorating: '装修中'  
120 - }  
121 - }  
122 - }  
123 - }  
124 -}  
125 \ No newline at end of file 0 \ No newline at end of file
src/views/room/editUnitLang.js deleted
1 -export const messages = {  
2 - en: {  
3 - editUnit: {  
4 - title: 'Edit Unit',  
5 - unitNum: 'Unit Number',  
6 - unitNumPlaceholder: 'Required, please enter unit number',  
7 - layerCount: 'Total Floors',  
8 - layerCountPlaceholder: 'Required, please enter total floors',  
9 - unitArea: 'Building Area',  
10 - unitAreaPlaceholder: 'Required, please enter building area',  
11 - lift: 'Elevator',  
12 - liftPlaceholder: 'Required, please select elevator availability',  
13 - liftOption1: 'Yes',  
14 - liftOption2: 'No',  
15 - remark: 'Remark',  
16 - remarkPlaceholder: 'Please enter remarks',  
17 - save: 'Save',  
18 - cancel: 'Cancel',  
19 - zeroUnitWarning: 'Unit 0 is specific to shops and cannot be edited',  
20 - successMessage: 'Unit updated successfully',  
21 - errorMessage: 'Failed to update unit'  
22 - }  
23 - },  
24 - zh: {  
25 - editUnit: {  
26 - title: '修改单元',  
27 - unitNum: '单元编号',  
28 - unitNumPlaceholder: '必填,请填写单元编号',  
29 - layerCount: '总层数',  
30 - layerCountPlaceholder: '必填,请填写单元总层数',  
31 - unitArea: '建筑面积',  
32 - unitAreaPlaceholder: '必填,请填写建筑面积',  
33 - lift: '电梯',  
34 - liftPlaceholder: '必填,请选择是否有电梯',  
35 - liftOption1: '有',  
36 - liftOption2: '无',  
37 - remark: '备注',  
38 - remarkPlaceholder: '请填写备注信息',  
39 - save: '保存',  
40 - cancel: '取消',  
41 - zeroUnitWarning: '0单元为商铺特有,不允许修改',  
42 - successMessage: '单元修改成功',  
43 - errorMessage: '修改单元失败'  
44 - }  
45 - }  
46 -}  
47 \ No newline at end of file 0 \ No newline at end of file
src/views/room/floorUnitTreeLang.js deleted
1 -export const messages = {  
2 - en: {  
3 - room: {  
4 - floorUnitTree: {  
5 - building: 'Building',  
6 - unit: 'Unit',  
7 - noData: 'No buildings currently'  
8 - }  
9 - }  
10 - },  
11 - zh: {  
12 - room: {  
13 - floorUnitTree: {  
14 - building: '栋',  
15 - unit: '单元',  
16 - noData: '当前没有楼栋'  
17 - }  
18 - }  
19 - }  
20 -}  
21 \ No newline at end of file 0 \ No newline at end of file
src/views/room/importOwnerRoomLang.js deleted
1 -export default {  
2 - en: {  
3 - room: {  
4 - importOwnerRoom: {  
5 - title: 'Property Import',  
6 - selectFile: 'Select File',  
7 - clickUpload: 'Click to upload',  
8 - requiredFile: 'Required, please select data file',  
9 - downloadTemplate: 'Download Template',  
10 - downloadFirst: 'Please download first',  
11 - propertyTemplate: 'Property Template',  
12 - prepareData: 'to prepare data, then upload for import',  
13 - fileRequired: 'File cannot be empty',  
14 - invalidFormat: 'Invalid Excel format',  
15 - fileSizeExceeded: 'Excel file size cannot exceed 2MB',  
16 - importSuccess: 'Import successful',  
17 - importFailed: 'Import failed',  
18 - importError: 'Import error occurred'  
19 - }  
20 - }  
21 - },  
22 - zh: {  
23 - room: {  
24 - importOwnerRoom: {  
25 - title: '房产导入',  
26 - selectFile: '选择文件',  
27 - clickUpload: '点击上传',  
28 - requiredFile: '必填,请选择数据文件',  
29 - downloadTemplate: '下载模板',  
30 - downloadFirst: '请先下载',  
31 - propertyTemplate: '房产模板',  
32 - prepareData: '准备数据后,上传导入',  
33 - fileRequired: '文件不能为空',  
34 - invalidFormat: '不是有效的Excel格式',  
35 - fileSizeExceeded: 'Excel文件大小不能超过2M',  
36 - importSuccess: '导入成功',  
37 - importFailed: '导入失败',  
38 - importError: '导入出错'  
39 - }  
40 - }  
41 - }  
42 -}  
43 \ No newline at end of file 0 \ No newline at end of file
src/views/room/ownerCarsLang.js deleted
1 -export const messages = {  
2 - en: {  
3 - ownerCars: {  
4 - title: 'Owner Cars',  
5 - licensePlate: 'License Plate',  
6 - licenseType: 'License Type',  
7 - temporary: 'Temporary Car',  
8 - carType: 'Car Type',  
9 - color: 'Color',  
10 - owner: 'Owner',  
11 - parkingSpace: 'Parking Space',  
12 - park: ' Park',  
13 - space: ' Space',  
14 - released: 'Space Released',  
15 - validity: 'Validity Period'  
16 - }  
17 - },  
18 - zh: {  
19 - ownerCars: {  
20 - title: '业主车辆',  
21 - licensePlate: '车牌号',  
22 - licenseType: '车牌类型',  
23 - temporary: '临时车',  
24 - carType: '车辆类型',  
25 - color: '颜色',  
26 - owner: '业主',  
27 - parkingSpace: '车位',  
28 - park: '车场',  
29 - space: '车位',  
30 - released: '车位已释放',  
31 - validity: '有效期'  
32 - }  
33 - }  
34 -}  
35 \ No newline at end of file 0 \ No newline at end of file
src/views/room/ownerComplaintsLang.js deleted
1 -export const messages = {  
2 - en: {  
3 - ownerComplaints: {  
4 - title: 'Owner Complaints',  
5 - type: 'Type',  
6 - room: 'Room',  
7 - contact: 'Contact',  
8 - phone: 'Phone',  
9 - status: 'Status',  
10 - handler: 'Handler',  
11 - handlerPhone: 'Handler Phone',  
12 - createTime: 'Create Time',  
13 - none: 'None'  
14 - }  
15 - },  
16 - zh: {  
17 - ownerComplaints: {  
18 - title: '业主投诉',  
19 - type: '类型',  
20 - room: '房屋',  
21 - contact: '联系人',  
22 - phone: '联系电话',  
23 - status: '状态',  
24 - handler: '处理人',  
25 - handlerPhone: '处理人电话',  
26 - createTime: '创建时间',  
27 - none: '无'  
28 - }  
29 - }  
30 -}  
31 \ No newline at end of file 0 \ No newline at end of file
src/views/room/ownerMembersLang.js deleted
1 -export const messages = {  
2 - en: {  
3 - ownerMembers: {  
4 - title: 'Owner Members',  
5 - name: 'Name',  
6 - sex: 'Gender',  
7 - male: 'Male',  
8 - female: 'Female',  
9 - age: 'Age',  
10 - type: 'Type',  
11 - idCard: 'ID Card',  
12 - contact: 'Contact',  
13 - address: 'Address'  
14 - }  
15 - },  
16 - zh: {  
17 - ownerMembers: {  
18 - title: '业主成员',  
19 - name: '名称',  
20 - sex: '性别',  
21 - male: '男',  
22 - female: '女',  
23 - age: '年龄',  
24 - type: '类型',  
25 - idCard: '身份证',  
26 - contact: '联系方式',  
27 - address: '家庭住址'  
28 - }  
29 - }  
30 -}  
31 \ No newline at end of file 0 \ No newline at end of file
src/views/room/ownerOweFeesLang.js deleted
1 -export const messages = {  
2 - en: {  
3 - ownerOweFees: {  
4 - title: 'Owner Arrears',  
5 - payerObj: 'Charge Object',  
6 - ownerName: 'Owner Name',  
7 - phone: 'Phone',  
8 - startTime: 'Start Time',  
9 - endTime: 'End Time',  
10 - total: 'Total',  
11 - unit: 'Unit: Yuan',  
12 - updateTime: 'Update Time'  
13 - },  
14 - ownerOweFeesDemo: {  
15 - openBtn: 'View Owner Arrears'  
16 - }  
17 - },  
18 - zh: {  
19 - ownerOweFees: {  
20 - title: '业主欠费',  
21 - payerObj: '收费对象',  
22 - ownerName: '业主名称',  
23 - phone: '手机号',  
24 - startTime: '开始时间',  
25 - endTime: '结束时间',  
26 - total: '合计',  
27 - unit: '单位:元',  
28 - updateTime: '更新时间'  
29 - },  
30 - ownerOweFeesDemo: {  
31 - openBtn: '查看业主欠费'  
32 - }  
33 - }  
34 -}  
35 \ No newline at end of file 0 \ No newline at end of file
src/views/room/ownerRepairsLang.js deleted
1 -export const messages = {  
2 - en: {  
3 - ownerRepairs: {  
4 - title: 'Owner Repairs',  
5 - workOrder: 'Work Order ID',  
6 - location: 'Location',  
7 - repairType: 'Repair Type',  
8 - reporter: 'Reporter',  
9 - contact: 'Contact',  
10 - appointmentTime: 'Appointment Time',  
11 - status: 'Status',  
12 - taskProcessed: '(Task Processed)'  
13 - }  
14 - },  
15 - zh: {  
16 - ownerRepairs: {  
17 - title: '业主报修',  
18 - workOrder: '工单编码',  
19 - location: '位置',  
20 - repairType: '报修类型',  
21 - reporter: '报修人',  
22 - contact: '联系方式',  
23 - appointmentTime: '预约时间',  
24 - status: '状态',  
25 - taskProcessed: '(定时任务处理)'  
26 - }  
27 - }  
28 -}  
29 \ No newline at end of file 0 \ No newline at end of file
src/views/room/ownerRoomsLang.js deleted
1 -export const messages = {  
2 - en: {  
3 - ownerRooms: {  
4 - title: 'Owner Rooms',  
5 - roomId: 'Room ID',  
6 - layer: 'Floor',  
7 - type: 'Type',  
8 - area: 'Built/Indoor Area',  
9 - rent: 'Rent',  
10 - status: 'Room Status',  
11 - oweFee: 'Owed Fee',  
12 - updateDaily: 'Updated daily',  
13 - subtotal: 'Subtotal of owed fees',  
14 - successMessage: 'Data loaded successfully',  
15 - errorMessage: 'Failed to load data'  
16 - }  
17 - },  
18 - zh: {  
19 - ownerRooms: {  
20 - title: '业主房屋',  
21 - roomId: '房屋ID',  
22 - layer: '楼层',  
23 - type: '类型',  
24 - area: '建筑/室内面积',  
25 - rent: '租金',  
26 - status: '房屋状态',  
27 - oweFee: '房屋欠费',  
28 - updateDaily: '按天更新',  
29 - subtotal: '欠费小计',  
30 - successMessage: '数据加载成功',  
31 - errorMessage: '加载数据失败'  
32 - }  
33 - }  
34 -}  
35 \ No newline at end of file 0 \ No newline at end of file
src/views/room/roomContractsLang.js deleted
1 -export const messages = {  
2 - en: {  
3 - roomContracts: {  
4 - title: 'Room Contracts',  
5 - contractName: 'Contract Name',  
6 - contractCode: 'Contract Code',  
7 - parentContractCode: 'Parent Contract Code',  
8 - contractType: 'Contract Type',  
9 - operator: 'Operator',  
10 - amount: 'Contract Amount',  
11 - startTime: 'Start Time',  
12 - endTime: 'End Time',  
13 - createTime: 'Draft Time',  
14 - state: 'Status'  
15 - },  
16 - roomContractsDemo: {  
17 - openByOwner: 'Open by Owner',  
18 - openByRoom: 'Open by Room'  
19 - }  
20 - },  
21 - zh: {  
22 - roomContracts: {  
23 - title: '房屋合同',  
24 - contractName: '合同名称',  
25 - contractCode: '合同编号',  
26 - parentContractCode: '父合同编号',  
27 - contractType: '合同类型',  
28 - operator: '经办人',  
29 - amount: '合同金额',  
30 - startTime: '开始时间',  
31 - endTime: '结束时间',  
32 - createTime: '起草时间',  
33 - state: '状态'  
34 - },  
35 - roomContractsDemo: {  
36 - openByOwner: '按业主打开',  
37 - openByRoom: '按房屋打开'  
38 - }  
39 - }  
40 -}  
41 \ No newline at end of file 0 \ No newline at end of file
src/views/room/roomLang.js
@@ -44,7 +44,321 @@ export const messages = { @@ -44,7 +44,321 @@ export const messages = {
44 roomStatusDesc2: '1. Unsold means there is no relationship between the room and the owner, so the status cannot be manually modified. It needs to be changed to occupied by the owner moving in.', 44 roomStatusDesc2: '1. Unsold means there is no relationship between the room and the owner, so the status cannot be manually modified. It needs to be changed to occupied by the owner moving in.',
45 roomStatusDesc3: '2. Unoccupied, handed over, decorated, and occupied status indicate that there is a relationship between the owner and the room. They can be modified mutually, mainly used to create different fees based on different status when creating room fees.', 45 roomStatusDesc3: '2. Unoccupied, handed over, decorated, and occupied status indicate that there is a relationship between the owner and the room. They can be modified mutually, mainly used to create different fees based on different status when creating room fees.',
46 rentDesc: 'Rent: Mainly used for park-type properties or properties with many rented rooms, residential properties can ignore this.' 46 rentDesc: 'Rent: Mainly used for park-type properties or properties with many rented rooms, residential properties can ignore this.'
47 - } 47 + },
  48 + room: {
  49 + floorUnitTree: {
  50 + building: 'Building',
  51 + unit: 'Unit',
  52 + noData: 'No buildings currently'
  53 + },
  54 + searchFloor: {
  55 + title: 'Building Search',
  56 + placeholder: {
  57 + floorId: 'Please enter building ID',
  58 + floorName: 'Please enter building name',
  59 + floorNum: 'Please enter building number'
  60 + },
  61 + table: {
  62 + floorId: 'Building ID',
  63 + floorName: 'Name',
  64 + floorNum: 'Number',
  65 + creator: 'Creator',
  66 + actions: 'Actions'
  67 + }
  68 + },
  69 + editRoom: {
  70 + title: 'Edit Room',
  71 + roomNum: 'Room Number',
  72 + layer: 'Floor',
  73 + unit: 'Unit',
  74 + roomType: 'Room Type',
  75 + apartment1: 'Bedrooms',
  76 + apartment2: 'Living Rooms',
  77 + builtUpArea: 'Built-up Area (m²)',
  78 + roomArea: 'Indoor Area (m²)',
  79 + feeCoefficient: 'Fee Coefficient',
  80 + roomRent: 'Rent',
  81 + roomState: 'Room State',
  82 + endTime: 'End Time',
  83 + remark: 'Remark',
  84 + placeholder: {
  85 + roomNum: 'Required, please enter room number',
  86 + layer: 'Required, please enter floor',
  87 + unit: 'Required, please select unit',
  88 + roomType: 'Required, please select room type',
  89 + apartment: 'Required, please select apartment layout',
  90 + builtUpArea: 'Required, please enter built-up area! m²',
  91 + roomArea: 'Required, please enter indoor area! m²',
  92 + feeCoefficient: 'Please enter fee coefficient',
  93 + roomRent: 'Required, please enter rent',
  94 + roomState: 'Required, please select room state',
  95 + endTime: 'Required, please select end time',
  96 + remark: 'Please enter remark information'
  97 + },
  98 + apartment1Options: {
  99 + oneRoom: 'One Bedroom',
  100 + twoRooms: 'Two Bedrooms',
  101 + threeRooms: 'Three Bedrooms',
  102 + fourRooms: 'Four Bedrooms',
  103 + fiveRooms: 'Five Bedrooms',
  104 + sixRooms: 'Six Bedrooms',
  105 + sevenRooms: 'Seven Bedrooms',
  106 + eightRooms: 'Eight Bedrooms'
  107 + },
  108 + apartment2Options: {
  109 + oneHall: 'One Living Room',
  110 + twoHalls: 'Two Living Rooms',
  111 + threeHalls: 'Three Living Rooms',
  112 + fourHalls: 'Four Living Rooms',
  113 + fiveHalls: 'Five Living Rooms',
  114 + sixHalls: 'Six Living Rooms',
  115 + sevenHalls: 'Seven Living Rooms',
  116 + eightHalls: 'Eight Living Rooms'
  117 + },
  118 + roomStateOptions: {
  119 + occupied: 'Occupied',
  120 + delivered: 'Delivered',
  121 + decorated: 'Decorated',
  122 + vacant: 'Vacant',
  123 + decorating: 'Decorating'
  124 + }
  125 + },
  126 + deleteRoom: {
  127 + title: 'Confirm Operation',
  128 + confirmMessage: 'Confirm deletion! Deleting a room will delete associated fees and payment records, and automatically unbind owners!'
  129 + },
  130 + importOwnerRoom: {
  131 + title: 'Property Import',
  132 + selectFile: 'Select File',
  133 + clickUpload: 'Click to upload',
  134 + requiredFile: 'Required, please select data file',
  135 + downloadTemplate: 'Download Template',
  136 + downloadFirst: 'Please download first',
  137 + propertyTemplate: 'Property Template',
  138 + prepareData: 'to prepare data, then upload for import',
  139 + fileRequired: 'File cannot be empty',
  140 + invalidFormat: 'Invalid Excel format',
  141 + fileSizeExceeded: 'Excel file size cannot exceed 2MB',
  142 + importSuccess: 'Import successful',
  143 + importFailed: 'Import failed',
  144 + importError: 'Import error occurred'
  145 + },
  146 + addFloor: {
  147 + title: 'Add Building',
  148 + floorNum: 'Building Number',
  149 + name: 'Building Name',
  150 + floorArea: 'Floor Area',
  151 + seq: 'Sequence',
  152 + remark: 'Remark',
  153 + buildingSuffix: ' Building',
  154 + floorNumPlaceholder: 'Required, please enter number',
  155 + namePlaceholder: 'Required, please enter name',
  156 + floorAreaPlaceholder: 'Required, please enter floor area',
  157 + remarkPlaceholder: 'Optional, please enter remark',
  158 + floorNumRequired: 'Building number is required',
  159 + floorNumLength: 'Building number must be 1-64 characters',
  160 + nameRequired: 'Building name is required',
  161 + nameLength: 'Building name must be 2-64 characters',
  162 + floorAreaRequired: 'Floor area is required',
  163 + floorAreaFormat: 'Invalid floor area format, e.g. 300.00',
  164 + seqRequired: 'Sequence is required',
  165 + seqNumber: 'Sequence must be a number',
  166 + remarkMaxLength: 'Remark cannot exceed 200 characters',
  167 + saveSuccess: 'Add successful',
  168 + saveFailed: 'Add failed',
  169 + saveError: 'Error adding building'
  170 + },
  171 + editFloor: {
  172 + title: 'Edit Building',
  173 + floorNum: 'Building Number',
  174 + floorName: 'Building Name',
  175 + floorArea: 'Floor Area',
  176 + seq: 'Sequence',
  177 + remark: 'Remark',
  178 + floorNumPlaceholder: 'Required, please enter number',
  179 + floorNamePlaceholder: 'Required, please enter name',
  180 + floorAreaPlaceholder: 'Required, please enter floor area',
  181 + remarkPlaceholder: 'Optional, please enter remark',
  182 + floorNumRequired: 'Building number is required',
  183 + floorNumLength: 'Building number must be 1-64 characters',
  184 + floorNameRequired: 'Building name is required',
  185 + floorNameLength: 'Building name must be 2-64 characters',
  186 + floorAreaRequired: 'Floor area is required',
  187 + floorAreaFormat: 'Invalid floor area format, e.g. 300.00',
  188 + seqRequired: 'Sequence is required',
  189 + seqNumber: 'Sequence must be a number',
  190 + remarkMaxLength: 'Remark cannot exceed 200 characters',
  191 + updateSuccess: 'Update successful',
  192 + updateFailed: 'Update failed',
  193 + updateError: 'Error updating building'
  194 + },
  195 + deleteFloor: {
  196 + title: 'Confirm Operation',
  197 + confirmMessage: 'Are you sure you want to delete?',
  198 + cancelText: 'Cancel',
  199 + confirmDelete: 'Confirm Delete',
  200 + deleteSuccess: 'Delete successful',
  201 + deleteFailed: 'Delete failed',
  202 + deleteError: 'Error deleting building'
  203 + }
  204 + },
  205 + ownerRooms: {
  206 + title: 'Owner Rooms',
  207 + roomId: 'Room ID',
  208 + layer: 'Floor',
  209 + type: 'Type',
  210 + area: 'Built/Indoor Area',
  211 + rent: 'Rent',
  212 + status: 'Room Status',
  213 + oweFee: 'Owed Fee',
  214 + updateDaily: 'Updated daily',
  215 + subtotal: 'Subtotal of owed fees',
  216 + successMessage: 'Data loaded successfully',
  217 + errorMessage: 'Failed to load data'
  218 + },
  219 + ownerMembers: {
  220 + title: 'Owner Members',
  221 + name: 'Name',
  222 + sex: 'Gender',
  223 + male: 'Male',
  224 + female: 'Female',
  225 + age: 'Age',
  226 + type: 'Type',
  227 + idCard: 'ID Card',
  228 + contact: 'Contact',
  229 + address: 'Address'
  230 + },
  231 + ownerCars: {
  232 + title: 'Owner Cars',
  233 + licensePlate: 'License Plate',
  234 + licenseType: 'License Type',
  235 + temporary: 'Temporary Car',
  236 + carType: 'Car Type',
  237 + color: 'Color',
  238 + owner: 'Owner',
  239 + parkingSpace: 'Parking Space',
  240 + park: ' Park',
  241 + space: ' Space',
  242 + released: 'Space Released',
  243 + validity: 'Validity Period'
  244 + },
  245 + ownerComplaints: {
  246 + title: 'Owner Complaints',
  247 + type: 'Type',
  248 + room: 'Room',
  249 + contact: 'Contact',
  250 + phone: 'Phone',
  251 + status: 'Status',
  252 + handler: 'Handler',
  253 + handlerPhone: 'Handler Phone',
  254 + createTime: 'Create Time',
  255 + none: 'None'
  256 + },
  257 + ownerRepairs: {
  258 + title: 'Owner Repairs',
  259 + workOrder: 'Work Order ID',
  260 + location: 'Location',
  261 + repairType: 'Repair Type',
  262 + reporter: 'Reporter',
  263 + contact: 'Contact',
  264 + appointmentTime: 'Appointment Time',
  265 + status: 'Status',
  266 + taskProcessed: '(Task Processed)'
  267 + },
  268 + ownerOweFees: {
  269 + title: 'Owner Arrears',
  270 + payerObj: 'Charge Object',
  271 + ownerName: 'Owner Name',
  272 + phone: 'Phone',
  273 + startTime: 'Start Time',
  274 + endTime: 'End Time',
  275 + total: 'Total',
  276 + unit: 'Unit: Yuan',
  277 + updateTime: 'Update Time'
  278 + },
  279 + ownerOweFeesDemo: {
  280 + openBtn: 'View Owner Arrears'
  281 + },
  282 + roomOweFees: {
  283 + title: 'Room Arrears',
  284 + payerObj: 'Charge Object',
  285 + ownerName: 'Owner Name',
  286 + phone: 'Phone',
  287 + startTime: 'Start Time',
  288 + endTime: 'End Time',
  289 + total: 'Total',
  290 + unit: 'Unit: Yuan',
  291 + updateTime: 'Update Time'
  292 + },
  293 + roomOweFeesDemo: {
  294 + openBtn: 'View Room Arrears'
  295 + },
  296 + roomContracts: {
  297 + title: 'Room Contracts',
  298 + contractName: 'Contract Name',
  299 + contractCode: 'Contract Code',
  300 + parentContractCode: 'Parent Contract Code',
  301 + contractType: 'Contract Type',
  302 + operator: 'Operator',
  303 + amount: 'Contract Amount',
  304 + startTime: 'Start Time',
  305 + endTime: 'End Time',
  306 + createTime: 'Draft Time',
  307 + state: 'Status'
  308 + },
  309 + roomContractsDemo: {
  310 + openByOwner: 'Open by Owner',
  311 + openByRoom: 'Open by Room'
  312 +
  313 + },
  314 + addUnit: {
  315 + title: 'Add Unit',
  316 + unitNum: 'Unit Number',
  317 + unitNumPlaceholder: 'Required, please enter unit number',
  318 + layerCount: 'Total Floors',
  319 + layerCountPlaceholder: 'Required, please enter total floors',
  320 + unitArea: 'Building Area',
  321 + unitAreaPlaceholder: 'Required, please enter building area',
  322 + lift: 'Elevator',
  323 + liftPlaceholder: 'Required, please select elevator availability',
  324 + liftOption1: 'Yes',
  325 + liftOption2: 'No',
  326 + remark: 'Remark',
  327 + remarkPlaceholder: 'Please enter remarks',
  328 + save: 'Save',
  329 + cancel: 'Cancel',
  330 + zeroUnitWarning: 'Unit 0 is specific to shops and cannot be added',
  331 + successMessage: 'Unit added successfully',
  332 + errorMessage: 'Failed to add unit'
  333 + },
  334 + editUnit: {
  335 + title: 'Edit Unit',
  336 + unitNum: 'Unit Number',
  337 + unitNumPlaceholder: 'Required, please enter unit number',
  338 + layerCount: 'Total Floors',
  339 + layerCountPlaceholder: 'Required, please enter total floors',
  340 + unitArea: 'Building Area',
  341 + unitAreaPlaceholder: 'Required, please enter building area',
  342 + lift: 'Elevator',
  343 + liftPlaceholder: 'Required, please select elevator availability',
  344 + liftOption1: 'Yes',
  345 + liftOption2: 'No',
  346 + remark: 'Remark',
  347 + remarkPlaceholder: 'Please enter remarks',
  348 + save: 'Save',
  349 + cancel: 'Cancel',
  350 + zeroUnitWarning: 'Unit 0 is specific to shops and cannot be edited',
  351 + successMessage: 'Unit updated successfully',
  352 + errorMessage: 'Failed to update unit'
  353 + },
  354 + deleteUnit: {
  355 + title: 'Confirm Operation',
  356 + confirmMessage: 'Are you sure you want to delete this unit?',
  357 + cancel: 'Cancel',
  358 + confirm: 'Confirm Delete',
  359 + successMessage: 'Unit deleted successfully',
  360 + errorMessage: 'Failed to delete unit'
  361 + },
48 }, 362 },
49 zh: { 363 zh: {
50 roomList: { 364 roomList: {
@@ -91,6 +405,320 @@ export const messages = { @@ -91,6 +405,320 @@ export const messages = {
91 roomStatusDesc2: '1、未销售表示 房屋和业主之间还没有任何关系,所以修改时状态不能手工修改 需要业主入住房屋的方式 将未销售改为已入住', 405 roomStatusDesc2: '1、未销售表示 房屋和业主之间还没有任何关系,所以修改时状态不能手工修改 需要业主入住房屋的方式 将未销售改为已入住',
92 roomStatusDesc3: '2、未入住 已交房 已装修 已入住 状态表示业主和房屋之间已经有关系 可以相互修改,主要作用为在房屋创建费用时根据不同的状态去创建不同的费用', 406 roomStatusDesc3: '2、未入住 已交房 已装修 已入住 状态表示业主和房屋之间已经有关系 可以相互修改,主要作用为在房屋创建费用时根据不同的状态去创建不同的费用',
93 rentDesc: '租金:主要用于园区类或者房屋出租比较多的物业使用,小区物业忽略' 407 rentDesc: '租金:主要用于园区类或者房屋出租比较多的物业使用,小区物业忽略'
  408 + },
  409 + room: {
  410 + floorUnitTree: {
  411 + building: '栋',
  412 + unit: '单元',
  413 + noData: '当前没有楼栋'
  414 + },
  415 + searchFloor: {
  416 + title: '小区楼',
  417 + placeholder: {
  418 + floorId: '请输入楼栋ID',
  419 + floorName: '请输入楼栋名称',
  420 + floorNum: '请输入楼栋编号'
  421 + },
  422 + table: {
  423 + floorId: '楼ID',
  424 + floorName: '名称',
  425 + floorNum: '编号',
  426 + creator: '创建人',
  427 + actions: '操作'
  428 + }
  429 + },
  430 + editRoom: {
  431 + title: '修改房屋',
  432 + roomNum: '房屋编号',
  433 + layer: '房屋楼层',
  434 + unit: '房屋单元',
  435 + roomType: '房屋类型',
  436 + apartment1: '户型室',
  437 + apartment2: '户型厅',
  438 + builtUpArea: '建筑面积(平方)',
  439 + roomArea: '室内面积(平方)',
  440 + feeCoefficient: '算费系数',
  441 + roomRent: '租金',
  442 + roomState: '房屋状态',
  443 + endTime: '结束时间',
  444 + remark: '备注',
  445 + placeholder: {
  446 + roomNum: '必填,请填写房屋编号',
  447 + layer: '必填,请填写房屋楼层',
  448 + unit: '必填,请选择单元',
  449 + roomType: '必填,请选择房屋类型',
  450 + apartment: '必填,请选择房屋户型',
  451 + builtUpArea: '必填,请填写房屋建筑面积! 平方',
  452 + roomArea: '必填,请填写室内面积! 平方',
  453 + feeCoefficient: '请填写算费系数',
  454 + roomRent: '必填,请填写租金',
  455 + roomState: '必填,请选择房屋状态',
  456 + endTime: '必填,请选择结束时间',
  457 + remark: '请填写备注信息'
  458 + },
  459 + apartment1Options: {
  460 + oneRoom: '一室',
  461 + twoRooms: '两室',
  462 + threeRooms: '三室',
  463 + fourRooms: '四室',
  464 + fiveRooms: '五室',
  465 + sixRooms: '六室',
  466 + sevenRooms: '七室',
  467 + eightRooms: '八室'
  468 + },
  469 + apartment2Options: {
  470 + oneHall: '一厅',
  471 + twoHalls: '两厅',
  472 + threeHalls: '三厅',
  473 + fourHalls: '四厅',
  474 + fiveHalls: '五厅',
  475 + sixHalls: '六厅',
  476 + sevenHalls: '七厅',
  477 + eightHalls: '八厅'
  478 + },
  479 + roomStateOptions: {
  480 + occupied: '已入住',
  481 + delivered: '已交房',
  482 + decorated: '已装修',
  483 + vacant: '未入住',
  484 + decorating: '装修中'
  485 + }
  486 + },
  487 + deleteRoom: {
  488 + title: '请确认您的操作',
  489 + confirmMessage: '确认是否删除! 删除房屋会关联删除房屋下的费用以及缴费记录,并且自动解绑业主!'
  490 + },
  491 + importOwnerRoom: {
  492 + title: '房产导入',
  493 + selectFile: '选择文件',
  494 + clickUpload: '点击上传',
  495 + requiredFile: '必填,请选择数据文件',
  496 + downloadTemplate: '下载模板',
  497 + downloadFirst: '请先下载',
  498 + propertyTemplate: '房产模板',
  499 + prepareData: '准备数据后,上传导入',
  500 + fileRequired: '文件不能为空',
  501 + invalidFormat: '不是有效的Excel格式',
  502 + fileSizeExceeded: 'Excel文件大小不能超过2M',
  503 + importSuccess: '导入成功',
  504 + importFailed: '导入失败',
  505 + importError: '导入出错'
  506 + },
  507 + addFloor: {
  508 + title: '添加楼栋',
  509 + floorNum: '楼栋编号',
  510 + name: '楼栋名称',
  511 + floorArea: '建筑面积',
  512 + seq: '排序',
  513 + remark: '备注',
  514 + buildingSuffix: '号楼',
  515 + floorNumPlaceholder: '必填,请填写编号',
  516 + namePlaceholder: '必填,请填写名称',
  517 + floorAreaPlaceholder: '必填,请填写建筑面积',
  518 + remarkPlaceholder: '可填,请填写备注',
  519 + floorNumRequired: '楼栋编号不能为空',
  520 + floorNumLength: '楼栋编号长度必须在1位至64位',
  521 + nameRequired: '楼栋名称不能为空',
  522 + nameLength: '楼栋名称长度必须在2位至64位',
  523 + floorAreaRequired: '建筑面积不能为空',
  524 + floorAreaFormat: '建筑面积错误,如300.00',
  525 + seqRequired: '排序不能为空',
  526 + seqNumber: '排序必须是数字',
  527 + remarkMaxLength: '备注长度不能超过200位',
  528 + saveSuccess: '添加成功',
  529 + saveFailed: '添加失败',
  530 + saveError: '添加楼栋出错'
  531 + },
  532 + editFloor: {
  533 + title: '修改楼栋',
  534 + floorNum: '楼栋编号',
  535 + floorName: '楼栋名称',
  536 + floorArea: '建筑面积',
  537 + seq: '排序',
  538 + remark: '备注',
  539 + floorNumPlaceholder: '必填,请填写编号',
  540 + floorNamePlaceholder: '必填,请填写名称',
  541 + floorAreaPlaceholder: '必填,请填写建筑面积',
  542 + remarkPlaceholder: '可填,请填写备注',
  543 + floorNumRequired: '楼栋编号不能为空',
  544 + floorNumLength: '楼栋编号长度必须在1位至64位',
  545 + floorNameRequired: '楼栋名称不能为空',
  546 + floorNameLength: '楼栋名称长度必须在2位至64位',
  547 + floorAreaRequired: '建筑面积不能为空',
  548 + floorAreaFormat: '建筑面积错误,如300.00',
  549 + seqRequired: '排序不能为空',
  550 + seqNumber: '排序必须是数字',
  551 + remarkMaxLength: '备注长度不能超过200位',
  552 + updateSuccess: '修改成功',
  553 + updateFailed: '修改失败',
  554 + updateError: '修改楼栋出错'
  555 + },
  556 + deleteFloor: {
  557 + title: '请确认您的操作',
  558 + confirmMessage: '确认是否删除?',
  559 + cancelText: '点错了',
  560 + confirmDelete: '确认删除',
  561 + deleteSuccess: '删除成功',
  562 + deleteFailed: '删除失败',
  563 + deleteError: '删除楼栋出错'
  564 + },
  565 + },
  566 + ownerRooms: {
  567 + title: '业主房屋',
  568 + roomId: '房屋ID',
  569 + layer: '楼层',
  570 + type: '类型',
  571 + area: '建筑/室内面积',
  572 + rent: '租金',
  573 + status: '房屋状态',
  574 + oweFee: '房屋欠费',
  575 + updateDaily: '按天更新',
  576 + subtotal: '欠费小计',
  577 + successMessage: '数据加载成功',
  578 + errorMessage: '加载数据失败'
  579 + },
  580 + ownerMembers: {
  581 + title: '业主成员',
  582 + name: '名称',
  583 + sex: '性别',
  584 + male: '男',
  585 + female: '女',
  586 + age: '年龄',
  587 + type: '类型',
  588 + idCard: '身份证',
  589 + contact: '联系方式',
  590 + address: '家庭住址'
  591 + },
  592 + ownerCars: {
  593 + title: '业主车辆',
  594 + licensePlate: '车牌号',
  595 + licenseType: '车牌类型',
  596 + temporary: '临时车',
  597 + carType: '车辆类型',
  598 + color: '颜色',
  599 + owner: '业主',
  600 + parkingSpace: '车位',
  601 + park: '车场',
  602 + space: '车位',
  603 + released: '车位已释放',
  604 + validity: '有效期'
  605 + },
  606 + ownerComplaints: {
  607 + title: '业主投诉',
  608 + type: '类型',
  609 + room: '房屋',
  610 + contact: '联系人',
  611 + phone: '联系电话',
  612 + status: '状态',
  613 + handler: '处理人',
  614 + handlerPhone: '处理人电话',
  615 + createTime: '创建时间',
  616 + none: '无'
  617 + },
  618 + ownerRepairs: {
  619 + title: '业主报修',
  620 + workOrder: '工单编码',
  621 + location: '位置',
  622 + repairType: '报修类型',
  623 + reporter: '报修人',
  624 + contact: '联系方式',
  625 + appointmentTime: '预约时间',
  626 + status: '状态',
  627 + taskProcessed: '(定时任务处理)'
  628 + },
  629 + ownerOweFees: {
  630 + title: '业主欠费',
  631 + payerObj: '收费对象',
  632 + ownerName: '业主名称',
  633 + phone: '手机号',
  634 + startTime: '开始时间',
  635 + endTime: '结束时间',
  636 + total: '合计',
  637 + unit: '单位:元',
  638 + updateTime: '更新时间'
  639 + },
  640 + ownerOweFeesDemo: {
  641 + openBtn: '查看业主欠费'
  642 + },
  643 + roomOweFees: {
  644 + title: '房屋欠费',
  645 + payerObj: '收费对象',
  646 + ownerName: '业主名称',
  647 + phone: '手机号',
  648 + startTime: '开始时间',
  649 + endTime: '结束时间',
  650 + total: '合计',
  651 + unit: '单位:元',
  652 + updateTime: '更新时间'
  653 + },
  654 + roomOweFeesDemo: {
  655 + openBtn: '查看房屋欠费'
  656 + },
  657 + roomContracts: {
  658 + title: '房屋合同',
  659 + contractName: '合同名称',
  660 + contractCode: '合同编号',
  661 + parentContractCode: '父合同编号',
  662 + contractType: '合同类型',
  663 + operator: '经办人',
  664 + amount: '合同金额',
  665 + startTime: '开始时间',
  666 + endTime: '结束时间',
  667 + createTime: '起草时间',
  668 + state: '状态'
  669 + },
  670 + roomContractsDemo: {
  671 + openByOwner: '按业主打开',
  672 + openByRoom: '按房屋打开'
94 } 673 }
  674 + ,
  675 + addUnit: {
  676 + title: '添加单元',
  677 + unitNum: '单元编号',
  678 + unitNumPlaceholder: '必填,请填写单元编号',
  679 + layerCount: '总层数',
  680 + layerCountPlaceholder: '必填,请填写单元总层数',
  681 + unitArea: '建筑面积',
  682 + unitAreaPlaceholder: '必填,请填写建筑面积',
  683 + lift: '电梯',
  684 + liftPlaceholder: '必填,请选择是否有电梯',
  685 + liftOption1: '有',
  686 + liftOption2: '无',
  687 + remark: '备注',
  688 + remarkPlaceholder: '请填写备注信息',
  689 + save: '保存',
  690 + cancel: '取消',
  691 + zeroUnitWarning: '0单元为商铺特有,不允许添加',
  692 + successMessage: '单元添加成功',
  693 + errorMessage: '添加单元失败'
  694 + },
  695 + editUnit: {
  696 + title: '修改单元',
  697 + unitNum: '单元编号',
  698 + unitNumPlaceholder: '必填,请填写单元编号',
  699 + layerCount: '总层数',
  700 + layerCountPlaceholder: '必填,请填写单元总层数',
  701 + unitArea: '建筑面积',
  702 + unitAreaPlaceholder: '必填,请填写建筑面积',
  703 + lift: '电梯',
  704 + liftPlaceholder: '必填,请选择是否有电梯',
  705 + liftOption1: '有',
  706 + liftOption2: '无',
  707 + remark: '备注',
  708 + remarkPlaceholder: '请填写备注信息',
  709 + save: '保存',
  710 + cancel: '取消',
  711 + zeroUnitWarning: '0单元为商铺特有,不允许修改',
  712 + successMessage: '单元修改成功',
  713 + errorMessage: '修改单元失败'
  714 + },
  715 + deleteUnit: {
  716 + title: '请确认您的操作',
  717 + confirmMessage: '确定删除小区单元?',
  718 + cancel: '点错了',
  719 + confirm: '确认删除',
  720 + successMessage: '单元删除成功',
  721 + errorMessage: '删除单元失败'
  722 + },
95 } 723 }
96 } 724 }
97 \ No newline at end of file 725 \ No newline at end of file
src/views/room/roomList.vue
@@ -4,19 +4,22 @@ @@ -4,19 +4,22 @@
4 <el-button type="primary" size="small" @click="openAddRoomFloorModal"> 4 <el-button type="primary" size="small" @click="openAddRoomFloorModal">
5 <i class="el-icon-plus"></i>{{ $t('roomList.addBuilding') }} 5 <i class="el-icon-plus"></i>{{ $t('roomList.addBuilding') }}
6 </el-button> 6 </el-button>
7 - <el-button type="primary" size="small" @click="openUpdateRoomFloorModal"> 7 + <el-button type="primary" size="small" @click="openUpdateRoomFloorModal" v-if="roomInfo.conditions.floorId">
8 <i class="el-icon-edit"></i>{{ $t('roomList.editBuilding') }} 8 <i class="el-icon-edit"></i>{{ $t('roomList.editBuilding') }}
9 </el-button> 9 </el-button>
10 - <el-button type="primary" size="small" @click="openDeleteRoomFloorModal"> 10 + <el-button type="primary" size="small" @click="openDeleteRoomFloorModal" v-if="roomInfo.conditions.floorId">
11 <i class="el-icon-close"></i>{{ $t('roomList.deleteBuilding') }} 11 <i class="el-icon-close"></i>{{ $t('roomList.deleteBuilding') }}
12 </el-button> 12 </el-button>
13 - <el-button type="primary" size="small" class="margin-left-sm" @click="openAddRoomUnitModal"> 13 + <el-button type="primary" size="small" class="margin-left-sm" @click="openAddRoomUnitModal"
  14 + v-if="roomInfo.conditions.floorId">
14 <i class="el-icon-plus"></i>{{ $t('roomList.addUnit') }} 15 <i class="el-icon-plus"></i>{{ $t('roomList.addUnit') }}
15 </el-button> 16 </el-button>
16 - <el-button type="primary" size="small" class="margin-left-sm" @click="openUpdateRoomUnitModal"> 17 + <el-button type="primary" size="small" class="margin-left-sm" @click="openUpdateRoomUnitModal"
  18 + v-if="roomInfo.conditions.unitId">
17 <i class="el-icon-edit"></i>{{ $t('roomList.editUnit') }} 19 <i class="el-icon-edit"></i>{{ $t('roomList.editUnit') }}
18 </el-button> 20 </el-button>
19 - <el-button type="primary" size="small" class="margin-left-sm" @click="openDeleteRoomUnitModal"> 21 + <el-button type="primary" size="small" class="margin-left-sm" @click="openDeleteRoomUnitModal"
  22 + v-if="roomInfo.conditions.unitId">
20 <i class="el-icon-close"></i>{{ $t('roomList.deleteUnit') }} 23 <i class="el-icon-close"></i>{{ $t('roomList.deleteUnit') }}
21 </el-button> 24 </el-button>
22 <el-button type="primary" size="small" class="margin-left-sm" @click="openAddRoom" 25 <el-button type="primary" size="small" class="margin-left-sm" @click="openAddRoom"
@@ -36,8 +39,7 @@ @@ -36,8 +39,7 @@
36 39
37 <el-row class="flex justify-start"> 40 <el-row class="flex justify-start">
38 <el-col :span="4" class="room-floor-unit-tree"> 41 <el-col :span="4" class="room-floor-unit-tree">
39 - <floor-unit-tree :call-back-listener="callbackListener" @switchFloor="handleSwitchFloor"  
40 - @switchUnit="handleSwitchUnit" /> 42 + <floor-unit-tree ref="floorUnitTree" @switchFloorUnit="switchFloorUnit" />
41 </el-col> 43 </el-col>
42 <el-col :span="20" class="margin-top-xs margin-left-sm"> 44 <el-col :span="20" class="margin-top-xs margin-left-sm">
43 <el-card class="ibox"> 45 <el-card class="ibox">
@@ -266,16 +268,18 @@ @@ -266,16 +268,18 @@
266 </el-row> 268 </el-row>
267 269
268 <!-- 子组件 --> 270 <!-- 子组件 -->
  271 + <add-floor ref="addFloor" @handleRefreshTree="floorUnitTree" />
  272 + <edit-floor ref="editFloor" @handleRefreshTree="floorUnitTree" />
  273 + <delete-floor ref="deleteFloor" @handleRefreshTree="floorUnitTree" />
  274 + <add-unit ref="addUnit" @handleRefreshTree="floorUnitTree" />
  275 + <edit-unit ref="editUnit" @handleRefreshTree="floorUnitTree" />
  276 + <delete-unit ref="deleteUnit" @handleRefreshTree="floorUnitTree" />
269 <search-floor ref="searchFloor" emit-choose-floor="room" emit-load-data="room" /> 277 <search-floor ref="searchFloor" emit-choose-floor="room" emit-load-data="room" />
270 - <edit-room ref="editRoom" />  
271 - <delete-room ref="deleteRoom" /> 278 + <edit-room ref="editRoom" @handleRefreshRoom="handleRefreshRoom" />
  279 + <delete-room ref="deleteRoom" @handleRefreshRoom="handleRefreshRoom" />
272 <import-owner-room ref="importOwnerRoom" /> 280 <import-owner-room ref="importOwnerRoom" />
273 - <add-floor ref="addFloor" />  
274 - <edit-floor ref="editFloor" />  
275 - <delete-floor ref="deleteFloor" />  
276 - <add-unit ref="addUnit" />  
277 - <edit-unit ref="editUnit" />  
278 - <delete-unit ref="deleteUnit" /> 281 +
  282 +
279 <owner-rooms ref="ownerRooms" /> 283 <owner-rooms ref="ownerRooms" />
280 <owner-members ref="ownerMembers" /> 284 <owner-members ref="ownerMembers" />
281 <owner-cars ref="ownerCars" /> 285 <owner-cars ref="ownerCars" />
@@ -289,7 +293,7 @@ @@ -289,7 +293,7 @@
289 293
290 <script> 294 <script>
291 import { getDict } from '@/api/community/communityApi' 295 import { getDict } from '@/api/community/communityApi'
292 -import { queryRooms,getFloors,getUnits } from '@/api/room/roomApi' 296 +import { queryRooms, getFloors, getUnits } from '@/api/room/roomApi'
293 import FloorUnitTree from '@/components/room/floorUnitTree' 297 import FloorUnitTree from '@/components/room/floorUnitTree'
294 import SearchFloor from '@/components/room/searchFloor' 298 import SearchFloor from '@/components/room/searchFloor'
295 import EditRoom from '@/components/room/editRoom' 299 import EditRoom from '@/components/room/editRoom'
@@ -310,6 +314,9 @@ import OwnerOweFees from &#39;@/components/owner/ownerOweFees&#39; @@ -310,6 +314,9 @@ import OwnerOweFees from &#39;@/components/owner/ownerOweFees&#39;
310 import RoomOweFees from '@/components/room/roomOweFees' 314 import RoomOweFees from '@/components/room/roomOweFees'
311 import RoomContracts from '@/components/room/roomContracts' 315 import RoomContracts from '@/components/room/roomContracts'
312 316
  317 +import { getAttrSpecList } from '@/api/dev/attrSpecApi'
  318 +// import { getAttrValueList } from '@/api/dev/attrValueApi'
  319 +
313 const DEFAULT_PAGE = 1 320 const DEFAULT_PAGE = 1
314 const DEFAULT_ROW = 10 321 const DEFAULT_ROW = 10
315 322
@@ -371,10 +378,10 @@ export default { @@ -371,10 +378,10 @@ export default {
371 }, 378 },
372 mounted() { 379 mounted() {
373 this.initData() 380 this.initData()
374 - // window.addEventListener('resize', this.handleResize) 381 + // window.addEventListener('resize', this.handleResize)
375 }, 382 },
376 beforeDestroy() { 383 beforeDestroy() {
377 - // window.removeEventListener('resize', this.handleResize) 384 + // window.removeEventListener('resize', this.handleResize)
378 }, 385 },
379 methods: { 386 methods: {
380 async initData() { 387 async initData() {
@@ -395,7 +402,9 @@ export default { @@ -395,7 +402,9 @@ export default {
395 console.error('初始化数据失败:', error) 402 console.error('初始化数据失败:', error)
396 } 403 }
397 }, 404 },
398 - 405 + handleRefreshRoom(){
  406 + this.listRoom(this.roomInfo.conditions.page,this.roomInfo.conditions.row)
  407 + },
399 async listRoom(page, row) { 408 async listRoom(page, row) {
400 this.roomInfo.conditions.page = page 409 this.roomInfo.conditions.page = page
401 this.roomInfo.conditions.row = row 410 this.roomInfo.conditions.row = row
@@ -455,8 +464,12 @@ export default { @@ -455,8 +464,12 @@ export default {
455 464
456 async getColumns(rooms, callback) { 465 async getColumns(rooms, callback) {
457 try { 466 try {
458 - const attrSpecs = await getDict('building_room_attr')  
459 - this.roomInfo.listColumns = attrSpecs 467 + const { data } = await getAttrSpecList({
  468 + page: 1,
  469 + row: 100,
  470 + tableName: 'building_room_attr'
  471 + })
  472 + this.roomInfo.listColumns = data
460 .filter(item => item.listShow === 'Y') 473 .filter(item => item.listShow === 'Y')
461 .map(item => item.specName) 474 .map(item => item.specName)
462 callback() 475 callback()
@@ -465,16 +478,8 @@ export default { @@ -465,16 +478,8 @@ export default {
465 } 478 }
466 }, 479 },
467 480
468 - handleSwitchFloor(data) { 481 + switchFloorUnit(data) {
469 this.roomInfo.conditions.floorId = data.floorId 482 this.roomInfo.conditions.floorId = data.floorId
470 - this.roomInfo.conditions.unitId = ''  
471 - this.roomInfo.conditions.flag = 1  
472 - this.roomInfo.isAll = 'N'  
473 - this.listRoom(DEFAULT_PAGE, DEFAULT_ROW)  
474 - },  
475 -  
476 - handleSwitchUnit(data) {  
477 - this.roomInfo.conditions.floorId = ''  
478 this.roomInfo.conditions.unitId = data.unitId 483 this.roomInfo.conditions.unitId = data.unitId
479 this.roomInfo.conditions.flag = 1 484 this.roomInfo.conditions.flag = 1
480 this.roomInfo.isAll = 'N' 485 this.roomInfo.isAll = 'N'
@@ -490,18 +495,14 @@ export default { @@ -490,18 +495,14 @@ export default {
490 this.listRoom(val, DEFAULT_ROW) 495 this.listRoom(val, DEFAULT_ROW)
491 }, 496 },
492 497
493 - computeTableDivWidth() {  
494 - // const bodyWidth = document.body.clientWidth  
495 - // const menuWidth = document.getElementById('menu-nav').offsetWidth || 0  
496 - // const treeWidth = document.querySelector('.room-floor-unit-tree').offsetWidth || 0  
497 - // return `${bodyWidth - menuWidth - treeWidth - 80}px`  
498 - return '100%'  
499 - },  
500 498
501 handleResize() { 499 handleResize() {
502 this.$forceUpdate() 500 this.$forceUpdate()
503 }, 501 },
504 502
  503 + floorUnitTree(param) {
  504 + this.$refs.floorUnitTree.refreshTree(param)
  505 + },
505 // 按钮操作相关方法 506 // 按钮操作相关方法
506 openAddRoom() { 507 openAddRoom() {
507 this.$router.push('/pages/property/addRoomView') 508 this.$router.push('/pages/property/addRoomView')
src/views/room/roomOweFeesLang.js deleted
1 -export const messages = {  
2 - en: {  
3 - roomOweFees: {  
4 - title: 'Room Arrears',  
5 - payerObj: 'Charge Object',  
6 - ownerName: 'Owner Name',  
7 - phone: 'Phone',  
8 - startTime: 'Start Time',  
9 - endTime: 'End Time',  
10 - total: 'Total',  
11 - unit: 'Unit: Yuan',  
12 - updateTime: 'Update Time'  
13 - },  
14 - roomOweFeesDemo: {  
15 - openBtn: 'View Room Arrears'  
16 - }  
17 - },  
18 - zh: {  
19 - roomOweFees: {  
20 - title: '房屋欠费',  
21 - payerObj: '收费对象',  
22 - ownerName: '业主名称',  
23 - phone: '手机号',  
24 - startTime: '开始时间',  
25 - endTime: '结束时间',  
26 - total: '合计',  
27 - unit: '单位:元',  
28 - updateTime: '更新时间'  
29 - },  
30 - roomOweFeesDemo: {  
31 - openBtn: '查看房屋欠费'  
32 - }  
33 - }  
34 -}  
35 \ No newline at end of file 0 \ No newline at end of file
src/views/room/searchFloorLang.js deleted
1 -export const messages = {  
2 - en: {  
3 - room: {  
4 - searchFloor: {  
5 - title: 'Building Search',  
6 - placeholder: {  
7 - floorId: 'Please enter building ID',  
8 - floorName: 'Please enter building name',  
9 - floorNum: 'Please enter building number'  
10 - },  
11 - table: {  
12 - floorId: 'Building ID',  
13 - floorName: 'Name',  
14 - floorNum: 'Number',  
15 - creator: 'Creator',  
16 - actions: 'Actions'  
17 - }  
18 - }  
19 - }  
20 - },  
21 - zh: {  
22 - room: {  
23 - searchFloor: {  
24 - title: '小区楼',  
25 - placeholder: {  
26 - floorId: '请输入楼栋ID',  
27 - floorName: '请输入楼栋名称',  
28 - floorNum: '请输入楼栋编号'  
29 - },  
30 - table: {  
31 - floorId: '楼ID',  
32 - floorName: '名称',  
33 - floorNum: '编号',  
34 - creator: '创建人',  
35 - actions: '操作'  
36 - }  
37 - }  
38 - }  
39 - }  
40 -}  
41 \ No newline at end of file 0 \ No newline at end of file
src/views/staff/aStaffDetailList.vue
@@ -141,7 +141,7 @@ export default { @@ -141,7 +141,7 @@ export default {
141 page: 1 141 page: 1
142 }) 142 })
143 Object.assign(this.staffDetailInfo, response.staffs[0]) 143 Object.assign(this.staffDetailInfo, response.staffs[0])
144 - //this.staffDetailInfo.photo = `/callComponent/download/getFile/fileByObjId?objId=${this.staffDetailInfo.staffId}&communityId=${this.$store.getters.communityId}&fileTypeCd=12000&time=${new Date().getTime()}` 144 + //this.staffDetailInfo.photo = `/callComponent/download/getFile/fileByObjId?objId=${this.staffDetailInfo.staffId}&communityId=${this.getCommunityId()}&fileTypeCd=12000&time=${new Date().getTime()}`
145 } catch (error) { 145 } catch (error) {
146 this.$message.error(this.$t('aStaffDetailList.loadError')) 146 this.$message.error(this.$t('aStaffDetailList.loadError'))
147 } 147 }
vue.config.js
@@ -22,7 +22,8 @@ module.exports = { @@ -22,7 +22,8 @@ module.exports = {
22 historyApiFallback: { 22 historyApiFallback: {
23 disableDotRule: true, 23 disableDotRule: true,
24 rewrites: [ 24 rewrites: [
25 - { from: /\/img\/.*/, to: function (context) { return context.parsedUrl.pathname; } } 25 + { from: /\/img\/.*/, to: function (context) { return context.parsedUrl.pathname; } },
  26 + { from: /\*.xlsx/, to: function (context) { return context.parsedUrl.pathname; } }
26 ] 27 ]
27 } 28 }
28 } 29 }