<template> <div class="main"> <el-button type="primary" style="margin-left: 16px" @click="drawer = true"> open </el-button> <el-drawer v-model="drawer" :with-header="false"> <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick"> <el-tab-pane label="控制面板" name="first"> <!-- 照明区域 --> <div class="lightarea"> <div class="lightareatab"></div> <span class="lightareatext"> 照明区域 </span> <button class="plan">计划启用</button> </div> <!-- button部分 --> <div class="area"> <button v-for="(button, index) in buttons" :key="index" :class="{ btn: true, selected: button === selectedButton }" @click="selectButton(button)"> {{ button.label }} </button> </div> <!-- 照明回路 --> <div class="circuitarea"> <div class="circuittab"></div> <span class="circuittext">照明回路</span> <button class="plan">计划启用</button> <button class="batch" @click="toggleSelectionMode"> {{ selectionModeText }} </button> <button v-if="showSelectAll" class="both" @click="selectAll">全选</button> </div> <!-- button部分 --> <div class="btnarea"> <button v-for="(button2, index) in buttons2" :key="index" :class="{ btn: true, selected: button2.selected }" @click="toggleSelection(button2)"> {{ button2.label }} </button> </div> <!-- 控制模式 --> <div class="controlarea"> <div class="controltab"></div> <span class="controltext"> 控制模式 </span> </div> <!-- 控制模式按钮部分 --> <div class="controlmodebtnarea"> <button v-for="(button3, index) in controlbutton" :key="index" :class="{ btn: true, selected: button3 === selectedButton3 }" @click="selectButton3(button3)"> {{ button3.label }} </button> </div> <!-- 控制场景 --> <div class="controlscenearea"> <div class="controlscenetab"></div> <span class="controlscenetext"> 控制场景 </span> </div> <!-- 控制场景按钮部分 --> <div class="controlscenebtnarea"> <button v-for="(button4, index) in controlscenebuttons" :key="index" :class="{ btn: true, selected: button4 === selectedButton4 }" @click="selectButton4(button4)"> {{ button4.label }} </button> </div> <!-- 灯具参数 --> <div class="lightparametersarea"> <div class="lightparameterstab"></div> <span class="lightparameterstext"> 灯具参数 </span> </div> <div class="lightparameterstextarea"> <p>开启数量</p> <p>亮度</p> <p>色温</p> <p>8/10</p> <p>100lux</p> <p>4200k</p> </div> <div class="bottom"> <button class="flushed">刷新</button> <button class="execute">执行</button> </div> </el-tab-pane> <el-tab-pane label="计划列表" name="second"> <el-table :data="tableData" style="width: 100%; margin-bottom: 20px" row-key="id" border default-expand-all> <el-table-column prop="id" label="序号" width="60" /> <el-table-column prop="date" label="执行时间" width="100" /> <el-table-column prop="planname" label="计划名称" width="90" /> <el-table-column prop="status" label="状态" width="70" /> <el-table-column label="操作"> <span class="tabreboot">重启</span> <span class="tabdelete">删除</span> </el-table-column> </el-table> <div class="divadd"> <button class="add">添加</button> </div> </el-tab-pane> <el-tab-pane label="日志" name="third"> <el-table :data="tableData2" style="width: 100%; margin-bottom: 20px" row-key="id" border default-expand-all> <el-table-column prop="id" label="序号" /> <el-table-column prop="date" label="执行时间" /> <el-table-column prop="planname" label="操作内容" /> <el-table-column prop="status" label="操作人" /> </el-table> <div class="divadd"> <button class="add">刷新</button> </div> </el-tab-pane> </el-tabs> </el-drawer> </div> </template> <script lang="ts" setup> import { ref } from "vue"; import { Timer } from "@element-plus/icons-vue"; // 照明区域按钮单选 interface Button { label: string; selected: boolean; } const buttons = ref<Button[]>([ { label: "A区", selected: false }, { label: "B区", selected: false }, { label: "C区", selected: false }, { label: "D区", selected: false }, { label: "计划启用", selected: false }, ]); const selectedButton = ref<Button | null>(null); const selectButton = (button: Button) => { selectedButton.value = button; }; // 照明回路按钮 interface Button { label: string; selected: boolean; } const buttons2 = ref<Button[]>([ { label: "1区", selected: false }, { label: "2区", selected: false }, { label: "3区", selected: false }, { label: "4区", selected: false }, ]); const showSelectAll = ref(false); const bt = ref(false); const selectionModeText = ref("批量"); const toggleSelection = (button2: Button) => { if (!showSelectAll.value) { // 单选模式 for (const button of buttons2.value) { button.selected = false; } button2.selected = true; } else { // 批量选择模式 button2.selected = !button2.selected; bt.value = false; } }; const toggleSelectionMode = () => { showSelectAll.value = !showSelectAll.value; selectionModeText.value = showSelectAll.value ? "单选" : "批量"; }; const selectAll = () => { if (bt.value == false) { for (const button of buttons2.value) { button.selected = true; bt.value = true; } } else { for (const button of buttons2.value) { button.selected = false; bt.value = false; } } }; // 控制模式按钮 interface Button { label: string; selected: boolean; } const controlbutton = ref<Button[]>([ { label: "A区", selected: false }, { label: "B区", selected: false }, { label: "C区", selected: false }, ]); const selectedButton3 = ref<Button | null>(null); const selectButton3 = (button3: Button) => { selectedButton3.value = button3; }; // 控制场景按钮 interface Button { label: string; selected: boolean; } const controlscenebuttons = ref<Button[]>([ { label: "检修", selected: false }, { label: "午休", selected: false }, { label: "疏散", selected: false }, { label: "客流高峰", selected: false }, ]); const selectedButton4 = ref<Button | null>(null); const selectButton4 = (button4: Button) => { selectedButton4.value = button4; }; const drawer = ref(true); import type { TabsPaneContext } from "element-plus"; const activeName = ref("first"); const handleClick = (tab: TabsPaneContext, event: Event) => { console.log(tab, event); }; //计划列表 interface User { id: number; date: string; planname: string; status: string; } const tableData: User[] = [ { id: 1, date: "2016-05-03", planname: "劳动节", status: "暂停中", }, { id: 2, date: "2016-05-02", planname: "国庆节", status: "待执行", }, { id: 3, date: "2016-05-04", planname: "元旦", status: "待执行", } ]; const tableData2: User[] = [ { id: 1, date: "2016-05-03", planname: "计划再开", status: "张三", }, { id: 2, date: "2016-05-02", planname: "检修模式", status: "李四", }, { id: 3, date: "2016-05-04", planname: "设备变更", status: "王五", } ]; </script> <style scoped> .main { left: 0px; top: 0px; height: 100%; opacity: 0.5; background: rgba(0, 0, 0, 1); border: 1px solid rgba(112, 112, 112, 1); } .drawer-content { width: 5%; background-color: paleturquoise; display: flex; /*justify-content: center; 水平居中 */ align-items: center; /* 垂直居中 */ } el-tabs { width: 95%; background-color: blueviolet; } .demo-tabs>.el-tabs__content { padding: 32px; color: #6b778c; font-size: 32px; font-weight: 600; } .lightarea { left: 51px; width: 100%; } .lightareatab, .lightareatext { display: inline-block; } .lightareatab, .circuittab, .controltab, .controlscenetab, .lightparameterstab { left: 0px; top: 5px; width: 3px; height: 13px; opacity: 1; border-radius: 1px; background: rgba(67, 136, 251, 1); } .lightareatext, .circuittext, .controltext, .controlscenetext, .lightparameterstext { margin-left: 11px; font-size: 16px; } .plan { width: 88px; height: 32px; opacity: 1; border: 1px solid rgba(67, 136, 251, 1); color: rgba(67, 136, 251, 1); border-radius: 5px; background-color: rgba(255, 255, 255, 1); margin-left: 11px; } .area, .btnarea, .controlmodebtnarea, .controlscenearea, .lightparametersarea { margin-top: 20px; } .area { margin-left: -17px; } .btn { padding: 12px 28px; margin-top: 10px; margin-left: 17px; /* width: 80px; */ /* height: 40px; */ font-size: 14px; font-weight: 400; opacity: 1; border: 1px solid rgba(207, 212, 219, 1); line-height: 20.27px; color: rgba(102, 102, 102, 1); text-align: center; vertical-align: top; border-radius: 4px; background-color: rgba(255, 255, 255, 1); } .selected { background-color: rgba(39, 120, 255, 1); color: rgba(255, 255, 255, 1); } .btn:hover { background-color: rgba(207, 212, 219, 1); } .btn:active { background-color: rgba(102, 102, 102, 1); color: white; } .circuitarea { left: 51px; width: 100%; margin-top: 20px; } .circuittab, .controltab { left: 0px; top: 5px; width: 3px; height: 13px; opacity: 1; border-radius: 1px; background: rgba(67, 136, 251, 1); } .circuittab, .circuittext { display: inline-block; } .batch { width: 60px; height: 32px; opacity: 1; border: 1px solid rgba(67, 136, 251, 1); color: rgba(67, 136, 251, 1); border-radius: 5px; background-color: rgba(255, 255, 255, 1); margin-left: 11px; } .both { width: 60px; height: 32px; opacity: 1; border: 1px solid rgba(255, 118, 2, 1); color: rgba(255, 255, 255, 1); border-radius: 5px; background-color: rgba(255, 118, 2, 1); margin-left: 11px; } .controlarea { left: 51px; width: 100%; margin-top: 20px; } .controltab, .controltext { display: inline-block; } .controlscenetab, .controlscenetext { display: inline-block; } :deep(.el-drawer__body) { padding-top: 75px; height: 100%; } :deep(.el-tabs__content) { height: 100%; } :deep(.cell) { text-align: center; } :deep(#pane-first) { height: 100%; } .controlscenetab, .controlscenetext { display: inline-block; } .controlmodebtnarea { margin-top: 20px; height: 100%; } .lightparameterstab, .lightparameterstext { display: inline-block; } .lightparameterstextarea { border: 1px solid rgba(236, 239, 245, 1); margin-top: 10px; display: grid; grid-template-columns: 1fr 1fr 1fr; grid-template-rows: 1fr 1fr; /* grid-column-gap: 10px; */ /* grid-row-gap: 10px; */ } .lightparameterstextarea>p { height: 100%; display: flex; border: 1px solid rgba(236, 239, 245, 1); justify-content: center; align-items: center; } .bottom { width: 100%; height: 64px; display: flex; justify-content: flex-end; align-items: center; position: fixed; bottom: 0; right: 0; margin-bottom: 10px; } .execute { margin-right: 20px; width: 74px; height: 40px; opacity: 1; border-radius: 4px; background: rgba(67, 136, 251, 1); font-size: 14px; font-weight: 400; color: rgba(255, 255, 255, 1); border: 0; margin-left: 10px; } .flushed { width: 74px; height: 40px; opacity: 1; border-radius: 4px; font-size: 14px; font-weight: 400; color: rgba(102, 102, 102, 1); background: rgba(255, 255, 255, 1); border: 1px solid rgba(193, 197, 204, 1); } .tabreboot, .tabdelete { font-size: 14px; font-weight: 400; letter-spacing: 0px; line-height: 20px; color: rgba(67, 136, 251, 1); } .tabreboot { margin-right: 8px; } .add { width: 74px; height: 40px; opacity: 1; border-radius: 4px; background: rgba(67, 136, 251, 1); border: rgba(67, 136, 251, 1); font-size: 14px; font-weight: 400; color: rgba(255, 255, 255, 1); } .divadd{ width: 100%; height: 64px; display: flex; justify-content: flex-end; align-items: center; position: fixed; bottom: 0; right: 0; margin-bottom: 10px; margin-right: 20px } </style>