This commit is contained in:
2025-09-04 09:40:50 +08:00
parent 5441b1d785
commit 53e6c4bc52
35 changed files with 1924 additions and 1266 deletions
@@ -19,8 +19,10 @@ import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.FieldFilter;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.Daos;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang; import org.nutz.lang.Lang;
@@ -29,6 +31,7 @@ import org.nutz.lang.util.NutMap;
import org.nutz.log.Log; import org.nutz.log.Log;
import org.nutz.log.Logs; import org.nutz.log.Logs;
import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.GET;
import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param; import org.nutz.mvc.annotation.Param;
@@ -490,4 +493,15 @@ public class SysRoleController {
return Result.success(); return Result.success();
} }
@At
@Ok("json:full")
@GET
@SaCheckLogin
public Result getMenuOptions() {
FieldFilter fieldFilter = FieldFilter.create(Sys_menu.class, "^id|name$");
Cnd cnd = Cnd.where("disabled", "=", 0);
cnd.and(Cnd.exps("parentId", "is", null).or("parentId", "=", ""));
return Result.success(Daos.ext(sysRoleService.dao(), fieldFilter).query(Sys_menu.class, cnd));
}
} }
@@ -5,38 +5,52 @@ import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.excel.EasyExcel;
import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination; import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result; import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService; import com.budwk.app.base.service.BaseService;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.base.utils.EasyExcelUtil;
import com.budwk.app.sys.models.Sys_role; import com.budwk.app.sys.models.Sys_role;
import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope; import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope;
import com.budwk.app.zhgh.activity.basic.param.ActivityUserScopePageParam; import com.budwk.app.zhgh.activity.basic.param.ActivityUserScopePageParam;
import com.budwk.app.zhgh.activity.basic.service.ActivityBasicScopeService; import com.budwk.app.zhgh.activity.basic.service.ActivityBasicScopeService;
import com.budwk.app.zhgh.activity.basic.template.UserTemp;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static; import org.nutz.dao.util.cri.Static;
import org.nutz.integration.jedis.RedisService;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json; import org.nutz.json.Json;
import org.nutz.lang.Lang; import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.AdaptBy;
import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param; import org.nutz.mvc.annotation.Param;
import org.nutz.mvc.upload.TempFile;
import org.nutz.mvc.upload.UploadAdaptor;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
@@ -59,6 +73,9 @@ public class ActivityBasicScopeController {
@Inject @Inject
private Dao dao; private Dao dao;
@Inject
private RedisService redisService;
@At("") @At("")
@Ok("beetl:platform/zhgh/activity/basic/userScope/index.html") @Ok("beetl:platform/zhgh/activity/basic/userScope/index.html")
@SaCheckPermission("activity.basic.scope") @SaCheckPermission("activity.basic.scope")
@@ -90,6 +107,7 @@ public class ActivityBasicScopeController {
FROM FROM
`vw_user` u `vw_user` u
LEFT JOIN sys_user_role sur on sur.userid = u.id LEFT JOIN sys_user_role sur on sur.userid = u.id
LEFT JOIN sys_club_user clubuser ON clubuser.userid=u.id
$condition $condition
"""); """);
try { try {
@@ -201,8 +219,8 @@ public class ActivityBasicScopeController {
} }
@At @At
public Object getRoleListByMenuId(String menuId) { public Object getRoleListByMenuId() {
return Result.success(dao.query(Sys_role.class, Cnd.where("system_name", "=", menuId).desc("code"))); return Result.success(dao.query(Sys_role.class, Cnd.NEW().desc("code")));
} }
@@ -275,6 +293,7 @@ public class ActivityBasicScopeController {
FROM FROM
`vw_user` u `vw_user` u
LEFT JOIN sys_user_role sur on sur.userid = u.id LEFT JOIN sys_user_role sur on sur.userid = u.id
LEFT JOIN sys_club_user clubuser ON clubuser.userid=u.id
$condition $condition
"""); """);
@@ -342,6 +361,11 @@ public class ActivityBasicScopeController {
} }
if (StrUtil.isNotBlank(activityUserScopePageParam.getExistsLoginNameRedisKey())) {
List<String> loginNames = redisService.lrange(activityUserScopePageParam.getExistsLoginNameRedisKey(), 0, -1);
cnd.andEX("u.loginname", "in", loginNames);
}
try { try {
@@ -350,8 +374,8 @@ public class ActivityBasicScopeController {
cnd.andEX("u.personType", IN_OR_NIN_OP, activityUserScopePageParam.getPersonTypes()); cnd.andEX("u.personType", IN_OR_NIN_OP, activityUserScopePageParam.getPersonTypes());
cnd.andEX("u.userState", IN_OR_NIN_OP, activityUserScopePageParam.getUserStates()); cnd.andEX("u.userState", IN_OR_NIN_OP, activityUserScopePageParam.getUserStates());
cnd.andEX("u.sex", IN_OR_NIN_OP, activityUserScopePageParam.getSexTypes()); cnd.andEX("u.sex", IN_OR_NIN_OP, activityUserScopePageParam.getSexTypes());
cnd.andEX("sur.jdhid", EQ_OR_NEQ_OP, activityUserScopePageParam.getTeacherMeetingId()); cnd.andEX("sur.tcSessionId", EQ_OR_NEQ_OP, activityUserScopePageParam.getSessionId());
cnd.andEX("sur.roleid", IN_OR_NIN_OP, activityUserScopePageParam.getRoleIds()); cnd.andEX("sur.roleId", IN_OR_NIN_OP, activityUserScopePageParam.getRoleIds());
cnd.andEX("clubuser.clubid", EQ_OR_NEQ_OP, activityUserScopePageParam.getClubId()); cnd.andEX("clubuser.clubid", EQ_OR_NEQ_OP, activityUserScopePageParam.getClubId());
} catch (Exception e) { } catch (Exception e) {
@@ -362,4 +386,82 @@ public class ActivityBasicScopeController {
} }
@At
@Ok("void")
@ApiOperation("下载导入人员模板")
@SaCheckPermission("activity.basic.user")
public void downloadImport(HttpServletResponse response) {
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();) {
EasyExcel.write(byteArrayOutputStream, UserTemp.class)
.sheet("福利名单导入模版")
.doWrite(ArrayList::new);
CommonDownloadUtil.download("人员导入模板.xlsx", byteArrayOutputStream.toByteArray(), response);
} catch (Exception e) {
e.printStackTrace();
}
}
@At
@SaCheckPermission("activity.basic.user")
@ApiOperation("导入人员核对名单")
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
public Result doImport(TempFile file) {
String matchUserLoginNamesKey = "ActivityBasicScopeController.doImport.time=" + System.currentTimeMillis();
List<T> ts = EasyExcelUtil.syncReadModel(file.getFile(), UserTemp.class, 0, 1);
List<UserTemp> userImportList = JSONUtil.parseArray(JSONUtil.toJsonStr(ts)).toList(UserTemp.class);
//判断人员哪些存在哪些不存在
Sql sql = Sqls.queryString("""
SELECT
u.loginname
FROM
sys_user u
""");
dao.execute(sql);
String[] sysLoginNames = (String[]) sql.getResult();
//存在的工号
List<String> existsLoginNames = new ArrayList<>();
for (UserTemp excelUser : userImportList) {
if (ArrayUtil.contains(sysLoginNames, excelUser.getLoginName())) {
existsLoginNames.add(excelUser.getLoginName());
} else {
excelUser.setErrorInfo("系统查不到此人");
}
}
//匹配不到的用户
List<UserTemp> errorExcelTempUsers = userImportList.stream().filter(v -> StrUtil.isNotBlank(v.getErrorInfo())).collect(Collectors.toList());
NutMap nutMap = NutMap.NEW();
nutMap.setv("totalCount", userImportList.size());
nutMap.setv("successCount", existsLoginNames.size());
nutMap.setv("errorCount", errorExcelTempUsers.size());
nutMap.setv("errorList", errorExcelTempUsers.stream().map(v -> {
return NutMap.NEW().addv("工号", v.getLoginName()).addv("姓名", v.getUserName()).addv("错误原因", v.getErrorInfo());
}).collect(Collectors.toList()));
nutMap.setv("existsLoginNameRedisKey", matchUserLoginNamesKey);
//保存存在的工号
if (Lang.isNotEmpty(existsLoginNames)) {
redisService.lpush(matchUserLoginNamesKey, existsLoginNames.toArray(new String[0]));
redisService.expire(matchUserLoginNamesKey, 60 * 3);
}
return Result.success(nutMap);
}
@At
@SaCheckPermission("activity.basic.user")
@ApiOperation("清空查询条件")
public Result clearSearchCnd(String existsLoginNameRedisKey) {
if (StrUtil.isNotBlank(existsLoginNameRedisKey)) {
redisService.del(existsLoginNameRedisKey);
}
return Result.success();
}
} }
@@ -2,26 +2,43 @@ package com.budwk.app.zhgh.activity.basic.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination; import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm; import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result; import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService; import com.budwk.app.base.service.BaseService;
import com.budwk.app.base.utils.EasyExcelUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope; import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope;
import com.budwk.app.zhgh.activity.basic.template.UserTemp;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.formula.functions.T;
import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static; import org.nutz.dao.util.cri.Static;
import org.nutz.integration.jedis.RedisService;
import org.nutz.ioc.aop.Aop; import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.AdaptBy;
import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param; import org.nutz.mvc.annotation.Param;
import org.nutz.mvc.upload.TempFile;
import org.nutz.mvc.upload.UploadAdaptor;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* @ClassName ActivityBasicScopeUserDataController * @ClassName ActivityBasicScopeUserDataController
@@ -37,6 +54,9 @@ public class ActivityBasicScopeUserDataController {
@Inject @Inject
private BaseService baseService; private BaseService baseService;
@Inject
private RedisService redisService;
@At("") @At("")
@Ok("beetl:platform/zhgh/activity/basic/userScopeData/index.html") @Ok("beetl:platform/zhgh/activity/basic/userScopeData/index.html")
@SaCheckPermission("activity.basic.user") @SaCheckPermission("activity.basic.user")
@@ -51,29 +71,8 @@ public class ActivityBasicScopeUserDataController {
@Param(value = "unitId") String unitId, @Param(value = "unitId") String unitId,
@Param(value = "personType") String personType, @Param(value = "personType") String personType,
@Param(value = "userState") String userState, @Param(value = "userState") String userState,
@Param(value = "groupId") Integer groupId) { @Param(value = "groupId") Integer groupId,
/* Sql sql = Sqls.create(""" @Param(value = "existsLoginNameRedisKey") String existsLoginNameRedisKey) {
SELECT
aus.id,
u.username AS userName,
u.loginname AS loginName,
u.sex,
u.birthday,
u.mobile,
u.personType,
u.userState,
u.unitname AS unitName,
u.unionname AS unionName,
aus.groupId,
aus.groupName,
actun.unionname AS activityUnionName
FROM
activity_user_scope aus
LEFT JOIN `vw_user` u ON u.id = aus.userId
LEFT JOIN activity_basic_unit actit ON actit.id=u.unitid
LEFT JOIN activity_basic_union actun ON actit.unionid=actun.id
$condition
""");*/
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
aus.id, aus.id,
@@ -107,9 +106,13 @@ public class ActivityBasicScopeUserDataController {
cnd.andEX("u.personType", "=", personType); cnd.andEX("u.personType", "=", personType);
cnd.andEX("u.userState", "=", userState); cnd.andEX("u.userState", "=", userState);
if (!StpUtil.hasRole(RoleConstant.SYSADMIN.name()) && if (!StpUtil.hasRole(RoleConstant.SYSADMIN.name()) &&
!StpUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name())) { !StpUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("aus.creator", "=", SecurityUtil.getUserId()); cnd.and("aus.creator", "=", SecurityUtil.getUserId());
} }
if (StrUtil.isNotBlank(existsLoginNameRedisKey)) {
List<String> loginNames = redisService.lrange(existsLoginNameRedisKey, 0, -1);
cnd.andEX("u.loginname", "in", loginNames);
}
sql.setCondition(cnd); sql.setCondition(cnd);
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
@@ -134,7 +137,17 @@ public class ActivityBasicScopeUserDataController {
@Param(value = "unionId") String unionId, @Param(value = "unionId") String unionId,
@Param(value = "unitId") String unitId, @Param(value = "unitId") String unitId,
@Param(value = "personType") String personType, @Param(value = "personType") String personType,
@Param(value = "userState") String userState) { @Param(value = "userState") String userState,
@Param(value = "existsLoginNameRedisKey") String existsLoginNameRedisKey) {
List<String> existsLoginNames = new ArrayList<>();
if(StrUtil.isNotBlank(existsLoginNameRedisKey) && redisService.exists(existsLoginNameRedisKey)){
existsLoginNames = redisService.lrange(existsLoginNameRedisKey, 0, -1);
if (StrUtil.isNotBlank(existsLoginNameRedisKey)) {
redisService.del(existsLoginNameRedisKey);
}
}
Sql sql = Sqls.create("select id from `vw_user` u $condition"); Sql sql = Sqls.create("select id from `vw_user` u $condition");
Cnd userCnd = Cnd.NEW(); Cnd userCnd = Cnd.NEW();
if (StrUtil.isNotBlank(searchName) && StrUtil.isNotBlank(searchKeyword)) { if (StrUtil.isNotBlank(searchName) && StrUtil.isNotBlank(searchKeyword)) {
@@ -145,12 +158,13 @@ public class ActivityBasicScopeUserDataController {
userCnd.andEX("u.personType", "=", personType); userCnd.andEX("u.personType", "=", personType);
userCnd.andEX("u.userState", "=", userState); userCnd.andEX("u.userState", "=", userState);
userCnd.andEX("u.id", "=", id); userCnd.andEX("u.id", "=", id);
userCnd.andEX("u.loginname","in",existsLoginNames);
sql.setCondition(userCnd); sql.setCondition(userCnd);
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
cnd.and("groupId", "=", groupId); cnd.and("groupId", "=", groupId);
if (!StpUtil.hasRole(RoleConstant.SYSADMIN.name()) && if (!StpUtil.hasRole(RoleConstant.SYSADMIN.name()) &&
!StpUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name())) { !StpUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("creator", "=", SecurityUtil.getUserId()); cnd.and("creator", "=", SecurityUtil.getUserId());
} }
if (StrUtil.isNotBlank(id)) { if (StrUtil.isNotBlank(id)) {
@@ -163,5 +177,56 @@ public class ActivityBasicScopeUserDataController {
return Result.success(); return Result.success();
} }
@At
@SaCheckPermission("activity.basic.user")
@ApiOperation("导入人员核对名单")
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
public Result doImport(@Valid String groupId, TempFile file) {
String matchUserLoginNamesKey = "ActivityBasicUserController.doImport.groupId=" + groupId + "time=" + System.currentTimeMillis();
List<T> ts = EasyExcelUtil.syncReadModel(file.getFile(), UserTemp.class, 0, 1);
List<UserTemp> userImportList = JSONUtil.parseArray(JSONUtil.toJsonStr(ts)).toList(UserTemp.class);
//判断人员哪些存在哪些不存在
Sql sql = Sqls.queryString("""
SELECT
u.loginname
FROM
activity_user_scope aus
LEFT JOIN sys_user u ON u.id = aus.userId
WHERE
aus.groupId = @groupId
""").setParam("groupId", groupId);
baseService.execute(sql);
String[] sysLoginNames = (String[]) sql.getResult();
//存在的工号
List<String> existsLoginNames = new ArrayList<>();
for (UserTemp excelUser : userImportList) {
if (ArrayUtil.contains(sysLoginNames, excelUser.getLoginName())) {
existsLoginNames.add(excelUser.getLoginName());
} else {
excelUser.setErrorInfo("系统查不到此人");
}
}
//匹配不到的用户
List<UserTemp> errorExcelTempUsers = userImportList.stream().filter(v -> StrUtil.isNotBlank(v.getErrorInfo())).collect(Collectors.toList());
NutMap nutMap = NutMap.NEW();
nutMap.setv("totalCount", userImportList.size());
nutMap.setv("successCount", existsLoginNames.size());
nutMap.setv("errorCount", errorExcelTempUsers.size());
nutMap.setv("errorList", errorExcelTempUsers.stream().map(v -> {
return NutMap.NEW().addv("工号", v.getLoginName()).addv("姓名", v.getUserName()).addv("错误原因", v.getErrorInfo());
}).collect(Collectors.toList()));
nutMap.setv("existsLoginNameRedisKey", matchUserLoginNamesKey);
//保存存在的工号
if (Lang.isNotEmpty(existsLoginNames)) {
redisService.lpush(matchUserLoginNamesKey, existsLoginNames.toArray(new String[0]));
redisService.expire(matchUserLoginNamesKey, 60 * 3);
}
return Result.success(nutMap);
}
} }
@@ -33,7 +33,7 @@ public class ActivityUserScopePageParam extends PageForm {
private Integer setGroupId; private Integer setGroupId;
private String setGroupName; private String setGroupName;
// 教师会议id // 教师会议id
private String teacherMeetingId; private String sessionId;
// 角色id // 角色id
private String[] roleIds; private String[] roleIds;
// 用户id // 用户id
@@ -46,4 +46,6 @@ public class ActivityUserScopePageParam extends PageForm {
private String props; private String props;
private String existsLoginNameRedisKey;
} }
@@ -0,0 +1,27 @@
package com.budwk.app.zhgh.activity.basic.template;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode
@ContentRowHeight(20) // 内容行高
@HeadRowHeight(20) // 表头行高
@ColumnWidth(25)
public class UserTemp {
@ExcelProperty("工号")
private String loginName;
@ExcelProperty("姓名")
private String userName;
@ExcelIgnore
private String errorInfo;
}
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.activity.culture.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode; import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.date.DateUtil;
import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.result.Result; import com.budwk.app.base.result.Result;
@@ -12,6 +13,7 @@ import com.budwk.app.zhgh.activity.culture.models.ActivityTissue;
import com.budwk.app.zhgh.activity.culture.service.ActivityCultureService; import com.budwk.app.zhgh.activity.culture.service.ActivityCultureService;
import com.budwk.app.zhgh.club.model.SysClub; import com.budwk.app.zhgh.club.model.SysClub;
import com.budwk.app.zhgh.club.service.SysClubService; import com.budwk.app.zhgh.club.service.SysClubService;
import io.swagger.annotations.ApiOperation;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
@@ -79,10 +81,16 @@ public class ActivityCultureApplyActivityController {
@At @At
@SLog(tag = "文化活动", msg = "添加了一条文化活动记录", param = true, result = true) @ApiOperation("保存活动申报")
@SLog( tag = "文化活动-活动申报", msg = "保存了一条文化活动记录")
@SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club"}, mode = SaMode.OR) @SaCheckPermission(value = {"activity.culture.applyActivity.school", "activity.culture.applyActivity.union", "activity.culture.applyActivity.club"}, mode = SaMode.OR)
public Result doAdd(@Param("tissue") @Valid ActivityTissue tissue) { public Result save(@Param("data") ActivityTissue tissue) {
activityCultureService.doAddActivity(tissue); if (tissue.getActivity_type() == 40002) {
tissue.setUnionId(SecurityUtil.getUnionId());
}
tissue.setUserId(SecurityUtil.getUserId());
tissue.setApplyTime(DateUtil.now());
activityCultureService.insertOrUpdate(tissue);
return Result.success(); return Result.success();
} }
@@ -3,7 +3,6 @@ package com.budwk.app.zhgh.activity.culture.controller;
import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode; import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.stream.CollectorUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
@@ -15,12 +14,10 @@ import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.activity.culture.models.ActivityTissuePerson; import com.budwk.app.zhgh.activity.culture.models.ActivityTissuePerson;
import com.budwk.app.zhgh.activity.culture.service.ActivityCultureApplyUserService; import com.budwk.app.zhgh.activity.culture.service.ActivityCultureApplyUserService;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; 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.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json; import org.nutz.json.Json;
@@ -34,7 +31,6 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* @ClassName ActivityCultureApplyUserController * @ClassName ActivityCultureApplyUserController
@@ -115,11 +111,14 @@ public class ActivityCultureApplyUserController {
@At @At
@SaCheckLogin @SaCheckLogin
@ApiOperation(value = "队友搜索") @ApiOperation(value = "队友搜索")
public Result queryTeammate(@Valid String keyword) { public Result queryTeammate(@Valid String keyword,Integer signUpMethod) {
Sql sql = Sqls.create("select id userId,username userName,loginname loginName,sex,mobile,unitName from vw_user $condition limit 0,10"); Sql sql = Sqls.create("select id userId,username userName,loginname loginName,sex,mobile,unitName from vw_user $condition limit 0,10");
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
cnd.or(Cnd.likeEX("username", keyword)); cnd.or(Cnd.likeEX("username", keyword));
cnd.or(Cnd.likeEX("loginname", keyword)); cnd.or(Cnd.likeEX("loginname", keyword));
if (signUpMethod == 3){
cnd.and("unionid", "=", SecurityUtil.getUnionId());
}
sql.setCondition(cnd); sql.setCondition(cnd);
List<NutMap> list = activityCultureApplyUserService.listMap(sql); List<NutMap> list = activityCultureApplyUserService.listMap(sql);
return Result.success(list); return Result.success(list);
@@ -142,6 +141,16 @@ public class ActivityCultureApplyUserController {
return Result.success(list); return Result.success(list);
} }
@At
@SaCheckLogin
@ApiOperation(value = "查询分工会报名人员")
public Result listTeamUserUnion(@Valid String activityId) {
List<ActivityTissuePerson> list = dao.query(ActivityTissuePerson.class, Cnd.where(ActivityTissuePerson::getTissueId, "=", activityId)
.and(ActivityTissuePerson::getApplyUserId, "=", SecurityUtil.getUserId())
);
return Result.success(list);
}
@At @At
@SaCheckLogin @SaCheckLogin
@ApiOperation(value = "是否报名") @ApiOperation(value = "是否报名")
@@ -1,12 +1,8 @@
package com.budwk.app.zhgh.activity.culture.models; package com.budwk.app.zhgh.activity.culture.models;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import com.budwk.app.base.model.BaseModel; import com.budwk.app.base.model.BaseModel;
import com.budwk.app.base.model.CustomFormField; import com.budwk.app.base.model.CustomFormField;
import com.budwk.app.sys.models.Sys_home_activity;
import com.budwk.app.sys.services.SysHomeConvert;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*; import org.nutz.dao.entity.annotation.*;
@@ -25,7 +21,7 @@ import java.util.List;
@Data @Data
@Comment("文化活动表") @Comment("文化活动表")
@Table("activity_tissue") @Table("activity_tissue")
public class ActivityTissue extends BaseModel implements Serializable, SysHomeConvert { public class ActivityTissue extends BaseModel implements Serializable {
@Column @Column
@Name @Name
@@ -252,32 +248,5 @@ public class ActivityTissue extends BaseModel implements Serializable, SysHomeCo
@Many(field = "tissueId") @Many(field = "tissueId")
private List<ActivityTissuePerson> tissuePersonList; private List<ActivityTissuePerson> tissuePersonList;
@Override
public Sys_home_activity covertToSysHomeActivity() {
Sys_home_activity sysHomeActivity = new Sys_home_activity();
sysHomeActivity.setId(this.getId());
sysHomeActivity.setName(this.getName());
sysHomeActivity.setCover(this.getCover());
if (this.getActivity_type() == 40001) {
sysHomeActivity.setUrl("/platform/activity/culture/applyUser/school");
} else if (this.getActivity_type() == 40002) {
sysHomeActivity.setUrl("/platform/activity/culture/applyUser/union");
} else if (this.getActivity_type() == 40003) {
sysHomeActivity.setUrl("/platform/activity/culture/applyUser/club");
}
sysHomeActivity.setH5Url("/platform/h5/activity/culture/applyUser");
if (StrUtil.isNotBlank(this.getApplyStartTime())) {
sysHomeActivity.setStartDate(DateUtil.parseDate(this.getApplyStartTime()));
sysHomeActivity.setEndDate(DateUtil.parseDate(this.getApplyEndTime()));
}
sysHomeActivity.setAllowUserGroupId(this.getGroupId());
sysHomeActivity.setEnable(this.getIsUnseal());
sysHomeActivity.setClassPath(this.getClass().getPackageName() + this.getClass().getName());
return sysHomeActivity;
}
private String username;
private String loginname;
} }
@@ -18,7 +18,6 @@ public interface ActivityCultureService extends BaseService<ActivityTissue> {
*/ */
List<NutMap> getUnionData(String activityScopeGroupId); List<NutMap> getUnionData(String activityScopeGroupId);
void doAddActivity(ActivityTissue tissue);
void doEditActivity(ActivityTissue tissue); void doEditActivity(ActivityTissue tissue);
@@ -4,14 +4,11 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.exception.BaseException; import com.budwk.app.base.exception.BaseException;
import com.budwk.app.base.page.Pagination; import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm; import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.sys.views.View_user; 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.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope; import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope;
import com.budwk.app.zhgh.activity.culture.models.ActivityTissue; import com.budwk.app.zhgh.activity.culture.models.ActivityTissue;
@@ -21,15 +18,11 @@ import org.nutz.dao.Cnd;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static; import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings; import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@@ -221,23 +214,30 @@ public class ActivityCultureApplyUserServiceImpl extends BaseServiceImpl<Activit
//分工会报名独有判断 //分工会报名独有判断
//判断总人数限制 //判断总人数限制
//判断分工会人数限制 //判断分工会人数限制
View_user user = dao().fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId())); Sql sql = Sqls.create("""
ActivityTissuePerson activityTissuePerson = new ActivityTissuePerson(); SELECT
activityTissuePerson.setTissueId(activityId); id AS userId,
activityTissuePerson.setUserId(user.getId()); username AS userName,
activityTissuePerson.setUserName(user.getUsername()); loginname AS loginName,
activityTissuePerson.setLoginName(user.getLoginname()); sex,
activityTissuePerson.setSex(user.getSex()); mobile,
activityTissuePerson.setMobile(user.getMobile()); unitName,
activityTissuePerson.setUnitId(user.getUnitId()); unionName,
activityTissuePerson.setUnitName(user.getUnitName()); '$activityId' AS tissueId,
activityTissuePerson.setUnionId(user.getUnionId()); '$applyUserId' AS applyUserId,
activityTissuePerson.setUnionName(user.getUnionName()); '$applyUserUserName' AS applyUserUserName,
activityTissuePerson.setApplyDateTime(DateUtil.now()); '$applyDateTime' AS applyDateTime
activityTissuePerson.setApplyUserId(user.getId()); FROM
activityTissuePerson.setApplyUserUserName(user.getUsername()); `vw_user`
activityTissuePerson.setDynamicFormData(dynamicFormParam); $condition
insert(activityTissuePerson); """);
sql.setVar("activityId", activityId);
sql.setVar("applyUserId", SecurityUtil.getUserId());
sql.setVar("applyDateTime", DateUtil.now());
sql.setVar("applyUserUserName", SecurityUtil.getUserUsername());
sql.setCondition(Cnd.where("id", "in", personIds));
List<ActivityTissuePerson> fullPersonList = listEntity(sql);
insert(fullPersonList);
} }
} }
@@ -1,12 +1,10 @@
package com.budwk.app.zhgh.activity.culture.service.impl; package com.budwk.app.zhgh.activity.culture.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.model.Audit; import com.budwk.app.base.model.Audit;
import com.budwk.app.base.param.PageForm; import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.sys.models.Sys_home_activity;
import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.activity.culture.models.ActivityTissue; import com.budwk.app.zhgh.activity.culture.models.ActivityTissue;
@@ -72,38 +70,10 @@ public class ActivityCultureServiceImpl extends BaseServiceImpl<ActivityTissue>
} }
} }
@Override
public void doAddActivity(ActivityTissue tissue) {
tissue.setUserId(SecurityUtil.getUserId());
tissue.setApplyTime(DateUtil.now());
tissue.setIsUnseal(true);
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
tissue.setState(1);
} else {
tissue.setState(3);
}
if (tissue.getActivity_type() == 40002) {
tissue.setUnionId(SecurityUtil.getUnionId());
} else if (tissue.getActivity_type() == 40003) {
// tissue.setClubId(vi.getClubId());
}
insertWith(tissue, "tissuePersonList");
if (tissue.getIsEnrollSystem()) {
Sys_home_activity sysHomeActivity = tissue.covertToSysHomeActivity();
dao().insertOrUpdate(sysHomeActivity);
}
}
@Override @Override
public void doEditActivity(ActivityTissue tissue) { public void doEditActivity(ActivityTissue tissue) {
update(tissue); update(tissue);
if (tissue.getIsEnrollSystem()) {
Sys_home_activity sysHomeActivity = tissue.covertToSysHomeActivity();
dao().insertOrUpdate(sysHomeActivity);
} else {
dao().delete(Sys_home_activity.class, tissue.getId());
}
} }
@Override @Override
@@ -57,7 +57,7 @@ public class EvaluateBranchUnionApprovalController {
ea.name AS evaluateName, ea.name AS evaluateName,
hb.name AS honorName, hb.name AS honorName,
bs.name as honorTypeName, bs.name as honorTypeName,
ins.id AS instanceId, ins.id AS instanceId,
ins.businessNo, ins.businessNo,
ins.state instanceState, ins.state instanceState,
ins.variable instanceVariable, ins.variable instanceVariable,
@@ -76,17 +76,18 @@ public class EvaluateBranchUnionApprovalController {
FROM FROM
wf_process_task t wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
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
LEFT JOIN evaluate_apply info ON info.id = ins.businessNo LEFT JOIN evaluate_apply info ON info.id = ins.businessNo
LEFT JOIN evaluate_activity ea ON ea.id = info.evaluateId LEFT JOIN evaluate_activity ea ON ea.id = info.evaluateId
LEFT JOIN honor_basic_settings hb ON hb.id = info.honorId LEFT JOIN honor_basic_settings hb ON hb.id = info.honorId
LEFT JOIN honor_basic_settings bs ON bs.id = info.honorTypeId LEFT JOIN honor_basic_settings bs ON bs.id = info.honorTypeId
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 $condition
"""); """);
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
cnd.and("t.taskName", "=", "3bdaa29d-e5eb-4e3e-b7f1-14d03bedd078"); cnd.and("t.taskName", "=", "3bdaa29d-e5eb-4e3e-b7f1-14d03bedd078");
cnd.and("info.evaluateId", "=", pageForm.getEvaluateId());
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
if (approval) { if (approval) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
@@ -102,6 +102,7 @@ public class EvaluateSchoolUnionApprovalController {
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
cnd.andEX("info.unionId","=",pageForm.getUnionId()); cnd.andEX("info.unionId","=",pageForm.getUnionId());
cnd.andEX("info.unitId","=",pageForm.getUnitId()); cnd.andEX("info.unitId","=",pageForm.getUnitId());
cnd.andEX("info.evaluateId","=",pageForm.getEvaluateId());
if (approval) { if (approval) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
@@ -15,13 +15,13 @@ import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowEngine; import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.flow.entity.ProcessInstance; import com.budwk.app.flow.entity.ProcessInstance;
import com.budwk.app.flow.entity.ProcessTask; import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
import com.budwk.app.sys.views.View_user; 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.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.enrollmentRegistration.model.EnrollmentRegistration;
import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationActivity; import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationActivity;
import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationLine; import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationLine;
import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationQuotaAllocation;
import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationSignUpUser; import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationSignUpUser;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@@ -149,7 +149,7 @@ public class ExcellentRecuperationActivitySignUpController {
@At @At
@ApiOperation("删除报名信息") @ApiOperation("删除报名信息")
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("enrollmentRegistration.summary") @SaCheckPermission("excellentRecuperation.activitySignUp")
@SLog(tag = "优秀教职工疗休养-活动报名", type = "excellentRecuperationActivitySignUp", msg = "删除id: ${args[0]}") @SLog(tag = "优秀教职工疗休养-活动报名", type = "excellentRecuperationActivitySignUp", msg = "删除id: ${args[0]}")
public Result doDelete(String id) { public Result doDelete(String id) {
dao.delete(ExcellentRecuperationSignUpUser.class, id); dao.delete(ExcellentRecuperationSignUpUser.class, id);
@@ -205,6 +205,9 @@ public class ExcellentRecuperationActivitySignUpController {
public Result listActivityByYear(String year) { public Result listActivityByYear(String year) {
List<ExcellentRecuperationActivity> activityList = dao.query(ExcellentRecuperationActivity.class, List<ExcellentRecuperationActivity> activityList = dao.query(ExcellentRecuperationActivity.class,
Cnd.where("YEAR(signUpStartTime)", "=", year).desc("signUpStartTime")); Cnd.where("YEAR(signUpStartTime)", "=", year).desc("signUpStartTime"));
activityList.forEach(activity -> {
activity.setUnionQuotaAllocationList(dao.query(ExcellentRecuperationQuotaAllocation.class, Cnd.where("activityId", "=", activity.getId())));
});
return Result.success(activityList); return Result.success(activityList);
} }
@@ -258,5 +261,47 @@ public class ExcellentRecuperationActivitySignUpController {
return Result.success(dao.fetch(ExcellentRecuperationSignUpUser.class, id)); return Result.success(dao.fetch(ExcellentRecuperationSignUpUser.class, id));
} }
@At
@ApiOperation("查询报名人员")
@SaCheckLogin
public Result getSIgnUpUserList(String unionId, String activityId){
Sql sql = Sqls.create("""
SELECT
info.*,
line.lineName,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariale,
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 taskVariale,
IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke,
(SELECT MAX(id) FROM wf_process_task WHERE processInstanceId = ins.id AND taskName = 'startTask' AND taskState IN (10, 20)) AS startTaskId
FROM
excellent_recuperation_sign_user info
LEFT JOIN excellent_recuperation_line line ON line.id = info.lineId
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.and("info.activityId", "=", activityId);
cnd.and("info.unionId", "=", unionId);
cnd.and("ins.state", "!=", ProcessInstanceStateEnum.REJECT.getCode());
sql.setCondition(cnd);
List<NutMap> map = baseService.listMap(sql);
return Result.success(map);
}
} }
@@ -19,7 +19,6 @@ import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationTravelAgency; import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model.ExcellentRecuperationTravelAgency;
import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.service.ExcellentRecuperationTravelAgencyService; import com.budwk.app.zhgh.staffbenefit.excellentRecuperation.service.ExcellentRecuperationTravelAgencyService;
import com.budwk.app.zhgh.staffbenefit.recuperation.mode.TravelAgencyExcelMode; import com.budwk.app.zhgh.staffbenefit.recuperation.mode.TravelAgencyExcelMode;
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationTravelAgency;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -221,8 +220,8 @@ public class ExcellentRecuperationTravelAgencyController {
ExcelImportRes<TravelAgencyExcelMode> excelImportRes = new ExcelImportRes<>(); ExcelImportRes<TravelAgencyExcelMode> excelImportRes = new ExcelImportRes<>();
excelImportRes.setTotalRecords(travelAgency.size()); excelImportRes.setTotalRecords(travelAgency.size());
List<RecuperationTravelAgency> travelAgencyList = dao.query(RecuperationTravelAgency.class, Cnd.NEW().desc("id")); List<ExcellentRecuperationTravelAgency> travelAgencyList = dao.query(ExcellentRecuperationTravelAgency.class, Cnd.NEW().desc("id"));
Map<String, String> map = travelAgencyList.stream().collect(Collectors.toMap(RecuperationTravelAgency::getTravelAgencyName, RecuperationTravelAgency::getId)); Map<String, String> map = travelAgencyList.stream().collect(Collectors.toMap(ExcellentRecuperationTravelAgency::getTravelAgencyName, ExcellentRecuperationTravelAgency::getId));
for (int i = 0; i < travelAgency.size(); i++) { for (int i = 0; i < travelAgency.size(); i++) {
TravelAgencyExcelMode travel = travelAgency.get(i); TravelAgencyExcelMode travel = travelAgency.get(i);
@@ -234,7 +233,7 @@ public class ExcellentRecuperationTravelAgencyController {
travel.setErrInfo("旅行社名称为空", i + 1); travel.setErrInfo("旅行社名称为空", i + 1);
continue; continue;
} }
RecuperationTravelAgency agency = new RecuperationTravelAgency(); ExcellentRecuperationTravelAgency agency = new ExcellentRecuperationTravelAgency();
if (Strings.isNotBlank(map.get(travel.getTravelAgencyName()))){ if (Strings.isNotBlank(map.get(travel.getTravelAgencyName()))){
agency.setId(map.get(travel.getTravelAgencyName())); agency.setId(map.get(travel.getTravelAgencyName()));
} }
@@ -1,7 +1,6 @@
package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model; package com.budwk.app.zhgh.staffbenefit.excellentRecuperation.model;
import com.budwk.app.base.model.BaseModel; import com.budwk.app.base.model.BaseModel;
import com.budwk.app.zhgh.staffbenefit.recuperation.model.RecuperationTravelAgency;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*; import org.nutz.dao.entity.annotation.*;
@@ -55,7 +54,7 @@ public class ExcellentRecuperationLine extends BaseModel {
private boolean isDisabled; private boolean isDisabled;
@Column @Column
@ColDefine(type = ColType.VARCHAR, width = 50) @ColDefine(type = ColType.VARCHAR, width = 500)
@Comment("缩略图") @Comment("缩略图")
private String file; private String file;
@@ -0,0 +1,235 @@
<template>
<div style="padding: 20px 50px">
<el-timeline>
<el-timeline-item timestamp="下载模板" placement="top">
<el-card>
<el-button size="medium" style="width: 200px"
@click="$downLoad('/platform/activity/basic/scope/downloadImport')" icon="el-icon-download">下载模板
</el-button>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="上传文件" placement="top">
<el-card>
<el-form>
<el-upload
action="#"
name="file"
ref="upload"
:on-remove="
(file, fileList) => {
importData.fileList = fileHandleRemove(file, fileList)
importResult = {
errorCount: 0,
successCount: 0,
totalCount: 0,
errorList: []
}
}
"
:on-change="
(file, fileList) => {
importData.fileList = fileHandleChange(file, fileList, { type: ['xls', 'xlsx'] })
}
"
:auto-upload="false"
:limit="1"
:file-list="importData.fileList"
>
<el-button size="medium" type="" icon="el-icon-upload" style="width: 200px">选择文件</el-button>
<div class="el-upload__tip" slot="tip" style="color: #f56c6c">只能上传 xls/xlsx 文件</div>
</el-upload>
</el-form>
</el-card>
</el-timeline-item>
<el-timeline-item placement="top" timestamp="导入结果">
<el-card shadow="never">
<p>总记录数:{{ errorInfoData.totalCount }}</p>
<p>
成功数:
<span class="text-success">{{ errorInfoData.successCount }}</span>
</p>
<p>
错误数:
<span class="text-danger">{{ errorInfoData.errorCount }}</span>
</p>
<el-link @click="exportErrors" type="primary" v-if="errorInfoData.errorCount > 0">下载错误记录</el-link>
</el-card>
</el-timeline-item>
</el-timeline>
<div style="text-align: right">
<span slot="footer" class="dialog-footer">
<el-button @click="clearImportDialog" type="primary"
:disabled="importLoading">取 消</el-button>
<el-button type="primary" @click="clearSearchCnd"
:loading="importLoading">清空查询条件</el-button>
<el-button type="primary" @click="doImport" :loading="importLoading">核对人员</el-button>
<el-button type="primary" @click="doImportSearch"
:loading="importLoading">查询人员</el-button>
</span>
</div>
</div>
</template>
<script>
module.exports = {
props: {
exists_login_name_redis_key: {type: String, required: ""},
group_id: {type: Number, required: ""},
do_import_url: {type: String, required: ""}
},
mounted() {
const s = document.createElement("script")
s.type = "text/javascript"
s.src = "/assets/platform/plugins/xlsx/xlsx.full.min.js"
document.body.appendChild(s)
},
data() {
return {
importData: {
fileList: [],
isFlag: false
},
errorInfoData: {
totalCount: 0,
successCount: 0,
errorCount: 0,
errorList: 0
},
importLoading: false,
doImportUrl:""
}
},
methods: {
clearImportDialog() {
this.$emit("clear_import_dialog")
},
clearSearchCnd() {
this.importData = {
fileList: [],
}
this.errorInfoData = {
totalCount: 0,
successCount: 0,
errorCount: 0,
errorList: [],
}
$.get('/platform/activity/basic/scope/clearSearchCnd', {existsLoginNameRedisKey: this.exists_login_name_redis_key}).then(res => {
if (res.code === 0) {
this.$emit("flush", this.exists_login_name_redis_key)
this.$message.success(res.msg)
} else {
this.$message.error(res.msg)
}
})
},
resetImportData() {
this.importData = {
fileList: [],
}
this.errorInfoData = {
totalCount: 0,
successCount: 0,
errorCount: 0,
errorList: 0
}
},
doImportSearch() {
this.$emit("flush", this.exists_login_name_redis_key)
this.clearImportDialog()
},
doImport() {
if (this.importData.fileList.length === 0) {
this.$message.error({
title: "错误",
message: "请选择文件!"
})
return
}
const data = new FormData()
data.append("groupId", this.group_id)
this.importData.fileList.forEach((val) => {
data.append("file", val.raw, val.raw.name)
})
this.importLoading = true
this.$axios.post(this.do_import_url, data).then((res) => {
if (res.code === 0) {
if (res.data.errorList && res.data.errorList.length > 0) {
this.$message.warning("核对失败")
} else {
this.$message.success("核对成功")
}
this.errorInfoData = res.data
this.$emit("flush", res.data.existsLoginNameRedisKey)
} else {
this.$message.warning("核对失败")
}
this.importLoading = false
})
},
exportErrors() {
const data = this.errorInfoData.errorList
// 创建工作簿
const workbook = XLSX.utils.book_new()
// 创建工作表
const worksheet = XLSX.utils.json_to_sheet(data)
// 将工作表添加到工作簿
XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1")
// 将工作簿转换为二进制对象
const excelBuffer = XLSX.write(workbook, {bookType: "xlsx", type: "array"})
// 将二进制对象转换为Blob对象
const blob = new Blob([excelBuffer], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"})
// 创建下载链接并设置相关属性
const url = window.URL.createObjectURL(blob)
const link = document.createElement("a")
link.href = url
link.download = "错误记录.xlsx"
// 模拟点击下载链接
document.body.appendChild(link)
link.click()
// 清理下载链接
document.body.removeChild(link)
window.URL.revokeObjectURL(url)
},
fileHandleRemove(file, fileList) {
return fileList
},
fileHandleChange(file, fileList, {type, size}) {
const removeFile = () => {
fileList.splice(fileList.findIndex((v) => v === file))
}
if (!file.size) {
this.$message.warning("您选择的是空文件")
removeFile()
}
if (type && type.length && !type.includes(file.name.split(".").pop().toLowerCase())) {
this.$message.warning(`文件只能是 ${type.map((v) => v.toUpperCase()).join("/")} 格式`)
removeFile()
}
if (size && !file.size < size) {
this.$message.warning(`文件大小不能超过 ${size / 1024 / 1024}MB`)
removeFile()
}
return fileList
}
}
}
</script>
<style>
.el-card__body {
padding: 25px;
}
</style>
@@ -1,319 +1,347 @@
<template> <template>
<div> <div>
<el-card shadow="never"> <el-card shadow="never">
<div class="search"> <div class="search">
<div class="search-item"> <div class="search-item">
<div class="search-item-label">活动分组</div> <div class="search-item-label">活动分组</div>
<div class="search-item-option"> <div class="search-item-option">
<el-select <el-select
placeholder="活动分组" placeholder="活动分组"
v-model="pageForm.groupId" v-model="pageForm.groupId"
style="width: 100%" style="width: 100%"
@change=" @change="
doSearch() doSearch()
viewGroupName() viewGroupName()
" "
filterable filterable
> >
<el-option <el-option
v-for="item in activityGroupList" v-for="item in activityGroupList"
:label="item.groupName" :label="item.groupName"
:value="item.groupId" :value="item.groupId"
:key="item.groupId" :key="item.groupId"
></el-option> ></el-option>
</el-select> </el-select>
</div> </div>
</div> </div>
<div class="search-item"> <div class="search-item">
<div class="search-item-label">姓名工号</div> <div class="search-item-label">姓名工号</div>
<div class="search-item-option"> <div class="search-item-option">
<el-input <el-input
placeholder="请输入内容" placeholder="请输入内容"
clearable clearable
v-model="pageForm.searchKeyword" v-model="pageForm.searchKeyword"
style="width: 100%" style="width: 100%"
@keyup.enter.native="doSearch" @keyup.enter.native="doSearch"
> >
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型" style="width: 80px"> <el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型" style="width: 80px">
<el-option label="姓名" value="username"></el-option> <el-option label="姓名" value="username"></el-option>
<el-option label="工号" value="loginname"></el-option> <el-option label="工号" value="loginname"></el-option>
</el-select> </el-select>
</el-input> </el-input>
</div> </div>
</div> </div>
<div class="search-item" v-if="is_sysadmin || is_A06"> <div class="search-item" v-if="is_sysadmin || is_A06">
<div class="search-item-label">所属工会</div> <div class="search-item-label">所属工会</div>
<div class="search-item-option"> <div class="search-item-option">
<el-select <el-select
placeholder="所属工会" placeholder="所属工会"
v-model="pageForm.unionId" v-model="pageForm.unionId"
style="width: 100%" style="width: 100%"
clearable clearable
@change="flushUnits" @change="flushUnits"
@clear="flushUnits" @clear="flushUnits"
filterable filterable
> >
<el-option v-for="item in unions" :label="item.name" :value="item.id" :key="item.id"></el-option> <el-option v-for="item in unions" :label="item.name" :value="item.id" :key="item.id"></el-option>
</el-select> </el-select>
</div> </div>
</div> </div>
<div class="search-item"> <div class="search-item">
<div class="search-item-label">所属单位</div> <div class="search-item-label">所属单位</div>
<div class="search-item-option"> <div class="search-item-option">
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%" clearable @change="doSearch" filterable> <el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%" clearable @change="doSearch"
<el-option v-for="item in units" :label="item.name" :value="item.id" :key="item.id"></el-option> filterable>
</el-select> <el-option v-for="item in units" :label="item.name" :value="item.id" :key="item.id"></el-option>
</div> </el-select>
</div> </div>
</div>
<!--<div class="search-item" <!--<div class="search-item"
v-if="${@shiro.hasRole('sysadmin')}"> v-if="${@shiro.hasRole('sysadmin')}">
<div class="search-item-label">活动工会</div> <div class="search-item-label">活动工会</div>
<div class="search-item-option"> <div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.activityUnionId" <el-select placeholder="所属工会" v-model="pageForm.activityUnionId"
style="width: 100%;" style="width: 100%;"
clearable="true" clearable="true"
@change="flushUnits" @clear="flushUnits" @change="flushUnits" @clear="flushUnits"
filterable="true"> filterable="true">
<el-option v-for="item in ActivityUnions" :label="item.unionname" <el-option v-for="item in ActivityUnions" :label="item.unionname"
:value="item.id"></el-option> :value="item.id"></el-option>
</el-select> </el-select>
</div>
</div>
<div class="search-item" v-if="${@shiro.hasRole('sysadmin')}">
<div class="search-item-label">活动单位</div>
<div class="search-item-option">
<el-select placeholder="所属单位" v-model="pageForm.activityUnitId"
style="width: 100%;"
clearable="true"
@change="doSearch"
filterable="true">
<el-option v-for="item in ActivityUnits" :label="item.name"
:value="item.id"></el-option>
</el-select>
</div>
</div>-->
<div class="search-item">
<div class="search-item-label">人员类型</div>
<div class="search-item-option">
<dict-select v-model="pageForm.personType" code="PERSON_TYPE" @change="doSearch" style="width: 100%"></dict-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">在职状态</div>
<div class="search-item-option">
<dict-select
v-model="pageForm.userState"
style="width: 100%"
clearable
placeholder="在职状态"
@change="doSearch"
code="USER_STATE"
></dict-select>
</div>
</div>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
</div>
</div> </div>
</el-card> </div>
<el-card shadow="never" class="mt10"> <div class="search-item" v-if="${@shiro.hasRole('sysadmin')}">
<table-tool :label="currentGroupName"> <div class="search-item-label">活动单位</div>
<el-button @click="doExportUser" icon="el-icon-printer" size="small" type="primary" :disabled="!pageForm.groupId"> <div class="search-item-option">
导出活动分组人员xlsx <el-select placeholder="所属单位" v-model="pageForm.activityUnitId"
</el-button> style="width: 100%;"
<el-button @click="doDelete(null)" type="danger" size="small" :disabled="tableData.length === 0"> clearable="true"
删除{{ currentGroupName }} @change="doSearch"
</el-button> filterable="true">
</table-tool> <el-option v-for="item in ActivityUnits" :label="item.name"
<el-table ref="userTable" :data="tableData" stripe border :size="tableSize" @sort-change="pageOrder"> :value="item.id"></el-option>
<el-table-column label="序号" type="index" width="80"> </el-select>
<template slot-scope="scope"> </div>
<span>{{ scope.$index + (pageForm.pageNumber - 1) * pageForm.pageSize + 1 }}</span> </div>-->
</template>
</el-table-column> <div class="search-item">
<el-table-column <div class="search-item-label">人员类型</div>
align="center" <div class="search-item-option">
header-align="center" <dict-select v-model="pageForm.personType" code="PERSON_TYPE" @change="doSearch"
v-for="column in tableColumns" style="width: 100%"></dict-select>
show-overflow-tooltip </div>
:label="column.label" </div>
:prop="column.prop"
:key="column.prop" <div class="search-item">
:sortable="column.sortable" <div class="search-item-label">在职状态</div>
></el-table-column> <div class="search-item-option">
<el-table-column align="center" header-align="center" label="操作" width="100"> <dict-select
<template slot-scope="{ row }"> v-model="pageForm.userState"
<el-button size="mini" type="danger" @click="doDelete(row.id)">删除</el-button> style="width: 100%"
</template> clearable
</el-table-column> placeholder="在职状态"
</el-table> @change="doSearch"
<el-row class="el-pagination-container" style="margin-bottom: 0px"> code="USER_STATE"
<el-pagination ></dict-select>
@size-change="pageSizeChange" </div>
@current-change="pageNumberChange" </div>
:current-page="pageForm.pageNumber"
:page-sizes="[5, 10, 20, 30, 50]" <div class="search-query">
:page-size="pageForm.pageSize" <el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
layout="total, sizes, prev, pager, next" </div>
:total="pageForm.totalCount" </div>
></el-pagination> </el-card>
</el-row>
</el-card> <el-card shadow="never" class="mt10">
</div> <table-tool :label="currentGroupName">
<el-button v-if="is_sysadmin||is_A06"
type="primary" size="medium" icon="el-icon-printer" @click="importDialogVisible=true">
导入XLSX查询
</el-button>
<el-button @click="doExportUser" icon="el-icon-printer" size="small" type="primary"
:disabled="!pageForm.groupId">
导出活动分组人员xlsx
</el-button>
<el-button @click="doDelete(null)" type="danger" size="small" :disabled="tableData.length === 0">
删除{{ currentGroupName }}
</el-button>
</table-tool>
<el-table ref="userTable" :data="tableData" stripe border :size="tableSize" @sort-change="pageOrder">
<el-table-column label="序号" type="index" width="80">
<template slot-scope="scope">
<span>{{ scope.$index + (pageForm.pageNumber - 1) * pageForm.pageSize + 1 }}</span>
</template>
</el-table-column>
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:label="column.label"
:prop="column.prop"
:key="column.prop"
:sortable="column.sortable"
></el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="100">
<template slot-scope="{ row }">
<el-button size="mini" type="danger" @click="doDelete(row.id)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-row class="el-pagination-container" style="margin-bottom: 0px">
<el-pagination
@size-change="pageSizeChange"
@current-change="pageNumberChange"
:current-page="pageForm.pageNumber"
:page-sizes="[5, 10, 20, 30, 50]"
:page-size="pageForm.pageSize"
layout="total, sizes, prev, pager, next"
:total="pageForm.totalCount"
></el-pagination>
</el-row>
</el-card>
<el-dialog :visible.sync="importDialogVisible" title="人员导入" width="45%" :append-to-body="true"
:close-on-click-modal="false">
<activity-import-user ref="importUserRef"
@clear_import_dialog="clearImportDialog"
@flush="flush"
do_import_url="/platform/activity/basic/user/doImport"
:group_id="pageForm.groupId"
:exists_login_name_redis_key="pageForm.existsLoginNameRedisKey"></activity-import-user>
</el-dialog>
</div>
</template> </template>
<script> <script>
module.exports = { module.exports = {
props: { props: {
group_id: { group_id: {
type: String, type: String,
default: "" default: ""
}
},
computed: {
is_H10() {
return this.roleData.is_H10
},
is_A06() {
return this.roleData.is_A06
},
is_H04() {
return this.roleData.is_H04
},
is_H02() {
return this.roleData.is_H02
},
is_H03() {
return this.roleData.is_H03
},
is_sysadmin() {
return this.roleData.is_sysadmin
},
unionid() {
return this.roleData.unionid
}
},
data() {
return {
activityGroupList: [],
ActivityUnions: [],
ActivityUnits: [],
unions: [],
units: [],
pageForm: {
unionId: "",
unitId: "",
searchName: "username",
personTypes: [],
userStates: [],
memberStatus: [],
year: moment().format("YYYY")
},
tableColumns: [
{ prop: "loginName", label: "工号" },
{ prop: "userName", label: "姓名" },
{ prop: "sex", label: "性别", sortable: true },
{ prop: "birthday", label: "出生年月" },
{ prop: "mobile", label: "联系电话" },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "groupName", label: "所属分组", sortable: true }
],
roleData: {},
currentGroupName: null
}
},
mixins: [initTableMixins],
components: {},
methods: {
viewGroupName() {
if (this.pageForm?.groupId) {
const group = this.activityGroupList.find((v) => v.groupId === this.pageForm.groupId)
this.currentGroupName = group.groupName + "人员"
return
}
this.currentGroupName = "全部人员"
},
doExportUser() {
window.open("/platform/activity/basic/user/doExportUser?groupId=" + this.pageForm.groupId)
},
doSearch2() {
this.getActivityGroup()
this.doSearch()
},
async doDelete(id, groupId) {
const confirm = await this.$confirm("您确定要删除吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
if (confirm === "confirm") {
let pageForm = clone(this.pageForm)
pageForm.id = id
const resp = await $.post("/platform/activity/basic/user/doDelete", pageForm)
if (resp.code === 0) {
this.$message.success(resp.msg)
await this.getActivityGroup(this.pageForm.groupId)
this.$emit("group_change")
} else {
}
}
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
if (this.is_A06 || this.is_sysadmin) {
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
// this.ActivityUnits = await getActivityUnits(this.pageForm.activityUnionId)
} else {
this.units = await this.$businessTool.listUnit(this.unionid)
}
},
async getActivityGroup(id) {
const resp = await $.get("/platform/activity/basic/scope/getActivityUserScopeGroup")
this.activityGroupList = resp.data
if (resp.data && resp.data.length > 0) {
if (id) {
if (this.activityGroupList.some((v) => v.groupId === id)) {
this.$set(this.pageForm, "groupId", id)
} else {
this.$set(this.pageForm, "groupId", resp.data[0].groupId)
}
} else {
this.$set(this.pageForm, "groupId", resp.data[0].groupId)
}
}
await this.doSearch()
},
async getRolesAndUnion() {
const { data } = await $.post("/platform/activity/basic/scope/getRolesAndUnion")
this.roleData = data
},
async pageData() {
const resp = await $.post("/platform/activity/basic/user/pageData", this.pageForm)
if (resp.code === 0) {
this.tableData = resp.data.list
this.pageForm.totalCount = resp.data.totalCount
}
}
},
async created() {
this.unions = await this.$businessTool.listUnion()
// this.ActivityUnions = await getActivityUnions()
await this.flushUnits()
await this.getActivityGroup()
await this.getRolesAndUnion()
this.viewGroupName()
} }
},
computed: {
is_H10() {
return this.roleData.is_H10
},
is_A06() {
return this.roleData.is_A06
},
is_H04() {
return this.roleData.is_H04
},
is_H02() {
return this.roleData.is_H02
},
is_H03() {
return this.roleData.is_H03
},
is_sysadmin() {
return this.roleData.is_sysadmin
},
unionid() {
return this.roleData.unionid
}
},
data() {
return {
activityGroupList: [],
ActivityUnions: [],
ActivityUnits: [],
unions: [],
units: [],
pageForm: {
unionId: "",
unitId: "",
searchName: "username",
personTypes: [],
userStates: [],
memberStatus: [],
year: moment().format("YYYY")
},
tableColumns: [
{prop: "loginName", label: "工号"},
{prop: "userName", label: "姓名"},
{prop: "sex", label: "性别", sortable: true},
{prop: "birthday", label: "出生年月"},
{prop: "mobile", label: "联系电话"},
{prop: "personType", label: "人员类型", sortable: true},
{prop: "userState", label: "在职状态", sortable: true},
{prop: "unitName", label: "所属单位", sortable: true},
{prop: "unionName", label: "所属工会", sortable: true},
{prop: "groupName", label: "所属分组", sortable: true}
],
roleData: {},
currentGroupName: null,
importDialogVisible: false,
}
},
mixins: [initTableMixins],
components: {
"activity-import-user": httpVueLoader("/components/module/activity/ActivityImportUser.vue?v=" + new Date().getTime())
},
methods: {
flush(exists_login_name_redis_key) {
this.pageForm.existsLoginNameRedisKey = exists_login_name_redis_key
this.doSearch()
},
clearImportDialog() {
this.importDialogVisible = false
},
viewGroupName() {
if (this.pageForm?.groupId) {
const group = this.activityGroupList.find((v) => v.groupId === this.pageForm.groupId)
this.currentGroupName = group.groupName + "人员"
return
}
this.currentGroupName = "全部人员"
},
doExportUser() {
window.open("/platform/activity/basic/user/doExportUser?groupId=" + this.pageForm.groupId)
},
doSearch2() {
this.getActivityGroup()
this.doSearch()
},
async doDelete(id, groupId) {
const confirm = await this.$confirm("您确定要删除吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
if (confirm === "confirm") {
let pageForm = clone(this.pageForm)
pageForm.id = id
const resp = await $.post("/platform/activity/basic/user/doDelete", pageForm)
if (resp.code === 0) {
this.$message.success(resp.msg)
await this.getActivityGroup(this.pageForm.groupId)
this.$emit("group_change")
} else {
}
}
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
if (this.is_A06 || this.is_sysadmin) {
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
// this.ActivityUnits = await getActivityUnits(this.pageForm.activityUnionId)
} else {
this.units = await this.$businessTool.listUnit(this.unionid)
}
},
async getActivityGroup(id) {
const resp = await $.get("/platform/activity/basic/scope/getActivityUserScopeGroup")
this.activityGroupList = resp.data
if (resp.data && resp.data.length > 0) {
if (id) {
if (this.activityGroupList.some((v) => v.groupId === id)) {
this.$set(this.pageForm, "groupId", id)
} else {
this.$set(this.pageForm, "groupId", resp.data[0].groupId)
}
} else {
this.$set(this.pageForm, "groupId", resp.data[0].groupId)
}
}
await this.doSearch()
},
async getRolesAndUnion() {
const {data} = await $.post("/platform/activity/basic/scope/getRolesAndUnion")
this.roleData = data
},
async pageData() {
const resp = await $.post("/platform/activity/basic/user/pageData", this.pageForm)
if (resp.code === 0) {
this.tableData = resp.data.list
this.pageForm.totalCount = resp.data.totalCount
}
}
},
async created() {
this.unions = await this.$businessTool.listUnion()
// this.ActivityUnions = await getActivityUnions()
await this.flushUnits()
await this.getActivityGroup()
await this.getRolesAndUnion()
this.viewGroupName()
}
} }
</script> </script>
File diff suppressed because it is too large Load Diff
@@ -2,10 +2,11 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
template: /*language=HTML*/ ` template: /*language=HTML*/ `
<div> <div>
<template> <template>
<el-card shadow="never" style="min-height: calc(100vh - 70px);position: relative"> <el-card shadow="never">
<snaker-start slot="header" label="文化活动申报" define_key="WHHD"
v-if="activity_type===40002||activity_type===40003"></snaker-start>
<el-form :model="formData" :rules="formRules" label-suffix="" label-width="170px" <el-form :model="formData" :rules="formRules" label-suffix="" label-width="170px"
ref="addForm" v-loading="formLoading"> ref="addForm" v-loading="formLoading">
<el-tabs tab-position="top" v-model="activeName"> <el-tabs tab-position="top" v-model="activeName">
<el-tab-pane label="活动基础信息" name="1"> <el-tab-pane label="活动基础信息" name="1">
<div class="mt20"> <div class="mt20">
@@ -84,20 +85,20 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- <el-col :span="12"--> <!-- <el-col :span="12"-->
<!-- v-if="formData.isEnrollSystem === true">--> <!-- v-if="formData.isEnrollSystem === true">-->
<!-- <el-form-item label="活动计划时间" prop="plannedDate">--> <!-- <el-form-item label="活动计划时间" prop="plannedDate">-->
<!-- <el-date-picker--> <!-- <el-date-picker-->
<!-- @change="plannedDateChange"--> <!-- @change="plannedDateChange"-->
<!-- end-placeholder="结束日期"--> <!-- end-placeholder="结束日期"-->
<!-- range-separator="-"--> <!-- range-separator="-"-->
<!-- start-placeholder="开始日期"--> <!-- start-placeholder="开始日期"-->
<!-- style="width: 100%"--> <!-- style="width: 100%"-->
<!-- type="daterange"--> <!-- type="daterange"-->
<!-- v-model="formData.plannedDate" value-format="yyyy-MM-dd">--> <!-- v-model="formData.plannedDate" value-format="yyyy-MM-dd">-->
<!-- </el-date-picker>--> <!-- </el-date-picker>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<!-- </el-col>--> <!-- </el-col>-->
<el-col :span="12"> <el-col :span="12">
<el-form-item label="实际活动时间" prop="time"> <el-form-item label="实际活动时间" prop="time">
@@ -181,7 +182,9 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
<el-form-item label="报名人数限制" prop="userNumberLimit"> <el-form-item label="报名人数限制" prop="userNumberLimit">
<el-radio-group v-model="formData.userNumberLimit" size="small"> <el-radio-group v-model="formData.userNumberLimit" size="small">
<el-radio border :label="1">总人数限制</el-radio> <el-radio border :label="1">总人数限制</el-radio>
<el-radio border :label="2" v-if="activity_type===40001">分工会人数限制</el-radio> <el-radio border :label="2" v-if="activity_type===40001">
分工会人数限制
</el-radio>
<el-radio border :label="null">不限制</el-radio> <el-radio border :label="null">不限制</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
@@ -472,15 +475,12 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
</el-alert> </el-alert>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
<div style="padding: 20px;text-align: center;">
<el-button @click="operation" style="width: 300px" type="primary" :disabled="formLoading">
确 定
</el-button>
</div>
</el-form> </el-form>
<el-row type="flex" justify="end" class="mt20">
<el-button type="primary" plain @click="onSave">保存</el-button>
<el-button type="primary" @click="onSubmit" v-if="!taskId">提交</el-button>
<el-button type="primary" @click="onFinishTask" v-else>提交</el-button>
</el-row>
</el-card> </el-card>
<drawer-user-scope <drawer-user-scope
@@ -489,7 +489,8 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
:group_id.sync="formData.groupId" :group_id.sync="formData.groupId"
></drawer-user-scope> ></drawer-user-scope>
<el-dialog :append-to-body="true" :close-on-click-modal="false" :visible.sync="userDialogVisible" title="添加人员" width="40%"> <el-dialog :append-to-body="true" :close-on-click-modal="false" :visible.sync="userDialogVisible"
title="添加人员" width="40%">
<el-form :model="formData" label-width="100px"> <el-form :model="formData" label-width="100px">
<el-form-item label="参加人员" prop="userId"> <el-form-item label="参加人员" prop="userId">
@@ -522,25 +523,27 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
`, `,
props: { props: {
activity_type: { activity_type: {
value: { type: Object, default: "" } value: {type: Object, default: ""}
} }
}, },
mixins: [initTableMixins], mixins: [initTableMixins],
data() { data() {
return { return {
bizId: GetQueryString("bizId"),
taskId: GetQueryString("taskId"),
activeName: "1", activeName: "1",
pageForm: { pageForm: {
year: new Date().getFullYear() + "" year: new Date().getFullYear() + ""
}, },
formRules: { formRules: {
groupId: [{ required: true, message: "必填", trigger: ["blur", "change"] }], groupId: [{required: true, message: "必填", trigger: ["blur", "change"]}],
name: [{ required: true, message: "必填", trigger: ["blur", "change"] }], name: [{required: true, message: "必填", trigger: ["blur", "change"]}],
type: [{ required: true, message: "必填", trigger: ["blur", "change"] }], type: [{required: true, message: "必填", trigger: ["blur", "change"]}],
projectTypeCode: [{ required: true, message: "必填", trigger: ["blur", "change"] }], projectTypeCode: [{required: true, message: "必填", trigger: ["blur", "change"]}],
address: [{ required: true, message: "必填", trigger: ["blur", "change"] }], address: [{required: true, message: "必填", trigger: ["blur", "change"]}],
plannedDate: [{ required: true, message: "必填", trigger: ["blur", "change"] }], plannedDate: [{required: true, message: "必填", trigger: ["blur", "change"]}],
time: [{ required: true, message: "必填", trigger: ["blur", "change"] }], time: [{required: true, message: "必填", trigger: ["blur", "change"]}],
cover: [{ required: true, message: "必填", trigger: ["blur", "change"] }] cover: [{required: true, message: "必填", trigger: ["blur", "change"]}]
}, },
projectTypeList: [], projectTypeList: [],
@@ -557,12 +560,12 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
selectLoading: false, selectLoading: false,
userColumns: [ userColumns: [
{ prop: "userName", label: "姓名" }, {prop: "userName", label: "姓名"},
{ prop: "loginName", label: "工号" }, {prop: "loginName", label: "工号"},
{ prop: "sex", label: "性别" }, {prop: "sex", label: "性别"},
{ prop: "mobile", label: "联系方式" }, {prop: "mobile", label: "联系方式"},
{ prop: "unitName", label: "所属单位" }, {prop: "unitName", label: "所属单位"},
{ prop: "unionName", label: "所属工会" } {prop: "unionName", label: "所属工会"}
] ]
} }
}, },
@@ -584,10 +587,50 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
} }
}, },
methods: { methods: {
// 保存
onSave() {
this.$confirm("您确定保存吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
const formData = JSON.parse(JSON.stringify(this.formData))
formData.activity_type = this.activity_type
const {time, applyTime2, plannedDate} = formData
if (applyTime2 && applyTime2.length) {
formData.applyStartTime = applyTime2[0]
formData.applyEndTime = applyTime2[1]
formData.applyTime2 = null
}
if (time && time.length) {
formData.startTime = formData.time[0]
formData.endTime = formData.time[1]
formData.time = null
}
if (plannedDate && plannedDate.length) {
formData.startPlannedDate = formData.plannedDate[0]
formData.endPlannedDate = formData.plannedDate[1]
formData.plannedDate = null
}
this.$axios.post('/platform/activity/culture/applyActivity/save', {data: JSON.stringify(this.formData)}).then(res => {
if (res.code === 0) {
this.$message.success("保存成功")
if (this.activity_type === 40002) {
window.location.href = "/platform/activity/culture/infoManage/union"
} else if (this.activity_type === 40003) {
window.location.href = "/platform/activity/culture/infoManage/club"
} else {
window.location.href = "/platform/activity/culture/infoManage/school"
}
}
})
})
},
async remoteMethod(query) { async remoteMethod(query) {
if (query) { if (query) {
this.selectLoading = true this.selectLoading = true
const { data } = await this.$axios.post("/platform/activity/culture/applyActivity/findUser", { const {data} = await this.$axios.post("/platform/activity/culture/applyActivity/findUser", {
serachWord: query, serachWord: query,
activity_type: this.activity_type activity_type: this.activity_type
}) })
@@ -624,7 +667,7 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
this.formLoading = true this.formLoading = true
const formData = JSON.parse(JSON.stringify(this.formData)) const formData = JSON.parse(JSON.stringify(this.formData))
formData.activity_type = this.activity_type formData.activity_type = this.activity_type
const { time, applyTime2, plannedDate } = formData const {time, applyTime2, plannedDate} = formData
if (applyTime2 && applyTime2.length) { if (applyTime2 && applyTime2.length) {
formData.applyStartTime = applyTime2[0] formData.applyStartTime = applyTime2[0]
formData.applyEndTime = applyTime2[1] formData.applyEndTime = applyTime2[1]
@@ -715,28 +758,28 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
this.$set(this.formData, "mobile", id ? userList.find((v) => v.id === id).mobile : null) this.$set(this.formData, "mobile", id ? userList.find((v) => v.id === id).mobile : null)
}, },
async getActivityTwoLevelType(code) { async getActivityTwoLevelType(code) {
const { data } = await this.$axios.post("/platform/activity/basic/settings/getActivityTwoLevelType", { code: code }) const {data} = await this.$axios.post("/platform/activity/basic/settings/getActivityTwoLevelType", {code: code})
return data return data
}, },
async getActivityGroup() { async getActivityGroup() {
const { data } = await this.$axios.post("/platform/activity/basic/scope/getActivityUserScopeGroup") const {data} = await this.$axios.post("/platform/activity/basic/scope/getActivityUserScopeGroup")
this.activityGroupList = data this.activityGroupList = data
}, },
async generateActivityCode() { async generateActivityCode() {
const { data } = await this.$axios.post("/platform/activity/sports/common/generateActivityCode", { activity_type: this.activity_type }) const {data} = await this.$axios.post("/platform/activity/sports/common/generateActivityCode", {activity_type: this.activity_type})
return data return data
}, },
async getUnionData() { async getUnionData() {
const { data } = await this.$axios.post("/platform/activity/culture/applyActivity/getUnionData", { const {data} = await this.$axios.post("/platform/activity/culture/applyActivity/getUnionData", {
activityScopeGroupId: this.formData.groupId activityScopeGroupId: this.formData.groupId
}) })
return data return data
}, },
init(id) { init(id) {
if (id){ if (id) {
this.activeName = "1" this.activeName = "1"
this.findOne(id) this.findOne(id)
}else{ } else {
this.formData = { this.formData = {
time: [], time: [],
applyTime2: [], applyTime2: [],
@@ -762,11 +805,11 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
} }
}, },
async queryUserByIds(ids) { async queryUserByIds(ids) {
const { data } = await this.$axios.post("/platform/activity/culture/applyActivity/queryUserByIds", { ids: JSON.stringify(ids) }) const {data} = await this.$axios.post("/platform/activity/culture/applyActivity/queryUserByIds", {ids: JSON.stringify(ids)})
return data return data
}, },
async findOne(id) { async findOne(id) {
const { data, code, msg } = await this.$axios.post("/platform/activity/culture/infoManage/findOne", { id }) const {data, code, msg} = await this.$axios.post("/platform/activity/culture/infoManage/findOne", {id})
if (code === 0) { if (code === 0) {
if (data.userId) { if (data.userId) {
const user = await this.queryUserByIds([data.userId]) const user = await this.queryUserByIds([data.userId])
@@ -34,8 +34,8 @@ const ACTIVITY_CULTURE_APPLY_USER = {
<el-card class="mt10" shadow="never"> <el-card class="mt10" shadow="never">
<table-tool label="活动列表"> <table-tool label="活动列表">
<el-radio-group v-model="pageForm.isEnrolled" @change="doSearch" size="mini" class="ml10"> <el-radio-group v-model="pageForm.isEnrolled" @change="doSearch" size="mini" class="ml10">
<el-radio-button :label="false">未报名</el-radio-button>
<el-radio-button :label="true">已报名</el-radio-button> <el-radio-button :label="true">已报名</el-radio-button>
<el-radio-button :label="false">未报名</el-radio-button>
</el-radio-group> </el-radio-group>
</table-tool> </table-tool>
@@ -17,7 +17,7 @@ const ACTIVITY_CULTURE_INFO_ACTIVITY = {
<el-descriptions-item label="活动编号"> <el-descriptions-item label="活动编号">
{{ viewData.activityCode }} {{ viewData.activityCode }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="活动编号"> <el-descriptions-item label="活动项目类型">
{{ viewData.projectTypeName }}({{ viewData.projectTypeCode }}) {{ viewData.projectTypeName }}({{ viewData.projectTypeCode }})
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="活动类型" :span="2"> <el-descriptions-item label="活动类型" :span="2">
@@ -42,8 +42,8 @@ const ACTIVITY_CULTURE_INFO_ACTIVITY = {
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="报名方式"> <el-descriptions-item label="报名方式">
<span v-if="viewData.signUpMethod===1">个人报名</span> <span v-if="viewData.signUpMethod===1">个人报名</span>
<span v-else-if="viewData.signUpMethod===2">分工会报名</span> <span v-else-if="viewData.signUpMethod===2">组队报名</span>
<span v-else-if="viewData.signUpMethod===3">组队报名</span> <span v-else-if="viewData.signUpMethod===3">分工会报名</span>
<span v-else-if="!viewData.signUpMethod">无需报名</span> <span v-else-if="!viewData.signUpMethod">无需报名</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="是否用于报名"> <el-descriptions-item label="是否用于报名">
@@ -153,7 +153,43 @@ const singleSignUp = {
</div> </div>
<!-- 分工会报名--> <!-- 分工会报名-->
<div v-else-if="viewData.signUpMethod===3"> <div v-else-if="viewData.signUpMethod===3">
<div class="process-title">选择报名人员,报名人数 <span style="color: red">{{viewData.teamNum}}</span>人
</div>
<el-select
v-if="inApplyTime"
v-model="searchTeammateUserId"
filterable
clearable
remote
reserve-keyword
placeholder="请输入关键词"
:remote-method="queryTeammate">
<el-option
v-for="item in teammateOptions"
:key="item.userId"
:label="item.userName + '(' + item.loginName + ')'"
:value="item.userId">
</el-option>
</el-select>
<el-button v-if="inApplyTime" class="ml5" type="primary" icon="el-icon-plus"
@click="addTeamUser">添加
</el-button>
<el-table :data="teamUsers" class="mt10">
<el-table-column label="序号" type="index" width="60px"></el-table-column>
<el-table-column prop="userName" label="姓名"></el-table-column>
<el-table-column prop="loginName" label="工号"></el-table-column>
<el-table-column prop="sex" label="性别"></el-table-column>
<el-table-column prop="unitName" label="单位"></el-table-column>
<el-table-column prop="mobile" label="手机号"></el-table-column>
<el-table-column label="操作" width="100px"
v-if="inApplyTime">
<template slot-scope="scope">
<el-button type="danger" size="mini" @click="removeTeamUser(scope.$index)">删除
</el-button>
</template>
</el-table-column>
</el-table>
</div> </div>
<!-- 表单填写--> <!-- 表单填写-->
@@ -243,6 +279,18 @@ const singleSignUp = {
}) })
}, },
//查询报名人员
listTeamUserUnion() {
this.$axios.post("/platform/activity/culture/applyUser/listTeamUserUnion", {activityId: this.id}).then((res) => {
if (res.code === 0) {
this.isSignUp = res.data.length > 0
this.teamUsers = res.data
this.defaultAddSelf()
this.customFormInit()
}
})
},
//表单回显 //表单回显
customFormInit() { customFormInit() {
if (this.teamUsers && this.teamUsers.length > 0) { if (this.teamUsers && this.teamUsers.length > 0) {
@@ -300,14 +348,14 @@ const singleSignUp = {
//分工会 //分工会
if (this.viewData.signUpMethod === 3) { if (this.viewData.signUpMethod === 3) {
// if (this.teamUsers.length === 0) { if (this.teamUsers.length === 0) {
// this.$message.warning("请添加报名人员后再提交!") this.$message.warning("请添加报名人员后再提交!")
// return return
// } }
// if (this.teamUsers.length > this.viewData.teamNum) { if (this.teamUsers.length > this.viewData.teamNum) {
// this.$message.warning("您选择的人数大于" + this.viewData.teamNum + "人,请重新选择!") this.$message.warning("您选择的人数大于" + this.viewData.teamNum + "人,请重新选择!")
// return return
// } }
} }
let formData = { let formData = {
@@ -420,7 +468,10 @@ const singleSignUp = {
//查询队友信息 //查询队友信息
queryTeammate(val) { queryTeammate(val) {
if (val) { if (val) {
this.$axios.post("/platform/activity/culture/applyUser/queryTeammate", {keyword: val}).then((res) => { this.$axios.post("/platform/activity/culture/applyUser/queryTeammate", {
keyword: val,
signUpMethod: this.viewData.signUpMethod
}).then((res) => {
if (res.code === 0) { if (res.code === 0) {
res.data.map(v => v.applyUserId = this.$store.state.user.id) res.data.map(v => v.applyUserId = this.$store.state.user.id)
this.teammateOptions = res.data this.teammateOptions = res.data
@@ -457,11 +508,18 @@ const singleSignUp = {
this.$axios.post("/platform/activity/culture/infoManage/activityInfo", {id: this.id}).then((res) => { this.$axios.post("/platform/activity/culture/infoManage/activityInfo", {id: this.id}).then((res) => {
if (res.code === 0) { if (res.code === 0) {
this.viewData = res.data this.viewData = res.data
if (this.viewData.signUpMethod === 3) {
const union = this.viewData.unionUserNumberLimit.find(v => v.id === this.$store.state.user.union.id)
this.viewData.teamNum = union.limitNum
this.listTeamUserUnion()
}else{
this.listTeamUser()
}
if (this.viewData.formConfig) { if (this.viewData.formConfig) {
this.formCreateRule = formCreate.parseJson(this.viewData.formConfig.rule) this.formCreateRule = formCreate.parseJson(this.viewData.formConfig.rule)
this.formCreateOption = formCreate.parseJson(this.viewData.formConfig.options) this.formCreateOption = formCreate.parseJson(this.viewData.formConfig.options)
} }
this.listTeamUser()
} }
}) })
} }
@@ -117,8 +117,8 @@ const ACTIVITY_CULTURE_USER_STATISTICS = {
{ prop: "loginName", label: "工号", width: 180, fixed: "left" }, { prop: "loginName", label: "工号", width: 180, fixed: "left" },
{ prop: "sex", label: "性别", width: 70 }, { prop: "sex", label: "性别", width: 70 },
{ prop: "mobile", label: "联系方式", width: 180 }, { prop: "mobile", label: "联系方式", width: 180 },
{ prop: "unitName", label: "所属单位", width: 200 },
{ prop: "unionName", label: "所属工会", width: 200 }, { prop: "unionName", label: "所属工会", width: 200 },
{ prop: "unitName", label: "所属单位", width: 200 },
{ prop: "applyDateTime", label: "报名时间", width: 180 }, { prop: "applyDateTime", label: "报名时间", width: 180 },
{ prop: "applyUserUserName", label: "报名人", width: 180 } { prop: "applyUserUserName", label: "报名人", width: 180 }
], ],
@@ -56,6 +56,19 @@ layout("/layouts/platform.html"){
v-for="item in unionOptions"></el-option> v-for="item in unionOptions"></el-option>
</el-select> </el-select>
</search-item> </search-item>
<search-item label="活动项目" v-if="unionLeaderCoach">
<el-select
@change="doSearch"
clearable
filterable
placeholder="请选择活动项目"
v-model="pageForm.eventId"
>
<el-option :key="item.eventId" :label="item.allName"
:value="item.eventId" v-for="item in eventList"></el-option>
</el-select>
</search-item>
</search> </search>
</el-card> </el-card>
@@ -136,45 +149,28 @@ layout("/layouts/platform.html"){
<el-card class="mt10" shadow="never"> <el-card class="mt10" shadow="never">
<table-tool label="活动项目信息"> <table-tool label="活动项目信息">
<div class="search-item-option"> <!-- <div class="search-item-option">
<el-select <el-select
@change="doSearch" @change="doSearch"
clearable clearable
filterable filterable
placeholder="请选择组别" placeholder="请选择组别"
style="width: 100%; margin-bottom: 5px; margin-left: 10px" style="width: 100%; margin-bottom: 5px; margin-left: 10px"
v-if="unionLeaderCoach" v-if="unionLeaderCoach"
v-model="pageForm.groupName" v-model="pageForm.groupName"
> >
<el-option :key="item.id" :label="item.name" :value="item.name" <el-option :key="item.id" :label="item.name" :value="item.name"
v-for="item in groupList"></el-option> v-for="item in groupList"></el-option>
</el-select> </el-select>
</div> </div>-->
<div class="search-item-option">
<el-select <div v-if="unionLeaderCoach">
@change="doSearch"
clearable
filterable
placeholder="请选择活动项目"
style="width: 100%; margin-bottom: 5px; margin-left: 10px"
v-if="unionLeaderCoach"
v-model="pageForm.eventId"
>
<el-option :key="item.eventId" :label="item.allName"
:value="item.eventId" v-for="item in eventList"></el-option>
</el-select>
</div>
<div class="mr10 ml20" v-if="unionLeaderCoach">
领队: 领队:
<span style="color: #419bf8">{{leaderData.username?leaderData.username:'暂无'}}</span> <span style="color: #419bf8">{{leaderData.username?leaderData.username:'暂无'}}</span>
&emsp13; 教练: &emsp13; 教练:
<span <span style="color: #419bf8">{{coachData.username ?coachData.username:'暂无'}}</span>
style="color: #419bf8">{{coachData.username ?coachData.username:'暂无'}}</span> <el-button @click="openLeaderCoach" size="medium" type="primary">设置领队/教练
</div>
<div>
<el-button @click="openLeaderCoach" size="medium" type="primary"
v-if="unionLeaderCoach">设置领队/教练
</el-button> </el-button>
</div> </div>
</table-tool> </table-tool>
@@ -418,9 +418,10 @@ layout("/layouts/platform.html"){
return v.id === this.pageForm.id return v.id === this.pageForm.id
}) })
await this.getEventsByActivityId() await this.getEventsByActivityId()
this.pageForm.activityName = activity.length > 0 ? activity[0].name : null if (activity.length>0){
this.pageForm.applyType = activity[0].applyType this.pageForm.activityName = activity.length > 0 ? activity[0].name : null
this.pageForm.applyType = activity[0].applyType
}
const resp = await this.$axios.post(loc() + "/pageData", this.pageForm) const resp = await this.$axios.post(loc() + "/pageData", this.pageForm)
this.tabLoading = false this.tabLoading = false
if (resp.code === 0) { if (resp.code === 0) {
@@ -184,7 +184,7 @@ const apply_component = {
this.$axios.post("/platform/evaluate/apply/info", {id: row.id}).then((res) => { this.$axios.post("/platform/evaluate/apply/info", {id: row.id}).then((res) => {
if (res.code === 0) { if (res.code === 0) {
this.formData = res.data this.formData = res.data
this.$set(this.formData, "honorTypeName", row.honorTypeName)
} }
}) })
}, },
@@ -109,7 +109,7 @@ layout("/layouts/platform.html"){
}, },
openView(row) { openView(row) {
this.$refs.guava.public(() => { this.$refs.guava.public(() => {
this.$refs.infoRef.onOpen(row.id) this.$refs.infoRef.onOpen(row)
this.showApprovalForm = false this.showApprovalForm = false
}) })
}, },
@@ -108,7 +108,7 @@ layout("/layouts/platform.html"){
methods: { methods: {
openView(row) { openView(row) {
this.$refs.guava.view(() => { this.$refs.guava.view(() => {
this.$refs.infoRef.onOpen(row.id) this.$refs.infoRef.onOpen(row)
}) })
}, },
exportExcel() { exportExcel() {
@@ -303,6 +303,7 @@ layout("/layouts/platform.html"){
} }
}, },
async init() { async init() {
this.clubOption = await this.$businessTool.listCLubByRole()
this.budgetTypeOption = await this.$businessTool.getDictOptions("ACTIVITY_BUDGET_TYPE") this.budgetTypeOption = await this.$businessTool.getDictOptions("ACTIVITY_BUDGET_TYPE")
const budgetTypeOption = [] const budgetTypeOption = []
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) { if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
@@ -364,7 +365,7 @@ layout("/layouts/platform.html"){
}, },
async created() { async created() {
this.init() this.init()
this.clubOption = await this.$businessTool.listCLubByRole()
} }
}) })
</script> </script>
@@ -41,7 +41,8 @@ const basicForm = {
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item prop="unionQuotaAllocationList" label="工会名额分配"> <el-form-item prop="unionQuotaAllocationList" label="工会名额分配">
<el-table :data="formData.unionQuotaAllocationList" size="medium" height="70vh"> <el-table :data="formData.unionQuotaAllocationList" size="medium" max-height="500"
show-summary style="width: 100%">
<el-table-column type="index" label="序号"></el-table-column> <el-table-column type="index" label="序号"></el-table-column>
<el-table-column label="工会名称" prop="unionName"></el-table-column> <el-table-column label="工会名称" prop="unionName"></el-table-column>
<el-table-column label="会员人数" prop="memberNum"></el-table-column> <el-table-column label="会员人数" prop="memberNum"></el-table-column>
@@ -49,14 +49,17 @@ layout("/layouts/platform.html"){
<el-table-column label="报名结束时间" prop="signUpEndTIme"></el-table-column> <el-table-column label="报名结束时间" prop="signUpEndTIme"></el-table-column>
<el-table-column label="所属工会" prop="unionName"></el-table-column> <el-table-column label="所属工会" prop="unionName"></el-table-column>
<el-table-column label="分配名额数" prop="allocationNum"></el-table-column> <el-table-column label="分配名额数" prop="allocationNum"></el-table-column>
<el-table-column label="报名数(已审核通过数)"> <!-- <el-table-column label="报名数(已审核通过数)">
<template v-slot="{ row }"> <template v-slot="{ row }">
</template> </template>
</el-table-column> </el-table-column>-->
<el-table-column label="操作" width="230"> <el-table-column label="操作" width="230">
<template v-slot="{ row }"> <template v-slot="{ row }">
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button> <el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
<el-button @click="onSignUp(row)" size="mini" type="primary">报名</el-button> <el-button @click="onSignUp(row)" size="mini" type="primary"
v-if="$moment(row.signUpStartTime).valueOf() < $moment().valueOf()
&&
$moment(row.signUpEndTIme).valueOf() > $moment().valueOf()">报名</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -94,7 +97,8 @@ layout("/layouts/platform.html"){
methods: { methods: {
onSignUp(row){ onSignUp(row){
this.$refs.guava.edit(() => { this.$refs.guava.edit(() => {
this.$refs.signUpFormRef.onOpen(row.activityId, row.unionId) const activity= this.activityList.find(item => item.id === row.activityId)
this.$refs.signUpFormRef.onOpen(row.activityId, row.unionId,activity)
}) })
}, },
onView(row){ onView(row){
@@ -1,11 +1,13 @@
const info = { const info = {
template: /*language=HTML*/ ` template: /*language=HTML*/ `
<div> <div>
<el-tabs v-model="activeName" > <el-tabs v-model="activeName">
<el-tab-pane label="活动基础信息" name="one"> <el-tab-pane label="活动基础信息" name="one">
<el-descriptions :column="2" border class="table_fixed"> <el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item label="活动名称">{{ viewData.activityName }}</el-descriptions-item> <el-descriptions-item label="活动名称">{{ viewData.activityName }}</el-descriptions-item>
<el-descriptions-item label="报名时间">{{ viewData.signUpStartTime }}至{{viewData.signUpEndTIme}}</el-descriptions-item> <el-descriptions-item label="报名时间">{{ viewData.signUpStartTime
}}至{{viewData.signUpEndTIme}}
</el-descriptions-item>
<el-descriptions-item label="活动线路" :span="2">{{viewData.linNames}}</el-descriptions-item> <el-descriptions-item label="活动线路" :span="2">{{viewData.linNames}}</el-descriptions-item>
<el-descriptions-item label="工会名额分配" :span="2"> <el-descriptions-item label="工会名额分配" :span="2">
<el-table :data="viewData.unionQuotaAllocationList" size="medium" height="70vh"> <el-table :data="viewData.unionQuotaAllocationList" size="medium" height="70vh">
@@ -24,20 +26,81 @@ const info = {
</el-descriptions> </el-descriptions>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="报名信息" name="two"> <el-tab-pane label="报名信息" name="two">
<el-table :data="userTableData" :size="tableSize" height="70vh">
<el-table-column label="序号" type="index" :index="indexMethod" width="60"></el-table-column>
<el-table-column label="姓名" prop="userName"></el-table-column>
<el-table-column label="工号" prop="loginName"></el-table-column>
<el-table-column label="联系方式" prop="mobile"></el-table-column>
<el-table-column label="身份证号" prop="idCard"></el-table-column>
<el-table-column label="单位" prop="unitName"></el-table-column>
<el-table-column label="报名线路" prop="lineName"></el-table-column>
<el-table-column prop="signUpTime" label="填报时间"></el-table-column>
<el-table-column prop="taskName" label="当前节点"></el-table-column>
<el-table-column prop="instanceState" label="流程状态">
<template v-slot="{row}">
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
size="small"></enum-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="230">
<template v-slot="{ row }">
<el-button @click="openView(row)" size="mini" type="primary">
查看
</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
<el-dialog
:close-on-click-modal="false"
:append-to-body="true"
:visible.sync="userDialogVisible"
title="详细信息查看"
width="40%"
>
<el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item label="姓名">{{ userViewData.userName }}</el-descriptions-item>
<el-descriptions-item label="工号">{{ userViewData.loginName }}</el-descriptions-item>
<el-descriptions-item label="单位">{{ userViewData.unitName }}</el-descriptions-item>
<el-descriptions-item label="工会">{{ userViewData.unionName }}</el-descriptions-item>
<el-descriptions-item label="附件">
<file-preview :files="userViewData.files" complete_result></file-preview>
</el-descriptions-item>
</el-descriptions>
<span slot="footer" class="dialog-footer">
<el-button @click="userDialogVisible = false" type="primary">关 闭</el-button>
</span>
</el-dialog>
</div> </div>
`, `,
mixins: [initTableMixins],
data() { data() {
return { return {
viewData: {}, viewData: {},
activeName:"one" activeName: "one",
userTableData: [],
activityId: "",
unionId: "",
userDialogVisible:false,
userViewData:{}
} }
}, },
methods: { methods: {
async onOpen(id,unionId) { openView(row) {
this.userViewData = row
this.userViewData.files = JSON.parse(row.files)
this.userDialogVisible = true
},
async onOpen(id, unionId) {
this.activityId = id
this.unionId = unionId
await this.findOne(id) await this.findOne(id)
this.listQuotaAllocation()
}, },
async findOne(id) { async findOne(id) {
this.$axios.post("/platform/excellentRecuperation/activityList/findOne", {id}).then(resp => { this.$axios.post("/platform/excellentRecuperation/activityList/findOne", {id}).then(resp => {
@@ -46,6 +109,16 @@ const info = {
} }
}) })
}, },
listQuotaAllocation() {
this.$axios.post("/platform/excellentRecuperation/activitySignUp/listQuotaAllocation", {
activityId: this.activityId,
unionId: this.unionId
}).then(res => {
if (res.code === 0) {
this.userTableData = res.data
}
})
},
}, },
} }
@@ -77,7 +77,7 @@ const SIGN_UP_FORM = {
</el-row> </el-row>
</el-card> </el-card>
<div class="process-title">报名人员信息</div> <div class="process-title">报名人员信息<span style="color:#ee0a24;">(如需修改或提交报名人员信息请点击编辑后提交)</span></div>
<el-table :data="tableData" @sort-change="pageOrder" :size="tableSize" height="70vh"> <el-table :data="tableData" @sort-change="pageOrder" :size="tableSize" height="70vh">
<el-table-column label="序号" type="index" :index="indexMethod" width="60"></el-table-column> <el-table-column label="序号" type="index" :index="indexMethod" width="60"></el-table-column>
<el-table-column label="姓名" prop="userName"></el-table-column> <el-table-column label="姓名" prop="userName"></el-table-column>
@@ -144,7 +144,8 @@ const SIGN_UP_FORM = {
unionId: "", unionId: "",
lineList: [], lineList: [],
userOptions: [], userOptions: [],
userViewData:{}, userViewData: {},
activityData: {},
userDialogVisible: false userDialogVisible: false
} }
}, },
@@ -152,7 +153,7 @@ const SIGN_UP_FORM = {
userChange(val) { userChange(val) {
const user = this.userOptions.find(o => o.id === val) const user = this.userOptions.find(o => o.id === val)
if (user) { if (user) {
const {userName, loginName, unitId, unitName, unionId, unionName,mobile,idCard} = user const {userName, loginName, unitId, unitName, unionId, unionName, mobile, idCard} = user
this.$set(this.formData, "userName", userName) this.$set(this.formData, "userName", userName)
this.$set(this.formData, "loginName", loginName) this.$set(this.formData, "loginName", loginName)
this.$set(this.formData, "unitId", unitId) this.$set(this.formData, "unitId", unitId)
@@ -168,17 +169,37 @@ const SIGN_UP_FORM = {
} }
} }
}, },
async getSIgnUpUserList() {
const res = await this.$axios.post('/platform/excellentRecuperation/activitySignUp/getSIgnUpUserList', {
activityId: this.activityId,
unionId: this.unionId
})
if (res.code === 0) {
return res.data.length
} else {
return 0
}
},
onSave() { onSave() {
this.$axios.post('/platform/excellentRecuperation/activitySignUp/save', {data: JSON.stringify(this.formData)}).then(res => { this.getSIgnUpUserList().then(data => {
if (res.code === 0) { const union = this.activityData.unionQuotaAllocationList.find(v => v.unionId === this.unionId)
this.listQuotaAllocation() if (data >= union.allocationNum) {
this.$message.success("保存成功") this.$message.error("该活动已满")
this.formData = { return
lineId: this.lineList[0].id, } else {
activityId: this.activityId this.$axios.post('/platform/excellentRecuperation/activitySignUp/save', {data: JSON.stringify(this.formData)}).then(res => {
} if (res.code === 0) {
this.listQuotaAllocation()
this.$message.success("保存成功")
this.formData = {
lineId: this.lineList[0].id,
activityId: this.activityId
}
}
})
} }
}) })
}, },
onSubmit() { onSubmit() {
this.$refs.formRef.validate(valid => { this.$refs.formRef.validate(valid => {
@@ -188,14 +209,22 @@ const SIGN_UP_FORM = {
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(() => { }).then(() => {
this.$axios.post('/platform/excellentRecuperation/activitySignUp/submit', {data: JSON.stringify(this.formData)}).then(res => { this.getSIgnUpUserList().then(data => {
if (res.code === 0) { const union = this.activityData.unionQuotaAllocationList(v => v.unionId === this.unionId)
this.listQuotaAllocation() if (data >= union.allocationNum) {
this.$message.success("提交成功") this.$message.error("该活动已满")
this.formData = { return
lineId: this.lineList[0].id, } else {
activityId: this.activityId this.$axios.post('/platform/excellentRecuperation/activitySignUp/submit', {data: JSON.stringify(this.formData)}).then(res => {
} if (res.code === 0) {
this.listQuotaAllocation()
this.$message.success("提交成功")
this.formData = {
lineId: this.lineList[0].id,
activityId: this.activityId
}
}
})
} }
}) })
}) })
@@ -294,9 +323,10 @@ const SIGN_UP_FORM = {
} }
}) })
}, },
onOpen(activityId, unionId) { onOpen(activityId, unionId, activity) {
this.activityId = activityId this.activityId = activityId
this.unionId = unionId this.unionId = unionId
this.activityData = activity
this.listQuotaAllocation() this.listQuotaAllocation()
this.getLineList(activityId) this.getLineList(activityId)
}, },
@@ -11,7 +11,7 @@ layout("/layouts/platform.html"){
<template> <template>
<el-card shadow="never"> <el-card shadow="never">
<search @search="doSearch"> <search @search="doSearch">
<search-item label="年度"> <search-item label="年度">
<el-date-picker <el-date-picker
v-model="pageForm.year" v-model="pageForm.year"
type="year" type="year"
@@ -24,7 +24,7 @@ layout("/layouts/platform.html"){
</el-date-picker> </el-date-picker>
</search-item> </search-item>
<search-item label="活动"> <search-item label="活动">
<el-select clearable filterable style="width: 100%" <el-select clearable filterable style="width: 100%"
v-model="pageForm.activityId" v-model="pageForm.activityId"
placeholder="请选择活动"> placeholder="请选择活动">