Browse Source

carsim、登录、系统管理等优化

zhangliang2 2 years ago
parent
commit
0cb18f40e9

+ 8 - 0
src/api/sceneLibrary.js

@@ -11,14 +11,17 @@ const queryCsbById = basePart + '/ScoringRules/queryCsbById'; // 查询该规则
 const queryStandardsRegulationsList = basePart + '/StandardsRegulations/queryStandardsRegulationsList'; // 标准法规场景列表
 const saveStandardsRegulations = basePart + '/StandardsRegulations/saveStandardsRegulations'; // 新增标准法规仿场景
 const deleteStandardsRegulations = basePart + '/StandardsRegulations/deleteStandardsRegulations'; // 删除标准法规仿场景
+const batchDeleteSceneStandards = basePart + '/StandardsRegulations/batchDeleteSceneStandards'; // 批量删除标准法规仿场景
 
 const querySceneAccidentList = basePart + '/SceneAccident/querySceneAccidentList'; // 交通事故场景列表
 const saveSceneAccident = basePart + '/SceneAccident/saveSceneAccident'; // 新增交通事故场景
 const deleteSceneAccident = basePart + '/SceneAccident/deleteSceneAccident'; // 删除交通事故场景
+const batchDeleteSceneAccident = basePart + '/SceneAccident/batchDeleteSceneAccident'; // 批量删除交通事故场景
 
 const querySceneNaturalList = basePart + '/SceneNatural/querySceneNaturalList'; // 自然驾驶场景列表
 const saveSceneNatural = basePart + '/SceneNatural/saveSceneNatural'; // 新增自然驾驶场景
 const deleteSceneNatural = basePart + '/SceneNatural/deleteSceneNatural'; // 删除自然驾驶场景
+const batchDeleteSceneNatural = basePart + '/SceneNatural/batchDeleteSceneNatural'; // 批量删除自然驾驶场景
 
 const queryScenePackageList = basePart + '/ScenePackage/queryScenePackageList'; // 场景测试包管理列表
 const instShareList = basePart + '/ScenePackage/instShareList'; // 分享场景测试包
@@ -31,6 +34,7 @@ const queryCsb = basePart + '/ScoringRules/queryCsb'; // 测试包添加评分
 
 const querySceneGeneralTemplateList = basePart + '/SceneGeneralTemplate/querySceneGeneralTemplateList'; // 泛化列表
 const deleteSceneGeneralTemplateById = basePart + '/SceneGeneralTemplate/deleteSceneGeneralTemplateById'; // 删除泛化场景模板
+const deleteSceneGeneralTemplateByIds = basePart + '/SceneGeneralTemplate/deleteSceneGeneralTemplateByIds'; // 批量删除泛化场景模板
 const queryType = basePart + '/SceneGeneralTemplate/queryType'; // 功能模块查询
 const querySceneGeneralTemplateById = basePart + '/SceneGeneralTemplate/querySceneGeneralTemplateById'; // 选中模板展示详情
 const saveSceneGeneralTemplate = basePart + '/SceneGeneralTemplate/saveSceneGeneralTemplate'; // 新增泛化场景模板
