From 78dce18d9c29a2e53c4ca2de2a784fe685eb6c38 Mon Sep 17 00:00:00 2001 From: Miao_Spring <539943419@qq.com> Date: Fri, 17 Jan 2025 01:31:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=96=87=E7=AB=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.vue | 5 +- components/user/postEditor.vue | 12 +++-- hooks/pinia/useUserStore.ts | 1 - pages/user/main/post/edit-[id].vue | 76 ++++++++++++++++++++++++++++-- server/api/posts/deletePost.ts | 61 ++++++++++++++++++++++++ style/default.scss | 4 ++ 6 files changed, 147 insertions(+), 12 deletions(-) create mode 100644 server/api/posts/deletePost.ts diff --git a/app.vue b/app.vue index 808650c..2d4d510 100644 --- a/app.vue +++ b/app.vue @@ -12,6 +12,7 @@ diff --git a/server/api/posts/deletePost.ts b/server/api/posts/deletePost.ts new file mode 100644 index 0000000..9234050 --- /dev/null +++ b/server/api/posts/deletePost.ts @@ -0,0 +1,61 @@ +// miaoBlog/server/api/posts/deletePost.ts +import DB from 'better-sqlite3'; +import cacheResult from '~/server/utils/cacheRes'; + +function prepareDB() { + const db = new DB('./userData/db/posts.db'); + + const deletePostStmt = db.prepare('DELETE FROM posts WHERE id = ?'); + const deleteContentStmt = db.prepare('DELETE FROM postContent WHERE id = ?'); + const getTagIdStmt = db.prepare('SELECT tag_id FROM posts WHERE id = ?'); + const deleteTagsStmt = db.prepare('DELETE FROM tags WHERE id = ?'); + + return { db, deletePostStmt, deleteContentStmt, getTagIdStmt, deleteTagsStmt }; +} + +export default defineEventHandler(async (event) => { + const { db, deletePostStmt, deleteContentStmt, getTagIdStmt, deleteTagsStmt } = cacheResult(prepareDB)(); + + const body = await readBody(event); + const { id } = body; + + // 检查是否提供了有效的id + if (!id || isNaN(Number(id))) { + db.close(); + return { + code: 400, + msg: '无效的id' + }; + } + + try { + // 开启事务 + db.transaction(() => { + // 先从posts表中删除文章记录 + deletePostStmt.run(Number(id)); + + // 再从postContent表中删除文章内容记录 + deleteContentStmt.run(Number(id)); + + // 查找该文章对应的tag_id + const tagRow: any = getTagIdStmt.get(Number(id)); + if (tagRow && tagRow.tag_id) { + // 如果存在tag_id,从tags表中删除对应的标签记录 + deleteTagsStmt.run(tagRow.tag_id); + } + })(); + + db.close(); + return { + code: 200, + msg: '删除成功' + }; + } catch (error) { + console.error('删除数据时出错:', error); + db.close(); + return { + code: 500, + msg: '服务器内部错误' + }; + } +}); \ No newline at end of file diff --git a/style/default.scss b/style/default.scss index 55a35cd..7bfb1e6 100644 --- a/style/default.scss +++ b/style/default.scss @@ -15,4 +15,8 @@ body { :focus-visible { outline: #15aa8761 auto 1px; +} + +.el-message { + z-index: 70582140 !important; } \ No newline at end of file