实时地图小车角度问题

This commit is contained in:
yyy 2025-04-07 14:31:52 +08:00
parent b0347e9bd1
commit b9edaf6469
6 changed files with 166 additions and 125 deletions

View File

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

View File

@ -280,7 +280,9 @@ const getAllNodeList = async () => {
allMapPointInfo.value.push(item) allMapPointInfo.value.push(item)
} }
item.dataList = item.dataList.reverse() if (item.dataList && item.dataList.length > 0) {
item.dataList = item.dataList.reverse()
}
}) })
} }
//cmpx //cmpx
@ -369,7 +371,7 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
padding: 11px 0; padding: 11px 10px;
font-family: font-family:
PingFangSC, PingFangSC,
PingFang SC; PingFang SC;

View File

@ -118,7 +118,7 @@
<span class="ml-2">cm</span> <span class="ml-2">cm</span>
</div> </div>
</el-form-item> </el-form-item>
<div v-if="form.type === 2 || form.type === 4"> <!-- <div v-if="form.type === 2 || form.type === 4">
<el-form-item label="库位方向" prop="direction"> <el-form-item label="库位方向" prop="direction">
<el-select <el-select
v-model="form.direction" v-model="form.direction"
@ -145,7 +145,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</div> </div>
</div> </div> -->
</div> </div>
</el-form> </el-form>
<template #footer> <template #footer>

View File

