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
5 years ago
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
develop
v1.2
v1.1
v1.0
No related merge requests found
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
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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
;
}
}
This diff is collapsed.
Click to expand it.
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
This diff is collapsed.
Click to expand it.
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>
...
...
This diff is collapsed.
Click to expand it.
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>
This diff is collapsed.
Click to expand it.
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>
This diff is collapsed.
Click to expand it.
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