完善最后需求

main
whb 2 years ago
parent 0fa5cac2cc
commit fe6f468d38

@ -103,47 +103,43 @@
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- &lt;!&ndash; https://mvnrepository.com/artifact/com.auth0/java-jwt &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>io.jsonwebtoken</groupId>-->
<!-- <artifactId>jjwt</artifactId>-->
<!-- <version>0.9.1</version>-->
<!-- </dependency>-->
<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.19.2</version>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>static/**/*.woff</exclude>
<exclude>static/**/*.woff2</exclude>
<exclude>static/**/*.ttf</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.*</include>
<include>static/**/*.woff</include>
<include>static/**/*.woff2</include>
<include>static/**/*.ttf</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>

@ -1,4 +1,6 @@
package com.zhiyun.zhiyun03.course.config;
import com.zhiyun.zhiyun03.filter.LoginIntercetor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@ -9,21 +11,29 @@ public class MyWebMvcConfig extends WebMvcConfigurationSupport {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations(
"classpath:/static/");
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
// swagger静态资源相关
registry.addResourceHandler("swagger-ui.html", "doc.html").addResourceLocations(
"classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations(
"classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("swagger-ui.html", "doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
// 针对swagger自带的静态资源
registry.addResourceHandler("/swagger-ui/**").addResourceLocations(
"classpath:/META-INF/resources/webjars/springfox-swagger-ui/");
registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/");
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/layui-v2.6.8/");
super.addResourceHandlers(registry);
}
// 注解拦截器
@Override
protected void addInterceptors(InterceptorRegistry registry) {
// 配置需要拦截的所有访问请求
String[] addPathPatterns = {"/**"};
// 配置要排除的路径
String[] excludePathPatterns = {"/login.html", "/images/","/layui/**/","/user/login","/favicon.ico","/iconfont.*",
"/confont.*"
};
// 注册拦截器
registry.addInterceptor(new LoginIntercetor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);
super.addInterceptors(registry);
}
}

