From 7b99040f9c1367c1b1ee647da204b699afa11b5c Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Sat, 26 Sep 2026 21:05:57 +0800 Subject: [PATCH] feat: add vehicle recharge approval workflow and pending UI Wire configurable workflow config, approval todo with approve/reject/disburse, apply submit and history, and block disburse board for in-approval rows. Co-authored-by: Cursor --- web-admin/src/api/pl/index.ts | 46 +- web-admin/src/router/modules/pl.ts | 28 + web-admin/src/utils/pl-display.ts | 24 + web-admin/src/utils/router/menu-icon.ts | 2 + .../columnFilterDefs.ts | 4 +- .../views/pl/vehicle-recharge-apply/index.vue | 85 ++- .../pl/vehicle-recharge-approval/index.vue | 383 +++++++++++ .../pl/vehicle-recharge-record/index.vue | 11 +- .../pl/vehicle-recharge-workflow/index.vue | 592 ++++++++++++++++++ 9 files changed, 1166 insertions(+), 9 deletions(-) create mode 100644 web-admin/src/views/pl/vehicle-recharge-approval/index.vue create mode 100644 web-admin/src/views/pl/vehicle-recharge-workflow/index.vue diff --git a/web-admin/src/api/pl/index.ts b/web-admin/src/api/pl/index.ts index 8a1a46ba1..1d8f9150f 100644 --- a/web-admin/src/api/pl/index.ts +++ b/web-admin/src/api/pl/index.ts @@ -1687,6 +1687,19 @@ export const menuBadgeApi = { // ETC/加油充值 API // ============================================================================= +export interface VehicleRechargeApproval { + id: string + applyId: string + approvalRound: number + nodeId?: string + nodeName?: string + approverId: string + approverName: string + approvalStatus: 'approved' | 'rejected' | 'disbursed' | string + approvalOpinion?: string + approvalTime: string +} + export interface VehicleRechargeApply { id: string applyNo: string @@ -1697,7 +1710,14 @@ export interface VehicleRechargeApply { attachmentUrls?: string applicantId: string applicantName?: string - status: 'pending' | 'disbursed' | 'cancelled' + status: 'draft' | 'pending' | 'in_approval' | 'rejected' | 'disbursed' | 'cancelled' | string + wfId?: string + currentNode?: string + currentNodeName?: string + currentNodeActionType?: 'approve' | 'disburse' | string + approvalRound?: number + approvals?: VehicleRechargeApproval[] + record?: VehicleRechargeRecord | null remark?: string createTime?: string updateTime?: string @@ -1751,7 +1771,7 @@ export interface VehicleRechargeDisburseBoardItem { applyDate: string odometerKm?: number | null applicantName?: string - applyStatus: 'pending' | 'disbursed' | 'cancelled' + applyStatus: 'draft' | 'pending' | 'in_approval' | 'rejected' | 'disbursed' | 'cancelled' | string applyRemark?: string recordId?: string rechargeOrderNo?: string @@ -1780,6 +1800,8 @@ export const vehicleRechargeApplyApi = { request.post('/transport/vehicle-recharge-apply/', data), update: (id: string, data: Partial) => request.put(`/transport/vehicle-recharge-apply/${id}`, data), + submit: (id: string) => + request.post(`/transport/vehicle-recharge-apply/${id}/submit`), cancel: (id: string) => request.post(`/transport/vehicle-recharge-apply/${id}/cancel`), delete: (ids: string) => request.delete(`/transport/vehicle-recharge-apply/${ids}`), @@ -1787,6 +1809,26 @@ export const vehicleRechargeApplyApi = { request.get('/transport/vehicle-recharge-apply/pending-options') } +export const vehicleRechargeApprovalApi = { + pending: (params?: Record) => + request.get('/transport/vehicle-recharge-approval/pending', { + params + }), + done: (params?: Record) => + request.get('/transport/vehicle-recharge-approval/done', { + params + }), + approve: (id: string, data?: { opinion?: string }) => + request.post( + `/transport/vehicle-recharge-approval/${id}/approve`, + data || {} + ), + reject: (id: string, data: { opinion?: string }) => + request.post(`/transport/vehicle-recharge-approval/${id}/reject`, data), + disburse: (id: string, data: Partial) => + request.post(`/transport/vehicle-recharge-approval/${id}/disburse`, data) +} + export const vehicleRechargeRecordApi = { disburseBoard: (params?: Record) => request.get( diff --git a/web-admin/src/router/modules/pl.ts b/web-admin/src/router/modules/pl.ts index cfaf70faa..a1abdc605 100644 --- a/web-admin/src/router/modules/pl.ts +++ b/web-admin/src/router/modules/pl.ts @@ -119,6 +119,13 @@ export const plRoutes: AppRouteRecord[] = [ component: '/pl/vehicle-recharge-apply/index', meta: { title: 'ETC/加油充值申请', keepAlive: false, menuCode: 'pl:vehicle-recharge-apply:list' } }, + { + id: 'PL_VEH_RECHARGE_APPROVAL', + name: 'PlVehicleRechargeApproval', + path: 'vehicle-recharge-approval', + component: '/pl/vehicle-recharge-approval/index', + meta: { title: '充值审批', keepAlive: false, menuCode: 'pl:vehicle-recharge-approval:list' } + }, { id: 'PL_VEH_RECHARGE_RECORD', name: 'PlVehicleRechargeRecord', @@ -126,6 +133,13 @@ export const plRoutes: AppRouteRecord[] = [ component: '/pl/vehicle-recharge-record/index', meta: { title: 'ETC/加油充值发放登记', keepAlive: false, menuCode: 'pl:vehicle-recharge-record:list' } }, + { + id: 'PL_VEH_RECHARGE_WF', + name: 'PlVehicleRechargeWorkflow', + path: 'vehicle-recharge-workflow', + component: '/pl/vehicle-recharge-workflow/index', + meta: { title: '充值审批流程', keepAlive: false, menuCode: 'pl:vehicle-recharge-workflow:list' } + }, { id: 'PL_VEH_MAINT_APPLY', name: 'PlVehicleMaintenanceApply', @@ -412,6 +426,20 @@ export const plRoutes: AppRouteRecord[] = [ redirect: '/pl/vehicle-mgmt/vehicle-recharge-record', meta: { title: 'ETC/加油充值发放登记', isHide: true } }, + { + id: 'PL_REDIRECT_VEH_RECHARGE_APPROVAL', + name: 'PlVehicleRechargeApprovalRedirect', + path: 'vehicle-recharge-approval', + redirect: '/pl/vehicle-mgmt/vehicle-recharge-approval', + meta: { title: '充值审批', isHide: true } + }, + { + id: 'PL_REDIRECT_VEH_RECHARGE_WORKFLOW', + name: 'PlVehicleRechargeWorkflowRedirect', + path: 'vehicle-recharge-workflow', + redirect: '/pl/vehicle-mgmt/vehicle-recharge-workflow', + meta: { title: '充值审批流程配置', isHide: true } + }, { id: 'PL_REDIRECT_VEH_MAINT_APPLY', name: 'PlVehicleMaintenanceApplyRedirect', diff --git a/web-admin/src/utils/pl-display.ts b/web-admin/src/utils/pl-display.ts index 6e6958837..b2718860e 100644 --- a/web-admin/src/utils/pl-display.ts +++ b/web-admin/src/utils/pl-display.ts @@ -637,7 +637,10 @@ export function buildFuelRegisterCopyText(row: { export function getPlRechargeApplyStatusLabel(status: string) { const map: Record = { + draft: '草稿', pending: '待发放', + in_approval: '审批中', + rejected: '已驳回', disbursed: '已发放', cancelled: '已作废' } @@ -646,13 +649,34 @@ export function getPlRechargeApplyStatusLabel(status: string) { export function getPlRechargeApplyStatusTagType(status: string) { const map: Record = { + draft: 'info', pending: 'warning', + in_approval: 'warning', + rejected: 'danger', disbursed: 'success', cancelled: 'info' } return map[status] || 'info' } +export function getPlRechargeApprovalStatusLabel(status: string) { + const map: Record = { + approved: '通过', + rejected: '驳回', + disbursed: '已发放' + } + return map[status] || status +} + +export function getPlRechargeApprovalStatusTagType(status: string) { + const map: Record = { + approved: 'success', + rejected: 'danger', + disbursed: 'primary' + } + return map[status] || 'info' +} + export const PL_GAS_STATION_PRESETS = ['中石化', '线上etc-app', '百链', '现金转账', '其他'] export const PL_MAINTENANCE_TYPE_PRESETS = ['保养', '维修', '年检'] diff --git a/web-admin/src/utils/router/menu-icon.ts b/web-admin/src/utils/router/menu-icon.ts index 7ec0f8cf1..6b80f333c 100644 --- a/web-admin/src/utils/router/menu-icon.ts +++ b/web-admin/src/utils/router/menu-icon.ts @@ -145,7 +145,9 @@ export const SIDEBAR_MENU_ICON_BY_CODE: Record = { 'pl:freight-disburse:list': 'ri:bank-card-line', 'pl:transport-address:list': 'ri:map-pin-line', 'pl:vehicle-recharge-apply:list': 'ri:gas-station-line', + 'pl:vehicle-recharge-approval:list': 'ri:checkbox-circle-line', 'pl:vehicle-recharge-record:list': 'ri:hand-coin-line', + 'pl:vehicle-recharge-workflow:list': 'ri:flow-chart', 'pl:vehicle-maintenance-apply:list': 'ri:tools-line', 'pl:vehicle-maintenance-process:list': 'ri:settings-3-line', 'pl:vehicle-urea-apply:list': 'ri:drop-line', diff --git a/web-admin/src/views/pl/vehicle-recharge-apply/columnFilterDefs.ts b/web-admin/src/views/pl/vehicle-recharge-apply/columnFilterDefs.ts index ace913c98..b8b5d42a1 100644 --- a/web-admin/src/views/pl/vehicle-recharge-apply/columnFilterDefs.ts +++ b/web-admin/src/views/pl/vehicle-recharge-apply/columnFilterDefs.ts @@ -6,7 +6,9 @@ const RECHARGE_TYPE_OPTIONS = [ ] const RECHARGE_STATUS_OPTIONS = [ - { value: 'pending', label: '待发放' }, + { value: 'draft', label: '草稿' }, + { value: 'in_approval', label: '审批中' }, + { value: 'rejected', label: '已驳回' }, { value: 'disbursed', label: '已发放' }, { value: 'cancelled', label: '已作废' } ] diff --git a/web-admin/src/views/pl/vehicle-recharge-apply/index.vue b/web-admin/src/views/pl/vehicle-recharge-apply/index.vue index 0c7161638..058c72aa5 100644 --- a/web-admin/src/views/pl/vehicle-recharge-apply/index.vue +++ b/web-admin/src/views/pl/vehicle-recharge-apply/index.vue @@ -20,7 +20,19 @@ + 提交 + + 编辑 @@ -28,7 +40,9 @@ @@ -338,7 +352,14 @@ modal-class="order-module-dialog-mask" append-to-body > -