From a3057955f855b8a266c017df00645845e7471410 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 07 八月 2026 18:01:59 +0800
Subject: [PATCH] 银川 1.不合格品处理页面开发联调 2.招投标管理 - 可配置版前端联调方案
---
src/views/srm/tender/index.vue | 107 +++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 99 insertions(+), 8 deletions(-)
diff --git a/src/views/srm/tender/index.vue b/src/views/srm/tender/index.vue
index 7e09d1a..44f6ed7 100644
--- a/src/views/srm/tender/index.vue
+++ b/src/views/srm/tender/index.vue
@@ -4,24 +4,28 @@
import { Page, useVbenModal } from '@vben/common-ui';
-import { message } from 'ant-design-vue';
+import { message, Select } from 'ant-design-vue';
+import { ref } from 'vue';
import { useRouter } from 'vue-router';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import {
closeTender,
+ confirmTenderProject,
deleteTenderProject,
generatePurchaseOrder,
+ getBidListByProject,
getTenderProjectPage,
publishTender,
startBidding,
startEvaluation,
+ startPriceComparing,
} from '#/api/srm/tender';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import TenderForm from './modules/form.vue';
-import { TENDER_STATUS } from '../enums';
+import { BIDDING_MODE, TENDER_STATUS } from '../enums';
defineOptions({ name: 'SrmTender' });
@@ -88,6 +92,64 @@
handleRefresh();
}
+async function handleStartPriceComparing(row: SrmTenderApi.TenderProjectVO) {
+ await startPriceComparing(row.id!);
+ message.success('宸插紑濮嬫瘮浠�');
+ handleRefresh();
+}
+
+// 纭涓爣鐩稿叧
+const confirmTarget = ref<SrmTenderApi.TenderProjectVO | null>(null);
+const confirmBidId = ref<number>();
+const confirmBidOptions = ref<{ label: string; value: number }[]>([]);
+const confirmLoading = ref(false);
+
+async function openConfirmModal(row: SrmTenderApi.TenderProjectVO) {
+ confirmTarget.value = row;
+ confirmBidId.value = undefined;
+ confirmLoading.value = true;
+ try {
+ const bids = await getBidListByProject(row.id!);
+ confirmBidOptions.value = (bids || []).map((b: any) => ({
+ label: `${b.supplierName} - ${b.bidNo} (楼${b.bidTotalAmount ?? 0})`,
+ value: b.id!,
+ }));
+ } finally {
+ confirmLoading.value = false;
+ }
+ confirmModalApi.open();
+}
+
+async function handleConfirmBid() {
+ if (!confirmTarget.value || !confirmBidId.value) {
+ message.warning('璇烽�夋嫨涓爣渚涘簲鍟嗙殑鎶曟爣璁板綍');
+ return;
+ }
+ confirmLoading.value = true;
+ try {
+ await confirmTenderProject({
+ id: confirmTarget.value.id!,
+ bidId: confirmBidId.value,
+ });
+ message.success('纭涓爣鎴愬姛锛岄噰璐鍗曞凡鑷姩鐢熸垚');
+ confirmModalApi.close();
+ handleRefresh();
+ } finally {
+ confirmLoading.value = false;
+ }
+}
+
+const [ConfirmModal, confirmModalApi] = useVbenModal({
+ title: '纭涓爣',
+ onConfirm: handleConfirmBid,
+ onOpenChange(isOpen: boolean) {
+ if (!isOpen) {
+ confirmTarget.value = null;
+ confirmBidId.value = undefined;
+ }
+ },
+});
+
const [FormModal, formModalApi] = useVbenModal({
connectedComponent: TenderForm,
destroyOnClose: true,
@@ -121,6 +183,18 @@
<template>
<Page auto-content-height>
<FormModal @success="handleRefresh" />
+ <ConfirmModal>
+ <div class="flex items-center gap-2">
+ <span class="font-medium whitespace-nowrap">涓爣鎶曟爣璁板綍锛�</span>
+ <Select
+ v-model:value="confirmBidId"
+ :options="confirmBidOptions"
+ :loading="confirmLoading"
+ placeholder="璇烽�夋嫨涓爣鐨勬姇鏍囪褰�"
+ class="flex-1"
+ />
+ </div>
+ </ConfirmModal>
<Grid table-title="鎷涙爣椤圭洰鍒楄〃">
<template #toolbar-tools>
<TableAction
@@ -148,7 +222,7 @@
label: '鍙戝竷',
type: 'link',
auth: ['srm:tender-project:update'],
- ifShow: row.tenderStatus === TENDER_STATUS.DRAFT,
+ ifShow: row.tenderStatus === TENDER_STATUS.DRAFT && row.biddingMode !== BIDDING_MODE.SIMPLE,
popConfirm: {
title: '纭瑕佸彂甯冭椤圭洰鍚楋紵鍙戝竷鍚庢棤娉曚慨鏀广��',
confirm: handlePublish.bind(null, row),
@@ -167,7 +241,7 @@
type: 'link',
icon: ACTION_ICON.EDIT,
auth: ['srm:tender-project:update'],
- ifShow: row.tenderStatus === TENDER_STATUS.PUBLISHED || row.tenderStatus === TENDER_STATUS.BIDDING,
+ ifShow: (row.tenderStatus === TENDER_STATUS.PUBLISHED || row.tenderStatus === TENDER_STATUS.BIDDING) && row.biddingMode !== BIDDING_MODE.SIMPLE,
onClick: handleEdit.bind(null, row),
},
{
@@ -186,7 +260,7 @@
label: '寮�濮嬫姇鏍�',
type: 'link',
auth: ['srm:tender-project:update'],
- ifShow: row.tenderStatus === TENDER_STATUS.PUBLISHED,
+ ifShow: row.tenderStatus === TENDER_STATUS.PUBLISHED && row.biddingMode !== BIDDING_MODE.SIMPLE,
popConfirm: {
title: '纭瑕佸紑濮嬫姇鏍囧悧锛�',
confirm: handleStartBidding.bind(null, row),
@@ -197,7 +271,7 @@
type: 'link',
danger: true,
auth: ['srm:tender-project:update'],
- ifShow: row.tenderStatus === TENDER_STATUS.PUBLISHED || row.tenderStatus === TENDER_STATUS.BIDDING || row.tenderStatus === TENDER_STATUS.EVALUATING,
+ ifShow: row.tenderStatus === TENDER_STATUS.PUBLISHED || row.tenderStatus === TENDER_STATUS.BIDDING || row.tenderStatus === TENDER_STATUS.EVALUATING || row.tenderStatus === TENDER_STATUS.PRICE_COMPARING,
popConfirm: {
title: '纭瑕佸叧闂椤圭洰鍚楋紵',
confirm: handleClose.bind(null, row),
@@ -207,7 +281,7 @@
label: '寮�濮嬭瘎鏍�',
type: 'link',
auth: ['srm:tender-project:update'],
- ifShow: row.tenderStatus === TENDER_STATUS.BIDDING,
+ ifShow: row.tenderStatus === TENDER_STATUS.BIDDING && row.biddingMode !== BIDDING_MODE.SIMPLE,
popConfirm: {
title: '纭瑕佸紑濮嬭瘎鏍囧悧锛�',
confirm: handleStartEvaluation.bind(null, row),
@@ -217,12 +291,29 @@
label: '鐢熸垚閲囪喘璁㈠崟',
type: 'link',
auth: ['srm:bid-award:update'],
- ifShow: !!row.awardId && !row.purchaseOrderNo,
+ ifShow: !!row.awardId && !row.purchaseOrderNo && row.biddingMode !== BIDDING_MODE.SIMPLE,
popConfirm: {
title: '纭瑕佺敓鎴愰噰璐鍗曞悧锛�',
confirm: handleGeneratePurchaseOrder.bind(null, row),
},
},
+ {
+ label: '寮�濮嬫瘮浠�',
+ type: 'link',
+ auth: ['srm:tender-project:update'],
+ ifShow: row.biddingMode === BIDDING_MODE.SIMPLE && row.tenderStatus === TENDER_STATUS.DRAFT,
+ popConfirm: {
+ title: '纭瑕佸紑濮嬫瘮浠峰悧锛�',
+ confirm: handleStartPriceComparing.bind(null, row),
+ },
+ },
+ {
+ label: '纭涓爣',
+ type: 'link',
+ auth: ['srm:tender-project:update'],
+ ifShow: row.biddingMode === BIDDING_MODE.SIMPLE && row.tenderStatus === TENDER_STATUS.PRICE_COMPARING,
+ onClick: openConfirmModal.bind(null, row),
+ },
]"
/>
</template>
--
Gitblit v1.9.3