From ed6f35069824d71ee6da599a328d865eb0c58550 Mon Sep 17 00:00:00 2001
From: 廖井涛 <2265517004@qq.com>
Date: 星期四, 25 四月 2024 09:16:26 +0800
Subject: [PATCH] Merge branch 'master' of https://gitee.com/a1536384743/erp_-override

---
 north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue |  190 +++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 174 insertions(+), 16 deletions(-)

diff --git a/north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue b/north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue
index 66dbf68..2a5597d 100644
--- a/north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue
+++ b/north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue
@@ -7,6 +7,7 @@
 import deepClone from "@/utils/deepClone"
 import  useUserInfoStore from '@/stores/userInfo'
 import SelectProduct from "@/views/sd/product/SelectProduct.vue"
+import OrderOtherMoney from "@/components/sd/order/OrderOtherMoney.vue"
 import {changeFilterEvent,filterChanged} from "@/hook"
 import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove"
 import downLoadFile from "@/hook/downLoadFile"
@@ -15,11 +16,17 @@
 
 let dialogTableVisible = ref(false)
 let productVisible = ref(false)
+let errorAreaVisible = ref(false)
+let otherMoneyVisible = ref(false)
+let errorArea = ref(null)
 const userStore = useUserInfoStore()
 const router = useRouter()
 const route = useRoute()
 const xGrid = ref()
 let cellArea = ref()
+const shapeList = ref([
+    {name:'鏅舰',value:1}, {name:'寮傚舰',value: 2}
+])
 
 // 瀹氫箟琛ㄥご涓婁紶鏁版嵁
 const titleUploadData = ref({
@@ -52,6 +59,7 @@
 })
 //瀹氫箟鎺ユ敹鍔犺浇琛ㄥご涓嬫媺鏁版嵁
 const titleSelectJson = ref({
+  orderOtherMoney:[],
   orderType:[],
   alType:[],
   icon:[],
@@ -63,19 +71,25 @@
 let filterData = ref({})
 let rowIndex = ref(null)
 let rowClickIndex = ref(null)
+let otherMoney = ref(null)
 
 const gridOptions = reactive({
+  loading:false,
+  showHeaderOverflow: false,
+  showFooterOverflow: false,
   border:  "full",//琛ㄦ牸鍔犺竟妗�
   keepSource: true,//淇濇寔婧愭暟鎹�
   align: 'center',//鏂囧瓧灞呬腑
   stripe:true,//鏂戦┈绾�
   rowConfig: {isCurrent: true, isHover: true,height: 30},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
+  //virtualScroll: true, // 寮�鍚櫄鎷熸粴鍔ㄥ姛鑳�
   id: 'OrderList',
   showFooter: true,//鏄剧ず鑴�
   printConfig: {},
   importConfig: {},
   exportConfig: {},
-  scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔�
+  scrollY:{ enabled: true,gt:13 },//寮�鍚櫄鎷熸粴鍔�
+  //scrollX:{ enabled: true,gt:15 },//寮�鍚櫄鎷熸粴鍔�
   showOverflow:true,
   menuConfig: {
     body: {
@@ -87,6 +101,8 @@
           { code: 'copyAll', name: t('basicData.sameAfterwards'), prefixIcon: 'vxe-icon-feedback', visible: true, disabled: false },
           { code: 'clearChecked', name: t('basicData.clearSelection'), prefixIcon: 'vxe-icon-indicator', visible: true, disabled: false },
           { code: 'computedMoney', name: t('basicData.calculateAmount'), prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: true },
+          { code: 'errorArea', name: '璇樊缁撶畻闈㈢Н', prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false },
+          { code: 'otherMoney', name: '鍏朵粬閲戦', prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: false }
         ]
       ]
     }
@@ -104,7 +120,8 @@
   editConfig: {
     trigger: 'click',
     mode: 'cell',
-    showStatus: true
+    showStatus: true,
+    showIcon:false
   },//琛ㄥご鍙傛暟
   columns:[
     {type: 'seq',fixed:"left", title: t('basicData.Number'), width: 80 },
@@ -120,11 +137,16 @@
     {field: 'grossArea',width:160,  title: t('order.trueGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged},
     {field: 'computeArea',width:180,  title: t('order.computeArea'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'computeGrossArea',width:200,  title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
-    {field: 'shape',width:120,  title: t('order.shape'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {field: 'shape',width:120,
+      title: t('order.shape'),
+      editRender: { name: 'input'},
+      filters:[{ data: '' }],
+      slots: { filter: 'num1_filter',edit:'shape_edit' }, sortable: true,filterMethod:filterChanged},
     {field: 'bendRadius',width:160,  title: t('order.bendRadius'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'edgingType',width:160,  title: t('order.edgingType'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'processingNote',width:200,  title: t('order.processingNote'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
-    {field: 'remarks',width:140,  title: t('basicData.remarks'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}
+    {field: 'remarks',width:140,  title: t('basicData.remarks'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+
 
   ],
   //琛ㄥ崟楠岃瘉
@@ -188,7 +210,7 @@
           }
         }
       }
-    ]
+    ],
   },
   toolbarConfig: {
     buttons: [
@@ -292,7 +314,8 @@
             }
             let order ={
               title:titleUploadData.value,
-              detail:$grid.getTableData().tableData
+              detail:$grid.getTableData().tableData,
+              otherMoney:otherMoney.value
             }
             saveOrder(order)
           }
@@ -300,7 +323,8 @@
         }
       }
     }
-  },//鍙抽敭鎸夐挳浜嬩欢
+  },
+  //鍙抽敭鎸夐挳浜嬩欢
   menuClick ({ menu, row, column }) {
     const $grid = xGrid.value
     if ($grid) {
@@ -380,6 +404,14 @@
           gridOptions.menuConfig.body.options[0][5].disabled=true
           break
         }
+        case 'errorArea' :{
+          errorAreaVisible.value=true
+          break
+        }
+        case 'otherMoney' :{
+          otherMoneyVisible.value=true
+          break
+        }
       }
     }
   },
@@ -410,6 +442,7 @@
 
 //鍒濆鍖栧垽鏂槸鍚︽湁id浼犲叆
 onMounted(()=>{
+
   //鍚敤琛ㄦ牸鎷栧姩閫変腑
   addListener(xGrid.value,gridOptions)
   const str = route.query.orderId || history.state.orderId
@@ -465,17 +498,21 @@
       }
       if(res.data.order.productionOrder !==0 ){
         gridOptions.toolbarConfig.buttons[2].disabled = true
-
       }
-
-      //鍔犺浇鍓〃鏁版嵁
-      xGrid.value.reloadData(res.data.orderDetails)
+      const orderDetails = res.data.orderDetails
+      orderDetails.forEach(item => {
+        item.otherColumns = JSON.parse(item.otherColumns)
+      })
+      otherMoney.value =res.data.orderOtherMoneyList
+          //鍔犺浇鍓〃鏁版嵁
+      xGrid.value.reloadData(orderDetails)
     }else{
       ElMessage.error(res.msg)
     }
   })
 })
 
