Web/src/views/device/sortPallet/index.vue
@@ -1,6 +1,6 @@
<template>
    <el-container>        
        <el-cloum>
        <el-col>
            <el-row :span="1">
                <div class="card-page">
                    <el-button
@@ -14,159 +14,205 @@
                    </el-button>
                </div>  
            </el-row>
            <el-row :span="2">
            <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.name }}</span>
                            <div :class="['lineStatus', { 'device-status-0': deviceInfo.status === 0 }, { 'device-status-1': deviceInfo.status === 1 }]"></div>
                            <span>{{ deviceInfo.text }}</span>
                            <div :class="['lineStatus', 'device-status-0']"></div>
                            <!-- <div :class="['lineStatus', { 'device-status-0': deviceInfo.status === 0 }, { 'device-status-1': deviceInfo.status === 1 }]"></div> -->
                        </div>
                        <div class="otherValuefix" >
                            <el-form label-position="left" label-width="90px">
                                <el-form-item label="WMS明细单号">
                                    <el-input></el-input>
                                    <el-input v-model="deviceInfo.orderNo" readonly></el-input>
                                </el-form-item>
                                <el-form-item label="任务号">
                                    <el-input v-model="deviceInfo.taskNumber"></el-input>
                                <!-- <el-form-item label="任务号">
                                    <el-input v-model=""></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></el-input>
                                    <el-input v-model="deviceInfo.skuNo" readonly></el-input>
                                </el-form-item>
                                <el-form-item label="物料名称">
                                    <el-input></el-input>
                                    <el-input v-model="deviceInfo.skuName" readonly></el-input>
                                </el-form-item>
                                <el-form-item label="包装名称">
                                    <el-input></el-input>
                                <el-form-item label="分拣线编号">
                                    <el-input v-model="deviceInfo.lineNO" readonly></el-input>
                                </el-form-item>
                                <el-form-item label="状态">
                                    <el-input></el-input>
                                <el-form-item label="绑定状态">
                                    <el-input :value="deviceInfo.status === '0' ? '未绑定' : '已绑定'" readonly></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-input v-model="deviceInfo.pzNo" readonly></el-input>
                                </el-form-item>
                                <el-form-item label="托盘号">
                                    <el-input></el-input>
                                    <el-input readonly></el-input>
                                </el-form-item>
                                <el-form-item label="码垛箱数">
                                    <el-input></el-input>
                                <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></el-input>
                                    <el-input v-model="deviceInfo.qty" readonly></el-input>
                                </el-form-item>
                            </el-form>
                        </div>
                        <div class="otherButtonfix">
                        <div v-if="!deviceInfo.text.includes('拆垛')" class="otherButtonfix">
                            <el-form label-position="left">
                                <el-form-item>
                                    <el-button type="primary">绑定</el-button>
                                    <el-button>结批</el-button>
                                    <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>
            </el-row>
        </el-cloum>
    </el-container>
        </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 } from 'vue';
<script lang="ts" setup>
import { ref } from 'vue';
import { GetWcsPackPlcList,GetWcsPackStationPlcList,BindTaskForPLC,CloseTaskForPLC } from '/@/api/wcs/wcsDevice';
import { pageWcsOderTask } from '/@/api/device/wcsOderTask';
import { ElMessageBox,ElMessage } from 'element-plus';
    const deviceList=[
        {
            id: 1,
            name: '1号机器人'
        },
        {
            id: 2,
            name: '2号机器人'
        },
        {
            id: 3,
            name: '3号机器人'
        },
    ];
//设备数据
const deviceList=ref<any>([]);
//设备对应工位数据
const devicePointData = ref<any>([]);
//选中设备ID
const selectedDeviceId=ref<any>();
//选中工位ID
const selectedStationId=ref<any>();
    const devicePointList=[
        {
          id: 1,
          deviceId:1,
          name: '1号机器人 1工位',
          taskNumber: 'T000001',
          taskType: '',
          plc: '',
          wcs: '',
          status: 0
        },
        {
          id: 2,
          deviceId:1,
          name: '1号机器人 2工位',
          taskNumber: '',
          taskType: '',
          plc: '',
          wcs: '',
          status: 1
        },
        {
          id: 3,
          deviceId:1,
          name: '1号机器人 3工位',
          taskNumber: '',
          taskType: '',
          plc: '',
          wcs: '',
          status: 1
        },
        {
          id: 4,
          deviceId:2,
          name: '2号机器人 1工位',
          taskNumber: 'T000001',
          taskType: '',
          plc: '',
          wcs: '',
          status: 0
        },
        {
          id: 5,
          deviceId:2,
          name: '2号机器人 2工位',
          taskNumber: '',
          taskType: '',
          plc: '',
          wcs: '',
          status: 1
        },
        {
          id: 6,
          deviceId:3,
          name: '3号机器人 1工位',
          taskNumber: 'T000001',
          taskType: '',
          plc: '',
          wcs: '',
          status: 0
        }
    ];
const bindDialogVisible = ref(false);
const bindData = ref<any>([]);
const selectedRow = ref<any>(null);
const queryParams = ref<any>({});
const tableParams = ref({
    page: 1,
    pageSize: 10,
    total: 0,
});
    //输送线数据
    let devicePointFirst= devicePointList.filter(device => device.deviceId === deviceList[0].id)
    let devicePointData = ref(devicePointFirst);
    let selectedDeviceId = ref(deviceList[0].id);
//获取设备对应的工位数据
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;
    //切换层平面
    function chooseDevice(id) {
        selectedDeviceId.value = id;
        devicePointData.value = devicePointList.filter(device => device.deviceId === id);
    if (deviceList.value.length > 0) {
      selectedDeviceId.value = deviceList.value[0].id;
      await fetchStationData(selectedDeviceId.value);
    }
  </script>
  <style scoped>
};
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) {
        //手动绑定任务到PLC
        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;
@@ -181,13 +227,13 @@
        height: 30px;
    }
    .card-container {
          display: grid;
          grid-template-columns: repeat(6, 1fr);
          gap: 10px;
            display: grid;
            grid-template-columns: repeat(6, 1fr);
            gap: 10px;
    }
    .other-box-card {
          box-sizing: border-box;
          background: linear-gradient(135deg, #66ccff, #3399ff);
    .other-box-card {
            box-sizing: border-box;
            background: linear-gradient(135deg, #66ccff, #3399ff);
    }
    .lineStatus{
        position: absolute;
@@ -208,13 +254,13 @@
    }
    .otherValuefix{
        width: 100%;
        height: 500px;
        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;
@@ -226,5 +272,13 @@
    .device-status-1{
        background-color: red;
    }
  </style>
    .dialog-footer {
        display: flex;
        justify-content: flex-end;
        margin-top: 20px;
    }
    .divDisplay{
        display:none
    }
</style>