huangxw пре 5 месеци
родитељ
комит
adc700aac6

+ 2 - 0
src/components/ImagePreview/index.vue

@@ -27,6 +27,8 @@ const realSrc = computed(() => {
     if (!props.src) {
         return;
     }
+    console.log(props.src);
+    
     let real_src = props.src.split(',')[0];
     return real_src;
 });

+ 28 - 11
src/views/dgtmedicine/check/index.vue

@@ -5,15 +5,18 @@
                 <div class="f-s-20 c-333 f-w-7 mb-10">会员入会审核</div>
                 <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="auto">
                     <el-form-item label="企业名称" prop="cpyName">
-                        <el-input v-model="queryParams.cpyName" placeholder="搜企业名称关键字" clearable style="width: 180px" @keyup.enter="handleQuery" />
+                        <el-input v-model="queryParams.cpyName" placeholder="搜企业名称关键字" clearable style="width: 180px"
+                            @keyup.enter="handleQuery" />
                     </el-form-item>
                     <el-form-item label="申请时间段" prop="dateRange">
                         <div class="d-flex" style="width: 180px">
-                            <DateRange v-model="queryParams.dateRange" v-model:start-date="queryParams.startDate" v-model:end-date="queryParams.endDate"></DateRange>
+                            <DateRange v-model="queryParams.dateRange" v-model:start-date="queryParams.startDate"
+                                v-model:end-date="queryParams.endDate"></DateRange>
                         </div>
                     </el-form-item>
                     <el-form-item label="缴费状态" prop="paymentStatus">
-                        <el-select style="width: 140px" v-model="queryParams.paymentStatus" clearable placeholder="搜有效期状态">
+                        <el-select style="width: 140px" v-model="queryParams.paymentStatus" clearable
+                            placeholder="搜有效期状态">
                             <el-option label="全部" value=""></el-option>
                             <el-option label="已缴费" value="1"></el-option>
                             <el-option label="未缴费" value="0"></el-option>
@@ -26,14 +29,16 @@
                 </el-form>
             </div>
             <div class="d-flex flex1 ov-hd flex-cln pd-16">
-                <searchTabs :list="memberLevelCountList" v-model="queryParams.reviewStatus" keyLabel="name" @change="handleQuery" keyCount="num" keyValue="type"></searchTabs>
+                <searchTabs :list="memberLevelCountList" v-model="queryParams.reviewStatus" keyLabel="name"
+                    @change="handleQuery" keyCount="num" keyValue="type"></searchTabs>
                 <div class="pd-8"></div>
                 <div class="flex1 ov-hd">
                     <vxe-table :loading="loading" border :data="memberList" min-height="0" max-height="100%">
                         <vxe-column title="企业名称" align="center" field="cpyName" width="220" :formatter="colNoData" />
 
                         <vxe-column title="单位负责人" align="center" field="contact" width="100" :formatter="colNoData" />
-                        <vxe-column title="负责人联系电话" align="center" field="contactTel" wmin-width="100" :formatter="colNoData" />
+                        <vxe-column title="负责人联系电话" align="center" field="contactTel" wmin-width="100"
+                            :formatter="colNoData" />
                         <vxe-column title="会员级别" align="center" field="vipLevel" width="120">
                             <template #default="scope">
                                 <dict-tag :value="scope.row.vipLevel" :options="vip_level" />
@@ -47,29 +52,41 @@
                                 {{ +row.paymentStatus ? '已缴费' : '未缴费' }}
                             </template>
                         </vxe-column>
-                        <vxe-column title="申请时间" align="center" field="createTime" min-width="100" :formatter="colNoData" />
+                        <vxe-column title="申请时间" align="center" field="createTime" min-width="100"
+                            :formatter="colNoData" />
+                        <vxe-column title="审核详情" align="center" width="200">
+                            <template #default="{ row }">
+                                <div v-for="(item, index) in row.approvalLogList">
+
+                                </div>
+                            </template>
+                        </vxe-column>
                         <vxe-column title="审核状态" align="center" width="100">
                             <template #default="{ row }">
                                 <!-- <dict-tag :value="scope.row.reviewStatus" :options="cpy_res_status" /> -->
-                                <span :class="{ ['c-res-' + row?.reviewStatus]: true }">{{ selectDictLabel(cpy_res_status, row?.reviewStatus) }}</span>
+                                <span :class="{ ['c-res-' + row?.reviewStatus]: true }">{{
+                                    selectDictLabel(cpy_res_status, row?.reviewStatus) }}</span>
                             </template>
                         </vxe-column>
-                        <vxe-column title="操作" align="center" width="100" fixed="right" class-name="small-padding fixed-width">
+                        <vxe-column title="操作" align="center" width="100" fixed="right"
+                            class-name="small-padding fixed-width">
                             <template #default="{ row }">
-                                <el-button v-if="!+row?.reviewStatus" text type="primary" @click="routeDetail(row)">审核</el-button>
+                                <el-button v-if="!+row?.reviewStatus" text type="primary"
+                                    @click="routeDetail(row)">审核</el-button>
                                 <el-button v-else text style="color: #41C06D;" @click="routeDetail(row)">查看</el-button>
                             </template>
                         </vxe-column>
                     </vxe-table>
                 </div>
-                <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+                <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+                    v-model:limit="queryParams.pageSize" @pagination="getList" />
             </div>
         </div>
     </div>
 </template>
 
 <script setup name="Member" lang="ts">
-import { listMember, delMember, queryMemberApprovalCount,listMemberApproval } from '@/api/dgtmedicine/member/index';
+import { listMember, delMember, queryMemberApprovalCount, listMemberApproval } from '@/api/dgtmedicine/member/index';
 import { MemberVO, MemberLevelCountVO } from '@/api/dgtmedicine/member/types';
 import { colNoData } from '@/utils/noData';
 import { DateRange, searchTabs } from '@/views/models/index';

