提交daim

dev_xd
姜玉琦 2024-12-17 20:25:21 +08:00
parent a2ad6bce52
commit ad0b751737
88 changed files with 4383 additions and 584 deletions

View File

@ -38,6 +38,7 @@
<weixin.mp.version>4.0.6.B</weixin.mp.version>
<weixin.miniapp.version>4.0.6.B</weixin.miniapp.version>
<transmittable-thread-local.version>2.14.2</transmittable-thread-local.version>
<hutool.version>5.8.20</hutool.version>
</properties>
<!-- 依赖声明 -->

View File

@ -136,5 +136,12 @@
<artifactId>weixin-java-miniapp</artifactId>
</dependency>
<!-- hutool核心 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>${hutool.version}</version>
</dependency>
</dependencies>
</project>

View File

@ -5,6 +5,7 @@ package com.yanzhu.common.core.enums;
*/
public enum ApproveStatus {
await(0L, "待提交"),
check(10L, "审核中"),
refuse(11L, "审核驳回"),
exempt(100L, "审核通过"),

View File

@ -0,0 +1,30 @@
package com.yanzhu.common.core.enums;
/**
*
*/
public enum DataSourceEnuns {
APP("1", "小程序数据"),
WEB("2", "客户端数据");
private final String code;
private final String info;
DataSourceEnuns(String code, String info)
{
this.code = code;
this.info = info;
}
public String getCode()
{
return code;
}
public String getInfo()
{
return info;
}
}

View File

@ -0,0 +1,37 @@
package com.yanzhu.common.core.enums;
/**
* ...
*/
public enum ShiFouEnums {
FOU(0L, "0", "否"),
SHI(1L, "1", "是");
private final Long code;
private final String codeStr;
private final String info;
ShiFouEnums(Long code, String codeStr, String info)
{
this.code = code;
this.codeStr = codeStr;
this.info = info;
}
public Long getCode()
{
return code;
}
public String getCodeStr()
{
return codeStr;
}
public String getInfo()
{
return info;
}
}

View File

@ -12,6 +12,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.yanzhu.common.core.utils.StringUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.ArrayUtils;
/**
@ -247,6 +248,15 @@ public class FileUtils
response.setHeader("download-filename", percentEncodedFileName);
}
/**
*
* @param fileName
* @return
*/
public static String getFileExt(String fileName){
return FilenameUtils.getExtension(fileName);
}
/**
*
*

View File

@ -4,9 +4,12 @@ import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.yanzhu.common.core.enums.DataSourceEnuns;
/**
* Entity
@ -56,6 +59,9 @@ public class BaseEntity implements Serializable
/** 选中页签 */
private Long currentUserId;
/** 数据来源 */
private String dataSource;
/** 请求参数 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private Map<String, Object> params;
@ -181,4 +187,12 @@ public class BaseEntity implements Serializable
public void setActiveProjectName(String activeProjectName) {
this.activeProjectName = activeProjectName;
}
public String getDataSource() {
return Objects.isNull(dataSource)? DataSourceEnuns.WEB.getCode():dataSource;
}
public void setDataSource(String dataSource) {
this.dataSource = dataSource;
}
}

View File

@ -75,6 +75,14 @@ public class BusExamUser extends BaseEntity
@Excel(name = "判断题数量")
private String estimateNum;
/** 用户分数 */
@Excel(name = "用户分数")
private Long fullMark;
/** 用户分数 */
@Excel(name = "用户分数")
private Long passMark;
/** 用户分数 */
@Excel(name = "用户分数")
private Long userMark;
@ -227,7 +235,24 @@ public class BusExamUser extends BaseEntity
{
return estimateNum;
}
public void setUserMark(Long userMark)
public Long getFullMark() {
return fullMark;
}
public void setFullMark(Long fullMark) {
this.fullMark = fullMark;
}
public Long getPassMark() {
return passMark;
}
public void setPassMark(Long passMark) {
this.passMark = passMark;
}
public void setUserMark(Long userMark)
{
this.userMark = userMark;
}

View File

@ -49,6 +49,10 @@ public class BusExamUserResult extends BaseEntity
@Excel(name = "答题结果")
private String useRes;
/** 问题分数 */
@Excel(name = "问题分数")
private String mark;
/** 答题得分 */
@Excel(name = "答题得分")
private String useMark;
@ -133,7 +137,16 @@ public class BusExamUserResult extends BaseEntity
{
return useRes;
}
public void setUseMark(String useMark)
public String getMark() {
return mark;
}
public void setMark(String mark) {
this.mark = mark;
}
public void setUseMark(String useMark)
{
this.useMark = useMark;
}

View File

@ -1,10 +1,13 @@
package com.yanzhu.manage.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yanzhu.common.core.annotation.Excel;
import com.yanzhu.common.core.web.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.Date;
/**
* bus_training_video_user
*
@ -48,10 +51,19 @@ public class BusTrainingVideoUser extends BaseEntity
@Excel(name = "视频主键")
private Long videoId;
/** 播放时长 */
@Excel(name = "播放时长")
private String playTimes;
/** 播放状态 */
@Excel(name = "播放状态")
private Long playStatus;
/** 播放时间 */
@Excel(name = "播放时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date playDates;
/** 排序 */
@Excel(name = "排序")
private Long sortBy;
@ -225,6 +237,22 @@ public class BusTrainingVideoUser extends BaseEntity
this.trainFileImage = trainFileImage;
}
public String getPlayTimes() {
return playTimes;
}
public void setPlayTimes(String playTimes) {
this.playTimes = playTimes;
}
public Date getPlayDates() {
return playDates;
}
public void setPlayDates(Date playDates) {
this.playDates = playDates;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

View File

@ -83,6 +83,16 @@ public class ProProjectInfoSubdepts extends BaseEntity
@Excel(name = "进场时间")
private Date useDates;
/** 进场时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "进场时间")
private Date startWorkDates;
/** 进场时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "进场时间")
private Date endWorkDates;
/** 进场状态 */
@Excel(name = "进场状态")
private String useStatus;
@ -106,6 +116,11 @@ public class ProProjectInfoSubdepts extends BaseEntity
/** 委托人半身照片 */
private String leaderUserPicture;
/**
*
*/
private ProProjectInfoSubdeptsUsers proProjectInfoSubdeptsUsers;
public void setId(Long id)
{
this.id = id;
@ -315,6 +330,30 @@ public class ProProjectInfoSubdepts extends BaseEntity
this.leaderUserPicture = leaderUserPicture;
}
public Date getStartWorkDates() {
return startWorkDates;
}
public void setStartWorkDates(Date startWorkDates) {
this.startWorkDates = startWorkDates;
}
public Date getEndWorkDates() {
return endWorkDates;
}
public void setEndWorkDates(Date endWorkDates) {
this.endWorkDates = endWorkDates;
}
public ProProjectInfoSubdeptsUsers getProProjectInfoSubdeptsUsers() {
return proProjectInfoSubdeptsUsers;
}
public void setProProjectInfoSubdeptsUsers(ProProjectInfoSubdeptsUsers proProjectInfoSubdeptsUsers) {
this.proProjectInfoSubdeptsUsers = proProjectInfoSubdeptsUsers;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

View File

@ -19,7 +19,6 @@ public class ProProjectInfoSubdeptsUsers extends BaseEntity
{
private static final long serialVersionUID = 1L;
@Excel(name = "所属项目")
private String projectName;
/** 分包单位名称 */
@ -56,8 +55,6 @@ public class ProProjectInfoSubdeptsUsers extends BaseEntity
private String subDeptType;
/** 用户主键 */
private Long userId;
@ -81,6 +78,10 @@ public class ProProjectInfoSubdeptsUsers extends BaseEntity
@Excel(name = "工种岗位")
private String craftPostName;
/** 委托书 */
@Excel(name = "委托书")
private String subDeptPowerPath;
@Excel(name = "状态")
private String enterState;
/** 学习状态 */
@ -130,6 +131,11 @@ public class ProProjectInfoSubdeptsUsers extends BaseEntity
private Long supIllnessStatus;
private String phoneNumber;
/** 劳务人员学历 */
private String degreeGrade;
public String getEnterState() {
return enterState;
}
@ -416,6 +422,30 @@ public class ProProjectInfoSubdeptsUsers extends BaseEntity
this.projectName = projectName;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getDegreeGrade() {
return degreeGrade;
}
public void setDegreeGrade(String degreeGrade) {
this.degreeGrade = degreeGrade;
}
public String getSubDeptPowerPath() {
return subDeptPowerPath;
}
public void setSubDeptPowerPath(String subDeptPowerPath) {
this.subDeptPowerPath = subDeptPowerPath;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

View File

@ -77,6 +77,13 @@ public interface BusExamUserMapper
*/
public int batchBusExamUserResult(List<BusExamUserResult> busExamUserResultList);
/**
*
*
* @param examUserId
* @return
*/
public List<BusExamUserResult> selectBusExamUserResultByExamUserId(Long examUserId);
/**
*
@ -85,4 +92,11 @@ public interface BusExamUserMapper
* @return
*/
public int deleteBusExamUserResultByExamUserId(Long id);
/**
*
* @param busExamUserResult
* @return
*/
public int updateBusExamUserResult(BusExamUserResult busExamUserResult);
}

View File

@ -29,6 +29,14 @@ public interface BusTrainingVideoMapper
*/
public List<BusTrainingVideo> selectBusTrainingVideoList(BusTrainingVideo busTrainingVideo);
/**
*
*
* @param busTrainingVideo
* @return
*/
public List<Map<String, Object>> selectBusTrainingVideoListGroup(BusTrainingVideo busTrainingVideo);
/**
*
*

View File

@ -1,6 +1,7 @@
package com.yanzhu.manage.mapper;
import com.yanzhu.manage.domain.BusTrainingVideoUser;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -52,6 +53,15 @@ public interface BusTrainingVideoUserMapper
*/
public int deleteBusTrainingVideoUserById(Long id);
/**
*
*
* @param proId
* @param userId
* @return
*/
public int deleteBusTrainingVideoUserByParams(@Param("proId")Long proId, @Param("userId")Long userId);
/**
*
*
@ -59,4 +69,12 @@ public interface BusTrainingVideoUserMapper
* @return
*/
public int deleteBusTrainingVideoUserByIds(Long[] ids);
/**
*
*
* @param busTrainingVideoUserList
* @return
*/
public int batchBusTrainingVideoUser(List<BusTrainingVideoUser> busTrainingVideoUserList);
}

View File

@ -2,6 +2,7 @@ package com.yanzhu.manage.mapper;
import java.util.List;
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
import org.apache.ibatis.annotations.Param;
/**
* Mapper
@ -19,6 +20,15 @@ public interface ProProjectInfoSubdeptsUsersMapper
*/
public ProProjectInfoSubdeptsUsers selectProProjectInfoSubdeptsUsersById(Long id);
/**
*
*
* @param proId
* @param userId
* @return
*/
public ProProjectInfoSubdeptsUsers selectProProjectInfoSubdeptsUsersByParamId(@Param("proId")Long proId, @Param("userId")Long userId);
/**
*
*

View File

@ -20,6 +20,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="singleNum" column="single_num" />
<result property="multipleNum" column="multiple_num" />
<result property="estimateNum" column="estimate_num" />
<result property="fullMark" column="full_mark" />
<result property="passMark" column="pass_mark" />
<result property="userMark" column="user_mark" />
<result property="resStatus" column="res_status" />
<result property="useTimes" column="use_times" />
@ -35,6 +37,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<collection property="busExamUserResultList" notNullColumn="sub_id" javaType="java.util.List" resultMap="BusExamUserResultResult" />
</resultMap>
<resultMap type="BusExamUserResult" id="BusExamUserResultEntityResult">
<result property="id" column="id" />
<result property="examUserId" column="exam_user_id" />
<result property="questionId" column="question_id" />
<result property="questionTitle" column="question_title" />
<result property="questionType" column="question_type" />
<result property="questionOption" column="question_option" />
<result property="userAnswer" column="user_answer" />
<result property="answer" column="answer" />
<result property="useRes" column="use_res" />
<result property="mark" column="mark" />
<result property="useMark" column="use_mark" />
</resultMap>
<resultMap type="BusExamUserResult" id="BusExamUserResultResult">
<result property="id" column="sub_id" />
<result property="examUserId" column="sub_exam_user_id" />
@ -45,11 +61,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="userAnswer" column="sub_user_answer" />
<result property="answer" column="sub_answer" />
<result property="useRes" column="sub_use_res" />
<result property="mark" column="sub_mark" />
<result property="useMark" column="sub_use_mark" />
</resultMap>
<sql id="selectBusExamUserVo">
select beu.id, beu.com_id, sd.dept_name as com_name, beu.project_id, pi.project_name, beu.user_id, su.nick_name as user_nick, su.user_name, beu.exam_title, beu.exam_type, beu.craft_type, beu.craft_post, beu.single_num, beu.multiple_num, beu.estimate_num, beu.user_mark, beu.res_status, beu.use_times, beu.is_del, beu.create_by, beu.create_time, beu.update_by, beu.update_time, beu.remark from bus_exam_user beu
select beu.id, beu.com_id, sd.dept_name as com_name, beu.project_id, pi.project_name, beu.user_id, su.nick_name as user_nick, su.user_name, beu.exam_title, beu.exam_type, beu.craft_type, beu.craft_post, beu.single_num, beu.multiple_num, beu.estimate_num, beu.full_mark, beu.pass_mark, beu.user_mark, beu.res_status, beu.use_times, beu.is_del, beu.create_by, beu.create_time, beu.update_by, beu.update_time, beu.remark from bus_exam_user beu
left join pro_project_info pi on pi.id = beu.project_id
left join sys_dept sd on sd.dept_id = pi.com_id
left join sys_user su on su.user_id = beu.user_id
@ -78,7 +95,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectBusExamUserById" parameterType="Long" resultMap="BusExamUserBusExamUserResultResult">
select a.id, a.com_id, sd.dept_name as com_name, a.project_id, pi.project_name, a.user_id, su.nick_name as user_nick, su.user_name, a.exam_title, a.exam_type, a.craft_type, a.craft_post, a.single_num, a.multiple_num, a.estimate_num, a.user_mark, a.res_status, a.use_times, a.is_del, a.create_by, a.create_time, a.update_by, a.update_time, a.remark,
b.id as sub_id, b.exam_user_id as sub_exam_user_id, b.question_id as sub_question_id, b.question_title as sub_question_title, b.question_type as sub_question_type, b.question_option as sub_question_option, b.user_answer as sub_user_answer, b.answer as sub_answer, b.use_res as sub_use_res, b.use_mark as sub_use_mark
b.id as sub_id, b.exam_user_id as sub_exam_user_id, b.question_id as sub_question_id, b.question_title as sub_question_title, b.question_type as sub_question_type, b.question_option as sub_question_option, b.user_answer as sub_user_answer, b.answer as sub_answer, b.use_res as sub_use_res, b.mark as sub_mark, b.use_mark as sub_use_mark
from bus_exam_user a
left join pro_project_info pi on pi.id = a.project_id
left join sys_dept sd on sd.dept_id = a.com_id
@ -100,6 +117,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="singleNum != null">single_num,</if>
<if test="multipleNum != null">multiple_num,</if>
<if test="estimateNum != null">estimate_num,</if>
<if test="fullMark != null">full_mark,</if>
<if test="passMark != null">pass_mark,</if>
<if test="userMark != null">user_mark,</if>
<if test="resStatus != null">res_status,</if>
<if test="useTimes != null">use_times,</if>
@ -121,6 +140,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="singleNum != null">#{singleNum},</if>
<if test="multipleNum != null">#{multipleNum},</if>
<if test="estimateNum != null">#{estimateNum},</if>
<if test="fullMark != null">#{fullMark},</if>
<if test="passMark != null">#{passMark},</if>
<if test="userMark != null">#{userMark},</if>
<if test="resStatus != null">#{resStatus},</if>
<if test="useTimes != null">#{useTimes},</if>
@ -146,6 +167,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="singleNum != null">single_num = #{singleNum},</if>
<if test="multipleNum != null">multiple_num = #{multipleNum},</if>
<if test="estimateNum != null">estimate_num = #{estimateNum},</if>
<if test="fullMark != null">full_mark = #{fullMark},</if>
<if test="passMark != null">pass_mark = #{passMark},</if>
<if test="userMark != null">user_mark = #{userMark},</if>
<if test="resStatus != null">res_status = #{resStatus},</if>
<if test="useTimes != null">use_times = #{useTimes},</if>
@ -182,10 +205,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</delete>
<insert id="batchBusExamUserResult">
insert into bus_exam_user_result( id, exam_user_id, question_id, question_title, question_type, question_option, user_answer, answer, use_res, use_mark) values
insert into bus_exam_user_result( id, exam_user_id, question_id, question_title, question_type, question_option, user_answer, answer, use_res, mark, use_mark) values
<foreach item="item" index="index" collection="list" separator=",">
( #{item.id}, #{item.examUserId}, #{item.questionId}, #{item.questionTitle}, #{item.questionType}, #{item.questionOption}, #{item.userAnswer}, #{item.answer}, #{item.useRes}, #{item.useMark})
( #{item.id}, #{item.examUserId}, #{item.questionId}, #{item.questionTitle}, #{item.questionType}, #{item.questionOption}, #{item.userAnswer}, #{item.answer}, #{item.useRes}, #{item.mark}, #{item.useMark})
</foreach>
</insert>
<select id="selectBusExamUserResultByExamUserId" parameterType="Long" resultMap="BusExamUserResultEntityResult">
select * from bus_exam_user_result where exam_user_id = #{examUserId}
</select>
<update id="updateBusExamUserResult" parameterType="BusExamUserResult">
update bus_exam_user_result
<trim prefix="SET" suffixOverrides=",">
<if test="userAnswer != null">user_answer = #{userAnswer},</if>
<if test="useRes != null">use_res = #{useRes},</if>
<if test="useMark != null">use_mark = #{useMark},</if>
</trim>
where id = #{id}
</update>
</mapper>

View File

@ -55,6 +55,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
order by btv.id desc
</select>
<select id="selectBusTrainingVideoListGroup" parameterType="BusTrainingVideo" resultType="Map">
select btv.train_level as lvId, sd.dict_label as lvName, count(1) as total from bus_training_video btv
left join sys_dict_data sd on sd.dict_value = btv.train_level and dict_type = 'edu_train_level'
<where>
and btv.is_del != 2
<if test="comId != null "> and (btv.com_id = #{comId} or btv.com_id is null)</if>
<if test="projectId != null "> and (btv.project_id = #{projectId} or btv.project_id is null)</if>
<if test="activeComId != null "> and (btv.com_id = #{activeComId} or btv.com_id is null)</if>
<if test="activeProjectId != null "> and (btv.project_id = #{activeProjectId} or btv.project_id is null)</if>
<if test="craftType != null and craftType != ''"> and find_in_set(#{craftType}, btv.craft_type)</if>
<if test="craftPost != null and craftPost != ''"> and find_in_set(#{craftPost}, btv.craft_post)</if>
<if test="isDel != null "> and btv.is_del = #{isDel}</if>
</where>
group by btv.train_level, sd.dict_label
order by sd.dict_sort
</select>
<select id="findBusTrainingVideoByLevel" parameterType="BusTrainingVideo" resultType="map">
select btv.train_level as trainLevel, count(1) as total
from bus_training_video btv

View File

@ -19,7 +19,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="trainLevel" column="train_level" />
<result property="trainFilePath" column="train_file_path" />
<result property="trainFileImage" column="train_file_image" />
<result property="playTimes" column="play_times" />
<result property="playStatus" column="play_status" />
<result property="playDates" column="play_dates" />
<result property="sortBy" column="sort_by" />
<result property="isDel" column="is_del" />
<result property="createBy" column="create_by" />
@ -31,7 +33,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectBusTrainingVideoUserVo">
select btvu.id, btvu.com_id, sd.dept_name as com_name, btvu.project_id, pi.project_name, btvu.user_id, su.nick_name as user_nick, su.user_name, btvu.video_id, btv.train_title,
btv.train_type, btv.train_level, btv.train_file_path, btv.train_file_image,
btv.train_type, btv.train_level, btv.train_file_path, btv.train_file_image, btvu.play_times, btvu.play_dates,
btvu.play_status, btvu.sort_by, btvu.is_del, btvu.create_by, btvu.create_time, btvu.update_by, btvu.update_time, btvu.remark from bus_training_video_user btvu
left join bus_training_video btv on btv.id = btvu.video_id
left join pro_project_info pi on pi.id = btvu.project_id
@ -56,8 +58,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectBusTrainingVideoUserById" parameterType="Long" resultMap="BusTrainingVideoUserResult">
<include refid="selectBusTrainingVideoUserVo"/>
where btvu.id = #{id}
select * from bus_training_video_user where id = #{id}
</select>
<insert id="insertBusTrainingVideoUser" parameterType="BusTrainingVideoUser" useGeneratedKeys="true" keyProperty="id">
@ -67,7 +68,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="projectId != null">project_id,</if>
<if test="userId != null">user_id,</if>
<if test="videoId != null">video_id,</if>
<if test="playTimes != null">play_times,</if>
<if test="playStatus != null">play_status,</if>
<if test="playDates != null">play_dates,</if>
<if test="sortBy != null">sort_by,</if>
<if test="isDel != null">is_del,</if>
<if test="createBy != null">create_by,</if>
@ -81,7 +84,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="projectId != null">#{projectId},</if>
<if test="userId != null">#{userId},</if>
<if test="videoId != null">#{videoId},</if>
<if test="playTimes != null">#{playTimes},</if>
<if test="playStatus != null">#{playStatus},</if>
<if test="playDates != null">#{playDates},</if>
<if test="sortBy != null">#{sortBy},</if>
<if test="isDel != null">#{isDel},</if>
<if test="createBy != null">#{createBy},</if>
@ -99,7 +104,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="projectId != null">project_id = #{projectId},</if>
<if test="userId != null">user_id = #{userId},</if>
<if test="videoId != null">video_id = #{videoId},</if>
<if test="playTimes != null">play_times = #{playTimes},</if>
<if test="playStatus != null">play_status = #{playStatus},</if>
<if test="playDates != null">play_dates = #{playDates},</if>
<if test="sortBy != null">sort_by = #{sortBy},</if>
<if test="isDel != null">is_del = #{isDel},</if>
<if test="createBy != null">create_by = #{createBy},</if>
@ -115,10 +122,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
update bus_training_video_user set is_del=2 where id = #{id}
</update>
<delete id="deleteBusTrainingVideoUserByParams">
delete from bus_training_video_user where project_id = #{proId} and user_id = #{userId}
</delete>
<update id="deleteBusTrainingVideoUserByIds" parameterType="String">
update bus_training_video_user set is_del=2 where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</update>
<insert id="batchBusTrainingVideoUser">
insert into bus_training_video_user( id, com_id, project_id, user_id, video_id, play_times, play_status, play_dates, sort_by, is_del, create_by, create_time, update_by, update_time, remark) values
<foreach item="item" index="index" collection="list" separator=",">
( #{item.id}, #{item.comId}, #{item.projectId}, #{item.userId}, #{item.videoId}, #{item.playTimes}, #{item.playStatus}, #{item.playDates}, #{item.sortBy}, #{item.isDel}, #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime})
</foreach>
</insert>
</mapper>

View File

@ -17,11 +17,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="subDeptLeaderName" column="sub_dept_leader_name" />
<result property="subDeptLeaderCode" column="sub_dept_leader_code" />
<result property="subDeptLeaderPhone" column="sub_dept_leader_phone" />
<result property="subDeptLeaderPowerPath" column="sub_dept_leader_power_path" />
<result property="businessLicensePath" column="business_license_path" />
<result property="subDeptInfos" column="sub_dept_infos" />
<result property="contractInfos" column="contract_infos" />
<result property="useDates" column="use_dates" />
<result property="startWorkDates" column="start_work_dates" />
<result property="endWorkDates" column="end_work_dates" />
<result property="useStatus" column="use_status" />
<result property="approveStatus" column="approve_status" />
<result property="qrCode" column="qr_code" />
@ -34,7 +35,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectProProjectInfoSubdeptsVo">
select ps.id, ps.com_id, sd.dept_name as com_name, ps.project_id, pi.project_name, ps.sub_dept_type, ps.sub_dept_name, ps.sub_dept_code, ps.sub_dept_leader_id, ps.sub_dept_leader_name, ps.sub_dept_leader_code, ps.sub_dept_leader_phone, ps.sub_dept_leader_power_path, ps.business_license_path, ps.sub_dept_infos, ps.contract_infos, ps.use_dates, ps.use_status, ps.approve_status, ps.qr_code, ps.is_del, ps.create_by, ps.create_time, ps.update_by, ps.update_time, ps.remark from pro_project_info_subdepts ps
select ps.id, ps.com_id, sd.dept_name as com_name, ps.project_id, pi.project_name, ps.sub_dept_type, ps.sub_dept_name, ps.sub_dept_code, ps.sub_dept_leader_id, ps.sub_dept_leader_name, ps.sub_dept_leader_code, ps.sub_dept_leader_phone, ps.business_license_path, ps.sub_dept_infos, ps.contract_infos, ps.use_dates, ps.start_work_dates, ps.end_work_dates, ps.use_status, ps.approve_status, ps.qr_code, ps.is_del, ps.create_by, ps.create_time, ps.update_by, ps.update_time, ps.remark from pro_project_info_subdepts ps
left join pro_project_info pi on pi.id = ps.project_id
left join sys_dept sd on sd.dept_id = pi.com_id
</sql>
@ -53,6 +54,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="subDeptCode != null and subDeptCode != ''"> and ps.sub_dept_code = #{subDeptCode}</if>
<if test="useStatus != null and useStatus != ''"> and ps.use_status = #{useStatus}</if>
<if test="approveStatus != null "> and ps.approve_status = #{approveStatus}</if>
<if test="subDeptLeaderPhone != null and subDeptLeaderPhone != ''"> and ps.sub_dept_leader_phone = #{subDeptLeaderPhone}</if>
</where>
order by ps.id desc
</select>
@ -74,11 +76,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="subDeptLeaderName != null">sub_dept_leader_name,</if>
<if test="subDeptLeaderCode != null">sub_dept_leader_code,</if>
<if test="subDeptLeaderPhone != null">sub_dept_leader_phone,</if>
<if test="subDeptLeaderPowerPath != null">sub_dept_leader_power_path,</if>
<if test="businessLicensePath != null">business_license_path,</if>
<if test="subDeptInfos != null">sub_dept_infos,</if>
<if test="contractInfos != null">contract_infos,</if>
<if test="useDates != null">use_dates,</if>
<if test="startWorkDates != null">start_work_dates,</if>
<if test="endWorkDates != null">end_work_dates,</if>
<if test="useStatus != null">use_status,</if>
<if test="approveStatus != null">approve_status,</if>
<if test="qrCode != null">qr_code,</if>
@ -99,11 +102,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="subDeptLeaderName != null">#{subDeptLeaderName},</if>
<if test="subDeptLeaderCode != null">#{subDeptLeaderCode},</if>
<if test="subDeptLeaderPhone != null">#{subDeptLeaderPhone},</if>
<if test="subDeptLeaderPowerPath != null">#{subDeptLeaderPowerPath},</if>
<if test="businessLicensePath != null">#{businessLicensePath},</if>
<if test="subDeptInfos != null">#{subDeptInfos},</if>
<if test="contractInfos != null">#{contractInfos},</if>
<if test="useDates != null">#{useDates},</if>
<if test="startWorkDates != null">#{startWorkDates},</if>
<if test="endWorkDates != null">#{endWorkDates},</if>
<if test="useStatus != null">#{useStatus},</if>
<if test="approveStatus != null">#{approveStatus},</if>
<if test="qrCode != null">#{qrCode},</if>
@ -128,11 +132,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="subDeptLeaderName != null">sub_dept_leader_name = #{subDeptLeaderName},</if>
<if test="subDeptLeaderCode != null">sub_dept_leader_code = #{subDeptLeaderCode},</if>
<if test="subDeptLeaderPhone != null">sub_dept_leader_phone = #{subDeptLeaderPhone},</if>
<if test="subDeptLeaderPowerPath != null">sub_dept_leader_power_path = #{subDeptLeaderPowerPath},</if>
<if test="businessLicensePath != null">business_license_path = #{businessLicensePath},</if>
<if test="subDeptInfos != null">sub_dept_infos = #{subDeptInfos},</if>
<if test="contractInfos != null">contract_infos = #{contractInfos},</if>
<if test="useDates != null">use_dates = #{useDates},</if>
<if test="startWorkDates != null">start_work_dates = #{startWorkDates},</if>
<if test="endWorkDates != null">end_work_dates = #{endWorkDates},</if>
<if test="useStatus != null">use_status = #{useStatus},</if>
<if test="approveStatus != null">approve_status = #{approveStatus},</if>
<if test="qrCode != null">qr_code = #{qrCode},</if>

View File

@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="subDeptId" column="sub_dept_id" />
<result property="subDeptType" column="sub_dept_type" />
<result property="subDeptName" column="sub_dept_name" />
<result property="subDeptPowerPath" column="sub_dept_power_path" />
<result property="userId" column="user_id" />
<result property="subDeptGroup" column="sub_dept_group" />
<result property="subDeptGroupName" column="sub_dept_group_name" />
@ -37,8 +38,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateTime" column="update_time" />
<result property="admitGuid" column="admitGuid"/>
<result property="remark" column="remark" />
<result property="degreeGrade" column="degree_grade" />
<association property="user" javaType="com.yanzhu.system.api.domain.SysUser" resultMap="ProSysUserResult"></association>
</resultMap>
<resultMap id="ProSysUserResult" type="com.yanzhu.system.api.domain.SysUser">
<result property="userName" column="user_name" />
<result property="nickName" column="nick_name" />
@ -61,19 +64,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="loginDate" column="login_date" />
</resultMap>
<sql id="selectProProjectInfoSubdeptsUsersVo">
SELECT pi.project_name, psu.id, psu.com_id, psu.project_id, psu.sub_dept_id, psu.sub_dept_type, psu.sub_dept_name, psu.user_id, psu.sub_dept_group,
SELECT pi.project_name, psu.id, psu.com_id, psu.project_id, psu.sub_dept_id, psu.sub_dept_type, psu.sub_dept_name, psu.sub_dept_power_path, psu.user_id, psu.sub_dept_group,
psu.sub_dept_group_name, psu.craft_type, psu.craft_post, psu.edu_status, psu.edu_file_path, psu.edu_sign_path, psu.edu_date, psu.approve_status,
psu.use_status, psu.sub_step, psu.illness_status, psu.sup_illness_status, psu.is_del, psu.create_by, psu.create_time, psu.update_by, psu.update_time,
psu.remark,su.`user_name`,su.`nick_name`,su.`user_type`,su.`card_type`,su.`card_code`,su.admitGuid,su.admitGuid usAdmitGuid,
psu.remark, psu.degree_grade, su.`user_name`,su.`nick_name`,su.`user_type`,su.`card_type`,su.`card_code`,su.admitGuid,su.admitGuid usAdmitGuid,
dic1.dict_label craft_type_name,dic2.dict_label craft_post_name,psu.enter_state,sd.dept_name comName,
su.`user_picture`, su.`card_img_inv`,su.`card_img_pos`,su.`user_infos`,su.`email`,su.`phonenumber`,su.`sex`,su.`avatar`,su.`login_ip`,su.`login_date`
FROM pro_project_info_subdepts_users psu
LEFT JOIN sys_user su ON psu.user_id=su.user_id
LEFT JOIN pro_project_info PI ON pi.id = psu.project_id
LEFT JOIN pro_project_info pi ON pi.id = psu.project_id
LEFT JOIN sys_dept sd ON sd.dept_id = pi.com_id
LEFT JOIN sys_dict_data dic1 ON psu.`craft_type`=dic1.`dict_value` AND dic1.`dict_type`='pro_craft_type'
LEFT JOIN sys_dict_data dic2 ON psu.`craft_post`=dic2.`dict_value` AND dic2.`dict_type`='pro_craft_post'
</sql>
<select id="selectProProjectInfoSubdeptsUsersList" parameterType="ProProjectInfoSubdeptsUsers" resultMap="ProProjectInfoSubdeptsUsersResult">
@ -100,16 +102,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="subStep != null "> and psu.sub_step = #{subStep}</if>
<if test="illnessStatus != null "> and psu.illness_status = #{illnessStatus}</if>
<if test="supIllnessStatus != null "> and psu.sup_illness_status = #{supIllnessStatus}</if>
<if test="phoneNumber != null and phoneNumber != ''"> and su.phonenumber = #{phoneNumber}</if>
<if test="degreeGrade != null and degreeGrade != ''"> and su.degree_grade = #{degreeGrade}</if>
<if test="isDel != null "> and psu.is_del = #{isDel}</if>
</where>
</select>
<select id="selectProProjectInfoSubdeptsUsersById" parameterType="Long" resultMap="ProProjectInfoSubdeptsUsersResult">
<include refid="selectProProjectInfoSubdeptsUsersVo"/>
where psu.id = #{id}
</select>
<select id="selectProProjectInfoSubdeptsUsersByParamId" resultMap="ProProjectInfoSubdeptsUsersResult">
<include refid="selectProProjectInfoSubdeptsUsersVo"/>
where psu.project_id = #{proId} and psu.user_id = #{userId}
</select>
<insert id="insertProProjectInfoSubdeptsUsers" parameterType="ProProjectInfoSubdeptsUsers" useGeneratedKeys="true" keyProperty="id">
insert into pro_project_info_subdepts_users
<trim prefix="(" suffix=")" suffixOverrides=",">
@ -118,6 +127,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="subDeptId != null">sub_dept_id,</if>
<if test="subDeptType != null">sub_dept_type,</if>
<if test="subDeptName != null">sub_dept_name,</if>
<if test="subDeptPowerPath != null">sub_dept_power_path,</if>
<if test="userId != null">user_id,</if>
<if test="subDeptGroup != null">sub_dept_group,</if>
<if test="subDeptGroupName != null">sub_dept_group_name,</if>
@ -139,6 +149,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="remark != null">remark,</if>
<if test="degreeGrade != null">degree_grade,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="comId != null">#{comId},</if>
@ -146,6 +157,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="subDeptId != null">#{subDeptId},</if>
<if test="subDeptType != null">#{subDeptType},</if>
<if test="subDeptName != null">#{subDeptName},</if>
<if test="subDeptPowerPath != null">#{subDeptPowerPath},</if>
<if test="userId != null">#{userId},</if>
<if test="subDeptGroup != null">#{subDeptGroup},</if>
<if test="subDeptGroupName != null">#{subDeptGroupName},</if>
@ -167,6 +179,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="remark != null">#{remark},</if>
<if test="degreeGrade != null">#{degreeGrade},</if>
</trim>
</insert>
@ -178,6 +191,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="subDeptId != null">sub_dept_id = #{subDeptId},</if>
<if test="subDeptType != null">sub_dept_type = #{subDeptType},</if>
<if test="subDeptName != null">sub_dept_name = #{subDeptName},</if>
<if test="subDeptPowerPath != null">sub_dept_power_path = #{subDeptPowerPath},</if>
<if test="userId != null">user_id = #{userId},</if>
<if test="subDeptGroup != null">sub_dept_group = #{subDeptGroup},</if>
<if test="subDeptGroupName != null">sub_dept_group_name = #{subDeptGroupName},</if>
@ -199,6 +213,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="degreeGrade != null">degree_grade = #{degreeGrade},</if>
</trim>
where id = #{id}
</update>

View File

@ -26,6 +26,8 @@ public class GatewayExceptionHandler implements ErrorWebExceptionHandler
@Override
public Mono<Void> handle(ServerWebExchange exchange, Throwable ex)
{
log.info("[网关处理]请求路径:{}",exchange.getRequest().getPath());
ServerHttpResponse response = exchange.getResponse();
if (exchange.getResponse().isCommitted())

View File

@ -46,6 +46,28 @@ public class SysFileController
}
}
/**
*
*/
@PostMapping("/NoSecurity/upload")
public R<SysFile> noSecurityUpload(MultipartFile file)
{
try
{
// 上传并返回访问地址
String url = sysFileService.uploadFile(file);
SysFile sysFile = new SysFile();
sysFile.setName(FileUtils.getName(url));
sysFile.setUrl(url);
return R.ok(sysFile);
}
catch (Exception e)
{
log.error("上传文件失败", e);
return R.fail(e.getMessage());
}
}
/**
*
*/

View File

@ -3,8 +3,12 @@ package com.yanzhu.file.utils;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Objects;
import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;
import com.yanzhu.common.core.utils.file.FileUtils;
import com.yanzhu.common.core.utils.file.ImageUtils;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;
@ -82,10 +86,35 @@ public class FileUploadUtils
String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath();
file.transferTo(Paths.get(absPath));
// 压缩图片
makeMiniImage(absPath);
return getPathFileName(fileName);
}
/**
* xx.min.jpg
* @param absPath
*/
private static void makeMiniImage(String absPath) {
try {
String ext = FileUtils.getFileExt(absPath).toLowerCase();
String exts = Arrays.toString(new String[]{"jpg", "jpeg", "png", "bmp"});
if (exts.contains(ext)) {
if (new File(absPath).exists()) {
int w = ImgUtil.read(FileUtil.file(absPath)).getWidth();
if(w>2000) {
ImgUtil.scale(FileUtil.file(absPath),
FileUtil.file(absPath), (float) (2000.0 / w));
}
ImgUtil.scale(FileUtil.file(absPath),
FileUtil.file(absPath + ".min.jpg"), (float) (300.0 / w));
}
}
}catch (Exception ex){
ex.printStackTrace();
}
}
/**
*
*/

View File

@ -126,4 +126,5 @@ public class ProProjectInfoController extends BaseController
List<ProProjectInfo> list = proProjectInfoService.selectProProjectInfoList(proProjectInfo);
return getDataTable(list);
}
}

