This commit is contained in:
Paidax
2024-07-25 18:41:32 +08:00
parent 3270efcdc6
commit a82c0f6f1a
21 changed files with 416 additions and 235 deletions
@@ -241,7 +241,7 @@ layout("/mobile/platform.html"){
style="position: absolute; left: 77%; top: 58%;"
src="/assets/mobile/svg/train/sign_up.svg"></image>
<div @click="trainClick(o)" v-if="activityStatus === '1'"
<div @click="trainClick(o)" v-if="activityStatus === '1' && o.isMobileSign"
style="text-align: center; line-height: 40px; width: 40px; height: 40px;display: inline-block; font-size: 14px;
position: absolute; right: -10px; top: 8%; background-color: #00c698; border-radius: 7px; color: white">
签到
@@ -528,7 +528,7 @@ layout("/mobile/platform.html"){
cancel(o) {
vant.Dialog.confirm({
title: '温馨提示',
message: "您确定要<span style='color: red'>取消【" + o.courseName + "】</span>吗?",
message: "您确定要<span style='color: red'>取消【" + o.courseName + "】</span>吗?\n一旦确认,可不能反悔了哟!",
confirmButtonColor: '#1867b0',
}).then(async () => {
const resp = await $.post('/platform/mobile/trainSignUpActivity/cancelSignUp', {
@@ -611,7 +611,7 @@ layout("/mobile/platform.html"){
vant.Dialog.confirm({
title: '温馨提示',
message: '您选择了【' + this.choose.courseName + '】\n的报名,是否确认?',
message: '您选择了【' + this.choose.courseName + '】\n一旦确认,可不能反悔了哟',
confirmButtonColor: '#1867b0',
}).then(async () => {
const toast = vant.Toast.loading({
@@ -632,7 +632,7 @@ layout("/mobile/platform.html"){
const resp = await $.post('/platform/mobile/trainSignUpActivity/doSignUp', this.formData)
vant.Toast(resp.msg)
if (resp.code === 0) {
this.pageData()
await this.pageData()
this.joinPopup = false
}
toast.clear()
@@ -110,9 +110,9 @@ layout("/mobile/platform.html"){
</div>
<div @click="welfareClick(o)">
<div>
<van-image :src="CREATE_PREVIEW_URL(o.cover)"
<van-image :src="CREATE_PREVIEW_URL(o.cover.id)"
style="display: contents"
v-if="o.cover"></van-image>
v-if="o.cover && o.cover.filepath"></van-image>
<van-image src=""
style="display: contents"
v-else></van-image>
@@ -36,6 +36,7 @@ layout("/layouts/platform.html"){
let map = null
let marker = null
let geocoder = null
let E = window.wangEditor
const vue = new Vue({
el: '#app',
components: {
@@ -53,7 +54,6 @@ layout("/layouts/platform.html"){
fromEdit: '',
formData: {
notice: false,
isIntegral: false,
courseList: [
{courseName: '1', courseTimeList: [], isMobileSign: false, isReceiveGift: false, reserveMode: 1},
{courseName: '2', courseTimeList: [], isMobileSign: false, isReceiveGift: false, reserveMode: 1}
@@ -66,7 +66,6 @@ layout("/layouts/platform.html"){
limitNum: 1,
typeLimits: [],
activityMode: 1,
pushHome: 0,
},
pickerOptions: {
disabledDate(time) {
@@ -232,7 +231,7 @@ layout("/layouts/platform.html"){
this.unionLimitIndex = index
this.setUpUnionLimitDialog = true
if (!this.formData.courseList[this.unionLimitIndex].unionLimit || this.formData.courseList[this.unionLimitIndex].unionLimit.length === 0) {
const resp = await $.get('/platform/trainSingUp/manage/activity/add/getUnionLimit', {activityScopeId: this.formData.activityGroupId})
const resp = await $.get('/platform/trainSingUp/manage/activity/getUnionLimit', {activityScopeId: this.formData.activityGroupId})
if (resp.code === 0) {
this.$set(this.formData.courseList[this.unionLimitIndex], 'unionLimit', resp.data)
}
@@ -396,7 +395,7 @@ layout("/layouts/platform.html"){
const courseValid = this.formData.courseList.some((v, i) => {
const basicValid = v.courseName && v.coursePeopleNumber && v.campus
&& v.courseLocation && v.courseInstructor && v.courseType
const timeValid = v.courseTimeList.length > 0 && v.courseTimeList.every(x => {
const timeValid = v.courseTimeList && v.courseTimeList.length > 0 && v.courseTimeList.every(x => {
return x.courseStartTime && x.courseEndTime && (x.courseStartTime < x.courseEndTime)
})
@@ -436,13 +435,18 @@ layout("/layouts/platform.html"){
//cloneData.conditionStructure.conditions = cloneData.conditionStructure.conditions.filter(v => v.field && v.fieldObj && v.operational && v.value)
cloneData.activitySignUpStartTime = cloneData.activitySignTime !== undefined ? cloneData.activitySignTime[0] : null
cloneData.activitySignUpEndTime = cloneData.activitySignTime !== undefined ? cloneData.activitySignTime[1] : null
cloneData.activityStartTime = cloneData.activityTime !== undefined ? cloneData.activityTime[0] : null
cloneData.activityEndTime = cloneData.activityTime !== undefined ? cloneData.activityTime[1] : null
if(cloneData.activityStartTime !== undefined && cloneData.activityStartTime !== null) {
cloneData.year = new Date(cloneData.activityStartTime).getFullYear()
if (cloneData.cover && cloneData.cover.length > 0) {
cloneData.cover = cloneData.cover[0]
}
if (cloneData.wechat && cloneData.wechat.length > 0) {
cloneData.wechat = cloneData.wechat[0]
}
cloneData.activitySignUpStartTime = cloneData.activitySignTime[0]
cloneData.activitySignUpEndTime = cloneData.activitySignTime[1]
cloneData.activityStartTime = cloneData.activityTime[0]
cloneData.activityEndTime = cloneData.activityTime[1]
cloneData.year = new Date(cloneData.activityStartTime).getFullYear()
/*const limitNumArray = []
this.formData.typeLimits.forEach(item => {
limitNumArray.push({
@@ -463,7 +467,7 @@ layout("/layouts/platform.html"){
})
cloneData.typeLimits = limitNumArray
const resp = await $.post('/platform/trainSingUp/manage/activity/doHandle', {data: JSON.stringify(cloneData), flag: flag})
const resp = await $.post('/platform/trainSingUp/manage/activity/doHandle', {data: JSON.stringify(cloneData)})
if (resp.code === 0) {
this.$notify({
title: '成功',
@@ -481,9 +485,24 @@ layout("/layouts/platform.html"){
if (id) {
const resp = await $.get('/platform/trainSingUp/manage/activity/findOne', {id})
if (resp.code === 0) {
if (resp.data.cover) {
resp.data.cover = [resp.data.cover]
}
if (resp.data.wechat) {
resp.data.wechat = [resp.data.wechat]
}
this.formData = resp.data
const type = this.trainTypeList.find(o => o.code === this.formData.trainType)
this.trainType = type ? type.name : '培训班'
this.$nextTick(() => {
$("#introduce").html("")
var editor = new E("#introduce")
editor.config.onchange = (html) => {
this.formData.introduce = html.replace(/<p\><\/p>/g, '')
}
editor.create()
editor.txt.html(resp.data.introduce)
})
this.formData.courseList.forEach(item => {
const type = this.courseTypeList.find(o => o.id === item.courseType)
@@ -495,6 +514,15 @@ layout("/layouts/platform.html"){
}
})
}
} else {
this.$nextTick(() => {
$("#introduce").html("")
var editor = new E("#introduce")
editor.config.onchange = (html) => {
this.formData.introduce = html.replace(/<p\><\/p>/g, '')
}
editor.create()
})
}
},
async initCnd() {
@@ -564,7 +592,7 @@ layout("/layouts/platform.html"){
},
//获取培训班报名人数
async getRegisterUserCount(courseId) {
const resp = await $.post('/platform/trainSingUp/manage/activity/add/getRegisterUserCount', {courseId})
const resp = await $.post('/platform/trainSingUp/manage/activity/getRegisterUserCount', {courseId})
return resp.code === 0 ? resp.data : 0
},
setSignUpCondition() {
@@ -656,16 +684,16 @@ layout("/layouts/platform.html"){
this.trainType = type ? type.name : ''
},
async getHistoricalActList() {
const resp = await $.post('/platform/trainSingUp/manage/activity/add/getHistoricalActList', {})
const resp = await $.post('/platform/trainSingUp/manage/activity/getHistoricalActList', {})
return resp.data
},
async historicalActChange(val) {
const resp = await $.get('/platform/trainSingUp/manage/activity/findOne', {id: val})
if (resp.code === 0) {
// resp.data.cover = [resp.data.cover]
// if (resp.data.wechat) {
// resp.data.wechat = [resp.data.wechat]
// }
resp.data.cover = [resp.data.cover]
if (resp.data.wechat) {
resp.data.wechat = [resp.data.wechat]
}
this.formData = resp.data
const type = this.trainTypeList.find(o => o.code === this.formData.trainType)
this.trainType = type ? type.name : '培训班'
@@ -708,15 +736,9 @@ layout("/layouts/platform.html"){
}
},
conditionStructure(val) {
console.log(val)
this.formData.courseList[this.userScopeIndex].conditionStructure = val
},
'formData.activityGroupId': {
async handler(newVal, oldVal) {
this.activityGroupList = await getActivityGroup()
this.userScopeDialog = false
},
deep: true
},
}
})
</script>
@@ -188,15 +188,12 @@ layout("/layouts/platform.html"){
<div slot="header" class="clearfix"
style="font-size: 16px;padding: 5px 0"
@click="openApply(item)">
<el-tooltip class="item" effect="dark" :content="item.NAME"
placement="top-start">
<span v-if="item.activityName.length<=10">{{item.activityName}}</span>
<span v-else>{{item.activityName.substr(0,10)}}...</span>
</el-tooltip>
<div style="width: 88%; white-space: nowrap; overflow: hidden; display: inline-block; text-overflow: ellipsis">
{{item.activityName}}
</div>
<el-button @click="openApply(item)" class="reserve_btn"
type="text">
请选择活动报名
报名
</el-button>
</div>
<div @click="openApply(item)">
@@ -226,14 +223,13 @@ layout("/layouts/platform.html"){
</div>
<div class="text e-item">
<span style="color: gray">报名时间:</span>
{{moment(item.activitySignUpStartTime)
.format('MM/DD HH:mm')}} 至
{{moment(item.activitySignUpEndTime).format('MM/DD HH:mm')}}
{{moment(item.activitySignUpStartTime).format('YYYY/MM/DD HH:mm')}} 至
{{moment(item.activitySignUpEndTime).format('YYYY/MM/DD HH:mm')}}
</div>
<div class="text item">
<span style="color: gray">活动时间:</span>
{{moment(item.activityStartTime).format('MM/DD HH:mm')}} 至
{{moment(item.activityEndTime).format('MM/DD HH:mm')}}
{{moment(item.activityStartTime).format('YYYY/MM/DD HH:mm')}} 至
{{moment(item.activityEndTime).format('YYYY/MM/DD HH:mm')}}
</div>
</div>
</el-card>
@@ -241,7 +237,7 @@ layout("/layouts/platform.html"){
</el-row>
</el-carousel-item>
</el-carousel>
<el-empty v-else description="暂无数据"></el-empty>
<el-empty description="暂无数据" v-else></el-empty>
</el-row>
<el-card shadow="never" class="mt10">
@@ -250,7 +246,7 @@ layout("/layouts/platform.html"){
<template #label_end>
<div class="search-item-option">
<el-select v-model="pageForm.courseTypeId"
:placeholder="'请选择' + trainType + '类型'"
:placeholder="'请选择' + trainType"
filterable clearable
style="width: 100%;margin-bottom: 5px;margin-left: 10px"
@change="doSearch">
@@ -371,6 +367,7 @@ layout("/layouts/platform.html"){
<!--选择框-->
<template v-else-if="['SELECT'].includes(column.columnFormType) && ['VARCHAR','TEXT','INT'].includes(column.columnType)">
<el-select v-model="column.columnValue"
clearable
:placeholder="'请选择' + column.columnName"
style="width: 100%">
<el-option
@@ -422,12 +419,12 @@ layout("/layouts/platform.html"){
</el-table-column>
<el-table-column label="开始时间" prop="courseStartTime">
<template scope="{row}">
{{moment(row.courseStartTime).format('HH:MM')}}
{{moment(row.courseStartTime).format('HH:mm')}}
</template>
</el-table-column>
<el-table-column label="结束时间" prop="courseEndTime">
<template scope="{row}">
{{moment(row.courseEndTime).format('HH:MM')}}
{{moment(row.courseEndTime).format('HH:mm')}}
</template>
</el-table-column>
</el-table>
@@ -559,7 +556,7 @@ layout("/layouts/platform.html"){
const data = this.trainSignUpActivity
const now = moment().valueOf()
if (now < moment(data.activitySignUpStartTime).valueOf() || now > moment(data.activitySignUpEndTime).valueOf()) {
this.$message.warning('此活动不在报名时间内')
this.$message.warning('报名已结束,请致电校工会咨询,联系电话:85913629')
return
}
const scopeUser = await getScopeUser(data.activityGroupId);
@@ -3,16 +3,15 @@
<el-row :gutter="20" type="flex" v-if="fromEdit !== 'edit'">
<el-col :span="12">
<el-form-item label="是否沿用之前活动" prop="use">
<el-radio-group v-model="use" size="medium">
<el-radio-button :label="true" border>沿用之前活动</el-radio-button>
<el-radio-button :label="false" border>不沿用之前活动</el-radio-button>
<el-radio-group v-model="use">
<el-radio :label="true">沿用之前活动</el-radio>
<el-radio :label="false">不沿用之前活动</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="12" v-if="use">
<el-form-item label="往期活动" prop="historicalAct">
<el-select v-model="historicalAct" placeholder="请选择往期活动"
:disabled="!use"
style="width: 100%" @change="historicalActChange">
<el-option
v-for="item in historicalActList"
@@ -31,7 +30,7 @@
<el-input maxlength="50" v-model="formData.activityName"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="6">
<el-form-item :label="trainType + '通知'" prop="notice">
<el-radio-group v-model="formData.notice" size="medium">
<el-radio-button :label="true" border>通知</el-radio-button>
@@ -39,42 +38,15 @@
</el-radio-group>
</el-form-item>
</el-col>
<!--<el-col :span="12">
<el-form-item label="是否启用积分系统" prop="isIntegral">
<el-radio-group size="medium" v-model="formData.isIntegral">
<el-radio-button :label="false">不启用</el-radio-button>
<el-radio-button :label="true">启用</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>-->
</el-row>
<!--<el-row :gutter="20" type="flex">
<el-col :span="12">
<el-form-item label="是否推送移动端" prop="pushHome">
<el-radio-group v-model="formData.pushHome" size="medium">
<el-radio-button :label="0">不推送</el-radio-button>
<el-radio-button :label="1">推送列表</el-radio-button>
<el-radio-button :label="2">推送大图</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
&lt;!&ndash;<el-col :span="12">
<el-form-item :label="trainType + '通知'" prop="notice">
<el-radio-group v-model="formData.notice" size="medium">
<el-radio-button :label="true" border>通知</el-radio-button>
<el-radio-button :label="false" border>不通知</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>&ndash;&gt;
&lt;!&ndash;<el-col :span="6">
<el-col :span="6">
<el-form-item label="活动类型" prop="activityMode">
<el-radio-group v-model="formData.activityMode" size="medium">
<el-radio-button :label="1" border>校工会</el-radio-button>
<el-radio-button :label="2" border>分工会</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>&ndash;&gt;
</el-row>-->
</el-col>
</el-row>
<el-row :gutter="20" type="flex">
<el-col :span="12">
<el-form-item :rules="{required:true,message: '请选择起止时间', trigger: 'blur'}" label="活动时间"
@@ -139,29 +111,34 @@
</el-row>
<el-form-item :rules="{required:true,message: '请输入活动介绍', trigger: 'blur'}" label="活动介绍" prop="introduce">
<text-editor v-model="formData.introduce" ></text-editor>
<!--<el-input
:autosize="{ minRows: 5, maxRows: 10}"
placeholder="请输入活动介绍"
type="textarea"
v-model="formData.introduce">
</el-input>-->
<!--<div id="introduce"></div>-->
<text-editor v-model="formData.introduce"></text-editor>
</el-form-item>
<el-row :gutter="20" type="flex">
<el-form-item label="封面图片" prop="cover" :rules="{required:true,message: '请上传活动移动端封面图片', trigger: 'blur'}">
<el-col :span="12">
<el-form-item label="封面图片" prop="cover" :rules="{required:true,message: '请上传活动移动端封面图片', trigger: 'blur'}">
<image-Upload ref="coverFileUpload" :height="70"
:width="140" :limit="1"
:file-type="['jpg','jpeg','png','JPG','JPEG','PNG']"
:file-size="10"
v-model="formData.cover"></image-Upload>
</el-form-item>
<file-upload ref="coverFileUpload" :files.sync="formData.cover" :max="1" :type="['jpg','jpeg','png','JPG','JPEG','PNG']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">请上传一张jpg/png/jpeg等格式,且不大于2M的照片</div>
</template>
</file-upload>
</el-col>
<el-col :span="12">
<el-form-item label="微信群二维码" prop="wechat">
<image-Upload :height="70"
:width="140" :limit="1"
:file-type="['jpg','jpeg','png','JPG','JPEG','PNG']"
:file-size="10"
v-model="formData.wechat"></image-Upload>
<file-upload :files.sync="formData.wechat" :max="1" :type="['jpg','jpeg','png','JPG','JPEG','PNG']">
<template #el-upload__tip>
<div slot="tip" class="el-upload__tip">请上传一张jpg/png/jpeg等格式,且不大于2M的照片</div>
</template>
</file-upload>
</el-form-item>
</el-col>
</el-row>
</el-form-item>
<vi-title2 :title="trainType + '信息'">
<template #func>
@@ -94,6 +94,12 @@ layout("/layouts/platform.html"){
<el-radio :label="false" border>不纳入</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="formData.isBringFamily === true" prop="selfAddFamily" label="本人纳入总人数">
<el-radio-group v-model="formData.selfAddFamily">
<el-radio :label="true" border>纳入</el-radio>
<el-radio :label="false" border>不纳入</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<vi-title2 title="报名填写字段">
@@ -51,7 +51,7 @@ layout("/layouts/platform.html"){
<table-tool :app="this" label="人员调整">
<template #func>
<el-button type="primary" @click="openImport(null)" size="small">
批量导入
批量调整
</el-button>
</template>
</table-tool>
@@ -89,12 +89,22 @@ layout("/layouts/platform.html"){
<el-table-column label="已报名人数" prop="registerNum" sortable align="center" header-align="center"
show-overflow-tooltip>
<template scope="{row}">
<el-link v-if="row.reserveMode === 1" @click="openView(row)" type="primary">
{{row.registerNum + row.courseReservedNumber}}
</el-link>
<el-link v-if="row.reserveMode === 2" @click="openView(row)" type="primary">
{{row.registerNum}}
</el-link>
<template v-if="row.isAddFamily && row.isBringFamily">
<el-link v-if="row.selfAddFamily" @click="openView(row)" type="primary">
{{row.registerNum + '家属(' + row.familyCount + ')'}}
</el-link>
<el-link v-else @click="openView(row)" type="primary">
{{row.familyCount}}
</el-link>
</template>
<template v-else>
<el-link v-if="row.reserveMode === 1" @click="openView(row)" type="primary">
{{row.registerNum + row.courseReservedNumber}}
</el-link>
<el-link v-if="row.reserveMode === 2" @click="openView(row)" type="primary">
{{row.registerNum}}
</el-link>
</template>
</template>
</el-table-column>
@@ -121,7 +131,7 @@ layout("/layouts/platform.html"){
</el-input>
</div>
<div class="btn-group tool-button mt5">
<el-select v-model="registerForm.unionId" clearable filterable placeholder="请选择院级工会"
<el-select v-model="registerForm.unionId" clearable filterable placeholder="请选择分工会"
@change="getUnitList()">
<el-option
v-for="item in unionList"
@@ -332,8 +342,7 @@ layout("/layouts/platform.html"){
const f = this.tempFileList[0]
formData.append("file", f.raw, f.raw.name)
formData.append("activityId", this.pageForm.activityId)
formData.append("importCourseId", this.importRow ? this.importRow.id : '')
formData.append("isSingle", this.isSingle)
formData.append("importCourseId", this.importRow.id)
const loading = this.$loading({
lock: true,
text: '数据提交中...',
@@ -81,12 +81,22 @@ layout("/layouts/platform.html"){
<el-table-column label="已报名人数" prop="registerNum" sortable align="center" header-align="center"
show-overflow-tooltip>
<template scope="{row}">
<el-link v-if="row.reserveMode === 1" @click="openView(row)" type="primary">
{{row.registerNum + row.courseReservedNumber}}
</el-link>
<el-link v-if="row.reserveMode === 2" @click="openView(row)" type="primary">
{{row.registerNum}}
</el-link>
<template v-if="row.isAddFamily && row.isBringFamily">
<el-link v-if="row.selfAddFamily" @click="openView(row)" type="primary">
{{row.registerNum + '家属(' + row.familyCount + ')'}}
</el-link>
<el-link v-else @click="openView(row)" type="primary">
{{row.familyCount}}
</el-link>
</template>
<template v-else>
<el-link v-if="row.reserveMode === 1" @click="openView(row)" type="primary">
{{row.registerNum + row.courseReservedNumber}}
</el-link>
<el-link v-if="row.reserveMode === 2" @click="openView(row)" type="primary">
{{row.registerNum}}
</el-link>
</template>
</template>
</el-table-column>
<el-table-column label="操作" width="150px">
@@ -110,6 +120,7 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
data() {
return {
columnTable: [],
activityList: [],
pageForm: {
year: new Date().getFullYear().toString(),
@@ -134,6 +145,15 @@ layout("/layouts/platform.html"){
{label: '报名时间', prop: 'signUpTime'},
{label: '报名状态', prop: 'state'},
],
cloneTableColumns: [
{label: '姓名', prop: 'username'},
{label: '工号', prop: 'loginname'},
{label: '单位', prop: 'unitname'},
{label: '分工会', prop: 'unionname'},
{label: '联系方式', prop: 'mobile'},
{label: '报名时间', prop: 'signUpTime'},
{label: '报名状态', prop: 'state'},
],
userSignInfo: {},
trainType: '培训班',
trainTypeList: [],
@@ -173,6 +193,11 @@ layout("/layouts/platform.html"){
this.registerUserTableData = resp_register.data
const resp_signInfo = await $.get(loc() + '/getSignInfo', {courseId: row.id})
this.userSignInfo = resp_signInfo.data
const resp_columnInfo = await $.get(loc() + '/getTaleColumnInfo', {courseId: row.id})
if(resp_columnInfo.data) {
this.registerUserTableColumns = []
this.registerUserTableColumns = this.cloneTableColumns.concat(resp_columnInfo.data)
}
}
},
async created() {