任务管理

This commit is contained in:
yyy 2025-01-18 17:02:38 +08:00
parent 7ac789c919
commit 8dfb5c8ed7
6 changed files with 746 additions and 321 deletions

View File

@ -4,8 +4,8 @@ NODE_ENV=production
VITE_DEV=true VITE_DEV=true
# 请求路径 # 请求路径
# VITE_BASE_URL='http://192.168.10.134:48080' VITE_BASE_URL='http://192.168.0.90:48080'
VITE_BASE_URL='http://192.168.0.189:48080' # VITE_BASE_URL='http://192.168.0.189:48080'
# 文件上传类型server - 后端上传, client - 前端直连上传仅支持S3服务 # 文件上传类型server - 后端上传, client - 前端直连上传仅支持S3服务
VITE_UPLOAD_TYPE=server VITE_UPLOAD_TYPE=server

View File

@ -4,8 +4,8 @@ NODE_ENV=development
VITE_DEV=true VITE_DEV=true
# 请求路径 # 请求路径
# VITE_BASE_URL='http://192.168.10.134:48080' VITE_BASE_URL='http://192.168.0.90:48080'
VITE_BASE_URL='http://192.168.0.189:48080' # VITE_BASE_URL='http://192.168.0.189:48080'
# 文件上传类型server - 后端上传, client - 前端直连上传,仅支持 S3 服务 # 文件上传类型server - 后端上传, client - 前端直连上传,仅支持 S3 服务
VITE_UPLOAD_TYPE=server VITE_UPLOAD_TYPE=server

View File

@ -31,6 +31,6 @@ export const updateTask = (data) => {
} }
//获得机器人任务主表分页 //获得机器人任务主表分页
export const getTaskPageList = async (params) => { export const getTaskPageList = async (data) => {
return await request.get({ url: `/system/robot/task/page`, params }) return await request.post({ url: `/system/robot/task/page`, data })
} }

View File

