diff --git a/src/api/iot/adminCarInoutApi.js b/src/api/iot/adminCarInoutApi.js new file mode 100644 index 0000000..bb50a11 --- /dev/null +++ b/src/api/iot/adminCarInoutApi.js @@ -0,0 +1,47 @@ +import request from '@/utils/request' + +// 获取车辆进出记录列表 +export function listAdminCarInoutDetail(params) { + return new Promise((resolve, reject) => { + request({ + url: '/iot.listAdminCarInoutDetail', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data, + total: res.total, + records: res.records + }) + } else { + reject(new Error(res.msg || '获取车辆进出记录失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 获取管理小区列表 +export function listAdminCommunitys(params) { + return new Promise((resolve, reject) => { + request({ + url: '/community.listAdminCommunitys', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data + }) + } else { + reject(new Error(res.msg || '获取管理小区列表失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/iot/adminChargeOrderApi.js b/src/api/iot/adminChargeOrderApi.js new file mode 100644 index 0000000..0fddcbb --- /dev/null +++ b/src/api/iot/adminChargeOrderApi.js @@ -0,0 +1,47 @@ +import request from '@/utils/request' + +// 获取充电订单列表 +export function listAdminChargeMachineOrder(params) { + return new Promise((resolve, reject) => { + request({ + url: '/iot.listAdminChargeMachineOrder', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data, + total: res.total + }) + } else { + reject(new Error(res.msg || '获取充电订单列表失败')) + } + }).catch(error => { + reject(error) + }) + }) +} + +// 获取小区列表 +export function listAdminCommunitys(params) { + return new Promise((resolve, reject) => { + request({ + url: '/community.listAdminCommunitys', + method: 'get', + params + }).then(response => { + const res = response.data + if (res.code === 0) { + resolve({ + data: res.data, + total: res.total + }) + } else { + reject(new Error(res.msg || '获取小区列表失败')) + } + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/iot/adminMeterRechargeApi.js b/src/api/iot/adminMeterRechargeApi.js new file mode 100644 index 0000000..d38f876 --- /dev/null +++ b/src/api/iot/adminMeterRechargeApi.js @@ -0,0 +1,41 @@ +import request from '@/utils/request' + +// 获取充值明细列表 +export function listAdminMeterCharge(params) { + return new Promise((resolve, reject) => { + request({ + url: '/iot.listAdminMeterCharge', + 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 listAdminCommunitys(params) { + return new Promise((resolve, reject) => { + request({ + url: '/community.listAdminCommunitys', + 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/iot/selectAdminCommunity.vue b/src/components/iot/selectAdminCommunity.vue index 8abc374..4e0289c 100644 --- a/src/components/iot/selectAdminCommunity.vue +++ b/src/components/iot/selectAdminCommunity.vue @@ -1,64 +1,99 @@ \ No newline at end of file diff --git a/src/i18n/commonLang.js b/src/i18n/commonLang.js index ea19027..cd5dc6b 100644 --- a/src/i18n/commonLang.js +++ b/src/i18n/commonLang.js @@ -30,7 +30,8 @@ export const messages = { resetPwdSuccess: 'Reset password successfully, new password is {pwd}, please change it in time', female: 'Female', male: 'Male', - all: 'All' + all: 'All', + refresh: 'Refresh' } }, zh: { @@ -64,7 +65,8 @@ export const messages = { resetPwdSuccess: '修改密码成功,密码为{pwd}请及时修改密码', female: '女', male: '男', - all: '全部' + all: '全部', + refresh: '刷新' } } } \ No newline at end of file diff --git a/src/i18n/index.js b/src/i18n/index.js index d98f9d8..2ed6ac6 100644 --- a/src/i18n/index.js +++ b/src/i18n/index.js @@ -81,6 +81,9 @@ import { messages as adminBarrierMessages } from '../views/iot/adminBarrierLang' import { messages as adminChargeMachineMessages } from '../views/iot/adminChargeMachineLang' import { messages as adminMeterMessages } from '../views/iot/adminMeterLang' import { messages as adminInoutMessages } from '../views/iot/adminInoutLang' +import { messages as adminCarInoutMessages } from '../views/iot/adminCarInoutLang' +import { messages as adminChargeOrderMessages } from '../views/iot/adminChargeOrderLang' +import { messages as adminMeterRechargeMessages } from '../views/iot/adminMeterRechargeLang' Vue.use(VueI18n) @@ -166,6 +169,9 @@ const messages = { ...adminChargeMachineMessages.en, ...adminMeterMessages.en, ...adminInoutMessages.en, + ...adminCarInoutMessages.en, + ...adminChargeOrderMessages.en, + ...adminMeterRechargeMessages.en, }, zh: { ...loginMessages.zh, @@ -247,6 +253,9 @@ const messages = { ...adminChargeMachineMessages.zh, ...adminMeterMessages.zh, ...adminInoutMessages.zh, + ...adminCarInoutMessages.zh, + ...adminChargeOrderMessages.zh, + ...adminMeterRechargeMessages.zh, } } diff --git a/src/router/index.js b/src/router/index.js index 8337bd6..a6ba365 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -387,10 +387,25 @@ const routes = [ component: () => import('@/views/iot/adminMeterList.vue') }, { - path:'/pages/iot/adminInout', - name:'/pages/iot/adminInout', + path: '/pages/iot/adminInout', + name: '/pages/iot/adminInout', component: () => import('@/views/iot/adminInoutList.vue') + }, + { + path: '/pages/iot/adminCarInout', + name: '/pages/iot/adminCarInout', + component: () => import('@/views/iot/adminCarInoutList.vue') + }, + { + path:'/pages/iot/adminChargeOrder', + name:'/pages/iot/adminChargeOrder', + component: () => import('@/views/iot/adminChargeOrderList.vue') }, + { + path:'/pages/iot/adminMeterRecharge', + name:'/pages/iot/adminMeterRecharge', + component: () => import('@/views/iot/adminMeterRechargeList.vue') + }, // 其他子路由可以在这里添加 ] }, diff --git a/src/views/iot/adminCarInoutLang.js b/src/views/iot/adminCarInoutLang.js new file mode 100644 index 0000000..53078da --- /dev/null +++ b/src/views/iot/adminCarInoutLang.js @@ -0,0 +1,122 @@ +export const messages = { + en: { + adminCarInout: { + search: { + title: 'Search Conditions', + carNum: 'Please enter license plate number', + state: 'Please select vehicle status', + startTime: 'Please select start time', + endTime: 'Please select end time', + carType: 'Please select license plate type' + }, + list: { + title: 'In/Out Records' + }, + table: { + photo: 'In Photo', + communityName: 'Community Name', + ciId: 'In/Out ID', + state: 'Vehicle Status', + carNum: 'License Plate', + paNum: 'Parking Lot', + feeName: 'Billing Rule', + carTypeName: 'Plate Type', + inTime: 'In Time', + outTime: 'Out Time', + parkingTime: 'Parking Time', + charge: 'Charge Amount', + remark: 'Remark' + }, + state: { + select: 'Please select vehicle status', + inStatus: 'In Status', + paid: 'Payment Completed', + outStatus: 'Out Status', + repay: 'Payment Timeout Repay', + in: 'In', + out: 'Out' + }, + carType: { + select: 'Please select license plate type', + temp: 'Temporary', + sale: 'Sale', + monthly: 'Monthly', + white: 'White List', + black: 'Black List', + internal: 'Internal', + free: 'Free' + }, + community: { + all: 'All Communities' + }, + time: { + hour: 'hour', + min: 'min' + }, + action: { + out: 'Out' + }, + fetchError: 'Failed to fetch in/out records' + } + }, + zh: { + adminCarInout: { + search: { + title: '查询条件', + carNum: '请输入车牌号', + state: '请选择车辆状态', + startTime: '请选择开始时间', + endTime: '请选择结束时间', + carType: '请选择车牌类型' + }, + list: { + title: '进出记录' + }, + table: { + photo: '进场图', + communityName: '小区名称', + ciId: '进出场编号', + state: '车辆状态', + carNum: '车牌号', + paNum: '停车场', + feeName: '计费规则', + carTypeName: '车牌类型', + inTime: '进场时间', + outTime: '出场时间', + parkingTime: '停车时间', + charge: '收费金额', + remark: '说明' + }, + state: { + select: '请选择车辆状态', + inStatus: '进场状态', + paid: '支付完成', + outStatus: '离场状态', + repay: '支付超时重新支付', + in: '进场', + out: '出场' + }, + carType: { + select: '请选择车牌类型', + temp: '临时车', + sale: '出售车辆', + monthly: '月租车', + white: '白名单', + black: '黑名单', + internal: '内部车', + free: '免费车' + }, + community: { + all: '全部小区' + }, + time: { + hour: '小时', + min: '分' + }, + action: { + out: '出场' + }, + fetchError: '获取进出记录失败' + } + } +} \ No newline at end of file diff --git a/src/views/iot/adminCarInoutList.vue b/src/views/iot/adminCarInoutList.vue new file mode 100644 index 0000000..7e0a801 --- /dev/null +++ b/src/views/iot/adminCarInoutList.vue @@ -0,0 +1,211 @@ + + + + + \ No newline at end of file diff --git a/src/views/iot/adminChargeOrderLang.js b/src/views/iot/adminChargeOrderLang.js new file mode 100644 index 0000000..924cf86 --- /dev/null +++ b/src/views/iot/adminChargeOrderLang.js @@ -0,0 +1,112 @@ +export const messages = { + en: { + adminChargeOrder: { + search: { + title: 'Search Conditions', + orderId: 'Order ID', + orderIdPlaceholder: 'Please enter order ID', + personName: 'Name', + personNamePlaceholder: 'Please enter name', + personTel: 'Phone', + personTelPlaceholder: 'Please enter phone number', + machineName: 'Charger Name', + machineNamePlaceholder: 'Please enter charger name', + portName: 'Port', + portNamePlaceholder: 'Please enter port name', + state: 'Status', + statePlaceholder: 'Please select status', + startTime: 'Start Time', + startTimePlaceholder: 'Please select start time', + endTime: 'End Time', + endTimePlaceholder: 'Please select end time' + }, + table: { + title: 'Charging Orders', + orderId: 'Order ID', + personName: 'Name', + personTel: 'Phone', + machineName: 'Charger', + portName: 'Port', + chargeHours: 'Charging Hours', + byQuantity: 'By Quantity', + hours: 'hours', + energy: 'Energy', + startTime: 'Start Time', + endTime: 'End Time', + acctDetailId: 'Account', + durationPrice: 'Electricity Fee', + servicePrice: 'Service Fee', + amount: 'Amount', + stateName: 'Status', + remark: 'Remark', + createTime: 'Create Time' + }, + state: { + all: 'All Status', + charging: 'Charging', + completed: 'Completed', + failed: 'Failed' + }, + community: { + all: 'All Communities', + fetchError: 'Failed to load communities' + }, + fetchError: 'Failed to load charging orders' + } + }, + zh: { + adminChargeOrder: { + search: { + title: '查询条件', + orderId: '订单编号', + orderIdPlaceholder: '请输入订单编号', + personName: '名称', + personNamePlaceholder: '请输入名称', + personTel: '手机号', + personTelPlaceholder: '请输入手机号', + machineName: '充电桩名称', + machineNamePlaceholder: '请输入充电桩名称', + portName: '插槽', + portNamePlaceholder: '请输入插槽', + state: '状态', + statePlaceholder: '请选择状态', + startTime: '开始时间', + startTimePlaceholder: '请选择开始时间', + endTime: '结束时间', + endTimePlaceholder: '请选择结束时间' + }, + table: { + title: '充电订单', + orderId: '编号', + personName: '名称', + personTel: '手机号', + machineName: '充电桩', + portName: '插槽', + chargeHours: '充电小时', + byQuantity: '按量充电', + hours: '小时', + energy: '充电量', + startTime: '开始时间', + endTime: '结束时间', + acctDetailId: '扣款账户', + durationPrice: '电费', + servicePrice: '服务费', + amount: '扣款金额', + stateName: '插座状态', + remark: '说明', + createTime: '创建时间' + }, + state: { + all: '全部状态', + charging: '充电中', + completed: '充电完成', + failed: '充电失败' + }, + community: { + all: '全部小区', + fetchError: '获取小区列表失败' + }, + fetchError: '获取充电订单失败' + } + } +} \ No newline at end of file diff --git a/src/views/iot/adminChargeOrderList.vue b/src/views/iot/adminChargeOrderList.vue new file mode 100644 index 0000000..1a75a11 --- /dev/null +++ b/src/views/iot/adminChargeOrderList.vue @@ -0,0 +1,195 @@ + + + + + \ No newline at end of file diff --git a/src/views/iot/adminMeterRechargeLang.js b/src/views/iot/adminMeterRechargeLang.js new file mode 100644 index 0000000..a77d722 --- /dev/null +++ b/src/views/iot/adminMeterRechargeLang.js @@ -0,0 +1,80 @@ +export const messages = { + en: { + adminMeterRecharge: { + search: { + title: 'Search Conditions' + }, + list: { + title: 'Recharge Details' + }, + allCommunities: 'All Communities', + machineName: 'Machine Name', + machineNamePlaceholder: 'Please enter machine name', + address: 'Address', + addressPlaceholder: 'Please enter address', + state: 'State', + statePlaceholder: 'Please select recharge state', + stateWaiting: 'Waiting', + stateFailed: 'Failed', + stateCompleted: 'Completed', + roomName: 'Room', + roomNamePlaceholder: 'Please enter room number (Building-Unit-Room)', + startTime: 'Start Time', + startTimePlaceholder: 'Please enter start time', + endTime: 'End Time', + endTimePlaceholder: 'Please enter end time', + table: { + communityName: 'Community Name', + roomName: 'Room', + typeName: 'Meter Type', + machineName: 'Meter Name', + address: 'Meter Number', + chargeMoney: 'Charge Amount', + chargeDegrees: 'Charge Degrees', + createTime: 'Charge Time', + state: 'Charge State', + remark: 'Remark' + }, + fetchError: 'Failed to fetch recharge details' + } + }, + zh: { + adminMeterRecharge: { + search: { + title: '查询条件' + }, + list: { + title: '充值明细' + }, + allCommunities: '全部小区', + machineName: '表名称', + machineNamePlaceholder: '请填写名称', + address: '表号', + addressPlaceholder: '请填写表号', + state: '充值状态', + statePlaceholder: '请选择充值状态', + stateWaiting: '等待', + stateFailed: '失败', + stateCompleted: '完成', + roomName: '房屋', + roomNamePlaceholder: '请填写房屋编号 楼栋-单元-房屋', + startTime: '开始时间', + startTimePlaceholder: '请输入开始时间', + endTime: '结束时间', + endTimePlaceholder: '请输入结束时间', + table: { + communityName: '小区名称', + roomName: '房屋', + typeName: '表类型', + machineName: '表名称', + address: '表号', + chargeMoney: '充值金额', + chargeDegrees: '充值度数', + createTime: '充值时间', + state: '充值状态', + remark: '说明' + }, + fetchError: '获取充值明细失败' + } + } +} \ No newline at end of file diff --git a/src/views/iot/adminMeterRechargeList.vue b/src/views/iot/adminMeterRechargeList.vue new file mode 100644 index 0000000..0cd28c6 --- /dev/null +++ b/src/views/iot/adminMeterRechargeList.vue @@ -0,0 +1,215 @@ + + + + + \ No newline at end of file