This commit is contained in:
Paidax
2025-06-04 15:27:27 +08:00
parent d046c3be5d
commit 2409b3ddfe
116 changed files with 12202 additions and 1804 deletions
@@ -11,7 +11,7 @@
<link rel="stylesheet" href="${base!}/assets/platform/plugins/element-ui/lib/theme-chalk/index.css">
<link rel="stylesheet" href="${base!}/assets/platform/fonts/themify-icons.css">
<link rel="stylesheet" href="${base!}/assets/platform/fonts/font-awesome.min.css">
<link rel="stylesheet" href="${base!}/assets/platform/css/common.css">
<link rel="stylesheet" href="${base!}/assets/platform/css/common.css?v=1.0.1">
<link rel="stylesheet" href="${base!}/assets/platform/css/main.css">
<link rel="stylesheet" href="${base!}/assets/platform/css/elmain.css?v=1.0.0">
<link rel="stylesheet" href="${base!}/assets/platform/css/panel.css">
@@ -11,7 +11,7 @@
<link rel="stylesheet" href="${base!}/assets/platform/plugins/element-ui/lib/theme-chalk/index.css">
<link rel="stylesheet" href="${base!}/assets/platform/fonts/themify-icons.css">
<link rel="stylesheet" href="${base!}/assets/platform/fonts/font-awesome.min.css">
<link rel="stylesheet" href="${base!}/assets/platform/css/common.css">
<link rel="stylesheet" href="${base!}/assets/platform/css/common.css?v=1.0.0">
<link rel="stylesheet" href="${base!}/assets/platform/css/main.css">
<link rel="stylesheet" href="${base!}/assets/platform/css/elmain.css">
<link rel="stylesheet" href="${base!}/assets/platform/css/panel.css">
@@ -236,6 +236,7 @@ layout("/mobile/platform.html"){
this.id = item.id
this.formData.username = this.user.username
this.formData.auditTime = moment().format('YYYY-MM-DD')
this.formData.unionName = null
this.infoShow = true
this.showApprovalForm = true
this.$nextTick(() => {
@@ -257,17 +257,28 @@ layout("/mobile/platform.html"){
confirmButtonText: "确定",
cancelButtonText: "取消"
}).then(async () => {
const formData = this.formData
if (this.formData.families) {
formData.families = JSON.stringify(this.formData.families)
const formData = JSON.parse(JSON.stringify(this.formData))
if (formData.families) {
formData.families = JSON.stringify(formData.families)
}
const resp = await $.post('/platform/member/apply/submit/doSave', formData)
if (resp.code === 0) {
this.$toast.success('操作成功')
this.user.member = true
pjaxReplace('/platform/member/apply/mine/h5')
vant.Dialog.alert({
title: '温馨提示',
message: '您已成功【保存】申请,请耐心等待相关负责人审核',
}).then(() => {
this.user.member = true
pjaxReplace('/platform/member/apply/mine/h5')
});
// this.$toast.success('操作成功')
// this.user.member = true
// pjaxReplace('/platform/member/apply/mine/h5')
} else {
this.$toast.fail(resp.msg)
vant.Dialog.alert({
title: '温馨提示',
message: resp.msg,
})
// this.$toast.fail(resp.msg)
}
})
},
@@ -288,17 +299,24 @@ layout("/mobile/platform.html"){
confirmButtonText: "确定",
cancelButtonText: "取消"
}).then(async () => {
const formData = this.formData
if (this.formData.families) {
formData.families = JSON.stringify(this.formData.families)
const formData = JSON.parse(JSON.stringify(this.formData))
if (formData.families) {
formData.families = JSON.stringify(formData.families)
}
const resp = await $.post('/platform/member/apply/submit/doSubmit', formData)
if (resp.code === 0) {
this.$toast.success('操作成功')
this.user.member = true
pjaxReplace('/platform/member/apply/mine/h5')
vant.Dialog.alert({
title: '温馨提示',
message: '您已成功【提交】申请,请耐心等待相关负责人审核',
}).then(() => {
this.user.member = true
pjaxReplace('/platform/member/apply/mine/h5')
});
} else {
this.$toast.fail(resp.msg)
vant.Dialog.alert({
title: '温馨提示',
message: resp.msg,
})
}
})
},
@@ -13,6 +13,9 @@
<link rel="stylesheet" href="${base!}/assets/mobile/css/theme.css">
<link rel="stylesheet" href="${base!}/assets/mobile/css/main.css">
<link rel="stylesheet" href="${base!}/assets/mobile/css/pdfh5.css">
<link rel="stylesheet" href="${base!}/assets/platform/plugins/vant/vant.css?v=1.0.1">
<script>
@@ -56,6 +59,11 @@
<script type="text/javascript"
src="https://webapi.amap.com/maps?v=2.0&key=57f0d098ba1b881ecc436c4cfd23bbbf&plugin=AMap.PolyEditor,AMap.Geolocation"></script>
<!-- pdf -->
<script src="${base!}/assets/mobile/js/pdf/pdf.js" type="text/javascript" charset="utf-8"></script>
<script src="${base!}/assets/mobile/js/pdf/pdf.worker.js" type="text/javascript" charset="utf-8"></script>
<script src="${base!}/assets/mobile/js/pdf/pdfh5.js" type="text/javascript" charset="utf-8"></script>
<!--字典混入-->
<script src="${base!}/components/plugins/sysDict/DictData.js"></script>
@@ -370,7 +370,6 @@ layout("/mobile/platform.html"){
}
} else if (v.itx === 2) {
if (v.rval) {
debugger
formData.push({
"rwid": v.wors[0].wid,
"rval": v.rval,
@@ -17,7 +17,9 @@ layout("/mobile/platform.html"){
.content {
line-height: 26px;
padding: 0px 20px 56px 20px;
padding: 0 20px 56px 20px;
max-height: calc(100vh - 46px - 210px - 60px - 24px);
overflow-y: auto;
}
.title {
@@ -159,9 +161,9 @@ layout("/mobile/platform.html"){
color: grey;
}
.header div span {
color: grey;
}
/*.header div span {*/
/* color: grey;*/
/*}*/
.header :last-child {
font-size: 14px;
@@ -195,6 +197,11 @@ layout("/mobile/platform.html"){
background-color: white;
}
.pdf_div {
padding-bottom: 70px;
height: calc(100vh - 46px - 170px - 60px - 24px);
}
</style>
<div id="app" v-cloak>
@@ -235,8 +242,11 @@ layout("/mobile/platform.html"){
</div>
</div>
<van-divider></van-divider>
<div v-if="baseData.content" v-html="baseData.content" class="content"></div>
<div v-else v-html="configData.notice" class="content"></div>
<!-- <div v-if="baseData.content" v-html="baseData.content" class="content"></div>-->
<!-- <div v-else v-html="configData.notice" class="content"></div>-->
<van-divider :style="{ color: 'orange', fontSize: '12px' }">上下滑动翻页,单击查看图片,再单击返回</van-divider>
<div v-if="isPdf" v-html="baseData.content" class="content"></div>
<div v-else id="demo" class="pdf_div"></div>
<!--<van-empty
v-else class="custom-image"
image="https://img01.yzcdn.cn/vant/custom-empty-image.png"
@@ -254,11 +264,13 @@ layout("/mobile/platform.html"){
<div class="footer" v-if="fromUrlByMy != 'edit'">
<template v-if="baseData.isNormal==0&&baseData.isNormalFalse>0">
<van-button @click="join"
class="join">我要报名
class="join">
{{ (fromUrlByMy == 'editDo') ? '修改报名' : '我要报名' }}
</van-button>
</template>
<template v-else>
<van-button v-if="moment().unix() <= moment(baseData.signUpEndTime).unix()" @click="join" class="join">我要报名
<van-button v-if="moment().unix() <= moment(baseData.signUpEndTime).unix()" @click="join" class="join">
{{ (fromUrlByMy == 'editDo') ? '修改报名' : '我要报名' }}
</van-button>
<van-button v-if="moment().unix() > moment(baseData.signUpEndTime).unix()" class="join">报名结束</van-button>
</template>
@@ -280,8 +292,8 @@ 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 }]"
placeholder="请填写身份证号" v-model="formData.idCard"></van-field>
<van-field label="身份证" name="idCard" :rules="[{ required: true }]"
placeholder="请填写身份证号、护照、台胞证等" v-model="formData.idCard"></van-field>
<van-field label="手机号" name="mobile" :rules="[{ required: true }]"
placeholder="请填写手机号" v-model="formData.mobile"></van-field>
<van-field label="所属工会" readonly v-model="formData.unionName"></van-field>
@@ -293,13 +305,24 @@ layout("/mobile/platform.html"){
<div class="van-doc-card" style="margin-bottom: 16px">
<div></div>
<div class="van-card-header">
床位信息
房间信息
</div>
<div class="van-card-body">
<van-field @click="self = true; roomVisible = true" readonly is-link label="房" name="bedType"
<van-field :rules="[{ required: true, message: '请选择是否包房' }]" label="是否包房" name="bedType">
<template #input>
<van-radio-group direction="horizontal" v-model="formData.bedInfo.bedType">
<van-radio name="包房" shape="square">包房</van-radio>
<van-radio name="不包房" shape="square">不包房</van-radio>
</van-radio-group>
</template>
</van-field>
<div>
<span style="color: red;margin-left: 14px;font-size: 14px">包房需自费;不包房两位老师一间且随机分配</span>
</div>
<!--<van-field @click="self = true; roomVisible = true" readonly is-link label="房间" name="bedType"
placeholder="请选择房间" v-model="formData.bedInfo.bedType"
:rules="[{ required: true }]"></van-field>
<van-field v-if="formData.bedInfo.bedType == '标准间'" @click="self = true; bedVisible = true"
:rules="[{ required: true }]"></van-field>-->
<!--<van-field v-if="formData.bedInfo.bedType == '标准间'" @click="self = true; bedVisible = true"
readonly is-link label="床位"
name="bedNum" placeholder="请选择床位" v-model="formData.bedInfo.bedNum"
:rules="[{ required: true }]"></van-field>
@@ -315,12 +338,12 @@ layout("/mobile/platform.html"){
<van-field v-if="formData.bedInfo.bedType == '标准间' && formData.bedInfo.isSleepTogether == true"
label="意向拼房人" name="otherSleepUser" placeholder="多个拼房人请用,隔开"
v-model="formData.bedInfo.otherSleepUser"
:rules="[{ required: true }]"></van-field>
:rules="[{ required: true }]"></van-field>-->
</div>
</div>
<!--随行人信息-->
<div class="van-doc-card" style="margin-bottom: 16px">
<div v-if="index != 2" class="van-doc-card" style="margin-bottom: 16px">
<div></div>
<div class="van-card-header"
style="display: flex; justify-content: space-between; align-items: center">
@@ -330,62 +353,73 @@ layout("/mobile/platform.html"){
<van-tag @click="addCompanion" size="large" type="primary" color="#1867b0">添加随行人</van-tag>
</div>
</div>
<div v-if="formData.companionList.length > 0" class="van-card-body">
<van-tabs v-model="active" type="card" color="#0e78c5" animated>
<van-tab v-for="item, index in formData.companionList" :title="'随行人' + (index + 1)">
<van-field label="姓名" name="userName" placeholder="请填写姓名" v-model="item.userName"
:rules="[{ required: true }]"></van-field>
<!--<van-field label="工号" name="loginName" placeholder="若没有工号,请忽略此项" v-model="item.loginName"></van-field>-->
<van-field label="年龄" name="age" placeholder="请填写年龄" v-model="item.age"
type="digit" :rules="[{ required: true }]"></van-field>
<van-field :rules="[{ required: true, message: '请选择性别' }]" label="性别" name="validator">
<template #input>
<van-radio-group direction="horizontal" v-model="item.sex">
<van-radio name="男" shape="square"></van-radio>
<van-radio name="女" shape="square"></van-radio>
</van-radio-group>
</template>
</van-field>
<van-field label="身份证号" name="idCard" placeholder="请填写身份证号"
:rules="[{ required: true }]" type="digit"
v-model="item.idCard"></van-field>
<van-field label="手机号" name="mobile" placeholder="请填写手机号"
:rules="[{ required: true }]" type="digit"
v-model="item.mobile"></van-field>
<van-field @click="companionVisible = true" readonly is-link label="与本人关系"
name="relation"
placeholder="随行人与本人关系" v-model="item.relation"
:rules="[{ required: true }]"></van-field>
<van-field @click="self = false; roomVisible = true" readonly is-link label="房间"
name="bedType" placeholder="请选择房间"
v-model="item.bedInfo.bedType"></van-field>
<div style="font-size: 8px; color:orangered; padding-left: 16px; padding-bottom: 4px">
提醒:如果跟报名人员同一房间,无须选择!
</div>
<van-field v-if="item.bedInfo.bedType == '标准间'" @click="self = false; bedVisible = true"
readonly is-link label="床位"
name="bedNum" placeholder="请选择床位" v-model="item.bedInfo.bedNum"></van-field>
<van-field v-if="item.bedInfo.bedType == '标准间'"
:rules="[{ validator, message: '请选择是否拼房' }]" label="是否拼房">
<template #input>
<van-radio-group direction="horizontal" v-model="item.bedInfo.isSleepTogether">
<van-radio :name="true" shape="square"></van-radio>
<van-radio :name="false" shape="square"></van-radio>
</van-radio-group>
</template>
</van-field>
<van-field v-if="item.bedInfo.bedType == '标准间' && item.bedInfo.isSleepTogether == true"
label="意向拼房人" name="otherSleepUser" placeholder="多个拼房人请用,隔开"
v-model="item.bedInfo.otherSleepUser"></van-field>
</van-tab>
</van-tabs>
</div>
<div v-if="formData.companionList.length == 0" class="companionList_empty_text">
<template v-if="configData.familyInfo === 2">
<div>
<span style="color: red;margin-left: 20px;font-size: 14px">限填写3岁以上70岁以下随行人</span>
</div>
<div v-if="formData.companionList.length > 0" class="van-card-body">
<van-tabs v-model="active" type="card" color="#0e78c5" animated>
<van-tab v-for="item, index in formData.companionList" :title="'随行人' + (index + 1)">
<van-field label="姓名" name="userName" placeholder="请填写姓名" v-model="item.userName"
:rules="[{ required: true }]"></van-field>
<!--<van-field label="工号" name="loginName" placeholder="若没有工号,请忽略此项" v-model="item.loginName"></van-field>-->
<van-field label="年龄" name="age" placeholder="请填写年龄" v-model="item.age"
type="digit" :rules="[{ required: true }]"></van-field>
<van-field :rules="[{ required: true, message: '请选择性别' }]" label="性别" name="validator">
<template #input>
<van-radio-group direction="horizontal" v-model="item.sex">
<van-radio name="男" shape="square"></van-radio>
<van-radio name="女" shape="square"></van-radio>
</van-radio-group>
</template>
</van-field>
<van-field label="身份证件" name="idCard" placeholder="请填写身份证号"
:rules="[{ required: true }]" maxlength="18"
@input="getAgeAndSex(item)" v-model="item.idCard"></van-field>
<van-field label="手机号" name="mobile" placeholder="请填写手机号"
:rules="[{ required: true }]" type="digit"
v-model="item.mobile"></van-field>
<van-field @click="companionVisible = true" readonly is-link label="与本人关系"
name="relation"
placeholder="随行人与本人关系" v-model="item.relation"
:rules="[{ required: true }]"></van-field>
<!--<van-field @click="self = false; roomVisible = true" readonly is-link label="房间"
name="bedType" placeholder="请选择房间"
v-model="item.bedInfo.bedType"></van-field>
<div style="font-size: 8px; color:orangered; padding-left: 16px; padding-bottom: 4px">
提醒:如果跟报名人员同一房间,无须选择!
</div>
<van-field v-if="item.bedInfo.bedType == '标准间'" @click="self = false; bedVisible = true"
readonly is-link label="床位"
name="bedNum" placeholder="请选择床位" v-model="item.bedInfo.bedNum"></van-field>
<van-field v-if="item.bedInfo.bedType == '标准间'"
:rules="[{ validator, message: '请选择是否拼房' }]" label="是否拼房">
<template #input>
<van-radio-group direction="horizontal" v-model="item.bedInfo.isSleepTogether">
<van-radio :name="true" shape="square">是</van-radio>
<van-radio :name="false" shape="square">否</van-radio>
</van-radio-group>
</template>
</van-field>
<van-field v-if="item.bedInfo.bedType == '标准间' && item.bedInfo.isSleepTogether == true"
label="意向拼房人" name="otherSleepUser" placeholder="多个拼房人请用,隔开"
v-model="item.bedInfo.otherSleepUser"></van-field>-->
</van-tab>
</van-tabs>
</div>
<div v-if="formData.companionList.length == 0" class="companionList_empty_text">
<span>
如有随行人出行,请添加随行人
</span>
</div>
</div>
</template>
<template v-else>
<van-field label="家属数量" name="familyNumber" placeholder="请填写家属数量" v-model="formData.familyNumber"
type="digit" :rules="[{ required: true }]"></van-field>
</template>
</div>
<div class="submitButton">
@@ -401,7 +435,7 @@ layout("/mobile/platform.html"){
<!--房间类型弹出框-->
<van-popup position="bottom" round v-model="roomVisible">
<van-picker
title="入住房间" show-toolbar
title="房间信息" show-toolbar
:columns="roomColumns"
@confirm="roomConfirm"
@cancel="roomCancel">
@@ -436,16 +470,17 @@ layout("/mobile/platform.html"){
if (r != null) return decodeURI(r[2]);
return null;
}
let pdfh5 = null
const vue = new Vue({
el: '#app',
mixins: [mobileMixins],
data() {
return {
isPdf: false,
active: 0,
roomColumns: ['大床房', '标准间'],
roomColumns: ['房', '默认房间'],
bedColumns: ['1', '2'],
companionColumns: ['亲属', '朋友'],
companionColumns: ['配偶', '子女', '亲属', '其他'],
bedVisible: false,
roomVisible: false,
companionVisible: false,
@@ -475,6 +510,18 @@ layout("/mobile/platform.html"){
}
},
methods: {
getAgeAndSex(item){
try {
const value = item.idCard
const age = this.calculateAgeFromIdCard(value)
this.$set(item, "age", age)
const sex = this.getGenderFromIdCard(value)
this.$set(item, "sex", sex)
} catch (error) {
console.log(error)
}
},
roomCancel() {
if (!this.self) {
this.formData.companionList[this.active].bedInfo.bedType = ''
@@ -501,18 +548,43 @@ layout("/mobile/platform.html"){
return value != null
},
async joinSubmit() {
const toast = vant.Toast.loading({
duration: 0,
forbidClick: true,
overlay: true,
message: '努力提交中',
})
const cloneData = clone(this.formData)
cloneData.companionList.forEach((item, index) => {
if (item.userName === '') {
cloneData.companionList.splice(index, 1)
}
})
if (cloneData.companionList) {
for (let i = 0; i < cloneData.companionList.length; i++) {
const companion = cloneData.companionList[i];
// 检查每个字段是否为空
if (!companion.userName || !companion.idCard || !companion.mobile || !companion.relation) {
this.$toast('请填写完整随行人信息')
return
}
// 填了身份证,校验是否正确
if (companion.idCard) {
if (!this.validateIdCard(companion.idCard)) {
this.$toast('随行人'+ (i+1) +'的身份证不正确')
return
} else {
// 判断companion.age,是不是在3到70岁之间,不是就提示
if (companion.age < 3 || companion.age > 70) {
this.$toast('随行人'+ (i+1) +'的年龄超出限制,请天添加其他联系人')
return
}
}
}
}
}
const toast = vant.Toast.loading({
duration: 0,
forbidClick: true,
overlay: true,
message: '努力提交中',
})
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/doSignUpForBaseManagement', {
enroll: JSON.stringify(cloneData),
})
@@ -547,7 +619,10 @@ layout("/mobile/platform.html"){
}),
})
if (re.code !== 0) {
vant.Toast(re.msg)
vant.Dialog.alert({
title: '温馨提示',
message: re.msg,
})
return
}
if (this.fromUrlByMy !== 'editDo') {
@@ -615,6 +690,105 @@ layout("/mobile/platform.html"){
const resp = await $.get('/platform/theRapyRecuperation/TheRapyConfig/findOne')
this.configData = resp.data
},
calculateAgeFromIdCard(idCard) {
// 检查身份证号码是否合法
if (!idCard) {
throw new Error("Invalid ID card format")
}
let birthDateStr
let birthYear, birthMonth, birthDay
// 处理18位身份证号码
if (idCard.length === 18) {
birthDateStr = idCard.substring(6, 14)
birthYear = parseInt(birthDateStr.substring(0, 4), 10)
birthMonth = parseInt(birthDateStr.substring(4, 6), 10) - 1 // 月份从0开始
birthDay = parseInt(birthDateStr.substring(6, 8), 10)
}
// 处理15位身份证号码
else if (idCard.length === 15) {
birthDateStr = idCard.substring(6, 12)
birthYear = parseInt("19" + birthDateStr.substring(0, 2), 10) // 使用字符串拼接
birthMonth = parseInt(birthDateStr.substring(2, 4), 10) - 1 // 月份从0开始
birthDay = parseInt(birthDateStr.substring(4, 6), 10)
} else {
throw new Error("Invalid ID card format. Only 15 or 18 digits are supported.")
}
// 获取当前日期
const currentDate = new Date()
// 计算年龄
let age = currentDate.getFullYear() - birthYear
// 如果当前日期还没过生日,则年龄减1
if (currentDate.getMonth() < birthMonth || (currentDate.getMonth() === birthMonth && currentDate.getDate() < birthDay)) {
age -= 1
}
return age
},
getGenderFromIdCard(idCard) {
// 检查身份证号码是否合法
if (!idCard) {
throw new Error("Invalid ID card format")
}
let genderDigit
// 处理18位身份证号码
if (idCard.length === 18) {
genderDigit = parseInt(idCard.charAt(16), 10) // 第17位
}
// 处理15位身份证号码
else if (idCard.length === 15) {
genderDigit = parseInt(idCard.charAt(14), 10) // 第15位
} else {
throw new Error("Invalid ID card format. Only 15 or 18 digits are supported.")
}
// 判断性别
if (genderDigit % 2 === 0) {
return "女"
} else {
return "男"
}
},
validateIdCard(idCard) {
if (!idCard) {
return false
}
// 18位身份证号码校验
if (idCard.length === 18) {
const idCardRegex = /^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}(\d|[Xx])$/
if (!idCardRegex.test(idCard)) {
return false
}
// 校验码计算
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
const checksums = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]
let sum = 0
for (let i = 0; i < 17; i++) {
sum += idCard[i] * weights[i]
}
const checksum = checksums[sum % 11]
return checksum === idCard[17].toUpperCase()
}
// 15位身份证号码校验
else if (idCard.length === 15) {
const idCardRegex = /^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/
return idCardRegex.test(idCard)
}
// 外国人或其他情况
else {
return false
}
},
},
async created() {
this.id = getQueryString('id') ? getQueryString('id') : ''
@@ -626,7 +800,58 @@ layout("/mobile/platform.html"){
if (this.enrollId) {
await this.findSignUpInfoById()
}
this.getData()
await this.getData()
try {
const parser = new DOMParser();
const doc = parser.parseFromString(this.baseData.content, 'text/html');
console.log(this.baseData)
const link = doc.querySelector('a');
const href = link.getAttribute('href');
this.$nextTick(() => {
pdfh5 = new Pdfh5('#demo', {
pdfurl: href,
});
})
}catch (e) {
this.isPdf = true
document.addEventListener('click', function (event) {
// 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG' && event.target.className !== 'top_icon') {
vant.ImagePreview({
images: [event.target.src],
closeable: true,
})
}
})
}
this.$nextTick(() => {
pdfh5.on("complete", function () {
const imgDoc = document.querySelectorAll('img')
let array = []
let classArray = []
imgDoc.forEach(o => {
if(o.getAttribute('class') !== 'top_icon') {
classArray.push(o.getAttribute('class'))
array.push(o.getAttribute('src'))
}
})
document.addEventListener('click', function (event) {
// 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG' && event.target.className !== 'top_icon') {
const index = classArray.indexOf(event.target.className)
if(index !== -1) {
vant.ImagePreview({
images: array,
startPosition: index,
closeable: true,
})
}
}
})
})
})
},
mounted() {
window.addEventListener('scroll', this.scrollToTop)
@@ -29,23 +29,28 @@ layout("/mobile/platform.html"){
.pre_text {
white-space: break-spaces;
padding-left: 7px;
max-height: calc(80vh - 290px);
overflow-y: auto;
}
.pdfjs {
height: 90%;
}
</style>
<div id="app" v-cloak>
<van-sticky>
<van-nav-bar @click-left="history.back()" fixed left-arrow placeholder title="职工疗休养"></van-nav-bar>
<van-nav-bar @click-left="pjaxReplace('/mobile/index')" fixed left-arrow placeholder title="职工疗休养"></van-nav-bar>
</van-sticky>
<!--顶部轮播图-->
<van-swipe class="my-swipe" :autoplay="3000" indicator-color="white">
<van-swipe class="my-swipe" style="height: 20vh" :autoplay="3000" indicator-color="white">
<van-swipe-item>
<van-image width="100%" height="180" src="/assets/mobile/img/therapyRecuperation/index1.jpg"></van-image>
<van-image width="100%" height="180" src="/assets/mobile/img/therapyRecuperation/index1.jpeg"></van-image>
</van-swipe-item>
<van-swipe-item>
<van-image height="180" src="/assets/mobile/img/therapyRecuperation/index2.jpg"></van-image>
<van-image height="180" src="/assets/mobile/img/therapyRecuperation/index1.jpeg"></van-image>
</van-swipe-item>
</van-swipe>
@@ -60,35 +65,36 @@ layout("/mobile/platform.html"){
</div>
<!--疗休养描述-->
<div class="van-doc-card" style="margin-top: 20px;margin-bottom: 60px">
<div class="van-doc-card" style="margin-top: 10px; height: calc(80vh - 245px)">
<van-image width="190" height="43" src="/assets/mobile/img/therapyRecuperation/title.png"></van-image>
<div class="pre_text" v-html="configData.notice"></div>
<div v-if="isPdf" class="pre_text" v-html="configData.notice"></div>
<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="manager-o" replace url="/platform/mobile/theRapyRecuperation/myRecuperation">我的疗休养
</van-tabbar-item>
<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
const vue = new Vue({
el: '#app',
mixins: [mobileMixins],
data() {
return {
tarBarActive: 0,
chooseButton: [],
configData: {},
tarBarActive: 0,
isPdf: false,
}
},
methods: {
async toLineList(index) {
const isExist = await getScopeUser(this.configData.activityGroupId)
/*const isExist = await getScopeUser(this.configData.activityGroupId)
if (!isExist) {
vant.Dialog.alert({
title: '温馨提示',
@@ -96,7 +102,7 @@ layout("/mobile/platform.html"){
confirmButtonColor: '#1867b0'
})
return
}
}*/
localStorage.setItem("clickIndex", JSON.stringify({clickIndex: index}))
location.href = '/platform/mobile/theRapyRecuperation/mobileLineListPage'
},
@@ -107,8 +113,58 @@ layout("/mobile/platform.html"){
},
async created() {
this.chooseButton = await getEnumOptions('TheRapyRecuperationType')
this.chooseButton = this.chooseButton.filter(o => o.value !== 2 && o.value !== 3)
this.chooseButton = this.chooseButton.filter(o => o.value !== 2)
await this.getConfigData()
try {
const parser = new DOMParser();
const doc = parser.parseFromString(this.configData.notice, 'text/html');
const link = doc.querySelector('a');
const href = link.getAttribute('href');
this.$nextTick(() => {
pdfh5 = new Pdfh5('#demo', {
pdfurl: href,
});
})
}catch (e) {
this.isPdf = true
document.addEventListener('click', function (event) {
// 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG' && !['van-image__img', 'top_icon'].includes(event.target.className)) {
vant.ImagePreview({
images: [event.target.src],
closeable: true,
})
}
})
}
this.$nextTick(() => {
pdfh5.on("complete", function () {
const imgDoc = document.querySelectorAll('img')
let array = []
let classArray = []
imgDoc.forEach(o => {
if(!['van-image__img', 'top_icon'].includes(o.getAttribute('class'))) {
classArray.push(o.getAttribute('class'))
array.push(o.getAttribute('src'))
}
})
document.addEventListener('click', function (event) {
// 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG' && !['van-image__img', 'top_icon'].includes(event.target.className)) {
const index = classArray.indexOf(event.target.className)
if(index !== -1) {
vant.ImagePreview({
images: array,
startPosition: index,
closeable: true,
})
}
}
})
})
})
}
})
</script>
@@ -3,6 +3,10 @@ layout("/mobile/platform.html"){
#-->
<style>
#app {
font-family: ,serif;
}
.container img {
background-size: contain;
width: 100%;
@@ -11,13 +15,25 @@ layout("/mobile/platform.html"){
display: block;
}
.backTop {
display: none !important;
}
.header {
padding: 20px;
padding: 10px 10px 10px 10px;
}
.content {
line-height: 26px;
padding: 0px 20px 56px 20px;
padding: 0 10px 56px 10px;
max-height: calc(100vh - 46px - 210px - 60px - 24px);
overflow-y: auto;
}
.pdf_div {
padding-bottom: 70px;
/*height: 800px;*/
height: calc(100vh - 46px - 210px - 60px - 24px);
}
.title {
@@ -195,87 +211,138 @@ layout("/mobile/platform.html"){
background-color: white;
}
.van-tag {
color: white !important;
}
table {
width: 100%
}
</style>
<div id="app" v-cloak>
<van-sticky>
<van-nav-bar @click-left="history.go(-1)" fixed left-arrow placeholder title="职工疗休养-线路介绍"></van-nav-bar>
<van-nav-bar @click-left="history.go(-1)" fixed left-arrow placeholder
title="职工疗休养-线路介绍"></van-nav-bar>
</van-sticky>
<!--线路详情-->
<van-skeleton title :loading="skeLoading" :row="12">
<div class="container">
<div class="header">
<div class="title">
<van-tag size="large" color="#1867b0" style="color: white;position: relative; top: -2px">
{{lineData.lotName}}
</van-tag>
{{lineData.lineName}}
</div>
<div style="margin-top: 10px">
<div>
<span class="line_label">成团人数:</span>
{{lineData.minimumGroupSize ? lineData.minimumGroupSize : 0}}人(最少)
<template v-if="isLoad">
<!--线路详情-->
<van-skeleton title :loading="skeLoading" :row="12">
<div class="container">
<div class="header">
<div class="title">
<van-tag size="large" color="#1867b0" style="position: relative; top: -2px">
{{lineData.lotName}}
</van-tag>
{{lineData.lineName}}
</div>
<div>
<span>当前报名:</span>
{{lineData.signUpUserNum + lineData.signUpUserFamilyNum + '(家属' + lineData.signUpUserFamilyNum +
'人)'}}
</div>
<div>
<span>报名时间:</span>
{{moment(lineData.signUpStartTime).format('YYYY-MM-DD HH:mm') + ' ~ ' +
moment(lineData.signUpEndTime).format('YYYY-MM-DD HH:mm')}}
</div>
<div>
<span>出行时间</span>
{{moment(lineData.playStartTime).format('YYYY-MM-DD HH:mm') + ' ~ ' +
moment(lineData.playEndTime).format('YYYY-MM-DD HH:mm')}}
</div>
<div>
<span>&ensp;&ensp;社:</span>
{{lineData.travelAgencyName}}
</div>
<div>
<span>联系方式:</span>
{{lineData.contactMobileNumber}}
<div style="margin-top: 10px">
<div v-if="lineData.regionalNature == '省内'">
<div>
<span class="line_label">预计费用:</span>
<label>{{lineData.estimatedCost}}元</label>
</div>
<div v-if="configData.familyInfo == 2">
<!--<span>当前报名:</span>
{{lineData.signUpUserNum + lineData.signUpUserFamilyNum + '(家属' + lineData.signUpUserFamilyNum
+
'人)'}}-->
<span>当前报名</span>
{{lineData.signUpUserNum + lineData.signUpUserFamilyNum + '人'}}
</div>
<div v-else>
<span>当前报名:</span>
<!--{{lineData.signUpUserNum + lineData.familyNumber + '(家属' + lineData.familyNumber
+
'人)'}}-->
{{lineData.signUpUserNum + lineData.familyNumber + '人'}}
</div>
<!--<div>
<span class="line_label">成团人数包括家属:</span>
<label v-if="lineData.estimatedFamilyNumbers">{{lineData.estimatedFamilyNumbers}}人</label>
<label v-else>不限制</label>
</div>-->
</div>
<div v-else>
<div>
<span class="line_label">预计费用:</span>
<label>{{lineData.estimatedCost}}元</label>
</div>
<div v-if="configData.familyInfo == 2">
<span>当前报名:</span>
<!--{{lineData.signUpUserNum + '(家属' + lineData.signUpUserFamilyNum
+
'人)'}}-->
{{lineData.signUpUserNum + '人'}}
</div>
<div v-else>
<span>当前报名:</span>
<!--{{lineData.signUpUserNum + '(家属' + lineData.familyNumber
+
'人)'}}-->
{{lineData.signUpUserNum + '人'}}
</div>
</div>
<div>
<span>报名时间:</span>
{{moment(lineData.signUpStartTime).format('YYYY-MM-DD HH:mm') + ' ~ ' +
moment(lineData.signUpEndTime).format('YYYY-MM-DD HH:mm')}}
</div>
<div>
<span>出行时间:</span>
{{moment(lineData.playStartTime).format('YYYY-MM-DD HH:mm') + ' ~ ' +
moment(lineData.playEndTime).format('YYYY-MM-DD HH:mm')}}
</div>
<div>
<span>&ensp;&ensp;社:</span>
{{lineData.travelAgencyName}}
</div>
<div>
<span>联系方式:</span>
{{lineData.contactMobileNumber}}
</div>
<!--<div>
<span class="line_label">最少成团人数(包括家属):</span>
<label>{{configData.outsideQuota}}人</label>
</div>-->
</div>
</div>
<van-divider :style="{ color: 'orange', fontSize: '12px' }">上下滑动翻页,单击查看图片,再单击返回</van-divider>
<!--<div v-if="lineData.content" v-html="lineData.content" class="content"></div>
<div v-else v-html="configData.notice" class="content"></div>-->
<div v-if="isPdf" v-html="lineData.content" class="content"></div>
<div v-else id="demo" class="pdf_div"></div>
<!--<van-empty
v-else class="custom-image"
image="https://img01.yzcdn.cn/vant/custom-empty-image.png"
description="暂无详细信息"
></van-empty>-->
</div>
<van-divider></van-divider>
<div v-if="lineData.content" v-html="lineData.content" class="content"></div>
<div v-else v-html="configData.notice" class="content"></div>
<!--<van-empty
v-else class="custom-image"
image="https://img01.yzcdn.cn/vant/custom-empty-image.png"
description="暂无详细信息"
></van-empty>-->
</div>
</van-skeleton>
</van-skeleton>
<!--置顶图标-->
<image v-if="btnFlag" @click="backTop" src="/assets/mobile/svg/therapyRecuperation/top.svg"
class="top_icon"></image>
<!--置顶图标-->
<image v-if="btnFlag" @click="backTop" src="/assets/mobile/svg/therapyRecuperation/top.svg"
class="top_icon"></image>
<!--底部报名按钮-->
<div class="footer" v-if="fromUrlByMy != 'edit'">
<template v-if="lineData.isNormal==0&&lineData.isNormalFalse>0">
<van-button @click="join"
class="join">我要报名
</van-button>
</template>
<template v-else>
<!--底部报名按钮-->
<div class="footer" v-if="fromUrlByMy != 'edit'">
<van-button v-if="moment().unix() <= moment(lineData.signUpEndTime).unix()" @click="join"
class="join">我要报名
class="join">{{ enrollId ? '修改报名' : '我要报名' }}
</van-button>
<van-button v-if="moment().unix() > moment(lineData.signUpEndTime).unix()" class="join">报名结束</van-button>
</template>
<van-button v-if="moment().unix() > moment(lineData.signUpEndTime).unix()" class="join">报名结束
</van-button>
</div>
</template>
</div>
<!--报名弹出框-->
<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-nav-bar @click-left="signType == '2' ? history.go(-1) : joinPopup = false" fixed left-arrow placeholder title="疗休养报名"></van-nav-bar>
<div class="join_content">
<van-form @submit="joinSubmit">
@@ -289,26 +356,37 @@ 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 }]"
placeholder="请填写身份证号" v-model="formData.idCard"></van-field>
<van-field label="身份证" name="idCard" :rules="[{ required: true }]"
placeholder="请填写身份证号、护照、台胞证等" v-model="formData.idCard"></van-field>
<van-field 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="signType != '2'" label="报名线路" readonly v-model="formData.lineName"></van-field>
</div>
</div>
<!--床位信息-->
<div class="van-doc-card" style="margin-bottom: 16px">
<div v-if="configData.bedInfo === true" class="van-doc-card" style="margin-bottom: 16px">
<div></div>
<div class="van-card-header">
床位信息
房间信息
</div>
<div class="van-card-body">
<van-field @click="self = true; roomVisible = true" readonly is-link label="房" name="bedType"
<van-field :rules="[{ required: true, message: '请选择是否包房' }]" label="是否包房" name="bedType">
<template #input>
<van-radio-group direction="horizontal" v-model="formData.bedInfo.bedType">
<van-radio name="包房" shape="square">包房</van-radio>
<van-radio name="不包房" shape="square">不包房</van-radio>
</van-radio-group>
</template>
</van-field>
<div>
<span style="color: red;margin-left: 14px;font-size: 14px">包房需自费;不包房两位老师一间且随机分配</span>
</div>
<!--<van-field @click="self = true; roomVisible = true" readonly is-link label="房间" name="bedType"
placeholder="请选择房间" v-model="formData.bedInfo.bedType"
:rules="[{ required: true }]"></van-field>
<van-field v-if="formData.bedInfo.bedType == '标准间'" @click="self = true; bedVisible = true"
:rules="[{ required: true }]"></van-field>-->
<!--<van-field v-if="formData.bedInfo.bedType == '标准间'" @click="self = true; bedVisible = true"
readonly is-link label="床位"
name="bedNum" placeholder="请选择床位" v-model="formData.bedInfo.bedNum"
:rules="[{ required: true }]"></van-field>
@@ -324,12 +402,12 @@ layout("/mobile/platform.html"){
<van-field v-if="formData.bedInfo.bedType == '标准间' && formData.bedInfo.isSleepTogether == true"
label="意向拼房人" name="otherSleepUser" placeholder="多个拼房人请用,隔开"
v-model="formData.bedInfo.otherSleepUser"
:rules="[{ required: true }]"></van-field>
:rules="[{ required: true }]"></van-field>-->
</div>
</div>
<!--随行人信息-->
<div class="van-doc-card" style="margin-bottom: 16px">
<div v-if="index != 2" class="van-doc-card" style="margin-bottom: 16px">
<div></div>
<div class="van-card-header"
style="display: flex; justify-content: space-between; align-items: center">
@@ -339,62 +417,73 @@ layout("/mobile/platform.html"){
<van-tag @click="addCompanion" size="large" type="primary" color="#1867b0">添加随行人</van-tag>
</div>
</div>
<div v-if="formData.companionList.length > 0" class="van-card-body">
<van-tabs v-model="active" type="card" color="#0e78c5" animated>
<van-tab v-for="item, index in formData.companionList" :title="'随行人' + (index + 1)">
<van-field label="姓名" name="userName" placeholder="请填写姓名" v-model="item.userName"
:rules="[{ required: true }]"></van-field>
<!--<van-field label="工号" name="loginName" placeholder="若没有工号,请忽略此项" v-model="item.loginName"></van-field>-->
<van-field label="年龄" name="age" placeholder="请填写年龄" v-model="item.age"
type="digit" :rules="[{ required: true }]"></van-field>
<van-field :rules="[{ required: true, message: '请选择性别' }]" label="性别" name="validator">
<template #input>
<van-radio-group direction="horizontal" v-model="item.sex">
<van-radio name="男" shape="square"></van-radio>
<van-radio name="女" shape="square"></van-radio>
</van-radio-group>
</template>
</van-field>
<van-field label="身份证号" name="idCard" placeholder="请填写身份证号"
:rules="[{ required: true }]" type="digit"
v-model="item.idCard"></van-field>
<van-field label="手机号" name="mobile" placeholder="请填写手机号"
:rules="[{ required: true }]" type="digit"
v-model="item.mobile"></van-field>
<van-field @click="companionVisible = true" readonly is-link label="与本人关系"
name="relation"
placeholder="随行人与本人关系" v-model="item.relation"
:rules="[{ required: true }]"></van-field>
<van-field @click="self = false; roomVisible = true" readonly is-link label="房间"
name="bedType" placeholder="请选择房间"
v-model="item.bedInfo.bedType"></van-field>
<div style="font-size: 12px; color:orangered; padding-left: 16px; padding-bottom: 4px">
提醒:如果跟报名人员同一房间,无须选择!
</div>
<van-field v-if="item.bedInfo.bedType == '标准间'" @click="self = false; bedVisible = true"
readonly is-link label="床位"
name="bedNum" placeholder="请选择床位" v-model="item.bedInfo.bedNum"></van-field>
<van-field v-if="item.bedInfo.bedType == '标准间'"
:rules="[{ validator, message: '请选择是否拼房' }]" label="是否拼房">
<template #input>
<van-radio-group direction="horizontal" v-model="item.bedInfo.isSleepTogether">
<van-radio :name="true" shape="square"></van-radio>
<van-radio :name="false" shape="square"></van-radio>
</van-radio-group>
</template>
</van-field>
<van-field v-if="item.bedInfo.bedType == '标准间' && item.bedInfo.isSleepTogether == true"
label="意向拼房人" name="otherSleepUser" placeholder="多个拼房人请用,隔开"
v-model="item.bedInfo.otherSleepUser"></van-field>
</van-tab>
</van-tabs>
</div>
<div v-if="formData.companionList.length == 0" class="companionList_empty_text">
<template v-if="configData.familyInfo === 2">
<div>
<span style="color: red;margin-left: 20px;font-size: 14px">限填写3岁以上70岁以下随行人</span>
</div>
<div v-if="formData.companionList.length > 0" class="van-card-body">
<van-tabs v-model="active" type="card" color="#0e78c5" animated>
<van-tab v-for="item, index in formData.companionList" :title="'随行人' + (index + 1)">
<van-field label="姓名" name="userName" placeholder="请填写姓名" v-model="item.userName"
:rules="[{ required: true }]"></van-field>
<!--<van-field label="工号" name="loginName" placeholder="若没有工号,请忽略此项" v-model="item.loginName"></van-field>-->
<van-field label="年龄" name="age" placeholder="请填写年龄" v-model="item.age"
type="digit" :rules="[{ required: true }]"></van-field>
<van-field :rules="[{ required: true, message: '请选择性别' }]" label="性别" name="validator">
<template #input>
<van-radio-group direction="horizontal" v-model="item.sex">
<van-radio name="男" shape="square"></van-radio>
<van-radio name="女" shape="square"></van-radio>
</van-radio-group>
</template>
</van-field>
<van-field label="身份证件" name="idCard" placeholder="输入身份证自动填充年龄与性别"
:rules="[{ required: true }]" maxlength="18"
@input="getAgeAndSex(item)" v-model="item.idCard"></van-field>
<van-field label="手机号" name="mobile" placeholder="请填写手机号"
:rules="[{ required: true }]" type="digit"
v-model="item.mobile"></van-field>
<van-field @click="companionVisible = true" readonly is-link label="与本人关系"
name="relation"
placeholder="随行人与本人关系" v-model="item.relation"
:rules="[{ required: true }]"></van-field>
<!--<van-field @click="self = false; roomVisible = true" readonly is-link label="房间"
name="bedType" placeholder="请选择房间"
v-model="item.bedInfo.bedType"></van-field>
<div style="font-size: 8px; color:orangered; padding-left: 16px; padding-bottom: 4px">
提醒:如果跟报名人员同一房间,无须选择!
</div>
<van-field v-if="item.bedInfo.bedType == '标准间'" @click="self = false; bedVisible = true"
readonly is-link label="床位"
name="bedNum" placeholder="请选择床位" v-model="item.bedInfo.bedNum"></van-field>
<van-field v-if="item.bedInfo.bedType == '标准间'"
:rules="[{ validator, message: '请选择是否拼房' }]" label="是否拼房">
<template #input>
<van-radio-group direction="horizontal" v-model="item.bedInfo.isSleepTogether">
<van-radio :name="true" shape="square">是</van-radio>
<van-radio :name="false" shape="square">否</van-radio>
</van-radio-group>
</template>
</van-field>
<van-field v-if="item.bedInfo.bedType == '标准间' && item.bedInfo.isSleepTogether == true"
label="意向拼房人" name="otherSleepUser" placeholder="多个拼房人请用,隔开"
v-model="item.bedInfo.otherSleepUser"></van-field>-->
</van-tab>
</van-tabs>
</div>
<div v-if="formData.companionList.length == 0" class="companionList_empty_text">
<span>
如有随行人出行,请添加随行人
</span>
</div>
</div>
</template>
<template v-else>
<van-field label="家属数量" name="familyNumber" placeholder="请填写家属数量" v-model="formData.familyNumber"
type="digit" :rules="[{ required: true }]"></van-field>
</template>
</div>
<div class="submitButton">
@@ -410,34 +499,35 @@ layout("/mobile/platform.html"){
<!--房间类型弹出框-->
<van-popup position="bottom" round v-model="roomVisible">
<van-picker
title="入住房间" show-toolbar
:columns="roomColumns"
@confirm="roomConfirm"
@cancel="roomCancel">
title="入住房间" show-toolbar
:columns="roomColumns"
@confirm="roomConfirm"
@cancel="roomCancel">
</van-picker>
</van-popup>
<!--床位弹出框-->
<van-popup position="bottom" round v-model="bedVisible">
<van-picker
title="床位" show-toolbar
:columns="bedColumns"
@confirm="bedConfirm"
@cancel="bedVisible = false">
title="床位" show-toolbar
:columns="bedColumns"
@confirm="bedConfirm"
@cancel="bedVisible = false">
</van-picker>
</van-popup>
<!--随行人关系弹出框-->
<van-popup position="bottom" round v-model="companionVisible">
<van-picker
title="与本人关系" show-toolbar
:columns="companionColumns"
@confirm="(value, index) => {formData.companionList[active].relation = value; companionVisible = false}"
@cancel="companionVisible = false">
title="与本人关系" show-toolbar
:columns="companionColumns"
@confirm="(value, index) => {formData.companionList[active].relation = value; companionVisible = false}"
@cancel="companionVisible = false">
</van-picker>
</van-popup>
</div>
<script>
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
@@ -446,15 +536,18 @@ layout("/mobile/platform.html"){
return null;
}
let pdfh5 = null
const vue = new Vue({
el: '#app',
mixins: [mobileMixins],
data() {
return {
isPdf: false,
isLoad: false,
active: 0,
roomColumns: ['大床房', '标准间'],
roomColumns: ['房', '默认房间'],
bedColumns: ['1', '2'],
companionColumns: ['亲属', '朋友'],
companionColumns: ['配偶', '子女', '亲属', '其他'],
bedVisible: false,
roomVisible: false,
companionVisible: false,
@@ -466,7 +559,7 @@ layout("/mobile/platform.html"){
userName: "${@shiro.getPrincipalProperty('username')}",
loginName: "${@shiro.getPrincipalProperty('loginname')}",
unionName: "${@shiro.getPrincipalProperty('union').getUnionname()}",
idCard: "",
idCard: "${@shiro.getPrincipalProperty('idcard')}",
mobile: "${@shiro.getPrincipalProperty('mobile')}",
lineName: '',
takePartInLineId: '',
@@ -481,9 +574,24 @@ layout("/mobile/platform.html"){
fromUrlByMy: '',
enrollId: '',
configData: {},
signType: '',
takePartInTravelAgencyId: '',
queryYear: '',
}
},
methods: {
getAgeAndSex(item){
try {
const value = item.idCard
const age = this.calculateAgeFromIdCard(value)
this.$set(item, "age", age)
const sex = this.getGenderFromIdCard(value)
this.$set(item, "sex", sex)
} catch (error) {
console.log(error)
}
},
roomCancel() {
if (!this.self) {
this.formData.companionList[this.active].bedInfo.bedType = ''
@@ -510,19 +618,53 @@ layout("/mobile/platform.html"){
return value != null
},
async joinSubmit() {
const toast = vant.Toast.loading({
duration: 0,
forbidClick: true,
overlay: true,
message: '努力提交中',
})
const cloneData = clone(this.formData)
cloneData.companionList.forEach((item, index) => {
if (item.userName === '') {
cloneData.companionList.splice(index, 1)
}
})
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/doSignUpForLine', {
if (cloneData.companionList) {
for (let i = 0; i < cloneData.companionList.length; i++) {
const companion = cloneData.companionList[i];
// 检查每个字段是否为空
if (!companion.userName || !companion.idCard || !companion.mobile || !companion.relation) {
this.$toast('请填写完整随行人信息')
return
}
// 填了身份证,校验是否正确
if (companion.idCard) {
if (!this.validateIdCard(companion.idCard)) {
this.$toast('随行人'+ (i+1) +'的身份证不正确')
return
} else {
// 判断companion.age,是不是在3到70岁之间,不是就提示
if (companion.age < 3 || companion.age > 70) {
this.$toast('随行人'+ (i+1) +'的年龄超出限制,请天添加其他联系人')
return
}
}
}
}
}
let url = ''
if(this.signType == '2') {
cloneData.takePartInTravelAgencyId = this.takePartInTravelAgencyId
url = '/platform/theRapyRecuperation/line/enroll/doSignUpForTravelAgency'
} else {
url = '/platform/theRapyRecuperation/line/enroll/doSignUpForLine'
}
const toast = vant.Toast.loading({
duration: 0,
forbidClick: true,
overlay: true,
message: '努力提交中',
})
const resp = await $.post(url, {
enroll: JSON.stringify(cloneData),
})
setTimeout(() => {
@@ -537,7 +679,7 @@ layout("/mobile/platform.html"){
toast.clear()
}, 500)
if (resp.code === 0) {
location.href = '/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.index
location.replace('/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.index)
}
}, 1000)
},
@@ -557,19 +699,21 @@ layout("/mobile/platform.html"){
}),
})
if (re.code !== 0) {
if(re.msg === '您今年已报名,如要继续报名请进入我的疗休养,取消已选择') {
if (re.msg === '您今年已报名,如要继续报名请进入我的疗休养,取消已选择') {
vant.Dialog.confirm({
title: '温馨提示',
message: re.msg,
confirmButtonText: '跳转页面',
}).then(() => {
location.href = '/platform/mobile/theRapyRecuperation/myRecuperation?index=' + this.index
}).catch(() => {});
}).catch(() => {
});
} else {
vant.Dialog.alert({
title: '温馨提示',
message: re.msg,
}).then(() => {})
}).then(() => {
})
}
return
}
@@ -593,7 +737,8 @@ layout("/mobile/platform.html"){
async getData() {
const res = await $.get('/platform/theRapyRecuperation/line/enroll/selectLineAllInfo', {
usId: this.id,
usUnionId: this.takePartInUnionId
usUnionId: this.takePartInUnionId,
year: this.queryYear
})
if (res.code === 0) {
this.lineData = res.data
@@ -641,10 +786,120 @@ layout("/mobile/platform.html"){
const resp = await $.get('/platform/theRapyRecuperation/TheRapyConfig/findOne')
this.configData = resp.data
},
calculateAgeFromIdCard(idCard) {
// 检查身份证号码是否合法
if (!idCard) {
throw new Error("Invalid ID card format")
}
let birthDateStr
let birthYear, birthMonth, birthDay
// 处理18位身份证号码
if (idCard.length === 18) {
birthDateStr = idCard.substring(6, 14)
birthYear = parseInt(birthDateStr.substring(0, 4), 10)
birthMonth = parseInt(birthDateStr.substring(4, 6), 10) - 1 // 月份从0开始
birthDay = parseInt(birthDateStr.substring(6, 8), 10)
}
// 处理15位身份证号码
else if (idCard.length === 15) {
birthDateStr = idCard.substring(6, 12)
birthYear = parseInt("19" + birthDateStr.substring(0, 2), 10) // 使用字符串拼接
birthMonth = parseInt(birthDateStr.substring(2, 4), 10) - 1 // 月份从0开始
birthDay = parseInt(birthDateStr.substring(4, 6), 10)
} else {
throw new Error("Invalid ID card format. Only 15 or 18 digits are supported.")
}
// 获取当前日期
const currentDate = new Date()
// 计算年龄
let age = currentDate.getFullYear() - birthYear
// 如果当前日期还没过生日,则年龄减1
if (currentDate.getMonth() < birthMonth || (currentDate.getMonth() === birthMonth && currentDate.getDate() < birthDay)) {
age -= 1
}
return age
},
getGenderFromIdCard(idCard) {
// 检查身份证号码是否合法
if (!idCard) {
throw new Error("Invalid ID card format")
}
let genderDigit
// 处理18位身份证号码
if (idCard.length === 18) {
genderDigit = parseInt(idCard.charAt(16), 10) // 第17位
}
// 处理15位身份证号码
else if (idCard.length === 15) {
genderDigit = parseInt(idCard.charAt(14), 10) // 第15位
} else {
throw new Error("Invalid ID card format. Only 15 or 18 digits are supported.")
}
// 判断性别
if (genderDigit % 2 === 0) {
return "女"
} else {
return "男"
}
},
validateIdCard(idCard) {
if (!idCard) {
return false
}
// 18位身份证号码校验
if (idCard.length === 18) {
const idCardRegex = /^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}(\d|[Xx])$/
if (!idCardRegex.test(idCard)) {
return false
}
// 校验码计算
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
const checksums = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]
let sum = 0
for (let i = 0; i < 17; i++) {
sum += idCard[i] * weights[i]
}
const checksum = checksums[sum % 11]
return checksum === idCard[17].toUpperCase()
}
// 15位身份证号码校验
else if (idCard.length === 15) {
const idCardRegex = /^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/
return idCardRegex.test(idCard)
}
// 外国人或其他情况
else {
return false
}
},
},
async created() {
const loading = this.$toast({
duration: 0,
message: '正在加载线路信息',
forbidClick: true,
loadingType: 'spinner',
type: 'loading',
overlay: true
});
this.id = getQueryString('id') ? getQueryString('id') : ''
this.queryYear = getQueryString('queryYear') ? getQueryString('queryYear') : ''
this.index = getQueryString('index') ? getQueryString('index') : ''
this.signType = getQueryString('signType') ? getQueryString('signType') : ''
this.takePartInTravelAgencyId = getQueryString('takePartInTravelAgencyId') ? getQueryString('takePartInTravelAgencyId') : ''
await this.getConfigData()
//编辑传出来的参数
this.fromUrlByMy = getQueryString('fromUrlByMy') ? getQueryString('fromUrlByMy') : ''
@@ -653,16 +908,66 @@ layout("/mobile/platform.html"){
if (this.enrollId) {
await this.findSignUpInfoById()
}
this.getData()
if(!this.signType) {
await this.getData()
} else {
this.joinPopup = true
}
this.isLoad = true
try {
const parser = new DOMParser();
const doc = parser.parseFromString(this.lineData.content, 'text/html');
const link = doc.querySelector('a');
const href = link.getAttribute('href');
this.$nextTick(() => {
pdfh5 = new Pdfh5('#demo', {
pdfurl: href,
});
})
}catch (e) {
this.isPdf = true
document.addEventListener('click', function (event) {
// 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG' && event.target.className !== 'top_icon') {
vant.ImagePreview({
images: [event.target.src],
closeable: true,
})
}
})
}
this.$nextTick(() => {
pdfh5.on("complete", function () {
const imgDoc = document.querySelectorAll('img')
let array = []
let classArray = []
imgDoc.forEach(o => {
if(o.getAttribute('class') !== 'top_icon') {
classArray.push(o.getAttribute('class'))
array.push(o.getAttribute('src'))
}
})
document.addEventListener('click', function (event) {
// 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG' && event.target.className !== 'top_icon') {
const index = classArray.indexOf(event.target.className)
if(index !== -1) {
vant.ImagePreview({
images: array,
startPosition: index,
closeable: true,
})
}
}
})
})
})
loading.close()
},
mounted() {
window.addEventListener('scroll', this.scrollToTop)
document.addEventListener('click', function (event) {
// 打印被点击的元素标签名和 class
if (event.target.tagName === 'IMG' && event.target.className !== 'top_icon') {
vant.ImagePreview([event.target.src])
}
})
},
destroyed() {
window.removeEventListener('scroll', this.scrollToTop)
@@ -3,6 +3,10 @@ layout("/mobile/platform.html"){
#-->
<style>
#app {
font-family: ,serif;
}
.van-doc-card {
margin: 10px;
padding: 12px 12px 12px 12px;
@@ -77,21 +81,22 @@ layout("/mobile/platform.html"){
.footer {
background-color: white;
position: fixed;
bottom: 0;
width: 100%;
height: 60px;
display: flex;
justify-content: space-evenly;
align-items: center;
left: 0;
}
.footer .van-button {
height: 34px;
height: 30px;
font-size: 12px;
border-radius: 6px;
}
.van-divider {
margin: 8px 0;
}
.active {
background-color: #1867b0;
color: white;
@@ -109,9 +114,7 @@ layout("/mobile/platform.html"){
.van-row {
text-align: center;
color: #1867b0;
font-weight: bold;
padding: 0px 0px 10px 0px;
font-family: cursive;
}
.van-col {
@@ -122,17 +125,37 @@ layout("/mobile/platform.html"){
font-size: 12px;
}
.sign_button .van-button{
width: 72px;
height: 26px;
color: white;
background: rgb(24, 103, 176);
border-color: rgb(24, 103, 176);
font-size: 11px;
border-radius: 6px;
}
[v-cloak] {
display: none;
}
.van-action-sheet__cancel, .van-action-sheet__item {
font-size: 13px;
}
</style>
<div id="app" v-cloak>
<div id="app" v-cloak v-if="isLoad">
<van-sticky>
<van-nav-bar @click-left="history.back()" fixed left-arrow placeholder title="疗休养线路"></van-nav-bar>
<van-nav-bar @click-left="pjaxReplace('/platform/mobile/theRapyRecuperation/index')" fixed left-arrow placeholder title="疗休养线路"></van-nav-bar>
</van-sticky>
<van-dropdown-menu>
<!--<van-dropdown-menu>
<van-dropdown-item v-model="pageForm.year" :options="yearArray"
@change="doSearch"></van-dropdown-item>
</van-dropdown-menu>
</van-dropdown-menu>-->
<!-- <van-notice-bar v-if="schoolTime != '' && schoolTime != null" mode="closeable">您的入校时间为{{schoolTime}},疗休养额度为1500。</van-notice-bar>-->
<!--按钮导航-->
<div class="choose_button van-doc-card">
@@ -145,47 +168,85 @@ layout("/mobile/platform.html"){
</div>
</van-grid-item>
</van-grid>
<van-divider></van-divider>
<!-- <div class="footer"-->
<!-- v-if="['0', 0].includes(pageForm.theRapyRecuperationType)">-->
<!-- <van-button :class="pageForm.lineUnionType == 2 ? 'active' : 'no_active'"-->
<!-- @click="otherUnionClick">-->
<!-- 其他分工会-->
<!-- </van-button>-->
<!-- <van-button :class="pageForm.lineUnionType == 1 ? 'active' : 'no_active'"-->
<!-- @click="pageForm.lineUnionType = 1; getData()">-->
<!-- 本分工会-->
<!-- </van-button>-->
<!-- <van-button :class="pageForm.lineUnionType == 3 ? 'active' : 'no_active'"-->
<!-- @click="pageForm.lineUnionType = 3; getData()">-->
<!-- 校工会-->
<!-- </van-button>-->
<!-- </div>-->
</div>
<van-list
:finished="finished"
:immediate-check="true"
@load="onLoad"
finished-text="没有更多了"
v-model="loading">
<div @click.stop="findOne(o)" class="list-card" v-for="o in tableData">
:finished="finished"
:immediate-check="true"
@load="onLoad"
finished-text="没有更多了"
v-model="loading">
<div @click.stop="clickLineRow(o)" class="list-card" v-for="o in tableData">
<div class="content">
<van-image
height="100"
radius="8"
:src="APP_DOMAIN + '/file_server/fileStreamPreview?id=' + o.fileId"
width="150">
height="86"
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>
<span style="font-size: 14px">{{o.lineName}}</span>
<!--<div>
<van-tag color="#1867b0">{{o.lotName}}</van-tag>
<van-tag color="#1867b0">{{o.signUpMode === 2 ? '校工会' :
o.usUnionName}}
</van-tag>
</div>
</div>-->
</div>
<div class="desc_info">
<!--<div class="union">
<span>组织形式:</span>{{o.createMode === 2 && o.signUpMode === 2 ? '校工会' : o.usUnionName}}
</div>-->
<div class="concat">
<!--<div class="concat" v-if="modifyConfig.familyInfo == 2">
<span>已报人数:</span>{{o.signUpUserNum + o.signUpUserFamilyNum + '(家属' +
o.signUpUserFamilyNum + '人)'}}
o.signUpUserFamilyNum + '人)'}}
</div>
<div class="mobile" style="color: red">
<span>出行时间:</span>{{moment(o.playStartTime).format('YYYY-MM-DD')}}
<div class="concat" v-else>
<span>已报人数:</span>{{o.signUpUserNum + o.familyNumber + '(家属' +
o.familyNumber + '人)'}}
</div>-->
<div class="concat">
<span>线路类型:</span>
{{o.regionalNature}}
</div>
<div class="concat">
<span>出行时段:</span>
{{o.lotName}}
</div>
<div class="mobile">
<span>&ensp;&ensp;社:</span>{{o.travelAgencyName}}
<!--<span>出行时间:</span>{{moment(o.playStartTime).format('YYYY-MM-DD')}}-->
<span>组织机构:</span>
{{o.signUpMode === 2 ? '校工会' : o.usUnionName}}
</div>
<!--<div class="mobile">
<span>旅&ensp;行&ensp;社:</span>{{o.travelAgencyName}}
</div>-->
</div>
</div>
@@ -204,10 +265,33 @@ layout("/mobile/platform.html"){
<!--<div class="mobile">
<span>邮箱:</span>{{o.email}}
</div>-->
<div class="union" style="margin-top: 0">
<span>&emsp;&emsp;网:</span><span style="color: #0e5996"
@click.stop="window.open(o.officialWebsite.indexOf('http') !== -1 ? o.officialWebsite : 'https://' + o.officialWebsite)">{{o.officialWebsite}}</span>
<div class="concat" v-if="modifyConfig.familyInfo == 2">
<span>已报人数:</span>{{o.signUpUserNum + '人'}}
</div>
<div class="concat" v-else>
<span>已报人数:</span>{{o.signUpUserNum + '人'}}
</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 + '人)'}}-->
<!-- </div>-->
<!--<div class="union" style="margin-top: 0">
<span>官&emsp;&emsp;网:</span>
<span style="color: #0e5996"
@click.stop="window.open(o.officialWebsite.indexOf('http') !== -1 ? o.officialWebsite : 'https://' + o.officialWebsite)">
{{o.officialWebsite}}
</span>
</div>-->
</div>
</div>
@@ -233,41 +317,69 @@ layout("/mobile/platform.html"){
</div>
</div>
<div v-if="pageForm.theRapyRecuperationType == '2'">
<van-row gutter="20">
<div v-if="pageForm.theRapyRecuperationType == '3'">
<van-row gutter="20" class="sign_button">
<van-col @click="" span="12" style="border-right: 1px lightgrey solid"></van-col>
<van-col span="12">
<van-button @click.stop="join(o)" plain round size="mini" type="info">我要报名</van-button>
<van-col span="12" style="text-align: right">
<van-button @click.stop="openSignUser(o, 'base')" round size="mini" type="info">
查看人员
</van-button>
<van-button @click.stop="findOne(o)" round size="mini" type="info"
style="margin-right: 8px">
我要报名
</van-button>
</van-col>
</van-row>
</div>
</div>
</van-list>
<div class="footer"
v-if="['0', '1', 0 , 1].includes(pageForm.theRapyRecuperationType)">
<van-button :class="pageForm.lineUnionType == 2 ? 'active' : 'no_active'"
@click="otherUnionClick">
其他工会
</van-button>
<van-button :class="pageForm.lineUnionType == 1 ? 'active' : 'no_active'"
@click="pageForm.lineUnionType = 1; getData()">
本工会
</van-button>
<van-button :class="pageForm.lineUnionType == 3 ? 'active' : 'no_active'"
@click="pageForm.lineUnionType = 3; getData()">
校工会
</van-button>
</div>
<van-popup position="bottom" round v-model:show="unionPop">
<van-picker
title="选择分工会" show-toolbar
:columns="unionColumns"
@confirm="onConfirm"
@cancel="unionPop = false"
title="选择分工会" show-toolbar
:columns="unionColumns"
@confirm="onConfirm"
@cancel="unionPop = false"
></van-picker>
</van-popup>
<van-action-sheet
v-model="selectLinePopup"
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 class="van-action-sheet__name">{{item.playTime}}</div>
<div class="van-action-sheet__subname">{{item.subname}}</div>
</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>
</div>
</button>
</van-action-sheet>
<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>
@@ -278,33 +390,87 @@ layout("/mobile/platform.html"){
return null;
}
const vue = new Vue({
el: '#app',
mixins: [mobileMixins],
data() {
return {
tarBarActive: 1,
searchKeyWord: '',
isLoad: false,
yearArray: [],
unionColumns: [],
unionPop: false,
chooseButton: [],
pageForm: {
theRapyRecuperationType: 0,
lineUnionType: 1,
lineUnionType: 3,
unionId: "${@shiro.getPrincipalProperty('union').getId()}",
year: new Date().getFullYear()
year: null
},
loading: false,
finished: false,
refreshing: false,
lineData: {},
modifyConfig:{},
clickRow: {},
selectLineList: [],
selectLinePopup: false,
// schoolTime: '',
}
},
methods: {
async openSignUser(row, type) {
const id = type === 'line' ? row.usId : row.id
location.href = '/platform/mobile/theRapyRecuperation/userSignInfo?type=' + type + '&id=' + id
},
async clickLineRow(o) {
this.clickRow = o
if(this.pageForm.theRapyRecuperationType == 3) {
await this.findOne(o)
return
}
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/getSelectLineById',
{
lineId: o.lineId,
unionId: this.pageForm.unionId,
theRapyRecuperationType: this.pageForm.theRapyRecuperationType,
lineUnionType: this.pageForm.lineUnionType,
}
)
this.selectLineList = resp.data
this.selectLineList.forEach((item, index) => {
item.name = '出行时间' + (index + 1) + ' ' + moment(item.playStartTime).format('YYYY-MM-DD HH:mm')
item.playTime = '报名截止:' + moment(item.signUpEndTime).format('YYYY-MM-DD HH:mm')
if(this.modifyConfig.familyInfo == 2) {
item.subname = '已报人数:'
+ (item.signUpUserNum + item.signUpUserFamilyNum)
+ '人'
} else {
item.subname = '已报人数:'
+ (item.signUpUserNum + item.signUpUserFamilyNum)
+ '人'
}
// if(this.modifyConfig.familyInfo == 2) {
// item.subname = '已报人数:'
// + (item.signUpUserNum + item.signUpUserFamilyNum)
// + '(家属' + item.signUpUserFamilyNum + '人)'
// } else {
// item.subname = '已报人数:'
// + (item.signUpUserNum + item.signUpUserFamilyNum)
// + '(家属' + item.familyNumber + '人)'
// }
})
this.selectLinePopup = true
},
onSelect(item) {
this.findOne(item)
},
otherUnionClick() {
if(this.unionColumns.length === 0) {
vant.Toast('暂时没有工会公开线路')
vant.Toast('暂时没有其他分工会公开线路')
return
}
this.pageForm.lineUnionType = 2
@@ -313,6 +479,9 @@ layout("/mobile/platform.html"){
doSearch() {
this.loading = true
this.finished = false
if (this.pageForm.theRapyRecuperationType == 0) {
this.$set(this.pageForm, 'lineUnionType', 3)
}
this.getData()
},
async join(o) {
@@ -365,14 +534,32 @@ layout("/mobile/platform.html"){
location.href = '/platform/mobile/theRapyRecuperation/lineInfo?id=' + o.usId + '&index=' + this.pageForm.theRapyRecuperationType
+ '&takePartInUnionId=' + o.takePartInUnionId
} else if (type === 3) {
location.href = '/platform/mobile/theRapyRecuperation/baseInfo?id=' + o.usId + '&index=' + this.pageForm.theRapyRecuperationType
location.href = '/platform/mobile/theRapyRecuperation/baseInfo?id=' + o.id + '&index=' + this.pageForm.theRapyRecuperationType
} else if(type === 2) {
const re = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo', {
enroll: JSON.stringify({
takePartInTravelAgencyId: o.id,
}),
})
if (re.code !== 0) {
vant.Dialog.alert({
title: '温馨提示',
message: re.msg,
})
return
}
location.href = '/platform/mobile/theRapyRecuperation/lineInfo?id=' + o.usId + '&index=' + this.pageForm.theRapyRecuperationType
+ '&takePartInUnionId=' + o.takePartInUnionId + '&signType=2' + '&takePartInTravelAgencyId=' + o.id
}
},
getData() {
this.loading = true
if (this.pageForm.lineUnionType === 1) {
if (this.pageForm.lineUnionType === 3) {
this.pageForm.unionId = "${@shiro.getPrincipalProperty('union').getId()}"
}
if (this.pageForm.theRapyRecuperationType == 1) {
this.$set(this.pageForm, 'lineUnionType', 3)
}
this.pageForm.pageNumber = 1
this.tableData = []
this.onLoad()
@@ -394,26 +581,47 @@ layout("/mobile/platform.html"){
for (let i = 2023; i <= 2043; i++) {
this.yearArray.push({value: i, text: i + '年'})
}
this.yearArray.unshift({value: null, text: '全部'})
},
async getTheRapyUnions() {
const resp = await $.get('/platform/theRapyRecuperation/line/enroll/getTheRapyUnions', {
year: this.pageForm.year
year: this.pageForm.year,
theRapyRecuperationType: this.pageForm.theRapyRecuperationType
})
return resp.data
},
async getModifyConfig() {
const res = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
if (res.code === 0) {
this.modifyConfig = res.data
}
},
// async getSchoolTime() {
// const res = await $.post('/platform/theRapyRecuperation/line/enroll/getSchoolTime')
// this.schoolTime = res.data
// },
},
mounted() {
if(localStorage.getItem('clickIndex') !== null) {
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()
const clickIndex = localStorage.getItem('clickIndex')
this.pageForm.theRapyRecuperationType = JSON.parse(clickIndex).clickIndex
await this.getModifyConfig()
// await this.getSchoolTime()
this.chooseButton = await getEnumOptions('TheRapyRecuperationType')
this.chooseButton = this.chooseButton.filter(o => o.value !== 2 && o.value !== 3)
this.chooseButton = this.chooseButton.filter(o => o.value !== 2)
const unions = await this.getTheRapyUnions()
unions.forEach(item => {
this.unionColumns.push({text: item.unionname, value: item.id})
})
}
this.isLoad = true
},
})
</script>
@@ -72,21 +72,28 @@ layout("/mobile/platform.html"){
.footer {
background-color: white;
position: fixed;
bottom: 0;
width: 100%;
height: 60px;
display: flex;
justify-content: space-evenly;
align-items: center;
left: 0;
}
.footer .van-button {
height: 34px;
height: 30px;
font-size: 12px;
border-radius: 6px;
}
.evaluateVisible .van-button {
height: 30px;
font-size: 12px;
border-radius: 6px;
}
.van-divider {
margin: 8px 0;
}
.active {
background-color: #1867b0;
color: white;
@@ -172,11 +179,59 @@ layout("/mobile/platform.html"){
margin-left: 4px;
}
.evaluateVisible {
width: 100%;
height: 80%;
}
.title_container {
display: flex;
justify-content: flex-end;
align-items: center;
position: relative;
padding: 9px;
}
.title {
position: absolute;
left: 0;
right: 0;
margin: auto;
text-align: center;
}
.content {
padding: 10px 20px;
}
.line_info {
display: flex;
align-items: center;
}
.evaluate_item_content {
display: flex;
gap: 20px;
}
.evaluate_item {
padding: 6px 20px;
border: 1px grey solid;
text-align: center;
border-radius: 10px;
}
.evaluate_active {
background-color: #07C160;
color: white;
border-color: #07C160;
}
</style>
<div id="app" v-cloak>
<van-sticky>
<van-nav-bar @click-left="history.back()" fixed left-arrow placeholder
<van-nav-bar @click-left="pjaxReplace('/platform/mobile/theRapyRecuperation/index')" fixed left-arrow placeholder
title="我的疗休养"></van-nav-bar>
</van-sticky>
@@ -196,6 +251,14 @@ layout("/mobile/platform.html"){
</div>
</van-grid-item>
</van-grid>
<van-divider></van-divider>
<div class="footer">
<van-button @click="pageForm.signUpStateId = 1; getData()" :class="pageForm.signUpStateId == 1 ? 'active' : 'no_active'">已报名</van-button>
<van-button @click="pageForm.signUpStateId = 2; getData()" :class="pageForm.signUpStateId == 2 ? 'active' : 'no_active'">已参加</van-button>
<van-button @click="pageForm.signUpStateId = 3; getData()" :class="pageForm.signUpStateId == 3 ? 'active' : 'no_active'">未参加</van-button>
</div>
</div>
<van-list
@@ -209,7 +272,7 @@ layout("/mobile/platform.html"){
<van-image
height="100"
radius="8"
:src="APP_DOMAIN + '/file_server/fileStreamPreview?id=' + o.fileId"
:src="CREATE_PREVIEW_URL(o.fileId)"
width="150"
></van-image>
@@ -241,7 +304,8 @@ layout("/mobile/platform.html"){
<span>联系方式:</span>{{o.contactMobileNumber}}
</div>
<div class="mobile" v-if="![2715,2725,2735].includes(o.stateId)">
<span>随行家属:</span>{{o.companionUserNames ? o.companionUserNames : '无'}}
<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>
@@ -295,6 +359,9 @@ layout("/mobile/platform.html"){
</div>
<div class="operateDiv">
<van-button v-if="pageForm.signUpStateId == 2" @click="openEvaluate(o)" type="info" size="small" color="#1867b0">
&ensp;
</van-button>
<van-button v-if="pageForm.theRapyRecuperationType != '2' && moment().unix() < moment(o.changeEndTime).unix()
&& ![2715,2725,2735].includes(o.stateId)" @click="edit(o)"
type="info" size="small" color="#1867b0" :disabled="o.isTakePartIn == true || getDisabled(o)">
@@ -302,21 +369,15 @@ layout("/mobile/platform.html"){
</van-button>
<van-button type="info" size="small" color="#1867b0" @click="cancel(o)"
:disabled="getDisabled(o)">
&ensp;
&ensp;
</van-button>
<van-button v-if="o.isTakePartIn == true" type="info" size="small" color="#1867b0"
@click="satisfaction(o)">满意度反馈</van-button>
<!--<van-button v-if="o.isTakePartIn == true" type="info" size="small" color="#1867b0"
@click="satisfaction(o)">满意度反馈</van-button>-->
</div>
</div>
</van-list>
<div class="footer">
<van-button @click="pageForm.signUpStateId = 1; getData()" :class="pageForm.signUpStateId == 1 ? 'active' : 'no_active'">已报名</van-button>
<van-button @click="pageForm.signUpStateId = 2; getData()" :class="pageForm.signUpStateId == 2 ? 'active' : 'no_active'">已参加</van-button>
<van-button @click="pageForm.signUpStateId = 3; getData()" :class="pageForm.signUpStateId == 3 ? 'active' : 'no_active'">未参加</van-button>
</div>
<van-popup class="popVisible" position="right" v-model="popVisible">
<van-nav-bar @click-left="popVisible = false" fixed left-arrow placeholder title="满意度评分"></van-nav-bar>
<div class="cus_content">
@@ -352,15 +413,53 @@ layout("/mobile/platform.html"){
</div>
</van-popup>
<van-action-sheet title="参加体验评价" v-model="evaluatePopup">
<div class="evaluateForm">
<div style="text-align: center;margin: 20px 0;font-size: 20px;color: #f18d8d;font-weight: bold;">
您的评价让我们做的更好
</div>
<div style="display: flex;justify-content: center;flex-direction: column;align-items: center">
<div style="text-align: center;font-size: 13px;color: rgb(139 134 134); margin-bottom: 10px">为本次疗休养打分
</div>
<div class="evaluate_item_content">
<div class="evaluate_item" @click="evaluateClick('满意', 1)">满意</div>
<div class="evaluate_item" @click="evaluateClick('一般', 2)">一般</div>
<div class="evaluate_item" @click="evaluateClick('不满意', 3)">不满意</div>
</div>
</div>
<van-field
autosize
class="evaluateTextField"
label="评价"
label-width="0"
maxlength="100"
placeholder="请输入评价"
rows="5"
type="textarea"
v-model="evaluateFormData.evaluateText"
>
<div slot="label"></div>
</van-field>
</div>
<div style="padding: 10px 16px">
<van-button @click="doSubmitEvaluate"
block
type="primary"
>提交
</van-button>
</div>
</van-action-sheet>
<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="manager-o" replace url="/platform/mobile/theRapyRecuperation/myRecuperation">我的疗休养
</van-tabbar-item>
<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>
@@ -376,23 +475,82 @@ layout("/mobile/platform.html"){
mixins: [mobileMixins],
data() {
return {
tarBarActive: 2,
evaluateFormData: {},
evaluatePopup: false,
yearArray: [],
popVisible: false,
chooseButton: [],
pageForm: {
theRapyRecuperationType: null,
signUpStateId: 1,
year: null,
year: new Date().getFullYear(),
},
loading: false,
finished: false,
refreshing: false,
satisfactionForm: {},
configData: {},
tarBarActive: 1
}
},
methods: {
async openEvaluate(o) {
if(o.isTakePartIn === false) {
this.$modal.msg("参加后才能评价")
return
}
await this.finOneEvaluate(o.takePartInLineId)
this.evaluatePopup = true
this.$nextTick(() => {
let score = 1
if (this.evaluateFormData.evaluateScore === '满意') {
score = 1
} else if (this.evaluateFormData.evaluateScore === '一般') {
score = 2
} else if (this.evaluateFormData.evaluateScore === '不满意') {
score = 3
}
this.evaluateClick(this.evaluateFormData.evaluateScore, score)
})
},
evaluateClick(value, index) {
this.evaluateFormData.evaluateScore = value
const elements = document.querySelectorAll('.evaluate_item')
for (let i = 0; i < elements.length; i++) {
if(index === (i + 1)) {
elements[i].classList.add('evaluate_active')
} else {
elements[i].classList.remove('evaluate_active')
}
}
},
async finOneEvaluate(lineId) {
const {data, code, msg} = await $.post("/platform/theRapyRecuperation/line/enroll/finOneEvaluate", {
lineId: lineId,
})
if (code === 0) {
if (data) {
this.evaluateFormData = data
} else {
this.evaluateFormData = {lineId: lineId}
}
} else {
this.$message.warning(msg)
}
},
async doSubmitEvaluate() {
if (!this.evaluateFormData.evaluateScore) {
this.$modal.msg("请为本次疗休养评分")
return
}
const {code, data, msg} = await $.post('/platform/theRapyRecuperation/line/enroll/doEvaluate', this.evaluateFormData)
if (code === 0) {
this.$modal.msgSuccess("评价成功")
this.evaluatePopup = false
} else {
this.$modal.msgError(msg)
}
},
getDisabled(o) {
if(o.regionalNature === '省内') {
return this.configData.isSnLine && o.stateId === 2750
@@ -465,11 +623,11 @@ layout("/mobile/platform.html"){
}
vant.Dialog.confirm({
title: '温馨提醒',
message: '您确定要取消此报名吗?',
message: '您确定要撤销此报名吗?',
}).then(async () => {
const res = await $.post('/platform/theRapyRecuperation/line/enroll/doDeleteMyEnrollInfoById/' + o.id)
if(res.code === 0) {
vant.Toast('取消成功')
vant.Toast('撤销成功')
this.getData()
}else {
vant.Toast(res.msg)
@@ -477,8 +635,10 @@ layout("/mobile/platform.html"){
}).catch(() => {});
},
async findOne(o) {
if(this.pageForm.theRapyRecuperationType != '2') {
if(this.pageForm.theRapyRecuperationType != '2' && this.pageForm.theRapyRecuperationType != '3') {
location.href = '/platform/mobile/theRapyRecuperation/lineInfo?id=' + o.takePartInLineId + '&fromUrlByMy=edit&takePartInUnionId=' + o.takePartInUnionId
} else if (this.pageForm.theRapyRecuperationType == '3') {
location.href = '/platform/mobile/theRapyRecuperation/baseInfo?id=' + o.takePartInBaseManagementId + '&fromUrlByMy=edit'
}
},
getData() {
@@ -516,17 +676,13 @@ layout("/mobile/platform.html"){
},
async created() {
this.createYear()
this.yearArray.unshift({value: null, text: '全部'})
this.pageForm.year = new Date().getFullYear()
this.yearArray.unshift({value: null, text: '所有年度'})
this.pageForm.theRapyRecuperationType = getQueryString('index') ? getQueryString('index') : await this.getType()
this.chooseButton = await getEnumOptions('TheRapyRecuperationType')
this.chooseButton = this.chooseButton.filter(o => o.value !== 2 && o.value !== 3)
this.chooseButton = this.chooseButton.filter(o => o.value !== 2)
await this.getConfigData()
this.onLoad()
},
mounted() {
}
})
</script>
@@ -0,0 +1,84 @@
<!--#
layout("/mobile/platform.html"){
#-->
<style>
#app {
font-family: 微软雅黑,serif;
}
.van-index-bar {
margin-bottom: 20px;
}
.van-empty {
height: calc(100vh - 46px - 54px);
position: unset;
transform: none;
}
</style>
<div id="app" v-cloak>
<van-sticky>
<van-nav-bar @click-left="history.back()" fixed left-arrow placeholder
title="报名人员"></van-nav-bar>
</van-sticky>
<van-search v-model="searchKeyWord" placeholder="请输入姓名查询" @search="getSignUser"></van-search>
<template v-if="Object.keys(signUserData).length > 0">
<van-index-bar :sticky-offset-top="46" :index-list="Object.keys(signUserData)">
<template v-for="(value, key) in signUserData">
<van-index-anchor :index="key"></van-index-anchor>
<van-cell v-for="item in value" :title="item.userName + '' + item.unionName + ''"></van-cell>
</template>
</van-index-bar>
</template>
<van-empty v-else description="暂无报名人员"></van-empty>
</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 {
searchKeyWord: '',
signUserData: [],
id: '',
type: '',
}
},
methods: {
async getSignUser() {
const params = this.type === 'line' ? {usId: this.id, searchKeyWord: this.searchKeyWord} : {baseId: this.id, searchKeyWord: this.searchKeyWord}
const toast = vant.Toast.loading({
duration: 0,
forbidClick: true,
overlay: true,
message: '努力查询中',
})
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/openSignUser', params)
this.signUserData = resp.data
toast.close()
},
},
async created() {
this.id = getQueryString('id')
this.type = getQueryString('type')
await this.getSignUser()
},
})
</script>
<!--#
}
#-->
@@ -527,7 +527,6 @@ layout("/mobile/platform.html"){
this.selectSpecsPopup = true
},
specsSelectConfirm(value) {
debugger
this.selectSpecsPopup = false
if (value) {
this.projectInfo.welfareProjectSubjects[0].options.forEach(v => {
@@ -681,7 +680,7 @@ layout("/mobile/platform.html"){
for (const option of options) {
// 检查是否有 specs
if (option.specs) {
if (option.specs && option.specs.length > 0) {
// 检查 selectSpecs 是否为空或未定义
if (!option.selectSpecs) {
this.$toast.fail('请选择' + option.optionName + '的规格')
@@ -713,24 +712,28 @@ layout("/mobile/platform.html"){
if (code === 0) {
this.getUserSelection(this.projectId)
// 女性健康知识讲座福利品Id
if (this.projectId === '8799d66b0bb640078f50feb029e506ed') {
// if (this.projectId === '8799d66b0bb640078f50feb029e506ed') {
pjaxReplace('/mobile/welfare/list/receive_success?projectId=' + this.projectId + '&provideMode=' + this.projectInfo.provideMode)
} else {
vant.Dialog.alert({
title: '温馨提示',
message: "您已完成本次选择。",
}).then(async () => {
this.confirmPopup = false
await this.getProjectInfo()
window.location.reload()
});
}
// } else {
// vant.Dialog.alert({
// title: '温馨提示',
// message: "您已完成本次选择。",
// }).then(async () => {
// this.confirmPopup = false
// await this.getProjectInfo()
// window.location.reload()
// });
// }
// this.$modal.msgSuccess("您已完成本次福利选择。")
} else {
this.$modal.msgError(msg)
this.confirmPopup = false
await this.getProjectInfo()
window.location.reload()
vant.Dialog.alert({
title: '温馨提示',
message: msg,
})
// this.$modal.msgError(msg)
// this.confirmPopup = false
// await this.getProjectInfo()
// window.location.reload()
}
},
@@ -833,6 +836,11 @@ layout("/mobile/platform.html"){
window.sessionStorage.removeItem('welfareProjectSelectInfo' + loginname)
// this.selectAddressPopup = true
} else {
const flag = localStorage.getItem("reload")
if (flag) {
window.location.reload()
localStorage.removeItem("reload")
}
this.getProjectInfo()
}
},
@@ -23,7 +23,7 @@ layout("/mobile/platform.html"){
<path d="M955.330366 240.548613h-83.927839a30.723584 30.723584 0 0 0-31.472939 30.161567v1.124034a30.910923 30.910923 0 0 0 30.348906 31.472939H955.330366a30.723584 30.723584 0 0 0 31.2856-30.348906v-1.124033A30.536245 30.536245 0 0 0 955.330366 240.548613z m-72.125487-168.605033a32.222295 32.222295 0 0 0-43.837308 4.121457L786.725333 141.071644a31.285601 31.285601 0 0 0 48.146104 39.903191l52.080221-64.819268a30.536245 30.536245 0 0 0-2.810084-42.900614zM683.126907 0.005433a30.910923 30.910923 0 0 0-31.47294 30.161567v84.864533a30.723584 30.723584 0 0 0 30.348906 31.285601h1.124034a30.536245 30.536245 0 0 0 31.2856-30.161567V31.291033A30.723584 30.723584 0 0 0 684.25094 0.005433z"
fill="#07C160" p-id="3085"></path>
</svg>
<div style="margin-top: 20px;">{{code=='2' ? '您已领取' : '您已选择'}}</div>
<div style="margin-top: 20px;">{{code=='2' ? '您已领取' : '您已完成本次选择'}}</div>
<div style="margin: 20px auto 0px auto;width: 300px;word-break: break-all">
<!-- 女性健康知识讲座福利品Id -->
{{ projectId == '8799d66b0bb640078f50feb029e506ed' ? '纪念品' : '福利品' }} {{selectOptionNames}}
@@ -55,6 +55,7 @@ layout("/mobile/platform.html"){
},
back() {
pjaxReplace('/mobile/welfare/list/receive?projectId=' + this.projectId)
localStorage.setItem("reload", '1')
}
},
created() {
@@ -297,7 +297,6 @@
tissueId: row.id
})
debugger
this.leftData = data.map((user) => {
return this.getTransProp(user, row.signUpMethod)
})
@@ -106,7 +106,6 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-col>
</el-row>-->
<el-row :gutter="20" v-if="formData.activity_id != null && formData.activity_id !== ''">
@@ -217,13 +217,6 @@ layout("/layouts/platform.html"){
sex: [{required: false, message: "必填", trigger: ["change", "blur"]}],
isVoluntary: [{required: true, message: "必填", trigger: ["change", "blur"]}],
sign: [{required: true, message: "必填", trigger: ["change", "blur"]}],
phone: [
{
validator: (rule, value, callback) => {
},
trigger: ["change", "blur"]
}
],
email: [
{
validator: (rule, value, callback) => {
@@ -37,6 +37,24 @@ layout("/layouts/platform.html"){
</el-radio-group>
</el-form-item>
<el-form-item label="开始撰写时间" prop="startWriteTime">
<el-date-picker
v-model="formData.startWriteTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="开始撰写时间">
</el-date-picker>
</el-form-item>
<el-form-item label="结束撰写时间" prop="endWriteTime">
<el-date-picker
v-model="formData.endWriteTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="结束撰写时间">
</el-date-picker>
</el-form-item>
<el-form-item label="超时自动提交天数" prop="timeoutDays">
<el-input v-model="formData.timeoutDays" oninput="value=value.replace(/[^\d]/g,'')"
placeholder="协办单位超时自动提交天数" maxlength="3"></el-input>
@@ -324,4 +342,4 @@ layout("/layouts/platform.html"){
</script>
<!--#
}
#-->
#-->
@@ -123,7 +123,7 @@ layout("/layouts/platform.html"){
<sign :qz.sync="formData.sign" prefix="proposal"></sign>
</el-form-item>
<el-form-item>
<el-form-item v-if="showWrite">
<el-row justify="center" type="flex">
<el-button @click="doAdd" type="primary" v-throttle>保存到我的提案</el-button>
<el-button @click="openSeconded" type="primary" v-if="formData.mannerCode=='W01'">邀请附议人
@@ -204,7 +204,9 @@ layout("/layouts/platform.html"){
isSign: () => {
return proposal.needSignState.map(v => v.stateCode).includes(proposal.UNSUBMIT)
},
writeRemindDialog: false
writeRemindDialog: false,
showWrite: true,
}
},
methods: {
@@ -390,18 +392,35 @@ layout("/layouts/platform.html"){
this.getInstitutions(this.pageForm.teacherMeetingId)
])
this.config = config;
this.typeOptions = typeOptions;
this.allMannerList = allMannerList;
this.delegationOptions = delegationOptions;
this.committeeOptions = institutions;
this.createMannerList()
const id = GetQueryString("proposalId")
if (id) {
await this.editProposal()
const {startWriteTime, endWriteTime} = this.config
if (moment().isBefore(moment(startWriteTime))) {
this.showWrite = false
this.writeRemindDialog = false
this.$alert('提案征集开始时间为' + startWriteTime, '提示', {
confirmButtonText: '确定'
})
} else if (moment().isAfter(moment(endWriteTime))) {
debugger
this.showWrite = false
this.writeRemindDialog = false
this.$alert('提案征集已经结束', '提示', {
confirmButtonText: '确定',
})
} else {
this.newWriteProposal()
this.typeOptions = typeOptions;
this.allMannerList = allMannerList;
this.delegationOptions = delegationOptions;
this.committeeOptions = institutions;
this.createMannerList()
const id = GetQueryString("proposalId")
if (id) {
await this.editProposal()
} else {
this.newWriteProposal()
}
}
},
},
@@ -1138,7 +1138,6 @@ layout("/layouts/platform.html"){
},
methods: {
openCakeDesc({$index}) {
debugger
this.cake_subject_option_index = $index
this.cakeDialog = true
this.$nextTick(() => {
@@ -172,7 +172,7 @@ layout("/layouts/platform.html"){
const url = "/platform/sourcechange/manage/doBatchChange"
let isSendMsg = false
const isHasNewTeacher = this.checkUsers.some(v=> v.changeInfosStr === '新入职')
const isHasNewTeacher = this.checkUsers.some(v=> v.changeInfosStr === '新入职' && !v.personType.includes('劳务派遣'))
const ids = this.checkUsers.map(item => item.id)
if (isHasNewTeacher) {
this.$confirm('勾选用户中有新入职教工,是否对新入职教职工发送入会邀请?', '提示', {
@@ -197,7 +197,7 @@ layout("/layouts/platform.html"){
async doSubmit(formData){
const url = "/platform/sourcechange/manage/doSubmit"
let isSendMsg = false;
if (formData.changeInfosStr === '新入职') {
if (formData.changeInfosStr === '新入职' && !formData.personType.includes('劳务派遣')) {
this.$confirm('该职工是新入职职工,是否发送入会邀请?', '提示', {
confirmButtonText: '是',
cancelButtonText: '否',
@@ -260,6 +260,7 @@ layout("/layouts/platform.html"){
margin: 10px auto;
overflow: hidden;
box-sizing: border-box;
overflow-y: auto;
}
.layout-grid-container .grid-item {
color: white;
@@ -0,0 +1,372 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.top_block {
width: 100%;
padding: 20px 80px;
border-bottom: 10px solid rgb(240, 240, 240);
}
.top_title {
font-size: 18px;
height: 30px;
line-height: 30px;
margin-bottom: 5px;
}
.top_num {
font-size: 26px;
color: #808492;
}
.two_num {
margin-top: 8px;
font-size: 18px;
color: #808492;
}
.cut-off-line {
width: 1px;
height: 70%;
position: absolute;
right: 0;
top: 0;
bottom: 0;
margin: auto;
background-color: rgb(230, 230, 230);
}
.chartTitle {
font-size: 14px;
color: #808492;
margin-bottom: 20px;
}
</style>
<div id="app">
<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
style="width: 100%"
@change="doSearch"
:clearable="false"
value-format="yyyy"
v-model="pageForm.year"
type="year"
placeholder="选择年">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">线路类型</div>
<div class="search-item-option">
<el-select v-model="pageForm.lineType" placeholder="线路类型" clearable style="width: 100%">
<el-option v-for="item in regionalNatureList" :key="item.value" :label="item.label" :value="item.value">{{item.label}}</el-option>
</el-select>
</div>
</div>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch()">搜索</el-button>
</div>
</div>
</el-card>
<el-card shadow="never" class="mt10">
<div class="top_block">
<el-row :gutter="20">
<el-col :span="4" style="position: relative">
<div class="top_title">总人数</div>
<div class="top_num">{{numData.allNum || '0'}}</div>
<div class="cut-off-line"></div>
</el-col>
<el-col :span="4" style="position: relative">
<div class="top_title">省内人数</div>
<div class="top_num">{{numData.provinceNum || '0'}}</div>
<div class="cut-off-line"></div>
</el-col>
<el-col :span="4" style="position: relative">
<div class="top_title">省外人数</div>
<div class="top_num">{{numData.outProvinceNum || '0'}}</div>
<div class="cut-off-line"></div>
</el-col>
<el-col :span="4" style="position: relative">
<div style="display: flex;justify-content: space-between;">
<div class="top_title">总线路数</div>
<div style="margin-top: 2px;font-size: 18px;color: #1867b0">共{{numData.lineNum || '0'}}条</div>
</div>
<div class="two_num">省内{{numData.inLineNum || '0'}} | 省外{{numData.outLineNum || '0'}}</div>
<div class="cut-off-line"></div>
</el-col>
<el-col :span="4" style="position: relative">
<div style="display: flex;justify-content: space-between;">
<div class="top_title">校工会组织</div>
<div style="margin-top: 2px;font-size: 18px;color: #1867b0">共{{numData.schoolUnionLineNum || '0'}}条</div>
</div>
<div class="two_num">省内{{numData.schoolInLineNum || '0'}} | 省外{{numData.schoolOutLineNum || '0'}}</div>
<div class="cut-off-line"></div>
</el-col>
<el-col :span="4">
<div style="display: flex;justify-content: space-between;">
<div class="top_title">分工会组织</div>
<div style="margin-top: 2px;font-size: 18px;color: #1867b0">共{{numData.unionLineNum || '0'}}条</div>
</div>
<div class="two_num">省内{{numData.unionInLineNum || '0'}} | 省外{{numData.unionOutLineNum || '0'}}</div>
</el-col>
</el-row>
</div>
<el-row gutter="20" style="padding: 30px 0;border-bottom: 10px solid rgb(240, 240, 240)">
<el-col :span="12" v-loading="lotLoading">
<div class="chartTitle">时间标段统计</div>
<div id="lotChart" style="width: 100%;height: 300px"></div>
</el-col>
<el-col :span="12" v-loading="ageLoading">
<div class="chartTitle">年龄分布统计</div>
<div id="ageChart" style="width: 100%;height: 300px"></div>
</el-col>
</el-row>
<el-row style="padding: 30px 0;border-bottom: 10px solid rgb(240, 240, 240)">
<el-col :span="24" style="padding: 0 20px" v-loading="lineTravelOrAgeLoading">
<div class="chartTitle">线路人数及年龄统计</div>
<div id="lineTravelChart"></div>
</el-col>
</el-row>
<!-- <el-row style="padding: 30px 0;border-bottom: 10px solid rgb(240, 240, 240)">-->
<!-- <el-col :span="24" style="padding: 0 20px">-->
<!-- <div class="chartTitle">线路出行年龄统计</div>-->
<!-- </el-col>-->
<!-- </el-row>-->
</el-card>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return{
pageForm: {
year: moment().format('YYYY') + "",
lineType: ''
},
numData: {
allNum: '',
provinceNum: '',
outProvinceNum: '',
allLineNum: '',
schoolLineNum: '',
branchLineNum: ''
},
regionalNatureList: [{label:'全部线路',name:'provinceAll',ordinal:0,provinceIn:'provinceIn',provinceOut:'provinceOut',value:'全部'}],
lotLoading: false,
ageLoading: false,
lineTravelOrAgeLoading: false,
isLineTravel: false,
lineTravelOrAgeTip: '出行线路年龄统计',
dualAxisChartInstance: null,
chartData: [
{ "lineName": "03-15", "takePartInLineNum": 10, "underThirtyFive": 5, "thirtyFiveToFortyFive": 3, "aboveFortyFive": 2 },
{ "lineName": "04-10", "takePartInLineNum": 15, "underThirtyFive": 7, "thirtyFiveToFortyFive": 6, "aboveFortyFive": 2 }
]
}
},
methods: {
async getNumData(){
const resp = await $.post('/platform/theRapyRecuperation/annualAnalysis/getNumData', this.pageForm)
if (resp.code === 0) {
this.numData = resp.data
}
},
async getLotNumData(){
this.lotLoading = true
const resp = await $.post('/platform/theRapyRecuperation/annualAnalysis/getLotNum', this.pageForm)
if (resp.code === 0) {
let {data} = resp
document.getElementById("lotChart").innerHTML = ''
const config = {
isStack: true,
"legend": {
"position": "top-right",
"flipPage": false
},
autoFit: true,
title: {
visible: true,
text: '出行时间标段统计详情',
},
description: {
visible: true,
text: '人',
},
xField: 'label',
yField: 'value',
stackField: 'type',
color: ["#5B8FF9", "#5AD8A6"],
"xAxis": {
label: {
formatter: (v) => {
if (data.length > 30 && v.length > 3) {
return v.substr(0, 2) + '...'
} else if (data.length > 20 && v.length > 4) {
return v.substr(0, 3) + '...'
} else if (data.length > 10 && v.length > 6) {
return v.substr(0, 5) + '...'
}
return v
}
}
},
"yAxis": {},
meta: {
label: {
alias: '标段时长',
},
value: {
alias: '人数',
}
},
connectedArea: {
visible: true,
triggerOn: false,
},
}
const plot = new G2Plot.Column(document.getElementById("lotChart"), {
data,
...config,
});
plot.render();
this.lotLoading = false
}
},
async getAgeData(){
this.ageLoading = true
const resp = await $.post('/platform/theRapyRecuperation/annualAnalysis/getAgeNum', this.pageForm)
if (resp.code === 0) {
let {data} = resp
document.getElementById("ageChart").innerHTML = ''
const config = {
"legend": {
"flipPage": false
},
"label": {
"type": "spider",
"offset": 50
},
"width": $('#ageChart').width(),
"height": $('#ageChart').height(),
"forceFit": false,
"radius": 1,
"colorField": "label",
"angleField": "value",
meta: {
label: {
alias: '年龄结构',
},
value: {
alias: '人数',
}
},
}
const plot = new G2Plot.Pie(document.getElementById("ageChart"), {
data,
...config,
});
plot.render();
this.ageLoading = false
}
},
async getLineTravelData(){
if (this.dualAxisChartInstance) {
this.dualAxisChartInstance.destroy(); // 如果已有实例,先销毁
}
const resp = await $.post('/platform/theRapyRecuperation/annualAnalysis/getLineTravelAndAgeData', this.pageForm)
if (resp.code === 0) {
let {data} = resp
document.getElementById("lineTravelChart").innerHTML = ''
const dualAxes = new G2Plot.DualAxes('lineTravelChart', {
data: [data.uvData, data.transformData],
xField: 'lineName',
yField: ['value', 'count'],
meta: {
value: {
alias: '出行人数',
},
count: {
alias: '年龄段人数',
}
},
yAxis: [
{
min: 0, // 设置Y轴最小值为0
max: null, // 自动计算最大值
title: {
text: '出行人数',
},
},
{
position: 'right',
min: 0,
max: null,
title: {
text: '年龄段人数',
},
},
],
geometryOptions: [
{
geometry: 'column',
columnWidthRatio: 0.4,
color: '#5B8FF9', // 设置柱状图颜色
},
{
geometry: 'line',
seriesField: 'name',
color: ['#5AD8A6', '#E8684A', '#FF9D4D'], // 设置线的颜色
},
],
tooltip: {
shared: true, // 共享提示框
},
});
dualAxes.render();
}
},
doLineTravelOrAgeSwitch(){
this.isLineTravel = !this.isLineTravel
this.lineTravelOrAgeTip = this.isLineTravel ? '出行线路年龄统计' : '出行线路人数统计'
},
async pageData(){
await this.getNumData()
await this.getLotNumData()
await this.getAgeData()
await this.getLineTravelData()
}
},
async created() {
this.regionalNatureList.push(...await getEnumOptions('TheRapyRecuperationProvinceType'))
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -140,11 +140,12 @@ layout("/layouts/platform.html"){
<span>选择路线:</span>
<el-select v-model="pageForm.takePartInLineId" filterable clearable
placeholder="请选择线路"
style="width: 80%" @change="doSearch()">
style="width: 80%"
@change="lineChange(pageForm.takePartInLineId);doSearch()">
<el-option v-for="item in takePartInLines"
:key="item.id"
:key="item.selectId"
:label="item.lineName"
:value="item.id">
:value="item.selectId">
</el-option>
</el-select>
</el-col>
@@ -169,6 +170,20 @@ layout("/layouts/platform.html"){
</el-option>
</el-select>
</el-col>
<el-col :span="12">
<span>出行时间:</span>
<el-select v-model="pageForm.selectId" filterable clearable
placeholder="请选择出行时间"
style="width: 80%" @change="doSearch()">
<el-option v-for="item in linePlayTimes"
:key="item.times"
:label="item.times"
:value="item.selectId">
</el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
@@ -192,7 +207,7 @@ layout("/layouts/platform.html"){
v-for="item in options">
{{ item.label }}
</el-tag>
<el-link :underline="false" @click="pageForm.state='';doSearch()" class="mr10"
<el-link :underline="false" @click="clearState" class="mr10"
style="color: red" v-if="options.length&&pageForm.state">清空
</el-link>
<template
@@ -244,7 +259,12 @@ layout("/layouts/platform.html"){
</el-link>
</template>
<template scope="{row}" v-else-if="column.prop=='isFamily'">
{{row.isFamily?'携带':'未携带'}}{{row.num}}
<el-link v-if="!row.familyNumber" type="primary" @click="openUser(row)">
{{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=='num'">
{{1+row.num}}
@@ -256,9 +276,39 @@ layout("/layouts/platform.html"){
<sapn v-else style="color: #67C23A">暂无</sapn>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="300px">
<el-table-column align="center" header-align="center" label="操作" width="180px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看
<el-dropdown @command="dropdownCommand">
<el-button plain size="mini">
<i class="ti-settings"></i>
<span class="ti-angle-down"></span>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{type:'view',data:row}">
查看
</el-dropdown-item>
<template v-if="!pageForm.regionalNature
||(pageForm.regionalNature==='省内'&&modifyConfig.isSnLine)
||(pageForm.regionalNature==='省外'&&modifyConfig.isSwLine)">
<el-dropdown-item v-if="ifRecall(row)" :command="{type:'recall',data:row}">
撤回
</el-dropdown-item>
<el-dropdown-item v-if="ifEdit(row)" :command="{type:'handle',data:row}">
审核
</el-dropdown-item>
<template v-if="[2750].includes(row.stateId)">
<el-dropdown-item :command="{type:'modify',data:row}">
编辑
</el-dropdown-item>
<el-dropdown-item :command="{type:'delete',data:row}">
删除
</el-dropdown-item>
</template>
</template>
</el-dropdown-menu>
</el-dropdown>
<!--<el-button @click="openView(row)" size="mini" type="primary">查看
</el-button>
<template v-if="!pageForm.regionalNature||
(pageForm.regionalNature==='省内'&&modifyConfig.isSnLine)||
@@ -270,8 +320,7 @@ layout("/layouts/platform.html"){
type="primary">
审核
</el-button>
</template>
</template>-->
</template>
</el-table-column>
</el-table>
@@ -303,17 +352,24 @@ layout("/layouts/platform.html"){
<el-input disabled v-model="formData.auditTime"></el-input>
</el-form-item>
</el-col>
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4"
type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4"
type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row style="margin: 40px 0;text-align: right">
<el-button @click="doAudit(false)" type="danger">退
<el-button @click="$refs.guava.index()">
</el-button>
<el-button @click="doAudit(true)" type="primary">通过
<el-button @click="doAudit(false,true)" type="warning">调整
</el-button>
<el-button @click="doAudit(false,false)" type="danger">拒绝
</el-button>
<el-button @click="doAudit(true,false)" type="primary">通过
</el-button>
</el-row>
</el-form>
@@ -330,7 +386,7 @@ layout("/layouts/platform.html"){
width="50%">
<el-form :model="formData" label-width="130px">
<el-row gutter="20">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="审核人" prop="username">
<el-input disabled v-model="formData.username"></el-input>
@@ -341,20 +397,150 @@ layout("/layouts/platform.html"){
<el-input disabled v-model="formData.auditTime"></el-input>
</el-form-item>
</el-col>
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="doOnekeyAudit(false)">取 消</el-button>
<el-button type="primary" @click="doOnekeyAudit(true)">确 定</el-button>
</span>
<el-button @click="dialogVisible = false">返 回</el-button>
<el-button @click="doOnekeyAudit(false,true)" type="warning">调 整</el-button>
<el-button @click="doOnekeyAudit(false,false)" type="danger">拒 绝</el-button>
<el-button type="primary" @click="doOnekeyAudit(true,false)">通 过</el-button>
</span>
</el-dialog>
<el-dialog
title="修改信息"
:visible.sync="editVisible"
:close-on-click-modal="false"
width="50%">
<el-form :model="editFormData" label-width="120px" :rules="rules" ref="editForm" style="margin-right: 40px">
<el-row>
<el-col span="12">
<el-form-item prop="loginName" label="工号">
<el-input v-model="editFormData.loginName" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="userName" label="姓名">
<el-input v-model="editFormData.userName" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col span="12">
<el-form-item prop="userName" label="手机号">
<el-input v-model="editFormData.mobile" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="userName" label="身份证号">
<el-input v-model="editFormData.idCard" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col span="12">
<el-form-item prop="unionName" label="工会">
<el-input v-model="editFormData.unionName" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="unitName" label="单位">
<el-input v-model="editFormData.unitName" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="prop" :label="labelName">
<template v-if="modifyConfig.familyInfo == 2">
<el-collapse v-model="activeNames">
<el-collapse-item title="点击可展开详细信息" name="1">
<el-card shadow="never">
<el-table :data="editFormData.companionList">
<el-table-column label="姓名" prop="userName"></el-table-column>
<el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="身份证号" prop="idCard"></el-table-column>
<el-table-column label="年龄" prop="age"></el-table-column>
<el-table-column label="床型" prop="bedType">
<template scope="{row}">
{{ row.bedInfo.bedType }}
</template>
</el-table-column>
<el-table-column label="床位" prop="bedNum">
<template scope="{row}">
{{ row.bedInfo.bedNum }}
</template>
</el-table-column>
<el-table-column label="意向拼床人" prop="otherSleepUser">
<template scope="{row}">
{{ row.bedInfo.otherSleepUser ?
row.bedInfo.otherSleepUser : '暂无' }}
</template>
</el-table-column>
<el-table-column label="关系" prop="relation"></el-table-column>
</el-table>
</el-card>
</el-collapse-item>
</el-collapse>
</template>
<template v-else>
<el-input v-model="editFormData.bedType" readonly></el-input>
</template>
</el-form-item>
<!--<el-form-item prop="travelName" label="旅行社">
<el-select v-model="editFormData.agencyId" filterable clearable
placeholder="请选择旅行社"
style="width: 100%">
<el-option v-for="item in agencyLists"
:key="item.id"
:label="item.travelAgencyName"
:value="item.id">
</el-option>
</el-select>
</el-form-item>-->
<el-form-item prop="travelLine" :label="lineLabelName">
<el-select v-model="editFormData.takePartInLineId" filterable clearable
placeholder="请选择线路"
@change="validateLine"
style="width: 100%">
<el-option v-for="item in unionSelectLines"
:key="item.id"
:label="item.lineName + '-' + item.regionalNature + '【' + item.lotName + '】' + '' + item.playStartTime + '至' + item.playEndTime + '' + '' + item.signUpMode + ''"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="specificTime" label="出行时间" v-if="pageForm.state==='3'">
<el-select v-model="editFormData.specificTime" filterable clearable
placeholder="请选择出行时间"
style="width: 100%">
<el-option v-for="item in editSpecificTimes"
:key="item"
:label="item"
:value="item">
</el-option>
</el-select>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editVisible = false">取 消</el-button>
<el-button type="primary" @click="doEdit">确 定</el-button>
</span>
</el-dialog>
</div>
@@ -378,8 +564,9 @@ layout("/layouts/platform.html"){
isTransferIn: false,
},
options: [
{label: "总人数", value: "0"},
{label: "本工会人员(自己线路)", value: "1"},
{label: "本工会人员(其他路线)", value: "2"},
// {label: "本工会人员(其他路线)", value: "2"},
{label: "其他工会人员(选我线路)", value: "3"}
],
unionOptions: [],
@@ -403,20 +590,151 @@ layout("/layouts/platform.html"){
// {prop: 'userNature', label: '人员性质'},
{prop: 'isFamily', label: '是否携带家属'},
// {prop: 'num', label: '人数'},
{prop: 'isTransferIn', label: '是否转入转出', sortable: true},
// {prop: 'isTransferIn', label: '是否转入转出', sortable: true},
{prop: 'linePlayTime', label: '出行时间', sortable: true},
{prop: 'stateId', label: '审核状态', sortable: true},
],
modifyConfig: {}
modifyConfig: {},
linePlayTimes: [],
editVisible: false,
editFormData: {
companionList: []
},
rules: {
loginName: [{required: true, message: '请填写工号', trigger: ['blur', 'change']}],
userName: [{required: true, message: '请填写姓名', trigger: ['blur', 'change']}],
unionName: [{required: true, message: '请选择工会', trigger: ['blur', 'change']}],
unitName: [{required: true, message: '请选择单位', trigger: ['blur', 'change']}],
// travelName: [{required: true, message: '请选择旅行社', trigger: ['blur', 'change']}],
specificTime: [{required: true, message: '请选择出行时间', trigger: ['blur', 'change']}],
// travelLine: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
editSpecificTimes: [],
labelName: '',
unionSelectLines: [],
lineLabelName: '',
activeNames:[],
}
},
components: {
'enroll-info': httpVueLoader('/components/theRapyRecuperation/Enrollinfo.vue'),
'enroll-info': httpVueLoader('/components/theRapyRecuperation/Enrollinfo.vue?v=1.0.1'),
'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue')
},
methods: {
async doOnekeyAudit(flag) {
const confirm = await this.$confirm('您确定要一键审核您所勾选的信息吗, 是否继续?', '提示', {
async validateLine() {
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo'
, {enroll: JSON.stringify(this.editFormData)})
if (resp.code !== 0) {
this.$message.warning(resp.msg)
this.editFormData.takePartInLineId = ''
}
},
dropdownCommand(command) {
const {type, data} = command
if (type === 'view') {
this.openView(data)
} else if (type === 'recall') {
this.doRecall(data)
} else if (type === 'handle') {
this.openEdit(data)
} else if (type === 'modify') {
this.openModify(data)
} else if (type === 'delete') {
this.doDelete(data)
}
},
async doDelete(row) {
this.$confirm("您确定要删除【<span style='color: red'>" + row.userName + "</span>】的此条报名信息吗?", '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
dangerouslyUseHTMLString: true,
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/doDeleteMyEnrollInfoById/' + row.id)
if (resp.code === 0) {
await this.doSearch()
this.$message.success('删除成功')
await this.getApplyNumAudit();
} else {
this.$message.warning(resp.msg)
}
}
}
})
},
async openModify(row) {
this.editFormData = {};
const resp = await $.get("/platform/theRapyRecuperation/TheRapyAudit/findOne", {id: row.id})
if (resp.code === 0) {
this.editFormData = {...resp.data.viewData}
if (this.modifyConfig.familyInfo == 2) {
this.editFormData.companionList = resp.data.viewData.companionList
this.labelName = "家属信息"
} else {
this.editFormData.bedType = resp.data.viewData.familyNumber
this.labelName = "家属数量"
}
}
if (row.takePartInBaseManagementId) {
this.editSpecificTime(row.takePartInBaseManagementId);
this.lineLabelName = "酒店"
} else if (row.takePartInLineId) {
this.lineLabelName = '线路'
}
this.editVisible = true
},
async doEdit() {
this.$refs['editForm'].validate().then(async () => {
const confirm = await this.$confirm('您确定要修改这位老师的报名信息吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
if (!this.editFormData.takePartInLineId && !this.editFormData.takePartInBaseManagementId) {
this.$message.warning('请选择线路')
return
}
const resp = await $.post('/platform/theRapyRecuperation/user/query/doEdit', this.editFormData)
if (resp.code === 0) {
this.$notify.success(resp.msg)
this.editVisible = false
await this.doSearch();
} else {
this.$notify.error(resp.msg)
}
}
})
},
async lineChange(val) {
this.pageForm.selectId = '';
const data = this.takePartInLines.find(v => v.selectId === val)
if (!data) {
return
}
const resp = await $.get('/platform/theRapyRecuperation/TheRapyXghAudit/getLinePlayTimeByLineId', {
lineId: data.id,
year: this.pageForm.year,
signUpMode: 1,
})
if (resp.code === 0) {
this.linePlayTimes = resp.data
}
},
async doOnekeyAudit(flag, adjustment) {
let msg = '';
if (adjustment && !flag) {
msg = '您确定要一键【调整】您所勾选的报名信息吗,调整后该报名信息将不会在审核列表中展示, 是否继续?'
} else if (!adjustment && !flag) {
msg = '您确定要一键【拒绝】您所勾选的报名信息吗,是否继续?'
} else if (!adjustment && flag) {
msg = '您确定要一键【通过】您所勾选的报名信息吗,是否继续?'
}
const confirm = await this.$confirm(msg, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
@@ -425,13 +743,14 @@ layout("/layouts/platform.html"){
const resp = await $.post(loc() + "/doOnekeyAudit", {
ids: JSON.stringify(this.tableSelection),
flag: flag,
adjustment: adjustment,
auditOpinion: this.formData.auditOpinion
})
if (resp.data===0){
if (resp.code === 0) {
this.$notify.success({title: '成功', message: resp.msg});
await this.doSearch()
this.dialogVisible = false
}else {
} else {
this.$notify.warning({title: '失败', message: resp.msg});
this.dialogVisible = false
}
@@ -468,7 +787,8 @@ layout("/layouts/platform.html"){
selfUnionId,
takePartInUnionId
} = row
if ((stateId === 2715 || stateId === 2720 || stateId === 2750) && selfUnionId === "${@shiro.getPrincipalProperty('unit').getUnionid()}") {
// if ((stateId === 2715 || stateId === 2720 || stateId === 2750) && selfUnionId === "${@shiro.getPrincipalProperty('unit').getUnionid()}") {
if ((stateId === 2715 || stateId === 2750) && selfUnionId === "${@shiro.getPrincipalProperty('unit').getUnionid()}") {
return true
} else if ((stateId === 2725 || stateId === 2750) && takePartInUnionId === "${@shiro.getPrincipalProperty('unit').getUnionid()}") {
return true
@@ -484,16 +804,24 @@ layout("/layouts/platform.html"){
})
if (confirm === "confirm") {
const resp = await $.post(loc() + "/doRecall", {id: row.id})
if (resp.code === 0){
if (resp.code === 0) {
this.$notify.success({title: '成功', message: resp.msg});
await this.doSearch()
}else {
} else {
this.$notify.warning({title: '失败', message: resp.msg});
}
}
},
async doAudit(flag) {
const confirm = await this.$confirm('您确定要' + (flag ? '通过' : '退回') + '吗, 是否继续?', '提示', {
async doAudit(flag, adjustment) {
let msg = '';
if (adjustment && !flag) {
msg = '您确定要【调整】该报名信息吗,调整后该报名信息将不会在审核列表中展示, 是否继续?'
} else if (!adjustment && !flag) {
msg = '您确定要【拒绝】该报名信息吗,是否继续?'
} else if (!adjustment && flag) {
msg = '您确定要【通过】该报名信息吗,是否继续?'
}
const confirm = await this.$confirm(msg, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
@@ -501,15 +829,16 @@ layout("/layouts/platform.html"){
if (confirm === "confirm") {
const resp = await $.post(loc() + "/doAudit", {
flag: flag,
adjustment: adjustment,
id: this.formData.id,
isTransferIn: this.formData.isTransferIn,
auditOpinion: this.formData.auditOpinion
})
if (resp.code === 0){
if (resp.code === 0) {
this.$notify.success({title: '成功', message: resp.msg});
this.doSearch()
this.$refs.guava.index()
}else {
} else {
this.$notify.warning({title: '失败', message: resp.msg});
}
}
@@ -568,7 +897,7 @@ layout("/layouts/platform.html"){
this.unionOptions = data
},
async getXlByUnion() {
const {data} = await $.post(loc() + "/getXlByUnion", {
const {data} = await $.post(loc() + "/getXlByUnionAudit", {
unionId: this.pageForm.unionId,
year: this.pageForm.year,
regionalNature: this.pageForm.regionalNature,
@@ -597,12 +926,18 @@ layout("/layouts/platform.html"){
async getApplyNumAudit() {
const {data} = await $.post(loc() + "/getApplyNumAudit", this.pageForm)
this.options = [
{label: "总人数" + (data.count1 + data.count3) + "人", value: "0"},
{label: "本工会人员(自己线路)" + data.count1 + "人", value: "1"},
{label: "本工会人员(其他路线)" + data.count2 + "人", value: "2"},
// {label: "本工会人员(其他路线)" + data.count2 + "人", value: "2"},
{label: "其他工会人员(选我线路)" + data.count3 + "人", value: "3"}
]
},
async clearState() {
this.pageForm.state = ''
this.pageForm.unionId = ''
await this.doSearch()
},
async doSearch() {
this.pageForm.pageNumber = 1;
this.pageData();
@@ -615,12 +950,22 @@ layout("/layouts/platform.html"){
this.modifyConfig = res.data
}
},
async getUnionSelectLine() {
const resp = await $.post('/platform/theRapyRecuperation/user/query/getUnionSelectLine', {
year: this.pageForm.year,
signUpMode: 1,
})
if (resp.code === 0) {
this.unionSelectLines = resp.data
}
},
},
async created() {
await this.getBmUserUnion()
await this.getModifyConfig()
this.takePartInLines = await this.getXlByUnion()
await this.doSearch()
await this.getUnionSelectLine()
}
})
</script>
@@ -0,0 +1,806 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style xmlns="">
.query-row {
height: 70px;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
}
.query-row .el-col {
overflow: hidden;
}
.query-row:not(:last-child) {
border-bottom: 1px dashed rgb(230, 230, 230);
}
.query-row-title {
width: 120px;
}
.el-table-container {
padding-top: 0;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<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>&emsp;&emsp;度:</span>
<el-date-picker
v-model="pageForm.year"
type="year"
value-format="yyyy"
placeholder="选择年"
style="width: 80%" @change="doSearch">
</el-date-picker>
</el-col>
<el-col :span="12">
<span>查询类型:</span>
<el-input placeholder="请输入内容" clearable
v-model="pageForm.searchKeyword"
style="width: 80%" @keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend"
placeholder="查询类型"
style="width: 110px;">
<el-option label="姓名" value="userName"></el-option>
<el-option label="工号" value="loginName"></el-option>
</el-select>
<el-button slot="append" @click="doSearch">搜索</el-button>
</el-input>
</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.unionId" placeholder="请选择所属工会"
@change="unionChange"
filterable clearable style="width: 80%"
:disabled="unionDisabled">
<el-option
v-for="item in unionOptions"
:key="item.id"
:label="item.unionname"
:value="item.id">
</el-option>
</el-select>
</el-col>
<el-col :span="12">
<span>所属单位:</span>
<el-select v-model="pageForm.unitId" placeholder="请选择所属单位"
@change="doSearch"
filterable clearable style="width: 80%"
:disabled="unitDisabled">
<el-option
v-for="item in unitOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</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>&ensp;&ensp;社:</span>
<el-select v-model="pageForm.agencyId" filterable clearable
placeholder="请选择旅行社"
style="width: 80%">
<el-option v-for="item in agencyLists"
:key="item.id"
:label="item.travelAgencyName"
:value="item.id">
</el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="审核列表" :app="this">
<template #label_end>
</template>
<template #func>
<el-tag :effect="pageForm.state===item.value?'dark':'plain'"
:key="item.value"
:type="item.label"
@click="checkState(item.value)"
style="margin-right: 10px;cursor: pointer;font-size: 15px"
v-for="item in options">
{{ item.label }}
</el-tag>
<el-link :underline="false" @click="clearState" class="mr10"
style="color: red" v-if="options.length&&pageForm.state">清空
</el-link>
<template v-if="modifyConfig.travelAudit">
<el-button type="primary" size="small" class="mr10"
@click="openOnekeyAudit">一键审核
</el-button>
<el-radio-group @change="doSearch()" size="small"
v-model="pageForm.isAudit">
<el-radio-button label="">全部</el-radio-button>
<el-radio-button label="true">已审核</el-radio-button>
<el-radio-button label="false">未审核</el-radio-button>
</el-radio-group>
</template>
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%"
row-key="id" @sort-change="pageOrder"
v-loading="tableLoading"
@selection-change="handleSelectionChange">
<el-table-column
:selectable="ifEdit"
type="selection"
width="55">
</el-table-column>
<el-table-column align="center" header-align="center" type="index"
:index="indexMethod" label="序号"
width="80px"></el-table-column>
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
>
<template scope="{row}" v-if="column.prop=='isTransferIn'">
<sapn v-if="row.takePartInUnionId!=unionId">转出</sapn>
<sapn v-else-if="row.selfUnionId!=unionId">转入</sapn>
<sapn v-else></sapn>
</template>
<template scope="{row}" v-else-if="column.prop=='isFamily'">
<el-link v-if="!row.familyNumber" type="primary" @click="openUser(row)">
{{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=='num'">
{{1+row.num}}
</template>
<template scope="{row}" v-else-if="column.prop=='stateId'">
<span v-if="row.stateId">
<vi-table-state :state="row"></vi-table-state>
</span>
<sapn v-else style="color: #67C23A">暂无</sapn>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="180px">
<template scope="{row}">
<el-dropdown @command="dropdownCommand">
<el-button plain size="mini">
<i class="ti-settings"></i>
<span class="ti-angle-down"></span>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{type:'view',data:row}">
查看
</el-dropdown-item>
<template v-if="modifyConfig.travelAudit">
<el-dropdown-item v-if="ifRecall(row)" :command="{type:'recall',data:row}">
撤回
</el-dropdown-item>
<el-dropdown-item v-if="ifEdit(row)" :command="{type:'handle',data:row}">
审核
</el-dropdown-item>
<template v-if="[2750].includes(row.stateId)">
<el-dropdown-item :command="{type:'modify',data:row}">
编辑
</el-dropdown-item>
<el-dropdown-item :command="{type:'delete',data:row}">
删除
</el-dropdown-item>
</template>
</template>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #view>
<enroll-info ref="viewEnrollInfo" :union_id="unionId"></enroll-info>
</template>
<template #public>
<line-info ref="viewLineInfo"></line-info>
</template>
<template #edit>
<enroll-info ref="editEnrollInfo">
<template #handle>
<el-tab-pane label="审核" name="audit">
<el-form :model="formData" label-width="130px">
<el-row gutter="20">
<el-col :span="12">
<el-form-item label="审核人" prop="username">
<el-input disabled v-model="formData.username"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间" prop="auditTime">
<el-input disabled v-model="formData.auditTime"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4"
type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row style="margin: 40px 0;text-align: right">
<el-button @click="$refs.guava.index()">返回
</el-button>
<el-button @click="doAudit(false,true)" type="warning">调整
</el-button>
<el-button @click="doAudit(false,false)" type="danger">拒绝
</el-button>
<el-button @click="doAudit(true,false)" type="primary">通过
</el-button>
</el-row>
</el-form>
</el-tab-pane>
</template>
</enroll-info>
</template>
</guava>
<el-dialog
title="提示"
:visible.sync="dialogVisible"
width="50%">
<el-form :model="formData" label-width="130px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="审核人" prop="username">
<el-input disabled v-model="formData.username"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间" prop="auditTime">
<el-input disabled v-model="formData.auditTime"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">返 回</el-button>
<el-button @click="doOnekeyAudit(false,true)" type="warning">调 整</el-button>
<el-button @click="doOnekeyAudit(false,false)" type="danger">拒 绝</el-button>
<el-button type="primary" @click="doOnekeyAudit(true,false)">通 过</el-button>
</span>
</el-dialog>
<el-dialog
title="修改信息"
:visible.sync="editVisible"
:close-on-click-modal="false"
width="50%">
<el-form :model="editFormData" label-width="120px" :rules="rules" ref="editForm" style="margin-right: 40px">
<el-row>
<el-col span="12">
<el-form-item prop="loginName" label="工号">
<el-input v-model="editFormData.loginName" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="userName" label="姓名">
<el-input v-model="editFormData.userName" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col span="12">
<el-form-item prop="userName" label="手机号">
<el-input v-model="editFormData.mobile" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="userName" label="身份证号">
<el-input v-model="editFormData.idCard" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col span="12">
<el-form-item prop="unionName" label="工会">
<el-input v-model="editFormData.unionName" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="unitName" label="单位">
<el-input v-model="editFormData.unitName" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="prop" :label="labelName">
<template v-if="modifyConfig.familyInfo == 2">
<el-collapse v-model="activeNames">
<el-collapse-item title="点击可展开详细信息" name="1">
<el-card shadow="never">
<el-table :data="editFormData.companionList">
<el-table-column label="姓名" prop="userName"></el-table-column>
<el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="身份证号" prop="idCard" show-overflow-tooltip></el-table-column>
<el-table-column label="年龄" prop="age"></el-table-column>
<el-table-column label="床型" prop="bedType">
<template scope="{row}">
{{ row.bedInfo.bedType }}
</template>
</el-table-column>
<el-table-column label="床位" prop="bedNum">
<template scope="{row}">
{{ row.bedInfo.bedNum }}
</template>
</el-table-column>
<el-table-column label="意向拼床人" prop="otherSleepUser">
<template scope="{row}">
{{ row.bedInfo.otherSleepUser ?
row.bedInfo.otherSleepUser : '暂无' }}
</template>
</el-table-column>
<el-table-column label="关系" prop="relation"></el-table-column>
</el-table>
</el-card>
</el-collapse-item>
</el-collapse>
</template>
<template v-else>
<el-input v-model="editFormData.bedType" readonly></el-input>
</template>
</el-form-item>
<el-form-item prop="travelName" label="旅行社">
<el-select v-model="editFormData.agencyId" filterable clearable
placeholder="请选择旅行社"
style="width: 100%">
<el-option v-for="item in agencyLists"
:key="item.id"
:label="item.travelAgencyName"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editVisible = false">取 消</el-button>
<el-button type="primary" @click="doEdit">确 定</el-button>
</span>
</el-dialog>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
unionDisabled: false,
unitDisabled: false,
unionId: "${@shiro.getPrincipalProperty('unit').getUnionid()}",
dialogVisible: false,
tableSelection: [],
formData: {
id: "",
username: "${@shiro.getPrincipalProperty('username')}",
loginName: "${@shiro.getPrincipalProperty('loginname')}",
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
auditOpinion: "",
isTransferIn: false,
},
options: [
{label: "总人数", value: "0"},
],
unionOptions: [],
unitOptions: [],
takePartInLines: [],
pageForm: {
lotId: '',
regionalNature: '',
isAudit: "",
state: "",
year: moment().format('YYYY'),
searchName: "userName",
},
tableColumns: [
{prop: 'loginName', label: '工号'},
{prop: 'userName', label: '姓名'},
{prop: 'unitName', label: '单位', sortable: true},
{prop: 'unionName', label: '工会', sortable: true},
{prop: 'travelAgencyName', label: '旅行社', sortable: true},
{prop: 'isFamily', label: '是否携带家属'},
{prop: 'stateId', label: '审核状态', sortable: true},
],
modifyConfig: {},
editVisible: false,
editFormData: {
companionList: []
},
rules: {
loginName: [{required: true, message: '请填写工号', trigger: ['blur', 'change']}],
userName: [{required: true, message: '请填写姓名', trigger: ['blur', 'change']}],
unionName: [{required: true, message: '请选择工会', trigger: ['blur', 'change']}],
unitName: [{required: true, message: '请选择单位', trigger: ['blur', 'change']}],
travelName: [{required: true, message: '请选择旅行社', trigger: ['blur', 'change']}],
specificTime: [{required: true, message: '请选择出行时间', trigger: ['blur', 'change']}],
},
editSpecificTimes: [],
labelName: '',
unionSelectLines: [],
lineLabelName: '',
activeNames:[],
agencyLists: [],
}
},
components: {
'enroll-info': httpVueLoader('/components/theRapyRecuperation/Enrollinfo.vue?v=1.0.1'),
'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue')
},
methods: {
async getAgencyList() {
const {data} = await $.post("/platform/theRapyRecuperation/travelAgency/selectTravelAgencyByYears", {
startYear: this.pageForm.startYear,
endYear: this.pageForm.endYear
})
this.agencyLists = data
},
dropdownCommand(command) {
const {type, data} = command
if (type === 'view') {
this.openView(data)
} else if (type === 'recall') {
this.doRecall(data)
} else if (type === 'handle') {
this.openEdit(data)
} else if (type === 'modify') {
this.openModify(data)
} else if (type === 'delete') {
this.doDelete(data)
}
},
async doDelete(row) {
this.$confirm("您确定要删除【<span style='color: red'>" + row.userName + "</span>】的此条报名信息吗?", '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
dangerouslyUseHTMLString: true,
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/doDeleteMyEnrollInfoById/' + row.id)
if (resp.code === 0) {
await this.doSearch()
this.$message.success('删除成功')
await this.getApplyNumAudit();
} else {
this.$message.warning(resp.msg)
}
}
}
})
},
async openModify(row) {
this.editFormData = {};
const resp = await $.get("/platform/theRapyRecuperation/TheRapyAudit/findOne", {id: row.id})
if (resp.code === 0) {
this.editFormData = {...resp.data.viewData}
if (this.modifyConfig.familyInfo == 2) {
this.editFormData.companionList = resp.data.viewData.companionList
this.labelName = "家属信息"
} else {
this.editFormData.bedType = resp.data.viewData.familyNumber
this.labelName = "家属数量"
}
}
if (row.takePartInBaseManagementId) {
this.editSpecificTime(row.takePartInBaseManagementId);
this.lineLabelName = "酒店"
} else if (row.takePartInLineId) {
this.lineLabelName = '线路'
}
this.editVisible = true
},
async doEdit() {
this.$refs['editForm'].validate().then(async () => {
const confirm = await this.$confirm('您确定要修改这位老师的报名信息吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
if (!this.editFormData.takePartInLineId && !this.editFormData.takePartInBaseManagementId) {
this.$message.warning('请选择线路')
return
}
const resp = await $.post('/platform/theRapyRecuperation/user/query/doEdit', this.editFormData)
if (resp.code === 0) {
this.$notify.success(resp.msg)
this.editVisible = false
await this.doSearch();
} else {
this.$notify.error(resp.msg)
}
}
})
},
async doOnekeyAudit(flag, adjustment) {
let msg = '';
if (adjustment && !flag) {
msg = '您确定要一键【调整】您所勾选的报名信息吗,调整后该报名信息将不会在审核列表中展示, 是否继续?'
} else if (!adjustment && !flag) {
msg = '您确定要一键【拒绝】您所勾选的报名信息吗,是否继续?'
} else if (!adjustment && flag) {
msg = '您确定要一键【通过】您所勾选的报名信息吗,是否继续?'
}
const confirm = await this.$confirm(msg, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post(loc() + "/doOnekeyAudit", {
ids: JSON.stringify(this.tableSelection),
flag: flag,
adjustment: adjustment,
auditOpinion: this.formData.auditOpinion
})
if (resp.code === 0) {
this.$notify.success({title: '成功', message: resp.msg});
await this.doSearch()
this.dialogVisible = false
} else {
this.$notify.warning({title: '失败', message: resp.msg});
this.dialogVisible = false
}
}
},
async openOnekeyAudit() {
if (this.tableSelection.length === 0) {
this.$notify.warning({title: '警告', message: "请您先在左侧勾选在审核"});
return
}
this.dialogVisible = true
},
handleSelectionChange(val) {
this.tableSelection = val.map(v => v.id);
},
ifEdit(row) {
const {
stateId,
selfUnionId,
takePartInUnionId
} = row
if (stateId === 2710 && selfUnionId === "${@shiro.getPrincipalProperty('unit').getUnionid()}") {
return true
} else if (stateId === 2720 && takePartInUnionId === "${@shiro.getPrincipalProperty('unit').getUnionid()}") {
return true
} else {
return false
}
},
ifRecall(row) {
const {
stateId,
selfUnionId,
takePartInUnionId
} = row
// if ((stateId === 2715 || stateId === 2720 || stateId === 2750) && selfUnionId === "${@shiro.getPrincipalProperty('unit').getUnionid()}") {
if ((stateId === 2715 || stateId === 2750) && selfUnionId === "${@shiro.getPrincipalProperty('unit').getUnionid()}") {
return true
} else if ((stateId === 2725 || stateId === 2750) && takePartInUnionId === "${@shiro.getPrincipalProperty('unit').getUnionid()}") {
return true
} else {
return false
}
},
async doRecall(row) {
const confirm = await this.$confirm('您确定要撤回吗, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post(loc() + "/doRecall", {id: row.id})
if (resp.code === 0) {
this.$notify.success({title: '成功', message: resp.msg});
await this.doSearch()
} else {
this.$notify.warning({title: '失败', message: resp.msg});
}
}
},
async doAudit(flag, adjustment) {
let msg = '';
if (adjustment && !flag) {
msg = '您确定要【调整】该报名信息吗,调整后该报名信息将不会在审核列表中展示, 是否继续?'
} else if (!adjustment && !flag) {
msg = '您确定要【拒绝】该报名信息吗,是否继续?'
} else if (!adjustment && flag) {
msg = '您确定要【通过】该报名信息吗,是否继续?'
}
const confirm = await this.$confirm(msg, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post(loc() + "/doAudit", {
flag: flag,
adjustment: adjustment,
id: this.formData.id,
isTransferIn: this.formData.isTransferIn,
auditOpinion: this.formData.auditOpinion
})
if (resp.code === 0) {
this.$notify.success({title: '成功', message: resp.msg});
this.doSearch()
this.$refs.guava.index()
} else {
this.$notify.warning({title: '失败', message: resp.msg});
}
}
},
openEdit(row) {
this.$set(this.formData, "isTransferIn", row.isTransferIn)
this.$set(this.formData, "id", row.id)
this.$refs.guava.edit()
this.$refs.editEnrollInfo.openAudit(row.id, 'audit')
},
openView(row) {
this.$refs.guava.view()
this.$refs.viewEnrollInfo.openView(row.id)
},
async checkState(type) {
this.pageForm.state = type
this.$set(this.pageForm, "unionIds", [])
this.$set(this.pageForm, "unionId", null)
await this.getBmUserUnion()
if (type === "1") {
this.$set(this.pageForm, "unionId", this.unionId)
this.unionDisabled = true
} else if (type === "2") {
this.unionDisabled = true
this.unitDisabled = true
} else if (type === "3") {
this.unionDisabled = false
this.unitDisabled = false
this.unionOptions = this.unionOptions.filter(v => v.id !== this.unionId)
} else {
this.unionDisabled = false
this.unitDisabled = false
}
await this.unionChange()
await this.doSearch()
},
async unionChange() {
this.pageForm.unitId = null
this.unitOptions = await getUnits(this.pageForm.unionId)
await this.doSearch()
},
/**
* 查询所有报名人员的工会
* @returns {Promise<void>}
*/
async getBmUserUnion() {
const {data} = await $.post(loc() + "/getBmUserUnion")
this.unionOptions = data
},
pageData() {
sublime.showLoadingbar();
this.tableLoading = true
const pageForm = clone(this.pageForm)
pageForm.states = JSON.stringify(pageForm.states)
$.post(loc() + "/pageData", pageForm, (data) => {
sublime.closeLoadingbar();
this.tableLoading = false
if (data.code === 0) {
this.tableData = data.data.list;
this.pageForm.totalCount = data.data.totalCount;
} else {
this.$message.error(data.msg);
}
}, "json");
},
async getApplyNumAudit() {
const {data} = await $.post(loc() + "/getApplyNumAudit", this.pageForm)
this.options = [
{label: "总人数" + (data.count1) + "人", value: "0"},
]
},
async clearState() {
this.pageForm.state = ''
this.pageForm.unionId = ''
await this.doSearch()
},
async doSearch() {
this.pageForm.pageNumber = 1;
this.pageData();
await this.getApplyNumAudit()
},
async getModifyConfig() {
const res = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
if (res.code === 0) {
this.modifyConfig = res.data
}
},
},
async created() {
await this.getBmUserUnion()
await this.getAgencyList()
await this.getModifyConfig()
await this.doSearch()
}
})
</script>
<!--#
}
#-->
@@ -63,24 +63,24 @@ layout("/layouts/platform.html"){
</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">-->
<!-- <span>报名路线:</span>-->
<!-- <el-tag :effect="pageForm.state===item.value?'dark':'plain'"-->
<!-- :key="item.value"-->
<!-- :type="item.label"-->
<!-- @click="checkState(item.value)"-->
<!-- style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;font-size: 15px"-->
<!-- v-for="item in options">-->
<!-- {{ item.label }}-->
<!-- </el-tag>-->
<!-- <el-link :underline="false" @click="pageForm.state='';doSearch()"-->
<!-- style="color: red" v-if="options.length&&pageForm.state">清空-->
<!-- </el-link>-->
<!-- <span style="color: red;font-size: 12px;margin-left: 10px">温馨提示:其他工会选我线路,所在工会审核过后,才显示数量</span>-->
<!-- </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">-->
<!-- <span>报名路线:</span>-->
<!-- <el-tag :effect="pageForm.state===item.value?'dark':'plain'"-->
<!-- :key="item.value"-->
<!-- :type="item.label"-->
<!-- @click="checkState(item.value)"-->
<!-- style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;font-size: 15px"-->
<!-- v-for="item in options">-->
<!-- {{ item.label }}-->
<!-- </el-tag>-->
<!-- <el-link :underline="false" @click="pageForm.state='';doSearch()"-->
<!-- style="color: red" v-if="options.length&&pageForm.state">清空-->
<!-- </el-link>-->
<!-- <span style="color: red;font-size: 12px;margin-left: 10px">温馨提示:其他工会选我线路,所在工会审核过后,才显示数量</span>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-row align="middle" class="query-row" type="flex">
<el-col class="query-row-title"></el-col>
@@ -140,7 +140,7 @@ layout("/layouts/platform.html"){
<span>选择路线:</span>
<el-select v-model="pageForm.takePartInLineId" filterable clearable
placeholder="请选择线路"
style="width: 80%" @change="doSearch()">
style="width: 80%" @change="lineChange">
<el-option v-for="item in takePartInLines"
:key="item.id"
:label="item.lineName"
@@ -169,6 +169,20 @@ layout("/layouts/platform.html"){
</el-option>
</el-select>
</el-col>
<el-col :span="12">
<span>出行时间:</span>
<el-select v-model="pageForm.selectId" filterable clearable
placeholder="请选择出行时间"
style="width: 80%" @change="playChange">
<el-option v-for="item in linePlayTimes"
:key="item.times"
:label="item.times"
:value="item.selectId">
</el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
@@ -179,13 +193,23 @@ layout("/layouts/platform.html"){
<el-card shadow="never" class="mt10">
<table-tool label="审核列表" :app="this">
<template #label_end>
<!-- <span style="color: red;margin-left: 10px">温馨提示:省内线路不需要审核</span>-->
</template>
<template #func
v-if="!pageForm.regionalNature||
(pageForm.regionalNature==='省内'&&modifyConfig.isSnLine)||
(pageForm.regionalNature==='省外'&&modifyConfig.isSwLine)">
<el-button size="small"
style="background-color: #fff;border-color: #b3d8ff;color: #1867b0;font-size: 15px"
>{{selectLine.lineName?selectLine.lineName:'全部'}}线路的人数:{{lineSignNumber}}人
</el-button>
<!-- <span v-if="pageForm.takePartInLineId" style="margin-left: 10px">-->
<!-- {{selectLine.lineName}}线路的报名人数:{{lineSignNumber}}-->
<!-- </span>-->
<el-button type="primary" size="small" class="mr10"
@click="openOnekeyAudit">一键审核
</el-button>
@@ -229,7 +253,12 @@ layout("/layouts/platform.html"){
</el-link>
</template>
<template scope="{row}" v-else-if="column.prop=='isFamily'">
{{row.isFamily?'携带':'未携带'}}{{row.num}}
<el-link v-if="!row.familyNumber" type="primary" @click="openUser(row)">
{{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=='num'">
{{1+row.num}}
@@ -241,9 +270,40 @@ layout("/layouts/platform.html"){
<sapn v-else style="color: #67C23A">暂无</sapn>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="300px">
<el-table-column align="center" header-align="center" label="操作" width="180px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看
<el-dropdown @command="dropdownCommand">
<el-button plain size="mini">
<i class="ti-settings"></i>
<span class="ti-angle-down"></span>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{type:'view',data:row}">
查看
</el-dropdown-item>
<template v-if="!pageForm.regionalNature
||(pageForm.regionalNature==='省内'&&modifyConfig.isSnLine)
||(pageForm.regionalNature==='省外'&&modifyConfig.isSwLine)">
<el-dropdown-item v-if="ifRecall(row)" :command="{type:'recall',data:row}">
撤回
</el-dropdown-item>
<el-dropdown-item v-if="ifEdit(row)" :command="{type:'handle',data:row}">
审核
</el-dropdown-item>
<template v-if="[2750].includes(row.stateId)">
<el-dropdown-item :command="{type:'modify',data:row}">
编辑
</el-dropdown-item>
<el-dropdown-item :command="{type:'delete',data:row}">
删除
</el-dropdown-item>
</template>
</template>
</el-dropdown-menu>
</el-dropdown>
<!--<el-button @click="openView(row)" size="mini" type="primary">查看
</el-button>
<template v-if="!pageForm.regionalNature||
(pageForm.regionalNature==='省内'&&modifyConfig.isSnLine)||
@@ -255,7 +315,7 @@ layout("/layouts/platform.html"){
type="primary">
审核
</el-button>
</template>
</template>-->
</template>
</el-table-column>
@@ -288,17 +348,24 @@ layout("/layouts/platform.html"){
<el-input disabled v-model="formData.auditTime"></el-input>
</el-form-item>
</el-col>
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4"
type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
</el-row>
<el-row gutter="20">
<el-col :span="24">
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4"
type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row style="margin: 40px 0;text-align: right">
<el-button @click="doAudit(false)" type="danger">退
<el-button @click="$refs.guava.index()">
</el-button>
<el-button @click="doAudit(true)" type="primary">通过
<el-button @click="doAudit(false,true)" type="warning">调整
</el-button>
<el-button @click="doAudit(false,false)" type="danger">拒绝
</el-button>
<el-button @click="doAudit(true,false)" type="primary">通过
</el-button>
</el-row>
</el-form>
@@ -308,7 +375,6 @@ layout("/layouts/platform.html"){
</template>
</guava>
<el-dialog
title="提示"
:visible.sync="dialogVisible"
@@ -326,20 +392,148 @@ layout("/layouts/platform.html"){
<el-input disabled v-model="formData.auditTime"></el-input>
</el-form-item>
</el-col>
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
</el-row>
<el-row gutter="20">
<el-col :span="24">
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="doOnekeyAudit(false)">取 消</el-button>
<el-button type="primary" @click="doOnekeyAudit(true)">确 定</el-button>
</span>
<el-button @click="dialogVisible = false">返 回</el-button>
<el-button @click="doOnekeyAudit(false,true)" type="warning">调 整</el-button>
<el-button @click="doOnekeyAudit(false,false)" type="danger">拒 绝</el-button>
<el-button type="primary" @click="doOnekeyAudit(true,false)">通 过</el-button>
</span>
</el-dialog>
<el-dialog
title="修改信息"
:visible.sync="editVisible"
:close-on-click-modal="false"
width="50%">
<el-form :model="editFormData" label-width="120px" :rules="rules" ref="editForm" style="margin-right: 40px">
<el-row>
<el-col span="12">
<el-form-item prop="loginName" label="工号">
<el-input v-model="editFormData.loginName" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="userName" label="姓名">
<el-input v-model="editFormData.userName" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col span="12">
<el-form-item prop="userName" label="手机号">
<el-input v-model="editFormData.mobile" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="userName" label="身份证号">
<el-input v-model="editFormData.idCard" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col span="12">
<el-form-item prop="unionName" label="工会">
<el-input v-model="editFormData.unionName" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="unitName" label="单位">
<el-input v-model="editFormData.unitName" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="prop" :label="labelName">
<template v-if="modifyConfig.familyInfo == 2">
<el-collapse v-model="activeNames">
<el-collapse-item title="点击可展开详细信息" name="1">
<el-card shadow="never">
<el-table :data="editFormData.companionList">
<el-table-column label="姓名" prop="userName"></el-table-column>
<el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="身份证号" prop="idCard"></el-table-column>
<el-table-column label="年龄" prop="age"></el-table-column>
<el-table-column label="床型" prop="bedType">
<template scope="{row}">
{{ row.bedInfo.bedType }}
</template>
</el-table-column>
<el-table-column label="床位" prop="bedNum">
<template scope="{row}">
{{ row.bedInfo.bedNum }}
</template>
</el-table-column>
<el-table-column label="意向拼床人" prop="otherSleepUser">
<template scope="{row}">
{{ row.bedInfo.otherSleepUser ?
row.bedInfo.otherSleepUser : '暂无' }}
</template>
</el-table-column>
<el-table-column label="关系" prop="relation"></el-table-column>
</el-table>
</el-card>
</el-collapse-item>
</el-collapse>
</template>
<template v-else>
<el-input v-model="editFormData.bedType" readonly></el-input>
</template>
</el-form-item>
<!--<el-form-item prop="travelName" label="旅行社">
<el-select v-model="editFormData.agencyId" filterable clearable
placeholder="请选择旅行社"
style="width: 100%">
<el-option v-for="item in agencyLists"
:key="item.id"
:label="item.travelAgencyName"
:value="item.id">
</el-option>
</el-select>
</el-form-item>-->
<el-form-item prop="travelLine" :label="lineLabelName">
<el-select v-model="editFormData.takePartInLineId" filterable clearable
placeholder="请选择线路"
@change="validateLine"
style="width: 100%">
<el-option v-for="item in unionSelectLines"
:key="item.id"
:label="item.lineName + '-' + item.regionalNature + '【' + item.lotName + '】' + '' + item.playStartTime + '至' + item.playEndTime + '' + '' + item.signUpMode + ''"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="specificTime" label="出行时间" v-if="pageForm.state==='3'">
<el-select v-model="editFormData.specificTime" filterable clearable
placeholder="请选择出行时间"
style="width: 100%">
<el-option v-for="item in editSpecificTimes"
:key="item"
:label="item"
:value="item">
</el-option>
</el-select>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editVisible = false">取 消</el-button>
<el-button type="primary" @click="doEdit">确 定</el-button>
</span>
</el-dialog>
</div>
@@ -388,10 +582,35 @@ layout("/layouts/platform.html"){
// {prop: 'userNature', label: '人员性质'},
{prop: 'isFamily', label: '是否携带家属'},
// {prop: 'num', label: '人数'},
{prop: 'isTransferIn', label: '是否转入转出', sortable: true},
// {prop: 'isTransferIn', label: '是否转入转出', sortable: true},
{prop: 'linePlayTime', label: '出行时间', sortable: true},
{prop: 'stateId', label: '审核状态', sortable: true},
],
modifyConfig: {}
modifyConfig: {},
selectLine: {
lineName: '全部'
},
lineSignNumber: 0,
times: null,
linePlayTimes: [],
editVisible: false,
editFormData: {},
rules: {
loginName: [{required: true, message: '请填写工号', trigger: ['blur', 'change']}],
userName: [{required: true, message: '请填写姓名', trigger: ['blur', 'change']}],
unionName: [{required: true, message: '请选择工会', trigger: ['blur', 'change']}],
unitName: [{required: true, message: '请选择单位', trigger: ['blur', 'change']}],
// travelName: [{required: true, message: '请选择旅行社', trigger: ['blur', 'change']}],
specificTime: [{required: true, message: '请选择出行时间', trigger: ['blur', 'change']}],
// travelLine: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
editSpecificTimes: [],
labelName: '',
unionSelectLines: [],
lineLabelName: '',
activeNames:[]
}
},
components: {
@@ -400,8 +619,133 @@ layout("/layouts/platform.html"){
},
methods: {
async doOnekeyAudit(flag) {
const confirm = await this.$confirm('您确定要一键审核您所勾选的信息吗, 是否继续?', '提示', {
async playChange() {
await this.getLineSignNumber()
await this.doSearch()
},
async validateLine() {
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo'
, {enroll: JSON.stringify(this.editFormData)})
if (resp.code !== 0) {
this.$message.warning(resp.msg)
this.editFormData.takePartInLineId = ''
}
},
dropdownCommand(command) {
const {type, data} = command
if (type === 'view') {
this.openView(data)
} else if (type === 'recall') {
this.doRecall(data)
} else if (type === 'handle') {
this.openEdit(data)
} else if (type === 'modify') {
this.openModify(data)
} else if (type === 'delete') {
this.doDelete(data)
}
},
async doDelete(row){
this.$confirm("您确定要删除【<span style='color: red'>" + row.userName + "</span>】的此条报名信息吗?", '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
dangerouslyUseHTMLString: true,
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/doDeleteMyEnrollInfoById/' + row.id)
if (resp.code === 0) {
await this.doSearch()
this.$message.success('删除成功')
await this.getLineSignNumber();
} else {
this.$message.warning(resp.msg)
}
}
}
})
},
async openModify(row) {
this.editFormData = {};
const resp = await $.get("/platform/theRapyRecuperation/TheRapyAudit/findOne", {id: row.id})
if (resp.code === 0) {
this.editFormData = {...resp.data.viewData}
if (this.modifyConfig.familyInfo == 2) {
this.editFormData.companionList = resp.data.viewData.companionList
this.labelName = "家属信息"
} else {
this.editFormData.bedType = resp.data.viewData.familyNumber
this.labelName = "家属数量"
}
}
if (row.takePartInBaseManagementId) {
this.editSpecificTime(row.takePartInBaseManagementId);
this.lineLabelName = "酒店"
} else if (row.takePartInLineId) {
this.lineLabelName = '线路'
}
this.editVisible = true
},
async doEdit() {
this.$refs['editForm'].validate().then(async () => {
const confirm = await this.$confirm('您确定要修改这位老师的报名信息吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
if (!this.editFormData.takePartInLineId && !this.editFormData.takePartInBaseManagementId){
this.$message.warning('请选择线路')
return
}
const resp = await $.post('/platform/theRapyRecuperation/user/query/doEdit', this.editFormData)
if (resp.code === 0) {
this.$notify.success(resp.msg)
this.editVisible = false
await this.doSearch();
await this.getLineSignNumber();
} else {
this.$notify.error(resp.msg)
}
}
})
},
async lineChange(val) {
console.log(val)
this.pageForm.selectId = ''
if (val) {
this.selectLine = this.takePartInLines.find(o => o.id === val)
await this.getLinePlayTimeByLineId(val);
} else {
this.selectLine.lineName = ''
}
await this.getLineSignNumber()
await this.doSearch()
},
async getLinePlayTimeByLineId(id) {
const resp = await $.get(loc() + '/getLinePlayTimeByLineId', {
lineId: id,
year: this.pageForm.year,
signUpMode: 2,
})
if (resp.code === 0) {
this.linePlayTimes = resp.data
}
},
async getLineSignNumber() {
const resp = await $.get('/platform/theRapyRecuperation/TheRapyXghAudit/getLineNumber', this.pageForm)
this.lineSignNumber = resp.data
},
async doOnekeyAudit(flag, adjustment) {
let msg = '';
if (adjustment && !flag) {
msg = '您确定要一键【调整】您所勾选的报名信息吗,调整后该报名信息将不会在审核列表中展示, 是否继续?'
} else if (!adjustment && !flag) {
msg = '您确定要一键【拒绝】您所勾选的报名信息吗,是否继续?'
} else if (!adjustment && flag) {
msg = '您确定要一键【通过】您所勾选的报名信息吗,是否继续?'
}
const confirm = await this.$confirm(msg, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
@@ -410,13 +754,14 @@ layout("/layouts/platform.html"){
const resp = await $.post(loc() + "/doOnekeyAudit", {
ids: JSON.stringify(this.tableSelection),
flag: flag,
adjustment: adjustment,
auditOpinion: this.formData.auditOpinion
})
if (resp.code === 0){
if (resp.code === 0) {
this.$notify.success({title: '成功', message: resp.msg});
await this.doSearch()
this.dialogVisible = false
}else {
} else {
this.$notify.warning({title: '失败', message: resp.msg});
this.dialogVisible = false
}
@@ -461,17 +806,25 @@ layout("/layouts/platform.html"){
})
if (confirm === "confirm") {
const resp = await $.post(loc() + "/doRecall", {id: row.id})
if (resp.code === 0){
if (resp.code === 0) {
this.$notify.success({title: '成功', message: resp.msg});
await this.doSearch()
}else {
} else {
this.$notify.warning({title: '失败', message: resp.msg});
}
}
},
async doAudit(flag) {
const confirm = await this.$confirm('您确定要' + (flag ? '通过' : '退回') + '吗, 是否继续?', '提示', {
async doAudit(flag, adjustment) {
let msg = '';
if (adjustment && !flag) {
msg = '您确定要【调整】该报名信息吗,调整后该报名信息将不会在审核列表中展示, 是否继续?'
} else if (!adjustment && !flag) {
msg = '您确定要【拒绝】该报名信息吗,是否继续?'
} else if (!adjustment && flag) {
msg = '您确定要【通过】该报名信息吗,是否继续?'
}
const confirm = await this.$confirm(msg, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
@@ -479,15 +832,16 @@ layout("/layouts/platform.html"){
if (confirm === "confirm") {
const resp = await $.post(loc() + "/doAudit", {
flag: flag,
adjustment: adjustment,
id: this.formData.id,
isTransferIn: this.formData.isTransferIn,
auditOpinion: this.formData.auditOpinion
})
if (resp.code === 0){
if (resp.code === 0) {
this.$notify.success({title: '成功', message: resp.msg});
await this.doSearch()
this.$refs.guava.index()
}else {
} else {
this.$notify.warning({title: '失败', message: resp.msg});
}
@@ -591,12 +945,23 @@ layout("/layouts/platform.html"){
this.modifyConfig = res.data
}
},
async getUnionSelectLine() {
const resp = await $.post('/platform/theRapyRecuperation/user/query/getUnionSelectLine', {
year: this.pageForm.year,
signUpMode: 1,
})
if (resp.code === 0) {
this.unionSelectLines = resp.data
}
},
},
async created() {
await this.getBmUserUnion()
await this.getModifyConfig()
this.takePartInLines = await this.getXlByUnion()
await this.doSearch()
await this.getLineSignNumber()
await this.getUnionSelectLine()
}
})
</script>
@@ -28,47 +28,45 @@ layout("/layouts/platform.html"){
</el-input>
</div>
</div>
<template v-if="!isLxyGys">
<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.travelAgencyId"
@change="doSearch">
<el-option :key="item.id"
:label="item.travelAgencyName"
:value="item.id"
v-for="item in travelAgencyList"
></el-option>
</el-select>
</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.travelAgencyId"
@change="doSearch">
<el-option :key="item.id"
:label="item.travelAgencyName"
:value="item.id"
v-for="item in travelAgencyList"
></el-option>
</el-select>
</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.regionalNature"
@change="doSearch">
<el-option key="1" label="省内" value="省内"></el-option>
<el-option key="1" label="省" value="省"></el-option>
</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.regionalNature"
@change="doSearch">
<el-option key="1" label="省" value="省"></el-option>
<el-option key="1" label="省外" value="省外"></el-option>
</el-select>
</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-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>
</template>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
@@ -78,19 +76,14 @@ layout("/layouts/platform.html"){
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="目的地列表">
<template #func>
<template v-if="!isLxyGys">
<el-button @click="openImport" size="medium" type="primary"
style="margin-right: 10px">导入目的地
</el-button>
<el-button @click="openAdd" size="medium" type="primary">新建目的地</el-button>
</template>
<el-button @click="openImport" size="medium" type="primary" style="margin-right: 10px">导入目的地</el-button>
<el-button @click="openAdd" size="medium" type="primary">新建目的地</el-button>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
align="center"
header-align="center">
<el-table-column :index="indexMethod" align="center" header-align="center"
label="序号" type="index"
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column
:label="column.label"
@@ -103,7 +96,6 @@ layout("/layouts/platform.html"){
>
<template scope="{row}" v-if="column.prop==='isDisabled'">
<el-switch
:disabled="isLxyGys"
:active-value="false"
:inactive-value="true"
@change="(val)=>{baseStatusChange(row.id)}"
@@ -126,13 +118,9 @@ layout("/layouts/platform.html"){
</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"
v-if="!isLxyGys">删除
</el-button>
<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>
</template>
</el-table-column>
</el-table>
@@ -147,7 +135,6 @@ layout("/layouts/platform.html"){
<el-date-picker style="width: 100%"
@change="yearChange"
type="year"
:disabled="isLxyGys"
v-model="formData.year"
value-format="yyyy"></el-date-picker>
</el-form-item>
@@ -166,8 +153,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%"
v-model="formData.travelAgencyId" :disabled="isLxyGys">
<el-select clearable filterable style="width: 100%" v-model="formData.travelAgencyId">
<el-option :key="item.id"
:label="item.travelAgencyName+'('+ item.year +'年)'"
:value="item.id"
@@ -180,8 +166,7 @@ layout("/layouts/platform.html"){
<el-row :gutter="20">
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="组织形式" prop="createMode">
<el-radio-group size="small" v-model="formData.createMode"
:disabled="isLxyGys">
<el-radio-group size="small" v-model="formData.createMode">
<el-radio :label="1" border>校工会组织</el-radio>
<el-radio :label="2" border>分工会组织</el-radio>
</el-radio-group>
@@ -193,8 +178,7 @@ layout("/layouts/platform.html"){
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="活动范围" prop="regionalNature">
<el-radio-group size="small" v-model="formData.regionalNature"
:disabled="isLxyGys">
<el-radio-group size="small" v-model="formData.regionalNature">
<el-radio label="省内" border>省内</el-radio>
<el-radio label="省外" border>省外</el-radio>
</el-radio-group>
@@ -206,9 +190,7 @@ layout("/layouts/platform.html"){
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="标段时间" prop="lotId">
<!--<el-input clearable maxlength="50" v-model="formData.lotId"></el-input>-->
<el-select clearable filterable style="width: 100%"
v-model="formData.lotId"
:disabled="isLxyGys"
<el-select clearable filterable style="width: 100%" v-model="formData.lotId"
@change="doBdModify">
<el-option :key="item"
:label="item.lotName"
@@ -220,8 +202,7 @@ layout("/layouts/platform.html"){
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="预计费用(元/人次)" prop="estimatedCost">
<el-select clearable filterable style="width: 100%"
v-model="formData.estimatedCost" :disabled="isLxyGys">
<el-select clearable filterable style="width: 100%" v-model="formData.estimatedCost">
<el-option :key="item.id"
:label="item.activityCost"
:value="item.activityCost"
@@ -235,14 +216,12 @@ layout("/layouts/platform.html"){
<el-row :gutter="20">
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="目的地联系人" prop="baseContactPerson">
<el-input clearable maxlength="20"
v-model="formData.baseContactPerson"></el-input>
<el-input clearable maxlength="20" v-model="formData.baseContactPerson"></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="联系人电话" prop="baseContactNumber">
<el-input clearable maxlength="20"
v-model="formData.baseContactNumber"></el-input>
<el-input clearable maxlength="20" v-model="formData.baseContactNumber"></el-input>
</el-form-item>
</el-col>
</el-row>
@@ -252,7 +231,6 @@ layout("/layouts/platform.html"){
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="报名开始时间" prop="signUpStartTime">
<el-date-picker style="width: 100%"
:disabled="isLxyGys"
type="datetime"
v-model="formData.signUpStartTime"
format="yyyy-MM-dd HH:mm"
@@ -263,7 +241,6 @@ layout("/layouts/platform.html"){
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="报名截至时间" prop="signUpEndTime">
<el-date-picker style="width: 100%"
:disabled="isLxyGys"
type="datetime"
v-model="formData.signUpEndTime"
format="yyyy-MM-dd HH:mm"
@@ -277,7 +254,6 @@ layout("/layouts/platform.html"){
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="变更截至时间" prop="changeEndTime">
<el-date-picker style="width: 100%"
:disabled="isLxyGys"
type="datetime"
v-model="formData.changeEndTime"
value-format="yyyy-MM-dd HH:mm:ss">
@@ -303,7 +279,6 @@ layout("/layouts/platform.html"){
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="活动开始时间" prop="activityStartTime">
<el-date-picker
:disabled="isLxyGys"
placeholder="活动开始时间"
style="width: 100%"
type="date"
@@ -315,7 +290,6 @@ layout("/layouts/platform.html"){
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="活动结束时间" prop="activityEndTime">
<el-date-picker
:disabled="isLxyGys"
placeholder="活动结束时间"
style="width: 100%"
type="date"
@@ -330,21 +304,7 @@ layout("/layouts/platform.html"){
<el-row :gutter="20">
<el-col :md="24" :sm="24" :xs="24">
<el-form-item label="详细信息" prop="content">
<div id="lineContent"></div>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :md="24" :sm="24" :xs="24">
<el-form-item label="上传详细信息图片">
<el-button type="primary" @click="scFilesDrawer = true" size="small">
上传详细信息图片
</el-button>
<text-editor v-model="formData.content"></text-editor>
</el-form-item>
</el-col>
</el-row>
@@ -352,7 +312,6 @@ layout("/layouts/platform.html"){
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="是否启用" prop="isDisabled">
<el-switch
:disabled="isLxyGys"
:active-value="false"
:inactive-value="true"
active-color="#13ce66"
@@ -366,8 +325,7 @@ layout("/layouts/platform.html"){
<el-row :gutter="20">
<el-col :md="24" :sm="24" :xs="24">
<el-form-item label="图片上传" prop="files">
<file-upload :files.sync="formData.files" :max="1"
:type="['jpg', 'jpeg', 'png']">
<file-upload :files.sync="formData.files" :max="1" :type="['jpg', 'jpeg', 'png']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">
图片类请上传jpg/png/jpeg格式,上传数量为1个
@@ -433,59 +391,10 @@ layout("/layouts/platform.html"){
</span>
</el-dialog>
</guava>
<el-drawer
size="50%"
:visible.sync="scFilesDrawer"
direction="rtl">
<el-card shadow="never">
<template #header>
<div style="display:flex;justify-content: space-between;align-items: center">
<h3 style="color: #1867b0">上传文件</h3>
<file-upload :files.sync="files" ref="fileUpload"
:source="1"
:max="20"></file-upload>
</div>
</template>
<el-table :data="files" border class="mt10" stripe
style="width: 100%">
<el-table-column label="文件名"
show-overflow-tooltip
prop="filename"></el-table-column>
<el-table-column label="文件路径" prop="url" show-overflow-tooltip>
<template scope="{row}">
{{ APP_DOMAIN + FILE_STREAM_PREVIEW_ADDRESS +
"?id=" + row.id }}
</template>
</el-table-column>
<el-table-column
align="center"
header-align="center"
label="操作"
width="100px"
>
<template slot-scope="{row,$index}">
<el-button
icon="el-icon-folder-checked"
size="mini" type="primary"
@click="doCopy(row)">复制
</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<el-row class="mt20 mr20" justify="end" type="flex">
<el-button @click="scFilesDrawer=false" type="primary">关闭</el-button>
</el-row>
</el-drawer>
</div>
<script>
const vue = new Vue({
new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
@@ -542,8 +451,6 @@ layout("/layouts/platform.html"){
callback()
}
return {
scFilesDrawer: false,
files: [],
pageForm: {
year: new Date().getFullYear().toString(),
unionId: '',
@@ -560,7 +467,7 @@ layout("/layouts/platform.html"){
id: '',
sortNumber: '',
baseName: '',
travelAgencyId: null,
travelAgencyId: '',
regionalNature: '省内',
year: new Date().getFullYear().toString(),
isDisabled: false,
@@ -593,71 +500,29 @@ layout("/layouts/platform.html"){
{label: '是否启用', prop: 'isDisabled', sortable: true}
],
rules: {
sortNumber: [{
required: false,
message: '请输入排序编号',
trigger: ['change', 'blur']
}],
sortNumber: [{required: false, message: '请输入排序编号', trigger: ['change', 'blur']}],
baseName: [{required: true, message: '请输入目的地名称', trigger: ['change', 'blur']}],
// travelAgencyId: [{required: true, message: '请选择旅行社', trigger: ['change', 'blur']}],
regionalNature: [{
required: true,
message: '请选择区域性质',
trigger: ['change', 'blur']
}],
travelAgencyId: [{required: true, message: '请选择旅行社', trigger: ['change', 'blur']}],
regionalNature: [{required: true, message: '请选择区域性质', trigger: ['change', 'blur']}],
year: [{required: true, message: '请选择年度', trigger: ['change', 'blur']}],
lotId: [{required: true, message: '请选择出行天数', trigger: ['change', 'blur']}],
content: [{required: false, 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']
}],
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']}],
createMode: [{required: true, message: '请选择组织方式', trigger: ['change', 'blur']}],
activityStartTime: [{
required: true,
validator: validateActivityStartTime,
trigger: ['change', 'blur']
}],
activityEndTime: [{
required: true,
validator: validateActivityEndTime,
trigger: ['change', 'blur']
}],
estimatedCost: [{
required: true,
message: '请输入预计费用',
trigger: ['change', 'blur']
}],
activityStartTime: [{ required: true, validator: validateActivityStartTime, trigger: ['change', 'blur'] }],
activityEndTime: [{ required: true, validator: validateActivityEndTime, trigger: ['change', 'blur'] }],
estimatedCost: [{required: true, message: '请输入预计费用', trigger: ['change', 'blur']}],
},
//目的地导入
importVisible: false,
importLoading: false,
importData: {},
isLxyGys: false,
}
},
methods: {
doCopy(row) {
const input = document.createElement('input')
input.value = APP_DOMAIN + FILE_STREAM_PREVIEW_ADDRESS + "?id=" + row.id // 设置复制内容
document.body.appendChild(input) // 添加临时实例
input.select() // 选择实例内容
document.execCommand('Copy') // 执行复制
document.body.removeChild(input) // 删除临时实例
this.$message.success('复制成功!')
},
async doSearch() {
this.formData.year = this.pageForm.year;
await this.yearChange();
@@ -668,7 +533,6 @@ layout("/layouts/platform.html"){
this.travelAgencyList = resp.data
},
async openAdd() {
this.files = []
this.$refs.guava.edit()
this.$nextTick(() => {
if (this.$refs['form']) {
@@ -679,7 +543,6 @@ layout("/layouts/platform.html"){
})
},
async openEdit(id) {
this.files = []
const resp = await $.post(loc() + '/selectBaseManageById/' + id)
if (resp.code === 0) {
this.$refs.guava.edit()
@@ -803,10 +666,10 @@ layout("/layouts/platform.html"){
processData: false,
contentType: false,
success: (data) => {
if (data.code === 0) {
if (data.code === 0){
this.pageData();
this.importVisible = false
} else {
}else {
this.importVisible = false
}
},
@@ -818,19 +681,13 @@ layout("/layouts/platform.html"){
},
},
async created() {
//如果不是超级管理员,校工会,分工会,就是供应商
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'false') {
this.isLxyGys = true
}
await this.initPageData();
this.pageData();
},
computed: {
editDialogTitle() {
return this.formData.id ? '编辑目的地' : '新增目的地'
}
},
})
</script>
@@ -3,12 +3,16 @@ layout("/layouts/platform.html"){
#-->
<style>
.mr0-radio {
display: flex;
}
/*.mr0-radio {*/
/* display: flex;*/
/*}*/
.mr0-radio label {
margin-right: 0 !important;
/*.mr0-radio label {*/
/* margin-right: 0 !important;*/
/*}*/
.el-radio {
margin-right: 0;
}
</style>
@@ -17,19 +21,55 @@ layout("/layouts/platform.html"){
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">年度:</div>
<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>
<!--<el-date-picker
style="width: 100%"
@change="doSearch"
placeholder="选择年度"
type="year"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</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">
@@ -40,41 +80,22 @@ layout("/layouts/platform.html"){
</el-input>
</div>
</div>
<template v-if="!isLxyGys">
<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 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 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>
</template>
</div>
<div class="search-item"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}">
<div class="search-item" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}">
<div class="search-item-label">分工会:</div>
<div class="search-item-option">
<el-select @change="doSearch"
@@ -99,17 +120,14 @@ layout("/layouts/platform.html"){
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="线路列表">
<template #func>
<template v-if="!isLxyGys">
<el-button @click="openImport" size="medium" type="primary">导入线路</el-button>
<el-button @click="openAdd" size="medium" type="primary">新建线路</el-button>
</template>
<el-button @click="openImport" size="medium" type="primary">导入线路</el-button>
<el-button @click="openAdd" size="medium" type="primary">新建线路</el-button>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
align="center"
header-align="center">
<el-table-column :index="indexMethod" align="center" header-align="center"
label="序号" type="index"
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column
:label="column.label"
@@ -123,7 +141,6 @@ layout("/layouts/platform.html"){
>
<template scope="{row}" v-if="column.prop==='isDisabled'">
<el-switch
:disabled="isLxyGys"
:active-value="false"
:inactive-value="true"
@change="(val)=>{lineStatusChange(row.id)}"
@@ -143,7 +160,7 @@ layout("/layouts/platform.html"){
type="text">
查看详情
</el-button>
<!-- v-if="row.createMode===2 && row.signUpMode===1"-->
<!-- v-if="row.createMode===2 && row.signUpMode===1"-->
<!--<span v-else>
{{row.playStartTime + '至' + row.playEndTime}}
</span>-->
@@ -151,13 +168,9 @@ layout("/layouts/platform.html"){
</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"
v-if="!isLxyGys">删除
</el-button>
<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>
</template>
</el-table-column>
</el-table>
@@ -181,7 +194,6 @@ layout("/layouts/platform.html"){
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="年度" prop="year">
<el-date-picker style="width: 100%"
:disabled="isLxyGys"
@change="yearChange"
type="year"
v-model="formData.year"
@@ -197,14 +209,12 @@ layout("/layouts/platform.html"){
<el-row :gutter="20">
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="线路名称" prop="lineName">
<el-input maxlength="50" v-model="formData.lineName"
:disabled="isLxyGys"></el-input>
<el-input maxlength="50" v-model="formData.lineName"></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="旅行社名称" prop="travelAgencyId">
<el-select clearable filterable style="width: 100%"
v-model="formData.travelAgencyId" :disabled="isLxyGys">
<el-select clearable filterable style="width: 100%" v-model="formData.travelAgencyId">
<el-option :key="item.id"
:label="item.travelAgencyName+'('+ item.year +'年)'"
:value="item.id"
@@ -236,9 +246,7 @@ layout("/layouts/platform.html"){
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="线路类型" prop="regionalNature">
<el-radio-group class="mr0-radio" size="small"
:disabled="isLxyGys"
v-model="formData.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}}
@@ -249,7 +257,7 @@ layout("/layouts/platform.html"){
<el-col :span="12">
<el-form-item label="时间标段" prop="lotId">
<el-select clearable filterable style="width: 100%"
v-model="formData.lotId" :disabled="isLxyGys">
v-model="formData.lotId">
<el-option :key="item.id"
:label="item.lotName"
:value="item.id"
@@ -262,8 +270,7 @@ layout("/layouts/platform.html"){
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="交通工具" prop="trafficTools">
<el-input clearable maxlength="50"
v-model="formData.trafficTools"></el-input>
<el-input clearable maxlength="50" v-model="formData.trafficTools"></el-input>
</el-form-item>
</el-col>
</el-row>
@@ -272,22 +279,20 @@ layout("/layouts/platform.html"){
<el-col :md="12" :sm="24" :xs="24">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="最少成团人数" prop="minimumGroupSize">
<el-form-item label="最少参与教工" prop="minimumGroupSize">
<el-input-number :max="1000"
:min="config.groupNumber"
:precision="0"
style="width: 100%"
:disabled="isLxyGys"
v-model="formData.minimumGroupSize"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="预计人数(含家属" prop="estimatedFamilyNumbers">
<el-form-item label="成团人数包括家属" prop="estimatedFamilyNumbers">
<el-input-number :max="1000"
:min="1"
:precision="0"
style="width: 100%"
:disabled="isLxyGys"
v-model="formData.estimatedFamilyNumbers"></el-input-number>
</el-form-item>
</el-col>
@@ -295,8 +300,7 @@ layout("/layouts/platform.html"){
</el-col>
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="预计费用(元/人次)" prop="estimatedCost">
<el-input clearable maxlength="50" :disabled="isLxyGys"
v-model="formData.estimatedCost"></el-input>
<el-input clearable maxlength="50" v-model="formData.estimatedCost"></el-input>
</el-form-item>
</el-col>
</el-row>
@@ -304,8 +308,7 @@ layout("/layouts/platform.html"){
<el-row :gutter="20">
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="组织形式" prop="signUpMode">
<el-radio-group class="mr0-radio" size="small" :disabled="isLxyGys"
v-model="formData.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">
@@ -322,8 +325,7 @@ layout("/layouts/platform.html"){
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="联系人" prop="lineContact">
<el-input clearable max="50" :disabled="isLxyGys"
v-model="formData.lineContact"></el-input>
<el-input clearable max="50" v-model="formData.lineContact"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
@@ -331,104 +333,93 @@ layout("/layouts/platform.html"){
{ required: false, message: '手机号码不能为空', trigger: 'blur' },
{ pattern: /^1[34578]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' }
]" label="联系方式" prop="lineContactPhone">
<el-input clearable :disabled="isLxyGys"
v-model="formData.lineContactPhone"></el-input>
<el-input clearable v-model="formData.lineContactPhone"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-row>
<!-- <template v-if="formData.signUpMode===2 || formData.createMode===1">-->
<!-- <el-row :gutter="20">-->
<!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item label="报名开始时间" prop="signUpStartTime">-->
<!-- <el-date-picker style="width: 100%"-->
<!-- type="datetime"-->
<!-- v-model="formData.signUpStartTime"-->
<!-- format="yyyy-MM-dd HH:mm"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item label="报名截至时间" prop="signUpEndTime">-->
<!-- <el-date-picker style="width: 100%"-->
<!-- type="datetime"-->
<!-- v-model="formData.signUpEndTime"-->
<!-- format="yyyy-MM-dd HH:mm"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <template v-if="formData.signUpMode===2 || formData.createMode===1">-->
<!-- <el-row :gutter="20">-->
<!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item label="报名开始时间" prop="signUpStartTime">-->
<!-- <el-date-picker style="width: 100%"-->
<!-- type="datetime"-->
<!-- v-model="formData.signUpStartTime"-->
<!-- format="yyyy-MM-dd HH:mm"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item label="报名截至时间" prop="signUpEndTime">-->
<!-- <el-date-picker style="width: 100%"-->
<!-- type="datetime"-->
<!-- v-model="formData.signUpEndTime"-->
<!-- format="yyyy-MM-dd HH:mm"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-row :gutter="20">-->
<!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item label="变更截至时间" prop="changeEndTime">-->
<!-- <el-date-picker style="width: 100%"-->
<!-- type="datetime"-->
<!-- v-model="formData.changeEndTime"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item>-->
<!-- <template #label>-->
<!-- <span class="text-primary">-->
<!-- <i class="el-icon-warning"></i>-->
<!-- 温馨提醒:-->
<!-- </span>-->
<!-- </template>-->
<!-- <span class="text-primary">-->
<!-- 变更时间应该大于报名截至时间,小于出行时间。-->
<!-- </span>-->
<!-- <el-row :gutter="20">-->
<!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item label="变更截至时间" prop="changeEndTime">-->
<!-- <el-date-picker style="width: 100%"-->
<!-- type="datetime"-->
<!-- v-model="formData.changeEndTime"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item>-->
<!-- <template #label>-->
<!-- <span class="text-primary">-->
<!-- <i class="el-icon-warning"></i>-->
<!-- 温馨提醒:-->
<!-- </span>-->
<!-- </template>-->
<!-- <span class="text-primary">-->
<!-- 变更时间应该大于报名截至时间,小于出行时间。-->
<!-- </span>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-row :gutter="20">-->
<!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item label="出行开始时间" prop="playStartTime">-->
<!-- <el-date-picker-->
<!-- placeholder="出行开始时间"-->
<!-- style="width: 100%"-->
<!-- type="date"-->
<!-- v-model="formData.playStartTime"-->
<!-- value-format="yyyy-MM-dd">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item label="出行结束时间" prop="playEndTime">-->
<!-- <el-date-picker-->
<!-- placeholder="出行结束时间"-->
<!-- style="width: 100%"-->
<!-- type="date"-->
<!-- v-model="formData.playEndTime"-->
<!-- value-format="yyyy-MM-dd">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </template>-->
<!-- <el-row :gutter="20">-->
<!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item label="出行开始时间" prop="playStartTime">-->
<!-- <el-date-picker-->
<!-- placeholder="出行开始时间"-->
<!-- style="width: 100%"-->
<!-- type="date"-->
<!-- v-model="formData.playStartTime"-->
<!-- value-format="yyyy-MM-dd">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :md="12" :sm="24" :xs="24">-->
<!-- <el-form-item label="出行结束时间" prop="playEndTime">-->
<!-- <el-date-picker-->
<!-- placeholder="出行结束时间"-->
<!-- style="width: 100%"-->
<!-- type="date"-->
<!-- v-model="formData.playEndTime"-->
<!-- value-format="yyyy-MM-dd">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </template>-->
<el-row :gutter="20">
<el-col :md="24" :sm="24" :xs="24">
<el-form-item label="线路内容" prop="content">
<div id="lineContent"></div>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :md="24" :sm="24" :xs="24">
<el-form-item label="上传详细信息图片">
<el-button type="primary" @click="scFilesDrawer = true" size="small">
上传线路内容图片
</el-button>
<text-editor v-model="formData.content"></text-editor>
</el-form-item>
</el-col>
</el-row>
@@ -436,7 +427,6 @@ layout("/layouts/platform.html"){
<el-col :md="12" :sm="24" :xs="24">
<el-form-item label="是否启用" prop="isDisabled">
<el-switch
:disabled="isLxyGys"
:active-value="false"
:inactive-value="true"
active-color="#13ce66"
@@ -536,54 +526,6 @@ layout("/layouts/platform.html"){
</el-dialog>
</guava>
<el-drawer
size="50%"
:visible.sync="scFilesDrawer"
direction="rtl">
<el-card shadow="never">
<template #header>
<div style="display:flex;justify-content: space-between;align-items: center">
<h3 style="color: #1867b0">上传文件</h3>
<file-upload :files.sync="files" ref="fileUpload"
:source="1"
:max="20"></file-upload>
</div>
</template>
<el-table :data="files" border class="mt10" stripe
style="width: 100%">
<el-table-column label="文件名"
show-overflow-tooltip
prop="filename"></el-table-column>
<el-table-column label="文件路径" prop="url" show-overflow-tooltip>
<template scope="{row}">
{{ APP_DOMAIN + FILE_STREAM_PREVIEW_ADDRESS +
"?id=" + row.id }}
</template>
</el-table-column>
<el-table-column
align="center"
header-align="center"
label="操作"
width="100px"
>
<template slot-scope="{row,$index}">
<el-button
icon="el-icon-folder-checked"
size="mini" type="primary"
@click="doCopy(row)">复制
</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<el-row class="mt20 mr20" justify="end" type="flex">
<el-button @click="scFilesDrawer=false" type="primary">关闭</el-button>
</el-row>
</el-drawer>
</div>
<script>
@@ -659,71 +601,31 @@ layout("/layouts/platform.html"){
],
editDialogVisible: false,
rules: {
serialNumber: [{
required: true,
message: '请输入排序号',
trigger: ['change', 'blur']
}],
serialNumber: [{required: true, message: '请输入排序号', trigger: ['change', 'blur']}],
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']
}],
travelAgencyId: [{required: true, message: '请选择旅行社', trigger: ['change', 'blur']}],
regionalNature: [{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']
}],
playNumberOfDays: [{required: true, message: '请输入游玩天数', trigger: ['change', 'blur']}],
//content: [{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']
}],
signUpEndTime: [{required: true, validator: validateSignUpEndTime, trigger: ['change', 'blur']}],
changeEndTime: [{required: true, validator: validateChangeEndTime, trigger: ['change', 'blur']}],
//files: [{required: true, message: '请上传移动端缩略图', trigger: ['change', 'blur']}],
signUpMode: [{required: true, message: '请选择报名模式', trigger: ['change', 'blur']}],
playStartTime: [{
required: true,
message: '请选择出行开始时间',
trigger: ['change', 'blur']
}],
playEndTime: [{
required: true,
validator: validatePlayEndTime,
trigger: ['change', 'blur']
}],
trafficTools: [{
required: false,
message: '请输入交通工具',
trigger: ['change', 'blur']
}],
estimatedCost: [{
required: false,
message: '请输入预计费用',
trigger: ['change', 'blur']
}],
playStartTime: [{required: true, message: '请选择出行开始时间', trigger: ['change', 'blur']}],
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: '请输入预计人数(含家属',
message: '请输入成团人数包括家属',
trigger: ['change', 'blur']
}],
lotId: [{required: true, message: '请选择标段时间', trigger: ['change', 'blur']}]
@@ -762,7 +664,8 @@ layout("/layouts/platform.html"){
},
pageForm: {
keywords: null,
year: new Date().getFullYear().toString(),
startYear: '',
endYear: moment().format('YYYY'),
unionId: null,
lineName: null,
travelAgencyId: null
@@ -777,21 +680,11 @@ layout("/layouts/platform.html"){
importVisible: false,
importLoading: false,
importData: {},
isLxyGys: false,
scFilesDrawer: false,
files: [],
modifyConfig:{}
}
},
methods: {
doCopy(row) {
const input = document.createElement('input')
input.value = APP_DOMAIN + FILE_STREAM_PREVIEW_ADDRESS + "?id=" + row.id // 设置复制内容
document.body.appendChild(input) // 添加临时实例
input.select() // 选择实例内容
document.execCommand('Copy') // 执行复制
document.body.removeChild(input) // 删除临时实例
this.$message.success('复制成功!')
},
isShow(roles) {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" === 'true') {
return true
@@ -807,7 +700,6 @@ layout("/layouts/platform.html"){
}
},
async openAdd() {
this.files = []
this.$refs.guava.edit()
this.$nextTick(() => {
if (this.$refs['form']) {
@@ -824,9 +716,9 @@ layout("/layouts/platform.html"){
if (this.config) {
this.formData.minimumGroupSize = this.config.groupNumber
}
await this.getNumber()
},
async openEdit(id) {
this.files = []
const resp = await $.post(loc() + '/selectLineInfoById/' + id)
if (resp.code === 0) {
this.$refs.guava.edit()
@@ -968,21 +860,37 @@ layout("/layouts/platform.html"){
data.append("file", val.raw, val.raw.name);
});
this.importLoading = true
const resp = await $.post(loc() + "/travelLineImport", data)
if (resp.code === 0) {
const resp = await $.post(loc() + "/travelLineImport",data)
if (resp.code === 0){
this.pageData();
this.importVisible = false
} else {
}else {
this.notifyWarning("导入失败")
this.importLoading = false
}
},
handleChangeYear(){
if (this.pageForm.startYear && this.pageForm.endYear){
if (this.pageForm.startYear > this.pageForm.endYear){
this.pageForm.endYear = '';
this.$message.error('起始年份需小于结束年份!');
}
}
},
async getModifyConfig() {
const res = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
if (res.code === 0) {
this.modifyConfig = res.data
}
},
async getNumber() {
const resp = await $.post(loc() + '/getNo')
this.formData.serialNumber = resp.data
},
},
async created() {
//如果不是超级管理员,校工会,分工会,就是供应商
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'false') {
this.isLxyGys = true
}
await this.getModifyConfig()
this.pageForm.startYear = this.modifyConfig.provinceStartYear+''
await this.initPageData()
this.pageData()
}
@@ -45,7 +45,7 @@ layout("/layouts/platform.html"){
type="year"
value-format="yyyy"
placeholder="选择年"
style="width: 80%" @change="pageData">
style="width: 80%" @change="pageData();getApplyNumAudit()">
</el-date-picker>
</el-col>
<el-col :span="12" v-if="pageForm.lb==='ry'||pageForm.lb===''">
@@ -155,7 +155,7 @@ layout("/layouts/platform.html"){
style="width: 80%" @change="pageData()">
<el-option v-for="item in takePartInLines"
:key="item.id"
:label="item.lineName+''+item.playStartTime1+''+''+item.unionname+''"
:label="item.lineName+''+item.unionname+''"
:value="item.id">
</el-option>
</el-select>
@@ -197,7 +197,8 @@ layout("/layouts/platform.html"){
<el-row v-if="!pageForm.state">
<el-col :span="24" style="color: red;margin-top: 10px">
<span>温馨提醒:当前操作查询是【本工会当年参加疗休养的人员(包含校工会线路)】和【其他工会选择本工会线路的疗休养人员】</span>
<!-- <span>温馨提醒:当前操作查询是【本工会当年参加疗休养的人员(包含校工会线路)】和【其他工会选择本工会线路的疗休养人员】</span>-->
<span>温馨提醒:当前操作查询是【本工会当年参加疗休养的人员(包含校工会线路)】</span>
</el-col>
</el-row>
@@ -230,19 +231,19 @@ layout("/layouts/platform.html"){
<el-card shadow="never" class="mt10">
<table-tool label="" :app="this" ref="table_tool">
<template #label_end>
<el-radio-group size="medium" v-model="pageForm.lb" class="ml10"
<el-radio-group size="small" v-model="pageForm.lb" class="ml10"
@change="pageData()"
v-if="pageForm.state=='1'">
<el-radio-button label="xl">线路列表</el-radio-button>
<el-radio-button label="ry">人员列表</el-radio-button>
</el-radio-group>
<el-radio-group size="medium" v-model="pageForm.lb" class="ml10"
<el-radio-group size="small" v-model="pageForm.lb" class="ml10"
@change="pageData()"
v-if="pageForm.state=='2'">
<el-radio-button label="lxs">旅行社列表</el-radio-button>
<el-radio-button label="ry">人员列表</el-radio-button>
</el-radio-group>
<el-radio-group size="medium" v-model="pageForm.lb" class="ml10"
<el-radio-group size="small" v-model="pageForm.lb" class="ml10"
@change="pageData()"
v-if="pageForm.state=='3'">
<el-radio-button label="jd">酒店列表</el-radio-button>
@@ -252,31 +253,31 @@ layout("/layouts/platform.html"){
style="color: red">当前报名人数有教职工{{applyNum.count1}}人,家属有{{applyNum.count2}}人</span>
</template>
<template #func>
<el-button icon="el-icon-s-promotion" @click="openImport" size="medium"
<el-button icon="el-icon-s-promotion" @click="openImport" size="small"
type="primary">参加人员导入
</el-button>
<!--# if(@shiro.hasRole('H04')){ #-->
<template>
<el-button icon="el-icon-s-promotion"
@click="location.href='/platform/theRapyRecuperation/query/exportDeclareForm'"
size="medium" type="primary">申报表导出
size="small" type="primary">申报表导出
</el-button>
<el-button icon="el-icon-s-promotion"
@click="location.href='/platform/theRapyRecuperation/query/exportTravelers'"
size="medium" type="primary">出行人员导出
size="small" type="primary">出行人员导出
</el-button>
</template>
<!--# } #-->
<el-button icon="el-icon-s-promotion" size="medium" type="primary"
<el-button icon="el-icon-s-promotion" size="small" type="primary"
@click="userDrawer = true"
:disabled="multipleSelection.length==0"
class="mr10" v-if="pageForm.lb=='ry'||!pageForm.lb">设置参加人员
</el-button>
<el-button icon="el-icon-s-promotion" size="medium" type="primary"
<el-button icon="el-icon-s-promotion" size="small" type="primary"
@click="doExport"
class="mr10" v-if="pageForm.state">导出
</el-button>
<el-radio-group @change="pageData()" size="medium"
<el-radio-group @change="pageData()" size="small"
v-model="pageForm.regionalNature"
v-if="pageForm.state=='1'">
<el-radio-button label="">全部</el-radio-button>
@@ -319,15 +320,23 @@ layout("/layouts/platform.html"){
</el-link>
</template>
<template scope="{row}" v-else-if="column.prop=='isFamily'">
<el-link type="primary" @click="openUser(row)">
<el-link v-if="!row.familyNumber" type="primary" @click="openUser(row)">
{{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=='lineNum'">
<el-link type="primary" @click="openApplyUser(row)">
<el-link v-if="!row.familyNumber" type="primary" @click="openUser(row)">
{{row.lineNum}}{{row.signUpUserFamilyNum}}
</el-link>
<el-link v-else type="primary">
{{row.lineNum}}{{row.familyNumber}}
</el-link>
</template>
<template scope="{row}" v-else-if="column.prop=='signUpMode'">
{{signUpModeName(row.signUpMode)}}
@@ -408,23 +417,25 @@ layout("/layouts/platform.html"){
{{row.lotName}}
</template>
</el-table-column>
<el-table-column label="操作" width="150px"
<el-table-column label="操作" width="250px"
v-if="pageForm.lb==='ry'||pageForm.lb===''||pageForm.lb==='xl'">
<template scope="{row}">
<template v-if="pageForm.lb==='xl'">
<el-button @click="openApplyUser(row)" size="mini" type="primary">
查看
</el-button>
<el-button @click="doRemind(row)" size="mini" type="primary">
<!--<el-button @click="doRemind(row)" size="mini" type="primary">
提醒
</el-button>
</el-button>-->
</template>
<template v-else>
<el-button @click="openView(row)" size="mini" type="primary"
plain="">查看
<el-button @click="openView(row)" size="mini" type="primary">查看
</el-button>
<el-button @click="openEdit(row)" size="mini" type="primary">编辑
</el-button>
<el-button @click="doDelete(row)" size="mini" type="danger">删除
</el-button>
</template>
</template>
@@ -510,7 +521,13 @@ layout("/layouts/platform.html"){
>
<template scope="{row}" v-if="column.prop=='isFamily'">
{{row.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>
<!--{{row.isFamily?'携带':'未携带'}}-->
</template>
</el-table-column>
<el-table-column label="操作" width="250px">
@@ -642,7 +659,7 @@ layout("/layouts/platform.html"){
<el-timeline>
<el-timeline-item timestamp="下载模板" placement="top">
<el-card>
<el-button size="medium" type=""
<el-button size="small" type=""
@click="location.href='/platform/basics/downloadTemplate?filePath=travel/TravelEnrollImport.xlsx&fileName=参加人员导入模板.xls'"
icon="el-icon-download">下载模板
</el-button>
@@ -663,7 +680,7 @@ layout("/layouts/platform.html"){
:auto-upload="false"
:limit="1"
:file-list="importData.fileList">
<el-button size="medium" type="" icon="el-icon-upload"
<el-button size="small" type="" icon="el-icon-upload"
style="width: 200px">选择文件
</el-button>
<div class="el-upload__tip" slot="tip" style="color: #F56C6C">
@@ -715,6 +732,129 @@ layout("/layouts/platform.html"){
</el-card>
</el-drawer>
<el-dialog
title="修改信息"
:visible.sync="editVisible"
:close-on-click-modal="false"
width="50%">
<el-form :model="editFormData" label-width="120px" :rules="rules" ref="editForm" style="margin-right: 40px">
<el-row>
<el-col span="12">
<el-form-item prop="loginName" label="工号">
<el-input v-model="editFormData.loginName" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="userName" label="姓名">
<el-input v-model="editFormData.userName" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col span="12">
<el-form-item prop="userName" label="手机号">
<el-input v-model="editFormData.mobile" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="userName" label="身份证号">
<el-input v-model="editFormData.idCard" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col span="12">
<el-form-item prop="unionName" label="工会">
<el-input v-model="editFormData.unionName" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="unitName" label="单位">
<el-input v-model="editFormData.unitName" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="prop" :label="labelName">
<template v-if="modifyConfig.familyInfo == 2">
<el-collapse v-model="activeNames">
<el-collapse-item title="点击可展开详细信息" name="1">
<el-card shadow="never">
<el-table :data="editFormData.companionList">
<el-table-column label="姓名" prop="userName"></el-table-column>
<el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="身份证号" prop="idCard"></el-table-column>
<el-table-column label="年龄" prop="age"></el-table-column>
<el-table-column label="床型" prop="bedType">
<template scope="{row}">
{{ row.bedInfo.bedType }}
</template>
</el-table-column>
<el-table-column label="床位" prop="bedNum">
<template scope="{row}">
{{ row.bedInfo.bedNum }}
</template>
</el-table-column>
<el-table-column label="意向拼床人" prop="otherSleepUser">
<template scope="{row}">
{{ row.bedInfo.otherSleepUser ?
row.bedInfo.otherSleepUser : '暂无' }}
</template>
</el-table-column>
<el-table-column label="关系" prop="relation"></el-table-column>
</el-table>
</el-card>
</el-collapse-item>
</el-collapse>
</template>
<template v-else>
<el-input v-model="editFormData.bedType" readonly></el-input>
</template>
</el-form-item>
<!--<el-form-item prop="travelName" label="旅行社">
<el-select v-model="editFormData.agencyId" filterable clearable
placeholder="请选择旅行社"
style="width: 100%">
<el-option v-for="item in agencyLists"
:key="item.id"
:label="item.travelAgencyName"
:value="item.id">
</el-option>
</el-select>
</el-form-item>-->
<el-form-item prop="travelLine" :label="lineLabelName">
<el-select v-model="editFormData.takePartInLineId" filterable clearable
placeholder="请选择线路"
@change="validateLine"
style="width: 100%">
<el-option v-for="item in unionSelectLines"
:key="item.id"
:label="item.lineName + '-' + item.regionalNature + '【' + item.lotName + '】' + '' + item.playStartTime + '至' + item.playEndTime + '' + '' + item.signUpMode + ''"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="specificTime" label="出行时间" v-if="pageForm.state==='3'">
<el-select v-model="editFormData.specificTime" filterable clearable
placeholder="请选择出行时间"
style="width: 100%">
<el-option v-for="item in editSpecificTimes"
:key="item"
:label="item"
:value="item">
</el-option>
</el-select>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editVisible = false">取 消</el-button>
<el-button type="primary" @click="doEdit">确 定</el-button>
</span>
</el-dialog>
</div>
<script>
@@ -731,7 +871,7 @@ layout("/layouts/platform.html"){
options2: [
{label: "本工会人员(自己线路)", value: "1"},
{label: "本工会人员(其他路线)", value: "2"},
{label: "其他工会人员(选我线路)", value: "3"},
// {label: "其他工会人员(选我线路)", value: "3"},
{label: "选择校工会线路人员", value: "4"}
],
jdList: [],
@@ -799,13 +939,103 @@ layout("/layouts/platform.html"){
importVisible: false,
importLoading: false,
importData: {},
editVisible: false,
editFormData: {},
rules: {
loginName: [{required: true, message: '请填写工号', trigger: ['blur', 'change']}],
userName: [{required: true, message: '请填写姓名', trigger: ['blur', 'change']}],
unionName: [{required: true, message: '请选择工会', trigger: ['blur', 'change']}],
unitName: [{required: true, message: '请选择单位', trigger: ['blur', 'change']}],
// travelName: [{required: true, message: '请选择旅行社', trigger: ['blur', 'change']}],
specificTime: [{required: true, message: '请选择出行时间', trigger: ['blur', 'change']}],
// travelLine: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
editSpecificTimes: [],
labelName: '',
unionSelectLines: [],
lineLabelName: '',
activeNames:[]
}
},
components: {
'enroll-info': httpVueLoader('/components/theRapyRecuperation/Enrollinfo.vue'),
'enroll-info': httpVueLoader('/components/theRapyRecuperation/Enrollinfo.vue?v=1.0.1'),
'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue')
},
methods: {
async validateLine() {
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo'
, {enroll: JSON.stringify(this.editFormData)})
if (resp.code !== 0) {
this.$message.warning(resp.msg)
this.editFormData.takePartInLineId = ''
}
},
async doDelete(row) {
this.$confirm("您确定要删除【<span style='color: red'>" + row.userName + "</span>】的此条报名信息吗?", '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
dangerouslyUseHTMLString: true,
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/doDeleteMyEnrollInfoById/' + row.id)
if (resp.code === 0) {
await this.doSearch()
this.$message.success('删除成功')
await this.getApplyNumAudit();
} else {
this.$message.warning(resp.msg)
}
}
}
})
},
async doEdit() {
this.$refs['editForm'].validate().then(async () => {
const confirm = await this.$confirm('您确定要修改这位老师的报名信息吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
if (!this.editFormData.takePartInLineId && !this.editFormData.takePartInBaseManagementId) {
this.$message.warning('请选择线路')
return
}
const resp = await $.post('/platform/theRapyRecuperation/user/query/doEdit', this.editFormData)
if (resp.code === 0) {
this.$notify.success(resp.msg)
this.editVisible = false
await this.doSearch();
} else {
this.$notify.error(resp.msg)
}
}
})
},
async openEdit(row) {
this.editFormData = {};
const resp = await $.get("/platform/theRapyRecuperation/TheRapyAudit/findOne", {id: row.id})
if (resp.code === 0) {
this.editFormData = {...resp.data.viewData}
if (this.modifyConfig.familyInfo == 2) {
this.editFormData.companionList = resp.data.viewData.companionList
this.labelName = "家属信息"
} else {
this.editFormData.bedType = resp.data.viewData.familyNumber
this.labelName = "家属数量"
}
}
if (row.takePartInBaseManagementId) {
this.editSpecificTime(row.takePartInBaseManagementId);
this.lineLabelName = "酒店"
} else if (row.takePartInLineId) {
this.lineLabelName = '线路'
}
this.editVisible = true
},
openUser(row) {
this.companionList = row.companionList
this.familyDrawer = true
@@ -1004,7 +1234,7 @@ layout("/layouts/platform.html"){
async openApplyUser(row) {
sublime.showLoadingbar();
const pageForm = clone(this.pageFormUser)
pageForm.id = row.id
pageForm.id = this.pageForm.state === '1' ? row.selectId : row.id
pageForm.unionId = this.unionId
let url = this.pageForm.state === '1' ? '/platform/theRapyRecuperation/line/selectLineUser' : '/platform/theRapyRecuperation/query/selectAgencyUser'
$.post(url, pageForm, (data) => {
@@ -1032,10 +1262,22 @@ layout("/layouts/platform.html"){
}
},
pageOrder1(column) {
async pageOrder1(column) {
this.pageForm.pageOrderName = column.prop;
this.pageForm.pageOrderBy = column.order;
this.getSelfUnionUser();
if (this.pageForm.lb === "") {
this.getSelfUnionUser()
} else if (this.pageForm.lb === "xl") {
await this.getXlData()
} else if (this.pageForm.lb === "lxs") {
this.getLxsData()
await this.getAgencyList()
} else if (this.pageForm.lb === "jd") {
this.getJdData()
await this.getJdList()
} else {
await this.getRyData()
}
},
getSelfUnionUser() {
this.tableLoading = true
@@ -1064,20 +1306,21 @@ layout("/layouts/platform.html"){
{prop: 'regionalNature', label: '线路类型', sortable: true},
{prop: 'isFamily', label: '是否携带家属'},
{prop: 'isTakePartIn', label: '是否参加'},
{prop: 'stateId', label: '审核状态'},
// {prop: 'stateId', label: '审核状态'},
]
this.getSelfUnionUser()
} else if (this.pageForm.lb === "xl") {
this.tableColumns = [
{prop: 'year', label: '年度'},
{prop: 'lineName', label: '线路名称', sortable: true},
{prop: 'times', label: '出行时间'},
// {prop: 'times', label: '出行时间'},
{prop: 'linePlayTime', label: '出行时间'},
{prop: 'travelAgencyName', label: '承担旅行社', sortable: true},
{prop: 'unionname', label: '创建工会', sortable: true},
{prop: 'regionalNature', label: '线路类型', sortable: true},
{prop: 'signUpMode', label: '组织形式', sortable: true},
{prop: 'contact', label: '联系人', sortable: true},
{prop: 'contactMobileNumber', label: '联系方式'},
{prop: 'contact', label: '联系人', sortable: true, checked: 0},
{prop: 'contactMobileNumber', label: '联系方式', checked: 0},
{prop: 'lineNum', label: '报名人数(家属)'}
]
await this.getXlData()
@@ -1118,7 +1361,7 @@ layout("/layouts/platform.html"){
{prop: 'times', label: '出行时间'},
{prop: 'isFamily', label: '是否携带家属'},
{prop: 'isTakePartIn', label: '是否参加'},
{prop: 'stateId', label: '审核状态'},
// {prop: 'stateId', label: '审核状态'},
]
await this.getRyData()
}
@@ -1246,7 +1489,7 @@ layout("/layouts/platform.html"){
this.options2 = [
{label: "本工会人员(自己线路)" + data.count1 + "人", value: "1"},
{label: "本工会人员(其他路线)" + data.count2 + "人", value: "2"},
{label: "其他工会人员(选我线路)" + data.count3 + "人", value: "3"},
// {label: "其他工会人员(选我线路)" + data.count3 + "人", value: "3"},
{label: "选择校工会线路人员" + data.count4 + "人", value: "4"}
]
@@ -1275,11 +1518,11 @@ layout("/layouts/platform.html"){
});
this.importLoading = true
const resp = await $.post('/platform/theRapyRecuperation/user/query/enrollImport',data)
if (resp.code === 0){
const resp = await $.post('/platform/theRapyRecuperation/user/query/enrollImport', data)
if (resp.code === 0) {
await this.pageData();
this.importVisible = false
}else {
} else {
this.notifyWarning("导入失败")
this.importLoading = false
}
@@ -1288,6 +1531,15 @@ layout("/layouts/platform.html"){
this.importVisible = false;
this.pageData();
},
async getUnionSelectLine() {
const resp = await $.post('/platform/theRapyRecuperation/user/query/getUnionSelectLine', {
year: this.pageForm.year,
signUpMode: 1,
})
if (resp.code === 0) {
this.unionSelectLines = resp.data
}
},
},
async created() {
await this.getModifyConfig()
@@ -1311,6 +1563,7 @@ layout("/layouts/platform.html"){
}
}
this.flushUnits()
await this.getUnionSelectLine()
}
})
</script>
@@ -138,12 +138,12 @@ layout("/layouts/platform.html"){
:key="item.value"
:type="item.label"
size="medium"
@click="checkSignUpModeState(item.value)"
@click="checkSignUpModeState(item.value);doSearch()"
style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;"
v-for="item in signUpModeOptions">
{{ item.label }}
</el-tag>
<el-link :underline="false" @click="signUpModeClear"
<el-link :underline="false" @click="signUpModeClear();doSearch()"
type="danger" v-if="signUpModeOptions.length && pageForm.signUpMode">清空
</el-link>
</el-col>
@@ -175,7 +175,7 @@ layout("/layouts/platform.html"){
style="width: 80%" @change="doSearch()">
<el-option v-for="item in takePartInLines"
:key="item.id"
:label="item.lineName+''+item.playStartTime1+''+''+item.unionname+''"
:label="item.lineName+''+item.unionname+''"
:value="item.id">
</el-option>
</el-select>
@@ -217,6 +217,10 @@ layout("/layouts/platform.html"){
<table-tool label="人员列表" :app="this">
<template #func>
<el-button icon="el-icon-s-promotion" size="medium" type="primary"
@click="doExport"
class="mr10" v-if="pageForm.state">导出
</el-button>
<el-button style="margin-right: 10px" @click="openImport" size="medium" type="primary">参加人员导入
</el-button>
<el-button icon="el-icon-s-promotion" size="medium" type="primary"
@@ -264,7 +268,12 @@ layout("/layouts/platform.html"){
</el-link>-->
</template>
<template scope="{row}" v-else-if="column.prop=='isFamily'">
{{row.isFamily?'携带':'未携带'}}{{row.isFamily}}
<el-link v-if="!row.familyNumber" type="primary" @click="openView(row)">
{{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=='isTakePartIn'">
{{row.isTakePartIn?'已参加':'未参加'}}
@@ -275,10 +284,16 @@ layout("/layouts/platform.html"){
</template>
</el-table-column>
<el-table-column label="操作" width="100px">
<el-table-column label="操作" width="250px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看
</el-button>
<!--<el-button
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}"
@click="openEdit(row)" size="mini" type="primary">编辑
</el-button>-->
<el-button @click="doDelete(row)" size="mini" type="danger">删除
</el-button>
</template>
</el-table-column>
</el-table>
@@ -408,6 +423,142 @@ layout("/layouts/platform.html"){
</el-dialog>
<el-dialog
title="修改信息"
:visible.sync="editVisible"
:close-on-click-modal="false"
width="50%">
<el-form :model="editFormData" label-width="120px" :rules="rules" ref="editForm" style="margin-right: 40px">
<el-row>
<el-col span="12">
<el-form-item prop="loginName" label="工号">
<el-input v-model="editFormData.loginName" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="userName" label="姓名">
<el-input v-model="editFormData.userName" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col span="12">
<el-form-item prop="userName" label="手机号">
<el-input v-model="editFormData.mobile" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="userName" label="身份证号">
<el-input v-model="editFormData.idCard" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col span="12">
<el-form-item prop="unionName" label="工会">
<el-input v-model="editFormData.unionName" readonly></el-input>
</el-form-item>
</el-col>
<el-col span="12">
<el-form-item prop="unitName" label="单位">
<el-input v-model="editFormData.unitName" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="prop" :label="labelName">
<template v-if="modifyConfig.familyInfo == 2">
<el-collapse v-model="activeNames">
<el-collapse-item title="点击可展开详细信息" name="1">
<el-card shadow="never">
<el-table :data="editFormData.companionList">
<el-table-column label="姓名" prop="userName"></el-table-column>
<el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="身份证号" prop="idCard"></el-table-column>
<el-table-column label="年龄" prop="age"></el-table-column>
<el-table-column label="床型" prop="bedType">
<template scope="{row}">
{{ row.bedInfo.bedType }}
</template>
</el-table-column>
<el-table-column label="床位" prop="bedNum">
<template scope="{row}">
{{ row.bedInfo.bedNum }}
</template>
</el-table-column>
<el-table-column label="意向拼床人" prop="otherSleepUser">
<template scope="{row}">
{{ row.bedInfo.otherSleepUser ?
row.bedInfo.otherSleepUser : '暂无' }}
</template>
</el-table-column>
<el-table-column label="关系" prop="relation"></el-table-column>
</el-table>
</el-card>
</el-collapse-item>
</el-collapse>
</template>
<template v-else>
<el-input v-model="editFormData.bedType" readonly></el-input>
</template>
</el-form-item>
<!--<el-form-item prop="travelName" label="旅行社">
<el-select v-model="editFormData.agencyId" filterable clearable
placeholder="请选择旅行社"
style="width: 100%">
<el-option v-for="item in agencyLists"
:key="item.id"
:label="item.travelAgencyName"
:value="item.id">
</el-option>
</el-select>
</el-form-item>-->
<el-form-item prop="travelLine" :label="lineLabelName">
<div v-if="pageForm.state==='1'">
<el-select v-model="editFormData.takePartInLineId" filterable clearable
placeholder="请选择线路"
@change="validateLine"
style="width: 100%">
<el-option v-for="item in unionSelectLines"
:key="item.id"
:label="item.lineName + '-' + item.regionalNature + '【' + item.lotName + '】' + '' + item.playStartTime + '至' + item.playEndTime + '' + '' + item.signUpMode + ''"
:value="item.id">
</el-option>
</el-select>
</div>
<div v-if="pageForm.state==='3'">
<el-select v-model="editFormData.takePartInBaseManagementId" filterable clearable
placeholder="请选择目的地"
style="width: 100%"
@change="editSpecificTime(editFormData.takePartInBaseManagementId)">
<el-option :key="item.id"
:label="item.baseName +''+item.lotName+''"
:value="item.id"
v-for="item in jdList">
</el-option>
</el-select>
</div>
</el-form-item>
<el-form-item prop="specificTime" label="出行时间" v-if="pageForm.state==='3'">
<el-select v-model="editFormData.specificTime" filterable clearable
placeholder="请选择出行时间"
style="width: 100%">
<el-option v-for="item in editSpecificTimes"
:key="item"
:label="item"
:value="item">
</el-option>
</el-select>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editVisible = false">取 消</el-button>
<el-button type="primary" @click="doEdit">确 定</el-button>
</span>
</el-dialog>
</guava>
</div>
@@ -428,7 +579,7 @@ layout("/layouts/platform.html"){
options: [
{label: "线路", value: "1"},
// {label: "旅行社", value: "2"},
{label: "酒店", value: "3"},
{label: "定点", value: "3"},
],
agencyLists: [],
unionOptions: [],
@@ -444,20 +595,22 @@ layout("/layouts/platform.html"){
{prop: 'playStartTime', label: '出行时间'},
{prop: 'regionalNature', label: '线路类型'},
{prop: 'lotName', label: '标段'},
{prop: 'isFamily', label: '是否携带家属'},
{prop: 'isFamily', label: '是否含随行人'},
{prop: 'signingUptime', label: '报名时间', checked: 0},
{prop: 'isTakePartIn', label: '是否参加'},
{prop: 'takePartInTime', label: '参加时间', checked: 0},
],
pageForm: {
startYear: (moment().format('YYYY') - 2) + '',
startYear: moment().format('YYYY'),
endYear: moment().format('YYYY'),
searchName: "userName",
unionId: '',
agencyId: '',
state: '1',
regionalNature: '',
signUpMode: null
signUpMode: '',
lotId:'',
takePartInLineId:'',
},
multipleSelection: [],
multipleSelection2: [],
@@ -469,13 +622,162 @@ layout("/layouts/platform.html"){
{label: '校工会组织', value: 2},
{label: '分工会组织', value: 1},
],
editVisible: false,
editFormData: {},
rules: {
loginName: [{required: true, message: '请填写工号', trigger: ['blur', 'change']}],
userName: [{required: true, message: '请填写姓名', trigger: ['blur', 'change']}],
unionName: [{required: true, message: '请选择工会', trigger: ['blur', 'change']}],
unitName: [{required: true, message: '请选择单位', trigger: ['blur', 'change']}],
// travelName: [{required: true, message: '请选择旅行社', trigger: ['blur', 'change']}],
specificTime: [{required: true, message: '请选择出行时间', trigger: ['blur', 'change']}],
// travelLine: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
editSpecificTimes: [],
labelName: '',
unionSelectLines: [],
lineLabelName: '',
activeNames:[]
}
},
components: {
'enroll-info': httpVueLoader('/components/theRapyRecuperation/Enrollinfo.vue'),
'enroll-info': httpVueLoader('/components/theRapyRecuperation/Enrollinfo.vue?v=1.0.1'),
'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue')
},
methods: {
doModify(row){
this.$confirm("您确定要调整【<span style='color: red'>" + row.userName + "</span>】的此条报名信息吗?", '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
dangerouslyUseHTMLString: true,
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/doModify/' + row.id)
if (resp.code === 0) {
await this.doSearch()
this.$message.success('调整成功')
}
}
}
})
},
doExport() {
const {
takePartInBaseManagementId,
searchName,
startYear,
endYear,
signUpMode,
searchKeyword,
unionId,
agencyId,
specificTime,
takePartInLineId,
state,
lotId,
linePlayTime,
} = this.pageForm
let types = this.pageForm.state == 1 ? JSON.stringify(['line']) : JSON.stringify(['base'])
window.open(loc() + "/doExport?takePartInBaseManagementId=" + takePartInBaseManagementId +
"&searchName=" + searchName +
"&searchKeyword=" + searchKeyword +
"&startYear=" + startYear +
"&endYear=" + endYear +
"&signUpMode=" + signUpMode +
"&unionId=" + unionId +
"&agencyId=" + agencyId +
"&specificTime=" + specificTime +
"&takePartInLineId=" + takePartInLineId +
"&state=" + state +
"&lotId=" + lotId +
"&satisfyPeople=false" +
"&types=" + types +
"&linePlayTime=" + linePlayTime)
},
async validateLine() {
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo'
, {enroll: JSON.stringify(this.editFormData)})
if (resp.code !== 0) {
this.$message.warning(resp.msg)
this.editFormData.takePartInLineId = ''
}
},
async doEdit() {
this.$refs['editForm'].validate().then(async () => {
const confirm = await this.$confirm('您确定要修改这位老师的报名信息吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
if (!this.editFormData.takePartInLineId && !this.editFormData.takePartInBaseManagementId) {
this.$message.warning('请选择线路')
return
}
const resp = await $.post('/platform/theRapyRecuperation/user/query/doEdit', this.editFormData)
if (resp.code === 0) {
this.$notify.success(resp.msg)
this.editVisible = false
await this.doSearch();
} else {
this.$notify.error(resp.msg)
}
}
})
},
async openEdit(row) {
this.editFormData = {};
const resp = await $.get("/platform/theRapyRecuperation/TheRapyAudit/findOne", {id: row.id})
if (resp.code === 0) {
this.editFormData = {...resp.data.viewData}
if (this.modifyConfig.familyInfo == 2) {
this.editFormData.companionList = resp.data.viewData.companionList
this.labelName = "家属信息"
} else {
this.editFormData.bedType = resp.data.viewData.familyNumber
this.labelName = "家属数量"
}
}
if (row.takePartInBaseManagementId) {
this.editSpecificTime(row.takePartInBaseManagementId);
this.lineLabelName = "酒店"
} else if (row.takePartInLineId) {
this.lineLabelName = '线路'
}
this.editVisible = true
},
editSpecificTime(id) {
const jd = this.jdList.find(v => v.id === id)
if (jd) {
const lot = this.modifyConfig.lots.find(v => v.id === jd.lotId)
if (lot.lotName === '四晚五天') {
this.editSpecificTimes = this.getTimeByLot1(jd)
} else if (lot.lotName === '两晚三天') {
this.editSpecificTimes = this.getTimeByLot2(jd)
}
}
},
doDelete(row) {
this.$confirm("您确定要删除【<span style='color: red'>" + row.userName + "</span>】的此条报名信息吗?", '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
dangerouslyUseHTMLString: true,
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
const resp = await $.post('/platform/theRapyRecuperation/line/enroll/doDeleteMyEnrollInfoById/' + row.id)
if (resp.code === 0) {
await this.doSearch()
this.$message.success('删除成功')
}
}
}
})
},
async signUpModeClear() {
this.pageForm.signUpMode = ''
this.takePartInLines = await this.getXlByUnion()
@@ -580,6 +882,7 @@ layout("/layouts/platform.html"){
this.pageForm.pageNumber = 1
this.pageData()
await this.getXlLxsUserCount()
this.takePartInLines = await this.getXlByUnion()
},
async getLines() {
const {data} = await $.post("/platform/theRapyRecuperation/travelAgency/selectLineByAgencyId", {
@@ -604,7 +907,8 @@ layout("/layouts/platform.html"){
async getXlByUnion() {
const {data} = await $.post("/platform/theRapyRecuperation/TheRapyAudit/getXlByUnion", {
unionId: this.pageForm.unionId,
year: this.pageForm.year,
year: this.pageForm.startYear,
endYear: this.pageForm.endYear,
signUpMode: this.pageForm.signUpMode,
})
data.forEach(v => {
@@ -636,7 +940,8 @@ layout("/layouts/platform.html"){
const {data} = await $.post("/platform/theRapyRecuperation/user/query/getXlLxsUserCount", {
unionId: this.pageForm.unionId,
startYear: this.pageForm.startYear,
endYear: this.pageForm.endYear
endYear: this.pageForm.endYear,
signUpMode: this.pageForm.signUpMode
})
this.options.forEach((v, index) => {
if (v.value === "1") {
@@ -679,10 +984,10 @@ layout("/layouts/platform.html"){
processData: false,
contentType: false,
success: (data) => {
if (data.code === 0){
if (data.code === 0) {
this.pageData();
this.importVisible = false
}else {
} else {
this.importLoading = false
}
},
@@ -696,9 +1001,17 @@ layout("/layouts/platform.html"){
this.importVisible = false;
this.pageData();
},
async getUnionSelectLine() {
const resp = await $.post('/platform/theRapyRecuperation/user/query/getUnionSelectLine')
if (resp.code === 0) {
this.unionSelectLines = resp.data
}
},
},
async created() {
await this.getModifyConfig()
await this.getAgencyList()
await this.getUnionSelectLine();
this.unionOptions = await getUnions(null)
this.flushUnits()
await this.getXlLxsUserCount()
@@ -75,6 +75,34 @@ layout("/layouts/platform.html"){
</div>
</div>
<div class="search-item">
<div class="search-item-label">线路类型:</div>
<div class="search-item-option">
<el-radio-group class="mr0-radio"
v-model="pageForm.regionalNature">
<el-radio-button :label="item.value"
border v-for="item in regionalNatureList">
{{item.label}}
</el-radio-button>
</el-radio-group>
</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>
@@ -119,9 +147,12 @@ layout("/layouts/platform.html"){
</el-switch>
</template>
<template scope="{row}" v-else-if="column.prop==='signUpUserAndFamilyNum'">
<span class="text-primary">
<span class="text-primary" v-if="configData.familyInfo == 2">
{{row.signUpUserNum + row.signUpUserFamilyNum}}
</span>
<span class="text-primary" v-else>
{{row.signUpUserNum + row.familyNumber}}
</span>
</template>
<template scope="{row}" v-else-if="column.prop==='playTime'">
<template v-if="row.playStartTime">{{row.playStartTime + '至' + row.playEndTime}}</template>
@@ -131,7 +162,7 @@ layout("/layouts/platform.html"){
<el-table-column label="操作" width="100px">
<template scope="{row}">
<el-button @click="openViewSignUpUsers(row.id,row.unionId)" size="mini" type="primary">调整
<el-button @click="openViewSignUpUsers(row.usId,row.unionId)" size="mini" type="primary">调整
</el-button>
</template>
</el-table-column>
@@ -153,7 +184,7 @@ layout("/layouts/platform.html"){
<el-table :row-class-name="getRowClassName" :cell-class-name="getColumnClassName"
:data="schoolFreeSignUpUserList" ref="adjustTable">
<el-table-column :selectable="(row)=>{return row.isNormal}" type="selection"></el-table-column>
<el-table-column selectable="" type="selection"></el-table-column>
<el-table-column label="序号" type="expand" width="150px">
<template scope="{row}">
<el-card class="companion_card" shadow="never">
@@ -178,9 +209,12 @@ layout("/layouts/platform.html"){
<el-table-column label="报名时间" prop="signingUptime"></el-table-column>
<el-table-column label="家属人数" prop="companionCount">
<template scope="{row}">
<span class="text-primary">
<span v-if="configData.familyInfo === 2" class="text-primary">
{{row.companionCount}}
</span>
<span v-else class="text-primary">
{{row.familyNumber}}
</span>
</template>
</el-table-column>
<el-table-column label="是否调整" prop="isNormal">
@@ -218,6 +252,8 @@ layout("/layouts/platform.html"){
},
data() {
return {
lotList: [],
regionalNatureList: [],
schoolFreeLineList: [],
pageForm: {
year: new Date().getFullYear().toString(),
@@ -236,7 +272,7 @@ layout("/layouts/platform.html"){
// {label: '组织形式', prop: 'signUpMode', sortable: true},
{label: '创建模式', prop: 'createMode'},
// {label: '报名模式', prop: 'signUpMode'},
{label: '最少成团人数', prop: 'minimumGroupSize'},
{label: '最少参与教工', prop: 'minimumGroupSize'},
{label: '报名人数(含家属)', prop: 'signUpUserAndFamilyNum', width: '150px'},
{label: '是否启用', prop: 'isDisabled', sortable: true}
@@ -244,11 +280,15 @@ layout("/layouts/platform.html"){
schoolFreeSignUpUserList: [],
currentLineId: null,
currentLineSelectUnionId: null,
unionOptions: []
unionOptions: [],
configData: {},
}
},
methods: {
async getLotList() {
const {data} = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
this.lotList = data.lots
},
getRowClassName({row, rowIndex}) {
if (row.companionCount === 0) {
return 'row-expand-cover'
@@ -332,20 +372,52 @@ layout("/layouts/platform.html"){
})
if (confirm !== 'confirm') return
const lineId = this.currentLineId
const selection = this.$refs.adjustTable.selection
const loginNames = selection.map(v => v.loginName)
const loginNames = selection.filter(v=>v.isNormal === true).map(v => v.loginName)
if (loginNames.length == 0) {
this.$message.warning('所有教职工已调整,请勿重复勾选')
return
}
const resp = await $.post(loc() + '/adjustmentUser', {lineId, loginNames: JSON.stringify(loginNames)})
if (resp.code === 0) {
this.notifySuccess(resp.msg)
await this.openViewSignUpUsers(this.currentLineId, this.currentLineSelectUnionId)
await this.pageData();
} else {
this.notifyWarning(resp.msg)
}
},
smsAlerts() {
async smsAlerts() {
if (this.$refs.adjustTable.selection.length === 0) {
this.notifyWarning('请选择需要发送短信通知的人员')
return
}
const confirm = await this.$confirm('此操作会向已调整的人员发送短信,您确定要发送短信提醒吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm !== 'confirm') return
const lineId = this.currentLineId
const selection = this.$refs.adjustTable.selection
const loginNames = selection.filter(v=>v.isNormal === false).map(v => v.loginName)
if (loginNames.length == 0) {
this.$message.warning('暂无已调整人员,请先进行人员调整')
return
}
const resp = await $.post( loc() + '/smsAlerts',{lineId:lineId,loginNames: JSON.stringify(loginNames)})
if (resp.code === 0) {
this.notifySuccess(resp.msg)
await this.openViewSignUpUsers(this.currentLineId, this.currentLineSelectUnionId)
await this.pageData();
} else {
this.notifyWarning(resp.msg)
}
},
async lineStatusChange(id) {
const resp = await $.post('/platform/theRapyRecuperation/line/openClosedLine/' + id)
@@ -355,12 +427,19 @@ layout("/layouts/platform.html"){
this.notifyWarning(resp.msg)
}
},
async getConfigData() {
const resp = await $.get('/platform/theRapyRecuperation/TheRapyConfig/findOne')
this.configData = resp.data
},
},
async created() {
await this.getConfigData()
this.createModeList = await getEnumOptions('TheRapyRecuperationLineCreateMode')
this.signUpModeList = await getEnumOptions('TheRapyRecuperationSignUpMode')
this.regionalNatureList = await getEnumOptions('TheRapyRecuperationProvinceType')
this.unionOptions = await getUnions(null)
await this.findUnionSignUpModeLineList()
this.lotList = this.getLotList()
await this.pageData()
}
})
@@ -328,7 +328,7 @@ layout("/layouts/platform.html"){
{label: '旅行社名称', prop: 'travelAgencyName', sortable: true},
{label: '线路类型', prop: 'regionalNature', sortable: true},
{label: '出行时间', prop: 'times', sortable: true},
{label: '最少成团人数', prop: 'minimumGroupSize', sortable: true},
{label: '最少参与教工', prop: 'minimumGroupSize', sortable: true},
// {label: '创建工会', prop: 'createUnionName'},
// {label: '创建人', prop: 'createUserName', sortable: true},
// {label: '创建模式', prop: 'createMode'},
@@ -31,6 +31,7 @@ layout("/layouts/platform.html"){
style="width: 100%"
placeholder="选择年度"
type="year"
@change="doSearch"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
@@ -53,6 +54,21 @@ layout("/layouts/platform.html"){
</div>
</div>
<div class="search-item">
<div class="search-item-label">线路类型:</div>
<div class="search-item-option">
<el-radio-group class="mr0-radio"
@change="doSearch"
:disabled = "pageForm.mode == 1"
v-model="pageForm.regionalNature">
<el-radio-button :label="item.value"
border v-for="item in regionalNatureList">
{{item.label}}
</el-radio-button>
</el-radio-group>
</div>
</div>
<div class="search-item">
<div class="search-item-label">线路名称:</div>
<div class="search-item-option">
@@ -98,10 +114,16 @@ layout("/layouts/platform.html"){
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="线路列表">
<table-tool :app="this" label="线路列表(温馨提示:如查询条件的年度为空时,已选择默认查询当年选择的线路)">
<template #func>
<el-radio-group @change="doSearch" size="medium" v-model="pageForm.selectStatus">
<el-radio-button :label="0">全部</el-radio-button>
<el-button @click="showGiveTimes" type="primary"
size="small" style="margin-right: 10px">
一键统赋时间
</el-button>
<el-radio-group @change="doSearch" size="small" v-model="pageForm.selectStatus">
<!--<el-radio-button :label="0">全部</el-radio-button>-->
<el-radio-button :label="1">已选择</el-radio-button>
<el-radio-button :label="-1">可选择</el-radio-button>
</el-radio-group>
@@ -110,8 +132,11 @@ layout("/layouts/platform.html"){
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
ref="table"
align="center"
row-key="id"
@selection-change="handleSelectionChange"
header-align="center">
<el-table-column type="selection"></el-table-column>
<el-table-column type="selection" reserve-selection width="55px"
:selectable="(row)=>{return row.isDisabled==true || !(row.usId==null || row.usId == '')}"></el-table-column>
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
@@ -123,6 +148,7 @@ layout("/layouts/platform.html"){
header-align="center"
:show-overflow-tooltip="column.prop!=='playTime'"
:key="column.prop"
v-if="pageForm.mode != 2 || (pageForm.mode == 2 && column.prop !== 'isOpen')"
v-for="column in tableColumns"
:width="column.width"
>
@@ -142,6 +168,9 @@ layout("/layouts/platform.html"){
<template scope="{row:{createMode}}" v-else-if="column.prop==='createMode'">
{{createModeName(createMode)}}
</template>
<template scope="{row}" v-else-if="column.prop==='belongUnionName'">
{{pageForm.mode == 2 && pageForm.selectStatus == 1 ? '校工会' : row.belongUnionName}}
</template>
<template scope="{row}" v-else-if="column.prop==='playTime'">
<template v-if="row.playTimes">
<!--<el-tooltip placement="top">
@@ -154,11 +183,14 @@ layout("/layouts/platform.html"){
</el-tooltip>-->
<el-tooltip placement="top">
<div slot="content">
<div v-for="(t,ti) in row.playTimes.split(',')" :key="t" :class="[ti==row.playTimes.split(',').length-1?'':'mb10']">
<div v-for="(t,ti) in row.playTimes.split(',')" :key="t"
:class="[ti==row.playTimes.split(',').length-1?'':'mb10']">
{{t}}
</div>
</div>
<div style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis">{{row.playTimes}}</div>
<div style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis">
{{row.playTimes}}
</div>
</el-tooltip>
<!-- <div v-for="t in row.playTimes.split(',')" :key="t">
{{t}}
@@ -175,6 +207,20 @@ layout("/layouts/platform.html"){
<span v-else>{{row.belongUnionName}}</span>
</template>
<template scope="{row}" v-else-if="column.prop==='isOpen'">
<template v-if="row.usId">
<el-switch
@change="doEditOpen(row)"
v-model="row.isOpen"
active-color="#13ce66"
inactive-color="#ff4949">
</el-switch>
</template>
<template v-else>
<span>暂未选择</span>
</template>
</template>
</el-table-column>
<el-table-column label="操作" width="100px">
@@ -240,7 +286,11 @@ layout("/layouts/platform.html"){
<el-row class="playPeriod">
<el-descriptions border :column="3" class="playPeriodTable">
<el-descriptions-item label="报名开始时间">
<el-descriptions-item>
<template slot="label">
<span class="text-danger">*</span>
报名开始时间
</template>
<el-form-item :prop="'times.' + $index + '.signUpStartTime'"
:rules="{required:true,message:'报名开始时间',trigger:['change','blur']}"
label-width="0">
@@ -251,19 +301,28 @@ layout("/layouts/platform.html"){
</el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="报名结束时间">
<el-descriptions-item>
<template slot="label">
<span class="text-danger">*</span>
报名结束时间
</template>
<el-form-item :prop="'times.' + $index + '.signUpEndTime'"
:rules="{required:true,message:'报名结束时间',trigger:['change','blur']}"
label-width="0">
<el-date-picker style="width: 100%"
type="datetime"
@change="doSetChangeTimeByZjxu($index,row.signUpEndTime)"
v-model="row.signUpEndTime"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="变更截至时间">
<el-descriptions-item>
<template slot="label">
<span class="text-danger">*</span>
变更截至时间
</template>
<el-form-item :prop="'times.' + $index + '.changeEndTime'"
:rules="{required:true,message:'变更截至时间',trigger:['change','blur']}"
label-width="0">
@@ -275,7 +334,11 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="出行开始时间">
<el-descriptions-item>
<template slot="label">
<span class="text-danger">*</span>
出行开始时间
</template>
<el-form-item :prop="'times.' + $index + '.playStartTime'"
:rules="{required:true,message:'出行开始时间',trigger:['change','blur']}"
label-width="0">
@@ -287,7 +350,11 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="出行结束时间">
<el-descriptions-item>
<template slot="label">
<span class="text-danger">*</span>
出行结束时间
</template>
<el-form-item :prop="'times.' + $index + '.playEndTime'"
:rules="{required:true,message:'出行结束时间',trigger:['change','blur']}"
label-width="0">
@@ -298,7 +365,11 @@ layout("/layouts/platform.html"){
</el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="联系人">
<el-descriptions-item>
<template slot="label">
<span class="text-danger">*</span>
联系人
</template>
<el-form-item :prop="'times.' + $index + '.contact'"
:rules="{required:true,message:'联系人',trigger:['change','blur']}"
label-width="0">
@@ -306,7 +377,11 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="联系方式">
<el-descriptions-item>
<template slot="label">
<span class="text-danger">*</span>
联系方式
</template>
<el-form-item :prop="'times.' + $index + '.contactPhone'"
:rules="[
{ required: true, message: '手机号码不能为空', trigger: 'blur' },
@@ -317,11 +392,11 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="最少成团人数">
<el-descriptions-item label="最少参与教工">
<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>
@@ -345,14 +420,14 @@ layout("/layouts/platform.html"){
</el-descriptions-item>
<el-descriptions-item label="预计人数(含家属">
<el-descriptions-item label="成团人数包括家属">
<el-form-item :prop="'times.' + $index + '.estimatedFamilyNumbers'"
:rules="[
{ required: false, message: '预计人数(含家属不能为空', trigger: 'blur' },
{ pattern: /^[0-9]*$/, message: '预计人数(含家属格式不正确', trigger: 'blur' }
{ required: false, message: '成团人数包括家属不能为空', trigger: 'blur' },
{ pattern: /^[0-9]*$/, message: '成团人数包括家属格式不正确', trigger: 'blur' }
]"
label-width="0">
<el-input clearable v-model="row.estimatedFamilyNumbers"></el-input>
<el-input clearable v-model="row.estimatedFamilyNumbers" placeholder="省外线路人数上限,不限制请忽略"></el-input>
</el-form-item>
</el-descriptions-item>
@@ -430,7 +505,7 @@ layout("/layouts/platform.html"){
{{row.contactPhone}}
</el-descriptions-item>
<el-descriptions-item label="最少成团人数">
<el-descriptions-item label="最少参与教工">
{{row.minimumGroupSize}}
</el-descriptions-item>
@@ -442,7 +517,7 @@ layout("/layouts/platform.html"){
{{row.estimatedCost}}
</el-descriptions-item>
<el-descriptions-item label="预计人数(含家属">
<el-descriptions-item label="成团人数包括家属">
{{row.estimatedFamilyNumbers}}
</el-descriptions-item>
@@ -467,6 +542,103 @@ layout("/layouts/platform.html"){
</div>
</el-dialog>
<el-dialog :close-on-click-modal="false" :visible.sync="setGiveLineTimeDialog" title="统赋出行时间段信息"
width="80%">
<el-form :model="giveLineTimesData" :rules="giveLineTimesRules" label-width="0" ref="giveLineTimesForm"
size="small">
<div v-for="(row,$index) in giveLineTimesData.times" :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">
<h3 class="panel-title">
出行时间段
</h3>
</div>
<el-row class="playPeriod">
<el-descriptions border :column="3" class="playPeriodTable">
<el-descriptions-item label="报名开始时间">
<el-form-item :prop="'times.' + $index + '.signUpStartTime'"
:rules="{required:false,message:'报名开始时间',trigger:['change','blur']}"
label-width="0">
<el-date-picker style="width: 100%"
type="datetime"
v-model="row.signUpStartTime"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="报名结束时间">
<el-form-item :prop="'times.' + $index + '.signUpEndTime'"
:rules="{required:false,message:'报名结束时间',trigger:['change','blur']}"
label-width="0">
<el-date-picker style="width: 100%"
type="datetime"
v-model="row.signUpEndTime"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="变更截至时间">
<el-form-item :prop="'times.' + $index + '.changeEndTime'"
:rules="{required:false,message:'变更截至时间',trigger:['change','blur']}"
label-width="0">
<el-date-picker style="width: 100%"
type="datetime"
v-model="row.changeEndTime"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="出行开始时间">
<el-form-item :prop="'times.' + $index + '.playStartTime'"
:rules="{required:false,message:'出行开始时间',trigger:['change','blur']}"
label-width="0">
<el-date-picker style="width: 100%"
type="datetime"
v-model="row.playStartTime"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="出行结束时间">
<el-form-item :prop="'times.' + $index + '.playEndTime'"
:rules="{required:false,message:'出行结束时间',trigger:['change','blur']}"
label-width="0">
<el-date-picker style="width: 100%"
type="datetime"
v-model="row.playEndTime"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-descriptions-item>
<!--<el-descriptions-item label="是否开启">
<el-form-item :prop="'times.' + $index + '.enable'"
label-width="0">
<el-switch
v-model="row.enable"
:active-value="true"
:inactive-value="false"
active-color="#13ce66"
inactive-color="#ff4949">
</el-switch>
</el-form-item>
</el-descriptions-item>-->
</el-descriptions>
</el-row>
</div>
<el-alert closable show-icon style="margin:10px 0"
title="温馨提醒:变更时间应该大于报名截至时间,小于出行时间。"
type="warning"></el-alert>
</el-form>
<el-row justify="end" type="flex">
<el-button @click="setGiveLineTimeDialog=false">取消</el-button>
<el-button @click="doSetGiveLineTimes" type="primary">提交</el-button>
</el-row>
</el-dialog>
</guava>
</div>
@@ -517,20 +689,59 @@ layout("/layouts/platform.html"){
callback()
}
//统赋时间
const validateGiveSignUpEndTime = (rule, value, callback) => {
console.log(value)
if (!value) {
callback(new Error('请选择报名截至时间'))
}
if (this.giveLineTimesData.signUpStartTime) {
if (Date.parse(value) <= Date.parse(this.giveLineTimesData.signUpStartTime)) {
callback(new Error('报名截至时间必须大于报名开始时间'))
}
}
callback()
}
const validateGiveChangeEndTime = (rule, value, callback) => {
if (!value) {
callback(new Error('请选择变更截至时间'))
}
if (this.giveLineTimesData.signUpEndTime) {
if (Date.parse(value) <= Date.parse(this.giveLineTimesData.signUpEndTime)) {
callback(new Error('变更截至时间必须大于报名截至时间'))
}
}
callback()
}
const validateGivePlayEndTime = (rule, value, callback) => {
if (!value) {
callback(new Error('请选择出行结束时间'))
}
if (this.giveLineTimesData.playStartTime) {
if (Date.parse(value) <= Date.parse(this.giveLineTimesData.playStartTime)) {
callback(new Error('出行结束时间必须大于出行开始时间'))
}
}
callback()
}
return {
tableColumns: [
{label: '年度', prop: 'year', sortable: true},
// {label: '年度', prop: 'year', sortable: true},
{label: '线路名称', prop: 'lineName', sortable: true},
{label: '线路类型', prop: 'regionalNature', sortable: true},
{label: '时间标段', prop: 'lotName', sortable: true, sortProp: 'lotValue'},
{label: '出行时间', prop: 'playTime', sortable: true, sortProp: 'playStartTime', width: 230},
{label: '出行时间', prop: 'playTime', sortable: 'custom', sortProp: 'playStartTime', width: 230},
{label: '承担旅行社', prop: 'travelAgencyName', sortable: true},
// {label: '所属分工会', prop: 'belongUnionName', sortable: true},
{label: '组织形式', prop: 'signUpMode', sortable: true},
// {label: '编号', prop: 'serialNumber', sortable: true},
// {label: '创建模式', prop: 'createMode', sortable: true},
//{label: '创建人', prop: 'createUserName', sortable: true},
{label: '创建工会', prop: 'createUnionName', sortable: true},
{label: '选择工会', prop: 'belongUnionName', sortable: true},
{label: '是否开放对外报名', prop: 'isOpen', sortable: true},
// {label: '是否启用', prop: 'isDisabled', sortable: true}
],
rules: {
@@ -557,9 +768,9 @@ layout("/layouts/platform.html"){
},
pageForm: {
keywords: null,
year: new Date().getFullYear().toString(),
selectStatus: -1,
unionId: null
unionId: null,
regionalNature: '省内'
},
createModeList: [],
signUpModeList: [],
@@ -572,11 +783,60 @@ layout("/layouts/platform.html"){
lineConfig: {
groupNumber: null,
cost: null
}
},
regionalNatureList: [{label:'全部线路',name:'provinceAll',ordinal:0,provinceIn:'provinceIn',provinceOut:'provinceOut',value:'全部'}],
multipleSelection: [],
giveLineTimesData: {
times: []
},
giveLineTimesRules: {
signUpStartTime: [{required: false, message: '请选择报名开始时间', trigger: ['change', 'blur']}],
signUpEndTime: [{
required: false,
validator: validateGiveSignUpEndTime,
trigger: ['change', 'blur']
}],
changeEndTime: [{
required: false,
validator: validateGiveChangeEndTime,
trigger: ['change', 'blur']
}],
playStartTime: [{required: false, message: '请选择出行开始时间', trigger: ['change', 'blur']}],
playEndTime: [{required: false, validator: validateGivePlayEndTime, trigger: ['change', 'blur']}],
},
setGiveLineTimeDialog: false,
}
},
computed: {},
computed: {
computedChangeEndTime() {
return this.formData.times.map(row => ({
...row,
changeEndTime: row.signUpEndTime,
}));
},
},
methods: {
doSearch() {
this.tableData = []
this.tableKey = new Date().getTime()
this.pageForm.pageNumber = 1
this.pageData()
},
pageOrder(column) {
if(column.prop === 'playTime') {
this.pageForm.pageOrderName = 'playStartTime'
} else {
this.pageForm.pageOrderName = column.prop;
}
this.pageForm.pageOrderBy = column.order;
this.pageData();
},
doSetChangeTimeByZjxu(index, value){
this.$set(this.formData.times[index], "changeEndTime", value)
},
async openViewLineInfo({id, usUnionId}) {
this.$refs.guava.view()
this.$refs.viewLineInfo.openView(id, usUnionId)
@@ -585,7 +845,8 @@ layout("/layouts/platform.html"){
const resp = await $.post(loc() + '/selectLineInfo', {
lineId: id,
unionId: usUnionId,
mode: GetQueryString('mode')
mode: GetQueryString('mode'),
year: this.pageForm.year
})
if (resp.code === 0) {
this.timeLots = resp.data
@@ -601,13 +862,22 @@ layout("/layouts/platform.html"){
const resp = await $.post(loc() + '/selectLineInfo', {
lineId: id,
unionId: usUnionId,
mode: GetQueryString('mode')
mode: GetQueryString('mode'),
year: this.pageForm.year
})
if (resp.code === 0 && resp.data) {
this.$set(this.formData, 'times', resp.data)
this.formData = {
times:[]
}
if(resp.data && resp.data.length > 0){
this.$set(this.formData, 'times', resp.data)
}else{
this.formData.times.push({enable:true,minimumGroupSize:this.lineConfig.groupNumber,estimatedCost:this.lineConfig.cost})
}
this.formData.lineId = id
this.formData.signUpMode = signUpMode
this.$set(this.formData, 'lineName', lineName)
this.setLineTimeDialog = true
} else {
this.notifyWarning(resp.msg)
@@ -678,13 +948,82 @@ layout("/layouts/platform.html"){
async getLineConfig(lineId) {
const {data} = await $.post(loc() + '/getLineConfig/' + lineId)
this.lineConfig = data
},
handleSelectionChange(val) {
this.multipleSelection = val;
},
showGiveTimes() {
if (!this.multipleSelection || this.multipleSelection.length == 0) {
this.$message.warning('请在线路列表中勾选您想要统赋时间的线路!');
return
}
this.giveLineTimesData = {
times: [{
signUpStartTime: '',
signUpEndTime: '',
changeEndTime: '',
playStartTime: '',
playEndTime: '',
}]
}
this.setGiveLineTimeDialog = true;
},
async doSetGiveLineTimes() {
const valid = await this.$refs['giveLineTimesForm'].validate()
if (!valid) return
const confirm = await this.$confirm('请再次确认,是否为选择线路统赋时间?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm !== 'confirm') return
const lineIds = this.multipleSelection.map(v => v.id)
const fmtData = this.giveLineTimesData.times.map(v => {
return {
...v,
signUpMode: this.formData.signUpMode,
mode: GetQueryString('mode')
}
})
const resp = await $.post(loc() + '/setGiveLineTimes', {
lineIds: JSON.stringify(lineIds),
lineUnionSelects: JSON.stringify(fmtData),
year:this.pageForm.year
})
if (resp.code === 0) {
this.setGiveLineTimeDialog = false
this.pageData()
this.$message.success(resp.msg)
this.$refs.table.clearSelection()
} else {
this.$message.warning(resp.msg)
}
},
async doEditOpen(row){
console.log(row)
const resp = await $.get(loc() + '/doEditOpen',{id:row.usId})
if (resp.code === 0){
this.$message.success(resp.msg)
} else {
this.$message.warning(resp.msg)
}
this.pageData()
}
},
async created() {
this.$set(this.pageForm, 'mode', GetQueryString('mode'))
if(this.pageForm.mode == 2) {
this.$set(this.pageForm, 'regionalNature', '全部')
}
this.pageData()
this.createModeList = await getEnumOptions('TheRapyRecuperationLineCreateMode')
this.signUpModeList = await getEnumOptions('TheRapyRecuperationSignUpMode')
this.regionalNatureList.push(...await getEnumOptions('TheRapyRecuperationProvinceType'))
// const result = await getEnumOptions('TheRapyRecuperationProvinceType')
this.unionOptions = await getUnions(null)
this.travelAgencyOptions = this.getTravelAgencyOptions()
this.lotList = this.getLotList()
@@ -695,4 +1034,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -0,0 +1,505 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.query-row {
height: 70px;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
}
.query-row .el-col {
overflow: hidden;
}
.query-row:not(:last-child) {
border-bottom: 1px dashed rgb(230, 230, 230);
}
.query-row-title {
width: 120px;
}
.el-table-container {
padding-top: 0;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<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>&emsp;&emsp;度:</span>
<el-date-picker
:clearable="false"
v-model="pageForm.startYear"
type="year"
value-format="yyyy"
placeholder="选择年"
style="width: 38%" @change="getUnionSelectLine(); doSearch()">
</el-date-picker>
<span></span>
<el-date-picker
:clearable="false"
v-model="pageForm.endYear"
type="year"
value-format="yyyy"
placeholder="选择年"
style="width: 38%" @change="doSearch">
</el-date-picker>
</el-col>
<el-col :span="12">
<span>所属工会:</span>
<el-select v-model="pageForm.unionId" placeholder="请选择所属工会"
@change="doSearch()"
filterable clearable style="width: 80%">
<el-option
v-for="item in unions"
:key="item.id"
:label="item.unionname"
:value="item.id">
</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.regionalNature" filterable
placeholder="请选择线路"
style="width: 80%"
@change="lineTypeChange">
<el-option label="全部" value=""></el-option>
<el-option label="省内" value="省内"></el-option>
<el-option label="省外" value="省外"></el-option>
</el-select>
</el-col>
<el-col :span="12">
<span>线&emsp;&emsp;路:</span>
<el-select v-model="pageForm.takePartInLineId" filterable clearable
placeholder="请选择线路"
style="width: 80%" @change="lineChange">
<el-option v-for="item in lineList"
:key="item.id"
:label="item.lineName + '-' + item.regionalNature + '【' + item.lotName + '】' + '' + item.signUpMode + ''"
:value="item.lineId">
</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>&emsp;&emsp;段:</span>
<el-select v-model="pageForm.lotId" filterable clearable
placeholder="请选择标段"
style="width: 80%" @change="doSearch()">
<el-option v-for="item in modifyConfig.lots"
:key="item.id"
:label="item.lotName"
:value="item.id">
</el-option>
</el-select>
</el-col>
<el-col :span="12">
<span>出行时间:</span>
<el-select v-model="pageForm.selectId" filterable clearable
placeholder="请选择出行时间"
style="width: 80%" @change="playChange">
<el-option v-for="item in linePlayTimes"
:key="item.times"
:label="item.times"
:value="item.selectId">
</el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="数据列表" :app="this" ref="table_tool">
<template #func>
<el-button icon="el-icon-s-promotion" size="small" type="primary"
@click="doExport"
class="mr10">导出成团线路人员
</el-button>
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%"
ref="table"
row-key="id" @sort-change="pageOrder"
v-loading="tableLoading">
<el-table-column align="center" header-align="center" type="index" label="序号"
width="80px" key="#index">
<template scope="scope">
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
</template>
</el-table-column>
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:label="column.label"
:prop="column.prop"
:width="column.width"
:sortable="column.sortable"
>
<template scope="{row}" v-if="column.prop=='lineName'">
<el-link type="primary" @click="openLine(row)">{{row.lineName}}
</el-link>
</template>
<template scope="{row}" v-if="column.prop=='signUpMode'">
<span>{{row.signUpMode == '1' ? '校工会组织' : '分工会组织'}}</span>
</template>
<template scope="{row}" v-else-if="column.prop=='lineNum'">
<el-link v-if="!row.familyNumber" type="primary" @click="openUserData(row)">
{{row.lineNum + row.signUpUserFamilyNum}}{{row.signUpUserFamilyNum}}
</el-link>
<el-link v-else type="primary">
{{row.lineNum + row.familyNumber}}{{row.familyNumber}}
</el-link>
</template>
</el-table-column>
<el-table-column label="操作" width="380px">
<template scope="{row}">
<template>
<el-button @click="openUserData(row)" size="mini" type="primary">
查看人员
</el-button>
<el-button size="mini" type="primary" @click="sendSuccess(row)">
发送成团通知
</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="sendFail(row, true)">保留报名记录</el-dropdown-item>
<el-dropdown-item @click.native="sendFail(row, false)">删除报名记录</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #public>
<line-info ref="viewLineInfo"></line-info>
</template>
<template #edit>
<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></el-input>
</div>
</div>
<div class="search-item"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('SchoolUnionMemberAdmin')}">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select @change="flushUnits" @clear="flushUnits" clearable="true"
filterable="true"
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-item">
<div class="search-item-label">所属单位:</div>
<div class="search-item-option">
<el-select clearable="true" filterable="true" placeholder="所属单位"
style="width: 100%;"
v-model="userPageForm.unitId">
<el-option :label="item.name" :value="item.id" v-for="item in units"></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>
</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>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
startYear: moment().format('YYYY'),
endYear: moment().format('YYYY'),
unionId: '',
regionalNature: '',
signUpMode: '',
lotId: '',
takePartInLineId: '',
selectId: '',
},
linePlayTimes: [],
tableColumns: [
{prop: 'year', label: '年度', width: 60},
{prop: 'lineName', label: '线路名称', sortable: true, width: 200},
{prop: 'linePlayTime', label: '出行时间', width: 180},
{prop: 'travelAgencyName', label: '承担旅行社', sortable: true, width: 180},
{prop: 'unionname', label: '选择线路工会', sortable: true},
{prop: 'regionalNature', label: '线路类型', sortable: true},
{prop: 'contact', label: '联系人', sortable: true, checked: 0},
{prop: 'contactMobileNumber', label: '联系方式', checked: 0},
{prop: 'estimatedFamilyNumbers', label: '最少成团人数', width: 80},
{prop: 'lineNum', label: '报名人数(家属)'},
],
modifyConfig: {},
lineList: [],
unions: [],
units:[],
signUpModeOptions: [
{label: '校工会组织', value: 2},
{label: '分工会组织', value: 1},
],
userPageForm:{
pageNumber:1,
pageSize: 10
},
userData:[],
userDataTableColumns:[
{prop: 'loginName', label: '工号'},
{prop: 'userName', label: '姓名'},
{prop: 'unionName', label: '所属工会'},
{prop: 'unitName', label: '所属单位', sortable: true},
{prop: 'isFamily', label: '是否携带家属'},
{prop: 'linePlayTime', label: '出行时间', sortable: true}
],
lineUId: '',
selectLine: {
lineName: '全部'
},
takePartInLines: [],
}
},
components: {
'enroll-info': httpVueLoader('/components/theRapyRecuperation/Enrollinfo.vue?v=1.0.1'),
'line-info': httpVueLoader('/components/theRapyRecuperation/LineInfo.vue')
},
methods: {
doExport() {
const {
startYear,
endYear,
unionId,
takePartInLineId,
lotId,
linePlayTime,
regionalNature,
} = this.pageForm
window.open("/platform/theRapyRecuperation/user/query/doExport?" +
"startYear=" + startYear +
"&endYear=" + endYear +
"&unionId=" + unionId +
"&takePartInLineId=" + takePartInLineId +
"&lotId=" + lotId +
"&regionalNature=" + regionalNature +
"&satisfyPeople=true" +
"&types=" + JSON.stringify(['line']) +
"&linePlayTime=" + linePlayTime)
},
async getLinePlayTimeByLineId(id) {
const resp = await $.get('/platform/theRapyRecuperation/TheRapyXghAudit/getLinePlayTimeByLineId', {
lineId: id,
startYear: this.pageForm.startYear,
endYear: this.pageForm.endYear,
flag: true
})
if (resp.code === 0) {
this.linePlayTimes = resp.data
}
},
async lineChange(val) {
this.pageForm.selectId = ''
await this.getLinePlayTimeByLineId(val);
await this.doSearch()
},
async playChange() {
await this.doSearch()
},
lineTypeChange() {
this.pageForm.takePartInLineId = ''
this.getUnionSelectLine()
this.doSearch()
},
async sendSuccess(row) {
this.$confirm("确定发送<span style='color: red'>成团通知</span>吗?", '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(async () => {
const resp = await $.post('/platform/theRapyRecuperation/statistics/sendSuccess', {id: row.lineUId})
if (resp.code === 0) {
this.$message.success(resp.msg)
} else {
this.$message.warning(resp.msg)
}
})
},
sendFail(row, type) {
this.$confirm("确定发送<span style='color: red'>未成团通知</span><span style='color: red'>" + (type ? '保留' : '删除') + "报名记录</span>吗?", '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(async () => {
const resp = await $.post('/platform/theRapyRecuperation/statistics/sendFail', {id: row.lineUId, type: type})
if (resp.code === 0) {
this.$message.success(resp.msg)
} else {
this.$message.warning(resp.msg)
}
})
},
openLine(row) {
this.$refs.guava.public()
if (row.regionalNature === "省内") {
this.$refs.viewLineInfo.findOne(row.lineId, null)
} else {
this.$refs.viewLineInfo.findOne(row.lineId, row.usUnionId)
}
},
openUserData(row){
this.lineUId = row.lineUId
this.$refs.guava.edit();
this.getUserDataByLineId(row)
},
async getUnionSelectLine() {
const resp = await $.post('/platform/theRapyRecuperation/user/query/getUnionSelectLine', {
startYear: this.pageForm.startYear,
endYear: this.pageForm.endYear,
signUpMode: this.pageForm.signUpMode,
flag: true,
regionalNature: this.pageForm.regionalNature
})
if (resp.code === 0) {
this.lineList = resp.data
}
},
async getModifyConfig() {
const res = await $.post('/platform/theRapyRecuperation/TheRapyConfig/findOne')
if (res.code === 0) {
this.modifyConfig = res.data
}
},
async flushUnits() {
this.$set(this.userData, "unitId", "")
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('SchoolUnionMemberAdmin')}" === 'true') {
this.units = await getUnits(this.userData.unionId)
} else {
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
}
},
userPageSizeChange(val) {
this.userPageForm.pageSize = val;
this.getUserDataByLineId();
},
userPageNumberChange(val) {
this.userPageForm.pageNumber = val;
this.getUserDataByLineId();
},
async getUserDataByLineId(row){
this.userPageForm.takePartLineId = this.lineUId
const resp = await $.post(loc() + '/getUserDateByLine',this.userPageForm)
if (resp.code === 0){
this.userData = resp.data.list
this.userPageForm.totalCount = resp.data.totalCount
}
}
},
async created() {
this.unions = await getUnions()
await this.getModifyConfig();
await this.getUnionSelectLine();
this.pageData();
this.flushUnits();
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,268 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava :edit_scroll="false" 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
:clearable="false"
@change="yearChange"
placeholder="选择年"
style="width: 100%"
type="year"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">线路:</div>
<div class="search-item-option">
<el-select @change="doSearch" filterable="true"
placeholder="请选择线路"
style="width: 100%;" :clearable="true"
v-model="pageForm.lineId">
<el-option :label="item.lineName + '' + item.unionName + ''" :value="item.id"
v-for="item in lineList"></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 placeholder="请输入内容"
style="width: 100%" v-model="pageForm.searchKeyword">
<el-select slot="prepend" style="width: 80px;"
v-model="pageForm.searchName">
<el-option label="姓名" value="we.userName"></el-option>
<el-option label="工号" value="we.loginName"></el-option>
</el-select>
</el-input>
</div>
</div>
<div class="search-item">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select @change="flushUnits" @clear="flushUnits"
clearable
filterable="true"
placeholder="所属工会" style="width: 100%;"
v-model="pageForm.unionId">
<el-option :label="item.unionname" :value="item.id"
v-for="item in unions"></el-option>
</el-select>
</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="pageForm.unitId">
<el-option
:key="item.id"
:label="item.name"
:value="item.id"
v-for="item in units">
</el-option>
</el-select>
</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="pageForm.evaluateScore">
<el-option
:key="item.code"
:label="item.name"
:value="item.code"
v-for="item in evaluateScores">
</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-button @click="exportEvaluate" size="small" type="primary">导出名单</el-button>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
ref="table"
row-key="id" style="width: 100%" v-loading="tableLoading">
<el-table-column :index="indexMethod" align="center" header-align="center"
label="序号" type="index"
width="80px"></el-table-column>
<el-table-column
:key="column.prop"
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
:width="column.width"
align="center"
header-align="center"
min-width="100px" show-overflow-tooltip
v-for="column in tableColumns">
</el-table-column>
<el-table-column align="center" header-align="center" label="操作"
prop="userOnline" width="150px">
<template scope="{row}">
<el-button @click="openEvaluate(row)" size="mini" type="primary">查看评价
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
</guava>
<el-dialog
:close-on-click-modal="false"
:visible.sync="evaluateDialogVisible"
title="评分内容"
width="30%">
<el-form :model="formData" label-width="60px" ref="form">
<el-form-item :rules="[{ required: true, message: ''}]" label="评分">
<!--<div style="position: absolute; top: 20%;">
<el-rate disabled
show-score text-color="#ff9900"
v-model="viewData.evaluateScore"></el-rate>
</div>-->
<span>{{viewData.evaluateScore}}</span>
</el-form-item>
<el-form-item label="评价">
<!--<el-input disabled
maxlength="100"
placeholder="请输入评价"
rows="5"
show-word-limit
type="textarea"
v-model="viewData.evaluateText"
>
</el-input>-->
<span>{{viewData.evaluateText}}</span>
</el-form-item>
</el-form>
<span class="dialog-footer" slot="footer">
<el-button @click="evaluateDialogVisible = false" type="primary">关 闭</el-button>
</span>
</el-dialog>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
unions: [],
units: [],
evaluateDialogVisible: false,
lineList: [],
tableColumns: [
{prop: 'lineName', label: '线路'},
{prop: 'playStartTime', label: '出行时间'},
{prop: 'loginName', label: '工号'},
{prop: 'userName', label: '姓名'},
{prop: 'unitname', label: '单位'},
{prop: 'unionname', label: '工会'},
{prop: 'userState', label: '在职状态'},
{prop: 'personType', label: '人员类型'},
{prop: 'evaluateScore', label: '评分', sortable: true},
{prop: 'evaluateText', label: '评价'},
],
pageForm: {
searchName: "we.userName",
year: new Date().getFullYear().toString(),
lineId: '',
searchKeyword: '',
unionId: '',
unitId: '',
evaluateScore: '',
},
viewData: {},
evaluateScores: [
{name: "满意", code: "满意"},
{name: "一般", code: "一般"},
{name: "不满意", code: "不满意"},
],
}
},
methods: {
exportEvaluate() {
window.open('/platform/therapyRecuperation/evaluate/statistics/exportEvaluate' +
'?lineId=' + this.pageForm.lineId +
'&searchName=' + this.pageForm.searchName +
'&searchKeyword=' + this.pageForm.searchKeyword +
'&unionId=' + this.pageForm.unionId +
'&unitId=' + this.pageForm.unitId +
'&evaluateScore=' + this.pageForm.evaluateScore)
},
openEvaluate(row) {
this.viewData = {
lineId: row.id,
evaluateText: row.evaluateText,
evaluateScore: row.evaluateScore,
}
this.evaluateDialogVisible = true
},
async getLineList() {
const resp = await $.get('/platform/therapyRecuperation/evaluate/statistics/lineList', {year: this.pageForm.year})
this.lineList = resp.data
},
async yearChange() {
this.$set(this.pageForm, "lineId", null)
await this.getLineList()
this.doSearch()
},
async flushUnits() {
this.$set(this.pageForm, "unitId", null)
this.units = []
if (this.pageForm.unionId) {
this.units = await getUnits(this.pageForm.unionId)
}
},
},
async created() {
await this.getLineList()
this.pageData()
this.unions = await getUnions(null, false)
}
})
</script>
<!--#
}
#-->
@@ -12,11 +12,11 @@ layout("/layouts/platform.html"){
padding: 12px 25px;
}
.el-dialog__title {
font-size: 18px; /* 修改标题字体大小 */
color: red; /* 修改标题字体颜色 */
border-bottom: none; /* 去掉标题底部边框线 */
}
/*.el-dialog__title {
font-size: 18px; !* 修改标题字体大小 *!
color: red; !* 修改标题字体颜色 *!
border-bottom: none; !* 去掉标题底部边框线 *!
}*/
</style>
@@ -33,29 +33,61 @@ layout("/layouts/platform.html"){
<el-input v-model="formData.configName" placeholder="请输入配置名称"></el-input>
</el-form-item>
<el-form-item prop="activityGroupId" label="参加人员范围">
<el-select v-model="formData.activityGroupId" placeholder="请选择参加人员范围" filterable
clearable
style="width: 100%">
<el-option v-for="item in activityGroupList"
:value="item.groupId"
:key="item.groupId"
:label="item.groupName"></el-option>
</el-select>
<div style="display: flex; justify-content: space-between">
<div style="width: 99%">
<el-select v-model="formData.activityGroupId" placeholder="请选择参加人员范围" filterable
clearable
style="width: 99%">
<el-option v-for="item in activityGroupList"
:value="item.groupId"
:key="item.groupId"
:label="item.groupName"></el-option>
</el-select>
</div>
<div>
<el-button @click="$refs.drawerUserScope.userScopeDialog = true" type="primary">设置</el-button>
</div>
</div>
</el-form-item>
<el-form-item label="省外名额分配" prop="outsideQuota">
<el-form-item label="省外最多成团人数" prop="outsideQuota">
<el-input v-model.number="formData.outsideQuota"
placeholder="请输入省外名额分配"></el-input>
placeholder="请输入每条省外线路最多成团人数"></el-input>
</el-form-item>
<el-form-item label="省外名额分配比例" prop="outsideQuotaProportion">
<el-slider
show-input
v-model="formData.outsideQuotaProportion">
</el-slider>
</el-form-item>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="省外名额分配模式" prop="outsideQuotaMode">
<el-radio-group v-model="formData.outsideQuotaMode" size="small">
<el-radio label="fixedRatio" border>固定比例</el-radio>
<el-radio label="unionRatio" border>分工会名额</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<template v-if="formData.outsideQuotaMode == 'fixedRatio'">
<el-col :span="12">
<el-form-item label="省外名额分配比例" prop="outsideQuotaProportion">
<el-input placeholder="请输入省外名额分配比例" v-model="formData.outsideQuotaProportion">
<template slot="append">%</template>
</el-input>
</el-form-item>
</el-col>
</template>
<template v-else-if="formData.outsideQuotaMode == 'unionRatio'">
<el-col :span="12">
<el-form-item label="分工会名额分配" prop="unionLimit">
<el-button @click="doAllocationUnionRatio" type="primary" size="small">点我分配分工会省外名额</el-button>
<template>
<span v-if="formData.unionLimit && formData.unionLimit.length > 0" class="text-success">已分配</span>
<span v-else class="text-danger">未分配</span>
</template>
</el-form-item>
</el-col>
</template>
</el-row>
<el-form-item label="省外几年去一次" prop="outsideNumber">
<el-input max="100"
@@ -69,9 +101,9 @@ layout("/layouts/platform.html"){
v-model.number="formData.travelFrequency"></el-input>
</el-form-item>
<el-form-item label="组团人数" prop="groupNumber">
<el-form-item label="最少教工人数" prop="groupNumber">
<el-input max="100"
placeholder="请输入组团人数"
placeholder="请输入最少教工人数"
v-model.number="formData.groupNumber"></el-input>
</el-form-item>
@@ -113,6 +145,20 @@ layout("/layouts/platform.html"){
v-model.number="formData.provinceStartYear"></el-input>
</el-form-item>
<el-form-item label="床位信息" prop="bedInfo">
<el-radio-group v-model="formData.bedInfo">
<el-radio-button :label="true">需要</el-radio-button>
<el-radio-button :label="false">不需要</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="家属信息" prop="familyInfo">
<el-radio-group v-model="formData.familyInfo">
<el-radio-button :label="1">数量</el-radio-button>
<el-radio-button :label="2">详细信息</el-radio-button>
</el-radio-group>
</el-form-item>
<vi-title title="标段管理"></vi-title>
<el-form-item label="标段">
<el-button type="primary" @click="formData.lots.push({})"
@@ -153,7 +199,8 @@ layout("/layouts/platform.html"){
<vi-title title="服务须知"></vi-title>
<el-form-item label="疗休养服务须知" prop="notice">
<div id="lineContent"></div>
<text-editor v-model="formData.notice"></text-editor>
<!-- <div id="lineContent"></div>-->
</el-form-item>
<el-form-item class="item-button">
@@ -200,12 +247,84 @@ layout("/layouts/platform.html"){
</span>
</el-dialog>
</guava>
<drawer-user-scope
@group_change="getActivityGroup"
ref="drawerUserScope"
:group_id.sync="formData.activityGroupId"
></drawer-user-scope>
<el-dialog :close-on-click-modal="false" :visible.sync="setUpUnionLimitDialog" title="分工会人数限制" top="50px">
<vi-title2 title="分段设置">
<template #func>
<el-button size="small" type="primary" @click="unionLimitQuickSetting">
应用分段设置
</el-button>
</template>
</vi-title2>
<el-row v-for="(item,index) in unionUserNumCalc" :gutter="20" class="mb5">
<el-col :span="7">
<el-input-number v-model="item.startNum" :precision="0" :step="1" :min="1" placeholder="请输入最小人数"
style="width: 100%"></el-input-number>
</el-col>
<el-col :span="7">
<el-input-number v-model="item.endNum" :precision="0" :step="1" :min="1" placeholder="请输入最大人数"
style="width: 100%"></el-input-number>
</el-col>
<el-col :span="6">
<el-input-number v-model="item.resultNum" :precision="0" :step="1" :min="1" placeholder="请输入限制人数"
style="width: 100%"></el-input-number>
</el-col>
<el-col :span="4" class="text-right">
<el-button icon="el-icon-plus" @click="unionUserNumCalc.push({})"></el-button>
<el-button icon="el-icon-minus" @click="unionUserNumCalc.splice(index,1)"
:disabled="unionUserNumCalc.length===1"></el-button>
</el-col>
</el-row>
<el-row class="mt10">
<div v-for="(item,index) in unionUserNumCalcTips" class="text-danger">
<span class="mr10">({{index+1}}).</span> {{item}}
</div>
</el-row>
<vi-title2 title="比例设置" class="mt20">
<template #func>
一键比例:
<el-input-number v-model="unionUserNumOneKeyRatio" :precision="0" :step="1" :min="0"
placeholder="请输入一键比例"
size="small"
:max="100"></el-input-number>
<el-button size="small" type="primary" @click="applyScaleSettings" class="ml5">应用比例设置</el-button>
</template>
</vi-title2>
<el-table :data="formData.unionLimit" max-height="500px">
<el-table-column prop="unionname" label="分工会"></el-table-column>
<el-table-column prop="teacherCount" label="人数"></el-table-column>
<el-table-column prop="ratio" label="比例(%)">
<template scope="{row}">
<el-input-number v-model="row.ratio" :precision="0" :step="1" :min="0" :max="100"></el-input-number>
</template>
</el-table-column>
<el-table-column prop="limitCount" label="限制人数">
<template scope="{row}">
<el-input-number v-model="row.limitCount" :precision="0" :step="1" :min="0"
:max="row.teacherCount" @change="calSummaryCount"></el-input-number>
</template>
</el-table-column>
</el-table>
<el-row class="mt20" justify="end" type="flex">
<div class="text-danger" style="width: 100%;font-size: 18px;display: flex;align-items: center;font-weight: bold">限制总人数:{{summaryCount}}人</div>
<el-button @click="clearUnionLimit" type="danger">清空分工会人数限制</el-button>
<el-button @click="setUpUnionLimitDialog=false">取消</el-button>
<el-button @click="doConfirmSetUpUnionLimit" type="primary">确定</el-button>
</el-row>
</el-dialog>
</div>
<script>
const vue = new Vue({
el: '#app',
data() {
return {
activityGroupList: [],
@@ -225,6 +344,9 @@ layout("/layouts/platform.html"){
allLineSignUpNumber: null,
notice: null,
provinceStartYear: null,
bedInfo: true,
familyInfo: 1,
unionLimit: []
},
formRules: {
configName: [{required: true, message: '请填写配置名称', trigger: ['blur', 'change']}],
@@ -232,7 +354,7 @@ layout("/layouts/platform.html"){
isSwLine: [{required: true, message: '请选择省外线路是否需要审核', trigger: ['blur', 'change']}],
outsideQuota: [{
required: true,
message: '请填写省外名额分配',
message: '请输入每条省外线路最多成团人数',
trigger: ['blur', 'change']
}],
outsideNumber: [{
@@ -247,7 +369,7 @@ layout("/layouts/platform.html"){
}],
groupNumber: [{
required: true,
message: '请填写组团人数',
message: '请填写最少教工人数',
trigger: ['blur', 'change']
}],
modifyDays: [{
@@ -272,6 +394,8 @@ layout("/layouts/platform.html"){
}],
notice: [{required: true, message: '请输入详细内容', trigger: ['change', 'blur']}],
provinceStartYear: [{required: true, message: '请输入省内起始年份', trigger: ['change', 'blur']}],
bedInfo: [{required: true, message: '请选择床位信息', trigger: ['change', 'blur']}],
familyInfo: [{required: true, message: '请选择家属信息', trigger: ['change', 'blur']}],
},
marks: [],
@@ -280,9 +404,100 @@ layout("/layouts/platform.html"){
centerDialogVisible:false,
tableScopeId:'',
tableScopeIndex:'',
userScopeDialog: false,
// 分配分工会省外线路的比例相关
setUpUnionLimitDialog: false,
unionUserNumCalc: [{}],
unionUserNumOneKeyRatio: null,
summaryCount: 0,
}
},
components: {
'drawer-user-scope': httpVueLoader('/components/plugins/DrawerUserScope.vue?v=1.0.1'),
},
methods: {
// 设置分工会比例相关==============================================start
async doAllocationUnionRatio(){
this.setUpUnionLimitDialog = true
if (!this.formData.unionLimit || this.formData.unionLimit.length === 0) {
const resp = await $.get('/platform/trainSingUp/manage/activity/add/getUnionLimit', {activityScopeId: this.formData.activityGroupId})
if (resp.code === 0) {
this.$set(this.formData, 'unionLimit', resp.data)
}
}
this.calSummaryCount()
// this.summaryCount = this.formData.unionLimit.reduce((prev, curr) => {
// console.log(curr)
// const value = Number(curr.limitCount);
// if (!isNaN(value)) {
// return prev + curr.limitCount;
// } else {
// return prev;
// }
// }, 0)
},
unionLimitQuickSetting() {
this.unionUserNumCalc.forEach((v, i) => {
const startNum = v.startNum
const endNum = v.endNum
const resultNum = v.resultNum
if (startNum > endNum) {
this.$message.warning('第' + (i + 1) + '行设置错误')
} else {
this.formData.unionLimit.forEach(x => {
if (x.teacherCount >= startNum && x.teacherCount <= endNum) {
x.limitCount = resultNum
}
})
this.calSummaryCount()
}
})
},
applyScaleSettings() {
this.formData.unionLimit.forEach(v => {
v.limitCount = parseFloat((v.teacherCount * this.unionUserNumOneKeyRatio / 100).toFixed(0))
if (v.ratio) {
v.limitCount = parseFloat((v.teacherCount * v.ratio / 100).toFixed(0))
}
})
this.calSummaryCount()
},
calSummaryCount() {
const array = this.formData.unionLimit
if (array) {
this.summaryCount = array.reduce((prev, curr) => {
const value = Number(curr.limitCount);
if (!isNaN(value)) {
return prev + curr.limitCount;
} else {
return prev;
}
}, 0)
}
},
async clearUnionLimit() {
const confirm = await this.$confirm('确定要清空分工会人数限制吗, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if ('confirm' === confirm) {
this.formData.unionLimit = []
this.unionUserNumOneKeyRatio = null
this.unionUserNumCalc = [{}]
this.setUpUnionLimitDialog = false
}
},
doConfirmSetUpUnionLimit() {
this.setUpUnionLimitDialog = false
/*if (this.formData.unionLimit) {
const totalLimit = this.formData.unionLimit.map(v => v.limitCount).reduce((a, b) => a + b)
console.log(totalLimit)
this.formData.coursePeopleNumber = totalLimit
}*/
},
// 设置分工会省外比例相关结束==============================================end
async deleteLotsRow(scope) {
//this.lotDeleteList.push(scope.row.id);
//console.log(this.lotDeleteList)
@@ -309,6 +524,7 @@ layout("/layouts/platform.html"){
},
resetForm() {
this.formData.lots = []
this.formData.unionLimit = []
if (this.$refs['addForm']) {
this.$refs['addForm'].resetFields()
}
@@ -331,6 +547,9 @@ layout("/layouts/platform.html"){
if (this.formData.lots && this.formData.lots.length > 0) {
cloneData.lots = JSON.stringify(this.formData.lots)
}
if (this.formData.unionLimit && this.formData.unionLimit.length > 0) {
cloneData.unionLimit = JSON.stringify(this.formData.unionLimit)
}
cloneData.outsideQuotaProportion = cloneData.outsideQuotaProportion / 100
const resp = await $.post(loc() + "/operation", cloneData)
if (resp.code === 0){
@@ -353,24 +572,24 @@ layout("/layouts/platform.html"){
data.lots = []
}
this.formData = data
this.initLineContentEditor(data.notice)
// this.initLineContentEditor(data.notice)
},
async getActivityGroup() {
const {data} = await $.get('/platform/activity/basic/scope/getActivityUserScopeGroup')
this.activityGroupList = data
},
initLineContentEditor(content) {
$("#lineContent").html("")
lineContentEditor = new wangEditor("#lineContent")
lineContentEditor.config.onchange = (html) => {
this.formData.notice = html.replace(/<p\><\/p>/g, '')
}
lineContentEditor.config.uploadImgShowBase64 = true
lineContentEditor.create()
if (content) {
lineContentEditor.txt.html(content)
}
},
// initLineContentEditor(content) {
// $("#lineContent").html("")
// lineContentEditor = new wangEditor("#lineContent")
// lineContentEditor.config.onchange = (html) => {
// this.formData.notice = html.replace(/<p\><\/p>/g, '')
// }
// lineContentEditor.config.uploadImgShowBase64 = true
// lineContentEditor.create()
// if (content) {
// lineContentEditor.txt.html(content)
// }
// },
async closeDialog() {
this.tableScopeIndex = '';
this.tableScopeId = '';
@@ -396,10 +615,26 @@ layout("/layouts/platform.html"){
}
}
},
computed: {
unionUserNumCalcTips() {
return this.unionUserNumCalc.map(v => {
return (v.startNum ? v.startNum : '?') + '-' + (v.endNum ? v.endNum : '?') + '人的分工会,限报' + (v.resultNum ? v.resultNum : '?') + '人'
})
},
},
async created() {
this.findOne();
this.initLineContentEditor();
}
// this.initLineContentEditor();
},
watch: {
'formData.activityGroupId': {
async handler(newVal, oldVal) {
this.activityGroupList = await getActivityGroup()
this.userScopeDialog = false
},
deep: true
},
},
})
</script>
@@ -245,7 +245,6 @@ layout("/layouts/platform.html"){
</el-row>
<el-card shadow="never" class="mt10">
<table-tool :label="trainType + '信息'" :app="this">
<template #label_end>
<div class="search-item-option">
@@ -513,14 +512,13 @@ layout("/layouts/platform.html"){
activityList: [],
courseTypeList: [],
tableColumns: [
{prop: 'courseName', label: '名称', width: '250px'},
{prop: 'lxname', label: '类型', width: '70px'},
{prop: 'assort', label: '标识', width: '150px'},
// {prop: 'coursePeopleNumber', label: '总人数', width: '80px'},
{prop: 'courseLocationCoordinates', label: '地点'},
{prop: 'courseInstructor', label: '联系人'},
{prop: 'courseTime', label: '时间', width: '200px'},
{prop: 'applyNum', label: '已报名人数'},
{ prop: "courseName", label: "名称" },
{ prop: "lxname", label: "类型" },
{ prop: "coursePeopleNumber", label: "总人数" },
{ prop: "courseLocationCoordinates", label: "地点" },
{ prop: "courseInstructor", label: "联系人" },
{ prop: "courseTime", label: "时间" },
{ prop: "applyNum", label: "已报名人数" }
],
viewMapDialog: false,
courseTimeListDialog: false,
@@ -550,7 +550,6 @@ layout("/layouts/platform.html"){
}
},
openAudit({hisId, id}) {
debugger
this.$refs.userChangeHistory.openUserChangeInfo(hisId)
this.$refs.userChangeHistory.slot = true
@@ -31,7 +31,7 @@ layout("/layouts/platform.html"){
}
.desc_label {
width: 75px;
/*width: 75px;*/
-webkit-flex-shrink: 0;
flex-shrink: 0;
padding-right: 4px;
@@ -232,9 +232,10 @@ layout("/layouts/platform.html"){
<div style="white-space: normal; display: flex">
<span class="desc_label"></span>
<el-tooltip placement="top" :content="option.supplier">
<!-- style="width: calc(100% - 80px);text-overflow: ellipsis;overflow: hidden;overflow-y: auto;height: 100px;" -->
<span
class="desc_value"
style="width: calc(100% - 80px);text-overflow: ellipsis;overflow: hidden;overflow-y: auto;height: 100px;"
style="text-overflow: ellipsis;overflow: hidden;overflow-y: auto;height: 100px;"
>
{{ option.supplier }}
</span>
@@ -691,10 +692,10 @@ layout("/layouts/platform.html"){
for (const option of options) {
// 检查是否有 specs
if (option.specs) {
if (option.specs && option.specs.length > 0) {
// 检查 selectSpecs 是否为空或未定义
if (!option.selectSpecs) {
this.$toast.fail('请选择' + option.optionName + '的规格')
this.$message.warning('请选择' + option.optionName + '的规格')
return
}
}
@@ -721,14 +722,14 @@ layout("/layouts/platform.html"){
})
if (code === 0) {
this.$message.success('您已完成本次福利选择。')
this.doSearch()
this.$refs.guava.index()
} else {
this.$message({
message: msg,
type: 'warning'
});
}
this.doSearch()
this.$refs.guava.index()
}
})
},