zck 9 mesiacov pred
rodič
commit
6ada39f561

+ 548 - 100
src/view/managements/anodizedaluminum.vue

@@ -7,7 +7,8 @@
             <el-form ref="elSearchFormRef"   class="demo-form-inline" :rules="searchRule" >
               <el-form-item>
                 <el-button type="primary" class="bt" icon="copy-document" @click="onCountByGdbh">切换显示方式</el-button>
-                <el-input v-model="searchInfo" placeholder="搜索工单编号" clearable style="width: 200px;margin: 5px"></el-input>
+                <el-input v-model="searchInfo" placeholder="搜索工单编号" clearable @keyup.enter="onSearch()" style="width: 200px;margin: 5px"></el-input>
+                <el-button type="primary" class="bt" @click="onSearch" >搜索</el-button>
                 <el-button type="primary" class="bt" @click="onADD" >新增</el-button>
                 <el-button type="primary" class="bt" :disabled="!selectedIds"  @click="onDelete" >删除</el-button>
                 <el-button type="primary" class="bt" icon="download" @click="dhlToExcel" >导出到Excel</el-button>
@@ -44,6 +45,7 @@
                         highlight-current-row="true" @row-dblclick="updateCompanyFunc"
                         @row-click="tableRowClick" :show-overflow-tooltip="true"
                         @selection-change="handleSelectionChange">
+                <el-table-column type="selection" width="30" />
                <el-table-column  sortable align="center" label="工单编号" prop="st_gdbh"  width="120" />
                <el-table-column  sortable align="center" label="领用日期" prop="st_rq"  width="130" />
                <el-table-column   align="center" label="卷宽" prop="卷宽"  width="60" />
@@ -74,19 +76,19 @@
 
             <!-- 设备折旧参数维护弹出框 -->
             <el-dialog
-            v-model="dialogMachineVisible"
-            :before-close="sbcloseDialog"
+            v-model="dialogAlumiteVisible"
+            :before-close="dhlcloseDialog"
             :title="type === 'create' ? '电化铝领用记录新增' : '电化铝领用记录修改'"
             destroy-on-close
             style="width: 60%; margin: 5vh auto;"
             >
-            <el-form :model="machineForm" label-width="120px">
+            <el-form :model="Alumite" label-width="120px">
                 <!-- 第一行:部门 -->
                 <el-row :gutter="20">
                   <el-col :span="8">
                         <el-form-item label="发生日期">
                             <el-date-picker
-                            v-model="machineForm.发生日期"
+                            v-model="Alumite.发生日期"
                             type="date"
                             placeholder="选择发生日期"
                             style="width: 100%"
@@ -95,7 +97,7 @@
                     </el-col>
                 <el-col :span="8">
                     <el-form-item label="交易类型">
-                    <el-input v-model="machineForm.交易类型"  placeholder="请输入交易类型" />
+                    <el-input v-model="Alumite.交易类型"  placeholder="请输入交易类型" />
                     </el-form-item>
                 </el-col>
                 </el-row>
@@ -104,22 +106,22 @@
                 <el-row :gutter="20">
                 <el-col :span="8">
                     <el-form-item label="工单编号">
-                    <el-input v-model="machineForm.工单编号" @keyup.enter="getGD()" placeholder="请输入工单编号" />
+                    <el-input v-model="Alumite.工单编号" @keyup.enter="getGD()" placeholder="请输入工单编号" />
                     </el-form-item>
                 </el-col>
                 <el-col :span="12">
-                    <el-input v-model="machineForm.工单名称"  readonly />
+                    <el-input v-model="Alumite.工单名称"  readonly />
                 </el-col>
                 </el-row>
 
                 <el-row :gutter="20">
                 <el-col :span="8">
                     <el-form-item label="印件号">
-                    <el-input v-model="machineForm.印件号" readonly  />
+                    <el-input v-model="Alumite.印件号" readonly  />
                     </el-form-item>
                 </el-col>
                 <el-col :span="12">
-                    <el-input v-model="machineForm.印件名称" readonly  />
+                    <el-input v-model="Alumite.印件名称" readonly  />
                 </el-col>
                 </el-row>
 
@@ -127,12 +129,12 @@
                 <el-row :gutter="20">
                     <el-col :span="18">
                     <el-form-item label="物料编号">
-                    <el-input v-model="machineForm.物料编号" placeholder="请输入物料编号" />
+                    <el-input v-model="Alumite.物料编号" placeholder="请输入物料编号" />
                     </el-form-item>
                 </el-col>
                 <el-col :span="18">
                     <el-form-item label="物料名称">
-                    <el-input v-model="machineForm.物料名称" placeholder="请输入物料名称" />
+                    <el-input v-model="Alumite.物料名称" placeholder="请输入物料名称" />
                     </el-form-item>
                 </el-col>
                 </el-row>
@@ -141,12 +143,12 @@
                 <el-row :gutter="20">
                   <el-col :span="8">
                     <el-form-item label="采购单号">
-                    <el-input v-model="machineForm.采购单号" placeholder="请输入采购单号" />
+                    <el-input v-model="Alumite.采购单号" placeholder="请输入采购单号" />
                     </el-form-item>
                 </el-col>
                 <el-col :span="8">
                     <el-form-item label="供方批次">
-                    <el-input v-model="machineForm.供方批次" placeholder="请输入供方批次" />
+                    <el-input v-model="Alumite.供方批次" placeholder="请输入供方批次" />
                     </el-form-item>
                 </el-col>
                 </el-row>
@@ -156,12 +158,12 @@
 
                 <el-col :span="8">
                     <el-form-item label="整卷长度">
-                    <el-input v-model="machineForm.整卷长度" placeholder="请输入整卷长度" />
+                    <el-input v-model="Alumite.整卷长度" placeholder="请输入整卷长度" />
                     </el-form-item>
                 </el-col>
                 <el-col :span="8">
                     <el-form-item label="整卷幅宽">
-                    <el-input v-model="machineForm.整卷幅宽" placeholder="请输入整卷幅宽" />
+                    <el-input v-model="Alumite.整卷幅宽" placeholder="请输入整卷幅宽" />
                     </el-form-item>
                 </el-col>
                 </el-row>
