lisy 5 mesiacov pred
rodič
commit
33712a4e36

+ 53 - 82
src/views/training/meeting-add/index.vue

@@ -11,7 +11,7 @@
                 </el-button>
             </div>
             <div class="flex1 over-auto">
-                <el-form ref="formRef" label-width="auto" label-position="top" :model="form" :rules="rules">
+                <el-form ref="formRef" label-width="auto" label-position="top" :model="form" :rules="rules" :scroll-into-view-options="scrollOptions" scroll-to-error>
                     <div class="pd-16 border-bottom ov-hd">
                         <div class="info-title mb-10">会议信息</div>
                         <el-row :gutter="20">
@@ -22,24 +22,19 @@
                             </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>
@@ -50,8 +45,7 @@
                             </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">
@@ -62,16 +56,14 @@
                             <el-col :span="12">
                                 <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">
@@ -93,86 +85,53 @@
                                     <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>
@@ -195,8 +154,7 @@
                                             <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" />
@@ -209,8 +167,7 @@
                         <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">
@@ -245,8 +202,7 @@
                                         <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>
@@ -368,6 +324,10 @@ const fixedField = ref<FieldDefinition[]>([{
     label: '联系方式', type: '1', readonly: '0',
     required: '1'
 }])
+const scrollOptions = {
+  block: 'center',
+  behavior: 'smooth'
+};
 function generateSecureRandomString(length = 8) {
     const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
     const randomValues = new Uint32Array(length);
@@ -525,7 +485,20 @@ 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' }],
+    'conditions.typeCheck': [
+    {
+      validator: (rule, value, callback) => {
+        // 检查至少选择了一个选项(至少有一个 check 为 "1")
+        const isChecked = value.some(item => item.check === "1");
+        if (!isChecked) {
+          callback(new Error('请至少选择一种可报名人员类型'));
+        } else {
+          callback();
+        }
+      },
+      trigger: 'change' // 触发校验的时机
+    }
+  ],
     certFlag: [{ required: true, message: '请选择是否颁发证书', trigger: 'change' }],
     certificateInfo: [{ required: true, message: '请选择证书名称', trigger: 'change' }],
     description: [{ required: true, message: '请输入培训详情', trigger: 'blur' }],
@@ -540,8 +513,6 @@ 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);

+ 22 - 7
src/views/training/meeting/index.vue

@@ -11,7 +11,17 @@
                             </el-form-item>
                             <el-form-item label="会议方式" prop="joinType">
                                 <el-select v-model="queryParams.joinType" placeholder="请选择会议方式" clearable style="width: 160px" @change="handleQuery">
-                                    <el-option v-for="item in dm_training_join_type" :key="item.value" :label="item.label" :value="item.value" />
+                                    <el-option v-for="item in lm_training_join_type" :key="item.value" :label="item.label" :value="item.value" />
+                                </el-select>
+                            </el-form-item>
+                            <el-form-item label="报名状态" prop="joinStatus">
+                                <el-select v-model="queryParams.joinStatus" placeholder="请选择会议方式" clearable style="width: 160px" @change="handleQuery">
+                                    <el-option v-for="item in lm_training_join_status" :key="item.value" :label="item.label" :value="item.value" />
+                                </el-select>
+                            </el-form-item>
+                            <el-form-item label="会议状态" prop="joinStatus">
+                                <el-select v-model="queryParams.joinStatus" placeholder="请选择会议方式" clearable style="width: 160px" @change="handleQuery">
+                                    <el-option v-for="item in dm_training_status" :key="item.value" :label="item.label" :value="item.value" />
                                 </el-select>
                             </el-form-item>
                             <el-form-item label="是否颁发证书" prop="certFlag">
@@ -46,12 +56,17 @@
                             </div>
                             </template>
                         </vxe-column>
