From 9a0cf79fa57427d7a38d55ad8b33622c1dcc18aa Mon Sep 17 00:00:00 2001
From: chenlu <1320612696@qq.com>
Date: 星期五, 26 一月 2024 16:06:31 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override

---
 north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue |  332 +++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 287 insertions(+), 45 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 545b2f5..cb2a9b7 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
@@ -1,9 +1,12 @@
-<script setup>
+<script lang="ts"  setup>
 import {reactive, ref} from "vue"
-import {VXETable} from "vxe-table"
 import {useRouter} from "vue-router"
-const router = useRouter()
+import * as XLXS from "xlsx"
+import {ElMessage} from "element-plus"
+import request from "@/utils/request"
+import deepClone from "@/utils/deepClone"
 
+const router = useRouter()
 const xGrid = ref()
 const gridOptions = reactive({
   border:  "full",//琛ㄦ牸鍔犺竟妗�
@@ -18,6 +21,15 @@
   exportConfig: {},
   scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔�
   showOverflow:true,
+  menuConfig: {
+    body: {
+      options: [
+        [
+          { code: 'addRow', name: '娣诲姞', prefixIcon: 'vxe-icon-square-plus', visible: true, disabled: false }
+        ]
+      ]
+    }
+  },
   columnConfig: {
     resizable: true,
     useKey: true
@@ -30,45 +42,103 @@
   },
   editConfig: {
     trigger: 'click',
-    mode: 'row',
+    mode: 'cell',
     showStatus: true
   },//琛ㄥご鍙傛暟
   columns:[
+    // {title: '鎿嶄綔', width: 110,fixed:"left",slots: { default: 'openProductList' }},
     {type: 'seq',fixed:"left", title: '鑷簭', width: 80 },
-    {field: 'orderID',width:120,  title: '妤煎彿',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderID',width:120,  title: '浜у搧',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderID',width:120,  title: '瀹�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderID',width:120,  title: '楂�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderID',width:120,  title: '鏁伴噺',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderID',width:120,  title: '鍗曚环',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderID',width:120,  title: '褰㈢姸',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderID',width:120,  title: '鎬婚潰绉�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderID',width:120,  title: '鍗曠墖闈㈢Н',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderID',width:120,  title: '缁撶畻鍗曠墖闈㈢Н',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderID',width:120,  title: '缁撶畻鎬婚潰绉�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderID',width:120,  title: '纾ㄨ竟绫诲瀷',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderID',width:120,  title: '鍔犲伐瑕佹眰',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderID',width:120,  title: '澶囨敞',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
-    {field: 'orderID',width:120,  title: '澶栬喘',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}
+    {field: 'buildingNumber',width:120,  title: '妤煎彿',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'productId',width:140,  title: '浜у搧ID',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'productName',width:120,  title: '浜у搧',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'price',width:140,  title: '鍗曚环',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'quantity',width:120,  title: '鏁伴噺',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'grossAmount',width:120,  title: '鎬婚噾棰�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'width',width:120,  title: '瀹�',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'height',width:120,  title: '楂�',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'area',width:150,  title: '瀹為檯鍗曠墖闈㈢Н',filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true},
+    {field: 'grossArea',width:140,  title: '瀹為檯鎬婚潰绉�',filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true},
+    {field: 'computeArea',width:180,  title: '缁撶畻鍗曠墖闈㈢Н',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'computeGrossArea',width:140,  title: '缁撶畻鎬婚潰绉�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'shape',width:120,  title: '褰㈢姸',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'bendRadius',width:140,  title: '寮挗寮у害',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'edgingType',width:140,  title: '纾ㄨ竟绫诲瀷',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'processingNote',width:140,  title: '鍔犲伐瑕佹眰',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+    {field: 'remarks',width:120,  title: '澶囨敞',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}
 
 
-
-  ],//琛ㄥご鎸夐挳
+  ],
+  //琛ㄥ崟楠岃瘉
+  editRules: {
+    buildingNumber: [
+      { required: false},
+      { min: 0, max: 255, message: '鍚嶇О闀垮害鍦� 0 鍒� 255 涓瓧绗�' }
+    ],
+    productId: [
+      { required: true, message: '璇烽�夋嫨浜у搧' }
+    ],
+    price: [
+      {
+        validator ({ cellValue }) {
+          const regex = /^(0|[1-9][0-9]{0,4}([.][0-9]{1,2})?)$/
+          if (cellValue && !regex.test(cellValue)) {
+            return new Error('杈撳叆0.00~99999.99鐨勬暟瀛�')
+          }
+        }
+      }
+    ],
+    computeArea: [
+      {
+        validator ({ cellValue }) {
+          const regex = /^(0|[1-9][0-9]{0,4}([.][0-9]{1,2})?)$/
+          if (cellValue && !regex.test(cellValue)) {
+            return new Error('杈撳叆0.00~99999.99鐨勬暟瀛�')
+          }
+        }
+      }
+    ],
+    quantity: [
+      { type: 'number', min: 0, message: '璇疯緭鍏ュぇ浜庣瓑浜�0鐨勬暟鍊�' }
+    ],
+    width:[
+      {
+        validator ({ cellValue }) {
+          const regex = /^(0|[1-9][0-9]{0,4}([.][0-9]{1,2})?)$/
+          if (cellValue && !regex.test(cellValue)) {
+            return new Error('杈撳叆0.00~99999.99鐨勬暟瀛�')
+          }
+        }
+      }
+    ],
+    height:[
+      {
+        validator ({ cellValue }) {
+          const regex = /^(0|[1-9][0-9]{0,4}([.][0-9]{1,2})?)$/
+          if (cellValue && !regex.test(cellValue)) {
+            return new Error('杈撳叆0.00~99999.99鐨勬暟瀛�')
+          }
+        }
+      }
+    ]
+  },
   toolbarConfig: {
     buttons: [
       {'code': 'remarks', 'name': '鍔犲伐瑕佹眰'},
       {'code': 'Craft', 'name': '宸ヨ壓',status: 'primary'},
       {'code': 'add', 'name': '瀹℃牳',status: 'primary',disabled: true},
-      {'code': 'add', 'name': '淇濆瓨',status: 'primary',icon: 'vxe-icon-save'}
+      {'code': 'saveOrder', 'name': '淇濆瓨',status: 'primary',icon: 'vxe-icon-save'}
     ],
-    import: false,
-    export: true,
-    print: true,
+    slots: {
+      tools: 'toolbar_buttons'
+    },
+    // import: false,
+    // export: true,
+    // print: true,
     zoom: true,
     custom: true
-  },
-  data:  [
-  ],//table body瀹為檯鏁版嵁
+  }
+  ,
+  //table body瀹為檯鏁版嵁
   footerMethod ({ columns, data }) {//椤佃剼鍑芥暟
     return[
       columns.map((column, columnIndex) => {
@@ -84,26 +154,172 @@
   }
 
 })
-
 const gridEvents = {
-  toolbarButtonClick ({ code }) {
+  async toolbarButtonClick({code}) {
     const $grid = xGrid.value
     if ($grid) {
       switch (code) {
         case 'Craft': {
-          router.push({path: '/main/order/updateOrderCraft', query: { orderID: 12123 }})
+          await router.push({path: '/main/order/updateOrderCraft', query: {orderID: 12123}})
+          break
+        }
+        case 'saveOrder': {
+          if ($grid.getTableData().tableData.length === 0){
+            ElMessage.error('娌℃湁琛ㄦ牸鏁版嵁锛�')
+            return
+          }
+          console.log($grid.getTableData().tableData)
+          if ($grid) {
+            const errMap = await $grid.validate(true)
+            if (errMap) {
+              ElMessage.error(`鏍¢獙涓嶉�氳繃锛乣)
+              return
+            }
+            let order ={
+              title:titleUploadData.value,
+              detail:$grid.getTableData().tableData
+            }
+            saveOrder(order)
+          }
           break
         }
       }
     }
+  },//澶撮儴鎸夐挳浜嬩欢
+  menuClick ({ menu, row, column }) {
+    const $grid = xGrid.value
+    if ($grid) {
+      switch (menu.code) {
+        case 'deleteList': {
+          $grid.removeCheckboxRow()
+          break
+        }
+        case 'addRow': {
+          if ($grid.getTableData().tableData.length >=240){
+            ElMessage.error('琛ㄦ牸鏁版嵁宸茶揪鍒版渶澶у�硷紒')
+            return
+          }
+          $grid.insert({})
+          //console.log($grid.getRecordset().insertRecords)
+          break
+        }
+      }
+    }
+  },
+  cellDblclick (params) {//琛ㄦ牸鍐呭鍙屽嚮鎵撳紑浜у搧鐣岄潰
+    const { row } = params
+    //alert("鎴戞墦寮�浜嗕骇鍝佺晫闈�")
   }
 }
 
+// 瀹氫箟琛ㄥご涓婁紶鏁版嵁
+const titleUploadData = ref({
+  orderType:'',
+  alType:'',
+  icon:'',
+  orderClassify:'',
+  packType:'',
+  deliveryDate:''
+})
+
+//瀹氫箟鎺ユ敹鍔犺浇琛ㄥご涓嬫媺鏁版嵁
+const titleSelectJson = ref({
+  orderType:[],
+  alType:[],
+  icon:[],
+  orderClassify:[],
+  packType:[],
+})
+//椤甸潰绗竴娆″姞杞芥墽琛�
+request.get(`/basicData/orderBasicData`).then((res) => {
+  if(res.code==200){
+    titleSelectJson.value=deepClone(res.data)
+    titleUploadData.value.orderType = titleSelectJson.value.orderType[0].id
+    titleUploadData.value.orderClassify = titleSelectJson.value.orderClassify[0].id
+    titleUploadData.value.icon = titleSelectJson.value.icon[0].id
+    titleUploadData.value.packType = titleSelectJson.value.packType[0].id
+    titleUploadData.value.alType = titleSelectJson.value.alType[0].id
+    const today = new Date
+    today.setTime(today.getTime() + (15 * 24 * 60 * 60 * 1000))
+    titleUploadData.value.deliveryDate = today.getFullYear() +
+        '-' + ("0" + (today.getMonth() + 1)).slice(-2)
+        + '-' + ("0" + today.getDate()).slice(-2)
+  }else{
+    ElMessage.warning(res.msg)
+  }
+})
+
+const saveOrder = (order) => {
+  request.post(`/order/saveOrder`,order).then((res) => {
+    if(res.code==200){
+      ElMessage.success('淇濆瓨鎴愬姛')
+    }else {
+      ElMessage.warning(res.msg)
+    }
+  })
+}
+
+
+
+
+const countAmount = (row) => {
+  return
+}
+const area = (row) => {
+  return parseFloat((row.width * row.height/1000000).toFixed(2))
+}
+const countArea = (row) => {
+  return parseFloat((row.width * row.height/1000000).toFixed(2))*row.quantity
+}
+
+
+//瀵煎叆鍔熻兘
+const impotEvent = async () => {
+  const $grid = xGrid.value
+  const { files } = await $grid.readFile({
+    types: ['xls', 'xlsx']
+  })
+  const fileReader = new FileReader()
+  fileReader.onload = (event) => {
+    const data = event.target ? event.target.result : ''
+    const workbook = XLXS.read(data, { type: 'binary' })
+    let jsonData = XLXS.utils.sheet_to_json(workbook.Sheets.Sheet1).slice(1)
+    if(jsonData.length>240){
+      ElMessage.error('瀵煎叆鏁版嵁涓嶈兘瓒呰繃240鏉�,璇峰垎璁㈠崟瀵煎叆')
+      return
+    }
+    jsonData.forEach((item,index) => {
+      //item.computeArea
+      //console.log()
+      if(item.computeArea === undefined){
+        item.computeArea = area(item)
+      }
+      item.computeGrossArea = parseFloat((item.computeArea*item.quantity).toString())
+    })
+
+    xGrid.value.loadData(jsonData)
+  }
+  fileReader.readAsBinaryString(files[0])
+}
+
+//琛屽崟鍏冩牸淇敼淇敼瑙﹀彂姝や簨浠�
+const editClosedEvent = ({ row, column }) => {
+  //鍒ゆ柇淇敼鐩稿簲鐨勬暟鍊间慨鏀归潰绉笌閲戦
+   if (['width', 'height', 'quantity', 'price'].includes(column.property)) {
+      row.area = area(row)
+      row.grossArea = countArea(row)
+      row.computeArea = row.area
+      row.computeGrossArea = row.grossArea
+      row.grossAmount=row.price * row.computeGrossArea
+   }else if(column.property === 'computeArea'){
+     row.computeGrossArea=parseFloat((row.computeArea*row.quantity).toString())
+     row.grossAmount=row.price * row.computeGrossArea
+   }
+}
 </script>
 
 <template>
   <div class="main-div">
-
     <div class="order-primary" style="background-color: white">
       <el-row>
         <el-col  :span="2"><el-text>*椤圭洰鍚嶇О锛�</el-text></el-col>
@@ -116,26 +332,42 @@
         </el-col>
         <el-col  :span="2"><el-text>*璁㈠崟绫诲瀷锛�</el-text></el-col>
         <el-col  :span="2">
-          <el-select  clearable placeholder=" " >
-            <el-option />
+          <el-select v-model="titleUploadData.orderType"  clearable placeholder=""  >
+            <el-option
+                v-for="item in titleSelectJson['orderType']"
+                :key="item.id"
+                :label="item.basicName"
+                :value="item.id"
+            />
           </el-select>
         </el-col>
         <el-col  :span="2"><el-text>璁㈠崟鍒嗙被锛�</el-text></el-col>
         <el-col  :span="2">
-          <el-select  clearable placeholder=" " >
-            <el-option/>
+          <el-select v-model="titleUploadData.orderClassify" clearable placeholder=" " >
+            <el-option
+                v-for="item in titleSelectJson['orderClassify']"
+                :key="item.id"
+                :label="item.basicName"
+                :value="item.id"
+            />
           </el-select>
         </el-col>
         <el-col  :span="2"><el-text>鍟嗘爣閫夐」锛�</el-text></el-col>
         <el-col  :span="2">
-          <el-select  clearable placeholder=" " >
-            <el-option/>
+          <el-select v-model="titleUploadData.icon" clearable placeholder=" " >
+            <el-option  v-for="item in titleSelectJson['icon']"
+                       :key="item.id"
+                       :label="item.basicName"
+                       :value="item.id"/>
           </el-select>
         </el-col>
         <el-col  :span="2"><el-text>鍖呰鏂瑰紡锛�</el-text></el-col>
         <el-col  :span="2">
-          <el-select  clearable placeholder=" " >
-            <el-option/>
+          <el-select v-model="titleUploadData.packType" clearable placeholder=" " >
+            <el-option v-for="item in titleSelectJson['packType']"
+                       :key="item.id"
+                       :label="item.basicName"
+                       :value="item.id"/>
           </el-select>
         </el-col>
         <!--      <el-col :span="2"><el-text  /></el-col>-->
@@ -146,9 +378,10 @@
         <el-col  :span="2"><el-text>浜よ揣鏃ユ湡锛�</el-text></el-col>
         <el-col  :span="2">
           <el-date-picker
-              type="week"
-              format="[Week] ww"
-              placeholder="閫夋嫨鏃ユ湡"/>
+              v-model="titleUploadData.deliveryDate"
+              type="date"
+              placeholder="Pick a day"
+              />
         </el-col>
         <el-col  :span="2"><el-text>鎵规锛�</el-text></el-col>
         <el-col  :span="2"><el-input/></el-col>
@@ -166,8 +399,11 @@
         </el-col>
         <el-col  :span="2"><el-text>閾濇潯鏂瑰紡锛�</el-text></el-col>
         <el-col  :span="2">
-          <el-select  clearable placeholder=" " >
-            <el-option/>
+          <el-select v-model="titleUploadData.alType" clearable placeholder=" " >
+            <el-option v-for="item in titleSelectJson['alType']"
+                       :key="item.id"
+                       :label="item.basicName"
+                       :value="item.id"/>
           </el-select>
         </el-col>
       </el-row>
@@ -201,6 +437,7 @@
           ref="xGrid"
           v-bind="gridOptions"
           v-on="gridEvents"
+          @edit-closed="editClosedEvent"
       >
         <template #num1_filter="{ column, $panel }">
           <div>
@@ -209,6 +446,11 @@
             </div>
           </div>
         </template>
+        <template #toolbar_buttons>
+          <vxe-button  @click="impotEvent">瀵煎叆</vxe-button>
+        </template>
+
+
       </vxe-grid>
     </div>
   </div>

--
Gitblit v1.8.0