@@ -170,17 +172,17 @@
                 <el-row :gutter="20">
                     <el-col :span="8">
                     <el-form-item label="领用宽度">
-                    <el-input v-model="machineForm.领用宽度" placeholder="请输入领用宽度" />
+                    <el-input v-model="Alumite.领用宽度" placeholder="请输入领用宽度" />
                     </el-form-item>
                 </el-col>
                 <el-col :span="8">
                     <el-form-item label="领用数量">
-                    <el-input v-model="machineForm.领用数量" placeholder="请输入领用数量" />
+                    <el-input v-model="Alumite.领用数量" placeholder="请输入领用数量" />
                     </el-form-item>
                 </el-col>
                 <el-col :span="8">
                     <el-form-item label="单位">
-                    <el-input v-model="machineForm.单位" placeholder="请输入单位" />
+                    <el-input v-model="Alumite.单位" placeholder="请输入单位" />
                     </el-form-item>
                 </el-col>
                 </el-row>
@@ -189,7 +191,7 @@
                 <el-row :gutter="20">
                     <el-col :span="8">
                     <el-form-item label="机台编号">
-                    <el-input v-model="machineForm.机台编号" placeholder="请输入机台编号" />
+                    <el-input v-model="Alumite.机台编号" @keyup.enter="getMC()" placeholder="请输入机台编号" />
                     </el-form-item>
                 </el-col>
                 </el-row>
@@ -199,7 +201,7 @@
                 <el-row :gutter="20">
                     <el-col :span="8">
                     <el-form-item label="其他备注">
-                    <el-input v-model="machineForm.其他备注" placeholder="请输入其他备注" />
+                    <el-input v-model="Alumite.其他备注" placeholder="请输入其他备注" />
                     </el-form-item>
                 </el-col>
 
@@ -212,8 +214,8 @@
             <!-- 弹窗底部按钮 -->
             <template #footer>
                 <div class="dialog-footer" style="width: 100%;">
-                <el-button @click="sbcloseDialog" style="width: 100px; height: 40px;">关 闭</el-button>
-                <el-button type="primary" @click="sbenterDialog" style="width: 100px; height: 40px;">确 定</el-button>
+                <el-button @click="dhlcloseDialog" style="width: 100px; height: 40px;">关 闭</el-button>
+                <el-button type="primary" @click="dhlenterDialog" style="width: 100px; height: 40px;">确 定</el-button>
                 </div>
             </template>
             </el-dialog>
@@ -256,29 +258,71 @@
 
           <!-- 工单选择弹窗 -->
           <el-dialog
-    v-model="orderSelectDialogVisible"
-    title="请选择工单"
-    width="60%"
-    @keyup.enter="confirmOrderSelection"
-    @keydown.up="handleKeyUp"
-    @keydown.down="handleKeyDown"
-  >
+  v-model="orderSelectDialogVisible"
+  title="请选择工单"
+  width="60%"
+  @keyup.enter="confirmOrderSelection"
+  @keydown.up="handleOrderKeyUp"
+  @keydown.down="handleOrderKeyDown"
+>
   <el-tree
-      ref="orderTreeRef"
-      :data="YjtreeData"
-      :props="treeProps"
-      node-key="id"
-      highlight-current
-      @node-click="handleTreeNodeClick"
-      style="height: 400px; overflow: auto;"
-    >
-      <template #default="{ node, data }">
-        <span>{{ data.yj_Yjno }} - {{ data.yj_yjmc }}</span>
-      </template>
-    </el-tree>
-    
+    ref="orderTreeRef"
+    :data="YjtreeData"
+    :props="treeProps"
+    node-key="id"
+    highlight-current
+    @node-click="handleOrderNodeClick"
+    style="height: 400px; overflow: auto;"
+  >
+    <template #default="{ node, data }">
+      <span>{{ data.yj_Yjno }} - {{ data.yj_yjmc }}</span>
+    </template>
+  </el-tree>
+</el-dialog>
+
+  <!-- 物料选择弹窗 -->
+<el-dialog
+  v-model="materialSelectDialogVisible"
+  title="请选择物料"
+  width="60%"
+  @keyup.enter="confirmMaterialSelection"
+  @keydown.up="handleMaterialKeyUp"
+  @keydown.down="handleMaterialKeyDown"
+>
+  <el-table
+    ref="materialTableRef"
+    :data="materialList"
+    highlight-current-row
+    @current-change="handleMaterialRowClick"
+    style="height: 400px; overflow: auto;"
+  >
+    <el-table-column prop="物料代码" label="物料代码" width="180" />
+    <el-table-column prop="物料名称" label="物料名称" width="180" />
+    <el-table-column prop="供方批次" label="供方批次" />
+    <el-table-column prop="单位" label="单位" width="100" />
+  </el-table>
+</el-dialog>
+
+<!-- 机台选择弹窗 -->
+<el-dialog
+  v-model="machineSelectDialogVisible"
+  title="请选择机台"
+  width="40%"
+  @keyup.enter="confirmMachineSelection"
+  @keydown.up="handleMachineKeyUp"
+  @keydown.down="handleMachineKeyDown"
+>
+  <el-table
+    ref="machineTableRef"
+    :data="machineList"
+    highlight-current-row
+    @current-change="handleMachineRowClick"
+    style="height: 400px; overflow: auto;"
+  >
+    <el-table-column prop="value" label="机台编号" />
+  </el-table>
+</el-dialog>
 
-  </el-dialog>
   
           </el-main>
         </layout-content>
@@ -295,8 +339,12 @@
   import {ref, reactive,nextTick,computed} from 'vue'
   import * as XLSX from 'xlsx'
   import FileSaver from 'file-saver'
+  import dayjs, { Dayjs } from 'dayjs';
   import { exportExcelFile } from '@/utils/excel'
   import {ElMessage,ElMessageBox} from "element-plus";
+  import { useUserStore } from '@/pinia/modules/user'
+  const userStore = useUserStore()
+  const sys_id='['+userStore.userInfo.userName+'/'+userStore.userInfo.nickName+']'
   defineOptions({name: 'Company'})
   // =========== 获取左侧树侧形结构 ===========
   const treeData = ref([]);
