123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706 |
- <template>
- <div class="generalizationScenarioListPanel">
- <search-layout :needBox="true">
- <template slot="searchItem1">
- <span class="label">场景名称</span>
- <el-input
- v-model="searchParams.sceneName"
- size="small"
- clearable
- placeholder="请输入"
- maxlength="60"
- @keyup.enter.native="doSearch"
- >
- </el-input>
- </template>
- <template slot="searchItem1">
- <span class="label">主车动作</span>
- <el-select
- v-model="searchParams.mainBehavior[0][1]"
- size="small"
- clearable
- >
- <el-option
- v-for="item in dictionaryList['egoAction']"
- :label="item.dictName"
- :value="item.dictName"
- :key="item.id"
- ></el-option>
- </el-select>
- </template>
- <template slot="searchItem2">
- <span class="label">他车动作</span>
- <el-select
- v-model="searchParams.otherBehavior[0][1]"
- size="small"
- clearable
- >
- <el-option
- v-for="item in dictionaryList['targetAction']"
- :label="item.dictName"
- :value="item.dictName"
- :key="item.id"
- ></el-option>
- </el-select>
- </template>
- <template slot="searchItem2">
- <span class="label">天气</span>
- <el-select v-model="searchParams.weather[0][1]" size="small" clearable>
- <el-option
- v-for="item in dictionaryList['sceneLibWeather']"
- :label="item.dictName"
- :value="item.dictName"
- :key="item.id"
- ></el-option>
- </el-select>
- </template>
- <template slot="searchItem3">
- <span class="label">道路类型</span>
- <el-select v-model="searchParams.roadType[0][1]" size="small" clearable>
- <el-option
- v-for="item in dictionaryList['sceneLibrodeType']"
- :label="item.dictName"
- :value="item.dictName"
- :key="item.id"
- ></el-option>
- </el-select>
- </template>
- <template slot="searchItem3">
- <span class="label">道路几何-平面</span>
- <el-select
- v-model="searchParams.roadGeometryPlane[0][1]"
- size="small"
- clearable
- >
- <el-option
- v-for="item in dictionaryList['roadPlaneGeometry']"
- :label="item.dictName"
- :value="item.dictName"
- :key="item.id"
- ></el-option>
- </el-select>
- </template>
- <template slot="searchItem4">
- <span class="label">道路几何-纵断面</span>
- <el-select
- v-model="searchParams.roadGeometryVertical[0][1]"
- size="small"
- clearable
- >
- <el-option
- v-for="item in dictionaryList['roadProfileGeometry']"
- :label="item.dictName"
- :value="item.dictName"
- :key="item.id"
- ></el-option>
- </el-select>
- </template>
- <template slot="searchItem4">
- <span class="label">智能驾驶</span>
- <el-select
- v-model="searchParams.autoDriveFunction[0][1]"
- size="small"
- clearable
- >
- <el-option
- v-for="item in dictionaryList['supportedAdas']"
- :label="item.dictName"
- :value="item.dictName"
- :key="item.id"
- ></el-option>
- </el-select>
- </template>
- <template slot="searchItem5">
- <span class="label">运行区域</span>
- <el-select
- v-model="searchParams.operationArea[0][1]"
- size="small"
- clearable
- >
- <el-option
- v-for="item in dictionaryList['rodeSection']"
- :label="item.dictName"
- :value="item.dictName"
- :key="item.id"
- ></el-option>
- </el-select>
- </template>
- <!-- 复杂度 -->
- <template slot="searchItem5">
- <span class="label">复杂度</span>
- <el-input
- v-model="searchParams.minComplexity"
- size="small"
- clearable
- placeholder="请输入"
- maxlength="60"
- style="width: 100px"
- >
- </el-input>
- <span class="dateSeparator">至</span>
- <el-input
- v-model="searchParams.maxComplexity"
- size="small"
- clearable
- placeholder="请输入"
- maxlength="60"
- style="width: 100px"
- >
- </el-input>
- </template>
- <!-- 危险度 -->
- <template slot="searchItem6">
- <span class="label">危险度</span>
- <el-input
- v-model="searchParams.minRisk"
- size="small"
- clearable
- placeholder="请输入"
- maxlength="60"
- style="width: 100px"
- >
- </el-input>
- <span class="dateSeparator">至</span>
- <el-input
- v-model="searchParams.maxRisk"
- size="small"
- clearable
- placeholder="请输入"
- maxlength="60"
- style="width: 100px"
- >
- </el-input>
- </template>
- <template slot="searchItem6">
- <span class="label">复杂度等级</span>
- <el-select
- v-model="searchParams.complexityLevel"
- size="small"
- clearable
- >
- <el-option
- v-for="item in dictionaryList['complexityLevel']"
- :label="item.dictName"
- :value="item.dictName"
- :key="item.id"
- ></el-option>
- </el-select>
- </template>
- <template slot="searchItem7">
- <span class="label">危险度等级</span>
- <el-select v-model="searchParams.riskLevel" size="small" clearable>
- <el-option
- v-for="item in dictionaryList['riskLevel']"
- :label="item.dictName"
- :value="item.dictName"
- :key="item.id"
- ></el-option>
- </el-select>
- </template>
- <template slot="searchItem7">
- <span class="label">标签</span>
- <el-input
- v-model="searchParams.label"
- size="small"
- clearable
- placeholder="请输入"
- maxlength="60"
- >
- </el-input>
- </template>
- <template slot="searchItem8">
- <span class="label">场景描述</span>
- <el-input
- v-model="searchParams.sceneDescription"
- size="small"
- clearable
- placeholder="请输入"
- maxlength="60"
- >
- </el-input>
- </template>
- <template slot="searchBtn1">
- <el-button type="primary" @click="doSearch">查询</el-button>
- </template>
- <template slot="searchBtn2">
- <el-button type="primary" @click="doReset">重置</el-button>
- </template>
- <template slot="searchBtn2">
- <el-button type="primary" @click="benchmarkEditShow=true">筛选编辑</el-button>
- </template>
- </search-layout>
- <tableList
- ref="table"
- style="margin: 40px 30px 30px"
- :columns="columns"
- :getDataWay="getDataWay"
- :pagination="pagination"
- index
- indexFixed
- >
- <el-table-column
- label="操作"
- slot="cgInfos"
- align="center"
- width="180"
- fixed="right"
- >
- <template v-slot="scope">
- <span @click="viewRow(scope.row)" class="elIcon"> 查看 </span>
- <span @click="editHandle(scope.row)" class="elIcon"> 编辑 </span>
- <span @click="jumpScene(scope.row)" class="elIcon"> 场景评价 </span>
- </template>
- </el-table-column>
- </tableList>
- <el-dialog
- v-if="generalizationVisible"
- :visible.sync="generalizationVisible"
- :title="generalizationDiaTitle"
- width="90%"
- class="generalizationDia"
- :close-on-click-modal="false"
- :close-on-press-escape="false"
- :before-close="generalizationCancel"
- >
- <div>
- <generalization-detail
- ref="generalizationDetail"
- :disabled="true"
- :id="generalizationId"
- :genUrlType="1"
- ></generalization-detail>
- </div>
- </el-dialog>
- <!-- 查看视频弹窗 -->
- <el-dialog
- :title="videoDiaTitle"
- :visible.sync="dialogVisible"
- width="690px"
- :close-on-click-modal="false"
- :close-on-press-escape="false"
- :destroy-on-close="true"
- >
- <div class="videoBox">
- <video :src="videoSrc" controls></video>
- </div>
- </el-dialog>
- <!-- 编辑表格 -->
- <el-dialog
- title="编辑"
- :visible.sync="editVisible"
- width="780px"
- :close-on-click-modal="false"
- :close-on-press-escape="false"
- >
- <el-form
- ref="editInfo"
- :model="editInfo"
- label-width="150px"
- style="display: flex; flex-wrap: wrap; justify-content: space-between"
- >
- <el-form-item label="场景名称">
- <el-input v-model="editInfo.sceneName" :disabled="true"></el-input>
- </el-form-item>
- <el-form-item label="场景描述">
- <el-input v-model="editInfo.sceneDescription"></el-input>
- </el-form-item>
- <el-form-item label="主车动作">
- <el-select v-model="editInfo.mainBehavior">
- <el-option
- v-for="item in ['汇入']"
- :label="item"
- :value="item"
- :key="item"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="他车动作">
- <el-select v-model="editInfo.otherBehavior">
- <el-option
- v-for="item in ['直行']"
- :label="item"
- :value="item"
- :key="item"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="天气">
- <el-select v-model="editInfo.weather">
- <el-option
- v-for="item in ['晴']"
- :label="item"
- :value="item"
- :key="item"
- ></el-option
- ></el-select>
- </el-form-item>
- <el-form-item label="道路类型">
- <el-select v-model="editInfo.roadType">
- <el-option
- v-for="item in ['高速']"
- :label="item"
- :value="item"
- :key="item"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="道路几何-平面">
- <el-select v-model="editInfo.roadGeometryPlane">
- <el-option
- v-for="item in ['直道']"
- :label="item"
- :value="item"
- :key="item"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="道路几何-纵断面">
- <el-select v-model="editInfo.roadGeometryVertical">
- <el-option
- v-for="item in ['上坡']"
- :label="item"
- :value="item"
- :key="item"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="自动驾驶功能">
- <el-select v-model="editInfo.autoDriveFunction">
- <el-option
- v-for="item in ['ACC', 'AEB']"
- :label="item"
- :value="item"
- :key="item"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="运行区域">
- <el-select v-model="editInfo.operationArea">
- <el-option
- v-for="item in ['主路']"
- :label="item"
- :value="item"
- :key="item"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="标签">
- <el-input v-model="editInfo.label"></el-input>
- </el-form-item>
- </el-form>
- <div style="width: 100%; display: flex; justify-content: center">
- <el-button @click="editVisible = false">取消</el-button>
- <el-button type="primary" @click="editUpdate">更新</el-button>
- </div>
- </el-dialog>
- <benchmark-edit v-if="benchmarkEditShow" @closeHandle="editCloseHandle"></benchmark-edit>
- </div>
- </template>
- <script>
- import searchLayout from '@/components/grid/searchLayout'
- import tableList from '@/components/grid/TableList'
- import benchmarkEdit from './components/benchmarkEdit'
- import { mapState } from 'vuex'
- export default {
- name: 'benchmarkScenarioList', // 基准场景库
- components: { searchLayout, tableList,benchmarkEdit },
- data() {
- return {
- benchmarkEditShow:false,
- //搜索参数
- searchParams: {
- sceneName: '', // 场景名称
- share: '0',
- mainBehavior: [['mainBehavior', '']], // 主车动作
- otherBehavior: [['otherBehavior', '']],
- weather: [['weather', '']],
- roadType: [['roadType', '']],
- roadGeometryPlane: [['roadGeometryPlane', '']],
- roadGeometryVertical: [['roadGeometryVertical', '']],
- autoDriveFunction: [['autoDriveFunction', '']],
- operationArea: [['operationArea', '']],
- minComplexity: '',
- maxComplexity: '',
- minRisk: '',
- maxRisk: '',
- complexityLevel: '',
- riskLevel: '',
- sceneDescription: '',
- label: '',
- },
- // 编辑信息
- editVisible: false,
- // 编辑内容数据回填
- editInfo: {
- sceneName: '', //场景名称
- sceneDescription: '', // 场景描述
- mainBehavior: '', //主车动作
- weather: '', // 天气
- roadGeometryPlane: '', // 道路几何-平面
- autoDriveFunction: '', // 自动驾驶功能
- label: '', // 标签
- otherBehavior: '', // 他车动作
- roadType: '', // 道路类型
- roadGeometryVertical: '', // 道路几何-纵断面
- operationArea: '', // 运行区域
- },
- fileNameList: [
- {
- label: '汇入',
- value: '',
- },
- ],
- scenarioRoadTypeList: [],
- // scenarioWeatherList: [],
- props: {
- multiple: true,
- label: 'dictName',
- value: 'dictCode',
- },
- columns: [
- //表格列
- {
- label: '场景名称',
- prop: 'sceneName',
- fixed: 'left',
- },
- {
- label: '主车动作',
- prop: 'mainBehavior',
- },
- {
- label: '他车动作',
- prop: 'otherBehavior',
- },
- {
- label: '天气',
- prop: 'weather',
- },
- {
- label: '道路类型',
- prop: 'roadType',
- },
- {
- label: '道路几何-平面',
- prop: 'roadGeometryPlane',
- },
- {
- label: '道路几何-纵断面',
- prop: 'roadGeometryVertical',
- },
- {
- label: '支持智驾功能',
- prop: 'autoDriveFunction',
- },
- {
- label: '运行区域',
- prop: 'operationArea',
- },
- {
- label: '复杂度',
- prop: 'complexity',
- },
- {
- label: '复杂度等级',
- prop: 'complexityLevel',
- },
- {
- label: '危险度',
- prop: 'risk',
- },
- {
- label: '危险度等级',
- prop: 'riskLevel',
- },
- {
- label: '便签',
- prop: 'label',
- },
- {
- label: '场景描述',
- prop: 'sceneDescription',
- },
- {
- label: '操作',
- prop: 'cgInfos',
- template: true,
- },
- ],
- pagination: {
- //分页使用
- currentPage: 1,
- pageSize: 10,
- position: 'right',
- pageSizes: [10, 30, 50, 100, 200],
- layout: 'sizes, total, prev, pager, next, jumper',
- },
- getDataWay: {
- //加载表格数据
- dataType: 'url',
- type: 'post',
- data: this.$api.sceneLibrary.querybenchmarkList,
- param: {
- share: '0',
- },
- },
- generalizationVisible: false, // 泛化dialog
- generalizationId: '', // 泛化详情id
- generalizationDiaTitle: '',
- // 视频弹窗信息
- dialogVisible: false,
- autoplay: false,
- videoSrc: '',
- objectPath: '',
- videoDiaTitle: '',
- dictionaryList:{},
- }
- },
- computed: {
- ...mapState(['fileHost', 'fileUrl']),
- },
- methods: {
- // 编辑弹窗更新
- editUpdate() {
- this.$axios({
- method: 'post',
- url: this.$api.sceneLibrary.saveSceneReferenceById,
- data: {...this.editInfo},
- }).then(res=>{
- if(res.code ==200){
- this.editVisible = false
- this.$message.success("更新成功");
- }else{
- this.$message.error(res.message || "更新失败");
- }
- })
- },
- // 搜索查询
- doSearch() {
- this.searchParams.share = '0'
- const specialParams = [
- 'mainBehavior',
- 'otherBehavior',
- 'weather',
- 'roadType',
- 'roadGeometryPlane',
- 'roadGeometryVertical',
- 'autoDriveFunction',
- 'operationArea',
- ]
- const obj = JSON.parse(JSON.stringify(this.searchParams))
- Object.keys(obj).forEach((item) => {
- if(specialParams.includes(item)){
- if(!obj[item][0][1]){
- obj[item] = []
- }
- }
- })
- this.refreshList(obj)
- },
- //刷新table
- refreshList(param) {
- param
- ? this.$refs['table'].loadData(param)
- : this.$refs['table'].loadData()
- },
- doReset() {
- this.searchParams = {
- sceneName: '', // 场景名称
- share: '0',
- mainBehavior: [['mainBehavior', '']], // 主车动作
- otherBehavior: [['otherBehavior', '']],
- weather: [['weather', '']],
- roadType: [['roadType', '']],
- roadGeometryPlane: [['roadGeometryPlane', '']],
- roadGeometryVertical: [['roadGeometryVertical', '']],
- autoDriveFunction: [['autoDriveFunction', '']],
- operationArea: [['operationArea', '']],
- minComplexity: '',
- maxComplexity: '',
- minRisk: '',
- maxRisk: '',
- complexityLevel: '',
- riskLevel: '',
- sceneDescription: '',
- label: '',
- }
- this.doSearch()
- },
- pageControl(data) {
- this.activeName = data.name
- this.doSearch()
- },
- viewRow(row) {
- this.dialogVisible = true
- this.videoSrc = 'https://media.w3.org/2010/05/sintel/trailer.mp4'
- },
- // 编辑
- editHandle(e) {
- this.editInfo = JSON.parse(JSON.stringify(e))
- this.editVisible = true
- },
- // 跳转场景评价
- jumpScene(row) {
- this.$store.commit("getSceneId",row.sceneId);
- this.$router.push({
- path: '/sceneEvaluation',
- query:{id:row.sceneId}
- })
- },
- // 筛选项编辑关闭 -- 刷新筛选列表
- editCloseHandle(){
- this.benchmarkEditShow = false
- this.searchInit()
- },
- searchInit() {
- this.$axios({
- method: 'post',
- url: this.$api.common.getDictListsByTypes,
- data: { dictTypes: "egoAction,targetAction,sceneLibWeather,sceneLibrodeType,roadPlaneGeometry,roadProfileGeometry,supportedAdas,rodeSection,complexityLevel,riskLevel" },
- }).then((res) => {
- if (res.code == 200) {
- this.dictionaryList = res.info
- } else {
- this.$message.error(res.message || '查询失败')
- }
- })
- },
- },
- async mounted() {
- this.searchInit()
- },
- }
- </script>
- <style lang='less' scoped>
- @import './common/util.less';
- .generalizationScenarioListPanel {
- .inputBox {
- .label {
- min-width: 90px;
- }
- }
- .btnsPanel {
- text-align: right;
- }
- .generalizationDia {
- /deep/ .el-dialog__body {
- position: relative;
- padding: 20px 60px;
- .changeBtn {
- position: absolute;
- top: 20px;
- right: 60px;
- }
- }
- }
- }
- </style>
|