+ 71 - 75
src/views/training/meeting-add/index.vue

@@ -62,44 +62,85 @@
                                 </el-form-item>
                             </el-col>
                             <el-col :span="6">
-                                <el-form-item label="报名人数" prop="registrantsNumber">
+                                <el-form-item label="报名人数" prop="registrantsNumber"
+                                    :rules="[{ required: true, message: '请选择是否有报名限制', trigger: 'change' }]">
                                     <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" v-if="form.conditions.totalCheck == '1'">
-                                <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">
+                                <el-form-item prop="restrictiveConditions">
+                                    <template #label>
+                                        <span>限制条件</span>
+                                        <span class="c-999 f-s-12 f-w-4">(不限制的条件可不填)</span>
+                                    </template>
+                                    <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;" />
+                                        </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">
+                                                            <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="请输入报名人数" :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="请输入报名人数" :disabled="!+item.check" />
+                                                        </div>
+                                                    </template>
+
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <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">
-                                                        <el-checkbox v-model="item.check" true-value="1" false-value="0"
+                                                        <el-checkbox v-model="item.check"
                                                             :label="'所有' + selectDictLabels(vip_level, item.vipLevel, ',') + '参会人数≤'"
-                                                            size="large" />
-                                                        <el-input class="pl-10" v-model="item.total" maxlength="20"
+                                                            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>
-                                        <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">
-
+                                            <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">
@@ -110,36 +151,9 @@
                                                             placeholder="请输入报名人数" :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="请输入报名人数" :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="请输入报名人数" :disabled="!+item.check" />
-                                                </div>
-                                            </template>
-                                        </div>
-                                    </div>
                                 </el-form-item>
                             </el-col>
                             <el-col :span="6">
@@ -205,7 +219,7 @@
                                     <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>
                                     </el-radio-group>
                                 </el-form-item>
                                 <div v-if="+form.certFlag" class="ml-20">
@@ -255,11 +269,12 @@
                                     <div class="pt-10  f-s-20 f-w-6 d-flex j-c a-c flex-cln ">
                                         报名信息
                                     </div>
-                                    <div class="f-s-12 f-w-4 d-flex j-start c-#BBBBBB">此页面为意向人报名时所见页面:</div>
+                                    <div class="f-s-12 f-w-4 d-flex j-start c-red">此页面为意向人报名时所见页面:</div>
                                 </div>
-                                <template v-for="(field, index) in fixedField" :key="index">
-                                    <div class="meeting-custom-wrapper">
-                                        <MeetingCustom :field="field" @click="showSignIn = true" v-if="field" />
+                                <template v-for="(item, index) in fixedField" :key="index">
+                                    <div class="pd-15 border1 c-#D7D7D7 d-flex j-sb">
+                                        <span class="c-#606266 f-s-16 f-w-6">{{ item.label }}</span>
+                                        <span class="f-s-14">请输入</span>
                                     </div>
                                 </template>
                                 <template v-for="(field, index) in fields" :key="index">
@@ -285,15 +300,13 @@ 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';
-import { FieldDefinition, FieldType } from '../models/type'
+import { FieldDefinition } from '../models/type'
 // 需要添加以下导入
 import MeetingCustom from '../models/meeting-custom.vue'
 import MeetingEditors from '../models/meeting-editors.vue'
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { dm_training_join_type, yes_no, lm_training_cert, vip_level } = toRefs<any>(proxy?.useDict('dm_training_join_type', 'yes_no', 'lm_training_cert', 'vip_level'));
 const fields = ref<FieldDefinition[]>([])
