From 1b118e5148c0568d7bb64bf59b9a06712c9a6842 Mon Sep 17 00:00:00 2001
From: IPC-610 <IPC-610@DESKTOP-6LEOOS3>
Date: 星期六, 28 九月 2024 08:12:11 +0800
Subject: [PATCH] 问题修改
---
Web/src/views/device/sortPallet/index.vue | 421 +++++++++++++++++++++++++++++++++-------------------
1 files changed, 266 insertions(+), 155 deletions(-)
diff --git a/Web/src/views/device/sortPallet/index.vue b/Web/src/views/device/sortPallet/index.vue
index db8b0dc..698c6a7 100644
--- a/Web/src/views/device/sortPallet/index.vue
+++ b/Web/src/views/device/sortPallet/index.vue
@@ -1,161 +1,263 @@
<template>
- <el-container>
- <el-card shadow="hover" :body-style="{ paddingBottom: '0', padding: '10px' }" style="width: 100%;display: flex;align-items: center;justify-content: center;">
- <div class="card-page">
- <el-button type="primary" :plain="isPlain1" @click="floorTogglePlain(1)">1鍙风爜鍨涙満鍣ㄤ汉</el-button>
- <el-button type="primary" :plain="isPlain2" @click="floorTogglePlain(2)">2鍙风爜鍨涙満鍣ㄤ汉</el-button>
- <el-button type="primary" :plain="isPlain3" @click="floorTogglePlain(3)">3鍙风爜鍨涙満鍣ㄤ汉</el-button>
- </div>
- </el-card>
- </el-container>
<el-container>
- <div class="card-container">
- <el-card class="other-box-card" v-for="deviceInfo in deviceList" :key="deviceInfo.id">
- <div slot="header" class="linefix">
- <span>{{ deviceInfo.name }}</span>
- <div :class="['lineStatus', { 'device-status-0': deviceInfo.status === 0 }, { 'device-status-1': deviceInfo.status === 1 }]"></div>
+ <el-col>
+ <el-row :span="1">
+ <div class="card-page">
+ <el-button
+ v-for="device in deviceList"
+ :key="device.id"
+ type="primary"
+ :plain="selectedDeviceId !== device.id"
+ @click="chooseDevice(device.id)"
+ >
+ {{ device.name }}
+ </el-button>
+ </div>
+ </el-row>
+ <el-row :span="1">
+ <div class="card-container">
+ <el-card class="other-box-card" v-for="deviceInfo in devicePointData" :key="deviceInfo.id">
+ <div slot="header" class="linefix">
+ <span>{{ deviceInfo.text }}</span>
+ <div :class="['lineStatus', { 'device-status-0': deviceInfo.plcStatus === true }, { 'device-status-1': deviceInfo.plcStatus === false }]"></div>
+ </div>
+ <div class="otherValuefix" >
+ <el-form label-position="left" label-width="90px">
+ <el-form-item label="WMS鏄庣粏鍗曞彿" v-if="deviceInfo.type==5">
+ <el-input v-model="deviceInfo.orderNo" readonly></el-input>
+ </el-form-item>
+ <el-form-item label="浠诲姟鍙�">
+ <el-input v-model="deviceInfo.taskNo"></el-input>
+ </el-form-item>
+ <el-form-item label="鎵规鍙�">
+ <el-input v-model="deviceInfo.lotNo" readonly></el-input>
+ </el-form-item>
+ <el-form-item label="鐗╂枡缂栫爜">
+ <el-input v-model="deviceInfo.skuNo" readonly></el-input>
+ </el-form-item>
+ <el-form-item label="鐗╂枡鍚嶇О">
+ <el-input v-model="deviceInfo.skuName" readonly></el-input>
+ </el-form-item>
+ <el-form-item label="鍒嗘嫞绾跨紪鍙�" v-if="deviceInfo.type==5">
+ <el-input v-model="deviceInfo.lineNo" readonly></el-input>
+ </el-form-item>
+ <el-form-item label="缁戝畾鐘舵��">
+ <el-input :value="deviceInfo.status === '0' ? '鏈粦瀹�' : '宸茬粦瀹�'" readonly></el-input>
+ </el-form-item>
+ <el-form-item label="鎶撶鍝佺">
+ <el-input v-model="deviceInfo.pzNo" readonly></el-input>
+ </el-form-item>
+ <el-form-item label="鎵樼洏鍙�">
+ <el-input readonly></el-input>
+ </el-form-item>
+ <el-form-item label="鎻掔爜绠辨暟" v-if="deviceInfo.type==5">
+ <el-input readonly></el-input>
+ </el-form-item>
+ <el-form-item label="鎷嗗灈绠辨暟" v-if="deviceInfo.type==6">
+ <el-input readonly></el-input>
+ </el-form-item>
+ <el-form-item label="鏁磋泛绠辨暟">
+ <el-input readonly></el-input>
+ </el-form-item>
+ <el-form-item label="瀹屾垚绠辨暟">
+ <el-input readonly></el-input>
+ </el-form-item>
+ <!-- <el-form-item label="WMS涓嬪彂鏁伴噺">
+ <el-input v-model="deviceInfo.qty" readonly></el-input>
+ </el-form-item> -->
+ <el-form-item label="鐘舵��">
+ <el-input :value="deviceInfo.plcStatus ? '鍦ㄧ嚎' : '绂荤嚎'" readonly></el-input>
+ </el-form-item>
+ </el-form>
+ </div>
+ <!-- 璁惧绫诲瀷涓虹爜鍨涙満鍣ㄤ汉 -->
+ <div v-if="deviceInfo.type==5" class="otherButtonfix">
+ <el-form label-position="left">
+ <el-form-item>
+ <el-button type="primary" @click="openBindDialog(deviceInfo.id)">缁戝畾</el-button>
+ <el-button @click="closeBindDialog(deviceInfo.lotNo)">缁撴壒</el-button>
+ </el-form-item>
+ </el-form>
+ </div>
+ </el-card>
</div>
- <div class="otherValuefix" >
- <el-form label-position="left" label-width="90px">
- <el-form-item label="WMS鏄庣粏鍗曞彿">
- <el-input></el-input>
- </el-form-item>
- <el-form-item label="浠诲姟鍙�">
- <el-input v-model="deviceInfo.taskNumber"></el-input>
- </el-form-item>
- <el-form-item label="鐗╂枡缂栫爜">
- <el-input></el-input>
- </el-form-item>
- <el-form-item label="鐗╂枡鍚嶇О">
- <el-input></el-input>
- </el-form-item>
- <el-form-item label="鍖呰鍚嶇О">
- <el-input></el-input>
- </el-form-item>
- <el-form-item label="鐘舵��">
- <el-input></el-input>
- </el-form-item>
- <el-form-item label="鎶撶鍝佺">
- <el-input></el-input>
- </el-form-item>
- <el-form-item label="DB璁板綍绠辨暟">
- <el-input></el-input>
- </el-form-item>
- <el-form-item label="鎵樼洏鍙�">
- <el-input></el-input>
- </el-form-item>
- <el-form-item label="鐮佸灈绠辨暟">
- <el-input></el-input>
- </el-form-item>
- <el-form-item label="WMS涓嬪彂鏁伴噺">
- <el-input></el-input>
- </el-form-item>
- </el-form>
- </div>
- <div class="otherButtonfix">
- <el-form label-position="left">
- <el-form-item>
- <el-button type="primary">缁戝畾</el-button>
- <el-button>缁撴壒</el-button>
- </el-form-item>
- </el-form>
- </div>
- </el-card>
- </div>
- </el-container>
+ </el-row>
+ </el-col>
+
+ <!-- 缁戝畾浠诲姟寮规 -->
+ <el-dialog v-model="bindDialogVisible" title="閫夋嫨鏁版嵁">
+ <el-table
+ :data="bindData"
+ highlight-current-row
+ @row-click="handleRowClick"
+ >
+ <el-table-column prop="orderNo" label="WMS涓嬪彂鍗曞彿" show-overflow-tooltip="" />
+ <el-table-column prop="taskNo" label="浠诲姟鍙�" show-overflow-tooltip="" />
+ <el-table-column prop="lotNo" label="鎵规鍙�" show-overflow-tooltip="" />
+ <el-table-column prop="skuNo" label="鐗╂枡缂栫爜" show-overflow-tooltip="" />
+ <el-table-column prop="skuName" label="鐗╂枡鍚嶇О" show-overflow-tooltip="" />
+ <el-table-column prop="boxType" label="瑙勬牸" show-overflow-tooltip="" />
+ <el-table-column prop="qty" label="鎬荤鏁�/璁″垝绠辨暟/棰勪及绠辨暟" show-overflow-tooltip="" />
+ </el-table>
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="bindDialogVisible = false">鍙栨秷</el-button>
+ <el-button type="primary" @click="confirmBinding">纭</el-button>
+ </div>
+ </el-dialog>
+ </el-container>
</template>
- <script lang="ts" setup>
- import { ref, reactive } from 'vue';
-
- const stackList=[
-
- ];
- const isPlain1 = ref(false);//涓�灞�
- const isPlain2 = ref(true);//浜屽眰
- const isPlain3 = ref(true);//涓夊眰
- //鍒囨崲灞傚钩闈�
- function floorTogglePlain(buttonNumber) {
- if (buttonNumber === 1) {
- isPlain1.value = !isPlain1.value;
- isPlain2.value =true;
- isPlain3.value =true;
-
- } else if (buttonNumber === 2) {
- isPlain2.value = !isPlain2.value;
- isPlain1.value =true;
- isPlain3.value =true;
-
- } else if (buttonNumber === 3) {
- isPlain3.value = !isPlain3.value;
- isPlain1.value =true;
- isPlain2.value =true;
- }
- }
-
- const deviceList=[
- {
- id: 1,
- name: '1鍙风爜鍨涙満鍣ㄤ汉',
- taskNumber: 'T000001',
- taskType: '',
- plc: '',
- wcs: '',
- status: 0
- },
- {
- id: 2,
- name: '2鍙风爜鍨涙満鍣ㄤ汉',
- taskNumber: '',
- taskType: '',
- plc: '',
- wcs: '',
- status: 1
- },
- {
- id: 3,
- name: '3鍙风爜鍨涙満鍣ㄤ汉',
- taskNumber: '',
- taskType: '',
- plc: '',
- wcs: '',
- status: 0
- },{
- id: 4,
- name: '4鍙风爜鍨涙満鍣ㄤ汉',
- taskNumber: '',
- taskType: '',
- plc: '',
- wcs: '',
- status: 1
- },{
- id: 5,
- name: '5鍙风爜鍨涙満鍣ㄤ汉',
- taskNumber: '',
- taskType: '',
- plc: '',
- wcs: '',
- status: 0
- },{
- id: 6,
- name: '6鍙风爜鍨涙満鍣ㄤ汉',
- taskNumber: '',
- taskType: '',
- plc: '',
- wcs: '',
- status: 0
+<script lang="ts" setup>
+import { ref, onMounted } from 'vue';
+import { GetWcsPackPlcList,GetWcsPackStationPlcList,BindTaskForPLC,CloseTaskForPLC } from '/@/api/wcs/wcsDevice';
+import { pageWcsOderTask } from '/@/api/device/wcsOderTask';
+import { ElMessageBox,ElMessage } from 'element-plus';
+import { signalR,stopConnection } from './signalR';
+//杩炴帴signalR 鐩戝惉鍙樻洿
+onMounted(async () => {
+ signalR.off('PublicCheckTask');
+ signalR.on('PublicCheckTask', (data: any) => {
+ //todo 闇�瑕佹祴璇�
+ // if (data.type == 0) {
+
+ // }
+ var index = devicePointData.value.findIndex(s => s.id == data.id);
+ if (index !== -1) {
+ devicePointData.value.splice(index, 1, data);
}
- ]
- </script>
-
- <style scoped>
- .card-container {
- display: grid;
- grid-template-columns: repeat(6, 1fr);
- gap: 10px;
+ });
+});
+
+//璁惧鏁版嵁
+const deviceList=ref<any>([]);
+//璁惧瀵瑰簲宸ヤ綅鏁版嵁
+const devicePointData = ref<any>([]);
+//閫変腑璁惧ID
+const selectedDeviceId=ref<any>();
+//閫変腑宸ヤ綅ID
+const selectedStationId=ref<any>();
+
+const bindDialogVisible = ref(false);
+const bindData = ref<any>([]);
+const selectedRow = ref<any>(null);
+const queryParams = ref<any>({});
+const tableParams = ref({
+ page: 1,
+ pageSize: 20,
+ total: 0,
+});
+
+//鑾峰彇璁惧瀵瑰簲鐨勫伐浣嶆暟鎹�
+const fetchStationData = async (plcId: any) => {
+ const res2 = await GetWcsPackStationPlcList({ plcId });
+ devicePointData.value = res2.data.result;
+};
+// 鑾峰彇璁惧鏁版嵁
+const fetchPLCDeviceData = async () => {
+ var res = await GetWcsPackPlcList();
+ deviceList.value = res.data.result;
+
+ if (deviceList.value.length > 0) {
+ selectedDeviceId.value = deviceList.value[0].id;
+ await fetchStationData(selectedDeviceId.value);
}
- .other-box-card {
- box-sizing: border-box;
+};
+fetchPLCDeviceData();
+
+//鍒囨崲璁惧
+function chooseDevice(id) {
+ selectedDeviceId.value = id;
+ fetchStationData(selectedDeviceId.value);
+}
+
+const handleQuery = async () => {
+ var res = await pageWcsOderTask(Object.assign(queryParams.value, tableParams.value));
+ bindData.value = res.data.result?.items ?? [];
+ tableParams.value.total = res.data.result?.total;
+ };
+//鎵撳紑缁戝畾寮规
+function openBindDialog(id) {
+ selectedStationId.value=null;
+ selectedRow.value=null;
+
+ selectedStationId.value=id;
+ bindDialogVisible.value = true;
+
+ handleQuery();
+}
+//鐐瑰嚮琛屾椂璁剧疆閫変腑琛�
+function handleRowClick(row) {
+ selectedRow.value = row;
+}
+
+//纭缁戝畾鎿嶄綔
+function confirmBinding() {
+ if (selectedRow.value) {
+ //鎵嬪姩缁戝畾浠诲姟鍒癙LC
+ bindTaskForPLC(selectedStationId.value,selectedRow.value.id);
+
+ bindDialogVisible.value = false;
+ } else {
+ ElMessage.error('璇烽�夋嫨瑕佺粦瀹氱殑浠诲姟锛�');
+ }
+}
+const bindTaskForPLC = async (deviceId: any,oderTaskId:any) => {
+ const res = await BindTaskForPLC({ deviceId,oderTaskId });
+ if(res.status==200){
+ ElMessage.success('缁戝畾鎴愬姛锛�');
+ // 鍒锋柊
+ fetchStationData(selectedDeviceId.value);
+ }
+}
+//缁撴壒鎿嶄綔
+function closeBindDialog(lotNo){
+ if(lotNo==''){
+ ElMessage.error('璇ュ伐浣嶆湭缁戝畾浠诲姟锛�');
+ return;
+ }
+ ElMessageBox.confirm(`纭畾瀵硅鎵规浠诲姟缁撴壒鍚�?`, '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning',
+ })
+ .then(async () => {
+ closeTaskForPLC(lotNo);
+ })
+ .catch(() => {});
+}
+const closeTaskForPLC = async (lotNo: string) => {
+ const res = await CloseTaskForPLC({ lotNo });
+ if(res.status==200){
+ ElMessage.success('缁撴壒鎴愬姛锛�');
+ // 鍒锋柊
+ fetchStationData(selectedDeviceId.value);
+ }
+}
+
+</script>
+
+<style scoped>
+ .card-page {
+ width: 100%;
+ height: 50px;
+ display: flex;
+ text-align: center;
+ justify-content: center;
+ align-items: center;
+ text-align: center;
+ }
+ .card-page>button {
+ width: 150px;
+ height: 30px;
+ }
+ .card-container {
+ display: grid;
+ grid-template-columns: repeat(6, 1fr);
+ gap: 10px;
+ }
+ .other-box-card {
+ box-sizing: border-box;
+ background: linear-gradient(135deg, #66ccff, #3399ff);
}
.lineStatus{
position: absolute;
@@ -172,26 +274,35 @@
align-items: center;
height: 40px;
position: relative;
+ color: #fff;
}
.otherValuefix{
width: 100%;
- height: 550px;
+ height: 540px;
padding: 10px;
border-bottom: 1px solid rgb(197, 195, 195);
}
.otherButtonfix{
width: 100%;
- height: 100px;
+ height: 60px;
display: flex;
align-items: center;
justify-content: center;
padding: 0;
}
.device-status-0{
- background-color: #67C23A;
+ background-color: #58f709;
}
.device-status-1{
background-color: red;
}
- </style>
+ .dialog-footer {
+ display: flex;
+ justify-content: flex-end;
+ margin-top: 20px;
+ }
+ .divDisplay{
+ display:none
+ }
+</style>
\ No newline at end of file
--
Gitblit v1.8.0