优化首页

This commit is contained in:
zhujj 2018-12-19 13:46:05 +08:00
parent c7ccd80b24
commit ca3ea4a248
22 changed files with 2489 additions and 0 deletions

View File

@ -0,0 +1,152 @@
package com.ruoyi.course.controller;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.course.domain.TrainCourseCategory;
import com.ruoyi.course.service.ITrainCourseCategoryService;
import com.ruoyi.framework.web.base.BaseController;
import com.ruoyi.framework.web.util.ShiroUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* 课程分类管理
*
* @author ruoyi
*/
@Controller
@RequestMapping("/train/course/category")
public class TrainCourseCategoryController extends BaseController
{
private String prefix = "course/category";
@Autowired
private ITrainCourseCategoryService trainCourseCategoryService;
@RequiresPermissions("train:course:category:view")
@GetMapping()
public String dept()
{
return prefix + "/dept";
}
@RequiresPermissions("train:course:category:list")
@GetMapping("/list")
@ResponseBody
public List<TrainCourseCategory> list(TrainCourseCategory dept)
{
List<TrainCourseCategory> deptList = trainCourseCategoryService.selectDeptList(dept);
return deptList;
}
/**
* 新增课程分类
*/
@GetMapping("/add/{parentId}")
public String add(@PathVariable("parentId") Long parentId, ModelMap mmap)
{
mmap.put("dept", trainCourseCategoryService.selectDeptById(parentId));
return prefix + "/add";
}
/**
* 新增保存课程分类
*/
@Log(title = "课程分类管理", businessType = BusinessType.INSERT)
@RequiresPermissions("train:course:category:add")
@PostMapping("/add")
@ResponseBody
public AjaxResult addSave(TrainCourseCategory dept)
{
dept.setCreateBy(ShiroUtils.getLoginName());
return toAjax(trainCourseCategoryService.insertDept(dept));
}
/**
* 修改
*/
@GetMapping("/edit/{deptId}")
public String edit(@PathVariable("deptId") Long deptId, ModelMap mmap)
{
TrainCourseCategory dept = trainCourseCategoryService.selectDeptById(deptId);
if (StringUtils.isNotNull(dept) && 100L == deptId)
{
dept.setParentName("");
}
mmap.put("dept", dept);
return prefix + "/edit";
}
/**
* 保存
*/
@Log(title = "课程分类管理", businessType = BusinessType.UPDATE)
@RequiresPermissions("train:course:category:edit")
@PostMapping("/edit")
@ResponseBody
public AjaxResult editSave(TrainCourseCategory dept)
{
dept.setUpdateBy(ShiroUtils.getLoginName());
return toAjax(trainCourseCategoryService.updateDept(dept));
}
/**
* 删除
*/
@Log(title = "课程分类管理", businessType = BusinessType.DELETE)
@RequiresPermissions("train:course:category:remove")
@PostMapping("/remove/{deptId}")
@ResponseBody
public AjaxResult remove(@PathVariable("deptId") Long deptId)
{
if (trainCourseCategoryService.selectDeptCount(deptId) > 0)
{
return error(1, "存在下级课程分类,不允许删除");
}
if (trainCourseCategoryService.checkDeptExistUser(deptId))
{
return error(1, "课程分类存在用户,不允许删除");
}
return toAjax(trainCourseCategoryService.deleteDeptById(deptId));
}
/**
* 校验课程分类名称
*/
@PostMapping("/checkDeptNameUnique")
@ResponseBody
public String checkDeptNameUnique(TrainCourseCategory dept)
{
return trainCourseCategoryService.checkDeptNameUnique(dept);
}
/**
* 选择课程分类树
*/
@GetMapping("/selectDeptTree/{deptId}")
public String selectDeptTree(@PathVariable("deptId") Long deptId, ModelMap mmap)
{
mmap.put("dept", trainCourseCategoryService.selectDeptById(deptId));
return prefix + "/tree";
}
/**
* 加载课程分类列表树
*/
@GetMapping("/treeData")
@ResponseBody
public List<Map<String, Object>> treeData()
{
List<Map<String, Object>> tree = trainCourseCategoryService.selectDeptTree();
return tree;
}
}

View File

