From f8a053e12394a2875e202529f8095c53dcc7322c Mon Sep 17 00:00:00 2001 From: wuxw <928255095@qq.com> Date: Tue, 8 Jul 2025 00:49:12 +0800 Subject: [PATCH] 支持交房和退房功能 --- src/api/room/handoverApi.js | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/api/room/ownerExitRoomApi.js | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/room/searchOwner.vue | 189 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/room/selectFeeConfig.vue | 207 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/i18n/communityI18n.js | 6 ++++++ src/router/communityRouter.js | 10 ++++++++++ src/views/room/handoverLang.js | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/room/handoverList.vue | 242 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/room/ownerExitRoomLang.js | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/room/ownerExitRoomList.vue | 236 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/simplify/simplifyAcceptanceList.vue | 4 ++-- 11 files changed, 1315 insertions(+), 2 deletions(-) create mode 100644 src/api/room/handoverApi.js create mode 100644 src/api/room/ownerExitRoomApi.js create mode 100644 src/components/room/searchOwner.vue create mode 100644 src/components/room/selectFeeConfig.vue create mode 100644 src/views/room/handoverLang.js create mode 100644 src/views/room/handoverList.vue create mode 100644 src/views/room/ownerExitRoomLang.js create mode 100644 src/views/room/ownerExitRoomList.vue diff --git a/src/api/room/handoverApi.js b/src/api/room/handoverApi.js new file mode 100644 index 0000000..873768c --- /dev/null +++ b/src/api/room/handoverApi.js @@ -0,0 +1,74 @@ +import request from '@/utils/request' + +// 保存交接信息 +export function saveHandover(data) { + return new Promise((resolve, reject) => { + request({ + url: '/owner.saveHandover', + method: 'post', + data + }).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 + resolve({ + data: res.data, + total: res.total + }) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询房屋列表 +export function queryRooms(params) { + return new Promise((resolve, reject) => { + request({ + url: '/room.queryRooms', + method: 'get', + params + }).then(response => { + const res = response.data + resolve({ + data: res, + total: res.total + }) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询费用配置列表 +export function listFeeConfigs(params) { + return new Promise((resolve, reject) => { + request({ + url: '/feeConfig.listFeeConfigs', + method: 'get', + params + }).then(response => { + const res = response.data + resolve({ + data: res, + total: res.total + }) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/room/ownerExitRoomApi.js b/src/api/room/ownerExitRoomApi.js new file mode 100644 index 0000000..5e1b705 --- /dev/null +++ b/src/api/room/ownerExitRoomApi.js @@ -0,0 +1,105 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 业主退房 +export function ownerExitRoom(data) { + return new Promise((resolve, reject) => { + request({ + url: '/owner.ownerExitRoom', + method: 'post', + data, + headers: { + 'Content-Type': 'application/json' + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询业主房屋 +export function queryRoomsByOwner(params) { + return new Promise((resolve, reject) => { + const defaultParams = { + communityId: getCommunityId(), + page: 1, + row: 100 + } + request({ + url: '/room.queryRoomsByOwner', + method: 'get', + params: { ...defaultParams, ...params } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询业主列表 +export function queryOwners(params) { + return new Promise((resolve, reject) => { + const defaultParams = { + communityId: getCommunityId(), + page: 1, + row: 10 + } + request({ + url: '/owner.queryOwners', + method: 'get', + params: { ...defaultParams, ...params } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询费用列表 +export function listFee(params) { + return new Promise((resolve, reject) => { + const defaultParams = { + communityId: getCommunityId(), + page: 1, + row: 500 + } + request({ + url: '/fee.listFee', + method: 'get', + params: { ...defaultParams, ...params } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 查询费用配置 +export function listFeeConfigs(params) { + return new Promise((resolve, reject) => { + const defaultParams = { + communityId: getCommunityId(), + page: 1, + row: 500 + } + request({ + url: '/feeConfig.listFeeConfigs', + method: 'get', + params: { ...defaultParams, ...params } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/components/room/searchOwner.vue b/src/components/room/searchOwner.vue new file mode 100644 index 0000000..6b992a7 --- /dev/null +++ b/src/components/room/searchOwner.vue @@ -0,0 +1,189 @@ + + + + + \ No newline at end of file diff --git a/src/components/room/selectFeeConfig.vue b/src/components/room/selectFeeConfig.vue new file mode 100644 index 0000000..6d07760 --- /dev/null +++ b/src/components/room/selectFeeConfig.vue @@ -0,0 +1,207 @@ + + + + + \ No newline at end of file diff --git a/src/i18n/communityI18n.js b/src/i18n/communityI18n.js index 88343c8..4ad4532 100644 --- a/src/i18n/communityI18n.js +++ b/src/i18n/communityI18n.js @@ -5,6 +5,8 @@ import { messages as listPropertyRightRegistrationDetailMessages } from '../view import { messages as communityPublicityManageMessages } from '../views/community/communityPublicityManageLang' import { messages as addCommunityPublicityMessages } from '../views/community/addCommunityPublicityLang' import { messages as editCommunityPublicityMessages } from '../views/community/editCommunityPublicityLang' +import { messages as handoverMessages } from '../views/room/handoverLang' +import { messages as ownerExitRoomMessages } from '../views/room/ownerExitRoomLang' export const messages = { en: { ...roomStructureMessages.en, @@ -14,6 +16,8 @@ export const messages = { ...communityPublicityManageMessages.en, ...addCommunityPublicityMessages.en, ...editCommunityPublicityMessages.en, + ...handoverMessages.en, + ...ownerExitRoomMessages.en, }, zh: { ...roomStructureMessages.zh, @@ -23,5 +27,7 @@ export const messages = { ...communityPublicityManageMessages.zh, ...addCommunityPublicityMessages.zh, ...editCommunityPublicityMessages.zh, + ...handoverMessages.zh, + ...ownerExitRoomMessages.zh, } } \ No newline at end of file diff --git a/src/router/communityRouter.js b/src/router/communityRouter.js index 4c31990..e7bf0c2 100644 --- a/src/router/communityRouter.js +++ b/src/router/communityRouter.js @@ -34,4 +34,14 @@ export default [ name: '/views/community/editCommunityPublicity', component: () => import('@/views/community/editCommunityPublicityList.vue') }, + { + path: '/views/room/handover', + name: '/views/room/handover', + component: () => import('@/views/room/handoverList.vue') + }, + { + path: '/views/room/ownerExitRoom', + name: '/views/room/ownerExitRoom', + component: () => import('@/views/room/ownerExitRoomList.vue') + }, ] \ No newline at end of file diff --git a/src/views/room/handoverLang.js b/src/views/room/handoverLang.js new file mode 100644 index 0000000..c76bc4c --- /dev/null +++ b/src/views/room/handoverLang.js @@ -0,0 +1,140 @@ +export const messages = { + en: { + handover: { + ownerInfo: 'Owner Information', + select: 'Select', + back: 'Back', + name: 'Name', + namePlaceholder: 'Required, please enter name', + gender: 'Gender', + genderPlaceholder: 'Required, please select gender', + male: 'Male', + female: 'Female', + age: 'Age', + agePlaceholder: 'Optional, please enter age', + idCard: 'ID Card', + idCardPlaceholder: 'Optional, please enter ID card', + phone: 'Phone', + phonePlaceholder: 'Required, please enter phone number', + remark: 'Remark', + remarkPlaceholder: 'Optional, please enter remark', + houseInfo: 'House Information', + selectHouse: 'Select House', + createFee: 'Create Fee', + house: 'House', + area: 'Area', + squareMeter: 'Square Meter', + houseStatus: 'House Status', + operation: 'Operation', + delete: 'Delete', + feeInfo: 'Fee Information', + feeItem: 'Fee Item', + startTime: 'Start Time', + endTime: 'End Time', + submit: 'Submit', + submitSuccess: 'Submit successfully', + submitError: 'Submit failed', + houseNotUnsold: 'The house is not unsold, please return it first', + fetchRoomError: 'Failed to get room information' + }, + searchOwner: { + title: 'Select Owner', + roomPlaceholder: 'Enter house number building-unit-house', + namePlaceholder: 'Enter owner name', + memberId: 'Owner ID', + name: 'Name', + personType: 'Person Type', + personRole: 'Person Role', + idCard: 'ID Card', + phone: 'Phone', + fetchError: 'Failed to get owner list' + }, + selectFeeConfig: { + title: 'Create Fee', + feeType: 'Fee Type', + feeTypePlaceholder: 'Required, please select fee type', + feeItem: 'Fee Item', + feeItemPlaceholder: 'Required, please select fee item', + amount: 'Amount', + amountPlaceholder: 'Required, please enter amount', + startTime: 'Start Time', + startTimePlaceholder: 'Required, please select start time', + endTime: 'End Time', + endTimePlaceholder: 'Required, please select end time', + feeTypeRequired: 'Fee type is required', + feeItemRequired: 'Fee item is required', + startTimeRequired: 'Start time is required', + fetchFeeTypeError: 'Failed to get fee types', + fetchFeeConfigError: 'Failed to get fee configs' + } + }, + zh: { + handover: { + ownerInfo: '业主信息', + select: '选择', + back: '返回', + name: '姓名', + namePlaceholder: '必填,请填写姓名', + gender: '性别', + genderPlaceholder: '必填,请选择性别', + male: '男', + female: '女', + age: '年龄', + agePlaceholder: '可填,请填写年龄', + idCard: '身份证', + idCardPlaceholder: '可选,请填写身份证', + phone: '手机', + phonePlaceholder: '必填,请填写联系方式', + remark: '备注', + remarkPlaceholder: '可填,请填写备注', + houseInfo: '房屋信息', + selectHouse: '选择房屋', + createFee: '创建费用', + house: '房屋', + area: '建筑面积', + squareMeter: '平方米', + houseStatus: '房屋状态', + operation: '操作', + delete: '删除', + feeInfo: '费用信息', + feeItem: '费用项目', + startTime: '开始时间', + endTime: '结束时间', + submit: '提交', + submitSuccess: '提交成功', + submitError: '提交失败', + houseNotUnsold: '房屋不是未销售状态,请先退房', + fetchRoomError: '获取房屋信息失败' + }, + searchOwner: { + title: '选择业主', + roomPlaceholder: '输入房屋编号楼栋-单元-房屋', + namePlaceholder: '输入业主名称', + memberId: '业主编号', + name: '名称', + personType: '人员类型', + personRole: '人员角色', + idCard: '证件号', + phone: '联系方式', + fetchError: '获取业主列表失败' + }, + selectFeeConfig: { + title: '创建费用', + feeType: '费用类型', + feeTypePlaceholder: '必填,请选择费用类型', + feeItem: '收费项目', + feeItemPlaceholder: '必填,请选择收费项目', + amount: '收费金额', + amountPlaceholder: '必填,请填写收费金额', + startTime: '计费起始时间', + startTimePlaceholder: '必填,请填写计费起始时间', + endTime: '计费结束时间', + endTimePlaceholder: '必填,请填写计费结束时间', + feeTypeRequired: '费用类型不能为空', + feeItemRequired: '收费项目不能为空', + startTimeRequired: '计费起始时间不能为空', + fetchFeeTypeError: '获取费用类型失败', + fetchFeeConfigError: '获取收费项目失败' + } + } +} \ No newline at end of file diff --git a/src/views/room/handoverList.vue b/src/views/room/handoverList.vue new file mode 100644 index 0000000..15b0b3f --- /dev/null +++ b/src/views/room/handoverList.vue @@ -0,0 +1,242 @@ + + + + + \ No newline at end of file diff --git a/src/views/room/ownerExitRoomLang.js b/src/views/room/ownerExitRoomLang.js new file mode 100644 index 0000000..8668c61 --- /dev/null +++ b/src/views/room/ownerExitRoomLang.js @@ -0,0 +1,104 @@ +export const messages = { + en: { + ownerExitRoom: { + ownerInfo: 'Owner Information', + name: 'Name', + idCard: 'ID Card', + phone: 'Phone', + ownerRoom: 'Owner Rooms', + room: 'Room', + builtUpArea: 'Built-up Area', + squareMeter: 'Square Meter', + feeInfo: 'Fee Information', + feeItem: 'Fee Item', + arrears: 'Arrears', + startTime: 'Start Time', + endTime: 'End Time', + feeStatus: 'Fee Status', + validate: { + ownerRequired: 'Owner is required', + roomRequired: 'Please select at least one room', + unpaidFee: 'There are unpaid fees, please handle them first' + } + }, + searchOwner: { + title: 'Select Owner', + roomPlaceholder: 'Enter room number (Building-Unit-Room)', + namePlaceholder: 'Enter owner name', + memberId: 'Owner ID', + name: 'Name', + personType: 'Person Type', + personRole: 'Person Role', + idCard: 'ID Card', + contact: 'Contact' + }, + selectFeeConfig: { + title: 'Create Fee', + feeType: 'Fee Type', + feeItem: 'Fee Item', + amount: 'Amount', + startTime: 'Start Time', + endTime: 'End Time', + amountPlaceholder: 'Required, please enter amount', + startTimePlaceholder: 'Required, please enter start time', + endTimePlaceholder: 'Required, please enter end time', + validate: { + feeTypeRequired: 'Fee type is required', + feeItemRequired: 'Fee item is required', + startTimeRequired: 'Start time is required', + amountRequired: 'Amount is required' + } + } + }, + zh: { + ownerExitRoom: { + ownerInfo: '业主信息', + name: '姓名', + idCard: '身份证', + phone: '手机', + ownerRoom: '业主房屋', + room: '房屋', + builtUpArea: '建筑面积', + squareMeter: '平方米', + feeInfo: '费用信息', + feeItem: '费用项目', + arrears: '欠费', + startTime: '开始时间', + endTime: '结束时间', + feeStatus: '费用状态', + validate: { + ownerRequired: '业主不能为空', + roomRequired: '请至少选择一间房屋', + unpaidFee: '房屋还存在费用,请先在业务受理处理费用' + } + }, + searchOwner: { + title: '选择业主', + roomPlaceholder: '输入房屋编号(楼栋-单元-房屋)', + namePlaceholder: '输入业主名称', + memberId: '业主编号', + name: '名称', + personType: '人员类型', + personRole: '人员角色', + idCard: '证件号', + contact: '联系方式' + }, + selectFeeConfig: { + title: '创建费用', + feeType: '费用类型', + feeItem: '收费项目', + amount: '收费金额', + startTime: '计费起始时间', + endTime: '计费结束时间', + amountPlaceholder: '必填,请填写收费金额', + startTimePlaceholder: '必填,请填写计费起始时间', + endTimePlaceholder: '必填,请填写计费结束时间', + validate: { + feeTypeRequired: '费用类型不能为空', + feeItemRequired: '费用项目不能为空', + startTimeRequired: '计费起始时间不能为空', + amountRequired: '收费金额不能为空' + } + } + } +} \ No newline at end of file diff --git a/src/views/room/ownerExitRoomList.vue b/src/views/room/ownerExitRoomList.vue new file mode 100644 index 0000000..445bb26 --- /dev/null +++ b/src/views/room/ownerExitRoomList.vue @@ -0,0 +1,236 @@ + + + + + \ No newline at end of file diff --git a/src/views/simplify/simplifyAcceptanceList.vue b/src/views/simplify/simplifyAcceptanceList.vue index bc1249a..acc0290 100644 --- a/src/views/simplify/simplifyAcceptanceList.vue +++ b/src/views/simplify/simplifyAcceptanceList.vue @@ -577,10 +577,10 @@ export default { this.$refs.roomTree.open() }, _handover() { - this.$router.push('/pages/property/handover') + this.$router.push('/views/room/handover') }, _simplifyOwnerExitRoom() { - this.$router.push('/pages/property/ownerExitRoom') + this.$router.push('/views/room/ownerExitRoom') }, _simplifyInputOwner() { if (this.simplifyAcceptanceInfo.searchType != "2" && -- libgit2 0.21.4