This commit is contained in:
server
2026-04-30 17:15:17 +08:00
parent 89a9ec271c
commit a44d24eab1
4 changed files with 112 additions and 75 deletions
@@ -210,8 +210,8 @@ public class ActivitySchool extends BaseModel implements Serializable, SysHomeCo
} else { } else {
sysHomeActivity.setH5Url(null); sysHomeActivity.setH5Url(null);
} }
sysHomeActivity.setStartDate(DateUtil.parseDate(this.getApplyStartTime())); sysHomeActivity.setStartDate(DateUtil.parse(this.getApplyStartTime(), "yyyy-MM-dd HH:mm"));
sysHomeActivity.setEndDate(DateUtil.parseDate(this.getApplyEndTime())); sysHomeActivity.setEndDate(DateUtil.parse(this.getApplyEndTime(), "yyyy-MM-dd HH:mm"));
sysHomeActivity.setAllowUserGroupId(this.getActivityGroupId()); sysHomeActivity.setAllowUserGroupId(this.getActivityGroupId());
sysHomeActivity.setEnable(true); sysHomeActivity.setEnable(true);
sysHomeActivity.setClassPath(this.getClass().getPackageName() + this.getClass().getName()); sysHomeActivity.setClassPath(this.getClass().getPackageName() + this.getClass().getName());
@@ -66,7 +66,6 @@
:required="column.isRequired" :required="column.isRequired"
@click="selectFieldClick(column)" @click="selectFieldClick(column)"
></van-field> ></van-field>
<van-popup <van-popup
v-if="['SELECT'].includes(column.columnFormType)" v-if="['SELECT'].includes(column.columnFormType)"
v-model="pickerStates[column.columnCode + 'Picker']" v-model="pickerStates[column.columnCode + 'Picker']"
@@ -75,6 +74,8 @@
> >
<template v-if="['DATETIME', 'DATE'].includes(column.columnType)"> <template v-if="['DATETIME', 'DATE'].includes(column.columnType)">
<van-datetime-picker <van-datetime-picker
v-model="column.currentDate"
:min-date="column.minDate"
:title="column.columnName" :title="column.columnName"
:type="column.columnType.toLocaleLowerCase()" :type="column.columnType.toLocaleLowerCase()"
show-toolbar show-toolbar
@@ -448,6 +449,10 @@ module.exports = {
if (!["DATE", "DATETIME"].includes(column.columnType)) { if (!["DATE", "DATETIME"].includes(column.columnType)) {
//说明是普通的下拉框 //说明是普通的下拉框
// column.selectValues = ['1', '2', '3'] // column.selectValues = ['1', '2', '3']
}else{
this.$set(column, "minDate", new Date(1900, 0, 1))
this.$set(column, "currentDate", new Date(column.columnValue))
} }
}, },
/** /**
@@ -93,12 +93,12 @@ layout("/layouts/platform.html"){
<search @search="doSearch"> <search @search="doSearch">
<search-item label="年度:"> <search-item label="年度:">
<el-date-picker <el-date-picker
placeholder="选择年度" placeholder="选择年度"
type="year" type="year"
style="width: 100%" style="width: 100%"
v-model="pageForm.year" v-model="pageForm.year"
value-format="yyyy" value-format="yyyy"
@change="activityData" @change="activityData"
></el-date-picker> ></el-date-picker>
</search-item> </search-item>
<search-item label="活动状态:" style="width: 340px"> <search-item label="活动状态:" style="width: 340px">
@@ -117,11 +117,12 @@ layout("/layouts/platform.html"){
<el-row :gutter="20"> <el-row :gutter="20">
<el-col v-for="(item, i) in activityList.slice((index-1)*4,index*4)" :key="i" :span="6"> <el-col v-for="(item, i) in activityList.slice((index-1)*4,index*4)" :key="i" :span="6">
<el-card <el-card
@click="openApply(item)" @click="openApply(item)"
:class="'box-card '+(item.id===pageForm.activityId?'activeCard':'')" :class="'box-card '+(item.id===pageForm.activityId?'activeCard':'')"
style="border-radius: 10px" style="border-radius: 10px"
> >
<div slot="header" class="clearfix" style="width: 100%; word-break: break-all; white-space: pre-wrap"> <div slot="header" class="clearfix"
style="width: 100%; word-break: break-all; white-space: pre-wrap">
<div>{{item.activityName}}</div> <div>{{item.activityName}}</div>
<!--<el-button @click="openApply(item)" class="reserve_btn" type="text">请选择活动报名</el-button>--> <!--<el-button @click="openApply(item)" class="reserve_btn" type="text">请选择活动报名</el-button>-->
</div> </div>
@@ -151,26 +152,26 @@ layout("/layouts/platform.html"){
<!-- <span style="color: gray">活动类型:</span> <!-- <span style="color: gray">活动类型:</span>
<span>{{item.activityMode == 1 ? '校工会' : '分工会'}}</span>--> <span>{{item.activityMode == 1 ? '校工会' : '分工会'}}</span>-->
<el-tag <el-tag
type="danger" type="danger"
effect="dark" effect="dark"
style="border-radius: 50%" style="border-radius: 50%"
v-if="$moment(item.activitySignUpEndTime).valueOf() < $moment().valueOf()" v-if="$moment(item.activitySignUpEndTime).valueOf() < $moment().valueOf()"
> >
报名结束 报名结束
</el-tag> </el-tag>
<el-tag <el-tag
type="success" type="success"
effect="dark" effect="dark"
style="border-radius: 50%" style="border-radius: 50%"
v-else-if="$moment().valueOf()>$moment(item.activitySignUpStartTime).valueOf()&&$moment().valueOf()<$moment(item.activitySignUpEndTime).valueOf()" v-else-if="$moment().valueOf()>$moment(item.activitySignUpStartTime).valueOf()&&$moment().valueOf()<$moment(item.activitySignUpEndTime).valueOf()"
> >
报名中 报名中
</el-tag> </el-tag>
<el-tag <el-tag
type="danger" type="danger"
effect="dark" effect="dark"
style="border-radius: 50%" style="border-radius: 50%"
v-else-if="$moment().valueOf()<$moment(item.activitySignUpEndTime).valueOf()" v-else-if="$moment().valueOf()<$moment(item.activitySignUpEndTime).valueOf()"
> >
报名未开始 报名未开始
</el-tag> </el-tag>
@@ -190,14 +191,15 @@ layout("/layouts/platform.html"){
<template #label_end> <template #label_end>
<div class="search-item-option"> <div class="search-item-option">
<el-select <el-select
v-model="pageForm.courseTypeId" v-model="pageForm.courseTypeId"
:placeholder="'请选择' + trainType + '类型'" :placeholder="'请选择' + trainType + '类型'"
filterable filterable
clearable clearable
style="width: 100%; margin-bottom: 5px; margin-left: 10px" style="width: 100%; margin-bottom: 5px; margin-left: 10px"
@change="doSearch" @change="doSearch"
> >
<el-option v-for="item in courseTypeList" :key="item.id" :label="item.lxname" :value="item.id"></el-option> <el-option v-for="item in courseTypeList" :key="item.id" :label="item.lxname"
:value="item.id"></el-option>
</el-select> </el-select>
</div> </div>
</template> </template>
@@ -206,21 +208,24 @@ layout("/layouts/platform.html"){
<el-table :data="tableData" row-key="id" @sort-change="pageOrder" v-loading="tableLoading"> <el-table :data="tableData" row-key="id" @sort-change="pageOrder" v-loading="tableLoading">
<el-table-column type="index" :index="indexMethod" label="序号" width="80px"></el-table-column> <el-table-column type="index" :index="indexMethod" label="序号" width="80px"></el-table-column>
<el-table-column <el-table-column
v-for="(column, index) in tableColumns" v-for="(column, index) in tableColumns"
:key="column.prop" :key="column.prop"
:label="column.label" :label="column.label"
:prop="column.prop" :prop="column.prop"
:sortable="column.sortable" :sortable="column.sortable"
show-overflow-tooltip show-overflow-tooltip
> >
<template v-slot="{row}" v-if="column.prop=='courseLocationCoordinates'"> <template v-slot="{row}" v-if="column.prop=='courseLocationCoordinates'">
<el-button style="padding: 0" @click="openViewMap(row.courseLocationCoordinates)" type="text"> <el-button style="padding: 0" @click="openViewMap(row.courseLocationCoordinates)"
type="text">
{{row.courseLocation}} {{row.courseLocation}}
</el-button> </el-button>
</template> </template>
<template v-slot="{row}" v-else-if="column.prop=='courseTime'"> <template v-slot="{row}" v-else-if="column.prop=='courseTime'">
<el-button style="padding: 0" @click="openViewCourseTime(row.id)" type="text">点击查看{{trainType}}时间</el-button> <el-button style="padding: 0" @click="openViewCourseTime(row.id)" type="text">
点击查看{{trainType}}时间
</el-button>
</template> </template>
<template v-slot="{row}" v-else-if="column.prop=='applyNum'"> <template v-slot="{row}" v-else-if="column.prop=='applyNum'">
@@ -230,8 +235,13 @@ layout("/layouts/platform.html"){
<el-table-column align="center" label="操作" width="150px"> <el-table-column align="center" label="操作" width="150px">
<template v-slot="scope"> <template v-slot="scope">
<el-button v-if="!scope.row.isSign" type="primary" size="mini" @click="doApply(scope.row)">我要报名</el-button> <span v-if="!trainSignUpActivity.signPointCount">
<el-button v-else type="danger" size="mini" @click="doCancel(scope.row)">取消报名</el-button> <el-button v-if="!scope.row.isSign" type="primary" size="mini"
@click="doApply(scope.row)">我要报名</el-button>
<el-button v-else type="danger" size="mini"
@click="doCancel(scope.row)">取消报名</el-button>
</span>
<span v-else>请扫码签到报名</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -281,41 +291,46 @@ layout("/layouts/platform.html"){
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item <el-form-item
v-for="(column, index) in formData.trainMobileSignColumnList" v-for="(column, index) in formData.trainMobileSignColumnList"
:prop="'trainMobileSignColumnList.' + index + '.columnValue'" :prop="'trainMobileSignColumnList.' + index + '.columnValue'"
:label="column.columnName" :label="column.columnName"
:key="column.columnCode" :key="column.columnCode"
:rules="{ required: column.isRequired, :rules="{ required: column.isRequired,
message: (['SELECT', 'FILE'].includes(column.columnFormType) ? '请选择' : '请填写') + column.columnName, message: (['SELECT', 'FILE'].includes(column.columnFormType) ? '请选择' : '请填写') + column.columnName,
trigger: 'blur'}" trigger: 'blur'}"
> >
<!--文本框--> <!--文本框-->
<template v-if="!['SELECT'].includes(column.columnFormType) && ['VARCHAR','TEXT','INT'].includes(column.columnType)"> <template
v-if="!['SELECT'].includes(column.columnFormType) && ['VARCHAR','TEXT','INT'].includes(column.columnType)">
<el-input <el-input
v-model="column.columnValue" v-model="column.columnValue"
:placeholder="'请填写' + column.columnName" :placeholder="'请填写' + column.columnName"
:type="['INT'].includes(column.columnType) ? 'number' : ''" :type="['INT'].includes(column.columnType) ? 'number' : ''"
></el-input> ></el-input>
</template> </template>
<!--选择框--> <!--选择框-->
<template v-else-if="['SELECT'].includes(column.columnFormType) && ['VARCHAR','TEXT','INT'].includes(column.columnType)"> <template
<el-select v-model="column.columnValue" :placeholder="'请选择' + column.columnName" style="width: 100%"> v-else-if="['SELECT'].includes(column.columnFormType) && ['VARCHAR','TEXT','INT'].includes(column.columnType)">
<el-option v-for="item in column.selectValues" :key="item" :label="item" :value="item"></el-option> <el-select v-model="column.columnValue" :placeholder="'请选择' + column.columnName"
style="width: 100%">
<el-option v-for="item in column.selectValues" :key="item" :label="item"
:value="item"></el-option>
</el-select> </el-select>
</template> </template>
<!--时间框--> <!--时间框-->
<template v-else-if="['DATE', 'DATETIME'].includes(column.columnType)"> <template v-else-if="['DATE', 'DATETIME'].includes(column.columnType)">
<el-date-picker <el-date-picker
style="width: 100%" style="width: 100%"
v-model="column.columnValue" v-model="column.columnValue"
:type="column.columnType === 'DATE' ? 'date' : 'datetime'" :type="column.columnType === 'DATE' ? 'date' : 'datetime'"
:placeholder="'请选择' + column.columnName" :placeholder="'请选择' + column.columnName"
:value-format="column.columnType === 'DATE' ? 'yyyy-MM-dd' : 'yyyy-MM-dd HH:mm:ss'" :value-format="column.columnType === 'DATE' ? 'yyyy-MM-dd' : 'yyyy-MM-dd HH:mm:ss'"
></el-date-picker> ></el-date-picker>
</template> </template>
<!--文件--> <!--文件-->
<template v-else-if="['JSON'].includes(column.columnType)"> <template v-else-if="['JSON'].includes(column.columnType)">
<file-upload :files.sync="column.columnValue" :max="column.fileNumber" :type="column.fileType"></file-upload> <file-upload :files.sync="column.columnValue" :max="column.fileNumber"
:type="column.fileType"></file-upload>
</template> </template>
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -364,20 +379,20 @@ layout("/layouts/platform.html"){
courseTypeList: [], courseTypeList: [],
tableColumns: [ tableColumns: [
/* {prop: 'name', label: '活动名称'},*/ /* {prop: 'name', label: '活动名称'},*/
{ prop: "courseName", label: "名称" }, {prop: "courseName", label: "名称"},
{ prop: "lxname", label: "类型" }, {prop: "lxname", label: "类型"},
{ prop: "coursePeopleNumber", label: "总人数" }, {prop: "coursePeopleNumber", label: "总人数"},
{ prop: "courseLocationCoordinates", label: "地点" }, {prop: "courseLocationCoordinates", label: "地点"},
{ prop: "courseInstructor", label: "联系人" }, {prop: "courseInstructor", label: "联系人"},
{ prop: "courseTime", label: "时间" }, {prop: "courseTime", label: "时间"},
{ prop: "applyNum", label: "已报名人数" } {prop: "applyNum", label: "已报名人数"}
], ],
viewMapDialog: false, viewMapDialog: false,
courseTimeListDialog: false, courseTimeListDialog: false,
courseTimeList: [], courseTimeList: [],
formData: {}, formData: {},
formRules: { formRules: {
mobile: [{ required: true, message: "必填", trigger: ["blur", "change"] }] mobile: [{required: true, message: "必填", trigger: ["blur", "change"]}]
}, },
choose: {}, choose: {},
trainType: "培训班" trainType: "培训班"
@@ -479,7 +494,7 @@ layout("/layouts/platform.html"){
}) })
}, },
async getScopeUser(activityGroupId) { async getScopeUser(activityGroupId) {
const resp = await this.$axios.post("/platform/activity/basic/scope/getScopeUser", { activityGroupId: activityGroupId }) const resp = await this.$axios.post("/platform/activity/basic/scope/getScopeUser", {activityGroupId: activityGroupId})
return resp.data return resp.data
}, },
async doApply(row) { async doApply(row) {
@@ -516,9 +531,18 @@ layout("/layouts/platform.html"){
mobile: this.$store.state.user.mobile, mobile: this.$store.state.user.mobile,
trainMobileSignColumnList: o.trainMobileSignColumnList trainMobileSignColumnList: o.trainMobileSignColumnList
} }
this.formData.trainMobileSignColumnList.forEach((item) => { this.formData.trainMobileSignColumnList.map((item) => {
item.columnValue = "" if (item.columnCode==="idCard" && this.$store.state.user.idCard) {
item.columnValue = this.$store.state.user.idCard
} else if (item.columnCode==="birthday" && this.$store.state.user.birthday) {
item.columnValue = this.$moment(this.$store.state.user.birthday).format("YYYY-MM-DD")
} else if (item.columnCode==="nation" && this.$store.state.user.nation) {
item.columnValue = this.$store.state.user.nation
} else {
item.columnValue = ""
}
}) })
console.log(this.formData.trainMobileSignColumnList)
this.$refs.guava.edit() this.$refs.guava.edit()
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.form.clearValidate() this.$refs.form.clearValidate()
@@ -581,7 +605,7 @@ layout("/layouts/platform.html"){
} }
}, },
async openViewCourseTime(id) { async openViewCourseTime(id) {
const resp = await this.$axios.post(loc() + "/getCourseTime", { id: id }) const resp = await this.$axios.post(loc() + "/getCourseTime", {id: id})
this.courseTimeList = resp.data this.courseTimeList = resp.data
this.courseTimeListDialog = true this.courseTimeListDialog = true
} }
@@ -406,7 +406,7 @@ layout("/layouts/platform_h5.html"){
} }
}, },
components: { components: {
"train-dynamic-form": httpVueLoader("/components/module/trainSignUp/TrainDynamicForm.vue") "train-dynamic-form": httpVueLoader("/components/module/trainSignUp/TrainDynamicForm.vue?v=" + new Date().getTime())
}, },
methods: { methods: {
tabClick(name, title) { tabClick(name, title) {
@@ -602,8 +602,16 @@ layout("/layouts/platform_h5.html"){
const column = this.allColumnsData.find((x) => x.id === o.courseType) const column = this.allColumnsData.find((x) => x.id === o.courseType)
this.dynamicColumnsData = column ? column.trainMobileSignColumnList : [] this.dynamicColumnsData = column ? column.trainMobileSignColumnList : []
this.dynamicColumnsData.forEach((item) => { this.dynamicColumnsData.map((item) => {
item.columnValue = "" if (item.columnCode==="idCard" && this.$store.state.user.idCard) {
item.columnValue = this.$store.state.user.idCard
} else if (item.columnCode==="birthday" && this.$store.state.user.birthday) {
item.columnValue = this.$moment(this.$store.state.user.birthday).format("YYYY-MM-DD")
} else if (item.columnCode==="nation" && this.$store.state.user.nation) {
item.columnValue = this.$store.state.user.nation
} else {
item.columnValue = ""
}
}) })
this.joinPopup = true this.joinPopup = true
}) })