@ -0,0 +1,132 @@
package com.ruoyi.course.domain;
import com.ruoyi.common.base.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import javax.persistence.Id;
/**
* 课程分类表 sys_dept
*
* @author ruoyi
*/
public class TrainCourseCategory extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 分类ID */
@Id
private Long id;
/**
* 课程分类
*/
private Long deptId;
/** 父课程分类ID */
private Long parentId;
/** 祖级列表 */
private String parentIds;
/** 课程分类名称 */
private String name;
/** 显示顺序 */
private String orderNum;
/** 删除标志0代表存在 2代表删除 */
private String delFlag;
/** 父课程分类名称 */
private String parentName;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getDeptId() {
return deptId;
}
public void setDeptId(Long deptId) {
this.deptId = deptId;
}
public Long getParentId()
{
return parentId;
}
public void setParentId(Long parentId)
{
this.parentId = parentId;
}
public String getParentIds() {
return parentIds;
}
public void setParentIds(String parentIds) {
this.parentIds = parentIds;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOrderNum()
{
return orderNum;
}
public void setOrderNum(String orderNum)
{
this.orderNum = orderNum;
}
public String getDelFlag()
{
return delFlag;
}
public void setDelFlag(String delFlag)
{
this.delFlag = delFlag;
}
public String getParentName()
{
return parentName;
}
public void setParentName(String parentName)
{
this.parentName = parentName;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("deptId", getDeptId())
.append("parentId", getParentId())
.append("ancestors", getParentIds())
.append("deptName", getName())
.append("orderNum", getOrderNum())
.append("delFlag", getDelFlag())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
}

View File

@ -0,0 +1,96 @@
package com.ruoyi.course.mapper;
import com.ruoyi.course.domain.TrainCourseCategory;
import com.ruoyi.framework.web.base.MyMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 课程分类管理 数据层
*
* @author ruoyi
*/
public interface TrainCourseCategoryMapper extends MyMapper<TrainCourseCategory>
{
/**
* 查询课程分类人数
*
* @param dept 课程分类信息
* @return 结果
*/
public int selectDeptCount(TrainCourseCategory dept);
/**
* 查询课程分类是否存在用户
*
* @param deptId 课程分类ID
* @return 结果
*/
public int checkDeptExistUser(Long deptId);
/**
* 查询课程分类管理数据
*
* @param dept 课程分类信息
* @return 课程分类信息集合
*/
public List<TrainCourseCategory> selectDeptList(TrainCourseCategory dept);
/**
* 删除课程分类管理信息
*
* @param deptId 课程分类ID
* @return 结果
*/
public int deleteDeptById(Long deptId);
/**
* 新增课程分类信息
*
* @param dept 课程分类信息
* @return 结果
*/
public int insertDept(TrainCourseCategory dept);
/**
* 修改课程分类信息
*
* @param dept 课程分类信息
* @return 结果
*/
public int updateDept(TrainCourseCategory dept);
/**
* 修改子元素关系
*
* @param depts 子元素
* @return 结果
*/
public int updateDeptChildren(@Param("depts") List<TrainCourseCategory> depts);
/**
* 根据课程分类ID查询信息
*
* @param deptId 课程分类ID
* @return 课程分类信息
*/
public TrainCourseCategory selectDeptById(Long deptId);
/**
* 校验课程分类名称是否唯一
*
* @param deptName 课程分类名称
* @param parentId 父课程分类ID
* @return 结果
*/
public TrainCourseCategory checkDeptNameUnique(@Param("deptName") String deptName, @Param("parentId") Long parentId);
/**
* 根据角色ID查询课程分类
*
* @param roleId 角色ID
* @return 课程分类列表
*/
public List<String> selectRoleDeptTree(Long roleId);
}

View File

@ -0,0 +1,88 @@
package com.ruoyi.course.service;
import com.ruoyi.course.domain.TrainCourseCategory;
import com.ruoyi.framework.web.base.AbstractBaseService;
import java.util.List;
import java.util.Map;
/**
* 课程分类管理 服务层
*
* @author ruoyi
*/
public interface ITrainCourseCategoryService extends AbstractBaseService<TrainCourseCategory>
{
/**
* 查询课程分类管理数据
*
* @param dept 课程分类信息
* @return 课程分类信息集合
*/
public List<TrainCourseCategory> selectDeptList(TrainCourseCategory dept);
/**
* 查询课程分类管理树
*
* @return 所有课程分类信息
*/
public List<Map<String, Object>> selectDeptTree();
/**
* 查询课程分类人数
*
* @param parentId 父课程分类ID
* @return 结果
*/
public int selectDeptCount(Long parentId);
/**
* 查询课程分类是否存在用户
*
* @param deptId 课程分类ID
* @return 结果 true 存在 false 不存在
*/
public boolean checkDeptExistUser(Long deptId);
/**
* 删除课程分类管理信息
*
* @param deptId 课程分类ID
* @return 结果
*/
public int deleteDeptById(Long deptId);
/**
* 新增保存课程分类信息
*
* @param dept 课程分类信息
* @return 结果
*/
public int insertDept(TrainCourseCategory dept);
/**
* 修改保存课程分类信息
*
* @param dept 课程分类信息
* @return 结果
*/
public int updateDept(TrainCourseCategory dept);
/**
* 根据课程分类ID查询信息
*
* @param deptId 课程分类ID
* @return 课程分类信息
*/
public TrainCourseCategory selectDeptById(Long deptId);
/**
* 校验课程分类名称是否唯一
*
* @param dept 课程分类信息
* @return 结果
*/
public String checkDeptNameUnique(TrainCourseCategory dept);
}

View File

@ -0,0 +1,192 @@
package com.ruoyi.course.service.impl;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.course.domain.TrainCourseCategory;
import com.ruoyi.course.mapper.TrainCourseCategoryMapper;
import com.ruoyi.course.service.ITrainCourseCategoryService;
import com.ruoyi.framework.web.base.AbstractBaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 课程分类管理 服务实现
*
* @author ruoyi
*/
@Service
public class TrainCourseCategoryServiceImpl extends AbstractBaseServiceImpl<TrainCourseCategoryMapper, TrainCourseCategory> implements ITrainCourseCategoryService {
@Autowired
private TrainCourseCategoryMapper trainCourseCategoryMapper;
/**
* 查询课程分类管理数据
*
* @return 课程分类信息集合
*/
@Override
@DataScope(tableAlias = "d")
public List<TrainCourseCategory> selectDeptList(TrainCourseCategory dept) {
return trainCourseCategoryMapper.selectDeptList( dept );
}
/**
* 查询课程分类管理树
*
* @return 所有课程分类信息
*/
@Override
public List<Map<String, Object>> selectDeptTree() {
List<TrainCourseCategory> deptList = selectDeptList( new TrainCourseCategory() );
List<Map<String, Object>> trees = getTrees( deptList, false, null );
return trees;
}
/**
* 对象转课程分类树
*
* @param deptList 课程分类列表
* @param isCheck 是否需要选中
* @param roleDeptList 角色已存在菜单列表
* @return
*/
public List<Map<String, Object>> getTrees(List<TrainCourseCategory> deptList, boolean isCheck, List<String> roleDeptList) {
List<Map<String, Object>> trees = new ArrayList<Map<String, Object>>();
for (TrainCourseCategory dept : deptList) {
if (UserConstants.DEPT_NORMAL.equals( dept.getDelFlag() )) {
Map<String, Object> deptMap = new HashMap<String, Object>();
deptMap.put( "id", dept.getId() );
deptMap.put( "pId", dept.getParentId() );
deptMap.put( "name", dept.getName() );
deptMap.put( "title", dept.getName() );
if (isCheck) {
deptMap.put( "checked", roleDeptList.contains( dept.getDeptId() + dept.getName() ) );
} else {
deptMap.put( "checked", false );
}
trees.add( deptMap );
}
}
return trees;
}
/**
* 查询课程分类人数
*
* @param parentId 课程分类ID
* @return 结果
*/
@Override
public int selectDeptCount(Long parentId) {
TrainCourseCategory dept = new TrainCourseCategory();
dept.setParentId( parentId );
return trainCourseCategoryMapper.selectDeptCount( dept );
}
/**
* 查询课程分类是否存在用户
*
* @param deptId 课程分类ID
* @return 结果 true 存在 false 不存在
*/
@Override
public boolean checkDeptExistUser(Long deptId) {
int result = trainCourseCategoryMapper.checkDeptExistUser( deptId );
return result > 0 ? true : false;
}
/**
* 删除课程分类管理信息
*
* @param deptId 课程分类ID
* @return 结果
*/
@Override
public int deleteDeptById(Long deptId) {
return trainCourseCategoryMapper.deleteDeptById( deptId );
}
/**
* 新增保存课程分类信息
*
* @param dept 课程分类信息
* @return 结果
*/
@Override
public int insertDept(TrainCourseCategory dept) {
TrainCourseCategory info = trainCourseCategoryMapper.selectDeptById( dept.getParentId() );
dept.setParentIds( info.getParentIds() + "," + dept.getParentId() );
return trainCourseCategoryMapper.insertDept( dept );
}
/**
* 修改保存课程分类信息
*
* @param dept 课程分类信息
* @return 结果
*/
@Override
public int updateDept(TrainCourseCategory dept) {
TrainCourseCategory info = trainCourseCategoryMapper.selectDeptById( dept.getParentId() );
if (StringUtils.isNotNull( info )) {
String ancestors = info.getParentIds() + "," + dept.getParentId();
dept.setParentIds( ancestors );
updateDeptChildren( dept.getDeptId(), ancestors );
}
return trainCourseCategoryMapper.updateDept( dept );
}
/**
* 修改子元素关系
*
* @param deptId 课程分类ID
* @param ancestors 元素列表
*/
public void updateDeptChildren(Long deptId, String ancestors) {
TrainCourseCategory dept = new TrainCourseCategory();
dept.setParentId( deptId );
List<TrainCourseCategory> childrens = trainCourseCategoryMapper.selectDeptList( dept );
for (TrainCourseCategory children : childrens) {
children.setParentIds( ancestors + "," + dept.getParentId() );
}
if (childrens.size() > 0) {
trainCourseCategoryMapper.updateDeptChildren( childrens );
}
}
/**
* 根据课程分类ID查询信息
*
* @param deptId 课程分类ID
* @return 课程分类信息
*/
@Override
public TrainCourseCategory selectDeptById(Long deptId) {
return trainCourseCategoryMapper.selectDeptById( deptId );
}
/**
* 校验课程分类名称是否唯一
*
* @param dept 课程分类信息
* @return 结果
*/
@Override
public String checkDeptNameUnique(TrainCourseCategory dept) {
Long deptId = StringUtils.isNull( dept.getDeptId() ) ? -1L : dept.getDeptId();
TrainCourseCategory info = trainCourseCategoryMapper.checkDeptNameUnique( dept.getName(), dept.getParentId() );
if (StringUtils.isNotNull( info ) && info.getDeptId().longValue() != deptId.longValue()) {
return UserConstants.DEPT_NAME_NOT_UNIQUE;
}
return UserConstants.DEPT_NAME_UNIQUE;
}
}

View File

@ -0,0 +1,152 @@
package com.ruoyi.courseware.controller;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.courseware.domain.TrainCoursewareCategory;
import com.ruoyi.courseware.service.ITrainCoursewareCategoryService;
import com.ruoyi.framework.web.base.BaseController;
import com.ruoyi.framework.web.util.ShiroUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* 课件分类信息
*
* @author ruoyi
*/
@Controller
@RequestMapping("/train/courseware/category")
public class TrainCoursewareCategoryController extends BaseController
{
private String prefix = "courseware/category";
@Autowired
private ITrainCoursewareCategoryService trainCoursewareCategoryService;
@RequiresPermissions("train:courseware:category:view")
@GetMapping()
public String dept()
{
return prefix + "/dept";
}
@RequiresPermissions("train:courseware:category:list")
@GetMapping("/list")
@ResponseBody
public List<TrainCoursewareCategory> list(TrainCoursewareCategory dept)
{
List<TrainCoursewareCategory> deptList = trainCoursewareCategoryService.selectDeptList(dept);
return deptList;
}
/**
* 新增课件分类
*/
@GetMapping("/add/{parentId}")
public String add(@PathVariable("parentId") Long parentId, ModelMap mmap)
{
mmap.put("dept", trainCoursewareCategoryService.selectDeptById(parentId));
return prefix + "/add";
}
/**
* 新增保存课件分类
*/
@Log(title = "课件分类管理", businessType = BusinessType.INSERT)
@RequiresPermissions("train:courseware:category:add")
@PostMapping("/add")
@ResponseBody
public AjaxResult addSave(TrainCoursewareCategory dept)
{
dept.setCreateBy(ShiroUtils.getLoginName());
return toAjax(trainCoursewareCategoryService.insertDept(dept));
}
/**
* 修改
*/
@GetMapping("/edit/{deptId}")
public String edit(@PathVariable("deptId") Long deptId, ModelMap mmap)
{
TrainCoursewareCategory dept = trainCoursewareCategoryService.selectDeptById(deptId);
if (StringUtils.isNotNull(dept) && 100L == deptId)
{
dept.setParentName("");
}
mmap.put("dept", dept);
return prefix + "/edit";
}
/**
* 保存
*/
@Log(title = "课件分类管理", businessType = BusinessType.UPDATE)
@RequiresPermissions("train:courseware:category:edit")
@PostMapping("/edit")
@ResponseBody
public AjaxResult editSave(TrainCoursewareCategory dept)
{
dept.setUpdateBy(ShiroUtils.getLoginName());
return toAjax(trainCoursewareCategoryService.updateDept(dept));
}
/**
* 删除
*/
@Log(title = "课件分类管理", businessType = BusinessType.DELETE)
@RequiresPermissions("train:courseware:category:remove")
@PostMapping("/remove/{deptId}")
@ResponseBody
public AjaxResult remove(@PathVariable("deptId") Long deptId)
{
if (trainCoursewareCategoryService.selectDeptCount(deptId) > 0)
{
return error(1, "存在下级课件分类,不允许删除");
}
if (trainCoursewareCategoryService.checkDeptExistUser(deptId))
{
return error(1, "课件分类存在用户,不允许删除");
}
return toAjax(trainCoursewareCategoryService.deleteDeptById(deptId));
}
/**
* 校验课件分类名称
*/
@PostMapping("/checkDeptNameUnique")
@ResponseBody
public String checkDeptNameUnique(TrainCoursewareCategory dept)
{
return trainCoursewareCategoryService.checkDeptNameUnique(dept);
}
/**
* 选择课件分类树
*/
@GetMapping("/selectDeptTree/{deptId}")
public String selectDeptTree(@PathVariable("deptId") Long deptId, ModelMap mmap)
{
mmap.put("dept", trainCoursewareCategoryService.selectDeptById(deptId));
return prefix + "/tree";
}
/**
* 加载课件分类列表树
*/
@GetMapping("/treeData")
@ResponseBody
public List<Map<String, Object>> treeData()
{
List<Map<String, Object>> tree = trainCoursewareCategoryService.selectDeptTree();
return tree;
}
}

View File

@ -0,0 +1,43 @@
package com.ruoyi.courseware.controller;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.GetVideoPlayAuthRequest;
import com.aliyuncs.vod.model.v20170321.GetVideoPlayAuthResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/train/courseware/video")
public class VideoController {
@GetMapping("")
public GetVideoPlayAuthResponse authority(){
DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "LTAIo1i5PQB4pFme", "NyiVe3pqbVOMnwMQxnOkV39KrTx2jR");
DefaultAcsClient client = new DefaultAcsClient(profile);
GetVideoPlayAuthResponse response = getVideoPlayAuth(client);
System.out.println(response.getPlayAuth());
System.out.println(response.getVideoMeta());
return response;
}
private GetVideoPlayAuthResponse getVideoPlayAuth(DefaultAcsClient client) {
GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();
request.setVideoId("ID3dbb151b73c34b678efff61d3d50d999");
GetVideoPlayAuthResponse response = null;
try {
response = client.getAcsResponse(request);
} catch (ServerException e) {
throw new RuntimeException("GetVideoPlayAuthRequest Server failed");
} catch (ClientException e) {
throw new RuntimeException("GetVideoPlayAuthRequest Client failed");
}
response.getPlayAuth(); // 播放凭证
response.getVideoMeta(); // 视频Meta信息
return response;
}
}

