|
|
@@ -22,19 +22,24 @@
|
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
|
<el-form-item label="会议时间" prop="trainingTime">
|
|
|
- <el-date-picker v-model="form.trainingTime" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss" date-format="YYYY-MM-DD" time-format="HH:mm" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
|
|
|
+ <el-date-picker v-model="form.trainingTime" type="datetimerange"
|
|
|
+ value-format="YYYY-MM-DD HH:mm:ss" date-format="YYYY-MM-DD" time-format="HH:mm"
|
|
|
+ range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
|
<el-form-item label="报名时间" prop="signupTime">
|
|
|
- <el-date-picker v-model="form.signupsTime" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss" date-format="YYYY-MM-DD" time-format="HH:mm" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
|
|
|
+ <el-date-picker v-model="form.signupsTime" type="datetimerange"
|
|
|
+ value-format="YYYY-MM-DD HH:mm:ss" date-format="YYYY-MM-DD" time-format="HH:mm"
|
|
|
+ range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
|
<el-form-item label="会议方式" prop="joinType">
|
|
|
<!-- 单选框 -->
|
|
|
<el-radio-group v-model="form.joinType">
|
|
|
- <el-radio v-for="item in lm_training_join_type" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
|
|
+ <el-radio v-for="item in lm_training_join_type" :key="item.value"
|
|
|
+ :label="item.value">{{ item.label }}</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
@@ -45,7 +50,8 @@
|
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
|
<el-form-item label="会议联系人" prop="contactName">
|
|
|
- <el-input v-model="form.contactName" maxlength="40" placeholder="请输入会议联系人" clearable />
|
|
|
+ <el-input v-model="form.contactName" maxlength="40" placeholder="请输入会议联系人"
|
|
|
+ clearable />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
|
@@ -54,16 +60,18 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item label="可报名人员类型" prop="tel">
|
|
|
+ <el-form-item label="可报名人员类型" prop="conditions.typeCheck">
|
|
|
<el-checkbox-group v-model="checkedVipLevels" @change="handleCheckedChange">
|
|
|
- <el-checkbox v-for="city in form.conditions.typeCheck" :key="city" :label="city" :value="city">
|
|
|
+ <el-checkbox v-for="city in form.conditions.typeCheck" :key="city" :label="city"
|
|
|
+ :value="city">
|
|
|
{{ selectDictLabels(lm_check_join_type, city.vipLevel, ',') }}
|
|
|
</el-checkbox>
|
|
|
</el-checkbox-group>
|
|
|
<div @click="handleCheckAllChange(true)" v-if="!checkAll" class="pl-10 c-s-p">
|
|
|
<u>全选</u>
|
|
|
</div>
|
|
|
- <div @click="handleCheckAllChange(false)" v-else class="pl-10 c-s-p"><u>取消全选</u></div>
|
|
|
+ <div @click="handleCheckAllChange(false)" v-else class="pl-10 c-s-p"><u>取消全选</u>
|
|
|
+ </div>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
|
@@ -85,53 +93,86 @@
|
|
|
<div class="d-flex flex-cln pl-10">
|
|
|
<div class="d-flex">
|
|
|
<div class="c-#606266 f-w-6" style="">报名总人数限制:</div>
|
|
|
- <el-input class="flex1 pl-5" v-model="form.conditions.total" maxlength="20" placeholder="请输入报名人数" clearable :disabled="form.conditions.totalCheck !== '1'" style="max-width: 200px;" />
|
|
|
+ <el-input class="flex1 pl-5" v-model="form.conditions.total" maxlength="20"
|
|
|
+ placeholder="请输入报名人数" clearable
|
|
|
+ :disabled="form.conditions.totalCheck !== '1'"
|
|
|
+ style="max-width: 200px;" />
|
|
|
</div>
|
|
|
<div class="c-#606266 f-w-6" style="">条件限制:</div>
|
|
|
<div class="d-flex">
|
|
|
<div class="d-flex flex-cln">
|
|
|
- <el-checkbox v-model="form.conditions.levelTotalCheck" label="按单位类型等级限制" size="large" true-value="1" false-value="0" />
|
|
|
- <div v-if="form.conditions.levelTotalCheck == '1' && form.conditions.cpyTotalCheck == '0'" class="pl-10 pr-10 pt-5 pb-5 border">
|
|
|
- <template v-for="(item, index) in form.conditions.levelCheck" :key="index">
|
|
|
- <div class="d-flex a-c" v-if="checkedVipLevels.some(items => items.vipLevel === item.vipLevel)">
|
|
|
- <el-checkbox v-model="item.check" true-value="1" false-value="0" :label="'所有' + selectDictLabels(lm_check_join_type, item.vipLevel, ',') + '参会人数≤'" size="large" />
|
|
|
- <el-input class="pl-10" v-model="item.total" maxlength="20" placeholder="请输入报名人数" :disabled="!+item.check" />
|
|
|
+ <el-checkbox v-model="form.conditions.levelTotalCheck" label="按单位类型限制"
|
|
|
+ size="large" true-value="1" false-value="0" />
|
|
|
+ <div v-if="form.conditions.levelTotalCheck == '1' && form.conditions.cpyTotalCheck == '0'"
|
|
|
+ class="pl-10 pr-10 pt-5 pb-5 border">
|
|
|
+ <template v-for="(item, index) in form.conditions.levelCheck"
|
|
|
+ :key="index">
|
|
|
+ <div class="d-flex a-c"
|
|
|
+ v-if="checkedVipLevels.some(items => items.vipLevel === item.vipLevel)">
|
|
|
+ <el-checkbox v-model="item.check" true-value="1"
|
|
|
+ false-value="0"
|
|
|
+ :label="'所有' + selectDictLabels(lm_check_join_type, item.vipLevel, ',') + '参会人数≤'"
|
|
|
+ size="large" />
|
|
|
+ <el-input class="pl-10" v-model="item.total" maxlength="20"
|
|
|
+ placeholder="请输入报名人数" :disabled="!+item.check" />
|
|
|
</div>
|
|
|
</template>
|
|
|
- <el-empty :image-size="20" description="请先选择报名人员类型" v-if="checkedVipLevels.length == 0" />
|
|
|
+ <el-empty :image-size="20" description="请先选择报名人员类型"
|
|
|
+ v-if="checkedVipLevels.length == 0" />
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="d-flex flex-cln ml-20">
|
|
|
- <el-checkbox v-model="form.conditions.cpyTotalCheck" label="按每家单位人数限制" size="large" true-value="1" false-value="0" />
|
|
|
- <div v-if="form.conditions.cpyTotalCheck == '1' && form.conditions.levelTotalCheck == '0'" class="pl-10 pr-10 pt-5 pb-5 border">
|
|
|
- <template v-for="(item, index) in form.conditions.cpyCheck" :key="index">
|
|
|
- <div class="d-flex a-c" v-if="checkedVipLevels.some(items => items.vipLevel === item.vipLevel)">
|
|
|
- <el-checkbox v-model="item.check" :label="selectDictLabels(lm_check_join_type, item.vipLevel, ',') + '限制每家单位人数≤'" size="large" true-value="1" false-value="0" />
|
|
|
- <el-input class="pl-10" v-model="item.total" maxlength="20" placeholder="请输入报名人数" :disabled="!+item.check" />
|
|
|
+ <el-checkbox v-model="form.conditions.cpyTotalCheck" label="按每家单位人数限制"
|
|
|
+ size="large" true-value="1" false-value="0" />
|
|
|
+ <div v-if="form.conditions.cpyTotalCheck == '1' && form.conditions.levelTotalCheck == '0'"
|
|
|
+ class="pl-10 pr-10 pt-5 pb-5 border">
|
|
|
+ <template v-for="(item, index) in form.conditions.cpyCheck"
|
|
|
+ :key="index">
|
|
|
+ <div class="d-flex a-c"
|
|
|
+ v-if="checkedVipLevels.some(items => items.vipLevel === item.vipLevel)">
|
|
|
+ <el-checkbox v-model="item.check"
|
|
|
+ :label="selectDictLabels(lm_check_join_type, item.vipLevel, ',') + '限制每家单位人数≤'"
|
|
|
+ size="large" true-value="1" false-value="0" />
|
|
|
+ <el-input class="pl-10" v-model="item.total" maxlength="20"
|
|
|
+ placeholder="请输入报名人数" :disabled="!+item.check" />
|
|
|
</div>
|
|
|
</template>
|
|
|
- <el-empty :image-size="20" description="请先选择报名人员类型" v-if="checkedVipLevels.length == 0" />
|
|
|
+ <el-empty :image-size="20" description="请先选择报名人员类型"
|
|
|
+ v-if="checkedVipLevels.length == 0" />
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="d-flex border" v-if="form.conditions.levelTotalCheck == '1' && form.conditions.cpyTotalCheck == '1'">
|
|
|
+ <div class="d-flex border"
|
|
|
+ v-if="form.conditions.levelTotalCheck == '1' && form.conditions.cpyTotalCheck == '1'">
|
|
|
<div class="pl-10 pr-10 pt-5 pb-5 ">
|
|
|
- <template v-for="(item, index) in form.conditions.levelCheck" :key="index">
|
|
|
- <div class="d-flex a-c" v-if="checkedVipLevels.some(items => items.vipLevel === item.vipLevel)">
|
|
|
- <el-checkbox v-model="item.check" :label="'所有' + selectDictLabels(lm_check_join_type, item.vipLevel, ',') + '参会人数≤'" size="large" true-value="1" false-value="0" />
|
|
|
- <el-input class="pl-10" v-model="item.total" maxlength="20" placeholder="请输入报名人数" :disabled="!+item.check" />
|
|
|
+ <template v-for="(item, index) in form.conditions.levelCheck"
|
|
|
+ :key="index">
|
|
|
+ <div class="d-flex a-c"
|
|
|
+ v-if="checkedVipLevels.some(items => items.vipLevel === item.vipLevel)">
|
|
|
+ <el-checkbox v-model="item.check"
|
|
|
+ :label="'所有' + selectDictLabels(lm_check_join_type, item.vipLevel, ',') + '参会人数≤'"
|
|
|
+ size="large" true-value="1" false-value="0" />
|
|
|
+ <el-input class="pl-10" v-model="item.total" maxlength="20"
|
|
|
+ placeholder="请输入报名人数" :disabled="!+item.check" />
|
|
|
</div>
|
|
|
</template>
|
|
|
</div>
|
|
|
<div class="pl-10 pr-10 pt-5 pb-5">
|
|
|
- <template v-for="(item, index) in form.conditions.cpyCheck" :key="index">
|
|
|
- <div class="d-flex a-c" v-if="checkedVipLevels.some(items => items.vipLevel === item.vipLevel)">
|
|
|
- <el-checkbox v-model="item.check" :label="selectDictLabels(lm_check_join_type, item.vipLevel, ',') + '限制每家单位人数≤'" size="large" true-value="1" false-value="0" />
|
|
|
- <el-input class="pl-10" v-model="item.total" maxlength="20" placeholder="请输入报名人数" :disabled="!+item.check" />
|
|
|
+ <template v-for="(item, index) in form.conditions.cpyCheck"
|
|
|
+ :key="index">
|
|
|
+ <div class="d-flex a-c"
|
|
|
+ v-if="checkedVipLevels.some(items => items.vipLevel === item.vipLevel)">
|
|
|
+ <el-checkbox v-model="item.check"
|
|
|
+ :label="selectDictLabels(lm_check_join_type, item.vipLevel, ',') + '限制每家单位人数≤'"
|
|
|
+ size="large" true-value="1" false-value="0" />
|
|
|
+ <el-input class="pl-10" v-model="item.total" maxlength="20"
|
|
|
+ placeholder="请输入报名人数" :disabled="!+item.check" />
|
|
|
</div>
|
|
|
</template>
|
|
|
</div>
|
|
|
- <div class="flex1 ml--10"><el-empty :image-size="20" description="请先选择报名人员类型" v-if="checkedVipLevels.length == 0" /></div>
|
|
|
+ <div class="flex1 ml--10"><el-empty :image-size="20"
|
|
|
+ description="请先选择报名人员类型" v-if="checkedVipLevels.length == 0" />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</el-form-item>
|
|
|
@@ -154,7 +195,8 @@
|
|
|
<el-radio label="0">否</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="" prop="points" v-if="form.pointsFlag == '1'" class="flex1 pl-10">
|
|
|
+ <el-form-item label="" prop="points" v-if="form.pointsFlag == '1'"
|
|
|
+ class="flex1 pl-10">
|
|
|
<div class="d-flex f-s-14">
|
|
|
<div>每成功参会(签到成功)1人发放</div>
|
|
|
<el-input v-model="form.points" style="width: 60px" />
|
|
|
@@ -167,7 +209,8 @@
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="会议详情" prop="description">
|
|
|
- <el-input v-model="form.description" :rows="4" type="textarea" placeholder="请输入会议详情" />
|
|
|
+ <el-input v-model="form.description" :rows="4" type="textarea"
|
|
|
+ placeholder="请输入会议详情" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
@@ -202,7 +245,8 @@
|
|
|
<span class="c-999 f-s-12 f-w-4">(此模块报名审核通过后才可查看)</span>
|
|
|
</template>
|
|
|
<div class="d-flex flex-cln mt-10 f-s-12 c-#606266">
|
|
|
- <FileUpload v-model="form.attachments" format="array" :limit="20" :fileSize="100"></FileUpload>
|
|
|
+ <FileUpload v-model="form.attachments" format="array" :limit="20"
|
|
|
+ :fileSize="100"></FileUpload>
|
|
|
</div>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
@@ -227,19 +271,24 @@
|
|
|
<template v-for="(item, index) in form.certificateInfo" :key="index">
|
|
|
<el-row :gutter="20" class="bg-#f4f4f4 pd-16 mb-10">
|
|
|
<el-col :span="10">
|
|
|
- <el-form-item label="证书名称" :prop="`certificateInfo.${index}.certType`" :rules="[{ required: true, message: '请选择证书名称', trigger: 'change' }]">
|
|
|
+ <el-form-item label="证书名称" :prop="`certificateInfo.${index}.certType`"
|
|
|
+ :rules="[{ required: true, message: '请选择证书名称', trigger: 'change' }]">
|
|
|
<el-select v-model="item.certType" placeholder="证书名称" clearable>
|
|
|
- <el-option v-for="item in lm_training_cert" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
+ <el-option v-for="item in lm_training_cert" :key="item.value"
|
|
|
+ :label="item.label" :value="item.value" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="10">
|
|
|
- <el-form-item :prop="`certificateInfo.${index}.certImg`" :rules="[{ required: true, message: '请上传证书图片', trigger: 'change' }]">
|
|
|
+ <el-form-item :prop="`certificateInfo.${index}.certImg`"
|
|
|
+ :rules="[{ required: true, message: '请上传证书图片', trigger: 'change' }]">
|
|
|
<template #label>
|
|
|
<span>证书模板图片</span>
|
|
|
- <el-button @click="goEditor()" type="primary" text>去编辑模板图片</el-button>
|
|
|
+ <el-button @click="goEditor()" type="primary"
|
|
|
+ text>去编辑模板图片</el-button>
|
|
|
</template>
|
|
|
- <ImageUpload v-model="item.certImg" :fileSize="40" :limit="1"></ImageUpload>
|
|
|
+ <ImageUpload v-model="item.certImg" :fileSize="40" :limit="1">
|
|
|
+ </ImageUpload>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="4">
|
|
|
@@ -253,7 +302,8 @@
|
|
|
</div>
|
|
|
|
|
|
<div class="w-50% d-flex flex-cln j-c a-c pl-20">
|
|
|
- <el-button type="primary" class="w-100%" plain style="height: 70px; margin-bottom: 20px;" @click="showSignIn = true">点击去编辑报名信息></el-button>
|
|
|
+ <el-button type="primary" class="w-100%" plain style="height: 70px; margin-bottom: 20px;"
|
|
|
+ @click="showSignIn = true">点击去编辑报名信息></el-button>
|
|
|
<div class="w-400 h-700 border over-auto">
|
|
|
<div class="pd-10 border bg-#fafafa">
|
|
|
<div class="pt-10 f-s-20 f-w-6 d-flex j-c a-c flex-cln ">报名信息</div>
|
|
|
@@ -267,7 +317,8 @@
|
|
|
</template>
|
|
|
<template v-for="(field, index) in fields" :key="index">
|
|
|
<div class="meeting-custom-wrapper" @click.stop="showSignIn = true">
|
|
|
- <meetingCustomPreview :field="field" style="pointer-events: none" v-if="field" />
|
|
|
+ <meetingCustomPreview :field="field" style="pointer-events: none"
|
|
|
+ v-if="field" />
|
|
|
</div>
|
|
|
</template>
|
|
|
<div class="pd-15 border1 c-#D7D7D7 d-flex j-sb">
|
|
|
@@ -333,15 +384,19 @@ const Cancel = () => {
|
|
|
const router = useRouter();
|
|
|
const route = useRoute();
|
|
|
const levelTypeCheck = computed(() =>
|
|
|
- String(Number(checkedVipLevels.value.length > 0))
|
|
|
+ String(Number(checkedVipLevels.value.length > 0))
|
|
|
);
|
|
|
const form = ref<any>({
|
|
|
id: undefined,
|
|
|
conditions: {
|
|
|
levelTotalCheck: '0',
|
|
|
cpyTotalCheck: '0',
|
|
|
- levelTypeCheck:levelTypeCheck,
|
|
|
+ levelTypeCheck: levelTypeCheck,
|
|
|
typeCheck: [
|
|
|
+ {
|
|
|
+ vipLevel: "0",
|
|
|
+ check: "0"
|
|
|
+ },
|
|
|
{
|
|
|
vipLevel: "1",
|
|
|
check: "0"
|
|
|
@@ -448,13 +503,11 @@ const checkedVipLevels = ref([])
|
|
|
// 选项变化时的处理
|
|
|
const handleCheckedChange = (selectedValues) => {
|
|
|
|
|
|
-const selectedLevelMap = new Map(selectedValues.map(item => [item.vipLevel, true]));
|
|
|
-
|
|
|
-form.value.conditions.typeCheck.forEach(item => {
|
|
|
- item.check = selectedLevelMap.has(item.vipLevel) ? '1' : '0';
|
|
|
-});
|
|
|
-console.log(form.value.conditions.typeCheck);
|
|
|
+ const selectedLevelMap = new Map(selectedValues.map(item => [item.vipLevel, true]));
|
|
|
|
|
|
+ form.value.conditions.typeCheck.forEach(item => {
|
|
|
+ item.check = selectedLevelMap.has(item.vipLevel) ? '1' : '0';
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
// 全选/取消全选
|
|
|
@@ -472,6 +525,7 @@ const rules = reactive({
|
|
|
joinType: [{ required: true, message: '请选择会议方式', trigger: 'change' }],
|
|
|
trainingLocation: [{ required: true, message: '请输入会议地点', trigger: 'blur' }],
|
|
|
'conditions.totalCheck': [{ required: true, message: '请选择是否限制报名人数', trigger: 'change' }],
|
|
|
+ "conditions.typeCheck": [{ required: true, message: '请选择是否限制报名人员类型', trigger: 'change' }],
|
|
|
certFlag: [{ required: true, message: '请选择是否颁发证书', trigger: 'change' }],
|
|
|
certificateInfo: [{ required: true, message: '请选择证书名称', trigger: 'change' }],
|
|
|
description: [{ required: true, message: '请输入培训详情', trigger: 'blur' }],
|
|
|
@@ -485,6 +539,23 @@ const rules = reactive({
|
|
|
const formRef = ref();
|
|
|
const save = debounce(async () => {
|
|
|
await formRef.value.validate();
|
|
|
+ form.value.conditions.typeCheck.forEach(typeItem => {
|
|
|
+ console.log(typeItem);
|
|
|
+
|
|
|
+ if (typeItem.check === "0") {
|
|
|
+ // Update cpyCheck
|
|
|
+ const cpyItem = form.value.conditions.cpyCheck.find(item => item.vipLevel === typeItem.vipLevel);
|
|
|
+ if (cpyItem) {
|
|
|
+ cpyItem.check = "0";
|
|
|
+ }
|
|
|
+
|
|
|
+ // Update levelCheck
|
|
|
+ const levelItem = form.value.conditions.levelCheck.find(item => item.vipLevel === typeItem.vipLevel);
|
|
|
+ if (levelItem) {
|
|
|
+ levelItem.check = "0";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
const params = {
|
|
|
...form.value,
|
|
|
trainingStart: form.value.trainingTime ? form.value.trainingTime[0] : undefined,
|
|
|
@@ -529,12 +600,11 @@ const getMeetingDetail = async () => {
|
|
|
signupsTime: res.data.signupStart && res.data.signupEnd ? [res.data.signupStart, res.data.signupEnd] : undefined
|
|
|
};
|
|
|
fields.value = res.data.questions
|
|
|
- form.value.conditions.typeCheck.forEach((i)=>{
|
|
|
-
|
|
|
- if(i.check == '1'){
|
|
|
- checkedVipLevels.value.push(i)
|
|
|
- }
|
|
|
- })
|
|
|
+ form.value.conditions.typeCheck.forEach((i) => {
|
|
|
+ if (i.check == '1') {
|
|
|
+ checkedVipLevels.value.push(i)
|
|
|
+ }
|
|
|
+ })
|
|
|
}
|
|
|
};
|
|
|
onMounted(() => {
|