From a334208af82b102e1d1bbc91b44753b04c0ed0de Mon Sep 17 00:00:00 2001
From: songshankun <songshankun@foxmail.com>
Date: 星期五, 27 十月 2023 14:48:56 +0800
Subject: [PATCH] feat: 添加dashboard布局组件

---
 src/assets/styles/base.css         |   40 ------
 /dev/null                          |   50 --------
 src/views/dashboard/index.vue      |   22 +++
 index.html                         |    2 
 src/assets/styles/main.css         |    9 
 package.json                       |    2 
 src/components.d.ts                |    3 
 src/router/index.ts                |   14 -
 env.d.ts                           |    6 +
 src/components/DashboardLayout.vue |  125 ++++++++++++++++++++
 src/App.vue                        |   28 ----
 11 files changed, 171 insertions(+), 130 deletions(-)

diff --git a/env.d.ts b/env.d.ts
index b3f1432..56997d1 100644
--- a/env.d.ts
+++ b/env.d.ts
@@ -5,3 +5,9 @@
   const component: FunctionalComponent<SVGAttributes>
   export default component
 }
+declare module '*.vue' {
+  import type { DefineComponent } from 'vue'
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
+  const component: DefineComponent<object, object, any>
+  export default component
+}
diff --git a/index.html b/index.html
index dcd6967..39aff6e 100644
--- a/index.html
+++ b/index.html
@@ -4,7 +4,7 @@
     <meta charset="UTF-8" />
     <link rel="icon" href="/favicon.ico" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>Vite App</title>
+    <title>鐪嬫澘</title>
   </head>
   <body>
     <div id="app"></div>
diff --git a/package.json b/package.json
index e4fa3c9..1362d31 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,7 @@
   "version": "0.0.0",
   "private": true,
   "scripts": {
-    "dev": "vite --host --open",
+    "dev": "vite --host",
     "build": "run-p type-check \"build-only {@}\" --",
     "preview": "vite preview",
     "build-only": "vite build",
diff --git a/src/App.vue b/src/App.vue
index 64293dd..6cc3382 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,33 +1,9 @@
 <template>
-  <nav>
-    <RouterLink to="/">Home</RouterLink>
-    <RouterLink to="/about">About</RouterLink>
-  </nav>
   <RouterView />
 </template>
 
 <script setup lang="ts">
-import { RouterLink, RouterView } from 'vue-router'
+import { RouterView } from 'vue-router'
 </script>
 
-<style scoped>
-nav {
-  width: 100%;
-  font-size: 24px;
-  text-align: center;
-}
-
-nav a.router-link-exact-active {
-  color: var(--el-color-primary);
-}
-
-nav a {
-  display: inline-block;
-  padding: 0 1rem;
-  border-left: 1px solid var(--color-border);
-}
-
-nav a:first-of-type {
-  border: 0;
-}
-</style>
+<style scoped></style>
diff --git a/src/assets/styles/base.css b/src/assets/styles/base.css
index 8816868..17dca0d 100644
--- a/src/assets/styles/base.css
+++ b/src/assets/styles/base.css
@@ -8,46 +8,15 @@
   --vt-c-black-soft: #222222;
   --vt-c-black-mute: #282828;
 
-  --vt-c-indigo: #2c3e50;
+  --vt-v-blue:  #13234b;
 
-  --vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
-  --vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
-  --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
-  --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
-
-  --vt-c-text-light-1: var(--vt-c-indigo);
-  --vt-c-text-light-2: rgba(60, 60, 60, 0.66);
-  --vt-c-text-dark-1: var(--vt-c-white);
-  --vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
 }
 
 /* semantic color variables for this project */
 :root {
-  --color-background: var(--vt-c-white);
-  --color-background-soft: var(--vt-c-white-soft);
-  --color-background-mute: var(--vt-c-white-mute);
-
-  --color-border: var(--vt-c-divider-light-2);
-  --color-border-hover: var(--vt-c-divider-light-1);
-
-  --color-heading: var(--vt-c-text-light-1);
-  --color-text: var(--vt-c-text-light-1);
-
+  --color-background: var(--vt-v-blue);
+  --color-text: var(--vt-c-white);
   --section-gap: 160px;
-}
-
-@media (prefers-color-scheme: dark) {
-  :root {
-    --color-background: var(--vt-c-black);
-    --color-background-soft: var(--vt-c-black-soft);
-    --color-background-mute: var(--vt-c-black-mute);
-
-    --color-border: var(--vt-c-divider-dark-2);
-    --color-border-hover: var(--vt-c-divider-dark-1);
-
-    --color-heading: var(--vt-c-text-dark-1);
-    --color-text: var(--vt-c-text-dark-2);
-  }
 }
 
 *,
@@ -62,9 +31,6 @@
   min-height: 100vh;
   color: var(--color-text);
   background: var(--color-background);
-  transition:
-    color 0.5s,
-    background-color 0.5s;
   line-height: 1.6;
   font-family:
     Inter,
