feat(energy): 创建前端 API 层(6个文件)和路由配置

This commit is contained in:
kkfluous
2026-03-16 01:07:00 +08:00
parent 2c6056c9d0
commit caaeb4c819
7 changed files with 547 additions and 0 deletions

View File

@@ -0,0 +1,111 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace EnergyAccountApi {
export interface Account {
id?: number;
customerId?: number;
customerName?: string;
balance?: number;
initBalance?: number;
accumulatedRecharge?: number;
accumulatedConsume?: number;
reminderThreshold?: number;
accountStatus?: number;
lastRechargeDate?: string;
version?: number;
createTime?: string;
}
export interface AccountSimple {
id: number;
customerId: number;
customerName: string;
}
export interface Summary {
totalCount: number;
totalBalance: number;
totalRecharge: number;
warningCount: number;
}
export interface ProjectAccount {
id?: number;
accountId?: number;
contractId?: number;
projectName?: string;
contractCode?: string;
balance?: number;
accumulatedRecharge?: number;
accumulatedConsume?: number;
}
export interface Flow {
id?: number;
accountId?: number;
flowType?: number;
bizType?: number;
amount?: number;
balanceBefore?: number;
balanceAfter?: number;
bizId?: number;
bizCode?: string;
remark?: string;
operatorId?: number;
createTime?: string;
}
}
export function getAccountPage(params: PageParam) {
return requestClient.get<PageResult<EnergyAccountApi.Account>>(
'/energy/account/page',
{ params },
);
}
export function getAccount(id: number) {
return requestClient.get<EnergyAccountApi.Account>(
'/energy/account/get',
{ params: { id } },
);
}
export function getAccountSummary() {
return requestClient.get<EnergyAccountApi.Summary>('/energy/account/summary');
}
export function getAccountSimpleList() {
return requestClient.get<EnergyAccountApi.AccountSimple[]>('/energy/account/simple-list');
}
export function rechargeAccount(customerId: number, amount: number, remark?: string) {
return requestClient.post('/energy/account/recharge', null, {
params: { customerId, amount, remark },
});
}
export function updateThreshold(id: number, threshold: number) {
return requestClient.put('/energy/account/update-threshold', null, {
params: { id, threshold },
});
}
export function getProjectAccountList(accountId: number) {
return requestClient.get<EnergyAccountApi.ProjectAccount[]>(
'/energy/account/project/list',
{ params: { accountId } },
);
}
export function getFlowPage(params: PageParam) {
return requestClient.get<PageResult<EnergyAccountApi.Flow>>(
'/energy/account/flow/page',
{ params },
);
}
export function exportAccount(params: any) {
return requestClient.download('/energy/account/export-excel', { params });
}

View File

@@ -0,0 +1,124 @@
import type { PageParam, PageResult } from '@vben/request';
import type { EnergyHydrogenDetailApi } from './hydrogen-detail';
import { requestClient } from '#/api/request';
export namespace EnergyBillApi {
export interface Bill {
id?: number;
billCode?: string;
energyType?: number;
customerId?: number;
customerName?: string;
contractId?: number;
stationId?: number;
stationName?: string;
cooperationType?: number;
billPeriodStart?: string;
billPeriodEnd?: string;
receivableAmount?: number;
actualAmount?: number;
adjustmentAmount?: number;
paidAmount?: number;
totalQuantity?: number;
detailCount?: number;
status?: number;
auditStatus?: number;
submitStatus?: number;
paymentStatus?: number;
auditRemark?: string;
auditTime?: string;
generateTime?: string;
createTime?: string;
}
export interface GenerateReq {
customerId: number;
contractId: number;
stationId: number;
billPeriodStart: string;
billPeriodEnd: string;
energyType?: number;
}
export interface Adjustment {
id?: number;
billId?: number;
detailId?: number;
adjustmentType?: number;
amount?: number;
reason?: string;
attachmentUrls?: string;
operatorId?: number;
operatorName?: string;
operateTime?: string;
createTime?: string;
}
}
export function getBillPage(params: PageParam) {
return requestClient.get<PageResult<EnergyBillApi.Bill>>(
'/energy/bill/page',
{ params },
);
}
export function getBill(id: number) {
return requestClient.get<EnergyBillApi.Bill>(
'/energy/bill/get',
{ params: { id } },
);
}
export function generateBill(data: EnergyBillApi.GenerateReq) {
return requestClient.post<number>('/energy/bill/generate', data);
}
export function batchGenerateByPeriod(billPeriod: string) {
return requestClient.post<Record<string, number>>(
'/energy/bill/batch-generate-by-period',
null,
{ params: { billPeriod } },
);
}
export function updateBill(data: any) {
return requestClient.put('/energy/bill/update', data);
}
export function auditBill(id: number, approved: boolean, remark?: string) {
return requestClient.post('/energy/bill/audit', null, {
params: { id, approved, remark },
});
}
export function deleteBill(id: number) {
return requestClient.delete('/energy/bill/delete', { params: { id } });
}
export function exportBill(params: any) {
return requestClient.download('/energy/bill/export-excel', { params });
}
export function getBillDetailList(billId: number) {
return requestClient.get<EnergyHydrogenDetailApi.Detail[]>(
'/energy/bill/detail-list',
{ params: { billId } },
);
}
export function getAdjustmentList(billId: number) {
return requestClient.get<EnergyBillApi.Adjustment[]>(
'/energy/bill/adjustment/list',
{ params: { billId } },
);
}
export function createAdjustment(data: EnergyBillApi.Adjustment) {
return requestClient.post<number>('/energy/bill/adjustment/create', data);
}
export function deleteAdjustment(id: number) {
return requestClient.delete('/energy/bill/adjustment/delete', { params: { id } });
}

