@@ -1,2 +1,2 @@ | |||||
.idea/ | .idea/ | ||||
logs/ | |||||
logs/* |
@@ -1,8 +1,11 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# 重新构建docker镜像 | # 重新构建docker镜像 | ||||
sudo docker build -t staff-sync . | |||||
sudo docker build -t local-face-app . | |||||
sudo mkdir -p /home/digimeta/staff-sync | |||||
sudo mkdir -p /home/digimeta/local-face | |||||
sudo cp -r ./config.json /home/digimeta/local-face/ | |||||
# 运行生成的docker镜像 | # 运行生成的docker镜像 | ||||
sudo docker run --add-host='oa.dfwytech.net:10.1.31.231' -v /home/digimeta/staff-sync/logs:/app/logs -v /home/digimeta/staff-sync/config.json:/app/config.json --restart=always -p 48480:18080 --name staff-sync -d staff-sync | |||||
sudo tail -f -n 500 /home/digimeta/logs/web.log | |||||
#sudo docker run --add-host='oa.dfwytech.net:10.1.31.231' -v /home/digimeta/local-face/logs:/app/logs -v /home/digimeta/local-face/config.json:/app/config.json --restart=always -p 48484:18080 --name local-face-app -d local-face-app | |||||
sudo docker run -v /home/digimeta/local-face/logs:/app/logs -v /home/digimeta/local-face/config.json:/app/config.json --restart=always -p 48484:18080 --name local-face-app -d local-face-app | |||||
sudo tail -f -n 500 /home/digimeta/local-face/logs/web.log |
@@ -16,7 +16,6 @@ import ( | |||||
"io" | "io" | ||||
"mime/multipart" | "mime/multipart" | ||||
"net/http" | "net/http" | ||||
"os" | |||||
"sort" | "sort" | ||||
"strconv" | "strconv" | ||||
"strings" | "strings" | ||||
@@ -728,7 +727,7 @@ func extractFeature(data interface{}) (string, error) { | |||||
} | } | ||||
func LocalFetchStaffFaceFeature(base64 string) (string, string, error) { | func LocalFetchStaffFaceFeature(base64 string) (string, string, error) { | ||||
url := common.ConfigData.LocalDetectUrl | |||||
url := "http://" + common.ConfigData.DevIp + common.ConfigData.LocalDetectUrl | |||||
method := "POST" | method := "POST" | ||||
imgName := "static/faces/" + fmt.Sprintf("%d", time.Now().Unix()) + "test.jpg" | imgName := "static/faces/" + fmt.Sprintf("%d", time.Now().Unix()) + "test.jpg" | ||||
@@ -820,67 +819,70 @@ func TimerHandle() { | |||||
now := time.Now() | now := time.Now() | ||||
// 将时间设置为23点59分59秒 | // 将时间设置为23点59分59秒 | ||||
t := time.Date(now.Year(), now.Month(), now.Day(), 23, 59, 55, 0, now.Location()) | t := time.Date(now.Year(), now.Month(), now.Day(), 23, 59, 55, 0, now.Location()) | ||||
common.Info(common.GenLogLine() + "--1,执行日志分割 START--") | |||||
duration := t.Sub(now) | duration := t.Sub(now) | ||||
isWithin10Seconds := duration > 0*time.Second && duration <= time.Duration(timeStep)*time.Second | isWithin10Seconds := duration > 0*time.Second && duration <= time.Duration(timeStep)*time.Second | ||||
fmt.Fprintln(os.Stdout, isWithin10Seconds) | |||||
common.Info(common.GenLogLine() + "--1,执行日志分割判断 是否开始切割:--" + strconv.FormatBool(isWithin10Seconds)) | |||||
if isWithin10Seconds { | if isWithin10Seconds { | ||||
common.Info(common.GenLogLine() + "--1.1执行RenameLogFile--") | common.Info(common.GenLogLine() + "--1.1执行RenameLogFile--") | ||||
common.RenameLogFile() | common.RenameLogFile() | ||||
} | } | ||||
common.Info(common.GenLogLine() + "--1,执行日志分割 END--") | |||||
common.Info(common.GenLogLine() + "--2,数据同步 START--") | |||||
common.Info(common.GenLogLine() + "--1,执行日志分割判断 END--") | |||||
//获取接口数据 | |||||
staffs := Fetch() | |||||
cachedTime := common.GetCache("maxTime") | |||||
if common.ConfigData.Sync == 1 { | |||||
common.Info(common.GenLogLine() + "--2,数据同步 START--") | |||||
if len(staffs) == 0 { | |||||
common.Info(common.GenLogLine() + "数据为空") | |||||
} else { | |||||
//获取最新更新时间 | |||||
maxTime := GetNewestModified(staffs) | |||||
var t1 time.Time | |||||
var t2 time.Time | |||||
var t3 time.Time | |||||
if cachedTime == "" { | |||||
cachedTime = common.ReadFile("di.txt") | |||||
common.SetCacheWithExpire("maxTime", cachedTime, 0) | |||||
} | |||||
t1, _ = time.Parse("2006-01-02 15:04:05", cachedTime) | |||||
t2, _ = time.Parse("2006-01-02 15:04:05", maxTime) | |||||
if !t2.After(t1) { | |||||
common.Info(common.GenLogLine() + "--2.1, 数据已被同步") | |||||
//获取接口数据 | |||||
staffs := Fetch() | |||||
cachedTime := common.GetCache("maxTime") | |||||
if len(staffs) == 0 { | |||||
common.Info(common.GenLogLine() + "数据为空") | |||||
} else { | } else { | ||||
common.SetCacheWithExpire("maxTime", maxTime, 0) | |||||
for _, staff := range staffs { | |||||
time.Sleep(1 * time.Second) // 暂停1秒 | |||||
t3, _ = time.Parse("2006-01-02 15:04:05", staff.Modified) | |||||
if t3.After(t1) { | |||||
staff.StaffBase64Img = FetchStaffImage(staff.Code) | |||||
common.Info(common.GenLogLine()+"----%v", "" == staff.StaffBase64Img) | |||||
str := HandleStaff(staff) | |||||
common.Info(common.GenLogLine()+"--2.2注册人员 姓名:%s 编号:%s 更新时间:%s--\n", staff.StaffName, staff.Code, staff.Modified) | |||||
//str := RegOnlineStaff(staff) | |||||
ss := "" | |||||
if str == nil { | |||||
ss = "保存成功" | |||||
//获取最新更新时间 | |||||
maxTime := GetNewestModified(staffs) | |||||
var t1 time.Time | |||||
var t2 time.Time | |||||
var t3 time.Time | |||||
if cachedTime == "" { | |||||
cachedTime = common.ReadFile("di.txt") | |||||
common.SetCacheWithExpire("maxTime", cachedTime, 0) | |||||
} | |||||
t1, _ = time.Parse("2006-01-02 15:04:05", cachedTime) | |||||
t2, _ = time.Parse("2006-01-02 15:04:05", maxTime) | |||||
if !t2.After(t1) { | |||||
common.Info(common.GenLogLine() + "--2.1, 数据已被同步") | |||||
} else { | |||||
common.SetCacheWithExpire("maxTime", maxTime, 0) | |||||
for _, staff := range staffs { | |||||
time.Sleep(1 * time.Second) // 暂停1秒 | |||||
t3, _ = time.Parse("2006-01-02 15:04:05", staff.Modified) | |||||
if t3.After(t1) { | |||||
staff.StaffBase64Img = FetchStaffImage(staff.Code) | |||||
common.Info(common.GenLogLine()+"----%v", "" == staff.StaffBase64Img) | |||||
str := HandleStaff(staff) | |||||
common.Info(common.GenLogLine()+"--2.2注册人员 姓名:%s 编号:%s 更新时间:%s--\n", staff.StaffName, staff.Code, staff.Modified) | |||||
//str := RegOnlineStaff(staff) | |||||
ss := "" | |||||
if str == nil { | |||||
ss = "保存成功" | |||||
} else { | |||||
ss = str.Error() | |||||
} | |||||
fmt.Printf("注册人员:%v\n", ss) | |||||
common.Info(common.GenLogLine()+"--2.3注册人员:%v--\n", ss) | |||||
} else { | } else { | ||||
ss = str.Error() | |||||
break | |||||
} | } | ||||
fmt.Printf("注册人员:%v\n", ss) | |||||
common.Info(common.GenLogLine()+"--2.3注册人员:%v--\n", ss) | |||||
} else { | |||||
break | |||||
} | } | ||||
common.WriteFile("di.txt", maxTime) | |||||
common.Info(common.GenLogLine()+"--2.4,数据同步,缓存数据maxID-- :%s", common.GetCache("maxTime")) | |||||
} | } | ||||
common.WriteFile("di.txt", maxTime) | |||||
common.Info(common.GenLogLine()+"--2.4,数据同步,缓存数据maxID-- :%s", common.GetCache("maxTime")) | |||||
} | } | ||||
common.Info(common.GenLogLine() + "--2,数据同步 END--") | |||||
} | } | ||||
common.Info(common.GenLogLine() + "--2,数据同步 END--") | |||||
common.Info(common.GenLogLine() + "=====执行timerHandle结束=====") | common.Info(common.GenLogLine() + "=====执行timerHandle结束=====") | ||||
} | } | ||||
} | } | ||||
@@ -21,7 +21,9 @@ type Config struct { | |||||
PushDataUrl string `json:"pushDataUrl"` | PushDataUrl string `json:"pushDataUrl"` | ||||
LocalDetectUrl string `json:"localDetectUrl"` | LocalDetectUrl string `json:"localDetectUrl"` | ||||
DevId string `json:"devId"` | DevId string `json:"devId"` | ||||
DevIp string `json:"devIp"` | |||||
Timer int `json:"timer"` | Timer int `json:"timer"` | ||||
Sync int `json:"sync"` | |||||
Mode string `json:"mode"` | Mode string `json:"mode"` | ||||
} | } | ||||
@@ -54,6 +56,8 @@ func UpdateConfig(updateValues map[string]interface{}) string { | |||||
config.Phone = value.(string) | config.Phone = value.(string) | ||||
case "devId": | case "devId": | ||||
config.DevId = value.(string) | config.DevId = value.(string) | ||||
case "devIp": | |||||
config.DevIp = value.(string) | |||||
case "mode": | case "mode": | ||||
config.Mode = value.(string) | config.Mode = value.(string) | ||||
case "enterpriseName": | case "enterpriseName": | ||||
@@ -82,6 +86,8 @@ func UpdateConfig(updateValues map[string]interface{}) string { | |||||
config.StaffInfoUrl = value.(string) | config.StaffInfoUrl = value.(string) | ||||
case "timer": | case "timer": | ||||
config.Timer = int(value.(float64)) | config.Timer = int(value.(float64)) | ||||
case "sync": | |||||
config.Sync = int(value.(float64)) | |||||
default: | default: | ||||
return "Unknown config key: " + key | return "Unknown config key: " + key | ||||
} | } | ||||
@@ -1,19 +1,21 @@ | |||||
{ | { | ||||
"fetchTokenUrl": "http://127.0.0.1:8080/auth/deviceLogin", | |||||
"fetchTokenUrl": "http://172.17.0.1:8080/auth/deviceLogin", | |||||
"phone": "18910801519", | "phone": "18910801519", | ||||
"fetchDataUrl": "http://127.0.0.1:8080/system/staff/list", | |||||
"fetchDataUrl": "http://172.17.0.1:8080/system/staff/list", | |||||
"fetchData2Url": "http://10.1.26.139/api/dizhiyuan/member/DZYAction", | "fetchData2Url": "http://10.1.26.139/api/dizhiyuan/member/DZYAction", | ||||
"sendCodeUrl": "http://127.0.0.1:8080/system/sms/api/send-code", | |||||
"checkSendCodeUrl": "http://127.0.0.1:8080/system/staff/api/ableLogin", | |||||
"phoneLoginUrl": "http://127.0.0.1:8080/auth/phoneLogin", | |||||
"mgrLoginUrl": "http://127.0.0.1:8080/auth/mgr-login", | |||||
"validCodeUrl": "http://127.0.0.1:8080/system/staff/api/validCode", | |||||
"staffInfoUrl": "http://127.0.0.1:8080/system/staff/list", | |||||
"sendCodeUrl": "http://172.17.0.1:8080/system/sms/api/send-code", | |||||
"checkSendCodeUrl": "http://172.17.0.1:8080/system/staff/api/ableLogin", | |||||
"phoneLoginUrl": "http://172.17.0.1:8080/auth/phoneLogin", | |||||
"mgrLoginUrl": "http://172.17.0.1:8080/auth/mgr-login", | |||||
"validCodeUrl": "http://172.17.0.1:8080/system/staff/api/validCode", | |||||
"staffInfoUrl": "http://172.17.0.1:8080/system/staff/list", | |||||
"enterpriseName": "演示机", | "enterpriseName": "演示机", | ||||
"port": "18080", | "port": "18080", | ||||
"pushDataUrl": "http://127.0.0.1:8080/system/staff/api/new-staff", | |||||
"localDetectUrl": "http://192.168.10.32:8080/face/feature", | |||||
"pushDataUrl": "http://172.17.0.1:8080/system/staff/api/new-staff", | |||||
"localDetectUrl": "/face/feature", | |||||
"devId": "442926c7610ed10b", | "devId": "442926c7610ed10b", | ||||
"devIp": "192.168.10.32", | |||||
"timer": 90, | "timer": 90, | ||||
"sync": 0, | |||||
"mode": "online" | "mode": "online" | ||||
} | } |
@@ -73,6 +73,7 @@ func main() { | |||||
router.LoadHTMLGlob("templates/*") | router.LoadHTMLGlob("templates/*") | ||||
router.GET("/", HomeHandler) | router.GET("/", HomeHandler) | ||||
router.GET("/reg", RegPageHandler) | router.GET("/reg", RegPageHandler) | ||||
router.GET("/config", ConfigPageHandler) | |||||
router.GET("/info", InfoPageHandler) | router.GET("/info", InfoPageHandler) | ||||
router.POST("/send_validation_code", SendCodeHandler) | router.POST("/send_validation_code", SendCodeHandler) | ||||
router.POST("/valid_code", ValidCodeHandler) | router.POST("/valid_code", ValidCodeHandler) | ||||
@@ -83,7 +84,7 @@ func main() { | |||||
router.GET("/register", RegisterPageHandler) | router.GET("/register", RegisterPageHandler) | ||||
router.POST("/register", RegisterHandler) | router.POST("/register", RegisterHandler) | ||||
router.POST("/pass", PassHandler) | router.POST("/pass", PassHandler) | ||||
router.POST("/update", UpdateConfigHandler) | |||||
router.POST("/updateConfig", UpdateConfigHandler) | |||||
common.Info(common.GenLogLine()+"file content:%s", common.ReadFile("di.txt")) | common.Info(common.GenLogLine()+"file content:%s", common.ReadFile("di.txt")) | ||||
@@ -120,7 +121,7 @@ func UpdateConfigHandler(c *gin.Context) { | |||||
//更新配置文件变量configData | //更新配置文件变量configData | ||||
common.LoadConfig() | common.LoadConfig() | ||||
c.JSON(http.StatusOK, gin.H{"message": "Config updated successfully"}) | |||||
c.JSON(http.StatusOK, gin.H{"message": "配置更新成功"}) | |||||
} | } | ||||
func HomeHandler(c *gin.Context) { | func HomeHandler(c *gin.Context) { | ||||
@@ -134,6 +135,13 @@ func RegPageHandler(c *gin.Context) { | |||||
c.HTML(http.StatusOK, "reg.html", nil) | c.HTML(http.StatusOK, "reg.html", nil) | ||||
} | } | ||||
func ConfigPageHandler(c *gin.Context) { | |||||
c.HTML(http.StatusOK, "conf.html", gin.H{ | |||||
"config": common.ConfigData, | |||||
}) | |||||
} | |||||
func InfoPageHandler(c *gin.Context) { | func InfoPageHandler(c *gin.Context) { | ||||
staffId := c.Query("staffId") | staffId := c.Query("staffId") | ||||
res, err := business.StaffInfo(staffId) | res, err := business.StaffInfo(staffId) | ||||
@@ -0,0 +1,193 @@ | |||||
<!DOCTYPE html> | |||||
<html lang="en"> | |||||
<head> | |||||
<meta charset="UTF-8"> | |||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |||||
<title>配置页面</title> | |||||
<style> | |||||
body{ | |||||
margin: 0; | |||||
} | |||||
li { | |||||
list-style-type: none; | |||||
} | |||||
@media screen and (orientation: portrait) { | |||||
.login { | |||||
width: 100vw; | |||||
height: 100vh; | |||||
background-image: url("/static/img/phoneBgc.jpg"); | |||||
background-size: 100% 100%; | |||||
background-repeat: no-repeat; | |||||
} | |||||
.register { | |||||
background-image: url("/static/img/registerBgc.jpg") !important; | |||||
padding-top: 15vh; | |||||
} | |||||
.enterprise-name, .devId, .devIp, .sync { | |||||
width: 50vw; | |||||
height: 5vh; | |||||
border-radius: 2vw; | |||||
background-color: transparent; | |||||
font-size: 3vw; | |||||
padding-left: 2vw; | |||||
border: 1px solid #000; | |||||
margin-bottom: 2vh; | |||||
} | |||||
.register_inputBox { | |||||
display: flex; | |||||
flex-direction: column; | |||||
justify-content: center; | |||||
align-items: center; | |||||
margin-top: 5vh; | |||||
position: relative; | |||||
} | |||||
.register_loginButton { | |||||
width: 40vw; | |||||
height: 5vh; | |||||
background-color: rgb(101, 161, 255); | |||||
border-radius: 10vw; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
color:#fff; | |||||
font-size: 4vw; | |||||
margin: 2vh 0 0 30vw; | |||||
} | |||||
#div-a-login{ | |||||
margin-top: 3vh; | |||||
text-align: center; | |||||
} | |||||
} | |||||
@media screen and (orientation: landscape) { | |||||
input:focus { | |||||
border: 0.1vw solid #000; | |||||
outline: none; /* 可选,用于去除默认的外边框样式 */ | |||||
} | |||||
.login { | |||||
width: 100vw; | |||||
height: 100vh; | |||||
background-image: url("/static/img/phoneBgc_pc.jpg"); | |||||
background-size: 100% 100%; | |||||
background-repeat: no-repeat; | |||||
position: relative; | |||||
} | |||||
.register { | |||||
background-image: url("/static/img/registerBgc_pc.jpg") !important; | |||||
} | |||||
.register_inputBox { | |||||
width: 100vw; | |||||
display: flex; | |||||
flex-direction: column; | |||||
justify-content: center; | |||||
align-items: center; | |||||
position: relative; | |||||
padding-top: 42vh; | |||||
} | |||||
.enterprise-name, .devId, .devIp,.sync { | |||||
width: 37vh; | |||||
height: 6vh; | |||||
border-radius: 2vh; | |||||
background-color: transparent; | |||||
font-size: 3vh; | |||||
border: 0.1vw solid #000; | |||||
padding-left: 1vw ; | |||||
margin-bottom: 2vh; | |||||
} | |||||
.register_loginButton { | |||||
width: 8vw; | |||||
height: 2vw; | |||||
background-color: rgb(101, 161, 255); | |||||
border-radius: 1vw; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
color: #fff; | |||||
font-size: 3vh; | |||||
position: absolute; | |||||
left: 46vw; | |||||
top: 65vh; | |||||
} | |||||
.hand:hover{ | |||||
cursor: pointer; | |||||
} | |||||
#div-a-login{ | |||||
margin-top: 10vh; | |||||
text-align: center; | |||||
font-size: 3vh; | |||||
} | |||||
} | |||||
</style> | |||||
</head> | |||||
<body> | |||||
<!-- 注册页面 --> | |||||
<div class="register login"> | |||||
<div class="register_inputBox"> | |||||
<input class="enterprise-name" name="enterpriseName" value="{{.config.EnterpriseName}}" type="text" placeholder="租户名"> | |||||
<input class="devId" name="devId" type="text" value="{{.config.DevId}}" placeholder="对应数字人设备号"> | |||||
<input class="devIp" name="devIp" value="{{.config.DevIp}}" type="text" placeholder="数字人ip"> | |||||
<select class="sync" name="sync" > | |||||
<option value="1" {{if eq .config.Sync 1}}selected{{end}}>同步</option> | |||||
<option value="0" {{if eq .config.Sync 0}}selected{{end}}>不同步</option> | |||||
</select> | |||||
</div> | |||||
<div class="register_loginButton hand">保存配置</div> | |||||
<div id="div-a-login"><a id="a-login" href="/">去登录</a></div> | |||||
</div> | |||||
<script src="/static/js/jquery.min.js"></script> | |||||
<script src="/static/js/msg-box.js"></script> | |||||
<script> | |||||
$(function(){ | |||||
$(".register_loginButton").on("click",function() { | |||||
var enterpriseName = $(".enterprise-name").val(); | |||||
var devId = $(".devId").val(); | |||||
var devIp = $(".devIp").val(); | |||||
//ip4正则字符串 | |||||
const regex = /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; | |||||
if (devIp !== "" && !regex.test(devIp)){ | |||||
$.MsgBox.Alert("提示", "ip填写错误,请检查"); | |||||
return; | |||||
} | |||||
var settings = { | |||||
"url": "/updateConfig", | |||||
"method": "POST", | |||||
"timeout": 0, | |||||
"headers": { | |||||
"Content-Type": "application/json" | |||||
}, | |||||
"data": JSON.stringify({ | |||||
"devIp": devIp, | |||||
"devId": devId, | |||||
"enterpriseName": enterpriseName, | |||||
"sync": Number($(".sync").val()) | |||||
}), | |||||
}; | |||||
$.ajax(settings).done(function (response) { | |||||
$.MsgBox.AlertWithCallback( "提示",response.message, function(){ | |||||
window.location.reload() | |||||
}) | |||||
}); | |||||
}) | |||||
}) | |||||
</script> | |||||
</body> | |||||
</html> |
@@ -136,6 +136,10 @@ | |||||
top: 18vw; | top: 18vw; | ||||
right: 26vw; | right: 26vw; | ||||
} | } | ||||
#div-a-reg{ | |||||
margin-top: 3vh; | |||||
text-align: center; | |||||
} | |||||
} | } | ||||
@media screen and (orientation: landscape) { | @media screen and (orientation: landscape) { | ||||
input:focus { | input:focus { | ||||
@@ -328,6 +332,21 @@ | |||||
cursor: pointer; | cursor: pointer; | ||||
} | } | ||||
#div-a-reg{ | |||||
width: 16vw; | |||||
height: 3vw; | |||||
background-color:transparent; | |||||
border-radius: 10vh; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
color: #fff; | |||||
font-size: 2vh; | |||||
position: absolute; | |||||
left: 55vw; | |||||
top: 72vh; | |||||
} | |||||
} | } | ||||
button:disabled { | button:disabled { | ||||
color: black !important; | color: black !important; | ||||
@@ -361,6 +380,8 @@ | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="login_button hand">登 录</div> | <div class="login_button hand">登 录</div> | ||||
<div id="div-a-reg"><a id="a-reg" href="/reg">去注册</a></div> | |||||
</div> | </div> | ||||
<script src="/static/js/jquery.min.js"></script> | <script src="/static/js/jquery.min.js"></script> | ||||
<script src="/static/js/msg-box.js"></script> | <script src="/static/js/msg-box.js"></script> | ||||
@@ -289,7 +289,6 @@ | |||||
<script src="/static/js/jquery.min.js"></script> | <script src="/static/js/jquery.min.js"></script> | ||||
<script src="/static/js/msg-box.js"></script> | <script src="/static/js/msg-box.js"></script> | ||||
<script> | <script> | ||||
console.log("9999999"); | |||||
var token= sessionStorage.getItem('token'); | var token= sessionStorage.getItem('token'); | ||||
console.log(token) | console.log(token) | ||||
if (!token){ | if (!token){ | ||||
@@ -102,6 +102,10 @@ | |||||
left: 27vw !important; | left: 27vw !important; | ||||
position: relative; | position: relative; | ||||
} | } | ||||
#div-a-login{ | |||||
margin-top: 3vh; | |||||
text-align: center; | |||||
} | |||||
} | } | ||||
@media screen and (orientation: landscape) { | @media screen and (orientation: landscape) { | ||||
input:focus { | input:focus { | ||||
@@ -216,6 +220,11 @@ | |||||
position: relative; | position: relative; | ||||
} | } | ||||
#div-a-login{ | |||||
margin-top: 10vh; | |||||
text-align: center; | |||||
font-size: 3vh; | |||||
} | |||||
} | } | ||||
@@ -297,23 +306,12 @@ | |||||
<input class="register_phoneInput" name="staffPhone" type="text" placeholder="员工手机号"> | <input class="register_phoneInput" name="staffPhone" type="text" placeholder="员工手机号"> | ||||
</div> | </div> | ||||
<div class="register_loginButton hand">注册人脸</div> | <div class="register_loginButton hand">注册人脸</div> | ||||
<div id="div-a-login"><a id="a-login" href="/">去登录</a></div> | |||||
</div> | </div> | ||||
<script src="/static/js/jquery.min.js"></script> | <script src="/static/js/jquery.min.js"></script> | ||||
<script src="/static/js/msg-box.js"></script> | <script src="/static/js/msg-box.js"></script> | ||||
<script> | <script> | ||||
$(function(){ | $(function(){ | ||||
$.MsgBox = { | |||||
Alert: function(title, msg) { | |||||
GenerateHtml("alert", title, msg); | |||||
btnOk(); //alert只是弹出消息,因此没必要用到回调函数callback | |||||
btnNo(); | |||||
}, | |||||
Confirm: function(title, msg, callback) { | |||||
GenerateHtml("confirm", title, msg); | |||||
btnOk(callback); | |||||
btnNo(); | |||||
} | |||||
} | |||||
$(".register_loginButton").on("click",function() { | $(".register_loginButton").on("click",function() { | ||||