@ -117,7 +117,7 @@
position: absolute; position: absolute;
top: 50%; top: 50%;
left: 40%; left: 40%;
transform: translateX(-50%) translateY(-50%) ; transform: translateX(-50%) translateY(-50%);
color: greenyellow; color: greenyellow;
" "
> >
@ -717,21 +717,15 @@ const linkWebSocket = (url) => {
data: JSON.parse(data[key]) data: JSON.parse(data[key])
}) })
} }
// testCarList.value = JSON.parse(JSON.stringify(dataList))
// testCarList.value = mergeCarArrays(testCarList.value, dataList)
testCarList.value = mergeArraysWithoutDelete(testCarList.value, dataList) testCarList.value = mergeArraysWithoutDelete(testCarList.value, dataList)
testCarList.value.forEach((item) => { testCarList.value.forEach((item) => {
item.originWidth = imgBgObj.width item.originWidth = imgBgObj.width
item.originHeight = imgBgObj.height item.originHeight = imgBgObj.height
item.origin = imgBgObj.origin item.origin = imgBgObj.origin
item.realX = convertActualToBrowser(item.data.pose2d.x, item.data.pose2d.y).x item.realX = convertActualToBrowser(item.data.pose2d.x, item.data.pose2d.y).x
item.realY = convertActualToBrowser(item.data.pose2d.x, item.data.pose2d.y).y item.realY = convertActualToBrowser(item.data.pose2d.x, item.data.pose2d.y).y
item.robotNo =item.data.pose2d.robotNo item.robotNo = item.data.pose2d.robotNo
}) })
// console.log(testCarList.value)
} }
// //
if (jsonMsg.type == 'agv_warn') { if (jsonMsg.type == 'agv_warn') {
@ -783,17 +777,15 @@ const linkWebSocket = (url) => {
const robotByFloorAndAreaList = ref([]) // const robotByFloorAndAreaList = ref([]) //
const robotListTimer = ref(5) // const robotListTimer = ref(5) //
const robotListTimerRef = ref(null) // const robotListTimerRef = ref(null) //
const getRobotByFloorAndAreaList = () => { const getRobotByFloorAndAreaList = () => {
if(robotListTimerRef.value){ if (robotListTimerRef.value) {
clearInterval(robotListTimerRef.value) clearInterval(robotListTimerRef.value)
robotListTimerRef.value = null robotListTimerRef.value = null
} }
// robotByFloorAndAreaList.value = []
robotListTimerRef.value = setInterval(() => { robotListTimerRef.value = setInterval(() => {
MapApi.getRobotByFloorAndArea({ floor: imgBgObj.floor, area: imgBgObj.area }).then((res) => { MapApi.getRobotByFloorAndArea({ floor: imgBgObj.floor, area: imgBgObj.area }).then((res) => {
// console.log(res)
robotByFloorAndAreaList.value = res robotByFloorAndAreaList.value = res
if(testCarList.value.length){ if (testCarList.value.length) {
testCarList.value = filterArrayByRobotNo(testCarList.value, robotByFloorAndAreaList.value) testCarList.value = filterArrayByRobotNo(testCarList.value, robotByFloorAndAreaList.value)
} }
}) })
@ -801,14 +793,13 @@ const getRobotByFloorAndAreaList = () => {
} }
// 线 // 线
const filterArrayByRobotNo = (arr1, arr2) =>{ const filterArrayByRobotNo = (arr1, arr2) => {
return arr1.filter(item => { return arr1.filter((item) => {
const robotNo = item.data.pose2d.robotNo; const robotNo = item.data.pose2d.robotNo
return arr2.includes(robotNo); return arr2.includes(robotNo)
}); })
} }
const mergeCarArrays = (arr1, arr2) => { const mergeCarArrays = (arr1, arr2) => {
const result = [] const result = []
const macAddressSet = new Set() const macAddressSet = new Set()
@ -961,7 +952,7 @@ const computedRatio = () => {
// //
const radianToDegree = (radian) => { const radianToDegree = (radian) => {
const degree = radian * (180 / Math.PI) const degree = radian * (180 / Math.PI)
return `${degree}` return `${-degree}`
} }
const state = reactive({ const state = reactive({
@ -1097,8 +1088,7 @@ const carDbClick = (item, index) => {
defineExpose({ getMapData }) // open defineExpose({ getMapData }) // open
onMounted(() => {}) onMounted(() => {})
onBeforeUnmount(() => { onBeforeUnmount(() => {
// console.log('onBeforeUnmount') if (robotListTimerRef.value) {
if(robotListTimerRef.value){
clearInterval(robotListTimerRef.value) clearInterval(robotListTimerRef.value)
robotListTimerRef.value = null robotListTimerRef.value = null
} }

View File

@ -48,7 +48,7 @@
:disabled="montageNumberDisable" :disabled="montageNumberDisable"
class="!w-220px" class="!w-220px"
v-model="formData.montageNumber" v-model="formData.montageNumber"
:min="0" :min="1"
:max="10" :max="10"
@change="montageNumberChange" @change="montageNumberChange"
/> />
@ -890,74 +890,49 @@ const taskTypeChange = (item, index) => {
let nextItem = formData.value.taskDetailList[index + 1] let nextItem = formData.value.taskDetailList[index + 1]
if (!nextItem) return if (!nextItem) return
if (item.taskType === 1) { //线
nextItem.taskTypeList = [ if (formData.value.doMoveAll === 1) {
{ label: '取放货', value: 1 }, nextItem.taskTypeList = [{ label: '取放货', value: 1 }]
{ label: '移动', value: 4 }, } else {
{ label: '仅取货', value: 5 } //
] if (formData.value.doCycle === 1) {
} else if (item.taskType === 2) { nextItem.taskTypeList = [
formData.value.taskDetailList = formData.value.taskDetailList.slice(0, index + 1) { label: '取放货', value: 1 },
formData.value.montageNumber = formData.value.taskDetailList.length { label: '移动', value: 4 }
} else if (item.taskType === 3) { ]
formData.value.taskDetailList = formData.value.taskDetailList.slice(0, index + 1)
formData.value.montageNumber = formData.value.taskDetailList.length
} else if (item.taskType === 4) {
nextItem.taskTypeList = [
{ label: '取放货', value: 1 },
{ label: '移动', value: 4 },
{ label: '仅取货', value: 5 }
]
} else if (item.taskType === 5) {
nextItem.taskTypeList = [
{ label: '移动', value: 4 },
{ label: '仅放货', value: 6 }
]
} else if (item.taskType === 6) {
nextItem.taskTypeList = [
{ label: '取放货', value: 1 },
{ label: '移动', value: 4 },
{ label: '仅取货', value: 5 }
]
}
}
//
const doMoveAllChange = (e) => {
return new Promise((resolve, reject) => {
if (formData.value.doMoveAll === 1) {
resolve(true)
} else { } else {
try { if (item.taskType === 1) {
ElMessageBox.confirm('开启搬空所选线库/区域,任务类型只能选择取放货,是否切换?', '提示', { nextItem.taskTypeList = [
confirmButtonText: '确定', { label: '取放货', value: 1 },
cancelButtonText: '取消', { label: '移动', value: 4 },
type: 'warning' { label: '仅取货', value: 5 }
}) ]
.then(async () => { } else if (item.taskType === 2) {
resolve(true) formData.value.taskDetailList = formData.value.taskDetailList.slice(0, index + 1)
formData.value.taskDetailList = formData.value.taskDetailList.filter((item) => { formData.value.montageNumber = formData.value.taskDetailList.length
return item.taskType === 1 } else if (item.taskType === 3) {
}) formData.value.taskDetailList = formData.value.taskDetailList.slice(0, index + 1)
formData.value.montageNumber = formData.value.taskDetailList.length // formData.value.montageNumber = formData.value.taskDetailList.length
}) } else if (item.taskType === 4) {
.catch(() => { nextItem.taskTypeList = [
ElMessage({ { label: '取放货', value: 1 },
type: 'info', { label: '移动', value: 4 },
message: '取消成功' { label: '仅取货', value: 5 }
}) ]
reject(false) } else if (item.taskType === 5) {
}) nextItem.taskTypeList = [
} catch (err) { { label: '移动', value: 4 },
reject(false) { label: '仅放货', value: 6 }
]
} else if (item.taskType === 6) {
nextItem.taskTypeList = [
{ label: '取放货', value: 1 },
{ label: '移动', value: 4 },
{ label: '仅取货', value: 5 }
]
} }
} }
}) }
// if (e === 1) {
// formData.value.taskDetailList.forEach((item) => {
// item.taskType = 1
// })
// }
} }
// //
@ -1029,7 +1004,7 @@ const montageNumberChange = (currentValue: number, oldValue: number) => {
robotNo: undefined, // robotNo: undefined, //
needLock: 0, //(0:1:) needLock: 0, //(0:1:)
electricity: undefined, //() electricity: undefined, //()
taskTypeList: taskTypeList taskTypeList: index === 0 ? taskTypeList : []
}) })
} }
} else { } else {
@ -1046,26 +1021,48 @@ const montageTaskChange = (e) => {
} }
} }
// //
const doCycleChange = () => { const doMoveAllChange = (e) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (formData.value.doCycle === 1) { if (formData.value.doMoveAll === 1) {
formData.value.cycleNumber = 0 // if (formData.value.doCycle === 1) {
formData.value.taskDetailList.forEach((item, index) => {
item.taskTypeList = [
{ label: '取放货', value: 1 },
{ label: '移动', value: 4 }
]
})
} else {
formData.value.taskDetailList.forEach((item, index) => {
item.taskType = undefined
if (index === 0) {
item.taskTypeList = [
{ label: '取放货', value: 1 },
{ label: '停车', value: 2 },
{ label: '充电', value: 3 },
{ label: '移动', value: 4 },
{ label: '仅取货', value: 5 },
{ label: '仅放货', value: 6 }
]
} else {
item.taskTypeList = []
}
})
}
resolve(true) resolve(true)
} else { } else {
try { try {
ElMessageBox.confirm('开启循环任务,任务类型只能选择取放货和移动,是否切换?', '提示', { ElMessageBox.confirm('开启搬空所选线库/区域,任务类型只能选择取放货,是否切换?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}) })
.then(async () => { .then(async () => {
resolve(true) resolve(true)
formData.value.cycleNumber = 1 // formData.value.taskDetailList.forEach((item) => {
formData.value.taskDetailList = formData.value.taskDetailList.filter( item.taskType = undefined
(item, index) => item.taskType === 1 || item.taskType === 4 item.taskTypeList = [{ label: '取放货', value: 1 }]
) })
formData.value.montageNumber = formData.value.taskDetailList.length //
}) })
.catch(() => { .catch(() => {
ElMessage({ ElMessage({
@ -1079,17 +1076,63 @@ const doCycleChange = () => {
} }
} }
}) })
}
// if (e === 0) { //
// formData.value.cycleNumber = 0 // const doCycleChange = () => {
// } else { return new Promise((resolve, reject) => {
// formData.value.cycleNumber = 1 // if (formData.value.doCycle === 1) {
// formData.value.taskDetailList = formData.value.taskDetailList.filter( formData.value.cycleNumber = 0 //
// (item, index) => item.taskType === 1 formData.value.taskDetailList.forEach((item, index) => {
// ) item.taskType = undefined
// formData.value.montageNumber = formData.value.taskDetailList.length // if (index === 0) {
// message.warning('') item.taskTypeList = [
// } { label: '取放货', value: 1 },
{ label: '停车', value: 2 },
{ label: '充电', value: 3 },
{ label: '移动', value: 4 },
{ label: '仅取货', value: 5 },
{ label: '仅放货', value: 6 }
]
} else {
item.taskTypeList = []
}
})
resolve(true)
} else {
try {
ElMessageBox.confirm('开启循环任务,任务类型只能选择取放货和移动,是否切换?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(async () => {
resolve(true)
formData.value.cycleNumber = 1 //
formData.value.taskDetailList.forEach((item) => {
item.taskType = undefined
if (formData.value.doMoveAll === 1) {
item.taskTypeList = [{ label: '取放货', value: 1 }]
} else {
item.taskTypeList = [
{ label: '取放货', value: 1 },
{ label: '移动', value: 4 }
]
}
})
})
.catch(() => {
ElMessage({
type: 'info',
message: '取消成功'
})
reject(false)
})
} catch (err) {
reject(false)
}
}
})
} }
// //

View File

@ -176,7 +176,7 @@
</el-table-column> </el-table-column>
<el-table-column label="序号" type="index" align="center" width="60" /> <el-table-column label="序号" type="index" align="center" width="60" />
<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" width="80" />
<el-table-column label="物料信息" prop="skuInfo" align="center" show-overflow-tooltip /> <el-table-column label="物料信息" prop="skuInfo" align="center" show-overflow-tooltip />
<el-table-column <el-table-column
label="开始时间" label="开始时间"
@ -191,6 +191,12 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="其他信息" prop="otherMsg" align="center" show-overflow-tooltip /> <el-table-column label="其他信息" prop="otherMsg" align="center" show-overflow-tooltip />
<el-table-column
label="创建日期"
prop="createTime"
align="center"
:formatter="dateFormatter"
/>
</el-table> </el-table>
<!-- 分页 --> <!-- 分页 -->
<Pagination <Pagination