|
|
@@ -22,14 +22,26 @@
|
|
|
</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:ss" 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:ss" 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:ss" 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 dm_training_join_type" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
|
|
+ <el-radio v-for="item in dm_training_join_type" :key="item.value"
|
|
|
+ :label="item.value">{{ item.label }}</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
@@ -40,7 +52,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">
|
|
|
@@ -48,11 +61,104 @@
|
|
|
<el-input v-model="form.tel" maxlength="20" placeholder="请输入联系电话" clearable />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="报名人数" prop="registrantsNumber">
|
|
|
+ <div class="d-flex a-c"><el-radio-group v-model="form.conditions.totalCheck"
|
|
|
+ style="flex-wrap: nowrap">
|
|
|
+ <el-radio label="0">不限制</el-radio>
|
|
|
+ <el-radio label="1">限制</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ <el-input class="pl-10" v-model="form.conditions.total" maxlength="20"
|
|
|
+ placeholder="请输入报名人数" clearable
|
|
|
+ :disabled="form.conditions.totalCheck !== '1'" />
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="限制条件" prop="restrictiveConditions">
|
|
|
+ <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">
|
|
|
+ <el-checkbox v-model="item.check" true-value="1" false-value="0"
|
|
|
+ :label="'所有' + selectDictLabels(vip_level, item.vipLevel, ',') + '参会人数≤'"
|
|
|
+ size="large" /><el-input class="pl-10" v-model="item.total"
|
|
|
+ maxlength="20" placeholder="请输入报名人数" clearable
|
|
|
+ :disabled="!+item.check" />
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </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">
|
|
|
+ <el-checkbox v-model="item.check"
|
|
|
+ :label="selectDictLabels(vip_level, item.vipLevel, ',') + '限制每家单位人数≤'"
|
|
|
+ size="large" true-value="1" false-value="0" /><el-input
|
|
|
+ class="pl-10" v-model="item.total" maxlength="20"
|
|
|
+ placeholder="请输入报名人数" clearable :disabled="!+item.check" />
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="d-flex border">
|
|
|
+ <div v-if="form.conditions.levelTotalCheck == '1' && form.conditions.cpyTotalCheck == '1'"
|
|
|
+ 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">
|
|
|
+ <el-checkbox v-model="item.check"
|
|
|
+ :label="'所有' + selectDictLabels(vip_level, item.vipLevel, ',') + '参会人数≤'"
|
|
|
+ size="large" true-value="1" false-value="0" /><el-input
|
|
|
+ class="pl-10" v-model="item.total" maxlength="20"
|
|
|
+ placeholder="请输入报名人数" clearable :disabled="!+item.check" />
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ <div v-if="form.conditions.levelTotalCheck == '1' && form.conditions.cpyTotalCheck == '1'"
|
|
|
+ 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">
|
|
|
+ <el-checkbox v-model="item.check"
|
|
|
+ :label="selectDictLabels(vip_level, item.vipLevel, ',') + '限制每家单位人数≤'"
|
|
|
+ size="large" true-value="1" false-value="0" /><el-input
|
|
|
+ class="pl-10" v-model="item.total" maxlength="20"
|
|
|
+ placeholder="请输入报名人数" clearable :disabled="!+item.check" />
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="是否电子手签" prop="eleSignature">
|
|
|
+ <div class="d-flex a-c"><el-radio-group v-model="form.eleSignature"
|
|
|
+ style="flex-wrap: nowrap">
|
|
|
+ <el-radio label="1">是</el-radio>
|
|
|
+ <el-radio label="0">否</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
</el-row>
|
|
|
<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">
|
|
|
@@ -72,7 +178,8 @@
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="相关文件" prop="attachments">
|
|
|
- <FileUpload v-model="form.attachments" format="array" :limit="20" :fileSize="100"></FileUpload>
|
|
|
+ <FileUpload v-model="form.attachments" format="array" :limit="20" :fileSize="100">
|
|
|
+ </FileUpload>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
@@ -82,7 +189,8 @@
|
|
|
<div class="d-flex j-start a-c">
|
|
|
<el-form-item label="是否颁发证书" prop="certFlag">
|
|
|
<el-radio-group v-model="form.certFlag">
|
|
|
- <el-radio v-for="item in yes_no" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
|
|
+ <el-radio v-for="item in yes_no" :key="item.value" :label="item.value">{{ item.label
|
|
|
+ }}</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
<div v-if="+form.certFlag" class="ml-20">
|
|
|
@@ -93,14 +201,17 @@
|
|
|
<template v-for="(item, index) in form.certificateInfo" :key="index">
|
|
|
<el-row :gutter="20" class="bg-#f4f4f4 pd-16 mb-10">
|
|
|
<el-col :span="6">
|
|
|
- <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 dm_training_cert" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
+ <el-option v-for="item in dm_training_cert" :key="item.value"
|
|
|
+ :label="item.label" :value="item.value" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
|
- <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>
|
|
|
@@ -132,12 +243,43 @@ import { ref, reactive, onMounted } from 'vue';
|
|
|
import { debounce } from 'lodash';
|
|
|
import { useRouter } from 'vue-router';
|
|
|
import { trainingAdd, trainingDetail, trainingUpdate } from '@/api/training';
|
|
|
+import { checkPermi } from '@/utils/permission';
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
-const { dm_training_join_type, yes_no, dm_training_cert } = toRefs<any>(proxy?.useDict('dm_training_join_type', 'yes_no', 'dm_training_cert'));
|
|
|
+const { dm_training_join_type, yes_no, dm_training_cert, vip_level } = toRefs<any>(proxy?.useDict('dm_training_join_type', 'yes_no', 'dm_training_cert', 'vip_level'));
|
|
|
const router = useRouter();
|
|
|
const route = useRoute();
|
|
|
const form = ref<any>({
|
|
|
- id: undefined
|
|
|
+ id: undefined,
|
|
|
+ conditions: {
|
|
|
+ levelTotalCheck: '0',
|
|
|
+ cpyTotalCheck: '0',
|
|
|
+ levelCheck: [{
|
|
|
+ vipLevel: '1',
|
|
|
+ check: "0",
|
|
|
+ total: ''
|
|
|
+ }, {
|
|
|
+ vipLevel: '3',
|
|
|
+ check: "0",
|
|
|
+ total: ''
|
|
|
+ }, {
|
|
|
+ vipLevel: '5',
|
|
|
+ check: "0",
|
|
|
+ total: ''
|
|
|
+ }],
|
|
|
+ cpyCheck: [{
|
|
|
+ vipLevel: '1',
|
|
|
+ check: "0",
|
|
|
+ total: ''
|
|
|
+ }, {
|
|
|
+ vipLevel: '3',
|
|
|
+ check: "0",
|
|
|
+ total: ''
|
|
|
+ }, {
|
|
|
+ vipLevel: '5',
|
|
|
+ check: "0",
|
|
|
+ total: ''
|
|
|
+ }]
|
|
|
+ }
|
|
|
});
|
|
|
const rules = reactive({
|
|
|
// 自动生成全部
|
|
|
@@ -148,20 +290,23 @@ const rules = reactive({
|
|
|
certFlag: [{ required: true, message: '请选择是否颁发证书', trigger: 'change' }],
|
|
|
certificateInfo: [{ required: true, message: '请选择证书名称', trigger: 'change' }],
|
|
|
description: [{ required: true, message: '请输入培训详情', trigger: 'blur' }],
|
|
|
- coverImg: [{ required: true, message: '请上传封面图', trigger: 'change' }],
|
|
|
- trainingImg: [{ required: true, message: '请上传会议图', trigger: 'change' }],
|
|
|
+ // coverImg: [{ required: true, message: '请上传封面图', trigger: 'change' }],
|
|
|
+ // trainingImg: [{ required: true, message: '请上传会议图', trigger: 'change' }],
|
|
|
contactName: [{ required: true, message: '请输入会议联系人', trigger: 'blur' }],
|
|
|
tel: [{ required: true, message: '请输入联系电话', trigger: 'blur' }],
|
|
|
});
|
|
|
const formRef = ref();
|
|
|
-
|
|
|
+const levelTotalCheck = ref("0")
|
|
|
+const cpyTotalCheck = ref("0")
|
|
|
const save = debounce(async () => {
|
|
|
await formRef.value.validate();
|
|
|
const params = {
|
|
|
...form.value,
|
|
|
trainingStart: form.value.trainingTime ? form.value.trainingTime[0] : undefined,
|
|
|
trainingEnd: form.value.trainingTime ? form.value.trainingTime[1] : undefined,
|
|
|
- certificateInfo: +form.value.certFlag ? form.value.certificateInfo : undefined
|
|
|
+ signupStart: form.value.signupsTime ? form.value.signupsTime[0] : undefined,
|
|
|
+ signupEnd: form.value.signupsTime ? form.value.signupsTime[1] : undefined,
|
|
|
+ certificateInfo: +form.value.certFlag ? form.value.certificateInfo : undefined,
|
|
|
};
|
|
|
const res = form.value.id ? await trainingUpdate(params) : await trainingAdd(params);
|
|
|
if (res && res.code === 200) {
|
|
|
@@ -190,11 +335,18 @@ const getMeetingDetail = async () => {
|
|
|
if (!res || res.code !== 200) return;
|
|
|
form.value = {
|
|
|
...res.data,
|
|
|
- trainingTime: res.data.trainingStart && res.data.trainingEnd ? [res.data.trainingStart, res.data.trainingEnd] : undefined
|
|
|
+ trainingTime: res.data.trainingStart && res.data.trainingEnd ? [res.data.trainingStart, res.data.trainingEnd] : undefined,
|
|
|
+ signupsTime: res.data.signupStart && res.data.signupEnd ? [res.data.signupStart, res.data.signupEnd] : undefined
|
|
|
};
|
|
|
+
|
|
|
}
|
|
|
};
|
|
|
onMounted(() => {
|
|
|
getMeetingDetail();
|
|
|
});
|
|
|
</script>
|
|
|
+<style scoped>
|
|
|
+.border {
|
|
|
+ border: 1px solid #dcdfe6;
|
|
|
+}
|
|
|
+</style>
|