Commit 65a65910 authored by 耿迪迪's avatar 耿迪迪
parents c6edf1f9 ced5dcd4
...@@ -91,6 +91,15 @@ public class TTrainCourseController extends BaseController ...@@ -91,6 +91,15 @@ public class TTrainCourseController extends BaseController
{ {
return AjaxResult.success(tTrainCourseService.selectTTrainCourseById(courseId)); return AjaxResult.success(tTrainCourseService.selectTTrainCourseById(courseId));
} }
/**
* 获取培训课程详细信息
*/
@ApiOperation("用户课程详情")
@GetMapping(value = "/userCourse")
public AjaxResult getUserCourse(Long userCourseId)
{
return AjaxResult.success(tTrainCourseService.getUserCourse(userCourseId));
}
/** /**
* 获取培训课程详细信息 * 获取培训课程详细信息
...@@ -123,6 +132,16 @@ public class TTrainCourseController extends BaseController ...@@ -123,6 +132,16 @@ public class TTrainCourseController extends BaseController
{ {
return toAjax(tTrainCourseService.updateTTrainCourse(tTrainCourse)); return toAjax(tTrainCourseService.updateTTrainCourse(tTrainCourse));
} }
/**
* 修改用户课程
*/
@ApiOperation("修改用户课程")
@Log(title = "修改用户课程", businessType = BusinessType.UPDATE)
@PutMapping("/editUserCourse")
public AjaxResult editUserCourse(@RequestBody TTrainUserCourse tTrainUserCourse)
{
return toAjax(tTrainCourseService.updateTTrainUserCourse(tTrainUserCourse));
}
/** /**
* 删除培训课程 * 删除培训课程
......
...@@ -89,6 +89,16 @@ public class TTrainCourse extends BaseEntity ...@@ -89,6 +89,16 @@ public class TTrainCourse extends BaseEntity
private Integer personnelType; private Integer personnelType;
private Integer duration;
public Integer getDuration() {
return duration;
}
public void setDuration(Integer duration) {
this.duration = duration;
}
public String getPlanName() { public String getPlanName() {
return planName; return planName;
} }
......
...@@ -54,6 +54,25 @@ public class TTrainUserCourse extends BaseEntity ...@@ -54,6 +54,25 @@ public class TTrainUserCourse extends BaseEntity
private Integer personnelType; private Integer personnelType;
private Integer finishDuration;
private Integer trainState;
public Integer getFinishDuration() {
return finishDuration;
}
public void setFinishDuration(Integer finishDuration) {
this.finishDuration = finishDuration;
}
public Integer getTrainState() {
return trainState;
}
public void setTrainState(Integer trainState) {
this.trainState = trainState;
}
public Integer getPersonnelType() { public Integer getPersonnelType() {
return personnelType; return personnelType;
} }
......
...@@ -35,4 +35,9 @@ public class UserCourseVo { ...@@ -35,4 +35,9 @@ public class UserCourseVo {
private String dataKind; private String dataKind;
private Integer personnelType; private Integer personnelType;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date testStartTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date testEndTime;
} }
...@@ -54,6 +54,7 @@ public interface ITTrainCourseService ...@@ -54,6 +54,7 @@ public interface ITTrainCourseService
* @return 结果 * @return 结果
*/ */
public int updateTTrainCourse(TTrainCourse tTrainCourse); public int updateTTrainCourse(TTrainCourse tTrainCourse);
public int updateTTrainUserCourse(TTrainUserCourse tTrainUserCourse);
/** /**
* 批量删除培训课程 * 批量删除培训课程
...@@ -71,6 +72,9 @@ public interface ITTrainCourseService ...@@ -71,6 +72,9 @@ public interface ITTrainCourseService
*/ */
public int deleteTTrainCourseById(Long courseId); public int deleteTTrainCourseById(Long courseId);
public TTrainUserCourse getUserCourse(Long userCourseId);
/** /**
* 用户id * 用户id
* @param userId * @param userId
......
...@@ -89,6 +89,9 @@ public class TTrainCourseServiceImpl implements ITTrainCourseService ...@@ -89,6 +89,9 @@ public class TTrainCourseServiceImpl implements ITTrainCourseService
@Override @Override
public Long insertTTrainCourse(TTrainCourse tTrainCourse) public Long insertTTrainCourse(TTrainCourse tTrainCourse)
{ {
if(tTrainCourse.getDuration()!=null){//分钟转化秒
tTrainCourse.setDuration(tTrainCourse.getDuration()*60);
}
if(tTrainCourse.getCourseType()!=null){ if(tTrainCourse.getCourseType()!=null){
TTrainPlan p = tTrainPlanMapper.selectTTrainPlanById(tTrainCourse.getCourseType()); TTrainPlan p = tTrainPlanMapper.selectTTrainPlanById(tTrainCourse.getCourseType());
if(p!=null){ if(p!=null){
...@@ -109,8 +112,17 @@ public class TTrainCourseServiceImpl implements ITTrainCourseService ...@@ -109,8 +112,17 @@ public class TTrainCourseServiceImpl implements ITTrainCourseService
@Override @Override
public int updateTTrainCourse(TTrainCourse tTrainCourse) public int updateTTrainCourse(TTrainCourse tTrainCourse)
{ {
if(tTrainCourse.getDuration()!=null){//分钟转化秒
tTrainCourse.setDuration(tTrainCourse.getDuration()*60);
}
return tTrainCourseMapper.updateTTrainCourse(tTrainCourse); return tTrainCourseMapper.updateTTrainCourse(tTrainCourse);
} }
@Override
public int updateTTrainUserCourse(TTrainUserCourse tTrainUserCourse)
{
return tTrainUserCourseMapper.updateTTrainUserCourse(tTrainUserCourse);
}
/** /**
* 批量删除培训课程 * 批量删除培训课程
...@@ -143,6 +155,14 @@ public class TTrainCourseServiceImpl implements ITTrainCourseService ...@@ -143,6 +155,14 @@ public class TTrainCourseServiceImpl implements ITTrainCourseService
@Override @Override
public List<UserCourseVo> userCourseList(Long userId,Integer type){ public List<UserCourseVo> userCourseList(Long userId,Integer type){
List<UserCourseVo> list = tTrainCourseMapper.userCourseList(userId,type,1); List<UserCourseVo> list = tTrainCourseMapper.userCourseList(userId,type,1);
for (UserCourseVo v :list){
if(v.getTestEndTime()!=null&&v.getTestEndTime().getTime()<new Date().getTime()){
v.setState(3);
}
if(v.getTestStartTime()!=null&&v.getTestStartTime().getTime()>new Date().getTime()){
v.setState(4);
}
}
return list; return list;
} }
...@@ -231,4 +251,16 @@ public class TTrainCourseServiceImpl implements ITTrainCourseService ...@@ -231,4 +251,16 @@ public class TTrainCourseServiceImpl implements ITTrainCourseService
public List<TTrainUserCourse> testPersonDetailByCourseId(Long courseId){ public List<TTrainUserCourse> testPersonDetailByCourseId(Long courseId){
return tTrainUserCourseMapper.testPersonDetailByCourseId(courseId); return tTrainUserCourseMapper.testPersonDetailByCourseId(courseId);
} }
@Override
public TTrainUserCourse getUserCourse(Long userCourseId){
TTrainUserCourse userCourse = tTrainUserCourseMapper.selectTTrainUserCourseById(userCourseId);
TTrainCourse v = tTrainCourseMapper.selectTTrainCourseById(userCourse.getCourseId());
if(v.getTestEndTime()!=null&&v.getTestEndTime().getTime()<new Date().getTime()){
userCourse.setState(3);
}
return userCourse;
}
} }
...@@ -24,6 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -24,6 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="testStartTime" column="test_start_time" /> <result property="testStartTime" column="test_start_time" />
<result property="testEndTime" column="test_end_time" /> <result property="testEndTime" column="test_end_time" />
<result property="testPersons" column="test_persons" /> <result property="testPersons" column="test_persons" />
<result property="duration" column="duration" />
</resultMap> </resultMap>
<resultMap id="StatisticsTrainCourseResult" type="StatisticsTrainCourse"> <resultMap id="StatisticsTrainCourseResult" type="StatisticsTrainCourse">
...@@ -38,7 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -38,7 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<sql id="selectTTrainCourseVo"> <sql id="selectTTrainCourseVo">
select course_id, course_name, course_type, course_conent, status,personnel_type, release_time, enclosure, video, qualified_num, topic_num, create_time, create_user, is_del, data_kind, test_start_time, test_end_time, test_persons from t_train_course select course_id, course_name, course_type, course_conent, status,personnel_type, release_time, enclosure, video, qualified_num, topic_num, create_time, create_user, is_del, data_kind, test_start_time, test_end_time, test_persons,duration from t_train_course
</sql> </sql>
<select id="selectTTrainCourseList" parameterType="TTrainCourse" resultMap="TTrainCourseResult"> <select id="selectTTrainCourseList" parameterType="TTrainCourse" resultMap="TTrainCourseResult">
...@@ -88,6 +89,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -88,6 +89,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="testStartTime != null">test_start_time,</if> <if test="testStartTime != null">test_start_time,</if>
<if test="testEndTime != null">test_end_time,</if> <if test="testEndTime != null">test_end_time,</if>
<if test="testPersons != null">test_persons,</if> <if test="testPersons != null">test_persons,</if>
<if test="duration != null">duration,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="courseName != null">#{courseName},</if> <if test="courseName != null">#{courseName},</if>
...@@ -107,6 +110,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -107,6 +110,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="testStartTime != null">#{testStartTime},</if> <if test="testStartTime != null">#{testStartTime},</if>
<if test="testEndTime != null">#{testEndTime},</if> <if test="testEndTime != null">#{testEndTime},</if>
<if test="testPersons != null">#{testPersons},</if> <if test="testPersons != null">#{testPersons},</if>
<if test="duration != null">#{duration},</if>
</trim> </trim>
</insert> </insert>
...@@ -130,6 +135,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -130,6 +135,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="testStartTime != null">test_start_time = #{testStartTime},</if> <if test="testStartTime != null">test_start_time = #{testStartTime},</if>
<if test="testEndTime != null">test_end_time = #{testEndTime},</if> <if test="testEndTime != null">test_end_time = #{testEndTime},</if>
<if test="testPersons != null">test_persons = #{testPersons},</if> <if test="testPersons != null">test_persons = #{testPersons},</if>
<if test="duration != null">duration = #{duration},</if>
</trim> </trim>
where course_id = #{courseId} where course_id = #{courseId}
</update> </update>
...@@ -152,7 +158,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -152,7 +158,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</insert> </insert>
<select id="userCourseList" resultType="com.zehong.system.domain.vo.UserCourseVo"> <select id="userCourseList" resultType="com.zehong.system.domain.vo.UserCourseVo">
SELECT uc.user_course_id AS userCourseId,uc.state ,uc.examination_time AS examinationTime, SELECT uc.user_course_id AS userCourseId,uc.state ,uc.examination_time AS examinationTime,
uc.`examination_result` AS examinationResult,uc.`create_time` AS createTime, uc.`examination_result` AS examinationResult,uc.`create_time` AS createTime,c.test_start_time as testStartTime,c.test_end_time as testEndTime,
c.`course_name` AS courseName, c.`topic_num` AS topicNum,c.`release_time` AS releaseTime,c.data_kind as dataKind,c.personnel_type as personnelType, c.`course_name` AS courseName, c.`topic_num` AS topicNum,c.`release_time` AS releaseTime,c.data_kind as dataKind,c.personnel_type as personnelType,
p.`plan_name` AS courseType,c.course_id as courseId,c.qualified_num as qualifiedNum p.`plan_name` AS courseType,c.course_id as courseId,c.qualified_num as qualifiedNum
FROM t_train_user_course uc FROM t_train_user_course uc
......
...@@ -16,10 +16,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -16,10 +16,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="createUser" column="create_user" /> <result property="createUser" column="create_user" />
<result property="staffName" column="staff_name"/> <result property="staffName" column="staff_name"/>
<result property="deptName" column="dept_name"/> <result property="deptName" column="dept_name"/>
<result property="finishDuration" column="finish_duration"/>
<result property="trainState" column="train_state"/>
</resultMap> </resultMap>
<sql id="selectTTrainUserCourseVo"> <sql id="selectTTrainUserCourseVo">
select user_course_id, user_id, course_id, state, examination_time, personnel_type,examination_result, create_time, create_user from t_train_user_course select user_course_id, user_id, course_id, state, examination_time, personnel_type,examination_result, create_time, create_user,finish_duration,train_state from t_train_user_course
</sql> </sql>
<select id="selectTTrainUserCourseList" parameterType="TTrainUserCourse" resultMap="TTrainUserCourseResult"> <select id="selectTTrainUserCourseList" parameterType="TTrainUserCourse" resultMap="TTrainUserCourseResult">
...@@ -50,6 +52,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -50,6 +52,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="examinationResult != null">examination_result,</if> <if test="examinationResult != null">examination_result,</if>
<if test="createTime != null">create_time,</if> <if test="createTime != null">create_time,</if>
<if test="createUser != null">create_user,</if> <if test="createUser != null">create_user,</if>
<if test="finishDuration != null">finish_duration,</if>
<if test="trainState != null">train_state,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="userId != null">#{userId},</if> <if test="userId != null">#{userId},</if>
...@@ -60,6 +64,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -60,6 +64,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="examinationResult != null">#{examinationResult},</if> <if test="examinationResult != null">#{examinationResult},</if>
<if test="createTime != null">#{createTime},</if> <if test="createTime != null">#{createTime},</if>
<if test="createUser != null">#{createUser},</if> <if test="createUser != null">#{createUser},</if>
<if test="finishDuration != null">#{finishDuration},</if>
<if test="trainState != null">#{trainState},</if>
</trim> </trim>
</insert> </insert>
...@@ -74,6 +80,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -74,6 +80,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="examinationResult != null">examination_result = #{examinationResult},</if> <if test="examinationResult != null">examination_result = #{examinationResult},</if>
<if test="createTime != null">create_time = #{createTime},</if> <if test="createTime != null">create_time = #{createTime},</if>
<if test="createUser != null">create_user = #{createUser},</if> <if test="createUser != null">create_user = #{createUser},</if>
<if test="finishDuration != null">finish_duration = #{finishDuration},</if>
<if test="trainState != null">train_state = #{trainState},</if>
</trim> </trim>
where user_course_id = #{userCourseId} where user_course_id = #{userCourseId}
</update> </update>
......
...@@ -34,6 +34,14 @@ export function getLessonById(id) { ...@@ -34,6 +34,14 @@ export function getLessonById(id) {
method: 'get', method: 'get',
}) })
} }
//用户课程状态
export function getUserLessonById(query) {
return request({
url: 'system/course/userCourse',
method: 'get',
params: query
})
}
// 添加课程 // 添加课程
export function addLessons(data) { export function addLessons(data) {
return request({ return request({
...@@ -50,7 +58,14 @@ export function changeLesson(data) { ...@@ -50,7 +58,14 @@ export function changeLesson(data) {
data:data data:data
}) })
} }
// // 修改用户课程
export function changeUserLesson(data) {
return request({
url: '/system/course/editUserCourse',
method: 'put',
data:data
})
}
// 发布课程 // 发布课程
export function issue(query) { export function issue(query) {
return request({ return request({
......
...@@ -55,7 +55,8 @@ service.interceptors.response.use(res => { ...@@ -55,7 +55,8 @@ service.interceptors.response.use(res => {
const msg = errorCode[code] || res.data.msg || errorCode['default'] const msg = errorCode[code] || res.data.msg || errorCode['default']
if (code === 401) { if (code === 401) {
MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
confirmButtonText: '重新登录', // 重新登录
confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: 纪泽龙 jizelong@qq.com * @Author: 纪泽龙 jizelong@qq.com
* @Date: 2022-09-22 10:38:49 * @Date: 2022-09-22 10:38:49
* @LastEditors: 纪泽龙 jizelong@qq.com * @LastEditors: 纪泽龙 jizelong@qq.com
* @LastEditTime: 2022-12-26 09:54:47 * @LastEditTime: 2023-01-04 17:50:46
* @FilePath: /danger-manage-web/src/views/lessonsProgram/components/addLesson.vue * @FilePath: /danger-manage-web/src/views/lessonsProgram/components/addLesson.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
--> -->
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: 纪泽龙 jizelong@qq.com * @Author: 纪泽龙 jizelong@qq.com
* @Date: 2022-09-22 10:59:44 * @Date: 2022-09-22 10:59:44
* @LastEditors: 纪泽龙 jizelong@qq.com * @LastEditors: 纪泽龙 jizelong@qq.com
* @LastEditTime: 2022-09-28 17:52:32 * @LastEditTime: 2023-01-04 17:47:53
* @FilePath: /danger-manage-web/src/views/lessonsProgram/components/Lession.vue * @FilePath: /danger-manage-web/src/views/lessonsProgram/components/Lession.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
--> -->
...@@ -17,9 +17,28 @@ ...@@ -17,9 +17,28 @@
> >
<div class="top flex"> <div class="top flex">
<el-form-item label="课程标题" prop="courseName"> <el-form-item label="课程标题" prop="courseName">
<el-input style="width: 500px" v-model="form.courseName"></el-input> <el-input style="width: 400px" v-model="form.courseName"></el-input>
</el-form-item> </el-form-item>
<!--<el-form-item label="培训计划" prop="courseType">-->
<!--<el-select-->
<!--v-model="form.courseType"-->
<!--placeholder="请选择培训计划"-->
<!--clearable-->
<!--size="small"-->
<!--&gt;-->
<!--<el-option-->
<!--v-for="course in courseOptions"-->
<!--:key="course.planId"-->
<!--:label="course.planName"-->
<!--:value="course.planId"-->
<!--/>-->
<!--</el-select>-->
<!--</el-form-item>-->
</div>
<div class="flex">
<el-form-item label="培训计划" prop="courseType"> <el-form-item label="培训计划" prop="courseType">
<el-select <el-select
v-model="form.courseType" v-model="form.courseType"
...@@ -35,8 +54,31 @@ ...@@ -35,8 +54,31 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="培训时长" prop="duration" style="margin-left: 55px">
<el-input style="width: 220px" placeholder="分钟" type="number" v-model="form.duration"></el-input>
</el-form-item>
</div>
<div class="flex">
<el-form-item label="开始时间" prop="testStartTime">
<el-date-picker
style="margin-right: 50px"
v-model="form.testStartTime"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetime"
placeholder="选择日期时间"
default-time="00:00:00"
/>
</el-form-item>
<el-form-item label="结束时间" prop="testEndTime">
<el-date-picker
v-model="form.testEndTime"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetime"
placeholder="选择日期时间"
default-time="00:00:00"
/>
</el-form-item>
</div> </div>
<!-- </div> --> <!-- </div> -->
<el-form-item label="课程内容" prop="courseConent"> <el-form-item label="课程内容" prop="courseConent">
<Editor v-model="form.courseConent" :min-height="192" /> <Editor v-model="form.courseConent" :min-height="192" />
...@@ -65,6 +107,7 @@ ...@@ -65,6 +107,7 @@
@resFun="getFileInfoFile" @resFun="getFileInfoFile"
@remove="listRemoveFile" @remove="listRemoveFile"
:fileArr="fileListFile" :fileArr="fileListFile"
:fileType="fileType"
/> />
<el-input v-show="false" disabled v-model="form.enclosure"></el-input> <el-input v-show="false" disabled v-model="form.enclosure"></el-input>
</el-form-item> </el-form-item>
...@@ -104,12 +147,13 @@ export default { ...@@ -104,12 +147,13 @@ export default {
video: "", video: "",
enclosure: "", enclosure: "",
}, },
fileType: ["doc", "docx", "xls", "xlsx", "ppt", "txt", "pdf"],
fileListVideo: [], fileListVideo: [],
fileListFile: [], fileListFile: [],
readOnly: false, readOnly: false,
rules: { rules: {
courseName: [ courseName: [
{ required: true, trigger: "blur", message: "课程名称不能为空" }, { required: true, trigger: "blur", message: "课程标题不能为空" },
], ],
courseType: [ courseType: [
{ required: true, trigger: "change", message: "课程类型不能为空" }, { required: true, trigger: "change", message: "课程类型不能为空" },
...@@ -121,6 +165,15 @@ export default { ...@@ -121,6 +165,15 @@ export default {
enclosure: [ enclosure: [
{ required: true, trigger: "blur", message: "附件不能为空" }, { required: true, trigger: "blur", message: "附件不能为空" },
], ],
duration: [
{ required: true, trigger: "blur", message: "培训时长不能为空" },
],
testStartTime: [
{ required: true, trigger: "blur", message: "开始时间不能为空" },
],
testEndTime: [
{ required: true, trigger: "blur", message: "结束时间不能为空" },
],
}, },
}; };
}, },
......
...@@ -2,15 +2,17 @@ ...@@ -2,15 +2,17 @@
* @Author: 纪泽龙 jizelong@qq.com * @Author: 纪泽龙 jizelong@qq.com
* @Date: 2022-09-20 20:14:18 * @Date: 2022-09-20 20:14:18
* @LastEditors: 纪泽龙 jizelong@qq.com * @LastEditors: 纪泽龙 jizelong@qq.com
* @LastEditTime: 2022-09-28 16:59:32 * @LastEditTime: 2023-01-05 09:38:13
* @FilePath: /danger-manage-web/src/views/myLessons/CheckLesson.vue * @FilePath: /danger-manage-web/src/views/myLessons/CheckLesson.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
--> -->
<template> <template>
<div class="check-lession flex"> <div class="check-lession flex">
<div class="top-title"> <div class="top-title">
<div class="item"> <div class="item allone">
<div class="text">{{ state != 2 ? "学习课程" : "查看课程" }}</div> <div class="text">{{ state != 2 ? "学习课程" : "查看课程" }}</div>
<div v-if="userlessonData.state!=3" class="gotime">{{minute}}:{{calculation(second)}}/{{parseInt(lessonData.duration/60)}}:{{calculation(lessonData.duration%60)}}</div>
<div v-if="userlessonData.state==3" style="background: red" class="gotime"> 已过期 </div>
</div> </div>
<div class="bt flex fz14 border-bottom"> <div class="bt flex fz14 border-bottom">
...@@ -38,10 +40,10 @@ ...@@ -38,10 +40,10 @@
</div> </div>
</div> </div>
<div class="bt flex fz14 video"> <div class="bt flex fz14 video" >
<div class="a">视频文件</div> <div class="a">视频文件</div>
<div class="b"> <div class="b">
<div class="video"> <div class="video" v-if="lessonData.video">
<video-player <video-player
class="video-player vjs-custom-skin" class="video-player vjs-custom-skin"
ref="videoPlayer" ref="videoPlayer"
...@@ -49,6 +51,7 @@ ...@@ -49,6 +51,7 @@
:options="playerOptions" :options="playerOptions"
></video-player> ></video-player>
</div> </div>
<div v-else>未上传视频</div>
</div> </div>
</div> </div>
...@@ -60,6 +63,9 @@ ...@@ -60,6 +63,9 @@
<el-button style="padding: 0; margin-left: 20px" type="text"> <el-button style="padding: 0; margin-left: 20px" type="text">
<a :href="lessonData.enclosure">下载</a> <a :href="lessonData.enclosure">下载</a>
</el-button> </el-button>
<el-button style="padding: 0; margin-left: 20px" type="text">
<a @click="openXslx(lessonData.enclosure)">预览</a>
</el-button>
</div> </div>
</div> </div>
</div> </div>
...@@ -86,7 +92,7 @@ ...@@ -86,7 +92,7 @@
</div> </div>
<div class="btn-wrapper flex"> <div class="btn-wrapper flex">
<el-button @click="againQuesstion" type="primary">{{ <el-button v-if="this.finish" @click="againQuesstion" type="primary">{{
state == 2 || state == 1 ? "重新考试" : "开始考试" state == 2 || state == 1 ? "重新考试" : "开始考试"
}}</el-button> }}</el-button>
<el-button @click="$router.back()" type="primary" plain>取消</el-button> <el-button @click="$router.back()" type="primary" plain>取消</el-button>
...@@ -99,11 +105,14 @@ ...@@ -99,11 +105,14 @@
:visible.sync="answerOpen" :visible.sync="answerOpen"
@jj="jj" @jj="jj"
/> />
<el-dialog :visible.sync="iframeVisible" width="80%">
<iframe style="width: 100%; height: 600px" :src="ky"></iframe>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { getLessonById } from "@/api/educationPlanExam/lessonsProgram"; import { getLessonById,getUserLessonById ,changeUserLesson} from "@/api/educationPlanExam/lessonsProgram";
import { getPlanList } from "@/api/educationPlanExam/trainingProgram"; import { getPlanList } from "@/api/educationPlanExam/trainingProgram";
import AnswerLesson from "../components/AnswerLesson"; import AnswerLesson from "../components/AnswerLesson";
...@@ -114,12 +123,18 @@ export default { ...@@ -114,12 +123,18 @@ export default {
}, },
data() { data() {
return { return {
finish:false,
minute:0,
second:0,
playerOptions: { playerOptions: {
aspectRatio: "16:9", aspectRatio: "16:9",
}, },
dingshi:null,
// 课程类型 // 课程类型
courseOptions: [], courseOptions: [],
lessonData: {}, lessonData: {},
userlessonData:{},
// 课程id // 课程id
courseId: 0, courseId: 0,
// 用户学习id // 用户学习id
...@@ -128,6 +143,8 @@ export default { ...@@ -128,6 +143,8 @@ export default {
fenshu: 0, fenshu: 0,
answerOpen: false, answerOpen: false,
lessonTypeName: "", lessonTypeName: "",
iframeVisible: false,
ky: "https://view.xdocin.com/222-223-203-154-8082_o52uv3.htm",
}; };
}, },
created() { created() {
...@@ -135,6 +152,11 @@ export default { ...@@ -135,6 +152,11 @@ export default {
this.getPlanList(); this.getPlanList();
this.getLessonById(); this.getLessonById();
}, },
destroyed(){
console.log('销毁');
this.updateUserCourse();
clearInterval(this.dingshi);
},
methods: { methods: {
getPlanList() { getPlanList() {
getPlanList().then((res) => { getPlanList().then((res) => {
...@@ -162,9 +184,52 @@ export default { ...@@ -162,9 +184,52 @@ export default {
getLessonById(courseId).then((res) => { getLessonById(courseId).then((res) => {
if (res.code == 200) { if (res.code == 200) {
this.lessonData = res.data; this.lessonData = res.data;
console.log(this.lessonData);
this.changeVideo(this.lessonData.video); this.changeVideo(this.lessonData.video);
} }
}); });
getUserLessonById({"userCourseId":userCourseId}).then((res) => {
if (res.code == 200) {
this.userlessonData = res.data;
this.second = this.userlessonData.finishDuration%60;
this.minute = parseInt( this.userlessonData.finishDuration/60);
if(this.userlessonData.state!=3){
this.dingshi = setInterval(this.goTime,1000);
}
}
});
},
goTime(){
if(this.userlessonData.finishDuration>=this.lessonData.duration){
console.log("结束");
clearInterval(this.dingshi);
this.userlessonData.trainState=1;
this.userlessonData.finishDuration = this.lessonData.duration;
this.updateUserCourse();
}else {
this.userlessonData.finishDuration = this.userlessonData.finishDuration+1;
//console.log(this.userlessonData.finishDuration);
this.second = this.userlessonData.finishDuration%60;
this.minute = parseInt( this.userlessonData.finishDuration/60);
if(this.userlessonData.finishDuration%60==0){
this.updateUserCourse();
}
}
},
updateUserCourse(){
changeUserLesson(this.userlessonData).then(response => {
if(this.userlessonData.finishDuration == this.lessonData.duration){
this.finish = true;
}
})
},
calculation(num){
if(num<10){
num = "0"+num;
}
return num;
}, },
changeVideo(src) { changeVideo(src) {
this.playerOptions = { this.playerOptions = {
...@@ -287,4 +352,18 @@ export default { ...@@ -287,4 +352,18 @@ export default {
} }
} }
} }
.allone{
display:flex;
flex-direction:row;
justify-content:flex-start;
}
.gotime{
background: #1c84c6;
width: 80px;
text-align: center;
line-height: 22px;
color: white;
margin-left: 40px;
border-radius: 10px;
}
</style> </style>
...@@ -78,7 +78,7 @@ export default { ...@@ -78,7 +78,7 @@ export default {
}, },
computed: { computed: {
afterList() { afterList() {
return this.list.filter((item) => item.state > 1); return this.list.filter((item) => item.state == 2);
}, },
}, },
created() { created() {
......
...@@ -77,7 +77,7 @@ export default { ...@@ -77,7 +77,7 @@ export default {
}, },
computed: { computed: {
beforeList() { beforeList() {
return this.list.filter((item) => item.state < 2); return this.list.filter((item) => item.state != 2);
}, },
}, },
created() { created() {
......
...@@ -16,8 +16,8 @@ ...@@ -16,8 +16,8 @@
</div> </div>
<div class="time">发布时间:{{ itemData.createTime }}</div> <div class="time">发布时间:{{ itemData.createTime }}</div>
<div class="bottom flex"> <div class="bottom flex">
<div @click="click" class="btn" :class="{ again: yesOrNo }"> <div v-if="!itemData.state===4 || !(itemData.state===3 && itemData.dataKind==='1')" @click="click" class="btn" :class="{ again: yesOrNo }">
{{ yesOrNo ? "重新考试" : "开始学习" }} {{ yesOrNo }}
</div> </div>
</div> </div>
<div <div
...@@ -25,16 +25,29 @@ ...@@ -25,16 +25,29 @@
:class="{ :class="{
no: itemData.state === 1, no: itemData.state === 1,
yes: itemData.state === 2, yes: itemData.state === 2,
ygq:itemData.state === 3,
wks:itemData.state === 4,
}" }"
> >
{{ state[itemData.state] }} {{ state[itemData.state] }}
</div> </div>
<AnswerLesson
v-if="answerOpen"
:courseId="itemData.courseId"
:userCourseId="itemData.userCourseId"
:visible.sync="answerOpen"
@jj="jj"
/>
</div> </div>
</template> </template>
<script> <script>
import AnswerLesson from "./AnswerLesson";
export default { export default {
name: "", name: "",
components: {
AnswerLesson,
},
props: { props: {
itemData: { itemData: {
type: Object, type: Object,
...@@ -50,14 +63,52 @@ export default { ...@@ -50,14 +63,52 @@ export default {
}, },
computed: { computed: {
yesOrNo() { yesOrNo() {
return this.itemData.state == 1 || this.itemData.state == 2; console.log(this.itemData)
if(this.itemData.dataKind==="0"){
if( this.itemData.state === 0){
return '开始学习'
}else if(this.itemData.state === 1){
return '重新考试'
}else if(this.itemData.state === 2){
return '重新考试'
}else if(this.itemData.state === 3){
return '开始学习'
}else if(this.itemData.state === 4){
return '还未开始'
}
}else{
if( this.itemData.state === 0){
return '开始考试'
}else if(this.itemData.state === 1){
return '重新考试'
}else if(this.itemData.state === 2){
return '重新考试'
}else if(this.itemData.state === 3){
return '开始学习'
}else if(this.itemData.state === 4){
return '还未开始'
}
}
}, },
}, },
data() { data() {
return {}; return {
answerOpen:false
};
}, },
methods: { methods: {
jj(e) {
if (e.answer >= e.qualifiedNum) {
this.fenshu = Math.floor((e.answer / e.topicNum) * 100);
this.state = 2;
}
},
click() { click() {
if(this.itemData.dataKind==='1'){
this.answerOpen = true;
return;
}
const { courseId, userCourseId, state, examinationResult, topicNum } = const { courseId, userCourseId, state, examinationResult, topicNum } =
this.itemData; this.itemData;
// if (!this.yesOrNo) { // if (!this.yesOrNo) {
...@@ -73,6 +124,7 @@ export default { ...@@ -73,6 +124,7 @@ export default {
path: "myLessons/CheckLesson", path: "myLessons/CheckLesson",
query: { courseId, userCourseId, state, fenshu }, query: { courseId, userCourseId, state, fenshu },
}); });
// } else { // } else {
// this.$emit("examination", { courseId, userCourseId }); // this.$emit("examination", { courseId, userCourseId });
// } // }
...@@ -161,6 +213,12 @@ export default { ...@@ -161,6 +213,12 @@ export default {
&.yes { &.yes {
background: #3cc426 !important; background: #3cc426 !important;
} }
&.ygq {
background: red !important;
}
&.wks {
background: yellow !important;
}
} }
} }
</style> </style>
...@@ -38,9 +38,11 @@ export default { ...@@ -38,9 +38,11 @@ export default {
currentTabComponent: LearnBefore, currentTabComponent: LearnBefore,
list:[], list:[],
state:{ state:{
"0":'未学习', "0":'未完成',
"1":'未通过', "1":'未通过',
"2":"通过" "2":"已完成",
"3":"已过期",
"4":"未开始"
}, },
}; };
}, },
......
...@@ -19,17 +19,17 @@ ...@@ -19,17 +19,17 @@
<el-form-item label="计划名称" prop="bankName"> <el-form-item label="计划名称" prop="bankName">
<el-input style="width: 500px" v-model="form.bankName"></el-input> <el-input style="width: 500px" v-model="form.bankName"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="人员类型" prop="personnelType"> <!--<el-form-item label="人员类型" prop="personnelType">-->
<el-select v-model="form.personnelType" placeholder="请选择"> <!--<el-select v-model="form.personnelType" placeholder="请选择">-->
<el-option <!--<el-option-->
v-for="item in options" <!--v-for="item in options"-->
:key="item.value" <!--:key="item.value"-->
:label="item.label" <!--:label="item.label"-->
:value="item.value" <!--:value="item.value"-->
> <!--&gt;-->
</el-option> <!--</el-option>-->
</el-select> <!--</el-select>-->
</el-form-item> <!--</el-form-item>-->
<!--<el-form-item label="开始时间" prop="releaseTime">--> <!--<el-form-item label="开始时间" prop="releaseTime">-->
<!--<el-date-picker--> <!--<el-date-picker-->
<!--v-model="form.startTime"--> <!--v-model="form.startTime"-->
......
...@@ -143,9 +143,10 @@ ...@@ -143,9 +143,10 @@
/> />
<!-- 添加或修改应急演练对话框 --> <!-- 添加或修改应急演练对话框 -->
<el-dialog :title="title" :visible.sync="open" width="1800px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="1100px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="90px"> <el-form ref="form" :model="form" :rules="rules" label-width="90px">
<div class="division"> <div class="division" style="margin-bottom:20px" >
<div class="div-kuang" style="width: 50%;"> <div class="div-kuang" style="width: 50%;">
<el-form-item label="演练名称" prop="drillName"> <el-form-item label="演练名称" prop="drillName">
<el-input v-model="form.drillName" placeholder="请输入演练名称" /> <el-input v-model="form.drillName" placeholder="请输入演练名称" />
...@@ -199,8 +200,9 @@ ...@@ -199,8 +200,9 @@
</el-form-item> </el-form-item>
</div> </div>
</div>
<div class="div-kuang" style="width: 95%;margin-left: 2%"> <div class="div-kuang" style="width: 100%;">
<el-form-item label="选择人员" prop="releaseTime"> <el-form-item label="选择人员" prop="releaseTime">
<!-- table --> <!-- table -->
<!-- jsonSelectNameList就是呗选中的人员的json --> <!-- jsonSelectNameList就是呗选中的人员的json -->
...@@ -214,8 +216,6 @@ ...@@ -214,8 +216,6 @@
</el-form-item> </el-form-item>
</div> </div>
</div>
<!--<el-form-item label="评估" prop="assessment">--> <!--<el-form-item label="评估" prop="assessment">-->
<!--<el-input v-model="form.assessment" type="textarea" placeholder="请输入内容" />--> <!--<el-input v-model="form.assessment" type="textarea" placeholder="请输入内容" />-->
...@@ -258,7 +258,7 @@ ...@@ -258,7 +258,7 @@
</div> </div>
<div class="div-kuang" style="width: 58%;margin-left: 2%"> <div class="div-kuang" style="width: 58%;margin-left: 2%">
<el-form-item label="参演人员:" prop="drillPeople"> <el-form-item label="参演人员:" prop="drillPeople">
<span>{{form.drillPeople}}</span> <span style="margin-right:5px" v-for='item in form.jsonPeople' :key="item.peoPleId">{{item.peoPleName}}</span>
</el-form-item> </el-form-item>
<el-form-item label="演练内容:"> <el-form-item label="演练内容:">
<editor v-model="form.drillContent" :min-height="240" :readOnly="readOnly"/> <editor v-model="form.drillContent" :min-height="240" :readOnly="readOnly"/>
...@@ -396,10 +396,6 @@ export default { ...@@ -396,10 +396,6 @@ export default {
}); });
}, },
mounted() { mounted() {
// this.jsonSelectNameList
// '[{"staffId":880,"staffName":"孙卓亚"},{"staffId":871,"staffName":"张玉宾"},{"staffId":869,"staffName":"李二朝"},{"staffId":870,"staffName":"盖永峰"},{"staffId":868,"staffName":"刘丽艳"},{"staffId":867,"staffName":"霍文俊"},{"staffId":866,"staffName":"刘志坚"},{"staffId":865,"staffName":"郝文权"},{"staffId":864,"staffName":"齐雪军"},{"staffId":852,"staffName":"刘江平"},{"staffId":853,"staffName":"谷建海"},{"staffId":851,"staffName":"丁振国"},{"staffId":850,"staffName":"齐江波"},{"staffId":849,"staffName":"周立新"},{"staffId":848,"staffName":"史志波"},{"staffId":847,"staffName":"王增波"},{"staffId":846,"staffName":"杨彦龙"},{"staffId":845,"staffName":"杨华国"},{"staffId":844,"staffName":"王青华"}]';
this.$refs.changePaple.changeNameList(this.jsonSelectNameList);
}, },
methods: { methods: {
// 获取参考人员的list // 获取参考人员的list
...@@ -428,6 +424,9 @@ export default { ...@@ -428,6 +424,9 @@ export default {
const data = []; const data = [];
TStaffList(this.addDateRange(this.queryParams, this.dateRange)).then(response => { TStaffList(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.jsonSelectNameList=response; this.jsonSelectNameList=response;
this.$nextTick(()=>{
this.$refs.changePaple.changeNameList(this.jsonSelectNameList);
})
// response.rows.forEach((city, index) => { // response.rows.forEach((city, index) => {
// data.push({ // data.push({
// label: city.staffName, // label: city.staffName,
...@@ -511,11 +510,13 @@ export default { ...@@ -511,11 +510,13 @@ export default {
// this.cities = response.rows.staffName; // this.cities = response.rows.staffName;
// generateData.cities=['shanghai', 'beijing', 'guangzhou', 'shenzhen', 'nanjing', 'xian', 'chengdu'] // generateData.cities=['shanghai', 'beijing', 'guangzhou', 'shenzhen', 'nanjing', 'xian', 'chengdu']
// }); // });
this.generateData(); this.generateData();
this.reset(); this.reset();
this.open = true; this.open = true;
this.title = "添加应急演练"; this.title = "添加应急演练";
this.$nextTick(()=>{
this.$refs.changePaple.changeNameList(this.jsonSelectNameList);
})
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
...@@ -525,6 +526,11 @@ export default { ...@@ -525,6 +526,11 @@ export default {
this.form = response.data; this.form = response.data;
this.open = true; this.open = true;
this.title = "修改应急演练"; this.title = "修改应急演练";
console.log(response.data.drillPeople)
this.jsonSelectNameList=response.data.drillPeople;
this.$nextTick(()=>{
this.$refs.changePaple.changeNameList(this.jsonSelectNameList);
})
}); });
}, },
/** 评估按钮操作 */ /** 评估按钮操作 */
...@@ -565,6 +571,8 @@ export default { ...@@ -565,6 +571,8 @@ export default {
handleDetail(row) { handleDetail(row) {
getDrill(row.drillId).then(response => { getDrill(row.drillId).then(response => {
this.form = response.data; this.form = response.data;
this.form.jsonPeople = JSON.parse(this.form.drillPeople)
console.log(this.form.jsonPeople)
this.form.drillType = this.selectDictLabel(this.drillTypeOptions, row.drillType); this.form.drillType = this.selectDictLabel(this.drillTypeOptions, row.drillType);
this.form.drillForm = this.selectDictLabel(this.drillFormOptions, row.drillForm); this.form.drillForm = this.selectDictLabel(this.drillFormOptions, row.drillForm);
this.open2 = true; this.open2 = true;
...@@ -607,6 +615,7 @@ export default { ...@@ -607,6 +615,7 @@ export default {
background: white; background: white;
padding-top:20px ; padding-top:20px ;
padding-right: 20px; padding-right: 20px;
padding-bottom:10px;
border-radius: 10px; border-radius: 10px;
} }
.division{ .division{
......
...@@ -189,9 +189,9 @@ export default { ...@@ -189,9 +189,9 @@ export default {
inspectTerm: [ inspectTerm: [
{ required: true, message: "隐患名称不能为空", trigger: "change" } { required: true, message: "隐患名称不能为空", trigger: "change" }
], ],
inspectBasis: [ // inspectBasis: [
{ required: true, message: "检查依据不能为空", trigger: "change" } // { required: true, message: "检查依据不能为空", trigger: "change" }
], // ],
// libraryContent: [ // libraryContent: [
// { required: true, message: "内容/标准不能为空", trigger: "change" } // { required: true, message: "内容/标准不能为空", trigger: "change" }
// ], // ],
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment