UI-Project/src/views/Returns/returns.vue
@@ -4,7 +4,6 @@ import {useRouter} from "vue-router" const router = useRouter() import type { TableColumnCtx } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus' const dialogFormVisible = ref(false) const blind = ref(false) @@ -14,54 +13,51 @@ const adda = ref(false) const flake = ref(false) const flakea = ref(false) // const patternHeight = ref(''); // const patternWidth = ref(''); // const filmsId = ref(''); // const patternThickness = ref(''); // const number = ref(''); // patternHeight.value = ''; // patternWidth.value = ''; // filmsId.value = ''; // patternThickness.value = ''; // number.value = ''; import { WebSocketHost } from '@/utils/constants' import request from "@/utils/request" const ida = ref(null); import { ref, onMounted, onUnmounted } from "vue"; // import http from "@/http/index"; let ruleForm = ref({ projectNo: '', workstationId: '', patternHeight: '', patternWidth: '', filmsId: '', patternThickness: '', number: '', }) const tableDataa = ref([]) import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService'; import { ref, onMounted, onUnmounted, onBeforeUnmount } from "vue"; // 响应式数据 const selectedProjectNo = ref(''); // 当前选中的工程号 const selectedProjectNoa = ref(''); // 当前选中的工程号 const selectedValue = ref(''); // 当前选中的宽 const selectedValuea = ref(''); const selectedValueb = ref(''); const selectedValuec = ref(''); const options = ref<any[]>([]); // 下拉选项列表 const selectOptions = ref<Array<any>>([]); // 下拉选选项数组 const selectOptionsa = ref<Array<any>>([]); // 下拉选选项数组 const selectOptionsb = ref<Array<any>>([]); // 下拉选选项数组 const selectOptionsc = ref<Array<any>>([]); // 下拉选选项数组 const tableDataa = ref([]) const tableData = reactive([]); // let filterData = ref({ // damageDetails: { // state: '', // }, // }) // 发送获取表格数据的请求 const fetchTableData = async () => { const fetchTableData = async () => { try { const response = await request.get("/loadGlass/up-patten-usage/prioritylist"); // 检查响应状态 if (response.code === 200) { // 更新表格数据 console.log('成功获取表格数据:', response.data); tableData.splice(0, tableData.length, ...response.data); window.localStorage.setItem('engineeringId', response.data[0].engineeringId) selectOptions.value = response.data.map(item => ({ value: item.width, // 假设这是你想要作为value的属性 label: item.width, // 假设这是你想要显示的label })); selectOptionsa.value = response.data.map(item => ({ value: item.height, label: item.height, })); selectOptionsb.value = response.data.map(item => ({ value: item.filmsId, label: item.filmsId, })); selectOptionsc.value = response.data.map(item => ({ value: item.thickness, label: item.thickness, })); } else { // 请求失败,显示错误消息 ElMessage.error(response.msg); } } catch (error) { @@ -69,135 +65,45 @@ // ElMessage.error('获取表格数据失败,请重试'); } }; onMounted(async () => { await fetchTableData(); // 设置定时器来定期刷新数据 const intervalId = setInterval(async () => { await fetchTableData(); }, 1000); // 每1秒刷新一次 // 组件卸载时清除定时器 onUnmounted(() => { clearInterval(intervalId); }); }); onMounted(async () => { await fetchTableDataa(); // 设置定时器来定期刷新数据 const intervalId = setInterval(async () => { await fetchTableDataa(); }, 1000); // 每1秒刷新一次 // 组件卸载时清除定时器 onUnmounted(() => { clearInterval(intervalId); }); }); // request.get("/loadGlass/LoadGlass/list").then((res) => { // if (res.code === 200) { // console.log(res.data); // tableDataa.value = res.data; // if (tableDataa.value.length === 2) { // if (tableDataa.value[0].patternWidth > 0) { // flake.value = true; // } // if (tableDataa.value[1].patternWidth > 0) { // flakea.value = true; // } // } // } else { // ElMessage.warning(res.msg); // // router.push("/login"); // } // }); async function fetchTableDataa() { try { const res = await request.get("/loadGlass/LoadGlass/list"); if (res.code === 200) { tableDataa.value = res.data; // 根据数据更新 flake 和 flakea 的值 if (res.data.length >= 2) { if (res.data[0].patternWidth > 0) { flake.value = true; } else { flake.value = false; } if (res.data[1].patternWidth > 0) { flakea.value = true; } else { flakea.value = false; } } } else { ElMessage.warning(res.msg); } } catch (error) { console.error('获取表格数据失败', error); // 可以在这里添加额外的错误处理逻辑 } } // request.get("/loadGlass/LoadGlass/list").then((res) => { // window.localStorage.setItem('patternWidth', res.data.patternWidth) // window.localStorage.setItem('workstationId', res.data.workstationId) // if (res.code == 200) { // console.log(res.data); // tableDataa.value = res.data // console.log(res.data.patternWidth); request.get("/loadGlass/LoadGlass/list").then((res) => { window.localStorage.setItem('patternWidth', res.data.patternWidth) window.localStorage.setItem('workstationId', res.data.workstationId) if (res.code == 200) { console.log(res.data); tableDataa.value = res.data console.log(res.data.patternWidth); // let workstationId = window.localStorage.getItem('workstationId') // let patternWidth = window.localStorage.getItem('patternWidth') // if (patternWidth !== '' || workstationId == '1') { // flake.value = true // } else if (patternWidth !== '' || workstationId == '2') { // flakea.value = true // } // } else { // ElMessage.warning(res.msg) // // router.push("/login") // } // }); let workstationId = window.localStorage.getItem('workstationId') let patternWidth = window.localStorage.getItem('patternWidth') if (patternWidth !== '' || workstationId == '1') { flake.value = true } else if (patternWidth !== '' || workstationId == '2') { flakea.value = true } } else { ElMessage.warning(res.msg) // router.push("/login") } }); //定义接收加载表头下拉数据 const titleSelectJson = ref({ processType: [], }) const titleSelectJsona = ref({ processTypea: [], }) // const getBasicData = ref({ // id: '', // projectNo: '', // }) // const requestData = { // // projectNo:"P24030805", // state:100 // }; // request.post("/loadGlass/optimizeProject/listByState", requestData) // .then((res) => { // if (res.code == 200) { // titleSelectJson.value.processType = res.data; // console.log(res.data); // } else { // ElMessage.warning(res.msg) // // router.push("/login") // } // }); // 初始请求参数 const socketUrl = `ws://10.153.19.150:88/api/loadGlass/api/talk/loadGlass`; // 定义消息处理函数,更新 receivedData 变量 const handleMessage = (data) => { // 更新 tableData 的数据 tableData.splice(0, tableData.length, ...data.prioritylist[0]); tableDataa.value = data.list[0] // console.log("更新后数据", tableData); }; const requestData = { state: 100 }; // 响应式数据 const selectedProjectNo = ref(''); // 当前选中的工程号 const selectedProjectNoa = ref(''); // 当前选中的工程号 const options = ref<any[]>([]); // 下拉选项列表 // 调用接口获取选项数据的函数 const fetchOptions = async (queryString: string) => { try { @@ -218,22 +124,6 @@ console.error('Error fetching options:', error); } }; // 开始上片下拉选 const fetchOptionsa = async (queryString: string) => { try { // 发送请求到后端接口 const response = await request.get('/loadGlass/engineering/engineering/selectTask'); if (response.code == 200) { titleSelectJsona.value.processTypea = response.data; console.log(response.data); } else { ElMessage.warning(response.data); } } catch (error) { console.error('Error fetching options:', error); } }; // 处理用户输入变化的方法 const handleInputChange = async (value: string) => { if (value) { @@ -252,28 +142,14 @@ }; // 初始化加载数据(如果需要) onMounted(() => { // 在组件挂载后调用 fetchOptions('') 来加载初始数据(如果需要) fetchOptions(''); initializeWebSocket(socketUrl, handleMessage); }); onMounted(() => { // 在组件挂载后调用 fetchOptions('') 来加载初始数据(如果需要) fetchOptionsa(''); }); // const billall = () => { // request.post("/loadGlass/optimizeProject/listByState", requestData) // .then((res: any) => { // // if (res.code == 200) { // tableData.value = res.data; // // let self = this // // } // }) // .catch((err: any) => {}); // } onBeforeUnmount(() => { console.log("关闭了") closeWebSocket(); }); const user = ref(''); // 定义表头上传数据 // let titleUploadData = ref({ // projectNo:'', // }) const projectNo = ref(''); const workstationId = ref(''); const id = ref(''); @@ -298,10 +174,10 @@ const response = await request.post('/loadGlass/LoadGlass/updateGlassMessage', { id: workstationId.value, workstationId: workstationId.value, patternHeight: patternHeight.value, patternWidth: patternWidth.value, filmsId: filmsId.value, patternThickness: patternThickness.value, patternHeight: selectedValuea.value, patternWidth: selectedValue.value, filmsId: selectedValueb.value, patternThickness: selectedValuec.value, number: number.value }); if (response.code == 200) { @@ -310,11 +186,11 @@ // window.location.reload() add.value = false; tableDataa.value = response.data; // patternHeight = ''; // patternWidth.value = ''; // filmsId.value = ''; // patternThickness.value = ''; // number.value = ''; selectedValuea.value = ''; selectedValue.value = ''; selectedValueb.value = ''; selectedValuec.value = ''; number.value = ''; window.localStorage.setItem('workstationId', response.data.workstationId) let workstationId = window.localStorage.getItem('workstationId') if (workstationId == '1') { @@ -337,10 +213,10 @@ const response = await request.post('/loadGlass/LoadGlass/updateGlassMessage', { id: workstationId.value, workstationId: workstationId.value, patternHeight: patternHeight.value, patternWidth: patternWidth.value, filmsId: filmsId.value, patternThickness: patternThickness.value, patternHeight: selectedValuea.value, patternWidth: selectedValue.value, filmsId: selectedValueb.value, patternThickness: selectedValuec.value, number: number.value }); if (response.code == 200) { @@ -349,6 +225,11 @@ // window.location.reload() add.value = false; tableDataa.value = response.data; selectedValuea.value = ''; selectedValue.value = ''; selectedValueb.value = ''; selectedValuec.value = ''; number.value = ''; window.localStorage.setItem('workstationId', response.data.workstationId) let workstationId = window.localStorage.getItem('workstationId') if (workstationId == '1') { @@ -410,7 +291,7 @@ // 选择工程确认 const handleup = async () => { try { const response = await request.post('/loadGlass/up-patten-usage/saveUpPattenUsage', { const response = await request.post('/loadGlass/up-patten-usage/selectUpPattenUsage', { engineerId: selectedProjectNo.value, }) if (response.code == 200) { @@ -418,7 +299,10 @@ ElMessage.success(response.message); // window.location.reload() dialogFormVisible.value = false; tableData.splice(0, tableData.length, ...response.data); selectedProjectNo.value = '' markingMachineStatus.value = '#911005'; cuttingMachineStatus.value = '#911005'; } else { // 请求失败,显示错误消息 ElMessage.error(response.msg); @@ -431,9 +315,14 @@ } // 开始上片 const handle = async () => { if (markingMachineStatus.value === 'green' && cuttingMachineStatus.value === 'green') { try { let engineeringId = window.localStorage.getItem('engineeringId') console.log(engineeringId); const response = await request.post('/loadGlass/engineering/engineering/changeTask', { engineerId: selectedProjectNoa.value, engineerId: engineeringId, state: 1, }) if (response.code == 200) { @@ -441,7 +330,6 @@ ElMessage.success(response.message); // window.location.reload() blind.value = false; tableData.splice(0, tableData.length, ...response.data); selectedProjectNoa.value = '' } else { // 请求失败,显示错误消息 @@ -452,6 +340,10 @@ // 处理错误 console.error(error); } } else if (markingMachineStatus.value === '#911005' || cuttingMachineStatus.value === '#911005') { // 提示用户打标机未就绪 ElMessage.warning('请确认打标机和切割机的就绪状态!'); } } // 暂停 const handlea = async () => { @@ -459,17 +351,13 @@ let engineeringId = window.localStorage.getItem('engineeringId') console.log(engineeringId); if (engineeringId !== '') { const response = await request.post('/loadGlass/engineering/engineering/changeTask', { const response = await request.post('/loadGlass/engineering/engineering/pauseTask', { engineeringId: engineeringId, state: 0, }) if (response.code == 200) { // 绑定成功,处理逻辑 ElMessage.success(response.message); // window.location.reload() blinda.value = false; // tableData.value = response.data // tableData.value = []; tableData.splice([]); } else { // 请求失败,显示错误消息 @@ -494,7 +382,7 @@ let engineeringId = window.localStorage.getItem('engineeringId') console.log(engineeringId); if (engineeringId !== '') { const response = await request.post('/loadGlass/engineering/engineering/changeTask', { const response = await request.post('/loadGlass/engineering/engineering/pauseTask', { engineeringId: engineeringId, state: 0, }) @@ -522,7 +410,6 @@ } } onMounted(fetchTableData); onMounted(fetchTableDataa); function getStatusText(state: number) { switch (state) { case 0: @@ -533,115 +420,63 @@ return '上片中'; case 100: return '已完成'; default: return '未知状态'; } } function getStatusType(state: number) { // 这里假设只有100时类型不是success,其他都是success return state === 100 ? 'info' : 'success'; // 根据需要调整类型 switch (state) { case 0: return 'warning'; case 1: return 'primary'; case 2: return 'primary'; case 100: return 'success'; } } // const open = () => { // ElMessageBox.confirm( // '是否删除该条信息?', // '提示', // { // confirmButtonText: '是', // cancelButtonText: '取消', // type: 'warning', // } // ) // .then(() => { // ElMessage({ // type: 'success', // message: '删除成功!', // }) // }) // .catch(() => { // ElMessage({ // type: 'info', // message: '删除失败', // }) // }) // } // 开始上片 const handleBind = (row) => { // engineeringId.value = row.engineeringId; blind.value = true; // 打开绑定架子对话框 }; // 暂停 const handleBinda = (row) => { // engineeringId.value = row.engineeringId; blinda.value = true; // 打开绑定架子对话框 blinda.value = true; }; // 停止任务 const handleBindb = (row) => { // engineeringId.value = row.engineeringId; blindb.value = true; // 打开绑定架子对话框 blindb.value = true; }; // 删除 const handleBindRacka = (row) => { workstationId.value = row.workstationId; // 假设rackNumber是架号字段的属性名 adda.value = true; // 打开绑定架子对话框 workstationId.value = row.workstationId; adda.value = true; }; const gridOptions = reactive({ border: "full",//表格加边框 keepSource: true,//保持源数据 align: 'center',//文字居中 stripe:true,//斑马纹 rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮 id: 'OrderList', showFooter: true,//显示脚 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 }, data: [ { 'id': '1', 'long': '5', 'wide': '1005', 'thick': '183.6', } ], }) // 定义一个响应式引用,用于存储颜色状态 const markingMachineStatus = ref('#911005'); const cuttingMachineStatus = ref('#911005'); // 定义一个方法来改变颜色状态 const confirmMarkingMachine = () => { markingMachineStatus.value = 'green'; }; const confirmCuttingMachine = () => { cuttingMachineStatus.value = 'green'; }; </script> <template> <div> <div id="dotClass"> <div>打标机就绪状态:</div> <i style="margin-top: 2px; background-color: green;width:18px; height:18px; border-radius: 50%; display: block"></i> <el-button style="margin-left: 30px;margin-top: -3px;">手动确认</el-button> <div>打标机就绪状态:</div> <i :style="{ marginTop: '2px', backgroundColor: markingMachineStatus, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i> <el-button @click="confirmMarkingMachine" style="margin-left: 30px;margin-top: -3px;">手动确认</el-button> <div style="margin-left: 70px;">切割机就绪状态:</div> <i style="margin-top: 2px; background-color: #911005 ;width:18px; height:18px; border-radius: 50%; display: block"></i> <el-button style="margin-left: 30px;margin-top: -3px;" >手动确认</el-button> <i :style="{ marginTop: '2px', backgroundColor: cuttingMachineStatus, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i> <el-button @click="confirmCuttingMachine" style="margin-left: 30px;margin-top: -3px;" >手动确认</el-button> </div> <el-button style="margin-top: 5px;margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisible = true">选择工程</el-button> <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="primary" @click="handleBind">开始上片</el-button> <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="primary" @click="handleBind">开始上片</el-button> <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="warning" @click="handleBinda">暂停</el-button> <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="danger" @click="handleBindb">停止任务</el-button> @@ -655,7 +490,7 @@ > <el-table-column prop="engineeringId" label="工程号" width="200" align="center"/> <el-table-column prop="width" label="原片宽" align="center"/> <el-table-column prop="height" label="原片长" align="center"/> <el-table-column prop="height" label="原片高" align="center"/> <el-table-column prop="filmsId" label="膜系" align="center"/> <el-table-column prop="layoutSequence" label="数量" align="center"/> <el-table-column prop="thickness" label="厚度" align="center"/> @@ -670,34 +505,11 @@ {{ getStatusText(scope.row.state) }} </el-tag> </template> <!-- <template #default="scope"> <el-tag type="success" >{{ scope.row.state==0?"等待中":"上片中" }}</el-tag> </template> --> </el-table-column> </el-table> </div> </el-card> <el-dialog v-model="blind" top="24vh" width="30%" title="是否开始上片?" > <div style="margin-left: 50px;margin-bottom: 10px;"> <el-form-item label="工程号:" :required="true"> <el-select v-model="selectedProjectNoa" filterable clearable placeholder="请选择工程" style="width: 220px" @input="handleInputChangea" > <el-option v-for="item in titleSelectJsona['processTypea']" :key="item.id" :label="item.engineerId" :value="item.engineerId" /> </el-select> </el-form-item> </div> <el-dialog v-model="blind" top="30vh" width="25%" title="是否开始上片?" > <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="handle"> @@ -707,16 +519,6 @@ </div> </template> </el-dialog> <!-- <el-dialog v-model="blind" top="30vh" width="25%" title="是否开始上片?" > <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="handle"> 确认 </el-button> <el-button @click="blind = false">取消</el-button> </div> </template> </el-dialog> --> <el-dialog v-model="blinda" top="30vh" width="25%" title="是否暂停?" > <template #footer> <div id="dialog-footer"> @@ -743,9 +545,10 @@ <div id="overlaya" v-show="flakea"></div> </div> <div style="margin-top: -350px;margin-left: 650px;"> <el-table :data="tableDataa" border style="width: 60%" <el-table :data="tableDataa" border style="width: 70%" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" > <el-table-column prop="workstationId" align="center" label="工位" min-width="50" /> <el-table-column prop="patternWidth" align="center" label="宽" min-width="80" /> <el-table-column prop="patternHeight" align="center" label="高" min-width="80" /> <el-table-column prop="filmsId" align="center" label="膜系" min-width="80" /> @@ -767,15 +570,44 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> <el-form-item label="高:" :required="true" style="width: 14vw"> <el-input v-model="patternHeight" autocomplete="off" /> </el-form-item></div></div> <el-form-item label="宽:" :required="true" style="width: 14vw"> <el-select v-model="selectedValue" filterable clearable placeholder="请选择宽" style="width: 220px" @input="handleInputChangea" > <el-option v-for="item in selectOptions" :key="item.id" :label="item.label" :value="item.value" /> </el-select> </el-form-item> </div></div> </el-col> <el-col :span="9"> <div id="dta" style="font-size: 15px;"> <div> <el-form-item label="宽:" :required="true" style="width: 14vw"> <el-input v-model="patternWidth" autocomplete="off" /> <el-form-item label="高:" :required="true" style="width: 14vw"> <el-select v-model="selectedValuea" filterable clearable placeholder="请选择高" style="width: 220px" @input="handleInputChangea" > <el-option v-for="item in selectOptionsa" :key="item.id" :label="item.label" :value="item.value" /> </el-select> </el-form-item></div> </div> </el-col> @@ -785,14 +617,43 @@ <div id="dt" style="font-size: 15px;"> <div> <el-form-item label="膜系:" :required="true" style="width: 14vw;"> <el-input v-model="filmsId" autocomplete="off" /> <el-select v-model="selectedValueb" filterable clearable placeholder="请选择膜系" style="width: 220px" @input="handleInputChangea" > <el-option v-for="item in selectOptionsb" :key="item.id" :label="item.label" :value="item.value" /> </el-select> </el-form-item></div></div> </el-col> <el-col :span="9"> <div id="dta" style="font-size: 15px;"> <div> <el-form-item label="厚度:" :required="true" style="width: 14vw"> <el-input v-model="patternThickness" autocomplete="off" /> <el-select v-model="selectedValuec" filterable clearable placeholder="请选择厚度" style="width: 220px" @input="handleInputChangea" > <el-option v-for="item in selectOptionsc" :key="item.id" :label="item.label" :value="item.value" /> </el-select> <!-- <el-input v-model="patternThickness" autocomplete="off" /> --> </el-form-item></div></div> </el-col> </el-row> @@ -828,8 +689,6 @@ </template> </el-dialog> </div> <el-dialog v-model="dialogFormVisible" top="24vh" width="30%" title="工程" > <div style="margin-left: 50px;margin-bottom: 10px;"> <el-form-item label="工程号:" :required="true"> UI-Project/src/views/User/permissions.vue
@@ -6,6 +6,7 @@ const add = ref(false) const adda = ref(false) const editingUser = ref({}); // 用于存储当前编辑的用户数据 import request from "@/utils/request" import { ref, onMounted } from "vue"; // import { ref } from 'vue' @@ -83,6 +84,11 @@ console.error(error); } }; // 处理编辑按钮点击 function handleEdit(row) { editingUser.value = { ...row }; // 使用展开运算符复制当前行数据 adda.value = true; // 显示对话框 } // 编辑 const getTableRowa = async () => { try { @@ -95,7 +101,8 @@ if (response.code == 200) { // 绑定成功,处理逻辑 ElMessage.success(response.message); add.value = false; editingUser.value = {}; adda.value = false; tableData.value = response.data; } else { // 请求失败,显示错误消息 @@ -204,7 +211,7 @@ <el-table-column prop="id" align="center" label="排序" min-width="140"/> <el-table-column fixed="right" label="操作" align="center"> <template #default="scope"> <el-button size="mini" type="text" plain @click="adda = true">编辑</el-button> <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">编辑</el-button> <el-button size="mini" type="text" plain @click="opena(scope.row)">删除</el-button> </template> </el-table-column> @@ -217,7 +224,7 @@ <el-table-column prop="id" align="center" label="排序" min-width="180" /> <el-table-column fixed="right" label="操作" align="center" width="200"> <template #default="scope"> <el-button size="mini" type="text" plain @click="adda = true">编辑</el-button> <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">编辑</el-button> <el-button size="mini" type="text" plain @click="opena(scope.row)">删除</el-button> </template> </el-table-column> @@ -289,14 +296,14 @@ </el-dialog> <el-dialog v-model="adda" top="23vh" width="37%" title="修改菜单" > <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> <el-form size="mini" label-width="150px"> <el-form :model="editingUser" ref="formRef" size="mini" label-width="150px"> <el-form label-width="100px" label-position="right"> <el-row style="margin-top: -15px;margin-bottom: -2px;"> <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> <el-form-item label="菜单栏:" :required="true" style="width: 25vw"> <el-input v-model="menuName" autocomplete="off" /> <el-input v-model="editingUser.menuName" autocomplete="off" /> </el-form-item></div></div> </el-col> </el-row> @@ -305,7 +312,7 @@ <div id="dt" style="font-size: 15px;"> <div> <el-form-item label="链接:" :required="true" style="width: 25vw"> <el-input v-model="url" autocomplete="off" /> <el-input v-model="editingUser.url" autocomplete="off" /> </el-form-item></div></div> </el-col> </el-row> @@ -314,7 +321,7 @@ <div id="dt" style="font-size: 15px;"> <div> <el-form-item label="排序:" :required="true" style="width: 25vw"> <el-input v-model="parentId" autocomplete="off" /> <el-input v-model="editingUser.parentId" autocomplete="off" /> </el-form-item></div></div> </el-col> </el-row> UI-Project/src/views/User/rolelist.vue
@@ -5,7 +5,7 @@ const router = useRouter() const add = ref(false) const adda = ref(false) const editingUser = ref({}); // 用于存储当前编辑的用户数据 import request from "@/utils/request" import { ref, onMounted } from "vue"; // import { ref } from 'vue' @@ -73,6 +73,11 @@ console.error(error); } }; // 处理编辑按钮点击 function handleEdit(row) { editingUser.value = { ...row }; // 使用展开运算符复制当前行数据 adda.value = true; // 显示对话框 } // 编辑 const getTableRowa = async () => { try { @@ -84,7 +89,8 @@ if (response.code == 200) { // 绑定成功,处理逻辑 ElMessage.success(response.message); add.value = false; editingUser.value = {}; adda.value = false; tableData.value = response.data; } else { // 请求失败,显示错误消息 @@ -177,7 +183,7 @@ <el-table-column prop="name" align="center" label="角色" min-width="180" /> <el-table-column fixed="right" label="操作" align="center" width="200"> <template #default="scope"> <el-button size="mini" type="text" plain @click="adda = true">编辑</el-button> <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">编辑</el-button> <el-button size="mini" type="text" plain @click="opena(scope.row)">删除</el-button> </template> </el-table-column> @@ -212,14 +218,14 @@ </el-dialog> <el-dialog v-model="adda" top="23vh" width="37%" title="修改角色" > <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> <el-form size="mini" label-width="150px"> <el-form :model="editingUser" ref="formRef" size="mini" label-width="150px"> <el-form label-width="100px" label-position="right"> <el-row style="margin-top: -15px;margin-bottom: -2px;"> <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> <el-form-item label="角色:" :required="true" style="width: 25vw"> <el-input v-model="name" autocomplete="off" /> <el-input v-model="editingUser.name" autocomplete="off" /> </el-form-item></div></div> </el-col> </el-row> UI-Project/src/views/User/userlist.vue
@@ -5,7 +5,7 @@ const router = useRouter() const add = ref(false) const adda = ref(false) const editingUser = ref({}); // 用于存储当前编辑的用户数据 import request from "@/utils/request" import { ref, onMounted } from "vue"; // import { ref } from 'vue' @@ -94,6 +94,11 @@ console.error('Error fetching options:', error); } }; // 处理编辑按钮点击 function handleEdit(row) { editingUser.value = { ...row }; // 使用展开运算符复制当前行数据 adda.value = true; // 显示对话框 } // 添加 const getTableRow = async () => { try { @@ -129,7 +134,8 @@ if (response.code == 200) { // 绑定成功,处理逻辑 ElMessage.success(response.message); add.value = false; editingUser.value = {}; adda.value = false; tableData.value = response.data; } else { // 请求失败,显示错误消息 @@ -230,7 +236,7 @@ <el-table-column fixed="right" label="操作" align="center" width="200"> <template #default="scope"> <el-button size="mini" type="text" plain @click="open(scope.row)">重置密码</el-button> <el-button size="mini" type="text" plain @click="adda = true">编辑</el-button> <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">编辑</el-button> <el-button size="mini" type="text" plain @click="opena(scope.row)">删除</el-button> </template> </el-table-column> @@ -300,14 +306,14 @@ </el-dialog> <el-dialog v-model="adda" top="23vh" width="37%" title="修改用户" > <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;"> <el-form size="mini" label-width="150px"> <el-form :model="editingUser" ref="formRef" size="mini" label-width="150px"> <el-form label-width="100px" label-position="right"> <el-row style="margin-top: -15px;margin-bottom: -2px;"> <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> <el-form-item label="用户名:" :required="true" style="width: 25vw"> <el-input v-model="userName" autocomplete="off" /> <el-input v-model="editingUser.userName" autocomplete="off" /> </el-form-item></div></div> </el-col> </el-row> @@ -315,6 +321,13 @@ <el-col :span="6"> <div id="dt" style="font-size: 15px;"> <div> <!-- <el-table-column align="center" label="角色" min-width="80"> <template #default="scope"> <el-tag v-for="role in scope.row.roleList"> {{role.name}} </el-tag> </template> </el-table-column> --> <el-form-item label="角色:" :required="true" style="width: 25vw;"> <el-select v-model="selectedProjectNoa" @@ -339,7 +352,7 @@ <div> <el-form-item label="密码:" :required="true" style="width: 25vw;"> <el-input style="width: 340px;" v-model="password" v-model="editingUser.password" autocomplete="off" :prefix-icon="Lock" show-password/> hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
@@ -37,7 +37,7 @@ optimizeGlassinfos = optimizeProjectMapper.selectJoinList(OptimizeGlassinfo.class, new MPJQueryWrapper<OptimizeProject>() .select("b.process_id,t.type,b.width,b.height,t.glass_thickness,t.glass_type,b.p_width,b.p_height,b.layer, b.total_layer, b.stock_id,b.heat_layout_id,b.heat_layout_sort,b.x_axis,b.y_axis,b.project_no,b.glass_id") .leftJoin("optimize_detail b on t.project_no=b.project_no") .eq("t.state",100) //.eq("t.state",100) .eq("t.project_no", engineeringId)); } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
@@ -3,6 +3,7 @@ import com.github.yulichang.base.MPJBaseService; import com.mes.pp.entity.OptimizeProject; import com.mes.pp.entity.request.OptimizeRequest; import com.mes.uppattenusage.entity.UpPattenUsage; import java.util.List; @@ -26,4 +27,10 @@ * 将工程信息更新状态为已领取 */ void changeTask(String engineeringId, int i); /** * 完成工程任务改为300 * * @return */ boolean overTask(UpPattenUsage sequence, int state); } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
@@ -9,6 +9,7 @@ import com.mes.pp.entity.request.OptimizeRequest; import com.mes.pp.mapper.OptimizeProjectMapper; import com.mes.pp.service.OptimizeProjectService; import com.mes.uppattenusage.entity.UpPattenUsage; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -29,13 +30,14 @@ @Override public List<OptimizeProject> listByState(OptimizeRequest optimizeRequest) { log.info("将参数传入到查询类里,工程号做非空判断模糊查询"); //将参数传入到查询类里,工程号做非空判断模糊查询 LambdaQueryWrapper<OptimizeProject> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(OptimizeProject::getState,optimizeRequest.getState()) .or(qw -> qw.eq(OptimizeProject::getState, 200)) .like(StringUtils.isNotBlank(optimizeRequest.getProjectNo()),OptimizeProject::getProjectNo,optimizeRequest.getProjectNo()) //.groupBy(OptimizeProject::getProjectNo) ; log.info("返回工程信息"); //返回工程信息 return this.list(wrapper); } @@ -50,6 +52,17 @@ } @Override public boolean overTask(UpPattenUsage sequence, int state) { if(sequence.getState()==100){ UpdateWrapper<OptimizeProject> wrapper=new UpdateWrapper<>(); wrapper.eq("project_no",sequence.getEngineeringId()) .set("state",state); boolean updateSuccess = this.update(wrapper); log.info("工程完成更新状态{}",updateSuccess); } return false; } } hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/controller/EngineeringController.java
@@ -3,6 +3,9 @@ import com.mes.engineering.entity.Engineering; import com.mes.engineering.service.EngineeringService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.pp.service.OptimizeProjectService; import com.mes.uppattenusage.entity.UpPattenUsage; import com.mes.uppattenusage.service.UpPattenUsageService; import com.mes.utils.Result; @@ -29,17 +32,51 @@ private EngineeringService engineeringService; @Autowired private UpPattenUsageService upPattenUsageService; @Autowired private GlassInfoService glassInfoService; @Autowired private OptimizeProjectService optimizeProjectService; @ApiOperation("开始/暂停任务/传递工程号和状态,开始是1 暂停是0") @PostMapping("/changeTask") //调用上片任务 @PostMapping("/pauseTask") //调用上片任务 @ResponseBody public Result <List<UpPattenUsage>> changeTask(@RequestBody Engineering engineering) { public Result <List<UpPattenUsage>> pauseTask(@RequestBody Engineering engineering) { boolean work=engineeringService.changeTask(engineering.getEngineerId(),engineering.getState()); List<UpPattenUsage> glass = upPattenUsageService.prioritylist(); log.info("StartorStop:{},{}", work,engineering); return Result.build(200, engineering.getEngineerId(),glass); } @ApiOperation("开始上片") @PostMapping("/changeTask") //调用上片任务 @ResponseBody public Result <Boolean> changeTask(@RequestBody Engineering engineering) { log.info("engineeringId:{}", engineering); UpPattenUsage upPattenUsage = upPattenUsageService.selectedEngineering(engineering.getEngineerId()); if (upPattenUsage != null) { boolean work=engineeringService.changeTask(engineering.getEngineerId(),engineering.getState()); List<UpPattenUsage> glass = upPattenUsageService.prioritylist(); optimizeProjectService.changeTask(engineering.getEngineerId(), 200); return Result.build(200, "已保存过", work); } else { List<UpPattenUsage> upPattenUsages = upPattenUsageService.selectSaveUpPattenUsage(engineering.getEngineerId()); log.info("将查询出的UpPattenUsage数据保存到数据库表里"); upPattenUsageService.saveUpPattenUsage(upPattenUsages); log.info("从PP表查询glassinfo的数据并保存到表里"); List<GlassInfo> glassinfo = glassInfoService.selectGlassInfo(engineering.getEngineerId()); glassInfoService.saveGlassInfo(glassinfo); log.info("从PP表查询engineering的数据并保存到表里"); List<Engineering> listEngineering = engineeringService.selectEngineering(engineering.getEngineerId()); engineeringService.saveEngineering(listEngineering); log.info("更改pp表状态为已领取"); //将engineering表状态为正在上片 boolean work=engineeringService.changeTask(engineering.getEngineerId(),engineering.getState()); List<UpPattenUsage> glass = upPattenUsageService.prioritylist(); optimizeProjectService.changeTask(engineering.getEngineerId(), 200); return Result.build(200, "保存成功", work); } } @ApiOperation("查询可以上片的工程号") @GetMapping("/selectTask") //调用上片任务 @ResponseBody hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java
@@ -20,7 +20,7 @@ * 开始/暂停任务 * @return boolean */ boolean changeTask(String projectId, Integer state); boolean changeTask(String projectId, Integer state); /** * 查询钢化信息 * @return List<Engineering> @@ -35,6 +35,9 @@ * @return Engineering */ Engineering selectInitiate(Integer state); /** * 查询上片任务 * @return Engineering */ List<Engineering> selectTask(); } hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
@@ -1,9 +1,13 @@ package com.mes.job; import cn.hutool.json.JSONObject; import com.mes.common.S7object; import com.mes.device.PlcParameterObject; import com.mes.engineering.entity.Engineering; import com.mes.engineering.service.EngineeringService; import com.mes.pp.entity.OptimizeProject; import com.mes.pp.service.OptimizeProjectService; import com.mes.tools.WebSocketServer; import com.mes.uppattenusage.entity.UpPattenUsage; import com.mes.uppattenusage.service.UpPattenUsageService; import com.mes.workstation.entity.UpWorkstation; @@ -12,6 +16,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; /** * @author SNG-010 @@ -26,6 +33,9 @@ private EngineeringService engineeringService; @Autowired private UpPattenUsageService upPattenUsageService; @Autowired private OptimizeProjectService optimizeProjectService; PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; @@ -52,16 +62,16 @@ int workId = upwork.getWorkstationId();//工位id double width = upwork.getPatternWidth();//宽度 double height = upwork.getPatternHeight();//高度 S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("WorkId").getAddress(), (short) workId); S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("GlassWidth").getAddress(), (short) width); S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("GlassHeight").getAddress(), (short) height); S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("MesToPlc").getAddress(), (short) 1); S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("WorkId").getAddress(), workId); S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("GlassWidth").getAddress(), (long) width); S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("GlassHeight").getAddress(), (long) height); S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlc").getAddress(), 1); //更改上片表状态 upPattenUsageService.updateUpPattenUsageState(upPattenUsage, workId); } } if ("1".equals(mesToPlc) && "0".equals(loadRequest)) { if("1".equals(mesToPlc)&& "0".equals(loadRequest)){ //请求字为零时,任务字清零 S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlc").getAddress(), 0); } @@ -73,7 +83,7 @@ } @Scheduled(fixedDelay = 300) public void plcLoadGlassReport() { public void plcLoadGlassReport(){ //获取是否有汇报 String loadStatus = plcParameterObject.getPlcParameter("PlcStatus").getValue(); if (loadStatus != null) { @@ -81,7 +91,8 @@ switch (loadStatus) { case "1": log.info("收到汇报任务完成"); S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlcStatus").getAddress(), 1); //减少工位数量,完成任务状态 overTask(loadStatus, 100); break; case "2": log.info("收到汇报未完成任务"); @@ -93,15 +104,40 @@ overTask(loadStatus, 0); break; case "0": log.info("收到汇报清0状态"); //减少工位数量,完成任务状态 overTask(loadStatus, 100); S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlcStatus").getAddress(), 0); break; } } } public void overTask(String loadStatus, int state) { @Scheduled(fixedDelay = 300) public void loadGlassHome(){ JSONObject jsonObject = new JSONObject(); //正在进行的任务 List<UpPattenUsage> upPattenUsages = upPattenUsageService.prioritylist(); jsonObject.append("prioritylist", upPattenUsages); //工位信息 List<UpWorkstation> upWorkstations = upWorkstationService.list(); jsonObject.append("list", upWorkstations); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("loadGlass"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); List<String> messages = webserver.getMessages(); if (!messages.isEmpty()) { // // 将最后一个消息转换为整数类型的列表 webserver.clearMessages(); } } else { log.info("Home is closed"); } } } } public void overTask(String loadStatus, int state) { UpPattenUsage upPattenUsage = upPattenUsageService.selectOverTask(); if (upPattenUsage != null) { log.info("收到汇报清{}状态", loadStatus); @@ -109,8 +145,12 @@ upWorkstationService.reduceWorkstationNumber(upPattenUsage.getState()); //完成上片表状态 upPattenUsageService.updateUpPattenUsageState(upPattenUsage, state); S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlcStatus").getAddress(), 0); //判断是否是最后一块玻璃 UpPattenUsage sequence=upPattenUsageService.selectSequence(upPattenUsage); //如果是最后一块时完成工程任务 optimizeProjectService.overTask(sequence,300); } S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlcStatus").getAddress(), 1); } } hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java
@@ -45,32 +45,14 @@ return Result.build(200, "", glass); } @ApiOperation("点击选择工程保存后进行调用,传入工程号") @PostMapping("/saveUpPattenUsage") //查询现在上片机的玻璃信息 @ApiOperation("选择工程号后显示上片顺序预览") @PostMapping("/selectUpPattenUsage") //查询现在上片机的玻璃信息 @ResponseBody public Result<Engineering> saveUpPattenUsage(@RequestBody Engineering engineering) { log.info("engineeringId:{}", engineering); UpPattenUsage upPattenUsage= upPattenUsageService.selectedEngineering(engineering.getEngineerId()); if (upPattenUsage!=null){ log.info("已保存过"); return Result.build(200, "已保存的工程", null); }else { List<UpPattenUsage> upPattenUsages = upPattenUsageService.selectSaveUpPattenUsage(engineering.getEngineerId()); log.info("将查询出的UpPattenUsage数据保存到数据库表里"); upPattenUsageService.saveUpPattenUsage(upPattenUsages); log.info("从PP表查询glassinfo的数据并保存到表里"); List<GlassInfo> glassinfo=glassInfoService.selectGlassInfo(engineering.getEngineerId()); glassInfoService.saveGlassInfo(glassinfo); log.info("从PP表查询engineering的数据并保存到表里"); List<Engineering> listEngineering= engineeringService.selectEngineering(engineering.getEngineerId()); engineeringService.saveEngineering(listEngineering); log.info("更改pp表状态为已领取"); optimizeProjectService.changeTask(engineering.getEngineerId(), 200); // List<UpPattenUsage> data=upPattenUsageService.prioritylist(); // log.info("显示保存后的上片顺序表"); return Result.build(200, "", engineering); public Result<List<UpPattenUsage>> selectUpPattenUsage(@RequestBody Engineering engineering) { List<UpPattenUsage> upPattenUsages = upPattenUsageService.selectSaveUpPattenUsage(engineering.getEngineerId()); return Result.build(200, "", upPattenUsages); } } } hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java
@@ -41,5 +41,11 @@ * @return UpPattenUsage */ UpPattenUsage selectOverTask(); /** * 查询上片最后一块的玻璃 * @return UpPattenUsage */ UpPattenUsage selectSequence(UpPattenUsage upPattenUsage); } hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
@@ -40,7 +40,7 @@ public List<UpPattenUsage> prioritylist() { //获取正在上片的任务id Engineering engineering= engineeringService.selectInitiate(1); log.info("将参数传入到查询类里{}",engineering); //log.info("将参数传入到查询类里{}",engineering); if(engineering!=null){ LambdaQueryWrapper<UpPattenUsage> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(UpPattenUsage::getEngineeringId,engineering.getEngineerId()); @@ -117,5 +117,15 @@ return this.getOne(wrapper); } @Override //获取最后一块玻璃 public UpPattenUsage selectSequence(UpPattenUsage upPattenUsage) { QueryWrapper<UpPattenUsage>wrapper = new QueryWrapper<>(); wrapper.eq("engineering_id",upPattenUsage.getEngineeringId()) .orderByDesc("layout_sequence") .last("limit 1"); return this.getOne(wrapper); } } hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/LoadGlassModuleApplicationTest.java
@@ -4,6 +4,8 @@ import com.mes.engineering.service.EngineeringService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.pp.entity.OptimizeProject; import com.mes.pp.entity.request.OptimizeRequest; import com.mes.pp.service.OptimizeProjectService; import com.mes.uppattenusage.entity.UpPattenUsage; import com.mes.uppattenusage.service.impl.UpPattenUsageServiceImpl; @@ -72,23 +74,31 @@ engineeringService.saveEngineering(glass); log.info("glassinfo:{}", Arrays.asList(glass)); } @Test public void textengineering2(){ //更新工程表状态为已领取 //optimizeProjectService.changeTask("P24050801",200); engineeringService.changeTask("P24051102",1); } @Test public void textengineering3(){ //判断是否已保存过工程号到上片表 UpPattenUsage upPattenUsage=upPattenUsageService.selectOverTask(); log.info("上片表任务中的数据{}",upPattenUsage); //上片表最后一片 UpPattenUsage upPattenUsage=new UpPattenUsage(); upPattenUsage.setEngineeringId("P24051103"); UpPattenUsage upPattenUsage1=upPattenUsageService.selectSequence(upPattenUsage); log.info("上片表任务中的数据{}",upPattenUsage1); boolean isOver= optimizeProjectService.overTask(upPattenUsage1,300); log.info("更改是否成功{}",isOver); } @Test public void textengineering4(){ //判断是否已保存过工程号到上片表 List<Engineering> engineerings=engineeringService.selectTask(); log.info("上片表任务中的数据{}",engineerings); } @Test public void textengineering5(){ //显示选择工程 OptimizeRequest optimizeRequest=new OptimizeRequest(); optimizeRequest.setState(100); List<OptimizeProject> engineerings=optimizeProjectService.listByState(optimizeRequest); log.info("上片表任务中的数据{}",engineerings); } }