View File

@ -0,0 +1,132 @@
package com.ruoyi.courseware.domain;
import com.ruoyi.common.base.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import javax.persistence.Id;
/**
* 课件分类表 sys_dept
*
* @author ruoyi
*/
public class TrainCoursewareCategory extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 分类ID */
@Id
private Long id;
/**
* 课件分类
*/
private Long deptId;
/** 父课件分类ID */
private Long parentId;
/** 祖级列表 */
private String parentIds;
/** 课件分类名称 */
private String name;
/** 显示顺序 */
private String orderNum;
/** 删除标志0代表存在 2代表删除 */
private String delFlag;
/** 父课件分类名称 */
private String parentName;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getDeptId() {
return deptId;
}
public void setDeptId(Long deptId) {
this.deptId = deptId;
}
public Long getParentId()
{
return parentId;
}
public void setParentId(Long parentId)
{
this.parentId = parentId;
}
public String getParentIds() {
return parentIds;
}
public void setParentIds(String parentIds) {
this.parentIds = parentIds;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOrderNum()
{
return orderNum;
}
public void setOrderNum(String orderNum)
{
this.orderNum = orderNum;
}
public String getDelFlag()
{
return delFlag;
}
public void setDelFlag(String delFlag)
{
this.delFlag = delFlag;
}
public String getParentName()
{
return parentName;
}
public void setParentName(String parentName)
{
this.parentName = parentName;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("deptId", getDeptId())
.append("parentId", getParentId())
.append("ancestors", getParentIds())
.append("deptName", getName())
.append("orderNum", getOrderNum())
.append("delFlag", getDelFlag())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
}

View File

@ -0,0 +1,96 @@
package com.ruoyi.courseware.mapper;
import com.ruoyi.courseware.domain.TrainCoursewareCategory;
import com.ruoyi.framework.web.base.MyMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 课件分类管理 数据层
*
* @author ruoyi
*/
public interface TrainCoursewareCategoryMapper extends MyMapper<TrainCoursewareCategory>
{
/**
* 查询课件分类人数
*
* @param dept 课件分类信息
* @return 结果
*/
public int selectDeptCount(TrainCoursewareCategory dept);
/**
* 查询课件分类是否存在用户
*
* @param deptId 课件分类ID
* @return 结果
*/
public int checkDeptExistUser(Long deptId);
/**
* 查询课件分类管理数据
*
* @param dept 课件分类信息
* @return 课件分类信息集合
*/
public List<TrainCoursewareCategory> selectDeptList(TrainCoursewareCategory dept);
/**
* 删除课件分类管理信息
*
* @param deptId 课件分类ID
* @return 结果
*/
public int deleteDeptById(Long deptId);
/**
* 新增课件分类信息
*
* @param dept 课件分类信息
* @return 结果
*/
public int insertDept(TrainCoursewareCategory dept);
/**
* 修改课件分类信息
*
* @param dept 课件分类信息
* @return 结果
*/
public int updateDept(TrainCoursewareCategory dept);
/**
* 修改子元素关系
*
* @param depts 子元素
* @return 结果
*/
public int updateDeptChildren(@Param("depts") List<TrainCoursewareCategory> depts);
/**
* 根据课件分类ID查询信息
*
* @param deptId 课件分类ID
* @return 课件分类信息
*/
public TrainCoursewareCategory selectDeptById(Long deptId);
/**
* 校验课件分类名称是否唯一
*
* @param deptName 课件分类名称
* @param parentId 父课件分类ID
* @return 结果
*/
public TrainCoursewareCategory checkDeptNameUnique(@Param("deptName") String deptName, @Param("parentId") Long parentId);
/**
* 根据角色ID查询课件分类
*
* @param roleId 角色ID
* @return 课件分类列表
*/
public List<String> selectRoleDeptTree(Long roleId);
}

View File

@ -0,0 +1,88 @@
package com.ruoyi.courseware.service;
import com.ruoyi.courseware.domain.TrainCoursewareCategory;
import com.ruoyi.framework.web.base.AbstractBaseService;
import java.util.List;
import java.util.Map;
/**
* 课件分类管理 服务层
*
* @author ruoyi
*/
public interface ITrainCoursewareCategoryService extends AbstractBaseService<TrainCoursewareCategory>
{
/**
* 查询课件分类管理数据
*
* @param dept 课件分类信息
* @return 课件分类信息集合
*/
public List<TrainCoursewareCategory> selectDeptList(TrainCoursewareCategory dept);
/**
* 查询课件分类管理树
*
* @return 所有课件分类信息
*/
public List<Map<String, Object>> selectDeptTree();
/**
* 查询课件分类人数
*
* @param parentId 父课件分类ID
* @return 结果
*/
public int selectDeptCount(Long parentId);
/**
* 查询课件分类是否存在用户
*
* @param deptId 课件分类ID
* @return 结果 true 存在 false 不存在
*/
public boolean checkDeptExistUser(Long deptId);
/**
* 删除课件分类管理信息
*
* @param deptId 课件分类ID
* @return 结果
*/
public int deleteDeptById(Long deptId);
/**
* 新增保存课件分类信息
*
* @param dept 课件分类信息
* @return 结果
*/
public int insertDept(TrainCoursewareCategory dept);
/**
* 修改保存课件分类信息
*
* @param dept 课件分类信息
* @return 结果
*/
public int updateDept(TrainCoursewareCategory dept);
/**
* 根据课件分类ID查询信息
*
* @param deptId 课件分类ID
* @return 课件分类信息
*/
public TrainCoursewareCategory selectDeptById(Long deptId);
/**
* 校验课件分类名称是否唯一
*
* @param dept 课件分类信息
* @return 结果
*/
public String checkDeptNameUnique(TrainCoursewareCategory dept);
}

View File

@ -0,0 +1,191 @@
package com.ruoyi.courseware.service.impl;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.courseware.domain.TrainCoursewareCategory;
import com.ruoyi.courseware.mapper.TrainCoursewareCategoryMapper;
import com.ruoyi.courseware.service.ITrainCoursewareCategoryService;
import com.ruoyi.framework.web.base.AbstractBaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 课件分类管理 服务实现
*
* @author ruoyi
*/
@Service
public class TrainCoursewareCategoryServiceImpl extends AbstractBaseServiceImpl<TrainCoursewareCategoryMapper, TrainCoursewareCategory> implements ITrainCoursewareCategoryService {
@Autowired
private TrainCoursewareCategoryMapper trainCoursewareCategoryMapper;
/**
* 查询课件分类管理数据
*
* @return 课件分类信息集合
*/
@Override
@DataScope(tableAlias = "d")
public List<TrainCoursewareCategory> selectDeptList(TrainCoursewareCategory dept) {
return trainCoursewareCategoryMapper.selectDeptList( dept );
}
/**
* 查询课件分类管理树
*
* @return 所有课件分类信息
*/
@Override
public List<Map<String, Object>> selectDeptTree() {
List<Map<String, Object>> trees = new ArrayList<Map<String, Object>>();
List<TrainCoursewareCategory> deptList = selectDeptList( new TrainCoursewareCategory() );
trees = getTrees( deptList, false, null );
return trees;
}
/**
* 对象转课件分类树
*
* @param deptList 课件分类列表
* @param isCheck 是否需要选中
* @param roleDeptList 角色已存在菜单列表
* @return
*/
public List<Map<String, Object>> getTrees(List<TrainCoursewareCategory> deptList, boolean isCheck, List<String> roleDeptList) {
List<Map<String, Object>> trees = new ArrayList<Map<String, Object>>();
for (TrainCoursewareCategory dept : deptList) {
if (UserConstants.DEPT_NORMAL.equals( dept.getDelFlag() )) {
Map<String, Object> deptMap = new HashMap<String, Object>();
deptMap.put( "id", dept.getId() );
deptMap.put( "pId", dept.getParentId() );
deptMap.put( "name", dept.getName() );
deptMap.put( "title", dept.getName() );
if (isCheck) {
deptMap.put( "checked", roleDeptList.contains( dept.getDeptId() + dept.getName() ) );
} else {
deptMap.put( "checked", false );
}
trees.add( deptMap );
}
}
return trees;
}
/**
* 查询课件分类人数
*
* @param parentId 课件分类ID
* @return 结果
*/
@Override
public int selectDeptCount(Long parentId) {
TrainCoursewareCategory dept = new TrainCoursewareCategory();
dept.setParentId( parentId );
return trainCoursewareCategoryMapper.selectDeptCount( dept );
}
/**
* 查询课件分类是否存在用户
*
* @param deptId 课件分类ID
* @return 结果 true 存在 false 不存在
*/
@Override
public boolean checkDeptExistUser(Long deptId) {
int result = trainCoursewareCategoryMapper.checkDeptExistUser( deptId );
return result > 0 ? true : false;
}
/**
* 删除课件分类管理信息
*
* @param deptId 课件分类ID
* @return 结果
*/
@Override
public int deleteDeptById(Long deptId) {
return trainCoursewareCategoryMapper.deleteDeptById( deptId );
}
/**
* 新增保存课件分类信息
*
* @param dept 课件分类信息
* @return 结果
*/
@Override
public int insertDept(TrainCoursewareCategory dept) {
TrainCoursewareCategory info = trainCoursewareCategoryMapper.selectDeptById( dept.getParentId() );
dept.setParentIds( info.getParentIds() + "," + dept.getParentId() );
return trainCoursewareCategoryMapper.insertDept( dept );
}
/**
* 修改保存课件分类信息
*
* @param dept 课件分类信息
* @return 结果
*/
@Override
public int updateDept(TrainCoursewareCategory dept) {
TrainCoursewareCategory info = trainCoursewareCategoryMapper.selectDeptById( dept.getParentId() );
if (StringUtils.isNotNull( info )) {
String ancestors = info.getParentIds() + "," + dept.getParentId();
dept.setParentIds( ancestors );
updateDeptChildren( dept.getDeptId(), ancestors );
}
return trainCoursewareCategoryMapper.updateDept( dept );
}
/**
* 修改子元素关系
*
* @param deptId 课件分类ID
* @param ancestors 元素列表
*/
public void updateDeptChildren(Long deptId, String ancestors) {
TrainCoursewareCategory dept = new TrainCoursewareCategory();
dept.setParentId( deptId );
List<TrainCoursewareCategory> childrens = trainCoursewareCategoryMapper.selectDeptList( dept );
for (TrainCoursewareCategory children : childrens) {
children.setParentIds( ancestors + "," + dept.getParentId() );
}
if (childrens.size() > 0) {
trainCoursewareCategoryMapper.updateDeptChildren( childrens );
}
}
/**
* 根据课件分类ID查询信息
*
* @param deptId 课件分类ID
* @return 课件分类信息
*/
@Override
public TrainCoursewareCategory selectDeptById(Long deptId) {
return trainCoursewareCategoryMapper.selectDeptById( deptId );
}
/**
* 校验课件分类名称是否唯一
*
* @param dept 课件分类信息
* @return 结果
*/
@Override
public String checkDeptNameUnique(TrainCoursewareCategory dept) {
Long deptId = StringUtils.isNull( dept.getDeptId() ) ? -1L : dept.getDeptId();
TrainCoursewareCategory info = trainCoursewareCategoryMapper.checkDeptNameUnique( dept.getName(), dept.getParentId() );
if (StringUtils.isNotNull( info ) && info.getDeptId().longValue() != deptId.longValue()) {
return UserConstants.DEPT_NAME_NOT_UNIQUE;
}
return UserConstants.DEPT_NAME_UNIQUE;
}
}

View File

@ -0,0 +1,39 @@
package com.ruoyi.courseware.utils;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.GetVideoPlayAuthRequest;
import com.aliyuncs.vod.model.v20170321.GetVideoPlayAuthResponse;
public class VideoUtils {
// 设置AccessKey ID和AccessKey secret
private static String access_key_id = "LTAILL4H4JcoUJdf";
private static String access_key_secret = "6TtJ1MD7ueolOXWjx0VhaseX6nkPVe ";
public static void main(String[] args) {
// 点播服务所在的地域中国大陆地域请填cn-shanghai
DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", access_key_id, access_key_secret);
DefaultAcsClient client = new DefaultAcsClient(profile);
// 传入视频ID
GetVideoPlayAuthResponse response = getVideoPlayAuth(client, "3dbb151b73c34b678efff61d3d50d999");
System.out.println(response.getPlayAuth());
}
private static GetVideoPlayAuthResponse getVideoPlayAuth(DefaultAcsClient client, String videoId) {
GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();
request.setVideoId(videoId);
GetVideoPlayAuthResponse response = null;
try {
response = client.getAcsResponse(request);
} catch (ServerException e) {
throw new RuntimeException("GetVideoPlayAuthRequest Server failed");
} catch (ClientException e) {
throw new RuntimeException("GetVideoPlayAuthRequest Client failed");
}
return response;
}
}

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.course.mapper.TrainCourseCategoryMapper">
<resultMap type="TrainCourseCategory" id="TrainCourseCategoryResult">
<id property="id" column="id" />
<result property="deptId" column="dept_id" />
<result property="parentId" column="parent_id" />
<result property="parentIds" column="parent_ids" />
<result property="name" column="name" />
<result property="orderNum" column="order_num" />
<result property="delFlag" column="del_flag" />
<result property="parentName" column="parent_name" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<sql id="selectDeptVo">
select d.id,d.dept_id, d.parent_id, d.parent_ids, d.name, d.order_num, d.del_flag, d.create_by, d.create_time
from train_courseware_category d
</sql>
<select id="selectRoleDeptTree" parameterType="Long" resultType="String">
select concat(d.id, d.name) as name
from train_courseware_category d
left join sys_role_dept rd on d.id = rd.id
where d.del_flag = '0' and rd.role_id = #{roleId}
order by d.parent_id, d.order_num
</select>
<select id="selectDeptList" parameterType="TrainCourseCategory" resultMap="TrainCourseCategoryResult">
<include refid="selectDeptVo"/>
where d.del_flag = '0'
<if test="parentId != null and parentId != 0">
AND parent_id = #{parentId}
</if>
<if test="name != null and name != ''">
AND name like concat('%', #{name}, '%')
</if>
<!-- 数据范围过滤 -->
${params.dataScope}
</select>
<select id="checkDeptExistUser" parameterType="Long" resultType="int">
select count(1) from sys_user where id = #{id} and del_flag = '0'
</select>
<select id="selectDeptCount" parameterType="TrainCourseCategory" resultType="int">
select count(1) from train_courseware_category
where del_flag = '0'
<if test="id != null and id != 0"> and id = #{id} </if>
<if test="parentId != null and parentId != 0"> and parent_id = #{parentId} </if>
</select>
<select id="checkDeptNameUnique" resultMap="TrainCourseCategoryResult">
<include refid="selectDeptVo"/>
where name=#{name} and parent_id = #{parentId}
</select>
<select id="selectDeptById" parameterType="Long" resultMap="TrainCourseCategoryResult">
select d.id, d.parent_id, d.parent_ids, d.name, d.order_num,
(select name from train_courseware_category where id = d.parent_id) parent_name
from train_courseware_category d
where d.id = #{id}
</select>
<insert id="insertDept" parameterType="TrainCourseCategory">
insert into train_courseware_category(
<if test="id != null and id != 0">id,</if>
<if test="parentId != null and parentId != 0">parent_id,</if>
<if test="name != null and name != ''">name,</if>
<if test="parentIds != null and parentIds != ''">parent_ids,</if>
<if test="orderNum != null and orderNum != ''">order_num,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
create_time
)values(
<if test="id != null and id != 0">#{id},</if>
<if test="parentId != null and parentId != 0">#{parentId},</if>
<if test="name != null and name != ''">#{name},</if>
<if test="parentIds != null and parentIds != ''">#{parentIds},</if>
<if test="orderNum != null and orderNum != ''">#{orderNum},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
sysdate()
)
</insert>
<update id="updateDept" parameterType="TrainCourseCategory">
update train_courseware_category
<set>
<if test="parentId != null and parentId != 0">parent_id = #{parentId},</if>
<if test="name != null and name != ''">name = #{name},</if>
<if test="parentIds != null and parentIds != ''">parent_ids = #{parentIds},</if>
<if test="orderNum != null and orderNum != ''">order_num = #{orderNum},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
update_time = sysdate()
</set>
where id = #{id}
</update>
<update id="updateDeptChildren" parameterType="java.util.List">
update train_courseware_category set parent_ids =
<foreach collection="depts" item="item" index="index"
separator=" " open="case id" close="end">
when #{item.id} then #{item.parent_ids}
</foreach>
where id in
<foreach collection="depts" item="item" index="index"
separator="," open="(" close=")">
#{item.id}
</foreach>
</update>
<delete id="deleteDeptById" parameterType="Long">
update train_courseware_category set del_flag = '2' where id = #{id}
</delete>
</mapper>

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.courseware.mapper.TrainCoursewareCategoryMapper">
<resultMap type="TrainCourseCategory" id="TrainCoursewareCategoryResult">
<id property="id" column="id" />
<result property="deptId" column="dept_id" />
<result property="parentId" column="parent_id" />
<result property="parentIds" column="parent_ids" />
<result property="name" column="name" />
<result property="orderNum" column="order_num" />
<result property="delFlag" column="del_flag" />
<result property="parentName" column="parent_name" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<sql id="selectDeptVo">
select d.id,d.dept_id, d.parent_id, d.parent_ids, d.name, d.order_num, d.del_flag, d.create_by, d.create_time
from train_courseware_category d
</sql>
<select id="selectRoleDeptTree" parameterType="Long" resultType="String">
select concat(d.id, d.name) as name
from train_courseware_category d
left join sys_role_dept rd on d.id = rd.id
where d.del_flag = '0' and rd.role_id = #{roleId}
order by d.parent_id, d.order_num
</select>
<select id="selectDeptList" parameterType="TrainCourseCategory" resultMap="TrainCoursewareCategoryResult">
<include refid="selectDeptVo"/>
where d.del_flag = '0'
<if test="parentId != null and parentId != 0">
AND parent_id = #{parentId}
</if>
<if test="name != null and name != ''">
AND name like concat('%', #{name}, '%')
</if>
<!-- 数据范围过滤 -->
${params.dataScope}
</select>
<select id="checkDeptExistUser" parameterType="Long" resultType="int">
select count(1) from sys_user where id = #{id} and del_flag = '0'
</select>
<select id="selectDeptCount" parameterType="TrainCourseCategory" resultType="int">
select count(1) from train_courseware_category
where del_flag = '0'
<if test="id != null and id != 0"> and id = #{id} </if>
<if test="parentId != null and parentId != 0"> and parent_id = #{parentId} </if>
</select>
<select id="checkDeptNameUnique" resultMap="TrainCoursewareCategoryResult">
<include refid="selectDeptVo"/>
where name=#{name} and parent_id = #{parentId}
</select>
<select id="selectDeptById" parameterType="Long" resultMap="TrainCoursewareCategoryResult">
select d.id, d.parent_id, d.parent_ids, d.name, d.order_num,
(select name from train_courseware_category where id = d.parent_id) parent_name
from train_courseware_category d
where d.id = #{id}
</select>
<insert id="insertDept" parameterType="TrainCourseCategory">
insert into train_courseware_category(
<if test="id != null and id != 0">id,</if>
<if test="parentId != null and parentId != 0">parent_id,</if>
<if test="name != null and name != ''">name,</if>
<if test="parentIds != null and parentIds != ''">parent_ids,</if>
<if test="orderNum != null and orderNum != ''">order_num,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
create_time
)values(
<if test="id != null and id != 0">#{id},</if>
<if test="parentId != null and parentId != 0">#{parentId},</if>
<if test="name != null and name != ''">#{name},</if>
<if test="parentIds != null and parentIds != ''">#{parentIds},</if>
<if test="orderNum != null and orderNum != ''">#{orderNum},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
sysdate()
)
</insert>
<update id="updateDept" parameterType="TrainCourseCategory">
update train_courseware_category
<set>
<if test="parentId != null and parentId != 0">parent_id = #{parentId},</if>
<if test="name != null and name != ''">name = #{name},</if>
<if test="parentIds != null and parentIds != ''">parent_ids = #{parentIds},</if>
<if test="orderNum != null and orderNum != ''">order_num = #{orderNum},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
update_time = sysdate()
</set>
where id = #{id}
</update>
<update id="updateDeptChildren" parameterType="java.util.List">
update train_courseware_category set parent_ids =
<foreach collection="depts" item="item" index="index"
separator=" " open="case id" close="end">
when #{item.id} then #{item.parent_ids}
</foreach>
where id in
<foreach collection="depts" item="item" index="index"
separator="," open="(" close=")">
#{item.id}
</foreach>
</update>
<delete id="deleteDeptById" parameterType="Long">
update train_courseware_category set del_flag = '2' where id = #{id}
</delete>
</mapper>

View File

@ -0,0 +1,124 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<meta charset="utf-8">
<head th:include="include :: header"></head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-dept-add">
<input id="treeId" name="parentId" type="hidden" th:value="${dept.deptId}" />
<div class="form-group">
<label class="col-sm-3 control-label ">上级部门:</label>
<div class="col-sm-8">
<input class="form-control" type="text" onclick="selectDeptTree()" id="treeName" readonly="true" th:value="${dept.deptName}"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">部门名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="deptName" id="deptName">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">显示排序:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="orderNum">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">负责人:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="leader">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">联系电话:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="phone">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">邮箱:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="email">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">部门状态:</label>
<div class="col-sm-8">
<div class="radio-box" th:each="dict : ${@dict.getType('sys_normal_disable')}">
<input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}" th:checked="${dict.isDefault == 'Y' ? true : false}">
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div>
</div>
</div>
</form>
</div>
<div th:include="include::footer"></div>
<script type="text/javascript">
var prefix = ctx + "course/category";
$("#form-dept-add").validate({
rules:{
deptName:{
required:true,
remote: {
url: prefix + "/checkDeptNameUnique",
type: "post",
dataType: "json",
data: {
"parentId": function() {
return $("input[name='parentId']").val();
},
"deptName" : function() {
return $.common.trim($("#deptName").val());
}
},
dataFilter: function(data, type) {
return $.validate.unique(data);
}
}
},
orderNum:{
required:true,
digits:true
},
email:{
email:true,
},
phone:{
isPhone:true,
},
},
messages: {
"deptName": {
remote: "部门已经存在"
}
}
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/add", $('#form-dept-add').serialize());
}
}
/*部门管理-新增-选择父部门树*/
function selectDeptTree() {
var options = {
title: '部门选择',
width: "380",
url: prefix + "/selectDeptTree/" + $("#treeId").val(),
callBack: doSubmit
};
$.modal.openOptions(options);
}
function doSubmit(index, layero){
var body = layer.getChildFrame('body', index);
$("#treeId").val(body.find('#treeId').val());
$("#treeName").val(body.find('#treeName').val());
layer.close(index);
}
</script>
</body>
</html>

View File

@ -0,0 +1,115 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8">
<head th:include="include :: header"></head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="dept-form">
<div class="select-list">
<ul>
<li>
部门名称:<input type="text" name="deptName"/>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.treeTable.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add(100)" shiro:hasPermission="train:course:category:add">
<i class="fa fa-plus"></i> 新增
</a>
<a class="btn btn-primary" onclick="$.operate.editTree()" shiro:hasPermission="train:course:category:edit">
<i class="fa fa-edit"></i> 修改
</a>
<a class="btn btn-info" id="expandAllBtn">
<i class="fa fa-exchange"></i> 展开/折叠
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-tree-table" data-mobile-responsive="true"></table>
</div>
</div>
</div>
<div th:include="include :: footer"></div>
<script th:inline="javascript">
var addFlag = [[${@permission.hasPermi('train:course:category:add')}]];
var editFlag = [[${@permission.hasPermi('train:course:category:edit')}]];
var removeFlag = [[${@permission.hasPermi('train:course:category:remove')}]];
var datas = [[${@dict.getType('sys_normal_disable')}]];
var prefix = ctx + "train/course/category"
$(function() {
var options = {
code: "id",
parentCode: "parentId",
uniqueId: "id",
url: prefix + "/list",
createUrl: prefix + "/add/{id}",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove/{id}",
modalName: "部门",
columns: [{
field: 'selectItem',
radio: true
},
{
field: 'name',
title: '分类名称',
align: "left"
},
{
field: 'orderNum',
title: '排序',
align: "left"
},
{
field: 'createTime',
title: '创建时间',
align: "left"
},
{
title: '操作',
align: 'left',
formatter: function(value, row, index) {
if (row.parentId != 0) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit">编辑</i></a> ');
actions.push('<a class="btn btn-info btn-xs ' + addFlag + '" href="#" onclick="$.operate.add(\'' + row.id + '\')"><i class="fa fa-plus">新增</i></a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="remove(\'' + row.id + '\')"><i class="fa fa-remove">删除</i></a>');
return actions.join('');
} else {
return "";
}
}
}]
};
$.treeTable.init(options);
});
function remove(id) {
$.modal.confirm("确定删除该条" + $.table._option.modalName + "信息吗?", function() {
$.ajax({
type : 'post',
url: prefix + "/remove/" + id,
success : function(result) {
if (result.code == web_status.SUCCESS) {
$.modal.msgSuccess(result.msg);
$.treeTable.refresh();
} else {
$.modal.msgError(result.msg);
}
}
});
});
}
</script>
</body>
</html>

View File

@ -0,0 +1,133 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<meta charset="utf-8">
<head th:include="include :: header"></head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-dept-edit" th:object="${dept}">
<input name="deptId" type="hidden" th:field="*{deptId}" />
<input id="treeId" name="parentId" type="hidden" th:field="*{parentId}" />
<div class="form-group">
<label class="col-sm-3 control-label ">上级部门:</label>
<div class="col-sm-8">
<input class="form-control" type="text" id="treeName" onclick="selectDeptTree()" readonly="true" th:field="*{parentName}"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">部门名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="deptName" th:field="*{deptName}" id="deptName">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">显示排序:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="orderNum" th:field="*{orderNum}">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">负责人:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="leader" th:field="*{leader}">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">联系电话:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="phone" th:field="*{phone}">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">邮箱:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="email" th:field="*{email}">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">部门状态:</label>
<div class="col-sm-8">
<div class="radio-box" th:each="dict : ${@dict.getType('sys_normal_disable')}">
<input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}" th:field="*{status}">
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div>
</div>
</div>
</form>
</div>
<div th:include="include::footer"></div>
<script type="text/javascript">
var prefix = ctx + "course/category";
$("#form-dept-edit").validate({
rules:{
deptName:{
required:true,
remote: {
url: prefix + "/checkDeptNameUnique",
type: "post",
dataType: "json",
data: {
"deptId": function() {
return $("#deptId").val();
},
"parentId": function() {
return $("input[name='parentId']").val();
},
"deptName": function() {
return $.common.trim($("#deptName").val());
}
},
dataFilter: function(data, type) {
return $.validate.unique(data);
}
}
},
orderNum:{
required:true,
digits:true
},
email:{
email:true,
},
phone:{
isPhone:true,
},
},
messages: {
"deptName": {
remote: "部门已经存在"
}
}
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-dept-edit').serialize());
}
}
/*部门管理-修改-选择部门树*/
function selectDeptTree() {
var deptId = $("#treeId").val();
if(deptId > 0) {
var options = {
title: '部门选择',
width: "380",
url: prefix + "/selectDeptTree/" + $("#treeId").val(),
callBack: doSubmit
};
$.modal.openOptions(options);
} else {
$.modal.alertError("父部门不能选择");
}
}
function doSubmit(index, layero){
var body = layer.getChildFrame('body', index);
$("#treeId").val(body.find('#treeId').val());
$("#treeName").val(body.find('#treeName').val());
layer.close(index);
}
</script>
</body>
</html>

