Explorar el Código

# 接口对接

jc-wangyt hace 1 mes
padre
commit
a0ec72d418

+ 6 - 6
src/router/index.js

@@ -66,12 +66,12 @@ export const constantRoutes = [
     component: Layout,
     redirect: 'index',
     children: [
-      // {
-      //   path: 'index',
-      //   component: () => import('@/views/index'),
-      //   name: 'Index',
-      //   meta: { title: '首页', icon: 'dashboard', affix: true }
-      // },
+      {
+        path: 'index',
+        component: () => import('@/views/index'),
+        name: 'Index',
+        meta: { title: '首页', icon: 'dashboard', affix: true }
+      },
        {
         path: 'bizoppmanage',
         component: () => import('@/views/bizoppmanage/index'),

+ 30 - 34
src/views/bizoppmanage/details.vue

@@ -8,21 +8,20 @@
       </div>
       <div class="module-content">
         <el-descriptions :column="3" border>
-          <el-descriptions-item label="商机编号">1552025070900407</el-descriptions-item>
-          <el-descriptions-item label="商机名称">天津市南区辛庄社区卫生服务中心项目</el-descriptions-item>
-          <el-descriptions-item label="商机阶段">支撑确认</el-descriptions-item>
-          <el-descriptions-item label="填报时间">2025-07-09 19:13:59</el-descriptions-item>
-          <el-descriptions-item label="预计签约时间">2026-07-16</el-descriptions-item>
-          <el-descriptions-item label="预计合同总金额">20万元</el-descriptions-item>
-          <el-descriptions-item label="自然客户名称">天津市南区辛庄社区卫生服务中心</el-descriptions-item>
-          <el-descriptions-item label="自然客户ID">33666606</el-descriptions-item>
-          <el-descriptions-item label="客户需求来源">***</el-descriptions-item>
-          <el-descriptions-item label="商机归属人">王健 wangj1181/</el-descriptions-item>
-          <el-descriptions-item label="商机单位">津南区政务服务管理中心</el-descriptions-item>
-          <el-descriptions-item label="商机创建">津南区</el-descriptions-item>
-          <el-descriptions-item label="客户需求简介">天津市津南区要求,将卫生监控站的广播扩至全个月</el-descriptions-item>
-          <el-descriptions-item label="支援负责人">邢立红 xinglh186022559</el-descriptions-item>
-          <el-descriptions-item label="支援部门">津南区分公司政企客户事业部</el-descriptions-item>
+          <el-descriptions-item label="商机编号">{{ currentData.opportunityCode || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="商机名称">{{ currentData.opportunityName || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="商机阶段">{{ currentData.opportunityStage || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="填报时间">{{ currentData.fillTime ? new Date(currentData.fillTime).toLocaleString() : '-' }}</el-descriptions-item>
+          <el-descriptions-item label="预计签约时间">{{ currentData.estimatedSignDate ? new Date(currentData.estimatedSignDate).toLocaleDateString() : '-' }}</el-descriptions-item>
+          <el-descriptions-item label="预计合同总金额">{{ currentData.estimatedContractAmount ? currentData.estimatedContractAmount + '万元' : '-' }}</el-descriptions-item>
+          <el-descriptions-item label="自然客户名称">{{ currentData.oppNaturalCustomerName || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="自然客户ID">{{ currentData.oppNaturalCustomerId || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="客户需求来源">{{ currentData.customerRequirement || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="商机归属人">{{ currentData.opportunityOwner || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="商机单位">{{ currentData.opportunityUnit || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="客户需求简介">{{ currentData.customerRequirement || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="支援负责人">{{ currentData.supportPerson || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="支援部门">{{ currentData.supportUnit || '-' }}</el-descriptions-item>
         </el-descriptions>
       </div>
     </div>
@@ -38,16 +37,15 @@
         <div class="section-container">
           <h3>招标信息</h3>
           <el-descriptions :column="3" border>
-            <el-descriptions-item label="招标编号">ZB202412001</el-descriptions-item>
-            <el-descriptions-item label="招标公告发布时间">2024-12-10 09:00:00</el-descriptions-item>
-            <el-descriptions-item label="购买标书截止时间">2024-12-15 17:00:00</el-descriptions-item>
-            <el-descriptions-item label="项目编号">XM202412001</el-descriptions-item>
-            <el-descriptions-item label="项目名称">算网全流程平台升级改造项目</el-descriptions-item>
-            <el-descriptions-item label="招标方式">公开招标</el-descriptions-item>
-            <el-descriptions-item label="开标时间">2024-12-20 10:30:00</el-descriptions-item>
-            <el-descriptions-item label="采购预算">¥1,500,000.00</el-descriptions-item>
-            <el-descriptions-item label="红军降标">10%</el-descriptions-item>
-            <el-descriptions-item label="是否参与">是</el-descriptions-item>
+            <el-descriptions-item label="招标编号">{{ currentData.projectCode || '-' }}</el-descriptions-item>
+            <el-descriptions-item label="招标公告发布时间">{{ currentData.tenderInfoPublishTime ? new Date(currentData.tenderInfoPublishTime).toLocaleString() : '-' }}</el-descriptions-item>
+            <el-descriptions-item label="购买标书截止时间">{{ currentData.bidDocumentDeadline ? new Date(currentData.bidDocumentDeadline).toLocaleString() : '-' }}</el-descriptions-item>
+            <el-descriptions-item label="项目编号">{{ currentData.projectCode || '-' }}</el-descriptions-item>
+            <el-descriptions-item label="项目名称">{{ currentData.projectName || '-' }}</el-descriptions-item>
+            <el-descriptions-item label="招标方式">{{ currentData.announcementType || '-' }}</el-descriptions-item>
+            <el-descriptions-item label="开标时间">{{ currentData.bidOpeningDate ? new Date(currentData.bidOpeningDate).toLocaleString() : '-' }}</el-descriptions-item>
+            <el-descriptions-item label="采购预算">{{ currentData.budget ? '¥' + currentData.budget.toLocaleString() : '-' }}</el-descriptions-item>
+            <el-descriptions-item label="是否参与">{{ currentData.isParticipate === 1 ? '是' : '否' }}</el-descriptions-item>
           </el-descriptions>
         </div>
 
@@ -55,13 +53,9 @@
         <div class="section-container">
           <h3>中标信息</h3>
           <el-descriptions :column="3" border>
-            <el-descriptions-item label="中标标识"></el-descriptions-item>
-            <el-descriptions-item label="中标单位"></el-descriptions-item>
-            <el-descriptions-item label="中标价"></el-descriptions-item>
-            <el-descriptions-item label="项目编号"></el-descriptions-item>
-            <el-descriptions-item label="项目名称"></el-descriptions-item>
-            <el-descriptions-item label="中标公告发布时间"></el-descriptions-item>
-            <el-descriptions-item label="是否关联"></el-descriptions-item>
+            <el-descriptions-item label="是否关联">{{ currentData.isRelevant === 1 ? '是' : '否' }}</el-descriptions-item>
+            <el-descriptions-item label="项目编号">{{ currentData.projectCode || '-' }}</el-descriptions-item>
+            <el-descriptions-item label="项目名称">{{ currentData.projectName || '-' }}</el-descriptions-item>
           </el-descriptions>
         </div>
       </div>
@@ -70,12 +64,14 @@
 </template>
 
 <script>
-import { getOpportunityDetail } from '@/api/newApi/bizoppmanage'
+import { getOpportunityDetail, } from '@/api/newApi/bizoppmanage'
 export default {
   data() {
     return {
       // 页面标题
-      title: '商机详情'
+      title: '商机详情',
+      // 商机详情数据
+      currentData: {}
     }
   },
   mounted() {

+ 19 - 11
src/views/bizoppmanage/index.vue

@@ -70,25 +70,25 @@
 
             <!-- 日期选择区域 -->
             <el-row :gutter="20" class="date-row">
-              <el-col :span="8">
-                <el-form-item label="立项时间" prop="approvalDate">
+              <el-col :xs="24" :sm="12" :md="12" :lg="8">
+                <el-form-item label="立项时间" prop="approvalDate" label-position="top">
                   <el-date-picker v-model="searchForm.approvalDate" type="daterange" range-separator="至"
                     start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
-                    clearable></el-date-picker>
+                    clearable style="width: 100%"></el-date-picker>
                 </el-form-item>
               </el-col>
-              <el-col :span="8">
-                <el-form-item label="预计签约时间" prop="estimatedSignDate">
+              <el-col :xs="24" :sm="12" :md="12" :lg="8">
+                <el-form-item label="预计签约时间" prop="estimatedSignDate" label-position="top">
                   <el-date-picker v-model="searchForm.estimatedSignDate" type="daterange" range-separator="至"
                     start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
-                    clearable></el-date-picker>
+                    clearable style="width: 100%"></el-date-picker>
                 </el-form-item>
               </el-col>
-              <el-col :span="8">
-                <el-form-item label="签约时间" prop="signDate">
+              <el-col :xs="24" :sm="12" :md="12" :lg="8">
+                <el-form-item label="签约时间" prop="signDate" label-position="top">
                   <el-date-picker v-model="searchForm.signDate" type="daterange" range-separator="至"
                     start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
-                    clearable></el-date-picker>
+                    clearable style="width: 100%"></el-date-picker>
                 </el-form-item>
               </el-col>
             </el-row>
@@ -115,8 +115,8 @@
       <div class="list-header">
         <el-button type="primary" @click="handleAdd">新增商机</el-button>
       </div>
-      <el-table :data="bizList" header-align="center" style="width: 100%" stripe v-loading="tableLoading" border empty-text="-">
-        <el-table-column prop="opportunityName" label="商机名称" min-width="150" align="center"></el-table-column>
+      <el-table :data="bizList" header-align="center" style="width: 100%" stripe v-loading="tableLoading" border>
+        <el-table-column prop="opportunityName" label="商机名称" min-width="150" align="center" fixed="left"></el-table-column>
         <el-table-column prop="opportunityCode" label="商机编号" min-width="120" align="center"></el-table-column>
         <el-table-column prop="naturalCustomerName" label="自然客户名称" min-width="180" align="center"></el-table-column>
         <el-table-column prop="naturalCustomerId" label="自然客户ID" min-width="100" align="center"></el-table-column>
@@ -276,6 +276,14 @@ export default {
   margin-bottom: 15px;
 }
 
+.date-row .el-form-item {
+  margin-bottom: 20px;
+}
+
+.date-row .el-col {
+  min-width: 280px;
+}
+
 .list-container {
   background-color: #fff;
   padding: 20px;

+ 46 - 82
src/views/openMarketBid/details.vue

@@ -4,73 +4,75 @@
             <!-- 公告信息 -->
             <div class="detail-section">
                 <h3 class="section-title">公告信息</h3>
-                <el-form :model="mockFormData" label-width="130px" size="small" class="detail-form">
+                <el-form :model="formData" label-width="130px" size="small" class="detail-form">
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="公告标题">
-                                {{ mockFormData.noticeTitle }}
+                                {{ formData.announcementTitle || '-' }}
                             </el-form-item>
                         </el-col>
                         <el-col :span="12">
-                            <el-form-item label="公告类">
-                                {{ mockFormData.noticeType }}
+                            <el-form-item label="公告类">
+                                {{ formData.announcementType || '-' }}
                             </el-form-item>
                         </el-col>
                     </el-row>
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="发布时间">
-                                {{ mockFormData.publishTime }}
+                                {{ formData.publishTime ? new Date(formData.publishTime).toLocaleString() : '-' }}
                             </el-form-item>
                         </el-col>
                         <el-col :span="12">
                             <el-form-item label="信息匹配词">
-                                {{ mockFormData.infoMatchingWords }}
+                                {{ formData.matchKeywords || '-' }}
                             </el-form-item>
                         </el-col>
                     </el-row>
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="是否有关">
-                                {{ mockFormData.isRelated ? '是' : '否' }}
+                                <span class="bool-value" :class="{true: formData.isRelevant === 1, false: formData.isRelevant === 0}">
+                                    {{ formData.isRelevant === 1 ? '是' : formData.isRelevant === 0 ? '否' : '-' }}
+                                </span>
                             </el-form-item>
                         </el-col>
                         <el-col :span="12">
                             <el-form-item label="省份">
-                                {{ mockFormData.province }}
+                                {{ formData.province || '-' }}
                             </el-form-item>
                         </el-col>
                     </el-row>
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="城市">
-                                {{ mockFormData.city }}
+                                {{ formData.city || '-' }}
                             </el-form-item>
                         </el-col>
                         <el-col :span="12">
                             <el-form-item label="数据来源">
-                                {{ mockFormData.dataSource }}
+                                {{ formData.dataSource || '-' }}
                             </el-form-item>
                         </el-col>
                     </el-row>
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="公告地址">
-                                <a :href="mockFormData.noticeAddress" target="_blank" class="link-text">{{
-                                    mockFormData.noticeAddress }}</a>
+                                <a v-if="formData.announcementUrl" :href="formData.announcementUrl" target="_blank" class="link-text">{{ formData.announcementUrl }}</a>
+                                <span v-else>-</span>
                             </el-form-item>
                         </el-col>
                         <el-col :span="12">
-                            <el-form-item label="剑鱼标地址">
-                                <a :href="mockFormData.jianyuAddress" target="_blank" class="link-text">{{
-                                    mockFormData.jianyuAddress }}</a>
+                            <el-form-item label="剑鱼标地址">
+                                <a v-if="formData.jianyuUrl" :href="formData.jianyuUrl" target="_blank" class="link-text">{{ formData.jianyuUrl }}</a>
+                                <span v-else>-</span>
                             </el-form-item>
                         </el-col>
                     </el-row>
                     <el-row :gutter="20">
                         <el-col :span="24">
                             <el-form-item label="公告正文">
-                                <div class="content-box">{{ mockFormData.noticeContent }}</div>
+                                <div class="content-box">{{ formData.noticeContent || '-' }}</div>
                             </el-form-item>
                         </el-col>
                     </el-row>
@@ -80,59 +82,59 @@
             <!-- 采购信息 -->
             <div class="detail-section">
                 <h3 class="section-title">采购信息</h3>
-                <el-form :model="mockFormData" label-width="130px" size="small" class="detail-form">
+                <el-form :model="formData" label-width="130px" size="small" class="detail-form">
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="采购单位">
-                                {{ mockFormData.purchaserName }}
+                                {{ formData.purchaseUnit || '-' }}
                             </el-form-item>
                         </el-col>
                         <el-col :span="12">
                             <el-form-item label="对应自然客户">
-                                {{ mockFormData.naturalCustomerName }}
+                                {{ formData.finalUser || '-' }}
                             </el-form-item>
                         </el-col>
                     </el-row>
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="自然客户标签名称">
-                                {{ mockFormData.naturalCustomerLabel }}
+                                {{ formData.customerGroup || '-' }}
                             </el-form-item>
                         </el-col>
                         <el-col :span="12">
                             <el-form-item label="采购单位地址">
-                                {{ mockFormData.purchaserAddress }}
+                                {{ formData.purchaserAddress || '-' }}
                             </el-form-item>
                         </el-col>
                     </el-row>
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="采购单位联系人">
-                                {{ mockFormData.purchaserContact }}
+                                {{ formData.purchaserContact || '-' }}
                             </el-form-item>
                         </el-col>
                         <el-col :span="12">
                             <el-form-item label="采购单位联系电话">
-                                {{ mockFormData.purchaserPhone }}
+                                {{ formData.purchaserPhone || '-' }}
                             </el-form-item>
                         </el-col>
                     </el-row>
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="招标信息发布时间">
-                                {{ mockFormData.bidPublishTime }}
+                                {{ formData.tenderInfoPublishTime ? new Date(formData.tenderInfoPublishTime).toLocaleString() : '-' }}
                             </el-form-item>
                         </el-col>
                         <el-col :span="12">
                             <el-form-item label="开标日期">
-                                {{ mockFormData.bidOpeningDate }}
+                                {{ formData.bidOpeningDate ? new Date(formData.bidOpeningDate).toLocaleString() : '-' }}
                             </el-form-item>
                         </el-col>
                     </el-row>
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="预算(万元)">
-                                {{ mockFormData.budgetAmount }}
+                                {{ formData.budget || '-' }}
                             </el-form-item>
                         </el-col>
                     </el-row>
@@ -142,40 +144,40 @@
             <!-- 项目信息 -->
             <div class="detail-section">
                 <h3 class="section-title">项目信息</h3>
-                <el-form :model="mockFormData" label-width="130px" size="small" class="detail-form">
+                <el-form :model="formData" label-width="130px" size="small" class="detail-form">
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="项目编号">
-                                {{ mockFormData.projectCode }}
+                                {{ formData.projectCode || '-' }}
                             </el-form-item>
                         </el-col>
                         <el-col :span="12">
                             <el-form-item label="项目名称">
-                                {{ mockFormData.projectName }}
+                                {{ formData.projectName || '-' }}
                             </el-form-item>
                         </el-col>
                     </el-row>
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="招标代理">
-                                {{ mockFormData.bidAgentName }}
+                                {{ formData.tenderAgent || '-' }}
                             </el-form-item>
                         </el-col>
                         <el-col :span="12">
                             <el-form-item label="招标代理联系电话">
-                                {{ mockFormData.bidAgentPhone }}
+                                {{ formData.tenderAgentPhone || '-' }}
                             </el-form-item>
                         </el-col>
                     </el-row>
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="项目范围">
-                                {{ mockFormData.projectScope }}
+                                {{ formData.projectScope || '-' }}
                             </el-form-item>
                         </el-col>
                         <el-col :span="12">
                             <el-form-item label="信息标识">
-                                {{ mockFormData.infoIdentifier }}
+                                {{ formData.infoIdentifier || '-' }}
                             </el-form-item>
                         </el-col>
                     </el-row>
@@ -185,40 +187,44 @@
             <!-- 扩展信息 -->
             <div class="detail-section">
                 <h3 class="section-title">扩展信息</h3>
-                <el-form :model="mockFormData" label-width="130px" size="small" class="detail-form">
+                <el-form :model="formData" label-width="130px" size="small" class="detail-form">
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="分公司">
-                                {{ mockFormData.branchCompany }}
+                                {{ formData.branchCompany || '-' }}
                             </el-form-item>
                         </el-col>
                         <el-col :span="12">
                             <el-form-item label="分类">
-                                {{ mockFormData.category }}
+                                {{ formData.category || '-' }}
                             </el-form-item>
                         </el-col>
                     </el-row>
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="商机编号">
-                                {{ mockFormData.businessNumber }}
+                                {{ formData.opportunityCode || '-' }}
                             </el-form-item>
                         </el-col>
                         <el-col :span="12">
                             <el-form-item label="是否知晓">
-                                {{ mockFormData.isKnown ? '是' : '否' }}
+                                <span class="bool-value" :class="{true: formData.isAware === 1, false: formData.isAware === 0}">
+                                    {{ formData.isAware === 1 ? '是' : formData.isAware === 0 ? '否' : '-' }}
+                                </span>
                             </el-form-item>
                         </el-col>
                     </el-row>
                     <el-row :gutter="20">
                         <el-col :span="12">
                             <el-form-item label="是否参与">
-                                {{ mockFormData.isParticipate ? '是' : '否' }}
+                                <span class="bool-value" :class="{true: formData.isParticipate === 1, false: formData.isParticipate === 0}">
+                                    {{ formData.isParticipate === 1 ? '是' : formData.isParticipate === 0 ? '否' : '-' }}
+                                </span>
                             </el-form-item>
                         </el-col>
                         <el-col :span="12">
                             <el-form-item label="不参与原因">
-                                {{ mockFormData.nonParticipationReason }}
+                                {{ formData.notParticipateReason || '-' }}
                             </el-form-item>
                         </el-col>
                     </el-row>
@@ -250,48 +256,6 @@ export default {
     },
     data() {
         return {
-            // 模拟详情数据
-            mockFormData: {
-                // 公告信息
-                noticeTitle: '河北工业大学北辰校区智慧热网系统软硬件升级项目单一来源公告',
-                noticeType: '单一',
-                publishTime: '2025-10-29 10:35:36',
-                infoMatchingWords: '智慧,系统',
-                isRelated: true,
-                province: '天津',
-                city: '天津市',
-                dataSource: '剑鱼',
-                noticeAddress: 'https://szj.hebei.gov.cn/zbtbfwpt/en...',
-                jianyuAddress: 'https://www.jianyu360.cn/article/ents...',
-                noticeContent: '河北工业大学北辰校区智慧热网系统软硬件升级项目单一来源公告 河北工业大学北辰校区智慧热网系统软硬件升级项目单一来源公告招标项目名称:河北工业大学北辰校区智慧热网系统软硬件升级项目招标编号:TJHY-2025-A-072招标项目编号:ZJ210010084X000185001所属行业:科教文卫所属地区:天津市北辰区招标单位:河北工业大学招标代理:天津市宏宇工程通造价咨询有限公司发布时间:2025-10-29',
-
-                // 采购信息
-                purchaserName: '河北工业大学',
-                naturalCustomerName: '河北工业大学',
-                naturalCustomerLabel: '2022年4月要害拍图',
-                purchaserAddress: '',
-                purchaserContact: '',
-                purchaserPhone: '',
-                bidPublishTime: '2025-10-29 10:35:36',
-                bidOpeningDate: '',
-                budgetAmount: 20,
-
-                // 项目信息
-                projectCode: 'ZJ210010084X000185001',
-                projectName: '河北工业大学北辰校区智慧热网系统软硬件升级项目',
-                bidAgentName: '天津市宏宇工程通造价咨询有限公司',
-                bidAgentPhone: '',
-                projectScope: '',
-                infoIdentifier: 'QIZAaE24mbrFccCFOQdkF8bhHNqBaBV...',
-
-                // 扩展信息
-                branchCompany: '政要',
-                category: 'G',
-                businessNumber: '',
-                isKnown: false,
-                isParticipate: false,
-                nonParticipationReason: ''
-            }
         };
     },
     methods: {

+ 616 - 0
src/views/openMarketBid/edit.vue

@@ -0,0 +1,616 @@
+<template>
+    <div class="app-container">
+        <el-dialog :title="title" :visible.sync="dialogVisible" width="70%" :before-close="handleClose">
+            <!-- 公告信息 -->
+            <div class="detail-section">
+                <h3 class="section-title">公告信息</h3>
+                <el-form :model="formData" label-width="130px" size="small" class="detail-form">
+                    <el-row :gutter="20">
+                        <el-col :span="12">
+                            <el-form-item label="公告标题">
+                                {{ formData.announcementTitle || '-' }}
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                            <el-form-item label="公告类别">
+                                {{ formData.announcementType || '-' }}
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20">
+                        <el-col :span="12">
+                            <el-form-item label="发布时间">
+                                {{ formData.publishTime ? new Date(formData.publishTime).toLocaleString() : '-' }}
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                            <el-form-item label="信息匹配词">
+                                {{ formData.matchKeywords || '-' }}
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20">
+                        <el-col :span="12">
+                            <el-form-item label="是否有关">
+                                <span class="bool-value"
+                                    :class="{ true: formData.isRelevant === 1, false: formData.isRelevant === 0 }">
+                                    {{ formData.isRelevant === 1 ? '是' : formData.isRelevant === 0 ? '否' : '-' }}
+                                </span>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                            <el-form-item label="省份">
+                                {{ formData.province || '-' }}
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20">
+                        <el-col :span="12">
+                            <el-form-item label="城市">
+                                {{ formData.city || '-' }}
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                            <el-form-item label="数据来源">
+                                {{ formData.dataSource || '-' }}
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20">
+                        <el-col :span="12">
+                            <el-form-item label="公告地址">
+                                <a v-if="formData.announcementUrl" :href="formData.announcementUrl" target="_blank"
+                                    class="link-text">{{ formData.announcementUrl }}</a>
+                                <span v-else>-</span>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                            <el-form-item label="剑鱼标识地址">
+                                <a v-if="formData.jianyuUrl" :href="formData.jianyuUrl" target="_blank"
+                                    class="link-text">{{ formData.jianyuUrl }}</a>
+                                <span v-else>-</span>
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20">
+                        <el-col :span="24">
+                            <el-form-item label="公告正文">
+                                <div class="content-box">{{ formData.noticeContent || '-' }}</div>
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                </el-form>
+            </div>
+
+            <!-- 采购信息 -->
+            <div class="detail-section">
+                <h3 class="section-title">采购信息</h3>
+                <el-form :model="formData" label-width="130px" size="small" class="detail-form">
+                    <el-row :gutter="20">
+                        <el-col :span="12">
+                            <el-form-item label="采购单位">
+                                {{ formData.purchaseUnit || '-' }}
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                            <el-form-item label="对应自然客户">
+                                {{ formData.finalUser || '-' }}
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20">
+                        <el-col :span="12">
+                            <el-form-item label="自然客户标签名称">
+                                {{ formData.customerGroup || '-' }}
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                            <el-form-item label="采购单位地址">
+                                {{ formData.purchaserAddress || '-' }}
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20">
+                        <el-col :span="12">
+                            <el-form-item label="采购单位联系人">
+                                {{ formData.purchaserContact || '-' }}
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                            <el-form-item label="采购单位联系电话">
+                                {{ formData.purchaserPhone || '-' }}
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20">
+                        <el-col :span="12">
+                            <el-form-item label="招标信息发布时间">
+                                {{ formData.tenderInfoPublishTime ? new
+                                    Date(formData.tenderInfoPublishTime).toLocaleString() : '-' }}
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                            <el-form-item label="开标日期">
+                                {{ formData.bidOpeningDate ? new Date(formData.bidOpeningDate).toLocaleString() : '-' }}
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20">
+                        <el-col :span="12">
+                            <el-form-item label="预算(万元)">
+                                {{ formData.budget || '-' }}
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                </el-form>
+            </div>
+
+            <!-- 项目信息 -->
+            <div class="detail-section">
+                <h3 class="section-title">项目信息</h3>
+                <el-form :model="formData" label-width="130px" size="small" class="detail-form">
+                    <el-row :gutter="20">
+                        <el-col :span="12">
+                            <el-form-item label="项目编号">
+                                {{ formData.projectCode || '-' }}
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                            <el-form-item label="项目名称">
+                                {{ formData.projectName || '-' }}
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20">
+                        <el-col :span="12">
+                            <el-form-item label="招标代理">
+                                {{ formData.tenderAgent || '-' }}
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                            <el-form-item label="招标代理联系电话">
+                                {{ formData.tenderAgentPhone || '-' }}
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20">
+                        <el-col :span="12">
+                            <el-form-item label="项目范围">
+                                {{ formData.projectScope || '-' }}
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                            <el-form-item label="信息标识">
+                                {{ formData.infoIdentifier || '-' }}
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                </el-form>
+            </div>
+
+            <!-- 扩展信息 -->
+            <div class="detail-section">
+                <h3 class="section-title">扩展信息</h3>
+                <el-form :model="formData" label-width="130px" size="small" class="detail-form">
+                    <el-row :gutter="20">
+                        <el-col :span="12">
+                            <el-form-item label="分公司">
+                                {{ formData.branchCompany || '-' }}
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                            <el-form-item label="分类">
+                                {{ formData.category || '-' }}
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20">
+                        <!-- <el-col :span="12">
+                            <el-form-item label="商机编号">
+                                {{ formData.opportunityCode || '-' }}
+                            </el-form-item>
+                        </el-col> -->
+                        <el-col :span="12">
+                            <el-form-item label="是否知晓">
+                                <span class="bool-value"
+                                    :class="{ true: formData.isAware === 1, false: formData.isAware === 0 }">
+                                    {{ formData.isAware === 1 ? '是' : formData.isAware === 0 ? '否' : '-' }}
+                                </span>
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20">
+                        <el-col :span="12">
+                            <el-form-item label="商机编号">
+                                <div @click="handleSearchOpportunity" style="border: 1px solid #999999;
+                                            border-radius: 5px;
+                                            display: flex;
+                                            align-items: center;
+                                            padding: 0 10px;
+                                            justify-content: space-between;">
+                                    <span>{{ formData.opportunityCode || '-' }}</span>
+                                    <i class="el-icon-search"></i>
+                                </div>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="12">
+                            <el-form-item label="是否参与">
+                                <el-select v-model="formData.isParticipate" placeholder="请选择是否参与" style="width: 100%">
+                                    <el-option v-for="option in isParticipateOptions" :key="option.value"
+                                        :label="option.label" :value="option.value"></el-option>
+                                </el-select>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="12" v-if="formData.isParticipate == 0">
+                            <el-form-item label="不参与原因">
+                                <el-cascader v-model="formData.notParticipateReason"
+                                    :options="notParticipateReasonOptions" placeholder="请选择不参与原因"
+                                    style="width: 100%"></el-cascader>
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                </el-form>
+            </div>
+
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="handleClose">关 闭</el-button>
+                <el-button @click="handleSave">保 存</el-button>
+            </span>
+        </el-dialog>
+        <el-dialog title="选择商机" :visible.sync="dialogVisibleOpportunity" width="80%">
+            <div class="search-container">
+                <el-input @change="handleSearchOpportunity" v-model="opportunitySearchForm.keyword"
+                    placeholder="请输入商机编号、商机名称" clearable style="width: 300px; margin-bottom: 20px;"></el-input>
+            </div>
+            <el-table :data="opportunityList" style="width: 100%" border
+                v-loading="opportunityLoading" >
+                <el-table-column type="radio" width="55"></el-table-column>
+                <el-table-column prop="opportunityCode" label="商机编号" width="180"></el-table-column>
+                <el-table-column prop="opportunityName" label="商机名称" min-width="200"></el-table-column>
+                <el-table-column prop="opportunityAmount" label="商机金额(万元)"></el-table-column>
+                <el-table-column prop="createTime" label="明确商机时间" width="180">
+                    <template slot-scope="scope">
+                        {{ scope.row.createTime ? new Date(scope.row.createTime).toLocaleString() : '-' }}
+                    </template>
+                </el-table-column>
+                <el-table-column prop="opportunityStage" label="商机阶段"></el-table-column>
+                <el-table-column prop="supportUnit" label="支撑主要单位"></el-table-column>
+                <el-table-column prop="supportPerson" label="支撑主要人"></el-table-column>
+            </el-table>
+            <!-- 分页 -->
+            <div class="pagination-container" style="margin-top: 20px; text-align: right;">
+                <pagination v-show="opportunityPagination.total > 0" :total="opportunityPagination.total"
+                    :page.sync="opportunityPagination.pageNum" :limit.sync="opportunityPagination.pageSize"
+                    @pagination="getOpportunityList" />
+            </div>
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="dialogVisibleOpportunity = false">取消</el-button>
+                <el-button type="primary" @click="handleSelectOpportunity">确定</el-button>
+            </span>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import request from '@/utils/request'
+import { getOpportunityList } from '@/api/newApi/bizoppmanage'
+
+export default {
+    props: {
+        dialogVisible: {
+            type: Boolean,
+            default: false
+        },
+        formData: {
+            type: Object,
+            default: () => ({})
+        },
+        title: {
+            type: String,
+            default: '编辑'
+        }
+    },
+    data() {
+        return {
+            // 是否参与下拉选项
+            isParticipateOptions: [
+                { value: 1, label: '是' },
+                { value: 0, label: '否' }
+            ],
+            // 不参与原因级联选择器数据
+            notParticipateReasonOptions: [
+                {
+                    value: '客户原因',
+                    label: '客户原因',
+                    children: [
+                        { value: '意向供应商', label: '意向供应商' },
+                        { value: '项目已实施补招标手续', label: '项目已实施补招标手续' },
+                        { value: '单一来源不能参与', label: '单一来源不能参与' },
+                        { value: '13%税率占比高', label: '13%税率占比高' },
+                        { value: '应收账款风险高', label: '应收账款风险高' }
+                    ]
+                },
+                {
+                    value: '资质技术',
+                    label: '资质技术',
+                    children: [
+                        { value: '资质不具备', label: '资质不具备' },
+                        { value: '供应商不授权', label: '供应商不授权' },
+                        { value: '分析招标文件扣分多', label: '分析招标文件扣分多' },
+                        { value: '专业性强', label: '专业性强' },
+                        { value: '面向中小', label: '面向中小' }
+                    ]
+                },
+                {
+                    value: '自身原因',
+                    label: '自身原因',
+                    children: [
+                        { value: '未及时获取商机', label: '未及时获取商机' },
+                        { value: '推进不及时客户已选择其他供应商', label: '推进不及时客户已选择其他供应商' },
+                        { value: '集团不支持投标', label: '集团不支持投标' },
+                        { value: '部队/黑名单', label: '部队/黑名单' }
+                    ]
+                }
+            ],
+            // 商机选择弹窗相关
+            dialogVisibleOpportunity: false,
+            opportunityList: [],
+            opportunityLoading: false, // 表格加载状态
+            opportunitySearchForm: {
+                keyword: ''
+            },
+            opportunityPagination: {
+                pageNum: 1,
+                pageSize: 10,
+                total: 0
+            },
+            selectedOpportunity: null,
+            multipleSelection: []
+        };
+    },
+    methods: {
+        handleClose() {
+            this.$emit('update:dialogVisible', false);
+        },
+        handleSearchOpportunity() {
+            this.dialogVisibleOpportunity = true;
+            this.getOpportunityList();
+        },
+        // 获取商机列表
+        getOpportunityList() {
+            this.opportunityLoading = true; // 开始加载
+            const params = {
+                pageNum: this.opportunityPagination.pageNum,
+                pageSize: this.opportunityPagination.pageSize,
+                keyword: this.opportunitySearchForm.keyword
+            };
+            getOpportunityList(params).then(response => {
+                this.opportunityList = response.rows
+                this.opportunityPagination.total = response.total;
+            }).catch(error => {
+                console.error('获取商机列表失败:', error);
+            }).finally(() => {
+                this.opportunityLoading = false; // 加载结束,无论成功失败
+            });
+        },
+        // 表格行点击事件
+        handleRowClick(row) {
+            console.log(row)
+        },
+        handleSave() {
+
+        },
+        // 选择商机确定
+        handleSelectOpportunity() {
+            if (this.multipleSelection.length > 0) {
+                const selected = this.multipleSelection[0];
+                this.formData.opportunityCode = selected.opportunityCode;
+                this.dialogVisibleOpportunity = false;
+            } else {
+                this.$message.warning('请选择一条商机');
+            }
+        },
+        // 处理选择变化
+        handleSelectionChange(val) {
+            this.multipleSelection = val;
+        },
+    }
+}
+</script>
+
+<style scoped>
+.app-container {
+    padding: 0;
+}
+
+/* 详情区域整体样式优化 */
+.detail-section {
+    margin-bottom: 24px;
+    padding: 20px;
+    border: 1px solid #ebeef5;
+    border-radius: 8px;
+    background-color: #ffffff;
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05);
+    transition: all 0.3s ease;
+}
+
+/* 悬停效果 */
+.detail-section:hover {
+    box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.08);
+    border-color: #dcdfe6;
+}
+
+/* 标题样式优化 */
+.section-title {
+    margin: 0 0 20px 0;
+    padding-bottom: 8px;
+    border-bottom: 2px solid #409eff;
+    font-size: 16px;
+    font-weight: bold;
+    color: #303133;
+    display: flex;
+    align-items: center;
+}
+
+/* 标题前添加图标 */
+.section-title::before {
+    content: '';
+    display: inline-block;
+    width: 4px;
+    height: 18px;
+    background-color: #409eff;
+    margin-right: 8px;
+    border-radius: 2px;
+}
+
+.detail-form {
+    margin: 0;
+}
+
+/* 表单行间距优化 */
+.el-row {
+    margin-bottom: 16px;
+}
+
+/* 表单列间距优化 */
+.el-col {
+    margin-bottom: 0;
+}
+
+/* 表单内容样式优化 */
+.el-form-item {
+    margin-bottom: 0;
+}
+
+/* 标签样式增强 */
+.el-form-item__label {
+    font-weight: 500;
+    color: #606266;
+}
+
+/* 表单内容区域 */
+.el-form-item__content {
+    word-break: break-all;
+    color: #303133;
+    line-height: 1.5;
+}
+
+/* 商机选择弹窗样式 */
+.search-container {
+    margin-bottom: 20px;
+}
+
+.pagination-container {
+    margin-top: 20px;
+    text-align: right;
+}
+
+/* 公告正文样式优化 */
+.content-box {
+    max-height: 250px;
+    overflow-y: auto;
+    padding: 15px;
+    border: 1px solid #ebeef5;
+    border-radius: 6px;
+    background-color: #fafafa;
+    white-space: pre-wrap;
+    line-height: 1.6;
+    font-size: 14px;
+    color: #303133;
+}
+
+/* 滚动条样式 */
+.content-box::-webkit-scrollbar {
+    width: 6px;
+    height: 6px;
+}
+
+.content-box::-webkit-scrollbar-track {
+    background: #f1f1f1;
+    border-radius: 3px;
+}
+
+.content-box::-webkit-scrollbar-thumb {
+    background: #c0c4cc;
+    border-radius: 3px;
+}
+
+.content-box::-webkit-scrollbar-thumb:hover {
+    background: #909399;
+}
+
+/* 链接样式优化 */
+.link-text {
+    color: #409eff;
+    text-decoration: none;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    display: inline-block;
+    max-width: 100%;
+    transition: all 0.3s ease;
+    padding: 2px 0;
+}
+
+.link-text:hover {
+    color: #66b1ff;
+    text-decoration: underline;
+}
+
+/* 对话框底部按钮居中 */
+.dialog-footer {
+    text-align: center;
+    padding-top: 20px;
+}
+
+/* 响应式设计 */
+@media screen and (max-width: 768px) {
+    .detail-section {
+        padding: 15px;
+        margin-bottom: 16px;
+    }
+
+    .section-title {
+        font-size: 14px;
+        margin-bottom: 15px;
+    }
+
+    .content-box {
+        max-height: 200px;
+        padding: 12px;
+    }
+
+    .el-form-item__label {
+        font-size: 13px;
+    }
+
+    .el-form-item__content {
+        font-size: 13px;
+    }
+}
+
+/* 数据为空时的占位样式 */
+.el-form-item__content:empty::after {
+    content: '-';
+    color: #c0c4cc;
+}
+
+/* 布尔值样式优化 */
+.bool-value {
+    display: inline-block;
+    padding: 2px 8px;
+    border-radius: 10px;
+    font-size: 12px;
+    font-weight: 500;
+}
+
+.bool-value.true {
+    background-color: #f0f9eb;
+    color: #67c23a;
+}
+
+.bool-value.false {
+    background-color: #fef0f0;
+    color: #f56c6c;
+}
+</style>

+ 35 - 11
src/views/openMarketBid/index.vue

@@ -159,14 +159,17 @@
                 </el-table-column>
                 <el-table-column prop="purchaseUnit" label="采购单位" min-width="150" align="center"></el-table-column>
                 <el-table-column prop="finalUser" label="最终使用客户" min-width="150" align="center"></el-table-column>
-                <el-table-column prop="naturalCustomerId" label="对应自然客户ID" min-width="150" align="center"></el-table-column>
+                <el-table-column prop="naturalCustomerId" label="对应自然客户ID" min-width="150"
+                    align="center"></el-table-column>
                 <el-table-column prop="customerGroup" label="客户群" min-width="100" align="center"></el-table-column>
                 <el-table-column prop="category" label="分类" min-width="80" align="center"></el-table-column>
                 <el-table-column prop="projectName" label="项目名称" min-width="120" align="center"></el-table-column>
                 <el-table-column prop="tenderAgent" label="招标代理" min-width="120" align="center"></el-table-column>
-                <el-table-column prop="tenderAgentPhone" label="代理联系电话" min-width="120" align="center"></el-table-column>
+                <el-table-column prop="tenderAgentPhone" label="代理联系电话" min-width="120"
+                    align="center"></el-table-column>
                 <el-table-column prop="matchKeywords" label="信息匹配词" min-width="150" align="center"></el-table-column>
-                <el-table-column prop="bidDocumentDeadline" label="购买标书截止时间" min-width="150" align="center"></el-table-column>
+                <el-table-column prop="bidDocumentDeadline" label="购买标书截止时间" min-width="150"
+                    align="center"></el-table-column>
                 <el-table-column prop="industry" label="行业" min-width="100" align="center"></el-table-column>
                 <el-table-column prop="branchCompany" label="分公司" min-width="100" align="center"></el-table-column>
                 <el-table-column prop="businessCategory" label="业务分类" min-width="100" align="center"></el-table-column>
@@ -175,7 +178,8 @@
                 <el-table-column prop="bidOpeningDate" label="开标日期" min-width="120" align="center"></el-table-column>
                 <el-table-column prop="announcementUrl" label="公告地址" min-width="200" align="center"></el-table-column>
                 <el-table-column prop="jianyuUrl" label="剑鱼地址" min-width="200" align="center"></el-table-column>
-                <el-table-column prop="tenderInfoPublishTime" label="招标信息发布时间" min-width="150" align="center"></el-table-column>
+                <el-table-column prop="tenderInfoPublishTime" label="招标信息发布时间" min-width="150"
+                    align="center"></el-table-column>
                 <el-table-column prop="publishTime" label="发布时间" min-width="120" align="center"></el-table-column>
                 <el-table-column label="操作" min-width="100" fixed="right">
                     <template slot-scope="scope">
@@ -205,16 +209,19 @@
 
         <!-- 详情组件 -->
         <OpenMarketBidDetails :dialog-visible.sync="dialogVisible" :form-data="currentData" />
+        <OpenMarketBidEdit :dialog-visible.sync="editDialogVisible" :form-data="editFormData" />
     </div>
 </template>
 
 <script>
 // 组件引入详情
 import OpenMarketBidDetails from './details.vue'
-import { getFreeMarketList } from '@/api/newApi/openMarketBid'
+import OpenMarketBidEdit from './edit.vue'
+import { getFreeMarketList, getFreeMarketDetail } from '@/api/newApi/openMarketBid'
 export default {
     components: {
-        OpenMarketBidDetails
+        OpenMarketBidDetails,
+        OpenMarketBidEdit
     },
     data() {
         return {
@@ -268,7 +275,7 @@ export default {
             // 表格加载状态
             tableLoading: false,
             // 公告列表数据
-            noticeList: [ ],
+            noticeList: [],
             // 查询参数
             queryParams: {
                 pageNum: 1,
@@ -284,6 +291,10 @@ export default {
             dialogVisible: false,
             // 当前选中的数据
             currentData: {},
+            // 编辑对话框可见性
+            editDialogVisible: false,
+            // 编辑表单数据
+            editFormData: {},
             // 导出范围
             exportScope: ''
         }
@@ -344,15 +355,28 @@ export default {
         },
         // 编辑
         handleEdit(row) {
-            this.currentData = { ...row };
-            this.dialogVisible = true;
+            getFreeMarketDetail(row.id).then(response => {
+                if (response.code === 200) {
+                    this.editFormData = response.data || {};
+                    this.editDialogVisible = true;
+                } else {
+                    this.$message.error(response.msg || '获取自由市场商机详情失败');
+                }
+            });
         },
         // 更多操作命令处理
         handleCommand(command, row) {
             switch (command) {
                 case 'detail':
-                    this.currentData = { ...row };
-                    this.dialogVisible = true;
+                    // 调用获取自由市场商机详情接口
+                    getFreeMarketDetail(row.id).then(response => {
+                        if (response.code === 200) {
+                            this.currentData = response.data || {};
+                            this.dialogVisible = true;
+                        } else {
+                            this.$message.error(response.msg || '获取自由市场商机详情失败');
+                        }
+                    });
                     break;
                 default:
                     console.log('未知命令:', command);