You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

243 lines
6.7 KiB

3 years ago
<template>
<div>
<xy-dialog :width="70" ref="dialog" type="form" :is-show.sync="isShow" :title="type === 'add' ? '新增攻略' : '编辑攻略'" :form="form" :rules="rules" @submit="submit">
<template v-slot:title>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>标题
</div>
<div class="xy-table-item-content">
<el-input v-model="form.title" placeholder="请填写标题" clearable style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:subheading>
<div class="xy-table-item">
<div class="xy-table-item-label">
副标题
</div>
<div class="xy-table-item-content">
<el-input v-model="form.subheading" placeholder="请填写副标题" clearable style="width: 300px;"></el-input>
</div>
</div>
</template>
<template v-slot:strategyTypeId>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>栏目
</div>
<div class="xy-table-item-content">
<el-select v-model="form.strategyTypeId" placeholder="请选择栏目">
<el-option v-for="item in strategyTypes" :label="item.name" :value="item.id"></el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:state>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>是否启用
</div>
<div class="xy-table-item-content">
<el-switch v-model="form.state"></el-switch>
</div>
</div>
</template>
<template v-slot:content>
<div class="xy-table-item">
<div class="xy-table-item-label">
内容
</div>
<div class="xy-table-item-content">
<tinymce ref="tinymce" :height="200" v-model="form.content" id='tinymce'></tinymce>
</div>
</div>
</template>
<template v-slot:coverPicture>
<div class="xy-table-item">
<div class="xy-table-item-label">
封面图
</div>
<div class="xy-table-item-content">
<div v-if="form.coverPicture" style="position: relative;">
<img :src="form.coverPicture" class="avatar">
<Button
shape="circle"
icon="md-close"
type="error"
size="small"
class="img__delete"
@click="form.coverPicture = ''"></Button>
</div>
<el-upload
v-else
accept="picture"
:limit="1"
class="avatar-uploader"
list-type="picture-card"
:action="action"
:show-file-list="true"
:on-error="uploadFail"
:on-success="uploadSuccess"
:before-upload="uploadBefore">
<i class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
</div>
</template>
<template v-slot:sortNumber>
<div class="xy-table-item">
<div class="xy-table-item-label">
排序
</div>
<div class="xy-table-item-content">
<el-input-number :controls="false" :min="0" :precision="0" v-model="form.sortNumber" placeholder="请填写排序" clearable style="width: 300px;"></el-input-number>
</div>
</div>
</template>
<template v-slot:label>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>标签
</div>
<div class="xy-table-item-content">
<el-select multiple v-model="form.label" placeholder="请选择标签">
<el-option v-for="item in labels" :label="item.value" :value="item.id"></el-option>
</el-select>
</div>
</div>
</template>
</xy-dialog>
</div>
</template>
<script>
import {index as typeIndex} from "@/api/strategyType"
import {getparameter} from '@/api/system/dictionary'
import tinymce from "@/components/Tinymce"
import { Message } from 'element-ui'
export default {
components:{
tinymce
},
data() {
return {
isShow:false,
type:'',
id:'',
action:`${process.env.VUE_APP_BASE_API}api/admin/upload-file`,
labels:[],
strategyTypes:[],
form:{
title:'',
subheading:'',
strategyTypeId:'',
state:true,
content:'',
coverPicture:'',
sortNumber:0,
label:''
},
rules:{
title:[
{required:true,message:'请填写标题'}
],
strategyTypeId:[
{required:true,message:'请选择类型'}
]
}
}
},
methods: {
//上传
uploadFail(err){
console.log(err)
},
uploadSuccess(response){
console.log(response)
this.form.coverPicture = response.url
},
uploadBefore(file){
if((file.size/1000) > 2024){
Message({
type:'warning',
message:'上传图片大小超过2M'
})
return false
}
},
async getLabel(){
const res = await getparameter({number:'strategyLabel'})
this.labels = res.detail
},
async getStrategyTypes(){
const res = await typeIndex()
this.strategyTypes = res.rows
console.log(this.strategyTypes)
},
submit(){
if(this.type === 'add'){
console.log(this.form)
}
}
},
watch:{
isShow(newVal){
if(newVal){
this.getStrategyTypes()
this.getLabel()
}else{
this.id = ''
this.type = ''
this.$refs['tinymce'].setContent(' ')
this.$refs['dialog'].reset()
}
}
}
}
</script>
<style scoped lang="scss">
</style>
<style>
.avatar-uploader .el-upload {
width: 120px;
height: 120px;
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
display: flex;
justify-content: center;
align-items: center;
}
.avatar-uploader .el-upload:hover {
border-color: #BF617C;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 120px;
height: 120px;
line-height: 120px;
text-align: center;
}
.avatar {
width: 120px;
display: block;
border-radius: 6px;
}
.img__delete{
transform: scale(0.7,0.7);
position: absolute;
top: 1px;
left: 4%;
}
</style>