This commit is contained in:
MeSHard
2025-12-01 11:19:23 +08:00
parent adc5fd81aa
commit b22d09bd39
4440 changed files with 815952 additions and 0 deletions

View File

@@ -0,0 +1,144 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="__CDN__/web/static/js/jquery-1.11.3.js" type=text/javascript charset=utf-8></script>
<script src="__CDN__/web/static/js/xlPaging.js"></script>
<!-- <script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.9.1/jquery.min.js"></script> -->
<title>查看报警</title>
<style type="text/css">
/**************分页*******************/
#page {
margin: 20px auto;
color: #666;
display: block;
text-align: center;
}
#page li {
display: inline-block;
min-width: 30px;
height: 28px;
cursor: pointer;
color: #666;
font-size: 13px;
line-height: 28px;
background-color: #f9f9f9;
border: 1px solid #dce0e0;
text-align: center;
margin: 0 4px;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
.xl-nextPage,
.xl-prevPage {
width: 60px;
color: #0073A9;
height: 28px;
}
.swiper-container{
margin-top: .7rem;
z-index: -1;
}
#page li.xl-disabled {
opacity: .5;
cursor: no-drop;
}
#page li.xl-active {
background-color: #0073A9;
border-color: #0073A9;
color: #FFF
}
tr td{
border: 1px solid #eee;
height:40px;
}
tr th{
border: 1px solid #eee;
height:40px;
background: #EEEEEE;
}
</style>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0" width="100%" class="ids" style="border: 1px solid #eee;text-align: center;">
</table>
<div id="page"></div>
</body>
<script type="text/javascript">
var page=1,pages=1, cph='';
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if(url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for(var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
}
}
return theRequest;
}
function getlist(cph){
let _this=this;
$.ajax({
dataType: "json",
type: "post",
url:'/api/Yq_screen/vehicle_alarm_list',
data: {
action:'Screen/vehicle_alarm_list',
page:page,
limit:20,
vehicleNo:cph
},
success: function(res) {
if (res.code == 1) {
var list =res.data.list;
pages=res.data.pages;
var title='<tr>'+'<th>'+'序号'+'</th>'+'<th>'+'车牌号'+'</th>'+'<th>'+'事件名称'+'</th>'+'<th>'+'触发类型'+'</th>'+'<th>'+'报警时间'+'</th>'+'<th>'+'是否处理'+'</th>'+'</tr>';
var ht='';
for(var i=0;i<list.length;i++){
if(list[i].trigger_type==1){
list[i].trigger_type='自动触发'
}else{
list[i].trigger_type='自主上报'
}
if(list[i].is_reset==0){
list[i].is_reset='未处理'
}else{
list[i].is_reset='已处理'
}
ht+=
'<tr>'+'<td>'+Number((page-1)*20+(i+1))+'</td>'+'<td>'+list[i].license+'</td>'+'<td>'+list[i].name+'</td>'+'<td>'+list[i].trigger_type+'</td>'+'<td>'+list[i].create_time+'</td>'+'<td>'+list[i].is_reset+'</td>'+'</tr>'
}
var html=title+ht;
$('table').append(html);
$("#page").paging({
nowPage: page, // 当前页码
pageNum:pages, // 总页码
buttonNum:5, //要展示的页码数量
callback: function (num) { //回调函数
$('table').html('');
page=num;
getlist(cph);
},
});
} else {
}
},
});
}
window.onload=function(){
var obj=GetRequest();
cph=decodeURI(obj.id);
getlist(cph);
}
</script>
</html>

View File

@@ -0,0 +1,94 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="__CDN__/web/static/js/jquery-1.11.3.js" type=text/javascript charset=utf-8></script>
<title>车辆信息</title>
<style type="text/css">
.content{
width: 800px;
margin: auto;
}
h2{
text-align: center;
margin: 40px 0;
}
.content>div>p{
margin: 30px 0;
}
.content>div>p>span{
display: inline-block;
}
.content>div>p>span:nth-child(1){
width: 200px;
float: left;
}
.content>div>p>span:nth-child(2){
width: 600px;
}
</style>
</head>
<body>
<div class="content">
<h2>车辆信息</h2>
</div>
<script type="text/javascript">
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if(url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for(var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
}
}
return theRequest;
}
function getdata(id){
let _this=this;
// 如果id为空显示提示
if (!id) {
$('.content').append('<div style="text-align:center;color:#999;margin-top:50px;">未找到车辆信息</div>');
return;
}
$.ajax({
dataType: "json",
type: "post",
url:'/api/Yq_screen/vehicle_detail',
data: {
action:'Screen/vehicle_detail',
id:id,
},
success: function(res) {
if (res.code == 1) {
var data=res.data;
$('.content').append(
'<div>'+
'<p>'+'<span>车牌号:</span>'+'<span>'+data.vehicleNo+'</span>'+'</p>'+
'<p>'+'<span>承运商:</span>'+'<span>'+data.ownerName+'</span>'+'</p>'+
'<p>'+'<span>经营范围:</span>'+'<span>'+data.businessScopeName+'</span>'+'</p>'+
'<p>'+'<span>运输证号:</span>'+'<span>'+data.transCertificateCode+'</span>'+'</p>'+
'<p>'+'<span>期限开始日期:</span>'+'<span>'+data.certificateEffdate+'</span>'+'</p>'+
'<p>'+'<span>期限结束日期:</span>'+'<span>'+data.certificateExpdate+'</span>'+'</p>'+
'<p>'+'<span>发证机关:</span>'+'<span>'+data.licenseIssueOrganCode+'</span>'+'</p>'+
'</div>'
)
} else {
$('.content').append('<div style="text-align:center;color:#999;margin-top:50px;">' + (res.msg || '获取车辆信息失败') + '</div>');
}
},
error: function(xhr, status, error) {
$('.content').append('<div style="text-align:center;color:#999;margin-top:50px;">请求失败,请稍后重试</div>');
}
});
};
window.onload=function(){
var obj=GetRequest();
id=decodeURI(obj.id);
getdata(id);
}
</script>
</body>
</html>

