Your Name 3 lat temu
rodzic
commit
1237a16ce8

+ 1
- 0
package.json Wyświetl plik

@@ -9,6 +9,7 @@
9 9
   },
10 10
   "dependencies": {
11 11
     "@ant-design/icons-vue": "^6.1.0",
12
+    "@zjxpcyc/js_event": "^1.0.0",
12 13
     "@zjxpcyc/vue-tiny-store": "^1.0.1",
13 14
     "ant-design-vue": "^3.2.4",
14 15
     "axios": "^0.27.2",

+ 31
- 9
src/layouts/components/Header.vue Wyświetl plik

@@ -1,14 +1,14 @@
1 1
 <template>
2 2
   <div></div>
3 3
   <div>
4
-    <a-menu theme="dark" mode="horizontal" class="menu-navi">
5
-      <a-menu-item key="save" :disabled="disabledItem.save">
4
+    <a-menu theme="dark" mode="horizontal" class="menu-navi" @click="handleMenu">
5
+      <a-menu-item key="save" :disabled="saveDisabledItem">
6 6
         <template #icon>
7 7
           <save-outlined />
8 8
         </template>
9 9
         保存
10 10
       </a-menu-item>
11
-      <a-menu-item key="newfolder" :disabled="disabledItem.newFolder">
11
+      <a-menu-item key="newfolder">
12 12
         <template #icon>
13 13
           <folder-add-outlined />
14 14
         </template>
@@ -16,21 +16,43 @@
16 16
       </a-menu-item>
17 17
     </a-menu>
18 18
   </div>
19
+  <a-modal v-model:visible="newFolderVisible" title="新建文件夹" @ok="confirmNewFolder">
20
+    <a-input v-model:value="newFolderName" placeholder="请输入文件夹名称" />
21
+  </a-modal>
19 22
 </template>
20 23
 
21 24
 <script setup>
22
-import { computed } from 'vue'
25
+import { computed, ref } from 'vue'
23 26
 import { useModel } from '@zjxpcyc/vue-tiny-store'
24 27
 import { SaveOutlined, FolderAddOutlined } from '@ant-design/icons-vue';
28
+import eventBus from '@/utils/eventBus'
25 29
 
30
+const newFolderVisible = ref(false)
31
+const newFolderName = ref()
26 32
 const { curMenu } = useModel('menu')
27
-const disabledItem = computed(() => {
28
-  return {
29
-    save: !curMenu.value || curMenu.value.type !== 'file',
30
-    newFolder: !curMenu.value || curMenu.value.type !== 'dir',
31
-  }
33
+const saveDisabledItem = computed(() => {
34
+  return !curMenu.value || curMenu.value.type !== 'file'
32 35
 })
33 36
 
37
+const confirmNewFolder = () => {
38
+  newFolderVisible.value = false
39
+  eventBus.dispatchEvent('menu.newFolder', newFolderName.value)
40
+  newFolderName.value = undefined
41
+}
42
+
43
+const handleMenu = (e) => {
44
+  switch (e.key) {
45
+    case 'save':
46
+      eventBus.dispatchEvent('menu.save')
47
+      break;
48
+    case 'newfolder':
49
+      newFolderVisible.value = true
50
+      break;
51
+    default:
52
+      break;
53
+  }
54
+}
55
+
34 56
 </script>
35 57
 
36 58
 <style lang="less" scoped>

+ 23
- 9
src/layouts/components/SiderBar.vue Wyświetl plik

@@ -16,6 +16,7 @@
16 16
 <script setup>
17 17
 import { useModel } from '@zjxpcyc/vue-tiny-store'
18 18
 import SubMenu from '@/components/SubMenu.vue';
19
+import eventBus from '@/utils/eventBus'
19 20
 
20 21
 const props = defineProps({
21 22
   menuStyle: {
@@ -29,19 +30,26 @@ const { curMenu, menus, getMenus } = useModel('menu')
29 30
 const { getNote } = useModel('note')
30 31
 
31 32
 if (!menus || !menus.length) {
32
-  getMenus(user).then(res => menus.push(...res || []))
33
+  getMenus(user).then(res => {
34
+    menus.push(...(res || []).filter(x => x.path.indexOf('.gitignore') === -1))
35
+  })
33 36
 }
34 37
 
35 38
 const getDeep = (arr, targ, type) => {
36
-    let found = arr.filter(x => x.type === type && x.path === targ)[0]
37
-    if (found) return found;
39
+    const length = arr.length
40
+    for (let i = 0; i < length; i += 1) {
41
+      const it = arr[i]
42
+      if (it.type === type && it.path === targ) {
43
+        return it;
44
+      }
38 45
 
39
-    for (it of arr) {
40
-      if (it.type !== type) continue;
46
+      if (it.type === 'dir') {
47
+        const children = it.children
48
+        if (!children || !children.length) continue;
41 49
 
42
-      const children = it.children || []
43
-      const found = getDeep(children, targ, type)
44
-      if (found) return found
50
+        const found = getDeep(children, targ, type)
51
+        if (found) return found
52
+      }
45 53
     }
46 54
 
47 55
     return undefined
@@ -58,7 +66,6 @@ const handleMenu = (e) => {
58 66
 }
59 67
 
60 68
 const handleOpenChange = (keys) => {
61
-  console.log('------------>', keys)
62 69
   const [ menuId ] = keys
63 70
   if (!menuId) return;
64 71
 
@@ -71,4 +78,11 @@ const handleOpenChange = (keys) => {
71 78
     menu.children = res || []
72 79
   })
73 80
 }
81
+
82
+const createNewFolder = (newFolderName) => {
83
+  console.log('----newFolderName---->', newFolderName)
84
+}
85
+
86
+
87
+eventBus.addEventListener('menu.newFolder', createNewFolder)
74 88
 </script>

+ 6
- 2
src/pages/index.vue Wyświetl plik

@@ -12,6 +12,7 @@ import { Base64 } from 'js-base64'
12 12
 import { ref, shallowRef, watch, onMounted } from 'vue'
13 13
 import Editor from '@/components/Editor.vue';
14 14
 import { useModel } from '@zjxpcyc/vue-tiny-store'
15
+import eventBus from '@/utils/eventBus'
15 16
 
16 17
 const mode = 'simple'
17 18
 const { user } = useModel('user')
@@ -19,8 +20,8 @@ const { note, updateNote } = useModel('note')
19 20
 
20 21
 const valueHtml = ref()
21 22
 
22
-const handleSave = (newContent) => {
23
-  updateNote(newContent, user)
23
+const handleSave = () => {
24
+  updateNote(valueHtml.value, user)
24 25
 }
25 26
 
26 27
 watch(note, (newVal) => {
@@ -31,4 +32,7 @@ watch(note, (newVal) => {
31 32
   }
32 33
 }, { immediate: true })
33 34
 
35
+// 监听导航菜单保存按钮
36
+eventBus.addEventListener('menu.save', handleSave)
37
+
34 38
 </script>

+ 2
- 0
src/store/model/note.js Wyświetl plik

@@ -1,6 +1,7 @@
1 1
 import { ref } from 'vue'
2 2
 import request, { BASE_URL } from '@/utils/request'
3 3
 import { Base64 } from 'js-base64'
4
+import { message } from 'ant-design-vue';
4 5
 
5 6
 export default function useNote() {
6 7
   const note = ref()
@@ -23,6 +24,7 @@ export default function useNote() {
23 24
     const filePath = url.replace(BASE_URL, '')
24 25
 
25 26
     return request.put(filePath, data).then(() => {
27
+      message.success('保存成功');
26 28
       // 获取最新的数据, 目的是更新 sha 值
27 29
       request.get(filePath, { params: { access_token } }).then(res => note.value = res)
28 30
     })

+ 5
- 0
src/utils/eventBus.js Wyświetl plik

@@ -0,0 +1,5 @@
1
+import createEvent from '@zjxpcyc/js_event'
2
+
3
+const eventBus = createEvent();
4
+
5
+export default eventBus;

+ 5
- 0
yarn.lock Wyświetl plik

@@ -181,6 +181,11 @@
181 181
   resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.34.tgz#b71750d05120feb644102088a09be64518cd3a86"
182 182
   integrity sha512-zhEeB8TrFmTXmTXmu/wcjEhgrjO4xqdDQrCdPhjX7NxfoLqoBVKguOm8qyihWNLbP+41svYY4za9mqXyqFLzNg==
183 183
 
184
+"@zjxpcyc/js_event@^1.0.0":
185
+  version "1.0.0"
186
+  resolved "https://registry.yarnpkg.com/@zjxpcyc/js_event/-/js_event-1.0.0.tgz#25688d9ac263700a8ed8d702c1517bcd827934d1"
187
+  integrity sha512-Nz9bHp0DcdWbgNQQ54uFXoAONvOcrzzqbNUxMp6GTOWP4y14jOZowsLwb1mYNcVxBlkar4Ds0WTIoRyx8sOpRw==
188
+
184 189
 "@zjxpcyc/vue-tiny-store@^1.0.1":
185 190
   version "1.0.1"
186 191
   resolved "https://registry.npmmirror.com/@zjxpcyc/vue-tiny-store/-/vue-tiny-store-1.0.1.tgz#9e67c0f08e9bddd802bdcb543a28c18181e27395"