View File

@ -0,0 +1,159 @@
package com.yanzhu.manage.controller.wechat;
import com.yanzhu.common.core.web.controller.BaseController;
import com.yanzhu.common.core.web.domain.AjaxResult;
import com.yanzhu.manage.domain.BusExamUser;
import com.yanzhu.manage.domain.ProProjectInfoSubdepts;
import com.yanzhu.manage.domain.SignetFileVo;
import com.yanzhu.manage.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Objects;
/**
* Controller
*
* @author JiangYuQi
* @date 2024-08-25
*/
@RestController
@RequestMapping("/wxApi")
public class WxController extends BaseController {
@Autowired
private IBusExamUserService busExamUserService;
@Autowired
private IBusTrainingVideoService busTrainingVideoService;
@Autowired
private IBusTrainingVideoUserService busTrainingVideoUserService;
@Autowired
private IProProjectInfoService proProjectInfoService;
@Autowired
private IProProjectInfoSubdeptsService proProjectInfoSubdeptsService;
@Autowired
private IProProjectInfoSubdeptsUsersService proProjectInfoSubdeptsUsersService;
/**
*
*/
@GetMapping("/findProject/{id}")
public AjaxResult findProject(@PathVariable("id") Long id)
{
return success(proProjectInfoService.selectProProjectInfoById(id));
}
/**
*
*/
@PostMapping("/registerSubDepts")
public AjaxResult registerSubDepts(@RequestBody ProProjectInfoSubdepts proProjectInfoSubdepts)
{
int res;
if(Objects.isNull(proProjectInfoSubdepts.getId())){
res = proProjectInfoSubdeptsService.insertProProjectInfoSubdepts(proProjectInfoSubdepts);
}else{
res = proProjectInfoSubdeptsService.updateProProjectInfoSubdepts(proProjectInfoSubdepts);
}
return toAjax(res);
}
/**
*
* @param proId
* @param phoneNumber
*/
@GetMapping("/findProSubDeptsInfo")
public AjaxResult findProSubDeptsInfo(Long proId, String phoneNumber)
{
return success(proProjectInfoSubdeptsService.findProSubDeptsInfo(proId,phoneNumber));
}
/**
*
* @param proId
* @param phoneNumber
*/
@GetMapping("/findProSubDeptsUser")
public AjaxResult findProSubDeptsUser(Long proId, String phoneNumber)
{
return success(proProjectInfoSubdeptsUsersService.findProSubDeptsUser(proId,phoneNumber));
}
/**
*
* @param proId
* @param phoneNumber
*/
@GetMapping("/findBusTrainingVideos")
public AjaxResult findBusTrainingVideos(Long proId, String phoneNumber)
{
return success(busTrainingVideoService.findBusTrainingVideos(proId,phoneNumber));
}
/**
*
*/
@GetMapping("/startPlayUserEduVideo/{id}")
public AjaxResult startPlayUserEduVideo(@PathVariable("id")Long id)
{
busTrainingVideoUserService.startPlayUserEduVideo(id);
return success();
}
/**
*
*/
@GetMapping("/endPlayUserEduVideo/{id}")
public AjaxResult endPlayUserEduVideo(@PathVariable("id")Long id)
{
busTrainingVideoUserService.endPlayUserEduVideo(id);
return success();
}
/**
*
*/
@GetMapping("/finishEduVideo/{id}")
public AjaxResult finishEduVideo(@PathVariable("id")Long id)
{
busTrainingVideoUserService.finishEduVideo(id);
return success();
}
/**
*
* @param proId
* @param phoneNumber
*/
@GetMapping("/findBusExamInfos")
public AjaxResult findBusExamInfos(Long proId, String phoneNumber)
{
return success(busExamUserService.insertBusExamUser(proId,phoneNumber));
}
/**
*
* @param busExamUser
*/
@PostMapping("/submitBusExamUser")
public AjaxResult submitBusExamUser(@RequestBody BusExamUser busExamUser)
{
return success(busExamUserService.submitBusExamUser(busExamUser));
}
/**
*
* @param signetFileVo
*/
@PostMapping("/submitUserSignets")
public AjaxResult submitUserSignets(@RequestBody SignetFileVo signetFileVo)
{
return success(proProjectInfoSubdeptsUsersService.submitUserSignets(signetFileVo));
}
}

View File

@ -0,0 +1,31 @@
package com.yanzhu.manage.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
*
*/
@ApiModel(description = "签署文件")
@Data
public class SignetFileVo {
@ApiModelProperty("项目主键")
@NotNull(message = "项目主键不能为空")
private Long proId;
@ApiModelProperty("联系电话")
@NotNull(message = "联系电话不能为空")
private String userPhone;
@ApiModelProperty("图片")
private String imgBase64;
@ApiModelProperty("图片地址")
@NotBlank(message = "图片地址不能为空")
private String imgPath;
}

View File

@ -0,0 +1,27 @@
package com.yanzhu.manage.domain;
import lombok.Data;
import java.util.List;
/**
*
*/
@Data
public class VideoMenuVo {
/**
*
*/
private String menuId;
/**
*
*/
private String menuName;
/**
*
*/
private List<BusTrainingVideo> busTrainingVideos;
}

View File

