IPC-610
2024-10-15 79ad6097cbe4b4d6cee66dd8ad9c3c1c8f2b5243
Web/src/views/wcs/wcsTask/index.vue
@@ -1,11 +1,12 @@
<template>
  <div class="wcsTask-container">
    <el-row :gutter="8" style="width: 100%; height: 100%; flex: 1">
      <el-col :span="12" :xs="24" style="display: flex; height: 100%; flex: 1">
        <el-card class="full-table" shadow="hover" ::body-style="{ height: 'calc(100% - 51px)' }">
      <el-col :span="14" :xs="24" style="display: flex; height: 100%; flex: 1">
        <el-card class="full-table" shadow="hover" :body-style="{ height: 'calc(100% - 51px)' }">
          <template #header>
                  <el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"><ele-Collection /></el-icon>任务日志
               </template>
            <el-icon size="16"
              style="margin-right: 3px; display: inline; vertical-align: middle"><ele-Collection /></el-icon>任务日志
          </template>
          <el-form :model="queryParams" ref="queryForm" labelWidth="90">
            <el-row>
              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
@@ -34,6 +35,16 @@
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                <el-form-item label="托盘号">
                  <el-input v-model="queryParams.palletNo" clearable="" placeholder="请输入托盘号" />
                </el-form-item>
              </el-col>
              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                <el-form-item label="来源">
                  <el-input v-model="queryParams.origin" clearable="" placeholder="请输入来源" />
                </el-form-item>
              </el-col>
              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
                <el-form-item>
                  <el-button-group style="display: flex; align-items: center;">
@@ -53,10 +64,11 @@
              </el-col>
            </el-row>
          </el-form>
          <el-table :data="tableData" style="width: 100%" v-loading="loading" tooltip-effect="light" row-key="id" @row-click="handleClick"
            @sort-change="sortChange" border="">
          <el-table :data="tableData" style="width: 100%" v-loading="loading" tooltip-effect="light" row-key="id"
            @cell-click="handleClick" @sort-change="sortChange" border="">
            <el-table-column type="index" label="序号" width="55" align="center" />
            <el-table-column prop="taskNo" label="任务号" show-overflow-tooltip="" />
            <el-table-column prop="taskNo" label="任务号" width="130" show-overflow-tooltip="" />
            <el-table-column prop="levels" label="优先级" width="55" show-overflow-tooltip="" />
            <el-table-column prop="taskType" width="85" label="任务类型" show-overflow-tooltip="">
              <template #default="scope">
                <el-tag :type="dv('TaskTypeEnum', scope.row.taskType)?.tagType"> {{ dv('TaskTypeEnum',
@@ -69,27 +81,57 @@
                  scope.row.status)?.name }}</el-tag>
              </template>
            </el-table-column>
            <el-table-column prop="origin" label="来源" show-overflow-tooltip="" />
            <el-table-column prop="startLocate" label="起始位置" show-overflow-tooltip="" />
            <el-table-column prop="endLocate" label="结束位置" show-overflow-tooltip="" />
            <el-table-column prop="palletNo" label="托盘号" show-overflow-tooltip="" />
            <el-table-column prop="qty" label="拆垛箱数" show-overflow-tooltip="" />
            <el-table-column prop="palletQty" 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="unstackingMode" width="100" label="拆垛方式" show-overflow-tooltip="">
              <template #default="scope">
                <span v-if="scope.row.unstackingMode">
                  <el-tag :type="dv('UnstackingModeEnum', scope.row.unstackingMode)?.tagType"> {{
                    dv('UnstackingModeEnum',
                      scope.row.unstackingMode)?.name }}</el-tag>
                </span>
              </template>
            </el-table-column>
            <el-table-column prop="isBind" width="85" label="是否绑定" show-overflow-tooltip="">
              <template #default="scope">
                <span v-if="scope.row.isBind != null">
                  <el-tag :type="dv('IsBindEnum', scope.row.isBind)?.tagType"> {{ dv('IsBindEnum',
                    scope.row.isBind)?.name }}</el-tag>
                </span>
              </template>
            </el-table-column>
            <el-table-column prop="stationNum" label="拆垛工位号" show-overflow-tooltip="" />
            <el-table-column prop="cancelDate" label="取消时间" show-overflow-tooltip="" />
            <el-table-column prop="finishDate" label="完成时间" show-overflow-tooltip="" />
            <el-table-column label="修改记录" width="80" align="center" show-overflow-tooltip>
            <!-- <el-table-column label="修改记录" width="80" align="center" show-overflow-tooltip>
              <template #default="scope">
                <ModifyRecord :data="scope.row" />
              </template>
            </el-table-column>
            <el-table-column label="操作" width="130" align="center" fixed="right" show-overflow-tooltip=""
            </el-table-column> -->
            <el-table-column prop="操作" label="操作" width="200" align="center" fixed="right" show-overflow-tooltip=""
              v-if="auth('wcsTask:complete') || auth('wcsTask:cancell')">
              <template #default="scope">
                <!-- <el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditWcsTask(scope.row)"
              v-auth="'wcsTask:update'"> 编辑 </el-button>
            <el-button icon="ele-Delete" size="small" text="" type="primary" @click="delWcsTask(scope.row)"
              v-auth="'wcsTask:delete'"> 删除 </el-button> -->
                <el-button icon="ele-Check" size="small" text="" type="primary" @click="completeTask(scope.row)"
                  v-auth="'wcsTask:complete'"> 完成 </el-button>
                <el-button icon="ele-Close" size="small" text="" type="primary" @click="cancellTask(scope.row)"
                  v-auth="'wcsTask:cancell'"> 取消 </el-button>
                <template v-if="scope.row.status <= 1">
                  <el-button icon="ele-Check" size="small" text="" type="primary" @click="completeTask(scope.row)"
                    v-auth="'wcsTask:complete'"> 完成 </el-button>
                  <el-button icon="ele-Close" size="small" text="" type="primary" @click="cancellTask(scope.row)"
                    v-auth="'wcsTask:cancell'"> 取消 </el-button>
                </template>
                <template v-if="scope.row.status == 2 && scope.row.origin == 'WMS'">
                  <el-button icon="ele-Upload" size="small" text="" type="primary" @click="uploadTask(scope.row)"
                    v-auth="'wcsTask:cancell'"> 上传 </el-button>
                </template>
                <template v-if="scope.row.status == 0">
                  <el-button icon="ele-Top" size="small" text="" type="primary" @click="topUpTask(scope.row)"
                    v-auth="'wcsTask:cancell'"> 置顶 </el-button>
                </template>
              </template>
            </el-table-column>
          </el-table>
