commit
This commit is contained in:
+43
-158
@@ -1,17 +1,13 @@
|
||||
package io.v.nutz.activity.controller.basic;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.ExcelImportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.ImportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.wizzer.framework.base.Result;
|
||||
import io.v.nutz.activity.models.ActivityUserCnd;
|
||||
import io.v.nutz.activity.models.ActivityUserScope;
|
||||
import io.v.nutz.activity.services.ActivityBasicScopeService;
|
||||
import io.v.nutz.activity.template.UserTemp;
|
||||
import io.v.nutz.annontation.ViReturn;
|
||||
import io.v.nutz.base.service.SimpleService;
|
||||
import io.v.nutz.base.utils.Vi;
|
||||
@@ -23,31 +19,27 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang.ArrayUtils;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.integration.jedis.RedisService;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.*;
|
||||
import org.nutz.mvc.upload.TempFile;
|
||||
import org.nutz.mvc.upload.UploadAdaptor;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.POST;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
/**
|
||||
@@ -63,8 +55,6 @@ public class ActivityBasicScopeController {
|
||||
|
||||
@Inject
|
||||
private SimpleService simpleService;
|
||||
@Inject
|
||||
private RedisService redisService;
|
||||
|
||||
@Inject
|
||||
private ActivityBasicScopeService activityBasicScopeService;
|
||||
@@ -107,7 +97,6 @@ public class ActivityBasicScopeController {
|
||||
@Param(value = "personTypes", required = false) String[] personTypes,
|
||||
@Param(value = "userStates", required = false) String[] userStates,
|
||||
@Param(value = "memberTypes", required = false) String[] memberTypes,
|
||||
@Param(value = "maritalTypes", required = false) String[] maritalTypes,
|
||||
@Param(value = "sexTypes", required = false) String[] sexTypes,
|
||||
@Param(value = "age", required = false) String[] age,
|
||||
@Param(value = "teacherMeetingId", required = false) String teacherMeetingId,
|
||||
@@ -116,8 +105,7 @@ public class ActivityBasicScopeController {
|
||||
@Param(value = "clubId", required = false) String clubId,
|
||||
@Param(value = "reverseSelection") boolean reverseSelection,
|
||||
@Param(value = "activityGroupId", required = false) Integer activityGroupId,
|
||||
@Param(value = "activityUserCnd", required = false) String activityUserCndStr,
|
||||
@Param(value = "existsLoginNameRedisKey", required = false) String existsLoginNameRedisKey) {
|
||||
@Param(value = "activityUserCnd", required = false) String activityUserCndStr) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
DISTINCT(u.id) as id,
|
||||
@@ -130,22 +118,16 @@ public class ActivityBasicScopeController {
|
||||
u.userState,
|
||||
u.unitname AS unitName,
|
||||
u.unionname AS unionName,
|
||||
TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) AS age,
|
||||
TIMESTAMPDIFF(YEAR, u.schoolTime, CURDATE()) AS teachNum,
|
||||
su.maritalStatus
|
||||
TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) AS age
|
||||
FROM
|
||||
`user` u
|
||||
LEFT JOIN sys_user_role sur on sur.userid = u.id
|
||||
LEFT JOIN sys_club_user clubuser ON clubuser.userid=u.id
|
||||
LEFT JOIN single_user su on su.userId = u.id
|
||||
$condition
|
||||
""");
|
||||
try {
|
||||
Cnd cnd = getCnd(pageForm, unionId, unitId, personTypes, userStates, memberTypes, maritalTypes, sexTypes, age, teacherMeetingId, roleIds, userId, clubId, reverseSelection, activityGroupId, activityUserCndStr);
|
||||
if (StrUtil.isNotBlank(existsLoginNameRedisKey)) {
|
||||
List<String> loginNames = redisService.lrange(existsLoginNameRedisKey, 0, -1);
|
||||
cnd.andEX("u.loginname", "in", loginNames);
|
||||
}
|
||||
Cnd cnd = getCnd(pageForm, unionId, unitId, personTypes, userStates, memberTypes, sexTypes, age, teacherMeetingId, roleIds, userId, clubId, reverseSelection, activityGroupId, activityUserCndStr);
|
||||
|
||||
|
||||
sql.setCondition(cnd);
|
||||
return simpleService.list(pageForm, sql);
|
||||
@@ -169,7 +151,6 @@ public class ActivityBasicScopeController {
|
||||
@At
|
||||
@ViReturn
|
||||
@POST
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@RequiresPermissions("activity.basic.scope")
|
||||
public Object doSetActivityUser(PageForm pageForm,
|
||||
@Param(value = "unionId", required = false) String unionId,
|
||||
@@ -177,7 +158,6 @@ public class ActivityBasicScopeController {
|
||||
@Param(value = "personTypes", required = false) String[] personTypes,
|
||||
@Param(value = "userStates", required = false) String[] userStates,
|
||||
@Param(value = "memberTypes", required = false) String[] memberTypes,
|
||||
@Param(value = "maritalTypes", required = false) String[] maritalTypes,
|
||||
@Param(value = "sexTypes", required = false) String[] sexTypes,
|
||||
@Param(value = "age", required = false) String[] age,
|
||||
@Param(value = "activityGroupId", required = false) Integer activityGroupId,
|
||||
@@ -189,8 +169,7 @@ public class ActivityBasicScopeController {
|
||||
@Param(value = "userId", required = false) String[] userId,
|
||||
@Param(value = "clubId", required = false) String clubId,
|
||||
@Param(value = "reverseSelection") boolean reverseSelection,
|
||||
@Param(value = "activityUserCnd", required = false) String activityUserCndStr,
|
||||
@Param(value = "existsLoginNameRedisKey", required = false) String existsLoginNameRedisKey) {
|
||||
@Param(value = "activityUserCnd", required = false) String activityUserCndStr) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT DISTINCT
|
||||
( u.id ) AS userId
|
||||
@@ -198,14 +177,10 @@ public class ActivityBasicScopeController {
|
||||
`user` u
|
||||
LEFT JOIN sys_user_role sur ON sur.userid = u.id
|
||||
LEFT JOIN sys_club_user clubuser ON clubuser.userid=u.id
|
||||
LEFT JOIN single_user su on su.userId = u.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = getCnd(pageForm, unionId, unitId, personTypes, userStates, memberTypes, maritalTypes, sexTypes, age, teacherMeetingId, roleIds, userId, clubId, reverseSelection, activityGroupId, activityUserCndStr);
|
||||
if (StrUtil.isNotBlank(existsLoginNameRedisKey)) {
|
||||
List<String> loginNames = redisService.lrange(existsLoginNameRedisKey, 0, -1);
|
||||
cnd.andEX("u.loginname", "in", loginNames);
|
||||
}
|
||||
Cnd cnd = getCnd(pageForm, unionId, unitId, personTypes, userStates, memberTypes, sexTypes, age, teacherMeetingId, roleIds, userId, clubId, reverseSelection, activityGroupId, activityUserCndStr);
|
||||
|
||||
sql.setCondition(cnd);
|
||||
sql.setCallback(Sqls.callback.entities());
|
||||
sql.setEntity(dao.getEntity(ActivityUserScope.class));
|
||||
@@ -260,11 +235,11 @@ public class ActivityBasicScopeController {
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!ShiroUtil.hasAnyRoles("sysadmin,H06,H10")) {
|
||||
if (ShiroUtil.hasAnyRoles(new String[]{"H04", "club01"})) {
|
||||
cnd.and("creator", "=", ShiroUtil.getPrincipalProperty("id"));
|
||||
}
|
||||
}
|
||||
// if (!ShiroUtil.hasAnyRoles("sysadmin,H06,H10")) {
|
||||
// if (ShiroUtil.hasAnyRoles(new String[]{"H04", "club01"})) {
|
||||
// cnd.and("creator", "=", ShiroUtil.getPrincipalProperty("id"));
|
||||
// }
|
||||
// }
|
||||
cnd.and("groupId", "IS NOT", null);
|
||||
cnd.and("groupName", "IS NOT", null);
|
||||
cnd.groupBy("groupId");
|
||||
@@ -282,8 +257,8 @@ public class ActivityBasicScopeController {
|
||||
@ViReturn
|
||||
// @RequiresPermissions("activity.basic.scope")
|
||||
public Object getScopeUser(String activityGroupId, @Param(value = "userId", required = false) String userId) {
|
||||
String userid = StrUtil.isNotBlank(userId) ? userId : io.v.nutz.util.ShiroUtil.getUserId();
|
||||
return simpleService.dao().count(ActivityUserScope.class, Cnd.where("groupId", "=", activityGroupId).and("userId", "=", io.v.nutz.util.ShiroUtil.getUserId()));
|
||||
String userid = StrUtil.isNotBlank(userId) ? userId : ShiroUtil.getUserId();
|
||||
return simpleService.dao().count(ActivityUserScope.class, Cnd.where("groupId", "=", activityGroupId).and("userId", "=", userid));
|
||||
}
|
||||
|
||||
@At
|
||||
@@ -308,7 +283,7 @@ public class ActivityBasicScopeController {
|
||||
addv("is_A06", ShiroUtil.hasRole("A06"));
|
||||
addv("is_H04", ShiroUtil.hasRole("H04"));
|
||||
addv("is_H02", ShiroUtil.hasRole("club01"));
|
||||
addv("is_H03", ShiroUtil.hasRole("H03"));
|
||||
addv("is_H03", ShiroUtil.hasRole("SchoolUnionMemberAdmin"));
|
||||
addv("is_sysadmin", ShiroUtil.hasRole("sysadmin"));
|
||||
addv("unionid", Vi.getUnionId());
|
||||
}};
|
||||
@@ -333,10 +308,11 @@ public class ActivityBasicScopeController {
|
||||
COLUMN_COMMENT
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = 'sys_user'
|
||||
AND TABLE_SCHEMA = 'zhgh_jviv'
|
||||
AND TABLE_SCHEMA = 'zhgh_hmc'
|
||||
""");
|
||||
List<NutMap> sqlDataList = activityBasicScopeService.listMap(sql);
|
||||
sqlDataList.forEach(v -> v.put("DATA_TYPE", new String((byte[]) v.get("DATA_TYPE"))));
|
||||
// sqlDataList.forEach(v -> v.put("DATA_TYPE", new String((byte[]) v.get("DATA_TYPE"))));
|
||||
sqlDataList.forEach(v -> v.put("DATA_TYPE", v.getString("DATA_TYPE")));
|
||||
return sqlDataList;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
@@ -347,7 +323,6 @@ public class ActivityBasicScopeController {
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
|
||||
@RequiresPermissions("activity.basic.scope")
|
||||
public void doExportUser(PageForm pageForm,
|
||||
@Param(value = "props", required = false) String props,
|
||||
@@ -356,7 +331,6 @@ public class ActivityBasicScopeController {
|
||||
@Param(value = "personTypes", required = false) String[] personTypes,
|
||||
@Param(value = "userStates", required = false) String[] userStates,
|
||||
@Param(value = "memberTypes", required = false) String[] memberTypes,
|
||||
@Param(value = "maritalTypes", required = false) String[] maritalTypes,
|
||||
@Param(value = "sexTypes", required = false) String[] sexTypes,
|
||||
@Param(value = "age", required = false) String[] age,
|
||||
@Param(value = "teacherMeetingId", required = false) String teacherMeetingId,
|
||||
@@ -365,39 +339,31 @@ public class ActivityBasicScopeController {
|
||||
@Param(value = "clubId", required = false) String clubId,
|
||||
@Param(value = "reverseSelection") boolean reverseSelection,
|
||||
@Param(value = "activityGroupId", required = false) Integer activityGroupId,
|
||||
@Param(value = "activityUserCnd", required = false) String activityUserCndStr,
|
||||
@Param(value = "existsLoginNameRedisKey", required = false) String existsLoginNameRedisKey,
|
||||
HttpServletResponse response) {
|
||||
@Param(value = "activityUserCnd", required = false) String activityUserCndStr, HttpServletResponse response) {
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
DISTINCT(u.id) as id,
|
||||
u.loginname AS loginName,
|
||||
u.username AS userName,
|
||||
u.sex,
|
||||
u.birthday,
|
||||
u.mobile,
|
||||
u.personType,
|
||||
u.userState,
|
||||
u.unitname AS unitName,
|
||||
u.unionname AS unionName,
|
||||
TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) AS age,
|
||||
TIMESTAMPDIFF(YEAR, u.schoolTime, CURDATE()) AS teachNum,
|
||||
su.maritalStatus
|
||||
FROM
|
||||
`user` u
|
||||
LEFT JOIN sys_user_role sur on sur.userid = u.id
|
||||
LEFT JOIN sys_club_user clubuser ON clubuser.userid=u.id
|
||||
LEFT JOIN single_user su on su.userId = u.id
|
||||
$condition
|
||||
""");
|
||||
SELECT
|
||||
DISTINCT(u.id) as id,
|
||||
u.loginname AS loginName,
|
||||
u.username AS userName,
|
||||
u.sex,
|
||||
u.birthday,
|
||||
u.mobile,
|
||||
u.personType,
|
||||
u.userState,
|
||||
u.unitname AS unitName,
|
||||
u.unionname AS unionName,
|
||||
TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) AS age
|
||||
FROM
|
||||
`user` u
|
||||
LEFT JOIN sys_user_role sur on sur.userid = u.id
|
||||
LEFT JOIN sys_club_user clubuser ON clubuser.userid=u.id
|
||||
$condition
|
||||
""");
|
||||
|
||||
try {
|
||||
Cnd cnd = getCnd(pageForm, unionId, unitId, personTypes, userStates, memberTypes, maritalTypes, sexTypes, age, teacherMeetingId, roleIds, userId, clubId, reverseSelection, activityGroupId, activityUserCndStr);
|
||||
if (StrUtil.isNotBlank(existsLoginNameRedisKey)) {
|
||||
List<String> loginNames = redisService.lrange(existsLoginNameRedisKey, 0, -1);
|
||||
cnd.andEX("u.loginname", "in", loginNames);
|
||||
}
|
||||
Cnd cnd = getCnd(pageForm, unionId, unitId, personTypes, userStates, memberTypes, sexTypes, age, teacherMeetingId, roleIds, userId, clubId, reverseSelection, activityGroupId, activityUserCndStr);
|
||||
|
||||
sql.setCondition(cnd);
|
||||
|
||||
List<NutMap> map = simpleService.listMap(sql);
|
||||
@@ -426,7 +392,6 @@ public class ActivityBasicScopeController {
|
||||
String[] personTypes,
|
||||
String[] userStates,
|
||||
String[] memberTypes,
|
||||
String[] maritalTypes,
|
||||
String[] sexTypes,
|
||||
String[] age,
|
||||
String teacherMeetingId,
|
||||
@@ -461,16 +426,6 @@ public class ActivityBasicScopeController {
|
||||
if (ArrayUtils.contains(memberTypes, "基金会员")) {
|
||||
cnd.and(new Static(" u.loginname " + IN_OR_NIN_OP + " (select loginname from sick_fund_member)"));
|
||||
}
|
||||
if (ArrayUtils.contains(memberTypes, "单身教工")) {
|
||||
cnd.and(new Static("u.id " + IN_OR_NIN_OP + " (select userId from single_user)"));
|
||||
}
|
||||
if (ArrayUtils.contains(memberTypes, "30教龄教工")) {
|
||||
cnd.and("u.isThirtyTeach", EQ_OR_NEQ_OP, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (Lang.isNotEmpty(maritalTypes)) {
|
||||
cnd.and("su.maritalStatus", IN_OR_NIN_OP, Arrays.asList(maritalTypes));
|
||||
}
|
||||
|
||||
if (!Lang.isEmptyArray(age)) {
|
||||
@@ -507,74 +462,4 @@ public class ActivityBasicScopeController {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 清空查询条件
|
||||
*
|
||||
* @param existsLoginNameRedisKey
|
||||
* @return java.lang.Object
|
||||
* @author zhf
|
||||
* @description
|
||||
*/
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@RequiresPermissions("activity.basic.scope")
|
||||
public Object clearSearchCnd(String existsLoginNameRedisKey) {
|
||||
if (StrUtil.isNotBlank(existsLoginNameRedisKey)) {
|
||||
redisService.del(existsLoginNameRedisKey);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
|
||||
@RequiresPermissions("activity.basic.scope")
|
||||
public Object doImport(String groupId, TempFile file) {
|
||||
String matchUserLoginNamesKey = "ActivityBasicScopeController.doImport.time=" + System.currentTimeMillis();
|
||||
|
||||
List<UserTemp> userImportList = ExcelImportUtil.importExcel(file.getFile(), UserTemp.class, new ImportParams());
|
||||
|
||||
//判断人员哪些存在哪些不存在
|
||||
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.setRemarks("系统查不到此人");
|
||||
}
|
||||
}
|
||||
|
||||
//匹配不到的用户
|
||||
List<UserTemp> errorExcelTempUsers = userImportList.stream().filter(v -> StrUtil.isNotBlank(v.getRemarks())).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 new NutMap().addv("工号", v.getLoginname()).addv("姓名", v.getUsername()).addv("错误信息", v.getRemarks());
|
||||
}));
|
||||
nutMap.setv("existsLoginNameRedisKey", matchUserLoginNamesKey);
|
||||
|
||||
//保存存在的工号
|
||||
if (Lang.isNotEmpty(existsLoginNames)) {
|
||||
redisService.lpush(matchUserLoginNamesKey, existsLoginNames.toArray(new String[0]));
|
||||
redisService.expire(matchUserLoginNamesKey, 60 * 3);
|
||||
}
|
||||
|
||||
return io.v.nutz.base.result.Result.success(nutMap);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -7,9 +7,8 @@ import io.v.nutz.base.service.BaseService;
|
||||
import io.v.nutz.dao.CndPlus;
|
||||
import io.v.nutz.modules.models.Audit;
|
||||
import io.v.nutz.modules.models.PageForm;
|
||||
import io.v.nutz.util.ShiroUtil;
|
||||
import io.v.nutz.web.commons.utils.ShiroUtil;
|
||||
import org.apache.shiro.authz.annotation.Logical;
|
||||
import org.apache.shiro.authz.annotation.RequiresAuthentication;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
@@ -75,10 +74,10 @@ public class ActivityAuditController {
|
||||
$condition
|
||||
""");
|
||||
|
||||
cnd.andExcludeEmpty("YEAR(tissue.startTime)", "=", year);
|
||||
cnd.andExcludeEmpty("tissue.unionId", "=", unionId);
|
||||
cnd.andExcludeEmpty("tissue.type", "=", type);
|
||||
cnd.andExcludeEmpty("tissue.state", state ? ">" : "=", 1);
|
||||
cnd.andEX("YEAR(tissue.startTime)", "=", year);
|
||||
cnd.andEX("tissue.unionId", "=", unionId);
|
||||
cnd.andEX("tissue.type", "=", type);
|
||||
cnd.andEX("tissue.state", state ? ">" : "=", 1);
|
||||
|
||||
if (Strings.isNotBlank(name)) {
|
||||
cnd.where().andLike("tissue.name", name);
|
||||
@@ -103,6 +102,11 @@ public class ActivityAuditController {
|
||||
audit.setLoginname(ShiroUtil.getPrincipalProperty("loginname").toString());
|
||||
baseService.insert(audit);
|
||||
baseService.dao().update(ActivityTissue.class, Chain.make("state", flag ? 3 : 2).add("auditId", audit.getId()), Cnd.where("id", "=", id));
|
||||
// 审核通过,修改活动为启动状态,并且还要将这个活动设置成首界面可见
|
||||
if (flag) {
|
||||
baseService.dao().update(ActivityTissue.class, Chain.make("isDisabled", true), Cnd.where("id", "=", id));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
+197
@@ -0,0 +1,197 @@
|
||||
package io.v.nutz.activity.controller.union;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import io.v.nutz.activity.models.ActivityTissuePerson;
|
||||
import io.v.nutz.annontation.ViReturn;
|
||||
import io.v.nutz.base.page.Pagination;
|
||||
import io.v.nutz.base.service.BaseService;
|
||||
import io.v.nutz.base.service.SimpleService;
|
||||
import io.v.nutz.base.utils.Vi;
|
||||
import io.v.nutz.dao.CndPlus;
|
||||
import io.v.nutz.modules.models.PageForm;
|
||||
import io.v.nutz.web.commons.utils.ShiroUtil;
|
||||
import org.apache.shiro.authz.annotation.Logical;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName ActivityUnionApplyUserController
|
||||
* @Description pc端活动报名
|
||||
* @Author zhf
|
||||
* @Date 2024/1/12 15:38
|
||||
*/
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/activity/applyUser")
|
||||
public class ActivityUnionApplyUserController {
|
||||
|
||||
@Inject
|
||||
private SimpleService simpleService;
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
|
||||
@At("/union")
|
||||
@Ok("beetl:platform/activity/union/unionActivityApplyUser.html")
|
||||
@RequiresPermissions("activity.union.applyUser")
|
||||
public void unionIndex() {
|
||||
}
|
||||
|
||||
|
||||
@At("/club")
|
||||
@Ok("beetl:platform/activity/union/clubActivityApplyUser.html")
|
||||
@RequiresPermissions("activity.club.applyUser")
|
||||
public void clubIndex() {
|
||||
}
|
||||
|
||||
|
||||
@At("/school")
|
||||
@Ok("beetl:platform/activity/union/schoolActivityApplyUser.html")
|
||||
@RequiresPermissions("activity.school.applyUser")
|
||||
public void schoolIndex() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@RequiresPermissions(value = {"activity.club.applyUser", "activity.union.applyUser", "activity.school.applyUser"}, logical = Logical.OR)
|
||||
public Object pageData(PageForm page,
|
||||
@Param(value = "year", required = false) String year,
|
||||
@Param(value = "name", required = false) String name,
|
||||
@Param(value = "type", required = false) Integer type) {
|
||||
CndPlus cnd = CndPlus.create();
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
tissue.*,
|
||||
uni.unionname ,
|
||||
club.`name` clubName,
|
||||
abs.`name` projectTypeName
|
||||
FROM
|
||||
activity_tissue tissue
|
||||
LEFT JOIN sys_union uni ON uni.id = tissue.unionId
|
||||
LEFT JOIN sys_club club ON club.id = tissue.clubId
|
||||
LEFT JOIN activity_basic_settings abs ON abs.`code`=tissue.projectTypeCode
|
||||
$condition
|
||||
""");
|
||||
if (StrUtil.isNotBlank(year)) {
|
||||
cnd.andEX("YEAR(tissue.startTime)", "=", year);
|
||||
}
|
||||
cnd.andEX("tissue.isDisabled", "=", true);
|
||||
cnd.andEX("tissue.type", "=", type);
|
||||
cnd.andEX("tissue.state", "=", 3);
|
||||
cnd.andEX("tissue.projectTypeCode", "!=", 50004);
|
||||
cnd.andEX("tissue.signUpMethod", "in", List.of(1, 2, 3));
|
||||
|
||||
if (Strings.isNotBlank(name)) {
|
||||
cnd.where().andLike("tissue.name", name);
|
||||
}
|
||||
|
||||
if (!ShiroUtil.hasAnyRoles("A06,sysadmin")) {
|
||||
cnd.and(new Static("(SELECT COUNT(1) FROM activity_user_scope WHERE groupId=tissue.groupId AND userId='%s') >0".formatted(ShiroUtil.getUserId())));
|
||||
}
|
||||
|
||||
|
||||
if (StrUtil.isNotBlank(page.getPageOrderName()) && StrUtil.isNotBlank(page.getPageOrderBy())) {
|
||||
cnd.orderBy(page.getPageOrderName(), page.getPageOrderBy().equalsIgnoreCase("ascending") ? "ASC" : "DESC");
|
||||
} else {
|
||||
cnd.desc("tissue.startTime");
|
||||
}
|
||||
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageMap(page.getPageNumber(), page.getPageSize(), sql);
|
||||
List<NutMap> list = pagination.getList();
|
||||
list.forEach(v -> {
|
||||
String activityId = v.getString("id");
|
||||
// 当前活动已报名人数
|
||||
int totalApplyNum = baseService.dao().count(ActivityTissuePerson.class, Cnd.where("tissueId", "=", activityId));
|
||||
v.put("totalApplyNum", totalApplyNum);
|
||||
|
||||
int signUpMethod = v.getInt("signUpMethod");
|
||||
if (signUpMethod == 1||signUpMethod == 3) {
|
||||
int count = baseService.dao().count(ActivityTissuePerson.class,
|
||||
Cnd.where("tissueId", "=", activityId)
|
||||
.and("applyUserId", "=", ShiroUtil.getUserId()));
|
||||
v.setv("countUser", count);
|
||||
} else if (signUpMethod == 2) {
|
||||
Sql sqlApplyUser = Sqls.create("""
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM
|
||||
`activity_tissue_person` atp
|
||||
LEFT JOIN `user` u ON u.id = atp.userId
|
||||
where atp.tissueId=@tissueId and u.unionid=@unionid
|
||||
""").setParam("tissueId", activityId).setParam("unionid", Vi.getUnionId());
|
||||
int count = baseService.count(sqlApplyUser);
|
||||
v.setv("countUser", count);
|
||||
}
|
||||
});
|
||||
pagination.setList(list);
|
||||
return pagination;
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@RequiresPermissions(value = {"activity.club.applyUser", "activity.union.applyUser", "activity.school.applyUser"}, logical = Logical.OR)
|
||||
public Object selfUnionUsers(String groupId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
u.id,
|
||||
u.username,
|
||||
u.loginname,
|
||||
u.sex,
|
||||
u.userState,
|
||||
u.unitname,
|
||||
u.unionname
|
||||
FROM
|
||||
`user` u
|
||||
LEFT JOIN activity_user_scope aus ON u.id = aus.userId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("u.unionId", "=", Vi.getUnionId());
|
||||
cnd.and("aus.groupId", "=", groupId);
|
||||
cnd.groupBy("u.id");
|
||||
cnd.asc("u.unitname").asc("u.unionname");
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> list = baseService.listMap(sql);
|
||||
return list;
|
||||
}
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@RequiresPermissions(value = {"activity.club.applyUser", "activity.union.applyUser", "activity.school.applyUser"}, logical = Logical.OR)
|
||||
public Object getReportedUser(String tissueId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
atp.userId
|
||||
FROM
|
||||
activity_tissue_person atp
|
||||
LEFT JOIN `user` u ON atp.userId = u.id
|
||||
WHERE
|
||||
atp.tissueId = @tissueId AND u.unionid = @unionId
|
||||
""");
|
||||
sql.setParam("tissueId", tissueId);
|
||||
sql.setParam("unionId", Vi.getUnionId());
|
||||
List<NutMap> list = baseService.listMap(sql);
|
||||
List<String> userIds = list.stream().map(v -> v.getString("userId")).collect(Collectors.toList());
|
||||
return userIds;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+69
-45
@@ -3,6 +3,7 @@ package io.v.nutz.activity.controller.union;
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.deepoove.poi.XWPFTemplate;
|
||||
import com.deepoove.poi.config.Configure;
|
||||
import com.deepoove.poi.policy.HackLoopTableRenderPolicy;
|
||||
@@ -19,24 +20,27 @@ import io.v.nutz.modules.models.PageForm;
|
||||
import io.v.nutz.service.ViService;
|
||||
import io.v.nutz.sys.models.Sys_user;
|
||||
import io.v.nutz.sys.services.SysMsgService;
|
||||
import io.v.nutz.util.ShiroUtil;
|
||||
import io.v.nutz.util.ViTool;
|
||||
import io.v.nutz.web.commons.utils.ShiroUtil;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.shiro.authz.annotation.Logical;
|
||||
import org.apache.shiro.authz.annotation.RequiresAuthentication;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
import org.nutz.trans.Trans;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
@@ -95,6 +99,8 @@ public class ActivityUnionManageController {
|
||||
public void schoolIndex() {
|
||||
}
|
||||
|
||||
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@RequiresAuthentication
|
||||
@@ -130,12 +136,41 @@ public class ActivityUnionManageController {
|
||||
cnd.and(group);
|
||||
}
|
||||
|
||||
cnd.limit(1, 30);
|
||||
|
||||
sql.setCondition(cnd);
|
||||
return sysUserService.listMap(sql);
|
||||
return sysUserService.listPageMap(1, 30, sql);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@RequiresPermissions(value = {"activity.union.info", "activity.club.info", "activity.school.info2"}, logical = Logical.OR)
|
||||
public Object doSave(@Param(value = "tissue") ActivityTissue tissue){
|
||||
tissue.setUserId(StrUtil.isNotBlank(tissue.getUserId()) ? tissue.getUserId() : ShiroUtil.getUserId());
|
||||
tissue.setApplyTime(StrUtil.isNotBlank(tissue.getApplyTime()) ? tissue.getApplyTime() : DateUtil.getDate());
|
||||
tissue.setState(0);
|
||||
|
||||
if (tissue.getType() == 40002) {
|
||||
tissue.setUnionId(Vi.getUnionId());
|
||||
} else if (tissue.getType() == 40003) {
|
||||
tissue.setClubId(vi.getClubId());
|
||||
}
|
||||
// 如果有商品,则设置商品活动编码和活动id
|
||||
if (Lang.isNotEmpty(tissue.getGoods())) {
|
||||
tissue.getGoods().forEach(v -> {
|
||||
v.setActivityCode(tissue.getActivityCode());
|
||||
v.setReid(tissue.getId());
|
||||
});
|
||||
}
|
||||
|
||||
activityTissueService.insertWith(tissue, "tissuePersonList");
|
||||
activitySchoolService.dao().insert(tissue.getGoods());
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 校工会添加
|
||||
*
|
||||
@@ -144,39 +179,31 @@ public class ActivityUnionManageController {
|
||||
*/
|
||||
@At
|
||||
@ViReturn
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@RequiresPermissions(value = {"activity.union.info", "activity.club.info", "activity.school.info2"}, logical = Logical.OR)
|
||||
public Object doAdd(@Param(value = "tissue") ActivityTissue tissue) {
|
||||
tissue.setUserId(ShiroUtil.getUserId());
|
||||
tissue.setApplyTime(DateUtil.getDate());
|
||||
String title = "校工会文化活动";
|
||||
String url = "/platform/activity/info/mange/school";
|
||||
if (tissue.getType() == 40002) {
|
||||
tissue.setUserId(StrUtil.isNotBlank(tissue.getUserId()) ? tissue.getUserId() : ShiroUtil.getUserId());
|
||||
tissue.setApplyTime(StrUtil.isNotBlank(tissue.getApplyTime()) ? tissue.getApplyTime() : DateUtil.getDate());
|
||||
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) {
|
||||
tissue.setState(1);
|
||||
tissue.setUnionId(Vi.getUnionId());
|
||||
title = "分工会活动";
|
||||
url = "/platform/activity/info/mange/union";
|
||||
} else if (tissue.getType() == 40003) {
|
||||
tissue.setState(1);
|
||||
tissue.setClubId(vi.getClubId());
|
||||
title = "协会活动";
|
||||
url = "/platform/activity/info/mange/club";
|
||||
} else {
|
||||
tissue.setState(3);
|
||||
tissue.setIsDisabled(true);
|
||||
tissue.setIsEnrollSystem(true);
|
||||
}
|
||||
|
||||
Trans.exec(() -> {
|
||||
activityTissueService.insertWith(tissue, "tissuePersonList");
|
||||
tissue.getGoods().forEach(v -> {
|
||||
v.setActivityCode(tissue.getActivityCode());
|
||||
v.setReid(tissue.getId());
|
||||
});
|
||||
activitySchoolService.dao().insert(tissue.getGoods());
|
||||
tissue.getCover();
|
||||
if (tissue.getType() == 40002) {
|
||||
tissue.setUnionId(Vi.getUnionId());
|
||||
} else if (tissue.getType() == 40003) {
|
||||
tissue.setClubId(vi.getClubId());
|
||||
}
|
||||
tissue.getGoods().forEach(v -> {
|
||||
v.setActivityCode(tissue.getActivityCode());
|
||||
v.setReid(tissue.getId());
|
||||
});
|
||||
if (tissue.getXlFlag() != null && tissue.getXlFlag()) {
|
||||
String time = tissue.getStartTime() + "至" + tissue.getEndTime();
|
||||
sysMsgService.sendMsgByActivityGroupId(tissue.getId(), tissue.getGroupId(), title, tissue.getName(), url, "/mobile/activity/unionActivity", time);
|
||||
}
|
||||
// tissue.getCover();
|
||||
|
||||
activityTissueService.insertWith(tissue, "tissuePersonList");
|
||||
activitySchoolService.dao().insert(tissue.getGoods());
|
||||
|
||||
return null;
|
||||
}
|
||||
@@ -185,21 +212,12 @@ public class ActivityUnionManageController {
|
||||
@ViReturn
|
||||
@RequiresPermissions(value = {"activity.union.info", "activity.club.info", "activity.school.info2"}, logical = Logical.OR)
|
||||
public Object doEdit(@Param("tissue") ActivityTissue tissue) {
|
||||
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) {
|
||||
tissue.setState(1);
|
||||
} else {
|
||||
tissue.setState(3);
|
||||
}
|
||||
activityTissueService.doEdit(tissue);
|
||||
String title = "校工会文化活动";
|
||||
String url = "/platform/activity/info/mange/school";
|
||||
if (tissue.getType() == 40002) {
|
||||
title = "分工会活动";
|
||||
url = "/platform/activity/info/mange/union";
|
||||
} else if (tissue.getType() == 40003) {
|
||||
title = "协会活动";
|
||||
url = "/platform/activity/info/mange/club";
|
||||
}
|
||||
sysMsgService.deleteMsgByActivityId(tissue.getId());
|
||||
if (tissue.getXlFlag() != null && tissue.getXlFlag()) {
|
||||
String time = tissue.getStartTime() + "至" + tissue.getEndTime();
|
||||
sysMsgService.sendMsgByActivityGroupId(tissue.getId(), tissue.getGroupId(), title, tissue.getName(), url, "/mobile/activity/unionActivity", time);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -208,7 +226,6 @@ public class ActivityUnionManageController {
|
||||
@RequiresPermissions(value = {"activity.union.info", "activity.club.info", "activity.school.info2"}, logical = Logical.OR)
|
||||
public Object doDelete(String id) {
|
||||
activityTissueService.doDelete(id);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -318,4 +335,11 @@ public class ActivityUnionManageController {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@RequiresPermissions(value = {"activity.union.info", "activity.club.info", "activity.school.info2"}, logical = Logical.OR)
|
||||
public Object activityStatusChange(String id, String isDisabled) {
|
||||
activityTissueService.update(Chain.make("isDisabled", "1".equals(isDisabled)), Cnd.where("id", "=", id));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
+43
-3
@@ -4,7 +4,9 @@ import cn.hutool.core.util.StrUtil;
|
||||
import io.v.nutz.activity.models.ActivityTissue;
|
||||
import io.v.nutz.annontation.ViReturn;
|
||||
import io.v.nutz.base.service.BaseService;
|
||||
import io.v.nutz.base.utils.Vi;
|
||||
import io.v.nutz.modules.models.PageForm;
|
||||
import io.v.nutz.web.commons.utils.ShiroUtil;
|
||||
import org.apache.shiro.authz.annotation.Logical;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.nutz.dao.Cnd;
|
||||
@@ -12,6 +14,7 @@ import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
@@ -51,13 +54,35 @@ public class ActivityUnionUserStatisticsController {
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@Inject
|
||||
private Vi vi;
|
||||
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@RequiresPermissions(value = {"activity.school.user.statistics", "activity.club.user.statistics", "activity.union.user.statistics"}, logical = Logical.OR)
|
||||
public Object pageData(PageForm page,
|
||||
@Param(value = "type", required = false) Integer type,
|
||||
@Param(value = "activityId", required = false) String activityId,
|
||||
@Param(value = "unionId", required = false) String unionId) {
|
||||
ActivityTissue tissue = baseService.dao().fetch(ActivityTissue.class, activityId);
|
||||
|
||||
if (Lang.isEmpty(tissue)){
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) {
|
||||
if (type == 40002) {
|
||||
if (!Vi.getUnionId().equals(tissue.getUnionId())) {
|
||||
return null;
|
||||
}
|
||||
} else if (type == 40003) {
|
||||
if (!vi.getClubId().equals(tissue.getClubId())) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
@@ -68,6 +93,8 @@ public class ActivityUnionUserStatisticsController {
|
||||
u.unionname,
|
||||
u.sex,
|
||||
u.mobile,
|
||||
atp.applyUserId,
|
||||
atp.id atpId ,
|
||||
atp.applyDateTime
|
||||
FROM
|
||||
`activity_tissue_person` atp
|
||||
@@ -75,8 +102,17 @@ public class ActivityUnionUserStatisticsController {
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("atp.tissueId", "=", activityId);
|
||||
cnd.andEX("u.unionId", "=", unionId);
|
||||
cnd.andEX("atp.tissueId", "=", activityId);
|
||||
// cnd.andEX("u.unionId", "=", unionId);
|
||||
// if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) {
|
||||
// if (!tissue.getUserId().equals(ShiroUtil.getUserId())) {
|
||||
// if (type == 40002) {
|
||||
// cnd.and("unionId", "=", Vi.getUnionId());
|
||||
// } else if (type == 40003) {
|
||||
// cnd.and("u.id", "in", " SELECT userid FROM sys_club_user WHERE clubid = '%s' ".formatted(vi.getClubId()));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
if (Strings.isNotBlank(page.getSearchName()) && Strings.isNotBlank(page.getSearchKeyword())) {
|
||||
cnd.where().andLike(page.getSearchName(), page.getSearchKeyword());
|
||||
}
|
||||
@@ -95,7 +131,11 @@ public class ActivityUnionUserStatisticsController {
|
||||
@RequiresPermissions(value = {"activity.school.user.statistics", "activity.club.user.statistics", "activity.union.user.statistics"}, logical = Logical.OR)
|
||||
public Object getActivityByYearOrType(@Param(value = "year", required = false) Integer year,
|
||||
@Param(value = "type", required = false) Integer type) {
|
||||
return baseService.dao().query(ActivityTissue.class, Cnd.where("type", "=", type).andEX("YEAR(startTime)", "=", year).desc("startTime"));
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("type", "=", type);
|
||||
cnd.andEX("YEAR(startTime)", "=", year);
|
||||
cnd.desc("startTime");
|
||||
return baseService.dao().query(ActivityTissue.class, cnd);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,22 +1,28 @@
|
||||
package io.v.nutz.activity.models;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.wizzer.framework.base.model.BaseModel;
|
||||
import io.v.nutz.activity.models.ActivityTissuePerson;
|
||||
import io.v.nutz.common.models.Goods;
|
||||
import io.v.nutz.sys.models.Sys_file;
|
||||
import lombok.Data;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author: Aaron
|
||||
* @create: 2021-03-09 13:57
|
||||
* @description: 社团或分工会活动校工会活动
|
||||
* @description: 协会或分工会活动校工会活动
|
||||
**/
|
||||
|
||||
@Data
|
||||
@Table("activity_tissue")
|
||||
public class ActivityTissue {
|
||||
@Comment("协会或分工会活动校工会活动")
|
||||
public class ActivityTissue extends BaseModel implements Serializable {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@@ -131,7 +137,7 @@ public class ActivityTissue {
|
||||
private String unionId;
|
||||
|
||||
@Column
|
||||
@Comment("创建人所属社团")
|
||||
@Comment("创建人所属协会")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String clubId;
|
||||
|
||||
@@ -210,7 +216,7 @@ public class ActivityTissue {
|
||||
@Column
|
||||
@Comment("是否报名系统")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
private boolean isEnrollSystem;
|
||||
private Boolean isEnrollSystem;
|
||||
|
||||
@Many(field = "tissueId")
|
||||
private List<ActivityTissuePerson> tissuePersonList;
|
||||
@@ -223,4 +229,24 @@ public class ActivityTissue {
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
private Boolean xlFlag;
|
||||
|
||||
@Column
|
||||
@Comment("是否开启")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
private Boolean isDisabled;
|
||||
|
||||
@Column
|
||||
@Comment("是否推送移动端首页")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private Integer isPushHome;
|
||||
|
||||
@Column
|
||||
@Comment("签到开始时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String signStartTime;
|
||||
|
||||
@Column
|
||||
@Comment("签到结束时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String signEndTime;
|
||||
|
||||
}
|
||||
|
||||
@@ -7,18 +7,18 @@ import io.v.nutz.activity.services.ActivityTissueService;
|
||||
import io.v.nutz.base.utils.Vi;
|
||||
import io.v.nutz.common.models.Goods;
|
||||
import io.v.nutz.dao.CndPlus;
|
||||
import io.v.nutz.jf.model.ActivityBx;
|
||||
import io.v.nutz.modules.models.Audit;
|
||||
import io.v.nutz.modules.models.PageForm;
|
||||
import io.v.nutz.service.ViService;
|
||||
import io.v.nutz.service.impl.ViServiceImpl;
|
||||
import io.v.nutz.util.ShiroUtil;
|
||||
import io.v.nutz.web.commons.utils.ShiroUtil;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
@@ -66,21 +66,26 @@ public class ActivityTissueServiceImpl extends ViServiceImpl<ActivityTissue> imp
|
||||
$condition
|
||||
""");
|
||||
|
||||
cnd.andExcludeEmpty("YEAR(tissue.startTime)", "=", year);
|
||||
cnd.andExcludeEmpty("tissue.projectTypeCode", "!=", "50004");
|
||||
cnd.andExcludeEmpty("tissue.unionId", "=", unionId);
|
||||
cnd.andExcludeEmpty("tissue.type", "=", type);
|
||||
cnd.andEX("YEAR(tissue.applyTime)", "=", year);
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("tissue.projectTypeCode", "!=", "50004");
|
||||
seg.or("tissue.projectTypeCode", "is", null);
|
||||
cnd.and(seg);
|
||||
// cnd.andEx("tissue.projectTypeCode", "!=", "50004");
|
||||
cnd.andEX("tissue.unionId", "=", unionId);
|
||||
cnd.andEX("tissue.type", "=", type);
|
||||
|
||||
if (Strings.isNotBlank(name)) {
|
||||
cnd.where().andLike("tissue.name", name);
|
||||
}
|
||||
|
||||
if (!ShiroUtil.hasAnyRoles("sysadmin,H10,A06")) {
|
||||
if (ShiroUtil.hasRole("H04")) {
|
||||
cnd.and("tissue.userId", "=", ShiroUtil.getUserId());
|
||||
/* if (ShiroUtil.hasRole("H04")) {
|
||||
cnd.and("tissue.unionId", "in", vi.getMangeUnionStr());
|
||||
} else if (ShiroUtil.hasRole("club01")) {
|
||||
cnd.and("tissue.clubId", "in", vi.getMangeClubStr());
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(page.getPageOrderName()) && StrUtil.isNotBlank(page.getPageOrderBy())) {
|
||||
@@ -98,7 +103,7 @@ public class ActivityTissueServiceImpl extends ViServiceImpl<ActivityTissue> imp
|
||||
public void doDelete(String id) {
|
||||
this.delete(id);
|
||||
tissuePersonService.clear(Cnd.where("tissueId", "=", id));
|
||||
tissuePersonService.dao().clear(Goods.class, Cnd.where("reid", "=", id));
|
||||
dao().clear(Goods.class, Cnd.where("reid", "=", id));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -132,7 +137,7 @@ public class ActivityTissueServiceImpl extends ViServiceImpl<ActivityTissue> imp
|
||||
});
|
||||
tissuePersonService.dao().insert(tissue.getGoods());
|
||||
|
||||
if (Lang.isNotEmpty(tissue.getBillFiles())) {
|
||||
/* if (Lang.isNotEmpty(tissue.getBillFiles())) {
|
||||
tissuePersonService.dao().update(ActivityBx.class, Chain.make("billFiles", tissue.getBillFiles()),
|
||||
Cnd.where("activity_id", "=", tissue.getId()));
|
||||
}
|
||||
@@ -143,7 +148,8 @@ public class ActivityTissueServiceImpl extends ViServiceImpl<ActivityTissue> imp
|
||||
if (Lang.isNotEmpty(tissue.getPhotoFiles())) {
|
||||
tissuePersonService.dao().update(ActivityBx.class, Chain.make("photoFiles", tissue.getPhotoFiles()),
|
||||
Cnd.where("activity_id", "=", tissue.getId()));
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -24,10 +24,7 @@ import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -301,10 +298,15 @@ public class QuestionH5Controller {
|
||||
}
|
||||
}
|
||||
|
||||
// issueCnd.asc("ipxbh");
|
||||
issueCnd.asc("ipxbh");
|
||||
questionService.fetchLinks(question, "issues", issueCnd);
|
||||
// List<String> issueIds = question.getIssues().stream().map(Question_issue::getIid).collect(Collectors.toList());
|
||||
// List<Question_wor> wors = dao.query(Question_wor.class, Cnd.where("wiid", "in", issueIds));
|
||||
|
||||
for (Question_issue issue : question.getIssues()) {
|
||||
questionService.fetchLinks(issue, "wors", Cnd.NEW().asc("wpxbh"));
|
||||
// issue.setWors(wors.stream().filter(v -> v.getWiid().equals(issue.getIid()))
|
||||
// .sorted(Comparator.comparingInt(Question_wor::getWpxbh)).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
if (question.getDisruptingOrder()) {
|
||||
|
||||
@@ -1,162 +1,119 @@
|
||||
<template>
|
||||
<el-tabs tab-position="top" v-model="activeName" v-loading="loading">
|
||||
<el-tab-pane label="活动基础信息" name="1">
|
||||
<el-form label-suffix=":" style="padding: 20px 0" label-width="120px">
|
||||
<el-form-item class="item-center">{{ viewData.name }}</el-form-item>
|
||||
<border-table>
|
||||
<table>
|
||||
<tr>
|
||||
<th>联系人</th>
|
||||
<td>{{ viewData.username }}( {{ viewData.loginname }})</td>
|
||||
<th>联系方式</th>
|
||||
<td>{{ viewData.mobile }}</td>
|
||||
<th>活动编号</th>
|
||||
<td>{{ viewData.activityCode }}</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>活动名称</th>
|
||||
<td>{{ viewData.name }}</td>
|
||||
<th>活动类型</th>
|
||||
<td>{{ viewData.type === 1 ? "分工会活动" : viewData.type === 2 ? "协会协会活动" : "校工会活动" }}</td>
|
||||
<th>活动项目类型</th>
|
||||
<td>{{ viewData.projectTypeName }}( {{ viewData.projectTypeCode }})</td>
|
||||
</tr>
|
||||
|
||||
<el-row gutter="60">
|
||||
<tr>
|
||||
<th>活动地点</th>
|
||||
<td>{{ viewData.address }}</td>
|
||||
<th>报名时间</th>
|
||||
<td>{{ viewData.applyStartTime }} - {{ viewData.applyEndTime }}</td>
|
||||
<th>活动时间</th>
|
||||
<td>{{ viewData.startTime }} - {{ viewData.endTime }}</td>
|
||||
</tr>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系人">
|
||||
<span v-if="viewData.username">
|
||||
{{ viewData.username }}
|
||||
({{ viewData.loginname }})</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系方式">
|
||||
{{ viewData.mobile }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="活动编号">
|
||||
{{ viewData.activityCode }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="活动项目类型">
|
||||
{{ viewData.projectTypeName }}({{ viewData.projectTypeCode }})
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="活动类型">
|
||||
{{ viewData.type === 1 ? '分工会活动' : viewData.type === 2 ? '协会社团活动' : '校工会活动' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="活动计划时间">
|
||||
{{ viewData.startPlannedDate + ' - ' + viewData.endPlannedDate }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="活动时间">{{ viewData.startTime }} - {{
|
||||
viewData.endTime
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" v-if="viewData.applyStartTime">
|
||||
<el-form-item label="报名时间">{{ viewData.applyStartTime }} - {{
|
||||
viewData.applyEndTime
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="活动人数">{{ viewData.peopleNum || '暂无' }}</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="活动内容">{{ viewData.activityContent }}</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="活动地点">{{ viewData.address }}</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="报名方式">
|
||||
<tr>
|
||||
<th>创建组织</th>
|
||||
<td>
|
||||
<span v-if="viewData.type===40001">{{ "校工会" }}</span>
|
||||
<span v-if="viewData.type===40002">{{ viewData.unionname ? viewData.unionname : "暂无" }}</span>
|
||||
<span v-if="viewData.type===40003">{{ viewData.clubName ? viewData.clubName : "暂无" }}</span>
|
||||
</td>
|
||||
<th>报名方式</th>
|
||||
<td>
|
||||
<span v-if="viewData.signUpMethod===1">个人报名</span>
|
||||
<span v-else-if="viewData.signUpMethod===2">分工会报名</span>
|
||||
<span v-else-if="viewData.signUpMethod===3">组队报名</span>
|
||||
<span v-else-if="!viewData.signUpMethod">无需报名</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="活动提醒">
|
||||
{{ viewData.xlFlag ? '提醒' : '不提醒' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="是否用于报名">
|
||||
<span v-if="viewData.isEnrollSystem">活动报名</span>
|
||||
<span v-else>活动管理</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" v-if="viewData.signUpMethod!=null">
|
||||
<el-form-item label="报名人数限制">
|
||||
<span v-if="viewData.userNumberLimit===1">总人数限制({{
|
||||
viewData.totalUserNumberLimit
|
||||
}}人)</span>
|
||||
</td>
|
||||
<th>报名人数限制</th>
|
||||
<td>
|
||||
<span v-if="viewData.userNumberLimit===1">总人数限制({{viewData.totalUserNumberLimit }}人)</span>
|
||||
<span v-else-if="viewData.userNumberLimit===2">分工会人数限制</span>
|
||||
<span v-else-if="!viewData.userNumberLimit">不限制</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<el-col :span="24" v-if="viewData.userNumberLimit===2">
|
||||
<el-form-item label="分工会限制名额">
|
||||
<tr v-if="viewData.userNumberLimit===2">
|
||||
<th>报名方式</th>
|
||||
<td colspan="5">
|
||||
<el-table border stripe :data="viewData.unionUserNumberLimit" size="small"
|
||||
height="500">
|
||||
<el-table-column type="index" label="序号" header-align="center" align="center"
|
||||
width="100">
|
||||
</el-table-column>
|
||||
<el-table-column label="分工会名称" prop="unionName"></el-table-column>
|
||||
<el-table-column label="分工会人数" prop="unionNum"></el-table-column>
|
||||
<el-table-column label="分工会名称" prop="unionname"></el-table-column>
|
||||
<el-table-column label="分工会人数" prop="teacherCount"></el-table-column>
|
||||
<el-table-column label="限制人数" prop="limitNum"></el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item v-if="viewData.type===1" label="所属工会">
|
||||
{{ !viewData.unionname ? '暂无' : viewData.unionname }}
|
||||
</el-form-item>
|
||||
<el-form-item v-if="viewData.type===2" label="所属社团">
|
||||
{{ !viewData.clubName ? '暂无' : viewData.clubName }}
|
||||
</el-form-item>
|
||||
<el-form-item v-if="viewData.type===3" label="所属组织">
|
||||
校工会
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<tr v-if="viewData.needSign && viewData.needSign!=null">
|
||||
<th>是否需要签到</th>
|
||||
<td>{{ viewData.needSign ? "需要" : "不需要" }}</td>
|
||||
<th>签到半径</th>
|
||||
<td colspan="3">{{ viewData.rangeMeter + "米" }}</td>
|
||||
</tr>
|
||||
|
||||
<el-col :span="12" v-if="[1,2].includes(viewData.signUpMethod)">
|
||||
<el-form-item label="是否需要签到">
|
||||
{{ viewData.needSign ? '需要' : '不需要' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" v-if="viewData.signUpMethod!=null">
|
||||
<el-form-item label="签到半径(m)" v-if="viewData.needSign">
|
||||
{{ viewData.rangeMeter + '米' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="封面图" prop="cover">
|
||||
<img v-if="viewData.cover"
|
||||
:src="FILE_DOMAIN + '/fileStreamPreview?id=' + viewData.cover"
|
||||
class="avatar" style="height: 200px;width: auto">
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24" v-if="viewData.needSign">
|
||||
<el-form-item prop="" label="活动签到点位">
|
||||
<tr v-if="viewData.needSign">
|
||||
<th>活动签到点位</th>
|
||||
<td colspan="5">
|
||||
<el-card shadow="never">
|
||||
<div style="width: 100%;height: 500px" id="signMap"></div>
|
||||
</el-card>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</el-row>
|
||||
<tr>
|
||||
<th>活动介绍</th>
|
||||
<td colspan="5">
|
||||
<div v-html="viewData.activityContent"></div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>附件</th>
|
||||
<td colspan="5">
|
||||
<file-upload v-if="viewData.otherFiles&&viewData.otherFiles.length"
|
||||
:files="viewData.otherFiles" :view="true">
|
||||
</file-upload>
|
||||
<span v-else>暂无</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>封面图</th>
|
||||
<td colspan="5">
|
||||
<img v-if="viewData.cover"
|
||||
:src="FILE_DOMAIN + '/fileStreamPreview?id=' + viewData.cover"
|
||||
class="avatar" style="height: 200px;width: auto">
|
||||
<span v-else>暂无</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
</table>
|
||||
</border-table>
|
||||
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="活动费用" name="3" v-if="!viewData.isEnrollSystem">
|
||||
<el-form label-suffix=":" label-position="left" style="padding: 20px 0" label-width="80px">
|
||||
@@ -189,13 +146,6 @@
|
||||
</file-upload>
|
||||
<span v-else>暂无</span>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="其  他">
|
||||
<file-upload v-if="viewData.otherFiles&&viewData.otherFiles.length"
|
||||
:files="viewData.otherFiles" :view="true">
|
||||
</file-upload>
|
||||
<span v-else>暂无</span>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
</el-tab-pane>
|
||||
@@ -239,26 +189,26 @@ module.exports = {
|
||||
props: {
|
||||
handle: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
default: false
|
||||
},
|
||||
label: {
|
||||
type: String,
|
||||
default: '审核'
|
||||
},
|
||||
default: "审核"
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
userData: [],
|
||||
viewData: {},
|
||||
loading: true,
|
||||
search: '',
|
||||
tableKey: '',
|
||||
activeName: '1',
|
||||
userColumns: [],
|
||||
search: "",
|
||||
tableKey: "",
|
||||
activeName: "1",
|
||||
userColumns: []
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
|
||||
"file-upload": httpVueLoader("/components/plugins/FileUpload.vue")
|
||||
},
|
||||
methods: {
|
||||
hasPane(name) {
|
||||
@@ -272,7 +222,7 @@ module.exports = {
|
||||
},
|
||||
async userChange() {
|
||||
if (this.search) {
|
||||
const {data} = await $.get("/platform/activity/info/mange/searchTissueUser", {
|
||||
const { data } = await $.get("/platform/activity/info/mange/searchTissueUser", {
|
||||
id: this.viewData.id,
|
||||
search: this.search
|
||||
})
|
||||
@@ -280,19 +230,19 @@ module.exports = {
|
||||
}
|
||||
},
|
||||
async getInfo(id) {
|
||||
this.userColumns = [{prop: 'userName', label: '姓名'},
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'mobile', label: '联系方式'},
|
||||
{prop: 'unitName', label: '所属单位'},
|
||||
{prop: 'unionName', label: '所属工会'}]
|
||||
this.userColumns = [{ prop: "userName", label: "姓名" },
|
||||
{ prop: "loginName", label: "工号" },
|
||||
{ prop: "sex", label: "性别" },
|
||||
{ prop: "mobile", label: "联系方式" },
|
||||
{ prop: "unitName", label: "所属单位" },
|
||||
{ prop: "unionName", label: "所属工会" }]
|
||||
this.loading = true
|
||||
const {data} = await $.get("/platform/activity/info/mange/findOne", {id})
|
||||
const { data } = await $.get("/platform/activity/info/mange/findOne", { id })
|
||||
this.loading = false
|
||||
if (data) {
|
||||
if (data.needSign) {
|
||||
this.userColumns.push({prop: 'isSign', label: '是否签到'})
|
||||
this.userColumns.push({prop: 'signTime', label: '签到时间'})
|
||||
this.userColumns.push({ prop: "isSign", label: "是否签到" })
|
||||
this.userColumns.push({ prop: "signTime", label: "签到时间" })
|
||||
}
|
||||
data.billFiles = JSON.parse(data.billFiles)
|
||||
data.photoFiles = JSON.parse(data.photoFiles)
|
||||
@@ -306,7 +256,7 @@ module.exports = {
|
||||
this.activeName = this.handle ? "999" : "1"
|
||||
} else {
|
||||
this.viewData = {}
|
||||
this.$notify.error({title: '错误', message: '获取信息失败'});
|
||||
this.$notify.error({ title: "错误", message: "获取信息失败" })
|
||||
}
|
||||
},
|
||||
initMap() {
|
||||
@@ -316,7 +266,7 @@ module.exports = {
|
||||
resizeEnable: true,
|
||||
center: [118.640081, 32.082496],
|
||||
zoom: 16
|
||||
});
|
||||
})
|
||||
|
||||
if (this.viewData.location && Array.isArray(this.viewData.location)) {
|
||||
const lng = parseFloat(this.viewData.location[0])
|
||||
@@ -324,11 +274,11 @@ module.exports = {
|
||||
marker = new AMap.Marker({
|
||||
position: [lng, lat],
|
||||
offset: new AMap.Pixel(-13, -30)
|
||||
});
|
||||
marker.setMap(map);
|
||||
})
|
||||
marker.setMap(map)
|
||||
map.setZoomAndCenter(18, [lng, lat])
|
||||
}
|
||||
map.on('click', (e) => {
|
||||
map.on("click", (e) => {
|
||||
console.log(e)
|
||||
if (marker) {
|
||||
marker.setMap(null)
|
||||
@@ -342,10 +292,10 @@ module.exports = {
|
||||
this.formData.location = []
|
||||
this.formData.location.push(e.lnglat.getLng())
|
||||
this.formData.location.push(e.lnglat.getLat())
|
||||
});
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -359,4 +309,4 @@ module.exports = {
|
||||
.item-center .el-form-item__content {
|
||||
font-size: 18px;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -61,9 +61,7 @@
|
||||
</van-cell>
|
||||
|
||||
<van-cell title="活动内容" v-if="o.projectTypeCode!=='50004'">
|
||||
<template #label>
|
||||
{{o.activityContent}}
|
||||
</template>
|
||||
<span @click.stop="showActivityInfo(o.activityContent)" style="color: #0a84ff">点我查看详情</span>
|
||||
</van-cell>
|
||||
<van-cell title="签到点位" v-if="o.needSign">
|
||||
<template #label>
|
||||
@@ -73,4 +71,4 @@
|
||||
</div>
|
||||
</template>
|
||||
</van-cell>
|
||||
</van-cell-group>
|
||||
</van-cell-group>
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
const self_mixin = {
|
||||
const self_mixin_h5 = {
|
||||
data() {
|
||||
return {
|
||||
//已报名人数
|
||||
hasRegUserNum: 0,
|
||||
unionId: null,
|
||||
unionLimitNum: 0,
|
||||
isRegisterFull: false
|
||||
isRegisterFull: false,
|
||||
user: JSON.parse(window.sessionStorage.getItem('user'))
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
@@ -15,7 +16,7 @@ const self_mixin = {
|
||||
resp.data.location = JSON.parse(resp.data.location)
|
||||
resp.data.unionUserNumberLimit = JSON.parse(resp.data.unionUserNumberLimit)
|
||||
this.o = resp.data
|
||||
this.unionId = "${@shiro.getPrincipalProperty('unit').getUnionid()}"
|
||||
this.unionId = this.user.union.id
|
||||
if (!this.unionId) {
|
||||
this.$toast.fail('您的所属工会信息缺失,请联系管理员')
|
||||
return
|
||||
@@ -52,8 +53,9 @@ const self_mixin = {
|
||||
zoomEnable: true,
|
||||
dragEnable: false,
|
||||
resizeEnable: true,
|
||||
center: [114.402582, 30.521378],
|
||||
zoom: 16
|
||||
center: [119.743667, 30.216618],
|
||||
zoom: 16,
|
||||
scrollWheel: true,
|
||||
});
|
||||
|
||||
if (this.o.location && Array.isArray(this.o.location)) {
|
||||
@@ -61,7 +63,7 @@ const self_mixin = {
|
||||
const lat = parseFloat(this.o.location[1])
|
||||
marker = new AMap.Marker({
|
||||
position: [lng, lat],
|
||||
offset: new AMap.Pixel(-13, -30)
|
||||
//offset: new AMap.Pixel(-13, -30)
|
||||
})
|
||||
map.add(marker)
|
||||
// marker.setMap(map);
|
||||
@@ -127,4 +129,4 @@ const self_mixin = {
|
||||
return s.toFixed(2)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,24 +56,25 @@ layout("/mobile/platform.html"){
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<van-nav-bar title="活动列表" left-arrow placeholder fixed
|
||||
@click-left="location.replace('/mobile/index')"></van-nav-bar>
|
||||
<van-nav-bar @click-left="location.replace('/mobile/index')" fixed left-arrow placeholder
|
||||
title="活动列表"></van-nav-bar>
|
||||
|
||||
<div style="margin: 10px auto 60px auto">
|
||||
<van-list v-model="loading" :finished="finished" :finished-text="tableData.length>0?'没有更多了':''"
|
||||
@load="pageData">
|
||||
<div v-for="o in tableData" class="list-card" @click="openReg(o)">
|
||||
<van-list :finished="finished" :finished-text="tableData.length>0?'没有更多了':''"
|
||||
@load="pageData"
|
||||
v-model="loading">
|
||||
<div @click="openReg(o)" class="list-card" v-for="o in tableData">
|
||||
|
||||
<div class="activity_card">
|
||||
<van-image
|
||||
fit="cover"
|
||||
width="100%"
|
||||
height="200"
|
||||
:src="FILE_DOMAIN + '/fileStreamPreview?id=' + o.cover"
|
||||
fit="cover"
|
||||
height="200"
|
||||
width="100%"
|
||||
></van-image>
|
||||
<div class="activity_content">
|
||||
<div class="activity_name van-ellipsis">
|
||||
<van-icon name="fire" color="red"></van-icon>
|
||||
<van-icon color="red" name="fire"></van-icon>
|
||||
<span style="margin-left: 10px;">{{o.name}}</span>
|
||||
</div>
|
||||
<div class="activity_bottom">
|
||||
@@ -85,20 +86,20 @@ layout("/mobile/platform.html"){
|
||||
</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<span v-if="moment(o.applyEndTime).valueOf() > moment().valueOf() && moment().valueOf() > moment(o.applyStartTime).valueOf()"
|
||||
style="color: forestgreen">
|
||||
<span style="color: forestgreen"
|
||||
v-if="moment(o.applyEndTime).valueOf() > moment().valueOf() && moment().valueOf() > moment(o.applyStartTime).valueOf()">
|
||||
报名中
|
||||
</span>
|
||||
<span v-else-if="moment(o.applyEndTime).valueOf() < moment().valueOf() && moment().valueOf() < moment(o.startTime).valueOf()"
|
||||
style="color: #ee1919">
|
||||
<span style="color: #ee1919"
|
||||
v-else-if="moment(o.applyEndTime).valueOf() < moment().valueOf() && moment().valueOf() < moment(o.startTime).valueOf()">
|
||||
报名结束
|
||||
</span>
|
||||
<span v-else-if="moment(o.startTime).valueOf() < moment().valueOf() && moment().valueOf() < moment(o.endTime).valueOf()"
|
||||
style="color: forestgreen">
|
||||
<span style="color: forestgreen"
|
||||
v-else-if="moment(o.startTime).valueOf() < moment().valueOf() && moment().valueOf() < moment(o.endTime).valueOf()">
|
||||
活动进行中
|
||||
</span>
|
||||
<span v-else-if="moment().valueOf() > moment(o.endTime).valueOf()"
|
||||
style="color: #ee1919">
|
||||
<span style="color: #ee1919"
|
||||
v-else-if="moment().valueOf() > moment(o.endTime).valueOf()">
|
||||
活动结束
|
||||
</span>
|
||||
</div>
|
||||
@@ -109,14 +110,18 @@ layout("/mobile/platform.html"){
|
||||
</van-list>
|
||||
</div>
|
||||
|
||||
<van-empty v-if="mLoading==false&&tableData.length==0" class="custom-image" image="/none.svg"
|
||||
description="暂无数据">
|
||||
<van-empty class="custom-image" description="暂无数据" image="/none.svg"
|
||||
v-if="mLoading==false&&tableData.length==0">
|
||||
</van-empty>
|
||||
|
||||
<div>
|
||||
<van-tabbar v-model="tabBarIndex" :active-color="themeColor">
|
||||
<van-tabbar-item icon="home-o" url="/mobile/activity/unionActivity">全部活动</van-tabbar-item>
|
||||
<van-tabbar-item icon="friends-o" url="/mobile/activity/myActivity">我的活动</van-tabbar-item>
|
||||
<van-tabbar :active-color="themeColor" v-model="tabBarIndex">
|
||||
<van-tabbar-item @click="location.replace('/mobile/activity/unionActivity')" icon="home-o">
|
||||
全部活动
|
||||
</van-tabbar-item>
|
||||
<van-tabbar-item @click="location.replace('/mobile/activity/myActivity')" icon="friends-o">
|
||||
我的活动
|
||||
</van-tabbar-item>
|
||||
</van-tabbar>
|
||||
</div>
|
||||
|
||||
@@ -161,9 +166,9 @@ layout("/mobile/platform.html"){
|
||||
openReg(o) {
|
||||
// window.location.href = '/mobile/activity/unionActivity/goReg?id=' + o.id + '&signUpMethod=1'
|
||||
if (o.projectTypeCode === '50004') {
|
||||
window.location.href = '/mobile/activity/myActivity/goMyProject?id=' + o.id
|
||||
location.replace('/mobile/activity/myActivity/goMyProject?id=' + o.id)
|
||||
} else {
|
||||
window.location.href = '/mobile/activity/myActivity/goSign?id=' + o.id
|
||||
location.replace('/mobile/activity/myActivity/goSign?id=' + o.id)
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -174,4 +179,4 @@ layout("/mobile/platform.html"){
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
#-->
|
||||
|
||||
@@ -9,22 +9,43 @@ layout("/mobile/platform.html"){
|
||||
height: 200px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.remark-content{
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
height: calc(100vh - 46px - 44px);
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.remark-content *{
|
||||
max-width: 100%!important;
|
||||
}
|
||||
|
||||
.joinPopup {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #f6f7f9;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<van-nav-bar title="签到" left-arrow placeholder fixed @click-left="history.back()"></van-nav-bar>
|
||||
<van-nav-bar title="签到" left-arrow placeholder fixed @click-left="location.replace('/mobile/activity/unionActivity')"></van-nav-bar>
|
||||
|
||||
<!--#include("/mobile/activity/unionActivity/common/activityInfo.html"){}#-->
|
||||
|
||||
<div style="margin: 20px 20px 10px 20px" v-if="o.needSign">
|
||||
<van-button
|
||||
:disabled="moment().valueOf() > moment(o.endTime).valueOf() || moment().valueOf() < moment(o.startTime).valueOf() || isSign"
|
||||
:disabled="isSign"
|
||||
@click="doSign()" style="border-radius: 10px" block type="info"
|
||||
:color="themeColor">
|
||||
{{isSign?'签到成功':'立即签到'}}
|
||||
</van-button>
|
||||
</div>
|
||||
|
||||
<van-popup class="joinPopup" position="right" v-model:show="showActivityInfoPopup">
|
||||
<van-nav-bar @click-left="showActivityInfoPopup = false" fixed left-arrow placeholder title="活动内容"></van-nav-bar>
|
||||
<div class="remark-content" v-html="activityContent" @click="remarkClick"></div>
|
||||
</van-popup>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -36,15 +57,29 @@ layout("/mobile/platform.html"){
|
||||
let geolocation = null
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins, self_mixin],
|
||||
mixins: [mobileMixins, self_mixin_h5],
|
||||
data() {
|
||||
return {
|
||||
activityId: '',
|
||||
o: {},
|
||||
isSign: null
|
||||
isSign: null,
|
||||
|
||||
activityContent: '',
|
||||
showActivityInfoPopup: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
remarkClick(event){
|
||||
//如果点击的是图片
|
||||
if(event.target.tagName === 'IMG'){
|
||||
vant.ImagePreview([event.target.src])
|
||||
}
|
||||
},
|
||||
showActivityInfo(activityContent){
|
||||
this.activityContent = ''
|
||||
this.activityContent = activityContent
|
||||
this.showActivityInfoPopup = true
|
||||
},
|
||||
async getSignStatus() {
|
||||
const resp = await $.post('/mobile/activity/unionActivity/isSign', {activityId: this.activityId})
|
||||
if (resp.code === 0) {
|
||||
@@ -52,25 +87,38 @@ layout("/mobile/platform.html"){
|
||||
}
|
||||
},
|
||||
async doSign() {
|
||||
const loading1 = this.$toast.loading({
|
||||
message: '正在获取您的位置...',
|
||||
forbidClick: true,
|
||||
overlay: true,
|
||||
duration: 0
|
||||
})
|
||||
geolocation.getCurrentPosition(async (status, result) => {
|
||||
if (status !== 'complete') {
|
||||
this.$toast.fail('定位失败!')
|
||||
return
|
||||
}
|
||||
console.log(status)
|
||||
console.log(result)
|
||||
const lat = result.position.lat
|
||||
const lng = result.position.lng
|
||||
const params = {
|
||||
lat1: lat, lng1: lng, lat2: this.o.location[1], lng2: this.o.location[0]
|
||||
}
|
||||
const distance = this.getMapDistance(params)
|
||||
console.log(distance)
|
||||
console.log(this.o.rangeMeter)
|
||||
|
||||
loading1.close()
|
||||
if (!moment().isBetween(moment(this.o.signStartTime), moment(this.o.signEndTime))) {
|
||||
vant.Dialog.alert({
|
||||
title: '温馨提示',
|
||||
message: '未到签到时间<br/>签到开始时间:' + this.o.signStartTime + '<br/>签到结束时间:' + this.o.signEndTime,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if (distance > this.o.rangeMeter) {
|
||||
this.$toast('距离活动打卡点还有' + distance + '米')
|
||||
return
|
||||
}
|
||||
|
||||
const confirm = await this.$dialog.confirm({
|
||||
title: '提示',
|
||||
message: '您确认要签到吗?',
|
||||
@@ -83,23 +131,24 @@ layout("/mobile/platform.html"){
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
const resp = await $.post('/mobile/activity/unionActivity/singleSignUp', {activityId: this.activityId})
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
await this.getSignStatus()
|
||||
loading.close()
|
||||
this.$toast.success(resp.msg)
|
||||
} else {
|
||||
this.$toast.fail(resp.msg)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
},
|
||||
created() {
|
||||
async created() {
|
||||
const id = GetQueryString("id")
|
||||
if (id) {
|
||||
this.activityId = id
|
||||
this.getActivityInfo()
|
||||
this.getSignStatus()
|
||||
await this.getActivityInfo()
|
||||
await this.getSignStatus()
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -107,4 +156,4 @@ layout("/mobile/platform.html"){
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
#-->
|
||||
|
||||
@@ -9,68 +9,103 @@ layout("/mobile/platform.html"){
|
||||
/*height: 200px;*/
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.remark-content{
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
height: calc(100vh - 46px - 44px);
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.remark-content *{
|
||||
max-width: 100%!important;
|
||||
}
|
||||
|
||||
.joinPopup {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #f6f7f9;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<van-nav-bar title="个人报名" left-arrow placeholder fixed
|
||||
@click-left="history.back()"></van-nav-bar>
|
||||
<van-nav-bar @click-left="location.replace('/mobile/activity/unionActivity')" fixed left-arrow
|
||||
placeholder
|
||||
title="个人报名"></van-nav-bar>
|
||||
|
||||
<!--#include("/mobile/activity/unionActivity/common/activityInfo.html"){}#-->
|
||||
|
||||
<div style="margin: 20px 20px 10px 20px"
|
||||
v-if="moment(o.applyStartTime).valueOf() < moment().valueOf() && moment().valueOf() < moment(o.applyEndTime).valueOf()">
|
||||
<van-button v-if="!isRegister && !isRegisterFull" @click="doSave()"
|
||||
style="border-radius: 10px" block
|
||||
<van-button :color="themeColor" @click="doSave()"
|
||||
block style="border-radius: 10px"
|
||||
type="info"
|
||||
:color="themeColor">
|
||||
v-if="!isRegister && !isRegisterFull">
|
||||
立即报名
|
||||
</van-button>
|
||||
<van-button v-else-if="!isRegister && isRegisterFull" @click="doSave()"
|
||||
style="border-radius: 10px" block
|
||||
disabled
|
||||
<van-button :color="themeColor" @click="doSave()"
|
||||
block disabled
|
||||
style="border-radius: 10px"
|
||||
type="info"
|
||||
:color="themeColor">
|
||||
v-else-if="!isRegister && isRegisterFull">
|
||||
名额已满
|
||||
</van-button>
|
||||
<van-button v-else-if="isRegister && moment().valueOf() < moment(o.applyEndTime).valueOf()"
|
||||
@click="doCancel"
|
||||
style="border-radius: 10px" block type="info"
|
||||
color="red">
|
||||
<van-button @click="doCancel"
|
||||
block
|
||||
color="red" style="border-radius: 10px" type="info"
|
||||
v-else-if="isRegister && moment().valueOf() < moment(o.applyEndTime).valueOf()">
|
||||
取消报名
|
||||
</van-button>
|
||||
</div>
|
||||
|
||||
<div style="margin: 20px 20px 10px 20px"
|
||||
<!--<div style="margin: 20px 20px 10px 20px"
|
||||
v-if="isRegister && moment().valueOf() < moment(o.endTime).valueOf() && moment().valueOf() > moment(o.startTime).valueOf()">
|
||||
<van-button
|
||||
:color="themeColor"
|
||||
:disabled="moment().valueOf() > moment(o.endTime).valueOf() || moment().valueOf() < moment(o.startTime).valueOf() || isSign"
|
||||
@click="doSign()" style="border-radius: 10px" block type="info"
|
||||
:color="themeColor">
|
||||
@click="doSign()" block style="border-radius: 10px"
|
||||
type="info">
|
||||
{{isSign?'签到成功':'立即签到'}}
|
||||
</van-button>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
<van-popup class="joinPopup" position="right" v-model:show="showActivityInfoPopup">
|
||||
<van-nav-bar @click-left="showActivityInfoPopup = false" fixed left-arrow placeholder title="活动内容"></van-nav-bar>
|
||||
<div class="remark-content" v-html="activityContent" @click="remarkClick"></div>
|
||||
</van-popup>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--#include("/mobile/activity/unionActivity/common/initMap.js"){}#-->
|
||||
</script>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins, self_mixin],
|
||||
mixins: [mobileMixins, self_mixin_h5],
|
||||
data() {
|
||||
return {
|
||||
activityId: '',
|
||||
o: {},
|
||||
tagCloseable: true,
|
||||
isRegister: false,
|
||||
isSign: false
|
||||
isSign: false,
|
||||
|
||||
activityContent: '',
|
||||
showActivityInfoPopup: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
remarkClick(event){
|
||||
//如果点击的是图片
|
||||
if(event.target.tagName === 'IMG'){
|
||||
vant.ImagePreview([event.target.src])
|
||||
}
|
||||
},
|
||||
showActivityInfo(activityContent){
|
||||
console.log(activityContent)
|
||||
this.activityContent = ''
|
||||
this.activityContent = activityContent
|
||||
this.showActivityInfoPopup = true
|
||||
},
|
||||
async isRegisterForMe() {
|
||||
const resp = await $.get('/mobile/activity/unionActivity/isRegisterForMe', {activityId: this.activityId})
|
||||
if (resp.code === 0) {
|
||||
@@ -97,13 +132,19 @@ layout("/mobile/platform.html"){
|
||||
const resp = await $.post('/mobile/activity/unionActivity/doSingleRegister', {activityId: this.activityId})
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.$toast.success(resp.msg)
|
||||
setTimeout(() => {
|
||||
window.history.back()
|
||||
}, 1000)
|
||||
|
||||
vant.Dialog.alert({
|
||||
title: '温馨提示',
|
||||
message: '您已报名成功,请按时参加活动哦',
|
||||
}).then(() => {
|
||||
window.location.reload()
|
||||
}).catch(() => {
|
||||
window.location.reload()
|
||||
})
|
||||
} else {
|
||||
this.$toast.fail(resp.msg)
|
||||
vant.Dialog.alert({
|
||||
title: '温馨提示',
|
||||
message: resp.msg,
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -112,22 +153,31 @@ layout("/mobile/platform.html"){
|
||||
title: '提示',
|
||||
message: '您确认要取消报名吗?',
|
||||
})
|
||||
const loading = this.$toast.loading({
|
||||
message: '取消中...',
|
||||
forbidClick: true,
|
||||
overlay: true,
|
||||
duration: 0
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
const loading = this.$toast.loading({
|
||||
message: '取消中...',
|
||||
forbidClick: true,
|
||||
overlay: true,
|
||||
duration: 0
|
||||
})
|
||||
const resp = await $.post('/mobile/activity/unionActivity/doSingleCancelRegister', {activityId: this.activityId})
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.$toast.success(resp.msg)
|
||||
setTimeout(() => {
|
||||
window.history.back()
|
||||
}, 1000)
|
||||
vant.Dialog.alert({
|
||||
title: '温馨提示',
|
||||
message: resp.msg,
|
||||
}).then(() => {
|
||||
window.location.reload()
|
||||
}).catch(() => {})
|
||||
// setTimeout(() => {
|
||||
// this.$toast.success(resp.msg)
|
||||
// pjaxReplace('/mobile/activity/unionActivity')
|
||||
// }, 1000)
|
||||
} else {
|
||||
this.$toast.fail(resp.msg)
|
||||
vant.Dialog.alert({
|
||||
title: '温馨提示',
|
||||
message: resp.msg,
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -168,4 +218,4 @@ layout("/mobile/platform.html"){
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
#-->
|
||||
|
||||
@@ -39,58 +39,69 @@ layout("/mobile/platform.html"){
|
||||
.van-search__action {
|
||||
background-color: #edf0ff
|
||||
}
|
||||
|
||||
.remark-content{
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
height: calc(100vh - 46px - 44px);
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.remark-content *{
|
||||
max-width: 100%!important;
|
||||
}
|
||||
|
||||
.joinPopup {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #f6f7f9;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<van-nav-bar :title="title" left-arrow placeholder fixed
|
||||
@click-left="history.back()"></van-nav-bar>
|
||||
<van-nav-bar :title="title" @click-left="location.replace('/mobile/activity/unionActivity')" fixed left-arrow
|
||||
placeholder></van-nav-bar>
|
||||
|
||||
<!--#include("/mobile/activity/unionActivity/common/activityInfo.html"){}#-->
|
||||
|
||||
<van-cell-group inset class="mt5">
|
||||
<van-cell title="报名人员" class="regCell">
|
||||
<van-cell-group class="mt5" inset>
|
||||
<van-cell class="regCell" title="报名人员">
|
||||
<template #label>
|
||||
<div>
|
||||
<span v-if="o.userNumberLimit===1">
|
||||
本活动限制总报名人数:({{o.totalUserNumberLimit}})人
|
||||
</span>
|
||||
<span v-if="o.userNumberLimit===1">本活动限制总报名人数:({{o.totalUserNumberLimit}})人</span>
|
||||
<span v-else-if="o.userNumberLimit===2">
|
||||
当前分工会报名限额 <span style="color: orange">({{o.limitUnion.limitNum}})人</span>
|
||||
当前基层工会报名限额
|
||||
<span style="color: orange">({{o.limitUnion.limitNum}})人</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="mt5" v-loading="tagCloseable">
|
||||
<div v-if="registerList && registerList.length>0">
|
||||
<template v-for="item in registerList">
|
||||
<van-tag type="primary" :closeable="tagCloseable" size="medium"
|
||||
:color="themeColor"
|
||||
@close="removeRegUser(item)">
|
||||
<van-tag :closeable="tagCloseable" :color="themeColor" @close="removeRegUser(item)" size="medium" type="primary">
|
||||
{{item.userName}}
|
||||
</van-tag>
|
||||
</template>
|
||||
</div>
|
||||
<div v-else>
|
||||
<div style="text-align: center;margin-top: 20px;">
|
||||
无报名人员
|
||||
</div>
|
||||
<div style="text-align: center; margin-top: 20px">无报名人员</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt5" style="text-align: right"
|
||||
v-if="moment(o.applyStartTime).valueOf() < moment().valueOf() && moment().valueOf() < moment(o.applyEndTime).valueOf()">
|
||||
<van-button v-if="tagCloseable" size="mini" type="info"
|
||||
@click="openUserActionSheet" :color="themeColor">选择报名人员
|
||||
</van-button>
|
||||
<div
|
||||
class="mt5"
|
||||
style="text-align: right"
|
||||
v-if="moment(o.applyStartTime).valueOf() < moment().valueOf() && moment().valueOf() < moment(o.applyEndTime).valueOf()"
|
||||
>
|
||||
<van-button :color="themeColor" @click="openUserActionSheet" size="mini" type="info" v-if="tagCloseable">选择报名人员</van-button>
|
||||
</div>
|
||||
</template>
|
||||
</van-cell>
|
||||
</van-cell-group>
|
||||
|
||||
<van-action-sheet v-model="userActionSheet" title="选择报名人员" class="userActionPopup">
|
||||
<van-search v-model="searchKey" @search="onSearchUser" show-action
|
||||
placeholder="请输入姓名搜索">
|
||||
<van-action-sheet class="userActionPopup" title="选择报名人员" v-model="userActionSheet">
|
||||
<van-search @search="onSearchUser" placeholder="请输入姓名搜索" show-action v-model="searchKey">
|
||||
<template #action>
|
||||
<div @click="onSearchUser(searchKey)">搜索</div>
|
||||
</template>
|
||||
|
||||
</van-search>
|
||||
|
||||
<!-- <div class="van-hairline--bottom">-->
|
||||
@@ -100,41 +111,36 @@ layout("/mobile/platform.html"){
|
||||
<van-loading size="24px" vertical>搜索中...</van-loading>
|
||||
</template>
|
||||
|
||||
<div class="van-action-sheet__content mt5"
|
||||
v-else-if="searchUserList && searchUserList.length>0">
|
||||
|
||||
<div class="van-action-sheet__content mt5" v-else-if="searchUserList && searchUserList.length>0">
|
||||
<template>
|
||||
<template v-for="item in searchUserList"
|
||||
v-if="!registerList.map(v=>v.id).includes(item.id)">
|
||||
<button @click="searchUserAdd(item)"
|
||||
class="van-action-sheet__item van-hairline--bottom">
|
||||
<template v-for="item in searchUserList" v-if="!registerList.map(v=>v.id).includes(item.id)">
|
||||
<button @click="searchUserAdd(item)" class="van-action-sheet__item van-hairline--bottom">
|
||||
<span class="van-action-sheet__name">{{item.userName}}({{item.loginName}})</span>
|
||||
</button>
|
||||
</template>
|
||||
<!--<van-empty description="没有更多了" style="position:absolute;height: 70%"
|
||||
<!--<van-empty description="没有更多了"
|
||||
v-else></van-empty>-->
|
||||
</template>
|
||||
|
||||
</div>
|
||||
<van-empty description="暂无数据" style="position:absolute;height: 70%"
|
||||
v-else-if="searchUserList.length===0"></van-empty>
|
||||
<van-empty description="暂无数据" v-else-if="searchUserList.length===0"></van-empty>
|
||||
</van-action-sheet>
|
||||
|
||||
|
||||
<div style="margin: 20px 20px 10px 20px"
|
||||
v-if="moment(o.applyStartTime).valueOf() < moment().valueOf() && moment().valueOf() < moment(o.applyEndTime).valueOf()">
|
||||
<van-button v-if="tagCloseable" @click="doSave()" style="border-radius: 10px" block
|
||||
type="info"
|
||||
:color="themeColor">
|
||||
提 交
|
||||
</van-button>
|
||||
<van-button v-else="!tagCloseable" @click="tagCloseable = true" style="border-radius: 10px"
|
||||
block type="info"
|
||||
:color="themeColor">
|
||||
修 改
|
||||
</van-button>
|
||||
<div
|
||||
style="margin: 20px 20px 10px 20px"
|
||||
v-if="moment(o.applyStartTime).valueOf() < moment().valueOf() && moment().valueOf() < moment(o.applyEndTime).valueOf()"
|
||||
>
|
||||
<van-button :color="themeColor" @click="doSave()" block style="border-radius: 10px" type="info" v-if="tagCloseable">提 交</van-button>
|
||||
<template v-else="!tagCloseable">
|
||||
<van-button :color="themeColor" @click="tagCloseable = true" block style="border-radius: 10px" type="info">修 改</van-button>
|
||||
<van-button @click="doCancel" block color="red" style="border-radius: 10px; margin-top: 10px" type="info">取消报名</van-button>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
<van-popup class="joinPopup" position="right" v-model:show="showActivityInfoPopup">
|
||||
<van-nav-bar @click-left="showActivityInfoPopup = false" fixed left-arrow placeholder title="活动内容"></van-nav-bar>
|
||||
<div class="remark-content" v-html="activityContent" @click="remarkClick"></div>
|
||||
</van-popup>
|
||||
|
||||
<!-- <div style="margin: 20px 20px 10px 20px" v-if="tagCloseable">-->
|
||||
<!-- <van-button-->
|
||||
<!-- :disabled="moment().valueOf() > moment(o.endTime).valueOf() || moment().valueOf() < moment(o.startTime).valueOf()"-->
|
||||
@@ -150,30 +156,69 @@ layout("/mobile/platform.html"){
|
||||
<!--#include("/mobile/activity/unionActivity/common/initMap.js"){}#-->
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins, self_mixin],
|
||||
el: "#app",
|
||||
mixins: [mobileMixins, self_mixin_h5],
|
||||
data() {
|
||||
return {
|
||||
title: "",
|
||||
userId: "${@shiro.getPrincipalProperty('id')}",
|
||||
userName: "${@shiro.getPrincipalProperty('username')}",
|
||||
activityId: '',
|
||||
activityId: "",
|
||||
o: {},
|
||||
registerList: [],
|
||||
addRegisterList: [],
|
||||
userActionSheet: false,
|
||||
searchKey: '',
|
||||
searchKey: "",
|
||||
searchUserList: [],
|
||||
tagCloseable: true,
|
||||
searchLoading: false
|
||||
searchLoading: false,
|
||||
|
||||
activityContent: '',
|
||||
showActivityInfoPopup: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
remarkClick(event){
|
||||
//如果点击的是图片
|
||||
if(event.target.tagName === 'IMG'){
|
||||
vant.ImagePreview([event.target.src])
|
||||
}
|
||||
},
|
||||
showActivityInfo(activityContent){
|
||||
console.log(activityContent)
|
||||
this.activityContent = ''
|
||||
this.activityContent = activityContent
|
||||
this.showActivityInfoPopup = true
|
||||
},
|
||||
async doCancel() {
|
||||
const confirm = await this.$dialog.confirm({
|
||||
title: "提示",
|
||||
message: "您确认要取消报名吗?"
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const loading = this.$toast.loading({
|
||||
message: "取消中...",
|
||||
forbidClick: true,
|
||||
overlay: true,
|
||||
duration: 0
|
||||
})
|
||||
const resp = await $.post("/mobile/activity/unionActivity/doSingleCancelRegister", { activityId: this.activityId })
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
setTimeout(() => {
|
||||
this.$toast.success(resp.msg)
|
||||
window.location.reload()
|
||||
}, 1000)
|
||||
} else {
|
||||
this.$toast.fail(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async getRegisterUser() {
|
||||
const resp = await $.get('/mobile/activity/myActivity/selectRegisterList', {activityId: this.activityId})
|
||||
const resp = await $.get("/mobile/activity/myActivity/selectRegisterList", { activityId: this.activityId })
|
||||
if (resp.code === 0) {
|
||||
if (this.o.signUpMethod === 3) {
|
||||
this.registerList = resp.data.filter(v => v.applyUserId === this.userId)
|
||||
this.registerList = resp.data.filter((v) => v.applyUserId === this.userId)
|
||||
} else {
|
||||
this.registerList = resp.data
|
||||
}
|
||||
@@ -184,9 +229,10 @@ layout("/mobile/platform.html"){
|
||||
}
|
||||
},
|
||||
openUserActionSheet() {
|
||||
this.searchKey = ''
|
||||
this.searchKey = ""
|
||||
this.searchUserList = []
|
||||
this.userActionSheet = true
|
||||
this.onSearchUser("1")
|
||||
},
|
||||
async onSearchUser(val) {
|
||||
if (!val) {
|
||||
@@ -194,21 +240,21 @@ layout("/mobile/platform.html"){
|
||||
return
|
||||
}
|
||||
this.searchLoading = true
|
||||
const resp = await $.get('/mobile/activity/unionActivity/searchNoRegisterUser', {
|
||||
const resp = await $.get("/mobile/activity/unionActivity/searchNoRegisterUser", {
|
||||
activityId: this.activityId,
|
||||
searchKey: val
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.searchLoading = false
|
||||
this.searchUserList = resp.data.list
|
||||
|
||||
} else {
|
||||
this.$toast.fail(resp.msg)
|
||||
}
|
||||
},
|
||||
searchUserAdd(item) {
|
||||
const {id, userName} = item
|
||||
this.registerList.push({id, userName})
|
||||
const { id, userName } = item
|
||||
this.registerList.push({ id, userName })
|
||||
this.$toast.success("添加成功")
|
||||
},
|
||||
async removeRegUser(item) {
|
||||
if (this.userId === item.id) {
|
||||
@@ -216,46 +262,42 @@ layout("/mobile/platform.html"){
|
||||
return
|
||||
}
|
||||
const confirm = await this.$dialog.confirm({
|
||||
title: '提示',
|
||||
message: '您确认要移除吗?',
|
||||
title: "提示",
|
||||
message: "您确认要移除吗?"
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
const index = this.registerList.findIndex(v => v.id === item.id)
|
||||
if (confirm === "confirm") {
|
||||
const index = this.registerList.findIndex((v) => v.id === item.id)
|
||||
this.registerList.splice(index, 1)
|
||||
}
|
||||
},
|
||||
//保存
|
||||
async doSave() {
|
||||
if (this.registerList.length === 0) {
|
||||
this.$toast('请添加报名人员后再提交!')
|
||||
this.$toast("请添加报名人员后再提交!")
|
||||
return
|
||||
}
|
||||
if (this.o.signUpMethod === 3) {
|
||||
if (this.registerList.length !== this.o.teamNum) {
|
||||
vant.Dialog.alert({
|
||||
title: '温馨提示',
|
||||
message: '此活动是双人报名模式您需要报名' + this.o.teamNum + '人!',
|
||||
}).then(() => {
|
||||
|
||||
});
|
||||
title: "温馨提示",
|
||||
message: "此活动是双人报名模式您需要报名" + this.o.teamNum + "人!"
|
||||
}).then(() => {})
|
||||
return
|
||||
}
|
||||
if (!this.registerList.map(v => v.id).includes(this.userId)) {
|
||||
if (!this.registerList.map((v) => v.id).includes(this.userId)) {
|
||||
vant.Dialog.alert({
|
||||
title: '温馨提示',
|
||||
message: '此活动是组队模式请您找' + this.o.teamNum + '朋友一起报名!',
|
||||
}).then(() => {
|
||||
|
||||
});
|
||||
title: "温馨提示",
|
||||
message: "此活动是组队模式请您找" + this.o.teamNum + "朋友一起报名!"
|
||||
}).then(() => {})
|
||||
return
|
||||
}
|
||||
// await this.getRegisterUser()
|
||||
const resp = await $.get('/mobile/activity/myActivity/selectRegisterList', {activityId: this.activityId})
|
||||
const resp = await $.get("/mobile/activity/myActivity/selectRegisterList", { activityId: this.activityId })
|
||||
this.addRegisterList = resp.data
|
||||
let arr = []
|
||||
if (this.addRegisterList && this.addRegisterList.length > 0) {
|
||||
this.addRegisterList.forEach(v => {
|
||||
this.registerList.forEach(r => {
|
||||
this.addRegisterList.forEach((v) => {
|
||||
this.registerList.forEach((r) => {
|
||||
if (v.id === r.id && v.applyUserId !== this.userId) {
|
||||
arr.push(r.userName)
|
||||
}
|
||||
@@ -265,11 +307,9 @@ layout("/mobile/platform.html"){
|
||||
|
||||
if (arr && arr.length > 0) {
|
||||
vant.Dialog.alert({
|
||||
title: '温馨提示',
|
||||
message: '【' + arr.toString() + '】已成功报名您无需再报名!',
|
||||
}).then(() => {
|
||||
|
||||
});
|
||||
title: "温馨提示",
|
||||
message: "【" + arr.toString() + "】已成功报名您无需再报名!"
|
||||
}).then(() => {})
|
||||
return
|
||||
}
|
||||
|
||||
@@ -282,35 +322,40 @@ layout("/mobile/platform.html"){
|
||||
});
|
||||
return
|
||||
}*/
|
||||
|
||||
}
|
||||
let message = ''
|
||||
let message = ""
|
||||
if (this.o.needSign) {
|
||||
message = '此活动开启了签到,需要您活动当天前往签到点位核实活动报名人员后进行签到!'
|
||||
message = "此活动开启了签到,需要您活动当天前往签到点位核实活动报名人员后进行签到!"
|
||||
}
|
||||
const confirm = await this.$dialog.confirm({
|
||||
title: '提示',
|
||||
message: message + '您确认要报名吗?',
|
||||
title: "提示",
|
||||
message: message + "您确认要报名吗?"
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
if (confirm === "confirm") {
|
||||
const loading = this.$toast.loading({
|
||||
message: '报名中...',
|
||||
message: "报名中...",
|
||||
forbidClick: true,
|
||||
overlay: true,
|
||||
duration: 0
|
||||
})
|
||||
const params = {
|
||||
activityId: this.activityId,
|
||||
personIds: JSON.stringify(this.registerList.map(v => v.id))
|
||||
personIds: JSON.stringify(this.registerList.map((v) => v.id))
|
||||
}
|
||||
const resp = await $.post('/mobile/activity/unionActivity/doSaveUnionRegister', params)
|
||||
const resp = await $.post("/mobile/activity/unionActivity/doSaveUnionRegister", params)
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
await this.getRegisterUser()
|
||||
await this.getHasRegUserNum()
|
||||
this.$toast.success(resp.msg)
|
||||
vant.Dialog.alert({
|
||||
title: '温馨提示',
|
||||
message: resp.msg,
|
||||
})
|
||||
} else {
|
||||
this.$toast.fail(resp.msg)
|
||||
vant.Dialog.alert({
|
||||
title: '温馨提示',
|
||||
message: resp.msg,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -322,14 +367,12 @@ layout("/mobile/platform.html"){
|
||||
await this.getActivityInfo()
|
||||
await this.getRegisterUser()
|
||||
if (this.o.signUpMethod === 3 && this.registerList.length === 0) {
|
||||
this.registerList.push({id: this.userId, userName: this.userName})
|
||||
this.registerList.push({ id: this.userId, userName: this.userName })
|
||||
}
|
||||
this.title = (this.o.signUpMethod === 2 ? '分工会报名' : '组队报名')
|
||||
this.title = this.o.signUpMethod === 2 ? "基层工会报名" : "组队报名"
|
||||
if (moment(this.o.applyStartTime).valueOf() < moment().valueOf() && moment().valueOf() > moment(this.o.applyEndTime).valueOf()) {
|
||||
this.$toast.fail("不在活动范围内")
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -337,4 +380,4 @@ layout("/mobile/platform.html"){
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
#-->
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,12 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40003
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutApplyUser.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -12,7 +12,7 @@
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" class="platform" v-cloak>
|
||||
<div class="platform" id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
@@ -21,11 +21,11 @@
|
||||
<div class="search-item-label">活动时间</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
placeholder="选择年">
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
@@ -33,86 +33,100 @@
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.name" placeholder="请输入活动名称"
|
||||
clearable></el-input>
|
||||
<el-input clearable placeholder="请输入活动名称"
|
||||
v-model="pageForm.name"></el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item" v-if="type==1">
|
||||
<div class="search-item-label">工会名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.unionId" placeholder="请选择工会" filterable
|
||||
clearable
|
||||
style="width: 100%">
|
||||
<el-select clearable filterable placeholder="请选择工会"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.unionId">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
:value="item.id"
|
||||
v-for="item in unionList">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索
|
||||
<el-button @click="pageData" icon="el-icon-search" type="primary">搜索
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="活动列表" :app="this">
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="活动列表">
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize"
|
||||
class="vi-table">
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
class="vi-table" row-key="id" style="width: 100%;margin-bottom: 20px"
|
||||
v-loading="tableLoading">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
:sortable="column.sortable">
|
||||
v-for="column in tableColumns">
|
||||
|
||||
<template v-if="column.prop=='time'" scope="{row}">
|
||||
<span>
|
||||
{{moment(row.startTime).format('YYYY-MM-DD')}} - {{moment(row.endTime).format('YYYY-MM-DD')}}
|
||||
</span>
|
||||
<template scope="{row}" v-if="column.prop=='time'">
|
||||
<span v-if="row.startTime && row.endTime">
|
||||
{{ moment(row.startTime).format('YYYY-MM-DD')}} - {{ moment(row.endTime).format('YYYY-MM-DD')}}
|
||||
</span>
|
||||
<span v-else>{{ '未填写' }}</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='time2'">
|
||||
{{row.applyStartTime}}-{{row.applyEndTime}}
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='projectTypeName'" scope="{row}">
|
||||
<template scope="{row}" v-else-if="column.prop=='projectTypeName'">
|
||||
{{row.projectTypeName}}({{row.projectTypeCode}})
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='tussueName'" scope="{row}">
|
||||
<template scope="{row}" v-else-if="column.prop=='isDisabled'">
|
||||
<el-switch
|
||||
:active-value="true"
|
||||
:inactive-value="false"
|
||||
@change="(val)=>{activityStatusChange(row.id,row.isDisabled == 1?1:0)}"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949"
|
||||
v-model="row.isDisabled">
|
||||
</el-switch>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='tussueName'">
|
||||
<span v-if="row.type==40002">{{row.unionname?row.unionname:'暂无'}}</span>
|
||||
<span v-if="row.type==40003">{{row.clubName?row.clubName:'暂无'}}</span>
|
||||
<span v-if="row.type==40001">校工会</span>
|
||||
</template>
|
||||
<template v-else-if="column.prop=='state'" scope="{row}">
|
||||
{{row.state===1?'未审核':row.state===2?'审核不通过':'审核通过'}}
|
||||
<template scope="{row}" v-else-if="column.prop=='state'">
|
||||
<span v-if="row.state === 0" style="color: #fd835a">待提交</span>
|
||||
<span v-else-if="row.state === 1" style="color: #fd835a">待校工会审核</span>
|
||||
<span v-else-if="row.state === 2" style="color: #bc2a25">校工会审核拒绝</span>
|
||||
<span v-else-if="row.state === 3" style="color: #0e9558">审核通过</span>
|
||||
</template>
|
||||
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center"
|
||||
label="操作" width="150px">
|
||||
<el-table-column align="center" header-align="center" label="操作"
|
||||
prop="userOnline" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini" :loading="row.loading">
|
||||
<el-button :loading="row.loading" size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
@@ -122,6 +136,7 @@
|
||||
</el-dropdown-item>
|
||||
|
||||
<el-dropdown-item :command="{type:'edit',row}"
|
||||
v-if="row.state===0 || ${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}"
|
||||
:disabled="row.projectTypeCode==50004">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
@@ -133,7 +148,10 @@
|
||||
通知
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'openCode',row}">
|
||||
二维码
|
||||
报名二维码
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'openSignCode',row}">
|
||||
签到二维码
|
||||
</el-dropdown-item>
|
||||
<!-- <el-dropdown-item :command="{type:'export',row}">
|
||||
导出人员名单
|
||||
@@ -155,9 +173,9 @@
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<send-msg ref="sendMsg" :url="url"></send-msg>
|
||||
<send-msg :mobile_url="mobileUrl" :url="url" ref="sendMsg"></send-msg>
|
||||
|
||||
<open-qr-code ref="openQRCode" :url="url"></open-qr-code>
|
||||
<open-qr-code :url="url" ref="openQRCode"></open-qr-code>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -172,6 +190,7 @@
|
||||
userTabLoading: false,
|
||||
dialogVisible: false,
|
||||
url: "",
|
||||
mobileUrl: "",
|
||||
userData: [],
|
||||
userList: [],
|
||||
unionList: [],
|
||||
@@ -190,6 +209,7 @@
|
||||
{prop: 'time', label: '活动日期'},
|
||||
{prop: 'time2', label: '报名日期', width: '300'},
|
||||
{prop: 'applyTime', label: '创建时间', sortable: true},
|
||||
{prop: 'isDisabled', label: '是否开启'},
|
||||
{prop: 'state', label: '审核状态', sortable: true},
|
||||
|
||||
],
|
||||
@@ -214,10 +234,23 @@
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
|
||||
'tissue-info': httpVueLoader('/components/activity/school/tissueInfo.vue'),
|
||||
'send-msg': httpVueLoader('/components/plugins/SendMsgByGroupId.vue'),
|
||||
'send-msg': httpVueLoader('/components/plugins/SendMsgByGroupId.vue?v=' + new Date().getTime()),
|
||||
'open-qr-code': httpVueLoader('/components/plugins/OpenQRCode.vue'),
|
||||
},
|
||||
methods: {
|
||||
async activityStatusChange(id, isDisabled) {
|
||||
|
||||
const resp = await $.get('/platform/activity/info/mange/activityStatusChange', {
|
||||
id: id,
|
||||
isDisabled: isDisabled
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.pageData();
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, row} = command
|
||||
if (type === 'view') {
|
||||
@@ -230,6 +263,8 @@
|
||||
this.sendMsg(row)
|
||||
} else if (type === 'openCode') {
|
||||
this.openCode(row)
|
||||
} else if (type === 'openSignCode') {
|
||||
this.openSignCode(row)
|
||||
} else if (type === 'export') {
|
||||
location.href = "/platform/activity/info/mange/export?id=" + row.id
|
||||
}
|
||||
@@ -237,9 +272,24 @@
|
||||
openCode(row) {
|
||||
this.$refs.openQRCode.openCode("/mobile/activity/unionActivity/goReg?id=" + row.id + "&signUpMethod=" + row.signUpMethod)
|
||||
},
|
||||
openSignCode(row) {
|
||||
this.$refs.openQRCode.openCode("/mobile/activity/myActivity/goSign?id=" + row.id)
|
||||
},
|
||||
sendMsg(row) {
|
||||
this.url = `<a href="` + (APP_DOMAIN + "/mobile/activity/unionActivity/goReg?id=" + row.id + "&signUpMethod=" + row.signUpMethod) + `">点击参与</a>`
|
||||
this.$refs.sendMsg.openDialog(row.groupId)
|
||||
if (row.signUpMethod === 1 || row.signUpMethod === 3) {
|
||||
this.mobileUrl = "/mobile/activity/unionActivity/goReg?id=" + row.id + "&signUpMethod=" + row.signUpMethod
|
||||
} else if (row.signUpMethod === 2) {
|
||||
if (type === 40001) {
|
||||
this.url = "/platform/activity/applyUser/school"
|
||||
} else if (type === 40002) {
|
||||
this.url = "/platform/activity/applyUser/union"
|
||||
} else {
|
||||
this.url = "/platform/activity/applyUser/club"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.$refs.sendMsg.openDialog(row.groupId, "文化活动")
|
||||
},
|
||||
async remoteMethod(query) {
|
||||
if (query) {
|
||||
|
||||
@@ -0,0 +1,438 @@
|
||||
<div class="platform" id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动时间</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年"
|
||||
style="width: 100%"
|
||||
type="year"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
></el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-input clearable placeholder="请输入活动名称" v-model="pageForm.name"></el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button @click="pageData" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="活动列表"></table-tool>
|
||||
|
||||
<el-table
|
||||
:data="tableData"
|
||||
:size="tableSize"
|
||||
@sort-change="pageOrder"
|
||||
class="vi-table"
|
||||
row-key="id"
|
||||
style="width: 100%; margin-bottom: 20px"
|
||||
v-loading="tableLoading"
|
||||
>
|
||||
<el-table-column
|
||||
:index="indexMethod"
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"
|
||||
></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:width="column.width"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='time'">
|
||||
<span>{{moment(row.startTime).format('YYYY-MM-DD')}} - {{moment(row.endTime).format('YYYY-MM-DD')}}</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='tussueName'">
|
||||
<span v-if="row.type==40002">{{row.unionname?row.unionname:'暂无'}}</span>
|
||||
<span v-if="row.type==40003">{{row.clubName?row.clubName:'暂无'}}</span>
|
||||
<span v-if="row.type==40001">校工会</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='totalApplyNum'">
|
||||
<span v-if="row.userNumberLimit===1">(<span style="color: red">余{{ Number(row.totalUserNumberLimit) - Number(row.totalApplyNum) }}</span>/{{row.totalUserNumberLimit}}人)</span>
|
||||
<span v-else-if="row.userNumberLimit===2">{{ row.totalApplyNum }}人</span>
|
||||
<span v-else>(<span style="color: #fd835a">无名额限制</span>/已报 <span style="color: red">{{row.totalApplyNum}}</span>人)</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='signUpMethod'">
|
||||
<span v-if="row.signUpMethod===1">个人报名</span>
|
||||
<span v-else-if="row.signUpMethod===2">分工会报名</span>
|
||||
<span v-else-if="row.signUpMethod===3"
|
||||
style="color: #fd835a">组队报名<span style="color: black">(每组限报 <span style="color: red">{{row.teamNum}}</span> 人)</span></span>
|
||||
<span v-else-if="!row.signUpMethod">无需报名</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='countUser'">
|
||||
<el-tag type="success" v-if="row.countUser>0">已报名({{row.countUser}})</el-tag>
|
||||
<el-tag type="danger" v-else>未报名</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="操作" prop="userOnline" width="250px">
|
||||
<template scope="{row}">
|
||||
<el-button :loading="row.loading" @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<template
|
||||
v-if="moment(row.applyStartTime).valueOf()<moment().valueOf()&&moment(row.applyEndTime).valueOf()>moment().valueOf()"
|
||||
>
|
||||
<el-button :loading="row.loading" @click="openAudit(row)" size="mini" type="primary" v-if="row.signUpMethod === 2">
|
||||
报名
|
||||
</el-button>
|
||||
<el-button :loading="row.loading" @click="openAudit(row)" size="mini" type="primary" v-if="row.signUpMethod === 3">
|
||||
{{ row.countUser > 0 ? '修改' : '报名' }}
|
||||
</el-button>
|
||||
<el-button
|
||||
:loading="row.loading"
|
||||
@click="doAdd(row)"
|
||||
size="mini"
|
||||
type="primary"
|
||||
v-if="row.signUpMethod === 1&&row.countUser===0"
|
||||
>
|
||||
报名
|
||||
</el-button>
|
||||
<el-button
|
||||
:loading="row.loading"
|
||||
@click="doDelete(row)"
|
||||
size="mini"
|
||||
type="danger"
|
||||
v-if="row.countUser>0"
|
||||
>
|
||||
取消报名
|
||||
</el-button>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<el-card shadow="never">
|
||||
<el-transfer
|
||||
:data="leftData"
|
||||
:filter-method="filterMethod"
|
||||
:props="{key: 'id',label: 'name'}"
|
||||
:titles="['可报人员名单', '当前选择']"
|
||||
filterable
|
||||
ref="transfer"
|
||||
v-loading="tableLoading"
|
||||
v-model="rightData"
|
||||
>
|
||||
<template #left-footer>
|
||||
<div></div>
|
||||
</template>
|
||||
</el-transfer>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<el-table :data="escalationTableData" max-height="500px">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index" width="100"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="姓名" prop="username"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="教工号" prop="loginname"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="单位" prop="unitname" sortable></el-table-column>
|
||||
|
||||
<!--<el-table-column align="center" header-align="center" label="操作" sortable>
|
||||
<template scope="{$index,row}">
|
||||
<el-button @click="rightData.splice($index,1)" size="mini" type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>-->
|
||||
</el-table>
|
||||
</el-card>
|
||||
<el-row class="mt10 text-right">
|
||||
<el-button @click="doBatchAdd" class="mt10" type="primary" v-loading="submitLoading">提交</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<tissue-info ref="info"></tissue-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
submitLoading: false,
|
||||
pageForm: {
|
||||
type: type,
|
||||
year: new Date().getFullYear() + ""
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "name", label: "活动名称" },
|
||||
{ prop: "address", label: "活动地点" },
|
||||
{ prop: "projectTypeName", label: "活动项目类型" },
|
||||
{ prop: "tussueName", label: "举办单位" },
|
||||
{ prop: "time", label: "活动日期" },
|
||||
{ prop: "totalApplyNum", label: "已报名人数", width: 160 },
|
||||
{ prop: "signUpMethod", label: "报名方式", sortable: true, width: 200 },
|
||||
{ prop: "countUser", label: "我的报名", sortable: true }
|
||||
],
|
||||
leftData: [],
|
||||
rightData: [],
|
||||
|
||||
rowData: {}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"tissue-info": httpVueLoader("/components/activity/school/tissueInfo.vue?v=" + new Date().getTime())
|
||||
},
|
||||
computed: {
|
||||
escalationTableData() {
|
||||
return this.leftData.filter((v) => this.rightData.includes(v.id))
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
const { id } = row
|
||||
this.$refs.info.getInfo(id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async doBatchAdd() {
|
||||
if (this.rightData && this.rightData.length > this.rowData.teamNum && this.rowData.signUpMethod === 3) {
|
||||
this.$message.error("该模式组队限制人数为" + this.rowData.teamNum + "人!")
|
||||
return
|
||||
}
|
||||
|
||||
this.submitLoading = true
|
||||
const { code, msg } = await $.get("/mobile/activity/unionActivity/doSaveUnionRegister", {
|
||||
activityId: this.tissueId,
|
||||
personIds: JSON.stringify(this.rightData)
|
||||
})
|
||||
if (code === 0) {
|
||||
this.$message.success(msg)
|
||||
this.doSearch()
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.$message.warning(msg)
|
||||
}
|
||||
this.submitLoading = false
|
||||
},
|
||||
async doDelete(row) {
|
||||
const confirm = await this.$confirm("确认要取消报名吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
row.loading = true
|
||||
const { code, msg } = await $.get("/mobile/activity/unionActivity/doSingleCancelRegister", {
|
||||
activityId: row.id
|
||||
})
|
||||
if (code === 0) {
|
||||
this.$message.success(msg)
|
||||
this.doSearch()
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.$message.warning(msg)
|
||||
}
|
||||
row.loading = false
|
||||
}
|
||||
},
|
||||
async doAdd(row) {
|
||||
const confirm = await this.$confirm("确认要报名吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
row.loading = true
|
||||
const { code, msg } = await $.get("/mobile/activity/unionActivity/doSingleRegister", {
|
||||
activityId: row.id
|
||||
})
|
||||
if (code === 0) {
|
||||
this.$message.success(msg)
|
||||
this.doSearch()
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.$message.warning(msg)
|
||||
}
|
||||
row.loading = false
|
||||
}
|
||||
},
|
||||
async openAudit(row) {
|
||||
this.rowData = row
|
||||
this.tissueId = row.id
|
||||
|
||||
const flag = await getScopeUser(row.groupId)
|
||||
if (!flag) {
|
||||
this.$message.warning("您没有报名权限!")
|
||||
return
|
||||
}
|
||||
|
||||
this.tableLoading = true
|
||||
this.$refs.guava.edit()
|
||||
const { data } = await $.get("/platform/activity/applyUser/selfUnionUsers", {
|
||||
groupId: row.groupId,
|
||||
tissueId: row.id
|
||||
})
|
||||
this.leftData = data
|
||||
|
||||
const { data: rightData } = await $.get("/platform/activity/applyUser/getReportedUser", {
|
||||
tissueId: row.id
|
||||
})
|
||||
|
||||
debugger
|
||||
this.leftData = data.map((user) => {
|
||||
return this.getTransProp(user, row.signUpMethod)
|
||||
})
|
||||
// this.rightData = rightData.map((user) => {
|
||||
// return this.getTransProp(user)
|
||||
// })
|
||||
|
||||
this.rightData = rightData
|
||||
//如果是组队报名,默认添加自己
|
||||
if (rightData && rightData.length === 0 && row.signUpMethod === 3) {
|
||||
rightData.push("${@shiro.getPrincipalProperty('id')}")
|
||||
}
|
||||
|
||||
this.tableLoading = false
|
||||
},
|
||||
getTransProp(user, signUpMethod) {
|
||||
return {
|
||||
id: user.id,
|
||||
username: user.username,
|
||||
loginname: user.loginname,
|
||||
sex: user.sex,
|
||||
unionname: user.unionname,
|
||||
unitname: user.unitname,
|
||||
userState: user.userState,
|
||||
name: user.username + "-" + user.loginname + "-" + user.unitname,
|
||||
//如果是组队报名,并且userId等于当前登入人禁用选项
|
||||
disabled: signUpMethod === 3 && user.id === "${@shiro.getPrincipalProperty('id')}" ? true : false
|
||||
}
|
||||
},
|
||||
filterMethod(query, item) {
|
||||
if (!query) {
|
||||
return -1
|
||||
}
|
||||
return item.name.indexOf(query) > -1
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar()
|
||||
this.tableLoading = true
|
||||
$.post(
|
||||
"/platform/activity/applyUser/pageData",
|
||||
this.pageForm,
|
||||
(data) => {
|
||||
sublime.closeLoadingbar()
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list
|
||||
this.pageForm.totalCount = data.data.totalCount
|
||||
} else {
|
||||
this.$message.error(data.msg)
|
||||
}
|
||||
},
|
||||
"json"
|
||||
)
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.flexible-gifts {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.flexible-gifts-item {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.flexible-gifts-item:not(:first-of-type) {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.flexible-gifts-item-input {
|
||||
width: calc(100% - 144px);
|
||||
}
|
||||
|
||||
.flexible-gifts-item-radio {
|
||||
width: 100px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.flexible-gifts-item-delete {
|
||||
width: 44px;
|
||||
}
|
||||
|
||||
.avatar-uploader .el-upload {
|
||||
border: 1px dashed #d9d9d9;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.avatar-uploader .el-upload:hover {
|
||||
border-color: #409eff;
|
||||
}
|
||||
|
||||
.avatar-uploader-icon {
|
||||
font-size: 28px;
|
||||
color: #8c939d;
|
||||
width: 178px;
|
||||
height: 178px;
|
||||
line-height: 178px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
width: 178px;
|
||||
height: 178px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.el-transfer-panel {
|
||||
text-align: left;
|
||||
width: calc(50% - 91px);
|
||||
height: 53vh;
|
||||
}
|
||||
|
||||
.el-transfer-panel__list.is-filterable {
|
||||
height: calc(50vh - 110px);
|
||||
}
|
||||
|
||||
.transfer {
|
||||
display: flex;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
align-items: center;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
.transfer .el-checkbox {
|
||||
display: inline-block !important;
|
||||
margin: 0 10px !important;
|
||||
}
|
||||
</style>
|
||||
@@ -1,4 +1,4 @@
|
||||
<div id="app" class="platform" v-cloak>
|
||||
<div class="platform" id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
@change="getActivityByYearOrType"
|
||||
placeholder="选择年"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
placeholder="选择年">
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
@@ -21,13 +21,13 @@
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.activityId" placeholder="请选择活动" filterable
|
||||
style="width: 100%">
|
||||
<el-select filterable placeholder="请选择活动" style="width: 100%"
|
||||
v-model="pageForm.activityId">
|
||||
<el-option
|
||||
v-for="item in activityList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
:value="item.id"
|
||||
v-for="item in activityList">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
@@ -36,14 +36,14 @@
|
||||
<div class="search-item" v-if="type==40002||type==40001">
|
||||
<div class="search-item-label">工会名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.unionId" placeholder="请选择工会" filterable
|
||||
clearable
|
||||
style="width: 100%">
|
||||
<el-select clearable filterable placeholder="请选择工会"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.unionId">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
:value="item.id"
|
||||
v-for="item in unionList">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
@@ -52,12 +52,12 @@
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">姓名/工号</div>
|
||||
<div class="search-item-option">
|
||||
<el-input placeholder="请输入姓名/工号" clearable
|
||||
v-model="pageForm.searchKeyword"
|
||||
@keyup.enter.native="doSearch">
|
||||
<el-select v-model="pageForm.searchName" slot="prepend"
|
||||
placeholder="姓名/工号"
|
||||
style="width: 80px;">
|
||||
<el-input @keyup.enter.native="doSearch" clearable
|
||||
placeholder="请输入姓名/工号"
|
||||
v-model="pageForm.searchKeyword">
|
||||
<el-select placeholder="姓名/工号" slot="prepend"
|
||||
style="width: 80px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="姓名" value="u.username"></el-option>
|
||||
<el-option label="工号" value="u.loginanme"></el-option>
|
||||
</el-select>
|
||||
@@ -66,36 +66,44 @@
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索
|
||||
<el-button @click="pageData" icon="el-icon-search" type="primary">搜索
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="人员列表" :app="this">
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="人员列表">
|
||||
<template #func>
|
||||
<el-button icon="el-icon-s-promotion" type="primary" @click="doExport">导出
|
||||
</el-button>
|
||||
<el-button @click="doExport" icon="el-icon-s-promotion" type="primary" size="small">导出</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize"
|
||||
class="vi-table">
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
class="vi-table" row-key="id" style="width: 100%;margin-bottom: 20px"
|
||||
v-loading="tableLoading">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
sortable>
|
||||
align="center"
|
||||
header-align="center"
|
||||
sortable
|
||||
v-for="column in tableColumns">
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作"
|
||||
v-if="${@shiro.hasRole('sysadmin')}"
|
||||
width="100">
|
||||
<template scope="{row}">
|
||||
<el-button @click="doDelete(row)" size="mini" type="danger">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
@@ -133,6 +141,22 @@
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doDelete(row) {
|
||||
this.$confirm('您确认要取消报名吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
const resp = await $.post('/mobile/activity/unionActivity/doSingleCancelRegister', {
|
||||
activityId: this.pageForm.activityId,
|
||||
applyUserId: row.applyUserId,
|
||||
id: row.atpId
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.doSearch()
|
||||
this.$refs.guava.index()
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
async doExport() {
|
||||
const {activityId, unionId} = this.pageForm
|
||||
window.open("/platform/activity/info/mange/doExportUser?id=" + activityId +
|
||||
@@ -174,4 +198,4 @@
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40001
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutApplyUser.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,12 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40002
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutApplyUser.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -29,7 +29,7 @@
|
||||
<!-- v-for="(item, key) in userSignInfo">-->
|
||||
<!-- <el-table :data="item">-->
|
||||
<!-- <el-table-column label="姓名" prop="username"></el-table-column>-->
|
||||
<!-- <el-table-column label="一卡通号" prop="loginname"></el-table-column>-->
|
||||
<!-- <el-table-column label="工号" prop="loginname"></el-table-column>-->
|
||||
<!-- <el-table-column label="是否签到" prop="isAttend"></el-table-column>-->
|
||||
<!-- <el-table-column label="签到时间" prop="attendTime"></el-table-column>-->
|
||||
<!-- </el-table>-->
|
||||
@@ -41,7 +41,7 @@
|
||||
<span slot="label"><i class="el-icon-date"></i> {{key}}</span>
|
||||
<el-table :data="item" style="max-height: 600px; overflow-y: auto">
|
||||
<el-table-column label="姓名" prop="username"></el-table-column>
|
||||
<el-table-column label="一卡通号" prop="loginname"></el-table-column>
|
||||
<el-table-column label="工号" prop="loginname"></el-table-column>
|
||||
<el-table-column label="是否签到" prop="isAttend">
|
||||
<template scope="{row}">
|
||||
<template v-if="Date.now() < Date.parse(row.courseStartTime)">
|
||||
@@ -59,4 +59,4 @@
|
||||
</el-tabs>
|
||||
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-tabs>
|
||||
|
||||
Reference in New Issue
Block a user