From 4553f5498672b2720702658f547868872491bd81 Mon Sep 17 00:00:00 2001
From: 廖井涛 <2265517004@qq.com>
Date: 星期三, 03 九月 2025 10:15:04 +0800
Subject: [PATCH] 语言更改

---
 north-glass-erp/northglass-erp/src/router/index.js                                               |   12 
 north-glass-erp/northglass-erp/src/lang/en.js                                                    |    7 
 north-glass-erp/northglass-erp/src/views/mm/ingredientStock/SelectIngredientsStock.vue           |    6 
 north-glass-erp/northglass-erp/src/lang/zh.js                                                    |    7 
 north-glass-erp/northglass-erp/src/views/mm/productStock/ProductStockList.vue                    |   12 
 north-glass-erp/northglass-erp/src/lang/ar.js                                                    |    7 
 north-glass-erp/northglass-erp/src/lang/ru.js                                                    |    7 
 north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelfEmit.vue        |  516 +++++++++++++++++++++
 north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelfInformation.vue |   62 +-
 north-glass-erp/northglass-erp/src/views/sd/basicData/CreateBasicData.vue                        |   10 
 north-glass-erp/northglass-erp/src/lang/kr.js                                                    |    7 
 north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/CreateFinishedGlassShelfEmit.vue  |  733 ++++++++++++++++++++++++++++++
 north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelf.vue            |    4 
 13 files changed, 1,340 insertions(+), 50 deletions(-)

diff --git a/north-glass-erp/northglass-erp/src/lang/ar.js b/north-glass-erp/northglass-erp/src/lang/ar.js
index 351b860..6387bef 100644
--- a/north-glass-erp/northglass-erp/src/lang/ar.js
+++ b/north-glass-erp/northglass-erp/src/lang/ar.js
@@ -96,6 +96,7 @@
             range9999Dec:'賷乇噩賶 廿丿禺丕賱 毓丿丿 氐丨賷丨 賲賰賵賳 賲賳 兀乇亘毓丞 兀乇賯丕賲',
             quantityError: "鏁伴噺閿欒锛岃鍒锋柊鍐嶄繚瀛�",
             dataDoesNotExist: "鏁版嵁涓嶅瓨鍦�",