@@ -101,19 +143,20 @@
          <editDialog ref="editDialogRef" :title="editWcsTaskTitle" @reloadTable="handleQuery" />
        </el-card>
      </el-col>
      <el-col :span="12" :xs="24" style="display: flex; height: 100%; flex: 1">
      <el-col :span="10" :xs="24" style="display: flex; height: 100%; flex: 1">
        <el-card class="full-table" shadow="hover" :body-style="{ height: 'calc(100% - 51px)' }">
          <template #header>
                  <el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"><ele-Collection /></el-icon>任务详情
               </template>
            <el-icon size="16"
              style="margin-right: 3px; display: inline; vertical-align: middle"><ele-Collection /></el-icon>任务详情
          </template>
          <el-form :model="queryParams2" ref="queryForm2" labelWidth="90">
            <el-row>
              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
                <el-form-item label="任务号">
                  <el-input v-model="queryParams2.taskNo" clearable="" placeholder="请输入任务号" />
                  <el-input v-model="queryParams2.taskNo" clearable="" placeholder="请输入任务号"style="width: 130px;" />
                </el-form-item>
              </el-col>
              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" style="margin-left: 20px;">
                <el-form-item>
                  <el-button type="primary" icon="ele-Search" @click="handleQuery2"> 查询
                  </el-button>
@@ -122,17 +165,19 @@
              </el-col>
            </el-row>
          </el-form>
          <el-table :data="tableData2" style="width: 100%" v-loading="loading" tooltip-effect="light" row-key="id" border="">
          <el-table :data="tableData2" style="width: 100%" v-loading="loading" tooltip-effect="light" row-key="id"
            border="">
            <el-table-column type="index" label="序号" width="55" align="center" />
            <el-table-column prop="taskNo" label="任务号" show-overflow-tooltip="" />
            <el-table-column prop="plcId" label="交互工位号" show-overflow-tooltip="" />
            <!-- <el-table-column prop="plcId" label="交互工位号" show-overflow-tooltip="" /> -->
            <el-table-column prop="plcName" label="交互位置" show-overflow-tooltip="" />
            <el-table-column prop="interactiveMsg" label="交互信息" show-overflow-tooltip="" />
            <el-table-column label="修改记录" width="80" align="center" show-overflow-tooltip>
            <el-table-column prop="createTime" label="交互时间" show-overflow-tooltip="" />
            <!-- <el-table-column label="修改记录" width="80" align="center" show-overflow-tooltip>
              <template #default="scope">
                <ModifyRecord :data="scope.row" />
              </template>
            </el-table-column>
            </el-table-column> -->
          </el-table>
          <el-pagination v-model:currentPage="tableParams2.page" v-model:page-size="tableParams2.pageSize"
            :total="tableParams2.total" :page-sizes="[10, 20, 50, 100, 200, 500]" size="small" background=""