@@ -49,14 +53,17 @@ export default {
     queryStandardsRegulationsList,
     saveStandardsRegulations,
     deleteStandardsRegulations,
+    batchDeleteSceneStandards,
 
     querySceneAccidentList,
     saveSceneAccident,
     deleteSceneAccident,
+    batchDeleteSceneAccident,
 
     querySceneNaturalList,
     saveSceneNatural,
     deleteSceneNatural,
+    batchDeleteSceneNatural,
 
     queryScenePackageList,
     instShareList,
@@ -69,6 +76,7 @@ export default {
 
     querySceneGeneralTemplateList,
     deleteSceneGeneralTemplateById,
+    deleteSceneGeneralTemplateByIds,
     queryType,
     querySceneGeneralTemplateById,
     saveSceneGeneralTemplate,

+ 4 - 0
src/api/systemManagement.js

@@ -5,6 +5,7 @@ const getUserPageList = basePart + '/user/getUserPageList'
 const saveUser = basePart + '/user/saveUser'
 const saveDefaultPassword = basePart + '/user/saveDefaultPassword'
 const saveVisible = basePart + '/user/saveVisible'
+
 //参数管理
 const getParameterList = basePart + '/parameter/getParameterList'
 const saveParameter = basePart + '/parameter/saveParameter'
@@ -16,6 +17,7 @@ const saveCluster = basePart + '/cluster/saveCluster'
 const getClusterHistory = basePart + '/cluster/getClusterHistory'
 const getClusterNum = basePart + '/cluster/getClusterNum'
 const getValidClusterInfo = basePart + '/cluster/getValidClusterInfo'
+
 //场景包管理
 const querySystemScenePackageList = basePart + '/SystemScenePackage/querySystemScenePackageList' // 场景包列表
 const saveSystemScenePackage = basePart + '/SystemScenePackage/saveSystemScenePackage' // 保存场景包详情
@@ -34,6 +36,7 @@ const querySystemScenePackageListByTJ = basePart + '/SystemScenePackage/querySys
 const getSceneImporPagetList = basePart + '/sceneImport/getSceneImporPagetList' // 场景上传列表
 const saveSceneGeneralTemplateAll = basePart + '/SceneGeneralTemplate/saveSceneGeneralTemplateAll'; // 保存泛化场景模板-new
 const saveTask = basePart + '/sceneImport/saveTask'; // 保存3个真实场景
+const deleteTask = basePart + '/sceneImport/deleteTask'; // 任务删除
 
 // 车辆设置
 const getVehicleTempPageList = basePart + '/vehicleTemp/getVehicleTempPageList' // 列表查询
@@ -80,6 +83,7 @@ export default {
     getSceneImporPagetList,
     saveSceneGeneralTemplateAll,
     saveTask,
+    deleteTask,
 
     getVehicleTempPageList,
     getVehicleTempInfo,

BIN
src/assets/common/image/login/bg.png


BIN
src/assets/common/image/login/bg0.png


BIN
src/assets/common/image/login/formTop.png


BIN
src/assets/common/image/login/name.png


BIN
src/assets/common/image/login/pwd.png


BIN
src/assets/common/image/login/top.png


+ 7 - 6
src/components/echarts/lineChartCarsim.vue

@@ -55,6 +55,7 @@ export default {
     methods: {
         initStateList() {
             let array = this.dataList;
+            console.log(array);
 
             for (let index = 0; index < array.length; index++) {
                 const element = array[index];
@@ -68,12 +69,12 @@ export default {
                 }
             }
 
-            if (!this.isSorted(array.map((i) => i.x))) {
-                this.$message.error("X轴的坐标应逐渐增大");
-                this.charts.clear();
-                this.charts.setOption(this.option1);
-                return;
-            }
+            // if (!this.isSorted(array.map((i) => i.x))) {
+            //     this.$message.error("X轴的坐标应逐渐增大");
+            //     this.charts.clear();
+            //     this.charts.setOption(this.option1);
+            //     return;
+            // }
 
             let props = [];
 

+ 9 - 9
src/components/echarts/lineChartCarsimA.vue

@@ -89,15 +89,15 @@ export default {
                 }
             }
 
-            if (
-                !this.isSorted(array.map((i) => i.x)) ||
-                !this.isSorted(array1.map((i) => i.x))
-            ) {
-                this.$message.error("X轴的坐标应逐渐增大");
-                this.charts.clear();
-                this.charts.setOption(this.option1);
-                return;
-            }
+            // if (
+            //     !this.isSorted(array.map((i) => i.x)) ||
+            //     !this.isSorted(array1.map((i) => i.x))
+            // ) {
+            //     this.$message.error("X轴的坐标应逐渐增大");
+            //     this.charts.clear();
+            //     this.charts.setOption(this.option1);
+            //     return;
+            // }
 
             // let props = ["x", "y"];
 

+ 6 - 6
src/components/echarts/lineChartCarsimB.vue

@@ -68,12 +68,12 @@ export default {
                 }
             }
 
-            if (!this.isSorted(array.map((i) => i.x))) {
-                this.$message.error("X轴的坐标应逐渐增大");
-                this.charts.clear();
-                this.charts.setOption(this.option1);
-                return;
-            }
+            // if (!this.isSorted(array.map((i) => i.x))) {
+            //     this.$message.error("X轴的坐标应逐渐增大");
+            //     this.charts.clear();
+            //     this.charts.setOption(this.option1);
+            //     return;
+            // }
 
             // let props = ["x", "y"];
 

+ 204 - 49
src/views/login.vue

@@ -1,33 +1,50 @@
 <template>
     <div class="loginPanel">
-        <el-form ref="form" :model="form" :rules="rules" label-width="108px">
-            <el-form-item label="用户名:" prop="username">
-                <el-input
-                    placeholder="请输入"
-                    maxlength="30"
-                    v-autoTrim="{ obj: form, key: 'username' }"
-                    v-model="form.username"
-                    @keyup.enter.native="toLogin"
-                >
-                </el-input>
-            </el-form-item>
-
-            <el-form-item label="密码:" prop="password">
-                <el-input
-                    placeholder="请输入"
-                    type="password"
-                    maxlength="16"
-                    v-autoTrim="{ obj: form, key: 'password' }"
-                    v-model="form.password"
-                    @keyup.enter.native="toLogin"
-                >
-                </el-input>
-            </el-form-item>
-
-            <div class="btns">
-                <el-button type="primary" @click="toLogin">登录</el-button>
-            </div>
-        </el-form>
+        <div class="loginBox">
+            <el-form ref="form" :model="form" :rules="rules" label-width="0">
+                <div class="formTop">
+                    <img :src="formTopImg" width="100%" alt="" />
+                </div>
+                <el-form-item label="" prop="username">
+                    <div class="label username el-icon-user"></div>
+                    <el-input
+                        placeholder="请输入用户名"
+                        maxlength="30"
+                        v-autoTrim="{ obj: form, key: 'username' }"
+                        v-model="form.username"
+                        @keyup.enter.native="toLogin"
+                    >
+                    </el-input>
+                </el-form-item>
+
+                <!-- autocomplete="new-password" -->
+                <el-form-item label="" prop="password">
+                    <div class="label password el-icon-lock"></div>
+                    <el-input
+                        placeholder="请输入密码"
+                        type="password"
+                        maxlength="16"
+                        v-autoTrim="{ obj: form, key: 'password' }"
+                        v-model="form.password"
+                        @keyup.enter.native="toLogin"
+                    >
+                    </el-input>
+                </el-form-item>
+
+                <div class="btns">
+                    <el-button type="primary" @click="toLogin">登录</el-button>
+                </div>
+            </el-form>
+        </div>
+
+        <div class="top">
+            <img :src="topImg" width="100%" alt="" />
+        </div>
+
+        <div class="bottom">
+            ICP备案号: 京ICP备18035552号-1 All Rights Reserved: Copyright 2022
+            CICV
+        </div>
     </div>
 </template>
 
@@ -45,7 +62,11 @@ export default {
             },
             rules: {
                 username: [
-                    { required: true, message: "请输入", trigger: "blur" },
+                    {
+                        required: true,
+                        message: "请输入用户名",
+                        trigger: "blur",
+                    },
                 ],
                 password: [
                     {
@@ -56,6 +77,8 @@ export default {
                 ],
             },
             i: 0,
+            formTopImg: require("@/assets/common/image/login/formTop.png"),
+            topImg: require("@/assets/common/image/login/top.png"),
         };
     },
 
@@ -71,7 +94,10 @@ export default {
                         data: this.form,
                     }).then((res) => {
                         if (res.code == 200 && res.info) {
-                            let Authorization = res.info.token_type + ' ' + res.info.access_token;
+                            let Authorization =
+                                res.info.token_type +
+                                " " +
+                                res.info.access_token;
                             let refreshToken = res.info.refresh_token;
                             let expiresTime = res.info.expires_time;
 
@@ -82,19 +108,21 @@ export default {
                             );
                             localStorage.setItem("refreshToken", refreshToken);
                             localStorage.setItem("expiresTime", expiresTime);
-                            localStorage.setItem("username", this.form.username)
+                            localStorage.setItem(
+                                "username",
+                                this.form.username
+                            );
 
                             let tokenTimer = null;
                             let toExpiresTime =
                                 new Date(expiresTime).getTime() -
                                 new Date().getTime();
-                            if (toExpiresTime < 5*60 * 1000) {
-                                this.getRefreshToken()
-                            }else{
+                            if (toExpiresTime < 5 * 60 * 1000) {
+                                this.getRefreshToken();
+                            } else {
                                 this.getUserInfo();
                                 // this.$router.push({ path: "/mainPage" });
                             }
-                            
                         } else {
                             this.$message.error(res.message || "登录失败");
                         }
@@ -111,7 +139,8 @@ export default {
                 },
             }).then((res) => {
                 if (res.code == 200 && res.info) {
-                    let Authorization = res.info.token_type + ' ' + res.info.access_token;
+                    let Authorization =
+                        res.info.token_type + " " + res.info.access_token;
                     let refreshToken = res.info.refresh_token;
                     let expiresTime = res.info.expires_time;
 
@@ -122,7 +151,6 @@ export default {
 
                     this.getUserInfo();
                     // this.$router.push({ path: "/mainPage" });
-                    
                 } else {
                     this.$message.error(res.message || "获取refresh_token失败");
                 }
@@ -154,38 +182,165 @@ export default {
         this.$store.commit("getUserId", "");
         this.$store.commit("getUsername", "");
         this.$store.commit("getRoleCode", "");
-        this.$store.commit("getUseType","");
+        this.$store.commit("getUseType", "");
     },
 
-    beforeRouteLeave (to, from, next) {
-        if (!localStorage.getItem('Authorization')) {
+    beforeRouteLeave(to, from, next) {
+        if (!localStorage.getItem("Authorization")) {
             // alert(666)
             return false;
-        }else {
-            next()
+        } else {
+            next();
         }
-    }
+    },
 };
 </script>
 
 <style lang='less' scoped>
 .loginPanel {
+    position: relative;
     padding: 100px;
 
+    .loginBox {
+        position: fixed;
+        top: 0;
+        bottom: 0;
+        left: 0;
+        right: 0;
+        z-index: 1;
+        background: url("../assets/common/image/login/bg0.png") center no-repeat;
+        background-size: cover;
+        // background-size: 100% 100%;
+    }
+
+    .top {
+        position: fixed;
+        top: 2.7%;
+        right: 1.41%;
+        width: 13.38%;
+        z-index: 2;
+    }
+
+    .bottom {
+        position: fixed;
+        bottom: 2.7%;
+        left: 0;
+        width: 100%;
+        z-index: 2;
+        color: #ffffff;
+        font-size: 12px;
+        text-align: center;
+    }
+
     .el-form {
-        width: 60%;
-        margin: 0 auto;
-        padding-bottom: 45px;
+        position: absolute;
+        top: 22.5%;
+        left: 68.1%;
+        z-index: 3;
+        // width: 400px;
+        width: 21%;
+        min-width: 400px;
+        padding: 36px 60px 96px;
+        background-color: rgba(220, 220, 220, 0.2);
+        backdrop-filter: blur(3px);
 
-        /deep/ .el-input,
-        .el-select {
+        /deep/ .el-input {
             width: 100%;
+            // color: #ffffff;
+
+            input,
+            input.el-input__inner {
+                padding-left: 36px;
+                background: transparent !important;
+                color: #ffffff;
+            }
         }
+
+        .el-form-item {
+            position: relative;
+
+            .label {
+                position: absolute;
+                top: 0;
+                left: 0;
+                z-index: 3;
+                width: 18px;
+                height: 18px;
+                margin-left: 10px;
+                line-height: 32px;
+                font-size: 16px;
+                color: #dcdcdc;
+            }
+
+            // .username {
+            // background: url("../assets/common/image/login/name.png") center
+            //     no-repeat;
+            // background-size: contain;
+            // }
+
+            // .password {
+            // background: url("../assets/common/image/login/pwd.png") center
+            //     no-repeat;
+            // background-size: contain;
+            // }
+        }
+    }
+
+    input:-webkit-autofill {
+        box-shadow: 0 0 0 1000px #f00 inset; // 背景颜色
+        -webkit-box-shadow: 0 0 0px 1000px #f00 inset;
+        -webkit-text-fill-color: #fff; // input 的文字的颜色
+        border: 0;
+        background-color: transparent !important;
+    }
+
+    input:-internal-autofill-selected {
+        background-color: transparent !important;
+    }
+
+    input:-webkit-autofill,
+    input:-webkit-autofill:hover,
+    input:-webkit-autofill:focus,
+    input:-webkit-autofill:active {
+        transition-delay: 5000s;
+        transition: color 5000s ease-out, background-color 5000s ease-out;
+        -webkit-transition-delay: 5000s;
+        -webkit-transition: color 5000s ease-out,
+            background-color 5000s ease-out;
+    }
+
+    input:-webkit-autofill,
+    input:-webkit-autofill:hover,
+    input:-webkit-autofill:focus {
+        color: #fff !important;
+        -webkit-text-fill-color: #fff;
+        -webkit-transition: background-color 99999999s ease-in-out 0s;
+        transition: background-color 99999999s ease-in-out 0s;
+    }
+
+    input:autofill,
+    input:autofill:hover,
+    input:autofill:focus {
+        -webkit-text-fill-color: #fff;
+        -webkit-transition: background-color 99999999s ease-in-out 0s;
+        transition: background-color 99999999s ease-in-out 0s;
+    }
+
+    .formTop {
+        width: 62.1%;
+        margin: 0 auto 20px;
+        // background: url("../assets/common/image/login/formTop.png") center
+        //     no-repeat;
+        // background-size: contain;
     }
 
     .btns {
-        padding-top: 30px;
+        padding-top: 8px;
         text-align: center;
+
+        .el-button {
+            width: 100%;
+        }
     }
 }
 </style>

+ 34 - 37
src/views/modelLibrary/components/vehicleModelCarsim.vue

@@ -2287,10 +2287,10 @@ export default {
                 }
             }
 
-            if (!this.isSorted(array.map((i) => i.x))) {
-                this.$message.error("X轴的坐标应逐渐增大");
-                return;
-            }
+            // if (!this.isSorted(array.map((i) => i.x))) {
+            //     this.$message.error("X轴的坐标应逐渐增大");
+            //     return;
+            // }
 
             let data = [];
 
@@ -2412,13 +2412,13 @@ export default {
                 }
             }
 
-            if (
-                !this.isSorted(array.map((i) => i.x)) ||
-                !this.isSorted(array1.map((i) => i.x))
-            ) {
-                this.$message.error("X轴的坐标应逐渐增大");
-                return;
-            }
+            // if (
+            //     !this.isSorted(array.map((i) => i.x)) ||
+            //     !this.isSorted(array1.map((i) => i.x))
+            // ) {
+            //     this.$message.error("X轴的坐标应逐渐增大");
+            //     return;
+            // }
 
             let data = [];
             data.push(["X Axis", "Y Axis"]);
@@ -2499,13 +2499,13 @@ export default {
                 }
             }
 
-            if (
-                !this.isSorted(array.map((i) => i.x)) ||
-                !this.isSorted(array1.map((i) => i.x))
-            ) {
-                this.$message.error("X轴的坐标应逐渐增大");
-                return;
-            }
+            // if (
+            //     !this.isSorted(array.map((i) => i.x)) ||
+            //     !this.isSorted(array1.map((i) => i.x))
+            // ) {
+            //     this.$message.error("X轴的坐标应逐渐增大");
+            //     return;
+            // }
 
             let data = [];
             data.push(["X Axis", "Y Axis"]);
@@ -2786,22 +2786,22 @@ export default {
         },
         checkArr() {
             /*  
-frontLeftWheelRelationCurvePositiveMomentAndSideslipAngle: [], // 左前轮不同载荷下轮胎回正力矩和侧偏角的关系曲线
-frontLeftWheelRelationCurveLateralForceAndSideslipAngle: [], // 左前轮不同载荷下轮胎侧向力和侧偏角的关系曲线
-frontLeftWheelRelationCurveLongitudinalForceAndSideslipAngle:
-    [], // 左前轮不同载荷下轮胎纵向力和滑移率的关系曲线
-rearLeftWheelRelationCurvePositiveMomentAndSideslipAngle: [], // 左后轮不同载荷下轮胎回正力矩和侧偏角的关系曲线
-rearLeftWheelRelationCurveLateralForceAndSideslipAngle: [], // 左后轮不同载荷下轮胎侧向力和侧偏角的关系曲线
-rearLeftWheelRelationCurveLongitudinalForceAndSideslipAngle: [], // 左后轮不同载荷下轮胎纵向力和滑移率的关系曲线
-frontRightWheelRelationCurvePositiveMomentAndSideslipAngle: [], // 右前轮不同载荷下轮胎回正力矩和侧偏角的关系曲线
-frontRightWheelRelationCurveLateralForceAndSideslipAngle: [], // 右前轮不同载荷下轮胎侧向力和侧偏角的关系曲线
-frontRightWheelRelationCurveLongitudinalForceAndSideslipAngle:
-    [], // 右前轮不同载荷下轮胎纵向力和滑移率的关系曲线
-rearRightWheelRelationCurvePositiveMomentAndSideslipAngle: [], // 右后轮不同载荷下轮胎回正力矩和侧偏角的关系曲线
-rearRightWheelRelationCurveLateralForceAndSideslipAngle: [], // 右后轮不同载荷下轮胎侧向力和侧偏角的关系曲线
-rearRightWheelRelationCurveLongitudinalForceAndSideslipAngle:
-    [], // 右后轮不同载荷下轮胎纵向力和滑移率的关系曲线
-    */
+                frontLeftWheelRelationCurvePositiveMomentAndSideslipAngle: [], // 左前轮不同载荷下轮胎回正力矩和侧偏角的关系曲线
+                frontLeftWheelRelationCurveLateralForceAndSideslipAngle: [], // 左前轮不同载荷下轮胎侧向力和侧偏角的关系曲线
+                frontLeftWheelRelationCurveLongitudinalForceAndSideslipAngle:
+                    [], // 左前轮不同载荷下轮胎纵向力和滑移率的关系曲线
+                rearLeftWheelRelationCurvePositiveMomentAndSideslipAngle: [], // 左后轮不同载荷下轮胎回正力矩和侧偏角的关系曲线
+                rearLeftWheelRelationCurveLateralForceAndSideslipAngle: [], // 左后轮不同载荷下轮胎侧向力和侧偏角的关系曲线
+                rearLeftWheelRelationCurveLongitudinalForceAndSideslipAngle: [], // 左后轮不同载荷下轮胎纵向力和滑移率的关系曲线
+                frontRightWheelRelationCurvePositiveMomentAndSideslipAngle: [], // 右前轮不同载荷下轮胎回正力矩和侧偏角的关系曲线
+                frontRightWheelRelationCurveLateralForceAndSideslipAngle: [], // 右前轮不同载荷下轮胎侧向力和侧偏角的关系曲线
+                frontRightWheelRelationCurveLongitudinalForceAndSideslipAngle:
+                    [], // 右前轮不同载荷下轮胎纵向力和滑移率的关系曲线
+                rearRightWheelRelationCurvePositiveMomentAndSideslipAngle: [], // 右后轮不同载荷下轮胎回正力矩和侧偏角的关系曲线
+                rearRightWheelRelationCurveLateralForceAndSideslipAngle: [], // 右后轮不同载荷下轮胎侧向力和侧偏角的关系曲线
+                rearRightWheelRelationCurveLongitudinalForceAndSideslipAngle:
+                    [], // 右后轮不同载荷下轮胎纵向力和滑移率的关系曲线
+            */
             let arr =
                 this.form
                     .frontLeftWheelRelationCurvePositiveMomentAndSideslipAngle;
@@ -2942,7 +2942,6 @@ rearRightWheelRelationCurveLongitudinalForceAndSideslipAngle:
             */
 
             let dataArray = this.getDataWay.data;
-            console.log(dataArray);
 
             for (let index = 0; index < dataArray.length; index++) {
                 const element = dataArray[index];
@@ -2953,8 +2952,6 @@ rearRightWheelRelationCurveLongitudinalForceAndSideslipAngle:
                     if (element.coasting === "") element.coasting = null;
                 }
 
-                console.log(element);
-
                 let flag = Object.values(element).some((i) => i === "");
 
                 if (flag) {

+ 1 - 1
src/views/page/pageMenu.vue

@@ -304,8 +304,8 @@ export default {
                         //this.refreshToken()
                     } else {
                         if (this.toExpiresTime < 24 * 60 * 60 * 1000) {
+                            let that = this;
                             this.tokenTimer = setTimeout(function () {
-                                let that = this;
                                 that.refreshToken();
                             }, this.toExpiresTime - 5 * 60 * 1000);
                         }

+ 24 - 0
src/views/sceneLibrary/scenarioTestPackageManagementList.vue

@@ -86,9 +86,20 @@
             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
@@ -157,6 +168,11 @@ export default {
                         return row.createTime.slice(0, 10);
                     },
                 },
+                {
+                    label: "使用状态",
+                    prop: "isUnavailable",
+                    template: true,
+                },
                 {
                     label: "操作",
                     prop: "cgInfos",
@@ -308,10 +324,18 @@ export default {
                 }
             });
         },
+        errRow({ row, rowIndex }) {
+            if (row.isUnavailable === "1") {
+                return "errColor";
+            }
+        },
     },
     mounted() {},
 };
 </script>
 
 <style scoped lang="less">
+/deep/ .el-table .errColor td {
+    color: red;
+}
 </style>

+ 8 - 1
src/views/sceneLibrary/scenePacketList.vue

@@ -63,7 +63,11 @@
         <div class="btns">
             <el-button
                 type="primary"
-                v-if="share === '0' || share === ''"
+                v-if="
+                    share === '0' ||
+                    share === '' ||
+                    ((roleCode === '0' || roleCode === '1') && share === '1')
+                "
                 @click="save(false)"
                 >保存</el-button
             >
@@ -382,6 +386,7 @@ export default {
                     {
                         children: null,
                         id: "1",
+                        share: "",
                         packageAndRules: "",
                         packageLevel: 1,
                         parentId: "0", // 判断根路径的标识
@@ -977,6 +982,8 @@ export default {
                 this.getDataWay.data[0].packageLevel = 0;
             }
 
+            this.getDataWay.data[0].share = this.share;
+
             this.$axios({
                 method: "post",
                 url: this.$api.sceneLibrary.saveScenePackage,

+ 53 - 1
src/views/systemManagement/sceneLibraryManagement/generalizationScene.vue

@@ -78,14 +78,34 @@
             </template>
         </search-layout>
 
+        <div class="btnsPanel">
+            <el-button
+                type="primary"
+                plain
+                icon="el-icon-delete"
+                @click="delRows"
+                >批量删除</el-button
+            >
+        </div>
+
         <tableList
             ref="table"
-            style="margin: 30px"
+            style="margin: 0 30px"
             :columns="columns"
             :getDataWay="getDataWay"
             :pagination="pagination"
+            :checkedData="checkedArr"
+            selection
             index
         >
+            <!-- <tableList
+            ref="table"
+            style="margin: 30px"
+            :columns="columns"
+            :getDataWay="getDataWay"
+            :pagination="pagination"
+            index
+        > -->
             <el-table-column
                 label="操作"
                 slot="cgInfos"
@@ -232,6 +252,7 @@ export default {
             videoDiaTitle: "",
             generalizationVisible: false, // 泛化dialog
             generalizationId: "", // 泛化详情id
+            checkedArr: [],
         };
     },
 
@@ -314,6 +335,37 @@ export default {
                 });
             });
         },
+        delRows() {
+            let checkedArr = this.checkedArr;
+
+            if (checkedArr.length <= 0) {
+                this.$message.info("请先选择数据");
+                return;
+            }
+
+            let arr = checkedArr.map((i) => i.sceneId);
+
+            this.$confirm("确认是否批量删除?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            }).then(() => {
+                this.$axios({
+                    method: "post",
+                    url: this.$api.sceneLibrary.deleteSceneGeneralTemplateByIds,
+                    data: {
+                        fhNameList: arr,
+                    },
+                }).then((res) => {
+                    if (res.code == 200) {
+                        this.$message.success("删除成功");
+                    } else {
+                        this.$message.error(res.message || "删除失败");
+                    }
+                    this.doSearch();
+                });
+            });
+        },
         diaClose(done) {
             this.autoplay = false;
             this.videoSrc = "";

+ 54 - 2
src/views/systemManagement/sceneLibraryManagement/naturalDrivingScene.vue

@@ -143,14 +143,34 @@
             @fileClose="fileClose"
         ></file-dialog> -->
 
+        <div class="btnsPanel">
+            <el-button
+                type="primary"
+                plain
+                icon="el-icon-delete"
+                @click="delRows"
+                >批量删除</el-button
+            >
+        </div>
+
         <tableList
             ref="table"
-            style="margin: 30px"
+            style="margin: 0 30px"
             :columns="columns"
             :getDataWay="getDataWay"
             :pagination="pagination"
+            :checkedData="checkedArr"
+            selection
             index
         >
+            <!-- <tableList
+            ref="table"
+            style="margin: 30px"
+            :columns="columns"
+            :getDataWay="getDataWay"
+            :pagination="pagination"
+            index
+        > -->
             <el-table-column
                 label="操作"
                 slot="cgInfos"
@@ -289,6 +309,7 @@ export default {
             videoSrc: "",
             objectPath: "",
             videoDiaTitle: "",
+            checkedArr: [],
         };
     },
 
@@ -574,7 +595,7 @@ export default {
                 this.$message.warning("本场景无仿真视频");
                 return;
             }
-            
+
             this.dialogVisible = true;
             this.videoDiaTitle = row.naturalName;
 
@@ -612,6 +633,37 @@ export default {
                 });
             });
         },