View File

@@ -0,0 +1,159 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="__CDN__/web/static/js/jquery-1.11.3.js" type=text/javascript charset=utf-8></script>
<script src="__CDN__/web/static/js/xlPaging.js"></script>
<!-- <script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.9.1/jquery.min.js"></script> -->
<title>入园记录</title>
<style type="text/css">
/**************分页*******************/
#page {
margin: 20px auto;
color: #666;
display: block;
text-align: center;
}
#page li {
display: inline-block;
min-width: 30px;
height: 28px;
cursor: pointer;
color: #666;
font-size: 13px;
line-height: 28px;
background-color: #f9f9f9;
border: 1px solid #dce0e0;
text-align: center;
margin: 0 4px;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
.xl-nextPage,
.xl-prevPage {
width: 60px;
color: #0073A9;
height: 28px;
}
.swiper-container{
margin-top: .7rem;
z-index: -1;
}
#page li.xl-disabled {
opacity: .5;
cursor: no-drop;
}
#page li.xl-active {
background-color: #0073A9;
border-color: #0073A9;
color: #FFF
}
tr td{
border: 1px solid #eee;
height:40px;
}
tr th{
border: 1px solid #eee;
height:40px;
background: #EEEEEE;
}
</style>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0" width="100%" class="ids" style="border: 1px solid #eee;text-align: center;">
</table>
<div id="page"></div>
</body>
<script type="text/javascript">
var page=1,pages=1, cph='';
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if(url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for(var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
}
}
return theRequest;
}
function getlist(cph){
let _this=this;
$.ajax({
dataType: "json",
type: "post",
url:'/api/Yq_screen/vehicle_park_list',
data: {
action:'Screen/vehicle_park_list',
page:page,
limit:20,
vehicleNo:cph
},
success: function(res) {
if (res.code == 1) {
var list =res.data.list;
var title='<tr>'+'<th>'+'序号'+'</th>'+'<th>'+'车牌号'+'</th>'+'<th>'+'入园目的'+'</th>'+'<th>'+'审核状态'+'</th>'+'<th>'+'申请时间'+'</th>'+'</tr>';
var ht='';
pages=res.data.pages;
for(var i=0;i<list.length;i++){
if(list[i].mission==1){
list[i].mudi='转货/卸货'
}else if(list[i].mission==2){
list[i].mudi='维修/洗车/停车'
}else if(list[i].mission==3){
list[i].mudi='常驻'
}else if(list[i].mission==4){
list[i].mudi='维修'
}else if(list[i].mission==5){
list[i].mudi='洗车'
}else if(list[i].mission==6){
list[i].mudi='停车'
}else if(list[i].mission==7){
list[i].mudi='检测'
}else if(list[i].mission==8){
list[i].mudi='洗罐'
}
if(list[i].status==1){
list[i].pass='已通过'
}else if(list[i].status==0){
list[i].pass='审核中'
}else{
list[i].pass='已驳回'
}
ht+=
'<tr>'+'<td>'+Number((page-1)*20+(i+1))+'</td>'+'<td>'+list[i].tractor_license+'</td>'+'<td>'+list[i].mudi+'</td>'+'<td>'+list[i].pass+'</td>'+'<td>'+list[i].create_time+'</td>'+'</tr>'
}
var html=title+ht;
$('table').append(html);
$("#page").paging({
nowPage: page, // 当前页码
pageNum:pages, // 总页码
buttonNum:5, //要展示的页码数量
callback: function (num) { //回调函数
$('table').html('');
page=num;
getlist(cph);
},
});
} else {
}
},
});
}
window.onload=function(){
var obj=GetRequest();
cph=decodeURI(obj.id);
getlist(cph);
}
</script>
</html>

View File