View File

@ -0,0 +1,48 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<meta charset="utf-8">
<head th:include="include :: header"></head>
<link th:href="@{/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/>
<style>
body{height:auto;font-family: "Microsoft YaHei";}
button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
</style>
<body class="hold-transition box box-main">
<input id="treeId" name="treeId" type="hidden" th:value="${dept.deptId}"/>
<input id="treeName" name="treeName" type="hidden" th:value="${dept.deptName}"/>
<div class="wrapper"><div class="treeShowHideButton" onclick="$.tree.toggleSearch();">
<label id="btnShow" title="显示搜索" style="display:none;"></label>
<label id="btnHide" title="隐藏搜索"></label>
</div>
<div class="treeSearchInput" id="search">
<label for="keyword">关键字:</label><input type="text" class="empty" id="keyword" maxlength="50">
<button class="btn" id="btn" onclick="$.tree.searchNode()"> 搜索 </button>
</div>
<div class="treeExpandCollapse">
<a href="#" onclick="$.tree.expand()">展开</a> /
<a href="#" onclick="$.tree.collapse()">折叠</a>
</div>
<div id="tree" class="ztree treeselect"></div>
</div>
<div th:include="include::footer"></div>
<script th:src="@{/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js}"></script>
<script th:inline="javascript">
$(function() {
var url = ctx + "course/category/treeData";
var options = {
url: url,
expandLevel: 2,
onClick : zOnClick
};
$.tree.init(options);
});
function zOnClick(event, treeId, treeNode) {
var treeId = treeNode.id;
var treeName = treeNode.name;
$("#treeId").val(treeId);
$("#treeName").val(treeName);
}
</script>
</body>
</html>

