|
@@ -0,0 +1,404 @@
|
|
|
+<template>
|
|
|
+ <el-dialog
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ style="padding: 0 50px"
|
|
|
+ :title="title"
|
|
|
+ :visible.sync="dialogFormVisible"
|
|
|
+ width="1000px"
|
|
|
+ @close="close"
|
|
|
+ >
|
|
|
+ <el-form
|
|
|
+ ref="form"
|
|
|
+ label-width="80px"
|
|
|
+ :model="form"
|
|
|
+ :rules="rules"
|
|
|
+ style="width: 80%; margin: 0 auto"
|
|
|
+ >
|
|
|
+ <el-form-item label="课程分类" prop="category">
|
|
|
+ <el-select
|
|
|
+ v-model="form.category.id"
|
|
|
+ placeholder="请选择课程分类"
|
|
|
+ style="width: 90%"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="(item, index) in treeData"
|
|
|
+ :key="index"
|
|
|
+ :label="item.name"
|
|
|
+ style="height: auto; padding: 0 10px"
|
|
|
+ :value="item.id"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ <el-button style="margin-left: 10px" type="text" @click="courseSort">
|
|
|
+ 分类管理
|
|
|
+ </el-button>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="课程名称" prop="title">
|
|
|
+ <el-input v-model="form.title" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="课程标签" prop="labels">
|
|
|
+ <el-select
|
|
|
+ v-model="form.labels"
|
|
|
+ allow-create
|
|
|
+ default-first-option
|
|
|
+ filterable
|
|
|
+ multiple
|
|
|
+ placeholder="请选择课程标签"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in form.labels"
|
|
|
+ :key="item"
|
|
|
+ :label="item"
|
|
|
+ :value="item"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="课程封面" prop="thumb">
|
|
|
+ <el-upload
|
|
|
+ accept=".png,.jpg"
|
|
|
+ :action="action"
|
|
|
+ class="upload-demo"
|
|
|
+ :data="uploadData"
|
|
|
+ :file-list="fileList"
|
|
|
+ :limit="limit"
|
|
|
+ list-type="picture"
|
|
|
+ multiple
|
|
|
+ :on-success="uploadSuccess"
|
|
|
+ >
|
|
|
+ <el-button size="small" type="primary" @click="clearFile">
|
|
|
+ {{
|
|
|
+ title == '添加'
|
|
|
+ ? '上传照片'
|
|
|
+ : '重新上传'
|
|
|
+ }}
|
|
|
+ </el-button>
|
|
|
+ <div slot="tip" class="el-upload__tip">
|
|
|
+ 只能上传jpg/png文件,且不超过500kb
|
|
|
+ </div>
|
|
|
+ </el-upload>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ v-if="title == '编辑' && imageUrl"
|
|
|
+ label=""
|
|
|
+ prop="thumb"
|
|
|
+ >
|
|
|
+ <div class="ref-image">
|
|
|
+ <img :src="imageUrl" />
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="课程描述" prop="description">
|
|
|
+ <tiny-mce
|
|
|
+ :content="form.intro"
|
|
|
+ :tiny-height="300"
|
|
|
+ @childByValue="getTnyMac"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="发布时间" prop="published_at">
|
|
|
+ <!-- <el-input v-model="form.published_at" /> -->
|
|
|
+ <el-date-picker
|
|
|
+ v-model="form.published_at"
|
|
|
+ format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ placeholder="选择日期时间"
|
|
|
+ style="width: 100%"
|
|
|
+ type="datetime"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="是否推荐" prop="is_rec">
|
|
|
+ <el-radio-group v-model="form.is_rec">
|
|
|
+ <el-radio :label="1">是</el-radio>
|
|
|
+ <el-radio :label="0">否</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="评论" prop="comment_status">
|
|
|
+ <el-radio-group v-model="form.comment_status">
|
|
|
+ <el-radio :label="1">开启评论</el-radio>
|
|
|
+ <el-radio :label="0">关闭评论</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="课程排序" prop="sort">
|
|
|
+ <el-input v-model="form.sort" type="number" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="课程状态" prop="status">
|
|
|
+ <el-radio-group v-model="form.status">
|
|
|
+ <el-radio :label="1">正常</el-radio>
|
|
|
+ <el-radio :label="0">禁用</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <template #footer>
|
|
|
+ <el-button @click="close">取消</el-button>
|
|
|
+ <el-button v-if="title == '编辑'" type="primary" @click="save">
|
|
|
+ 确定
|
|
|
+ </el-button>
|
|
|
+ <el-button v-if="title == '添加'" type="primary" @click="add">
|
|
|
+ 添加
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+ import { doEdit, doTree, doAdd } from '../api/index'
|
|
|
+ // import { baseURL } from '@/config'
|
|
|
+
|
|
|
+ export default {
|
|
|
+ name: 'DepartmentManagementEdit',
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ // treeData: [{ id: 0, name: '全部' }], 由于请求的数组里边有多个字段没有进行处理暂时不拼接全部
|
|
|
+ treeData: [],
|
|
|
+ defaultProps: {
|
|
|
+ children: 'children',
|
|
|
+ label: 'name',
|
|
|
+ leaf: true,
|
|
|
+ },
|
|
|
+ form: {
|
|
|
+ category: { id: '' },
|
|
|
+ title: '',
|
|
|
+ labels: [],
|
|
|
+ thumb: '',
|
|
|
+ short_description: '',
|
|
|
+ description: '',
|
|
|
+ published_at: '',
|
|
|
+ is_rec: 1,
|
|
|
+ comment_status: 1,
|
|
|
+ status: 1,
|
|
|
+ sort: 0,
|
|
|
+ },
|
|
|
+ action: '', //图片上传地址
|
|
|
+ uploadShow: true,
|
|
|
+ uploadData: { file_type: 'img', type: 'course' },
|
|
|
+ fileList: [],
|
|
|
+ limit: 1,
|
|
|
+ imageUrl: '', //已上传视频链接
|
|
|
+ rules: {
|
|
|
+ category: [
|
|
|
+ { required: true, trigger: 'change', message: '请选择课程类型' },
|
|
|
+ ],
|
|
|
+ title: [
|
|
|
+ { required: true, trigger: 'blur', message: '请输入课程名称' },
|
|
|
+ ],
|
|
|
+ labels: [
|
|
|
+ { required: true, trigger: 'blur', message: '请输入课程描述' },
|
|
|
+ ],
|
|
|
+ thumb: [
|
|
|
+ { required: true, trigger: 'blur', message: '请上传课程封面' },
|
|
|
+ ],
|
|
|
+ short_description: [
|
|
|
+ { required: true, trigger: 'blur', message: '请输入课程段介绍' },
|
|
|
+ ],
|
|
|
+ // published_at: [
|
|
|
+ // {
|
|
|
+ // required: true,
|
|
|
+ // trigger: 'change',
|
|
|
+ // message: '请选择课程发布时间',
|
|
|
+ // },
|
|
|
+ // ],
|
|
|
+ is_rec: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ trigger: 'change',
|
|
|
+ message: '请选择是否推荐',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ comment_status: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ trigger: 'change',
|
|
|
+ message: '请选择是否开启评论',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ sort: [
|
|
|
+ { required: true, trigger: 'blur', message: '请输入课程排序' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ title: '',
|
|
|
+ dialogFormVisible: false,
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ $route: 'getTree',
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.getTree()
|
|
|
+ // this.action = baseURL + '/common/upload'
|
|
|
+ this.fileList = []
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ //富文本编辑器
|
|
|
+ getTnyMac(res) {
|
|
|
+ this.form.intro = res
|
|
|
+ },
|
|
|
+ //跳转课程分类管理
|
|
|
+ courseSort() {
|
|
|
+ this.$router.push('/course/coursesort')
|
|
|
+ },
|
|
|
+ //上传成功
|
|
|
+ uploadSuccess(response) {
|
|
|
+ console.log(response, '图片上传成功')
|
|
|
+ this.form.thumb = response.data.id
|
|
|
+ this.$refs.form.validateField('thumb')
|
|
|
+ },
|
|
|
+ clearFile() {
|
|
|
+ console.log('上传之前')
|
|
|
+ this.imageUrl = ''
|
|
|
+ },
|
|
|
+ // 分类列表数据
|
|
|
+ async getTree() {
|
|
|
+ const { data } = await doTree()
|
|
|
+ console.log(data, '课程分类列表数据0000')
|
|
|
+ // this.treeData = this.treeData.concat(data)
|
|
|
+ this.treeData = data
|
|
|
+ },
|
|
|
+ // handleNodeClick(node) {
|
|
|
+ // this.form.category_name = node.name
|
|
|
+ // this.form.category_id = node.id
|
|
|
+ // },
|
|
|
+ showEdit(row) {
|
|
|
+ console.log(row, '点击按钮传过来的数据')
|
|
|
+ if (row) {
|
|
|
+ this.title = '编辑'
|
|
|
+ this.form = Object.assign({}, row)
|
|
|
+ if (this.form.thumb_resource) {
|
|
|
+ this.imageUrl = this.form.thumb_resource.url
|
|
|
+ }
|
|
|
+ // if (this.form.category) {
|
|
|
+ // this.category_id = this.form.category.id
|
|
|
+ // }
|
|
|
+ } else {
|
|
|
+ this.title = '添加'
|
|
|
+ }
|
|
|
+ this.dialogFormVisible = true
|
|
|
+ },
|
|
|
+ close() {
|
|
|
+ this.$refs['form'].resetFields()
|
|
|
+ this.form = this.$options.data().form
|
|
|
+ this.fileList = []
|
|
|
+ this.dialogFormVisible = false
|
|
|
+ },
|
|
|
+ //编辑保存
|
|
|
+ save() {
|
|
|
+ this.form.labels = this.form.labels.toString()
|
|
|
+ this.$refs['form'].validate(async (valid) => {
|
|
|
+ if (valid) {
|
|
|
+ const { message } = await doEdit(this.form)
|
|
|
+ this.$baseMessage(
|
|
|
+ message,
|
|
|
+ 'success',
|
|
|
+ false,
|
|
|
+ 'vab-hey-message-success'
|
|
|
+ )
|
|
|
+ this.$emit('fetch-data')
|
|
|
+ this.fileList = []
|
|
|
+ this.close()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ //添加
|
|
|
+ add() {
|
|
|
+ this.form.labels = this.form.labels.toString()
|
|
|
+ this.$refs['form'].validate(async (valid) => {
|
|
|
+ if (valid) {
|
|
|
+ const { message } = await doAdd(this.form)
|
|
|
+ this.$baseMessage(
|
|
|
+ message,
|
|
|
+ 'success',
|
|
|
+ false,
|
|
|
+ 'vab-hey-message-success'
|
|
|
+ )
|
|
|
+ this.$emit('fetch-data')
|
|
|
+ this.fileList = []
|
|
|
+
|
|
|
+ this.close()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+</script>
|
|
|
+<style lang="scss">
|
|
|
+ .ref-image {
|
|
|
+ height: 150px;
|
|
|
+ overflow: hidden;
|
|
|
+ border: solid 1px #eee;
|
|
|
+ border-radius: 8px;
|
|
|
+ }
|
|
|
+ .ref-image img {
|
|
|
+ width: auto;
|
|
|
+ height: 150px;
|
|
|
+ }
|
|
|
+ .foot {
|
|
|
+ width: 50%;
|
|
|
+ margin-top: 50px;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+ p {
|
|
|
+ margin: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .edit_container,
|
|
|
+ .quill-editor {
|
|
|
+ height: 300px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .ql-snow .ql-picker.ql-size .ql-picker-label::before,
|
|
|
+ .ql-snow .ql-picker.ql-size .ql-picker-item::before {
|
|
|
+ content: '14px';
|
|
|
+ }
|
|
|
+
|
|
|
+ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='small']::before,
|
|
|
+ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='small']::before {
|
|
|
+ content: '10px';
|
|
|
+ }
|
|
|
+ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='large']::before,
|
|
|
+ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='large']::before {
|
|
|
+ content: '18px';
|
|
|
+ }
|
|
|
+ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='huge']::before,
|
|
|
+ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='huge']::before {
|
|
|
+ content: '32px';
|
|
|
+ }
|
|
|
+
|
|
|
+ .ql-snow .ql-picker.ql-header .ql-picker-label::before,
|
|
|
+ .ql-snow .ql-picker.ql-header .ql-picker-item::before {
|
|
|
+ content: '文本';
|
|
|
+ }
|
|
|
+ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='1']::before,
|
|
|
+ .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before {
|
|
|
+ content: '标题1';
|
|
|
+ }
|
|
|
+ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='2']::before,
|
|
|
+ .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before {
|
|
|
+ content: '标题2';
|
|
|
+ }
|
|
|
+ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='3']::before,
|
|
|
+ .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='3']::before {
|
|
|
+ content: '标题3';
|
|
|
+ }
|
|
|
+ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='4']::before,
|
|
|
+ .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='4']::before {
|
|
|
+ content: '标题4';
|
|
|
+ }
|
|
|
+ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='5']::before,
|
|
|
+ .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='5']::before {
|
|
|
+ content: '标题5';
|
|
|
+ }
|
|
|
+ .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='6']::before,
|
|
|
+ .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='6']::before {
|
|
|
+ content: '标题6';
|
|
|
+ }
|
|
|
+
|
|
|
+ .ql-snow .ql-picker.ql-font .ql-picker-label::before,
|
|
|
+ .ql-snow .ql-picker.ql-font .ql-picker-item::before {
|
|
|
+ content: '标准字体';
|
|
|
+ }
|
|
|
+ .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='serif']::before,
|
|
|
+ .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='serif']::before {
|
|
|
+ content: '衬线字体';
|
|
|
+ }
|
|
|
+ .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='monospace']::before,
|
|
|
+ .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='monospace']::before {
|
|
|
+ content: '等宽字体';
|
|
|
+ }
|
|
|
+</style>
|