@ -0,0 +1,31 @@
package com.yanzhu.manage.enums;
/**
*
*/
public enum CraftTypeEnums {
PYGZ("1", "普通工种"),
TSGZ("2", "特殊工种"),
GLRY("3", "管理人员");
private final String code;
private final String info;
CraftTypeEnums(String code, String info)
{
this.code = code;
this.info = info;
}
public String getCode()
{
return code;
}
public String getInfo()
{
return info;
}
}

View File

@ -0,0 +1,38 @@
package com.yanzhu.manage.enums;
/**
*
*/
public enum SubDeptsEnums {
JSDW("1", "建设单位"),
JLDW("2", "监理单位"),
SGDW("3", "施工单位"),
ZYFB("4", "专业分包"),
LWFB("5", "劳务分包"),
CLFB("6", "材料分包"),
HQFB("7", "后勤分包"),
TSSB("8", "特殊设备"),
KTDW("9", "勘探单位"),
SJDW("10", "设计单位"),
QTDW("99", "其它单位");
private final String code;
private final String info;
SubDeptsEnums(String code, String info)
{
this.code = code;
this.info = info;
}
public String getCode()
{
return code;
}
public String getInfo()
{
return info;
}
}

View File

@ -0,0 +1,28 @@
package com.yanzhu.manage.enums;
/**
*
*/
public enum craftPostEnums {
WTDLR("22", "委托代理人");
private final String code;
private final String info;
craftPostEnums(String code, String info)
{
this.code = code;
this.info = info;
}
public String getCode()
{
return code;
}
public String getInfo()
{
return info;
}
}

View File

@ -1,8 +1,9 @@
package com.yanzhu.manage.service;
import java.util.List;
import com.yanzhu.manage.domain.BusExamUser;
import java.util.List;
/**
* Service
*
@ -34,6 +35,14 @@ public interface IBusExamUserService
*/
public BusExamUser insertBusExamUser();
/**
*
* @param proId
* @param phoneNumber
* @return
*/
public BusExamUser insertBusExamUser(Long proId, String phoneNumber);
/**
*
*
@ -57,4 +66,11 @@ public interface IBusExamUserService
* @return
*/
public int deleteBusExamUserById(Long id);
/**
*
* @param busExamUser
* @return
*/
public BusExamUser submitBusExamUser(BusExamUser busExamUser);
}

View File

@ -4,6 +4,7 @@ import java.util.List;
import java.util.Map;
import com.yanzhu.manage.domain.BusTrainingVideo;
import com.yanzhu.manage.domain.VideoMenuVo;
/**
* Service
@ -68,4 +69,13 @@ public interface IBusTrainingVideoService
* @return
*/
public int deleteBusTrainingVideoById(Long id);
/**
*
* @param proId
* @param phoneNumber
* @return
*/
public List<VideoMenuVo> findBusTrainingVideos(Long proId, String phoneNumber);
}

View File

@ -59,4 +59,22 @@ public interface IBusTrainingVideoUserService
* @return
*/
public int deleteBusTrainingVideoUserById(Long id);
/**
*
* @param id
*/
public void startPlayUserEduVideo(Long id);
/**
*
* @param id
*/
public void endPlayUserEduVideo(Long id);
/**
*
* @param id
*/
public int finishEduVideo(Long id);
}

View File

@ -1,6 +1,8 @@
package com.yanzhu.manage.service;
import java.util.List;
import java.util.Map;
import com.yanzhu.manage.domain.ProProjectInfoSubdepts;
/**
@ -66,4 +68,13 @@ public interface IProProjectInfoSubdeptsService
* @return
*/
public int deleteProProjectInfoSubdeptsById(Long id);
/**
*
* @param proId
* @param phoneNumber
* @return
*/
public ProProjectInfoSubdepts findProSubDeptsInfo(Long proId, String phoneNumber);
}

View File

@ -1,7 +1,10 @@
package com.yanzhu.manage.service;
import java.util.List;
import java.util.Map;
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
import com.yanzhu.manage.domain.SignetFileVo;
/**
* Service
@ -59,5 +62,17 @@ public interface IProProjectInfoSubdeptsUsersService
*/
public int deleteProProjectInfoSubdeptsUsersById(Long id);
/**
*
* @param proId
* @param phoneNumber
* @return
*/
public ProProjectInfoSubdeptsUsers findProSubDeptsUser(Long proId, String phoneNumber);
/**
*
* @param signetFileVo
*/
public void submitUserSignets(SignetFileVo signetFileVo);
}

View File

@ -4,9 +4,7 @@ import java.util.*;
import java.util.stream.Collectors;
import com.alibaba.fastjson2.JSON;
import com.yanzhu.common.core.enums.CraftType;
import com.yanzhu.common.core.enums.IsDelEnums;
import com.yanzhu.common.core.enums.UseStateEnums;
import com.yanzhu.common.core.enums.*;
import com.yanzhu.common.core.exception.ServiceException;
import com.yanzhu.common.core.text.Convert;
import com.yanzhu.common.core.utils.DateUtils;
@ -146,6 +144,111 @@ public class BusExamUserServiceImpl implements IBusExamUserService
entity.setQuestionType(examQuestion.getQuestionType());
entity.setQuestionOption(JSON.toJSONString(question.getBusExamQuestionResultList()));
entity.setAnswer(question.getQuestionAnswer());
// 根据问题类型设置问题分数
if(examQuestion.getQuestionType()==1L){
entity.setMark(findExamInfo.getSingleMark());
}else if(examQuestion.getQuestionType()==2L){
entity.setMark(findExamInfo.getMultipleMark());
}else if(examQuestion.getQuestionType()==3L){
entity.setMark(findExamInfo.getEstimateMark());
}
busExamUserResultList.add(entity);
}
busExamUser.setBusExamUserResultList(busExamUserResultList);
busExamUserMapper.batchBusExamUserResult(busExamUserResultList);
// 修改试卷使用次数
busExamInfoMapper.updateExamUseNumber(findExamInfo.getId());
}else{
throw new ServiceException("当前项目未配置试卷信息,请联系管理员配置...");
}
return busExamUser;
}
/**
*
* @param proId
* @param phoneNumber
* @return
*/
@Override
@Transactional
public BusExamUser insertBusExamUser(Long proId, String phoneNumber){
BusExamUser busExamUser = new BusExamUser();
ProProjectInfoSubdeptsUsers query = new ProProjectInfoSubdeptsUsers();
query.setProjectId(proId);
query.setPhoneNumber(phoneNumber);
List<ProProjectInfoSubdeptsUsers> userList = proProjectInfoSubdeptsUsersMapper.selectProProjectInfoSubdeptsUsersList(query);
if(StringUtils.isEmpty(userList)){
throw new ServiceException("用户信息异常...不能抽取试题...");
}
ProProjectInfoSubdeptsUsers userEntity = userList.get(0);
// 查询试卷列表
BusExamInfo examQuery = new BusExamInfo();
examQuery.setProjectId(userEntity.getProjectId());
examQuery.setCraftType(userEntity.getCraftType());
// 管理人员获取所有管理类试卷
if(!Objects.equals(CraftType.GLRY.getCode(),examQuery.getCraftType())){
examQuery.setCraftPost(userEntity.getCraftPost());
}
examQuery.setIsDel(IsDelEnums.NO.getCode());
List<BusExamInfo> examInfoList = busExamInfoMapper.selectBusExamInfoList(examQuery);
if(StringUtils.isNotEmpty(examInfoList)){
// 优先从项目试卷中获取试卷、未找到项目试卷则从所有试卷中筛选
List<BusExamInfo> _projectExamInfolist = examInfoList.stream().filter(examInfo -> examInfo.getProjectId() != null)
.collect(Collectors.toList());
Random random = new Random();
BusExamInfo findExamInfo;
if(StringUtils.isNotEmpty(_projectExamInfolist)){
int randomIntBound = random.nextInt(_projectExamInfolist.size());
findExamInfo = _projectExamInfolist.get(randomIntBound);
}else{
int randomIntBound = random.nextInt(examInfoList.size());
findExamInfo = examInfoList.get(randomIntBound);
}
// 获取试卷试题
List<BusExamQuestion> questions = extractExamQuestion(findExamInfo,Objects.equals(CraftType.GLRY.getCode(),examQuery.getCraftType())?null:userEntity.getCraftPost());
// 试题重新排序
Collections.shuffle(questions);
busExamUser.setComId(userEntity.getComId());
busExamUser.setProjectId(userEntity.getProjectId());
busExamUser.setUserId(userEntity.getUserId());
busExamUser.setExamTitle(findExamInfo.getExamTitle());
busExamUser.setExamType(findExamInfo.getExamType());
busExamUser.setCraftType(userEntity.getCraftType());
busExamUser.setCraftPost(userEntity.getCraftPost());
busExamUser.setSingleNum(findExamInfo.getSingleNum());
busExamUser.setMultipleNum(findExamInfo.getMultipleNum());
busExamUser.setEstimateNum(findExamInfo.getEstimateNum());
busExamUser.setCreateBy(DataSourceEnuns.APP.getInfo());
busExamUser.setCreateTime(DateUtils.getNowDate());
busExamUser.setFullMark(findExamInfo.getFullMark());
busExamUser.setPassMark(findExamInfo.getPassMark());
busExamUser.setUseTimes(DateUtils.getTime());
busExamUserMapper.insertBusExamUser(busExamUser);
List<BusExamUserResult> busExamUserResultList = new ArrayList<>();
for(BusExamQuestion examQuestion:questions){
BusExamQuestion question = busExamQuestionMapper.selectBusExamQuestionById(examQuestion.getId());
BusExamUserResult entity = new BusExamUserResult();
entity.setExamUserId(busExamUser.getId());
entity.setQuestionId(examQuestion.getId());
entity.setQuestionTitle(examQuestion.getQuestionDesc());
entity.setQuestionType(examQuestion.getQuestionType());
entity.setQuestionOption(JSON.toJSONString(question.getBusExamQuestionResultList()));
entity.setAnswer(question.getQuestionAnswer());
// 根据问题类型设置问题分数
if(examQuestion.getQuestionType()==1L){
entity.setMark(findExamInfo.getSingleMark());
}else if(examQuestion.getQuestionType()==2L){
entity.setMark(findExamInfo.getMultipleMark());
}else if(examQuestion.getQuestionType()==3L){
entity.setMark(findExamInfo.getEstimateMark());
}
busExamUserResultList.add(entity);
}
busExamUser.setBusExamUserResultList(busExamUserResultList);
@ -167,9 +270,10 @@ public class BusExamUserServiceImpl implements IBusExamUserService
*/
private List<BusExamQuestion> extractExamQuestion(BusExamInfo findExamInfo,String craftPost){
BusExamQuestion questionQuery = new BusExamQuestion();
questionQuery.setActiveComId(findExamInfo.getComId());
questionQuery.setActiveProjectId(findExamInfo.getProjectId());
questionQuery.setCraftPost(craftPost);
if(Objects.nonNull(craftPost)){
questionQuery.setCraftPost(craftPost);
}
questionQuery.setIsDel(IsDelEnums.NO.getCode());
List<BusExamQuestion> list = new ArrayList<>();
List<BusExamQuestion> allQuestionList = busExamQuestionMapper.selectBusExamQuestionList(questionQuery);
@ -294,4 +398,56 @@ public class BusExamUserServiceImpl implements IBusExamUserService
}
}
}
/**
*
* @param busExamUser
* @return
*/
@Override
public BusExamUser submitBusExamUser(BusExamUser busExamUser){
ProProjectInfoSubdeptsUsers query = new ProProjectInfoSubdeptsUsers();
query.setProjectId(busExamUser.getProjectId());
query.setUserId(busExamUser.getUserId());
List<ProProjectInfoSubdeptsUsers> userList = proProjectInfoSubdeptsUsersMapper.selectProProjectInfoSubdeptsUsersList(query);
if(StringUtils.isEmpty(userList)){
throw new ServiceException("用户信息异常...不能提交试卷...");
}
Long mark = Long.valueOf(0);
List<BusExamUserResult> list = busExamUserMapper.selectBusExamUserResultByExamUserId(busExamUser.getId());
if(StringUtils.isNotEmpty(list)){
for(BusExamUserResult result:list){
for(BusExamUserResult _pageResult:busExamUser.getBusExamUserResultList()){
if(Objects.equals(result.getQuestionId(),_pageResult.getQuestionId())){
result.setUserAnswer(_pageResult.getUserAnswer());
if(Objects.equals(result.getAnswer(),result.getUserAnswer())){
mark += Convert.toInt(result.getMark());
result.setUseRes(ShiFouEnums.SHI.getCodeStr());
result.setUseMark(result.getMark());
}else{
result.setUseRes(ShiFouEnums.FOU.getCodeStr());
// 错误则设置为0分
result.setUseMark("0");
}
busExamUserMapper.updateBusExamUserResult(result);
}
}
}
}
busExamUser.setUserMark(mark);
if(busExamUser.getPassMark()>mark){
busExamUser.setResStatus(ShiFouEnums.FOU.getCode());
}else{
busExamUser.setResStatus(ShiFouEnums.SHI.getCode());
//通过后修改用户状态
ProProjectInfoSubdeptsUsers proSubdeptsUsers = userList.get(0);
if(Objects.isNull(proSubdeptsUsers.getSubStep()) || proSubdeptsUsers.getSubStep()<3){
proSubdeptsUsers.setSubStep(3L);
}
proProjectInfoSubdeptsUsersMapper.updateProProjectInfoSubdeptsUsers(proSubdeptsUsers);
}
busExamUser.setUpdateTime(DateUtils.getNowDate());
busExamUserMapper.updateBusExamUser(busExamUser);
return busExamUser;
}
}

View File

@ -1,11 +1,24 @@
package com.yanzhu.manage.service.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import com.yanzhu.common.core.context.SecurityContextHolder;
import com.yanzhu.common.core.enums.DataSourceEnuns;
import com.yanzhu.common.core.enums.ShiFouEnums;
import com.yanzhu.common.core.exception.ServiceException;
import com.yanzhu.common.core.text.Convert;
import com.yanzhu.common.core.utils.DateUtils;
import com.yanzhu.common.core.utils.StringUtils;
import com.yanzhu.common.security.utils.SecurityUtils;
import com.yanzhu.manage.domain.BusTrainingVideoUser;
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
import com.yanzhu.manage.domain.VideoMenuVo;
import com.yanzhu.manage.mapper.BusTrainingVideoUserMapper;
import com.yanzhu.manage.mapper.ProProjectInfoSubdeptsUsersMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yanzhu.manage.mapper.BusTrainingVideoMapper;
@ -24,6 +37,12 @@ public class BusTrainingVideoServiceImpl implements IBusTrainingVideoService
@Autowired
private BusTrainingVideoMapper busTrainingVideoMapper;
@Autowired
private BusTrainingVideoUserMapper busTrainingVideoUserMapper;
@Autowired
private ProProjectInfoSubdeptsUsersMapper proProjectInfoSubdeptsUsersMapper;
/**
*
*
@ -114,4 +133,62 @@ public class BusTrainingVideoServiceImpl implements IBusTrainingVideoService
{
return busTrainingVideoMapper.deleteBusTrainingVideoById(id);
}
/**
*
* @param proId
* @param phoneNumber
* @return
*/
@Override
public List<VideoMenuVo> findBusTrainingVideos(Long proId, String phoneNumber){
List<VideoMenuVo> menuVos = new ArrayList<>();
ProProjectInfoSubdeptsUsers query = new ProProjectInfoSubdeptsUsers();
query.setProjectId(proId);
query.setPhoneNumber(phoneNumber);
List<ProProjectInfoSubdeptsUsers> userList = proProjectInfoSubdeptsUsersMapper.selectProProjectInfoSubdeptsUsersList(query);
if(StringUtils.isEmpty(userList)){
throw new ServiceException("用户信息异常...");
}
BusTrainingVideo busVideoQuery = new BusTrainingVideo();
busVideoQuery.setComId(userList.get(0).getComId());
busVideoQuery.setProjectId(userList.get(0).getProjectId());
busVideoQuery.setCraftType(userList.get(0).getCraftType());
busVideoQuery.setCraftPost(userList.get(0).getCraftPost());
busVideoQuery.setIsDel(ShiFouEnums.FOU.getCode());
List<BusTrainingVideo> dataList = busTrainingVideoMapper.selectBusTrainingVideoList(busVideoQuery);
// 新增用户培训视频
if(StringUtils.isNotEmpty(dataList)){
Long sortBy = 0L;
//List<BusTrainingVideoUser> busTrainingVideoUserList = new ArrayList<>();
for(BusTrainingVideo video:dataList){
BusTrainingVideoUser entity = new BusTrainingVideoUser();
entity.setComId(userList.get(0).getComId());
entity.setProjectId(userList.get(0).getProjectId());
entity.setUserId(userList.get(0).getUserId());
entity.setVideoId(video.getId());
entity.setSortBy(sortBy++);
entity.setCreateBy(DataSourceEnuns.APP.getInfo());
entity.setCreateTime(DateUtils.getNowDate());
busTrainingVideoUserMapper.insertBusTrainingVideoUser(entity);
video.setRemark(Convert.toStr(entity.getId()));
//busTrainingVideoUserList.add(entity);
}
//busTrainingVideoUserMapper.batchBusTrainingVideoUser(busTrainingVideoUserList);
}
List<Map<String, Object>> menuList = busTrainingVideoMapper.selectBusTrainingVideoListGroup(busVideoQuery);
if(StringUtils.isNotEmpty(menuList) && StringUtils.isNotEmpty(dataList)){
for(Map<String, Object> menu:menuList){
if(Convert.toInt(menu.get("total"))>0){
VideoMenuVo menuVo = new VideoMenuVo();
menuVo.setMenuId(Convert.toStr(menu.get("lvId")));
menuVo.setMenuName(Convert.toStr(menu.get("lvName")));
List<BusTrainingVideo> _dataList = dataList.stream().filter(column -> Objects.equals(menuVo.getMenuId(),column.getTrainLevel())).collect(Collectors.toList());
menuVo.setBusTrainingVideos(_dataList);
menuVos.add(menuVo);
}
}
}
return menuVos;
}
}

View File

@ -1,15 +1,24 @@
package com.yanzhu.manage.service.impl;
import com.yanzhu.common.core.context.SecurityContextHolder;
import com.yanzhu.common.core.enums.ShiFouEnums;
import com.yanzhu.common.core.exception.ServiceException;
import com.yanzhu.common.core.text.Convert;
import com.yanzhu.common.core.utils.DateUtils;
import com.yanzhu.common.core.utils.StringUtils;
import com.yanzhu.common.security.utils.SecurityUtils;
import com.yanzhu.manage.domain.BusTrainingVideoUser;
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
import com.yanzhu.manage.mapper.BusTrainingVideoUserMapper;
import com.yanzhu.manage.mapper.ProProjectInfoSubdeptsUsersMapper;
import com.yanzhu.manage.service.IBusTrainingVideoUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.Duration;
import java.util.List;
import java.util.Objects;
/**
* Service
@ -23,6 +32,9 @@ public class BusTrainingVideoUserServiceImpl implements IBusTrainingVideoUserSer
@Autowired
private BusTrainingVideoUserMapper busTrainingVideoUserMapper;
@Autowired
private ProProjectInfoSubdeptsUsersMapper proProjectInfoSubdeptsUsersMapper;
/**
*
*
@ -100,4 +112,84 @@ public class BusTrainingVideoUserServiceImpl implements IBusTrainingVideoUserSer
{
return busTrainingVideoUserMapper.deleteBusTrainingVideoUserById(id);
}
/**
*
* @param id
*/
@Override
@Transactional
public void startPlayUserEduVideo(Long id){
BusTrainingVideoUser entity = busTrainingVideoUserMapper.selectBusTrainingVideoUserById(id);
if(Objects.isNull(entity.getPlayDates())){
entity.setPlayDates(DateUtils.getNowDate());
busTrainingVideoUserMapper.updateBusTrainingVideoUser(entity);
}
}
/**
*
* @param id
*/
@Override
@Transactional
public void endPlayUserEduVideo(Long id){
BusTrainingVideoUser entity = busTrainingVideoUserMapper.selectBusTrainingVideoUserById(id);
try{
long stimes = entity.getPlayDates().getTime();
long etimes = DateUtils.getNowDate().getTime();
if(Objects.nonNull(entity.getPlayTimes())){
long time = (etimes-stimes)/2;
entity.setPlayTimes(Convert.toStr(time+Convert.toLong(entity.getPlayTimes())));
}else{
entity.setPlayTimes(Convert.toStr(etimes-stimes));
}
entity.setPlayStatus(ShiFouEnums.SHI.getCode());
busTrainingVideoUserMapper.updateBusTrainingVideoUser(entity);
}catch (Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
long sd = 3L;
System.out.println(sd/2);
}
/**
*
* @param id
*/
@Override
@Transactional
public int finishEduVideo(Long id){
BusTrainingVideoUser entity = busTrainingVideoUserMapper.selectBusTrainingVideoUserById(id);
try{
long stimes = entity.getPlayDates().getTime();
long etimes = DateUtils.getNowDate().getTime();
if(Objects.nonNull(entity.getPlayTimes())){
long time = (etimes-stimes)/2;
entity.setPlayTimes(Convert.toStr(time+Convert.toLong(entity.getPlayTimes())));
}else{
entity.setPlayTimes(Convert.toStr(etimes-stimes));
}
entity.setPlayStatus(ShiFouEnums.SHI.getCode());
busTrainingVideoUserMapper.updateBusTrainingVideoUser(entity);
}catch (Exception e){
e.printStackTrace();
}
ProProjectInfoSubdeptsUsers query = new ProProjectInfoSubdeptsUsers();
query.setProjectId(entity.getProjectId());
query.setUserId(entity.getUserId());
List<ProProjectInfoSubdeptsUsers> dataList = proProjectInfoSubdeptsUsersMapper.selectProProjectInfoSubdeptsUsersList(query);
if(StringUtils.isNotEmpty(dataList)){
ProProjectInfoSubdeptsUsers projectInfoSubdeptsUsers = dataList.get(0);
if(Objects.isNull(projectInfoSubdeptsUsers.getSubStep()) || projectInfoSubdeptsUsers.getSubStep()<2){
projectInfoSubdeptsUsers.setSubStep(2L);
}
return proProjectInfoSubdeptsUsersMapper.updateProProjectInfoSubdeptsUsers(projectInfoSubdeptsUsers);
}else{
throw new ServiceException("查询用户信息异常");
}
}
}