@@ -0,0 +1,210 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<title>行驶记录</title>
<link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css"/>
<script src="__CDN__/web/static/js/jquery-1.11.3.js" type=text/javascript charset=utf-8></script>
<script src="__CDN__/web/static/js/laydate/laydate.js"></script>
<style>
html, body, #container {
height: 100%;
width: 100%;
}
.input-card{
top: 1rem;
height:8rem;
right: 3rem;
width: 30rem;
}
.input-card .btn{
margin-right: 1.2rem;
width: 14rem;
}
.input-card .btn:last-child{
margin-right: 0;
}
.animate{
position: absolute;
bottom: 20px;
right: 10px;
}
.animate input{
width: 100px;
}
</style>
</head>
<body>
<div id="container"></div>
<div class="input-card">
<h4>时间筛选(按天查询)</h4>
<input type="text" class="demo-input" placeholder="请选择日期" id="test1">
</div>
<div class="animate">
<div class="input-item">
<input type="button" class="btn" value="开始动画" id="start" onclick="startAnimation(2000)"/>
<input type="button" class="btn" value="暂停动画" id="pause" onclick="pauseAnimation()"/>
<input type="button" class="btn" value="继续动画" id="resume" onclick="resumeAnimation()"/>
</div>
<div class="input-item">
<input type="button" class="btn" value="正常" onclick="startAnimation(2000)"/>
<input type="button" class="btn" value="4倍速" onclick="startAnimation(8000)"/>
<input type="button" class="btn" value="16倍速" onclick="startAnimation(20000)"/>
<!--<input type="button" class="btn" value="停止动画" id="stop" onclick="stopAnimation()"/>-->
</div>
</div>
<input type="hidden" name="vehicleNo" value="{$vehicleNo}">
<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=4a7c7c92504e8d8afa2abf377159280a"></script>
<script>
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if(url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for(var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
}
}
return theRequest;
}
var reservation ='',cph='';
window.onload=function(){
// 优先使用隐藏字段中的 vehicleNo如果没有则从 URL 参数获取
var vehicleNoFromHidden = $('input[name=vehicleNo]').val();
if (vehicleNoFromHidden) {
cph = vehicleNoFromHidden;
} else {
var obj=GetRequest();
cph=decodeURI(obj.id);
}
getdata(cph,reservation);
}
// var reservation = '';
function getdata(cph,reservation) {
$.ajax({
dataType: "json",
type: "post",
url: "/api/Yq_screen/vehicle_history",
data: {
action:'Screen/vehicle_history',
vehicleNo:cph,
reservation:reservation,
},
success: function(res) {
if(res.code==1){
// str = res.data;
if (res.data && res.data.coordinate == '106.964108,29.793287'){
alert('当天未查询到该车轨迹,请重新选择日期');
return;
}
if (res.data && res.data.coordinate) {
history(res.data.coordinate);
} else {
alert('当天未查询到该车轨迹,请重新选择日期');
}
} else {
alert('查询失败:' + (res.msg || '未知错误'));
}
},
error: function(res) {
alert('请求失败,请稍后重试');
}
});
}
var marker= '';
var lineArr='';
function history(info) {
var vehicleNo = $('input[name=vehicleNo]').val();
var reservation = '';
const MAP_KEY = "4a7c7c92504e8d8afa2abf377159280a",
{
LngLat
} = AMap;
// var str="108.01527,29.895601;106.997876,29.89281;106.991391,29.887939;106.985853,29.880405;106.981835,29.871026;106.960543,29.849142;106.950737,29.83564;106.945862,29.824089;106.943563,29.814148;106.945054,29.799754;106.942764,29.783607;106.970332,29.766519;106.983273,29.751322;107.017612,29.737776;107.050425,29.734115;107.064458,29.737683;107.064744,29.739318;107.058942,29.748447;107.055205,29.762378;107.071581,29.77504;107.086248,29.789923;107.088111,29.796775;107.084106,29.807387;107.080959,29.81142;107.068298,29.813474;107.06422,29.813406;107.060435,29.82112;107.050628,29.827207;107.04726,29.828623;107.046543,29.829966;107.04701,29.830878;107.04712,29.834263;107.044827,29.838826;107.053757,29.842875;107.056479,29.849047;107.057124,29.85153;107.056802,29.853468;107.060415,29.86047;107.061665,29.864841;107.054919,29.881592;107.052508,29.894119;107.040451,29.898403;107.028579,29.89536;107.014946,29.895825;106.997804,29.89278";
// var marker1, lineArr1 = [[116.478935,39.997761],[116.478939,39.997825],[116.478912,39.998549],[116.478912,39.998549],[116.478998,39.998555],[116.478998,39.998555],[116.479282,39.99856],[116.479658,39.998528],[116.480151,39.998453],[116.480784,39.998302],[116.480784,39.998302],[116.481149,39.998184],[116.481573,39.997997],[116.481863,39.997846],[116.482072,39.997718],[116.482362,39.997718],[116.483633,39.998935],[116.48367,39.998968],[116.484648,39.999861]];
lineArr = strToLL(info);
lay('#version').html('-v'+ laydate.v);
laydate.render({
elem: '#test1',
min: -4,
max: 0,
// type: 'datetime',
// range: true, //或 range: '~' 来自定义分割字符
done:function(value,date,endDate){
console.log(value); //得到日期生成的值2017-08-18
// reservation=value;
getdata(cph,value);
}
});
var map = new AMap.Map("container", {
resizeEnable: true,
center: lineArr[0],
zoom: 17
});
function strToLL(str) {
return str.split(';').map(i => new LngLat(...i.split(',').map(j => +j)))
}
marker = new AMap.Marker({
map: map,
position: lineArr[0],
icon: "https://webapi.amap.com/images/car.png",
offset: new AMap.Pixel(-26, -13),
autoRotation: true,
angle:-90,
});
// 绘制轨迹
var polyline = new AMap.Polyline({
map: map,
path: lineArr,
showDir:true,
strokeColor: "#28F", //线颜色
// strokeOpacity: 1, //线透明度
strokeWeight: 6, //线宽
// strokeStyle: "solid" //线样式
});
var passedPolyline = new AMap.Polyline({
map: map,
// path: lineArr,
strokeColor: "#AF5", //线颜色
// strokeOpacity: 1, //线透明度
strokeWeight: 6, //线宽
// strokeStyle: "solid" //线样式
});
marker.on('moving', function (e) {
passedPolyline.setPath(e.passedPath);
});
map.setFitView();
}
function startAnimation (time=2000) {
marker.moveAlong(lineArr, time);
}
function pauseAnimation () {
marker.pauseMove();
}
function resumeAnimation () {
marker.resumeMove();
}
function stopAnimation () {
marker.stopMove();
}
</script>
</body>
</html>

View File