-const changefields = ref(true)
 const showSignIn = ref(false);
 const fixedField = ref<FieldDefinition[]>([{
     name: `ent-${generateSecureRandomString()}`,
@@ -323,7 +336,6 @@ function generateSecureRandomString(length = 8) {
     return result;
 }
 const Cancel = () => {
-    // localStorage.removeItem('RegistrationInformation');
     router.go(-1)
 }
 const router = useRouter();
@@ -370,7 +382,7 @@ const rules = reactive({
     certFlag: [{ required: true, message: '请选择是否颁发证书', trigger: 'change' }],
     certificateInfo: [{ required: true, message: '请选择证书名称', trigger: 'change' }],
     description: [{ required: true, message: '请输入培训详情', trigger: 'blur' }],
-    eleSignature: [{ required: true, message: '请输入培训详情', trigger: 'blur' }],
+    eleSignature: [{ required: true, message: '请选择是否电子手签', trigger: 'blur' }],
     // coverImg: [{ required: true, message: '请上传封面图', trigger: 'change' }],
     // trainingImg: [{ required: true, message: '请上传会议图', trigger: 'change' }],
     contactName: [{ required: true, message: '请输入会议联系人', trigger: 'blur' }],
@@ -386,15 +398,13 @@ const save = debounce(async () => {
         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,
-        questions: (fields.value).map((item, index) => ({
+        questions: fields.value.map((item, index) => ({
             ...item,
             sort: index + 1  // 从 1 开始
         }))
     };
     const res = form.value.id ? await trainingUpdate(params) : await trainingAdd(params);
     if (res && res.code === 200) {
-        // localStorage.removeItem('RegistrationInformation');
-
         router.go(-1);
     }
 }, 500);
@@ -429,22 +439,8 @@ const getMeetingDetail = async () => {
 };
 onMounted(() => {
     getMeetingDetail();
-    // if (localStorage.getItem('RegistrationInformation')) {
-    //     fields.value = JSON.parse(localStorage.getItem('RegistrationInformation'))
-    // }
 });
-// watch(
-//     () => showSignIn.value,
-//     () => {
-//         if (localStorage.getItem('RegistrationInformation')) {
-//             fields.value = JSON.parse(localStorage.getItem('RegistrationInformation'))
-//         } else {
-//             console.log(fields.value);
-//         }
 
-//     },
-//     { immediate: true }
-// );
 </script>
 <style scoped>
 .border {

+ 1 - 3
src/views/training/meeting-detail/index.vue

@@ -29,9 +29,7 @@
 import { ref, reactive, onMounted } from 'vue';
 import { MeetingDetailInfo } from '../models';
 import router from '@/router';
-import { exportTrainingMembers, trainingDetailById, trainingMembers } from '@/api/training';
-import { FileLook } from '@/views/models';
-import { colNoData } from '@/utils/noData';
+import { trainingDetailById, trainingMembers } from '@/api/training';
 import MeetingDetailAttend from '../models/meeting-detail-attend.vue'
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { dm_training_join_type, yes_no, lm_training_cert, dm_training_status, dm_training_signup_status_list } = toRefs<any>(proxy?.useDict('dm_training_join_type', 'yes_no', 'lm_training_cert', 'dm_training_status', 'dm_training_signup_status_list'));

+ 12 - 11
src/views/training/meeting/index.vue

@@ -43,11 +43,11 @@
                 <div class="flex1 ov-hd">
                     <vxe-table :loading="loading" border :data="dataList" min-height="0" max-height="100%">
                         <vxe-column title="序号" align="center" type="seq" width="60" />
-                        <vxe-column field="trainingName" title="会议名称" :formatter="colNoData" min-width="150"/>
-                        <vxe-column field="trainingTime" min-width="150" title="培训时间">
+                        <vxe-column field="trainingName" title="会议名称" :formatter="colNoData" min-width="150" />
+                        <vxe-column field="trainingTime" min-width="130" title="培训时间">
                             <template #default="{ row }">{{ row.trainingStart }}~{{ row.trainingEnd }}</template>
                         </vxe-column>
-                        <vxe-column field="signupsTime" min-width="150" title="报名时间">
+                        <vxe-column field="signupsTime" min-width="130" title="报名时间">
                             <template #default="{ row }">{{ row.signupStart }}~{{ row.signupEnd }}</template>
                         </vxe-column>
                         <vxe-column field="joinType" title="培训方式" width="80">
@@ -81,14 +81,17 @@
                         <vxe-column title="临时报名通道" align="center" field="createByName" width="120"
                             :formatter="colNoData">
                             <template #default="{ row }">
-                                <el-popconfirm confirm-button-text="修改" cancel-button-text="取消" title="是否修改临时报名的状态?" :disabled="row.trainingStatus == '2'"
-                                    @confirm="confirmEvent(row)" @cancel="cancelEvent">
+                                <el-popconfirm confirm-button-text="修改" cancel-button-text="取消" title="是否修改临时报名的状态?"
+                                    :disabled="row.trainingStatus == '2'" @confirm="confirmEvent(row)"
+                                    @cancel="cancelEvent">
                                     <template #reference>
                                         <el-switch v-model="row.tempStatus" :loading="loading1" active-value="1"
-                                            inactive-value="0" :before-change="beforeChange1" :disabled="row.trainingStatus == '2'"/>
+                                            inactive-value="0" :before-change="beforeChange1"
+                                            :disabled="row.trainingStatus == '2'" />
                                     </template>
                                 </el-popconfirm>
-                                <el-button v-if="row.tempStatus == '1'" type="primary" text @click="temporary(row)" :disabled="row.trainingStatus == '2'">
+                                <el-button v-if="row.tempStatus == '1'" type="primary" text @click="temporary(row)"
+                                    :disabled="row.trainingStatus == '2'">
                                     查看
                                 </el-button>
                             </template>
@@ -128,12 +131,10 @@
 </template>
 
 <script setup name="meeting" lang="ts">
-import { colNoData, colNoUnm } from '@/utils/noData';
+import { colNoData } from '@/utils/noData';
 import { searchTabs } from '@/views/models';
 import { trainingList, queryTrainingCount, trainingDelete, publishTraining, unpublishTraining, offOrNoTemp } from '@/api/training';
-import { SignInCode } from '../models';
-import TemporaryRegistration from '../models/temporary-registration.vue'
-
+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'));

+ 3 - 2
src/views/training/models/index.ts

@@ -1,5 +1,6 @@
 export { default as SignInCode } from './sign-in-code.vue'; // 查看签到码
 export { default as MeetingDetailInfo } from './meeting-detail-info.vue';
 export { default as MeetingDetailattend } from './meeting-detail-attend.vue';
-export { default as temporaryRegistration } from './temporary-registration.vue'; // 查看签到码
-export { default as MeetingCustom } from './meeting-custom.vue'; // 查看签到码
+export { default as TemporaryRegistration } from './temporary-registration.vue'; // 查看签到码
+export { default as MeetingCustom } from './meeting-custom.vue'; // 查看签到码
+export { default as registrationInfo } from './registration-info.vue'; 

+ 118 - 40
src/views/training/models/meeting-custom.vue

@@ -4,33 +4,37 @@
             :scroll-to-error="true">
             <template v-if="field.type === '1' || field.type === '7' || field.type === '10'">
                 <el-form-item v-if="field.name.includes('text1-')" prop="label">
-                    <el-tag type="primary" size="small">单行文本</el-tag>
-                    <el-input class="pd-5" v-model="field.label" :placeholder="'请输入标题'" style="width: 340px" />
-                    <el-input class="pd-5" v-model="field.value" :placeholder="'请输入内容'" style="width: 340px"
-                        :disabled="true" />
+                    <el-tag type="info" size="small">单行文本</el-tag>
+                    <el-input class="pd-5 no-disabled-input" v-model="field.label" :placeholder="'请输入标题'"
+                        style="width: 340px;font-size: 16px;" clearable />
+                    <el-input class="pd-5 disabled-input" :placeholder="'请输入'"
+                        style="width: 340px; pointer-events: none ;" />
                 </el-form-item>
                 <el-form-item v-else-if="field.name.includes('text2-')" prop="label">
-                    <el-tag type="primary" size="small">多行文本</el-tag>
-                    <el-input class="pd-5" v-model="field.label" :placeholder="'请输入标题'" style="width: 340px" />
-                    <el-input class="pd-5" v-model="field.value" :placeholder="'请输入内容'" type="textarea" :disabled="true"
+                    <el-tag type="info" size="small">多行文本</el-tag>
+                    <el-input class="pd-5 no-disabled-input" v-model="field.label" :placeholder="'请输入标题'"
                         style="width: 340px" />
+                    <el-input class="pd-5 disabled-input" v-model="field.value" :placeholder="'请输入'" type="textarea"
+                        :disabled="true" style="width: 340px; pointer-events: none ;" />
                 </el-form-item>
-                <el-form-item v-else-if="field.name.includes('desc1-')" prop="defValue">
-                    <el-tag type="primary" size="small">文本描述</el-tag>
-                    <el-input class="pd-5" v-model="field.defValue" :placeholder="'请输入内容'" type="textarea"
-                        style="width: 340px" />
+                <el-form-item v-else-if="field.name.includes('desc1-')" prop="defValue"
+                    :rules="[{ required: true, message: '请输入描述', trigger: 'blur' }]">
+                    <el-tag type="info" size="small">文本描述</el-tag>
+                    <el-input class="pd-5" v-model="field.defValue" :placeholder="'请输入'" type="textarea"
+                        style="width: 340px;font-weight: 600;" />
                 </el-form-item>
                 <div class="d-flex flex-cln" v-else>
-                    <div class="pb-5">{{ field.label }}</div>
-                    <el-input v-model="field.value" :placeholder="'请输入' + field.label" :disabled="true"
-                        style="width: 340px" />
+                    <div class="pb-5 f-s-16 f-w-6">{{ field.label }}</div>
+                    <el-input class="pd-5 disabled-input" :placeholder="'请输入'"
+                        style="width: 340px; pointer-events: none ;" />
                 </div>
             </template>
             <template v-if="field.type === '4' || field.type === '5'">
                 <el-form-item v-if="field.name.includes('rad-')" prop="label"
                     :rules="[{ required: true, message: '请输入标题', trigger: 'blur' }]">
-                    <el-tag type="primary" size="small">单选</el-tag>
-                    <el-input class="pd-5" v-model="field.label" :placeholder="'请输入标题'" style="width: 340px" />
+                    <el-tag type="info" size="small">单选</el-tag>
+                    <el-input class="pd-5 no-disabled-input" v-model="field.label" :placeholder="'请输入标题'"
+                        style="width: 340px" />
                 </el-form-item>
                 <el-form-item v-if="field.name.includes('rad-')" v-for="(item, index) in field.options" :key="index"
                     :prop="'options.' + index + '.label'" :rules="{
@@ -39,19 +43,22 @@
                         trigger: 'blur',
                     }">
                     <div class="pd-1 p-rtv">
-                        <el-radio-group v-model="field.value" :disabled="true">
-                            <el-radio></el-radio>
+                        <el-radio-group v-model="field.value" style="pointer-events: none ;">
+                            <el-radio :label="1"> <span></span></el-radio>
                         </el-radio-group>
                         <el-input type="text" v-model="item.label" style="width: 310px" :placeholder="'请输入选项内容'"
                             @input="val => { item.label = val; item.value = val; }" />
-                        <img class="ml-10 delete-btn" :src="shanchu" @click="removeOption(index)">
+                        <el-icon class="ml-10 delete-btn" color="red" @click="removeOption(index)">
+                            <Close />
+                        </el-icon>
                     </div>
                 </el-form-item>
                 <el-button v-if="field.name.includes('rad-')" type="primary" plain class="w-100% mt-10"
                     @click="addOption()">新增选项</el-button>
                 <el-form-item v-if="field.name.includes('che-')" prop="label">
-                    <el-tag type="primary" size="small">多选</el-tag>
-                    <el-input class="pd-5" v-model="field.label" :placeholder="'请输入标题'" style="width: 340px" />
+                    <el-tag type="info" size="small">多选</el-tag>
+                    <el-input class="pd-5 no-disabled-input" v-model="field.label" :placeholder="'请输入标题'"
+                        style="width: 340px" />
                 </el-form-item>
                 <el-form-item v-if="field.name.includes('che-')" v-for="(item, index) in field.options" :key="index"
                     :prop="'options.' + index + '.label'" :rules="{
@@ -60,10 +67,12 @@
                         trigger: 'blur',
                     }">
                     <div class="pd-1 p-rtv">
-                        <el-checkbox class="pd-5" :disabled="true"></el-checkbox>
+                        <el-checkbox class="pd-5" :label="1" style="pointer-events: none ;"><span></span></el-checkbox>
                         <el-input type="text" v-model="item.label" style="width: 310px" :placeholder="'请输入选项内容'"
                             @input="val => { item.label = val; item.value = val; }" />
-                        <img class="ml-10 delete-btn" :src="shanchu" @click="removeOption(index)">
+                        <el-icon class="ml-10 delete-btn" color="red" @click="removeOption(index)">
+                            <Close />
+                        </el-icon>
                     </div>
                 </el-form-item>
                 <el-button v-if="field.name.includes('che-')" type="primary" plain class="w-100% mt-10"
@@ -79,27 +88,28 @@
             <template v-if="field.type === '3'">
                 <div class="pb-5">出生日期</div>
                 <el-time-select v-if="field.label == '出生日期'" style="width: 340px" start="08:30" step="00:15" end="18:30"
-                    placeholder="Select time" :disabled="true" />
+                    placeholder="请选择出生日期" :disabled="true" />
             </template>
             <template v-if="field.type === '6' || field.type === '8' || field.type === '9'">
                 <el-form-item prop="label">
-                    <el-tag type="primary" class="" size="small" v-if="field.name.includes('pic1-')">图片</el-tag>
-                    <el-tag type="primary" size="small" v-else-if="field.name.includes('file1-')">文件</el-tag>
-                    <el-tag type="primary" size="small" v-else>图文描述</el-tag>
-                    <el-input class="pd-5 pl-0" v-model="field.label" :placeholder="'请输入标题'" style="width: 340px"
-                        props="label" />
-                    <div v-if="!field.name.includes('pic2')" class="pd-5 h-50 w-50 bg-#fafafa d-flex a-c j-c"> +
-                    </div>
+                    <el-tag type="info" class="" size="small" v-if="field.name.includes('pic1-')">图片</el-tag>
+                    <el-tag type="info" size="small" v-else-if="field.name.includes('file1-')">文件</el-tag>
+                    <el-tag type="info" size="small" v-else>图文描述</el-tag>
+                    <el-input class="pd-5 pl-0 no-disabled-input" v-model="field.label" :placeholder="'请输入内容'"
+                        style="width: 340px" props="label" clearable />
                 </el-form-item>
+                <ImageUpload v-if="!field.name.includes('pic2')" v-model="field.defValue" :limit="1" isString
+                    class="pl-5 noup">
+                </ImageUpload>
                 <el-form-item prop="defValue" v-if="field.name.includes('pic2')">
                     <div>
-                        <ImageUpload v-model="field.defValue" :limit="3" isString class="pl-5">
+                        <ImageUpload v-model="field.defValue" :limit="3" isString class="pl-5 up">
                         </ImageUpload>
                     </div>
                 </el-form-item>
-                <div class="f-s-12 c-999">参会者点击可上传文件/图片</div>
-                <div class="f-s-12 c-999">单个图片/文件大小不超过100MB;</div>
-                <div class="f-s-12 c-999">
+                <div class="f-s-12 c-999 pl-5">参会者点击可上传文件/图片</div>
+                <div class="f-s-12 c-999 pl-5">单个图片/文件大小不超过100MB;</div>
+                <div class="f-s-12 c-999 pl-5">
                     支持格式:gif、png、jpg、jpeg、bmp、doc、docx、pdf、xls、xlsx、ppt.pptx、txt、zip、gzip、rar、mp4、mov</div>
             </template>
         </el-form>
@@ -107,10 +117,8 @@
 </template>
 
 <script setup lang="ts">
-import { FieldType } from './type'
-import { ref, onMounted } from 'vue';
+import { ref } from 'vue';
 import { ElInput, ElFormItem } from 'element-plus'
-import shanchu from '@/assets/images/shanchu.png'
 const prop = defineProps<{
     field: any // 使用any简化类型,实际应为FieldDefinition
 }>()
@@ -130,8 +138,8 @@ const addOption = () => {
         prop.field.options = []
     }
     prop.field.options.push({
-        label: '',
-        value: ``
+        label: '新增选项',
+        value: `新增选项`
     })
 }
 defineExpose({
@@ -163,4 +171,74 @@ defineExpose({
     padding: 0 0px;
     font-size: 12px;
 }
+
+.no-interaction {
+    pointer-events: none;
+}
+
+.no-interaction .el-input__inner {
+    background-color: #fff;
+    color: #606266;
+    cursor: default;
+}
+
+.no-interaction:hover {
+    cursor: default;
+}
+
+:deep(.disabled-input .el-input__inner) {
+    cursor: not-allowed;
+    /* 鼠标变成禁止符号 */
+    background-color: #fff !important;
+    /* 避免默认的灰色背景 */
+    color: #606266;
+    /* 保持文字颜色 */
+    border-color: #dcdfe6;
+    /* 保持边框颜色 */
+
+}
+
+:deep(.disabled-input .el-textarea__inner) {
+    cursor: not-allowed;
+    /* 鼠标变成禁止符号 */
+    background-color: #fff;
+    /* 避免默认的灰色背景 */
+    color: #606266;
+    /* 保持文字颜色 */
+    border-color: #dcdfe6;
+    /* 保持边框颜色 */
+    /* font-weight: bold !important; */
+}
+
+/* 去除 hover 效果 */
+/* .disabled-input .el-input__inner:hover {
+    border-color: #dcdfe6 !important;
+} */
+
+:deep(.no-disabled-input .el-input__inner) {
+    font-weight: bold !important;
+}
+
+:deep(.no-disabled-input .el-input__wrapper) {
+    box-shadow: none !important;
+    font-weight: bold !important;
+    border-radius: 0;
+    border: 1px solid transparent !important;
+    /* 透明边框,避免高度变化 */
+    font-size: 16px;
+}
+
+:deep(.no-disabled-input .el-input__wrapper.is-focus) {
+    box-shadow: none !important;
+    border: 1px solid #dcdfe6 !important;
+}
+
+:deep(.up .el-upload.el-upload--picture-card) {
+    border-color: #333
+}
+
+:deep(.noup .el-upload.el-upload--picture-card) {
+    border-color: transparent;
+    pointer-events: none;
+}
 </style>

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

@@ -27,8 +27,9 @@
         <div class="d-flex mb-16 ">
             <div class="info-title">
                 <span>参会人员信息</span>
-                <span class="f-s-14 c-666">(提交报名:{{ form?.submitCount || 0 }}人 | 审核通过:{{ form?.joinCount || 0 }}人 | 签到:{{
-                    form?.signCount || 0 }}人 | 领取证书:{{ form?.certCount || 0 }}人)</span>
+                <span class="f-s-14 c-666">(提交报名:{{ form?.submitCount || 0 }}人 | 审核通过:{{ form?.joinCount || 0 }}人 |
+                    签到:{{
+                        form?.signCount || 0 }}人 | 领取证书:{{ form?.certCount || 0 }}人)</span>
             </div>
         </div>
 
@@ -74,6 +75,11 @@
             <vxe-column title="联系方式" field="contact" min-width="100" :formatter="colNoData" />
             <vxe-column title="备注" field="remark" min-width="100" :formatter="colNoData" />
             <vxe-column title="报名时间" align="center" field="createTime" min-width="100" :formatter="colNoData" />
+            <vxe-column title="报名信息" min-width="100" fixed="right">
+                <template #default="{ row }">
+                    <div class="c-s-p"> <u @click="checkRegostrationInfo(row)">查看报名信息</u></div>
+                </template>
+            </vxe-column>
             <vxe-column title="参会状态" min-width="100" fixed="right">
                 <template #default="{ row }">
                     <DictTag :options="dm_training_signup_status_list" :value="row?.signupStatusForPc">
@@ -109,12 +115,15 @@
             </div>
         </template>
     </el-dialog>
+    <registrationInfo v-if="showTemporary" v-model:show="showTemporary" :info="temporaryRegistration">
+    </registrationInfo>
 </template>
 <script setup name="MeetingDetailInfo" lang="ts">
-import { ref, reactive, onMounted } from 'vue';
+import { ref, onMounted } from 'vue';
 import { signupCount, trainingMembers, signupApproval } from '@/api/training';
 import { searchTabs } from '@/views/models';
 import { colNoData } from '@/utils/noData';
+import registrationInfo from './registration-info.vue'
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { cpy_res_status, dm_training_signup_status_list, vip_level } = toRefs<any>(proxy?.useDict('cpy_res_status', 'dm_training_signup_status_list', 'vip_level'));
 // 获取详情
@@ -124,10 +133,15 @@ const props = defineProps({
         default: () => ({})
     },
 });
-
+const showTemporary = ref(false)
 const dialogVisible = ref(false)
 const dialoginput = ref()
 const currentRow = ref()
+const temporaryRegistration = ref()
+const checkRegostrationInfo = (row) => {
+    temporaryRegistration.value = row
+    showTemporary.value = true
+}
 const openDialog = (row) => {
     currentRow.value = row;  // 保存当前行数据
     dialogVisible.value = true;

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

@@ -51,7 +51,7 @@
                     <div class="d-flex flex-wrap">
                         <template v-for="(item, index) in form?.wechatQrCode" :key="index">
                             <div class="mr-10 mb-10">
-                                <ImagePreview :src="item" :width="100"></ImagePreview>
+                                <ImagePreview :src="item" :width="100" :height="100"></ImagePreview>
                             </div>
                         </template>
                     </div>
@@ -59,7 +59,7 @@
                 <div class="flex1">
                     <div class="c-333 mb-10">封面图:</div>
                     <div>
-                        <ImagePreview :src="form?.coverImgUrl" :width="100"></ImagePreview>
+                        <ImagePreview :src="form?.coverImgUrl" :width="100" :height="100"></ImagePreview>
                     </div>
                 </div>
                 <div v-if="form?.attachments" class="flex1">
@@ -67,7 +67,7 @@
                     <div class="d-flex flex-wrap">
                         <template v-for="(item, index) in form?.trainingImg" :key="index">
                             <div class="mr-10 mb-10">
-                                <ImagePreview :src="item" :width="100"></ImagePreview>
+                                <ImagePreview :src="item" :width="100" :height="100"></ImagePreview>
                             </div>
                         </template>
                     </div>

+ 31 - 33
src/views/training/models/meeting-editors.vue

@@ -14,38 +14,38 @@
                             <div class="pl-10 d-flex f-w-w">
                                 <el-button class="mb-25 ml-10 w-80" @click="addCustoms({
                                     name: `id-${generateSecureRandomString()}`,
-                                    label: '身份证', type: '1', required: '0', readonly: '0',
+                                    label: '身份证', type: '1', required: '1', readonly: '0',
                                     pattern: '^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$'
                                 })">身份证</el-button>
                                 <el-button class="mb-25 w-80" @click="addCustoms({
-                                    name: `birth-${generateSecureRandomString()}`, readonly: '0', required: '0',
+                                    name: `birth-${generateSecureRandomString()}`, readonly: '0', required: '1',
                                     label: '出生日期', type: '3'
                                 })">出生日期</el-button>
                                 <el-button class="mb-25 w-80" @click="addCustoms({
                                     name: `sex-${generateSecureRandomString()}`,
-                                    label: '性别', type: '4', required: '0', readonly: '0',
+                                    label: '性别', type: '4', required: '1', readonly: '0',
                                     options: [
-                                        { label: '男', value: '' }, { label: '女', value: '' }
+                                        { label: '男', value: '' }, { label: '女', value: '' }
                                     ]
                                 })">性别</el-button>
                                 <el-button class="mb-25 w-80" @click="addCustoms({
-                                    name: `old-${generateSecureRandomString()}`, required: '0', readonly: '0',
+                                    name: `old-${generateSecureRandomString()}`, required: '1', readonly: '0',
                                     label: '年龄', type: '1',
                                 })">年龄</el-button>
                                 <el-button class="mb-25 w-80" @click="addCustoms({
