@@ -8,10 +8,12 @@ | |||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
<meta name="keywords" content="" /> | |||
<meta name="description" content="" /> | |||
<link href="/static/css/main.css" rel="stylesheet" type="text/css" /> | |||
</head> | |||
<body> | |||
<div class="main"> | |||
<p class="btnclick">sssss</p> | |||
<script id="nav-mian-text" type="text/html"> | |||
{{if isAdmin}} | |||
<h1>{{title}}</h1> | |||
@@ -28,7 +30,7 @@ | |||
</div> | |||
</body> | |||
<script src="static/js/common/require.js" data-main="static/js/common/main" id="require-page" current-page="index" | |||
target-module="static/js/project/index" defer type="text/javascript"></script> | |||
<script src="./static/js/common/require.js" data-main="./static/js/common/main" id="require-page" current-page="index" | |||
target-module="./project/index" defer type="text/javascript"></script> | |||
</html> |
@@ -0,0 +1,13 @@ | |||
/* nprogress公用CSS */ | |||
#nprogress {pointer-events: none;} | |||
#nprogress .bar { background: #29d; position: fixed; z-index: 1031; top: 0; left: 0; width: 100%; height: 2px; } | |||
/* Fancy blur effect */ | |||
#nprogress .peg { display: block; position: absolute; right: 0px; width: 100px; height: 100%; box-shadow: 0 0 10px #29d, 0 0 5px #29d; opacity: 1.0; -webkit-transform: rotate(3deg) translate(0px, -4px); -ms-transform: rotate(3deg) translate(0px, -4px); transform: rotate(3deg) translate(0px, -4px); } | |||
/* Remove these to get rid of the spinner */ | |||
#nprogress .spinner { display: block; position: fixed; z-index: 1031; top: 15px; right: 15px; } | |||
#nprogress .spinner-icon { width: 18px; height: 18px; box-sizing: border-box; border: solid 2px transparent; border-top-color: #29d; border-left-color: #29d; border-radius: 50%; -webkit-animation: nprogress-spinner 400ms linear infinite; animation: nprogress-spinner 400ms linear infinite; } | |||
.nprogress-custom-parent { overflow: hidden; position: relative; } | |||
.nprogress-custom-parent #nprogress .spinner, | |||
.nprogress-custom-parent #nprogress .bar { position: absolute; } | |||
@-webkit-keyframes nprogress-spinner { 0% { -webkit-transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); } } | |||
@keyframes nprogress-spinner { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } |
@@ -0,0 +1,5 @@ | |||
/*-------------- | |||
* 用户登录、注册相关 | |||
-----------------*/ | |||
var captchaImage_get = '/captchaImage'; //图形验证码接口 | |||
var login_post = '/login'; //用户登录接口 |
@@ -1,23 +1,24 @@ | |||
requirejs.config({ | |||
urlArgs: "ver=1.0_" + (new Date).getTime(), | |||
baseUrl: '/', | |||
baseUrl: '/static/js/', | |||
paths: { | |||
//第三方库的路径配置 | |||
jquery: 'static/js/lib/jquery/jquery-1.9.1.min', //jquery | |||
bootstrap: 'static/js/lib/bootstrap/js/bootstrap.min', //bootstrap | |||
jqueryCookie: 'static/js/lib/jquery-cookie/jquery.cookie', //cookie插件 | |||
template: 'static/js/lib/template/template', //模板引擎 | |||
templaten: 'static/js/lib/template/template-native', //模板引擎-后端写法 | |||
jqueryLazyload: 'static/js/lib/jQuery-plugins/jquery.lazyload.min', //图片延迟加载 | |||
dialog: 'static/js/lib/dialog/dialog', //artDialog弹窗插件 | |||
dialogConf: 'static/js/lib/dialog/dialog-config', | |||
drag: 'static/js/lib/dialog/drag', | |||
popup: 'static/js/lib/dialog/popup', | |||
swiper: 'static/js/lib/swiper/swiper.min', //焦点图插件 | |||
nprogress: 'static/js/lib/nprogress/nprogress', //页面加载loading组件 | |||
jquery: 'lib/jquery/jquery-1.9.1.min', //jquery | |||
bootstrap: 'lib/bootstrap/js/bootstrap.min', //bootstrap | |||
jqueryCookie: 'lib/jquery-cookie/jquery.cookie', //cookie插件 | |||
template: 'lib/template/template', //模板引擎 | |||
templaten: 'lib/template/template-native', //模板引擎-后端写法 | |||
jqueryLazyload: 'lib/jQuery-plugins/jquery.lazyload.min', //图片延迟加载 | |||
dialog: 'lib/dialog/dialog', //artDialog弹窗插件 | |||
dialogConf: 'lib/dialog/dialog-config', | |||
drag: 'lib/dialog/drag', | |||
popup: 'lib/dialog/popup', | |||
swiper: 'lib/swiper/swiper.min', //焦点图插件 | |||
nprogress: 'lib/nprogress/nprogress', //页面加载loading组件 | |||
//自己写的路径配置 | |||
Tools: 'static/js/common/tools', | |||
Tools: 'common/tools', | |||
API : 'api/index' //所有Ajax存放地 | |||
}, | |||
shim: { | |||
bootstrap: { | |||
@@ -42,9 +43,16 @@ requirejs.config({ | |||
}); | |||
//所有页面都需要的js,先行加载 | |||
require(['jquery', 'bootstrap', 'nprogress']); | |||
require(['jquery', 'bootstrap', 'nprogress',"API"]); | |||
require(["jquery"], function ($) { | |||
//ajax加载页面跳转 | |||
$(document).ajaxStart(function(){ | |||
$('.loading').show(); | |||
}).ajaxStop(function(){ | |||
$('.loading').hide(); | |||
}); | |||
//根据条件加载不同js文件 | |||
var currentPage = $("#require-page").attr("current-page"); | |||
var targetModule = $("#require-page").attr("target-module"); | |||
if (targetModule) { | |||
@@ -4,6 +4,7 @@ define(['jquery', 'dialog'], function ($, dialog) { | |||
this.version = "1.0.0"; | |||
this.description = "这是一个工具类"; | |||
} | |||
var ajaxJsUrl = "/api"; | |||
$.extend(Tool.prototype, { | |||
/** | |||
@@ -11,51 +12,67 @@ define(['jquery', 'dialog'], function ($, dialog) { | |||
* @param url (String) | |||
* @param data (Json) 需要提交的数据 | |||
* @param cb(Function) 回调函数 | |||
* @param noHead(Boolean) 是否需要Bearer | |||
*/ | |||
doPost: function (url, data, cb) { | |||
doPost: function (url, data, cb, noHead) { | |||
var _this = this; | |||
$.ajax({ | |||
url: url + '?=' + Math.random(), | |||
type: 'POST', | |||
data: data, | |||
beforeSend: function (xhr) { | |||
xhr.setRequestHeader("timestamp", getNowFormatDate()); | |||
xhr.setRequestHeader("x-auth-token", _this.getCookie('tokeId')); | |||
xhr.setRequestHeader("version", '1.1.6'); | |||
}, | |||
success: function (data) { | |||
cb(data); | |||
var headAttribute = ''; | |||
if(noHead && noHead==true){ | |||
headAttribute = function (xhr) { | |||
xhr.setRequestHeader("Content-Type", 'application/json;charset=utf-8'); | |||
} | |||
}); | |||
}, | |||
doGetJsonp: function (url, data, cb) { | |||
var _this = this; | |||
}else{ | |||
headAttribute = function (xhr) { | |||
xhr.setRequestHeader("Content-Type", 'application/json;charset=utf-8'); | |||
xhr.setRequestHeader('Authorization', 'Bearer ' + _this.getCookie('Admin-Token')) | |||
} | |||
} | |||
$.ajax({ | |||
url: url, | |||
dataType: "jsonp", | |||
data: data, | |||
beforeSend: function (xhr) { | |||
xhr.setRequestHeader("from", "weixin"); | |||
xhr.setRequestHeader("timestamp", getNowFormatDate()); | |||
xhr.setRequestHeader("x-auth-token", _this.getCookie('tokeId')); | |||
xhr.setRequestHeader("version", '1.1.6'); | |||
}, | |||
jsonp: "jsonpcallback", | |||
url: ajaxJsUrl+url + '?=' + Math.random(), | |||
type: 'POST', | |||
data: JSON.stringify(data), | |||
dataType:'json', | |||
contentType : "application/json", | |||
beforeSend: headAttribute, | |||
success: function (data) { | |||
cb(data); | |||
var code = data.code; | |||
var msg = data.msg; | |||
if(code === 401){ | |||
_this.initDialog('系统提示','登录状态已过期,您可以继续留在该页面,或者重新登录',function () { | |||
_this.skip('/user/login.html') | |||
},'重新登录',function () {},"取消") | |||
}else if(code === 500){ | |||
_this.initError(msg) | |||
cb(data); | |||
}else if(code !=200){ | |||
_this.initError(msg) | |||
}else{ | |||
cb(data); | |||
} | |||
} | |||
}); | |||
}, | |||
/** | |||
* ajax get | |||
* @param url(String) | |||
* @param data(Json) 需要提交的数据 | |||
* @param cb(Function) 回调函数 | |||
* @param noHead(Boolean) 是否需要Bearer | |||
*/ | |||
doGet: function (uri, data, cb) { | |||
doGet: function (uri, data, cb , noHead) { | |||
var _this = this; | |||
var url = uri + '?'; | |||
var url = ajaxJsUrl+uri + '?'; | |||
var headAttribute = '' | |||
if(noHead && noHead==true){ | |||
headAttribute = function (xhr) { | |||
xhr.setRequestHeader("Content-Type", 'application/json;charset=utf-8'); | |||
} | |||
}else{ | |||
headAttribute = function (xhr) { | |||
xhr.setRequestHeader("Content-Type", 'application/json;charset=utf-8'); | |||
xhr.setRequestHeader('Authorization', 'Bearer ' + _this.getCookie('Admin-Token')) | |||
} | |||
} | |||
if (data) { | |||
url += $.map(data, function (n, i) { | |||
if (i == data.length - 1) { | |||
@@ -69,17 +86,25 @@ define(['jquery', 'dialog'], function ($, dialog) { | |||
$.ajax({ | |||
url: url, | |||
type: 'GET', | |||
beforeSend: function (xhr) { | |||
xhr.setRequestHeader("from", "weixin"); | |||
xhr.setRequestHeader("timestamp", getNowFormatDate()); | |||
xhr.setRequestHeader("x-auth-token", _this.getCookie('tokeId')); | |||
xhr.setRequestHeader("version", '1.1.6'); | |||
}, | |||
beforeSend:headAttribute, | |||
success: function (data) { | |||
cb(data); | |||
var code = data.code; | |||
var msg = data.msg; | |||
if(code === 401){ | |||
_this.initDialog('系统提示','登录状态已过期,您可以继续留在该页面,或者重新登录',function () { | |||
_this.skip('/user/login.html') | |||
},'重新登录',function () {},"取消") | |||
}else if(code === 500){ | |||
_this.initError(msg) | |||
}else if(code !=200){ | |||
_this.initError(msg) | |||
}else{ | |||
cb(data); | |||
} | |||
} | |||
}); | |||
}, | |||
/** | |||
* 创建dialog | |||
* @param id(String) 创建的dialog的Id 用于分辨唯一的dialog | |||
@@ -197,6 +222,15 @@ define(['jquery', 'dialog'], function ($, dialog) { | |||
} | |||
return true; | |||
}, | |||
/** | |||
* skip 页面跳转 | |||
* @param url 跳转页面链接 | |||
*/ | |||
skip:function(url){ | |||
if(url!=''){ | |||
window.location = url | |||
} | |||
} | |||
}); | |||
return Tool; | |||
@@ -61,7 +61,7 @@ define({ | |||
// css 文件路径,留空则不会使用 js 自动加载样式 | |||
// 注意:css 只允许加载一个 | |||
cssUri: '../static/css/ui-dialog.css', | |||
cssUri: '../css/ui-dialog.css', | |||
// 模板(使用 table 解决 IE7 宽度自适应的 BUG) | |||
// js 使用 i="***" 属性识别结构,其余的均可自定义 | |||
@@ -10,11 +10,14 @@ define(['jquery', "template", "Tools"], function ($, template, Tools) { | |||
} | |||
}; | |||
var tools = new Tools(); | |||
module.init = function (page) { | |||
let _this = this; | |||
var navMian = template('nav-mian-text', module.initData); | |||
$("#nav-mian").html(navMian); | |||
}; | |||
module.login = function () { }; | |||
return module; |
@@ -0,0 +1,88 @@ | |||
/** | |||
* Created by liuminjian on 2021/4/5. | |||
* | |||
*/ | |||
define(['jquery', "template", "Tools"], function ($, template, Tools) { | |||
//数据存储 | |||
var module = { | |||
uuid:'' //验证码uuid | |||
}; | |||
//自定义方法 | |||
var tools = new Tools(); | |||
//默认进入页面加载方法 | |||
module.init = function (page) { | |||
//点击登录 | |||
$('#login-submit').on('click',module.login) | |||
//点击图形验证码 | |||
$('#graphicImg').on('click',module.verificationCode) | |||
//图形验证码加载 | |||
module.verificationCode() | |||
}; | |||
/*-----------------------------自定义方法-------------------------------------*/ | |||
//图形验证码 | |||
module.verificationCode = function(){ | |||
tools.doGet(captchaImage_get,{},module.verificationAjax,true) | |||
} | |||
module.verificationAjax = function(data){ | |||
if(data.code==200){ | |||
$('#graphicImg').attr('src','data:image/gif;base64,'+data.img) | |||
module.uuid = data.uuid; | |||
} | |||
} | |||
//用户登录 | |||
module.login = function () { | |||
if(module.check()){ | |||
var data = {}; | |||
var usernameVal = $('#username').val(); | |||
var passwordVal = $('#password').val(); | |||
var codeVal = $('#code').val(); | |||
data['username'] = usernameVal; | |||
data['password'] = passwordVal; | |||
data['code'] = codeVal; | |||
data['uuid'] = module.uuid; | |||
tools.doPost(login_post,data,module.loginData,true) | |||
} | |||
}; | |||
//手动验证表单 | |||
module.check = function(){ | |||
var usernameVal = $('#username').val(); | |||
var passwordVal = $('#password').val(); | |||
var codeVal = $('#code').val(); | |||
/* 手机号 */ | |||
if(usernameVal==''){ | |||
$('#username')[0].focus() | |||
tools.initTips('请输入用户名','right',$('#username')[0],2000) | |||
return false; | |||
} | |||
/* 密码 */ | |||
if(passwordVal ==''){ | |||
$('#password')[0].focus() | |||
tools.initTips('请输入密码','right',$('#password')[0],2000) | |||
return false; | |||
}else if(parseInt(passwordVal.length) < 6 || parseInt(passwordVal.length) > 18){ | |||
$('#password')[0].focus() | |||
tools.initTips('请输入正确格式密码','right',$('#password')[0],2000) | |||
return false; | |||
} | |||
/*图形验证码*/ | |||
if(module.uuid=='' || codeVal==''){ | |||
$('#code')[0].focus() | |||
tools.initTips('请输入图形验证码','right',$('#code')[0],2000) | |||
return false; | |||
} | |||
return true; | |||
} | |||
//登录校验 | |||
module.loginData = function(data){ | |||
if(data.code==500){ | |||
module.verificationCode() | |||
}else{ | |||
tools.setCookie('Admin-Token', data.token,24*60*60) | |||
tools.skip('/') | |||
} | |||
} | |||
return module; | |||
}); |
@@ -0,0 +1,29 @@ | |||
<!DOCTYPE HTML> | |||
<html> | |||
<head> | |||
<meta charset="utf-8"> | |||
<title>农燊高科-登录</title> | |||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | |||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
<meta name="keywords" content="" /> | |||
<meta name="description" content="" /> | |||
<link href="/static/css/main.css" rel="stylesheet" type="text/css" /> | |||
<style> | |||
.login-main{padding-top: 100px; width: 400px; margin:0 auto} | |||
</style> | |||
</head> | |||
<body> | |||
<div class="wrapper-main"> | |||
<div class="login-main"> | |||
<div>用户名:<input type="text" class="pass-text-input" id="username" value="admin"></div> | |||
<div>密码:<input type="text" class="pass-text-input" id="password" value="admin123"></div> | |||
<div>图形验证码:<input type="text" class="pass-text-input" id="code" value=""><img src="" id="graphicImg"/></div> | |||
<div><button class="pass-button" id="login-submit" type="submit">登录</button></div> | |||
</div> | |||
</div> | |||
</body> | |||
<script src="../static/js/common/require.js" data-main="../static/js/common/main" id="require-page" | |||
target-module="../static/js/project/user/login.js" defer type="text/javascript"></script> | |||
</html> |