From e83579dc5779f44135ff4efe37c80399da0aedc1 Mon Sep 17 00:00:00 2001 From: "Mr.j" <2221464500@qq.com> Date: Thu, 7 Aug 2025 16:46:44 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E5=8F=B0=E5=9F=BA=E7=A1=80=E9=A1=B5=E9=9D=A2=E6=90=AD=E5=BB=BA?= =?UTF-8?q?=E5=B9=B6=E5=AE=9E=E7=8E=B0=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/equipment/approval.ts | 49 ++ src/apis/equipment/type.ts | 114 +++ src/router/route.ts | 54 +- src/stores/modules/route.ts | 75 +- .../components/ApprovalActionModal.vue | 339 ++++++++ .../components/ApprovalDetailModal.vue | 362 ++++++++ .../approval/components/ApprovalSearch.vue | 240 ++++++ .../device-management/approval/index.vue | 813 ++++++++++++++++++ 8 files changed, 1997 insertions(+), 49 deletions(-) create mode 100644 src/apis/equipment/approval.ts create mode 100644 src/views/system-resource/device-management/approval/components/ApprovalActionModal.vue create mode 100644 src/views/system-resource/device-management/approval/components/ApprovalDetailModal.vue create mode 100644 src/views/system-resource/device-management/approval/components/ApprovalSearch.vue create mode 100644 src/views/system-resource/device-management/approval/index.vue diff --git a/src/apis/equipment/approval.ts b/src/apis/equipment/approval.ts new file mode 100644 index 0000000..7867d6e --- /dev/null +++ b/src/apis/equipment/approval.ts @@ -0,0 +1,49 @@ +import http from '@/utils/http' +import type { EquipmentApprovalReq, EquipmentApprovalResp, EquipmentApprovalListReq } from './type' + +/** + * 设备审批管理API + */ +export const equipmentApprovalApi = { + /** + * 分页查询待审批的设备采购申请 + */ + getPendingApprovals: (params: EquipmentApprovalListReq) => { + return http.get>>('/equipment/approval/pending', { params }) + }, + + /** + * 分页查询已审批的设备采购申请 + */ + getApprovedApprovals: (params: EquipmentApprovalListReq) => { + return http.get>>('/equipment/approval/approved', { params }) + }, + + /** + * 审批通过 + */ + approve: (approvalId: string, data: EquipmentApprovalReq) => { + return http.post>(`/equipment/approval/${approvalId}/approve`, data) + }, + + /** + * 审批拒绝 + */ + reject: (approvalId: string, data: EquipmentApprovalReq) => { + return http.post>(`/equipment/approval/${approvalId}/reject`, data) + }, + + /** + * 获取审批详情 + */ + getApprovalDetail: (approvalId: string) => { + return http.get>(`/equipment/approval/${approvalId}`) + }, + + /** + * 获取审批统计信息 + */ + getApprovalStats: () => { + return http.get>('/equipment/approval/stats') + } +} diff --git a/src/apis/equipment/type.ts b/src/apis/equipment/type.ts index 6509850..854fa3c 100644 --- a/src/apis/equipment/type.ts +++ b/src/apis/equipment/type.ts @@ -275,3 +275,117 @@ export interface EquipmentReq { /** 动态记录 */ dynamicRecord?: string } + +/** + * 设备审批状态枚举 + */ +export enum ApprovalStatus { + PENDING = 'PENDING', + APPROVED = 'APPROVED', + REJECTED = 'REJECTED' +} + +/** + * 设备审批业务类型枚举 + */ +export enum BusinessType { + PROCUREMENT = 'PROCUREMENT', + BORROW = 'BORROW', + RETURN = 'RETURN' +} + +/** + * 设备审批列表查询请求 + */ +export interface EquipmentApprovalListReq { + /** 设备名称 */ + equipmentName?: string + /** 申请人 */ + applicantName?: string + /** 审批状态 */ + approvalStatus?: ApprovalStatus + /** 业务类型 */ + businessType?: BusinessType + /** 申请时间开始 */ + applyTimeStart?: string + /** 申请时间结束 */ + applyTimeEnd?: string + /** 审批时间开始 */ + approvalTimeStart?: string + /** 审批时间结束 */ + approvalTimeEnd?: string + /** 当前页码 */ + page?: number + /** 页码(后端可能期望的字段名) */ + pageNum?: number + /** 每页大小 */ + pageSize?: number + /** 排序字段 */ + orderBy?: string + /** 排序方向 */ + orderDirection?: string +} + +/** + * 设备审批请求 + */ +export interface EquipmentApprovalReq { + /** 审批意见 */ + approvalComment?: string + /** 审批结果 */ + approvalResult: 'APPROVED' | 'REJECTED' + /** 审批人 */ + approverName?: string + /** 审批人ID */ + approverId?: string +} + +/** + * 设备审批响应 + */ +export interface EquipmentApprovalResp { + /** 审批ID */ + approvalId: string + /** 设备ID */ + equipmentId: string + /** 设备名称 */ + equipmentName: string + /** 设备类型 */ + equipmentType: string + /** 设备型号 */ + equipmentModel: string + /** 品牌 */ + brand?: string + /** 供应商名称 */ + supplierName?: string + /** 采购价格 */ + purchasePrice?: number + /** 总价 */ + totalPrice?: number + /** 数量 */ + quantity?: number + /** 申请人 */ + applicantName: string + /** 申请人ID */ + applicantId: string + /** 申请时间 */ + applyTime: string + /** 申请原因 */ + applyReason?: string + /** 业务类型 */ + businessType: BusinessType + /** 审批状态 */ + approvalStatus: ApprovalStatus + /** 审批人 */ + approverName?: string + /** 审批人ID */ + approverId?: string + /** 审批时间 */ + approvalTime?: string + /** 审批意见 */ + approvalComment?: string + /** 创建时间 */ + createTime: string + /** 更新时间 */ + updateTime: string +} diff --git a/src/router/route.ts b/src/router/route.ts index 1b3cd29..e112889 100644 --- a/src/router/route.ts +++ b/src/router/route.ts @@ -297,7 +297,7 @@ export const systemRoutes: RouteRecordRaw[] = [ name: 'AssetManagement', component: Layout, redirect: '/asset-management/device-management/device-center', - meta: { title: '资产管理', icon: 'property-safety', hidden: true, sort: 3 }, + meta: { title: '资产管理', icon: 'property-safety', hidden: false, sort: 3 }, children: [ { path: '/asset-management/device-management', @@ -340,49 +340,7 @@ export const systemRoutes: RouteRecordRaw[] = [ hidden: false, }, }, - { - path: '/asset-management/device-management/online', - name: 'DeviceOnline', - component: () => import('@/components/ParentView/index.vue'), - redirect: '/asset-management/device-management/online/drone', - meta: { - title: '在线管理', - icon: 'cloud', - hidden: false, - }, - children: [ - { - path: '/asset-management/device-management/online/drone', - name: 'DeviceDrone', - component: () => import('@/views/system-resource/device-management/index.vue'), - meta: { - title: '无人机', - icon: 'drone', - hidden: false, - }, - }, - { - path: '/asset-management/device-management/online/nest', - name: 'DeviceNest', - component: () => import('@/views/system-resource/device-management/index.vue'), - meta: { - title: '机巢', - icon: 'nest', - hidden: false, - }, - }, - { - path: '/asset-management/device-management/online/smart-terminal', - name: 'DeviceSmartTerminal', - component: () => import('@/views/system-resource/device-management/index.vue'), - meta: { - title: '其他智能终端', - icon: 'terminal', - hidden: false, - }, - }, - ], - }, + ], }, { @@ -1231,7 +1189,7 @@ export const systemRoutes: RouteRecordRaw[] = [ }, { path: '/system-resource/device-management/online', - name: 'DeviceOnline', + name: 'SystemResourceDeviceOnline', component: () => import('@/components/ParentView/index.vue'), redirect: '/system-resource/device-management/online/drone', meta: { @@ -1242,7 +1200,7 @@ export const systemRoutes: RouteRecordRaw[] = [ children: [ { path: '/system-resource/device-management/online/drone', - name: 'DeviceDrone', + name: 'SystemResourceDeviceDrone', component: () => import('@/views/system-resource/device-management/index.vue'), meta: { title: '无人机', @@ -1252,7 +1210,7 @@ export const systemRoutes: RouteRecordRaw[] = [ }, { path: '/system-resource/device-management/online/nest', - name: 'DeviceNest', + name: 'SystemResourceDeviceNest', component: () => import('@/views/system-resource/device-management/index.vue'), meta: { title: '机巢', @@ -1262,7 +1220,7 @@ export const systemRoutes: RouteRecordRaw[] = [ }, { path: '/system-resource/device-management/online/smart-terminal', - name: 'DeviceSmartTerminal', + name: 'SystemResourceDeviceSmartTerminal', component: () => import('@/views/system-resource/device-management/index.vue'), meta: { title: '其他智能终端', diff --git a/src/stores/modules/route.ts b/src/stores/modules/route.ts index 2001fea..5a474bd 100644 --- a/src/stores/modules/route.ts +++ b/src/stores/modules/route.ts @@ -212,6 +212,79 @@ const storeSetup = () => { { id: 2013, parentId: 2010, + title: '审批台', + type: 2, + path: '/asset-management/device-management/approval', + name: 'DeviceApproval', + component: 'system-resource/device-management/approval/index', + icon: 'check-circle', + isExternal: false, + isCache: false, + isHidden: false, + sort: 3, + }, + { + id: 2014, + parentId: 2010, + title: '在线管理', + type: 1, + path: '/asset-management/device-management/online', + name: 'DeviceOnline', + component: 'Layout', + redirect: '/asset-management/device-management/online/drone', + icon: 'cloud', + isExternal: false, + isCache: false, + isHidden: false, + sort: 4, + children: [ + { + id: 20141, + parentId: 2014, + title: '无人机', + type: 2, + path: '/asset-management/device-management/online/drone', + name: 'DeviceDrone', + component: 'system-resource/device-management/index', + icon: 'drone', + isExternal: false, + isCache: false, + isHidden: false, + sort: 1, + }, + { + id: 20142, + parentId: 2014, + title: '机巢', + type: 2, + path: '/asset-management/device-management/online/nest', + name: 'DeviceNest', + component: 'system-resource/device-management/index', + icon: 'nest', + isExternal: false, + isCache: false, + isHidden: false, + sort: 2, + }, + { + id: 20143, + parentId: 2014, + title: '其他智能终端', + type: 2, + path: '/asset-management/device-management/online/smart-terminal', + name: 'DeviceSmartTerminal', + component: 'system-resource/device-management/index', + icon: 'terminal', + isExternal: false, + isCache: false, + isHidden: false, + sort: 3, + }, + ], + }, + { + id: 2015, + parentId: 2010, title: '设备详情', type: 2, path: '/asset-management/device-management/device-detail/:id', @@ -221,7 +294,7 @@ const storeSetup = () => { isExternal: false, isCache: false, isHidden: true, - sort: 3, + sort: 5, }, ], }, diff --git a/src/views/system-resource/device-management/approval/components/ApprovalActionModal.vue b/src/views/system-resource/device-management/approval/components/ApprovalActionModal.vue new file mode 100644 index 0000000..5480187 --- /dev/null +++ b/src/views/system-resource/device-management/approval/components/ApprovalActionModal.vue @@ -0,0 +1,339 @@ + + + + + diff --git a/src/views/system-resource/device-management/approval/components/ApprovalDetailModal.vue b/src/views/system-resource/device-management/approval/components/ApprovalDetailModal.vue new file mode 100644 index 0000000..2312339 --- /dev/null +++ b/src/views/system-resource/device-management/approval/components/ApprovalDetailModal.vue @@ -0,0 +1,362 @@ + + + + + diff --git a/src/views/system-resource/device-management/approval/components/ApprovalSearch.vue b/src/views/system-resource/device-management/approval/components/ApprovalSearch.vue new file mode 100644 index 0000000..62bfba3 --- /dev/null +++ b/src/views/system-resource/device-management/approval/components/ApprovalSearch.vue @@ -0,0 +1,240 @@ + + + + + diff --git a/src/views/system-resource/device-management/approval/index.vue b/src/views/system-resource/device-management/approval/index.vue new file mode 100644 index 0000000..2afea74 --- /dev/null +++ b/src/views/system-resource/device-management/approval/index.vue @@ -0,0 +1,813 @@ + + + + + From d6f87cd0db3685f2c5808ee9820a1c69bcef23c2 Mon Sep 17 00:00:00 2001 From: "Mr.j" <2221464500@qq.com> Date: Thu, 7 Aug 2025 17:38:41 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E5=8F=B0=E7=9A=84=E6=90=9C=E7=B4=A2=E6=A1=86=E7=9C=8B=E4=B8=8D?= =?UTF-8?q?=E6=B8=85=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../approval/components/ApprovalSearch.vue | 63 +++++++++++++++++++ .../device-management/approval/index.vue | 16 +++++ 2 files changed, 79 insertions(+) diff --git a/src/views/system-resource/device-management/approval/components/ApprovalSearch.vue b/src/views/system-resource/device-management/approval/components/ApprovalSearch.vue index 62bfba3..e90f809 100644 --- a/src/views/system-resource/device-management/approval/components/ApprovalSearch.vue +++ b/src/views/system-resource/device-management/approval/components/ApprovalSearch.vue @@ -195,6 +195,14 @@ watch(() => props.loading, (newVal) => { diff --git a/src/views/project-management/contract/revenue-contract/index.vue b/src/views/project-management/contract/revenue-contract/index.vue index 6a6c018..0e79d54 100644 --- a/src/views/project-management/contract/revenue-contract/index.vue +++ b/src/views/project-management/contract/revenue-contract/index.vue @@ -1,28 +1,28 @@ \ No newline at end of file +