-                                    name: `edu-${generateSecureRandomString()}`, required: '0', readonly: '0',
+                                    name: `edu-${generateSecureRandomString()}`, required: '1', readonly: '0',
                                     label: '学历', type: '1',
                                 })">学历</el-button>
                                 <el-button class="mb-25 w-80" @click="addCustoms({
-                                    name: `uni-${generateSecureRandomString()}`, required: '0', readonly: '0',
+                                    name: `uni-${generateSecureRandomString()}`, required: '1', readonly: '0',
                                     label: '大学', type: '1',
                                 })">大学</el-button>
                                 <el-button class="mb-25 w-80" @click="addCustoms({
-                                    name: `pro-${generateSecureRandomString()}`, required: '0', readonly: '0',
+                                    name: `pro-${generateSecureRandomString()}`, required: '1', readonly: '0',
                                     label: '专业', type: '1',
                                 })">专业</el-button>
                                 <el-button class="mb-25 w-80" @click="addCustoms({
-                                    name: `ind-${generateSecureRandomString()}`, required: '0', readonly: '0',
+                                    name: `ind-${generateSecureRandomString()}`, required: '1', readonly: '0',
                                     label: '行业', type: '1',
                                 })">行业</el-button>
                             </div>
@@ -53,20 +53,20 @@
                         <div class="pd-10 f-s-16">联系方式</div>
                         <div class="pl-10 d-flex f-w-w">
                             <el-button class="mb-25 ml-10 w-80" @click="addCustoms({
