|
|
@@ -1,4 +1,115 @@
|
|
|
<template>
|
|
|
- <div>xx</div>
|
|
|
+ <div class="p-3">
|
|
|
+ <div class="bg-fff flex1 ov-hd d-flex flex-cln">
|
|
|
+ <div class="d-flex a-c pd-16 border-bottom">
|
|
|
+ <div class="f-s-20 c-333 f-w-7 mr-10">会议详情</div>
|
|
|
+ <el-button @click="router.go(-1)" type="primary" text>
|
|
|
+ <el-icon>
|
|
|
+ <Back />
|
|
|
+ </el-icon>
|
|
|
+ 返回上一级
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ <div class="flex1 over-auto">
|
|
|
+ <div class="pd-16">
|
|
|
+ <el-descriptions :column="4">
|
|
|
+ <el-descriptions-item label="会议名称:">{{ form?.trainingName || '-' }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="培训时间:">{{ form?.trainingStart }}~{{ form?.trainingEnd }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="培训方式:">{{ selectDictLabel(dm_training_join_type, form?.joinType) || '-' }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="培训地点:">{{ form?.trainingLocation || '-' }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="是否颁发证书:">{{ selectDictLabel(dm_training_join_type, form?.certFlag) || '-' }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="证书名称:">{{ selectDictLabels(dm_training_cert, form?.certificateInfo, ',') }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="创建人:">{{ form?.createByName || '-' }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="创建时间:">{{ form?.createTime || '-' }}</el-descriptions-item>
|
|
|
+ </el-descriptions>
|
|
|
+ <div class="d-flex f-s-14 c-666">
|
|
|
+ <div class="flex1">
|
|
|
+ <div class="c-333 mb-10">培训详情:</div>
|
|
|
+ <div>{{ form?.description || '-' }}</div>
|
|
|
+ </div>
|
|
|
+ <div v-if="form?.attachments" class="flex1">
|
|
|
+ <div class="c-333 mb-10">相关文件:</div>
|
|
|
+ <FileLook v-model="form.attachments" :span="12"></FileLook>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <el-divider />
|
|
|
+ <div class="d-flex f-s-14 c-666">
|
|
|
+ <div class="flex1">
|
|
|
+ <div class="c-333 mb-10">封面图:</div>
|
|
|
+ <div>
|
|
|
+ <ImagePreview :src="form?.coverImgUrl" :width="100"></ImagePreview>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-if="form?.attachments" class="flex1">
|
|
|
+ <div class="c-333 mb-10">会议图:</div>
|
|
|
+ <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>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <el-divider />
|
|
|
+ <div class="d-flex mb-16">
|
|
|
+ <div class="info-title">
|
|
|
+ <span>参会人员信息</span>
|
|
|
+ <span class="f-s-14 c-666">(报名:288人 | 签到:255人 | 领取证书:250人)</span>
|
|
|
+ </div>
|
|
|
+ <div class="flex1"></div>
|
|
|
+ </div>
|
|
|
+ <vxe-table :loading="loading" border :data="list" min-height="0">
|
|
|
+ <!-- 序号 -->
|
|
|
+ <vxe-column type="seq" width="60" title="序号" align="center" />
|
|
|
+ <vxe-column title="企业名称" align="center" field="name" min-width="100" :formatter="colNoData" />
|
|
|
+ </vxe-table>
|
|
|
+ <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
-<script lang="tsx" setup></script>
|
|
|
+
|
|
|
+<script setup name="meeting-detail" lang="ts">
|
|
|
+import { ref, reactive, onMounted } from 'vue';
|
|
|
+import { debounce } from 'lodash';
|
|
|
+import router from '@/router';
|
|
|
+import { trainingDetailById, trainingMembers } from '@/api/training';
|
|
|
+import { FileLook } from '@/views/models';
|
|
|
+import { colNoData } from '@/utils/noData';
|
|
|
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
+const { dm_training_join_type, yes_no, dm_training_cert, dm_training_status } = toRefs<any>(proxy?.useDict('dm_training_join_type', 'yes_no', 'dm_training_cert', 'dm_training_status'));
|
|
|
+// 获取详情
|
|
|
+
|
|
|
+const form = ref<any>(null);
|
|
|
+const query = useRoute().query;
|
|
|
+const getDetail = async () => {
|
|
|
+ const res = await trainingDetailById(query?.id as string);
|
|
|
+ if (res.code === 200) {
|
|
|
+ form.value = res.data;
|
|
|
+ } else {
|
|
|
+ ElMessage.error(res.msg);
|
|
|
+ }
|
|
|
+};
|
|
|
+const queryParams = ref<any>({
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ trainingId: query?.id || ''
|
|
|
+});
|
|
|
+const loading = ref(false);
|
|
|
+const total = ref(0);
|
|
|
+const list = ref<any>([]);
|
|
|
+const getList = async () => {
|
|
|
+ loading.value = true;
|
|
|
+ const res = await trainingMembers(queryParams.value);
|
|
|
+ if (!res || res.code !== 200) return;
|
|
|
+ list.value = res.rows;
|
|
|
+ total.value = res.total;
|
|
|
+ loading.value = false;
|
|
|
+};
|
|
|
+onMounted(() => {
|
|
|
+ getDetail();
|
|
|
+ getList();
|
|
|
+});
|
|
|
+</script>
|