From eafabeed42c8a0fad9c27ae92e5b27e426633f05 Mon Sep 17 00:00:00 2001 From: wuxw <928255095@qq.com> Date: Mon, 9 Jun 2025 20:23:03 +0800 Subject: [PATCH] 开发完成业主车辆 --- src/api/car/carAddParkingSpaceApi.js | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/api/car/hireParkingSpaceApi.js | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/api/car/listOwnerCarApi.js | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/api/car/parkingBoxManageApi.js | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/api/fee/buyCarMonthCardApi.js | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/car/SearchParkingSpace.vue | 173 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/car/addParkingBox.vue | 216 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/car/deleteOwnerCar.vue | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/car/deleteParkingBox.vue | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/car/editCar.vue | 205 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/car/editParkingBox.vue | 208 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/car/importOwnerCar.vue | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/i18n/commonLang.js | 3 +++ src/i18n/index.js | 15 +++++++++++++++ src/router/index.js | 41 +++++++++++++++++++++++++++++++++-------- src/views/car/carAddParkingSpaceLang.js | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/car/carAddParkingSpaceList.vue | 195 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/car/hireParkingSpaceLang.js | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/car/hireParkingSpaceList.vue | 317 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/car/listOwnerCarLang.js | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/car/listOwnerCarList.vue | 414 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/car/parkingBoxManageLang.js | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/car/parkingBoxManageList.vue | 222 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/fee/buyCarMonthCardLang.js | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/fee/buyCarMonthCardList.vue | 234 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 25 files changed, 3619 insertions(+), 8 deletions(-) create mode 100644 src/api/car/carAddParkingSpaceApi.js create mode 100644 src/api/car/hireParkingSpaceApi.js create mode 100644 src/api/car/listOwnerCarApi.js create mode 100644 src/api/car/parkingBoxManageApi.js create mode 100644 src/api/fee/buyCarMonthCardApi.js create mode 100644 src/components/car/SearchParkingSpace.vue create mode 100644 src/components/car/addParkingBox.vue create mode 100644 src/components/car/deleteOwnerCar.vue create mode 100644 src/components/car/deleteParkingBox.vue create mode 100644 src/components/car/editCar.vue create mode 100644 src/components/car/editParkingBox.vue create mode 100644 src/components/car/importOwnerCar.vue create mode 100644 src/views/car/carAddParkingSpaceLang.js create mode 100644 src/views/car/carAddParkingSpaceList.vue create mode 100644 src/views/car/hireParkingSpaceLang.js create mode 100644 src/views/car/hireParkingSpaceList.vue create mode 100644 src/views/car/listOwnerCarLang.js create mode 100644 src/views/car/listOwnerCarList.vue create mode 100644 src/views/car/parkingBoxManageLang.js create mode 100644 src/views/car/parkingBoxManageList.vue create mode 100644 src/views/fee/buyCarMonthCardLang.js create mode 100644 src/views/fee/buyCarMonthCardList.vue diff --git a/src/api/car/carAddParkingSpaceApi.js b/src/api/car/carAddParkingSpaceApi.js new file mode 100644 index 0000000..df755d6 --- /dev/null +++ b/src/api/car/carAddParkingSpaceApi.js @@ -0,0 +1,95 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 查询车辆信息 +export function getCarInfo(params) { + return new Promise((resolve, reject) => { + request({ + url: '/owner.queryOwnerCars', + method: 'get', + params: { + ...params, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '获取车辆信息失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 添加车辆停车位 +export function addCarParkingSpace(data) { + return new Promise((resolve, reject) => { + request({ + url: '/owner.carAddParkingSpace', + method: 'post', + data: { + ...data, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '添加停车位失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 查询停车位列表 +export function queryParkingSpaces(params) { + return new Promise((resolve, reject) => { + request({ + url: '/parkingSpace.queryParkingSpaces', + method: 'get', + params: { + ...params, + communityId: getCommunityId() + } + }).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() { + return new Promise((resolve, reject) => { + request({ + url: '/parkingArea.listParkingAreas', + method: 'get', + params: { + page: 1, + row: 50, + communityId: getCommunityId() + } + }).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/hireParkingSpaceApi.js b/src/api/car/hireParkingSpaceApi.js new file mode 100644 index 0000000..01fbc4c --- /dev/null +++ b/src/api/car/hireParkingSpaceApi.js @@ -0,0 +1,136 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 保存车辆信息 +export function saveOwnerCar(data) { + return new Promise((resolve, reject) => { + request({ + url: '/owner.saveOwnerCar', + method: 'post', + data: { + ...data, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '保存车辆信息失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 查询业主列表 +export function queryOwners(params) { + return new Promise((resolve, reject) => { + request({ + url: '/owner.queryOwners', + method: 'get', + params: { + ...params, + communityId: getCommunityId() + } + }).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 queryParkingSpaces(params) { + return new Promise((resolve, reject) => { + request({ + url: '/parkingSpace.queryParkingSpaces', + method: 'get', + params: { + ...params, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 获取停车场区域列表 +export function listParkingAreas(params) { + return new Promise((resolve, reject) => { + request({ + url: '/parkingArea.listParkingAreas', + method: 'get', + params: { + ...params, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 获取车辆属性规格 +export function getCarAttrSpec() { + return new Promise((resolve, reject) => { + request({ + url: '/attr.getAttrSpec', + method: 'get', + params: { + specCd: 'owner_car_attr', + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res.data) + } else { + reject(new Error(res.msg || '获取车辆属性规格失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 获取字典数据 +export function getDict(dictType, dictCd) { + return new Promise((resolve, reject) => { + request({ + url: '/dict.getDict', + method: 'get', + params: { + dictType, + dictCd, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res.data) + } else { + reject(new Error(res.msg || '获取字典数据失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/car/listOwnerCarApi.js b/src/api/car/listOwnerCarApi.js new file mode 100644 index 0000000..94c7609 --- /dev/null +++ b/src/api/car/listOwnerCarApi.js @@ -0,0 +1,152 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 查询业主车辆 +export function queryOwnerCars(params) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/owner.queryOwnerCars', + method: 'get', + params: { + ...params, + 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 deleteOwnerCars(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/owner.deleteOwnerCars', + 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 deleteCarParkingSpace(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/owner.deleteCarParkingSpace', + 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 importData(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + const formData = new FormData() + formData.append('uploadFile', data.file) + formData.append('communityId', communityId) + formData.append('importAdapt', data.importAdapt || 'importOwnerCar') + + request({ + url: '/callComponent/upload/assetImport/importData', + method: 'post', + data: formData, + headers: { + 'Content-Type': 'multipart/form-data' + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '导入失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 修改车辆信息 +export function editOwnerCar(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/owner.editOwnerCar', + 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 exportData(params) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/export.exportData', + method: 'get', + params: { + ...params, + communityId, + pagePath: 'exportOwnerCar' + } + }).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/parkingBoxManageApi.js b/src/api/car/parkingBoxManageApi.js new file mode 100644 index 0000000..3e9cbaf --- /dev/null +++ b/src/api/car/parkingBoxManageApi.js @@ -0,0 +1,124 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 查询岗亭列表 +export function getParkingBoxList(params) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/iot.getOpenApi', + method: 'get', + params: { + ...params, + communityId, + iotApiCode: 'listParkingBoxBmoImpl' + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res) + } else { + reject(new Error(res.msg || '获取岗亭列表失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 添加岗亭 +export function addParkingBox(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/parkingBox.saveParkingBox', + 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 updateParkingBox(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/parkingBox.updateParkingBox', + 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 deleteParkingBox(data) { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/parkingBox.deleteParkingBox', + 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 getParkingAreaList() { + return new Promise((resolve, reject) => { + const communityId = getCommunityId() + request({ + url: '/parkingArea.listParkingAreas', + method: 'get', + params: { + page: 1, + row: 50, + communityId + } + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve(res.data.parkingAreas || []) + } else { + reject(new Error(res.msg || '获取停车场列表失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/fee/buyCarMonthCardApi.js b/src/api/fee/buyCarMonthCardApi.js new file mode 100644 index 0000000..1991851 --- /dev/null +++ b/src/api/fee/buyCarMonthCardApi.js @@ -0,0 +1,73 @@ +import request from '@/utils/request' + +/** + * 购买月卡订单 + * @param {Object} data 订单数据 + * @returns {Promise} + */ +export function buyCarMonthOrder(data) { + return new Promise((resolve, reject) => { + request({ + url: '/carMonth.buyCarMonthOrder', + 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) + }) + }) +} + +/** + * 查询车主车辆 + * @param {Object} params 查询参数 + * @returns {Promise} + */ +export function queryOwnerCars(params) { + return new Promise((resolve, reject) => { + request({ + url: '/owner.queryOwnerCars', + 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) + }) + }) +} + +/** + * 获取月卡列表 + * @param {Object} params 查询参数 + * @returns {Promise} + */ +export function getOpenApi(params) { + return new Promise((resolve, reject) => { + request({ + url: '/iot.getOpenApi', + 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) + }) + }) +} \ No newline at end of file diff --git a/src/components/car/SearchParkingSpace.vue b/src/components/car/SearchParkingSpace.vue new file mode 100644 index 0000000..e15a1da --- /dev/null +++ b/src/components/car/SearchParkingSpace.vue @@ -0,0 +1,173 @@ + + + + + \ No newline at end of file diff --git a/src/components/car/addParkingBox.vue b/src/components/car/addParkingBox.vue new file mode 100644 index 0000000..1b1a09e --- /dev/null +++ b/src/components/car/addParkingBox.vue @@ -0,0 +1,216 @@ + + + \ No newline at end of file diff --git a/src/components/car/deleteOwnerCar.vue b/src/components/car/deleteOwnerCar.vue new file mode 100644 index 0000000..ed29047 --- /dev/null +++ b/src/components/car/deleteOwnerCar.vue @@ -0,0 +1,53 @@ + + + \ No newline at end of file diff --git a/src/components/car/deleteParkingBox.vue b/src/components/car/deleteParkingBox.vue new file mode 100644 index 0000000..1df3ac3 --- /dev/null +++ b/src/components/car/deleteParkingBox.vue @@ -0,0 +1,51 @@ + + + \ No newline at end of file diff --git a/src/components/car/editCar.vue b/src/components/car/editCar.vue new file mode 100644 index 0000000..f423c9b --- /dev/null +++ b/src/components/car/editCar.vue @@ -0,0 +1,205 @@ + + + \ No newline at end of file diff --git a/src/components/car/editParkingBox.vue b/src/components/car/editParkingBox.vue new file mode 100644 index 0000000..0ce36b8 --- /dev/null +++ b/src/components/car/editParkingBox.vue @@ -0,0 +1,208 @@ + + + \ No newline at end of file diff --git a/src/components/car/importOwnerCar.vue b/src/components/car/importOwnerCar.vue new file mode 100644 index 0000000..d898cf0 --- /dev/null +++ b/src/components/car/importOwnerCar.vue @@ -0,0 +1,108 @@ + + + \ No newline at end of file diff --git a/src/i18n/commonLang.js b/src/i18n/commonLang.js index 2ec0b1a..313184e 100644 --- a/src/i18n/commonLang.js +++ b/src/i18n/commonLang.js @@ -43,6 +43,7 @@ export const messages = { remark: 'Remark', hour:'hour', more:'More', + tip:'Tip', } }, zh: { @@ -89,6 +90,8 @@ export const messages = { remark: '备注', hour:'时', more:'更多', + tip:'提示', + } } } \ No newline at end of file diff --git a/src/i18n/index.js b/src/i18n/index.js index d3359f5..98e8e7c 100644 --- a/src/i18n/index.js +++ b/src/i18n/index.js @@ -146,6 +146,11 @@ import { messages as invoiceApplyDetailMessages } from '../views/fee/invoiceAppl import { messages as feeConfigDetailMessages } from '../views/fee/feeConfigDetailLang' import { messages as parkingAreaManageMessages } from '../views/car/parkingAreaManageLang' import { messages as listParkingSpaceMessages } from '../views/car/listParkingSpaceLang' +import { messages as parkingBoxManageMessages } from '../views/car/parkingBoxManageLang' +import { messages as listOwnerCarMessages } from '../views/car/listOwnerCarLang' +import { messages as hireParkingSpaceMessages } from '../views/car/hireParkingSpaceLang' +import { messages as carAddParkingSpaceMessages } from '../views/car/carAddParkingSpaceLang' +import { messages as buyCarMonthCardMessages } from '../views/fee/buyCarMonthCardLang' Vue.use(VueI18n) @@ -296,6 +301,11 @@ const messages = { ...feeConfigDetailMessages.en, ...parkingAreaManageMessages.en, ...listParkingSpaceMessages.en, + ...parkingBoxManageMessages.en, + ...listOwnerCarMessages.en, + ...hireParkingSpaceMessages.en, + ...carAddParkingSpaceMessages.en, + ...buyCarMonthCardMessages.en, }, zh: { ...loginMessages.zh, @@ -442,6 +452,11 @@ const messages = { ...feeConfigDetailMessages.zh, ...parkingAreaManageMessages.zh, ...listParkingSpaceMessages.zh, + ...parkingBoxManageMessages.zh, + ...listOwnerCarMessages.zh, + ...hireParkingSpaceMessages.zh, + ...carAddParkingSpaceMessages.zh, + ...buyCarMonthCardMessages.zh, } } diff --git a/src/router/index.js b/src/router/index.js index 56b533c..d1e6918 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -717,15 +717,40 @@ const routes = [ component: () => import('@/views/fee/feeConfigDetailList.vue') }, { - path:'/pages/property/parkingAreaManage', - name:'/pages/property/parkingAreaManage', + 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') - }, + }, + { + path: '/pages/property/listParkingSpace', + name: '/pages/property/listParkingSpace', + component: () => import('@/views/car/listParkingSpaceList.vue') + }, + { + path: '/pages/property/parkingBoxManage', + name: '/pages/property/parkingBoxManage', + component: () => import('@/views/car/parkingBoxManageList.vue') + }, + { + path: '/pages/property/listOwnerCar', + name: '/pages/property/listOwnerCar', + component: () => import('@/views/car/listOwnerCarList.vue') + }, + { + path: '/views/car/hireParkingSpace', + name: '/views/car/hireParkingSpace', + component: () => import('@/views/car/hireParkingSpaceList.vue') + }, + { + path: '/views/car/carAddParkingSpace', + name: '/views/car/carAddParkingSpace', + component: () => import('@/views/car/carAddParkingSpaceList.vue') + }, + { + path: '/views/fee/buyCarMonthCard', + name: '/views/fee/buyCarMonthCard', + component: () => import('@/views/fee/buyCarMonthCardList.vue') + }, // 其他子路由可以在这里添加 ] }, diff --git a/src/views/car/carAddParkingSpaceLang.js b/src/views/car/carAddParkingSpaceLang.js new file mode 100644 index 0000000..2e7d158 --- /dev/null +++ b/src/views/car/carAddParkingSpaceLang.js @@ -0,0 +1,76 @@ +export const messages = { + en: { + carAddParkingSpace: { + vehicleInfo: 'Vehicle Information', + licensePlate: 'License Plate', + requiredLicensePlate: 'Required, please fill in the license plate', + startTime: 'Start Time', + requiredStartTime: 'Required, please fill in the start time', + endTime: 'End Time', + requiredEndTime: 'Required, please fill in the end time', + remark: 'Remark', + remarkPlaceholder: 'Please fill in remarks', + submit: 'Submit', + parkingSpaceInfo: 'Parking Space Information', + parkingSpaceId: 'Parking Space ID', + number: 'Number', + parkingLot: 'Parking Lot', + parkingSpaceStatus: 'Parking Space Status', + area: 'Area', + squareMeters: 'square meters', + remarks: 'Remarks', + selectParkingSpace: 'Select Parking Space', + search: 'Search', + reset: 'Reset', + parkingLotCode: 'Parking Lot Code', + parkingSpaceCode: 'Parking Space Code', + parkingLotType: 'Parking Lot Type', + parkingSpaceType: 'Parking Space Type', + operation: 'Operation', + select: 'Select', + aboveGround: 'Above Ground', + underground: 'Underground', + free: 'Free', + sold: 'Sold', + rented: 'Rented', + unknown: 'Unknown' + } + }, + zh: { + carAddParkingSpace: { + vehicleInfo: '车辆信息', + licensePlate: '车牌号', + requiredLicensePlate: '必填,请填写车牌号', + startTime: '起租时间', + requiredStartTime: '必填,请填写起租时间', + endTime: '结租时间', + requiredEndTime: '必填,请填写结租时间', + remark: '备注', + remarkPlaceholder: '请填写备注信息', + submit: '提交', + parkingSpaceInfo: '停车位信息', + parkingSpaceId: '车位ID', + number: '编号', + parkingLot: '停车场', + parkingSpaceStatus: '车位状态', + area: '面积', + squareMeters: '平方米', + remarks: '备注', + selectParkingSpace: '选择车位', + search: '查询', + reset: '重置', + parkingLotCode: '停车场编码', + parkingSpaceCode: '停车位编码', + parkingLotType: '停车场类型', + parkingSpaceType: '车位类型', + operation: '操作', + select: '选择', + aboveGround: '地上停车位', + underground: '地下停车位', + free: '空闲', + sold: '已售卖', + rented: '已出租', + unknown: '未知' + } + } +} \ No newline at end of file diff --git a/src/views/car/carAddParkingSpaceList.vue b/src/views/car/carAddParkingSpaceList.vue new file mode 100644 index 0000000..0dd8393 --- /dev/null +++ b/src/views/car/carAddParkingSpaceList.vue @@ -0,0 +1,195 @@ + + + + + \ No newline at end of file diff --git a/src/views/car/hireParkingSpaceLang.js b/src/views/car/hireParkingSpaceLang.js new file mode 100644 index 0000000..486974b --- /dev/null +++ b/src/views/car/hireParkingSpaceLang.js @@ -0,0 +1,132 @@ +export const messages = { + en: { + hireParkingSpace: { + title: 'Add Vehicle', + carNum: 'License Plate', + carNumPlaceholder: 'Required, please enter license plate', + carBrand: 'Car Brand', + carBrandPlaceholder: 'Optional, please enter car brand', + carType: 'Vehicle Type', + carTypePlaceholder: 'Required, please select vehicle type', + carColor: 'Color', + carColorPlaceholder: 'Optional, please enter color', + licenseType: 'License Type', + licenseTypePlaceholder: 'Required, please select license type', + monthlyRent: 'Monthly Rent', + saleCar: 'For Sale', + internalCar: 'Internal Vehicle', + freeCar: 'Free Vehicle', + startTime: 'Start Time', + startTimePlaceholder: 'Required, please select start time', + endTime: 'End Time', + endTimePlaceholder: 'Required, please select end time', + owner: 'Owner', + ownerPlaceholder: 'Required, please select owner', + parkingSpace: 'Parking Space', + parkingSpacePlaceholder: 'Required, please select parking space', + remark: 'Remark', + remarkPlaceholder: 'Optional, please enter remark', + validate: { + carNum: 'License plate is required', + carType: 'Vehicle type is required', + licenseType: 'License type is required', + owner: 'Owner is required', + parkingSpace: 'Parking space is required', + dateRange: 'Date range is required' + }, + saveSuccess: 'Vehicle information saved successfully!', + saveError: 'Failed to save vehicle information' + }, + 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', + loadError: 'Failed to load owner information' + }, + searchParkingSpace: { + title: 'Select Parking Space', + parkingAreaPlaceholder: 'Select parking area', + numPlaceholder: 'Enter parking space number', + areaNum: 'Parking Area', + num: 'Parking Space', + type: 'Type', + ground: 'Ground', + underground: 'Underground', + parkingType: 'Parking Type', + state: 'State', + area: 'Area', + loadError: 'Failed to load parking space information' + } + }, + zh: { + hireParkingSpace: { + title: '添加车辆', + carNum: '车牌号', + carNumPlaceholder: '必填,请填写车牌号', + carBrand: '汽车品牌', + carBrandPlaceholder: '选填,请填写汽车品牌', + carType: '车类型', + carTypePlaceholder: '必填,请选择车辆类型', + carColor: '颜色', + carColorPlaceholder: '选填,请填写颜色', + licenseType: '车牌类型', + licenseTypePlaceholder: '必填,请选择车牌类型', + monthlyRent: '月租车', + saleCar: '出售车辆', + internalCar: '内部车', + freeCar: '免费车', + startTime: '开始时间', + startTimePlaceholder: '必填,请填写开始时间', + endTime: '结束时间', + endTimePlaceholder: '必填,请填写结束时间', + owner: '业主', + ownerPlaceholder: '必填,请选择业主', + parkingSpace: '车位', + parkingSpacePlaceholder: '必填,请选择车位', + remark: '备注', + remarkPlaceholder: '选填,请填写备注', + validate: { + carNum: '车牌号不能为空', + carType: '车类型不能为空', + licenseType: '车牌类型不能为空', + owner: '业主不能为空', + parkingSpace: '车位不能为空', + dateRange: '请选择日期范围' + }, + saveSuccess: '车辆信息保存成功!', + saveError: '车辆信息保存失败' + }, + searchOwner: { + title: '选择业主', + roomPlaceholder: '输入房屋编号楼栋-单元-房屋', + namePlaceholder: '输入业主名称', + memberId: '业主编号', + name: '名称', + personType: '人员类型', + personRole: '人员角色', + idCard: '证件号', + contact: '联系方式', + loadError: '加载业主信息失败' + }, + searchParkingSpace: { + title: '选择停车位', + parkingAreaPlaceholder: '请选择停车场', + numPlaceholder: '请输入停车位编号', + areaNum: '停车场编码', + num: '停车位编码', + type: '停车场类型', + ground: '地上停车位', + underground: '地下停车位', + parkingType: '车位类型', + state: '车位状态', + area: '面积', + loadError: '加载停车位信息失败' + } + } +} \ No newline at end of file diff --git a/src/views/car/hireParkingSpaceList.vue b/src/views/car/hireParkingSpaceList.vue new file mode 100644 index 0000000..10c4f56 --- /dev/null +++ b/src/views/car/hireParkingSpaceList.vue @@ -0,0 +1,317 @@ + + + + + \ No newline at end of file diff --git a/src/views/car/listOwnerCarLang.js b/src/views/car/listOwnerCarLang.js new file mode 100644 index 0000000..95febdf --- /dev/null +++ b/src/views/car/listOwnerCarLang.js @@ -0,0 +1,182 @@ +export const messages = { + en: { + listOwnerCar: { + searchCondition: 'Search Condition', + inputCarNum: 'Please enter the license plate number', + inputParkingSpaceNum: 'Please fill in the parking space number', + selectParkingSpaceStatus: 'Required, please select the parking space status', + inputOwnerName: 'Please fill in the owner name', + inputContact: 'Please enter contact information', + inputMemberCarNum: 'Please enter member license plate number', + query: 'Query', + reset: 'Reset', + carInfo: 'Car Information', + importCar: 'Import Cars', + export: 'Export', + add: 'Add', + carNum: 'License Plate Number', + memberCar: 'Member Car', + roomNum: 'Room Number', + carPlateType: 'License Plate Type', + carType: 'Car Type', + color: 'Color', + owner: 'Owner', + parkingSpace: 'Parking Space', + validity: 'Validity', + status: 'Status', + remark: 'Remark', + operation: 'Operation', + temporaryCar: 'Temporary Car', + parkingSpaceReleased: 'Parking space released', + normal: 'Normal', + expired: 'Expired', + noParkingSpace: 'No Parking Space', + release: 'Release', + renew: 'Renew', + buyMonthlyCard: 'Buy Monthly Card', + modify: 'Modify', + delete: 'Delete', + confirmDelete: 'Are you sure to delete?', + cancel: 'Cancel', + confirm: 'Confirm', + importCarTitle: 'Car Import', + selectFile: 'Select File', + downloadTemplate: 'Download Template', + importTemplate: 'Import Template', + prepareData: 'Prepare data and upload', + import: 'Import', + editCar: 'Edit Car', + carBrand: 'Car Brand', + inputCarBrand: 'Optional, please fill in the car brand, e.g. BMW X6', + inputCarNumRequired: 'Required, please fill in the license plate number', + selectType: 'Required, please select type', + inputCarColor: 'Optional, please fill in the car color, e.g. white', + licensePlateType: 'License Plate Type', + selectLicensePlateType: 'Required, please select license plate type', + monthlyRentCar: 'Monthly Rent Car', + soldCar: 'Sold Car', + internalCar: 'Internal Car', + freeCar: 'Free Car', + startRentTime: 'Start Rent Time', + endRentTime: 'End Rent Time', + inputStartRentTime: 'Required, please fill in the start rent time', + inputEndRentTime: 'Required, please fill in the end rent time', + inputRemark: 'Please fill in remarks', + save: 'Save', + deleteCarConfirm: 'Confirm whether to delete', + fileRequired: 'Required, please select data file', + invalidExcel: 'Invalid Excel format', + fileSizeExceed: 'Excel file size cannot exceed 2M', + importSuccess: 'Import successful', + importError: 'Import failed', + updateSuccess: 'Update successful', + updateError: 'Update failed', + deleteSuccess: 'Delete successful', + deleteError: 'Delete failed', + releaseSuccess: 'Release successful', + releaseError: 'Release failed', + exportSuccess: 'Export successful', + exportError: 'Export failed', + fetchError: 'Failed to get data', + allCars: 'All Cars', + expiredCars: 'Expired Cars', + downloadFirst: 'Please download first ', + selectTypeRequired: 'Please select car type', + selectLicensePlateTypeRequired: 'Please select license plate type', + rentTimeRequired: 'Please fill in rent time', + endTimeAfterStart: 'End time must be after start time', + iotSyncDetail: 'IoT sync details', + confirmRelease: 'Are you sure to release the car?', + } + }, + zh: { + listOwnerCar: { + searchCondition: '查询条件', + inputCarNum: '请输入车牌号', + inputParkingSpaceNum: '请填写车位编号', + selectParkingSpaceStatus: '必填,请选择车位状态', + inputOwnerName: '请填写业主名称', + inputContact: '请输入联系方式', + inputMemberCarNum: '请输入成员车牌号', + query: '查询', + reset: '重置', + carInfo: '车辆信息', + importCar: '车辆导入', + export: '导出', + add: '添加', + carNum: '车牌号', + memberCar: '成员车辆', + roomNum: '房屋号', + carPlateType: '车牌类型', + carType: '车辆类型', + color: '颜色', + owner: '业主', + parkingSpace: '车位', + validity: '有效期', + status: '状态', + remark: '备注', + operation: '操作', + temporaryCar: '临时车', + parkingSpaceReleased: '车位已释放', + normal: '正常', + expired: '到期', + noParkingSpace: '无车位', + release: '释放', + renew: '续租', + buyMonthlyCard: '买月卡', + modify: '修改', + delete: '删除', + confirmDelete: '确认删除?', + cancel: '取消', + confirm: '确认', + importCarTitle: '车辆导入', + selectFile: '选择文件', + downloadTemplate: '下载模板', + importTemplate: '导入模板', + prepareData: '准备数据后,上传导入', + import: '导入', + editCar: '修改车辆', + carBrand: '车品牌', + inputCarBrand: '可选,请填写车品牌,如宝马X6', + inputCarNumRequired: '必填,请填写车牌号', + selectType: '必填,请选择类型', + inputCarColor: '可选,请填写车颜色,如白色', + licensePlateType: '车牌类型', + selectLicensePlateType: '必填,请选择车牌类型', + monthlyRentCar: '月租车', + soldCar: '出售车辆', + internalCar: '内部车', + freeCar: '免费车', + startRentTime: '起租时间', + endRentTime: '结租时间', + inputStartRentTime: '必填,请填写起租时间', + inputEndRentTime: '必填,请填写结租时间', + inputRemark: '请填写备注信息', + save: '保存', + deleteCarConfirm: '确认是否删除', + fileRequired: '必填,请选择数据文件', + invalidExcel: '不是有效的Excel格式', + fileSizeExceed: 'Excel文件大小不能超过2M', + importSuccess: '导入成功', + importError: '导入失败', + updateSuccess: '修改成功', + updateError: '修改失败', + deleteSuccess: '删除成功', + deleteError: '删除失败', + releaseSuccess: '释放成功', + releaseError: '释放失败', + exportSuccess: '导出成功', + exportError: '导出失败', + fetchError: '获取数据失败', + allCars: '全部车辆', + expiredCars: '到期车辆', + downloadFirst: '请先下载 ', + selectTypeRequired: '请选择车辆类型', + selectLicensePlateTypeRequired: '请选择车牌类型', + rentTimeRequired: '请填写起租时间和结租时间', + endTimeAfterStart: '结租时间必须大于起租时间', + iotSyncDetail: '同步物联网详情', + confirmRelease: '确认释放车辆?', + } + } +} \ No newline at end of file diff --git a/src/views/car/listOwnerCarList.vue b/src/views/car/listOwnerCarList.vue new file mode 100644 index 0000000..b6443a9 --- /dev/null +++ b/src/views/car/listOwnerCarList.vue @@ -0,0 +1,414 @@ + + + + + \ No newline at end of file diff --git a/src/views/car/parkingBoxManageLang.js b/src/views/car/parkingBoxManageLang.js new file mode 100644 index 0000000..594803e --- /dev/null +++ b/src/views/car/parkingBoxManageLang.js @@ -0,0 +1,122 @@ +export const messages = { + en: { + parkingBoxManage: { + searchTitle: 'Search Conditions', + boxIdPlaceholder: 'Please enter booth number', + boxNamePlaceholder: 'Please enter booth name', + tempCarInPlaceholder: 'Please select temporary car entry', + yes: 'Yes', + no: 'No', + searchBtn: 'Search', + resetBtn: 'Reset', + listTitle: 'Booth Information', + boxId: 'Booth Number', + boxName: 'Booth Name', + parkingLot: 'Parking Lot', + tempCarIn: 'Temporary Car Entry', + tempAuth: 'Temporary Car Audit', + fee: 'Chargeable', + blueCarIn: 'Already Present', + yelowCarIn: 'Not Present', + remark: 'Remark', + operation: 'Operation', + console: 'Console', + dataSource: 'Data comes from IoT system', + pagination: 'Pagination' + }, + addParkingBox: { + title: 'Add Booth', + boothName: 'Booth Name', + parkingLot: 'Parking Lot', + tempCarIn: 'Temporary Car Entry', + tempAuth: 'Temporary Car Audit', + fee: 'Chargeable', + blueCarIn: 'Already Present', + yelowCarIn: 'Not Present', + remark: 'Remark', + required: 'Required', + optional: 'Optional', + save: 'Save', + cancel: 'Cancel' + }, + editParkingBox: { + title: 'Edit Booth', + boothName: 'Booth Name', + parkingLot: 'Parking Lot', + tempCarIn: 'Temporary Car Entry', + tempAuth: 'Temporary Car Audit', + fee: 'Chargeable', + blueCarIn: 'Already Present', + yelowCarIn: 'Not Present', + remark: 'Remark', + save: 'Save', + cancel: 'Cancel' + }, + deleteParkingBox: { + title: 'Confirm Operation', + confirmDelete: 'Confirm delete booth?', + cancel: 'Cancel', + confirm: 'Confirm Delete' + } + }, + zh: { + parkingBoxManage: { + searchTitle: '查询条件', + boxIdPlaceholder: '请输入岗亭编号', + boxNamePlaceholder: '请输入岗亭名称', + tempCarInPlaceholder: '请选择临时车进场', + yes: '是', + no: '否', + searchBtn: '查询', + resetBtn: '重置', + listTitle: '岗亭信息', + boxId: '岗亭编号', + boxName: '岗亭名称', + parkingLot: '停车场', + tempCarIn: '临时车进场', + tempAuth: '临时车审核', + fee: '是否收费', + blueCarIn: '已在场', + yelowCarIn: '未在场', + remark: '备注', + operation: '操作', + console: '控制台', + dataSource: '数据来源于物联网系统,请到物联网系统管理数据', + pagination: '分页' + }, + addParkingBox: { + title: '添加岗亭', + boothName: '岗亭名称', + parkingLot: '停车场', + tempCarIn: '临时车进场', + tempAuth: '临时车审核', + fee: '是否收费', + blueCarIn: '已在场', + yelowCarIn: '未在场', + remark: '备注', + required: '必填', + optional: '选填', + save: '保存', + cancel: '取消' + }, + editParkingBox: { + title: '修改岗亭', + boothName: '岗亭名称', + parkingLot: '停车场', + tempCarIn: '临时车进场', + tempAuth: '临时车审核', + fee: '是否收费', + blueCarIn: '已在场', + yelowCarIn: '未在场', + remark: '备注', + save: '保存', + cancel: '取消' + }, + deleteParkingBox: { + title: '请确认您的操作', + confirmDelete: '确定删除岗亭?', + cancel: '点错了', + confirm: '确认删除' + } + } +} \ No newline at end of file diff --git a/src/views/car/parkingBoxManageList.vue b/src/views/car/parkingBoxManageList.vue new file mode 100644 index 0000000..4f84fea --- /dev/null +++ b/src/views/car/parkingBoxManageList.vue @@ -0,0 +1,222 @@ + + + + + \ No newline at end of file diff --git a/src/views/fee/buyCarMonthCardLang.js b/src/views/fee/buyCarMonthCardLang.js new file mode 100644 index 0000000..0e40fd4 --- /dev/null +++ b/src/views/fee/buyCarMonthCardLang.js @@ -0,0 +1,80 @@ +export const messages = { + en: { + buyCarMonthCard: { + title: 'Buy Monthly Card', + carNum: 'License Plate', + card: 'Monthly Card', + paymentMethod: 'Payment Method', + receivableAmount: 'Receivable Amount', + receivedAmount: 'Received Amount', + remark: 'Remark', + tip: 'Monthly cards need to be added in the IoT system and must be added to the parking lot where the vehicle is located', + placeholders: { + carNum: 'Required, please enter license plate number', + card: 'Required, please select monthly card', + paymentMethod: 'Required, please select payment method', + receivableAmount: 'Required, receivable amount', + receivedAmount: 'Required, received amount', + remark: 'Optional, please enter remark' + }, + rules: { + carNumRequired: 'License plate number is required', + cardRequired: 'Monthly card is required', + paymentMethodRequired: 'Payment method is required', + receivedAmountRequired: 'Received amount is required' + }, + warnings: { + carNotExist: 'Monthly rental car does not exist, please add it first', + carNoParkingSpace: 'Monthly rental car is not bound to a parking space' + }, + errors: { + getDictFailed: 'Failed to get payment methods', + queryCarFailed: 'Failed to query vehicle information', + getCardsFailed: 'Failed to get monthly card list', + saveFailed: 'Failed to save monthly card order' + }, + success: { + saveSuccess: 'Monthly card purchased successfully' + } + } + }, + zh: { + buyCarMonthCard: { + title: '购买月卡', + carNum: '车牌号', + card: '月卡', + paymentMethod: '支付方式', + receivableAmount: '应收金额', + receivedAmount: '实收金额', + remark: '备注', + tip: '月卡请到物联网系统添加,需要添加到车辆所在的停车场', + placeholders: { + carNum: '必填,请填写车牌号', + card: '必填,请选择月卡', + paymentMethod: '必填,请选择支付方式', + receivableAmount: '必填,应收金额', + receivedAmount: '必填,实收金额', + remark: '选填,请填写备注' + }, + rules: { + carNumRequired: '车牌号不能为空', + cardRequired: '月卡不能为空', + paymentMethodRequired: '支付方式不能为空', + receivedAmountRequired: '实收金额不能为空' + }, + warnings: { + carNotExist: '月租车不存在,请先添加为月租车', + carNoParkingSpace: '月租车没有绑定车位' + }, + errors: { + getDictFailed: '获取支付方式失败', + queryCarFailed: '查询车辆信息失败', + getCardsFailed: '获取月卡列表失败', + saveFailed: '保存月卡订单失败' + }, + success: { + saveSuccess: '月卡购买成功' + } + } + } +} \ No newline at end of file diff --git a/src/views/fee/buyCarMonthCardList.vue b/src/views/fee/buyCarMonthCardList.vue new file mode 100644 index 0000000..918cbdd --- /dev/null +++ b/src/views/fee/buyCarMonthCardList.vue @@ -0,0 +1,234 @@ + + + + + \ No newline at end of file -- libgit2 0.21.4