任务管理
This commit is contained in:
parent
7ac789c919
commit
8dfb5c8ed7
4
.env.dev
4
.env.dev
@ -4,8 +4,8 @@ NODE_ENV=production
|
||||
VITE_DEV=true
|
||||
|
||||
# 请求路径
|
||||
# VITE_BASE_URL='http://192.168.10.134:48080'
|
||||
VITE_BASE_URL='http://192.168.0.189:48080'
|
||||
VITE_BASE_URL='http://192.168.0.90:48080'
|
||||
# VITE_BASE_URL='http://192.168.0.189:48080'
|
||||
|
||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
||||
VITE_UPLOAD_TYPE=server
|
||||
|
@ -4,8 +4,8 @@ NODE_ENV=development
|
||||
VITE_DEV=true
|
||||
|
||||
# 请求路径
|
||||
# VITE_BASE_URL='http://192.168.10.134:48080'
|
||||
VITE_BASE_URL='http://192.168.0.189:48080'
|
||||
VITE_BASE_URL='http://192.168.0.90:48080'
|
||||
# VITE_BASE_URL='http://192.168.0.189:48080'
|
||||
|
||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
|
||||
VITE_UPLOAD_TYPE=server
|
||||
|
@ -31,6 +31,6 @@ export const updateTask = (data) => {
|
||||
}
|
||||
|
||||
//获得机器人任务主表分页
|
||||
export const getTaskPageList = async (params) => {
|
||||
return await request.get({ url: `/system/robot/task/page`, params })
|
||||
export const getTaskPageList = async (data) => {
|
||||
return await request.post({ url: `/system/robot/task/page`, data })
|
||||
}
|
||||
|
@ -1,64 +1,81 @@
|
||||
<template>
|
||||
<Dialog v-model="dialogVisible" title="新建任务" width="600" class="task-dialog">
|
||||
<el-form :model="formData" label-width="auto" ref="formRef" :rules="formRules">
|
||||
<el-form-item label="取货类型" prop="takeType" required>
|
||||
<el-select v-model="formData.takeType" placeholder="请选择取货类型" required>
|
||||
<el-form-item required label="任务号" prop="taskNo">
|
||||
<el-input v-model="formData.taskNo" :disabled="true" />
|
||||
</el-form-item>
|
||||
<el-form-item label="取货类型" prop="taskDetailList[0].takeType" required>
|
||||
<el-select
|
||||
v-model="formData.taskDetailList[0].takeType"
|
||||
placeholder="请选择取货类型"
|
||||
required
|
||||
>
|
||||
<el-option label="库位" :value="1" />
|
||||
<el-option label="线库" :value="2" />
|
||||
<el-option label="区域" :value="3" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item required label="取货位置" prop="takeId">
|
||||
<el-form-item required label="取货位置" prop="taskDetailList[0].takeId">
|
||||
<el-select
|
||||
:disabled="!formData.takeType"
|
||||
v-model="formData.takeId"
|
||||
:disabled="!formData.taskDetailList[0].takeType"
|
||||
v-model="formData.taskDetailList[0].takeId"
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
placeholder="请输入取货位置"
|
||||
:remote-method="
|
||||
(query) => {
|
||||
takeRemoteMethod(query, formData)
|
||||
takeRemoteMethod(query, formData.taskDetailList[0])
|
||||
}
|
||||
"
|
||||
:loading="loading"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in formData.takeList"
|
||||
v-for="item in formData.taskDetailList[0].takeList"
|
||||
:key="item.id"
|
||||
:label="item.locationNo"
|
||||
:value="item.id"
|
||||
/>
|
||||
<template #loading>
|
||||
<svg class="circular" viewBox="0 0 50 50">
|
||||
<circle class="path" cx="25" cy="25" r="20" fill="none" />
|
||||
</svg>
|
||||
</template>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="放货类型" prop="releaseType" required>
|
||||
<el-select v-model="formData.releaseType" placeholder="请选择放货类型">
|
||||
<el-form-item label="放货类型" prop="taskDetailList[0].releaseType" required>
|
||||
<el-select v-model="formData.taskDetailList[0].releaseType" placeholder="请选择放货类型">
|
||||
<el-option label="库位" :value="1" />
|
||||
<el-option label="线库" :value="2" />
|
||||
<el-option label="区域" :value="3" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item required label="放货位置" prop="releaseId">
|
||||
<el-form-item required label="放货位置" prop="taskDetailList[0].releaseId">
|
||||
<el-select
|
||||
:disabled="!formData.releaseType"
|
||||
v-model="formData.releaseId"
|
||||
:disabled="!formData.taskDetailList[0].releaseType"
|
||||
v-model="formData.taskDetailList[0].releaseId"
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
placeholder="请输入放货位置"
|
||||
:remote-method="
|
||||
(query) => {
|
||||
releaseRemoteMethod(query, formData)
|
||||
releaseRemoteMethod(query, formData.taskDetailList[0])
|
||||
}
|
||||
"
|
||||
:loading="loading"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in formData.releaseList"
|
||||
v-for="item in formData.taskDetailList[0].releaseList"
|
||||
:key="item.id"
|
||||
:label="item.locationNo"
|
||||
:value="item.id"
|
||||
/>
|
||||
<template #loading>
|
||||
<svg class="circular" viewBox="0 0 50 50">
|
||||
<circle class="path" cx="25" cy="25" r="20" fill="none" />
|
||||
</svg>
|
||||
</template>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="物料信息" prop="skuInfo">
|
||||
@ -75,7 +92,13 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="优先级" prop="priority">
|
||||
<el-input v-model="formData.priority" placeholder="请输入优先级" />
|
||||
<el-input-number
|
||||
placeholder="优先级范围为1-100"
|
||||
v-model="formData.priority"
|
||||
:min="1"
|
||||
:max="100"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="其他信息" prop="otherMsg">
|
||||
<el-input
|
||||
@ -107,8 +130,21 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
|
||||
|
||||
const formData = ref({
|
||||
montageTask: 0, //是否拼接任务(0:不拼接、1:拼接)
|
||||
montageNumber: 0, // 拼接任务数量
|
||||
taskDetailList: [], //任务列表
|
||||
montageNumber: 1, // 拼接任务数量
|
||||
taskDetailList: [
|
||||
{
|
||||
taskType: 1, //任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货、7:扫描码、8:检测托盘类型)
|
||||
releaseType: 1, //放货类型 1:库位、2:线库、 3:区域
|
||||
takeType: 1, //取货类型(1:库位、2:线库、 3:区域)
|
||||
releaseId: undefined, //放货位置的id
|
||||
releaseList: [], //放货的名称的列表
|
||||
takeId: undefined, //取货位置的id
|
||||
takeList: [], //取货位置的名称列表
|
||||
robotNo: undefined, //AGV编号
|
||||
needLock: 0, //停车后锁定(0:否、1:是)
|
||||
electricity: undefined //所选车辆电量(充电模式)
|
||||
}
|
||||
], //任务列表
|
||||
skuInfo: undefined, //物料信息
|
||||
skuBatch: undefined, // 物料批次号
|
||||
skuNumber: undefined, // 物料数量
|
||||
@ -125,18 +161,26 @@ const formData = ref({
|
||||
endTime: 0 //结束时间
|
||||
})
|
||||
const formRules = reactive({
|
||||
name1: [{ required: true, message: '取货类型不能为空', trigger: 'blur' }],
|
||||
name2: [{ required: true, message: '取货位置不能为空', trigger: 'blur' }],
|
||||
name3: [{ required: true, message: '放货类型不能为空', trigger: 'blur' }],
|
||||
name4: [{ required: true, message: '放货位置不能为空', trigger: 'blur' }]
|
||||
taskNo: [{ required: true, message: '任务号不能为空', trigger: 'change' }],
|
||||
'taskDetailList[0].takeType': [
|
||||
{ required: true, message: '取货类型不能为空', trigger: 'change' }
|
||||
],
|
||||
'taskDetailList[0].takeId': [{ required: true, message: '取货位置不能为空', trigger: 'change' }],
|
||||
'taskDetailList[0].releaseType': [
|
||||
{ required: true, message: '放货类型不能为空', trigger: 'change' }
|
||||
],
|
||||
'taskDetailList[0].releaseId': [
|
||||
{ required: true, message: '放货位置不能为空', trigger: 'change' }
|
||||
]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async () => {
|
||||
dialogVisible.value = true
|
||||
getCanUseRobotList()
|
||||
resetForm()
|
||||
getCanUseRobotList()
|
||||
getTaskNo()
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
@ -150,9 +194,10 @@ const submitForm = async () => {
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
await MapTaskAPi.createTask(formData.value)
|
||||
message.success(t('common.createSuccess'))
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
push({ name: 'taskManagementTaskList' })
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
@ -170,12 +215,57 @@ const getCanUseRobotList = async () => {
|
||||
robotList.value = await MapTaskAPi.getCanUseRobot()
|
||||
}
|
||||
|
||||
//获取任务号
|
||||
const getTaskNo = async () => {
|
||||
formData.value.taskNo = await MapTaskAPi.getTaskNo()
|
||||
}
|
||||
|
||||
//获取取货位置可选的列表
|
||||
const getLocationList = async (type, locationNo) => {
|
||||
return await MapTaskAPi.getLocationByName({
|
||||
type, // 放货类型(1:库位、2:线库、 3:区域)
|
||||
locationNo
|
||||
})
|
||||
}
|
||||
//放货的选择列表
|
||||
const loading = ref(false)
|
||||
const releaseRemoteMethod = async (query, item) => {
|
||||
if (query) {
|
||||
loading.value = true
|
||||
item.releaseList = await getLocationList(item.releaseType, query)
|
||||
loading.value = false
|
||||
} else {
|
||||
item.releaseList = []
|
||||
}
|
||||
}
|
||||
//取货的选择列表
|
||||
const takeRemoteMethod = async (query, item) => {
|
||||
if (query) {
|
||||
item.takeList = await getLocationList(item.takeType, query)
|
||||
} else {
|
||||
item.takeList = []
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
montageTask: 0, //是否拼接任务(0:不拼接、1:拼接)
|
||||
montageNumber: 0, // 拼接任务数量
|
||||
taskDetailList: [], //任务列表
|
||||
taskDetailList: [
|
||||
{
|
||||
taskType: 1, //任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货、7:扫描码、8:检测托盘类型)
|
||||
releaseType: 1, //放货类型 1:库位、2:线库、 3:区域
|
||||
takeType: 1, //取货类型(1:库位、2:线库、 3:区域)
|
||||
releaseId: undefined, //放货位置的id
|
||||
releaseList: [], //放货的名称的列表
|
||||
takeId: undefined, //取货位置的id
|
||||
takeList: [], //取货位置的名称列表
|
||||
robotNo: undefined, //AGV编号
|
||||
needLock: 0, //停车后锁定(0:否、1:是)
|
||||
electricity: undefined //所选车辆电量(充电模式)
|
||||
}
|
||||
], //任务列表
|
||||
skuInfo: undefined, //物料信息
|
||||
skuBatch: undefined, // 物料批次号
|
||||
skuNumber: undefined, // 物料数量
|
||||
@ -211,4 +301,52 @@ const resetForm = () => {
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.el-select-dropdown__loading {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100px;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.circular {
|
||||
display: inline;
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
animation: loading-rotate 2s linear infinite;
|
||||
}
|
||||
.path {
|
||||
animation: loading-dash 1.5s ease-in-out infinite;
|
||||
stroke-dasharray: 90, 150;
|
||||
stroke-dashoffset: 0;
|
||||
stroke-width: 2;
|
||||
stroke: var(--el-color-primary);
|
||||
stroke-linecap: round;
|
||||
}
|
||||
|
||||
@keyframes loading-rotate {
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
@keyframes loading-dash {
|
||||
0% {
|
||||
stroke-dasharray: 1, 200;
|
||||
stroke-dashoffset: 0;
|
||||
}
|
||||
50% {
|
||||
stroke-dasharray: 90, 150;
|
||||
stroke-dashoffset: -40px;
|
||||
}
|
||||
100% {
|
||||
stroke-dasharray: 90, 150;
|
||||
stroke-dashoffset: -120px;
|
||||
}
|
||||
}
|
||||
@keyframes custom-spin-move {
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
@ -12,7 +12,7 @@
|
||||
</div>
|
||||
</ContentWrap>
|
||||
|
||||
<el-form :model="formData" label-width="145" ref="formRef">
|
||||
<el-form :model="formData" label-width="94" ref="formRef">
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
@ -23,89 +23,125 @@
|
||||
<div>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="任务号" prop="taskNo">
|
||||
<el-form-item required label="任务号" prop="taskNo" label-width="146">
|
||||
<el-input v-model="formData.taskNo" :disabled="true" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="是否拼接任务" prop="montageTask">
|
||||
<el-select v-model="formData.montageTask" placeholder="请选择">
|
||||
<el-option label="不拼接" :value="0" />
|
||||
<el-option label="拼接" :value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" v-if="formData.montageTask === 1">
|
||||
<el-form-item required label="任务拼接数量" prop="montageNumber">
|
||||
<el-input-number
|
||||
v-model="formData.montageNumber"
|
||||
:min="0"
|
||||
:max="10"
|
||||
@change="montageNumberChange"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div
|
||||
v-if="
|
||||
formData.taskDetailList[0].taskType === 1 ||
|
||||
formData.taskDetailList[0].taskType === 5 ||
|
||||
formData.taskDetailList[0].taskType === 6
|
||||
formData.taskDetailList[0].taskType !== 2 && formData.taskDetailList[0].taskType !== 3
|
||||
"
|
||||
>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="搬空所选线库/区域" prop="doMoveAll">
|
||||
<el-switch v-model="formData.doMoveAll" :active-value="1" :inactive-value="0" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="任务循环" prop="doCycle">
|
||||
<el-switch v-model="formData.doCycle" :active-value="1" :inactive-value="0" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" v-if="formData.doCycle === 1">
|
||||
<el-form-item required label="循环次数" prop="cycleNumber">
|
||||
<el-input-number v-model="formData.cycleNumber" :min="0" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="物料信息" prop="skuInfo">
|
||||
<el-input v-model="formData.skuInfo" placeholder="请输入物料信息" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="优先级" prop="priority">
|
||||
<el-input v-model="formData.priority" placeholder="请输入优先级" />
|
||||
<el-form-item required label="是否拼接任务" prop="montageTask" label-width="146">
|
||||
<el-select
|
||||
v-model="formData.montageTask"
|
||||
placeholder="请选择"
|
||||
@change="montageTaskChange"
|
||||
>
|
||||
<el-option label="不拼接" :value="0" />
|
||||
<el-option label="拼接" :value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" v-if="formData.montageTask === 1">
|
||||
<el-form-item required label="任务拼接数量" prop="montageNumber" label-width="146">
|
||||
<el-input-number
|
||||
class="!w-220px"
|
||||
v-model="formData.montageNumber"
|
||||
:min="1"
|
||||
:max="10"
|
||||
@change="montageNumberChange"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div
|
||||
v-if="
|
||||
formData.taskDetailList[0].taskType === 1 ||
|
||||
formData.taskDetailList[0].taskType === 5 ||
|
||||
formData.taskDetailList[0].taskType === 6
|
||||
"
|
||||
>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item
|
||||
required
|
||||
label="搬空所选线库/区域"
|
||||
prop="doMoveAll"
|
||||
label-width="146"
|
||||
>
|
||||
<el-switch v-model="formData.doMoveAll" :active-value="1" :inactive-value="0" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="任务循环" prop="doCycle" label-width="146">
|
||||
<el-switch
|
||||
v-model="formData.doCycle"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
@change="doCycleChange"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" v-if="formData.doCycle === 1">
|
||||
<el-form-item required label="循环次数" prop="cycleNumber" label-width="146">
|
||||
<el-input-number class="!w-220px" v-model="formData.cycleNumber" :min="0" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="物料信息" prop="skuInfo" label-width="146">
|
||||
<el-input v-model="formData.skuInfo" placeholder="请输入物料信息" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="优先级" prop="priority" label-width="146">
|
||||
<el-input-number
|
||||
placeholder="优先级范围为1-100"
|
||||
v-model="formData.priority"
|
||||
:min="1"
|
||||
:max="100"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-form>
|
||||
|
||||
<el-card shadow="never" class="mt-4">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span class="line"></span>
|
||||
<span>任务详情</span>
|
||||
</div>
|
||||
</template>
|
||||
<div class="task-list">
|
||||
<div v-for="(detailItem, index) in formData.taskDetailList" :key="index" class="task-item">
|
||||
<div class="index-logo">{{ index + 1 }}</div>
|
||||
<el-form :model="detailItem" label-width="90">
|
||||
<el-card shadow="never" class="mt-4">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span class="line"></span>
|
||||
<span>任务详情</span>
|
||||
</div>
|
||||
</template>
|
||||
<div class="task-list">
|
||||
<div
|
||||
v-for="(detailItem, index) in formData.taskDetailList"
|
||||
:key="index"
|
||||
class="task-item"
|
||||
>
|
||||
<div class="index-logo">{{ index + 1 }}</div>
|
||||
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="24">
|
||||
<el-form-item required label="任务类型" prop="taskType">
|
||||
<el-form-item
|
||||
required
|
||||
label="任务类型"
|
||||
:prop="`taskDetailList[${index}].taskType`"
|
||||
:rules="{ required: true, message: '任务类型不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select
|
||||
:disabled="formData.doCycle == 1 && index == 0"
|
||||
v-model="detailItem.taskType"
|
||||
placeholder="请选择"
|
||||
@change="taskTypeChange(detailItem, index)"
|
||||
@ -126,11 +162,16 @@
|
||||
<div v-if="detailItem.taskType === 1">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="取货类型" prop="takeType">
|
||||
<el-form-item
|
||||
required
|
||||
label="取货类型"
|
||||
:prop="`taskDetailList[${index}].takeType`"
|
||||
:rules="{ required: true, message: '取货类型不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select
|
||||
v-model="detailItem.takeType"
|
||||
placeholder="请选择取货类型"
|
||||
@change="getPickupLocation(detailItem)"
|
||||
@change="takeTypeChange(detailItem)"
|
||||
>
|
||||
<el-option label="库位" :value="1" />
|
||||
<el-option label="线库" :value="2" />
|
||||
@ -139,7 +180,12 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="取货位置" prop="takeId">
|
||||
<el-form-item
|
||||
required
|
||||
label="取货位置"
|
||||
:prop="`taskDetailList[${index}].takeId`"
|
||||
:rules="{ required: true, message: '取货位置不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select
|
||||
:disabled="!detailItem.takeType"
|
||||
v-model="detailItem.takeId"
|
||||
@ -166,11 +212,16 @@
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="放货类型" prop="releaseType">
|
||||
<el-form-item
|
||||
required
|
||||
label="放货类型"
|
||||
:prop="`taskDetailList[${index}].releaseType`"
|
||||
:rules="{ required: true, message: '放货类型不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select
|
||||
v-model="detailItem.releaseType"
|
||||
placeholder="请选择放货类型"
|
||||
@change="getDropOffLocation(detailItem)"
|
||||
@change="releaseTypeChange(detailItem)"
|
||||
>
|
||||
<el-option label="库位" :value="1" />
|
||||
<el-option label="线库" :value="2" />
|
||||
@ -179,7 +230,12 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="放货位置" prop="releaseId">
|
||||
<el-form-item
|
||||
required
|
||||
label="放货位置"
|
||||
:prop="`taskDetailList[${index}].releaseId`"
|
||||
:rules="{ required: true, message: '放货位置不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select
|
||||
:disabled="!detailItem.releaseType"
|
||||
v-model="detailItem.releaseId"
|
||||
@ -206,7 +262,7 @@
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="指定车辆" prop="robotNo">
|
||||
<el-form-item label="指定车辆">
|
||||
<el-select v-model="detailItem.robotNo" placeholder="请选择车辆">
|
||||
<el-option
|
||||
v-for="car in robotList"
|
||||
@ -223,7 +279,12 @@
|
||||
<div v-if="detailItem.taskType === 2">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="车辆编号" prop="robotNo">
|
||||
<el-form-item
|
||||
required
|
||||
label="车辆编号"
|
||||
:prop="`taskDetailList[${index}].robotNo`"
|
||||
:rules="{ required: true, message: '车辆不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select v-model="detailItem.robotNo" placeholder="请选择车辆">
|
||||
<el-option
|
||||
v-for="car in robotList"
|
||||
@ -235,7 +296,12 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="停车后锁定" prop="needLock">
|
||||
<el-form-item
|
||||
required
|
||||
label="停车后锁定"
|
||||
:prop="`taskDetailList[${index}].needLock`"
|
||||
:rules="{ required: true, message: '请选择停车后是否锁定', trigger: 'change' }"
|
||||
>
|
||||
<el-select v-model="detailItem.needLock" placeholder="停车后锁定">
|
||||
<el-option label="是" :value="0" />
|
||||
<el-option label="否" :value="1" />
|
||||
@ -248,7 +314,12 @@
|
||||
<div v-if="detailItem.taskType === 3">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="车辆编号" prop="robotNo">
|
||||
<el-form-item
|
||||
required
|
||||
label="车辆编号"
|
||||
:prop="`taskDetailList[${index}].robotNo`"
|
||||
:rules="{ required: true, message: '车辆不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select
|
||||
v-model="detailItem.robotNo"
|
||||
placeholder="请选择车辆"
|
||||
@ -268,7 +339,12 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="所选车辆电量" prop="electricity">
|
||||
<el-form-item
|
||||
required
|
||||
label="所选车辆电量"
|
||||
:prop="`taskDetailList[${index}].electricity`"
|
||||
:rules="{ required: true, message: '所选车辆电量不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-input
|
||||
v-model="detailItem.electricity"
|
||||
placeholder="请输入车辆电量"
|
||||
@ -282,7 +358,12 @@
|
||||
<div v-if="detailItem.taskType === 4">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="车辆编号" prop="robotNo">
|
||||
<el-form-item
|
||||
required
|
||||
label="车辆编号"
|
||||
:prop="`taskDetailList[${index}].robotNo`"
|
||||
:rules="{ required: true, message: '车辆不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select v-model="detailItem.robotNo" placeholder="请选择车辆">
|
||||
<el-option
|
||||
v-for="car in robotList"
|
||||
@ -294,7 +375,12 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="终点库位" prop="releaseId">
|
||||
<el-form-item
|
||||
required
|
||||
label="终点库位"
|
||||
:prop="`taskDetailList[${index}].releaseId`"
|
||||
:rules="{ required: true, message: '终点库位不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select
|
||||
:disabled="!detailItem.takeType"
|
||||
v-model="detailItem.releaseId"
|
||||
@ -324,11 +410,16 @@
|
||||
<div v-if="detailItem.taskType === 5">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="取货类型" prop="takeType">
|
||||
<el-form-item
|
||||
required
|
||||
label="取货类型"
|
||||
:prop="`taskDetailList[${index}].takeType`"
|
||||
:rules="{ required: true, message: '取货类型不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select
|
||||
v-model="detailItem.takeType"
|
||||
placeholder="请选择取货类型"
|
||||
@change="getPickupLocation(detailItem)"
|
||||
@change="takeTypeChange(detailItem)"
|
||||
>
|
||||
<el-option label="库位" :value="1" />
|
||||
<el-option label="线库" :value="2" />
|
||||
@ -337,7 +428,12 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="取货位置" prop="takeId">
|
||||
<el-form-item
|
||||
required
|
||||
label="取货位置"
|
||||
:prop="`taskDetailList[${index}].takeId`"
|
||||
:rules="{ required: true, message: '取货位置不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select
|
||||
:disabled="!detailItem.takeType"
|
||||
v-model="detailItem.takeId"
|
||||
@ -364,7 +460,12 @@
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="车辆编号" prop="robotNo">
|
||||
<el-form-item
|
||||
required
|
||||
label="车辆编号"
|
||||
:prop="`taskDetailList[${index}].robotNo`"
|
||||
:rules="{ required: true, message: '车辆不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select v-model="detailItem.robotNo" placeholder="请选择车辆">
|
||||
<el-option
|
||||
v-for="car in robotList"
|
||||
@ -381,11 +482,16 @@
|
||||
<div v-if="detailItem.taskType === 6">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="放货类型" prop="releaseType">
|
||||
<el-form-item
|
||||
required
|
||||
label="放货类型"
|
||||
:prop="`taskDetailList[${index}].releaseType`"
|
||||
:rules="{ required: true, message: '放货类型不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select
|
||||
v-model="detailItem.releaseType"
|
||||
placeholder="请选择放货类型"
|
||||
@change="getDropOffLocation(detailItem)"
|
||||
@change="releaseTypeChange(detailItem)"
|
||||
>
|
||||
<el-option label="库位" :value="1" />
|
||||
<el-option label="线库" :value="2" />
|
||||
@ -394,7 +500,12 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="放货位置" prop="releaseId">
|
||||
<el-form-item
|
||||
required
|
||||
label="放货位置"
|
||||
:prop="`taskDetailList[${index}].releaseId`"
|
||||
:rules="{ required: true, message: '放货位置不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select
|
||||
:disabled="!detailItem.releaseType"
|
||||
v-model="detailItem.releaseId"
|
||||
@ -438,7 +549,12 @@
|
||||
<div v-if="detailItem.taskType === 7">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="车辆编号" prop="robotNo">
|
||||
<el-form-item
|
||||
required
|
||||
label="车辆编号"
|
||||
:prop="`taskDetailList[${index}].robotNo`"
|
||||
:rules="{ required: true, message: '车辆不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select v-model="detailItem.robotNo" placeholder="请选择车辆">
|
||||
<el-option
|
||||
v-for="car in robotList"
|
||||
@ -450,7 +566,12 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="放货位置" prop="releaseId">
|
||||
<el-form-item
|
||||
required
|
||||
label="放货位置"
|
||||
:prop="`taskDetailList[${index}].releaseId`"
|
||||
:rules="{ required: true, message: '放货位置不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select
|
||||
:disabled="!detailItem.releaseType"
|
||||
v-model="detailItem.releaseId"
|
||||
@ -480,7 +601,12 @@
|
||||
<div v-if="detailItem.taskType === 8">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="车辆编号" prop="robotNo">
|
||||
<el-form-item
|
||||
required
|
||||
label="车辆编号"
|
||||
:prop="`taskDetailList[${index}].robotNo`"
|
||||
:rules="{ required: true, message: '车辆不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select v-model="detailItem.robotNo" placeholder="请选择车辆">
|
||||
<el-option
|
||||
v-for="car in robotList"
|
||||
@ -492,7 +618,12 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item required label="检测位置" prop="releaseId">
|
||||
<el-form-item
|
||||
required
|
||||
label="检测位置"
|
||||
:prop="`taskDetailList[${index}].releaseId`"
|
||||
:rules="{ required: true, message: '检测位置不能为空', trigger: 'change' }"
|
||||
>
|
||||
<el-select
|
||||
:disabled="!detailItem.releaseType"
|
||||
v-model="detailItem.releaseId"
|
||||
@ -518,10 +649,10 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-card>
|
||||
</el-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -535,9 +666,11 @@ defineOptions({ name: 'taskManagementCreateTask' })
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const { push } = useRouter()
|
||||
|
||||
const formData = reactive({
|
||||
montageTask: 0, //是否拼接任务(0:不拼接、1:拼接)
|
||||
montageNumber: 0, // 拼接任务数量
|
||||
montageTask: 1, //是否拼接任务(0:不拼接、1:拼接)
|
||||
montageNumber: 1, // 拼接任务数量
|
||||
taskDetailList: [
|
||||
{
|
||||
taskType: 1, //任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货、7:扫描码、8:检测托盘类型)
|
||||
@ -559,7 +692,7 @@ const formData = reactive({
|
||||
otherMsg: undefined, // 其他信息
|
||||
doCycle: 0, //循环(0:不循环、1:循环)
|
||||
doMoveAll: 0, //是否搬空所选线库/区域(0:不搬空、1:搬空)
|
||||
cycleNumber: 0, // 其他信息
|
||||
cycleNumber: 0, // 循环次数
|
||||
remainingCycleNumber: 1, //剩余循环次数,默认1
|
||||
taskNo: undefined, // 任务号
|
||||
taskStatus: 0, //任务状态(0:未开始、1:执行中、2:已完成、3:已取消)
|
||||
@ -570,7 +703,7 @@ const formData = reactive({
|
||||
|
||||
//获取任务号
|
||||
const getTaskNo = async () => {
|
||||
formData.taskNo = await MapTaskAPi.getTaskNo(1)
|
||||
formData.taskNo = await MapTaskAPi.getTaskNo()
|
||||
}
|
||||
|
||||
//获取取货位置可选的列表
|
||||
@ -581,6 +714,7 @@ const getLocationList = async (type, locationNo) => {
|
||||
})
|
||||
}
|
||||
//放货的选择列表
|
||||
const loading = ref(false)
|
||||
const releaseRemoteMethod = async (query, item) => {
|
||||
if (query) {
|
||||
item.releaseList = await getLocationList(item.releaseType, query)
|
||||
@ -613,144 +747,168 @@ const robotNoChange = (e, detailItem) => {
|
||||
|
||||
//任务类型切换
|
||||
const taskTypeChange = (item, index) => {
|
||||
if (index === 0) return
|
||||
//先判断前一个是什么
|
||||
item.releaseType = 1
|
||||
item.takeType = 1
|
||||
item.releaseId = undefined
|
||||
item.releaseList = []
|
||||
item.takeId = undefined
|
||||
item.takeList = []
|
||||
item.robotNo = undefined
|
||||
item.needLock = 0
|
||||
item.electricity = undefined
|
||||
|
||||
let lastItem = formData.taskDetailList[index - 1]
|
||||
|
||||
if (lastItem.taskType === 1) {
|
||||
if (item.takeType === 2) {
|
||||
message.warning('取放货后不可连接停车')
|
||||
item.takeType = 1
|
||||
return
|
||||
if (index === 0) {
|
||||
if (item.taskType === 2) {
|
||||
formData.montageTask = 0
|
||||
formData.montageNumber = 1
|
||||
formData.taskDetailList = formData.taskDetailList.slice(0, 1)
|
||||
message.warning('任务1为停车不可拼接任务')
|
||||
}
|
||||
if (item.takeType === 3) {
|
||||
message.warning('取放货后不可连接充电')
|
||||
item.takeType = 1
|
||||
return
|
||||
if (item.taskType === 3) {
|
||||
formData.montageTask = 0
|
||||
formData.montageNumber = 1
|
||||
formData.taskDetailList = formData.taskDetailList.slice(0, 1)
|
||||
message.warning('任务1为充电不可拼接任务')
|
||||
}
|
||||
if (item.takeType === 6) {
|
||||
message.warning('取放货后不可连接仅放货')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 7) {
|
||||
message.warning('取放货后不可连接扫描码')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 8) {
|
||||
message.warning('取放货后不可连接检测托盘类型')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
} else if (lastItem.taskType === 2) {
|
||||
//不能拼接任务
|
||||
} else if (lastItem.taskType === 3) {
|
||||
//不能拼接任务
|
||||
} else if (lastItem.taskType === 4) {
|
||||
if (item.takeType === 2) {
|
||||
message.warning('移动后不可连接停车')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 3) {
|
||||
message.warning('移动后不可连接充电')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 6) {
|
||||
message.warning('移动后不可连接仅放货')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
} else if (lastItem.taskType === 5) {
|
||||
if (item.takeType === 1) {
|
||||
message.warning('仅取货后不可连接取放货')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 2) {
|
||||
message.warning('仅取货后不可连接停车')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 3) {
|
||||
message.warning('仅取货后不可连接充电')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 5) {
|
||||
message.warning('仅取货后不可连接仅取货')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 7) {
|
||||
message.warning('仅取货后不可连接扫描码')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 8) {
|
||||
message.warning('仅取货后不可连接检测托盘类型')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
} else if (lastItem.taskType === 6) {
|
||||
if (item.takeType === 2) {
|
||||
message.warning('仅放货后不可连接停车')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 3) {
|
||||
message.warning('仅放货后不可连接充电')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 6) {
|
||||
message.warning('仅放货后不可连接仅放货')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 7) {
|
||||
message.warning('仅放货后不可连接扫描码')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
} else if (lastItem.taskType === 7) {
|
||||
if (item.takeType === 2) {
|
||||
message.warning('扫描码后不可连接停车')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 3) {
|
||||
message.warning('扫描码后不可连接充电')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 6) {
|
||||
message.warning('扫描码后不可连接仅放货')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 7) {
|
||||
message.warning('扫描码后不可连接扫描码')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
} else if (lastItem.taskType === 8) {
|
||||
if (item.takeType === 2) {
|
||||
message.warning('检测托盘类型后不可连接停车')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 3) {
|
||||
message.warning('检测托盘类型后不可连接充电')
|
||||
item.takeType = 1
|
||||
return
|
||||
}
|
||||
if (item.takeType === 6) {
|
||||
message.warning('检测托盘类型后不可连接仅放货')
|
||||
item.takeType = 1
|
||||
return
|
||||
} else {
|
||||
//先判断前一个是什么
|
||||
if (lastItem.taskType === 1) {
|
||||
if (item.taskType === 2) {
|
||||
message.warning('取放货后不可连接停车')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 3) {
|
||||
message.warning('取放货后不可连接充电')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 6) {
|
||||
message.warning('取放货后不可连接仅放货')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 7) {
|
||||
message.warning('取放货后不可连接扫描码')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 8) {
|
||||
message.warning('取放货后不可连接检测托盘类型')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
} else if (lastItem.taskType === 2) {
|
||||
//不能拼接任务
|
||||
} else if (lastItem.taskType === 3) {
|
||||
//不能拼接任务
|
||||
} else if (lastItem.taskType === 4) {
|
||||
if (item.taskType === 2) {
|
||||
message.warning('移动后不可连接停车')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 3) {
|
||||
message.warning('移动后不可连接充电')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 6) {
|
||||
message.warning('移动后不可连接仅放货')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
} else if (lastItem.taskType === 5) {
|
||||
if (item.taskType === 1) {
|
||||
message.warning('仅取货后不可连接取放货')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 2) {
|
||||
message.warning('仅取货后不可连接停车')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 3) {
|
||||
message.warning('仅取货后不可连接充电')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 5) {
|
||||
message.warning('仅取货后不可连接仅取货')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 7) {
|
||||
message.warning('仅取货后不可连接扫描码')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 8) {
|
||||
message.warning('仅取货后不可连接检测托盘类型')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
} else if (lastItem.taskType === 6) {
|
||||
if (item.taskType === 2) {
|
||||
message.warning('仅放货后不可连接停车')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 3) {
|
||||
message.warning('仅放货后不可连接充电')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 6) {
|
||||
message.warning('仅放货后不可连接仅放货')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 7) {
|
||||
message.warning('仅放货后不可连接扫描码')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
} else if (lastItem.taskType === 7) {
|
||||
if (item.taskType === 2) {
|
||||
message.warning('扫描码后不可连接停车')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 3) {
|
||||
message.warning('扫描码后不可连接充电')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 6) {
|
||||
message.warning('扫描码后不可连接仅放货')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 7) {
|
||||
message.warning('扫描码后不可连接扫描码')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
} else if (lastItem.taskType === 8) {
|
||||
if (item.taskType === 2) {
|
||||
message.warning('检测托盘类型后不可连接停车')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 3) {
|
||||
message.warning('检测托盘类型后不可连接充电')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
if (item.taskType === 6) {
|
||||
message.warning('检测托盘类型后不可连接仅放货')
|
||||
item.taskType = undefined
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -759,7 +917,7 @@ const taskTypeChange = (item, index) => {
|
||||
const montageNumberChange = (currentValue: number, oldValue: number) => {
|
||||
if (currentValue > oldValue) {
|
||||
//增加
|
||||
let addLength = currentValue - formData.taskDetailList.length + 1
|
||||
let addLength = currentValue - formData.taskDetailList.length
|
||||
for (let index = 0; index < addLength; index++) {
|
||||
formData.taskDetailList.push({
|
||||
taskType: 1, //任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货、7:扫描码、8:检测托盘类型)
|
||||
@ -776,24 +934,59 @@ const montageNumberChange = (currentValue: number, oldValue: number) => {
|
||||
}
|
||||
} else {
|
||||
//减少
|
||||
formData.taskDetailList = formData.taskDetailList.slice(0, currentValue + 1)
|
||||
formData.taskDetailList = formData.taskDetailList.slice(0, currentValue)
|
||||
}
|
||||
}
|
||||
|
||||
//是否拼接切换
|
||||
const montageTaskChange = (e) => {
|
||||
if (e === 0) {
|
||||
formData.montageNumber = 1
|
||||
formData.taskDetailList = formData.taskDetailList.slice(0, 1)
|
||||
}
|
||||
}
|
||||
|
||||
//任务循环切换
|
||||
const doCycleChange = (e) => {
|
||||
if (e === 0) {
|
||||
formData.cycleNumber = 0
|
||||
} else {
|
||||
formData.montageNumber = 1
|
||||
formData.taskDetailList = formData.taskDetailList.slice(0, 1)
|
||||
formData.taskDetailList[0].taskType = 1
|
||||
}
|
||||
}
|
||||
|
||||
//取货类型切换
|
||||
const takeTypeChange = (item) => {
|
||||
item.takeId = undefined
|
||||
}
|
||||
|
||||
//放货类型切换
|
||||
const releaseTypeChange = (item) => {
|
||||
item.releaseId = undefined
|
||||
}
|
||||
|
||||
//提交表单
|
||||
const formRef = ref()
|
||||
const formLoading = ref(false)
|
||||
//校验数组的
|
||||
|
||||
const submit = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
await MapTaskAPi.createTask(formData)
|
||||
message.success(t('common.createSuccess'))
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
await formRef.value.validate(async (valid, fields) => {
|
||||
if (valid) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
await MapTaskAPi.createTask(formData)
|
||||
message.success(t('common.createSuccess'))
|
||||
push({ name: 'taskManagementTaskList' })
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
} else {
|
||||
message.warning('请补充完整表单信息!')
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
|
@ -2,11 +2,11 @@
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-0.9375rem"
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="4.25rem"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="任务号" prop="taskNo">
|
||||
<el-input
|
||||
@ -14,22 +14,26 @@
|
||||
placeholder="请输入任务ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-15rem"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="车辆编号" prop="robotNo">
|
||||
<el-select v-model="queryParams.robotNo" class="!w-15rem">
|
||||
<el-option :value="1" label="1" />
|
||||
<el-option :value="2" label="2" />
|
||||
<el-option :value="3" label="3" />
|
||||
<el-select v-model="queryParams.robotNo" class="!w-240px" @change="handleQuery()">
|
||||
<el-option
|
||||
v-for="car in robotList"
|
||||
:key="car.id"
|
||||
:label="car.robotNo"
|
||||
:value="car.robotNo"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="任务状态" prop="taskStatus">
|
||||
<el-select
|
||||
v-model="queryParams.taskStatus"
|
||||
class="!w-15rem"
|
||||
class="!w-240px"
|
||||
clearable
|
||||
placeholder="请选择任务状态"
|
||||
@change="handleQuery()"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.ROBOT_TASK_STATUS)"
|
||||
@ -42,9 +46,10 @@
|
||||
<el-form-item label="任务阶段" prop="taskStage">
|
||||
<el-select
|
||||
v-model="queryParams.taskStage"
|
||||
class="!w-15rem"
|
||||
class="!w-240px"
|
||||
clearable
|
||||
placeholder="请选择任务阶段"
|
||||
@change="handleQuery()"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.ROBOT_QUEST_PHASES)"
|
||||
@ -55,15 +60,8 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"
|
||||
><Icon icon="ep:search" class="mr-0.3125rem" /> 搜索</el-button
|
||||
>
|
||||
<el-button @click="resetQuery"
|
||||
><Icon icon="ep:refresh" class="mr-0.3125rem" /> 重置</el-button
|
||||
>
|
||||
<el-button type="primary" @click="openForm('create')" v-hasPermi="['crm:clue:create']">
|
||||
<Icon icon="ep:plus" class="mr-0.3125rem" /> 新增
|
||||
</el-button>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
@ -72,15 +70,18 @@
|
||||
<ContentWrap>
|
||||
<el-table
|
||||
:data="list"
|
||||
border
|
||||
style="width: 100%"
|
||||
stripe
|
||||
row-class-name="table-row-class"
|
||||
:header-cell-style="{ backgroundColor: '#EBF1FF', color: '#0D162A' }"
|
||||
>
|
||||
<el-table-column align="center" label="序号" type="expand" width="60">
|
||||
<template #default="props">
|
||||
<div class="family-table">
|
||||
<el-table :data="props.row.details" border :span-method="objectSpanMethod">
|
||||
<el-table
|
||||
:data="props.row.details"
|
||||
border
|
||||
:span-method="(param) => objectSpanMethod(param, props.row.details)"
|
||||
>
|
||||
<el-table-column align="center" label="指令" prop="taskType">
|
||||
<template #default="scope">
|
||||
<el-text class="mx-1" v-if="scope.row.taskType == 1">取放货</el-text>
|
||||
@ -101,7 +102,7 @@
|
||||
<div class="task-stage" v-if="scope.row.taskStage == 0">
|
||||
<div
|
||||
class="icon-dot"
|
||||
style="background-color: #e6b500; border: 1px solid #e6b500"
|
||||
style="background-color: #e6b500; border: 0.0625rem solid #e6b500"
|
||||
></div>
|
||||
<el-text class="mx-1">待执行</el-text>
|
||||
</div>
|
||||
@ -124,7 +125,7 @@
|
||||
<div class="task-stage" v-else>
|
||||
<div
|
||||
class="icon-dot"
|
||||
style="background-color: #4dc606; border: 1px solid #4dc606"
|
||||
style="background-color: #4dc606; border: 0.0625rem solid #4dc606"
|
||||
>
|
||||
</div>
|
||||
<el-text class="mx-1">已完成</el-text>
|
||||
@ -133,8 +134,40 @@
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="操作" width="270">
|
||||
<template #default="scope">
|
||||
<el-button type="warning" @click="cancelTask(scope.row)">取消任务</el-button>
|
||||
<el-button type="primary" @click="finishTask(scope.row)">人工完成</el-button>
|
||||
<el-button
|
||||
v-if="scope.row.taskStage !== 5"
|
||||
type="warning"
|
||||
@click="cancelTask(props.row, scope.row)"
|
||||
>取消任务</el-button
|
||||
>
|
||||
<el-popover
|
||||
placement="right"
|
||||
:width="300"
|
||||
trigger="click"
|
||||
v-if="scope.row.taskStage === 0"
|
||||
>
|
||||
<template #reference>
|
||||
<el-button type="primary" @click="modifyPriority(props.row, scope.row)"
|
||||
>修改优先级</el-button
|
||||
>
|
||||
</template>
|
||||
<div>
|
||||
<span>修改优先级:</span>
|
||||
<el-input
|
||||
v-model="priorityNum"
|
||||
style="width: 180px"
|
||||
placeholder="优先级范围为1-100"
|
||||
@blur="priorityNumChange(props.row, scope.row)"
|
||||
/>
|
||||
</div>
|
||||
</el-popover>
|
||||
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="finishTask(props.row, scope.row)"
|
||||
v-if="scope.row.taskStage !== 0 && scope.row.taskStage !== 5"
|
||||
>人工完成</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@ -143,7 +176,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="任务号" prop="taskNo" align="center" />
|
||||
<el-table-column label="优先级" prop="priority" align="center" />
|
||||
<el-table-column label="物料信息" prop="skuInfo" align="center" />
|
||||
<el-table-column label="物料信息" prop="skuInfo" align="center" show-overflow-tooltip />
|
||||
<el-table-column
|
||||
label="开始时间"
|
||||
prop="startTime"
|
||||
@ -156,7 +189,7 @@
|
||||
<dict-tag :type="DICT_TYPE.ROBOT_TASK_STATUS" :value="scope.row.taskStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="其他信息" prop="otherMsg" align="center" />
|
||||
<el-table-column label="其他信息" prop="otherMsg" align="center" show-overflow-tooltip />
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
@ -195,8 +228,6 @@ const queryParams = reactive({
|
||||
taskStage: null
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
const activeName = ref('1') // 列表 tab
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
@ -209,28 +240,84 @@ const getList = async () => {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }) => {
|
||||
if (columnIndex === 6) {
|
||||
if (rowIndex % 2 === 0) {
|
||||
return {
|
||||
rowspan: 2,
|
||||
colspan: 1
|
||||
}
|
||||
} else {
|
||||
//合并单元格
|
||||
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }, list) => {
|
||||
if (columnIndex === 5) {
|
||||
if (rowIndex > 0 && list[rowIndex].taskStage === list[rowIndex - 1].taskStage) {
|
||||
return {
|
||||
rowspan: 0,
|
||||
colspan: 0
|
||||
}
|
||||
}
|
||||
return {
|
||||
rowspan: getRowspan('taskStage', rowIndex, list),
|
||||
colspan: 1
|
||||
}
|
||||
}
|
||||
}
|
||||
// 获取行合并数
|
||||
const getRowspan = (key, rowIndex, list) => {
|
||||
let rowspan = 1 //默认合并1行
|
||||
let curVal = list[rowIndex][key] //存储了当前值
|
||||
for (let i = rowIndex + 1; i < list.length; i++) {
|
||||
if (list[i][key] === curVal) {
|
||||
rowspan++
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
return rowspan
|
||||
}
|
||||
|
||||
//取消任务
|
||||
const cancelTask = (item) => {}
|
||||
const cancelTask = async (mainItem, item) => {
|
||||
try {
|
||||
await message.delConfirm('请确认是否取消所有任务?')
|
||||
await MapTaskAPi.updateTask({
|
||||
id: mainItem.id,
|
||||
priority: mainItem.priority,
|
||||
montageTask: mainItem.montageTask,
|
||||
montageNumber: mainItem.montageNumber,
|
||||
taskStatus: 3
|
||||
})
|
||||
message.success('已取消')
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
//人工完成
|
||||
const finishTask = (item) => {}
|
||||
const finishTask = async (mainItem, item) => {
|
||||
try {
|
||||
await message.delConfirm('请确认是否取消所有任务?')
|
||||
await MapTaskAPi.updateTask({
|
||||
id: mainItem.id,
|
||||
priority: mainItem.priority,
|
||||
montageTask: mainItem.montageTask,
|
||||
montageNumber: mainItem.montageNumber,
|
||||
taskStatus: 5
|
||||
})
|
||||
message.success('已取消')
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
//修改优先级
|
||||
const priorityNum = ref()
|
||||
const modifyPriority = (mainItem, item) => {
|
||||
priorityNum.value = mainItem.priority
|
||||
}
|
||||
const priorityNumChange = async (mainItem, item) => {
|
||||
try {
|
||||
await MapTaskAPi.updateTask({
|
||||
id: mainItem.id,
|
||||
priority: priorityNum.value,
|
||||
montageTask: mainItem.montageTask,
|
||||
montageNumber: mainItem.montageNumber
|
||||
})
|
||||
message.success('已修改')
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
@ -244,19 +331,22 @@ const resetQuery = () => {
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (id) => {}
|
||||
//查询能用的车辆
|
||||
const robotList = ref([])
|
||||
const getCanUseRobotList = async () => {
|
||||
robotList.value = await MapTaskAPi.getCanUseRobot()
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
getCanUseRobotList()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.family-table {
|
||||
margin: 0.625rem 1.25rem 0.625rem 3.125rem;
|
||||
margin: 10px 20px 10px 50px;
|
||||
|
||||
.task-stage {
|
||||
display: flex;
|
||||
@ -266,14 +356,18 @@ onMounted(() => {
|
||||
|
||||
.icon-dot {
|
||||
display: inline-block;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
padding: 3px;
|
||||
width: 1.125rem;
|
||||
height: 1.125rem;
|
||||
padding: 0.1875rem;
|
||||
border-radius: 50%;
|
||||
background-clip: content-box;
|
||||
margin-right: 4px;
|
||||
margin-right: 0.25rem;
|
||||
background-color: #409eff;
|
||||
border: 1px solid #409eff;
|
||||
border: 0.0625rem solid #409eff;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .table-row-class {
|
||||
background-color: #f9f9f9e5;
|
||||
}
|
||||
</style>
|
||||
|
Loading…
Reference in New Issue
Block a user