@ -1,79 +1,79 @@
package com.zhiyun.zhiyun03.filter;
import com.alibaba.fastjson2.JSON;
import com.zhiyun.zhiyun03.utils.common.JsonResult;
import com.zhiyun.zhiyun03.utils.common.ResultCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.AntPathMatcher;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @description:
* @author: Jie
* @date: 2022/8/10 9:48
**/
//package com.zhiyun.zhiyun03.filter;
//
//import com.alibaba.fastjson2.JSON;
//import com.zhiyun.zhiyun03.utils.common.JsonResult;
//import com.zhiyun.zhiyun03.utils.common.ResultCode;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.util.AntPathMatcher;
//
//import javax.servlet.*;
//import javax.servlet.annotation.WebFilter;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//
///**
// * @description: 检查用户是否已经完成登录
// * @author: Jie
// * @date: 2022/8/10 9:48
// **/
//@WebFilter(filterName = "LoginCheckFilter", urlPatterns = "/*")
@Slf4j
public class LoginCheckFilter implements Filter {
/**
*
*/
public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String requestURI = request.getRequestURI();
log.info("拦截到请求,{}", requestURI);
//2、判断本次请求是否需要处理
//定义不需要处理的请求路径
String[] urls = new String[]{
"/user/login",
"/user/logout",
"/layui/**",
"/front/**"
};
boolean check = check(urls, requestURI);
//3、如果不需要处理则直接放行
if (check) {
log.info("本次请求{}不需要处理", requestURI);
filterChain.doFilter(request, response);
return;
}
//取出token
String token = request.getHeader("token");
//第一次登录没有token给null会报错所以我们判断一下token是否为空为空给一个空串
//三元运算
token = token==null?"":token;
//4、判断登录状态如果已登录则直接放行
if (token!= null && token!="") {
// log.info("用户已登录用户id为{}", request.getSession().getAttribute("USER"));
filterChain.doFilter(request, response);
return;
}
log.info("用户未登录");
//5、如果未登录则返回未登录结果通过输出流方式向客户端页面响应数据
response.getWriter().write(JSON.toJSONString(JsonResult.error(ResultCode.ERROR,"用户未登录")));
return;
}
public boolean check(String[] urls, String requestURI) {
for (String url : urls) {
boolean match = PATH_MATCHER.match(url, requestURI);
if (match) {
return true;
}
}
return false;
}
}
//@Slf4j
//public class LoginCheckFilter implements Filter {
//
// /**
// * 路径匹配器,支持通配符
// */
// public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
//
// @Override
// public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// HttpServletRequest request = (HttpServletRequest) servletRequest;
// HttpServletResponse response = (HttpServletResponse) servletResponse;
// String requestURI = request.getRequestURI();
// log.info("拦截到请求,{}", requestURI);
//
// //2、判断本次请求是否需要处理
// //定义不需要处理的请求路径
// String[] urls = new String[]{
// "/login.html", "/images/",
// "/layui/**",
// "/front/**",
// "/user/login"
// };
// boolean check = check(urls, requestURI);
//
// //3、如果不需要处理则直接放行
// if (check) {
// log.info("本次请求{}不需要处理", requestURI);
// filterChain.doFilter(request, response);
// return;
// }
//
// //取出token
// String token = request.getHeader("token");
// //第一次登录没有token给null会报错所以我们判断一下token是否为空为空给一个空串
// //三元运算
// token = token==null?"":token;
// //4、判断登录状态如果已登录则直接放行
// if (token!= null && token!="") {
//// log.info("用户已登录用户id为{}", request.getSession().getAttribute("USER"));
// filterChain.doFilter(request, response);
// return;
// }
// log.info("用户未登录");
// //5、如果未登录则返回未登录结果通过输出流方式向客户端页面响应数据
// response.getWriter().write(JSON.toJSONString(JsonResult.error(ResultCode.ERROR,"用户未登录")));
// return;
// }
//
// public boolean check(String[] urls, String requestURI) {
// for (String url : urls) {
// boolean match = PATH_MATCHER.match(url, requestURI);
// if (match) {
// return true;
// }
// }
// return false;
// }
//}

@ -0,0 +1,47 @@
package com.zhiyun.zhiyun03.filter;
import com.zhiyun.zhiyun03.utils.annotation.NoLoginCheck;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;
/**
* @author yangl
* @version 1.0
* @date 2023/5/24 11:37
*/
public class LoginIntercetor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod){
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
if (method.isAnnotationPresent(NoLoginCheck.class)) {
return true;
}
}
//代码走到这,都是要拦截的资源路径
//如果用户登录过了,也要放行
HttpSession session = request.getSession();
//判断
if(session.getAttribute("user") != null){
//肯定登录过了
return true;
}else{
//未登录去登录页面
response.sendRedirect(request.getContextPath() + "/login.html");
return false;
}
}
}

