Commit 64b3652e authored by 胡占生's avatar 胡占生 🇨🇳

fix: 日志管理接口对接联调,优化项目结构,解决项目bug

parent b7f2ce3b
/**
* 查询算法日志信息列表
* @param {string} algorrithmName
* @param {string} cameraNo
* @param {string} costTime
* @param {string} createBy
* @param {string} createTime
* @param {string} jsonResult
* @param {string} operId
* @param {string} operParam
* @param {string} operTime
* @param {string} params
* @param {string} remark
* @param {string} searchValue
* @param {string} status
* @param {string} updateBy
* @param {string} updateTime
* @returns
*/
import request from '@/utils/request'
// 查询摄像头日志列表
export function listCameraLog(query) {
return request({
url: '/test/cameraLog/list',
method: 'get',
params: query
})
}
// 查询算法日志列表
export function listAlgLog(query) {
return request({
url: '/test/algorithmLog/list',
method: 'get',
params: query
})
}
// 查询算法日志列表x详情
export function detailAlgLog(id) {
return request({
url: `/test/algorithmLog/${id}`,
method: 'get',
})
}
// 修改算法日志状态
export function updateStatusAlgLog(query) {
return request({
url: `/test/algorithmLog/updateStatus`,
method: 'get',
params: query
})
}
// 新增算法日志列表
export function addAlgLog(data) {
return request({
url: '/test/algorithmLog',
method: 'post',
data: data
})
}
// 修改算法日志列表
export function updateAlgLog(data) {
return request({
url: '/test/algorithmLog',
method: 'put',
data: data
})
}
// 删除算法日志列表
export function deleteAlgLog(ids) {
return request({
url: `/test/algorithmLog/${ids}`,
method: 'delete'
})
}
// 导出算法日志列表
export function exportAlgLog(data) {
return request({
url: `/test/algorithmLog/export`,
method: 'post',
data: data
})
}
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
预警等级 预警等级
</div> </div>
</template> </template>
{{form.alarmLevelId}} {{form.alarmLevelName}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template #label> <template #label>
......
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
<div style="width: 100%;overflow: hidden;"> <div style="width: 100%;overflow: hidden;">
<ImagePreview style="width: 100%;" :src="item.alarmImg"/> <ImagePreview style="width: 100%;" :src="item.alarmImg"/>
</div> </div>
<h2>{{ item.alarmType }}</h2> <h2 :style="{color:item.alarmLevelColor}">{{ item.alarmType }}</h2>
<p style="color: #999999;font-size: 12px;"> <p style="color: #999999;font-size: 12px;">
{{ parseTime(item.alarmTime) }} {{ parseTime(item.alarmTime) }}
</p> </p>
......
...@@ -78,10 +78,6 @@ ...@@ -78,10 +78,6 @@
:isShowTip="false" :isShowTip="false"
@update:modelObj="getImgObj" @update:modelObj="getImgObj"
/> />
<div v-else style="position: absolute;bottom: 5px;left: 26%;" class="text-style">
请开启算法
</div>
<!-- <ImageUpload :limit='1' :fileSize="5" :isShowTip="false" @update:modelObj="getImgObj"/> -->
</div> </div>
</el-card> </el-card>
<el-card > <el-card >
...@@ -116,7 +112,7 @@ ...@@ -116,7 +112,7 @@
<div style="display: flex;justify-content: space-between;margin: 10px 0;"> <div style="display: flex;justify-content: space-between;margin: 10px 0;">
<!-- <el-button type="primary" plain>重置区域</el-button> --> <!-- <el-button type="primary" plain>重置区域</el-button> -->
<div></div> <div></div>
<el-button type="primary" plain @click="downVideo">下载识别视频</el-button> <!-- <el-button type="primary" plain @click="downVideo">下载识别视频</el-button> -->
<!-- <el-button v-if="getFileType(outFilePath)=='1'" type="primary" plain @click="downVideo">下载识别视频</el-button> --> <!-- <el-button v-if="getFileType(outFilePath)=='1'" type="primary" plain @click="downVideo">下载识别视频</el-button> -->
</div> </div>
</el-card> </el-card>
...@@ -136,7 +132,7 @@ ...@@ -136,7 +132,7 @@
</div> </div>
<el-divider /> <el-divider />
<div class="img-box gird-layout"> <div class="img-box gird-layout">
<div class="img-item" v-for="item in effectiveList" :key="item.id"> <div class="img-item" v-for="item in invalidImgList" :key="item.id">
<ImagePreview style="height: 100%;" :src="item.caseFile"/> <ImagePreview style="height: 100%;" :src="item.caseFile"/>
</div> </div>
</div> </div>
...@@ -155,10 +151,10 @@ ...@@ -155,10 +151,10 @@
</div> </div>
<el-divider /> <el-divider />
<div class="img-box gird-layout" > <div class="img-box gird-layout" >
<div class="img-item" v-for="item in invalidList" :key="item.id"> <div class="img-item" v-for="item in invalidImgList" :key="item.id" >
<ImagePreview style="height: 100%;" :src="item.caseFile"/> <ImagePreview style="height: 100%;" :src="item.caseFile"/>
</div>
</div> </div>
</div>
<img class="top-tip" src="@/assets/images/close.png" alt=""> <img class="top-tip" src="@/assets/images/close.png" alt="">
</div> </div>
...@@ -191,6 +187,8 @@ const backVideo = ref({}) ...@@ -191,6 +187,8 @@ const backVideo = ref({})
const applicationList = ref([]) const applicationList = ref([])
const effectiveList = ref([]) const effectiveList = ref([])
const invalidList = ref([]) const invalidList = ref([])
const invalidImgList = ref([])
const effectiveImgList = ref([])
const imgVideoData = ref([]) const imgVideoData = ref([])
const nowText=ref('算法详情') const nowText=ref('算法详情')
const baseUrl = 'http://192.168.3.82' const baseUrl = 'http://192.168.3.82'
...@@ -228,6 +226,8 @@ function getDetials(){ ...@@ -228,6 +226,8 @@ function getDetials(){
listBoundary({ algorithmId: roleId}).then(res=>{ listBoundary({ algorithmId: roleId}).then(res=>{
effectiveList.value = res.rows.filter(item => item.caseType === '0') effectiveList.value = res.rows.filter(item => item.caseType === '0')
invalidList.value = res.rows.filter(item => item.caseType === '1') invalidList.value = res.rows.filter(item => item.caseType === '1')
invalidImgList.value = res.rows.filter(item => item.caseType === '1'&&item.caseFile)
effectiveImgList.value = res.rows.filter(item => item.caseType === '0'&&item.caseFile)
}) })
} }
/** 查询案例文件列表 */ /** 查询案例文件列表 */
......
...@@ -4,149 +4,130 @@ ...@@ -4,149 +4,130 @@
<el-card class="left-list"> <el-card class="left-list">
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick"> <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="摄像头日志" name="摄像头日志"></el-tab-pane> <el-tab-pane label="摄像头日志" name="摄像头日志">
<el-tab-pane label="算法日志" name="算法日志"></el-tab-pane> <div>
<el-tab-pane label="操作日志" name="操作日志"></el-tab-pane> <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
</el-tabs> <el-form-item label="日志时间" prop="name">
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch"> start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
<el-form-item label="日志时间" prop="name">
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</el-form-item>
<el-form-item label="摄像头" prop="deptName">
<el-select v-model="queryParams.deptName" placeholder="请选择摄像头" clearable style="width: 200px">
<el-option v-for="dict in sys_job_status" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="jobList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="姓名" width="100" align="center" prop="jobId" />
<el-table-column label="手机号" align="center" prop="jobName" :show-overflow-tooltip="true" />
<el-table-column label="身份证号" align="center" prop="jobGroup">
<template #default="scope">
<dict-tag :options="sys_job_group" :value="scope.row.jobGroup" />
</template>
</el-table-column>
<el-table-column label="所属部门" align="center" prop="invokeTarget" :show-overflow-tooltip="true" />
<el-table-column label="创建时间" align="center" prop="cronExpression" :show-overflow-tooltip="true" />
<el-table-column label="操作人" align="center">
<template #default="scope">
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1"
@change="handleStatusChange(scope.row)"></el-switch>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['monitor:job:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['monitor:job:remove']"></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- 添加或修改定时任务对话框 -->
<el-dialog :title="title" v-model="open" width="820px" append-to-body>
<el-form ref="jobRef" :model="form" :rules="rules" label-width="120px">
<el-row>
<el-col :span="12">
<el-form-item label="任务名称" prop="jobName">
<el-input v-model="form.jobName" placeholder="请输入任务名称" />
</el-form-item> </el-form-item>
</el-col> <el-form-item label="摄像头" prop="deptName">
<el-col :span="12"> <el-select v-model="queryParams.deptName" placeholder="请选择摄像头" clearable style="width: 200px">
<el-form-item label="任务分组" prop="jobGroup"> <el-option v-for="dict in sys_job_status" :key="dict.value" :label="dict.label" :value="dict.value" />
<el-select v-model="form.jobGroup" placeholder="请选择">
<el-option v-for="dict in sys_job_group" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> <el-form-item>
<el-col :span="24"> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-form-item prop="invokeTarget"> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
<template #label>
<span>
调用方法
<el-tooltip placement="top">
<template #content>
<div>
Bean调用示例:ryTask.ryParams('ry')
<br />Class类调用示例:com.ruoyi.quartz.task.RyTask.ryParams('ry')
<br />参数说明:支持字符串,布尔类型,长整型,浮点型,整型
</div>
</template>
<el-icon><question-filled /></el-icon>
</el-tooltip>
</span>
</template>
<el-input v-model="form.invokeTarget" placeholder="请输入调用目标字符串" />
</el-form-item> </el-form-item>
</el-col> </el-form>
<el-col :span="24">
<el-form-item label="cron表达式" prop="cronExpression"> <el-table v-loading="loading" :data="CameraLogList" @selection-change="handleSelectionChange">
<el-input v-model="form.cronExpression" placeholder="请输入cron执行表达式"> <el-table-column label="摄像头名称" width="200" align="center" prop="areaBelong" />
<template #append> <el-table-column label="算法编号" align="center" prop="cameraNo" :show-overflow-tooltip="true" />
<el-button type="primary" @click="handleShowCron"> <el-table-column label="日志详情" align="center" prop="logDesc" :show-overflow-tooltip="true" >
生成表达式 </el-table-column>
<i class="el-icon-time el-icon--right"></i> <!-- <el-table-column label="检测结果" align="center" prop="operParam" :show-overflow-tooltip="true" >
</el-button> </el-table-column>
</template> <el-table-column label="检测时间" align="center" prop="operTime" :show-overflow-tooltip="true" /> -->
</el-input> </el-table>
</div>
</el-tab-pane>
<el-tab-pane label="算法日志" name="算法日志">
<div>
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
<el-form-item label="日志时间" prop="name">
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</el-form-item> </el-form-item>
</el-col> <el-form-item label="摄像头" prop="deptName">
<el-col :span="24" v-if="form.jobId !== undefined"> <el-select v-model="queryParams.deptName" placeholder="请选择摄像头" clearable style="width: 200px">
<el-form-item label="状态"> <el-option v-for="dict in sys_job_status" :key="dict.value" :label="dict.label" :value="dict.value" />
<el-radio-group v-model="form.status"> </el-select>
<el-radio v-for="dict in sys_job_status" :key="dict.value" :value="dict.value">{{ dict.label
}}</el-radio>
</el-radio-group>
</el-form-item> </el-form-item>
</el-col> <el-form-item>
<el-col :span="12"> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-form-item label="执行策略" prop="misfirePolicy"> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-radio-group v-model="form.misfirePolicy">
<el-radio-button value="1">立即执行</el-radio-button>
<el-radio-button value="2">执行一次</el-radio-button>
<el-radio-button value="3">放弃执行</el-radio-button>
</el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-form>
<el-col :span="12">
<el-form-item label="是否并发" prop="concurrent"> <el-table v-loading="loading" :data="AlgLogList" @selection-change="handleSelectionChange">
<el-radio-group v-model="form.concurrent"> <el-table-column label="算法名称" width="200" align="center" prop="algorrithmName" />
<el-radio-button value="0">允许</el-radio-button> <el-table-column label="算法编号" align="center" prop="cameraNo" :show-overflow-tooltip="true" />
<el-radio-button value="1">禁止</el-radio-button> <el-table-column label="返回结果" align="center" prop="jsonResult" :show-overflow-tooltip="true" >
</el-radio-group> </el-table-column>
</el-form-item> <el-table-column label="检测结果" align="center" prop="operParam" :show-overflow-tooltip="true" >
</el-col> </el-table-column>
</el-row> <el-table-column label="检测时间" align="center" prop="operTime" :show-overflow-tooltip="true" />
</el-form> <!-- <el-table-column label="操作人" align="center">
<template #footer> <template #default="scope">
<div class="dialog-footer"> <el-switch v-model="scope.row.status" active-value="0" inactive-value="1"
<el-button type="primary" @click="submitForm">确 定</el-button> @change="handleStatusChange(scope.row)"></el-switch>
<el-button @click="cancel">取 消</el-button> </template>
</div> </el-table-column> -->
</template> <!-- <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
</el-dialog> <template #default="scope">
<el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['monitor:job:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['monitor:job:remove']"></el-button>
</el-tooltip>
</template>
</el-table-column> -->
</el-table>
</div>
</el-tab-pane>
<el-tab-pane label="操作日志" name="操作日志">
<div>
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
<el-form-item label="日志时间" prop="name">
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="OperateLogList" @selection-change="handleSelectionChange">
<el-table-column label="日志编号" align="center" prop="operId" />
<el-table-column label="系统模块" align="center" prop="title" :show-overflow-tooltip="true" />
<el-table-column label="操作类型" align="center" prop="businessType">
<template #default="scope">
<dict-tag :options="sys_oper_type" :value="scope.row.businessType" />
</template>
</el-table-column>
<el-table-column label="操作人员" align="center" width="110" prop="operName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
<el-table-column label="操作地址" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" />
<el-table-column label="操作状态" align="center" prop="status">
<template #default="scope">
<dict-tag :options="sys_common_status" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="操作日期" align="center" prop="operTime" width="180" sortable="custom" :sort-orders="['descending', 'ascending']">
<template #default="scope">
<span>{{ parseTime(scope.row.operTime) }}</span>
</template>
</el-table-column>
<el-table-column label="消耗时间" align="center" prop="costTime" width="110" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']">
<template #default="scope">
<span>{{ scope.row.costTime }}毫秒</span>
</template>
</el-table-column>
</el-table>
</div>
</el-tab-pane>
</el-tabs>
<el-dialog title="Cron表达式生成器" v-model="openCron" append-to-body destroy-on-close>
<crontab ref="crontabRef" @hide="openCron = false" @fill="crontabFill" :expression="expression"></crontab>
</el-dialog> <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getAllList" />
</el-card>
<!-- 任务日志详细 --> <!-- 任务日志详细 -->
<el-dialog title="任务详细" v-model="openView" width="700px" append-to-body> <el-dialog title="任务详细" v-model="openView" width="700px" append-to-body>
...@@ -211,26 +192,22 @@ ...@@ -211,26 +192,22 @@
</template> </template>
<script setup name="Job"> <script setup name="Job">
import { import {listAlgLog,listCameraLog} from "@/api/logControl/index";
listJob, import { list, } from "@/api/monitor/operlog";
getJob, import { get } from "@vueuse/core";
delJob,
addJob,
updateJob,
runJob,
changeJobStatus,
} from "@/api/monitor/job";
import Crontab from "@/components/Crontab";
const router = useRouter(); const router = useRouter();
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { sys_job_group, sys_job_status } = proxy.useDict( const { sys_job_group, sys_job_status,sys_oper_type, sys_common_status } = proxy.useDict(
"sys_job_group", "sys_job_group",
"sys_job_status" "sys_job_status",
"sys_oper_type","sys_common_status"
); );
const nowText = ref("日志管理"); const nowText = ref("日志管理");
const activeName = ref("摄像头日志"); const activeName = ref("摄像头日志");
const jobList = ref([]); const AlgLogList = ref([]);
const CameraLogList = ref([]);
const OperateLogList = ref([]);
const open = ref(false); const open = ref(false);
const loading = ref(true); const loading = ref(true);
const showSearch = ref(true); const showSearch = ref(true);
...@@ -266,14 +243,47 @@ const data = reactive({ ...@@ -266,14 +243,47 @@ const data = reactive({
const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data);
function handleClick() { } function handleClick(val) {
activeName.value=val.props.name
console.log("🚀 ~ handleClick ~ activeName.value:", activeName.value)
getAllList()
}
/** 查询定时任务列表 */ function getAllList(){
function getList() { if(activeName.value=='摄像头日志') getCameraLogList()
if(activeName.value=='算法日志') getAlgLogList()
if(activeName.value=='操作日志') getOperateLogList()
}
/** 查询算法日志列表 */
function getAlgLogList() {
loading.value = true;
listAlgLog(proxy.addDateRange(queryParams.value, dateRange.value)).then(
(response) => {
AlgLogList.value = response.rows;
total.value = response.total;
loading.value = false;
}
);
}
/** 查询摄像头日志列表 */
function getCameraLogList() {
loading.value = true; loading.value = true;
listJob(proxy.addDateRange(queryParams.value, dateRange.value)).then( listCameraLog(proxy.addDateRange(queryParams.value, dateRange.value)).then(
(response) => { (response) => {
jobList.value = response.rows; CameraLogList.value = response.rows;
total.value = response.total;
loading.value = false;
}
);
}
/** 查询操作日志列表 */
function getOperateLogList() {
loading.value = true;
list(proxy.addDateRange(queryParams.value, dateRange.value)).then(
(response) => {
OperateLogList.value = response.rows;
total.value = response.total; total.value = response.total;
loading.value = false; loading.value = false;
} }
...@@ -309,7 +319,7 @@ function reset() { ...@@ -309,7 +319,7 @@ function reset() {
/** 搜索按钮操作 */ /** 搜索按钮操作 */
function handleQuery() { function handleQuery() {
queryParams.value.pageNum = 1; queryParams.value.pageNum = 1;
getList(); getAllList();
} }
/** 重置按钮操作 */ /** 重置按钮操作 */
...@@ -344,18 +354,18 @@ function handleCommand(command, row) { ...@@ -344,18 +354,18 @@ function handleCommand(command, row) {
// 任务状态修改 // 任务状态修改
function handleStatusChange(row) { function handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用"; // let text = row.status === "0" ? "启用" : "停用";
proxy.$modal // proxy.$modal
.confirm('确认要"' + text + '""' + row.jobName + '"任务吗?') // .confirm('确认要"' + text + '""' + row.jobName + '"任务吗?')
.then(function () { // .then(function () {
return changeJobStatus(row.jobId, row.status); // return changeJobStatus(row.jobId, row.status);
}) // })
.then(() => { // .then(() => {
proxy.$modal.msgSuccess(text + "成功"); // proxy.$modal.msgSuccess(text + "成功");
}) // })
.catch(function () { // .catch(function () {
row.status = row.status === "0" ? "1" : "0"; // row.status = row.status === "0" ? "1" : "0";
}); // });
} }
/* 立即执行一次 */ /* 立即执行一次 */
...@@ -385,10 +395,6 @@ function handleShowCron() { ...@@ -385,10 +395,6 @@ function handleShowCron() {
openCron.value = true; openCron.value = true;
} }
/** 确定后回传值 */
function crontabFill(value) {
form.value.cronExpression = value;
}
/** 任务日志列表查询 */ /** 任务日志列表查询 */
function handleJobLog(row) { function handleJobLog(row) {
...@@ -414,26 +420,6 @@ function handleUpdate(row) { ...@@ -414,26 +420,6 @@ function handleUpdate(row) {
}); });
} }
/** 提交按钮 */
function submitForm() {
proxy.$refs["jobRef"].validate((valid) => {
if (valid) {
if (form.value.jobId != undefined) {
updateJob(form.value).then((response) => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
});
} else {
addJob(form.value).then((response) => {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();
});
}
}
});
}
/** 删除按钮操作 */ /** 删除按钮操作 */
function handleDelete(row) { function handleDelete(row) {
...@@ -444,7 +430,7 @@ function handleDelete(row) { ...@@ -444,7 +430,7 @@ function handleDelete(row) {
return delJob(jobIds); return delJob(jobIds);
}) })
.then(() => { .then(() => {
getList(); getAlgLogList();
proxy.$modal.msgSuccess("删除成功"); proxy.$modal.msgSuccess("删除成功");
}) })
.catch(() => { }); .catch(() => { });
...@@ -461,7 +447,7 @@ function handleExport() { ...@@ -461,7 +447,7 @@ function handleExport() {
); );
} }
getList(); getAllList();
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.left-list { .left-list {
......
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
> >
<template v-slot:default> <template v-slot:default>
<!-- <img src="@/assets/images/picStream.png" style="width: 100%" /> --> <!-- <img src="@/assets/images/picStream.png" style="width: 100%" /> -->
<canvas id="video" style="width: 100%" ></canvas> <canvas id="video" :style="{width: '100%', maxHeight: (globalScreenHeight-120)+'px'}" ></canvas>
</template> </template>
</el-card> </el-card>
</div> </div>
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
<el-form-item label="预警区域:">{{ form.title }}</el-form-item> --> <el-form-item label="预警区域:">{{ form.title }}</el-form-item> -->
<el-form-item label="预警类型:">{{ item.alarmType }}</el-form-item> <el-form-item label="预警类型:">{{ item.alarmType }}</el-form-item>
<el-form-item label="预警时间:">{{ parseTime(item.alarmTime) }}</el-form-item> <el-form-item label="预警时间:">{{ parseTime(item.alarmTime) }}</el-form-item>
<el-form-item label="预警等级:"><el-tag :type="'danger'" effect="dark">{{ item.alarmLevelId+'预警'}} </el-tag></el-form-item> <el-form-item label="预警等级:"><el-tag :color="item.alarmLevelColor" type="info" effect="dark">{{ item.alarmLevelName+'预警'}} </el-tag></el-form-item>
</el-form> </el-form>
</template> </template>
</el-card> </el-card>
...@@ -135,67 +135,67 @@ const data = reactive({ ...@@ -135,67 +135,67 @@ const data = reactive({
}); });
const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data);
/** 通过条件过滤节点 */ /** 通过条件过滤节点 */
onMounted(() => {
// player.value.play()//播放
getTreeData()
getWaringData()
getVideos()
})
onDeactivated(() => {
player.value.destroy();
player.value = null;
})
watch(deptName, (val) => {
deptTreeRef.value.filter(val)
})
const filterNode = (value, data) => { const filterNode = (value, data) => {
if (!value) return true; if (!value) return true;
return data.label.indexOf(value) !== -1; return data.label.indexOf(value) !== -1;
}; };
function getTreeData() { function getTreeData() {
videoTreeListManage().then((res) => { videoTreeListManage().then((res) => {
console.log("🚀 ~ videoTreeListManage ~ res:", res)
deptOptions.value=res.data deptOptions.value=res.data
}) })
} }
function getWaringData() { function getWaringData() {
listAlarm().then((res) => { listAlarm(queryParams.value).then((res) => {
algorithmList.value=res.rows algorithmList.value=res.rows
}) })
} }
getTreeData()
getWaringData()
function getVideos(str){ function getVideos(str){
let canvas = document.getElementById('video') let canvas = document.getElementById('video')
let url = str?str:'rtsp://192.168.20.211:554/av0_0' let url = str?str:'rtsp://192.168.20.211:554/av0_0'
if (player.value) {
player.value.destroy();
player.value = null;
}
player.value = new JSMpeg.Player("ws://192.168.4.232:9999/rtsp?url="+btoa(url), {canvas: canvas}) player.value = new JSMpeg.Player("ws://192.168.4.232:9999/rtsp?url="+btoa(url), {canvas: canvas})
player.value.play() player.value.play()
}
// // 当需要重新加载视频流时,可以调用以下函数
// function reloadVideoStream(str) {
// let canvas = document.getElementById('video')
// var ctx = canvas.getContext('2d');
// ctx.clearRect(0, 0, canvas.width, canvas.height);
// // 更新视频流URL
// player.value = new JSMpeg.Player("ws://192.168.4.232:9999/rtsp?url="+btoa(str), {canvas: canvas})
// // 开始解码新的视频流 }
// player.value.play();
// }
onMounted(() => {
// player.value.play()//播放
getVideos()
})
watch(deptName, (val) => {
deptTreeRef.value.filter(val)
})
function handleNodeClick(row) { function handleNodeClick(row) {
const treeType = row.id.split("-")[0]; const treeType = row.id.split("-")[0];
const treeID = row.id.split("-")[1]; const treeID = row.id.split("-")[1];
if(treeType=='点位'){ if(treeType=='点位'){
handlvideoPath(treeID) handlvideoPath(treeID)
queryParams.value.locationId = treeID;
queryParams.value.regionId = null;
}else{
queryParams.value.regionId = treeID;
queryParams.value.locationId = null;
} }
} getWaringData()
}
function handAdd(row) { function handAdd(row) {
algFormRef.value.handleAdd(); algFormRef.value.handleAdd();
} }
function handleSetSize(row) {
}
function handleUpdate(row) {
}
function handlvideoPath(id) { function handlvideoPath(id) {
idDevice(id).then((res) => { idDevice(id).then((res) => {
getVideos(res.data.videoUrl) getVideos(res.data.videoUrl)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment