From 483f17a5912bcc572c0ec59968fdf35b349777de Mon Sep 17 00:00:00 2001 From: chaoszhu Date: Thu, 18 Jul 2024 18:16:45 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E9=9D=A2=E6=9D=BFUI=E6=94=B9?= =?UTF-8?q?=E9=80=A0=E5=B7=A5=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/{App.vue => app.vue} | 0 web/src/assets/scss/element-ui.scss | 6 +- web/src/assets/scss/global.scss | 8 +- web/src/components/aside-box.vue | 138 +++++++ web/src/components/top-bar.vue | 80 ++++ web/src/main.js | 2 +- web/src/router/index.js | 43 +- web/src/store/index.js | 19 +- web/src/views/credentials/index.vue | 19 + web/src/views/group/index.vue | 245 +++++++++++ web/src/views/index.vue | 35 ++ .../list/components/setting-tab/password.vue | 3 +- web/src/views/login/index.vue | 4 +- web/src/views/onekey/index.vue | 19 + web/src/views/scripts/index.vue | 19 + web/src/views/server/components/host-card.vue | 390 ++++++++++++++++++ web/src/views/server/components/host-form.vue | 208 ++++++++++ .../components/setting-tab/email-list.vue | 185 +++++++++ .../server/components/setting-tab/group.vue | 239 +++++++++++ .../components/setting-tab/notify-list.vue | 63 +++ .../components/setting-tab/password.vue | 98 +++++ .../server/components/setting-tab/record.vue | 46 +++ .../server/components/setting-tab/sort.vue | 98 +++++ web/src/views/server/components/setting.vue | 69 ++++ web/src/views/server/components/ssh-form.vue | 205 +++++++++ web/src/views/server/index.vue | 164 ++++++++ .../views/setting/components/email-list.vue | 185 +++++++++ web/src/views/setting/components/group.vue | 239 +++++++++++ .../views/setting/components/notify-list.vue | 63 +++ web/src/views/setting/components/password.vue | 98 +++++ web/src/views/setting/components/record.vue | 46 +++ web/src/views/setting/components/sort.vue | 98 +++++ web/src/views/setting/index.vue | 58 +++ 33 files changed, 3172 insertions(+), 20 deletions(-) rename web/src/{App.vue => app.vue} (100%) create mode 100644 web/src/components/aside-box.vue create mode 100644 web/src/components/top-bar.vue create mode 100644 web/src/views/credentials/index.vue create mode 100644 web/src/views/group/index.vue create mode 100644 web/src/views/index.vue create mode 100644 web/src/views/onekey/index.vue create mode 100644 web/src/views/scripts/index.vue create mode 100644 web/src/views/server/components/host-card.vue create mode 100644 web/src/views/server/components/host-form.vue create mode 100644 web/src/views/server/components/setting-tab/email-list.vue create mode 100644 web/src/views/server/components/setting-tab/group.vue create mode 100644 web/src/views/server/components/setting-tab/notify-list.vue create mode 100644 web/src/views/server/components/setting-tab/password.vue create mode 100644 web/src/views/server/components/setting-tab/record.vue create mode 100644 web/src/views/server/components/setting-tab/sort.vue create mode 100644 web/src/views/server/components/setting.vue create mode 100644 web/src/views/server/components/ssh-form.vue create mode 100644 web/src/views/server/index.vue create mode 100644 web/src/views/setting/components/email-list.vue create mode 100644 web/src/views/setting/components/group.vue create mode 100644 web/src/views/setting/components/notify-list.vue create mode 100644 web/src/views/setting/components/password.vue create mode 100644 web/src/views/setting/components/record.vue create mode 100644 web/src/views/setting/components/sort.vue create mode 100644 web/src/views/setting/index.vue diff --git a/web/src/App.vue b/web/src/app.vue similarity index 100% rename from web/src/App.vue rename to web/src/app.vue diff --git a/web/src/assets/scss/element-ui.scss b/web/src/assets/scss/element-ui.scss index 714897a..94280be 100644 --- a/web/src/assets/scss/element-ui.scss +++ b/web/src/assets/scss/element-ui.scss @@ -15,4 +15,8 @@ } .el-tabs__content { padding: 0 10px; -} \ No newline at end of file +} + +// :root { +// --active-color: red; +// } \ No newline at end of file diff --git a/web/src/assets/scss/global.scss b/web/src/assets/scss/global.scss index eb91448..fafe7ce 100644 --- a/web/src/assets/scss/global.scss +++ b/web/src/assets/scss/global.scss @@ -34,7 +34,7 @@ body { // background-size: cover; // background-repeat: no-repeat; // // background-image: url(../bg.jpg), linear-gradient(to bottom, #010179, #F5C4C1, #151799); - background-color: #f4f6f9; + background-color: #E7EBF4; background-image: url(https://gw.alipayobjects.com/zos/rmsportal/TVYTbAXWheQpRcWDaDMu.svg); background-repeat: no-repeat; background-position: center 110px; @@ -42,7 +42,7 @@ body { } html, body { - min-width: 1200px; - height: 100vh; - overflow: hidden; + // min-width: 1200px; + // height: 100vh; + // overflow: hidden; } diff --git a/web/src/components/aside-box.vue b/web/src/components/aside-box.vue new file mode 100644 index 0000000..2817ac0 --- /dev/null +++ b/web/src/components/aside-box.vue @@ -0,0 +1,138 @@ + + + + + \ No newline at end of file diff --git a/web/src/components/top-bar.vue b/web/src/components/top-bar.vue new file mode 100644 index 0000000..007d4c6 --- /dev/null +++ b/web/src/components/top-bar.vue @@ -0,0 +1,80 @@ + + + + + \ No newline at end of file diff --git a/web/src/main.js b/web/src/main.js index 7896575..0afde18 100644 --- a/web/src/main.js +++ b/web/src/main.js @@ -6,7 +6,7 @@ import tools from './plugins/tools' import elementPlugins from './plugins/element' import globalComponents from './plugins/components' import api from './api' -import App from './App.vue' +import App from './app.vue' import './assets/scss/reset.scss' import './assets/scss/global.scss' import './assets/scss/element-ui.scss' diff --git a/web/src/router/index.js b/web/src/router/index.js index f40d444..b1c3e0c 100644 --- a/web/src/router/index.js +++ b/web/src/router/index.js @@ -1,18 +1,45 @@ import { createRouter, createWebHistory } from 'vue-router' -// import hostList from '@views/list/index.vue' -// import login from '@views/login/index.vue' +// import HostList from '@views/list/index.vue' +// import Login from '@views/login/index.vue' // import terminal from '@views/terminal/index.vue' // import test from '@views/test/index.vue' -const hostList = () => import('@views/list/index.vue') -const login = () => import('@views/login/index.vue') -const terminal = () => import('@views/terminal/index.vue') +const HostList = () => import('@views/list/index.vue') + +const Login = () => import('@views/login/index.vue') +const Container = () => import('@views/index.vue') +const Server = () => import('@views/server/index.vue') +const Terminal = () => import('@views/terminal/index.vue') +const Credentials = () => import('@views/credentials/index.vue') +const Group = () => import('@views/group/index.vue') +const Onekey = () => import('@views/onekey/index.vue') +const Scripts = () => import('@views/scripts/index.vue') +const Setting = () => import('@views/setting/index.vue') const routes = [ - { path: '/', component: hostList }, - { path: '/login', component: login }, - { path: '/terminal', component: terminal }, + { path: '/login', component: Login }, + { + path: '/', + component: Container, + children: [ + { path: '/server', component: Server }, + { path: '/terminal', component: Terminal }, + { path: '/credentials', component: Credentials }, + { path: '/group', component: Group }, + { path: '/onekey', component: Onekey }, + { path: '/scripts', component: Scripts }, + { path: '/setting', component: Setting }, + { path: '', redirect: 'server' }, // 这里添加重定向 + ] + }, + { + path: '/:pathMatch(.*)*', + redirect: '/server' + }, + // { path: '/server', component: Server }, + // { path: '/', component: HostList }, + // { path: '/terminal', component: Terminal }, // { path: '/test', component: test }, ] diff --git a/web/src/store/index.js b/web/src/store/index.js index 7e4d003..84fb1e4 100644 --- a/web/src/store/index.js +++ b/web/src/store/index.js @@ -6,7 +6,10 @@ const useStore = defineStore({ id: 'global', state: () => ({ hostList: [], - token: sessionStorage.getItem('token') || localStorage.getItem('token') || null + groupList: [], + user: localStorage.getItem('user') || null, + token: sessionStorage.getItem('token') || localStorage.getItem('token') || null, + title: '' }), actions: { async setJwtToken(token, isSession = true) { @@ -14,16 +17,24 @@ const useStore = defineStore({ else localStorage.setItem('token', token) this.$patch({ token }) }, + async setUser(username) { + localStorage.setItem('user', username) + this.$patch({ user: username }) + }, + async setTitle(title) { + this.$patch({ title }) + }, async clearJwtToken() { localStorage.clear('token') sessionStorage.clear('token') this.$patch({ token: null }) }, async getHostList() { + const { data: groupList } = await $api.getGroupList() const { data: hostList } = await $api.getHostList() - this.$patch({ hostList }) - // console.log('pinia: ', this.hostList) - // this.getHostPing() + // console.log('hostList:', hostList) + // console.log('groupList:', groupList) + this.$patch({ hostList, groupList }) }, getHostPing() { setTimeout(() => { diff --git a/web/src/views/credentials/index.vue b/web/src/views/credentials/index.vue new file mode 100644 index 0000000..a7c34c8 --- /dev/null +++ b/web/src/views/credentials/index.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/web/src/views/group/index.vue b/web/src/views/group/index.vue new file mode 100644 index 0000000..09de0a0 --- /dev/null +++ b/web/src/views/group/index.vue @@ -0,0 +1,245 @@ + + + + + \ No newline at end of file diff --git a/web/src/views/index.vue b/web/src/views/index.vue new file mode 100644 index 0000000..dc5daa5 --- /dev/null +++ b/web/src/views/index.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/web/src/views/list/components/setting-tab/password.vue b/web/src/views/list/components/setting-tab/password.vue index 5500caf..ffe1b3e 100644 --- a/web/src/views/list/components/setting-tab/password.vue +++ b/web/src/views/list/components/setting-tab/password.vue @@ -56,7 +56,7 @@ import { ref, reactive, getCurrentInstance } from 'vue' import { RSAEncrypt } from '@utils/index.js' -const { proxy: { $api, $message } } = getCurrentInstance() +const { proxy: { $api, $message, $store } } = getCurrentInstance() const loading = ref(false) const formRef = ref(null) @@ -81,6 +81,7 @@ const handleUpdate = () => { newPwd = RSAEncrypt(newPwd) let { msg } = await $api.updatePwd({ oldLoginName, oldPwd, newLoginName, newPwd }) $message({ type: 'success', center: true, message: msg }) + $store.setUser(newLoginName) formData.oldLoginName = '' formData.oldPwd = '' formData.newLoginName = '' diff --git a/web/src/views/login/index.vue b/web/src/views/login/index.vue index 08a4209..772da82 100644 --- a/web/src/views/login/index.vue +++ b/web/src/views/login/index.vue @@ -113,6 +113,7 @@ const handleLogin = () => { .then(({ data, msg }) => { const { token } = data $store.setJwtToken(token, isSession.value) + $store.setUser(loginName) $message.success({ message: msg || 'success', center: true }) $router.push('/') }) @@ -140,9 +141,10 @@ onMounted(async () => { justify-content: center; align-items: center; background: rgba(171, 181, 196, 0.3); // #f0f2f5; - padding-top: 70px; + padding-top: 1px; .login_box { + margin-top: -80px; width: 500px; min-height: 250px; padding: 20px; diff --git a/web/src/views/onekey/index.vue b/web/src/views/onekey/index.vue new file mode 100644 index 0000000..1294743 --- /dev/null +++ b/web/src/views/onekey/index.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/web/src/views/scripts/index.vue b/web/src/views/scripts/index.vue new file mode 100644 index 0000000..1294743 --- /dev/null +++ b/web/src/views/scripts/index.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/web/src/views/server/components/host-card.vue b/web/src/views/server/components/host-card.vue new file mode 100644 index 0000000..2ce597c --- /dev/null +++ b/web/src/views/server/components/host-card.vue @@ -0,0 +1,390 @@ + + + + + + + diff --git a/web/src/views/server/components/host-form.vue b/web/src/views/server/components/host-form.vue new file mode 100644 index 0000000..f079771 --- /dev/null +++ b/web/src/views/server/components/host-form.vue @@ -0,0 +1,208 @@ + + + + + diff --git a/web/src/views/server/components/setting-tab/email-list.vue b/web/src/views/server/components/setting-tab/email-list.vue new file mode 100644 index 0000000..94dadf6 --- /dev/null +++ b/web/src/views/server/components/setting-tab/email-list.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/web/src/views/server/components/setting-tab/group.vue b/web/src/views/server/components/setting-tab/group.vue new file mode 100644 index 0000000..1b2a2e6 --- /dev/null +++ b/web/src/views/server/components/setting-tab/group.vue @@ -0,0 +1,239 @@ + + + + + diff --git a/web/src/views/server/components/setting-tab/notify-list.vue b/web/src/views/server/components/setting-tab/notify-list.vue new file mode 100644 index 0000000..fb9efb5 --- /dev/null +++ b/web/src/views/server/components/setting-tab/notify-list.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/web/src/views/server/components/setting-tab/password.vue b/web/src/views/server/components/setting-tab/password.vue new file mode 100644 index 0000000..ffe1b3e --- /dev/null +++ b/web/src/views/server/components/setting-tab/password.vue @@ -0,0 +1,98 @@ + + + + + \ No newline at end of file diff --git a/web/src/views/server/components/setting-tab/record.vue b/web/src/views/server/components/setting-tab/record.vue new file mode 100644 index 0000000..30aeec8 --- /dev/null +++ b/web/src/views/server/components/setting-tab/record.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/web/src/views/server/components/setting-tab/sort.vue b/web/src/views/server/components/setting-tab/sort.vue new file mode 100644 index 0000000..35cfa78 --- /dev/null +++ b/web/src/views/server/components/setting-tab/sort.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/web/src/views/server/components/setting.vue b/web/src/views/server/components/setting.vue new file mode 100644 index 0000000..9c3865b --- /dev/null +++ b/web/src/views/server/components/setting.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/web/src/views/server/components/ssh-form.vue b/web/src/views/server/components/ssh-form.vue new file mode 100644 index 0000000..6aed4f1 --- /dev/null +++ b/web/src/views/server/components/ssh-form.vue @@ -0,0 +1,205 @@ + + + + + diff --git a/web/src/views/server/index.vue b/web/src/views/server/index.vue new file mode 100644 index 0000000..bb00c10 --- /dev/null +++ b/web/src/views/server/index.vue @@ -0,0 +1,164 @@ + + + + + diff --git a/web/src/views/setting/components/email-list.vue b/web/src/views/setting/components/email-list.vue new file mode 100644 index 0000000..94dadf6 --- /dev/null +++ b/web/src/views/setting/components/email-list.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/web/src/views/setting/components/group.vue b/web/src/views/setting/components/group.vue new file mode 100644 index 0000000..1b2a2e6 --- /dev/null +++ b/web/src/views/setting/components/group.vue @@ -0,0 +1,239 @@ + + + + + diff --git a/web/src/views/setting/components/notify-list.vue b/web/src/views/setting/components/notify-list.vue new file mode 100644 index 0000000..fb9efb5 --- /dev/null +++ b/web/src/views/setting/components/notify-list.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/web/src/views/setting/components/password.vue b/web/src/views/setting/components/password.vue new file mode 100644 index 0000000..ffe1b3e --- /dev/null +++ b/web/src/views/setting/components/password.vue @@ -0,0 +1,98 @@ + + + + + \ No newline at end of file diff --git a/web/src/views/setting/components/record.vue b/web/src/views/setting/components/record.vue new file mode 100644 index 0000000..30aeec8 --- /dev/null +++ b/web/src/views/setting/components/record.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/web/src/views/setting/components/sort.vue b/web/src/views/setting/components/sort.vue new file mode 100644 index 0000000..35cfa78 --- /dev/null +++ b/web/src/views/setting/components/sort.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/web/src/views/setting/index.vue b/web/src/views/setting/index.vue new file mode 100644 index 0000000..6f34541 --- /dev/null +++ b/web/src/views/setting/index.vue @@ -0,0 +1,58 @@ + + + + +