From 700267d7d1cdc98f0b926de4d7f8847967b01eb1 Mon Sep 17 00:00:00 2001 From: Yaosanqi137 Date: Sat, 27 Sep 2025 20:39:42 +0800 Subject: [PATCH] feat: add memo --- src/backend/item_manager/settings.py | 1 + src/backend/item_manager/urls.py | 1 + src/fronted/package.json | 2 + src/fronted/src/components/AppHeader.vue | 13 +- src/fronted/src/components/MemoEditor.vue | 1640 +++++++++++++++++++++ src/fronted/src/components/MemoList.vue | 300 ++++ src/fronted/src/router/index.js | 6 + src/fronted/src/services/api.js | 49 + src/fronted/src/views/Memo.vue | 276 ++++ 9 files changed, 2286 insertions(+), 2 deletions(-) create mode 100644 src/fronted/src/components/MemoEditor.vue create mode 100644 src/fronted/src/components/MemoList.vue create mode 100644 src/fronted/src/views/Memo.vue diff --git a/src/backend/item_manager/settings.py b/src/backend/item_manager/settings.py index 9e5c771..087bb30 100644 --- a/src/backend/item_manager/settings.py +++ b/src/backend/item_manager/settings.py @@ -54,6 +54,7 @@ INSTALLED_APPS = [ "email_notice", "personnel", "scheduler", + "memo", ] MIDDLEWARE = [ diff --git a/src/backend/item_manager/urls.py b/src/backend/item_manager/urls.py index 8f9429a..366aa42 100644 --- a/src/backend/item_manager/urls.py +++ b/src/backend/item_manager/urls.py @@ -27,6 +27,7 @@ urlpatterns = [ path("", include("finance.urls")), path("", include("email_notice.urls")), path("", include("personnel.urls")), + path("", include("memo.urls")), path("api-auth/", include("rest_framework.urls")), path("api/token/", TokenObtainPairView.as_view(), name="token_obtain_pair"), path("api/token/refresh/", TokenRefreshView.as_view(), name="token_refresh"), diff --git a/src/fronted/package.json b/src/fronted/package.json index 5734ffb..2a0f4bd 100644 --- a/src/fronted/package.json +++ b/src/fronted/package.json @@ -11,9 +11,11 @@ "@element-plus/icons-vue": "^2.3.2", "axios": "^1.12.2", "core-js": "^3.8.3", + "dompurify": "^3.2.7", "echarts": "^6.0.0", "element-plus": "^2.11.2", "eslint-plugin-vue": "^10.4.0", + "marked": "^16.3.0", "moment": "^2.30.1", "vue": "^3.2.13", "vue-router": "^4.5.1" diff --git a/src/fronted/src/components/AppHeader.vue b/src/fronted/src/components/AppHeader.vue index 690c8a0..c78dfdc 100644 --- a/src/fronted/src/components/AppHeader.vue +++ b/src/fronted/src/components/AppHeader.vue @@ -41,6 +41,10 @@ 财务记录 + + + 备忘录 +
@@ -86,13 +90,17 @@ 财务记录 + + + 备忘录 + + + \ No newline at end of file diff --git a/src/fronted/src/components/MemoList.vue b/src/fronted/src/components/MemoList.vue new file mode 100644 index 0000000..7cf3d5c --- /dev/null +++ b/src/fronted/src/components/MemoList.vue @@ -0,0 +1,300 @@ + + + + + \ No newline at end of file diff --git a/src/fronted/src/router/index.js b/src/fronted/src/router/index.js index 2522121..8390c6c 100644 --- a/src/fronted/src/router/index.js +++ b/src/fronted/src/router/index.js @@ -11,6 +11,7 @@ import FinanceRecordDetail from '../views/FinanceRecordDetail.vue' import PersonnelList from '../views/PersonnelList.vue' import DepartmentProjectGroupManagement from '../views/DepartmentProjectGroupManagement.vue' import Settings from '../views/Settings.vue' +import Memo from '../views/Memo.vue' import { authService } from '@/services/api' const routes = [ @@ -75,6 +76,11 @@ const routes = [ path: '/settings', name: 'Settings', component: Settings + }, + { + path: '/memo', + name: 'Memo', + component: Memo } ] diff --git a/src/fronted/src/services/api.js b/src/fronted/src/services/api.js index 788f5d0..7d04f28 100644 --- a/src/fronted/src/services/api.js +++ b/src/fronted/src/services/api.js @@ -428,3 +428,52 @@ export const projectGroupService = { }) } } + +// 备忘录管理服务 +export const memoService = { + // 获取所有备忘录 + getMemos(search = '') { + const params = search ? { search } : {} + return apiClient.get('/memos/', { params }) + }, + + // 获取备忘录详情 + getMemo(id) { + return apiClient.get(`/memos/${id}/`) + }, + + // 创建新备忘录 + createMemo(memo) { + return apiClient.post('/memos/', memo) + }, + + // 更新备忘录 + updateMemo(id, memo) { + return apiClient.put(`/memos/${id}/`, memo) + }, + + // 删除备忘录 + deleteMemo(id) { + return apiClient.delete(`/memos/${id}/`) + }, + + // 上传图片到备忘录 + uploadImage(memoId, file, altText = '') { + const formData = new FormData() + formData.append('image', file) + formData.append('alt_text', altText) + + return apiClient.post(`/memos/${memoId}/upload_image/`, formData, { + headers: { + 'Content-Type': 'multipart/form-data' + } + }) + }, + + // 删除备忘录中的图片 + deleteImage(memoId, imageId) { + return apiClient.delete(`/memos/${memoId}/delete_image/`, { + data: { image_id: imageId } + }) + } +} diff --git a/src/fronted/src/views/Memo.vue b/src/fronted/src/views/Memo.vue new file mode 100644 index 0000000..9ee163b --- /dev/null +++ b/src/fronted/src/views/Memo.vue @@ -0,0 +1,276 @@ + + + + + \ No newline at end of file