From 15a8feb66e7f0194bdf86e5cc8de527dec5b6f5a Mon Sep 17 00:00:00 2001
From: 廖井涛 <2265517004@qq.com>
Date: 星期二, 28 十月 2025 11:34:09 +0800
Subject: [PATCH] 订单发货界面取消筛选保存提示以及双击复制内容功能

---
 north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue |  292 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 260 insertions(+), 32 deletions(-)

diff --git a/north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue b/north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue
index de2dbec..c976809 100644
--- a/north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue
+++ b/north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue
@@ -11,10 +11,14 @@
 import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove";
 import { useI18n } from 'vue-i18n'
 import OrderOtherMoney from "@/components/sd/order/OrderOtherMoney.vue";
+import FinishedGlassShelfInformation from "@/views/mm/finishedGlassShelf/FinishedGlassShelfInformation.vue";
+import CreateFinishedGlassShelfEmit from "@/views/mm/finishedGlassShelf/CreateFinishedGlassShelfEmit.vue";
 import footSum from "@/hook/footSum";
 import {changeFilterEvent,filterChanged} from "@/hook"
 import companyInfo from "@/stores/sd/companyInfo";
 import {multiply} from "@/utils/decimal";
+import MaterialAddition from "@/views/mm/ingredientStock/MaterialAddition.vue";
+import {copyTableCellValue} from "@/hook/copyTableCellValue";
 
 //璇█鑾峰彇
 const { t } = useI18n()
@@ -24,6 +28,8 @@
 const username = userStore.user.userName
 const userid = userStore.user.userId
 const company = companyInfo()
+let dialogTableVisible = ref(false)
+let dialogTableVisible2 = ref(false)
 let produceList = ref([])
 let cellArea = ref()
 let otherMoneyVisible = ref(false)
@@ -186,12 +192,23 @@
 
         pageNum=1
         produceList = deepClone(res.data.data)
+
+
+        const orderDetails = res.data.data
+        orderDetails.forEach(item => {
+          item.otherColumns = JSON.parse(item.otherColumns)
+        })
+        xGrid.value.reloadData(orderDetails)
         xGrid.value.loadData(produceList)
 
-
+        if(userStore.user.permissions.indexOf('createDelivery.add') > -1&&userStore.user.permissions.indexOf('createDelivery.review') > -1){
+          gridOptions.toolbarConfig.buttons[0].visible  = false
+        }else{
+          gridOptions.toolbarConfig.buttons[1].visible  = false
+        }
         //绂佺敤鎸夐挳
-        gridOptions.toolbarConfig.buttons[1].disabled  = true
-        gridOptions.toolbarConfig.buttons[2].disabled = true
+        gridOptions.toolbarConfig.buttons[2].disabled  = true
+        gridOptions.toolbarConfig.buttons[3].disabled = true
         //鏄剧ず澶嶉�夋
         xGrid.value.showColumn("select")
         gridOptions.loading=false
@@ -213,21 +230,28 @@
         titleUploadData.value=deepClone(res.data.delivery)
         titleUploadData.value.deliveryId=str
 
+        if(userStore.user.permissions.indexOf('createDelivery.add') > -1&&userStore.user.permissions.indexOf('createDelivery.review') > -1){
+          gridOptions.toolbarConfig.buttons[0].visible  = false
+        }else{
+          gridOptions.toolbarConfig.buttons[1].visible  = false
+        }
+        //鍒ゆ柇鏄惁鍙戣揣鍑哄簱
+        if(!company.deliveryOutbound){
+          if(titleUploadData.value.stockState!==0){
+            gridOptions.toolbarConfig.buttons[3].disabled = true
+          }
+        }
         //鏍规嵁瀹℃牳鐘舵�佹樉绀哄鏍告寜閽垨鑰呮槸鍙嶅鎸夐挳
-
         if(titleUploadData.value.deliveryState!==0){
+          gridOptions.toolbarConfig.buttons[2].disabled = true
           gridOptions.toolbarConfig.buttons[1].disabled = true
-          gridOptions.toolbarConfig.buttons[0].disabled = true
         }
         if(titleUploadData.value.deliveryState===0){
-          gridOptions.toolbarConfig.buttons[2].disabled = true
+          gridOptions.toolbarConfig.buttons[3].disabled = true
         }
