|
|
@@ -0,0 +1,231 @@
|
|
|
+<template>
|
|
|
+ <div class="sidebar" :class="{ 'sidebar--hidden': !visible }">
|
|
|
+ <div class="sidebar-hide-btn" @click="toggle" />
|
|
|
+
|
|
|
+ <img draggable="false" class="sidebar-logo" src="@/assets/images/logo.png" alt="logo" />
|
|
|
+
|
|
|
+ <div class="sidebar-search">
|
|
|
+ <input name="search" placeholder="请搜索建筑名称" />
|
|
|
+ <i class="sidebar-search-icon" />
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-tabs v-model="activeTab" class="sidebar-tabs" stretch @tab-change="handleTabChange">
|
|
|
+ <el-tab-pane label="区域划分" name="area">
|
|
|
+ <el-scrollbar>
|
|
|
+ <el-collapse v-for="item in 10" :key="item" class="sidebar-collapse">
|
|
|
+ <el-collapse-item title="区域1" name="area1">
|
|
|
+ <template #icon="{ isActive }">
|
|
|
+ <span class="tag">20</span>
|
|
|
+ <span class="icon" :class="{ 'icon--active': isActive }" />
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <ul>
|
|
|
+ <li>·建筑1</li>
|
|
|
+ <li>·建筑2</li>
|
|
|
+ <li>·建筑3</li>
|
|
|
+ </ul>
|
|
|
+ </el-collapse-item>
|
|
|
+ </el-collapse>
|
|
|
+ </el-scrollbar>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="类型划分" name="type" />
|
|
|
+ </el-tabs>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+import { ref } from 'vue'
|
|
|
+import { storeToRefs } from 'pinia'
|
|
|
+import { useSidebarStore } from '@/stores/sidebar'
|
|
|
+
|
|
|
+const { visible } = storeToRefs(useSidebarStore())
|
|
|
+const { toggle } = useSidebarStore()
|
|
|
+
|
|
|
+const search = ref('')
|
|
|
+const activeTab = ref('area')
|
|
|
+
|
|
|
+const handleTabChange = (tab) => {
|
|
|
+ console.log(tab)
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped lang="scss">
|
|
|
+
|
|
|
+@use '@/assets/utils.scss';
|
|
|
+
|
|
|
+.sidebar {
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ width: utils.vh-calc(300);
|
|
|
+ background: linear-gradient(#D9BF9D, #CFAC7D);
|
|
|
+ transition: transform 0.3s ease;
|
|
|
+
|
|
|
+ &--hidden {
|
|
|
+ transform: translateX(100%);
|
|
|
+
|
|
|
+ .sidebar-hide-btn::before {
|
|
|
+ transform: translate(-50%, -50%) rotate(180deg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ :deep(.sidebar-tabs) {
|
|
|
+ --el-text-color-primary: #4E1A00;
|
|
|
+ --el-font-size-base: utils.vh-calc(20);
|
|
|
+ --el-border-color-light: #98382E;
|
|
|
+ margin: utils.vh-calc(25) 0;
|
|
|
+ width: 100%;
|
|
|
+ height: 0;
|
|
|
+ flex: 1;
|
|
|
+
|
|
|
+ .el-tabs__item.is-active {
|
|
|
+ font-family: 'SourceHanSerifSC-Bold';
|
|
|
+ }
|
|
|
+ .el-tabs__nav-wrap::after {
|
|
|
+ height: 1px;
|
|
|
+ }
|
|
|
+ .el-tabs__item {
|
|
|
+ padding: 0;
|
|
|
+ }
|
|
|
+ .el-tabs__active-bar {
|
|
|
+ height: utils.vh-calc(3);
|
|
|
+ }
|
|
|
+ .el-tab-pane {
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+ .el-tabs__header {
|
|
|
+ padding: 0 utils.vh-calc(15);
|
|
|
+ }
|
|
|
+ .el-scrollbar {
|
|
|
+ padding: 0 utils.vh-calc(15);
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ :deep(.sidebar-collapse) {
|
|
|
+ --el-fill-color-blank: transparent;
|
|
|
+ --el-collapse-border-color: transparent;
|
|
|
+ --el-collapse-header-text-color: #4E1A00;
|
|
|
+
|
|
|
+ .el-collapse-item__header {
|
|
|
+ padding-left: utils.vh-calc(5);
|
|
|
+ height: utils.vh-calc(45);
|
|
|
+ line-height: utils.vh-calc(45);
|
|
|
+ min-height: utils.vh-calc(45);
|
|
|
+ font-size: utils.vh-calc(18);
|
|
|
+ }
|
|
|
+ .el-collapse-item__content {
|
|
|
+ padding-bottom: 0;
|
|
|
+ }
|
|
|
+ .tag {
|
|
|
+ width: utils.vh-calc(28);
|
|
|
+ height: utils.vh-calc(18);
|
|
|
+ line-height: utils.vh-calc(18);
|
|
|
+ text-align: center;
|
|
|
+ color: #F8D561;
|
|
|
+ font-size: utils.vh-calc(14);
|
|
|
+ border-radius: 100px;
|
|
|
+ background: #98382E;
|
|
|
+ }
|
|
|
+ .icon {
|
|
|
+ margin-left: utils.vh-calc(12);
|
|
|
+ width: utils.vh-calc(18);
|
|
|
+ height: utils.vh-calc(10);
|
|
|
+ transition: transform 0.3s ease;
|
|
|
+ background: url('@/assets/images/icon-xia.png') no-repeat center / contain;
|
|
|
+
|
|
|
+ &--active {
|
|
|
+ transform: rotate(180deg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ul {
|
|
|
+ padding: 0 utils.vh-calc(7);
|
|
|
+
|
|
|
+ li {
|
|
|
+ height: utils.vh-calc(40);
|
|
|
+ line-height: utils.vh-calc(40);
|
|
|
+ font-size: utils.vh-calc(16);
|
|
|
+ color: #4E1A00;
|
|
|
+ cursor: pointer;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ color: #98382E;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &-search {
|
|
|
+ flex-shrink: 0;
|
|
|
+ position: relative;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ width: utils.vh-calc(270);
|
|
|
+ height: utils.vh-calc(44);
|
|
|
+ background: url('./images/search-bg.png') no-repeat center / contain;
|
|
|
+
|
|
|
+ input {
|
|
|
+ flex: 1;
|
|
|
+ width: 0;
|
|
|
+ padding: 0 utils.vh-calc(20);
|
|
|
+ height: 100%;
|
|
|
+ background: transparent;
|
|
|
+ border: none;
|
|
|
+ color: #F7E8D4;
|
|
|
+ font-size: utils.vh-calc(18);
|
|
|
+
|
|
|
+ &::placeholder {
|
|
|
+ color: #F7E8D4;
|
|
|
+ }
|
|
|
+ &:focus {
|
|
|
+ outline: none;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ i {
|
|
|
+ flex-shrink: 0;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ width: utils.vh-calc(46);
|
|
|
+ height: 100%;
|
|
|
+ cursor: pointer;
|
|
|
+
|
|
|
+ &::before {
|
|
|
+ content: '';
|
|
|
+ display: block;
|
|
|
+ width: utils.vh-calc(24);
|
|
|
+ height: utils.vh-calc(22);
|
|
|
+ background: url('./images/search-icon.png') no-repeat center / contain;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &-logo {
|
|
|
+ margin: utils.vh-calc(36) 0 utils.vh-calc(54);
|
|
|
+ width: utils.vh-calc(252);
|
|
|
+ height: utils.vh-calc(89);
|
|
|
+ }
|
|
|
+ &-hide-btn {
|
|
|
+ position: absolute;
|
|
|
+ top: 50%;
|
|
|
+ left: utils.vh-calc(-18);
|
|
|
+ transform: translateY(-50%);
|
|
|
+ width: utils.vh-calc(18);
|
|
|
+ height: utils.vh-calc(70);
|
|
|
+ cursor: pointer;
|
|
|
+ background: url('./images/sidebar-hide-bg.png') no-repeat center / contain;
|
|
|
+
|
|
|
+ &::before {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ width: utils.vh-calc(11);
|
|
|
+ height: utils.vh-calc(18);
|
|
|
+ transform: translate(-50%, -50%);
|
|
|
+ background: url('./images/sidebar-hide-icon.png') no-repeat center / contain;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|