commit
This commit is contained in:
@@ -28,12 +28,9 @@ import java.util.List;
|
||||
@Slf4j
|
||||
public class MsgApi {
|
||||
|
||||
|
||||
|
||||
@Inject
|
||||
private RedisService redisService;
|
||||
|
||||
|
||||
/**
|
||||
* @param msgTitle 消息标题
|
||||
* @param msgContent 消息内容
|
||||
|
||||
@@ -702,6 +702,11 @@ public class Sys_user extends BaseModel implements Serializable {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String basicDiseaseInfo;
|
||||
|
||||
@Column
|
||||
@Comment("备注")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 前端菜单
|
||||
*/
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ public enum TheRapyRecuperationType {
|
||||
/**
|
||||
* 酒店
|
||||
*/
|
||||
provinceInHotel("目的地疗休养", 3, TheRapyRecuperationProvinceType.provinceIn.getValue(), "/assets/mobile/img/therapyRecuperation/lxs.png");
|
||||
provinceInHotel("分段疗休养", 3, TheRapyRecuperationProvinceType.provinceIn.getValue(), "/assets/mobile/img/therapyRecuperation/lxs.png");
|
||||
|
||||
/**
|
||||
* 学校自由组织
|
||||
|
||||
+2
-15
@@ -230,6 +230,7 @@ public class TheRapyRecuperationBaseManagerController {
|
||||
return Result.error("参数错误");
|
||||
}
|
||||
dao.delete(TheRapyRecuperationBaseManagement.class, id);
|
||||
dao.clear(TheRapyRecuperationEnroll.class, Cnd.where("takePartInBaseManagementId", "=", id));
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -339,24 +340,10 @@ public class TheRapyRecuperationBaseManagerController {
|
||||
currentDate = currentDate.plusDays(1);
|
||||
}
|
||||
|
||||
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(config.getFragmentPlayStartTime());
|
||||
//如果入职日期在活动开始时间之后的
|
||||
try {
|
||||
if (StrUtil.isNotBlank(schoolTime)
|
||||
&& String.valueOf(DateUtil.thisYear() - 1).equals(DateUtil.format(DateUtil.parse(schoolTime), "yyyy"))
|
||||
&& 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) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return Map.of("days", resultDates,
|
||||
"holidays", holidays,
|
||||
"lotValue", 0,
|
||||
"minDate", minDate,
|
||||
"minDate", DateUtil.formatDate(config.getFragmentPlayStartTime()),
|
||||
"maxDate", DateUtil.formatDate(config.getFragmentPlayEndTime()));
|
||||
}
|
||||
|
||||
|
||||
+13
-1
@@ -10,6 +10,7 @@ import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.wizzer.framework.base.Result;
|
||||
import io.v.nutz.base.annontation.ViReturn;
|
||||
import io.v.nutz.base.model.Audit;
|
||||
import io.v.nutz.base.utils.Vi;
|
||||
import io.v.nutz.base.query.PageForm;
|
||||
import io.v.nutz.sys.models.User;
|
||||
@@ -35,6 +36,7 @@ import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.*;
|
||||
import org.nutz.mvc.upload.TempFile;
|
||||
import org.nutz.mvc.upload.UploadAdaptor;
|
||||
@@ -188,7 +190,17 @@ public class TheRapyRecuperationLineController {
|
||||
@RequiresAuthentication
|
||||
public Object selectLineInfoById(String id) {
|
||||
Assert.notBlank(id);
|
||||
return lineService.selectLineInfoById(id);
|
||||
TheRapyRecuperationLine theRapyRecuperationLine = lineService.selectLineInfoById(id);
|
||||
TheRapyRecuperationLot lot = dao.fetch(TheRapyRecuperationLot.class, theRapyRecuperationLine.getLotId());
|
||||
|
||||
NutMap nutMap = Lang.obj2map(theRapyRecuperationLine, NutMap.class);
|
||||
nutMap.put("lotName", lot.getLotName());
|
||||
if(StrUtil.isNotBlank(theRapyRecuperationLine.getSchoolAuditId())) {
|
||||
Audit audit = dao.fetch(Audit.class, theRapyRecuperationLine.getSchoolAuditId());
|
||||
nutMap.put("schoolAudit", audit);
|
||||
}
|
||||
|
||||
return nutMap;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
package io.v.nutz.zhgh.therapyRecuperation.controller.basicManage;
|
||||
|
||||
import cn.wizzer.framework.base.Result;
|
||||
import cn.wizzer.framework.page.Pagination;
|
||||
import io.v.nutz.base.annontation.ViReturn;
|
||||
import io.v.nutz.base.model.Audit;
|
||||
import io.v.nutz.base.query.PageForm;
|
||||
import io.v.nutz.base.utils.Vi;
|
||||
import io.v.nutz.web.commons.slog.annotation.SLog;
|
||||
import io.v.nutz.web.commons.utils.ShiroUtil;
|
||||
import io.v.nutz.zhgh.loveSubsidy.constant.LoveSubsidyAuditStateConstant;
|
||||
import io.v.nutz.zhgh.loveSubsidy.model.LoveSubsidy;
|
||||
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine;
|
||||
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationLineService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.shiro.authz.annotation.Logical;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.apache.shiro.authz.annotation.RequiresRoles;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.POST;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName TheRapyRecuperationLineSchoolAuditController
|
||||
* @Author JyuHsin
|
||||
* @Date 2025/6/4 17:07
|
||||
* @Version 1.0
|
||||
* @Description TODO
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/theRapyRecuperation/line/schoolAudit")
|
||||
@Ok("json:full")
|
||||
@Slf4j
|
||||
public class TheRapyRecuperationLineSchoolAuditController {
|
||||
|
||||
@Inject
|
||||
private TheRapyRecuperationLineService lineService;
|
||||
@Inject
|
||||
private Dao dao;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/theRapyRecuperation/basicManage/schoolAudit.html")
|
||||
@RequiresPermissions("theRapyRecuperation.line.schoolAudit")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@POST
|
||||
@Ok("json:full")
|
||||
@ViReturn
|
||||
@RequiresPermissions("theRapyRecuperation.line.schoolAudit")
|
||||
public Object pageData(PageForm pageForm, Integer startYear, Integer endYear, String travelAgencyId, String lineName, String lotId, Integer isAudit) {
|
||||
Sql sql = Sqls.create("""
|
||||
select
|
||||
line.*,
|
||||
lot.lotName,
|
||||
ta.travelAgencyName,
|
||||
u.username AS createUserName
|
||||
from
|
||||
the_rapy_recuperation_line line
|
||||
LEFT JOIN the_rapy_recuperation_travel_agency ta ON ta.id = line.travelAgencyId
|
||||
LEFT JOIN the_rapy_recuperation_lot lot on lot.id = line.lotId
|
||||
LEFT JOIN sys_user u ON u.id = line.opBy
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if(isAudit == 1) {
|
||||
cnd.and("line.stateId", ">", 1);
|
||||
} else if(isAudit == 2) {
|
||||
cnd.and("line.stateId", "=", 1);
|
||||
}
|
||||
cnd.andEX("line.`year`", ">=", startYear);
|
||||
cnd.andEX("line.`year`", "<=", endYear);
|
||||
cnd.andEX("line.travelAgencyId", "=", travelAgencyId);
|
||||
cnd.andEX("line.lotId", "=", lotId);
|
||||
cnd.and(Cnd.likeEX("line.lineName", lineName));
|
||||
cnd.desc("year");
|
||||
cnd.desc("regionalNature").asc("serialNumber").asc("line.opBy");
|
||||
sql.setCondition(cnd);
|
||||
return lineService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
}
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@RequiresPermissions("theRapyRecuperation.line.schoolAudit")
|
||||
public Result onAudit(Audit audit, String id, Integer auditType) {
|
||||
dao.insert(audit);
|
||||
dao.update(TheRapyRecuperationLine.class,
|
||||
Chain.make("stateId", auditType)
|
||||
.add("schoolAuditId", audit.getId()),
|
||||
Cnd.where("id", "=", id));
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -85,8 +85,8 @@ public class TheRapyRecuperationEnrollController {
|
||||
@POST
|
||||
@ViReturn
|
||||
@RequiresAuthentication
|
||||
public Object pageData(PageForm pageForm, Integer year, String unionId, int theRapyRecuperationType, Integer lineUnionType, String routeName, String lotId) {
|
||||
return enrollService.enrollPageData(pageForm, year, unionId, theRapyRecuperationType, lineUnionType, routeName, lotId);
|
||||
public Object pageData(PageForm pageForm, Integer year, String unionId, int theRapyRecuperationType, Integer lineUnionType, String routeName, String lotId, String searchKeyword, String playStartTime, String playEndTime) {
|
||||
return enrollService.enrollPageData(pageForm, year, unionId, theRapyRecuperationType, lineUnionType, routeName, lotId, searchKeyword, playStartTime, playEndTime);
|
||||
}
|
||||
|
||||
@At
|
||||
|
||||
+10
-5
@@ -144,6 +144,7 @@ public class TheRapyRecuperationLineUnionSelectController {
|
||||
}
|
||||
}
|
||||
|
||||
cnd.and("line.stateId", "=", 4);
|
||||
cnd.and("line.isDisabled", "=", 0);
|
||||
|
||||
if (StrUtil.isNotBlank(keywords)) {
|
||||
@@ -285,17 +286,21 @@ public class TheRapyRecuperationLineUnionSelectController {
|
||||
try {
|
||||
Assert.notBlank(lineId);
|
||||
Assert.notBlank(unionId);
|
||||
// Cnd enrollCnd = Cnd.where("takePartInUnionId", "=", unionId);
|
||||
// enrollCnd.and("takePartInLineId", "=", lineId);
|
||||
Cnd enrollCnd = Cnd.where("unionId", "=", unionId);
|
||||
|
||||
List<TheRapyRecuperationLineUnionSelect> unionSelects = dao.query(TheRapyRecuperationLineUnionSelect.class, Cnd.where("lineId", "=", lineId));
|
||||
List<String> list = unionSelects.stream().map(TheRapyRecuperationLineUnionSelect::getId).toList();
|
||||
|
||||
dao.clear(TheRapyRecuperationLineUnionSelect.class, Cnd.where("lineId", "=", lineId));
|
||||
dao.clear(TheRapyRecuperationEnroll.class, Cnd.where("takePartInLineId", "in", list));
|
||||
|
||||
/*Cnd enrollCnd = Cnd.where("unionId", "=", unionId);
|
||||
enrollCnd.and("lineId", "=", lineId);
|
||||
unionSelectService.clear(enrollCnd);
|
||||
unionSelectService.clear(enrollCnd);*/
|
||||
|
||||
return Result.success();
|
||||
} catch (Exception e) {
|
||||
return Result.error(e.getMessage());
|
||||
}
|
||||
// unionSelectService.deSelect(usId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+2
@@ -293,6 +293,7 @@ public class TheRapyRecuperationUserQueryController {
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("rl.stateId", "=", 4);
|
||||
cnd.and(Cnd.exps("rlus.isOpen","=",1).or("rlus.unionId","=",Vi.getUnionId()));
|
||||
cnd.and("YEAR(rlus.selectTime)","=",DateUtil.thisYear());
|
||||
// cnd.and("rlus.signUpMode","=",signUpMode);
|
||||
@@ -357,6 +358,7 @@ public class TheRapyRecuperationUserQueryController {
|
||||
LEFT JOIN the_rapy_recuperation_travel_agency lxs ON lxs.id = line.travelAgencyId
|
||||
$condition
|
||||
""");
|
||||
cnd.and("line.stateId", "=", 4);
|
||||
cnd.andEX("YEAR(enroll.signingUptime)", ">=", startYear);
|
||||
cnd.andEX("YEAR(enroll.signingUptime)", "<=", endYear);
|
||||
cnd.andEX("enroll.selfUnitId", "=", unitId);
|
||||
|
||||
+2
@@ -59,6 +59,7 @@ public class TheRapyRecuperationLineQueryController {
|
||||
line.regionalNature,
|
||||
line.travelAgencyPlace,
|
||||
lineu.auditState,
|
||||
lineu.estimatedCost,
|
||||
lineu.lineId,
|
||||
lineu.id as lineUId,
|
||||
lineu.signUpMode,
|
||||
@@ -90,6 +91,7 @@ public class TheRapyRecuperationLineQueryController {
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("line.stateId", "=", 4);
|
||||
cnd.andEX("YEAR(lineu.selectTime)", ">=", startYear);
|
||||
cnd.andEX("YEAR(lineu.selectTime)", "<=", endYear);
|
||||
cnd.andEX("lineu.signUpMode", "=", signUpMode);
|
||||
|
||||
+6
@@ -116,6 +116,9 @@ public class TheRapyRecuperationSchoolUnionUserQueryController {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy().equalsIgnoreCase("ascending") ? "ASC" : "DESC");
|
||||
}
|
||||
|
||||
cnd.and("line.stateId", "=", 4);
|
||||
cnd.and("enroll.takePartInLineId", "is not", null);
|
||||
|
||||
// 年度
|
||||
cnd.andEX("YEAR ( enroll.signingUptime )", "=", year);
|
||||
if (StrUtil.isNotBlank(userName)) {
|
||||
@@ -259,6 +262,7 @@ public class TheRapyRecuperationSchoolUnionUserQueryController {
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t3.stateId", "=", 4);
|
||||
cnd.andEX("t1.selfUnionId", "=", unionId);
|
||||
cnd.andEX("YEAR(t2.selectTime)", "=", year);
|
||||
cnd.andEX("t3.regionalNature", "=", regionalNature);
|
||||
@@ -304,6 +308,8 @@ public class TheRapyRecuperationSchoolUnionUserQueryController {
|
||||
LEFT JOIN audit_state state ON state.stateId = enroll.stateId
|
||||
$condition
|
||||
""");
|
||||
cnd.and("enroll.takePartInLineId", "is not", null);
|
||||
cnd.and("line.stateId", "=", 4);
|
||||
// 年度
|
||||
cnd.andEX("YEAR ( enroll.signingUptime )", "=", year);
|
||||
if (StrUtil.isNotBlank(userName)) {
|
||||
|
||||
+3
-2
@@ -86,6 +86,7 @@ public class TheRapyRecuperationSatisfactionEvaluateController {
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t2.stateId", "=", 4);
|
||||
cnd.and("YEAR(t1.selectTime)", "=", year);
|
||||
cnd.andEX("t1.lineId", "=", lineId);
|
||||
sql.setCondition(cnd);
|
||||
@@ -136,7 +137,7 @@ public class TheRapyRecuperationSatisfactionEvaluateController {
|
||||
`the_rapy_recuperation_line_union_select` t1
|
||||
LEFT JOIN the_rapy_recuperation_line t2 ON t2.id = t1.lineId
|
||||
WHERE
|
||||
YEAR(selectTime) = @year
|
||||
YEAR(selectTime) = @year and t2.stateId = 4
|
||||
GROUP BY
|
||||
t1.id
|
||||
""");
|
||||
@@ -674,7 +675,7 @@ public class TheRapyRecuperationSatisfactionEvaluateController {
|
||||
LEFT JOIN the_rapy_recuperation_line t3 ON t3.id = t2.lineId
|
||||
LEFT JOIN the_rapy_recuperation_travel_agency t4 ON t4.id = t3.travelAgencyId
|
||||
LEFT JOIN the_rapy_recuperation_enroll t5 on t5.id = t1.enrollId
|
||||
where t1.selectLineId is not null and t1.selectLineId != '' and YEAR(t1.evaluateDate) = @year
|
||||
where t1.selectLineId is not null and t1.selectLineId != '' and YEAR(t1.evaluateDate) = @year and t3.stateId = 4
|
||||
""");
|
||||
sql.setParam("year", year);
|
||||
List<NutMap> list = enrollService.listMap(sql);
|
||||
|
||||
+244
-21
@@ -5,10 +5,17 @@ import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.wizzer.framework.base.Result;
|
||||
import com.deepoove.poi.XWPFTemplate;
|
||||
import com.deepoove.poi.config.Configure;
|
||||
import com.deepoove.poi.policy.HackLoopTableRenderPolicy;
|
||||
import io.v.nutz.base.annontation.ViReturn;
|
||||
import io.v.nutz.base.query.PageForm;
|
||||
import io.v.nutz.base.utils.MsgApi;
|
||||
import io.v.nutz.base.utils.OfficeTemplateUtil;
|
||||
import io.v.nutz.web.commons.base.Globals;
|
||||
import io.v.nutz.web.commons.utils.ShiroUtil;
|
||||
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
|
||||
import io.v.nutz.zhgh.therapyRecuperation.model.*;
|
||||
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollService;
|
||||
@@ -32,11 +39,17 @@ import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
/**
|
||||
* @ClassName TheRapyRecuperationLineFragmentController
|
||||
@@ -57,6 +70,8 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
private MsgApi msgApi;
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private OfficeTemplateUtil officeTemplateUtil;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/theRapyRecuperation/statistics/fragment.html")
|
||||
@@ -72,13 +87,15 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
@Param(value = "endYear", required = false) Integer endYear,
|
||||
@Param(value = "baseManagementId") String baseManagementId,
|
||||
@Param(value = "travelAgencyId") String travelAgencyId,
|
||||
@Param(value = "playStart") String playStart,
|
||||
@Param(value = "playEnd") String playEnd,
|
||||
@Param(value = "regionalNature", required = false) String regionalNature) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
bm.*,
|
||||
ta.travelAgencyName,
|
||||
(select COUNT(DISTINCT specificTime) from the_rapy_recuperation_enroll where isNormal = true and takePartInBaseManagementId = bm.id) as groupCount,
|
||||
(select COUNT(*) from the_rapy_recuperation_enroll where isNormal = true and takePartInBaseManagementId = bm.id) as signCount,
|
||||
(select COUNT(DISTINCT specificTime, playDay) from the_rapy_recuperation_enroll where isNormal = true and takePartInBaseManagementId = bm.id $signCnd) as groupCount,
|
||||
(select COUNT(*) from the_rapy_recuperation_enroll where isNormal = true and takePartInBaseManagementId = bm.id $signCnd) as signCount,
|
||||
u.username
|
||||
FROM
|
||||
`the_rapy_recuperation_base_management` bm
|
||||
@@ -86,7 +103,27 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
left join user u on u.id = bm.opBy
|
||||
$condition
|
||||
""");
|
||||
if (StrUtil.isNotBlank(playStart) && StrUtil.isNotBlank(playEnd)) {
|
||||
sql.setVar("signCnd", " and REPLACE(REPLACE(SUBSTRING_INDEX(specificTime, '-', 1), '月', '-'), '日', '') >= '%s' and REPLACE(REPLACE(SUBSTRING_INDEX(specificTime, '-', 1), '月', '-'), '日', '') <= '%s'".formatted(playStart, playEnd));
|
||||
} else if (StrUtil.isNotBlank(playStart)) {
|
||||
sql.setVar("signCnd", " and REPLACE(REPLACE(SUBSTRING_INDEX(specificTime, '-', 1), '月', '-'), '日', '') >= '%s'".formatted(playStart));
|
||||
} else if (StrUtil.isNotBlank(playEnd)) {
|
||||
sql.setVar("signCnd", " and REPLACE(REPLACE(SUBSTRING_INDEX(specificTime, '-', 1), '月', '-'), '日', '') <= '%s'".formatted(playEnd));
|
||||
}
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!ShiroUtil.hasAnyRoles("sysadmin, SchoolUnionAdmin")) {
|
||||
//如果不是管理员,那么只查自己报名的酒店
|
||||
Cnd enrollCnd = Cnd.where("takePartInBaseManagementId", "is not", null)
|
||||
.and("isNormal", "=", true)
|
||||
.and("stateId", "=", 2750)
|
||||
.and("loginName", "=", ShiroUtil.getPlatformLoginname());
|
||||
List<TheRapyRecuperationEnroll> enrolls = dao.query(TheRapyRecuperationEnroll.class, enrollCnd);
|
||||
List<String> list = enrolls.stream()
|
||||
.map(TheRapyRecuperationEnroll::getTakePartInBaseManagementId)
|
||||
.distinct()
|
||||
.toList();
|
||||
cnd.and("bm.id", "in", list);
|
||||
}
|
||||
cnd.andEX("bm.year", ">=", startYear);
|
||||
cnd.andEX("bm.year", "<=", endYear);
|
||||
cnd.andEX("bm.id", "=", baseManagementId);
|
||||
@@ -118,12 +155,17 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
@RequiresPermissions("theRapyRecuperation.fragment")
|
||||
public Object getSignUser(PageForm pageForm,
|
||||
@Param(value = "takePartInBaseManagementId", required = false) String takePartInBaseManagementId,
|
||||
@Param(value = "specificTime", required = false) String specificTime) {
|
||||
@Param(value = "specificTime", required = false) String specificTime,
|
||||
@Param(value = "playStart", required = false) String playStart,
|
||||
@Param(value = "playEnd", required = false) String playEnd,
|
||||
@Param(value = "playCount", required = false) Integer playCount) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
en.id,
|
||||
en.takePartInBaseManagementId,
|
||||
en.specificTime,
|
||||
en.playDay,
|
||||
(en.playDay * 600) as money,
|
||||
u.loginname,
|
||||
u.username,
|
||||
u.sex,
|
||||
@@ -138,6 +180,9 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("en.takePartInBaseManagementId", "is not", null);
|
||||
cnd.andEX("en.specificTime", "=", specificTime);
|
||||
cnd.andEX("en.playCount", "=", playCount);
|
||||
cnd.andEX("REPLACE(REPLACE(SUBSTRING_INDEX(specificTime, '-', 1), '月', '-'), '日', '')", ">=", playStart);
|
||||
cnd.andEX("REPLACE(REPLACE(SUBSTRING_INDEX(specificTime, '-', 1), '月', '-'), '日', '')", "<=", playEnd);
|
||||
cnd.andEX("en.takePartInBaseManagementId", "=", takePartInBaseManagementId);
|
||||
cnd.desc("en.specificTime");
|
||||
sql.setCondition(cnd);
|
||||
@@ -148,12 +193,14 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
@ViReturn
|
||||
@RequiresPermissions("theRapyRecuperation.fragment")
|
||||
public Object getGroupInfo(PageForm pageForm,
|
||||
@Param(value = "baseId", required = false) String baseId) {
|
||||
|
||||
@Param(value = "baseId", required = false) String baseId,
|
||||
@Param(value = "playStart") String playStart,
|
||||
@Param(value = "playEnd") String playEnd) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
en.takePartInBaseManagementId as id,
|
||||
specificTime,
|
||||
en.playDay,
|
||||
count( specificTime ) as userCount,
|
||||
en.hasLocked
|
||||
FROM
|
||||
@@ -163,7 +210,9 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("en.takePartInBaseManagementId", "=", baseId);
|
||||
cnd.and("en.takePartInBaseManagementId", "is not", null);
|
||||
cnd.groupBy("en.specificTime");
|
||||
cnd.andEX("REPLACE(REPLACE(SUBSTRING_INDEX(specificTime, '-', 1), '月', '-'), '日', '')", ">=", playStart);
|
||||
cnd.andEX("REPLACE(REPLACE(SUBSTRING_INDEX(specificTime, '-', 1), '月', '-'), '日', '')", "<=", playEnd);
|
||||
cnd.groupBy("en.takePartInBaseManagementId,en.playDay,en.specificTime");
|
||||
cnd.desc("en.specificTime");
|
||||
sql.setCondition(cnd);
|
||||
return enrollService.listMap(sql);
|
||||
@@ -173,7 +222,7 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
@ViReturn
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@RequiresPermissions("theRapyRecuperation.fragment")
|
||||
public Object sendSuccess(String baseId, Boolean type) {
|
||||
public Object sendSuccess(String baseId, Boolean type, String specificTime, Integer playDay) {
|
||||
TheRapyRecuperationConfig config = dao.fetch(TheRapyRecuperationConfig.class, Cnd.NEW());
|
||||
|
||||
if (DateUtil.compare(new Date(), config.getFragmentEndTime()) < 0) {
|
||||
@@ -186,10 +235,12 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
List<TheRapyRecuperationEnroll> enrolls = dao.query(
|
||||
TheRapyRecuperationEnroll.class,
|
||||
Cnd.where("takePartInBaseManagementId", "=", baseId)
|
||||
.and("specificTime", "=", specificTime)
|
||||
.and("playDay", "=", playDay)
|
||||
.and("isNormal", "=", true).and("year(signingUptime)", "=", DateUtil.thisYear())
|
||||
.and("stateId", "not in", Lang.array(TheRapyRecuperationState.UNITFAIL, TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.SCHOOLFAIL)));
|
||||
|
||||
if(enrolls.size() < config.getFragmentCount()) {
|
||||
if (enrolls.size() < config.getFragmentCount()) {
|
||||
return Result.error("报名人数为%s人,未达到%s人的成团条件".formatted(enrolls.size(), config.getFragmentCount()));
|
||||
}
|
||||
|
||||
@@ -198,7 +249,7 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
});
|
||||
dao.update(enrolls);
|
||||
//发短信
|
||||
if(type) {
|
||||
if (type) {
|
||||
enrolls.forEach(item -> {
|
||||
String content = "%s老师,您好!您报名的%s酒店,出行时间为%s,达到成团条件,请准时参加疗休养活动。".formatted(
|
||||
item.getUserName(),
|
||||
@@ -215,7 +266,7 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
@ViReturn
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@RequiresPermissions("theRapyRecuperation.fragment")
|
||||
public Object sendFail(String baseId, Boolean type) {
|
||||
public Object sendFail(String baseId, Boolean type, String specificTime, Integer playDay) {
|
||||
|
||||
TheRapyRecuperationConfig config = dao.fetch(TheRapyRecuperationConfig.class, Cnd.NEW());
|
||||
|
||||
@@ -229,6 +280,8 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
List<TheRapyRecuperationEnroll> enrolls = dao.query(
|
||||
TheRapyRecuperationEnroll.class,
|
||||
Cnd.where("takePartInBaseManagementId", "=", baseId)
|
||||
.and("specificTime", "=", specificTime)
|
||||
.and("playDay", "=", playDay)
|
||||
.and("isNormal", "=", true).and("year(signingUptime)", "=", DateUtil.thisYear())
|
||||
.and("stateId", "not in", Lang.array(TheRapyRecuperationState.UNITFAIL, TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.SCHOOLFAIL)));
|
||||
|
||||
@@ -242,7 +295,7 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
//msgApi.sendTextMsg(content, item.getLoginName());
|
||||
});
|
||||
|
||||
if(!type) {
|
||||
if (!type) {
|
||||
List<String> enrollIds = enrolls.stream().map(TheRapyRecuperationEnroll::getId).collect(Collectors.toList());
|
||||
List<String> bedIds = enrolls.stream().map(TheRapyRecuperationEnroll::getBedInfoId).collect(Collectors.toList());
|
||||
dao.clear(TheRapyRecuperationEnroll.class, Cnd.where("takePartInBaseManagementId", "=", baseId));
|
||||
@@ -255,6 +308,67 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
return null;
|
||||
}
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@RequiresPermissions("theRapyRecuperation.fragment")
|
||||
public Object oneKeyGroupSuccess(String travelAgencyId, String baseId, String playStart, String playEnd, Boolean type) {
|
||||
TheRapyRecuperationConfig config = dao.fetch(TheRapyRecuperationConfig.class, Cnd.NEW());
|
||||
Integer fragmentCount = config.getFragmentCount();
|
||||
|
||||
if (DateUtil.compare(new Date(), config.getFragmentEndTime()) < 0) {
|
||||
return Result.error("报名还未结束");
|
||||
}
|
||||
|
||||
List<TheRapyRecuperationBaseManagement> managements = dao.query(TheRapyRecuperationBaseManagement.class, Cnd.NEW());
|
||||
Map<String, String> baseMap = managements.stream().collect(Collectors.toMap(TheRapyRecuperationBaseManagement::getId, TheRapyRecuperationBaseManagement::getBaseName));
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
en.takePartInBaseManagementId,
|
||||
en.specificTime,
|
||||
en.playDay,
|
||||
count( specificTime ) as userCount
|
||||
FROM
|
||||
the_rapy_recuperation_enroll en
|
||||
LEFT JOIN the_rapy_recuperation_base_management bm ON en.takePartInBaseManagementId = bm.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("takePartInBaseManagementId", "is not", null);
|
||||
cnd.and("isNormal", "=", true);
|
||||
cnd.and("stateId", "=", 2750);
|
||||
cnd.andEX("REPLACE(REPLACE(SUBSTRING_INDEX(specificTime, '-', 1), '月', '-'), '日', '')", ">=", playStart);
|
||||
cnd.andEX("REPLACE(REPLACE(SUBSTRING_INDEX(specificTime, '-', 1), '月', '-'), '日', '')", "<=", playEnd);
|
||||
cnd.andEX("bm.travelAgencyId", "=", travelAgencyId);
|
||||
cnd.andEX("en.takePartInBaseManagementId", "=", baseId);
|
||||
cnd.groupBy("en.takePartInBaseManagementId,en.playDay,en.specificTime");
|
||||
cnd.having(Cnd.where("userCount", ">=", fragmentCount));
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> enrolls = enrollService.listMap(sql);
|
||||
for (NutMap enroll : enrolls) {
|
||||
List<TheRapyRecuperationEnroll> enrollList = dao.query(
|
||||
TheRapyRecuperationEnroll.class,
|
||||
Cnd.where("takePartInBaseManagementId", "=", enroll.getString("takePartInBaseManagementId"))
|
||||
.and("playDay", "=", enroll.getString("playDay"))
|
||||
.and("specificTime", "=", enroll.getString("specificTime"))
|
||||
.and("isNormal", "=", true)
|
||||
);
|
||||
for (TheRapyRecuperationEnroll en : enrollList) {
|
||||
en.setHasLocked(true);
|
||||
if (type) {
|
||||
String content = "%s老师,您好!您报名的%s酒店,出行时间为%s,达到成团条件,请准时参加疗休养活动。".formatted(
|
||||
en.getUserName(),
|
||||
baseMap.get(en.getTakePartInBaseManagementId()),
|
||||
en.getSpecificTime()
|
||||
);
|
||||
//msgApi.sendTextMsg(content, item.getLoginName());
|
||||
}
|
||||
}
|
||||
dao.update(enrollList);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@RequiresPermissions("theRapyRecuperation.fragment")
|
||||
@@ -263,13 +377,17 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
@Param(value = "baseManagementId") String baseManagementId,
|
||||
@Param(value = "travelAgencyId") String travelAgencyId,
|
||||
@Param(value = "regionalNature", required = false) String regionalNature,
|
||||
@Param(value = "playStart", required = false) String playStart,
|
||||
@Param(value = "playEnd", required = false) String playEnd,
|
||||
HttpServletResponse response) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
en.*,
|
||||
bm.baseName,
|
||||
ta.travelAgencyName,
|
||||
u.remark
|
||||
u.remark,
|
||||
(en.playDay * 600) as money,
|
||||
'否' as useNextMoney
|
||||
FROM
|
||||
the_rapy_recuperation_enroll en
|
||||
LEFT JOIN the_rapy_recuperation_base_management bm ON bm.id = en.takePartInBaseManagementId
|
||||
@@ -285,31 +403,136 @@ public class TheRapyRecuperationLineFragmentController {
|
||||
cnd.and("en.isNormal", "=", true);
|
||||
cnd.and("en.stateId", "=", TheRapyRecuperationState.PASS);
|
||||
cnd.and("en.takePartInBaseManagementId", "is not", null);
|
||||
cnd.andEX("REPLACE(REPLACE(SUBSTRING_INDEX(specificTime, '-', 1), '月', '-'), '日', '')", ">=", playStart);
|
||||
cnd.andEX("REPLACE(REPLACE(SUBSTRING_INDEX(specificTime, '-', 1), '月', '-'), '日', '')", "<=", playEnd);
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> list = enrollService.listMap(sql);
|
||||
|
||||
ArrayList<ExcelExportEntity> exportEntities = new ArrayList<>();
|
||||
exportEntities.add(new ExcelExportEntity("部门", "unitName", 40));
|
||||
exportEntities.add(new ExcelExportEntity("姓名", "userName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("工号", "loginName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("性别", "sex", 10));
|
||||
exportEntities.add(new ExcelExportEntity("单位", "unitName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("工会", "unionName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("身份证号", "idCard", 30));
|
||||
exportEntities.add(new ExcelExportEntity("手机号", "mobile", 15));
|
||||
exportEntities.add(new ExcelExportEntity("酒店名称", "baseName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("旅行社", "agencyName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("报名时间", "signingUptime", 20));
|
||||
exportEntities.add(new ExcelExportEntity("出行时间", "specificTime", 50));
|
||||
exportEntities.add(new ExcelExportEntity("出行日期", "specificTime", 50));
|
||||
exportEntities.add(new ExcelExportEntity("出行天数", "playDay", 10));
|
||||
exportEntities.add(new ExcelExportEntity("出行地点", "baseName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("备注", "remark", 20));
|
||||
exportEntities.add(new ExcelExportEntity("旅行社", "travelAgencyName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("费用(元)", "money", 20));
|
||||
exportEntities.add(new ExcelExportEntity("使用下一年经费", "useNextMoney", 20));
|
||||
|
||||
try {
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setTitle("分段疗休养报名签到表");
|
||||
response.setContentType("application/octet-stream");
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + new String(("报名人员.xls").getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), exportEntities, list);
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + new String(("分段疗休养报名签到表.xls").getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
|
||||
workbook.write(response.getOutputStream());
|
||||
workbook.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@RequiresPermissions("theRapyRecuperation.fragment")
|
||||
public void exportGroup(@Param(value = "startYear", required = false) Integer startYear,
|
||||
@Param(value = "endYear", required = false) Integer endYear,
|
||||
@Param(value = "baseManagementId") String baseManagementId,
|
||||
@Param(value = "travelAgencyId") String travelAgencyId,
|
||||
@Param(value = "playStart", required = false) String playStart,
|
||||
@Param(value = "playEnd", required = false) String playEnd,
|
||||
HttpServletResponse response) throws IOException {
|
||||
|
||||
response.setContentType("application/octet-stream");
|
||||
response.setHeader("content-disposition", "attachment;filename="
|
||||
+ URLEncoder.encode("分段疗休养成团表.zip", StandardCharsets.UTF_8));
|
||||
|
||||
TheRapyRecuperationConfig rapyConfig = dao.fetch(TheRapyRecuperationConfig.class, Cnd.NEW());
|
||||
Integer fragmentCount = rapyConfig.getFragmentCount();
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
en.takePartInBaseManagementId as baseId,
|
||||
specificTime,
|
||||
en.playDay,
|
||||
count( specificTime ) as userCount,
|
||||
en.hasLocked,
|
||||
bm.baseName,
|
||||
ta.travelAgencyName
|
||||
FROM
|
||||
the_rapy_recuperation_enroll en
|
||||
left join the_rapy_recuperation_base_management bm on bm.id = en.takePartInBaseManagementId
|
||||
left join the_rapy_recuperation_travel_agency ta on ta.id = bm.travelAgencyId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("en.takePartInBaseManagementId", "=", baseManagementId);
|
||||
cnd.and("en.takePartInBaseManagementId", "is not", null);
|
||||
cnd.andEX("REPLACE(REPLACE(SUBSTRING_INDEX(specificTime, '-', 1), '月', '-'), '日', '')", ">=", playStart);
|
||||
cnd.andEX("REPLACE(REPLACE(SUBSTRING_INDEX(specificTime, '-', 1), '月', '-'), '日', '')", "<=", playEnd);
|
||||
cnd.groupBy("en.takePartInBaseManagementId,en.playDay,en.specificTime");
|
||||
cnd.having(Cnd.where("userCount", ">=", fragmentCount));
|
||||
cnd.desc("en.specificTime");
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> listMap = enrollService.listMap(sql);
|
||||
|
||||
ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
|
||||
for (int i = 0; i < listMap.size(); i++) {
|
||||
NutMap group = listMap.get(i);
|
||||
Double playDay = group.getDouble("playDay");
|
||||
Object dayCount = playDay % 1 == 0 ? String.valueOf(playDay.intValue()) : playDay;
|
||||
group.put("playDay", dayCount);
|
||||
Sql userSql = Sqls.create("""
|
||||
select
|
||||
userName as uName,
|
||||
unitName,
|
||||
idCard,
|
||||
mobile
|
||||
from
|
||||
the_rapy_recuperation_enroll
|
||||
$condition
|
||||
""");
|
||||
Cnd userCnd = Cnd.NEW();
|
||||
userCnd.and("isNormal", "=", true);
|
||||
userCnd.and("stateId", "=", 2750);
|
||||
userCnd.and("hasLocked", "=", true);
|
||||
userCnd.and("specificTime", "=", group.getString("specificTime"));
|
||||
userCnd.and("playDay", "=", group.getString("playDay"));
|
||||
userCnd.and("takePartInBaseManagementId", "=", group.getString("baseId"));
|
||||
userCnd.asc("signingUptime");
|
||||
userSql.setCondition(userCnd);
|
||||
List<NutMap> userList = enrollService.listMap(userSql);
|
||||
for (int u = 0; u < userList.size(); u++) {
|
||||
userList.get(u).put("index", (u + 1));
|
||||
}
|
||||
|
||||
NutMap data = new NutMap();
|
||||
data.put("schoolName", Globals.schoolName);
|
||||
data.put("address", group.getString("baseName"));
|
||||
data.put("playTime", group.getString("specificTime"));
|
||||
data.put("groupType", group.getString("playDay") + "天");
|
||||
data.put("travelName", group.getString("travelAgencyName"));
|
||||
data.put("opinions", "同意");
|
||||
data.put("applyTime", DateUtil.now());
|
||||
data.put("auditTime", DateUtil.now());
|
||||
if(Lang.isNotEmpty(userList)) {
|
||||
data.put("deptName", userList.get(0).getString("unitName"));
|
||||
data.put("leader", userList.get(0).getString("uName"));
|
||||
data.put("mobile", userList.get(0).getString("mobile"));
|
||||
}
|
||||
data.put("list", userList);
|
||||
|
||||
HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();
|
||||
Configure config = Configure.builder().bind("list", policy).build();
|
||||
|
||||
String fileName = (i + 1) + "." + group.getString("baseName") + "(" + group.getString("specificTime") + ")" + group.getString("playDay") + "天成团表.docx";
|
||||
zipOutputStream.putNextEntry(new ZipEntry(fileName));
|
||||
XWPFTemplate.compile(officeTemplateUtil.getPath("the_rapy_group"), config).render(data).write(zipOutputStream);
|
||||
zipOutputStream.closeEntry();
|
||||
}
|
||||
zipOutputStream.flush();
|
||||
zipOutputStream.close();
|
||||
}
|
||||
}
|
||||
|
||||
+190
@@ -1,18 +1,27 @@
|
||||
package io.v.nutz.zhgh.therapyRecuperation.controller.statistics;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.wizzer.framework.base.Result;
|
||||
import com.deepoove.poi.XWPFTemplate;
|
||||
import com.deepoove.poi.config.Configure;
|
||||
import com.deepoove.poi.policy.HackLoopTableRenderPolicy;
|
||||
import io.v.nutz.base.annontation.ViReturn;
|
||||
import io.v.nutz.base.query.PageForm;
|
||||
import io.v.nutz.base.utils.MsgApi;
|
||||
import io.v.nutz.base.utils.OfficeTemplateUtil;
|
||||
import io.v.nutz.base.utils.Vi;
|
||||
import io.v.nutz.web.commons.base.Globals;
|
||||
import io.v.nutz.web.commons.utils.ShiroUtil;
|
||||
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
|
||||
import io.v.nutz.zhgh.therapyRecuperation.model.*;
|
||||
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationEnrollService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.shiro.authz.annotation.RequiresAuthentication;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
@@ -26,14 +35,23 @@ import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
@@ -54,6 +72,8 @@ public class TheRapyRecuperationLineStatisticsController {
|
||||
private MsgApi msgApi;
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private OfficeTemplateUtil officeTemplateUtil;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/theRapyRecuperation/statistics/lineStatistics.html")
|
||||
@@ -112,6 +132,7 @@ public class TheRapyRecuperationLineStatisticsController {
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("line.stateId", "=", 4);
|
||||
cnd.andEX("YEAR(lineu.selectTime)", ">=", startYear);
|
||||
cnd.andEX("YEAR(lineu.selectTime)", "<=", endYear);
|
||||
cnd.andEX("lineu.signUpMode","=",signUpMode);
|
||||
@@ -308,4 +329,173 @@ public class TheRapyRecuperationLineStatisticsController {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@RequiresPermissions("theRapyRecuperation.statistics")
|
||||
public void doExport(@Param(value = "startYear", required = false) Integer startYear,
|
||||
@Param(value = "endYear", required = false) Integer endYear,
|
||||
@Param(value = "unionId", required = false) String unionId,
|
||||
@Param(value = "takePartInLineId") String takePartInLineId,
|
||||
@Param(value = "lotId", required = false) String lotId,
|
||||
@Param(value = "selectId", required = false) String selectId,
|
||||
@Param(value = "regionalNature", required = false) String regionalNature,
|
||||
HttpServletResponse response) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
enroll.*,
|
||||
line.lineName,
|
||||
lxs.travelAgencyName,
|
||||
u.remark,
|
||||
lot.activityCost as money,
|
||||
lot.lotValue as playDay,
|
||||
if(enroll.moneyType = 2, '是' , '否') as useNextMoney,
|
||||
CONCAT(DATE_FORMAT(lineu.playStartTime, '%m月%d日'), '-', DATE_FORMAT(lineu.playEndTime, '%m月%d日')) as specificTime
|
||||
FROM
|
||||
`the_rapy_recuperation_enroll` enroll
|
||||
LEFT JOIN the_rapy_recuperation_line_union_select lineu ON lineu.id = enroll.takePartInLineId
|
||||
LEFT JOIN the_rapy_recuperation_line line ON line.id = lineu.lineId
|
||||
LEFT JOIN the_rapy_recuperation_lot lot ON lot.id = line.lotId
|
||||
LEFT JOIN the_rapy_recuperation_travel_agency lxs ON line.travelAgencyId = lxs.id
|
||||
LEFT JOIN sys_user u on u.loginname = enroll.loginName
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("lineu.groupSuccess", "=", true);
|
||||
cnd.and("line.stateId", "=", 4);
|
||||
cnd.andEX("YEAR(lineu.selectTime)", ">=", startYear);
|
||||
cnd.andEX("YEAR(lineu.selectTime)", "<=", endYear);
|
||||
if (!ShiroUtil.hasAnyRoles("sysadmin, SchoolUnionAdmin")) {
|
||||
cnd.and("lineu.selectUserId", "=", ShiroUtil.getUserId());
|
||||
}
|
||||
cnd.andEX("line.lotId", "=", lotId);
|
||||
cnd.andEX("line.id", "=", takePartInLineId);
|
||||
cnd.andEX("lineu.id", "=", selectId);
|
||||
cnd.andEX("line.regionalNature", "=", regionalNature);
|
||||
cnd.asc("enroll.signingUptime");
|
||||
sql.setCondition(cnd);
|
||||
|
||||
List<NutMap> list = enrollService.listMap(sql);
|
||||
ArrayList<ExcelExportEntity> exportEntities = new ArrayList<>();
|
||||
exportEntities.add(new ExcelExportEntity("部门", "unitName", 40));
|
||||
exportEntities.add(new ExcelExportEntity("姓名", "userName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("性别", "sex", 10));
|
||||
exportEntities.add(new ExcelExportEntity("身份证号", "idCard", 30));
|
||||
exportEntities.add(new ExcelExportEntity("手机号", "mobile", 15));
|
||||
exportEntities.add(new ExcelExportEntity("出行日期", "specificTime", 50));
|
||||
exportEntities.add(new ExcelExportEntity("出行天数", "playDay", 10));
|
||||
exportEntities.add(new ExcelExportEntity("出行地点", "lineName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("备注", "remark", 20));
|
||||
exportEntities.add(new ExcelExportEntity("旅行社", "travelAgencyName", 20));
|
||||
exportEntities.add(new ExcelExportEntity("费用(元)", "money", 20));
|
||||
exportEntities.add(new ExcelExportEntity("使用下一年经费", "useNextMoney", 20));
|
||||
|
||||
try {
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setTitle("集中疗休养报名签到表");
|
||||
response.setContentType("application/octet-stream");
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + new String(("集中疗休养报名签到表.xls").getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
|
||||
workbook.write(response.getOutputStream());
|
||||
workbook.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@RequiresPermissions("theRapyRecuperation.statistics")
|
||||
public void exportGroup(@Param(value = "startYear", required = false) Integer startYear,
|
||||
@Param(value = "endYear", required = false) Integer endYear,
|
||||
@Param(value = "unionId", required = false) String unionId,
|
||||
@Param(value = "takePartInLineId") String takePartInLineId,
|
||||
@Param(value = "lotId", required = false) String lotId,
|
||||
@Param(value = "selectId", required = false) String selectId,
|
||||
@Param(value = "regionalNature", required = false) String regionalNature,
|
||||
HttpServletResponse response) throws IOException {
|
||||
response.setContentType("application/octet-stream");
|
||||
response.setHeader("content-disposition", "attachment;filename="
|
||||
+ URLEncoder.encode("集中疗休养成团表.zip", StandardCharsets.UTF_8));
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
us.id,
|
||||
line.lineName,
|
||||
CONCAT(DATE_FORMAT(us.playStartTime, '%m月%d日'), '-', DATE_FORMAT(us.playEndTime, '%m月%d日')) as specificTime,
|
||||
IF
|
||||
( line.groupType = 1, '常规团', '精品团' ) AS groupType,
|
||||
ta.travelAgencyName
|
||||
FROM
|
||||
the_rapy_recuperation_line_union_select us
|
||||
LEFT JOIN the_rapy_recuperation_line line ON us.lineId = line.id
|
||||
LEFT JOIN the_rapy_recuperation_travel_agency ta ON ta.id = line.travelAgencyId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("us.groupSuccess", "=", true);
|
||||
cnd.and("line.stateId", "=", 4);
|
||||
cnd.andEX("YEAR(us.selectTime)", ">=", startYear);
|
||||
cnd.andEX("YEAR(us.selectTime)", "<=", endYear);
|
||||
if (!ShiroUtil.hasAnyRoles("sysadmin, SchoolUnionAdmin")) {
|
||||
cnd.and("us.selectUserId", "=", ShiroUtil.getUserId());
|
||||
}
|
||||
cnd.andEX("line.lotId", "=", lotId);
|
||||
cnd.andEX("line.id", "=", takePartInLineId);
|
||||
cnd.andEX("us.id", "=", selectId);
|
||||
cnd.andEX("line.regionalNature", "=", regionalNature);
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> listMap = enrollService.listMap(sql);
|
||||
|
||||
ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
|
||||
|
||||
for (int i = 0; i < listMap.size(); i++) {
|
||||
NutMap group = listMap.get(i);
|
||||
Sql userSql = Sqls.create("""
|
||||
select
|
||||
userName as uName,
|
||||
unitName,
|
||||
idCard,
|
||||
mobile
|
||||
from
|
||||
the_rapy_recuperation_enroll
|
||||
$condition
|
||||
""");
|
||||
Cnd userCnd = Cnd.NEW();
|
||||
userCnd.and("isNormal", "=", true);
|
||||
userCnd.and("stateId", "=", 2750);
|
||||
userCnd.and("takePartInLineId", "=", group.getString("id"));
|
||||
userCnd.asc("signingUptime");
|
||||
userSql.setCondition(userCnd);
|
||||
List<NutMap> userList = enrollService.listMap(userSql);
|
||||
for (int u = 0; u < userList.size(); u++) {
|
||||
userList.get(u).put("index", (u + 1));
|
||||
}
|
||||
NutMap data = new NutMap();
|
||||
data.put("schoolName", Globals.schoolName);
|
||||
data.put("address", group.getString("lineName"));
|
||||
data.put("playTime", group.getString("specificTime"));
|
||||
data.put("groupType", group.getString("groupType"));
|
||||
data.put("travelName", group.getString("travelAgencyName"));
|
||||
data.put("opinions", "同意");
|
||||
data.put("applyTime", DateUtil.now());
|
||||
data.put("auditTime", DateUtil.now());
|
||||
if(Lang.isNotEmpty(userList)) {
|
||||
data.put("deptName", userList.get(0).getString("unitName"));
|
||||
data.put("leader", userList.get(0).getString("uName"));
|
||||
data.put("mobile", userList.get(0).getString("mobile"));
|
||||
}
|
||||
data.put("list", userList);
|
||||
|
||||
HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();
|
||||
Configure config = Configure.builder().bind("list", policy).build();
|
||||
|
||||
String fileName = (i + 1) + "." + group.getString("lineName") + "(" + group.getString("specificTime") + ")" + "成团表.docx";
|
||||
zipOutputStream.putNextEntry(new ZipEntry(fileName));
|
||||
XWPFTemplate.compile(officeTemplateUtil.getPath("the_rapy_group"), config).render(data).write(zipOutputStream);
|
||||
zipOutputStream.closeEntry();
|
||||
}
|
||||
zipOutputStream.flush();
|
||||
zipOutputStream.close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,6 +130,16 @@ public class TheRapyRecuperationConfig {
|
||||
@Comment("分段式最少成团人数")
|
||||
private Integer fragmentCount;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
@Comment("精品团创建线路开始日期")
|
||||
private DateTime createLineStartTime;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
@Comment("精品团创建线路结束日期")
|
||||
private DateTime createLineEndTime;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
@Comment("集中疗休养报名开始时间")
|
||||
|
||||
@@ -223,5 +223,11 @@ public class TheRapyRecuperationEnroll extends BaseModel {
|
||||
@Comment("报酒店时选择的出行天数")
|
||||
private Double playDay;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.INT)
|
||||
@Comment("超出费用类型")
|
||||
@Default("0")
|
||||
private Integer moneyType;
|
||||
|
||||
private String firstLetter;
|
||||
}
|
||||
|
||||
+17
-1
@@ -161,11 +161,27 @@ public class TheRapyRecuperationLine extends BaseModel {
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Comment("开放选择")
|
||||
@Default("0")
|
||||
private boolean openChoose;
|
||||
private Boolean openChoose;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Comment("工勤特定线路")
|
||||
@Default("0")
|
||||
private Boolean specialLine;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.INT)
|
||||
@Comment("成团类型(1.常规团 2.精品团)")
|
||||
private Integer groupType;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.INT)
|
||||
@Comment("审核状态(1.待校工会审核,2.校工会退回修改,3.校工会拒绝,4.审核通过)")
|
||||
private Integer stateId;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Comment("校工会审核id")
|
||||
private String schoolAuditId;
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ public interface TheRapyRecuperationEnrollService extends ViService<TheRapyRecup
|
||||
* @param trrt trrt
|
||||
* @return {@link Pagination}
|
||||
*/
|
||||
Pagination enrollPageData(PageForm pageForm, Integer year, String unionId, int trrt, Integer lineUnionType, String routeName, String lotId);
|
||||
Pagination enrollPageData(PageForm pageForm, Integer year, String unionId, int trrt, Integer lineUnionType, String routeName, String lotId, String searchKeyword, String playStartTime, String playEndTime);
|
||||
|
||||
List<NutMap> getSelectLineById(String lineId, String unionId, int trrt, Integer lineUnionType);
|
||||
|
||||
|
||||
+897
-839
File diff suppressed because it is too large
Load Diff
+14
@@ -9,6 +9,7 @@ import io.v.nutz.web.commons.utils.ShiroUtil;
|
||||
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationLineCreateMode;
|
||||
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationSignUpMode;
|
||||
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationState;
|
||||
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnroll;
|
||||
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationEnrollCompanion;
|
||||
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLine;
|
||||
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect;
|
||||
@@ -49,8 +50,12 @@ public class TheRapyRecuperationLineServiceImpl extends ViServiceImpl<TheRapyRec
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void deleteLine(String lineId) {
|
||||
List<TheRapyRecuperationLineUnionSelect> unionSelects = dao().query(TheRapyRecuperationLineUnionSelect.class, Cnd.where("lineId", "=", lineId));
|
||||
List<String> list = unionSelects.stream().map(TheRapyRecuperationLineUnionSelect::getId).toList();
|
||||
|
||||
delete(lineId);
|
||||
dao().clear(TheRapyRecuperationLineUnionSelect.class, Cnd.where("lineId", "=", lineId));
|
||||
dao().clear(TheRapyRecuperationEnroll.class, Cnd.where("takePartInLineId", "in", list));
|
||||
deleteLineInfoCache(lineId);
|
||||
}
|
||||
|
||||
@@ -62,9 +67,16 @@ public class TheRapyRecuperationLineServiceImpl extends ViServiceImpl<TheRapyRec
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void addLine(TheRapyRecuperationLine line) {
|
||||
if(ShiroUtil.hasAnyRoles("sysadmin, SchoolUnionAdmin")) {
|
||||
line.setSignUpMode(2);
|
||||
} else {
|
||||
line.setSignUpMode(3);
|
||||
}
|
||||
if(line.getSignUpMode() == TheRapyRecuperationSignUpMode.UNION.getValue()) {
|
||||
line.setCreateUnionId(Vi.getUnionId());
|
||||
}
|
||||
line.setOpenChoose(false);
|
||||
line.setStateId(line.getGroupType() == 2 ? 1 : 4);
|
||||
insert(line);
|
||||
}
|
||||
|
||||
@@ -76,6 +88,7 @@ public class TheRapyRecuperationLineServiceImpl extends ViServiceImpl<TheRapyRec
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void editLine(TheRapyRecuperationLine line) {
|
||||
line.setStateId(line.getGroupType() == 2 ? 1 : 4);
|
||||
update(line);
|
||||
deleteLineInfoCache(line.getId());
|
||||
}
|
||||
@@ -103,6 +116,7 @@ public class TheRapyRecuperationLineServiceImpl extends ViServiceImpl<TheRapyRec
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
line.id,
|
||||
line.stateId,
|
||||
line.serialNumber,
|
||||
line.lineName,
|
||||
line.regionalNature,
|
||||
|
||||
+1
-1
@@ -81,7 +81,7 @@ public class TheRapyRecuperationTravelAgencyServiceImpl extends ViServiceImpl<Th
|
||||
Sql sql = Sqls.create("""
|
||||
select
|
||||
*,
|
||||
cast(files ->> '$[0].id' as char) as fileId
|
||||
files as fileId
|
||||
from
|
||||
the_rapy_recuperation_travel_agency $condition
|
||||
""");
|
||||
|
||||
@@ -0,0 +1,210 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-tabs tab-position="top" v-model="activeName" v-loading="loading">
|
||||
<el-tab-pane label="路线信息" name="1">
|
||||
<line-info ref="viewLineInfo"></line-info>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="线路报名信息" name="2">
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">工号姓名</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="userPageForm.searchKeyword" maxlength="10" clearable
|
||||
placeholder="请输入工号或姓名查询"></el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属工会:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select clearable
|
||||
filterable
|
||||
placeholder="请选择所属工会" style="width: 100%;"
|
||||
v-model="userPageForm.unionId">
|
||||
<el-option :label="item.unionname" :value="item.id" v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button @click="getUserDataByLineId" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<el-table :data="userData">
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in userDataTableColumns"
|
||||
show-overflow-tooltip
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='isFamily'">
|
||||
<el-link v-if="!row.familyNumber" type="primary">
|
||||
{{ row.isFamily ? '携带' : '未携带' }}({{ row.isFamily }})
|
||||
</el-link>
|
||||
<el-link v-else type="primary">
|
||||
{{ row.familyNumber ? '携带' : '未携带' }}({{ row.familyNumber }})
|
||||
</el-link>
|
||||
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='sign'">
|
||||
<el-image v-if="row.sign"
|
||||
style="width: 100px; height: 50px"
|
||||
:src="'/file_server/fileStreamPreview?id=' +row.sign"
|
||||
fit="contain"></el-image>
|
||||
<span v-else>暂无</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-row class="el-pagination-container" style="margin-bottom: 0px">
|
||||
<el-pagination
|
||||
@size-change="userPageSizeChange"
|
||||
@current-change="userPageNumberChange"
|
||||
:current-page="userPageForm.pageNumber"
|
||||
:page-sizes="[5,10, 20, 30, 50]"
|
||||
:page-size="userPageForm.pageSize"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
:total="userPageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="分工会审核信息" name="3" v-if="viewData.unionAuditId">
|
||||
<el-descriptions border class="descriptions-form" :column="2">
|
||||
<el-descriptions-item label="审核人">
|
||||
{{ viewData.unionAudit.username }}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="审核时间">
|
||||
{{ moment(viewData.unionAudit.auditTime).format('YYYY-MM-DD') }}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="审核意见" :span="2">
|
||||
{{ viewData.unionAudit.auditOpinion }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="单位领导审核信息" name="4" v-if="viewData.unitLeaderAuditId">
|
||||
<el-descriptions border class="descriptions-form" :column="2">
|
||||
<el-descriptions-item label="审核人">
|
||||
{{ viewData.unitLeaderAudit.username }}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="审核时间">
|
||||
{{ moment(viewData.unitLeaderAudit.auditTime).format('YYYY-MM-DD') }}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="审核意见" :span="2">
|
||||
{{ viewData.unitLeaderAudit.auditOpinion }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="校工会审核信息" name="5" v-if="viewData.schoolAuditId">
|
||||
<el-descriptions border class="descriptions-form" :column="2">
|
||||
<el-descriptions-item label="审核人">
|
||||
{{ viewData.schoolAudit.username }}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="审核时间">
|
||||
{{ moment(viewData.schoolAudit.auditTime).format('YYYY-MM-DD') }}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="审核意见" :span="2">
|
||||
{{ viewData.schoolAudit.auditOpinion }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane v-if="handle" :label="label" name="999">
|
||||
<slot name="handle"></slot>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
module.exports = {
|
||||
props: {
|
||||
handle: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
label: {
|
||||
type: String,
|
||||
default: '审核'
|
||||
},
|
||||
panes: {
|
||||
type: Array,
|
||||
default: []
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
activeName: "1",
|
||||
viewData: {},
|
||||
loading: true,
|
||||
unions: {},
|
||||
userDataTableColumns: [
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'unionName', label: '所属工会'},
|
||||
{prop: 'unitName', label: '所属单位', sortable: true},
|
||||
{prop: 'isFamily', label: '是否携带家属'},
|
||||
{prop: 'linePlayTime', label: '出行时间', sortable: true},
|
||||
{prop: 'sign', label: '签字', sortable: true}
|
||||
],
|
||||
userPageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10
|
||||
},
|
||||
lineId: null,
|
||||
userData: []
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue')
|
||||
},
|
||||
methods: {
|
||||
hasPane(name) {
|
||||
if (!this.handle) {
|
||||
return true
|
||||
}
|
||||
return this.panes.includes(name)
|
||||
},
|
||||
findOne(id) {
|
||||
$.post("/platform/theRapyRecuperation/enrollAudit/commonAudit/findOne", {id}).then(resp => {
|
||||
this.viewData = resp.data
|
||||
})
|
||||
},
|
||||
userPageSizeChange(val) {
|
||||
this.userPageForm.pageSize = val;
|
||||
this.getUserDataByLineId();
|
||||
},
|
||||
userPageNumberChange(val) {
|
||||
this.userPageForm.pageNumber = val;
|
||||
this.getUserDataByLineId();
|
||||
},
|
||||
async getUserDataByLineId() {
|
||||
const resp = await $.post('/platform/theRapyRecuperation/enrollAudit/commonAudit/getUserDateByLine', this.userPageForm)
|
||||
if (resp.code === 0) {
|
||||
this.userData = resp.data.list
|
||||
this.userPageForm.totalCount = resp.data.totalCount
|
||||
}
|
||||
},
|
||||
async init(row) {
|
||||
this.unions = await getUnions()
|
||||
this.$refs.viewLineInfo.findOne(row.lineId, null)
|
||||
this.findOne(row.lineUId)
|
||||
this.userPageForm.takePartLineId = row.lineUId
|
||||
await this.getUserDataByLineId()
|
||||
this.loading = false
|
||||
this.activeName = this.handle ? "999" : "1"
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,90 +1,120 @@
|
||||
<template>
|
||||
|
||||
<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.year }}</el-descriptions-item>
|
||||
<el-descriptions-item label="编号">{{ viewData.serialNumber }}</el-descriptions-item>
|
||||
<el-descriptions-item label="线路名称">{{ viewData.lineName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="区域性质">{{ viewData.regionalNature }}</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="最少成团人数">{{ viewData.minimumGroupSize }}</el-descriptions-item>-->
|
||||
<!-- (校工会创建AND自由模式) OR (分工会创建) -->
|
||||
<!-- <template v-if="(viewData.createMode === 2 && viewData.signUpMode === 2 ) || viewData.createMode === 1">-->
|
||||
<el-tabs tab-position="top" v-model="activeName">
|
||||
<el-tab-pane label="路线信息" name="1">
|
||||
<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.year }}</el-descriptions-item>
|
||||
<el-descriptions-item label="编号">{{ viewData.serialNumber }}</el-descriptions-item>
|
||||
<el-descriptions-item label="线路名称">{{ viewData.lineName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="成团类型">{{ viewData.groupType === 1 ? '常规团' : '精品团' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="线路类型">{{ viewData.regionalNature }}</el-descriptions-item>
|
||||
<el-descriptions-item label="最少成团人数">{{ viewData.minimumGroupSize }}</el-descriptions-item>
|
||||
<el-descriptions-item label="时间标段">{{ viewData.lotName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="预计费用">{{ viewData.estimatedCost }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系人">{{ viewData.lineContact }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系方式">{{ viewData.lineContactPhone }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
<div class="panel panel-default mt20" style="border:none" v-if="showTravelTimePeriod">
|
||||
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
|
||||
<h3 class="panel-title">
|
||||
出行时间段
|
||||
</h3>
|
||||
</div>
|
||||
<el-table :data="times" border>
|
||||
<el-table-column label="报名开始时间" prop="signUpStartTime"></el-table-column>
|
||||
<el-table-column label="报名结束时间" prop="signUpEndTime"></el-table-column>
|
||||
<el-table-column label="变更截至时间" prop="changeEndTime"></el-table-column>
|
||||
<el-table-column label="出行开始时间" prop="playStartTime"></el-table-column>
|
||||
<el-table-column label="出行结束时间" prop="playEndTime"></el-table-column>
|
||||
<el-table-column label="联系人" prop="contact"></el-table-column>
|
||||
<el-table-column label="联系方式" prop="contactPhone"></el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!-- <el-descriptions-item label="报名开始时间">{{ viewData.signUpStartTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="报名结束时间">{{ viewData.signUpEndTime }}</el-descriptions-item>
|
||||
<el-descriptions-item :span="2" label="变更截至时间">{{ viewData.changeEndTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出行开始时间">{{ viewData.playStartTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出行结束时间">{{ viewData.playEndTime }}</el-descriptions-item>-->
|
||||
</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 :span="2" label="旅行社名称">{{
|
||||
viewData.travelAgency.travelAgencyName
|
||||
}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系人">{{ viewData.travelAgency.contact }}</el-descriptions-item>
|
||||
<el-descriptions-item label="电话">{{ viewData.travelAgency.contactMobileNumber }}</el-descriptions-item>
|
||||
<el-descriptions-item label="邮箱">{{ viewData.travelAgency.email }}</el-descriptions-item>
|
||||
<el-descriptions-item label="官网">
|
||||
<a :href="viewData.travelAgency.officialWebsite" class="text-primary" target="_blank">
|
||||
{{ viewData.travelAgency.officialWebsite }}
|
||||
</a>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
<div class="panel panel-default mt20" style="border-color: #ebeef5">
|
||||
<div class="panel-heading" style="background: #fafafa;border-color: #ebeef5">
|
||||
<h3 class="panel-title">
|
||||
线路内容
|
||||
</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div v-html="viewData.content"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="校工会审核信息" name="2" v-if="viewData.schoolAuditId">
|
||||
<el-descriptions border class="descriptions-form" :column="2">
|
||||
<el-descriptions-item label="审核人">
|
||||
{{ viewData.schoolAudit.username }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核时间">
|
||||
{{ moment(viewData.schoolAudit.auditTime).format('YYYY-MM-DD') }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见" :span="2">
|
||||
{{ viewData.schoolAudit.auditOpinion }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
|
||||
<!-- <el-descriptions-item label="交通工具">{{ viewData.trafficTools }}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="预计费用(元)">{{ viewData.estimatedCost }}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="预计人数(含家属)">{{ viewData.estimatedFamilyNumbers }}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label=""></el-descriptions-item>-->
|
||||
</el-descriptions>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-default mt20" style="border:none" v-if="showTravelTimePeriod">
|
||||
<div class="panel-heading" style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none">
|
||||
<h3 class="panel-title">
|
||||
出行时间段
|
||||
</h3>
|
||||
</div>
|
||||
<el-table :data="times" border>
|
||||
<el-table-column label="报名开始时间" prop="signUpStartTime"></el-table-column>
|
||||
<el-table-column label="报名结束时间" prop="signUpEndTime"></el-table-column>
|
||||
<el-table-column label="变更截至时间" prop="changeEndTime"></el-table-column>
|
||||
<el-table-column label="出行开始时间" prop="playStartTime"></el-table-column>
|
||||
<el-table-column label="出行结束时间" prop="playEndTime"></el-table-column>
|
||||
<el-table-column label="联系人" prop="contact"></el-table-column>
|
||||
<el-table-column label="联系方式" prop="contactPhone"></el-table-column>
|
||||
</el-table>
|
||||
|
||||
</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 :span="2" label="旅行社名称">{{
|
||||
viewData.travelAgency.travelAgencyName
|
||||
}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系人">{{ viewData.travelAgency.contact }}</el-descriptions-item>
|
||||
<el-descriptions-item label="电话">{{ viewData.travelAgency.contactMobileNumber }}</el-descriptions-item>
|
||||
<el-descriptions-item label="邮箱">{{ viewData.travelAgency.email }}</el-descriptions-item>
|
||||
<el-descriptions-item label="官网">
|
||||
<a :href="viewData.travelAgency.officialWebsite" class="text-primary" target="_blank">
|
||||
{{ viewData.travelAgency.officialWebsite }}
|
||||
</a>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
<div class="panel panel-default mt20" style="border-color: #ebeef5">
|
||||
<div class="panel-heading" style="background: #fafafa;border-color: #ebeef5">
|
||||
<h3 class="panel-title">
|
||||
线路内容
|
||||
</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div v-html="viewData.content"></div>
|
||||
</div>
|
||||
</div>
|
||||
<el-tab-pane v-if="handle" :label="label" name="999">
|
||||
<slot name="handle"></slot>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
module.exports = {
|
||||
name: "LineInfo",
|
||||
props: {
|
||||
handle: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
label: {
|
||||
type: String,
|
||||
default: '审核'
|
||||
},
|
||||
panes: {
|
||||
type: Array,
|
||||
default: []
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
activeName: "1",
|
||||
viewData: {
|
||||
travelAgency:{}
|
||||
},
|
||||
@@ -122,7 +152,10 @@ module.exports = {
|
||||
if (resp.code === 0 && resp.data) {
|
||||
this.times = resp.data
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.activeName = this.handle ? "999" : "1"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -723,7 +723,7 @@ layout("/mobile/platform.html"){
|
||||
}),
|
||||
})
|
||||
if (re.code !== 0) {
|
||||
vant.Toast(re.msg)
|
||||
vant.Dialog.alert({title: '温馨提示', message: re.msg})
|
||||
return
|
||||
}
|
||||
if (this.fromUrlByMy !== 'editDo') {
|
||||
|
||||
@@ -71,6 +71,13 @@ layout("/mobile/platform.html"){
|
||||
<div v-else id="demo" class="pdf_div"></div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<van-tabbar v-model="tarBarActive">
|
||||
<van-tabbar-item icon="home-o" replace url="/platform/mobile/theRapyRecuperation/index">疗休养首页</van-tabbar-item>
|
||||
<van-tabbar-item icon="search" replace url="/platform/mobile/theRapyRecuperation/mobileLineListPage">线路选择</van-tabbar-item>
|
||||
<van-tabbar-item icon="manager-o" replace url="/platform/mobile/theRapyRecuperation/myRecuperation">我的报名</van-tabbar-item>
|
||||
</van-tabbar>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
let pdfh5 = null
|
||||
@@ -79,6 +86,7 @@ layout("/mobile/platform.html"){
|
||||
mixins: [mobileMixins],
|
||||
data() {
|
||||
return {
|
||||
tarBarActive: 0,
|
||||
chooseButton: [],
|
||||
configData: {},
|
||||
isPdf: false,
|
||||
|
||||
@@ -132,7 +132,7 @@ layout("/mobile/platform.html"){
|
||||
}
|
||||
|
||||
.van-cell {
|
||||
padding: 8px 16px;
|
||||
padding: 8px 5px;
|
||||
}
|
||||
|
||||
.van-tabs__wrap {
|
||||
@@ -227,6 +227,15 @@ layout("/mobile/platform.html"){
|
||||
.van-action-sheet {
|
||||
max-height: 90%;
|
||||
}
|
||||
.van-cell--required::before {
|
||||
left: -2px;
|
||||
}
|
||||
.van-radio__label {
|
||||
margin-left: 0;
|
||||
}
|
||||
.van-radio--horizontal {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@@ -251,22 +260,22 @@ layout("/mobile/platform.html"){
|
||||
<div style="margin-top: 10px">
|
||||
<div>
|
||||
<div>
|
||||
<span class="line_label">最少成团人数:</span>
|
||||
<span>预计费用:</span>
|
||||
{{lineData.estimatedCost}}元
|
||||
</div>
|
||||
<div>
|
||||
<span class="line_label">最少成团:</span>
|
||||
<label v-if="lineData.minimumGroupSize">{{lineData.minimumGroupSize}}人</label>
|
||||
<label v-else>不限制</label>
|
||||
</div>
|
||||
<!--<div>
|
||||
<span>当前报名:</span>
|
||||
{{lineData.signUpUserNum}}
|
||||
</div>-->
|
||||
<div v-if="configData.familyInfo == 2">
|
||||
<!--<div v-if="configData.familyInfo == 2">
|
||||
<span>当前报名:</span>
|
||||
{{lineData.signUpUserNum + lineData.signUpUserFamilyNum + '(家属' + lineData.signUpUserFamilyNum + '人)'}}
|
||||
</div>
|
||||
<div v-else>
|
||||
<span>当前报名:</span>
|
||||
{{lineData.signUpUserNum + lineData.familyNumber + '(家属' + lineData.familyNumber + '人)'}}
|
||||
</div>
|
||||
</div>-->
|
||||
</div>
|
||||
|
||||
<div>
|
||||
@@ -324,6 +333,11 @@ layout("/mobile/platform.html"){
|
||||
<!--报名弹出框-->
|
||||
<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-notice-bar
|
||||
v-if="Number(lineData.estimatedCost) > 3000"
|
||||
left-icon="volume-o"
|
||||
text="温馨提醒:您选择的线路预计费用超过3000元,需要选择超出费用类型"
|
||||
></van-notice-bar>
|
||||
<div class="join_content">
|
||||
|
||||
<van-form @submit="joinSubmit">
|
||||
@@ -337,12 +351,20 @@ layout("/mobile/platform.html"){
|
||||
<div class="van-card-body">
|
||||
<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 }]"
|
||||
<van-field required label="身份证件" name="idCard" :rules="[{ required: true }]"
|
||||
placeholder="请填写身份证号、护照、台胞证等" v-model="formData.idCard"></van-field>
|
||||
<van-field label="手机号" name="mobile" :rules="[{ required: true }]"
|
||||
<van-field required label="手机号" name="mobile" :rules="[{ required: true }]"
|
||||
placeholder="请填写手机号" v-model="formData.mobile"></van-field>
|
||||
<van-field label="所属工会" readonly v-model="formData.unionName"></van-field>
|
||||
<van-field label="报名线路" readonly v-model="formData.lineName"></van-field>
|
||||
<van-field v-if="Number(lineData.estimatedCost) > 3000" required name="moneyType" label="超出费用类型" :rules="[{ required: true, message: '请选择超出费用类型' }]">
|
||||
<template #input>
|
||||
<van-radio-group v-model="formData.moneyType" direction="horizontal">
|
||||
<van-radio :name="1">自己承担</van-radio>
|
||||
<van-radio :name="2">使用明年额度</van-radio>
|
||||
</van-radio-group>
|
||||
</template>
|
||||
</van-field>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -700,11 +722,7 @@ layout("/mobile/platform.html"){
|
||||
}).catch(() => {
|
||||
});
|
||||
} else {
|
||||
vant.Dialog.alert({
|
||||
title: '温馨提示',
|
||||
message: re.msg,
|
||||
}).then(() => {
|
||||
})
|
||||
vant.Dialog.alert({title: '温馨提示', message: re.msg})
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ layout("/mobile/platform.html"){
|
||||
}
|
||||
|
||||
.list-card > .content {
|
||||
padding: 16px 10px;
|
||||
padding: 16px 10px 0;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
@@ -141,6 +141,31 @@ layout("/mobile/platform.html"){
|
||||
[v-cloak] {
|
||||
display: none;
|
||||
}
|
||||
.van-calendar__header-title {
|
||||
display: none;
|
||||
}
|
||||
.van-dropdown-menu__bar {
|
||||
height: 30px;
|
||||
}
|
||||
.van-dropdown-menu__bar {
|
||||
border: none
|
||||
}
|
||||
.filter-footer {
|
||||
height: 54px;
|
||||
background: #FFF;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 0 20px;
|
||||
box-sizing: border-box;
|
||||
border-top: 1px solid #ededed;
|
||||
column-gap: 20px;
|
||||
}
|
||||
.filter-footer button {
|
||||
flex: 1;
|
||||
height: 30px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@@ -186,6 +211,9 @@ layout("/mobile/platform.html"){
|
||||
个人组织
|
||||
</van-button>
|
||||
</div>
|
||||
<div v-else>
|
||||
<div style="text-align: center" @click="searchPopup = true">筛选</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -196,18 +224,21 @@ layout("/mobile/platform.html"){
|
||||
@load="onLoad"
|
||||
v-model="loading">
|
||||
<div @click.stop="clickLineRow(o)" class="list-card" v-for="o in tableData">
|
||||
<div class="content">
|
||||
<div class="content" :style="pageForm.theRapyRecuperationType != '2' && pageForm.theRapyRecuperationType != '3' ? 'padding-bottom: 16px' : ''">
|
||||
<van-image
|
||||
height="92"
|
||||
radius="8"
|
||||
:src="CREATE_PREVIEW_URL(o.fileId)"
|
||||
width="130">
|
||||
</van-image>
|
||||
|
||||
<!--线路-->
|
||||
<div v-if="pageForm.theRapyRecuperationType != '2' && pageForm.theRapyRecuperationType != '3'"
|
||||
class="content-right">
|
||||
<div class="cr-title">
|
||||
<span>{{o.lineName}}</span>
|
||||
<div>
|
||||
<van-tag color="#1867b0">{{o.groupType === 1 ? '常规团' : '精品团'}}</van-tag>
|
||||
<van-tag color="#1867b0">{{o.travelAgencyPlace}}</van-tag>
|
||||
<van-tag v-if="o.signUpMode === 1" color="#1867b0">{{o.usUnionName}}</van-tag>
|
||||
<van-tag v-if="o.signUpMode === 2" color="#1867b0">{{'校工会'}}</van-tag>
|
||||
@@ -215,30 +246,36 @@ layout("/mobile/platform.html"){
|
||||
</div>
|
||||
</div>
|
||||
<div class="desc_info">
|
||||
<!--<div class="union">
|
||||
<span>组织形式:</span>{{o.createMode === 2 && o.signUpMode === 2 ? '校工会' : o.usUnionName}}
|
||||
</div>-->
|
||||
<div class="concat" v-if="modifyConfig.familyInfo == 2">
|
||||
<div class="concat">
|
||||
<span>预计费用:</span>
|
||||
{{o.estimatedCost}}元
|
||||
</div>
|
||||
|
||||
<div class="concat">
|
||||
<span>出行时段:</span>
|
||||
{{moment(o.playStartTime).format('MM-DD') + ' 至 ' + moment(o.playEndTime).format('MM-DD')}}
|
||||
</div>
|
||||
|
||||
<!--<div class="concat" v-if="modifyConfig.familyInfo == 2">
|
||||
<span>已报人数:</span>{{o.signUpUserNum + o.signUpUserFamilyNum + '(家属' +
|
||||
o.signUpUserFamilyNum + '人)'}}
|
||||
</div>
|
||||
|
||||
<div class="concat" v-else>
|
||||
<!--<span>已报人数:</span>{{o.signUpUserNum + o.familyNumber + '(家属' +
|
||||
o.familyNumber + '人)'}}-->
|
||||
<span>联 系 人:</span>{{o.contact}}
|
||||
</div>
|
||||
|
||||
<div class="mobile">
|
||||
<!--<span>出行时间:</span>{{moment(o.playStartTime).format('YYYY-MM-DD')}}-->
|
||||
<span>联系方式:</span>{{o.contactMobileNumber}}
|
||||
</div>
|
||||
</div>-->
|
||||
<div class="mobile">
|
||||
<span>旅 行 社:</span>{{o.travelAgencyName}}
|
||||
<span>旅 行 社:</span>
|
||||
{{o.travelAgencyName}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--旅行社-->
|
||||
<div v-if="pageForm.theRapyRecuperationType == '2'" class="content-right">
|
||||
<div class="cr-title">
|
||||
<span>{{o.travelAgencyName}}</span>
|
||||
@@ -261,6 +298,7 @@ layout("/mobile/platform.html"){
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--酒店-->
|
||||
<div v-if="pageForm.theRapyRecuperationType == '3'" class="content-right">
|
||||
<div class="cr-title">
|
||||
<span>{{o.baseName}}</span>
|
||||
@@ -281,14 +319,17 @@ layout("/mobile/platform.html"){
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!--酒店-->
|
||||
<div v-if="pageForm.theRapyRecuperationType == '3'" style="text-align: right; padding-right: 10px; padding-bottom: 10px" class="sign_button">
|
||||
<van-button @click.stop="clickLineRow(o)" size="mini"
|
||||
type="info" color="#1867B0">点击报名</van-button>
|
||||
<van-button @click.stop="openSignUser(o, 'baseManagement')" size="mini"
|
||||
type="info" color="#1867B0">查看人员</van-button>
|
||||
</div>
|
||||
|
||||
<!--旅行社-->
|
||||
<div v-if="pageForm.theRapyRecuperationType == '2'">
|
||||
<van-row gutter="20">
|
||||
<van-col @click="" span="12" style="border-right: 1px lightgrey solid"></van-col>
|
||||
@@ -340,22 +381,67 @@ layout("/mobile/platform.html"){
|
||||
</button>
|
||||
|
||||
</van-action-sheet>
|
||||
|
||||
<!--<van-action-sheet v-model="searchSheet" title="查询条件">
|
||||
<van-field v-model="pageForm.searchKeyword" label="报名人员" placeholder="请输入工号或姓名查询"></van-field>
|
||||
<van-field v-model="pageForm.playStartTime" label="出行开始时间" placeholder="请点击选择出行开始时间" is-link readonly></van-field>
|
||||
<van-field v-model="pageForm.playEndTime" label="出行结束时间" placeholder="请点击选择出行结束时间" is-link readonly></van-field>
|
||||
</van-action-sheet>-->
|
||||
|
||||
<van-popup v-model="searchPopup" position="right"
|
||||
closeable
|
||||
close-icon="close"
|
||||
close-icon-position="top-left"
|
||||
:style="{ height: '100%',width:'90vw',background:'#f1f1f1' }">
|
||||
<div style="background: #FFFFFF;height: 46px;display: flex;align-items: center;justify-content: center;font-weight: bold">
|
||||
筛选条件
|
||||
</div>
|
||||
<van-field v-model="pageForm.searchKeyword" label="报名人员" placeholder="请输入姓名查询"></van-field>
|
||||
<van-field v-model="pageForm.playStartTime" label="出行开始时间" placeholder="请点击选择出行开始时间" is-link readonly @click="playStartPicker=true"></van-field>
|
||||
<van-field v-model="pageForm.playEndTime" label="出行结束时间" placeholder="请点击选择出行结束时间" is-link readonly @click="playEndPicker=true"></van-field>
|
||||
<div class="filter-footer">
|
||||
<van-button size="normal" type="danger" @click="reset">重置</van-button>
|
||||
<van-button size="normal" type="info" @click="confirm">确定</van-button>
|
||||
</div>
|
||||
</van-popup>
|
||||
|
||||
<van-popup v-model="playStartPicker" position="bottom">
|
||||
<van-datetime-picker
|
||||
type="month-day"
|
||||
:min-date="new Date(modifyConfig.fragmentPlayStartTime || '')"
|
||||
:max-date="new Date(modifyConfig.fragmentPlayEndTime || '')"
|
||||
@confirm="(val) => {pageForm.playStartTime=moment(val).format('MM-DD');playStartPicker=false}"
|
||||
@cancel="playStartPicker = false"
|
||||
></van-datetime-picker>
|
||||
</van-popup>
|
||||
<van-popup v-model="playEndPicker" position="bottom">
|
||||
<van-datetime-picker
|
||||
type="month-day"
|
||||
:min-date="new Date(modifyConfig.fragmentPlayStartTime || '')"
|
||||
:max-date="new Date(modifyConfig.fragmentPlayEndTime || '')"
|
||||
@confirm="(val) => {pageForm.playEndTime=moment(val).format('MM-DD');playEndPicker=false}"
|
||||
@cancel="playEndPicker = false"
|
||||
></van-datetime-picker>
|
||||
</van-popup>
|
||||
|
||||
<div>
|
||||
<van-tabbar v-model="tarBarActive">
|
||||
<van-tabbar-item icon="home-o" replace url="/platform/mobile/theRapyRecuperation/index">疗休养首页</van-tabbar-item>
|
||||
<van-tabbar-item icon="search" replace url="/platform/mobile/theRapyRecuperation/mobileLineListPage">线路选择</van-tabbar-item>
|
||||
<van-tabbar-item icon="manager-o" replace url="/platform/mobile/theRapyRecuperation/myRecuperation">我的报名</van-tabbar-item>
|
||||
</van-tabbar>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
function getQueryString(name) {
|
||||
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
|
||||
var r = window.location.search.substr(1).match(reg);
|
||||
if (r != null) return decodeURI(r[2]);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins],
|
||||
data() {
|
||||
return {
|
||||
playStartPicker: false,
|
||||
playEndPicker: false,
|
||||
searchPopup: false,
|
||||
tarBarActive: 1,
|
||||
yearArray: [],
|
||||
unionColumns: [],
|
||||
unionPop: false,
|
||||
@@ -377,6 +463,17 @@ layout("/mobile/platform.html"){
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
confirm() {
|
||||
this.searchPopup = false
|
||||
this.doSearch()
|
||||
},
|
||||
reset() {
|
||||
this.$set(this.pageForm, 'searchKeyword', null)
|
||||
this.$set(this.pageForm, 'playStartTime', null)
|
||||
this.$set(this.pageForm, 'playEndTime', null)
|
||||
this.searchPopup = false
|
||||
this.doSearch()
|
||||
},
|
||||
async openSignUser(row, type) {
|
||||
const id = type === 'line' ? row.usId : row.id
|
||||
location.href = '/platform/mobile/theRapyRecuperation/userSignInfo?type=' + type + '&id=' + id
|
||||
@@ -490,7 +587,6 @@ layout("/mobile/platform.html"){
|
||||
},
|
||||
async onLoad() {
|
||||
const res = await $.post('/platform/theRapyRecuperation/line/enroll/pageData', this.pageForm)
|
||||
|
||||
if (res.code === 0 && res.data) {
|
||||
this.tableData = this.tableData.concat(res.data.list)
|
||||
if (this.tableData.length === res.data.totalCount) {
|
||||
@@ -526,9 +622,6 @@ layout("/mobile/platform.html"){
|
||||
const clickIndex = localStorage.getItem('clickIndex')
|
||||
this.pageForm.theRapyRecuperationType = JSON.parse(clickIndex).clickIndex
|
||||
}
|
||||
/*if(this.pageForm.theRapyRecuperationType == 1){
|
||||
this.$set(this.pageForm, 'lineUnionType', 3)
|
||||
}*/
|
||||
},
|
||||
async created() {
|
||||
this.createYear()
|
||||
|
||||
@@ -303,55 +303,31 @@ layout("/mobile/platform.html"){
|
||||
width="130">
|
||||
</van-image>
|
||||
|
||||
<div
|
||||
v-if="pageForm.theRapyRecuperationType != '2' && pageForm.theRapyRecuperationType != '3'"
|
||||
class="content-right"
|
||||
>
|
||||
<div v-if="pageForm.theRapyRecuperationType != '2' && pageForm.theRapyRecuperationType != '3'" class="content-right">
|
||||
<div class="cr-title">
|
||||
<span>{{o.lineName}}</span>
|
||||
<div>
|
||||
<van-tag color="#1867b0">{{o.lotName}}</van-tag>
|
||||
<van-tag color="#1867b0"
|
||||
>{{o.signUpMode === 2 ? '校工会' : o.signUpUnionName}}
|
||||
</van-tag>
|
||||
<van-tag color="#1867b0">{{o.groupType === 1 ? '常规团' : '精品团'}}</van-tag>
|
||||
<van-tag color="#1867b0">{{o.travelAgencyPlace}}</van-tag>
|
||||
<van-tag v-if="o.signUpMode === 1" color="#1867b0">{{o.usUnionName}}</van-tag>
|
||||
<van-tag v-if="o.signUpMode === 2" color="#1867b0">{{'校工会'}}</van-tag>
|
||||
<van-tag v-if="o.signUpMode === 3" color="#1867b0">{{o.selectUserName}}</van-tag>
|
||||
</div>
|
||||
</div>
|
||||
<div class="desc_info">
|
||||
<!--<div class="union">
|
||||
<span>分工会:</span>{{o.signUpUnionName}}
|
||||
</div>-->
|
||||
<!--<div class="concat">
|
||||
<span>时间:</span>{{o.YEAR}}
|
||||
</div>-->
|
||||
<!--<div class="concat">
|
||||
<span>已报人数:</span>{{o.signUpUserNum + o.signUpUserFamilyNum + '(家属' + o.signUpUserFamilyNum + '人)'}}
|
||||
</div>-->
|
||||
<div class="mobile">
|
||||
<span>旅 行 社:</span>{{o.travelAgencyName}}
|
||||
<div class="concat">
|
||||
<span>联 系 人:</span>{{o.contact}}
|
||||
</div>
|
||||
<div class="mobile">
|
||||
<span>联系方式:</span>{{o.contactMobileNumber}}
|
||||
</div>
|
||||
<!--<div class="mobile" v-if="![2715,2725,2735].includes(o.stateId)">
|
||||
<span v-if="configData.familyInfo === 1">随行家属:</span>
|
||||
{{o.companionUserNames ? o.companionUserNames : '无'}}
|
||||
<span v-else>随行家属:</span>
|
||||
{{o.familyNumber}}人
|
||||
</div>
|
||||
<div class="mobile" v-else>
|
||||
<span>审核状态:</span>
|
||||
<span :style="'color: ' + o.stateColor">{{o.stateName}}</span>
|
||||
</div>-->
|
||||
<div class="mobile">
|
||||
<span>旅 行 社:</span>{{o.travelAgencyName}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
v-if="pageForm.theRapyRecuperationType == '2'"
|
||||
class="content-right"
|
||||
>
|
||||
<div v-if="pageForm.theRapyRecuperationType == '2'" class="content-right">
|
||||
<div class="cr-title">
|
||||
<span>{{o.travelAgencyName}}</span>
|
||||
</div>
|
||||
@@ -374,10 +350,7 @@ layout("/mobile/platform.html"){
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
v-if="pageForm.theRapyRecuperationType == '3'"
|
||||
class="content-right"
|
||||
>
|
||||
<div v-if="pageForm.theRapyRecuperationType == '3'" class="content-right">
|
||||
<div class="cr-title">
|
||||
<span>{{o.baseName}}</span>
|
||||
<div>
|
||||
@@ -401,7 +374,7 @@ layout("/mobile/platform.html"){
|
||||
|
||||
<div class="operateDiv">
|
||||
<van-button
|
||||
v-if="pageForm.signUpStateId == 2"
|
||||
v-if="o.isTakePartIn == true"
|
||||
@click="openEvaluate(o)"
|
||||
type="info"
|
||||
size="small"
|
||||
@@ -561,6 +534,14 @@ layout("/mobile/platform.html"){
|
||||
</van-action-sheet>
|
||||
|
||||
<satisfaction-evaluate ref="satisfactionEvaluateRef"></satisfaction-evaluate>
|
||||
|
||||
<div>
|
||||
<van-tabbar v-model="tarBarActive">
|
||||
<van-tabbar-item icon="home-o" replace url="/platform/mobile/theRapyRecuperation/index">疗休养首页</van-tabbar-item>
|
||||
<van-tabbar-item icon="search" replace url="/platform/mobile/theRapyRecuperation/mobileLineListPage">线路选择</van-tabbar-item>
|
||||
<van-tabbar-item icon="manager-o" replace url="/platform/mobile/theRapyRecuperation/myRecuperation">我的报名</van-tabbar-item>
|
||||
</van-tabbar>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include('SatisfactionEvaluate.js'){}#-->
|
||||
@@ -580,6 +561,7 @@ layout("/mobile/platform.html"){
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tarBarActive: 2,
|
||||
evaluateFormData: {},
|
||||
evaluatePopup: false,
|
||||
yearArray: [],
|
||||
|
||||
+8
-16
@@ -53,20 +53,6 @@ layout("/layouts/platform.html"){
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">标段时间:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select clearable filterable style="width: 100%"
|
||||
v-model="pageForm.lotId"
|
||||
@change="doSearch">
|
||||
<el-option :key="item.id"
|
||||
:label="item.lotName"
|
||||
:value="item.id"
|
||||
v-for="item in modifyBdList"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
@@ -76,7 +62,7 @@ layout("/layouts/platform.html"){
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="目的地列表">
|
||||
<template #func>
|
||||
<el-button @click="openImport" size="medium" type="primary" style="margin-right: 10px">导入目的地
|
||||
<el-button @click="openImport" size="medium" type="primary">导入目的地
|
||||
</el-button>
|
||||
<el-button @click="openAdd" size="medium" type="primary">新建目的地</el-button>
|
||||
</template>
|
||||
@@ -158,7 +144,7 @@ layout("/layouts/platform.html"){
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24" :xs="24">
|
||||
<el-form-item label="旅行社名称" prop="travelAgencyId">
|
||||
<el-select clearable filterable style="width: 100%" @change="$set(formData,'travelAgencyPlace','')"
|
||||
<el-select clearable filterable style="width: 100%" @change="travelChange"
|
||||
v-model="formData.travelAgencyId" placeholder="请选择旅行社名称">
|
||||
<el-option :key="item.id"
|
||||
:label="item.travelAgencyName+'('+ item.year +'年)'"
|
||||
@@ -566,6 +552,12 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
travelChange(val) {
|
||||
this.$set(this.formData,'travelAgencyPlace','')
|
||||
const travel = this.travelAgencyList.find(o => o.id === val)
|
||||
this.$set(this.formData,'baseContactPerson', travel.contact)
|
||||
this.$set(this.formData,'baseContactNumber', travel.contactMobileNumber)
|
||||
},
|
||||
weekChange(val) {
|
||||
/*if (val === 1) {
|
||||
this.formData.weekCheckIn = []
|
||||
|
||||
@@ -167,12 +167,18 @@ layout("/layouts/platform.html"){
|
||||
查看详情
|
||||
</el-button>
|
||||
</template>
|
||||
<template scope="{row:{stateId}}" v-else-if="column.prop==='stateId'">
|
||||
<span v-if="stateId === 1">待校工会审核</span>
|
||||
<span v-if="stateId === 2">校工会退回修改</span>
|
||||
<span v-if="stateId === 3">校工会拒绝</span>
|
||||
<span v-if="stateId === 4">审核通过</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="250px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row.id)" size="mini" type="primary">查看</el-button>
|
||||
<el-button @click="openEdit(row.id)" size="mini" type="primary">编辑</el-button>
|
||||
<el-button @click="doDelete(row.id)" size="mini" type="danger">删除</el-button>
|
||||
<el-button v-if="[1,2].includes(row.stateId)" @click="openEdit(row.id)" size="mini" type="primary">编辑</el-button>
|
||||
<el-button v-if="[1,2,3].includes(row.stateId)" @click="doDelete(row.id)" size="mini" type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -181,16 +187,6 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<template #edit>
|
||||
<el-form :model="formData" :rules="rules" label-width="160px" ref="form">
|
||||
<el-row :gutter="20" class="">
|
||||
<el-col :md="24" :sm="24" :xs="24">
|
||||
<el-form-item label="">
|
||||
<span class="text-primary">
|
||||
<i class="el-icon-warning"></i>
|
||||
温馨提醒:校工会可以为基层工会或个人创建线路,基层工会或个人自行选择并设置活动相关时间。
|
||||
</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :md="12" :sm="24" :xs="24">
|
||||
@@ -258,45 +254,11 @@ layout("/layouts/platform.html"){
|
||||
readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24" :xs="24">
|
||||
<el-form-item label="成团类型" prop="groupType">
|
||||
<el-select v-model="formData.groupType" style="width: 100%" @change="groupTypeChange" placeholder="请选择成团类型">
|
||||
<el-option v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" label="常规团" :value="1"></el-option>
|
||||
<el-option label="精品团" :value="2"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :md="12" :sm="24" :xs="24">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="线路类型" prop="regionalNature">
|
||||
<el-radio-group class="mr0-radio" size="small" v-model="formData.regionalNature">
|
||||
<el-radio :label="item.value"
|
||||
border v-for="item in regionalNatureList">
|
||||
{{item.label}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col span="12" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')}">
|
||||
<el-form-item label="开放选择" prop="openChoose">
|
||||
<el-radio-group class="mr0-radio" size="small" v-model="formData.openChoose">
|
||||
<el-radio :label="true" border>是</el-radio>
|
||||
<el-radio :label="false" border>否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
<el-col :md="12" :sm="24" :xs="24">
|
||||
<el-form-item label="组织形式" prop="signUpMode">
|
||||
<el-radio-group class="mr0-radio" size="small" v-model="formData.signUpMode">
|
||||
<el-radio :label="item.value" v-if="isShow(item.roles)"
|
||||
size="small"
|
||||
border v-for="item in signUpModeList">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="线路类型" prop="regionalNature">
|
||||
<el-radio-group class="mr0-radio" size="small" v-model="formData.regionalNature">
|
||||
<el-radio :label="item.value"
|
||||
border v-for="item in regionalNatureList">
|
||||
{{item.label}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
@@ -304,14 +266,46 @@ layout("/layouts/platform.html"){
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :md="12" :sm="24" :xs="24">
|
||||
<el-form-item label="成团类型" prop="groupType">
|
||||
<el-select v-model="formData.groupType" style="width: 100%" @change="groupTypeChange" placeholder="请选择成团类型">
|
||||
<el-option v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" label="常规团" :value="1"></el-option>
|
||||
<el-option label="精品团" :value="2"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!--<el-col span="12" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')}">
|
||||
<el-form-item label="开放选择" prop="openChoose">
|
||||
<el-radio-group class="mr0-radio" size="small" v-model="formData.openChoose">
|
||||
<el-radio :label="true" border>是</el-radio>
|
||||
<el-radio :label="false" border>否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>-->
|
||||
<el-col :span="12">
|
||||
<el-form-item label="最少成团人数" prop="minimumGroupSize">
|
||||
<el-input v-model="formData.minimumGroupSize" placeholder="请选择成团类型" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!--<el-col :md="12" :sm="24" :xs="24">
|
||||
<el-form-item label="组织形式" prop="signUpMode">
|
||||
<el-radio-group class="mr0-radio" size="small" v-model="formData.signUpMode">
|
||||
<el-radio :label="item.value" v-if="isShow(item.roles)"
|
||||
size="small"
|
||||
border v-for="item in signUpModeList">
|
||||
{{item.label}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>-->
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :md="12" :sm="24" :xs="24">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="最少成团人数" prop="minimumGroupSize">
|
||||
<el-input v-model="formData.minimumGroupSize" placeholder="请选择成团类型" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<!--<el-col :span="12">
|
||||
<el-form-item label="成团人数包括家属" prop="estimatedFamilyNumbers">
|
||||
<el-input-number :max="1000"
|
||||
@@ -327,6 +321,7 @@ layout("/layouts/platform.html"){
|
||||
<el-form-item label="时间标段" prop="lotId">
|
||||
<el-select clearable filterable style="width: 100%"
|
||||
placeholder="请选择时间标段"
|
||||
@change="lotChange"
|
||||
v-model="formData.lotId">
|
||||
<el-option :key="item.id"
|
||||
:label="item.lotName"
|
||||
@@ -336,16 +331,25 @@ layout("/layouts/platform.html"){
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :md="12" :sm="24" :xs="24">
|
||||
<el-form-item label="预计费用(元/人次)" prop="estimatedCost">
|
||||
<el-input clearable maxlength="50" v-model="formData.estimatedCost"
|
||||
disabled
|
||||
placeholder="请输入预计费用"></el-input>
|
||||
</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" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')}">
|
||||
<el-form-item label="工勤特定线路" prop="specialLine">
|
||||
<el-radio-group class="mr0-radio" size="small" v-model="formData.specialLine">
|
||||
<el-radio :label="true" border>是</el-radio>
|
||||
<el-radio :label="false" border>否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!--<el-col :md="12" :sm="24" :xs="24">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系人" prop="lineContact">
|
||||
@@ -363,7 +367,7 @@ layout("/layouts/platform.html"){
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-col>-->
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
@@ -547,7 +551,8 @@ layout("/layouts/platform.html"){
|
||||
// {label: '创建模式', prop: 'createMode', sortable: true},
|
||||
{label: '创建人', prop: 'createUserName', sortable: true},
|
||||
//{label: '创建工会', prop: 'createUnionName', sortable: true},
|
||||
{label: '是否启用', prop: 'isDisabled', sortable: true}
|
||||
{label: '是否启用', prop: 'isDisabled', sortable: true},
|
||||
{label: '审核状态', prop: 'stateId', sortable: true},
|
||||
],
|
||||
editDialogVisible: false,
|
||||
rules: {
|
||||
@@ -608,6 +613,7 @@ layout("/layouts/platform.html"){
|
||||
lineContactPhone: null,
|
||||
openChoose: false,
|
||||
groupType: null,
|
||||
specialLine: false,
|
||||
},
|
||||
pageForm: {
|
||||
keywords: null,
|
||||
@@ -632,6 +638,22 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
validLineTime() {
|
||||
//如果是校工会直接过
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('SchoolUnionMemberAdmin')}" === 'true') {
|
||||
return true
|
||||
}
|
||||
const {createLineStartTime, createLineEndTime} = this.modifyConfig
|
||||
if(moment().unix() >= moment(createLineStartTime).unix() && moment().unix() <= moment(createLineEndTime).unix()) {
|
||||
return true
|
||||
}else {
|
||||
return false
|
||||
}
|
||||
},
|
||||
lotChange(val) {
|
||||
const lot = this.lotList.find(o => o.id === val)
|
||||
this.formData.estimatedCost = lot.activityCost
|
||||
},
|
||||
groupTypeChange(val) {
|
||||
if (this.config) {
|
||||
this.formData.minimumGroupSize = val === 1 ? this.config.conventionalCount : this.config.boutiqueCount
|
||||
@@ -654,6 +676,13 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
async openAdd() {
|
||||
if(!this.validLineTime()) {
|
||||
this.$alert('抱歉,当前时间不能操作线路', '温馨提示', {
|
||||
confirmButtonText: '确定',
|
||||
type: 'warning'
|
||||
})
|
||||
return
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
if (this.$refs['form']) {
|
||||
@@ -669,6 +698,13 @@ layout("/layouts/platform.html"){
|
||||
await this.getNumber()
|
||||
},
|
||||
async openEdit(id) {
|
||||
if(!this.validLineTime()) {
|
||||
this.$alert('抱歉,当前时间不能操作线路', '温馨提示', {
|
||||
confirmButtonText: '确定',
|
||||
type: 'warning'
|
||||
})
|
||||
return
|
||||
}
|
||||
const resp = await $.post(loc() + '/selectLineInfoById/' + id)
|
||||
if (resp.code === 0) {
|
||||
this.$refs.guava.edit()
|
||||
|
||||
@@ -0,0 +1,269 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年度范围:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
v-model="pageForm.startYear"
|
||||
type="year"
|
||||
class="picker-year"
|
||||
format="yyyy"
|
||||
style="width: 46%"
|
||||
value-format="yyyy"
|
||||
@change="handleChangeYear"
|
||||
>
|
||||
</el-date-picker>
|
||||
<span>至</span>
|
||||
<el-date-picker
|
||||
v-model="pageForm.endYear"
|
||||
type="year"
|
||||
class="picker-year"
|
||||
format="yyyy"
|
||||
style="width: 46%"
|
||||
value-format="yyyy"
|
||||
@change="handleChangeYear"
|
||||
>
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">旅行社:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select @change="doSearch"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
v-model="pageForm.travelAgencyId">
|
||||
<el-option :key="item.id"
|
||||
:label="item.travelAgencyName"
|
||||
:value="item.id"
|
||||
v-for="item in travelAgencyOptions"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">线路名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input @keyup.enter.native="doSearch" clearable clearable
|
||||
placeholder="请输入内容"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.lineName">
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">时间标段:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select @change="doSearch" clearable filterable
|
||||
style="width: 100%"
|
||||
v-model="pageForm.lotId">
|
||||
<el-option :key="item.id"
|
||||
:label="item.lotName"
|
||||
:value="item.id"
|
||||
v-for="item in lotList"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="精品团列表">
|
||||
<template #func>
|
||||
<el-radio-group v-model="pageForm.isAudit" @change="doSearch" size="small">
|
||||
<el-radio-button :label="0">全部</el-radio-button>
|
||||
<el-radio-button :label="1">已审核</el-radio-button>
|
||||
<el-radio-button :label="2">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:width="column.width"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row:{stateId}}" v-if="column.prop==='stateId'">
|
||||
<span v-if="stateId === 1">待校工会审核</span>
|
||||
<span v-if="stateId === 2">校工会退回修改</span>
|
||||
<span v-if="stateId === 3">校工会拒绝</span>
|
||||
<span v-if="stateId === 4">审核通过</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="250px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="row.stateId == 1" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<line-info ref="viewLineInfo"></line-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<line-info ref="lineAuditInfo" label="校工会审核" handle>
|
||||
<template #handle>
|
||||
<el-form :model="formData" ref="form" label-width="120px">
|
||||
<el-descriptions border class="descriptions-form" :column="2">
|
||||
<el-descriptions-item label="审核人">
|
||||
<el-form-item label-width="0">
|
||||
<el-input value="${@shiro.getPrincipalProperty('username')}" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="审核时间">
|
||||
<el-form-item label-width="0">
|
||||
<el-input :value="moment().format('YYYY-MM-DD')" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="审核意见" :span="2">
|
||||
<el-form-item label-width="0" prop="auditOpinion"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input v-model="formData.auditOpinion" maxlength="500"
|
||||
type="textarea"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-row type="flex" justify="end" align="center" style="padding: 20px">
|
||||
<el-button @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button @click="onAudit(2)" type="info">退回修改</el-button>
|
||||
<el-button @click="onAudit(3)" type="info">拒绝</el-button>
|
||||
<el-button @click="onAudit(4)" type="primary">通过</el-button>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</template>
|
||||
</line-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
lotList: [],
|
||||
travelAgencyOptions: [],
|
||||
tableColumns: [
|
||||
{label: '年度', prop: 'year', sortable: true},
|
||||
{label: '线路名称', prop: 'lineName', sortable: true, width: '200'},
|
||||
{label: '时间标段', prop: 'lotName', sortable: true, sortProp: 'lotValue'},
|
||||
{label: '承担旅行社', prop: 'travelAgencyName', sortable: true},
|
||||
{label: '地点', prop: 'travelAgencyPlace', sortable: true},
|
||||
{label: '线路类型', prop: 'regionalNature', sortable: true},
|
||||
{label: '创建人', prop: 'createUserName', sortable: true},
|
||||
{label: '审核状态', prop: 'stateId', sortable: true},
|
||||
],
|
||||
pageForm: {
|
||||
endYear: moment().format('YYYY'),
|
||||
lineName: null,
|
||||
travelAgencyId: null,
|
||||
startYear: null,
|
||||
isAudit: 2
|
||||
},
|
||||
modifyConfig: {},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue?v=' + new Date().getTime()),
|
||||
},
|
||||
methods: {
|
||||
onAudit(auditType) {
|
||||
this.$confirm('您确定要审核吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.formData.auditType = auditType
|
||||
const resp = await $.post('/platform/theRapyRecuperation/line/schoolAudit/onAudit', this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.viewLineInfo.openView(row.id)
|
||||
},
|
||||
openAudit(row) {
|
||||
this.$set(this.formData, 'id', row.id)
|
||||
this.$set(this.formData, 'auditOpinion', null)
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.lineAuditInfo.openView(row.id)
|
||||
},
|
||||
handleChangeYear() {
|
||||
if (this.pageForm.startYear && this.pageForm.endYear) {
|
||||
if (this.pageForm.startYear > this.pageForm.endYear) {
|
||||
this.pageForm.endYear = '';
|
||||
this.$message.error('起始年份需小于结束年份!');
|
||||
}
|
||||
}
|
||||
},
|
||||
async getLotList() {
|
||||
const {data} = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
|
||||
this.lotList = data.lots
|
||||
},
|
||||
async getTravelAgencyOptions() {
|
||||
const {data} = await $.get('/platform/theRapyRecuperation/line/getTravelAgencyOptions')
|
||||
this.travelAgencyOptions = data
|
||||
},
|
||||
async getModifyConfig() {
|
||||
const res = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
|
||||
if (res.code === 0) {
|
||||
this.modifyConfig = res.data
|
||||
}
|
||||
},
|
||||
async initPageData() {
|
||||
await this.getLotList()
|
||||
await this.getTravelAgencyOptions()
|
||||
await this.getModifyConfig()
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.initPageData()
|
||||
this.pageForm.startYear = this.modifyConfig.provinceStartYear + ''
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -263,7 +263,7 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'regionalNature', label: '线路类型', sortable: true},
|
||||
{prop: 'username', label: '发起人', sortable: true},
|
||||
{prop: 'unionname', label: '所属工会', sortable: true},
|
||||
{prop: 'estimatedFamilyNumbers', label: '最少成团人数', width: 80},
|
||||
{prop: 'minimumGroupSize', label: '最少成团人数', width: 80},
|
||||
{prop: 'lineNum', label: '报名人数(家属)'},
|
||||
{prop: 'stateName', label: '审核状态'},
|
||||
],
|
||||
|
||||
+29
-36
@@ -327,8 +327,10 @@ layout("/layouts/platform.html"){
|
||||
:rules="{required:true,message:'出行开始时间',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-date-picker style="width: 100%"
|
||||
@change="(val) => {platStartChange(val, row)}"
|
||||
placeholder="请选择出行开始时间"
|
||||
type="datetime"
|
||||
:picker-options="pickerOptions"
|
||||
type="date"
|
||||
v-model="row.playStartTime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
@@ -344,8 +346,9 @@ layout("/layouts/platform.html"){
|
||||
:rules="{required:true,message:'出行结束时间',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-date-picker style="width: 100%"
|
||||
disabled=""
|
||||
placeholder="请选择出行结束时间"
|
||||
type="datetime"
|
||||
type="date"
|
||||
v-model="row.playEndTime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
@@ -393,19 +396,19 @@ layout("/layouts/platform.html"){
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="交通工具">
|
||||
<!--<el-descriptions-item label="交通工具">
|
||||
<el-form-item :prop="'times.' + $index + '.trafficTools'"
|
||||
:rules="{required:false,message:'交通工具',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-input clearable v-model="row.trafficTools" placeholder="请输入交通工具"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions-item>-->
|
||||
|
||||
<el-descriptions-item label="预计费用(元/人次)">
|
||||
<el-form-item :prop="'times.' + $index + '.estimatedCost'"
|
||||
:rules="{required:true,message:'预计费用',trigger:['change','blur']}"
|
||||
label-width="0">
|
||||
<el-input placeholder="请输入预计费用" clearable v-model="row.estimatedCost"></el-input>
|
||||
<el-input disabled placeholder="请输入预计费用" clearable v-model="row.estimatedCost"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
@@ -451,7 +454,7 @@ layout("/layouts/platform.html"){
|
||||
]">
|
||||
<el-checkbox-group size="mini" v-model="row.signScope">
|
||||
<el-checkbox :label="1" border>自己选择</el-checkbox>
|
||||
<el-checkbox :label="2" border>本分工会</el-checkbox>
|
||||
<!--<el-checkbox :label="2" border>本分工会</el-checkbox>-->
|
||||
<el-checkbox :label="3" border>全校</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
@@ -486,7 +489,7 @@ layout("/layouts/platform.html"){
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :close-on-click-modal="false" :visible.sync="timeLotsDialogVisible" title="查看出行时间段信息"
|
||||
width="80%">
|
||||
width="80%" top="2%">
|
||||
<div v-for="(row,$index) in timeLots" :key="row.id" class="panel panel-default mt20" style="border: none">
|
||||
<div class="panel-heading"
|
||||
style="background: #fafafa;border:1px solid #ebeef5;border-bottom: none;display: flex;align-items: center;justify-content: space-between">
|
||||
@@ -495,50 +498,28 @@ layout("/layouts/platform.html"){
|
||||
</h3>
|
||||
</div>
|
||||
<el-row class="playPeriod">
|
||||
|
||||
<el-descriptions border :column="3" class="playPeriodTable">
|
||||
<el-descriptions-item label="报名开始时间">
|
||||
{{row.signUpStartTime}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="报名结束时间">
|
||||
{{row.signUpEndTime}}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="变更截至时间">
|
||||
{{row.changeEndTime}}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="出行开始时间">
|
||||
{{row.playStartTime}}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="出行结束时间">
|
||||
{{row.playEndTime}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系人">
|
||||
{{row.contact}}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="联系方式">
|
||||
{{row.contactPhone}}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="最少参与教工">
|
||||
<el-descriptions-item label="最少成团人数">
|
||||
{{row.minimumGroupSize}}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="交通工具">
|
||||
{{row.trafficTools}}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="预计费用(元/人次)">
|
||||
{{row.estimatedCost}}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="成团人数包括家属">
|
||||
{{row.estimatedFamilyNumbers}}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="是否开启">
|
||||
<el-switch
|
||||
disabled
|
||||
@@ -549,11 +530,6 @@ layout("/layouts/platform.html"){
|
||||
inactive-color="#ff4949">
|
||||
</el-switch>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="组织形式">
|
||||
{{signUpModeName(row.signUpMode)}}
|
||||
</el-descriptions-item>
|
||||
|
||||
</el-descriptions>
|
||||
|
||||
</el-row>
|
||||
@@ -787,7 +763,13 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
callback()
|
||||
}
|
||||
const that = this
|
||||
return {
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return that.calPlayTime(time)
|
||||
}
|
||||
},
|
||||
canChooseUserList: [],
|
||||
chooseUserMultiple: [],
|
||||
userDialogVisible: false,
|
||||
@@ -872,6 +854,18 @@ layout("/layouts/platform.html"){
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
calPlayTime(time) {
|
||||
const year = new Date().getFullYear()
|
||||
const lot = this.lotList.find(o => o.id === this.lineData.lotId)
|
||||
const beforeTime = moment(year + '-10-01').add(-(Number(lot.lotValue)), 'days')
|
||||
return !(time > new Date(year + '-06-30') && time < beforeTime)
|
||||
},
|
||||
platStartChange(time, row) {
|
||||
const lot = this.lotList.find(o => o.id === this.lineData.lotId)
|
||||
const afterTime = moment(time).add(Number(lot.lotValue), 'days')
|
||||
row.playEndTime = afterTime.format('YYYY-MM-DD HH:mm:ss')
|
||||
this.$forceUpdate()
|
||||
},
|
||||
addRow() {
|
||||
this.formData.times.push({
|
||||
enable:true,
|
||||
@@ -1120,7 +1114,6 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
async doEditOpen(row){
|
||||
console.log(row)
|
||||
const resp = await $.get(loc() + '/doEditOpen',{id:row.usId})
|
||||
if (resp.code === 0){
|
||||
this.$message.success(resp.msg)
|
||||
|
||||
@@ -52,10 +52,37 @@ layout("/layouts/platform.html"){
|
||||
v-model="pageForm.endYear"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年"
|
||||
placeholder="请选择年"
|
||||
style="width: 38%" @change="doSearch">
|
||||
</el-date-picker>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<span>出行时间:</span>
|
||||
<el-date-picker
|
||||
:clearable="true"
|
||||
v-model="pageForm.playStart"
|
||||
type="date"
|
||||
value-format="MM-dd"
|
||||
placeholder="请选择出行开始时间"
|
||||
style="width: 38%" @change="doSearch()">
|
||||
</el-date-picker>
|
||||
<span>至</span>
|
||||
<el-date-picker
|
||||
:clearable="true"
|
||||
v-model="pageForm.playEnd"
|
||||
type="date"
|
||||
value-format="MM-dd"
|
||||
placeholder="请选择出行结束时间"
|
||||
style="width: 38%" @change="doSearch">
|
||||
</el-date-picker>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title"></el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<span>酒店名称:</span>
|
||||
<el-select v-model="pageForm.baseManagementId" placeholder="请选择酒店名称"
|
||||
@@ -69,13 +96,6 @@ layout("/layouts/platform.html"){
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title"></el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<span>旅 行 社:</span>
|
||||
<el-select v-model="pageForm.travelAgencyId" placeholder="请选择旅行社"
|
||||
@@ -89,16 +109,6 @@ layout("/layouts/platform.html"){
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<span>路线类型:</span>
|
||||
<el-select v-model="pageForm.regionalNature" filterable
|
||||
placeholder="请选择线路"
|
||||
style="width: 80%">
|
||||
<el-option label="全部" value=""></el-option>
|
||||
<el-option label="省内" value="省内"></el-option>
|
||||
<el-option label="省外" value="省外"></el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -110,9 +120,24 @@ layout("/layouts/platform.html"){
|
||||
ref="table_tool">
|
||||
<template #func>
|
||||
<el-button icon="el-icon-s-promotion" size="small" type="primary"
|
||||
@click="doExport"
|
||||
class="mr10">导出人员
|
||||
@click="doExport">导出报名表
|
||||
</el-button>
|
||||
<el-button icon="el-icon-s-promotion" size="small" type="primary"
|
||||
@click="exportGroup">导出成团表
|
||||
</el-button>
|
||||
<el-dropdown class="ml10 mr10" trigger="click">
|
||||
<el-button size="small" type="primary">
|
||||
一键成团<i class="el-icon-arrow-down el-icon--right"></i>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item @click.native="oneKeyGroupSuccess(true)">
|
||||
发送通知
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item @click.native="oneKeyGroupSuccess(false)">
|
||||
不发送通知
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" style="width: 100%"
|
||||
@@ -143,35 +168,15 @@ layout("/layouts/platform.html"){
|
||||
{{row.stateName?row.stateName:'待成团'}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="180px">
|
||||
<el-table-column label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<template>
|
||||
<el-button @click="openView(row)" size="mini" type="primary">
|
||||
查看
|
||||
查看团
|
||||
</el-button>
|
||||
<el-button @click="openViewUser(row)" size="mini" type="primary">
|
||||
<el-button @click="openViewUser(row, pageForm.playStart, pageForm.playEnd)" size="mini" type="primary">
|
||||
查看人员
|
||||
</el-button>
|
||||
|
||||
<!--<el-dropdown class="ml10 mr10" trigger="click">
|
||||
<el-button size="mini" type="primary">
|
||||
成团确认<i class="el-icon-arrow-down el-icon--right"></i>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item @click.native="sendSuccess(row, true)"
|
||||
:disabled="![null,7703,7710,7715].includes(row.auditState)">
|
||||
发送通知
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item @click.native="sendSuccess(row, false)"
|
||||
:disabled="![null,7703,7710,7715].includes(row.auditState)">
|
||||
不发送通知
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
|
||||
<el-button @click="sendFail(row, false)" size="mini" type="primary">
|
||||
未成团确认
|
||||
</el-button>-->
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -180,13 +185,10 @@ layout("/layouts/platform.html"){
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<sign-user></sign-user>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog :visible.sync="userVisible" top="2%" :close-on-click-modal="false" title="报名人员">
|
||||
<sign-user ref="signUser"></sign-user>
|
||||
<sign-user ref="signUser" @refresh="refreshChild"></sign-user>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="userVisible = false" type="primary">取 消</el-button>
|
||||
</span>
|
||||
@@ -195,6 +197,7 @@ layout("/layouts/platform.html"){
|
||||
<el-dialog :visible.sync="groupVisible" top="2%" :close-on-click-modal="false" title="团信息">
|
||||
<el-table :data="groupTableData" max-height="800">
|
||||
<el-table-column label="序号" type="index" header-align="center" align="center" width="50"></el-table-column>
|
||||
<el-table-column prop="playDay" label="出行天数" header-align="center" align="center" sortable></el-table-column>
|
||||
<el-table-column prop="specificTime" label="出行时间" header-align="center" align="center" sortable></el-table-column>
|
||||
<el-table-column prop="userCount" label="报名人数" header-align="center" align="center" sortable></el-table-column>
|
||||
<el-table-column prop="hasLocked" label="状态" header-align="center" align="center" sortable>
|
||||
@@ -205,7 +208,7 @@ layout("/layouts/platform.html"){
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="380px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openViewUser(row)" size="mini" type="primary">查看人员</el-button>
|
||||
<el-button @click="openViewUser2(row)" size="mini" type="primary">查看人员</el-button>
|
||||
<el-dropdown class="ml10 mr10" trigger="click">
|
||||
<el-button size="mini" type="primary">
|
||||
成团确认<i class="el-icon-arrow-down el-icon--right"></i>
|
||||
@@ -249,13 +252,13 @@ layout("/layouts/platform.html"){
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'year', label: '年度', width: 60},
|
||||
{prop: 'baseName', label: '酒店名称', sortable: true, width: 200},
|
||||
{prop: 'travelAgencyName', label: '承担旅行社', sortable: true, width: 180},
|
||||
{prop: 'regionalNature', label: '出行类型', sortable: true},
|
||||
{prop: 'username', label: '发起人', sortable: true},
|
||||
{prop: 'baseContactPerson', label: '联系人', sortable: true},
|
||||
{prop: 'baseContactNumber', label: '联系电话', sortable: true},
|
||||
{prop: 'groupCount', label: '团数量', width: 80},
|
||||
{prop: 'baseName', label: '酒店名称', sortable: true},
|
||||
{prop: 'travelAgencyName', label: '承担旅行社', sortable: true},
|
||||
{prop: 'regionalNature', label: '出行类型', sortable: true, checked: 0},
|
||||
{prop: 'username', label: '发起人', sortable: true, checked: 0},
|
||||
{prop: 'baseContactPerson', label: '联系人', sortable: true, checked: 0},
|
||||
{prop: 'baseContactNumber', label: '联系电话', sortable: true, checked: 0},
|
||||
{prop: 'groupCount', label: '团数量'},
|
||||
{prop: 'signCount', label: '报名人数'},
|
||||
],
|
||||
modifyConfig: {},
|
||||
@@ -271,6 +274,32 @@ layout("/layouts/platform.html"){
|
||||
'sign-user': signUser
|
||||
},
|
||||
methods: {
|
||||
oneKeyGroupSuccess(type) {
|
||||
this.$confirm("您确定要一键成团吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
$.post("/platform/theRapyRecuperation/fragment/oneKeyGroupSuccess", {
|
||||
travelAgencyId: this.pageForm.travelAgencyId,
|
||||
baseId: this.pageForm.baseManagementId,
|
||||
playStart: this.pageForm.playStart,
|
||||
playEnd: this.pageForm.playEnd,
|
||||
type: type,
|
||||
}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}else {
|
||||
this.$message.warning(res.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
refreshChild() {
|
||||
this.doSearch()
|
||||
this.openView(this.baseRow)
|
||||
},
|
||||
async sendSuccess(row, type) {
|
||||
let message = '确定要成团吗?'
|
||||
if (type) {
|
||||
@@ -284,7 +313,9 @@ layout("/layouts/platform.html"){
|
||||
}).then(async () => {
|
||||
const resp = await $.post('/platform/theRapyRecuperation/fragment/sendSuccess', {
|
||||
baseId: row.id,
|
||||
type: type
|
||||
type: type,
|
||||
specificTime: row.specificTime,
|
||||
playDay: row.playDay,
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
await this.openView(this.baseRow)
|
||||
@@ -303,9 +334,12 @@ layout("/layouts/platform.html"){
|
||||
}).then(async () => {
|
||||
const resp = await $.post('/platform/theRapyRecuperation/fragment/sendFail', {
|
||||
baseId: row.id,
|
||||
type: type
|
||||
type: type,
|
||||
specificTime: row.specificTime,
|
||||
playDay: row.playDay,
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.doSearch()
|
||||
await this.openView(this.baseRow)
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
@@ -316,15 +350,23 @@ layout("/layouts/platform.html"){
|
||||
async openView(row) {
|
||||
this.baseRow = row
|
||||
const res = await $.post('/platform/theRapyRecuperation/fragment/getGroupInfo', {
|
||||
baseId: row.id
|
||||
baseId: row.id,
|
||||
playStart: this.pageForm.playStart,
|
||||
playEnd: this.pageForm.playEnd,
|
||||
})
|
||||
this.groupTableData = res.data
|
||||
this.groupVisible = true
|
||||
},
|
||||
openViewUser(row) {
|
||||
openViewUser(row, playStart, playEnd) {
|
||||
this.userVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.signUser.initData(row.id)
|
||||
this.$refs.signUser.initData(row.id, null, playStart, playEnd, null)
|
||||
})
|
||||
},
|
||||
openViewUser2(row) {
|
||||
this.userVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.signUser.initData(row.id, row.specificTime, this.pageForm.playStart, this.pageForm.playEnd, row.playCount)
|
||||
})
|
||||
},
|
||||
async getTravelAgency() {
|
||||
@@ -360,6 +402,15 @@ layout("/layouts/platform.html"){
|
||||
"®ionalNature=" + this.pageForm.regionalNature
|
||||
)
|
||||
},
|
||||
exportGroup() {
|
||||
window.open("/platform/theRapyRecuperation/fragment/exportGroup?" +
|
||||
"startYear=" + this.pageForm.startYear +
|
||||
"&endYear=" + this.pageForm.endYear +
|
||||
"&baseManagementId=" + this.pageForm.baseManagementId +
|
||||
"&travelAgencyId=" + this.pageForm.travelAgencyId +
|
||||
"®ionalNature=" + this.pageForm.regionalNature
|
||||
)
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.getModifyConfig();
|
||||
|
||||
+29
-11
@@ -146,8 +146,10 @@ layout("/layouts/platform.html"){
|
||||
ref="table_tool">
|
||||
<template #func>
|
||||
<el-button icon="el-icon-s-promotion" size="small" type="primary"
|
||||
@click="doExport"
|
||||
class="mr10">导出成团线路人员
|
||||
@click="doExport">导出报名表
|
||||
</el-button>
|
||||
<el-button icon="el-icon-s-promotion" size="small" type="primary"
|
||||
@click="exportGroup">导出成团表
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
@@ -205,11 +207,11 @@ layout("/layouts/platform.html"){
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item @click.native="sendSuccess(row, true)"
|
||||
:disabled="![null,7703,7710,7715].includes(row.auditState)">
|
||||
>
|
||||
发送通知
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item @click.native="sendSuccess(row, false)"
|
||||
:disabled="![null,7703,7710,7715].includes(row.auditState)">
|
||||
>
|
||||
不发送通知
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
@@ -355,13 +357,13 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'lineName', label: '线路名称', sortable: true, width: 200},
|
||||
{prop: 'linePlayTime', label: '出行时间', width: 180},
|
||||
{prop: 'travelAgencyName', label: '承担旅行社', sortable: true, width: 180},
|
||||
{prop: 'signUpMode', label: '组织形式', sortable: true},
|
||||
{prop: 'signUpMode', label: '组织形式', sortable: true, checked: 0},
|
||||
{prop: 'regionalNature', label: '线路类型', sortable: true},
|
||||
{prop: 'username', label: '发起人', sortable: true},
|
||||
{prop: 'unionname', label: '所属工会', sortable: true},
|
||||
{prop: 'unionname', label: '所属工会', sortable: true, checked: 0},
|
||||
{prop: 'minimumGroupSize', label: '最少成团人数', width: 80},
|
||||
{prop: 'lineNum', label: '报名人数(家属)'},
|
||||
{prop: 'stateName', label: '审核状态'},
|
||||
{prop: 'stateName', label: '状态'},
|
||||
],
|
||||
|
||||
modifyConfig: {},
|
||||
@@ -426,16 +428,32 @@ layout("/layouts/platform.html"){
|
||||
linePlayTime,
|
||||
regionalNature,
|
||||
} = this.pageForm
|
||||
window.open("/platform/theRapyRecuperation/user/query/doExport?" +
|
||||
window.open("/platform/theRapyRecuperation/statistics/doExport?" +
|
||||
"startYear=" + startYear +
|
||||
"&endYear=" + endYear +
|
||||
"&unionId=" + unionId +
|
||||
"&takePartInLineId=" + takePartInLineId +
|
||||
"&lotId=" + lotId +
|
||||
"®ionalNature=" + regionalNature +
|
||||
"&linePlayTime=" + linePlayTime)
|
||||
},
|
||||
exportGroup() {
|
||||
const {
|
||||
startYear,
|
||||
endYear,
|
||||
unionId,
|
||||
takePartInLineId,
|
||||
lotId,
|
||||
linePlayTime,
|
||||
regionalNature,
|
||||
} = this.pageForm
|
||||
window.open("/platform/theRapyRecuperation/statistics/exportGroup?" +
|
||||
"startYear=" + startYear +
|
||||
"&endYear=" + endYear +
|
||||
"&unionId=" + unionId +
|
||||
"&takePartInLineId=" + takePartInLineId +
|
||||
"&lotId=" + lotId +
|
||||
"&state=" + 1 +
|
||||
"®ionalNature=" + regionalNature +
|
||||
"&satisfyPeople=true" +
|
||||
"&types=" + JSON.stringify(['line']) +
|
||||
"&linePlayTime=" + linePlayTime)
|
||||
},
|
||||
async getLinePlayTimeByLineId(id) {
|
||||
|
||||
@@ -40,6 +40,8 @@ const signUser = {
|
||||
{prop: 'mobile', label: '联系方式'},
|
||||
{prop: 'unionname', label: '所属工会'},
|
||||
{prop: 'unitname', label: '所属单位', sortable: true},
|
||||
{prop: 'playDay', label: '出行天数', sortable: true},
|
||||
{prop: 'money', label: '预计费用', sortable: true},
|
||||
{prop: 'specificTime', label: '出行时间', sortable: true},
|
||||
],
|
||||
}
|
||||
@@ -55,14 +57,19 @@ const signUser = {
|
||||
const resp = await $.post('/platform/theRapyRecuperation/statistics/deleteJoinUser', {id: row.id})
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.doSearch()
|
||||
await this.initData(this.pageForm.takePartInBaseManagementId)
|
||||
this.$emit("refresh", null)
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
async initData(baseId) {
|
||||
this.pageForm.takePartInBaseManagementId = baseId
|
||||
async initData(baseId, specificTime = null, playStart = null, playEnd = null, playCount = null) {
|
||||
this.$set(this.pageForm, 'takePartInBaseManagementId', baseId)
|
||||
this.$set(this.pageForm, 'specificTime', specificTime)
|
||||
this.$set(this.pageForm, 'playStart', playStart)
|
||||
this.$set(this.pageForm, 'playEnd', playEnd)
|
||||
this.$set(this.pageForm, 'playCount', playCount)
|
||||
const res = await $.post('/platform/theRapyRecuperation/fragment/getSignUser', this.pageForm)
|
||||
if (res.code === 0) {
|
||||
this.tableData = res.data.list
|
||||
|
||||
+22
@@ -89,6 +89,18 @@ layout("/layouts/platform.html"){
|
||||
v-model.number="formData.fragmentCount"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="精品团创建线路时间" prop="createLineTimes">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="formData.createLineTimes"
|
||||
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="implodeTimes">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
@@ -354,6 +366,7 @@ layout("/layouts/platform.html"){
|
||||
conventionalCount: [{required: true, message: '请输入常规团最少成团人数', trigger: ['change', 'blur']}],
|
||||
boutiqueCount: [{required: true, message: '请输入精品团最少成团人数', trigger: ['change', 'blur']}],
|
||||
fragmentCount: [{required: true, message: '请输入分段式最少成团人数', trigger: ['change', 'blur']}],
|
||||
createLineTimes: [{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']}],
|
||||
@@ -413,6 +426,11 @@ layout("/layouts/platform.html"){
|
||||
})
|
||||
const cloneData = clone(this.formData)
|
||||
|
||||
if(this.formData.createLineTimes && this.formData.createLineTimes.length > 0) {
|
||||
cloneData.createLineStartTime = this.formData.createLineTimes[0]
|
||||
cloneData.createLineEndTime = this.formData.createLineTimes[1]
|
||||
}
|
||||
|
||||
if(this.formData.implodeTimes && this.formData.implodeTimes.length > 0) {
|
||||
cloneData.implodeStartTime = this.formData.implodeTimes[0]
|
||||
cloneData.implodeEndTime = this.formData.implodeTimes[1]
|
||||
@@ -455,6 +473,10 @@ layout("/layouts/platform.html"){
|
||||
if (data.outsideQuotaProportion) {
|
||||
data.outsideQuotaProportion = data.outsideQuotaProportion * 1000 / 10
|
||||
}
|
||||
|
||||
if(data.createLineStartTime && data.createLineEndTime) {
|
||||
data.createLineTimes = [data.createLineStartTime, data.createLineEndTime]
|
||||
}
|
||||
if(data.implodeStartTime && data.implodeEndTime) {
|
||||
data.implodeTimes = [data.implodeStartTime, data.implodeEndTime]
|
||||
}
|
||||
|
||||
@@ -5,7 +5,9 @@ import cn.afterturn.easypoi.excel.annotation.Excel;
|
||||
import cn.afterturn.easypoi.excel.entity.ImportParams;
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import io.v.nutz.base.model.msgUser;
|
||||
import io.v.nutz.base.service.BaseService;
|
||||
import io.v.nutz.base.utils.MsgApi;
|
||||
import io.v.nutz.base.utils.Roles;
|
||||
import io.v.nutz.sys.models.Sys_unit;
|
||||
import io.v.nutz.sys.models.Sys_user;
|
||||
@@ -494,16 +496,17 @@ public class JugTest {
|
||||
dao.insert(insertList);
|
||||
}
|
||||
|
||||
@Inject
|
||||
private MsgApi msgApi;
|
||||
|
||||
@Test
|
||||
public void t10(){
|
||||
SourceChangeConfig config = dao.fetch(SourceChangeConfig.class, Cnd.NEW());
|
||||
List<SourceChangeConfig.MemberSift> memberSiftList = config.getMemberSiftList();
|
||||
for (SourceChangeConfig.MemberSift sift : memberSiftList) {
|
||||
Object siftValue = sift.getSiftValue();
|
||||
System.out.println(siftValue);
|
||||
List<String> list = (List<String>) siftValue;
|
||||
System.out.println(list);
|
||||
}
|
||||
msgUser msgUser = new msgUser();
|
||||
msgUser.setName("User");
|
||||
msgUser.setUserId("LSGH0001");
|
||||
msgUser.setName("工会测试");
|
||||
List<msgUser> users = new ArrayList<>();
|
||||
users.add(msgUser);
|
||||
msgApi.sendMsg("测试", "这是一条测试消息", 1, 1, "WeChat", users, "");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user