View File

@ -1,5 +1,6 @@
package com.yanzhu.manage.service.impl;
import cn.binarywang.wx.miniapp.api.WxMaService;
import com.yanzhu.common.core.constant.CacheConstants;
import com.yanzhu.common.core.constant.SecurityConstants;
import com.yanzhu.common.core.context.SecurityContextHolder;
@ -9,6 +10,7 @@ import com.yanzhu.common.core.utils.DateUtils;
import com.yanzhu.common.core.utils.StringUtils;
import com.yanzhu.common.redis.service.RedisService;
import com.yanzhu.common.security.utils.SecurityUtils;
import com.yanzhu.manage.config.ProfileConfig;
import com.yanzhu.manage.domain.ProDept;
import com.yanzhu.manage.domain.ProProjectInfo;
import com.yanzhu.manage.domain.ProProjectInfoDepts;
@ -17,12 +19,16 @@ import com.yanzhu.manage.mapper.ProProjectInfoDeptsMapper;
import com.yanzhu.manage.mapper.ProProjectInfoMapper;
import com.yanzhu.manage.mapper.ProProjectInfoSettingMapper;
import com.yanzhu.manage.service.IProProjectInfoService;
import com.yanzhu.manage.utils.WxQrCodeUtils;
import com.yanzhu.system.api.RemoteDeptService;
import com.yanzhu.system.api.domain.SysDept;
import com.yanzhu.system.api.domain.SysUser;
import me.chanjar.weixin.mp.api.WxMpService;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -38,9 +44,15 @@ import java.util.List;
@Service
public class ProProjectInfoServiceImpl implements IProProjectInfoService
{
@Autowired
private WxMaService wxMaService;
@Autowired
private RedisService redisService;
@Autowired
private ProfileConfig profileConfig;
@Autowired
private ProProjectInfoDeptsMapper deptsMapper;
@ -53,6 +65,8 @@ public class ProProjectInfoServiceImpl implements IProProjectInfoService
@Autowired
private RemoteDeptService remoteDeptService;
private static final Logger log = LoggerFactory.getLogger(ProProjectInfoServiceImpl.class);
/**
*
*/
@ -127,6 +141,16 @@ public class ProProjectInfoServiceImpl implements IProProjectInfoService
proDept.setLeader(proProjectInfo.getProjectPerson());
proDept.setPhone(proProjectInfo.getProjectPersonPhone());
proDept.setCreateBy(SecurityUtils.getUsername());
try {
String accessToken = wxMaService.getAccessToken();
String imgPath = profileConfig.getPath()+"/"+System.currentTimeMillis()+".png";
log.info("accessToken...{}",accessToken);
WxQrCodeUtils.generateQrCode(imgPath, "pages/index/index", "aa=108&bb=2&cc=3", accessToken);
// TODO:生成二维码
proProjectInfo.setProjectQrCode(imgPath);
}catch (Exception e){
log.error(e.getMessage());
}
int res = proProjectInfoMapper.insertDept(proDept);
if(res>0){
proProjectInfo.setId(proDept.getDeptId());
@ -150,6 +174,17 @@ public class ProProjectInfoServiceImpl implements IProProjectInfoService
@Override
public int updateProProjectInfo(ProProjectInfo proProjectInfo)
{
try {
String accessToken = wxMaService.getAccessToken();
String imgPath = profileConfig.getPath()+"/"+System.currentTimeMillis()+".png";
log.info("accessToken...{}",accessToken);
String scene = "QRPID="+proProjectInfo.getId()+"&signType=1";
WxQrCodeUtils.generateQrCode(imgPath, "pages/project_qr/index", scene, accessToken);
// TODO:生成二维码
proProjectInfo.setProjectQrCode(imgPath);
}catch (Exception e){
log.error(e.getMessage());
}
proProjectInfo.setUpdateTime(DateUtils.getNowDate());
proProjectInfo.setUpdateBy(SecurityContextHolder.getUserName());
List<ProProjectInfoDepts> depts = proProjectInfo.getProjectDeptsList();

View File

@ -3,8 +3,8 @@ package com.yanzhu.manage.service.impl;
import com.yanzhu.common.core.constant.CacheConstants;
import com.yanzhu.common.core.constant.SecurityConstants;
import com.yanzhu.common.core.domain.R;
import com.yanzhu.common.core.enums.CardTypeEnums;
import com.yanzhu.common.core.enums.UserTypeEnums;
import com.yanzhu.common.core.enums.*;
import com.yanzhu.common.core.exception.ServiceException;
import com.yanzhu.common.core.utils.DateUtils;
import com.yanzhu.common.core.utils.StringUtils;
import com.yanzhu.common.redis.service.RedisService;
@ -12,9 +12,13 @@ import com.yanzhu.common.security.utils.SecurityUtils;
import com.yanzhu.manage.config.ProfileConfig;
import com.yanzhu.manage.domain.ProProjectInfo;
import com.yanzhu.manage.domain.ProProjectInfoSubdepts;
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
import com.yanzhu.manage.enums.CraftTypeEnums;
import com.yanzhu.manage.enums.SubDeptsEnums;
import com.yanzhu.manage.enums.craftPostEnums;
import com.yanzhu.manage.mapper.ProProjectInfoSubdeptsMapper;
import com.yanzhu.manage.mapper.ProProjectInfoSubdeptsUsersMapper;
import com.yanzhu.manage.service.IProProjectInfoSubdeptsService;
import com.yanzhu.manage.utils.WxQrCodeUtils;
import com.yanzhu.system.api.RemoteUserService;
import com.yanzhu.system.api.domain.SysUser;
import me.chanjar.weixin.mp.api.WxMpService;
@ -51,6 +55,9 @@ public class ProProjectInfoSubdeptsServiceImpl implements IProProjectInfoSubdept
@Autowired
private ProProjectInfoSubdeptsMapper proProjectInfoSubdeptsMapper;
@Autowired
private ProProjectInfoSubdeptsUsersMapper proProjectInfoSubdeptsUsersMapper;
private static final Logger log = LoggerFactory.getLogger(ProProjectInfoSubdeptsServiceImpl.class);
/**
@ -90,31 +97,29 @@ public class ProProjectInfoSubdeptsServiceImpl implements IProProjectInfoSubdept
public int insertProProjectInfoSubdepts(ProProjectInfoSubdepts proProjectInfoSubdepts)
{
ProProjectInfo info = redisService.getCacheObject(CacheConstants.PRO_PROJECT+proProjectInfoSubdepts.getProjectId());
if(Objects.isNull(info)){
throw new ServiceException("项目信息异常...");
}
proProjectInfoSubdepts.setComId(info.getComId());
if(Objects.equals(proProjectInfoSubdepts.getSubDeptType(),"4") || Objects.equals(proProjectInfoSubdepts.getSubDeptType(),"4")){
try {
String accessToken = wxMpService.getAccessToken();
String imgPath = profileConfig.getPath()+"/"+System.currentTimeMillis()+".png";
log.info("accessToken...{}",accessToken);
WxQrCodeUtils.generateQrCode(imgPath, "pages/index/index", "aa=108&bb=2&cc=3", accessToken);
// TODO:生成二维码
//proProjectInfoSubdepts.setQrCode();
}catch (Exception e){
log.error(e.getMessage());
}
if(Objects.equals(proProjectInfoSubdepts.getSubDeptType(), SubDeptsEnums.ZYFB.getCode()) || Objects.equals(proProjectInfoSubdepts.getSubDeptType(),SubDeptsEnums.LWFB.getCode())){
// 单位委托人信息
if(StringUtils.isNotEmpty(proProjectInfoSubdepts.getSubDeptLeaderName()) && StringUtils.isNotEmpty(proProjectInfoSubdepts.getSubDeptLeaderCode()) && StringUtils.isNotEmpty(proProjectInfoSubdepts.getSubDeptLeaderPhone())){
SysUser sysUser = new SysUser();
sysUser.setUserName(proProjectInfoSubdepts.getSubDeptLeaderPhone());
sysUser.setNickName(proProjectInfoSubdepts.getSubDeptLeaderName());
sysUser.setUserType(UserTypeEnums.FBDL.getCode());
sysUser.setPhonenumber(proProjectInfoSubdepts.getSubDeptLeaderPhone());
sysUser.setCardType(CardTypeEnums.SFZ.getCode());
sysUser.setCardCode(proProjectInfoSubdepts.getSubDeptLeaderCode());
sysUser.setUserPicture(proProjectInfoSubdepts.getLeaderUserPicture());
sysUser.setCardImgPos(proProjectInfoSubdepts.getLeaderCardImgPos());
sysUser.setCardImgInv(proProjectInfoSubdepts.getLeaderCardImgInv());
sysUser.setSex(StringUtils.judgeGender(proProjectInfoSubdepts.getSubDeptLeaderCode()));
sysUser.setCreateBy(SecurityUtils.getUsername());
if(Objects.equals(DataSourceEnuns.WEB.getCode(),proProjectInfoSubdepts.getDataSource())){
sysUser.setCreateBy(SecurityUtils.getUsername());
}else{
sysUser.setCreateBy(DataSourceEnuns.APP.getInfo());
}
sysUser.setCreateTime(DateUtils.getNowDate());
sysUser.setRemark(proProjectInfoSubdepts.getSubDeptName());
try {
@ -122,14 +127,49 @@ public class ProProjectInfoSubdeptsServiceImpl implements IProProjectInfoSubdept
proProjectInfoSubdepts.setSubDeptLeaderId(userResult.getData());
}catch (Exception e){
// 已注册账号!!忽略异常...
e.printStackTrace();
}
// TODO:实名制接入
}
}
proProjectInfoSubdepts.setCreateBy(SecurityUtils.getUsername());
if(Objects.equals(DataSourceEnuns.WEB.getCode(),proProjectInfoSubdepts.getDataSource())){
proProjectInfoSubdepts.setCreateBy(SecurityUtils.getUsername());
proProjectInfoSubdepts.setApproveStatus(ApproveStatus.passed.getCode());
}else{
proProjectInfoSubdepts.setCreateBy(DataSourceEnuns.APP.getInfo());
proProjectInfoSubdepts.setApproveStatus(ApproveStatus.await.getCode());
}
proProjectInfoSubdepts.setCreateTime(DateUtils.getNowDate());
return proProjectInfoSubdeptsMapper.insertProProjectInfoSubdepts(proProjectInfoSubdepts);
int res = proProjectInfoSubdeptsMapper.insertProProjectInfoSubdepts(proProjectInfoSubdepts);
// 将人员信息同步至单位人员表
if(res>0 && (Objects.equals(proProjectInfoSubdepts.getSubDeptType(), SubDeptsEnums.ZYFB.getCode()) || Objects.equals(proProjectInfoSubdepts.getSubDeptType(),SubDeptsEnums.LWFB.getCode()))){
// 保存单位人员信息
ProProjectInfoSubdeptsUsers subdeptsUser = new ProProjectInfoSubdeptsUsers();
subdeptsUser.setComId(info.getComId());
subdeptsUser.setProjectId(info.getId());
subdeptsUser.setSubDeptId(proProjectInfoSubdepts.getId());
subdeptsUser.setSubDeptName(proProjectInfoSubdepts.getSubDeptName());
subdeptsUser.setSubDeptType(proProjectInfoSubdepts.getSubDeptType());
subdeptsUser.setSubDeptPowerPath(proProjectInfoSubdepts.getSubDeptLeaderPowerPath());
subdeptsUser.setUserId(proProjectInfoSubdepts.getSubDeptLeaderId());
subdeptsUser.setCraftType(CraftTypeEnums.GLRY.getCode());
subdeptsUser.setCraftPost(craftPostEnums.WTDLR.getCode());
subdeptsUser.setDegreeGrade("");
subdeptsUser.setEduStatus(ShiFouEnums.FOU.getCodeStr());
subdeptsUser.setApproveStatus(ApproveStatus.await.getCode());
if(Objects.isNull(subdeptsUser.getSubStep()) || subdeptsUser.getSubStep()<1){
subdeptsUser.setSubStep(1L);
}
if(Objects.equals(DataSourceEnuns.WEB.getCode(),proProjectInfoSubdepts.getDataSource())){
subdeptsUser.setCreateBy(SecurityUtils.getUsername());
subdeptsUser.setApproveStatus(ApproveStatus.passed.getCode());
}else{
subdeptsUser.setCreateBy(DataSourceEnuns.APP.getInfo());
subdeptsUser.setApproveStatus(ApproveStatus.await.getCode());
}
subdeptsUser.setCreateTime(DateUtils.getNowDate());
proProjectInfoSubdeptsUsersMapper.insertProProjectInfoSubdeptsUsers(subdeptsUser);
}
return res;
}
/**
@ -142,39 +182,84 @@ public class ProProjectInfoSubdeptsServiceImpl implements IProProjectInfoSubdept
@Transactional
public int updateProProjectInfoSubdepts(ProProjectInfoSubdepts proProjectInfoSubdepts)
{
if(Objects.equals(proProjectInfoSubdepts.getSubDeptType(),"4") || Objects.equals(proProjectInfoSubdepts.getSubDeptType(),"4")){
if(StringUtils.isEmpty(proProjectInfoSubdepts.getQrCode())){
// TODO:生成二维码
// 单位委托人信息
if(StringUtils.isNotEmpty(proProjectInfoSubdepts.getSubDeptLeaderName()) && StringUtils.isNotEmpty(proProjectInfoSubdepts.getSubDeptLeaderCode()) && StringUtils.isNotEmpty(proProjectInfoSubdepts.getSubDeptLeaderPhone())){
SysUser sysUser = new SysUser();
sysUser.setUserName(proProjectInfoSubdepts.getSubDeptLeaderPhone());
sysUser.setNickName(proProjectInfoSubdepts.getSubDeptLeaderName());
sysUser.setUserType(UserTypeEnums.FBDL.getCode());
sysUser.setCardType(CardTypeEnums.SFZ.getCode());
sysUser.setCardCode(proProjectInfoSubdepts.getSubDeptLeaderCode());
sysUser.setUserPicture(proProjectInfoSubdepts.getLeaderUserPicture());
sysUser.setCardImgPos(proProjectInfoSubdepts.getLeaderCardImgPos());
sysUser.setCardImgInv(proProjectInfoSubdepts.getLeaderCardImgInv());
sysUser.setSex(StringUtils.judgeGender(proProjectInfoSubdepts.getSubDeptLeaderCode()));
sysUser.setCreateBy(SecurityUtils.getUsername());
sysUser.setCreateTime(DateUtils.getNowDate());
sysUser.setRemark(proProjectInfoSubdepts.getSubDeptName());
try {
R<Long> userResult = remoteUserService.registerUserInfo(sysUser, SecurityConstants.INNER);
proProjectInfoSubdepts.setSubDeptLeaderId(userResult.getData());
}catch (Exception e){
// 已注册账号!!忽略异常...
}
// TODO:实名制接入
ProProjectInfo info = redisService.getCacheObject(CacheConstants.PRO_PROJECT+proProjectInfoSubdepts.getProjectId());
if(Objects.isNull(info)){
throw new ServiceException("项目信息异常...");
}
if(Objects.equals(proProjectInfoSubdepts.getSubDeptType(), SubDeptsEnums.ZYFB.getCode()) || Objects.equals(proProjectInfoSubdepts.getSubDeptType(), SubDeptsEnums.LWFB.getCode())){
// 单位委托人信息
if(StringUtils.isNotEmpty(proProjectInfoSubdepts.getSubDeptLeaderName()) && StringUtils.isNotEmpty(proProjectInfoSubdepts.getSubDeptLeaderCode()) && StringUtils.isNotEmpty(proProjectInfoSubdepts.getSubDeptLeaderPhone())){
SysUser sysUser = new SysUser();
sysUser.setUserName(proProjectInfoSubdepts.getSubDeptLeaderPhone());
sysUser.setNickName(proProjectInfoSubdepts.getSubDeptLeaderName());
sysUser.setPhonenumber(proProjectInfoSubdepts.getSubDeptLeaderPhone());
sysUser.setUserType(UserTypeEnums.FBDL.getCode());
sysUser.setCardType(CardTypeEnums.SFZ.getCode());
sysUser.setCardCode(proProjectInfoSubdepts.getSubDeptLeaderCode());
sysUser.setUserPicture(proProjectInfoSubdepts.getLeaderUserPicture());
sysUser.setCardImgPos(proProjectInfoSubdepts.getLeaderCardImgPos());
sysUser.setCardImgInv(proProjectInfoSubdepts.getLeaderCardImgInv());
sysUser.setSex(StringUtils.judgeGender(proProjectInfoSubdepts.getSubDeptLeaderCode()));
if(Objects.equals(DataSourceEnuns.WEB.getCode(),proProjectInfoSubdepts.getDataSource())){
sysUser.setUpdateBy(SecurityUtils.getUsername());
}else{
sysUser.setUpdateBy(DataSourceEnuns.APP.getInfo());
}
sysUser.setUpdateTime(DateUtils.getNowDate());
sysUser.setRemark(proProjectInfoSubdepts.getSubDeptName());
try {
R<Long> userResult = remoteUserService.updateUserInfo(sysUser, SecurityConstants.INNER);
proProjectInfoSubdepts.setSubDeptLeaderId(userResult.getData());
}catch (Exception e){
// 已注册账号!!忽略异常...
e.printStackTrace();
}
// TODO:实名制接入
}
}
proProjectInfoSubdepts.setUpdateBy(SecurityUtils.getUsername());
if(Objects.equals(DataSourceEnuns.WEB.getCode(),proProjectInfoSubdepts.getDataSource())){
proProjectInfoSubdepts.setUpdateBy(SecurityUtils.getUsername());
}else{
proProjectInfoSubdepts.setUpdateBy(DataSourceEnuns.APP.getInfo());
}
proProjectInfoSubdepts.setUpdateTime(DateUtils.getNowDate());
return proProjectInfoSubdeptsMapper.updateProProjectInfoSubdepts(proProjectInfoSubdepts);
int res = proProjectInfoSubdeptsMapper.updateProProjectInfoSubdepts(proProjectInfoSubdepts);
// 将人员信息同步至单位人员表
if(res>0 && (Objects.equals(proProjectInfoSubdepts.getSubDeptType(), SubDeptsEnums.ZYFB.getCode()) || Objects.equals(proProjectInfoSubdepts.getSubDeptType(),SubDeptsEnums.LWFB.getCode()))){
// 保存单位人员信息
ProProjectInfoSubdeptsUsers subdeptsUser = proProjectInfoSubdeptsUsersMapper.selectProProjectInfoSubdeptsUsersByParamId(proProjectInfoSubdepts.getProjectId(),proProjectInfoSubdepts.getSubDeptLeaderId());
if(Objects.isNull(subdeptsUser)){
subdeptsUser = new ProProjectInfoSubdeptsUsers();
subdeptsUser.setComId(info.getComId());
subdeptsUser.setProjectId(info.getId());
subdeptsUser.setSubDeptId(proProjectInfoSubdepts.getId());
}
subdeptsUser.setSubDeptName(proProjectInfoSubdepts.getSubDeptName());
subdeptsUser.setSubDeptType(proProjectInfoSubdepts.getSubDeptType());
subdeptsUser.setSubDeptPowerPath(proProjectInfoSubdepts.getSubDeptLeaderPowerPath());
subdeptsUser.setUserId(proProjectInfoSubdepts.getSubDeptLeaderId());
subdeptsUser.setCraftType(CraftTypeEnums.GLRY.getCode());
subdeptsUser.setCraftPost(craftPostEnums.WTDLR.getCode());
subdeptsUser.setDegreeGrade("");
subdeptsUser.setEduStatus(ShiFouEnums.FOU.getCodeStr());
subdeptsUser.setApproveStatus(ApproveStatus.await.getCode());
if(Objects.isNull(subdeptsUser.getSubStep()) || subdeptsUser.getSubStep()<1){
subdeptsUser.setSubStep(1L);
}
if(Objects.equals(DataSourceEnuns.WEB.getCode(),proProjectInfoSubdepts.getDataSource())){
subdeptsUser.setCreateBy(SecurityUtils.getUsername());
}else{
subdeptsUser.setCreateBy(DataSourceEnuns.APP.getInfo());
}
subdeptsUser.setCreateTime(DateUtils.getNowDate());
if(Objects.isNull(subdeptsUser.getId())){
proProjectInfoSubdeptsUsersMapper.insertProProjectInfoSubdeptsUsers(subdeptsUser);
}else{
proProjectInfoSubdeptsUsersMapper.updateProProjectInfoSubdeptsUsers(subdeptsUser);
}
}
return res;
}
/**
@ -213,4 +298,31 @@ public class ProProjectInfoSubdeptsServiceImpl implements IProProjectInfoSubdept
{
return proProjectInfoSubdeptsMapper.deleteProProjectInfoSubdeptsById(id);
}
/**
*
* @param proId
* @param phoneNumber
* @return
*/
@Override
public ProProjectInfoSubdepts findProSubDeptsInfo(Long proId, String phoneNumber){
ProProjectInfoSubdepts query = new ProProjectInfoSubdepts();
query.setProjectId(proId);
query.setSubDeptLeaderPhone(phoneNumber);
List<ProProjectInfoSubdepts> dataList = proProjectInfoSubdeptsMapper.selectProProjectInfoSubdeptsList(query);
if(StringUtils.isNotEmpty(dataList)){
ProProjectInfoSubdepts data = dataList.get(0);
ProProjectInfoSubdeptsUsers userQuery = new ProProjectInfoSubdeptsUsers();
userQuery.setProjectId(proId);
userQuery.setPhoneNumber(phoneNumber);
List<ProProjectInfoSubdeptsUsers> userList = proProjectInfoSubdeptsUsersMapper.selectProProjectInfoSubdeptsUsersList(userQuery);
if(StringUtils.isNotEmpty(userList)){
data.setProProjectInfoSubdeptsUsers(userList.get(0));
}
return data;
}
return null;
}
}

View File

@ -2,8 +2,11 @@ package com.yanzhu.manage.service.impl;
import com.yanzhu.common.core.constant.SecurityConstants;
import com.yanzhu.common.core.context.SecurityContextHolder;
import com.yanzhu.common.core.exception.ServiceException;
import com.yanzhu.common.core.utils.DateUtils;
import com.yanzhu.common.core.utils.StringUtils;
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
import com.yanzhu.manage.domain.SignetFileVo;
import com.yanzhu.manage.mapper.ProProjectInfoSubdeptsUsersMapper;
import com.yanzhu.manage.service.IProProjectInfoSubdeptsUsersService;
import com.yanzhu.manage.service.IUniService;
@ -11,6 +14,7 @@ import com.yanzhu.system.api.RemoteUserService;
import com.yanzhu.system.api.domain.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@ -131,4 +135,41 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
uniService.syncUserRevoke(id);
return proProjectInfoSubdeptsUsersMapper.deleteProProjectInfoSubdeptsUsersById(id);
}
/**
*
* @param proId
* @param phoneNumber
* @return
*/
@Override
public ProProjectInfoSubdeptsUsers findProSubDeptsUser(Long proId, String phoneNumber){
ProProjectInfoSubdeptsUsers query = new ProProjectInfoSubdeptsUsers();
query.setProjectId(proId);
query.setPhoneNumber(phoneNumber);
List<ProProjectInfoSubdeptsUsers> dataList = proProjectInfoSubdeptsUsersMapper.selectProProjectInfoSubdeptsUsersList(query);
if(StringUtils.isNotEmpty(dataList)){
return dataList.get(0);
}
return null;
}
/**
*
* @param signetFileVo
*/
@Override
@Transactional
public void submitUserSignets(SignetFileVo signetFileVo){
ProProjectInfoSubdeptsUsers query = new ProProjectInfoSubdeptsUsers();
query.setProjectId(signetFileVo.getProId());
query.setPhoneNumber(signetFileVo.getUserPhone());
List<ProProjectInfoSubdeptsUsers> dataList = proProjectInfoSubdeptsUsersMapper.selectProProjectInfoSubdeptsUsersList(query);
if(StringUtils.isEmpty(dataList)){
throw new ServiceException("用户信息异常...");
}
ProProjectInfoSubdeptsUsers proSubdeptsUser = dataList.get(0);
proSubdeptsUser.setSubStep(100L);
proSubdeptsUser.setEduSignPath(signetFileVo.getImgPath());
}
}

