课程实操管理

beetlsql3-dev
xuliangtong 3 years ago
parent d3392bec92
commit c57d6f675d

@ -29507,3 +29507,17 @@ INSERT INTO `wrong_question` VALUES (141, 197, NULL, NULL, 10, NULL, NULL);
INSERT INTO `wrong_question` VALUES (142, 197, NULL, NULL, 10, NULL, NULL);
SET FOREIGN_KEY_CHECKS = 1;
-- ----------------------------
-- Table structure for hands_on
-- ----------------------------
DROP TABLE IF EXISTS `hands_on`;
CREATE TABLE `hands_on` (
`hands_on_id` bigint NOT NULL COMMENT '实操主键',
`course_info_id` bigint NULL DEFAULT NULL COMMENT '归属课程',
`course_child_node` varchar(255) CHARACTER SET utf8mb4 NULL DEFAULT NULL COMMENT '归属章节',
`hands_on_name` varchar(255) CHARACTER SET utf8mb4 NULL DEFAULT NULL COMMENT '实操名称',
`hands_on_recommend` longtext CHARACTER SET utf8mb4 NULL COMMENT '实操介绍',
PRIMARY KEY (`hands_on_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '课程实操';

@ -133,8 +133,12 @@ public class HandsOnController{
if(null != handsOnId){
HandsOn handsOn = handsOnService.queryById(handsOnId);
view.addObject("handsOn", handsOn);
view.addObject("courseInfoId", handsOn.getCourseInfoId());
view.addObject("twoChildNode", handsOn.getCourseChildNode());
}else {
view.addObject("handsOn", new HandsOn());
view.addObject("courseInfoId", "");
view.addObject("twoChildNode", "");
}
return view;
}

@ -0,0 +1,89 @@
package com.ibeetl.jlw.web.query;
import cn.jlw.validate.ValidateConfig;
import com.ibeetl.jlw.entity.HandsOn;
import org.apache.commons.lang3.StringUtils;
import com.ibeetl.admin.core.annotation.Query;
import com.ibeetl.admin.core.util.Tool;
import com.ibeetl.admin.core.util.enums.CoreDictType;
import com.ibeetl.admin.core.web.query.PageParam;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
/**
*HandsOn
*/
public class HandsOnQuery extends PageParam {
@NotNull(message = "ID不能为空", groups =ValidateConfig.UPDATE.class)
@Query(name = "实操主键", display = false)
private Long handsOnId;
@Query(name = "归属课程", display = false)
private Long courseInfoId;
@Query(name = "归属章节", display = false)
private String courseChildNode;
@Query(name = "实操名称", display = false)
private String handsOnName;
@Query(name = "实操介绍", display = false)
private String handsOnRecommend;
private String handsOnJsonStr;//json格式
private String _given;//指定更新的特定字段,多个逗号隔开
public Long getHandsOnId(){
return handsOnId;
}
public void setHandsOnId(Long handsOnId ){
this.handsOnId = handsOnId;
}
public Long getCourseInfoId(){
return courseInfoId;
}
public void setCourseInfoId(Long courseInfoId ){
this.courseInfoId = courseInfoId;
}
public String getCourseChildNode(){
return courseChildNode;
}
public void setCourseChildNode(String courseChildNode ){
this.courseChildNode = courseChildNode;
}
public String getHandsOnName(){
return handsOnName;
}
public void setHandsOnName(String handsOnName ){
this.handsOnName = handsOnName;
}
public String getHandsOnRecommend(){
return handsOnRecommend;
}
public void setHandsOnRecommend(String handsOnRecommend ){
this.handsOnRecommend = handsOnRecommend;
}
public HandsOn pojo(){
HandsOn pojo = new HandsOn();
pojo.setHandsOnId(this.getHandsOnId());
pojo.setCourseInfoId(this.getCourseInfoId());
pojo.setCourseChildNode(this.getCourseChildNode());
pojo.setHandsOnName(this.getHandsOnName());
pojo.setHandsOnRecommend(this.getHandsOnRecommend());
return pojo;
}
public String getHandsOnJsonStr(){
return handsOnJsonStr;
}
public void setHandsOnJsonStr(String handsOnJsonStr ){
this.handsOnJsonStr = handsOnJsonStr;
}
public String get_given() {
return _given;
}
public void set_given(String _given) {
this._given = _given;
}
}

@ -1,7 +1,31 @@
layui.define([ 'form', 'laydate', 'table','handsOnApi'], function(exports) {
layui.define(['form', 'laydate', 'table','upload','layedit', 'handsOnApi'], function (exports) {
var form = layui.form;
var handsOnApi = layui.handsOnApi;
var index = layui.index;
var upload = layui.upload;
var layedit = layui.layedit;
// var editor3 = Lib.editorMd("test-editor");
// editor3.setToolbarAutoFixed(false);
layedit.set({ //富文本上传图片
uploadImage: {
url: Common.ctxPath + "/jlw/file/update.do",
imgUrl:Common.ctxPath
}
});
var handsOnId = $("input[name='handsOnId']").val();
if(!$.isEmpty(handsOnId)){
var ret = Common.getAjax("/jlw/handsOn/view.json",{handsOnId:handsOnId});
if(ret.code == 0){
layedit.setContent(one,Lib.repLaceltgt(ret.data.applicationIntroduction),false);
}else {
layer.msg(ret.msg, {
offset: ['50%'],
icon: 2,
time: 1500 //2秒关闭如果不配置默认是3秒
});
}
}
var one = layedit.build('test-editor'); //建立编辑器
var view = {
init: function () {
Lib.initGenrealForm($("#addForm"), form);
@ -9,22 +33,40 @@ layui.define([ 'form', 'laydate', 'table','handsOnApi'], function(exports) {
},
initSubmit: function () {
$("#addButton").click(function () {
form.on('submit(form)', function(){
var handsOnId = $("#addForm input[name='handsOnId']").val();
if(!$.isEmpty(handsOnId)){
handsOnApi.updateHandsOn($('#addForm'),function(){
parent.window.dataReload();
Common.info("更新成功");
Lib.closeFrame();
//数据集
var fileName = ""; //文件名
var imgFile = ""; //文件路径
$("#demoList tr").each(function (i) {
fileName += $(this).find("input[name='fileName']").val();
imgFile += $(this).find("input[name='imgFile']").val();
if (i < $("#demoList tr").length - 1) {
fileName += "?";
imgFile += "?";
}
});
if (!$.isEmpty(fileName) && !$.isEmpty(imgFile)) {
$("#addForm input[name='files']").val(imgFile + "||" + fileName); //写入form表单
} else {
handsOnApi.addHandsOn($('#addForm'),function(){
parent.window.dataReload();
Common.info("添加成功");
$("#addForm input[name='files']").val(""); //写入form表单
}
var param = $("#addForm").serializeJson();
param.handsOnRecommend = layedit.getContent(one);
var handsOnId = $("#addForm input[name='handsOnId']").val();
var url = "/jlw/handsOn/add.json";
if (!$.isEmpty(handsOnId)) {
url = "/jlw/handsOn/edit.json";
}
var ret = Common.postAjax(url,param);
layer.msg(ret.code == 0 ? "保存成功!" : ret.msg, {
offset: ['50%'],
icon: ret.code == 0 ? 1 : 2,
time: 1500 //2秒关闭如果不配置默认是3秒
}, function () {
layer.closeAll("loading");
if (ret.code == 0) {
parent.Lib.tableRefresh();
Lib.closeFrame();
});
}
});
});
@ -34,5 +76,9 @@ layui.define([ 'form', 'laydate', 'table','handsOnApi'], function(exports) {
}
}
//选择归属课程 并且根据选择的课程查询章节
form.on('select(select_courseInfoIds)', function (obj) {
Lib.getCourseInfo($("select[name='courseChildNode']"), obj.value);
});
exports('add', view);
});

@ -20,7 +20,7 @@ layui.define([ 'form', 'laydate', 'table' ], function(exports) {
handsOnTable = table.render({
elem : '#handsOnTable',
height : Lib.getTableHeight(1),
cellMinWidth: 100,
cellMinWidth: 120,
method : 'post',
url : Common.ctxPath + '/jlw/handsOn/list.json' // 数据接口
,page : Lib.tablePage // 开启分页
@ -33,46 +33,56 @@ layui.define([ 'form', 'laydate', 'table' ], function(exports) {
},
{
field : 'handsOnId',
title : '实操主键',
field : 'handsOnName',
title : '项目名称',
align:"center",
hideField :false,
hide:$.isEmpty(sx_['handsOnId'])?false:sx_['handsOnId'],
width : 60,
hide:$.isEmpty(sx_['handsOnName'])?false:sx_['handsOnName'],
},
{
field : 'courseInfoId',
title : '归属课程',
title : '观看视频平均得分',
align:"center",
hideField :false,
hide:$.isEmpty(sx_['courseInfoId'])?false:sx_['courseInfoId'],
},
{
field : 'courseChildNode',
title : '归属章节',
title : '观看PPT平均得分',
align:"center",
hideField :false,
hide:$.isEmpty(sx_['courseChildNode'])?false:sx_['courseChildNode'],
},
{
field : 'handsOnName',
title : '实操名称',
title : '理论测评平均得分',
align:"center",
hideField :false,
hide:$.isEmpty(sx_['handsOnName'])?false:sx_['handsOnName'],
},
{
field : 'handsOnRecommend',
title : '实操介绍',
title : '实训操作步骤平均得分',
align:"center",
hideField :false,
hide:$.isEmpty(sx_['handsOnRecommend'])?false:sx_['handsOnRecommend'],
},
{
field : 'handsOnRecommend',
title : '报告撰写平均得分',
align:"center",
hideField :false,
hide:$.isEmpty(sx_['handsOnRecommend'])?false:sx_['handsOnRecommend'],
}
,{
field : 'operation_',title : '操作',align:"center", templet: function (d) {
var htm = '<button type="button" class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</button>';
htm += '<button type="button" class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button>';
field : 'operation_',title : '操作',align:"center",fixed: 'right',width: '500', templet: function (d) {
var htm = '<button type="button" class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">实操成绩</button>';
htm += '<button type="button" class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">评阅</button>'
htm += '<button type="button" class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">编辑</button>'
htm += '<button type="button" class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</button>'
htm += '<button type="button" class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">绑定知识点</button>'
htm += '<button type="button" class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">查看内容</button>'
;
return htm;
}
}
@ -99,21 +109,7 @@ layui.define([ 'form', 'laydate', 'table' ], function(exports) {
toolbar = {
add: function () {
var url = "/jlw/handsOn/add.do";
Common.openDlg(url,"HandsOn管理>新增");
},
edit: function () {
var data = Common.getOneFromTable(table,"handsOnTable");
if(data==null){
return ;
}
var url = "/jlw/handsOn/add.do?handsOnId="+data.handsOnId;
Common.openDlg(url,"HandsOn管理>"+data.handsOnId+">编辑");
},
del: function () {
layui.use(['del'], function(){
var delView = layui.del
delView.delBatch();
});
Common.openDlg(url,"实操管理>添加实操管理");
},
search: function () {
Lib.doSearchForm($("#searchForm"), handsOnTable, 1);
@ -135,7 +131,7 @@ layui.define([ 'form', 'laydate', 'table' ], function(exports) {
var data = obj.data;
if (obj.event === 'edit') {
var url = "/jlw/handsOn/add.do?handsOnId="+data.handsOnId;
Common.openDlg(url,"HandsOn管理>"+data.handsOnId+">编辑");
Common.openDlg(url,"HandsOn管理>"+data.handsOnName+">编辑");
}else if(obj.event === "del"){
layer.confirm('是否确定删除该信息?', function (index) {
var ret = Common.postAjax("/jlw/handsOn/delete.json",{ids:data.handsOnId});

@ -1,45 +1,185 @@
<!--# layout("/common/layout.html",{"jsBase":"/js/jlw/handsOn/"}){ -->
<link rel="stylesheet" type="text/css" href="${ctxPath}/css/plugin.css?v=${jsVer}" media="all"/>
<link rel="stylesheet" href="${ctxPath}/plugins/editorMd/css/editormd.css"/>
<script src="${ctxPath}/plugins/editorMd/editormd.min.js"></script>
<link rel="stylesheet" href="${ctxPath}/plugins/highlight/styles/a11y-light.min.css" />
<script type="text/javascript" src="${ctxPath}/plugins/highlight/highlight.min.js?v=${jsVer}"></script>
<style type="text/css">
#answer{
background-color: #f9f9f9;
padding: 0;
padding-left: 30px;
line-height:30px;
}
#answer li{
list-style-type: decimal !important;
}
/* #answer li:hover,#answer li:hover input{
background-color: #f9f9f9;
} */
#answer li::marker {
color: #999999;
}
#answer ol{
padding: 5px 0;
padding-left: 6px;
background-color: white;
}
</style>
<form class="layui-form" id="addForm">
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">归属课程</label>
<div class="layui-input-inline">
<input type="text" id="courseInfoId" name="courseInfoId" value="${handsOn.courseInfoId}" class="layui-input" >
<label class="layui-form-label">归属课程:</label>
<div class="layui-input-block">
<layui:simpleDictSelect style='layui-input-inline' value="${courseInfoId}" type="course_info.course_info_name.course_info_status=1,course_info_type=1,find_in_set(course_label_id,(select group_concat(course_label_id) from course_label where course_label_status = 1))"
id="courseInfoIds" name="courseInfoId" layFilter="select_courseInfoIds"/>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">归属章节</label>
<div class="layui-input-inline">
<input type="text" id="courseChildNode" name="courseChildNode" value="${handsOn.courseChildNode}" class="layui-input" >
</div>
<div class="layui-row">
<div class="layui-form-item">
<label class="layui-form-label">归属章节:</label>
<div class="layui-input-block" style="width: 400px;">
<!--#if(courseInfoId != null){-->
<layui:simpleDictSelect style='layui-input-inline' value="${twoChildNode}" type="course_info.course_info_name.course_info_status=1,course_info_type=2,course_info_parent_id=${courseInfoId}"
id="courseInfoId1" name="courseChildNode" layFilter="select_courseInfoIds_1"/>
<!--#}else{-->
<select name="courseInfoId_1" lay-filter="select_courseInfoIds_1">
<option value="">请选择</option>
</select>
<!--#}-->
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">实操名称</label>
<div class="layui-input-inline">
<label class="layui-form-label">实操名称:</label>
<div class="layui-input-block">
<input type="text" id="handsOnName" name="handsOnName" value="${handsOn.handsOnName}" class="layui-input" >
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">实操介绍</label>
<div class="layui-input-inline">
<input type="text" id="handsOnRecommend" name="handsOnRecommend" value="${handsOn.handsOnRecommend}" class="layui-input" >
</div>
<div class="layui-row">
<div class="layui-form-item">
<label class="layui-form-label">实操介绍:</label>
<div class="layui-input-block">
<div>
<!-- <textarea style="display:none;"></textarea>-->
<textarea style="display:none;" id="test-editor">${handsOn.handsOnRecommend}</textarea>
</div>
</div>
</div>
</div>
<div class="layui-row">
<!-- 业务对象得有一个字段保存附件id假设是attachmentId -->
<layui:attachment name="attachmentId" batchFileUUID="${uuid()}" bizType="entity.name" isNew="true" />
<div class="layui-form-item">
<label class="layui-form-label">数据集:</label>
<div class="layui-input-block">
<!--(多个地址?+|| 逗号隔开)-->
<input name="files" type="hidden"
value="${handsOn.files}"/>
<div class="layui-upload">
<div class="uploader-drop" ondragenter="jQuery(this).addClass('uploader-dragover');"
ondragend="jQuery(this).removeClass('uploader-dragover');"
ondrop="jQuery(this).removeClass('uploader-dragover');">
<a class="uploader-browse-folder" style="display: none;"><u>select folder</u></a>
<a class="uploader-browse-image" style="display: none;"><u>select images</u></a>
<button type="button" class="layui-btn bg_button uploader-browse">选择文件</button>
<button type="button" class="layui-btn bg_button" style="display: none;" id="testListAction">
开始上传
</button>
</div>
<div class="layui-upload-list" style="max-width: 80%;min-width: 800px;">
<table class="layui-table" id="updateFileList">
<colgroup>
<col>
<col width="150">
<col width="260">
<col width="150">
</colgroup>
<thead>
<tr>
<th style="text-align: center;">文件名</th>
<th style="text-align: center;">大小</th>
<th style="text-align: center;">上传进度</th>
<th style="text-align: center;">操作</th>
</tr>
</thead>
<tbody id="demoList">
<!--#if(handsOn.files != null && handsOn.files != ''){-->
<!--# var files = splitString(handsOn.files,'\\|\\|'); //数据集-->
<!--# var fileUrl = splitString(files[0],'\\?'); //文件路径-->
<!--# var fileName = splitString(files[1],'\\?'); //文件名称 -->
<!--# var i = 0;for(item in fileUrl){ -->
<tr class="uploader-file">
<td class="uploader-file-name">${fileName[i]}</td>
<td class="uploader-file-size" style="text-align: center;">-</td>
<td class="uploader-file-progress" style="text-align: center;"><span
style="color: #73a2f8;">完成</span></td>
<td style="text-align: center;">
<span class="uploader-file-cancel" style="padding: 0 10px;">
<img src="${ctxPath}/plugins/simple-uploader/public/cancel.png" title="Cancel upload">
</span>
<input name="imgFile" type="hidden" title="文件路径" value="${item}">
<input name="fileName" type="hidden" title="文件名字" value="${fileName[i]}">
</td>
</tr>
<!--# i = i+ 1; } -->
<!--#}-->
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="layui-row">
<input name="et3QuestionIds" type="hidden" />
<label class="layui-form-label">实训任务:</label>
<div class="layui-row">
<div class="layui-input-block">
<table class="layui-table" style="width: 60%;min-width: 1000px;">
<colgroup>
<col width="200">
<col>
<col>
<col width="200">
</colgroup>
<thead>
<tr>
<th>任务顺序</th>
<th>任务标题</th>
<th>任务类型</th>
<th>分值</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td><a class="layui-btn layui-btn-sm bg_button bj">编辑</a> <a style="background-color: red" class="layui-btn layui-btn-sm sc">删除</a></td>
</tr>
<tr><td colspan="6" class="t_c">暂无实训任务...</td></tr>
<tr>
<td colspan="6" style="padding-left: 50px;">
合计:<span class="sxzf"></span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- 业务对象须有hidden字段保存delFlag和version字段-->
<input type="hidden" name="handsOnId" value="${handsOn.handsOnId}" />
<div style="text-align: center">
<layui:submitButtons id="addButton" buttonType="" showExamine="2" />
</div>
</form>
<!--#} -->
<script>
@ -48,3 +188,5 @@ layui.use(['add'], function(){
handsOnAdd.init();
});
</script>
<script type="text/javascript" src="${ctxPath}/plugins/simple-uploader/public/uploader.js?v=${jsVer}"></script>
<script type="text/javascript" src="${ctxPath}/plugins/simple-uploader/public/app.js?v=${jsVer}"></script>

@ -11,8 +11,6 @@
<layui:accessButton function="handsOn.query" id="searchFormSearch" action="search"><i class="layui-icon">&#xe615;</i>搜索</layui:accessButton>
<!--# }-->
<layui:accessButton function="handsOn.add" action="add">添加</layui:accessButton>
<layui:accessButton function="handsOn.edit" action="edit">修改</layui:accessButton>
<layui:accessButton function="handsOn.del" action="del">删除</layui:accessButton>
<!--# if(!isEmpty(search)) {-->
<layui:accessButton function="handsOn.query" action="refresh"><i class="layui-icon">&#xe669;</i>刷新</layui:accessButton>
<!--# }-->

Loading…
Cancel
Save