This commit is contained in:
@jyuhsin
2025-05-30 11:06:16 +08:00
parent 5346297c7d
commit 3180d0cb95
13 changed files with 387 additions and 396 deletions
@@ -21,10 +21,7 @@ import io.v.nutz.base.utils.ViTool;
import io.v.nutz.sys.models.SysHoliday;
import io.v.nutz.sys.models.User;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationBaseManagement;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLot;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationTravelAgency;
import io.v.nutz.zhgh.therapyRecuperation.model.*;
import io.v.nutz.zhgh.therapyRecuperation.service.baseManage.TheRapyRecuperationBaseManagerService;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.Logical;
@@ -286,9 +283,11 @@ public class TheRapyRecuperationBaseManagerController {
if (StrUtil.isBlank(id)) {
return Result.error("参数错误");
}
TheRapyRecuperationConfig config = dao.fetch(TheRapyRecuperationConfig.class, Cnd.NEW());
//获取线路对应的标段
TheRapyRecuperationBaseManagement management = dao.fetch(TheRapyRecuperationBaseManagement.class, id);
TheRapyRecuperationLot lot = dao.fetch(TheRapyRecuperationLot.class, management.getLotId());
//TheRapyRecuperationLot lot = dao.fetch(TheRapyRecuperationLot.class, management.getLotId());
//获取当年的节假日
List<SysHoliday> holidayList = dao.query(SysHoliday.class, Cnd.where("year(day)", "=", DateUtil.thisYear()).asc("day"));
@@ -307,8 +306,8 @@ public class TheRapyRecuperationBaseManagerController {
// 解析日期
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate startDate = LocalDate.parse(DateUtil.formatDate(management.getActivityStartTime()), formatter);
LocalDate endDate = LocalDate.parse(DateUtil.formatDate(management.getActivityEndTime()), formatter);
LocalDate startDate = LocalDate.parse(DateUtil.formatDate(config.getFragmentPlayStartTime()), formatter);
LocalDate endDate = LocalDate.parse(DateUtil.formatDate(config.getFragmentPlayEndTime()), formatter);
//现在的日期
LocalDate now = LocalDate.parse(DateUtil.today(), formatter);
@@ -324,10 +323,10 @@ public class TheRapyRecuperationBaseManagerController {
while (!currentDate.isAfter(endDate)) {
// 检查是否为节假日
String currentDateString = currentDate.format(formatter);
if (holidays.contains(currentDateString) && lot.getFilterHolidays()) {
/*if (holidays.contains(currentDateString) && lot.getFilterHolidays()) {
currentDate = currentDate.plusDays(1);
continue;
}
}*/
// 检查是否为需要排除的周几
int dayOfWeek = currentDate.getDayOfWeek().getValue() % 7; // 1是周一,7是周日
if (Lang.isNotEmpty(weeks) && !weeks.contains(dayOfWeek)) {
@@ -341,12 +340,12 @@ public class TheRapyRecuperationBaseManagerController {
Sql schoolTimeSql = Sqls.create("select schoolTime from sys_user where id=@id").setParam("id", ShiroUtil.getPlatformUid());
String schoolTime = (String) Daos.query(dao, schoolTimeSql.toString(), Sqls.callback.str());
String minDate = DateUtil.formatDate(management.getActivityStartTime());
String minDate = DateUtil.formatDate(config.getFragmentPlayStartTime());
//如果入职日期在活动开始时间之后的
try {
if (StrUtil.isNotBlank(schoolTime)
&& String.valueOf(DateUtil.thisYear() - 1).equals(DateUtil.format(DateUtil.parse(schoolTime), "yyyy"))
&& DateUtil.compare(DateUtil.parse(schoolTime), management.getActivityStartTime(), "MM") > 0) {
&& DateUtil.compare(DateUtil.parse(schoolTime), config.getFragmentPlayStartTime(), "MM") > 0) {
minDate = DateUtil.format(DateUtil.offset(DateUtil.parse(schoolTime), DateField.YEAR, 1), "yyyy-MM-dd");
}
} catch (Exception e) {
@@ -355,9 +354,9 @@ public class TheRapyRecuperationBaseManagerController {
return Map.of("days", resultDates,
"holidays", holidays,
"lotValue", lot.getLotValue(),
"lotValue", 0,
"minDate", minDate,
"maxDate", DateUtil.formatDate(management.getActivityEndTime()));
"maxDate", DateUtil.formatDate(config.getFragmentPlayEndTime()));
}
@@ -329,22 +329,24 @@ public class TheRapyRecuperationEnrollController {
public Object canDelete(String id) {
TheRapyRecuperationEnroll enroll = dao.fetch(TheRapyRecuperationEnroll.class, id);
//如果成团了,不能取消
if(enroll.getHasLocked()) {
return Result.error("当前报名已经成团不能取消");
}
TheRapyRecuperationConfig config = dao.fetch(TheRapyRecuperationConfig.class, Cnd.NEW());
Date changeEndTime = null;
if (StrUtil.isNotBlank(enroll.getTakePartInLineId())) {
TheRapyRecuperationLineUnionSelect lineUnionSelect = dao.fetch(TheRapyRecuperationLineUnionSelect.class, enroll.getTakePartInLineId());
changeEndTime = lineUnionSelect.getChangeEndTime();
changeEndTime = config.getImplodeEndTime();
} else if (StrUtil.isNotBlank(enroll.getTakePartInTravelAgencyId())) {
return null;
} else if (StrUtil.isNotBlank(enroll.getTakePartInBaseManagementId())) {
TheRapyRecuperationBaseManagement baseManagement = dao.fetch(TheRapyRecuperationBaseManagement.class, enroll.getTakePartInBaseManagementId());
changeEndTime = baseManagement.getChangeEndTime();
changeEndTime = config.getFragmentEndTime();
}
if (DateUtil.compare(new Date(), changeEndTime) > 0) {
return Result.error("抱歉,当前时间已经不能取消");
}
return null;
}
@@ -159,4 +159,9 @@ public class TheRapyRecuperationBaseManagement {
@One(field = "travelAgencyId")
private TheRapyRecuperationTravelAgency travelAgency;
@Column
@ColDefine(type = ColType.MYSQL_JSON)
@Comment("天数")
private List<Double> allowDay;
}
@@ -1,5 +1,6 @@
package io.v.nutz.zhgh.therapyRecuperation.model;
import cn.hutool.core.date.DateTime;
import io.v.nutz.sys.models.Sys_file;
import lombok.Data;
import lombok.experimental.Accessors;
@@ -113,4 +114,50 @@ public class TheRapyRecuperationConfig {
@ColDefine(type = ColType.MYSQL_JSON)
@Comment("承诺书")
private List<Sys_file> files;
@Column
@ColDefine(type = ColType.INT)
@Comment("常规团最少成团人数")
private Integer conventionalCount;
@Column
@ColDefine(type = ColType.INT)
@Comment("精品团最少成团人数")
private Integer boutiqueCount;
@Column
@ColDefine(type = ColType.INT)
@Comment("分段式最少成团人数")
private Integer fragmentCount;
@Column
@ColDefine(type = ColType.DATETIME)
@Comment("集中疗休养报名开始时间")
private DateTime implodeStartTime;
@Column
@ColDefine(type = ColType.DATETIME)
@Comment("集中疗休养报名结束时间")
private DateTime implodeEndTime;
@Column
@ColDefine(type = ColType.DATETIME)
@Comment("分段疗休养报名开始时间")
private DateTime fragmentStartTime;
@Column
@ColDefine(type = ColType.DATETIME)
@Comment("分段疗休养报名结束时间")
private DateTime fragmentEndTime;
@Column
@ColDefine(type = ColType.DATETIME)
@Comment("分段疗休养活动开始时间")
private DateTime fragmentPlayStartTime;
@Column
@ColDefine(type = ColType.DATETIME)
@Comment("分段疗休养活动结束时间")
private DateTime fragmentPlayEndTime;
}
@@ -218,5 +218,10 @@ public class TheRapyRecuperationEnroll extends BaseModel {
@Comment("是否被锁定了,如果被锁定了就不能取消报名了")
private Boolean hasLocked;
@Column
@ColDefine(type = ColType.INT)
@Comment("报酒店时选择的出行天数")
private Double playDay;
private String firstLetter;
}
@@ -1,5 +1,6 @@
package io.v.nutz.zhgh.therapyRecuperation.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.pinyin.PinyinUtil;
@@ -517,50 +518,40 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
return Map.of(false, "抱歉,您不在报名范围内!");
}
//判断报名时间
Map<Boolean, String> validTime = this.validSignTime(enrollInfo);
if (validTime != null && validTime.containsKey(false)) {
return validTime;
}
//每年旅行频率
Integer travelFrequency = config.getTravelFrequency();
//省外几年去一次
Integer outsideNumber = config.getOutsideNumber();
//可以修改几次
Integer modifyNumber = config.getModifyNumber();
//省外最多报名人数
Integer allLineSignUpNumber = config.getAllLineSignUpNumber();
//省内起始年份
Integer provinceStartYear = config.getProvinceStartYear();
//活动范围
Integer activityGroupId = config.getActivityGroupId();
//如果报酒店
if (StrUtil.isNotBlank(enrollInfo.getTakePartInBaseManagementId()) && StrUtil.isBlank(enrollInfo.getId()) && enrollInfo.isNormal()) {
Map<Boolean, String> oneYear = this.validCountOneYear(loginName, travelFrequency);
if (oneYear != null) {
return oneYear;
}
//先判断有没有报过
Map<Boolean, String> thisYearCount = this.validCountThisYear(loginName, travelFrequency);
if (thisYearCount != null && thisYearCount.containsKey(false)) {
return thisYearCount;
}
Date signUpStartTime = null;
Date signUpEndTime = null;
Date changeEndTime = null;
//如果报酒店,酒店可以一年报2次
if (StrUtil.isNotBlank(enrollInfo.getTakePartInBaseManagementId()) && StrUtil.isBlank(enrollInfo.getId())) {
Map<Boolean, String> validResult = this.validBaseManagementCount(loginName, enrollInfo);
if(validResult != null && validResult.containsKey(false)) {
return validResult;
}
}
if (StrUtil.isNotBlank(enrollInfo.getTakePartInLineId())) {
//线路信息
TheRapyRecuperationLineUnionSelect lineUnionSelect = dao().fetch(TheRapyRecuperationLineUnionSelect.class, enrollInfo.getTakePartInLineId());
TheRapyRecuperationLine lineInfo = dao().fetch(TheRapyRecuperationLine.class, lineUnionSelect.getLineId());
signUpStartTime = lineUnionSelect.getSignUpStartTime();
signUpEndTime = lineUnionSelect.getSignUpEndTime();
changeEndTime = lineUnionSelect.getChangeEndTime();
if (DateUtil.compare(new Date(), signUpStartTime) < 0) {
return Map.of(false, "报名未开始,请耐心等待");
}
if (DateUtil.compare(new Date(), changeEndTime) > 0 && enrollInfo.isNormal()) {
return Map.of(false, "报名时间已过,抱歉不能报名");
}
TheRapyRecuperationType trrt = regionTypeLineMap.get(lineInfo.getRegionalNature());
if (StrUtil.isBlank(enrollInfo.getId()) && StrUtil.isNotBlank(enrollInfo.getTakePartInLineId())) {
//获取标段中的最大费用
List<TheRapyRecuperationLot> lotList = dao().query(TheRapyRecuperationLot.class, Cnd.NEW());
//最大费用
@@ -569,11 +560,6 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
//获取当前报名线路对应的标段的费用
Integer currentLineCost = dao().fetch(TheRapyRecuperationLot.class, lineInfo.getLotId()).getActivityCost();
Map<Boolean, String> oneYear = this.validCountOneYear(loginName, travelFrequency);
if (oneYear != null && oneYear.containsKey(false)) {
return oneYear;
}
//获取起始年份到当前时间,是否报名
Sql sql = Sqls.create("""
SELECT
@@ -653,60 +639,70 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
}
}
}
//变更操作
if (StrUtil.isNotBlank(enrollInfo.getId())) {
int changeCount = dao().count(TheRapyRecuperationEnrollChangeRecord.class, Cnd.where("enrollId", "=", enrollInfo.getId()));
if (changeCount >= modifyNumber) {
return Map.of(false, "只能变更" + changeCount + "次!");
}
if (DateUtil.compare(new Date(), changeEndTime) > 0) {
return Map.of(false, "超过变更截至时间,无法变更!");
} else {
return Map.of(true, "验证成功");
}
}
return Map.of(true, "验证成功");
}
public Map<Boolean, String> validSignCount(TheRapyRecuperationEnroll enrollInfo, TheRapyRecuperationConfig config, int estimatedFamilyNumbers, String type) {
int hasSignNumber = 0;//已经报名的人数
int currentSignNumber = 1;//当前报名人数,1表示自己,下面的if是加家属人数
Cnd cnd = Cnd.where("takePartInLineId", "=", enrollInfo.getTakePartInLineId())
.and("stateId", "in", Lang.array(TheRapyRecuperationState.UNIT, TheRapyRecuperationState.LINEUNIT, TheRapyRecuperationState.SCHOOL, TheRapyRecuperationState.PASS))
.and("isNormal", "=", true);
//如果是修改,排除自己的报名记录
if("edit".equals(type)) {
cnd.and("loginName", "!=", ShiroUtil.getPlatformLoginname());
public Map<Boolean, String> validSignTime(TheRapyRecuperationEnroll currentEnroll) {
TheRapyRecuperationConfig config = dao().fetch(TheRapyRecuperationConfig.class, Cnd.NEW());
DateTime signUpStartTime = null;
DateTime signUpEndTime = null;
if(StrUtil.isNotBlank(currentEnroll.getTakePartInLineId())) {
signUpStartTime = config.getImplodeStartTime();
signUpEndTime = config.getImplodeEndTime();
} else if(StrUtil.isNotBlank(currentEnroll.getTakePartInBaseManagementId())) {
signUpStartTime = config.getFragmentStartTime();
signUpEndTime = config.getFragmentEndTime();
}
List<TheRapyRecuperationEnroll> enrolls = dao().query(TheRapyRecuperationEnroll.class, cnd);
if (DateUtil.compare(new Date(), signUpStartTime) < 0) {
return Map.of(false, "报名未开始,请耐心等待");
}
if (DateUtil.compare(new Date(), signUpEndTime) > 0) {
return Map.of(false, "报名时间已过,抱歉不能报名");
}
return null;
}
//1表示在配置页面的家属配置的是数量,2是家属的List
/*if (config.getFamilyInfo() == 1) {
currentSignNumber += enrollInfo.getFamilyNumber() != null ? enrollInfo.getFamilyNumber() : 0;
int sum = enrolls.stream().mapToInt(TheRapyRecuperationEnroll::getFamilyNumber).sum();
hasSignNumber = enrolls.size() + sum;
} else {
currentSignNumber += enrollInfo.getCompanionList() != null ? enrollInfo.getCompanionList().size() : 0;
List<String> list = enrolls.stream().map(TheRapyRecuperationEnroll::getId).collect(Collectors.toList());
List<TheRapyRecuperationEnrollCompanion> companions = dao().query(TheRapyRecuperationEnrollCompanion.class, Cnd.where("trreId", "=", list));
hasSignNumber = enrolls.size() + companions.size();
}*/
//省外报名限制,不包含家属
// hasSignNumber += currentSignNumber + enrolls.size();
if (( currentSignNumber + enrolls.size()) > estimatedFamilyNumbers) {
return Map.of(false, "报名人数已满");
} else {
return null;
public Map<Boolean, String> validBaseManagementCount(String loginName, TheRapyRecuperationEnroll currentEnroll) {
//酒店可以一年报2次,查询是否有报第一次
List<TheRapyRecuperationEnroll> enrollList = dao().query(
TheRapyRecuperationEnroll.class,
Cnd.where("loginName", "=", loginName)
.and("isNormal", "=", true)
.and("takePartInBaseManagementId", "is not", null)
.and("YEAR(signingUptime)", "=", DateUtil.thisYear())
);
if(enrollList.size() >= 2) {
return Map.of(false, "您已经报名了%s次分段疗休养".formatted(enrollList.size()));
}
//如果报过第一次就要判断
if(Lang.isNotEmpty(enrollList)) {
TheRapyRecuperationEnroll lastEnroll = enrollList.get(0);
//判断这次报名的旅行社和上次的旅行社是否是一个
TheRapyRecuperationBaseManagement currentManagement = dao().fetch(TheRapyRecuperationBaseManagement.class, currentEnroll.getTakePartInBaseManagementId());
TheRapyRecuperationTravelAgency currentTravelAgency = dao().fetch(TheRapyRecuperationTravelAgency.class, currentManagement.getTravelAgencyId());
TheRapyRecuperationBaseManagement lastManagement = dao().fetch(TheRapyRecuperationBaseManagement.class, lastEnroll.getTakePartInBaseManagementId());
TheRapyRecuperationTravelAgency lastTravelAgency = dao().fetch(TheRapyRecuperationTravelAgency.class, lastManagement.getTravelAgencyId());
if(!Objects.equals(currentTravelAgency.getId(), lastTravelAgency.getId())) {
return Map.of(false, "当前报名酒店的旅行社与上次出行不一致");
}
//如果是一个,再判断天数
if(currentEnroll.getPlayDay() != null) {
if((currentEnroll.getPlayDay() + lastEnroll.getPlayDay()) != 5) {
return Map.of(false, "您选择的出行天数有误");
}
}
}
return null;
}
//判断一年报几次
public Map<Boolean, String> validCountOneYear(String loginName, int travelFrequency) {
public Map<Boolean, String> validCountThisYear(String loginName, int travelFrequency) {
Cnd cnd = Cnd.NEW();
cnd.and("loginName", "=", loginName);
cnd.and("isNormal", "=", true);
cnd.and("YEAR(signingUptime)", "=", io.v.nutz.base.utils.DateUtil.getYear());
cnd.and("takePartInBaseManagementId", "is", null);
cnd.and("YEAR(signingUptime)", "=", DateUtil.thisYear());
int joinCount = dao().count(TheRapyRecuperationEnroll.class, cnd);
if (joinCount >= travelFrequency) {
@@ -718,23 +714,18 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
int inCount = dao().count("the_rapy_recuperation_enroll", Cnd.where("loginName", "=", io.v.nutz.web.commons.utils.ShiroUtil.getPrincipalProperty("loginname"))
.and("takePartInLineId", "in", unionInSelects.stream().map(TheRapyRecuperationLineUnionSelect::getId).collect(Collectors.toList()))
.and("isNormal", "=", true)
.and("YEAR(signingUptime)", "=", io.v.nutz.base.utils.DateUtil.getYear()));
.and("YEAR(signingUptime)", "=", DateUtil.thisYear()));
//是否报省外
int outCount = dao().count("the_rapy_recuperation_enroll", Cnd.where("loginName", "=", io.v.nutz.web.commons.utils.ShiroUtil.getPrincipalProperty("loginname"))
.and("takePartInLineId", "in", unionOutSelects.stream().map(TheRapyRecuperationLineUnionSelect::getId).collect(Collectors.toList()))
.and("isNormal", "=", true)
.and("YEAR(signingUptime)", "=", io.v.nutz.base.utils.DateUtil.getYear()));
.and("YEAR(signingUptime)", "=", DateUtil.thisYear()));
//是否报旅行社
int travelCount = dao().count("the_rapy_recuperation_enroll", Cnd.where("loginName", "=", io.v.nutz.web.commons.utils.ShiroUtil.getPrincipalProperty("loginname"))
.and(Cnd.exps("takePartInLineId", "is", null).or("takePartInLineId", "=", ""))
.and("isNormal", "=", true)
.and("takePartInTravelAgencyId", "is not", null)
.and("YEAR(signingUptime)", "=", io.v.nutz.base.utils.DateUtil.getYear()));
//是否报酒店
int hotelCount = dao().count("the_rapy_recuperation_enroll", Cnd.where("loginName", "=", io.v.nutz.web.commons.utils.ShiroUtil.getPrincipalProperty("loginname"))
.and("takePartInLineId", "is", null).and("isNormal", "=", true)
.and("takePartInBaseManagementId", "is not", null)
.and("YEAR(signingUptime)", "=", io.v.nutz.base.utils.DateUtil.getYear()));
.and("YEAR(signingUptime)", "=", DateUtil.thisYear()));
String str = "";
if (inCount > 0) {
str = "省内线路";
@@ -742,40 +733,10 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
str = "省外线路";
} else if (travelCount > 0) {
str = "旅行社";
} else if (hotelCount > 0) {
str = "酒店";
}
return Map.of(false, "一年只能报" + travelFrequency + "次,您已报" + str + ",请先在我的疗休养中删除,方可报名!");
}
return Map.of(true, "成功");
}
public int getCountByOutLine(TheRapyRecuperationType trrt, String loginName, int outsideNumber) {
//省外 outsideNumber 年内是否去过
if (trrt.getValue() == TheRapyRecuperationType.provinceOutLine.getValue()) {
Sql lineJoinSql = Sqls.create("""
SELECT
count(*)
FROM
the_rapy_recuperation_enroll ren
LEFT JOIN the_rapy_recuperation_line rl on ren.takePartInLineId = rl.id
$condition
""");
Cnd lineCnd = Cnd.NEW();
lineCnd.and("loginName", "=", loginName);
lineCnd.and("isNormal", "=", true);
lineCnd.and("takePartInLineId", "IS NOT", null);
lineCnd.and("YEAR ( signingUptime )", ">=", io.v.nutz.base.utils.DateUtil.getYear() - outsideNumber);
lineCnd.and("YEAR ( signingUptime )", "<=", io.v.nutz.base.utils.DateUtil.getYear() - 1);
lineCnd.and("regionalNature", "=", TheRapyRecuperationType.provinceOutLine.getValue());
lineJoinSql.setCondition(lineCnd);
//lineCnd.and(new SqlExpressionGroup().andBetween("YEAR(signingUptime)", io.v.nutz.base.utils.DateUtil.getYear() - 1, io.v.nutz.base.utils.DateUtil.getYear() - outsideNumber));
return baseService.count(lineJoinSql);
}
return 0;
return null;
}
/**
@@ -95,7 +95,7 @@
url: url,
container: "#container",
maxCacheLength: 0,
push: false,
push: true,
replace: true,
fragment: "#container",
timeout: 8000,
@@ -263,9 +263,9 @@ layout("/mobile/platform.html"){
<div class="container">
<div class="header">
<div class="title">
<van-tag size="large" color="#1867b0" style="color: white;position: relative; top: -2px">
{{baseData.lotName}}
</van-tag>
<!--<van-tag size="large" color="#1867b0" style="color: white;position: relative; top: -2px">
{{baseData.regionalNature}}
</van-tag>-->
{{baseData.baseName}}
</div>
<div style="margin-top: 10px">
@@ -279,13 +279,13 @@ layout("/mobile/platform.html"){
</div>
<div>
<span>报名时间:</span>
{{moment(baseData.signUpStartTime).format('YYYY-MM-DD HH:mm') + ' ~ ' +
moment(baseData.signUpEndTime).format('YYYY-MM-DD HH:mm')}}
{{moment(configData.fragmentStartTime).format('YYYY-MM-DD HH:mm') + ' ~ ' +
moment(configData.fragmentEndTime).format('YYYY-MM-DD HH:mm')}}
</div>
<div>
<span>活动时间:</span>
{{moment(baseData.activityStartTime).format('YYYY-MM-DD HH:mm') + ' ~ ' +
moment(baseData.activityEndTime).format('YYYY-MM-DD HH:mm')}}
{{moment(configData.fragmentPlayStartTime).format('YYYY-MM-DD HH:mm') + ' ~ ' +
moment(configData.fragmentPlayEndTime).format('YYYY-MM-DD HH:mm')}}
</div>
</div>
</div>
@@ -307,17 +307,13 @@ layout("/mobile/platform.html"){
</van-button>
</div>
<div class="footer" v-else>
<template v-if="baseData.isNormal==0&&baseData.isNormalFalse>0">
<template v-if="baseData.isNormal == 0 && baseData.isNormalFalse > 0">
<van-button @click="join" class="join">我要报名</van-button>
</template>
<template v-else>
<van-button v-if="moment().unix() <= moment(baseData.signUpEndTime).unix()" @click="join" class="join">我要报名
</van-button>
<!--<van-button
v-if="moment().unix() <= moment(baseData.signUpEndTime).unix() && ${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}"
@click="helpJoin" class="join">替他人报名
</van-button>-->
<van-button v-if="moment().unix() > moment(baseData.signUpEndTime).unix()" class="join">报名结束</van-button>
<van-button v-if="moment().unix() >= moment(configData.fragmentStartTime).unix() && moment().unix() <= moment(configData.fragmentEndTime).unix()"
@click="join" class="join">我要报名</van-button>
<van-button v-if="moment().unix() > moment(configData.fragmentEndTime).unix()" class="join">报名结束</van-button>
</template>
</div>
@@ -334,13 +330,7 @@ layout("/mobile/platform.html"){
</div>
<div class="van-card-body">
<van-field v-if="isHelpJoin" label="姓名" readonly v-model="formData.userName"></van-field>
<van-field v-else="!isHelpJoin" label="姓名"
:rules="[{ required: true }]"
placeholder="请输入工号或姓名进行查询" required
@click="show = true"
v-model="formData.userName"></van-field>
<van-field label="姓名" readonly v-model="formData.userName"></van-field>
<van-field label="工号" readonly v-model="formData.loginName"></van-field>
<van-field label="身份证号" name="idCard" :rules="[{ required: true }]"
@@ -349,7 +339,10 @@ layout("/mobile/platform.html"){
placeholder="请填写手机号" v-model="formData.mobile"></van-field>
<van-field label="所属工会" readonly v-model="formData.unionName"></van-field>
<van-field label="报名酒店" readonly v-model="formData.baseName"></van-field>
<van-field label="活动时间" readonly @click="if(fromUrlByMy != 'find')timeVisible = true"
<van-field label="出行天数" readonly @click="if(fromUrlByMy != 'find')playDayVisible = true"
:rules="[{ required: true }]" placeholder="请选择出行天数" required
is-link v-model="formData.playDay" name="playDay"></van-field>
<van-field label="活动时间" readonly @click="specificTimeClick"
:rules="[{ required: true }]" placeholder="请选择活动时间" required
is-link v-model="formData.specificTime" name="specificTime"></van-field>
</div>
@@ -464,6 +457,15 @@ layout("/mobile/platform.html"){
</div>
</van-popup>
<van-popup position="bottom" round v-model="playDayVisible">
<van-picker
title="出行天数" show-toolbar
:columns="playDayColumns"
@confirm="playDayConfirm"
@cancel="playDayVisible = false">
</van-picker>
</van-popup>
<!--房间类型弹出框-->
<van-popup position="bottom" round v-model="roomVisible">
<van-picker
@@ -495,16 +497,6 @@ layout("/mobile/platform.html"){
</van-picker>
</van-popup>
<!--时间弹出框-->
<!--<van-popup position="bottom" round v-model="timeVisible">
<van-picker
title="具体时间" show-toolbar
:columns="timeArray"
@confirm="(value, index) => {formData.specificTime = value; timeVisible = false}"
@cancel="timeVisible = false">
</van-picker>
</van-popup>-->
<van-calendar type="range" v-model="timeVisible"
ref="cal" @confirm="calConfirm"
:min-date="minDate" :max-date="maxDate"
@@ -512,24 +504,6 @@ layout("/mobile/platform.html"){
@select="daySelect"
:max-range="lotValue" :style="{ height: '660px' }"></van-calendar>
<van-popup position="bottom" round v-model="show" :style="{ height: '60%' }" closeable>
<van-search v-model="result" show-action style="padding: 10px;margin-top: 45px" placeholder="请输入工号或姓名搜索"
@input="delaySearch">
</van-search>
<van-cell-group>
<div>
<van-checkbox-group style="text-align: center">
<van-cell-group>
<van-cell v-for="(item, index) in userList" :key="item.index" clickable
:title="item.name"
@click="toResult(item.loginname)">
</van-cell>
</van-cell-group>
</van-checkbox-group>
</div>
</van-cell-group>
</van-popup>
</div>
<script>
function getQueryString(name) {
@@ -555,7 +529,6 @@ layout("/mobile/platform.html"){
tarBarActive: 0,
roomColumns: ['大床房', '标准间'],
bedColumns: ['1', '2'],
//companionColumns: ['亲属', '朋友'],
companionColumns: ['配偶', '子女'],
bedVisible: false,
roomVisible: false,
@@ -584,13 +557,9 @@ layout("/mobile/platform.html"){
enrollId: '',
timeArray: [],
defaultIndex: 0,
isHelpJoin: false,
userList: [],
show: false,
result: '',
helpUser: 1,
weekList: {
0: '周日',
1: '周一',
@@ -601,14 +570,32 @@ layout("/mobile/platform.html"){
6: '周六',
},
chooseDate: [],
configData: {},
playDayVisible: false,
playDayColumns: [],
}
},
methods: {
playDayConfirm(val) {
this.formData.playDay = val.value
this.lotValue = val.value === 2.5 ? 3 : val.value
this.playDayVisible = false
},
specificTimeClick() {
if(!this.formData.playDay) {
this.$toast('请先选择出行天数')
return
}
if(this.fromUrlByMy !== 'find') this.timeVisible = true
},
pageBack() {
if(this.fromUrlByMy !== 'find') {
pjaxReplace('/platform/mobile/theRapyRecuperation/mobileLineListPage')
} else {
window.removeEventListener('scroll', this.scrollToTop)
document.removeEventListener('click', this.handleClick)
if(['find', 'editDo'].includes(this.fromUrlByMy)) {
pjaxReplace('/platform/mobile/theRapyRecuperation/myRecuperation')
} else {
pjaxReplace('/platform/mobile/theRapyRecuperation/mobileLineListPage')
}
},
calConfirm(date) {
@@ -693,15 +680,12 @@ layout("/mobile/platform.html"){
return value != null
},
async joinSubmit() {
let toast = null
if (!this.enrollId) {
toast = vant.Toast.loading({
duration: 0,
forbidClick: true,
overlay: true,
message: '努力提交中',
})
}
let toast = vant.Toast.loading({
duration: 0,
forbidClick: true,
overlay: true,
message: '努力提交中',
})
const cloneData = clone(this.formData)
cloneData.companionList.forEach((item, index) => {
if (item.userName === '') {
@@ -711,37 +695,16 @@ layout("/mobile/platform.html"){
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/doSignUpForBaseManagement', {
enroll: JSON.stringify(cloneData),
})
if (this.enrollId) {
if (resp.code === 0) {
vant.Dialog.alert({
title: '温馨提示',
message: '修改成功,请务必联系并告知旅行社',
}).then(() => {
if (this.helpUser === 1) {
location.href = '/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.index
}
})
} else {
vant.Toast(resp.msg)
}
toast.close()
if (resp.code === 0) {
vant.Dialog.alert({
title: '温馨提示',
message: this.enrollId ? '修改成功,请务必联系并告知旅行社' : resp.msg,
}).then(() => {
pjaxReplace('/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.index)
})
} else {
setTimeout(() => {
if (resp.code === 0) {
toast.message = '提交成功'
toast.type = 'success'
} else {
toast.message = resp.msg
toast.type = 'fail'
}
setTimeout(() => {
toast.clear()
}, 500)
if (resp.code === 0 && this.helpUser === 1) {
location.href = '/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.index
} else {
this.helpJoin();
}
}, 1000)
vant.Toast(resp.msg)
}
},
addCompanion() {
@@ -750,26 +713,7 @@ layout("/mobile/platform.html"){
delCompanion() {
this.formData.companionList.splice(this.active, 1)
},
async helpJoin() {
this.formData = {
userName: "",
loginName: "",
unionName: "",
idCard: "",
mobile: "",
baseName: this.baseData.baseName,
takePartInBaseManagementId: this.baseData.id,
companionList: [],
bedInfo: {},
}
this.helpUser = 0;
if(this.index == 3) {
await this.getTimeArray()
}
this.joinPopup = true
},
async join() {
this.helpUser = 1
if (this.fromUrlByMy !== 'find') {
const re = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo', {
enroll: JSON.stringify({
@@ -834,12 +778,15 @@ layout("/mobile/platform.html"){
this.formData.baseName = this.baseData.baseName
this.skeLoading = false
//如果是四晚五天,就获取周一到周五
/*if (this.baseData.lotName === '四晚五天') {
this.timeArray = this.getTimeByLot1()
} else if (this.baseData.lotName === '两晚三天') {
this.timeArray = this.getTimeByLot2()
}*/
if(this.baseData.allowDay) {
this.playDayColumns = []
const list = JSON.parse(this.baseData.allowDay)
list.forEach(item => {
this.playDayColumns.push({
text: item + '天', value: item
})
})
}
}
},
async getTimeArray() {
@@ -848,51 +795,10 @@ layout("/mobile/platform.html"){
})
this.timeArray = res.data.days
this.holidays = res.data.holidays
this.lotValue = Number(res.data.lotValue)
//this.lotValue = Number(res.data.lotValue)
this.minDate = new Date(res.data.minDate)
this.maxDate = new Date(res.data.maxDate)
},
getTimeByLot1() {
let timeArray = []
let now_date = moment()//当前时间
let start_date = moment(this.baseData.activityStartTime) // 时间区间开始日期
let end_date = moment(this.baseData.activityEndTime) // 时间区间结束日期
while (start_date <= end_date) {
if (start_date.day() === 1) {
const week_start = start_date.format('MM月DD日')
const week_end = start_date.clone().add(4, 'day')
if (week_end <= end_date && now_date < start_date) {
timeArray.push(week_start + '-' + week_end.format('MM月DD日'))
}
start_date.add(7, 'day')
} else {
start_date.add(1, 'day')
}
}
return timeArray
},
getTimeByLot2() {
let timeArray = []
let now_date = moment()//当前时间
let start_date = moment(this.baseData.activityStartTime) // 时间区间开始日期
let end_date = moment(this.baseData.activityEndTime) // 时间区间结束日期
while (start_date <= end_date) {
if (start_date.day() === 5) {
const week_start = start_date.format('MM月DD日')
const week_end = start_date.clone().add(2, 'day')
if (week_end <= end_date && now_date < start_date) {
timeArray.push(week_start + '-' + week_end.format('MM月DD日'))
}
start_date.add(7, 'day')
} else {
start_date.add(1, 'day')
}
}
timeArray = timeArray.filter(v => {
return v !== '09月29日-10月01日' && v !== '10月06日-10月08日' && v !== '09月15日-09月17日'
})
return timeArray
},
// 点击图片回到顶部方法,加计时器是为了过渡顺滑
backTop() {
const that = this
@@ -953,6 +859,10 @@ layout("/mobile/platform.html"){
this.userList = data
}
},
async getConfigData() {
const resp = await $.get('/platform/theRapyRecuperation/TheRapyConfig/findOne')
this.configData = resp.data
},
async toResult(loginname) {
const res = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo', {
enroll: JSON.stringify({
@@ -1022,6 +932,7 @@ layout("/mobile/platform.html"){
},
},
async created() {
await this.getConfigData()
this.id = getQueryString('id') ? getQueryString('id') : ''
this.enrollId = getQueryString('enrollId') ? getQueryString('enrollId') : ''
this.index = getQueryString('index') ? getQueryString('index') : ''
@@ -1044,7 +955,7 @@ layout("/mobile/platform.html"){
})
}catch (e) {
this.isPdf = true
document.addEventListener('click', (event) => this.handleClick(event))
//document.addEventListener('click', (event) => this.handleClick(event))
}
this.$nextTick(() => {
@@ -1055,8 +966,7 @@ layout("/mobile/platform.html"){
window.addEventListener('scroll', this.scrollToTop)
},
destroyed() {
window.removeEventListener('scroll', this.scrollToTop)
document.removeEventListener('click', (event) => this.handleClick(event))
},
})
</script>
@@ -591,10 +591,12 @@ layout("/mobile/platform.html"){
},
methods: {
pageBack() {
if(this.fromUrlByMy !== 'find') {
pjaxReplace('/platform/mobile/theRapyRecuperation/mobileLineListPage')
} else {
window.removeEventListener('scroll', this.scrollToTop)
document.removeEventListener('click', this.handleClick)
if(['find', 'editDo'].includes(this.fromUrlByMy)) {
pjaxReplace('/platform/mobile/theRapyRecuperation/myRecuperation')
} else {
pjaxReplace('/platform/mobile/theRapyRecuperation/mobileLineListPage')
}
},
openRead() {
@@ -794,8 +796,11 @@ layout("/mobile/platform.html"){
this.configData = resp.data
},
handleClick(event, classArray = [], imagesArray = []) {
if(event == null) {
return
}
if (event.target.tagName === 'IMG' && event.target.className !== 'top_icon') {
if(imagesArray.length > 0) {
if(classArray.length > 0) {
const index = classArray.indexOf(event.target.className)
if(index !== -1) {
vant.ImagePreview({
@@ -813,6 +818,7 @@ layout("/mobile/platform.html"){
}
},
readPDFPicture(pdf) {
const that = this
if(pdf != null) {
pdf.on("complete", function () {
const imgDoc = document.querySelectorAll('img')
@@ -852,21 +858,18 @@ layout("/mobile/platform.html"){
pdfh5 = new Pdfh5('#demo', {
pdfurl: href,
})
this.readPDFPicture(pdfh5)
})
}catch (e) {
this.isPdf = true
document.addEventListener('click', (event) => this.handleClick(event))
//document.addEventListener('click', (event) => this.handleClick(event, [], []))
}
this.$nextTick(() => {
this.readPDFPicture(pdfh5)
})
},
mounted() {
window.addEventListener('scroll', this.scrollToTop)
},
destroyed() {
window.removeEventListener('scroll', this.scrollToTop)
document.removeEventListener('click', (event) => this.handleClick(event))
},
})
</script>
@@ -265,7 +265,7 @@ layout("/mobile/platform.html"){
<span>{{o.baseName}}</span>
<div>
<van-tag color="#1867b0">{{o.regionalNature}}</van-tag>
<van-tag color="#1867b0">{{o.lotName}}</van-tag>
<!--<van-tag color="#1867b0">{{o.lotName}}</van-tag>-->
</div>
</div>
<div class="desc_info">
@@ -297,11 +297,11 @@ layout("/mobile/platform.html"){
<div class="list-card" v-for="o in tableData">
<div @click="findOne(o)" class="content">
<van-image
height="100"
height="92"
radius="8"
:src="CREATE_PREVIEW_URL(o.fileId)"
width="150"
></van-image>
width="130">
</van-image>
<div
v-if="pageForm.theRapyRecuperationType != '2' && pageForm.theRapyRecuperationType != '3'"
@@ -378,7 +378,7 @@ layout("/mobile/platform.html"){
<span>{{o.baseName}}</span>
<div>
<van-tag color="#1867b0">{{o.regionalNature}}</van-tag>
<van-tag color="#1867b0">{{o.lotName}}</van-tag>
<van-tag color="#1867b0">{{o.playDay}}</van-tag>
</div>
</div>
<div class="desc_info">
@@ -406,13 +406,12 @@ layout("/mobile/platform.html"){
&ensp;
</van-button>
<van-button
v-if="pageForm.theRapyRecuperationType != '2' && moment().unix() < moment(o.changeEndTime).unix()
&& ![2715,2725,2735].includes(o.stateId)"
v-if="editButtonShow(o)"
@click="edit(o)"
type="info"
size="small"
color="#1867b0"
:disabled="o.isTakePartIn == true || getDisabled(o)"
:disabled="o.isTakePartIn == true || getDisabled(o) || o.hasLocked == true"
>
&ensp;
</van-button>
@@ -595,6 +594,16 @@ layout("/mobile/platform.html"){
};
},
methods: {
editButtonShow(o) {
const type = Number(this.pageForm.theRapyRecuperationType)
if(type === 2) {
return false
}
let stateValid = ![2715,2725,2735].includes(o.stateId)
let lineValid = [0, 1].includes(type) && moment().unix() < moment(this.configData.implodeEndTime).unix()
let baseValid = [3].includes(type) && moment().unix() < moment(this.configData.fragmentEndTime).unix()
return stateValid && (lineValid || baseValid);
},
async openEvaluate(o) {
if (o.isTakePartIn === false) {
this.$modal.msg("参加后才能评价");
@@ -153,12 +153,12 @@ layout("/layouts/platform.html"){
<el-row :gutter="20">
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="目的地名称" prop="baseName">
<el-input maxlength="50" v-model="formData.baseName"></el-input>
<el-input maxlength="50" v-model="formData.baseName" placeholder="请输入目的地名称"></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="旅行社名称" prop="travelAgencyId">
<el-select clearable filterable style="width: 100%" v-model="formData.travelAgencyId">
<el-select clearable filterable style="width: 100%" v-model="formData.travelAgencyId" placeholder="请选择旅行社名称">
<el-option :key="item.id"
:label="item.travelAgencyName+'('+ item.year +'年)'"
:value="item.id"
@@ -169,18 +169,14 @@ layout("/layouts/platform.html"){
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :md="12" :sm="24" :xs="24">
<!--<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="组织形式" prop="createMode">
<el-radio-group size="small" v-model="formData.createMode">
<el-radio :label="1" border>校工会组织</el-radio>
<el-radio :label="2" border>分工会组织</el-radio>
</el-radio-group>
<!--<div class="text-primary">-->
<!-- <i class="el-icon-warning"></i>-->
<!-- 温馨提醒:校工会可以为基层工会创建线路,分工会自行选择并设置活动相关时间。-->
<!--</div>-->
</el-form-item>
</el-col>
</el-col>-->
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="活动范围" prop="regionalNature">
<el-radio-group size="small" v-model="formData.regionalNature">
@@ -189,23 +185,27 @@ layout("/layouts/platform.html"){
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="标段时间" prop="lotId">
<!--<el-input clearable maxlength="50" v-model="formData.lotId"></el-input>-->
<el-select clearable filterable style="width: 100%" v-model="formData.lotId"
<el-form-item label="天数" prop="allowDay">
<!--<el-select clearable filterable style="width: 100%" v-model="formData.lotId"
@change="doBdModify">
<el-option :key="item"
:label="item.lotName"
:value="item.id"
v-for="item in modifyBdList"
></el-option>
</el-select>-->
<el-select clearable multiple filterable style="width: 100%" v-model="formData.allowDay" placeholder="请选择天数">
<el-option value="3">3天</el-option>
<el-option value="2">2天</el-option>
<el-option value="2.5">2.5天</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" :xs="24">
</el-row>
<el-row :gutter="20">
<!--<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="预计费用(元/人次)" prop="estimatedCost">
<el-select clearable filterable style="width: 100%" v-model="formData.estimatedCost">
<el-option :key="item.id"
@@ -215,7 +215,7 @@ layout("/layouts/platform.html"){
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-col>-->
</el-row>
<el-row :gutter="20">
@@ -223,7 +223,7 @@ layout("/layouts/platform.html"){
<el-form-item label="周几入住" prop="weekIn">
<el-radio-group size="small" v-model="formData.weekIn" @input="weekChange">
<el-radio :label="1" border>不限</el-radio>
<el-radio :label="2" border>读取标段配置</el-radio>
<el-radio :label="2" border>自定义</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@@ -231,6 +231,7 @@ layout("/layouts/platform.html"){
<el-form-item label="入住时间" prop="weekCheckIn">
<el-select clearable filterable multiple
:disabled="formData.weekIn === 1"
placeholder="请选择入住时间"
style="width: 100%" v-model="formData.weekCheckIn">
<el-option label="周一" :value="1"></el-option>
<el-option label="周二" :value="2"></el-option>
@@ -247,17 +248,17 @@ layout("/layouts/platform.html"){
<el-row :gutter="20">
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="目的地联系人" prop="baseContactPerson">
<el-input clearable maxlength="20" v-model="formData.baseContactPerson"></el-input>
<el-input clearable maxlength="20" v-model="formData.baseContactPerson" placeholder="请输入目的地联系人"></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="联系人电话" prop="baseContactNumber">
<el-input clearable maxlength="20" v-model="formData.baseContactNumber"></el-input>
<el-input clearable maxlength="20" v-model="formData.baseContactNumber" placeholder="请输入联系人电话"></el-input>
</el-form-item>
</el-col>
</el-row>
<template>
<!--<template>
<el-row :gutter="20">
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="报名开始时间" prop="signUpStartTime">
@@ -333,7 +334,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-col>
</el-row>
</template>
</template>-->
<el-row :gutter="20">
<el-col :md="24" :sm="24" :xs="24">
@@ -508,13 +509,14 @@ layout("/layouts/platform.html"){
signUpEndTime: '',
changeEndTime: '',
files: [],
createMode: '',
createMode: 1,
estimatedCost: '',
activityStartTime: '',
activityEndTime: '',
baseContactPerson: '',
baseContactNumber: '',
weekIn: 1,
allowDay: [],
},
tableColumns: [
{label: '年度', prop: 'year', sortable: true},
@@ -556,6 +558,7 @@ layout("/layouts/platform.html"){
trigger: ['change', 'blur']
}],
estimatedCost: [{required: true, message: '请输入预计费用', trigger: ['change', 'blur']}],
allowDay: [{required: true, message: '请选择天数', trigger: ['change', 'blur']}],
},
//目的地导入
importVisible: false,
@@ -565,7 +568,7 @@ layout("/layouts/platform.html"){
},
methods: {
weekChange(val) {
if (val === 1) {
/*if (val === 1) {
this.formData.weekCheckIn = []
this.$forceUpdate()
} else {
@@ -576,7 +579,7 @@ layout("/layouts/platform.html"){
}
const lot = this.modifyBdList.find(o => o.id === this.formData.lotId)
this.formData.weekCheckIn = lot ? lot.weekCheckIn : []
}
}*/
},
async doSearch() {
this.formData.year = this.pageForm.year;
@@ -50,10 +50,10 @@ layout("/layouts/platform.html"){
</div>
</el-form-item>
<el-form-item label="省外最多成团人数" prop="outsideQuota">
<!--<el-form-item label="省外最多成团人数" prop="outsideQuota">
<el-input v-model.number="formData.outsideQuota"
placeholder="请输入每条省外线路最多成团人数"></el-input>
</el-form-item>
</el-form-item>-->
<el-form-item label="省外名额分配比例" prop="outsideQuotaProportion">
@@ -62,7 +62,6 @@ layout("/layouts/platform.html"){
</el-input>
</el-form-item>
<el-form-item label="省外几年去一次" prop="outsideNumber">
<el-input max="100"
placeholder="请输入省外几年去一次"
@@ -75,23 +74,74 @@ layout("/layouts/platform.html"){
v-model.number="formData.travelFrequency"></el-input>
</el-form-item>
<el-form-item label="最少教工人数" prop="groupNumber">
<el-form-item label="常规团最少成团人数" prop="conventionalCount">
<el-input max="100" placeholder="请输入常规团最少成团人数(不包含家属)"
v-model.number="formData.conventionalCount"></el-input>
</el-form-item>
<el-form-item label="精品团最少成团人数" prop="boutiqueCount">
<el-input max="100" placeholder="请输入精品团最少成团人数(不包含家属)"
v-model.number="formData.boutiqueCount"></el-input>
</el-form-item>
<el-form-item label="分段式最少成团人数" prop="fragmentCount">
<el-input max="100" placeholder="请输入分段式最少成团人数(不包含家属)"
v-model.number="formData.fragmentCount"></el-input>
</el-form-item>
<el-form-item label="集中疗休养报名时间" prop="implodeTimes">
<el-date-picker
style="width: 100%"
v-model="formData.implodeTimes"
type="datetimerange"
range-separator="至"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="集中疗休养报名开始日期"
end-placeholder="集中疗休养报名结束日期">
</el-date-picker>
</el-form-item>
<el-form-item label="分段疗休养报名时间" prop="fragmentTimes">
<el-date-picker
style="width: 100%"
v-model="formData.fragmentTimes"
type="datetimerange"
range-separator="至"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="分段疗休养报名开始日期"
end-placeholder="分段疗休养报名结束日期">
</el-date-picker>
</el-form-item>
<el-form-item label="分段疗休养活动时间" prop="fragmentPlayTimes">
<el-date-picker
style="width: 100%"
v-model="formData.fragmentPlayTimes"
type="datetimerange"
range-separator="至"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="分段疗休养活动开始日期"
end-placeholder="分段疗休养活动结束日期">
</el-date-picker>
</el-form-item>
<!--<el-form-item label="最少教工人数" prop="groupNumber">
<el-input max="100"
placeholder="请输入最少教工人数"
v-model.number="formData.groupNumber"></el-input>
</el-form-item>
</el-form-item>-->
<el-form-item label="不可取消修改天数" prop="modifyDays">
<!--<el-form-item label="不可取消修改天数" prop="modifyDays">
<el-input max="100"
placeholder="请输入不可取消修改天数"
v-model.number="formData.modifyDays"></el-input>
</el-form-item>
</el-form-item>-->
<el-form-item label="可以修改几次" prop="modifyNumber">
<!--<el-form-item label="可以修改几次" prop="modifyNumber">
<el-input max="100"
placeholder="请输入可以修改几次"
v-model.number="formData.modifyNumber"></el-input>
</el-form-item>
</el-form-item>-->
<el-form-item label="省内线路是否需要审核" prop="isSnLine">
<el-radio-group v-model="formData.isSnLine">
@@ -107,11 +157,11 @@ layout("/layouts/platform.html"){
</el-radio-group>
</el-form-item>
<el-form-item label="全批次最多报名人数" prop="allLineSignUpNumber">
<!--<el-form-item label="全批次最多报名人数" prop="allLineSignUpNumber">
<el-input max="100"
placeholder="请输入全批次最多报名人数"
v-model.number="formData.allLineSignUpNumber"></el-input>
</el-form-item>
</el-form-item>-->
<el-form-item label="省内起始年份" prop="provinceStartYear">
<el-input max="100"
@@ -203,7 +253,7 @@ layout("/layouts/platform.html"){
<!--# } #-->
</el-table>
<vi-title title="服务须知"></vi-title>
<vi-title title="服务须知" class="mt20"></vi-title>
<el-form-item label="疗休养服务须知" prop="notice">
<text-editor v-model="formData.notice"></text-editor>
</el-form-item>
@@ -289,51 +339,24 @@ layout("/layouts/platform.html"){
configName: [{required: true, message: '请填写配置名称', trigger: ['blur', 'change']}],
isSnLine: [{required: true, message: '请选择省内线路是否需要审核', trigger: ['blur', 'change']}],
isSwLine: [{required: true, message: '请选择省外线路是否需要审核', trigger: ['blur', 'change']}],
outsideQuota: [{
required: true,
message: '请输入每条省外线路最多成团人数',
trigger: ['blur', 'change']
}],
outsideNumber: [{
required: true,
message: '请填写省外几年去一次',
trigger: ['blur', 'change']
}],
travelFrequency: [{
required: true,
message: '请填写每年旅行频率',
trigger: ['blur', 'change']
}],
groupNumber: [{
required: true,
message: '请填写最少教工人数',
trigger: ['blur', 'change']
}],
modifyDays: [{
required: true,
message: '请填写不可取消修改天数',
trigger: ['blur', 'change']
}],
modifyNumber: [{
required: true,
message: '请填写可以修改几次',
trigger: ['blur', 'change']
}],
outsideQuotaProportion: [{
required: true,
message: '请填写比例',
trigger: ['blur', 'change']
}],
allLineSignUpNumber: [{
required: true,
message: '请输入全批次最多报名人数',
trigger: ['blur', 'change']
}],
outsideQuota: [{required: true, message: '请输入每条省外线路最多成团人数', trigger: ['blur', 'change']}],
outsideNumber: [{required: true, message: '请填写省外几年去一次', trigger: ['blur', 'change']}],
travelFrequency: [{required: true, message: '请填写每年旅行频率', trigger: ['blur', 'change']}],
groupNumber: [{required: true, message: '请填写最少教工人数', trigger: ['blur', 'change']}],
modifyDays: [{required: true, message: '请填写不可取消修改天数', trigger: ['blur', 'change']}],
modifyNumber: [{required: true, message: '请填写可以修改几次', trigger: ['blur', 'change']}],
outsideQuotaProportion: [{required: true, message: '请填写比例', trigger: ['blur', 'change']}],
allLineSignUpNumber: [{required: true, message: '请输入全批次最多报名人数', trigger: ['blur', 'change']}],
notice: [{required: true, message: '请输入详细内容', trigger: ['change', 'blur']}],
provinceStartYear: [{required: true, message: '请输入省内起始年份', trigger: ['change', 'blur']}],
bedInfo: [{required: true, message: '请选择床位信息', trigger: ['change', 'blur']}],
familyInfo: [{required: true, message: '请选择家属信息', trigger: ['change', 'blur']}],
conventionalCount: [{required: true, message: '请输入常规团最少成团人数', trigger: ['change', 'blur']}],
boutiqueCount: [{required: true, message: '请输入精品团最少成团人数', trigger: ['change', 'blur']}],
fragmentCount: [{required: true, message: '请输入分段式最少成团人数', trigger: ['change', 'blur']}],
implodeTimes: [{required: true, message: '请选择集中疗休养报名时间', trigger: ['change', 'blur']}],
fragmentTimes: [{required: true, message: '请选择分段疗休养报名时间', trigger: ['change', 'blur']}],
fragmentPlayTimes: [{required: true, message: '请选择分段疗休养活动时间', trigger: ['change', 'blur']}],
},
marks: [],
lotDeleteList: [],
@@ -390,6 +413,21 @@ layout("/layouts/platform.html"){
})
const cloneData = clone(this.formData)
if(this.formData.implodeTimes && this.formData.implodeTimes.length > 0) {
cloneData.implodeStartTime = this.formData.implodeTimes[0]
cloneData.implodeEndTime = this.formData.implodeTimes[1]
}
if(this.formData.fragmentTimes && this.formData.fragmentTimes.length > 0) {
cloneData.fragmentStartTime = this.formData.fragmentTimes[0]
cloneData.fragmentEndTime = this.formData.fragmentTimes[1]
}
if(this.formData.fragmentPlayTimes && this.formData.fragmentPlayTimes.length > 0) {
cloneData.fragmentPlayStartTime = this.formData.fragmentPlayTimes[0]
cloneData.fragmentPlayEndTime = this.formData.fragmentPlayTimes[1]
}
if (this.formData.files && this.formData.files.length > 0) {
cloneData.files = JSON.stringify(this.formData.files)
}
@@ -417,6 +455,15 @@ layout("/layouts/platform.html"){
if (data.outsideQuotaProportion) {
data.outsideQuotaProportion = data.outsideQuotaProportion * 1000 / 10
}
if(data.implodeStartTime && data.implodeEndTime) {
data.implodeTimes = [data.implodeStartTime, data.implodeEndTime]
}
if(data.fragmentStartTime && data.fragmentEndTime) {
data.fragmentTimes = [data.fragmentStartTime, data.fragmentEndTime]
}
if(data.fragmentPlayStartTime && data.fragmentPlayEndTime) {
data.fragmentPlayTimes = [data.fragmentPlayStartTime, data.fragmentPlayEndTime]
}
if (!data.lots) {
data.lots = []
}