+        delRows() {
+            let checkedArr = this.checkedArr;
+
+            if (checkedArr.length <= 0) {
+                this.$message.info("请先选择数据");
+                return;
+            }
+
+            let arr = checkedArr.map((i) => i.naturalName);
+
+            this.$confirm("确认是否批量删除?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            }).then(() => {
+                this.$axios({
+                    method: "post",
+                    url: this.$api.sceneLibrary.batchDeleteSceneNatural,
+                    data: {
+                        naturalNameList: arr,
+                    },
+                }).then((res) => {
+                    if (res.code == 200) {
+                        this.$message.success("删除成功");
+                    } else {
+                        this.$message.error(res.message || "删除失败");
+                    }
+                    this.doSearch();
+                });
+            });
+        },
         diaClose(done) {
             this.autoplay = false;
             this.videoSrc = "";

+ 54 - 2
src/views/systemManagement/sceneLibraryManagement/standardRegulationSimulationScene.vue

@@ -71,14 +71,34 @@
             </template>
         </search-layout>
 
+        <div class="btnsPanel">
+            <el-button
+                type="primary"
+                plain
+                icon="el-icon-delete"
+                @click="delRows"
+                >批量删除</el-button
+            >
+        </div>
+
         <tableList
             ref="table"
-            style="margin: 30px"
+            style="margin: 0 30px"
             :columns="columns"
             :getDataWay="getDataWay"
             :pagination="pagination"
+            :checkedData="checkedArr"
+            selection
             index
         >
+            <!-- <tableList
+            ref="table"
+            style="margin: 30px"
+            :columns="columns"
+            :getDataWay="getDataWay"
+            :pagination="pagination"
+            index
+        > -->
             <el-table-column
                 label="操作"
                 slot="cgInfos"
@@ -185,6 +205,7 @@ export default {
             videoSrc: "",
             objectPath: "",
             videoDiaTitle: "",
+            checkedArr: [],
         };
     },
 
