diff --git a/web/README.md b/web/README.md new file mode 100644 index 0000000..eea15ce --- /dev/null +++ b/web/README.md @@ -0,0 +1,7 @@ +# Vue 3 + Vite + +This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 ` + + diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..85cb83c --- /dev/null +++ b/web/package.json @@ -0,0 +1,23 @@ +{ + "name": "wsr-web", + "private": true, + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@element-plus/icons-vue": "^1.1.4", + "axios": "^0.26.1", + "element-plus": "^2.1.9", + "pinia": "^2.0.13", + "sass": "^1.50.0", + "vue": "^3.2.25", + "vue-router": "^4.0.14" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^2.3.1", + "vite": "^2.9.2" + } +} diff --git a/web/public/favicon.ico b/web/public/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/web/public/favicon.ico differ diff --git a/web/src/App.vue b/web/src/App.vue new file mode 100644 index 0000000..e860e7a --- /dev/null +++ b/web/src/App.vue @@ -0,0 +1,36 @@ + + diff --git a/web/src/apps/AppUserInfo.vue b/web/src/apps/AppUserInfo.vue new file mode 100644 index 0000000..50c0d5c --- /dev/null +++ b/web/src/apps/AppUserInfo.vue @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/web/src/assets/building.png b/web/src/assets/building.png new file mode 100644 index 0000000..ac7230f Binary files /dev/null and b/web/src/assets/building.png differ diff --git a/web/src/assets/consoleBg.png b/web/src/assets/consoleBg.png new file mode 100644 index 0000000..507e813 Binary files /dev/null and b/web/src/assets/consoleBg.png differ diff --git a/web/src/assets/iconfont.css b/web/src/assets/iconfont.css new file mode 100644 index 0000000..2b4ad45 --- /dev/null +++ b/web/src/assets/iconfont.css @@ -0,0 +1,114 @@ +@font-face { + font-family: "iconfont"; /* Project id 3335619 */ + src: url('//at.alicdn.com/t/font_3335619_ki0rpko4inh.woff2?t=1650462455599') format('woff2'), + url('//at.alicdn.com/t/font_3335619_ki0rpko4inh.woff?t=1650462455599') format('woff'), + url('//at.alicdn.com/t/font_3335619_ki0rpko4inh.ttf?t=1650462455599') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-tishi:before { + content: "\e74c"; +} + +.icon-fenxiang:before { + content: "\e74d"; +} + +.icon-shujuyuanguanli:before { + content: "\e74b"; +} + +.icon-dapingguanli:before { + content: "\e74a"; +} + +.icon-dangzuzhi:before { + content: "\e749"; +} + +.icon-fanhuishangyiye:before { + content: "\e748"; +} + +.icon-jiediancaozuo:before { + content: "\e747"; +} + +.icon-shujujicheng:before { + content: "\e745"; +} + +.icon-shujuqingxi:before { + content: "\e746"; +} + +.icon-shang:before { + content: "\e743"; +} + +.icon-xia:before { + content: "\e744"; +} + +.icon-toubutouxiang:before { + content: "\e742"; +} + +.icon-anniusousuo:before { + content: "\e741"; +} + +.icon-sousuo:before { + content: "\e740"; +} + +.icon-daochu:before { + content: "\e73e"; +} + +.icon-shanchu:before { + content: "\e73f"; +} + +.icon-zhuantishujuku:before { + content: "\e73c"; +} + +.icon-jichushujuku:before { + content: "\e73d"; +} + +.icon-ruanjianxinxicaiji:before { + content: "\e73a"; +} + +.icon-yingjianxinxicaiji:before { + content: "\e73b"; +} + +.icon-quanxianguanli:before { + content: "\e733"; +} + +.icon-dangqianweizhi:before { + content: "\e734"; +} + +.icon-tuichu:before { + content: "\e735"; +} + +.icon-zuzhiguanli:before { + content: "\e736"; +} + +.icon-zhanghuguanli:before { + content: "\e737"; +} diff --git a/web/src/components/KuDialog.vue b/web/src/components/KuDialog.vue new file mode 100644 index 0000000..fb7e714 --- /dev/null +++ b/web/src/components/KuDialog.vue @@ -0,0 +1,36 @@ + + + + + \ No newline at end of file diff --git a/web/src/components/KuLogin/KuLogin.vue b/web/src/components/KuLogin/KuLogin.vue new file mode 100644 index 0000000..974d5c4 --- /dev/null +++ b/web/src/components/KuLogin/KuLogin.vue @@ -0,0 +1,135 @@ + + + + + diff --git a/web/src/components/KuLogin/changePwd.vue b/web/src/components/KuLogin/changePwd.vue new file mode 100644 index 0000000..3644ce6 --- /dev/null +++ b/web/src/components/KuLogin/changePwd.vue @@ -0,0 +1,98 @@ + + + + + \ No newline at end of file diff --git a/web/src/components/building.vue b/web/src/components/building.vue new file mode 100644 index 0000000..b0cd4f7 --- /dev/null +++ b/web/src/components/building.vue @@ -0,0 +1,20 @@ + + + \ No newline at end of file diff --git a/web/src/components/sliderNav.vue b/web/src/components/sliderNav.vue new file mode 100644 index 0000000..d7e9953 --- /dev/null +++ b/web/src/components/sliderNav.vue @@ -0,0 +1,86 @@ + + + + + \ No newline at end of file diff --git a/web/src/main.js b/web/src/main.js new file mode 100644 index 0000000..5645943 --- /dev/null +++ b/web/src/main.js @@ -0,0 +1,24 @@ +import {createApp} from 'vue' +import App from './App.vue' +import router from './utils/router' +import {createPinia} from "pinia/dist/pinia"; +import axios from "./utils/axios"; +import tools from "./utils/tools"; +import 'element-plus/dist/index.css' +import eui from 'element-plus' +import zhCn from "element-plus/es/locale/lang/zh-cn"; +import "./assets/iconfont.css" + +const app = createApp(App) +app.config.globalProperties.$http = axios +app.config.globalProperties.$sys = { + title: "综合大数据平台中心" +} +Object.keys(tools).map(e => app.config.globalProperties[e] = tools[e]) +router.then(r => { + app.use(eui, {locale: zhCn}) + app.use(r) + app.use(createPinia()) + app.mount('#app') +}) + diff --git a/web/src/utils/axios.js b/web/src/utils/axios.js new file mode 100644 index 0000000..6eddf72 --- /dev/null +++ b/web/src/utils/axios.js @@ -0,0 +1,35 @@ +import axios from "axios"; +import {ElMessage} from "element-plus"; +import {getToken} from "./tools"; + + +let ins = axios.create({ + baseURL: process.env.NODE_ENV == "production" ? "/" : "/dev", timeout: 600000, withCredentials: true, +}) + +ins.interceptors.request.use(config => { + if (!config.withoutToken && !!getToken()) { + config.headers["Authorization"] = getToken() + } + if (config.params) { + Object.keys(config.params).map(e => { + if (typeof config.params[e] == "string") config.params[e] = config.params[e].trim() + }) + } + return config +}, error => { + console.error(error) +}) +ins.interceptors.response.use(res => { + if (res?.data?.code == 0) { + return res.data + } else if (res?.data?.code == 401) { + console.error("安全令牌验证无法通过!") + } else if (res?.data) { + return res.data + } else { + ElMessage.error("服务器异常,请联系管理员!") + console.error("服务器异常,请联系管理员!") + } +}) +export default ins \ No newline at end of file diff --git a/web/src/utils/router.js b/web/src/utils/router.js new file mode 100644 index 0000000..5520639 --- /dev/null +++ b/web/src/utils/router.js @@ -0,0 +1,41 @@ +import {createRouter, createWebHistory} from 'vue-router' +import {getToken} from './tools' + + +let home = {name: "工作台", path: "/v", component: () => import('../views/home')}, + routes = [{name: "登录", path: "/login", component: () => import('../views/login')}] +const loadApps = () => { + const files = import.meta.glob('../apps/App*.vue'), apps = [] + return Promise.all(Object.keys(files).map(path => { + return files?.[path]()?.then(file => { + if (file.default) { + let {name, label} = file.default, addApp = { + name, + label: label || name, + path: name, + component: () => import("../views/appEntry"), + app: file.default + } + return apps.push(addApp) + } + }) + })).then(() => { + localStorage.setItem("apps", JSON.stringify(apps)) + home.children = apps + routes.push(home) + }) +} +export default loadApps().then(() => createRouter({ + history: createWebHistory(), routes +})).then(router => { + //全局路由守卫 + router.beforeEach((to, from, next) => { + console.log('%s=>%s', from.name, to.name) + if (getToken()) { + next({name: "工作台"}) + } else if (to.name != '登录') { + next({name: "登录"}) + } else next() + }) + return router +}) \ No newline at end of file diff --git a/web/src/utils/store.js b/web/src/utils/store.js new file mode 100644 index 0000000..742d442 --- /dev/null +++ b/web/src/utils/store.js @@ -0,0 +1,7 @@ +import {defineStore} from "pinia/dist/pinia"; + +export const mainStore = defineStore('main', { + state: () => ({ + user: {} + }) +}) \ No newline at end of file diff --git a/web/src/utils/tools.js b/web/src/utils/tools.js new file mode 100644 index 0000000..3c6f6b7 --- /dev/null +++ b/web/src/utils/tools.js @@ -0,0 +1,7 @@ +export const getToken = () => localStorage.getItem("token") +export const $confirm = ()=>{ + +} +export default { + getToken,$confirm +} \ No newline at end of file diff --git a/web/src/views/appEntry.vue b/web/src/views/appEntry.vue new file mode 100644 index 0000000..5b4219c --- /dev/null +++ b/web/src/views/appEntry.vue @@ -0,0 +1,46 @@ + + + + + \ No newline at end of file diff --git a/web/src/views/home.vue b/web/src/views/home.vue new file mode 100644 index 0000000..249b339 --- /dev/null +++ b/web/src/views/home.vue @@ -0,0 +1,140 @@ + + + + + \ No newline at end of file diff --git a/web/src/views/login.vue b/web/src/views/login.vue new file mode 100644 index 0000000..c937fdb --- /dev/null +++ b/web/src/views/login.vue @@ -0,0 +1,34 @@ + + + + + \ No newline at end of file diff --git a/web/vite.config.js b/web/vite.config.js new file mode 100644 index 0000000..7270f19 --- /dev/null +++ b/web/vite.config.js @@ -0,0 +1,10 @@ +import {defineConfig} from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vitejs.dev/config/ +export default defineConfig({ + resolve: { + extensions: ['.vue', '.mjs', '.js', '.ts', '.jsx', '.tsx', '.json'] + }, + plugins: [vue()] +})