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.

348 lines
9.6 KiB

4 years ago
<template>
<div>
4 years ago
<xy-dialog :is-show.sync="isShow" type="form" :title="type === 'add' ? '新增广告' : '编辑广告'" :form="form" :rules="rules" @submit="submit">
4 years ago
<template v-slot:name>
<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 clearable placeholder="请填写活动名称" v-model="form.name" style="width: 300px;"/>
</div>
</div>
</template>
<template v-slot:type>
<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">
4 years ago
<el-select clearable placeholder="请选择类型" v-model="form.type" style="width: 300px;">
<el-option v-for="item in types" :value="item.value" :key="item.value" :label="item.label"></el-option>
</el-select>
4 years ago
</div>
</div>
</template>
<template v-slot:system>
<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">
4 years ago
<el-select clearable placeholder="请选择发布系统" v-model="form.system" style="width: 300px;">
<el-option v-for="item in systems" :key="item.value" :value="item.value" :label="item.label"></el-option>
</el-select>
4 years ago
</div>
</div>
</template>
<template v-slot:to>
<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">
4 years ago
<el-input clearable placeholder="请填写跳转方向" v-model="form.to" style="width: 300px;"/>
4 years ago
</div>
</div>
</template>
4 years ago
<template v-slot:state>
4 years ago
<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">
4 years ago
<el-select clearable placeholder="请选择状态" v-model="form.state" style="width: 300px;">
<el-option v-for="item in states" :value="item.value" :label="item.label" :key="item.value"></el-option>
</el-select>
4 years ago
</div>
</div>
</template>
<template v-slot:sort>
<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">
4 years ago
<el-input clearable placeholder="请填写排序" v-model="form.sort" style="width: 300px;"/>
4 years ago
</div>
</div>
</template>
<template v-slot:effectDate>
<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">
4 years ago
<el-date-picker
:editable="false"
type="daterange"
append-to-body
clearable
placeholder="请选择有效期"
v-model="form.effectDate"
style="width: 300px;"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"/>
4 years ago
</div>
</div>
</template>
<template v-slot:img>
<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">
4 years ago
<div v-if="form.img" style="position: relative;">
<img :src="form.img" class="avatar">
<Button shape="circle" icon="md-close" type="error" size="small" class="img__delete" @click="form.img = ''"></Button>
</div>
4 years ago
<el-upload
4 years ago
v-else
4 years ago
accept="picture"
:limit="1"
4 years ago
class="avatar-uploader"
4 years ago
list-type="picture-card"
action="/api/admin/upload-file"
4 years ago
:show-file-list="true"
4 years ago
:on-error="uploadFail"
4 years ago
:on-success="uploadSuccess"
:before-upload="uploadBefore">
4 years ago
<i class="el-icon-plus avatar-uploader-icon"></i>
4 years ago
</el-upload>
4 years ago
<div style="font-size: 10px;">建议尺寸 800*450像素</div>
4 years ago
</div>
</div>
</template>
</xy-dialog>
</div>
</template>
<script>
4 years ago
import {store,show,update} from '@/api/ad'
import {getparameter} from '@/api/system/dictionary'
import { Message } from 'element-ui'
4 years ago
export default {
4 years ago
props:{
systems:{
type:Array
}
},
4 years ago
data() {
return {
4 years ago
id:'',
type:'add',
4 years ago
isShow:false,
4 years ago
4 years ago
types:[{label:'首页轮播图',value:1}],
states:[
{
label:'禁用',
value:0
},
{
label:'启动',
value:1
}
],
4 years ago
form:{
name:'',
type:'',
system:'',
to:'',
4 years ago
state:'',
4 years ago
sort:'',
effectDate:[],
img:''
},
rules:{
4 years ago
name:[
{required:true,message:"请填写活动名称"}
],
type:[
{required:true,message:"请选择类型"}
],
system:[
{required:true,message:"请选择发布系统"}
],
to:[
4 years ago
{required:true,message:"请填写跳转方向"}
4 years ago
],
state:[
{required:true,message:"请选择状态"}
],
sort:[
{required:true,message:"请填写排序"}
],
effectDate:[
{required:true,message:"请选择日期"}
],
img:[
{required:true,message:"请选择图片"}
]
4 years ago
}
}
},
methods: {
4 years ago
4 years ago
async getToUrl(){
let res = await getparameter({number:'toUrl'})
this.toUrls = res.detail.map(item => {
return {
label:item.value,
value:item.id
}
})
},
//上传
uploadFail(err){
console.log(err)
},
uploadSuccess(response){
console.log(response)
this.form.img = response.url
},
4 years ago
uploadBefore(file){
console.log(file)
if((file.size/1000) > 2024){
Message({
type:'warning',
message:'上传图片大小超过2M'
})
return false
}
},
4 years ago
submit(){
console.log(this.form)
4 years ago
if(this.type === 'add'){
store({
pic:this.form.img,
name:this.form.name,
action:this.form.to,
origin_system:this.form.system,
type:this.form.type,
sort:this.form.sort,
state:this.form.state,
valid_time_begin:this.form.effectDate[0],
valid_time_over:this.form.effectDate[1]
}).then(res => {
Message({
type:'success',
message:'添加广告成功'
})
this.isShow = false
this.$emit('refresh')
this.form = {
name:'',
type:'',
system:'',
to:'',
state:'',
sort:'',
effectDate:[],
img:''
}
this.id = ''
})
return
}
if(this.type === 'editor'){
update({
id:this.id,
pic:this.form.img,
name:this.form.name,
action:this.form.to,
origin_system:this.form.system,
type:this.form.type,
sort:this.form.sort,
state:this.form.state,
valid_time_begin:this.form.effectDate[0],
valid_time_over:this.form.effectDate[1]
}).then(res => {
Message({
type:'success',
message:'编辑广告成功'
})
this.isShow = false
this.$emit('refresh')
this.form = {
name:'',
type:'',
system:'',
to:'',
state:'',
sort:'',
effectDate:[],
img:''
}
this.id = ''
})
return
}
},
//获取详情
async getDetailAd (){
const res = await show({id:this.id})
this.form.name = res?.name
this.form.state = res?.state
this.form.system = res?.origin_system
this.form.to = Number(res?.action)
this.form.sort = res?.sort
this.form.type = res?.type
this.form.img = res?.pic
this.form.effectDate = [res?.valid_time_begin,res?.valid_time_over]
4 years ago
}
4 years ago
},
watch:{
isShow(val){
if(val){
4 years ago
4 years ago
if(this.type === 'editor'){
this.getDetailAd()
}
}
}
}
4 years ago
}
</script>
<style scoped lang="scss">
4 years ago
.img__delete{
position: absolute;
top: 3px;
right: 15px;
}
4 years ago
</style>
4 years ago
<style lang="scss">
4 years ago
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409EFF;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
4 years ago
width: 120px;
height: 120px;
line-height: 120px;
4 years ago
text-align: center;
}
.avatar {
4 years ago
width: 120px;
4 years ago
display: block;
4 years ago
border-radius: 6px;
4 years ago
}
</style>