From b3fedd4221b807a07058be9d5d5d8ba8998adbcb Mon Sep 17 00:00:00 2001
From: Bang Hu <hu_bang@hotmail.com>
Date: 星期四, 11 九月 2025 21:35:31 +0800
Subject: [PATCH] Bug修改代码提交

---
 src/views/productManage/price/index.vue |  157 ++++++++++++++++++++++++++++------------------------
 1 files changed, 84 insertions(+), 73 deletions(-)

diff --git a/src/views/productManage/price/index.vue b/src/views/productManage/price/index.vue
index 55821cb..bdf27a7 100644
--- a/src/views/productManage/price/index.vue
+++ b/src/views/productManage/price/index.vue
@@ -13,20 +13,20 @@
             <el-icon class="section-icon"><Goods /></el-icon>
             <span>浜у搧鍩烘湰淇℃伅</span>
           </div>
-          <div class="id-info">浜у搧ID锛歿{ currentProductId || '鏈彁渚�' }}</div>
+<!--          <div class="id-info">浜у搧ID锛歿{ currentProductId || '鏈彁渚�' }}</div>-->
         </div>
       </template>
 
       <el-descriptions v-if="productDetail" :column="2" border>
         <el-descriptions-item label="浜у搧鍚嶇О" label-width="10%">{{ productDetail.name }}</el-descriptions-item>
-        <el-descriptions-item label="鎻愭姤鍗曚綅" label-width="10%">{{ productDetail.submitUnit }}</el-descriptions-item>
-        <el-descriptions-item label="鎻愭姤浜�" label-width="10%">{{ productDetail.submitter }}</el-descriptions-item>
-        <el-descriptions-item label="琛屼笟棰嗗煙" label-width="10%">{{ productDetail.industry }}</el-descriptions-item>
-        <el-descriptions-item label="鍗曚綅宸ョ▼" label-width="10%">{{ productDetail.projectUnit }}</el-descriptions-item>
-        <el-descriptions-item label="浜т笟闃舵" label-width="10%">{{ productDetail.industryStage }}</el-descriptions-item>
-        <el-descriptions-item label="浜у搧绫诲瀷"label-width="10%">{{ productDetail.productType }}</el-descriptions-item>
+        <el-descriptions-item label="鎻愭姤鍗曚綅" label-width="10%">{{ productDetail.submissionUnit }}</el-descriptions-item>
+        <el-descriptions-item label="鎻愭姤浜�" label-width="10%">{{ productDetail.createBy }}</el-descriptions-item>
+        <el-descriptions-item label="琛屼笟棰嗗煙" label-width="10%">{{ productDetail.industrialChainName }}</el-descriptions-item>
+        <el-descriptions-item label="鍗曚綅宸ョ▼" label-width="10%">{{ productDetail.importantAreaName }}</el-descriptions-item>
+        <el-descriptions-item label="浜т笟闃舵" label-width="10%">{{ productDetail.businessProcessName }}</el-descriptions-item>
+        <el-descriptions-item label="浜у搧绫诲瀷"label-width="10%">{{ productDetail.typeName }}</el-descriptions-item>
         <el-descriptions-item label="浜у搧绠�浠�" :span="3">
-          <div class="intro">{{ productDetail.description }}</div>
+          <div class="intro">{{ productDetail.describe }}</div>
         </el-descriptions-item>
       </el-descriptions>
       <el-empty v-else description="鏈壘鍒拌浜у搧鐨勮鎯�" />
@@ -49,16 +49,16 @@
             class="pricing-group"
           >
             <div class="group-header">{{ group.suiteName }}</div>
-            <div class="pricing-cards-wrapper">
-              <div
+          <div class="pricing-cards-wrapper">
+            <div
                 v-for="pricing in group.items"