@@ -264,7 +285,7 @@ export default {
                 this.$message.warning("本场景无仿真视频");
                 return;
             }
-            
+
             this.dialogVisible = true;
             this.videoDiaTitle = row.sceneName;
 
@@ -302,6 +323,37 @@ export default {
                 });
             });
         },
+        delRows() {
+            let checkedArr = this.checkedArr;
+
+            if (checkedArr.length <= 0) {
+                this.$message.info("请先选择数据");
+                return;
+            }
+
+            let arr = checkedArr.map((i) => i.sceneName);
+
+            this.$confirm("确认是否批量删除?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            }).then(() => {
+                this.$axios({
+                    method: "post",
+                    url: this.$api.sceneLibrary.batchDeleteSceneStandards,
+                    data: {
+                        sceneNameList: arr,
+                    },
+                }).then((res) => {
+                    if (res.code == 200) {
+                        this.$message.success("删除成功");
+                    } else {
+                        this.$message.error(res.message || "删除失败");
+                    }
+                    this.doSearch();
+                });
+            });
+        },
         diaClose(done) {
             this.autoplay = false;
             this.videoSrc = "";

+ 54 - 2
src/views/systemManagement/sceneLibraryManagement/trafficAccidentSimulationScene.vue

@@ -133,14 +133,34 @@
             </template>
         </search-layout>
 
+        <div class="btnsPanel">
+            <el-button
+                type="primary"
+                plain
+                icon="el-icon-delete"
+                @click="delRows"
+                >批量删除</el-button
+            >
+        </div>
+
         <tableList
             ref="table"
-            style="margin: 30px"
+            style="margin: 0 30px"
             :columns="columns"
             :getDataWay="getDataWay"
             :pagination="pagination"
+            :checkedData="checkedArr"
+            selection
             index
         >
+            <!-- <tableList
+            ref="table"
+            style="margin: 30px"
+            :columns="columns"
+            :getDataWay="getDataWay"
+            :pagination="pagination"
+            index
+        > -->
             <el-table-column
                 label="操作"
                 slot="cgInfos"
@@ -268,6 +288,7 @@ export default {
             videoSrc: "",
             objectPath: "",
             videoDiaTitle: "",
+            checkedArr: [],
         };
     },
 
