This commit is contained in:
2025-11-24 08:50:51 +08:00
parent 34dc3b118c
commit ea9aa6a1b9
19 changed files with 1894 additions and 762 deletions
@@ -46,6 +46,7 @@ RoleConstant {
BRANCH_UNION_TIAOJIE_WY("分工会调解委员"),
UNIT_PARTY_SECRETARY("单位党委书记"),
UNIT_MANAGER("单位负责人"),
TEACHER_CONGRESS_DELEGATE_FORMAL("教代会正式代表"),
TEACHER_CONGRESS_DELEGATE_ATTENDANCE("教代会列席代表"),
@@ -0,0 +1,35 @@
package com.budwk.app.flow.handler;
import com.budwk.app.flow.engine.AssignmentHandler;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.model.TaskModel;
import com.budwk.app.sys.models.Sys_user;
import org.nutz.lang.Lang;
import java.util.List;
/**
* @author zhf
* @date 2025/11/22 16:06
* @description 指定用户
*/
public class FlowAssignUserHandler implements AssignmentHandler {
@Override
public List<String> assign(TaskModel model, Execution execution) {
String userId = execution.getArgs().getStr("userId");
if (Lang.isEmpty(userId)){
throw new RuntimeException("流程参数错误!");
}
return List.of(userId);
}
@Override
public String getMessage() {
return "指定下一个流程人(根据args中的userId)";
}
@Override
public int getOrder() {
return AssignmentHandler.super.getOrder();
}
}
@@ -0,0 +1,51 @@
package com.budwk.app.flow.handler;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.flow.engine.AssignmentHandler;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
import com.budwk.app.flow.engine.model.TaskModel;
import com.budwk.app.sys.models.Sys_role;
import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.sys.services.SysRoleService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.lang.Lang;
import java.util.List;
/**
* @author zhf
* @date 2025/11/22 15:56
* @description 单位负责人
*/
public class FlowUnitManagerHandler implements AssignmentHandler {
@Override
public List<String> assign(TaskModel model, Execution execution) {
String unitId = SecurityUtil.getUnitId();
SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class);
Sys_role role = sysRoleService.getByCode(RoleConstant.UNIT_MANAGER);
List<Sys_user_role> roles = ServiceContext.find(Dao.class).query(
Sys_user_role.class,
Cnd.where(Sys_user_role::getRoleId, "=", role.getId())
.and(Sys_user_role::getUnitId, "=", unitId)
);
if (Lang.isEmpty(roles)) {
throw new RuntimeException("当前登录用户所在单位未设置单位负责人,请联系校工会进行设置。");
}
return roles.stream().map(Sys_user_role::getUserId).toList();
}
@Override
public String getMessage() {
return "获取当前登录用户所在单位负责人";
}
public int getOrder() {
return AssignmentHandler.super.getOrder();
}
}
@@ -5,6 +5,7 @@ import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
@@ -296,119 +297,20 @@ public class TeacherCongressDelegatePushController {
@ApiOperation("提交到资格审查")
@SaCheckPermission("tc.delegate.push")
@SLog(tag = "代表管理-代表推选", msg = "提交到资格审查")
public Result batchSubmit(@Param("ids") @Valid String[] ids, String sessionId) {
Teacher_congress_quota_allocation allocation = dao.fetch(Teacher_congress_quota_allocation.class,
Cnd.where(Teacher_congress_quota_allocation::getSessionId, "=", sessionId)
.and(Teacher_congress_quota_allocation::getUnionId, "=", SecurityUtil.getUnionId()));
if (allocation == null) {
return Result.error("请先设置名额分配");
public Result batchSubmit(String sessionId) {
String str = teacherCongressDelegatePushService.batchSubmitWhere(sessionId, "JG");
if (StrUtil.isNotBlank(str)) {
return Result.error(str);
}
if (allocation.getAllocationNum() == 0) {
return Result.error("请先设置名额分配");
}
Sql sql = Sqls.create("""
SELECT
info.*,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariable
FROM
teacher_congress_delegate_push info
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id
AND t.taskState = 10
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("info.sessionId", "=", sessionId);
cnd.andEX("info.unionId", "=", SecurityUtil.getUnionId());
SqlExpressionGroup group = new SqlExpressionGroup();
group.or("t.taskName", "!=", "53ff0c2a-ba93-45e9-a9fd-db51cdab3080");
group.or("t.taskName", "is", null);
cnd.and(group);
cnd.and("ins.state", "!=", ProcessInstanceStateEnum.REJECT.getCode());
cnd.groupBy("info.id");
sql.setCondition(cnd);
List<NutMap> writeList = baseService.listMap(sql);
// 已上报总人数
int total = writeList.size();
// 已上报女代表人数
int female = (int) writeList.stream().filter(v -> List.of("", "女性").contains(v.getString("sex"))).count();
// 已上报高级职称人数
int seniorTeacher = (int) writeList.stream().filter(v -> v.getBoolean("seniorTeacher")).count();
//已上报中级职称及以下代表数
int intermediateBelow = (int) writeList.stream().filter(v -> v.getBoolean("intermediateBelow")).count();
//已上报干部代表数
int cadre = (int) writeList.stream().filter(v -> v.getBoolean("cadre")).count();
//已上报工人代表数
int worker = (int) writeList.stream().filter(v -> v.getBoolean("worker")).count();
// 已上报专任教师人数
int ordinaryTeacher = (int) writeList.stream().filter(v -> v.getBoolean("ordinaryTeacher")).count();
// 已上报45岁以下代表
int under45 = (int) writeList.stream().filter(v -> Convert.toInt(v.getInt("age"), 0) <= 45).count();
StringBuffer tips = new StringBuffer();
if (total > allocation.getAllocationNum()) {
tips.append("上报总人数超出分配名额!");
}
if (total < allocation.getAllocationNum()) {
tips.append("上报总人数不满足分配名额!");
}
if (seniorTeacher < allocation.getSeniorTeaNum()) {
tips.append("高级职称专任教师数不满足分配名额数!");
}
if (intermediateBelow < allocation.getIntermediateBelowNum()) {
tips.append("中级职称及以下代表数不满足分配名额数!");
}
if (cadre < allocation.getCadreNum()) {
tips.append("干部代表数不满足分配名额数!");
}
if (worker < allocation.getWorkerNum()) {
tips.append("工人代表数不满足分配名额数!");
}
if (female < allocation.getFemaleNum()) {
tips.append("女教师代表数不满足分配名额数!");
}
if (under45 < allocation.getLess45Num()) {
tips.append("45岁以下教师代表数不满足分配名额数!");
}
if (StrUtil.isNotBlank(tips)) {
return Result.error(tips.toString());
}
teacherCongressDelegatePushService.batchSubmit(ids, sessionId);
teacherCongressDelegatePushService.batchSubmit("JG", sessionId);
return Result.success();
}
@At
@ApiOperation("本单位代表上报情况")
@SaCheckPermission("tc.delegate.push")
public Result selfUnionPushMetric(String sessionId, String unionId) {
@SaCheckPermission(value = {"tc.delegate.push", "tc.delegate.push.dwSjAudit"}, mode = SaMode.OR)
public Result selfUnionPushMetric(String sessionId, String unionId,String submitType) {
if (StrUtil.isBlank(unionId)) {
unionId = SecurityUtil.getUnionId();
}
@@ -432,8 +334,12 @@ public class TeacherCongressDelegatePushController {
""");
Cnd cnd = Cnd.NEW();
SqlExpressionGroup group = new SqlExpressionGroup();
group.or("t.taskName", "=", "0cacd1e7-7bb2-47dd-818b-6a73062e0c62");
group.or("t.taskName", "=", "900217e4-4332-4a21-90dd-363b8be17801");
if (submitType.equals("JG")){
group.or("t.taskName", "=", "tcDelegatePushDwSjTj");
}else{
group.or("t.taskName", "=", "tcDelegatePushUnion");
}
group.or("t.taskName", "=", "tcDelegatePushZg");
group.or("t.taskName", "is", null);
cnd.and(group);
cnd.and("ins.state", "!=", ProcessInstanceStateEnum.REJECT.getCode());
@@ -559,7 +465,7 @@ public class TeacherCongressDelegatePushController {
@Param(value = "isFormalOrAttendance") String isFormalOrAttendance, HttpServletResponse response) {
Sql sql;
if (AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())){
if (AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
sql = getSql(pageForm, sessionId, unionId, isFormalOrAttendance);
} else {
sql = getSql(pageForm, sessionId, SecurityUtil.getUnionId(), isFormalOrAttendance);
@@ -672,5 +578,4 @@ public class TeacherCongressDelegatePushController {
}
}
@@ -0,0 +1,146 @@
package com.budwk.app.zhgh.democratic.teachercongress.delegate.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.base.utils.SysOfficeTemplateUtil;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.TeacherCongressDelegatePush;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.List;
/**
* @author zhf
* @date 2025/11/21 17:05
* @description 单位负责人审核
*/
@IocBean
@At("/platform/teacherCongress/delegate/push/dwFzrAudit")
@Ok("json:full")
@Slf4j
@Api(value = "/platform/teacherCongress/delegate/push/dwFzrAudit", tags = "单位负责人审核")
public class TeacherCongressDelegatePushDwFzrAuditController {
@Inject
private Dao dao;
@Inject
private BaseService baseService;
@Inject
private FlowCommonService flowCommonService;
@Inject
private FlowEngine flowEngine;
@At("")
@Ok("beetl:/platform/zhgh/democratic/teachercongress/delegate/push/dwFzrAudit.html")
@SaCheckPermission("tc.delegate.push.dwFzrAudit")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("tc.delegate.push.dwFzrAudit")
public Result pageData(PageForm pageForm,
@Param(value = "sessionId") String sessionId,
@Param(value = "unionId") String unionId,
@Param(value = "approval") Boolean approval,
@Param(value = "isFormalOrAttendance") String isFormalOrAttendance) {
Sql sql = Sqls.create("""
SELECT
info.*,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariable,
IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName,
IF(rt.id IS NOT NULL, 1, 0) AS canRevoke
FROM
wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN teacher_congress_delegate_push info ON info.id = ins.businessNo
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("t.taskName", "=", "tcDelegatePushDwFzr");
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name())) {
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
}
if (!"全部".equals(isFormalOrAttendance)) {
cnd.and("info.representativeType", "=", isFormalOrAttendance);
}
cnd.andEX("info.sessionId", "=", sessionId);
cnd.andEX("info.unionId", "=", unionId);
if (approval) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup group = new SqlExpressionGroup();
group.orLike("info.userName", pageForm.getSearchKeyword());
group.orLike("info.loginName", pageForm.getSearchKeyword());
cnd.and(group);
}
cnd.groupBy("t.id");
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("t.createdAt");
} else {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
Pagination<NutMap> pageVO = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pageVO);
}
}
@@ -0,0 +1,161 @@
package com.budwk.app.zhgh.democratic.teachercongress.delegate.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.flow.entity.ProcessInstance;
import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.service.TeacherCongressDelegatePushService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.List;
/**
* @author zhf
* @date 2025/11/22 11:07
* @description 党委书记审核
*/
@IocBean
@At("/platform/teacherCongress/delegate/push/dwSjAudit")
@Ok("json:full")
@Slf4j
@Api(value = "/platform/teacherCongress/delegate/push/dwSjAudit", tags = "党委书记审核")
public class TeacherCongressDelegatePushDwSjAuditController {
@Inject
private Dao dao;
@Inject
private BaseService baseService;
@Inject
private FlowCommonService flowCommonService;
@Inject
private FlowEngine flowEngine;
@Inject
private TeacherCongressDelegatePushService teacherCongressDelegatePushService;
@At("")
@Ok("beetl:/platform/zhgh/democratic/teachercongress/delegate/push/dwSjAudit.html")
@SaCheckPermission("tc.delegate.push.dwSjAudit")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("tc.delegate.push.dwSjAudit")
public Result pageData(PageForm pageForm,
@Param(value = "sessionId") String sessionId,
@Param(value = "unionId") String unionId,
@Param(value = "approval") Boolean approval,
@Param(value = "isFormalOrAttendance") String isFormalOrAttendance) {
Sql sql = Sqls.create("""
SELECT
info.*,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariable,
IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName,
IF(rt.id IS NOT NULL, 1, 0) AS canRevoke
FROM
wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN teacher_congress_delegate_push info ON info.id = ins.businessNo
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("t.taskName", "=", "tcDelegatePushDwSj");
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name())) {
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
}
if (!"全部".equals(isFormalOrAttendance)) {
cnd.and("info.representativeType", "=", isFormalOrAttendance);
}
cnd.andEX("info.sessionId", "=", sessionId);
cnd.andEX("info.unionId", "=", unionId);
if (approval) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup group = new SqlExpressionGroup();
group.orLike("info.userName", pageForm.getSearchKeyword());
group.orLike("info.loginName", pageForm.getSearchKeyword());
cnd.and(group);
}
cnd.groupBy("t.id");
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("t.createdAt");
} else {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
Pagination<NutMap> pageVO = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pageVO);
}
@At
@ApiOperation("党委书记提交")
@SaCheckPermission("tc.delegate.push.dwSjAudit")
public Result batchSubmit(String sessionId) {
String str = teacherCongressDelegatePushService.batchSubmitWhere(sessionId, "XY");
if (StrUtil.isNotBlank(str)) {
return Result.error(str);
}
teacherCongressDelegatePushService.batchSubmit("XY", sessionId);
return null;
}
}
@@ -10,20 +10,24 @@ import com.budwk.app.base.service.BaseService;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.TeacherCongressDelegatePush;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import java.util.List;
import java.util.Map;
/**
@@ -112,6 +116,7 @@ public class TeacherCongressDelegatePushWriteController {
@At
@ApiOperation("代表信息填写提交")
@SaCheckLogin
@Aop(TransAop.READ_COMMITTED)
public Result submit(TeacherCongressDelegatePush teacherCongressDelegatePush,String taskId){
dao.updateIgnoreNull(teacherCongressDelegatePush);
@@ -119,9 +124,28 @@ public class TeacherCongressDelegatePushWriteController {
dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId);
dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.AGREE.getCode());
dict.set(FlowConst.EXT_ENABLE_OPERATOR,true);
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", teacherCongressDelegatePush.getUserId()));
if (List.of("563dcfc5033d4631bc7f6482b2d427b9","9b2650eec5114a18a0d2a09803800a39").contains(user.getUnionId())){
dict.set("tf_type","JG");
}else{
dict.set("tf_type","XY");
}
flowCommonService.executeTask(dict);
return Result.success();
}
@At
@ApiOperation("代表信息填写的信息")
@SaCheckLogin
@Aop(TransAop.READ_COMMITTED)
public Result finOne(String id){
TeacherCongressDelegatePush delegatePush = baseService.dao().fetch(TeacherCongressDelegatePush.class, Cnd.where("id", "=", id));
return Result.success(delegatePush);
}
}
@@ -201,7 +201,7 @@ public class TeacherCongressDelegatePushZgAuditController {
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("t.taskName", "=", "900217e4-4332-4a21-90dd-363b8be17801");
cnd.and("t.taskName", "=", "tcDelegatePushZg");
// cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
if (!"全部".equals(isFormalOrAttendance)) {
cnd.and("info.representativeType", "=", isFormalOrAttendance);
@@ -5,6 +5,8 @@ import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.TeacherCong
public interface TeacherCongressDelegatePushService extends BaseService<TeacherCongressDelegatePush> {
void batchSubmit(String[] ids, String sessionId);
void batchSubmit(String submitType, String sessionId);
String batchSubmitWhere(String sessionId,String submitType);
}
@@ -1,15 +1,22 @@
package com.budwk.app.zhgh.democratic.teachercongress.delegate.service;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.TeacherCongressDelegatePush;
import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_quota_allocation;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
@@ -31,7 +38,7 @@ public class TeacherCongressDelegatePushServiceImpl extends BaseServiceImpl<Teac
private FlowCommonService flowCommonService;
@Override
public void batchSubmit(String[] ids, String sessionId) {
public void batchSubmit(String submitType, String sessionId) {
Sql sql = Sqls.create("""
SELECT
info.*,
@@ -58,8 +65,12 @@ public class TeacherCongressDelegatePushServiceImpl extends BaseServiceImpl<Teac
$condition
""");
Cnd cnd = Cnd.NEW();
// cnd.and("info.id", "in", ids);
cnd.and("t.taskName", "=", "0cacd1e7-7bb2-47dd-818b-6a73062e0c62");
if (submitType.equals("XY")){
cnd.and("t.taskName", "=", "tcDelegatePushDwSjTj");
}else{
cnd.and("t.taskName", "=", "tcDelegatePushUnion");
}
sql.setCondition(cnd);
List<NutMap> delegatePushList = listMap(sql);
@@ -71,4 +82,115 @@ public class TeacherCongressDelegatePushServiceImpl extends BaseServiceImpl<Teac
flowCommonService.executeTask(dict);
});
}
@Override
public String batchSubmitWhere(String sessionId,String submitType) {
Teacher_congress_quota_allocation allocation = dao().fetch(Teacher_congress_quota_allocation.class,
Cnd.where(Teacher_congress_quota_allocation::getSessionId, "=", sessionId)
.and(Teacher_congress_quota_allocation::getUnionId, "=", SecurityUtil.getUnionId()));
if (allocation == null) {
return "请先设置名额分配";
}
if (allocation.getAllocationNum() == 0) {
return "请先设置名额分配";
}
Sql sql = Sqls.create("""
SELECT
info.*,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId,
t.id taskId,
t.taskName AS taskKey,
t.displayName taskName,
t.taskType,
t.performType taskPerformType,
t.taskState,
t.finishTime,
t.taskParentId,
t.variable taskVariable
FROM
teacher_congress_delegate_push info
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id
AND t.taskState = 10
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("info.sessionId", "=", sessionId);
cnd.andEX("info.unionId", "=", SecurityUtil.getUnionId());
SqlExpressionGroup group = new SqlExpressionGroup();
if (submitType.equals("XY")){
group.or("t.taskName", "=", "tcDelegatePushDwSjTj");
}else{
group.or("t.taskName", "=", "tcDelegatePushUnion");
}
group.or("t.taskName", "is", null);
cnd.and(group);
cnd.and("ins.state", "!=", ProcessInstanceStateEnum.REJECT.getCode());
cnd.groupBy("info.id");
sql.setCondition(cnd);
List<NutMap> writeList = listMap(sql);
// 已上报总人数
int total = writeList.size();
// 已上报女代表人数
int female = (int) writeList.stream().filter(v -> List.of("", "女性").contains(v.getString("sex"))).count();
// 已上报高级职称人数
int seniorTeacher = (int) writeList.stream().filter(v -> v.getBoolean("seniorTeacher")).count();
//已上报中级职称及以下代表数
int intermediateBelow = (int) writeList.stream().filter(v -> v.getBoolean("intermediateBelow")).count();
//已上报干部代表数
int cadre = (int) writeList.stream().filter(v -> v.getBoolean("cadre")).count();
//已上报工人代表数
int worker = (int) writeList.stream().filter(v -> v.getBoolean("worker")).count();
// 已上报专任教师人数
int ordinaryTeacher = (int) writeList.stream().filter(v -> v.getBoolean("ordinaryTeacher")).count();
// 已上报45岁以下代表
int under45 = (int) writeList.stream().filter(v -> Convert.toInt(v.getInt("age"), 0) <= 45).count();
StringBuffer tips = new StringBuffer();
if (total > allocation.getAllocationNum()) {
tips.append("上报总人数超出分配名额!");
}
if (total < allocation.getAllocationNum()) {
tips.append("上报总人数不满足分配名额!");
}
if (seniorTeacher < allocation.getSeniorTeaNum()) {
tips.append("高级职称专任教师数不满足分配名额数!");
}
if (intermediateBelow < allocation.getIntermediateBelowNum()) {
tips.append("中级职称及以下代表数不满足分配名额数!");
}
if (cadre < allocation.getCadreNum()) {
tips.append("干部代表数不满足分配名额数!");
}
if (worker < allocation.getWorkerNum()) {
tips.append("工人代表数不满足分配名额数!");
}
if (female < allocation.getFemaleNum()) {
tips.append("女教师代表数不满足分配名额数!");
}
if (under45 < allocation.getLess45Num()) {
tips.append("45岁以下教师代表数不满足分配名额数!");
}
if (StrUtil.isNotBlank(tips)) {
return tips.toString();
}
return null;
}
}
@@ -17,7 +17,6 @@ layout("/layouts/platform.html"){
label: 'name'
}"
node-key="id"
default-expand-all
@node-click="treeNodeClick"
:filter-node-method="filterNode"
highlight-current
@@ -0,0 +1,110 @@
const auditInfo = {
template: /*language=HTML*/ `
<div>
<div class="proposal-info">
<div class="process-title">
基础信息
<el-link type="primary" @click="openChart">点击查看流程图</el-link>
</div>
<el-descriptions :column="3" border>
<el-descriptions-item label="姓名">{{ viewData.userName }}</el-descriptions-item>
<el-descriptions-item label="工号">{{viewData.loginName }}</el-descriptions-item>
<el-descriptions-item label="性别">{{viewData.sex }}</el-descriptions-item>
<el-descriptions-item label="出生年月">{{$moment(viewData.birthday).format("YYYY-MM-DD") }}
</el-descriptions-item>
<el-descriptions-item label="手机号">{{viewData.mobile }}</el-descriptions-item>
<el-descriptions-item label="民族">{{viewData.nation }}</el-descriptions-item>
<el-descriptions-item label="政治面貌">{{viewData.political }}</el-descriptions-item>
<el-descriptions-item label="所属工会">{{viewData.unionName }}</el-descriptions-item>
<el-descriptions-item label="所属单位">{{viewData.unitName }}</el-descriptions-item>
<el-descriptions-item label="文化程度">{{viewData.education }}</el-descriptions-item>
<el-descriptions-item label="职务">{{viewData.position }}</el-descriptions-item>
<el-descriptions-item label="职称">{{viewData.professionalTitle }}</el-descriptions-item>
<el-descriptions-item label="是否高级职称">{{viewData.seniorTeacher?'是':'否' }}
</el-descriptions-item>
<el-descriptions-item label="是否中级职称及以下">{{viewData.intermediateBelow?'是':'否' }}
</el-descriptions-item>
<el-descriptions-item label="是否干部">{{viewData.cadre?'是':'否' }}</el-descriptions-item>
<el-descriptions-item label="是否工人">{{viewData.worker?'是':'否' }}</el-descriptions-item>
<el-descriptions-item label="校级领导">{{viewData.schoolLeader?'是':'否' }}</el-descriptions-item>
<el-descriptions-item label="中层领导">{{viewData.middleLevelLeader?'是':'否' }}
</el-descriptions-item>
<el-descriptions-item label="主要工作简历" span="3">
<div style="white-space: pre-line">{{viewData.resume}}</div>
</el-descriptions-item>
<el-descriptions-item label="现实表现" span="3">
<div style="white-space: pre-line">{{viewData.performance}}</div>
</el-descriptions-item>
</el-descriptions>
</div>
<template v-for="task in doneTasks">
<div class="mt10"
v-if="['tcDelegatePushDwSj','tcDelegatePushDwFzr'].includes(task.taskName)">
<div class="process-title">{{ task.displayName }}</div>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id"
>
<el-descriptions-item label="办理用户">{{ task.taskFormData.userName
}}({{task.taskFormData.loginName}})
</el-descriptions-item>
<el-descriptions-item label="办理时间">{{ task.finishTime }}</el-descriptions-item>
<el-descriptions-item label="办理结果">
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE"
:value="task.ext.submitType"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="办理意见" v-if="!task.ext.isFirstTaskNode">{{
task.taskFormData.opinion }}
</el-descriptions-item>
</el-descriptions>
</div>
</template>
<slot></slot>
<snaker-chart ref="snakerChartRef"></snaker-chart>
</div>
`,
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
data() {
return {
visible: false,
userData: [],
viewData: {},
row: null,
doneTasks: [],
loading: true,
search: "",
tableKey: "",
activeName: "1"
}
},
methods: {
findOne() {
this.$axios.post("/platform/teacherCongress/delegate/push/write/finOne", {id: this.row.id}).then(resp => {
if (resp.code === 0) {
this.viewData = resp.data
}
})
},
// 打开
onOpen(row) {
this.row = row;
this.visible = true;
this.findOne();
this.getDoneTasks();
},
// 获取已办任务审批记录
getDoneTasks() {
this.$axios.post("/flow/common/doneTasks", {bizId: this.row.id}).then((res) => {
if (res.code === 0) {
this.doneTasks = res.data
}
})
},
// 查看流程图
openChart() {
this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId, this.row.instanceId)
}
}
}
@@ -0,0 +1,252 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入姓名或工号" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="教代会">
<el-select v-model="pageForm.sessionId">
<el-option v-for="item in sessionOptions" :label="item.fullName" :value="item.id"
:key="item.id"></el-option>
</el-select>
</search-item>
<search-item label="所属工会">
<el-select placeholder="请选择所属工会" v-model="pageForm.unionId" filterable clearable
style="width: 100%">
<el-option v-for="i in unionOptions" :label="i.name" :key="i.id" :value="i.id"></el-option>
</el-select>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool>
<el-radio-group @change="doSearch" v-model="pageForm.isFormalOrAttendance" size="small">
<el-radio-button label="全部"></el-radio-button>
<el-radio-button label="正式代表"></el-radio-button>
<el-radio-button label="列席代表"></el-radio-button>
</el-radio-group>
<el-radio-group v-model="pageForm.approval" size="small" class="ml10"
@change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</table-tool>
<el-table
ref="tableRef"
:data="tableData"
row-key="id"
@sort-change="pageOrder"
>
<!-- <el-table-column type="selection" width="55" reserve-selection></el-table-column>-->
<el-table-column type="index" width="55" label="序号" :index="indexMethod"></el-table-column>
<el-table-column label="姓名" prop="userName" width="100"></el-table-column>
<el-table-column label="工号" prop="loginName"></el-table-column>
<el-table-column label="性别" prop="sex" width="50"></el-table-column>
<el-table-column label="分工会" prop="unionName" show-overflow-tooltip></el-table-column>
<!-- <el-table-column label="民族" prop="nation"></el-table-column>&lt;!&ndash;
<el-table-column label="政治面貌" prop="political"
show-overflow-tooltip></el-table-column>
<el-table-column label="学历" prop="education"></el-table-column>-->
<el-table-column label="职务" prop="position"></el-table-column>
<el-table-column label="职称" prop="professionalTitle"></el-table-column>
<el-table-column label="是否高级职称" prop="seniorTeacher">
<template v-slot="{row}">
<span v-if="row.seniorTeacher" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否中级职称及以下" prop="intermediateBelow">
<template v-slot="{row}">
<span v-if="row.intermediateBelow" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否干部" prop="cadre">
<template v-slot="{row}">
<span v-if="row.cadre" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否工人" prop="worker">
<template v-slot="{row}">
<span v-if="row.worker" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="教代会代表" prop="isJdh">
<template v-slot="{row}">
<span v-if="row.isJdh" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="工代会代表" prop="isGdh">
<template v-slot="{row}">
<span v-if="row.isGdh" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="代表类型" prop="representativeType"></el-table-column>
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
<el-table-column prop="instanceState" label="流程状态">
<template slot-scope="{row}">
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
size="small"></enum-tag>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="300px">
<template slot-scope="{row}">
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.taskState === 10" @click="openAudit(row)" size="mini" type="primary">
审核
</el-button>
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<audit-info ref="auditInfoRef">
<div v-if="showApprovalForm">
<div class="process-title">
{{formData.taskName}}
</div>
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=""
class="flow-task-form">
<el-form-item label="审批意见" prop="tf_opinion"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="handleTaskAction('ROLLBACK')" size="small" type="info">退回修改</el-button>
<el-button @click="handleTaskAction('AGREE')" size="small" type="primary">同意</el-button>
</el-row>
</div>
</audit-info>
</template>
</guava>
</div>
<script>
<!--#include('auditInfo.js'){}#-->
new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'audit-info': auditInfo
},
data() {
return {
sessionOptions: [],
unionOptions: [],
pageForm: {
isFormalOrAttendance: "全部",
unionId: "",
sessionId: "",
approval: false,
},
showApprovalForm: false,
}
},
methods: {
openAudit(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = true
this.formData = {
userId: row.userId,
processTaskId: row.taskId,
taskKey: row.taskKey,
taskName: row.taskName,
instanceId: row.instanceId,
submitType: 1,
}
this.$refs.auditInfoRef.onOpen(row)
})
},
onView(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = false
this.$refs.auditInfoRef.onOpen(row)
})
},
handleTaskAction(tf_type) {
this.$refs.formRef.validate((valid) => {
if (valid) {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.formData.tf_type = tf_type
this.$axios.post("/flow/common/executeTask", {
data: JSON.stringify({
...this.formData,
})
}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.doSearch()
this.$refs.guava.index()
}
})
})
}
})
},
onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "info"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.doSearch()
}
})
})
},
listUnion() {
this.$businessTool.listUnion().then((res) => {
this.unionOptions = res
})
},
listSession() {
this.$axios.post("/platform/teacherCongress/common/listSession").then((res) => {
if (res.code === 0) {
this.sessionOptions = res.data
if (this.sessionOptions && this.sessionOptions.length > 0) {
this.pageForm.sessionId = this.sessionOptions[0].id
this.pageData()
}
}
})
}
},
async created() {
this.listUnion()
this.listSession()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,278 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入姓名或工号" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="教代会">
<el-select v-model="pageForm.sessionId">
<el-option v-for="item in sessionOptions" :label="item.fullName" :value="item.id"
:key="item.id"></el-option>
</el-select>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<push-progress ref="pushProgressRef"></push-progress>
</el-card>
<el-card shadow="never">
<table-tool>
<el-button icon="el-icon-check" size="small" type="primary" @click="onBatchSubmit">正式代表提交上报
</el-button>
<el-radio-group @change="doSearch" v-model="pageForm.isFormalOrAttendance" size="small">
<el-radio-button label="全部"></el-radio-button>
<el-radio-button label="正式代表"></el-radio-button>
<el-radio-button label="列席代表"></el-radio-button>
</el-radio-group>
<el-radio-group v-model="pageForm.approval" size="small"
@change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</table-tool>
<el-table
ref="tableRef"
:data="tableData"
row-key="id"
@sort-change="pageOrder"
>
<el-table-column type="index" width="55" label="序号" :index="indexMethod"></el-table-column>
<el-table-column label="姓名" prop="userName" width="100"></el-table-column>
<el-table-column label="工号" prop="loginName"></el-table-column>
<el-table-column label="性别" prop="sex" width="50"></el-table-column>
<el-table-column label="分工会" prop="unionName" show-overflow-tooltip></el-table-column>
<el-table-column label="职务" prop="position"></el-table-column>
<el-table-column label="职称" prop="professionalTitle"></el-table-column>
<el-table-column label="是否高级职称" prop="seniorTeacher">
<template v-slot="{row}">
<span v-if="row.seniorTeacher" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否中级职称及以下" prop="intermediateBelow">
<template v-slot="{row}">
<span v-if="row.intermediateBelow" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否干部" prop="cadre">
<template v-slot="{row}">
<span v-if="row.cadre" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否工人" prop="worker">
<template v-slot="{row}">
<span v-if="row.worker" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="教代会代表" prop="isJdh">
<template v-slot="{row}">
<span v-if="row.isJdh" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="工代会代表" prop="isGdh">
<template v-slot="{row}">
<span v-if="row.isGdh" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="代表类型" prop="representativeType"></el-table-column>
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
<el-table-column prop="instanceState" label="流程状态">
<template slot-scope="{row}">
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
size="small"></enum-tag>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="300px">
<template slot-scope="{row}">
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.taskState === 10" @click="openAudit(row)" size="mini" type="primary">
审核
</el-button>
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<audit-info ref="auditInfoRef">
<div v-if="showApprovalForm">
<div class="process-title">
{{formData.taskName}}
</div>
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=""
class="flow-task-form">
<el-form-item label="审批意见" prop="tf_opinion"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="handleTaskAction('ROLLBACK')" size="small" type="info">退回修改</el-button>
<el-button @click="handleTaskAction('AGREE')" size="small" type="primary">同意</el-button>
</el-row>
</div>
</audit-info>
</template>
</guava>
</div>
<script>
<!--#include('push-progress.js'){}#-->
<!--#include('auditInfo.js'){}#-->
new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'push-progress': pushProgress,
'audit-info': auditInfo
},
data() {
return {
sessionOptions: [],
units: [],
pageForm: {
isFormalOrAttendance: "全部",
unionId: "",
sessionId: "",
approval: false,
},
showApprovalForm: false,
}
},
methods: {
doSearch() {
this.pageData()
const fullName = this.sessionOptions.find(v => v.id === this.pageForm.sessionId)?.fullName;
this.$refs.pushProgressRef.refreshData(this.pageForm.sessionId, fullName, this.pageForm.unionId,"JG")
},
onBatchSubmit() {
this.$confirm('您确定要上报吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const loading = createLoading('正在提交中')
this.$axios.post('/platform/teacherCongress/delegate/push/dwSjAudit/batchSubmit', {
sessionId: this.pageForm.sessionId
}).then(resp => {
if (resp.code === 0) {
this.$message.success(resp.msg)
this.doSearch()
}
}).finally(() => {
loading.close()
})
})
},
openAudit(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = true
this.formData = {
bizId: row.id,
userId: row.userId,
processTaskId: row.taskId,
taskKey: row.taskKey,
taskName: row.taskName,
instanceId: row.instanceId,
submitType: 1,
}
this.$refs.auditInfoRef.onOpen(row)
})
},
onView(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = false
this.$refs.auditInfoRef.onOpen(row)
})
},
handleTaskAction(tf_type) {
this.$refs.formRef.validate((valid) => {
if (valid) {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.formData.tf_type = tf_type
this.$axios.post("/flow/common/executeTask", {
data: JSON.stringify({
...this.formData,
})
}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.doSearch()
this.$refs.guava.index()
}
})
})
}
})
},
onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "info"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.doSearch()
}
})
})
},
listUnion() {
this.$businessTool.listUnit().then((res) => {
this.units = res
})
},
listSession() {
this.$axios.post("/platform/teacherCongress/common/listSession").then((res) => {
if (res.code === 0) {
this.sessionOptions = res.data
if (this.sessionOptions && this.sessionOptions.length > 0) {
this.pageForm.sessionId = this.sessionOptions[0].id
this.doSearch()
}
}
})
}
},
async created() {
this.listUnion()
this.listSession()
}
})
</script>
<!--#
}
#-->
@@ -2,196 +2,204 @@
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<el-card shadow="never">
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入姓名工号" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="教代会">
<el-select v-model="pageForm.sessionId">
<el-option v-for="item in sessionOptions" :label="item.fullName" :value="item.id"
:key="item.id"></el-option>
</el-select>
</search-item>
<search-item label="分工会" v-if="$auth.hasRole('SYSADMIN') || $auth.hasRole('SCHOOL_UNION_ADMIN')">
<el-select v-model="pageForm.unionId" filterable clearable style="width: 100%">
<el-option v-for="i in unionOptions" :label="i.name" :key="i.id" :value="i.id"></el-option>
</el-select>
</search-item>
</search>
</el-card>
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入姓名或工号" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="教代会">
<el-select v-model="pageForm.sessionId">
<el-option v-for="item in sessionOptions" :label="item.fullName" :value="item.id"
:key="item.id"></el-option>
</el-select>
</search-item>
<search-item label="分工会" v-if="$auth.hasRole('SYSADMIN') || $auth.hasRole('SCHOOL_UNION_ADMIN')">
<el-select v-model="pageForm.unionId" filterable clearable style="width: 100%">
<el-option v-for="i in unionOptions" :label="i.name" :key="i.id" :value="i.id"></el-option>
</el-select>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<push-progress ref="pushProgressRef"></push-progress>
</el-card>
<el-card shadow="never">
<push-progress ref="pushProgressRef"></push-progress>
</el-card>
<el-card shadow="never">
<table-tool>
<template v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','BRANCH_UNION_CHAIRMAN'])">
<el-button
icon="el-icon-plus"
size="small"
type="primary"
@click="$refs.pushFormalRef.onOpen(pageForm.sessionId,pageForm.unionId)"
>正式代表预选
</el-button>
<el-button
icon="el-icon-plus"
size="small"
type="primary"
@click="$refs.pushAttendanceRef.onOpen(pageForm.sessionId,pageForm.unionId)"
>列席代表预选
</el-button>
</template>
<template v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','UNIT_PARTY_SECRETARY'])">
<el-button icon="el-icon-check" size="small" type="primary" @click="onBatchSubmit">正式代表提交上报
</el-button>
</template>
<el-button icon="el-icon-download" size="small" type="primary" @click="exportExcel">导出</el-button>
<el-radio-group v-model="pageForm.isFormalOrAttendance" size="small" class="ml10"
@change="doSearch">
<el-radio-button label="全部"></el-radio-button>
<el-radio-button label="正式代表"></el-radio-button>
<el-radio-button label="列席代表"></el-radio-button>
</el-radio-group>
</table-tool>
<el-table
ref="tableRef"
:data="tableData"
row-key="id"
@sort-change="pageOrder"
>
<!-- <el-table-column type="selection" width="55" reserve-selection fixed="left" :selectable="(row)=>{return row.taskKey==='0cacd1e7-7bb2-47dd-818b-6a73062e0c62'}"></el-table-column>-->
<el-table-column type="index" width="55" label="序号" :index="indexMethod" fixed="left"></el-table-column>
<el-table-column label="姓名" prop="userName" width="100" fixed="left"></el-table-column>
<el-table-column label="年龄" prop="age" width="80"></el-table-column>
<el-table-column label="性别" prop="sex" width="80" fixed="left"></el-table-column>
<!-- <el-table-column label="民族" prop="nation" min-width="100"></el-table-column>-->
<el-table-column label="职务" prop="position" min-width="100"></el-table-column>
<el-table-column label="职称" prop="professionalTitle" min-width="100"></el-table-column>
<!-- :style="{'pointer-events':(row.taskKey === 'startTask' || row.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080' || !row.instanceId)?'auto':'none'}"-->
<!-- <el-table-column label="校级领导" prop="schoolLeader" min-width="100">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.schoolLeader"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="中层领导" prop="middleLevelLeader" min-width="100">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.middleLevelLeader"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>-->
<!--
<el-table-column label="专任教师" prop="ordinaryTeacher" min-width="100">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.ordinaryTeacher"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>-->
<el-table-column label="高级职称" prop="seniorTeacher" width="80">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.seniorTeacher"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="中级职称及以下" prop="intermediateBelow" width="120">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.intermediateBelow"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="干部" prop="cadre" width="80">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.cadre"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="工人" prop="worker" width="80">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.worker"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="教代会代表" prop="isJdh" min-width="100">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.isJdh"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="工代会代表" prop="isGdh" min-width="100">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.isGdh"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="代表类型" prop="representativeType" show-overflow-tooltip
width="100"></el-table-column>
<el-table-column prop="taskName" label="当前节点" width="120" fixed="right"></el-table-column>
<el-table-column prop="instanceState" label="流程状态" fixed="right">
<template slot-scope="{row}">
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
size="small"></enum-tag>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="300">
<template slot-scope="{row}">
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
<el-card shadow="never">
<table-tool>
<template v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','BRANCH_UNION_CHAIRMAN'])">
<el-button
v-if="(row.taskKey === 'startTask' || row.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080' || !row.instanceId)
&& $auth.hasRoleOr(['SYSADMIN'])"
@click="onEdit(row)" size="mini"
type="primary">编辑
icon="el-icon-plus"
size="small"
type="primary"
@click="$refs.pushFormalRef.onOpen(pageForm.sessionId,pageForm.unionId)"
>正式代表预选
</el-button>
<el-button
icon="el-icon-plus"
size="small"
type="primary"
@click="$refs.pushAttendanceRef.onOpen(pageForm.sessionId,pageForm.unionId)"
>列席代表预选
</el-button>
<template>
<el-button v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')" @click="onDelete(row.id)"
size="mini" type="danger">
删除
</el-button>
<el-button
v-else-if="row.taskKey === 'startTask'
|| row.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080'
|| row.taskKey==='0cacd1e7-7bb2-47dd-818b-6a73062e0c62' || !row.instanceId"
@click="onDelete(row.id)"
size="mini" type="danger">删除
</el-button>
</template>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template >
<el-button icon="el-icon-check" size="small" type="primary" @click="onBatchSubmit">正式代表提交上报
</el-button>
</template>
<el-button icon="el-icon-download" size="small" type="primary" @click="exportExcel">导出</el-button>
<el-radio-group v-model="pageForm.isFormalOrAttendance" size="small" class="ml10"
@change="doSearch">
<el-radio-button label="全部"></el-radio-button>
<el-radio-button label="正式代表"></el-radio-button>
<el-radio-button label="列席代表"></el-radio-button>
</el-radio-group>
</table-tool>
<el-table
ref="tableRef"
:data="tableData"
row-key="id"
@sort-change="pageOrder"
>
<!-- <el-table-column type="selection" width="55" reserve-selection fixed="left" :selectable="(row)=>{return row.taskKey==='0cacd1e7-7bb2-47dd-818b-6a73062e0c62'}"></el-table-column>-->
<el-table-column type="index" width="55" label="序号" :index="indexMethod"
fixed="left"></el-table-column>
<el-table-column label="姓名" prop="userName" width="100" fixed="left"></el-table-column>
<el-table-column label="年龄" prop="age" width="80"></el-table-column>
<el-table-column label="性别" prop="sex" width="80" fixed="left"></el-table-column>
<!-- <el-table-column label="民族" prop="nation" min-width="100"></el-table-column>-->
<el-table-column label="职务" prop="position" min-width="100"></el-table-column>
<el-table-column label="职称" prop="professionalTitle" min-width="100"></el-table-column>
<!-- :style="{'pointer-events':(row.taskKey === 'startTask' || row.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080' || !row.instanceId)?'auto':'none'}"-->
<!-- <el-table-column label="校级领导" prop="schoolLeader" min-width="100">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.schoolLeader"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="中层领导" prop="middleLevelLeader" min-width="100">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.middleLevelLeader"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>-->
<!--
<el-table-column label="专任教师" prop="ordinaryTeacher" min-width="100">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.ordinaryTeacher"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>-->
<el-table-column label="高级职称" prop="seniorTeacher" width="80">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.seniorTeacher"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="中级职称及以下" prop="intermediateBelow" width="120">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.intermediateBelow"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="干部" prop="cadre" width="80">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.cadre"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="工人" prop="worker" width="80">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.worker"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="教代会代表" prop="isJdh" min-width="100">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.isJdh"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="工代会代表" prop="isGdh" min-width="100">
<template v-slot="{row}">
<el-checkbox
v-if="row"
v-model="row.isGdh"
style="pointer-events:none"
></el-checkbox>
</template>
</el-table-column>
<el-table-column label="代表类型" prop="representativeType" show-overflow-tooltip
width="100"></el-table-column>
<el-table-column prop="taskName" label="当前节点" width="120" fixed="right"></el-table-column>
<el-table-column prop="instanceState" label="流程状态" fixed="right">
<template slot-scope="{row}">
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
size="small"></enum-tag>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="300">
<template slot-scope="{row}">
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
<!--<el-button
v-if="( row.taskKey==='tcDelegatePushWrite' || !row.instanceId)
&& $auth.hasRoleOr(['SYSADMIN'])"
@click="onEdit(row)" size="mini"
type="primary">编辑
</el-button>-->
<template>
<el-button v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')" @click="onDelete(row.id)"
size="mini" type="danger">
删除
</el-button>
<el-button
v-else-if="row.taskKey === 'startTask'
|| row.taskKey==='tcDelegatePush'
|| row.taskKey==='tcDelegatePushDwSjTh'
|| row.taskKey==='tcDelegatePushDwFzrTh' || !row.instanceId"
@click="onDelete(row.id)"
size="mini" type="danger">删除
</el-button>
</template>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<audit-info ref="auditInfoRef">
</audit-info>
</template>
</guava>
<push-formal-dialog ref="pushFormalRef" @refresh="doSearch"></push-formal-dialog>
<push-attendance-dialog ref="pushAttendanceRef" @refresh="doSearch"></push-attendance-dialog>
@@ -217,6 +225,7 @@ layout("/layouts/platform.html"){
<!--#include('push-formal-dialog.js'){}#-->
<!--#include('push-attendance-dialog.js'){}#-->
<!--#include('write.js'){}#-->
<!--#include('auditInfo.js'){}#-->
new Vue({
el: '#app',
mixins: [initTableMixins],
@@ -224,7 +233,8 @@ layout("/layouts/platform.html"){
'push-progress': pushProgress,
'push-formal-dialog': pushFormalDialog,
'push-attendance-dialog': pushAttendanceDialog,
'formal-write': write
'formal-write': write,
'audit-info': auditInfo
},
data() {
return {
@@ -244,12 +254,12 @@ layout("/layouts/platform.html"){
this.pageData()
const fullName = this.sessionOptions.find(v => v.id === this.pageForm.sessionId)?.fullName;
this.$refs.pushProgressRef.refreshData(this.pageForm.sessionId, fullName, this.pageForm.unionId)
this.$refs.pushProgressRef.refreshData(this.pageForm.sessionId, fullName, this.pageForm.unionId,"XY")
},
onView(row) {
this.writeDialog = true
this.userId = row.userId
this.isRead = true
this.$refs.guava.view(() => {
this.$refs.auditInfoRef.onOpen(row)
})
},
onEdit(row) {
this.writeDialog = true
@@ -272,13 +282,8 @@ layout("/layouts/platform.html"){
},
exportExcel() {
this.$downLoad("/platform/teacherCongress/delegate/push/exportExcel", this.pageForm)
},
},
onBatchSubmit() {
const selection = this.$refs.tableRef.selection
/*if (selection.length === 0){
this.$message.warning('请选择要上报的记录')
return
}*/
this.$confirm('您确定要上报吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
@@ -286,7 +291,6 @@ layout("/layouts/platform.html"){
}).then(async () => {
const loading = createLoading('正在提交中')
this.$axios.post('/platform/teacherCongress/delegate/push/batchSubmit', {
ids: JSON.stringify(selection.map(v => v.id)),
sessionId: this.pageForm.sessionId
}).then(resp => {
if (resp.code === 0) {
@@ -416,70 +416,70 @@ const pushProgress = {
return {
metrics: {
total: {
current: 15,
target: 15,
progress: 100,
current: 0,
target: 0,
progress: 0,
remaining: 0
},
female: {
current: 3,
target: 5,
progress: 60,
remaining: 2
current: 0,
target: 0,
progress: 0,
remaining: 0
},
seniorTeacher: {
current: 4,
target: 6,
progress: 66.7,
remaining: 2
current: 0,
target: 0,
progress: 0,
remaining: 0
},
intermediateBelow: {
current: 4,
target: 6,
progress: 66.7,
remaining: 2
current: 0,
target: 0,
progress: 0,
remaining: 0
},
cadre: {
current: 4,
target: 6,
progress: 66.7,
remaining: 2
current: 0,
target: 0,
progress: 0,
remaining: 0
},
worker: {
current: 4,
target: 6,
progress: 66.7,
remaining: 2
current: 0,
target: 0,
progress: 0,
remaining: 0
},
ordinaryTeacher: {
current: 8,
target: 10,
progress: 80,
remaining: 2
current: 0,
target: 0,
progress: 0,
remaining: 0
},
under45: {
current: 5,
target: 7,
progress: 71.4,
remaining: 2
current: 0,
target: 0,
progress: 0,
remaining: 0
},
ethnicMinority:{
current: 1,
target: 2,
progress: 50,
remaining: 1
ethnicMinority: {
current: 0,
target: 0,
progress: 0,
remaining: 0
},
schoolLeader:{
current: 2,
target: 3,
progress: 66.7,
remaining: 1
schoolLeader: {
current: 0,
target: 0,
progress: 0,
remaining: 0
},
middleLevelLeader:{
current: 1,
target: 2,
progress: 33.3,
remaining: 1
middleLevelLeader: {
current: 0,
target: 0,
progress: 0,
remaining: 0
}
},
teacherMeetName: null
@@ -491,11 +491,12 @@ const pushProgress = {
}
},
methods: {
async refreshData(sessionId, teacherMeetName, unionId) {
async refreshData(sessionId, teacherMeetName, unionId, submitType) {
this.teacherMeetName = teacherMeetName
const {code, data} = await $.get('/platform/teacherCongress/delegate/push/selfUnionPushMetric', {
sessionId: sessionId,
unionId: unionId
unionId: unionId,
submitType: submitType
})
if (code === 0) {
if (data) {
@@ -1,251 +1,273 @@
const write = {
template: /*language=HTML*/ `
<div class="container-x1">
template:
/*language=HTML*/
`
<div class="container-x1">
<div class="form-container">
<header class="header-x">
<div class="header-left">
<h1 class="title">代表信息填写</h1>
</div>
<div class="header-right">
当前届次:
<el-select
v-model="formData.sessionId"
:disabled="session_id!=null && user_id!=null"
@change="teacherMeetIdChange"
>
<el-option v-for="item in sessionOptions" :label="item.fullName" :value="item.id"
:key="item.id"></el-option>
</el-select>
</div>
</header>
<div class="form-container">
<header class="header-x">
<div class="header-left">
<h1 class="title">代表信息填写</h1>
</div>
<div class="header-right">
当前届次:
<el-select
v-model="formData.sessionId"
:disabled="session_id!=null && user_id!=null"
@change="teacherMeetIdChange"
>
<el-option v-for="item in sessionOptions" :label="item.fullName" :value="item.id"
:key="item.id"></el-option>
</el-select>
</div>
</header>
<div class="notice-panel" :class="{ hidden: isSelected }">
<div>
<i class="el-icon-warning notice-icon"></i>
<h2 class="notice-title">暂未被推选为教代会代表</h2>
<p class="notice-text">如有疑问,请联系所在单位</p>
<div class="notice-panel" :class="{ hidden: isSelected }">
<div>
<i class="el-icon-warning notice-icon"></i>
<h2 class="notice-title">暂未被推选为教代会代表</h2>
<p class="notice-text">如有疑问,请联系所在单位</p>
</div>
</div>
</div>
<div class="info-box" :class="{ hidden: !isSelected }">
<div class="info-content">
<i class="fa fa-info-circle info-icon"></i>
<div class="info-text">
<h3 class="info-title">推选信息</h3>
<p class="info-desc">您已被预选为{{ sessionName }}代表</p>
<div class="info-details">
<p>推选单位:{{ formData.unionName }}</p>
<p>推选时间:{{ formData.pushTime }}</p>
<p>代表类型:
<span>{{
<div class="info-box" :class="{ hidden: !isSelected }">
<div class="info-content">
<i class="fa fa-info-circle info-icon"></i>
<div class="info-text">
<h3 class="info-title">推选信息</h3>
<p class="info-desc">您已被预选为{{ sessionName }}代表</p>
<div class="info-details">
<p>推选单位:{{ formData.unionName }}</p>
<p>推选时间:{{ formData.pushTime }}</p>
<p>代表类型:
<span>{{
[formData.isJdh && ('教代会'+formData.representativeType), formData.isGdh && ('工代会'+formData.representativeType)].filter(Boolean).join('、')
}}</span>
</p>
</p>
</div>
</div>
</div>
</div>
<el-tabs v-model="activeName">
<el-tab-pane label="填写信息" name="one">
<el-form
ref="formRef"
:model="formData"
:rules="rules"
label-width="150px"
:class="{ hidden: !isSelected }"
:disabled="(formData && !['tcDelegatePushWrite','tcDelegatePushDwSjTh','tcDelegatePushDwFzrTh'].includes(formData.taskKey)) || is_read"
>
<div class="form-section">
<h3 class="section-title">基本信息</h3>
<div class="form-grid">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="姓名" prop="userName">
<el-input v-model="formData.userName" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工号" prop="loginName">
<el-input v-model="formData.loginName" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="性别" prop="sex">
<el-radio-group v-model="formData.sex" size="small">
<el-radio border label="男">男</el-radio>
<el-radio border label="女">女</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="出生年月" prop="birthday">
<el-date-picker
v-model="formData.birthday"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
style="width: 100%"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="民族" prop="nation">
<dict-select v-model="formData.nation" style="width: 100%"
placeholder="请选择民族"
code="USER_NATION"></dict-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="政治面貌" prop="political">
<dict-select v-model="formData.political" style="width: 100%"
placeholder="请选择政治面貌"
code="USER_POLITICAL"></dict-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属工会">
<el-input
v-model="formData.unionName"
readonly
placeholder="请输入所属工会"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属单位">
<el-input
v-model="formData.unitName"
readonly
placeholder="请输入所属单位"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="文化程度" prop="education">
<el-input maxlength="100" placeholder="文化程度"
v-model="formData.education"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="职务" prop="position">
<el-input maxlength="100" placeholder="职务"
v-model="formData.position"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="职称" prop="professionalTitle">
<el-input maxlength="100" v-model="formData.professionalTitle"
placeholder="职称"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否高级职称" prop="seniorTeacher">
<el-radio-group v-model="formData.seniorTeacher" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否中级职称及以下" prop="intermediateBelow">
<el-radio-group v-model="formData.intermediateBelow" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否干部" prop="cadre">
<el-radio-group v-model="formData.cadre" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否工人" prop="worker">
<el-radio-group v-model="formData.worker" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="校级领导" prop="schoolLeader">
<el-radio-group v-model="formData.schoolLeader" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="中层领导" prop="middleLevelLeader">
<el-radio-group v-model="formData.middleLevelLeader" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</div>
<div class="form-grid">
<el-form-item label="手机号" prop="mobile">
<el-input v-model="formData.mobile" maxlength="11"></el-input>
</el-form-item>
<el-form-item label="主要工作简历" prop="resume">
<el-input v-model="formData.resume" type="textarea" rows="4"></el-input>
</el-form-item>
<el-form-item label="现实表现" prop="performance">
<el-input v-model="formData.performance" type="textarea"
rows="4"></el-input>
</el-form-item>
<!--<el-form-item label="电子邮箱" prop="email">
<el-input v-model="formData.email" maxlength="255"></el-input>
</el-form-item>-->
</div>
</div>
<div v-if="formData && ['tcDelegatePushWrite','tcDelegatePushDwSjTh','tcDelegatePushDwFzrTh'].includes(formData.taskKey)"
class="form-actions">
<el-button @click="onSave">保存草稿</el-button>
<el-button type="primary" @click="onSubmit">提交信息</el-button>
</div>
</el-form>
</el-tab-pane>
<el-tab-pane label="审核信息" name="two" v-if="doneTasks&&doneTasks.length>0">
<template v-for="task in doneTasks">
<div class="mt10"
v-if="['tcDelegatePushDwSj','tcDelegatePushDwFzr'].includes(task.taskName)">
<div class="process-title">{{ task.displayName }}</div>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id"
>
<el-descriptions-item label="办理用户">{{ task.taskFormData.userName
}}({{task.taskFormData.loginName}})
</el-descriptions-item>
<el-descriptions-item label="办理时间">{{ task.finishTime }}
</el-descriptions-item>
<el-descriptions-item label="办理结果">
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE"
:value="task.ext.submitType"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="办理意见" v-if="!task.ext.isFirstTaskNode">{{
task.taskFormData.opinion }}
</el-descriptions-item>
</el-descriptions>
</div>
</template>
</el-tab-pane>
</el-tabs>
<div v-if="isSelected && formData && !['tcDelegatePushWrite','tcDelegatePushDwSjTh','tcDelegatePushDwFzrTh'].includes(formData.taskKey)&&activeName==='one'"
class="completion-panel">
<div>
<i class="el-icon-success completion-icon"></i>
<h2 class="completion-title">信息提交成功</h2>
<p class="completion-text">您已成功提交代表信息,感谢您的配合!</p>
<div class="completion-actions">
</div>
</div>
</div>
</div>
<el-form
ref="formRef"
:model="formData"
:rules="rules"
label-width="150px"
:class="{ hidden: !isSelected }"
:disabled="(formData && formData.taskKey!=='53ff0c2a-ba93-45e9-a9fd-db51cdab3080') || is_read"
>
<div class="form-section">
<h3 class="section-title">基本信息</h3>
<div class="form-grid">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="姓名" prop="userName">
<el-input v-model="formData.userName" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工号" prop="loginName">
<el-input v-model="formData.loginName" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="性别" prop="sex">
<el-radio-group v-model="formData.sex" size="small">
<el-radio border label="男">男</el-radio>
<el-radio border label="女">女</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="出生年月" prop="birthday">
<el-date-picker
v-model="formData.birthday"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
style="width: 100%"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="民族" prop="nation">
<dict-select v-model="formData.nation" style="width: 100%" placeholder="请选择民族"
code="USER_NATION"></dict-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="政治面貌" prop="political">
<dict-select v-model="formData.political" style="width: 100%" placeholder="请选择政治面貌"
code="USER_POLITICAL"></dict-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属工会">
<el-input
v-model="formData.unionName"
readonly
placeholder="请输入所属工会"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属单位">
<el-input
v-model="formData.unitName"
readonly
placeholder="请输入所属单位"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="文化程度" prop="education">
<el-input maxlength="100" placeholder="文化程度"
v-model="formData.education"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="职务" prop="position">
<el-input maxlength="100" placeholder="职务"
v-model="formData.position"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="职称" prop="professionalTitle">
<el-input maxlength="100" v-model="formData.professionalTitle"
placeholder="职称"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否高级职称" prop="seniorTeacher">
<el-radio-group v-model="formData.seniorTeacher" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否中级职称及以下" prop="intermediateBelow">
<el-radio-group v-model="formData.intermediateBelow" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否干部" prop="cadre">
<el-radio-group v-model="formData.cadre" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否工人" prop="worker">
<el-radio-group v-model="formData.worker" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="校级领导" prop="schoolLeader">
<el-radio-group v-model="formData.schoolLeader" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="中层领导" prop="middleLevelLeader">
<el-radio-group v-model="formData.middleLevelLeader" size="small">
<el-radio border :label="true">是</el-radio>
<el-radio border :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</div>
<div class="form-grid">
<el-form-item label="手机号" prop="mobile">
<el-input v-model="formData.mobile" maxlength="11"></el-input>
</el-form-item>
<el-form-item label="主要工作简历" prop="resume">
<el-input v-model="formData.resume" type="textarea"></el-input>
</el-form-item>
<el-form-item label="现实表现" prop="performance">
<el-input v-model="formData.performance" type="textarea"></el-input>
</el-form-item>
<!--<el-form-item label="电子邮箱" prop="email">
<el-input v-model="formData.email" maxlength="255"></el-input>
</el-form-item>-->
</div>
</div>
<div v-if="formData && formData.taskKey==='53ff0c2a-ba93-45e9-a9fd-db51cdab3080'"
class="form-actions">
<el-button @click="onSave">保存草稿</el-button>
<el-button type="primary" @click="onSubmit">提交信息</el-button>
</div>
</el-form>
<div v-if="isSelected && formData && formData.taskKey!=='53ff0c2a-ba93-45e9-a9fd-db51cdab3080'"
class="completion-panel">
<div>
<i class="el-icon-success completion-icon"></i>
<h2 class="completion-title">信息提交成功</h2>
<p class="completion-text">您已成功提交代表信息,感谢您的配合!</p>
<div class="completion-actions">
</div>
</div>
</div>
</div>
</div>
`,
`,
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
mixins: [initTableMixins],
components: {},
props: {
@@ -267,6 +289,8 @@ const write = {
},
data() {
return {
doneTasks: [],
activeName: "one",
isSelected: true,
formData: {
teacherMeetId: null
@@ -275,15 +299,15 @@ const write = {
age: [{required: true, message: '必填', trigger: ['blur', 'change']}],
nation: [{required: true, message: '必填', trigger: ['blur', 'change']}],
mobile: [{required: true, message: '必填', trigger: ['blur', 'change']}],
position: [{required: false, message: '必填', trigger: ['blur', 'change']}],
position: [{required: true, message: '必填', trigger: ['blur', 'change']}],
political: [{required: true, message: '必填', trigger: ['blur', 'change']}],
// education: [{required: true, message: '必填', trigger: ['blur', 'change']}],
academicDegree: [{required: true, message: '必填', trigger: ['blur', 'change']}],
jobTitle: [{required: false, message: '必填', trigger: ['blur', 'change']}],
professionalTitle: [{required: true, message: '必填', trigger: ['blur', 'change']}],
jobTitle: [{required: true, message: '必填', trigger: ['blur', 'change']}],
email: [{required: false, message: '必填', trigger: ['blur', 'change']}],
vita: [{required: true, message: '必填', trigger: ['blur', 'change']}],
resume: [{required: true, message: '必填', trigger: ['blur', 'change']}],
performance: [{required: true, message: '必填', trigger: ['blur', 'change']}],
education: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
sessionOptions: [],
representativeTypeList: ['正式代表', '列席代表'],
@@ -322,6 +346,14 @@ const write = {
}
},
methods: {
// 获取已办任务审批记录
getDoneTasks() {
this.$axios.post("/flow/common/doneTasks", {bizId: this.formData.id}).then((res) => {
if (res.code === 0) {
this.doneTasks = res.data
}
})
},
async listSession() {
const res = await this.$axios.post("/platform/teacherCongress/common/listSession")
if (res.code === 0) {
@@ -352,6 +384,7 @@ const write = {
this.isSelected = data.isSelected
if (this.isSelected) {
this.formData = data.delegate
this.getDoneTasks()
}
}
},
@@ -369,19 +402,19 @@ const write = {
type: 'warning'
}).then(async () => {
const loading = createLoading('正在提交中')
const {code} = await $.post('/platform/teacherCongress/delegate/push/write/save', this.formData)
loading.close()
if (code === 0) {
this.$message.success('保存成功')
this.$emit('refresh')
if (this.session_id && this.user_id) {
await this.initOtherInfo()
} else {
await this.initInfo()
this.$axios.post('/platform/teacherCongress/delegate/push/write/save', this.formData).then(resp => {
loading.close()
if (resp.code === 0) {
this.$message.success('保存成功')
this.$emit('refresh')
if (this.session_id && this.user_id) {
this.initOtherInfo()
} else {
this.initInfo()
}
}
} else {
this.$message.warning('保存失败')
}
})
}).catch(() => {
})
@@ -397,18 +430,18 @@ const write = {
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const {code} = await $.post('/platform/teacherCongress/delegate/push/write/submit', this.formData)
if (code === 0) {
this.$message.success('提交成功')
this.$emit('refresh')
if (this.session_id && this.user_id) {
await this.initOtherInfo()
} else {
await this.initInfo()
this.$axios.post('/platform/teacherCongress/delegate/push/write/submit', this.formData).then(resp => {
if (resp.code === 0) {
this.$message.success('提交成功')
this.$emit('refresh')
if (this.session_id && this.user_id) {
this.initOtherInfo()
} else {
this.initInfo()
}
}
} else {
this.$message.warning('提交失败')
}
})
}).catch(() => {
})
@@ -2,143 +2,140 @@
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<el-card shadow="never">
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入姓名工号" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="教代会">
<el-select v-model="pageForm.sessionId">
<el-option v-for="item in sessionOptions" :label="item.fullName" :value="item.id"
:key="item.id"></el-option>
</el-select>
</search-item>
<search-item label="所属工会">
<el-select placeholder="请选择所属工会" v-model="pageForm.unionId" filterable clearable style="width: 100%">
<el-option v-for="i in unionOptions" :label="i.name" :key="i.id" :value="i.id"></el-option>
</el-select>
</search-item>
</search>
</el-card>
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入姓名或工号" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="教代会">
<el-select v-model="pageForm.sessionId">
<el-option v-for="item in sessionOptions" :label="item.fullName" :value="item.id"
:key="item.id"></el-option>
</el-select>
</search-item>
<search-item label="所属工会">
<el-select placeholder="请选择所属工会" v-model="pageForm.unionId" filterable clearable
style="width: 100%">
<el-option v-for="i in unionOptions" :label="i.name" :key="i.id" :value="i.id"></el-option>
</el-select>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool>
<el-button type="primary" size="small" @click="doExport" class="ml5">导出代表推荐表</el-button>
<el-button type="primary" size="small" @click="exportExcel" class="ml5">导出汇总表</el-button>
<el-radio-group @change="doSearch" v-model="pageForm.isFormalOrAttendance" size="small">
<el-radio-button label="全部"></el-radio-button>
<el-radio-button label="正式代表"></el-radio-button>
<el-radio-button label="列席代表"></el-radio-button>
</el-radio-group>
<el-radio-group v-model="pageForm.approval" size="small" class="ml10"
@change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</table-tool>
<el-table
ref="tableRef"
:data="tableData"
row-key="id"
@sort-change="pageOrder"
>
<!-- <el-table-column type="selection" width="55" reserve-selection></el-table-column>-->
<el-table-column type="index" width="55" label="序号" :index="indexMethod"></el-table-column>
<el-table-column label="姓名" prop="userName" width="100"></el-table-column>
<el-table-column label="工号" prop="loginName"></el-table-column>
<el-table-column label="性别" prop="sex" width="50"></el-table-column>
<el-table-column label="分工会" prop="unionName" show-overflow-tooltip></el-table-column>
<!-- <el-table-column label="民族" prop="nation"></el-table-column>&lt;!&ndash;
<el-table-column label="政治面貌" prop="political"
show-overflow-tooltip></el-table-column>
<el-table-column label="学历" prop="education"></el-table-column>-->
<el-table-column label="职务" prop="position" ></el-table-column>
<el-table-column label="职称" prop="professionalTitle" ></el-table-column>
<el-table-column label="是否高级职称" prop="seniorTeacher">
<template v-slot="{row}">
<span v-if="row.seniorTeacher" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否中级职称及以下" prop="intermediateBelow">
<template v-slot="{row}">
<span v-if="row.intermediateBelow" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否干部" prop="cadre">
<template v-slot="{row}">
<span v-if="row.cadre" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否工人" prop="worker">
<template v-slot="{row}">
<span v-if="row.worker" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="教代会代表" prop="isJdh">
<template v-slot="{row}">
<span v-if="row.isJdh" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="工代会代表" prop="isGdh">
<template v-slot="{row}">
<span v-if="row.isGdh" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="代表类型" prop="representativeType"></el-table-column>
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
<el-table-column prop="instanceState" label="流程状态">
<template slot-scope="{row}">
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
size="small"></enum-tag>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="300px">
<template slot-scope="{row}">
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.taskState === 10" @click="handleTaskAction(row,1)" size="mini" type="primary">
通过
</el-button>
<el-button v-if="row.taskState === 10" @click="handleTaskAction(row,2)" size="mini" type="danger">
拒绝
</el-button>
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<el-card shadow="never">
<table-tool>
<el-button type="primary" size="small" @click="doExport" class="ml5">导出代表推荐表</el-button>
<el-button type="primary" size="small" @click="exportExcel" class="ml5">导出汇总表</el-button>
<el-radio-group @change="doSearch" v-model="pageForm.isFormalOrAttendance" size="small">
<el-radio-button label="全部"></el-radio-button>
<el-radio-button label="正式代表"></el-radio-button>
<el-radio-button label="列席代表"></el-radio-button>
</el-radio-group>
<el-radio-group v-model="pageForm.approval" size="small" class="ml10"
@change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</table-tool>
<el-table
ref="tableRef"
:data="tableData"
row-key="id"
@sort-change="pageOrder"
>
<!-- <el-table-column type="selection" width="55" reserve-selection></el-table-column>-->
<el-table-column type="index" width="55" label="序号" :index="indexMethod"></el-table-column>
<el-table-column label="姓名" prop="userName" width="100"></el-table-column>
<el-table-column label="工号" prop="loginName"></el-table-column>
<el-table-column label="性别" prop="sex" width="50"></el-table-column>
<el-table-column label="分工会" prop="unionName" show-overflow-tooltip></el-table-column>
<!-- <el-table-column label="民族" prop="nation"></el-table-column>&lt;!&ndash;
<el-table-column label="政治面貌" prop="political"
show-overflow-tooltip></el-table-column>
<el-table-column label="学历" prop="education"></el-table-column>-->
<el-table-column label="职务" prop="position"></el-table-column>
<el-table-column label="职称" prop="professionalTitle"></el-table-column>
<el-table-column label="是否高级职称" prop="seniorTeacher">
<template v-slot="{row}">
<span v-if="row.seniorTeacher" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否中级职称及以下" prop="intermediateBelow">
<template v-slot="{row}">
<span v-if="row.intermediateBelow" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否干部" prop="cadre">
<template v-slot="{row}">
<span v-if="row.cadre" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否工人" prop="worker">
<template v-slot="{row}">
<span v-if="row.worker" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="教代会代表" prop="isJdh">
<template v-slot="{row}">
<span v-if="row.isJdh" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="工代会代表" prop="isGdh">
<template v-slot="{row}">
<span v-if="row.isGdh" style="color:#0037ff;"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="代表类型" prop="representativeType"></el-table-column>
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
<el-table-column prop="instanceState" label="流程状态">
<template slot-scope="{row}">
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
size="small"></enum-tag>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="300px">
<template slot-scope="{row}">
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.taskState === 10" @click="handleTaskAction(row,1)" size="mini"
type="primary">
通过
</el-button>
<!-- <el-button v-if="row.taskState === 10" @click="handleTaskAction(row,2)" size="mini" type="danger">
拒绝
</el-button>-->
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<el-dialog :close-on-click-modal="false"
class="write-dialog"
:visible.sync="writeDialog"
:title="isRead ? '查看' : '编辑'"
top="50px"
width="60%">
<div style="max-height: 75vh;overflow-y: auto">
<formal-write ref="formalWriteRef" :is_read="isRead" :user_id="userId"
:session_id="pageForm.sessionId"
@refresh="writeDialog=false;doSearch()"></formal-write>
</div>
</el-dialog>
<template #view>
<audit-info ref="auditInfoRef">
</audit-info>
</template>
</guava>
</div>
<script>
<!--#include('write.js'){}#-->
<!--#include('auditInfo.js'){}#-->
new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'formal-write': write
'audit-info': auditInfo
},
data() {
return {
@@ -151,9 +148,6 @@ layout("/layouts/platform.html"){
approval: false,
},
writeDialog: false,
isRead: false,
userId: null
}
},
methods: {
@@ -164,9 +158,10 @@ layout("/layouts/platform.html"){
this.$downLoad("/platform/teacherCongress/delegate/push/zcAudit/doExportApplyZip", this.pageForm)
},
onView(row) {
this.writeDialog = true
this.userId = row.userId
this.isRead = true
this.$refs.guava.view(() => {
this.showApprovalForm = false
this.$refs.auditInfoRef.onOpen(row)
})
},
handleTaskAction(row, submitType) {
this.$confirm("您确定要提交吗?", "提示", {
@@ -270,24 +270,21 @@ layout("/layouts/platform_h5.html"){
</van-cell-group>
<van-cell-group title="提案内容" class="form-group">
<van-field class="direction-column-field" name="researchFindings" label="调研情况" required
:rules="[{ required: true, message: '请填写调研情况' }]">
<van-field class="direction-column-field" name="researchFindings" label="调研情况" required>
<template #input>
<text-editor v-model="formData.researchFindings" key="researchFindings"
placeholder="调研情况"></text-editor>
</template>
</van-field>
<van-field class="direction-column-field" name="brief" label="提案案由" required
:rules="[{ required: true, message: '请填写案由' }]">
<van-field class="direction-column-field" name="brief" label="提案案由" required>
<template #input>
<text-editor v-model="formData.brief" key="brief"
placeholder="提案案由"></text-editor>
</template>
</van-field>
<van-field class="direction-column-field" name="measures" label="建议措施" required
:rules="[{ required: true, message: '请填写建议措施' }]">
<van-field class="direction-column-field" name="measures" label="建议措施" required>
<template #input>
<text-editor v-model="formData.measures" key="measures"
placeholder="建议措施"></text-editor>
@@ -481,9 +478,17 @@ layout("/layouts/platform_h5.html"){
this.$toast("请填写提案名称");
return;
}
if (!this.formData.researchFindings || this.formData.researchFindings.trim().length < 1) {
this.$toast("请填写调研情况");
return;
}
if (!this.formData.measures || this.formData.measures.trim().length < 1) {
this.$toast("请填写建议措施");
return;
}
if (this.formData.brief.length < this.proposalConfig.briefMinLength) {
this.$toast("案由" + this.proposalConfig.briefMinLength + "字");
this.$toast("提案案由最少为" + this.proposalConfig.briefMinLength + "字");
return;
}
@@ -528,9 +533,17 @@ layout("/layouts/platform_h5.html"){
this.$toast("请填写提案名称");
return;
}
if (!this.formData.researchFindings || this.formData.researchFindings.trim().length < 1) {
this.$toast("请填写调研情况");
return;
}
if (!this.formData.measures || this.formData.measures.trim().length < 1) {
this.$toast("请填写建议措施");
return;
}
if (this.formData.brief.length < this.proposalConfig.briefMinLength) {
this.$toast("提案内容和依据最少为" + this.proposalConfig.briefMinLength + "字");
this.$toast("提案案由最少为" + this.proposalConfig.briefMinLength + "字");
return;
}