View File

@ -0,0 +1,124 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<meta charset="utf-8">
<head th:include="include :: header"></head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-dept-add">
<input id="treeId" name="parentId" type="hidden" th:value="${dept.deptId}" />
<div class="form-group">
<label class="col-sm-3 control-label ">上级部门:</label>
<div class="col-sm-8">
<input class="form-control" type="text" onclick="selectDeptTree()" id="treeName" readonly="true" th:value="${dept.name}"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">部门名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="name" id="name">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">显示排序:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="orderNum">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">负责人:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="leader">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">联系电话:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="phone">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">邮箱:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="email">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">部门状态:</label>
<div class="col-sm-8">
<div class="radio-box" th:each="dict : ${@dict.getType('sys_normal_disable')}">
<input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}" th:checked="${dict.isDefault == 'Y' ? true : false}">
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div>
</div>
</div>
</form>
</div>
<div th:include="include::footer"></div>
<script type="text/javascript">
var prefix = ctx + "courseware/category";
$("#form-dept-add").validate({
rules:{
name:{
required:true,
remote: {
url: prefix + "/checkDeptNameUnique",
type: "post",
dataType: "json",
data: {
"parentId": function() {
return $("input[name='parentId']").val();
},
"name" : function() {
return $.common.trim($("#name").val());
}
},
dataFilter: function(data, type) {
return $.validate.unique(data);
}
}
},
orderNum:{
required:true,
digits:true
},
email:{
email:true,
},
phone:{
isPhone:true,
},
},
messages: {
"name": {
remote: "部门已经存在"
}
}
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/add", $('#form-dept-add').serialize());
}
}
/*部门管理-新增-选择父部门树*/
function selectDeptTree() {
var options = {
title: '部门选择',
width: "380",
url: prefix + "/selectDeptTree/" + $("#treeId").val(),
callBack: doSubmit
};
$.modal.openOptions(options);
}
function doSubmit(index, layero){
var body = layer.getChildFrame('body', index);
$("#treeId").val(body.find('#treeId').val());
$("#treeName").val(body.find('#treeName').val());
layer.close(index);
}
</script>
</body>
</html>