-                                name: `wx-${generateSecureRandomString()}`, required: '0', readonly: '0',
+                                name: `wx-${generateSecureRandomString()}`, required: '1', readonly: '0',
                                 label: '微信号', type: '1',
                             })">微信号</el-button>
                             <el-button class="mb-25 w-80" @click="addCustoms({
-                                name: `qq-${generateSecureRandomString()}`, required: '0', readonly: '0',
+                                name: `qq-${generateSecureRandomString()}`, required: '1', readonly: '0',
                                 label: 'QQ号', type: '1',
                             })">QQ号</el-button>
                             <el-button class="mb-25 w-80" @click="addCustoms({
-                                name: `eml-${generateSecureRandomString()}`, required: '0', readonly: '0',
+                                name: `eml-${generateSecureRandomString()}`, required: '1', readonly: '0',
                                 label: '邮箱', type: '1',
                                 pattern: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
                             })">邮箱</el-button>
                             <el-button class="mb-25 w-80" @click="addCustoms({
-                                name: `add-${generateSecureRandomString()}`, required: '0', readonly: '0',
+                                name: `add-${generateSecureRandomString()}`, required: '1', readonly: '0',
                                 label: '地址', type: '1',
                             })">地址</el-button>
                         </div>
@@ -74,40 +74,40 @@
                         <div class="pd-10 f-s-16">选择</div>
                         <div class="pl-10 d-flex f-w-w">
                             <el-button class="mb-25 ml-10 w-80" @click="addCustoms({
