diff --git a/.gitignore b/.gitignore index 8ee54e8..000789d 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ pnpm-debug.log* lerna-debug.log* node_modules +package-lock.json .DS_Store dist dist-ssr diff --git a/package-lock.json b/package-lock.json index a6c025f..939e732 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "light-blog-frontend", + "name": "light-blog-admin", "version": "0.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "light-blog-frontend", + "name": "light-blog-admin", "version": "0.1.1", "dependencies": { "axios": "~1.7.2", @@ -15,7 +15,8 @@ "pinia": "~2.1.7", "pinia-plugin-persistedstate": "~3.2.1", "vue": "~3.4.21", - "vue-router": "~4.3.0" + "vue-router": "~4.3.0", + "wangeditor": "^4.7.15" }, "devDependencies": { "@rushstack/eslint-patch": "~1.8.0", @@ -44,6 +45,29 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/runtime": { + "version": "7.24.6", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.24.6.tgz", + "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.24.6", + "resolved": "https://registry.npmmirror.com/@babel/runtime-corejs3/-/runtime-corejs3-7.24.6.tgz", + "integrity": "sha512-tbC3o8uHK9xMgMsvUm9qGqxVpbv6yborMBLbDteHIc7JDNHsTV0vDMQ5j1O1NXvO+BDELtL9KgoWYaUVIVGt8w==", + "dependencies": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@ctrl/tinycolor": { "version": "3.6.1", "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", @@ -1306,6 +1330,16 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/core-js-pure": { + "version": "3.37.1", + "resolved": "https://registry.npmmirror.com/core-js-pure/-/core-js-pure-3.37.1.tgz", + "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2586,6 +2620,11 @@ "node": ">=8.10.0" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", @@ -2867,8 +2906,7 @@ "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/type-check": { "version": "0.4.0", @@ -3022,6 +3060,16 @@ "vue": "^3.2.0" } }, + "node_modules/wangeditor": { + "version": "4.7.15", + "resolved": "https://registry.npmmirror.com/wangeditor/-/wangeditor-4.7.15.tgz", + "integrity": "sha512-aPTdREd8BxXVyJ5MI+LU83FQ7u1EPd341iXIorRNYSOvoimNoZ4nPg+yn3FGbB93/owEa6buLw8wdhYnMCJQLg==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "@babel/runtime-corejs3": "^7.11.2", + "tslib": "^2.1.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index d2f1200..e6ee6b5 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,8 @@ "pinia": "~2.1.7", "pinia-plugin-persistedstate": "~3.2.1", "vue": "~3.4.21", - "vue-router": "~4.3.0" + "vue-router": "~4.3.0", + "wangeditor": "^4.7.15" }, "devDependencies": { "@rushstack/eslint-patch": "~1.8.0", diff --git a/src/api/content/content.js b/src/api/content/content.js index 5af00b4..26bdbb7 100644 --- a/src/api/content/content.js +++ b/src/api/content/content.js @@ -16,6 +16,17 @@ export const getContentList = (data = { page: 1, size: 10, sort: 'asc' }) => { }) } +/** + * 获取分类列表 + * @returns + */ +export const getCategoryList = () => { + return http({ + url: '/admin/category', + method: 'get' + }) +} + /** * 删除此 id 的内容 * @param {String} id @@ -34,12 +45,35 @@ export const deleteOneById = (id = '') => { /** * 获取内容详情 */ - -export const getContentDetailBy_uidOrTitle = (data = {}) => { - if (!data._uid && !data.title) return false +export const getContentDetailByIdOrTitle = (data = {}) => { + if (!data.id && !data.title) return false return http({ url: '/admin/content', method: 'get', params: data }) } + +/** + * 更新内容 + */ +export const updateContent = (data = {}) => { + if (!data.id) return false + return http({ + url: '/admin/content', + method: 'put', + data: data + }) +} + +/** + * 更新内容 + */ +export const createContent = (data = {}) => { + if (!data.title || !data.content || !data.summary || !data.category) return false + return http({ + url: '/admin/content', + method: 'post', + data: data + }) +} diff --git a/src/components/Editor/index.js b/src/components/Editor/index.js deleted file mode 100644 index 6d8cce0..0000000 --- a/src/components/Editor/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import Editor from './src/Editor.vue' - -export { Editor } diff --git a/src/components/Editor/src/Editor.vue b/src/components/Editor/src/Editor.vue deleted file mode 100644 index e69de29..0000000 diff --git a/src/components/my-editor/index.js b/src/components/my-editor/index.js new file mode 100644 index 0000000..f0dd5bf --- /dev/null +++ b/src/components/my-editor/index.js @@ -0,0 +1,3 @@ +import myEditor from './src/my-editor.vue' + +export { myEditor } diff --git a/src/components/my-editor/src/my-editor.vue b/src/components/my-editor/src/my-editor.vue new file mode 100644 index 0000000..d38f82c --- /dev/null +++ b/src/components/my-editor/src/my-editor.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/src/locale/index.js b/src/locale/index.js new file mode 100644 index 0000000..26e722f --- /dev/null +++ b/src/locale/index.js @@ -0,0 +1,3 @@ +import zhCn from 'element-plus/es/locale/lang/zh-cn' + +export { zhCn } diff --git a/src/main.js b/src/main.js index 50ec89d..8f480af 100644 --- a/src/main.js +++ b/src/main.js @@ -8,6 +8,7 @@ import router from './router' import { useStore } from './stores' import ElementPlus from 'element-plus' + import 'element-plus/dist/index.css' const app = createApp(App) diff --git a/src/utils/request.js b/src/utils/request.js index d221ec3..44dffaf 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -5,6 +5,8 @@ const API_URL = import.meta.env.VITE_APP_API_BASE_URL || '/api' import { useLoginStore } from '@/stores/user/loginStore' +import { useRouter } from 'vue-router' + const http = axios.create({ baseURL: API_URL, timeout: 1000 * 15, @@ -57,6 +59,12 @@ http.interceptors.response.use( return response.data }, (error) => { + const { clearLoginInfo } = useLoginStore() + if (error.response.status === 401) { + const router = useRouter() + clearLoginInfo() + router.push({ name: 'login' }) + } ElNotification({ title: '请求错误', message: `${error.response.status}-${!error.response.data.msg ? error.response.statusText : error.response.data.msg}`, diff --git a/src/views/content/content.vue b/src/views/content/content.vue index a582265..22fa7c2 100644 --- a/src/views/content/content.vue +++ b/src/views/content/content.vue @@ -1,24 +1,73 @@ diff --git a/src/views/home/components/footerBar.vue b/src/views/home/components/footerBar.vue index cd7cf04..b4273c0 100644 --- a/src/views/home/components/footerBar.vue +++ b/src/views/home/components/footerBar.vue @@ -23,5 +23,8 @@ const beian = '蜀ICP备2023007248号-2' flex-direction: column; justify-content: center; align-items: center; + > div { + transform: scale(0.84); + } } diff --git a/src/views/home/home.vue b/src/views/home/home.vue index 081e67a..b213f27 100644 --- a/src/views/home/home.vue +++ b/src/views/home/home.vue @@ -1,11 +1,13 @@ diff --git a/vite.config.js b/vite.config.js index 3b61c2e..85b130b 100644 --- a/vite.config.js +++ b/vite.config.js @@ -59,6 +59,11 @@ export default defineConfig(({ mode }) => { target: 'http://localhost:8081/', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '') + }, + '/static': { + target: 'http://localhost:8081/static', + changeOrigin: true, + rewrite: (path) => path.replace(/^\/static/, '') } } }