View File

@ -25,3 +25,7 @@ spring:
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
logging:
level:
com.ycx.manage.mapper: DEBUG

View File

@ -0,0 +1,61 @@
import {
request
} from '../utils/request'
// 查询项目培训视频信息
export function findBusTrainingVideos(proId, phoneNumber) {
return request({
url: '/manage/wxApi/findBusTrainingVideos?proId=' + proId + '&phoneNumber=' + phoneNumber,
method: 'get'
})
}
// 开始播放用户培训视频
export function startPlayUserEduVideo(id) {
return request({
url: '/manage/wxApi/startPlayUserEduVideo/' + id,
method: 'get'
})
}
// 结束播放用户培训视频
export function endPlayUserEduVideo(id) {
return request({
url: '/manage/wxApi/endPlayUserEduVideo/' + id,
method: 'get'
})
}
// 用户完成学习视频
export function finishEduVideo(id) {
return request({
url: '/manage/wxApi/finishEduVideo/' + id,
method: 'get'
})
}
// 查询项目考试试卷信息
export function findBusExamInfos(proId, phoneNumber) {
return request({
url: '/manage/wxApi/findBusExamInfos?proId=' + proId + '&phoneNumber=' + phoneNumber,
method: 'get'
})
}
// 提交试卷试卷信息
export function submitBusExamUser(data) {
return request({
url: '/manage/wxApi/submitBusExamUser',
method: 'post',
data: data
})
}
// 确认并提交签署信息
export function submitUserSignets(data) {
return request({
url: '/manage/wxApi/submitUserSignets',
method: 'post',
data: data
})
}

View File