-                                name: `rad-${generateSecureRandomString()}`, required: '0', readonly: '0',
-                                label: '', type: '4', options: [
-                                    { label: '', value: '' }, { label: '', value: '' }, { label: '', value: '' }
+                                name: `rad-${generateSecureRandomString()}`, required: '1', readonly: '0',
+                                label: '请输入标题', type: '4', options: [
+                                    { label: '选项一', value: '选项一' }, { label: '选项二', value: '选项二' }, { label: '选项三', value: '选项三' }
                                 ]
                             })">单选</el-button>
                             <el-button class="mb-25 w-80" @click="addCustoms({
-                                name: `che-${generateSecureRandomString()}`, required: '0', readonly: '0',
-                                label: '', type: '5', options: [
-                                    { label: '', value: '' }, { label: '', value: '' }, { label: '', value: '' }
+                                name: `che-${generateSecureRandomString()}`, required: '1', readonly: '0',
+                                label: '请输入标题', type: '5', options: [
+                                    { label: '选项一', value: '选项一' }, { label: '选项二', value: '选项二' }, { label: '选项三', value: '选项三' }
                                 ]
                             })">多选</el-button>
                         </div>
                         <div class="pd-10 f-s-16">文本输入</div>
                         <div class="pl-10 d-flex f-w-w">
                             <el-button class="mb-25 ml-10 w-80" @click="addCustoms({
