在开发陪玩游戏源码时,不仅需要开发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&param1=456let 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&param1=456let 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&param1=456let 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&param1=456let 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;

到这陪玩游戏源码中后台管理系统的登录页面基本就完成了,虽然过程比较复杂,但好在实现的效果还不错,希望对大家有帮助。

开发陪玩游戏源码的后台管理系统,登录的实现是第一步!相关推荐

  1. 在线生鲜订购配送系统,生鲜订购系统 生鲜配送系统 前端+后台 Android源码+SSH后台管理系统+MySQL数据库

    在线生鲜订购配送的系统,包括Android源码+SSH后台管理系统+MySQL数据库. 客服端:功能划分如下 1.我的 登录:账户+密码+验证码 注册:邮箱/手机号注册 订单管理:查看/删除(显示订单 ...

  2. Java开发陪玩系统源码小程序app详细介绍

    Java开发的陪玩系统源码小程序app以下是它的功能介绍: 一.用户端: 1. 用户注册与登录:用户可以使用手机号或微信登录进行注册. 2. 服务列表:用户可以浏览选择陪玩师提供的服务类型和价格,包括 ...

  3. QT西游回合制源码+java后台管理系统

    这是一款回合制的游戏,和梦话西游类似的Q版卡通游戏.全套代码很全,包含一件安装部署程序,mysql数据库,java管理后台,QT游戏模块,网关模块,充值+代理提成模块.其中代码注释很全,很适合个人学习 ...

  4. 生鲜o2o配送开源系统,包括Android源码+SSH后台管理系统

    生鲜O2O系统,移动端为android项目,后台为S2SH+BUI+Bootstrap项目,数据库使用MySql. 源码下载地址: 前台功能划分     我的 登录             账户+密码 ...

  5. android订单管理系统源码,生鲜o2o配送开源系统,包括Android源码+SSH后台管理系统...

    项目描述 生鲜O2O系统,移动端为android项目,后台为S2SH+BUI+Bootstrap项目,数据库使用MySql. 运行环境 后台管理系统环境:jdk7+tomcat7+mysql5.6+I ...

  6. 扫描二维码实现后台管理系统登录

    二维码实现后台登录简单版的过程: 1.前端页面实时生成带有唯一标识uid的二维码,二维码内容为系统内的接口.(后端也可以生成) 2.当扫描二维码时访问后台接口,后台的接口获取uid,组装数据访问微信端 ...

  7. 汇编 debug调试没有执行对应文件源码指令---》失灵---》正确使用debug第一步

    汇编 debug调试时 没有执行 对应文件源码指令 果然不认真听课就是这样 把调试命令 debug test.exe 错误写成 debug test.asm 并一直使用多达两周时长 我真是个人才Σ( ...

  8. 亲测仿养了个养三消游戏源码+带后台版

    正文: 游戏玩儿法类似于养了个养,有两种模式,一个是普通版,一个是王者荣耀版,其它的就没什么好介绍的了,有兴趣的自行去体验吧. 程序: wwesfd.lanzoue.com/ifp7o0dhlyne ...

  9. 游戏陪玩平台源码开发,锁屏状态下消息提醒的实现

    当游戏陪玩平台源码在后台运行时,如果用户关闭了手机屏幕(手机进入灭屏休眠状态),这个时候有消息进来怎么办?这就需要在游戏陪玩平台源码开发时实现手机锁屏状态下消息提醒功能. 解决思路: 1.游戏陪玩平台 ...

最新文章

  1. 深入理解JWT的使用场景和优劣
  2. OpenStack架构企业IT应用的敏捷实践
  3. onblur 对象失去焦点事件
  4. 如何编写多client多公司的增强
  5. 联通4g满格但是网速慢_手机信号明明满格?网速却非常慢,原来其中讲究这么大,涨知识了...
  6. 后端需要掌握的技术_何小伟:软件测试需要掌握的技术?
  7. 通过简单的Spring方面摆脱null参数
  8. Android平台RTMP推送端实现外部数据对接推送和录像
  9. C#深入解析数据类型
  10. 网络采集软件核心技术剖析系列(1)---如何使用C#语言获取博客园某个博主的全部随笔链接及标题...
  11. BaiduPan百度网盘不限速教程
  12. iOS开发常用三方库、插件、知名博客等等
  13. 7、线性方程组详细解法
  14. java实现在线预览的功能(一)word转html
  15. excel 置信区间 计算_Excel 计算置信区间:CONFIDENCE函数详解
  16. 在线教育项目【老师服务】
  17. imx8mq-evk快速启动-方案讨论,准备工作
  18. 队列的定义、循环队列的顺序存储结构及链式存储结构
  19. python学习------面向对象的程序设计
  20. 2022年全球及中国公共安全无线通信系统行业头部企业市场占有率及排名调研报告

热门文章

  1. 对南摩工程师有需求的大老板们 老板姓名
  2. win10更新出现蓝屏怎么办
  3. 【区块链108将】对话星河互联王磊:关于区块链 传统VC不怕投错怕踏空
  4. Internet Explorer 已经阻止此站点以不安全的方式使用ActiveX控件(多种解决方法)
  5. 使用Loadrunner打开WebTours录制脚本时提示“应用程序已被Java安全阻止”如何解决
  6. 2021-08-19hit-oslab3进程运行的轨迹跟踪和实验统计
  7. DNS:域名服务/系统
  8. 状态驱动的游戏智能体设计(中)
  9. 谁能给你机会,让你如愿以偿
  10. git clone 多个_git远程仓库