-                        <vxe-column field="signupsTime" min-width="130" title="报名时间" class-name="f-w-600">
-                            <template #default="{ row }">{{ row.signupStart.slice(0, -3) }}~{{ row.signupEnd.slice(0, -3) }}</template>
+                        <vxe-column field="signupsTime" min-width="330" title="报名时间" class-name="f-w-600">
+                            <template #default="{ row }">
+                                <div class="d-flex a-c">
+                                    {{ row.signupStart.slice(0, -3) }}~{{ row.signupEnd.slice(0, -3) }}
+                                    <DictTag :options="lm_training_join_status" :value="row?.joinStatus"></DictTag>
+                                </div>
+                            </template>
                         </vxe-column>
                         <vxe-column field="joinType" title="会议方式" width="80">
                             <template #default="{ row }">
-                                {{ selectDictLabel(dm_training_join_type, row.joinType) }}
+                                {{ selectDictLabel(lm_training_join_type, row.joinType) }}
                             </template>
                         </vxe-column>
                         <!-- <vxe-column field="trainingLocation" title="培训地点" align="center" min-width="150" /> -->
@@ -108,8 +123,8 @@
             </div>
         </div>
     </div>
-    <SignInCode v-if="showSignIn" v-model:show="showSignIn" :info="rowInfo" :dict="{ dm_training_join_type }"></SignInCode>
-    <TemporaryRegistration v-if="showTemporary" v-model:show="showTemporary" :info="temporaryRegistration" :dict="{ dm_training_join_type }"></TemporaryRegistration>
+    <SignInCode v-if="showSignIn" v-model:show="showSignIn" :info="rowInfo" :dict="{ lm_training_join_type }"></SignInCode>
+    <TemporaryRegistration v-if="showTemporary" v-model:show="showTemporary" :info="temporaryRegistration" :dict="{ lm_training_join_type }"></TemporaryRegistration>
 </template>
 
 <script setup name="meeting" lang="ts">
@@ -119,7 +134,7 @@ import { trainingList, queryTrainingCount, trainingDelete, publishTraining, unpu
 import { SignInCode, TemporaryRegistration } from '../models';
 const router = useRouter();
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
-const { dm_training_join_type, yes_no, lm_training_cert, dm_training_status } = toRefs<any>(proxy?.useDict('dm_training_join_type', 'yes_no', 'lm_training_cert', 'dm_training_status'));
+const { lm_training_join_type, yes_no, lm_training_join_status, dm_training_status } = toRefs<any>(proxy?.useDict('lm_training_join_type', 'yes_no', 'lm_training_join_status', 'dm_training_status'));
 const loading = ref(true);
 const showSearch = ref(true);
 const showSignIn = ref(false);

+ 2 - 2
src/views/training/models/meeting-detail-attend.vue

@@ -182,7 +182,8 @@ const query = useRoute().query;
 const queryParams = ref<any>({
     pageNum: 1,
     pageSize: 10,
-    trainingId: query?.id || ''
+    trainingId: query?.id || '',
+    res:'0'
 });
 const loading = ref(false);
 const total = ref(0);
@@ -204,7 +205,6 @@ const getList = async () => {
     loading.value = false;
 };
 const signupApprovals = async () => {
-    console.log(fromvalue.value);
     await formRef.value.validate()
     const res = await signupApproval(fromvalue.value);
     dialogVisible.value = false;

+ 1 - 2
src/views/training/models/meeting-detail-info.vue

@@ -18,8 +18,7 @@
                     </template>
                 </el-descriptions-item>
                 <el-descriptions-item label="报名人数:" v-if="form?.conditions.totalCheck == '1'">
-                    限制
-                    {{form?.conditions.total }}
+                    限制{{form?.conditions.total }}
                 </el-descriptions-item>
                 <el-descriptions-item label="报名人数:" v-else>不限制</el-descriptions-item>
                 <el-descriptions-item label="限制条件:" v-if="form?.conditions">

+ 0 - 4
src/views/training/models/meeting-editors.vue

@@ -268,8 +268,6 @@ const emit = defineEmits(['update:show', 'close', 'success', 'update:info']);
 const close = () => {
     emit('update:show', false);
     emit('close', false);
-    console.log(props.info);
-
 };
 const setActive = (field: any) => {
     activeField.value = field;
@@ -287,8 +285,6 @@ const addCustoms = async (value) => {
   const newField = new FieldDefinition(value)
   fields.value.push(newField)
   activeField.value = newField
-  console.log(fields.value,'fields.value');
-
   // 等待DOM更新
   await nextTick()