205 lines
5.7 KiB
Vue
205 lines
5.7 KiB
Vue
<template>
|
||
<view>
|
||
<Navbar title="培训详情" />
|
||
<div class="content">
|
||
<div>培训内容:{{ content }}</div>
|
||
<div>培训地点:{{ trainingPlace }}</div>
|
||
<div>培训级别:{{ trainingLevel }}</div>
|
||
<div>培训日期:{{ trainingDate }}</div>
|
||
<div>培训时长:{{ trainingDuration }}分钟</div>
|
||
<div>主讲人:{{ lecturer }}</div>
|
||
<div>
|
||
培训考试:
|
||
<span style="color: #3c9cff; cursor: pointer" @click="goExam">{{ examPaperName || '无' }}</span>
|
||
</div>
|
||
<div class="item">
|
||
<span>二维码:</span>
|
||
<!-- <u--image :src="filePath" width="80" height="80" radius="3" @click="handleImg" /> -->
|
||
<template>
|
||
<canvas id="qrcode" canvas-id="qrcode" style="width: 100px; height: 100px" />
|
||
</template>
|
||
</div>
|
||
|
||
<!-- 签到 -->
|
||
<div class="sign-btn">
|
||
<u-button type="primary" shape="circle" @click="handleSign" v-if="!signTime" :disabled="detail.signStatus != 1">
|
||
签 到
|
||
</u-button>
|
||
</div>
|
||
</div>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import { getTrainingDetail, trainingSign } from '@/api/educationTraining'
|
||
import config from '@/config'
|
||
import uqrCode from '@/utils/uqrcode.js'
|
||
|
||
export default {
|
||
components: {},
|
||
data() {
|
||
return {
|
||
item: {},
|
||
id: '',
|
||
// 培训内容
|
||
content: '',
|
||
// 培训地点
|
||
trainingPlace: '',
|
||
// 培训级别
|
||
trainingLevel: '',
|
||
// 培训日期
|
||
trainingDate: '',
|
||
// 培训时长
|
||
trainingDuration: '',
|
||
// 主讲人
|
||
lecturer: '',
|
||
// 二维码
|
||
// filePath: 'https://cdn.uviewui.com/uview/album/1.jpg',
|
||
filePath: '',
|
||
// 培训考试
|
||
examPaperName: '',
|
||
signTime: '', // 签到时间
|
||
examPaperList: [], // 考试列表
|
||
detail: {}
|
||
}
|
||
},
|
||
onLoad(options) {
|
||
console.log('🚀 ~ onLoad ~ options:', options)
|
||
this.id = options.id
|
||
this.getDetail()
|
||
// this.createQRCode()
|
||
},
|
||
methods: {
|
||
// 获取培训详情
|
||
async getDetail() {
|
||
const res = await getTrainingDetail({ id: this.id })
|
||
console.log('🚀 ~ getDetail ~ res:', res)
|
||
this.content = res.data.content
|
||
this.trainingPlace = res.data.trainingPlace
|
||
this.trainingLevel = res.data.trainingLevel
|
||
this.trainingDate = res.data.trainingDate
|
||
this.trainingDuration = res.data.trainingDuration
|
||
this.lecturer = res.data.lecturer
|
||
this.filePath = config.fileUrl2 + res.data.filePath?.replace(/\\/g, '/')
|
||
this.examPaperName = res.data.examPaperList[0]?.examPaperName || ''
|
||
this.signTime = res.data.signTime || ''
|
||
this.item = { ...res.data.examPaperList[0], name: this.examPaperName, isStudyTask: false, isTrain: true }
|
||
this.examPaperList = res.data.examPaperList
|
||
this.detail = res.data
|
||
this.generate(res.data.qrCodeUuid)
|
||
},
|
||
// 点击预览
|
||
handleImg() {
|
||
uni.previewImage({
|
||
urls: [this.filePath]
|
||
})
|
||
},
|
||
// 签到
|
||
async handleSign() {
|
||
console.log('签到', this.id)
|
||
try {
|
||
const res = await trainingSign({ id: this.id })
|
||
console.log('🚀 ~ handleSign ~ res:', res)
|
||
if (res.code === 200) {
|
||
this.getDetail()
|
||
uni.showToast({
|
||
title: '签到成功',
|
||
icon: 'success'
|
||
})
|
||
}
|
||
} catch (error) {
|
||
console.log('🚀 ~ handleSign ~ error:', error)
|
||
}
|
||
},
|
||
// 去考试
|
||
goExam() {
|
||
if (!this.signTime) {
|
||
//提示 先签到
|
||
uni.showToast({
|
||
title: '请先签到',
|
||
icon: 'none'
|
||
})
|
||
} else {
|
||
if (this.examPaperList.length > 0) {
|
||
// 不在考试期限内 不允许考试 detail.trainingDate 2021-09-01 ~ 2021-09-30
|
||
const startDate = this.detail.trainingDate.split(' ~ ')[0]
|
||
const endDate = this.detail.trainingDate.split(' ~ ')[1]
|
||
const now = new Date().getTime()
|
||
if (now < new Date(startDate).getTime() || now > new Date(endDate).getTime()) {
|
||
uni.showToast({
|
||
title: '不在考试期限内',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
uni.navigateTo({
|
||
url: '/pages/myExam/beforeExamExplain?params=' + JSON.stringify(this.item)
|
||
})
|
||
} else {
|
||
// 提示 以考试
|
||
uni.showToast({
|
||
title: '已考试',
|
||
icon: 'none'
|
||
})
|
||
}
|
||
}
|
||
},
|
||
// 生成二维码
|
||
createQRCode() {
|
||
const qr = new UQRCode() // 实例化二维码
|
||
qr.data = '二维码内容' // 二维码内容
|
||
qr.size = 100 // 二维码大小
|
||
qr.make() // 生成二维码
|
||
//uni.createCanvasContext(canvasId, componentInstance)
|
||
const ctx = uni.createCanvasContext('qrcode', this) // 组件内调用需传this,vue3 中 this 为 getCurrentInstance()?.proxy
|
||
console.log('🚀 ~ createQRCode ~ ctx:', ctx)
|
||
qr.canvasContext = ctx // 传入canvas上下文
|
||
qr.drawCanvas() // 绘制二维码
|
||
},
|
||
generate(e) {
|
||
uqrCode.make({
|
||
canvasId: 'qrcode',
|
||
componentInstance: this,
|
||
text: e, // 想生成二维码到内容
|
||
size: 80,
|
||
margin: 0,
|
||
backgroundColor: '#ffffff',
|
||
foregroundColor: '#000000',
|
||
fileType: 'jpg',
|
||
errorCorrectLevel: uqrCode.errorCorrectLevel.H,
|
||
success: res => {
|
||
this.imgCode = res // base64的图片格式
|
||
}
|
||
})
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.content {
|
||
padding: 0 20px;
|
||
font-size: 14px;
|
||
|
||
.item {
|
||
display: flex;
|
||
align-items: flex-start;
|
||
margin: 10px 0;
|
||
}
|
||
|
||
.sign-btn {
|
||
margin: 80px auto;
|
||
width: 100px;
|
||
}
|
||
|
||
div {
|
||
margin: 10px 0;
|
||
}
|
||
|
||
.sign-btn {
|
||
margin: 80px auto;
|
||
width: 100px;
|
||
}
|
||
}
|
||
</style>
|