diff --git a/Server/src/APIs/BlogLike.ts b/Server/src/APIs/BlogLike.ts new file mode 100644 index 0000000..cafba3f --- /dev/null +++ b/Server/src/APIs/BlogLike.ts @@ -0,0 +1,34 @@ +import { API } from "../Plugs/API/API"; +import ServerStdResponse from "../ServerStdResponse"; +import MySQLConnection from '../Plugs/MySQLConnection' +import { Buffer } from 'buffer'; +import axios from "axios"; + + +// 点赞 +class BlogLike extends API { + constructor() { + super('POST', '/blogLike'); + } + private defaultAccessLevel = 6; + + public async onRequset(data: any, res: any) { + let { bloguuid } = data; + if (!bloguuid || bloguuid.length != 32) { + return res.json(ServerStdResponse.INVALID_PARAMS); + } + + let blogLikeRes = await MySQLConnection.execute('UPDATE blog SET like_count = like_count + 1 WHERE access_level > ? AND uuid = ? ', [this.defaultAccessLevel, bloguuid]); + if (!blogLikeRes) { + this.logger.error('点赞博客时,数据库发生错误'); + return res.json(ServerStdResponse.SERVER_ERROR); + } + if (blogLikeRes.affectedRows != 1) { + this.logger.warn('查询的博客不存在或不可见', bloguuid); + return res.json(ServerStdResponse.BLOG.NOTFOUND); + } + return res.json(ServerStdResponse.OK); + } +} + +export default BlogLike; \ No newline at end of file diff --git a/Server/src/Server/Server.ts b/Server/src/Server/Server.ts index 714c1c1..a8415b2 100644 --- a/Server/src/Server/Server.ts +++ b/Server/src/Server/Server.ts @@ -6,6 +6,7 @@ import GetTest from "../APIs/GetTest"; import GetResourceList from "../APIs/GetResourceList"; import GetBlogList from "../APIs/GetBlogList"; import GetBlogContent from "../APIs/GetBlogContent"; +import BlogLike from "../APIs/BlogLike"; class Server { private logger = new Logger('Server'); @@ -22,6 +23,7 @@ class Server { this.apiLoader.add(GetResourceList); this.apiLoader.add(GetBlogList); this.apiLoader.add(GetBlogContent); + this.apiLoader.add(BlogLike); this.apiLoader.start(config.apiPort); } diff --git a/tonecn/components.d.ts b/tonecn/components.d.ts index 395436e..1ab5935 100644 --- a/tonecn/components.d.ts +++ b/tonecn/components.d.ts @@ -8,8 +8,10 @@ export {} declare module 'vue' { export interface GlobalComponents { Agreement: typeof import('./src/components/Common/Agreement.vue')['default'] + BlogContentToolBar: typeof import('./src/components/Blog/BlogContentToolBar.vue')['default'] BlogToolBar: typeof import('./src/components/Blog/BlogToolBar.vue')['default'] ElButton: typeof import('element-plus/es')['ElButton'] + ElDialog: typeof import('element-plus/es')['ElDialog'] ElEmpty: typeof import('element-plus/es')['ElEmpty'] ElInput: typeof import('element-plus/es')['ElInput'] ElPopover: typeof import('element-plus/es')['ElPopover'] diff --git a/tonecn/package.json b/tonecn/package.json index 4ee3908..9efc0ff 100644 --- a/tonecn/package.json +++ b/tonecn/package.json @@ -11,6 +11,7 @@ "type-check": "vue-tsc --build --force" }, "dependencies": { + "@element-plus/icons-vue": "^2.3.1", "axios": "^1.6.8", "highlight.js": "^11.10.0", "marked": "^14.1.0", diff --git a/tonecn/pnpm-lock.yaml b/tonecn/pnpm-lock.yaml index 9f48d65..5cee5bb 100644 --- a/tonecn/pnpm-lock.yaml +++ b/tonecn/pnpm-lock.yaml @@ -5,6 +5,9 @@ settings: excludeLinksFromLockfile: false dependencies: + '@element-plus/icons-vue': + specifier: ^2.3.1 + version: 2.3.1(vue@3.4.27) axios: specifier: ^1.6.8 version: 1.6.8 @@ -99,7 +102,6 @@ packages: vue: ^3.2.0 dependencies: vue: 3.4.27(typescript@5.4.5) - dev: true /@esbuild/aix-ppc64@0.20.2: resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} diff --git a/tonecn/src/components/Blog/BlogContentToolBar.vue b/tonecn/src/components/Blog/BlogContentToolBar.vue new file mode 100644 index 0000000..49f38ed --- /dev/null +++ b/tonecn/src/components/Blog/BlogContentToolBar.vue @@ -0,0 +1,107 @@ + + + \ No newline at end of file diff --git a/tonecn/src/components/Blog/BlogToolBar.vue b/tonecn/src/components/Blog/BlogToolBar.vue deleted file mode 100644 index 58020af..0000000 --- a/tonecn/src/components/Blog/BlogToolBar.vue +++ /dev/null @@ -1,201 +0,0 @@ - - - \ No newline at end of file diff --git a/tonecn/src/views/BlogContent.vue b/tonecn/src/views/BlogContent.vue index 89be949..63e65b4 100644 --- a/tonecn/src/views/BlogContent.vue +++ b/tonecn/src/views/BlogContent.vue @@ -7,6 +7,7 @@ import { Marked } from 'marked'; import { markedHighlight } from "marked-highlight"; import hljs from 'highlight.js'; import "highlight.js/styles/xcode.css"; +import BlogContentToolBar from '@/components/Blog/BlogContentToolBar.vue'; const loadStatus = ref(0);// 0加载中 -1加载失败 -2文章不存在或不可见 1加载成功 const route = useRoute(); @@ -48,22 +49,6 @@ onMounted(async () => { console.error('请求博客内容发生错误 ', error); loadStatus.value = -1; } - - // 处理iframe元素 - let iframes = document.querySelectorAll('iframe'); - for (let i = 0; i < iframes.length; i++) { - let iframe = iframes[i]; - // 创建一个新的div元素 - let wrapperDiv = document.createElement('div'); - // 设置新div的类名 - wrapperDiv.className = 'video-container'; - // 获取iframe的父元素 - let parent = iframe.parentNode; - // 将新的div插入到iframe之前 - parent?.insertBefore(wrapperDiv, iframe); - // 将iframe移动到新创建的div内部 - wrapperDiv.appendChild(iframe); - } })