-                                name: `text1-${generateSecureRandomString()}`, type: '1', required: '0', readonly: '0',
+                                name: `text1-${generateSecureRandomString()}`, type: '1', required: '1', readonly: '0', label: '请输入标题',
                             })">单行文本</el-button>
                             <el-button class="mb-25 w-80" @click="addCustoms({
-                                name: `text2-${generateSecureRandomString()}`, type: '7', required: '0', readonly: '0',
+                                name: `text2-${generateSecureRandomString()}`, type: '7', required: '1', readonly: '0', label: '请输入标题',
                             })">多行文本</el-button>
                             <el-button class="mb-25 w-80" @click="addCustoms({
-                                name: `desc1-${generateSecureRandomString()}`, type: '10', readonly: '1', required: '0', label: '文本描述'
+                                name: `desc1-${generateSecureRandomString()}`, type: '10', readonly: '1', required: '0', label: '文本描述', defValue: '请输入内容',
                             })">文本描述</el-button>
                         </div>
                         <div class="pd-10 f-s-16">其他</div>
                         <div class="pl-10 d-flex f-w-w">
                             <el-button class="mb-25 ml-10 w-80" @click="addCustoms({
-                                name: `pic1-${generateSecureRandomString()}`, type: '8', required: '0', readonly: '0',
+                                name: `pic1-${generateSecureRandomString()}`, type: '8', required: '1', readonly: '0', label: '请输入标题'
                             })">图片</el-button>
                             <el-button class="mb-25 w-80" @click="addCustoms({
-                                name: `file1-${generateSecureRandomString()}`, type: '6', required: '0', readonly: '0',
+                                name: `file1-${generateSecureRandomString()}`, type: '6', required: '1', readonly: '0', label: '请输入标题'
                             })">文件</el-button>
                             <el-button class="mb-25 w-80" @click="addCustoms({
-                                name: `pic2-${generateSecureRandomString()}`, type: '9', required: '0', readonly: '0',
+                                name: `pic2-${generateSecureRandomString()}`, type: '9', required: '0', readonly: '0', label: '请输入内容'
                             })">图文描述</el-button>
                         </div>
                     </div>
@@ -117,12 +117,12 @@
                             <div class="pt-10  f-s-20 f-w-6 d-flex j-c a-c flex-cln ">
                                 报名信息
                             </div>
