From 84aec3bc3019434c0316ca9ef95727dc1340fb08 Mon Sep 17 00:00:00 2001 From: wuxw <928255095@qq.com> Date: Sun, 8 Jun 2025 01:14:19 +0800 Subject: [PATCH] 彻底开发完成 房屋管理页面 --- src/api/owner/deleteOwnerRoomApi.js | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/api/owner/roomBindOwnerApi.js | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/api/owner/showOwnerRoomApi.js | 37 +++++++++++++++++++++++++++++++++++++ src/api/room/importOwnerRoomApi.js | 2 +- src/components/owner/ownerExitRoom.vue | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/owner/showOwnerRoom.vue | 256 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/owner/viewOwnerInfo.vue | 249 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/room/importOwnerRoom.vue | 24 ++++++++++-------------- src/i18n/index.js | 7 ++++++- src/router/index.js | 14 ++++++++++++-- src/views/owner/deleteOwnerRoomLang.js | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/owner/deleteOwnerRoomList.vue | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/owner/roomBindOwnerLang.js | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/owner/roomBindOwnerList.vue | 195 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/room/roomList.vue | 18 +++++++++++++----- 15 files changed, 1183 insertions(+), 23 deletions(-) create mode 100644 src/api/owner/deleteOwnerRoomApi.js create mode 100644 src/api/owner/roomBindOwnerApi.js create mode 100644 src/api/owner/showOwnerRoomApi.js create mode 100644 src/components/owner/ownerExitRoom.vue create mode 100644 src/components/owner/showOwnerRoom.vue create mode 100644 src/components/owner/viewOwnerInfo.vue create mode 100644 src/views/owner/deleteOwnerRoomLang.js create mode 100644 src/views/owner/deleteOwnerRoomList.vue create mode 100644 src/views/owner/roomBindOwnerLang.js create mode 100644 src/views/owner/roomBindOwnerList.vue diff --git a/src/api/owner/deleteOwnerRoomApi.js b/src/api/owner/deleteOwnerRoomApi.js new file mode 100644 index 0000000..973ed67 --- /dev/null +++ b/src/api/owner/deleteOwnerRoomApi.js @@ -0,0 +1,55 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 查询业主信息 +export function queryOwners(params) { + return new Promise((resolve, reject) => { + // 确保包含社区ID + if (!params.communityId) { + params.communityId = getCommunityId() + } + + request({ + url: '/owner.queryOwners', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data, + total: res.records + }) + } else { + reject(new Error(res.msg || '查询业主信息失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 删除业主房屋 +export function deleteOwnerRoom(data) { + return new Promise((resolve, reject) => { + // 确保包含社区ID + if (!data.communityId) { + data.communityId = getCommunityId() + } + + request({ + url: '/owner.deleteOwnerRoom', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '删除业主房屋失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/owner/roomBindOwnerApi.js b/src/api/owner/roomBindOwnerApi.js new file mode 100644 index 0000000..9b7d919 --- /dev/null +++ b/src/api/owner/roomBindOwnerApi.js @@ -0,0 +1,57 @@ +import request from '@/utils/request' + +// 查询房屋列表 +export function queryRooms(params) { + return new Promise((resolve, reject) => { + request({ + url: '/room.queryRooms', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询业主列表 +export function queryOwners(params) { + return new Promise((resolve, reject) => { + request({ + url: '/owner.queryOwners', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '获取业主列表失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 房屋交房 +export function sellRoom(data) { + return new Promise((resolve, reject) => { + request({ + url: '/room.sellRoom', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '房屋交房失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/owner/showOwnerRoomApi.js b/src/api/owner/showOwnerRoomApi.js new file mode 100644 index 0000000..1d4eb0a --- /dev/null +++ b/src/api/owner/showOwnerRoomApi.js @@ -0,0 +1,37 @@ +import request from '@/utils/request' + +// 查询业主房间信息 +export function queryRoomsByOwner(params) { + return new Promise((resolve, reject) => { + request({ + url: '/room.queryRoomsByOwner', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 业主退房 +export function exitRoom(data) { + return new Promise((resolve, reject) => { + request({ + url: '/room.exitRoom', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '退房操作失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/room/importOwnerRoomApi.js b/src/api/room/importOwnerRoomApi.js index 80ea7d7..bd486a2 100644 --- a/src/api/room/importOwnerRoomApi.js +++ b/src/api/room/importOwnerRoomApi.js @@ -3,7 +3,7 @@ import request from '@/utils/request' export function importOwnerRoom(formData) { return new Promise((resolve, reject) => { request({ - url: '/assetImport/importData', + url: '/callComponent/upload/assetImport/importData', method: 'post', data: formData, headers: { diff --git a/src/components/owner/ownerExitRoom.vue b/src/components/owner/ownerExitRoom.vue new file mode 100644 index 0000000..941bfb9 --- /dev/null +++ b/src/components/owner/ownerExitRoom.vue @@ -0,0 +1,77 @@ + + + + + {{ $t('ownerExitRoom.confirmExit') }} + {{ $t('ownerExitRoom.confirmExitTip') }} + + + + + + + + + \ No newline at end of file diff --git a/src/components/owner/showOwnerRoom.vue b/src/components/owner/showOwnerRoom.vue new file mode 100644 index 0000000..24fd53f --- /dev/null +++ b/src/components/owner/showOwnerRoom.vue @@ -0,0 +1,256 @@ + + + + + + + {{ $t('showOwnerRoom.info') }} + + + {{ $t('showOwnerRoom.propertyFee') }} + + + {{ $t('showOwnerRoom.exitRoom') }} + + + + + + + + {{ $t('showOwnerRoom.shopNum') }}: + {{ roomInfo.floorNum }}-{{ roomInfo.roomNum }} + + + + + {{ $t('showOwnerRoom.roomNum') }}: + {{ roomInfo.floorNum }}-{{ roomInfo.unitNum }}-{{ roomInfo.roomNum }} + + + + + + {{ $t('showOwnerRoom.floor') }}: + {{ roomInfo.layer }}{{ $t('showOwnerRoom.layer') }} + + + + + + {{ $t('showOwnerRoom.shopId') }}: + {{ roomInfo.roomId }} + + + + + {{ $t('showOwnerRoom.roomId') }}: + {{ roomInfo.roomId }} + + + + + + + + {{ $t('showOwnerRoom.builtUpArea') }}: + {{ roomInfo.builtUpArea }}{{ $t('showOwnerRoom.squareMeters') }} + + + + + + {{ $t('showOwnerRoom.apartmentLayout') }}: + {{ roomInfo.apartment }} + + + + + + {{ $t('showOwnerRoom.roomCount') }}: + {{ roomInfo.section }} + + + + + + + + + {{ item.specName }}: + {{ item.valueName }} + + + + + + {{ roomInfo.roomAttrDto[attrIndex + 1].specName }}: + {{ roomInfo.roomAttrDto[attrIndex + 1].valueName }} + + + + + + {{ roomInfo.roomAttrDto[attrIndex + 2].specName }}: + {{ roomInfo.roomAttrDto[attrIndex + 2].valueName }} + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/owner/viewOwnerInfo.vue b/src/components/owner/viewOwnerInfo.vue new file mode 100644 index 0000000..f1f841c --- /dev/null +++ b/src/components/owner/viewOwnerInfo.vue @@ -0,0 +1,249 @@ + + + + {{ $t('viewOwnerInfo.title') }} + + + + {{ $t('common.back') }} + + + {{ $t('viewOwnerInfo.chooseOwner') }} + + + + + + + + + + + + + + + {{ $t('viewOwnerInfo.ownerId') }}: + {{ ownerId }} + + + + + {{ $t('viewOwnerInfo.name') }}: + {{ name }} + + + + + {{ $t('viewOwnerInfo.sex') }}: + {{ sex | formatSex }} + + + + + + + + {{ $t('viewOwnerInfo.age') }}: + {{ age }} + + + + + {{ $t('viewOwnerInfo.idCard') }}: + {{ idCard }} + + + + + {{ $t('viewOwnerInfo.link') }}: + {{ link }} + + + + + + + + {{ $t('viewOwnerInfo.userName') }}: + {{ userName }} + + + + + {{ $t('viewOwnerInfo.remark') }}: + {{ remark }} + + + + + + + + + {{ item.specName }}: + {{ item.valueName }} + + + + + {{ attrs[index + 1].specName }}: + {{ attrs[index + 1].valueName }} + + + + + {{ attrs[index + 2].specName }}: + {{ attrs[index + 2].valueName }} + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/room/importOwnerRoom.vue b/src/components/room/importOwnerRoom.vue index 833ccc1..3e3fc6c 100644 --- a/src/components/room/importOwnerRoom.vue +++ b/src/components/room/importOwnerRoom.vue @@ -2,7 +2,8 @@ - + {{ $t('room.importOwnerRoom.clickUpload') }} {{ fileName || $t('room.importOwnerRoom.requiredFile') }} @@ -92,19 +93,14 @@ export default { const response = await importOwnerRoom(formData) - if (response.code === 0) { - this.$message.success(this.$t('room.importOwnerRoom.importSuccess')) - this.handleClose() - this.$router.push({ - path: '/property/assetImportLogDetail', - query: { - logId: response.data.logId, - logType: 'importRoomOwner' - } - }) - } else { - this.$message.error(response.msg || this.$t('room.importOwnerRoom.importFailed')) - } + this.handleClose() + this.$router.push({ + path: '/property/assetImportLogDetail', + query: { + logId: response.data.logId, + logType: 'importRoomOwner' + } + }) } catch (error) { this.$message.error(this.$t('room.importOwnerRoom.importError')) } diff --git a/src/i18n/index.js b/src/i18n/index.js index 85fcc5d..6c11abb 100644 --- a/src/i18n/index.js +++ b/src/i18n/index.js @@ -124,7 +124,8 @@ import { messages as feeConfigManageMessages } from '../views/fee/feeConfigManag import { messages as payFeeConfigDiscountManageMessages } from '../views/fee/payFeeConfigDiscountManageLang' import { messages as roomMessages } from '../views/room/roomLang.js' import { messages as addRoomViewMessages } from '../views/room/addRoomViewLang' - +import { messages as roomBindOwnerMessages } from '../views/owner/roomBindOwnerLang' +import { messages as deleteOwnerRoomMessages } from '../views/owner/deleteOwnerRoomLang' Vue.use(VueI18n) @@ -253,6 +254,8 @@ const messages = { ...payFeeConfigDiscountManageMessages.en, ...roomMessages.en, ...addRoomViewMessages.en, + ...roomBindOwnerMessages.en, + ...deleteOwnerRoomMessages.en, }, zh: { ...loginMessages.zh, @@ -377,6 +380,8 @@ const messages = { ...payFeeConfigDiscountManageMessages.zh, ...roomMessages.zh, ...addRoomViewMessages.zh, + ...roomBindOwnerMessages.zh, + ...deleteOwnerRoomMessages.zh, } } diff --git a/src/router/index.js b/src/router/index.js index 293d2b9..2f98d6f 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -602,10 +602,20 @@ const routes = [ component: () => import('@/views/room/roomList.vue') }, { - path:'/views/room/addRoomView', - name:'/views/room/addRoomView', + path: '/views/room/addRoomView', + name: '/views/room/addRoomView', component: () => import('@/views/room/addRoomViewList.vue') + }, + { + path:'/views/owner/roomBindOwner', + name:'/views/owner/roomBindOwner', + component: () => import('@/views/owner/roomBindOwnerList.vue') }, + { + path:'/views/owner/deleteOwnerRoom', + name:'/views/owner/deleteOwnerRoom', + component: () => import('@/views/owner/deleteOwnerRoomList.vue') + }, // 其他子路由可以在这里添加 ] }, diff --git a/src/views/owner/deleteOwnerRoomLang.js b/src/views/owner/deleteOwnerRoomLang.js new file mode 100644 index 0000000..525dba5 --- /dev/null +++ b/src/views/owner/deleteOwnerRoomLang.js @@ -0,0 +1,100 @@ +export const messages = { + en: { + viewOwnerInfo: { + title: 'Owner Information', + ownerId: 'Owner ID', + name: 'Name', + sex: 'Gender', + age: 'Age', + idCard: 'ID Card', + link: 'Contact', + userName: 'Created By', + remark: 'Remark', + chooseOwner: 'Select Owner', + loadError: 'Failed to load owner information' + }, + searchOwner: { + title: 'Select Owner', + ownerId: 'Owner ID', + name: 'Name', + personType: 'Person Type', + personRole: 'Person Role', + idCard: 'ID Card', + link: 'Contact', + roomPlaceholder: 'Enter room number (building-unit-room)', + ownerPlaceholder: 'Enter owner name', + loadError: 'Failed to load owner list' + }, + showOwnerRoom: { + info: 'Room Information', + propertyFee: 'Property Fee', + exitRoom: 'I want to exit the room', + shopNum: 'Shop Number', + roomNum: 'Room Number', + floor: 'Floor', + shopId: 'Shop ID', + roomId: 'Room ID', + builtUpArea: 'Built-up Area', + squareMeters: 'Square Meters', + apartmentLayout: 'Apartment Layout', + roomCount: 'Number of Rooms', + layer: 'layer' + }, + ownerExitRoom: { + confirmOperation: 'Please confirm your operation', + confirmExit: 'Confirm to exit the room?', + confirmExitTip: 'After exiting, it can be sold again', + cancel: 'Cancel', + confirmExitBtn: 'Confirm Exit' + } + }, + zh: { + viewOwnerInfo: { + title: '业主信息', + ownerId: '业主ID', + name: '名称', + sex: '性别', + age: '年龄', + idCard: '身份证', + link: '联系方式', + userName: '创建员工', + remark: '备注', + chooseOwner: '选择业主', + loadError: '加载业主信息失败' + }, + searchOwner: { + title: '选择业主', + ownerId: '业主编号', + name: '名称', + personType: '人员类型', + personRole: '人员角色', + idCard: '证件号', + link: '联系方式', + roomPlaceholder: '输入房屋编号(楼栋-单元-房屋)', + ownerPlaceholder: '输入业主名称', + loadError: '加载业主列表失败' + }, + showOwnerRoom: { + info: '房屋信息', + propertyFee: '物业费', + exitRoom: '我要退房', + shopNum: '商铺编号', + roomNum: '房屋编号', + floor: '楼层', + shopId: '商铺ID', + roomId: '房屋ID', + builtUpArea: '建筑面积', + squareMeters: '平方米', + apartmentLayout: '户型', + roomCount: '房间数', + layer: '层' + }, + ownerExitRoom: { + confirmOperation: '请确认您的操作', + confirmExit: '确认是否退房?', + confirmExitTip: '退房后可以再次售卖', + cancel: '点错了', + confirmExitBtn: '确认退出' + } + } +} \ No newline at end of file diff --git a/src/views/owner/deleteOwnerRoomList.vue b/src/views/owner/deleteOwnerRoomList.vue new file mode 100644 index 0000000..18ddfa1 --- /dev/null +++ b/src/views/owner/deleteOwnerRoomList.vue @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/owner/roomBindOwnerLang.js b/src/views/owner/roomBindOwnerLang.js new file mode 100644 index 0000000..931a1ff --- /dev/null +++ b/src/views/owner/roomBindOwnerLang.js @@ -0,0 +1,64 @@ +export const messages = { + en: { + roomBindOwner: { + title: 'House Handover', + room: 'Room', + owner: 'Owner', + startTime: 'Start Time', + endTime: 'End Time', + roomPlaceholder: 'Required, please enter room name', + ownerPlaceholder: 'Required, please select owner', + startTimePlaceholder: 'Required, please enter start time', + endTimePlaceholder: 'Required, please enter end time', + selectOwner: 'Select Owner', + roomRequired: 'Room cannot be empty', + ownerRequired: 'Owner cannot be empty', + startTimeRequired: 'Start time cannot be empty', + endTimeRequired: 'End time cannot be empty', + timeError: 'End time must be greater than start time', + fetchRoomError: 'Failed to get room information' + }, + searchOwner: { + title: 'Select Owner', + roomPlaceholder: 'Enter room number (building-unit-room)', + ownerPlaceholder: 'Enter owner name', + memberId: 'Owner ID', + name: 'Name', + personType: 'Person Type', + personRole: 'Person Role', + idCard: 'ID Card', + contact: 'Contact' + } + }, + zh: { + roomBindOwner: { + title: '房屋交房', + room: '房屋', + owner: '业主', + startTime: '开始时间', + endTime: '结束时间', + roomPlaceholder: '必填,请填写房屋名称', + ownerPlaceholder: '必填,请选择业主', + startTimePlaceholder: '必填,请填写开始时间', + endTimePlaceholder: '必填,请填写结束时间', + selectOwner: '选择业主', + roomRequired: '房屋不能为空', + ownerRequired: '业主不能为空', + startTimeRequired: '开始时间不能为空', + endTimeRequired: '结束时间不能为空', + timeError: '结束时间必须大于开始时间', + fetchRoomError: '获取房屋信息失败' + }, + searchOwner: { + title: '选择业主', + roomPlaceholder: '输入房屋编号(楼栋-单元-房屋)', + ownerPlaceholder: '输入业主名称', + memberId: '业主编号', + name: '名称', + personType: '人员类型', + personRole: '人员角色', + idCard: '证件号', + contact: '联系方式' + } + } +} \ No newline at end of file diff --git a/src/views/owner/roomBindOwnerList.vue b/src/views/owner/roomBindOwnerList.vue new file mode 100644 index 0000000..da36285 --- /dev/null +++ b/src/views/owner/roomBindOwnerList.vue @@ -0,0 +1,195 @@ + + + + + {{ $t('roomBindOwner.title') }} + + + {{ $t('common.back') }} + + + + + + + + + + + + + + + + + + {{ $t('roomBindOwner.selectOwner') }} + + + + + + + + + + + + + + + + + + + + {{ $t('common.submit') }} + + + + + + + + + + + \ No newline at end of file diff --git a/src/views/room/roomList.vue b/src/views/room/roomList.vue index 315e1b4..6b30567 100644 --- a/src/views/room/roomList.vue +++ b/src/views/room/roomList.vue @@ -219,9 +219,9 @@ {{ scope.row.listValues[index] || '' }} - - + + @@ -661,11 +661,11 @@ export default { }, toRoomBindOwner(room) { - this.$router.push(`/pages/owner/roomBindOwner?roomId=${room.roomId}`) + this.$router.push(`/views/owner/roomBindOwner?roomId=${room.roomId}`) }, toRoomUnBindOwner(room) { - this.$router.push(`/pages/property/deleteOwnerRoom?ownerId=${room.ownerId}`) + this.$router.push(`/views/owner/deleteOwnerRoom?ownerId=${room.ownerId}`) }, showMarkdown() { @@ -759,4 +759,12 @@ export default { .border-radius { border-radius: 4px; } +/* 在全局样式文件中 */ +.el-button-group .el-button { + margin-right: 5px; + margin-bottom: 5px; +} +.el-button-group .el-button:last-child { + margin-right: 0; +} \ No newline at end of file -- libgit2 0.21.4
{{ $t('ownerExitRoom.confirmExit') }}
{{ $t('ownerExitRoom.confirmExitTip') }}