View File

@ -0,0 +1,115 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<meta charset="utf-8">
<head th:include="include :: header"></head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="dept-form">
<div class="select-list">
<ul>
<li>
部门名称:<input type="text" name="deptName"/>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.treeTable.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add(100)" shiro:hasPermission="train:courseware:category:add">
<i class="fa fa-plus"></i> 新增
</a>
<a class="btn btn-primary" onclick="$.operate.editTree()" shiro:hasPermission="train:courseware:category:edit">
<i class="fa fa-edit"></i> 修改
</a>
<a class="btn btn-info" id="expandAllBtn">
<i class="fa fa-exchange"></i> 展开/折叠
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-tree-table" data-mobile-responsive="true"></table>
</div>
</div>
</div>
<div th:include="include :: footer"></div>
<script th:inline="javascript">
var addFlag = [[${@permission.hasPermi('train:courseware:category:add')}]];
var editFlag = [[${@permission.hasPermi('train:courseware:category:edit')}]];
var removeFlag = [[${@permission.hasPermi('train:courseware:category:remove')}]];
var datas = [[${@dict.getType('sys_normal_disable')}]];
var prefix = ctx + "train/courseware/category"
$(function() {
var options = {
code: "id",
parentCode: "parentId",
uniqueId: "id",
url: prefix + "/list",
createUrl: prefix + "/add/{id}",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove/{id}",
modalName: "部门",
columns: [{
field: 'selectItem',
radio: true
},
{
field: 'name',
title: '分类名称',
align: "left"
},
{
field: 'orderNum',
title: '排序',
align: "left"
},
{
field: 'createTime',
title: '创建时间',
align: "left"
},
{
title: '操作',
align: 'left',
formatter: function(value, row, index) {
if (row.parentId != 0) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.deptId + '\')"><i class="fa fa-edit">编辑</i></a> ');
actions.push('<a class="btn btn-info btn-xs ' + addFlag + '" href="#" onclick="$.operate.add(\'' + row.deptId + '\')"><i class="fa fa-plus">新增</i></a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="remove(\'' + row.deptId + '\')"><i class="fa fa-remove">删除</i></a>');
return actions.join('');
} else {
return "";
}
}
}]
};
$.treeTable.init(options);
});
function remove(id) {
$.modal.confirm("确定删除该条" + $.table._option.modalName + "信息吗?", function() {
$.ajax({
type : 'post',
url: prefix + "/remove/" + id,
success : function(result) {
if (result.code == web_status.SUCCESS) {
$.modal.msgSuccess(result.msg);
$.treeTable.refresh();
} else {
$.modal.msgError(result.msg);
}
}
});
});
}
</script>
</body>
</html>

