UI-Project/package-lock.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/package.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/router/index.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/views/User/userlist.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/views/hollow/hollowaluminum.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/views/largescreendisplay/screendisplay.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
UI-Project/package-lock.json
@@ -12,6 +12,7 @@ "@vue-macros/reactivity-transform": "^0.3.23", "axios": "^1.6.8", "chart.js": "^4.4.3", "dayjs": "^1.11.13", "echarts": "^5.5.1", "element-plus": "^2.4.0", "moment": "^2.30.1", @@ -836,9 +837,9 @@ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/dayjs": { "version": "1.11.10", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" "version": "1.11.13", "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" }, "node_modules/debug": { "version": "4.3.4", @@ -2827,9 +2828,9 @@ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "dayjs": { "version": "1.11.10", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" "version": "1.11.13", "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" }, "debug": { "version": "4.3.4", @@ -3224,6 +3225,7 @@ "axios": "^1.6.8", "babel-polyfill": "^6.26.0", "chart.js": "^4.4.3", "dayjs": "*", "echarts": "^5.5.1", "element-plus": "^2.4.0", "http-proxy-middleware": "^3.0.0", @@ -3834,9 +3836,9 @@ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "dayjs": { "version": "1.11.10", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" "version": "1.11.13", "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" }, "debug": { "version": "4.3.4", UI-Project/package.json
@@ -12,6 +12,7 @@ "@vue-macros/reactivity-transform": "^0.3.23", "axios": "^1.6.8", "chart.js": "^4.4.3", "dayjs": "^1.11.13", "echarts": "^5.5.1", "element-plus": "^2.4.0", "moment": "^2.30.1", UI-Project/src/router/index.js
@@ -306,6 +306,11 @@ name: 'hollowslicecage', component: () => import('../views/hollow/hollowslicecage.vue') }, { path: '/hollow/hollowaluminum', name: 'hollowaluminum', component: () => import('../views/hollow/hollowaluminum.vue') }, ] }, /*----------- 管理系统 ----------------*/ UI-Project/src/views/User/userlist.vue
@@ -16,16 +16,30 @@ const password = ref(''); const tableData = ref([]) const slot = ref('') request.post("/loadGlass/sys/user/listByUserName",{ key: '' }).then((res) => { if (res.code == 200) { console.log(res.data); tableData.value = res.data } else { ElMessage.warning(res.msg) } }); // request.post("/loadGlass/sys/user/listByUserName",{ // key: '' // }).then((res) => { // if (res.code == 200) { // console.log(res.data); // tableData.value = res.data // } else { // ElMessage.warning(res.msg) // } // }); const listByUserName = async () => { try { const response = await request.post('/loadGlass/sys/user/listByUserName',{ key: '' }); if (response.code === 200) { tableData.value = response.data } else { ElMessage.warning(response.data); } } catch (error) { console.error('Error fetching options:', error); } }; // 重置密码 const open = async(row) => { try { @@ -58,7 +72,8 @@ processType: [], }) onMounted(() => { fetchOptionsa(''); fetchOptionsa(''); listByUserName(''); }); // 角色下拉选 const fetchOptionsa = async () => { @@ -113,7 +128,8 @@ if (response.code === 200) { ElMessage.success(response.message); add.value = false; tableData.value = response.data; listByUserName(''); // tableData.value = response.data; } else { ElMessage.error(response.message); } @@ -137,7 +153,8 @@ if (response.code === 200) { ElMessage.success(response.message); adda.value = false; tableData.value = response.data; listByUserName(''); tableData.value = response.data; } else { ElMessage.error(response.message); } @@ -161,7 +178,8 @@ const response = await request.post("/loadGlass/sys/user/deleteUser", [row.id]) if (response.code === 200) { ElMessage.success(response.message); } else { listByUserName(''); } else { ElMessage.error(response.msg); } } UI-Project/src/views/hollow/hollowaluminum.vue
New file @@ -0,0 +1,90 @@ <script setup> import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue"; import {useRouter} from "vue-router" import {host, WebSocketHost} from '@/utils/constants' import request from "@/utils/request" import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; import {ElMessage, ElMessageBox} from 'element-plus' import {useI18n} from 'vue-i18n' const router = useRouter() const adda = ref(false) const {t} = useI18n() let language = ref(localStorage.getItem('lang') || 'zh') const tableData = ref([]) const slot = ref('') const requestData = { line: 2001 }; const timeRange = ref([]) const selectValuesa = reactive([]); let socket = null; const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/edgTasks`; const handleMessage = (data) => { tableData.value = data.edgTasks[0] }; onMounted(() => { socket = initializeWebSocket(socketUrl, handleMessage); }); onUnmounted(() => { if (socket) { closeWebSocket(socket); } }); onBeforeUnmount(() => { console.log("关闭了") closeWebSocket(); }); </script> <template> <div style="height: 500px;"> <div> <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading"> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> <el-table height="750" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="glassId" align="center" :label="$t('workOrder.glassID')" min-width="180" /> <el-table-column prop="width" align="center" :label="$t('workOrder.width')" min-width="120" /> <el-table-column prop="height" align="center" :label="$t('workOrder.height')" min-width="80" /> <el-table-column prop="thickness" align="center" :label="$t('workOrder.thickness')" min-width="120" /> <el-table-column prop="glassType" align="center" :label="$t('workOrder.glasstype')" min-width="120" /> <el-table-column prop="line" align="center" :label="$t('workOrder.line')" min-width="120" /> <el-table-column fixed="right" :label="$t('workOrder.operate')" align="center" width="200"> <template #default="scope"> <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('workOrder.breakage') }} </el-button> <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('workOrder.takeout') }} </el-button> </template> </el-table-column> </el-table> </div> </el-card> </div> </div> </template> <style scoped> #dt { display:block; float:left;line-height: 20px;margin-left: 100px;} #dta { display:block; float:left;line-height: 20px;margin-left: 80%;} #dialog-footer{ text-align: center; margin-top: -15px; } #message{ text-align: center; align-items: center; color: black; width: 200px; height: 100px; background-color: #337ecc; margin-left: 28%; } #awatch{ height: 460px; /* margin-top: -60px; */ } </style> UI-Project/src/views/largescreendisplay/screendisplay.vue
@@ -4,13 +4,16 @@ import {host, WebSocketHost} from '@/utils/constants' import request from "@/utils/request" import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; import dayjs from 'dayjs'; import {ElMessage, ElMessageBox} from 'element-plus' import {useI18n} from 'vue-i18n' const router = useRouter() const blinda = ref(false) const blindb = ref(false) const {t} = useI18n() let language = ref(localStorage.getItem('lang') || 'zh') const tableData = ref([]) const timeRange = ref([]) let socket = null; const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/edgTasks`; const handleMessage = (data) => { @@ -37,9 +40,22 @@ console.error(error); } } // 点击下方弹窗 const handlehistorical = (row) => { blindb.value = true; historical() }; // 在组件挂载时设置默认时间范围 onMounted(() => { socket = initializeWebSocket(socketUrl, handleMessage); const endTime = dayjs().startOf('minute'); // 当前时间,精确到分钟 const startTime = endTime.subtract(1, 'day').startOf('minute'); // 当前时间的前一天,精确到分钟 // 设置时间范围为 [开始时间, 结束时间] timeRange.value = [startTime.format('YYYY-MM-DD HH:mm:ss'), endTime.format('YYYY-MM-DD HH:mm:ss')]; }); // onMounted(() => { // socket = initializeWebSocket(socketUrl, handleMessage); // }); onUnmounted(() => { if (socket) { closeWebSocket(socket); @@ -52,11 +68,16 @@ </script> <template> <div style="height: 500px;"> <div> <img src="../../assets/screen.png" alt="" style="max-width: 48%;max-height: 100%;margin-top: 50px;float: left;"> <div class="awatch"> <img src="../../assets/screen.png" alt="Screen" style="max-width: 48%; max-height: 100%; margin-top: 50px; float: left; position: relative;" /> <div class="clickable-area" @click="handlehistorical" style="position: relative; width: 175px; height: 240px; top: 570px; left: 310px;" ></div> </div> <div style="margin-top: 60px;height: 190px;width: 48%;float: right;"> <el-table height="500" ref="table" <div style="height: 190px;width: 48%;float: right;"> <el-table height="500" ref="table" @selection-change="handleSelectionChange" :data="tableDatac" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="orderId" align="center" :label="$t('large.orderId')" min-width="50" /> @@ -85,7 +106,77 @@ </el-table> </div> </div> <!-- 点击下方弹窗 --> <el-dialog v-model="blindb" top="10vh" width="90%"> <div style="display: flex;"> <el-select :placeholder="$t('basicData.coatingtypes')" clearable style="width: 270px;margin-left: 10px;" v-model="taskStat"> <el-option v-for="item in optionsa" :key="item.value" :label="item.label" :value="item.value" /> </el-select> <span class="demonstration" style="margin-left: 20px;margin-top: 3px;">{{ $t('workOrder.time') }}</span> <!-- <el-date-picker v-model="timeRange" type="datetimerange" range-separator="至" :start-placeholder="$t('reportmanage.starttime')" style="margin-left: 15px;" value-format = "YYYY-MM-DD hh:mm:ss" :end-placeholder="$t('reportmanage.endtime')"> </el-date-picker> --> <el-date-picker v-model="timeRange" type="datetimerange" range-separator="至" :start-placeholder="$t('reportmanage.starttime')" style="margin-left: 15px;" value-format="YYYY-MM-DD hh:mm:ss" :end-placeholder="$t('reportmanage.endtime')"> </el-date-picker> <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="sethistorical()">{{ $t('reportmanage.inquire') }}</el-button> </div> <el-table ref="table" style="margin-top: 20px;height: 650px;" :data="tableDatad" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="glassIdIn" align="center" :label="$t('searchOrder.intoglassid')" min-width="80" /> <el-table-column prop="glassIdOut" align="center" :label="$t('searchOrder.outputglassID')" min-width="80" /> <el-table-column prop="currentCell" align="center" :label="$t('sorter.layernow')" min-width="80" /> <el-table-column prop="startCell" align="center" :label="$t('processCard.layer')" min-width="120" /> <el-table-column align="center" :label="$t('film.taskstatus')" min-width="80" prop="taskState" > <template #default="scope"> <el-tag :type="getStatusTypeb(scope.row.taskState)"> {{ getStatusTextb(scope.row.taskState) }} </el-tag> </template> </el-table-column> <el-table-column align="center" :label="$t('film.enabletype')" min-width="80" prop="taskType" > <template #default="scope"> <el-tag :type="getStatusTypea(scope.row.taskType)"> {{ getStatusTexta(scope.row.taskType) }} </el-tag> </template> </el-table-column> <el-table-column prop="createTime" align="center" :label="$t('film.createtime')" min-width="120" /> <el-table-column prop="updateTime" align="center" :label="$t('sorter.updateTime')" min-width="120" /> </el-table> <template #footer> <div id="dialog-footer"> <el-button @click="blindb = false">{{ $t('large.close') }}</el-button> </div> </template> </el-dialog> <el-dialog v-model="blinda" top="5vh" width="85%"> <el-table height="650" ref="table" @selection-change="handleSelectionChange" @@ -144,6 +235,13 @@ } #awatch{ height: 460px; /* margin-top: -60px; */ } .clickable-area { cursor: pointer; /* 指示这是一个可点击的区域 */ text-align: center; /* 如果需要,可以在div中添加文本并居中 */ line-height: 95px; /* 如果需要,使文本垂直居中 */ } /* .awatch{ height: 460px; /* max-width: 100%; */ </style>