在开发陪玩游戏源码时,不仅需要开发Android端和iOS端,还需要开发服务端,也就是后台管理系统,由于后天管理系统掌控者用户端的陪玩游戏源码使用效果,所以非常重要,今天我们先来了解一下号后台管理系统中的基础功能模块,也就是登录页的实现。
陪玩游戏源码的登录页面开发:
1.用户名和密码input标签中使用name属性,通过e.target.name可以获取(Bootstrap文档组件-panel完成登录界面)
import React from 'react';
import MUtil from 'util/mm.jsx'
import User from 'service/user-service.jsx'
const _mm = new MUtil();
const _user = new User();
import './index.scss';
class Login extends React.Component{
constructor(props){
super(props);
this.state = {
username: '',
password: '',
redirect: _mm.getUrlParam('redirect') || '/'
}
}
componentWillMount(){
document.title = '登录 - MMALL ADMIN';
}
// 当用户名、密码发生改变
onInputChange(e){
let inputValue = e.target.value,
inputName = e.target.name;
this.setState({
[inputName] : inputValue
});
}
onInputKeyUp(e){
if(e.keyCode === 13){
this.onSubmit();
}
}
// 当用户提交表单
onSubmit(){
let loginInfo = {
username : this.state.username,
password : this.state.password
},
checkResult = _user.checkLoginInfo(loginInfo);
// 验证通过
if(checkResult.status){
_user.login(loginInfo).then((res) => {
_mm.setStorage('userInfo', res);
this.props.history.push(this.state.redirect);
}, (errMsg) => {
_mm.errorTips(errMsg);
});
}
// 验证不通过
else{
_mm.errorTips(checkResult.msg);
}
}
render(){
return (
<div className="col-md-4 col-md-offset-4">
<div className="panel panel-default login-panel">
<div className="panel-heading">欢迎登录 - MMALL管理系统</div>
<div className="panel-body">
<div>
<div className="form-group">
<input type="text"
name="username"
className="form-control"
placeholder="请输入用户名"
onKeyUp={e => this.onInputKeyUp(e)}
onChange={e => this.onInputChange(e)}/>
</div>
<div className="form-group">
<input type="password"
name="password"
className="form-control"
placeholder="请输入密码"
onKeyUp={e => this.onInputKeyUp(e)}
onChange={e => this.onInputChange(e)}/>
</div>
<button className="btn btn-lg btn-primary btn-block"
onClick={e => {this.onSubmit(e)}}>登录</button>
</div>
</div>
</div>
</div>
);
}
}
export default Login;
2.index.html引用jquery的CDN版本
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
3.src->util->mm.jsx封装ajax请求
class MUtil{
request(param){
return new Promise((resolve, reject) => {
$.ajax({
type : param.type || 'get',
url : param.url || '',
dataType : param.dataType || 'json',
data : param.data || null,
success : res => {
//console.log(res)
// 数据请求成功
if(0 === res.status){
typeof resolve === 'function' && resolve(res.data, res.msg);
}
// 没有登录状态,强制登录
else if(10 === res.status){
this.doLogin();
}
else{
typeof reject === 'function' && reject(res.msg || res.data);
}
},
error : err => {
//console.log(err)
typeof reject === 'function' && reject(err.statusText);
}
});
});
}
// 跳转登录
doLogin(){
window.location.href = '/login?redirect=' + encodeURIComponent(window.location.pathname);
}
// 获取URL参数
getUrlParam(name){
// xxxx.com?param=123¶m1=456
let queryString = window.location.search.split('?')[1] || '',
reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"),
result = queryString.match(reg);
//result: ['param=123', '', '123', '&']
return result ? decodeURIComponent(result[2]) : null;
}
// 成功提示
successTips(successMsg){
alert(successMsg || '操作成功!');
}
// 错误提示
errorTips(errMsg){
alert(errMsg || '好像哪里不对了~');
}
// 本地存储
setStorage(name, data){
let dataType = typeof data;
// json对象
if(dataType === 'object'){
window.localStorage.setItem(name, JSON.stringify(data));
}
// 基础类型
else if(['number','string','boolean'].indexOf(dataType) >= 0){
window.localStorage.setItem(name, data);
}
// 其他不支持的类型
else{
alert('该类型不能用于本地存储');
}
}
// 取出本地存储内容
getStorage(name){
let data = window.localStorage.getItem(name);
if(data){
return JSON.parse(data);
}
else{
return '';
}
}
// 删除本地存储
removeStorage(name){
window.localStorage.removeItem(name);
}
}
export default MUtil;
陪玩游戏源码后台用户接口的response
4.webpack中配置proxy服务端代理跨域
class MUtil{
request(param){
return new Promise((resolve, reject) => {
$.ajax({
type : param.type || 'get',
url : param.url || '',
dataType : param.dataType || 'json',
data : param.data || null,
success : res => {
//console.log(res)
// 数据请求成功
if(0 === res.status){
typeof resolve === 'function' && resolve(res.data, res.msg);
}
// 没有登录状态,强制登录
else if(10 === res.status){
this.doLogin();
}
else{
typeof reject === 'function' && reject(res.msg || res.data);
}
},
error : err => {
//console.log(err)
typeof reject === 'function' && reject(err.statusText);
}
});
});
}
// 跳转登录
doLogin(){
window.location.href = '/login?redirect=' + encodeURIComponent(window.location.pathname);
}
// 获取URL参数
getUrlParam(name){
// xxxx.com?param=123¶m1=456
let queryString = window.location.search.split('?')[1] || '',
reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"),
result = queryString.match(reg);
//result: ['param=123', '', '123', '&']
return result ? decodeURIComponent(result[2]) : null;
}
// 成功提示
successTips(successMsg){
alert(successMsg || '操作成功!');
}
// 错误提示
errorTips(errMsg){
alert(errMsg || '好像哪里不对了~');
}
// 本地存储
setStorage(name, data){
let dataType = typeof data;
// json对象
if(dataType === 'object'){
window.localStorage.setItem(name, JSON.stringify(data));
}
// 基础类型
else if(['number','string','boolean'].indexOf(dataType) >= 0){
window.localStorage.setItem(name, data);
}
// 其他不支持的类型
else{
alert('该类型不能用于本地存储');
}
}
// 取出本地存储内容
getStorage(name){
let data = window.localStorage.getItem(name);
if(data){
return JSON.parse(data);
}
else{
return '';
}
}
// 删除本地存储
removeStorage(name){
window.localStorage.removeItem(name);
}
}
export default MUtil;
5.把数据请求接口分到src->service->user-service.jsx中
class MUtil{
request(param){
return new Promise((resolve, reject) => {
$.ajax({
type : param.type || 'get',
url : param.url || '',
dataType : param.dataType || 'json',
data : param.data || null,
success : res => {
//console.log(res)
// 数据请求成功
if(0 === res.status){
typeof resolve === 'function' && resolve(res.data, res.msg);
}
// 没有登录状态,强制登录
else if(10 === res.status){
this.doLogin();
}
else{
typeof reject === 'function' && reject(res.msg || res.data);
}
},
error : err => {
//console.log(err)
typeof reject === 'function' && reject(err.statusText);
}
});
});
}
// 跳转登录
doLogin(){
window.location.href = '/login?redirect=' + encodeURIComponent(window.location.pathname);
}
// 获取URL参数
getUrlParam(name){
// xxxx.com?param=123¶m1=456
let queryString = window.location.search.split('?')[1] || '',
reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"),
result = queryString.match(reg);
//result: ['param=123', '', '123', '&']
return result ? decodeURIComponent(result[2]) : null;
}
// 成功提示
successTips(successMsg){
alert(successMsg || '操作成功!');
}
// 错误提示
errorTips(errMsg){
alert(errMsg || '好像哪里不对了~');
}
// 本地存储
setStorage(name, data){
let dataType = typeof data;
// json对象
if(dataType === 'object'){
window.localStorage.setItem(name, JSON.stringify(data));
}
// 基础类型
else if(['number','string','boolean'].indexOf(dataType) >= 0){
window.localStorage.setItem(name, data);
}
// 其他不支持的类型
else{
alert('该类型不能用于本地存储');
}
}
// 取出本地存储内容
getStorage(name){
let data = window.localStorage.getItem(name);
if(data){
return JSON.parse(data);
}
else{
return '';
}
}
// 删除本地存储
removeStorage(name){
window.localStorage.removeItem(name);
}
}
export default MUtil;
6.webpack中配置util和service的resolve
class MUtil{
request(param){
return new Promise((resolve, reject) => {
$.ajax({
type : param.type || 'get',
url : param.url || '',
dataType : param.dataType || 'json',
data : param.data || null,
success : res => {
//console.log(res)
// 数据请求成功
if(0 === res.status){
typeof resolve === 'function' && resolve(res.data, res.msg);
}
// 没有登录状态,强制登录
else if(10 === res.status){
this.doLogin();
}
else{
typeof reject === 'function' && reject(res.msg || res.data);
}
},
error : err => {
//console.log(err)
typeof reject === 'function' && reject(err.statusText);
}
});
});
}
// 跳转登录
doLogin(){
window.location.href = '/login?redirect=' + encodeURIComponent(window.location.pathname);
}
// 获取URL参数
getUrlParam(name){
// xxxx.com?param=123¶m1=456
let queryString = window.location.search.split('?')[1] || '',
reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"),
result = queryString.match(reg);
//result: ['param=123', '', '123', '&']
return result ? decodeURIComponent(result[2]) : null;
}
// 成功提示
successTips(successMsg){
alert(successMsg || '操作成功!');
}
// 错误提示
errorTips(errMsg){
alert(errMsg || '好像哪里不对了~');
}
// 本地存储
setStorage(name, data){
let dataType = typeof data;
// json对象
if(dataType === 'object'){
window.localStorage.setItem(name, JSON.stringify(data));
}
// 基础类型
else if(['number','string','boolean'].indexOf(dataType) >= 0){
window.localStorage.setItem(name, data);
}
// 其他不支持的类型
else{
alert('该类型不能用于本地存储');
}
}
// 取出本地存储内容
getStorage(name){
let data = window.localStorage.getItem(name);
if(data){
return JSON.parse(data);
}
else{
return '';
}
}
// 删除本地存储
removeStorage(name){
window.localStorage.removeItem(name);
}
}
export default MUtil;
到这陪玩游戏源码中后台管理系统的登录页面基本就完成了,虽然过程比较复杂,但好在实现的效果还不错,希望对大家有帮助。