|
@@ -1,187 +1,67 @@
|
|
|
<template>
|
|
|
<div class="container">
|
|
|
- <div class="select-map">
|
|
|
+ <div class="select-map" :class="{'no-interaction': isDisabled}">
|
|
|
地图选择:
|
|
|
- <el-select class="select-content" v-model="selectMapId" placeholder="请选择">
|
|
|
+ <el-select class="select-content" v-model="openDrive.mapId" placeholder="请选择">
|
|
|
<el-option v-for="(item, index) in mapList" :key="item.id" :label="item.mapName" :value="item.id">
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
<div class="content">
|
|
|
- <div class="map">
|
|
|
- <open-drive
|
|
|
- :mapId="selectMapId"
|
|
|
- :startPoint="trackForm.startPoint"
|
|
|
- :endPoint="trackForm.endPoint"
|
|
|
- :sections="trackForm.track.sections"></open-drive>
|
|
|
- </div>
|
|
|
- <div class="table">
|
|
|
- <div class="table-operate">
|
|
|
- <el-button class="btn" type="primary">添加</el-button>
|
|
|
- <el-button class="btn" type="info">设为仿真视角</el-button>
|
|
|
- </div>
|
|
|
- <el-table class="table-content" ref="multipleTable" :data="tableData" tooltip-effect="dark"
|
|
|
- style="width: 100%">
|
|
|
- <el-table-column type="selection" width="55">
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="选择车辆">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-select v-model="selectCarId" class="algorithm-select">
|
|
|
- <el-option v-for="item in carList" :key="item.code" :label="item.name"
|
|
|
- :value="item.code">
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="选择算法">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-select v-model="selectAlgorithmId" class="algorithm-select">
|
|
|
- <el-option v-for="item in algorithmList" :key="item.code" :label="item.name"
|
|
|
- :value="item.code">
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="选择轨迹">
|
|
|
- <template slot-scope="scope">
|
|
|
- <div @click="showDialog">{{scope.row.address}}</div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="操作">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-button class="delete-btn" size="mini-btn" type="danger">删除</el-button>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- <div class="block">
|
|
|
- <el-pagination layout="prev, pager, next" :total="1000">
|
|
|
- </el-pagination>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ <open-drive class="map" ref="openDrive" :mapId="openDrive.mapId" :startPoint="openDrive.pathStartJson"
|
|
|
+ :endPoint="openDrive.pathEndJson" :sections="openDrive.sections"></open-drive>
|
|
|
+ <SimulationTable ref="table" @simulationBtnCallBack="settingSimulation" @openDialog="showDialog"
|
|
|
+ class="table" :sceneId="sceneId" :class="{'no-interaction': isDisabled}"/>
|
|
|
</div>
|
|
|
- <div class="operate">
|
|
|
- <el-button class="btn" type="primary">保存</el-button>
|
|
|
- <el-button class="btn" type="info">返回</el-button>
|
|
|
+ <div class="operate" :class="{'no-interaction': isDisabled}">
|
|
|
+ <el-button @click="saveAll" class="btn" type="primary">保存</el-button>
|
|
|
+ <el-button @click="back" class="btn" type="info">返回</el-button>
|
|
|
</div>
|
|
|
- <el-dialog title="选择轨迹" :visible.sync="dialogVisible" width="30%" :before-close="handleClose">
|
|
|
- <el-form ref="form" :model="trackForm" label-width="100px" size="mini">
|
|
|
- <el-form-item label="选择轨迹">
|
|
|
- <el-select v-model="trackForm.track" class="algorithm-select">
|
|
|
- <el-option v-for="item in trackList" :key="item.id" :label="item.id" :value="item">
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="轨迹起点">
|
|
|
- <el-select v-model="trackForm.startPoint" class="algorithm-select">
|
|
|
- <el-option v-for="(item, index) in trackForm.track.startPoints" :key="index" :label="getName(index)" :value="item">
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="轨迹终点">
|
|
|
- <el-select v-model="trackForm.endPoint" class="algorithm-select">
|
|
|
- <el-option v-for="(item, index) in trackForm.track.endPoints" :key="index" :label="getName(index)" :value="item">
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-<!-- <el-form-item label="车辆朝向">
|
|
|
- <el-input v-model="sizeForm.name"></el-input>
|
|
|
- </el-form-item> -->
|
|
|
- </el-form>
|
|
|
- <span slot="footer" class="dialog-footer">
|
|
|
- <el-button @click="dialogVisible = false">取 消</el-button>
|
|
|
- <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
|
|
|
- </span>
|
|
|
- </el-dialog>
|
|
|
+ <PathDialog :open="dialog.dialogOpen" :params="dialog.dialogParam" @onClose="closeDialog"
|
|
|
+ @onSubmit="sumbitDialog" @change="changeMap" />
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
- import OpenDrive from "@/views/workManagement/openDriver";
|
|
|
+ import OpenDrive from "@/views/workManagement/components/openDriver";
|
|
|
+ import PathDialog from "@/views/workManagement/components/pathDialog";
|
|
|
+ import SimulationTable from "@/views/workManagement/components/simulationTable";
|
|
|
+
|
|
|
export default {
|
|
|
name: "MultimodeSimulation", // 工作管理
|
|
|
components: {
|
|
|
- OpenDrive
|
|
|
+ OpenDrive,
|
|
|
+ PathDialog,
|
|
|
+ SimulationTable
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
- dialogVisible: false,
|
|
|
- tableData: [{
|
|
|
- date: '2016-05-03',
|
|
|
- name: '王小虎',
|
|
|
- address: '上海市普陀区金沙江路 1518 弄'
|
|
|
- }, {
|
|
|
- date: '2016-05-02',
|
|
|
- name: '王小虎',
|
|
|
- address: '上海市普陀区金沙江路 1518 弄'
|
|
|
- }, {
|
|
|
- date: '2016-05-04',
|
|
|
- name: '王小虎',
|
|
|
- address: '上海市普陀区金沙江路 1518 弄'
|
|
|
- }, {
|
|
|
- date: '2016-05-01',
|
|
|
- name: '王小虎',
|
|
|
- address: '上海市普陀区金沙江路 1518 弄'
|
|
|
- }, {
|
|
|
- date: '2016-05-08',
|
|
|
- name: '王小虎',
|
|
|
- address: '上海市普陀区金沙江路 1518 弄'
|
|
|
- }, {
|
|
|
- date: '2016-05-04',
|
|
|
- name: '王小虎',
|
|
|
- address: '上海市普陀区金沙江路 1518 弄'
|
|
|
- }, {
|
|
|
- date: '2016-05-01',
|
|
|
- name: '王小虎',
|
|
|
- address: '上海市普陀区金沙江路 1518 弄'
|
|
|
- }],
|
|
|
+ isDisabled: false,
|
|
|
mapList: [],
|
|
|
- selectMapId: "",
|
|
|
- carList: [],
|
|
|
- selectCarId: "",
|
|
|
- algorithmList: [],
|
|
|
- selectAlgorithmId: "",
|
|
|
- trackList: [],
|
|
|
- trackForm: {
|
|
|
- track:{},
|
|
|
- startPoint:{},
|
|
|
- endPoint:{},
|
|
|
- threat:""
|
|
|
-
|
|
|
+ sceneId: "",
|
|
|
+ dialog: {
|
|
|
+ dialogParam: {},
|
|
|
+ dialogOpen: false
|
|
|
+ },
|
|
|
+ openDrive: {
|
|
|
+ mapId: "",
|
|
|
+ pathStartJson: {},
|
|
|
+ pathEndJson: {},
|
|
|
+ sections: []
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
},
|
|
|
- computed:{
|
|
|
- getName(){
|
|
|
- return (str) => "name" + str;
|
|
|
+ beforeMount() {
|
|
|
+ this.sceneId = this.$route.query.sceneId;
|
|
|
+ if(!this.sceneId){
|
|
|
+ this.sceneId = "b1e8fb96cf8a41d9a0364d29a9289628";
|
|
|
}
|
|
|
},
|
|
|
mounted() {
|
|
|
this.getMapList();
|
|
|
- this.getCarList();
|
|
|
- this.getAlgorithmList();
|
|
|
},
|
|
|
methods: {
|
|
|
- getCarList() {
|
|
|
- this.$axios({
|
|
|
- method: "post",
|
|
|
- url: this.$api.workManagement.carList,
|
|
|
- data: {
|
|
|
- "dropDownType": "2",
|
|
|
- "algorithmType": "1"
|
|
|
- }
|
|
|
- }).then((res) => {
|
|
|
- if (res.code == 200) {
|
|
|
- this.carList = [...res.info[0].dropDownList[0].children, ...res.info[0].dropDownList[1]
|
|
|
- .children
|
|
|
- ];
|
|
|
- if (this.carList.length > 0) {
|
|
|
- this.selectCarId = this.carList[0].code;
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
getMapList() {
|
|
|
this.$axios({
|
|
|
method: "post",
|
|
@@ -203,14 +83,9 @@
|
|
|
}
|
|
|
}).then((res) => {
|
|
|
if (res.code == 200) {
|
|
|
- let map = {
|
|
|
- id: "2",
|
|
|
- mapName: "测试2"
|
|
|
- };
|
|
|
- res.info.push(map)
|
|
|
this.mapList = res.info;
|
|
|
if (this.mapList.length > 0) {
|
|
|
- this.selectMapId = this.mapList[0].id;
|
|
|
+ this.openDrive.mapId = this.mapList[0].id;
|
|
|
}
|
|
|
}
|
|
|
})
|
|
@@ -219,89 +94,125 @@
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
- getAlgorithmList() {
|
|
|
- this.$axios({
|
|
|
- method: "post",
|
|
|
- url: this.$api.workManagement.algorithmList,
|
|
|
- data: {
|
|
|
- "dropDownType": "1",
|
|
|
- "algorithmType": "1"
|
|
|
- }
|
|
|
- }).then((res) => {
|
|
|
- if (res.code == 200 && res.info) {
|
|
|
- this.algorithmList = [...res.info[0].dropDownList[0].children, ...res.info[0].dropDownList[
|
|
|
- 1].children];
|
|
|
- if (this.algorithmList.length > 0) {
|
|
|
- this.selectAlgorithmId = this.algorithmList[0].code;
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
- getMapDetails(mapId) {
|
|
|
- if (mapId == "2") {
|
|
|
- if (this.isLoaded == true) {
|
|
|
- this.reloadNewMap("/map/mine4.xodr");
|
|
|
- } else {
|
|
|
- this.loadMap("/map/mine4.xodr");
|
|
|
- this.isLoaded = true;
|
|
|
- }
|
|
|
+ settingSimulation(row) {
|
|
|
+ if (row.id == null || row.id == "") {
|
|
|
+ this.$message({
|
|
|
+ message: '警告哦,请选择一条已保存记录',
|
|
|
+ type: 'warning'
|
|
|
+ });
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- this.$axios({
|
|
|
- method: "post",
|
|
|
- url: this.$api.workManagement.mapDetails,
|
|
|
- data: {
|
|
|
- mapId
|
|
|
- }
|
|
|
- }).then((res) => {
|
|
|
- if (res.code == 200 && res.info) {
|
|
|
- this.trackList = res.info.path;
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
- showDialog() {
|
|
|
- this.dialogVisible = true;
|
|
|
- this.getMapDetails(this.selectMapId);
|
|
|
- },
|
|
|
- handleClose(done) {
|
|
|
- this.$confirm('确认关闭?')
|
|
|
+ this.$confirm('确定设为仿真视角?')
|
|
|
.then(_ => {
|
|
|
- done();
|
|
|
+ this.$axios({
|
|
|
+ method: "post",
|
|
|
+ url: this.$api.workManagement.settingsSimulation,
|
|
|
+ data: {
|
|
|
+ "sceneCarId": row.id,
|
|
|
+ }
|
|
|
+ }).then((res) => {
|
|
|
+ if(res.code == 200){
|
|
|
+ this.$message({
|
|
|
+ message: '设为仿真视角成功',
|
|
|
+ type: 'success'
|
|
|
+ });
|
|
|
+ }else{
|
|
|
+ this.$message({
|
|
|
+ message: '设为仿真视角失败',
|
|
|
+ type: 'warning'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ })
|
|
|
})
|
|
|
.catch(_ => {});
|
|
|
+
|
|
|
+ },
|
|
|
+ reloadMap() {
|
|
|
+ setTimeout(() => {
|
|
|
+ this.$refs.openDrive.reloadMap();
|
|
|
+ }, 50);
|
|
|
+ },
|
|
|
+ changeMap(data) {
|
|
|
+ this.openDrive = data;
|
|
|
+ },
|
|
|
+ showDialog(data) {
|
|
|
+ console.log(data)
|
|
|
+ this.isDisabled = true;
|
|
|
+ this.dialog.dialogOpen = true;
|
|
|
+ this.dialog.dialogParam = Object.assign({}, data, {
|
|
|
+ mapId: this.openDrive.mapId
|
|
|
+ });
|
|
|
+ },
|
|
|
+ closeDialog() {
|
|
|
+ this.dialog.dialogOpen = false;
|
|
|
+ this.isDisabled = false;
|
|
|
+ this.reloadMap();
|
|
|
+ },
|
|
|
+ sumbitDialog(data) {
|
|
|
+ this.dialog.dialogOpen = false;
|
|
|
+ this.isDisabled = false;
|
|
|
+ this.$refs.table.updateRow(data);
|
|
|
+ this.reloadMap();
|
|
|
},
|
|
|
- onSubmit() {
|
|
|
- console.log('submit!');
|
|
|
+ saveAll(){
|
|
|
+ this.$refs.table.saveAll(this.openDrive.mapId);
|
|
|
+ },
|
|
|
+ back(){
|
|
|
+
|
|
|
+ this.$router.go(-1);
|
|
|
}
|
|
|
- },
|
|
|
-
|
|
|
- // mounted() {},
|
|
|
+ }
|
|
|
};
|
|
|
</script>
|
|
|
|
|
|
<style lang='less' scoped>
|
|
|
+ *{
|
|
|
+ margin: 0;
|
|
|
+ padding: 0;
|
|
|
+ box-sizing: content-box;
|
|
|
+ }
|
|
|
+ .mainBox {
|
|
|
+ padding-bottom: 0px !important
|
|
|
+ }
|
|
|
+
|
|
|
.container {
|
|
|
+ /* background-color: rebeccapurple; */
|
|
|
+ height: 100%;
|
|
|
width: 100%;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
+ padding: 0 0.5rem;
|
|
|
}
|
|
|
|
|
|
.select-map {
|
|
|
font-size: 1rem;
|
|
|
color: #333333;
|
|
|
letter-spacing: 0.05rem;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
padding-left: 1rem;
|
|
|
width: 100%;
|
|
|
- padding: 1rem;
|
|
|
+ /* padding: 1rem; */
|
|
|
+ height: 4rem;
|
|
|
}
|
|
|
|
|
|
.content {
|
|
|
display: flex;
|
|
|
flex-direction: row;
|
|
|
padding: 0.2rem;
|
|
|
+ height: 38rem;
|
|
|
}
|
|
|
|
|
|
+ .operate {
|
|
|
+ height: 4rem;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ padding: 0rem;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
.block {
|
|
|
height: auto;
|
|
|
width: 100%;
|
|
@@ -320,28 +231,9 @@
|
|
|
margin: 0 0.2rem 0 0.25rem;
|
|
|
}
|
|
|
|
|
|
- .table-operate {
|
|
|
- height: 3.1rem;
|
|
|
- display: flex;
|
|
|
- flex-direction: row;
|
|
|
- justify-content: right;
|
|
|
- align-items: center;
|
|
|
- }
|
|
|
-
|
|
|
- .table-content {
|
|
|
- height: 30.5rem;
|
|
|
- }
|
|
|
-
|
|
|
- .operate {
|
|
|
- flex: auto;
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
- }
|
|
|
-
|
|
|
.btn {
|
|
|
color: #FFFFFF;
|
|
|
- height: 2.5rem;
|
|
|
+ height: 1.5rem;
|
|
|
margin: 1rem;
|
|
|
}
|
|
|
|
|
@@ -367,4 +259,26 @@
|
|
|
.block {
|
|
|
border: none !important;
|
|
|
}
|
|
|
+
|
|
|
+ .el-dialog__wrapper {
|
|
|
+ pointer-events: none;
|
|
|
+
|
|
|
+ /deep/ .el-dialog {
|
|
|
+ pointer-events: auto;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/ .el-dialog {
|
|
|
+ position: absolute !important;
|
|
|
+ top: 0 !important;
|
|
|
+ right: 10rem !important;
|
|
|
+ }
|
|
|
+ .no-interaction {
|
|
|
+ pointer-events: none;
|
|
|
+ /* 其他样式,比如背景色、边框等 */
|
|
|
+/* background-color: #f0f0f0;
|
|
|
+ border: 1px solid #ccc; */
|
|
|
+/* padding: 10px;
|
|
|
+ margin: 10px; */
|
|
|
+ }
|
|
|
</style>
|