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