|
|
@@ -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});
|