临时提交
This commit is contained in:
parent
787fe619f5
commit
2dc2ac94d5
|
@ -19,6 +19,26 @@ export function login(username, password, code, uuid) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 普通用户登录方法
|
||||||
|
export function userLogin(username, password, code, uuid) {
|
||||||
|
const data = {
|
||||||
|
username,
|
||||||
|
password,
|
||||||
|
code,
|
||||||
|
uuid
|
||||||
|
}
|
||||||
|
return request({
|
||||||
|
url: '/userLogin',
|
||||||
|
headers: {
|
||||||
|
isToken: false,
|
||||||
|
repeatSubmit: false
|
||||||
|
},
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 注册方法
|
// 注册方法
|
||||||
export function register(data) {
|
export function register(data) {
|
||||||
return request({
|
return request({
|
||||||
|
@ -57,4 +77,4 @@ export function getCodeImg() {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
timeout: 20000
|
timeout: 20000
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,14 +9,6 @@
|
||||||
<template v-if="device!=='mobile'">
|
<template v-if="device!=='mobile'">
|
||||||
<search id="header-search" class="right-menu-item" />
|
<search id="header-search" class="right-menu-item" />
|
||||||
|
|
||||||
<el-tooltip content="源码地址" effect="dark" placement="bottom">
|
|
||||||
<ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />
|
|
||||||
</el-tooltip>
|
|
||||||
|
|
||||||
<el-tooltip content="文档地址" effect="dark" placement="bottom">
|
|
||||||
<ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />
|
|
||||||
</el-tooltip>
|
|
||||||
|
|
||||||
<screenfull id="screenfull" class="right-menu-item hover-effect" />
|
<screenfull id="screenfull" class="right-menu-item hover-effect" />
|
||||||
|
|
||||||
<el-tooltip content="布局大小" effect="dark" placement="bottom">
|
<el-tooltip content="布局大小" effect="dark" placement="bottom">
|
||||||
|
@ -31,7 +23,7 @@
|
||||||
<i class="el-icon-caret-bottom" />
|
<i class="el-icon-caret-bottom" />
|
||||||
</div>
|
</div>
|
||||||
<el-dropdown-menu slot="dropdown">
|
<el-dropdown-menu slot="dropdown">
|
||||||
<router-link to="/user/profile">
|
<router-link to="/user/profile" v-if="userType === UserType.ADMIN">
|
||||||
<el-dropdown-item>个人中心</el-dropdown-item>
|
<el-dropdown-item>个人中心</el-dropdown-item>
|
||||||
</router-link>
|
</router-link>
|
||||||
<el-dropdown-item @click.native="setting = true">
|
<el-dropdown-item @click.native="setting = true">
|
||||||
|
@ -56,6 +48,7 @@ import SizeSelect from '@/components/SizeSelect'
|
||||||
import Search from '@/components/HeaderSearch'
|
import Search from '@/components/HeaderSearch'
|
||||||
import RuoYiGit from '@/components/RuoYi/Git'
|
import RuoYiGit from '@/components/RuoYi/Git'
|
||||||
import RuoYiDoc from '@/components/RuoYi/Doc'
|
import RuoYiDoc from '@/components/RuoYi/Doc'
|
||||||
|
import { UserType } from '@/utils/constants'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
|
@ -69,10 +62,14 @@ export default {
|
||||||
RuoYiDoc
|
RuoYiDoc
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
UserType() {
|
||||||
|
return UserType
|
||||||
|
},
|
||||||
...mapGetters([
|
...mapGetters([
|
||||||
'sidebar',
|
'sidebar',
|
||||||
'avatar',
|
'avatar',
|
||||||
'device'
|
'device',
|
||||||
|
'userType'
|
||||||
]),
|
]),
|
||||||
setting: {
|
setting: {
|
||||||
get() {
|
get() {
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
<script>
|
<script>
|
||||||
import logoImg from '@/assets/logo/logo.png'
|
import logoImg from '@/assets/logo/logo.png'
|
||||||
import variables from '@/assets/styles/variables.scss'
|
import variables from '@/assets/styles/variables.scss'
|
||||||
|
import { mapGetters } from 'vuex'
|
||||||
|
import { UserType } from '@/utils/constants'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'SidebarLogo',
|
name: 'SidebarLogo',
|
||||||
|
@ -26,19 +28,19 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
...mapGetters(["userType", "title"]),
|
||||||
variables() {
|
variables() {
|
||||||
return variables;
|
return variables;
|
||||||
},
|
},
|
||||||
sideTheme() {
|
sideTheme() {
|
||||||
return this.$store.state.settings.sideTheme
|
return this.$store.state.settings.sideTheme
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
title: process.env.VUE_APP_TITLE,
|
|
||||||
logo: logoImg
|
logo: logoImg
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,8 @@ const getters = {
|
||||||
token: state => state.user.token,
|
token: state => state.user.token,
|
||||||
avatar: state => state.user.avatar,
|
avatar: state => state.user.avatar,
|
||||||
name: state => state.user.name,
|
name: state => state.user.name,
|
||||||
|
userType: state => state.user.userType,
|
||||||
|
title: state => state.user.title,
|
||||||
introduction: state => state.user.introduction,
|
introduction: state => state.user.introduction,
|
||||||
roles: state => state.user.roles,
|
roles: state => state.user.roles,
|
||||||
permissions: state => state.user.permissions,
|
permissions: state => state.user.permissions,
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { login, logout, getInfo } from '@/api/login'
|
import { login, logout, getInfo, userLogin } from '@/api/login'
|
||||||
import { getToken, setToken, removeToken } from '@/utils/auth'
|
import { getToken, setToken, removeToken } from '@/utils/auth'
|
||||||
|
import { UserType } from '@/utils/constants'
|
||||||
|
|
||||||
const user = {
|
const user = {
|
||||||
state: {
|
state: {
|
||||||
|
@ -8,7 +9,9 @@ const user = {
|
||||||
name: '',
|
name: '',
|
||||||
avatar: '',
|
avatar: '',
|
||||||
roles: [],
|
roles: [],
|
||||||
permissions: []
|
permissions: [],
|
||||||
|
userType: '',
|
||||||
|
title: process.env.VUE_APP_TITLE
|
||||||
},
|
},
|
||||||
|
|
||||||
mutations: {
|
mutations: {
|
||||||
|
@ -29,6 +32,12 @@ const user = {
|
||||||
},
|
},
|
||||||
SET_PERMISSIONS: (state, permissions) => {
|
SET_PERMISSIONS: (state, permissions) => {
|
||||||
state.permissions = permissions
|
state.permissions = permissions
|
||||||
|
},
|
||||||
|
SET_USER_TYPE: (state, userType) => {
|
||||||
|
state.userType = userType
|
||||||
|
},
|
||||||
|
SET_TITLE: (state, title) => {
|
||||||
|
state.title = title;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -41,6 +50,23 @@ const user = {
|
||||||
const uuid = userInfo.uuid
|
const uuid = userInfo.uuid
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
login(username, password, code, uuid).then(res => {
|
login(username, password, code, uuid).then(res => {
|
||||||
|
setToken(res.token)
|
||||||
|
commit('SET_USER_TYPE', UserType.ADMIN)
|
||||||
|
commit('SET_TOKEN', res.token)
|
||||||
|
resolve()
|
||||||
|
}).catch(error => {
|
||||||
|
reject(error)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 普通用户登录
|
||||||
|
UserLogin({ commit }, userInfo) {
|
||||||
|
const username = userInfo.username.trim()
|
||||||
|
const password = userInfo.password
|
||||||
|
const code = userInfo.code
|
||||||
|
const uuid = userInfo.uuid
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
userLogin(username, password, code, uuid).then(res => {
|
||||||
setToken(res.token)
|
setToken(res.token)
|
||||||
commit('SET_TOKEN', res.token)
|
commit('SET_TOKEN', res.token)
|
||||||
resolve()
|
resolve()
|
||||||
|
@ -49,7 +75,6 @@ const user = {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
// 获取用户信息
|
// 获取用户信息
|
||||||
GetInfo({ commit, state }) {
|
GetInfo({ commit, state }) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
@ -65,6 +90,12 @@ const user = {
|
||||||
commit('SET_ID', user.userId)
|
commit('SET_ID', user.userId)
|
||||||
commit('SET_NAME', user.userName)
|
commit('SET_NAME', user.userName)
|
||||||
commit('SET_AVATAR', avatar)
|
commit('SET_AVATAR', avatar)
|
||||||
|
|
||||||
|
let userType = res.userType;
|
||||||
|
commit('SET_USER_TYPE', userType)
|
||||||
|
if (userType === UserType.APP) {
|
||||||
|
commit('SET_TITLE', "智能开关-商户中心")
|
||||||
|
}
|
||||||
resolve(res)
|
resolve(res)
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
reject(error)
|
reject(error)
|
||||||
|
|
|
@ -2,3 +2,8 @@
|
||||||
export const views = {
|
export const views = {
|
||||||
user: 'user',
|
user: 'user',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const UserType = {
|
||||||
|
ADMIN: "1", // 管理员
|
||||||
|
APP: "2" // 普通用户
|
||||||
|
}
|
||||||
|
|
|
@ -15,6 +15,5 @@ export function getWxIndexUrl(query) {
|
||||||
url += `?${query}`;
|
url += `?${query}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log("wx_url", url);
|
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,26 +1,27 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="dashboard-editor-container">
|
<div class="dashboard-editor-container">
|
||||||
|
<template v-if="userType === UserType.ADMIN">
|
||||||
|
<el-card header="舆情分析" class="card-box">
|
||||||
|
<brief />
|
||||||
|
</el-card>
|
||||||
|
|
||||||
<el-card header="舆情分析" class="card-box">
|
<el-row :gutter="8">
|
||||||
<brief />
|
<el-col :span="12">
|
||||||
</el-card>
|
<el-card header="每日充值提现" class="card-box">
|
||||||
|
<daily-bill-report />
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-card header="每日充值利润" class="card-box">
|
||||||
|
<daily-profit-report />
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
<el-row :gutter="8">
|
<el-card header="余额时段分析" class="card-box">
|
||||||
<el-col :span="12">
|
<balance-period-report/>
|
||||||
<el-card header="每日充值提现" class="card-box">
|
</el-card>
|
||||||
<daily-bill-report />
|
</template>
|
||||||
</el-card>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-card header="每日充值利润" class="card-box">
|
|
||||||
<daily-profit-report />
|
|
||||||
</el-card>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-card header="余额时段分析" class="card-box">
|
|
||||||
<balance-period-report/>
|
|
||||||
</el-card>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -30,6 +31,8 @@ import DailyBillReport from "@/views/dashboard/DailyBillReport.vue";
|
||||||
import BalancePeriodReport from "@/views/dashboard/BalancePeriodReport.vue";
|
import BalancePeriodReport from "@/views/dashboard/BalancePeriodReport.vue";
|
||||||
import Brief from "@/views/dashboard/Brief.vue";
|
import Brief from "@/views/dashboard/Brief.vue";
|
||||||
import DailyProfitReport from "@/views/dashboard/DailyProfitReport.vue";
|
import DailyProfitReport from "@/views/dashboard/DailyProfitReport.vue";
|
||||||
|
import { mapGetters } from 'vuex'
|
||||||
|
import { UserType } from '@/utils/constants'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Index',
|
name: 'Index',
|
||||||
|
@ -39,13 +42,12 @@ export default {
|
||||||
BalancePeriodReport,
|
BalancePeriodReport,
|
||||||
DailyBillReport,
|
DailyBillReport,
|
||||||
},
|
},
|
||||||
data() {
|
computed: {
|
||||||
return {
|
UserType() {
|
||||||
|
return UserType
|
||||||
}
|
},
|
||||||
|
...mapGetters(["userType"]),
|
||||||
},
|
},
|
||||||
methods: {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,18 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="login">
|
<div class="login">
|
||||||
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
|
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
|
||||||
<h3 class="title">智能开关后台管理系统</h3>
|
<!-- <h3 class="title">智能开关后台管理系统</h3>-->
|
||||||
|
<el-tabs v-model="loginType">
|
||||||
|
<el-tab-pane label="管理员登录" name="admin"/>
|
||||||
|
<el-tab-pane label="商户登录" name="mch"/>
|
||||||
|
</el-tabs>
|
||||||
|
|
||||||
<el-form-item prop="username">
|
<el-form-item prop="username">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="loginForm.username"
|
v-model="loginForm.username"
|
||||||
type="text"
|
type="text"
|
||||||
auto-complete="off"
|
auto-complete="off"
|
||||||
placeholder="账号"
|
placeholder="账号/手机号"
|
||||||
>
|
>
|
||||||
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
|
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
|
||||||
</el-input>
|
</el-input>
|
||||||
|
@ -70,17 +75,19 @@ export default {
|
||||||
name: "Login",
|
name: "Login",
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
// 登录类型
|
||||||
|
loginType: "admin",
|
||||||
codeUrl: "",
|
codeUrl: "",
|
||||||
loginForm: {
|
loginForm: {
|
||||||
username: "admin",
|
username: null,
|
||||||
password: "admin123",
|
password: null,
|
||||||
rememberMe: false,
|
rememberMe: false,
|
||||||
code: "",
|
code: "",
|
||||||
uuid: ""
|
uuid: ""
|
||||||
},
|
},
|
||||||
loginRules: {
|
loginRules: {
|
||||||
username: [
|
username: [
|
||||||
{ required: true, trigger: "blur", message: "请输入您的账号" }
|
{ required: true, trigger: "blur", message: "请输入您的账号/手机号" }
|
||||||
],
|
],
|
||||||
password: [
|
password: [
|
||||||
{ required: true, trigger: "blur", message: "请输入您的密码" }
|
{ required: true, trigger: "blur", message: "请输入您的密码" }
|
||||||
|
@ -101,6 +108,12 @@ export default {
|
||||||
this.redirect = route.query && route.query.redirect;
|
this.redirect = route.query && route.query.redirect;
|
||||||
},
|
},
|
||||||
immediate: true
|
immediate: true
|
||||||
|
},
|
||||||
|
loginType(nv, ov) {
|
||||||
|
// if (nv != ov) {
|
||||||
|
// this.loginForm.username = null;
|
||||||
|
// this.loginForm.password = null;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
|
@ -140,14 +153,25 @@ export default {
|
||||||
Cookies.remove("password");
|
Cookies.remove("password");
|
||||||
Cookies.remove('rememberMe');
|
Cookies.remove('rememberMe');
|
||||||
}
|
}
|
||||||
this.$store.dispatch("Login", this.loginForm).then(() => {
|
if (this.loginType === "admin") {
|
||||||
this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
|
this.$store.dispatch("Login", this.loginForm).then(() => {
|
||||||
}).catch(() => {
|
this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
|
||||||
this.loading = false;
|
}).catch(() => {
|
||||||
if (this.captchaEnabled) {
|
this.loading = false;
|
||||||
this.getCode();
|
if (this.captchaEnabled) {
|
||||||
}
|
this.getCode();
|
||||||
});
|
}
|
||||||
|
});
|
||||||
|
} else if (this.loginType === "mch") {
|
||||||
|
this.$store.dispatch("UserLogin", this.loginForm).then(() => {
|
||||||
|
this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
|
||||||
|
}).catch(() => {
|
||||||
|
this.loading = false;
|
||||||
|
if (this.captchaEnabled) {
|
||||||
|
this.getCode();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,7 +144,7 @@
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="价格" prop="price">
|
<el-form-item label="价格" prop="price">
|
||||||
<el-input-number v-model="form.price" placeholder="请输入价格(元)" :min="0.01" :precision="2"/> 元
|
<el-input-number v-model="form.price" placeholder="请输入价格(元)" :min="0" :precision="2"/> 元
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="详细说明" prop="description">
|
<el-form-item label="详细说明" prop="description">
|
||||||
<el-input v-model="form.description" placeholder="请输入详细说明" type="textarea" />
|
<el-input v-model="form.description" placeholder="请输入详细说明" type="textarea" />
|
||||||
|
|
Loading…
Reference in New Issue
Block a user