View File

@ -0,0 +1,133 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<meta charset="utf-8">
<head th:include="include :: header"></head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-dept-edit" th:object="${dept}">
<input name="id" type="hidden" th:field="*{id}" />
<input id="treeId" name="parentId" type="hidden" th:field="*{parentId}" />
<div class="form-group">
<label class="col-sm-3 control-label ">上级部门:</label>
<div class="col-sm-8">
<input class="form-control" type="text" id="treeName" onclick="selectDeptTree()" readonly="true" th:field="*{parentName}"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">部门名称:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="name" th:field="*{name}" id="name">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">显示排序:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="orderNum" th:field="*{orderNum}">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">负责人:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="leader" th:field="*{leader}">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">联系电话:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="phone" th:field="*{phone}">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">邮箱:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="email" th:field="*{email}">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">部门状态:</label>
<div class="col-sm-8">
<div class="radio-box" th:each="dict : ${@dict.getType('sys_normal_disable')}">
<input type="radio" th:id="${dict.dictCode}" name="status" th:value="${dict.dictValue}" th:field="*{status}">
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div>
</div>
</div>
</form>
</div>
<div th:include="include::footer"></div>
<script type="text/javascript">
var prefix = ctx + "courseware/category";
$("#form-dept-edit").validate({
rules:{
name:{
required:true,
remote: {
url: prefix + "/checkDeptNameUnique",
type: "post",
dataType: "json",
data: {
"id": function() {
return $("#id").val();
},
"parentId": function() {
return $("input[name='parentId']").val();
},
"name": function() {
return $.common.trim($("#name").val());
}
},
dataFilter: function(data, type) {
return $.validate.unique(data);
}
}
},
orderNum:{
required:true,
digits:true
},
email:{
email:true,
},
phone:{
isPhone:true,
},
},
messages: {
"name": {
remote: "部门已经存在"
}
}
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-dept-edit').serialize());
}
}
/*部门管理-修改-选择部门树*/
function selectDeptTree() {
var id = $("#treeId").val();
if(id > 0) {
var options = {
title: '部门选择',
width: "380",
url: prefix + "/selectDeptTree/" + $("#treeId").val(),
callBack: doSubmit
};
$.modal.openOptions(options);
} else {
$.modal.alertError("父部门不能选择");
}
}
function doSubmit(index, layero){
var body = layer.getChildFrame('body', index);
$("#treeId").val(body.find('#treeId').val());
$("#treeName").val(body.find('#treeName').val());
layer.close(index);
}
</script>
</body>
</html>

