diff --git a/src/api/order.ts b/src/api/order.ts index 736f20c..f51b903 100644 --- a/src/api/order.ts +++ b/src/api/order.ts @@ -1,5 +1,5 @@ import http from '@/utils/http' -import type { ApiResponse, Order, OrderDetailResponse, ListParams, ApprovalParams } from '@/types' +import type { ApiResponse, Order, OrderDetailResponse, ListParams, ApprovalParams, CompletedApprovalItem, CompletedListParams } from '@/types' import type { AxiosResponse } from 'axios' /** @@ -62,4 +62,22 @@ export const submitApproval = (params: any): Promise>> => { + // 创建FormData对象 + const formData = new FormData() + + // 添加参数到FormData + formData.append('page', params.page.toString()) + formData.append('pageSize', params.pageSize.toString()) + if (params.businessName) formData.append('businessName', params.businessName) + + return http.post('/flow/completed/list', formData) } \ No newline at end of file diff --git a/src/store/order.ts b/src/store/order.ts index 8c2d3d9..5d821c9 100644 --- a/src/store/order.ts +++ b/src/store/order.ts @@ -1,9 +1,9 @@ import { defineStore } from 'pinia' -import type { Order, OrderDetailResponse, ListParams } from '@/types' -import { getOrderList, getOrderDetail } from '@/api/order' +import type { Order, OrderDetailResponse, ListParams, CompletedApprovalItem, CompletedListParams } from '@/types' +import { getOrderList, getOrderDetail, getCompletedOrderList } from '@/api/order' interface OrderState { - // 列表相关 + // 待审批列表相关 orderList: Order[] loading: boolean finished: boolean @@ -12,6 +12,15 @@ interface OrderState { total: number keyword: string + // 已审批列表相关 + completedList: CompletedApprovalItem[] + completedLoading: boolean + completedFinished: boolean + completedCurrentPage: number + completedPageSize: number + completedTotal: number + completedKeyword: string + // 详情相关 currentOrder: any | null // 临时改为any来避免类型问题 detailLoading: boolean @@ -19,6 +28,7 @@ interface OrderState { export const useOrderStore = defineStore('order', { state: (): OrderState => ({ + // 待审批列表状态 orderList: [], loading: false, finished: false, @@ -27,6 +37,15 @@ export const useOrderStore = defineStore('order', { total: 0, keyword: '', + // 已审批列表状态 + completedList: [], + completedLoading: false, + completedFinished: false, + completedCurrentPage: 1, + completedPageSize: 20, + completedTotal: 0, + completedKeyword: '', + currentOrder: null, detailLoading: false }), @@ -41,8 +60,11 @@ export const useOrderStore = defineStore('order', { // 获取当前用户信息 currentUser: (state) => state.currentOrder?.user, - // 检查是否还有更多数据 - hasMore: (state) => state.orderList.length < state.total + // 检查待审批是否还有更多数据 + hasMore: (state) => state.orderList.length < state.total, + + // 检查已审批是否还有更多数据 + completedHasMore: (state) => state.completedList.length < state.completedTotal }, actions: { @@ -78,16 +100,17 @@ export const useOrderStore = defineStore('order', { } this.total = total - this.currentPage++ // 判断是否已加载完所有数据 - if (this.orderList.length >= total) { + if (this.orderList.length >= total || rows.length === 0) { this.finished = true + } else { + // 只有当还有更多数据时才递增页码 + this.currentPage++ } return response } catch (error) { - console.error('加载订单列表失败:', error) throw error } finally { this.loading = false @@ -107,30 +130,24 @@ export const useOrderStore = defineStore('order', { */ async fetchOrderDetail(id: string | number) { this.detailLoading = true - console.log('开始获取订单详情,ID:', id) + try { const response = await getOrderDetail(id) - console.log('API响应:', response) - console.log('响应数据:', response.data) - console.log('实际数据:', response.data.data) + // 直接获取数据对象 const orderData = response.data.data - console.log('订单数据对象:', orderData) + // 确保数据存在再赋值 if (orderData) { this.currentOrder = orderData - console.log('赋值后的存储数据:', this.currentOrder) - console.log('项目订单信息:', this.currentOrder.projectOrderInfo) - } else { - console.error('订单数据为空') } return response } catch (error) { - console.error('获取订单详情失败:', error) + throw error } finally { this.detailLoading = false @@ -144,16 +161,95 @@ export const useOrderStore = defineStore('order', { this.currentOrder = null }, + /** + * 加载已审批列表 + */ + async loadCompletedOrderList(refresh = false) { + + // 如果已经加载完所有数据且不是刷新操作,直接返回 + if (this.completedFinished && !refresh) { + return Promise.resolve() + } + + if (refresh) { + this.completedCurrentPage = 1 + this.completedFinished = false + this.completedList = [] + } + + this.completedLoading = true + + try { + const params: CompletedListParams = { + page: this.completedCurrentPage, + pageSize: this.completedPageSize, + businessName: this.completedKeyword || undefined + } + + + const response = await getCompletedOrderList(params) + + const { total, rows } = response.data + + + if (refresh) { + this.completedList = rows + } else { + this.completedList.push(...rows) + } + + this.completedTotal = total + + // 判断是否已加载完所有数据 + if (this.completedList.length >= total || rows.length === 0) { + this.completedFinished = true + console.log('已审批列表加载完成') + } else { + // 只有当还有更多数据时才递增页码 + this.completedCurrentPage++ + } + return response + } catch (error) { + console.error('加载已审批列表失败:', error) + // 发生错误时重置加载状态,但不标记为完成 + this.completedLoading = false + throw error + } finally { + this.completedLoading = false + } + }, + + /** + * 搜索已审批订单 + */ + async searchCompletedOrders(keyword: string) { + this.completedKeyword = keyword + await this.loadCompletedOrderList(true) + }, + /** * 重置列表状态 */ resetListState() { + // 重置待审批列表状态 this.orderList = [] this.currentPage = 1 this.finished = false this.loading = false this.keyword = '' this.total = 0 + }, + + /** + * 重置已审批列表状态 + */ + resetCompletedListState() { + this.completedList = [] + this.completedCurrentPage = 1 + this.completedFinished = false + this.completedLoading = false + this.completedKeyword = '' + this.completedTotal = 0 } } }) \ No newline at end of file diff --git a/src/types/index.ts b/src/types/index.ts index 71fa40b..d4a2924 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -196,4 +196,46 @@ export interface ApprovalParams { updateBy?: string updateTime?: string [property: string]: any +} + +// 已审批列表项类型 +export interface CompletedApprovalItem { + allApproveUserName: string + applyTime: string + applyUserName: string + approveOpinion: string + approveStatus: ApprovalStatus + approveTime: string + approveUser: string + approveUserName: string + businessId: number + businessKey: string + businessName: string + createBy?: string + createTime?: string + extendField1?: string + extendField2?: string + formKey?: string + id?: number + nextAllApproveUserName: string + processInstanceId: string + processKey: string + processName: string + recoveryType?: number + remark?: string + roleName: string + taskId: string + taskName: string + taxRateData?: any + todoId: string + updateBy?: string + updateTime?: string + variables?: any +} + +// 已审批列表查询参数 +export interface CompletedListParams { + businessName?: string + page: number + pageSize: number } \ No newline at end of file diff --git a/src/views/Detail/index.vue b/src/views/Detail/index.vue index 123342b..86493ba 100644 --- a/src/views/Detail/index.vue +++ b/src/views/Detail/index.vue @@ -17,9 +17,12 @@
{{ currentOrderInfo.projectName }}REV.{{ currentOrderInfo.versionCode }}
-
+
待审批
+
+ 已审批 +
@@ -191,7 +194,7 @@ @@ -236,7 +239,7 @@ @@ -281,7 +284,7 @@ @@ -514,6 +517,11 @@ const isBusinessApproval = computed(() => { return currentOrder.value?.todo?.taskName?.startsWith('商务') }) +// 是否禁用税率输入框 +const isTaxRateDisabled = computed(() => { + return !isBusinessApproval.value || route.query.readonly === 'true' +}) + // Tab页签 const activeTab = ref('order') @@ -528,7 +536,11 @@ const hasProductInfo = computed(() => { }) const showApprovalButtons = computed(() => { - // 直接展示审批按钮,无需条件控制 + // 如果是只读模式(来自已审批列表),则不显示审批按钮 + if (route.query.readonly === 'true') { + return false + } + // 其他情况显示审批按钮 return true }) @@ -867,6 +879,12 @@ onMounted(async () => { font-size: 12px; font-weight: 500; border: 1px solid #FFD591; + + &.completed { + background: #F6FFED; + color: #52C41A; + border: 1px solid #B7EB8F; + } } .tab-content { diff --git a/src/views/List/index.vue b/src/views/List/index.vue index 0a6efcb..c88c084 100644 --- a/src/views/List/index.vue +++ b/src/views/List/index.vue @@ -4,7 +4,7 @@
- - - - -
-
-
{{ order.orderCode }}
-
- 待审批 + + + + + + +
+
+
{{ order.orderCode }}
+
+ 待审批 +
+
+ +
+
+ 项目名称: + {{ order.projectName }} +
+
+ 客户名称: + {{ order.customerName }} +
+
+ 订单金额: + {{ formatAmount(order.shipmentAmount) }} +
+
+ 创建时间: + {{ formatDate(order.createTime, 'YYYY-MM-DD HH:mm') }} +
+
-
- -
-
- 项目名称: - {{ order.projectName }} -
-
- 客户名称: - {{ order.customerName }} -
-
- 订单金额: - {{ formatAmount(order.shipmentAmount) }} -
-
- 创建时间: - {{ formatDate(order.createTime, 'YYYY-MM-DD HH:mm') }} -
-
-
- -
- -
- - + +
+ +
+ + + + + + + + +
+
+
{{ item.businessKey }}
+
+ {{ getCompletedStatusText(item.approveStatus) }} +
+
+ +
+
+ 合同名称: + {{ item.businessName }} +
+
+ 流程名称: + {{ item.processName }} +
+
+ 发起人: + {{ item.applyUserName }} +
+
+ 审批时间: + {{ item.approveTime }} +
+
+ 审批意见: + {{ item.approveOpinion }} +
+
+
+ + +
+ +
+
+
+
+
@@ -144,10 +286,33 @@ onMounted(() => {