commit 4eec4841a58173aa7219295eaa34258e66f1464c Author: qubiaobiao <3294694717@qq.com> Date: Fri Mar 27 17:41:29 2026 +0800 北斗应用技术培训考试题库 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8ee54e8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/README.md b/README.md new file mode 100644 index 0000000..511a442 --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# open-map-assistant + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Compile and Minify for Production + +```sh +npm run build +``` diff --git a/index.html b/index.html new file mode 100644 index 0000000..3fde5e5 --- /dev/null +++ b/index.html @@ -0,0 +1,49 @@ + + + + + + + 题库 + + + +
+ + + \ No newline at end of file diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..5a1f2d2 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..20abf94 --- /dev/null +++ b/package.json @@ -0,0 +1,36 @@ +{ + "name": "bd-training-exam-topic", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --port=7023", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "axios": "^1.6.8", + "bd-training-exam-topic": "file:", + "core-js": "^3.37.0", + "crypto-js": "^4.2.0", + "element-plus": "^2.7.2", + "fingerprintjs2": "^2.1.4", + "moment": "^2.30.1", + "pinia": "^2.1.7", + "pinia-plugin-persist": "^1.0.0", + "vue": "^3.4.21", + "vue-i18n": "^9.13.1", + "vue-router": "^4.3.0", + "zipson": "^0.2.12" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.4", + "autoprefixer": "^10.4.19", + "postcss": "^8.4.38", + "tailwindcss": "^3.4.3", + "unplugin-auto-import": "^0.17.5", + "unplugin-vue-components": "^0.27.0", + "vite": "^5.2.8" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..6ef5c58 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {} + } +} \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..1b51f8f Binary files /dev/null and b/public/favicon.ico differ diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..206df00 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/src/api/index.js b/src/api/index.js new file mode 100644 index 0000000..a18f7c6 --- /dev/null +++ b/src/api/index.js @@ -0,0 +1,63 @@ +import axios from "axios"; +import router from "../router"; + +// 添加请求拦截器 +axios.interceptors.request.use(function (config) { + // 在发送请求之前做些什么 + if (localStorage.data && localStorage.data !== "" && localStorage.data !== null && localStorage.data !== undefined && localStorage.data !== NaN) { + if (config.headers) { + config.headers.authorization = localStorage.data; + } + } + return config; +}, function (error) { + // 对请求错误做些什么 + return Promise.reject(error); +}); + +// 转到登录页面 +const toLogin = () => { + // localStorage.clear(); + router.push({ path: '/initialService' }); +}; + +// 添加响应拦截器 +let result = true; +axios.interceptors.response.use(function (response) { + // 2xx 范围内的状态码都会触发该函数。 + // 对响应数据做点什么 + if (response.data.code === 200) { + if ("data" in response.data) { + localStorage.setItem("data", response.data.data); + } + } + if (response.data.code === 401 && result) { + result = false; + setTimeout(() => { + result = true; + }, 1000); + toLogin(); + } + return response; +}, function (error) { + // 超出 2xx 范围的状态码都会触发该函数。 + // 对响应错误做点什么 + return Promise.reject(error); +}); + +export default { + get(url, query = {}) { + return axios.get(url, { + params: query + }); + }, + post(url, body) { + return axios.post(url, body); + }, + put(url, body) { + return axios.put(url, body); + }, + del(url) { + return axios.delete(url); + }, +} \ No newline at end of file diff --git a/src/api/url.js b/src/api/url.js new file mode 100644 index 0000000..7abf578 --- /dev/null +++ b/src/api/url.js @@ -0,0 +1,14 @@ +export default { + // 题库登录接口 + login: "/bdTrainingExamTopic/login", + // 获取题库登录状态接口 + loginStatus: "/bdTrainingExamTopic/loginStatus", + // 获取单选题接口 + radio: "/bdTrainingExamTopic/radio", + // 获取多选题接口 + multiple: "/bdTrainingExamTopic/multiple", + // 获取判断题接口 + judgment: "/bdTrainingExamTopic/judgment", + // 获取问答题接口 + interlocution: "/bdTrainingExamTopic/interlocution", +} \ No newline at end of file diff --git a/src/assets/bdjy.png b/src/assets/bdjy.png new file mode 100644 index 0000000..0ec3c35 Binary files /dev/null and b/src/assets/bdjy.png differ diff --git a/src/assets/bdjyLogo.png b/src/assets/bdjyLogo.png new file mode 100644 index 0000000..f437e49 Binary files /dev/null and b/src/assets/bdjyLogo.png differ diff --git a/src/assets/bdqhLogo.png b/src/assets/bdqhLogo.png new file mode 100644 index 0000000..ee9c6bd Binary files /dev/null and b/src/assets/bdqhLogo.png differ diff --git a/src/assets/bg.jpg b/src/assets/bg.jpg new file mode 100644 index 0000000..a0c96e4 Binary files /dev/null and b/src/assets/bg.jpg differ diff --git a/src/assets/certificate.jpg b/src/assets/certificate.jpg new file mode 100644 index 0000000..0d5c60b Binary files /dev/null and b/src/assets/certificate.jpg differ diff --git a/src/assets/default.png b/src/assets/default.png new file mode 100644 index 0000000..91ba9e6 Binary files /dev/null and b/src/assets/default.png differ diff --git a/src/assets/exam.jpg b/src/assets/exam.jpg new file mode 100644 index 0000000..bc3da51 Binary files /dev/null and b/src/assets/exam.jpg differ diff --git a/src/assets/favicon.ico b/src/assets/favicon.ico new file mode 100644 index 0000000..1b51f8f Binary files /dev/null and b/src/assets/favicon.ico differ diff --git a/src/assets/img/BDThemeLesson.jpg b/src/assets/img/BDThemeLesson.jpg new file mode 100644 index 0000000..4e02fc1 Binary files /dev/null and b/src/assets/img/BDThemeLesson.jpg differ diff --git a/src/assets/img/comprehensivePracticalActivities.jpg b/src/assets/img/comprehensivePracticalActivities.jpg new file mode 100644 index 0000000..f141db6 Binary files /dev/null and b/src/assets/img/comprehensivePracticalActivities.jpg differ diff --git a/src/assets/img/correctExample.png b/src/assets/img/correctExample.png new file mode 100644 index 0000000..9af852d Binary files /dev/null and b/src/assets/img/correctExample.png differ diff --git a/src/assets/img/ephemeris_search.jpg b/src/assets/img/ephemeris_search.jpg new file mode 100644 index 0000000..97b31de Binary files /dev/null and b/src/assets/img/ephemeris_search.jpg differ diff --git a/src/assets/img/errorsExample.png b/src/assets/img/errorsExample.png new file mode 100644 index 0000000..8fdfd6a Binary files /dev/null and b/src/assets/img/errorsExample.png differ diff --git a/src/assets/img/interferenceSimulation.png b/src/assets/img/interferenceSimulation.png new file mode 100644 index 0000000..ef4d111 Binary files /dev/null and b/src/assets/img/interferenceSimulation.png differ diff --git a/src/assets/img/mapTheCampus.jpg b/src/assets/img/mapTheCampus.jpg new file mode 100644 index 0000000..060d3ea Binary files /dev/null and b/src/assets/img/mapTheCampus.jpg differ diff --git a/src/assets/img/nmea0183-thumbnail.jpg b/src/assets/img/nmea0183-thumbnail.jpg new file mode 100644 index 0000000..336d2e9 Binary files /dev/null and b/src/assets/img/nmea0183-thumbnail.jpg differ diff --git a/src/assets/img/tdt-thumbnail.jpg b/src/assets/img/tdt-thumbnail.jpg new file mode 100644 index 0000000..4ab3dcd Binary files /dev/null and b/src/assets/img/tdt-thumbnail.jpg differ diff --git a/src/assets/img/trajectory.jpg b/src/assets/img/trajectory.jpg new file mode 100644 index 0000000..ab682d4 Binary files /dev/null and b/src/assets/img/trajectory.jpg differ diff --git a/src/assets/logo.png b/src/assets/logo.png new file mode 100644 index 0000000..ee9c6bd Binary files /dev/null and b/src/assets/logo.png differ diff --git a/src/assets/logo.svg b/src/assets/logo.svg new file mode 100644 index 0000000..7565660 --- /dev/null +++ b/src/assets/logo.svg @@ -0,0 +1 @@ + diff --git a/src/assets/main.css b/src/assets/main.css new file mode 100644 index 0000000..2c350cf --- /dev/null +++ b/src/assets/main.css @@ -0,0 +1,9 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer components { + .w-h-full { + @apply w-full h-full m-0 p-0 overflow-hidden; + } +} \ No newline at end of file diff --git a/src/assets/qrcode.jpg b/src/assets/qrcode.jpg new file mode 100644 index 0000000..1ca11ac Binary files /dev/null and b/src/assets/qrcode.jpg differ diff --git a/src/assets/training.jpg b/src/assets/training.jpg new file mode 100644 index 0000000..b3e58be Binary files /dev/null and b/src/assets/training.jpg differ diff --git a/src/components/database/interlocution.vue b/src/components/database/interlocution.vue new file mode 100644 index 0000000..1b0b777 --- /dev/null +++ b/src/components/database/interlocution.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/components/database/judgment.vue b/src/components/database/judgment.vue new file mode 100644 index 0000000..8ed2c46 --- /dev/null +++ b/src/components/database/judgment.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/components/database/multiple.vue b/src/components/database/multiple.vue new file mode 100644 index 0000000..30f9241 --- /dev/null +++ b/src/components/database/multiple.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/components/database/radio.vue b/src/components/database/radio.vue new file mode 100644 index 0000000..4897da0 --- /dev/null +++ b/src/components/database/radio.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/components/operate/jump.vue b/src/components/operate/jump.vue new file mode 100644 index 0000000..5fdce56 --- /dev/null +++ b/src/components/operate/jump.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/src/components/operate/page.vue b/src/components/operate/page.vue new file mode 100644 index 0000000..d6c762b --- /dev/null +++ b/src/components/operate/page.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/src/components/page/login.vue b/src/components/page/login.vue new file mode 100644 index 0000000..0a1387c --- /dev/null +++ b/src/components/page/login.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/src/components/page/main.vue b/src/components/page/main.vue new file mode 100644 index 0000000..babbedc --- /dev/null +++ b/src/components/page/main.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/components/topic/interlocution.vue b/src/components/topic/interlocution.vue new file mode 100644 index 0000000..e9d43d2 --- /dev/null +++ b/src/components/topic/interlocution.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/src/components/topic/judgment.vue b/src/components/topic/judgment.vue new file mode 100644 index 0000000..1b36a05 --- /dev/null +++ b/src/components/topic/judgment.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/src/components/topic/multiple.vue b/src/components/topic/multiple.vue new file mode 100644 index 0000000..1b250fc --- /dev/null +++ b/src/components/topic/multiple.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/components/topic/radio.vue b/src/components/topic/radio.vue new file mode 100644 index 0000000..e9595a9 --- /dev/null +++ b/src/components/topic/radio.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..5233019 --- /dev/null +++ b/src/main.js @@ -0,0 +1,23 @@ +import './assets/main.css'; + +import { createApp } from 'vue'; +import { createPinia } from 'pinia'; +import piniaPersist from 'pinia-plugin-persist'; +import ElementPlus from 'element-plus'; +import zhCn from 'element-plus/es/locale/lang/zh-cn'; +import 'element-plus/dist/index.css'; +import { AES_Encrypt } from '@/utils/aes.js'; + +import App from './App.vue'; +import router from './router'; + +const pinia = createPinia(); +pinia.use(piniaPersist); + +const app = createApp(App); +app.config.globalProperties.$AES_Encrypt = AES_Encrypt //全局加密 +app.use(pinia); +app.use(ElementPlus, { locale: zhCn }); +app.use(router); + +app.mount('#app'); \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..ca61576 --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,46 @@ +import { createRouter, createWebHistory } from 'vue-router' + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/404page', + name: '404page', + meta: { label: "404页面" }, + component: () => import('../views/404page.vue') + }, + { + path: '/initialService', + name: 'initialService', + meta: { label: "登录页面" }, + component: () => import('../views/InitialService.vue') + }, + { + path: '/main', + name: 'main', + meta: { label: "主页面" }, + component: () => import('../views/Main.vue') + } + ] +}); + +router.beforeEach((to, from, next) => { + if (to.matched.length === 0) { + if (to.path == "/") { + router.push({ path: '/main' }); + } else if (to.path == "/initialService") { + router.push({ path: '/initialService' }); + } else { + router.push({ path: '/404page' }); + } + } else { + next(); + if(localStorage.length == 0) { + setTimeout(() => { + router.push({ path: '/initialService' }); + }, 1000); + } + } +}); + +export default router diff --git a/src/utils/aes.js b/src/utils/aes.js new file mode 100644 index 0000000..074611a --- /dev/null +++ b/src/utils/aes.js @@ -0,0 +1,29 @@ +import CryptoJS from 'crypto-js' + +const KEY = CryptoJS.enc.Utf8.parse('BDQH'); + +export const AES_Encrypt = (plaintext) => { + let ciphertext = CryptoJS.AES.encrypt(plaintext, KEY, { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7 + }).toString(); + return ciphertext; +} + +export const encrypt = (plaintext) => { + if(plaintext !== null && plaintext !== undefined && plaintext !== "") { + return CryptoJS.AES.encrypt(plaintext, KEY, { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7 + }).toString(); + } +} + +export const decrypt = (plaintext) => { + if(plaintext !== null && plaintext !== undefined && !plaintext == "") { + return CryptoJS.AES.decrypt(plaintext, KEY, { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7 + }).toString(CryptoJS.enc.Utf8); + } +} \ No newline at end of file diff --git a/src/views/404page.vue b/src/views/404page.vue new file mode 100644 index 0000000..0377877 --- /dev/null +++ b/src/views/404page.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/src/views/InitialService.vue b/src/views/InitialService.vue new file mode 100644 index 0000000..a1a74b5 --- /dev/null +++ b/src/views/InitialService.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/Main.vue b/src/views/Main.vue new file mode 100644 index 0000000..69de38e --- /dev/null +++ b/src/views/Main.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..1f9ce20 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,13 @@ +/** @type {import('tailwindcss').Config} */ +export default { + purge: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'], + darkMode: false, // or 'media' or 'class' + content: [], + theme: { + extend: {}, + }, + variants: { + extend: {}, + }, + plugins: [], +} \ No newline at end of file diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..0a3c62d --- /dev/null +++ b/vite.config.js @@ -0,0 +1,44 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import AutoImport from 'unplugin-auto-import/vite' +import Components from 'unplugin-vue-components/vite' +import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' + +// https://vitejs.dev/config/ +export default defineConfig({ + base: './', + publicPath: './', + plugins: [ + vue(), + AutoImport({ + resolvers: [ElementPlusResolver()], + }), + Components({ + resolvers: [ElementPlusResolver()], + }), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + server: { + //用来配置跨域 + host: '127.0.0.1', + port: 7033, + proxy: { + '/authentication': { + target: 'http://127.0.0.1:8011',//鉴权服务器地址 + changeOrigin: true, + rewrite: (path) => path.replace(/^\/authentication/, '') + }, + '/bdTrainingExamTopic': { + target: 'http://127.0.0.1:8021',//目标服务器地址 + changeOrigin: true, + rewrite: (path) => path.replace(/^\/bdTrainingExamTopic/, '') + }, + } + } +})