diff --git a/package.json b/package.json index 38a07b5..2a88bb7 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,13 @@ "@codemirror/theme-one-dark": "^6.1.2", "@codemirror/view": "^6.36.4", "@element-plus/icons-vue": "^2.3.0", + "@fortawesome/fontawesome-svg-core": "^6.7.2", + "@fortawesome/free-solid-svg-icons": "^6.7.2", + "@fortawesome/vue-fontawesome": "^3.0.8", + "@iconify/vue": "^4.3.0", "@monaco-editor/loader": "^1.5.0", + "@vicons/ionicons5": "^0.13.0", + "@vueuse/core": "^13.0.0", "animate.css": "^4.1.1", "axios": "^1.6.0", "dayjs": "^1.11.0", @@ -28,13 +34,18 @@ "file-saver": "^2.0.5", "js-cookie": "^3.0.5", "monaco-editor": "^0.30.1", + "naive-ui": "^2.41.0", "pinia": "^2.1.0", + "qs": "^6.14.0", "three": "^0.160.0", + "vfonts": "^0.0.3", + "vtron": "^0.7.8", "vue": "^3.4.0", "vue-codemirror": "^6.1.1", "vue-echarts": "^6.6.0", "vue-monaco-editor": "^0.0.19", "vue-router": "^4.2.0", + "vue-windows": "^0.3.0", "xlsx": "^0.18.5" }, "devDependencies": { diff --git a/src/api/course.js b/src/api/course.js index efc4b9a..969a9e2 100644 --- a/src/api/course.js +++ b/src/api/course.js @@ -6,6 +6,7 @@ export function getCourses(params) { } export function getCoursesMethod(params) { + console.log(params) return get('/bs/courses', params) } diff --git a/src/api/exam/exam.js b/src/api/exam/exam.js index 3f610b1..5424ca6 100644 --- a/src/api/exam/exam.js +++ b/src/api/exam/exam.js @@ -5,7 +5,7 @@ import { post } from '@/utils/request' * @param data */ export function fetchDetail(id) { - return post('/exam/api/exam/exam/detail', { id: id }) + return post('/api/common/exam/api/exam/exam/detail', { id: id }) } /** diff --git a/src/api/shop/index.js b/src/api/shop/index.js new file mode 100644 index 0000000..53448fd --- /dev/null +++ b/src/api/shop/index.js @@ -0,0 +1,21 @@ +import { get, post } from '@/utils/request' + +// 获取用户积分 +export function getUserPoints() { + return get('/api/shop/points') +} + +// 获取积分历史 +export function getPointsHistory() { + return get('/api/shop/points/history') +} + +// 获取商品列表 +export function getGoodsList() { + return get('/api/shop/goods') +} + +// 兑换商品 +export function exchangeGoods(goodsId) { + return post('/api/shop/exchange', { goodsId }) +} \ No newline at end of file diff --git a/src/api/test.js b/src/api/test.js new file mode 100644 index 0000000..e4ab62b --- /dev/null +++ b/src/api/test.js @@ -0,0 +1,25 @@ +import {postRequest, post, get, postRequestJSON, getRequest, getRequestWithqs} from "@/utils/request.js"; + + + +export const testPostUseParamMethod = (param) => { + return postRequest("/api/common/testPostUseParam", param) +} + +export const testPostUseBodyMethod = (data) =>{ + return post("/api/common/testPostUseBody", data) +} + +export const testGetParamMethod = (param) =>{ + return get("/api/common/testGetParam", param) +} + +export const testGetParamMethodList = (param) =>{ + return getRequest("/api/common/testGetParam", param) +} + +export const testGetParamMethodqs = (param) =>{ + return getRequestWithqs("/api/common/testGetParam", param) +} + + diff --git a/src/assets/logo.png b/src/assets/logo.png index 00a1185..9ce3cda 100644 Binary files a/src/assets/logo.png and b/src/assets/logo.png differ diff --git a/src/components/Debugger/index.vue b/src/components/Debugger/index.vue new file mode 100644 index 0000000..d37bdc8 --- /dev/null +++ b/src/components/Debugger/index.vue @@ -0,0 +1,393 @@ + + + + + \ No newline at end of file diff --git a/src/components/ECharts/index.vue b/src/components/ECharts/index.vue new file mode 100644 index 0000000..cadb48b --- /dev/null +++ b/src/components/ECharts/index.vue @@ -0,0 +1,236 @@ + + + + + \ No newline at end of file diff --git a/src/main.js b/src/main.js index 6d7e6b8..c660ddf 100644 --- a/src/main.js +++ b/src/main.js @@ -6,9 +6,7 @@ import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' import './styles/element.scss' import * as ElementPlusIconsVue from '@element-plus/icons-vue' -// 暂时注释掉这两行,直到我们创建了相应的文件 -// import 'animate.css' -// import './assets/styles/main.scss' +import 'vtron/distlib/style.css'; const app = createApp(App) @@ -21,4 +19,4 @@ app.use(createPinia()) app.use(router) app.use(ElementPlus) -app.mount('#app') \ No newline at end of file +app.mount('#app') diff --git a/src/router/index.js b/src/router/index.js index 8d62c73..1459371 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -96,6 +96,11 @@ const routes = [ name: 'ActivityCenter', component: () => import('../views/activity/ActivityCenter.vue') }, + { + path: '/test', + name: 'TestCenter', + component: () => import('../views/activity/TestCenter.vue') + }, { path: '/mall', name: 'Mall', diff --git a/src/utils/request.js b/src/utils/request.js index 728bbd9..5a8de7f 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -1,12 +1,13 @@ import axios from 'axios' import { ElMessage, ElMessageBox } from 'element-plus' import { useUserStore } from '../stores/user' +import qs from 'qs'; // 创建 axios 实例 const service = axios.create({ // baseURL: import.meta.env.VITE_API_BASE_URL || '/api', // 从环境变量获取 API 基础 URL //baseURL: 'http://localhost:8101', // 从环境变量获取 API 基础 URL - baseURL: 'http://localhost:8101', // 从环境变量获取 API 基础 URL + baseURL: 'http://localhost:8084', // 从环境变量获取 API 基础 URL timeout: 15000, // 请求超时时间 }) @@ -206,6 +207,65 @@ export function del(url, params) { }) } +// 封装 `@RequestParam` 方式的 POST 请求 +export function postRequest(url, params) { + const formData = new FormData(); + for (const key in params) { + console.log(params[key]); + formData.append(key, params[key]); + } + for (let pair of formData.entries()) { + console.log(pair[0] + ': ' + pair[1]); + } + return service({ + url, + method: 'post', + data: formData, + }); +} + + +export function getRequest(url, params) { + const searchParams = new URLSearchParams(); + for (const key in params) { + if (Array.isArray(params[key])) { + params[key].forEach(item => { + searchParams.append(key, item); // 注意这里直接使用 key,不加 [] + }); + } else { + searchParams.append(key, params[key]); + } + } + return service({ + url: `${url}?${searchParams.toString()}`, + method: 'get' + }); +} + + +export function getRequestWithqs(url, params) { + return service({ + url, + method: 'get', + params, + paramsSerializer: params => { + // 设置 arrayFormat 为 'repeat' 表示 ids=1&ids=2&ids=3 + // 设置 arrayFormat 为 'comma' 表示 ds=1%2C2%2C3 + return qs.stringify(params, { arrayFormat: 'repeat' }); + } + }); +} + + +export function postRequestJSON(url, params) { + return service({ + url, + method: 'post', + data: JSON.stringify(params), // 发送 JSON + headers: { 'Content-Type': 'application/json' } + }); +} + // 封装上传文件的请求 export function upload(url, file, onUploadProgress) { const formData = new FormData() diff --git a/src/views/Home.vue b/src/views/Home.vue index aba4b03..24f4bc2 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -170,11 +170,18 @@ const features = [ const popularCourses = ref([]) + + const getCourses = async () => { - var axiosResponse = await getCoursesMethod(); + + const params = { + page: 1, // 当前页码 + size: 4, // 每页数量 + }; + + var axiosResponse = await getCoursesMethod(params); console.log(axiosResponse) popularCourses.value = axiosResponse.data - } const viewCourse = (courseId) => { diff --git a/src/views/activity/ActivityCenter.vue b/src/views/activity/ActivityCenter.vue index 690f7b1..26f1575 100644 --- a/src/views/activity/ActivityCenter.vue +++ b/src/views/activity/ActivityCenter.vue @@ -1,11 +1,174 @@ + \ No newline at end of file + diff --git a/src/views/activity/TestCenter.vue b/src/views/activity/TestCenter.vue new file mode 100644 index 0000000..bf6ab7d --- /dev/null +++ b/src/views/activity/TestCenter.vue @@ -0,0 +1,462 @@ + + + + + diff --git a/src/views/announcement/Announcement.vue b/src/views/announcement/Announcement.vue index 08e8cd5..1c0b3a3 100644 --- a/src/views/announcement/Announcement.vue +++ b/src/views/announcement/Announcement.vue @@ -7,10 +7,9 @@ - \ No newline at end of file + diff --git a/src/views/course/CourseCenter.vue b/src/views/course/CourseCenter.vue index 9157510..035eb1c 100644 --- a/src/views/course/CourseCenter.vue +++ b/src/views/course/CourseCenter.vue @@ -204,7 +204,7 @@ const courses = ref([ id: 1, title: 'C++面向对象编程精讲', description: '深入理解C++面向对象编程思想,掌握核心概念和实践技巧', - coverImg: '/src/assets/images/course-covers/cpp.jpg', + coverImg: 'http://localhost:9000/file/c6d07740-7306-4fc1-b1f8-670684a73ed9/img/31c258e7-3fd4-402c-8f2f-c9455c6cfdaf.png', teacher: '张教授', studentCount: 1234, rating: 4.8, diff --git a/src/views/course/CourseDetail.vue b/src/views/course/CourseDetail.vue index 7b73332..6bc5155 100644 --- a/src/views/course/CourseDetail.vue +++ b/src/views/course/CourseDetail.vue @@ -252,7 +252,7 @@ const courseData = ref({ docCount: 5, totalDuration: '24小时', enrolled: false, - coverImg: 'http://example.com/course-cover.jpg', + coverImg: 'http://localhost:9000/file/c6d07740-7306-4fc1-b1f8-670684a73ed9/img/31c258e7-3fd4-402c-8f2f-c9455c6cfdaf.png', chapters: [ { id: 1, diff --git a/src/views/oj/shop/GoodsDetail.vue b/src/views/oj/shop/GoodsDetail.vue new file mode 100644 index 0000000..b3e2051 --- /dev/null +++ b/src/views/oj/shop/GoodsDetail.vue @@ -0,0 +1,23 @@ + \ No newline at end of file diff --git a/src/views/oj/shop/Shop.vue b/src/views/oj/shop/Shop.vue new file mode 100644 index 0000000..ec55746 --- /dev/null +++ b/src/views/oj/shop/Shop.vue @@ -0,0 +1,203 @@ + + + + + \ No newline at end of file diff --git a/src/views/paper/exam/list.vue b/src/views/paper/exam/list.vue index 221cc65..280fb73 100644 --- a/src/views/paper/exam/list.vue +++ b/src/views/paper/exam/list.vue @@ -139,7 +139,7 @@ export default { // 可批量操作 multi: false, // 列表请求URL - listUrl: '/exam/api/exam/exam/online-paging' + listUrl: '/api/common/exam/api/exam/exam/online-paging' } } },