1. 添加预设功能文件夹
2. 修改登录页面 3. 添加导航与状态树
This commit is contained in:
parent
e6666b9948
commit
8189ec9381
@ -9,6 +9,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ant-design-vue": "^1.7.0",
|
"ant-design-vue": "^1.7.0",
|
||||||
|
"axios": "^0.21.0",
|
||||||
"core-js": "^3.6.5",
|
"core-js": "^3.6.5",
|
||||||
"vue": "^2.6.11",
|
"vue": "^2.6.11",
|
||||||
"vue-router": "^3.4.8",
|
"vue-router": "^3.4.8",
|
||||||
|
BIN
src/assets/back.png
Normal file
BIN
src/assets/back.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.8 MiB |
BIN
src/assets/login-img.png
Normal file
BIN
src/assets/login-img.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 39 KiB |
BIN
src/assets/login-img3.png
Normal file
BIN
src/assets/login-img3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 41 KiB |
BIN
src/assets/login-logo.png
Normal file
BIN
src/assets/login-logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
src/assets/login-portrait.png
Normal file
BIN
src/assets/login-portrait.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.1 KiB |
BIN
src/assets/phone.png
Normal file
BIN
src/assets/phone.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 226 KiB |
@ -1,13 +1,196 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<a-spin :spinning="spinning">
|
||||||
|
<div :style="{ background: isPhone ? 'none' : 'url(' + bgimg + ')', height:'100vh', }">
|
||||||
|
<img :src="img1" v-if="!isPhone" style="position:absolute;top:0;left:0;" />
|
||||||
|
<img :src="img2" v-if="!isPhone" style="position:absolute;bottom:0;right:0;" />
|
||||||
|
<div :id=" isPhone ? '' : 'login-contain'">
|
||||||
|
<!-- <el-row style="height:35px;" v-if="!isPhone">
|
||||||
|
<el-alert :closable="false" title="水质检测平台" type="error" effect="dark"></el-alert>
|
||||||
|
</el-row> -->
|
||||||
|
<a-row style="height:480px;background:#0E6F75;">
|
||||||
|
<a-col
|
||||||
|
:span="15"
|
||||||
|
:style="{backgroundImage:'url(' + logobg + ')', height:'480px', overflow:'hidden', textAlign:'center'}"
|
||||||
|
id="login-left"
|
||||||
|
v-if="!isPhone"
|
||||||
|
>
|
||||||
|
<img :src="logo" />
|
||||||
|
<p>
|
||||||
|
<span style="color:white;font-size: 26px;font-weight: bold;">CVEO水质监测平台</span>
|
||||||
|
</p>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span=" isPhone ? 24 : 9" style="height:480px;overflow:hidden;">
|
||||||
|
<a-form ref="form" :model="form" label-width="0" style="margin:50px;text-align:center;">
|
||||||
|
<a-form-item style="text-align:center;">
|
||||||
|
<img :src="avter" />
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item>
|
||||||
|
<a-input prefix-icon="el-icon-user-solid" v-model="form.utel" placeholder="请输入用户名"></a-input>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item>
|
||||||
|
<a-input
|
||||||
|
prefix-icon="el-icon-lock"
|
||||||
|
type="password"
|
||||||
|
v-model="form.upass"
|
||||||
|
autocomplete="off"
|
||||||
|
placeholder="请输入密码"
|
||||||
|
></a-input>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item>
|
||||||
|
<a-row>
|
||||||
|
<a-col :span="12">
|
||||||
|
<a-input
|
||||||
|
prefix-icon="el-icon-lock"
|
||||||
|
v-model="form.checkcode"
|
||||||
|
placeholder="请输入验证码"
|
||||||
|
/>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="12">
|
||||||
|
<input
|
||||||
|
type="button"
|
||||||
|
id="code"
|
||||||
|
@click="createCode"
|
||||||
|
class="verification1"
|
||||||
|
v-model="checkCode"
|
||||||
|
/>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item>
|
||||||
|
<a-row :gutter="10">
|
||||||
|
<a-col :span="24">
|
||||||
|
<a-button style="width:100%;" type="danger" @click="login()">登录</a-button>
|
||||||
|
</a-col>
|
||||||
|
<!-- <a-col :span="24">
|
||||||
|
<a-button style="width:100%;" @click="reset()">重置</a-button>
|
||||||
|
</a-col>-->
|
||||||
|
</a-row>
|
||||||
|
|
||||||
|
<!-- <a-button @click="reset()">重置</a-button> -->
|
||||||
|
</a-form-item>
|
||||||
|
</a-form>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a-spin>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
|
||||||
|
|
||||||
|
import { login, logout } from "@/utils/http";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
msg: "",
|
||||||
|
form: {
|
||||||
|
utel: "",
|
||||||
|
upass: "",
|
||||||
|
checkcode: ""
|
||||||
|
},
|
||||||
|
loading: null,
|
||||||
|
img1: "",
|
||||||
|
img2: "",
|
||||||
|
logo: "",
|
||||||
|
bgimg: "",
|
||||||
|
avter: "",
|
||||||
|
logobg: "",
|
||||||
|
checkCode: "",
|
||||||
|
random: [],
|
||||||
|
spinning: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
isPhone() {
|
||||||
|
return this.$store.getters.phone
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async login() {
|
||||||
|
try {
|
||||||
|
this.spinning = true;
|
||||||
|
// dev
|
||||||
|
// if (
|
||||||
|
// this.form.checkcode.toUpperCase() !== this.checkCode.toUpperCase()
|
||||||
|
// ) {
|
||||||
|
// this.$message.error("验证码错误!");
|
||||||
|
// this.createCode();
|
||||||
|
// this.loading.close();
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
let data = await login(this.form.utel, this.form.upass, 'tt', 'tt');
|
||||||
|
this.$store.commit("login", data);
|
||||||
|
let path = decodeURIComponent(this.$route.query.redirect || "/");
|
||||||
|
this.$router.push({ path: path });
|
||||||
|
} catch (e) {
|
||||||
|
this.$message.error("账号或密码错误!");
|
||||||
|
this.createCode();
|
||||||
|
} finally {
|
||||||
|
this.spinning = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
reset() {
|
||||||
|
this.form.utel = "";
|
||||||
|
this.form.upass = "";
|
||||||
|
this.form.checkcode = "";
|
||||||
|
},
|
||||||
|
checkDingding() {
|
||||||
|
|
||||||
|
},
|
||||||
|
createCode() {
|
||||||
|
let code = "";
|
||||||
|
var codeLength = 4; //验证码的长度
|
||||||
|
|
||||||
|
for (var i = 0; i < codeLength; i++) {
|
||||||
|
//循环操作
|
||||||
|
var index = Math.floor(Math.random() * this.random.length); //取得随机数的索引(0~35)
|
||||||
|
code += this.random[index]; //根据索引取得随机数加到code上
|
||||||
|
}
|
||||||
|
this.checkCode = code; //把code值赋给验证码
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
for (var i = 0; i < 10; i++) {
|
||||||
|
this.random.push(i);
|
||||||
|
}
|
||||||
|
for (var i = 65; i < 91; i++) {
|
||||||
|
this.random.push(String.fromCharCode(i));
|
||||||
|
}
|
||||||
|
for (var i = 97; i < 123; i++) {
|
||||||
|
this.random.push(String.fromCharCode(i));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async mounted() {
|
||||||
|
|
||||||
|
this.$store.commit('phone', document.body.clientWidth < 760)
|
||||||
|
this.img1 = require("../assets/login-img.png");
|
||||||
|
this.img2 = require("../assets/login-img3.png");
|
||||||
|
this.logo = require("../assets/login-logo.png");
|
||||||
|
this.bgimg = require("../assets/back.png");
|
||||||
|
this.avter = require("../assets/login-portrait.png");
|
||||||
|
this.logobg = require("../assets/back.png");
|
||||||
|
this.createCode();
|
||||||
|
}
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
#login-contain {
|
||||||
|
width: 852px;
|
||||||
|
height: 480px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
margin: auto;
|
||||||
|
box-shadow: 0px 0px 32px #0c2d36;
|
||||||
|
}
|
||||||
|
#code {
|
||||||
|
font-size: 18px;
|
||||||
|
letter-spacing: 3px;
|
||||||
|
color: #031424;
|
||||||
|
background: #f2f2f5;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
13
src/components/admin/Index.vue
Normal file
13
src/components/admin/Index.vue
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
0
src/components/analysis/Index.vue
Normal file
0
src/components/analysis/Index.vue
Normal file
13
src/components/logs/Index.vue
Normal file
13
src/components/logs/Index.vue
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
13
src/components/map/Index.vue
Normal file
13
src/components/map/Index.vue
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
13
src/components/search/Index.vue
Normal file
13
src/components/search/Index.vue
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
@ -0,0 +1,34 @@
|
|||||||
|
import axios from "axios";
|
||||||
|
|
||||||
|
const backendUrl = '/backend/'
|
||||||
|
const geoServerUrl = '/geoserver/'
|
||||||
|
|
||||||
|
export const instance = axios.create({
|
||||||
|
baseURL: backendUrl
|
||||||
|
})
|
||||||
|
|
||||||
|
export async function login(username, passwd, uuid, capthe)
|
||||||
|
{
|
||||||
|
let response = await instance.post('auth', {
|
||||||
|
'username':username,
|
||||||
|
'password':passwd,
|
||||||
|
'uuid':uuid,
|
||||||
|
'captch':capthe
|
||||||
|
})
|
||||||
|
let data = await response.data
|
||||||
|
let token = data.access_token
|
||||||
|
instance.defaults.headers['Authorization'] = "JWT " + token;
|
||||||
|
|
||||||
|
response = await instance.get('current/')
|
||||||
|
data = await response.data
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setAuth(auth) {
|
||||||
|
instance.defaults.headers['Authorization'] = 'JWT ' + auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function logout()
|
||||||
|
{
|
||||||
|
instance.defaults.headers['Authorization'] = ''
|
||||||
|
}
|
@ -1,6 +1,8 @@
|
|||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
import Router from 'vue-router'
|
import Router from 'vue-router'
|
||||||
import Index from '@/components/Main'
|
import Index from '@/components/Main'
|
||||||
|
import Login from '@/components/Login'
|
||||||
|
import store from './store'
|
||||||
|
|
||||||
Vue.use(Router)
|
Vue.use(Router)
|
||||||
|
|
||||||
@ -14,11 +16,26 @@ const routes = [
|
|||||||
name: 'index',
|
name: 'index',
|
||||||
component: Index,
|
component: Index,
|
||||||
meta: {
|
meta: {
|
||||||
requireAuth: false
|
requireAuth: true
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/login',
|
||||||
|
name: 'login',
|
||||||
|
component: Login
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if (sessionStorage.getItem("store")) {
|
||||||
|
store.replaceState(Object.assign({}, store.state, JSON.parse(sessionStorage.getItem("store"))))
|
||||||
|
if (store.state.login) {
|
||||||
|
if (store.state.uinfo) {
|
||||||
|
setAuth(store.state.uinfo.token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const router = new Router({
|
const router = new Router({
|
||||||
base: process.env.BASE_URL,
|
base: process.env.BASE_URL,
|
||||||
routes
|
routes
|
||||||
|
@ -3,10 +3,103 @@ import Vuex from 'vuex'
|
|||||||
|
|
||||||
Vue.use(Vuex)
|
Vue.use(Vuex)
|
||||||
|
|
||||||
|
const storeToSession = store => {
|
||||||
|
// 当 store 初始化后调用
|
||||||
|
store.subscribe((mutation, state) => {
|
||||||
|
if (sessionStorage.getItem('store')){
|
||||||
|
sessionStorage.removeItem('store')
|
||||||
|
}
|
||||||
|
console.log(store)
|
||||||
|
sessionStorage.setItem('store', JSON.stringify(state))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const store = new Vuex.Store({
|
const store = new Vuex.Store({
|
||||||
state: {
|
state: {
|
||||||
|
userInfo:null,
|
||||||
|
phone: document.body.clientWidth < 800,
|
||||||
|
login:false,
|
||||||
|
loginTime:0,
|
||||||
|
second: 60 * 60 * 2,
|
||||||
|
logs:'',
|
||||||
|
data:{},
|
||||||
|
currentComp: 'map',
|
||||||
|
cacheData:{}
|
||||||
|
},
|
||||||
|
mutations: {
|
||||||
|
phone(state, o) {
|
||||||
|
state.phone = o;
|
||||||
|
},
|
||||||
|
login(state, o) {
|
||||||
|
state.userInfo = o
|
||||||
|
state.login = true
|
||||||
|
state.loginTime = new Date().getTime()
|
||||||
|
},
|
||||||
|
logout(state)
|
||||||
|
{
|
||||||
|
state.userInfo=null
|
||||||
|
state.login = false
|
||||||
|
},
|
||||||
|
},
|
||||||
|
getters: {
|
||||||
|
phone(state) {
|
||||||
|
return state.phone;
|
||||||
|
},
|
||||||
|
isLogin(state) {
|
||||||
|
if (state.login && state.userInfo !== null )
|
||||||
|
{
|
||||||
|
if ((new Date().getTime() - state.loginTime) < state.second * 1000 )
|
||||||
|
{
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
},
|
||||||
|
isSuper(state, getters) {
|
||||||
|
if(getters.isLogin)
|
||||||
|
{
|
||||||
|
if(state.userInfo.permission == 0xfff)
|
||||||
|
{
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
},
|
||||||
|
isProject(state, getters)
|
||||||
|
{
|
||||||
|
if(getters.isLogin)
|
||||||
|
{
|
||||||
|
if(state.userInfo.permission == 0x0ff)
|
||||||
|
{
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
},
|
||||||
|
isAnayone(state, getters)
|
||||||
|
{
|
||||||
|
if(getters.isLogin)
|
||||||
|
{
|
||||||
|
if(state.userInfo.permission == 0x000)
|
||||||
|
{
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
},
|
||||||
|
isNormal(state, getters)
|
||||||
|
{
|
||||||
|
if(getters.isLogin)
|
||||||
|
{
|
||||||
|
if(state.userInfo.permission == 0x00f)
|
||||||
|
{
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
plugins: [storeToSession]
|
||||||
})
|
})
|
||||||
|
|
||||||
export default store
|
export default store
|
@ -10,7 +10,7 @@ module.exports = {
|
|||||||
proxy: {
|
proxy: {
|
||||||
'/backend': {
|
'/backend': {
|
||||||
// target: 'http://223.75.53.208:8081',
|
// target: 'http://223.75.53.208:8081',
|
||||||
target: 'http://127.0.0.1:8000',
|
target: 'http://127.0.0.1:7788',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user