Loading src/components/TabTitle/index.vue +32 −27 Original line number Original line Diff line number Diff line Loading @@ -18,7 +18,8 @@ export default defineComponent({ <style scope lang="scss"> <style scope lang="scss"> .tab-title { .tab-title { display: flex; display: flex; align-items:center;/*for vertical align*/ align-items: center; /*for vertical align*/ font-size: 20px; font-size: 20px; height: 50px; height: 50px; color: #1890FF; color: #1890FF; Loading @@ -26,18 +27,22 @@ export default defineComponent({ margin-bottom: 10px; margin-bottom: 10px; border-radius: 5px; border-radius: 5px; padding: 0; padding: 0; .el-card__body { .el-card__body { padding: 0 !important; padding: 0 !important; } } } } .tab-title::before { .tab-title::before { content: ""; content: ""; display: inline-block; display: inline-block; width: 8px; /* 矩形的宽度 */ width: 8px; height: 28px; /* 矩形的高度 */ /* 矩形的宽度 */ background-color: #1890FF; /* 矩形的背景颜色 */ height: 28px; /* 矩形的高度 */ background-color: #1890FF; /* 矩形的背景颜色 */ margin-right: 8px; margin-right: 8px; border-radius: 8px; border-radius: 8px; } margin-left: 8px; }</style> </style> src/views/algorithmList/index.vue +1 −1 Original line number Original line Diff line number Diff line Loading @@ -25,7 +25,7 @@ default-active="2" default-active="2" class="el-menu-vertical-demo" 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> <span>{{ item.name }}</span> </el-menu-item> </el-menu-item> </el-menu> </el-menu> Loading src/views/logControl/index.vue +425 −410 Original line number Original line Diff line number Diff line Loading @@ -11,23 +11,12 @@ <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch"> <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch"> <el-form-item label="日志时间" prop="name"> <el-form-item label="日志时间" prop="name"> <el-date-picker <el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-" v-model="dateRange" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker> value-format="YYYY-MM-DD" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" ></el-date-picker> </el-form-item> </el-form-item> <el-form-item label="摄像头" prop="deptName"> <el-form-item label="摄像头" prop="deptName"> <el-select v-model="queryParams.deptName" placeholder="请选择摄像头" clearable style="width: 200px"> <el-select v-model="queryParams.deptName" placeholder="请选择摄像头" clearable style="width: 200px"> <el-option <el-option v-for="dict in sys_job_status" :key="dict.value" :label="dict.label" :value="dict.value" /> v-for="dict in sys_job_status" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-select> </el-form-item> </el-form-item> <el-form-item> <el-form-item> Loading @@ -49,33 +38,26 @@ <el-table-column label="创建时间" align="center" prop="cronExpression" :show-overflow-tooltip="true" /> <el-table-column label="创建时间" align="center" prop="cronExpression" :show-overflow-tooltip="true" /> <el-table-column label="操作人" align="center"> <el-table-column label="操作人" align="center"> <template #default="scope"> <template #default="scope"> <el-switch <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" v-model="scope.row.status" @change="handleStatusChange(scope.row)"></el-switch> active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)" ></el-switch> </template> </template> </el-table-column> </el-table-column> <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width"> <template #default="scope"> <template #default="scope"> <el-tooltip content="修改" placement="top"> <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> <el-tooltip content="删除" placement="top"> <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> </el-tooltip> </template> </template> </el-table-column> </el-table-column> </el-table> </el-table> <pagination <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-show="total > 0" v-model:limit="queryParams.pageSize" @pagination="getList" /> :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> </el-card> </el-card> <!-- 添加或修改定时任务对话框 --> <!-- 添加或修改定时任务对话框 --> Loading @@ -90,12 +72,8 @@ <el-col :span="12"> <el-col :span="12"> <el-form-item label="任务分组" prop="jobGroup"> <el-form-item label="任务分组" prop="jobGroup"> <el-select v-model="form.jobGroup" placeholder="请选择"> <el-select v-model="form.jobGroup" placeholder="请选择"> <el-option <el-option v-for="dict in sys_job_group" :key="dict.value" :label="dict.label" v-for="dict in sys_job_group" :value="dict.value"></el-option> :key="dict.value" :label="dict.label" :value="dict.value" ></el-option> </el-select> </el-select> </el-form-item> </el-form-item> </el-col> </el-col> Loading Loading @@ -134,11 +112,8 @@ <el-col :span="24" v-if="form.jobId !== undefined"> <el-col :span="24" v-if="form.jobId !== undefined"> <el-form-item label="状态"> <el-form-item label="状态"> <el-radio-group v-model="form.status"> <el-radio-group v-model="form.status"> <el-radio <el-radio v-for="dict in sys_job_status" :key="dict.value" :value="dict.value">{{ dict.label v-for="dict in sys_job_status" }}</el-radio> :key="dict.value" :value="dict.value" >{{ dict.label }}</el-radio> </el-radio-group> </el-radio-group> </el-form-item> </el-form-item> </el-col> </el-col> Loading Loading @@ -182,17 +157,27 @@ <el-form-item label="任务名称:">{{ form.jobName }}</el-form-item> <el-form-item label="任务名称:">{{ form.jobName }}</el-form-item> </el-col> </el-col> <el-col :span="12"> <el-col :span="12"> <el-form-item label="任务分组:">{{ jobGroupFormat(form) }}</el-form-item> <el-form-item label="任务分组:">{{ <el-form-item label="创建时间:">{{ form.createTime }}</el-form-item> jobGroupFormat(form) }}</el-form-item> <el-form-item label="创建时间:">{{ form.createTime }}</el-form-item> </el-col> </el-col> <el-col :span="12"> <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> <el-col :span="12"> <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> <el-col :span="24"> <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> <el-col :span="12"> <el-col :span="12"> <el-form-item label="任务状态:"> <el-form-item label="任务状态:"> Loading Loading @@ -226,11 +211,22 @@ </template> </template> <script setup name="Job"> <script setup name="Job"> import { listJob, getJob, delJob, addJob, updateJob, runJob, changeJobStatus } from "@/api/monitor/job"; import { import Crontab from '@/components/Crontab' listJob, getJob, 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("sys_job_group", "sys_job_status"); const { sys_job_group, sys_job_status } = proxy.useDict( "sys_job_group", "sys_job_status" ); const nowText = ref("日志管理"); const nowText = ref("日志管理"); const activeName = ref("摄像头日志"); const activeName = ref("摄像头日志"); Loading @@ -255,29 +251,33 @@ pageSize: 10, pageSize: 10, jobName: undefined, jobName: undefined, jobGroup: undefined, jobGroup: undefined, status: undefined status: undefined, }, }, rules: { rules: { jobName: [{ required: true, message: "任务名称不能为空", trigger: "blur" }], jobName: [{ required: true, message: "任务名称不能为空", trigger: "blur" }], invokeTarget: [{ required: true, message: "调用目标字符串不能为空", trigger: "blur" }], invokeTarget: [ cronExpression: [{ required: true, message: "cron执行表达式不能为空", trigger: "change" }] { required: true, message: "调用目标字符串不能为空", trigger: "blur" }, } ], cronExpression: [ { required: true, message: "cron执行表达式不能为空", trigger: "change" }, ], }, }); }); const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data); function handleClick(){ function handleClick() { } } /** 查询定时任务列表 */ /** 查询定时任务列表 */ function getList() { function getList() { loading.value = true; 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; jobList.value = response.rows; total.value = response.total; total.value = response.total; loading.value = false; loading.value = false; }); } ); } } /** 任务组名字典翻译 */ /** 任务组名字典翻译 */ Loading @@ -301,7 +301,7 @@ function handleClick(){ cronExpression: undefined, cronExpression: undefined, misfirePolicy: 1, misfirePolicy: 1, concurrent: 1, concurrent: 1, status: "0" status: "0", }; }; proxy.resetForm("jobRef"); proxy.resetForm("jobRef"); } } Loading @@ -320,7 +320,7 @@ function handleClick(){ // 多选框选中数据 // 多选框选中数据 function handleSelectionChange(selection) { function handleSelectionChange(selection) { ids.value = selection.map(item => item.jobId); ids.value = selection.map((item) => item.jobId); single.value = selection.length != 1; single.value = selection.length != 1; multiple.value = !selection.length; multiple.value = !selection.length; } } Loading @@ -345,27 +345,35 @@ function handleClick(){ // 任务状态修改 // 任务状态修改 function handleStatusChange(row) { function handleStatusChange(row) { let text = row.status === "0" ? "启用" : "停用"; 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); 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"; }); }); } } /* 立即执行一次 */ /* 立即执行一次 */ function handleRun(row) { function handleRun(row) { proxy.$modal.confirm('确认要立即执行一次"' + row.jobName + '"任务吗?').then(function () { proxy.$modal .confirm('确认要立即执行一次"' + row.jobName + '"任务吗?') .then(function () { return runJob(row.jobId, row.jobGroup); return runJob(row.jobId, row.jobGroup); }).then(() => { }) proxy.$modal.msgSuccess("执行成功");}) .then(() => { proxy.$modal.msgSuccess("执行成功"); }) .catch(() => { }); .catch(() => { }); } } /** 任务详细信息 */ /** 任务详细信息 */ function handleView(row) { function handleView(row) { getJob(row.jobId).then(response => { getJob(row.jobId).then((response) => { form.value = response.data; form.value = response.data; openView.value = true; openView.value = true; }); }); Loading @@ -385,7 +393,7 @@ function handleClick(){ /** 任务日志列表查询 */ /** 任务日志列表查询 */ function handleJobLog(row) { function handleJobLog(row) { const jobId = row.jobId || 0; const jobId = row.jobId || 0; router.push('/monitor/job-log/index/' + jobId) router.push("/monitor/job-log/index/" + jobId); } } /** 新增按钮操作 */ /** 新增按钮操作 */ Loading @@ -399,7 +407,7 @@ function handleClick(){ function handleUpdate(row) { function handleUpdate(row) { reset(); reset(); const jobId = row.jobId || ids.value; const jobId = row.jobId || ids.value; getJob(jobId).then(response => { getJob(jobId).then((response) => { form.value = response.data; form.value = response.data; open.value = true; open.value = true; title.value = "修改任务"; title.value = "修改任务"; Loading @@ -408,16 +416,16 @@ function handleClick(){ /** 提交按钮 */ /** 提交按钮 */ function submitForm() { function submitForm() { proxy.$refs["jobRef"].validate(valid => { proxy.$refs["jobRef"].validate((valid) => { if (valid) { if (valid) { if (form.value.jobId != undefined) { if (form.value.jobId != undefined) { updateJob(form.value).then(response => { updateJob(form.value).then((response) => { proxy.$modal.msgSuccess("修改成功"); proxy.$modal.msgSuccess("修改成功"); open.value = false; open.value = false; getList(); getList(); }); }); } else { } else { addJob(form.value).then(response => { addJob(form.value).then((response) => { proxy.$modal.msgSuccess("新增成功"); proxy.$modal.msgSuccess("新增成功"); open.value = false; open.value = false; getList(); getList(); Loading @@ -430,19 +438,27 @@ function handleClick(){ /** 删除按钮操作 */ /** 删除按钮操作 */ function handleDelete(row) { function handleDelete(row) { const jobIds = row.jobId || ids.value; const jobIds = row.jobId || ids.value; proxy.$modal.confirm('是否确认删除定时任务编号为"' + jobIds + '"的数据项?').then(function () { proxy.$modal .confirm('是否确认删除定时任务编号为"' + jobIds + '"的数据项?') .then(function () { return delJob(jobIds); return delJob(jobIds); }).then(() => { }) .then(() => { getList(); getList(); proxy.$modal.msgSuccess("删除成功"); proxy.$modal.msgSuccess("删除成功"); }).catch(() => {}); }) .catch(() => { }); } } /** 导出按钮操作 */ /** 导出按钮操作 */ function handleExport() { function handleExport() { proxy.download("monitor/job/export", { proxy.download( "monitor/job/export", { ...queryParams.value, ...queryParams.value, }, `job_${new Date().getTime()}.xlsx`); }, `job_${new Date().getTime()}.xlsx` ); } } getList(); getList(); Loading @@ -452,4 +468,3 @@ function handleClick(){ min-height: 700px; min-height: 700px; } } </style> </style> src/views/videoControl/videoPreview/index.vue +266 −242 Original line number Original line Diff line number Diff line Loading @@ -28,179 +28,179 @@ </div> </div> </el-card> </el-card> </el-col> </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-scrollbar height="700px"> <el-card class="right-list"> <el-card class="right-list"> <template v-slot:header> <template v-slot:header> <div class="cleartitle" style="justify-content: flex-start"> <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> </div> </template> </template> <el-row :gutter="10" class="mb8"> <!-- <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-col :span="1.5"> <el-button <el-button type="primary" plain @click="handleUpdate">一分屏</el-button> type="primary" plain @click="handleUpdate" >一分屏</el-button> </el-col> </el-col> <el-col :span="1.5"> <el-col :span="1.5"> <el-button <el-button type="primary" plain @click="handleUpdate">四分屏</el-button> type="primary" plain @click="handleUpdate" >四分屏</el-button> </el-col> </el-col> <el-col :span="1.5"> <el-col :span="1.5"> <el-button <el-button type="primary" plain @click="handleDelete">六分屏</el-button> type="primary" plain @click="handleDelete" >六分屏</el-button> </el-col> </el-col> </el-row> </el-row> --> <div class="alg-list"> <div class="alg-list"> <el-card v-for="item in algorithmList" :key="item.name" class="alg-item" shadow="hover"> <el-card <template v-slot:header> class="alg-item" <div class="cleartitle"> shadow="hover" <span>{{item.name}}</span> <el-tag :type="'success'" effect="dark" > > {{ 'success'}} </el-tag> </div> </template> <template v-slot:default> <template v-slot:default> <img <img src="@/assets/images/picStream.png" style="width: 100%" /> 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> </template> </el-card> </el-card> </div> </div> </el-card> </el-card> </el-scrollbar> </el-scrollbar> </el-col> </el-col> <el-col :xs="0" :sm="2" :md="3" :lg="4"> <el-col :xs="0" :sm="2" :md="3" :lg="6"> <el-card class="left-list"> <el-scrollbar height="700px"> <el-card class="danger-list"> <template v-slot:header> <template v-slot:header> <div class="cleartitle" style="justify-content: flex-start"> <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> </div> </template> </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-card> </el-scrollbar> </el-col> </el-col> </el-row> </el-row> </div> </div> </template> </template> <script setup name="Index"> <script setup name="Index"> import { ArrowDown } from '@element-plus/icons-vue' import { ArrowDown } from "@element-plus/icons-vue"; import { Search } from '@element-plus/icons-vue' import { Search } from "@element-plus/icons-vue"; const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance(); const algFormRef = ref(null) const algFormRef = ref(null); const nowText=ref('视频预览') const nowText = ref("视频预览"); const deptName = ref(""); const deptName = ref(""); const deptOptions = ref(undefined); const algorithmList = reactive([ const algorithmList = reactive([ { { name: "我的算法", name: "我的算法", value:1 value: 1, }, }, { { name: "最新算法", name: "最新算法", value:2 value: 2, }, }, { { name: "基础算法", name: "基础算法", value:3 value: 3, }, }, { { name: "智慧煤矿", name: "智慧煤矿", value:4 value: 4, }, }, { { name: "智慧能源", name: "智慧能源", value:5 value: 5, }, }, { { name: "智慧校园", name: "智慧校园", value:6 value: 6, }, }, { { name: "智慧港口", name: "智慧港口", value:7 value: 7, }, }, { { name: "智慧煤矿", name: "智慧煤矿", value:8 value: 8, }, }, { { name: "智慧能源", name: "智慧能源", value:9 value: 9, }, }, { { name: "智慧校园", name: "智慧校园", value:10 value: 10, }, }, ]) ]); const data = reactive({ const data = reactive({ form: {}, form: { title:'测试测试测试' }, queryParams: { queryParams: { postCode: undefined, postCode: undefined, searchValue: '', searchValue: "", status: undefined status: undefined, }, }, rules: { rules: { postName: [{ required: true, message: "岗位名称不能为空", trigger: "blur" }], postName: [ postCode: [{ required: true, message: "岗位编码不能为空", trigger: "blur" }], { required: true, message: "岗位名称不能为空", trigger: "blur" }, postSort: [{ required: true, message: "岗位顺序不能为空", trigger: "blur" }], ], } postCode: [ { required: true, message: "岗位编码不能为空", trigger: "blur" }, ], postSort: [ { required: true, message: "岗位顺序不能为空", trigger: "blur" }, ], }, }); }); const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data); /** 通过条件过滤节点 */ const filterNode = (value, data) => { if (!value) return true; return data.label.indexOf(value) !== -1; }; // function closeNow(){ // function closeNow(){ // const routerArr=useTagsViewStore().visitedViews // const routerArr=useTagsViewStore().visitedViews // const nowPath=location.pathname // const nowPath=location.pathname // return routerArr.filter(item=>{return item.path==nowPath })[0] // return routerArr.filter(item=>{return item.path==nowPath })[0] // } // } // setTimeout(() => { // setTimeout(() => { // nowText=closeNow() // nowText=closeNow()awdasa // }, 500); // }, 500); // function goTarget(url) { // function goTarget(url) { // window.open(url, '__blank') // window.open(url, '__blank') // } // } function handleNodeClick(row) { } function handAdd(row) { function handAdd(row) { algFormRef.value.handleAdd() algFormRef.value.handleAdd(); } } function handleSetSize(row) { function handleSetSize(row) { console.log('%c [ row ]-170', 'font-size:13px; background:pink; color:#bf2c9f;', row) console.log( "%c [ row ]-170", "font-size:13px; background:pink; color:#bf2c9f;", row ); // reset(); // reset(); // const postId = row.postId || ids.value; // const postId = row.postId || ids.value; // getPost(postId).then(response => { // getPost(postId).then(response => { Loading Loading @@ -229,7 +229,6 @@ // proxy.$modal.msgSuccess("删除成功"); // proxy.$modal.msgSuccess("删除成功"); // }).catch(() => {}); // }).catch(() => {}); } } </script> </script> <style scoped lang="scss"> <style scoped lang="scss"> Loading @@ -240,22 +239,47 @@ min-height: 700px; min-height: 700px; .alg-list { .alg-list { display: grid; display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); // grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; gap: 16px; .el-card { border: 1px soild #ff6700; } .alg-item { .alg-item { width: 100%; width: 100%; min-height: 350px; // min-height: 350px; cursor: pointer; cursor: pointer; position: relative; 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 { .cleartitle { font-size: 16px; font-size: 16px; font-weight: 600; font-weight: 600; display: flex; display: flex; justify-content: space-between; justify-content: space-between; align-items: center align-items: center; } } </style> </style> Loading
src/components/TabTitle/index.vue +32 −27 Original line number Original line Diff line number Diff line Loading @@ -18,7 +18,8 @@ export default defineComponent({ <style scope lang="scss"> <style scope lang="scss"> .tab-title { .tab-title { display: flex; display: flex; align-items:center;/*for vertical align*/ align-items: center; /*for vertical align*/ font-size: 20px; font-size: 20px; height: 50px; height: 50px; color: #1890FF; color: #1890FF; Loading @@ -26,18 +27,22 @@ export default defineComponent({ margin-bottom: 10px; margin-bottom: 10px; border-radius: 5px; border-radius: 5px; padding: 0; padding: 0; .el-card__body { .el-card__body { padding: 0 !important; padding: 0 !important; } } } } .tab-title::before { .tab-title::before { content: ""; content: ""; display: inline-block; display: inline-block; width: 8px; /* 矩形的宽度 */ width: 8px; height: 28px; /* 矩形的高度 */ /* 矩形的宽度 */ background-color: #1890FF; /* 矩形的背景颜色 */ height: 28px; /* 矩形的高度 */ background-color: #1890FF; /* 矩形的背景颜色 */ margin-right: 8px; margin-right: 8px; border-radius: 8px; border-radius: 8px; } margin-left: 8px; }</style> </style>
src/views/algorithmList/index.vue +1 −1 Original line number Original line Diff line number Diff line Loading @@ -25,7 +25,7 @@ default-active="2" default-active="2" class="el-menu-vertical-demo" 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> <span>{{ item.name }}</span> </el-menu-item> </el-menu-item> </el-menu> </el-menu> Loading
src/views/logControl/index.vue +425 −410 Original line number Original line Diff line number Diff line Loading @@ -11,23 +11,12 @@ <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch"> <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch"> <el-form-item label="日志时间" prop="name"> <el-form-item label="日志时间" prop="name"> <el-date-picker <el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-" v-model="dateRange" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker> value-format="YYYY-MM-DD" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" ></el-date-picker> </el-form-item> </el-form-item> <el-form-item label="摄像头" prop="deptName"> <el-form-item label="摄像头" prop="deptName"> <el-select v-model="queryParams.deptName" placeholder="请选择摄像头" clearable style="width: 200px"> <el-select v-model="queryParams.deptName" placeholder="请选择摄像头" clearable style="width: 200px"> <el-option <el-option v-for="dict in sys_job_status" :key="dict.value" :label="dict.label" :value="dict.value" /> v-for="dict in sys_job_status" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-select> </el-form-item> </el-form-item> <el-form-item> <el-form-item> Loading @@ -49,33 +38,26 @@ <el-table-column label="创建时间" align="center" prop="cronExpression" :show-overflow-tooltip="true" /> <el-table-column label="创建时间" align="center" prop="cronExpression" :show-overflow-tooltip="true" /> <el-table-column label="操作人" align="center"> <el-table-column label="操作人" align="center"> <template #default="scope"> <template #default="scope"> <el-switch <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" v-model="scope.row.status" @change="handleStatusChange(scope.row)"></el-switch> active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)" ></el-switch> </template> </template> </el-table-column> </el-table-column> <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width"> <template #default="scope"> <template #default="scope"> <el-tooltip content="修改" placement="top"> <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> <el-tooltip content="删除" placement="top"> <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> </el-tooltip> </template> </template> </el-table-column> </el-table-column> </el-table> </el-table> <pagination <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-show="total > 0" v-model:limit="queryParams.pageSize" @pagination="getList" /> :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> </el-card> </el-card> <!-- 添加或修改定时任务对话框 --> <!-- 添加或修改定时任务对话框 --> Loading @@ -90,12 +72,8 @@ <el-col :span="12"> <el-col :span="12"> <el-form-item label="任务分组" prop="jobGroup"> <el-form-item label="任务分组" prop="jobGroup"> <el-select v-model="form.jobGroup" placeholder="请选择"> <el-select v-model="form.jobGroup" placeholder="请选择"> <el-option <el-option v-for="dict in sys_job_group" :key="dict.value" :label="dict.label" v-for="dict in sys_job_group" :value="dict.value"></el-option> :key="dict.value" :label="dict.label" :value="dict.value" ></el-option> </el-select> </el-select> </el-form-item> </el-form-item> </el-col> </el-col> Loading Loading @@ -134,11 +112,8 @@ <el-col :span="24" v-if="form.jobId !== undefined"> <el-col :span="24" v-if="form.jobId !== undefined"> <el-form-item label="状态"> <el-form-item label="状态"> <el-radio-group v-model="form.status"> <el-radio-group v-model="form.status"> <el-radio <el-radio v-for="dict in sys_job_status" :key="dict.value" :value="dict.value">{{ dict.label v-for="dict in sys_job_status" }}</el-radio> :key="dict.value" :value="dict.value" >{{ dict.label }}</el-radio> </el-radio-group> </el-radio-group> </el-form-item> </el-form-item> </el-col> </el-col> Loading Loading @@ -182,17 +157,27 @@ <el-form-item label="任务名称:">{{ form.jobName }}</el-form-item> <el-form-item label="任务名称:">{{ form.jobName }}</el-form-item> </el-col> </el-col> <el-col :span="12"> <el-col :span="12"> <el-form-item label="任务分组:">{{ jobGroupFormat(form) }}</el-form-item> <el-form-item label="任务分组:">{{ <el-form-item label="创建时间:">{{ form.createTime }}</el-form-item> jobGroupFormat(form) }}</el-form-item> <el-form-item label="创建时间:">{{ form.createTime }}</el-form-item> </el-col> </el-col> <el-col :span="12"> <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> <el-col :span="12"> <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> <el-col :span="24"> <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> <el-col :span="12"> <el-col :span="12"> <el-form-item label="任务状态:"> <el-form-item label="任务状态:"> Loading Loading @@ -226,11 +211,22 @@ </template> </template> <script setup name="Job"> <script setup name="Job"> import { listJob, getJob, delJob, addJob, updateJob, runJob, changeJobStatus } from "@/api/monitor/job"; import { import Crontab from '@/components/Crontab' listJob, getJob, 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("sys_job_group", "sys_job_status"); const { sys_job_group, sys_job_status } = proxy.useDict( "sys_job_group", "sys_job_status" ); const nowText = ref("日志管理"); const nowText = ref("日志管理"); const activeName = ref("摄像头日志"); const activeName = ref("摄像头日志"); Loading @@ -255,29 +251,33 @@ pageSize: 10, pageSize: 10, jobName: undefined, jobName: undefined, jobGroup: undefined, jobGroup: undefined, status: undefined status: undefined, }, }, rules: { rules: { jobName: [{ required: true, message: "任务名称不能为空", trigger: "blur" }], jobName: [{ required: true, message: "任务名称不能为空", trigger: "blur" }], invokeTarget: [{ required: true, message: "调用目标字符串不能为空", trigger: "blur" }], invokeTarget: [ cronExpression: [{ required: true, message: "cron执行表达式不能为空", trigger: "change" }] { required: true, message: "调用目标字符串不能为空", trigger: "blur" }, } ], cronExpression: [ { required: true, message: "cron执行表达式不能为空", trigger: "change" }, ], }, }); }); const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data); function handleClick(){ function handleClick() { } } /** 查询定时任务列表 */ /** 查询定时任务列表 */ function getList() { function getList() { loading.value = true; 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; jobList.value = response.rows; total.value = response.total; total.value = response.total; loading.value = false; loading.value = false; }); } ); } } /** 任务组名字典翻译 */ /** 任务组名字典翻译 */ Loading @@ -301,7 +301,7 @@ function handleClick(){ cronExpression: undefined, cronExpression: undefined, misfirePolicy: 1, misfirePolicy: 1, concurrent: 1, concurrent: 1, status: "0" status: "0", }; }; proxy.resetForm("jobRef"); proxy.resetForm("jobRef"); } } Loading @@ -320,7 +320,7 @@ function handleClick(){ // 多选框选中数据 // 多选框选中数据 function handleSelectionChange(selection) { function handleSelectionChange(selection) { ids.value = selection.map(item => item.jobId); ids.value = selection.map((item) => item.jobId); single.value = selection.length != 1; single.value = selection.length != 1; multiple.value = !selection.length; multiple.value = !selection.length; } } Loading @@ -345,27 +345,35 @@ function handleClick(){ // 任务状态修改 // 任务状态修改 function handleStatusChange(row) { function handleStatusChange(row) { let text = row.status === "0" ? "启用" : "停用"; 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); 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"; }); }); } } /* 立即执行一次 */ /* 立即执行一次 */ function handleRun(row) { function handleRun(row) { proxy.$modal.confirm('确认要立即执行一次"' + row.jobName + '"任务吗?').then(function () { proxy.$modal .confirm('确认要立即执行一次"' + row.jobName + '"任务吗?') .then(function () { return runJob(row.jobId, row.jobGroup); return runJob(row.jobId, row.jobGroup); }).then(() => { }) proxy.$modal.msgSuccess("执行成功");}) .then(() => { proxy.$modal.msgSuccess("执行成功"); }) .catch(() => { }); .catch(() => { }); } } /** 任务详细信息 */ /** 任务详细信息 */ function handleView(row) { function handleView(row) { getJob(row.jobId).then(response => { getJob(row.jobId).then((response) => { form.value = response.data; form.value = response.data; openView.value = true; openView.value = true; }); }); Loading @@ -385,7 +393,7 @@ function handleClick(){ /** 任务日志列表查询 */ /** 任务日志列表查询 */ function handleJobLog(row) { function handleJobLog(row) { const jobId = row.jobId || 0; const jobId = row.jobId || 0; router.push('/monitor/job-log/index/' + jobId) router.push("/monitor/job-log/index/" + jobId); } } /** 新增按钮操作 */ /** 新增按钮操作 */ Loading @@ -399,7 +407,7 @@ function handleClick(){ function handleUpdate(row) { function handleUpdate(row) { reset(); reset(); const jobId = row.jobId || ids.value; const jobId = row.jobId || ids.value; getJob(jobId).then(response => { getJob(jobId).then((response) => { form.value = response.data; form.value = response.data; open.value = true; open.value = true; title.value = "修改任务"; title.value = "修改任务"; Loading @@ -408,16 +416,16 @@ function handleClick(){ /** 提交按钮 */ /** 提交按钮 */ function submitForm() { function submitForm() { proxy.$refs["jobRef"].validate(valid => { proxy.$refs["jobRef"].validate((valid) => { if (valid) { if (valid) { if (form.value.jobId != undefined) { if (form.value.jobId != undefined) { updateJob(form.value).then(response => { updateJob(form.value).then((response) => { proxy.$modal.msgSuccess("修改成功"); proxy.$modal.msgSuccess("修改成功"); open.value = false; open.value = false; getList(); getList(); }); }); } else { } else { addJob(form.value).then(response => { addJob(form.value).then((response) => { proxy.$modal.msgSuccess("新增成功"); proxy.$modal.msgSuccess("新增成功"); open.value = false; open.value = false; getList(); getList(); Loading @@ -430,19 +438,27 @@ function handleClick(){ /** 删除按钮操作 */ /** 删除按钮操作 */ function handleDelete(row) { function handleDelete(row) { const jobIds = row.jobId || ids.value; const jobIds = row.jobId || ids.value; proxy.$modal.confirm('是否确认删除定时任务编号为"' + jobIds + '"的数据项?').then(function () { proxy.$modal .confirm('是否确认删除定时任务编号为"' + jobIds + '"的数据项?') .then(function () { return delJob(jobIds); return delJob(jobIds); }).then(() => { }) .then(() => { getList(); getList(); proxy.$modal.msgSuccess("删除成功"); proxy.$modal.msgSuccess("删除成功"); }).catch(() => {}); }) .catch(() => { }); } } /** 导出按钮操作 */ /** 导出按钮操作 */ function handleExport() { function handleExport() { proxy.download("monitor/job/export", { proxy.download( "monitor/job/export", { ...queryParams.value, ...queryParams.value, }, `job_${new Date().getTime()}.xlsx`); }, `job_${new Date().getTime()}.xlsx` ); } } getList(); getList(); Loading @@ -452,4 +468,3 @@ function handleClick(){ min-height: 700px; min-height: 700px; } } </style> </style>
src/views/videoControl/videoPreview/index.vue +266 −242 Original line number Original line Diff line number Diff line Loading @@ -28,179 +28,179 @@ </div> </div> </el-card> </el-card> </el-col> </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-scrollbar height="700px"> <el-card class="right-list"> <el-card class="right-list"> <template v-slot:header> <template v-slot:header> <div class="cleartitle" style="justify-content: flex-start"> <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> </div> </template> </template> <el-row :gutter="10" class="mb8"> <!-- <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-col :span="1.5"> <el-button <el-button type="primary" plain @click="handleUpdate">一分屏</el-button> type="primary" plain @click="handleUpdate" >一分屏</el-button> </el-col> </el-col> <el-col :span="1.5"> <el-col :span="1.5"> <el-button <el-button type="primary" plain @click="handleUpdate">四分屏</el-button> type="primary" plain @click="handleUpdate" >四分屏</el-button> </el-col> </el-col> <el-col :span="1.5"> <el-col :span="1.5"> <el-button <el-button type="primary" plain @click="handleDelete">六分屏</el-button> type="primary" plain @click="handleDelete" >六分屏</el-button> </el-col> </el-col> </el-row> </el-row> --> <div class="alg-list"> <div class="alg-list"> <el-card v-for="item in algorithmList" :key="item.name" class="alg-item" shadow="hover"> <el-card <template v-slot:header> class="alg-item" <div class="cleartitle"> shadow="hover" <span>{{item.name}}</span> <el-tag :type="'success'" effect="dark" > > {{ 'success'}} </el-tag> </div> </template> <template v-slot:default> <template v-slot:default> <img <img src="@/assets/images/picStream.png" style="width: 100%" /> 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> </template> </el-card> </el-card> </div> </div> </el-card> </el-card> </el-scrollbar> </el-scrollbar> </el-col> </el-col> <el-col :xs="0" :sm="2" :md="3" :lg="4"> <el-col :xs="0" :sm="2" :md="3" :lg="6"> <el-card class="left-list"> <el-scrollbar height="700px"> <el-card class="danger-list"> <template v-slot:header> <template v-slot:header> <div class="cleartitle" style="justify-content: flex-start"> <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> </div> </template> </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-card> </el-scrollbar> </el-col> </el-col> </el-row> </el-row> </div> </div> </template> </template> <script setup name="Index"> <script setup name="Index"> import { ArrowDown } from '@element-plus/icons-vue' import { ArrowDown } from "@element-plus/icons-vue"; import { Search } from '@element-plus/icons-vue' import { Search } from "@element-plus/icons-vue"; const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance(); const algFormRef = ref(null) const algFormRef = ref(null); const nowText=ref('视频预览') const nowText = ref("视频预览"); const deptName = ref(""); const deptName = ref(""); const deptOptions = ref(undefined); const algorithmList = reactive([ const algorithmList = reactive([ { { name: "我的算法", name: "我的算法", value:1 value: 1, }, }, { { name: "最新算法", name: "最新算法", value:2 value: 2, }, }, { { name: "基础算法", name: "基础算法", value:3 value: 3, }, }, { { name: "智慧煤矿", name: "智慧煤矿", value:4 value: 4, }, }, { { name: "智慧能源", name: "智慧能源", value:5 value: 5, }, }, { { name: "智慧校园", name: "智慧校园", value:6 value: 6, }, }, { { name: "智慧港口", name: "智慧港口", value:7 value: 7, }, }, { { name: "智慧煤矿", name: "智慧煤矿", value:8 value: 8, }, }, { { name: "智慧能源", name: "智慧能源", value:9 value: 9, }, }, { { name: "智慧校园", name: "智慧校园", value:10 value: 10, }, }, ]) ]); const data = reactive({ const data = reactive({ form: {}, form: { title:'测试测试测试' }, queryParams: { queryParams: { postCode: undefined, postCode: undefined, searchValue: '', searchValue: "", status: undefined status: undefined, }, }, rules: { rules: { postName: [{ required: true, message: "岗位名称不能为空", trigger: "blur" }], postName: [ postCode: [{ required: true, message: "岗位编码不能为空", trigger: "blur" }], { required: true, message: "岗位名称不能为空", trigger: "blur" }, postSort: [{ required: true, message: "岗位顺序不能为空", trigger: "blur" }], ], } postCode: [ { required: true, message: "岗位编码不能为空", trigger: "blur" }, ], postSort: [ { required: true, message: "岗位顺序不能为空", trigger: "blur" }, ], }, }); }); const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data); /** 通过条件过滤节点 */ const filterNode = (value, data) => { if (!value) return true; return data.label.indexOf(value) !== -1; }; // function closeNow(){ // function closeNow(){ // const routerArr=useTagsViewStore().visitedViews // const routerArr=useTagsViewStore().visitedViews // const nowPath=location.pathname // const nowPath=location.pathname // return routerArr.filter(item=>{return item.path==nowPath })[0] // return routerArr.filter(item=>{return item.path==nowPath })[0] // } // } // setTimeout(() => { // setTimeout(() => { // nowText=closeNow() // nowText=closeNow()awdasa // }, 500); // }, 500); // function goTarget(url) { // function goTarget(url) { // window.open(url, '__blank') // window.open(url, '__blank') // } // } function handleNodeClick(row) { } function handAdd(row) { function handAdd(row) { algFormRef.value.handleAdd() algFormRef.value.handleAdd(); } } function handleSetSize(row) { function handleSetSize(row) { console.log('%c [ row ]-170', 'font-size:13px; background:pink; color:#bf2c9f;', row) console.log( "%c [ row ]-170", "font-size:13px; background:pink; color:#bf2c9f;", row ); // reset(); // reset(); // const postId = row.postId || ids.value; // const postId = row.postId || ids.value; // getPost(postId).then(response => { // getPost(postId).then(response => { Loading Loading @@ -229,7 +229,6 @@ // proxy.$modal.msgSuccess("删除成功"); // proxy.$modal.msgSuccess("删除成功"); // }).catch(() => {}); // }).catch(() => {}); } } </script> </script> <style scoped lang="scss"> <style scoped lang="scss"> Loading @@ -240,22 +239,47 @@ min-height: 700px; min-height: 700px; .alg-list { .alg-list { display: grid; display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); // grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; gap: 16px; .el-card { border: 1px soild #ff6700; } .alg-item { .alg-item { width: 100%; width: 100%; min-height: 350px; // min-height: 350px; cursor: pointer; cursor: pointer; position: relative; 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 { .cleartitle { font-size: 16px; font-size: 16px; font-weight: 600; font-weight: 600; display: flex; display: flex; justify-content: space-between; justify-content: space-between; align-items: center align-items: center; } } </style> </style>