@ -1,64 +1,81 @@
<template> <template>
<Dialog v-model="dialogVisible" title="新建任务" width="600" class="task-dialog"> <Dialog v-model="dialogVisible" title="新建任务" width="600" class="task-dialog">
<el-form :model="formData" label-width="auto" ref="formRef" :rules="formRules"> <el-form :model="formData" label-width="auto" ref="formRef" :rules="formRules">
<el-form-item label="取货类型" prop="takeType" required> <el-form-item required label="任务号" prop="taskNo">
<el-select v-model="formData.takeType" placeholder="请选择取货类型" required> <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="1" />
<el-option label="线库" :value="2" /> <el-option label="线库" :value="2" />
<el-option label="区域" :value="3" /> <el-option label="区域" :value="3" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item required label="取货位置" prop="takeId"> <el-form-item required label="取货位置" prop="taskDetailList[0].takeId">
<el-select <el-select
:disabled="!formData.takeType" :disabled="!formData.taskDetailList[0].takeType"
v-model="formData.takeId" v-model="formData.taskDetailList[0].takeId"
filterable filterable
remote remote
reserve-keyword reserve-keyword
placeholder="请输入取货位置" placeholder="请输入取货位置"
:remote-method=" :remote-method="
(query) => { (query) => {
takeRemoteMethod(query, formData) takeRemoteMethod(query, formData.taskDetailList[0])
} }
" "
:loading="loading" :loading="loading"
> >
<el-option <el-option
v-for="item in formData.takeList" v-for="item in formData.taskDetailList[0].takeList"
:key="item.id" :key="item.id"
:label="item.locationNo" :label="item.locationNo"
:value="item.id" :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-select>
</el-form-item> </el-form-item>
<el-form-item label="放货类型" prop="releaseType" required> <el-form-item label="放货类型" prop="taskDetailList[0].releaseType" required>
<el-select v-model="formData.releaseType" placeholder="请选择放货类型"> <el-select v-model="formData.taskDetailList[0].releaseType" placeholder="请选择放货类型">
<el-option label="库位" :value="1" /> <el-option label="库位" :value="1" />
<el-option label="线库" :value="2" /> <el-option label="线库" :value="2" />
<el-option label="区域" :value="3" /> <el-option label="区域" :value="3" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item required label="放货位置" prop="releaseId"> <el-form-item required label="放货位置" prop="taskDetailList[0].releaseId">
<el-select <el-select
:disabled="!formData.releaseType" :disabled="!formData.taskDetailList[0].releaseType"
v-model="formData.releaseId" v-model="formData.taskDetailList[0].releaseId"
filterable filterable
remote remote
reserve-keyword reserve-keyword
placeholder="请输入放货位置" placeholder="请输入放货位置"
:remote-method=" :remote-method="
(query) => { (query) => {
releaseRemoteMethod(query, formData) releaseRemoteMethod(query, formData.taskDetailList[0])
} }
" "
:loading="loading" :loading="loading"
> >
<el-option <el-option
v-for="item in formData.releaseList" v-for="item in formData.taskDetailList[0].releaseList"
:key="item.id" :key="item.id"
:label="item.locationNo" :label="item.locationNo"
:value="item.id" :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-select>
</el-form-item> </el-form-item>
<el-form-item label="物料信息" prop="skuInfo"> <el-form-item label="物料信息" prop="skuInfo">
@ -75,7 +92,13 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="优先级" prop="priority"> <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>
<el-form-item label="其他信息" prop="otherMsg"> <el-form-item label="其他信息" prop="otherMsg">
<el-input <el-input
@ -107,8 +130,21 @@ const formLoading = ref(false) // 表单的加载中1修改时的数据加
const formData = ref({ const formData = ref({
montageTask: 0, //01 montageTask: 0, //01
montageNumber: 0, // montageNumber: 1, //
taskDetailList: [], // taskDetailList: [
{
taskType: 1, //12 345678
releaseType: 1, // 12线 3
takeType: 1, //12线 3
releaseId: undefined, //id
releaseList: [], //
takeId: undefined, //id
takeList: [], //
robotNo: undefined, //AGV
needLock: 0, //(0:1:)
electricity: undefined //()
}
], //
skuInfo: undefined, // skuInfo: undefined, //
skuBatch: undefined, // skuBatch: undefined, //
skuNumber: undefined, // skuNumber: undefined, //
@ -125,18 +161,26 @@ const formData = ref({
endTime: 0 // endTime: 0 //
}) })
const formRules = reactive({ const formRules = reactive({
name1: [{ required: true, message: '取货类型不能为空', trigger: 'blur' }], taskNo: [{ required: true, message: '任务号不能为空', trigger: 'change' }],
name2: [{ required: true, message: '取货位置不能为空', trigger: 'blur' }], 'taskDetailList[0].takeType': [
name3: [{ required: true, message: '放货类型不能为空', trigger: 'blur' }], { required: true, message: '取货类型不能为空', trigger: 'change' }
name4: [{ required: true, message: '放货位置不能为空', trigger: 'blur' }] ],
'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 formRef = ref() // Ref
/** 打开弹窗 */ /** 打开弹窗 */
const open = async () => { const open = async () => {
dialogVisible.value = true dialogVisible.value = true
getCanUseRobotList()
resetForm() resetForm()
getCanUseRobotList()
getTaskNo()
} }
defineExpose({ open }) // open defineExpose({ open }) // open
@ -150,9 +194,10 @@ const submitForm = async () => {
// //
formLoading.value = true formLoading.value = true
try { try {
await MapTaskAPi.createTask(formData.value)
message.success(t('common.createSuccess'))
dialogVisible.value = false dialogVisible.value = false
// push({ name: 'taskManagementTaskList' })
emit('success')
} finally { } finally {
formLoading.value = false formLoading.value = false
} }
@ -170,12 +215,57 @@ const getCanUseRobotList = async () => {
robotList.value = await MapTaskAPi.getCanUseRobot() robotList.value = await MapTaskAPi.getCanUseRobot()
} }
//
const getTaskNo = async () => {
formData.value.taskNo = await MapTaskAPi.getTaskNo()
}
//
const getLocationList = async (type, locationNo) => {
return await MapTaskAPi.getLocationByName({
type, // 12线 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 = () => { const resetForm = () => {
formData.value = { formData.value = {
montageTask: 0, //01 montageTask: 0, //01
montageNumber: 0, // montageNumber: 0, //
taskDetailList: [], // taskDetailList: [
{
taskType: 1, //12 345678
releaseType: 1, // 12线 3
takeType: 1, //12线 3
releaseId: undefined, //id
releaseList: [], //
takeId: undefined, //id
takeList: [], //
robotNo: undefined, //AGV
needLock: 0, //(0:1:)
electricity: undefined //()
}
], //
skuInfo: undefined, // skuInfo: undefined, //
skuBatch: undefined, // skuBatch: undefined, //
skuNumber: undefined, // skuNumber: undefined, //
@ -211,4 +301,52 @@ const resetForm = () => {
align-items: center; align-items: center;
justify-content: flex-end; 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> </style>

View File

@ -12,7 +12,7 @@
</div> </div>
</ContentWrap> </ContentWrap>
<el-form :model="formData" label-width="145" ref="formRef"> <el-form :model="formData" label-width="94" ref="formRef">
<el-card shadow="never"> <el-card shadow="never">
<template #header> <template #header>
<div class="card-header"> <div class="card-header">
@ -23,89 +23,125 @@
<div> <div>
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <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-input v-model="formData.taskNo" :disabled="true" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </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 <div
v-if=" v-if="
formData.taskDetailList[0].taskType === 1 || formData.taskDetailList[0].taskType !== 2 && formData.taskDetailList[0].taskType !== 3
formData.taskDetailList[0].taskType === 5 ||
formData.taskDetailList[0].taskType === 6
" "
> >
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <el-col :span="12">
<el-form-item required label="搬空所选线库/区域" prop="doMoveAll"> <el-form-item required label="是否拼接任务" prop="montageTask" label-width="146">
<el-switch v-model="formData.doMoveAll" :active-value="1" :inactive-value="0" /> <el-select
</el-form-item> v-model="formData.montageTask"
</el-col> placeholder="请选择"
</el-row> @change="montageTaskChange"
<el-row :gutter="24"> >
<el-col :span="12"> <el-option label="不拼接" :value="0" />
<el-form-item required label="任务循环" prop="doCycle"> <el-option label="拼接" :value="1" />
<el-switch v-model="formData.doCycle" :active-value="1" :inactive-value="0" /> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12" v-if="formData.doCycle === 1"> <el-col :span="12" v-if="formData.montageTask === 1">
<el-form-item required label="循环次数" prop="cycleNumber"> <el-form-item required label="任务拼接数量" prop="montageNumber" label-width="146">
<el-input-number v-model="formData.cycleNumber" :min="0" /> <el-input-number
</el-form-item> class="!w-220px"
</el-col> v-model="formData.montageNumber"
</el-row> :min="1"
<el-row :gutter="24"> :max="10"
<el-col :span="12"> @change="montageNumberChange"
<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> </el-form-item>
</el-col> </el-col>
</el-row> </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>
</div> </div>
</el-card> </el-card>
</el-form>
<el-card shadow="never" class="mt-4"> <el-card shadow="never" class="mt-4">
<template #header> <template #header>
<div class="card-header"> <div class="card-header">
<span class="line"></span> <span class="line"></span>
<span>任务详情</span> <span>任务详情</span>
</div> </div>
</template> </template>
<div class="task-list"> <div class="task-list">
<div v-for="(detailItem, index) in formData.taskDetailList" :key="index" class="task-item"> <div
<div class="index-logo">{{ index + 1 }}</div> v-for="(detailItem, index) in formData.taskDetailList"
<el-form :model="detailItem" label-width="90"> :key="index"
class="task-item"
>
<div class="index-logo">{{ index + 1 }}</div>
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="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 <el-select
:disabled="formData.doCycle == 1 && index == 0"
v-model="detailItem.taskType" v-model="detailItem.taskType"
placeholder="请选择" placeholder="请选择"
@change="taskTypeChange(detailItem, index)" @change="taskTypeChange(detailItem, index)"
@ -126,11 +162,16 @@
<div v-if="detailItem.taskType === 1"> <div v-if="detailItem.taskType === 1">
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <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 <el-select
v-model="detailItem.takeType" v-model="detailItem.takeType"
placeholder="请选择取货类型" placeholder="请选择取货类型"
@change="getPickupLocation(detailItem)" @change="takeTypeChange(detailItem)"
> >
<el-option label="库位" :value="1" /> <el-option label="库位" :value="1" />
<el-option label="线库" :value="2" /> <el-option label="线库" :value="2" />
@ -139,7 +180,12 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <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 <el-select
:disabled="!detailItem.takeType" :disabled="!detailItem.takeType"
v-model="detailItem.takeId" v-model="detailItem.takeId"
@ -166,11 +212,16 @@
</el-row> </el-row>
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <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 <el-select
v-model="detailItem.releaseType" v-model="detailItem.releaseType"
placeholder="请选择放货类型" placeholder="请选择放货类型"
@change="getDropOffLocation(detailItem)" @change="releaseTypeChange(detailItem)"
> >
<el-option label="库位" :value="1" /> <el-option label="库位" :value="1" />
<el-option label="线库" :value="2" /> <el-option label="线库" :value="2" />
@ -179,7 +230,12 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <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 <el-select
:disabled="!detailItem.releaseType" :disabled="!detailItem.releaseType"
v-model="detailItem.releaseId" v-model="detailItem.releaseId"
@ -206,7 +262,7 @@
</el-row> </el-row>
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="指定车辆" prop="robotNo"> <el-form-item label="指定车辆">
<el-select v-model="detailItem.robotNo" placeholder="请选择车辆"> <el-select v-model="detailItem.robotNo" placeholder="请选择车辆">
<el-option <el-option
v-for="car in robotList" v-for="car in robotList"
@ -223,7 +279,12 @@
<div v-if="detailItem.taskType === 2"> <div v-if="detailItem.taskType === 2">
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <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-select v-model="detailItem.robotNo" placeholder="请选择车辆">
<el-option <el-option
v-for="car in robotList" v-for="car in robotList"
@ -235,7 +296,12 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <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-select v-model="detailItem.needLock" placeholder="停车后锁定">
<el-option label="是" :value="0" /> <el-option label="是" :value="0" />
<el-option label="否" :value="1" /> <el-option label="否" :value="1" />
@ -248,7 +314,12 @@
<div v-if="detailItem.taskType === 3"> <div v-if="detailItem.taskType === 3">
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <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 <el-select
v-model="detailItem.robotNo" v-model="detailItem.robotNo"
placeholder="请选择车辆" placeholder="请选择车辆"
@ -268,7 +339,12 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <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 <el-input
v-model="detailItem.electricity" v-model="detailItem.electricity"
placeholder="请输入车辆电量" placeholder="请输入车辆电量"
@ -282,7 +358,12 @@
<div v-if="detailItem.taskType === 4"> <div v-if="detailItem.taskType === 4">
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <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-select v-model="detailItem.robotNo" placeholder="请选择车辆">
<el-option <el-option
v-for="car in robotList" v-for="car in robotList"
@ -294,7 +375,12 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <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 <el-select
:disabled="!detailItem.takeType" :disabled="!detailItem.takeType"
v-model="detailItem.releaseId" v-model="detailItem.releaseId"
@ -324,11 +410,16 @@
<div v-if="detailItem.taskType === 5"> <div v-if="detailItem.taskType === 5">
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <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 <el-select
v-model="detailItem.takeType" v-model="detailItem.takeType"
placeholder="请选择取货类型" placeholder="请选择取货类型"
@change="getPickupLocation(detailItem)" @change="takeTypeChange(detailItem)"
> >
<el-option label="库位" :value="1" /> <el-option label="库位" :value="1" />
<el-option label="线库" :value="2" /> <el-option label="线库" :value="2" />
@ -337,7 +428,12 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <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 <el-select
:disabled="!detailItem.takeType" :disabled="!detailItem.takeType"
v-model="detailItem.takeId" v-model="detailItem.takeId"
@ -364,7 +460,12 @@
</el-row> </el-row>
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <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-select v-model="detailItem.robotNo" placeholder="请选择车辆">
<el-option <el-option
v-for="car in robotList" v-for="car in robotList"
@ -381,11 +482,16 @@
<div v-if="detailItem.taskType === 6"> <div v-if="detailItem.taskType === 6">
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <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 <el-select
v-model="detailItem.releaseType" v-model="detailItem.releaseType"
placeholder="请选择放货类型" placeholder="请选择放货类型"
@change="getDropOffLocation(detailItem)" @change="releaseTypeChange(detailItem)"
> >
<el-option label="库位" :value="1" /> <el-option label="库位" :value="1" />
<el-option label="线库" :value="2" /> <el-option label="线库" :value="2" />
@ -394,7 +500,12 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <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 <el-select
:disabled="!detailItem.releaseType" :disabled="!detailItem.releaseType"
v-model="detailItem.releaseId" v-model="detailItem.releaseId"
@ -438,7 +549,12 @@
<div v-if="detailItem.taskType === 7"> <div v-if="detailItem.taskType === 7">
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <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-select v-model="detailItem.robotNo" placeholder="请选择车辆">
<el-option <el-option
v-for="car in robotList" v-for="car in robotList"
@ -450,7 +566,12 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <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 <el-select
:disabled="!detailItem.releaseType" :disabled="!detailItem.releaseType"
v-model="detailItem.releaseId" v-model="detailItem.releaseId"
@ -480,7 +601,12 @@
<div v-if="detailItem.taskType === 8"> <div v-if="detailItem.taskType === 8">
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <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-select v-model="detailItem.robotNo" placeholder="请选择车辆">
<el-option <el-option
v-for="car in robotList" v-for="car in robotList"
@ -492,7 +618,12 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <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 <el-select
:disabled="!detailItem.releaseType" :disabled="!detailItem.releaseType"
v-model="detailItem.releaseId" v-model="detailItem.releaseId"
@ -518,10 +649,10 @@
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
</el-form> </div>
</div> </div>
</div> </el-card>
</el-card> </el-form>
</div> </div>
</template> </template>
@ -535,9 +666,11 @@ defineOptions({ name: 'taskManagementCreateTask' })
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
const { push } = useRouter()
const formData = reactive({ const formData = reactive({
montageTask: 0, //01 montageTask: 1, //01
montageNumber: 0, // montageNumber: 1, //
taskDetailList: [ taskDetailList: [
{ {
taskType: 1, //12 345678 taskType: 1, //12 345678
@ -559,7 +692,7 @@ const formData = reactive({
otherMsg: undefined, // otherMsg: undefined, //
doCycle: 0, //(0:1) doCycle: 0, //(0:1)
doMoveAll: 0, //线/(0:1) doMoveAll: 0, //线/(0:1)
cycleNumber: 0, // cycleNumber: 0, //
remainingCycleNumber: 1, //1 remainingCycleNumber: 1, //1
taskNo: undefined, // taskNo: undefined, //
taskStatus: 0, //(0:123) taskStatus: 0, //(0:123)
@ -570,7 +703,7 @@ const formData = reactive({
// //
const getTaskNo = async () => { 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) => { const releaseRemoteMethod = async (query, item) => {
if (query) { if (query) {
item.releaseList = await getLocationList(item.releaseType, query) item.releaseList = await getLocationList(item.releaseType, query)
@ -613,144 +747,168 @@ const robotNoChange = (e, detailItem) => {
// //
const taskTypeChange = (item, index) => { 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] let lastItem = formData.taskDetailList[index - 1]
if (lastItem.taskType === 1) { if (index === 0) {
if (item.takeType === 2) { if (item.taskType === 2) {
message.warning('取放货后不可连接停车') formData.montageTask = 0
item.takeType = 1 formData.montageNumber = 1
return formData.taskDetailList = formData.taskDetailList.slice(0, 1)
message.warning('任务1为停车不可拼接任务')
} }
if (item.takeType === 3) { if (item.taskType === 3) {
message.warning('取放货后不可连接充电') formData.montageTask = 0
item.takeType = 1 formData.montageNumber = 1
return formData.taskDetailList = formData.taskDetailList.slice(0, 1)
message.warning('任务1为充电不可拼接任务')
} }
if (item.takeType === 6) { } else {
message.warning('取放货后不可连接仅放货') //
item.takeType = 1 if (lastItem.taskType === 1) {
return if (item.taskType === 2) {
} message.warning('取放货后不可连接停车')
if (item.takeType === 7) { item.taskType = undefined
message.warning('取放货后不可连接扫描码') return
item.takeType = 1 }
return if (item.taskType === 3) {
} message.warning('取放货后不可连接充电')
if (item.takeType === 8) { item.taskType = undefined
message.warning('取放货后不可连接检测托盘类型') return
item.takeType = 1 }
return if (item.taskType === 6) {
} message.warning('取放货后不可连接仅放货')
} else if (lastItem.taskType === 2) { item.taskType = undefined
// return
} else if (lastItem.taskType === 3) { }
// if (item.taskType === 7) {
} else if (lastItem.taskType === 4) { message.warning('取放货后不可连接扫描码')
if (item.takeType === 2) { item.taskType = undefined
message.warning('移动后不可连接停车') return
item.takeType = 1 }
return if (item.taskType === 8) {
} message.warning('取放货后不可连接检测托盘类型')
if (item.takeType === 3) { item.taskType = undefined
message.warning('移动后不可连接充电') return
item.takeType = 1 }
return } else if (lastItem.taskType === 2) {
} //
if (item.takeType === 6) { } else if (lastItem.taskType === 3) {
message.warning('移动后不可连接仅放货') //
item.takeType = 1 } else if (lastItem.taskType === 4) {
return if (item.taskType === 2) {
} message.warning('移动后不可连接停车')
} else if (lastItem.taskType === 5) { item.taskType = undefined
if (item.takeType === 1) { return
message.warning('仅取货后不可连接取放货') }
item.takeType = 1 if (item.taskType === 3) {
return message.warning('移动后不可连接充电')
} item.taskType = undefined
if (item.takeType === 2) { return
message.warning('仅取货后不可连接停车') }
item.takeType = 1 if (item.taskType === 6) {
return message.warning('移动后不可连接仅放货')
} item.taskType = undefined
if (item.takeType === 3) { return
message.warning('仅取货后不可连接充电') }
item.takeType = 1 } else if (lastItem.taskType === 5) {
return if (item.taskType === 1) {
} message.warning('仅取货后不可连接取放货')
if (item.takeType === 5) { item.taskType = undefined
message.warning('仅取货后不可连接仅取货') return
item.takeType = 1 }
return if (item.taskType === 2) {
} message.warning('仅取货后不可连接停车')
if (item.takeType === 7) { item.taskType = undefined
message.warning('仅取货后不可连接扫描码') return
item.takeType = 1 }
return if (item.taskType === 3) {
} message.warning('仅取货后不可连接充电')
if (item.takeType === 8) { item.taskType = undefined
message.warning('仅取货后不可连接检测托盘类型') return
item.takeType = 1 }
return if (item.taskType === 5) {
} message.warning('仅取货后不可连接仅取货')
} else if (lastItem.taskType === 6) { item.taskType = undefined
if (item.takeType === 2) { return
message.warning('仅放货后不可连接停车') }
item.takeType = 1 if (item.taskType === 7) {
return message.warning('仅取货后不可连接扫描码')
} item.taskType = undefined
if (item.takeType === 3) { return
message.warning('仅放货后不可连接充电') }
item.takeType = 1 if (item.taskType === 8) {
return message.warning('仅取货后不可连接检测托盘类型')
} item.taskType = undefined
if (item.takeType === 6) { return
message.warning('仅放货后不可连接仅放货') }
item.takeType = 1 } else if (lastItem.taskType === 6) {
return if (item.taskType === 2) {
} message.warning('仅放货后不可连接停车')
if (item.takeType === 7) { item.taskType = undefined
message.warning('仅放货后不可连接扫描码') return
item.takeType = 1 }
return if (item.taskType === 3) {
} message.warning('仅放货后不可连接充电')
} else if (lastItem.taskType === 7) { item.taskType = undefined
if (item.takeType === 2) { return
message.warning('扫描码后不可连接停车') }
item.takeType = 1 if (item.taskType === 6) {
return message.warning('仅放货后不可连接仅放货')
} item.taskType = undefined
if (item.takeType === 3) { return
message.warning('扫描码后不可连接充电') }
item.takeType = 1 if (item.taskType === 7) {
return message.warning('仅放货后不可连接扫描码')
} item.taskType = undefined
if (item.takeType === 6) { return
message.warning('扫描码后不可连接仅放货') }
item.takeType = 1 } else if (lastItem.taskType === 7) {
return if (item.taskType === 2) {
} message.warning('扫描码后不可连接停车')
if (item.takeType === 7) { item.taskType = undefined
message.warning('扫描码后不可连接扫描码') return
item.takeType = 1 }
return if (item.taskType === 3) {
} message.warning('扫描码后不可连接充电')
} else if (lastItem.taskType === 8) { item.taskType = undefined
if (item.takeType === 2) { return
message.warning('检测托盘类型后不可连接停车') }
item.takeType = 1 if (item.taskType === 6) {
return message.warning('扫描码后不可连接仅放货')
} item.taskType = undefined
if (item.takeType === 3) { return
message.warning('检测托盘类型后不可连接充电') }
item.takeType = 1 if (item.taskType === 7) {
return message.warning('扫描码后不可连接扫描码')
} item.taskType = undefined
if (item.takeType === 6) { return
message.warning('检测托盘类型后不可连接仅放货') }
item.takeType = 1 } else if (lastItem.taskType === 8) {
return 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) => { const montageNumberChange = (currentValue: number, oldValue: number) => {
if (currentValue > oldValue) { if (currentValue > oldValue) {
// //
let addLength = currentValue - formData.taskDetailList.length + 1 let addLength = currentValue - formData.taskDetailList.length
for (let index = 0; index < addLength; index++) { for (let index = 0; index < addLength; index++) {
formData.taskDetailList.push({ formData.taskDetailList.push({
taskType: 1, //12 345678 taskType: 1, //12 345678
@ -776,24 +934,59 @@ const montageNumberChange = (currentValue: number, oldValue: number) => {
} }
} else { } 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 formRef = ref()
const formLoading = ref(false) const formLoading = ref(false)
//
const submit = async () => { const submit = async () => {
// await formRef.value.validate(async (valid, fields) => {
await formRef.value.validate() if (valid) {
// formLoading.value = true
formLoading.value = true try {
try { await MapTaskAPi.createTask(formData)
await MapTaskAPi.createTask(formData) message.success(t('common.createSuccess'))
message.success(t('common.createSuccess')) push({ name: 'taskManagementTaskList' })
} finally { } finally {
formLoading.value = false formLoading.value = false
} }
} else {
message.warning('请补充完整表单信息!')
}
})
} }
/** 初始化 **/ /** 初始化 **/

View File

@ -2,11 +2,11 @@
<ContentWrap> <ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form
class="-mb-0.9375rem" class="-mb-15px"
:model="queryParams" :model="queryParams"
ref="queryFormRef" ref="queryFormRef"
:inline="true" :inline="true"
label-width="4.25rem" label-width="68px"
> >
<el-form-item label="任务号" prop="taskNo"> <el-form-item label="任务号" prop="taskNo">
<el-input <el-input
@ -14,22 +14,26 @@
placeholder="请输入任务ID" placeholder="请输入任务ID"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
class="!w-15rem" class="!w-240px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="车辆编号" prop="robotNo"> <el-form-item label="车辆编号" prop="robotNo">
<el-select v-model="queryParams.robotNo" class="!w-15rem"> <el-select v-model="queryParams.robotNo" class="!w-240px" @change="handleQuery()">
<el-option :value="1" label="1" /> <el-option
<el-option :value="2" label="2" /> v-for="car in robotList"
<el-option :value="3" label="3" /> :key="car.id"
:label="car.robotNo"
:value="car.robotNo"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="任务状态" prop="taskStatus"> <el-form-item label="任务状态" prop="taskStatus">
<el-select <el-select
v-model="queryParams.taskStatus" v-model="queryParams.taskStatus"
class="!w-15rem" class="!w-240px"
clearable clearable
placeholder="请选择任务状态" placeholder="请选择任务状态"
@change="handleQuery()"
> >
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.ROBOT_TASK_STATUS)" v-for="dict in getIntDictOptions(DICT_TYPE.ROBOT_TASK_STATUS)"
@ -42,9 +46,10 @@
<el-form-item label="任务阶段" prop="taskStage"> <el-form-item label="任务阶段" prop="taskStage">
<el-select <el-select
v-model="queryParams.taskStage" v-model="queryParams.taskStage"
class="!w-15rem" class="!w-240px"
clearable clearable
placeholder="请选择任务阶段" placeholder="请选择任务阶段"
@change="handleQuery()"
> >
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.ROBOT_QUEST_PHASES)" v-for="dict in getIntDictOptions(DICT_TYPE.ROBOT_QUEST_PHASES)"
@ -55,15 +60,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button @click="handleQuery" <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
><Icon icon="ep:search" class="mr-0.3125rem" /> 搜索</el-button <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</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-form-item> </el-form-item>
</el-form> </el-form>
</ContentWrap> </ContentWrap>
@ -72,15 +70,18 @@
<ContentWrap> <ContentWrap>
<el-table <el-table
:data="list" :data="list"
border
style="width: 100%" style="width: 100%"
stripe row-class-name="table-row-class"
:header-cell-style="{ backgroundColor: '#EBF1FF', color: '#0D162A' }" :header-cell-style="{ backgroundColor: '#EBF1FF', color: '#0D162A' }"
> >
<el-table-column align="center" label="序号" type="expand" width="60"> <el-table-column align="center" label="序号" type="expand" width="60">
<template #default="props"> <template #default="props">
<div class="family-table"> <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"> <el-table-column align="center" label="指令" prop="taskType">
<template #default="scope"> <template #default="scope">
<el-text class="mx-1" v-if="scope.row.taskType == 1">取放货</el-text> <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="task-stage" v-if="scope.row.taskStage == 0">
<div <div
class="icon-dot" class="icon-dot"
style="background-color: #e6b500; border: 1px solid #e6b500" style="background-color: #e6b500; border: 0.0625rem solid #e6b500"
></div> ></div>
<el-text class="mx-1">待执行</el-text> <el-text class="mx-1">待执行</el-text>
</div> </div>
@ -124,7 +125,7 @@
<div class="task-stage" v-else> <div class="task-stage" v-else>
<div <div
class="icon-dot" class="icon-dot"
style="background-color: #4dc606; border: 1px solid #4dc606" style="background-color: #4dc606; border: 0.0625rem solid #4dc606"
> >
</div> </div>
<el-text class="mx-1">已完成</el-text> <el-text class="mx-1">已完成</el-text>
@ -133,8 +134,40 @@
</el-table-column> </el-table-column>
<el-table-column align="center" label="操作" width="270"> <el-table-column align="center" label="操作" width="270">
<template #default="scope"> <template #default="scope">
<el-button type="warning" @click="cancelTask(scope.row)">取消任务</el-button> <el-button
<el-button type="primary" @click="finishTask(scope.row)">人工完成</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> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -143,7 +176,7 @@
</el-table-column> </el-table-column>
<el-table-column label="任务号" prop="taskNo" align="center" /> <el-table-column label="任务号" prop="taskNo" align="center" />
<el-table-column label="优先级" prop="priority" 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 <el-table-column
label="开始时间" label="开始时间"
prop="startTime" prop="startTime"
@ -156,7 +189,7 @@
<dict-tag :type="DICT_TYPE.ROBOT_TASK_STATUS" :value="scope.row.taskStatus" /> <dict-tag :type="DICT_TYPE.ROBOT_TASK_STATUS" :value="scope.row.taskStatus" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="其他信息" prop="otherMsg" align="center" /> <el-table-column label="其他信息" prop="otherMsg" align="center" show-overflow-tooltip />
</el-table> </el-table>
<!-- 分页 --> <!-- 分页 -->
<Pagination <Pagination
@ -195,8 +228,6 @@ const queryParams = reactive({
taskStage: null taskStage: null
}) })
const queryFormRef = ref() // const queryFormRef = ref() //
const exportLoading = ref(false) //
const activeName = ref('1') // tab
/** 查询列表 */ /** 查询列表 */
const getList = async () => { const getList = async () => {
@ -209,28 +240,84 @@ const getList = async () => {
loading.value = false loading.value = false
} }
} }
//
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }) => { const objectSpanMethod = ({ row, column, rowIndex, columnIndex }, list) => {
if (columnIndex === 6) { if (columnIndex === 5) {
if (rowIndex % 2 === 0) { if (rowIndex > 0 && list[rowIndex].taskStage === list[rowIndex - 1].taskStage) {
return {
rowspan: 2,
colspan: 1
}
} else {
return { return {
rowspan: 0, rowspan: 0,
colspan: 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 = () => { const handleQuery = () => {
@ -244,19 +331,22 @@ const resetQuery = () => {
handleQuery() handleQuery()
} }
/** 添加/修改操作 */ //
const formRef = ref() const robotList = ref([])
const openForm = (id) => {} const getCanUseRobotList = async () => {
robotList.value = await MapTaskAPi.getCanUseRobot()
}
/** 初始化 **/ /** 初始化 **/
onMounted(() => { onMounted(() => {
getList() getList()
getCanUseRobotList()
}) })
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.family-table { .family-table {
margin: 0.625rem 1.25rem 0.625rem 3.125rem; margin: 10px 20px 10px 50px;
.task-stage { .task-stage {
display: flex; display: flex;
@ -266,14 +356,18 @@ onMounted(() => {
.icon-dot { .icon-dot {
display: inline-block; display: inline-block;
width: 18px; width: 1.125rem;
height: 18px; height: 1.125rem;
padding: 3px; padding: 0.1875rem;
border-radius: 50%; border-radius: 50%;
background-clip: content-box; background-clip: content-box;
margin-right: 4px; margin-right: 0.25rem;
background-color: #409eff; background-color: #409eff;
border: 1px solid #409eff; border: 0.0625rem solid #409eff;
} }
} }
::v-deep .table-row-class {
background-color: #f9f9f9e5;
}
</style> </style>