+            greater0Sec1:"璇疯緭鍏ュぇ浜�0鐨勬暣鏁版垨鑰呬繚鐣欎竴浣嶅皬鏁�"
         }
     },
     product:{
@@ -771,6 +772,9 @@
         msg2:'鍙戣揣鍗曞簱瀛樻暟涓嶅瓨鍦�',
         msg3:'鍏ュ簱鏁伴噺涓嶈兘瓒呰繃璁㈠崟鎬绘暟',
         boxingPrinting:'瑁呯鎵撳嵃',
+        packing:'瑁呯璋冩灦',
+        msgPacking:'瑁呯璋冩灦鎴愬姛',
+        boxNumberOrRemarks:'绠卞彿鎴栧娉�',
     },
     customer:{
         page:{
@@ -1170,7 +1174,8 @@
         surplusMaterialManagement :'浣欐枡绠$悊',
         additionOfSurplusMaterials :'浣欐枡鏂板',
         excessMaterialOutflow :'浣欐枡鍑哄簱',
-        pleaseSelectTheTypeOfReturnToStock:'璇烽�夋嫨杩斿簱绫诲瀷'
+        pleaseSelectTheTypeOfReturnToStock:'璇烽�夋嫨杩斿簱绫诲瀷',
+        pleaseSelectOneData:'璇烽�変腑涓�琛屾暟鎹�'
     },
     warehouseBasicData:{
         page:{
diff --git a/north-glass-erp/northglass-erp/src/lang/en.js b/north-glass-erp/northglass-erp/src/lang/en.js
index b2627b0..25c745e 100644
--- a/north-glass-erp/northglass-erp/src/lang/en.js
+++ b/north-glass-erp/northglass-erp/src/lang/en.js
@@ -96,6 +96,7 @@
             range9999Dec: "Please enter a four digit integer",
             quantityError: "Quantity Error",
             dataDoesNotExist: "Data Does Not Exist",
+            greater0Sec1:"璇疯緭鍏ュぇ浜�0鐨勬暣鏁版垨鑰呬繚鐣欎竴浣嶅皬鏁�"
         }
     },
     product:{
@@ -773,6 +774,9 @@
         msg2:'Invoice inventory number does not exist',
         msg3:'The quantity of incoming orders shall not exceed the total number of orders',
         boxingPrinting:'瑁呯鎵撳嵃',
+        packing:'瑁呯璋冩灦',
+        msgPacking:'瑁呯璋冩灦鎴愬姛',
+        boxNumberOrRemarks:'绠卞彿鎴栧娉�',
     },
     customer:{
         page:{
@@ -1172,7 +1176,8 @@
         surplusMaterialManagement :'Waste material management',
         additionOfSurplusMaterials :'Surplus addition',
         excessMaterialOutflow :'Residual materials out of storage',
-        pleaseSelectTheTypeOfReturnToStock:'Please select a return type'
+        pleaseSelectTheTypeOfReturnToStock:'Please select a return type',
+        pleaseSelectOneData:'璇烽�変腑涓�琛屾暟鎹�'
     },
     warehouseBasicData:{
         page:{
diff --git a/north-glass-erp/northglass-erp/src/lang/kr.js b/north-glass-erp/northglass-erp/src/lang/kr.js
index 65e1a00..4ea4126 100644
--- a/north-glass-erp/northglass-erp/src/lang/kr.js
+++ b/north-glass-erp/northglass-erp/src/lang/kr.js
@@ -96,6 +96,7 @@
             range9999Dec: "4鞛愲Μ 鞝曥垬 鞛呺牓頃橃劯鞖�",
             quantityError: '靾橂焿 鞓る, 靸堧瓿犾龚 頉� 鞝�鞛ロ晿靹胳殧',
             dataDoesNotExist: "雿办澊韯� 鞐嗢潓",
+            greater0Sec1:"璇疯緭鍏ュぇ浜�0鐨勬暣鏁版垨鑰呬繚鐣欎竴浣嶅皬鏁�"
         }
     },
     product:{
@@ -780,6 +781,9 @@
         msg2:'JPG 霕愲姅 PNG 順曥嫕鞚� 鞚措歆� 韺岇澕鞚� 靹犿儩頃挫<靹胳殧',
         msg3:'JPG 霕愲姅 PNG 順曥嫕鞚� 鞚措歆� 韺岇澕鞚� 靹犿儩頃挫<靹胳殧 . 斓滊寑 5MB',
         boxingPrinting:'瑁呯鎵撳嵃',
+        packing:'瑁呯璋冩灦',
+        msgPacking:'瑁呯璋冩灦鎴愬姛',
+        boxNumberOrRemarks:'绠卞彿鎴栧娉�',
     },
     customer:{
         page:{
@@ -1181,7 +1185,8 @@
         surplusMaterialManagement :'浣欐枡绠$悊',
         additionOfSurplusMaterials :'浣欐枡鏂板',
         excessMaterialOutflow :'浣欐枡鍑哄簱',
-        pleaseSelectTheTypeOfReturnToStock:'璇烽�夋嫨杩斿簱绫诲瀷'
+        pleaseSelectTheTypeOfReturnToStock:'璇烽�夋嫨杩斿簱绫诲瀷',
+        pleaseSelectOneData:'璇烽�変腑涓�琛屾暟鎹�'
     },
     warehouseBasicData:{
         page:{
diff --git a/north-glass-erp/northglass-erp/src/lang/ru.js b/north-glass-erp/northglass-erp/src/lang/ru.js
index 1bb87ca..41b2a02 100644
--- a/north-glass-erp/northglass-erp/src/lang/ru.js
+++ b/north-glass-erp/northglass-erp/src/lang/ru.js
@@ -96,6 +96,7 @@
             range9999Dec: "袙胁械写懈褌械 褔械褌褘褉械 褑械谢褘褏 褔懈褋谢邪.",
             quantityError: "鏁伴噺閿欒锛岃鍒锋柊鍐嶄繚瀛�",
             dataDoesNotExist: "鏁版嵁涓嶅瓨鍦�",
+            greater0Sec1:"璇疯緭鍏ュぇ浜�0鐨勬暣鏁版垨鑰呬繚鐣欎竴浣嶅皬鏁�"
         }
     },
     product:{
@@ -768,6 +769,9 @@
         msg2:'鍙戣揣鍗曞簱瀛樻暟涓嶅瓨鍦�',
         msg3:'鍏ュ簱鏁伴噺涓嶈兘瓒呰繃璁㈠崟鎬绘暟',
         boxingPrinting:'瑁呯鎵撳嵃',
+        packing:'瑁呯璋冩灦',
+        msgPacking:'瑁呯璋冩灦鎴愬姛',
+        boxNumberOrRemarks:'绠卞彿鎴栧娉�',
     },
     customer:{
         page:{
@@ -1168,7 +1172,8 @@
         surplusMaterialManagement :'浣欐枡绠$悊',
         additionOfSurplusMaterials :'浣欐枡鏂板',
         excessMaterialOutflow :'浣欐枡鍑哄簱',
-        pleaseSelectTheTypeOfReturnToStock:'璇烽�夋嫨杩斿簱绫诲瀷'
+        pleaseSelectTheTypeOfReturnToStock:'璇烽�夋嫨杩斿簱绫诲瀷',
+        pleaseSelectOneData:'璇烽�変腑涓�琛屾暟鎹�'
     },
     warehouseBasicData:{
         page:{
diff --git a/north-glass-erp/northglass-erp/src/lang/zh.js b/north-glass-erp/northglass-erp/src/lang/zh.js
index f877186..64692b7 100644
--- a/north-glass-erp/northglass-erp/src/lang/zh.js
+++ b/north-glass-erp/northglass-erp/src/lang/zh.js
@@ -96,6 +96,7 @@
             range9999Dec: "璇疯緭鍏ュ洓浣嶆暣鏁�",
             quantityError: "鏁伴噺閿欒锛岃鍒锋柊鍐嶄繚瀛�",
             dataDoesNotExist: "鏁版嵁涓嶅瓨鍦�",
+            greater0Sec1:"璇疯緭鍏ュぇ浜�0鐨勬暣鏁版垨鑰呬繚鐣欎竴浣嶅皬鏁�"
         }
     },
     product:{
@@ -784,6 +785,9 @@
         msg2:'鍙戣揣鍗曞簱瀛樻暟涓嶅瓨鍦�',
         msg3:'鍏ュ簱鏁伴噺涓嶈兘瓒呰繃娴佺▼鍗℃�绘暟',
         boxingPrinting:'瑁呯鎵撳嵃',
+        packing:'瑁呯璋冩灦',
+        msgPacking:'瑁呯璋冩灦鎴愬姛',
+        boxNumberOrRemarks:'绠卞彿鎴栧娉�',
     },
     customer:{
         page:{
@@ -1187,7 +1191,8 @@
         surplusMaterialManagement :'浣欐枡绠$悊',
         additionOfSurplusMaterials :'浣欐枡鏂板',
         excessMaterialOutflow :'浣欐枡鍑哄簱',
-        pleaseSelectTheTypeOfReturnToStock:'璇烽�夋嫨杩斿簱绫诲瀷'
+        pleaseSelectTheTypeOfReturnToStock:'璇烽�夋嫨杩斿簱绫诲瀷',
+        pleaseSelectOneData:'璇烽�変腑涓�琛屾暟鎹�'
     },
     warehouseBasicData:{
         page:{
diff --git a/north-glass-erp/northglass-erp/src/router/index.js b/north-glass-erp/northglass-erp/src/router/index.js
index 25fbd06..f64a43c 100644
--- a/north-glass-erp/northglass-erp/src/router/index.js
+++ b/north-glass-erp/northglass-erp/src/router/index.js
@@ -1303,6 +1303,18 @@
               name: 'createFinishedGlassShelf',
               component: () => import('../views/mm/finishedGlassShelf/CreateFinishedGlassShelf.vue'),
             },
+            {
+              // 鏂欐灦鍑哄簱鏌ヨ
+              path: 'finishedGlassShelfEmit',
+              name: 'finishedGlassShelfEmit',
+              component: () => import('../views/mm/finishedGlassShelf/FinishedGlassShelfEmit.vue'),
+            },
+            {
+              // 鏂欐灦鍑哄簱鏄庣粏鏌ヨ
+              path: 'createFinishedGlassShelfEmit',
+              name: 'createFinishedGlassShelfEmit',
+              component: () => import('../views/mm/finishedGlassShelf/CreateFinishedGlassShelfEmit.vue'),
+            },
 
 
             {
diff --git a/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/CreateFinishedGlassShelfEmit.vue b/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/CreateFinishedGlassShelfEmit.vue
new file mode 100644
index 0000000..12eb316
--- /dev/null
+++ b/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/CreateFinishedGlassShelfEmit.vue
@@ -0,0 +1,733 @@
+<script setup>
+
+import {onMounted, reactive, ref} from "vue";
+import {Search} from "@element-plus/icons-vue";
+import {useRoute, useRouter} from "vue-router"
+import request from "@/utils/request"
+import deepClone from "@/utils/deepClone"
+import VXETable from "vxe-table";
+import useUserInfoStore from "@/stores/userInfo";
+import {ElMessage} from "element-plus";
+import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove";
+import { useI18n } from 'vue-i18n'
+import OrderOtherMoney from "@/components/sd/order/OrderOtherMoney.vue";
+import footSum from "@/hook/footSum";
+import {changeFilterEvent,filterChanged} from "@/hook"
+import companyInfo from "@/stores/sd/companyInfo";
+import {multiply} from "@/utils/decimal";
+
+//璇█鑾峰彇
+const { t } = useI18n()
+const router = useRouter()
+const route = useRoute()
+const userStore = useUserInfoStore()
+const username = userStore.user.userName
+const userid = userStore.user.userId
+const company = companyInfo()
+let produceList = ref([])
+let cellArea = ref()
+let otherMoneyVisible = ref(false)
+let otherMoney = ref(null)
+let projects = ref([])
+
+const hasDecimal=(value)=>{
+  const regex=/\./ // 瀹氫箟姝e垯琛ㄨ揪寮忥紝鏌ユ壘灏忔暟鐐�
+  return regex.test(value) //杩斿洖true/false
+}
+
+const hasDecimalhtml=(item,row)=>{
+  let aa=item.split('.').length
+  if (aa===2){
+
+    return row[item.split('.')[0]][item.split('.')[1]]
+  }else if(aa===3){
+    return row[item.split('.')[0]][item.split('.')[1]][item.split('.')[2]]
+  }
+
+
+}
+
+
+//瀹氫箟鎺ユ敹鍔犺浇琛ㄥご涓嬫媺鏁版嵁
+const titleSelectJson = ref({
+  customerName:[]
+})
+
+// 瀹氫箟琛ㄥご涓婁紶鏁版嵁
+let titleUploadData = ref({
+  emitId:'',
+  withdrawTime:'',
+  customerName:'',
+  project:'',
+  operator:'',
+  state:'',
+  remarks:'',
+  creatorId:userStore.user.userid,
+  creator:userStore.user.userName
+})
+
+
+
+//绛涢�夋潯浠讹紝鏈夊閿渶瑕佸厛瀹氫箟鏄庣粏閲岄潰鐨勬暟鎹�
+let filterData = ref({
+  emitId:'',
+  emitNumber:'',
+  glassShelfNumber:'',
+  glassShelfName:'',
+  quantity:'',
+  unit:'',
+  price:'',
+  money:'',
+  remarks:''
+})
+const initOrder = async ()=> {
+//椤甸潰绗竴娆″姞杞�
+  await request.get(`/basicData/orderBasicData`).then((res) => {
+
+    if (res.code == 200) {
+      titleSelectJson.value = deepClone(res.data)
+      titleUploadData.value.operator=userStore.user.userName
+      const today = new Date
+      today.setTime(today.getTime() + (15 * 24 * 60 * 60 * 1000))
+      titleUploadData.value.withdrawTime = today.getFullYear() +
+          '-' + ("0" + (today.getMonth() + 1)).slice(-2)
+          + '-' + ("0" + today.getDate()).slice(-2)
+    } else {
+      ElMessage.warning(res.msg)
+    }
+  })
+
+}
+
+const  xGrid = ref();
+
+onMounted( async()=>{
+  await initOrder()
+  //鍚敤琛ㄦ牸鎷栧姩閫変腑
+  addListener(xGrid.value,gridOptions,cellArea.value)
+  //鍙戣揣鏂板
+  const informationId = route.query.informationId
+  if (typeof informationId !== 'undefined' && informationId !== null && informationId !== '' && informationId !== '\n' && informationId !== '\r'){
+
+    //绗竴娆¤皟鐢�
+    /*request.post("/delivery/getSelectShippingOrderDetails/1/100",filterData.value).then((res) => {
+
+      if(res.code==200){
+        pageTotal.value=res.data.total
+
+
+        titleUploadData.value=deepClone(res.data.title)
+        titleUploadData.value.paymentTerms = titleSelectJson.value.paymentTerms[0].basicName
+        titleUploadData.value.payMethod = titleSelectJson.value.payMethod[0].basicName
+        titleUploadData.value.deliveryId=""
+        const today = new Date
+        today.setTime(today.getTime() )
+        titleUploadData.value.deliveryDate=today.getFullYear() +
+            '-' + ("0" + (today.getMonth() + 1)).slice(-2)
+            + '-' + ("0" + today.getDate()).slice(-2)
+        titleUploadData.value.createTime=today.getFullYear() +
+            '-' + ("0" + (today.getMonth() + 1)).slice(-2)
+            + '-' + ("0" + today.getDate()).slice(-2)
+        titleUploadData.value.payDate=today.getFullYear() +
+            '-' + ("0" + (today.getMonth() + 1)).slice(-2)
+            + '-' + ("0" + today.getDate()).slice(-2)
+
+        titleUploadData.value.creator=userStore.user.userName
+        titleUploadData.value.creatorId=userStore.user.userId
+
+        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)
+        //绂佺敤鎸夐挳
+        gridOptions.toolbarConfig.buttons[1].disabled  = true
+        gridOptions.toolbarConfig.buttons[2].disabled = true
+        //鏄剧ず澶嶉�夋
+        xGrid.value.showColumn("select")
+        gridOptions.loading=false
+      }else{
+        ElMessage.warning(res.msg)
+      }
+    })*/
+  }
+//鍙戣揣缂栬緫
+  const str = route.query.emitId
+
+  if (typeof str != 'undefined' && str != null && str !== '' && str !== '\n' && str !== '\r'){
+    filterData.value.emitId=str
+    //绗竴娆¤皟鐢�
+    /*request.post("/delivery/getSelectShippingOrderDetail/1/100",filterData.value).then((res) => {
+
+      if(res.code==200){
+        pageTotal.value=res.data.total
+        titleUploadData.value=deepClone(res.data.delivery)
+        titleUploadData.value.deliveryId=str
+
+        //鍒ゆ柇鏄惁鍙戣揣鍑哄簱
+        if(!company.deliveryOutbound){
+          if(titleUploadData.value.stockState!==0){
+            gridOptions.toolbarConfig.buttons[2].disabled = true
+          }
+        }
+        //鏍规嵁瀹℃牳鐘舵�佹樉绀哄鏍告寜閽垨鑰呮槸鍙嶅鎸夐挳
+        if(titleUploadData.value.deliveryState!==0){
+          gridOptions.toolbarConfig.buttons[1].disabled = true
+          gridOptions.toolbarConfig.buttons[0].disabled = true
+        }
+        if(titleUploadData.value.deliveryState===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)
+        })
+        otherMoney.value =res.data.orderOtherMoneyList
+
+        titleUploadData.value.creator=userStore.user.userName
+        titleUploadData.value.creatorId=userStore.user.userId
+
+        xGrid.value.reloadData(orderDetails)
+        xGrid.value.loadData(produceList)
+        //闅愯棌澶嶉�夋
+        /!*xGrid.value.hideColumn("select")
+        gridOptions.loading=false*!/
+        xGrid.value.showColumn("select")
+        gridOptions.loading=false
+
+      }else{
+        ElMessage.warning(res.msg)
+      }
+    })*/
+  }
+
+
+})
+
+//瀹氫箟椤甸潰鎬婚〉鏁�
+let pageTotal=ref('')
+//瀹氫箟褰撳墠椤垫暟
+let pageNum=$ref(1)
+
+const gridOptions = reactive({
+  border:  "full",//琛ㄦ牸鍔犺竟妗�
+  keepSource: true,//淇濇寔婧愭暟鎹�
+  align: 'center',//鏂囧瓧灞呬腑
+  stripe:true,//鏂戦┈绾�
+  rowConfig: {isCurrent: true, isHover: true,height: 30},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
+  id: 'CreateFinishedGlassShelfEmit',
+  showFooter: true,//鏄剧ず鑴�
+  printConfig: {},
+  importConfig: {},
+  exportConfig: {},
+  scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔�
+  showOverflow:true,
+  menuConfig: {
+    body: {
+      options: [
+        [
+          { code: 'copyChecked', name: t('褰掕繕'), prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
+        ]
+      ]
+    }
+  },
+  columnConfig: {
+    resizable: true,
+    useKey: true
+  },
+  filterConfig: {   //绛涢�夐厤缃」
+                    //remote: true
+  },
+  customConfig: {
+    storage: true
+  },
+  checkboxConfig:{checkAll:true},
+  mouseConfig:{selected: true},//榧犳爣閫変腑
+  keyboardConfig:{isArrow: true, isDel: true, isEnter: true, isTab: true, isEdit: true, isChecked: true},
+  editConfig: {
+    trigger: 'dblclick',
+    mode: 'cell',
+    showStatus: true,
+    showIcon:false
+  },//琛ㄥご鍙傛暟
+  columns:[
+
+    {type: 'seq', title: t('basicData.Number'), width: 80 ,fixed:"left"},
+    {field: 'orderId',width:120,  title: t('鏂欐灦缂栧彿'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {field: 'orderNumber',width:120,  title: t('鏂欐灦鍚嶇О'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {field: 'finishedGoodsInventory.boxNo',width:120,  title: t('鐜版湁鏁伴噺'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {field: 'productName',width:120,  title: t('鎬绘暟閲�'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {field: 'width',width:120,  title: t('鍗曚环'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {field: 'height',width:120,  title: t('閲戦'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {field: 'deliveryDetail.quantity',width:120,  title: t('鍗曚綅'),editRender: { name: 'input' },filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
+    {field: 'finishedGoodsInventory.quantityAvailable',width:120,  title: t('澶囨敞'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+
+  ],//琛ㄥご鎸夐挳
+  toolbarConfig: {
+    buttons: [
+      {'code': 'add', 'name': t('basicData.save'),status: 'primary',icon: 'vxe-icon-save'}
+    ],
+    /*import: false,
+   export: true,
+   print: true,*/
+    zoom: true,
+    custom: true
+  },
+  footerMethod ({ columns, data }) {//椤佃剼鍑芥暟
+    let footList=['deliveryDetail.quantity','quantity','deliveryDetail.money']
+    //let footList=[]
+    return[
+      columns.map((column, columnIndex) => {
+        if (columnIndex === 0) {
+          return t('basicData.total')
+        }
+        if (footList.includes(column.field)) {
+          return footSum(data, column.field)
+        }
+        return ''
+      })
+    ]
+  }
+
+})
+
+
+
+const gridEvents = {
+  async toolbarButtonClick({code}) {
+    const $grid = xGrid.value
+    if ($grid) {
+      switch (code) {
+        case 'add': {
+          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
+          }
+
+
+          let flowData = ref({
+            delivery: selectRecords,
+            title: titleUploadData.value,
+            deliveryId: route.query.deliveryID,
+            otherMoney:otherMoney.value,
+            deliveryIdType:company.deliveryIdType
+
+          })
+          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")
+          })
+          break
+        }
+        case 'toExamine': {
+          let flowData = ref({
+            deliveryId: route.query.deliveryID,
+            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") {
+              ElMessage.success(t('basicData.msg.ReviewSuccess'))
+              //router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
+              router.push({path:'/main/delivery/createDelivery',query:{
+                  deliveryID:titleUploadData.value.deliveryId,
+                  random:Math.random()}})
+            } else {
+              ElMessage.warning(t('basicData.msg.reviewFail'))
+            }
+          }).catch((err)=>{
+            ElMessage.error(t('basicData.msg.ServerConnectionError'))
+            router.push("/login")
+          })
+          break
+        }
+        case 'CounterExamination': {
+          let flowData = ref({
+            deliveryId: route.query.deliveryID,
+            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") {
+              ElMessage.success(t('basicData.msg.cancelReviewSuccess'))
+              //router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
+              router.push({path:'/main/delivery/createDelivery',query:{
+                  deliveryID:titleUploadData.value.deliveryId,
+                  random:Math.random()}})
+            } else {
+              ElMessage.warning(t('basicData.msg.reviewFail'))
+            }
+          }).catch((err)=>{
+            ElMessage.error(t('basicData.msg.ServerConnectionError'))
+            router.push("/login")
+          })
+          break
+        }
+
+      }
+    }
+  },
+  menuClick ({ menu, row, column }) {
+    const $grid = xGrid.value
+    if ($grid) {
+      switch (menu.code) {
+
+        case 'copyChecked' :{
+          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 && index<=result.end){
+                //鍙栨秷閫変腑
+                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 '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
+        }
+
+      }
+    }
+  }
+}
+
+//璁$畻閲戦挶
+const countMoney = (list) => {
+  let  countMoney = 0
+  list.forEach((item)=>{
+    countMoney += parseFloat(item.grossAmount)
+  })
+  // otherMoney.value.forEach(item => {
+  //   countMoney+=item.quantity*item.price
+  // })
+  return parseFloat((countMoney).toFixed(2))
+}
+
+//鍏抽棴鍏朵粬閲戦鐣岄潰
+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()
+  }
+}
+
+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({
+  "deliveryDetail.quantity": [{
+    validator (e) {
+      if (e.row.deliveryDetail.quantity > e.row.finishedGoodsInventory.quantityAvailable) {
+        return new Error(t('delivery.theShipmentQuantityCannotBeGreaterThanTheInventoryQuantity'))
+      }else if (e.row.deliveryDetail.quantity ==="") {
+        return new Error(t('delivery.theShipmentQuantityCannotBeEmptyOr0'))
+      }
+      const regex = /^[1-9]\d*$/g
+      if ( !regex.test(e.row.deliveryDetail.quantity) ) {
+        return new Error(t('productStock.pleaseEnterAPositiveInteger'))
+      }
+
+    }
+
+  }],
+  price: [
+    {
+      validator ({ cellValue }) {
+        const regex = /^(0(\.\d{1,2})?|([1-9]\d{0,4})(\.\d{1,2})?|99999(\.9{1,2})?)$/
+        if ( !regex.test(cellValue) ) {
+          return new Error(t('basicData.msg.range99999Dec2') )
+        }
+      }
+    }
+  ],
+
+})
+
+
+
+const changeProject = (item) => {
+  if(typeof item === 'string'){
+    titleUploadData.value.project = item
+    return
+  }
+  titleUploadData.value.project = item.project
+}
+
+const changeCustomer =  () => {
+  const changedCustomerId = titleUploadData.value.customerId
+  const customer = titleSelectJson.value.customer.filter(item => item.id === changedCustomerId)
+  titleUploadData.value.customerName = customer[0].customerName
+  titleUploadData.value.project = customer[0].project
+  projects.value = customer[0].projectList
+}
+
+
+</script>
+
+<template>
+  <div style="width: 100%;height: 100%">
+    <div class="head" style="background-color: white">
+      <el-row>
+        <el-col  :span="2"><el-text>*{{$t('order.customers')}}锛�</el-text></el-col>
+        <el-col  :span="3">
+          <el-select  v-model="titleUploadData.customerId"
+                      @change="changeCustomer"
+                      filterable
+                      clearable
+                      placeholder=" " >
+            <el-option v-for="item in titleSelectJson['customer']"
+                       :key="item.id"
+                       :label="item.id+' '+item.customerName"
+                       :value="item.id"
+            />
+          </el-select>
+        </el-col>
+        <el-col  :span="2"><el-text>*{{$t('order.project')}}锛�</el-text></el-col>
+        <el-col  :span="3">
+          <el-select v-model.trim="titleUploadData.project"
+                     @change="changeProject"
+                     clearable placeholder=" "  filterable >
+            <el-option v-for="item in projects"
+                       :label="item.project"
+                       :value="item"/>
+          </el-select>
+
+
+        </el-col>
+        <el-col  :span="2"><el-text>{{$t('缁忓姙浜�')}}:</el-text></el-col>
+        <el-col  :span="3"><el-input disabled v-model="titleUploadData.operator"/></el-col>
+        <el-col  :span="2"><el-text>{{$t('褰掕繕鏃ユ湡')}}:</el-text></el-col>
+        <el-col  :span="3">
+          <el-date-picker
+              v-model="titleUploadData.withdrawTime"
+              type="date"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              :placeholder="$t('delivery.selectDate')"/>
+        </el-col>
+      </el-row>
+
+    </div>
+    <div class="main-table">
+      <vxe-grid
+          height="100%"
+          class="mytable-scrollbar"
+          ref="xGrid"
+          v-bind="gridOptions"
+          v-on="gridEvents"
+          :edit-rules="validRules"
+
+      >
+        <template #num1_filter="{ column, $panel }">
+          <div>
+            <div v-for="(option, index) in column.filters" :key="index">
+              <input
+                  type="type"
+                  v-model="option.data"
+                  @keyup.enter.native="$panel.confirmFilter()"
+                  @input="changeFilterEvent($event, option, $panel)"/>
+            </div>
+          </div>
+        </template>
+
+
+        <template #content="{ row }">
+          <ul class="expand-wrapper">
+            <li  v-for="(item,index) in gridOptions.columns" v-show="item.field!=undefined ">
+              <span style="font-weight: bold">{{item.title+':  '}}</span>
+              <span v-if="hasDecimal(item.field)">{{ hasDecimalhtml(item.field,row) }}</span>
+              <span v-else>{{ row[item.field] }}</span>
+            </li>
+          </ul>
+        </template>
+
+      </vxe-grid>
+    </div>
+    <div class="vxe-table--cell-area" ref="cellArea" >
+      <span  class="vxe-table--cell-main-area"  ></span>
+
+      <span class="vxe-table--cell-active-area"  ></span>
+    </div>
+
+    <el-dialog v-model="otherMoneyVisible"
+               :title="$t('basicData.otherAmounts')"
+               :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>
+
+<style scoped>
+.main-div {
+  width: 100%;
+  height: 100%;
+}
+.el-col{
+  border: #181818 1px solid;
+}
+:deep(.el-input__wrapper) {
+  box-shadow: 0 0 0 0 var(--el-input-border-color, var(--el-border-color)) inset;
+  cursor: default;
+  border: none !important;
+  background-color: transparent;
+}
+.order-primary{
+  width: 100%;
+}
+.order-detail{
+  width: 100%;
+  height: 70%;
+}
+.vxe-grid {
+  /* 绂佺敤娴忚鍣ㄩ粯璁ら�変腑 */
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+:deep(#product .el-dialog__body){
+  height: 90%;
+  width: 100%;
+}
+
+.head{
+  width: 100%;
+  height: 50px;
+}
+
+.main-table{
+  width: 100%;
+  height: calc(100% - 50px);
+}
+</style>
\ No newline at end of file
diff --git a/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelf.vue b/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelf.vue
index eb7f6ba..d89c544 100644
--- a/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelf.vue
+++ b/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelf.vue
@@ -27,10 +27,10 @@
     <div id="div-title">
       <el-breadcrumb :separator-icon="ArrowRight">
         <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/finishedGlassShelf/finishedGlassShelfInformation' }">{{$t('鏂欐灦搴撳瓨')}}</el-breadcrumb-item>
-        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/finishedGlassShelf/materialOutbound' }">{{$t('鏂欐灦鍑哄簱')}}</el-breadcrumb-item>
+        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/finishedGlassShelf/finishedGlassShelfEmit' }">{{$t('鏂欐灦鍑哄簱')}}</el-breadcrumb-item>
         <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/finishedGlassShelf/returnToStorage' }">{{$t('鏂欐灦鍏ュ簱')}}</el-breadcrumb-item>
         <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/finishedGlassShelf/createFinishedGlassShelf' }">{{$t('鏂欐灦鏂板')}}</el-breadcrumb-item>
-        <el-breadcrumb-item @click="changeRouter(6)" :class="indexFlag===6?'indexTag':''" :to="{ path: '/main/finishedGlassShelf/selectSurplusMaterials' }">{{$t('鏂欐灦鎶ヨ〃')}}</el-breadcrumb-item>
+        <el-breadcrumb-item @click="changeRouter(6)" :class="indexFlag===6?'indexTag':''" :to="{ path: '/main/finishedGlassShelf/CreateFinishedGlassShelfEmit' }">{{$t('鏂欐灦鎶ヨ〃')}}</el-breadcrumb-item>
         <el-breadcrumb-item v-show="false" :to="{ path: '/main/order/orderReport' }">{{$t('ingredientsStock.returnToStorage')}}</el-breadcrumb-item>
       </el-breadcrumb>
 
diff --git a/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelfEmit.vue b/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelfEmit.vue
new file mode 100644
index 0000000..7a602ef
--- /dev/null
+++ b/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelfEmit.vue
@@ -0,0 +1,516 @@
+<script setup>
+
+import {onMounted, reactive, ref} from "vue";
+import {useRouter} from  'vue-router'
+import request from "@/utils/request";
+import deepClone from "@/utils/deepClone";
+import useUserInfoStore from "@/stores/userInfo";
+import {ElMessage, ElMessageBox} from "element-plus";
+import {Search} from "@element-plus/icons-vue";
+import { useI18n } from 'vue-i18n'
+import {addListener, toolbarButtonClickEvent} from "@/hook/mouseMove";
+import {changeFilterEvent,filterChanged,filterChangeds} from "@/hook"
+import {divideAuto, multiply} from "@/utils/decimal";
+import companyInfo from "@/stores/sd/companyInfo";
+import footSum from "@/hook/footSum";
+import {copyTableCellValue} from "@/hook/copyTableCellValue";
+
+//璇█鑾峰彇
+const { t } = useI18n()
+const userStore = useUserInfoStore()
+const company = companyInfo()
+const router = useRouter()
+let produceList = ref([])
+let sheetIndex = ref(-1)
+let rowIndexData = ref(null)
+
+let dialogTableVisible = ref(false)
+let refMaterialAddition=ref()
+const getTableRow = (row,type) =>{
+  switch (type) {
+    case 'edit' :{
+      router.push({path: '/main/finishedGlassShelf/createFinishedGlassShelfEmit', query: { id: row.id }})
+      break
+    }
+    case 'delete':{
+      let flowData = ref({
+        id: row.id,
+        userName:userStore.user.userName,
+        userId:userStore.user.userId
+      })
+      request.post("/materialStore/deleteMaterialStore",flowData.value).then((res) => {
+        if(res.code==200 && res.data==="true"){
+          ElMessage.success(t('basicData.msg.deleteSuccess'))
+          router.push({path:'/main/ingredients/SelectIngredients',query:{random:Math.random()}})
+        }else if(res.data==="false1"){
+          ElMessage.warning(t('ingredients.msg1'))
+        }else{
+          ElMessage.warning(t('basicData.msg.deleteFail'))
+        }
+      }).catch((err)=>{
+        ElMessage.error(t('basicData.msg.ServerConnectionError'))
+        router.push("/login")
+      })
+      return
+    }
+  }
+}
+
+const hasDecimal=(value)=>{
+  const regex=/\./ // 瀹氫箟姝e垯琛ㄨ揪寮忥紝鏌ユ壘灏忔暟鐐�
+  return regex.test(value) //杩斿洖true/false
+}
+
+const hasDecimalhtml=(item,row)=>{
+  let aa=item.split('.').length
+  if (aa===2){
+    return row[item.split('.')[0]][item.split('.')[1]]
+  }else if(aa===3){
+    return row[item.split('.')[0]][item.split('.')[1]][item.split('.')[2]]
+  }
+
+
+}
+
+let pageNum=ref(1)
+let total = reactive({
+  pageTotal : 0,
+  dataTotal : 0,
+  pageSize : 100
+})
+
+let filterData = ref({
+
+})
+
+const values = ref('')
+
+
+let selectDate = ref(["",""])
+let BasicData = ref([])
+let materialStore= ref([])
+
+
+
+
+
+onMounted(() => {
+  addListener(xGrid.value,gridOptions)
+
+  //绗竴娆¤皟鐢�
+  // request.get(`/BasicWarehouse/BasicWarehouseType/`+t('ingredients.originalFilm')+'|'+t('ingredients.accessories')).then((res) => {
+  //   if(res.code==200){
+  //     gridOptions.columns.splice(0,gridOptions.columns.length)
+  //     BasicData.value = res.data
+  //     //娣诲姞鍒�
+  //     gridOptions.columns=arr.slice()
+  //
+  //     for (let i=0;i<BasicData.value.length;i++){
+  //       let aa=null
+  //       if(BasicData.value[i].OperateType==="name"){
+  //         aa={field: "json."+BasicData.value[i].OperateType, width: '150',title: BasicData.value[i].OperateTypeName, sortable: true,showOverflow:'ellipsis' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChangeds}
+  //       }else{
+  //         aa={field: "json."+BasicData.value[i].OperateType, width: '150',title: BasicData.value[i].OperateTypeName, sortable: true,showOverflow:'ellipsis' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}
+  //       }
+  //       gridOptions.columns.push(aa)
+  //
+  //     }
+  //     values.value=t('ingredientsStock.inventory')
+  //     getInventoryWorks()
+  //
+  //   }else{
+  //     ElMessage.warning(res.msg)
+  //   }
+  // })
+})
+
+
+
+
+
+
+
+
+
+
+
+const getInventoryEngineeringWork = () => {
+
+    request.post(`/materialInventory/getSelectMaterialInventoryEngineeringDate/${pageNum.value}/${total.pageSize}/${selectDate.value}`,filterData.value).then((res) => {
+
+      if(res.code==200){
+        materialStore.value=[]
+        for (let i=0;i<res.data.data.length;i++){
+          materialStore.value[i]=(res.data.data[i])
+          materialStore.value[i].json=(JSON.parse(res.data.data[i].json))
+
+        }
+
+        total.dataTotal = res.data.total.total*1
+        total.pageTotal= res.data.total.pageTotal
+        pageNum.value=1
+        selectDate.value = res.data.selectDate
+        gridOptions.toolbarConfig.buttons[2].disabled = true
+        produceList = deepClone(materialStore.value)
+        xGrid.value.loadData(produceList)
+        gridOptions.loading=false
+      }else{
+        ElMessage.warning(res.msg)
+        router.push("/login")
+      }
+    })
+
+
+}
+
+
+
+const selectOrderList = ()=>{
+  request.get(`/BasicWarehouse/BasicWarehouseType/`+t('ingredients.originalFilm')+'|'+t('ingredients.accessories')).then((res) => {
+    if(res.code==200){
+      gridOptions.columns.splice(0,gridOptions.columns.length)
+      BasicData.value = res.data
+      //娣诲姞鍒�
+      gridOptions.columns=arr.slice()
+
+      for (let i=0;i<BasicData.value.length;i++){
+        let aa=null
+        if(BasicData.value[i].OperateType==="model"){
+           aa={field: "json."+BasicData.value[i].OperateType, width: '150',title: BasicData.value[i].OperateTypeName, sortable: true,showOverflow:'ellipsis' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}
+        }else{
+           aa={field: "json."+BasicData.value[i].OperateType, width: '150',title: BasicData.value[i].OperateTypeName, sortable: true,showOverflow:'ellipsis' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}
+        }
+
+        gridOptions.columns.push(aa)
+
+      }
+      if(values.value===t('ingredientsStock.inventory')){
+        getInventoryWorkPaging()
+      }else{
+        getInventoryEngineeringWork()
+      }
+
+    }else{
+      ElMessage.warning(res.msg)
+    }
+  })
+}
+
+const changeDate =  ()=>{
+  selectOrderList()
+}
+
+//椤佃剼璺宠浆
+const handlePageChange = ({ currentPage, pageSize }) => {
+  selectOrderList()
+  total.pageTotal = pageSize
+  pageNum.value=currentPage
+}
+
+
+
+//瀛愮粍浠舵帴鏀跺弬鏁�
+const xGrid = ref()
+const gridOptions = reactive({
+  border:  "full",//琛ㄦ牸鍔犺竟妗�
+  keepSource: true,//淇濇寔婧愭暟鎹�
+  align: 'center',//鏂囧瓧灞呬腑
+  stripe:true,//鏂戦┈绾�
+  rowConfig: {isCurrent: true, isHover: true,height: 30},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
+  id: 'FinishedGlassShelfEmit',
+  showFooter: true,//鏄剧ず鑴�
+  printConfig: {},
+  importConfig: {},
+  exportConfig: {},
+  scrollX:{enabled: true},
+  scrollY:{ enabled: true ,gt:0},//寮�鍚櫄鎷熸粴鍔�
+  showOverflow:true,
+  columnConfig: {
+    resizable: true,
+    useKey: true
+  },
+  filterConfig: {   //绛涢�夐厤缃」
+    //remote: true
+  },
+  customConfig: {
+    storage: true
+  },
+  editConfig: {
+    trigger: 'click',
+    mode: 'row',
+    showStatus: true
+  },//琛ㄥご鍙傛暟
+  columns:[
+    {title: t('basicData.operate'), width: '110', slots: { default: 'button_slot' },fixed:'left'},
+    { type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
+    {field: 'inventoryOrganization', width:'150', title: t('鍑哄簱鍗曟嵁缂栧彿'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged },
+    {field: 'materialCode', width: '150',title: t('瀹㈡埛鍚嶇О'), sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
+    {field: 'producer', width: '120',title: t('椤圭洰鍚嶇О'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
+    {field: 'id',width: '100', title: t('缁忓姙浜�'), sortable: true,showOverflow:"ellipsis",filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
+    {field: 'projectNo',width: '100', title: t('褰掕繕鏃ユ湡'), sortable: true},
+    {field: 'createTime',width: '100', title: t('鍒涘缓鏃堕棿'), sortable: true},
+    {field: 'qualityGuaranteePeriod',width: '100', title: t('澶囨敞'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
+
+  ],//琛ㄥご鎸夐挳
+  toolbarConfig: {
+    buttons: [
+
+    ],
+    /*import: false,
+    export: true,
+    print: true,*/
+    export: true,
+    zoom: true,
+    custom: true
+  },
+  footerMethod ({ columns, data }) {//椤佃剼鍑芥暟
+    return[
+      columns.map((column, columnIndex) => {
+        if (columnIndex === 0) {
+          return t('basicData.total')
+        }
+        const List = ["inventoryQuantity",'availableQuantity','totalArea']
+        if (List.includes(column.field)) {
+          return footSum(data, column.field)
+        }
+        return ''
+      })
+    ]
+  }
+
+})
+
+
+const gridEvents = {
+  async toolbarButtonClick({code}) {
+    const $grid = xGrid.value
+    if ($grid) {
+      switch (code) {
+        case 'out': {
+          $grid.clearFilter()
+          const selectRecords = $grid.getCheckboxRecords()
+
+
+          if (selectRecords.length === 0) {
+            ElMessage.warning(t('productStock.unselectedData'))
+            return
+          }
+          let id = ""
+          const array = [];
+          if (values.value===t('ingredientsStock.inventory')){
+            for (let i = 0; i < selectRecords.length; i++) {
+              array.push(selectRecords[i].id)
+              if (i + 1 === selectRecords.length) {
+                id += selectRecords[i].id
+              } else {
+                id += selectRecords[i].id + "|"
+              }
+            }
+          }else{
+            for (let i = 0; i < selectRecords.length; i++) {
+              array.push(selectRecords[i].useId)
+              if (i + 1 === selectRecords.length) {
+                id += selectRecords[i].useId
+              } else {
+                id += selectRecords[i].useId + "|"
+              }
+            }
+          }
+
+
+
+
+          router.push({path: '/main/ingredientsStock/CreateOutbound', query: {id: id,type:values.value}})
+          break
+
+
+        }
+        case 'add': {
+          dialogTableVisible.value=true
+          rowIndexData.value=null
+          sheetIndex.value=1
+          break
+        }
+
+        case 'update': {
+
+          $grid.clearFilter()
+          const selectRecords = $grid.getCheckboxRecords()
+          if (selectRecords.length === 1) {
+            dialogTableVisible.value=true
+            rowIndexData.value=selectRecords[0]
+            sheetIndex.value=2
+          }else{
+            ElMessage.warning(t('璇烽�変腑涓�琛屾暟鎹�'))
+            return
+          }
+
+
+          break
+        }
+
+        case 'delete': {
+          $grid.clearFilter()
+          const selectRecords = $grid.getCheckboxRecords()
+          if (selectRecords.length === 0) {
+            ElMessage.warning(t('productStock.unselectedData'))
+            return
+          }
+          ElMessageBox.confirm("纭鍒犻櫎锛�",
+              {
+                confirmButtonText: t('basicData.confirmButtonText'),
+                cancelButtonText: t('basicData.cancelButtonText'),
+                distinguishCancelAndClose: true,
+                type: 'warning',
+              }
+          ).then(()=>{
+            let id = ""
+            const array = [];
+            if (values.value===t('ingredientsStock.inventory')){
+              for (let i = 0; i < selectRecords.length; i++) {
+                array.push(selectRecords[i].id)
+                if (i + 1 === selectRecords.length) {
+                  id += selectRecords[i].id
+                } else {
+                  id += selectRecords[i].id + "|"
+                }
+              }
+            }else{
+              for (let i = 0; i < selectRecords.length; i++) {
+                array.push(selectRecords[i].useId)
+                if (i + 1 === selectRecords.length) {
+                  id += selectRecords[i].useId
+                } else {
+                  id += selectRecords[i].useId + "|"
+                }
+              }
+            }
+            let flowData = ref({
+              materialInventory: selectRecords,
+              ids: id,
+              creator: userStore.user.userName
+
+            })
+            request.post(`/materialInventory/deleteMaterialInventory`,flowData.value).then((res) => {
+              if(res.code==200 && res.data===true){
+                ElMessage.success(t('searchOrder.msgDeleteSuccess'))
+                router.push({path:'/main/ingredientsStock/selectIngredientsStock', query:{random:Math.random()}})
+              }else{
+                ElMessage.warning(res.msg)
+              }
+            })
+          }).catch((action)=>{
+          })
+          break
+
+
+        }
+      }
+    }
+  },
+  cellDblclick ({row,column}) {
+    copyTableCellValue(row,column)
+  }
+}
+
+
+
+
+
+
+</script>
+
+<template>
+  <div class="main-div-customer">
+    <div class="head">
+      <el-date-picker
+          v-model="selectDate"
+          type="daterange"
+          :start-placeholder="$t('basicData.startDate')"
+          :end-placeholder="$t('basicData.endDate')"
+          format="YYYY-MM-DD"
+          value-format="YYYY-MM-DD"
+
+      />
+      <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">{{$t('basicData.search')}}</el-button>
+    </div>
+
+    <div class="main-table">
+      <vxe-grid
+          height="100%"
+          class="mytable-scrollbar"
+          ref="xGrid"
+          v-bind="gridOptions"
+          v-on="gridEvents"
+
+      >
+        <!--      @toolbar-button-click="toolbarButtonClickEvent"-->
+        <!--      涓嬫媺鏄剧ず鎵�鏈変俊鎭彃妲�-->
+        <template #content="{ row }">
+          <ul class="expand-wrapper">
+            <li  v-for="(item,index) in gridOptions.columns" v-show="item.field!=undefined ">
+              <span style="font-weight: bold">{{item.title+':  '}}</span>
+              <span v-if="hasDecimal(item.field)">{{ hasDecimalhtml(item.field,row) }}</span>
+              <span v-else>{{ row[item.field] }}</span>
+            </li>
+          </ul>
+        </template>
+
+        <!--宸﹁竟鍥哄畾鏄剧ず鐨勬彃妲�-->
+        <template #button_slot="{ row }">
+          <el-button @click="getTableRow(row,'edit')"
+                     v-if="userStore.user.permissions.indexOf('selectIngredients.edit') > -1"
+                     link type="primary" size="small">{{ $t('basicData.edit') }}</el-button>
+          <el-popconfirm @confirm="getTableRow(row,'delete')" :title="$t('searchOrder.deleteConfirm')">
+            <template #reference>
+              <el-button  link type="primary" size="small">{{ $t('basicData.delete') }}</el-button>
+            </template>
+          </el-popconfirm>
+        </template>
+
+        <template #num1_filter="{ column, $panel }">
+          <div>
+            <div v-for="(option, index) in column.filters" :key="index">
+              <input type="type" v-model="option.data" @keyup.enter.native="$panel.confirmFilter()" @input="changeFilterEvent($event, option, $panel)"/>
+            </div>
+          </div>
+        </template>
+
+      </vxe-grid>
+    </div>
+  </div>
+</template>
+
+<style scoped>
+.main-div-customer{
+  width: 99%;
+  height: 100%;
+}
+.main-div-customers{
+  width: 99%;
+  height: 100%;
+}
+.el-col{
+  margin-left: 15px;
+  margin-bottom: 5px;
+}
+.order-primary{
+  width: 100%;
+}
+.head{
+  width: 100%;
+  height: 35px;
+}
+
+.main-table{
+  width: 100%;
+  height: calc(100% - 35px);
+}
+.vxe-grid {
+  /* 绂佺敤娴忚鍣ㄩ粯璁ら�変腑 */
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+</style>
\ No newline at end of file
diff --git a/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelfInformation.vue b/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelfInformation.vue
index 9713032..45347de 100644
--- a/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelfInformation.vue
+++ b/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelfInformation.vue
@@ -29,13 +29,29 @@
 const getTableRow = (row,type) =>{
   switch (type) {
     case 'edit' :{
-      //alert('鎴戞帴鏀跺埌瀛愮粍浠朵紶閫佺殑缂栬緫淇℃伅')
-      router.push({path: '/main/trader/CreateTrader', query: { id: row.id }})
+      router.push({path: '/main/finishedGlassShelf/createFinishedGlassShelf', query: { id: row.id }})
       break
     }
     case 'delete':{
-      alert('鎴戞帴鏀跺埌瀛愮粍浠朵紶閫佺殑鍒犻櫎淇℃伅')
-      break
+      let flowData = ref({
+        id: row.id,
+        userName:userStore.user.userName,
+        userId:userStore.user.userId
+      })
+      request.post("/materialStore/deleteMaterialStore",flowData.value).then((res) => {
+        if(res.code==200 && res.data==="true"){
+          ElMessage.success(t('basicData.msg.deleteSuccess'))
+          router.push({path:'/main/ingredients/SelectIngredients',query:{random:Math.random()}})
+        }else if(res.data==="false1"){
+          ElMessage.warning(t('ingredients.msg1'))
+        }else{
+          ElMessage.warning(t('basicData.msg.deleteFail'))
+        }
+      }).catch((err)=>{
+        ElMessage.error(t('basicData.msg.ServerConnectionError'))
+        router.push("/login")
+      })
+      return
     }
   }
 }
@@ -201,7 +217,7 @@
   align: 'center',//鏂囧瓧灞呬腑
   stripe:true,//鏂戦┈绾�
   rowConfig: {isCurrent: true, isHover: true,height: 30},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
-  id: 'SelectIngredientsStock',
+  id: 'FinishedGlassShelfInformation',
   showFooter: true,//鏄剧ず鑴�
   printConfig: {},
   importConfig: {},
@@ -451,8 +467,13 @@
         <!--宸﹁竟鍥哄畾鏄剧ず鐨勬彃妲�-->
         <template #button_slot="{ row }">
           <el-button @click="getTableRow(row,'edit')"
-                     link type="primary" size="small">{{$t('basicData.edit')}}</el-button>
-          <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button>
+                     v-if="userStore.user.permissions.indexOf('selectIngredients.edit') > -1"
+                     link type="primary" size="small">{{ $t('basicData.edit') }}</el-button>
+          <el-popconfirm @confirm="getTableRow(row,'delete')" :title="$t('searchOrder.deleteConfirm')">
+            <template #reference>
+              <el-button  link type="primary" size="small">{{ $t('basicData.delete') }}</el-button>
+            </template>
+          </el-popconfirm>
         </template>
 
         <template #num1_filter="{ column, $panel }">
@@ -463,35 +484,8 @@
           </div>
         </template>
 
-<!--        <template #pager>
-          &lt;!&ndash;浣跨敤 pager 鎻掓Ы&ndash;&gt;
-          <vxe-pager
-              @page-change="handlePageChange"
-              :layouts="[  'PrevPage', 'Jump','PageCount', 'NextPage',  'Total']"
-              v-model:current-page="pageNum"
-              v-model:page-size="total.pageSize"
-              v-model:pager-count="total.pageTotal"
-              :total="total.dataTotal"
-          >
-          </vxe-pager>
-        </template>-->
-
-
       </vxe-grid>
     </div>
-
-<!--    <el-dialog v-model="dialogTableVisible" :title="$t('ingredients.materialAddition')" style="width: 70%;height:75% ">-->
-<!--      <material-addition v-if="sheetIndex===1" ref="refMaterialAddition" style="width: 100%;height: 100%"-->
-<!--                         :data=rowIndexData :type=1-->
-<!--                         :close-on-click-modal="false"-->
-<!--                         :close-on-press-escape="false"-->
-<!--      />-->
-<!--      <material-addition v-if="sheetIndex===2" ref="refMaterialAddition" style="width: 100%;height: 100%"-->
-<!--                         :data=rowIndexData :type=2-->
-<!--                         :close-on-click-modal="false"-->
-<!--                         :close-on-press-escape="false"-->
-<!--      />-->
-<!--    </el-dialog>-->
   </div>
 </template>
 
diff --git a/north-glass-erp/northglass-erp/src/views/mm/ingredientStock/SelectIngredientsStock.vue b/north-glass-erp/northglass-erp/src/views/mm/ingredientStock/SelectIngredientsStock.vue
index d82f716..9f1d146 100644
--- a/north-glass-erp/northglass-erp/src/views/mm/ingredientStock/SelectIngredientsStock.vue
+++ b/north-glass-erp/northglass-erp/src/views/mm/ingredientStock/SelectIngredientsStock.vue
@@ -317,7 +317,7 @@
       {'code': 'out', 'name': t('ingredientsStock.materialOutbound'),status: 'primary'},
       {'code': 'add', 'name': t('ingredients.materialAddition'),status: 'primary'},
       {'code': 'delete', 'name': t('basicData.delete'),status: 'primary'},
-      {'code': 'update', 'name': t('淇敼'),status: 'primary'},
+      {'code': 'update', 'name': t('basicData.update'),status: 'primary'},
     ],
     /*import: false,
     export: true,
@@ -404,7 +404,7 @@
             rowIndexData.value=selectRecords[0]
             sheetIndex.value=2
           }else{
-            ElMessage.warning(t('璇烽�変腑涓�琛屾暟鎹�'))
+            ElMessage.warning(t('ingredientsStock.pleaseSelectOneData'))
             return
           }
 
@@ -419,7 +419,7 @@
             ElMessage.warning(t('productStock.unselectedData'))
             return
           }
-          ElMessageBox.confirm("纭鍒犻櫎锛�",
+          ElMessageBox.confirm(t('searchOrder.deleteConfirm'),
               {
                 confirmButtonText: t('basicData.confirmButtonText'),
                 cancelButtonText: t('basicData.cancelButtonText'),
diff --git a/north-glass-erp/northglass-erp/src/views/mm/productStock/ProductStockList.vue b/north-glass-erp/northglass-erp/src/views/mm/productStock/ProductStockList.vue
index 8b5c9b9..c7a157e 100644
--- a/north-glass-erp/northglass-erp/src/views/mm/productStock/ProductStockList.vue
+++ b/north-glass-erp/northglass-erp/src/views/mm/productStock/ProductStockList.vue
@@ -249,7 +249,7 @@
       // { 'code' :'issue','name':t('productStock.orderTransfer'),status: 'primary'},
       // { 'code' :'out','name':t('productStock.finishedProductPickup'),status: 'primary'},
       //{ 'code' :'rework','name':t('productStock.finishedProductRework'),status: 'primary'},
-      { 'code' :'changeRack','name':'瑁呯璋冩灦',status: 'primary',visible:(company.companyName==="娲涢槼鍖楁柟鐜荤拑鎶�鏈偂浠芥湁闄愬叕鍙�")},
+      { 'code' :'changeRack','name':t('productStock.packing'),status: 'primary',visible:(company.companyName==="娲涢槼鍖楁柟鐜荤拑鎶�鏈偂浠芥湁闄愬叕鍙�")},
       { 'code' :'print','name':t('basicData.print'),status: 'primary',visible:company.companyName==="娲涢槼鍖楁柟鐜荤拑鎶�鏈偂浠芥湁闄愬叕鍙�"},
 
     ],
@@ -335,12 +335,12 @@
     return
   }
   if(currentRecord.value.boxNo.length>255 || currentRecord.value.remark.length>255){
-    ElMessage.warning('绠卞彿鎴栧娉�'+t('basicData.msg.max255'))
+    ElMessage.warning(t('productStock.boxNumberOrRemarks')+t('basicData.msg.max255'))
     return
   }
   await request.post(`/finishedGoodsInventory/changeRack/${userStore.user.userName}`,currentRecord.value).then((res) => {
     if(res.code==200 ){
-      ElMessage.success('瑁呯璋冩灦鎴愬姛')
+      ElMessage.success(t('productStock.msgPacking'))
       router.push({path: '/main/productStock/productStockList', query:{random:Math.random()}})
     }else{
       ElMessage.warning(res.msg)
@@ -408,7 +408,7 @@
     <el-dialog v-model="dialogTableVisible"  style="width: 400px;height:250px;margin-top: 25vh">
       <el-row>
         <el-col :span="8">
-          <el-text>绠卞彿:</el-text>
+          <el-text>{{$t('productStock.boxNumber')}}:</el-text>
         </el-col>
         <el-col :span="16">
           <el-input v-model.trim="currentRecord.boxNo"/>
@@ -416,7 +416,7 @@
       </el-row>
       <el-row>
         <el-col :span="8">
-          <el-text>鏁伴噺:</el-text>
+          <el-text>{{$t('order.quantity')}}:</el-text>
         </el-col>
         <el-col :span="16">
           <el-input v-model="currentRecord.quantityAvailable" type="number"/>
@@ -424,7 +424,7 @@
       </el-row>
       <el-row>
         <el-col :span="8">
-          <el-text>澶囨敞:</el-text>
+          <el-text>{{$t('basicData.remarks')}}:</el-text>
         </el-col>
         <el-col :span="16">
           <el-input v-model="currentRecord.remark"/>
diff --git a/north-glass-erp/northglass-erp/src/views/sd/basicData/CreateBasicData.vue b/north-glass-erp/northglass-erp/src/views/sd/basicData/CreateBasicData.vue
index c718f49..a68a933 100644
--- a/north-glass-erp/northglass-erp/src/views/sd/basicData/CreateBasicData.vue
+++ b/north-glass-erp/northglass-erp/src/views/sd/basicData/CreateBasicData.vue
@@ -152,6 +152,11 @@
     }
   }
   if(basic.value.basicType[1]==="icon"){
+    const regex = /^(?:\d+|\d+\.\d)$/
+    if (!regex.test(iconWidth.value)||!regex.test(iconHeight.value) ) {
+      ElMessage.warning(t('basicData.msg.greater0Sec1'))
+      return
+    }
     let nickname=basic.value.nickname
     let data={
       width: iconWidth.value,
@@ -175,6 +180,11 @@
     }
   }
   if(basic.value.basicType[1]==="icon"){
+    const regex = /^(?:\d+|\d+\.\d)$/
+    if (!regex.test(iconWidth.value)||!regex.test(iconHeight.value) ) {
+      ElMessage.warning(t('basicData.msg.greater0Sec1'))
+      return
+    }
     let nickname=basic.value.nickname
     let data={
       width: iconWidth.value,

--
Gitblit v1.8.0