| @@ -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() { | ||||