编辑地图 路线的方向改为 双向按照开始点到结束点 结束点到开始点两条路线来选择 选择种类新增正向 反向和随意方向

This commit is contained in:
yyy 2025-04-09 14:54:31 +08:00
parent 0fce228092
commit be07c2ade5
2 changed files with 139 additions and 71 deletions

View File

@ -3,11 +3,11 @@
<Dialog
v-model="dialogFormVisible"
title="编辑路线"
width="780"
width="840"
class="map-edit-route-dialog"
@close="dialogClose"
>
<el-form :model="form" label-width="120" ref="ruleFormRef" :rules="rules">
<el-form :model="form" label-width="130" ref="ruleFormRef" :rules="rules">
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="开始点位序号" prop="startingSortNum">
@ -102,24 +102,7 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="行走方法" prop="method" required>
<el-select v-model="form.method" placeholder="请选择行走方法" @change="methodChange">
<el-option label="直线" :value="0" />
<el-option label="曲线" :value="1" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="方向" prop="direction" required>
<el-select v-model="form.direction" placeholder="请选择方向" @change="directionChange">
<el-option label="单向" :value="1" />
<el-option label="双向" :value="2" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="膨胀区域前" prop="expansionZoneFront" required>
@ -190,6 +173,25 @@
</el-row>
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="行走方法" prop="method" required>
<el-select v-model="form.method" placeholder="请选择行走方法" @change="methodChange">
<el-option label="直线" :value="0" />
<el-option label="曲线" :value="1" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="方向" prop="direction" required>
<el-select v-model="form.direction" placeholder="请选择方向">
<el-option label="单向" :value="1" />
<el-option label="双向" :value="2" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<!-- 单向 -->
<el-col :span="12" v-if="form.direction === 1">
<el-form-item label="车头朝向" prop="toward" required>
<el-select v-model="form.toward" placeholder="请选择车头朝向">
<el-option
@ -198,8 +200,43 @@
:label="item.label"
:value="item.value"
/>
</el-select> </el-form-item
></el-col>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" v-if="form.direction === 2">
<el-form-item
:label="'开始点' + form.startingSortNum + '到结束点' + form.endPointSortNum"
prop="startToEndToward"
required
label-width="180"
>
<el-select v-model="form.startToEndToward" placeholder="请选择车头朝向">
<el-option
v-for="(item, index) in towardList"
:key="index"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" v-if="form.direction === 2">
<el-form-item
:label="'结束点' + form.endPointSortNum + '到开始点' + form.startingSortNum"
prop="endToStartToward"
required
label-width="180"
>
<el-select v-model="form.endToStartToward" placeholder="请选择车头朝向">
<el-option
v-for="(item, index) in towardList"
:key="index"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
@ -301,18 +338,53 @@ const form = ref({
direction: 2, // 1. 2.
forwardSpeedLimit: 1.5, //
reverseSpeedLimit: 0.4, //
toward: 0 // 0: 1: 2: 3:
toward: 0, //(0: 1: 2: 3: 4 5 6 7 8 0 1 2
startToEndToward: 0, //
endToStartToward: 0 //
})
const open = (item) => {
dialogFormVisible.value = true
form.value = item
if (form.value.direction == 1) {
//
towardList.value = unidirectional
} else {
if (form.value.direction == 2) {
//
towardList.value = bidirectional
if (item.toward === 0) {
//
form.value.startToEndToward = 0
form.value.endToStartToward = 0
} else if (item.toward === 1) {
//
form.value.startToEndToward = 0
form.value.endToStartToward = 1
} else if (item.toward === 2) {
//
form.value.startToEndToward = 1
form.value.endToStartToward = 0
} else if (item.toward === 3) {
//
form.value.startToEndToward = 1
form.value.endToStartToward = 1
} else if (item.toward === 4) {
// 4
form.value.startToEndToward = 0
form.value.endToStartToward = 2
} else if (item.toward === 5) {
//5
form.value.startToEndToward = 2
form.value.endToStartToward = 0
} else if (item.toward === 6) {
//6
form.value.startToEndToward = 2
form.value.endToStartToward = 1
} else if (item.toward === 7) {
//7
form.value.startToEndToward = 1
form.value.endToStartToward = 2
} else if (item.toward === 8) {
//8
form.value.startToEndToward = 2
form.value.endToStartToward = 2
}
}
}
@ -323,6 +395,7 @@ const dialogClose = () => {
const emit = defineEmits(['editMapRouteDialogSubmit', 'addEventListener'])
const submitForm = async (formEl) => {
if (!formEl) return
await checkToward()
await formEl.validate(async (valid, fields) => {
if (valid) {
let actualStartPoint = disposeEventPoint(form.value.startPointX, form.value.startPointY)
@ -373,46 +446,46 @@ const methodChange = (e) => {
}
}
//
const towardList = ref([])
const unidirectional = [
{
value: 0,
label: '正'
},
{
value: 1,
label: '反'
const checkToward = () => {
//
if (form.value.direction !== 2) return
//(0: 1: 2: 3: 4 5 6 7 8
if (form.value.startToEndToward === 0 && form.value.endToStartToward === 0) {
form.value.toward = 0
} else if (form.value.startToEndToward === 0 && form.value.endToStartToward === 1) {
form.value.toward = 1
} else if (form.value.startToEndToward === 1 && form.value.endToStartToward === 0) {
form.value.toward = 2
} else if (form.value.startToEndToward === 1 && form.value.endToStartToward === 1) {
form.value.toward = 3
} else if (form.value.startToEndToward === 0 && form.value.endToStartToward === 2) {
form.value.toward = 4
} else if (form.value.startToEndToward === 2 && form.value.endToStartToward === 0) {
form.value.toward = 5
} else if (form.value.startToEndToward === 2 && form.value.endToStartToward === 1) {
form.value.toward = 6
} else if (form.value.startToEndToward === 1 && form.value.endToStartToward === 2) {
form.value.toward = 7
} else if (form.value.startToEndToward === 2 && form.value.endToStartToward === 2) {
form.value.toward = 8
}
] //
const bidirectional = [
}
//
const towardList = ref([
{
value: 0,
label: '正正'
label: '前进'
},
{
value: 1,
label: '正反'
label: '倒车'
},
{
value: 2,
label: '反正'
},
{
value: 3,
label: '反反'
}
] //
const directionChange = (e) => {
form.value.toward = 0
if (e == 1) {
//
towardList.value = unidirectional
} else {
//
towardList.value = bidirectional
}
label: '不限制方向'
}
])
//x y
const disposeEventPoint = (x, y) => {

View File

@ -495,7 +495,6 @@
:stroke="curve.isSelected ? '#f48924' : '#2d72d9'"
stroke-width="5"
@click="handleChooseRoute(curve, index)"
@dblclick="handleEditRoute(curve, index)"
/>
<text
style="user-select: none"
@ -505,6 +504,7 @@
text-anchor="middle"
fill="black"
v-if="curve.isSelected"
@click="handleChooseRoute(curve, index)"
>
{{ calculateRouteLength(curve, 'line') }}
</text>
@ -518,7 +518,6 @@
stroke-width="5"
fill="none"
@click="handleChooseRoute(curve, index)"
@dblclick="handleEditRoute(curve, index)"
/>
<text
style="user-select: none"
@ -528,6 +527,7 @@
text-anchor="middle"
fill="black"
v-if="curve.isSelected"
@click="handleChooseRoute(curve, index)"
>
{{ calculateRouteLength(curve, 'curve') }}
</text>
@ -2417,17 +2417,7 @@ const getCurvePath = (curve) => {
curve.curvePath = path
return path
}
//线
const handleEditRoute = (item, index) => {
state.mapRouteList.forEach((curve, i) => {
curve.isSelected = i === index
})
state.currentDragTarget.index = index
state.selectedCurve = item
removeEventListener() //
editMapRouteDialogRef.value.open(JSON.parse(JSON.stringify(item)))
}
//
// 线
const handleChooseRoute = (item, index) => {
state.mapRouteList.forEach((curve, i) => {
curve.isSelected = i === index
@ -2436,6 +2426,11 @@ const handleChooseRoute = (item, index) => {
state.currentDragTarget.index = index
//
state.currentItemIndex = -1
if (toolbarSwitchType.value === 'editRoute') {
removeEventListener() //
editMapRouteDialogRef.value.open(JSON.parse(JSON.stringify(item)))
}
}
//线
const editMapRouteDialogSubmit = (form) => {