5-19会后bug修改
This commit is contained in:
parent
da1c45f4c6
commit
5aa90c2fcc
@ -22,12 +22,14 @@
|
|||||||
"dayjs": "^1.11.10",
|
"dayjs": "^1.11.10",
|
||||||
"default-passive-events": "^2.0.0",
|
"default-passive-events": "^2.0.0",
|
||||||
"docx-preview": "^0.1.15",
|
"docx-preview": "^0.1.15",
|
||||||
|
"dompurify": "^3.2.6",
|
||||||
"echarts": "^5.2.2",
|
"echarts": "^5.2.2",
|
||||||
"element-plus": "^2.2.27",
|
"element-plus": "^2.2.27",
|
||||||
"gm-crypt": "^0.0.2",
|
"gm-crypt": "^0.0.2",
|
||||||
"js-base64": "^3.7.5",
|
"js-base64": "^3.7.5",
|
||||||
"js-cookie": "^3.0.1",
|
"js-cookie": "^3.0.1",
|
||||||
"jsencrypt": "^3.3.2",
|
"jsencrypt": "^3.3.2",
|
||||||
|
"markdown-it": "^14.1.0",
|
||||||
"moment": "^2.29.4",
|
"moment": "^2.29.4",
|
||||||
"nprogress": "^0.2.0",
|
"nprogress": "^0.2.0",
|
||||||
"path-browserify": "^1.0.1",
|
"path-browserify": "^1.0.1",
|
||||||
@ -51,6 +53,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@commitlint/cli": "^18.4.3",
|
"@commitlint/cli": "^18.4.3",
|
||||||
"@commitlint/config-conventional": "^16.2.1",
|
"@commitlint/config-conventional": "^16.2.1",
|
||||||
|
"@types/dompurify": "^3.0.5",
|
||||||
"@types/node": "^20.3.1",
|
"@types/node": "^20.3.1",
|
||||||
"@types/nprogress": "^0.2.0",
|
"@types/nprogress": "^0.2.0",
|
||||||
"@types/path-browserify": "^1.0.0",
|
"@types/path-browserify": "^1.0.0",
|
||||||
|
@ -3,5 +3,7 @@ window.webConfig = {
|
|||||||
"wsApiBaseUrl": "ws://192.168.1.20:8090/",
|
"wsApiBaseUrl": "ws://192.168.1.20:8090/",
|
||||||
"webApiMonitorUrl": "http://192.168.1.20:18080",
|
"webApiMonitorUrl": "http://192.168.1.20:18080",
|
||||||
"answeringUrl":"http://121.37.111.42:8080/ui/chat/a9d56e68484c5594",
|
"answeringUrl":"http://121.37.111.42:8080/ui/chat/a9d56e68484c5594",
|
||||||
|
"pythonUrl":"http://121.37.111.42:8080/api",
|
||||||
|
"application_id":"6b915c22-351c-11f0-8b7c-0242ac130003",
|
||||||
"webSystemTitle":"标题"
|
"webSystemTitle":"标题"
|
||||||
}
|
}
|
@ -1,11 +1,24 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ElConfigProvider } from 'element-plus';
|
import { ElConfigProvider } from 'element-plus';
|
||||||
import { useAppStore } from '@/store/modules/app';
|
import { useAppStore } from '@/store/modules/app';
|
||||||
|
// import { nextTick } from 'process';
|
||||||
|
import { ref, nextTick, provide } from 'vue';
|
||||||
const appStore = useAppStore();
|
const appStore = useAppStore();
|
||||||
|
|
||||||
|
const isRouterAlive = ref(true)
|
||||||
|
const reload = () => {
|
||||||
|
isRouterAlive.value = false;
|
||||||
|
nextTick(() => {
|
||||||
|
isRouterAlive.value = true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
provide('reload', reload)
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-config-provider :locale="appStore.locale" :size="appStore.size">
|
<el-config-provider :locale="appStore.locale" :size="appStore.size">
|
||||||
<router-view />
|
<router-view v-if="isRouterAlive" />
|
||||||
</el-config-provider>
|
</el-config-provider>
|
||||||
</template>
|
</template>
|
||||||
|
@ -32,3 +32,12 @@ export function getHistoricalCurve(params:any){
|
|||||||
params:params
|
params:params
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
//导出环境历史数据
|
||||||
|
export function exportDeviceWorkData(params:any){
|
||||||
|
return request({
|
||||||
|
url: '/auxcontrol/device-work-data/exportDeviceWorkData' ,
|
||||||
|
method: 'get',
|
||||||
|
params:params,
|
||||||
|
responseType: 'arraybuffer'
|
||||||
|
});
|
||||||
|
}
|
@ -27,9 +27,9 @@ export function getTaskToDo(params:any){
|
|||||||
}
|
}
|
||||||
|
|
||||||
//分页查询检修计划
|
//分页查询检修计划
|
||||||
export function getTaskList(params:any){
|
export function getExaminePlanPage(params:any){
|
||||||
return request({
|
return request({
|
||||||
url: '/patroltasks/examine-plan/getTaskList' ,
|
url: '/patroltasks/examine-plan/getExaminePlanPage' ,
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params:params
|
params:params
|
||||||
});
|
});
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import request from '@/utils/request';
|
import request from '@/utils/request';
|
||||||
|
|
||||||
//获取表格内容
|
//获取表格内容
|
||||||
export function getTaskList(params: any) {
|
export function getQuartzJobList(params: any) {
|
||||||
return request({
|
return request({
|
||||||
url: '/system/quartzjob/getQuartzJobList',
|
url: '/system/quartzjob/getQuartzJobList',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
|
BIN
riis-web/src/assets/navigation/u126.png
Normal file
BIN
riis-web/src/assets/navigation/u126.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 428 B |
BIN
riis-web/src/assets/navigation/u157.png
Normal file
BIN
riis-web/src/assets/navigation/u157.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 449 B |
BIN
riis-web/src/assets/navigation/u331.png
Normal file
BIN
riis-web/src/assets/navigation/u331.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 473 B |
@ -400,6 +400,25 @@ onMounted(() => {
|
|||||||
audioElement.value.addEventListener('ended', () => {
|
audioElement.value.addEventListener('ended', () => {
|
||||||
analyzer.stopAnalyze();
|
analyzer.stopAnalyze();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 自动播放逻辑
|
||||||
|
if (props.fileUrl) {
|
||||||
|
// 添加 loadeddata 事件监听器,确保音频加载完成后再播放
|
||||||
|
const handleLoaded = () => {
|
||||||
|
audioElement.value.play().catch(error => {
|
||||||
|
console.error('自动播放失败:', error);
|
||||||
|
// 提示用户需手动触发播放
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 监听 loadeddata 事件,确保音频加载完成
|
||||||
|
audioElement.value.addEventListener('loadeddata', handleLoaded, { once: true });
|
||||||
|
|
||||||
|
// 如果音频已加载完成,直接播放(如缓存情况)
|
||||||
|
if (audioElement.value.readyState >= HTMLMediaElement.HAVE_FUTURE_DATA) {
|
||||||
|
handleLoaded();
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
@ -413,30 +432,40 @@ onBeforeUnmount(() => {
|
|||||||
/**
|
/**
|
||||||
* 文件URL变更监听器
|
* 文件URL变更监听器
|
||||||
*/
|
*/
|
||||||
watch(() => props.fileUrl, async () => {
|
watch(() => props.fileUrl, async () => {
|
||||||
try {
|
try {
|
||||||
// 停止当前分析
|
|
||||||
if (analyzer) {
|
if (analyzer) {
|
||||||
analyzer.stopAnalyze();
|
analyzer.stopAnalyze();
|
||||||
await analyzer.audioContext.close();
|
await analyzer.audioContext.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 重置图表
|
|
||||||
chartInstance.setOption({
|
chartInstance.setOption({
|
||||||
series: [{ data: [] }, { data: [] }, { data: [] }],
|
series: [{ data: [] }, { data: [] }, { data: [] }],
|
||||||
graphic: [{ invisible: true }]
|
graphic: [{ invisible: true }]
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
// 等待DOM更新
|
|
||||||
await new Promise(resolve => setTimeout(resolve, 50));
|
await new Promise(resolve => setTimeout(resolve, 50));
|
||||||
|
|
||||||
// 创建新分析器
|
|
||||||
analyzer = new AudioAnalyzer();
|
analyzer = new AudioAnalyzer();
|
||||||
audioElement.value.load();
|
audioElement.value.load();
|
||||||
|
|
||||||
// 重新绑定事件监听器
|
// 重新绑定事件监听器
|
||||||
audioElement.value.removeEventListener('play', playHandler);
|
audioElement.value.removeEventListener('play', playHandler);
|
||||||
audioElement.value.addEventListener('play', playHandler);
|
audioElement.value.addEventListener('play', playHandler);
|
||||||
|
|
||||||
|
// 添加 loadeddata 事件监听器,确保新音频加载完成后播放
|
||||||
|
const handleLoaded = () => {
|
||||||
|
audioElement.value.play().catch(error => {
|
||||||
|
console.error('文件加载后自动播放失败:', error);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
audioElement.value.addEventListener('loadeddata', handleLoaded, { once: true });
|
||||||
|
|
||||||
|
// 如果音频已加载完成,直接播放(如缓存情况)
|
||||||
|
if (audioElement.value.readyState >= HTMLMediaElement.HAVE_FUTURE_DATA) {
|
||||||
|
handleLoaded();
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('文件加载失败:', error);
|
console.error('文件加载失败:', error);
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,16 @@
|
|||||||
</el-badge>
|
</el-badge>
|
||||||
<div class="header-informationImg" v-else></div>
|
<div class="header-informationImg" v-else></div>
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
<el-select v-if="userStore.stationData.length > 1" v-model="userStore.stationId" placeholder="Select" style="width: 160px;margin-right: 15px;"
|
||||||
|
@change="changestation()">
|
||||||
|
<el-option v-for="item in userStore.stationData" :key="item.stationId" :label="item.stationName"
|
||||||
|
:value="item.stationId" />
|
||||||
|
</el-select>
|
||||||
|
<div v-if="userStore.stationData.length == 1" style="margin-right: 15px;">
|
||||||
|
{{ userStore.stationData[0].stationName }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="nav-right-text" style="margin-right: 20px;">
|
<div class="nav-right-text" style="margin-right: 20px;">
|
||||||
<div class="header-left-time" style="padding: 0;">用户名:{{ userStore.username }}</div>
|
<div class="header-left-time" style="padding: 0;">用户名:{{ userStore.username }}</div>
|
||||||
<!-- <div class="header-left-time" style="padding-top: 10px;">变电站:{{ userStore.regionName }}</div> -->
|
<!-- <div class="header-left-time" style="padding-top: 10px;">变电站:{{ userStore.regionName }}</div> -->
|
||||||
@ -39,7 +49,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, onMounted, onBeforeUnmount, nextTick, watch } from 'vue';
|
import { ref, onMounted, onBeforeUnmount, nextTick, watch, inject } from 'vue';
|
||||||
import { useUserStore } from '@/store/modules/user';
|
import { useUserStore } from '@/store/modules/user';
|
||||||
import { getOneById, downloadConfigFile } from "@/api/versionVersioning";
|
import { getOneById, downloadConfigFile } from "@/api/versionVersioning";
|
||||||
import Cookies from 'js-cookie';
|
import Cookies from 'js-cookie';
|
||||||
@ -54,6 +64,7 @@ import { getNotCheckAlarmCount } from '@/api/home';
|
|||||||
import { constantRoutes } from '@/router';
|
import { constantRoutes } from '@/router';
|
||||||
import { useFullscreen } from '@vueuse/core';
|
import { useFullscreen } from '@vueuse/core';
|
||||||
import { downloadFile } from '@/utils/index';
|
import { downloadFile } from '@/utils/index';
|
||||||
|
const reload: any = inject('reload')
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
CloseNav: {
|
CloseNav: {
|
||||||
required: false,
|
required: false,
|
||||||
@ -106,6 +117,10 @@ function dateFormat(row: any) {
|
|||||||
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
|
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function changestation() {
|
||||||
|
userStore.stationCode = userStore.stationData.find((item:any) => item.stationId === userStore.stationId)?.stationCode;
|
||||||
|
reload()
|
||||||
|
}
|
||||||
function alarmInfoClick() {
|
function alarmInfoClick() {
|
||||||
router.push(`/task/alarmInfo/index`)
|
router.push(`/task/alarmInfo/index`)
|
||||||
// let item = {
|
// let item = {
|
||||||
@ -247,6 +262,31 @@ function getData() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
const routers = useRoute();
|
const routers = useRoute();
|
||||||
|
const ws1 = new WebSocket(userStore.wsApiBaseUrl + '/websocket/check_' + userStore.stationId);
|
||||||
|
function setupWebSocket() {
|
||||||
|
|
||||||
|
ws1.onopen = () => {
|
||||||
|
console.log('WebSocket连接失败');
|
||||||
|
};
|
||||||
|
ws1.onerror = (error: any) => {
|
||||||
|
};
|
||||||
|
ws1.onmessage = (e: any) => {
|
||||||
|
console.log('收到服务器数据:')
|
||||||
|
getMessage()
|
||||||
|
}
|
||||||
|
ws1.onclose = () => {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
function getMessage() {
|
||||||
|
getNotCheckAlarmCount({
|
||||||
|
stationId: userStore.stationId
|
||||||
|
}).then((res: any) => {
|
||||||
|
alarmCount.value = res.data.count
|
||||||
|
userStore.alarmCount = res.data.count
|
||||||
|
})
|
||||||
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getData()
|
getData()
|
||||||
getTimes()
|
getTimes()
|
||||||
@ -263,15 +303,8 @@ onMounted(() => {
|
|||||||
titleData.value.push(userStore.stationData[j])
|
titleData.value.push(userStore.stationData[j])
|
||||||
}
|
}
|
||||||
|
|
||||||
if (userStore.stationId != undefined && userStore.stationId != "") {
|
getMessage()
|
||||||
getNotCheckAlarmCount({
|
setupWebSocket()
|
||||||
stationId: userStore.stationId
|
|
||||||
}).then((res: any) => {
|
|
||||||
alarmCount.value = res.data.count
|
|
||||||
userStore.alarmCount = res.data.count
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
navlist.value = navlist.value.concat(userStore.menuArr)
|
navlist.value = navlist.value.concat(userStore.menuArr)
|
||||||
|
|
||||||
for (let i = 0; i < navlist.value.length; i++) {
|
for (let i = 0; i < navlist.value.length; i++) {
|
||||||
@ -295,6 +328,11 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
|
onBeforeUnmount(() => {
|
||||||
|
if (ws1 != null) {
|
||||||
|
ws1.close()
|
||||||
|
}
|
||||||
|
})
|
||||||
function logout() {
|
function logout() {
|
||||||
ElMessageBox.confirm('确定注销并退出系统吗?', '提示', {
|
ElMessageBox.confirm('确定注销并退出系统吗?', '提示', {
|
||||||
confirmButtonText: '确定',
|
confirmButtonText: '确定',
|
||||||
|
@ -42,6 +42,8 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
const webApiBaseUrl:any = process.env.NODE_ENV=='development'? import.meta.env.VITE_APP_BASE_API:window.webConfig.webApiBaseUrl
|
const webApiBaseUrl:any = process.env.NODE_ENV=='development'? import.meta.env.VITE_APP_BASE_API:window.webConfig.webApiBaseUrl
|
||||||
const wsApiBaseUrl:any = process.env.NODE_ENV=='development'? import.meta.env.VITE_APP_BASE_WS:window.webConfig.wsApiBaseUrl
|
const wsApiBaseUrl:any = process.env.NODE_ENV=='development'? import.meta.env.VITE_APP_BASE_WS:window.webConfig.wsApiBaseUrl
|
||||||
const answeringUrl:any = window.webConfig.answeringUrl
|
const answeringUrl:any = window.webConfig.answeringUrl
|
||||||
|
const pythonUrl:any = window.webConfig.pythonUrl
|
||||||
|
const application_id:any = window.webConfig.application_id
|
||||||
const promptTitle:any = ref('')
|
const promptTitle:any = ref('')
|
||||||
// actions
|
// actions
|
||||||
|
|
||||||
@ -51,12 +53,12 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
loginApi(loginData)
|
loginApi(loginData)
|
||||||
.then((response:any) => {
|
.then((response:any) => {
|
||||||
|
|
||||||
if(response.msg.indexOf("updatePassword_") != -1){
|
if (response.msg.indexOf("您的密码为初始密码,存在安全风险,请立即修改初始密码!") != -1 || response.msg.indexOf("您的密码已到期") != -1) {
|
||||||
if(response.msg.split('_')[1]== "initial"){
|
promptTitle.value = response.msg
|
||||||
promptTitle.value = "您的密码为初始密码,存在安全风险,请立即修改初始密码!"
|
// if (response.msg.indexOf("您的密码为初始密码,存在安全风险,请立即修改初始密码!") != -1) {
|
||||||
}else{
|
// } else {
|
||||||
promptTitle.value = "您的密码已到期("+ response.msg.split('_')[1] +"天),请立即修改密码!"
|
// promptTitle.value = response.msg
|
||||||
}
|
// }
|
||||||
isExpire.value = true
|
isExpire.value = true
|
||||||
const { token } = response.data;
|
const { token } = response.data;
|
||||||
Token.value = token;
|
Token.value = token;
|
||||||
@ -251,7 +253,9 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
webApiMonitorUrl,
|
webApiMonitorUrl,
|
||||||
webApiBaseUrl,
|
webApiBaseUrl,
|
||||||
wsApiBaseUrl,
|
wsApiBaseUrl,
|
||||||
answeringUrl
|
answeringUrl,
|
||||||
|
pythonUrl,
|
||||||
|
application_id
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -5857,19 +5857,16 @@ function setupWebSocket() {
|
|||||||
|
|
||||||
//详细信息弹窗
|
//详细信息弹窗
|
||||||
.detailed-information {
|
.detailed-information {
|
||||||
position: fixed;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
top: 0px;
|
|
||||||
z-index: 1002;
|
|
||||||
|
|
||||||
.examination {
|
.examination {
|
||||||
width: 406px;
|
width: 406px;
|
||||||
|
height: 330px;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
background: url(@/assets/3d/sxjxq.png) no-repeat;
|
background: url(@/assets/3d/sxjxq.png) no-repeat;
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
padding: 0 25px 15px;
|
padding: 0 25px 15px;
|
||||||
|
|
||||||
|
|
||||||
.examination-title {
|
.examination-title {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -5899,8 +5896,7 @@ function setupWebSocket() {
|
|||||||
margin-top: 11px;
|
margin-top: 11px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-input-number__decrease) {
|
:deep(.el-input-number__decrease) {
|
||||||
|
@ -240,7 +240,7 @@ const multipleTableRef = ref()
|
|||||||
function addMaster() {
|
function addMaster() {
|
||||||
title.value = '选择主设备'
|
title.value = '选择主设备'
|
||||||
masterble.value = true
|
masterble.value = true
|
||||||
getbybay()
|
getQuartzJobList()
|
||||||
|
|
||||||
}
|
}
|
||||||
function handleClose1() {
|
function handleClose1() {
|
||||||
@ -264,9 +264,10 @@ const multipleSelection = ref()
|
|||||||
function handleSelectionChange(val: any) {
|
function handleSelectionChange(val: any) {
|
||||||
multipleSelection.value = val;
|
multipleSelection.value = val;
|
||||||
}
|
}
|
||||||
function getbybay() {
|
function getQuartzJobList() {
|
||||||
masterLoading.value = true
|
masterLoading.value = true
|
||||||
masterform.value.algorithmId = algorithmId.value
|
masterform.value.algorithmId = algorithmId.value
|
||||||
|
masterform.value.stationCode = userStore.stationCode
|
||||||
getComponentPage(masterform.value).then((res: any) => {
|
getComponentPage(masterform.value).then((res: any) => {
|
||||||
masterLoading.value = false
|
masterLoading.value = false
|
||||||
masterdata.value = res.data.records
|
masterdata.value = res.data.records
|
||||||
@ -281,7 +282,7 @@ function addmasteras() {
|
|||||||
})
|
})
|
||||||
batchAddAlgorithmClassComponent(multipleSelection.value).then((res: any) => {
|
batchAddAlgorithmClassComponent(multipleSelection.value).then((res: any) => {
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
getbybay()
|
getQuartzJobList()
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
message: '添加成功'
|
message: '添加成功'
|
||||||
@ -295,12 +296,12 @@ const bayList: any = ref([])
|
|||||||
function getcomponent() {
|
function getcomponent() {
|
||||||
getSubstationBayByArea({ stationCode: userStore.stationCode, areaId: masterform.value.areaId }).then((res: any) => {
|
getSubstationBayByArea({ stationCode: userStore.stationCode, areaId: masterform.value.areaId }).then((res: any) => {
|
||||||
bayList.value = res.data
|
bayList.value = res.data
|
||||||
getbybay()
|
getQuartzJobList()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const mainList: any = ref([])
|
const mainList: any = ref([])
|
||||||
function getmainDevice() {
|
function getmainDevice() {
|
||||||
getbybay()
|
getQuartzJobList()
|
||||||
getSubstationMaindeviceList({ bayId: masterform.value.bayId }).then((res: any) => {
|
getSubstationMaindeviceList({ bayId: masterform.value.bayId }).then((res: any) => {
|
||||||
mainList.value = res.data
|
mainList.value = res.data
|
||||||
})
|
})
|
||||||
@ -552,7 +553,7 @@ onMounted(() => {
|
|||||||
<div>算法分类</div>
|
<div>算法分类</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="left_title_txt" @click="addAlgorithm()">
|
<div class="left_title_txt" @click="addAlgorithm()">
|
||||||
<img src="@/assets/navigation/u126.svg" alt="" title="新增算法">
|
<img src="@/assets/navigation/u126.png" alt="" title="新增算法">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-input v-model="algorithmClassName" clearable placeholder="请输入名称" @change="gettreedata"
|
<el-input v-model="algorithmClassName" clearable placeholder="请输入名称" @change="gettreedata"
|
||||||
@ -593,7 +594,7 @@ onMounted(() => {
|
|||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span
|
<span
|
||||||
style="display: flex;display: -webkit-flex;justify-content: space-around;-webkit-justify-content: space-around; ">
|
style="display: flex;display: -webkit-flex;justify-content: space-around;-webkit-justify-content: space-around; ">
|
||||||
<img src="@/assets/newimg/ht_xg.png" alt="" title="关联" @click="editmain(scope.row)"
|
<img src="@/assets/tableIcon/ht_gl.png" alt="" title="关联" @click="editmain(scope.row)"
|
||||||
style="cursor: pointer;">
|
style="cursor: pointer;">
|
||||||
<img src="@/assets/newimg/ht_sc.png" alt="" title="删除" @click="delmain(scope.row)"
|
<img src="@/assets/newimg/ht_sc.png" alt="" title="删除" @click="delmain(scope.row)"
|
||||||
style="cursor: pointer;">
|
style="cursor: pointer;">
|
||||||
@ -707,7 +708,7 @@ onMounted(() => {
|
|||||||
<template #header>
|
<template #header>
|
||||||
<div class="table_header">
|
<div class="table_header">
|
||||||
<div>操作</div>
|
<div>操作</div>
|
||||||
<img src="@/assets/navigation/u331.svg" alt="" title="增加算法" @click="addAlgorithmsan">
|
<img src="@/assets/navigation/u331.png" alt="" title="增加算法" @click="addAlgorithmsan">
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
@ -734,7 +735,7 @@ onMounted(() => {
|
|||||||
style="width: 100%;display: flex;justify-content: space-between;align-items: center;margin-top: 10px;">
|
style="width: 100%;display: flex;justify-content: space-between;align-items: center;margin-top: 10px;">
|
||||||
<div style="width: 100%;display: flex;align-items: center;">
|
<div style="width: 100%;display: flex;align-items: center;">
|
||||||
<el-input v-model="masterform.componentName" placeholder="请输入部件名称" clearable
|
<el-input v-model="masterform.componentName" placeholder="请输入部件名称" clearable
|
||||||
@change="getbybay()" style="width: 220px;margin-right: 10px;" />
|
@change="getQuartzJobList()" style="width: 220px;margin-right: 10px;" />
|
||||||
<el-select v-model="masterform.areaId" placeholder="区域 " @change="getcomponent()"
|
<el-select v-model="masterform.areaId" placeholder="区域 " @change="getcomponent()"
|
||||||
style="width: 220px;margin-right: 10px;" @clear="cleraareaId()" clearable>
|
style="width: 220px;margin-right: 10px;" @clear="cleraareaId()" clearable>
|
||||||
<el-option v-for="item in areaList" :key="item.areaId" :label="item.areaName"
|
<el-option v-for="item in areaList" :key="item.areaId" :label="item.areaName"
|
||||||
@ -747,11 +748,11 @@ onMounted(() => {
|
|||||||
:value="item.bayId" />
|
:value="item.bayId" />
|
||||||
</el-select>
|
</el-select>
|
||||||
<el-select v-model="masterform.mainDeviceId" placeholder="主设备" :disabled="!masterform.bayId"
|
<el-select v-model="masterform.mainDeviceId" placeholder="主设备" :disabled="!masterform.bayId"
|
||||||
@change="getbybay()" style="width: 220px;margin-right: 10px;" clearable>
|
@change="getQuartzJobList()" style="width: 220px;margin-right: 10px;" clearable>
|
||||||
<el-option v-for="item in mainList" :key="item.mainDeviceId" :label="item.mainDeviceName"
|
<el-option v-for="item in mainList" :key="item.mainDeviceId" :label="item.mainDeviceName"
|
||||||
:value="item.mainDeviceId" />
|
:value="item.mainDeviceId" />
|
||||||
</el-select>
|
</el-select>
|
||||||
<el-button class="searchButton" type="primary" @change="getbybay()">搜索</el-button>
|
<el-button class="searchButton" type="primary" @change="getQuartzJobList()">搜索</el-button>
|
||||||
</div>
|
</div>
|
||||||
<el-button class="searchButton" type="primary" @click="addmasteras()">确定</el-button>
|
<el-button class="searchButton" type="primary" @click="addmasteras()">确定</el-button>
|
||||||
</div>
|
</div>
|
||||||
@ -767,7 +768,7 @@ onMounted(() => {
|
|||||||
<el-table-column prop="componentName" label="部件" align="center"></el-table-column>
|
<el-table-column prop="componentName" label="部件" align="center"></el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<Page :total="mastertotal" v-model:size="masterform.size" v-model:current="masterform.current"
|
<Page :total="mastertotal" v-model:size="masterform.size" v-model:current="masterform.current"
|
||||||
@pagination="getbybay()"></Page>
|
@pagination="getQuartzJobList()"></Page>
|
||||||
</template>
|
</template>
|
||||||
</Eldialog>
|
</Eldialog>
|
||||||
<Eldialog v-if="mainble" :title="'关联参数'" :zIndex="2000" :width="'900px'" @before-close="handleClose2">
|
<Eldialog v-if="mainble" :title="'关联参数'" :zIndex="2000" :width="'900px'" @before-close="handleClose2">
|
||||||
|
@ -12,7 +12,7 @@ import { getTreefirst } from '@/api/device';
|
|||||||
import { stationOnline } from '@/api/substation';
|
import { stationOnline } from '@/api/substation';
|
||||||
import { useAppStore } from '@/store/modules/app';
|
import { useAppStore } from '@/store/modules/app';
|
||||||
import {
|
import {
|
||||||
getTaskList,
|
getExaminePlanPage,
|
||||||
addExaminePlan,
|
addExaminePlan,
|
||||||
updateExaminePlan,
|
updateExaminePlan,
|
||||||
deleteExaminePlan,
|
deleteExaminePlan,
|
||||||
@ -28,6 +28,8 @@ import { getTreeList } from '@/api/linksignal';
|
|||||||
import { getDeviceByType, getaccType, getMainEquipment } from '@/api/device';
|
import { getDeviceByType, getaccType, getMainEquipment } from '@/api/device';
|
||||||
import Page from '@/components/Pagination/page.vue';
|
import Page from '@/components/Pagination/page.vue';
|
||||||
import Eldialog from '@/components/seccmsdialog/eldialog.vue';
|
import Eldialog from '@/components/seccmsdialog/eldialog.vue';
|
||||||
|
import { useUserStore } from '@/store/modules/user';
|
||||||
|
const userStore = useUserStore();
|
||||||
|
|
||||||
// 列表页面方法和变量
|
// 列表页面方法和变量
|
||||||
//时间转换
|
//时间转换
|
||||||
@ -98,10 +100,11 @@ function getData() {
|
|||||||
size: paramstable.value.size,
|
size: paramstable.value.size,
|
||||||
current: paramstable.value.current,
|
current: paramstable.value.current,
|
||||||
configName: paramstable.value.configName,
|
configName: paramstable.value.configName,
|
||||||
bindStatus: paramstable.value.bindStatus
|
bindStatus: paramstable.value.bindStatus,
|
||||||
|
stationId:userStore.stationId
|
||||||
};
|
};
|
||||||
planLoading.value = true;
|
planLoading.value = true;
|
||||||
getTaskList(params)
|
getExaminePlanPage(params)
|
||||||
.then((res: any) => {
|
.then((res: any) => {
|
||||||
planLoading.value = false;
|
planLoading.value = false;
|
||||||
tableData.value = res.data.records;
|
tableData.value = res.data.records;
|
||||||
|
@ -7,11 +7,12 @@ export default {
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, onMounted, nextTick } from "vue";
|
import { ref, onMounted, nextTick } from "vue";
|
||||||
import { Search } from '@element-plus/icons-vue';
|
import { Search } from '@element-plus/icons-vue';
|
||||||
import { getDeviceSignalTree, querySignalDataById, workpage, getHistoricalCurve } from "@/api/datasurvey/index";
|
import { getDeviceSignalTree, querySignalDataById, workpage, getHistoricalCurve, exportDeviceWorkData } from "@/api/datasurvey/index";
|
||||||
import { useUserStore } from '@/store/modules/user';
|
import { useUserStore } from '@/store/modules/user';
|
||||||
import Page from '@/components/Pagination/page.vue'
|
import Page from '@/components/Pagination/page.vue'
|
||||||
import * as echarts from 'echarts'
|
import * as echarts from 'echarts'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
import { downloadFile } from '@/utils/index';
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
//左侧树形控件
|
//左侧树形控件
|
||||||
interface Tree {
|
interface Tree {
|
||||||
@ -38,6 +39,7 @@ const signName = ref('')
|
|||||||
function getTreeData() {
|
function getTreeData() {
|
||||||
treeloading.value = true
|
treeloading.value = true
|
||||||
getDeviceSignalTree(signaform.value).then((res: any) => {
|
getDeviceSignalTree(signaform.value).then((res: any) => {
|
||||||
|
treeloading.value = false
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
treedata.value = res.data
|
treedata.value = res.data
|
||||||
signaId.value = res.data[0].children[0].children[0].children[0].children[0].id
|
signaId.value = res.data[0].children[0].children[0].children[0].children[0].id
|
||||||
@ -49,7 +51,7 @@ function getTreeData() {
|
|||||||
gettabledata()
|
gettabledata()
|
||||||
getechartdata()
|
getechartdata()
|
||||||
}
|
}
|
||||||
treeloading.value = false
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
function handleNodeClick(data: any, node: any) {
|
function handleNodeClick(data: any, node: any) {
|
||||||
@ -139,8 +141,9 @@ function formatDate(isoString: any) {
|
|||||||
}
|
}
|
||||||
//折线图数据
|
//折线图数据
|
||||||
const echartdata: any = ref({})
|
const echartdata: any = ref({})
|
||||||
|
const type = ref(1)
|
||||||
function getechartdata() {
|
function getechartdata() {
|
||||||
getHistoricalCurve({ signalId: signaId.value }).then((res: any) => {
|
getHistoricalCurve({ signalId: signaId.value,type:type.value }).then((res: any) => {
|
||||||
echartdata.value = res.data
|
echartdata.value = res.data
|
||||||
drawEchart()
|
drawEchart()
|
||||||
})
|
})
|
||||||
@ -186,6 +189,22 @@ function gettoday() {
|
|||||||
detaall.value[1] = endTime
|
detaall.value[1] = endTime
|
||||||
getTreeData()
|
getTreeData()
|
||||||
}
|
}
|
||||||
|
// //导出点位
|
||||||
|
function exportDevice() {
|
||||||
|
const params = {
|
||||||
|
stationId: userStore.stationId,
|
||||||
|
startDate: detaall.value.length > 0 ? detaall.value[0] : '',
|
||||||
|
endDate: detaall.value.length > 0 ? detaall.value[1] : '',
|
||||||
|
signalId: signaId.value
|
||||||
|
}
|
||||||
|
loading.value = true
|
||||||
|
exportDeviceWorkData(params).then((response: any) => {
|
||||||
|
loading.value = false
|
||||||
|
downloadFile(response, '监测数据', 'xlsx')
|
||||||
|
}).catch(() => {
|
||||||
|
loading.value = false
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -267,10 +286,11 @@ function gettoday() {
|
|||||||
<div class="cont_top_left">
|
<div class="cont_top_left">
|
||||||
<el-date-picker v-model="detaall" type="datetimerange" start-placeholder="开始时间"
|
<el-date-picker v-model="detaall" type="datetimerange" start-placeholder="开始时间"
|
||||||
end-placeholder="结束时间" @change="gettabledata" />
|
end-placeholder="结束时间" @change="gettabledata" />
|
||||||
<el-button style="margin-left: 10px;" @click="gettabledata"
|
<el-button style="margin-left: 10px;" @click="gettabledata" :disabled="loading"
|
||||||
value-format="YYYY-MM-DD HH:mm:ss" class="searchButton">搜索</el-button>
|
class="searchButton">搜索</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="cont_top_right"> <el-button class="searchButton">导出</el-button></div>
|
<div class="cont_top_right"> <el-button class="searchButton"
|
||||||
|
@click="exportDevice()">导出</el-button></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="cont_bottom">
|
<div class="cont_bottom">
|
||||||
<el-table v-loading="loading" :data="tableData" style="width: 100%;height: calc(33vh);
|
<el-table v-loading="loading" :data="tableData" style="width: 100%;height: calc(33vh);
|
||||||
@ -289,10 +309,21 @@ function gettoday() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="right_bottom">
|
<div class="right_bottom">
|
||||||
<div class="title_right">
|
<div style="display: flex;align-items: center;">
|
||||||
|
<div class="title_right" style="width: 150px;">
|
||||||
<img src="@/assets/navigation/ty_bq.png" alt="">
|
<img src="@/assets/navigation/ty_bq.png" alt="">
|
||||||
<div>历史曲线</div>
|
<div>历史曲线</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- <el-radio-group v-model="type" >
|
||||||
|
<el-radio-button label="分钟" :value="1" />
|
||||||
|
<el-radio-button label="小时" :value="2" />
|
||||||
|
</el-radio-group> -->
|
||||||
|
<!-- <div class="">
|
||||||
|
<div>分钟</div>
|
||||||
|
<div>小时</div>
|
||||||
|
</div> -->
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="deviceEachers" :style="{ width: '100%', height: '90%' }"></div>
|
<div id="deviceEachers" :style="{ width: '100%', height: '90%' }"></div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@ -342,7 +373,7 @@ function gettoday() {
|
|||||||
|
|
||||||
.text_top {
|
.text_top {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin-top:30px ;
|
margin-top: 30px;
|
||||||
|
|
||||||
.text_top_title {
|
.text_top_title {
|
||||||
display: flex;
|
display: flex;
|
||||||
@ -375,6 +406,7 @@ function gettoday() {
|
|||||||
width: 50%;
|
width: 50%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.content_one_title {
|
.content_one_title {
|
||||||
width: 114px;
|
width: 114px;
|
||||||
height: 50px;
|
height: 50px;
|
||||||
@ -449,7 +481,7 @@ function gettoday() {
|
|||||||
|
|
||||||
:deep(.el-tree-node.is-current>.el-tree-node__content) {
|
:deep(.el-tree-node.is-current>.el-tree-node__content) {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 40px;
|
// height: 40px;
|
||||||
// color: #fff !important;
|
// color: #fff !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -538,4 +570,8 @@ function gettoday() {
|
|||||||
:deep(.el-tree-node__label) {
|
:deep(.el-tree-node__label) {
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:deep(.el-tree-node__content) {
|
||||||
|
height: 40px !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -241,8 +241,8 @@ function getechartdata() {
|
|||||||
type="datetimerange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
|
type="datetimerange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
|
||||||
value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" />
|
value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" />
|
||||||
</div>
|
</div>
|
||||||
<el-button class="searchButton" @click="getEnvironment()">搜索</el-button>
|
<el-button class="searchButton" @click="getEnvironment()" :disabled="treeloading" >搜索</el-button>
|
||||||
<el-button class="searchButton" @click="environmentReset()">重置</el-button>
|
<el-button class="searchButton" @click="environmentReset()" :disabled="treeloading" >重置</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-table :data="environment_data" :row-class-name="tableRowClassName" v-loading="treeloading"
|
<el-table :data="environment_data" :row-class-name="tableRowClassName" v-loading="treeloading"
|
||||||
|
@ -465,7 +465,7 @@ onMounted(() => {
|
|||||||
width: 281px;
|
width: 281px;
|
||||||
min-width: 281px;
|
min-width: 281px;
|
||||||
height: calc(100vh - 140px);
|
height: calc(100vh - 140px);
|
||||||
background: url(@/assets/videoimg/xsjk_280.png) no-repeat center center;
|
background: url(@/assets/navigation/ty_260x988.png);
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
:deep(.el-scrollbar) {
|
:deep(.el-scrollbar) {
|
||||||
height: calc(100vh - 560px);
|
height: calc(100vh - 560px);
|
||||||
|
@ -102,7 +102,7 @@ const params: any = ref({
|
|||||||
endDate: '',
|
endDate: '',
|
||||||
})
|
})
|
||||||
function getdata() {
|
function getdata() {
|
||||||
console.log(tableData.value)
|
treeloading.value = true
|
||||||
if (tableData.value) {
|
if (tableData.value) {
|
||||||
params.value.startDate = tableData.value[0]
|
params.value.startDate = tableData.value[0]
|
||||||
params.value.endDate = tableData.value[1]
|
params.value.endDate = tableData.value[1]
|
||||||
@ -110,7 +110,7 @@ function getdata() {
|
|||||||
params.value.startDate = ''
|
params.value.startDate = ''
|
||||||
params.value.endDate = ''
|
params.value.endDate = ''
|
||||||
}
|
}
|
||||||
|
treeloading.value = false
|
||||||
getVoicePatrolPage(params.value).then((res: any) => {
|
getVoicePatrolPage(params.value).then((res: any) => {
|
||||||
environment_data.value = res.data.records
|
environment_data.value = res.data.records
|
||||||
params.value.size = res.data.size
|
params.value.size = res.data.size
|
||||||
@ -245,7 +245,7 @@ function open(row: any) {
|
|||||||
style="width: 300px; margin-right: 10px;" v-model="tableData" type="daterange"
|
style="width: 300px; margin-right: 10px;" v-model="tableData" type="daterange"
|
||||||
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
|
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
|
||||||
value-format="YYYY-MM-DD" format="YYYY-MM-DD" />
|
value-format="YYYY-MM-DD" format="YYYY-MM-DD" />
|
||||||
<el-button class="searchButton" @click="getdata()">搜索</el-button>
|
<el-button :disabled="treeloading" class="searchButton" @click="getdata()">搜索</el-button>
|
||||||
<el-input v-model="minLong" clearable placeholder="录制时长"
|
<el-input v-model="minLong" clearable placeholder="录制时长"
|
||||||
style="margin-left:30px ;width: 180px;">
|
style="margin-left:30px ;width: 180px;">
|
||||||
<template #append>
|
<template #append>
|
||||||
@ -544,7 +544,7 @@ function open(row: any) {
|
|||||||
height: calc(100vh - 90px);
|
height: calc(100vh - 90px);
|
||||||
// border: 1px solid rgba(0, 249, 162, 0.2);
|
// border: 1px solid rgba(0, 249, 162, 0.2);
|
||||||
// background: rgba(17, 52, 44, 0.9);
|
// background: rgba(17, 52, 44, 0.9);
|
||||||
background: url(@/assets/monitorsystem/spjk_ytbj.png) no-repeat center center;
|
background: url(@/assets/navigation/ty_260x988.png);
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
|
|
||||||
:deep(img) {
|
:deep(img) {
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
position: fixed;
|
position: fixed;
|
||||||
top: 60px;
|
top: 60px;
|
||||||
">
|
">
|
||||||
<!-- <Modelset v-if="isModelset" :isautoRotate="isautoRotate" /> -->
|
<Modelset v-if="isModelset" :isautoRotate="isautoRotate" />
|
||||||
</div>
|
</div>
|
||||||
<div class="three_button" @click="autoRotateClick">
|
<div class="three_button" @click="autoRotateClick">
|
||||||
<span v-if="isautoRotate == true">暂停</span>
|
<span v-if="isautoRotate == true">暂停</span>
|
||||||
|
@ -154,7 +154,8 @@ function getData() {
|
|||||||
deviceName: queryparams.value.deviceName,
|
deviceName: queryparams.value.deviceName,
|
||||||
deviceModel: queryparams.value.deviceModel,
|
deviceModel: queryparams.value.deviceModel,
|
||||||
deviceType: queryparams.value.deviceType,
|
deviceType: queryparams.value.deviceType,
|
||||||
status: queryparams.value.status
|
status: queryparams.value.status,
|
||||||
|
stationId: userStore.stationId
|
||||||
}
|
}
|
||||||
queryDevice(params).then((res: any) => {
|
queryDevice(params).then((res: any) => {
|
||||||
tableData.value = res.data.records
|
tableData.value = res.data.records
|
||||||
|
@ -345,10 +345,10 @@ function currency1(list: any, itemcode: any) {
|
|||||||
<template>
|
<template>
|
||||||
<div class="faulttemplate-box">
|
<div class="faulttemplate-box">
|
||||||
<aside id="silderLeft">
|
<aside id="silderLeft">
|
||||||
<el-input v-model="CameraName" clearable placeholder="请输入部件名称" @clear="getData()" @keyup.enter="getData()"
|
<el-input v-model="CameraName" clearable placeholder="请输入部件名称" @change="init()"
|
||||||
style="width:100%;margin-top: 10px;" class="videomonitor-input">
|
style="width:100%;margin-top: 10px;" class="videomonitor-input">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<img src="@/assets/videoimg/u2937.png" style="cursor:pointer ;" @click="getData">
|
<img src="@/assets/videoimg/u2937.png" style="cursor:pointer ;" @click="init()">
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
<el-scrollbar height="calc(83vh)">
|
<el-scrollbar height="calc(83vh)">
|
||||||
|
@ -74,7 +74,8 @@ function getData() {
|
|||||||
deviceName: queryInfo.value.deviceName,
|
deviceName: queryInfo.value.deviceName,
|
||||||
deviceModel: queryInfo.value.deviceModel,
|
deviceModel: queryInfo.value.deviceModel,
|
||||||
deviceType: queryInfo.value.deviceType,
|
deviceType: queryInfo.value.deviceType,
|
||||||
status: queryInfo.value.status
|
status: queryInfo.value.status,
|
||||||
|
stationId:userStore.stationId
|
||||||
}
|
}
|
||||||
getSystemDevice(params).then((res: any) => {
|
getSystemDevice(params).then((res: any) => {
|
||||||
tableData.value = res.data.records
|
tableData.value = res.data.records
|
||||||
|
@ -14,11 +14,11 @@ const url = userStore.webApiBaseUrl;
|
|||||||
function getInit() {
|
function getInit() {
|
||||||
let params = {
|
let params = {
|
||||||
id: props.alarminInfo.id,
|
id: props.alarminInfo.id,
|
||||||
systemType:props.alarminInfo.systemType
|
systemType: props.alarminInfo.systemType
|
||||||
}
|
}
|
||||||
//异常事件统计
|
//异常事件统计
|
||||||
getAlarmLogById(params).then((res: any) => {
|
getAlarmLogById(params).then((res: any) => {
|
||||||
res.data.checkResult = '1'
|
// res.data.checkResult = '1'
|
||||||
examinationInfo.value = res.data
|
examinationInfo.value = res.data
|
||||||
examinationInfo.value
|
examinationInfo.value
|
||||||
})
|
})
|
||||||
@ -45,7 +45,7 @@ function confirmClick() {
|
|||||||
checkComment: examinationInfo.value.checkComment,
|
checkComment: examinationInfo.value.checkComment,
|
||||||
custom1: num.value,
|
custom1: num.value,
|
||||||
taskAlarmType: examinationInfo.value.taskAlarmType,
|
taskAlarmType: examinationInfo.value.taskAlarmType,
|
||||||
deviceId:examinationInfo.value.deviceid
|
deviceId: examinationInfo.value.deviceid
|
||||||
}
|
}
|
||||||
setAlarmLogStatus(temporaryInfo).then((res: any) => {
|
setAlarmLogStatus(temporaryInfo).then((res: any) => {
|
||||||
if (res != undefined && res.code == '0') {
|
if (res != undefined && res.code == '0') {
|
||||||
@ -110,12 +110,12 @@ const num = ref(0)
|
|||||||
<div class="public-details-title">告警信息{{ examinationInfo.status }}</div>
|
<div class="public-details-title">告警信息{{ examinationInfo.status }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="display: flex;">
|
<div style="display: flex;">
|
||||||
<div style="width:370px;height: 250px;">
|
<div style="width:370px;">
|
||||||
<div class="public-details-conent" >
|
<div class="public-details-conent">
|
||||||
<div class="public-details-name">点位名称:</div>
|
<div class="public-details-name">点位名称:</div>
|
||||||
<div>{{ examinationInfo.deviceName }}</div>
|
<div>{{ examinationInfo.deviceName }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="public-details-conent" >
|
<div class="public-details-conent">
|
||||||
<div class="public-details-name">设备名称:</div>
|
<div class="public-details-name">设备名称:</div>
|
||||||
<div>{{ examinationInfo.patroldeviceName }}</div>
|
<div>{{ examinationInfo.patroldeviceName }}</div>
|
||||||
</div>
|
</div>
|
||||||
@ -129,7 +129,7 @@ const num = ref(0)
|
|||||||
</div>
|
</div>
|
||||||
<div class="public-details-conent">
|
<div class="public-details-conent">
|
||||||
<div class="public-details-name">告警阈值:</div>
|
<div class="public-details-name">告警阈值:</div>
|
||||||
<span style="display:block;" >
|
<span style="display:block;">
|
||||||
<!-- <span style="display: inline-block;width: 50%;text-align: left;"><span>预警:</span><span>{{
|
<!-- <span style="display: inline-block;width: 50%;text-align: left;"><span>预警:</span><span>{{
|
||||||
examinationInfo.earlyMin }}-{{ examinationInfo.earlyMax }}</span></span> -->
|
examinationInfo.earlyMin }}-{{ examinationInfo.earlyMax }}</span></span> -->
|
||||||
<span style="display: inline-block;width: 70%;text-align: left;"><span>一般:</span><span>{{
|
<span style="display: inline-block;width: 70%;text-align: left;"><span>一般:</span><span>{{
|
||||||
@ -147,12 +147,12 @@ const num = ref(0)
|
|||||||
|
|
||||||
<div class="public-details-conent">
|
<div class="public-details-conent">
|
||||||
<div class="public-details-name">告警时间:</div>
|
<div class="public-details-name">告警时间:</div>
|
||||||
<div >{{ examinationInfo.alarmDate }}</div>
|
<div>{{ examinationInfo.alarmDate }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="examinationInfo.taskAlarmType != 4" style="width:290px;height: 200px;">
|
<div v-if="examinationInfo.taskAlarmType != 4" style="width:290px;height: 200px;">
|
||||||
<div style="width:100%;height:100%; position: relative;">
|
<div style="width:100%;height:100%; position: relative;">
|
||||||
<div title="查看图片" style="position: absolute;
|
<div v-if="examinationInfo.defectFilePath" title="查看图片" style="position: absolute;
|
||||||
right: 5px;
|
right: 5px;
|
||||||
top: 5px;
|
top: 5px;
|
||||||
width: 26px;
|
width: 26px;
|
||||||
@ -166,8 +166,10 @@ const num = ref(0)
|
|||||||
|
|
||||||
<img src="@/assets/monitorsystem/region/img.png" alt="">
|
<img src="@/assets/monitorsystem/region/img.png" alt="">
|
||||||
<el-image style="position: absolute;width:100%;height:100%; opacity: 0;"
|
<el-image style="position: absolute;width:100%;height:100%; opacity: 0;"
|
||||||
:src="url + '/previewimage?type=alarm&filename=' + encodeURI(examinationInfo.defectFilePath)" :zoom-rate="1.2"
|
:src="url + '/previewimage?type=alarm&filename=' + encodeURI(examinationInfo.defectFilePath)"
|
||||||
:preview-src-list="[url + '/previewimage?type=alarm&filename=' + encodeURI(examinationInfo.defectFilePath)]" :preview-teleported="true" fit="cover" />
|
:zoom-rate="1.2"
|
||||||
|
:preview-src-list="[url + '/previewimage?type=alarm&filename=' + encodeURI(examinationInfo.defectFilePath)]"
|
||||||
|
:preview-teleported="true" fit="cover" />
|
||||||
</div>
|
</div>
|
||||||
<div title="查看视频" style="position: absolute;
|
<div title="查看视频" style="position: absolute;
|
||||||
right: 40px;
|
right: 40px;
|
||||||
@ -182,8 +184,20 @@ const num = ref(0)
|
|||||||
background: rgba(0,0,0,0.5);">
|
background: rgba(0,0,0,0.5);">
|
||||||
<img src="@/assets/monitorsystem/region/video.png" alt="" @click="isVideo = true">
|
<img src="@/assets/monitorsystem/region/video.png" alt="" @click="isVideo = true">
|
||||||
</div>
|
</div>
|
||||||
<img style="width:100%;height:100%;" :src="url + '/previewimage?type=alarm&filename=' + encodeURI(examinationInfo.defectFilePath)">
|
<span v-if="examinationInfo.defectFilePath">
|
||||||
|
<video v-if="examinationInfo.defectFilePath.indexOf('mp4') != -1" width="300" height="400"
|
||||||
|
:src="url + '/alarm/' + decodeURIComponent(examinationInfo.filePath)" loop autoplay preload="auto"
|
||||||
|
controls></video>
|
||||||
|
<div v-else-if="examinationInfo.fileType == 3" style="padding-top:20px;">
|
||||||
|
<audio style="width: 100%;margin-top:30px;"
|
||||||
|
:src="url + '/video/' + decodeURIComponent(examinationInfo.filePath)" controls>
|
||||||
|
</audio>
|
||||||
|
</div>
|
||||||
|
<img v-else-if="examinationInfo.defectFilePath" style="width:100%;height:100%;"
|
||||||
|
:src="url + '/previewimage?type=alarm&filename=' + encodeURI(examinationInfo.defectFilePath)">
|
||||||
|
</span>
|
||||||
|
<!-- <img v-if="examinationInfo.defectFilePath" style="width:100%;height:100%;"
|
||||||
|
:src="url + '/previewimage?type=alarm&filename=' + encodeURI(examinationInfo.defectFilePath)"> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -198,7 +212,7 @@ const num = ref(0)
|
|||||||
|
|
||||||
<div style="display:flex;align-items: center;">
|
<div style="display:flex;align-items: center;">
|
||||||
<div class="public-details-line"></div>
|
<div class="public-details-line"></div>
|
||||||
<div class="public-details-title" >核查确认</div>
|
<div class="public-details-title">核查确认</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="public-details-conent" style="align-items: center;">
|
<div class="public-details-conent" style="align-items: center;">
|
||||||
<div class="public-details-name" style="padding-right: 10px;">是否属实</div>
|
<div class="public-details-name" style="padding-right: 10px;">是否属实</div>
|
||||||
@ -210,7 +224,8 @@ const num = ref(0)
|
|||||||
</div>
|
</div>
|
||||||
<div class="public-details-conent">
|
<div class="public-details-conent">
|
||||||
<div class="public-details-name" style="padding-right: 10px;">反馈意见</div>
|
<div class="public-details-name" style="padding-right: 10px;">反馈意见</div>
|
||||||
<el-input v-model="examinationInfo.checkComment" style="width: 560px;" :rows="3" resize="none" type="textarea" placeholder="" />
|
<el-input v-model="examinationInfo.checkComment" style="width: 560px;" :rows="3" resize="none"
|
||||||
|
type="textarea" placeholder="" />
|
||||||
</div>
|
</div>
|
||||||
<div style="display:flex;justify-content:center;margin-top:25px">
|
<div style="display:flex;justify-content:center;margin-top:25px">
|
||||||
<!-- <div class="public-details-button" @click="isVideo=true">查看视频</div> -->
|
<!-- <div class="public-details-button" @click="isVideo=true">查看视频</div> -->
|
||||||
@ -222,10 +237,11 @@ const num = ref(0)
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Eldialog v-if="isVideo" :title="'查看摄像机'" :zIndex="2005" :width="'1200px'"
|
<Eldialog v-if="isVideo" :title="'查看摄像机'" :zIndex="2005" :width="'1200px'" @before-close="isVideo = false"
|
||||||
@before-close="isVideo = false" :elclass="'ylclass'" >
|
:elclass="'ylclass'">
|
||||||
<template v-slot:PopFrameContent>
|
<template v-slot:PopFrameContent>
|
||||||
<Editvideo style="padding-top:10px ;" :_uid="2001" v-if="isVideo == true" :rowInfo="examinationInfo" :online="'1'" />
|
<Editvideo style="padding-top:10px ;" :_uid="2001" v-if="isVideo == true" :rowInfo="examinationInfo"
|
||||||
|
:online="'1'" />
|
||||||
</template>
|
</template>
|
||||||
</Eldialog>
|
</Eldialog>
|
||||||
</div>
|
</div>
|
||||||
@ -415,9 +431,10 @@ const num = ref(0)
|
|||||||
.public-examination {
|
.public-examination {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 700px;
|
width: 700px;
|
||||||
height: 640px;
|
// height: 640px;
|
||||||
background: url(@/assets/giveanalarm/jg_xqbj1.png);
|
background: url(@/assets/giveanalarm/jg_xqbj1.png);
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
|
||||||
.public-examination-title {
|
.public-examination-title {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@ -539,7 +556,5 @@ const num = ref(0)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.ylclass{
|
.ylclass {}
|
||||||
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -9,6 +9,7 @@ import Editvideo from "@/views/linkagecontrol/Intelligentlinkage/editvideo.vue";
|
|||||||
import Eldialog from '@/components/seccmsdialog/eldialog.vue';
|
import Eldialog from '@/components/seccmsdialog/eldialog.vue';
|
||||||
const emit = defineEmits(['closeGiveanalarm']);
|
const emit = defineEmits(['closeGiveanalarm']);
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
|
const url = userStore.webApiBaseUrl;
|
||||||
function detailsClick() {
|
function detailsClick() {
|
||||||
Explicit.value = true
|
Explicit.value = true
|
||||||
}
|
}
|
||||||
@ -195,7 +196,7 @@ const handleChange = (value: any) => {
|
|||||||
<div class="public-details-title">告警信息{{ examinationInfo.status }}</div>
|
<div class="public-details-title">告警信息{{ examinationInfo.status }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="display: flex;">
|
<div style="display: flex;">
|
||||||
<div style="width:370px;height: 250px;">
|
<div style="width:370px;">
|
||||||
<div class="public-details-conent">
|
<div class="public-details-conent">
|
||||||
<div class="public-details-name">点位名称:</div>
|
<div class="public-details-name">点位名称:</div>
|
||||||
<div>{{ examinationInfo.deviceName }}</div>
|
<div>{{ examinationInfo.deviceName }}</div>
|
||||||
@ -267,14 +268,26 @@ const handleChange = (value: any) => {
|
|||||||
background: rgba(0,0,0,0.5);">
|
background: rgba(0,0,0,0.5);">
|
||||||
<img src="@/assets/monitorsystem/region/video.png" alt="" @click="isVideo = true">
|
<img src="@/assets/monitorsystem/region/video.png" alt="" @click="isVideo = true">
|
||||||
</div>
|
</div>
|
||||||
<img style="width:100%;height:100%;" :src="examinationInfo.defectFilePath">
|
<span v-if="examinationInfo.defectFilePath">
|
||||||
|
<video v-if="examinationInfo.defectFilePath.indexOf('mp4') != -1" width="300" height="400"
|
||||||
|
:src="url + '/alarm/' + decodeURIComponent(examinationInfo.filePath)" loop autoplay preload="auto"
|
||||||
|
controls></video>
|
||||||
|
<div v-else-if="examinationInfo.fileType == 3" style="padding-top:20px;">
|
||||||
|
<audio style="width: 100%;margin-top:30px;"
|
||||||
|
:src="url + '/video/' + decodeURIComponent(examinationInfo.filePath)" controls>
|
||||||
|
</audio>
|
||||||
|
</div>
|
||||||
|
<img v-else-if="examinationInfo.defectFilePath" style="width:100%;height:100%;"
|
||||||
|
:src="examinationInfo.defectFilePath">
|
||||||
|
</span>
|
||||||
|
<!-- <img style="width:100%;height:100%;" :src="examinationInfo.defectFilePath"> -->
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="public-details-conent">
|
<div class="public-details-conent">
|
||||||
<div class="public-details-name">告警描述:</div>
|
<div class="public-details-name">告警描述:</div>
|
||||||
<div :title="examinationInfo.content" style="height:63px;width: 560px;display: -webkit-box;
|
<div :title="examinationInfo.content" style="width: 560px;display: -webkit-box;
|
||||||
-webkit-box-orient: vertical;
|
-webkit-box-orient: vertical;
|
||||||
-webkit-line-clamp: 3;
|
-webkit-line-clamp: 3;
|
||||||
overflow: hidden;">{{ examinationInfo.content }}</div>
|
overflow: hidden;">{{ examinationInfo.content }}</div>
|
||||||
@ -501,9 +514,10 @@ const handleChange = (value: any) => {
|
|||||||
.public-examination {
|
.public-examination {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 700px;
|
width: 700px;
|
||||||
height: 640px;
|
// height: 640px;
|
||||||
background: url(@/assets/giveanalarm/jg_xqbj1.png);
|
background: url(@/assets/giveanalarm/jg_xqbj1.png);
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
|
||||||
.public-examination-title {
|
.public-examination-title {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, onMounted, reactive, nextTick } from 'vue'
|
import { ref, onMounted, reactive, nextTick,computed } from 'vue'
|
||||||
|
import MarkdownIt from 'markdown-it'
|
||||||
|
import DOMPurify from 'dompurify'
|
||||||
import Page from '@/components/Pagination/page.vue'
|
import Page from '@/components/Pagination/page.vue'
|
||||||
import { ElMessageBox, ElMessage, ElTable, FormRules, ElTree } from 'element-plus'
|
import { ElMessageBox, ElMessage, ElTable, FormRules, ElTree } from 'element-plus'
|
||||||
import { getDeviceByType } from '@/api/device'
|
import { getDeviceByType } from '@/api/device'
|
||||||
@ -8,7 +10,8 @@ import { useUserStore } from '@/store/modules/user';
|
|||||||
import * as echarts from 'echarts'
|
import * as echarts from 'echarts'
|
||||||
import { getAlgorithmClassTree, getAlgorithmDeviceParams, getAlgorithmDeviceCurve, getAlgorithmParamsNameList, callAlgorithmAnalyse } from '@/api/question';
|
import { getAlgorithmClassTree, getAlgorithmDeviceParams, getAlgorithmDeviceCurve, getAlgorithmParamsNameList, callAlgorithmAnalyse } from '@/api/question';
|
||||||
import { fa } from 'element-plus/es/locale'
|
import { fa } from 'element-plus/es/locale'
|
||||||
const userStore = useUserStore();
|
import axios from 'axios';
|
||||||
|
const userStore = useUserStore();//pythonUrl
|
||||||
//树形控件类型定义
|
//树形控件类型定义
|
||||||
interface Tree {
|
interface Tree {
|
||||||
[x: string]: any;
|
[x: string]: any;
|
||||||
@ -32,6 +35,11 @@ const vMove = {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 创建计算属性处理文本
|
||||||
|
const md = new MarkdownIt()
|
||||||
|
const processedActionData = computed(() => {
|
||||||
|
return md.render(DOMPurify.sanitize(actionData.value))
|
||||||
|
})
|
||||||
const defaultProps = { label: "name" };
|
const defaultProps = { label: "name" };
|
||||||
const treeRef = ref<InstanceType<typeof ElTree>>()
|
const treeRef = ref<InstanceType<typeof ElTree>>()
|
||||||
const treeData: any = ref([])
|
const treeData: any = ref([])
|
||||||
@ -44,7 +52,8 @@ const algorithmId = ref('')
|
|||||||
const componentId = ref('')
|
const componentId = ref('')
|
||||||
function init() {
|
function init() {
|
||||||
const params = {
|
const params = {
|
||||||
algorithmClassName: algorithmClassName.value
|
algorithmClassName: algorithmClassName.value,
|
||||||
|
stationCode: userStore.stationCode
|
||||||
}
|
}
|
||||||
treeloading.value = true
|
treeloading.value = true
|
||||||
getAlgorithmClassTree(params).then((res: any) => {
|
getAlgorithmClassTree(params).then((res: any) => {
|
||||||
@ -65,6 +74,7 @@ function init() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
const comainName = ref('')
|
||||||
function handleNodeClick(data: any, node: any) {
|
function handleNodeClick(data: any, node: any) {
|
||||||
if (data.children.length != 0) {
|
if (data.children.length != 0) {
|
||||||
node.isCurrent = false
|
node.isCurrent = false
|
||||||
@ -72,8 +82,10 @@ function handleNodeClick(data: any, node: any) {
|
|||||||
treeRef.value?.setCurrentKey(componentId.value);
|
treeRef.value?.setCurrentKey(componentId.value);
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
// console.log(data)
|
||||||
componentId.value = data.id
|
componentId.value = data.id
|
||||||
algorithmId.value = data.parentId
|
algorithmId.value = data.parentId
|
||||||
|
|
||||||
gatdata()
|
gatdata()
|
||||||
getecharts()
|
getecharts()
|
||||||
getfenList()
|
getfenList()
|
||||||
@ -131,8 +143,8 @@ function drawEchart(item: any, index: any) {
|
|||||||
containLabel: true,
|
containLabel: true,
|
||||||
borderColor: randomColor
|
borderColor: randomColor
|
||||||
},
|
},
|
||||||
xAxis:item.xAxis ,
|
xAxis: item.xAxis,
|
||||||
yAxis:item.yAxis ,
|
yAxis: item.yAxis,
|
||||||
series: item.series.map((series: any) => ({
|
series: item.series.map((series: any) => ({
|
||||||
...series,
|
...series,
|
||||||
itemStyle: { color: randomColor }
|
itemStyle: { color: randomColor }
|
||||||
@ -162,9 +174,11 @@ function analysis() {
|
|||||||
ElMessage.warning(res.data.msg)
|
ElMessage.warning(res.data.msg)
|
||||||
} else {
|
} else {
|
||||||
ElMessage.success('分析成功')
|
ElMessage.success('分析成功')
|
||||||
|
comainName.value = res.data.desc
|
||||||
mapList.value = res.data.mapList
|
mapList.value = res.data.mapList
|
||||||
canshuList.value = res.data.result.description
|
canshuList.value = res.data.result.description
|
||||||
getovercanshu()
|
getovercanshu()
|
||||||
|
getaction()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -179,7 +193,45 @@ function getovercanshu() {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
//故障分析
|
||||||
|
const fault = ref(false)
|
||||||
|
function fenfault() {
|
||||||
|
fault.value = true
|
||||||
|
canshuList.value = ''
|
||||||
|
actionData.value = ''
|
||||||
|
gatdata()
|
||||||
|
analysis()
|
||||||
|
actionloading.value = true
|
||||||
|
}
|
||||||
|
//生成处理方案
|
||||||
|
|
||||||
|
const actionData = ref('')
|
||||||
|
const actionloading = ref(false)
|
||||||
|
function getaction() {
|
||||||
|
|
||||||
|
axios.get(userStore.pythonUrl + '/application/' + userStore.application_id + '/chat/open', {
|
||||||
|
headers: {
|
||||||
|
'AUTHORIZATION': 'application-2f942bee58ee12591b4a47deebd5b71b'
|
||||||
|
}
|
||||||
|
}).then((res: any) => {
|
||||||
|
const object = ref(
|
||||||
|
{
|
||||||
|
message: comainName.value + canshuList.value,
|
||||||
|
re_chat: false,
|
||||||
|
stream: false,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
axios.post(userStore.pythonUrl + '/application/chat_message/' + res.data.data, object.value, {
|
||||||
|
headers: {
|
||||||
|
'AUTHORIZATION': 'application-2f942bee58ee12591b4a47deebd5b71b'
|
||||||
|
}
|
||||||
|
}).then((res: any) => {
|
||||||
|
actionloading.value = false
|
||||||
|
actionData.value = res.data.data.content
|
||||||
|
// console.log(res.data)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="faulttemplate-box">
|
<div class="faulttemplate-box">
|
||||||
@ -203,19 +255,24 @@ function getovercanshu() {
|
|||||||
</div>
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
<section class="silderRight1">
|
<section class="silderRight1">
|
||||||
<div class="right_center" v-loading="checloading">
|
<div class="right_center" v-loading="checloading"
|
||||||
|
:style="parameter.length > 0 ? 'height: 77vh;' : 'height: 90vh;margin-bottom:0px;'">
|
||||||
|
<div style="display: flex;justify-content: space-between;align-items: center;">
|
||||||
<div class="tree_title">
|
<div class="tree_title">
|
||||||
<img src="@/assets/navigation/ty_bq.png" alt="">
|
<img src="@/assets/navigation/ty_bq.png" alt="">
|
||||||
<div>信号/点位折线图</div>
|
<div>信号/点位折线图</div>
|
||||||
</div>
|
</div>
|
||||||
<el-scrollbar height="440px">
|
<el-button style="margin-left: 10px;" @click="fenfault()" class="searchButton">故障分析</el-button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<el-scrollbar :height="parameter.length > 0 ? '70vh' : '85vh'">
|
||||||
<div class="echarts_box">
|
<div class="echarts_box">
|
||||||
<div v-for="(item, index) in eacherslist" :id="'deviceEachers' + index"
|
<div v-for="(item, index) in eacherslist" :id="'deviceEachers' + index"
|
||||||
:style="{ width: '100%', height: '160px' }"></div>
|
:style="{ width: '100%', height: '160px' }"></div>
|
||||||
</div>
|
</div>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
<div class="right_yop" v-loading="fixloading">
|
<div class="right_yop" v-loading="fixloading" v-if="parameter.length > 0">
|
||||||
<div class="tree_title">
|
<div class="tree_title">
|
||||||
<img src="@/assets/navigation/ty_bq.png" alt="">
|
<img src="@/assets/navigation/ty_bq.png" alt="">
|
||||||
<div>固定参数</div>
|
<div>固定参数</div>
|
||||||
@ -228,26 +285,36 @@ function getovercanshu() {
|
|||||||
</div>
|
</div>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
<div class="right_bottom" v-loading="fenloading">
|
</section>
|
||||||
<div class="tree_title">
|
<Eldialog v-model="fault" :close-on-click-modal="false" @before-close="fault = false" :title="'故障分析'"
|
||||||
|
append-to-body width="1100px" draggable>
|
||||||
|
<template v-slot:PopFrameContent>
|
||||||
|
<div class="tree_title" style="padding: 5px 0px ;">
|
||||||
<img src="@/assets/navigation/ty_bq.png" alt="">
|
<img src="@/assets/navigation/ty_bq.png" alt="">
|
||||||
<div>分析结果</div>
|
<div>参数详情</div>
|
||||||
</div>
|
</div>
|
||||||
<el-button class="searchButton" type="primary" style="margin: 10px 0px;"
|
<div class="fixed_params" style="margin-bottom: 15px;">
|
||||||
@click="analysis()">开始分析</el-button>
|
|
||||||
<el-scrollbar height="80px">
|
|
||||||
<div class="fixed_params">
|
|
||||||
<div v-for="item in fenList" class="fixed_params_item">
|
<div v-for="item in fenList" class="fixed_params_item">
|
||||||
<div>{{ item.paramName }}:<span>{{ item.paramValue ? item.paramValue : '--' }}</span></div>
|
<div>{{ item.paramName }}:<span>{{ item.paramValue ? item.paramValue : '--' }}</span></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="tree_title" style="padding: 5px 0px ;">
|
||||||
|
<img src="@/assets/navigation/ty_bq.png" alt="">
|
||||||
|
<div>分析结果</div>
|
||||||
|
</div>
|
||||||
|
<div class="fixed_params right_botom" style="margin-bottom: 15px;">{{ comainName }}<span>{{
|
||||||
|
canshuList ? canshuList : '--' }}</span></div>
|
||||||
|
<div class="tree_title" style="padding: 5px 0px ;">
|
||||||
|
<img src="@/assets/navigation/ty_bq.png" alt="">
|
||||||
|
<div>处理方案</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<el-scrollbar height="400px" v-loading="actionloading" style="margin-top: 10px;">
|
||||||
|
<div v-if="actionData" v-html="processedActionData" ></div>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
<div class="right_botom">
|
|
||||||
分析结果:<span v-if="!canshuList">--</span><span v-else>{{ canshuList }}</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</template>
|
||||||
</section>
|
</Eldialog>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -275,6 +342,7 @@ function getovercanshu() {
|
|||||||
color: #fff;
|
color: #fff;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
||||||
|
|
||||||
img {
|
img {
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
@ -297,7 +365,38 @@ function getovercanshu() {
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
:deep(.el-scrollbar__view) {
|
||||||
|
color: #e6e6e6;
|
||||||
|
line-height: 1.8;
|
||||||
|
padding: 15px;
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
color: #409EFF;
|
||||||
|
margin: 20px 0 10px;
|
||||||
|
font-size: 18px;
|
||||||
|
border-left: 4px solid #67C23A;
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
strong {
|
||||||
|
color: #E6A23C;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
list-style: square inside;
|
||||||
|
margin: 10px 0;
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin: 8px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
margin: 20px 0;
|
||||||
|
border: 0;
|
||||||
|
border-top: 1px solid #606266;
|
||||||
|
}
|
||||||
|
}
|
||||||
/* 拖动条 */
|
/* 拖动条 */
|
||||||
.moveBtn {
|
.moveBtn {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@ -317,6 +416,45 @@ function getovercanshu() {
|
|||||||
background-color: #60bfff;
|
background-color: #60bfff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fixed_params {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-family: 'Arial Normal', 'Arial';
|
||||||
|
font-weight: 400;
|
||||||
|
color: #FFFFFF;
|
||||||
|
font-size: 14px;
|
||||||
|
|
||||||
|
.fixed_params_item {
|
||||||
|
margin-right: 10px;
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 18px;
|
||||||
|
color: #00FFFF
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.right_botom {
|
||||||
|
width: 100%;
|
||||||
|
font-family: 'Arial Normal', 'Arial';
|
||||||
|
font-weight: 700;
|
||||||
|
font-style: normal;
|
||||||
|
font-size: 24px;
|
||||||
|
color: #FFFFFF;
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
||||||
|
font-weight: 700;
|
||||||
|
font-style: normal;
|
||||||
|
font-size: 24px;
|
||||||
|
letter-spacing: normal;
|
||||||
|
color: #009900;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.silderRight1 {
|
.silderRight1 {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -338,36 +476,27 @@ function getovercanshu() {
|
|||||||
background: url(@/assets/navigation/110tu.png);
|
background: url(@/assets/navigation/110tu.png);
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
|
|
||||||
.fixed_params {
|
// margin-bottom: 15px;
|
||||||
width: 100%;
|
:deep(.el-scrollbar) {
|
||||||
display: flex;
|
height: auto !important;
|
||||||
align-items: center;
|
}
|
||||||
font-family: 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 400;
|
|
||||||
color: #FFFFFF;
|
|
||||||
font-size: 14px;
|
|
||||||
|
|
||||||
.fixed_params_item {
|
|
||||||
margin-right: 20px;
|
|
||||||
|
|
||||||
span {
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-size: 18px;
|
|
||||||
color: #00FFFF
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.right_center {
|
.right_center {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 500px;
|
height: calc(77vh);
|
||||||
|
margin-bottom: 15px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
background: url(@/assets/navigation/sw1.png);
|
background: url(@/assets/navigation/sw1.png);
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
|
|
||||||
|
:deep(.el-scrollbar) {
|
||||||
|
height: auto !important;
|
||||||
|
}
|
||||||
|
|
||||||
.echarts_box {
|
.echarts_box {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
@ -385,44 +514,9 @@ function getovercanshu() {
|
|||||||
background: url(@/assets/navigation/sw.png);
|
background: url(@/assets/navigation/sw.png);
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
|
|
||||||
.fixed_params {
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
font-family: 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 400;
|
|
||||||
color: #FFFFFF;
|
|
||||||
font-size: 14px;
|
|
||||||
|
|
||||||
.fixed_params_item {
|
|
||||||
margin-right: 10px;
|
|
||||||
|
|
||||||
span {
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-size: 18px;
|
|
||||||
color: #00FFFF
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.right_botom {
|
|
||||||
width: 100%;
|
|
||||||
font-family: 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #FFFFFF;
|
|
||||||
|
|
||||||
span {
|
|
||||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 24px;
|
|
||||||
letter-spacing: normal;
|
|
||||||
color: #009900;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(.el-scrollbar) {
|
:deep(.el-scrollbar) {
|
||||||
height: 80px !important;
|
height: 80px !important;
|
||||||
|
@ -8,10 +8,12 @@ export default {
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, onMounted, reactive, watch } from 'vue'
|
import { ref, onMounted, reactive, watch } from 'vue'
|
||||||
import { ElTable, ElMessage, ElMessageBox, FormRules } from 'element-plus'
|
import { ElTable, ElMessage, ElMessageBox, FormRules } from 'element-plus'
|
||||||
import { getTaskList, addTaskList, delTaskList, updataTaskList, setTaskList, changeItemOrder } from "@/api/taxkSetting";
|
import { getQuartzJobList, addTaskList, delTaskList, updataTaskList, setTaskList, changeItemOrder } from "@/api/taxkSetting";
|
||||||
import Page from '@/components/Pagination/page.vue'
|
import Page from '@/components/Pagination/page.vue'
|
||||||
import Sortable from 'sortablejs';
|
import Sortable from 'sortablejs';
|
||||||
import Eldialog from '@/components/seccmsdialog/eldialog.vue';
|
import Eldialog from '@/components/seccmsdialog/eldialog.vue';
|
||||||
|
import { useUserStore } from '@/store/modules/user';
|
||||||
|
const userStore = useUserStore();
|
||||||
//输入框内文字
|
//输入框内文字
|
||||||
const input = ref('')
|
const input = ref('')
|
||||||
//表格数据
|
//表格数据
|
||||||
@ -356,9 +358,10 @@ function getTasklist() {
|
|||||||
const params = {
|
const params = {
|
||||||
jobName: input.value,
|
jobName: input.value,
|
||||||
size: size.value,
|
size: size.value,
|
||||||
current: current.value
|
current: current.value,
|
||||||
|
// stationId:userStore.stationId
|
||||||
}
|
}
|
||||||
getTaskList(params).then((res) => {
|
getQuartzJobList(params).then((res) => {
|
||||||
size.value = res.data.size
|
size.value = res.data.size
|
||||||
current.value = res.data.current
|
current.value = res.data.current
|
||||||
total.value = res.data.total
|
total.value = res.data.total
|
||||||
|
@ -114,6 +114,7 @@ function getData() {
|
|||||||
treeloading.value = true
|
treeloading.value = true
|
||||||
SearchBox.value.type = activeName.value
|
SearchBox.value.type = activeName.value
|
||||||
SearchBox.value.taskName = taskName.value
|
SearchBox.value.taskName = taskName.value
|
||||||
|
SearchBox.value.stationId = userStore.stationId
|
||||||
getdata(SearchBox.value).then((res: any) => {
|
getdata(SearchBox.value).then((res: any) => {
|
||||||
treeloading.value = false
|
treeloading.value = false
|
||||||
tableDataList.value = res.data.records
|
tableDataList.value = res.data.records
|
||||||
@ -196,7 +197,9 @@ function verification(row: any, index: any) {
|
|||||||
password.value = ''
|
password.value = ''
|
||||||
}
|
}
|
||||||
function secondPass() {
|
function secondPass() {
|
||||||
|
disbutton.value = true
|
||||||
secondauthPassword({ username: userStore.username, password: encrypt(password.value) }).then((res: any) => {
|
secondauthPassword({ username: userStore.username, password: encrypt(password.value) }).then((res: any) => {
|
||||||
|
disbutton.value = false
|
||||||
if (res.code != 1) {
|
if (res.code != 1) {
|
||||||
if (res.data == '二次密码认证错误!') {
|
if (res.data == '二次密码认证错误!') {
|
||||||
inputTrue.value = true
|
inputTrue.value = true
|
||||||
@ -387,6 +390,7 @@ const stationlist = ref({
|
|||||||
function confirmClick(formEl: any) {
|
function confirmClick(formEl: any) {
|
||||||
formEl.validate((valid: any) => {
|
formEl.validate((valid: any) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
|
disbutton.value = true
|
||||||
if (info.value.fixedStartTime) {
|
if (info.value.fixedStartTime) {
|
||||||
info.value.fixedStartTime = dateFormat(info.value.fixedStartTime)
|
info.value.fixedStartTime = dateFormat(info.value.fixedStartTime)
|
||||||
}
|
}
|
||||||
@ -433,6 +437,7 @@ function confirmClick(formEl: any) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
editTask(paramsall).then((res: any) => {
|
editTask(paramsall).then((res: any) => {
|
||||||
|
disbutton.value = false
|
||||||
if (res.code != '1') {
|
if (res.code != '1') {
|
||||||
dialogVisible.value = false;
|
dialogVisible.value = false;
|
||||||
ElMessage({
|
ElMessage({
|
||||||
@ -445,6 +450,7 @@ function confirmClick(formEl: any) {
|
|||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
addTask(paramsall).then((res: any) => {
|
addTask(paramsall).then((res: any) => {
|
||||||
|
disbutton.value = false
|
||||||
if (res.code != '1') {
|
if (res.code != '1') {
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
@ -483,12 +489,14 @@ function deleteTask(row: any) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
//多选删除
|
//多选删除
|
||||||
|
const disbutton = ref(false)
|
||||||
function delClick() {
|
function delClick() {
|
||||||
ElMessageBox.confirm('确定删除此巡视任务吗?', '删除提示', {
|
ElMessageBox.confirm('确定删除此巡视任务吗?', '删除提示', {
|
||||||
confirmButtonText: '确定',
|
confirmButtonText: '确定',
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning'
|
type: 'warning'
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
|
disbutton.value = true
|
||||||
const allTaskId: any = ref([])
|
const allTaskId: any = ref([])
|
||||||
deviceInfos.value.forEach((res: any) => {
|
deviceInfos.value.forEach((res: any) => {
|
||||||
allTaskId.value.push(res.taskId)
|
allTaskId.value.push(res.taskId)
|
||||||
@ -503,6 +511,7 @@ function delClick() {
|
|||||||
message: "删除成功",
|
message: "删除成功",
|
||||||
});
|
});
|
||||||
getData()
|
getData()
|
||||||
|
disbutton.value = false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -2158,8 +2167,8 @@ const open = () => {
|
|||||||
<el-date-picker popper-class="elDatePicker" style="width: 300px; margin-right: 10px;" v-model="tableData"
|
<el-date-picker popper-class="elDatePicker" style="width: 300px; margin-right: 10px;" v-model="tableData"
|
||||||
type="daterange" range-separator="至" start-placeholder="开始日期" @change="dataChange" end-placeholder="结束日期"
|
type="daterange" range-separator="至" start-placeholder="开始日期" @change="dataChange" end-placeholder="结束日期"
|
||||||
value-format="YYYY-MM-DD" format="YYYY-MM-DD" />
|
value-format="YYYY-MM-DD" format="YYYY-MM-DD" />
|
||||||
<el-button class="searchButton" @click="getData()">搜索</el-button>
|
<el-button class="searchButton" @click="getData()" :disabled="treeloading" >搜索</el-button>
|
||||||
<el-button class="searchButton" @click="resetting()">重置</el-button>
|
<el-button class="searchButton" @click="resetting()" :disabled="treeloading" >重置</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<el-button v-hasPerm="['add:task']" class="searchButton" @click="addClick">
|
<el-button v-hasPerm="['add:task']" class="searchButton" @click="addClick">
|
||||||
@ -2384,7 +2393,7 @@ const open = () => {
|
|||||||
<span class="dialog-footer" v-if="info.datastatus == 1 || title == '复制巡视任务'"
|
<span class="dialog-footer" v-if="info.datastatus == 1 || title == '复制巡视任务'"
|
||||||
style="width:100%;margin:auto ; display: flex;display: -webkit-flex; justify-content: flex-end;-webkit-justify-content: flex-end;margin-top: 20px;">
|
style="width:100%;margin:auto ; display: flex;display: -webkit-flex; justify-content: flex-end;-webkit-justify-content: flex-end;margin-top: 20px;">
|
||||||
<div class="details-button" @click="handleClose">取消</div>
|
<div class="details-button" @click="handleClose">取消</div>
|
||||||
<div class="details-button" @click="confirmClick(infoForm)">保存</div>
|
<div class="details-button" @click="!disbutton?confirmClick(infoForm):''">保存</div>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-show="tabs == 2" class="tabbas1-toner">
|
<div v-show="tabs == 2" class="tabbas1-toner">
|
||||||
@ -2392,12 +2401,12 @@ const open = () => {
|
|||||||
<div class="essential-top">
|
<div class="essential-top">
|
||||||
<div style="margin-bottom: 20px;">
|
<div style="margin-bottom: 20px;">
|
||||||
<el-button class="searchButton" style="margin-left:0" type="primary"
|
<el-button class="searchButton" style="margin-left:0" type="primary"
|
||||||
v-if="info.datastatus == 1 && title == '复制巡视任务'" @click="associationInterval">关联间隔</el-button>
|
v-if="info.datastatus == 1 || title == '复制巡视任务'" @click="associationInterval">关联间隔</el-button>
|
||||||
<el-button class="searchButton" type="primary" v-if="info.datastatus == 1 && title == '复制巡视任务'"
|
<el-button class="searchButton" type="primary" v-if="info.datastatus == 1 || title == '复制巡视任务'"
|
||||||
@click="associateMasterDevice">关联主设备</el-button>
|
@click="associateMasterDevice">关联主设备</el-button>
|
||||||
<el-button class="searchButton" type="primary" v-if="info.datastatus == 1 && title == '复制巡视任务'"
|
<el-button class="searchButton" type="primary" v-if="info.datastatus == 1 || title == '复制巡视任务'"
|
||||||
@click="AssociatedComponents">关联部件</el-button>
|
@click="AssociatedComponents">关联部件</el-button>
|
||||||
<el-button class="searchButton" type="primary" v-if="info.datastatus == 1 && title == '复制巡视任务'"
|
<el-button class="searchButton" type="primary" v-if="info.datastatus == 1 || title == '复制巡视任务'"
|
||||||
@click="AssociatedInspection">关联巡视点位</el-button>
|
@click="AssociatedInspection">关联巡视点位</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -2491,7 +2500,7 @@ const open = () => {
|
|||||||
<span class="dialog-footer" v-if="info.datastatus == 1 || title == '复制巡视任务'"
|
<span class="dialog-footer" v-if="info.datastatus == 1 || title == '复制巡视任务'"
|
||||||
style="width: 95%;margin: auto; display: flex;display: -webkit-flex; justify-content: flex-end;-webkit-justify-content: flex-end;margin-top: 10px;">
|
style="width: 95%;margin: auto; display: flex;display: -webkit-flex; justify-content: flex-end;-webkit-justify-content: flex-end;margin-top: 10px;">
|
||||||
<div class="details-button" @click="handleClose">取消</div>
|
<div class="details-button" @click="handleClose">取消</div>
|
||||||
<div class="details-button" @click="confirmClick(infoForm)">保存</div>
|
<div class="details-button" @click="!disbutton?confirmClick(infoForm):''">保存</div>
|
||||||
</span>
|
</span>
|
||||||
<!-- </div> -->
|
<!-- </div> -->
|
||||||
</div>
|
</div>
|
||||||
@ -2864,7 +2873,7 @@ const open = () => {
|
|||||||
</div>
|
</div>
|
||||||
<span class="dialog-footer" style="display: flex;justify-content: center;margin-top: 10px;">
|
<span class="dialog-footer" style="display: flex;justify-content: center;margin-top: 10px;">
|
||||||
<div class="details-button" @click="inputCLOse">取消</div>
|
<div class="details-button" @click="inputCLOse">取消</div>
|
||||||
<div class="details-button" @click="secondPass">确定</div>
|
<div class="details-button" @click="!disbutton?secondPass:''">确定</div>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</Eldialog>
|
</Eldialog>
|
||||||
|
@ -60,6 +60,7 @@ function getTypeTwo() {
|
|||||||
}
|
}
|
||||||
//弹出框事件
|
//弹出框事件
|
||||||
function sure(data: any, index: any) {
|
function sure(data: any, index: any) {
|
||||||
|
disbutton.value = true
|
||||||
if (index == 'one') {
|
if (index == 'one') {
|
||||||
const params = {
|
const params = {
|
||||||
reviseValue: data.reviseValue,
|
reviseValue: data.reviseValue,
|
||||||
@ -68,6 +69,7 @@ function sure(data: any, index: any) {
|
|||||||
resultId: data.resultId
|
resultId: data.resultId
|
||||||
}
|
}
|
||||||
editCorrect(params).then((res: any) => {
|
editCorrect(params).then((res: any) => {
|
||||||
|
disbutton.value = false
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
Explicit.value = 0
|
Explicit.value = 0
|
||||||
conclusion.value = ''
|
conclusion.value = ''
|
||||||
@ -86,6 +88,7 @@ function sure(data: any, index: any) {
|
|||||||
examineFlag: 1
|
examineFlag: 1
|
||||||
}
|
}
|
||||||
examination(params).then((res: any) => {
|
examination(params).then((res: any) => {
|
||||||
|
disbutton.value = false
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
Explicit.value = 0
|
Explicit.value = 0
|
||||||
conclusion.value = ''
|
conclusion.value = ''
|
||||||
@ -144,6 +147,7 @@ function getTabledata(loading: any) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
//修正
|
//修正
|
||||||
|
const disbutton = ref(false)
|
||||||
function correct(row: any) {
|
function correct(row: any) {
|
||||||
conclusion.value = 1
|
conclusion.value = 1
|
||||||
form.value = JSON.parse(JSON.stringify(row))
|
form.value = JSON.parse(JSON.stringify(row))
|
||||||
@ -1104,7 +1108,7 @@ function retrunClick() {
|
|||||||
</div>
|
</div>
|
||||||
<div style="width: 50%;margin:auto;display: flex;justify-content: space-around;">
|
<div style="width: 50%;margin:auto;display: flex;justify-content: space-around;">
|
||||||
<div class="details-button" @click="Explicit = 0">取消</div>
|
<div class="details-button" @click="Explicit = 0">取消</div>
|
||||||
<div class="details-button" @click="sure(form, 'one')">确定</div>
|
<div class="details-button" @click="!disbutton?sure(form, 'one'):'' ">确定</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -1131,7 +1135,7 @@ function retrunClick() {
|
|||||||
style="border: none;z-index:100;position: relative; color: #409eff;width: 110px;height: 33px;">取消</el-button>
|
style="border: none;z-index:100;position: relative; color: #409eff;width: 110px;height: 33px;">取消</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div style="position: relative;z-index: 100;width: 110px;height: 33px;">
|
<div style="position: relative;z-index: 100;width: 110px;height: 33px;">
|
||||||
<el-button class="three-button" @click=" sure(examineComment, 'two')"
|
<el-button class="three-button" @click="!disbutton?sure(form, 'one'):'' "
|
||||||
style="border: none;z-index:100;position: relative; color: #409eff;width: 110px;height: 33px;">确定</el-button>
|
style="border: none;z-index:100;position: relative; color: #409eff;width: 110px;height: 33px;">确定</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -190,12 +190,15 @@ function getData(val: any, loading: any) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
//操作巡视任务
|
//操作巡视任务
|
||||||
|
const disbutton = ref(false)
|
||||||
function Operate(row: any, optType: any) {
|
function Operate(row: any, optType: any) {
|
||||||
|
disbutton.value = true
|
||||||
if (row.isStationFlag == 1) {
|
if (row.isStationFlag == 1) {
|
||||||
const paramsa = {
|
const paramsa = {
|
||||||
stationcode: userStore.stationCode
|
stationcode: userStore.stationCode
|
||||||
}
|
}
|
||||||
stationOnline(paramsa).then((res: any) => {
|
stationOnline(paramsa).then((res: any) => {
|
||||||
|
disbutton.value = false
|
||||||
if (res == 1) {
|
if (res == 1) {
|
||||||
const params = {
|
const params = {
|
||||||
taskTodoId: row.taskTodoId,
|
taskTodoId: row.taskTodoId,
|
||||||
@ -237,6 +240,7 @@ function Operate(row: any, optType: any) {
|
|||||||
optType: optType
|
optType: optType
|
||||||
}
|
}
|
||||||
operate(params).then((res: any) => {
|
operate(params).then((res: any) => {
|
||||||
|
disbutton.value = false
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
const typeText = ref('')
|
const typeText = ref('')
|
||||||
if (optType == 'pause') {
|
if (optType == 'pause') {
|
||||||
@ -523,14 +527,14 @@ function removePercentSign(str:any) {
|
|||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<div style="display: flex; justify-content: center;">
|
<div style="display: flex; justify-content: center;">
|
||||||
<div v-hasPerm="['task:runnow']" v-if="scope.row.taskState == 0" class="button-style"
|
<div v-hasPerm="['task:runnow']" v-if="scope.row.taskState == 0" class="button-style"
|
||||||
@click="Operate(scope.row, 'runNow')">立即执行</div>
|
@click=" !disbutton?Operate(scope.row, 'runNow'):''">立即执行</div>
|
||||||
<div v-hasPerm="['task:suspend']" v-if="scope.row.taskState == 3" class="button-style"
|
<div v-hasPerm="['task:suspend']" v-if="scope.row.taskState == 3" class="button-style"
|
||||||
@click="Operate(scope.row, 'resume')">恢复</div>
|
@click="!disbutton?Operate(scope.row, 'resume'):''">恢复</div>
|
||||||
<div v-hasPerm="['task:suspend']" v-if="scope.row.taskState == 2 || scope.row.taskState == 0"
|
<div v-hasPerm="['task:suspend']" v-if="scope.row.taskState == 2 || scope.row.taskState == 0"
|
||||||
class="button-style" @click="Operate(scope.row, 'pause')">暂停</div>
|
class="button-style" @click="!disbutton?Operate(scope.row, 'pause'):''">暂停</div>
|
||||||
|
|
||||||
<div v-hasPerm="['task:shutdown']" v-if="scope.row.taskState == 0 || scope.row.taskState == 3"
|
<div v-hasPerm="['task:shutdown']" v-if="scope.row.taskState == 0 || scope.row.taskState == 3"
|
||||||
class="button-style" @click="Operate(scope.row, 'stop')">终止</div>
|
class="button-style" @click="!disbutton?Operate(scope.row, 'stop'):''">终止</div>
|
||||||
<div @click="detailed(scope.row)" class="button-style"><router-link :to="{
|
<div @click="detailed(scope.row)" class="button-style"><router-link :to="{
|
||||||
path: '/patrolDetails',
|
path: '/patrolDetails',
|
||||||
query: {
|
query: {
|
||||||
|
@ -44,6 +44,9 @@ function getData(val: any) {
|
|||||||
if (date.value.length != 0) {
|
if (date.value.length != 0) {
|
||||||
info.value.startDate = date.value[0]
|
info.value.startDate = date.value[0]
|
||||||
info.value.endDate = date.value[1]
|
info.value.endDate = date.value[1]
|
||||||
|
}else{
|
||||||
|
info.value.startDate = ''
|
||||||
|
info.value.endDate = ''
|
||||||
}
|
}
|
||||||
|
|
||||||
treeloading.value = true
|
treeloading.value = true
|
||||||
@ -200,7 +203,7 @@ const title = ref('')
|
|||||||
const isViewfile = ref(false)
|
const isViewfile = ref(false)
|
||||||
function viewReport(row: any) {
|
function viewReport(row: any) {
|
||||||
title.value = row.taskName
|
title.value = row.taskName
|
||||||
ViewfileUrl.value = userStore.webApiBaseUrl + '/patroltasks/task-todo/exportTaskTodo?taskTodoId=' + row.taskTodoId
|
ViewfileUrl.value = userStore.webApiBaseUrl + '/patroltasks/task-todo/exportTaskTodoById?taskTodoId=' + row.taskTodoId+'&areaId='+info.value.areaId+'&bayId='+info.value.bayId
|
||||||
isViewfile.value = true
|
isViewfile.value = true
|
||||||
}
|
}
|
||||||
function CloseView() {
|
function CloseView() {
|
||||||
@ -229,6 +232,22 @@ onMounted(() => {
|
|||||||
date.value = [startDate, endDate]
|
date.value = [startDate, endDate]
|
||||||
getData(1)
|
getData(1)
|
||||||
})
|
})
|
||||||
|
//控制行变色
|
||||||
|
const tableRowClassName = ({
|
||||||
|
row,
|
||||||
|
rowIndex,
|
||||||
|
}: {
|
||||||
|
row: any
|
||||||
|
rowIndex: number
|
||||||
|
}) => {
|
||||||
|
if (rowIndex % 2 === 0) {
|
||||||
|
return 'warning-row'
|
||||||
|
} else if (rowIndex % 2 === 1) {
|
||||||
|
return 'success-row'
|
||||||
|
}
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div style="padding:0 15px ;">
|
<div style="padding:0 15px ;">
|
||||||
@ -277,7 +296,7 @@ onMounted(() => {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- <div style="position: relative;"> -->
|
<!-- <div style="position: relative;"> -->
|
||||||
<el-table :data="tableData" v-loading="treeloading"
|
<el-table :data="tableData" v-loading="treeloading" :row-class-name="tableRowClassName"
|
||||||
style="width: 100%;margin:auto;position: relative;margin: 5px 0; height:calc(78vh); overflow: auto "
|
style="width: 100%;margin:auto;position: relative;margin: 5px 0; height:calc(78vh); overflow: auto "
|
||||||
:header-cell-style="tableBg" stripe
|
:header-cell-style="tableBg" stripe
|
||||||
@selection-change="handleSelectionChange">
|
@selection-change="handleSelectionChange">
|
||||||
@ -295,12 +314,12 @@ onMounted(() => {
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="deviceSumnum" label="巡视点位总数量" align="center" />
|
<el-table-column prop="deviceSumnum" label="巡视点位总数量" align="center" />
|
||||||
<el-table-column label="巡视结果" align="center">
|
<el-table-column prop="description" label="巡视结果" width="140px" align="center">
|
||||||
<template #default="scope" >
|
<template #default="scope">
|
||||||
<span>成功:{{ scope.row.result.successCount }};</span><span>失败:{{ scope.row.result.failCount }}</span><br />
|
<span>成功:{{ scope.row.deviceDeforeNum - scope.row.deviceFailureNum }};</span><span>失败:{{ scope.row.deviceFailureNum }}</span><br />
|
||||||
<span>正常:{{ scope.row.result.normalCount }};</span><span style="color: #FF3300;">异常:{{
|
<span>正常:{{ scope.row.deviceDeforeNum - scope.row.deviceFailureNum - scope.row.deviceUnusualnum }};</span><span style="color: #FF3300;">异常:{{scope.row.deviceUnusualnum }}</span>
|
||||||
scope.row.result.abnormalCount }}</span>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="startTime" label="巡视开始时间" align="center" />
|
<el-table-column prop="startTime" label="巡视开始时间" align="center" />
|
||||||
<el-table-column prop="endTime" label="巡视结束时间" align="center" />
|
<el-table-column prop="endTime" label="巡视结束时间" align="center" />
|
||||||
|
@ -10,14 +10,14 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="loadingBox1">变电站三维模型加载中... 请稍候!</div>
|
<div class="loadingBox1">变电站三维模型加载中... 请稍候!</div>
|
||||||
</div>
|
</div>
|
||||||
<el-button v-show="!isroam" class="THREE-button" :style="{ right: isRightList ? '630px' : '290px' }"
|
<el-button v-show="!isroam" class="THREE-button" :style="{ right: isRightList ? '490px' : '290px' }"
|
||||||
@click.stop="rangingClick">{{ !isranging
|
@click.stop="rangingClick">{{ !isranging
|
||||||
? '开始' : '结束' }}测距</el-button>
|
? '开始' : '结束' }}测距</el-button>
|
||||||
<el-button v-show="!isroam" :style="{ right: isRightList ? '490px' : '150px' }" @click="reset"
|
<el-button v-show="!isroam" :style="{ right: isRightList ? '350px' : '150px' }" @click="reset"
|
||||||
class="THREE-button">恢复初始态</el-button>
|
class="THREE-button">恢复初始态</el-button>
|
||||||
<el-button class="THREE-button" :style="{ right: isRightList ? '350px' : '10px' }" @click.stop="roamClick">{{
|
<!-- <el-button class="THREE-button" :style="{ right: isRightList ? '350px' : '10px' }" @click.stop="roamClick">{{
|
||||||
!isroam
|
!isroam
|
||||||
? '开始' : '结束' }}漫游</el-button>
|
? '开始' : '结束' }}漫游</el-button> -->
|
||||||
<div v-show="isRightList" class="THREE-right-list" @click.stop>
|
<div v-show="isRightList" class="THREE-right-list" @click.stop>
|
||||||
<div class="THREE-right-list-title">
|
<div class="THREE-right-list-title">
|
||||||
<span>
|
<span>
|
||||||
@ -99,10 +99,10 @@
|
|||||||
<div v-show="selType == '02'" class="three-right-list-main-icon">
|
<div v-show="selType == '02'" class="three-right-list-main-icon">
|
||||||
<img v-show="i.objinfo != undefined" src="@/assets/3d/xq.png" title="巡视点位信息" alt="巡视点位信息"
|
<img v-show="i.objinfo != undefined" src="@/assets/3d/xq.png" title="巡视点位信息" alt="巡视点位信息"
|
||||||
@click.stop="informationClick(i), listClick(i, index)">
|
@click.stop="informationClick(i), listClick(i, index)">
|
||||||
<img v-if="!i.objinfo && !i.objinfo.patroldeviceJson" src="@/assets/3d/sc_dis.png" title="实时视频" alt="实时视频">
|
<img v-if="!i.objinfo " src="@/assets/3d/sc_dis.png" title="实时视频" alt="实时视频">
|
||||||
<img v-else src="@/assets/3d/ks.png" title="实时视频-1" alt="实时视频-1" @click.stop="getDeviceVideo(i, 0)">
|
<img v-else src="@/assets/3d/ks.png" title="实时视频-1" alt="实时视频-1" @click.stop="getDeviceVideo(i, 0)">
|
||||||
<img v-show="i.objinfo == undefined" @click.stop src="@/assets/3d/xq_dis.png" title="巡视点位信息" alt="巡视点位信息">
|
<img v-show="i.objinfo == undefined" @click.stop src="@/assets/3d/xq_dis.png" title="巡视点位信息" alt="巡视点位信息">
|
||||||
<img src="@/assets/sytlechange/u157.svg" alt="" title="历史记录"
|
<img src="@/assets/navigation/u157.png" alt="" title="历史记录"
|
||||||
@click.stop="historicalRecords(i), listClick(i, index)">
|
@click.stop="historicalRecords(i), listClick(i, index)">
|
||||||
</div>
|
</div>
|
||||||
<div v-show="selType == '05'" class="THREE-right-list-main-icon">
|
<div v-show="selType == '05'" class="THREE-right-list-main-icon">
|
||||||
@ -166,7 +166,7 @@
|
|||||||
<!-- 详细信息弹窗 -->
|
<!-- 详细信息弹窗 -->
|
||||||
<div class="detailed-information" v-if="information">
|
<div class="detailed-information" v-if="information">
|
||||||
<div id="detailed-information" v-drag class="examination">
|
<div id="detailed-information" v-drag class="examination">
|
||||||
<div class="examination-title">{{ objRow.name }}</div>
|
<div class="examination-title" >{{ objRow.name }}</div>
|
||||||
<div class="examination-close" @click.stop="information = false"><img src="@/assets/3d/u523.png" /></div>
|
<div class="examination-close" @click.stop="information = false"><img src="@/assets/3d/u523.png" /></div>
|
||||||
<div class="examination-contont" v-if="selType == '01'">
|
<div class="examination-contont" v-if="selType == '01'">
|
||||||
<div class="examination-contont-text">设备编码:{{ objRow.userData.objinfo.patroldeviceCode }}</div>
|
<div class="examination-contont-text">设备编码:{{ objRow.userData.objinfo.patroldeviceCode }}</div>
|
||||||
@ -266,13 +266,13 @@
|
|||||||
d="M989.866667 482.133333L597.333333 110.933333c-17.066667-17.066667-42.666667-17.066667-59.733333 0-17.066667 17.066667-17.066667 42.666667 0 59.733334l315.733333 298.666666H64c-25.6 0-42.666667 17.066667-42.666667 42.666667s17.066667 42.666667 42.666667 42.666667H853.333333l-315.733333 298.666666c-17.066667 17.066667-17.066667 42.666667 0 59.733334 8.533333 8.533333 21.333333 12.8 29.866667 12.8 8.533333 0 21.333333-4.266667 29.866666-12.8l392.533334-371.2c8.533333-8.533333 12.8-21.333333 12.8-29.866667s-4.266667-21.333333-12.8-29.866667z"
|
d="M989.866667 482.133333L597.333333 110.933333c-17.066667-17.066667-42.666667-17.066667-59.733333 0-17.066667 17.066667-17.066667 42.666667 0 59.733334l315.733333 298.666666H64c-25.6 0-42.666667 17.066667-42.666667 42.666667s17.066667 42.666667 42.666667 42.666667H853.333333l-315.733333 298.666666c-17.066667 17.066667-17.066667 42.666667 0 59.733334 8.533333 8.533333 21.333333 12.8 29.866667 12.8 8.533333 0 21.333333-4.266667 29.866666-12.8l392.533334-371.2c8.533333-8.533333 12.8-21.333333 12.8-29.866667s-4.266667-21.333333-12.8-29.866667z"
|
||||||
fill="currentColor" p-id="2538"></path>
|
fill="currentColor" p-id="2538"></path>
|
||||||
</svg>
|
</svg>
|
||||||
上一个</el-button>
|
上一条</el-button>
|
||||||
<el-button class="searchButton1"
|
<el-button class="searchButton1"
|
||||||
style="color:#009bff;font-size:14px;border:1px solid #009bff;padding:3px 5px;height:32px;">共{{
|
style="color:#009bff;font-size:14px;border:1px solid #009bff;padding:3px 5px;height:32px;">共{{
|
||||||
Length }}页,当前为第{{ Index + 1 }}页</el-button>
|
Length }}条,当前为第{{ Index + 1 }}条</el-button>
|
||||||
|
|
||||||
<el-button class="searchButton1" @click.stop="nextPage" :disabled="Index + 1 == Length">
|
<el-button class="searchButton1" @click.stop="nextPage" :disabled="Index + 1 == Length">
|
||||||
下一个
|
下一条
|
||||||
<svg t="1686723317756" style="margin-left:5px" class="icon" viewBox="0 0 1024 1024" version="1.1"
|
<svg t="1686723317756" style="margin-left:5px" class="icon" viewBox="0 0 1024 1024" version="1.1"
|
||||||
xmlns="http://www.w3.org/2000/svg" p-id="2537" xmlns:xlink="http://www.w3.org/1999/xlink" width="14"
|
xmlns="http://www.w3.org/2000/svg" p-id="2537" xmlns:xlink="http://www.w3.org/1999/xlink" width="14"
|
||||||
height="14">
|
height="14">
|
||||||
@ -308,7 +308,7 @@
|
|||||||
<span v-if="AlarmMapOne.alarmLevel == 4" style="color: #FF3300;">危急</span>
|
<span v-if="AlarmMapOne.alarmLevel == 4" style="color: #FF3300;">危急</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="examine-contont-body-left-test" style="display: flex;">
|
<div class="examine-contont-body-left-test" style="display: flex;">
|
||||||
<div style="width:155px;">告警描述:</div>
|
<div style="width:180px;">告警描述:</div>
|
||||||
<div>{{ AlarmMapOne.content }}</div>
|
<div>{{ AlarmMapOne.content }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="examine-contont-body-left-test">告警时间:{{ AlarmMapOne.alarmDate }}</div>
|
<div class="examine-contont-body-left-test">告警时间:{{ AlarmMapOne.alarmDate }}</div>
|
||||||
|
@ -1251,7 +1251,7 @@ const isGaoliang:any = ref("")
|
|||||||
width: 300px;
|
width: 300px;
|
||||||
min-width: 300px;
|
min-width: 300px;
|
||||||
height: calc(100vh - 115px);
|
height: calc(100vh - 115px);
|
||||||
background: url(@/assets/videoimg/spjk_300.png) no-repeat center center;
|
background: url(@/assets/navigation/ty_260x988.png);
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
:deep(img){
|
:deep(img){
|
||||||
pointer-events:none;
|
pointer-events:none;
|
||||||
|
@ -465,7 +465,7 @@ onMounted(() => {
|
|||||||
width: 281px;
|
width: 281px;
|
||||||
min-width: 281px;
|
min-width: 281px;
|
||||||
height: calc(100vh - 140px);
|
height: calc(100vh - 140px);
|
||||||
background: url(@/assets/videoimg/xsjk_280.png) no-repeat center center;
|
background: url(@/assets/navigation/ty_260x988.png);
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
:deep(.el-scrollbar) {
|
:deep(.el-scrollbar) {
|
||||||
height: calc(100vh - 560px);
|
height: calc(100vh - 560px);
|
||||||
|
Loading…
Reference in New Issue
Block a user