-                :key="pricing.id"
-                class="pricing-card"
-                :class="{
-                  'pricing-card-enabled': pricing.enableStatus === 'ENABLED',
-                  'pricing-card-disabled': pricing.enableStatus === 'DISABLED'
-                }"
-              >
+              :key="pricing.id"
+              class="pricing-card"
+              :class="{
+                'pricing-card-enabled': pricing.enableStatus === 'ENABLED',
+                'pricing-card-disabled': pricing.enableStatus === 'DISABLED'
+              }"
+            >
               <div class="pricing-card-table">
                 <div class="pricing-row">
                   <div class="pricing-cell label-cell">閿�鍞舰寮�</div>
@@ -144,16 +144,16 @@
         class="price-form"
       >
 
-        <el-form-item label="浜у搧濂椾欢" prop="productSuite">
+            <el-form-item label="浜у搧濂椾欢" prop="productSuite">
               <el-select v-model="formData.productSuite" placeholder="璇烽�夋嫨" style="width: 60%">
                 <el-option v-for="opt in productSuiteOptions" :key="opt.value" :label="opt.label" :value="opt.value" />
               </el-select>
             </el-form-item>
-        <el-form-item label="瀹㈡埛瀵硅薄" prop="customerObject">
+            <el-form-item label="瀹㈡埛瀵硅薄" prop="customerObject">
               <el-radio-group v-model="formData.customerObject">
                 <el-radio v-for="opt in customerObjectOptions" :key="opt.value" :label="opt.value">{{ opt.label }}</el-radio>
               </el-radio-group>
-        </el-form-item>
+            </el-form-item>
         <el-form-item label="閿�鍞舰寮�" prop="salesForm" class="sales-form-item">
           <el-radio-group v-model="formData.salesForm" class="sales-form-group">
             <el-radio v-for="opt in salesFormOptions" :key="opt.value" :label="opt.value">{{ opt.label }}</el-radio>
@@ -208,7 +208,7 @@
                 <el-radio v-for="opt in enableStatusOptions" :key="opt.value" :label="opt.value">{{ opt.label }}</el-radio>
               </el-radio-group>
             </el-form-item>
-    
+        
 
         <el-form-item label="澶囨敞">
           <el-input type="textarea" v-model="formData.remark" :rows="3" placeholder="璇疯緭鍏ュ娉�" />
@@ -223,12 +223,6 @@
       </template>
     </el-dialog>
 
-    <!-- 浠锋牸鏌ョ湅鍣� -->
-    <ProductPriceViewer
-      v-model="showPriceViewer"
-      :product-id="currentProductId"
-      @order="handleOrderResult"
-    />
   </div>
 </template>
 
@@ -239,19 +233,21 @@
 import { Goods, Lock, Unlock } from '@element-plus/icons-vue'
 import ProductPriceViewer from '@/views/productManage/productPriceViewer/index.vue'
 import productPricingApi from '@/api/productPricingApi'
+import productApi from '@/api/productApi'
 
 
 interface ProductDetail {
   id: string
   name: string
-  submitUnit: string
-  submitter: string
-  industry: string
-  projectUnit: string
-  industryStage: string
-  productType: string
-  description: string
+  submissionUnit: string
+  createBy: string
+  industrialChainName: string
+  importantAreaName: string
+  businessProcessName: string
+  typeName: string
+  describe: string
   shelfStatus?: '寰呬笂鏋�' | '宸蹭笂鏋�' | '宸蹭笅鏋�'
+  listingStatusName?: ''
 }
 
 interface PriceItem {
@@ -282,7 +278,7 @@
 })
 
 const productDetail = ref<ProductDetail | null>(null)
