diff --git a/src/api/car/listParkingSpaceApi.js b/src/api/car/listParkingSpaceApi.js new file mode 100644 index 0000000..24643ed --- /dev/null +++ b/src/api/car/listParkingSpaceApi.js @@ -0,0 +1,121 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 查询停车位列表 +export function listParkingSpaces(params) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/parkingSpace.queryParkingSpaces', + method: 'get', + params: { ...params, communityId } + }).then(response => { + const res = response.data + + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 添加停车位 +export function saveParkingSpace(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/parkingSpace.saveParkingSpace', + method: 'post', + data: { ...data, communityId } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '添加停车位失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 编辑停车位 +export function editParkingSpace(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/parkingSpace.editParkingSpace', + method: 'post', + data: { ...data, communityId } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '编辑停车位失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 删除停车位 +export function deleteParkingSpace(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/parkingSpace.deleteParkingSpace', + method: 'post', + data: { ...data, communityId } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '删除停车位失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 查询停车场列表 +export function listParkingAreas(params) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/parkingArea.listParkingAreas', + method: 'get', + params: { ...params, communityId } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 批量添加停车位 +export function batchSaveParkingSpace(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/parkingSpace.batchSaveParkingSpace', + method: 'post', + data: { ...data, communityId } + }).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/car/parkingAreaManageApi.js b/src/api/car/parkingAreaManageApi.js new file mode 100644 index 0000000..5670d97 --- /dev/null +++ b/src/api/car/parkingAreaManageApi.js @@ -0,0 +1,98 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 获取停车场列表 +export function getParkingAreaList(params) { + return new Promise((resolve, reject) => { + const query = { + ...params, + communityId: params.communityId || getCommunityId() + } + + request({ + url: '/parkingArea.listParkingAreas', + method: 'get', + params: query + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 添加停车场 +export function saveParkingArea(data) { + return new Promise((resolve, reject) => { + const params = { + ...data, + communityId: data.communityId || getCommunityId() + } + + request({ + url: '/parkingArea.saveParkingArea', + method: 'post', + data: 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 updateParkingArea(data) { + return new Promise((resolve, reject) => { + const params = { + ...data, + communityId: data.communityId || getCommunityId() + } + + request({ + url: '/parkingArea.updateParkingArea', + method: 'post', + data: 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 deleteParkingArea(data) { + return new Promise((resolve, reject) => { + const params = { + ...data, + communityId: data.communityId || getCommunityId() + } + + request({ + url: '/parkingArea.deleteParkingArea', + method: 'post', + data: params + }).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/components/car/addParkingArea.vue b/src/components/car/addParkingArea.vue new file mode 100644 index 0000000..67729d4 --- /dev/null +++ b/src/components/car/addParkingArea.vue @@ -0,0 +1,124 @@ + + + \ No newline at end of file diff --git a/src/components/car/addParkingSpace.vue b/src/components/car/addParkingSpace.vue new file mode 100644 index 0000000..b07ca83 --- /dev/null +++ b/src/components/car/addParkingSpace.vue @@ -0,0 +1,133 @@ + + + \ No newline at end of file diff --git a/src/components/car/batchAddParkingSpace.vue b/src/components/car/batchAddParkingSpace.vue new file mode 100644 index 0000000..35cbb48 --- /dev/null +++ b/src/components/car/batchAddParkingSpace.vue @@ -0,0 +1,142 @@ + + + \ No newline at end of file diff --git a/src/components/car/chooseParkingArea.vue b/src/components/car/chooseParkingArea.vue new file mode 100644 index 0000000..e0bd704 --- /dev/null +++ b/src/components/car/chooseParkingArea.vue @@ -0,0 +1,135 @@ + + + \ No newline at end of file diff --git a/src/components/car/deleteParkingArea.vue b/src/components/car/deleteParkingArea.vue new file mode 100644 index 0000000..432bbe3 --- /dev/null +++ b/src/components/car/deleteParkingArea.vue @@ -0,0 +1,66 @@ + + + \ No newline at end of file diff --git a/src/components/car/deleteParkingSpace.vue b/src/components/car/deleteParkingSpace.vue new file mode 100644 index 0000000..b977e5e --- /dev/null +++ b/src/components/car/deleteParkingSpace.vue @@ -0,0 +1,59 @@ + + + \ No newline at end of file diff --git a/src/components/car/editParkingArea.vue b/src/components/car/editParkingArea.vue new file mode 100644 index 0000000..09fd139 --- /dev/null +++ b/src/components/car/editParkingArea.vue @@ -0,0 +1,153 @@ + + + \ No newline at end of file diff --git a/src/components/car/editParkingSpace.vue b/src/components/car/editParkingSpace.vue new file mode 100644 index 0000000..715ff69 --- /dev/null +++ b/src/components/car/editParkingSpace.vue @@ -0,0 +1,175 @@ + + + \ No newline at end of file diff --git a/src/i18n/commonLang.js b/src/i18n/commonLang.js index a0659f2..2ec0b1a 100644 --- a/src/i18n/commonLang.js +++ b/src/i18n/commonLang.js @@ -42,6 +42,7 @@ export const messages = { import: 'Import', remark: 'Remark', hour:'hour', + more:'More', } }, zh: { @@ -87,6 +88,7 @@ export const messages = { import: '导入', remark: '备注', hour:'时', + more:'更多', } } } \ No newline at end of file diff --git a/src/i18n/index.js b/src/i18n/index.js index dbfe109..d3359f5 100644 --- a/src/i18n/index.js +++ b/src/i18n/index.js @@ -144,6 +144,8 @@ import { messages as invoiceApplyMessages } from '../views/fee/invoiceApplyLang' import { messages as ownerApplyInvoiceMessages } from '../views/fee/ownerApplyInvoiceLang' import { messages as invoiceApplyDetailMessages } from '../views/fee/invoiceApplyDetailLang' import { messages as feeConfigDetailMessages } from '../views/fee/feeConfigDetailLang' +import { messages as parkingAreaManageMessages } from '../views/car/parkingAreaManageLang' +import { messages as listParkingSpaceMessages } from '../views/car/listParkingSpaceLang' Vue.use(VueI18n) @@ -292,6 +294,8 @@ const messages = { ...ownerApplyInvoiceMessages.en, ...invoiceApplyDetailMessages.en, ...feeConfigDetailMessages.en, + ...parkingAreaManageMessages.en, + ...listParkingSpaceMessages.en, }, zh: { ...loginMessages.zh, @@ -436,6 +440,8 @@ const messages = { ...ownerApplyInvoiceMessages.zh, ...invoiceApplyDetailMessages.zh, ...feeConfigDetailMessages.zh, + ...parkingAreaManageMessages.zh, + ...listParkingSpaceMessages.zh, } } diff --git a/src/router/index.js b/src/router/index.js index d21c8ed..56b533c 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -716,6 +716,16 @@ const routes = [ name: '/views/fee/feeConfigDetail', component: () => import('@/views/fee/feeConfigDetailList.vue') }, + { + path:'/pages/property/parkingAreaManage', + name:'/pages/property/parkingAreaManage', + component: () => import('@/views/car/parkingAreaManageList.vue') + }, + { + path:'/pages/property/listParkingSpace', + name:'/pages/property/listParkingSpace', + component: () => import('@/views/car/listParkingSpaceList.vue') + }, // 其他子路由可以在这里添加 ] }, diff --git a/src/views/car/listParkingSpaceLang.js b/src/views/car/listParkingSpaceLang.js new file mode 100644 index 0000000..4954f04 --- /dev/null +++ b/src/views/car/listParkingSpaceLang.js @@ -0,0 +1,178 @@ +export const messages = { + en: { + listParkingSpace: { + queryCondition: "Query Conditions", + parkingLotPlaceholder: "Please select parking lot", + select: "Select", + parkingSpaceNumPlaceholder: "Please enter parking space number", + parkingSpaceStatePlaceholder: "Required, select parking space state", + forSale: "For Sale", + forRent: "For Rent", + free: "Free", + query: "Query", + reset: "Reset", + parkingSpaceIdPlaceholder: "Please enter parking space ID", + parkingSpaceInfo: "Parking Space Information", + batchAdd: "Batch Add", + add: "Add", + parkingLot: "Parking Lot", + parkingSpace: "Parking Space", + parkingSpaceState: "Parking Space State", + parkingSpaceType: "Parking Space Type", + area: "Area", + createTime: "Create Time", + operation: "Operation", + modify: "Modify", + delete: "Delete" + }, + addParkingSpace: { + title: "Add", + parkingSpaceNum: "Parking Space Number", + parkingSpaceNumPlaceholder: "Required, enter parking space number", + parkingLot: "Parking Lot", + parkingLotPlaceholder: "Required, select parking lot", + parkingSpaceType: "Parking Space Type", + parkingSpaceTypePlaceholder: "Required, select parking space type", + area: "Area", + areaPlaceholder: "Required, enter area, e.g. 30.09", + remark: "Remark", + remarkPlaceholder: "Optional, enter remark", + save: "Save", + cancel: "Cancel" + }, + editParkingSpace: { + title: "Edit Parking Space", + parkingSpaceNum: "Parking Space Number", + parkingSpaceNumPlaceholder: "Required, enter parking space number", + parkingLot: "Parking Lot", + parkingLotPlaceholder: "Required, select parking lot", + parkingSpaceType: "Parking Space Type", + area: "Area", + areaPlaceholder: "Required, enter area, e.g. 30.09", + remark: "Remark", + remarkPlaceholder: "Optional, enter remark", + save: "Save", + cancel: "Cancel" + }, + deleteParkingSpace: { + title: "Confirm Operation", + confirmDelete: "Confirm to delete?", + cancel: "Cancel", + confirm: "Confirm Delete" + }, + chooseParkingArea: { + title: "Select Parking Lot", + parkingLotNumPlaceholder: "Enter parking lot number", + query: "Query", + reset: "Reset", + parkingLotId: "Parking Lot ID", + parkingLotNum: "Parking Lot Number", + parkingLotType: "Parking Lot Type", + operation: "Operation", + select: "Select" + }, + batchAddParkingSpace: { + title: "Add", + prefixNum: "Number Prefix", + prefixNumPlaceholder: "Optional, prefix letters when not pure numbers, e.g. A for A12", + startNum: "Start Number", + startNumPlaceholder: "Required, enter starting number", + endNum: "End Number", + endNumPlaceholder: "Required, enter ending number", + parkingLot: "Parking Lot", + parkingLotPlaceholder: "Required, select parking lot", + parkingSpaceType: "Parking Space Type", + parkingSpaceTypePlaceholder: "Required, select parking space type", + save: "Save", + cancel: "Cancel" + } + }, + zh: { + listParkingSpace: { + queryCondition: "查询条件", + parkingLotPlaceholder: "请选择停车场", + select: "选择", + parkingSpaceNumPlaceholder: "请填写车位编号", + parkingSpaceStatePlaceholder: "必填,请选择车位状态", + forSale: "出售", + forRent: "出租", + free: "空闲", + query: "查询", + reset: "重置", + parkingSpaceIdPlaceholder: "请填写车位ID", + parkingSpaceInfo: "停车位信息", + batchAdd: "批量添加", + add: "添加", + parkingLot: "停车场", + parkingSpace: "车位", + parkingSpaceState: "车位状态", + parkingSpaceType: "车位类型", + area: "面积", + createTime: "创建时间", + operation: "操作", + modify: "修改", + delete: "删除" + }, + addParkingSpace: { + title: "添加", + parkingSpaceNum: "车位编码", + parkingSpaceNumPlaceholder: "必填,请填写车位编码", + parkingLot: "停车场", + parkingLotPlaceholder: "必填,请选择停车场", + parkingSpaceType: "车位类型", + parkingSpaceTypePlaceholder: "必填,请选择车位类型", + area: "面积", + areaPlaceholder: "必填,请填写面积,如30.09", + remark: "备注", + remarkPlaceholder: "可填,请填写备注", + save: "保存", + cancel: "取消" + }, + editParkingSpace: { + title: "修改车位", + parkingSpaceNum: "车位编码", + parkingSpaceNumPlaceholder: "必填,请填写车位编码", + parkingLot: "停车场", + parkingLotPlaceholder: "必填,请选择停车场", + parkingSpaceType: "车位类型", + area: "面积", + areaPlaceholder: "必填,请填写面积,如30.09", + remark: "备注", + remarkPlaceholder: "可填,请填写备注", + save: "保存", + cancel: "取消" + }, + deleteParkingSpace: { + title: "请确认您的操作", + confirmDelete: "确认是否删除!", + cancel: "点错了", + confirm: "确认删除" + }, + chooseParkingArea: { + title: "选择停车场", + parkingLotNumPlaceholder: "输入停车场编号", + query: "查询", + reset: "重置", + parkingLotId: "停车场ID", + parkingLotNum: "停车场编号", + parkingLotType: "停车场类型", + operation: "操作", + select: "选择" + }, + batchAddParkingSpace: { + title: "添加", + prefixNum: "编号前缀", + prefixNumPlaceholder: "选填,不是纯数字时前面字母 如A12 时填写A", + startNum: "开始编号", + startNumPlaceholder: "必填,请填写编码中数字部分开始编号", + endNum: "结束编号", + endNumPlaceholder: "必填,请填写编码中数字部分结束编号", + parkingLot: "停车场", + parkingLotPlaceholder: "必填,请选择停车场", + parkingSpaceType: "车位类型", + parkingSpaceTypePlaceholder: "必填,请选择车位类型", + save: "保存", + cancel: "取消" + } + } +} \ No newline at end of file diff --git a/src/views/car/listParkingSpaceList.vue b/src/views/car/listParkingSpaceList.vue new file mode 100644 index 0000000..b24c7cf --- /dev/null +++ b/src/views/car/listParkingSpaceList.vue @@ -0,0 +1,295 @@ + + + + + \ No newline at end of file diff --git a/src/views/car/parkingAreaManageLang.js b/src/views/car/parkingAreaManageLang.js new file mode 100644 index 0000000..b5470c4 --- /dev/null +++ b/src/views/car/parkingAreaManageLang.js @@ -0,0 +1,80 @@ +export const messages = { + en: { + parkingAreaManage: { + queryTitle: 'Query Conditions', + parkingInfo: 'Parking Area Information', + parkingId: 'Parking ID', + parkingNum: 'Parking Number', + parkingType: 'Parking Type', + inputParkingNum: 'Please enter parking number', + selectParkingType: 'Please select parking type', + aboveGround: 'Above Ground Parking', + underground: 'Underground Parking', + remark: 'Remark', + createTime: 'Create Time', + operation: 'Operation', + controlPanel: 'Control Panel', + addTitle: 'Add Parking Area', + editTitle: 'Edit Parking Area', + deleteTitle: 'Confirm Operation', + deleteConfirm: 'Are you sure to delete this parking area?', + numRequired: 'Parking number is required', + typeRequired: 'Parking type is required', + remarkPlaceholder: 'Optional, please enter remark', + attr1: 'Area Size', + attr1Placeholder: 'Please enter area size', + attr2: 'Parking Type', + selectAttr2: 'Please select parking type', + option1: 'Standard', + option2: 'VIP', + column1: 'Capacity', + column2: 'Available', + addSuccess: 'Parking area added successfully', + addFailed: 'Failed to add parking area', + editSuccess: 'Parking area updated successfully', + editFailed: 'Failed to update parking area', + deleteSuccess: 'Parking area deleted successfully', + deleteFailed: 'Failed to delete parking area', + fetchError: 'Failed to fetch parking area data' + } + }, + zh: { + parkingAreaManage: { + queryTitle: '查询条件', + parkingInfo: '停车场信息', + parkingId: '停车场ID', + parkingNum: '停车场编号', + parkingType: '停车场类型', + inputParkingNum: '请输入停车场编号', + selectParkingType: '请选择停车场类型', + aboveGround: '地上停车场', + underground: '地下停车场', + remark: '备注', + createTime: '创建时间', + operation: '操作', + controlPanel: '控制台', + addTitle: '添加停车场', + editTitle: '修改停车场', + deleteTitle: '确认操作', + deleteConfirm: '是否确定删除该停车场?', + numRequired: '停车场编号不能为空', + typeRequired: '停车场类型不能为空', + remarkPlaceholder: '可选,请填写备注', + attr1: '区域大小', + attr1Placeholder: '请输入区域大小', + attr2: '停车类型', + selectAttr2: '请选择停车类型', + option1: '标准', + option2: 'VIP', + column1: '容量', + column2: '可用', + addSuccess: '停车场添加成功', + addFailed: '停车场添加失败', + editSuccess: '停车场修改成功', + editFailed: '停车场修改失败', + deleteSuccess: '停车场删除成功', + deleteFailed: '停车场删除失败', + fetchError: '获取停车场数据失败' + } + } +} \ No newline at end of file diff --git a/src/views/car/parkingAreaManageList.vue b/src/views/car/parkingAreaManageList.vue new file mode 100644 index 0000000..a38bbe2 --- /dev/null +++ b/src/views/car/parkingAreaManageList.vue @@ -0,0 +1,252 @@ + + + + + \ No newline at end of file