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 3 export function addFloor(data) {
4 4 return new Promise((resolve, reject) => {
5 5 request({
6   - url: '/floor/saveFloor',
  6 + url: '/floor.saveFloor',
7 7 method: 'post',
8 8 data
9 9 }).then(response => {
10   - resolve(response)
  10 + resolve(response.data)
11 11 }).catch(error => {
12 12 reject(error)
13 13 })
... ...
src/api/room/deleteFloorApi.js
... ... @@ -3,11 +3,11 @@ import request from '@/utils/request'
3 3 export function deleteFloor(data) {
4 4 return new Promise((resolve, reject) => {
5 5 request({
6   - url: '/floor/deleteFloor',
  6 + url: '/floor.deleteFloor',
7 7 method: 'post',
8 8 data
9 9 }).then(response => {
10   - resolve(response)
  10 + resolve(response.data)
11 11 }).catch(error => {
12 12 reject(error)
13 13 })
... ...
src/api/room/deleteUnitApi.js
1 1 import request from '@/utils/request'
2 2  
3   -export function deleteUnit(params) {
  3 +export function deleteUnit(data) {
4 4 return new Promise((resolve, reject) => {
5 5 request({
6 6 url: '/unit.deleteUnit',
7 7 method: 'post',
8   - params
  8 + data
9 9 }).then(response => {
10 10 const res = response.data
11   - if (res.code === 0) {
  11 + if (res.code == 0) {
12 12 resolve(res)
13 13 } else {
14 14 reject(new Error(res.msg || '删除单元失败'))
... ...
src/api/room/editFloorApi.js
... ... @@ -3,11 +3,11 @@ import request from '@/utils/request'
3 3 export function editFloor(data) {
4 4 return new Promise((resolve, reject) => {
5 5 request({
6   - url: '/floor/editFloor',
  6 + url: '/floor.editFloor',
7 7 method: 'post',
8 8 data
9 9 }).then(response => {
10   - resolve(response)
  10 + resolve(response.data)
11 11 }).catch(error => {
12 12 reject(error)
13 13 })
... ...
src/api/room/editRoomApi.js
... ... @@ -27,11 +27,8 @@ export function getUnits(params) {
27 27 params
28 28 }).then(response => {
29 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 32 }).catch(error => {
36 33 reject(error)
37 34 })
... ...
src/api/room/floorUnitTreeApi.js
... ... @@ -8,11 +8,7 @@ export function getFloorAndUnits(communityId) {
8 8 params: { communityId }
9 9 }).then(response => {
10 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 12 }).catch(error => {
17 13 reject(error)
18 14 })
... ...
src/api/room/ownerRoomsApi.js
... ... @@ -8,11 +8,7 @@ export function queryRoomsByOwner(params) {
8 8 params
9 9 }).then(response => {
10 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 12 }).catch(error => {
17 13 reject(error)
18 14 })
... ...
src/api/room/roomApi.js
... ... @@ -9,11 +9,7 @@ export function queryRooms(params) {
9 9 params
10 10 }).then(response => {
11 11 const res = response.data
12   - if (res.code === 0) {
13 12 resolve(res)
14   - } else {
15   - reject(new Error(res.msg || '获取房屋列表失败'))
16   - }
17 13 }).catch(error => {
18 14 reject(error)
19 15 })
... ... @@ -29,11 +25,8 @@ export function getFloors(params) {
29 25 params
30 26 }).then(response => {
31 27 const res = response.data
32   - if (res.code === 0) {
  28 +
33 29 resolve(res)
34   - } else {
35   - reject(new Error(res.msg || '获取楼栋列表失败'))
36   - }
37 30 }).catch(error => {
38 31 reject(error)
39 32 })
... ... @@ -49,11 +42,8 @@ export function getUnits(params) {
49 42 params
50 43 }).then(response => {
51 44 const res = response.data
52   - if (res.code === 0) {
  45 +
53 46 resolve(res)
54   - } else {
55   - reject(new Error(res.msg || '获取单元列表失败'))
56   - }
57 47 }).catch(error => {
58 48 reject(error)
59 49 })
... ...
src/components/admin/WriteAdvertMachine.vue
... ... @@ -44,7 +44,7 @@ export default {
44 44 path: '/advertVedio',
45 45 query: {
46 46 machineCode: this.machineCode,
47   - communityId: this.$store.getters.communityId
  47 + communityId: this.getCommunityId()
48 48 }
49 49 })
50 50 this.visible = false
... ...
src/components/community/DeleteRoomRenovation.vue
... ... @@ -38,7 +38,7 @@ export default {
38 38 open(row) {
39 39 this.form = {
40 40 rId: row.rId,
41   - communityId: this.$store.getters.communityId
  41 + communityId: this.getCommunityId()
42 42 }
43 43 this.visible = true
44 44 },
... ...
src/components/community/EditRoomRenovation.vue
... ... @@ -177,7 +177,7 @@ export default {
177 177 this.getDictData()
178 178 this.form = {
179 179 ...row,
180   - communityId: this.$store.getters.communityId
  180 + communityId: this.getCommunityId()
181 181 }
182 182 this.visible = true
183 183 },
... ...
src/components/community/RoomDecorationAcceptance.vue
... ... @@ -71,7 +71,7 @@ export default {
71 71 state: '',
72 72 remark: '',
73 73 detailType: '1001',
74   - communityId: this.$store.getters.communityId
  74 + communityId: this.getCommunityId()
75 75 }
76 76 this.visible = true
77 77 },
... ... @@ -83,7 +83,7 @@ export default {
83 83 state: '',
84 84 remark: '',
85 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 38 open(row) {
39 39 this.form = {
40 40 rId: row.rId,
41   - communityId: this.$store.getters.communityId
  41 + communityId: this.getCommunityId()
42 42 }
43 43 this.visible = true
44 44 },
... ...
src/components/community/RoomToExamine.vue
... ... @@ -69,7 +69,7 @@ export default {
69 69 roomName: row.roomName,
70 70 state: '',
71 71 examineRemark: '',
72   - communityId: this.$store.getters.communityId
  72 + communityId: this.getCommunityId()
73 73 }
74 74 this.visible = true
75 75 },
... ...
src/components/mall/DeleteJunkRequirement.vue
... ... @@ -39,7 +39,7 @@ export default {
39 39 try {
40 40 await deleteJunkRequirement({
41 41 junkRequirementId: this.junkRequirementId,
42   - communityId: this.$store.getters.communityId
  42 + communityId: this.getCommunityId()
43 43 })
44 44 this.$message.success(this.$t('junkRequirement.delete.success'))
45 45 this.$emit('success')
... ...
src/components/mall/EditJunkRequirement.vue
... ... @@ -120,7 +120,7 @@ export default {
120 120 try {
121 121 await updateJunkRequirement({
122 122 ...this.editJunkRequirementInfo,
123   - communityId: this.$store.getters.communityId
  123 + communityId: this.getCommunityId()
124 124 })
125 125 this.$message.success(this.$t('junkRequirement.edit.success'))
126 126 this.$emit('success')
... ...
src/components/owner/ownerCars.vue
1 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 3 <el-row>
10 4 <el-col :span="24">
11 5 <div class="table-container">
... ... @@ -42,15 +36,8 @@
42 36 </el-table-column>
43 37 </el-table>
44 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 41 </el-col>
55 42 </el-row>
56 43 </el-dialog>
... ... @@ -95,10 +82,10 @@ export default {
95 82 const params = {
96 83 page: page,
97 84 row: size,
98   - communityId: this.$store.getters.communityId,
  85 + communityId: this.getCommunityId(),
99 86 ownerId: this.ownerCarsInfo.ownerId
100 87 }
101   -
  88 +
102 89 const response = await queryOwnerCars(params)
103 90 this.ownerCarsInfo.cars = response.data
104 91 this.totalCount = response.total
... ...
src/components/owner/ownerComplaints.vue
1 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 4 <el-row>
10 5 <el-col :span="24">
11 6 <div class="table-container">
... ... @@ -32,15 +27,8 @@
32 27 <el-table-column prop="createTime" :label="$t('ownerComplaints.createTime')" align="center" />
33 28 </el-table>
34 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 32 </el-col>
45 33 </el-row>
46 34 </el-dialog>
... ... @@ -85,10 +73,10 @@ export default {
85 73 const params = {
86 74 page: page,
87 75 row: size,
88   - communityId: this.$store.getters.communityId,
  76 + communityId: this.getCommunityId(),
89 77 ownerId: this.ownerComplaintsInfo.ownerId
90 78 }
91   -
  79 +
92 80 const response = await listComplaints(params)
93 81 this.ownerComplaintsInfo.complaints = response.data
94 82 this.totalCount = response.total
... ...
src/components/owner/ownerMembers.vue
1 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 3 <el-row>
10 4 <el-col :span="24">
11 5 <div class="table-container">
... ... @@ -23,15 +17,8 @@
23 17 <el-table-column prop="address" :label="$t('ownerMembers.address')" align="center" />
24 18 </el-table>
25 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 22 </el-col>
36 23 </el-row>
37 24 </el-dialog>
... ... @@ -76,10 +63,10 @@ export default {
76 63 const params = {
77 64 page: page,
78 65 row: size,
79   - communityId: this.$store.getters.communityId,
  66 + communityId: this.getCommunityId(),
80 67 ownerId: this.ownerMembersInfo.ownerId
81 68 }
82   -
  69 +
83 70 const response = await queryOwnerMembers(params)
84 71 this.ownerMembersInfo.members = response.data
85 72 this.totalCount = response.total
... ...
src/components/owner/ownerOweFees.vue
1 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 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 18 </el-dialog>
64 19 </template>
65 20  
... ... @@ -104,7 +59,7 @@ export default {
104 59 communityId: this.getCommunityId(),
105 60 ownerId: this.ownerOweFeesInfo.ownerId
106 61 }
107   -
  62 +
108 63 const response = await getOwnerOweFees(params)
109 64 this.ownerOweFeesInfo.fees = response.data
110 65 this.pagination.total = response.records
... ... @@ -113,15 +68,12 @@ export default {
113 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 73 </script>
122 74  
123 75 <style scoped>
124   -.custom-modal >>> .el-dialog__body {
  76 +.custom-modal>>>.el-dialog__body {
125 77 padding: 15px 20px;
126 78 }
127 79 </style>
128 80 \ No newline at end of file
... ...
src/components/owner/ownerRepairs.vue
1 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 3 <el-row>
10 4 <el-col :span="24">
11 5 <div class="table-container">
... ... @@ -28,15 +22,8 @@
28 22 </el-table-column>
29 23 </el-table>
30 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 27 </el-col>
41 28 </el-row>
42 29 </el-dialog>
... ... @@ -81,10 +68,10 @@ export default {
81 68 const params = {
82 69 page: page,
83 70 row: size,
84   - communityId: this.$store.getters.communityId,
  71 + communityId: this.getCommunityId(),
85 72 ownerId: this.ownerRepairsInfo.ownerId
86 73 }
87   -
  74 +
88 75 const response = await listOwnerRepairs(params)
89 76 this.ownerRepairsInfo.repairs = response.data
90 77 this.totalCount = response.total
... ...
src/components/owner/ownerRooms.vue
1 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 3 <el-table :data="ownerRoomsInfo.rooms" style="width: 100%">
9 4 <el-table-column prop="roomId" :label="$t('ownerRooms.roomId')" align="center" />
10 5 <el-table-column prop="layer" :label="$t('ownerRooms.layer')" align="center" />
... ... @@ -22,19 +17,14 @@
22 17 </template>
23 18 </el-table-column>
24 19 </el-table>
25   -
26   - <el-row class="mt-3">
  20 +
  21 + <el-row class="mt-3 margin-top">
27 22 <el-col :span="8">
28 23 <span>{{ $t('ownerRooms.subtotal') }}: {{ ownerRoomsInfo.allOweFeeAmount }}</span>
29 24 </el-col>
30 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 28 </el-col>
39 29 </el-row>
40 30 </el-dialog>
... ... @@ -81,7 +71,7 @@ export default {
81 71 communityId: this.getCommunityId(),
82 72 ownerId: this.ownerRoomsInfo.ownerId
83 73 }
84   -
  74 +
85 75 const response = await queryRoomsByOwner(params)
86 76 this.ownerRoomsInfo.rooms = response.rooms
87 77 this.pagination.total = response.total || 0
... ...
src/components/room/addFloor.vue
... ... @@ -20,7 +20,7 @@
20 20 </el-input>
21 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 24 <el-input-number v-model="form.seq" :min="1" />
25 25 </el-form-item>
26 26  
... ... @@ -28,7 +28,6 @@
28 28 <el-input v-model="form.remark" type="textarea" :placeholder="$t('room.addFloor.remarkPlaceholder')" />
29 29 </el-form-item>
30 30  
31   - <el-alert v-if="errorInfo" :title="errorInfo" type="error" show-icon />
32 31 </el-form>
33 32  
34 33 <span slot="footer" class="dialog-footer">
... ... @@ -117,21 +116,13 @@ export default {
117 116 if (!valid) return
118 117  
119 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 120 const response = await addFloor(this.form)
129 121  
130   - if (response.code === 0) {
  122 + if (response.code == 0) {
131 123 this.$message.success(this.$t('room.addFloor.saveSuccess'))
132 124 this.handleClose()
133   - this.$emit('refresh-data')
134   - this.$emit('refresh-tree')
  125 + this.$emit('handleRefreshTree', {})
135 126 } else {
136 127 this.errorInfo = response.msg || this.$t('room.addFloor.saveFailed')
137 128 }
... ... @@ -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 136 </script>
150 137 \ No newline at end of file
... ...
src/components/room/addUnit.vue
1 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 3 <el-form ref="form" :model="addUnitInfo" label-width="120px">
9 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 6 </el-form-item>
15   -
  7 +
16 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 11 </el-form-item>
23   -
  12 +
24 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 15 </el-form-item>
30   -
  16 +
31 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 21 </el-select>
46 22 </el-form-item>
47   -
  23 +
48 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 27 </el-form-item>
56 28 </el-form>
57   -
  29 +
58 30 <span slot="footer" class="dialog-footer">
59 31 <el-button @click="handleClose">{{ $t('addUnit.cancel') }}</el-button>
60 32 <el-button type="primary" @click="addUnit">{{ $t('addUnit.save') }}</el-button>
... ... @@ -119,17 +91,17 @@ export default {
119 91 async addUnit() {
120 92 const isValid = await this.validateForm()
121 93 if (!isValid) return
122   -
  94 +
123 95 if (this.addUnitInfo.unitNum === '0') {
124 96 this.$message.warning(this.$t('addUnit.zeroUnitWarning'))
125 97 return
126 98 }
127   -
  99 +
128 100 try {
129 101 await saveUnit(this.addUnitInfo)
130 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 105 this.handleClose()
134 106 } catch (error) {
135 107 console.error('添加单元失败:', error)
... ...
src/components/room/deleteFloor.vue
1 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 3 <p>{{ $t('room.deleteFloor.confirmMessage') }}</p>
9 4 <span slot="footer" class="dialog-footer">
10 5 <el-button @click="handleClose">{{ $t('room.deleteFloor.cancelText') }}</el-button>
... ... @@ -41,12 +36,12 @@ export default {
41 36 async handleDelete() {
42 37 try {
43 38 const response = await deleteFloor(this.floorInfo)
44   -
45   - if (response.code === 0) {
  39 +
  40 + if (response.code == 0) {
46 41 this.$message.success(this.$t('room.deleteFloor.deleteSuccess'))
47 42 this.handleClose()
48   - this.$emit('refresh-data')
49   - this.$emit('refresh-tree')
  43 + this.$emit('handleRefreshTree', {})
  44 +
50 45 } else {
51 46 this.$message.error(response.msg || this.$t('room.deleteFloor.deleteFailed'))
52 47 }
... ... @@ -54,10 +49,6 @@ export default {
54 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 54 </script>
64 55 \ No newline at end of file
... ...
src/components/room/deleteRoom.vue
1 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 3 <div style="text-align: center">
8 4 <p>{{ $t('room.deleteRoom.confirmMessage') }}</p>
9 5 </div>
10 6 <div slot="footer">
11 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 9 </div>
14 10 </el-dialog>
15 11 </template>
... ... @@ -39,21 +35,18 @@ export default {
39 35 async deleteRoom() {
40 36 try {
41 37 this.roomInfo.communityId = this.getCommunityId()
42   -
  38 +
43 39 await deleteRoom(this.roomInfo)
44   -
  40 +
45 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 44 this.$message.success(this.$t('common.deleteSuccess'))
49 45 } catch (error) {
50 46 console.error('删除房屋失败', error)
51 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 52 </script>
60 53 \ No newline at end of file
... ...
src/components/room/deleteUnit.vue
... ... @@ -48,8 +48,8 @@ export default {
48 48 try {
49 49 await deleteUnit(param)
50 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 53 this.handleClose()
54 54 } catch (error) {
55 55 console.error('删除单元失败:', error)
... ...
src/components/room/editFloor.vue
1 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 3 <el-form ref="form" :model="form" :rules="rules" label-width="120px">
9 4 <el-form-item :label="$t('room.editFloor.floorNum')" prop="floorNum">
10 5 <el-input v-model="form.floorNum" :placeholder="$t('room.editFloor.floorNumPlaceholder')" />
11 6 </el-form-item>
12   -
  7 +
13 8 <el-form-item :label="$t('room.editFloor.floorName')" prop="floorName">
14 9 <el-input v-model="form.floorName" :placeholder="$t('room.editFloor.floorNamePlaceholder')" />
15 10 </el-form-item>
16   -
  11 +
17 12 <el-form-item :label="$t('room.editFloor.floorArea')" prop="floorArea">
18 13 <el-input v-model="form.floorArea" :placeholder="$t('room.editFloor.floorAreaPlaceholder')">
19 14 <template slot="append">m²</template>
20 15 </el-input>
21 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 19 <el-input-number v-model="form.seq" :min="1" />
25 20 </el-form-item>
26   -
  21 +
27 22 <el-form-item :label="$t('room.editFloor.remark')" prop="remark">
28 23 <el-input v-model="form.remark" type="textarea" :placeholder="$t('room.editFloor.remarkPlaceholder')" />
29 24 </el-form-item>
30   -
  25 +
31 26 <el-alert v-if="errorInfo" :title="errorInfo" type="error" show-icon />
32 27 </el-form>
33   -
  28 +
34 29 <span slot="footer" class="dialog-footer">
35 30 <el-button @click="handleClose">{{ $t('common.cancel') }}</el-button>
36 31 <el-button type="primary" @click="handleUpdate">{{ $t('common.update') }}</el-button>
... ... @@ -107,20 +102,20 @@ export default {
107 102 async handleUpdate() {
108 103 this.$refs.form.validate(async (valid) => {
109 104 if (!valid) return
110   -
  105 +
111 106 try {
112 107 const payload = {
113 108 ...this.form,
114 109 name: this.form.floorName
115 110 }
116   -
  111 +
117 112 const response = await editFloor(payload)
118   -
119   - if (response.code === 0) {
  113 +
  114 + if (response.code == 0) {
120 115 this.$message.success(this.$t('room.editFloor.updateSuccess'))
121 116 this.handleClose()
122   - this.$emit('refresh-data')
123   - this.$emit('refresh-tree', { floorId: this.form.floorId })
  117 + this.$emit('handleRefreshTree', {})
  118 +
124 119 } else {
125 120 this.errorInfo = response.msg || this.$t('room.editFloor.updateFailed')
126 121 }
... ... @@ -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 129 </script>
139 130 \ No newline at end of file
... ...
src/components/room/editRoom.vue
1 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 3 <el-form :model="form" label-width="120px" label-position="right">
8 4 <el-row>
9 5 <el-col :span="12">
... ... @@ -17,65 +13,47 @@
17 13 </el-form-item>
18 14 </el-col>
19 15 </el-row>
20   -
  16 +
21 17 <el-row>
22 18 <el-col :span="12">
23 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 23 </el-select>
32 24 </el-form-item>
33 25 </el-col>
34 26 <el-col :span="12">
35 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 30 </el-select>
44 31 </el-form-item>
45 32 </el-col>
46 33 </el-row>
47   -
  34 +
48 35 <el-row>
49 36 <el-col :span="12">
50 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 40 </el-select>
59 41 </el-form-item>
60 42 </el-col>
61 43 <el-col :span="12">
62 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 47 </el-select>
71 48 </el-form-item>
72 49 </el-col>
73 50 </el-row>
74   -
  51 +
75 52 <el-row>
76 53 <el-col :span="12">
77 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 57 </el-form-item>
80 58 </el-col>
81 59 <el-col :span="12">
... ... @@ -84,7 +62,7 @@
84 62 </el-form-item>
85 63 </el-col>
86 64 </el-row>
87   -
  65 +
88 66 <el-row>
89 67 <el-col :span="12">
90 68 <el-form-item :label="$t('room.editRoom.feeCoefficient')">
... ... @@ -97,64 +75,37 @@
97 75 </el-form-item>
98 76 </el-col>
99 77 </el-row>
100   -
  78 +
101 79 <el-row v-if="form.state !== '2002'">
102 80 <el-col :span="12">
103 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 84 </el-select>
112 85 </el-form-item>
113 86 </el-col>
114 87 <el-col :span="12">
115 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 91 </el-form-item>
123 92 </el-col>
124 93 </el-row>
125   -
  94 +
126 95 <div v-for="(item, index) in form.attrs" :key="index">
127 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 100 </el-select>
145 101 </el-form-item>
146 102 </div>
147   -
  103 +
148 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 106 </el-form-item>
156 107 </el-form>
157   -
  108 +
158 109 <div slot="footer">
159 110 <el-button @click="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
160 111 <el-button type="primary" @click="editRoom">{{ $t('common.save') }}</el-button>
... ... @@ -223,24 +174,22 @@ export default {
223 174 },
224 175 created() {
225 176 this.loadRoomAttrSpec()
226   - this.$eventBus.$on('editRoom', this.open)
227 177 },
228 178 beforeDestroy() {
229   - this.$eventBus.$off('editRoom', this.open)
230 179 },
231 180 methods: {
232 181 async open(room) {
233 182 this.resetForm()
234 183 this.form = { ...this.form, ...room }
235   -
  184 +
236 185 try {
237 186 // 加载房屋类型字典
238 187 const data = await getDict('building_room', 'room_sub_type')
239 188 this.roomSubTypes = data
240   -
  189 +
241 190 // 加载单元列表
242 191 await this.loadUnits(room.floorId)
243   -
  192 +
244 193 this.dialogVisible = true
245 194 } catch (error) {
246 195 console.error('打开编辑房屋失败', error)
... ... @@ -270,13 +219,11 @@ export default {
270 219 try {
271 220 this.form.apartment = this.form.apartment1 + this.form.apartment2
272 221 this.form.communityId = this.getCommunityId()
273   -
  222 +
274 223 await updateRoom(this.form)
275   -
  224 +
276 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 227 } catch (error) {
281 228 console.error('更新房屋失败', error)
282 229 this.$message.error(error.message || this.$t('common.updateFailed'))
... ... @@ -303,9 +250,6 @@ export default {
303 250 endTime: ''
304 251 }
305 252 },
306   - getCommunityId() {
307   - return this.$store.state.community.currentCommunity.communityId
308   - }
309 253 }
310 254 }
311 255 </script>
312 256 \ No newline at end of file
... ...
src/components/room/editUnit.vue
... ... @@ -110,8 +110,8 @@ export default {
110 110 try {
111 111 await updateUnit(this.editUnitInfo)
112 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 115 this.handleClose()
116 116 } catch (error) {
117 117 console.error('修改单元失败:', error)
... ...
src/components/room/floorUnitTree.vue
... ... @@ -5,7 +5,6 @@
5 5 :data="treeData"
6 6 :props="defaultProps"
7 7 node-key="id"
8   - default-expand-all
9 8 :expand-on-click-node="false"
10 9 @node-click="handleNodeClick"
11 10 >
... ... @@ -35,19 +34,20 @@ export default {
35 34 treeData: [],
36 35 defaultProps: {
37 36 children: 'children',
38   - label: 'text'
  37 + label: 'text',
39 38 },
40 39 currentFloorId: ''
41 40 }
42 41 },
43 42 mounted() {
44 43 this.loadData()
45   - this.$eventBus.$on('floorUnitTree', this.handleRefreshTree)
46 44 },
47 45 beforeDestroy() {
48   - this.$eventBus.$off('floorUnitTree', this.handleRefreshTree)
49 46 },
50 47 methods: {
  48 + refreshTree(param) {
  49 + this.handleRefreshTree(param)
  50 + },
51 51 handleRefreshTree(param) {
52 52 if (param) {
53 53 this.currentFloorId = param.floorId
... ... @@ -94,11 +94,9 @@ export default {
94 94 },
95 95 handleNodeClick(data) {
96 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 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 116 padding: 20px;
119 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 125 </style>
122 126 \ No newline at end of file
... ...
src/components/room/importOwnerRoom.vue
1 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 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 6 <el-button size="small" type="primary">{{ $t('room.importOwnerRoom.clickUpload') }}</el-button>
18 7 <div slot="tip" class="el-upload__tip">
19 8 {{ fileName || $t('room.importOwnerRoom.requiredFile') }}
20 9 </div>
21 10 </el-upload>
22 11 </el-form-item>
23   -
  12 +
24 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 15 <el-link type="primary" :href="templateUrl" target="_blank">
27 16 {{ $t('room.importOwnerRoom.propertyTemplate') }}
28 17 </el-link>
29 18 <span>{{ $t('room.importOwnerRoom.prepareData') }}</span>
30 19 </el-form-item>
31 20 </el-form>
32   -
  21 +
33 22 <span slot="footer" class="dialog-footer">
34 23 <el-button @click="handleClose">{{ $t('common.cancel') }}</el-button>
35 24 <el-button type="primary" @click="handleImport">{{ $t('common.import') }}</el-button>
... ... @@ -78,31 +67,31 @@ export default {
78 67 this.$message.error(this.$t('room.importOwnerRoom.fileRequired'))
79 68 return false
80 69 }
81   -
  70 +
82 71 const fileType = this.fileName.split('.').pop().toLowerCase()
83 72 if (!['xls', 'xlsx'].includes(fileType)) {
84 73 this.$message.error(this.$t('room.importOwnerRoom.invalidFormat'))
85 74 return false
86 75 }
87   -
  76 +
88 77 if (this.form.file.size > 2 * 1024 * 1024) {
89 78 this.$message.error(this.$t('room.importOwnerRoom.fileSizeExceeded'))
90 79 return false
91 80 }
92   -
  81 +
93 82 return true
94 83 },
95 84 async handleImport() {
96 85 if (!this.validate()) return
97   -
  86 +
98 87 try {
99 88 const formData = new FormData()
100 89 formData.append('uploadFile', this.form.file)
101 90 formData.append('communityId', this.form.communityId)
102 91 formData.append('importAdapt', 'importRoomOwner')
103   -
  92 +
104 93 const response = await importOwnerRoom(formData)
105   -
  94 +
106 95 if (response.code === 0) {
107 96 this.$message.success(this.$t('room.importOwnerRoom.importSuccess'))
108 97 this.handleClose()
... ... @@ -120,10 +109,6 @@ export default {
120 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 114 </script>
130 115 \ No newline at end of file
... ...
src/components/room/roomContracts.vue
1 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 8 <template slot-scope="scope">
32 9 {{ scope.row.parentContractCode || '-' }}
33 10 </template>
34 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 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 24 </el-dialog>
83 25 </template>
84 26  
... ... @@ -125,11 +67,11 @@ export default {
125 67 communityId: this.getCommunityId(),
126 68 objId: this.roomContractsInfo.ownerId
127 69 }
128   -
  70 +
129 71 if (this.roomContractsInfo.roomId) {
130 72 params.roomId = this.roomContractsInfo.roomId
131 73 }
132   -
  74 +
133 75 const response = await getRoomContracts(params, this.roomContractsInfo.roomId)
134 76 this.roomContractsInfo.contracts = response.data
135 77 this.pagination.total = response.records
... ... @@ -138,15 +80,13 @@ export default {
138 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 86 </script>
147 87  
148 88 <style scoped>
149   -.custom-modal >>> .el-dialog__body {
  89 +.custom-modal>>>.el-dialog__body {
150 90 padding: 15px 20px;
151 91 }
152 92 </style>
153 93 \ No newline at end of file
... ...
src/components/room/roomOweFees.vue
1 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 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 18 </el-dialog>
64 19 </template>
65 20  
... ... @@ -105,7 +60,7 @@ export default {
105 60 payerObjId: this.roomOweFeesInfo.roomId,
106 61 payerObjType: '3333'
107 62 }
108   -
  63 +
109 64 const response = await getRoomOweFees(params)
110 65 this.roomOweFeesInfo.fees = response.data
111 66 this.pagination.total = response.records
... ... @@ -114,15 +69,13 @@ export default {
114 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 75 </script>
123 76  
124 77 <style scoped>
125   -.custom-modal >>> .el-dialog__body {
  78 +.custom-modal>>>.el-dialog__body {
126 79 padding: 15px 20px;
127 80 }
128 81 </style>
129 82 \ No newline at end of file
... ...
src/components/room/searchFloor.vue
... ... @@ -132,9 +132,6 @@ export default {
132 132 this.$eventBus.$emit(this.emitLoadData, 'loadData', { floorId: floor.floorId })
133 133 this.dialogVisible = false
134 134 },
135   - getCommunityId() {
136   - return this.$store.state.community.currentCommunity.communityId
137   - }
138 135 }
139 136 }
140 137 </script>
141 138 \ No newline at end of file
... ...
src/components/work/ReplyRepairAppraise.vue
... ... @@ -60,7 +60,7 @@ export default {
60 60 try {
61 61 await replyRepairAppraise({
62 62 ...this.form,
63   - communityId: this.$store.getters.communityId
  63 + communityId: this.getCommunityId()
64 64 })
65 65 this.$message.success(this.$t('adminRepairDetail.replySuccess'))
66 66 this.visible = false
... ...
src/i18n/commonLang.js
... ... @@ -39,6 +39,7 @@ export const messages = {
39 39 status: 'Status',
40 40 enabled: 'Enabled',
41 41 disabled: 'Disabled',
  42 + import: 'Import',
42 43 }
43 44 },
44 45 zh: {
... ... @@ -81,6 +82,7 @@ export const messages = {
81 82 status: '状态',
82 83 enabled: '启用',
83 84 disabled: '禁用',
  85 + import: '导入',
84 86 }
85 87 }
86 88 }
87 89 \ No newline at end of file
... ...
src/i18n/index.js
... ... @@ -373,7 +373,7 @@ const messages = {
373 373 ...roomRenovationManageMessages.zh,
374 374 ...feeConfigManageMessages.zh,
375 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 625 if (to.path.startsWith('/img/') || to.path.startsWith('/static/')) {
626 626 return next(); // 直接放行
627 627 }
  628 + if (to.path.endsWith('.xlsx')) {
  629 + return next(); // 直接放行
  630 + }
628 631 const token = localStorage.getItem('token')
629 632 if (to.path !== '/views/user/login' && !token) {
630 633 next('/views/user/login')
... ...
src/views/community/roomRenovationManageList.vue
... ... @@ -270,7 +270,7 @@ export default {
270 270 renovationTime: '',
271 271 startTime: '',
272 272 endTime: '',
273   - communityId: this.$store.getters.communityId
  273 + communityId: this.getCommunityId()
274 274 }
275 275 this.page.current = 1
276 276 this.listRoomRenovation()
... ...
src/views/mall/junkRequirementManageList.vue
... ... @@ -135,7 +135,7 @@ export default {
135 135 page: page,
136 136 row: size,
137 137 ...this.junkRequirementManageInfo.conditions,
138   - communityId: this.$store.getters.communityId
  138 + communityId: this.getCommunityId()
139 139 }
140 140 const { data, total } = await listJunkRequirements(params)
141 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 0 \ No newline at end of file
src/views/room/roomLang.js
... ... @@ -44,7 +44,321 @@ export const messages = {
44 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 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 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 363 zh: {
50 364 roomList: {
... ... @@ -91,6 +405,320 @@ export const messages = {
91 405 roomStatusDesc2: '1、未销售表示 房屋和业主之间还没有任何关系,所以修改时状态不能手工修改 需要业主入住房屋的方式 将未销售改为已入住',
92 406 roomStatusDesc3: '2、未入住 已交房 已装修 已入住 状态表示业主和房屋之间已经有关系 可以相互修改,主要作用为在房屋创建费用时根据不同的状态去创建不同的费用',
93 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 725 \ No newline at end of file
... ...
src/views/room/roomList.vue
... ... @@ -4,19 +4,22 @@
4 4 <el-button type="primary" size="small" @click="openAddRoomFloorModal">
5 5 <i class="el-icon-plus"></i>{{ $t('roomList.addBuilding') }}
6 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 8 <i class="el-icon-edit"></i>{{ $t('roomList.editBuilding') }}
9 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 11 <i class="el-icon-close"></i>{{ $t('roomList.deleteBuilding') }}
12 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 15 <i class="el-icon-plus"></i>{{ $t('roomList.addUnit') }}
15 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 19 <i class="el-icon-edit"></i>{{ $t('roomList.editUnit') }}
18 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 23 <i class="el-icon-close"></i>{{ $t('roomList.deleteUnit') }}
21 24 </el-button>
22 25 <el-button type="primary" size="small" class="margin-left-sm" @click="openAddRoom"
... ... @@ -36,8 +39,7 @@
36 39  
37 40 <el-row class="flex justify-start">
38 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 43 </el-col>
42 44 <el-col :span="20" class="margin-top-xs margin-left-sm">
43 45 <el-card class="ibox">
... ... @@ -266,16 +268,18 @@
266 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 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 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 283 <owner-rooms ref="ownerRooms" />
280 284 <owner-members ref="ownerMembers" />
281 285 <owner-cars ref="ownerCars" />
... ... @@ -289,7 +293,7 @@
289 293  
290 294 <script>
291 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 297 import FloorUnitTree from '@/components/room/floorUnitTree'
294 298 import SearchFloor from '@/components/room/searchFloor'
295 299 import EditRoom from '@/components/room/editRoom'
... ... @@ -310,6 +314,9 @@ import OwnerOweFees from &#39;@/components/owner/ownerOweFees&#39;
310 314 import RoomOweFees from '@/components/room/roomOweFees'
311 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 320 const DEFAULT_PAGE = 1
314 321 const DEFAULT_ROW = 10
315 322  
... ... @@ -371,10 +378,10 @@ export default {
371 378 },
372 379 mounted() {
373 380 this.initData()
374   - // window.addEventListener('resize', this.handleResize)
  381 + // window.addEventListener('resize', this.handleResize)
375 382 },
376 383 beforeDestroy() {
377   - // window.removeEventListener('resize', this.handleResize)
  384 + // window.removeEventListener('resize', this.handleResize)
378 385 },
379 386 methods: {
380 387 async initData() {
... ... @@ -395,7 +402,9 @@ export default {
395 402 console.error('初始化数据失败:', error)
396 403 }
397 404 },
398   -
  405 + handleRefreshRoom(){
  406 + this.listRoom(this.roomInfo.conditions.page,this.roomInfo.conditions.row)
  407 + },
399 408 async listRoom(page, row) {
400 409 this.roomInfo.conditions.page = page
401 410 this.roomInfo.conditions.row = row
... ... @@ -455,8 +464,12 @@ export default {
455 464  
456 465 async getColumns(rooms, callback) {
457 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 473 .filter(item => item.listShow === 'Y')
461 474 .map(item => item.specName)
462 475 callback()
... ... @@ -465,16 +478,8 @@ export default {
465 478 }
466 479 },
467 480  
468   - handleSwitchFloor(data) {
  481 + switchFloorUnit(data) {
469 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 483 this.roomInfo.conditions.unitId = data.unitId
479 484 this.roomInfo.conditions.flag = 1
480 485 this.roomInfo.isAll = 'N'
... ... @@ -490,18 +495,14 @@ export default {
490 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 499 handleResize() {
502 500 this.$forceUpdate()
503 501 },
504 502  
  503 + floorUnitTree(param) {
  504 + this.$refs.floorUnitTree.refreshTree(param)
  505 + },
505 506 // 按钮操作相关方法
506 507 openAddRoom() {
507 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 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 0 \ No newline at end of file
src/views/staff/aStaffDetailList.vue
... ... @@ -141,7 +141,7 @@ export default {
141 141 page: 1
142 142 })
143 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 145 } catch (error) {
146 146 this.$message.error(this.$t('aStaffDetailList.loadError'))
147 147 }
... ...
vue.config.js
... ... @@ -22,7 +22,8 @@ module.exports = {
22 22 historyApiFallback: {
23 23 disableDotRule: true,
24 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 }
... ...