View File

@@ -0,0 +1,62 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace EnergyHydrogenDetailApi {
export interface Detail {
id?: number;
stationId?: number;
stationName?: string;
customerId?: number;
customerName?: string;
contractId?: number;
vehicleId?: number;
plateNumber?: string;
hydrogenDate?: string;
hydrogenQuantity?: number;
costPrice?: number;
costAmount?: number;
customerPrice?: number;
customerAmount?: number;
auditStatus?: number;
deductionStatus?: number;
settlementStatus?: number;
billId?: number;
remark?: string;
createTime?: string;
}
}
export function getHydrogenDetailPage(params: PageParam) {
return requestClient.get<PageResult<EnergyHydrogenDetailApi.Detail>>(
'/energy/hydrogen-detail/page',
{ params },
);
}
export function getHydrogenDetail(id: number) {
return requestClient.get<EnergyHydrogenDetailApi.Detail>(
'/energy/hydrogen-detail/get',
{ params: { id } },
);
}
export function updateHydrogenDetail(data: EnergyHydrogenDetailApi.Detail) {
return requestClient.put('/energy/hydrogen-detail/update', data);
}
export function auditHydrogenDetail(id: number, approved: boolean, remark?: string) {
return requestClient.post('/energy/hydrogen-detail/audit', null, {
params: { id, approved, remark },
});
}
export function batchAuditHydrogenDetail(ids: number[], approved: boolean, remark?: string) {
return requestClient.post('/energy/hydrogen-detail/batch-audit', null, {
params: { ids: ids.join(','), approved, remark },
});
}
export function exportHydrogenDetail(params: any) {
return requestClient.download('/energy/hydrogen-detail/export-excel', { params });
}

View File

@@ -0,0 +1,115 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace EnergyHydrogenRecordApi {
export interface Record {
id?: number;
stationId?: number;
stationName?: string;
plateNumber?: string;
hydrogenDate?: string;
hydrogenQuantity?: number;
unitPrice?: number;
amount?: number;
mileage?: number;
sourceType?: number;
matchStatus?: number;
vehicleId?: number;
customerId?: number;
uploadBatchNo?: string;
createTime?: string;
}
export interface ImportPreview {
batchNo: string;
totalCount: number;
validCount: number;
duplicateCount: number;
errorCount: number;
records: RecordPreviewItem[];
duplicates: RecordPreviewItem[];
errors: ImportErrorItem[];
}
export interface RecordPreviewItem {
rowNum: number;
plateNumber: string;
hydrogenDate: string;
hydrogenQuantity: number;
unitPrice: number;
amount: number;
mileage: number;
isDuplicate: boolean;
}
export interface ImportErrorItem {
rowNum: number;
reason: string;
}
export interface ImportProgress {
current: number;
total: number;
status: string;
}
}
export function getHydrogenRecordPage(params: PageParam) {
return requestClient.get<PageResult<EnergyHydrogenRecordApi.Record>>(
'/energy/hydrogen-record/page',
{ params },
);
}
export function getHydrogenRecord(id: number) {
return requestClient.get<EnergyHydrogenRecordApi.Record>(
'/energy/hydrogen-record/get',
{ params: { id } },
);
}
export function createHydrogenRecord(data: EnergyHydrogenRecordApi.Record) {
return requestClient.post('/energy/hydrogen-record/create', data);
}
export function updateHydrogenRecord(data: EnergyHydrogenRecordApi.Record) {
return requestClient.put('/energy/hydrogen-record/update', data);
}
export function deleteHydrogenRecord(id: number) {
return requestClient.delete('/energy/hydrogen-record/delete', { params: { id } });
}
export function exportHydrogenRecord(params: any) {
return requestClient.download('/energy/hydrogen-record/export-excel', { params });
}
export function importPreview(stationId: number, file: File) {
const formData = new FormData();
formData.append('file', file);
formData.append('stationId', String(stationId));
return requestClient.post<EnergyHydrogenRecordApi.ImportPreview>(
'/energy/hydrogen-record/import-preview',
formData,
);
}
export function importConfirm(batchNo: string, duplicateStrategy: string) {
return requestClient.post<Record<string, number>>(
'/energy/hydrogen-record/import-confirm',
null,
{ params: { batchNo, duplicateStrategy } },
);
}
export function getImportProgress(batchNo: string) {
return requestClient.get<EnergyHydrogenRecordApi.ImportProgress>(
'/energy/hydrogen-record/import-progress',
{ params: { batchNo } },
);
}
export function batchMatch() {
return requestClient.post<Record<string, number>>('/energy/hydrogen-record/batch-match');
}

