parent
862d6c5cdc
commit
882fa937ad
@ -0,0 +1,43 @@ |
||||
<template> |
||||
<div class="qrWrapper"> |
||||
<vueQr class="qr" :text="JSON.stringify(signInInfo)" :callback="test"></vueQr> |
||||
<span>有效时间:5min</span> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import vueQr from 'vue-qr' |
||||
export default { |
||||
props: { |
||||
signInInfo: Object |
||||
}, |
||||
components: { |
||||
vueQr |
||||
}, |
||||
data() { |
||||
return { |
||||
} |
||||
}, |
||||
methods: { |
||||
test(a, b) { |
||||
console.log("扫码成功"); |
||||
} |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
<style scoped> |
||||
.qrWrapper { |
||||
width: 100%; |
||||
height: 200px; |
||||
display: flex; |
||||
flex-direction: column; |
||||
justify-items: center; |
||||
align-items: center; |
||||
} |
||||
|
||||
.qr { |
||||
height: 200px; |
||||
width: 200px; |
||||
} |
||||
</style> |
@ -0,0 +1,16 @@ |
||||
function encodeChinese(str){ |
||||
if(!str){ |
||||
return '' |
||||
} |
||||
return encodeURIComponent(str) |
||||
} |
||||
|
||||
function decodeChinse(str){ |
||||
if(str){ |
||||
return decodeURIComponent(str) |
||||
} |
||||
} |
||||
|
||||
export { |
||||
encodeChinese,decodeChinse |
||||
} |
@ -0,0 +1,258 @@ |
||||
<template> |
||||
<div class="container" style="padding: 30px"> |
||||
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" |
||||
style="display: flex;margin-left: 5px"> |
||||
<div style="margin-top: 5px;margin-bottom:20px;margin-right: 5px"> |
||||
<el-button type="primary" icon="el-icon-plus" size="mini" @click="option({}, 'add')">新增课程</el-button> |
||||
</div> |
||||
<!-- <el-form-item label="学校名称" prop="schoolName"> |
||||
<el-select v-model="queryParams.schoolName"> |
||||
<el-option v-for="it in schoolList" :key="it.schoolId" :label="it.schoolName" |
||||
:value="it.schoolName"></el-option> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item label="班级名称" prop="trainClassName"> |
||||
<el-input v-model="queryParams.trainClassName" placeholder="请输入班级名称" clearable size="small" /> |
||||
</el-form-item> --> |
||||
</el-form> |
||||
|
||||
<el-table v-loading="loading" :data="courseList"> |
||||
<el-table-column label="序号" align="center" type="index" /> |
||||
<el-table-column label="课堂名称" align="center" prop="courseName" /> |
||||
<el-table-column label="所属班级" align="center" prop="className"> |
||||
<template slot-scope="scope"> |
||||
{{ scope.row.classType }} |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column label="课程链接" align="center"> |
||||
<template slot-scope="scope"> |
||||
{{ scope.row.courseLink }} |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column label="课程资料" align="center" prop="courseSource" /> |
||||
<el-table-column label="签到情况" align="center"> |
||||
<template slot-scope="scope"> |
||||
{{ scope.row.signIn }} / 70 |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column label="操作" align="center"> |
||||
<template slot-scope="scope"> |
||||
<el-button size="mini" type="text" @click="option(scope.row, 'motify')">修改</el-button> |
||||
<el-button size="mini" type="text" @click="option(scope.row, 'delete')">删除</el-button> |
||||
<el-button size="mini" type="text" @click="option(scope.row, 'signIn')">签到</el-button> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" |
||||
:limit.sync="queryParams.pageSize" @pagination="getList" /> |
||||
|
||||
<el-dialog class="diaform" :title="title" :visible.sync="visibleopen" :close-on-click-modal="false" |
||||
width="700px" append-to-body @close="colsedia"> |
||||
<div v-if="title == '签到码'"> |
||||
<vueQr :signInInfo="signInInfo"></vueQr> |
||||
</div> |
||||
<el-form v-else :model="swiperInfo" :rules="rules" ref="form" label-width="150px" text-align:center> |
||||
|
||||
<el-form-item label="所属班级" prop="filePath"> |
||||
<el-select v-model="swiperInfo.entityId" placeholder="请选择班级" clearable> |
||||
<el-option v-for="item in classList" :key="item.train_class_id" :label="item.train_class_name" |
||||
:value="item.train_class_id"></el-option> |
||||
</el-select> |
||||
</el-form-item> |
||||
|
||||
<el-form-item label="课程名称" prop="fileName"> |
||||
<el-input v-model="swiperInfo.fileName"></el-input> |
||||
</el-form-item> |
||||
|
||||
<el-form-item label="课堂老师" prop="fileType"> |
||||
<el-radio-group v-model="swiperInfo.fileType"> |
||||
<el-radio label="pc"></el-radio> |
||||
<el-radio label="app"></el-radio> |
||||
</el-radio-group> |
||||
</el-form-item> |
||||
|
||||
<el-form-item label="课程资料"> |
||||
<div> |
||||
<ImageUpload ref="imgupload" v-model="swiperInfo.filePath" listtype='picture-card' |
||||
class="widthFix" fileName="publicize" :limit="1" /> |
||||
</div> |
||||
|
||||
</el-form-item> |
||||
<el-form-item label="课时"> |
||||
<el-select v-model="swiperInfo.entityId" placeholder="请选择班级" clearable> |
||||
<el-option v-for="item in classList" :key="item.train_class_id" :label="item.train_class_name" |
||||
:value="item.train_class_id"></el-option> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item label="课时链接"> |
||||
<el-select v-model="swiperInfo.entityId" placeholder="请选择班级" clearable> |
||||
<el-option v-for="item in classList" :key="item.train_class_id" :label="item.train_class_name" |
||||
:value="item.train_class_id"></el-option> |
||||
</el-select> |
||||
</el-form-item> |
||||
|
||||
<el-form-item style="margin-top: 80px; text-align: center; margin-left: -150px"> |
||||
<el-button type="primary" style="width: 135px; font-size: 16px; height: 39px; line-height: 11px" |
||||
@click="submitto('confirm')">确认</el-button> |
||||
<el-button style="width: 135px; font-size: 16px; height: 39px; line-height: 11px; margin-left: 30px" |
||||
@click="colsedia">取消</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
</el-dialog> |
||||
</div> |
||||
</template> |
||||
<script> |
||||
import { getSwiperInfo, addSwiperInfo, getSwiperClass, delteSwiper } from '@/api/trainService/index' |
||||
import ImageUpload from '@/components/ImgUpload/index.vue' |
||||
import vueQr from '@/components/vueQr/index.vue' |
||||
import { deepClone } from '@/utils' |
||||
const titleMap = { |
||||
"motify": "修改", |
||||
"delete": "删除", |
||||
"signIn": "签到码", |
||||
"add": "新增" |
||||
} |
||||
export default { |
||||
name: 'peixunbaoming', |
||||
components: { ImageUpload, vueQr }, |
||||
data() { |
||||
return { |
||||
imgAction: process.env.VUE_APP_BASE_API + '/upload', |
||||
loading: false, |
||||
// 传递给二维码的信息 |
||||
signInInfo: {}, |
||||
courseList: [ |
||||
{ |
||||
'courseName': 1, |
||||
'className': 1, |
||||
'classType': 1, |
||||
'courseLink': 1, |
||||
'courseSource': 1, |
||||
'signIn': 1 |
||||
} |
||||
], |
||||
// 总条数 |
||||
total: 0, |
||||
// 查询参数 |
||||
queryParams: { |
||||
pageNum: 1, |
||||
pageSize: 10, |
||||
}, |
||||
swiperInfo: { |
||||
fileName: 1, |
||||
entityId: '', |
||||
fileType: '', |
||||
filePath: [] |
||||
}, |
||||
classList: [], |
||||
title: '新增图片', |
||||
visibleopen: false, |
||||
rules: { |
||||
filePath: [ |
||||
{ required: true, message: '请上传图片', trigger: 'blur' }, |
||||
], |
||||
fileName: [ |
||||
{ required: true, trigger: 'blur', message: "请输入排序" }, |
||||
{ pattern: /^\d+$/, message: "请输入正整数", trigger: "blur" } |
||||
], |
||||
fileType: [ |
||||
{ required: true, message: '请选择类型', trigger: 'change' }, |
||||
], |
||||
|
||||
}, |
||||
currentImage: '', |
||||
} |
||||
}, |
||||
methods: { |
||||
async getList() { |
||||
const res = await getSwiperInfo() |
||||
this.imageList = res.data |
||||
const classRes = await getSwiperClass() |
||||
console.log(classRes); |
||||
this.classList = classRes.data |
||||
}, |
||||
addCourse() { |
||||
this.title = '新增图片' |
||||
this.visibleopen = true |
||||
}, |
||||
previewImage(params) { |
||||
this.title = '图片预览' |
||||
console.log(params); |
||||
this.currentImage = process.env.VUE_APP_BASE_API + params.filePath |
||||
this.visibleopen = true |
||||
}, |
||||
//修改资讯的弹窗 |
||||
async modify(row) { |
||||
this.title = '修改图片' |
||||
this.visibleopen = true |
||||
this.form = row |
||||
}, |
||||
async option(row, type) { |
||||
this.title = titleMap[type] |
||||
if (type === 'motify') { |
||||
|
||||
} else if (type === 'delete') { |
||||
|
||||
} else if (type === 'add') { |
||||
|
||||
} else if (type === 'signIn') { |
||||
this.generateSignIn(row) |
||||
} |
||||
this.visibleopen = true |
||||
}, |
||||
// 提交 |
||||
submitto() { |
||||
this.$refs['form'].validate((valid) => { |
||||
if (valid) { |
||||
this.submit() |
||||
} else { |
||||
console.log('error submit!!'); |
||||
return false; |
||||
} |
||||
}) |
||||
|
||||
}, |
||||
async submit() { |
||||
const data = deepClone(this.swiperInfo) |
||||
data.filePath = data.filePath[data.filePath.length - 1].toString() |
||||
data.entityId = data.entityId * 1 |
||||
const res = await addSwiperInfo(data) |
||||
if (res.code == 200) { |
||||
this.$message.success('新增成功') |
||||
this.colsedia() |
||||
this.getList() |
||||
} |
||||
}, |
||||
// 关闭 |
||||
colsedia() { |
||||
this.$refs['form'].resetFields() |
||||
this.swiperInfo = { |
||||
fileName: '', |
||||
entityId: '', |
||||
fileType: '', |
||||
filePath: [] |
||||
} |
||||
this.$refs.imgupload.clearImages() |
||||
this.currentImage = "" |
||||
this.visibleopen = false |
||||
}, |
||||
// 生成二维码信息 |
||||
generateSignIn(row) { |
||||
const time = new Date().getTime().toString() |
||||
this.signInInfo = { 'time': time, ...row } |
||||
this.title = '签到码' |
||||
this.visibleopen = true |
||||
}, |
||||
}, |
||||
|
||||
created() { |
||||
this.getList() |
||||
}, |
||||
} |
||||
</script> |
||||
|
||||
<style lang="scss" scoped> |
||||
.el-upload-list--picture-card .el-upload-list__item { |
||||
width: 100% !important; |
||||
} |
||||
</style> |
Loading…
Reference in new issue