Commit 71384625 authored by 高晓帆's avatar 高晓帆

货箱回落

parent fe197214
{
"SERVICE_IP": "172.16.0.153:1234",
"MAP_CENTER": [39.74441007068,111.24544532751],
"version": "1.1.3"
}
\ No newline at end of file
{
"SERVICE_IP": "172.16.0.114:1234",
"MAP_CENTER": [39.74441007068,111.24544532751],
"version": "1.1.3"
}
\ No newline at end of file
<template>
<div class="main">
<page-header class="page-header"></page-header>
<div class="page-main">
<side-bar class="side-bar" ref="sideBarDom" @changeTab="changeTab"></side-bar>
<div class="container">
<div class="container-message" v-show="isShowBasic">
<basic-message v-if="basciName === 'basic_message'" @handleClose="handleClose" @showModal="showModal"></basic-message>
<basic-information v-else @handleClose="handleClose"></basic-information>
<information-msg class="information-msg"></information-msg>
</div>
<div v-show="!isShowBasic" class="container-message-icon" @click="handleShowBasic">
<img src="/image/basic-message-icon.png" alt="" />
</div>
<map-container class="map" :reloadData="reloadData" :isShowBasic="isShowBasic" @handleSend="handleSend"></map-container>
</div>
</div>
<Modal v-model="isShow"
:mask-closable="false"
:footer-hide="true"
:title="title"
:closable="isCloseable"
:width="modalWidth"
@on-visible-change="modeChange">
<component :is="currentTag" :is-show="isShow" @handleSend="handleSend" @closeModal="closeModal"></component>
</Modal>
<Modal v-model="isShowTip"
:mask-closable="false"
:mask="false"
:footer-hide="isFooterHide">
<p>{{ vehicleTip }}</p>
<p>{{ remaintime }}</p>
<template #footer>
<Button type="info" class="footer" @click="doClose">确定</Button>
</template>
</Modal>
<Modal v-model="isShowBoxCheck"
title="确认信息"
class="box-check"
:closable="false"
:mask-closable="false"
@on-ok="handleBoxCheck(1)"
@on-cancel="handleBoxCheck(0)">
<span>{{ checkMsg.msg }}</span>
</Modal>
</div>
</template>
<script setup>
import { onBeforeMount, ref, getCurrentInstance, computed, watch, toRefs, reactive, onBeforeUnmount, shallowRef } from 'vue'
import { useVehicleStore } from '../store/VehicleStore';
import { storeToRefs } from 'pinia';
import { Message } from 'view-ui-plus';
import PageHeader from './PageHeader.vue'
import SideBar from './SideBar.vue';
import BasicMessage from './BasicMessage.vue';
import BasicInformation from './BasicInformation.vue';
import InformationMsg from './InformationMsg.vue';
import AlarmModal from './AlarmModal.vue'
import ModeSwitch from './ModeSwitch.vue'
import LogModal from './LogModal.vue'
import SetView from './SetView.vue'
import Logout from './Logout.vue'
import MapContainer from './MapContainer.vue'
let tipTimer = null
const isShowBasic = ref(true)
const currentName = ref('basic_message')
const basciName = ref('basic_message')
const isShow = ref(false)
const isShowTip = ref(false)
const isShowBoxCheck = ref(false)
const title = ref('')
const isCloseable = ref(true)
const currentTag = shallowRef('')
const sideBarDom = ref(null)
const vehicleTip = ref('')
const remaintime = ref('')
const isFooterHide = ref(true)
const reloadData = ref(false)
const boxCheckMsg = reactive({
checkMsg: {}
})
const { checkMsg } = toRefs(boxCheckMsg)
const instance = getCurrentInstance()
const { appContext } = instance
const { $indexRoot } = appContext.config.globalProperties
const vehicleStore = useVehicleStore()
const vehicleStoreToRefs = storeToRefs(vehicleStore)
const { tipInfo, infoPop } = vehicleStoreToRefs
onBeforeMount(() => {
window.addEventListener('beforeunload', () => {
handleSubscribe()
})
// // 发送同步地图版本号信息
// if (!$indexRoot.sock) {
// $indexRoot.init()
// }
})
function handleSubscribe() {
reloadData.value = true
$indexRoot.destroyData()
}
const modalWidth = computed(() => {
if (currentName.value === 'log' || currentName.value === 'set') return '70%'
return '520px'
})
function handleSend(msg) {
if ($indexRoot.sock) {
console.log('发送信息', msg)
$indexRoot.sock.send(JSON.stringify(msg))
} else {
$indexRoot.init().then(socket => {
console.log('发送信息', msg)
socket.send(JSON.stringify(msg))
})
}
}
function doModeSwitch() {
isCloseable.value = false
title.value = '确认信息'
isShow.value = true
currentTag.value = ModeSwitch
}
function handleModal(name) {
title.value = name === 'log' ? '日志获取' : '设置'
currentTag.value = name === 'log' ? LogModal : SetView
isCloseable.value = true
isShow.value = true
}
function handleLogout() {
title.value = ''
currentTag.value = Logout
isCloseable.value = true
isShow.value = true
}
function changeTab(name) {
console.log(name)
currentName.value = name
switch(name) {
case 'mode_switch':
doModeSwitch()
break
case 'mode_information':
case 'basic_message':
basciName.value = name
break
case 'log':
case 'set':
handleModal(name)
break
case 'logout':
handleLogout()
break
}
}
function handleClose() {
isShowBasic.value = false
}
function handleShowBasic() {
isShowBasic.value = true
}
function closeModal() {
isShow.value = false
}
function modeChange(visible) {
if (!visible) {
let sideBar = sideBarDom.value
sideBar.changeMode()
}
}
function showModal() {
isShow.value = true
currentTag.value = AlarmModal
title.value = '车辆故障码'
isCloseable.value = true
}
function doClose() {
isShowTip.value = false
if (tipTimer) {
clearTimeout(tipTimer)
tipTimer = null
}
}
function handleShowBoxCheck(list) {
let data = list[0]
if (!data) return
boxCheckMsg.checkMsg = data
isShowBoxCheck.value = true
}
function handleBoxCheck(accept) {
let {type, value} = boxCheckMsg.checkMsg
handleSend({
type: '/info/popupack',
msg: {
type,
value,
accept
}
})
vehicleStore.splitInfoPop()
}
watch(tipInfo, (msg) => {
if (!msg) return
const {type, value, remaintime: vehicleRemainTime, isFirst} = msg
if (type === 1) {
isShowTip.value = true
vehicleTip.value = value
isFooterHide.value = false
tipTimer = setTimeout(() => {
doClose()
}, 5 * 1000)
} else if (type === 2) {
Message.info({
content: value,
duration: 10,
closable: true
})
} else {
isFooterHide.value = true
if (isFirst === 1) {
isShowTip.value = true
}
vehicleTip.value = value
remaintime.value = vehicleRemainTime
if (vehicleRemainTime < 1) {
isShowTip.value = false
}
}
vehicleStore.setData('tipInfo', null)
}, {
deep: true
})
watch(infoPop, (list) => {
if (list.length) {
handleShowBoxCheck(list)
} else {
isShowBoxCheck.value = false
}
}, {
deep: true
})
onBeforeUnmount(() => {
$indexRoot.destroyData()
window.removeEventListener('beforeunload', handleSubscribe())
})
</script>
<style lang="less" scoped>
.main {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
.page-header {
flex: 0 0 10vh;
min-height: 46px;
// align-items: flex-end;
}
.page-main {
background: url('/image/background.png') no-repeat;
background-size: cover;
flex: auto;
display: flex;
height: calc(100% - 10vh);
.side-bar {
flex: 0 0 7vw;
min-width: 70px;
}
.container {
flex: auto;
display: flex;
position: relative;
.container-message {
flex: 0 0 22vw;
min-width: 240px;
display: flex;
flex-direction: column;
overflow-y: auto;
overflow-x: hidden;
.container-basic {
flex: auto;
height: calc(100% - 150px);
overflow-y: auto;
overflow-x: hidden;
}
}
.container-message-icon {
position: absolute;
z-index: 9999;
top: 5vh;
left: 1vw;
background: #4A75A9;
box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.25);
border-radius: 10px;
opacity: 1;
display: flex;
cursor: pointer;
}
.map {
flex: auto;
display: flex;
flex-direction: column;
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="main">
<page-header class="page-header"></page-header>
<div class="page-main">
<side-bar class="side-bar" ref="sideBarDom" @changeTab="changeTab"></side-bar>
<div class="container">
<div class="container-message" v-show="isShowBasic">
<basic-message v-if="basciName === 'basic_message'" @handleClose="handleClose" @showModal="showModal"></basic-message>
<basic-information v-else @handleClose="handleClose"></basic-information>
<information-msg class="information-msg"></information-msg>
</div>
<div v-show="!isShowBasic" class="container-message-icon" @click="handleShowBasic">
<img src="/image/basic-message-icon.png" alt="" />
</div>
<map-container class="map" :reloadData="reloadData" :isShowBasic="isShowBasic" @handleSend="handleSend"></map-container>
</div>
</div>
<Modal v-model="isShow"
:mask-closable="false"
:footer-hide="true"
:title="title"
:closable="isCloseable"
:width="modalWidth"
@on-visible-change="modeChange">
<component :is="currentTag" :is-show="isShow" @handleSend="handleSend" @closeModal="closeModal"></component>
</Modal>
<Modal v-model="isShowTip"
:mask-closable="false"
:mask="false"
:footer-hide="isFooterHide">
<p>{{ vehicleTip }}</p>
<p>{{ remaintime }}</p>
<template #footer>
<Button type="info" class="footer" @click="doClose">确定</Button>
</template>
</Modal>
<Modal v-model="isShowBoxCheck"
title="确认信息"
class="box-check"
:closable="false"
:mask-closable="false"
@on-ok="handleBoxCheck(1)"
@on-cancel="handleBoxCheck(0)">
<span>{{ checkMsg.msg }}</span>
</Modal>
</div>
</template>
<script setup>
import { onBeforeMount, ref, getCurrentInstance, computed, watch, toRefs, reactive, onBeforeUnmount, shallowRef } from 'vue'
import { useVehicleStore } from '../store/VehicleStore';
import { storeToRefs } from 'pinia';
import { Message } from 'view-ui-plus';
import PageHeader from './PageHeader.vue'
import SideBar from './SideBar.vue';
import BasicMessage from './BasicMessage.vue';
import BasicInformation from './BasicInformation.vue';
import InformationMsg from './InformationMsg.vue';
import AlarmModal from './AlarmModal.vue'
import ModeSwitch from './ModeSwitch.vue'
import LogModal from './LogModal.vue'
import SetView from './SetView.vue'
import Logout from './Logout.vue'
import MapContainer from './MapContainer.vue'
let tipTimer = null
const isShowBasic = ref(true)
const currentName = ref('basic_message')
const basciName = ref('basic_message')
const isShow = ref(false)
const isShowTip = ref(false)
const isShowBoxCheck = ref(false)
const title = ref('')
const isCloseable = ref(true)
const currentTag = shallowRef('')
const sideBarDom = ref(null)
const vehicleTip = ref('')
const remaintime = ref('')
const isFooterHide = ref(true)
const reloadData = ref(false)
const boxCheckMsg = reactive({
checkMsg: {}
})
const { checkMsg } = toRefs(boxCheckMsg)
const instance = getCurrentInstance()
const { appContext } = instance
const { $indexRoot } = appContext.config.globalProperties
const vehicleStore = useVehicleStore()
const vehicleStoreToRefs = storeToRefs(vehicleStore)
const { tipInfo, infoPop } = vehicleStoreToRefs
onBeforeMount(() => {
window.addEventListener('beforeunload', () => {
handleSubscribe()
})
// // 发送同步地图版本号信息
// if (!$indexRoot.sock) {
// $indexRoot.init()
// }
})
function handleSubscribe() {
reloadData.value = true
$indexRoot.destroyData()
}
const modalWidth = computed(() => {
if (currentName.value === 'log' || currentName.value === 'set') return '70%'
return '520px'
})
function handleSend(msg) {
if ($indexRoot.sock) {
console.log('发送信息', msg)
$indexRoot.sock.send(JSON.stringify(msg))
} else {
$indexRoot.init().then(socket => {
console.log('发送信息', msg)
socket.send(JSON.stringify(msg))
})
}
}
function doModeSwitch() {
isCloseable.value = false
title.value = '确认信息'
isShow.value = true
currentTag.value = ModeSwitch
}
function handleModal(name) {
title.value = name === 'log' ? '日志获取' : '设置'
currentTag.value = name === 'log' ? LogModal : SetView
isCloseable.value = true
isShow.value = true
}
function handleLogout() {
title.value = ''
currentTag.value = Logout
isCloseable.value = true
isShow.value = true
}
function changeTab(name) {
console.log(name)
currentName.value = name
switch(name) {
case 'mode_switch':
doModeSwitch()
break
case 'mode_information':
case 'basic_message':
basciName.value = name
break
case 'log':
case 'set':
handleModal(name)
break
case 'logout':
handleLogout()
break
}
}
function handleClose() {
isShowBasic.value = false
}
function handleShowBasic() {
isShowBasic.value = true
}
function closeModal() {
isShow.value = false
}
function modeChange(visible) {
if (!visible) {
let sideBar = sideBarDom.value
sideBar.changeMode()
}
}
function showModal() {
isShow.value = true
currentTag.value = AlarmModal
title.value = '车辆故障码'
isCloseable.value = true
}
function doClose() {
isShowTip.value = false
if (tipTimer) {
clearTimeout(tipTimer)
tipTimer = null
}
}
function handleShowBoxCheck(list) {
let data = list[0]
if (!data) return
boxCheckMsg.checkMsg = data
isShowBoxCheck.value = true
}
function handleBoxCheck(accept) {
let {type, value} = boxCheckMsg.checkMsg
handleSend({
type: '/info/popupack',
msg: {
type,
value,
accept
}
})
vehicleStore.splitInfoPop()
}
watch(tipInfo, (msg) => {
if (!msg) return
const {type, value, remaintime: vehicleRemainTime, isFirst} = msg
if (type === 1) {
isShowTip.value = true
vehicleTip.value = value
isFooterHide.value = false
tipTimer = setTimeout(() => {
doClose()
}, 5 * 1000)
} else if (type === 2) {
Message.info({
content: value,
duration: 10,
closable: true
})
} else {
isFooterHide.value = true
if (isFirst === 1) {
isShowTip.value = true
}
vehicleTip.value = value
remaintime.value = vehicleRemainTime
if (vehicleRemainTime < 1) {
isShowTip.value = false
}
}
vehicleStore.setData('tipInfo', null)
}, {
deep: true
})
watch(infoPop, (list) => {
if (list.length) {
handleShowBoxCheck(list)
} else {
isShowBoxCheck.value = false
}
}, {
deep: true
})
onBeforeUnmount(() => {
$indexRoot.destroyData()
window.removeEventListener('beforeunload', handleSubscribe())
})
</script>
<style lang="less" scoped>
.main {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
.page-header {
flex: 0 0 10vh;
min-height: 46px;
// align-items: flex-end;
}
.page-main {
background: url('/image/background.png') no-repeat;
background-size: cover;
flex: auto;
display: flex;
height: calc(100% - 10vh);
.side-bar {
flex: 0 0 7vw;
min-width: 70px;
}
.container {
flex: auto;
display: flex;
position: relative;
.container-message {
flex: 0 0 22vw;
min-width: 240px;
display: flex;
flex-direction: column;
overflow-y: auto;
overflow-x: hidden;
.container-basic {
flex: auto;
height: calc(100% - 150px);
overflow-y: auto;
overflow-x: hidden;
}
}
.container-message-icon {
position: absolute;
z-index: 9999;
top: 5vh;
left: 1vw;
background: #4A75A9;
box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.25);
border-radius: 10px;
opacity: 1;
display: flex;
cursor: pointer;
}
.map {
flex: auto;
display: flex;
flex-direction: column;
}
}
}
}
</style>
\ No newline at end of file
export const INFORMATION_MESSAGE = [
[
{
name: 'oemstateflag',
label: '模式给定'
},
{
name: 'oemstate',
label: '反馈'
}
],
[
{
name: 'gearcmd',
label: '挡位给定'
},
{
name: 'Current_Gear',
label: '反馈'
}
],
[
{
name: 'target_velocity',
label: '速度给定'
},
{
name: 'VechicleSpd',
label: '反馈'
}
],
[
{
name: 'steerangle',
label: '转向给定'
},
{
name: 'Steering_angle',
label: '反馈'
}
],
[
{
name: 'dump_bed',
label: '举升给定'
},
{
name: 'Dump_Bed_Position',
label: '反馈'
}
],
[
{
name: 'throttlecmd',
label: '油门给定'
},
{
name: 'throttle',
label: '反馈'
}
],
[
{
name: 'Retarder_cmd',
label: '电制动给定'
},
{
name: 'retarder_position',
label: '反馈'
}
],
[
{
name: 'loadBrakeCmd',
label: '装载制动给定'
},
],
[
{
name: 'loadBrakeStatus',
label: '装载制动反馈'
},
],
[
{
name: 'mechBrakeCmd',
label: '机械制动给定'
},
],
[
{
name: 'mechBrakeStatus',
label: '机械制动反馈'
},
],
[
{
name: 'AutoChangeFlag',
label: '转向状态码'
},
],
[
{
name: 'EngSpd',
label: '发动机转速'
},
],
[
{
name: 'vehicleLoad',
label: '载重'
}
],
[
{
name: 'oil',
label: '燃油剩余量'
}
],
// [
// {
// name: 'vehicleHeading',
// label: '朝向'
// },
// ],
// [
// {
// name: 'vehicleLongtitude',
// label: '经度'
// },
// ],
// [
// {
// name: 'vehicleLatitude',
// label: '纬度'
// },
// ],
[
{
name: 'lateralDeviation',
label: '横向偏差'
},
],
[
{
name: 'courseDeviation',
label: '航向偏差'
},
],
[
{
name: 'previewDeviation',
label: '预瞄偏差'
},
],
[
{
name: 'current_point',
label: '当前点'
},
{
name: 'all_amount',
label: '总点数'
}
],
[
{
name: 'obstacleFrontDistance',
label: '前向障碍物距离'
},
],
[
{
name: 'obstacleFrontFlag',
label: '前向障碍物标志'
},
],
[
{
name: 'obstacleBackDistance',
label: '后向障碍物距离'
},
],
[
{
name: 'obstacleBackBarriDistance',
label: '后向挡墙距离'
},
],
[
{
name: 'followStatus',
label: '跟会车状态'
},
],
]
// 跟会车字段,根据followVisible判断
export const FOLLOW_DETAILS = [
{
name: 'followVehicleId',
label: '跟会车车辆编号'
},
{
name: 'followDistance',
label: '跟会车距离'
},
{
name: 'followSpeed',
label: '跟会车速度'
},
]
\ No newline at end of file
export const INFORMATION_MESSAGE = [
[
{
name: 'oemstateflag',
label: '模式给定'
},
{
name: 'oemstate',
label: '反馈'
}
],
[
{
name: 'gearcmd',
label: '挡位给定'
},
{
name: 'Current_Gear',
label: '反馈'
}
],
[
{
name: 'target_velocity',
label: '速度给定'
},
{
name: 'VechicleSpd',
label: '反馈'
}
],
[
{
name: 'steerangle',
label: '转向给定'
},
{
name: 'Steering_angle',
label: '反馈'
}
],
[
{
name: 'dump_bed',
label: '举升给定'
},
{
name: 'Dump_Bed_Position',
label: '反馈'
}
],
[
{
name: 'throttlecmd',
label: '油门给定'
},
{
name: 'throttle',
label: '反馈'
}
],
[
{
name: 'Retarder_cmd',
label: '电制动给定'
},
{
name: 'retarder_position',
label: '反馈'
}
],
// [
// {
// name: 'loadBrakeCmd',
// label: '装载制动给定'
// },
// ],
// [
// {
// name: 'loadBrakeStatus',
// label: '装载制动反馈'
// },
// ],
// [
// {
// name: 'mechBrakeCmd',
// label: '机械制动给定'
// },
// ],
// [
// {
// name: 'mechBrakeStatus',
// label: '机械制动反馈'
// },
// ],
[
{
name: 'AutoChangeFlag',
label: '转向状态码'
},
],
[
{
name: 'EngSpd',
label: '发动机转速'
},
],
[
{
name: 'vehicleLoad',
label: '载重'
}
],
[
{
name: 'oil',
label: '燃油剩余量'
}
],
// [
// {
// name: 'vehicleHeading',
// label: '朝向'
// },
// ],
// [
// {
// name: 'vehicleLongtitude',
// label: '经度'
// },
// ],
// [
// {
// name: 'vehicleLatitude',
// label: '纬度'
// },
// ],
[
{
name: 'lateralDeviation',
label: '横向偏差'
},
],
[
{
name: 'courseDeviation',
label: '航向偏差'
},
],
[
{
name: 'previewDeviation',
label: '预瞄偏差'
},
],
[
{
name: 'current_point',
label: '当前点'
},
{
name: 'all_amount',
label: '总点数'
}
],
[
{
name: 'obstacleFrontDistance',
label: '前向障碍物距离'
},
],
[
{
name: 'obstacleFrontFlag',
label: '前向障碍物标志'
},
],
[
{
name: 'obstacleBackDistance',
label: '后向障碍物距离'
},
],
[
{
name: 'obstacleBackBarriDistance',
label: '后向挡墙距离'
},
],
[
{
name: 'followStatus',
label: '跟会车状态'
},
],
]
// 跟会车字段,根据followVisible判断
export const FOLLOW_DETAILS = [
{
name: 'followVehicleId',
label: '跟会车车辆编号'
},
{
name: 'followDistance',
label: '跟会车距离'
},
{
name: 'followSpeed',
label: '跟会车速度'
},
]
\ No newline at end of file
export const INFORMATION_MESSAGE = [
[
{
name: 'oemstateflag',
label: '模式给定'
},
{
name: 'oemstate',
label: '反馈'
}
],
[
{
name: 'gearcmd',
label: '挡位给定'
},
{
name: 'Current_Gear',
label: '反馈'
}
],
[
{
name: 'target_velocity',
label: '速度给定'
},
{
name: 'VechicleSpd',
label: '反馈'
}
],
[
{
name: 'steerangle',
label: '转向给定'
},
{
name: 'Steering_angle',
label: '反馈'
}
],
[
{
name: 'dump_bed',
label: '举升给定'
},
{
name: 'Dump_Bed_Position',
label: '反馈'
}
],
[
{
name: 'throttlecmd',
label: '油门给定'
},
{
name: 'throttle',
label: '反馈'
}
],
[
{
name: 'Retarder_cmd',
label: '电制动给定'
},
{
name: 'retarder_position',
label: '反馈'
}
],
[
{
name: 'loadBrakeCmd',
label: '装载制动给定'
},
],
[
{
name: 'loadBrakeStatus',
label: '装载制动反馈'
},
],
[
{
name: 'mechBrakeCmd',
label: '机械制动给定'
},
],
[
{
name: 'mechBrakeStatus',
label: '机械制动反馈'
},
],
[
{
name: 'AutoChangeFlag',
label: '转向状态码'
},
],
[
{
name: 'EngSpd',
label: '发动机转速'
},
],
[
{
name: 'vehicleLoad',
label: '载重'
}
],
[
{
name: 'oil',
label: '燃油剩余量'
}
],
// [
// {
// name: 'vehicleHeading',
// label: '朝向'
// },
// ],
// [
// {
// name: 'vehicleLongtitude',
// label: '经度'
// },
// ],
// [
// {
// name: 'vehicleLatitude',
// label: '纬度'
// },
// ],
[
{
name: 'lateralDeviation',
label: '横向偏差'
},
],
[
{
name: 'courseDeviation',
label: '航向偏差'
},
],
[
{
name: 'previewDeviation',
label: '预瞄偏差'
},
],
[
{
name: 'current_point',
label: '当前点'
},
{
name: 'all_amount',
label: '总点数'
}
],
[
{
name: 'obstacleFrontDistance',
label: '前向障碍物距离'
},
],
[
{
name: 'obstacleFrontFlag',
label: '前向障碍物标志'
},
],
[
{
name: 'obstacleBackDistance',
label: '后向障碍物距离'
},
],
[
{
name: 'obstacleBackBarriDistance',
label: '后向挡墙距离'
},
],
[
{
name: 'followStatus',
label: '跟会车状态'
},
],
]
// 跟会车字段,根据followVisible判断
export const FOLLOW_DETAILS = [
{
name: 'followVehicleId',
label: '跟会车车辆编号'
},
{
name: 'followDistance',
label: '跟会车距离'
},
{
name: 'followSpeed',
label: '跟会车速度'
},
]
\ No newline at end of file
export const INFORMATION_MESSAGE = [
[
{
name: 'oemstateflag',
label: '模式给定'
},
{
name: 'oemstate',
label: '反馈'
}
],
[
{
name: 'gearcmd',
label: '挡位给定'
},
{
name: 'Current_Gear',
label: '反馈'
}
],
[
{
name: 'target_velocity',
label: '速度给定'
},
{
name: 'VechicleSpd',
label: '反馈'
}
],
[
{
name: 'steerangle',
label: '转向给定'
},
{
name: 'Steering_angle',
label: '反馈'
}
],
[
{
name: 'dump_bed',
label: '举升给定'
},
{
name: 'Dump_Bed_Position',
label: '反馈'
}
],
[
{
name: 'throttlecmd',
label: '油门给定'
},
{
name: 'throttle',
label: '反馈'
}
],
[
{
name: 'Retarder_cmd',
label: '电制动给定'
},
{
name: 'retarder_position',
label: '反馈'
}
],
[
{
name: 'loadBrakeCmd',
label: '装载制动给定'
},
],
[
{
name: 'loadBrakeStatus',
label: '装载制动反馈'
},
],
[
{
name: 'mechBrakeCmd',
label: '机械制动给定'
},
],
[
{
name: 'mechBrakeStatus',
label: '机械制动反馈'
},
],
[
{
name: 'AutoChangeFlag',
label: '转向状态码'
},
],
[
{
name: 'EngSpd',
label: '发动机转速'
},
],
[
{
name: 'vehicleLoad',
label: '载重'
}
],
[
{
name: 'oil',
label: '燃油剩余量'
}
],
// [
// {
// name: 'vehicleHeading',
// label: '朝向'
// },
// ],
// [
// {
// name: 'vehicleLongtitude',
// label: '经度'
// },
// ],
// [
// {
// name: 'vehicleLatitude',
// label: '纬度'
// },
// ],
[
{
name: 'lateralDeviation',
label: '横向偏差'
},
],
[
{
name: 'courseDeviation',
label: '航向偏差'
},
],
// [
// {
// name: 'previewDeviation',
// label: '预瞄偏差'
// },
// ],
[
{
name: 'current_point',
label: '当前点'
},
{
name: 'all_amount',
label: '总点数'
}
],
[
{
name: 'obstacleFrontDistance',
label: '前向障碍物距离'
},
],
[
{
name: 'obstacleFrontFlag',
label: '前向障碍物标志'
},
],
[
{
name: 'obstacleBackDistance',
label: '后向障碍物距离'
},
],
[
{
name: 'obstacleBackBarriDistance',
label: '后向挡墙距离'
},
],
[
{
name: 'followStatus',
label: '跟会车状态'
},
],
]
// 跟会车字段,根据followVisible判断
export const FOLLOW_DETAILS = [
{
name: 'followVehicleId',
label: '跟会车车辆编号'
},
{
name: 'followDistance',
label: '跟会车距离'
},
{
name: 'followSpeed',
label: '跟会车速度'
},
]
\ No newline at end of file
export const INFORMATION_MESSAGE = [
[
{
name: 'oemstateflag',
label: '模式给定'
},
{
name: 'oemstate',
label: '反馈'
}
],
[
{
name: 'gearcmd',
label: '挡位给定'
},
{
name: 'Current_Gear',
label: '反馈'
}
],
[
{
name: 'target_velocity',
label: '速度给定'
},
{
name: 'VechicleSpd',
label: '反馈'
}
],
[
{
name: 'steerangle',
label: '转向给定'
},
{
name: 'Steering_angle',
label: '反馈'
}
],
[
{
name: 'dump_bed',
label: '举升给定'
},
{
name: 'Dump_Bed_Position',
label: '反馈'
}
],
[
{
name: 'throttlecmd',
label: '油门给定'
},
{
name: 'throttle',
label: '反馈'
}
],
[
{
name: 'Retarder_cmd',
label: '电制动给定'
},
{
name: 'retarder_position',
label: '反馈'
}
],
[
{
name: 'loadBrakeCmd',
label: '装载制动给定'
},
{
name: 'loadBrakeStatus',
label: '反馈'
},
],
[
{
name: 'mechBrakeCmd',
label: '机械制动给定'
},
{
name: 'mechBrakeStatus',
label: '反馈'
},
],
[
{
name: 'AutoChangeFlag',
label: '转向状态码'
},
],
[
{
name: 'EngSpd',
label: '发动机转速'
},
],
[
{
name: 'vehicleLoad',
label: '载重'
}
],
[
{
name: 'oil',
label: '燃油剩余量'
}
],
// [
// {
// name: 'vehicleHeading',
// label: '朝向'
// },
// ],
// [
// {
// name: 'vehicleLongtitude',
// label: '经度'
// },
// ],
// [
// {
// name: 'vehicleLatitude',
// label: '纬度'
// },
// ],
[
{
name: 'lateralDeviation',
label: '横向偏差'
},
],
[
{
name: 'courseDeviation',
label: '航向偏差'
},
],
// [
// {
// name: 'previewDeviation',
// label: '预瞄偏差'
// },
// ],
[
{
name: 'current_point',
label: '当前点'
},
{
name: 'all_amount',
label: '总点数'
}
],
[
{
name: 'obstacleFrontDistance',
label: '前向障碍物距离'
},
],
[
{
name: 'obstacleFrontFlag',
label: '前向障碍物标志'
},
],
[
{
name: 'obstacleBackDistance',
label: '后向障碍物距离'
},
],
[
{
name: 'obstacleBackBarriDistance',
label: '后向挡墙距离'
},
],
[
{
name: 'followStatus',
label: '跟会车状态'
},
],
]
// 跟会车字段,根据followVisible判断
export const FOLLOW_DETAILS = [
{
name: 'followVehicleId',
label: '跟会车车辆编号'
},
{
name: 'followDistance',
label: '跟会车距离'
},
{
name: 'followSpeed',
label: '跟会车速度'
},
]
\ No newline at end of file
<template>
<div class="run-control">
<div class="content">
<div v-for="item in topList" :key="item.index" class="c-box">
<Button type="primary" @click="handleSave(item.key, item.value)">{{item.btn}}</Button>
<p>
<span class="desc">{{item.des}}</span>
<InputNumber v-model="form[item.value]" controls-outside></InputNumber>
</p>
</div>
</div>
<div class="run-middle">
<div class="content" v-for="item in middleList" :key="item.index">
<p class="c-box" v-for="list in item" :key="list.key">
<span>{{list.label}}</span>
<i-switch size="large" v-model="form[list.key]" @on-change="handleChange($event, list.type)">
<template #open>
<span>开启</span>
</template>
<template #close>
<span>关闭</span>
</template>
</i-switch>
</p>
</div>
</div>
<div class="content">
<p class="c-box b-box">
<Button type="primary" @click="boxDown(10)">货箱回落</Button>
<span>仅在0/1级故障下且货箱功能正常时点击</span>
</p>
<p class="c-box b-box">
<Button type="primary" @click="handleSave(6)">解锁</Button>
<span>解锁上次异常退出导致的路权锁定</span>
</p>
<p class="c-box b-box">
<Button type="primary" @click="handleSave(7)">加载参数</Button>
<span>触发控制模块重新加载参数</span>
</p>
</div>
<Modal v-model="isShow"
:closable="false"
:mask-closable="true"
@on-ok="handleSave(10)"
@on-cancel="boxCancel()">
<p style="text-align: center;">是否执行货箱回落指令</p>
</Modal>
</div>
</template>
<script setup>
import { ref,reactive, toRefs, watch, markRaw } from 'vue';
import { useVehicleStore } from '../../store/VehicleStore';
import { storeToRefs } from 'pinia';
const RUN_CONTROL_TOP = [
{
btn: '打火',
key: '1',
des: '打火持续时间',
value: 'engineStartTime'
},
{
btn: '熄火',
key: '2',
des: '熄火持续时间',
value: 'engineStallTime'
},
{
btn: '上电',
key: '3',
des: '上电持续时间',
value: 'powerOnTime'
},
]
const RUN_CONTROL_MIDDLE = [
[
{
label: '举升',
key: 'liftSwitch',
type: 4
},
{
label: '防滑',
key: 'antiSlideSlip',
type: '5'
}
],
[
// {
// label: '感知屏蔽',
// key: 'perceptionShielding',
// type: 8
// },
{
label: '绕障',
key: 'obstaclesBypassingEnable',
type: 9
}
]
]
const topList = markRaw(RUN_CONTROL_TOP)
const middleList = markRaw(RUN_CONTROL_MIDDLE)
const data = reactive({
form: {}
})
const { form } = toRefs(data)
const vehicleStore = useVehicleStore()
const vehicleStoreToRefs = storeToRefs(vehicleStore)
const { controlInfo } = vehicleStoreToRefs
const isShow=ref(false);
const emits = defineEmits(['sendMsg'])
function handleSend(msg) {
emits('sendMsg', {
type: '/setting/controlSetting',
msg: JSON.parse(JSON.stringify(msg))
})
}
function handleChange(value, key) {
let data = value ? 1 : 2
handleSend({
value: data,
type: Number(key)
})
}
function handleSave(type, key) {
let value = 1
if (key) {
value = form.value[key] || 1
}
let data = {
type: Number(type),
value
}
handleSend(data)
}
function boxDown(){
isShow.value=true;
}
function boxCancel(){
isShow.value=false;
}
watch(controlInfo, (value) => {
data.form = {...value}
}, {
immediate: true,
deep: true
})
</script>
<style lang="less" scoped>
.run-control {
overflow: auto;
.content {
padding: 10px 20px;
background: #111521;
border-radius: 8px;
.c-box {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 0;
border-bottom: 2px solid rgba(63,69,86,0.6);
&:nth-last-child(1) {
border: 0;
}
.desc {
margin-right: 5px;
}
/deep/.ivu-btn-primary {
width: 88px;
}
}
.b-box {
justify-content: flex-start;
span {
margin-left: 10px;
}
}
}
.run-middle {
display: flex;
margin: 10px 0;
.content {
width: 50%;
&:nth-child(1) {
margin-right: 10px;
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="run-control">
<div class="content">
<div v-for="item in topList" :key="item.index" class="c-box">
<Button type="primary" @click="handleSave(item.key, item.value)">{{item.btn}}</Button>
<p>
<span class="desc">{{item.des}}</span>
<InputNumber v-model="form[item.value]" controls-outside></InputNumber>
</p>
</div>
</div>
<div class="run-middle">
<div class="content" v-for="item in middleList" :key="item.index">
<p class="c-box" v-for="list in item" :key="list.key">
<span>{{list.label}}</span>
<i-switch size="large" v-model="form[list.key]" @on-change="handleChange($event, list.type)">
<template #open>
<span>开启</span>
</template>
<template #close>
<span>关闭</span>
</template>
</i-switch>
</p>
</div>
</div>
<div class="content">
<p class="c-box b-box">
<Button type="primary" @click="boxDown(10)">货箱回落</Button>
<span>仅在0/1级故障下且货箱功能正常时点击</span>
</p>
<p class="c-box b-box">
<Button type="primary" @click="handleSave(6)">解锁</Button>
<span>解锁上次异常退出导致的路权锁定</span>
</p>
<p class="c-box b-box">
<Button type="primary" @click="handleSave(7)">加载参数</Button>
<span>触发控制模块重新加载参数</span>
</p>
</div>
<Modal v-model="isShow"
:mask-closable="true"
@on-ok="handleSave(10)"
@on-cancel="boxCancel()">
<p style="text-align: center;">是否执行货箱回落指令</p>
</Modal>
</div>
</template>
<script setup>
import { ref,reactive, toRefs, watch, markRaw } from 'vue';
import { useVehicleStore } from '../../store/VehicleStore';
import { storeToRefs } from 'pinia';
const RUN_CONTROL_TOP = [
{
btn: '打火',
key: '1',
des: '打火持续时间',
value: 'engineStartTime'
},
{
btn: '熄火',
key: '2',
des: '熄火持续时间',
value: 'engineStallTime'
},
{
btn: '上电',
key: '3',
des: '上电持续时间',
value: 'powerOnTime'
},
]
const RUN_CONTROL_MIDDLE = [
[
{
label: '举升',
key: 'liftSwitch',
type: 4
},
{
label: '防滑',
key: 'antiSlideSlip',
type: '5'
}
],
[
// {
// label: '感知屏蔽',
// key: 'perceptionShielding',
// type: 8
// },
{
label: '绕障',
key: 'obstaclesBypassingEnable',
type: 9
}
]
]
const topList = markRaw(RUN_CONTROL_TOP)
const middleList = markRaw(RUN_CONTROL_MIDDLE)
const data = reactive({
form: {}
})
const { form } = toRefs(data)
const vehicleStore = useVehicleStore()
const vehicleStoreToRefs = storeToRefs(vehicleStore)
const { controlInfo } = vehicleStoreToRefs
const isShow=ref(false);
const emits = defineEmits(['sendMsg'])
function handleSend(msg) {
emits('sendMsg', {
type: '/setting/controlSetting',
msg: JSON.parse(JSON.stringify(msg))
})
}
function handleChange(value, key) {
let data = value ? 1 : 2
handleSend({
value: data,
type: Number(key)
})
}
function handleSave(type, key) {
let value = 1
if (key) {
value = form.value[key] || 1
}
let data = {
type: Number(type),
value
}
handleSend(data)
}
function boxDown(){
isShow.value=true;
}
function boxCancel(){
isShow.value=false;
}
watch(controlInfo, (value) => {
data.form = {...value}
}, {
immediate: true,
deep: true
})
</script>
<style lang="less" scoped>
.run-control {
overflow: auto;
.content {
padding: 10px 20px;
background: #111521;
border-radius: 8px;
.c-box {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 0;
border-bottom: 2px solid rgba(63,69,86,0.6);
&:nth-last-child(1) {
border: 0;
}
.desc {
margin-right: 5px;
}
/deep/.ivu-btn-primary {
width: 88px;
}
}
.b-box {
justify-content: flex-start;
span {
margin-left: 10px;
}
}
}
.run-middle {
display: flex;
margin: 10px 0;
.content {
width: 50%;
&:nth-child(1) {
margin-right: 10px;
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="run-control">
<div class="content">
<div v-for="item in topList" :key="item.index" class="c-box">
<Button type="primary" @click="handleSave(item.key, item.value)">{{item.btn}}</Button>
<p>
<span class="desc">{{item.des}}</span>
<InputNumber v-model="form[item.value]" controls-outside></InputNumber>
</p>
</div>
</div>
<div class="run-middle">
<div class="content" v-for="item in middleList" :key="item.index">
<p class="c-box" v-for="list in item" :key="list.key">
<span>{{list.label}}</span>
<i-switch size="large" v-model="form[list.key]" @on-change="handleChange($event, list.type)">
<template #open>
<span>开启</span>
</template>
<template #close>
<span>关闭</span>
</template>
</i-switch>
</p>
</div>
</div>
<div class="content">
<p class="c-box b-box">
<Button type="primary" @click="boxDown(10)">货箱回落</Button>
<span>仅在0/1级故障下且货箱功能正常时点击</span>
</p>
<p class="c-box b-box">
<Button type="primary" @click="handleSave(6)">解锁</Button>
<span>解锁上次异常退出导致的路权锁定</span>
</p>
<p class="c-box b-box">
<Button type="primary" @click="handleSave(7)">加载参数</Button>
<span>触发控制模块重新加载参数</span>
</p>
</div>
<Modal v-model="isShow"
title=""
:closable="false"
:mask-closable="true"
@on-ok="handleSave(10)"
@on-cancel="boxCancel()">
<p style="text-align: center;">是否执行货箱回落指令</p>
</Modal>
</div>
</template>
<script setup>
import { ref,reactive, toRefs, watch, markRaw } from 'vue';
import { useVehicleStore } from '../../store/VehicleStore';
import { storeToRefs } from 'pinia';
const RUN_CONTROL_TOP = [
{
btn: '打火',
key: '1',
des: '打火持续时间',
value: 'engineStartTime'
},
{
btn: '熄火',
key: '2',
des: '熄火持续时间',
value: 'engineStallTime'
},
{
btn: '上电',
key: '3',
des: '上电持续时间',
value: 'powerOnTime'
},
]
const RUN_CONTROL_MIDDLE = [
[
{
label: '举升',
key: 'liftSwitch',
type: 4
},
{
label: '防滑',
key: 'antiSlideSlip',
type: '5'
}
],
[
// {
// label: '感知屏蔽',
// key: 'perceptionShielding',
// type: 8
// },
{
label: '绕障',
key: 'obstaclesBypassingEnable',
type: 9
}
]
]
const topList = markRaw(RUN_CONTROL_TOP)
const middleList = markRaw(RUN_CONTROL_MIDDLE)
const data = reactive({
form: {}
})
const { form } = toRefs(data)
const vehicleStore = useVehicleStore()
const vehicleStoreToRefs = storeToRefs(vehicleStore)
const { controlInfo } = vehicleStoreToRefs
const isShow=ref(false);
const emits = defineEmits(['sendMsg'])
function handleSend(msg) {
emits('sendMsg', {
type: '/setting/controlSetting',
msg: JSON.parse(JSON.stringify(msg))
})
}
function handleChange(value, key) {
let data = value ? 1 : 2
handleSend({
value: data,
type: Number(key)
})
}
function handleSave(type, key) {
let value = 1
if (key) {
value = form.value[key] || 1
}
let data = {
type: Number(type),
value
}
handleSend(data)
}
function boxDown(){
isShow.value=true;
}
function boxCancel(){
isShow.value=false;
}
watch(controlInfo, (value) => {
data.form = {...value}
}, {
immediate: true,
deep: true
})
</script>
<style lang="less" scoped>
.run-control {
overflow: auto;
.content {
padding: 10px 20px;
background: #111521;
border-radius: 8px;
.c-box {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 0;
border-bottom: 2px solid rgba(63,69,86,0.6);
&:nth-last-child(1) {
border: 0;
}
.desc {
margin-right: 5px;
}
/deep/.ivu-btn-primary {
width: 88px;
}
}
.b-box {
justify-content: flex-start;
span {
margin-left: 10px;
}
}
}
.run-middle {
display: flex;
margin: 10px 0;
.content {
width: 50%;
&:nth-child(1) {
margin-right: 10px;
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="run-control">
<div class="content">
<div v-for="item in topList" :key="item.index" class="c-box">
<Button type="primary" @click="handleSave(item.key, item.value)">{{item.btn}}</Button>
<p>
<span class="desc">{{item.des}}</span>
<InputNumber v-model="form[item.value]" controls-outside></InputNumber>
</p>
</div>
</div>
<div class="run-middle">
<div class="content" v-for="item in middleList" :key="item.index">
<p class="c-box" v-for="list in item" :key="list.key">
<span>{{list.label}}</span>
<i-switch size="large" v-model="form[list.key]" @on-change="handleChange($event, list.type)">
<template #open>
<span>开启</span>
</template>
<template #close>
<span>关闭</span>
</template>
</i-switch>
</p>
</div>
</div>
<div class="content">
<p class="c-box b-box">
<Button type="primary" @click="boxDown(10)">货箱回落</Button>
<span>仅在0/1级故障下且货箱功能正常时点击</span>
</p>
<p class="c-box b-box">
<Button type="primary" @click="handleSave(6)">解锁</Button>
<span>解锁上次异常退出导致的路权锁定</span>
</p>
<p class="c-box b-box">
<Button type="primary" @click="handleSave(7)">加载参数</Button>
<span>触发控制模块重新加载参数</span>
</p>
</div>
<Modal v-model="isShow"
title=1"
:closable="false"
:mask-closable="true"
@on-ok="handleSave(10)"
@on-cancel="boxCancel()">
<p style="text-align: center;">是否执行货箱回落指令</p>
</Modal>
</div>
</template>
<script setup>
import { ref,reactive, toRefs, watch, markRaw } from 'vue';
import { useVehicleStore } from '../../store/VehicleStore';
import { storeToRefs } from 'pinia';
const RUN_CONTROL_TOP = [
{
btn: '打火',
key: '1',
des: '打火持续时间',
value: 'engineStartTime'
},
{
btn: '熄火',
key: '2',
des: '熄火持续时间',
value: 'engineStallTime'
},
{
btn: '上电',
key: '3',
des: '上电持续时间',
value: 'powerOnTime'
},
]
const RUN_CONTROL_MIDDLE = [
[
{
label: '举升',
key: 'liftSwitch',
type: 4
},
{
label: '防滑',
key: 'antiSlideSlip',
type: '5'
}
],
[
// {
// label: '感知屏蔽',
// key: 'perceptionShielding',
// type: 8
// },
{
label: '绕障',
key: 'obstaclesBypassingEnable',
type: 9
}
]
]
const topList = markRaw(RUN_CONTROL_TOP)
const middleList = markRaw(RUN_CONTROL_MIDDLE)
const data = reactive({
form: {}
})
const { form } = toRefs(data)
const vehicleStore = useVehicleStore()
const vehicleStoreToRefs = storeToRefs(vehicleStore)
const { controlInfo } = vehicleStoreToRefs
const isShow=ref(false);
const emits = defineEmits(['sendMsg'])
function handleSend(msg) {
emits('sendMsg', {
type: '/setting/controlSetting',
msg: JSON.parse(JSON.stringify(msg))
})
}
function handleChange(value, key) {
let data = value ? 1 : 2
handleSend({
value: data,
type: Number(key)
})
}
function handleSave(type, key) {
let value = 1
if (key) {
value = form.value[key] || 1
}
let data = {
type: Number(type),
value
}
handleSend(data)
}
function boxDown(){
isShow.value=true;
}
function boxCancel(){
isShow.value=false;
}
watch(controlInfo, (value) => {
data.form = {...value}
}, {
immediate: true,
deep: true
})
</script>
<style lang="less" scoped>
.run-control {
overflow: auto;
.content {
padding: 10px 20px;
background: #111521;
border-radius: 8px;
.c-box {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 0;
border-bottom: 2px solid rgba(63,69,86,0.6);
&:nth-last-child(1) {
border: 0;
}
.desc {
margin-right: 5px;
}
/deep/.ivu-btn-primary {
width: 88px;
}
}
.b-box {
justify-content: flex-start;
span {
margin-left: 10px;
}
}
}
.run-middle {
display: flex;
margin: 10px 0;
.content {
width: 50%;
&:nth-child(1) {
margin-right: 10px;
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="run-control">
<div class="content">
<div v-for="item in topList" :key="item.index" class="c-box">
<Button type="primary" @click="handleSave(item.key, item.value)">{{item.btn}}</Button>
<p>
<span class="desc">{{item.des}}</span>
<InputNumber v-model="form[item.value]" controls-outside></InputNumber>
</p>
</div>
</div>
<div class="run-middle">
<div class="content" v-for="item in middleList" :key="item.index">
<p class="c-box" v-for="list in item" :key="list.key">
<span>{{list.label}}</span>
<i-switch size="large" v-model="form[list.key]" @on-change="handleChange($event, list.type)">
<template #open>
<span>开启</span>
</template>
<template #close>
<span>关闭</span>
</template>
</i-switch>
</p>
</div>
</div>
<div class="content">
<p class="c-box b-box">
<Button type="primary" @click="boxDown(10)">货箱回落</Button>
<span>仅在0/1级故障下且货箱功能正常时点击</span>
</p>
<p class="c-box b-box">
<Button type="primary" @click="handleSave(6)">解锁</Button>
<span>解锁上次异常退出导致的路权锁定</span>
</p>
<p class="c-box b-box">
<Button type="primary" @click="handleSave(7)">加载参数</Button>
<span>触发控制模块重新加载参数</span>
</p>
</div>
<Modal v-model="isShow"
title="22"
:closable="false"
:mask-closable="true"
@on-ok="handleSave(10)"
@on-cancel="boxCancel()">
<p style="text-align: center;">是否执行货箱回落指令</p>
</Modal>
</div>
</template>
<script setup>
import { ref,reactive, toRefs, watch, markRaw } from 'vue';
import { useVehicleStore } from '../../store/VehicleStore';
import { storeToRefs } from 'pinia';
const RUN_CONTROL_TOP = [
{
btn: '打火',
key: '1',
des: '打火持续时间',
value: 'engineStartTime'
},
{
btn: '熄火',
key: '2',
des: '熄火持续时间',
value: 'engineStallTime'
},
{
btn: '上电',
key: '3',
des: '上电持续时间',
value: 'powerOnTime'
},
]
const RUN_CONTROL_MIDDLE = [
[
{
label: '举升',
key: 'liftSwitch',
type: 4
},
{
label: '防滑',
key: 'antiSlideSlip',
type: '5'
}
],
[
// {
// label: '感知屏蔽',
// key: 'perceptionShielding',
// type: 8
// },
{
label: '绕障',
key: 'obstaclesBypassingEnable',
type: 9
}
]
]
const topList = markRaw(RUN_CONTROL_TOP)
const middleList = markRaw(RUN_CONTROL_MIDDLE)
const data = reactive({
form: {}
})
const { form } = toRefs(data)
const vehicleStore = useVehicleStore()
const vehicleStoreToRefs = storeToRefs(vehicleStore)
const { controlInfo } = vehicleStoreToRefs
const isShow=ref(false);
const emits = defineEmits(['sendMsg'])
function handleSend(msg) {
emits('sendMsg', {
type: '/setting/controlSetting',
msg: JSON.parse(JSON.stringify(msg))
})
}
function handleChange(value, key) {
let data = value ? 1 : 2
handleSend({
value: data,
type: Number(key)
})
}
function handleSave(type, key) {
let value = 1
if (key) {
value = form.value[key] || 1
}
let data = {
type: Number(type),
value
}
handleSend(data)
}
function boxDown(){
isShow.value=true;
}
function boxCancel(){
isShow.value=false;
}
watch(controlInfo, (value) => {
data.form = {...value}
}, {
immediate: true,
deep: true
})
</script>
<style lang="less" scoped>
.run-control {
overflow: auto;
.content {
padding: 10px 20px;
background: #111521;
border-radius: 8px;
.c-box {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 0;
border-bottom: 2px solid rgba(63,69,86,0.6);
&:nth-last-child(1) {
border: 0;
}
.desc {
margin-right: 5px;
}
/deep/.ivu-btn-primary {
width: 88px;
}
}
.b-box {
justify-content: flex-start;
span {
margin-left: 10px;
}
}
}
.run-middle {
display: flex;
margin: 10px 0;
.content {
width: 50%;
&:nth-child(1) {
margin-right: 10px;
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="run-control">
<div class="content">
<div v-for="item in topList" :key="item.index" class="c-box">
<Button type="primary" @click="handleSave(item.key, item.value)">{{item.btn}}</Button>
<p>
<span class="desc">{{item.des}}</span>
<InputNumber v-model="form[item.value]" controls-outside></InputNumber>
</p>
</div>
</div>
<div class="run-middle">
<div class="content" v-for="item in middleList" :key="item.index">
<p class="c-box" v-for="list in item" :key="list.key">
<span>{{list.label}}</span>
<i-switch size="large" v-model="form[list.key]" @on-change="handleChange($event, list.type)">
<template #open>
<span>开启</span>
</template>
<template #close>
<span>关闭</span>
</template>
</i-switch>
</p>
</div>
</div>
<div class="content">
<p class="c-box b-box">
<Button type="primary" @click="boxDown(10)">货箱回落</Button>
<span>仅在0/1级故障下且货箱功能正常时点击</span>
</p>
<p class="c-box b-box">
<Button type="primary" @click="handleSave(6)">解锁</Button>
<span>解锁上次异常退出导致的路权锁定</span>
</p>
<p class="c-box b-box">
<Button type="primary" @click="handleSave(7)">加载参数</Button>
<span>触发控制模块重新加载参数</span>
</p>
</div>
<Modal v-model="isShow"
title="提示"
:closable="false"
:mask-closable="true"
@on-ok="handleSave(10)"
@on-cancel="boxCancel()">
<p style="text-align: center;">是否执行货箱回落指令</p>
</Modal>
</div>
</template>
<script setup>
import { ref,reactive, toRefs, watch, markRaw } from 'vue';
import { useVehicleStore } from '../../store/VehicleStore';
import { storeToRefs } from 'pinia';
const RUN_CONTROL_TOP = [
{
btn: '打火',
key: '1',
des: '打火持续时间',
value: 'engineStartTime'
},
{
btn: '熄火',
key: '2',
des: '熄火持续时间',
value: 'engineStallTime'
},
{
btn: '上电',
key: '3',
des: '上电持续时间',
value: 'powerOnTime'
},
]
const RUN_CONTROL_MIDDLE = [
[
{
label: '举升',
key: 'liftSwitch',
type: 4
},
{
label: '防滑',
key: 'antiSlideSlip',
type: '5'
}
],
[
// {
// label: '感知屏蔽',
// key: 'perceptionShielding',
// type: 8
// },
{
label: '绕障',
key: 'obstaclesBypassingEnable',
type: 9
}
]
]
const topList = markRaw(RUN_CONTROL_TOP)
const middleList = markRaw(RUN_CONTROL_MIDDLE)
const data = reactive({
form: {}
})
const { form } = toRefs(data)
const vehicleStore = useVehicleStore()
const vehicleStoreToRefs = storeToRefs(vehicleStore)
const { controlInfo } = vehicleStoreToRefs
const isShow=ref(false);
const emits = defineEmits(['sendMsg'])
function handleSend(msg) {
emits('sendMsg', {
type: '/setting/controlSetting',
msg: JSON.parse(JSON.stringify(msg))
})
}
function handleChange(value, key) {
let data = value ? 1 : 2
handleSend({
value: data,
type: Number(key)
})
}
function handleSave(type, key) {
let value = 1
if (key) {
value = form.value[key] || 1
}
let data = {
type: Number(type),
value
}
handleSend(data)
}
function boxDown(){
isShow.value=true;
}
function boxCancel(){
isShow.value=false;
}
watch(controlInfo, (value) => {
data.form = {...value}
}, {
immediate: true,
deep: true
})
</script>
<style lang="less" scoped>
.run-control {
overflow: auto;
.content {
padding: 10px 20px;
background: #111521;
border-radius: 8px;
.c-box {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 0;
border-bottom: 2px solid rgba(63,69,86,0.6);
&:nth-last-child(1) {
border: 0;
}
.desc {
margin-right: 5px;
}
/deep/.ivu-btn-primary {
width: 88px;
}
}
.b-box {
justify-content: flex-start;
span {
margin-left: 10px;
}
}
}
.run-middle {
display: flex;
margin: 10px 0;
.content {
width: 50%;
&:nth-child(1) {
margin-right: 10px;
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="run-control">
<div class="content">
<div v-for="item in topList" :key="item.index" class="c-box">
<Button type="primary" @click="handleSave(item.key, item.value)">{{item.btn}}</Button>
<p>
<span class="desc">{{item.des}}</span>
<InputNumber v-model="form[item.value]" controls-outside></InputNumber>
</p>
</div>
</div>
<div class="run-middle">
<div class="content" v-for="item in middleList" :key="item.index">
<p class="c-box" v-for="list in item" :key="list.key">
<span>{{list.label}}</span>
<i-switch size="large" v-model="form[list.key]" @on-change="handleChange($event, list.type)">
<template #open>
<span>开启</span>
</template>
<template #close>
<span>关闭</span>
</template>
</i-switch>
</p>
</div>
</div>
<div class="content">
<p class="c-box b-box">
<Button type="primary" @click="boxDown(10)">货箱回落</Button>
<span>仅在0/1级故障下且货箱功能正常时点击</span>
</p>
<p class="c-box b-box">
<Button type="primary" @click="handleSave(6)">解锁</Button>
<span>解锁上次异常退出导致的路权锁定</span>
</p>
<p class="c-box b-box">
<Button type="primary" @click="handleSave(7)">加载参数</Button>
<span>触发控制模块重新加载参数</span>
</p>
</div>
<Modal v-model="isShow"
title="提示"
:closable="true"
:mask-closable="false"
@on-ok="handleSave(10)"
@on-cancel="boxCancel()">
<p style="text-align: center;">是否执行货箱回落指令</p>
</Modal>
</div>
</template>
<script setup>
import { ref,reactive, toRefs, watch, markRaw } from 'vue';
import { useVehicleStore } from '../../store/VehicleStore';
import { storeToRefs } from 'pinia';
const RUN_CONTROL_TOP = [
{
btn: '打火',
key: '1',
des: '打火持续时间',
value: 'engineStartTime'
},
{
btn: '熄火',
key: '2',
des: '熄火持续时间',
value: 'engineStallTime'
},
{
btn: '上电',
key: '3',
des: '上电持续时间',
value: 'powerOnTime'
},
]
const RUN_CONTROL_MIDDLE = [
[
{
label: '举升',
key: 'liftSwitch',
type: 4
},
{
label: '防滑',
key: 'antiSlideSlip',
type: '5'
}
],
[
// {
// label: '感知屏蔽',
// key: 'perceptionShielding',
// type: 8
// },
{
label: '绕障',
key: 'obstaclesBypassingEnable',
type: 9
}
]
]
const topList = markRaw(RUN_CONTROL_TOP)
const middleList = markRaw(RUN_CONTROL_MIDDLE)
const data = reactive({
form: {}
})
const { form } = toRefs(data)
const vehicleStore = useVehicleStore()
const vehicleStoreToRefs = storeToRefs(vehicleStore)
const { controlInfo } = vehicleStoreToRefs
const isShow=ref(false);
const emits = defineEmits(['sendMsg'])
function handleSend(msg) {
emits('sendMsg', {
type: '/setting/controlSetting',
msg: JSON.parse(JSON.stringify(msg))
})
}
function handleChange(value, key) {
let data = value ? 1 : 2
handleSend({
value: data,
type: Number(key)
})
}
function handleSave(type, key) {
let value = 1
if (key) {
value = form.value[key] || 1
}
let data = {
type: Number(type),
value
}
handleSend(data)
}
function boxDown(){
isShow.value=true;
}
function boxCancel(){
isShow.value=false;
}
watch(controlInfo, (value) => {
data.form = {...value}
}, {
immediate: true,
deep: true
})
</script>
<style lang="less" scoped>
.run-control {
overflow: auto;
.content {
padding: 10px 20px;
background: #111521;
border-radius: 8px;
.c-box {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 0;
border-bottom: 2px solid rgba(63,69,86,0.6);
&:nth-last-child(1) {
border: 0;
}
.desc {
margin-right: 5px;
}
/deep/.ivu-btn-primary {
width: 88px;
}
}
.b-box {
justify-content: flex-start;
span {
margin-left: 10px;
}
}
}
.run-middle {
display: flex;
margin: 10px 0;
.content {
width: 50%;
&:nth-child(1) {
margin-right: 10px;
}
}
}
}
</style>
\ No newline at end of file
No preview for this file type
{
"SERVICE_IP": "172.16.0.153:1234",
"SERVICE_IP": "172.16.0.114:1234",
"MAP_CENTER": [39.74441007068,111.24544532751],
"version": "1.1.3"
}
\ No newline at end of file
......@@ -69,30 +69,26 @@ export const INFORMATION_MESSAGE = [
label: '反馈'
}
],
// [
// {
// name: 'loadBrakeCmd',
// label: '装载制动给定'
// },
// ],
// [
// {
// name: 'loadBrakeStatus',
// label: '装载制动反馈'
// },
// ],
// [
// {
// name: 'mechBrakeCmd',
// label: '机械制动给定'
// },
// ],
// [
// {
// name: 'mechBrakeStatus',
// label: '机械制动反馈'
// },
// ],
[
{
name: 'loadBrakeCmd',
label: '装载制动给定'
},
{
name: 'loadBrakeStatus',
label: '反馈'
},
],
[
{
name: 'mechBrakeCmd',
label: '机械制动给定'
},
{
name: 'mechBrakeStatus',
label: '反馈'
},
],
[
{
name: 'AutoChangeFlag',
......@@ -147,12 +143,12 @@ export const INFORMATION_MESSAGE = [
label: '航向偏差'
},
],
[
{
name: 'previewDeviation',
label: '预瞄偏差'
},
],
// [
// {
// name: 'previewDeviation',
// label: '预瞄偏差'
// },
// ],
[
{
name: 'current_point',
......
......@@ -25,10 +25,10 @@
</div>
</div>
<div class="content">
<!-- <p class="c-box b-box">
<p class="c-box b-box">
<Button type="primary" @click="boxDown(10)">货箱回落</Button>
<span>仅在0/1级故障下且货箱功能正常时点击</span>
</p> -->
</p>
<p class="c-box b-box">
<Button type="primary" @click="handleSave(6)">解锁</Button>
<span>解锁上次异常退出导致的路权锁定</span>
......@@ -39,8 +39,9 @@
</p>
</div>
<Modal v-model="isShow"
:closable="false"
:mask-closable="true"
title="提示"
:closable="true"
:mask-closable="false"
@on-ok="handleSave(10)"
@on-cancel="boxCancel()">
<p style="text-align: center;">是否执行货箱回落指令</p>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment