实时地图小车角度问题
This commit is contained in:
parent
b0347e9bd1
commit
b9edaf6469
@ -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
|
||||||
|
@ -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()
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
//将节点实际宽高cm转换成px
|
//将节点实际宽高cm转换成px
|
||||||
@ -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;
|
||||||
|
@ -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>
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
//取货类型切换
|
//取货类型切换
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user