|
@@ -1,18 +1,287 @@
|
|
|
<template>
|
|
|
- <div class="home">
|
|
|
- <img alt="Vue logo" src="../assets/logo.png">
|
|
|
- <HelloWorld msg="Welcome to Your Vue.js App"/>
|
|
|
+ <div id="home">
|
|
|
+ <div id="Header">
|
|
|
+ <div class="loginForm" v-if="isLogin">
|
|
|
+ 用户名:
|
|
|
+ <span style="display: inline-block; padding: 0 20px 0 0">{{ $store.getters.getUserName || '未登录' }}</span>
|
|
|
+ <el-link type="warning" :underline="false" class="logout" @click="logout"> 退出登录 </el-link>
|
|
|
+ </div>
|
|
|
+ <div class="loginForm" v-else>
|
|
|
+ <el-form :inline="true" :model="loginForm" :rules="loginFormRules" ref="loginForm">
|
|
|
+ <el-form-item prop="userName">
|
|
|
+ <template #label>
|
|
|
+ <span class="formLabel">用户名:</span>
|
|
|
+ </template>
|
|
|
+ <el-input v-model="loginForm.userName" placeholder="请输入用户名"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="password">
|
|
|
+ <template #label>
|
|
|
+ <span class="formLabel">密码:</span>
|
|
|
+ </template>
|
|
|
+ <el-input type="password" v-model="loginForm.password" placeholder="请输入密码"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <el-button type="default" @click="login">登录</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
+ <div class="title">可视化数据管理平台</div>
|
|
|
+ </div>
|
|
|
+ <div id="Menu" :style="{height: contentHeight+'px'}">
|
|
|
+ <div id="Tags">
|
|
|
+ <el-tabs v-model="activeName" type="card" @tab-click="handleMenuClick" style="margin: auto;" stretch>
|
|
|
+ <div class="content">
|
|
|
+ <el-tab-pane label="综合展示" name="homeIndex">
|
|
|
+ <div class="tabPanel">
|
|
|
+ <HomeIndex v-if="activeName==='homeIndex'" />
|
|
|
+ </div>
|
|
|
+ </el-tab-pane>
|
|
|
+ <span v-if="isLogin">
|
|
|
+ <el-tab-pane label="数据管理" name="dataManage">
|
|
|
+ <div class="tabPanel">
|
|
|
+ <DataManage :height="contentHeight" v-if="activeName==='dataManage'" />
|
|
|
+ </div>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="数据发布" name="datePublish">
|
|
|
+ <div class="tabPanel">
|
|
|
+ <DataPublish :height="contentHeight" v-if="activeName==='datePublish'" />
|
|
|
+ </div>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="插件管理" name="pluginManage">
|
|
|
+ <div class="tabPanel">
|
|
|
+ <PluginManage v-if="activeName==='pluginManage'" />
|
|
|
+ </div>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="系统管理" name="systemManage">
|
|
|
+ <div class="tabPanel">
|
|
|
+ <SystemManage v-if="activeName==='systemManage'" />
|
|
|
+ </div>
|
|
|
+ </el-tab-pane>
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ </el-tabs>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-// @ is an alias to /src
|
|
|
-import HelloWorld from '@/components/HelloWorld.vue'
|
|
|
+import { defineAsyncComponent } from "vue";
|
|
|
+import loginApi from "@/api/login";
|
|
|
+import elementResizeDetectorMaker from "element-resize-detector";
|
|
|
+
|
|
|
|
|
|
export default {
|
|
|
- name: 'HomeView',
|
|
|
+ name: 'homeIndex',
|
|
|
components: {
|
|
|
- HelloWorld
|
|
|
+ HomeIndex: defineAsyncComponent(() => import("@/components/home/HomeIndex.vue")),
|
|
|
+ DataManage: defineAsyncComponent(() => import("@/components/home/DataManage.vue")),
|
|
|
+ DataPublish: defineAsyncComponent(() => import("@/components/home/DataPublish.vue")),
|
|
|
+ PluginManage: defineAsyncComponent(() => import("@/components/home/PluginManage.vue")),
|
|
|
+ SystemManage: defineAsyncComponent(() => import("@/components/home/SystemManage.vue")),
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ activeName: 'homeIndex',
|
|
|
+ fullscreenLoading: null,
|
|
|
+ contentHeight: '',
|
|
|
+ isLogin: false,
|
|
|
+ loginForm: {
|
|
|
+ userName: 'user001',
|
|
|
+ password: '1234567890',
|
|
|
+ clientId: '0',
|
|
|
+ },
|
|
|
+ loginFormRules: {
|
|
|
+ userName: [
|
|
|
+ { required: true, message: '请输入用户名', trigger: 'blur' },
|
|
|
+ { required: true, message: '请输入用户名', trigger: 'change' }
|
|
|
+ ],
|
|
|
+ password: [
|
|
|
+ { required: true, message: '请输入用户名', trigger: 'blur' },
|
|
|
+ { required: true, message: '请输入用户名', trigger: 'change' }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.judgeLogin();
|
|
|
+ // 监听高度变化
|
|
|
+ let app = this;
|
|
|
+ let erd = elementResizeDetectorMaker();
|
|
|
+ let minHeight = document.getElementById('home').scrollHeight * 0.779;
|
|
|
+ erd.listenTo(document.getElementsByClassName('content'), e => {
|
|
|
+ if (e.scrollHeight && e.scrollHeight >= minHeight - 70) {
|
|
|
+ app.contentHeight = e.scrollHeight + 70
|
|
|
+ } else {
|
|
|
+ app.contentHeight = minHeight;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ judgeLogin() {
|
|
|
+ let token = this.$store.getters.getToken;
|
|
|
+ this.isLogin = token && token !== '';
|
|
|
+ this.activeName = 'homeIndex'
|
|
|
+ },
|
|
|
+ handleMenuClick(panel, event) {
|
|
|
+ this.activeName = panel.paneName;
|
|
|
+ },
|
|
|
+ login() {
|
|
|
+ let app = this;
|
|
|
+ this.$refs.loginForm.validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ app.$util.loading.handleLoading(true)
|
|
|
+ loginApi.userLogin(app.loginForm).then(res => {
|
|
|
+ app.$store.state.token = res.message
|
|
|
+ app.$store.commit('setUserInfo', res.content);
|
|
|
+ app.$store.commit('setToken', res.message);
|
|
|
+ app.$util.loading.handleLoading(false);
|
|
|
+ app.judgeLogin()
|
|
|
+ }).catch(err => {
|
|
|
+ app.$util.loading.handleLoading(false);
|
|
|
+ app.judgeLogin();
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ },
|
|
|
+ logout() {
|
|
|
+ this.$util.loading.handleLoading(true);
|
|
|
+ this.$store.commit('resetState', {});
|
|
|
+ this.$util.loading.handleLoading(false);
|
|
|
+ this.judgeLogin();
|
|
|
+ },
|
|
|
}
|
|
|
}
|
|
|
</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.custom-loading .circular {
|
|
|
+ margin-right: 6px;
|
|
|
+ width: 18px;
|
|
|
+ height: 18px;
|
|
|
+ animation: loading-rotate 2s linear infinite;
|
|
|
+}
|
|
|
+
|
|
|
+.custom-loading .circular .path {
|
|
|
+ animation: loading-dash 1.5s ease-in-out infinite;
|
|
|
+ stroke-dasharray: 90, 150;
|
|
|
+ stroke-dashoffset: 0;
|
|
|
+ stroke-width: 2;
|
|
|
+ stroke: var(--el-button-text-color);
|
|
|
+ stroke-linecap: round;
|
|
|
+}
|
|
|
+
|
|
|
+#home {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ min-height: 100%;
|
|
|
+}
|
|
|
+
|
|
|
+#Header {
|
|
|
+ /* background-image: linear-gradient(#90e2fc, white); */
|
|
|
+ background-image: url('@/assets/img/bg.jpg');
|
|
|
+ background-size: 100% 180%;
|
|
|
+ height: 22%;
|
|
|
+}
|
|
|
+
|
|
|
+#Menu {
|
|
|
+ height: 76%;
|
|
|
+ overflow: visible;
|
|
|
+ background-image: linear-gradient(white 93%, #2970d8);
|
|
|
+}
|
|
|
+
|
|
|
+#Tags {
|
|
|
+ /* background-color: #02a7f0; */
|
|
|
+ margin-top: 10px;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ /* color: white; */
|
|
|
+ /* height: 8%; */
|
|
|
+}
|
|
|
+
|
|
|
+#Header .title {
|
|
|
+ /* color: #0d8ee9; */
|
|
|
+ color: white;
|
|
|
+ height: 100%;
|
|
|
+ padding: 4% 0 0 10%;
|
|
|
+ font-size: 40px;
|
|
|
+ font-weight: bold;
|
|
|
+}
|
|
|
+
|
|
|
+#Header .loginForm {
|
|
|
+ float: right;
|
|
|
+ margin-top: 1%;
|
|
|
+ color: white;
|
|
|
+}
|
|
|
+
|
|
|
+.logout {
|
|
|
+ color: #e1e1e1;
|
|
|
+ padding: 0 15px 5px
|
|
|
+}
|
|
|
+
|
|
|
+.logout:hover {
|
|
|
+ color: orange;
|
|
|
+}
|
|
|
+
|
|
|
+.formLabel {
|
|
|
+ color: white;
|
|
|
+}
|
|
|
+
|
|
|
+.content {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ padding-top: 1%;
|
|
|
+}
|
|
|
+
|
|
|
+.tabPanel {
|
|
|
+ width: 70%;
|
|
|
+ margin: 0 auto;
|
|
|
+}
|
|
|
+
|
|
|
+/* tabs 样式 start */
|
|
|
+:deep .el-tabs__nav-scroll {
|
|
|
+ width: 50%;
|
|
|
+ background-color: #0d8ee9;
|
|
|
+ margin: 0 auto
|
|
|
+}
|
|
|
+
|
|
|
+:deep .el-tabs__content {
|
|
|
+ overflow: visible;
|
|
|
+}
|
|
|
+
|
|
|
+:deep .el-tabs__item {
|
|
|
+ color: white;
|
|
|
+ font-size: 15px;
|
|
|
+}
|
|
|
+
|
|
|
+:deep .el-tabs__item:hover {
|
|
|
+ color: white;
|
|
|
+ background-color: #2ba7ff;
|
|
|
+ font-size: 15px;
|
|
|
+}
|
|
|
+
|
|
|
+:deep .el-tabs__item.is-active {
|
|
|
+ color: white;
|
|
|
+ font-weight: bolder;
|
|
|
+ font-size: 18px;
|
|
|
+ background-color: #2ba7ff;
|
|
|
+}
|
|
|
+
|
|
|
+:deep .el-tabs__active-bar {
|
|
|
+ border-radius: 30px;
|
|
|
+ background-color: #0d8ee9;
|
|
|
+}
|
|
|
+
|
|
|
+/* tabs 样式 end */
|
|
|
+
|
|
|
+</style>
|
|
|
+
|
|
|
+<style>
|
|
|
+.el-dialog__body {
|
|
|
+ padding-top: 10px;
|
|
|
+}
|
|
|
+</style>
|