feat(energy): 创建前端 API 层(6个文件)和路由配置
This commit is contained in:
111
apps/web-antd/src/api/energy/account.ts
Normal file
111
apps/web-antd/src/api/energy/account.ts
Normal 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 });
|
||||
}
|
||||
124
apps/web-antd/src/api/energy/bill.ts
Normal file
124
apps/web-antd/src/api/energy/bill.ts
Normal 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 } });
|
||||
}
|
||||
62
apps/web-antd/src/api/energy/hydrogen-detail.ts
Normal file
62
apps/web-antd/src/api/energy/hydrogen-detail.ts
Normal 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 });
|
||||
}
|
||||
115
apps/web-antd/src/api/energy/hydrogen-record.ts
Normal file
115
apps/web-antd/src/api/energy/hydrogen-record.ts
Normal 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');
|
||||
}
|
||||
43
apps/web-antd/src/api/energy/station-config.ts
Normal file
43
apps/web-antd/src/api/energy/station-config.ts
Normal 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);
|
||||
}
|
||||
38
apps/web-antd/src/api/energy/station-price.ts
Normal file
38
apps/web-antd/src/api/energy/station-price.ts
Normal 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 } });
|
||||
}
|
||||
54
apps/web-antd/src/router/routes/modules/energy.ts
Normal file
54
apps/web-antd/src/router/routes/modules/energy.ts
Normal 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;
|
||||
Reference in New Issue
Block a user