+//浣滃簾璁㈠崟
 const cancelOrder = () => {
   request.post(`/order/cancelOrder/${titleUploadData.value.orderId}`).then((res) =>{
     if (res.code== 200){
@@ -490,9 +527,35 @@
 
 //椤甸潰绗竴娆″姞杞芥墽琛�
 request.get(`/basicData/orderBasicData`).then((res) => {
-
   if(res.code==200){
     titleSelectJson.value=deepClone(res.data)
+    //鍏朵粬閲戦
+    otherMoney.value = titleSelectJson.value.orderOtherMoney[0]
+    //let columns = []
+    otherMoney.value.forEach(item => {
+      let column = {
+        field: `otherColumns.${item.column}`,
+        width:50,  title: item.alias,
+        editRender: {
+          name: 'input',
+        }
+      }
+      gridOptions.editRules[`otherColumns.${item.column}`] = [
+        {
+          validator ({ cellValue }) {
+            const regex = /^(0|[1-9][0-9]{0,4}([.][0-9]{1,2})?)$/
+            if (cellValue && !regex.test(cellValue)) {
+              return new Error(t('basicData.msg.range99999Dec2'))
+            }
+          }
+        }
+      ]
+
+      //columns.push(column)
+      gridOptions.columns.push(column)
+
+    })
+
     //杩涘叆椤甸潰涓嬫媺妗嗚缃粯璁ゅ��
     titleUploadData.value.orderType = titleSelectJson.value.orderType[0].basicName
     titleUploadData.value.orderClassify = titleSelectJson.value.orderClassify[0].basicName
@@ -590,6 +653,9 @@
   list.forEach((item)=>{
     countMoney += parseFloat(item.grossAmount)
   })
+  // otherMoney.value.forEach(item => {
+  //   countMoney+=item.quantity*item.price
+  // })
   return parseFloat((countMoney).toFixed(2))
 }
 //瀵煎叆鍔熻兘
@@ -631,6 +697,16 @@
   downLoadFile('/importTemplate.xlsx','importTemplate.xlsx')
 }
 
+//瀛楃涓茶浆object
+
+function getNestedProperty(obj, path) {
+  return path.split('.').reduce(function(o, p) {
+    if(o && o.hasOwnProperty(p)) {
+      return o[p];
+    }
+  }, obj);
+}
+
 //琛屽崟鍏冩牸淇敼淇敼瑙﹀彂姝や簨浠�
 const editClosedEvent = ({ row, column }) => {
   //鍒ゆ柇淇敼鐩稿簲鐨勬暟鍊间慨鏀归潰绉笌閲戦
@@ -644,10 +720,59 @@
      row.computeGrossArea=parseFloat((row.computeArea*row.quantity).toFixed(2))
      row.grossAmount=parseFloat((row.price * row.computeGrossArea).toFixed(2))
    }
+   // else if(column.property.indexOf('otherColumns.M')>-1){
+   //   let quantity = 0
+   //   xGrid.value.getTableData().fullData.forEach(item => {
+   //     let orderQuantity = isNaN(item.quantity) ? 0 : item.quantity
+   //     let value = isNaN((getNestedProperty(item,column.property)*1)) ? 0 : (getNestedProperty(item,column.property)*1)
+   //     quantity += orderQuantity*value
+   //   })
+   //   if(!isNaN(quantity)){
+   //     otherMoney.value.forEach(item => {
+   //       if(item.column===column.property.split('.')[1]){
+   //         item.quantity = quantity
+   //       }
+   //     })
+   //   }
+   // }
+  titleUploadData.value.money=countMoney(xGrid.value.getTableData().fullData).toString()
 
-    titleUploadData.value.money=countMoney(xGrid.value.getTableData().fullData).toString()
+
 }
 
+//璇樊闈㈢Н璁$畻鏂规硶
+const errorAreaComputed = () => {
+  const regex = /^(0(\.\d{1,2})?|([1-9]\d{0,4})(\.\d{1,2})?|99999(\.9{1,2})?)$/
+  if (!regex.test(errorArea.value)) {
+    ElMessage.warning(t('basicData.msg.range99999Dec2'))
+    return
+  }
+  const fullData = xGrid.value.getTableData().fullData
+  if (!fullData.length){
+    ElMessage.warning("琛ㄦ牸涓棤浜у搧鏁版嵁")
+  }
+  fullData.forEach((item,index) => {
+    if( !isNaN(item.computeArea*1) && item.computeArea != null && item.computeArea*1 < errorArea.value){
+      item.computeArea = errorArea.value
+      item.computeGrossArea = parseFloat((item.computeArea*item.quantity).toFixed(2))
+      item.grossAmount=parseFloat((item.price * item.computeGrossArea).toFixed(2))
+    }
+  })
+  titleUploadData.value.money=countMoney(xGrid.value.getTableData().fullData).toString()
+  errorAreaVisible.value= false
+}
+
+
+
+//鍏抽棴鍏朵粬閲戦鐣岄潰
+const refOtherMoney = ref()
+const closeOtherMoneyDialog = async (done) => {
+  const flag = await refOtherMoney.value.validate()
+  if(flag){
+    done()
+    titleUploadData.value.money=countMoney(xGrid.value.getTableData().fullData).toString()
+  }
+}
 
 
 </script>
@@ -760,7 +885,7 @@
       <el-row>
         <el-col  :span="2"><el-text>{{$t('order.money')}}锛�</el-text></el-col>
         <el-col  :span="2"><el-text >{{titleUploadData.money}}</el-text></el-col>
-        <el-col  :span="2"><el-text>{{$t('order.customers')}}锛�</el-text></el-col>
+        <el-col  :span="2"><el-text>{{$t('order.contractId')}}锛�</el-text></el-col>
         <el-col  :span="2"><el-input v-model="titleUploadData.contractId"/></el-col>
         <el-col  :span="2"><el-text>{{$t('order.customerBatch')}}:</el-text></el-col>
         <el-col  :span="2"><el-input v-model="titleUploadData.customerBatch"/></el-col>
@@ -801,6 +926,11 @@
           <vxe-button  @click="importTemplate">{{$t('order.template')}}</vxe-button>
           <vxe-button  @click="importEvent">{{$t('order.import')}}</vxe-button>
         </template>
+        <template #shape_edit="{ row }">
+          <vxe-select v-model="row.shape" transfer>
+            <vxe-option v-for="item in shapeList" :key="item" :value="item.value" :label="item.name" />
+          </vxe-select>
+        </template>
 
 
       </vxe-grid>
@@ -812,10 +942,34 @@
           :autosize="{ minRows: 2, maxRows: 20 }"
       />
     </el-dialog>
-    <el-dialog v-model="productVisible"  style="width: 80%;height:75% ">
+    <el-dialog id="product" v-model="productVisible"  style="width: 80%;height:75% ">
       <select-product :rowIndex="rowIndex" @getProductRow="getProductRow" style="width: 100%;height: 100%" />
     </el-dialog>
-
+<!--璇樊缁撶畻-->
+    <el-dialog v-model="errorAreaVisible"  style="width: 300px;height:150px ">
+      <el-row>
+        <el-col :span="10">
+          <el-input
+              v-model="errorArea"
+              :placeholder="'璇樊鍊�'"
+          />
+        </el-col>
+        <el-col :span="6">
+          <el-button @click="errorAreaComputed">纭</el-button>
+        </el-col>
+      </el-row>
+    </el-dialog>
+    <el-dialog v-model="otherMoneyVisible"
+               :title="'鍏朵粬閲戦'"
+               :close-on-click-modal="false"
+               :close-on-press-escape="false"
+               :before-close="closeOtherMoneyDialog"
+               style="width: 614px;height:445px ">
+      <order-other-money
+          ref="refOtherMoney"
+          :otherMoney="otherMoney"
+          style="width: 100%;height: 100%" />
+    </el-dialog>
 
   </div>
 </template>
@@ -849,5 +1003,9 @@
     -ms-user-select: none;
     user-select: none;
   }
+  :deep(#product .el-dialog__body){
+    height: 90%;
+    width: 100%;
+  }
 
 </style>
\ No newline at end of file

--
Gitblit v1.8.0