JavaProjectRepo/business-css/frontend/src/views/component/scenario/index.vue

841 lines
26 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script lang="ts">
export default {
name: "scenario-事故情景",
};
</script>
<script setup lang="ts">
import { onMounted, ref, nextTick } from "vue";
import { ElForm, ElMessage, ElMessageBox } from "element-plus";
import { searchScenariosLsit,addScenarios,updateScenarios,deleteScenarios,deleteBatchScenarios} from "@/api/business/scenario";
import { getActiveAlgorithms } from "@/api/business/scenario";
import ConditionModel from '@/views/component/scenario/condition.vue'
import { simRun,simulationRun } from "@/api/business/project";
import Page from '@/components/Pagination/page.vue'
import { getDictItemById } from '@/api/dict';
import Createscenario from '@/views/component/scenario/createscenario.vue'
import { eventsBatchSave } from '@/api/business/event';
import { topologyDevicesLsit } from '@/api/business/project';
import TableModels from '@/components/antvx6/tableModel.vue';
import EchartsModels from '@/components/antvx6/echartsModel.vue';
import Viewx6 from '@/components/antvx6/viewx6.vue';
const webUrl = import.meta.env.VITE_APP_BASE_HTTP; // 基础路径
const algorithmTypeData: any = ref([]); // 算法类型数据
const stepsActive = ref(0); // 步骤导航栏当前激活的步骤索引
const props = defineProps({ // 接收父组件传递的项目信息
projectInfo: {
required: true,
type: Object,
default: {}
}
});
// 搜索框
const queryParams = ref({
current: 1,
size: 10,
querystr: ''
});
//分页 总条数
const total = ref()
//定义表格数据
const tableData: any = ref([]);
const multipleSelection = ref([]);
// 表格加载
const loading = ref(false)
function gettableData() {
let params = {
projectId: props.projectInfo.projectId,
name: input.value,
pageNum: queryParams.value.current,
pageSize: queryParams.value.size,
};
loading.value = true;
searchScenariosLsit(params).then((result:any) => {
tableData.value = result.records;
total.value = result.total;
loading.value = false;
}).catch((err) => {
loading.value = false;
});
}
//表格多选事件
function handleSelectionChange(val: any) {
multipleSelection.value = val;
}
const infoForm = ref();
//搜索内容及点击搜索按钮
const input = ref("");
//新建事故情景
const title = ref("");
const info: any = ref({
name: "",
code: "",
description: "",
});
const scenarioId = ref(""); // 事故情景id
const dialogVisible = ref(false); // 新增事故情景弹窗是否显示
const dialogEditVisible = ref(false); // 修改或查看事故情景弹窗是否显示
function addClick() {
title.value = "新增事故情景";
info.value = {
name: "",
code: "",
description: "",
};
stepsActive.value = 0;
deviceData.value.forEach((item: any) => {
item.algorithmType = ''
})
dialogVisible.value = true;
}
const isSwitch = ref(false); // 事故情景id
//新建角色-取消按钮
function handleClose() {
dialogEditVisible.value = false;
if (infoForm.value != null) infoForm.value.resetFields();
}
//新建事故情景
const rules = ref({
name: [{ required: true, message: "请输入事故情景名称", trigger: "blur" }],
algorithmType: [{ required: true, message: "请选择算法类型", trigger: "change" }],
keffThreshold: [{ required: true, message: "请输入keff阈值", trigger: "blur" }],
});
//修改事故情景
function editClick(row: any,type: string) {
title.value =type + "事故情景";
info.value = JSON.parse(JSON.stringify(row));
for(let i = 0;i<deviceData.value.length;i++){
deviceData.value[i].algorithmType = ''
}
if(info.value.deviceAlgoConfig !=null && info.value.deviceAlgoConfig != ''){
let device_algo_config = JSON.parse(info.value.deviceAlgoConfig)
for(let key in device_algo_config){
for(let i = 0;i<deviceData.value.length;i++){
if(deviceData.value[i].deviceId == key){
deviceData.value[i].algorithmType = device_algo_config[key]
}
}
}
}
dialogEditVisible.value = true;
}
const isEdit = ref(false);
function departureClick(row: any,type: string) {
title.value =type;
if(type == "初始条件设置"){
isEdit.value = true;
} else {
isEdit.value = false;
}
info.value = JSON.parse(JSON.stringify(row));
scenarioId.value = row.scenarioId;
isShowCondition.value = true;
}
//删除事故情景
function delAloneClick(row: any) {
ElMessageBox.confirm("确定删除此事故情景吗", "删除提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
let params = {
id: row.scenarioId,
};
deleteScenarios(params).then(() => {
gettableData();
ElMessage({
type: "success",
message: "删除成功",
});
});
})
}
// 多选删除?
function delClick() {
ElMessageBox.confirm("确定删除已选择事故情景吗?", "删除提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
let id = [] as any[];
multipleSelection.value.forEach((item: any) => {
id.push(item.scenarioId)
})
let params = {
ids: id,
};
deleteBatchScenarios(params.ids).then(() => {
gettableData();
ElMessage({
message: "删除成功",
type: "success",
});
});
});
}
function dateFormat(row: any) {
const daterc = row;
if (daterc != null) {
var date = new Date(daterc);
var year = date.getFullYear();
var month =
date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
// 拼接
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
}
}
const getAlgorithmType = async () => {
try {
const result:any = await getActiveAlgorithms();
algorithmTypeData.value = result
} catch (error) {
}
}
function submitClick(){
let isAlgorithmType = false
let isSonAlgorithmType = 0
for(let i = 0;i<deviceData.value.length;i++){
if(deviceData.value[i].algorithmType != null && deviceData.value[i].algorithmType != ''){
isSonAlgorithmType = isSonAlgorithmType + 1
}
}
if(info.value.algorithmType == null || info.value.algorithmType == ''){
isAlgorithmType = true
}
if( isAlgorithmType == true && isSonAlgorithmType == 0){
ElMessage({
type: "error",
message: "请选择算法类型",
});
return
}
if( isSonAlgorithmType != deviceData.value.length){
ElMessage({
type: "error",
message: "设备算法配置映射没有填写完全",
});
return
}
let data:any = {
scenarioId: info.value.scenarioId,
algorithmType: info.value.algorithmType,
name: info.value.name,
description: info.value.description,
keffThreshold: info.value.keffThreshold,
}
let device_algo_config:any = {}
let isTrue:any = false
deviceData.value.forEach((item: any) => {
if(item.algorithmType !=null && item.algorithmType != ''){
device_algo_config[item.deviceId] = item.algorithmType
isTrue = true
}
})
if(isTrue == true){
data.deviceAlgoConfig = JSON.stringify(device_algo_config)
}
updateScenarios(data).then((res:any) => {
if (res == true) {
ElMessage({
type: "success",
message: "保存成功",
});
dialogEditVisible.value = false;
gettableData();
}
})
}
onMounted(() => {
getAlgorithmType()
gettableData();
initDeviceData()
});
function closeCreatescenario(){
dialogVisible.value = false;
gettableData();
}
function confirmationAnalysis(row: any) {
ElMessageBox.confirm("确定对"+ row.name +"故情景分析进行模拟吗?", "确认模拟", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
let params = {
projectId: row.projectId,
scenarioId: row.scenarioId,
};
simRun(params).then((res:any) => {
if (res.code == '0') {
ElMessage({
message: '模拟计算成功',
type: 'success',
})
gettableData();
}else{
ElMessage({
message: '模拟计算失败',
type: 'error',
})
}
});
})
}
const isShowCondition = ref<boolean>(false); // 是否显示条件模型
const conditionModelRef = ref<any>() // 条件模型实例
function handleScenarioClose(){
isShowCondition.value = false;
}
function submitConditionClick(){
const tempData = conditionModelRef.value?.submitClick()
let data:any = []
tempData.forEach((item: any) => {
data.push({
triggerTime:'0',
eventId: item.eventId ==null? '' : item.eventId,
attrChanges:JSON.stringify(item) ,
scenarioId: scenarioId.value
})
})
eventsBatchSave(data).then((res:any) => {
if (res.code == '0') {
isShowCondition.value = false;
gettableData();
ElMessage({
type: "success",
message: "修改成功",
});
}
})
}
function resultClick(row:any){
title.value = props.projectInfo.name + ' - ' + props.projectInfo.createdAt + ' - ' + row.name
isAcitve.value = 0
scenarioId.value = row.scenarioId,
info.value = row
getMenuData()
isShowResult.value = true;
}
const isShowResult = ref<boolean>(false); // 是否显示结果模型
const deviceList:any = ref([]) // 变动设备列表
const isAcitve:any = ref(-1) // 选中项
const deviceId:any = ref('') // 变动设备id
function getMenuData() {
topologyDevicesLsit({
id: props.projectInfo.projectId
}).then((res:any) => {
if (res.code == 0) {
deviceList.value = res.data;
deviceId.value = res.data[0].deviceId
}
})
}
// const title = ref<string>('') // 标题
function handleClick(item:any, index:any){
// formulaInfo.value.correlation = JSON.parse(JSON.stringify(item.deviceName))
isAcitve.value = index
deviceId.value = ""
setTimeout(() => {
deviceId.value = item.deviceId
},
200);
}
function handleResultClose(){ // 关闭结果模型
isShowResult.value = false;
}
const isEchartsModel = ref<any>(0) // 是否显示echarts模型
function changeShowResult(isShow:any){ // 切换显示结果模型
isEchartsModel.value = isShow
let tempId = deviceId.value
deviceId.value = ''
setTimeout(() => {
deviceId.value = tempId
},
200);
}
const deviceData: any = ref([]); // 设备数据
function initDeviceData(){
deviceData.value = []
topologyDevicesLsit({
id: props.projectInfo.projectId
}).then((res:any) => {
if (res.code == 0) {
res.data.forEach((item: any) => {
deviceData.value.push({
deviceId: item.deviceId,
deviceName: item.deviceName,
algorithmType: ''
})
})
}
})
}
function changeAlgorithmType(){
deviceData.value.forEach((item: any) => {
item.algorithmType = ""
})
}
function changeSonAlgorithmType(){
info.value.algorithmType = ""
}
</script>
<template>
<div class="scenario-box">
<div class="conductscenario-bg-box">
<div class="scenario-search-box"
style="display: flex;display: -webkit-flex; justify-content: space-between; -webkit-justify-content: space-between;margin-bottom: 10px">
<div style="display: flex;display: -webkit-flex;">
<el-input v-model="input" placeholder="请输入事故情景名称" @keyup.enter="gettableData" style="width: 200px" clearable />
<el-button type="primary" style="margin-left: 10px" @click="gettableData">搜索</el-button>
</div>
<div>
<el-button type="primary" @click="addClick">
新增</el-button>
<el-button :type="multipleSelection.length > 0 ? 'primary' : ''"
:disabled="multipleSelection.length <= 0" @click="delClick">删除</el-button>
</div>
</div>
<el-table v-loading="loading" :data="tableData" style="width: 100%; height: calc(100vh - 260px);margin-bottom: 10px;" border
@selection-change="handleSelectionChange"
:header-cell-style="{ background: 'rgb(250 250 250)', color: '#383838', height: '50px' }">
<el-table-column type="selection" width="50" align="center"></el-table-column>
<el-table-column prop="name" label="事故情景名称" min-width="180"></el-table-column>
<el-table-column prop="algorithmType" label="算法模型" min-width="180"></el-table-column>
<el-table-column prop="createdAt" label="模拟时间" width="200">
<template #default="scope">
<span v-if="scope.row.createdAt != null">{{ dateFormat(scope.row.createdAt) }}</span>
<span v-else>--</span>
</template>
</el-table-column>
<el-table-column prop="updatedAt" label="状态" width="100">
<template #default="scope">
<span v-if="scope.row.status == 0" style="color: #0099FF;">初始创建</span>
<span v-else-if="scope.row.status == 1" style="color: #FF9900;">进行中</span>
<span v-else style="color: #009933;">已完成</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="190">
<template #default="scope">
<span
style="display: flex;display: -webkit-flex; justify-content: space-around;-webkit-justify-content: space-around; ">
<img src="@/assets/table/edit.png" alt="" title="修改" v-if="scope.row.status == 0"
@click="editClick(scope.row,'修改')" style="cursor: pointer; ">
<img src="@/assets/table/view.png" alt="" title="查看" v-if="scope.row.status != 0"
@click="editClick(scope.row,'查看')" style="cursor: pointer; ">
<img src="@/assets/table/shifa.png" alt="" title="始发事件" v-if="scope.row.status == 0"
@click="departureClick(scope.row,'初始条件设置')" style="cursor: pointer; ">
<img src="@/assets/table/see.png" alt="" title="查看始发事件" v-if="scope.row.status != 0"
@click="departureClick(scope.row,'查看初始条件')" style="cursor: pointer; ">
<img src="@/assets/table/moni.png" alt="" title="模拟计算" v-if="scope.row.status == 0|| scope.row.status == 1"
@click="confirmationAnalysis(scope.row)" style="cursor: pointer; ">
<img src="@/assets/table/moni_disabled.png" alt="" title="查看始发事件" v-if="scope.row.status != 0 &&scope.row.status != 1">
<img src="@/assets/table/result.png" alt="" title="计算结果" v-if="scope.row.status == 2"
@click="resultClick(scope.row)" style="cursor: pointer; ">
<img src="@/assets/table/result_disabled.png" alt="" title="计算结果" v-if="scope.row.status != 2">
<img src="@/assets/table/del.png" alt="" title="删除" v-if="scope.row.status == 0"
@click="delAloneClick(scope.row)" style="cursor: pointer; ">
<img v-else src="@/assets/table/del_disabled.png" alt="" title="删除"
>
</span>
</template>
</el-table-column>
</el-table>
<Page :total="total" v-model:size="queryParams.size" v-model:current="queryParams.current" @pagination="gettableData()" ></Page>
</div>
<Createscenario v-if="dialogVisible" :projectInfo="projectInfo" @closeCreatescenario ="closeCreatescenario"/>
<el-dialog v-model="dialogEditVisible" :close-on-click-modal="false"
:modal="false" draggable :before-close="handleClose" :title="title"
append-to-body width="590px">
<el-form ref="infoForm" :model="info" :rules="rules" label-width="140px" style="width:500px;height: calc(100vh - 300px);overflow: auto;padding-top: 10px;">
<el-form-item label="事故情景名称:" prop="name">
<el-input v-model="info.name" style="width: 100%" placeholder="输入事故情景名称" :disabled="title == '查看事故情景'"></el-input>
</el-form-item>
<el-form-item label="算法类型:" :disabled="title == '查看事故情景'">
<el-select v-model="info.algorithmType" placeholder="请选择" style="width:100%;" clearable
:disabled="title == '查看事故情景'" @change="changeAlgorithmType">
<el-option v-for="item in algorithmTypeData" :key="item.algorithmType" :label="item.name + '(' + item.algorithmType + ')' " :value="item.algorithmType" />
</el-select>
</el-form-item>
<el-form-item label="设备算法配置映射:">
<div style="width: 100%;padding-top: 40px;">
<div v-for="item in deviceData" :key="item.deviceType" style="display: flex;align-items: center;margin-bottom: 10px;">
<div style="width: 150px;text-align: right;padding-right: 10px;">{{item.deviceName}}</div>
<el-select v-model="item.algorithmType" placeholder="请选择" style="width:100%;"
clearable :disabled="title == '查看事故情景'" @change="changeSonAlgorithmType">
<el-option v-for="item in algorithmTypeData" :key="item.algorithmType" :label="item.name" :value="item.algorithmType" />
</el-select>
</div>
</div>
</el-form-item>
<el-form-item label="Keff预警阈值" prop="keffThreshold">
<el-input v-model="info.keffThreshold" style="width: 100%" placeholder="输入Keff预警阈值" :disabled="title == '查看事故情景'"></el-input>
</el-form-item>
<el-form-item label="事故情景描述:" :disabled="title == '查看事故情景'">
<el-input type="textarea" v-model="info.description" :rows="6" style="width: 100%" placeholder="请输入事故情景描述" :disabled="title == '查看事故情景'"></el-input>
</el-form-item>
</el-form>
<div style="text-align: right;">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="submitClick" v-if="title == '修改事故情景'">确定</el-button>
</div>
</el-dialog>
<el-dialog v-model="isShowCondition" :close-on-click-modal="false"
:modal="false" draggable :before-close="handleScenarioClose" :title="title"
append-to-body width="1000px">
<ConditionModel v-if="isShowCondition" ref="conditionModelRef" :projectInfo="projectInfo" :scenarioId="scenarioId"
:isEdit="isEdit"
/>
<div style="text-align: center;">
<el-button @click="handleScenarioClose">取消</el-button>
<el-button type="primary" @click="submitConditionClick" v-if="title == '初始条件设置'">确定</el-button>
</div>
</el-dialog>
<el-dialog v-model="isShowResult" :close-on-click-modal="false"
:modal="false" draggable :before-close="handleResultClose" :title="title"
append-to-body width="calc(100% - 100px)" class="resultmodel-dialog-box">
<div style="position: relative; display: flex; margin-bottom: 0px; border-bottom: 1px solid #e5e5e5;padding-bottom: 5px;padding-top: 10px;padding-left: 10px;">
<div @click="changeShowResult(0)" class="adddevice_navigation_left" :class="{'adddevice_navigation_activeleft':isEchartsModel == 0}">图形化</div>
<div @click="changeShowResult(1)" class="adddevice_navigation_right" :class="{'adddevice_navigation_activeright':isEchartsModel == 1}">列表</div>
<div @click="changeShowResult(2)" class="adddevice_navigation_right" :class="{'adddevice_navigation_activeright':isEchartsModel == 2}">图形</div>
<el-button v-if="isEchartsModel == 1" style="position: absolute;right: 50px;top: 5px;" type="primary">导出全部</el-button>
</div>
<Viewx6 v-if="isShowResult && isEchartsModel == 0 " :projectId="projectInfo.projectId"
:scenarioId="scenarioId"
:keffThreshold="info.keffThreshold"
/>
<div style="display: flex;" v-if="isEchartsModel == 1 || isEchartsModel == 2">
<div class="choiceMateria-left">
<div class="choiceMateria-left-title">设备列表</div>
<div style="height: calc(100% - 70px);overflow: auto;margin-top: 10px;">
<div v-for="(item, index) in deviceList" :key="index" class="choiceMateria-left-item"
:class="{'choiceMateria-item-active': index == isAcitve}"
@click="handleClick(item, index)">
{{ item.deviceName }}
</div>
</div>
</div>
<div style="padding-left: 45px;padding-top: 20px; width: calc(100% - 290px); height: calc(100vh - 150px);">
<TableModels v-if="isShowResult && isEchartsModel == 1 && deviceId !=''" :deviceId="deviceId" :scenarioId="scenarioId"/>
<EchartsModels v-if="isShowResult && isEchartsModel == 2 && deviceId !=''" :deviceId="deviceId" :scenarioId="scenarioId"/>
</div>
</div>
</el-dialog>
</div>
</template>
<style scoped>
.scenario-box {
padding-right: 10px;
}
:deep(.el-tree-node__content) {
font-size: 15px;
font-weight: 500;
width: 100%;
height: 40px;
}
.dialog-footer {
display: block;
margin-top: 20px;
}
.conductscenario-bg-box {
padding: 0px;
width: 100%;
height: calc(100vh - 130px);
overflow: auto;
background-color: rgba(255, 255, 255, 1);
border: none;
border-radius: 3px;
box-sizing: border-box;
padding-bottom: 10px;
}
.line {
height: 1px;
background: rgba(240, 241, 242, 1);
margin-top: 12px;
}
.menuspan {
display: inline-block;
width: 120px;
font-size: 14px;
font-family: "微软雅黑";
font-weight: 400;
font-style: normal;
color: #787878;
}
</style>
<style>
.el-dialog {
padding: 0 !important;
border-radius: 10px !important;
border: 1px solid #363636 !important;
}
.el-dialog .el-dialog__header{
display: flex;
display: -webkit-flex;
justify-content: flex-start;-webkit-justify-content: flex-start;
align-items: center;-webkit-align-items: center;
padding: 10px 20px;
background-color: #f1f3f8 !important;
font-family: 'Arial Negreta', 'Arial Normal', 'Arial', sans-serif;
font-weight: 700;
font-style: normal;
font-size: 16px;
color: #1B1B1B;
text-align: left;
border-radius: 10px 10px 0 0;
height: 50px;
}
.el-dialog .el-dialog__close{
font-size: 22px;
color: rgb(80, 80, 80);
}
.el-dialog .el-dialog__headerbtn{
display: flex;
align-items: center;
}
.el-dialog .el-dialog__body{
padding: 20px 40px !important;
}
.el-dialog .el-input{
--el-input-inner-height: 38px
}
.el-dialog .el-select__wrapper{
height: 40px
}
.scenario-search-box .el-button{
height: 36px !important;
}
.el-dialog .el-button{
height: 40px;
}
.scenario-setting-box{
width: 900px;
height: 100px;
background: inherit;
background-color: rgba(255, 255, 255, 1);
border: none;
border-radius: 5px;
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
margin: 0 auto;
display: flex;
justify-content: center;
align-items: center;
}
.scenario-setting-box .el-step__icon.is-text{
width: 30px;
height: 30px;
line-height: 30px;
background-color: #c9c9c9 ;
border-color: #c9c9c9 ;
color: #fff;
}
.scenario-setting-box .is-finish .el-step__icon.is-text{
width: 30px;
height: 30px;
line-height: 30px;
background-color: #266fff ;
border-color: #266fff ;
color: #fff;
}
.scenario-setting-box .is-process .el-step__icon.is-text{
width: 30px;
height: 30px;
line-height: 30px;
background-color: #266fff ;
border-color: #266fff ;
color: #fff;
}
.scenario-setting-box .el-step__title{
font-family: 'Arial Normal', 'Arial', sans-serif;
font-weight: 400;
font-style: normal;
font-size: 16px;
letter-spacing: normal;
}
.scenario-setting-box .el-step__title.is-finish{
color: #266fff ;
}
.scenario-setting-box .el-step__title.is-process{
color: #266fff ;
}
.scenario-setting-box .el-step__line{
height: 1px !important;
background-color: #ebebeb !important;
}
.scenario-setting-bottombox{
width: 900px;
height: calc(100vh - 300px);
background: inherit;
background-color: rgba(255, 255, 255, 1);
border: none;
border-radius: 5px;
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
margin: 20px auto;
display: flex;
justify-content: center;
align-items: center;
}
.choiceMateria-left{
width: 240px;
height: calc(100vh - 200px);
border-right: 1px solid rgba(240, 240, 240, 1);
box-sizing: border-box;
}
.choiceMateria-left-title{
width: 240px;
height: 44px;
line-height: 44px;
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
font-weight: 700;
font-style: normal;
font-size: 14px;
color: #1B1B1B;
padding-left: 16px;
border-bottom: 1px solid rgba(240, 240, 240, 1);
}
.choiceMateria-left-item{
width: 100%;
height: 40px;
line-height: 40px;
padding-left: 16px;
font-family: 'Arial Normal', 'Arial';
font-weight: 400;
font-style: normal;
font-size: 14px;
color: #333333;
cursor: pointer;
}
.choiceMateria-left-item:hover{
background-color: #f5f8ff;
}
.choiceMateria-item-active{
background-color: #f5f8ff;
color: #266fff;
}
.adddevice_navigation_left{
width: 110px;
height: 32px;
line-height: 32px;
text-align: center;
cursor: pointer;
font-family: 'Arial Normal', 'Arial';
font-weight: 400;
font-style: normal;
font-size: 14px;
color: #363636;
background-image: url('@/assets/x6/navleft.png');
}
.adddevice_navigation_left:hover{
color: #266fff ;
}
.adddevice_navigation_activeleft{
background-image: url('@/assets/x6/navleft_active.png');
color: #fff !important;
}
.adddevice_navigation_right{
width: 110px;
height: 32px;
line-height: 32px;
text-align: center;
cursor: pointer;
font-family: 'Arial Normal', 'Arial';
font-weight: 400;
font-style: normal;
font-size: 14px;
color: #363636;
background-image: url('@/assets/x6/navright.png');
}
.adddevice_navigation_right:hover{
color: #266fff ;
}
.adddevice_navigation_activeright{
background-image: url('@/assets/x6/navright_active.png');
color: #fff !important;
}
</style>
<style>
.resultmodel-dialog-box.el-dialog .el-dialog__body{
padding: 0 !important;
}
.resultmodel-dialog-box.el-dialog{
transform: translate(0) !important;
}
</style>