@@ -146,22 +191,18 @@
<script lang="ts" setup="" name="wcsTask">
import ModifyRecord from '/@/components/table/modifyRecord.vue';
import { ref } from "vue";
import { onMounted, reactive, ref } from 'vue';
import { ElMessageBox, ElMessage } from "element-plus";
import { auth } from '/@/utils/authFunction';
import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
import { getDictLabelByVal as dv } from '/@/utils/dict-utils';
import { formatDate } from '/@/utils/formatTime';
import printDialog from '/@/views/system/print/component/hiprint/preview.vue'
import editDialog from '/@/views/wcs/wcsTask/component/editDialog.vue'
import { pageWcsTask, deleteWcsTask } from '/@/api/wcs/wcsTask';
import { pageWcsTask, finshWcsTask, uploadWcsTask,topUpWcsTask } from '/@/api/wcs/wcsTask';
import { pageWcsMonitorTask } from '/@/api/wcs/wcsTaskMonitor';
import { getAPI } from '/@/utils/axios-utils';
import { SysEnumApi } from '/@/api-services/api';
import commonFunction from '/@/utils/commonFunction';
import { signalR } from './signalR';
const showAdvanceQueryUI = ref(false);
const printDialogRef = ref();
@@ -173,17 +214,41 @@
const queryParams2 = ref<any>({});
const tableParams = ref({
  page: 1,
  pageSize: 10,
  pageSize: 20,
  total: 0,
});
const tableParams2 = ref({
  page: 1,
  pageSize: 10,
  pageSize: 20,
  total: 0,
});
const printWcsTaskTitle = ref("");
const editWcsTaskTitle = ref("");
//连接signalR 监听后台任务日志变更
onMounted(async () => {
  signalR.off('PublicTask');
  signalR.on('PublicTask', (data: any) => {
    console.log(data)
    var listTask = tableData.value.filter(t => t.id == data.id);
    if (listTask.length == 0) {
      tableData.value.unshift(data)
    }
    else {
      //如果已经存在就更新数据
      const index = tableData.value.findIndex(t => t.id == data.id);
      tableData.value.splice(index, 1, data);
    }
  });
  signalR.off('PublicTaskMonitor');
  signalR.on('PublicTaskMonitor', async (data: any) => {
    console.log(data);
    if (queryParams2.value.taskNo == undefined || queryParams2.value.taskNo == data.taskNo) {
      if (tableData2.value.filter(t => t.id == data.id).length == 0) {
        tableData2.value.unshift(data)
      }
    }
  });
});
// 改变高级查询的控件显示状态
const changeAdvanceQueryUI = () => {
  showAdvanceQueryUI.value = !showAdvanceQueryUI.value;
@@ -230,33 +295,82 @@
  editDialogRef.value.openDialog(row);
};
//完成任务
const completeTask = (row: any) => {
}
//取消任务
const cancellTask = (row: any) => {
}
// 点击表格
const handleClick = (row: any, event: any, column: any) => {
   queryParams2.value.taskNo = row.taskNo;
   handleQuery2();
};
// 删除
const delWcsTask = (row: any) => {
  ElMessageBox.confirm(`确定要删除吗?`, "提示", {
const completeTask = async (row: any) => {
  ElMessageBox.confirm(`确定要完成任务吗?`, "提示", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(async () => {
      await deleteWcsTask(row);
      var param = Object.assign(row);
      param.status = 2;
      await finshWcsTask(param);
      handleQuery();
      ElMessage.success("删除成功");
      handleQuery2();
      ElMessage.success("完成任务成功");
    })
    .catch(() => { });
};
}
//取消任务
const cancellTask = async (row: any) => {
  ElMessageBox.confirm(`确定要取消任务吗?`, "提示", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(async () => {
      var param = Object.assign(row);
      param.status = 4;
      await finshWcsTask(param);
      handleQuery();
      handleQuery2();
      ElMessage.success("取消任务成功");
    })
    .catch(() => { });
}
//上传任务
const uploadTask = async (row: any) => {
  ElMessageBox.confirm(`确定要上传任务吗?`, "提示", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(async () => {
      var param = Object.assign(row);
      await topUpTask(param);
      handleQuery();
      handleQuery2();
      ElMessage.success("置顶任务成功");
    })
    .catch(() => { });
}
//置顶任务
const topUpTask = async (row: any) => {
  ElMessageBox.confirm(`确定要置顶任务吗?`, "提示", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(async () => {
      var param = Object.assign(row);
      await topUpWcsTask(param);
      handleQuery();
      handleQuery2();
      ElMessage.success("置顶任务成功");
    })
    .catch(() => { });
}
// 点击表格
const handleClick = (row, column, cell, event) => {
  if (column.property === '操作') {
    return;
  }
  queryParams2.value.taskNo = row.taskNo;
  handleQuery2();
};
// 改变页面容量
const handleSizeChange = (val: number) => {
  tableParams.value.pageSize = val;