commit
This commit is contained in:
+3
@@ -81,6 +81,9 @@ public class SourceChangeManageServiceImpl extends BaseServiceImpl<SourceChangeM
|
|||||||
// middleTable.setWelfareMember(0);
|
// middleTable.setWelfareMember(0);
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
} else if (List.of("离校", "辞职", "调出", "离职", "其他减员").contains(middleTable.getUserState())) {
|
||||||
|
middleTable.setMember(0);
|
||||||
|
middleTable.setWelfareMember(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 记录当前操作的时间,用于后续区分短信通知
|
// 记录当前操作的时间,用于后续区分短信通知
|
||||||
|
|||||||
+1
-8
@@ -361,14 +361,6 @@ public class TheRapyRecuperationUserQueryController {
|
|||||||
lineu.lineId,
|
lineu.lineId,
|
||||||
TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) as age,
|
TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) as age,
|
||||||
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id) familyCount,
|
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id) familyCount,
|
||||||
(
|
|
||||||
SELECT
|
|
||||||
GROUP_CONCAT(ec.userName, '-', ec.sex, '-', ec.age, '(', ec.idcard, '、', ec.mobile, ')')
|
|
||||||
FROM
|
|
||||||
the_rapy_recuperation_enroll_companion ec
|
|
||||||
WHERE
|
|
||||||
ec.trreId = enroll.id
|
|
||||||
) AS companionInfo,
|
|
||||||
u.schoolTime
|
u.schoolTime
|
||||||
FROM
|
FROM
|
||||||
`the_rapy_recuperation_enroll` enroll
|
`the_rapy_recuperation_enroll` enroll
|
||||||
@@ -511,6 +503,7 @@ public class TheRapyRecuperationUserQueryController {
|
|||||||
//自由组团表头
|
//自由组团表头
|
||||||
ArrayList<ExcelExportEntity> travelEntities = new ArrayList<>(commonEntities);
|
ArrayList<ExcelExportEntity> travelEntities = new ArrayList<>(commonEntities);
|
||||||
travelEntities.add(new ExcelExportEntity("酒店名称", "baseName", 20));
|
travelEntities.add(new ExcelExportEntity("酒店名称", "baseName", 20));
|
||||||
|
travelEntities.add(new ExcelExportEntity("预出行时间", "specificTime", 20));
|
||||||
|
|
||||||
commonEntities.add(new ExcelExportEntity("备注", "remark", 30));
|
commonEntities.add(new ExcelExportEntity("备注", "remark", 30));
|
||||||
|
|
||||||
|
|||||||
+254
@@ -0,0 +1,254 @@
|
|||||||
|
package io.v.nutz.zhgh.therapyRecuperation.controller.statistics;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.wizzer.framework.base.Result;
|
||||||
|
import io.v.nutz.base.annontation.ViReturn;
|
||||||
|
import io.v.nutz.base.query.PageForm;
|
||||||
|
import io.v.nutz.base.utils.MsgApi;
|
||||||
|
import io.v.nutz.base.utils.Vi;
|
||||||
|
import io.v.nutz.web.commons.utils.ShiroUtil;
|
||||||
|
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
|
||||||
|
import io.v.nutz.zhgh.therapyRecuperation.model.*;
|
||||||
|
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
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.Dao;
|
||||||
|
import org.nutz.dao.Sqls;
|
||||||
|
import org.nutz.dao.sql.Sql;
|
||||||
|
import org.nutz.ioc.aop.Aop;
|
||||||
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
|
import org.nutz.lang.Lang;
|
||||||
|
import org.nutz.lang.Strings;
|
||||||
|
import org.nutz.mvc.annotation.At;
|
||||||
|
import org.nutz.mvc.annotation.Ok;
|
||||||
|
import org.nutz.mvc.annotation.Param;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author zzr
|
||||||
|
* @name:TheRapyRecuperationStatisticsController
|
||||||
|
* @Date 2024/6/3 17:32
|
||||||
|
* @注释 查看报名情况
|
||||||
|
*/
|
||||||
|
@IocBean
|
||||||
|
@At("/platform/theRapyRecuperation/statistics")
|
||||||
|
@Ok("json:full")
|
||||||
|
@Slf4j
|
||||||
|
public class TheRapyRecuperationLineStatisticsController {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private TheRapyRecuperationEnrollService enrollService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private MsgApi msgApi;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private Dao dao;
|
||||||
|
|
||||||
|
@At("")
|
||||||
|
@Ok("beetl:/platform/theRapyRecuperation/statistics/lineStatistics.html")
|
||||||
|
@RequiresPermissions("theRapyRecuperation.statistics")
|
||||||
|
public void index() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@ViReturn
|
||||||
|
@RequiresPermissions("theRapyRecuperation.statistics")
|
||||||
|
public Object pageData(PageForm pageForm,
|
||||||
|
@Param(value = "startYear", required = false) Integer startYear,
|
||||||
|
@Param(value = "endYear", required = false) Integer endYear,
|
||||||
|
@Param(value = "unionId", required = false) String unionId,
|
||||||
|
@Param("takePartInLineId") String takePartInLineId,
|
||||||
|
@Param(value = "lotId", required = false) String lotId,
|
||||||
|
@Param(value = "signUpMode", required = false) String signUpMode,
|
||||||
|
@Param(value = "selectId",required = false) String selectId,
|
||||||
|
@Param(value = "regionalNature", required = false) String regionalNature) {
|
||||||
|
Sql sql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
line.id,
|
||||||
|
line.lineName,
|
||||||
|
line.regionalNature,
|
||||||
|
lineu.lineId,
|
||||||
|
lineu.id as lineUId,
|
||||||
|
lineu.signUpMode,
|
||||||
|
lineu.minimumGroupSize,
|
||||||
|
lineu.estimatedFamilyNumbers,
|
||||||
|
YEAR(lineu.selectTime) as `year`,
|
||||||
|
CONCAT(DATE_FORMAT(lineu.playStartTime,'%m月%d日'),'-',DATE_FORMAT(lineu.playEndTime,'%m月%d日')) AS linePlayTime,
|
||||||
|
lineu.playStartTime as playStartTime1,
|
||||||
|
lineu.playEndTime as playEndTime2,
|
||||||
|
lxs.travelAgencyName,
|
||||||
|
lxs.contact,
|
||||||
|
lxs.contactMobileNumber,
|
||||||
|
enroll.takePartInUnionId AS usUnionId,
|
||||||
|
if(lineu.signUpMode = 2, '校工会', un.unionname) as unionname,
|
||||||
|
lot.lotName,
|
||||||
|
lot.lotValue,
|
||||||
|
enroll.familyNumber,
|
||||||
|
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll WHERE takePartInLineId = lineu.id and stateId=2750 and isNormal = true $unionCnd) lineNum,
|
||||||
|
(select count(1) from the_rapy_recuperation_enroll_companion where trreId in (select id from the_rapy_recuperation_enroll where stateId=2750 and takePartInLineId = lineu.id and isNormal = true $unionCnd)) as signUpUserFamilyNum
|
||||||
|
FROM
|
||||||
|
`the_rapy_recuperation_enroll` enroll
|
||||||
|
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id=enroll.takePartInLineId
|
||||||
|
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
|
||||||
|
LEFT JOIN the_rapy_recuperation_lot lot ON lot.id = line.lotId
|
||||||
|
LEFT JOIN the_rapy_recuperation_travel_agency lxs ON line.travelAgencyId = lxs.id
|
||||||
|
LEFT JOIN sys_union un ON un.id = lineu.unionId
|
||||||
|
$condition
|
||||||
|
""");
|
||||||
|
Cnd cnd = Cnd.NEW();
|
||||||
|
cnd.andEX("YEAR(lineu.selectTime)", ">=", startYear);
|
||||||
|
cnd.andEX("YEAR(lineu.selectTime)", "<=", endYear);
|
||||||
|
cnd.andEX("lineu.signUpMode","=",signUpMode);
|
||||||
|
if (!ShiroUtil.hasAnyRoles("sysadmin,H06")){
|
||||||
|
String unionCndSql = "and (selfUnionId='%s' or takePartInUnionId = '%s')".formatted(Vi.getUnionId(), Vi.getUnionId());
|
||||||
|
sql.setVar("unionCnd", unionCndSql);
|
||||||
|
cnd.and("lineu.unionId", "=", Vi.getUnionId());
|
||||||
|
} else {
|
||||||
|
if (Strings.isNotBlank(unionId)) {
|
||||||
|
cnd.and("lineu.unionId", "=", unionId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cnd.andEX("line.lotId", "=", lotId);
|
||||||
|
cnd.andEX("line.id", "=", takePartInLineId);
|
||||||
|
cnd.andEX("lineu.id", "=", selectId);
|
||||||
|
cnd.andEX("line.regionalNature", "=", regionalNature);
|
||||||
|
cnd.groupBy("enroll.takePartInLineId");
|
||||||
|
cnd.asc("line.serialNumber").asc("lineu.playStartTime");
|
||||||
|
sql.setCondition(cnd);
|
||||||
|
return enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据线路查询报名详情
|
||||||
|
* @param searchKeyword
|
||||||
|
* @param unionId
|
||||||
|
* @param unitId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@At
|
||||||
|
@ViReturn
|
||||||
|
@RequiresPermissions("theRapyRecuperation.statistics")
|
||||||
|
public Object getUserDateByLine(PageForm pageForm,
|
||||||
|
@Param(value = "takePartLineId",required = false) String takePartLineId,
|
||||||
|
@Param(value = "searchKeyword", required = false) String searchKeyword,
|
||||||
|
@Param(value = "unionId", required = false) String unionId,
|
||||||
|
@Param(value = "unitId", required = false) String unitId) {
|
||||||
|
Sql sql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
enroll.*,
|
||||||
|
line.lineName,
|
||||||
|
line.id as lineId,
|
||||||
|
line.regionalNature,
|
||||||
|
'教职工' userNature,
|
||||||
|
state.stateColor,
|
||||||
|
state.stateName,
|
||||||
|
CONCAT(DATE_FORMAT(rs.playStartTime,'%m月%d日'),'-',DATE_FORMAT(rs.playEndTime,'%m月%d日')) AS linePlayTime,
|
||||||
|
IF
|
||||||
|
( enroll.takePartInUnionId != enroll.selfUnionId, TRUE, FALSE ) isTransferIn,
|
||||||
|
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id ) isFamily,
|
||||||
|
( SELECT COUNT( 1 ) FROM the_rapy_recuperation_enroll_companion WHERE trreId = enroll.id ) num
|
||||||
|
FROM
|
||||||
|
`the_rapy_recuperation_enroll` enroll
|
||||||
|
LEFT JOIN `the_rapy_recuperation_line_union_select` rs ON rs.id = enroll.takePartInLineId
|
||||||
|
LEFT JOIN `the_rapy_recuperation_line` line on line.id=rs.lineId
|
||||||
|
LEFT JOIN audit_state state ON state.stateId = enroll.stateId
|
||||||
|
$condition
|
||||||
|
""");
|
||||||
|
Cnd cnd = Cnd.NEW();
|
||||||
|
cnd.and("enroll.takePartInLineId","=",takePartLineId);
|
||||||
|
cnd.and("enroll.stateId","=",2750);
|
||||||
|
cnd.andEX("enroll.selfUnionId", "=", unionId);
|
||||||
|
cnd.andEX("enroll.selfUnitId", "=", unitId);
|
||||||
|
cnd.and("enroll.takePartInLineId", "is not", null);
|
||||||
|
cnd.andEX("enroll.isNormal", "=", true);
|
||||||
|
if (StrUtil.isNotBlank(searchKeyword)){
|
||||||
|
cnd.and(Cnd.exps("enroll.loginName","like","%"+searchKeyword+"%").or("enroll.userName","like","%"+searchKeyword+"%"));
|
||||||
|
}
|
||||||
|
cnd.desc("enroll.signingUptime");
|
||||||
|
cnd.desc("enroll.unitName");
|
||||||
|
sql.setCondition(cnd);
|
||||||
|
return enrollService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@ViReturn
|
||||||
|
@RequiresAuthentication
|
||||||
|
public Object sendSuccess(String id) {
|
||||||
|
|
||||||
|
TheRapyRecuperationLineUnionSelect unionSelect = dao.fetch(TheRapyRecuperationLineUnionSelect.class, id);
|
||||||
|
TheRapyRecuperationLine line = dao.fetch(TheRapyRecuperationLine.class, unionSelect.getLineId());
|
||||||
|
if (DateUtil.compare(new Date(), unionSelect.getSignUpEndTime()) < 0) {
|
||||||
|
return Result.error("报名还未结束,不能发送");
|
||||||
|
}
|
||||||
|
//找出报名人员
|
||||||
|
List<TheRapyRecuperationEnroll> enrolls = dao.query(TheRapyRecuperationEnroll.class, Cnd.where("takePartInLineId", "=", id)
|
||||||
|
.and("isNormal", "=", true).and("year(signingUptime)", "=", DateUtil.thisYear())
|
||||||
|
.and("stateId", "not in", Lang.array(TheRapyRecuperationState.UNITFAIL, TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.SCHOOLFAIL)));
|
||||||
|
|
||||||
|
//发短信
|
||||||
|
enrolls.forEach(item -> {
|
||||||
|
String content = "%s老师,您好!您报名的%s线路,出行时间为%s,达到成团条件,请准时参加疗休养活动。".formatted(
|
||||||
|
item.getUserName(),
|
||||||
|
line.getLineName(),
|
||||||
|
DateUtil.format(unionSelect.getPlayStartTime(), "yyyy-MM-dd")
|
||||||
|
);
|
||||||
|
List list = List.of(Map.of("type", "User", "userId", item.getLoginName(), "name", item.getUserName()));
|
||||||
|
// msgApi.sendMsg(content, list, "疗休养", " IntelligenceMode", MsgApi.sendMode.normal.name());
|
||||||
|
});
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@ViReturn
|
||||||
|
@RequiresAuthentication
|
||||||
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
|
public Object sendFail(String id, Boolean type) {
|
||||||
|
|
||||||
|
TheRapyRecuperationLineUnionSelect unionSelect = dao.fetch(TheRapyRecuperationLineUnionSelect.class, id);
|
||||||
|
TheRapyRecuperationLine line = dao.fetch(TheRapyRecuperationLine.class, unionSelect.getLineId());
|
||||||
|
if (DateUtil.compare(new Date(), unionSelect.getSignUpEndTime()) < 0) {
|
||||||
|
return Result.error("报名还未结束,不能发送");
|
||||||
|
}
|
||||||
|
//找出报名人员
|
||||||
|
List<TheRapyRecuperationEnroll> enrolls = dao.query(TheRapyRecuperationEnroll.class, Cnd.where("takePartInLineId", "=", id)
|
||||||
|
.and("isNormal", "=", true).and("year(signingUptime)", "=", DateUtil.thisYear())
|
||||||
|
.and("stateId", "not in", Lang.array(TheRapyRecuperationState.UNITFAIL, TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.SCHOOLFAIL)));
|
||||||
|
|
||||||
|
//发短信
|
||||||
|
enrolls.forEach(item -> {
|
||||||
|
String content = "%s老师,您好!您报名的%s线路,出行时间为%s,因报名人数不足未达到成团条件,请尽快进入疗休养管理系统重新选择线路。".formatted(
|
||||||
|
item.getUserName(),
|
||||||
|
line.getLineName(),
|
||||||
|
DateUtil.format(unionSelect.getPlayStartTime(), "yyyy-MM-dd")
|
||||||
|
);
|
||||||
|
List list = List.of(Map.of("type", "User", "userId", item.getLoginName(), "name", item.getUserName()));
|
||||||
|
// msgApi.sendMsg(content, list, "疗休养", " IntelligenceMode", MsgApi.sendMode.normal.name());
|
||||||
|
});
|
||||||
|
|
||||||
|
if(!type) {
|
||||||
|
List<String> enrollIds = enrolls.stream().map(TheRapyRecuperationEnroll::getId).collect(Collectors.toList());
|
||||||
|
List<TheRapyRecuperationEnrollBed> bedIds = enrolls.stream().map(TheRapyRecuperationEnroll::getBedInfo).collect(Collectors.toList());
|
||||||
|
dao.clear(TheRapyRecuperationEnroll.class, Cnd.where("takePartInLineId", "=", id));
|
||||||
|
dao.clear(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "in", enrollIds));
|
||||||
|
dao.clear(TheRapyRecuperationEnrollBed.class, Cnd.where("id", "in", bedIds));
|
||||||
|
} else {
|
||||||
|
List<String> idList = enrolls.stream().map(TheRapyRecuperationEnroll::getId).collect(Collectors.toList());
|
||||||
|
dao.update(TheRapyRecuperationEnroll.class, Chain.make("isNormal", false), Cnd.where("id", "in", idList));
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
+13
-15
@@ -1063,36 +1063,34 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
|
|||||||
numSql.setCallback(Sqls.callback.strList());
|
numSql.setCallback(Sqls.callback.strList());
|
||||||
dao().execute(numSql);
|
dao().execute(numSql);
|
||||||
List<String> list = numSql.getList(String.class);
|
List<String> list = numSql.getList(String.class);
|
||||||
|
// 这就是所有的报名线路
|
||||||
int enrollNum = list.size();
|
int enrollNum = list.size();
|
||||||
if (Lang.isNotEmpty(list)) {
|
if (Lang.isNotEmpty(list)) {
|
||||||
int i = dao().count(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "in", list));
|
int i = dao().count(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "in", list));
|
||||||
enrollNum = enrollNum + i;
|
enrollNum = enrollNum + i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 去判断当前报名的记录,名额有没有超出限制,包含家属
|
// 去判断当前报名的记录,名额有没有超出限制,包含家属
|
||||||
List<TheRapyRecuperationEnrollCompanion> companionList = enrollInfo.getCompanionList();
|
List<TheRapyRecuperationEnrollCompanion> companionList = enrollInfo.getCompanionList();
|
||||||
int applyNum = StrUtil.isNotBlank(enrollInfo.getId()) ? 0 : 1;
|
// 报名人数,默认为1,也就是当前的报名记录
|
||||||
|
int applyNum = 1;
|
||||||
if (StrUtil.isNotBlank(enrollInfo.getEditOther())) {
|
// 先查询这个人,有没有报名记录;有报名记录,并且报名的线路和当前选择的线路是一样的话,扣减掉数据库存储的报名记录和携带家属人数
|
||||||
applyNum = applyNum + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 电脑有的特殊情况,在我的里面修改报名信息,可以直接修改多个时间段的信息,那就要判断数据库报名的Id和,修改的线路的Id是不是一致的
|
|
||||||
TheRapyRecuperationEnroll enroll = dao().fetch(TheRapyRecuperationEnroll.class, Cnd.where("id", "=", enrollInfo.getId()));
|
TheRapyRecuperationEnroll enroll = dao().fetch(TheRapyRecuperationEnroll.class, Cnd.where("id", "=", enrollInfo.getId()));
|
||||||
if (Lang.isNotEmpty(enroll) && !Objects.equals(enroll.getTakePartInLineId(), enrollInfo.getTakePartInLineId())) {
|
if (Lang.isNotEmpty(enroll) && Objects.equals(enroll.getTakePartInLineId(), enrollInfo.getTakePartInLineId())) {
|
||||||
applyNum = applyNum + 1;
|
// 这就是家属人数,那就要用enrollNum减掉家属人数和本人
|
||||||
|
int counted = dao().count(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", enroll.getId()));
|
||||||
|
enrollNum = enrollNum - counted - 1;
|
||||||
}
|
}
|
||||||
|
applyNum = applyNum + (Lang.isEmpty(companionList) ? 0 : companionList.size());
|
||||||
|
|
||||||
if (Lang.isNotEmpty(companionList)) {
|
|
||||||
applyNum = applyNum + companionList.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((applyNum + enrollNum) > maxApplyNum) {
|
if ((applyNum + enrollNum) > maxApplyNum) {
|
||||||
int canApplyNum = maxApplyNum - enrollNum;
|
int canApplyNum = maxApplyNum - (applyNum + enrollNum);
|
||||||
if (canApplyNum == 0) {
|
if ((canApplyNum - 1) == 0) {
|
||||||
return Map.of(false, "此线路报名人数已满,请选择其他线路报名");
|
return Map.of(false, "此线路报名人数已满,请选择其他线路报名");
|
||||||
} else {
|
} else {
|
||||||
return Map.of(false, "此线路剩余可报名人数为:【" + canApplyNum + "人】,本人及家属超过名额限制,请减少随行人或选择其他线路报名");
|
return Map.of(false, "本人及家属超过名额限制,请减少随行人或选择其他线路报名");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+35
-12
@@ -29,6 +29,7 @@ import org.apache.poi.ss.usermodel.Workbook;
|
|||||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||||
|
import org.nutz.boot.starter.ftp.FtpService;
|
||||||
import org.nutz.dao.Chain;
|
import org.nutz.dao.Chain;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
import org.nutz.dao.Dao;
|
import org.nutz.dao.Dao;
|
||||||
@@ -48,10 +49,7 @@ import org.nutz.mvc.annotation.Param;
|
|||||||
|
|
||||||
import javax.servlet.ServletOutputStream;
|
import javax.servlet.ServletOutputStream;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.BufferedOutputStream;
|
import java.io.*;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -68,16 +66,16 @@ import java.util.zip.ZipOutputStream;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class WelfareSingleController {
|
public class WelfareSingleController {
|
||||||
|
|
||||||
@Inject
|
|
||||||
private WelfareSingleService welfareSingleService;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private MsgApi msgApi;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private Dao dao;
|
private Dao dao;
|
||||||
@Inject
|
@Inject
|
||||||
|
private MsgApi msgApi;
|
||||||
|
@Inject
|
||||||
|
private FtpService ftpService;
|
||||||
|
@Inject
|
||||||
private OfficeTemplateUtil officeTemplateUtil;
|
private OfficeTemplateUtil officeTemplateUtil;
|
||||||
|
@Inject
|
||||||
|
private WelfareSingleService welfareSingleService;
|
||||||
|
|
||||||
@At("")
|
@At("")
|
||||||
@Ok("beetl:/platform/welfare/statistics/single.html")
|
@Ok("beetl:/platform/welfare/statistics/single.html")
|
||||||
@@ -803,7 +801,8 @@ public class WelfareSingleController {
|
|||||||
IF(LOCATE('undefined',wpus.receiveAddress)>0,NULL,wpus.receiveAddress) as receiveAddress,
|
IF(LOCATE('undefined',wpus.receiveAddress)>0,NULL,wpus.receiveAddress) as receiveAddress,
|
||||||
wpus.selectNum,
|
wpus.selectNum,
|
||||||
wpso.optionName,
|
wpso.optionName,
|
||||||
wpus.selectSpecs
|
wpus.selectSpecs,
|
||||||
|
wpus.userSign
|
||||||
FROM
|
FROM
|
||||||
welfare_project_user_selection wpus
|
welfare_project_user_selection wpus
|
||||||
left join user u on u.id = wpus.selectUserId
|
left join user u on u.id = wpus.selectUserId
|
||||||
@@ -843,6 +842,21 @@ public class WelfareSingleController {
|
|||||||
v.put("address", addressMap.get("收货地址"));
|
v.put("address", addressMap.get("收货地址"));
|
||||||
v.put("phone", addressMap.get("联系方式"));
|
v.put("phone", addressMap.get("联系方式"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (StrUtil.isNotBlank(v.getString("userSign"))) {
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream signOs = new ByteArrayOutputStream();
|
||||||
|
ftpService.download(v.getString("userSign"), signOs);
|
||||||
|
byte[] imageBytes = signOs.toByteArray();
|
||||||
|
if (Lang.isNotEmpty(imageBytes)) {
|
||||||
|
v.setv("qzBytes", imageBytes);
|
||||||
|
} else {
|
||||||
|
v.setv("qzBytes", null);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Map<String, List<NutMap>> optionGroupData = list.stream().collect(Collectors.groupingBy(v -> v.getString("optionName")));
|
Map<String, List<NutMap>> optionGroupData = list.stream().collect(Collectors.groupingBy(v -> v.getString("optionName")));
|
||||||
@@ -864,6 +878,15 @@ public class WelfareSingleController {
|
|||||||
exportEntities.add(new ExcelExportEntity("收货人", "recipient", 15));
|
exportEntities.add(new ExcelExportEntity("收货人", "recipient", 15));
|
||||||
exportEntities.add(new ExcelExportEntity("联系方式", "phone", 20));
|
exportEntities.add(new ExcelExportEntity("联系方式", "phone", 20));
|
||||||
exportEntities.add(new ExcelExportEntity("收货地址", "address", 60));
|
exportEntities.add(new ExcelExportEntity("收货地址", "address", 60));
|
||||||
|
ExcelExportEntity excelExportEntity = new ExcelExportEntity();
|
||||||
|
excelExportEntity.setName("签字");
|
||||||
|
excelExportEntity.setKey("qzBytes");
|
||||||
|
excelExportEntity.setHeight(12);
|
||||||
|
excelExportEntity.setWidth(20);
|
||||||
|
excelExportEntity.setType(2);
|
||||||
|
excelExportEntity.setExportImageType(2);
|
||||||
|
exportEntities.add(excelExportEntity);
|
||||||
|
|
||||||
|
|
||||||
Workbook workbook = new XSSFWorkbook();
|
Workbook workbook = new XSSFWorkbook();
|
||||||
optionGroupData.forEach((k, v) -> {
|
optionGroupData.forEach((k, v) -> {
|
||||||
@@ -876,7 +899,7 @@ public class WelfareSingleController {
|
|||||||
});
|
});
|
||||||
|
|
||||||
try (ServletOutputStream outputStream = response.getOutputStream()) {
|
try (ServletOutputStream outputStream = response.getOutputStream()) {
|
||||||
ViTool.excelResponse(response, projectName + ".xlsx");
|
ViTool.excelResponse(response, projectName + ".xls");
|
||||||
workbook.write(outputStream);
|
workbook.write(outputStream);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
@@ -1,68 +1,71 @@
|
|||||||
<template>
|
<template>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
<el-dialog
|
<el-dialog
|
||||||
:title="title"
|
:title="title"
|
||||||
:visible.sync="codeDialogVisible"
|
:visible.sync="codeDialogVisible"
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
width="40%">
|
width="40%">
|
||||||
<div style="width: 100%;">
|
<div style="width: 100%;">
|
||||||
<div id="qrcode" style="width: 70%;left: 0;right: 0;margin: auto"></div>
|
<div id="qrcode" style="width: 70%;left: 0;right: 0;margin: auto"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span slot="footer" class="dialog-footer">
|
<span slot="footer" class="dialog-footer">
|
||||||
<el-button @click="codeDialogVisible = false" type="primary">关 闭</el-button>
|
<el-button @click="codeDialogVisible = false" type="primary">关 闭</el-button>
|
||||||
<!-- <el-button type="primary" @click="dwn('活动二维码')">下 载</el-button>-->
|
<!-- <el-button type="primary" @click="dwn('活动二维码')">下 载</el-button>-->
|
||||||
</span>
|
</span>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
props: {},
|
props: {},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
codeDialogVisible: false,
|
codeDialogVisible: false,
|
||||||
title: '活动二维码',
|
title: "活动二维码"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
saveFile(data, filename) {
|
saveFile(data, filename) {
|
||||||
var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
|
var save_link = document.createElementNS("http://www.w3.org/1999/xhtml", "a")
|
||||||
save_link.href = data;
|
save_link.href = data
|
||||||
save_link.download = filename;
|
save_link.download = filename
|
||||||
|
|
||||||
var event = document.createEvent('MouseEvents');
|
var event = document.createEvent("MouseEvents")
|
||||||
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
event.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
|
||||||
save_link.dispatchEvent(event);
|
save_link.dispatchEvent(event)
|
||||||
},
|
},
|
||||||
/*下载二维码*/
|
/*下载二维码*/
|
||||||
dwn(name) {
|
dwn(name) {
|
||||||
var type = 'png';
|
var type = "png"
|
||||||
var dataurl = $("canvas").get(0).toDataURL('image/png').replace("image/png", "image/octet-stream");
|
var dataurl = $("canvas").get(0).toDataURL("image/png").replace("image/png", "image/octet-stream")
|
||||||
var filename = name + '_' + (new Date()).getTime() + '.' + type;
|
var filename = name + "_" + (new Date()).getTime() + "." + type
|
||||||
this.saveFile(dataurl, filename);
|
this.saveFile(dataurl, filename)
|
||||||
},
|
},
|
||||||
openCode(url, title) {
|
isHttpOrHttps(url) {
|
||||||
this.codeDialogVisible = true
|
return /^(http:\/\/|https:\/\/)/i.test(url)
|
||||||
this.$nextTick(() => {
|
},
|
||||||
$("#qrcode").html("")
|
openCode(url, title) {
|
||||||
$("#qrcode").qrcode({ //设置css
|
this.codeDialogVisible = true
|
||||||
render: "canvas", //二维码的生成方式
|
this.$nextTick(() => {
|
||||||
width: $("#qrcode").width(), //生成二维码的宽度
|
$("#qrcode").html("")
|
||||||
height: $("#qrcode").width(), //生成二维码的高度
|
$("#qrcode").qrcode({ //设置css
|
||||||
text: APP_DOMAIN + url,
|
render: "canvas", //二维码的生成方式
|
||||||
correctLevel: 3 //容错级别,默认为2,最高为3,为了让用户扫码最快,容错级别应当设为最低
|
width: $("#qrcode").width(), //生成二维码的宽度
|
||||||
});
|
height: $("#qrcode").width(), //生成二维码的高度
|
||||||
})
|
text: this.isHttpOrHttps(url) ? url : (APP_DOMAIN + url),
|
||||||
this.title = title ? title : '活动二维码'
|
correctLevel: 3 //容错级别,默认为2,最高为3,为了让用户扫码最快,容错级别应当设为最低
|
||||||
console.log(APP_DOMAIN + url)
|
})
|
||||||
},
|
})
|
||||||
}
|
this.title = title ? title : "活动二维码"
|
||||||
|
console.log(APP_DOMAIN + url)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ layout("/mobile/platform.html"){
|
|||||||
<div class="middle" style="border-radius: 10px;" v-for="item in activityList"
|
<div class="middle" style="border-radius: 10px;" v-for="item in activityList"
|
||||||
v-if="activityList.length > 0">
|
v-if="activityList.length > 0">
|
||||||
<van-row gutter="20">
|
<van-row gutter="20">
|
||||||
<van-col @click="menuClick(item.h5Url)" class="middle_item" span="24">
|
<van-col @click="menuClick(item.h5Url, item.id)" class="middle_item" span="24">
|
||||||
<div>
|
<div>
|
||||||
<van-image :src="CREATE_PREVIEW_URL(item.cover)"
|
<van-image :src="CREATE_PREVIEW_URL(item.cover)"
|
||||||
class="middle_item_img" v-if="item.cover">
|
class="middle_item_img" v-if="item.cover">
|
||||||
@@ -257,7 +257,7 @@ layout("/mobile/platform.html"){
|
|||||||
{{clickMenu.moduleName}}
|
{{clickMenu.moduleName}}
|
||||||
</div>
|
</div>
|
||||||
<div class="menu" style="margin-top: 10px">
|
<div class="menu" style="margin-top: 10px">
|
||||||
<div :key="m.menuId" @click="menuClick(m.url)" class="menu_item"
|
<div :key="m.menuId" @click="menuClick(m.url, null)" class="menu_item"
|
||||||
v-for="m in clickMenu.menuList"
|
v-for="m in clickMenu.menuList"
|
||||||
v-if="(m.url == '/mobile/member/apply' && ${@shiro.lacksRole('H01')}) || m.url != '/mobile/member/apply'">
|
v-if="(m.url == '/mobile/member/apply' && ${@shiro.lacksRole('H01')}) || m.url != '/mobile/member/apply'">
|
||||||
<img :src="CREATE_PREVIEW_URL(m.menuIcon)" alt=""
|
<img :src="CREATE_PREVIEW_URL(m.menuIcon)" alt=""
|
||||||
@@ -391,7 +391,7 @@ layout("/mobile/platform.html"){
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="menu">
|
<div class="menu">
|
||||||
<div :key="m.menuId" @click="menuClick(m.url)" class="menu_item"
|
<div :key="m.menuId" @click="menuClick(m.url, null)" class="menu_item"
|
||||||
v-for="m in m.menuList">
|
v-for="m in m.menuList">
|
||||||
<img :src="CREATE_PREVIEW_URL(m.menuIcon)" alt="" class="menu_item_img">
|
<img :src="CREATE_PREVIEW_URL(m.menuIcon)" alt="" class="menu_item_img">
|
||||||
<span class="menu_item_name">{{m.menuName}}</span>
|
<span class="menu_item_name">{{m.menuName}}</span>
|
||||||
@@ -487,6 +487,13 @@ layout("/mobile/platform.html"){
|
|||||||
</div>
|
</div>
|
||||||
</van-form>
|
</van-form>
|
||||||
</van-action-sheet>
|
</van-action-sheet>
|
||||||
|
|
||||||
|
|
||||||
|
<van-dialog v-model="activityQrCodeShow" title="请扫描二维码参与">
|
||||||
|
<img :src="CREATE_PREVIEW_URL('/2025/06/24/Mr10MfxSH9L2W1fPEv1Pv0.png')" width="100%" alt="二维码加载失败"/>
|
||||||
|
<!-- <img :src="CREATE_PREVIEW_URL('8f52c151203e443e9298bca6212bbab8')" width="100%" alt="二维码加载失败"/>-->
|
||||||
|
<!-- <img src="https://zhgh.hmc.edu.cn/file_server/fileStreamPreview?id=/2025/06/24/Mr10MfxSH9L2W1fPEv1Pv0.png" width="100%" alt="二维码加载失败"/>-->
|
||||||
|
</van-dialog>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -529,7 +536,9 @@ layout("/mobile/platform.html"){
|
|||||||
tip: null,
|
tip: null,
|
||||||
columns: []
|
columns: []
|
||||||
},
|
},
|
||||||
ImprovePersonalInfoData: {}
|
ImprovePersonalInfoData: {},
|
||||||
|
|
||||||
|
activityQrCodeShow: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
components: {},
|
components: {},
|
||||||
@@ -538,7 +547,7 @@ layout("/mobile/platform.html"){
|
|||||||
const {data} = await $.post('/platform/sys/appMenu/appMenus')
|
const {data} = await $.post('/platform/sys/appMenu/appMenus')
|
||||||
this.moduleMenus = data
|
this.moduleMenus = data
|
||||||
},
|
},
|
||||||
menuClick(menu) {
|
menuClick(menu, id) {
|
||||||
/* if (menu.url === '/mobile/member/apply') {
|
/* if (menu.url === '/mobile/member/apply') {
|
||||||
const values = this.dict.type.memberApplyPersonType.map(v => v.value)
|
const values = this.dict.type.memberApplyPersonType.map(v => v.value)
|
||||||
const personType = "${@shiro.getPrincipalProperty('personType')}"
|
const personType = "${@shiro.getPrincipalProperty('personType')}"
|
||||||
@@ -548,7 +557,12 @@ layout("/mobile/platform.html"){
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
pjaxReplace(menu)
|
|
||||||
|
if (id && id === '54681bfcfa25432784166eb7ecaa477c') {
|
||||||
|
this.activityQrCodeShow = true
|
||||||
|
} else {
|
||||||
|
pjaxReplace(menu)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
tabbrChange(o) {
|
tabbrChange(o) {
|
||||||
console.log(o)
|
console.log(o)
|
||||||
|
|||||||
@@ -207,9 +207,11 @@ layout("/mobile/platform.html"){
|
|||||||
|
|
||||||
<van-cell title="入会意愿">
|
<van-cell title="入会意愿">
|
||||||
<template #label>
|
<template #label>
|
||||||
<van-checkbox style="font-size: 16px;color: #F56C6C" icon-size="24px"
|
<van-checkbox style="font-size: 17px" icon-size="24px"
|
||||||
v-model="formData.isVoluntary" shape="square">
|
v-model="formData.isVoluntary" shape="square">
|
||||||
我自愿加入中华全国总工会,遵守工会章程,执行工会决议,积极参加工会活动,为全面建成小康社会、把我国建设成为富强民主文明和谐的社会主义现代化国家、实现中华民族伟大复兴的中国梦而奋斗。
|
<span :style="'color:' + (formData.isVoluntary ? '#1989fa' : '#F56C6C') ">
|
||||||
|
我自愿申请加入杭州医学院工会,严格遵守工会章程,认真执行工会决议,委托学校按规定代为扣缴工会会员会费,并积极参与工会组织的各项活动,主动融入 “杭医健康幸福家” 建设,以实际行动为学校工会事业发展贡献力量。
|
||||||
|
</span>
|
||||||
</van-checkbox>
|
</van-checkbox>
|
||||||
</template>
|
</template>
|
||||||
</van-cell>
|
</van-cell>
|
||||||
|
|||||||
@@ -176,9 +176,11 @@ layout("/layouts/platform.html"){
|
|||||||
<el-form-item prop="isVoluntary">
|
<el-form-item prop="isVoluntary">
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
size="medium"
|
size="medium"
|
||||||
style="width: 70%;color: #F56C6C;white-space: nowrap"
|
style="width: 95%; color: #F56C6C; display: flex; align-items: center;"
|
||||||
v-model="formData.isVoluntary">
|
v-model="formData.isVoluntary">
|
||||||
我自愿加入中华全国总工会,遵守工会章程,执行工会决议,积极参加工会活动,为全面建成小康社会、把我国建设成为富强民主文明和谐的社会主义现代化国家、实现中华民族伟大复兴的中国梦而奋斗。
|
<span style="flex: 1; word-wrap: break-word; word-break: break-all; white-space: normal;">
|
||||||
|
我自愿申请加入杭州医学院工会,严格遵守工会章程,认真执行工会决议,委托学校按规定代为扣缴工会会员会费,并积极参与工会组织的各项活动,主动融入 “杭医健康幸福家” 建设,以实际行动为学校工会事业发展贡献力量。
|
||||||
|
</span>
|
||||||
</el-checkbox>
|
</el-checkbox>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
|
|||||||
@@ -52,10 +52,14 @@ const activity = {
|
|||||||
},
|
},
|
||||||
enterActivity(item) {
|
enterActivity(item) {
|
||||||
try {
|
try {
|
||||||
if (item.url) {
|
if (item.id === '54681bfcfa25432784166eb7ecaa477c') {
|
||||||
sublime.jumpPagePjax(item.url)
|
this.$refs.openQRCode.openCode("https://kaoshi.wjx.top/vm/exn6IkX.aspx", "请使用手机扫码此二维码参与知识竞赛")
|
||||||
} else {
|
} else {
|
||||||
this.$refs.openQRCode.openCode(item.h5Url, "该活动只支持手机端,请使用钉钉扫描二维码!")
|
if (item.url) {
|
||||||
|
sublime.jumpPagePjax(item.url)
|
||||||
|
} else {
|
||||||
|
this.$refs.openQRCode.openCode(item.h5Url, "该活动只支持手机端,请使用钉钉扫描二维码!")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.$message.warning("该活动暂不支持!")
|
this.$message.warning("该活动暂不支持!")
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ const news = {
|
|||||||
this.newsData = resp.data
|
this.newsData = resp.data
|
||||||
},
|
},
|
||||||
openUrl(href) {
|
openUrl(href) {
|
||||||
const url = this.isHttpOrHttps(href) ? href : "https://gh.zufe.edu.cn/" + href
|
const url = this.isHttpOrHttps(href) ? href : "https://gh.hmc.edu.cn/" + href
|
||||||
window.open(url)
|
window.open(url)
|
||||||
},
|
},
|
||||||
isHttpOrHttps(url) {
|
isHttpOrHttps(url) {
|
||||||
|
|||||||
@@ -373,7 +373,7 @@ layout("/layouts/platform.html"){
|
|||||||
</el-input>
|
</el-input>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-table :data="signUpUserTableData" max-height="70vh">
|
<el-table :data="signUpUserTableData" max-height="60vh" style="overflow-y: auto">
|
||||||
<el-table-column type="index" label="序号"></el-table-column>
|
<el-table-column type="index" label="序号"></el-table-column>
|
||||||
<el-table-column prop="userName" label="姓名"></el-table-column>
|
<el-table-column prop="userName" label="姓名"></el-table-column>
|
||||||
<el-table-column prop="loginName" label="工号"></el-table-column>
|
<el-table-column prop="loginName" label="工号"></el-table-column>
|
||||||
@@ -489,18 +489,6 @@ layout("/layouts/platform.html"){
|
|||||||
// 处理报名
|
// 处理报名
|
||||||
async handleSignUp(row) {
|
async handleSignUp(row) {
|
||||||
if (["0", "1"].includes(this.pageForm.theRapyRecuperationType)) {
|
if (["0", "1"].includes(this.pageForm.theRapyRecuperationType)) {
|
||||||
const {code,data,msg} = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo',{
|
|
||||||
enroll: JSON.stringify({
|
|
||||||
isNormal: true,
|
|
||||||
takePartInLineId: row.usId,
|
|
||||||
takePartInUnionId: row.takePartInUnionId,
|
|
||||||
editOther: this.editOther
|
|
||||||
}),
|
|
||||||
})
|
|
||||||
if (code !== 0) {
|
|
||||||
this.$message.error(msg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 线路
|
// 线路
|
||||||
this.$refs.lineSignUpRef.onOpen(row, this.pageForm, this.config);
|
this.$refs.lineSignUpRef.onOpen(row, this.pageForm, this.config);
|
||||||
} else if (this.pageForm.theRapyRecuperationType === "3") {
|
} else if (this.pageForm.theRapyRecuperationType === "3") {
|
||||||
|
|||||||
@@ -437,9 +437,22 @@ const LineSignUp = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// 选择出行时间
|
// 选择出行时间
|
||||||
handleCurrentChange(row) {
|
async handleCurrentChange(row) {
|
||||||
if (!row) return
|
if (!row) return
|
||||||
|
|
||||||
|
const {code,data,msg} = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo',{
|
||||||
|
enroll: JSON.stringify({
|
||||||
|
isNormal: true,
|
||||||
|
takePartInLineId: row.usId,
|
||||||
|
takePartInUnionId: row.takePartInUnionId,
|
||||||
|
editOther: this.editOther
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
if (code !== 0) {
|
||||||
|
this.$message.error(msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ((row.signUpUserNum + row.signUpUserFamilyNum) >= row.maxApplyNum) {
|
if ((row.signUpUserNum + row.signUpUserFamilyNum) >= row.maxApplyNum) {
|
||||||
this.$message.warning("报名人数已满")
|
this.$message.warning("报名人数已满")
|
||||||
return
|
return
|
||||||
|
|||||||
+42
-42
@@ -39,21 +39,21 @@ layout("/layouts/platform.html"){
|
|||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<span>年  度:</span>
|
<span>年  度:</span>
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
:clearable="false"
|
:clearable="false"
|
||||||
v-model="pageForm.startYear"
|
v-model="pageForm.startYear"
|
||||||
type="year"
|
type="year"
|
||||||
value-format="yyyy"
|
value-format="yyyy"
|
||||||
placeholder="选择年"
|
placeholder="选择年"
|
||||||
style="width: 38%" @change="getUnionSelectLine(); doSearch()">
|
style="width: 38%" @change="getUnionSelectLine(); doSearch()">
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
<span>至</span>
|
<span>至</span>
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
:clearable="false"
|
:clearable="false"
|
||||||
v-model="pageForm.endYear"
|
v-model="pageForm.endYear"
|
||||||
type="year"
|
type="year"
|
||||||
value-format="yyyy"
|
value-format="yyyy"
|
||||||
placeholder="选择年"
|
placeholder="选择年"
|
||||||
style="width: 38%" @change="doSearch">
|
style="width: 38%" @change="doSearch">
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
@@ -62,10 +62,10 @@ layout("/layouts/platform.html"){
|
|||||||
@change="doSearch()"
|
@change="doSearch()"
|
||||||
filterable clearable style="width: 80%">
|
filterable clearable style="width: 80%">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in unions"
|
v-for="item in unions"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
:label="item.unionname"
|
:label="item.unionname"
|
||||||
:value="item.id">
|
:value="item.id">
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-col>
|
</el-col>
|
||||||
@@ -161,14 +161,14 @@ layout("/layouts/platform.html"){
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
align="center"
|
align="center"
|
||||||
header-align="center"
|
header-align="center"
|
||||||
v-for="column in tableColumns"
|
v-for="column in tableColumns"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
:label="column.label"
|
:label="column.label"
|
||||||
:prop="column.prop"
|
:prop="column.prop"
|
||||||
:width="column.width"
|
:width="column.width"
|
||||||
:sortable="column.sortable"
|
:sortable="column.sortable"
|
||||||
>
|
>
|
||||||
<template scope="{row}" v-if="column.prop=='lineName'">
|
<template scope="{row}" v-if="column.prop=='lineName'">
|
||||||
<el-link type="primary" @click="openLine(row)">{{row.lineName}}
|
<el-link type="primary" @click="openLine(row)">{{row.lineName}}
|
||||||
@@ -186,25 +186,25 @@ layout("/layouts/platform.html"){
|
|||||||
</el-link>
|
</el-link>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" width="380px">
|
<el-table-column label="操作" width="180px">
|
||||||
<template scope="{row}">
|
<template scope="{row}">
|
||||||
<template>
|
<template>
|
||||||
<el-button @click="openUserData(row)" size="mini" type="primary">
|
<el-button @click="openUserData(row)" size="mini" type="primary">
|
||||||
查看人员
|
查看人员
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button size="mini" type="primary" @click="sendSuccess(row)">
|
<!--<el-button size="mini" type="primary" @click="sendSuccess(row)">
|
||||||
发送成团通知
|
发送成团通知
|
||||||
</el-button>
|
</el-button>
|
||||||
|
|
||||||
<el-dropdown class="ml10 mr10" trigger="click">
|
<el-dropdown class="ml10 mr10" trigger="click">
|
||||||
<el-button size="mini" type="primary">
|
<el-button size="mini" type="primary">
|
||||||
发送未成团通知<i class="el-icon-arrow-down el-icon--right"></i>
|
发送未成团通知<i class="el-icon-arrow-down el-icon--right"></i>
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-dropdown-menu slot="dropdown">
|
<el-dropdown-menu slot="dropdown">
|
||||||
<el-dropdown-item @click.native="sendFail(row, true)">保留报名记录</el-dropdown-item>
|
<el-dropdown-item @click.native="sendFail(row, true)">保留报名记录</el-dropdown-item>
|
||||||
<el-dropdown-item @click.native="sendFail(row, false)">删除报名记录</el-dropdown-item>
|
<el-dropdown-item @click.native="sendFail(row, false)">删除报名记录</el-dropdown-item>
|
||||||
</el-dropdown-menu>
|
</el-dropdown-menu>
|
||||||
</el-dropdown>
|
</el-dropdown>-->
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@@ -260,13 +260,13 @@ layout("/layouts/platform.html"){
|
|||||||
<el-card shadow="never" class="mt10">
|
<el-card shadow="never" class="mt10">
|
||||||
<el-table :data="userData">
|
<el-table :data="userData">
|
||||||
<el-table-column
|
<el-table-column
|
||||||
align="center"
|
align="center"
|
||||||
header-align="center"
|
header-align="center"
|
||||||
v-for="column in userDataTableColumns"
|
v-for="column in userDataTableColumns"
|
||||||
show-overflow-tooltip
|
show-overflow-tooltip
|
||||||
:label="column.label"
|
:label="column.label"
|
||||||
:prop="column.prop"
|
:prop="column.prop"
|
||||||
:sortable="column.sortable"
|
:sortable="column.sortable"
|
||||||
>
|
>
|
||||||
<template scope="{row}" v-if="column.prop=='isFamily'">
|
<template scope="{row}" v-if="column.prop=='isFamily'">
|
||||||
<el-link v-if="!row.familyNumber" type="primary">
|
<el-link v-if="!row.familyNumber" type="primary">
|
||||||
@@ -280,13 +280,13 @@ layout("/layouts/platform.html"){
|
|||||||
</el-table>
|
</el-table>
|
||||||
<el-row class="el-pagination-container" style="margin-bottom: 0px">
|
<el-row class="el-pagination-container" style="margin-bottom: 0px">
|
||||||
<el-pagination
|
<el-pagination
|
||||||
@size-change="userPageSizeChange"
|
@size-change="userPageSizeChange"
|
||||||
@current-change="userPageNumberChange"
|
@current-change="userPageNumberChange"
|
||||||
:current-page="userPageForm.pageNumber"
|
:current-page="userPageForm.pageNumber"
|
||||||
:page-sizes="[5,10, 20, 30, 50]"
|
:page-sizes="[5,10, 20, 30, 50]"
|
||||||
:page-size="userPageForm.pageSize"
|
:page-size="userPageForm.pageSize"
|
||||||
layout="total, sizes, prev, pager, next"
|
layout="total, sizes, prev, pager, next"
|
||||||
:total="userPageForm.totalCount">
|
:total="userPageForm.totalCount">
|
||||||
</el-pagination>
|
</el-pagination>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|||||||
Reference in New Issue
Block a user