@ -2,12 +2,17 @@ package com.zhiyun.zhiyun03.user.controller;
import com.zhiyun.zhiyun03.user.entity.User;
import com.zhiyun.zhiyun03.user.service.UserService;
import com.zhiyun.zhiyun03.utils.annotation.NoLoginCheck;
import com.zhiyun.zhiyun03.utils.common.JsonResult;
import com.zhiyun.zhiyun03.utils.common.ResultCode;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@Api("用户")
@RestController
@ -16,31 +21,30 @@ public class UserController {
@Autowired
UserService userService;
@NoLoginCheck
@RequestMapping(path = "/login")
public JsonResult<User> login(HttpServletRequest request, @RequestParam(name = "userCode") String username, @RequestParam(name = "password") String password) {
public JsonResult<User> login(HttpSession session, @RequestParam(name = "userName") String username, @RequestParam(name = "password") String password) {
if (username.isEmpty() || password.isEmpty()) {
return JsonResult.error(ResultCode.NO_NULL_ERROR, "账号或密码不能为空");
}
User login = userService.login(username, password);
if (login != null) {
User user = userService.login(username, password);
if (user != null) {
// String token = UUID.randomUUID()+"";
request.getSession().setAttribute("USER", login.getUserName());
session.setAttribute("user", user);
return JsonResult.success(login);
return JsonResult.success(user);
}
return JsonResult.error(ResultCode.USER_ACCOUNT_ERROR, "账号或密码错误");
}
@GetMapping("/getUsername")
public JsonResult getUsername(HttpServletRequest request){
Object user = request.getSession().getAttribute("USER");
return JsonResult.success(user);
}
@PostMapping("/logout")
public JsonResult<String> loginOut(HttpServletRequest request){
// 去除session
request.getSession().removeAttribute("USER");
return JsonResult.success("退出成功");
//退出
@RequestMapping("/logout")
public void logout(HttpServletRequest request, HttpServletResponse response) throws IOException {
//退出销毁session或者从session中清除登录信息 -> 跳转页面
HttpSession session = request.getSession(false);
session.removeAttribute("user");//从session中清除登录信息
session.invalidate();//销毁session
//跳转页面
response.sendRedirect(request.getContextPath() + "/login.html");
}
}

@ -5,6 +5,7 @@ import com.zhiyun.zhiyun03.user.entity.User;
import org.springframework.http.HttpRequest;
public interface UserService extends IService<User> {
// String login(String userName, String password);
User login(String userName, String password);
}

@ -1,20 +1,35 @@
package com.zhiyun.zhiyun03.user.service.impl;
import com.auth0.jwt.JWT;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhiyun.zhiyun03.user.entity.User;
import com.zhiyun.zhiyun03.user.mapper.UserMapper;
import com.zhiyun.zhiyun03.user.service.UserService;
import com.zhiyun.zhiyun03.utils.interceptor.JwtUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Resource
UserMapper userMapper;
// @Override
// public String login(String userName, String password) {
// QueryWrapper<User> qwu=new QueryWrapper<>();
// qwu.lambda().eq(User::getUserName,userName).eq(User::getPassword,password);
// User login = userMapper.selectOne(qwu);
// HashMap<String, Object> map = new HashMap<>();
// map.put("uid",login.getId());
// map.put("username",login.getUserName());
// String token = JwtUtils.createJwt(map);
// System.out.println(token);
//
// return token;
// }
@Override
public User login(String userName, String password) {
QueryWrapper<User> qwu=new QueryWrapper<>();

@ -0,0 +1,24 @@
package com.zhiyun.zhiyun03.utils.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
*
* 使访
*
* @Target
* ElementType.METHOD
* ElementType.TYPE
* ElementType.FIELD
* @Retention
* RetentionPolicy.SOURCE class
* RetentionPolicy.RUNTIME class
* RetentionPolicy.CLASS class
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoLoginCheck {
}

@ -0,0 +1,55 @@
package com.zhiyun.zhiyun03.utils.interceptor;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.Map;
/**
* jwt
*/
public class JwtUtils {
// 密钥
private final static String secret = "123456789qwertyui";
/**
* jwt
*
* @param claims
* @return
*/
public static String createJwt(Map<String, Object> claims) {
// 签名算法表示sha256
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
//构造jwt
JwtBuilder builder = Jwts.builder()//.setHeaderParam("type","jwt") // 设置头
.setClaims(claims) // 设置载荷
.setExpiration(new Date(System.currentTimeMillis() + 1800000)) // 设置过期时间
.signWith(signatureAlgorithm, secret); // 使用指定算法设置签名
//生成jwt
return builder.compact();
}
/**
*
*
* @param jsonWebToken
* @return
*/
public static Claims parseJWT(String jsonWebToken) {
try {
Claims claims = Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(jsonWebToken).getBody();
return claims;
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}
}

@ -0,0 +1,52 @@
//package com.zhiyun.zhiyun03.utils.interceptor;
//
//import com.zhiyun.zhiyun03.utils.annotation.NoLoginCheck;
//import com.zhiyun.zhiyun03.utils.exception.ServiceException;
//import io.jsonwebtoken.Claims;
//import org.springframework.util.StringUtils;
//import org.springframework.web.method.HandlerMethod;
//import org.springframework.web.servlet.HandlerInterceptor;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.lang.reflect.Method;
//
//public class LoginInterceptor implements HandlerInterceptor {
//
// @Override
// public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//
// // spring中将访问的控制器方法封装到HandlerMethod对象中
// // 拦截器中handler参数表示控制器方法的对象
// HandlerMethod handlerMethod = (HandlerMethod) handler;
//
// Method method = handlerMethod.getMethod();
// // 判断控制器方法是否使用了@NoLoginCheck注解
// // 如果使用了该注解直接放行不需要通过token进行登录验证
// if (method.isAnnotationPresent(NoLoginCheck.class)) {
// return true;
// }
//
// String requestURI = request.getRequestURI();
//
//// 获取tokentoken值一般放在请求头中一般会将token值放在Authorization的请求头中
// String token = request.getHeader("Authorization");
// if (!StringUtils.hasLength(token) && token == null) {
//// request.getRequestDispatcher("/login.html.bak1.bak").forward(request,response);
// response.sendRedirect(request.getContextPath() + "/login.html");
// throw new ServiceException("403", "请先进行登录操作");
// }
// Claims claims = JwtUtils.parseJWT(token);
// Integer uid = (Integer) claims.get("uid");
// if (uid == null) {
// response.sendRedirect(request.getContextPath() + "/login.html");
//// request.getRequestDispatcher("/login.html.bak1.bak").forward(request,response);
// throw new ServiceException("403", "请先进行登录操作");
// }
// return true;
// }
//
//}
//
//
//

@ -30,6 +30,13 @@ spring:
multipart:
max-file-size: 50MB
max-request-size: 50MB
web:
resources:
static-locations: classpath:/static/
mvc:
static-path-pattern: /**
# mybatis plus的配置和mybatis类似之前在mybatis的配置使用mybtis-plus替换

@ -6,7 +6,7 @@
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="layui/css/layui.css" tppabs="//res.ilayuis.com/layui/dist/css/layui.css" media="all">
<link rel="stylesheet" href="layui/css/layui.css" tppabs="//res.ilayuis.com/layui/dist/css/layui.css" media="all">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/10.2.0/swiper-bundle.min.css"
integrity="sha512-s6khMl5GDS1HbQ5/SwL1wzMayPwHXPjKoBN5kHUTDqKEPkkGyEZWKyH2lQ3YO2q3dxueG3rE0NHjRawMHd2b6g=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
@ -67,11 +67,11 @@
}
,cols: [[
{type: 'checkbox', fixed: 'left'}
,{field:'id', title:'编号', width:250, sort: true, }
,{field:'academicName', title:'学术名称', width:250}
,{field:'academicBrief', title:'学术简介', width:250}
,{field:'academicUrl', title:'超链接', width:250}
,{field:'dirName', title:'归属目录', width:250}
,{field:'id', title:'编号', width:300, sort: true, }
,{field:'academicName', title:'学术名称', width:300}
,{field:'academicBrief', title:'学术简介', width:300}
,{field:'academicUrl', title:'超链接', width:300}
,{field:'dirName', title:'归属目录', width:300}
,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:150}
]]
,page: true

@ -68,11 +68,11 @@
}
, cols: [[
{ type: 'checkbox', fixed: 'left' }
,{field:'id', title:'编号', width:250, sort: true, }
,{field:'appName', title:'应用名称', width:250}
,{field:'appBrief', title:'应用简介', width:250}
,{field:'appUrl', title:'超链接', width:250}
,{field:'dirName', title:'归属目录', width:250}
,{field:'id', title:'编号', width:300, sort: true, }
,{field:'appName', title:'应用名称', width:300}
,{field:'appBrief', title:'应用简介', width:300}
,{field:'appUrl', title:'超链接', width:300}
,{field:'dirName', title:'归属目录', width:300}
, { fixed: 'right', title: '操作', toolbar: '#barDemo', width: 150 }
]]
, page: true
@ -204,6 +204,14 @@
},
})
$.each($(".icon-swiper .swiper-slide>img"), function (){
var src = $(this).attr('src')
if(data.appIcon === src) {
const parentEl = $(this).parent('.swiper-slide')
parentEl.addClass('active')
}
})
$(".icon-swiper").on('click', '.swiper-slide>img', function (event) {
const parentEl = $(this).parent('.swiper-slide')
const siblingsEl = $(parentEl).siblings('.swiper-slide')

@ -31,34 +31,29 @@
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
<script src="./layui/layui.js"></script>
<script src="layui/layui.js"></script>
<!-- 注意:如果你直接复制所有代码到本地,上述 JS 路径需要改成你本地的 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/10.2.0/swiper-bundle.min.js"
integrity="sha512-QwpsxtdZRih55GaU/Ce2Baqoy2tEv9GltjAG8yuTy2k9lHqK7VHHp3wWWe+yITYKZlsT3AaCj49ZxMYPp46iJQ=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
// const token =sessionStorage.getItem('token')
layui.use('table', function () {
var table = layui.table
//温馨提示:默认由前端自动合计当前行数据。从 layui 2.5.6 开始: 若接口直接返回了合计行数据,则优先读取接口合计行数据。
//详见http://www.ilayuis.com/doc/modules/table.html#totalRow
table.render({
elem: '#test'
, headers: {
'Authorization': sessionStorage.getItem("token"),
'Content-Type': 'application/json'
}
, url: 'http://localhost:8080/api/course/queryCourse'
// headers: {
// 'Authorization': `Bearer ${token}`,
// 'Content-Type': 'application/json'
// }
, toolbar: '#toolbarDemo'
, defaultToolbar: []
, title: '课程中心'
, totalRow: true
, parseData: function (res) {
return {
"code": res.code, //解析接口状态
"count": res.count, //解析总页数
@ -66,9 +61,6 @@
"data": res.data.list //解析数据列表
}
},
// ,headers: { token : localStorage.token }
// ,headers: {"token":sessionStorage.getItem('token')},
response: {
statusName: 'code', //规定返回的状态码字段为code
statusCode: 200 //规定成功的状态码为200
@ -84,7 +76,6 @@
]]
, page: true
})
//头工具栏事件
table.on('toolbar(test)', function (obj) {
var data = obj.data
@ -95,7 +86,6 @@
addCourse(data)
}
})
//监听行工具事件
table.on('tool(test)', function (obj) {
var data = obj.data
@ -211,7 +201,8 @@
$.each($(".icon-swiper .swiper-slide>img"), function (){
var src = $(this).attr('src')
if(data.courseIcon === src) {
$(this).addClass('active')
const parentEl = $(this).parent('.swiper-slide')
parentEl.addClass('active')
}
})
$(".icon-swiper").on('click', '.swiper-slide>img', function (event) {

@ -6,7 +6,7 @@
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="layui/css/layui.css" tppabs="//res.ilayuis.com/layui/dist/css/layui.css" media="all">
<link rel="stylesheet" href="layui/css/layui.css" tppabs="//res.ilayuis.com/layui/dist/css/layui.css" media="all">
<!-- 注意如果你直接复制所有代码到本地上述css路径需要改成你本地的 -->
<style>
.select-img-wrap {
@ -99,11 +99,11 @@
}
,cols: [[
{type: 'checkbox', fixed: 'left'}
,{field:'id', title:'编号', width:250, sort: true, }
,{field:'gameName', title:'大赛名称', width:250}
,{field:'gameBrief', title:'大赛简介', width:250}
,{field:'gameUrl', title:'超链接', width:250}
,{field:'dirName', title:'归属目录', width:250}
,{field:'id', title:'编号', width:300, sort: true, }
,{field:'gameName', title:'大赛名称', width:300}
,{field:'gameBrief', title:'大赛简介', width:300}
,{field:'gameUrl', title:'超链接', width:300}
,{field:'dirName', title:'归属目录', width:300}
,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:150}
]]
,page: true

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save