@@ -389,7 +410,7 @@ export default {
                 this.$message.warning("本场景无仿真视频");
                 return;
             }
-            
+
             this.dialogVisible = true;
             this.videoDiaTitle = row.sceneName;
 
@@ -427,6 +448,37 @@ export default {
                 });
             });
         },
+        delRows() {
+            let checkedArr = this.checkedArr;
+
+            if (checkedArr.length <= 0) {
+                this.$message.info("请先选择数据");
+                return;
+            }
+
+            let arr = checkedArr.map((i) => i.sceneName);
+
+            this.$confirm("确认是否批量删除?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            }).then(() => {
+                this.$axios({
+                    method: "post",
+                    url: this.$api.sceneLibrary.batchDeleteSceneAccident,
+                    data: {
+                        sceneNameList: arr,
+                    },
+                }).then((res) => {
+                    if (res.code == 200) {
+                        this.$message.success("删除成功");
+                    } else {
+                        this.$message.error(res.message || "删除失败");
+                    }
+                    this.doSearch();
+                });
+            });
+        },
         diaClose(done) {
             this.autoplay = false;
             this.videoSrc = "";

+ 45 - 4
src/views/systemManagement/sceneUploadList.vue

@@ -73,12 +73,23 @@
         >
             <el-table-column label="操作" slot="cgInfos" align="center">
                 <template v-slot="scope">
-                    <span
+                    <!-- <span
                         v-if="scope.row.errorMessage"
                         @click="viewRow(scope.row.errorMessage)"
-                        class="errRecord"
+                        class="errRecord tdBtn"
                         >错误记录</span
-                    >
+                    > -->
+                    <i
+                        v-if="scope.row.errorMessage"
+                        @click="viewRow(scope.row.errorMessage)"
+                        class="el-icon-document elIcon tdBtn"
+                        title="错误记录"
+                    ></i>
+                    <i
+                        @click="delRow(scope.row.id)"
+                        class="el-icon-delete elIcon tdBtn"
+                        title="删除"
+                    ></i>
                 </template>
             </el-table-column>
         </tableList>
@@ -189,7 +200,7 @@ import upload from "./components/upload";
 export default {
     name: "sceneUploadList", // 场景上传
     components: { searchLayout, tableList, upload },
-    
+
     data() {
         let formatSeconds = function formatSeconds(value) {
             var theTime = parseInt(value); // 秒
@@ -369,6 +380,28 @@ export default {
             this.errorMessage = errorMessage;
             this.errRocordVisible = true;
         },
+        delRow(id) {
+            this.$confirm("确认是否删除?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            }).then(() => {
+                this.$axios({
+                    method: "post",
+                    url: this.$api.systemManagement.deleteTask,
+                    data: {
+                        id,
+                    },
+                }).then((res) => {
+                    if (res.code == 200) {
+                        this.$message.success("删除成功");
+                    } else {
+                        this.$message.error(res.message || "删除失败");
+                    }
+                    this.doSearch();
+                });
+            });
+        },
         errClose() {
             this.errRocordVisible = false;
             this.errorMessage = "";
@@ -468,6 +501,14 @@ export default {
     cursor: pointer;
 }
 
+.tdBtn {
+    margin-right: 10px;
+
+    &:last-child {
+        margin-right: 0;
+    }
+}
+
 .upload {
     margin-top: 15px;
 }