2025-09-03 | p-honggang.li | ![]() |
2025-09-03 | p-honggang.li | ![]() |
2025-09-03 | p-honggang.li | ![]() |
src/api/orderApi.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/api/pointsApi.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/api/sysUser.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/api/workFlowApi.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/utils/orderWorkflow.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/approveManage/tradeApproval/list.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/layout/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/productManage/productPriceViewer/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/tradeManage/buyer/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/tradeManage/confirm/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/tradeManage/evaluate/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views_back/layout/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/orderApi.ts
@@ -123,7 +123,17 @@ method: 'get' }) as ApiPromise }, updateOrderStatusToIsEvaluate(orderId: string): ApiPromise { return createAxios({ url: `${url}/status/isEvaluate`, method: 'post', params: { orderId } }) as ApiPromise }, updateOrderStatusToNext(orderId: string): ApiPromise { return createAxios({ url: `${url}/status/next`, src/api/pointsApi.ts
@@ -99,7 +99,7 @@ }, // 使用专门的积分扣减接口 deductPointsByFlow(userId: string, unitId: string, points: number, orderId: string, remark?: string, dataCategory?: string): ApiPromise { deductPointsByFlow(userId: string, unitId: string, points: number, orderId: string, remark?: string, dataCategory?: string, providerId?: String): ApiPromise { return createAxios({ url: `${url}user/deduct`, // 使用新的专门积分扣减接口 method: 'post', @@ -110,7 +110,8 @@ orderId, remark: remark || `订单${orderId}交易扣减积分`, dataCategory: dataCategory || 'resource_transaction', dataType: 1 // 1表示消耗 dataType: 1, // 1表示消耗 providerId: providerId }, }) as ApiPromise }, src/api/sysUser.ts
@@ -26,6 +26,7 @@ // 获取用户详情 getUserdetail(data: object = {}): ApiPromise { return createAxios({ baseURL: '/api', url: `${url}/detail`, headers: { 'Content-Type': 'application/json;charset=UTF-8' src/api/workFlowApi.ts
New file @@ -0,0 +1,15 @@ import createAxios from '@/utils/axios' const workFlowApi = { getWorkFlowParams(data: object = {}) : ApiPromise{ return createAxios({ baseURL: '/api', url: `/approval/templateRelation/relationByType`, headers: { 'Content-Type': 'application/json;charset=UTF-8' }, data: data }) as ApiPromise } } export default workFlowApi src/main.ts
@@ -11,17 +11,17 @@ // import pagination from '@/components/Pagination/index.vue' import store from '@/stores' // pinia状态管理器全局调用 import directives from '@/directives/index' import FcDesigner from '@form-create/designer'; import formCreate from '@form-create/element-ui'; // 引入 FormCreate // import FcDesigner from '@form-create/designer'; // import formCreate from '@form-create/element-ui'; // 引入 FormCreate const app = createApp(App) app.use(store) app.use(router) app.use(ElementPlus) app.use(directives) app.use(FcDesigner); app.use(FcDesigner.formCreate); app.use(formCreate); // app.use(FcDesigner); // app.use(FcDesigner.formCreate); // app.use(formCreate); for (const [key, component] of Object.entries(ElementPlusIconsVue)) { app.component(key, component) } src/utils/orderWorkflow.ts
@@ -20,7 +20,8 @@ AUTHORIZE = '授权', CONFIRM_TRADE = '交易确认', EVALUATE = '评价', CANCEL_ORDER = '取消订单' CANCEL_ORDER = '取消订单', COMPLETED = '已完成' } // 页面类型枚举 src/views/approveManage/tradeApproval/list.vue
@@ -820,12 +820,16 @@ gap: 20px; align-items: center; overflow: hidden; .status-item{ flex-direction: row-reverse; } .order-item { display: flex; align-items: center; gap: 8px; flex-shrink: 0; flex: 1; .label { color: #909399; src/views/layout/index.vue
@@ -129,7 +129,7 @@ .content-wrapper { width: 100%; height: calc(100vh - 70px); height: calc(100vh); display: flex; } .content-wrapperall{ src/views/productManage/productPriceViewer/index.vue
@@ -357,6 +357,7 @@ import { useUserInfo } from '@/stores/modules/userInfo' import { queryUserDetail } from '@/api/userInfo' import productApi from '@/api/productApi' import workFlowApi from '@/api/workFlowApi' const route = useRoute() @@ -831,16 +832,25 @@ // 调用工作流接口发起审批流程,拿到流程实例ID后回写订单workflow_id try { // 根据是否包含协议明细,配置不同流程定义与业务Key(先用静态值占位) const processdefId = hasAGREEMENT ? 'Process_Agreement_Static' : 'Process_Points_Static' // const processdefId = hasAGREEMENT ? 'Process_Agreement_Static' : 'Process_Points_Static' const businessKey = hasAGREEMENT ? 'agreement_biz_key' : 'points_biz_key' const wfRes: any = await orderApi.startWorkflowAndComplete({ processdefId, userid: String(currentUserId.value || ''), businessKey const type = hasAGREEMENT ? 'trade_agreement' : 'trade_point'; // 获取工作流参数 const wkParamsRes: any = await workFlowApi.getWorkFlowParams({ type: type, unitId: '1' }) if (wfRes?.code === 200 && wfRes.data?.processinstId) { await orderApi.updateWorkflowId(data.orderId, wfRes.data.processinstId) if(wkParamsRes?.code === 200 && wkParamsRes.data?.processTemplateId){ const wfRes: any = await orderApi.startWorkflowAndComplete({ processdefId: wkParamsRes.data.processTemplateId, userid: String(currentUserId.value || ''), businessKey: businessKey }) if (wfRes?.code === 200 && wfRes.data?.processinstId) { await orderApi.updateWorkflowId(data.orderId, wfRes.data.processinstId) } } } catch (e) { console.warn('启动工作流失败或更新workflow_id失败', e) } src/views/tradeManage/buyer/index.vue
@@ -227,7 +227,7 @@ 交易确认 </el-button> <el-button v-else-if="action.type === ActionType.EVALUATE" v-else-if="action.type === ActionType.EVALUATE && row.parentOrder.isEvaluate === '未评价'" type="primary" link size="small" @@ -280,12 +280,10 @@ <script setup lang="ts"> import { onMounted, reactive, ref } from 'vue' import { useRouter } from 'vue-router' import { Search, Refresh } from '@element-plus/icons-vue' import { ElMessage, ElMessageBox } from 'element-plus' import orderApi from '@/api/orderApi' import productApi from '@/api/productApi' import { useUserInfo } from '@/stores/modules/userInfo' import ProductOrderStatusDialog from '@/views/productManage/productOrderStatusDialog/index.vue' import { OrderWorkflowController, OrderStatus, ActionType, PageType, StatusMapper } from '@/utils/orderWorkflow' import { queryUserDetail } from '@/api/userInfo' @@ -582,7 +580,8 @@ status: uiStatus, statusName: order.orderStatus || '', orderStatus: StatusMapper.toUIStatus(order.orderStatus), // 转换为标准状态枚举 workFlowId: order.workflowId || '' workFlowId: order.workflowId || '', isEvaluate: order.isEvaluate || '' } const subOrders: any[] = Array.isArray(order?.orderDetails) ? order.orderDetails.map((d: any, i: number) => ({ src/views/tradeManage/confirm/index.vue
@@ -240,6 +240,8 @@ import pointsApi from '@/api/pointsApi' // 新增积分API导入 import { useUserInfo } from '@/stores/modules/userInfo' import createAxios from '@/utils/axios' import productApi from '@/api/productApi' import sysUserService from '@/api/sysUser' const route = useRoute() const router = useRouter() @@ -300,6 +302,39 @@ const statusName: string = data.orderStatus || '' const uiStatus = statusServerToUi[statusName] || 'INFO' // 根据产品id获取产品信息,更新头部展示 try { if (data.productId) { const detailRes: any = await productApi.getProductById({ id: data.productId }) if (detailRes?.code === 200 && detailRes.data) { // 用产品详情补全头信息 data.productName = detailRes.data.name || data.productName data.providerName = detailRes.data.submissionUnit || data.providerName data.industry = detailRes.data.industrialChainName || data.industry data.productDesc = detailRes.data.describe || data.productDesc data.projectUnit = detailRes.data.importantAreaName || data.productDesc data.productType = detailRes.data.typeName || data.productDesc } } } catch (e) { // 忽略产品详情失败,不阻塞订单详情 } // 获取用户信息 try { const userRes: any = await sysUserService.getUserdetail({ userId: data.userId }) if (userRes?.code === 200 && userRes.data) { // 用产品详情补全头信息 data.unitName = userRes.data.unitName || data.unitName data.userName = userRes.data.name || data.userName data.userDept = userRes.data.departmentName || data.userDept data.userPhone = userRes.data.phone || data.userPhone data.userAccount = userRes.data.username || data.userAccount } }catch (e){ } // 映射订单详情头部信息 const head = { orderNo: data.orderId, @@ -318,6 +353,7 @@ projectUnit: data.projectUnit || '-', productType: data.productType || '-', productDesc: data.productDesc || '-', providerId: data.providerId || '' } // 明细项映射 @@ -405,37 +441,37 @@ // 检查订单是否涉及积分扣减 const hasPointsDeduction = detail.items && detail.items.some((item: any) => Number(item.pricePoint || 0) > 0) if (hasPointsDeduction) { // 计算需要扣减的积分总额 const totalPointsToDeduct = detail.items.reduce((sum: number, item: any) => { return sum + (Number(item.pricePoint || 0) * Number(item.quantity || 0)) }, 0) if (totalPointsToDeduct > 0) { // 获取当前用户积分余额 try { const userPointsRes = await pointsApi.getUserPoints(userId) if (userPointsRes.code !== 200 || !userPointsRes.data) { ElMessage.error('获取积分余额失败') return } const currentPoints = userPointsRes.data.balance || 0 if (currentPoints < totalPointsToDeduct) { ElMessage.error(`积分余额不足!当前积分:${currentPoints.toLocaleString()},需要积分:${totalPointsToDeduct.toLocaleString()}`) return } // 积分余额充足,继续执行 console.log(`积分余额检查通过:当前${currentPoints},需要${totalPointsToDeduct}`) } catch (error) { console.error('获取积分余额失败:', error) ElMessage.error('获取积分余额失败,请重试') return } } } // if (hasPointsDeduction) { // // 计算需要扣减的积分总额 // const totalPointsToDeduct = detail.items.reduce((sum: number, item: any) => { // return sum + (Number(item.pricePoint || 0) * Number(item.quantity || 0)) // }, 0) // // if (totalPointsToDeduct > 0) { // // 获取当前用户积分余额 // try { // const userPointsRes = await pointsApi.getUserPoints(userId) // if (userPointsRes.code !== 200 || !userPointsRes.data) { // ElMessage.error('获取积分余额失败') // return // } // // const currentPoints = userPointsRes.data.balance || 0 // // if (currentPoints < totalPointsToDeduct) { // ElMessage.error(`积分余额不足!当前积分:${currentPoints.toLocaleString()},需要积分:${totalPointsToDeduct.toLocaleString()}`) // return // } // // // 积分余额充足,继续执行 // console.log(`积分余额检查通过:当前${currentPoints},需要${totalPointsToDeduct}`) // } catch (error) { // console.error('获取积分余额失败:', error) // ElMessage.error('获取积分余额失败,请重试') // return // } // } // } // 确认操作 await ElMessageBox.confirm('确定要确认交易?', '确认操作', { @@ -465,7 +501,8 @@ totalPointsToDeduct, orderId, productNames || '订单交易扣减积分', // 使用产品名称作为备注 '积分交易' // 数据类别 '积分交易', // 数据类别 detail.providerId ) if (!deductRes || deductRes.code !== 200) { ElMessage.error(deductRes?.msg || deductRes?.message || '积分扣减失败,交易确认终止') src/views/tradeManage/evaluate/index.vue
@@ -862,8 +862,8 @@ }) if (result && result.code === 200) { // 更新订单状态进入下一个状态 await orderApi.updateOrderStatusToNext(orderId) // 更新订单评价状态为已评价 await orderApi.updateOrderStatusToIsEvaluate(orderId) ElMessage.success('评价提交成功') router.back() evaluationLoading.value = false src/views_back/layout/index.vue
@@ -118,7 +118,7 @@ .content-wrapper { width: 100%; height: calc(100vh - 70px); height: calc(100vh); display: flex; } .content-wrapperall{