diff --git a/src/assets/styles/main.css b/src/assets/styles/main.css
index ba1231a..bfe1931 100644
--- a/src/assets/styles/main.css
+++ b/src/assets/styles/main.css
@@ -1,9 +1,8 @@
 @import './base.css';
 
-#app {
-  max-width: 1280px;
-  margin: 0 auto;
 
-  font-weight: normal;
+/* 瑕嗙洊 el 婊氬姩鏉¢鑹� */
+.el-scrollbar .el-scrollbar__thumb{
+  background-color: #fff;
+  opacity: 0.5;
 }
-
diff --git a/src/components.d.ts b/src/components.d.ts
index 940978c..c76e0d4 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -7,9 +7,10 @@
 
 declare module 'vue' {
   export interface GlobalComponents {
+    DashboardLayout: (typeof import('./components/DashboardLayout.vue'))['default']
     ElButton: (typeof import('element-plus/es'))['ElButton']
     ElIcon: (typeof import('element-plus/es'))['ElIcon']
-    HelloWorld: (typeof import('./components/HelloWorld.vue'))['default']
+    ElScrollbar: (typeof import('element-plus/es'))['ElScrollbar']
     RouterLink: (typeof import('vue-router'))['RouterLink']
     RouterView: (typeof import('vue-router'))['RouterView']
   }
diff --git a/src/components/DashboardLayout.vue b/src/components/DashboardLayout.vue
new file mode 100644
index 0000000..a88908e
--- /dev/null
+++ b/src/components/DashboardLayout.vue
@@ -0,0 +1,125 @@
+<template>
+  <div class="dashboard-layout">
+    <div class="left">
+      <div class="header-block padding-4">
+        <slot name="leftBlock1"></slot>
+      </div>
+      <div class="double-height-block padding-4">
+        <div class="card">
+          <el-scrollbar always>
+            <slot name="leftBlock2"></slot>
+          </el-scrollbar>
+        </div>
+      </div>
+    </div>
+    <div class="middle">
+      <div class="header-block padding-4">
+        <slot name="middleBlock1"></slot>
+      </div>
+      <div class="base-block padding-4">
+        <div class="card">
+          <slot name="middleBlock2"></slot>
+        </div>
+      </div>
+      <div class="block-container">
+        <div class="base-block padding-4">
+          <div class="card">
+            <slot name="middleBlock3"></slot>
+          </div>
+        </div>
+        <div class="base-block padding-4">
+          <div class="card">
+            <slot name="middleBlock4"></slot>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="right">
+      <div class="header-block padding-4">
+        <slot name="rightBlock1"></slot>
+      </div>
+      <div class="base-block padding-4">
+        <div class="card">
+          <slot name="rightBlock2"></slot>
+        </div>
+      </div>
+      <div class="base-block padding-4">
+        <div class="card">
+          <slot name="rightBlock3"></slot>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts"></script>
+
+<style scoped lang="scss">
+// 涓や晶鍖哄煙瀹�
+$sideWidth: 25%;
+// 涓棿涓诲尯鍩熷
+$mainWidth: 50%;
+// 鏁翠綋鍐呰竟璺�
+$layoutPadding: 12px;
+// 澶撮儴甯冨眬鍧楅珮搴�
+$headerBlockHeight: 80px;
+// 鍩虹甯冨眬鍧楅珮搴�
+$baseBlockHeight: calc((100vh - 2 * $layoutPadding - $headerBlockHeight) / 2);
+// 鍙屽�嶉珮甯冨眬鍧楅珮搴�
+$doubleBlockHeight: calc($baseBlockHeight * 2);
+.dashboard-layout {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  height: 100vh;
+  width: 100vw;
+  padding: $layoutPadding;
+  &.debug {
+    & > div {
+      border: 1px solid red;
+      & > div {
+        border: 1px solid red;
+      }
+    }
+  }
+}
+
+.left,
+.right {
+  width: $sideWidth;
+}
+
+.middle {
+  width: $mainWidth;
+}
+.left,
+.right,
+.middle {
+  height: 100%;
+}
+.padding-4 {
+  padding: 6px;
+}
+.block-container {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+.base-block {
+  height: $baseBlockHeight;
+  flex-grow: 1;
+}
+.header-block {
+  height: $headerBlockHeight;
+}
+.double-height-block {
+  height: $doubleBlockHeight;
+}
+
+.card {
+  width: 100%;
+  height: 100%;
+  background-color: #153e94;
+  border-radius: 6px;
+}
+</style>
diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue
deleted file mode 100644
index 02e9a2b..0000000
--- a/src/components/HelloWorld.vue
+++ /dev/null
@@ -1,32 +0,0 @@
-<script setup lang="ts">
-defineProps<{ msg: string }>()
-</script>
-
-<template>
-  <div class="greetings">
-    <h1 class="green">{{ msg }}</h1>
-    <h3>
-      You鈥檝e successfully created a project with
-      <a href="https://vitejs.dev/" target="_blank" rel="noopener">Vite</a> +
-      <a href="https://vuejs.org/" target="_blank" rel="noopener">Vue 3</a>. What's next?
-    </h3>
-  </div>
-</template>
-
-<style scoped>
-h1 {
-  font-weight: 500;
-  font-size: 2.6rem;
-  position: relative;
-  top: -10px;
-}
-
-h3 {
-  font-size: 1.2rem;
-}
-
-.greetings h1,
-.greetings h3 {
-  text-align: center;
-}
-</style>
diff --git a/src/router/index.ts b/src/router/index.ts
index a49ae50..08aa943 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -1,21 +1,17 @@
 import { createRouter, createWebHistory } from 'vue-router'
-import HomeView from '../views/HomeView.vue'
+import DashboardView from '../views/dashboard/index.vue'
 
 const router = createRouter({
   history: createWebHistory(import.meta.env.BASE_URL),
   routes: [
     {
       path: '/',
-      name: 'home',
-      component: HomeView
+      name: 'dashboard',
+      component: DashboardView
     },
     {
-      path: '/about',
-      name: 'about',
-      // route level code-splitting
-      // this generates a separate chunk (About.[hash].js) for this route
-      // which is lazy-loaded when the route is visited.
-      component: () => import('../views/AboutView.vue')
+      path: '/:error*',
+      redirect: '/'
     }
   ]
 })
diff --git a/src/views/AboutView.vue b/src/views/AboutView.vue
deleted file mode 100644
index c0bfe81..0000000
--- a/src/views/AboutView.vue
+++ /dev/null
@@ -1,9 +0,0 @@
-<template>
-  <div class="about-view">
-    <h1>About View</h1>
-  </div>
-</template>
-
-<script setup lang="ts"></script>
-
-<style lang="scss"></style>
diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue
deleted file mode 100644
index 1072b75..0000000
--- a/src/views/HomeView.vue
+++ /dev/null
@@ -1,50 +0,0 @@
-<template>
-  <div class="home-view">
-    <h1>Home View</h1>
-    <h2>pinia 绀轰緥</h2>
-    <section>
-      <span> count: {{ counter.count }} </span>
-      <el-button type="primary" @click="counter.increment">鍔犱竴</el-button>
-    </section>
-    <h2>element plus 缁勪欢 icon 绀轰緥</h2>
-    <section>
-      <el-button type="primary">
-        <el-icon style="vertical-align: middle">
-          <Search />
-        </el-icon>
-        <span style="vertical-align: middle"> Search </span>
-        <el-icon class="is-loading">
-          <Loading />
-        </el-icon>
-      </el-button>
-    </section>
-    <h2>Iconify 鍥炬爣绀轰緥, 鏀寔鑷姩涓嬭浇鑷姩瀵煎叆</h2>
-    <section>
-      <p><a href="https://icon-sets.iconify.design/">iconify</a></p>
-      <p>
-        iconify 鏈夎澶氬浘鏍囬泦鍚�,鎵�浠ラ厤缃簡鑷姩涓嬭浇鍜岃嚜鍔ㄥ紩鍏�,
-        浣嗘槸涓嬭浇鎵�鏈夌殑鍥炬爣闆嗗悎闇�瑕佺害120鍏�,鎵�浠ュ缓璁簨鍏堥�夊畾濂界敤鍝釜鍥炬爣闆�, 鍒贡鍔犲浘鏍囦笉鐒惰涓嬭浇濂藉
-      </p>
-      <p>浣跨敤鏂规硶: <a href="https://github.com/unplugin/unplugin-icons#usage">github.com/unplugin/unplugin-icons</a></p>
-      <div>
-        <el-icon size="40" color="red">
-          <IconAlert />
-        </el-icon>
-      </div>
-    </section>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { useCounterStore } from '@/stores/counter'
-import { Loading, Search } from '@element-plus/icons-vue'
-import IconAlert from '~icons/mdi/alert'
-
-const counter = useCounterStore()
-</script>
-
-<style lang="scss" scoped>
-section {
-  margin: 10px 0 40px 0;
-}
-</style>
diff --git a/src/views/dashboard/index.vue b/src/views/dashboard/index.vue
new file mode 100644
index 0000000..6a0fc85
--- /dev/null
+++ b/src/views/dashboard/index.vue
@@ -0,0 +1,22 @@
+<template>
+  <DashboardLayout>
+    <template #leftBlock1>浠诲姟绛涢�塼abs</template>
+    <template #leftBlock2>
+      <div style="height: 1500px">閫氶亾浠诲姟</div>
+    </template>
+    <template #middleBlock1>鏍囬</template>
+    <template #middleBlock2>涓荤湅鏉�</template>
+    <template #middleBlock3>浠诲姟璇︽儏</template>
+    <template #middleBlock4>浜哄憳淇℃伅</template>
+    <template #rightBlock1>鏃堕棿</template>
+    <template #rightBlock2>鐘舵�侀潰鏉�</template>
+    <template #rightBlock3>鐭ヨ瘑搴�</template>
+  </DashboardLayout>
+</template>
+<script setup lang="ts">
+defineOptions({
+  name: 'DashboardView'
+})
+</script>
+
+<style scoped></style>

--
Gitblit v1.8.0