From 6b5b180448a866acfe2362909ee4be9867e70399 Mon Sep 17 00:00:00 2001 From: cuixiaorui Date: Sat, 10 Jun 2023 16:04:11 +0800 Subject: [PATCH 01/38] feat(teach-frontend): init --- apps/teach-frontend/index.html | 13 + apps/teach-frontend/package.json | 44 ++++ apps/teach-frontend/public/vite.svg | 1 + apps/teach-frontend/src/App.vue | 17 ++ apps/teach-frontend/src/api/http.ts | 18 ++ apps/teach-frontend/src/api/index.ts | 2 + apps/teach-frontend/src/api/projects.ts | 11 + apps/teach-frontend/src/api/tasks.ts | 60 +++++ .../src/assets/empty-task-detail-icon.svg | 35 +++ .../src/components/command/CommandModal.vue | 22 ++ .../components/command/CommandModalBody.vue | 30 +++ .../command/CommandSearchCommands.vue | 22 ++ .../components/command/CommandSearchTasks.vue | 16 ++ .../command/CommandSearchTasksItem.vue | 59 +++++ .../src/components/command/commandModal.ts | 34 +++ .../src/components/command/search.ts | 58 ++++ .../src/components/command/searchCommands.ts | 41 +++ .../src/components/command/searchTasks.ts | 41 +++ .../src/components/header/TheHeader.vue | 21 ++ .../src/components/navbar/Navbar.vue | 115 ++++++++ .../src/components/settings/SettingsBody.vue | 14 + .../components/settings/SettingsHeader.vue | 23 ++ .../components/settings/SettingsSidebar.vue | 26 ++ .../components/settings/Sub/Smart/index.vue | 35 +++ .../components/settings/Sub/Theme/Item.vue | 41 +++ .../settings/Sub/Theme/Selected.vue | 5 + .../components/settings/Sub/Theme/index.vue | 17 ++ .../ProjectCreateView/ProjectCreatedView.vue | 123 +++++++++ .../task/TagView/ProjectCreateView/index.ts | 6 + .../useTaskLeftListCreateProject.ts | 138 ++++++++++ .../TagView/TagCreateView/TagCreateView.vue | 137 ++++++++++ .../task/TagView/TagCreateView/index.ts | 14 + .../TagView/TagRemoveAlert/TagRemoveAlert.vue | 51 ++++ .../task/TagView/TagRemoveAlert/index.ts | 11 + .../src/components/task/TagView/helper.ts | 52 ++++ .../src/components/task/TagView/index.ts | 2 + .../src/components/task/TaskEditor.vue | 52 ++++ .../src/components/task/TaskItem.vue | 117 +++++++++ .../components/task/TaskLeftListProject.vue | 247 ++++++++++++++++++ .../task/TaskLeftListSmartProject.vue | 118 +++++++++ .../src/components/task/TaskLeftListView.vue | 15 ++ .../src/components/task/TaskList.vue | 193 ++++++++++++++ apps/teach-frontend/src/composables/goto.ts | 34 +++ apps/teach-frontend/src/composables/index.ts | 5 + apps/teach-frontend/src/composables/misc.ts | 5 + .../src/composables/settings/index.ts | 4 + .../src/composables/settings/sidebar.ts | 24 ++ .../src/composables/settings/smartProject.ts | 55 ++++ .../src/composables/settings/theme.ts | 28 ++ .../src/composables/useNaiveDiscreteApi.ts | 24 ++ .../composables/useTaskOperationMessage.ts | 79 ++++++ .../composables/useTaskRightContextMenu.ts | 105 ++++++++ .../src/composables/useTaskSidebarDrag.ts | 125 +++++++++ apps/teach-frontend/src/layout/BaseLayout.vue | 16 ++ apps/teach-frontend/src/main.ts | 27 ++ apps/teach-frontend/src/pages/Settings.vue | 15 ++ apps/teach-frontend/src/pages/Task.vue | 77 ++++++ apps/teach-frontend/src/router/index.ts | 35 +++ apps/teach-frontend/src/router/settings.ts | 26 ++ apps/teach-frontend/src/store/index.ts | 8 + apps/teach-frontend/src/store/listProjects.ts | 91 +++++++ .../teach-frontend/src/store/smartProjects.ts | 48 ++++ apps/teach-frontend/src/store/tasks.ts | 181 +++++++++++++ .../teach-frontend/src/store/tasksSelector.ts | 36 +++ .../store/useProjectSelectedStatusStore.ts | 27 ++ .../src/store/useSettingsStore.ts | 20 ++ .../src/store/useTaskLeftMenuStatus.ts | 15 ++ apps/teach-frontend/src/store/useTheme.ts | 51 ++++ apps/teach-frontend/src/style/overrides.css | 7 + .../src/tests/helper/component.ts | 13 + .../src/tests/helper/fireEvent.ts | 6 + apps/teach-frontend/src/tests/helper/index.ts | 2 + apps/teach-frontend/src/vite-env.d.ts | 8 + apps/teach-frontend/tsconfig.json | 40 +++ apps/teach-frontend/tsconfig.node.json | 9 + apps/teach-frontend/unocss.config.ts | 31 +++ apps/teach-frontend/vite.config.ts | 24 ++ pnpm-lock.yaml | 63 +++++ 78 files changed, 3461 insertions(+) create mode 100644 apps/teach-frontend/index.html create mode 100644 apps/teach-frontend/package.json create mode 100644 apps/teach-frontend/public/vite.svg create mode 100644 apps/teach-frontend/src/App.vue create mode 100644 apps/teach-frontend/src/api/http.ts create mode 100644 apps/teach-frontend/src/api/index.ts create mode 100644 apps/teach-frontend/src/api/projects.ts create mode 100644 apps/teach-frontend/src/api/tasks.ts create mode 100644 apps/teach-frontend/src/assets/empty-task-detail-icon.svg create mode 100644 apps/teach-frontend/src/components/command/CommandModal.vue create mode 100644 apps/teach-frontend/src/components/command/CommandModalBody.vue create mode 100644 apps/teach-frontend/src/components/command/CommandSearchCommands.vue create mode 100644 apps/teach-frontend/src/components/command/CommandSearchTasks.vue create mode 100644 apps/teach-frontend/src/components/command/CommandSearchTasksItem.vue create mode 100644 apps/teach-frontend/src/components/command/commandModal.ts create mode 100644 apps/teach-frontend/src/components/command/search.ts create mode 100644 apps/teach-frontend/src/components/command/searchCommands.ts create mode 100644 apps/teach-frontend/src/components/command/searchTasks.ts create mode 100644 apps/teach-frontend/src/components/header/TheHeader.vue create mode 100644 apps/teach-frontend/src/components/navbar/Navbar.vue create mode 100644 apps/teach-frontend/src/components/settings/SettingsBody.vue create mode 100644 apps/teach-frontend/src/components/settings/SettingsHeader.vue create mode 100644 apps/teach-frontend/src/components/settings/SettingsSidebar.vue create mode 100644 apps/teach-frontend/src/components/settings/Sub/Smart/index.vue create mode 100644 apps/teach-frontend/src/components/settings/Sub/Theme/Item.vue create mode 100644 apps/teach-frontend/src/components/settings/Sub/Theme/Selected.vue create mode 100644 apps/teach-frontend/src/components/settings/Sub/Theme/index.vue create mode 100644 apps/teach-frontend/src/components/task/TagView/ProjectCreateView/ProjectCreatedView.vue create mode 100644 apps/teach-frontend/src/components/task/TagView/ProjectCreateView/index.ts create mode 100644 apps/teach-frontend/src/components/task/TagView/ProjectCreateView/useTaskLeftListCreateProject.ts create mode 100644 apps/teach-frontend/src/components/task/TagView/TagCreateView/TagCreateView.vue create mode 100644 apps/teach-frontend/src/components/task/TagView/TagCreateView/index.ts create mode 100644 apps/teach-frontend/src/components/task/TagView/TagRemoveAlert/TagRemoveAlert.vue create mode 100644 apps/teach-frontend/src/components/task/TagView/TagRemoveAlert/index.ts create mode 100644 apps/teach-frontend/src/components/task/TagView/helper.ts create mode 100644 apps/teach-frontend/src/components/task/TagView/index.ts create mode 100644 apps/teach-frontend/src/components/task/TaskEditor.vue create mode 100644 apps/teach-frontend/src/components/task/TaskItem.vue create mode 100644 apps/teach-frontend/src/components/task/TaskLeftListProject.vue create mode 100644 apps/teach-frontend/src/components/task/TaskLeftListSmartProject.vue create mode 100644 apps/teach-frontend/src/components/task/TaskLeftListView.vue create mode 100644 apps/teach-frontend/src/components/task/TaskList.vue create mode 100644 apps/teach-frontend/src/composables/goto.ts create mode 100644 apps/teach-frontend/src/composables/index.ts create mode 100644 apps/teach-frontend/src/composables/misc.ts create mode 100644 apps/teach-frontend/src/composables/settings/index.ts create mode 100644 apps/teach-frontend/src/composables/settings/sidebar.ts create mode 100644 apps/teach-frontend/src/composables/settings/smartProject.ts create mode 100644 apps/teach-frontend/src/composables/settings/theme.ts create mode 100644 apps/teach-frontend/src/composables/useNaiveDiscreteApi.ts create mode 100644 apps/teach-frontend/src/composables/useTaskOperationMessage.ts create mode 100644 apps/teach-frontend/src/composables/useTaskRightContextMenu.ts create mode 100644 apps/teach-frontend/src/composables/useTaskSidebarDrag.ts create mode 100644 apps/teach-frontend/src/layout/BaseLayout.vue create mode 100644 apps/teach-frontend/src/main.ts create mode 100644 apps/teach-frontend/src/pages/Settings.vue create mode 100644 apps/teach-frontend/src/pages/Task.vue create mode 100644 apps/teach-frontend/src/router/index.ts create mode 100644 apps/teach-frontend/src/router/settings.ts create mode 100644 apps/teach-frontend/src/store/index.ts create mode 100644 apps/teach-frontend/src/store/listProjects.ts create mode 100644 apps/teach-frontend/src/store/smartProjects.ts create mode 100644 apps/teach-frontend/src/store/tasks.ts create mode 100644 apps/teach-frontend/src/store/tasksSelector.ts create mode 100644 apps/teach-frontend/src/store/useProjectSelectedStatusStore.ts create mode 100644 apps/teach-frontend/src/store/useSettingsStore.ts create mode 100644 apps/teach-frontend/src/store/useTaskLeftMenuStatus.ts create mode 100644 apps/teach-frontend/src/store/useTheme.ts create mode 100644 apps/teach-frontend/src/style/overrides.css create mode 100644 apps/teach-frontend/src/tests/helper/component.ts create mode 100644 apps/teach-frontend/src/tests/helper/fireEvent.ts create mode 100644 apps/teach-frontend/src/tests/helper/index.ts create mode 100644 apps/teach-frontend/src/vite-env.d.ts create mode 100644 apps/teach-frontend/tsconfig.json create mode 100644 apps/teach-frontend/tsconfig.node.json create mode 100644 apps/teach-frontend/unocss.config.ts create mode 100644 apps/teach-frontend/vite.config.ts diff --git a/apps/teach-frontend/index.html b/apps/teach-frontend/index.html new file mode 100644 index 0000000..34bdaec --- /dev/null +++ b/apps/teach-frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + DiDa + + +
+ + + diff --git a/apps/teach-frontend/package.json b/apps/teach-frontend/package.json new file mode 100644 index 0000000..03fd6a3 --- /dev/null +++ b/apps/teach-frontend/package.json @@ -0,0 +1,44 @@ +{ + "name": "frontend", + "type": "module", + "version": "0.0.0", + "private": true, + "scripts": { + "dev": "vite", + "build": "vue-tsc --noEmit && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@imengyu/vue3-context-menu": "^1.1.10", + "axios": "^1.4.0", + "dexie": "^3.2.2", + "fuse.js": "^6.6.2", + "ink-mde": "^0.18.1", + "lodash-es": "^4.17.21", + "naive-ui": "^2.34.3", + "pinia": "^2.0.28", + "vue": "^3.2.45", + "vue-router": "4.1.6", + "vue3-emoji-picker": "^1.1.7", + "vuedraggable": "^4.1.0" + }, + "devDependencies": { + "@iconify-json/carbon": "^1.1.13", + "@iconify-json/mdi": "^1.1.41", + "@iconify/vue": "^4.0.2", + "@types/lodash-es": "^4.17.6", + "@unocss/reset": "^0.48.3", + "@vitejs/plugin-vue": "^4.0.0", + "@vitejs/plugin-vue-jsx": "^3.0.0", + "@vue/test-utils": "^2.2.10", + "@vueuse/core": "^9.10.0", + "cross-env": "^7.0.3", + "flush-promises": "^1.0.2", + "happy-dom": "^8.1.3", + "typescript": "^4.9.5", + "unocss": "^0.48.3", + "vite": "^4.0.4", + "vue-router-mock": "^0.2.0", + "vue-tsc": "^1.0.24" + } +} diff --git a/apps/teach-frontend/public/vite.svg b/apps/teach-frontend/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/apps/teach-frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/teach-frontend/src/App.vue b/apps/teach-frontend/src/App.vue new file mode 100644 index 0000000..0fcb4fe --- /dev/null +++ b/apps/teach-frontend/src/App.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/apps/teach-frontend/src/api/http.ts b/apps/teach-frontend/src/api/http.ts new file mode 100644 index 0000000..226f7e7 --- /dev/null +++ b/apps/teach-frontend/src/api/http.ts @@ -0,0 +1,18 @@ +import type { AxiosInstance, AxiosResponse } from 'axios' +import axios from 'axios' + +export const http: AxiosInstance = axios.create({ + baseURL: '/api', // Replace with your API base URL + timeout: 10000, + headers: { 'Content-Type': 'application/json' }, +}) + +http.interceptors.response.use( + (response: AxiosResponse) => { + return response.data // Directly extract data from the response + }, + (error) => { + // Handle common error logic here if needed + return Promise.reject(error) + }, +) diff --git a/apps/teach-frontend/src/api/index.ts b/apps/teach-frontend/src/api/index.ts new file mode 100644 index 0000000..891e8dd --- /dev/null +++ b/apps/teach-frontend/src/api/index.ts @@ -0,0 +1,2 @@ +export * from './tasks' +export * from './projects' diff --git a/apps/teach-frontend/src/api/projects.ts b/apps/teach-frontend/src/api/projects.ts new file mode 100644 index 0000000..09beb7e --- /dev/null +++ b/apps/teach-frontend/src/api/projects.ts @@ -0,0 +1,11 @@ +import { http } from './http' + +export function fetchAllProjects() { + return http.get('/projects') +} + +export function fetchCreateProject(name: string) { + return http.post('/projects', { + name, + }) +} diff --git a/apps/teach-frontend/src/api/tasks.ts b/apps/teach-frontend/src/api/tasks.ts new file mode 100644 index 0000000..03c5131 --- /dev/null +++ b/apps/teach-frontend/src/api/tasks.ts @@ -0,0 +1,60 @@ +import { http } from './http' +import type { Task } from '@/store' +import { TaskStatus } from '@/store' + +export function fetchAllTasks({ pId, status }: { pId?: string; status?: TaskStatus }) { + return http.get('/tasks', { + params: { + projectId: pId, + status, + }, + }) +} + +export function fetchCreateTask(title: string, pId: string) { + return http.post('/tasks', { + title, + projectId: pId, + }) +} + +export function fetchUpdateTaskTitle(taskId: Task['id'], title: string) { + return http.patch(`/tasks/${taskId}`, { + title, + }) +} +export function fetchUpdateTaskContent(taskId: Task['id'], content: string) { + return http.patch(`/tasks/${taskId}`, { + content, + }) +} + +export function fetchCompleteTask(taskId: Task['id']) { + return http.patch(`/tasks/${taskId}`, { + status: TaskStatus.COMPLETED, + }) +} + +export function fetchRestoreTask(taskId: Task['id']) { + return http.patch(`/tasks/${taskId}`, { + status: TaskStatus.ACTIVE, + }) +} + +export function fetchMoveTaskToProject(taskId: Task['id'], projectId: string) { + return http.patch(`/tasks/${taskId}`, { + projectId, + }) +} + +export function fetchRemoveTask(taskId: Task['id']) { + return http.patch(`/tasks/${taskId}`, { + status: TaskStatus.REMOVED, + }) +} + +export function fetchUpdateTaskPosition(taskId: Task['id'], position: number) { + return http.patch(`/tasks/${taskId}`, { + position, + }) +} diff --git a/apps/teach-frontend/src/assets/empty-task-detail-icon.svg b/apps/teach-frontend/src/assets/empty-task-detail-icon.svg new file mode 100644 index 0000000..30e550e --- /dev/null +++ b/apps/teach-frontend/src/assets/empty-task-detail-icon.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/teach-frontend/src/components/command/CommandModal.vue b/apps/teach-frontend/src/components/command/CommandModal.vue new file mode 100644 index 0000000..3140ae6 --- /dev/null +++ b/apps/teach-frontend/src/components/command/CommandModal.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/apps/teach-frontend/src/components/command/CommandModalBody.vue b/apps/teach-frontend/src/components/command/CommandModalBody.vue new file mode 100644 index 0000000..d7de420 --- /dev/null +++ b/apps/teach-frontend/src/components/command/CommandModalBody.vue @@ -0,0 +1,30 @@ + + +