This commit is contained in:
@jyuhsin
2025-05-30 14:42:07 +08:00
parent 3180d0cb95
commit d828525b30
7 changed files with 103 additions and 61 deletions
@@ -13,10 +13,7 @@ import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.activity.models.ActivityUserScope;
import io.v.nutz.zhgh.therapyRecuperation.constant.TheRapyRecuperationSignUpMode;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationConfig;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLineUnionSelect;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationLot;
import io.v.nutz.zhgh.therapyRecuperation.model.TheRapyRecuperationTravelAgency;
import io.v.nutz.zhgh.therapyRecuperation.model.*;
import io.v.nutz.zhgh.therapyRecuperation.service.TheRapyRecuperationLineUnionSelectService;
import io.v.nutz.web.commons.slog.annotation.SLog;
import lombok.extern.slf4j.Slf4j;
@@ -256,6 +253,13 @@ public class TheRapyRecuperationLineUnionSelectController {
}
}
@At
@POST
@RequiresPermissions(value = {"theRapyRecuperation.lineFghSelect", "theRapyRecuperation.lineXghSelect", "theRapyRecuperation.linePersonalSelect"}, logical = Logical.OR)
public Object selectLineData(@Param("lineId") String lineId) {
return Result.success(dao.fetch(TheRapyRecuperationLine.class, lineId));
}
/**
* 查询某个分工会设置的线路时间信息
*
@@ -219,7 +219,7 @@ public class TheRapyRecuperationEnroll extends BaseModel {
private Boolean hasLocked;
@Column
@ColDefine(type = ColType.INT)
@ColDefine(type = ColType.DOUBLE)
@Comment("报酒店时选择的出行天数")
private Double playDay;
@@ -689,7 +689,8 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl<TheRapyR
//如果是一个,再判断天数
if(currentEnroll.getPlayDay() != null) {
if((currentEnroll.getPlayDay() + lastEnroll.getPlayDay()) != 5) {
return Map.of(false, "您选择的出行天数有误");
Object dayCount = lastEnroll.getPlayDay() % 1 == 0 ? String.valueOf(lastEnroll.getPlayDay().intValue()) : lastEnroll.getPlayDay();
return Map.of(false, "您选择的出行天数有误,上次出行天数为%s天".formatted(dayCount));
}
}
}
@@ -169,16 +169,34 @@ public class TheRapyRecuperationLineUnionSelectServiceImpl extends ViServiceImpl
@Override
public Object selectLineInfo(String lineId, String unionId, Integer mode, Integer year) {
Sql sql;
sql = Sqls.create("""
select
*
us.id,
lineId,
signUpStartTime,
signUpEndTime,
changeEndTime,
playStartTime,
playEndTime,
us.contact,
us.contactPhone,
minimumGroupSize,
trafficTools,
estimatedCost,
estimatedFamilyNumbers,
us.travelAgencyId,
signUpMode,
enable,
ta.travelAgencyName
from
the_rapy_recuperation_line_union_select
the_rapy_recuperation_line_union_select us
left join the_rapy_recuperation_travel_agency ta on ta.id = us.travelAgencyId
where unionId = @unionId
and lineId = @lineId
and signUpMode = @mode
and year(selectTime) = @year
ORDER BY signUpStartTime ASC
and lineId = @lineId
and signUpMode = @mode
and year(selectTime) = @year
ORDER BY signUpStartTime,playStartTime ASC
""");
sql.setParam("unionId", unionId);
sql.setParam("lineId", lineId);
@@ -522,7 +522,7 @@ layout("/layouts/platform.html"){
{label: '年度', prop: 'year', sortable: true},
{label: '目的地名称', prop: 'baseName', sortable: true},
{label: '承担旅行社', prop: 'travelAgencyName', sortable: true},
{label: '标段时间', prop: 'lotId', sortable: true},
//{label: '标段时间', prop: 'lotId', sortable: true},
{label: '联系人', prop: 'baseContactPerson', sortable: true},
{label: '联系人电话', prop: 'baseContactNumber', sortable: true},
{label: '活动时间', prop: 'activityTime', sortable: true},
@@ -258,6 +258,14 @@ 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 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">
@@ -299,16 +307,12 @@ layout("/layouts/platform.html"){
<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="minimumGroupSize">
<el-input-number :max="1000"
:min="config.groupNumber"
:precision="0"
style="width: 100%"
v-model="formData.minimumGroupSize"></el-input-number>
<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-col :span="12">
<el-form-item label="成团人数包括家属" prop="estimatedFamilyNumbers">
<el-input-number :max="1000"
:min="1"
@@ -316,18 +320,9 @@ layout("/layouts/platform.html"){
style="width: 100%"
v-model="formData.estimatedFamilyNumbers"></el-input-number>
</el-form-item>
</el-col>
</el-col>-->
</el-row>
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="预计费用(元/人次)" prop="estimatedCost">
<el-input clearable maxlength="50" v-model="formData.estimatedCost"
placeholder="请输入预计费用"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="时间标段" prop="lotId">
<el-select clearable filterable style="width: 100%"
@@ -341,6 +336,15 @@ 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"
placeholder="请输入预计费用"></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-row :gutter="20">
<el-col :span="12">
@@ -551,15 +555,11 @@ layout("/layouts/platform.html"){
lineName: [{required: true, message: '请输入线路名称', trigger: ['change', 'blur']}],
travelAgencyId: [{required: true, message: '请选择旅行社', trigger: ['change', 'blur']}],
regionalNature: [{required: true, message: '请选择区域性质', trigger: ['change', 'blur']}],
minimumGroupSize: [{required: true, message: '请输入最少参与教工', trigger: ['change', 'blur']}],
minimumGroupSize: [{required: true, message: '请输入最少成团人数', trigger: ['change', 'blur']}],
year: [{required: true, message: '请选择年度', trigger: ['change', 'blur']}],
playNumberOfDays: [{required: true, message: '请输入游玩天数', trigger: ['change', 'blur']}],
//content: [{required: true, message: '请输入线路内容', trigger: ['change', 'blur']}],
signUpStartTime: [{
required: true,
message: '请选择报名开始时间',
trigger: ['change', 'blur']
}],
signUpStartTime: [{required: true, message: '请选择报名开始时间', trigger: ['change', 'blur']}],
signUpEndTime: [{required: true, validator: validateSignUpEndTime, trigger: ['change', 'blur']}],
changeEndTime: [{required: true, validator: validateChangeEndTime, trigger: ['change', 'blur']}],
//files: [{required: true, message: '请上传移动端缩略图', trigger: ['change', 'blur']}],
@@ -569,15 +569,11 @@ layout("/layouts/platform.html"){
playEndTime: [{required: true, validator: validatePlayEndTime, trigger: ['change', 'blur']}],
trafficTools: [{required: false, message: '请输入交通工具', trigger: ['change', 'blur']}],
estimatedCost: [{required: false, message: '请输入预计费用', trigger: ['change', 'blur']}],
estimatedFamilyNumbers: [{
required: false,
message: '请输入成团人数包括家属',
trigger: ['change', 'blur']
}],
estimatedFamilyNumbers: [{required: false, message: '请输入成团人数包括家属', trigger: ['change', 'blur']}],
lotId: [{required: true, message: '请选择标段时间', trigger: ['change', 'blur']}],
openChoose: [{required: true, message: '请选择开放选择', trigger: ['change', 'blur']}],
travelAgencyPlace: [{required: true, message: '请选择开放选择', trigger: ['change', 'blur']}],
travelAgencyPlace: [{required: true, message: '请选择旅行社地点', trigger: ['change', 'blur']}],
groupType: [{required: true, message: '请选择成团类型', trigger: ['change', 'blur']}],
},
viewData: {},
regionalNatureList: [],
@@ -591,7 +587,7 @@ layout("/layouts/platform.html"){
travelAgencyId: null,
travelAgencyPlace: null,
regionalNature: null,
minimumGroupSize: 1,
minimumGroupSize: null,
year: null,
isDisabled: false,
playNumberOfDays: 1,
@@ -611,6 +607,7 @@ layout("/layouts/platform.html"){
lineContact: null,
lineContactPhone: null,
openChoose: false,
groupType: null,
},
pageForm: {
keywords: null,
@@ -635,6 +632,11 @@ layout("/layouts/platform.html"){
}
},
methods: {
groupTypeChange(val) {
if (this.config) {
this.formData.minimumGroupSize = val === 1 ? this.config.conventionalCount : this.config.boutiqueCount
}
},
isShow(roles) {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionAdmin')}" === 'true') {
return true
@@ -664,9 +666,6 @@ layout("/layouts/platform.html"){
if (createMode === 1) {
this.formData.signUpMode = 1
}
if (this.config) {
this.formData.minimumGroupSize = this.config.groupNumber
}
await this.getNumber()
},
async openEdit(id) {
@@ -749,6 +748,7 @@ layout("/layouts/platform.html"){
async initPageData() {
this.regionalNatureList = await getEnumOptions('TheRapyRecuperationProvinceType')
this.signUpModeList = await getEnumOptions('TheRapyRecuperationSignUpMode')
this.signUpModeList = this.signUpModeList.filter(o => o.value !== 1)
this.createModeList = await getEnumOptions('TheRapyRecuperationLineCreateMode')
this.unionOptions = await getUnions(null)
await this.getLotList()
@@ -270,7 +270,7 @@ layout("/layouts/platform.html"){
<el-row class="playPeriod">
<el-descriptions border :column="3" class="playPeriodTable">
<el-descriptions-item>
<!--<el-descriptions-item>
<template slot="label">
<span class="text-danger">*</span>
报名开始时间
@@ -316,7 +316,7 @@ layout("/layouts/platform.html"){
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-descriptions-item>
</el-descriptions-item>-->
<el-descriptions-item>
<template slot="label">
@@ -327,6 +327,7 @@ layout("/layouts/platform.html"){
:rules="{required:true,message:'出行开始时间',trigger:['change','blur']}"
label-width="0">
<el-date-picker style="width: 100%"
placeholder="请选择出行开始时间"
type="datetime"
v-model="row.playStartTime"
value-format="yyyy-MM-dd HH:mm:ss">
@@ -343,6 +344,7 @@ layout("/layouts/platform.html"){
:rules="{required:true,message:'出行结束时间',trigger:['change','blur']}"
label-width="0">
<el-date-picker style="width: 100%"
placeholder="请选择出行结束时间"
type="datetime"
v-model="row.playEndTime"
value-format="yyyy-MM-dd HH:mm:ss">
@@ -376,15 +378,15 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="最少参与教工">
<el-descriptions-item label="最少成团人数">
<template slot="label">
<span class="text-danger">*</span>
最少参与教工
最少成团人数
</template>
<el-form-item :prop="'times.' + $index + '.minimumGroupSize'"
:rules="[
{ required: true, message: '最少参与教工不能为空', trigger: 'blur' },
{ pattern: /^[0-9]*$/, message: '最少参与教工格式不正确', trigger: 'blur' }
{ required: true, message: '最少成团人数不能为空', trigger: 'blur' },
{ pattern: /^[0-9]*$/, message: '最少成团人数格式不正确', trigger: 'blur' }
]"
label-width="0">
<el-input clearable v-model="row.minimumGroupSize"></el-input>
@@ -395,7 +397,7 @@ layout("/layouts/platform.html"){
<el-form-item :prop="'times.' + $index + '.trafficTools'"
:rules="{required:false,message:'交通工具',trigger:['change','blur']}"
label-width="0">
<el-input clearable v-model="row.trafficTools"></el-input>
<el-input clearable v-model="row.trafficTools" placeholder="请输入交通工具"></el-input>
</el-form-item>
</el-descriptions-item>
@@ -408,7 +410,7 @@ layout("/layouts/platform.html"){
</el-descriptions-item>
<el-descriptions-item label="成团人数包括家属">
<!--<el-descriptions-item label="成团人数包括家属">
<template slot="label">
<span class="text-danger">*</span>
成团人数包括家属
@@ -421,7 +423,7 @@ layout("/layouts/platform.html"){
label-width="0">
<el-input clearable v-model="row.estimatedFamilyNumbers" placeholder="请输入成团人数包括家属"></el-input>
</el-form-item>
</el-descriptions-item>
</el-descriptions-item>-->
<el-descriptions-item label="是否开启">
<el-form-item :prop="'times.' + $index + '.enable'"
@@ -469,7 +471,7 @@ layout("/layouts/platform.html"){
<div class="text-right">
<el-button
@click="formData.times.push({enable:true,minimumGroupSize:lineConfig.groupNumber,estimatedCost:lineConfig.cost})"
@click="addRow"
size="mini" type="primary">新增出行时间
</el-button>
</div>
@@ -858,6 +860,7 @@ layout("/layouts/platform.html"){
setGiveLineTimeDialog: false,
selectRow: {},
lineData: {},
}
},
computed: {
@@ -869,6 +872,15 @@ layout("/layouts/platform.html"){
},
},
methods: {
addRow() {
this.formData.times.push({
enable:true,
minimumGroupSize: this.lineData.minimumGroupSize,
estimatedCost: this.lineData.estimatedCost,
contact: this.lineData.lineContact,
contactPhone: this.lineData.lineContactPhone,
})
},
queryJoinUser(val) {
$.post('/platform/theRapyRecuperation/linePersonalSelect/queryJoinUser', {keyWord: val}).then(res => {
if (res.code === 0) {
@@ -950,8 +962,13 @@ layout("/layouts/platform.html"){
this.notifyWarning(resp.msg)
}
},
async getLineInfo(id) {
const resp = await $.post(loc() + '/selectLineData', {lineId: id})
this.lineData = resp.data
},
async openSetLineTime({id, lineName, usUnionId, signUpMode}) {
await this.getLineConfig(id)
await this.getLineInfo(id)
const resp = await $.post(loc() + '/selectLineInfo', {
lineId: id,
unionId: usUnionId,
@@ -970,9 +987,11 @@ layout("/layouts/platform.html"){
this.$set(this.formData, 'times', resp.data)
}else{
this.formData.times.push({
enable:true,
minimumGroupSize:this.lineConfig.groupNumber,
estimatedCost:this.lineConfig.cost,
enable: true,
minimumGroupSize: this.lineData.minimumGroupSize,
estimatedCost: this.lineData.estimatedCost,
contact: this.lineData.lineContact,
contactPhone: this.lineData.lineContactPhone,
signScope: [],
})
}