From 62a2e5583931e439b5914e39801173074e83e9ac Mon Sep 17 00:00:00 2001
From: guoyujie <guoyujie@ng.com>
Date: 星期三, 31 十二月 2025 13:57:39 +0800
Subject: [PATCH] 提交 订单其他金额列和金额重置方法业务调整

---
 north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderOtherMoney.java    |    2 
 north-glass-erp/northglass-erp/src/lang/en.js                                   |    3 
 north-glass-erp/src/main/resources/mapper/sd/OrderOtherMoneyMapper.xml          |   21 +++
 north-glass-erp/northglass-erp/src/lang/ar.js                                   |    3 
 north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue               |   37 +++++++
 north-glass-erp/northglass-erp/src/lang/ru.js                                   |    3 
 north-glass-erp/src/main/java/com/example/erp/entity/sd/DeliveryOtherMoney.java |    2 
 north-glass-erp/northglass-erp/src/lang/zh.js                                   |    3 
 north-glass-erp/northglass-erp/src/components/sd/order/OrderOtherMoney.vue      |  171 ++++++++++++++++++++++++++-------
 north-glass-erp/northglass-erp/src/lang/kr.js                                   |    3 
 north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java      |   17 ++-
 11 files changed, 217 insertions(+), 48 deletions(-)

diff --git a/north-glass-erp/northglass-erp/src/components/sd/order/OrderOtherMoney.vue b/north-glass-erp/northglass-erp/src/components/sd/order/OrderOtherMoney.vue
index cae176c..2419e41 100644
--- a/north-glass-erp/northglass-erp/src/components/sd/order/OrderOtherMoney.vue
+++ b/north-glass-erp/northglass-erp/src/components/sd/order/OrderOtherMoney.vue
@@ -1,10 +1,11 @@
 <script setup>
-import {computed, onMounted, reactive, ref, watch} from "vue"
+import {computed, onMounted, reactive, ref, watch,h} from "vue"
 import {filterChanged} from "@/hook"
 import {useI18n} from "vue-i18n"
-import {ElMessage, ElMessageBox,} from "element-plus"
+import {ElInput, ElMessage, ElMessageBox,} from "element-plus"
 import request from "@/utils/request"
 import {useRouter,useRoute} from "vue-router"
+const emits = defineEmits(['addNewCustomColumn','deleteCustomColumn'])
 const { t } = useI18n()
 const router = useRouter()
 const route = useRoute()
@@ -72,13 +73,10 @@
       {'code': 'add', 'name': t('basicData.insert'),status: 'primary'},
       {'code': 'delete', 'name': t('basicData.delete'),status: 'primary'}
     ],
+    slots: {
+      tools: 'toolbar_buttons'
+    },
 
-
-    // import: false,
-    // export: true,
-    // print: true,
-    // zoom: true,
-    // custom: true
   }
   ,
   //table body瀹為檯鏁版嵁
@@ -119,7 +117,7 @@
             ElMessage.warning(t('components.pleaseClickToSelectARowFirst'))
             return
           }
-          deleteColum(rowClickIndex.value.id)
+          deleteColum(rowClickIndex.value)
           rowClickIndex.value = null
           break
         }
@@ -138,22 +136,25 @@
   })
   return count.toFixed(2)==='NaN' ? null : parseFloat(count.toFixed(2))
 }
