ronaldo9Zhang 2 yıl önce
ebeveyn
işleme
7a23c5385f
32 değiştirilmiş dosya ile 1097 ekleme ve 850 silme
  1. 4 0
      src/api/modelLibrary.js
  2. 2 0
      src/api/sceneLibrary.js
  3. 2 0
      src/api/workManagement.js
  4. 23 21
      src/router/algorithmsLibrary.js
  5. 11 10
      src/router/modelLibrary.js
  6. 22 20
      src/router/sceneLibrary.js
  7. 8 0
      src/store/index.js
  8. 96 112
      src/views/algorithmsLibrary/algorithmsLibraryList.vue
  9. 7 2
      src/views/modelLibrary/components/modelList.vue
  10. 14 2
      src/views/modelLibrary/components/modelTypeList.vue
  11. 1 0
      src/views/modelLibrary/components/threeSensorModel.vue
  12. 1 0
      src/views/modelLibrary/components/threeVehicleConfiguration.vue
  13. 55 11
      src/views/modelLibrary/vehicleConfigurationDetail.vue
  14. 116 175
      src/views/modelLibrary/vehicleConfigurationList.vue
  15. 6 1
      src/views/modelLibrary/vehicleModel.vue
  16. 43 23
      src/views/page/breadCrumb.vue
  17. 22 5
      src/views/page/pageMenu.vue
  18. 28 4
      src/views/sceneLibrary/components/generalizationDetail.vue
  19. 2 5
      src/views/sceneLibrary/components/upload.vue
  20. 1 1
      src/views/sceneLibrary/gradingRuleDetail.vue
  21. 109 144
      src/views/sceneLibrary/gradingRulesList.vue
  22. 96 126
      src/views/sceneLibrary/scenarioTestPackageManagementList.vue
  23. 83 23
      src/views/sceneLibrary/scenePacketList.vue
  24. 76 33
      src/views/workManagement/autoRunProjectDetail.vue
  25. 3 3
      src/views/workManagement/autoRunProjectList.vue
  26. 1 1
      src/views/workManagement/autoRunSubProjectList.vue
  27. 3 2
      src/views/workManagement/components/threeProjectInfo.vue
  28. 1 1
      src/views/workManagement/evaluationReport.vue
  29. 90 33
      src/views/workManagement/manualRunProjectDetail.vue
  30. 1 1
      src/views/workManagement/manualRunProjectList.vue
  31. 167 88
      src/views/workManagement/projectInfo.vue
  32. 3 3
      vue.config.js

+ 4 - 0
src/api/modelLibrary.js

@@ -39,6 +39,8 @@ const shareConfigByInfo = basePart + '/config/shareConfigByInfo'; // 车辆配
 const shareConfigById = basePart + '/config/shareConfigById'; // 车辆配置列表分享
 const delConfigById = basePart + '/config/delConfigById'; // 车辆配置删除
 const getMyVehicleList = basePart + '/vehicle/getMyVehicleList'; // 车辆名称私有下拉列表
+const getMyVehicleListNew = basePart + '/vehicle/getMyVehicleListNew'; // 车辆名称私有下拉列表-new
+const getMyVehicleListNew1 = basePart + '/vehicle/getMyVehicleListNew1'; // 车辆名称私有下拉列表-new1
 const getMyCameraList = basePart + '/camera/getMyCameraList'; // 摄像头-私有列表查询
 const getMyOgtList = basePart + '/ogt/getMyOgtList'; // 完美传感器-私有列表查询
 const getMyLidarList = basePart + '/lidar/getMyLidarList'; // 激光雷达对象-私有列表查询
@@ -86,6 +88,8 @@ export default {
     shareConfigById,
     delConfigById,
     getMyVehicleList,
+    getMyVehicleListNew,
+    getMyVehicleListNew1,
     getMyCameraList,
     getMyOgtList,
     getMyLidarList,

+ 2 - 0
src/api/sceneLibrary.js

@@ -31,6 +31,7 @@ const queryScenePackageSublistList = basePart + '/ScenePackage/queryScenePackage
 const getSceneParam = basePart + '/ScenePackage/getSceneParam'; // 场景测试包创建上限
 const saveScenePackage = basePart + '/ScenePackage/saveScenePackage'; // 场景测试包列表保存
 const queryCsb = basePart + '/ScoringRules/queryCsb'; // 测试包添加评分规则下拉
+const queryCsbNew = basePart + '/ScoringRules/queryCsbNew'; // 测试包添加评分规则下拉-new
 
 const querySceneGeneralTemplateList = basePart + '/SceneGeneralTemplate/querySceneGeneralTemplateList'; // 泛化列表
 const deleteSceneGeneralTemplateById = basePart + '/SceneGeneralTemplate/deleteSceneGeneralTemplateById'; // 删除泛化场景模板
@@ -73,6 +74,7 @@ export default {
     getSceneParam,
     saveScenePackage,
     queryCsb,
+    queryCsbNew,
 
     querySceneGeneralTemplateList,
     deleteSceneGeneralTemplateById,

+ 2 - 0
src/api/workManagement.js

@@ -3,6 +3,7 @@ const basePart = '/simulation/resource/server';
 const addOrUpdateProject = basePart + '/simulationProject/addOrUpdateProject'; // 创建或保存标准化测试详情
 const selectProjectById = basePart + '/simulationProject/selectProjectById'; // 查询标准化测试详情
 const selectDropDownByType = basePart + '/simulationProject/selectDropDownByType'; // 标准化测试详情中的下拉列表
+const selectDropDownByTypeNew = basePart + '/simulationProject/selectDropDownByTypeNew'; // 标准化测试详情中的下拉列表-new
 const selectMaxParallelism = basePart + '/simulationProject/selectMaxParallelism'; // 标准化测试详情中获取人员可用并行数
 const updateProjectNowRunState = basePart + '/simulationProject/updateProjectNowRunState'; // 标准化测试详情中修改工作运行状态
 
@@ -33,6 +34,7 @@ export default {
     addOrUpdateProject,
     selectProjectById,
     selectDropDownByType,
+    selectDropDownByTypeNew,
     selectMaxParallelism,
     updateProjectNowRunState,
 

+ 23 - 21
src/router/algorithmsLibrary.js

@@ -6,27 +6,29 @@ export default [{
             menuKind: "algorithmsLibrary",
             login: true
         },
-        component: () => import("@/views/algorithmsLibrary/algorithmsLibraryList")
-    },
-    {
-        path: "/gitAlgorithms",
-        name: "gitAlgorithms",
-        meta: {
-            tabname: "仓库算法",
-            menuKind: "algorithmsLibrary",
-            login: true
-        },
-        component: () => import("@/views/algorithmsLibrary/gitAlgorithms")
-    },
-    {
-        path: "/exportAlgorithms",
-        name: "exportAlgorithms",
-        meta: {
-            tabname: "导入算法",
-            menuKind: "algorithmsLibrary",
-            login: true
-        },
-        component: () => import("@/views/algorithmsLibrary/exportAlgorithms")
+        component: () => import("@/views/algorithmsLibrary/algorithmsLibraryList"),
+        children: [
+            {
+                path: "/gitAlgorithms",
+                name: "gitAlgorithms",
+                meta: {
+                    tabname: "仓库算法",
+                    menuKind: "algorithmsLibrary",
+                    login: true
+                },
+                component: () => import("@/views/algorithmsLibrary/gitAlgorithms")
+            },
+            {
+                path: "/exportAlgorithms",
+                name: "exportAlgorithms",
+                meta: {
+                    tabname: "导入算法",
+                    menuKind: "algorithmsLibrary",
+                    login: true
+                },
+                component: () => import("@/views/algorithmsLibrary/exportAlgorithms")
+            },
+        ]
     },
     {
         path: "/algorithmsPlatformList",

+ 11 - 10
src/router/modelLibrary.js

@@ -6,17 +6,18 @@ export default [{
             menuKind: "modelLibrary",
             login: true
         },
-        component: () => import("@/views/modelLibrary/vehicleConfigurationList")
-    },
-    {
-        path: "/vehicleConfigurationDetail",
-        name: "vehicleConfigurationDetail",
-        meta: {
-            tabname: "车辆配置详情",
-            menuKind: "modelLibrary",
-            login: true
+        component: () => import("@/views/modelLibrary/vehicleConfigurationList"),
+        children: [{
+            path: "/vehicleConfigurationDetail",
+            name: "vehicleConfigurationDetail",
+            meta: {
+                tabname: "车辆配置详情",
+                menuKind: "modelLibrary",
+                login: true
+            },
+            component: () => import("@/views/modelLibrary/vehicleConfigurationDetail")
         },
-        component: () => import("@/views/modelLibrary/vehicleConfigurationDetail")
+    ]
     },
     {
         path: "/sensorModel",

+ 22 - 20
src/router/sceneLibrary.js

@@ -46,17 +46,18 @@ export default [{
             menuKind: "sceneLibrary",
             login: true
         },
-        component: () => import("@/views/sceneLibrary/scenarioTestPackageManagementList")
-    },
-    {
-        path: "/scenePacketList",
-        name: "scenePacketList",
-        meta: {
-            tabname: "场景测试包",
-            menuKind: "sceneLibrary",
-            login: true
+        component: () => import("@/views/sceneLibrary/scenarioTestPackageManagementList"),
+        children: [{
+            path: "/scenePacketList",
+            name: "scenePacketList",
+            meta: {
+                tabname: "场景测试包",
+                menuKind: "sceneLibrary",
+                login: true
+            },
+            component: () => import("@/views/sceneLibrary/scenePacketList")
         },
-        component: () => import("@/views/sceneLibrary/scenePacketList")
+    ]
     },
     {
         path: "/gradingRulesList",
@@ -66,16 +67,17 @@ export default [{
             menuKind: "sceneLibrary",
             login: true
         },
-        component: () => import("@/views/sceneLibrary/gradingRulesList")
-    },
-    {
-        path: "/gradingRule",
-        name: "gradingRule",
-        meta: {
-            tabname: "评分规则",
-            menuKind: "sceneLibrary",
-            login: true
+        component: () => import("@/views/sceneLibrary/gradingRulesList"),
+        children: [{
+            path: "/gradingRuleDetail",
+            name: "gradingRuleDetail",
+            meta: {
+                tabname: "评分规则",
+                menuKind: "sceneLibrary",
+                login: true
+            },
+            component: () => import("@/views/sceneLibrary/gradingRuleDetail")
         },
-        component: () => import("@/views/sceneLibrary/gradingRule")
+    ]
     },
 ]

+ 8 - 0
src/store/index.js

@@ -22,6 +22,11 @@ export default new Vuex.Store({
     scaleRate: 1.8, // 处理矿车等需要微调的
     projectInfoTabname: "",
     taskInfoTabname: "",
+    vehicleConfigurationDetailTabName: "", // 车辆配置详情
+    gitAlgorithmsTabName: "", // 仓库算法详情
+    exportAlgorithmsTabName: "", // 导入算法详情
+    gradingRuleDetailTabName: "", // 评分规则详情
+    scenePacketListTabName: "", // 场景测试包详情
   },
   mutations: {
     getUserId(state, data) {
@@ -42,6 +47,9 @@ export default new Vuex.Store({
     getTaskInfoTabname(state, data) {
       state.taskInfoTabname = data
     },
+    getTabname(state, name, data) {
+      state[name] = data
+    },
   },
   actions: {},
   modules: {},

+ 96 - 112
src/views/algorithmsLibrary/algorithmsLibraryList.vue

@@ -1,110 +1,68 @@
 <template>
     <div>
-        <search-layout :needBox="true">
-            <template slot="searchItem1">
-                <span class="label">ID</span>
-                <el-input
-                    v-model="searchParams.algorithmCode"
-                    size="small"
-                    clearable
-                    placeholder="请输入"
-                    maxlength="60"
-                    @keyup.enter.native="doSearch"
-                >
-                </el-input>
-            </template>
-            <template slot="searchItem2">
-                <span class="label">算法名称</span>
-                <el-input
-                    v-model="searchParams.algorithmName"
-                    size="small"
-                    clearable
-                    placeholder="请输入"
-                    maxlength="60"
-                    @keyup.enter.native="doSearch"
-                >
-                </el-input>
-            </template>
-            <template slot="searchItem3">
-                <span class="label">算法描述</span>
-                <el-input
-                    v-model="searchParams.description"
-                    size="small"
-                    clearable
-                    placeholder="请输入"
-                    maxlength="60"
-                    @keyup.enter.native="doSearch"
-                >
-                </el-input>
-            </template>
-            <template slot="searchItem4">
-                <span class="label">校验状态</span>
-                <el-select v-model="searchParams.validationStatus">
-                    <el-option
-                        v-for="item in validationStatusList"
-                        :label="item.caption"
-                        :value="item.code"
-                        :key="item.code"
-                    ></el-option>
-                </el-select>
-            </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>
-        </search-layout>
+        <div v-show="!$route.path.includes('gitAlgorithms') && !$route.path.includes('exportAlgorithms')">
+            <search-layout :needBox="true">
+                <template slot="searchItem1">
+                    <span class="label">ID</span>
+                    <el-input v-model="searchParams.algorithmCode" size="small" clearable placeholder="请输入" maxlength="60"
+                        @keyup.enter.native="doSearch(false)">
+                    </el-input>
+                </template>
+                <template slot="searchItem2">
+                    <span class="label">算法名称</span>
+                    <el-input v-model="searchParams.algorithmName" size="small" clearable placeholder="请输入" maxlength="60"
+                        @keyup.enter.native="doSearch(false)">
+                    </el-input>
+                </template>
+                <template slot="searchItem3">
+                    <span class="label">算法描述</span>
+                    <el-input v-model="searchParams.description" size="small" clearable placeholder="请输入" maxlength="60"
+                        @keyup.enter.native="doSearch(false)">
+                    </el-input>
+                </template>
+                <template slot="searchItem4">
+                    <span class="label">校验状态</span>
+                    <el-select v-model="searchParams.validationStatus">
+                        <el-option v-for="item in validationStatusList" :label="item.caption" :value="item.code"
+                            :key="item.code"></el-option>
+                    </el-select>
+                </template>
+                <template slot="searchBtn1">
+                    <el-button type="primary" @click="doSearch(false)">查询</el-button>
+                </template>
+                <template slot="searchBtn2">
+                    <el-button type="primary" @click="doReset">重置</el-button>
+                </template>
+            </search-layout>
 
-        <div class="myTabsBox myTabsBoxThreeTabs">
-            <el-tabs v-model="activeName" type="card" @tab-click="pageControl">
-                <el-tab-pane label="公有" name="1"></el-tab-pane>
-                <el-tab-pane label="私有导入" name="2"></el-tab-pane>
-                <el-tab-pane label="私有仓库" name="3"></el-tab-pane>
-            </el-tabs>
-            <el-button
-                v-bind:class="{ addBtn: true, disabled: activeName === '1' }"
-                icon="el-icon-circle-plus-outline"
-                @click="addOne"
-                type="primary"
-                :disabled="activeName === '1'"
-                >新增</el-button
-            >
-        </div>
+            <div class="myTabsBox myTabsBoxThreeTabs">
+                <el-tabs v-model="activeName" type="card" @tab-click="pageControl">
+                    <el-tab-pane label="公有" name="1"></el-tab-pane>
+                    <el-tab-pane label="私有导入" name="2"></el-tab-pane>
+                    <el-tab-pane label="私有仓库" name="3"></el-tab-pane>
+                </el-tabs>
+                <el-button v-show="activeName != '1'" class="addBtn" icon="el-icon-circle-plus-outline" @click="addOne"
+                    type="primary">新增</el-button>
+            </div>
 
-        <tableList
-            ref="table"
-            style="margin: 0 30px"
-            :columns="columns"
-            :getDataWay="getDataWay"
-            :pagination="pagination"
-            index
-        >
-            <el-table-column label="操作" slot="cgInfos" align="center">
-                <template v-slot="scope">
-                    <i
-                        v-if="
+            <tableList ref="table" style="margin: 0 30px" :columns="columns" :getDataWay="getDataWay"
+                :pagination="pagination" index>
+                <el-table-column label="操作" slot="cgInfos" align="center">
+                    <template v-slot="scope">
+                        <i v-if="
                             (roleCode === '0' || roleCode === '1') &&
                             (activeName === '2' || activeName === '3')
-                        "
-                        @click="shareRow(scope.row)"
-                        class="el-icon-share elIcon"
-                        title="分享"
-                    ></i>
-                    <i
-                        @click="editRow(scope.row)"
-                        class="el-icon-edit-outline elIcon"
-                        title="编辑"
-                    ></i>
-                    <i
-                        v-if="activeName === '2' || activeName === '3'"
-                        @click="delOne(scope.row)"
-                        class="el-icon-delete elIcon"
-                        title="删除"
-                    ></i>
-                </template>
-            </el-table-column>
-        </tableList>
+                        " @click="shareRow(scope.row)" class="el-icon-share elIcon" title="分享"></i>
+                        <i @click="editRow(scope.row)" class="el-icon-edit-outline elIcon" title="编辑"></i>
+                        <i v-if="((roleCode === '0' || roleCode === '1') && activeName === '1') || (activeName === '2' || activeName === '3')"
+                            @click="delOne(scope.row)" class="el-icon-delete elIcon" title="删除"></i>
+                    </template>
+                </el-table-column>
+            </tableList>
+        </div>
+
+        <router-view
+            v-show="$route.path.includes('gitAlgorithms') || $route.path.includes('exportAlgorithms')"></router-view>
     </div>
 </template>
 
@@ -162,6 +120,7 @@ export default {
             },
         };
     },
+
     computed: {
         ...mapState(["roleCode"]),
         getDataWay() {
@@ -191,14 +150,31 @@ export default {
             }
         },
     },
+
+    watch: {
+        $route(to, from) {
+            if (to.name === "algorithmsLibraryList") {
+                this.$nextTick(() => {
+                    this.doSearch(true);
+                });
+            }
+        },
+    },
+
     created() {
         if (this.$route.query.activeName) {
             this.activeName = this.$route.query.activeName;
         }
         this.$route.query.activeName = "2";
     },
+
     methods: {
-        doSearch() {
+        pageControl(data) {
+            this.activeName = data.name;
+            this.doSearch(false);
+        },
+        // isBack为解决从详情回退时列表在当前页刷新
+        doSearch(isBack = false) {
             if (this.activeName === "2") {
                 // 私有导入
                 this.searchParams.uploadMode = "1";
@@ -209,8 +185,16 @@ export default {
                 // 公有
                 this.searchParams.uploadMode = "";
             }
+
+            let pageMap = {
+                ...this.searchParams,
+                resetPageNum: !isBack ? false : (this.pagination.currentPage || 1),
+            };
+
+            if (!isBack) this.pagination.currentPage = 1;
+
             this.$nextTick(() => {
-                this.refreshList(this.searchParams);
+                this.refreshList(pageMap);
             });
         },
         //刷新table
@@ -229,10 +213,6 @@ export default {
             };
             this.doSearch();
         },
-        pageControl(data) {
-            this.activeName = data.name;
-            this.doSearch();
-        },
         addOne() {
             if (this.activeName === "2") {
                 // 私有导入
@@ -251,6 +231,9 @@ export default {
         editRow(row) {
             if (row.uploadMode === "1") {
                 // 私有导入
+                this.$store.commit("getTabname", "exportAlgorithmsTabName", row.algorithmName);
+                localStorage.setItem("exportAlgorithmsTabName", row.algorithmName);
+
                 this.$router.push({
                     path: "/exportAlgorithms",
                     query: {
@@ -261,6 +244,9 @@ export default {
                 });
             } else {
                 // 私有仓库
+                this.$store.commit("getTabname", "gitAlgorithmsTabName", row.algorithmName);
+                localStorage.setItem("gitAlgorithmsTabName", row.algorithmName);
+
                 this.$router.push({
                     path: "/gitAlgorithms",
                     query: {
@@ -290,7 +276,7 @@ export default {
                         } else {
                             this.$message.error(
                                 res.message ||
-                                    "校验该算法是否已经绑定自动化测试失败"
+                                "校验该算法是否已经绑定自动化测试失败"
                             );
                             return false;
                         }
@@ -349,6 +335,7 @@ export default {
             });
         },
     },
+
     async mounted() {
         await this.$dicsListsInit({
             validationStatusList: "validationStatus",
@@ -370,10 +357,7 @@ export default {
 }
 
 .myTabsBox {
-    /deep/
-        .el-tabs--top.el-tabs--card
-        > .el-tabs__header
-        .el-tabs__item:nth-child(2) {
+    /deep/ .el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2) {
         border-left-color: @gray;
 
         &.is-active {

+ 7 - 2
src/views/modelLibrary/components/modelList.vue

@@ -32,6 +32,9 @@
                     >
                         {{ item[showName] }}
                     </span>
+                    <i v-if="(roleCode === '0' || roleCode === '1')" 
+                        class="el-icon-delete" @click="delOne(item.id)">
+                    </i>
                 </li>
             </ul>
             <div class="title">私有</div>
@@ -54,7 +57,7 @@
 </template>
 
 <script>
-//import  from '';
+import { mapState } from "vuex";
 
 export default {
     name: "modelList", // 模型列表
@@ -88,6 +91,8 @@ export default {
         },
     },
 
+    computed: { ...mapState(["roleCode"])},
+
     methods: {
         getList() {
             if (!this.getListApi) return;
@@ -204,7 +209,7 @@ export default {
             overflow-y: auto;
         }
 
-        .listPri li {
+        .listPub li, .listPri li {
             display: flex;
             justify-content: space-between;
             width: 100%;

+ 14 - 2
src/views/modelLibrary/components/modelTypeList.vue

@@ -45,6 +45,11 @@
                             >
                                 {{ item[showName] }}
                             </span>
+                            <i
+                                v-if="(roleCode === '0' || roleCode === '1')"
+                                class="el-icon-delete"
+                                @click="delOne(item.id)"
+                            ></i>
                         </li>
                     </ul>
                 </div>
@@ -71,6 +76,11 @@
                             >
                                 {{ item[showName] }}
                             </span>
+                            <i
+                                v-if="(roleCode === '0' || roleCode === '1')"
+                                class="el-icon-delete"
+                                @click="delOne(item.id)"
+                            ></i>
                         </li>
                     </ul>
                 </div>
@@ -143,7 +153,7 @@
 </template>
 
 <script>
-//import  from '';
+import { mapState } from "vuex";
 
 export default {
     name: "modelTypeList", // 模型列表-带分类
@@ -183,6 +193,8 @@ export default {
         },
     },
 
+    computed: { ...mapState(["roleCode"])},
+
     methods: {
         getList() {
             if (!this.getListApi) return;
@@ -369,7 +381,7 @@ export default {
             overflow-y: auto;
         }
 
-        .listPri li {
+        .listPub li, .listPri li {
             i {
                 font-size: 16px;
                 color: @themeColor;

+ 1 - 0
src/views/modelLibrary/components/threeSensorModel.vue

@@ -305,6 +305,7 @@ export default {
                 transparent: true,
                 opacity: 0.3,
                 lightMapIntensity: 0.1,
+                side: THREE.DoubleSide,
             });
 
             let tixing = new ConvexGeometry(points);

+ 1 - 0
src/views/modelLibrary/components/threeVehicleConfiguration.vue

@@ -665,6 +665,7 @@ export default {
                 transparent: true,
                 opacity: 0.3,
                 lightMapIntensity: 0.1,
+                side: THREE.DoubleSide,
             });
 
             let tixing = new ConvexGeometry(points);

+ 55 - 11
src/views/modelLibrary/vehicleConfigurationDetail.vue

@@ -28,8 +28,28 @@
                     </el-form-item>
                 </el-col>
                 <el-col :span="6">
-                    <el-form-item label="车辆名称:" prop="vehicleId">
-                        <el-select
+                    <el-form-item label="车辆名称:" prop="vehicleArrayS">
+                        <el-cascader
+                            ref="cascader"
+                            v-model="form.vehicleArrayS"
+                            :options="vehicleNameList"
+                            :props="props"
+                            @change="vehicleChange"
+                        ></el-cascader>
+                        <!-- <el-select v-model="form.vehicleId" placeholder="请选择" @change="vehicleChange">
+                            <el-option-group
+                                v-for="group in vehicleNameList"
+                                :key="group.label"
+                                :label="group.label">
+                                <el-option
+                                    v-for="item in group.options"
+                                    :key="item.id"
+                                    :label="item.vehicleName"
+                                    :value="item.id">
+                                </el-option>
+                            </el-option-group>
+                        </el-select> -->
+                        <!-- <el-select
                             v-model="form.vehicleId"
                             @change="vehicleChange"
                         >
@@ -39,7 +59,7 @@
                                 :value="item.id"
                                 :key="item.id"
                             ></el-option>
-                        </el-select>
+                        </el-select> -->
                     </el-form-item>
                 </el-col>
                 <el-col :span="6">
@@ -359,9 +379,10 @@ export default {
                 configName: "", // 配置名称
                 configDescription: "", // 配置描述
                 vehicleName: "", // 车辆名称
-                vehicleId: "", // 车辆名称
+                vehicleId: "", // 车辆id
                 vehicleDescription: "", // 车辆描述
                 share: "",
+                vehicleArrayS: [], // 车辆名称显示用array
             },
             formA: {
                 sensorX: "", // 传感器横向偏移量(x轴)
@@ -379,7 +400,7 @@ export default {
                 configDescription: [
                     { required: true, message: "请输入", trigger: "blur" },
                 ],
-                vehicleId: [
+                vehicleArrayS: [
                     {
                         required: true,
                         message: "请选择",
@@ -470,6 +491,11 @@ export default {
                     { required: false, message: "请输入", trigger: "blur" },
                 ],
             },
+            props: {
+                multiple: false,
+                label: "name",
+                value: "code",
+            },
             // 传感器对象集合
             configList: {
                 camera: [],
@@ -560,7 +586,7 @@ export default {
         async getMyVehicleList() {
             await this.$axios({
                 method: "post",
-                url: this.$api.modelLibrary.getMyVehicleList,
+                url: this.$api.modelLibrary.getMyVehicleListNew1,
                 data: {},
             }).then((res) => {
                 if (res.code == 200 && res.info) {
@@ -584,16 +610,28 @@ export default {
             let src = `${url}?objectName=${addr}&access_token=${token}`;
             return src;
         },
-        vehicleChange(id) {
-            let item = this.vehicleNameList.find((i) => i.id == id);
+        vehicleChange(v) {
+            // console.log(v);
+            // console.log(this.$refs.cascader.getCheckedNodes(true)[0].data);
+            // this.form.vehicleArrayS = v;
+
+            let item = this.$refs.cascader.getCheckedNodes(true)[0].data.vo;
+
+            this.form.vehicleId = item.id;
+            this.form.vehicleName = item.vehicleName;
             this.form.vehicleDescription = item.description;
+            this.carModel = this.getImgUrl(item.vehicleFrontView);
+
+            // let arr = [...this.vehicleNameList[0].options, ...this.vehicleNameList[1].options];
+            // let item = arr.find((i) => i.id == id);
+            // this.form.vehicleDescription = item.description;
             // console.log(item);
 
             // if (this.form.vehicleType[1]) {
             //     this.carModel = this.form.vehicleType[1];
             // }
             // this.modelImgSrc = this.getImgUrl(item.vehicleTopView);
-            this.carModel = this.getImgUrl(item.vehicleFrontView);
+            // this.carModel = this.getImgUrl(item.vehicleFrontView);
             // this.$refs.canvasSensor.drawBg();
         },
         // 验证各传感器数组的每一项表单数据是否齐全
@@ -913,11 +951,17 @@ export default {
     padding-right: 20px;
 
     .el-input,
-    .el-select {
+    .el-select,
+    .el-cascader {
         width: 100%;
     }
 
-    .el-select /deep/ .el-input {
+    .el-cascader {
+        height: 32px;
+        line-height: 32px;
+    }
+
+    .el-select /deep/ .el-input, .el-cascader /deep/ .el-input {
         width: 100%;
     }
 }

+ 116 - 175
src/views/modelLibrary/vehicleConfigurationList.vue

@@ -1,172 +1,94 @@
 <template>
     <div>
-        <search-layout :needBox="true">
-            <template slot="searchItem1">
-                <span class="label">配置ID</span>
-                <el-input
-                    v-model="searchParams.configCode"
-                    size="small"
-                    clearable
-                    placeholder="请输入"
-                    maxlength="60"
-                    @keyup.enter.native="doSearch"
-                >
-                </el-input>
-            </template>
-            <template slot="searchItem2">
-                <span class="label">配置名称</span>
-                <el-input
-                    v-model="searchParams.configName"
-                    size="small"
-                    clearable
-                    placeholder="请输入"
-                    maxlength="60"
-                    @keyup.enter.native="doSearch"
-                >
-                </el-input>
-            </template>
-            <template slot="searchItem3">
-                <span class="label">配置描述</span>
-                <el-input
-                    v-model="searchParams.configDescription"
-                    size="small"
-                    clearable
-                    placeholder="请输入"
-                    maxlength="200"
-                    @keyup.enter.native="doSearch"
-                >
-                </el-input>
-            </template>
-            <template slot="searchItem4">
-                <span class="label">车辆名称</span>
-                <el-input
-                    v-model="searchParams.vehicleName"
-                    size="small"
-                    clearable
-                    placeholder="请输入"
-                    maxlength="60"
-                    @keyup.enter.native="doSearch"
-                >
-                </el-input>
-            </template>
-            <template slot="searchItem5">
-                <span class="label">车辆描述</span>
-                <el-input
-                    v-model="searchParams.vehicleDescription"
-                    size="small"
-                    clearable
-                    placeholder="请输入"
-                    maxlength="200"
-                    @keyup.enter.native="doSearch"
-                >
-                </el-input>
-            </template>
+        <div v-show="!$route.path.includes('vehicleConfigurationDetail')">
+            <search-layout :needBox="true">
+                <template slot="searchItem1">
+                    <span class="label">配置ID</span>
+                    <el-input v-model="searchParams.configCode" size="small" clearable placeholder="请输入" maxlength="60"
+                        @keyup.enter.native="doSearch(false)">
+                    </el-input>
+                </template>
+                <template slot="searchItem2">
+                    <span class="label">配置名称</span>
+                    <el-input v-model="searchParams.configName" size="small" clearable placeholder="请输入" maxlength="60"
+                        @keyup.enter.native="doSearch(false)">
+                    </el-input>
+                </template>
+                <template slot="searchItem3">
+                    <span class="label">配置描述</span>
+                    <el-input v-model="searchParams.configDescription" size="small" clearable placeholder="请输入"
+                        maxlength="200" @keyup.enter.native="doSearch(false)">
+                    </el-input>
+                </template>
+                <template slot="searchItem4">
+                    <span class="label">车辆名称</span>
+                    <el-input v-model="searchParams.vehicleName" size="small" clearable placeholder="请输入" maxlength="60"
+                        @keyup.enter.native="doSearch(false)">
+                    </el-input>
+                </template>
+                <template slot="searchItem5">
+                    <span class="label">车辆描述</span>
+                    <el-input v-model="searchParams.vehicleDescription" size="small" clearable placeholder="请输入"
+                        maxlength="200" @keyup.enter.native="doSearch(false)">
+                    </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>
-        </search-layout>
+                <template slot="searchBtn1">
+                    <el-button type="primary" @click="doSearch(false)">查询</el-button>
+                </template>
+                <template slot="searchBtn2">
+                    <el-button type="primary" @click="doReset">重置</el-button>
+                </template>
+            </search-layout>
 
-        <div class="myTabsBox">
-            <el-tabs v-model="activeName" type="card" @tab-click="pageControl">
-                <el-tab-pane label="公有" name="1"></el-tab-pane>
-                <el-tab-pane label="私有" name="2"></el-tab-pane>
-            </el-tabs>
-            <el-button
-                v-bind:class="{ addBtn: true, disabled: activeName === '1' }"
-                icon="el-icon-circle-plus-outline"
-                @click="addOne"
-                type="primary"
-                :disabled="activeName === '1'"
-                >新增</el-button
-            >
-        </div>
+            <div class="myTabsBox">
+                <el-tabs v-model="activeName" type="card" @tab-click="pageControl">
+                    <el-tab-pane label="公有" name="1"></el-tab-pane>
+                    <el-tab-pane label="私有" name="2"></el-tab-pane>
+                </el-tabs>
+                <el-button v-show="activeName === '2'" class="addBtn" icon="el-icon-circle-plus-outline" @click="addOne"
+                    type="primary">新增</el-button>
+                <!-- <el-button
+                            v-bind:class="{ addBtn: true, disabled: activeName === '1' }"
+                            icon="el-icon-circle-plus-outline"
+                            @click="addOne"
+                            type="primary"
+                            :disabled="activeName === '1'"
+                            >新增</el-button
+                        > -->
+            </div>
 
-        <tableList
-            ref="table"
-            class="myTable"
-            style="margin: 0 30px"
-            :columns="columns"
-            :getDataWay="getDataWay"
-            :pagination="pagination"
-            index
-        >
-            <el-table-column
-                label="传感器配置"
-                slot="sensorCount"
-                align="center"
-            >
-                <template v-slot="scope">
-                    <i
-                        class="sensorIcon sensorIconA"
-                        v-show="scope.row.sensorCount.camera"
-                        title="摄像头"
-                    ></i
-                    ><span
-                        class="sensorCount"
-                        v-show="scope.row.sensorCount.camera"
-                        >{{ scope.row.sensorCount.camera }}</span
-                    >
-                    <i
-                        class="sensorIcon sensorIconB"
-                        v-show="scope.row.sensorCount.ogt"
-                        title="完美传感器"
-                    ></i
-                    ><span
-                        class="sensorCount"
-                        v-show="scope.row.sensorCount.ogt"
-                        >{{ scope.row.sensorCount.ogt }}</span
-                    >
-                    <i
-                        class="sensorIcon sensorIconC"
-                        v-show="scope.row.sensorCount.lidar"
-                        title="激光雷达"
-                    ></i
-                    ><span
-                        class="sensorCount"
-                        v-show="scope.row.sensorCount.lidar"
-                        >{{ scope.row.sensorCount.lidar }}</span
-                    >
-                    <i
-                        class="sensorIcon sensorIconE"
-                        v-show="scope.row.sensorCount.gps"
-                        title="GPS"
-                    ></i
-                    ><span
-                        class="sensorCount"
-                        v-show="scope.row.sensorCount.gps"
-                        >{{ scope.row.sensorCount.gps }}</span
-                    >
-                </template>
-            </el-table-column>
-            <el-table-column label="操作" slot="cgInfos" align="center">
-                <template v-slot="scope">
-                    <i
-                        v-if="
+            <tableList ref="table" class="myTable" style="margin: 0 30px" :columns="columns" :getDataWay="getDataWay"
+                :pagination="pagination" index>
+                <el-table-column label="传感器配置" slot="sensorCount" align="center">
+                    <template v-slot="scope">
+                        <i class="sensorIcon sensorIconA" v-show="scope.row.sensorCount.camera" title="摄像头"></i><span
+                            class="sensorCount" v-show="scope.row.sensorCount.camera">{{ scope.row.sensorCount.camera
+                            }}</span>
+                        <i class="sensorIcon sensorIconB" v-show="scope.row.sensorCount.ogt" title="完美传感器"></i><span
+                            class="sensorCount" v-show="scope.row.sensorCount.ogt">{{ scope.row.sensorCount.ogt }}</span>
+                        <i class="sensorIcon sensorIconC" v-show="scope.row.sensorCount.lidar" title="激光雷达"></i><span
+                            class="sensorCount" v-show="scope.row.sensorCount.lidar">{{ scope.row.sensorCount.lidar
+                            }}</span>
+                        <i class="sensorIcon sensorIconE" v-show="scope.row.sensorCount.gps" title="GPS"></i><span
+                            class="sensorCount" v-show="scope.row.sensorCount.gps">{{ scope.row.sensorCount.gps }}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="操作" slot="cgInfos" align="center">
+                    <template v-slot="scope">
+                        <i v-if="
                             (roleCode === '0' || roleCode === '1') &&
                             activeName === '2'
-                        "
-                        @click="shareRow(scope.row)"
-                        class="el-icon-share elIcon"
-                        title="分享"
-                    ></i>
-                    <i
-                        @click="editRow(scope.row)"
-                        class="el-icon-edit-outline elIcon"
-                        title="编辑"
-                    ></i>
-                    <i
-                        v-if="activeName === '2'"
-                        @click="delOne(scope.row)"
-                        class="el-icon-delete elIcon"
-                        title="删除"
-                    ></i>
-                </template>
-            </el-table-column>
-        </tableList>
+                        " @click="shareRow(scope.row)" class="el-icon-share elIcon" title="分享"></i>
+                        <i @click="editRow(scope.row)" class="el-icon-edit-outline elIcon" title="编辑"></i>
+                        <i v-if="((roleCode === '0' || roleCode === '1') && activeName === '1') || activeName === '2'"
+                            @click="delOne(scope.row)" class="el-icon-delete elIcon" title="删除"></i>
+                    </template>
+                </el-table-column>
+            </tableList>
+        </div>
+
+        <router-view v-show="$route.path.includes('vehicleConfigurationDetail')"></router-view>
     </div>
 </template>
 
@@ -243,17 +165,34 @@ export default {
             },
         };
     },
+
     computed: { ...mapState(["roleCode"]) },
+
+    watch: {
+        $route(to, from) {
+            if (to.name === "vehicleConfigurationList") {
+                this.$nextTick(() => {
+                    this.doSearch(true);
+                });
+            }
+        },
+    },
+
     methods: {
         pageControl(data) {
             this.activeName = data.name;
-            this.doSearch();
+            this.doSearch(false);
         },
-        doSearch() {
+        // isBack为解决从详情回退时列表在当前页刷新
+        doSearch(isBack = false) {
             let pageMap = {
                 ...this.searchParams,
                 share: this.activeName === "1" ? "1" : "0",
+                resetPageNum: !isBack ? false : (this.pagination.currentPage || 1),
             };
+
+            if (!isBack) this.pagination.currentPage = 1;
+
             this.refreshList(pageMap);
         },
         //刷新table
@@ -276,6 +215,9 @@ export default {
             this.$router.push({ path: "/vehicleConfigurationDetail" });
         },
         editRow(row) {
+            this.$store.commit("getTabname", "vehicleConfigurationDetailTabName", row.configName);
+            localStorage.setItem("vehicleConfigurationDetailTabName", row.configName);
+
             this.$router.push({
                 path: "/vehicleConfigurationDetail",
                 query: {
@@ -329,31 +271,30 @@ export default {
             });
         },
     },
-    created() {},
+    created() { },
 };
 </script>
 
 <style scoped lang="less">
 .myTable {
     .sensorIconA {
-        background: url("../../assets/common/image/sensor/001.png") center
-            no-repeat;
+        background: url("../../assets/common/image/sensor/001.png") center no-repeat;
     }
+
     .sensorIconB {
-        background: url("../../assets/common/image/sensor/002.png") center
-            no-repeat;
+        background: url("../../assets/common/image/sensor/002.png") center no-repeat;
     }
+
     .sensorIconC {
-        background: url("../../assets/common/image/sensor/003.png") center
-            no-repeat;
+        background: url("../../assets/common/image/sensor/003.png") center no-repeat;
     }
+
     .sensorIconD {
-        background: url("../../assets/common/image/sensor/004.png") center
-            no-repeat;
+        background: url("../../assets/common/image/sensor/004.png") center no-repeat;
     }
+
     .sensorIconE {
-        background: url("../../assets/common/image/sensor/005.png") center
-            no-repeat;
+        background: url("../../assets/common/image/sensor/005.png") center no-repeat;
     }
 
     .sensorIcon {

+ 6 - 1
src/views/modelLibrary/vehicleModel.vue

@@ -161,7 +161,7 @@ import Carsim from "./components/vehicleModelCarsim.vue";
 import upload from "./components/uploadPar.vue";
 
 export default {
-    name: "vehicleModel", // 车辆模型
+    name: "vehicleModel", // 车辆模型-动力学配置
     components: { modelList, threeShow, vtd, Carsim, upload },
     data() {
         // 校验非负且最多4位小数
@@ -852,6 +852,11 @@ export default {
         }
     }
 
+    .el-cascader {
+        height: 32px;
+        line-height: 32px;
+    }
+
     .titlePanel {
         padding: 22px 0;
     }

+ 43 - 23
src/views/page/breadCrumb.vue

@@ -3,27 +3,17 @@
         <div class="contentClass">
             <el-breadcrumb separator="/">
                 <transition-group name="breadcrumb">
-                    <el-breadcrumb-item
-                        v-for="(item, index) in list"
-                        :key="item.path + item.name"
-                    >
-                        <router-link
-                            v-if="!disabledRoutes.includes(item.name)"
-                            @click="console.log(item)"
-                            :to="
-                                item.name !== $route.name
+                    <el-breadcrumb-item v-for="(item, index) in list" :key="item.path + item.name">
+                        <router-link v-if="!disabledRoutes.includes(item.name)" @click="console.log(item)" :to="
+                            item.name !== $route.name
+                                ? item.fullPath
                                     ? item.fullPath
-                                        ? item.fullPath
-                                        : item.path
+                                    : item.path
                                         ? item.path
                                         : '/'
-                                    : $route.fullPath
-                            "
-                        >
-                            <i
-                                class="el-icon-folder-opened"
-                                v-if="index > 0 && index === list.length - 1"
-                            ></i>
+                                : $route.fullPath
+                        ">
+                            <i class="el-icon-folder-opened" v-if="index > 0 && index === list.length - 1"></i>
                             {{ item.meta.tabname }}
                         </router-link>
                         <span v-else style="line-height: 20px">{{
@@ -38,9 +28,7 @@
             <div>{{ $store.state.username }}</div>
             <div class="el-icon-switch-button exit" @click="exit"></div>
         </div>
-        <!-- <div class="avatarBox">
-            <img :src="imgSrc" width="100%" height="100%" />
-        </div> -->
+        <!-- <div class="avatarBox"><img :src="imgSrc" width="100%" height="100%" /></div> -->
     </div>
 </template>
 
@@ -76,11 +64,15 @@ export default {
                         path: "/login",
                     });
                 })
-                .catch(() => {});
+                .catch(() => { });
         },
     },
     computed: {
-        ...mapState(["projectInfoTabname", "taskInfoTabname"]),
+        ...mapState([
+            "projectInfoTabname", "taskInfoTabname", "vehicleConfigurationDetailTabName",
+            "exportAlgorithmsTabName", "gitAlgorithmsTabName", "gradingRuleDetailTabName",
+            "scenePacketListTabName",
+        ]),
         list() {
             // console.log(this.$route);
             let isMainPage = false;
@@ -100,6 +92,33 @@ export default {
                         "任务详情";
                 }
 
+                if (item.name === "vehicleConfigurationDetail") {
+                    item.meta.tabname =
+                        this.vehicleConfigurationDetailTabName ||
+                        localStorage.getItem("vehicleConfigurationDetailTabName") ||
+                        "车辆配置详情";
+                } else if (item.name === "exportAlgorithms") {
+                    item.meta.tabname =
+                        this.exportAlgorithmsTabName ||
+                        localStorage.getItem("exportAlgorithmsTabName") ||
+                        "导入算法";
+                } else if (item.name === "gitAlgorithms") {
+                    item.meta.tabname =
+                        this.gitAlgorithmsTabName ||
+                        localStorage.getItem("gitAlgorithmsTabName") ||
+                        "仓库算法";
+                } else if (item.name === "gradingRuleDetail") {
+                    item.meta.tabname =
+                        this.gradingRuleDetailTabName ||
+                        localStorage.getItem("gradingRuleDetailTabName") ||
+                        "评分规则详情";
+                } else if (item.name === "scenePacketList") {
+                    item.meta.tabname =
+                        this.scenePacketListTabName ||
+                        localStorage.getItem("scenePacketListTabName") ||
+                        "场景测试包";
+                }
+
                 if (item.name === this.$route.name) {
                     item.fullPath = this.$route.fullPath;
                 }
@@ -198,6 +217,7 @@ export default {
             color: @themeColor;
         }
     }
+
     /* .avatarBox {
         position: absolute;
         top: 4px;

+ 22 - 5
src/views/page/pageMenu.vue

@@ -177,7 +177,7 @@
                             </el-menu-item>
                         </el-submenu>
                         <el-menu-item
-                            index="personalInformation"
+                            index="/personalInformation"
                             class="indexMenu"
                         >
                             <i class="el-icon-user-solid"></i>
@@ -208,7 +208,7 @@ export default {
             menuFold: false, // menu是否折叠
             opened: false,
             menus: [
-                "mainPage",
+                "/mainPage",
                 "modelLibrary",
                 "algorithmsLibrary",
                 "sceneLibrary",
@@ -216,7 +216,7 @@ export default {
                 "systemManagement",
                 "personalInformation",
             ],
-            activeMenu: "mainPage", // 当前menu
+            activeMenu: "", // 当前menu
             expiresTime: "",
             toExpiresTime: "",
             tokenTimer: undefined,
@@ -244,10 +244,21 @@ export default {
                 }
             }
         }
+
+        this.$nextTick(()=>{
+            this.activeHighline()
+        })
     },
     watch: {
-        activeMenu(newV) {
-            console.log(newV);
+        // activeMenu(newV) {
+        //     console.log(newV);
+        // },
+        menuItems(newV) {
+            if(newV.length > 0) {
+                this.$nextTick(()=>{
+                    this.activeHighline()
+                })
+            }
         },
     },
     methods: {
@@ -322,6 +333,12 @@ export default {
                 }
             });
         },
+        activeHighline() {
+            // console.log(this.$route);
+            // console.log(this.$route.path.split('/'));
+            let name = `/${this.$route.path.split('/')[1]}`
+            if(name != this.activeMenu) this.activeMenu = name;
+        }
     },
 };
 </script>

+ 28 - 4
src/views/sceneLibrary/components/generalizationDetail.vue

@@ -147,6 +147,13 @@
                         >
                         </el-input>
 
+                        <!-- <el-input
+                            v-else
+                            v-model="form.egoStartX"
+                            disabled
+                        >
+                        </el-input> -->
+
                         <b class="infos" v-else>{{ form.egoStartX }}</b>
                     </el-form-item>
                     <i
@@ -1525,6 +1532,12 @@ export default {
             type: String,
             default: "",
         },
+        ruleNameArrayS: {
+            type: Array,
+            default: function () {
+                return [];
+            },
+        },
         genUrlType: {
             type: Number,
             default: 1,
@@ -1677,6 +1690,7 @@ export default {
                     curId: this.curId,
                     ruleName: this.ruleName,
                     rulesId: this.rulesId,
+                    ruleNameArrayS: this.ruleNameArrayS,
                 };
                 this.$emit("generalizationBegin");
 
@@ -1691,7 +1705,7 @@ export default {
                             /* setTimeout(() => {
                             // 此写法有问题 覆盖?不全部执行? 只执行最后一个
                             // this.$emit("generalizationDone", res.info, obj);
-                        }, 20000); */
+                        }, 60000); */
                             this.$parent.$parent.generalizationDone(
                                 res.info,
                                 obj
@@ -2037,12 +2051,21 @@ export default {
 .generalizationDetailPanel {
     padding-top: 24px;
 
+    .el-row:nth-child(odd) {
+        background-color: #f9f9f9;
+    }
+
     .el-form {
         /deep/ .el-input,
         .el-select {
             width: 100%;
         }
 
+        .el-form-item {
+            margin-top: 11px;
+            margin-bottom: 11px;
+        }
+
         .infos {
             font-weight: normal;
             word-break: break-all;
@@ -2057,7 +2080,8 @@ export default {
         .info {
             display: flex;
             line-height: 32px;
-            margin: 0 12px 22px 0;
+            // margin: 0 12px 22px 0;
+            margin: 11px 12px 11px 0;
             word-break: break-all;
 
             span {
@@ -2085,7 +2109,7 @@ export default {
             .line {
                 display: block;
                 width: 10px;
-                margin: 16px 6px 0;
+                margin: 27px 6px 0;
                 border-top: 1px solid #606266;
             }
 
@@ -2117,7 +2141,7 @@ export default {
         }
 
         .obsInfo {
-            line-height: 32px;
+            line-height: 54px;
             padding: 0 6px;
             word-break: break-all;
         }

+ 2 - 5
src/views/sceneLibrary/components/upload.vue

@@ -166,13 +166,10 @@ export default {
                     .then((res) => {
                         if (res.code == 200) {
                             // this.attachmentList.push({
-                            //     // attachmentName: file.file.name,
-                            //     // attachmentAddress: res.params,
+                            //     attachmentName: file.file.name,
+                            //     attachmentAddress: res.params,
                             //     md5: defaultParam.md5 || "",
-                            //     // uid: file.file.uid,
                             //     fileType: file.file.type,
-                            //     // fileName: res.info.fileName,
-                            //     // videoPreview: res.info.videoPreview,
                             // });
                             // resolve("成功");
                             // this.$emit("attachmentChange", this.attachmentList);

+ 1 - 1
src/views/sceneLibrary/gradingRule.vue → src/views/sceneLibrary/gradingRuleDetail.vue

@@ -67,7 +67,7 @@
 import editor from "./components/editor";
 
 export default {
-    name: "gradingRule", // 评分规则
+    name: "gradingRuleDetail", // 评分规则
     components: { editor },
     data() {
         return {

+ 109 - 144
src/views/sceneLibrary/gradingRulesList.vue

@@ -1,144 +1,90 @@
 <template>
     <div>
-        <search-layout :needBox="true">
-            <!-- <template slot="searchItem1">
-                <span class="label">规则ID</span>
-                <el-input
-                    v-model="searchParams.rulesCode"
-                    size="small"
-                    clearable
-                    placeholder="请输入"
-                    maxlength="60"
-                    @keyup.enter.native="doSearch"
-                >
-                </el-input>
-            </template> -->
-            <template slot="searchItem1">
-                <span class="label">规则名称</span>
-                <el-input
-                    v-model="searchParams.ruleName"
-                    size="small"
-                    clearable
-                    placeholder="请输入"
-                    maxlength="50"
-                    @keyup.enter.native="doSearch"
-                >
-                </el-input>
-            </template>
-            <template slot="searchItem2">
-                <span class="label">规则描述</span>
-                <el-input
-                    v-model="searchParams.ruleDescription"
-                    size="small"
-                    clearable
-                    placeholder="请输入"
-                    maxlength="300"
-                    @keyup.enter.native="doSearch"
-                >
-                </el-input>
-            </template>
-            <template slot="searchItem3">
-                <span class="label">创建时间</span>
-                <!-- <el-date-picker
-                    v-model="searchDate"
-                    type="daterange"
-                    format="yyyy-MM-dd"
-                    value-format="yyyy-MM-dd"
-                    range-separator="至"
-                    start-placeholder="开始日期"
-                    end-placeholder="结束日期"
-                >
-                </el-date-picker> -->
-                <el-date-picker
-                    v-model="searchParams.yearMin"
-                    type="date"
-                    format="yyyy-MM-dd"
-                    value-format="yyyy-MM-dd"
-                    placeholder="开始日期"
-                    class="dateRangeInput"
-                >
-                </el-date-picker>
-                <span class="dateSeparator">至</span>
-                <el-date-picker
-                    v-model="searchParams.yearMax"
-                    type="date"
-                    format="yyyy-MM-dd"
-                    value-format="yyyy-MM-dd"
-                    placeholder="结束日期"
-                    class="dateRangeInput"
-                >
-                </el-date-picker>
-            </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>
-        </search-layout>
+        <div v-show="!$route.path.includes('gradingRuleDetail')">
+            <search-layout :needBox="true">
+                <!-- <template slot="searchItem1">
+                            <span class="label">规则ID</span>
+                            <el-input
+                                v-model="searchParams.rulesCode"
+                                size="small"
+                                clearable
+                                placeholder="请输入"
+                                maxlength="60"
+                                @keyup.enter.native="doSearch"
+                            >
+                            </el-input>
+                        </template> -->
+                <template slot="searchItem1">
+                    <span class="label">规则名称</span>
+                    <el-input v-model="searchParams.ruleName" size="small" clearable placeholder="请输入" maxlength="50"
+                        @keyup.enter.native="doSearch(false)">
+                    </el-input>
+                </template>
+                <template slot="searchItem2">
+                    <span class="label">规则描述</span>
+                    <el-input v-model="searchParams.ruleDescription" size="small" clearable placeholder="请输入"
+                        maxlength="300" @keyup.enter.native="doSearch(false)">
+                    </el-input>
+                </template>
+                <template slot="searchItem3">
+                    <span class="label">创建时间</span>
+                    <!-- <el-date-picker
+                        v-model="searchDate"
+                        type="daterange"
+                        format="yyyy-MM-dd"
+                        value-format="yyyy-MM-dd"
+                        range-separator="至"
+                        start-placeholder="开始日期"
+                        end-placeholder="结束日期"
+                    >
+                    </el-date-picker> -->
+                    <el-date-picker v-model="searchParams.yearMin" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
+                        placeholder="开始日期" class="dateRangeInput">
+                    </el-date-picker>
+                    <span class="dateSeparator">至</span>
+                    <el-date-picker v-model="searchParams.yearMax" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
+                        placeholder="结束日期" class="dateRangeInput">
+                    </el-date-picker>
+                </template>
+                <template slot="searchBtn1">
+                    <el-button type="primary" @click="doSearch(false)">查询</el-button>
+                </template>
+                <template slot="searchBtn2">
+                    <el-button type="primary" @click="doReset">重置</el-button>
+                </template>
+            </search-layout>
 
-        <div class="myTabsBox">
-            <el-tabs v-model="activeName" type="card" @tab-click="pageControl">
-                <el-tab-pane label="公有" name="1"></el-tab-pane>
-                <el-tab-pane label="私有" name="2"></el-tab-pane>
-            </el-tabs>
-            <el-button
-                v-bind:class="{ addBtn: true, disabled: activeName === '1' }"
-                icon="el-icon-circle-plus-outline"
-                @click="addOne"
-                type="primary"
-                :disabled="activeName === '1'"
-                >新增</el-button
-            >
-        </div>
+            <div class="myTabsBox">
+                <el-tabs v-model="activeName" type="card" @tab-click="pageControl">
+                    <el-tab-pane label="公有" name="1"></el-tab-pane>
+                    <el-tab-pane label="私有" name="2"></el-tab-pane>
+                </el-tabs>
+                <el-button v-show="activeName === '2'" class="addBtn" icon="el-icon-circle-plus-outline" @click="addOne"
+                    type="primary">新增</el-button>
+            </div>
 
-        <tableList
-            ref="table"
-            style="margin: 0 30px"
-            :columns="columns"
-            :getDataWay="getDataWay"
-            :pagination="pagination"
-            index
-        >
-            <el-table-column
-                label="规则描述"
-                slot="ruleDescription"
-                align="center"
-            >
-                <template v-slot="scope">
-                    <span>{{ scope.row.ruleDescription }}</span>
-                </template>
-            </el-table-column>
-            <el-table-column
-                label="操作"
-                slot="cgInfos"
-                align="center"
-                width="180"
-            >
-                <template v-slot="scope">
-                    <i
-                        v-if="
+            <tableList ref="table" style="margin: 0 30px" :columns="columns" :getDataWay="getDataWay"
+                :pagination="pagination" index>
+                <el-table-column label="规则描述" slot="ruleDescription" align="center">
+                    <template v-slot="scope">
+                        <span>{{ scope.row.ruleDescription }}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="操作" slot="cgInfos" align="center" width="180">
+                    <template v-slot="scope">
+                        <i v-if="
                             (roleCode === '0' || roleCode === '1') &&
                             activeName === '2'
-                        "
-                        @click="shareRow(scope.row)"
-                        class="el-icon-share elIcon"
-                        title="分享"
-                    ></i>
-                    <i
-                        @click="editRow(scope.row)"
-                        class="el-icon-edit-outline elIcon"
-                        title="编辑"
-                    ></i>
-                    <i
-                        v-if="activeName === '2'"
-                        @click="delRow(scope.row)"
-                        class="el-icon-delete elIcon"
-                        title="删除"
-                    ></i>
-                </template>
-            </el-table-column>
-        </tableList>
+                        " @click="shareRow(scope.row)" class="el-icon-share elIcon" title="分享"></i>
+                        <i @click="editRow(scope.row)" class="el-icon-edit-outline elIcon" title="编辑"></i>
+                        <i v-if="((roleCode === '0' || roleCode === '1') && activeName === '1') || activeName === '2'"
+                            @click="delRow(scope.row)" class="el-icon-delete elIcon" title="删除"></i>
+                    </template>
+                </el-table-column>
+            </tableList>
+        </div>
+
+        <router-view v-show="$route.path.includes('gradingRuleDetail')"></router-view>
     </div>
 </template>
 
@@ -210,9 +156,26 @@ export default {
             dialogVisible: false,
         };
     },
+
     computed: { ...mapState(["roleCode"]) },
+
+    watch: {
+        $route(to, from) {
+            if (to.name === "gradingRulesList") {
+                this.$nextTick(() => {
+                    this.doSearch(true);
+                });
+            }
+        },
+    },
+
     methods: {
-        doSearch() {
+        pageControl(data) {
+            this.activeName = data.name;
+            this.doSearch(false);
+        },
+        // isBack为解决从详情回退时列表在当前页刷新
+        doSearch(isBack = false) {
             // if (this.searchDate) {
             //     this.searchParams.yearMin = `${this.searchDate[0]} 00:00:00`;
             //     this.searchParams.yearMax = `${this.searchDate[1]} 23:59:59`;
@@ -243,7 +206,11 @@ export default {
                 yearMin,
                 yearMax,
                 share: this.activeName === "1" ? "1" : "0",
+                resetPageNum: !isBack ? false : (this.pagination.currentPage || 1),
             };
+
+            if (!isBack) this.pagination.currentPage = 1;
+
             this.refreshList(pageMap);
         },
         //刷新table
@@ -266,12 +233,8 @@ export default {
         viewRow(row) {
             this.dialogVisible = true;
         },
-        pageControl(data) {
-            this.activeName = data.name;
-            this.doSearch();
-        },
         addOne() {
-            this.$router.push({ path: "/gradingRule" });
+            this.$router.push({ path: "/gradingRuleDetail" });
         },
         shareRow(row) {
             this.$confirm("确认是否分享?", "提示", {
@@ -318,8 +281,11 @@ export default {
             });
         },
         editRow(row) {
+            this.$store.commit("getTabname", "gradingRuleDetailTabName", row.ruleName);
+            localStorage.setItem("gradingRuleDetailTabName", row.ruleName);
+
             this.$router.push({
-                path: "/gradingRule",
+                path: "/gradingRuleDetail",
                 // params: {
                 //     rulesId: row.rulesId,
                 //     share: row.share,
@@ -336,5 +302,4 @@ export default {
 };
 </script>
 
-<style lang='less' scoped>
-</style>
+<style lang='less' scoped></style>

+ 96 - 126
src/views/sceneLibrary/scenarioTestPackageManagementList.vue

@@ -1,130 +1,80 @@
 <template>
     <div>
-        <search-layout :needBox="true">
-            <template slot="searchItem1">
-                <span class="label">测试包ID</span>
-                <el-input
-                    v-model="searchParams.packageCode"
-                    size="small"
-                    clearable
-                    maxlength="60"
-                    placeholder="请输入"
-                    @keyup.enter.native="doSearch"
-                >
-                </el-input>
-            </template>
-            <template slot="searchItem2">
-                <span class="label">测试包名称</span>
-                <el-input
-                    v-model="searchParams.packageName"
-                    size="small"
-                    clearable
-                    maxlength="60"
-                    placeholder="请输入"
-                    @keyup.enter.native="doSearch"
-                >
-                </el-input>
-            </template>
-            <template slot="searchItem3">
-                <span class="label">创建时间</span>
-                <!-- <el-date-picker
-                    v-model="searchDate"
-                    type="daterange"
-                    format="yyyy-MM-dd"
-                    value-format="yyyy-MM-dd"
-                    range-separator="至"
-                    start-placeholder="开始日期"
-                    end-placeholder="结束日期"
-                >
-                </el-date-picker> -->
-                <el-date-picker
-                    v-model="searchParams.yearMin"
-                    type="date"
-                    format="yyyy-MM-dd"
-                    value-format="yyyy-MM-dd"
-                    placeholder="开始日期"
-                    class="dateRangeInput"
-                >
-                </el-date-picker>
-                <span class="dateSeparator">至</span>
-                <el-date-picker
-                    v-model="searchParams.yearMax"
-                    type="date"
-                    format="yyyy-MM-dd"
-                    value-format="yyyy-MM-dd"
-                    placeholder="结束日期"
-                    class="dateRangeInput"
-                >
-                </el-date-picker>
-            </template>
+        <div v-show="!$route.path.includes('scenePacketList')">
+            <search-layout :needBox="true">
+                <template slot="searchItem1">
+                    <span class="label">测试包ID</span>
+                    <el-input v-model="searchParams.packageCode" size="small" clearable maxlength="60" placeholder="请输入"
+                        @keyup.enter.native="doSearch(false)">
+                    </el-input>
+                </template>
+                <template slot="searchItem2">
+                    <span class="label">测试包名称</span>
+                    <el-input v-model="searchParams.packageName" size="small" clearable maxlength="60" placeholder="请输入"
+                        @keyup.enter.native="doSearch(false)">
+                    </el-input>
+                </template>
+                <template slot="searchItem3">
+                    <span class="label">创建时间</span>
+                    <!-- <el-date-picker
+                        v-model="searchDate"
+                        type="daterange"
+                        format="yyyy-MM-dd"
+                        value-format="yyyy-MM-dd"
+                        range-separator="至"
+                        start-placeholder="开始日期"
+                        end-placeholder="结束日期"
+                    >
+                    </el-date-picker> -->
+                    <el-date-picker v-model="searchParams.yearMin" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
+                        placeholder="开始日期" class="dateRangeInput">
+                    </el-date-picker>
+                    <span class="dateSeparator">至</span>
+                    <el-date-picker v-model="searchParams.yearMax" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
+                        placeholder="结束日期" class="dateRangeInput">
+                    </el-date-picker>
+                </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>
-        </search-layout>
+                <template slot="searchBtn1">
+                    <el-button type="primary" @click="doSearch(false)">查询</el-button>
+                </template>
+                <template slot="searchBtn2">
+                    <el-button type="primary" @click="doReset">重置</el-button>
+                </template>
+            </search-layout>
 
-        <div class="myTabsBox">
-            <el-tabs v-model="activeName" type="card" @tab-click="pageControl">
-                <el-tab-pane label="公有" name="1"></el-tab-pane>
-                <el-tab-pane label="私有" name="2"></el-tab-pane>
-            </el-tabs>
-            <el-button
-                v-bind:class="{ addBtn: true, disabled: activeName === '1' }"
-                icon="el-icon-circle-plus-outline"
-                @click="addConfig"
-                type="primary"
-                :disabled="activeName === '1'"
-                >新增</el-button
-            >
-        </div>
+            <div class="myTabsBox">
+                <el-tabs v-model="activeName" type="card" @tab-click="pageControl">
+                    <el-tab-pane label="公有" name="1"></el-tab-pane>
+                    <el-tab-pane label="私有" name="2"></el-tab-pane>
+                </el-tabs>
+                <el-button v-show="activeName === '2'" class="addBtn" icon="el-icon-circle-plus-outline" @click="addConfig"
+                    type="primary">新增</el-button>
+            </div>
 
-        <tableList
-            ref="table"
-            style="margin: 0 30px"
-            :columns="columns"
-            :getDataWay="getDataWay"
-            :row-class-name="errRow"
-            :pagination="pagination"
-            index
-        >
-            <el-table-column
-                label="使用状态"
-                slot="isUnavailable"
-                align="center"
-            >
-                <template v-slot="scope">
-                    <span v-if="scope.row.isUnavailable === '0'">未禁用</span>
-                    <span v-else>已禁用</span>
-                </template>
-            </el-table-column>
-            <el-table-column label="操作" slot="cgInfos" align="center">
-                <template v-slot="scope">
-                    <i
-                        v-if="
+            <tableList ref="table" style="margin: 0 30px" :columns="columns" :getDataWay="getDataWay"
+                :row-class-name="errRow" :pagination="pagination" index>
+                <el-table-column label="使用状态" slot="isUnavailable" align="center">
+                    <template v-slot="scope">
+                        <span v-if="scope.row.isUnavailable === '0'">未禁用</span>
+                        <span v-else>已禁用</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="操作" slot="cgInfos" align="center">
+                    <template v-slot="scope">
+                        <i v-if="
                             (roleCode === '0' || roleCode === '1') &&
                             activeName === '2'
-                        "
-                        @click="shareRow(scope.row)"
-                        class="el-icon-share elIcon"
-                        title="分享"
-                    ></i>
-                    <i
-                        @click="editRow(scope.row)"
-                        class="el-icon-edit-outline elIcon"
-                        title="编辑"
-                    ></i>
-                    <i
-                        v-if="activeName === '2'"
-                        @click="delRow(scope.row)"
-                        class="el-icon-delete elIcon"
-                        title="删除"
-                    ></i>
-                </template>
-            </el-table-column>
-        </tableList>
+                        " @click="shareRow(scope.row)" class="el-icon-share elIcon" title="分享"></i>
+                        <i @click="editRow(scope.row)" class="el-icon-edit-outline elIcon" title="编辑"></i>
+                        <i v-if="((roleCode === '0' || roleCode === '1') && activeName === '1') || activeName === '2'"
+                            @click="delRow(scope.row)" class="el-icon-delete elIcon" title="删除"></i>
+                    </template>
+                </el-table-column>
+            </tableList>
+        </div>
+
+        <router-view v-show="$route.path.includes('scenePacketList')"></router-view>
     </div>
 </template>
 
@@ -208,9 +158,26 @@ export default {
             createdPackageCount: 0, // 已创建的场景包数量
         };
     },
+
     computed: { ...mapState(["roleCode"]) },
+
+    watch: {
+        $route(to, from) {
+            if (to.name === "scenarioTestPackageManagementList") {
+                this.$nextTick(() => {
+                    this.doSearch(true);
+                });
+            }
+        },
+    },
+
     methods: {
-        doSearch() {
+        pageControl(data) {
+            this.activeName = data.name;
+            this.doSearch(false);
+        },
+        // isBack为解决从详情回退时列表在当前页刷新
+        doSearch(isBack = false) {
             let yearMin = "";
             if (this.searchParams.yearMin) {
                 yearMin = `${this.searchParams.yearMin} 00:00:00`;
@@ -232,7 +199,11 @@ export default {
                 yearMin,
                 yearMax,
                 share: this.activeName === "1" ? "1" : "0",
+                resetPageNum: !isBack ? false : (this.pagination.currentPage || 1),
             };
+
+            if (!isBack) this.pagination.currentPage = 1;
+
             this.refreshList(pageMap);
         },
         //刷新table
@@ -251,10 +222,6 @@ export default {
             // this.searchDate = "";
             this.doSearch();
         },
-        pageControl(data) {
-            this.activeName = data.name;
-            this.doSearch();
-        },
         async addConfig() {
             if (this.roleCode != "0" && this.roleCode != "1") {
                 await this.getCount();
@@ -312,6 +279,9 @@ export default {
             });
         },
         editRow(row) {
+            this.$store.commit("getTabname", "scenePacketListTabName", row.packageName);
+            localStorage.setItem("scenePacketListTabName", row.packageName);
+
             this.$router.push({
                 path: "/scenePacketList",
                 query: { packageId: row.packageId, share: row.share },
@@ -337,7 +307,7 @@ export default {
             }
         },
     },
-    mounted() {},
+    mounted() { },
 };
 </script>
 

+ 83 - 23
src/views/sceneLibrary/scenePacketList.vue

@@ -159,15 +159,22 @@
                         ></el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item label="评分规则:" prop="rulesId">
-                    <el-select v-model="formA.rulesId" @change="ruleSelChange">
+                <el-form-item label="评分规则:" prop="ruleNameArrayS">
+                    <el-cascader
+                        ref="cascader"
+                        v-model="formA.ruleNameArrayS"
+                        :options="ruleList"
+                        :props="props"
+                        @change="ruleSelChange"
+                    ></el-cascader>
+                    <!-- <el-select v-model="formA.rulesId" @change="ruleSelChange">
                         <el-option
                             v-for="item in ruleList"
                             :label="item.ruleName"
                             :value="item.rulesId"
                             :key="item.rulesId"
                         ></el-option>
-                    </el-select>
+                    </el-select> -->
                 </el-form-item>
             </el-form>
             <div class="tips">
@@ -202,7 +209,7 @@
         <el-dialog
             v-if="generalizationVisible"
             :visible.sync="generalizationVisible"
-            title="泛化场景"
+            :title="generalizationDiaTitle"
             width="90%"
             class="generalizationDia"
             :close-on-click-modal="false"
@@ -234,6 +241,7 @@
                     :exampleId="curNode.exampleId"
                     :ruleName="formA.ruleName"
                     :rulesId="formA.rulesId"
+                    :ruleNameArrayS="formA.ruleNameArrayS"
                     :genUrlType="genUrlType"
                     @generalizationBegin="generalizationBegin"
                     @generalizationDone="generalizationDone"
@@ -394,6 +402,7 @@ export default {
                         remarks: "",
                         rootId: null,
                         ruleName: "",
+                        ruleNameArrayS: [],
                         sceneGeneralizationIds: null,
                         sceneNaturalIds: "",
                         sceneNum: 0,
@@ -440,13 +449,14 @@ export default {
             formA: {
                 sceneType: "1",
                 ruleName: "",
+                ruleNameArrayS: [],
                 rulesId: "",
             },
             rulesA: {
                 sceneType: [
                     { required: true, message: "请选择", trigger: "change" },
                 ],
-                rulesId: [
+                ruleNameArrayS: [
                     { required: true, message: "请选择", trigger: "change" },
                 ],
             },
@@ -454,6 +464,11 @@ export default {
                 { caption: "真实场景", code: "1" },
                 { caption: "泛化场景", code: "2" },
             ],
+            props: {
+                multiple: false,
+                label: "name",
+                value: "code",
+            },
             nodeList: [], // 把当前所有节点遍历到一个扁平数组
             curNode: {}, // 当前操作的节点
             editType: "", // 点操作编辑的类型 新增or编辑
@@ -466,6 +481,7 @@ export default {
             weightErrIds: [], // 存储weightErr为false的节点id的数组
             generalizationVisible: false, // 泛化dialog
             stepActive: 1, // 泛化步骤
+            generalizationSceneId: "", // 泛化编号
             generalizationId: "", // 泛化详情id
             genUrlType: 1, // 1为从列表跳入的模板信息,2为泛化后的详情
             maxSceneCount: 0, // 可创建的最大场景数量
@@ -473,7 +489,16 @@ export default {
         };
     },
 
-    computed: { ...mapState(["roleCode"]) },
+    computed: { 
+        ...mapState(["roleCode"]),
+        generalizationDiaTitle() {
+            if(this.stepActive != 2) {
+                return "泛化场景"
+            } else {
+                return "泛化场景 " + this.generalizationSceneId
+            }
+        }
+    },
 
     methods: {
         viewTree() {
@@ -582,10 +607,12 @@ export default {
 
             if (row.packageAndRules) {
                 this.formA.rulesId = row.packageAndRules;
-                this.formA.ruleName =
-                    this.originRuleList.find(
-                        (i) => i.rulesId === row.packageAndRules
-                    ).ruleName || "";
+                this.formA.ruleName = row.ruleName;
+                this.formA.ruleNameArrayS = row.ruleNameArrayS;
+                // this.formA.ruleName =
+                //     this.originRuleList.find(
+                //         (i) => i.rulesId === row.packageAndRules
+                //     ).ruleName || "";
             }
 
             this.scenarioVisible = true;
@@ -617,6 +644,7 @@ export default {
                             remarks: this.form.remarks || "",
                             rootId: this.packageId,
                             ruleName: "",
+                            ruleNameArrayS: [],
                             sceneGeneralizationIds: null,
                             sceneNaturalIds: "",
                             sceneNum: 0,
@@ -716,6 +744,7 @@ export default {
             this.$refs.formA.resetFields();
             this.formA.sceneType = "1";
             this.formA.ruleName = "";
+            this.formA.ruleNameArrayS = [];
             this.formA.rulesId = "";
             this.scenarioVisible = false;
             this.curNode = {};
@@ -729,6 +758,7 @@ export default {
 
             this.curNode.packageAndRules = this.formA.rulesId;
             this.curNode.ruleName = this.formA.ruleName;
+            this.curNode.ruleNameArrayS = this.formA.ruleNameArrayS;
 
             this.curNode.sceneNum =
                 this.checkedIdsA.length +
@@ -739,9 +769,11 @@ export default {
             if (this.curNode.sceneNum === 0) {
                 this.curNode.packageAndRules = "";
                 this.curNode.ruleName = "";
+                this.curNode.ruleNameArrayS = [];
             } else {
                 this.curNode.packageAndRules = this.formA.rulesId;
                 this.curNode.ruleName = this.formA.ruleName;
+                this.curNode.ruleNameArrayS = this.formA.ruleNameArrayS;
             }
 
             // 选中数据分别传入对应的ids组
@@ -810,6 +842,7 @@ export default {
             }
 
             this.generalizationId = arr[0].id;
+            this.generalizationSceneId = arr[0].sceneId;
             this.genUrlType = 1;
             this.stepActive = 2;
         },
@@ -821,6 +854,7 @@ export default {
         generalizationCancel() {
             this.$refs.formA.resetFields();
             this.formA.ruleName = "";
+            this.formA.ruleNameArrayS = [];
             this.formA.rulesId = "";
             this.generalizationVisible = false;
         },
@@ -847,6 +881,7 @@ export default {
 
                     node.packageAndRules = obj.rulesId;
                     node.ruleName = obj.ruleName;
+                    node.ruleNameArrayS = obj.ruleNameArrayS;
                 } else {
                     // 若泛化失败则清空对应字段
                     node.exampleId = "";
@@ -856,6 +891,7 @@ export default {
 
                     node.packageAndRules = "";
                     node.ruleName = "";
+                    node.ruleNameArrayS = [];
                 }
 
                 // 清空真实场景的数据
@@ -1008,30 +1044,36 @@ export default {
         async getRuleList() {
             await this.$axios({
                 method: "post",
-                url: this.$api.sceneLibrary.queryCsb,
+                url: this.$api.sceneLibrary.queryCsbNew,
                 data: {},
             }).then((res) => {
                 if (res.code == 200 && res.info) {
                     this.originRuleList = res.info;
 
-                    let arr = [];
-                    res.info.forEach((i, index) => {
-                        arr[index] = Object.assign({}, i);
-                    });
+                    // let arr = [];
+                    // res.info.forEach((i, index) => {
+                    //     arr[index] = Object.assign({}, i);
+                    // });
 
-                    arr.forEach((i) => {
-                        if (i.share === "1") i.ruleName = i.ruleName + "(公有)";
-                    });
-                    this.ruleList = arr;
+                    // arr.forEach((i) => {
+                    //     if (i.share === "1") i.ruleName = i.ruleName + "(公有)";
+                    // });
+                    // this.ruleList = arr;
+                    this.ruleList = res.info;
                 } else {
                     this.$message.error(res.message || "获取评分规则列表失败");
                 }
             });
         },
-        ruleSelChange(val) {
-            this.formA.ruleName = this.originRuleList.find(
-                (i) => i.rulesId === val
-            ).ruleName;
+        ruleSelChange(v) {
+            let item = this.$refs.cascader.getCheckedNodes(true)[0].data.vo;
+
+            this.formA.ruleName = item.ruleName;
+            this.formA.rulesId = item.rulesId;
+
+            // this.formA.ruleName = this.originRuleList.find(
+            //     (i) => i.rulesId === val
+            // ).ruleName;
         },
         // 场景数量更新
         sceneNumUpdate(curNode) {
@@ -1131,6 +1173,24 @@ export default {
         }
     }
 
+    .el-form {
+
+        .el-input,
+        .el-select,
+        .el-cascader {
+            width: 100%;
+        }
+
+        .el-cascader {
+            height: 32px;
+            line-height: 32px;
+        }
+
+        .el-select /deep/ .el-input, .el-cascader /deep/ .el-input {
+            width: 100%;
+        }
+    }
+
     .btns {
         padding: 30px 0;
         text-align: center;

+ 76 - 33
src/views/workManagement/autoRunProjectDetail.vue

@@ -42,8 +42,15 @@
                         >算法平台</el-radio
                     >
                 </el-form-item> -->
-                <el-form-item label="选择算法:" prop="algorithm">
-                    <el-select v-model="form.algorithm">
+                <el-form-item label="选择算法:" prop="algorithmArrayS">
+                    <el-cascader
+                        ref="cascaderA"
+                        v-model="form.algorithmArrayS"
+                        :options="algorithmList"
+                        :props="props"
+                        @change="algorithmSelChange"
+                    ></el-cascader>
+                    <!-- <el-select v-model="form.algorithm">
                         <el-option
                             v-for="item in algorithmList"
                             :label="item.name"
@@ -51,10 +58,17 @@
                             :key="item.id"
                             :title="item.description"
                         ></el-option>
-                    </el-select>
+                    </el-select> -->
                 </el-form-item>
-                <el-form-item label="选择车辆:" prop="vehicle">
-                    <el-select
+                <el-form-item label="选择车辆:" prop="vehicleArrayS">
+                    <el-cascader
+                        ref="cascaderB"
+                        v-model="form.vehicleArrayS"
+                        :options="vehicleList"
+                        :props="props"
+                        @change="vehicleSelChange"
+                    ></el-cascader>
+                    <!-- <el-select
                         v-model="form.vehicle"
                         @change="vehicleSelChange"
                     >
@@ -65,17 +79,24 @@
                             :key="item.id"
                             :title="item.description"
                         ></el-option>
-                    </el-select>
+                    </el-select> -->
                 </el-form-item>
-                <el-form-item label="选择场景:" prop="scene">
-                    <el-select v-model="form.scene" @change="sceneSelChange">
+                <el-form-item label="选择场景:" prop="sceneArrayS">
+                    <el-cascader
+                        ref="cascaderC"
+                        v-model="form.sceneArrayS"
+                        :options="sceneList"
+                        :props="props"
+                        @change="sceneSelChange"
+                    ></el-cascader>
+                    <!-- <el-select v-model="form.scene" @change="sceneSelChange">
                         <el-option
                             v-for="item in sceneList"
                             :label="item.name"
                             :value="item.id"
                             :key="item.id"
                         ></el-option>
-                    </el-select>
+                    </el-select> -->
                 </el-form-item>
                 <el-form-item label="并行度:" prop="parallelism">
                     <el-input
@@ -175,17 +196,17 @@
 let maxCount = 0; // 用于校验
 let validateNum = (rule, value, callback) => {
     !/^(\d+)$/.test(value) && callback(new Error(rule.message));
-    if (value <= 0 || value > maxCount) callback(new Error(rule.message));
+    if (+value <= 0 || +value > +maxCount) callback(new Error(rule.message));
     callback();
 };
 let validateNumA = (rule, value, callback) => {
     !/^(\d+)$/.test(value) && callback(new Error(rule.message));
-    if (value < 5 || value > 60) callback(new Error(rule.message));
+    if (+value < 5 || +value > 60) callback(new Error(rule.message));
     callback();
 };
 let validateNumB = (rule, value, callback) => {
     !/^(\d+)$/.test(value) && callback(new Error(rule.message));
-    if (value <= 0) callback(new Error(rule.message));
+    if (+value <= 0) callback(new Error(rule.message));
     callback();
 };
 
@@ -200,8 +221,11 @@ export default {
                 projectDescribe: "", // 项目描述
                 algorithmType: "2", // 算法来源
                 algorithm: "", // 选择算法
+                algorithmArrayS: "", // 选择算法
                 vehicle: "", // 选择车辆
+                vehicleArrayS: "", // 选择车辆
                 scene: "", // 选择场景
+                sceneArrayS: "", // 选择场景
                 parallelism: "", // 并行度
                 maxSimulationTime: "", // 最大仿真时间
                 isChoiceGpu: "0", // 是否选择GPU
@@ -223,13 +247,13 @@ export default {
                 // algorithmType: [
                 //     { required: true, message: "请选择", trigger: "change" },
                 // ],
-                algorithm: [
+                algorithmArrayS: [
                     { required: true, message: "请选择", trigger: "change" },
                 ],
-                vehicle: [
+                vehicleArrayS: [
                     { required: true, message: "请选择", trigger: "change" },
                 ],
-                scene: [
+                sceneArrayS: [
                     { required: true, message: "请选择", trigger: "change" },
                 ],
                 parallelism: [
@@ -253,6 +277,11 @@ export default {
             sensors: [], // 选中车辆后对应的传感器数组
             activeNames: [""],
             runDisabled: false, // 若最多可用资源为0,则不可点击"提交"
+            props: {
+                multiple: false,
+                label: "name",
+                value: "code",
+            },
         };
     },
 
@@ -262,7 +291,7 @@ export default {
         async getLists(dropDownType = "") {
             await this.$axios({
                 method: "post",
-                url: this.$api.workManagement.selectDropDownByType,
+                url: this.$api.workManagement.selectDropDownByTypeNew,
                 data: {
                     dropDownType,
                     algorithmType: this.form.algorithmType,
@@ -271,29 +300,31 @@ export default {
                 if (res.code == 200 && res.info) {
                     res.info.forEach((item) => {
                         if (item.type === "1") {
-                            item.dropDownList.forEach((i) => {
-                                if (i.share === "1") i.name = i.name + "(公有)";
-                            });
+                            // item.dropDownList.forEach((i) => {
+                            //     if (i.share === "1") i.name = i.name + "(公有)";
+                            // });
 
                             this.algorithmList = item.dropDownList;
                         } else if (item.type === "2") {
-                            item.dropDownList.forEach((i) => {
-                                if (i.share === "1") i.name = i.name + "(公有)";
-                            });
+                            // item.dropDownList.forEach((i) => {
+                            //     if (i.share === "1") i.name = i.name + "(公有)";
+                            // });
 
                             this.vehicleList = item.dropDownList;
                         } else if (item.type === "3") {
-                            item.dropDownList.forEach((i) => {
-                                if (i.share === "1") i.name = i.name + "(公有)";
-                            });
+                            // item.dropDownList.forEach((i) => {
+                            //     if (i.share === "1") i.name = i.name + "(公有)";
+                            // });
 
                             this.sceneList = item.dropDownList;
                         }
                         // 空表示第一次进,有值表示在切换算法来源,需要清空选择算法的值
                         if (dropDownType) {
                             this.form.algorithm = "";
+                            this.form.algorithmArrayS = [];
                             this.$nextTick(() => {
-                                this.$refs.form.clearValidate("algorithm");
+                                // this.$refs.form.clearValidate("algorithm");
+                                this.$refs.form.clearValidate("algorithmArrayS");
                             });
                         }
                     });
@@ -336,20 +367,26 @@ export default {
                 }
             });
         },
-        sceneSelChange(item) {
-            this.sceneCount = this.sceneList.find(
-                (i) => i.id === item
-            ).sceneNum;
+        algorithmSelChange(v) {
+            let item = this.$refs.cascaderA.getCheckedNodes(true)[0].data.vo;
+            this.form.algorithm = item.id;
         },
-        vehicleSelChange(item) {
-            let sensor = this.vehicleList.find((i) => i.id === item).sensor;
+        vehicleSelChange(v) {
+            let item = this.$refs.cascaderB.getCheckedNodes(true)[0].data.vo;
+            this.form.vehicle = item.id;
 
+            let sensor = item.sensor;
             if (!sensor) {
                 this.sensors = [];
             } else {
                 this.sensors = sensor.split(",");
             }
         },
+        sceneSelChange(v) {
+            let item = this.$refs.cascaderC.getCheckedNodes(true)[0].data.vo;
+            this.form.scene = item.id;
+            this.sceneCount = item.sceneNum
+        },
         save(isAdd = false, needChange = false) {
             // isAdd是否强制新增,needChange是否需要改变状态
             this.$refs.form.validate((valid) => {
@@ -450,9 +487,15 @@ export default {
         flex: 1;
 
         /deep/ .el-input,
-        .el-select {
+        .el-select,
+        .el-cascader {
             width: 100%;
         }
+
+        .el-cascader {
+            height: 32px;
+            line-height: 32px;
+        }
     }
 
     .el-textarea {

+ 3 - 3
src/views/workManagement/autoRunProjectList.vue

@@ -116,7 +116,7 @@
                 <el-table-column label="操作" slot="cgInfos" align="center">
                     <template v-slot="scope">
                         <i
-                            @click="viewRow(scope.row.id)"
+                            @click="viewRow(scope.row)"
                             class="el-icon-view elIcon"
                             title="查看"
                         ></i>
@@ -405,10 +405,10 @@ export default {
             this.delRow(arr.join(","));
         },
 
-        viewRow(id) {
+        viewRow(row) {
             this.$router.push({
                 path: "/autoRunProjectList/autoRunSubProjectList",
-                query: { id },
+                query: { id: row.id, algorithm: row.algorithm },
             });
         },
     },

+ 1 - 1
src/views/workManagement/autoRunSubProjectList.vue

@@ -303,7 +303,7 @@ export default {
             } else if (this.downType.length === 1) {
                 if (this.downType[0] === "工作报告") {
                     url = this.$api.workManagement.exportProjectReportById;
-                    fileName += ".pdf";
+                    fileName = `${this.$route.query.algorithm || ""}测试报告.pdf`;
                 } else {
                     url = this.$api.workManagement.exportProjectTaskFileById;
                     fileName += ".zip";

+ 3 - 2
src/views/workManagement/components/threeProjectInfo.vue

@@ -208,8 +208,8 @@ export default {
          * @param {*} canMove 如果用于单独展示则可拖拽,用于全部预览则不可拖拽
          */
         initContent(position, rotation, type, index, canMove) {
-            console.log(this.configList);
-            console.log(this.allSensor);
+            // console.log(this.configList);
+            // console.log(this.allSensor);
             let sensorId = this.configList[type][index].sensorId;
             let coordinate = this.allSensor[type].find(
                 (i) => i.id === sensorId
@@ -386,6 +386,7 @@ export default {
                 transparent: true,
                 opacity: 0.3,
                 lightMapIntensity: 0.1,
+                side: THREE.DoubleSide,
             });
 
             let tixing = new ConvexGeometry(points);

+ 1 - 1
src/views/workManagement/evaluationReport.vue

@@ -167,7 +167,7 @@ export default {
                     prop: "levelC",
                 },
                 {
-                    label: "0<总分≤70",
+                    label: "0总分≤70",
                     prop: "levelD",
                 },
             ],

+ 90 - 33
src/views/workManagement/manualRunProjectDetail.vue

@@ -42,8 +42,15 @@
                         >算法平台</el-radio
                     >
                 </el-form-item>
-                <el-form-item label="选择算法:" prop="algorithm">
-                    <el-select v-model="form.algorithm">
+                <el-form-item label="选择算法:" prop="algorithmArrayS">
+                    <el-cascader
+                        ref="cascaderA"
+                        v-model="form.algorithmArrayS"
+                        :options="algorithmList"
+                        :props="props"
+                        @change="algorithmSelChange"
+                    ></el-cascader>
+                    <!-- <el-select v-model="form.algorithm">
                         <el-option
                             v-for="item in algorithmList"
                             :label="item.name"
@@ -51,10 +58,17 @@
                             :key="item.id"
                             :title="item.description"
                         ></el-option>
-                    </el-select>
+                    </el-select> -->
                 </el-form-item>
-                <el-form-item label="选择车辆:" prop="vehicle">
-                    <el-select
+                <el-form-item label="选择车辆:" prop="vehicleArrayS">
+                    <el-cascader
+                        ref="cascaderB"
+                        v-model="form.vehicleArrayS"
+                        :options="vehicleList"
+                        :props="props"
+                        @change="vehicleSelChange"
+                    ></el-cascader>
+                    <!-- <el-select
                         v-model="form.vehicle"
                         @change="vehicleSelChange"
                     >
@@ -65,17 +79,24 @@
                             :key="item.id"
                             :title="item.description"
                         ></el-option>
-                    </el-select>
+                    </el-select> -->
                 </el-form-item>
-                <el-form-item label="选择场景:" prop="scene">
-                    <el-select v-model="form.scene" @change="sceneSelChange">
+                <el-form-item label="选择场景:" prop="sceneArrayS">
+                    <el-cascader
+                        ref="cascaderC"
+                        v-model="form.sceneArrayS"
+                        :options="sceneList"
+                        :props="props"
+                        @change="sceneSelChange"
+                    ></el-cascader>
+                    <!-- <el-select v-model="form.scene" @change="sceneSelChange">
                         <el-option
                             v-for="item in sceneList"
                             :label="item.name"
                             :value="item.id"
                             :key="item.id"
                         ></el-option>
-                    </el-select>
+                    </el-select> -->
                 </el-form-item>
                 <el-form-item label="并行度:" prop="parallelism">
                     <el-input
@@ -151,17 +172,17 @@
 let maxCount = 0; // 用于校验
 let validateNum = (rule, value, callback) => {
     !/^(\d+)$/.test(value) && callback(new Error(rule.message));
-    if (value <= 0 || value > maxCount) callback(new Error(rule.message));
+    if (+value <= 0 || +value > +maxCount) callback(new Error(rule.message));
     callback();
 };
 let validateNumA = (rule, value, callback) => {
     !/^(\d+)$/.test(value) && callback(new Error(rule.message));
-    if (value < 5 || value > 60) callback(new Error(rule.message));
+    if (+value < 5 || +value > 60) callback(new Error(rule.message));
     callback();
 };
 let validateNumB = (rule, value, callback) => {
     !/^(\d+)$/.test(value) && callback(new Error(rule.message));
-    if (value <= 0) callback(new Error(rule.message));
+    if (+value <= 0) callback(new Error(rule.message));
     callback();
 };
 
@@ -176,8 +197,11 @@ export default {
                 projectDescribe: "", // 项目描述
                 algorithmType: "1", // 算法来源
                 algorithm: "", // 选择算法
+                algorithmArrayS: "", // 选择算法
                 vehicle: "", // 选择车辆
+                vehicleArrayS: "", // 选择车辆
                 scene: "", // 选择场景
+                sceneArrayS: "", // 选择场景
                 parallelism: "", // 并行度
                 maxSimulationTime: "", // 最大仿真时间
                 isChoiceGpu: "0", // 是否选择GPU
@@ -198,13 +222,13 @@ export default {
                 algorithmType: [
                     { required: true, message: "请选择", trigger: "change" },
                 ],
-                algorithm: [
+                algorithmArrayS: [
                     { required: true, message: "请选择", trigger: "change" },
                 ],
-                vehicle: [
+                vehicleArrayS: [
                     { required: true, message: "请选择", trigger: "change" },
                 ],
-                scene: [
+                sceneArrayS: [
                     { required: true, message: "请选择", trigger: "change" },
                 ],
                 parallelism: [
@@ -229,6 +253,11 @@ export default {
             },
             sensors: [], // 选中车辆后对应的传感器数组
             runDisabled: false, // 若最多可用资源为0,则不可点击"提交"
+            props: {
+                multiple: false,
+                label: "name",
+                value: "code",
+            },
         };
     },
 
@@ -238,7 +267,7 @@ export default {
         async getLists(dropDownType = "") {
             await this.$axios({
                 method: "post",
-                url: this.$api.workManagement.selectDropDownByType,
+                url: this.$api.workManagement.selectDropDownByTypeNew,
                 data: {
                     dropDownType,
                     algorithmType: this.form.algorithmType,
@@ -247,29 +276,31 @@ export default {
                 if (res.code == 200 && res.info) {
                     res.info.forEach((item) => {
                         if (item.type === "1") {
-                            item.dropDownList.forEach((i) => {
-                                if (i.share === "1") i.name = i.name + "(公有)";
-                            });
+                            // item.dropDownList.forEach((i) => {
+                            //     if (i.share === "1") i.name = i.name + "(公有)";
+                            // });
 
                             this.algorithmList = item.dropDownList;
                         } else if (item.type === "2") {
-                            item.dropDownList.forEach((i) => {
-                                if (i.share === "1") i.name = i.name + "(公有)";
-                            });
+                            // item.dropDownList.forEach((i) => {
+                            //     if (i.share === "1") i.name = i.name + "(公有)";
+                            // });
 
                             this.vehicleList = item.dropDownList;
                         } else if (item.type === "3") {
-                            item.dropDownList.forEach((i) => {
-                                if (i.share === "1") i.name = i.name + "(公有)";
-                            });
+                            // item.dropDownList.forEach((i) => {
+                            //     if (i.share === "1") i.name = i.name + "(公有)";
+                            // });
 
                             this.sceneList = item.dropDownList;
                         }
                         // 空表示第一次进,有值表示在切换算法来源,需要清空选择算法的值
                         if (dropDownType) {
                             this.form.algorithm = "";
+                            this.form.algorithmArrayS = [];
                             this.$nextTick(() => {
-                                this.$refs.form.clearValidate("algorithm");
+                                // this.$refs.form.clearValidate("algorithm");
+                                this.$refs.form.clearValidate("algorithmArrayS");
                             });
                         }
                     });
@@ -311,19 +342,39 @@ export default {
                 }
             });
         },
-        sceneSelChange(item) {
-            this.sceneCount = this.sceneList.find(
-                (i) => i.id === item
-            ).sceneNum;
+        algorithmSelChange(v) {
+            // console.log(v);
+            // console.log(this.$refs.cascaderA.getCheckedNodes(true)[0].data.vo);
+            let item = this.$refs.cascaderA.getCheckedNodes(true)[0].data.vo;
+            this.form.algorithm = item.id;
         },
-        vehicleSelChange(item) {
-            let sensor = this.vehicleList.find((i) => i.id === item).sensor;
+        vehicleSelChange(v) {
+            let item = this.$refs.cascaderB.getCheckedNodes(true)[0].data.vo;
+            this.form.vehicle = item.id;
 
+            let sensor = item.sensor;
             if (!sensor) {
                 this.sensors = [];
             } else {
                 this.sensors = sensor.split(",");
             }
+
+            // let sensor = this.vehicleList.find((i) => i.id === item).sensor;
+
+            // if (!sensor) {
+            //     this.sensors = [];
+            // } else {
+            //     this.sensors = sensor.split(",");
+            // }
+        },
+        sceneSelChange(v) {
+            let item = this.$refs.cascaderC.getCheckedNodes(true)[0].data.vo;
+            this.form.scene = item.id;
+            this.sceneCount = item.sceneNum
+
+            // this.sceneCount = this.sceneList.find(
+            //     (i) => i.id === item
+            // ).sceneNum;
         },
         save(isAdd = false, needChange = false) {
             // isAdd是否强制新增,needChange是否需要改变状态
@@ -423,9 +474,15 @@ export default {
         flex: 1;
 
         /deep/ .el-input,
-        .el-select {
+        .el-select,
+        .el-cascader {
             width: 100%;
         }
+
+        .el-cascader {
+            height: 32px;
+            line-height: 32px;
+        }
     }
 
     .el-textarea {

+ 1 - 1
src/views/workManagement/manualRunProjectList.vue

@@ -583,7 +583,7 @@ export default {
             } else if (this.downType.length === 1) {
                 if (this.downType[0] === "工作报告") {
                     url = this.$api.workManagement.exportProjectReportById;
-                    fileName += ".pdf";
+                    fileName = `${this.curRow.algorithm || ""}测试报告.pdf`;
                 } else {
                     url = this.$api.workManagement.exportProjectTaskFileById;
                     fileName += ".zip";

+ 167 - 88
src/views/workManagement/projectInfo.vue

@@ -1,11 +1,9 @@
 <template>
     <div class="projectInfoPanel">
-        <div
-            v-if="
-                !$route.path.includes('taskInfo') &&
-                !$route.path.includes('evaluationReport')
-            "
-        >
+        <div v-show="
+            !$route.path.includes('taskInfo') &&
+            !$route.path.includes('evaluationReport')
+        ">
             <div class="headPanel panel">
                 <div class="titlePanel">
                     <div class="titlePanelBor">基本信息</div>
@@ -63,11 +61,7 @@
                     <div class="titlePanelBor">测评得分</div>
                 </div>
                 <div class="box">
-                    <tableList
-                        style="margin: 30px 0"
-                        :columns="columnsA"
-                        :getDataWay="getDataWayA"
-                    >
+                    <tableList style="margin: 30px 0" :columns="columnsA" :getDataWay="getDataWayA">
                     </tableList>
                 </div>
             </div>
@@ -91,26 +85,17 @@
                 <div class="box panel">
                     <div class="titlePanel">
                         <div class="titlePanelBor">测试报告</div>
-                        <i
-                            class="el-icon-download download"
-                            v-bind:class="{ cursor: info.nowRunState === '30' }"
-                            @click="downReport"
-                        ></i>
+                        <i class="el-icon-download download" v-bind:class="{ cursor: info.nowRunState === '30' }"
+                            @click="downReport"></i>
                     </div>
                     <div class="boxContent boxContentC">
                         <div class="cbox" @click="toReport">
-                            <img
-                                :src="downImgSrc"
-                                width="100%"
-                                v-bind:class="{
-                                    cursor: info.nowRunState === '30',
-                                }"
-                            />
-                            <div
-                                v-bind:class="{
-                                    cursor: info.nowRunState === '30',
-                                }"
-                            >
+                            <img :src="downImgSrc" width="100%" v-bind:class="{
+                                cursor: info.nowRunState === '30',
+                            }" />
+                            <div v-bind:class="{
+                                cursor: info.nowRunState === '30',
+                            }">
                                 仿真云测试报告
                             </div>
                         </div>
@@ -135,25 +120,73 @@
                     </div>
                     <div class="boxContentB">
                         <div class="list">
-                            <handle-config-list
-                                :showBtns="false"
-                                :curOne="curOne"
-                                :configList="configList"
-                                @curItem="curItem"
-                                :needHighline="false"
-                            ></handle-config-list>
+                            <handle-config-list :showBtns="false" :curOne="curOne" :configList="configList"
+                                @curItem="curItem" :needHighline="true"></handle-config-list>
                         </div>
                         <div class="canvasBox">
-                            <!-- <canvas-sensor
-                                v-if="modelImgSrc"
-                                :modelImgSrc="modelImgSrc"
-                                :configList="configList"
-                            ></canvas-sensor> -->
-                            <three-show
-                                ref="threeShow"
-                                :carModel="carModel"
-                                :allSensor="allSensor"
-                            ></three-show>
+                            <!-- <canvas-sensor v-if="modelImgSrc" :modelImgSrc="modelImgSrc" :configList="configList"></canvas-sensor> -->
+
+                            <three-show ref="threeShow" :carModel="carModel" :allSensor="allSensor"></three-show>
+
+                            <div v-show="configBox" class="conditions">
+                                <el-form ref="formA" :model="formA" :rules="rulesA" label-width="99px" disabled>
+                                    <div class="forms">
+                                        <el-form-item label="X(mm):" prop="sensorX">
+                                            <el-input placeholder="请输入" maxlength="12" v-autoTrim="{
+                                                obj: formA,
+                                                key: 'sensorX',
+                                            }" v-model="formA.sensorX">
+                                            </el-input>
+                                        </el-form-item>
+                                        <el-form-item label="Y(mm):" prop="sensorY">
+                                            <el-input placeholder="请输入" maxlength="12" v-autoTrim="{
+                                                obj: formA,
+                                                key: 'sensorY',
+                                            }" v-model="formA.sensorY">
+                                            </el-input>
+                                        </el-form-item>
+                                        <el-form-item label="Z(mm):" prop="sensorZ">
+                                            <el-input placeholder="请输入" maxlength="12" v-autoTrim="{
+                                                obj: formA,
+                                                key: 'sensorZ',
+                                            }" v-model="formA.sensorZ">
+                                            </el-input>
+                                        </el-form-item>
+                                        <el-form-item label="横摆角(deg):" prop="sensorH">
+                                            <el-input placeholder="请输入" maxlength="12" v-autoTrim="{
+                                                obj: formA,
+                                                key: 'sensorH',
+                                            }" v-model="formA.sensorH">
+                                            </el-input>
+                                        </el-form-item>
+                                        <el-form-item label="俯仰角(deg):" prop="sensorP">
+                                            <el-input placeholder="请输入" maxlength="12" v-autoTrim="{
+                                                obj: formA,
+                                                key: 'sensorP',
+                                            }" v-model="formA.sensorP">
+                                            </el-input>
+                                        </el-form-item>
+                                        <el-form-item label="翻滚角(deg):" prop="sensorR">
+                                            <el-input placeholder="请输入" maxlength="12" v-autoTrim="{
+                                                obj: formA,
+                                                key: 'sensorR',
+                                            }" v-model="formA.sensorR">
+                                            </el-input>
+                                        </el-form-item>
+                                        <el-form-item label="端口" prop="sensorPort" v-show="curOne.name === 'ogt'">
+                                            <el-input placeholder="请输入" maxlength="9" v-autoTrim="{
+                                                obj: formA,
+                                                key: 'sensorPort',
+                                            }" v-model="formA.sensorPort">
+                                            </el-input>
+                                        </el-form-item>
+                                    </div>
+                                </el-form>
+
+                                <div class="btnBox">
+                                    <el-button type="primary" @click="closeConfig" plain size="small">关闭</el-button>
+                                </div>
+                            </div>
                         </div>
                     </div>
                 </div>
@@ -168,44 +201,23 @@
                         <div class="chart">
                             <div class="pieTitle">任务运行状态统计:</div>
                             <div class="pie">
-                                <pie-chart-project-info
-                                    id="projectInfoPieA"
-                                    :stateList="stateList"
-                                    stateName="stateName"
-                                    seriesName="任务运行状态统计"
-                                ></pie-chart-project-info>
+                                <pie-chart-project-info id="projectInfoPieA" :stateList="stateList" stateName="stateName"
+                                    seriesName="任务运行状态统计"></pie-chart-project-info>
                             </div>
                         </div>
                         <div class="chart">
                             <div class="pieTitle">得分统计:</div>
                             <div class="pie">
-                                <pie-chart-project-info
-                                    id="projectInfoPieB"
-                                    :stateList="resultList"
-                                    stateName="resultName"
-                                    seriesName="得分统计"
-                                ></pie-chart-project-info>
+                                <pie-chart-project-info id="projectInfoPieB" :stateList="resultList" stateName="resultName"
+                                    seriesName="得分统计"></pie-chart-project-info>
                             </div>
                         </div>
                     </div>
                     <div>
-                        <tableList
-                            ref="table"
-                            :columns="columns"
-                            :getDataWay="getDataWay"
-                            :pagination="pagination"
-                        >
-                            <el-table-column
-                                label="操作"
-                                slot="cgInfos"
-                                align="center"
-                            >
+                        <tableList ref="table" :columns="columns" :getDataWay="getDataWay" :pagination="pagination">
+                            <el-table-column label="操作" slot="cgInfos" align="center">
                                 <template v-slot="scope">
-                                    <i
-                                        @click="viewRow(scope.row)"
-                                        class="el-icon-view elIcon"
-                                        title="查看"
-                                    ></i>
+                                    <i @click="viewRow(scope.row)" class="el-icon-view elIcon" title="查看"></i>
                                 </template>
                             </el-table-column>
                         </tableList>
@@ -213,7 +225,8 @@
                 </div>
             </div>
         </div>
-        <router-view v-else></router-view>
+        <router-view v-show="$route.path.includes('taskInfo') || $route.path.includes('evaluationReport')"></router-view>
+        <!-- <router-view v-else></router-view> -->
     </div>
 </template>
 
@@ -344,6 +357,17 @@ export default {
             resultList: [],
             // 所有传感器的集合
             allSensor: {},
+            configBox: false, // 配置项box
+            formA: {
+                sensorX: "", // 传感器横向偏移量(x轴)
+                sensorY: "", // 传感器横向偏移量(y轴)
+                sensorZ: "", // 传感器横向偏移量(z轴)
+                sensorH: "", // 横摆角
+                sensorP: "", // 俯仰角
+                sensorR: "", // 横滚角
+                sensorPort: "", // 端口
+            },
+            rulesA: {},
         };
     },
 
@@ -395,7 +419,7 @@ export default {
                 data: { id: this.id, projectType: this.projectType },
             }).then((res) => {
                 let blob = new Blob([res]);
-                let fileName = "测试报告.pdf";
+                let fileName = `${this.info.algorithmName || ""}测试报告.pdf`;
                 if ("download" in document.createElement("a")) {
                     // 非IE下载
                     let emlink = document.createElement("a");
@@ -414,6 +438,23 @@ export default {
         },
         curItem(item) {
             this.curOne = item;
+
+            let formA = this.configList[item.name][item.index];
+
+            this.formA.sensorX = formA.sensorX;
+            this.formA.sensorY = formA.sensorY;
+            this.formA.sensorZ = formA.sensorZ;
+            this.formA.sensorH = formA.sensorH;
+            this.formA.sensorP = formA.sensorP;
+            this.formA.sensorR = formA.sensorR;
+            if (this.curOne.name === "ogt") {
+                this.formA.sensorPort = formA.sensorPort;
+            }
+
+            this.configBox = true;
+        },
+        closeConfig() {
+            this.configBox = false;
         },
         getImgUrl(addr) {
             let url = "";
@@ -459,18 +500,18 @@ export default {
         },
     },
 
-    watch: {
-        $route(to, from) {
-            if (to.name === "projectInfo") {
-                this.$nextTick(() => {
-                    if (this.$refs.threeShow) {
-                        this.$refs.threeShow.initCar(this.carModel);
-                        this.$refs.threeShow.showAll(this.configList);
-                    }
-                });
-            }
-        },
-    },
+    // watch: {
+    //     $route(to, from) {
+    //         if (to.name === "projectInfo") {
+    //             this.$nextTick(() => {
+    //                 if (this.$refs.threeShow) {
+    //                     this.$refs.threeShow.initCar(this.carModel);
+    //                     this.$refs.threeShow.showAll(this.configList);
+    //                 }
+    //             });
+    //         }
+    //     },
+    // },
 
     mounted() {
         this.getAllSensor();
@@ -630,7 +671,7 @@ export default {
                 color: @themeColor;
                 // cursor: pointer;
 
-                > div {
+                >div {
                     margin-top: 18px;
                 }
             }
@@ -667,8 +708,46 @@ export default {
             padding-top: 30px;
 
             .canvasBox {
+                position: relative;
                 flex: 1;
             }
+
+            .conditions {
+                position: absolute;
+                right: 2px;
+                top: 2px;
+                width: 219px;
+                height: 372px;
+                padding: 10px;
+                background-color: #ffffff;
+
+                .btnBox {
+                    padding: 0 0 10px;
+                    text-align: center;
+                }
+
+                .forms /deep/ .el-form-item__label {
+                    // width: 120px !important;
+                    padding-right: 10px;
+                    line-height: 22px;
+                    font-size: 12px;
+                }
+
+                .forms /deep/ .el-form-item__content {
+                    // margin-left: 120px !important;
+                    line-height: 22px;
+                    font-size: 12px;
+                }
+
+                .el-input {
+                    width: 100px;
+                    font-size: 12px;
+                }
+
+                .forms /deep/ .el-input__inner {
+                    height: 22px;
+                }
+            }
         }
     }
 

+ 3 - 3
vue.config.js

@@ -91,7 +91,7 @@ module.exports = {
                 // target: 'http://10.10.83.145:6888/user-center',
                 // target: 'http://10.12.10.70/simulation',
                 // target: 'http://10.12.10.70:7001', // 登录
-                // target: 'http://10.12.10.73:7003', // 王志强
+                // target: 'http://10.12.10.87:7003', // 王志强
                 // target: 'http://10.12.10.70', // windowstest
                 // target: 'http://10.12.10.87:8001', // 赵艳
                 // target: 'http://10.12.10.72:8001', // 王晓峰
@@ -109,7 +109,7 @@ module.exports = {
                 }
             },
             '/simulation/resource/server': {
-                // target: 'http://10.12.10.73:7003', // 王志强
+                // target: 'http://10.12.10.87:7003', // 王志强
                 // target: 'http://10.12.10.88:7003', // 王耀栋
                 // target: 'http://10.12.10.72:7003', // 王晓峰
                 // target: 'http://10.12.10.87:7003', // 赵艳
@@ -128,7 +128,7 @@ module.exports = {
                 }
             },
             '/simulation/resource/video': {
-                // target: 'http://10.12.10.73:7003', // 王志强
+                // target: 'http://10.12.10.87:7003', // 王志强
                 // target: 'http://10.12.10.88:7003', // 王耀栋
                 // target: 'http://10.12.10.72:7003', // 王晓峰
                 // target: 'http://10.12.10.87:7003', // 赵艳