@@ -0,0 +1,150 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="__CDN__/web/static/js/jquery-1.11.3.js" type=text/javascript charset=utf-8></script>
<script src="__CDN__/web/static/js/xlPaging.js"></script>
<!-- <script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.9.1/jquery.min.js"></script> -->
<title>运单记录</title>
<style type="text/css">
/**************分页*******************/
#page {
margin: 20px auto;
color: #666;
display: block;
text-align: center;
}
#page li {
display: inline-block;
min-width: 30px;
height: 28px;
cursor: pointer;
color: #666;
font-size: 13px;
line-height: 28px;
background-color: #f9f9f9;
border: 1px solid #dce0e0;
text-align: center;
margin: 0 4px;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
.xl-nextPage,
.xl-prevPage {
width: 60px;
color: #0073A9;
height: 28px;
}
.swiper-container{
margin-top: .7rem;
z-index: -1;
}
#page li.xl-disabled {
opacity: .5;
cursor: no-drop;
}
#page li.xl-active {
background-color: #0073A9;
border-color: #0073A9;
color: #FFF
}
tr td{
border: 1px solid #eee;
height:40px;
}
tr th{
border: 1px solid #eee;
height:40px;
background: #EEEEEE;
}
</style>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0" width="100%" class="ids" style="border: 1px solid #eee;text-align: center;">
</table>
<div id="page"></div>
</body>
<script type="text/javascript">
var page=1,pages=1, cph='';
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if(url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for(var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
}
}
return theRequest;
}
function getlist(cph){
let _this=this;
$.ajax({
dataType: "json",
type: "post",
url:'/api/Yq_screen/vehicle_waybill_list',
data: {
action:'Screen/vehicle_waybill_list',
page:page,
limit:20,
vehicleNo:cph,
mission:''
},
success: function(res) {
if (res.code == 1) {
var list =res.data.list;
pages=res.data.pages;
var title='<tr>'+'<th>'+'序号'+'</th>'+'<th>'+'运单号'+'</th>'+'<th>'+'牵引车牌号'+'</th>'+'<th>'+'挂车车牌号'+'</th>'+'<th>'+'司机姓名'+
'</th>'+'<th>'+'司机电话'+'</th>'+'<th>'+'装/卸'+'</th>'+'<th>'+'产品名称'+
'</th>'+'<th>'+'装货单位'+'</th>'+'<th>'+'卸货单位'+'</th>'+'<th>'+'查验结果'+'</th>'+'<th>'+'查验企业'+
'</th>'+'<th>'+'提单时间'+'</th>'+'<th>'+'提交时间'+'</th>'+'</tr>';
var ht='';
for(var i=0;i<list.length;i++){
if(list[i].check_status_record==1){
list[i].check='通过'
}else{
list[i].check='未处理'
}
ht+=
'<tr>'+'<td>'+Number((page-1)*20+(i+1))+'</td>'+
'<td>'+list[i].waybill_order+'</td>'+'<td>'+list[i].tow_license+'</td>'+
'<td>'+list[i].mount_license+'</td>'+'<td>'+list[i].waybill_name+'</td>'+
'<td>'+list[i].driver_tel+'</td>'+'<td>'+list[i].w_mission+'</td>'+
'<td>'+list[i].sale_product+'</td>'+'<td>'+list[i].waybill_loading+'</td>'+
'<td>'+list[i].waybill_unloading+'</td>'+'<td>'+list[i].check+'</td>'+
'<td>'+list[i].check_name+'</td>'+'<td>'+list[i].waybill_date+'</td>'+
'<td>'+list[i].create_time+'</td>'+'</tr>'
}
var html=title+ht;
$('table').append(html);
$("#page").paging({
nowPage: page, // 当前页码
pageNum:pages, // 总页码
buttonNum:5, //要展示的页码数量
callback: function (num) { //回调函数
$('table').html('');
page=num;
getlist(cph);
},
});
} else {
}
},
});
}
window.onload=function(){
var obj=GetRequest();
cph=decodeURI(obj.id);
getlist(cph);
}
</script>
</html>

View File

@@ -0,0 +1,27 @@
<!--@formatter:off-->
{if "[type]" == 'email'}
<input type="text" name="captcha" class="form-control" data-rule="required;length({$Think.config.captcha.length});digits;remote({:url('api/validate/check_ems_correct')}, event=[event], email:#email)" />
<span class="input-group-btn" style="padding:0;border:none;">
<a href="javascript:;" class="btn btn-info btn-captcha" data-url="{:url('api/ems/send')}" data-type="email" data-event="[event]">发送验证码</a>
</span>
{elseif "[type]" == 'mobile'/}
<input type="text" name="captcha" class="form-control" data-rule="required;length({$Think.config.captcha.length});digits;remote({:url('api/validate/check_sms_correct')}, event=[event], mobile:#mobile)" />
<span class="input-group-btn" style="padding:0;border:none;">
<a href="javascript:;" class="btn btn-info btn-captcha" data-url="{:url('api/sms/send')}" data-type="mobile" data-event="[event]">发送验证码</a>
</span>
{elseif "[type]" == 'wechat'/}
{if get_addon_info('wechat')}
<input type="text" name="captcha" class="form-control" data-rule="required;length({$Think.config.captcha.length});remote({:addon_url('wechat/captcha/check')}, event=[event])" />
<span class="input-group-btn" style="padding:0;border:none;">
<a href="javascript:;" class="btn btn-info btn-captcha" data-url="{:addon_url('wechat/captcha/send')}" data-type="wechat" data-event="[event]">获取验证码</a>
</span>
{else/}
请在后台插件管理中安装《微信管理插件》
{/if}
{elseif "[type]" == 'text' /}
<input type="text" name="captcha" class="form-control" data-rule="required;length({$Think.config.captcha.length})" />
<span class="input-group-btn" style="padding:0;border:none;">
<img src="{:captcha_src()}" width="100" height="32" onclick="this.src = '{:captcha_src()}?r=' + Math.random();"/>
</span>
{/if}
<!--@formatter:on-->

View File

@@ -0,0 +1,26 @@
<meta charset="utf-8">
<title>{$title|default=''|htmlentities} {$site.name|htmlentities}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<meta name="renderer" content="webkit">
{if isset($keywords)}
<meta name="keywords" content="{$keywords|htmlentities}">
{/if}
{if isset($description)}
<meta name="description" content="{$description|htmlentities}">
{/if}
<link rel="shortcut icon" href="__CDN__/assets/img/favicon.ico" />
<link href="__CDN__/assets/css/frontend{$Think.config.app_debug?'':'.min'}.css?v={$Think.config.site.version|htmlentities}" rel="stylesheet">
<!-- HTML5 shim, for IE6-8 support of HTML5 elements. All other JS at the end of file. -->
<!--[if lt IE 9]>
<script src="__CDN__/assets/js/html5shiv.js"></script>
<script src="__CDN__/assets/js/respond.min.js"></script>
<![endif]-->
<script type="text/javascript">
var require = {
config: {$config|json_encode}
};
</script>

