疗休养

This commit is contained in:
Paidax
2025-06-18 22:21:53 +08:00
parent 4064a88a1b
commit bc3ca19212
19 changed files with 971 additions and 684 deletions
@@ -53,7 +53,7 @@ public interface SourceData {
put("XBM", new String[]{"sex"});// 性别码 put("XBM", new String[]{"sex"});// 性别码
put("MZMC", new String[]{"nation"});// 民族码 put("MZMC", new String[]{"nation"});// 民族码
put("SJ", new String[]{"mobile"}); // 手机号 put("SJ", new String[]{"mobile"}); // 手机号
put("SFZJH", new String[]{"idcard"}); // 身份证件号 // put("SFZJH", new String[]{"idcard"}); // 身份证件号
put("ZZMMM", new String[]{"political"}); // 政治面貌码 put("ZZMMM", new String[]{"political"}); // 政治面貌码
put("DQZTM", new String[]{"userState", "personalStatus"}); // 在职状态码 put("DQZTM", new String[]{"userState", "personalStatus"}); // 在职状态码
put("RYFLMC", new String[]{"personType"}); // 人员类型码 put("RYFLMC", new String[]{"personType"}); // 人员类型码
@@ -529,7 +529,7 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
// 变更记录 // 变更记录
List<NutMap> changeList = new ArrayList<>(); List<NutMap> changeList = new ArrayList<>();
for (String fieldName : allowChangeFieldNames) { for (String fieldName : allowChangeFieldNames) {
if (List.of("retireDate", "welfareStopDate").contains(fieldName)) { if (List.of("retireDate", "welfareStopDate", "idcard").contains(fieldName)) {
continue; continue;
} }
memberCommonService.extractChange(newMap, sourceMap, fieldName, dictMap, changeList); memberCommonService.extractChange(newMap, sourceMap, fieldName, dictMap, changeList);
@@ -577,7 +577,7 @@ public class SourceUserServiceImpl extends ViServiceImpl<UserSource> implements
NutMap sourceMap = Lang.obj2nutmap(user); NutMap sourceMap = Lang.obj2nutmap(user);
List<NutMap> changeList = new ArrayList<>(); List<NutMap> changeList = new ArrayList<>();
for (String fieldName : allowChangeFieldNames) { for (String fieldName : allowChangeFieldNames) {
if (List.of("retireDate", "welfareStopDate").contains(fieldName)) { if (List.of("retireDate", "welfareStopDate", "idcard").contains(fieldName)) {
continue; continue;
} }
memberCommonService.extractChange(newMap, sourceMap, fieldName, dictMap, changeList); memberCommonService.extractChange(newMap, sourceMap, fieldName, dictMap, changeList);
@@ -1,29 +1,47 @@
package io.v.nutz.zhgh.therapyRecuperation.controller.mobile; package io.v.nutz.zhgh.therapyRecuperation.controller.mobile;
import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationConfig;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollService;
import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresAuthentication;
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.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Ok;
import java.util.List;
import java.util.Map;
/** /**
* @Author JyuHsin * @Author JyuHsin
* @Date 2022/6/2 * @Date 2022/6/2
* @Description 疗休养页面跳转controller * @Description 疗休养页面跳转controller
*/ */
@IocBean @IocBean
@At("/platform/mobile/theRapyRecuperation")
@Ok("json:full") @Ok("json:full")
@At("/platform/mobile/theRapyRecuperation")
public class MobileTheRapyRecuperationEnrollController { public class MobileTheRapyRecuperationEnrollController {
@Inject
private Dao dao;
@Inject
private TheRapyRecuperationEnrollService theRapyRecuperationEnrollService;
/** /**
* 手机端 首页 * 手机端 首页
*/ */
@At("/index") @At("/index")
@Ok("beetl:/mobile/therapyRecuperation/index.html") @Ok("beetl:/mobile/therapyRecuperation/index.html")
@RequiresAuthentication @RequiresAuthentication
public void index() { public void index() {}
}
/** /**
* 手机端 线路列表页面 * 手机端 线路列表页面
@@ -31,9 +49,7 @@ public class MobileTheRapyRecuperationEnrollController {
@At("/mobileLineListPage") @At("/mobileLineListPage")
@Ok("beetl:/mobile/therapyRecuperation/lineList.html") @Ok("beetl:/mobile/therapyRecuperation/lineList.html")
@RequiresAuthentication @RequiresAuthentication
public void mobileLinePage() { public void mobileLinePage() {}
}
/** /**
* 手机端 线路详情页面 * 手机端 线路详情页面
@@ -41,9 +57,7 @@ public class MobileTheRapyRecuperationEnrollController {
@At("/lineInfo") @At("/lineInfo")
@Ok("beetl:/mobile/therapyRecuperation/lineInfo.html") @Ok("beetl:/mobile/therapyRecuperation/lineInfo.html")
@RequiresAuthentication @RequiresAuthentication
public void lineInfo() { public void lineInfo() {}
}
/** /**
* 手机端 基地详情页面 * 手机端 基地详情页面
@@ -51,9 +65,7 @@ public class MobileTheRapyRecuperationEnrollController {
@At("/baseInfo") @At("/baseInfo")
@Ok("beetl:/mobile/therapyRecuperation/baseManagement.html") @Ok("beetl:/mobile/therapyRecuperation/baseManagement.html")
@RequiresAuthentication @RequiresAuthentication
public void baseInfo() { public void baseInfo() {}
}
/** /**
* 手机端 我的疗休养页面 * 手机端 我的疗休养页面
@@ -61,15 +73,54 @@ public class MobileTheRapyRecuperationEnrollController {
@At("/myRecuperation") @At("/myRecuperation")
@Ok("beetl:/mobile/therapyRecuperation/myRecuperation.html") @Ok("beetl:/mobile/therapyRecuperation/myRecuperation.html")
@RequiresAuthentication @RequiresAuthentication
public void myRecuperation() { public void myRecuperation() {}
}
@At("/userSignInfo") @At("/userSignInfo")
@Ok("beetl:/mobile/therapyRecuperation/userSignInfo.html") @Ok("beetl:/mobile/therapyRecuperation/userSignInfo.html")
@RequiresAuthentication @RequiresAuthentication
public void userSignInfo() { public void userSignInfo() {}
@At
@ViReturn
@RequiresAuthentication
public Object getOpenLineList(String id){
if (StrUtil.isBlank(id)) {
return Result.error("参数错误");
}
TheRapyRecuperationConfig config = theRapyRecuperationEnrollService.getConfig();
Sql sql = Sqls.create("""
SELECT
us.id AS `value`,
CONCAT(
line.lineName,
'(',
DATE_FORMAT(us.playStartTime, '%m-%d'),
'至',
DATE_FORMAT(us.playEndTime, '%m-%d'),
')'
) AS `label`
FROM
the_rapy_recuperation_line_union_select us
LEFT JOIN the_rapy_recuperation_line line ON line.id = us.lineId
$condition
""").setParam("id", id);
Cnd cnd = Cnd.NEW();
cnd.and("us.`enable`", "=", true);
cnd.and("us.id", "!=", id);
if ("fixedUser".equals(config.getOutsideQuotaMode())) {
if (!config.getFixedUserList().contains(ShiroUtil.getUserId())) {
cnd.and("line.regionalNature", "=", "省内");
}
}
cnd.asc("line.serialNumber");
sql.setCondition(cnd);
sql.setCallback(Sqls.callback.maps());
dao.execute(sql);
return sql.getResult();
} }
} }
@@ -18,12 +18,14 @@ import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationTravelAgenc
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.web.commons.slog.annotation.SLog; import io.v.nutz.web.commons.slog.annotation.SLog;
import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.nutz.aop.interceptor.ioc.TransAop;
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;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.Daos; import org.nutz.dao.util.Daos;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang; import org.nutz.lang.Lang;
@@ -87,8 +89,9 @@ public class TheRapyRecuperationEnrollController {
@POST @POST
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object pageData(PageForm pageForm, Integer year, String unionId, int theRapyRecuperationType, Integer lineUnionType) { public Object pageData(PageForm pageForm, Integer year, String unionId,
return enrollService.enrollPageData(pageForm, year, unionId, theRapyRecuperationType, lineUnionType); int theRapyRecuperationType, Integer lineUnionType, String editOther) {
return enrollService.enrollPageData(pageForm, year, unionId, theRapyRecuperationType, lineUnionType, editOther);
} }
@At @At
@@ -149,7 +152,8 @@ public class TheRapyRecuperationEnrollController {
@POST @POST
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object doSignUpForLine(@Param("enroll") TheRapyRecuperationEnroll enrollInfo) { @Aop(TransAop.READ_COMMITTED)
public synchronized Object doSignUpForLine(@Param("enroll") TheRapyRecuperationEnroll enrollInfo) {
//省外的线路报名需要判断 //省外的线路报名需要判断
// if (lineInfo.getRegionalNature().equals(TheRapyRecuperationProvinceType.provinceOut.getValue())) { // if (lineInfo.getRegionalNature().equals(TheRapyRecuperationProvinceType.provinceOut.getValue())) {
Sys_config config = dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "recuperationVersion")); Sys_config config = dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "recuperationVersion"));
@@ -176,17 +180,28 @@ public class TheRapyRecuperationEnrollController {
} else if (!IdcardUtil.isValidCard(companion.getIdCard())) { } else if (!IdcardUtil.isValidCard(companion.getIdCard())) {
return Result.error("随行人身份证信息有误"); return Result.error("随行人身份证信息有误");
} }
if (companion.getAge() < 3 || companion.getAge() > 70) { if (companion.getAge() < 1 || companion.getAge() > 70) {
return Result.error("随行人年龄超过限制,请上传其他随行人"); return Result.error("随行人年龄超过限制,请上传其他随行人");
} }
} }
} }
if (StrUtil.isBlank(enrollInfo.getId())) { if (StrUtil.isBlank(enrollInfo.getId())) {
enrollService.doSignUpForLine(enrollInfo); enrollService.doSignUpForLine(enrollInfo);
} else { } else {
enrollService.updateSignUpLine(enrollInfo); if (StrUtil.isNotBlank(enrollInfo.getEditOther())) {
dao.clear(TheRapyRecuperationEnroll.class, Cnd.where("id", "=", enrollInfo.getEditOther()));
dao.clear(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", enrollInfo.getEditOther()));
if (StrUtil.isNotBlank(enrollInfo.getBedInfoId())) {
dao.delete(TheRapyRecuperationEnrollBed.class, enrollInfo.getBedInfoId());
}
enrollInfo.setSpecificTime(null);
enrollInfo.setTakePartInTravelAgencyId(null);
enrollInfo.setTakePartInBaseManagementId(null);
enrollService.doSignUpForLine(enrollInfo);
} else {
enrollService.updateSignUpLine(enrollInfo);
}
} }
return null; return null;
} }
@@ -201,6 +216,7 @@ public class TheRapyRecuperationEnrollController {
@POST @POST
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
@Aop(TransAop.READ_COMMITTED)
public Object doSignUpForTravelAgency(@Param("enroll") TheRapyRecuperationEnroll enrollInfo) { public Object doSignUpForTravelAgency(@Param("enroll") TheRapyRecuperationEnroll enrollInfo) {
Sys_config config = dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "recuperationVersion")); Sys_config config = dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "recuperationVersion"));
Map<Boolean, String> resultMap = new HashMap<>(); Map<Boolean, String> resultMap = new HashMap<>();
@@ -230,6 +246,7 @@ public class TheRapyRecuperationEnrollController {
@POST @POST
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
@Aop(TransAop.READ_COMMITTED)
public Object doSignUpForBaseManagement(@Param("enroll") TheRapyRecuperationEnroll enrollInfo) { public Object doSignUpForBaseManagement(@Param("enroll") TheRapyRecuperationEnroll enrollInfo) {
Sys_config config = dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "recuperationVersion")); Sys_config config = dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "recuperationVersion"));
Map<Boolean, String> resultMap = new HashMap<>(); Map<Boolean, String> resultMap = new HashMap<>();
@@ -242,34 +259,42 @@ public class TheRapyRecuperationEnrollController {
return Result.error(resultMap.get(false)); return Result.error(resultMap.get(false));
} }
// 校验随行人的身份证信息
if (Lang.isNotEmpty(enrollInfo.getCompanionList())) {
for (TheRapyRecuperationEnrollCompanion companion : enrollInfo.getCompanionList()) {
if (StrUtil.isBlank(companion.getIdCard())) {
return Result.error("随行人身份证信息不能为空");
} else if (!IdcardUtil.isValidCard(companion.getIdCard())) {
return Result.error("随行人身份证信息有误");
}
if (companion.getAge() < 3 || companion.getAge() > 70) {
return Result.error("随行人年龄超过限制,请上传其他随行人");
}
}
}
if (StrUtil.isBlank(enrollInfo.getId())) { if (StrUtil.isBlank(enrollInfo.getId())) {
enrollService.doSignUpForHotel(enrollInfo); enrollService.doSignUpForHotel(enrollInfo);
} else { } else {
enrollService.updateSignUpHotel(enrollInfo); if (StrUtil.isNotBlank(enrollInfo.getEditOther())) {
dao.clear(TheRapyRecuperationEnroll.class, Cnd.where("id", "=", enrollInfo.getEditOther()));
dao.clear(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", enrollInfo.getEditOther()));
if (StrUtil.isNotBlank(enrollInfo.getBedInfoId())) {
dao.delete(TheRapyRecuperationEnrollBed.class, enrollInfo.getBedInfoId());
}
enrollInfo.setRoomCount(null);
enrollInfo.setRoomRemark(null);
enrollInfo.setRoomRemarkName(null);
enrollInfo.setRoommate(null);
enrollInfo.setRoomCountName(null);
enrollInfo.setOtherRemark(null);
enrollInfo.setTakePartInLineId(null);
enrollInfo.setTakePartInUnionId(null);
enrollInfo.setTakePartInTravelAgencyId(null);
enrollInfo.setIntentionLineId(null);
enrollInfo.setIntentionLineName(null);
enrollInfo.setCarryFamilyNum(null);
enrollService.doSignUpForHotel(enrollInfo);
} else {
enrollService.updateSignUpHotel(enrollInfo);
}
} }
return null; return null;
} }
@At("/findSignUpInfoById/?") @At
@POST @POST
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object findSignUpInfoById(String id) { public Object findSignUpInfoById(@Param(value = "id", required = false) String id,
return enrollService.findSignUpInfoById(id); @Param(value = "editOther", required = false) String editOther) {
return enrollService.findSignUpInfoById(id, editOther);
} }
/** /**
@@ -119,7 +119,7 @@ public class TheRapyRecuperationUserQueryController {
enroll.*, enroll.*,
lineu.lineId, lineu.lineId,
lineu.playStartTime, lineu.playStartTime,
lineu.playEndTime, lineu.playEndTime,
( 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 ) isFamily
FROM FROM
`the_rapy_recuperation_enroll` enroll `the_rapy_recuperation_enroll` enroll
@@ -504,7 +504,9 @@ public class TheRapyRecuperationUserQueryController {
lineEntities.add(new ExcelExportEntity("行程", "playTime", 20)); lineEntities.add(new ExcelExportEntity("行程", "playTime", 20));
lineEntities.add(new ExcelExportEntity("房间需求数", "roomCount", 20)); lineEntities.add(new ExcelExportEntity("房间需求数", "roomCount", 20));
lineEntities.add(new ExcelExportEntity("用房备注", "roomRemarkName", 30)); lineEntities.add(new ExcelExportEntity("用房备注", "roomRemarkName", 30));
lineEntities.add(new ExcelExportEntity("其他", "other", 20)); lineEntities.add(new ExcelExportEntity("其他备注", "otherRemark", 20));
lineEntities.add(new ExcelExportEntity("第二意向线路", "intentionLineName", 30));
lineEntities.add(new ExcelExportEntity("意向线路携带家属数", "carryFamilyNum", 20));
//自由组团表头 //自由组团表头
ArrayList<ExcelExportEntity> travelEntities = new ArrayList<>(commonEntities); ArrayList<ExcelExportEntity> travelEntities = new ArrayList<>(commonEntities);
@@ -94,6 +94,15 @@ public class TheRapyRecuperationConfigController {
dao.insertWith(config, "lots"); dao.insertWith(config, "lots");
} }
// 如果是特定人员报名,将这些人存在redis里边,方便查询
if ("fixedUser".equals(config.getOutsideQuotaMode())) {
Sql sql = Sqls.create("select userId from the_rapy_recuperation_can_apply_out_user");
sql.setCallback(Sqls.callback.strList());
dao.execute(sql);
List<String> stringList = sql.getList(String.class);
config.setFixedUserList(stringList);
}
// 将配置存储到redis里边,可以避免每次都去查一次数据库 // 将配置存储到redis里边,可以避免每次都去查一次数据库
String configCache = RedisConstant.REDIS_KEY_THE_RAPY_RECU_CONFIG_CACHE; String configCache = RedisConstant.REDIS_KEY_THE_RAPY_RECU_CONFIG_CACHE;
redisService.del(configCache); redisService.del(configCache);
@@ -1,5 +1,6 @@
package io.v.nutz.zhgh.therapyRecuperation.model; package io.v.nutz.zhgh.therapyRecuperation.model;
import io.v.nutz.sys.models.Sys_file;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.nutz.dao.entity.annotation.*; import org.nutz.dao.entity.annotation.*;
@@ -116,4 +117,12 @@ public class TheRapyRecuperationConfig {
@Comment("分工会人数限制") @Comment("分工会人数限制")
@ColDefine(type = ColType.MYSQL_JSON) @ColDefine(type = ColType.MYSQL_JSON)
private List<NutMap> unionLimit; private List<NutMap> unionLimit;
@Column
@ColDefine(type = ColType.MYSQL_JSON)
@Comment("承诺书")
private List<Sys_file> files;
// 可以参加报名的人员
private List<String> fixedUserList;
} }
@@ -237,5 +237,27 @@ public class TheRapyRecuperationEnroll extends BaseModel {
@Comment("拼房人") @Comment("拼房人")
private String roommate; private String roommate;
@Column
@ColDefine(type = ColType.VARCHAR, width = 255)
@Comment("其他备注")
private String otherRemark;
@Column
@ColDefine(type = ColType.VARCHAR, width = 32)
@Comment("第二意向线路Id")
private String intentionLineId;
@Column
@ColDefine(type = ColType.VARCHAR, width = 100)
@Comment("第二意向线路名称")
private String intentionLineName;
@Column
@ColDefine(type = ColType.INT)
@Comment("携带家属人数")
private Integer carryFamilyNum;
private String firstLetter; private String firstLetter;
private String editOther;
} }
@@ -4,6 +4,7 @@ import cn.wizzer.framework.page.Pagination;
import io.v.nutz.base.query.PageForm; import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.ViService; import io.v.nutz.base.service.ViService;
import io.v.nutz.sys.models.Sys_union; import io.v.nutz.sys.models.Sys_union;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationConfig;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll; import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.lang.util.NutMap; import org.nutz.lang.util.NutMap;
@@ -27,7 +28,8 @@ public interface TheRapyRecuperationEnrollService extends ViService<TheRapyRecup
* @param trrt trrt * @param trrt trrt
* @return {@link Pagination} * @return {@link Pagination}
*/ */
Pagination enrollPageData(PageForm pageForm, Integer year, String unionId, int trrt, Integer lineUnionType); Pagination enrollPageData(PageForm pageForm, Integer year, String unionId,
int trrt, Integer lineUnionType, String editOther);
List<NutMap> getSelectLineById(String lineId, String unionId, int trrt, Integer lineUnionType); List<NutMap> getSelectLineById(String lineId, String unionId, int trrt, Integer lineUnionType);
@@ -101,7 +103,7 @@ public interface TheRapyRecuperationEnrollService extends ViService<TheRapyRecup
* @param id id * @param id id
* @return {@link TheRapyRecuperationEnroll} * @return {@link TheRapyRecuperationEnroll}
*/ */
TheRapyRecuperationEnroll findSignUpInfoById(String id); TheRapyRecuperationEnroll findSignUpInfoById(String id, String editOther);
/** /**
@@ -122,4 +124,7 @@ public interface TheRapyRecuperationEnrollService extends ViService<TheRapyRecup
NutMap selectLineAllInfo(String usId, String usUnionId); NutMap selectLineAllInfo(String usId, String usUnionId);
List<Sys_union> getTheRapyUnions(Integer year); List<Sys_union> getTheRapyUnions(Integer year);
TheRapyRecuperationConfig getConfig();
} }
@@ -113,9 +113,9 @@ public class TheRapyRecuperationAuditServiceImpl extends ViServiceImpl<Audit> im
fetch.setv("bedInfo", bedInfo); fetch.setv("bedInfo", bedInfo);
} }
List<TheRapyRecuperationEnrollCompanion> companionList = dao().query(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", id)); List<TheRapyRecuperationEnrollCompanion> companionList = dao().query(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", id));
companionList.forEach(v -> { // companionList.forEach(v -> {
v.setBedInfo(dao().fetch(TheRapyRecuperationEnrollBed.class, v.getBedInfoId())); // v.setBedInfo(dao().fetch(TheRapyRecuperationEnrollBed.class, v.getBedInfoId()));
}); // });
map.addv("viewData", fetch.setv("companionList", companionList)); map.addv("viewData", fetch.setv("companionList", companionList));
@@ -69,7 +69,12 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
private TheRapyRecuperationLineService lineService; private TheRapyRecuperationLineService lineService;
@Override @Override
public Pagination enrollPageData(PageForm pageForm, Integer year, String unionId, int trrt, Integer lineUnionType) { public Pagination enrollPageData(PageForm pageForm, Integer year, String unionId,
int trrt, Integer lineUnionType, String editOther) {
TheRapyRecuperationEnroll enroll = null;
if (StrUtil.isNotBlank(editOther)) {
enroll = dao().fetch(TheRapyRecuperationEnroll.class, editOther);
}
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
if (List.of(TheRapyRecuperationType.provinceInLine.getValue(), TheRapyRecuperationType.provinceOutLine.getValue()).contains(trrt)) { if (List.of(TheRapyRecuperationType.provinceInLine.getValue(), TheRapyRecuperationType.provinceOutLine.getValue()).contains(trrt)) {
Sql lineSql = Sqls.create(""" Sql lineSql = Sqls.create("""
@@ -133,6 +138,11 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
//校工会 //校工会
lineCnd.and("us.signUpMode", "=", TheRapyRecuperationSignUpMode.FREE.getValue()); lineCnd.and("us.signUpMode", "=", TheRapyRecuperationSignUpMode.FREE.getValue());
} }
if (Lang.isNotEmpty(enroll) && StrUtil.isNotBlank(enroll.getTakePartInLineId())) {
lineCnd.and("us.id", "!=", enroll.getTakePartInLineId());
}
lineSql.setVar("lineCnd", lineCnd); lineSql.setVar("lineCnd", lineCnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), lineSql); return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), lineSql);
} else if (TheRapyRecuperationType.provinceInTravelAgency.getValue() == trrt) { } else if (TheRapyRecuperationType.provinceInTravelAgency.getValue() == trrt) {
@@ -145,6 +155,9 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
from from
the_rapy_recuperation_travel_agency $condition the_rapy_recuperation_travel_agency $condition
"""); """);
if (Lang.isNotEmpty(enroll) && StrUtil.isNotBlank(enroll.getTakePartInTravelAgencyId())) {
cnd.and("id", "!=", enroll.getTakePartInTravelAgencyId());
}
taSql.setCondition(cnd); taSql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), taSql); return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), taSql);
} else if (TheRapyRecuperationType.provinceInHotel.getValue() == trrt) { } else if (TheRapyRecuperationType.provinceInHotel.getValue() == trrt) {
@@ -163,6 +176,9 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
$condition $condition
""").setParam("year", queryYear); """).setParam("year", queryYear);
cnd.asc("sortNumber"); cnd.asc("sortNumber");
if (Lang.isNotEmpty(enroll) && StrUtil.isNotBlank(enroll.getTakePartInBaseManagementId())) {
cnd.and("b.id", "!=", enroll.getTakePartInBaseManagementId());
}
taSql.setCondition(cnd); taSql.setCondition(cnd);
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), taSql); return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), taSql);
} }
@@ -320,10 +336,7 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
} }
if (recuperationConfig.getBedInfo() || recuperationConfig.getFamilyInfo() == 2) { if (recuperationConfig.getBedInfo() || recuperationConfig.getFamilyInfo() == 2) {
for (TheRapyRecuperationEnrollCompanion theRapyRecuperationEnrollCompanion : enrollInfo.getCompanionList()) { insertWith(enrollInfo, "companionList");
insertLinks(theRapyRecuperationEnrollCompanion, "bedInfo");
}
insertWith(enrollInfo, "companionList|bedInfo");
} else { } else {
insert(enrollInfo); insert(enrollInfo);
} }
@@ -353,9 +366,11 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
if (recuperationConfig.getBedInfo() || recuperationConfig.getFamilyInfo() == 2) { if (recuperationConfig.getBedInfo() || recuperationConfig.getFamilyInfo() == 2) {
dao().clearLinks(enrollInfo, "companionList"); dao().clearLinks(enrollInfo, "companionList");
dao().delete(TheRapyRecuperationEnrollBed.class, enrollInfo.getBedInfoId()); if (StrUtil.isNotBlank(enrollInfo.getBedInfoId())) {
dao().delete(TheRapyRecuperationEnrollBed.class, enrollInfo.getBedInfoId());
}
dao().insertLinks(enrollInfo, "companionList|bedInfo"); dao().insertLinks(enrollInfo, "companionList");
} }
update(enrollInfo); update(enrollInfo);
@@ -416,7 +431,7 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
for (TheRapyRecuperationEnrollCompanion theRapyRecuperationEnrollCompanion : enrollInfo.getCompanionList()) { for (TheRapyRecuperationEnrollCompanion theRapyRecuperationEnrollCompanion : enrollInfo.getCompanionList()) {
insertLinks(theRapyRecuperationEnrollCompanion, "bedInfo"); insertLinks(theRapyRecuperationEnrollCompanion, "bedInfo");
} }
insertWith(enrollInfo, "companionList|bedInfo"); insertWith(enrollInfo, "companionList");
} }
/** /**
@@ -429,9 +444,10 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
public void updateSignUpHotel(TheRapyRecuperationEnroll enrollInfo) { public void updateSignUpHotel(TheRapyRecuperationEnroll enrollInfo) {
dao().clearLinks(enrollInfo, "companionList"); dao().clearLinks(enrollInfo, "companionList");
dao().delete(TheRapyRecuperationEnrollBed.class, enrollInfo.getBedInfoId()); if (StrUtil.isNotBlank(enrollInfo.getBedInfoId())) {
dao().delete(TheRapyRecuperationEnrollBed.class, enrollInfo.getBedInfoId());
dao().insertLinks(enrollInfo, "companionList|bedInfo"); }
dao().insertLinks(enrollInfo, "companionList");
update(enrollInfo); update(enrollInfo);
//插入变更记录 //插入变更记录
@@ -485,19 +501,18 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
//每年旅行频率 //每年旅行频率
Integer travelFrequency = config.getTravelFrequency(); Integer travelFrequency = config.getTravelFrequency();
//省外几年去一次 //省外几年去一次
Integer outsideNumber = config.getOutsideNumber(); Integer outsideNumber = config.getOutsideNumber();
//可以修改几次 //可以修改几次
Integer modifyNumber = config.getModifyNumber(); Integer modifyNumber = config.getModifyNumber();
//省外最多报名人数 //省外最多报名人数
Integer allLineSignUpNumber = config.getAllLineSignUpNumber(); Integer allLineSignUpNumber = config.getAllLineSignUpNumber();
// 判断是不是修改报名其他线路
String editOther = enrollInfo.getEditOther();
//如果报旅行社 //如果报旅行社
if (StrUtil.isNotBlank(enrollInfo.getTakePartInTravelAgencyId())) { if (StrUtil.isNotBlank(enrollInfo.getTakePartInTravelAgencyId())) {
Map<Boolean, String> oneYear = this.validCountOneYear(loginName, travelFrequency); Map<Boolean, String> oneYear = this.validCountOneYear(loginName, travelFrequency, editOther);
if (oneYear != null) { if (oneYear != null) {
return oneYear; return oneYear;
} }
@@ -505,7 +520,7 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
//如果报酒店 //如果报酒店
if (StrUtil.isNotBlank(enrollInfo.getTakePartInBaseManagementId()) && StrUtil.isBlank(enrollInfo.getId())) { if (StrUtil.isNotBlank(enrollInfo.getTakePartInBaseManagementId()) && StrUtil.isBlank(enrollInfo.getId())) {
Map<Boolean, String> oneYear = this.validCountOneYear(loginName, travelFrequency); Map<Boolean, String> oneYear = this.validCountOneYear(loginName, travelFrequency, editOther);
if (oneYear != null) { if (oneYear != null) {
return oneYear; return oneYear;
} }
@@ -571,7 +586,7 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
} }
if (StrUtil.isBlank(enrollInfo.getId())) { if (StrUtil.isBlank(enrollInfo.getId())) {
Map<Boolean, String> oneYear = this.validCountOneYear(loginName, travelFrequency); Map<Boolean, String> oneYear = this.validCountOneYear(loginName, travelFrequency, editOther);
if (oneYear != null) { if (oneYear != null) {
return oneYear; return oneYear;
} }
@@ -967,22 +982,7 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
@Override @Override
public Map<Boolean, String> validSignUpInfoForHMC(String loginName, TheRapyRecuperationEnroll enrollInfo) { public Map<Boolean, String> validSignUpInfoForHMC(String loginName, TheRapyRecuperationEnroll enrollInfo) {
//配置信息 TheRapyRecuperationConfig config = getConfig();
TheRapyRecuperationConfig config;
// 丛redis里面去配置信息
String configRedis = redisService.get(RedisConstant.REDIS_KEY_THE_RAPY_RECU_CONFIG_CACHE);
if (StrUtil.isNotBlank(configRedis)) {
try {
config = JSONUtil.toBean(configRedis, TheRapyRecuperationConfig.class);
} catch (Exception e) {
config = dao().fetch(TheRapyRecuperationConfig.class);
redisService.set(RedisConstant.REDIS_KEY_THE_RAPY_RECU_CONFIG_CACHE, JSONUtil.toJsonStr(config));
}
} else {
config = dao().fetch(TheRapyRecuperationConfig.class);
redisService.set(RedisConstant.REDIS_KEY_THE_RAPY_RECU_CONFIG_CACHE, JSONUtil.toJsonStr(config));
}
Sys_user user = dao().fetch(Sys_user.class, Cnd.where("loginname", "=", loginName)); Sys_user user = dao().fetch(Sys_user.class, Cnd.where("loginname", "=", loginName));
//判断是否在报名范围内 //判断是否在报名范围内
@@ -1002,13 +1002,15 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
Integer activityGroupId = config.getActivityGroupId(); Integer activityGroupId = config.getActivityGroupId();
// 省外限制模式 // 省外限制模式
String outsideQuotaMode = config.getOutsideQuotaMode(); String outsideQuotaMode = config.getOutsideQuotaMode();
// 判断是不是修改其他线路
String editOther = enrollInfo.getEditOther();
//如果报旅行社 //如果报旅行社
if (StrUtil.isNotBlank(enrollInfo.getTakePartInTravelAgencyId())) { if (StrUtil.isNotBlank(enrollInfo.getTakePartInTravelAgencyId())) {
if(StrUtil.isNotBlank(enrollInfo.getId())) { if(StrUtil.isNotBlank(enrollInfo.getId())) {
return Map.of(true, "成功"); return Map.of(true, "成功");
} }
Map<Boolean, String> oneYear = this.validCountOneYear(loginName, travelFrequency); Map<Boolean, String> oneYear = this.validCountOneYear(loginName, travelFrequency, editOther);
if (oneYear != null) { if (oneYear != null) {
return oneYear; return oneYear;
} }
@@ -1016,7 +1018,7 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
//如果报酒店 //如果报酒店
if (StrUtil.isNotBlank(enrollInfo.getTakePartInBaseManagementId()) && StrUtil.isBlank(enrollInfo.getId())) { if (StrUtil.isNotBlank(enrollInfo.getTakePartInBaseManagementId()) && StrUtil.isBlank(enrollInfo.getId())) {
Map<Boolean, String> oneYear = this.validCountOneYear(loginName, travelFrequency); Map<Boolean, String> oneYear = this.validCountOneYear(loginName, travelFrequency, editOther);
if (oneYear != null) { if (oneYear != null) {
return oneYear; return oneYear;
} }
@@ -1076,7 +1078,7 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
TheRapyRecuperationType trrt = regionTypeLineMap.get(lineInfo.getRegionalNature()); TheRapyRecuperationType trrt = regionTypeLineMap.get(lineInfo.getRegionalNature());
if (StrUtil.isBlank(enrollInfo.getId()) && StrUtil.isNotBlank(enrollInfo.getTakePartInLineId())) { if (StrUtil.isBlank(enrollInfo.getId()) && StrUtil.isNotBlank(enrollInfo.getTakePartInLineId())) {
Map<Boolean, String> oneYear = this.validCountOneYear(loginName, travelFrequency); Map<Boolean, String> oneYear = this.validCountOneYear(loginName, travelFrequency, editOther);
if (oneYear != null && oneYear.containsKey(false)) { if (oneYear != null && oneYear.containsKey(false)) {
return oneYear; return oneYear;
} }
@@ -1111,7 +1113,9 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
commonCnd.and("r.isNormal", "=", true); commonCnd.and("r.isNormal", "=", true);
commonCnd.and("stateId", "not in", Lang.array(TheRapyRecuperationState.UNITFAIL, TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.SCHOOLFAIL)); commonCnd.and("stateId", "not in", Lang.array(TheRapyRecuperationState.UNITFAIL, TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.SCHOOLFAIL));
commonCnd.and("signingUptime", "<=", DateUtil.now()); commonCnd.and("signingUptime", "<=", DateUtil.now());
if (StrUtil.isNotBlank(editOther)) {
commonCnd.and("r.id", "!=", editOther);
}
//今年是否报名,不管省内省外 //今年是否报名,不管省内省外
Cnd nowYearCnd = commonCnd.clone(); Cnd nowYearCnd = commonCnd.clone();
@@ -1127,13 +1131,11 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
twoYearOutSql.setCondition(twoYearOutCnd); twoYearOutSql.setCondition(twoYearOutCnd);
List<NutMap> twoYearOutMapList = listMap(twoYearOutSql); List<NutMap> twoYearOutMapList = listMap(twoYearOutSql);
//今年是否报名,不管报省内还是省外,还是旅行社 //今年是否报名,不管报省内还是省外,还是旅行社
if (nowYearMapList.size() >= travelFrequency) { if (nowYearMapList.size() >= travelFrequency) {
return Map.of(false, "您已报名其他线路"); return Map.of(false, "您已报名其他线路");
} }
//省外线路判断 //省外线路判断
if (trrt.getValue() == TheRapyRecuperationType.provinceOutLine.getValue()) { if (trrt.getValue() == TheRapyRecuperationType.provinceOutLine.getValue()) {
//三年内有没有参加过省外 //三年内有没有参加过省外
@@ -1168,6 +1170,10 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
if (enrollList.size() >= result) { if (enrollList.size() >= result) {
return Map.of(false, "已报人数超过" + (proportion * 100) + "%,不能报名"); return Map.of(false, "已报人数超过" + (proportion * 100) + "%,不能报名");
} }
} else if ("fixedUser".equals(outsideQuotaMode)) {
if (!config.getFixedUserList().contains(ShiroUtil.getUserId())) {
return Map.of(false, "您不在省外报名人员范围内,如有疑问请及时联系校工会");
}
} else if ("unionRatio".equals(outsideQuotaMode)) { } else if ("unionRatio".equals(outsideQuotaMode)) {
// 分工会名额限制 // 分工会名额限制
String unionId = Vi.getUnionId(); String unionId = Vi.getUnionId();
@@ -1263,66 +1269,65 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
} }
//判断一年报几次 //判断一年报几次
public Map<Boolean, String> validCountOneYear(String loginName, int travelFrequency) { public Map<Boolean, String> validCountOneYear(String loginName, int travelFrequency, String editOther) {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
cnd.and("loginName", "=", loginName); cnd.and("loginName", "=", loginName);
cnd.and("isNormal", "=", true); cnd.and("isNormal", "=", true);
cnd.and("YEAR(signingUptime)", "=", io.v.nutz.base.utils.DateUtil.getYear()); cnd.and("YEAR(signingUptime)", "=", io.v.nutz.base.utils.DateUtil.getYear());
int joinCount = dao().count(TheRapyRecuperationEnroll.class, cnd); int joinCount = dao().count(TheRapyRecuperationEnroll.class, cnd);
if (joinCount >= travelFrequency) { if (joinCount >= travelFrequency && StrUtil.isBlank(editOther)) {
// Sql sql = Sqls.create("""
Sql sql = Sqls.create(""" // SELECT
SELECT // us.id,
us.id, // line.regionalNature
line.regionalNature // FROM
FROM // the_rapy_recuperation_line_union_select us
the_rapy_recuperation_line_union_select us // LEFT JOIN the_rapy_recuperation_line line ON line.id = us.lineId
LEFT JOIN the_rapy_recuperation_line line ON line.id = us.lineId // WHERE
WHERE // YEAR(us.signUpStartTime) = YEAR(NOW())
YEAR(us.signUpStartTime) = YEAR(NOW()) // """);
"""); // List<NutMap> usList = listMap(sql);
List<NutMap> usList = listMap(sql); //
// List<String> unionInSelectIds = usList.stream().filter(v -> "省内".equals(v.getString("regionalNature"))).map(v -> v.getString("id")).toList();
List<String> unionInSelectIds = usList.stream().filter(v -> "省内".equals(v.getString("regionalNature"))).map(v -> v.getString("id")).toList(); // List<String> unionOutSelectIds = usList.stream().filter(v -> "省外".equals(v.getString("regionalNature"))).map(v -> v.getString("id")).toList();
List<String> unionOutSelectIds = usList.stream().filter(v -> "省外".equals(v.getString("regionalNature"))).map(v -> v.getString("id")).toList(); //
//
//// List<TheRapyRecuperationLine> inList = dao().query(TheRapyRecuperationLine.class, Cnd.where("regionalNature", "=", "省内"));
// List<TheRapyRecuperationLine> inList = dao().query(TheRapyRecuperationLine.class, Cnd.where("regionalNature", "=", "省内")); //// List<TheRapyRecuperationLineUnionSelect> unionInSelects = dao().query(TheRapyRecuperationLineUnionSelect.class, Cnd.where("lineId", "in", inList.stream().map(TheRapyRecuperationLine::getId).collect(Collectors.toList())));
// List<TheRapyRecuperationLineUnionSelect> unionInSelects = dao().query(TheRapyRecuperationLineUnionSelect.class, Cnd.where("lineId", "in", inList.stream().map(TheRapyRecuperationLine::getId).collect(Collectors.toList()))); //// List<TheRapyRecuperationLine> outList = dao().query(TheRapyRecuperationLine.class, Cnd.where("regionalNature", "=", "省外"));
// List<TheRapyRecuperationLine> outList = dao().query(TheRapyRecuperationLine.class, Cnd.where("regionalNature", "=", "省外")); //// List<TheRapyRecuperationLineUnionSelect> unionOutSelects = dao().query(TheRapyRecuperationLineUnionSelect.class, Cnd.where("lineId", "in", outList.stream().map(TheRapyRecuperationLine::getId).collect(Collectors.toList())));
// List<TheRapyRecuperationLineUnionSelect> unionOutSelects = dao().query(TheRapyRecuperationLineUnionSelect.class, Cnd.where("lineId", "in", outList.stream().map(TheRapyRecuperationLine::getId).collect(Collectors.toList()))); // //是否选择省外
//是否选择省外 // int inCount = dao().count("the_rapy_recuperation_enroll", Cnd.where("loginName", "=", ShiroUtil.getPrincipalProperty("loginname"))
int inCount = dao().count("the_rapy_recuperation_enroll", Cnd.where("loginName", "=", ShiroUtil.getPrincipalProperty("loginname")) // .and("takePartInLineId", "in", unionInSelectIds)
.and("takePartInLineId", "in", unionInSelectIds) // .and("isNormal", "=", true)
.and("isNormal", "=", true) // .and("YEAR(signingUptime)", "=", io.v.nutz.base.utils.DateUtil.getYear()));
.and("YEAR(signingUptime)", "=", io.v.nutz.base.utils.DateUtil.getYear())); // //是否报省外
//是否报省外 // int outCount = dao().count("the_rapy_recuperation_enroll", Cnd.where("loginName", "=", ShiroUtil.getPrincipalProperty("loginname"))
int outCount = dao().count("the_rapy_recuperation_enroll", Cnd.where("loginName", "=", ShiroUtil.getPrincipalProperty("loginname")) // .and("takePartInLineId", "in", unionOutSelectIds)
.and("takePartInLineId", "in", unionOutSelectIds) // .and("isNormal", "=", true)
.and("isNormal", "=", true) // .and("YEAR(signingUptime)", "=", io.v.nutz.base.utils.DateUtil.getYear()));
.and("YEAR(signingUptime)", "=", io.v.nutz.base.utils.DateUtil.getYear())); // //是否报旅行社
//是否报旅行社 // int travelCount = dao().count("the_rapy_recuperation_enroll", Cnd.where("loginName", "=", ShiroUtil.getPrincipalProperty("loginname"))
int travelCount = dao().count("the_rapy_recuperation_enroll", Cnd.where("loginName", "=", ShiroUtil.getPrincipalProperty("loginname")) // .and(Cnd.exps("takePartInLineId", "is", null).or("takePartInLineId", "=", ""))
.and(Cnd.exps("takePartInLineId", "is", null).or("takePartInLineId", "=", "")) // .and("isNormal", "=", true)
.and("isNormal", "=", true) // .and("takePartInTravelAgencyId", "is not", null)
.and("takePartInTravelAgencyId", "is not", null) // .and("YEAR(signingUptime)", "=", io.v.nutz.base.utils.DateUtil.getYear()));
.and("YEAR(signingUptime)", "=", io.v.nutz.base.utils.DateUtil.getYear())); // //是否报酒店
//是否报酒店 // int hotelCount = dao().count("the_rapy_recuperation_enroll", Cnd.where("loginName", "=", ShiroUtil.getPrincipalProperty("loginname"))
int hotelCount = dao().count("the_rapy_recuperation_enroll", Cnd.where("loginName", "=", ShiroUtil.getPrincipalProperty("loginname")) // .and("takePartInLineId", "is", null).and("isNormal", "=", true)
.and("takePartInLineId", "is", null).and("isNormal", "=", true) // .and("takePartInBaseManagementId", "is not", null)
.and("takePartInBaseManagementId", "is not", null) // .and("YEAR(signingUptime)", "=", io.v.nutz.base.utils.DateUtil.getYear()));
.and("YEAR(signingUptime)", "=", io.v.nutz.base.utils.DateUtil.getYear())); // String str = "";
String str = ""; // if (inCount > 0) {
if (inCount > 0) { // str = "省内线路";
str = "省内线路"; // } else if (outCount > 0) {
} else if (outCount > 0) { // str = "省外线路";
str = "省外线路"; // } else if (travelCount > 0) {
} else if (travelCount > 0) { // str = "旅行社";
str = "旅行社"; // } else if (hotelCount > 0) {
} else if (hotelCount > 0) { // str = "酒店";
str = "酒店"; // }
}
return Map.of(false, "您已报过其他线路,如有疑问请联系分工会主席!"); return Map.of(false, "您已报过其他线路,如有疑问请联系分工会主席!");
} }
return Map.of(true, "成功"); return Map.of(true, "成功");
@@ -1401,7 +1406,8 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
GROUP_CONCAT(ec.userName) as companionUserNames, GROUP_CONCAT(ec.userName) as companionUserNames,
l.lotName, l.lotName,
au.stateName, au.stateName,
au.stateColor au.stateColor,
COUNT(ec.id) AS companionCount
FROM FROM
the_rapy_recuperation_enroll e the_rapy_recuperation_enroll e
LEFT JOIN sys_union gh ON gh.id = e.takePartInUnionId LEFT JOIN sys_union gh ON gh.id = e.takePartInUnionId
@@ -1477,9 +1483,14 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
* @return {@link TheRapyRecuperationEnroll} * @return {@link TheRapyRecuperationEnroll}
*/ */
@Override @Override
public TheRapyRecuperationEnroll findSignUpInfoById(String id) { public TheRapyRecuperationEnroll findSignUpInfoById(String id, String editOther) {
TheRapyRecuperationEnroll enroll = fetch(id); if (StrUtil.isNotBlank(editOther)) {
return fetchLinks(enroll, "companionList|bedInfo"); TheRapyRecuperationEnroll enroll = fetch(editOther);
return fetchLinks(enroll, "companionList|bedInfo");
} else {
TheRapyRecuperationEnroll enroll = fetch(id);
return fetchLinks(enroll, "companionList|bedInfo");
}
} }
/** /**
@@ -1571,4 +1582,41 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
} }
return new ArrayList<>(); return new ArrayList<>();
} }
@Override
public TheRapyRecuperationConfig getConfig() {
//配置信息
TheRapyRecuperationConfig config;
// 丛redis里面去配置信息
String configRedis = redisService.get(RedisConstant.REDIS_KEY_THE_RAPY_RECU_CONFIG_CACHE);
if (StrUtil.isNotBlank(configRedis)) {
try {
config = JSONUtil.toBean(configRedis, TheRapyRecuperationConfig.class);
} catch (Exception e) {
config = dao().fetch(TheRapyRecuperationConfig.class);
// 如果是特定人员报名,将这些人存在redis里边,方便查询
if ("fixedUser".equals(config.getOutsideQuotaMode())) {
Sql sql = Sqls.create("select userId from the_rapy_recuperation_can_apply_out_user");
sql.setCallback(Sqls.callback.strList());
dao().execute(sql);
List<String> stringList = sql.getList(String.class);
config.setFixedUserList(stringList);
}
redisService.set(RedisConstant.REDIS_KEY_THE_RAPY_RECU_CONFIG_CACHE, JSONUtil.toJsonStr(config));
}
} else {
config = dao().fetch(TheRapyRecuperationConfig.class);
// 如果是特定人员报名,将这些人存在redis里边,方便查询
if ("fixedUser".equals(config.getOutsideQuotaMode())) {
Sql sql = Sqls.create("select userId from the_rapy_recuperation_can_apply_out_user");
sql.setCallback(Sqls.callback.strList());
dao().execute(sql);
List<String> stringList = sql.getList(String.class);
config.setFixedUserList(stringList);
}
redisService.set(RedisConstant.REDIS_KEY_THE_RAPY_RECU_CONFIG_CACHE, JSONUtil.toJsonStr(config));
}
return config;
}
} }
@@ -1,193 +1,179 @@
<template> <template>
<div> <div>
<el-tabs tab-position="top" v-model="activeName" v-loading="loading"> <el-tabs tab-position="top" v-model="activeName" v-loading="loading">
<el-tab-pane label="报名信息" name="1"> <el-tab-pane label="报名信息" name="1">
<div class="panel panel-default mt20" style="border: none"> <div class="panel panel-default mt20" style="border: none">
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none"> <div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
<h3 class="panel-title"> <h3 class="panel-title">
本人信息 本人信息
</h3> </h3>
</div> </div>
<el-descriptions :column="2" border class="viewTable"> <el-descriptions :column="2" border class="viewTable">
<el-descriptions-item label="工号">{{ viewData.loginName }}</el-descriptions-item> <el-descriptions-item label="工号">{{ viewData.loginName }}</el-descriptions-item>
<el-descriptions-item label="姓名">{{ viewData.userName }}</el-descriptions-item> <el-descriptions-item label="姓名">{{ viewData.userName }}</el-descriptions-item>
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item> <el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
<el-descriptions-item label="身份证号">{{ viewData.idCard }}</el-descriptions-item> <el-descriptions-item label="身份证号">{{ viewData.idCard }}</el-descriptions-item>
<el-descriptions-item label="单位">{{ viewData.unitName }}</el-descriptions-item> <el-descriptions-item label="单位">{{ viewData.unitName }}</el-descriptions-item>
<el-descriptions-item label="工会">{{ viewData.unionName }}</el-descriptions-item> <el-descriptions-item label="工会">{{ viewData.unionName }}</el-descriptions-item>
<!-- <el-descriptions-item label="是否转入转出"> <!-- <el-descriptions-item label="是否转入转出">
<span class="label label-primary"> <span class="label label-primary">
<sapn v-if="viewData.takePartInUnionId!=union_id">转出报名</sapn> <sapn v-if="viewData.takePartInUnionId!=union_id">转出报名</sapn>
<sapn v-else-if="viewData.selfUnionId!=union_id">转入报名</sapn> <sapn v-else-if="viewData.selfUnionId!=union_id">转入报名</sapn>
<sapn v-else>本公会报名</sapn> <sapn v-else>本公会报名</sapn>
</span> </span>
</el-descriptions-item>--> </el-descriptions-item>-->
<el-descriptions-item label="报名时间">{{ viewData.signingUptime }}</el-descriptions-item> <el-descriptions-item label="报名时间">{{ viewData.signingUptime }}</el-descriptions-item>
<el-descriptions-item label="参加活动时间">{{ <el-descriptions-item label="参加活动时间">{{
viewData.specificTime ? viewData.specificTime : '暂未更新' viewData.specificTime ? viewData.specificTime : "暂未更新"
}} }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="实际出行时间">{{ <el-descriptions-item label="实际出行时间">{{
viewData.takePartInTime ? viewData.takePartInTime : '暂未更新' viewData.takePartInTime ? viewData.takePartInTime : "暂未更新"
}} }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="线路名称">{{ viewData.lineName }}</el-descriptions-item> <el-descriptions-item label="线路名称">{{ viewData.lineName }}</el-descriptions-item>
<el-descriptions-item label="旅行社名称">{{ viewData.travelAgencyName }}</el-descriptions-item> <el-descriptions-item label="旅行社名称">{{ viewData.travelAgencyName }}</el-descriptions-item>
<el-descriptions-item label="是否含随行人"> <el-descriptions-item label="是否含随行人">
<span class="label label-primary"> <span class="label label-primary">
{{ (viewData.companionList && viewData.companionList.length > 0) ? '携带' : '未携带' }} {{ (viewData.companionList && viewData.companionList.length > 0) ? "携带" : "未携带" }}
</span> </span>
</el-descriptions-item> </el-descriptions-item>
<template v-if="modifyConfig.bedInfo && viewData.bedInfo">
<el-descriptions-item label="房间信息">
<span class="label label-primary">
{{ viewData.bedInfo.bedType }}
</span>
</el-descriptions-item>
<!-- <el-descriptions-item label="床位">{{
viewData.bedInfo.bedNum ? viewData.bedInfo.bedNum : '暂无'
}}
</el-descriptions-item>
<el-descriptions-item label="意向拼床人">
{{ viewData.bedInfo.otherSleepUser ? viewData.bedInfo.otherSleepUser : '暂无' }}
</el-descriptions-item>-->
</template>
</el-descriptions>
</div>
<div v-if="modifyConfig.familyInfo == 2" class="panel panel-default mt20" style="border: none"> <template v-if="viewData.takePartInLineId">
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none"> <el-descriptions-item label="房间数量">{{ viewData.roomCountName }}</el-descriptions-item>
<h3 class="panel-title"> <el-descriptions-item label="用房备注">{{ viewData.roomRemarkName + (viewData.roommate ? viewData.roommate : "") }}</el-descriptions-item>
随行人信息 <el-descriptions-item label="其他备注" span="2">{{ viewData.otherRemark }}</el-descriptions-item>
</h3>
</div>
<div class="panel-body" style="border: 1px solid rgb(235, 238, 245)">
<el-table :data="viewData.companionList">
<el-table-column label="姓名" prop="userName"></el-table-column>
<el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="年龄" prop="age"></el-table-column>
<el-table-column label="身份证号" prop="idCard"></el-table-column>
<el-table-column label="手机号" prop="mobile"></el-table-column>
<!-- <el-table-column label="床型" prop="bedType">
<template scope="{row}">
{{ row.bedInfo.bedType }}
</template>
</el-table-column>
<el-table-column label="床位" prop="bedNum">
<template scope="{row}">
{{ row.bedInfo.bedNum }}
</template>
</el-table-column>
<el-table-column label="意向拼床人" prop="otherSleepUser">
<template scope="{row}">
{{ row.bedInfo.otherSleepUser ? row.bedInfo.otherSleepUser : '暂无' }}
</template>
</el-table-column>-->
<el-table-column label="关系" prop="relation"></el-table-column>
</el-table>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="所属分工会审核信息" name="2" v-if="viewData.selfUnionAuditId && viewData.selfUnionAudit">
<div class="panel panel-default mt20" style="border: none">
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
<h3 class="panel-title">
审核信息
</h3>
</div>
<el-descriptions :column="2" border class="viewTable"> <el-descriptions-item label="第二意向线路">{{ viewData.intentionLineName }}</el-descriptions-item>
<el-descriptions-item label="审核人"> <el-descriptions-item label="携带家属人数">{{ viewData.carryFamilyNum }}</el-descriptions-item>
{{ viewData.selfUnionAudit.username }}({{ viewData.selfUnionAudit.loginname }}) </template>
</el-descriptions-item> </el-descriptions>
<el-descriptions-item label="审核时间">{{ viewData.selfUnionAudit.auditTime }}</el-descriptions-item> </div>
<el-descriptions-item label="审核意见">{{ viewData.selfUnionAudit.auditOpinion }}</el-descriptions-item>
</el-descriptions> <div v-if="modifyConfig.familyInfo == 2" class="panel panel-default mt20" style="border: none">
</div> <div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
</el-tab-pane> <h3 class="panel-title">
<el-tab-pane label="意向线路分工会审核信息" name="3" v-if="viewData.joinLineUnionAuditId && viewData.joinLineUnionAudit"> 随行人信息
<div class="panel panel-default mt20" style="border: none"> </h3>
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none"> </div>
<h3 class="panel-title"> <div class="panel-body" style="border: 1px solid rgb(235, 238, 245)">
审核信息 <el-table :data="viewData.companionList">
</h3> <el-table-column label="姓名" prop="userName"></el-table-column>
</div> <el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="年龄" prop="age"></el-table-column>
<el-table-column label="身份证号" prop="idCard"></el-table-column>
<el-table-column label="手机号" prop="mobile"></el-table-column>
<el-table-column label="身高" prop="height"></el-table-column>
</el-table>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="所属分工会审核信息" name="2"
v-if="viewData.selfUnionAuditId && viewData.selfUnionAudit">
<div class="panel panel-default mt20" style="border: none">
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
<h3 class="panel-title">
审核信息
</h3>
</div>
<el-descriptions :column="2" border class="viewTable"> <el-descriptions :column="2" border class="viewTable">
<el-descriptions-item label="审核人"> <el-descriptions-item label="审核人">
{{ viewData.joinLineUnionAudit.username }}({{ viewData.joinLineUnionAudit.loginname }}) {{ viewData.selfUnionAudit.username }}({{ viewData.selfUnionAudit.loginname }})
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="审核时间">{{ viewData.joinLineUnionAudit.auditTime }}</el-descriptions-item> <el-descriptions-item label="审核时间">{{ viewData.selfUnionAudit.auditTime }}
<el-descriptions-item label="审核意见">{{ viewData.joinLineUnionAudit.auditOpinion }}</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="审核意见">{{ viewData.selfUnionAudit.auditOpinion }}
</el-descriptions-item>
</el-descriptions> </el-descriptions>
</div> </div>
</el-tab-pane> </el-tab-pane>
<slot name="handle"></slot> <el-tab-pane label="意向线路分工会审核信息" name="3"
</el-tabs> v-if="viewData.joinLineUnionAuditId && viewData.joinLineUnionAudit">
</div> <div class="panel panel-default mt20" style="border: none">
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
<h3 class="panel-title">
审核信息
</h3>
</div>
<el-descriptions :column="2" border class="viewTable">
<el-descriptions-item label="审核人">
{{ viewData.joinLineUnionAudit.username }}({{ viewData.joinLineUnionAudit.loginname }})
</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ viewData.joinLineUnionAudit.auditTime }}
</el-descriptions-item>
<el-descriptions-item label="审核意见">{{ viewData.joinLineUnionAudit.auditOpinion }}
</el-descriptions-item>
</el-descriptions>
</div>
</el-tab-pane>
<slot name="handle"></slot>
</el-tabs>
</div>
</template> </template>
<script> <script>
module.exports = { module.exports = {
props: { props: {
union_id: { union_id: {
type: String, type: String,
default: "", default: ""
}
}, },
}, components: {
components: { "line-info": httpVueLoader("/components/theRapyRecuperation/LineInfo.vue")
'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue') },
}, data() {
data() { return {
return { activeName: "1",
activeName: "1", viewData: {
viewData: { companionList: [],
companionList: [], bedInfo: {}
bedInfo: {}, },
}, loading: false,
loading: false, modifyConfig: {}
modifyConfig:{} }
},
methods: {
async findOne(id) {
this.loading = true
const resp = await $.get("/platform/theRapyRecuperation/TheRapyAudit/findOne", { id })
this.loading = false
if (resp.code === 0) {
this.viewData = resp.data.viewData
} else {
this.viewData = {}
this.$notify.warning({ title: "警告", message: resp.data })
}
},
openView(id) {
this.findOne(id)
},
openAudit(id, activeName) {
this.findOne(id)
this.activeName = activeName
},
async getModifyConfig() {
const res = await $.post("/platform/theRapyRecuperation/TheRapyConfig/findOne")
if (res.code === 0) {
this.modifyConfig = res.data
}
}
},
async created() {
await this.getModifyConfig()
} }
},
methods: {
async findOne(id) {
this.loading = true
const resp = await $.get("/platform/theRapyRecuperation/TheRapyAudit/findOne", {id})
this.loading = false
if (resp.code === 0) {
this.viewData = resp.data.viewData
} else {
this.viewData = {}
this.$notify.warning({title: '警告', message: resp.data})
}
},
openView(id) {
this.findOne(id)
},
openAudit(id, activeName) {
this.findOne(id)
this.activeName = activeName
},
async getModifyConfig() {
const res = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
if (res.code === 0) {
this.modifyConfig = res.data
}
},
},
async created() {
await this.getModifyConfig();
}
} }
</script> </script>
@@ -116,6 +116,28 @@
<script> <script>
const APP_DOMAIN = "${AppDomain!}" const APP_DOMAIN = "${AppDomain!}"
const FILE_DOMAIN = "${AppFileDomain!}" const FILE_DOMAIN = "${AppFileDomain!}"
const MOBILE_APP = new Vue({
el: '#container',
data() {
return{}
},
methods: {
async flushCache() {
const day = moment().format('YYYY-MM-DD')
if (window.localStorage.getItem('flushCache') !== day) {
debugger
const { code, msg } = await $.post('/platform/home/clearCache')
if (code === 0) {
location.reload()
}
window.localStorage.setItem('flushCache', day)
}
}
},
created() {
this.flushCache()
}
})
</script> </script>
<div id="container"> <div id="container">
@@ -197,6 +197,14 @@ layout("/mobile/platform.html"){
background-color: white; background-color: white;
} }
.sign_div {
background-color: white;
margin-bottom: 16px;
padding: 18px;
border-radius: 6px;
box-shadow: 0 8px 12px #ebedf0;
}
.pdf_div { .pdf_div {
padding-bottom: 70px; padding-bottom: 70px;
height: calc(100vh - 46px - 170px - 60px - 24px); height: calc(100vh - 46px - 170px - 60px - 24px);
@@ -265,12 +273,12 @@ layout("/mobile/platform.html"){
<template v-if="baseData.isNormal==0&&baseData.isNormalFalse>0"> <template v-if="baseData.isNormal==0&&baseData.isNormalFalse>0">
<van-button @click="join" <van-button @click="join"
class="join"> class="join">
{{ (fromUrlByMy == 'editDo') ? '修改报名' : '我要报名' }} {{ (fromUrlByMy == 'editDo' || editOther) ? '修改报名' : '我要报名' }}
</van-button> </van-button>
</template> </template>
<template v-else> <template v-else>
<van-button v-if="moment().unix() <= moment(baseData.signUpEndTime).unix()" @click="join" class="join"> <van-button v-if="moment().unix() <= moment(baseData.signUpEndTime).unix()" @click="join" class="join">
{{ (fromUrlByMy == 'editDo') ? '修改报名' : '我要报名' }} {{ (fromUrlByMy == 'editDo' || editOther) ? '修改报名' : '我要报名' }}
</van-button> </van-button>
<van-button v-if="moment().unix() > moment(baseData.signUpEndTime).unix()" class="join">报名结束</van-button> <van-button v-if="moment().unix() > moment(baseData.signUpEndTime).unix()" class="join">报名结束</van-button>
</template> </template>
@@ -279,10 +287,10 @@ layout("/mobile/platform.html"){
<!--报名弹出框--> <!--报名弹出框-->
<van-popup v-model:show="joinPopup" position="right" class="joinPopup"> <van-popup v-model:show="joinPopup" position="right" class="joinPopup">
<van-nav-bar @click-left="joinPopup = false" fixed left-arrow placeholder title="疗休养报名"></van-nav-bar> <van-nav-bar @click-left="joinPopup = false" fixed left-arrow placeholder title="疗休养报名"></van-nav-bar>
<van-notice-bar <van-notice-bar color="#1989fa" background="#ecf9ff" left-icon="info-o">
background="#ecf9ff" color="red" left-icon="volume-o" 温馨提示:报名定点疗休养需签署【定点自由行申请表】,填写基础信息和签字后会同步在申请表中,点击查看按钮可展示申请表
text="温馨提示:报名定点疗休养需签署【定点自由行申请表】,填写基础信息和签字后会同步在申请表中,点击查看按钮可展示申请表" </van-notice-bar>
></van-notice-bar>
<div class="join_content"> <div class="join_content">
<van-form @submit="joinSubmit"> <van-form @submit="joinSubmit">
@@ -319,137 +327,31 @@ layout("/mobile/platform.html"){
</div> </div>
</div> </div>
<!--床位信息--> <div class="sign_div">
<!--<div class="van-doc-card" style="margin-bottom: 16px"> <div style="display: flex">
<div></div> <van-checkbox v-model="hasReadSafe" shape="square" @change="readChangeSafe" class="mr10"></van-checkbox>
<div class="van-card-header"> 我已查看
房间信息 <span @click="openReadSafe" style="color: #0e5996; text-decoration: underline">
《安全告知书》
</span>
<van-tag @click="openReadSafe" size="large" type="primary" color="#1867b0">查看</van-tag>
</div> </div>
<div class="van-card-body"> <div style="display: flex; margin-top: 10px" v-if="formData.specificTime && formData.sign">
<van-field :rules="[{ required: true, message: '请选择是否包房' }]" label="是否包房" name="bedType"> <van-checkbox v-model="hasRead" shape="square" @change="readChange" class="mr10"></van-checkbox>
<template #input> 我已查看
<van-radio-group direction="horizontal" v-model="formData.bedInfo.bedType"> <span @click="openRead" style="color: #0e5996; text-decoration: underline">
<van-radio name="包房" shape="square">包房</van-radio> 《定点自由行申请表》
<van-radio name="不包房" shape="square">不包房</van-radio> </span>
</van-radio-group> <van-tag @click="openRead" size="large" type="primary" color="#1867b0">查看</van-tag>
</template>
</van-field>
<div>
<span style="color: red;margin-left: 14px;font-size: 14px">包房需自费;不包房两位老师一间且随机分配</span>
</div>
&lt;!&ndash;<van-field @click="self = true; roomVisible = true" readonly is-link label="房间" name="bedType"
placeholder="请选择房间" v-model="formData.bedInfo.bedType"
:rules="[{ required: true }]"></van-field>&ndash;&gt;
&lt;!&ndash;<van-field v-if="formData.bedInfo.bedType == '标准间'" @click="self = true; bedVisible = true"
readonly is-link label="床位"
name="bedNum" placeholder="请选择床位" v-model="formData.bedInfo.bedNum"
:rules="[{ required: true }]"></van-field>
<van-field v-if="formData.bedInfo.bedType == '标准间'" :rules="[{ validator, message: '请选择是否拼房' }]"
label="是否拼房" name="validator">
<template #input>
<van-radio-group direction="horizontal" v-model="formData.bedInfo.isSleepTogether">
<van-radio :name="true" shape="square">是</van-radio>
<van-radio :name="false" shape="square">否</van-radio>
</van-radio-group>
</template>
</van-field>
<van-field v-if="formData.bedInfo.bedType == '标准间' && formData.bedInfo.isSleepTogether == true"
label="意向拼房人" name="otherSleepUser" placeholder="多个拼房人请用,隔开"
v-model="formData.bedInfo.otherSleepUser"
:rules="[{ required: true }]"></van-field>&ndash;&gt;
</div> </div>
</div> </div>
&lt;!&ndash;随行人信息&ndash;&gt; <div class="submitButton" v-if="showButton">
<div v-if="index != 2" class="van-doc-card" style="margin-bottom: 16px">
<div></div>
<div class="van-card-header"
style="display: flex; justify-content: space-between; align-items: center">
<span style="float:left;">随行人信息</span>
<div>
<van-tag @click="delCompanion" size="large" type="primary" color="lightgrey">删除随行人</van-tag>
<van-tag @click="addCompanion" size="large" type="primary" color="#1867b0">添加随行人</van-tag>
</div>
</div>
<template v-if="configData.familyInfo === 2">
<div>
<span style="color: red;margin-left: 20px;font-size: 14px">限填写3岁以上70岁以下随行人</span>
</div>
<div v-if="formData.companionList.length > 0" class="van-card-body">
<van-tabs v-model="active" type="card" color="#0e78c5" animated>
<van-tab v-for="item, index in formData.companionList" :title="'随行人' + (index + 1)">
<van-field label="姓名" name="userName" placeholder="请填写姓名" v-model="item.userName"
:rules="[{ required: true }]"></van-field>
&lt;!&ndash;<van-field label="工号" name="loginName" placeholder="若没有工号,请忽略此项" v-model="item.loginName"></van-field>&ndash;&gt;
<van-field label="年龄" name="age" placeholder="请填写年龄" v-model="item.age"
type="digit" :rules="[{ required: true }]"></van-field>
<van-field :rules="[{ required: true, message: '请选择性别' }]" label="性别" name="validator">
<template #input>
<van-radio-group direction="horizontal" v-model="item.sex">
<van-radio name="男" shape="square">男</van-radio>
<van-radio name="女" shape="square">女</van-radio>
</van-radio-group>
</template>
</van-field>
<van-field label="身份证件" name="idCard" placeholder="请填写身份证号"
:rules="[{ required: true }]" maxlength="18"
@input="getAgeAndSex(item)" v-model="item.idCard"></van-field>
<van-field label="手机号" name="mobile" placeholder="请填写手机号"
:rules="[{ required: true }]" type="digit"
v-model="item.mobile"></van-field>
<van-field @click="companionVisible = true" readonly is-link label="与本人关系"
name="relation"
placeholder="随行人与本人关系" v-model="item.relation"
:rules="[{ required: true }]"></van-field>
&lt;!&ndash;<van-field @click="self = false; roomVisible = true" readonly is-link label="房间"
name="bedType" placeholder="请选择房间"
v-model="item.bedInfo.bedType"></van-field>
<div style="font-size: 8px; color:orangered; padding-left: 16px; padding-bottom: 4px">
提醒:如果跟报名人员同一房间,无须选择!
</div>
<van-field v-if="item.bedInfo.bedType == '标准间'" @click="self = false; bedVisible = true"
readonly is-link label="床位"
name="bedNum" placeholder="请选择床位" v-model="item.bedInfo.bedNum"></van-field>
<van-field v-if="item.bedInfo.bedType == '标准间'"
:rules="[{ validator, message: '请选择是否拼房' }]" label="是否拼房">
<template #input>
<van-radio-group direction="horizontal" v-model="item.bedInfo.isSleepTogether">
<van-radio :name="true" shape="square">是</van-radio>
<van-radio :name="false" shape="square">否</van-radio>
</van-radio-group>
</template>
</van-field>
<van-field v-if="item.bedInfo.bedType == '标准间' && item.bedInfo.isSleepTogether == true"
label="意向拼房人" name="otherSleepUser" placeholder="多个拼房人请用,隔开"
v-model="item.bedInfo.otherSleepUser"></van-field>&ndash;&gt;
</van-tab>
</van-tabs>
</div>
<div v-if="formData.companionList.length == 0" class="companionList_empty_text">
<span>
如有随行人出行,请添加随行人
</span>
</div>
</template>
<template v-else>
<van-field label="家属数量" name="familyNumber" placeholder="请填写家属数量" v-model="formData.familyNumber"
type="digit" :rules="[{ required: true }]"></van-field>
</template>
</div>-->
<div class="submitButton">
<van-button class="join join_submit">提交报名</van-button> <van-button class="join join_submit">提交报名</van-button>
</div> </div>
</van-form> </van-form>
<div class="submitButton" style="margin-top: -10px">
<van-button class="join join_submit" @click="showApplyForm">查看定点自由行申请表</van-button>
</div>
</div> </div>
</van-popup> </van-popup>
<!--房间类型弹出框--> <!--房间类型弹出框-->
@@ -482,21 +384,25 @@ layout("/mobile/platform.html"){
</van-picker> </van-picker>
</van-popup> </van-popup>
<van-calendar title="出行日期选择" v-model="timeVisible" :show-confirm="false" <van-calendar title="出行日期选择" v-model="timeVisible" :show-confirm="false"
:min-date="minDate" :max-date="maxDate" :min-date="minDate" :max-date="maxDate"
ref="cal" @confirm="calConfirm" :style="{ height: '660px' }"></van-calendar> ref="cal" @confirm="calConfirm" :style="{ height: '660px' }"></van-calendar>
<van-action-sheet v-model="readVisibleSafe" title="安全告知书">
<van-divider :style="{ color: 'orange', fontSize: '12px' }">上下滑动翻页,单击查看,再单击返回</van-divider>
<div id="readFile" style="height: 530px; overflow-y: auto"></div>
<div class="submitButton">
<van-button @click="onReadSafe" class="join join_submit" style="margin: 10px 0">我已阅读确认</van-button>
</div>
</van-action-sheet>
<van-popup v-model="applyFormShow" closeable position="right" <van-action-sheet v-model="readVisible" title="定点自由行申请表">
:style="{ height: '100%',width: '100%' }" get-container="body"> <van-divider :style="{ color: 'orange', fontSize: '12px' }">上下滑动翻页,单击查看,再单击返回</van-divider>
<van-sticky> <div id="basePdf" style="height: 530px; overflow-y: auto"></div>
<van-nav-bar @click-left="applyFormShow = false" fixed left-arrow placeholder title="定点自由行申请表"></van-nav-bar> <div class="submitButton">
</van-sticky> <van-button @click="onRead" class="join join_submit" style="margin: 10px 0">我已阅读确认</van-button>
</div>
<div id="basePdf" style="height: 80vh"></div> </van-action-sheet>
</van-popup>
</div> </div>
<script> <script>
@@ -512,6 +418,7 @@ layout("/mobile/platform.html"){
mixins: [mobileMixins], mixins: [mobileMixins],
data() { data() {
return { return {
showButton: true,
isPdf: false, isPdf: false,
active: 0, active: 0,
minDate: new Date(2010, 0, 1), minDate: new Date(2010, 0, 1),
@@ -552,23 +459,66 @@ layout("/mobile/platform.html"){
timeVisible: false, timeVisible: false,
// 定点疗休养申请表相关 // 定点疗休养申请表相关
applyFormShow: false, readVisible: false,
hasRead: false,
clickRead: false,
// 修改其他线路相关
editOther: '',
// 安全告知书相关
readVisibleSafe: false,
clickReadSafe: false,
hasReadSafe: '',
} }
}, },
methods: { methods: {
// 展示安全告知书
async openReadSafe(){
this.readVisibleSafe = true
this.$nextTick(() => {
if (this.configData.files && this.configData.files.length > 0) {
pdfh5 = new Pdfh5('#readFile', {
pdfurl: CREATE_PREVIEW_URL(this.configData.files[0].id),
})
}
})
},
onReadSafe() {
this.clickReadSafe = true
this.hasReadSafe = true
this.readVisibleSafe = false
},
readChangeSafe() {
if (this.clickReadSafe === false) {
this.$toast('请先阅读安全告知书')
this.hasReadSafe = false
}
},
// 展示申请表 // 展示申请表
async showApplyForm(){ async openRead(){
const url = '/platform/theRapyRecuperation/baseManagement/showBaseApplyPdf?baseName=' const url = '/platform/theRapyRecuperation/baseManagement/showBaseApplyPdf?baseName='
+ (this.formData.baseName ? this.formData.baseName : '') + '&specificTime=' + (this.formData.specificTime ? this.formData.specificTime : '') + (this.formData.baseName ? this.formData.baseName : '') + '&specificTime=' + (this.formData.specificTime ? this.formData.specificTime : '')
+ '&sign=' + (this.formData.sign ? this.configData.sign : '') + '&idCard=' + (this.formData.idCard ? this.formData.idCard : '') + '&sign=' + (this.formData.sign ? this.configData.sign : '') + '&idCard=' + (this.formData.idCard ? this.formData.idCard : '')
this.applyFormShow = true this.readVisible = true
this.$nextTick(() => { this.$nextTick(() => {
pdfh5 = new Pdfh5('#basePdf', { pdfh5 = new Pdfh5('#basePdf', {
pdfurl: url, pdfurl: url,
}); });
}) })
}, },
onRead() {
this.clickRead = true
this.hasRead = true
this.readVisible = false
},
readChange() {
if (this.clickRead === false) {
this.$toast('请先阅读定点自由行申请表')
this.hasRead = false
}
},
// 出行日期相关 // 出行日期相关
calConfirm(date) { calConfirm(date) {
console.log(date) console.log(date)
@@ -613,26 +563,29 @@ layout("/mobile/platform.html"){
return value != null return value != null
}, },
async joinSubmit() { async joinSubmit() {
const cloneData = clone(this.formData) if (this.hasReadSafe === false) {
cloneData.companionList.forEach((item, index) => { this.$toast('请先阅读安全告知书')
if (item.userName === '') { return
cloneData.companionList.splice(index, 1) }
} if (this.hasRead === false) {
}) this.$toast('请先阅读定点自由行申请表')
return
}
if (!this.formData.sign) { if (!this.formData.sign) {
this.$toast.fail('请签字') this.$toast.fail('请签字')
return return
} }
this.formData.editOther = this.editOther ? this.editOther : ''
const cloneData = clone(this.formData)
vant.Dialog.confirm({ vant.Dialog.confirm({
title: '温馨提示', title: '温馨提示',
message: '请确认您已阅览【定点自由行申请表】,是否确认提交报名', message: '请确保信息填写无误,是否确认提交?',
confirmButtonText: '确认', confirmButtonText: '提交',
cancelButtonText: '取消', cancelButtonText: '取消',
}).then(async () => { }).then(async () => {
const toast = vant.Toast.loading({ this.showButton = false
const loading = vant.Toast.loading({
duration: 0, duration: 0,
forbidClick: true, forbidClick: true,
overlay: true, overlay: true,
@@ -641,21 +594,21 @@ layout("/mobile/platform.html"){
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/doSignUpForBaseManagement', { const resp = await $.post('/platform/theRapyRecuperation/line/enroll/doSignUpForBaseManagement', {
enroll: JSON.stringify(cloneData), enroll: JSON.stringify(cloneData),
}) })
setTimeout(() => { loading.clear()
if (resp.code === 0) { if (resp.code === 0) {
toast.message = '提交成功' vant.Dialog.alert({
toast.type = 'success' title: '提示',
} else { message: '报名成功',
toast.message = resp.msg }).then(() => {
toast.type = 'fail' location.replace('/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.index)
} })
setTimeout(() => { } else {
toast.clear() vant.Dialog.alert({
}, 500) title: '提示',
if (resp.code === 0) { message: resp.msg,
location.href = '/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.index })
} this.showButton = true
}, 500) }
}).catch(() => { }).catch(() => {
// on cancel // on cancel
}) })
@@ -671,7 +624,8 @@ layout("/mobile/platform.html"){
enroll: JSON.stringify({ enroll: JSON.stringify({
takePartInBaseManagementId: this.baseData.id, takePartInBaseManagementId: this.baseData.id,
isNormal: this.baseData.isNormal, isNormal: this.baseData.isNormal,
id: this.enrollId id: this.enrollId,
editOther: this.editOther
}), }),
}) })
if (re.code !== 0) { if (re.code !== 0) {
@@ -682,18 +636,24 @@ layout("/mobile/platform.html"){
return return
} }
if (this.fromUrlByMy !== 'editDo') { if (this.fromUrlByMy !== 'editDo') {
this.formData = { if (this.editOther) {
userName: "${@shiro.getPrincipalProperty('username')}", this.$set(this.formData, 'baseName', this.baseData.baseName)
loginName: "${@shiro.getPrincipalProperty('loginname')}", this.$set(this.formData, 'takePartInLineId', null)
unionName: "${@shiro.getPrincipalProperty('union').getUnionname()}", this.$set(this.formData, 'takePartInUnionId', null)
idCard: "${@shiro.getPrincipalProperty('idcard')}", this.$set(this.formData, 'takePartInTravelAgencyId', null)
mobile: "${@shiro.getPrincipalProperty('mobile')}", this.$set(this.formData, 'takePartInBaseManagementId', this.baseData.id)
baseName: this.baseData.baseName, } else {
takePartInBaseManagementId: this.baseData.id, this.formData = {
companionList: [], userName: "${@shiro.getPrincipalProperty('username')}",
bedInfo: {}, loginName: "${@shiro.getPrincipalProperty('loginname')}",
unionName: "${@shiro.getPrincipalProperty('union').getUnionname()}",
idCard: "${@shiro.getPrincipalProperty('idcard')}",
mobile: "${@shiro.getPrincipalProperty('mobile')}",
baseName: this.baseData.baseName,
takePartInBaseManagementId: this.baseData.id,
companionList: [],
}
} }
// this.$set(this.formData.bedInfo, 'bedType', '大床房')
} }
if(this.index == 3) { if(this.index == 3) {
await this.getTimeArray() await this.getTimeArray()
@@ -704,7 +664,6 @@ layout("/mobile/platform.html"){
const res = await $.get('/platform/theRapyRecuperation/baseManagement/selectBaseAllInfo', { const res = await $.get('/platform/theRapyRecuperation/baseManagement/selectBaseAllInfo', {
id: this.id id: this.id
}) })
debugger
if (res.code === 0) { if (res.code === 0) {
this.baseData = res.data this.baseData = res.data
this.formData.baseName = this.baseData.baseName this.formData.baseName = this.baseData.baseName
@@ -730,19 +689,14 @@ layout("/mobile/platform.html"){
}, },
//修改时查询报名信息,进行回显 //修改时查询报名信息,进行回显
async findSignUpInfoById() { async findSignUpInfoById() {
const res = await $.post('/platform/theRapyRecuperation/line/enroll/findSignUpInfoById/' + this.enrollId) const res = await $.post('/platform/theRapyRecuperation/line/enroll/findSignUpInfoById', {
id: this.enrollId,
editOther: this.editOther
})
if (res.code === 0) { if (res.code === 0) {
this.formData = res.data this.formData = res.data
if (this.formData.bedInfo === null) { this.formData.bedInfo = {}
this.formData.bedInfo = {} this.formData.companionList = []
}
if (this.formData.companionList) {
this.formData.companionList.forEach(item => {
if (item.bedInfo === null) {
item.bedInfo = {}
}
})
}
this.$forceUpdate() this.$forceUpdate()
} }
}, },
@@ -858,13 +812,16 @@ layout("/mobile/platform.html"){
}, },
}, },
async created() { async created() {
// 修改其他线路标识
this.editOther = getQueryString('editOther') ? getQueryString('editOther') : ''
this.id = getQueryString('id') ? getQueryString('id') : '' this.id = getQueryString('id') ? getQueryString('id') : ''
this.enrollId = getQueryString('enrollId') ? getQueryString('enrollId') : '' this.enrollId = getQueryString('enrollId') ? getQueryString('enrollId') : ''
this.index = getQueryString('index') ? getQueryString('index') : '' this.index = getQueryString('index') ? getQueryString('index') : ''
await this.getConfigData() await this.getConfigData()
//编辑传出来的参数 //编辑传出来的参数
this.fromUrlByMy = getQueryString('fromUrlByMy') ? getQueryString('fromUrlByMy') : '' this.fromUrlByMy = getQueryString('fromUrlByMy') ? getQueryString('fromUrlByMy') : ''
if (this.enrollId) { if (this.enrollId || this.editOther) {
await this.findSignUpInfoById() await this.findSignUpInfoById()
} }
await this.getData() await this.getData()
@@ -881,50 +838,30 @@ layout("/mobile/platform.html"){
}) })
}catch (e) { }catch (e) {
this.isPdf = true this.isPdf = true
document.addEventListener('click', function (event) {
// 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG' && event.target.className !== 'top_icon') {
vant.ImagePreview({
images: [event.target.src],
closeable: true,
})
}
})
} }
this.$nextTick(() => {
pdfh5.on("complete", function () {
const imgDoc = document.querySelectorAll('img')
let array = []
let classArray = []
imgDoc.forEach(o => {
if(o.getAttribute('class') !== 'top_icon') {
classArray.push(o.getAttribute('class'))
array.push(o.getAttribute('src'))
}
})
document.addEventListener('click', function (event) {
// 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG' && event.target.className !== 'top_icon') {
const index = classArray.indexOf(event.target.className)
if(index !== -1) {
vant.ImagePreview({
images: array,
startPosition: index,
closeable: true,
})
}
}
})
})
})
}, },
mounted() { mounted() {
window.addEventListener('scroll', this.scrollToTop) window.addEventListener('scroll', this.scrollToTop)
document.addEventListener('click', function (event) { document.addEventListener('click', function (event) {
const imgDoc = document.querySelectorAll('img')
let array = []
let classArray = []
imgDoc.forEach(o => {
if(o.getAttribute('class') !== 'top_icon') {
classArray.push(o.getAttribute('class'))
array.push(o.getAttribute('src'))
}
})
// 打印被点击的元素标签名和 class // 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG') { if (event.target.tagName === 'IMG' && event.target.className !== 'top_icon') {
vant.ImagePreview([event.target.src]) const index = array.indexOf(event.target.currentSrc)
if(index !== -1) {
vant.ImagePreview({
images: array,
startPosition: index,
closeable: true,
})
}
} }
}) })
}, },
@@ -15,10 +15,6 @@ layout("/mobile/platform.html"){
display: block; display: block;
} }
.backTop {
display: none !important;
}
.header { .header {
padding: 10px 10px 10px 10px; padding: 10px 10px 10px 10px;
} }
@@ -219,6 +215,14 @@ layout("/mobile/platform.html"){
color: white !important; color: white !important;
} }
.sign_div {
background-color: white;
margin-bottom: 16px;
padding: 18px;
border-radius: 6px;
box-shadow: 0 8px 12px #ebedf0;
}
table { table {
width: 100% width: 100%
} }
@@ -343,7 +347,7 @@ layout("/mobile/platform.html"){
<!--底部报名按钮--> <!--底部报名按钮-->
<div class="footer" v-if="fromUrlByMy != 'edit'"> <div class="footer" v-if="fromUrlByMy != 'edit'">
<van-button v-if="moment().unix() <= moment(lineData.signUpEndTime).unix()" @click="join" <van-button v-if="moment().unix() <= moment(lineData.signUpEndTime).unix()" @click="join"
class="join">{{ enrollId ? '修改报名' : '我要报名' }} class="join">{{ (enrollId || editOther) ? '修改报名' : '我要报名' }}
</van-button> </van-button>
<van-button v-if="moment().unix() > moment(lineData.signUpEndTime).unix()" class="join">报名结束 <van-button v-if="moment().unix() > moment(lineData.signUpEndTime).unix()" class="join">报名结束
</van-button> </van-button>
@@ -382,16 +386,15 @@ layout("/mobile/platform.html"){
style="display: flex; justify-content: space-between; align-items: center"> style="display: flex; justify-content: space-between; align-items: center">
<span style="float:left;">随行人信息</span> <span style="float:left;">随行人信息</span>
<div> <div>
<van-tag @click="delCompanion" size="large" type="primary" color="lightgrey">删除随行人</van-tag> <van-tag @click="delCompanion" size="large" type="primary" color="#1867b0">删除随行人</van-tag>
<van-tag @click="addCompanion" size="large" type="primary" <van-tag @click="addCompanion" size="large" type="primary" color="#1867b0">添加随行人</van-tag>
color="#1867b0">添加随行人</van-tag>
</div> </div>
</div> </div>
<template v-if="configData.familyInfo === 2"> <template v-if="configData.familyInfo === 2">
<div> <div>
<van-notice-bar color="#1989fa" background="#ecf9ff" left-icon="info-o"> <van-notice-bar color="#1989fa" background="#ecf9ff" left-icon="info-o">
温馨提醒:限填写3岁以上70岁以下随行人。 温馨提醒:限填写1岁以上70岁以下随行人。
</van-notice-bar> </van-notice-bar>
</div> </div>
<div v-if="formData.companionList.length > 0" class="van-card-body"> <div v-if="formData.companionList.length > 0" class="van-card-body">
@@ -403,8 +406,10 @@ layout("/mobile/platform.html"){
<van-field label="身份证件" name="idCard" placeholder="输入身份证自动填充年龄与性别" <van-field label="身份证件" name="idCard" placeholder="输入身份证自动填充年龄与性别"
:rules="[{ required: true }]" maxlength="18" :rules="[{ required: true }]" maxlength="18"
@input="getAgeAndSex(item)" v-model="item.idCard"></van-field> @input="getAgeAndSex(item)" v-model="item.idCard"></van-field>
<!--<van-field label="年龄" name="age" placeholder="请填写年龄" v-model="item.age"
type="digit" :rules="[{ required: true }]" @input="(val) => {clearContent()}"></van-field>-->
<van-field label="年龄" name="age" placeholder="请填写年龄" v-model="item.age" <van-field label="年龄" name="age" placeholder="请填写年龄" v-model="item.age"
type="digit" :rules="[{ required: true }]" @input="(val) => {clearContent()}"></van-field> type="digit" :rules="[{ required: true }]"></van-field>
<van-field :rules="[{ required: true, message: '请选择性别' }]" label="性别" name="validator"> <van-field :rules="[{ required: true, message: '请选择性别' }]" label="性别" name="validator">
<template #input> <template #input>
<van-radio-group direction="horizontal" v-model="item.sex"> <van-radio-group direction="horizontal" v-model="item.sex">
@@ -423,14 +428,14 @@ layout("/mobile/platform.html"){
<span>厘米</span> <span>厘米</span>
</template> </template>
</van-field> </van-field>
<van-field v-if="item.age !== '' && item.age <= 12" :rules="[{ required: true, message: '请选择床位信息' }]" label="床位信息" name="needBed"> <!-- <van-field v-if="item.age !== '' && item.age <= 12" :rules="[{ required: true, message: '请选择床位信息' }]" label="床位信息" name="needBed">-->
<template #input> <!-- <template #input>-->
<van-radio-group @change="(val) => {needBedChange(item)}" direction="horizontal" v-model="item.needBed"> <!-- <van-radio-group @change="(val) => {needBedChange(item)}" direction="horizontal" v-model="item.needBed">-->
<van-radio :name="true" shape="square">需要床位</van-radio> <!-- <van-radio :name="true" shape="square">需要床位</van-radio>-->
<van-radio :name="false" shape="square">无需床位</van-radio> <!-- <van-radio :name="false" shape="square">无需床位</van-radio>-->
</van-radio-group> <!-- </van-radio-group>-->
</template> <!-- </template>-->
</van-field> <!-- </van-field>-->
<!--<van-field @click="companionVisible = true" readonly is-link label="与本人关系" <!--<van-field @click="companionVisible = true" readonly is-link label="与本人关系"
name="relation" name="relation"
placeholder="随行人与本人关系" v-model="item.relation" placeholder="随行人与本人关系" v-model="item.relation"
@@ -475,13 +480,41 @@ layout("/mobile/platform.html"){
<van-field label="拼房人" name="roommate" :rules="[{ required: true }]" <van-field label="拼房人" name="roommate" :rules="[{ required: true }]"
required v-if="formData.roomRemark === 2" required v-if="formData.roomRemark === 2"
placeholder="请填写拼房人" v-model="formData.roommate"></van-field> placeholder="请填写拼房人" v-model="formData.roommate"></van-field>
<van-field label="其他备注" name="otherRemark" placeholder="如有需要请填写"
v-model="formData.otherRemark"></van-field>
</div> </div>
</div> </div>
<div class="submitButton"> <div class="van-doc-card" style="margin-bottom: 16px">
<van-button class="join join_submit">提交报名</van-button> <div></div>
<div class="van-card-header">
若此线路未达到成团要求,您的第二意向线路是
</div>
<div class="van-card-body">
<van-field @click="intentionLineVisible = true" readonly is-link label="意向线路" name="intentionLineName"
placeholder="请选择意向线路" v-model="formData.intentionLineName"
required :rules="[{ required: true }]"></van-field>
<van-field @click="carryFamilyVisible = true" readonly is-link label="家属人数" name="carryFamilyNum"
placeholder="请选择携带家属人数" v-model="formData.carryFamilyNum"
required :rules="[{ required: true }]"></van-field>
</div>
</div> </div>
<div class="sign_div">
<div style="display: flex">
<van-checkbox v-model="hasRead" shape="square" @change="readChange" class="mr10"></van-checkbox>
我已查看
<span @click="openRead" style="color: #0e5996; text-decoration: underline">
《安全告知书》
</span>
<van-tag @click="openRead" size="large" type="primary" color="#1867b0">查看</van-tag>
</div>
</div>
<div class="submitButton" v-if="showButton">
<van-button class="join join_submit">提交报名</van-button>
</div>
</van-form> </van-form>
</div> </div>
@@ -528,6 +561,34 @@ layout("/mobile/platform.html"){
</van-picker> </van-picker>
</van-popup> </van-popup>
<van-popup position="bottom" round v-model="intentionLineVisible">
<van-picker
title="第二意向线路" show-toolbar
value-key="label"
:columns="intentionLineColumns"
@confirm="(val) => {formData.intentionLineName = val.label; formData.intentionLineId = val.value; intentionLineVisible = false}"
@cancel="intentionLineVisible = false">
</van-picker>
</van-popup>
<van-popup position="bottom" round v-model="carryFamilyVisible">
<van-picker
title="携带家属数量" show-toolbar
:columns="carryFamilyColumns"
@confirm="(value, index) => {formData.carryFamilyNum = value; carryFamilyVisible = false}"
@cancel="carryFamilyVisible = false">
</van-picker>
</van-popup>
<van-action-sheet v-model="readVisible" title="安全告知书">
<van-divider :style="{ color: 'orange', fontSize: '12px' }">上下滑动翻页,单击查看,再单击返回</van-divider>
<div id="readFile" style="height: 530px; overflow-y: auto"></div>
<div class="submitButton">
<van-button @click="onRead" class="join join_submit" style="margin: 10px 0">我已阅读确认</van-button>
</div>
</van-action-sheet>
</div> </div>
<script> <script>
@@ -544,6 +605,7 @@ layout("/mobile/platform.html"){
mixins: [mobileMixins], mixins: [mobileMixins],
data() { data() {
return { return {
showButton: true,
roomRemarkVisible: false, roomRemarkVisible: false,
isPdf: false, isPdf: false,
isLoad: false, isLoad: false,
@@ -556,11 +618,12 @@ layout("/mobile/platform.html"){
], ],
roomColumns: [], roomColumns: [],
basicRoomRemarkColumns: [ basicRoomRemarkColumns: [
{label: '携带家属,1间房', value: 1}, {label: '携带家属,1间房', value: 1},
{label: '已与其他老师自由组合共住1间房', value: 2}, {label: '已与其他老师自由组合共住1间房', value: 2},
{label: '1人包房1间,额外支付单房差', value: 3}, {label: '1间,额外支付单房差', value: 3},
{label: '正常报名', value: 4}, {label: '正常报名', value: 4},
{label: '随机拼房', value: 5}, {label: '随机拼房', value: 5},
{label: '2间房,额外支付单房差', value: 6},
], ],
roomRemarkColumns: [], roomRemarkColumns: [],
bedColumns: ['1', '2'], bedColumns: ['1', '2'],
@@ -595,9 +658,45 @@ layout("/mobile/platform.html"){
signType: '', signType: '',
takePartInTravelAgencyId: '', takePartInTravelAgencyId: '',
queryYear: '', queryYear: '',
// 修改其他线路相关
editOther: '',
// 第二意向线路相关
intentionLineVisible: false,
intentionLineColumns: [],
carryFamilyVisible: false,
carryFamilyColumns: [0, 1, 2, 3],
// 阅读安全告知书相关
readVisible: false,
hasRead: false,
clickRead: false,
} }
}, },
methods: { methods: {
openRead() {
this.readVisible = true
this.$nextTick(() => {
if (this.configData.files && this.configData.files.length > 0) {
const pdf = new Pdfh5('#readFile', {
pdfurl: CREATE_PREVIEW_URL(this.configData.files[0].id),
})
this.readPDFPicture(pdf)
}
})
},
onRead() {
this.clickRead = true
this.hasRead = true
this.readVisible = false
},
readChange() {
if (this.clickRead === false) {
this.$toast('请先阅读安全告知书')
this.hasRead = false
}
},
roomRemarkClick() { roomRemarkClick() {
if(!this.formData.roomCount) { if(!this.formData.roomCount) {
this.$toast('请先选择房间数量') this.$toast('请先选择房间数量')
@@ -624,7 +723,6 @@ layout("/mobile/platform.html"){
const sex = this.getGenderFromIdCard(value) const sex = this.getGenderFromIdCard(value)
this.$set(item, "sex", sex) this.$set(item, "sex", sex)
} catch (error) { } catch (error) {
console.log(error)
} }
}, },
roomCancel() { roomCancel() {
@@ -653,13 +751,19 @@ layout("/mobile/platform.html"){
return value != null return value != null
}, },
async joinSubmit() { async joinSubmit() {
if (this.hasRead === false) {
this.$toast('请先阅读安全告知书')
return
}
this.formData.editOther = this.editOther ? this.editOther : ''
const cloneData = clone(this.formData) const cloneData = clone(this.formData)
cloneData.companionList.forEach((item, index) => { cloneData.companionList.forEach((item, index) => {
if (item.userName === '') { if (item.userName === '') {
cloneData.companionList.splice(index, 1) cloneData.companionList.splice(index, 1)
} }
}) })
if (cloneData.companionList) { if (cloneData.companionList) {
for (let i = 0; i < cloneData.companionList.length; i++) { for (let i = 0; i < cloneData.companionList.length; i++) {
const companion = cloneData.companionList[i]; const companion = cloneData.companionList[i];
@@ -675,8 +779,8 @@ layout("/mobile/platform.html"){
this.$toast('随行人'+ (i+1) +'的身份证不正确') this.$toast('随行人'+ (i+1) +'的身份证不正确')
return return
} else { } else {
// 判断companion.age,是不是在3到70岁之间,不是就提示 // 判断companion.age,是不是在1到70岁之间,不是就提示
if (companion.age < 3 || companion.age > 70) { if (companion.age < 1 || companion.age > 70) {
this.$toast('随行人'+ (i+1) +'的年龄超出限制,请添加其他联系人') this.$toast('随行人'+ (i+1) +'的年龄超出限制,请添加其他联系人')
return return
} }
@@ -693,46 +797,40 @@ layout("/mobile/platform.html"){
url = '/platform/theRapyRecuperation/line/enroll/doSignUpForLine' url = '/platform/theRapyRecuperation/line/enroll/doSignUpForLine'
} }
const loading = vant.Toast.loading({ const msg = this.editOther ? ('此操作会取消之前报名线路,并修改为【'+ this.formData.lineName +'】是否确认?') : '请确保信息填写无误,是否确认?'
duration: 0, vant.Dialog.confirm({
forbidClick: true, title: '温馨提示',
overlay: true, message: msg,
message: '努力提交中', confirmButtonText: '确认',
}) cancelButtonText: '取消',
const resp = await $.post(url, { }).then(async () => {
enroll: JSON.stringify(cloneData), this.showButton = false
}) const loading = vant.Toast.loading({
loading.clear() duration: 0,
if (resp.code === 0) { forbidClick: true,
vant.Dialog.alert({ overlay: true,
title: '提示', message: '努力提交中',
message: '报名成功',
}).then(() => {
location.replace('/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.index)
}) })
} else {
vant.Dialog.alert({
title: '提示',
message: resp.msg,
}).then(() => {
})
}
// setTimeout(() => { const resp = await $.post(url, {
// if (resp.code === 0) { enroll: JSON.stringify(cloneData),
// toast.message = '提交成功' })
// toast.type = 'success' loading.clear()
// } else { if (resp.code === 0) {
// toast.message = resp.msg vant.Dialog.alert({
// toast.type = 'fail' title: '提示',
// } message: '报名成功',
// setTimeout(() => { }).then(() => {
// toast.clear() location.replace('/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.index)
// }, 500) })
// if (resp.code === 0) { } else {
// location.replace('/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.index) vant.Dialog.alert({
// } title: '提示',
// }, 1000) message: resp.msg,
})
this.showButton = true
}
})
}, },
addCompanion() { addCompanion() {
if(this.formData.companionList.length === 3) { if(this.formData.companionList.length === 3) {
@@ -752,7 +850,8 @@ layout("/mobile/platform.html"){
id: this.enrollId, id: this.enrollId,
isNormal: this.lineData.isNormal, isNormal: this.lineData.isNormal,
takePartInLineId: this.lineData.usId, takePartInLineId: this.lineData.usId,
takePartInUnionId: this.takePartInUnionId takePartInUnionId: this.takePartInUnionId,
editOther: this.editOther
}), }),
}) })
if (re.code !== 0) { if (re.code !== 0) {
@@ -775,20 +874,26 @@ layout("/mobile/platform.html"){
return return
} }
if (this.fromUrlByMy !== 'editDo') { if (this.fromUrlByMy !== 'editDo') {
this.formData = { if (this.editOther) {
userName: "${@shiro.getPrincipalProperty('username')}", this.$set(this.formData, 'lineName', this.lineData.lineName)
loginName: "${@shiro.getPrincipalProperty('loginname')}", this.$set(this.formData, 'takePartInLineId', this.lineData.usId)
unionName: "${@shiro.getPrincipalProperty('union').getUnionname()}", this.$set(this.formData, 'takePartInUnionId', this.takePartInUnionId)
idCard: "${@shiro.getPrincipalProperty('idcard')}", this.$set(this.formData, 'takePartInTravelAgencyId', null)
mobile: "${@shiro.getPrincipalProperty('mobile')}", this.$set(this.formData, 'takePartInBaseManagementId', null)
lineName: this.lineData.lineName, } else {
takePartInLineId: this.lineData.usId, this.formData = {
takePartInUnionId: this.takePartInUnionId, userName: "${@shiro.getPrincipalProperty('username')}",
companionList: [], loginName: "${@shiro.getPrincipalProperty('loginname')}",
bedInfo: {}, unionName: "${@shiro.getPrincipalProperty('union').getUnionname()}",
roomCount: null, idCard: "${@shiro.getPrincipalProperty('idcard')}",
mobile: "${@shiro.getPrincipalProperty('mobile')}",
lineName: this.lineData.lineName,
takePartInLineId: this.lineData.usId,
takePartInUnionId: this.takePartInUnionId,
companionList: [],
roomCount: null,
}
} }
this.$set(this.formData.bedInfo, 'bedType', '大床房')
} }
this.joinPopup = true this.joinPopup = true
}, },
@@ -824,8 +929,12 @@ layout("/mobile/platform.html"){
}, },
//修改时查询报名信息,进行回显 //修改时查询报名信息,进行回显
async findSignUpInfoById() { async findSignUpInfoById() {
const res = await $.post('/platform/theRapyRecuperation/line/enroll/findSignUpInfoById/' + this.enrollId) const res = await $.post('/platform/theRapyRecuperation/line/enroll/findSignUpInfoById', {
id: this.enrollId,
editOther: this.editOther
})
if (res.code === 0) { if (res.code === 0) {
console.log(res.data)
this.formData = res.data this.formData = res.data
if (this.formData.bedInfo === null) { if (this.formData.bedInfo === null) {
this.formData.bedInfo = {} this.formData.bedInfo = {}
@@ -838,6 +947,7 @@ layout("/mobile/platform.html"){
}) })
} }
this.$forceUpdate() this.$forceUpdate()
console.log(this.formData)
} }
}, },
async getConfigData() { async getConfigData() {
@@ -944,7 +1054,32 @@ layout("/mobile/platform.html"){
} }
}, },
updateRoomRemarkColumns() { updateRoomRemarkColumns() {
const roomCount = this.formData.roomCount; const { roomCount, companionList = [] } = this.formData;
const companionCount = companionList.length;
const roomCountStrategies = {
0.5: () => [2, 5],
1: () => {
if (companionCount === 0) return [3];
if (companionCount === 1) return [4];
return [1];
},
1.5: () => [1, 3],
2: () => companionCount < 3 ? [6] : [4]
};
const matchedValues = roomCountStrategies[roomCount]?.();
this.roomRemarkColumns = matchedValues !== undefined
? this.basicRoomRemarkColumns.filter(o => matchedValues.includes(o.value))
: [...this.basicRoomRemarkColumns]; // 默认处理:恢复基础列
// 如果最后的roomRemarkColumns的length只有1,直接默认第一个元素显示
if (this.roomRemarkColumns.length === 1) {
this.$set(this.formData, 'roomRemark', this.roomRemarkColumns[0].value)
this.$set(this.formData, 'roomRemarkName', this.roomRemarkColumns[0].label)
}
/*const roomCount = this.formData.roomCount;
const companions = this.formData.companionList || []; const companions = this.formData.companionList || [];
const needBedCount = companions.filter(o => o.age > 12 || o.needBed).length; const needBedCount = companions.filter(o => o.age > 12 || o.needBed).length;
const strategies = { const strategies = {
@@ -973,8 +1108,18 @@ layout("/mobile/platform.html"){
} else { } else {
// 默认处理:恢复基础列 // 默认处理:恢复基础列
this.roomRemarkColumns = [...this.basicRoomRemarkColumns]; this.roomRemarkColumns = [...this.basicRoomRemarkColumns];
}*/
},
async selectOpenLineList(){
if (this.id === this.formData.intentionLineId) {
this.$set(this.formData, 'intentionLineId', '')
this.$set(this.formData, 'intentionLineName', '')
} }
} const resp = await $.post('/platform/mobile/theRapyRecuperation/getOpenLineList', {id: this.id})
if (resp.code === 0) {
this.intentionLineColumns = resp.data
}
},
}, },
async created() { async created() {
const loading = this.$toast({ const loading = this.$toast({
@@ -985,6 +1130,9 @@ layout("/mobile/platform.html"){
type: 'loading', type: 'loading',
overlay: true overlay: true
}); });
// 获取是不是修改其他线路的参数
this.editOther = getQueryString('editOther') ? getQueryString('editOther') : ''
this.id = getQueryString('id') ? getQueryString('id') : '' this.id = getQueryString('id') ? getQueryString('id') : ''
this.queryYear = getQueryString('queryYear') ? getQueryString('queryYear') : '' this.queryYear = getQueryString('queryYear') ? getQueryString('queryYear') : ''
this.index = getQueryString('index') ? getQueryString('index') : '' this.index = getQueryString('index') ? getQueryString('index') : ''
@@ -995,7 +1143,7 @@ layout("/mobile/platform.html"){
this.fromUrlByMy = getQueryString('fromUrlByMy') ? getQueryString('fromUrlByMy') : '' this.fromUrlByMy = getQueryString('fromUrlByMy') ? getQueryString('fromUrlByMy') : ''
this.enrollId = getQueryString('enrollId') ? getQueryString('enrollId') : '' this.enrollId = getQueryString('enrollId') ? getQueryString('enrollId') : ''
this.takePartInUnionId = getQueryString('takePartInUnionId') ? getQueryString('takePartInUnionId') : '' this.takePartInUnionId = getQueryString('takePartInUnionId') ? getQueryString('takePartInUnionId') : ''
if (this.enrollId) { if (this.enrollId || this.editOther) {
await this.findSignUpInfoById() await this.findSignUpInfoById()
} }
if(!this.signType) { if(!this.signType) {
@@ -1005,6 +1153,8 @@ layout("/mobile/platform.html"){
} }
this.isLoad = true this.isLoad = true
await this.selectOpenLineList()
try { try {
const parser = new DOMParser(); const parser = new DOMParser();
const doc = parser.parseFromString(this.lineData.content, 'text/html'); const doc = parser.parseFromString(this.lineData.content, 'text/html');
@@ -1017,49 +1167,27 @@ layout("/mobile/platform.html"){
}) })
}catch (e) { }catch (e) {
this.isPdf = true this.isPdf = true
document.addEventListener('click', function (event) {
// 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG' && event.target.className !== 'top_icon') {
vant.ImagePreview({
images: [event.target.src],
closeable: true,
})
}
})
} }
this.$nextTick(() => {
pdfh5.on("complete", function () {
const imgDoc = document.querySelectorAll('img')
let array = []
let classArray = []
imgDoc.forEach(o => {
if(o.getAttribute('class') !== 'top_icon') {
classArray.push(o.getAttribute('class'))
array.push(o.getAttribute('src'))
}
})
document.addEventListener('click', function (event) {
// 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG' && event.target.className !== 'top_icon') {
const index = classArray.indexOf(event.target.className)
if(index !== -1) {
vant.ImagePreview({
images: array,
startPosition: index,
closeable: true,
})
}
}
})
})
})
loading.close() loading.close()
}, },
watch: { watch: {
'formData.companionList': { 'formData.companionList': {
handler(newVal) { handler(newVal) {
//过滤需要床位的,找大人或者小孩需要床位的 const { companionList = [] } = this.formData;
const companionCount = companionList.length;
const bedCount = 0.5 + (companionCount * 0.5);
const bedCountStrategies = {
0.5: () => this.basicRoomColumns.filter(o => o.value <= 1),
1: () => this.basicRoomColumns.filter(o => o.value === 1),
1.5: () => this.basicRoomColumns.filter(o => [1, 2].includes(o.value)),
2: () => this.basicRoomColumns.filter(o => o.value === 2)
};
this.roomColumns = bedCountStrategies[bedCount]?.() || [];
this.formData.carryFamilyNum = companionCount
/*//过滤需要床位的,找大人或者小孩需要床位的
const needBed = newVal.filter(o => o.age > 12 || o.needBed === true) const needBed = newVal.filter(o => o.age > 12 || o.needBed === true)
const bedCount = 0.5 + (needBed.length - needBed.length * 0.5) const bedCount = 0.5 + (needBed.length - needBed.length * 0.5)
console.log(bedCount) console.log(bedCount)
@@ -1067,12 +1195,12 @@ layout("/mobile/platform.html"){
this.roomColumns = this.basicRoomColumns.filter(o => o.value <= 1) this.roomColumns = this.basicRoomColumns.filter(o => o.value <= 1)
} else { } else {
this.roomColumns = this.basicRoomColumns.filter(o => Number.isInteger(bedCount) ? o.value === bedCount : o.value >= bedCount) this.roomColumns = this.basicRoomColumns.filter(o => Number.isInteger(bedCount) ? o.value === bedCount : o.value >= bedCount)
} }*/
}, },
deep: true deep: true
}, },
'formData.roomCount'(oldVal, newVal) { 'formData.roomCount'(oldVal, newVal) {
if(oldVal !== newVal) { if(newVal && oldVal !== newVal) {
this.$set(this.formData, 'roomRemark', '') this.$set(this.formData, 'roomRemark', '')
this.$set(this.formData, 'roomRemarkName', '') this.$set(this.formData, 'roomRemarkName', '')
} }
@@ -1081,6 +1209,28 @@ layout("/mobile/platform.html"){
}, },
mounted() { mounted() {
window.addEventListener('scroll', this.scrollToTop) window.addEventListener('scroll', this.scrollToTop)
document.addEventListener('click', function (event) {
const imgDoc = document.querySelectorAll('img')
let array = []
let classArray = []
imgDoc.forEach(o => {
if(o.getAttribute('class') !== 'top_icon') {
classArray.push(o.getAttribute('class'))
array.push(o.getAttribute('src'))
}
})
// 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG' && event.target.className !== 'top_icon') {
const index = array.indexOf(event.target.currentSrc)
if(index !== -1) {
vant.ImagePreview({
images: array,
startPosition: index,
closeable: true,
})
}
}
})
}, },
destroyed() { destroyed() {
window.removeEventListener('scroll', this.scrollToTop) window.removeEventListener('scroll', this.scrollToTop)
@@ -319,14 +319,13 @@ layout("/mobile/platform.html"){
</div> </div>
<div v-if="pageForm.theRapyRecuperationType == '3'"> <div v-if="pageForm.theRapyRecuperationType == '3'">
<van-row gutter="20" class="sign_button"> <van-row gutter="20" class="sign_button">
<van-col @click="" span="12" style="border-right: 1px lightgrey solid"></van-col> <van-col span="24" style="text-align: right">
<van-col span="12" style="text-align: right">
<van-button @click.stop="openSignUser(o, 'base')" round size="mini" type="info"> <van-button @click.stop="openSignUser(o, 'base')" round size="mini" type="info">
查看人员 查看人员
</van-button> </van-button>
<van-button @click.stop="findOne(o)" round size="mini" type="info" <van-button @click.stop="findOne(o)" round size="mini" type="info"
style="margin-right: 8px"> style="margin-right: 8px">
我要报名 {{ editOther ? '修改报名' : '我要报名' }}
</van-button> </van-button>
</van-col> </van-col>
</van-row> </van-row>
@@ -360,7 +359,7 @@ layout("/mobile/platform.html"){
<div> <div>
<van-button @click.stop="onSelect(item)" size="mini" type="info" <van-button @click.stop="onSelect(item)" size="mini" type="info"
style="margin-right: 8px"> style="margin-right: 8px">
点击报名 {{ editOther ? '修改报名' : '点击报名' }}
</van-button> </van-button>
</div> </div>
<div style="margin-top: 4px"> <div style="margin-top: 4px">
@@ -419,7 +418,8 @@ layout("/mobile/platform.html"){
selectLineList: [], selectLineList: [],
selectLinePopup: false, selectLinePopup: false,
// schoolTime: '', // 修改报名相关
editOther: '',
} }
}, },
methods: { methods: {
@@ -528,13 +528,14 @@ layout("/mobile/platform.html"){
localStorage.setItem("clickIndex", JSON.stringify({clickIndex: type})) localStorage.setItem("clickIndex", JSON.stringify({clickIndex: type}))
if (type !== 2 && type !== 3) { if (type !== 2 && type !== 3) {
location.href = '/platform/mobile/theRapyRecuperation/lineInfo?id=' + o.usId + '&index=' + this.pageForm.theRapyRecuperationType location.href = '/platform/mobile/theRapyRecuperation/lineInfo?id=' + o.usId + '&index=' + this.pageForm.theRapyRecuperationType
+ '&takePartInUnionId=' + o.takePartInUnionId + '&takePartInUnionId=' + o.takePartInUnionId + '&editOther=' + this.editOther
} else if (type === 3) { } else if (type === 3) {
location.href = '/platform/mobile/theRapyRecuperation/baseInfo?id=' + o.id + '&index=' + this.pageForm.theRapyRecuperationType location.href = '/platform/mobile/theRapyRecuperation/baseInfo?id=' + o.id + '&index=' + this.pageForm.theRapyRecuperationType + '&editOther=' + this.editOther
} else if(type === 2) { } else if(type === 2) {
const re = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo', { const re = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo', {
enroll: JSON.stringify({ enroll: JSON.stringify({
takePartInTravelAgencyId: o.id, takePartInTravelAgencyId: o.id,
editOther: this.editOther
}), }),
}) })
if (re.code !== 0) { if (re.code !== 0) {
@@ -545,7 +546,7 @@ layout("/mobile/platform.html"){
return return
} }
location.href = '/platform/mobile/theRapyRecuperation/lineInfo?id=' + o.usId + '&index=' + this.pageForm.theRapyRecuperationType location.href = '/platform/mobile/theRapyRecuperation/lineInfo?id=' + o.usId + '&index=' + this.pageForm.theRapyRecuperationType
+ '&takePartInUnionId=' + o.takePartInUnionId + '&signType=2' + '&takePartInTravelAgencyId=' + o.id + '&takePartInUnionId=' + o.takePartInUnionId + '&signType=2' + '&takePartInTravelAgencyId=' + o.id + '&editOther=' + this.editOther
} }
}, },
getData() { getData() {
@@ -561,6 +562,7 @@ layout("/mobile/platform.html"){
this.onLoad() this.onLoad()
}, },
async onLoad() { async onLoad() {
this.pageForm.editOther = this.editOther ? this.editOther : ''
const res = await $.post('/platform/theRapyRecuperation/line/enroll/pageData', this.pageForm) const res = await $.post('/platform/theRapyRecuperation/line/enroll/pageData', this.pageForm)
if (res.code === 0 && res.data) { if (res.code === 0 && res.data) {
@@ -607,6 +609,7 @@ layout("/mobile/platform.html"){
} }
}, },
async created() { async created() {
this.editOther = getQueryString('editOther') ? getQueryString('editOther') : ''
this.createYear() this.createYear()
await this.getModifyConfig() await this.getModifyConfig()
// await this.getSchoolTime() // await this.getSchoolTime()
@@ -305,7 +305,8 @@ layout("/mobile/platform.html"){
</div> </div>
<div class="mobile" v-if="![2715,2725,2735].includes(o.stateId)"> <div class="mobile" v-if="![2715,2725,2735].includes(o.stateId)">
<span v-if="configData.familyInfo === 1">随行家属:</span>{{o.companionUserNames ? o.companionUserNames : '无'}} <span v-if="configData.familyInfo === 1">随行家属:</span>{{o.companionUserNames ? o.companionUserNames : '无'}}
<span v-else>随行家属:</span>{{o.familyNumber}}人 <!-- <span v-else>随行家属:</span>{{o.familyNumber}}人-->
<span v-else>随行家属:</span>{{o.companionCount}}人
</div> </div>
<div class="mobile" v-else> <div class="mobile" v-else>
<span>审核状态:</span><span :style="'color: ' + o.stateColor">{{o.stateName}}</span> <span>审核状态:</span><span :style="'color: ' + o.stateColor">{{o.stateName}}</span>
@@ -365,7 +366,12 @@ layout("/mobile/platform.html"){
<van-button v-if="pageForm.theRapyRecuperationType != '2' && moment().unix() < moment(o.changeEndTime).unix() <van-button v-if="pageForm.theRapyRecuperationType != '2' && moment().unix() < moment(o.changeEndTime).unix()
&& ![2715,2725,2735].includes(o.stateId)" @click="edit(o)" && ![2715,2725,2735].includes(o.stateId)" @click="edit(o)"
type="info" size="small" color="#1867b0" :disabled="o.isTakePartIn == true || getDisabled(o)"> type="info" size="small" color="#1867b0" :disabled="o.isTakePartIn == true || getDisabled(o)">
&ensp; 修改报名信息
</van-button>
<van-button v-if="pageForm.theRapyRecuperationType != '2' && moment().unix() < moment(o.changeEndTime).unix()
&& ![2715,2725,2735].includes(o.stateId)" @click="editOther(o)"
type="info" size="small" color="#1867b0" :disabled="o.isTakePartIn == true || getDisabled(o)">
修改成其他线路
</van-button> </van-button>
<van-button type="info" size="small" color="#1867b0" @click="cancel(o)" <van-button type="info" size="small" color="#1867b0" @click="cancel(o)"
:disabled="getDisabled(o)"> :disabled="getDisabled(o)">
@@ -613,6 +619,9 @@ layout("/mobile/platform.html"){
'&index=' + this.pageForm.theRapyRecuperationType + '&enrollId=' + o.id + '&fromUrlByMy=editDo' '&index=' + this.pageForm.theRapyRecuperationType + '&enrollId=' + o.id + '&fromUrlByMy=editDo'
} }
}, },
async editOther(o) {
location.href = '/platform/mobile/theRapyRecuperation/mobileLineListPage?editOther=' + o.id
},
async cancel(o) { async cancel(o) {
if(this.pageForm.theRapyRecuperationType != '2') { if(this.pageForm.theRapyRecuperationType != '2') {
const re = await $.post('/platform/theRapyRecuperation/line/enroll/canDelete/' + o.id) const re = await $.post('/platform/theRapyRecuperation/line/enroll/canDelete/' + o.id)
@@ -217,8 +217,7 @@ layout("/layouts/platform.html"){
<table-tool label="人员列表" :app="this"> <table-tool label="人员列表" :app="this">
<template #func> <template #func>
<el-button size="medium" type="primary" @click="doExport" class="mr10" v-if="pageForm.state">导出 <el-button size="medium" type="primary" @click="doExport" class="mr10" v-if="pageForm.state">导出</el-button>
</el-button>
<el-button v-if="pageForm.state == 3" @click="doExportBaseApply(null)" <el-button v-if="pageForm.state == 3" @click="doExportBaseApply(null)"
class="mr10" size="medium" type="primary">申请表导出</el-button> class="mr10" size="medium" type="primary">申请表导出</el-button>
@@ -170,6 +170,13 @@ layout("/layouts/platform.html"){
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="承诺书" prop="files">
<file-upload :files.sync="formData.files"
:max="1"
:type="['pdf']"
></file-upload>
</el-form-item>
<vi-title title="标段管理"></vi-title> <vi-title title="标段管理"></vi-title>
<el-form-item label="标段"> <el-form-item label="标段">
<el-button type="primary" @click="formData.lots.push({})" <el-button type="primary" @click="formData.lots.push({})"
@@ -613,6 +620,9 @@ layout("/layouts/platform.html"){
}) })
const cloneData = clone(this.formData) const cloneData = clone(this.formData)
if (this.formData.files && this.formData.files.length > 0) {
cloneData.files = JSON.stringify(this.formData.files)
}
if (this.lotDeleteList && this.lotDeleteList.length > 0) { if (this.lotDeleteList && this.lotDeleteList.length > 0) {
cloneData.lotDeleteList = JSON.stringify(this.lotDeleteList) cloneData.lotDeleteList = JSON.stringify(this.lotDeleteList)
} }