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

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

parent 344cdd20
......@@ -16,9 +16,10 @@ export default defineComponent({
</script>
<style scope lang="scss">
.tab-title{
.tab-title {
display: flex;
align-items:center;/*for vertical align*/
align-items: center;
/*for vertical align*/
font-size: 20px;
height: 50px;
color: #1890FF;
......@@ -26,18 +27,22 @@ export default defineComponent({
margin-bottom: 10px;
border-radius: 5px;
padding: 0;
.el-card__body{
.el-card__body {
padding: 0 !important;
}
}
.tab-title::before{
content:"";
}
.tab-title::before {
content: "";
display: inline-block;
width: 8px; /* 矩形的宽度 */
height: 28px; /* 矩形的高度 */
background-color: #1890FF; /* 矩形的背景颜色 */
width: 8px;
/* 矩形的宽度 */
height: 28px;
/* 矩形的高度 */
background-color: #1890FF;
/* 矩形的背景颜色 */
margin-right: 8px;
border-radius: 8px;
}
</style>
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>
......
......@@ -11,23 +11,12 @@
<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-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-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>
......@@ -49,33 +38,26 @@
<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>
<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-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-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"
/>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- 添加或修改定时任务对话框 -->
......@@ -90,12 +72,8 @@
<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-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>
......@@ -134,11 +112,8 @@
<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 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>
......@@ -170,7 +145,7 @@
</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>
<!-- 任务日志详细 -->
......@@ -182,17 +157,27 @@
<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-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-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-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-form-item label="调用目标方法:">{{
form.invokeTarget
}}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="任务状态:">
......@@ -223,76 +208,91 @@
</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({
</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
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);
invokeTarget: [
{ required: true, message: "调用目标字符串不能为空", trigger: "blur" },
],
cronExpression: [
{ required: true, message: "cron执行表达式不能为空", trigger: "change" },
],
},
});
function handleClick(){
const { queryParams, form, rules } = toRefs(data);
}
function handleClick() { }
/** 查询定时任务列表 */
function getList() {
/** 查询定时任务列表 */
function getList() {
loading.value = true;
listJob(proxy.addDateRange(queryParams.value, dateRange.value)).then(response => {
listJob(proxy.addDateRange(queryParams.value, dateRange.value)).then(
(response) => {
jobList.value = response.rows;
total.value = response.total;
loading.value = false;
});
}
);
}
/** 任务组名字典翻译 */
function jobGroupFormat(row, column) {
/** 任务组名字典翻译 */
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,
......@@ -301,32 +301,32 @@ function handleClick(){
cronExpression: undefined,
misfirePolicy: 1,
concurrent: 1,
status: "0"
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);
......@@ -340,84 +340,92 @@ function handleClick(){
default:
break;
}
}
}
// 任务状态修改
function handleStatusChange(row) {
// 任务状态修改
function handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用";
proxy.$modal.confirm('确认要"' + text + '""' + row.jobName + '"任务吗?').then(function () {
proxy.$modal
.confirm('确认要"' + text + '""' + row.jobName + '"任务吗?')
.then(function () {
return changeJobStatus(row.jobId, row.status);
}).then(() => {
})
.then(() => {
proxy.$modal.msgSuccess(text + "成功");
}).catch(function () {
})
.catch(function () {
row.status = row.status === "0" ? "1" : "0";
});
}
}
/* 立即执行一次 */
function handleRun(row) {
proxy.$modal.confirm('确认要立即执行一次"' + row.jobName + '"任务吗?').then(function () {
/* 立即执行一次 */
function handleRun(row) {
proxy.$modal
.confirm('确认要立即执行一次"' + row.jobName + '"任务吗?')
.then(function () {
return runJob(row.jobId, row.jobGroup);
}).then(() => {
proxy.$modal.msgSuccess("执行成功");})
.catch(() => {});
}
})
.then(() => {
proxy.$modal.msgSuccess("执行成功");
})
.catch(() => { });
}
/** 任务详细信息 */
function handleView(row) {
getJob(row.jobId).then(response => {
/** 任务详细信息 */
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)
}
router.push("/monitor/job-log/index/" + jobId);
}
/** 新增按钮操作 */
function handleAdd() {
/** 新增按钮操作 */
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 => {
getJob(jobId).then((response) => {
form.value = response.data;
open.value = true;
title.value = "修改任务";
});
}
}
/** 提交按钮 */
function submitForm() {
proxy.$refs["jobRef"].validate(valid => {
/** 提交按钮 */
function submitForm() {
proxy.$refs["jobRef"].validate((valid) => {
if (valid) {
if (form.value.jobId != undefined) {
updateJob(form.value).then(response => {
updateJob(form.value).then((response) => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
});
} else {
addJob(form.value).then(response => {
addJob(form.value).then((response) => {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();
......@@ -425,31 +433,38 @@ function handleClick(){
}
}
});
}
}
/** 删除按钮操作 */
function handleDelete(row) {
/** 删除按钮操作 */
function handleDelete(row) {
const jobIds = row.jobId || ids.value;
proxy.$modal.confirm('是否确认删除定时任务编号为"' + jobIds + '"的数据项?').then(function () {
proxy.$modal
.confirm('是否确认删除定时任务编号为"' + jobIds + '"的数据项?')
.then(function () {
return delJob(jobIds);
}).then(() => {
})
.then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
}).catch(() => {});
}
})
.catch(() => { });
}
/** 导出按钮操作 */
function handleExport() {
proxy.download("monitor/job/export", {
/** 导出按钮操作 */
function handleExport() {
proxy.download(
"monitor/job/export",
{
...queryParams.value,
}, `job_${new Date().getTime()}.xlsx`);
}
},
`job_${new Date().getTime()}.xlsx`
);
}
getList();
</script>
<style scoped lang="scss">
.left-list{
getList();
</script>
<style scoped lang="scss">
.left-list {
min-height: 700px;
}
}
</style>
......@@ -28,179 +28,179 @@
</div>
</el-card>
</el-col>
<el-col :xs="24" :sm="16" :md="16" :lg="16">
<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-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
@click="handleUpdate"
>一分屏</el-button>
<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-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-button type="primary" plain @click="handleDelete">六分屏</el-button>
</el-col>
</el-row>
</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"
<el-card
class="alg-item"
shadow="hover"
>
{{ '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>
<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">
<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>
<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([
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: 1,
},
{
name:"最新算法",
value:2
name: "最新算法",
value: 2,
},
{
name:"基础算法",
value:3
name: "基础算法",
value: 3,
},
{
name:"智慧煤矿",
value:4
name: "智慧煤矿",
value: 4,
},
{
name:"智慧能源",
value:5
name: "智慧能源",
value: 5,
},
{
name:"智慧校园",
value:6
name: "智慧校园",
value: 6,
},
{
name:"智慧港口",
value:7
name: "智慧港口",
value: 7,
},
{
name:"智慧煤矿",
value:8
name: "智慧煤矿",
value: 8,
},
{
name:"智慧能源",
value:9
name: "智慧能源",
value: 9,
},
{
name:"智慧校园",
value:10
name: "智慧校园",
value: 10,
},
]);
const data = reactive({
form: {
title:'测试测试测试'
},
])
const data = reactive({
form: {},
queryParams: {
postCode: undefined,
searchValue: '',
status: 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)
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 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 => {
......@@ -208,8 +208,8 @@
// open.value = true;
// title.value = "修改岗位";
// });
}
function handleUpdate(row) {
}
function handleUpdate(row) {
// reset();
// const postId = row.postId || ids.value;
// getPost(postId).then(response => {
......@@ -217,10 +217,10 @@
// open.value = true;
// title.value = "修改岗位";
// });
}
}
/** 删除按钮操作 */
function handleDelete(row) {
/** 删除按钮操作 */
function handleDelete(row) {
// const postIds = row.postId || ids.value;
// proxy.$modal.confirm('是否确认删除岗位编号为"' + postIds + '"的数据项?').then(function() {
// return delPost(postIds);
......@@ -228,35 +228,59 @@
// getList();
// proxy.$modal.msgSuccess("删除成功");
// }).catch(() => {});
}
}
</script>
</script>
<style scoped lang="scss">
.left-list{
<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;
}
}
.right-list{
}
.danger-list{
min-height: 700px;
.alg-list{
.alg-list {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 16px;
.alg-item{
.el-card {
border: 1px soild #ff6700;
}
.alg-item {
width: 100%;
min-height: 350px;
// min-height: 350px;
cursor: pointer;
position: relative;
}
.el-form-item--default,.el-form-item {
font-size: 12px;
margin-bottom: 0px;
}
}
.cleartitle{
}
.cleartitle {
font-size: 16px;
font-weight: 600;
display: flex;
justify-content: space-between;
align-items: center
}
</style>
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