From 2bdd525d521205f0106c6008f4e8e14d7b8051f6 Mon Sep 17 00:00:00 2001
From: 廖井涛 <2265517004@qq.com>
Date: 星期一, 01 十二月 2025 09:17:50 +0800
Subject: [PATCH] 订单工艺属性提交

---
 north-glass-erp/northglass-erp/src/router/index.js                                        |    5 
 north-glass-erp/src/main/resources/mapper/sd/OrderDetailMapper.xml                        |    6 
 north-glass-erp/src/main/java/com/example/erp/controller/sd/BasicGlassTypeController.java |   21 +
 north-glass-erp/src/main/resources/mapper/sd/OrderMapper.xml                              |   16 +
 north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java               |   16 
 north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet2.vue                 |   11 
 north-glass-erp/src/main/java/com/example/erp/mapper/sd/BasicGlassTypeMapper.java         |   15 +
 north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet1.vue                 |   13 
 north-glass-erp/src/main/java/com/example/erp/entity/sd/ProcessAttributeConfig.java       |   18 +
 north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue                         |  116 ++++++-
 north-glass-erp/src/main/java/com/example/erp/service/sd/BasicGlassTypeService.java       |   56 +++
 north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderDetail.java                  |    1 
 north-glass-erp/northglass-erp/src/components/sd/order/ProcessAttribute.vue               |  211 ++++++++++++++
 north-glass-erp/northglass-erp/src/views/sd/basicData/SearchProcessAttributeConfig.vue    |  252 ++++++++++++++++
 north-glass-erp/src/main/java/com/example/erp/controller/sd/OrderController.java          |    8 
 north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderMapper.java                  |    3 
 north-glass-erp/src/main/java/com/example/erp/service/sd/OrderService.java                |   12 
 north-glass-erp/src/main/resources/mapper/sd/BasicGlassTypeMapper.xml                     |   61 ++++
 north-glass-erp/northglass-erp/src/views/sd/basicData/BasicData.vue                       |    1 
 19 files changed, 812 insertions(+), 30 deletions(-)

