From 4955996ab044bc275ac78da3543b9d9f5ad7f8d9 Mon Sep 17 00:00:00 2001
From: 廖井涛 <2265517004@qq.com>
Date: 星期五, 12 十二月 2025 16:21:26 +0800
Subject: [PATCH] 提交浏览发货信息

---
 north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue |  226 +++++++++++++++++++++++++++++++-------------------------
 1 files changed, 126 insertions(+), 100 deletions(-)

diff --git a/north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue b/north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue
index 884570f..2fdef27 100644
--- a/north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue
+++ b/north-glass-erp/northglass-erp/src/views/sd/bom/OrderBOM.vue
@@ -45,7 +45,15 @@
   dataTotal : 0,
   pageSize : 50
 })
+let orderBomData =ref({
+  productName:[]
+})
+let bomSum = ref({
+  sumData:[],
+  sumDatilsData:[]
+})
 
+let orderBomDetails = ref(null)
 
 const xGrid = ref()
 const gridOptions = reactive({
@@ -119,38 +127,28 @@
   columns:[
     {title: t('basicData.operate'), width: 110, slots: { default: 'button_slot' },fixed:"left",},
     {type: 'seq', title: t('basicData.Number'), width: 80 ,fixed:"left",},
-
-    {field:'createOrder',title: t('searchOrder.createOrder'), width: 40, slots: { default: 'state' }},
-    {field:'processReview',title: t('order.technology'), width: 40, filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-    {field:'orderReview',title: t('basicData.review'), width: 40, filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-    {field:'productionOrder',title: t('searchOrder.production'), width: 40, filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-    {field:'processingCard',title: t('searchOrder.process'), width: 40, filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-    {field:'warehousing',title: t('searchOrder.storage'), width: 40, filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-    {field:'delivery',title: t('searchOrder.delivery'), width: 40,filters:[{ data: '' }], slots: { default: 'state',filter: 'num2_filter' }},
-
-
     {field: 'orderId',width:120,  title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'customerId',width:120,  title: t('customer.customerNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'customerName',width:120,  title: t('customer.customerName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'project',width:120,  title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'batch',width:120,  title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'quantity',width:120,  title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'goodsQuantity',width:120,  title: t('searchOrder.inventoryNum'), sortable: true},
+   // {field: 'goodsQuantity',width:120,  title: t('searchOrder.inventoryNum'), sortable: true},
     {field: 'area',width:120,  title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'bomPrice',width:120,  title: t('bom.bomPrice'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'money',width:120,  title: t('order.money'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'createTime',width:120,filters:[{ data: '' }],slots: { filter: 'num1_filter' },   title: t('basicData.reportData'), sortable: true},
-    {field: 'updateTime',width:120,   title: t('productStock.approvedDate'), sortable: true},
     {field: 'packType',width:120,  title: t('order.packType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'orderType',width:120,  title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'salesman',width:120,  title: t('order.salesman'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'creator',width:120,  title: t('product.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'verifier',width:120,  title: t('basicData.review'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    //{field: 'verifier',width:120,  title: t('basicData.review'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'perimeter',width:120,  title: t('searchOrder.perimeter'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'deliveryDate',width:120,  title: t('order.deliveryDate'), sortable: true},
     {field: 'customerBatch',width:120,  title: t('order.customerBatch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
 
     //{field: '14',width:120,  title: '澶囨敞',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'deliveryAddress',width:120,  title: t('order.deliveryAddress'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    //{field: 'deliveryAddress',width:120,  title: t('order.deliveryAddress'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
     {field: 'processingNote',width:120,  title: t('order.processingNote'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}
 
   ],
@@ -180,10 +178,10 @@
         if (columnIndex === 0) {
           return t('basicData.total')
         }
-        const List = ["quantity",'goodsQuantity','area','perimeter','money']
+        const List = ["quantity",'goodsQuantity','area','perimeter','money','bomPrice']
         if (List.includes(column.field)) {
-          //return footSum(data, column.field)
-          return total.value[column.field]
+          return footSum(data, column.field)
+          //return total.value[column.field]
         }
         return ''
       })
@@ -343,9 +341,9 @@
   },
   cellClick({ row }){
     rowClickIndex.value = row
-    xGrid.value.menuConfig.body.options[0][3].children.forEach((item)=>{
-      item.disabled=true
-    })
+    // xGrid.value.menuConfig.body.options[0][3].children.forEach((item)=>{
+    //   item.disabled=true
+    // })
     //鍒ゆ柇鏄惁鍏ュ簱
     if(row.warehousing>0){
       return
@@ -383,6 +381,9 @@
       /*total.dataTotal = res.data.total.dataTotal*1
       total.pageTotal= res.data.total.pageTotal*/
       orderInfo.selectDate = res.data.selectDate
+      res.data.data.forEach((item)=>{
+        item.bomPrice=(item.money/1.3).toFixed(2)
+      })
       orderList.value = deepClone(res.data.data)
       xGrid.value.loadData(orderList.value)
     }else{
@@ -481,7 +482,44 @@
 const getTableRow =  (row,type) => {
   switch (type) {
     case 'edit': {
-      dialogTableVisible.value = true
+      if (row.orderId!="" && row.orderId!=null){
+        request.post(`/BomData/getOrderBomData/${row.orderId}`,).then((res) => {
+          if (res.code == 200 ) {
+            orderBomData.value.productName =res.data.data
+            bomSum.value.sumData = res.data.sumData
+            bomSum.value.sumDatilsData  =res.data.sumDataDatils
+            request.post(`/BomData/getBomDataProduct`,orderBomData.value).then((res) => {
+              if (res.code == 200 ) {
+                orderBomDetails.value=res.data.data
+                orderBomData.value.productName.forEach((product, i) => {
+                  const details = orderBomDetails.value[i]?.data || []
+
+                  // 鐢熸垚 parts
+                  const parts = product.product_name.split(/[*+]/)
+                  parts.push("鍏跺畠")
+
+                  product.product_parts = parts.map((p, idx) => {
+                    // 鎵惧嚭鎵�鏈� product_layer == idx+1 鐨� detail
+                    const assignedDetails = details.filter(d => d.product_layer === idx + 1)
+
+                    return {
+                      name: p,
+                      details: assignedDetails
+                    }
+                  })
+                  // 璁$畻鎬讳环
+                  product.totalPrice = details.reduce((sum, d) => sum + (d.materialPric || 0) , 0)
+                })
+                dialogTableVisible.value = true
+              }
+            })
+          }
+        })
+
+
+      }
+
+
       break
     }
 
@@ -543,6 +581,10 @@
   }
 }
 
+//鎬讳环
+const totalPrice = computed(() => {
+  return bomSum.value.sumDatilsData.reduce((sum, d) => sum + d.materialPrice, 0)
+})
 </script>
 
 <template>
@@ -598,7 +640,7 @@
                      link
                      type="primary"
                      size="small">
-            鐢熸垚BOM
+            BOM鏌ヨ
           </el-button>
 
         </template>
@@ -661,100 +703,84 @@
         :close-on-click-modal="false"
         :close-on-press-escape="false"
     >
-      <el-card style="max-width: 480px;margin-left: 45px">
+      <el-card style="max-width: 480px;margin-left: 45px;margin-top: 20px">
+        <!-- header -->
         <template #header>
           <div class="card-header">
             <span style="font-weight: bold">鎴愬搧鍚堣</span>
-            &nbsp &nbsp &nbsp
-            <span>闈㈢Н锛�1312.48銕�</span>
-            &nbsp &nbsp &nbsp
-            <span>鏁伴噺锛�200</span>
-            &nbsp &nbsp &nbsp
-            <span>鍛ㄩ暱锛�5325.7m</span>
+            &nbsp;&nbsp;&nbsp;
+            <span>闈㈢Н锛歿{ bomSum.sumData[0].area.toFixed(2) }}銕�</span>
+            &nbsp;&nbsp;&nbsp;
+            <span>鏁伴噺锛歿{ bomSum.sumData[0].quantity }}</span>
+            &nbsp;&nbsp;&nbsp;
+            <span>鍛ㄩ暱锛歿{ bomSum.sumData[0].perimeter.toFixed(2) }}m</span>
           </div>
         </template>
-        <el-row >
-          <el-col :span="8">6mm瓒呯櫧锛�</el-col>
-          <el-col :span="8">3149.72銕�</el-col>
+
+        <!-- body -->
+        <el-row
+            v-for="(mat, idx) in bomSum.sumDatilsData"
+            :key="idx"
+            style="text-align: left; margin-bottom: 6px"
+        >
+          <el-col :span="8">{{ mat.material }}锛�</el-col>
+          <el-col :span="8">{{ mat.consume }}銕�</el-col>
         </el-row>
-        <el-row>
-          <el-col :span="8">8mm瓒呯櫧锛�</el-col>
-          <el-col :span="8">787.72銕�</el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="8">閾濇锛�</el-col>
-          <el-col :span="8">2662.85m</el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="8">0.76PVB锛�</el-col>
-          <el-col :span="8">1706.22銕�</el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="8">鍏朵粬锛�</el-col>
-          <el-col :span="8">5</el-col>
-        </el-row>
+
+        <!-- footer -->
+        <template #footer>
+          鍚堣 楼{{ totalPrice }}
+        </template>
       </el-card>
 
-
-      <el-card style="max-width: 480px;margin-left: 45px;margin-top: 20px">
+      <el-card
+          v-for="item in orderBomData.productName"
+          :key="item.product_id"
+          style="max-width: 480px;margin-left: 45px;margin-top: 20px"
+      >
+        <!-- header -->
         <template #header>
           <div class="card-header">
-            <span style="font-weight: bold">6mm瓒呯櫧閽㈠寲+12A+6mm瓒呯櫧閽㈠寲+0.76PVB+6mm瓒呯櫧閽㈠寲</span>
-            <br/>
-            <span>闈㈢Н锛�656.24銕�</span>
-            &nbsp &nbsp &nbsp
-            <span>鏁伴噺锛�100</span>
-            &nbsp &nbsp &nbsp
-            <span>鍛ㄩ暱锛�2662.85m</span>
+            <span style="font-weight: bold">{{ item.product_name }}</span>
+            <br />
+            <span>闈㈢Н锛歿{ item.area }}</span>
+            &nbsp;&nbsp;&nbsp;
+            <span>鏁伴噺锛歿{ item.quantity }}</span>
+            &nbsp;&nbsp;&nbsp;
+            <span>鍛ㄩ暱锛歿{ Number(item.perimeter).toFixed(2) }}</span>
           </div>
         </template>
-        <el-row >
-          <el-col :span="8">6mm瓒呯櫧锛�</el-col>
-          <el-col :span="8">2362.464銕�</el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="8">閾濇锛�</el-col>
-          <el-col :span="8">2662.85m</el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="8">0.76PVB锛�</el-col>
-          <el-col :span="8">853.11銕�</el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="8">鍏朵粬锛�</el-col>
-          <el-col :span="8">5</el-col>
+
+        <!-- body -->
+        <el-row
+            v-for="(part, index) in item.product_parts"
+            :key="index"
+            style="text-align: left; margin-bottom: 6px"
+        >
+          <el-col :span="24">
+
+              <el-row v-for="(d, j) in part.details"
+                      :key="j"
+                      style="text-align: left">
+              <el-col :span="8">{{ d.material }}</el-col>
+              <el-col :span="8">{{ d.consume }}{{d.unit}}</el-col>
+              </el-row>
+<!--            <hr v-if="part.details.length > 0" />-->
+          </el-col>
         </el-row>
 
-<!--          <template #footer>鍚堣xx鍏�</template>-->
+        <!-- footer -->
+        <template #footer>鍚堣 {{ item.totalPrice }}</template>
       </el-card>
 
-      <el-card style="max-width: 480px;margin-left: 45px;margin-top: 20px">
-        <template #header>
-          <div class="card-header">
-            <span style="font-weight: bold">8mm瓒呯櫧閽㈠寲+0.76PVB+6mm瓒呯櫧閽㈠寲</span>
-            <br/>
-            <span>闈㈢Н锛�656.24銕�</span>
-            &nbsp &nbsp &nbsp
-            <span>鏁伴噺锛�100</span>
-            &nbsp &nbsp &nbsp
-            <span>鍛ㄩ暱锛�2662.85m</span>
-          </div>
-        </template>
-        <el-row >
-          <el-col :span="8">6mm瓒呯櫧锛�</el-col>
-          <el-col :span="8">787.72銕�</el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="8">8mm瓒呯櫧锛�</el-col>
-          <el-col :span="8">787.72銕�</el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="8">0.76PVB锛�</el-col>
-          <el-col :span="8">853.11銕�</el-col>
-        </el-row>
-
-        <!--          <template #footer>鍚堣xx鍏�</template>-->
-      </el-card>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary">杞噰璐崟</el-button>
+          <el-button type="primary">
+            棰嗘枡
+          </el-button>
+        </div>
+      </template>
     </el-dialog>
 
 

--
Gitblit v1.8.0