@@ -339,27 +387,54 @@ const handleNodeClick = async (node) => {
       dhltableData.value = response.data; 
     }
   }else if(node.children.length== 0){
-    const response = await getAEList({sys_id:node.label.split("【")[0], search:nodeclick.value,type: displayMod.value === 'data'? 1 : 0}); // 替换为实际的API调用 
-  }
-  if (response.code === 0 && response.data) {
+    const response = await getAEList({sys_id:node.label.split("【")[0], search:nodeclick.value,type: displayMod.value === 'data'? 1 : 0}); // 替换为实际的API调用
+    if (response.code === 0 && response.data) {
       dhltableData.value = response.data; 
-    }
+    } 
+  }
 }
   
 
   
   //新增
-  const machineForm = reactive({ 
+  const Alumite = reactive({ 
   })
-  const dialogMachineVisible = ref(false)
+  const dialogAlumiteVisible = ref(false)
   const type = ref('create') // 'create' 或 'update'
   const onADD = () => {
     // 新增逻辑
     console.log('新增按钮点击'); 
     type.value = 'create'
-    dialogMachineVisible.value = true
+    dialogAlumiteVisible.value = true
   }
   
+  //双击打开修改弹窗
+const updateCompanyFunc = async (row) => {
+  console.log(row);
+    type.value = 'update'
+    const res = await getAEDetail({ Uniqid: row.Uniqid })
+    if (res.code === 0) {
+      Alumite.发生日期 = res.data.st_rq
+      Alumite.交易类型 = res.data.st_jylb
+      Alumite.工单编号 = res.data.st_gdbh
+      Alumite.工单名称 = res.data.成品名称
+      Alumite.印件号 = res.data.st_yjno
+      Alumite.印件名称 = res.data.印件名称
+      Alumite.物料编号 = res.data.st_wlbh
+      Alumite.物料名称 = res.data.物料名称
+      Alumite.采购单号 = res.data.采购单号
+      Alumite.供方批次 = res.data.供方批次
+      Alumite.整卷长度 = res.data.卷长
+      Alumite.整卷幅宽 = res.data.卷宽
+      Alumite.领用宽度 = res.data.领用宽度
+      Alumite.领用数量 = res.data.领用数量
+      Alumite.单位 = res.data.单位
+      Alumite.机台编号 = res.data.机台
+      Alumite.其他备注 = res.data.备注
+      Alumite.Uniqid = res.data.Uniqid
+    }
+    dialogAlumiteVisible.value = true
+  }
   
   
 // 工单选择相关状态
@@ -368,6 +443,18 @@ const orderList = ref([])
 const selectedOrder = ref(null)
 const orderTreeRef = ref(null)
 
+// 物料选择相关状态
+const materialSelectDialogVisible = ref(false)
+const materialList = ref([])
+const selectedMaterial = ref(null)
+const materialTableRef = ref(null)
+
+// 机台选择相关状态
+const machineSelectDialogVisible = ref(false)
+const machineList = ref([])
+const selectedMachine = ref(null)
+const machineTableRef = ref(null)
+
 const YjtreeData = computed(() => {
   return orderList.value.map((item, index) => ({
     ...item,
@@ -376,40 +463,135 @@ const YjtreeData = computed(() => {
   }))
 })
 
+// 获取工单信息
 const getGD = async () => {
-  const res = await getOrderInfo({ order: machineForm.工单编号 })
-  console.log(res)
-  
-  if (res.code === 0) {
-    if (res.data.length === 1) {
-      // 只有一条数据,直接赋值
-      machineForm.工单名称 = res.data[0].Gd_cpmc
-      machineForm.印件号 = res.data[0].yj_Yjno
-      machineForm.印件名称 = res.data[0].yj_yjmc
-      const response = await getMaterials({ gdbh: machineForm.工单编号,yjno:machineForm.印件号 });
-      console.log(response)
-    } else if (res.data.length > 1) {
-      // 多条数据,显示选择弹窗
-      orderList.value = res.data
-      orderSelectDialogVisible.value = true
-      
-      // 等待树渲染完成后自动选中第一个节点
-      nextTick(() => {
-        if (orderTreeRef.value && YjtreeData.value.length > 0) {
-          const firstNode = YjtreeData.value[0].children?.[0] || YjtreeData.value[0]
-          orderTreeRef.value.setCurrentKey(firstNode.id)
-          selectedOrder.value = firstNode.isGroup ? null : firstNode
-        }
-      })
+  try {
+    const res = await getOrderInfo({ order: Alumite.工单编号 })
+    console.log(res)
+    
+    if (res.code === 0) {
+      if (res.data.length === 1) {
+        // 只有一条数据,直接赋值
+        assignOrderValues(res.data[0])
+        // 获取物料信息
+        await getMaterialInfo(res.data[0])
+      } else if (res.data.length > 1) {
+        // 多条数据,显示选择弹窗
+        orderList.value = res.data
+        orderSelectDialogVisible.value = true
+        
+        // 等待树渲染完成后自动选中第一个节点
+        nextTick(() => {
+          if (orderTreeRef.value && YjtreeData.value.length > 0) {
+            const firstNode = YjtreeData.value[0].children?.[0] || YjtreeData.value[0]
+            orderTreeRef.value.setCurrentKey(firstNode.id)
+            selectedOrder.value = firstNode.isGroup ? null : firstNode
+          }
+        })
+      } else {
+        ElMessage.warning('未找到相关工单信息')
+      }
     } else {
-      ElMessage.warning('未找到相关工单信息')
+      ElMessage.error(res.msg)
     }
-  } else {
-    ElMessage.error(res.msg)
+  } catch (error) {
+    ElMessage.error('获取工单信息失败: ' + error.message)
   }
 }
-// 键盘导航方法
-const handleKeyUp = () => {
+
+// 获取物料信息
+const getMaterialInfo = async (orderData) => {
+  try {
+    const response = await getMaterials({ 
+      gdbh: orderData.Gd_gdbh || Alumite.工单编号,
+      yjno: orderData.yj_Yjno || Alumite.印件号 
+    })
+    
+    console.log(response)
+    
+    if (response.code === 0) {
+      if (response.data.length === 1) {
+        // 只有一条物料数据,直接赋值
+        assignMaterialValues(response.data[0])
+      } else if (response.data.length > 1) {
+        // 多条物料数据,显示选择弹窗
+        materialList.value = response.data
+        materialSelectDialogVisible.value = true
+        
+        // 等待表格渲染完成后自动选中第一行
+        nextTick(() => {
+          if (materialTableRef.value && materialList.value.length > 0) {
+            materialTableRef.value.setCurrentRow(materialList.value[0])
+            selectedMaterial.value = materialList.value[0]
+          }
+        })
+      } else {
+        ElMessage.warning('未找到相关物料信息')
+      }
+    } else {
+      ElMessage.error(response.msg)
+    }
+  } catch (error) {
+    ElMessage.error('获取物料信息失败: ' + error.message)
+  }
+}
+
+// 获取机台信息
+const getMC = async () => {
+  try {
+    const res = await getMachine({ search: Alumite.机台编号 })
+    console.log(res)
+    
+    if (res.code === 0) {
+      if (res.data.length === 1) {
+        // 只有一条数据,直接赋值
+        assignMachineValues(res.data[0])
+      } else if (res.data.length > 1) {
+        // 多条数据,显示选择弹窗
+        machineList.value = res.data.map(item => ({ value: item }))
+        machineSelectDialogVisible.value = true
+        
+        // 等待表格渲染完成后自动选中第一行
+        nextTick(() => {
+          if (machineTableRef.value && machineList.value.length > 0) {
+            machineTableRef.value.setCurrentRow(machineList.value[0])
+            selectedMachine.value = machineList.value[0]
+          }
+        })
+      } else {
+        ElMessage.warning('未找到相关机台信息')
+      }
+    } else {
+      ElMessage.error(res.msg)
+    }
+  } catch (error) {
+    ElMessage.error('获取机台信息失败: ' + error.message)
+  }
+}
+
+// 工单赋值函数
+const assignOrderValues = (orderData) => {
+  Alumite.工单名称 = orderData.Gd_cpmc
+  Alumite.印件号 = orderData.yj_Yjno
+  Alumite.印件名称 = orderData.yj_yjmc
+}
+
+// 物料赋值函数
+const assignMaterialValues = (materialData) => {
+  Alumite.物料编号 = materialData.物料代码
+  Alumite.物料名称 = materialData.物料名称
+  Alumite.供方批次 = materialData.供方批次
+  Alumite.单位 = materialData.单位
+}
+
+// 机台赋值函数
+const assignMachineValues = (machineData) => {
+  // 如果是字符串直接赋值,如果是对象则取value属性
+  Alumite.机台编号 = typeof machineData === 'string' ? machineData : machineData.value
+}
+
+// 工单键盘导航方法
+const handleOrderKeyUp = () => {
   const tree = orderTreeRef.value
   const current = tree.getCurrentNode()
   const nodes = YjtreeData.value
@@ -422,7 +604,7 @@ const handleKeyUp = () => {
   }
 }
 
-const handleKeyDown = () => {
+const handleOrderKeyDown = () => {
   const tree = orderTreeRef.value
   const current = tree.getCurrentNode()
   const nodes = YjtreeData.value
@@ -435,37 +617,228 @@ const handleKeyDown = () => {
   }
 }
 
-// 处理树节点点击
-const handleTreeNodeClick = (data) => {
+// 物料键盘导航方法
+const handleMaterialKeyUp = () => {
+  const table = materialTableRef.value
+  const current = selectedMaterial.value
+  const currentIndex = materialList.value.findIndex(item => item.物料代码 === current?.物料代码)
+  
+  if (currentIndex > 0) {
+    const prevRow = materialList.value[currentIndex - 1]
+    table.setCurrentRow(prevRow)
+    selectedMaterial.value = prevRow
+  }
+}
+
+const handleMaterialKeyDown = () => {
+  const table = materialTableRef.value
+  const current = selectedMaterial.value
+  const currentIndex = materialList.value.findIndex(item => item.物料代码 === current?.物料代码)
+  
+  if (currentIndex < materialList.value.length - 1) {
+    const nextRow = materialList.value[currentIndex + 1]
+    table.setCurrentRow(nextRow)
+    selectedMaterial.value = nextRow
+  }
+}
+
+// 机台键盘导航方法
+const handleMachineKeyUp = () => {
+  const table = machineTableRef.value
+  const current = selectedMachine.value
+  const currentIndex = machineList.value.findIndex(item => item.value === current?.value)
+  
+  if (currentIndex > 0) {
+    const prevRow = machineList.value[currentIndex - 1]
+    table.setCurrentRow(prevRow)
+    selectedMachine.value = prevRow
+  }
+}
+
+const handleMachineKeyDown = () => {
+  const table = machineTableRef.value
+  const current = selectedMachine.value
+  const currentIndex = machineList.value.findIndex(item => item.value === current?.value)
+  
+  if (currentIndex < machineList.value.length - 1) {
+    const nextRow = machineList.value[currentIndex + 1]
+    table.setCurrentRow(nextRow)
+    selectedMachine.value = nextRow
+  }
+}
+
+// 处理工单树节点点击
+const handleOrderNodeClick = (data) => {
   selectedOrder.value = data
   orderTreeRef.value.setCurrentKey(data.id)
 }
 
-// 修改自动选择逻辑
-nextTick(() => {
-  if (orderTreeRef.value && YjtreeData.value.length > 0) {
-    const firstNode = YjtreeData.value[0]
-    orderTreeRef.value.setCurrentKey(firstNode.id)
-    selectedOrder.value = firstNode
-  }
-})
+// 处理物料行点击
+const handleMaterialRowClick = (row) => {
+  selectedMaterial.value = row
+}
 
-// 确认选择
-const confirmOrderSelection = () => {
+// 处理机台行点击
+const handleMachineRowClick = (row) => {
+  selectedMachine.value = row
+}
+
+// 确认工单选择
+const confirmOrderSelection = async () => {
   if (!selectedOrder.value) {
     ElMessage.warning('请选择一条工单记录')
     return
   }
   
   // 赋值
-  machineForm.工单名称 = selectedOrder.value.Gd_cpmc
-  machineForm.印件号 = selectedOrder.value.yj_Yjno
-  machineForm.印件名称 = selectedOrder.value.yj_yjmc
-  //关闭弹窗
+  assignOrderValues(selectedOrder.value)
+  // 关闭弹窗
   orderSelectDialogVisible.value = false
+  // 获取物料信息
+  await getMaterialInfo(selectedOrder.value)
   selectedOrder.value = null
 }
 
+// 确认物料选择
+const confirmMaterialSelection = () => {
+  if (!selectedMaterial.value) {
+    ElMessage.warning('请选择一条物料记录')
+    return
+  }
+  
+  // 赋值
+  assignMaterialValues(selectedMaterial.value)
+  // 关闭弹窗
+  materialSelectDialogVisible.value = false
+  selectedMaterial.value = null
+}
+
+// 确认机台选择
+const confirmMachineSelection = () => {
+  if (!selectedMachine.value) {
+    ElMessage.warning('请选择一个机台')
+    return
+  }
+  
+  // 赋值
+  assignMachineValues(selectedMachine.value)
+  // 关闭弹窗
+  machineSelectDialogVisible.value = false
+  selectedMachine.value = null
+}
+
+
+
+//弹窗确定
+const dhlenterDialog = async () => {
+    console.log(':', Alumite)
+  const params = {
+    st_rq: dayjs(Alumite.发生日期).format('YYYY-MM-DD'),
+    st_jylb: Alumite.交易类型,
+    st_gdbh: Alumite.工单编号,
+    采购单号:Alumite.采购单号,
+    供方批次: Alumite.供方批次,
+    st_wlbh: Alumite.物料编号,
+    卷宽: Alumite.整卷幅宽,
+    卷长: Alumite.整卷长度,
+    领用宽度: Alumite.领用宽度,
+    st_sl: Alumite.领用数量,
+    机台: Alumite.机台编号,
+    st_desc: Alumite.其他备注,
+    st_yjno: Alumite.印件号,
+    sys_id: sys_id,
+  }
+console.log(params)
+console.log(type.value)
+  if (type.value === 'create') {
+    console.log('新增')
+    // 新增
+    try {
+      const response = await getAEAdd(params)
+      if (response.code === 0) {
+        ElMessage.success('新增成功')
+        dhlcloseDialog()
+      } else {
+        ElMessage.error(response.msg || '新增失败')
+      }
+    } catch (error) {
+      
+    }
+  }else if (type.value === 'update') {
+    // 新增
+    console.log('修改')
+    params.Uniqid = Alumite.Uniqid
+    try {
+      const response = await getAEUpdate(params)
+      if (response.code === 0) {
+        ElMessage.success('修改成功')
+        dhlcloseDialog()
+      } else {
+        ElMessage.error(response.msg || '修改失败')
+      }
+    } catch (error) {
+      
+    }
+  }
+}
+
+//关闭弹窗
+const dhlcloseDialog = async () => {
+  dialogAlumiteVisible.value = false
+}
+
+
+
+//删除
+const selectedIds = ref('')
+
+// 选择表格
+const handleSelectionChange = (selection) => {
+  selectedIds.value = selection.map(item => item.Uniqid).join(',')
+  console.log('选中的ID:', selectedIds.value)
+}
+
+// 删除操作
+const onDelete = async () => {
+  if (!selectedIds.value.length) {
+    ElMessage.warning('请先选择要删除的记录')
+    return
+  }
+
+  try {
+    await ElMessageBox.confirm('确定要删除选中的记录吗?', '提示', {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning'
+    })
+    
+    // 调用删除API,假设是批量删除接口
+    const res = await getAEDelete({ UniqId: selectedIds.value })
+    
+    if (res.code === 0) {
+      ElMessage.success('删除成功')
+      // 删除成功后刷新表格数据
+      // 清空选中
+      selectedIds.value = []
+    } else {
+      ElMessage.error(res.msg || '删除失败')
+    }
+  } catch (error) {
+    if (error !== 'cancel') {
+      console.error('删除失败:', error)
+      ElMessage.error('删除操作已取消')
+    }
+  }
+}
+
+const searchInfo = ref('')
+//搜索
+const onSearch = async () => {
+  const res = await getAEList({ search: searchInfo.value,type: 0 })
+  if (res.code === 0) {
+    dhltableData.value = res.data 
+  }
+}
 
   const _Gd_gdbh = ref('')
   const tableRowClick = async (row) => {
@@ -509,9 +882,85 @@ const inputCpmc = ref('')
 
 
 //导出EXCEL
-const dhlToExcel = async () => {
+const dhlToExcel = () => {
+  const el = document.getElementById('dhltable');
+  const filename = '电化铝导出.xlsx';
   
-}
+  // 1. 获取原始表格数据
+  const wb = XLSX.utils.table_to_book(el, { raw: true });
+  const ws = wb.Sheets[wb.SheetNames[0]];
+
+  // 2. 定义需要转换为数字的列(基于原始列字母)
+  const originalNumberColumns = {
+    'C': 1,  
+    'D': 1,  
+    'E': 1,
+    'F': 3, 
+    'O': 0, 
+
+  };
+
+  // 3. 创建新工作表(左移后的数据)
+  const newWs = {};
+  const range = XLSX.utils.decode_range(ws['!ref']);
+
+  // 调整列范围(删除A列)
+  range.s.c = 0;  // 从A列开始(原B列)
+  range.e.c -= 1; // 结束列减1
+  newWs['!ref'] = XLSX.utils.encode_range(range);
+
+  // 复制其他工作表属性(排除A列)
+  if (ws['!cols']) newWs['!cols'] = ws['!cols'].slice(1);
+  if (ws['!rows']) newWs['!rows'] = ws['!rows'];
+  if (ws['!merges']) newWs['!merges'] = ws['!merges'];
+
+  // 4. 左移所有列数据(A列→删除,B列→A列,C列→B列...)
+  Object.keys(ws).forEach(address => {
+    if (!address.startsWith('!')) {
+      const col = address.charAt(0);
+      const row = address.slice(1);
+
+      if (col !== 'A') { // 跳过A列
+        // 计算新列字母(左移一列)
+        const newCol = String.fromCharCode(col.charCodeAt(0) - 1);
+        const newAddress = newCol + row;
+        
+        // 复制单元格数据
+        newWs[newAddress] = { ...ws[address] };
+      }
+    }
+  });
+
+  // 5. 转换数字格式(基于左移后的列字母)
+  Object.keys(newWs).forEach(address => {
+    const col = address.charAt(0);
+    const originalCol = String.fromCharCode(col.charCodeAt(0));
+
+    if (originalNumberColumns[originalCol] !== undefined) {
+      const cell = newWs[address];
+      const num = parseFloat(cell.v);
+      
+      if (!isNaN(num)) {
+        cell.t = 'n';
+        cell.v = num;
+        cell.z = originalNumberColumns[originalCol] === 0 
+          ? '0' 
+          : `0.${'0'.repeat(originalNumberColumns[originalCol])}`;
+      }
+    }
+  });
+
+  // 6. 更新工作簿并导出
+  wb.Sheets[wb.SheetNames[0]] = newWs;
+  const wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' });
+
+  try {
+    FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), filename);
+  } catch (e) {
+    console.error('导出失败:', e);
+  }
+  return wbout;
+};
 
 
 // 工序产量核查按钮
@@ -574,7 +1023,6 @@ const _PrintDetailList = async () => {
 }
 //工序产量核查方法接口
 const _getOrderProcessCount = async () => {
-  console.log(yjtableData['_rawValue'][0]['印件号'])
   const order = gxclhcformData['gdbh'];
   const yjno = gdwhformData.yjno;
   const getOrderProcessCount_list = await getOrderProcessCount({order:order,yjno:yjno});

+ 155 - 8
src/view/managements/hardversionlibrary.vue

@@ -8,7 +8,7 @@
               <el-form-item>
                 <el-input v-model="searchInfo" placeholder="搜索工单编号" clearable style="width: 200px;margin: 5px"></el-input>
                 <el-button type="primary" class="bt" icon="search" @click="on_search">查询</el-button>
-                <el-button type="primary" class="bt" icon="edit" @click="on_add">添加</el-button>
+                <el-button type="primary" class="bt" icon="edit" @click="onADD">添加</el-button>
                 <el-button type="primary" class="bt" icon="delete" @click="on_delete">删除</el-button>
                 <el-button type="primary" class="bt" icon="download" @click="ToExcel" >导出到Excel</el-button>
               </el-form-item>
@@ -91,6 +91,142 @@
                  :total="total" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
               </div>
             </div>
+
+            <!-- 设备折旧参数维护弹出框 -->
+            <el-dialog
+            v-model="dialogPlateVisible"
+            :before-close="dhlcloseDialog"
+            :title="type === 'create' ? '产品印版资料新增' : '电化铝领用记录修改'"
+            destroy-on-close
+            style="width: 60%; margin: 5vh auto;"
+            >
+            <el-form :model="Plate" label-width="120px">
+                <!-- 第一行:部门 -->
+                <el-row :gutter="20">
+                <el-col :span="8">
+                    <el-form-item label="存货编码">
+                    <el-input v-model="Plate.存货编码"  placeholder="请输入存货编码" />
+                    </el-form-item>
+                </el-col>
+                </el-row>
+
+                <!-- 第二行:设备信息 -->
+                <el-row :gutter="20">
+                  <el-col :span="8">
+                    <el-form-item label="存货名称">
+                    <el-input v-model="Plate.存货名称"  placeholder="请输入存货名称" />
+                    </el-form-item>
+                </el-col>
+                </el-row>
+
+                <el-row :gutter="20">
+                <el-col :span="8">
+                    <el-form-item label="印版备注">
+                    <el-input v-model="Plate.印版备注" readonly  />
+                    </el-form-item>
+                </el-col>
+                </el-row>
+
+                <!-- 第三行:供应商 -->
+                <el-row :gutter="20">
+                  <el-col :span="8">
+                        <el-form-item label="制造日期">
+                            <el-date-picker
+                            v-model="Plate.制造日期"
+                            type="date"
+                            placeholder="选择制造日期"
+                            style="width: 100%"
+                            />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="8">
+                        <el-form-item label="报废日期">
+                            <el-date-picker
+                            v-model="Plate.报废日期"
+                            type="date"
+                            placeholder="选择报废日期"
+                            style="width: 100%"
+                            />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+
+                <!-- 第四行:出厂编号 -->
+                <el-row :gutter="20">
+                  <el-col :span="8">
+                    <el-form-item label="初始印数">
+                    <el-input v-model="Plate.初始印数" placeholder="请输入初始印数" />
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="考核印数">
+                    <el-input v-model="Plate.考核印数" placeholder="请输入考核印数" />
+                    </el-form-item>
+                </el-col>
+                </el-row>
+
+                <!-- 第五行:执行人员 -->
+                <el-row :gutter="20">
+
+                <el-col :span="8">
+                    <el-form-item label="供方批号">
+                    <el-input v-model="Plate.整卷长度" placeholder="请输入整卷长度" />
+                    </el-form-item>
+                </el-col>
+                </el-row>
+
+                <!-- 第六行:保养信息 -->
+                <el-row :gutter="20">
+                    <el-col :span="8">
+                    <el-form-item label="领用宽度">
+                    <el-input v-model="Plate.领用宽度" placeholder="请输入领用宽度" />
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="领用数量">
+                    <el-input v-model="Plate.领用数量" placeholder="请输入领用数量" />
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="单位">
+                    <el-input v-model="Plate.单位" placeholder="请输入单位" />
+                    </el-form-item>
+                </el-col>
+                </el-row>
+
+                <!-- 第六行:验收信息 -->
+                <el-row :gutter="20">
+                    <el-col :span="8">
+                    <el-form-item label="机台编号">
+                    <el-input v-model="Plate.机台编号" @keyup.enter="getMC()" placeholder="请输入机台编号" />
+                    </el-form-item>
+                </el-col>
+                </el-row>
+
+
+                <!-- 第七行:工时信息 -->
+                <el-row :gutter="20">
+                    <el-col :span="8">
+                    <el-form-item label="其他备注">
+                    <el-input v-model="Plate.其他备注" placeholder="请输入其他备注" />
+                    </el-form-item>
+                </el-col>
+
+                </el-row>
+
+
+                
+            </el-form>
+
+            <!-- 弹窗底部按钮 -->
+            <template #footer>
+                <div class="dialog-footer" style="width: 100%;">
+                <el-button @click="dhlcloseDialog" style="width: 100px; height: 40px;">关 闭</el-button>
+                <el-button type="primary" @click="dhlenterDialog" style="width: 100px; height: 40px;">确 定</el-button>
+                </div>
+            </template>
+            </el-dialog>
+
   
           </el-main>
         </layout-content>
@@ -146,16 +282,27 @@ const transformData = (data) => {
   })
 }
   
-
-  
-
-  
-
-  
-
   getTreeData()
   
+
+  const handleNodeClick = async (node) => {
+    console.log(node) 
+    if(!node.children){
+      const res = await 接口({code:node.label.split(' ')[0]})
+    }
+  }
   
+    //新增
+  const Plate = reactive({ 
+  })
+  const dialogPlateVisible = ref(false)
+  const type = ref('create') // 'create' 或 'update'
+  const onADD = () => {
+    // 新增逻辑
+    console.log('新增按钮点击'); 
+    type.value = 'create'
+    dialogPlateVisible.value = true
+  }
   
   
   </script>

+ 99 - 61
src/view/yunyin/chanpinziliao/chanpinziliao.vue

@@ -1952,90 +1952,121 @@ const clickedlist = ref(true);
  //存储定时器时间
 let clickTimer = null;
 const cpgyfzhandleConfirm = async () => {
-    //防止重复点击
-    if (!clickedlist.value) {
-    // 如果按钮已经被禁用,则不执行任何操作
-    return;
-  }
+  // 防止重复点击
+  if (!clickedlist.value) return;
   clickedlist.value = false;
-  // 清除之前的定时器(如果有的话),以避免重复设置
-  if (clickTimer) {
-    clearTimeout(clickTimer);
-  }
-  //设置定时器,在3秒后重新启用按钮
+  
+  if (clickTimer) clearTimeout(clickTimer);
   clickTimer = setTimeout(() => {
     clickedlist.value = true;
     clickTimer = null;
   }, 3000);
-  // console.log(cpgyfzformData)
-  if(cpgyfzformData['process'] === ''){
-    ElMessage({type: 'warning',message: '参照产品代号不能为空' })
+
+  // 表单验证(原有逻辑)
+  if (cpgyfzformData['process'] === '') {
+    ElMessage({ type: 'warning', message: '参照产品代号不能为空' });
+    clickedlist.value = true; // 恢复按钮状态
     return false;
   }
-  if(cpgyfzformData['mubprocess'] === ''){
-    ElMessage({type: 'warning',message: '目标产品编号不能为空' })
+  if (cpgyfzformData['mubprocess'] === '') {
+    ElMessage({ type: 'warning', message: '目标产品编号不能为空' });
+    clickedlist.value = true;
     return false;
   }
-  if(cpgyfzformData['gongyifa'] === '' ||  cpgyfzformData['gongyifa'] === undefined){
-    ElMessage({type: 'warning',message: '该产品未查询到工艺方案' })
+  if (cpgyfzformData['gongyifa'] === '' || cpgyfzformData['gongyifa'] === undefined) {
+    ElMessage({ type: 'warning', message: '该产品未查询到工艺方案' });
+    clickedlist.value = true;
     return false;
   }
-  if(cpgyfzformData['mubprocess'] === ''){
-    ElMessage({type: 'warning',message: '目标产品代号不能为空' })
-    return false;
+
+  // 检查是否选择了复制印件资料
+  if (cpgyfzformData['fzyjzl'] === true) {
+    console.log('判断印件号是否重复')
+    // 获取两个印件号的数组
+    const sourceYjNos = _yjno.value.split(',').filter(Boolean); // 原印件号(1,2,3,4,5 → ["1", "2", "3", "4", "5"])
+    const targetYjNos = copy_yjno.value.split(',').filter(Boolean); // 目标印件号(1,2,3,4 → ["1", "2", "3", "4"])
+    console.log('原印件号:', sourceYjNos);
+    console.log('目标印件号:', targetYjNos);
+    // 找出重复的印件号
+    const duplicateYjNos = targetYjNos.filter(yjno => sourceYjNos.includes(yjno));
+    console.log('重复的印件号:', duplicateYjNos);
+    if (duplicateYjNos.length > 0) {
+      try {
+        // 弹出确认框,提示重复的印件号
+        const confirmResult = await ElMessageBox.confirm(
+          `以下印件号已存在,是否继续覆盖?<br>重复印件号:${duplicateYjNos.join(', ')}`,
+          '提示',
+          {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            dangerouslyUseHTMLString: true, // 允许HTML内容
+            type: 'warning',
+          }
+        );
+
+        // 用户点击"确定",继续执行原有逻辑
+        if (confirmResult === 'confirm') {
+          await proceedWithCopy(); // 执行原有的复制逻辑
+        } else {
+          // 用户点击"取消",恢复按钮状态并退出
+          clickedlist.value = true;
+          return false;
+        }
+      } catch (error) {
+        // 用户关闭弹窗或点击取消
+        clickedlist.value = true;
+        return false;
+      }
+    } else {
+      // 没有重复印件号,直接执行原有逻辑
+      await proceedWithCopy();
+    }
+  } else {
+    // 未选择复制印件资料,直接执行原有逻辑
+    await proceedWithCopy();
   }
-  //选择复制工艺资料
+};
+
+// 封装原有的复制逻辑
+const proceedWithCopy = async () => {
+  // 原有逻辑:处理复制工艺、印版、印件等选项
   if (cpgyfzformData['fzgyzl'] === true) {
     is_copy_gy.value = 1;
-  }else{
+  } else {
     is_copy_gy.value = 0;
   }
-  //选择限制工艺数量
+
   if (cpgyfzformData['xzgyzl'] === true) {
     is_xz_gy.value = 1;
-  }else{
-    is_xz_gy.value = 0;	
+  } else {
+    is_xz_gy.value = 0;
   }
-  //选择复制印版资料
+
   if (cpgyfzformData['fzybzl'] === true) {
     is_copy_yb.value = 1;
-  }else{
+  } else {
     is_copy_yb.value = 0;
   }
-   //选择复制印件资料
-   if (cpgyfzformData['fzyjzl'] === true) {
+
+  if (cpgyfzformData['fzyjzl'] === true) {
     is_copy_yj.value = 1;
-  }else{
+  } else {
     is_copy_yj.value = 0;
   }
-  //选择复制工艺资料、不选择复制印版资料和印件资料
+
+  // 其他验证逻辑(如目标工艺方案是否为空等)
   if (cpgyfzformData['fzgyzl'] === true && cpgyfzformData['fzybzl'] === false && cpgyfzformData['fzyjzl'] === false) {
-    if(cpgyfzformData['to_pro'] === ''){
-      ElMessage({type: 'warning',message: '目标工艺方案不能为空' })
+    if (cpgyfzformData['to_pro'] === '') {
+      ElMessage({ type: 'warning', message: '目标工艺方案不能为空' });
+      clickedlist.value = true;
       return false;
     }
-    is_copy_gy.value = 1;
-    is_copy_yb.value = 0;
-    is_copy_yj.value = 0;
-  }
-  //选择复制印版资料、不选择复制工艺资料
-  if (cpgyfzformData['fzgyzl'] === false && cpgyfzformData['fzybzl'] === true) {
-    is_copy_gy.value = 0;
-    is_copy_yb.value = 1;
-    cpgyfzformData['to_pro'] = '';
-  }
-  //都不选择提示信息
-  if (cpgyfzformData['fzgyzl'] === false && cpgyfzformData['fzybzl'] === false) {
-    ElMessage({type: 'warning',message: '请选择复制工艺资料 或 复制印版资料' })
-    return false;
-  }
-  // 判断是否为大写字母
-  if (cpgyfzformData['to_pro'] === cpgyfzformData['to_pro'].toUpperCase()) {
-    toProUpperCase.value = cpgyfzformData['to_pro'];
-  } else {
-    // 如果不是大写字母,则将其转换为大写
-    toProUpperCase.value  = cpgyfzformData['to_pro'].toUpperCase();
   }
+
+  // 转换为大写(原有逻辑)
+  toProUpperCase.value = cpgyfzformData['to_pro'].toUpperCase();
+
+  // 构造请求数据
   const formattedData = {
     from_code: cpgyfzformData['process'],
     from_pro: cpgyfzformData['gongyifa'],
@@ -2044,24 +2075,22 @@ const cpgyfzhandleConfirm = async () => {
     to_pro: toProUpperCase.value,
     is_copy_yb: is_copy_yb.value,
     is_copy_yj: is_copy_yj.value,
-    type: is_xz_gy.value
+    type: is_xz_gy.value,
   };
-  console.log(formattedData);
+
+  // 发送请求
   const copyProductGy_add = await copyProductGy(formattedData);
-  console.log(copyProductGy_add)
   if (copyProductGy_add.code === 0) {
     ElMessage({ type: 'success', message: '更新成功' });
-  } else {
-    // ElMessage({ type: 'error', message: '更新失败' });
   }
+
+  // 重置表单(原有逻辑)
   cpgyfzformData['fzgyzl'] = true;
   cpgyfzformData['xzgyzl'] = false;
   cpgyfzformData['fzybzl'] = false;
   cpgyfzformData['fzyjzl'] = false;
   cpgyfzformData['to_pro'] = '';
   cpgyfzlist.value = false;
-
-
 };
 
 
@@ -2105,6 +2134,7 @@ const _ProductCodeList = async (v = '')=>{
     console.error(error);
   }
 }
+const copy_yjno = ref('')//保存目标印件号
 const add_cpgyfzent = async (event,id1,id2,id3) => {
   if (id2 === 'mubprocess' &&  event.key==='Tab' || id2 === 'mubprocess' && event.key=== 'Enter') {
     // cpgyfz_keyword.value = '';
@@ -2114,6 +2144,10 @@ const add_cpgyfzent = async (event,id1,id2,id3) => {
       if (row) {
         cpgyfzformData['mubprocess'] = row.产品编号
         cpgyfzformData['mubprocessName'] = row.产品名称
+        const yjArray = Array.isArray(row.yj) ? row.yj : [row.yj];
+        copy_yjno.value = yjArray.join(',');
+        console.log(_yjno.value);
+        console.log(copy_yjno.value);
       } else {
         cpgyfzdisplay.value = true
       }
@@ -2595,6 +2629,7 @@ const addgy = ref(false)
 const addyb = ref(false)
 const addyj = ref(false)
 const delall = ref(false)
+const _yjno = ref('')//全局获取印件号
 //点击表格行 下方表格获取数据
 const tableRowClick = async (row) => {
   console.log(row)
@@ -2606,6 +2641,9 @@ const tableRowClick = async (row) => {
   console.log(_product_code.value + "--->下方表格获取数据")
   console.log(res)
   console.log(res.data.gyData)
+  const yjNos = res.data.yjData.map(item => item.yj_yjno).join(',');
+  _yjno.value = yjNos;
+  console.log(_yjno.value)
   const processedData = res.data.gyData.map(item => {
     return {
       ...item,

+ 1 - 1
src/view/yunyin/shengchanguanli/shebeiyunxing.vue

@@ -2121,7 +2121,7 @@
 			  </el-row>
 			  <el-row :gutter="24">
 			    <el-form-item label="定额代号" prop="customerCode" class="mab" label-width="90">
-			      <el-input v-model="JPformdataedit['定额代号']" style="width: 200px;" id="定额代号" @keydown="JPentedit($event)"/>
+			      <el-input v-model="JPformdataedit['定额代号']" style="width: 200px;" readonly id="定额代号" @keydown="JPentedit($event)"/>
 			    </el-form-item>
 			  </el-row>