parent
cb2e73a23f
commit
c53de0c857
6 changed files with 588 additions and 34 deletions
@ -0,0 +1,351 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<el-form label-width="170px" |
||||||
|
label-suffix=":" |
||||||
|
class="input-form model" |
||||||
|
size="small"> |
||||||
|
<el-form-item class="req" |
||||||
|
label="图片"> |
||||||
|
<el-upload class="avatar-uploader" |
||||||
|
accept=".jpg,.png,.jpeg,.gif" |
||||||
|
:limit="1" |
||||||
|
:on-exceed="handleExceed" |
||||||
|
:before-remove="beforeRemove" |
||||||
|
:on-remove="handleRemove" |
||||||
|
:on-error="uploadError" |
||||||
|
action="" |
||||||
|
:http-request="handleRequest"> |
||||||
|
<img v-if="form.coverUrl" |
||||||
|
:src="form.coverUrl" |
||||||
|
class="avatar"> |
||||||
|
<div class="uploader-default" |
||||||
|
v-else> |
||||||
|
<i class="el-icon-plus"></i> |
||||||
|
<p>上传图片</p> |
||||||
|
</div> |
||||||
|
</el-upload> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item class="req" |
||||||
|
label="标题"> |
||||||
|
<el-input id="firstInput" |
||||||
|
placeholder="请输入标题" |
||||||
|
v-model="form.productName" |
||||||
|
maxlength="40" |
||||||
|
clearable></el-input> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item class="req" |
||||||
|
label="链接类型"> |
||||||
|
<el-radio-group v-model="form.link"> |
||||||
|
<el-radio label="1">小程序内链接</el-radio> |
||||||
|
<el-radio label="2">外链接</el-radio> |
||||||
|
</el-radio-group> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item v-if="form.link === '1'" |
||||||
|
class="req" |
||||||
|
label="链接内容"> |
||||||
|
<el-select style="width: 150px" |
||||||
|
v-model="form.selectLinkId" |
||||||
|
clearable |
||||||
|
@change="getDetails" |
||||||
|
@clear="clearDetails"> |
||||||
|
<el-option v-for="item in linkContents" |
||||||
|
:key="item.id" |
||||||
|
:label="item.name" |
||||||
|
:value="item.id"> |
||||||
|
</el-option> |
||||||
|
</el-select> |
||||||
|
<el-select class="m-l-20" |
||||||
|
v-model="form.correspondingLinkId" |
||||||
|
clearable |
||||||
|
filterable> |
||||||
|
<el-option v-for="item in linkDetails" |
||||||
|
:key="item.id" |
||||||
|
:label="item.name" |
||||||
|
:value="item.id"> |
||||||
|
</el-option> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item v-else |
||||||
|
class="req" |
||||||
|
label="跳转链接"> |
||||||
|
<el-input style="width: 400px" |
||||||
|
placeholder="请输入跳转链接" |
||||||
|
v-model="form.jumpLink" |
||||||
|
clearable></el-input> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
|
||||||
|
<div class="btns"> |
||||||
|
<el-button @click="save(0)">保存</el-button> |
||||||
|
<el-button type="primary" |
||||||
|
@click="save(1)">发布</el-button> |
||||||
|
<el-button @click="$router.back()">取消</el-button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import Util from "@/libs/util"; |
||||||
|
import Upload from '@/components/upload'; |
||||||
|
import Oss from '@/components/upload/upload.js' |
||||||
|
export default { |
||||||
|
props: ['id'], |
||||||
|
data () { |
||||||
|
return { |
||||||
|
originForm: {}, |
||||||
|
form: { |
||||||
|
correspondingLinkId: '', |
||||||
|
coverUrl: '', |
||||||
|
details: '1', |
||||||
|
description: '', |
||||||
|
jumpLink: '', |
||||||
|
link: '1', |
||||||
|
productName: '', |
||||||
|
selectLinkId: '2', |
||||||
|
type: 1, |
||||||
|
}, |
||||||
|
linkContents: [ |
||||||
|
{ |
||||||
|
id: '2', |
||||||
|
name: '活动' |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: '1', |
||||||
|
name: '商品' |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: '3', |
||||||
|
name: '供应商' |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: '4', |
||||||
|
name: '店铺' |
||||||
|
}, |
||||||
|
], |
||||||
|
linkDetails: [], |
||||||
|
submiting: false, |
||||||
|
updateTime: 0, |
||||||
|
}; |
||||||
|
}, |
||||||
|
watch: { |
||||||
|
id: { |
||||||
|
handler () { |
||||||
|
if (this.id) { |
||||||
|
this.getData() |
||||||
|
} else { |
||||||
|
this.pics = [] |
||||||
|
this.form = JSON.parse(JSON.stringify(this.originForm)) |
||||||
|
this.getDetails() |
||||||
|
} |
||||||
|
}, |
||||||
|
} |
||||||
|
}, |
||||||
|
components: { |
||||||
|
Upload |
||||||
|
}, |
||||||
|
mounted () { |
||||||
|
this.originForm = JSON.parse(JSON.stringify(this.form)) |
||||||
|
this.id ? this.getData() : this.getDetails() |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
getData () { |
||||||
|
this.$post(`${this.api.findExplosive}?id=${this.id}`).then(({ data }) => { |
||||||
|
// 封面图片回显 |
||||||
|
if (data.coverUrl) { |
||||||
|
const urls = data.coverUrl.split(',') |
||||||
|
this.pics = urls.map(e => { |
||||||
|
return { |
||||||
|
name: e, |
||||||
|
url: e |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
this.form = data |
||||||
|
this.getDetails() |
||||||
|
}).catch(err => { }) |
||||||
|
}, |
||||||
|
// 链接详情(要查询4个模块的列表) |
||||||
|
async getDetails (id) { |
||||||
|
if (id) this.form.correspondingLinkId = '' |
||||||
|
const { selectLinkId } = this.form |
||||||
|
// 活动列表 |
||||||
|
if (selectLinkId === '2') { |
||||||
|
const { data } = await this.$post(this.api.postLoginActivity, { |
||||||
|
pageNum: 1, |
||||||
|
pageSize: 1000, |
||||||
|
listType: 0, |
||||||
|
}) |
||||||
|
data.records.forEach(e => { |
||||||
|
e.name = e.competitionName |
||||||
|
e.id = +e.id |
||||||
|
}) |
||||||
|
this.linkDetails = data.records |
||||||
|
} else if (selectLinkId === '3') { // 供应商 |
||||||
|
const { data } = await this.$post(this.api.selectEnterpriseCertificationList, { |
||||||
|
pageNum: 1, |
||||||
|
pageSize: 1000, |
||||||
|
platformSource: 6, |
||||||
|
}) |
||||||
|
data.records.forEach(e => { |
||||||
|
e.name = e.companyName |
||||||
|
e.id = +e.id |
||||||
|
}) |
||||||
|
this.linkDetails = data.records |
||||||
|
} else { |
||||||
|
this.linkDetails = [] |
||||||
|
} |
||||||
|
}, |
||||||
|
// 清除链接详情 |
||||||
|
clearDetails () { |
||||||
|
this.form.correspondingLinkId = '' |
||||||
|
this.linkDetails = [] |
||||||
|
}, |
||||||
|
|
||||||
|
handleExceed (files, fileList) { |
||||||
|
Util.warningMsg(`当前限制选择 1 个文件,如需更换,请删除上一个文件再重新选择!`); |
||||||
|
}, |
||||||
|
beforeRemove (file, fileList) { |
||||||
|
return this.$confirm(`确定移除 ${file.name}?`); |
||||||
|
}, |
||||||
|
handleRemove () { |
||||||
|
Oss.del(this.form.coverUrl) |
||||||
|
this.form.coverUrl = '' |
||||||
|
}, |
||||||
|
uploadError (err, file, fileList) { |
||||||
|
this.$message({ |
||||||
|
message: "上传出错,请重试!", |
||||||
|
type: "error", |
||||||
|
center: true |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 封面自定义上传 |
||||||
|
async handleRequest ({ file }) { |
||||||
|
this.form.coverUrl && Oss.del(this.form.coverUrl) |
||||||
|
Oss.upload(file).then(res => { |
||||||
|
this.form.coverUrl = res.url |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 提交 |
||||||
|
save (status) { |
||||||
|
if (this.submiting) return false |
||||||
|
const { form } = this |
||||||
|
if (!form.productName) return Util.warningMsg('请填写产品名称'); |
||||||
|
// 发布需要校验 |
||||||
|
if (status) { |
||||||
|
if (!form.coverUrl) return Util.warningMsg('请上传图片'); |
||||||
|
} |
||||||
|
form.publishStatus = status |
||||||
|
this.submiting = true |
||||||
|
if (this.id) { |
||||||
|
this.$post(this.api.updateExplosive, form).then(res => { |
||||||
|
this.submiting = false |
||||||
|
Util.successMsg("修改成功"); |
||||||
|
this.$emit('closeDia') |
||||||
|
}).catch(err => { |
||||||
|
this.submiting = false |
||||||
|
}); |
||||||
|
} else { |
||||||
|
this.$post(this.api.saveExplosive, form).then(res => { |
||||||
|
this.submiting = false |
||||||
|
Util.successMsg("创建成功"); |
||||||
|
this.$emit('closeDia') |
||||||
|
}).catch(err => { |
||||||
|
this.submiting = false |
||||||
|
}); |
||||||
|
} |
||||||
|
}, |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped lang="scss"> |
||||||
|
$upload-width: 220px; |
||||||
|
$upload-height: 140px; |
||||||
|
$upload-lg-height: 150px; |
||||||
|
/deep/ .avatar-uploader { |
||||||
|
.el-upload { |
||||||
|
position: relative; |
||||||
|
width: $upload-width; |
||||||
|
height: $upload-height; |
||||||
|
border: 1px dashed #d9d9d9; |
||||||
|
border-radius: 6px; |
||||||
|
cursor: pointer; |
||||||
|
overflow: hidden; |
||||||
|
|
||||||
|
&:hover { |
||||||
|
border-color: #cb221c; |
||||||
|
} |
||||||
|
|
||||||
|
.uploader-default { |
||||||
|
display: flex; |
||||||
|
height: $upload-height; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: center; |
||||||
|
text-align: center; |
||||||
|
background: rgba(0, 0, 0, 0.04); |
||||||
|
|
||||||
|
i { |
||||||
|
font-size: 20px; |
||||||
|
font-weight: bold; |
||||||
|
color: #8c939d; |
||||||
|
} |
||||||
|
|
||||||
|
p { |
||||||
|
margin-top: 10px; |
||||||
|
font-size: 14px; |
||||||
|
color: rgba(0, 0, 0, 0.65); |
||||||
|
line-height: 1; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
&.avatar-uploader-lg { |
||||||
|
.el-upload { |
||||||
|
width: 100%; |
||||||
|
max-width: 960px; |
||||||
|
height: $upload-lg-height; |
||||||
|
|
||||||
|
.uploader-default { |
||||||
|
height: $upload-lg-height; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.avatar { |
||||||
|
display: block; |
||||||
|
width: $upload-width; |
||||||
|
height: $upload-height; |
||||||
|
} |
||||||
|
|
||||||
|
.avatar-lg { |
||||||
|
display: block; |
||||||
|
width: 100%; |
||||||
|
height: $upload-lg-height; |
||||||
|
} |
||||||
|
|
||||||
|
.el-upload__tip { |
||||||
|
margin-top: 0; |
||||||
|
|
||||||
|
p { |
||||||
|
font-size: 14px; |
||||||
|
color: rgba(0, 0, 0, 0.45); |
||||||
|
line-height: 1; |
||||||
|
|
||||||
|
&:first-child { |
||||||
|
margin-bottom: 5px; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
/deep/.req { |
||||||
|
.el-form-item__label { |
||||||
|
&:before { |
||||||
|
content: '*'; |
||||||
|
margin-right: 5px; |
||||||
|
font-size: 18px; |
||||||
|
vertical-align: middle; |
||||||
|
color: #f00; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,165 @@ |
|||||||
|
<template> |
||||||
|
<div class="page"> |
||||||
|
<div class="text-right m-b-20"> |
||||||
|
<el-button type="primary" |
||||||
|
@click="toAdd">新增 |
||||||
|
</el-button> |
||||||
|
</div> |
||||||
|
<el-table :data="list" |
||||||
|
class="table" |
||||||
|
ref="table" |
||||||
|
stripe |
||||||
|
header-align="center" |
||||||
|
row-key="id"> |
||||||
|
<el-table-column type="index" |
||||||
|
width="60" |
||||||
|
label="序号" |
||||||
|
align="center"></el-table-column> |
||||||
|
<el-table-column label="图片" |
||||||
|
min-width="120" |
||||||
|
align="center"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<img v-if="scope.row.coverUrl" |
||||||
|
class="pic" |
||||||
|
:src="scope.row.coverUrl" |
||||||
|
alt=""> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column prop="productName" |
||||||
|
label="标题" |
||||||
|
min-width="130" |
||||||
|
align="center"></el-table-column> |
||||||
|
<el-table-column label="链接" |
||||||
|
align="center"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
无 |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="操作" |
||||||
|
width="200" |
||||||
|
align="center"> |
||||||
|
<template slot-scope="scope"> |
||||||
|
<el-button type="text" |
||||||
|
@click.stop="toEdit(scope.row)">编辑</el-button> |
||||||
|
<el-button type="text" |
||||||
|
@click.stop="del(scope.row)">删除</el-button> |
||||||
|
<el-switch class="m-l-10" |
||||||
|
v-model="scope.row.enabledState" |
||||||
|
:active-value="0" |
||||||
|
:inactive-value="1" |
||||||
|
@change="switchOff($event, scope.row)"> |
||||||
|
</el-switch> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
|
||||||
|
<el-drawer :title="id ? '编辑' : '新增'" |
||||||
|
size="900px" |
||||||
|
:visible.sync="diaVisible" |
||||||
|
@closed="diaClose"> |
||||||
|
<Add :id.sync="id" |
||||||
|
@closeDia="closeDia" /> |
||||||
|
</el-drawer> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import Add from '../add' |
||||||
|
import Util from "@/libs/util"; |
||||||
|
import Setting from '@/setting' |
||||||
|
export default { |
||||||
|
data () { |
||||||
|
return { |
||||||
|
list: [], |
||||||
|
sorting: false, |
||||||
|
id: '', |
||||||
|
diaVisible: false, |
||||||
|
}; |
||||||
|
}, |
||||||
|
components: { |
||||||
|
Add, |
||||||
|
}, |
||||||
|
mounted () { |
||||||
|
this.$store.commit('user/setCrumbs', [ |
||||||
|
{ |
||||||
|
name: '小程序管理', |
||||||
|
path: '/miniProgramMg/index' |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: '首页设置', |
||||||
|
path: '/miniProgramMg/banner' |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: '设置banner', |
||||||
|
}, |
||||||
|
]) |
||||||
|
this.getData(); |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
// 获取分类 |
||||||
|
async getData () { |
||||||
|
const { data } = await this.$post(this.api.explosiveList, { |
||||||
|
pageNum: 1, |
||||||
|
pageSize: 10000, |
||||||
|
type: 1 |
||||||
|
}) |
||||||
|
data.records.forEach(e => { |
||||||
|
if (e.coverUrl.includes(',')) e.coverUrl = e.coverUrl.split(',')[0] |
||||||
|
}) |
||||||
|
this.list = data.records |
||||||
|
}, |
||||||
|
// 禁用启用 |
||||||
|
switchOff (val, row) { |
||||||
|
this.$post(this.api.updateColumn, row).then(res => { }).catch((res) => { }) |
||||||
|
}, |
||||||
|
del (row) { |
||||||
|
this.$confirm("此删除操作不可逆,是否确认删除选中项?", "提示", { |
||||||
|
type: "warning" |
||||||
|
}).then(() => { |
||||||
|
this.$post(this.api.delExplosive, [row.id]).then(res => { |
||||||
|
Util.successMsg("删除成功"); |
||||||
|
this.getData(); |
||||||
|
}).catch(res => { }); |
||||||
|
}).catch(() => { }); |
||||||
|
}, |
||||||
|
// 新增 |
||||||
|
toAdd () { |
||||||
|
this.id = '' |
||||||
|
this.diaVisible = true |
||||||
|
}, |
||||||
|
// 编辑 |
||||||
|
toEdit (row) { |
||||||
|
this.id = row.id |
||||||
|
this.diaVisible = true |
||||||
|
}, |
||||||
|
// 弹框关闭回调 |
||||||
|
diaClose () { |
||||||
|
this.id = '' |
||||||
|
}, |
||||||
|
// 关闭弹框 |
||||||
|
closeDia () { |
||||||
|
this.diaVisible = false |
||||||
|
this.getData() |
||||||
|
}, |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.pic { |
||||||
|
width: 200px; |
||||||
|
height: 120px; |
||||||
|
margin: 10px 0; |
||||||
|
object-fit: cover; |
||||||
|
} |
||||||
|
.sort { |
||||||
|
margin: 0 10px; |
||||||
|
font-size: 20px; |
||||||
|
color: #ccc; |
||||||
|
cursor: not-allowed; |
||||||
|
&.sorting { |
||||||
|
color: #333; |
||||||
|
cursor: pointer; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
Loading…
Reference in new issue