View File

@ -0,0 +1,48 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<meta charset="utf-8">
<head th:include="include :: header"></head>
<link th:href="@{/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css}" rel="stylesheet"/>
<style>
body{height:auto;font-family: "Microsoft YaHei";}
button{font-family: "SimSun","Helvetica Neue",Helvetica,Arial;}
</style>
<body class="hold-transition box box-main">
<input id="treeId" name="treeId" type="hidden" th:value="${dept.deptId}"/>
<input id="treeName" name="treeName" type="hidden" th:value="${dept.deptName}"/>
<div class="wrapper"><div class="treeShowHideButton" onclick="$.tree.toggleSearch();">
<label id="btnShow" title="显示搜索" style="display:none;"></label>
<label id="btnHide" title="隐藏搜索"></label>
</div>
<div class="treeSearchInput" id="search">
<label for="keyword">关键字:</label><input type="text" class="empty" id="keyword" maxlength="50">
<button class="btn" id="btn" onclick="$.tree.searchNode()"> 搜索 </button>
</div>
<div class="treeExpandCollapse">
<a href="#" onclick="$.tree.expand()">展开</a> /
<a href="#" onclick="$.tree.collapse()">折叠</a>
</div>
<div id="tree" class="ztree treeselect"></div>
</div>
<div th:include="include::footer"></div>
<script th:src="@{/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js}"></script>
<script th:inline="javascript">
$(function() {
var url = ctx + "courseware/category/treeData";
var options = {
url: url,
expandLevel: 2,
onClick : zOnClick
};
$.tree.init(options);
});
function zOnClick(event, treeId, treeNode) {
var treeId = treeNode.id;
var treeName = treeNode.name;
$("#treeId").val(treeId);
$("#treeName").val(treeName);
}
</script>
</body>
</html>