-const shelfStatus = computed(() => productDetail.value?.shelfStatus || '寰呬笂鏋�')
+const shelfStatus = computed(() => productDetail.value?.listingStatusName || '寰呬笂鏋�')
 const statusClass = computed(() => {
   switch (shelfStatus.value) {
     case '宸蹭笂鏋�':
@@ -297,32 +293,32 @@
 })
 
 // 妯℃嫙浜у搧璇︽儏鏁版嵁婧�
-const mockProductMap: Record<string, ProductDetail> = {
-  '1': {
-    id: '1',
-    name: '鏁板瓧鍖栦骇鍝丄',
-    submitUnit: '涓氦涓�鍏眬',
-    submitter: '寮犱笁',
-    industry: '浜ら�氬熀纭�璁炬柦',
-    projectUnit: '鏌愰珮閫熷叕璺伐绋�',
-    industryStage: '搴旂敤闃舵',
-    productType: '杞欢/骞冲彴',
-    description: '鏈骇鍝佸畾浣嶄负浠ュ缓璁炬湡BIM鏁板瓧璧勪骇浣滀负鏁板瓧搴曠洏锛岀粨鍚堥」鐩繍钀ョ淮淇濋渶姹傜殑瀹炴椂鎬с�佷氦浜掓�с�佷究鎹锋�х殑涓夌淮鍙鍖栬繍缁寸鐞嗙郴缁熴�傜郴缁熸彁渚涢」鐩暟瀛楀寲銆佹櫤鑳藉寲杩愮淮绠$悊鍔熻兘锛岃兘澶熻В鍐冲缓绛戣繍琛岀淮鎶ょ鐞嗕腑鐨勫疄闄呴棶棰橈紝瀹炵幇淇℃伅蹇�熸暣鍚堜笌鏌ヨ銆佷俊鎭湁鏁堝叡浜笌浼犻�掞紝鎻愬崌椤圭洰缁煎悎绠$悊涓庣淮鎶ゆ按骞炽��',
-    shelfStatus: '寰呬笂鏋�'
-  },
-  '2': {
-    id: '2',
-    name: '鏁板瓧鍖栦骇鍝丅',
-    submitUnit: '涓氦浜岃埅灞�',
-    submitter: '鏉庡洓',
-    industry: '甯傛斂宸ョ▼',
-    projectUnit: '鏅烘収绠″粖椤圭洰',
-    industryStage: '鐮斿彂闃舵',
-    productType: '纭欢/浼犳劅',
-    description: '闈㈠悜鍩庡競绠″粖鐩戞祴鐨勪紶鎰熻澶囦笌閲囬泦缃戝叧锛屾敮鎸佽竟缂樿绠椾笌杩滅▼杩愮淮銆�',
-    shelfStatus: '宸蹭笂鏋�'
-  }
-}
+// const mockProductMap: Record<string, ProductDetail> = {
+//   '1': {
+//     id: '1',
+//     name: '鏁板瓧鍖栦骇鍝丄',
+//     submitUnit: '涓氦涓�鍏眬',
+//     submitter: '寮犱笁',
+//     industry: '浜ら�氬熀纭�璁炬柦',
+//     projectUnit: '鏌愰珮閫熷叕璺伐绋�',
+//     industryStage: '搴旂敤闃舵',
+//     productType: '杞欢/骞冲彴',
+//     description: '鏈骇鍝佸畾浣嶄负浠ュ缓璁炬湡BIM鏁板瓧璧勪骇浣滀负鏁板瓧搴曠洏锛岀粨鍚堥」鐩繍钀ョ淮淇濋渶姹傜殑瀹炴椂鎬с�佷氦浜掓�с�佷究鎹锋�х殑涓夌淮鍙鍖栬繍缁寸鐞嗙郴缁熴�傜郴缁熸彁渚涢」鐩暟瀛楀寲銆佹櫤鑳藉寲杩愮淮绠$悊鍔熻兘锛岃兘澶熻В鍐冲缓绛戣繍琛岀淮鎶ょ鐞嗕腑鐨勫疄闄呴棶棰橈紝瀹炵幇淇℃伅蹇�熸暣鍚堜笌鏌ヨ銆佷俊鎭湁鏁堝叡浜笌浼犻�掞紝鎻愬崌椤圭洰缁煎悎绠$悊涓庣淮鎶ゆ按骞炽��',
+//     shelfStatus: '寰呬笂鏋�'
+//   },
+//   '2': {
+//     id: '2',
+//     name: '鏁板瓧鍖栦骇鍝丅',
+//     submitUnit: '涓氦浜岃埅灞�',
+//     submitter: '鏉庡洓',
+//     industry: '甯傛斂宸ョ▼',
+//     projectUnit: '鏅烘収绠″粖椤圭洰',
+//     industryStage: '鐮斿彂闃舵',
+//     productType: '纭欢/浼犳劅',
+//     description: '闈㈠悜鍩庡競绠″粖鐩戞祴鐨勪紶鎰熻澶囦笌閲囬泦缃戝叧锛屾敮鎸佽竟缂樿绠椾笌杩滅▼杩愮淮銆�',
+//     shelfStatus: '宸蹭笂鏋�'
+//   }
+// }
 
 const loading = ref(false)
 const priceList = ref<any[]>([])
@@ -503,14 +499,17 @@
   }
   loading.value = true
   try {
-    productDetail.value = mockProductMap[productId] || null
-    // const detailRes: any = await productApi.getProductDetail({ id: productId })
-    // if (detailRes?.code === 200) {
-    //   productDetail.value = detailRes.data || null
-    // } else {
-    //   productDetail.value = null
-    //   ElMessage.error(detailRes?.msg || '鑾峰彇浜у搧璇︽儏澶辫触')
-    // }
+    // productDetail.value = mockProductMap[productId] || null
+    const data = {
+      id: productId
+    }
+    const detailRes: any = await productApi.getProductById(data)
+    if (detailRes?.code === 200) {
+      productDetail.value = detailRes.data || null
+    } else {
+      productDetail.value = null
+      ElMessage.error(detailRes?.msg || '鑾峰彇浜у搧璇︽儏澶辫触')
+    }
     await loadPricingList(productId)
   } catch (e) {
     productDetail.value = null
@@ -638,7 +637,7 @@
   
   return {
     id: row.id,
-    productId: Number(row.productId),
+    productId: row.productId,
     productName: productDetail.value?.name,
     suiteName: row.productSuite,
     salesForm: mapSalesFormToCN(row.salesForm),
@@ -789,7 +788,7 @@
    
     return {
       id: isEditMode.value && formData.id  ? formData.id : undefined,
-      productId: Number(currentProductId.value),
+      productId: currentProductId.value,
       productName: productDetail.value?.name,
       suiteName: formData.productSuite,
       salesForm: mapSalesFormToCN(formData.salesForm),
@@ -812,7 +811,7 @@
       const res: any = await productPricingApi.update(payload)
       if (res?.code === 200) {
         ElMessage.success('淇敼鎴愬姛')
-      } else {
+    } else {
         ElMessage.error(res?.msg || '淇敼澶辫触')
         return
       }
@@ -826,6 +825,18 @@
         return
       }
       ElMessage.success('鏂板缓鎴愬姛')
+      // 淇敼浜у搧鐘舵�佷负宸茶浠�
+      // 鍒ゆ柇 浜у搧瀹氫环鍒楄〃鏄惁涓虹┖锛屼负绌哄垯鏇存柊鐘舵�侊紝涓嶄负绌哄垯璇存槑鏇存柊杩囦簡锛屼笉闇�瑕佸湪姝ゆ洿鏂�
+      if (priceList.value.length === 0) {
+        const updateParams = {
+          id: currentProductId.value,
+          listingStatus: 'PRICED'
+        }
+        const res: any = await productApi.updateProductStatus(updateParams)
+        if (res?.code !== 200) {
+          console.log('浜у搧鐘舵�佹洿鏂板け璐ワ紒锛�')
+        }
+      }
     }
 
     dialogVisible.value = false
@@ -845,7 +856,7 @@
 function handleToggleEnableStatus(row: any) {
   const newStatus = row.enableStatus === 'ENABLED' ? 'DISABLED' : 'ENABLED'
   ElMessageBox.confirm(
-    `纭瑕�${newStatus === 'ENABLED' ? '鍚敤' : '鍋滅敤'}璇ヤ环鏍�(ID: ${row.id})鍚楋紵`,
+    `纭瑕�${newStatus === 'ENABLED' ? '鍚敤' : '鍋滅敤'}璇ュ畾浠锋爣鍑嗗悧锛焋,
     '鐘舵�佸彉鏇�',
     { confirmButtonText: '纭畾', cancelButtonText: '鍙栨秷', type: 'warning' }
   )

--
Gitblit v1.8.0