| | |
| | | } from 'ant-design-vue'; |
| | | |
| | | import { getTmsRecordDetail } from '#/api/x/tms/record'; |
| | | import { getAuthMediaUrl } from '#/utils/jnpf'; |
| | | import { TMS_BTN } from '#/views/x/tms/shared/ui'; |
| | | |
| | | import { |
| | | labelOfCategory, |
| | | labelOfEvalMode, |
| | | labelOfTrainMode, |
| | | loadRecordDics, |
| | | } from './constants'; |
| | | |
| | | import '#/views/x/tms/shared/page.css'; |
| | | |
| | | defineOptions({ name: 'TmsRecordDetail' }); |
| | | |
| | |
| | | }, |
| | | ]; |
| | | |
| | | onMounted(() => { |
| | | loadData(); |
| | | onMounted(async () => { |
| | | await loadRecordDics(); |
| | | await loadData(); |
| | | }); |
| | | |
| | | async function loadData() { |
| | |
| | | |
| | | function openAttachment(url?: string) { |
| | | if (!url || url === '#') { |
| | | createMessage.info('附件预览联调后生效'); |
| | | createMessage.info('暂无可预览附件'); |
| | | return; |
| | | } |
| | | window.open(url, '_blank'); |
| | | const apiIndex = url.indexOf('/api/'); |
| | | const path = /^https?:\/\//i.test(url) && apiIndex >= 0 ? url.slice(apiIndex) : url; |
| | | window.open(getAuthMediaUrl(path, false), '_blank'); |
| | | } |
| | | </script> |
| | | |
| | |
| | | <div class="jnpf-content-wrapper-content tms-record-detail-wrap"> |
| | | <a-spin :spinning="loading" class="detail-spin"> |
| | | <div v-if="detail" class="detail-inner"> |
| | | <div class="detail-header"> |
| | | <div class="text-base font-medium">培训记录</div> |
| | | <a-button type="primary" @click="goBack">返回</a-button> |
| | | <div class="tms-page-header"> |
| | | <div class="tms-page-header__title">培训记录</div> |
| | | <div class="tms-page-header__actions"> |
| | | <a-button @click="goBack">{{ TMS_BTN.back }}</a-button> |
| | | </div> |
| | | </div> |
| | | |
| | | <ADescriptions bordered :column="2" size="middle" class="detail-desc"> |
| | |
| | | <ADescriptionsItem label="培训开始时间">{{ detail.startTime }}</ADescriptionsItem> |
| | | <ADescriptionsItem label="培训结束时间">{{ detail.endTime || '-' }}</ADescriptionsItem> |
| | | <ADescriptionsItem label="培训地点" :span="2">{{ detail.placeName || '-' }}</ADescriptionsItem> |
| | | <ADescriptionsItem label="培训分类">{{ detail.category }}</ADescriptionsItem> |
| | | <ADescriptionsItem label="培训方式">{{ detail.trainMode || detail.trainType || '-' }}</ADescriptionsItem> |
| | | <ADescriptionsItem label="培训分类">{{ labelOfCategory(detail.category) }}</ADescriptionsItem> |
| | | <ADescriptionsItem label="培训方式">{{ labelOfTrainMode(detail.trainMode || detail.trainType) }}</ADescriptionsItem> |
| | | <ADescriptionsItem label="培训师">{{ detail.trainerName }}</ADescriptionsItem> |
| | | <ADescriptionsItem label="培训考核方式">{{ detail.evalMode }}</ADescriptionsItem> |
| | | <ADescriptionsItem label="培训考核方式">{{ labelOfEvalMode(detail.evalMode) }}</ADescriptionsItem> |
| | | <ADescriptionsItem label="培训对象" :span="2">{{ detail.trainees || '-' }}</ADescriptionsItem> |
| | | <ADescriptionsItem label="附件" :span="2"> |
| | | <div v-if="detail.attachments?.length" class="attach-list"> |
| | |
| | | .detail-inner { |
| | | padding: 16px 20px 24px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .detail-header { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | margin-bottom: 16px; |
| | | padding-bottom: 12px; |
| | | border-bottom: 1px solid #f0f0f0; |
| | | } |
| | | |
| | | .detail-desc { |