feat: 疗休养UI优化2

This commit is contained in:
2026-11-05 17:42:34 +08:00
parent 134a11da09
commit c21e92e418
4 changed files with 140 additions and 50 deletions
@@ -260,7 +260,7 @@ public class TheRapyRecuperationUnionQueryController {
cnd.andEX("enroll.isNormal", "=", true);
cnd.andEX("YEAR ( enroll.signingUptime )", "=", year);
if (StrUtil.isNotBlank(lotId)) {
if (!"2".equals(state) && StrUtil.isNotBlank(lotId)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.or("line.lotId", "=", lotId);
// seg.or("agency.lotId", "=", lotId);
@@ -275,7 +275,7 @@ public class TheRapyRecuperationUnionQueryController {
}
cnd.andEX("enroll.selfUnionId", "=", unionId);
} else {
if (StrUtil.isNotBlank(state2)) {
if ("1".equals(state) && StrUtil.isNotBlank(state2)) {
//等于1本工会人员看自己工会线路人员
if (state2.equals("1")) {
cnd.andEX("enroll.selfUnionId", "=", TherapyContext.getUnionId());
@@ -296,8 +296,10 @@ public class TheRapyRecuperationUnionQueryController {
}
}
cnd.andEX("enroll.selfUnitId", "=", unitId);
cnd.andEX("lineu.lineId", "=", takePartInLineId);
cnd.andEX("lineu.id", "=", selectId);
if (!"2".equals(state)) {
cnd.andEX("lineu.lineId", "=", takePartInLineId);
cnd.andEX("lineu.id", "=", selectId);
}
addEnrollTravelAgencyCondition(cnd, agencyId);
if (state.equals("1")) {
cnd.andEX("line.regionalNature", "=", regionalNature);
@@ -305,9 +307,8 @@ public class TheRapyRecuperationUnionQueryController {
cnd.and("enroll.takePartInLineId", "!=", "");
sql.setVar("lotSql", ",(select lotName from inclusive_therapy_v3_lot where id = line.lotId) as lotName");
} else if (state.equals("2")) {
cnd.and("enroll.takePartInTravelAgencyId", "is not", null);
cnd.and("enroll.takePartInTravelAgencyId", "!=", "");
cnd.andEX("enroll.takePartInTravelAgencyId", "=", agencyId);
cnd.and("agency.id", "is not", null);
cnd.andEX("agency.id", "=", agencyId);
} else if ("3".equals(state)) {
cnd.and("enroll.takePartInBaseManagementId", "is not", null);
cnd.andEX("enroll.takePartInBaseManagementId", "=", takePartInBaseManagementId);
@@ -338,17 +339,24 @@ public class TheRapyRecuperationUnionQueryController {
SELECT
agency.*,
files AS fileId,
( SELECT COUNT( 1 ) FROM inclusive_therapy_v3_enroll WHERE agency.id = takePartInTravelAgencyId and isNormal=true and stateId=@stateId $unionCnd $yearCnd) agencyNum
( SELECT COUNT(1)
FROM inclusive_therapy_v3_enroll enroll
LEFT JOIN inclusive_therapy_v3_line_union_select lineu ON lineu.id = enroll.takePartInLineId
LEFT JOIN inclusive_therapy_v3_line line ON line.id = lineu.lineId
WHERE agency.id = IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))
AND enroll.isNormal = TRUE AND enroll.stateId = @stateId
$agencyUnionCnd $agencyYearCnd
) agencyNum
FROM
inclusive_therapy_v3_travel_agency agency
) agency
$condition
""").setParam("stateId", TheRapyRecuperationState.PASS);
if (!TherapyContext.hasAnyRoles("sysadmin,H06")) {
sql.setVar("unionCnd", "AND selfUnionId = '%s' ".formatted(TherapyContext.getUnionId()));
sql.setVar("agencyUnionCnd", "AND enroll.selfUnionId = '%s' ".formatted(TherapyContext.getUnionId()));
}
if (StrUtil.isNotBlank(year)) {
sql.setVar("yearCnd", "AND YEAR(signingUptime) = '%s' ".formatted(year));
sql.setVar("agencyYearCnd", "AND YEAR(enroll.signingUptime) = '%s' ".formatted(year));
}
cnd.andEX("agency.`year`", "=", year);
cnd.andEX("agency.id", "=", agencyId);
@@ -640,8 +648,8 @@ public class TheRapyRecuperationUnionQueryController {
//cnd1.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()));
}
} else if (state.equals("2")) {
cnd1.and("enroll.takePartInTravelAgencyId", "is not", null)
.and("enroll.takePartInTravelAgencyId", "!=", "")
cnd1.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "is not", null)
.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "!=", "")
.and("enroll.selfUnionId", "=", TherapyContext.getUnionId());
} else {
cnd1.and("enroll.takePartInBaseManagementId", "is not", null).and("enroll.selfUnionId", "=", TherapyContext.getUnionId());
@@ -676,8 +684,8 @@ public class TheRapyRecuperationUnionQueryController {
cnd1.and("enroll.takePartInLineId", "is not", null);
cnd1.and("enroll.takePartInLineId", "!=", "");
} else if (state.equals("2")) {
cnd1.and("enroll.takePartInTravelAgencyId", "is not", null);
cnd1.and("enroll.takePartInTravelAgencyId", "!=", "");
cnd1.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "is not", null);
cnd1.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "!=", "");
cnd1.andEX("enroll.selfUnionId", "=", unionId);
} else if (state.equals("3")) {
cnd1.and("enroll.takePartInBaseManagementId", "is not", null);
@@ -733,8 +741,8 @@ public class TheRapyRecuperationUnionQueryController {
//cnd2.and(Cnd.exps("enroll.selfUnionId", "=", Vi.getUnionId()));
}
} else if (state.equals("2")) {
cnd2.and("enroll.takePartInTravelAgencyId", "is not", null)
.and("enroll.takePartInTravelAgencyId", "!=", "")
cnd2.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "is not", null)
.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "!=", "")
.and("enroll.selfUnionId", "=", TherapyContext.getUnionId());
} else {
cnd2.and("enroll.takePartInBaseManagementId", "is not", null).and("enroll.selfUnionId", "=", TherapyContext.getUnionId());
@@ -769,8 +777,8 @@ public class TheRapyRecuperationUnionQueryController {
cnd2.and("enroll.takePartInLineId", "is not", null);
cnd2.and("enroll.takePartInLineId", "!=", "");
} else if (state.equals("2")) {
cnd2.and("enroll.takePartInTravelAgencyId", "is not", null);
cnd2.and("enroll.takePartInTravelAgencyId", "!=", "");
cnd2.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "is not", null);
cnd2.and("IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))", "!=", "");
cnd2.andEX("enroll.selfUnionId", "=", unionId);
} else {
cnd2.and("enroll.takePartInBaseManagementId", "is not", null);
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.staffbenefit.therapyRecuperation.service.impl;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.zhgh.staffbenefit.therapyRecuperation.support.TherapyContext;
import com.budwk.app.zhgh.staffbenefit.therapyRecuperation.constant.TheRapyRecuperationState;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.zhgh.staffbenefit.therapyRecuperation.support.TherapyServiceImpl;
import com.budwk.app.zhgh.staffbenefit.therapyRecuperation.model.TheRapyRecuperationTravelAgency;
@@ -114,11 +115,22 @@ public class TheRapyRecuperationTravelAgencyServiceImpl extends TherapyServiceIm
( SELECT COUNT( 1 ) FROM inclusive_therapy_v3_enroll_companion WHERE trreId = enroll.id AND relation = '亲属' ) isFamily
FROM
`inclusive_therapy_v3_enroll` enroll
LEFT JOIN inclusive_therapy_v3_travel_agency agency ON agency.id = enroll.takePartInTravelAgencyId
LEFT JOIN inclusive_therapy_v3_line_union_select lineu ON lineu.id = enroll.takePartInLineId
LEFT JOIN inclusive_therapy_v3_line line ON line.id = lineu.lineId
LEFT JOIN inclusive_therapy_v3_travel_agency agency
ON agency.id = IFNULL(enroll.takePartInTravelAgencyId, IFNULL(lineu.travelAgencyId, line.travelAgencyId))
WHERE
enroll.takePartInTravelAgencyId = @takePartInTravelAgencyId
and enroll.selfUnionId = @unionId
""").setParam("takePartInTravelAgencyId", id).setParam("unionId", TherapyContext.getUnionId());
agency.id = @takePartInTravelAgencyId
AND enroll.isNormal = TRUE
AND enroll.stateId = @stateId
AND YEAR(enroll.signingUptime) = agency.year
$agencyUnionCnd
""").setParam("takePartInTravelAgencyId", id)
.setParam("stateId", TheRapyRecuperationState.PASS);
if (!TherapyContext.hasAnyRoles("sysadmin,H06")) {
sql.setVar("agencyUnionCnd", "AND enroll.selfUnionId = @unionId");
sql.setParam("unionId", TherapyContext.getUnionId());
}
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
}
}
@@ -138,9 +138,13 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
line-height: 20px;
}
#app .branch-query-filters .query-route-hint > span {
.therapy-desktop #app .branch-query-filters .query-row-content > .el-row > .query-route-hint > span:first-child {
flex: 1 1 auto;
min-width: 0;
color: inherit;
text-align: left;
white-space: normal;
overflow-wrap: anywhere;
}
@media (max-width: 767px) {
@@ -1685,6 +1689,13 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/platform.html"){
checkState(type) {
this.$refs.table.clearSelection();
this.pageForm.state = type
if (type === "2") {
this.$set(this.pageForm, 'state2', '')
this.$set(this.pageForm, 'takePartInLineId', '')
this.$set(this.pageForm, 'selectId', '')
this.$set(this.pageForm, 'lotId', '')
this.$set(this.pageForm, 'regionalNature', '')
}
if (type === "1") {
this.pageForm.lb = 'xl'
} else if (type === "2") {
@@ -471,8 +471,8 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/mobile.html"){
}
#app.therapy-mobile .list-card > .content {
align-items: center;
padding: 18px 12px;
align-items: flex-start;
padding: 16px 14px;
}
#app.therapy-mobile .line-thumb {
@@ -482,18 +482,82 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/mobile.html"){
#app.therapy-mobile .line-thumb .van-image {
width: 100% !important;
height: 126px !important;
height: auto !important;
aspect-ratio: 4 / 3;
overflow: hidden;
border-radius: 12px;
}
#app.therapy-mobile .line-thumb img { object-fit: cover; }
#app.therapy-mobile .line-title-row { align-items: center; gap: 6px; }
#app.therapy-mobile .line-title-text { color: #101b38; font-size: 15px !important; line-height: 24px; }
#app.therapy-mobile .desc_info > div { line-height: 25px; color: #58627b; }
#app.therapy-mobile .line-title-text {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
white-space: normal;
color: #172033;
font-size: 16px !important;
line-height: 24px;
}
#app.therapy-mobile .desc_info > div { font-size: 13px; line-height: 23px; color: #66758a; }
#app.therapy-mobile .group-tag { padding: 3px 6px; font-size: 11px; line-height: 17px; }
#app.therapy-mobile .van-list__finished-text { font-size: 14px; color: #8c93a3; }
#app.therapy-mobile .therapy-travel-sheet {
max-height: 80vh;
border-radius: 16px 16px 0 0;
}
#app.therapy-mobile .therapy-travel-sheet .van-action-sheet__header {
flex-shrink: 0;
color: #172033;
font-size: 18px;
font-weight: 600;
line-height: 52px;
}
#app.therapy-mobile .therapy-travel-sheet .van-action-sheet__description {
flex-shrink: 0;
padding: 0 20px 16px;
color: #66758a;
font-size: 14px;
line-height: 22px;
overflow-wrap: anywhere;
}
#app.therapy-mobile .therapy-travel-sheet .van-action-sheet__content {
min-height: 0;
overflow-y: auto;
}
#app.therapy-mobile .travel-period-list { padding: 12px 14px 4px; }
#app.therapy-mobile .travel-period-card {
margin-bottom: 12px;
padding: 16px;
border: 1px solid #ebedf0;
border-radius: 12px;
background: #f7f8fa;
text-align: left;
overflow-wrap: anywhere;
}
#app.therapy-mobile .travel-period-title { margin-bottom: 8px; color: #172033; font-size: 16px; font-weight: 600; line-height: 24px; }
#app.therapy-mobile .travel-period-date { margin-bottom: 10px; color: #35445a; font-size: 14px; line-height: 24px; }
#app.therapy-mobile .travel-period-meta { color: #66758a; font-size: 13px; line-height: 22px; }
#app.therapy-mobile .travel-period-actions { display: flex; gap: 12px; margin-top: 16px; }
#app.therapy-mobile .travel-period-actions .van-button {
flex: 1;
min-width: 0;
height: 40px;
border-color: #1989fa;
border-radius: 8px;
font-size: 16px;
}
#app.therapy-mobile .travel-period-actions .van-button--info { background: #1989fa; }
#app.therapy-mobile .travel-period-actions .van-button--plain { color: #1989fa; background: #fff; }
#app.therapy-mobile .therapy-travel-sheet .van-action-sheet__cancel { flex-shrink: 0; color: #66758a; font-size: 16px; }
#app.therapy-mobile .therapy-travel-sheet .van-empty { position: static; width: auto; height: auto; transform: none; background: transparent; }
@media (max-width: 350px) {
#app.therapy-mobile .line-type-selector { flex-basis: 100px; }
#app.therapy-mobile .line-type-selector .van-dropdown-item__content { width: 100px; right: 10px; }
@@ -569,10 +633,10 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/mobile.html"){
<div class="content">
<div class="line-thumb">
<van-image
height="82"
fit="cover"
radius="8"
:src="CREATE_PREVIEW_URL(o.fileId)"
width="96">
width="100%">
</van-image>
</div>
<div v-if="pageForm.theRapyRecuperationType != '2' && pageForm.theRapyRecuperationType != '3'"
@@ -726,32 +790,27 @@ layout("/platform/zhgh/staffbenefit/therapyRecuperation/layouts/mobile.html"){
<van-action-sheet
v-model="selectLinePopup"
class="therapy-travel-sheet"
title="选择出行时间"
cancel-text="取消"
:description="clickRow.lineName"
close-on-click-action>
<button v-for="(item,index) in selectLineList" type="button" class="van-action-sheet__item">
<div style="display: flex; justify-content: space-between; align-items: center">
<div>
<div class="van-action-sheet__name">{{item.name}}</div>
<div v-if="item.playTime" class="van-action-sheet__name">{{item.playTime}}</div>
<div v-if="item.adjustPlayTime" class="van-action-sheet__name">{{item.adjustPlayTime}}</div>
<div class="travel-period-list">
<div v-for="(item,index) in selectLineList" :key="item.usId || item.id || index" class="travel-period-card">
<div class="travel-period-title">出行时间 {{index + 1}}</div>
<div class="travel-period-date">
{{moment(item.playStartTime).format('YYYY-MM-DD HH:mm')}}
<span v-if="isValidDate(item.playEndTime)">至 {{moment(item.playEndTime).format('YYYY-MM-DD HH:mm')}}</span>
</div>
<div class="sign_button">
<div>
<van-button @click.stop="onSelect(item)" size="mini" type="info"
style="margin-right: 8px">
点击报名
</van-button>
</div>
<div style="margin-top: 4px">
<van-button @click.stop="openSignUser(item, 'line')" size="mini" type="info"
style="margin-right: 8px">
查看人员
</van-button>
</div>
<div class="travel-period-meta" v-if="item.playTime">{{item.playTime}}</div>
<div class="travel-period-meta" v-if="item.adjustPlayTime">{{item.adjustPlayTime}}</div>
<div class="travel-period-actions">
<van-button @click.stop="openSignUser(item, 'line')" plain type="info">查看人员</van-button>
<van-button @click.stop="onSelect(item)" type="info">点击报名</van-button>
</div>
</div>
</button>
<van-empty v-if="!selectLineList.length" description="暂无可选出行时间"></van-empty>
</div>
</van-action-sheet>
</div>