-                            <div class="f-s-12 f-w-4 d-flex j-start c-#BBBBBB">此页面为意向人报名时所见页面:</div>
+                            <div class="f-s-12 f-w-4 d-flex j-start c-red">此页面为意向人报名时所见页面:</div>
                         </div>
                         <template v-for="(item, index) in fixedField" :key="index">
                             <div class="pd-15 border1 c-#D7D7D7 d-flex j-sb">
                                 <span>{{ item.label }}</span>
-                                <span>(不可编辑)</span>
+                                <span>(固定字段,不可编辑)</span>
                             </div>
                         </template>
                         <VueDraggable ref="el" v-model="fields">
@@ -130,9 +130,7 @@
                                 <div class="meeting-custom-wrapper" :class="{ 'active-border': activeField === field }"
                                     @click="setActive(field)">
                                     <MeetingCustom :field="field" ref="childRef" v-if="field" />
-                                    <el-button class="delete-btn" type="danger" text @click.stop="removeField(index)">
-                                        删除
-                                    </el-button>
+                                    <img class="ml-10 delete-btn" :src="shanchu" @click.stop="removeField(index)">
                                 </div>
                             </template>
                         </VueDraggable>
@@ -148,16 +146,16 @@
 </template>
 
 <script setup name="lmmeeting-meeting-add" lang="ts">
+import shanchu from '@/assets/images/shanchu.png'
 import { VueDraggable } from 'vue-draggable-plus'
 import { ref, reactive, onMounted, watch } from 'vue';
-import { debounce } from 'lodash';
 import { useRouter } from 'vue-router';
 // 需要添加以下导入
 import MeetingCustom from './meeting-custom.vue'
 import { propTypes } from '@/utils/propTypes';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { dm_training_join_type, yes_no, lm_training_cert, vip_level } = toRefs<any>(proxy?.useDict('dm_training_join_type', 'yes_no', 'lm_training_cert', 'vip_level'));
-import { FieldDefinition, FieldType } from './type'
+import { FieldDefinition } from './type'
 const props = defineProps<{
     field?: any; // 使用 any 简化类型(实际应替换为具体类型,如 FieldDefinition)
     show?: boolean; // 可选参数,默认 false
@@ -296,7 +294,7 @@ watch(
 
 .delete-btn {
     position: absolute;
-    top: 5px;
+    top: 15px;
     right: 5px;
     padding: 0 5px;
     font-size: 12px;

+ 78 - 0
src/views/training/models/registration-info.vue

@@ -0,0 +1,78 @@
+<template>
+    <vxe-modal v-model="dialogVisible" :title="title" show-zoom resize show-footer destroy-on-close transfer
+        @hide="close" :width="width" :z-index="1002">
+        <template #default>
+            <div>
+                <div v-if="info" ref="codeImgRef" style="width: 400px; margin: 0 auto;">
+                    <div class="mb-6 f-w-6 f-s-16 c-333">报名信息</div>
+                    <div class="mb-6">企业名称:{{ info?.company || '-' }}</div>
+                    <div class="mb-6">姓名:{{ info?.name || '-' }}</div>
+                    <div class="mb-6">职务{{ info?.position || '-' }}</div>
+                    <div class="mb-6">联系电话:{{ info?.contact || '-' }}</div>
+                    <div v-for="item, index in info.questionAnswer" :key="index" class="d-flex"
+                        :style="['6', '8', '9', '10'].includes(item.type) ? { 'flex-direction': 'column' } : {}">
+                        <div class="d-flex mb-6">
+                            <div class=" f-s-14" v-if="item.type !== '10'">{{ item.label }}:</div>
+                        </div>
+                        <div class="ov-hd mb-6  f-s-14" v-if="!['5', '6', '8', '9', '10'].includes(item.type)">{{
+                            item?.value || '-' }}
+                        </div>
+                        <div class="ov-hd mb-6  f-s-14" v-if="item.type == '5'">{{
+                            item?.value.join(',') || '-' }}
+                        </div>
+                        <div class="ov-hd mb-6  f-s-14" v-if="item.type == '6'">
+                            <FileLook v-model="item.value" :span="24"></FileLook>
+                        </div>
+                        <div class=" mb-6  f-s-14 d-flex flex-wrap" v-if="item.type == '8'">
+                            <template v-for="(items, index) in item.value" :key="index">
+                                <div class="mr-10 mb-10">
+                                    <ImagePreview :src="items" :width="100" :height="100"></ImagePreview>
+                                </div>
+                            </template>
+                        </div>
+                        <div class="ov-hd mb-6  f-s-14 pt-10 pb-10 d-flex flex-wrap" v-if="item.type == '9'">
+                            <template v-for="(items, index) in item.defValue.split(',')" :key="index">
+                                <div class="mr-10 mb-10">
+                                    <ImagePreview :src="items" :width="100" :height="100"></ImagePreview>
+                                </div>
+                            </template>
+                        </div>
+                        <div class="ov-hd mb-6  f-s-14 pt-10 pb-10" v-if="item.type == '10'">
+                            {{ item?.defValue }}
+                        </div>
+                    </div>
+
+                </div>
+            </div>
+            <div class="d-flex j-c">
+            </div>
+        </template>
+    </vxe-modal>
+</template>
+
+<script setup name="SignInCode" lang="ts">
+import { propTypes } from '@/utils/propTypes';
+import { FileLook } from '@/views/models';
+const emit = defineEmits(['update:show', 'close', 'success']);
+const props = defineProps({
+    show: propTypes.bool.def(false),
+    title: propTypes.string.def(' '),
+    width: propTypes.number.def(500),
+    info: propTypes.any.def(null),
+    dict: propTypes.object.def({})
+});
+
+const dialogVisible = ref(false);
+const close = () => {
+    emit('update:show', false);
+    emit('close', false);
+};
+const codeImgRef = ref<HTMLElement | null>(null);
+watch(
+    () => props.show,
+    (val) => {
+        dialogVisible.value = val;
+    },
+    { immediate: true }
+);
+</script>