diff --git a/api/admin/index.html b/admin/index.html similarity index 100% rename from api/admin/index.html rename to admin/index.html diff --git a/api/admin/package.json b/admin/package.json similarity index 100% rename from api/admin/package.json rename to admin/package.json diff --git a/api/admin/src/App.vue b/admin/src/App.vue similarity index 100% rename from api/admin/src/App.vue rename to admin/src/App.vue diff --git a/api/admin/src/api/auth.js b/admin/src/api/auth.js similarity index 100% rename from api/admin/src/api/auth.js rename to admin/src/api/auth.js diff --git a/api/admin/src/api/category.js b/admin/src/api/category.js similarity index 100% rename from api/admin/src/api/category.js rename to admin/src/api/category.js diff --git a/api/admin/src/api/joke.js b/admin/src/api/joke.js similarity index 100% rename from api/admin/src/api/joke.js rename to admin/src/api/joke.js diff --git a/api/admin/src/api/request.js b/admin/src/api/request.js similarity index 100% rename from api/admin/src/api/request.js rename to admin/src/api/request.js diff --git a/api/admin/src/layout/index.vue b/admin/src/layout/index.vue similarity index 100% rename from api/admin/src/layout/index.vue rename to admin/src/layout/index.vue diff --git a/api/admin/src/main.js b/admin/src/main.js similarity index 100% rename from api/admin/src/main.js rename to admin/src/main.js diff --git a/api/admin/src/router/index.js b/admin/src/router/index.js similarity index 100% rename from api/admin/src/router/index.js rename to admin/src/router/index.js diff --git a/api/admin/src/stores/auth.js b/admin/src/stores/auth.js similarity index 100% rename from api/admin/src/stores/auth.js rename to admin/src/stores/auth.js diff --git a/api/admin/src/stores/joke.js b/admin/src/stores/joke.js similarity index 100% rename from api/admin/src/stores/joke.js rename to admin/src/stores/joke.js diff --git a/api/admin/src/views/category/Crowd.vue b/admin/src/views/category/Crowd.vue similarity index 100% rename from api/admin/src/views/category/Crowd.vue rename to admin/src/views/category/Crowd.vue diff --git a/api/admin/src/views/category/Type.vue b/admin/src/views/category/Type.vue similarity index 100% rename from api/admin/src/views/category/Type.vue rename to admin/src/views/category/Type.vue diff --git a/api/admin/src/views/dashboard/index.vue b/admin/src/views/dashboard/index.vue similarity index 100% rename from api/admin/src/views/dashboard/index.vue rename to admin/src/views/dashboard/index.vue diff --git a/api/admin/src/views/joke/Edit.vue b/admin/src/views/joke/Edit.vue similarity index 100% rename from api/admin/src/views/joke/Edit.vue rename to admin/src/views/joke/Edit.vue diff --git a/api/admin/src/views/joke/List.vue b/admin/src/views/joke/List.vue similarity index 100% rename from api/admin/src/views/joke/List.vue rename to admin/src/views/joke/List.vue diff --git a/api/admin/src/views/login/index.vue b/admin/src/views/login/index.vue similarity index 100% rename from api/admin/src/views/login/index.vue rename to admin/src/views/login/index.vue diff --git a/api/admin/vite.config.js b/admin/vite.config.js similarity index 100% rename from api/admin/vite.config.js rename to admin/vite.config.js diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..38211f1 --- /dev/null +++ b/web/index.html @@ -0,0 +1,12 @@ + + + + + + 笑话大全 + + +
+ + + diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..c1c2883 --- /dev/null +++ b/web/package.json @@ -0,0 +1,21 @@ +{ + "name": "joke-web", + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "vue": "^3.4.0", + "vue-router": "^4.2.5", + "pinia": "^2.1.7", + "axios": "^1.6.0", + "element-plus": "^2.5.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.0", + "vite": "^5.0.0" + } +} diff --git a/web/src/App.vue b/web/src/App.vue new file mode 100644 index 0000000..b95865d --- /dev/null +++ b/web/src/App.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/web/src/api/category.js b/web/src/api/category.js new file mode 100644 index 0000000..79a0206 --- /dev/null +++ b/web/src/api/category.js @@ -0,0 +1,4 @@ +import request from './request' + +export const getTypes = () => request.get('/types') +export const getCrowds = () => request.get('/crowds') diff --git a/web/src/api/joke.js b/web/src/api/joke.js new file mode 100644 index 0000000..7e9e724 --- /dev/null +++ b/web/src/api/joke.js @@ -0,0 +1,6 @@ +import request from './request' + +export const getJokes = params => request.get('/jokes', { params }) +export const getJoke = id => request.get(`/jokes/${id}`) +export const getRandomJoke = () => request.get('/jokes/random') +export const searchJokes = params => request.get('/search', { params }) diff --git a/web/src/api/request.js b/web/src/api/request.js new file mode 100644 index 0000000..1665cfd --- /dev/null +++ b/web/src/api/request.js @@ -0,0 +1,6 @@ +import axios from 'axios' + +export default axios.create({ + baseURL: '/api', + timeout: 10000 +}) diff --git a/web/src/components/Footer.vue b/web/src/components/Footer.vue new file mode 100644 index 0000000..4ce01ae --- /dev/null +++ b/web/src/components/Footer.vue @@ -0,0 +1,15 @@ + + + diff --git a/web/src/components/Header.vue b/web/src/components/Header.vue new file mode 100644 index 0000000..6817db5 --- /dev/null +++ b/web/src/components/Header.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/web/src/main.js b/web/src/main.js new file mode 100644 index 0000000..6760c11 --- /dev/null +++ b/web/src/main.js @@ -0,0 +1,12 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import App from './App.vue' +import router from './router' + +const app = createApp(App) +app.use(createPinia()) +app.use(router) +app.use(ElementPlus) +app.mount('#app') diff --git a/web/src/router/index.js b/web/src/router/index.js new file mode 100644 index 0000000..2e02f6d --- /dev/null +++ b/web/src/router/index.js @@ -0,0 +1,13 @@ +import { createRouter, createWebHistory } from 'vue-router' + +const routes = [ + { path: '/', name: 'Home', component: () => import('@/views/home/index.vue') }, + { path: '/category', name: 'Category', component: () => import('@/views/category/index.vue') }, + { path: '/detail/:id', name: 'Detail', component: () => import('@/views/detail/index.vue') }, + { path: '/search', name: 'Search', component: () => import('@/views/search/index.vue') }, +] + +export default createRouter({ + history: createWebHistory(), + routes +}) diff --git a/web/src/stores/joke.js b/web/src/stores/joke.js new file mode 100644 index 0000000..166e946 --- /dev/null +++ b/web/src/stores/joke.js @@ -0,0 +1,25 @@ +import { defineStore } from 'pinia' +import { getJokes, getRandomJoke } from '@/api/joke' + +export const useJokeStore = defineStore('joke', { + state: () => ({ + jokes: [], + total: 0, + loading: false + }), + actions: { + async fetchJokes(params) { + this.loading = true + try { + const res = await getJokes(params) + this.jokes = res.items + this.total = res.total + } finally { + this.loading = false + } + }, + async fetchRandom() { + return await getRandomJoke() + } + } +}) diff --git a/web/src/views/category/index.vue b/web/src/views/category/index.vue new file mode 100644 index 0000000..6b5cdc1 --- /dev/null +++ b/web/src/views/category/index.vue @@ -0,0 +1,72 @@ + + + + + \ No newline at end of file diff --git a/web/src/views/detail/index.vue b/web/src/views/detail/index.vue new file mode 100644 index 0000000..9062ada --- /dev/null +++ b/web/src/views/detail/index.vue @@ -0,0 +1,71 @@ + + + + + \ No newline at end of file diff --git a/web/src/views/home/components/JokeCard.vue b/web/src/views/home/components/JokeCard.vue new file mode 100644 index 0000000..20a1e84 --- /dev/null +++ b/web/src/views/home/components/JokeCard.vue @@ -0,0 +1,61 @@ + + + + + \ No newline at end of file diff --git a/web/src/views/home/index.vue b/web/src/views/home/index.vue new file mode 100644 index 0000000..9d60d02 --- /dev/null +++ b/web/src/views/home/index.vue @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/web/src/views/search/index.vue b/web/src/views/search/index.vue new file mode 100644 index 0000000..d5c3f50 --- /dev/null +++ b/web/src/views/search/index.vue @@ -0,0 +1,67 @@ + + + + + \ No newline at end of file diff --git a/web/vite.config.js b/web/vite.config.js new file mode 100644 index 0000000..3bd21ee --- /dev/null +++ b/web/vite.config.js @@ -0,0 +1,21 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import path from 'path' + +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': path.resolve(__dirname, './src') + } + }, + server: { + port: 3000, + proxy: { + '/api': { + target: 'http://localhost:8000', + changeOrigin: true + } + } + } +})