Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
SooonerHotel
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
吴贤德
SooonerHotel
Commits
8837d3f6
Commit
8837d3f6
authored
Jul 30, 2019
by
吴贤德
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Merge branch 'develop' of
ssh://code.dev.soooner.com:50022/wuxiande/SooonerHotel
into develop
# Conflicts: # SooonerHotel/App/Lib/Action/System/UserAction.class.php
parent
980ee345
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
697 additions
and
11 deletions
+697
-11
LoginAction.class.php
SooonerHotel/App/Lib/Action/LoginAction.class.php
+63
-1
UserAction.class.php
SooonerHotel/App/Lib/Action/System/UserAction.class.php
+11
-0
GoogleAuthenticator.php
SooonerHotel/App/PHPGangsta/GoogleAuthenticator.php
+252
-0
lists.html
SooonerHotel/App/Tpl/Playctrl/zh-cn/PlayCtrl/lists.html
+234
-0
adduser.html
SooonerHotel/App/Tpl/System/zh-cn/User/adduser.html
+4
-0
index.html
SooonerHotel/App/Tpl/zh-cn/Login/index.html
+4
-10
index_up.html
SooonerHotel/App/Tpl/zh-cn/Login/index_up.html
+129
-0
No files found.
SooonerHotel/App/Lib/Action/LoginAction.class.php
View file @
8837d3f6
...
@@ -5,12 +5,18 @@ class LoginAction extends Action{
...
@@ -5,12 +5,18 @@ class LoginAction extends Action{
function
_empty
(){
function
_empty
(){
header
(
"Location: /login"
);
header
(
"Location: /login"
);
}
}
//登陆页
//登陆页
GA
public
function
index
(){
public
function
index
(){
session_destroy
();
session_destroy
();
$this
->
assign
(
'SYSTEM_INFO'
,
C
(
'SYSTEM_INFO'
));
$this
->
assign
(
'SYSTEM_INFO'
,
C
(
'SYSTEM_INFO'
));
$this
->
display
();
$this
->
display
();
}
}
//登陆页
public
function
index_up
(){
session_destroy
();
$this
->
assign
(
'SYSTEM_INFO'
,
C
(
'SYSTEM_INFO'
));
$this
->
display
();
}
//登陆操作
//登陆操作
public
function
loginDo
(){
public
function
loginDo
(){
$UserModel
=
D
(
"User"
);
$UserModel
=
D
(
"User"
);
...
@@ -127,4 +133,59 @@ class LoginAction extends Action{
...
@@ -127,4 +133,59 @@ class LoginAction extends Action{
$model
->
execute
(
$sql
);
$model
->
execute
(
$sql
);
}
}
public
function
loginGa
(){
//1.验证 UP
//2.验证 GA
$UserModel
=
D
(
"User"
);
$username
=
I
(
'username'
);
$password
=
I
(
'password'
,
''
,
md5
);
$code
=
I
(
'code'
);
$where
[
'account'
]
=
$username
;
$where
[
'password'
]
=
$password
;
$r
=
$UserModel
->
where
(
$where
)
->
find
();
if
(
$r
)
{
//验证GA
require_once
'./App/PHPGangsta/GoogleAuthenticator.php'
;
$ga
=
new
PHPGangsta_GoogleAuthenticator
();
$secret
=
$r
[
"secret"
];
if
(
$ga
->
verifyCode
(
$secret
,
$code
,
2
))
{
session
(
'username'
,
$username
);
session
(
C
(
'USER_AUTH_KEY'
),
$r
[
'id'
]);
setcookie
(
"USER_AUTH_KEY"
,
$r
[
'id'
],
time
()
+
3600
*
24
);
$userInfo
=
$UserModel
->
getUserInfo
(
$r
[
'id'
]);
session
(
'_USER_INFO'
,
$userInfo
[
0
]);
//用户基本信息
if
(
$userInfo
[
0
][
"grade"
]
==
3
)
{
$spList
=
$UserModel
->
getSpList
(
$r
[
'id'
]);
//SP列表
$spIDList
=
array
();
foreach
(
$spList
as
$sp
)
{
$spIDList
[]
=
$sp
[
'id'
];
}
session
(
'_USER_SPID_LIST'
,
$spIDList
);;
}
$login_count
=
$r
[
'login_count'
]
+
1
;
$data
=
array
(
'last_login_time'
=>
time
(),
'last_login_ip'
=>
get_client_ip
(),
'login_count'
=>
$login_count
);
$UserModel
->
where
(
'id='
.
$r
[
'id'
])
->
setField
(
$data
);
//
//RBAC
import
(
'ORG.Util.RBAC'
);
RBAC
::
saveAccessList
();
if
(
$userInfo
[
0
][
"grade"
]
==
3
)
{
$this
->
redirect
(
'Portal/index'
);
}
else
{
$this
->
redirect
(
'Index/index'
);
}
}
else
{
header
(
'Content-Type:text/html; charset=utf-8'
);
echo
"<script>alert('GA验证失败,请重新登录!');window.top.location.href='/login/index';</script>"
;
}
}
else
{
header
(
'Content-Type:text/html; charset=utf-8'
);
echo
"<script>alert('账号验证失败,请重新登录!');window.top.location.href='/login/index';</script>"
;
}
}
}
}
\ No newline at end of file
SooonerHotel/App/Lib/Action/System/UserAction.class.php
View file @
8837d3f6
<?php
<?php
require_once
'./App/PHPGangsta/GoogleAuthenticator.php'
;
class
UserAction
extends
CommonAction
{
class
UserAction
extends
CommonAction
{
//用户管理
//用户管理
public
function
addUser
(){
public
function
addUser
(){
...
@@ -103,8 +106,15 @@ class UserAction extends CommonAction{
...
@@ -103,8 +106,15 @@ class UserAction extends CommonAction{
$user
[
"last_login_ip"
]
=
"127.0.0.1"
;
$user
[
"last_login_ip"
]
=
"127.0.0.1"
;
$user
[
"update_time"
]
=
time
();
$user
[
"update_time"
]
=
time
();
$user
[
"remark"
]
=
''
;
$user
[
"remark"
]
=
''
;
$ga
=
new
PHPGangsta_GoogleAuthenticator
();
$secret
=
$ga
->
createSecret
();
$user
[
"secret"
]
=
$secret
;
$uid
=
$UserModel
->
add
(
$user
);
$uid
=
$UserModel
->
add
(
$user
);
<<<<<<<
HEAD
// echo $UserModel->getLastSql();
=======
$SpUserMapModel
->
where
(
"user_id =
$uid
"
)
->
delete
();
$SpUserMapModel
->
where
(
"user_id =
$uid
"
)
->
delete
();
if
(
$sp_ids
){
if
(
$sp_ids
){
...
@@ -115,6 +125,7 @@ class UserAction extends CommonAction{
...
@@ -115,6 +125,7 @@ class UserAction extends CommonAction{
$SpUserMapModel
->
addAll
(
$mapData
);
$SpUserMapModel
->
addAll
(
$mapData
);
}
}
>>>>>>>
980
ee345f9634e1754770ec7a03395b1e371512d
if
(
$uid
){
if
(
$uid
){
$role
[
"role_id"
]
=
I
(
"role_id"
,
""
,
int
);
$role
[
"role_id"
]
=
I
(
"role_id"
,
""
,
int
);
$role
[
"user_id"
]
=
$uid
;
$role
[
"user_id"
]
=
$uid
;
...
...
SooonerHotel/App/PHPGangsta/GoogleAuthenticator.php
0 → 100755
View file @
8837d3f6
<?php
/**
* PHP Class for handling Google Authenticator 2-factor authentication.
*
* @author Michael Kliewe
* @copyright 2012 Michael Kliewe
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
*
* @link http://www.phpgangsta.de/
*/
class
PHPGangsta_GoogleAuthenticator
{
protected
$_codeLength
=
6
;
/**
* Create new secret.
* 16 characters, randomly chosen from the allowed base32 characters.
*
* @param int $secretLength
*
* @return string
*/
public
function
createSecret
(
$secretLength
=
16
)
{
$validChars
=
$this
->
_getBase32LookupTable
();
// Valid secret lengths are 80 to 640 bits
if
(
$secretLength
<
16
||
$secretLength
>
128
)
{
throw
new
Exception
(
'Bad secret length'
);
}
$secret
=
''
;
$rnd
=
false
;
if
(
function_exists
(
'random_bytes'
))
{
$rnd
=
random_bytes
(
$secretLength
);
}
elseif
(
function_exists
(
'mcrypt_create_iv'
))
{
$rnd
=
mcrypt_create_iv
(
$secretLength
,
MCRYPT_DEV_URANDOM
);
}
elseif
(
function_exists
(
'openssl_random_pseudo_bytes'
))
{
$rnd
=
openssl_random_pseudo_bytes
(
$secretLength
,
$cryptoStrong
);
if
(
!
$cryptoStrong
)
{
$rnd
=
false
;
}
}
if
(
$rnd
!==
false
)
{
for
(
$i
=
0
;
$i
<
$secretLength
;
++
$i
)
{
$secret
.=
$validChars
[
ord
(
$rnd
[
$i
])
&
31
];
}
}
else
{
throw
new
Exception
(
'No source of secure random'
);
}
return
$secret
;
}
/**
* Calculate the code, with given secret and point in time.
*
* @param string $secret
* @param int|null $timeSlice
*
* @return string
*/
public
function
getCode
(
$secret
,
$timeSlice
=
null
)
{
if
(
$timeSlice
===
null
)
{
$timeSlice
=
floor
(
time
()
/
30
);
}
$secretkey
=
$this
->
_base32Decode
(
$secret
);
// Pack time into binary string
$time
=
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
chr
(
0
)
.
pack
(
'N*'
,
$timeSlice
);
// Hash it with users secret key
$hm
=
hash_hmac
(
'SHA1'
,
$time
,
$secretkey
,
true
);
// Use last nipple of result as index/offset
$offset
=
ord
(
substr
(
$hm
,
-
1
))
&
0x0F
;
// grab 4 bytes of the result
$hashpart
=
substr
(
$hm
,
$offset
,
4
);
// Unpak binary value
$value
=
unpack
(
'N'
,
$hashpart
);
$value
=
$value
[
1
];
// Only 32 bits
$value
=
$value
&
0x7FFFFFFF
;
$modulo
=
pow
(
10
,
$this
->
_codeLength
);
return
str_pad
(
$value
%
$modulo
,
$this
->
_codeLength
,
'0'
,
STR_PAD_LEFT
);
}
/**
* Get QR-Code URL for image, from google charts.
*
* @param string $name
* @param string $secret
* @param string $title
* @param array $params
*
* @return string
*/
public
function
getQRCodeGoogleUrl
(
$name
,
$secret
,
$title
=
null
,
$params
=
array
())
{
$width
=
!
empty
(
$params
[
'width'
])
&&
(
int
)
$params
[
'width'
]
>
0
?
(
int
)
$params
[
'width'
]
:
200
;
$height
=
!
empty
(
$params
[
'height'
])
&&
(
int
)
$params
[
'height'
]
>
0
?
(
int
)
$params
[
'height'
]
:
200
;
$level
=
!
empty
(
$params
[
'level'
])
&&
array_search
(
$params
[
'level'
],
array
(
'L'
,
'M'
,
'Q'
,
'H'
))
!==
false
?
$params
[
'level'
]
:
'M'
;
$urlencoded
=
urlencode
(
'otpauth://totp/'
.
$name
.
'?secret='
.
$secret
.
''
);
if
(
isset
(
$title
))
{
$urlencoded
.=
urlencode
(
'&issuer='
.
urlencode
(
$title
));
}
return
"https://api.qrserver.com/v1/create-qr-code/?data=
$urlencoded
&size=${width}x${height}&ecc=
$level
"
;
}
/**
* Check if the code is correct. This will accept codes starting from $discrepancy*30sec ago to $discrepancy*30sec from now.
*
* @param string $secret
* @param string $code
* @param int $discrepancy This is the allowed time drift in 30 second units (8 means 4 minutes before or after)
* @param int|null $currentTimeSlice time slice if we want use other that time()
*
* @return bool
*/
public
function
verifyCode
(
$secret
,
$code
,
$discrepancy
=
1
,
$currentTimeSlice
=
null
)
{
if
(
$currentTimeSlice
===
null
)
{
$currentTimeSlice
=
floor
(
time
()
/
30
);
}
if
(
strlen
(
$code
)
!=
6
)
{
return
false
;
}
for
(
$i
=
-
$discrepancy
;
$i
<=
$discrepancy
;
++
$i
)
{
$calculatedCode
=
$this
->
getCode
(
$secret
,
$currentTimeSlice
+
$i
);
if
(
$this
->
timingSafeEquals
(
$calculatedCode
,
$code
))
{
return
true
;
}
}
return
false
;
}
/**
* Set the code length, should be >=6.
*
* @param int $length
*
* @return PHPGangsta_GoogleAuthenticator
*/
public
function
setCodeLength
(
$length
)
{
$this
->
_codeLength
=
$length
;
return
$this
;
}
/**
* Helper class to decode base32.
*
* @param $secret
*
* @return bool|string
*/
protected
function
_base32Decode
(
$secret
)
{
if
(
empty
(
$secret
))
{
return
''
;
}
$base32chars
=
$this
->
_getBase32LookupTable
();
$base32charsFlipped
=
array_flip
(
$base32chars
);
$paddingCharCount
=
substr_count
(
$secret
,
$base32chars
[
32
]);
$allowedValues
=
array
(
6
,
4
,
3
,
1
,
0
);
if
(
!
in_array
(
$paddingCharCount
,
$allowedValues
))
{
return
false
;
}
for
(
$i
=
0
;
$i
<
4
;
++
$i
)
{
if
(
$paddingCharCount
==
$allowedValues
[
$i
]
&&
substr
(
$secret
,
-
(
$allowedValues
[
$i
]))
!=
str_repeat
(
$base32chars
[
32
],
$allowedValues
[
$i
]))
{
return
false
;
}
}
$secret
=
str_replace
(
'='
,
''
,
$secret
);
$secret
=
str_split
(
$secret
);
$binaryString
=
''
;
for
(
$i
=
0
;
$i
<
count
(
$secret
);
$i
=
$i
+
8
)
{
$x
=
''
;
if
(
!
in_array
(
$secret
[
$i
],
$base32chars
))
{
return
false
;
}
for
(
$j
=
0
;
$j
<
8
;
++
$j
)
{
$x
.=
str_pad
(
base_convert
(
@
$base32charsFlipped
[
@
$secret
[
$i
+
$j
]],
10
,
2
),
5
,
'0'
,
STR_PAD_LEFT
);
}
$eightBits
=
str_split
(
$x
,
8
);
for
(
$z
=
0
;
$z
<
count
(
$eightBits
);
++
$z
)
{
$binaryString
.=
((
$y
=
chr
(
base_convert
(
$eightBits
[
$z
],
2
,
10
)))
||
ord
(
$y
)
==
48
)
?
$y
:
''
;
}
}
return
$binaryString
;
}
/**
* Get array with all 32 characters for decoding from/encoding to base32.
*
* @return array
*/
protected
function
_getBase32LookupTable
()
{
return
array
(
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
,
'G'
,
'H'
,
// 7
'I'
,
'J'
,
'K'
,
'L'
,
'M'
,
'N'
,
'O'
,
'P'
,
// 15
'Q'
,
'R'
,
'S'
,
'T'
,
'U'
,
'V'
,
'W'
,
'X'
,
// 23
'Y'
,
'Z'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
// 31
'='
,
// padding char
);
}
/**
* A timing safe equals comparison
* more info here: http://blog.ircmaxell.com/2014/11/its-all-about-time.html.
*
* @param string $safeString The internal (safe) value to be checked
* @param string $userString The user submitted (unsafe) value
*
* @return bool True if the two strings are identical
*/
private
function
timingSafeEquals
(
$safeString
,
$userString
)
{
if
(
function_exists
(
'hash_equals'
))
{
return
hash_equals
(
$safeString
,
$userString
);
}
$safeLen
=
strlen
(
$safeString
);
$userLen
=
strlen
(
$userString
);
if
(
$userLen
!=
$safeLen
)
{
return
false
;
}
$result
=
0
;
for
(
$i
=
0
;
$i
<
$userLen
;
++
$i
)
{
$result
|=
(
ord
(
$safeString
[
$i
])
^
ord
(
$userString
[
$i
]));
}
// They are only identical strings if $result is exactly 0...
return
$result
===
0
;
}
}
SooonerHotel/App/Tpl/Playctrl/zh-cn/PlayCtrl/lists.html
0 → 100644
View file @
8837d3f6
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta
http-equiv=
"Content-Type"
content=
"text/html; charset=UTF-8"
>
<title>
播控列表
</title>
<link
href=
"__PUBLIC__/css/style_frame.css"
rel=
"stylesheet"
type=
"text/css"
/>
<link
rel=
"stylesheet"
type=
"text/css"
href=
"__PUBLIC__/js/jquery-easyui-1.3.4/themes/default/easyui.css"
>
<link
rel=
"stylesheet"
type=
"text/css"
href=
"__PUBLIC__/js/jquery-easyui-1.3.4/themes/icon.css"
>
<script
type=
"text/javascript"
src=
"__PUBLIC__/js/jquery.min.js"
></script>
<script
type=
"text/javascript"
src=
"__PUBLIC__/js/jquery-easyui-1.3.4/jquery.easyui.min.js"
></script>
<script
type=
"text/javascript"
src=
"__PUBLIC__/js/jquery-easyui-1.3.4/locale/easyui-lang-{$language}.js"
></script>
<script
type=
"text/javascript"
src=
"__PUBLIC__/newVsdn/js/zDialog/zDrag.js"
></script>
<script
type=
"text/javascript"
src=
"__PUBLIC__/newVsdn/js/zDialog/zDialog.js"
></script>
<script
type=
"text/javascript"
src=
"__PUBLIC__/js/common/functions.js"
></script>
<script
type=
"text/javascript"
src=
"__PUBLIC__/js/common/md5.js"
></script>
<link
href=
"__PUBLIC__/newVsdn/css/style_frame.css"
rel=
"stylesheet"
type=
"text/css"
/>
</head>
<body
style=
"padding:20px"
>
<!--搜索和按钮 开始 -->
<div
class=
"searchPlayCtrl clearfix"
>
<div
class=
"layui-tab-content"
>
<div
class=
"layui-tab-item layui-show"
>
<div
class=
"hyperchanne clearfix"
>
<form
name=
"searchform"
method=
"post"
action=
""
id =
"searchform"
>
<input
type=
"hidden"
name=
"op"
value=
"getjson"
>
<div
class=
"inputBox"
>
<select
class=
"select"
name=
"searchSp"
>
<option
value=
"0"
>
合作方
</option>
<volist
name=
"sp_lists"
id=
"item"
>
<option
value=
"{$item.id}"
>
{$item.name}
</option>
</volist>
</select>
<select
class=
"select"
name=
"searchHotel"
>
<option
value=
"0"
>
酒店
</option>
<volist
name=
"hotel_lists"
id=
"item"
>
<option
value=
"{$item.id}"
>
{$item.name}
</option>
</volist>
</select>
<input
class=
"input"
type=
"hidden"
value=
"{$id}"
name=
"searchTaskID"
>
</div>
<input
id=
"submit_search"
name=
""
type=
"button"
value=
"查询"
class=
"btn_go_s btn_orange"
/>
</form>
</div>
<!--hyperchanne end-->
<div
class=
""
>
<!-- <ul class="operationBox">
<li class="add">
<a href="javascript:;" onclick="add()" class="on"><span></span>新增</a>
</li>
</ul>-->
</div>
<!--mainBox end-->
</div>
</div>
</div>
<!--搜索和按钮 结束-->
<table
id=
"dg"
title=
""
data-options=
"
iconCls: 'icon-edit',
singleSelect: true,
url: '/PlayCtrl/PlayCtrl/lists/',
method: 'post',
pagination: true,
pageList:[15,30,45,60],
rownumbers: true,
sortName:'id',
sortOrder:'asc',
queryParams: form2Json('searchform'),
fitColumns: true,
height:'auto',
onRowContextMenu : onRowContextMenu
"
>
<thead>
<tr>
<th
data-options=
"field:'task_name',width:50"
sortable=
"true"
>
播控名称
</th>
<th
data-options=
"field:'media_name',width:100"
sortable=
"true"
>
媒资名称
</th>
<th
data-options=
"field:'hotel_name',width:50"
sortable=
"true"
>
酒店名称
</th>
<th
data-options=
"field:'sp_name',width:30"
sortable=
"true"
>
合作方名称
</th>
<th
data-options=
"field:'addtime',width:30"
sortable=
"true"
>
创建时间
</th>
<th
data-options=
"field:'updatetime',width:30"
sortable=
"true"
>
更新时间
</th>
<th
data-options=
"field:'status'"
sortable=
"true"
align=
"center"
>
状态
</th>
<!--<th field="action" align="center" formatter="InputAction">操作</th>-->
</tr>
</thead>
</table>
<div
id=
"mm1"
class=
"easyui-menu"
style=
"width:120px;display: none"
>
<div
iconCls=
"icon-edit"
id=
"menuEdit"
onclick=
"edit()"
{
:buttonAuth
('
PlayCtrl
','
PlayCtrlLog
','
add
')}
>
编辑
</div>
<div
iconCls=
"icon-cancel"
id=
"menuDel"
onclick=
"del()"
{
:buttonAuth
('
PlayCtrl
','
PlayCtrlLog
','
deletehandle
')}
>
删除
</div>
<div
class=
"menu-sep"
></div>
<div
iconCls=
"icon-edit"
id=
"menuEdit"
onclick=
"edit()"
{
:buttonAuth
('
PlayCtrl
','
PlayCtrlLog
','
add
')}
>
列表
</div>
<!-- <div class="menu-sep"></div>
<div iconCls="icon-stop" id="menuStop" onclick="enable(1)" {:buttonAuth('PlayCtrl','PlayCtrlLog','updateStatusAjaxHandle')}>禁用</div>
<div iconCls="icon-start" id="menuStart" onclick="enable(0)" {:buttonAuth('PlayCtrl','PlayCtrlLog','updateStatusAjaxHandle')}>启用</div>-->
</div>
<div
id=
"mm2"
class=
"easyui-menu"
style=
"width:120px;display: none"
>
<div
iconCls=
"icon-edit"
id=
"menuEdit"
onclick=
"edit()"
{
:buttonAuth
('
PlayCtrl
','
PlayCtrlLog
','
add
')}
>
编辑
</div>
<div
iconCls=
"icon-cancel"
id=
"menuDel"
onclick=
"del()"
{
:buttonAuth
('
PlayCtrl
','
PlayCtrlLog
','
deletehandle
')}
>
删除
</div>
<div
class=
"menu-sep"
></div>
<div
iconCls=
"icon-edit"
id=
"menuEdit"
onclick=
"edit()"
{
:buttonAuth
('
PlayCtrl
','
PlayCtrlLog
','
add
')}
>
列表
</div>
<!-- <div class="menu-sep"></div>
<div iconCls="icon-stop" id="menuStop" onclick="enable(1)" {:buttonAuth('PlayCtrl','PlayCtrlLog','updateStatusAjaxHandle')}>禁用</div>
<div iconCls="icon-start" id="menuStart" onclick="enable(0)" {:buttonAuth('PlayCtrl','PlayCtrlLog','updateStatusAjaxHandle')}>启用</div>-->
</div>
<script
type=
"text/javascript"
>
function
onRowContextMenu
(
e
,
rowIndex
,
rowData
){
e
.
preventDefault
();
$
(
'#dg'
).
datagrid
(
'unselectAll'
);
$
(
'#dg'
).
datagrid
(
'selectRow'
,
rowIndex
);
$
(
'#mm2'
).
menu
(
'show'
,
{
left
:
e
.
pageX
,
top
:
e
.
pageY
});
}
function
InputAction
(
value
,
row
,
index
)
{
return
'<a href="javascript:void(0)" id="mb'
+
index
+
'" class="easyui-menubutton" menu="#mm1" iconCls="icon-list" onmouseover="setSelectRow('
+
index
+
')">'
+
this
.
title
+
'</a>'
;
}
function
TypeAction
(
value
,
row
,
index
){
if
(
value
==
0
){
return
'主(Master)'
;
}
else
{
return
'从(Slave)'
;
}
}
function
setSelectRow
(
index
)
{
$
(
'#dg'
).
datagrid
(
'unselectAll'
);
$
(
'#dg'
).
datagrid
(
'selectRow'
,
index
);
}
//初始化菜单按钮
$
(
function
(){
$
(
'#dg'
).
datagrid
({
onLoadSuccess
:
function
(
data
)
{
for
(
i
=
0
;
i
<
$
(
'#dg'
).
datagrid
(
'getRows'
).
length
;
i
++
)
{
$
(
'#mb'
+
i
).
menubutton
();
}
}
})
});
//禁用启用
function
enable
(
status
){
var
row
=
$
(
'#dg'
).
datagrid
(
'getSelected'
);
if
(
row
){
var
msg
=
'启用'
;
if
(
status
==
1
)
msg
=
'禁用'
$
.
messager
.
confirm
(
'操作确认'
,
'确认['
+
msg
+
']该记录?'
,
function
(
r
){
if
(
r
){
$
.
post
(
"/PlayCtrl/PlayCtrlLog/updateStatusAjaxHandle/"
,
{
id
:
row
.
id
,
status
:
status
},
function
(
data
){
$
(
'#dg'
).
datagrid
(
'reload'
);
});
}
});
}
else
{
$
.
messager
.
alert
(
'提示'
,
'请选择要操作的记录!'
,
'info'
);
}
}
function
add
(){
pop
(
'80%'
,
700
,
true
,
'dg'
,
'datagrid'
,
'/PlayCtrl/PlayCtrlLog/add/'
)
}
function
edit
(){
var
row
=
$
(
'#dg'
).
datagrid
(
'getSelected'
);
if
(
row
){
pop
(
'80%'
,
700
,
true
,
'dg'
,
'datagrid'
,
'/PlayCtrl/PlayCtrlLog/add/id/'
+
row
.
id
);
}
else
{
$
.
messager
.
alert
(
'提示'
,
'请选择要操作的记录!'
,
'info'
);
}
}
function
del
(){
var
row
=
$
(
'#dg'
).
datagrid
(
'getSelected'
);
if
(
row
){
$
.
messager
.
confirm
(
'操作确认'
,
'确认[删除]该记录?'
,
function
(
r
){
if
(
r
){
$
.
post
(
"/PlayCtrl/PlayCtrlLog/deleteHandle/"
,
{
id
:
row
.
id
},
function
(
data
){
$
(
'#dg'
).
datagrid
(
'reload'
);
});
}
});
}
else
{
$
.
messager
.
alert
(
'提示'
,
'请选择要操作的记录!'
,
'info'
);
}
}
$
(
"#submit_search"
).
click
(
function
()
{
$
(
'#dg'
).
datagrid
({
queryParams
:
form2Json
(
"searchform"
)
});
//点击搜索
});
/**
* JQuery扩展方法,用户对JQuery EasyUI的DataGrid控件进行操作。
*/
$
.
fn
.
extend
({
/**
* 修改DataGrid对象的默认大小,以适应页面宽度。
*
* @param heightMargin
* 高度对页内边距的距离。
* @param widthMargin
* 宽度对页内边距的距离。
* @param minHeight
* 最小高度。
* @param minWidth
* 最小宽度。
*
*/
resizeDataGrid
:
function
(
heightMargin
,
widthMargin
,
minHeight
,
minWidth
)
{
var
height
=
$
(
document
.
body
).
height
()
-
heightMargin
;
var
width
=
$
(
document
.
body
).
width
()
-
widthMargin
;
height
=
height
<
minHeight
?
minHeight
:
height
;
width
=
width
<
minWidth
?
minWidth
:
width
;
$
(
this
).
datagrid
(
'resize'
,
{
//height : height,
width
:
width
});
}
});
$
(
function
()
{
// datagrid数据表格ID
var
datagridId
=
'dg'
;
// 第一次加载时自动变化大小
$
(
'#'
+
datagridId
).
resizeDataGrid
(
0
,
10
,
0
,
0
);
// 当窗口大小发生变化时,调整DataGrid的大小
$
(
window
).
resize
(
function
()
{
$
(
'#'
+
datagridId
).
resizeDataGrid
(
0
,
10
,
0
,
0
);
});
});
</script>
</body>
</html>
\ No newline at end of file
SooonerHotel/App/Tpl/System/zh-cn/User/adduser.html
View file @
8837d3f6
...
@@ -69,10 +69,14 @@ $().ready(function(){
...
@@ -69,10 +69,14 @@ $().ready(function(){
<div><label
class=
"label_s"
>
用户名:
</label>
<div><label
class=
"label_s"
>
用户名:
</label>
{$user.account}
{$user.account}
</div>
</div>
<div><label
class=
"label_s"
>
GA秘钥:
</label>
{$user.secret}
</div>
</if>
</if>
<div><label
class=
"label_s"
>
昵称:
</label>
<div><label
class=
"label_s"
>
昵称:
</label>
<input
name=
"nickname"
class=
"easyui-validatebox input_s"
type=
"text"
data-options=
"required:true"
value=
"{$user.nickname}"
></input>
<input
name=
"nickname"
class=
"easyui-validatebox input_s"
type=
"text"
data-options=
"required:true"
value=
"{$user.nickname}"
></input>
</div>
</div>
<div><label
class=
"label_s"
>
email:
</label>
<div><label
class=
"label_s"
>
email:
</label>
<input
name=
"email"
class=
"easyui-validatebox input_s"
type=
"text"
value=
"{$user.email}"
></input>
<input
name=
"email"
class=
"easyui-validatebox input_s"
type=
"text"
value=
"{$user.email}"
></input>
</div>
</div>
...
...
SooonerHotel/App/Tpl/zh-cn/Login/index.html
View file @
8837d3f6
...
@@ -20,11 +20,7 @@
...
@@ -20,11 +20,7 @@
obj
.
value
=
obj
.
defaultValue
;
obj
.
value
=
obj
.
defaultValue
;
}
}
}
//这个函数是当失去焦点的时候,value的值又显示在input框中
}
//这个函数是当失去焦点的时候,value的值又显示在input框中
function
changeCode
(
obj
)
{
$
(
"#code"
).
attr
(
"src"
,
"/login/verify?"
+
Math
.
random
());
return
false
;
}
</script>
</script>
<script
type=
"text/javascript"
>
<script
type=
"text/javascript"
>
...
@@ -87,7 +83,7 @@
...
@@ -87,7 +83,7 @@
<div
class=
"fromWrap"
>
<div
class=
"fromWrap"
>
<div
class=
"logo2"
>
用户登录
</div>
<div
class=
"logo2"
>
用户登录
</div>
<div
class=
"userBox"
>
<div
class=
"userBox"
>
<form
id=
"f"
action=
"{:U('Login/login
Do
')}"
method=
"POST"
>
<form
id=
"f"
action=
"{:U('Login/login
Ga
')}"
method=
"POST"
>
<div
class=
"inputWrap"
>
<div
class=
"inputWrap"
>
<img
src=
"__PUBLIC__/newVsdn/images/user.png"
/>
<img
src=
"__PUBLIC__/newVsdn/images/user.png"
/>
<input
id=
"username"
name=
"username"
type=
"text"
value=
"用户名"
onclick=
"Focus(this);"
onblur=
"Blur(this);"
class=
"input"
>
<input
id=
"username"
name=
"username"
type=
"text"
value=
"用户名"
onclick=
"Focus(this);"
onblur=
"Blur(this);"
class=
"input"
>
...
@@ -98,9 +94,7 @@
...
@@ -98,9 +94,7 @@
</div>
</div>
<div
class=
"inputWrap"
>
<div
class=
"inputWrap"
>
<img
src=
"__PUBLIC__/newVsdn/images/password.png"
/>
<img
src=
"__PUBLIC__/newVsdn/images/password.png"
/>
<input
name=
"code"
onclick=
"Focus(this);"
onblur=
"Blur(this);"
class=
"input_code"
>
<input
name=
"code"
type=
"text"
value=
"请输入6位数字认证码"
onclick=
"Focus(this);"
onblur=
"Blur(this);"
class=
"input"
>
<img
title=
"看不清,点击换一张!"
onclick=
"javascript:void(changeCode(this))"
id=
"code"
src=
"{:U('/login/verify')}"
/>
<!--<a href="javascript:void(changeCode(this))">看不清,换一张!</a>-->
</div>
</div>
<div
class=
"loginBtn"
>
<div
class=
"loginBtn"
>
<input
type=
"button"
onclick=
"login()"
value=
"登录"
>
<input
type=
"button"
onclick=
"login()"
value=
"登录"
>
...
@@ -123,7 +117,7 @@
...
@@ -123,7 +117,7 @@
<div
class=
"loginFooter"
>
<div
class=
"loginFooter"
>
<
p
class=
"copyRight"
>
北京赛维安讯科技发展有限公司
</p
>
<
!--<p class="copyRight">北京赛维安讯科技发展有限公司</p>--
>
</div>
<!--loginFooter end-->
</div>
<!--loginFooter end-->
</body>
</body>
</html>
</html>
SooonerHotel/App/Tpl/zh-cn/Login/index_up.html
0 → 100644
View file @
8837d3f6
<!DOCTYPE html>
<html>
<head>
<meta
charset=
"UTF-8"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=7"
/>
<title>
{$SYSTEM_INFO.name}
</title>
<link
rel=
"shortcut icon"
href=
"/{$SYSTEM_INFO.favicon}"
>
<link
href=
"__PUBLIC__/newVsdn/css/style_login.css"
rel=
"stylesheet"
type=
"text/css"
/>
<script
type=
"text/javascript"
src=
"__PUBLIC__/js/jquery.min.js"
></script>
<script
type=
"text/javascript"
>
//搜索输入框
function
Focus
(
obj
)
{
if
(
obj
.
value
==
obj
.
defaultValue
){
obj
.
value
=
''
;
}
}
function
Blur
(
obj
)
{
if
(
obj
.
value
==
''
){
obj
.
value
=
obj
.
defaultValue
;
}
}
//这个函数是当失去焦点的时候,value的值又显示在input框中
function
changeCode
(
obj
)
{
$
(
"#code"
).
attr
(
"src"
,
"/login/verify?"
+
Math
.
random
());
return
false
;
}
</script>
<script
type=
"text/javascript"
>
function
login
(){
$
(
"#f"
).
submit
();
}
$
(
function
(){
$
(
"input"
).
keydown
(
function
(
e
){
var
keyCode
=
e
.
keyCode
?
e
.
keyCode
:
e
.
which
?
e
.
which
:
e
.
charCode
;
if
(
keyCode
==
13
){
if
(
$
(
"#username"
).
val
()
!=
""
&&
$
(
"#password"
).
val
()
!=
""
){
$
(
"#f"
).
submit
();
}
else
{
$
(
'input:first'
).
focus
();
$
(
'input'
).
bind
(
"keydown"
,
function
(
e
)
{
if
(
e
.
which
==
13
)
{
//Enter key
e
.
preventDefault
();
//to skip default behaviour of enter key
var
nextinput
=
$
(
'input'
)[
$
(
'input'
).
index
(
this
)
+
1
];
if
(
nextinput
!=
undefined
)
{
nextinput
.
focus
();
}
else
{
//alert("没有下一个输入框!");
}
}
});
}
}
else
{
return
true
;
}
return
false
;
});
});
$
(
function
()
{
$
(
'input:text:first'
).
focus
();
var
$inp
=
$
(
'input:text'
);
$inp
.
bind
(
'keydown'
,
function
(
e
)
{
var
key
=
e
.
which
;
if
(
key
==
13
)
{
e
.
preventDefault
();
var
nxtIdx
=
$inp
.
index
(
this
)
+
1
;
$
(
":input:text:eq("
+
nxtIdx
+
")"
).
focus
();
}
});
});
</script>
</head>
<body
class=
"noBg"
>
<div
class=
"loginHeader"
>
<div
class=
"headerWrap clearfix"
>
<div
class=
"logo"
>
<img
src=
"__PUBLIC__/newVsdn/images/{$SYSTEM_INFO.logo}"
/>
<span>
{$SYSTEM_INFO.name}
</span>
</div>
</div>
</div>
<!--loginHeader end-->
<div
class=
"loginBox clearfix"
>
<div
class=
"img"
></div>
<div
class=
"fromWrap"
>
<div
class=
"logo2"
>
用户登录
</div>
<div
class=
"userBox"
>
<form
id=
"f"
action=
"{:U('Login/loginDo')}"
method=
"POST"
>
<div
class=
"inputWrap"
>
<img
src=
"__PUBLIC__/newVsdn/images/user.png"
/>
<input
id=
"username"
name=
"username"
type=
"text"
value=
"用户名"
onclick=
"Focus(this);"
onblur=
"Blur(this);"
class=
"input"
>
</div>
<div
class=
"inputWrap"
>
<img
src=
"__PUBLIC__/newVsdn/images/password.png"
/>
<input
id=
"password"
name=
"password"
type=
"password"
value=
"***"
onclick=
"Focus(this);"
onblur=
"Blur(this);"
class=
"input"
>
</div>
<div
class=
"inputWrap"
>
<img
src=
"__PUBLIC__/newVsdn/images/password.png"
/>
<input
name=
"code"
onclick=
"Focus(this);"
onblur=
"Blur(this);"
class=
"input_code"
>
<img
title=
"看不清,点击换一张!"
onclick=
"javascript:void(changeCode(this))"
id=
"code"
src=
"{:U('/login/verify')}"
/>
<!--<a href="javascript:void(changeCode(this))">看不清,换一张!</a>-->
</div>
<div
class=
"loginBtn"
>
<input
type=
"button"
onclick=
"login()"
value=
"登录"
>
</div>
<div
class=
"other clearfix"
>
<!--<div class="checkBox">-->
<!--<img src="__PUBLIC__/newVsdn/images/radio.png" />-->
<!--<!–选中状态-->
<!--<img src="__PUBLIC__/newVsdn/images/radio-on.png" />-->
<!--–>-->
<!--</div>-->
<!--<span id="remember_p" class="text">记住密码</span>-->
<!--<span id="remember_p" class="text"><a href="/Portal/regist" target="_self">注册自服务账号</a></span>-->
</div>
</form>
</div>
</div>
</div>
<!--loginBox end-->
<div
class=
"loginFooter"
>
<p
class=
"copyRight"
>
北京赛维安讯科技发展有限公司
</p>
</div>
<!--loginFooter end-->
</body>
</html>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment