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