diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..2ea268e
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..2ea268e
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..193b604
--- /dev/null
+++ b/src/layout/components/Navbar.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..2ea268e
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..193b604
--- /dev/null
+++ b/src/layout/components/Navbar.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue
new file mode 100644
index 0000000..cf3023d
--- /dev/null
+++ b/src/layout/components/Settings/index.vue
@@ -0,0 +1,109 @@
+
+
+
+
Page style setting
+
+
+ Theme Color
+
+
+
+
+ Open Tags-View
+
+
+
+
+ Fixed Header
+
+
+
+
+ Sidebar Logo
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..2ea268e
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..193b604
--- /dev/null
+++ b/src/layout/components/Navbar.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue
new file mode 100644
index 0000000..cf3023d
--- /dev/null
+++ b/src/layout/components/Settings/index.vue
@@ -0,0 +1,109 @@
+
+
+
+
Page style setting
+
+
+ Theme Color
+
+
+
+
+ Open Tags-View
+
+
+
+
+ Fixed Header
+
+
+
+
+ Sidebar Logo
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue
new file mode 100644
index 0000000..b515f61
--- /dev/null
+++ b/src/layout/components/Sidebar/Item.vue
@@ -0,0 +1,29 @@
+
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..2ea268e
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..193b604
--- /dev/null
+++ b/src/layout/components/Navbar.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue
new file mode 100644
index 0000000..cf3023d
--- /dev/null
+++ b/src/layout/components/Settings/index.vue
@@ -0,0 +1,109 @@
+
+
+
+
Page style setting
+
+
+ Theme Color
+
+
+
+
+ Open Tags-View
+
+
+
+
+ Fixed Header
+
+
+
+
+ Sidebar Logo
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue
new file mode 100644
index 0000000..b515f61
--- /dev/null
+++ b/src/layout/components/Sidebar/Item.vue
@@ -0,0 +1,29 @@
+
diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue
new file mode 100644
index 0000000..bff45cd
--- /dev/null
+++ b/src/layout/components/Sidebar/Link.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..2ea268e
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..193b604
--- /dev/null
+++ b/src/layout/components/Navbar.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue
new file mode 100644
index 0000000..cf3023d
--- /dev/null
+++ b/src/layout/components/Settings/index.vue
@@ -0,0 +1,109 @@
+
+
+
+
Page style setting
+
+
+ Theme Color
+
+
+
+
+ Open Tags-View
+
+
+
+
+ Fixed Header
+
+
+
+
+ Sidebar Logo
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue
new file mode 100644
index 0000000..b515f61
--- /dev/null
+++ b/src/layout/components/Sidebar/Item.vue
@@ -0,0 +1,29 @@
+
diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue
new file mode 100644
index 0000000..bff45cd
--- /dev/null
+++ b/src/layout/components/Sidebar/Link.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue
new file mode 100644
index 0000000..988d662
--- /dev/null
+++ b/src/layout/components/Sidebar/SidebarItem.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..2ea268e
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..193b604
--- /dev/null
+++ b/src/layout/components/Navbar.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue
new file mode 100644
index 0000000..cf3023d
--- /dev/null
+++ b/src/layout/components/Settings/index.vue
@@ -0,0 +1,109 @@
+
+
+
+
Page style setting
+
+
+ Theme Color
+
+
+
+
+ Open Tags-View
+
+
+
+
+ Fixed Header
+
+
+
+
+ Sidebar Logo
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue
new file mode 100644
index 0000000..b515f61
--- /dev/null
+++ b/src/layout/components/Sidebar/Item.vue
@@ -0,0 +1,29 @@
+
diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue
new file mode 100644
index 0000000..bff45cd
--- /dev/null
+++ b/src/layout/components/Sidebar/Link.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue
new file mode 100644
index 0000000..988d662
--- /dev/null
+++ b/src/layout/components/Sidebar/SidebarItem.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue
new file mode 100644
index 0000000..5dcf730
--- /dev/null
+++ b/src/layout/components/Sidebar/index.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..2ea268e
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..193b604
--- /dev/null
+++ b/src/layout/components/Navbar.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue
new file mode 100644
index 0000000..cf3023d
--- /dev/null
+++ b/src/layout/components/Settings/index.vue
@@ -0,0 +1,109 @@
+
+
+
+
Page style setting
+
+
+ Theme Color
+
+
+
+
+ Open Tags-View
+
+
+
+
+ Fixed Header
+
+
+
+
+ Sidebar Logo
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue
new file mode 100644
index 0000000..b515f61
--- /dev/null
+++ b/src/layout/components/Sidebar/Item.vue
@@ -0,0 +1,29 @@
+
diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue
new file mode 100644
index 0000000..bff45cd
--- /dev/null
+++ b/src/layout/components/Sidebar/Link.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue
new file mode 100644
index 0000000..988d662
--- /dev/null
+++ b/src/layout/components/Sidebar/SidebarItem.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue
new file mode 100644
index 0000000..5dcf730
--- /dev/null
+++ b/src/layout/components/Sidebar/index.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue
new file mode 100644
index 0000000..0ec76e7
--- /dev/null
+++ b/src/layout/components/TagsView/ScrollPane.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..2ea268e
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..193b604
--- /dev/null
+++ b/src/layout/components/Navbar.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue
new file mode 100644
index 0000000..cf3023d
--- /dev/null
+++ b/src/layout/components/Settings/index.vue
@@ -0,0 +1,109 @@
+
+
+
+
Page style setting
+
+
+ Theme Color
+
+
+
+
+ Open Tags-View
+
+
+
+
+ Fixed Header
+
+
+
+
+ Sidebar Logo
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue
new file mode 100644
index 0000000..b515f61
--- /dev/null
+++ b/src/layout/components/Sidebar/Item.vue
@@ -0,0 +1,29 @@
+
diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue
new file mode 100644
index 0000000..bff45cd
--- /dev/null
+++ b/src/layout/components/Sidebar/Link.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue
new file mode 100644
index 0000000..988d662
--- /dev/null
+++ b/src/layout/components/Sidebar/SidebarItem.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue
new file mode 100644
index 0000000..5dcf730
--- /dev/null
+++ b/src/layout/components/Sidebar/index.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue
new file mode 100644
index 0000000..0ec76e7
--- /dev/null
+++ b/src/layout/components/TagsView/ScrollPane.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue
new file mode 100644
index 0000000..325c815
--- /dev/null
+++ b/src/layout/components/TagsView/index.vue
@@ -0,0 +1,287 @@
+
+
+
+
+ {{ tag.title }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..2ea268e
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..193b604
--- /dev/null
+++ b/src/layout/components/Navbar.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue
new file mode 100644
index 0000000..cf3023d
--- /dev/null
+++ b/src/layout/components/Settings/index.vue
@@ -0,0 +1,109 @@
+
+
+
+
Page style setting
+
+
+ Theme Color
+
+
+
+
+ Open Tags-View
+
+
+
+
+ Fixed Header
+
+
+
+
+ Sidebar Logo
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue
new file mode 100644
index 0000000..b515f61
--- /dev/null
+++ b/src/layout/components/Sidebar/Item.vue
@@ -0,0 +1,29 @@
+
diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue
new file mode 100644
index 0000000..bff45cd
--- /dev/null
+++ b/src/layout/components/Sidebar/Link.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue
new file mode 100644
index 0000000..988d662
--- /dev/null
+++ b/src/layout/components/Sidebar/SidebarItem.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue
new file mode 100644
index 0000000..5dcf730
--- /dev/null
+++ b/src/layout/components/Sidebar/index.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue
new file mode 100644
index 0000000..0ec76e7
--- /dev/null
+++ b/src/layout/components/TagsView/ScrollPane.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue
new file mode 100644
index 0000000..325c815
--- /dev/null
+++ b/src/layout/components/TagsView/index.vue
@@ -0,0 +1,287 @@
+
+
+
+
+ {{ tag.title }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/index.js b/src/layout/components/index.js
new file mode 100644
index 0000000..52d35e3
--- /dev/null
+++ b/src/layout/components/index.js
@@ -0,0 +1,4 @@
+export { default as Navbar } from './Navbar'
+export { default as Sidebar } from './Sidebar'
+export { default as AppMain } from './AppMain'
+export { default as AppHeader } from './AppHeader'
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..2ea268e
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..193b604
--- /dev/null
+++ b/src/layout/components/Navbar.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue
new file mode 100644
index 0000000..cf3023d
--- /dev/null
+++ b/src/layout/components/Settings/index.vue
@@ -0,0 +1,109 @@
+
+
+
+
Page style setting
+
+
+ Theme Color
+
+
+
+
+ Open Tags-View
+
+
+
+
+ Fixed Header
+
+
+
+
+ Sidebar Logo
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue
new file mode 100644
index 0000000..b515f61
--- /dev/null
+++ b/src/layout/components/Sidebar/Item.vue
@@ -0,0 +1,29 @@
+
diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue
new file mode 100644
index 0000000..bff45cd
--- /dev/null
+++ b/src/layout/components/Sidebar/Link.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue
new file mode 100644
index 0000000..988d662
--- /dev/null
+++ b/src/layout/components/Sidebar/SidebarItem.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue
new file mode 100644
index 0000000..5dcf730
--- /dev/null
+++ b/src/layout/components/Sidebar/index.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue
new file mode 100644
index 0000000..0ec76e7
--- /dev/null
+++ b/src/layout/components/TagsView/ScrollPane.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue
new file mode 100644
index 0000000..325c815
--- /dev/null
+++ b/src/layout/components/TagsView/index.vue
@@ -0,0 +1,287 @@
+
+
+
+
+ {{ tag.title }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/index.js b/src/layout/components/index.js
new file mode 100644
index 0000000..52d35e3
--- /dev/null
+++ b/src/layout/components/index.js
@@ -0,0 +1,4 @@
+export { default as Navbar } from './Navbar'
+export { default as Sidebar } from './Sidebar'
+export { default as AppMain } from './AppMain'
+export { default as AppHeader } from './AppHeader'
diff --git a/src/layout/mixin/ResizeHandler.js b/src/layout/mixin/ResizeHandler.js
new file mode 100644
index 0000000..604fe3d
--- /dev/null
+++ b/src/layout/mixin/ResizeHandler.js
@@ -0,0 +1,40 @@
+import store from '@/store'
+
+const { body } = document
+const WIDTH = 992 // refer to Bootstrap's responsive design
+
+export default {
+ watch: {
+ $route(route) {
+ if (this.device === 'mobile' && this.sidebar.opened) {
+ store.dispatch('CloseSideBar', { withoutAnimation: false })
+ }
+ }
+ },
+ beforeMount() {
+ window.addEventListener('resize', this.resizeHandler)
+ },
+ mounted() {
+ const isMobile = this.isMobile()
+ if (isMobile) {
+ store.dispatch('ToggleDevice', 'mobile')
+ store.dispatch('CloseSideBar', { withoutAnimation: true })
+ }
+ },
+ methods: {
+ isMobile() {
+ const rect = body.getBoundingClientRect()
+ return rect.width - 1 < WIDTH
+ },
+ resizeHandler() {
+ if (!document.hidden) {
+ const isMobile = this.isMobile()
+ store.dispatch('ToggleDevice', isMobile ? 'mobile' : 'desktop')
+
+ if (isMobile) {
+ store.dispatch('CloseSideBar', { withoutAnimation: true })
+ }
+ }
+ }
+ }
+}
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..2ea268e
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..193b604
--- /dev/null
+++ b/src/layout/components/Navbar.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue
new file mode 100644
index 0000000..cf3023d
--- /dev/null
+++ b/src/layout/components/Settings/index.vue
@@ -0,0 +1,109 @@
+
+
+
+
Page style setting
+
+
+ Theme Color
+
+
+
+
+ Open Tags-View
+
+
+
+
+ Fixed Header
+
+
+
+
+ Sidebar Logo
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue
new file mode 100644
index 0000000..b515f61
--- /dev/null
+++ b/src/layout/components/Sidebar/Item.vue
@@ -0,0 +1,29 @@
+
diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue
new file mode 100644
index 0000000..bff45cd
--- /dev/null
+++ b/src/layout/components/Sidebar/Link.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue
new file mode 100644
index 0000000..988d662
--- /dev/null
+++ b/src/layout/components/Sidebar/SidebarItem.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue
new file mode 100644
index 0000000..5dcf730
--- /dev/null
+++ b/src/layout/components/Sidebar/index.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue
new file mode 100644
index 0000000..0ec76e7
--- /dev/null
+++ b/src/layout/components/TagsView/ScrollPane.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue
new file mode 100644
index 0000000..325c815
--- /dev/null
+++ b/src/layout/components/TagsView/index.vue
@@ -0,0 +1,287 @@
+
+
+
+
+ {{ tag.title }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/index.js b/src/layout/components/index.js
new file mode 100644
index 0000000..52d35e3
--- /dev/null
+++ b/src/layout/components/index.js
@@ -0,0 +1,4 @@
+export { default as Navbar } from './Navbar'
+export { default as Sidebar } from './Sidebar'
+export { default as AppMain } from './AppMain'
+export { default as AppHeader } from './AppHeader'
diff --git a/src/layout/mixin/ResizeHandler.js b/src/layout/mixin/ResizeHandler.js
new file mode 100644
index 0000000..604fe3d
--- /dev/null
+++ b/src/layout/mixin/ResizeHandler.js
@@ -0,0 +1,40 @@
+import store from '@/store'
+
+const { body } = document
+const WIDTH = 992 // refer to Bootstrap's responsive design
+
+export default {
+ watch: {
+ $route(route) {
+ if (this.device === 'mobile' && this.sidebar.opened) {
+ store.dispatch('CloseSideBar', { withoutAnimation: false })
+ }
+ }
+ },
+ beforeMount() {
+ window.addEventListener('resize', this.resizeHandler)
+ },
+ mounted() {
+ const isMobile = this.isMobile()
+ if (isMobile) {
+ store.dispatch('ToggleDevice', 'mobile')
+ store.dispatch('CloseSideBar', { withoutAnimation: true })
+ }
+ },
+ methods: {
+ isMobile() {
+ const rect = body.getBoundingClientRect()
+ return rect.width - 1 < WIDTH
+ },
+ resizeHandler() {
+ if (!document.hidden) {
+ const isMobile = this.isMobile()
+ store.dispatch('ToggleDevice', isMobile ? 'mobile' : 'desktop')
+
+ if (isMobile) {
+ store.dispatch('CloseSideBar', { withoutAnimation: true })
+ }
+ }
+ }
+ }
+}
diff --git a/src/settings.js b/src/settings.js
new file mode 100644
index 0000000..b8159bf
--- /dev/null
+++ b/src/settings.js
@@ -0,0 +1,33 @@
+module.exports = {
+ /**
+ * @type {boolean} true | false
+ * @description 是否显示设置按钮
+ */
+ showSettings: false,
+
+ /**
+ * @type {boolean} true | false
+ * @description 是否显示tagsView
+ */
+ tagsView: true,
+
+ /**
+ * @type {boolean} true | false
+ * @description 是否固定面包屑和tagsViews头
+ */
+ fixedHeader: true,
+
+ /**
+ * @type {boolean} true | false
+ * @description 是否要显示侧边栏logo
+ */
+ sidebarLogo: false,
+
+ /**
+ * @type {string | array} 'production' | ['production', 'development']
+ * @description Need show err logs component.
+ * The default is only used in the production env
+ * If you want to also use it in dev, you can pass ['production', 'development']
+ */
+ errorLog: 'production'
+}
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..2ea268e
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..193b604
--- /dev/null
+++ b/src/layout/components/Navbar.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue
new file mode 100644
index 0000000..cf3023d
--- /dev/null
+++ b/src/layout/components/Settings/index.vue
@@ -0,0 +1,109 @@
+
+
+
+
Page style setting
+
+
+ Theme Color
+
+
+
+
+ Open Tags-View
+
+
+
+
+ Fixed Header
+
+
+
+
+ Sidebar Logo
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue
new file mode 100644
index 0000000..b515f61
--- /dev/null
+++ b/src/layout/components/Sidebar/Item.vue
@@ -0,0 +1,29 @@
+
diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue
new file mode 100644
index 0000000..bff45cd
--- /dev/null
+++ b/src/layout/components/Sidebar/Link.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue
new file mode 100644
index 0000000..988d662
--- /dev/null
+++ b/src/layout/components/Sidebar/SidebarItem.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue
new file mode 100644
index 0000000..5dcf730
--- /dev/null
+++ b/src/layout/components/Sidebar/index.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue
new file mode 100644
index 0000000..0ec76e7
--- /dev/null
+++ b/src/layout/components/TagsView/ScrollPane.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue
new file mode 100644
index 0000000..325c815
--- /dev/null
+++ b/src/layout/components/TagsView/index.vue
@@ -0,0 +1,287 @@
+
+
+
+
+ {{ tag.title }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/index.js b/src/layout/components/index.js
new file mode 100644
index 0000000..52d35e3
--- /dev/null
+++ b/src/layout/components/index.js
@@ -0,0 +1,4 @@
+export { default as Navbar } from './Navbar'
+export { default as Sidebar } from './Sidebar'
+export { default as AppMain } from './AppMain'
+export { default as AppHeader } from './AppHeader'
diff --git a/src/layout/mixin/ResizeHandler.js b/src/layout/mixin/ResizeHandler.js
new file mode 100644
index 0000000..604fe3d
--- /dev/null
+++ b/src/layout/mixin/ResizeHandler.js
@@ -0,0 +1,40 @@
+import store from '@/store'
+
+const { body } = document
+const WIDTH = 992 // refer to Bootstrap's responsive design
+
+export default {
+ watch: {
+ $route(route) {
+ if (this.device === 'mobile' && this.sidebar.opened) {
+ store.dispatch('CloseSideBar', { withoutAnimation: false })
+ }
+ }
+ },
+ beforeMount() {
+ window.addEventListener('resize', this.resizeHandler)
+ },
+ mounted() {
+ const isMobile = this.isMobile()
+ if (isMobile) {
+ store.dispatch('ToggleDevice', 'mobile')
+ store.dispatch('CloseSideBar', { withoutAnimation: true })
+ }
+ },
+ methods: {
+ isMobile() {
+ const rect = body.getBoundingClientRect()
+ return rect.width - 1 < WIDTH
+ },
+ resizeHandler() {
+ if (!document.hidden) {
+ const isMobile = this.isMobile()
+ store.dispatch('ToggleDevice', isMobile ? 'mobile' : 'desktop')
+
+ if (isMobile) {
+ store.dispatch('CloseSideBar', { withoutAnimation: true })
+ }
+ }
+ }
+ }
+}
diff --git a/src/settings.js b/src/settings.js
new file mode 100644
index 0000000..b8159bf
--- /dev/null
+++ b/src/settings.js
@@ -0,0 +1,33 @@
+module.exports = {
+ /**
+ * @type {boolean} true | false
+ * @description 是否显示设置按钮
+ */
+ showSettings: false,
+
+ /**
+ * @type {boolean} true | false
+ * @description 是否显示tagsView
+ */
+ tagsView: true,
+
+ /**
+ * @type {boolean} true | false
+ * @description 是否固定面包屑和tagsViews头
+ */
+ fixedHeader: true,
+
+ /**
+ * @type {boolean} true | false
+ * @description 是否要显示侧边栏logo
+ */
+ sidebarLogo: false,
+
+ /**
+ * @type {string | array} 'production' | ['production', 'development']
+ * @description Need show err logs component.
+ * The default is only used in the production env
+ * If you want to also use it in dev, you can pass ['production', 'development']
+ */
+ errorLog: 'production'
+}
diff --git a/src/store/modules/settings.js b/src/store/modules/settings.js
new file mode 100644
index 0000000..cfc94a8
--- /dev/null
+++ b/src/store/modules/settings.js
@@ -0,0 +1,34 @@
+import variables from '@/styles/element-variables.scss'
+import defaultSettings from '@/settings'
+
+const { showSettings, tagsView, fixedHeader, sidebarLogo } = defaultSettings
+
+const state = {
+ theme: variables.theme, // 主题
+ showSettings: showSettings, // 是否显示设置按钮
+ tagsView: tagsView, // 是否显示tagsView
+ fixedHeader: fixedHeader, // 是否固定面包屑
+ sidebarLogo: sidebarLogo // 是否显示logo
+}
+
+const mutations = {
+ CHANGE_SETTING: (state, { key, value }) => {
+ if (state.hasOwnProperty(key)) {
+ state[key] = value
+ }
+ }
+}
+
+const actions = {
+ changeSetting({ commit }, data) {
+ commit('CHANGE_SETTING', data)
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
+
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..2ea268e
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..193b604
--- /dev/null
+++ b/src/layout/components/Navbar.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue
new file mode 100644
index 0000000..cf3023d
--- /dev/null
+++ b/src/layout/components/Settings/index.vue
@@ -0,0 +1,109 @@
+
+
+
+
Page style setting
+
+
+ Theme Color
+
+
+
+
+ Open Tags-View
+
+
+
+
+ Fixed Header
+
+
+
+
+ Sidebar Logo
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue
new file mode 100644
index 0000000..b515f61
--- /dev/null
+++ b/src/layout/components/Sidebar/Item.vue
@@ -0,0 +1,29 @@
+
diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue
new file mode 100644
index 0000000..bff45cd
--- /dev/null
+++ b/src/layout/components/Sidebar/Link.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue
new file mode 100644
index 0000000..988d662
--- /dev/null
+++ b/src/layout/components/Sidebar/SidebarItem.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue
new file mode 100644
index 0000000..5dcf730
--- /dev/null
+++ b/src/layout/components/Sidebar/index.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue
new file mode 100644
index 0000000..0ec76e7
--- /dev/null
+++ b/src/layout/components/TagsView/ScrollPane.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue
new file mode 100644
index 0000000..325c815
--- /dev/null
+++ b/src/layout/components/TagsView/index.vue
@@ -0,0 +1,287 @@
+
+
+
+
+ {{ tag.title }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/index.js b/src/layout/components/index.js
new file mode 100644
index 0000000..52d35e3
--- /dev/null
+++ b/src/layout/components/index.js
@@ -0,0 +1,4 @@
+export { default as Navbar } from './Navbar'
+export { default as Sidebar } from './Sidebar'
+export { default as AppMain } from './AppMain'
+export { default as AppHeader } from './AppHeader'
diff --git a/src/layout/mixin/ResizeHandler.js b/src/layout/mixin/ResizeHandler.js
new file mode 100644
index 0000000..604fe3d
--- /dev/null
+++ b/src/layout/mixin/ResizeHandler.js
@@ -0,0 +1,40 @@
+import store from '@/store'
+
+const { body } = document
+const WIDTH = 992 // refer to Bootstrap's responsive design
+
+export default {
+ watch: {
+ $route(route) {
+ if (this.device === 'mobile' && this.sidebar.opened) {
+ store.dispatch('CloseSideBar', { withoutAnimation: false })
+ }
+ }
+ },
+ beforeMount() {
+ window.addEventListener('resize', this.resizeHandler)
+ },
+ mounted() {
+ const isMobile = this.isMobile()
+ if (isMobile) {
+ store.dispatch('ToggleDevice', 'mobile')
+ store.dispatch('CloseSideBar', { withoutAnimation: true })
+ }
+ },
+ methods: {
+ isMobile() {
+ const rect = body.getBoundingClientRect()
+ return rect.width - 1 < WIDTH
+ },
+ resizeHandler() {
+ if (!document.hidden) {
+ const isMobile = this.isMobile()
+ store.dispatch('ToggleDevice', isMobile ? 'mobile' : 'desktop')
+
+ if (isMobile) {
+ store.dispatch('CloseSideBar', { withoutAnimation: true })
+ }
+ }
+ }
+ }
+}
diff --git a/src/settings.js b/src/settings.js
new file mode 100644
index 0000000..b8159bf
--- /dev/null
+++ b/src/settings.js
@@ -0,0 +1,33 @@
+module.exports = {
+ /**
+ * @type {boolean} true | false
+ * @description 是否显示设置按钮
+ */
+ showSettings: false,
+
+ /**
+ * @type {boolean} true | false
+ * @description 是否显示tagsView
+ */
+ tagsView: true,
+
+ /**
+ * @type {boolean} true | false
+ * @description 是否固定面包屑和tagsViews头
+ */
+ fixedHeader: true,
+
+ /**
+ * @type {boolean} true | false
+ * @description 是否要显示侧边栏logo
+ */
+ sidebarLogo: false,
+
+ /**
+ * @type {string | array} 'production' | ['production', 'development']
+ * @description Need show err logs component.
+ * The default is only used in the production env
+ * If you want to also use it in dev, you can pass ['production', 'development']
+ */
+ errorLog: 'production'
+}
diff --git a/src/store/modules/settings.js b/src/store/modules/settings.js
new file mode 100644
index 0000000..cfc94a8
--- /dev/null
+++ b/src/store/modules/settings.js
@@ -0,0 +1,34 @@
+import variables from '@/styles/element-variables.scss'
+import defaultSettings from '@/settings'
+
+const { showSettings, tagsView, fixedHeader, sidebarLogo } = defaultSettings
+
+const state = {
+ theme: variables.theme, // 主题
+ showSettings: showSettings, // 是否显示设置按钮
+ tagsView: tagsView, // 是否显示tagsView
+ fixedHeader: fixedHeader, // 是否固定面包屑
+ sidebarLogo: sidebarLogo // 是否显示logo
+}
+
+const mutations = {
+ CHANGE_SETTING: (state, { key, value }) => {
+ if (state.hasOwnProperty(key)) {
+ state[key] = value
+ }
+ }
+}
+
+const actions = {
+ changeSetting({ commit }, data) {
+ commit('CHANGE_SETTING', data)
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
+
diff --git a/src/styles/index.scss b/src/styles/index.scss
index 96a98ed..3f18397 100644
--- a/src/styles/index.scss
+++ b/src/styles/index.scss
@@ -57,6 +57,11 @@
text-decoration: none;
}
+// 去掉IE 的密码眼睛
+input::-ms-reveal {
+ display: none;
+}
+
.clearfix {
&:after {
visibility: hidden;
diff --git a/src/components/RightPanel/index.vue b/src/components/RightPanel/index.vue
new file mode 100644
index 0000000..e911521
--- /dev/null
+++ b/src/components/RightPanel/index.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index e797d6c..7d80a74 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -1,12 +1,13 @@
+ popper-class="theme-picker-dropdown"
+ />
diff --git a/src/layout/Layout.vue b/src/layout/Layout.vue
new file mode 100644
index 0000000..4400b7f
--- /dev/null
+++ b/src/layout/Layout.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppHeader.vue b/src/layout/components/AppHeader.vue
new file mode 100644
index 0000000..15835ae
--- /dev/null
+++ b/src/layout/components/AppHeader.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..2ea268e
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..193b604
--- /dev/null
+++ b/src/layout/components/Navbar.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Settings/index.vue b/src/layout/components/Settings/index.vue
new file mode 100644
index 0000000..cf3023d
--- /dev/null
+++ b/src/layout/components/Settings/index.vue
@@ -0,0 +1,109 @@
+
+
+
+
Page style setting
+
+
+ Theme Color
+
+
+
+
+ Open Tags-View
+
+
+
+
+ Fixed Header
+
+
+
+
+ Sidebar Logo
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue
new file mode 100644
index 0000000..b515f61
--- /dev/null
+++ b/src/layout/components/Sidebar/Item.vue
@@ -0,0 +1,29 @@
+
diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue
new file mode 100644
index 0000000..bff45cd
--- /dev/null
+++ b/src/layout/components/Sidebar/Link.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue
new file mode 100644
index 0000000..988d662
--- /dev/null
+++ b/src/layout/components/Sidebar/SidebarItem.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue
new file mode 100644
index 0000000..5dcf730
--- /dev/null
+++ b/src/layout/components/Sidebar/index.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue
new file mode 100644
index 0000000..0ec76e7
--- /dev/null
+++ b/src/layout/components/TagsView/ScrollPane.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue
new file mode 100644
index 0000000..325c815
--- /dev/null
+++ b/src/layout/components/TagsView/index.vue
@@ -0,0 +1,287 @@
+
+
+
+
+ {{ tag.title }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/index.js b/src/layout/components/index.js
new file mode 100644
index 0000000..52d35e3
--- /dev/null
+++ b/src/layout/components/index.js
@@ -0,0 +1,4 @@
+export { default as Navbar } from './Navbar'
+export { default as Sidebar } from './Sidebar'
+export { default as AppMain } from './AppMain'
+export { default as AppHeader } from './AppHeader'
diff --git a/src/layout/mixin/ResizeHandler.js b/src/layout/mixin/ResizeHandler.js
new file mode 100644
index 0000000..604fe3d
--- /dev/null
+++ b/src/layout/mixin/ResizeHandler.js
@@ -0,0 +1,40 @@
+import store from '@/store'
+
+const { body } = document
+const WIDTH = 992 // refer to Bootstrap's responsive design
+
+export default {
+ watch: {
+ $route(route) {
+ if (this.device === 'mobile' && this.sidebar.opened) {
+ store.dispatch('CloseSideBar', { withoutAnimation: false })
+ }
+ }
+ },
+ beforeMount() {
+ window.addEventListener('resize', this.resizeHandler)
+ },
+ mounted() {
+ const isMobile = this.isMobile()
+ if (isMobile) {
+ store.dispatch('ToggleDevice', 'mobile')
+ store.dispatch('CloseSideBar', { withoutAnimation: true })
+ }
+ },
+ methods: {
+ isMobile() {
+ const rect = body.getBoundingClientRect()
+ return rect.width - 1 < WIDTH
+ },
+ resizeHandler() {
+ if (!document.hidden) {
+ const isMobile = this.isMobile()
+ store.dispatch('ToggleDevice', isMobile ? 'mobile' : 'desktop')
+
+ if (isMobile) {
+ store.dispatch('CloseSideBar', { withoutAnimation: true })
+ }
+ }
+ }
+ }
+}
diff --git a/src/settings.js b/src/settings.js
new file mode 100644
index 0000000..b8159bf
--- /dev/null
+++ b/src/settings.js
@@ -0,0 +1,33 @@
+module.exports = {
+ /**
+ * @type {boolean} true | false
+ * @description 是否显示设置按钮
+ */
+ showSettings: false,
+
+ /**
+ * @type {boolean} true | false
+ * @description 是否显示tagsView
+ */
+ tagsView: true,
+
+ /**
+ * @type {boolean} true | false
+ * @description 是否固定面包屑和tagsViews头
+ */
+ fixedHeader: true,
+
+ /**
+ * @type {boolean} true | false
+ * @description 是否要显示侧边栏logo
+ */
+ sidebarLogo: false,
+
+ /**
+ * @type {string | array} 'production' | ['production', 'development']
+ * @description Need show err logs component.
+ * The default is only used in the production env
+ * If you want to also use it in dev, you can pass ['production', 'development']
+ */
+ errorLog: 'production'
+}
diff --git a/src/store/modules/settings.js b/src/store/modules/settings.js
new file mode 100644
index 0000000..cfc94a8
--- /dev/null
+++ b/src/store/modules/settings.js
@@ -0,0 +1,34 @@
+import variables from '@/styles/element-variables.scss'
+import defaultSettings from '@/settings'
+
+const { showSettings, tagsView, fixedHeader, sidebarLogo } = defaultSettings
+
+const state = {
+ theme: variables.theme, // 主题
+ showSettings: showSettings, // 是否显示设置按钮
+ tagsView: tagsView, // 是否显示tagsView
+ fixedHeader: fixedHeader, // 是否固定面包屑
+ sidebarLogo: sidebarLogo // 是否显示logo
+}
+
+const mutations = {
+ CHANGE_SETTING: (state, { key, value }) => {
+ if (state.hasOwnProperty(key)) {
+ state[key] = value
+ }
+ }
+}
+
+const actions = {
+ changeSetting({ commit }, data) {
+ commit('CHANGE_SETTING', data)
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
+
diff --git a/src/styles/index.scss b/src/styles/index.scss
index 96a98ed..3f18397 100644
--- a/src/styles/index.scss
+++ b/src/styles/index.scss
@@ -57,6 +57,11 @@
text-decoration: none;
}
+// 去掉IE 的密码眼睛
+input::-ms-reveal {
+ display: none;
+}
+
.clearfix {
&:after {
visibility: hidden;
diff --git a/src/utils/index.js b/src/utils/index.js
index f607910..1095ef0 100644
--- a/src/utils/index.js
+++ b/src/utils/index.js
@@ -296,3 +296,34 @@
export function uniqueArr(arr) {
return Array.from(new Set(arr))
}
+
+/**
+ * Check if an element has a class
+ * @param {HTMLElement} elm
+ * @param {string} cls
+ * @returns {boolean}
+ */
+export function hasClass(ele, cls) {
+ return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'))
+}
+
+/**
+ * Add class to element
+ * @param {HTMLElement} elm
+ * @param {string} cls
+ */
+export function addClass(ele, cls) {
+ if (!hasClass(ele, cls)) ele.className += ' ' + cls
+}
+
+/**
+ * Remove class from element
+ * @param {HTMLElement} elm
+ * @param {string} cls
+ */
+export function removeClass(ele, cls) {
+ if (hasClass(ele, cls)) {
+ const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)')
+ ele.className = ele.className.replace(reg, ' ')
+ }
+}