-        if(titleUploadData.value.stockState!==0){
-          gridOptions.toolbarConfig.buttons[2].disabled = true
-        }
+
         pageNum=1
         produceList = deepClone(res.data.data)
-
         const orderDetails = res.data.data
         orderDetails.forEach(item => {
           item.otherColumns = JSON.parse(item.otherColumns)
@@ -283,7 +307,7 @@
       options: [
         [
           { code: 'copyChecked', name: t('basicData.selectSame'), prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
-          //{ code: 'otherMoney', name: t('basicData.otherAmounts'), prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false }
+          { code: 'copyAll', name: t('basicData.sameAfterwards'), prefixIcon: 'vxe-icon-feedback', visible: true, disabled: false },
         ]
       ]
     }
@@ -313,12 +337,14 @@
     {field: 'select',type:'checkbox',title: t('basicData.check'), width: 80,fixed:"left"},
     {type: 'seq', title: t('basicData.Number'), width: 80 ,fixed:"left"},
     {field: 'orderId',width:120,  title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {field: 'orderNumber',width:120,  title: t('order.OrderNum'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {field: 'finishedGoodsInventory.boxNo',width:120,  title: t('productStock.boxNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'productName',width:120,  title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'width',width:120,  title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'height',width:120,  title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'deliveryDetail.quantity',width:120,  title: t('delivery.deliveryQuantity'),editRender: { name: 'input' },filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
     {field: 'finishedGoodsInventory.quantityAvailable',width:120,  title: t('delivery.availableStock'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
-    {field: 'order.quantity',width:120,  title: t('delivery.unpaidQuantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {field: 'order.quantity',width:160,  title: t('delivery.unpaidQuantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'quantity',width:120,  title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     //{field: 'buildingNumber',width:120,  title: '妤煎彿',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'productId',width:120,   title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
@@ -327,7 +353,7 @@
     {field: 'deliveryDetail.money',width:120,  title: t('order.grossAmount'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'order.batch',width:120,  title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'shape',width:120,  title: t('order.shape'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
-    {field: 'finishedGoodsInventory.actualSignalArea',width:120,   title: t('productStock.singlePieceArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {field: 'area',width:120,   title: t('productStock.singlePieceArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'grossArea',width:120,   title: t('productStock.totalArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'computeArea',width:120,  title: t('order.computeArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'computeGrossArea',width:120,  title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
@@ -341,8 +367,10 @@
   toolbarConfig: {
     buttons: [
       {'code': 'add', 'name': t('basicData.save'),status: 'primary',icon: 'vxe-icon-save'},
+      {'code': 'addToExamine', 'name': t('reportingWorks.saveAndReview'),status: 'primary',icon: 'vxe-icon-save'},
       {'code': 'toExamine', 'name': t('basicData.review'),status: 'primary'},
-      {'code': 'CounterExamination', 'name': t('basicData.cancelReview'),status: 'primary'}
+      {'code': 'CounterExamination', 'name': t('basicData.cancelReview'),status: 'primary'},
+      //{'code': 'glassShelf', 'name': t('finishedGlassShelf.finishedGlassShelfEmit'),status: 'primary'}
     ],
     /*import: false,
    export: true,
@@ -388,11 +416,6 @@
             return
           }
           //琛ㄥご鏁版嵁鏍¢獙
-          const project = titleUploadData.value.project
-          if(project === null || project === undefined || project === ''){
-            ElMessage.error(t('delivery.pleaseEnterTheAmountOfFunds'))
-            return
-          }
           const paymentTerms = titleUploadData.value.paymentTerms
           if(paymentTerms === null || paymentTerms === undefined || paymentTerms === ''){
             ElMessage.error(t('delivery.pleaseSelectPaymentTerms'))
@@ -412,15 +435,22 @@
             titleUploadData.value.freightQuantity=0
           }
 
+          if($grid.getCheckedFilters().length!==0){
+            ElMessage.error(t('order.msg.pleaseCancelTheFilteringFirst'))
+            return
+          }
 
           let flowData = ref({
             delivery: selectRecords,
             title: titleUploadData.value,
             deliveryId: route.query.deliveryID,
             otherMoney:otherMoney.value,
-            deliveryIdType:company.deliveryIdType
+            deliveryIdType:company.deliveryIdType,
+            deliveryOutbound:company.deliveryOutbound,
+            type:2
 
           })
+          gridOptions.toolbarConfig.buttons[0].disabled = true
            request.post("/delivery/insertDelivery", flowData.value).then((res) => {
              if(res.code==200 && res.data==="true"){
                ElMessage.success(t('delivery.deliveryNoteSubmittedSuccessfully'))
@@ -435,26 +465,31 @@
              }else if(res.data==="false1"){
                ElMessage.warning(t('delivery.pleaseMsg1'))
              }else if(res.data==="false2"){
-               ElMessage.warning("璁㈠崟瀛樺湪宸插彂璐ц鍒锋柊鐣岄潰")
+               ElMessage.warning(t('basicData.msg.quantityError'))
              }else if(res.data==="false3"){
-               ElMessage.warning("鏁版嵁涓嶅瓨鍦�")
+               ElMessage.warning(t('basicData.msg.dataDoesNotExist'))
              }else{
                ElMessage.warning(t('basicData.msg.saveFail'))
              }
            }).catch((err)=>{
              ElMessage.error(t('basicData.msg.ServerConnectionError'))
              router.push("/login")
+           }).finally(()=>{
+             gridOptions.toolbarConfig.buttons[0].disabled = false
            })
           break
         }
         case 'toExamine': {
           let flowData = ref({
             deliveryId: route.query.deliveryID,
-            type: 2
+            type: 2,
+            userName:userStore.user.userName,
+            userId:userStore.user.userId,
+            deliveryOutbound:company.deliveryOutbound
 
           })
           request.post("/delivery/updateDeliveryToExamine", flowData.value).then((res) => {
-            if (res.code == 200 && res.data===true) {
+            if (res.code == 200 && res.data==="true") {
               ElMessage.success(t('basicData.msg.ReviewSuccess'))
               //router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
               router.push({path:'/main/delivery/createDelivery',query:{
@@ -472,11 +507,14 @@
         case 'CounterExamination': {
           let flowData = ref({
             deliveryId: route.query.deliveryID,
-            type: 0
+            type: 0,
+            userName:userStore.user.userName,
+            userId:userStore.user.userId,
+            deliveryOutbound:company.deliveryOutbound
 
           })
           request.post("/delivery/updateDeliveryToExamine", flowData.value).then((res) => {
-            if (res.code == 200 && res.data===true) {
+            if (res.code == 200 && res.data==="true") {
               ElMessage.success(t('basicData.msg.cancelReviewSuccess'))
               //router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
               router.push({path:'/main/delivery/createDelivery',query:{
@@ -491,7 +529,93 @@
           })
           break
         }
+        case 'glassShelf': {
+          dialogTableVisible.value=true
+          /*if(titleUploadData.value.deliveryId!=null&&titleUploadData.value.deliveryId!=''){
+            router.push({path:'/main/finishedGlassShelf/finishedGlassShelfInformation',query:{deliveryID:titleUploadData.value.deliveryId}})
+          }else if(number.value!=null){
+            router.push({path:'/main/finishedGlassShelf/finishedGlassShelfInformation',query:{orderId:number.value}})
+          }*/
 
+          break
+        }
+        case 'addToExamine': {
+          const selectRecords = $grid.getCheckboxRecords()
+
+          if (selectRecords.length === 0) {
+            ElMessage.warning(t('productStock.unselectedData'))
+            return
+          }
+          const errMap = await $grid.validate(selectRecords)
+          if (errMap) {
+            ElMessage.warning(t('productStock.dataVerificationFailed'))
+            return
+          }
+          //琛ㄥご鏁版嵁鏍¢獙
+          const paymentTerms = titleUploadData.value.paymentTerms
+          if(paymentTerms === null || paymentTerms === undefined || paymentTerms === ''){
+            ElMessage.error(t('delivery.pleaseSelectPaymentTerms'))
+            return
+          }
+          const payMethod = titleUploadData.value.payMethod
+          if(payMethod === null || payMethod === undefined || payMethod === ''){
+            ElMessage.error(t('delivery.pleaseEnterThePaymentMethod'))
+            return
+          }
+          const freightPrice = titleUploadData.value.freightPrice
+          if(freightPrice=== null || freightPrice === undefined || freightPrice === ''){
+            titleUploadData.value.freightPrice=0
+          }
+          const freightQuantity = titleUploadData.value.freightQuantity
+          if(freightQuantity=== null || freightQuantity === undefined || freightQuantity === ''){
+            titleUploadData.value.freightQuantity=0
+          }
+
+          if($grid.getCheckedFilters().length!==0){
+            ElMessage.error(t('order.msg.pleaseCancelTheFilteringFirst'))
+            return
+          }
+
+
+          let flowData = ref({
+            delivery: selectRecords,
+            title: titleUploadData.value,
+            deliveryId: route.query.deliveryID,
+            otherMoney:otherMoney.value,
+            deliveryIdType:company.deliveryIdType,
+            deliveryOutbound:company.deliveryOutbound,
+            type:2
+
+          })
+          gridOptions.toolbarConfig.buttons[1].disabled = true
+          request.post("/delivery/insertDelivery", flowData.value).then((res) => {
+            if(res.code==200 && res.data==="true"){
+              ElMessage.success(t('delivery.deliveryNoteSubmittedSuccessfully'))
+              //router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
+              if(titleUploadData.value.deliveryId.trim()===""){
+                router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
+              }else{
+                router.push({path:'/main/delivery/createDelivery',query:{
+                    deliveryID:titleUploadData.value.deliveryId,
+                    random:Math.random()}})
+              }
+            }else if(res.data==="false1"){
+              ElMessage.warning(t('delivery.pleaseMsg1'))
+            }else if(res.data==="false2"){
+              ElMessage.warning(t('basicData.msg.quantityError'))
+            }else if(res.data==="false3"){
+              ElMessage.warning(t('basicData.msg.dataDoesNotExist'))
+            }else{
+              ElMessage.warning(t('basicData.msg.saveFail'))
+            }
+          }).catch((err)=>{
+            ElMessage.error(t('basicData.msg.ServerConnectionError'))
+            router.push("/login")
+          }).finally(()=>{
+            gridOptions.toolbarConfig.buttons[1].disabled = false
+          })
+          break
+        }
       }
     }
   },
@@ -528,6 +652,34 @@
           }
           break
         }
+        case 'copyAll' :{
+          let result = toolbarButtonClickEvent()
+          if(result){
+            const dataList = xGrid.value.getTableData().visibleData
+            let firstVal=null;
+            if(result.cell.indexOf('.')>-1){
+              firstVal = eval("dataList["+result.start +"]."+result.cell)
+            }else {
+              firstVal=dataList[result.start][result.cell];
+            }
+            dataList.forEach((item,index) =>{
+              if(index>=result.start){
+                //鍙栨秷閫変腑
+                if(parseInt(firstVal)<=0){
+                  xGrid.value.setCheckboxRow(item, false);
+                }
+                if(result.cell.indexOf('.')>-1){
+                  const  columnArr = result.cell.split('.')
+                  item[columnArr[0]][columnArr[1]]  = firstVal
+                }else{
+                  item[result.cell]  = firstVal
+                }
+
+              }
+            })
+          }
+          break
+        }
         case 'otherMoney' :{
           otherMoneyVisible.value=true
           break
@@ -535,6 +687,9 @@
 
       }
     }
+  },
+  cellDblclick ({row,column}) {
+    copyTableCellValue(row,column)
   }
 }
 
@@ -559,6 +714,22 @@
     //titleUploadData.value.money=countMoney(xGrid.value.getTableData().fullData).toString()
   }
 }
+
+function getNestedProperty(obj, path) {
+  return path.split('.').reduce(function(o, p) {
+    if(o && o.hasOwnProperty(p)) {
+      return o[p];
+    }
+  }, obj);
+}
+
+function setNestedValue(obj, path, value) {
+  const keys = path.split('.');
+  const lastKey = keys.pop();
+  const lastObj = keys.reduce((obj, key) => obj[key], obj);
+  lastObj[lastKey] = value;
+}
+
 
 /*鏁版嵁鏍¢獙*/
 const validRules = ref({
@@ -599,19 +770,31 @@
   }
 
 }
+const datas=ref(null)
+const handleChildResult = (data) => {
+  datas.value=data
+  dialogTableVisible.value=false
+  dialogTableVisible2.value=true
+};
+
+const handleChildResult2 = (data) => {
+  dialogTableVisible2.value=false
+};
+
+
 
 
 </script>
 
 <template>
-  <div class="main-div">
-    <div class="order-primary" style="background-color: white">
+  <div style="width: 100%;height: 100%">
+    <div class="head" style="background-color: white">
       <el-row>
         <el-col  :span="2"><el-text>{{$t('customer.customerNumber')}}:</el-text></el-col>
         <el-col  :span="3"><el-input style="font-size: large;color: #181818" v-model="titleUploadData.customerId" :readonly="true" ></el-input></el-col>
         <el-col  :span="2"><el-text>{{$t('customer.customerName')}}:</el-text></el-col>
         <el-col  :span="5"><el-input  v-model="titleUploadData.customerName" :readonly="true"></el-input></el-col>
-        <el-col  :span="2"><el-text>{{$t('customer.customerNumber')}}:</el-text></el-col>
+        <el-col  :span="2"><el-text>{{$t('order.project')}}:</el-text></el-col>
         <el-col  :span="5"><el-input v-model="titleUploadData.project" :readonly="true"></el-input></el-col>
       </el-row>
       <el-row>
@@ -685,9 +868,9 @@
         <el-col  :span="2"><el-input v-model="titleUploadData.freight" :readonly="true"/></el-col>
       </el-row>
     </div>
-    <div class="order-detail">
+    <div class="main-table">
       <vxe-grid
-          max-height="97%"
+          height="100%"
           class="mytable-scrollbar"
           ref="xGrid"
           v-bind="gridOptions"
@@ -699,7 +882,11 @@
         <template #num1_filter="{ column, $panel }">
           <div>
             <div v-for="(option, index) in column.filters" :key="index">
-              <input type="type" v-model="option.data" @input="changeFilterEvent($event, option, $panel)"/>
+              <input
+                  type="type"
+                  v-model="option.data"
+                  @keyup.enter.native="$panel.confirmFilter()"
+                  @input="changeFilterEvent($event, option, $panel)"/>
             </div>
           </div>
         </template>
@@ -733,6 +920,37 @@
           ref="refOtherMoney"
           :otherMoney="otherMoney"
           style="width: 100%;height: 100%" />
+    </el-dialog>
+
+    <!--    鏂欐灦搴撳瓨寮圭獥-->
+    <el-dialog v-model="dialogTableVisible"
+               :title="$t('finishedGlassShelf.finishedGlassShelfInformation')"
+                style="width: 70%;height:75%"
+                destroy-on-close
+                :close-on-click-modal="false"
+                :close-on-press-escape="false">
+      <Finished-glass-shelf-information
+          style="width: 100%;height: 600px"
+          type=1
+          @handle-result="handleChildResult"
+      />
+    </el-dialog>
+
+    <!--    鏂欐灦鍑哄簱寮圭獥-->
+    <el-dialog v-model="dialogTableVisible2"
+               :title="$t('finishedGlassShelf.finishedGlassShelfEmit')"
+               style="width: 70%;height:75% "
+               destroy-on-close
+               :close-on-click-modal="false"
+               :close-on-press-escape="false">
+      <Create-finished-glass-shelf-emit
+          style="width: 100%;height: 600px"
+          type=1
+          :customerName="titleUploadData.customerName"
+          :project="titleUploadData.project"
+          :data="datas"
+          @handle-result="handleChildResult2"
+      />
     </el-dialog>
   </div>
 
@@ -771,4 +989,14 @@
   height: 90%;
   width: 100%;
 }
+
+.head{
+  width: 100%;
+  height: 170px;
+}
+
+.main-table{
+  width: 100%;
+  height: calc(100% - 170px);
+}
 </style>
\ No newline at end of file

--
Gitblit v1.8.0