diff --git a/src/api/room/shopsApi.js b/src/api/room/shopsApi.js new file mode 100644 index 0000000..0aa20f3 --- /dev/null +++ b/src/api/room/shopsApi.js @@ -0,0 +1,109 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 查询商铺列表 +export function queryShops(params) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/room.queryRooms', + method: 'get', + params: { + ...params, + communityId, + roomType: '2020602' + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 添加商铺 +export function saveShops(data) { + return new Promise((resolve, reject) => { + data.communityId = getCommunityId() + request({ + url: '/room.saveShops', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || 'Failed to add shop')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 更新商铺 +export function updateShops(data) { + return new Promise((resolve, reject) => { + data.communityId = getCommunityId() + request({ + url: '/room.updateRoom', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || 'Failed to update shop')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 绑定业主商铺 +export function saveOwnerShops(data) { + return new Promise((resolve, reject) => { + data.communityId = getCommunityId() + request({ + url: '/room.saveOwnerShops', + method: 'post', + data + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || 'Failed to bind owner')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 删除商铺 +export function deleteShops(roomId) { + return new Promise((resolve, reject) => { + request({ + url: '/room.deleteRoom', + method: 'post', + data: { + roomId, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || 'Failed to delete shop')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/components/room/addShops.vue b/src/components/room/addShops.vue new file mode 100644 index 0000000..c9e00e6 --- /dev/null +++ b/src/components/room/addShops.vue @@ -0,0 +1,149 @@ + + + \ No newline at end of file diff --git a/src/components/room/bindOwnerShops.vue b/src/components/room/bindOwnerShops.vue new file mode 100644 index 0000000..6b691e8 --- /dev/null +++ b/src/components/room/bindOwnerShops.vue @@ -0,0 +1,174 @@ + + + \ No newline at end of file diff --git a/src/components/room/editShops.vue b/src/components/room/editShops.vue new file mode 100644 index 0000000..36b0497 --- /dev/null +++ b/src/components/room/editShops.vue @@ -0,0 +1,194 @@ + + + \ No newline at end of file diff --git a/src/components/room/floorSelect2.vue b/src/components/room/floorSelect2.vue new file mode 100644 index 0000000..b391862 --- /dev/null +++ b/src/components/room/floorSelect2.vue @@ -0,0 +1,44 @@ + + + \ No newline at end of file diff --git a/src/i18n/index.js b/src/i18n/index.js index 6c11abb..ae90d3c 100644 --- a/src/i18n/index.js +++ b/src/i18n/index.js @@ -126,6 +126,7 @@ 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' +import { messages as shopsMessages } from '../views/room/shopsLang' Vue.use(VueI18n) @@ -256,6 +257,7 @@ const messages = { ...addRoomViewMessages.en, ...roomBindOwnerMessages.en, ...deleteOwnerRoomMessages.en, + ...shopsMessages.en, }, zh: { ...loginMessages.zh, @@ -382,6 +384,7 @@ const messages = { ...addRoomViewMessages.zh, ...roomBindOwnerMessages.zh, ...deleteOwnerRoomMessages.zh, + ...shopsMessages.zh, } } diff --git a/src/router/index.js b/src/router/index.js index 2f98d6f..4ae20da 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -607,15 +607,20 @@ const routes = [ component: () => import('@/views/room/addRoomViewList.vue') }, { - path:'/views/owner/roomBindOwner', - name:'/views/owner/roomBindOwner', + 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') - }, + }, + { + path: '/views/owner/deleteOwnerRoom', + name: '/views/owner/deleteOwnerRoom', + component: () => import('@/views/owner/deleteOwnerRoomList.vue') + }, + { + path: '/pages/property/shops', + name: '/pages/property/shops', + component: () => import('@/views/room/shopsList.vue') + }, // 其他子路由可以在这里添加 ] }, diff --git a/src/views/room/shopsLang.js b/src/views/room/shopsLang.js new file mode 100644 index 0000000..711a4d1 --- /dev/null +++ b/src/views/room/shopsLang.js @@ -0,0 +1,124 @@ +export const messages = { + en: { + shops: { + queryCondition: 'Query Conditions', + shopInfo: 'Shop Information', + shopId: 'Shop ID', + shopIdPlaceholder: 'Please enter shop ID', + shopNumber: 'Shop Number', + shopNumberPlaceholder: 'Please enter shop number (format: Building-Shop)', + state: 'Status', + statePlaceholder: 'Please select status', + rented: 'Rented', + sold: 'Sold', + idle: 'Vacant', + addShop: 'Add Shop', + floor: 'Floor', + owner: 'Owner/Tenant', + contactNumber: 'Contact Number', + builtUpArea: 'Built-up Area', + roomArea: 'Indoor Area', + startTime: 'Start Lease Time', + endTime: 'End Lease Time', + rent: 'Rent', + feeCoefficient: 'Fee Coefficient', + operation: 'Operation', + rentAction: 'Rent', + sellAction: 'Sell', + unbind: 'Unbind', + edit: 'Edit', + delete: 'Delete', + squareMeter: 'm²', + layerUnit: 'F', + confirmDelete: 'Confirm Delete', + deleteTip: 'Deleting the shop will delete associated fees and payment records, and automatically unbind the owner!', + cancel: 'Cancel', + confirm: 'Confirm', + save: 'Save', + building: 'Building', + tenantPhone: 'Tenant Phone', + tenantName: 'Tenant Name', + leaseStart: 'Lease Start Date', + leaseEnd: 'Lease End Date', + remark: 'Remark', + shopFloor: 'Shop Floor', + feeCoefficientPlaceholder: 'Please enter fee coefficient', + builtUpAreaPlaceholder: 'Please enter built-up area', + roomAreaPlaceholder: 'Please enter indoor area', + rentPlaceholder: 'Please enter rent amount', + shopNumberRequired: 'Shop number is required', + floorRequired: 'Shop floor is required', + buildingRequired: 'Building is required', + rentRequired: 'Rent is required', + builtUpAreaRequired: 'Built-up area is required', + roomAreaRequired: 'Indoor area is required', + feeCoefficientRequired: 'Fee coefficient is required', + tenantPhoneRequired: 'Tenant phone is required', + tenantNameRequired: 'Tenant name is required', + leaseStartRequired: 'Lease start date is required', + leaseEndRequired: 'Lease end date is required', + phoneFormatError: 'Invalid phone format' + } + }, + zh: { + shops: { + queryCondition: '查询条件', + shopInfo: '商铺信息', + shopId: '商铺ID', + shopIdPlaceholder: '请填写商铺ID', + shopNumber: '商铺编号', + shopNumberPlaceholder: '请填写商铺编号(格式:楼栋-商铺)', + state: '状态', + statePlaceholder: '请选择状态', + rented: '已出租', + sold: '已出售', + idle: '空闲', + addShop: '添加商铺', + floor: '楼层', + owner: '业主/租方', + contactNumber: '联系电话', + builtUpArea: '建筑面积', + roomArea: '室内面积', + startTime: '起租时间', + endTime: '截租时间', + rent: '租金', + feeCoefficient: '算费系数', + operation: '操作', + rentAction: '出租', + sellAction: '出售', + unbind: '解绑', + edit: '修改', + delete: '删除', + squareMeter: '平方米', + layerUnit: '层', + confirmDelete: '确认删除', + deleteTip: '确认是否删除!删除房屋会关联删除房屋下的费用以及缴费记录,并且自动解绑业主!', + cancel: '取消', + confirm: '确认', + save: '保存', + building: '楼栋', + tenantPhone: '租户手机号', + tenantName: '租户姓名', + leaseStart: '起租时间', + leaseEnd: '截租时间', + remark: '备注', + shopFloor: '商铺楼层', + feeCoefficientPlaceholder: '请填写算费系数', + builtUpAreaPlaceholder: '请填写建筑面积', + roomAreaPlaceholder: '请填写室内面积', + rentPlaceholder: '请填写租金', + shopNumberRequired: '商铺编号不能为空', + floorRequired: '商铺楼层不能为空', + buildingRequired: '楼栋不能为空', + rentRequired: '租金不能为空', + builtUpAreaRequired: '建筑面积不能为空', + roomAreaRequired: '室内面积不能为空', + feeCoefficientRequired: '算费系数不能为空', + tenantPhoneRequired: '租户手机号不能为空', + tenantNameRequired: '租户名称不能为空', + leaseStartRequired: '起租时间不能为空', + leaseEndRequired: '截租时间不能为空', + phoneFormatError: '手机号格式错误' + } + } +} \ No newline at end of file diff --git a/src/views/room/shopsList.vue b/src/views/room/shopsList.vue new file mode 100644 index 0000000..c640828 --- /dev/null +++ b/src/views/room/shopsList.vue @@ -0,0 +1,253 @@ + + + + + \ No newline at end of file