@ -52,7 +52,7 @@ export function loginOut() {
})
}
// 刷线用户信息
// 刷用户信息
export function refreshMobileToken() {
return request({
'url': '/auth/refreshMobile',
@ -60,3 +60,12 @@ export function refreshMobileToken() {
})
}
// 获取用户手机号码
export function getMaPhoneNumber(data) {
return request({
'url': '/auth/getMaPhoneNumber',
'method': 'post',
'data': data,
})
}

View File

@ -1,60 +1,36 @@
import {request} from '../utils/request'
import {
request
} from '../utils/request'
// 获取项目编号
export function getProjectNo() {
// 查询项目信息详细
export function getProjectInfo(id) {
return request({
url: '/project/projectInfo/findMyDeptProjectNo',
url: '/manage/wxApi/findProject/' + id,
method: 'get'
})
}
// 查询项目信息列表
export function listProjectInfo(query) {
// 新增项目参建单位信息
export function registerSubDepts(data) {
return request({
url: '/project/projectInfo/list',
method: 'get',
params: query
url: '/manage/wxApi/registerSubDepts',
method: 'post',
data: data
})
}
// 查询项目信息详细
export function getProjectInfo(id) {
}
// 查询项目参建单位信息
export function findProSubDeptsInfo(proId, phoneNumber) {
return request({
url: '/project/projectInfo/' + id,
method: 'get'
url: '/manage/wxApi/findProSubDeptsInfo?proId=' + proId + '&phoneNumber=' + phoneNumber,
method: 'get'
})
}
// 新增项目信息
export function addProjectInfo(data) {
}
// 查询项目参建人员信息
export function findProSubDeptsUser(proId, phoneNumber) {
return request({
url: '/project/projectInfo',
method: 'post',
data: data
url: '/manage/wxApi/findProSubDeptsUser?proId=' + proId + '&phoneNumber=' + phoneNumber,
method: 'get'
})
}
// 修改项目信息
export function updateProjectInfo(data) {
return request({
url: '/project/projectInfo',
method: 'put',
data: data
})
}
// 删除项目信息
export function delProjectInfo(id) {
return request({
url: '/project/projectInfo/' + id,
method: 'delete'
})
}
// 我的部门项目
export function findMyDeptProject() {
return request({
url: '/project/projectInfo/findMyDeptProject',
method: 'get'
})
}
}

View File

@ -52,10 +52,16 @@ App({
})
}
this.autoUpdate();
//防卡死定时器
setInterval(() => {
wx.hideLoading();
}, 30000);
/**
* 初始化页面未登录时跳转到登录页
*/
if(options && options.query && options.query.proId){
if(options && options.query && options.query.QRPID){
//扫码进入时不效验登录...跳转授权登录页
console.log("扫码进入时不效验登录...跳转授权登录页");
}else{
@ -66,7 +72,6 @@ App({
wx.redirectTo({
url: '/pages/login/index',
});
return false;
}
}
},

View File

@ -1,7 +1,6 @@
{
"pages": [
"pages/login/login",
"pages/index/index",
"pages/updatePwd/index",
"pages/project_flowable/initTask/index",
"pages/project_flowable/myFlowDefinition/index",
@ -60,6 +59,7 @@
"safety-number": "./components/number/index",
"select-person": "./components/select-person/index",
"select-group-person": "./components/select-group-person/index",
"select-group-position": "./components/select-group-position/index",
"van-dropdown-menu": "@vant/weapp/dropdown-menu/index",
"van-dropdown-item": "@vant/weapp/dropdown-item/index",
"curve-echarts": "pages/components/curve-echarts/index"

View File

@ -58,7 +58,7 @@ page {
/* 中间内容用含有max_content 的 view 包起来 */
.max_content {
padding: 166rpx 0 180rpx;
padding: 166rpx 0 90rpx;
}
.max_content_scroll {
@ -981,6 +981,13 @@ page {
background: url("http://fileimg.makalu.cc/WEB_F9046A91C12646ECAEB6024455C35F15.png") no-repeat left/15rpx 30rpx;
}
.safety_inspect_title_2 {
color: #e9fbf9;
font-size: 26rpx;
padding: 20rpx;
background: url("http://fileimg.makalu.cc/WEB_F9046A91C12646ECAEB6024455C35F15.png") no-repeat left/15rpx 30rpx;
}
.safety_prop {
display: flex;
align-items: center;
@ -1686,6 +1693,15 @@ swiper-item video {
background: #66d6f1;
}
.problem_submit_to_back {
border-bottom: 1px solid #999999;
background-color: #999999;
}
.problem_submit_to_back:active {
background: #cccccc;
}
.problem_submit_to_eq {
border-bottom: 1px solid #3f76eb;
background-color: #3f76eb;
@ -1923,11 +1939,26 @@ swiper-item video {
color: #FFFFFF;
}
.code_label_blue {
background: #1890ff;
color: #FFFFFF;
}
.code_label_blueviolet {
background: blueviolet;
color: #FFFFFF;
}
.code_label_4 {
font-size: 0.8rem;
width: 200rpx;
height: 50rpx;
line-height: 50rpx;
text-align: center;
padding: 0.1rem;
border-radius: 0.5rem 0 0.5rem 0;
}
.code_label_yellow {
background: #ff9800;
color: #FFFFFF;
@ -1997,4 +2028,4 @@ swiper-item video {
width: 180rpx;
height: 180rpx;
padding-right: 15rpx;
}
}

View File

@ -0,0 +1,122 @@
// newComponents/select-group-person/index.js
Component({
/**
* 组件的属性列表
*/
properties: {
title:{
type:String
},
index:{
type:String
},
choose:{
type:String
},
multiple:{
type:Boolean,
value:true
},
rectifierData:{
type:Array,
value:[]
}
},
observers: {
},
lifetimes: {
created: function(){
//在组件实例刚刚被创建时执行,注意此时不能调用 setData
},
attached: function () {
//在组件实例进入页面节点树时执行
},
ready: function () {
// 在组件在视图层布局完成后执行
},
detached: function () {
// 在组件实例被从页面节点树移除时执行
},
},
/**
* 组件的初始数据
*/
data: {
show:false,
gridData:[],
selectedIndex:[]
},
/**
* 组件的方法列表
*/
methods: {
onAddResponsible(){
this.setData({
show:true
})
},
onClose(){
this.setData({
show:false
})
},
onSelected(e){
var data = this.data.rectifierData;
let ei = e.currentTarget.dataset.index;
let index = ei.split('_');
let userdata = data[index[0]].userinfoList[index[1]];
let of = this.data.selectedIndex.indexOf(ei);
if(of>-1){
this.data.selectedIndex.splice(of, 1);
userdata.state = false;
}else{
this.data.selectedIndex.push(ei);
userdata.state = true;
}
if(!this.data.multiple && this.data.selectedIndex.length>0){
if(this.data.selectedIndex.length>1){
this.data.selectedIndex.forEach((item) =>{
let _indexs = item.split('_');
data[_indexs[0]].userinfoList[_indexs[1]].state = false;
});
userdata.state = true;
this.data.selectedIndex=[];
this.data.selectedIndex.push(ei);
}
let _gridData=[{userName:userdata.nickName+" ["+userdata.jobTypeName+"]",phoneNumber:userdata.phonenumber}];
this.triggerEvent('selected',_gridData)
this.setData({
choose:_gridData[0].userName,
rectifierData:data,
show:false
})
}else{
this.setData({
rectifierData : data
})
}
},
onConfirm(){
var data = this.data.rectifierData;
let _gridData=[];
let chooses="";
if(this.data.selectedIndex.length>0){
this.data.selectedIndex.forEach((item) =>{
let _indexs = item.split('_');
let name = data[_indexs[0]].userinfoList[_indexs[1]].nickName+" ["+data[_indexs[0]].userinfoList[_indexs[1]].jobTypeName+"]";
_gridData.push({userName:name,phoneNumber:data[_indexs[0]].userinfoList[_indexs[1]].phonenumber});
chooses+=","+name;
});
}
this.triggerEvent('selected',_gridData)
this.setData({
choose:chooses.substring(1),
show:false
})
}
}
})

View File

@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

View File

@ -0,0 +1,38 @@
<!--newComponents/select-group-person/index.wxml-->
<view class="nspect_info_rectifier">
<van-row>
<van-col span="24" style="text-align: left;">
<input placeholder="请选择{{title}}" data-index="{{index}}" placeholder-style="color:#6777aa;" class="inspect_input_fill_in" bindtap="onAddResponsible" disabled="true" value="{{choose}}"/>
</van-col>
</van-row>
</view>
<van-popup show="{{ show }}" bind:close="onClose" position="bottom">
<view class="rectifier_max">
<view class="rectifier_title">
<view class="rectifier_text">{{title}}</view>
<view class="rectifier_close" bindtap="onClose"><van-icon name="cross" /></view>
</view>
<view class="rectifier_list">
<view class="rectifier_list_height">
<view wx:for="{{rectifierData}}" wx:key="index" data-index="{{index}}">
<view class="rectifier_list-group_for">[{{item.unitTypeName}}] {{item.unitName}}</view>
<view class="rectifier_list_for" wx:for="{{item.userinfoList}}" wx:for-item="items" wx:for-index="index_i" wx:key="index_i" data-index="{{index+'_'+index_i}}" bindtap="onSelected">
<view class="rectifier_list_radio">
<view class="rectifier_list_radio_circle {{items.state?'active':''}}">
<van-icon name="success" wx:if="{{items.state}}"/>
</view>
</view>
<view class="rectifier_list_name {{items.state?'active':''}}">{{items.phonenumber}}</view>
<view class="rectifier_list_name {{items.state?'active':''}}">{{items.nickName}} [{{items.jobTypeName}}]</view>
</view>
</view>
</view>
</view>
<view class="rectifier_btn">
<view bindtap="onClose">取消</view>
<view bindtap="onConfirm">确认</view>
</view>
</view>
</van-popup>

View File

@ -0,0 +1,129 @@
/* newComponents/select-person/index.wxss */
page{
height:100%
}
.rectifier_add_to{
width: 100rpx;
height: 100rpx;
margin: auto;
background: #252d41;
text-align: center;
line-height: 110rpx;
font-size: 50rpx;
color: #57668f;
font-weight: bold;
border-radius: 5rpx;
}
.rectifier_max{
width: 100%;
background: #232a44;
border-radius: 15rpx;
position: relative;
height: 100%;
}
.rectifier_title{
position: relative;
background: #27304f;
border-radius: 15rpx;
text-align: center;
padding:20rpx 15rpx;
}
.rectifier_close{
position: absolute;
width: 50rpx;
height: 50rpx;
right: 20rpx;
top: 12rpx;
line-height: 60rpx;
text-align: center;
}
.rectifier_list{
padding:20rpx 40rpx;
}
.rectifier_list_height{
height: 990rpx;
overflow: auto;
}
.rectifier_list_for{
display: flex;
align-items: center;
padding: 18rpx 15rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.rectifier_list_radio{
width: 70rpx;
}
.rectifier_list_radio_circle{
width: 30rpx;
height: 30rpx;
border-radius: 50%;
border: 1px solid #6576a2;
}
.rectifier_list_radio_circle.active{
background: #8262f3;
border: 1px solid #8262f3;
}
.rectifier_list_name{
padding-left: 10rpx;
color: #6576a2;
}
.rectifier_list_name.active{
color: #ffffff;
}
.rectifier_btn{
display: flex;
align-items: center;
background: #27304f;
border-radius: 0 0 15rpx 15rpx;
}
.rectifier_btn view{
width: 50%;
text-align: center;
height: 80rpx;
line-height: 80rpx;
color:#6874a4;
}
.rectifier_btn view:last-child{
border-left: 1px solid #6874a4;
color: #ffffff;
}
.rectifier_list-group_for{
height: 65rpx;
background-color: #879ff97d;
line-height: 65rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.inspect_input_fill_in {
height: 90rpx;
background: #212737;
border-radius: 10rpx;
padding: 0 30rpx;
}

View File

@ -3,5 +3,6 @@ module.exports = {
timeout: 60000,
appId: "wx2350a5efb3f28e66",
baseUrl: 'http://127.0.0.1:8080',
baseImgUrl: 'http://127.0.0.1:9300',
noSecuritys:['/code','/auth/wxLogin','/auth/getMaOpenId','/auth/getMaPhoneNumber','/auth/maLogin']
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 515 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1 +1 @@
@import '../common/index.wxss';.van-checkbox{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;overflow:hidden;-webkit-user-select:none;user-select:none}.van-checkbox__icon-wrap,.van-checkbox__label{line-height:20px;line-height:var(--checkbox-size,20px)}.van-checkbox__icon-wrap{-webkit-flex:none;flex:none}.van-checkbox__icon{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:border-box;width:1em;height:1em;color:transparent;text-align:center;transition-property:color,border-color,background-color;font-size:20px;font-size:var(--checkbox-size,20px);border:1px solid #c8c9cc;border:1px solid var(--checkbox-border-color,#c8c9cc);transition-duration:.2s;transition-duration:var(--checkbox-transition-duration,.2s)}.van-checkbox__icon--round{border-radius:100%}.van-checkbox__icon--checked{color:#fff;color:var(--white,#fff);background-color:#1989fa;background-color:var(--checkbox-checked-icon-color,#1989fa);border-color:#1989fa;border-color:var(--checkbox-checked-icon-color,#1989fa)}.van-checkbox__icon--disabled{background-color:#ebedf0;background-color:var(--checkbox-disabled-background-color,#ebedf0);border-color:#c8c9cc;border-color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__icon--disabled.van-checkbox__icon--checked{color:#c8c9cc;color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__label{word-wrap:break-word;margin-left:10px;margin-left:var(--checkbox-label-margin,10px);color:#323233;color:var(--checkbox-label-color,#323233)}.van-checkbox__label--left{float:left;margin:0 10px 0 0;margin:0 var(--checkbox-label-margin,10px) 0 0}.van-checkbox__label--disabled{color:#c8c9cc;color:var(--checkbox-disabled-label-color,#c8c9cc)}.van-checkbox__label:empty{margin:0}
@import '../common/index.wxss';.van-checkbox{display:-webkit-flex;display:flex;font-weight:500;margin-bottom:10rpx;-webkit-align-items:center;align-items:center;overflow:hidden;-webkit-user-select:none;user-select:none}.van-checkbox__icon-wrap,.van-checkbox__label{line-height:20px;line-height:var(--checkbox-size,20px)}.van-checkbox__icon-wrap{-webkit-flex:none;flex:none}.van-checkbox__icon{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:border-box;width:1em;height:1em;color:transparent;text-align:center;transition-property:color,border-color,background-color;font-size:20px;font-size:var(--checkbox-size,20px);border:1px solid #c8c9cc;border:1px solid var(--checkbox-border-color,#c8c9cc);transition-duration:.2s;transition-duration:var(--checkbox-transition-duration,.2s)}.van-checkbox__icon--round{border-radius:100%}.van-checkbox__icon--checked{color:#fff;color:var(--white,#fff);background-color:#1989fa;background-color:var(--checkbox-checked-icon-color,#1989fa);border-color:#1989fa;border-color:var(--checkbox-checked-icon-color,#1989fa)}.van-checkbox__icon--disabled{background-color:#ebedf0;background-color:var(--checkbox-disabled-background-color,#ebedf0);border-color:#c8c9cc;border-color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__icon--disabled.van-checkbox__icon--checked{color:#c8c9cc;color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__label{word-wrap:break-word;margin-left:10px;margin-left:var(--checkbox-label-margin,10px);color:#cccccc;color:var(--checkbox-label-color,#cccccc)}.van-checkbox__label--left{float:left;margin:0 10px 0 0;margin:0 var(--checkbox-label-margin,10px) 0 0}.van-checkbox__label--disabled{color:#c8c9cc;color:var(--checkbox-disabled-label-color,#c8c9cc)}.van-checkbox__label:empty{margin:0}

View File

@ -1 +1 @@
@import '../common/index.wxss';.van-radio{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;overflow:hidden;-webkit-user-select:none;user-select:none}.van-radio__icon-wrap{-webkit-flex:none;flex:none}.van-radio__icon{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:border-box;width:1em;height:1em;color:transparent;text-align:center;transition-property:color,border-color,background-color;border:1px solid #c8c9cc;border:1px solid var(--radio-border-color,#c8c9cc);font-size:20px;font-size:var(--radio-size,20px);transition-duration:.2s;transition-duration:var(--radio-transition-duration,.2s)}.van-radio__icon--round{border-radius:100%}.van-radio__icon--checked{color:#fff;color:var(--white,#fff);background-color:#1989fa;background-color:var(--radio-checked-icon-color,#1989fa);border-color:#1989fa;border-color:var(--radio-checked-icon-color,#1989fa)}.van-radio__icon--disabled{background-color:#ebedf0;background-color:var(--radio-disabled-background-color,#ebedf0);border-color:#c8c9cc;border-color:var(--radio-disabled-icon-color,#c8c9cc)}.van-radio__icon--disabled.van-radio__icon--checked{color:#c8c9cc;color:var(--radio-disabled-icon-color,#c8c9cc)}.van-radio__label{word-wrap:break-word;margin-left:10px;margin-left:var(--radio-label-margin,10px);color:#323233;color:var(--radio-label-color,#323233);line-height:20px;line-height:var(--radio-size,20px)}.van-radio__label--left{float:left;margin:0 10px 0 0;margin:0 var(--radio-label-margin,10px) 0 0}.van-radio__label--disabled{color:#c8c9cc;color:var(--radio-disabled-label-color,#c8c9cc)}.van-radio__label:empty{margin:0}
@import '../common/index.wxss';.van-radio{display:-webkit-flex;display:flex;font-weight:500;margin-bottom:10rpx;-webkit-align-items:center;align-items:center;overflow:hidden;-webkit-user-select:none;user-select:none}.van-radio__icon-wrap{-webkit-flex:none;flex:none}.van-radio__icon{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:border-box;width:1em;height:1em;color:transparent;text-align:center;transition-property:color,border-color,background-color;border:1px solid #c8c9cc;border:1px solid var(--radio-border-color,#c8c9cc);font-size:20px;font-size:var(--radio-size,20px);transition-duration:.2s;transition-duration:var(--radio-transition-duration,.2s)}.van-radio__icon--round{border-radius:100%}.van-radio__icon--checked{color:#fff;color:var(--white,#fff);background-color:#1989fa;background-color:var(--radio-checked-icon-color,#1989fa);border-color:#1989fa;border-color:var(--radio-checked-icon-color,#1989fa)}.van-radio__icon--disabled{background-color:#ebedf0;background-color:var(--radio-disabled-background-color,#ebedf0);border-color:#c8c9cc;border-color:var(--radio-disabled-icon-color,#c8c9cc)}.van-radio__icon--disabled.van-radio__icon--checked{color:#c8c9cc;color:var(--radio-disabled-icon-color,#c8c9cc)}.van-radio__label{word-wrap:break-word;margin-left:10px;margin-left:var(--radio-label-margin,10px);color:#cccccc;color:var(--radio-label-color,#cccccc);line-height:20px;line-height:var(--radio-size,20px)}.van-radio__label--left{float:left;margin:0 10px 0 0;margin:0 var(--radio-label-margin,10px) 0 0}.van-radio__label--disabled{color:#c8c9cc;color:var(--radio-disabled-label-color,#c8c9cc)}.van-radio__label:empty{margin:0}

View File

@ -8,6 +8,10 @@ component_1.VantComponent({
icon: String,
steps: Array,
active: Number,
rejectNode:{
type: Number,
value: 100,
},
direction: {
type: String,
value: 'horizontal',

View File

@ -5,7 +5,7 @@
<view wx:for="{{ steps }}" wx:key="index" bindtap="onClick" data-index="{{ index }}" class="{{ utils.bem('step', [direction, status(index, active)]) }} van-hairline" style="{{ status(index, active) === 'inactive' ? 'color: ' + inactiveColor: '' }}">
<view class="van-step__title" style="{{ index === active ? 'color: #45affb': (index === rejectNode? 'color: #fd6060;font-weight:800':'')}}">
<view style="{{ index < active ? 'color: ' + activeColor : '' }}">{{ item.text }}</view>
<view style="color: #CCCCCC;padding: 15rpx 20rpx 0rpx 0;font-weight: 800;">{{ item.desc }}</view>
<view class="desc-class">{{ item.desc }}</view>
</view>
<view class="van-step__circle-container">
<block wx:if="{{ index > active }}">
@ -32,7 +32,6 @@
} else if (index === active) {
return 'process';
}
return 'inactive';
}
module.exports = get;

View File

@ -1 +1 @@
@import '../common/index.wxss';.van-steps{overflow:hidden;background-color:#fff;background-color:var(--steps-background-color,#fff)}.van-steps--horizontal{padding:10px}.van-steps--horizontal .van-step__wrapper{position:relative;display:-webkit-flex;display:flex;overflow:hidden}.van-steps--vertical{padding-left:10px}.van-steps--vertical .van-step__wrapper{padding:0 0 0 20px}.van-step{position:relative;-webkit-flex:1;flex:1;font-size:14px;font-size:var(--step-font-size,14px);color:#969799;color:var(--step-text-color,#969799)}.van-step--finish{color:#323233;color:var(--step-finish-text-color,#323233)}.van-step__circle{border-radius:50%;width:5px;width:var(--step-circle-size,5px);height:5px;height:var(--step-circle-size,5px);background-color:#969799;background-color:var(--step-circle-color,#969799)}.van-step--horizontal{padding-bottom:14px}.van-step--horizontal:first-child .van-step__title{-webkit-transform:none;transform:none}.van-step--horizontal:first-child .van-step__circle-container{padding:0 8px 0 0;-webkit-transform:translate3d(0,50%,0);transform:translate3d(0,50%,0)}.van-step--horizontal:last-child{position:absolute;right:0;width:auto}.van-step--horizontal:last-child .van-step__title{text-align:right;-webkit-transform:none;transform:none}.van-step--horizontal:last-child .van-step__circle-container{right:0;padding:0 0 0 8px;-webkit-transform:translate3d(0,50%,0);transform:translate3d(0,50%,0)}.van-step--horizontal .van-step__circle-container{position:absolute;bottom:6px;z-index:1;-webkit-transform:translate3d(-50%,50%,0);transform:translate3d(-50%,50%,0);background-color:#fff;background-color:var(--white,#fff);padding:0 8px;padding:0 var(--padding-xs,8px)}.van-step--horizontal .van-step__title{display:inline-block;-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0);font-size:12px;font-size:var(--step-horizontal-title-font-size,12px)}.van-step--horizontal .van-step__line{position:absolute;right:0;bottom:6px;left:0;height:2px;-webkit-transform:translate3d(0,50%,0);transform:translate3d(0,50%,0);background-color:#ebedf0;background-color:var(--step-line-color,#ebedf0)}.van-step--horizontal.van-step--process{color:#323233;color:var(--step-process-text-color,#323233)}.van-step--horizontal.van-step--process .van-step__icon{display:block;line-height:1;}.van-step--vertical{padding:10px 10px 10px 0;line-height:18px}.van-step--vertical:after{border-bottom-width:1px}.van-step--vertical:last-child:after{border-bottom-width:none}.van-step--vertical:first-child:before{position:absolute;top:0;left:-15px;z-index:1;width:1px;height:20px;content:"";background-color:#fff;background-color:var(--white,#fff)}.van-step--vertical .van-step__circle,.van-step--vertical .van-step__icon,.van-step--vertical .van-step__line{position:absolute;top:19px;left:-14px;z-index:2;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.van-step--vertical .van-step__icon{line-height:1;font-size:12px;font-size:var(--step-icon-size,12px)}.van-step--vertical .van-step__line{z-index:1;width:1px;height:100%;-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0);background-color:#ebedf0;background-color:var(--step-line-color,#ebedf0)}.van-step__title{padding-bottom: 10rpx;}.van-step__title .desc-class{color: #FFF;}
@import '../common/index.wxss';.van-steps{overflow:hidden;background-color:#fff;background-color:var(--steps-background-color,#fff)}.van-steps--horizontal{padding:10px}.van-steps--horizontal .van-step__wrapper{position:relative;display:-webkit-flex;display:flex;overflow:hidden}.van-steps--vertical{padding-left:10px}.van-steps--vertical .van-step__wrapper{padding:0 0 0 20px}.van-step{position:relative;-webkit-flex:1;flex:1;font-size:14px;font-size:var(--step-font-size,14px);color:#969799;color:var(--step-text-color,#969799)}.van-step--finish{color:#323233;color:var(--step-finish-text-color,#323233)}.van-step__circle{border-radius:50%;width:5px;width:var(--step-circle-size,5px);height:5px;height:var(--step-circle-size,5px);background-color:#969799;background-color:var(--step-circle-color,#969799)}.van-step--horizontal{padding-bottom:14px}.van-step--horizontal:first-child .van-step__title{-webkit-transform:none;transform:none}.van-step--horizontal:first-child .van-step__circle-container{padding:0 8px 0 0;-webkit-transform:translate3d(0,50%,0);transform:translate3d(0,50%,0)}.van-step--horizontal:last-child{position:absolute;right:0;width:auto}.van-step--horizontal:last-child .van-step__title{text-align:right;-webkit-transform:none;transform:none}.van-step--horizontal:last-child .van-step__circle-container{right:0;padding:0 0 0 8px;-webkit-transform:translate3d(0,50%,0);transform:translate3d(0,50%,0)}.van-step--horizontal .van-step__circle-container{position:absolute;bottom:6px;z-index:1;-webkit-transform:translate3d(-50%,50%,0);transform:translate3d(-50%,50%,0);background-color:#fff;background-color:var(--white,#fff);padding:0 8px;padding:0 var(--padding-xs,8px)}.van-step--horizontal .van-step__title{display:inline-block;-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0);font-size:12px;font-size:var(--step-horizontal-title-font-size,12px)}.van-step--horizontal .van-step__line{position:absolute;right:0;bottom:6px;left:0;height:2px;-webkit-transform:translate3d(0,50%,0);transform:translate3d(0,50%,0);background-color:#ebedf0;background-color:var(--step-line-color,#ebedf0)}.van-step--horizontal.van-step--process{color:#323233;color:var(--step-process-text-color,#323233)}.van-step--horizontal.van-step--process .van-step__icon{display:block;line-height:1;}.van-step--vertical{padding:10px 10px 10px 0;line-height:18px}.van-step--vertical:after{border-bottom-width:1px}.van-step--vertical:last-child:after{border-bottom-width:none}.van-step--vertical:first-child:before{position:absolute;top:0;left:-15px;z-index:1;width:1px;height:20px;content:"";background-color:#fff;background-color:var(--white,#fff)}.van-step--vertical .van-step__circle,.van-step--vertical .van-step__icon,.van-step--vertical .van-step__line{position:absolute;top:19px;left:-14px;z-index:2;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.van-step--vertical .van-step__icon{line-height:1;font-size:12px;font-size:var(--step-icon-size,12px)}.van-step--vertical .van-step__line{z-index:1;width:1px;height:100%;-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0);background-color:#ebedf0;background-color:var(--step-line-color,#ebedf0)}.van-step__title{padding-bottom: 10rpx;}

View File

@ -12,6 +12,10 @@ Component({
fileUrlArray:{
type:Array
},
iconClass:{
type:String,
value:"in-add-click"
}
},
/**数据监听 */

View File

@ -8,7 +8,7 @@
</view>
<view class="in-add">
<view class="in-add-click" bindtap='upload' wx:if="{{showUpload}}"></view>
<view class="{{ iconClass }}" bindtap='upload' wx:if="{{showUpload}}"></view>
</view>
</view>
</view>

View File

@ -52,6 +52,23 @@
border-radius: 10rpx;
background: #28345a url("http://fileimg.makalu.cc/WEB_162F576788AE44F08ADDFFC06CD5923F.png") no-repeat center/70%;
}
.in-zcard-click{
width: 180rpx;
height:180rpx;
border: 1px dashed #28345a;
border-radius: 10rpx;
background: #28345a url("https://guangzhou.sxyanzhu.com/YZLJXM/profile/xmgl/static/z_card.png") no-repeat center/100%;
}
.in-fcard-click{
width: 180rpx;
height:180rpx;
border: 1px dashed #28345a;
border-radius: 10rpx;
background: #28345a url("https://guangzhou.sxyanzhu.com/YZLJXM/profile/xmgl/static/f_card.png") no-repeat center/100%;
}
.in-img-div image{
width: 180rpx;
height: 180rpx;

View File

@ -1,7 +1,7 @@
<!--pages/qianming/qianming.wxml-->
<view class="sign_div">
<view class="sign_div_min" style="font-size:34rpx;font-family: UICTFontTextStyleBody;color:#6777aa;background: #212737;line-height: 40rpx;" bindtap="showSign" >
<view class="sign_div_min" id="sign_div" style="font-size:34rpx;font-family: UICTFontTextStyleBody;color:#6777aa;background: #212737;line-height: 40rpx;" bindtap="showSign" >
<text wx:if="{{showimg}}" >点击签名</text>
<view wx:if="{{type==0}}">
<image style="margin-left: 60rpx;margin-top: 5rpx;filter: invert(100%)" wx:if="{{!showimg}}" src="{{imageUrl}}" class="qm_img" ></image>
@ -18,7 +18,8 @@
<view class="popup_view">
<van-row>
<van-col span="6">
<view class="view_btn" style="height:{{btnHeight}}">
<view class="ps">
<view class="view_btn" style="height:{{btnHeight}}">
<view class="max_btn">
<view class="min_btn btn_gb" bindtap="onClose">关闭</view>
</view>
@ -33,6 +34,7 @@
<view class="min_btn btn_qd" bindtap="getimg">确定</view>
</view>
</view>
</view>
</van-col>
<van-col span="18">
<view class="canvas_view">

View File

@ -94,5 +94,9 @@
height: 150rpx;
width: 280rpx;
position: relative;
}
.ps{
padding: 15rpx 0rpx;
border-radius: 10rpx;
}

View File

@ -1,211 +0,0 @@
import {
findMyTask,
getUserInfo,
findMyProjectList,
selectRoleMenuList
} from '../../api/publics'
import {
loginOut
} from '../../api/login'
import {
removeToken
} from '../../utils/auth'
import {
checkApplyList
} from '../../api/projectApply'
const app = getApp();
Page({
/**
* 页面的初始数据
*/
data: {
userData: null,
menuList: [],
show: false,
todoDB: 0,
chckDB: 0,
isCheckRole: false
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.initMenuList();
this.loadInfo();
this.initMyTask();
this.initMyProject();
},
/**
* 加载用户信息
*/
loadInfo() {
getUserInfo().then(res => {
if (res.code == 200) {
app.globalData.userData = res.data;
this.setData({
userData: res.data
})
let roles = res.data.roles;
if(roles!=null && roles.length>0){
roles.forEach(role =>{
if(role.roleId==88){
this.setData({
isCheckRole: true,
})
let params = "activeName=dys&pageNum=1&pageSize=1000";
checkApplyList(params).then(dbo =>{
this.setData({
chckDB: dbo.total,
})
})
}
});
}
}
});
},
initMenuList: function () {
var that = this;
selectRoleMenuList({}).then(res => {
if (res.code == 200) {
that.setData({
menuList: res.data
})
}
});
},
initMyTask: function () {
findMyTask({}).then(res => {
this.setData({
todoDB: res.data.todo
})
});
},
initMyProject: function () {
findMyProjectList().then(res => {
if (res.data.length > 0) {
let list = [];
let activeProject = false;
res.data.forEach(item => {
//判断选中项目是否在建中...
if (item.id == app.globalData.useProjectId) {
activeProject = true;
}
list.push({
"id": item.id,
"text": item.name
});
});
app.globalData.projectInfoList = list;
if (!activeProject) {
//没有选中项目默认选中最新项目
app.globalData.useProjectId = res.data[0].id;
app.globalData.useProjectName = res.data[0].name;
}
}
});
},
/**
* 路由跳转
*/
goMenu: function (event) {
wx.redirectTo({
url: event.currentTarget.dataset.url
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 左侧抽屉显示
*/
showPopup() {
this.setData({
show: true
});
},
/**
* 左侧抽屉隐藏
*/
onClosePopup() {
this.setData({
show: false
});
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
},
/**
* 修改密码
*/
XGMM: function () {
wx.redirectTo({
url: '../updatePwd/updatePwd'
})
},
/**
* 退出登录
*/
TCDL: function () {
loginOut().then(response => {
removeToken();
wx.redirectTo({
url: '../login/login',
});
});
}
})

View File

@ -1,4 +0,0 @@
{
"usingComponents": {},
"navigationStyle":"custom"
}

View File

@ -1,82 +0,0 @@
<!--pages/gengduogongneng/gengduogongneng.wxml-->
<view class="header_title">
<view class="header_title_row">
<van-row>
<van-col span="4">
<view class="header_img" bindtap="showPopup">
<image src="/images/core.png"></image>
</view>
</van-col>
<van-col span="16">
<view class="header_name">临建管家系统</view>
</van-col>
<van-col span="4"></van-col>
</van-row>
</view>
</view>
<!-- 左侧账号信息 -->
<van-popup show="{{ show }}" position="left" custom-style="width: 70%;height:100%;background:#191d28" bind:close="onClosePopup">
<view class="left_max">
<van-row class="demo clearfix">
<van-col span="24">
<view class="left_info_dept">{{userData.parDeptName}}</view>
</van-col>
<van-col span="10">
<view class="left_head">
<image src="../../images/user_3.png"></image>
</view>
</van-col>
<van-col span="14">
<view class="left_info">
<view style="padding: 20px;">{{userData.nickName}}</view>
</view>
</van-col>
</van-row>
<view class="left_manage_min">
<view class="left_manage" bindtap="XGMM">
<image src="/images/set.png" class="left_icon"></image>
<text class="left_password">修改密码</text>
<image src="/images/right.png" class="left_flaot"></image>
</view>
</view>
<view class="left_manage_min">
<view class="left_manage" bindtap="TCDL">
<image src="/images/set.png" class="left_icon"></image>
<text class="left_sign">退出登录</text>
<image src="/images/right.png" class="left_flaot"></image>
</view>
</view>
</view>
</van-popup>
<view class="max_content">
<view class="module_max">
<view class="module_min">
<view class="module_title pro_user">
<view>{{userData.nickName}}</view>
</view>
<view class="module_title pro_dept">
<view>{{userData.dept.deptName}}</view>
</view>
<view class="module_title pro_project">
<view>{{userData.parDeptName}}</view>
</view>
<view class="pro_herads">
<image src="https://guangzhou.sxyanzhu.com/YZLJXM/profile/static/yanzhu_logo.png"></image>
</view>
</view>
</view>
<view class="menu_max" style="margin-top: 20rpx;">
<van-row class="demo clearfix">
<van-col span="8" wx:for="{{menuList}}" wx:key="unique">
<view class="menu_min" data-id="{{item.menuIdenti}}" data-url="{{item.menuUrl}}" bindtap="goMenu">
<span class="tabNum_active" wx:if="{{item.menuIdenti=='DWBLRW' && todoDB>0}}">{{todoDB}}</span>
<span class="tabNum_active" wx:if="{{isCheckRole && item.menuIdenti=='JCYSGL' && chckDB>0}}">{{chckDB}}</span>
<image src="{{item.menuImg}}"></image>
<view>{{item.menuName}}</view>
</view>
</van-col>
</van-row>
</view>
</view>

View File

@ -1,64 +0,0 @@
page {
background: #191d28 url("http://fileimg.makalu.cc/CORE_40247DD946964A15AA0D4000E1031E19.png") no-repeat bottom/100%;
}
.pro_user {
background: url("https://guangzhou.sxyanzhu.com/YZLJXM/profile/static/login_name.png") no-repeat left/40rpx;
height: 80rpx;
line-height: 80rpx;
padding-left: 50rpx;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
}
.pro_dept {
background: url("https://guangzhou.sxyanzhu.com/YZLJXM/profile/static/dept.png") no-repeat left/40rpx;
height: 80rpx;
line-height: 80rpx;
padding-left: 50rpx;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
}
.pro_project {
background: url("https://guangzhou.sxyanzhu.com/YZLJXM/profile/static/project.png") no-repeat left/40rpx;
height: 80rpx;
line-height: 80rpx;
padding-left: 50rpx;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
}
.pro_herads {
text-align: right;
margin-top: -280rpx;
}
.pro_herads image {
width: 280rpx;
height: 280rpx;
}
.menu_max {
padding: 10rpx 50rpx 0;
}
.menu_min {
padding: 30rpx 0;
text-align: center;
}
.menu_min image {
width: 150rpx;
height: 150rpx;
}
.menu_min view {
padding: 10rpx;
color: #89a4eb;
}

View File

@ -26,7 +26,7 @@ Page({
code: '',
uuid: '',
codeUrl: '',
checked: true
checked: true,
},
//获取填写的账号信息

View File

@ -3,5 +3,6 @@
"van-image": "@vant/weapp/image/index",
"van-checkbox": "@vant/weapp/checkbox/index",
"van-checkbox-group": "@vant/weapp/checkbox-group/index"
}
},
"navigationStyle":"custom"
}

View File

@ -5,6 +5,9 @@
<view class="login_title">
<text>数字工程项目管理系统</text>
</view>
<view wx:if="{{false}}" class="loadings">
<image src="/images/loading_i.gif"></image>
</view>
<view class="login_bg">
<view class="login_ex">请使用手机号登录</view>
<view class="login_input">

View File

@ -10,6 +10,7 @@ page {
.login_logo image {
height: 120rpx;
margin-top: 18%;
}
.login_title {
@ -105,4 +106,9 @@ page {
margin-left: 12rpx;
width: 100%;
height: 100rpx;
}
}
.loadings{
margin-top: 15%;
text-align: center;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,11 @@
{
"usingComponents": {}
"usingComponents": {
"van-radio": "@vant/weapp/radio/index",
"van-radio-group": "@vant/weapp/radio-group/index",
"van-checkbox": "@vant/weapp/checkbox/index",
"van-checkbox-group": "@vant/weapp/checkbox-group/index",
"van-steps": "@vant/weapp/steps/index",
"van-notice-bar": "@vant/weapp/notice-bar/index"
},
"navigationStyle":"custom"
}

View File

@ -1,2 +1,828 @@
<!--pages/project_qr/index.wxml-->
<text>pages/project_qr/index.wxml</text>
<!-- 游客一键登录 -->
<view wx:if="{{!userPhoneNumber}}" class="page">
<view class="login_logo">
<image src="https://guangzhou.sxyanzhu.com/YZLJXM/profile/xmgl/static/sys_logo.png"></image>
</view>
<view class="login_title">
<text>数字工程项目管理系统</text>
</view>
<view class="login_bg">
<image src="https://guangzhou.sxyanzhu.com/YZLJXM/profile/static/yanzhu_logo_blue.png"></image>
<!--<view>
<van-radio :name="clause" shape>同意数字工程系统《用户隐私协议》</van-radio>
</view> -->
<view class="wxlogin_btn">
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">微 信 一 键 登 录</button>
</view>
</view>
</view>
<view wx:if="{{userPhoneNumber && active==0}}">
<view wx:if="{{signType=='1'}}">
<view class="header_title">
<view class="header_title_row">
<view class="header_name">{{title}}</view>
</view>
</view>
<view class="max_content">
<project-select init="{{initProject}}"></project-select>
<van-steps steps="{{ flowNodes }}" active="{{ active }}" />
<view class="inspect_info">
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">单位类型</view>
<view class="inspect_info_content">
<voucher-select columns="{{deptTypeList}}" placeholder="请单位企业类型" bindchange="onSubDeptType" selectValue="{{form.subDeptType}}"></voucher-select>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">单位名称</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写单位名称" model:value="{{form.subDeptName}}" placeholder-style="color:#6777aa;" maxlength="64" bindblur="onSubDeptName" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">社会信用代码</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写社会信用代码" model:value="{{form.subDeptCode}}" placeholder-style="color:#6777aa;" maxlength="64" bindblur="onSubDeptCode" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">营业执照副本
<text style="font-size: small; color: antiquewhite;">[有效期内的清晰扫描照片]</text>
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload0" limit="{{limit}}" fileUrlArray="{{form.businessLicensePath}}"></file-uploader>
</view>
</view>
<view class="inspect_info_list">
<van-row>
<van-col span="12">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">法人身份证正面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload1" iconClass="in-zcard-click" limit="{{limit}}" fileUrlArray="{{form.subDeptInfos.legalPersonCardImgPos}}"></file-uploader>
</view>
</van-col>
<van-col span="12">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">法人身份证反面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload2" iconClass="in-fcard-click" limit="{{limit}}" fileUrlArray="{{form.subDeptInfos.legalPersonCardImgInv}}"></file-uploader>
</view>
</van-col>
</van-row>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">法定代表人姓名</view>
<view class="inspect_info_content">
<input placeholder="请填写法定代表人姓名" placeholder-style="color:#6777aa;" model:value="{{form.subDeptInfos.legalPerson}}" bindinput="inputInfoslegalPerson" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">法定代表人身份证号</view>
<view class="inspect_info_content">
<input placeholder="请填写法定代表人身份证号" placeholder-style="color:#6777aa;" model:value="{{form.subDeptInfos.legalPersonCard}}" bindinput="inputInfoslegalPersonCard" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">合同约定的承包范围</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写合同约定的承包范围" model:value="{{form.contractInfos}}" placeholder-style="color:#6777aa;" bindblur="inputContractInfos" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">进入场地时间</view>
<view class="inspect_info_content">
<voucher-date counts="5" maxDate="{{maxDate}}" placeholder="请选择进入场地时间" time="{{form.useDates}}" bindchange="onInputTime1"></voucher-date>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">计划开工时间</view>
<view class="inspect_info_content">
<voucher-date counts="5" maxDate="{{maxDate}}" placeholder="请选择计划开工时间" time="{{form.startWorkDates}}" bindchange="onInputTime1"></voucher-date>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">计划完工时间</view>
<view class="inspect_info_content">
<voucher-date counts="5" maxDate="{{maxDate}}" placeholder="请选择计划完工时间" time="{{form.endWorkDates}}" bindchange="onInputTime2"></voucher-date>
</view>
</view>
<view class="inspect_info_list">
<van-row>
<van-col span="12">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">代理人证件正面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload3" iconClass="in-zcard-click" limit="{{limit}}" fileUrlArray="{{form.leaderCardImgPos}}"></file-uploader>
</view>
</van-col>
<van-col span="12">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">代理人证件反面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload4" iconClass="in-fcard-click" limit="{{limit}}" fileUrlArray="{{form.leaderCardImgInv}}"></file-uploader>
</view>
</van-col>
</van-row>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">代理人半身照
<text style="font-size: small; color: antiquewhite;">[进场扫脸,请上传清晰照片]</text>
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload5" limit="{{limit}}" fileUrlArray="{{form.leaderUserPicture}}"></file-uploader>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">代理人委托书
<text style="font-size: small; color: antiquewhite;">[需加盖劳务单位的公章委托书照片]</text>
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload6" limit="{{limit}}" fileUrlArray="{{form.subDeptLeaderPowerPath}}"></file-uploader>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">委托代理人姓名</view>
<view class="inspect_info_content">
<input placeholder="请填写委托代理人姓名" placeholder-style="color:#6777aa;" model:value="{{form.subDeptLeaderName}}" bindinput="inputLeaderName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">委托代理人身份证号</view>
<view class="inspect_info_content">
<input placeholder="请填写委托代理人身份证号" placeholder-style="color:#6777aa;" model:value="{{form.subDeptLeaderCode}}" bindinput="inputLeaderCode" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">委托代理人联系电话</view>
<view class="inspect_info_content">
<input placeholder="请填写委托代理人联系电话" placeholder-style="color:#6777aa;" bindinput="subDeptLeaderPhone" model:value="{{form.subDeptLeaderPhone}}" disabled class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="submitSubDeptValues">下 一 步</view>
</view>
</view>
</view>
<view wx:if="{{signType=='2'}}">
<view class="header_title">
<view class="header_title_row">
<view class="header_name">{{title}}</view>
</view>
</view>
<view class="max_content">
<project-select init="{{initProject}}"></project-select>
<van-steps steps="{{ flowNodes }}" active="{{ active }}" />
<view class="inspect_info">
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">单位名称</view>
<view class="inspect_info_content">
<input placeholder="请填写单位名称" placeholder-style="color:#6777aa;" model:value="{{form.subDeptName}}" class="inspect_input_fill_in" disabled />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">岗位类型</view>
<view class="inspect_info_content">
<voucher-select columns="{{craftPostList}}" placeholder="请选择岗位类型" selectValue="{{form.craftPost}}"></voucher-select>
</view>
</view>
<view class="inspect_info_list">
<van-row>
<van-col span="12">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">个人身份证正面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload7" iconClass="in-zcard-click" limit="{{limit}}"></file-uploader>
</view>
</van-col>
<van-col span="12">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">个人身份证反面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload8" iconClass="in-fcard-click" limit="{{limit}}"></file-uploader>
</view>
</van-col>
</van-row>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">个人半身近照
<text style="font-size: small; color: antiquewhite;">[进场扫脸,请上传清晰照片]</text>
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" limit="{{limit}}"></file-uploader>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">劳务单位委托书
<text style="font-size: small; color: antiquewhite;">[需加盖劳务单位的公章委托书照片]</text>
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" limit="{{limit}}"></file-uploader>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">项目经理姓名</view>
<view class="inspect_info_content">
<input placeholder="请填写项目经理姓名" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">项目经理身份证号</view>
<view class="inspect_info_content">
<input placeholder="请填写项目经理身份证号" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">项目经理联系电话</view>
<view class="inspect_info_content">
<input placeholder="请填写项目经理联系电话" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">籍贯地址</view>
<view class="inspect_info_content">
<input placeholder="请填写籍贯地址" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">详细地址</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写详细地址" placeholder-style="color:#6777aa;" maxlength="64" bindblur="onSubDeptCode" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">所属民族</view>
<view class="inspect_info_content">
<input placeholder="请填写所属民族" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">紧急联系人</view>
<view class="inspect_info_content">
<input placeholder="请填写紧急联系人" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">紧急联系人电话</view>
<view class="inspect_info_content">
<input placeholder="请填写紧急联系人电话" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="submitSubUserValues">下 一 步</view>
</view>
</view>
</view>
<view wx:if="{{signType=='3'}}">
<view class="header_title">
<view class="header_title_row">
<view class="header_name">{{title}}</view>
</view>
</view>
<view class="max_content">
<project-select init="{{initProject}}"></project-select>
<van-steps steps="{{ flowNodes }}" active="{{ active }}" />
<view class="inspect_info">
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">单位名称</view>
<view class="inspect_info_content">
<input placeholder="请填写单位名称" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" disabled maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">岗位类型</view>
<view class="inspect_info_content">
<voucher-select columns="{{craftPostList}}" placeholder="请选择岗位类型" selectValue="{{form.craftPost}}"></voucher-select>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">班组工种</view>
<view class="inspect_info_content">
<van-row>
<van-col span="8">
<voucher-select columns="{{craftPostList}}" placeholder="请选择岗位类型" selectValue="{{form.craftPost}}"></voucher-select>
</van-col>
<van-col span="16">
<voucher-select columns="{{craftPostList}}" placeholder="请选择岗位类型" selectValue="{{form.craftPost}}"></voucher-select>
</van-col>
</van-row>
</view>
</view>
<view class="inspect_info_list" wx:if="{{false}}">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">分管工程部位</view>
<view class="inspect_info_content">
<!-- <input placeholder="请选择分管工程部位" placeholder-style="color:#6777aa;" class="inspect_input_fill_in" value="{{showDetailsName}}" data-index="{{index}}" bindtap="onShowPopup" disabled="disabled"/>
<van-popup show="{{ showDetailsPopup }}" bind:close="onClosePopup" position="bottom" round="5">
<van-tree-select items="{{ dataList }}" main-active-index="{{ mainActiveIndex }}" active-id="{{ chidActiveIndex }}" bind:click-nav="onClickNav" bind:click-item="onClickItem">
</van-tree-select>
</van-popup> -->
<select-group-position rectifierData="{{posDataList}}" multiple="{{true}}" bindselected="onAddSend" title="请选择分管工程部位">
</select-group-position>
</view>
</view>
<view class="inspect_info_list">
<van-row>
<van-col span="12">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">个人身份证正面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" iconClass="in-zcard-click" limit="{{limit}}"></file-uploader>
</view>
</van-col>
<van-col span="12">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">个人身份证反面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" iconClass="in-fcard-click" limit="{{limit}}"></file-uploader>
</view>
</van-col>
</van-row>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">个人半身近照
<text style="font-size: small; color: antiquewhite;">[进场扫脸,请上传清晰照片]</text>
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" limit="{{limit}}"></file-uploader>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">劳务单位委托书
<text style="font-size: small; color: antiquewhite;">[需加盖劳务单位的公章委托书照片]</text>
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" limit="{{limit}}"></file-uploader>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">姓名</view>
<view class="inspect_info_content">
<input placeholder="请填写姓名" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">身份证号</view>
<view class="inspect_info_content">
<input placeholder="请填写身份证号" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">联系电话</view>
<view class="inspect_info_content">
<input placeholder="请填写联系电话" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">出生日期</view>
<view class="inspect_info_content">
<voucher-date counts="5" maxDate="{{maxDate}}" placeholder="请选择出生日期" bindchange="onEndTime"></voucher-date>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">籍贯地址</view>
<view class="inspect_info_content">
<input placeholder="请填写籍贯地址" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">详细地址</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写详细地址" placeholder-style="color:#6777aa;" maxlength="64" bindblur="onSubDeptCode" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">所属民族</view>
<view class="inspect_info_content">
<input placeholder="请填写所属民族" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">紧急联系人</view>
<view class="inspect_info_content">
<input placeholder="请填写紧急联系人" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">紧急联系人电话</view>
<view class="inspect_info_content">
<input placeholder="请填写紧急联系人电话" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="submitSubUserValues">下 一 步</view>
</view>
</view>
</view>
<view wx:if="{{signType=='4'}}">
<view class="header_title">
<view class="header_title_row">
<view class="header_name">{{title}}</view>
</view>
</view>
<view class="max_content">
<project-select init="{{initProject}}"></project-select>
<van-steps steps="{{ flowNodes }}" active="{{ active }}" />
<view class="inspect_info">
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">单位名称</view>
<view class="inspect_info_content">
<input placeholder="请填写单位名称" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" disabled maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">班组名称</view>
<view class="inspect_info_content">
<input placeholder="请填写班组名称" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" disabled maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">班组长姓名</view>
<view class="inspect_info_content">
<input placeholder="请填写班组长姓名" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" disabled maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<van-row>
<van-col span="12">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">个人身份证正面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" iconClass="in-zcard-click" limit="{{limit}}"></file-uploader>
</view>
</van-col>
<van-col span="12">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">个人身份证反面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" iconClass="in-fcard-click" limit="{{limit}}"></file-uploader>
</view>
</van-col>
</van-row>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">个人半身近照
<text style="font-size: small; color: antiquewhite;">[进场扫脸,请上传清晰照片]</text>
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" limit="{{limit}}"></file-uploader>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">姓名</view>
<view class="inspect_info_content">
<input placeholder="请填写姓名" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">身份证号</view>
<view class="inspect_info_content">
<input placeholder="请填写身份证号" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">联系电话</view>
<view class="inspect_info_content">
<input placeholder="请填写联系电话" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">出生日期</view>
<view class="inspect_info_content">
<voucher-date counts="5" maxDate="{{maxDate}}" placeholder="请选择出生日期" bindchange="onEndTime"></voucher-date>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">籍贯地址</view>
<view class="inspect_info_content">
<input placeholder="请填写籍贯地址" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">详细地址</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写详细地址" placeholder-style="color:#6777aa;" maxlength="64" bindblur="onSubDeptCode" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">所属民族</view>
<view class="inspect_info_content">
<input placeholder="请填写所属民族" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">紧急联系人</view>
<view class="inspect_info_content">
<input placeholder="请填写紧急联系人" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">紧急联系人电话</view>
<view class="inspect_info_content">
<input placeholder="请填写紧急联系人电话" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">银行开户网点</view>
<view class="inspect_info_content">
<input placeholder="请填写银行开户网点" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">工资银行卡号</view>
<view class="inspect_info_content">
<input placeholder="请填写工资银行卡号" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="submitSubUserValues">下 一 步</view>
</view>
</view>
</view>
</view>
<view wx:if="{{userPhoneNumber && active==1}}">
<view class="header_title">
<view class="header_title_row">
<view class="header_name">{{title}}</view>
</view>
</view>
<view class="max_content">
<project-select init="{{initProject}}"></project-select>
<van-steps steps="{{ flowNodes }}" active="{{ active }}" />
<view class="modify_video_nav">
<view wx:for="{{eduVideoMenu}}" class="{{videoActive==item.menuId?'active':''}}" wx:key="index" data-index="{{item.menuId}}">
<text>{{item.menuName}}</text>
</view>
</view>
<view class="shipinjindu">
<view class="shipinjindu-bottom">
<view class="shipinjindu-bottom-insder">
<video id="myVideo" src="{{videoUrl}}" title="{{videoTitle}}" autoplay="{{true}}" bindended="onClickAfterVideo" show-bottom-progress="{{false}}" vslide-gesture="{{true}}" enable-progress-gesture="{{false}}" style="width: 100%;height: 100%;" />
</view>
</view>
<view class="problem_video_to">
<view class="problem_submit_to_btn3 problem_submit_to_eq" bindtap="onClickPrevsVideo">学习上一个</view>
<view class="problem_submit_to_btn3 problem_submit_to_eq" bindtap="onClickAfterVideo">学习下一个</view>
</view>
</view>
<van-notice-bar wrapable left-icon="volume" text="学习过程中切换页面将重新开始学习!学习完所有视频后才可以开始考试。" />
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn2 problem_submit_to_back" bindtap="onClickPreviousNode">返 回 登 记</view>
<view class="problem_submit_to_btn2 problem_submit_to_save" bindtap="startBusEduExamNode">开 始 考 试</view>
</view>
</view>
<view wx:if="{{userPhoneNumber && active==2 && !isPapers}}">
<view class="header_title">
<view class="header_title_row">
<view class="header_name">{{title}}</view>
</view>
</view>
<view class="max_content">
<project-select init="{{initProject}}"></project-select>
<van-steps steps="{{ flowNodes }}" active="{{ active }}" />
<view class="kaoshimianban_1">
<view class="time-unit">
<text class="time-unit-number">离考试结束:{{ timeStr }}</text>
</view>
<view class="ksmv">
<view class="ksgk">
<van-row>
<van-col span="12">
<view class="safety_inspect_title_2">试卷分数</view>
<safety-number number="{{busExamInfos.fullMark}}"></safety-number>
</van-col>
<van-col span="12">
<view class="safety_inspect_title_2">及格分数</view>
<safety-number number="{{busExamInfos.passMark}}"></safety-number>
</van-col>
</van-row>
</view>
</view>
</view>
<view class="inspect_for_scroll" wx:for="{{busExamQuestions}}" wx:key="index">
<view class="inspect_for_bgd">
<view class="inspect_list_title">
<view class="inspect_list_title_label inspect_list_title_width">
<view class="inspect_list_title_number">{{index < 9 ?'0'+(index+1):(index+1)}}</view>
<view class="module_title module_title_flex inspect_list_title_text" style="font-weight: 600;">第{{index < 9 ?'0'+(index+1):(index+1)}}题({{item.mark}}分)</view>
<view class="code_label_4 code_label_blue">
<text wx:if="{{item.questionType==1}}">单选题</text>
<text wx:if="{{item.questionType==2}}">多选题</text>
<text wx:if="{{item.questionType==3}}">判断题</text>
</view>
</view>
</view>
<view class="inspect_list_info">
<view class="inspect_list_info_details">
<view class="inspect_list_info_data_2">
<view class="inspect_list_info_data_prop bs">{{item.questionTitle}}</view>
<view wx:if="{{item.questionType==1}}" class="question_body">
<view wx:for="{{item.questionOption}}" wx:key="pancan" wx:for-item="pancan" wx:for-index="innerIndex" bindtap="toggleRadio" class="option" data-id="{{index+'_'+innerIndex}}">
<view class="icon">
<image src="{{pancan.selected ? '/images/radio-selected.png' : '/images/radio.png'}}" />
</view>
<view class="content {{pancan.selected?'ac':''}}">{{pancan.opt}} : {{pancan.result}}</view>
</view>
</view>
<view wx:else class="question_body">
<view wx:for="{{item.questionOption}}" wx:key="pancan" wx:for-item="pancan" wx:for-index="innerIndex" bindtap="toggleCheckbox" class="option" data-id="{{index+'_'+innerIndex}}">
<view class="icon">
<image src="{{pancan.selected ? '/images/radio-selected.png' : '/images/radio.png'}}" />
</view>
<view class="content {{pancan.selected?'ac':''}}">{{pancan.opt}} : {{pancan.result}}</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn2 problem_submit_to_back" bindtap="onClickPreviousNode">返 回 学 习</view>
<view class="problem_submit_to_btn2 problem_submit_to_save" bindtap="submitThePapers">提 交 试 卷</view>
</view>
</view>
<view wx:if="{{userPhoneNumber && active==2 && isPapers}}">
<view class="header_title">
<view class="header_title_row">
<view class="header_name">{{title}}</view>
</view>
</view>
<view class="max_content">
<project-select init="{{initProject}}"></project-select>
<van-steps steps="{{ flowNodes }}" active="{{ active }}" />
<view class="kaoshimianban">
<view class="time-unit">
<text class="timeline_for_state_2 timeline_for_state_6" wx:if="{{busExamInfos.passMark>busExamInfos.userMark}}">很 遗 憾 考 试 不 通 过</text><text class="timeline_for_state_1 timeline_for_state_6" wx:if="{{busExamInfos.passMark<=busExamInfos.userMark}}">恭 喜 考 试 通 过</text>
</view>
<view class="problem_submit_to" wx:if="{{isPapers}}">
<view wx:if="{{busExamInfos.passMark>busExamInfos.userMark}}" class="problem_submit_to_btn2 problem_submit_to_back" bindtap="onClickPreviousNode">返 回 学 习</view>
<view class="problem_submit_to_btn2 problem_submit_to_save" wx:if="{{busExamInfos.passMark>busExamInfos.userMark}}" bindtap="anewBusEduQuestion">重 新 考 试</view>
<view class="problem_submit_to_btn2 problem_submit_to_save" wx:if="{{busExamInfos.passMark<=busExamInfos.userMark}}" bindtap="startBusEduExamNode">立 即 签 署 安 全 承 诺 书</view>
</view>
</view>
<view class="inspect_for_scroll" wx:for="{{busExamQuestions}}" wx:key="index">
<view class="inspect_for_bgd">
<view class="inspect_list_title">
<view class="inspect_list_title_label inspect_list_title_width">
<view class="inspect_list_title_number">{{index < 9 ?'0'+(index+1):(index+1)}}</view>
<view class="module_title module_title_flex inspect_list_title_text" style="font-weight: 600;">第{{index < 9 ?'0'+(index+1):(index+1)}}题({{item.mark}}分)</view>
<view class="code_label_4 code_label_blue">
<text wx:if="{{item.questionType==1}}">单选题</text>
<text wx:if="{{item.questionType==2}}">多选题</text>
<text wx:if="{{item.questionType==3}}">判断题</text>
</view>
</view>
</view>
<view class="inspect_list_info">
<view class="inspect_list_info_details">
<view class="inspect_list_info_data_2">
<view class="inspect_list_info_data_prop bs">{{item.questionTitle}}</view>
<view wx:if="{{item.questionType==1}}" class="question_body">
<view wx:for="{{item.questionOption}}" wx:key="pancan" wx:for-item="pancan" wx:for-index="innerIndex" bindtap="toggleRadio" class="option" data-id="{{index+'_'+innerIndex}}">
<view class="icon">
<image src="{{pancan.selected ? '/images/radio-selected.png' : '/images/radio.png'}}" />
</view>
<view class="content {{pancan.selected?'ac':''}}">{{pancan.opt}} : {{pancan.result}}</view>
</view>
</view>
<view wx:else class="question_body">
<view wx:for="{{item.questionOption}}" wx:key="pancan" wx:for-item="pancan" wx:for-index="innerIndex" bindtap="toggleCheckbox" class="option" data-id="{{index+'_'+innerIndex}}">
<view class="icon">
<image src="{{pancan.selected ? '/images/radio-selected.png' : '/images/radio.png'}}" />
</view>
<view class="content {{pancan.selected?'ac':''}}">{{pancan.opt}} : {{pancan.result}}</view>
</view>
</view>
<view class="inspect_list_info_position crd" wx:if="{{isPapers}}">正确答案:<text class="color_purple">{{item.answer}}</text> 用户答案:<text class="color_purple">{{item.userAnswer}}</text><text class="timeline_for_state_1 rdc" wx:if="{{item.answer==item.userAnswer}}">回答正确</text><text class="timeline_for_state_2 rdc" wx:if="{{item.answer!=item.userAnswer}}">回答错误</text></view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<view wx:if="{{userPhoneNumber && active==3}}">
<view class="header_title">
<view class="header_title_row">
<view class="header_name">{{title}}</view>
</view>
</view>
<view class="max_content">
<project-select init="{{initProject}}"></project-select>
<van-steps steps="{{ flowNodes }}" active="{{ active }}" />
<view class="doc">
<view class="title">安全质量承诺书</view>
<view class="content">为了个人的安全健康,为了家庭的幸福美满,为了企业的稳定发展,本人在工作中,自愿签订并遵守以下承诺:</view>
<view class="content">忠诚企业、恪尽职守、珍爱生命、铸造精品!</view>
<view class="content">我坚决做到:遵守规章制度、遵守操作规程、遵守劳动纪律,不出事故、不出次品、不留隐患!我将以实际行动,确保企业生产安全、产品优质!”</view>
<view class="content">对于以上承诺,本人自觉遵守,如有违反,本人愿承担责任。</view>
<view class="content">本承诺书自签字日起生效。</view>
<view class="foot">承诺人(签字):{{fileForm.fName}}</view>
<view class="foot">岗 位(工种):{{fileForm.fPost}}</view>
<view class="foot">签 署 日 期 {{fileForm.fDate}}</view>
</view>
<view class="doc">
<view class="title">健康承诺书</view>
<view class="content">本人<text class="underlines">{{fileForm.fName}}</text>,性别<text class="underlines">{{fileForm.fSex}}</text>身份证号<text class="underlines"> {{fileForm.fCardId}}</text>,从事岗位<text class="underlines">{{fileForm.fPost}}</text><text class="underlines"> 有 / 无 </text>高血压、心脏病等基础身体健康问题;<text class="underlines"> 有 / 无 </text>严重呼吸系统疾病、严重心脑血管疾病、肝肾疾病、恶性肿瘤以及药物无法有效控制的高血压和糖尿病等基础性病症状征兆,能够胜任本岗位相应工作,我向公司承诺以上所述信息无隐瞒、无虚报,如有隐瞒造成所有后果由本人承担,于项目无关。</view>
<view class="foot">承诺人(签字):{{fileForm.fName}}</view>
<view class="foot">承 诺 日 期 {{fileForm.fDate}}</view>
</view>
<view class="doc">
<view class="title">作业工人安全生产责任书</view>
<view class="content">(一)作业工人对自己施工中的安全负责。</view>
<view class="content">(二)作业工人应严格执行劳动纪律和现场安全生产管理制度,严格执行安全操作规程和安全技术交底,做到“四不伤害”即:我不伤害自己,我不伤害别人,我不被别人伤害。</view>
<view class="content">(三)拒绝强令冒险作业。发现隐患及防护设施缺陷应及时向安全管理人员报告。</view>
<view class="content">(四)正确使用和穿戴安全防护用品,自觉维护现场安全防护设施,未经批准不得随意移动拆除防护设施。</view>
<view class="content">(五)发生事故应及时报告现场管理人员,并在项目负责人的指挥下积极配合施救。</view>
<view class="content">(六)严格遵守本单位的安全生产规章制度和操作规程,服从管理,正确佩戴和使用劳动防护用品。</view>
<view class="content">(七)接受安全生产教育和培训,掌握本职工作所需的安全生产知识,提高安全生产技能,增强事故预防和应急处理能力。</view>
<view class="content">从业人员发现事故隐患或者其他不安全因素,应当立即向现场安全生产管理人员或者本单位负责人报告;接到报告的人员应当及时予以处理。</view>
<view class="foot">承诺人(签字):{{fileForm.fName}}</view>
<view class="foot">承 诺 日 期 {{fileForm.fDate}}</view>
</view>
<view class="doc">
<view class="title">安全防护用品使用图解</view>
<view class="header">进入施工现场必须根据要求按照下图要求佩戴好相应安全防护用品。</view>
<view class="image">
<image src="https://guangzhou.sxyanzhu.com/YZLJXM/profile/static/file_doc.png" width=""></image>
</view>
<view class="header">本人已经掌握安全防护用品佩戴方法,并严格遵守!</view>
<view class="foot">承诺人(签字):{{fileForm.fName}}</view>
<view class="foot">承 诺 日 期 {{fileForm.fDate}}</view>
</view>
<view class="doc">
<view class="title">作业人员岗位告知书</view>
<view class="content">你将从事的普工作业,存在着车辆伤害、机械伤害、坠落、物体打击、触电等岗位危险,予以告知。你在作业时务必遵守相关的规章制度、专项工程安全施工方案、安全技术措施,并熟记作业要点及其特性,掌握好相应的安全防范技能;进入作业场所后,要进行重新检查,发现异常情况和不安全因素必须及时采取有效措施排除;要正确使用和佩戴劳动保护用品,在做好自我防范的同时,还要认真贯彻联保互保。同时对以下针对性措施必须经常对照执行:</view>
<view class="content">1、在道路上工作时密切注意来往车辆做到“一看二停三通过”不抢一分一秒保证自己不被车辆伤害。</view>
<view class="content">2、从事开挖作业时先观察好周边情况和环境在最坏的情况能够不伤及自身和他人的情况下再作业。</view>
<view class="content">3、从事搬运石块等工作时要严格注意身边的人在呼喊并应答、引起对方注意并退让到安全地带后才可以工作。同时要积极注意自身安全不搬运过重的石块经常检查铁锹、榔头、扁担等工具一有损坏立即更换或修复。</view>
<view class="content">4、在电力线底下、光缆附近施工时必须严格按照安全技术交底时刻提高警惕保护好电力电线、国防光缆。</view>
<view class="content">5、严禁在河流、池塘等地游泳、洗澡由此引发的后果由你承担。</view>
<view class="content">6、做好防火、防盗工作保护好自己的财物。</view>
<view class="content">7、工作时必须佩戴好劳动防护用品带好安全帽并系好下额带。</view>
<view class="content">8、密切注意工程施工机械在挖掘机、压路机、推土机等机械附近施工时必须面向机械并及时避让确保安全。严禁在压路机等机械下休息严禁在施工现场打闹、追逐。</view>
<view class="content">9、工作时听从班组长统一指挥严格遵守劳动纪律、三级安全教育及安全交底内容。</view>
<view class="foot">人 员 签 字 {{fileForm.fName}}</view>
<view class="foot">签 字 日 期 {{fileForm.fDate}}</view>
</view>
<view class="doc">
<view class="title">三级安全教育</view>
<view class="title">公司教育</view>
<view class="header">进行安全基本知识、法规、法制教育,主要内容是:</view>
<view class="content">1、党和国家的安全生产方针、政策。</view>
<view class="content">2、安全生产法规、标准和安全知识。</view>
<view class="content">3、企业安全生产规章制度、安全纪律。</view>
<view class="content">4、安全生产形势及重大事故安全教训。</view>
<view class="content">5、安全生产事故后如何抢救伤员、排险、保护现场和及时进行报告。</view>
<view class="foot">人 员 签 字 {{fileForm.fName}}</view>
<view class="foot">签 字 日 期 {{fileForm.fDate}}</view>
</view>
<view class="doc">
<view class="title">三级安全教育</view>
<view class="title">项目部教育</view>
<view class="header">进行现场规章制度和遵章守纪教育,主要内容是:</view>
<view class="content">1、本项目施工特点、可能存在的不安全因素及必须遵守的事项。</view>
<view class="content">2、本单位(包括施工、生产现场)安全生产制度、规定和安全注意事项。</view>
<view class="content">3、本工种的安全技术操作规程。</view>
<view class="content">4、高处作业、机械设备、电气安全基础知识。</view>
<view class="content">5、防火、防毒、防尘、防爆知识及紧急情况安全处置和安全疏散知。</view>
<view class="content">6、雨季防雷、防台、防汛及特殊气候的相关安全知识。</view>
<view class="content">7、防护用品发放标准及防护用品、用具使用的基本知识。</view>
<view class="content">8、学习JGJ146-2004建筑施工现场环境与卫生标准。</view>
<view class="foot">人 员 签 字 {{fileForm.fName}}</view>
<view class="foot">签 字 日 期 {{fileForm.fDate}}</view>
</view>
<view class="doc">
<view class="title">三级安全教育</view>
<view class="title">班组教育</view>
<view class="header">进行本工种岗位安全操作及安全制度、纪律教育,主要内容是:</view>
<view class="content">1、本班组作业特点及安全操作规程。</view>
<view class="content">2、本班组安全活动制度及纪律。</view>
<view class="content">3、正确使用安全防护装置(设施)及个人劳动防护用品。</view>
<view class="content">4、本岗位易发生事故的不安全因素及其防范对策本工种事故案例剖析。</view>
<view class="content">5、本岗位的作业环境及使用的机械设备、工具的安全。</view>
<view class="foot">人 员 签 字 {{fileForm.fName}}</view>
<view class="foot">签 字 日 期 {{fileForm.fDate}}</view>
</view>
<view class="doc">
<sign bind:returnData="sign" canvasId="canvas" class="myCanvas"></sign>
</view>
</view>
<view class="class_btnall">
<view wx:if="{{signPath==''}}" class="problem_submit_to_btn_3 {{signTime>0?'':'problem_submit_to_sign'}}" bindtap="startSignFiles">{{signTime>0?'阅 读 安 全 ':'签 署 '}}承 诺 书<text wx:if="{{signTime>0}}">{{signTime}}</text></view>
<view wx:if="{{signPath!=''}}" class="problem_submit_to_btn_3 problem_submit_to_save_s" bindtap="submitSignFiles">确 认 并 提 交 承 诺 书</view>
</view>
</view>

View File

@ -1 +1,325 @@
/* pages/project_qr/index.wxss */
/* pages/login/login.wxss */
.page {
height: 100vh;
background: #191d28 url("http://fileimg.makalu.cc/CORE_40247DD946964A15AA0D4000E1031E19.png") no-repeat bottom/100%;
}
.login_logo {
text-align: center;
padding: 50rpx 0rpx;
}
.login_logo image {
height: 120rpx;
margin-top: 18%;
}
.login_title {
height: 100rpx;
line-height: 100rpx;
color: #DDDDDD;
font-size: 40rpx;
font-weight: bold;
text-align: center;
word-spacing: 30rpx;
background: url("https://guangzhou.sxyanzhu.com/YZLJXM/profile/static/yanzhu_title.png") no-repeat left/100% 100%;
}
.login_bg {
margin-top: 10%;
border-radius: 20rpx;
padding: 15rpx 60rpx;
}
.wxlogin_btn {
margin: 40rpx 20rpx 0;
line-height: 80rpx;
}
.wxlogin_btn button {
width: 100%;
height: 80rpx;
background-image: linear-gradient(#5bffa4, #2d7d33);
border-radius: 80rpx;
text-align: center;
color: #FFFFFF;
font-weight: 300;
}
.problem_submit_to_btn {
color: #ffffff;
padding: 20rpx 80rpx;
border-radius: 5px;
}
.problem_submit_to_btn2 {
color: #ffffff;
padding: 20rpx 50rpx;
border-radius: 5px;
}
.problem_submit_to_btn3 {
color: #ffffff;
padding: 10rpx 20rpx;
border-radius: 5px;
}
.van-steps {
background-color: transparent !important;
}
.van-step--horizontal .van-step__circle-container {
background-color: transparent !important;
}
.van-steps--horizontal {
padding: 10px 20px !important;
}
.van-sidebar {
background-color: #212737 !important;
}
.van-sidebar-item {
color: #EFEFEF !important;
background-color: #212737 !important;
}
.van-sidebar-item--selected {
border-color: var(--sidebar-selected-border-color, #8369f5) !important;
background-color: #252d41 !important;
color: #83a5ef !important;
}
.van-tree-select__content {
background-color: #252d41 !important;
}
.van-tree-select__item--active {
color: var(--tree-select-item-active-color, #8369f5) !important;
}
.van-tree-select {
height: 800rpx !important;
}
.van-popup.van-popup--bottom {
margin-bottom: -55rpx !important;
}
.problem_video_to {
padding: 15rpx;
display: flex;
align-items: center;
justify-content: space-around;
margin-top: -25rpx;
width: 50%;
margin-left: auto;
margin-right: auto;
}
/* 视频进度 */
.shipinjindu {
width: 100%;
height: 520rpx;
border: 1px solid #1e2336;
background-color: #1e2336;
padding-top: 20rpx;
margin-bottom: 40rpx;
font-size: 26rpx;
border-radius: 15rpx;
}
.shipinjindu-top {
display: flex;
align-items: center;
width: 100%;
height: 60rpx;
}
.shipinjindu-bottom {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 460rpx;
}
.shipinjindu-bottom-insder {
width: 90%;
height: 400rpx;
}
.inspect_list_title_text_3 {
width: calc(100% - 280rpx);
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.option{
padding-top: 8px;
padding-bottom: 8px;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: flex-start;
align-items: flex-start;
}
.icon image{
width: 22px;
height: 22px;
background-color: #eeeeee;
}
.content{
padding-left: 5px;
}
.bs{
font-weight: 800;
color: #1890ff;
}
.ac{
font-weight: 400;
color: #1890ff;
}
/* 考试面板 */
.kaoshimianban {
width: 100%;
height: 220rpx;
border: 1px solid #1e2336;
background-color: #1e2336;
padding-top: 20rpx;
margin-bottom: 20rpx;
font-size: 26rpx;
border-radius: 15rpx;
}
/* 考试面板 */
.kaoshimianban_1 {
width: 100%;
height: 280rpx;
border: 1px solid #1e2336;
background-color: #1e2336;
padding-top: 20rpx;
margin-bottom: 20rpx;
font-size: 26rpx;
border-radius: 15rpx;
}
.doc{
border: 1px solid #1e2336;
background-color: #1e2336;
font-size: 28rpx;
border-radius: 15rpx;
padding: 30rpx;
color: #7c95d7;
margin-bottom: 15rpx;
}
.doc .title{
text-align: center;
font-size: 20px;
font-weight: 600;
}
.doc .header{
text-align: center;
font-size: 15px;
font-weight: 800;
padding: 15rpx 0rpx;
}
.doc .image{
text-align: center;
padding: 15rpx 0rpx;
}
.doc .content{
text-indent: 2ch;
font-size: 15px;
padding: 15rpx;
line-height: 25px;
}
.doc .content .underlines{
padding-left: 10rpx;
padding-right: 10rpx;
text-decoration: underline;
}
.doc .foot{
margin-left: 35%;
font-size: 15px;
padding: 15rpx;
}
.time-unit{
text-align: center;
}
/* 时间单元的数字样式 */
.time-unit-number {
font-size: 24px;
font-weight: bold;
color: #1890ff;
}
.ksmv{
padding: 10rpx 80rpx;
}
.crd{
text-align: right;
}
.rdc{
margin-left: 20rpx;
}
.timeline_for_state_6 {
padding: 8px 60rpx !important;
height: 60rpx !important;
width: 280rpx !important;
line-height: 60rpx !important;
}
.problem_submit_to_btn_3 {
padding: 30rpx 5rpx;
width: 50%;
text-align: center;
border-radius: 10rpx;
background: #3e4148;
}
.problem_submit_to_btn_3:active {
background: #292d35;
}
.class_btnall {
width: 100%;
position: fixed;
bottom: 28rpx;
display: flex;
z-index: 25;
align-items: center;
justify-content: space-around;
}
.problem_submit_to_sign {
background: #1890ff;
}
.problem_submit_to_sign:active {
background: #2e95f5;
}
.problem_submit_to_save_s {
background: #513ea7;
}
.problem_submit_to_save_s:active {
background: #372a70;
}

View File

@ -25,5 +25,6 @@
"editorSetting": {
"tabIndent": "auto",
"tabSize": 4
}
},
"simulatorPluginLibVersion": {}
}

View File

@ -8,10 +8,17 @@
"condition": {
"miniprogram": {
"list": [
{
"name": "",
"pathName": "pages/project_qr/index",
"query": "QRPID=116&signType=1",
"launchMode": "default",
"scene": null
},
{
"name": "",
"pathName": "pages/login/login",
"query": "proId=111",
"query": "proId=1",
"launchMode": "default",
"scene": null
}

View File

@ -8,16 +8,22 @@ const app = getApp()
function doRequest(url, method = 'GET', data, header = {}) {
//安全白名单判断
if (config.noSecuritys.indexOf(url) == -1 && !getToken()) {
removeToken();
wx.redirectTo({
url: '../login/login',
});
if(url.indexOf("/wxApi/")<0){
if (config.noSecuritys.indexOf(url) == -1 && !getToken()) {
removeToken();
wx.redirectTo({
url: '../login/login',
});
}
}
//POST请求设置数据来源为小程序...
if(method=='post' || method=='POST'){
data.dataSource = "1";
wx.showLoading({
mask: true,
title: url == config.noSecuritys[1] ? '登录中' : '加载中'
})
}
wx.showLoading({
mask: true,
title: url == config.noSecuritys[1] ? '登录中' : '加载中'
})
return new Promise((resolve, reject) => {
wx.request({
url: config.baseUrl + url,
@ -30,7 +36,7 @@ function doRequest(url, method = 'GET', data, header = {}) {
},
timeout: config.timeOut,
success: function (res) {
wx.hideLoading()
wx.hideLoading({success: (res) => {}});
const code = res.data.code || 200
if (code === 401) {
removeToken();
@ -47,9 +53,9 @@ function doRequest(url, method = 'GET', data, header = {}) {
}
},
fail: function (error) {
wx.hideLoading()
wx.hideLoading({success: (res) => {}});
app.toast(error);
reject(error)
reject(error);
}
})
})
@ -109,6 +115,47 @@ export function syncFileUpload(file) {
})
}
/**
* 这里考虑上传异步问题封装为同步
*/
export function securityFileUpload(file) {
wx.showLoading({
mask: true,
title: '正在上传资源'
})
return new Promise((resolve, reject) => {
wx.uploadFile({
url: config.baseUrl + '/file/NoSecurity/upload', // 上传的服务器接口地址
filePath: file,
header: {
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
},
name: "file", //上传的所需字段,后端提供
success: (res) => {
// 上传完成操作
wx.hideLoading()
let resJson = JSON.parse(res.data)
const code = resJson.code || 200
if (code != 200) {
app.toast(resJson.msg);
setTimeout(() => {
resolve(resJson);
}, 800)
resolve(resJson);
} else {
resolve(resJson);
}
},
fail: (error) => {
wx.hideLoading()
//上传失败修改pedding为reject
app.toast("网络出错,上传失败")
reject(error)
}
});
})
}
export function request(options) {
if(options.method=='get' && options.params){
options.url = options.url+"?"+options.params;

View File

@ -0,0 +1,17 @@
module.exports = {
stringify : function(item){
return JSON.stringify(item)
},
getStyle: function(status,code,answer,selected){
console.log(code,answer,selected)
if(status > 0 && code == answer){
return 'right'
}
if(status > 0 && code == selected && answer != selected){
return 'wrong'
}
if(code!=selected){
return ''
}
}
}

View File

@ -1,6 +1,6 @@
{
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
"projectname": "YanZhuProjectApp",
"projectname": "yanzhu-ui-app",
"setting": {
"compileHotReLoad": true,
"urlCheck": false

View File

@ -249,7 +249,8 @@ const data = reactive({
trainTitle:[{ required: true, message: "培训名称不能为空", trigger: "blur" }],
trainLevel:[{ required: true, message: "培训级别不能为空", trigger: "blur" }],
craftPost:[{ required: true, message: "工种岗位不能为空", trigger: "blur" }],
sortBy:[{ required: true, message: "显示排序不能为空", trigger: "blur" },{ type: "number", message: "请输入数字类型", trigger: "blur" }],
sortBy:[{ required: true, message: "显示排序不能为空", trigger: "blur" }
],
trainFilePath:[{ required: true, message: "培训视频不能为空", trigger: "blur" }],
trainFileImage:[{ required: true, message: "视频主图不能为空", trigger: "blur" }],
},

View File

@ -124,6 +124,12 @@
<el-input v-model="form.contractInfos" maxlength="2000" show-word-limit type="textarea" rows="4"
placeholder="请输入承包范围" />
</el-form-item>
<el-form-item label="计划开工时间" v-if="form.subDeptType == '4' || form.subDeptType == '5'">
</el-form-item>
<el-form-item label="计划完工时间" v-if="form.subDeptType == '4' || form.subDeptType == '5'">
</el-form-item>
</el-tab-pane>
<el-tab-pane label="单位信息" name="infos">
<el-form-item label="经营范围">