Commit fe933bd5 authored by daniel's avatar daniel

feat(auth): 后台新增权限控制

parent bfe16c51
...@@ -49,47 +49,56 @@ public class SecurityInterceptor extends JService implements HandlerInterceptor ...@@ -49,47 +49,56 @@ public class SecurityInterceptor extends JService implements HandlerInterceptor
// 检查请求头中是否有Upgrade: websocket // 检查请求头中是否有Upgrade: websocket
String upgradeHeader = request.getHeader("Upgrade"); String upgradeHeader = request.getHeader("Upgrade");
if ("websocket".equalsIgnoreCase(upgradeHeader)) { if ("websocket".equalsIgnoreCase(upgradeHeader)) {
// 如果是WebSocket升级请求,可以选择不处理或特殊处理 return true;
// 然后返回true,继续执行 }
String uri = request.getRequestURI();
// 放行的路径:登录相关、UEditor、静态资源、微信回调
if (isWhitelisted(uri)) {
return true; return true;
} }
Map<String, Object> queryParams = getQueryParams(request); Map<String, Object> queryParams = getQueryParams(request);
// logger.info("请求URL:"+request.getRequestURI()+queryParams);
if (handler instanceof HandlerMethod) { if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler; HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod(); Method method = handlerMethod.getMethod();
PageView annotation = method.getAnnotation(PageView.class); PageView annotation = method.getAnnotation(PageView.class);
// String userAgent = request.getHeader("user-agent").toLowerCase(); // foward入口不拦截(在Controller中颁发session)
// if(userAgent.indexOf("miniprogram")>-1) {//小程序 if (uri.contains("cmpt/foward")) {
// String partnerId = request.getParameter("partnerId"); return true;
// if(partnerId == null){ }
// throw new NoAuthException("未查询到partnerdId,没权限!,uri: " + request.getRequestURI());
// } // 小程序请求放行(小程序没有session)
// } String userAgent = request.getHeader("user-agent");
if (userAgent != null) {
String ua = userAgent.toLowerCase();
if (ua.contains("miniprogram") || ua.contains("micromessenger")) {
return true;
}
}
if(request.getRequestURI().indexOf("easy") > -1 && request.getSession().getAttribute("user") == null){ // /gk/ 和 /easy/ 路径要求session登录
response.sendRedirect(domain+"login"); if ((uri.startsWith("/gk/") || uri.contains("easy")) && request.getSession().getAttribute("user") == null) {
response.sendRedirect(domain + "auth_no");
return false; return false;
} }
if (annotation != null) { if (annotation != null) {
String[] split = request.getRequestURI().split("/"); // 已登录的用户跳过sign校验
String cmptId = split[split.length - 1]; if (request.getSession().getAttribute("user") != null) {
return true;
}
String timestamp = request.getParameter("timestamp"); String timestamp = request.getParameter("timestamp");
String sign = request.getParameter("sign"); String sign = request.getParameter("sign");
String cId = request.getParameter("cId"); String cId = request.getParameter("cId");
String uId = request.getParameter("uId"); String uId = request.getParameter("uId");
// log.info("请求路径:" + str + ",sign:" + DigestUtils.md5DigestAsHex(str.getBytes()) + ",psign:" + sign); if (cId == null || timestamp == null || sign == null || uId == null) {
if (NumberUtils.toInt(uId, -1) == -1 || NumberUtils.toInt(uId, -1) == 0) { log.info("缺少签名参数, uri:{}", uri);
log.info("无用户信息登录"); response.sendRedirect(domain + "auth_no");
response.sendRedirect("http://timer.geexek.com");
return false; return false;
} }
if (cId == null || timestamp == null) {
log.info("无权限!");
throw new RuntimeException("无权限");
}
String str = "cId=" + cId + "&timestamp=" + timestamp + "&uId=" + uId; String str = "cId=" + cId + "&timestamp=" + timestamp + "&uId=" + uId;
if (!DigestUtils.md5DigestAsHex(str.getBytes()).equals(sign)) { if (!DigestUtils.md5DigestAsHex(str.getBytes()).equals(sign)) {
log.info("签名不一致!"); log.info("签名不一致!");
...@@ -103,6 +112,19 @@ public class SecurityInterceptor extends JService implements HandlerInterceptor ...@@ -103,6 +112,19 @@ public class SecurityInterceptor extends JService implements HandlerInterceptor
return true; return true;
} }
private boolean isWhitelisted(String uri) {
return uri.equals("/login") || uri.startsWith("/login/")
|| uri.equals("/loginout")
|| uri.startsWith("/getQrCodePic") || uri.startsWith("/getSign")
|| uri.startsWith("/getAuthorizeCode")
|| uri.startsWith("/sendMsgCode") || uri.startsWith("/sendRegisterMsgCode")
|| uri.startsWith("/startCaptcha")
|| uri.startsWith("/ueditor/")
|| uri.startsWith("/static/")
|| uri.startsWith("/api-common/")
|| uri.equals("/auth") || uri.equals("/auth_no");
}
public static Map<String, Object> getQueryParams(HttpServletRequest request) { public static Map<String, Object> getQueryParams(HttpServletRequest request) {
Map map; Map map;
if (request.getMethod().equalsIgnoreCase("POST")) { if (request.getMethod().equalsIgnoreCase("POST")) {
...@@ -205,7 +227,7 @@ public class SecurityInterceptor extends JService implements HandlerInterceptor ...@@ -205,7 +227,7 @@ public class SecurityInterceptor extends JService implements HandlerInterceptor
modelAndView.addObject("uId", uId); modelAndView.addObject("uId", uId);
modelAndView.addObject("sign", new String(DigestUtils.md5DigestAsHex(("cId=" + cmptId + "&timestamp=" + timestamp + "&uId=" + uId).getBytes()))); modelAndView.addObject("sign", new String(DigestUtils.md5DigestAsHex(("cId=" + cmptId + "&timestamp=" + timestamp + "&uId=" + uId).getBytes())));
modelAndView.addObject("baseURL",domain); modelAndView.addObject("baseURL",domain);
modelAndView.addObject("yfb",request.getSession().getAttribute("yfb")); // modelAndView.addObject("yfb",request.getSession().getAttribute("yfb"));
} }
} }
......
...@@ -164,6 +164,7 @@ public class CmptController { ...@@ -164,6 +164,7 @@ public class CmptController {
@PathVariable("userId") Integer userId, @PathVariable("userId") Integer userId,
@PathVariable("gUserId") Integer gUserId, @PathVariable("gUserId") Integer gUserId,
@RequestParam(value = "partnerId",required = false) String partnerId, @RequestParam(value = "partnerId",required = false) String partnerId,
HttpServletRequest request,
ModelAndView mv) { ModelAndView mv) {
log.info("=====跳转赛客助手管理后台 cmptId:"+cmptId+",userId:"+userId+",gUserId:"+gUserId); log.info("=====跳转赛客助手管理后台 cmptId:"+cmptId+",userId:"+userId+",gUserId:"+gUserId);
// 修改从赛客官网后台跳转到赛客助手后台 by Linc 2022/05/18 // 修改从赛客官网后台跳转到赛客助手后台 by Linc 2022/05/18
...@@ -204,6 +205,16 @@ public class CmptController { ...@@ -204,6 +205,16 @@ public class CmptController {
}else{ }else{
user2 = new NeuUser().setId(uId); user2 = new NeuUser().setId(uId);
} }
// 颁发session鉴权 - uId或guserid即为registerinfo.userid
Integer geexekUserId = user2.getGuserid() > 0 ? user2.getGuserid() : uId;
if (geexekUserId != null && geexekUserId > 0) {
GeexekUser geexekUser = cmptService.getGeexekUser(geexekUserId);
if (geexekUser != null) {
request.getSession().setAttribute("user", geexekUser);
}
}
String param = "uId=" + user2.getId(); String param = "uId=" + user2.getId();
// 跳转到赛客助手后台赛事列表 // 跳转到赛客助手后台赛事列表
if(partnerId != null&& !partnerId.isEmpty()&&!partnerId.equals("null")){ if(partnerId != null&& !partnerId.isEmpty()&&!partnerId.equals("null")){
......
...@@ -454,6 +454,12 @@ public class MicroApiController { ...@@ -454,6 +454,12 @@ public class MicroApiController {
String partnerId = request.getParameter("partnerId"); String partnerId = request.getParameter("partnerId");
String creator = request.getParameter("userId"); String creator = request.getParameter("userId");
Partner partner = cmptService.getPartnerById(partnerId); Partner partner = cmptService.getPartnerById(partnerId);
if (partner == null) {
Page<List<Cmpt>> result = new Page<>();
result.setCode(-1);
result.setMsg("合作方不存在");
return(result);
}
// log.info("partner:"+partner); // log.info("partner:"+partner);
Map<String, String> param = new HashMap<>(); Map<String, String> param = new HashMap<>();
param.put("userId", partner.getUserId() + ""); param.put("userId", partner.getUserId() + "");
......
package com.dlbridge.jadp.plugins.common;
import com.dlbridge.jadp.plugins.cmpt.utils.AliOssUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.*;
@RestController
@RequestMapping("/ueditor")
@RequiredArgsConstructor
@Slf4j
public class UEditorController {
private static final long IMAGE_MAX_SIZE = 10 * 1024 * 1024;
private static final long FILE_MAX_SIZE = 50 * 1024 * 1024;
private static final List<String> IMAGE_ALLOWED = Arrays.asList(".png", ".jpg", ".jpeg", ".gif", ".bmp");
private static final List<String> FILE_ALLOWED = Arrays.asList(
".png", ".jpg", ".jpeg", ".gif", ".bmp",
".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt",
".zip", ".rar", ".7z", ".mp3", ".mp4");
private static final Map<String, byte[]> MAGIC_NUMBERS = new HashMap<>();
static {
MAGIC_NUMBERS.put(".jpg", new byte[]{(byte) 0xFF, (byte) 0xD8, (byte) 0xFF});
MAGIC_NUMBERS.put(".jpeg", new byte[]{(byte) 0xFF, (byte) 0xD8, (byte) 0xFF});
MAGIC_NUMBERS.put(".png", new byte[]{(byte) 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A});
MAGIC_NUMBERS.put(".gif", new byte[]{0x47, 0x49, 0x46, 0x38});
MAGIC_NUMBERS.put(".bmp", new byte[]{0x42, 0x4D});
MAGIC_NUMBERS.put(".pdf", new byte[]{0x25, 0x50, 0x44, 0x46});
MAGIC_NUMBERS.put(".doc", new byte[]{(byte) 0xD0, (byte) 0xCF, 0x11, (byte) 0xE0, (byte) 0xA1, (byte) 0xB1, 0x1A, (byte) 0xE1});
MAGIC_NUMBERS.put(".docx", new byte[]{0x50, 0x4B, 0x03, 0x04});
MAGIC_NUMBERS.put(".xls", new byte[]{(byte) 0xD0, (byte) 0xCF, 0x11, (byte) 0xE0, (byte) 0xA1, (byte) 0xB1, 0x1A, (byte) 0xE1});
MAGIC_NUMBERS.put(".xlsx", new byte[]{0x50, 0x4B, 0x03, 0x04});
MAGIC_NUMBERS.put(".ppt", new byte[]{(byte) 0xD0, (byte) 0xCF, 0x11, (byte) 0xE0, (byte) 0xA1, (byte) 0xB1, 0x1A, (byte) 0xE1});
MAGIC_NUMBERS.put(".pptx", new byte[]{0x50, 0x4B, 0x03, 0x04});
MAGIC_NUMBERS.put(".zip", new byte[]{0x50, 0x4B, 0x03, 0x04});
MAGIC_NUMBERS.put(".rar", new byte[]{0x52, 0x61, 0x72, 0x21, 0x1A, 0x07, 0x00});
MAGIC_NUMBERS.put(".7z", new byte[]{0x37, 0x7A, (byte) 0xBC, (byte) 0xAF, 0x27, 0x1C});
MAGIC_NUMBERS.put(".mp3", new byte[]{0x49, 0x44, 0x33});
MAGIC_NUMBERS.put(".mp4", new byte[]{0x00, 0x00, 0x00});
}
private final AliOssUtil aliOssUtil;
@RequestMapping("/controller")
public Object exec(@RequestParam("action") String action,
@RequestParam(value = "file", required = false) MultipartFile file,
HttpServletRequest request) {
switch (action) {
case "config":
return getConfig();
case "uploadimage":
case "uploadscrawl":
return uploadImage(file, request);
case "uploadfile":
return uploadFile(file, request);
default:
Map<String, Object> result = new HashMap<>();
result.put("state", "action not found");
return result;
}
}
private Map<String, Object> getConfig() {
Map<String, Object> config = new HashMap<>();
config.put("imageActionName", "uploadimage");
config.put("imageFieldName", "file");
config.put("imageMaxSize", IMAGE_MAX_SIZE);
config.put("imageAllowFiles", IMAGE_ALLOWED);
config.put("imageCompressEnable", true);
config.put("imageCompressBorder", 1600);
config.put("imageInsertAlign", "none");
config.put("imageUrlPrefix", "");
config.put("imagePathFormat", "");
config.put("scrawlActionName", "uploadscrawl");
config.put("scrawlFieldName", "file");
config.put("scrawlMaxSize", 2097152);
config.put("scrawlUrlPrefix", "");
config.put("scrawlInsertAlign", "none");
config.put("fileActionName", "uploadfile");
config.put("fileFieldName", "file");
config.put("fileMaxSize", FILE_MAX_SIZE);
config.put("fileAllowFiles", FILE_ALLOWED);
config.put("fileUrlPrefix", "");
config.put("filePathFormat", "");
return config;
}
private Map<String, Object> uploadImage(MultipartFile file, HttpServletRequest request) {
Map<String, Object> result = new HashMap<>();
if (file == null || file.isEmpty()) {
result.put("state", "文件为空");
return result;
}
if (file.getSize() > IMAGE_MAX_SIZE) {
result.put("state", "文件大小超过限制(10MB)");
return result;
}
try {
String originalFilename = file.getOriginalFilename();
if (originalFilename == null || !originalFilename.contains(".")) {
result.put("state", "文件名无效");
return result;
}
String extension = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
if (!IMAGE_ALLOWED.contains(extension)) {
result.put("state", "不允许的文件类型");
return result;
}
byte[] fileBytes = file.getBytes();
if (!checkMagicNumber(fileBytes, extension)) {
result.put("state", "文件内容与扩展名不符");
return result;
}
String objectName = "gk/ueditor/" + UUID.randomUUID() + extension;
String filePath = aliOssUtil.upload(fileBytes, objectName);
result.put("state", "SUCCESS");
result.put("url", filePath);
result.put("title", originalFilename);
result.put("original", originalFilename);
} catch (IOException e) {
log.error("UEditor图片上传失败", e);
result.put("state", "上传失败");
}
return result;
}
private Map<String, Object> uploadFile(MultipartFile file, HttpServletRequest request) {
Map<String, Object> result = new HashMap<>();
if (file == null || file.isEmpty()) {
result.put("state", "文件为空");
return result;
}
if (file.getSize() > FILE_MAX_SIZE) {
result.put("state", "文件大小超过限制(50MB)");
return result;
}
try {
String originalFilename = file.getOriginalFilename();
if (originalFilename == null || !originalFilename.contains(".")) {
result.put("state", "文件名无效");
return result;
}
String extension = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
if (!FILE_ALLOWED.contains(extension)) {
result.put("state", "不允许的文件类型");
return result;
}
byte[] fileBytes = file.getBytes();
if (MAGIC_NUMBERS.containsKey(extension) && !checkMagicNumber(fileBytes, extension)) {
result.put("state", "文件内容与扩展名不符");
return result;
}
String objectName = "gk/ueditor/" + UUID.randomUUID() + extension;
String filePath = aliOssUtil.upload(fileBytes, objectName);
result.put("state", "SUCCESS");
result.put("url", filePath);
result.put("title", originalFilename);
result.put("original", originalFilename);
} catch (IOException e) {
log.error("UEditor文件上传失败", e);
result.put("state", "上传失败");
}
return result;
}
private boolean checkMagicNumber(byte[] fileBytes, String extension) {
byte[] expected = MAGIC_NUMBERS.get(extension);
if (expected == null) {
return true;
}
if (fileBytes.length < expected.length) {
return false;
}
for (int i = 0; i < expected.length; i++) {
if (fileBytes[i] != expected[i]) {
return false;
}
}
return true;
}
}
...@@ -60,7 +60,7 @@ geexek.cmpt.url=https://timerbackend.geexek.com/ ...@@ -60,7 +60,7 @@ geexek.cmpt.url=https://timerbackend.geexek.com/
geexek.shamus.url=http://shamus.geexek.com/ geexek.shamus.url=http://shamus.geexek.com/
timer.url=http://timer.geexek.com/ timer.url=http://timer.geexek.com/
server.url=http://zs.geexek.com/ server.url=http://localhost:9090/
server.url.https=http://localhost:9090/ server.url.https=http://localhost:9090/
###redis ###redis
spring.redis.port=6379 spring.redis.port=6379
...@@ -104,17 +104,25 @@ spring.cloud.sentinel.skip-keys=cmptId ...@@ -104,17 +104,25 @@ spring.cloud.sentinel.skip-keys=cmptId
spring.cloud.sentinel.exclude-urls=/static/**,**.css,**.js spring.cloud.sentinel.exclude-urls=/static/**,**.css,**.js
## nacos ��ַ ## nacos ��ַ
spring.cloud.sentinel.datasource.ds.nacos.server-addr=192.168.214.231:9848,192.168.214.232:9848,192.168.214.230:9848 #spring.cloud.sentinel.datasource.ds.nacos.server-addr=192.168.214.231:9848,192.168.214.232:9848,192.168.214.230:9848
spring.cloud.sentinel.datasource.ds.nacos.dataId=micro-gksite-sentinel spring.cloud.sentinel.datasource.ds.nacos.dataId=micro-gksite-sentinel
spring.cloud.sentinel.datasource.ds.nacos.data-type=json spring.cloud.sentinel.datasource.ds.nacos.data-type=json
spring.cloud.sentinel.datasource.ds.nacos.groupId=production spring.cloud.sentinel.datasource.ds.nacos.groupId=production
spring.cloud.sentinel.enabled=false
# 禁用 Nacos 服务注册与发现
spring.cloud.nacos.discovery.enabled=false
# 禁用 Nacos 配置管理
spring.cloud.nacos.config.enabled=false
# 如果使用了 Sentinel 数据源从 Nacos 读取,禁用该数据源
spring.cloud.sentinel.datasource.ds.nacos.server-addr=
#spring.cloud.sentinel.datasource.ds1.nacos.namespace=fad8a39-a3e7-49a1-ae96-0f7aaf39136b #spring.cloud.sentinel.datasource.ds1.nacos.namespace=fad8a39-a3e7-49a1-ae96-0f7aaf39136b
# #
## �������� ##
spring.cloud.sentinel.datasource.ds.nacos.rule-type=flow spring.cloud.sentinel.datasource.ds.nacos.rule-type=flow
base.url=http://localhost:8080 base.url=http://localhost:9090/
lock.url=https://openapi.qiyuesuo.cn lock.url=https://openapi.qiyuesuo.cn
lock.accessKey=trRQR9ewQX lock.accessKey=trRQR9ewQX
......
...@@ -7,21 +7,49 @@ ...@@ -7,21 +7,49 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no">
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> <title>无权限访问</title>
<meta name="keywords" content="">
<style> <style>
.auth{ body {
width: 100%; margin: 0;
position: absolute; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
bottom: 0px; background: #f5f5f5;
left: 0px; }
.container {
max-width: 500px;
margin: 120px auto;
text-align: center;
background: #fff;
border-radius: 8px;
padding: 60px 40px;
box-shadow: 0 2px 12px rgba(0,0,0,0.08);
}
.icon {
font-size: 60px;
margin-bottom: 20px;
}
.title {
font-size: 22px;
color: #333;
margin-bottom: 16px;
}
.desc {
font-size: 15px;
color: #666;
line-height: 1.8;
}
.link {
color: #ce3939;
text-decoration: none;
} }
</style> </style>
</head> </head>
<body style="position: relative;margin: 0px"> <body>
<div style="height: 500px;width: 100%;text-align: center"> <div class="container">
<span style="display: inline;height: 200px;margin-top: 150px;line-height: 200px; <div class="icon">&#128274;</div>
text-align: center;font-size: #333;font-size: 30px">未注册为组委会用户</span> <div class="title">暂无访问权限</div>
<div class="desc">
请从<a class="link" href="http://timer.geexek.com" target="_blank">计时后台</a>或<a class="link" href="http://www.geexek.com" target="_blank">报名后台</a>跳转进入本系统。
</div>
</div> </div>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -50,10 +50,12 @@ ...@@ -50,10 +50,12 @@
<script src="${ctxStatic}/newdermon/vendor/jquery/jquery.min.js"></script> <script src="${ctxStatic}/newdermon/vendor/jquery/jquery.min.js"></script>
<!-- 引入富文本 --> <!-- 引入富文本 -->
<script>window.UEDITOR_HOME_URL = "https://enroll.geexek.com/js/ueditor/";</script>
<script <script
src="https://enroll.geexek.com/js/ueditor/ueditor.config-zs.js?v=<%=System.currentTimeMillis()%>"></script> src="https://enroll.geexek.com/js/ueditor/ueditor.config-zs.js?v=<%=System.currentTimeMillis()%>"></script>
<script <script
src="https://enroll.geexek.com/js/ueditor/ueditor.all.js?v=<%=System.currentTimeMillis()%>"></script> src="https://enroll.geexek.com/js/ueditor/ueditor.all.js?v=<%=System.currentTimeMillis()%>"></script>
<script>window.UEDITOR_CONFIG.serverUrl = "/ueditor/controller";</script>
<style> <style>
#app { #app {
padding: 0 20px 20px 20px; padding: 0 20px 20px 20px;
......
This diff is collapsed.
...@@ -38,10 +38,12 @@ ...@@ -38,10 +38,12 @@
<script type="text/javascript" src="${ctxStatic}/leaflet/label.js"></script> <script type="text/javascript" src="${ctxStatic}/leaflet/label.js"></script>
<script type="text/javascript" charset="utf-8" src="${ctxStatic}/layer/layer.js"></script> <script type="text/javascript" charset="utf-8" src="${ctxStatic}/layer/layer.js"></script>
<link rel="stylesheet" href="${ctxStatic}/layer/skin/layer.css"> <link rel="stylesheet" href="${ctxStatic}/layer/skin/layer.css">
<script>window.UEDITOR_HOME_URL = "https://enroll.geexek.com/js/ueditor/";</script>
<script <script
src="https://enroll.geexek.com/js/ueditor/ueditor.config-zs.js?v=<%=System.currentTimeMillis()%>"></script> src="https://enroll.geexek.com/js/ueditor/ueditor.config-zs.js?v=<%=System.currentTimeMillis()%>"></script>
<script <script
src="https://enroll.geexek.com/js/ueditor/ueditor.all.js?v=<%=System.currentTimeMillis()%>"></script> src="https://enroll.geexek.com/js/ueditor/ueditor.all.js?v=<%=System.currentTimeMillis()%>"></script>
<script>window.UEDITOR_CONFIG.serverUrl = "/ueditor/controller";</script>
<script src="${ctxStatic}/newdermon/vendor/popper.js/umd/popper.min.js"></script> <script src="${ctxStatic}/newdermon/vendor/popper.js/umd/popper.min.js"></script>
<script src="${ctxStatic}/js/qikoo.js"></script> <script src="${ctxStatic}/js/qikoo.js"></script>
<style> <style>
......
...@@ -31,10 +31,12 @@ ...@@ -31,10 +31,12 @@
<link rel="stylesheet" href="${ctxStatic}/cmpt/setting.css?v=<%=System.currentTimeMillis()%>"> <link rel="stylesheet" href="${ctxStatic}/cmpt/setting.css?v=<%=System.currentTimeMillis()%>">
<link rel="stylesheet" href="${ctxStatic}/cmpt/road.css?v=<%=System.currentTimeMillis()%>" /> <link rel="stylesheet" href="${ctxStatic}/cmpt/road.css?v=<%=System.currentTimeMillis()%>" />
<link rel="stylesheet" href="${ctxStatic}/cmpt/road-new.css?v=<%=System.currentTimeMillis()%>" /> <link rel="stylesheet" href="${ctxStatic}/cmpt/road-new.css?v=<%=System.currentTimeMillis()%>" />
<script>window.UEDITOR_HOME_URL = "https://enroll.geexek.com/js/ueditor/";</script>
<script <script
src="https://enroll.geexek.com/js/ueditor/ueditor.config-zs.js?v=<%=System.currentTimeMillis()%>"></script> src="https://enroll.geexek.com/js/ueditor/ueditor.config-zs.js?v=<%=System.currentTimeMillis()%>"></script>
<script <script
src="https://enroll.geexek.com/js/ueditor/ueditor.all.js?v=<%=System.currentTimeMillis()%>"></script> src="https://enroll.geexek.com/js/ueditor/ueditor.all.js?v=<%=System.currentTimeMillis()%>"></script>
<script>window.UEDITOR_CONFIG.serverUrl = "/ueditor/controller";</script>
<script src="${ctxStatic}/My97DatePicker/WdatePicker.js" type="text/javascript"></script> <script src="${ctxStatic}/My97DatePicker/WdatePicker.js" type="text/javascript"></script>
<script src="${ctxStatic}/newdermon/vendor/jquery/jquery.min.js"></script> <script src="${ctxStatic}/newdermon/vendor/jquery/jquery.min.js"></script>
<script type="text/javascript" charset="utf-8" src="${ctxStatic}/layer/layer.js"></script> <script type="text/javascript" charset="utf-8" src="${ctxStatic}/layer/layer.js"></script>
......
...@@ -38,10 +38,12 @@ ...@@ -38,10 +38,12 @@
<script type="text/javascript" charset="utf-8" src="${ctxStatic}/layer/layer.js"></script> <script type="text/javascript" charset="utf-8" src="${ctxStatic}/layer/layer.js"></script>
<link rel="stylesheet" href="${ctxStatic}/layer/skin/layer.css"> <link rel="stylesheet" href="${ctxStatic}/layer/skin/layer.css">
<script>window.UEDITOR_HOME_URL = "https://enroll.geexek.com/js/ueditor/";</script>
<script <script
src="https://enroll.geexek.com/js/ueditor/ueditor.config-zs.js?v=<%=System.currentTimeMillis()%>"></script> src="https://enroll.geexek.com/js/ueditor/ueditor.config-zs.js?v=<%=System.currentTimeMillis()%>"></script>
<script <script
src="https://enroll.geexek.com/js/ueditor/ueditor.all.js?v=<%=System.currentTimeMillis()%>"></script> src="https://enroll.geexek.com/js/ueditor/ueditor.all.js?v=<%=System.currentTimeMillis()%>"></script>
<script>window.UEDITOR_CONFIG.serverUrl = "/ueditor/controller";</script>
<link rel="stylesheet" href="/static/cmpt/score.css?<%=System.currentTimeMillis()%>"> <link rel="stylesheet" href="/static/cmpt/score.css?<%=System.currentTimeMillis()%>">
<style> <style>
......
...@@ -41,10 +41,12 @@ ...@@ -41,10 +41,12 @@
<script type="text/javascript" charset="utf-8" src="${ctxStatic}/layer/layer.js"></script> <script type="text/javascript" charset="utf-8" src="${ctxStatic}/layer/layer.js"></script>
<link rel="stylesheet" href="${ctxStatic}/layer/skin/layer.css"> <link rel="stylesheet" href="${ctxStatic}/layer/skin/layer.css">
<script>window.UEDITOR_HOME_URL = "https://enroll.geexek.com/js/ueditor/";</script>
<script <script
src="https://enroll.geexek.com/js/ueditor/ueditor.config-zs.js?v=<%=System.currentTimeMillis()%>"></script> src="https://enroll.geexek.com/js/ueditor/ueditor.config-zs.js?v=<%=System.currentTimeMillis()%>"></script>
<script <script
src="https://enroll.geexek.com/js/ueditor/ueditor.all.js?v=<%=System.currentTimeMillis()%>"></script> src="https://enroll.geexek.com/js/ueditor/ueditor.all.js?v=<%=System.currentTimeMillis()%>"></script>
<script>window.UEDITOR_CONFIG.serverUrl = "/ueditor/controller";</script>
<link rel="stylesheet" href="/static/cmpt/score.css?<%=System.currentTimeMillis()%>"> <link rel="stylesheet" href="/static/cmpt/score.css?<%=System.currentTimeMillis()%>">
<style> <style>
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
<!-- Navbar Brand --><a class="navbar-brand d-none d-sm-inline-block"> <!-- Navbar Brand --><a class="navbar-brand d-none d-sm-inline-block">
<div class="brand-text d-none d-lg-inline-block"><span class="logosaike"></span><strong <div class="brand-text d-none d-lg-inline-block"><span class="logosaike"></span><strong
class="logonote">赛事管理平台</strong></div> class="logonote">赛事管理平台</strong></div>
<div class="brand-text d-none d-sm-inline-block d-lg-none"><strong>BD</strong></div> <div class="brand-text d-none d-sm-inline-block d-lg-none"><strong>赛客现场助手</strong></div>
</a> </a>
<!-- Toggle Button--><a id="toggle-btn" href="#" <!-- Toggle Button--><a id="toggle-btn" href="#"
class="menu-btn active"><span></span><span></span><span></span></a> class="menu-btn active"><span></span><span></span><span></span></a>
......
...@@ -181,37 +181,7 @@ ...@@ -181,37 +181,7 @@
<input type="hidden" value="${timestamp}" id="timestamp"> <input type="hidden" value="${timestamp}" id="timestamp">
<input type="hidden" value="${sign}" id="sign"> <input type="hidden" value="${sign}" id="sign">
<nav class="side-navbar"> <nav class="side-navbar">
<c:choose> <c:if test="${not empty sessionScope.user}">
<c:when test="${yfb}">
<li id="base" style="display: none;"></li>
<ul class="yfb" style="padding: 20px 0px;height: 460px;">
<li class="data menu-sub-item">
<a
href="/easy/data/${cmpt.cmptId}?uId=${uId}&cId=${cId}&timestamp=${timestamp}&sign=${sign}">
<span class="left-arrow"></span>
<span class="menu-txt">数据统计</span>
</a>
</li>
<li class="review menu-sub-item">
<a
href="/easy/review/${cmpt.cmptId}?uId=${uId}&cId=${cId}&timestamp=${timestamp}&sign=${sign}">
<span class="left-arrow"></span>
<span class="menu-txt">成绩管理</span>
</a>
</li>
<li class="road menu-sub-item">
<a
href="/easy/road/${cmpt.cmptId}?uId=${uId}&cId=${cId}&timestamp=${timestamp}&sign=${sign}">
<span class="left-arrow"></span>
<span class="menu-txt">路线导入</span>
</a>
</li>
<li class="menu-sub-item">
<a href="/easy/me"></span><span class="menu-txt">返回赛事</span></a>
</li>
</ul>
</c:when>
<c:otherwise>
<ul class="list-unstyled" style="margin: 0px;height: 100%;"> <ul class="list-unstyled" style="margin: 0px;height: 100%;">
<li class="main menu-item"> <li class="main menu-item">
<a href="/gk/cmpt/${cmpt.cmptId}?uId=${uId}&cId=${cId}&timestamp=${timestamp}&sign=${sign}"> <a href="/gk/cmpt/${cmpt.cmptId}?uId=${uId}&cId=${cId}&timestamp=${timestamp}&sign=${sign}">
...@@ -486,8 +456,7 @@ ...@@ -486,8 +456,7 @@
</li> </li>
</ul> </ul>
</ul> </ul>
</c:otherwise> </c:if>
</c:choose>
</nav> </nav>
<script> <script>
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment