Commit c3f04157 authored by 胡占生's avatar 胡占生 🇨🇳

feat:视频管理,页面调整。

parent 344cdd20
<template>
<el-card class="tab-title">
{{ text }}
</el-card>
<el-card class="tab-title">
{{ text }}
</el-card>
</template>
<script>
......@@ -16,28 +16,33 @@ export default defineComponent({
</script>
<style scope lang="scss">
.tab-title{
display: flex;
align-items:center;/*for vertical align*/
font-size: 20px;
height: 50px;
color: #1890FF;
background-color: #fff;
margin-bottom: 10px;
border-radius: 5px;
padding: 0;
.el-card__body{
padding: 0 !important;
}
}
.tab-title::before{
content:"";
display: inline-block;
width: 8px; /* 矩形的宽度 */
height: 28px; /* 矩形的高度 */
background-color: #1890FF; /* 矩形的背景颜色 */
margin-right: 8px;
border-radius: 8px;
}
.tab-title {
display: flex;
align-items: center;
/*for vertical align*/
font-size: 20px;
height: 50px;
color: #1890FF;
background-color: #fff;
margin-bottom: 10px;
border-radius: 5px;
padding: 0;
.el-card__body {
padding: 0 !important;
}
}
</style>
.tab-title::before {
content: "";
display: inline-block;
width: 8px;
/* 矩形的宽度 */
height: 28px;
/* 矩形的高度 */
background-color: #1890FF;
/* 矩形的背景颜色 */
margin-right: 8px;
border-radius: 8px;
margin-left: 8px;
}</style>
......@@ -25,7 +25,7 @@
default-active="2"
class="el-menu-vertical-demo"
>
<el-menu-item v-for="item in algorithmList" :index="item.name">
<el-menu-item v-for="item in algorithmList" :key="item.name" :index="item.name">
<span>{{ item.name }}</span>
</el-menu-item>
</el-menu>
......
<template>
<div class="app-container">
<TabTitle :text="nowText" />
<div class="app-container">
<TabTitle :text="nowText" />
<el-card class="left-list">
<el-card class="left-list">
<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>
<el-tab-pane label="操作日志" name="操作日志"></el-tab-pane>
</el-tabs>
<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 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-col>
<el-col :span="12">
<el-form-item label="任务分组" prop="jobGroup">
<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-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="invokeTarget">
<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-col>
<el-col :span="24">
<el-form-item label="cron表达式" prop="cronExpression">
<el-input v-model="form.cronExpression" placeholder="请输入cron执行表达式">
<template #append>
<el-button type="primary" @click="handleShowCron">
生成表达式
<i class="el-icon-time el-icon--right"></i>
</el-button>
</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="24" v-if="form.jobId !== undefined">
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<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-col>
<el-col :span="12">
<el-form-item label="执行策略" prop="misfirePolicy">
<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-col>
<el-col :span="12">
<el-form-item label="是否并发" prop="concurrent">
<el-radio-group v-model="form.concurrent">
<el-radio-button value="0">允许</el-radio-button>
<el-radio-button value="1">禁止</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</template>
</el-dialog>
<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 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-col>
<el-col :span="12">
<el-form-item label="任务分组" prop="jobGroup">
<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-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="invokeTarget">
<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-col>
<el-col :span="24">
<el-form-item label="cron表达式" prop="cronExpression">
<el-input v-model="form.cronExpression" placeholder="请输入cron执行表达式">
<template #append>
<el-button type="primary" @click="handleShowCron">
生成表达式
<i class="el-icon-time el-icon--right"></i>
</el-button>
</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="24" v-if="form.jobId !== undefined">
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<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-col>
<el-col :span="12">
<el-form-item label="执行策略" prop="misfirePolicy">
<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-col>
<el-col :span="12">
<el-form-item label="是否并发" prop="concurrent">
<el-radio-group v-model="form.concurrent">
<el-radio-button value="0">允许</el-radio-button>
<el-radio-button value="1">禁止</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</template>
</el-dialog>
<el-dialog title="Cron表达式生成器" v-model="openCron" append-to-body destroy-on-close>
<crontab ref="crontabRef" @hide="openCron=false" @fill="crontabFill" :expression="expression"></crontab>
<crontab ref="crontabRef" @hide="openCron = false" @fill="crontabFill" :expression="expression"></crontab>
</el-dialog>
<!-- 任务日志详细 -->
<el-dialog title="任务详细" v-model="openView" width="700px" append-to-body>
<el-form :model="form" label-width="120px">
<el-row>
<el-col :span="12">
<el-form-item label="任务编号:">{{ form.jobId }}</el-form-item>
<el-form-item label="任务名称:">{{ form.jobName }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="任务分组:">{{
jobGroupFormat(form)
}}</el-form-item>
<el-form-item label="创建时间:">{{
form.createTime
}}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="cron表达式:">{{
form.cronExpression
}}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="下次执行时间:">{{
parseTime(form.nextValidTime)
}}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="调用目标方法:">{{
form.invokeTarget
}}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="任务状态:">
<div v-if="form.status == 0">正常</div>
<div v-else-if="form.status == 1">暂停</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否并发:">
<div v-if="form.concurrent == 0">允许</div>
<div v-else-if="form.concurrent == 1">禁止</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="执行策略:">
<div v-if="form.misfirePolicy == 0">默认策略</div>
<div v-else-if="form.misfirePolicy == 1">立即执行</div>
<div v-else-if="form.misfirePolicy == 2">执行一次</div>
<div v-else-if="form.misfirePolicy == 3">放弃执行</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="openView = false">关 闭</el-button>
</div>
</template>
</el-dialog>
<!-- 任务日志详细 -->
<el-dialog title="任务详细" v-model="openView" width="700px" append-to-body>
<el-form :model="form" label-width="120px">
<el-row>
<el-col :span="12">
<el-form-item label="任务编号:">{{ form.jobId }}</el-form-item>
<el-form-item label="任务名称:">{{ form.jobName }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="任务分组:">{{ jobGroupFormat(form) }}</el-form-item>
<el-form-item label="创建时间:">{{ form.createTime }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="cron表达式:">{{ form.cronExpression }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="下次执行时间:">{{ parseTime(form.nextValidTime) }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="调用目标方法:">{{ form.invokeTarget }}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="任务状态:">
<div v-if="form.status == 0">正常</div>
<div v-else-if="form.status == 1">暂停</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否并发:">
<div v-if="form.concurrent == 0">允许</div>
<div v-else-if="form.concurrent == 1">禁止</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="执行策略:">
<div v-if="form.misfirePolicy == 0">默认策略</div>
<div v-else-if="form.misfirePolicy == 1">立即执行</div>
<div v-else-if="form.misfirePolicy == 2">执行一次</div>
<div v-else-if="form.misfirePolicy == 3">放弃执行</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="openView = false">关 闭</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="Job">
import { listJob, getJob, delJob, addJob, updateJob, runJob, changeJobStatus } from "@/api/monitor/job";
import Crontab from '@/components/Crontab'
const router = useRouter();
const { proxy } = getCurrentInstance();
const { sys_job_group, sys_job_status } = proxy.useDict("sys_job_group", "sys_job_status");
const nowText = ref("日志管理");
const activeName = ref("摄像头日志");
const jobList = ref([]);
const open = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref([]);
const dateRange = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref("");
const openView = ref(false);
const openCron = ref(false);
const expression = ref("");
const data = reactive({
</div>
</template>
<script setup name="Job">
import {
listJob,
getJob,
delJob,
addJob,
updateJob,
runJob,
changeJobStatus,
} from "@/api/monitor/job";
import Crontab from "@/components/Crontab";
const router = useRouter();
const { proxy } = getCurrentInstance();
const { sys_job_group, sys_job_status } = proxy.useDict(
"sys_job_group",
"sys_job_status"
);
const nowText = ref("日志管理");
const activeName = ref("摄像头日志");
const jobList = ref([]);
const open = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref([]);
const dateRange = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref("");
const openView = ref(false);
const openCron = ref(false);
const expression = ref("");
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
jobName: undefined,
jobGroup: undefined,
status: undefined
pageNum: 1,
pageSize: 10,
jobName: undefined,
jobGroup: undefined,
status: undefined,
},
rules: {
jobName: [{ required: true, message: "任务名称不能为空", trigger: "blur" }],
invokeTarget: [{ required: true, message: "调用目标字符串不能为空", trigger: "blur" }],
cronExpression: [{ required: true, message: "cron执行表达式不能为空", trigger: "change" }]
}
});
const { queryParams, form, rules } = toRefs(data);
function handleClick(){
}
jobName: [{ required: true, message: "任务名称不能为空", trigger: "blur" }],
invokeTarget: [
{ required: true, message: "调用目标字符串不能为空", trigger: "blur" },
],
cronExpression: [
{ required: true, message: "cron执行表达式不能为空", trigger: "change" },
],
},
});
const { queryParams, form, rules } = toRefs(data);
function handleClick() { }
/** 查询定时任务列表 */
function getList() {
/** 查询定时任务列表 */
function getList() {
loading.value = true;
listJob(proxy.addDateRange(queryParams.value, dateRange.value)).then(response => {
jobList.value = response.rows;
total.value = response.total;
loading.value = false;
});
}
/** 任务组名字典翻译 */
function jobGroupFormat(row, column) {
listJob(proxy.addDateRange(queryParams.value, dateRange.value)).then(
(response) => {
jobList.value = response.rows;
total.value = response.total;
loading.value = false;
}
);
}
/** 任务组名字典翻译 */
function jobGroupFormat(row, column) {
return proxy.selectDictLabel(sys_job_group.value, row.jobGroup);
}
/** 取消按钮 */
function cancel() {
}
/** 取消按钮 */
function cancel() {
open.value = false;
reset();
}
/** 表单重置 */
function reset() {
}
/** 表单重置 */
function reset() {
form.value = {
jobId: undefined,
jobName: undefined,
jobGroup: undefined,
invokeTarget: undefined,
cronExpression: undefined,
misfirePolicy: 1,
concurrent: 1,
status: "0"
jobId: undefined,
jobName: undefined,
jobGroup: undefined,
invokeTarget: undefined,
cronExpression: undefined,
misfirePolicy: 1,
concurrent: 1,
status: "0",
};
proxy.resetForm("jobRef");
}
/** 搜索按钮操作 */
function handleQuery() {
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
function resetQuery() {
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm("queryRef");
handleQuery();
}
// 多选框选中数据
function handleSelectionChange(selection) {
ids.value = selection.map(item => item.jobId);
}
// 多选框选中数据
function handleSelectionChange(selection) {
ids.value = selection.map((item) => item.jobId);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
// 更多操作触发
function handleCommand(command, row) {
}
// 更多操作触发
function handleCommand(command, row) {
switch (command) {
case "handleRun":
handleRun(row);
break;
case "handleView":
handleView(row);
break;
case "handleJobLog":
handleJobLog(row);
break;
default:
break;
case "handleRun":
handleRun(row);
break;
case "handleView":
handleView(row);
break;
case "handleJobLog":
handleJobLog(row);
break;
default:
break;
}
}
// 任务状态修改
function handleStatusChange(row) {
}
// 任务状态修改
function handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用";
proxy.$modal.confirm('确认要"' + text + '""' + row.jobName + '"任务吗?').then(function () {
return changeJobStatus(row.jobId, row.status);
}).then(() => {
proxy.$modal.msgSuccess(text + "成功");
}).catch(function () {
row.status = row.status === "0" ? "1" : "0";
});
}
/* 立即执行一次 */
function handleRun(row) {
proxy.$modal.confirm('确认要立即执行一次"' + row.jobName + '"任务吗?').then(function () {
return runJob(row.jobId, row.jobGroup);
}).then(() => {
proxy.$modal.msgSuccess("执行成功");})
.catch(() => {});
}
/** 任务详细信息 */
function handleView(row) {
getJob(row.jobId).then(response => {
form.value = response.data;
openView.value = true;
proxy.$modal
.confirm('确认要"' + text + '""' + row.jobName + '"任务吗?')
.then(function () {
return changeJobStatus(row.jobId, row.status);
})
.then(() => {
proxy.$modal.msgSuccess(text + "成功");
})
.catch(function () {
row.status = row.status === "0" ? "1" : "0";
});
}
/* 立即执行一次 */
function handleRun(row) {
proxy.$modal
.confirm('确认要立即执行一次"' + row.jobName + '"任务吗?')
.then(function () {
return runJob(row.jobId, row.jobGroup);
})
.then(() => {
proxy.$modal.msgSuccess("执行成功");
})
.catch(() => { });
}
/** 任务详细信息 */
function handleView(row) {
getJob(row.jobId).then((response) => {
form.value = response.data;
openView.value = true;
});
}
/** cron表达式按钮操作 */
function handleShowCron() {
}
/** cron表达式按钮操作 */
function handleShowCron() {
expression.value = form.value.cronExpression;
openCron.value = true;
}
/** 确定后回传值 */
function crontabFill(value) {
}
/** 确定后回传值 */
function crontabFill(value) {
form.value.cronExpression = value;
}
/** 任务日志列表查询 */
function handleJobLog(row) {
}
/** 任务日志列表查询 */
function handleJobLog(row) {
const jobId = row.jobId || 0;
router.push('/monitor/job-log/index/' + jobId)
}
/** 新增按钮操作 */
function handleAdd() {
router.push("/monitor/job-log/index/" + jobId);
}
/** 新增按钮操作 */
function handleAdd() {
reset();
open.value = true;
title.value = "添加任务";
}
/** 修改按钮操作 */
function handleUpdate(row) {
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset();
const jobId = row.jobId || ids.value;
getJob(jobId).then(response => {
form.value = response.data;
open.value = true;
title.value = "修改任务";
getJob(jobId).then((response) => {
form.value = response.data;
open.value = true;
title.value = "修改任务";
});
}
/** 提交按钮 */
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 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) {
const jobIds = row.jobId || ids.value;
proxy.$modal.confirm('是否确认删除定时任务编号为"' + jobIds + '"的数据项?').then(function () {
return delJob(jobIds);
}).then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
}).catch(() => {});
}
/** 导出按钮操作 */
function handleExport() {
proxy.download("monitor/job/export", {
...queryParams.value,
}, `job_${new Date().getTime()}.xlsx`);
}
getList();
</script>
<style scoped lang="scss">
.left-list{
min-height: 700px;
}
</style>
proxy.$modal
.confirm('是否确认删除定时任务编号为"' + jobIds + '"的数据项?')
.then(function () {
return delJob(jobIds);
})
.then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
})
.catch(() => { });
}
/** 导出按钮操作 */
function handleExport() {
proxy.download(
"monitor/job/export",
{
...queryParams.value,
},
`job_${new Date().getTime()}.xlsx`
);
}
getList();
</script>
<style scoped lang="scss">
.left-list {
min-height: 700px;
}
</style>
<template>
<div class="app-container home">
<TabTitle :text="nowText" />
<el-row :gutter="10">
<el-col :xs="0" :sm="2" :md="3" :lg="4">
<el-card class="left-list">
<div class="head-container">
<el-input
v-model="deptName"
placeholder="请输入部门名称"
clearable
prefix-icon="Search"
style="margin-bottom: 20px"
/>
</div>
<div class="head-container">
<el-tree
:data="deptOptions"
:props="{ label: 'label', children: 'children' }"
:expand-on-click-node="false"
:filter-node-method="filterNode"
ref="deptTreeRef"
node-key="id"
highlight-current
default-expand-all
@node-click="handleNodeClick"
/>
</div>
</el-card>
</el-col>
<el-col :xs="24" :sm="16" :md="16" :lg="16">
<el-scrollbar height="700px">
<el-card class="right-list">
<div class="app-container home">
<TabTitle :text="nowText" />
<el-row :gutter="10">
<el-col :xs="0" :sm="2" :md="3" :lg="4">
<el-card class="left-list">
<div class="head-container">
<el-input
v-model="deptName"
placeholder="请输入部门名称"
clearable
prefix-icon="Search"
style="margin-bottom: 20px"
/>
</div>
<div class="head-container">
<el-tree
:data="deptOptions"
:props="{ label: 'label', children: 'children' }"
:expand-on-click-node="false"
:filter-node-method="filterNode"
ref="deptTreeRef"
node-key="id"
highlight-current
default-expand-all
@node-click="handleNodeClick"
/>
</div>
</el-card>
</el-col>
<el-col :xs="24" :sm="16" :md="16" :lg="14">
<el-scrollbar height="700px">
<el-card class="right-list">
<template v-slot:header>
<div class="cleartitle" style="justify-content: flex-start">
<img src="@/assets/images/logo_video.png" width="25px" alt=""> <span>视频预览</span>
<img src="@/assets/images/logo_video.png" width="25px" alt />
<span>视频预览</span>
</div>
</template>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
@click="handleUpdate"
>一分屏</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
@click="handleUpdate"
>四分屏</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
@click="handleDelete"
>六分屏</el-button>
</el-col>
</el-row>
<!-- <el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain @click="handleUpdate">一分屏</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain @click="handleUpdate">四分屏</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain @click="handleDelete">六分屏</el-button>
</el-col>
</el-row> -->
<div class="alg-list">
<el-card v-for="item in algorithmList" :key="item.name" class="alg-item" shadow="hover">
<template v-slot:header>
<div class="cleartitle">
<span>{{item.name}}</span>
<el-tag
:type="'success'"
effect="dark"
>
{{ 'success'}}
</el-tag>
</div>
</template>
<template v-slot:default >
<img
src="@/assets/images/picStream.png"
style="width: 100%"
/>
<p style="color: #999999;font-size: 12px;">
通过摄像头识别吸烟行为的智能算法
</p>
<div style="display: flex;justify-content: flex-end;position: absolute;right: 15px;bottom: 10px;" >
<el-button link type="primary" icon="Edit" @click="handleUpdate(item)" >修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(item)">删除</el-button>
<el-dropdown trigger="click" @command="handleSetSize">
<el-button link type="primary">
<el-icon class="el-icon--right">
<arrow-down />
</el-icon>更多</el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item :command="'卸载'">
{{ '卸载' }}
</el-dropdown-item>
<el-dropdown-item :command="'导入'">
{{ '导入' }}
</el-dropdown-item>
<el-dropdown-item :command="'下载'">
{{ '下载' }}
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
<el-card
class="alg-item"
shadow="hover"
>
<template v-slot:default>
<img src="@/assets/images/picStream.png" style="width: 100%" />
</template>
</el-card>
</div>
</el-card>
</el-scrollbar>
</el-col>
<el-col :xs="0" :sm="2" :md="3" :lg="4">
<el-card class="left-list">
<template v-slot:header>
<div class="cleartitle" style="justify-content: flex-start">
<img src="@/assets/images/logo_video.png" width="25px" alt=""> <span>实时预警</span>
</div>
</template>
</el-card>
</el-col>
</el-row>
</div>
</el-scrollbar>
</el-col>
<el-col :xs="0" :sm="2" :md="3" :lg="6">
<el-scrollbar height="700px">
<el-card class="danger-list">
<template v-slot:header>
<div class="cleartitle" style="justify-content: flex-start">
<img src="@/assets/images/logo_video.png" width="25px" alt />
<span>实时预警</span>
</div>
</template>
<div class="alg-list">
<el-card
v-for="item in algorithmList"
:key="item.name"
class="alg-item"
shadow="hover"
>
<template v-slot:default>
<img src="@/assets/images/picStream.png" style="width: 100%" />
<el-form :model="form" label-width="100px">
<el-form-item label="预警设备:">{{ form.title }} </el-form-item>
<el-form-item label="登录信息:">{{ form.title }}</el-form-item>
<el-form-item label="预警区域:">{{ form.title }}</el-form-item>
<el-form-item label="预警类型:">{{ form.title }}</el-form-item>
<el-form-item label="预警时间:">{{ form.title }}</el-form-item>
<el-form-item label="预警等级:"><el-tag :type="'danger'" effect="dark">{{ '一级预警'}} </el-tag></el-form-item>
</el-form>
</template>
</el-card>
</div>
</el-card>
</el-scrollbar>
</el-col>
</el-row>
</div>
</template>
<script setup name="Index">
import { ArrowDown } from '@element-plus/icons-vue'
import { Search } from '@element-plus/icons-vue'
const { proxy } = getCurrentInstance();
const algFormRef = ref(null)
const nowText=ref('视频预览')
const deptName = ref("");
const algorithmList=reactive([
{
name:"我的算法",
value:1
},
{
name:"最新算法",
value:2
},
{
name:"基础算法",
value:3
},
{
name:"智慧煤矿",
value:4
},
{
name:"智慧能源",
value:5
},
{
name:"智慧校园",
value:6
},
{
name:"智慧港口",
value:7
},
{
name:"智慧煤矿",
value:8
},
{
name:"智慧能源",
value:9
},
{
name:"智慧校园",
value:10
},
])
const data = reactive({
form: {},
queryParams: {
postCode: undefined,
searchValue: '',
status: undefined
},
rules: {
postName: [{ required: true, message: "岗位名称不能为空", trigger: "blur" }],
postCode: [{ required: true, message: "岗位编码不能为空", trigger: "blur" }],
postSort: [{ required: true, message: "岗位顺序不能为空", trigger: "blur" }],
}
});
const { queryParams, form, rules } = toRefs(data);
// function closeNow(){
// const routerArr=useTagsViewStore().visitedViews
// const nowPath=location.pathname
// return routerArr.filter(item=>{return item.path==nowPath })[0]
// }
// setTimeout(() => {
// nowText=closeNow()
// }, 500);
// function goTarget(url) {
// window.open(url, '__blank')
// }
function handAdd(row){
algFormRef.value.handleAdd()
}
function handleSetSize(row) {
console.log('%c [ row ]-170', 'font-size:13px; background:pink; color:#bf2c9f;', row)
// reset();
// const postId = row.postId || ids.value;
// getPost(postId).then(response => {
// form.value = response.data;
// open.value = true;
// title.value = "修改岗位";
// });
}
function handleUpdate(row) {
// reset();
// const postId = row.postId || ids.value;
// getPost(postId).then(response => {
// form.value = response.data;
// open.value = true;
// title.value = "修改岗位";
// });
}
import { ArrowDown } from "@element-plus/icons-vue";
import { Search } from "@element-plus/icons-vue";
const { proxy } = getCurrentInstance();
const algFormRef = ref(null);
const nowText = ref("视频预览");
const deptName = ref("");
const deptOptions = ref(undefined);
const algorithmList = reactive([
{
name: "我的算法",
value: 1,
},
{
name: "最新算法",
value: 2,
},
{
name: "基础算法",
value: 3,
},
{
name: "智慧煤矿",
value: 4,
},
{
name: "智慧能源",
value: 5,
},
{
name: "智慧校园",
value: 6,
},
{
name: "智慧港口",
value: 7,
},
{
name: "智慧煤矿",
value: 8,
},
{
name: "智慧能源",
value: 9,
},
{
name: "智慧校园",
value: 10,
},
]);
const data = reactive({
form: {
title:'测试测试测试'
},
queryParams: {
postCode: undefined,
searchValue: "",
status: undefined,
},
rules: {
postName: [
{ required: true, message: "岗位名称不能为空", trigger: "blur" },
],
postCode: [
{ required: true, message: "岗位编码不能为空", trigger: "blur" },
],
postSort: [
{ required: true, message: "岗位顺序不能为空", trigger: "blur" },
],
},
});
const { queryParams, form, rules } = toRefs(data);
/** 通过条件过滤节点 */
const filterNode = (value, data) => {
if (!value) return true;
return data.label.indexOf(value) !== -1;
};
// function closeNow(){
// const routerArr=useTagsViewStore().visitedViews
// const nowPath=location.pathname
// return routerArr.filter(item=>{return item.path==nowPath })[0]
// }
// setTimeout(() => {
// nowText=closeNow()awdasa
// }, 500);
// function goTarget(url) {
// window.open(url, '__blank')
// }
function handleNodeClick(row) {
/** 删除按钮操作 */
function handleDelete(row) {
// const postIds = row.postId || ids.value;
// proxy.$modal.confirm('是否确认删除岗位编号为"' + postIds + '"的数据项?').then(function() {
// return delPost(postIds);
// }).then(() => {
// getList();
// proxy.$modal.msgSuccess("删除成功");
// }).catch(() => {});
}
}
function handAdd(row) {
algFormRef.value.handleAdd();
}
function handleSetSize(row) {
console.log(
"%c [ row ]-170",
"font-size:13px; background:pink; color:#bf2c9f;",
row
);
// reset();
// const postId = row.postId || ids.value;
// getPost(postId).then(response => {
// form.value = response.data;
// open.value = true;
// title.value = "修改岗位";
// });
}
function handleUpdate(row) {
// reset();
// const postId = row.postId || ids.value;
// getPost(postId).then(response => {
// form.value = response.data;
// open.value = true;
// title.value = "修改岗位";
// });
}
</script>
/** 删除按钮操作 */
function handleDelete(row) {
// const postIds = row.postId || ids.value;
// proxy.$modal.confirm('是否确认删除岗位编号为"' + postIds + '"的数据项?').then(function() {
// return delPost(postIds);
// }).then(() => {
// getList();
// proxy.$modal.msgSuccess("删除成功");
// }).catch(() => {});
}
</script>
<style scoped lang="scss">
.left-list{
min-height: 700px;
}
.right-list{
min-height: 700px;
.alg-list{
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 16px;
.alg-item{
width: 100%;
min-height: 350px;
cursor: pointer;
position: relative;
}
<style scoped lang="scss">
.left-list {
min-height: 700px;
}
.right-list {
min-height: 700px;
.alg-list {
display: grid;
// grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 16px;
.el-card {
border: 1px soild #ff6700;
}
.alg-item {
width: 100%;
// min-height: 350px;
cursor: pointer;
position: relative;
}
}
}
.danger-list{
min-height: 700px;
.alg-list {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 16px;
.el-card {
border: 1px soild #ff6700;
}
.alg-item {
width: 100%;
// min-height: 350px;
cursor: pointer;
position: relative;
}
.el-form-item--default,.el-form-item {
font-size: 12px;
margin-bottom: 0px;
}
}
.cleartitle{
font-size: 16px;
font-weight: 600;
display: flex;
justify-content: space-between;
align-items: center
}
</style>
}
.cleartitle {
font-size: 16px;
font-weight: 600;
display: flex;
justify-content: space-between;
align-items: center;
}
</style>
\ No newline at end of file
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