View File

@@ -0,0 +1 @@
<script src="__CDN__/assets/js/require{$Think.config.app_debug?'':'.min'}.js" data-main="__CDN__/assets/js/require-frontend{$Think.config.app_debug?'':'.min'}.js?v={$site.version|htmlentities}"></script>

View File

@@ -0,0 +1,12 @@
<div class="sidebar-toggle"><i class="fa fa-bars"></i></div>
<div class="sidenav" id="sidebar-nav">
{:hook('user_sidenav_before')}
<ul class="list-group">
<li class="list-group-heading">{:__('Member center')}</li>
<li class="list-group-item {:check_nav_active('user/index')}"> <a href="{:url('user/index')}"><i class="fa fa-user-circle fa-fw"></i> {:__('User center')}</a> </li>
<li class="list-group-item {:check_nav_active('user/profile')}"> <a href="{:url('user/profile')}"><i class="fa fa-user-o fa-fw"></i> {:__('Profile')}</a> </li>
<li class="list-group-item {:check_nav_active('user/changepwd')}"> <a href="{:url('user/changepwd')}"><i class="fa fa-key fa-fw"></i> {:__('Change password')}</a> </li>
<li class="list-group-item {:check_nav_active('user/logout')}"> <a href="{:url('user/logout')}"><i class="fa fa-sign-out fa-fw"></i> {:__('Sign out')}</a> </li>
</ul>
{:hook('user_sidenav_after')}
</div>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,63 @@
<!DOCTYPE html>
<html>
<head>
{include file="common/meta" /}
<link href="__CDN__/assets/css/user.css?v={$Think.config.site.version|htmlentities}" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-white navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#header-navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="{:url('/')}">{$site.name|htmlentities}</a>
</div>
<div class="collapse navbar-collapse" id="header-navbar">
<ul class="nav navbar-nav navbar-right">
<li><a href="{:url('/')}">{:__('Home')}</a></li>
<li class="dropdown">
{if $user}
<a href="{:url('user/index')}" class="dropdown-toggle" data-toggle="dropdown">
<span class="avatar-img"><img src="{$user.avatar|htmlentities|cdnurl}" alt=""></span>
<span class="visible-xs-inline-block" style="padding:5px;">{$user.nickname} <b class="caret"></b></span>
</a>
{else /}
<a href="{:url('user/index')}" class="dropdown-toggle" data-toggle="dropdown">{:__('Member center')} <b class="caret"></b></a>
{/if}
<ul class="dropdown-menu">
{if $user}
<li><a href="{:url('user/index')}"><i class="fa fa-user-circle fa-fw"></i>{:__('User center')}</a></li>
<li><a href="{:url('user/profile')}"><i class="fa fa-user-o fa-fw"></i>{:__('Profile')}</a></li>
<li><a href="{:url('user/changepwd')}"><i class="fa fa-key fa-fw"></i>{:__('Change password')}</a></li>
<li><a href="{:url('user/logout')}"><i class="fa fa-sign-out fa-fw"></i>{:__('Sign out')}</a></li>
{else /}
<li><a href="{:url('user/login')}"><i class="fa fa-sign-in fa-fw"></i> {:__('Sign in')}</a></li>
<li><a href="{:url('user/register')}"><i class="fa fa-user-o fa-fw"></i> {:__('Sign up')}</a></li>
{/if}
</ul>
</li>
</ul>
</div>
</div>
</nav>
<main class="content">
{__CONTENT__}
</main>
<footer class="footer" style="clear:both">
<p class="copyright">Copyright&nbsp;©&nbsp;{:date("Y")} {$site.name|htmlentities} All Rights Reserved <a href="https://beian.miit.gov.cn" target="_blank">{$site.beian|htmlentities}</a></p>
</footer>
{include file="common/script" /}
</body>
</html>

View File

@@ -0,0 +1,61 @@
<link rel="stylesheet" href="__CDN__/assets/libs/bootstrap-table/dist/bootstrap-table.min.css">
{if $Think.get.dialog}
<style>
body {
padding-top: 0;
background: #fff;
}
nav.navbar-fixed-top, footer.footer {
display: none;
}
main.content {
padding: 0;
}
.fixed-table-container {
border: none;
}
.panel-heading .nav-tabs {
padding: 0 15px;
}
.panel-heading .nav-tabs li {
font-size: 14px;
}
</style>
{/if}
<div class="panel panel-default panel-intro" style="padding:0;">
{if !$Think.get.mimetype||$Think.get.mimetype=='*'}
<div class="panel-heading">
<ul class="nav nav-tabs" data-field="mimetype">
<li class="active"><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>
{foreach name="mimetypeList" item="vo"}
<li><a href="#t-{$key}" data-value="{$key}" data-toggle="tab">{$vo}</a></li>
{/foreach}
</ul>
</div>
{/if}
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
<a href="javascript:;" class="btn btn-primary btn-refresh" title="刷新"><i class="fa fa-refresh"></i> </a>
<span><button type="button" id="faupload-image" class="btn btn-success faupload" data-mimetype="{$mimetype|default=''|htmlentities}" data-multiple="true"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
{if request()->get('multiple') == 'true'}
<a class="btn btn-danger btn-choose-multi"><i class="fa fa-check"></i> {:__('Choose')}</a>
{/if}
</div>
<table id="table" class="table table-bordered table-hover" width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,43 @@
<div id="content-container" class="container">
<div class="row">
<div class="col-md-3">
{include file="common/sidenav" /}
</div>
<div class="col-md-9">
<div class="panel panel-default">
<div class="panel-body">
<h2 class="page-header">{:__('Change password')}</h2>
<form id="changepwd-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
{:token()}
<div class="form-group">
<label for="oldpassword" class="control-label col-xs-12 col-sm-2">{:__('Old password')}:</label>
<div class="col-xs-12 col-sm-4">
<input type="password" class="form-control" id="oldpassword" name="oldpassword" value="" data-rule="required;password" placeholder="{:__('Old password')}">
</div>
</div>
<div class="form-group">
<label for="newpassword" class="control-label col-xs-12 col-sm-2">{:__('New password')}:</label>
<div class="col-xs-12 col-sm-4">
<input type="password" class="form-control" id="newpassword" name="newpassword" value="" data-rule="required;password" placeholder="{:__('New password')}" />
</div>
</div>
<div class="form-group">
<label for="renewpassword" class="control-label col-xs-12 col-sm-2">{:__('Renew password')}:</label>
<div class="col-xs-12 col-sm-4">
<input type="password" class="form-control" id="renewpassword" name="renewpassword" value="" data-rule="required;password" placeholder="{:__('Renew password')}" />
</div>
</div>
<div class="form-group normal-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-primary btn-embossed disabled">{:__('Submit')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,69 @@
<style>
.basicinfo {
margin: 15px 0;
}
.basicinfo .row > .col-xs-4 {
padding-right: 0;
}
.basicinfo .row > div {
margin: 5px 0;
}
</style>
<div id="content-container" class="container">
<div class="row">
<div class="col-md-3">
{include file="common/sidenav" /}
</div>
<div class="col-md-9">
<div class="panel panel-default">
<div class="panel-body">
<h2 class="page-header">
{:__('Member center')}
<a href="{:url('user/profile')}" class="btn btn-primary pull-right"><i class="fa fa-pencil"></i> {:__('Profile')}</a>
</h2>
<div class="row user-baseinfo">
<div class="col-md-3 col-sm-3 col-xs-3 text-center user-center">
<a href="{:url('user/profile')}" title="{:__('Click to edit')}">
<span class="avatar-img"><img src="{$user.avatar|htmlentities|cdnurl}" alt=""></span>
</a>
</div>
<div class="col-md-9 col-sm-9 col-xs-9">
<div class="ui-content">
<h4><a href="{:url('user/profile')}">{$user.nickname|htmlentities}</a></h4>
<p class="text-muted">
{$user.bio|default=__("This guy hasn't written anything yet")|htmlentities}
</p>
</div>
</div>
<div class="col-md-9 col-sm-9 col-xs-12">
<div class="ui-content">
<div class="basicinfo">
<div class="row">
<div class="col-xs-4 col-md-2">{:__('Money')}</div>
<div class="col-xs-8 col-md-4">
<a href="javascript:;" class="viewmoney">{$user.money}</a>
</div>
<div class="col-xs-4 col-md-2">{:__('Score')}</div>
<div class="col-xs-8 col-md-4">
<a href="javascript:;" class="viewscore">{$user.score}</a>
</div>
</div>
<div class="row">
<div class="col-xs-4 col-md-2">{:__('Logintime')}</div>
<div class="col-xs-8 col-md-4">{$user.logintime|date="Y-m-d H:i:s",###}</div>
<div class="col-xs-4 col-md-2">{:__('Prevtime')}</div>
<div class="col-xs-8 col-md-4">{$user.prevtime|date="Y-m-d H:i:s",###}</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,94 @@
<div id="content-container" class="container">
<div class="user-section login-section">
<div class="logon-tab clearfix"><a class="active">{:__('Sign in')}</a> <a href="{:url('user/register')}?url={$url|urlencode|htmlentities}">{:__('Sign up')}</a></div>
<div class="login-main">
<form name="form" id="login-form" class="form-vertical" method="POST" action="">
<!--@IndexLoginFormBegin-->
<input type="hidden" name="url" value="{$url|htmlentities}"/>
{:token()}
<div class="form-group">
<label class="control-label" for="account">{:__('Account')}</label>
<div class="controls">
<input class="form-control" id="account" type="text" name="account" value="" data-rule="required" placeholder="{:__('Email/Mobile/Username')}" autocomplete="off">
<div class="help-block"></div>
</div>
</div>
<div class="form-group">
<label class="control-label" for="password">{:__('Password')}</label>
<div class="controls">
<input class="form-control" id="password" type="password" name="password" data-rule="required;password" placeholder="{:__('Password')}" autocomplete="off">
</div>
</div>
<div class="form-group">
<div class="controls">
<div class="checkbox inline">
<label>
<input type="checkbox" name="keeplogin" checked="checked" value="1"> {:__('Keep login')}
</label>
</div>
<div class="pull-right"><a href="javascript:;" class="btn-forgot">{:__('Forgot password')}</a></div>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-lg btn-block">{:__('Sign in')}</button>
<a href="{:url('user/register')}?url={$url|urlencode|htmlentities}" class="btn btn-default btn-lg btn-block mt-3 no-border">{:__("Don't have an account? Sign up")}</a>
</div>
<!--@IndexLoginFormEnd-->
</form>
</div>
</div>
</div>
<script type="text/html" id="resetpwdtpl">
<form id="resetpwd-form" class="form-horizontal form-layer" method="POST" action="{:url('api/user/resetpwd')}">
<div class="form-body">
<input type="hidden" name="action" value="resetpwd"/>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3">{:__('Type')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="radio">
<label for="type-email"><input id="type-email" checked="checked" name="type" data-send-url="{:url('api/ems/send')}" data-check-url="{:url('api/validate/check_ems_correct')}" type="radio" value="email"> {:__('Reset password by email')}</label>
<label for="type-mobile"><input id="type-mobile" name="type" type="radio" data-send-url="{:url('api/sms/send')}" data-check-url="{:url('api/validate/check_sms_correct')}" value="mobile"> {:__('Reset password by mobile')}</label>
</div>
</div>
</div>
<div class="form-group" data-type="email">
<label for="email" class="control-label col-xs-12 col-sm-3">{:__('Email')}:</label>
<div class="col-xs-12 col-sm-8">
<input type="text" class="form-control" id="email" name="email" value="" data-rule="required(#type-email:checked);email;remote({:url('api/validate/check_email_exist')}, event=resetpwd, id=0)" placeholder="">
<span class="msg-box"></span>
</div>
</div>
<div class="form-group hide" data-type="mobile">
<label for="mobile" class="control-label col-xs-12 col-sm-3">{:__('Mobile')}:</label>
<div class="col-xs-12 col-sm-8">
<input type="text" class="form-control" id="mobile" name="mobile" value="" data-rule="required(#type-mobile:checked);mobile;remote({:url('api/validate/check_mobile_exist')}, event=resetpwd, id=0)" placeholder="">
<span class="msg-box"></span>
</div>
</div>
<div class="form-group">
<label for="captcha" class="control-label col-xs-12 col-sm-3">{:__('Captcha')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input type="text" name="captcha" class="form-control" data-rule="required;length({$Think.config.captcha.length});digits;remote({:url('api/validate/check_ems_correct')}, event=resetpwd, email:#email)"/>
<span class="input-group-btn" style="padding:0;border:none;">
<a href="javascript:;" class="btn btn-primary btn-captcha" data-url="{:url('api/ems/send')}" data-type="email" data-event="resetpwd">{:__('Send verification code')}</a>
</span>
</div>
<span class="msg-box"></span>
</div>
</div>
<div class="form-group">
<label for="newpassword" class="control-label col-xs-12 col-sm-3">{:__('New password')}:</label>
<div class="col-xs-12 col-sm-8">
<input type="password" class="form-control" id="newpassword" name="newpassword" value="" data-rule="required;password" placeholder="">
<span class="msg-box"></span>
</div>
</div>
</div>
<div class="form-group form-footer">
<div class="col-xs-12 col-sm-8 col-sm-offset-3">
<button type="submit" class="btn btn-md btn-primary">{:__('Ok')}</button>
</div>
</div>
</form>
</script>

View File

@@ -0,0 +1,200 @@
<style>
.profile-avatar-container {
position:relative;
width:100px;
}
.profile-avatar-container .profile-user-img{
width:100px;
height:100px;
}
.profile-avatar-container .profile-avatar-text {
display:none;
}
.profile-avatar-container:hover .profile-avatar-text {
display:block;
position:absolute;
height:100px;
width:100px;
background:#444;
opacity: .6;
color: #fff;
top:0;
left:0;
line-height: 100px;
text-align: center;
}
.profile-avatar-container button{
position:absolute;
top:0;left:0;width:100px;height:100px;opacity: 0;
}
</style>
<div id="content-container" class="container">
<div class="row">
<div class="col-md-3">
{include file="common/sidenav" /}
</div>
<div class="col-md-9">
<div class="panel panel-default">
<div class="panel-body">
<h2 class="page-header">{:__('Profile')}</h2>
<form id="profile-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="{:url('api/user/profile')}">
{:token()}
<input type="hidden" name="avatar" id="c-avatar" value="{:$user->getData('avatar')}" />
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-4">
<div class="profile-avatar-container">
<img class="profile-user-img img-responsive img-circle" src="{$user.avatar|htmlentities|cdnurl}" alt="">
<div class="profile-avatar-text img-circle">{:__('Click to edit')}</div>
<button type="button" id="faupload-avatar" class="faupload" data-mimetype="png,jpg,jpeg,gif" data-input-id="c-avatar"><i class="fa fa-upload"></i> {:__('Upload')}</button>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Username')}:</label>
<div class="col-xs-12 col-sm-4">
<input type="text" class="form-control" id="username" name="username" value="{$user.username|htmlentities}" data-rule="required;username;remote({:url('api/validate/check_username_available')}, id={$user.id})" placeholder="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Nickname')}:</label>
<div class="col-xs-12 col-sm-4">
<input type="text" class="form-control" id="nickname" name="nickname" value="{$user.nickname|htmlentities}" data-rule="required;remote({:url('api/validate/check_nickname_available')}, id={$user.id})" placeholder="">
</div>
</div>
<div class="form-group">
<label for="c-bio" class="control-label col-xs-12 col-sm-2">{:__('Intro')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-bio" data-rule="" data-tip="一句话介绍一下你自己" class="form-control" name="bio" type="text" value="{$user.bio|htmlentities}">
</div>
</div>
<div class="form-group">
<label for="c-email" class="control-label col-xs-12 col-sm-2">{:__('Email')}:</label>
<div class="col-xs-12 col-sm-4">
<div class="input-group">
<input type="text" class="form-control" id="c-email" name="email" value="{$user.email|htmlentities}" disabled placeholder="">
<span class="input-group-btn" style="padding:0;border:none;">
<a href="javascript:;" class="btn btn-info btn-change" data-type="email">{:__('Change')}</a>
</span>
</div>
</div>
</div>
<div class="form-group">
<label for="c-mobile" class="control-label col-xs-12 col-sm-2">{:__('Mobile')}:</label>
<div class="col-xs-12 col-sm-4">
<div class="input-group">
<input type="text" class="form-control" id="c-mobile" name="mobile" value="{$user.mobile|htmlentities}" disabled placeholder="">
<span class="input-group-btn" style="padding:0;border:none;">
<a href="javascript:;" class="btn btn-info btn-change" data-type="mobile">{:__('Change')}</a>
</span>
</div>
</div>
</div>
<div class="form-group normal-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-primary btn-embossed disabled">{:__('Ok')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script type="text/html" id="emailtpl">
<form id="email-form" class="form-horizontal form-layer" method="POST" action="{:url('api/user/changeemail')}">
<div class="form-body">
<input type="hidden" name="action" value="changeemail" />
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3">{:__('New Email')}:</label>
<div class="col-xs-12 col-sm-8">
<input type="text" class="form-control" id="email" name="email" value="" data-rule="required;email;remote({:url('api/validate/check_email_available')}, event=changeemail, id={$user.id})" placeholder="{:__('New email')}">
<span class="msg-box"></span>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-3">{:__('Captcha')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input type="text" name="captcha" id="email-captcha" class="form-control" data-rule="required;length({$Think.config.captcha.length});digits;remote({:url('api/validate/check_ems_correct')}, event=changeemail, email:#email)" />
<span class="input-group-btn" style="padding:0;border:none;">
<a href="javascript:;" class="btn btn-info btn-captcha" data-url="{:url('api/ems/send')}" data-type="email" data-event="changeemail">获取验证码</a>
</span>
</div>
<span class="msg-box"></span>
</div>
</div>
</div>
<div class="form-footer">
<div class="form-group" style="margin-bottom:0;">
<div class="col-xs-12 col-sm-8 col-sm-offset-3">
<button type="submit" class="btn btn-md btn-primary">{:__('Submit')}</button>
</div>
</div>
</div>
</form>
</script>
<script type="text/html" id="mobiletpl">
<form id="mobile-form" class="form-horizontal form-layer" method="POST" action="{:url('api/user/changemobile')}">
<div class="form-body">
<input type="hidden" name="action" value="changemobile" />
<div class="form-group">
<label for="c-mobile" class="control-label col-xs-12 col-sm-3">{:__('New mobile')}:</label>
<div class="col-xs-12 col-sm-8">
<input type="text" class="form-control" id="mobile" name="mobile" value="" data-rule="required;mobile;remote({:url('api/validate/check_mobile_available')}, event=changemobile, id={$user.id})" placeholder="{:__('New mobile')}">
<span class="msg-box"></span>
</div>
</div>
<div class="form-group">
<label for="mobile-captcha" class="control-label col-xs-12 col-sm-3">{:__('Captcha')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input type="text" name="captcha" id="mobile-captcha" class="form-control" data-rule="required;length({$Think.config.captcha.length});digits;remote({:url('api/validate/check_sms_correct')}, event=changemobile, mobile:#mobile)" />
<span class="input-group-btn" style="padding:0;border:none;">
<a href="javascript:;" class="btn btn-info btn-captcha" data-url="{:url('api/sms/send')}" data-type="mobile" data-event="changemobile">获取验证码</a>
</span>
</div>
<span class="msg-box"></span>
</div>
</div>
</div>
<div class="form-footer">
<div class="form-group" style="margin-bottom:0;">
<div class="col-xs-12 col-sm-8 col-sm-offset-3">
<button type="submit" class="btn btn-md btn-primary">{:__('Submit')}</button>
</div>
</div>
</div>
</form>
</script>
<style>
.form-layer {height:100%;min-height:150px;min-width:300px;}
.form-body {
width:100%;
overflow:auto;
top:0;
position:absolute;
z-index:10;
bottom:50px;
padding:15px;
}
.form-layer .form-footer {
height:50px;
line-height:50px;
background-color: #ecf0f1;
width:100%;
position:absolute;
z-index:200;
bottom:0;
margin:0;
}
.form-footer .form-group{
margin-left:0;
margin-right:0;
}
</style>

View File

@@ -0,0 +1,61 @@
<div id="content-container" class="container">
<div class="user-section login-section">
<div class="logon-tab clearfix"><a href="{:url('user/login')}?url={$url|urlencode|htmlentities}">{:__('Sign in')}</a> <a class="active">{:__('Sign up')}</a></div>
<div class="login-main">
<form name="form1" id="register-form" class="form-vertical" method="POST" action="">
<!--@IndexRegisterFormBegin-->
<input type="hidden" name="invite_user_id" value="0"/>
<input type="hidden" name="url" value="{$url|htmlentities}"/>
{:token()}
<div class="form-group">
<label class="control-label required">{:__('Email')}<span class="text-success"></span></label>
<div class="controls">
<input type="text" name="email" id="email" data-rule="required;email" class="form-control" placeholder="{:__('Email')}">
<p class="help-block"></p>
</div>
</div>
<div class="form-group">
<label class="control-label">{:__('Username')}</label>
<div class="controls">
<input type="text" id="username" name="username" data-rule="required;username" class="form-control" placeholder="{:__('Username must be 3 to 30 characters')}">
<p class="help-block"></p>
</div>
</div>
<div class="form-group">
<label class="control-label">{:__('Password')}</label>
<div class="controls">
<input type="password" id="password" name="password" data-rule="required;password" class="form-control" placeholder="{:__('Password must be 6 to 30 characters')}">
<p class="help-block"></p>
</div>
</div>
<div class="form-group">
<label class="control-label">{:__('Mobile')}</label>
<div class="controls">
<input type="text" id="mobile" name="mobile" data-rule="required;mobile" class="form-control" placeholder="{:__('Mobile')}">
<p class="help-block"></p>
</div>
</div>
<!--@CaptchaBegin-->
{if $captchaType}
<div class="form-group">
<label class="control-label">{:__('Captcha')}</label>
<div class="controls">
<div class="input-group">
{include file="common/captcha" event="register" type="$captchaType" /}
</div>
<p class="help-block"></p>
</div>
</div>
{/if}
<!--@CaptchaEnd-->
<div class="form-group">
<button type="submit" class="btn btn-primary btn-lg btn-block">{:__('Sign up')}</button>
<a href="{:url('user/login')}?url={$url|urlencode|htmlentities}" class="btn btn-default btn-lg btn-block mt-3 no-border">{:__('Already have an account? Sign in')}</a>
</div>
<!--@IndexRegisterFormEnd-->
</form>
</div>
</div>
</div>