临时提交

This commit is contained in:
墨大叔 2024-07-27 14:29:26 +08:00
parent 787fe619f5
commit 2dc2ac94d5
10 changed files with 139 additions and 57 deletions

View File

@ -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
}) })
} }

View File

@ -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() {

View File

@ -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>

View File

@ -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,

View File

@ -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)

View File

@ -2,3 +2,8 @@
export const views = { export const views = {
user: 'user', user: 'user',
} }
export const UserType = {
ADMIN: "1", // 管理员
APP: "2" // 普通用户
}

View File

@ -15,6 +15,5 @@ export function getWxIndexUrl(query) {
url += `?${query}`; url += `?${query}`;
} }
} }
console.log("wx_url", url);
return url; return url;
} }

View File

@ -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>

View File

@ -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();
}
});
}
} }
}); });
} }

View File

@ -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" />