+let radio1 = ref(1)
 
 //鐢ㄤ簬鎺ユ敹鐖剁粍浠跺弬鏁�
 let prop = defineProps({
   otherMoney:{}
 })
 onMounted(()=>{
+  console.log(prop.otherMoney)
   if(Object.keys(prop.otherMoney).length === 0){
     return
   }
-  xGrid.value.reloadData(prop.otherMoney.filter(item => item.column.indexOf('M')>-1))
+  xGrid.value.reloadData(prop.otherMoney.filter(item => item.column===null || item.column.startsWith('M')))
 })
 watch(prop,(newVal)=>{
+  console.log(prop.otherMoney)
   if(Object.keys(prop.otherMoney).length === 0){
     return
   }
-  xGrid.value.reloadData(prop.otherMoney.filter(item => item.column.indexOf('M')>-1))
+  xGrid.value.reloadData(prop.otherMoney.filter(item => item.column===null || item.column.startsWith('M')))
 })
 
 const countAmount = (row) => {
@@ -174,32 +175,97 @@
 defineExpose({
   validate
 })
+const state = reactive({
+  alias: null,
+  price: null,
+  quantity: null,
+})
 
 
+const vNode = () => {
+  return h('div', {}, [
+    h('div', { style: 'margin-bottom: 10px;' }, [
+      h('div', {}, '鍒楀悕'),
+      h(ElInput, {
+        modelValue: state.alias,
+        'onUpdate:modelValue': ($event) => {
+          state.alias = $event;
+        },
+      }),
+    ]),
+    h('div', {}, [
+      h('div', {}, '鍗曚环'),
+      h(ElInput, {
+        modelValue: state.price,
+        'onUpdate:modelValue': ($event) => {
+          state.price = $event;
+        },
+      }),
+    ]),
+    h('div', {}, [
+      h('div', {}, '鏁伴噺'),
+      h(ElInput, {
+        modelValue: state.quantity,
+        'onUpdate:modelValue': ($event) => {
+          state.quantity = $event;
+        },
+      }),
+    ]),
+  ]);
+}
 const addColumn = () => {
-  ElMessageBox.prompt( t('components.addColumnNames')+':', {
-    confirmButtonText: t('basicData.insert'),
-    cancelButtonText: t('basicData.cancelButtonText'),
-    inputPattern:/^.{1,20}$/,
-    inputErrorMessage: t('components.message'),
-  })
-    .then(({ value }) => {
-      request.post('/basicOtherMoney/save',{alias:value}).then(res=>{
-        if (res.code==='200' && res.data!==false){
-          ElMessage.success(t('basicData.msg.saveSuccess'))
-          setTimeout(()=>{
-            window.location.reload()
-          },1500)
+  if(radio1.value===1){
+    ElMessageBox({
+      title: t('components.addColumnNames'),
+      message: () => vNode(),
+      // 涓嶅厑璁哥偣鍑婚伄缃╁眰鍏抽棴
+      'close-on-click-modal': false,
+    }).then(() => {
+      if(!(/^.{1,20}$/.test(state.alias))){
+        ElMessage.error(t('components.message'))
+        return
+      }
+      if(!(/^(0(\.\d{1,2})?|([1-9]\d{0,4})(\.\d{1,2})?|99999(\.9{1,2})?)$/.test(state.price))){
+        ElMessage.warning(t('basicData.msg.range99999Dec2'))
+        return
+      }
+      if(!(/^[1-9]\d*$/.test(state.quantity))){
+        ElMessage.warning(t('basicData.msg.greater0'))
+        return
+      }
 
-        }else{
-          ElMessage.error(t('basicData.msg.saveFail'))
-        }
-      })
+
+      emits('addNewCustomColumn', state)
     })
+  }else{
+    ElMessageBox.prompt( t('components.addColumnNames')+':', {
+      confirmButtonText: t('basicData.insert'),
+      cancelButtonText: t('basicData.cancelButtonText'),
+      inputPattern:/^.{1,20}$/,
+      inputErrorMessage: t('components.message'),
+    })
+        .then(({ value }) => {
+          request.post('/basicOtherMoney/save',{alias:value.trim()}).then(res=>{
+            if (res.code==='200' && res.data!==false){
+              ElMessage.success(t('basicData.msg.saveSuccess'))
+              setTimeout(()=>{
+                window.location.reload()
+              },1500)
+            }else{
+              ElMessage.error(t('basicData.msg.saveFail'))
+            }
+          })
+        })
+  }
+
+
+
+
+
 
 }
 
-const deleteColum = (id) => {
+const deleteColum = (row) => {
   ElMessageBox.confirm(
       t('searchOrder.deleteConfirm'),
       'Warning',
@@ -210,16 +276,26 @@
       }
   )
       .then(() => {
-        request.post(`/basicOtherMoney/deleteById/${id}`,).then(res=>{
-          if (res.code==='200' && res.data!==false){
-            ElMessage.success(t('basicData.msg.deleteSuccess'))
-            setTimeout(()=>{
-              window.location.reload()
-            },1500)
-          }else{
-            ElMessage.error(t('basicData.msg.deleteFail'))
+        if(radio1.value===1){
+          if(row.deliveryState ===1 && !row.column){
+            ElMessage.warning('宸插垱寤哄彂璐у崟锛屾棤娉曞垹闄�')
+            return
           }
-        })
+          emits('deleteCustomColumn', row.id)
+        }else{
+          request.post(`/basicOtherMoney/deleteById/${id}`,).then(res=>{
+            if (res.code==='200' && res.data!==false){
+              ElMessage.success(t('basicData.msg.deleteSuccess'))
+              setTimeout(()=>{
+                window.location.reload()
+              },1500)
+            }else{
+              ElMessage.error(t('basicData.msg.deleteFail'))
+            }
+          })
+        }
+
+
       })
 
 }
@@ -239,6 +315,25 @@
       <template #default="{ row }">
         <span>{{ countAmount(row) }} </span>
       </template>
+      <template #toolbar_buttons>
+        <el-select v-model="radio1" placeholder="" style="width: 240px">
+          <el-option
+              :label="$t('components.customColumn')"
+              :value="1"
+          />
+
+          <el-option
+              :label="$t('components.systemColumn')"
+              :value="2"
+          />
+
+       </el-select>
+<!--        <el-radio-group >-->
+<!--          <el-radio :value="1">{{$t('components.customColumn')}}</el-radio>-->
+<!--          <el-radio :label="2">{{}}</el-radio>-->
+<!--        </el-radio-group>-->
+      </template>
+
     </vxe-grid>
 
   </div>
diff --git a/north-glass-erp/northglass-erp/src/lang/ar.js b/north-glass-erp/northglass-erp/src/lang/ar.js
index 4ace8f2..0589cbe 100644
--- a/north-glass-erp/northglass-erp/src/lang/ar.js
+++ b/north-glass-erp/northglass-erp/src/lang/ar.js
@@ -1327,6 +1327,9 @@
     components:{
         addNewSignature :'兀囟賮 丕爻賲 噩丿賷丿',
         addColumnNames :'兀囟賮 丕爻賲 丕賱毓賲賵丿',
+        customColumn:'鑷畾涔夊垪',
+        systemColumn:'绯荤粺鍒�',
+        addColumnRemark :'锛堟敞:鑻ユ柊澧炵郴缁熷垪锛岃鍗曟湭淇濆瓨鏃惰嚜瀹氫箟鍒楀皢娓呯┖锛�',
         message :'丕賱乇噩丕亍 廿丿禺丕賱 丕賱兀丨乇賮 囟賲賳 20 丨乇賮丕賸貙 賱丕賷賲賰賳 丕賳 賷賰賵賳 賮丕乇睾丕賸',
         activeName :'賯丕卅賲丞 丕賱兀爻賲丕亍',
         orderHeader :'乇兀爻 丕賱胤賱亘',
diff --git a/north-glass-erp/northglass-erp/src/lang/en.js b/north-glass-erp/northglass-erp/src/lang/en.js
index 8013746..dac06f1 100644
--- a/north-glass-erp/northglass-erp/src/lang/en.js
+++ b/north-glass-erp/northglass-erp/src/lang/en.js
@@ -1327,6 +1327,9 @@
     components:{
         addNewSignature :'Add label name',
         addColumnNames :'New column name',
+        customColumn:'鑷畾涔夊垪',
+        systemColumn:'绯荤粺鍒�',
+        addColumnRemark :'锛堟敞:鑻ユ柊澧炵郴缁熷垪锛岃鍗曟湭淇濆瓨鏃惰嚜瀹氫箟鍒楀皢娓呯┖锛�',
         message :'Please enter a non-empty character with a maximum of 20 characters',
         activeName :'Tag list',
         orderHeader :'Order header',
diff --git a/north-glass-erp/northglass-erp/src/lang/kr.js b/north-glass-erp/northglass-erp/src/lang/kr.js
index efdfc79..9fb3896 100644
--- a/north-glass-erp/northglass-erp/src/lang/kr.js
+++ b/north-glass-erp/northglass-erp/src/lang/kr.js
@@ -1327,6 +1327,9 @@
     components:{
         addNewSignature :'霛茧波氇� 於旉皜',
         addColumnNames :'鞐� 鞚措 於旉皜',
+        customColumn:'鑷畾涔夊垪',
+        systemColumn:'绯荤粺鍒�',
+        addColumnRemark :'锛堟敞:鑻ユ柊澧炵郴缁熷垪锛岃鍗曟湭淇濆瓨鏃惰嚜瀹氫箟鍒楀皢娓呯┖锛�',
         message :'瓿惦氨鞚� 鞎勲媽 20鞛� 鞚措偞鞚� 氍胳瀽毳� 鞛呺牓頃橃劯鞖�',
         activeName :'霛茧波 氇╇',
         orderHeader :'欤茧 靸侂嫧',
diff --git a/north-glass-erp/northglass-erp/src/lang/ru.js b/north-glass-erp/northglass-erp/src/lang/ru.js
index d8ab4df..e73e671 100644
--- a/north-glass-erp/northglass-erp/src/lang/ru.js
+++ b/north-glass-erp/northglass-erp/src/lang/ru.js
@@ -1327,6 +1327,9 @@
     components:{
         addNewSignature :'袛芯斜邪胁懈褌褜 懈屑褟 屑械褌泻懈',
         addColumnNames :'袛芯斜邪胁谢械薪懈械 胁 锌械褉械褔械薪褜',
+        customColumn:'鑷畾涔夊垪',
+        systemColumn:'绯荤粺鍒�',
+        addColumnRemark :'锛堟敞:鑻ユ柊澧炵郴缁熷垪锛岃鍗曟湭淇濆瓨鏃惰嚜瀹氫箟鍒楀皢娓呯┖锛�',
         message :'袙胁械写懈褌械 薪械 锌褍褋褌褘械 褋懈屑胁芯谢褘 胁 锌褉械写械谢邪褏 20 褋懈屑胁芯谢芯胁.',
         activeName :'小锌懈褋芯泻 屑械褌芯泻',
         orderHeader :'袟邪谐芯谢芯胁芯泻 蟹邪泻邪蟹邪',
diff --git a/north-glass-erp/northglass-erp/src/lang/zh.js b/north-glass-erp/northglass-erp/src/lang/zh.js
index b7076ae..f840967 100644
--- a/north-glass-erp/northglass-erp/src/lang/zh.js
+++ b/north-glass-erp/northglass-erp/src/lang/zh.js
@@ -1328,6 +1328,9 @@
     components:{
         addNewSignature :'鏂板鏍囩鍚�',
         addColumnNames :'鏂板鍒楀悕',
+        customColumn:'鑷畾涔夊垪',
+        systemColumn:'绯荤粺鍒�',
+        addColumnRemark :'锛堟敞:鑻ユ柊澧炵郴缁熷垪锛岃鍗曟湭淇濆瓨鏃惰嚜瀹氫箟鍒楀皢娓呯┖锛�',
         message :'璇疯緭鍏�20涓瓧绗︿互鍐呯殑涓斾笉涓虹┖鐨勫瓧绗�',
         activeName :'鏍囩鍒楄〃',
         orderHeader :'璁㈠崟琛ㄥご',
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 c79e2af..39fe043 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
@@ -1855,6 +1855,37 @@
   processAttributeVisible.value = false
 }
 
+const addNewCustomColumn = (column) => {
+
+  //鍏堝鏁扮粍閲岀殑column灞炴�ц繘琛屽幓閲嶏紝鍘婚櫎S寮�澶寸殑灞炴��
+  const uniqueColumns = Array.from(new Set(otherMoney.value.filter(item => !(item.column && item.column.startsWith('S')))));
+  const isDuplicate = uniqueColumns.some(item => {
+    // 纭繚item瀛樺湪涓旀湁alias灞炴��
+    if (!item || typeof item.alias !== 'string') {
+      return false;
+    }
+    // 姣旇緝鏃跺拷鐣ュぇ灏忓啓鍜屽墠鍚庣┖鏍�
+    return item.alias.trim().toLowerCase() === column.alias.trim();
+  });
+  if(isDuplicate){
+    ElMessage.error('鍒楀悕瀛樺湪')
+    return
+  }
+  otherMoney.value.push({
+    "id": null,
+    "column": null,
+    "alias": column.alias.trim(),
+    "quantity": column.quantity,
+    "price": column.price,
+    "state": true
+  })
+
+}
+
+const deleteCustomColumn = (id) => {
+  otherMoney.value= Array.from(new Set(otherMoney.value.filter(item => !(!item.column && item.id===id))))
+}
+
 </script>
 
 <template>
@@ -2099,6 +2130,8 @@
       <order-other-money
           ref="refOtherMoney"
           :otherMoney="otherMoney"
+          @addNewCustomColumn = "addNewCustomColumn"
+          @deleteCustomColumn = 'deleteCustomColumn'
           style="width: 100%;height: 100%" />
     </el-dialog>
 <!--寮傚舰瀵煎叆-->
@@ -2146,7 +2179,9 @@
                :close-on-click-modal="false"
                :title="$t('order.orderTransfer')"
                destroy-on-close width="500">
-      <order-number-report-transfer :transferData="transferData" @orderNumberTransfer="orderNumberTransfer"/>
+      <order-number-report-transfer
+          :transferData="transferData"
+          @orderNumberTransfer="orderNumberTransfer"/>
     </el-dialog>
 
     <el-dialog id="loadDWG"
diff --git a/north-glass-erp/src/main/java/com/example/erp/entity/sd/DeliveryOtherMoney.java b/north-glass-erp/src/main/java/com/example/erp/entity/sd/DeliveryOtherMoney.java
index f72c546..36b8973 100644
--- a/north-glass-erp/src/main/java/com/example/erp/entity/sd/DeliveryOtherMoney.java
+++ b/north-glass-erp/src/main/java/com/example/erp/entity/sd/DeliveryOtherMoney.java
@@ -17,7 +17,7 @@
     private Double quantity;
     private Double price;
     private Double money;
-    @TableField(select = false,exist= false)
     private String alias;
+    private Integer deliveryState;
     private LocalDateTime createTime;
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderOtherMoney.java b/north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderOtherMoney.java
index 7befebd..bea11db 100644
--- a/north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderOtherMoney.java
+++ b/north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderOtherMoney.java
@@ -17,7 +17,7 @@
     private Double quantity;
     private Double price;
     private Double money;
-    @TableField(select = false,exist= false)
     private String alias;
+    private Integer deliveryState;
     private LocalDateTime createTime;
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java b/north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java
index 40bd59d..c27975a 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java
@@ -83,9 +83,8 @@
         List<OrderDetail> OrderDetails = JSONArray.parseArray(JSONObject.toJSONString(orderJson.get("detail")), OrderDetail.class);
         List<OrderOtherMoney> orderOtherMoneyList = JSONArray.parseArray(JSONObject.toJSONString(orderJson.get("otherMoney")), OrderOtherMoney.class);
         if(orderOtherMoneyList != null ){
-            orderOtherMoneyList = orderOtherMoneyList.stream().filter(o -> o.getColumn().indexOf("M")==0).collect(Collectors.toList());
+            orderOtherMoneyList = orderOtherMoneyList.stream().filter(o -> o.getColumn()==null || o.getColumn().indexOf("M")==0).collect(Collectors.toList());
         }
-
         boolean saveState = true;
         //璁剧疆鍥炴粴鐐�
         Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
@@ -265,7 +264,11 @@
         //鍏堟妸鍏朵粬閲戦鍓〃鐨勯噾棰濅笌鏁伴噺缃�0
         if(orderOtherMoneyList!=null){
             orderOtherMoneyList.forEach(orderOtherMoney -> {
-                orderOtherMoney.setQuantity(0.0);
+                if(orderOtherMoney.getColumn()!=null){
+                    orderOtherMoney.setQuantity(0.0);
+                }else{
+                    orderOtherMoney.setMoney(orderOtherMoney.getPrice()*orderOtherMoney.getQuantity());
+                }
             });
         }
 
@@ -519,11 +522,15 @@
         List<OrderOtherMoney> orderOtherMoneyList = JSONArray.parseArray(JSONObject.toJSONString(jsonObject.get("otherMoney")), OrderOtherMoney.class);
 
         if(orderOtherMoneyList != null ){
-            orderOtherMoneyList = orderOtherMoneyList.stream().filter(o -> o.getColumn().indexOf("M")==0).collect(Collectors.toList());
+            orderOtherMoneyList = orderOtherMoneyList.stream().filter(o -> o.getColumn()==null || o.getColumn().indexOf("M")==0).collect(Collectors.toList());
         }
         if(orderOtherMoneyList!=null){
             orderOtherMoneyList.forEach(orderOtherMoney -> {
-                orderOtherMoney.setQuantity(0.0);
+                if(orderOtherMoney.getColumn()!=null){
+                    orderOtherMoney.setQuantity(0.0);
+                }else{
+                    orderOtherMoney.setMoney(orderOtherMoney.getPrice()*orderOtherMoney.getQuantity());
+                }
             });
         }
 
diff --git a/north-glass-erp/src/main/resources/mapper/sd/OrderOtherMoneyMapper.xml b/north-glass-erp/src/main/resources/mapper/sd/OrderOtherMoneyMapper.xml
index 6088f1d..984212a 100644
--- a/north-glass-erp/src/main/resources/mapper/sd/OrderOtherMoneyMapper.xml
+++ b/north-glass-erp/src/main/resources/mapper/sd/OrderOtherMoneyMapper.xml
@@ -12,16 +12,33 @@
             a.money,
             a.create_time,
             b.alias,
-            b.id
+            b.id,
+            a.delivery_state
         from basic_other_money as b
         left join  order_other_money as a
         on a.`column` = b.`column` and a.order_id = #{orderId}
         where b.`column` like 'M%' and b.state=1
+
+        UNION ALL
+
+-- 鏌ヨ order_other_money 琛ㄤ腑 column 涓虹┖鐨勮褰�
+        SELECT
+            a.order_id,
+            null AS `column`,
+            a.quantity,
+            a.price,
+            a.money,
+            a.create_time,
+            a.alias, -- 浣跨敤 order_other_money 琛ㄤ腑鐨勫埆鍚�
+            a.id,
+            a.delivery_state
+        FROM order_other_money AS a
+        WHERE a.order_id = #{orderId}
+          AND (a.`column` IS NULL OR a.`column` = '')
     </select>
 
     <select id="selectGrossAmount">
         select ifnull(sum(money),0) from order_other_money where order_id = #{orderId}
-
     </select>
 
 

--
Gitblit v1.8.0