View File

@@ -0,0 +1,43 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace EnergyStationConfigApi {
export interface Config {
id?: number;
stationId?: number;
stationName?: string;
autoDeduct?: boolean;
autoMatch?: boolean;
cooperationType?: number;
remark?: string;
createTime?: string;
}
export interface ConfigSimple {
id: number;
stationId: number;
stationName: string;
}
}
export function getStationConfigPage(params: PageParam) {
return requestClient.get<PageResult<EnergyStationConfigApi.Config>>(
'/energy/station-config/page',
{ params },
);
}
export function getStationConfigSimpleList() {
return requestClient.get<EnergyStationConfigApi.ConfigSimple[]>(
'/energy/station-config/simple-list',
);
}
export function createStationConfig(data: EnergyStationConfigApi.Config) {
return requestClient.post('/energy/station-config/create', data);
}
export function updateStationConfig(data: EnergyStationConfigApi.Config) {
return requestClient.put('/energy/station-config/update', data);
}

View File

@@ -0,0 +1,38 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace EnergyStationPriceApi {
export interface Price {
id?: number;
stationId?: number;
stationName?: string;
customerId?: number;
customerName?: string;
costPrice?: number;
customerPrice?: number;
effectiveDate?: string;
expiryDate?: string;
status?: number;
createTime?: string;
}
}
export function getStationPricePage(params: PageParam) {
return requestClient.get<PageResult<EnergyStationPriceApi.Price>>(
'/energy/station-price/page',
{ params },
);
}
export function createStationPrice(data: EnergyStationPriceApi.Price) {
return requestClient.post('/energy/station-price/create', data);
}
export function updateStationPrice(data: EnergyStationPriceApi.Price) {
return requestClient.put('/energy/station-price/update', data);
}
export function deleteStationPrice(id: number) {
return requestClient.delete('/energy/station-price/delete', { params: { id } });
}

View File

@@ -0,0 +1,54 @@
import type { RouteRecordRaw } from 'vue-router';
const routes: RouteRecordRaw[] = [
{
path: '/energy',
name: 'EnergyCenter',
meta: {
title: '能源管理',
icon: 'lucide:zap',
keepAlive: true,
hideInMenu: true,
},
children: [
{
path: 'hydrogen-record',
name: 'EnergyHydrogenRecord',
component: () => import('#/views/energy/hydrogen-record/index.vue'),
},
{
path: 'hydrogen-detail',
name: 'EnergyHydrogenDetail',
component: () => import('#/views/energy/hydrogen-detail/index.vue'),
},
{
path: 'bill',
name: 'EnergyBill',
component: () => import('#/views/energy/bill/index.vue'),
},
{
path: String.raw`bill/detail/:id(\d+)`,
name: 'EnergyBillDetail',
meta: { title: '账单详情', activePath: '/energy/bill' },
component: () => import('#/views/energy/bill/detail.vue'),
},
{
path: 'account',
name: 'EnergyAccount',
component: () => import('#/views/energy/account/index.vue'),
},
{
path: 'station-price',
name: 'EnergyStationPrice',
component: () => import('#/views/energy/station-price/index.vue'),
},
{
path: 'station-config',
name: 'EnergyStationConfig',
component: () => import('#/views/energy/station-config/index.vue'),
},
],
},
];
export default routes;