diff --git a/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet1.vue b/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet1.vue
index 716908e..e17601e 100644
--- a/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet1.vue
+++ b/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet1.vue
@@ -39,6 +39,7 @@
 
   request.post(`/delivery/getSelectDeliveryPrinting`,form.value).then((res) => {
     if(res.code==200){
+      console.log(res.data)
       produceList.value = deepClone(res.data)
       for(let i=0;i<produceList.value.length;i++){
         let produceList1= ({
@@ -146,6 +147,13 @@
 }
 
 
+const showSimpleOrderId = ref(true);
+
+// 2. 鍒囨崲鏄剧ず鐘舵�佺殑鍑芥暟
+const toggleOrderDisplay = () => {
+  showSimpleOrderId.value = !showSimpleOrderId.value;
+};
+
 
 
 defineExpose({
@@ -209,7 +217,10 @@
               <tr>
                 <td style="font-size: 15px;text-align: left" colspan="4">浜у搧鍚嶇О:<span>{{item.DeliveryDetail.orderDetail.productName}}</span></td>
                 <td v-if="company.showDeliveryCreator" style="font-size: 15px;text-align: left" colspan="2">璁㈣揣鏃ユ湡:<span>{{item.DeliveryDetail.order.contractId}}</span></td>
-                <td style="font-size: 15px;text-align: left" colspan="3">璁㈠崟缂栧彿:<span>{{item.DeliveryDetail.orderDetail.orderId}}</span></td>
+                <td style="font-size: 15px;text-align: left" v-show="showSimpleOrderId"
+                    @dblclick="toggleOrderDisplay" colspan="3">璁㈠崟缂栧彿:<span>{{item.DeliveryDetail.orderDetail.orderId}}</span></td>
+                <td style="font-size: 15px;text-align: left" v-show="!showSimpleOrderId"
+                    @dblclick="toggleOrderDisplay" colspan="3">璁㈠崟缂栧彿:<span>{{item.DeliveryDetail.orderDetail.orderId}}({{item.DeliveryDetail.order.batch}})</span></td>
               </tr>
 
               <tr class="day-in" v-for="(items, index1) in item.DeliveryDetailList" :key="index1">
diff --git a/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet2.vue b/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet2.vue
index 9657ed7..69d7fb8 100644
--- a/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet2.vue
+++ b/north-glass-erp/northglass-erp/src/components/sd/delivery/PrintSheet2.vue
@@ -90,6 +90,12 @@
 const printSheet = () => {
 }
 
+const showSimpleOrderId = ref(true);
+
+// 2. 鍒囨崲鏄剧ず鐘舵�佺殑鍑芥暟
+const toggleOrderDisplay = () => {
+  showSimpleOrderId.value = !showSimpleOrderId.value;
+};
 
 
 
@@ -153,7 +159,10 @@
               <tr>
                 <td style="font-size: 15px;text-align: left" colspan="5">浜у搧鍚嶇О:<span>{{item.DeliveryDetail.orderDetail.productName}}</span></td>
                 <td v-if="company.showDeliveryCreator" style="font-size: 15px;text-align: left" colspan="2">璁㈣揣鏃ユ湡:<span>{{item.DeliveryDetail.order.contractId}}</span></td>
-                <td style="font-size: 15px;text-align: left" colspan="3">璁㈠崟缂栧彿:<span>{{item.DeliveryDetail.orderDetail.orderId}}</span></td>
+                <td style="font-size: 15px;text-align: left" v-show="showSimpleOrderId"
+                    @dblclick="toggleOrderDisplay" colspan="3">璁㈠崟缂栧彿:<span>{{item.DeliveryDetail.orderDetail.orderId}}</span></td>
+                <td style="font-size: 15px;text-align: left" v-show="!showSimpleOrderId"
+                    @dblclick="toggleOrderDisplay" colspan="3">璁㈠崟缂栧彿:<span>{{item.DeliveryDetail.orderDetail.orderId}}({{item.DeliveryDetail.order.batch}})</span></td>
               </tr>
 
               <tr class="day-in" v-for="(items, index1) in item.DeliveryDetailList" :key="index1">
diff --git a/north-glass-erp/northglass-erp/src/components/sd/order/ProcessAttribute.vue b/north-glass-erp/northglass-erp/src/components/sd/order/ProcessAttribute.vue
new file mode 100644
index 0000000..e7c57c9
--- /dev/null
+++ b/north-glass-erp/northglass-erp/src/components/sd/order/ProcessAttribute.vue
@@ -0,0 +1,211 @@
+<template>
+
+  <div style="width: 100%">
+    <template v-for="(itme, index) in dataCollection" :key="index">
+      <div style="width: 90%;height: 120px;margin: auto;;background-color: aliceblue;">
+      <div style="width: 200px;font-size: 18px;text-align: left;">{{itme.process_name}}</div>
+      <div style="display: flex;margin-top: 10px">
+        <template v-for="(itme1, index) in itme.detail" :key="index">
+          <div v-if="itme1.input_type=='select'"
+              style="width: 200px;display: flex;height: 30px;line-height: 30px;">
+            {{itme1.process_name}}锛�
+            <el-select
+                v-model="dataList[itme.process_type][itme1.process_type]"
+                placeholder=""
+                clearable
+                style="width: 120px"
+            >
+              <el-option
+                  v-for="item in edgingTypeList[itme1.process_type]"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+              />
+            </el-select>
+          </div>
+          <div v-else-if="itme1.input_type=='checkbox'"
+              style="width: 100px;height: 30px;line-height: 30px;">
+            {{itme1.process_name}}锛�<el-checkbox v-model="dataList.edgingProcess[itme1.process_type]"></el-checkbox>
+          </div>
+          <div v-else-if="itme1.input_type=='input'"
+              style="width: 200px;display: flex;height: 30px;line-height: 30px;">
+            {{itme1.process_name}}锛�<el-input style="width:100px" v-model.trim="dataList.edgingProcess[itme1.process_type]"></el-input>
+          </div>
+        </template>
+      </div>
+      </div>
+      <br>
+    </template>
+
+
+    <div style="margin-top: 10px">
+      <el-button @click="emitParent()" style="width: 80px;height: 30px"  type="primary" size="small">淇濆瓨</el-button>
+    </div>
+
+  </div>
+
+
+</template>
+
+<script lang="ts" setup>
+
+import { useI18n } from 'vue-i18n'
+import { ref, reactive, onMounted } from 'vue'
+import {ElMessage} from "element-plus";
+import request from "@/utils/request"
+
+const { t } = useI18n()
+
+
+let props = defineProps({
+  rowIndex:{},
+  edgingTypeList: null
+})
+
+let dataCollection=ref()
+const edgingTypeList = ref({
+
+})
+
+const initOrder = async () => {
+  try {
+    // 鍏抽敭锛歛wait 鐪熸绛夊緟鎺ュ彛鍝嶅簲锛屽搷搴斿畬鎴愬悗鍐嶅線涓嬫墽琛�
+    const res = await request.post("/order/processAttributeConfig");
+    if (res.code === "200") {
+      dataCollection.value = res.data.data || [];
+
+      // 閬嶅巻 dataCollection 鍒濆鍖� dataList 鍜� edgingTypeList
+      dataCollection.value.forEach(items => {
+        if (!items || !Array.isArray(items.detail) || items.detail.length === 0) {
+          return;
+        }
+
+        // 淇2锛歞ataList 鏄璞★紝鍒濆鍖栧伐鑹虹被鍨嬪搴旂殑瀛楁锛堣嫢闇�瑕佸祵濂楃粨鏋勫彲璋冩暣锛�
+        // 鑻ラ渶 dataList.value[items.process_type] 鏄璞★紙瀛樺偍璇ュ伐鑹虹被鍨嬬殑鎵�鏈夊睘鎬э級
+        console.log(dataList.value[items.process_type])
+        console.log(items.process_type)
+        if (!dataList.value[items.process_type]) {
+          dataList.value[items.process_type] = {}; // 鍒濆鍖栧璞★紝鑰岄潪鏁扮粍
+        }
+
+
+
+        // 閬嶅巻宸ヨ壓璇︽儏
+        items.detail.forEach(item1 => {
+          // 鍒濆鍖栬宸ヨ壓椤圭殑榛樿鍊硷紙鏍规嵁 input_type 璋冩暣锛岃繖閲屼繚鎸佺敤鎴峰師閫昏緫璁句负 null锛�
+          dataList.value[items.process_type][item1.process_type] = null;
+
+          // 澶勭悊 select 绫诲瀷锛屾瀯寤轰笅鎷夐�夐」
+          if (item1.input_type === 'select') {
+            const baseOptions = props.edgingTypeList[item1.process_type];
+            if (!Array.isArray(baseOptions) || baseOptions.length === 0) {
+              console.warn(`宸ヨ壓绫诲瀷 ${item1.process_type} 鏃犲熀纭�鏁版嵁锛岃烦杩嘸);
+              return;
+            }
+
+            // 鍒濆鍖� edgingTypeList 瀵瑰簲瀛楁涓烘暟缁�
+            if (!Array.isArray(edgingTypeList.value[item1.process_type])) {
+              edgingTypeList.value[item1.process_type] = [];
+            }
+
+            // 涓嬫媺閫夐」鍘婚噸骞舵坊鍔�
+            baseOptions.forEach(item => {
+              const newOption = { label: item.basicName, value: item.basicName };
+              const isAlreadyExist = edgingTypeList.value[item1.process_type].some(
+                  opt => opt.value === newOption.value
+              );
+              if (!isAlreadyExist) {
+                edgingTypeList.value[item1.process_type].push(newOption);
+              }
+            });
+          }
+        });
+      });
+
+
+    } else {
+      ElMessage.warning(t('basicData.msg.getDataFailed'));
+      dataCollection.value = [];
+    }
+  } catch (err) {
+    ElMessage.error(t('basicData.msg.ServerConnectionError'));
+    router.push("/login");
+    throw err; // 鎶涘嚭閿欒锛岃 onMounted 鐭ラ亾鎵ц澶辫触
+  }
+};
+
+onMounted(async () => {
+
+  await initOrder();
+
+
+  const { processAttribute } = props.rowIndex; // 瑙f瀯璧嬪�硷紝鏇寸畝娲�
+  if (!processAttribute || processAttribute === "") {
+    console.log('processAttribute 涓虹┖锛岃烦杩囪祴鍊�');
+    return;
+  }
+
+  // 瑙f瀽 processAttribute锛堝鐢ㄧ敤鎴峰師閫昏緫锛屼紭鍖栧彉閲忓悕鍜屼唬鐮侊級
+  let newProcessAttr;
+  if (processAttribute === null || processAttribute === undefined) {
+    newProcessAttr = {};
+  } else if (typeof processAttribute === 'object') {
+    newProcessAttr = processAttribute;
+  } else if (typeof processAttribute === 'string') {
+    try {
+      newProcessAttr = JSON.parse(processAttribute);
+    } catch (error) {
+      console.warn('processAttribute 鏄瓧绗︿覆浣嗛潪鍚堟硶 JSON锛屽凡浣跨敤榛樿鍊硷細', error.message);
+      newProcessAttr = {};
+    }
+  } else {
+    console.warn('processAttribute 绫诲瀷涓嶅悎娉曪紝宸蹭娇鐢ㄩ粯璁ゅ�硷細', typeof processAttribute);
+    newProcessAttr = {};
+  }
+
+  // 閬嶅巻瑙f瀽鍚庣殑鏁版嵁锛岀粰 dataList 璧嬪�硷紙閫傞厤 dataList 鐨勫璞$粨鏋勶級
+  Object.entries(newProcessAttr).forEach(([key, value]) => {
+    dataList.value[key] = {};
+    if (typeof value === "object" && value !== null) {
+      Object.entries(value).forEach(([innerKey, innerValue]) => {
+        if (dataList.value[key]) {
+          dataList.value[key][innerKey] = innerValue;
+        }
+      });
+    }
+  });
+  console.log(dataList.value)
+
+});
+
+let dataList=ref({})
+
+
+let emit = defineEmits([
+  'changePage'
+])
+const emitParent = () => {
+  if(dataList.value.edgingProcess.edgingType!=null){
+    emit('getEdgingProcess', dataList.value,dataList.value.edgingProcess.edgingType)
+  }else{
+    ElMessage.error(t('璇烽�夋嫨纾ㄨ竟绫诲瀷'))
+  }
+
+}
+
+</script>
+
+<style scoped>
+:deep(.el-select .el-input__wrapper) {
+  width: 100%;
+  box-sizing: border-box;
+}
+
+:deep(.el-dialog__body) {
+  padding: 20px;
+}
+
+:deep(.el-dialog__footer) {
+  padding: 10px 20px 20px;
+}
+</style>
\ No newline at end of file
diff --git a/north-glass-erp/northglass-erp/src/router/index.js b/north-glass-erp/northglass-erp/src/router/index.js
index ede174d..ee9bfc6 100644
--- a/north-glass-erp/northglass-erp/src/router/index.js
+++ b/north-glass-erp/northglass-erp/src/router/index.js
@@ -157,6 +157,11 @@
               component: () => import('../views/sd/basicData/SearchGlassType.vue')
             },
             {
+              path: 'searchProcessAttributeConfig',
+              name: 'searchProcessAttributeConfig',
+              component: () => import('../views/sd/basicData/SearchProcessAttributeConfig.vue')
+            },
+            {
               name: 'OrderBasicData',
               path: '',
               redirect:'/main/orderBasicData/searchBasicData'
diff --git a/north-glass-erp/northglass-erp/src/views/sd/basicData/BasicData.vue b/north-glass-erp/northglass-erp/src/views/sd/basicData/BasicData.vue
index 817184b..d226197 100644
--- a/north-glass-erp/northglass-erp/src/views/sd/basicData/BasicData.vue
+++ b/north-glass-erp/northglass-erp/src/views/sd/basicData/BasicData.vue
@@ -22,6 +22,7 @@
       <el-breadcrumb :separator-icon="ArrowRight">
         <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/orderBasicData/searchBasicData' }">{{ $t('orderBasicData.page.searchOrderBasicData') }}</el-breadcrumb-item>
         <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/orderBasicData/searchGlassType' }">{{ $t('orderBasicData.page.searchGlassType') }}</el-breadcrumb-item>
+        <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/orderBasicData/searchProcessAttributeConfig' }">{{ $t('宸ヨ壓灞炴�х被鍒�') }}</el-breadcrumb-item>
         <el-breadcrumb-item v-show="false" :to="{ path: '/main/order/orderReport' }">鎶ヨ〃</el-breadcrumb-item>
       </el-breadcrumb>
     </div>
diff --git a/north-glass-erp/northglass-erp/src/views/sd/basicData/SearchProcessAttributeConfig.vue b/north-glass-erp/northglass-erp/src/views/sd/basicData/SearchProcessAttributeConfig.vue
new file mode 100644
index 0000000..57dde0d
--- /dev/null
+++ b/north-glass-erp/northglass-erp/src/views/sd/basicData/SearchProcessAttributeConfig.vue
@@ -0,0 +1,252 @@
+<script setup>
+import {onMounted, reactive, ref} from "vue";
+import {VXETable} from "vxe-table";
+import {ElMessage} from "element-plus";
+import request from "@/utils/request"
+import CreateBasicData from "@/views/sd/basicData/CreateBasicData.vue"
+import {useRouter,useRoute} from "vue-router"
+import {useI18n} from "vue-i18n"
+import {changeFilterEvent, filterChanged} from "@/hook";
+const { t } = useI18n()
+
+let dialogTableVisible = ref(false)
+const router = useRouter()
+const xGrid = ref()
+const gridOptions = reactive({
+  border:  "full",//琛ㄦ牸鍔犺竟妗�
+  keepSource: true,//淇濇寔婧愭暟鎹�
+  align: 'center',//鏂囧瓧灞呬腑
+  stripe:true,//鏂戦┈绾�
+  rowConfig: {isCurrent: true, isHover: true,height: 30},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
+  id: 'OrderList',
+  printConfig: {},
+  importConfig: {},
+  exportConfig: {},
+  scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔�
+  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', title: t('basicData.number'), width: 80 ,fixed:"left",},
+    {field:'level',title: t('orderBasicData.level')},
+    {field:'processType',title: t('鍒悕'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {field:'processName',title: t('orderBasicData.name'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {field:'inputType',title: t('绫诲瀷')},
+    {field:'createTime',title: t('basicData.creationTime')}
+  ],
+
+  //琛ㄥご鎸夐挳
+  toolbarConfig: {
+    buttons: [
+      {'code': 'add', 'name': t('basicData.insert'),status: 'primary'},
+    ],
+
+    // import: false,
+    // export: true,
+    // print: true,
+    zoom: true,
+    custom: true
+  },
+})
+const rowIndex = ref(null)
+const glassType = reactive([
+  {
+    value:1,
+    label:t('orderBasicData.firstLevel')
+  },
+  {
+    value: 2,
+    label: t('orderBasicData.towLevel'),
+    children: []
+  }
+])
+const submit = ref({
+  glassLevel:[null,null],
+  inputType:null,
+  processName:null,
+  processType:null,
+  type:null,
+  id:null
+})
+
+onMounted(()=>{
+  request.get(`/basicGlassType/findAllConfig`).then(res => {
+    xGrid.value.reloadData(res.data)
+    console.log(res.data)
+  })
+
+  request.get(`/basicGlassType/getOneLevelListMapConfig`).then(res => {
+    glassType[1].children = res.data
+  })
+})
+
+const gridEvents = {
+  toolbarButtonClick ({ code }) {
+    const $grid = xGrid.value
+    if ($grid) {
+      switch (code) {
+        case 'add': {
+          dialogTableVisible.value = true
+          break
+        }
+      }
+    }
+  }
+}
+
+const getTableRow =  (row,type) => {
+  switch (type) {
+    case 'edit': {
+      rowIndex.value = row
+      submit.value.glassLevel = row.level===1?[parseInt(row.level)]:[parseInt(row.level),row.belong]
+      submit.value.processType = row.processType
+      submit.value.processName = row.processName
+      submit.value.inputType = row.inputType
+      submit.value.id = row.id
+      dialogTableVisible.value = true
+      break
+    }
+    case 'delete': {
+      request.get(`/basicGlassType/deleteProcessAttributeConfig/${row.id}`).then((res) => {
+        if(res.code==='200' && res.data===true){
+          ElMessage.success(t('searchOrder.msgDeleteSuccess'))
+          router.push({
+            path:'/main/orderBasicData/searchProcessAttributeConfig',
+            query:{random:Math.random()
+            }
+          })
+        }else{
+          ElMessage.warning(t('searchOrder.msgDeleteFail'))
+        }
+      })
+      break
+    }
+
+  }
+}
+
+
+const saveBasicData =  (type) =>{
+  if(submit.value.glassLevel[0]===null){
+    ElMessage.warning("璇烽�夋嫨绫诲埆")
+    return
+  }
+  if(submit.value.processName===null||submit.value.processName===""){
+    ElMessage.warning("璇疯緭鍏ュ悕绉�")
+    return
+  }
+  if(submit.value.processType===null||submit.value.processType===""){
+    ElMessage.warning("璇疯緭鍏ュ埆鍚�")
+    return
+  }
+  submit.value.type = type
+  request.post(`/basicGlassType/addConfig`, submit.value).then(res => {
+    if (res.code==='200') {
+      ElMessage.success(t('basicData.msg.saveSuccess'))
+      router.push({
+        path:'/main/orderBasicData/searchProcessAttributeConfig',
+        query:{random:Math.random()
+        }
+      })
+    }
+  })
+}
+
+
+</script>
+
+<template>
+  <div  style="width: 100%;height: 100%">
+    <div class="main-table">
+    <vxe-grid
+        class="mytable-scrollbar"
+        height="100%"
+        ref="xGrid"
+        v-bind="gridOptions"
+        v-on="gridEvents"
+    >
+      <template #button_slot="{ row }">
+        <el-button @click="getTableRow(row,'edit')" 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>
+    <el-dialog
+        v-model="dialogTableVisible"
+        destroy-on-close
+        style="width: 20%;height:50% ">
+      <el-row>
+        <el-cascader
+            v-model="submit.glassLevel"
+            :options="glassType"
+            clearable
+            :placeholder="$t('processCard.pleaseSelect')"
+            :disabled="rowIndex"
+        />
+      </el-row>
+      <el-row>
+          鍒悕锛�<el-input style="width: 250px;" v-model="submit.processType"/>
+      </el-row>
+      <el-row>
+          鍚嶇О锛�<el-input style="width: 250px;" v-model="submit.processName"/>
+      </el-row>
+      <el-row>
+          绫诲瀷锛�<el-input style="width: 250px;" v-model="submit.inputType"/>
+      </el-row>
+      <el-row>
+        <el-button v-if="!rowIndex" @click="saveBasicData('add')"   type="primary">{{ $t('basicData.insert') }}</el-button>
+        <el-button v-else @click="saveBasicData('update')" type="primary">{{ $t('basicData.update') }}</el-button>
+      </el-row>
+    </el-dialog>
+
+
+  </div>
+
+</template>
+
+<style scoped>
+.el-row{
+  margin-top: 10px;
+}
+.head{
+  width: 100%;
+  height: 35px;
+}
+
+.main-table{
+  width: 100%;
+  height: calc(100% - 0px);
+}
+</style>
\ No newline at end of file
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 c003253..0ddf09a 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
@@ -21,6 +21,7 @@
 import {multiply,multiplyAuto,divideAuto} from '@/utils/decimal'
 import OrderNumberReportTransfer from "@/components/sd/order/OrderNumberReportTransfer.vue"
 import UploadPicture from "@/components/sd/order/UploadPicture.vue"
+import ProcessAttribute from "@/components/sd/order/ProcessAttribute.vue"
 const { t } = useI18n()
 
 let dialogTableVisible = ref(false)
@@ -32,6 +33,7 @@
 let uploadPictureVisible = ref(false)
 let alienEditorVisible = ref(false)
 let fileUploadVisible = ref(false)
+let processAttributeVisible = ref(false)
 const transferData = ref({
   oldOrderId:null,
   newOrderNumber:null,
@@ -50,7 +52,7 @@
 const shapeList = ref([
     {label:t('order.universalShape'),value:'1'}, {label:t('order.alien'),value:'2'}
 ])
-const edgingTypeList = ref([])
+
 const newOrderId = ref([])
 
 const orderTypeState = ref(0)
@@ -188,8 +190,14 @@
       filters:[{ data: '' }],
       slots: { filter: 'num1_filter',edit:'shape_edit',default:'default_shape' }, sortable: true,filterMethod:filterChanged},
     {field: 'bendRadius',width:160,  title: t('order.bendRadius'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
-    {field: 'edgingType',width:160,  title: t('order.edgingType'),editRender: { name: 'input'},filters:[{ data: '' }],
-      slots: { filter: 'num1_filter',edit:'edgingType_edit' }, sortable: true,filterMethod:filterChanged},
+    {field: 'edgingType',width:160,  title: t('order.edgingType'),filters:[{ data: '' }],
+      slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
+    {
+      field: 'processAttribute',
+      width: 160,
+      title: t('宸ヨ壓灞炴��'),
+      filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged
+    },
     {field: 'processingNote',width:200,  title: t('order.processingNote'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'fileName',width:200,  title: t('order.drawingNo'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
     {field: 'remarks',width:140,  title: t('basicData.remarks'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
@@ -581,6 +589,24 @@
                   item["productName"] = val1
                 }
               })
+            }else if(result.cell=='processAttribute'){
+              const val = dataList[result.start][result.cell]
+              const val1 = dataList[result.start]["edgingType"]
+              dataList.forEach((item,index) =>{
+                if(index>=result.start && index<=result.end){
+                  item[result.cell] = val
+                  item["edgingType"] = val1
+                }
+              })
+            }else if(result.cell=='edgingType'){
+              const val = dataList[result.start][result.cell]
+              const val1 = dataList[result.start]["processAttribute"]
+              dataList.forEach((item,index) =>{
+                if(index>=result.start && index<=result.end){
+                  item[result.cell] = val
+                  item["processAttribute"] = val1
+                }
+              })
             }else{
 
               const val = getNestedProperty(dataList[result.start],result.cell)
@@ -619,6 +645,24 @@
                   item["productName"] = val1
                 }
               })
+            }else if(result.cell=='processAttribute'){
+              const val = dataList[result.start][result.cell]
+              const val1 = dataList[result.start]["edgingType"]
+              dataList.forEach((item,index) =>{
+                if(index>=result.start ){
+                  item[result.cell] = val
+                  item["edgingType"] = val1
+                }
+              })
+            }else if(result.cell=='edgingType'){
+              const val = dataList[result.start][result.cell]
+              const val1 = dataList[result.start]["processAttribute"]
+              dataList.forEach((item,index) =>{
+                if(index>=result.start ){
+                  item[result.cell] = val
+                  item["processAttribute"] = val1
+                }
+              })
             }else{
               const val = getNestedProperty(dataList[result.start],result.cell)
               dataList.forEach((item,index) =>{
@@ -639,11 +683,28 @@
           let result = toolbarButtonClickEvent()
           if(result){
             const dataList = xGrid.value.getTableData().visibleData
-            dataList.forEach((item,index) =>{
-              if(index>=result.start && index<=result.end){
-                item[result.cell] = ''
-              }
-            })
+            if(result.cell=='processAttribute'){
+              dataList.forEach((item,index) =>{
+                if(index>=result.start && index<=result.end){
+                  item[result.cell] = ''
+                  item['edgingType'] = ''
+                }
+              })
+            }else if(result.cell=='edgingType'){
+              dataList.forEach((item,index) =>{
+                if(index>=result.start && index<=result.end){
+                  item[result.cell] = ''
+                  item['processAttribute'] = ''
+                }
+              })
+            }else{
+              dataList.forEach((item,index) =>{
+                if(index>=result.start && index<=result.end){
+                  item[result.cell] = ''
+                }
+              })
+            }
+
           }
           computedMoney(result.cell)
           gridOptions.menuConfig.body.options[0][5].disabled=false
@@ -841,9 +902,13 @@
   },
   cellDblclick (params) {//琛ㄦ牸鍐呭鍙屽嚮鎵撳紑浜у搧鐣岄潰
     const { row,column } = params
-    if(column.field==='productName' || column.field==='productId'){
+    if (column.field === 'processAttribute'||column.field === 'edgingType') {
+      rowIndex = row
+      processAttributeVisible.value = true
+    } else if (column.field === 'productName' || column.field === 'productId') {
+      // 淇濈暀鍘熶骇鍝侀�夋嫨閫昏緫
       productVisible.value = true
-      rowIndex=row
+      rowIndex = row
     }
 
   },
@@ -1092,10 +1157,7 @@
 
         })
       }
-      titleSelectJson.value.edgingType.forEach(item=>{
-        let type= {label:item.basicName,value:item.basicName}
-        edgingTypeList.value.push(type)
-      })
+
       //杩涘叆椤甸潰涓嬫媺妗嗚缃粯璁ゅ��
       titleUploadData.value.orderType = titleSelectJson.value.orderType[0].basicName
       titleUploadData.value.orderClassify = titleSelectJson.value.orderClassify[0].basicName
@@ -1733,6 +1795,15 @@
   });
 };
 
+
+
+
+const getEdgingProcess = (value,edgingType) => {
+  rowIndex.processAttribute=JSON.stringify(value)
+  rowIndex.edgingType=edgingType
+  processAttributeVisible.value = false
+}
+
 </script>
 
 <template>
@@ -1915,9 +1986,7 @@
         <template #shape_edit="{ row }">
           <vxe-select v-model="row.shape" transfer :options="shapeList"  placeholder=" "/>
         </template>
-        <template #edgingType_edit="{ row }">
-          <vxe-select v-model="row.edgingType" transfer :options="edgingTypeList"  placeholder=" "/>
-        </template>
+
 
 
       </vxe-grid>
@@ -2041,6 +2110,19 @@
     </el-dialog>
 
 
+    <el-dialog
+        v-model="processAttributeVisible"
+        :close-on-click-modal="false"
+        :close-on-press-escape="false"
+        destroy-on-close
+        style="width: 1114px;height:650px ">
+      <process-attribute :rowIndex="rowIndex"
+          :edging-type-list="titleSelectJson"
+          @getEdgingProcess="getEdgingProcess"
+      />
+    </el-dialog>
+
+
   </div>
 </template>
 
diff --git a/north-glass-erp/src/main/java/com/example/erp/controller/sd/BasicGlassTypeController.java b/north-glass-erp/src/main/java/com/example/erp/controller/sd/BasicGlassTypeController.java
index db640b5..577b4b0 100644
--- a/north-glass-erp/src/main/java/com/example/erp/controller/sd/BasicGlassTypeController.java
+++ b/north-glass-erp/src/main/java/com/example/erp/controller/sd/BasicGlassTypeController.java
@@ -47,4 +47,25 @@
         return Result.success(basicGlassTypeServise.add(map));
     }
 
+
+    @GetMapping("/findAllConfig")
+    public Result findAllConfig(){
+        return Result.success(basicGlassTypeServise.findAllConfig());
+    }
+
+    @GetMapping("/getOneLevelListMapConfig")
+    public Result getOneLevelListMapConfig(){
+        return Result.success(basicGlassTypeServise.getOneLevelListMapConfig());
+    }
+
+    @PostMapping("/addConfig")
+    public Result addConfig(@RequestBody Map<String,Object> map){
+        return Result.success(basicGlassTypeServise.addConfig(map));
+    }
+
+    @GetMapping("/deleteProcessAttributeConfig/{id}")
+    public Result deleteProcessAttributeConfig(@PathVariable Integer id){
+        return Result.success(basicGlassTypeServise.deleteProcessAttributeConfig(id));
+    }
+
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/controller/sd/OrderController.java b/north-glass-erp/src/main/java/com/example/erp/controller/sd/OrderController.java
index 275d874..145d71e 100644
--- a/north-glass-erp/src/main/java/com/example/erp/controller/sd/OrderController.java
+++ b/north-glass-erp/src/main/java/com/example/erp/controller/sd/OrderController.java
@@ -283,4 +283,12 @@
     }
 
 
+    @ApiOperation("鏌ヨ宸ヨ壓灞炴�ч厤缃�")
+    @PostMapping("/processAttributeConfig")
+    public Result processAttributeConfig()  {
+        return  Result.success(orderService.processAttributeConfig());
+    }
+
+
+
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderDetail.java b/north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderDetail.java
index 80c15b1..f9999cb 100644
--- a/north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderDetail.java
+++ b/north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderDetail.java
@@ -36,6 +36,7 @@
     private String processingNote;
     private String remarks;
     private Double bendRadius;
+    private String processAttribute;
     private String edgingType;
     private Double archRise;
     private Double weight;
diff --git a/north-glass-erp/src/main/java/com/example/erp/entity/sd/ProcessAttributeConfig.java b/north-glass-erp/src/main/java/com/example/erp/entity/sd/ProcessAttributeConfig.java
new file mode 100644
index 0000000..73d267a
--- /dev/null
+++ b/north-glass-erp/src/main/java/com/example/erp/entity/sd/ProcessAttributeConfig.java
@@ -0,0 +1,18 @@
+package com.example.erp.entity.sd;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+@Data
+public class ProcessAttributeConfig {
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+    private Integer level;
+    private String processType;
+    private String processName;
+    private String inputType;
+    private String belong;
+    private String createTime;
+
+}
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/sd/BasicGlassTypeMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/sd/BasicGlassTypeMapper.java
index 661aaf5..7451e03 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/sd/BasicGlassTypeMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/sd/BasicGlassTypeMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.example.erp.entity.sd.BasicGlassType;
+import com.example.erp.entity.sd.ProcessAttributeConfig;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -19,4 +20,18 @@
 
 
     Boolean updateGlassTypeName(@Param("basicGlassType") BasicGlassType basicGlassType);
+
+    List<ProcessAttributeConfig> getFindAllConfig();
+
+    List<ProcessAttributeConfig> getOneLevelListMapConfig();
+
+    ProcessAttributeConfig selectMaxTypeConfig(Integer type);
+
+    ProcessAttributeConfig selectMaxTowLevelTypeConfig(String type);
+
+    Boolean insertProcessAttributeConfig(@Param("processAttributeConfig") ProcessAttributeConfig processAttributeConfig);
+
+    Boolean updateProcessAttributeConfig(@Param("processAttributeConfig") ProcessAttributeConfig processAttributeConfig);
+
+    Boolean deleteProcessAttributeConfig(Integer id);
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderMapper.java
index 3f03b45..4e19bf2 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderMapper.java
@@ -68,4 +68,7 @@
     Map<String,String> selectOrderFile( String orderId,Integer orderNumber);
 
     List<Map<String,String>> selectOrderFileList( String orderId);
+
+    List<Map<String,Object>> selectProcessAttributeConfigOne();
+    List<Map<String,Object>> selectProcessAttributeConfigTow(String belong);
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java b/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java
index 76a1175..9049abc 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java
@@ -972,14 +972,14 @@
         }
         String inputVal= (String) dates.get("inputVal");
         String project= (String) dates.get("project");
-        String terminationVals= dates.get("terminationVals").toString();
-        if (inputVal==null) {
+        String terminationVals= (String) dates.get("terminationVals");
+        if ("null".equals(inputVal)) {
             inputVal = "";
         }
-        if (project==null) {
+        if ("null".equals(project)) {
             project = "";
         }
-        if (terminationVals==null) {
+        if ("null".equals(terminationVals)) {
             terminationVals = "";
         }
         List<WorkInProgressDTO> dataList1  =reportMapper.exportWorkInProgressMp(process,inputVal,project,terminationVals);
@@ -1243,14 +1243,14 @@
         }
         String inputVal= (String) dates.get("inputVal");
         String project= (String) dates.get("project");
-        String terminationVals= dates.get("terminationVals").toString();
-        if (inputVal==null) {
+        String terminationVals= (String) dates.get("terminationVals");
+        if ("null".equals(inputVal)) {
             inputVal = "";
         }
-        if (project==null) {
+        if ("null".equals(project)) {
             project = "";
         }
-        if (terminationVals==null) {
+        if ("null".equals(terminationVals)) {
             terminationVals = "";
         }
 
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/sd/BasicGlassTypeService.java b/north-glass-erp/src/main/java/com/example/erp/service/sd/BasicGlassTypeService.java
index 307bc6a..08189cb 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/sd/BasicGlassTypeService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/sd/BasicGlassTypeService.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSON;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.example.erp.entity.sd.BasicGlassType;
+import com.example.erp.entity.sd.ProcessAttributeConfig;
 import com.example.erp.mapper.sd.BasicGlassTypeMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -105,4 +106,59 @@
         }
 
     }
+
+    public List<ProcessAttributeConfig> findAllConfig() {
+        return basicGlassTypeMapper.getFindAllConfig();
+    }
+
+    public List<Map<String,Object>> getOneLevelListMapConfig() {
+        List<ProcessAttributeConfig> processAttributeConfigList = basicGlassTypeMapper.getOneLevelListMapConfig();
+        List<Map<String,Object>> list = new ArrayList<>();
+        for (ProcessAttributeConfig processAttributeConfig : processAttributeConfigList) {
+            Map<String,Object> map = new HashMap<>();
+            map.put("value", processAttributeConfig.getInputType());
+            map.put("label", processAttributeConfig.getProcessName());
+            list.add(map);
+        }
+        return list;
+    }
+
+    public Boolean addConfig(Map<String, Object> map) {
+        List<Object> list = (List<Object>) map.get("glassLevel");
+        if(list.get(0)==null
+                || map.get("processType") == null
+                || map.get("processType").equals("")){
+            return false;
+        }
+        ProcessAttributeConfig processAttributeConfigS = new ProcessAttributeConfig();
+        if(map.get("type").equals("add")){
+            if(list.size()==1){
+                ProcessAttributeConfig processAttributeConfig =  basicGlassTypeMapper.selectMaxTypeConfig((Integer) list.get(0));
+                int maxId = Integer.parseInt(processAttributeConfig.getInputType());
+                String newTypeId = String.format("%02d", maxId+1);
+                processAttributeConfigS.setLevel((Integer) list.get(0));
+                processAttributeConfigS.setInputType(newTypeId);
+                processAttributeConfigS.setProcessType((String) map.get("processType"));
+                processAttributeConfigS.setProcessName((String) map.get("processName"));
+            }else if(list.size()==2) {
+                processAttributeConfigS.setLevel((Integer) list.get(0));
+                processAttributeConfigS.setInputType((String) map.get("inputType"));
+                processAttributeConfigS.setProcessType((String) map.get("processType"));
+                processAttributeConfigS.setProcessName((String) map.get("processName"));
+                processAttributeConfigS.setBelong((String) list.get(1));
+            }
+            return basicGlassTypeMapper.insertProcessAttributeConfig(processAttributeConfigS);
+        }else{
+            processAttributeConfigS.setId((Integer) map.get("id"));
+            processAttributeConfigS.setInputType((String) map.get("inputType"));
+            processAttributeConfigS.setProcessType((String) map.get("processType"));
+            processAttributeConfigS.setProcessName((String) map.get("processName"));
+            return basicGlassTypeMapper.updateProcessAttributeConfig(processAttributeConfigS);
+        }
+
+    }
+
+    public Boolean deleteProcessAttributeConfig(Integer id) {
+        return basicGlassTypeMapper.deleteProcessAttributeConfig(id);
+    }
 }
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 7a52023..1ce87df 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
@@ -1069,4 +1069,16 @@
 
         return map;
     }
+
+
+    //宸ヨ壓灞炴�ч厤缃煡璇�
+    public Map<String,Object> processAttributeConfig() {
+        Map<String,Object> map = new HashMap<>();
+        List<Map<String,Object>> processList = orderMapper.selectProcessAttributeConfigOne();
+        for (Map<String,Object> objectMap:processList){
+            objectMap.put("detail",orderMapper.selectProcessAttributeConfigTow(objectMap.get("input_type").toString()));
+        }
+        map.put("data",processList);
+        return map;
+    }
 }
diff --git a/north-glass-erp/src/main/resources/mapper/sd/BasicGlassTypeMapper.xml b/north-glass-erp/src/main/resources/mapper/sd/BasicGlassTypeMapper.xml
index 4f8836a..fe2c744 100644
--- a/north-glass-erp/src/main/resources/mapper/sd/BasicGlassTypeMapper.xml
+++ b/north-glass-erp/src/main/resources/mapper/sd/BasicGlassTypeMapper.xml
@@ -48,4 +48,65 @@
         where a.id = #{basicGlassType.id}
     </update>
 
+
+    <select id="getFindAllConfig">
+        select
+            *
+        from
+            process_attribute_config
+    </select>
+
+    <select id="getOneLevelListMapConfig">
+        select
+            *
+        from
+            process_attribute_config
+        where level=1
+    </select>
+
+    <select id="selectMaxTypeConfig">
+        select
+            *
+        from
+            process_attribute_config  as a
+        where a.level=1
+        ORDER BY  a.id  desc limit 1;
+
+    </select>
+
+    <select id="selectMaxTowLevelTypeConfig">
+        select
+            *
+        from
+            process_attribute_config  as a
+        where
+            a.level=2
+          and a.belong = #{type}
+
+        ORDER BY  a.id  desc limit 1;
+    </select>
+
+    <update id="updateProcessAttributeConfig" parameterType="com.example.erp.entity.sd.ProcessAttributeConfig" >
+        update
+            process_attribute_config as a
+        set a.process_type = #{processAttributeConfig.processType},
+            a.process_name = #{processAttributeConfig.processName},
+            a.input_type = #{processAttributeConfig.inputType},
+        where a.id = #{processAttributeConfig.id}
+    </update>
+
+    <insert id="insertProcessAttributeConfig"  useGeneratedKeys="true" >
+        insert into sd.process_attribute_config (level,process_type,process_name,input_type,belong)
+        values (
+                   #{processAttributeConfig.level}, #{processAttributeConfig.processType}, #{processAttributeConfig.processName},
+                   #{processAttributeConfig.inputType}, #{processAttributeConfig.belong}
+               )
+    </insert>
+
+    <delete id="deleteProcessAttributeConfig"  >
+        delete from
+            process_attribute_config as a
+            where a.id = #{id}
+    </delete>
+
 </mapper>
\ No newline at end of file
diff --git a/north-glass-erp/src/main/resources/mapper/sd/OrderDetailMapper.xml b/north-glass-erp/src/main/resources/mapper/sd/OrderDetailMapper.xml
index 9d88fdc..6dee99b 100644
--- a/north-glass-erp/src/main/resources/mapper/sd/OrderDetailMapper.xml
+++ b/north-glass-erp/src/main/resources/mapper/sd/OrderDetailMapper.xml
@@ -29,7 +29,8 @@
                             perimeter,
                             monolithic_perimeter,
                             other_columns,
-                            file_name
+                            file_name,
+                            process_attribute
                           )
         values
         <foreach collection ="orderDetails" item="orderDetail" separator =",">
@@ -57,7 +58,8 @@
             #{orderDetail.perimeter},
             #{orderDetail.monolithicPerimeter},
             #{orderDetail.otherColumns},
-            #{orderDetail.fileName}
+            #{orderDetail.fileName},
+            #{orderDetail.processAttribute}
              )
         </foreach>
     </insert>
diff --git a/north-glass-erp/src/main/resources/mapper/sd/OrderMapper.xml b/north-glass-erp/src/main/resources/mapper/sd/OrderMapper.xml
index 675c246..e00170b 100644
--- a/north-glass-erp/src/main/resources/mapper/sd/OrderMapper.xml
+++ b/north-glass-erp/src/main/resources/mapper/sd/OrderMapper.xml
@@ -95,7 +95,8 @@
             o.area = od.c,
             o.perimeter= od.aa,
             o.other_money = ifnull(c.money,0),
-            o.other_remarks = (select group_concat( distinct edging_type) from order_detail where order_id = #{orderId} and  edging_type is not null)
+            o.other_remarks = (select GROUP_CONCAT(DISTINCT edging_type)
+        from order_detail where order_id = #{orderId} and  edging_type is not null)
         where
             o.order_id = #{orderId}
 
@@ -436,4 +437,17 @@
     <update id="updateOrderFile">
         update sd.order_file set file_name=#{fileName},file_data=#{dxfData},file_json=#{fileJson},create_time=now() where order_id=#{orderId} and order_number=#{orderNumber}
     </update>
+
+
+    <select id="selectProcessAttributeConfigOne">
+        select  * from sd.process_attribute_config
+        where level=1
+
+    </select>
+
+    <select id="selectProcessAttributeConfigTow">
+        select  * from sd.process_attribute_config
+        where level=2 and belong=#{belong}
+
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0