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.

319 lines
8.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div>
<div class="cardTitle">首页轮播图设置</div>
<a-divider></a-divider>
<a-button class="add-btn" style="margin: 10px" @click="newSwiper"
>添加轮播图</a-button
>
<!-- list -->
<a-card
hoverable
style="width:1000px; margin-top: 10px"
v-for="item in cardList"
:key="item.id"
>
<span class="card-close" @click="del(item.id)">×</span>
<a-row>
<a-col :span="9">
<img
:src="$ImgUrl(item.imgList[0].url)"
v-if="item.imgList.length > 0"
class="list-img"
alt=""
/>
<div v-else>暂无图片</div>
</a-col>
<a-col :span="12">
<a-descriptions layout="vertical" :column="1">
<a-descriptions-item label="链接设置">
{{ item.customizeUrl }}
</a-descriptions-item>
<a-descriptions-item label="是否显示在用户端">
{{ item.isShow ? "是" : "否" }}
</a-descriptions-item>
<a-descriptions-item label="显示权重">
{{ item.showWeights }}
</a-descriptions-item>
</a-descriptions>
</a-col>
<a-col :span="3">
<a-button class="add-btn" @click="edit(item)">修改设置</a-button>
</a-col>
</a-row>
</a-card>
<!-- 添加 -->
<a-modal
:title="add.title"
:visible="add.show"
@ok="saveSetting"
@cancel="newSwiperClose"
width="900px"
>
<a-row>
<a-col :span="9">
<div style="color: #00000073; padding-bottom: 10px;">
上传图片尺寸: 750*300
</div>
<commonUpload
:fileList="fileList"
@handleChange="handleChange"
></commonUpload>
</a-col>
<a-col :span="15">
<a-descriptions layout="vertical" :column="1">
<a-descriptions-item label="链接设置">
<a-input-group compact>
<a-select
style="width: 120px"
v-model="form.type"
placeholder="请选择类型"
@change="changeType"
>
<a-select-option :value="1"> 自定义链接 </a-select-option>
<a-select-option :value="2"> 商城 </a-select-option>
<a-select-option :value="3"> 资讯 </a-select-option>
<a-select-option :value="4"> 公告 </a-select-option>
<a-select-option :value="5"> </a-select-option>
</a-select>
<a-input
v-if="form.type === 1"
style="width: 200px; background: #0000000f"
placeholder="请输入链接"
v-model="form.customizeUrl"
></a-input>
<a-button
v-else-if="form.type !== 1 && form.customizeUrl === ''"
style="width: 100px; background: #0000000f"
@click="table.show = true"
>请选择链接
</a-button>
<a-button
style="width: 70%; background: #0000000f; overflow: hidden"
@click="table.show = true"
v-else
>{{ form.customizeUrl }}</a-button
>
</a-input-group>
</a-descriptions-item>
<a-descriptions-item label="是否显示在用户端">
<a-switch
checked-children="开"
un-checked-children="关"
v-model="form.isShow"
></a-switch>
</a-descriptions-item>
<a-descriptions-item label="显示权重">
<a-input
type="number"
v-model.number="form.showWeights"
></a-input>
</a-descriptions-item>
</a-descriptions>
</a-col>
</a-row>
</a-modal>
<chooseTable
:show="table.show"
:type="form.type"
:selected="selected"
@submit="submitURL"
@close="close"
/>
</div>
</template>
<script>
import { form } from "./depend/config";
import {
swiperList,
swiperInsert,
swiperDel,
swiperUpdate,
} from "@/api/operation/swiper";
import chooseTable from "./depend/table.vue";
export default {
components: {
chooseTable,
},
inject: ["reload"],
data() {
return {
table: {
show: false,
},
fileList: [],
cardList: [],
add: {
show: false,
title: "添加轮播图",
},
form,
selected: undefined,
};
},
mounted() {
this.getData();
},
methods: {
async getData() {
let res = await swiperList();
this.cardList = res.data;
},
// 新增
newSwiper() {
this.add = {
show: true,
title: "添加轮播图",
};
},
// 保存
async saveSetting() {
if (this.add.title === "添加轮播图") {
let res = await swiperInsert(this.form);
if (res.code === 200) {
this.$message.success(res.msg);
this.newSwiperClose();
this.getData();
this.reload();
} else {
this.$message.error(res.msg);
}
} else if (this.add.title === "修改轮播图") {
let res = await swiperUpdate(this.form);
if (res.code === 200) {
this.$message.success(res.msg);
this.getData();
this.newSwiperClose();
} else {
this.$message.error(res.msg);
}
}
},
// 编辑
edit(data) {
this.add = {
show: true,
title: "修改轮播图",
};
this.form.id = data.id;
this.form.isShow = data.isShow;
this.form.showWeights = data.showWeights;
this.form.type = data.type;
this.form.customizeUrl = data.customizeUrl;
this.selected = data.associationId;
this.form.associationId = data.associationId;
if (data.imgList.length > 0) {
// 如果已经有图片
this.form.imgUrls.push(data.imgList[0].url);
const file = [];
for (let item of data.imgList) {
let obj = {
name: item.url.split("_")[0] + "." + item.url.split(".")[1],
url: this.$ImgUrl(item.url),
uid: item.url.split("_")[1],
status: "done",
thumbUrl: this.$ImgUrl(item.url),
};
file.push(obj);
}
this.fileList = file;
}
},
newSwiperClose() {
this.add = {
show: false,
title: "添加轮播图",
};
this.fileList = [];
this.form.imgUrls = [];
this.form = {
id: undefined,
type: undefined,
showWeights: 0,
customizeUrl: "",
isShow: false,
associationId: undefined,
imgUrls: [],
};
},
// 选择链接确定
submitURL(data, customizeUrl) {
this.form.customizeUrl = customizeUrl;
this.form.associationId = data[0];
this.close();
},
// 关闭选择
close() {
this.table.show = false;
},
changeType() {
this.form.customizeUrl = "";
},
// 删除轮播图
async del(id) {
this.$confirm({
title: "是否删除",
icon: "delete",
onOk: async () => {
swiperDel({ homepageCarouselId: id }).then((res) => {
if (res.code === 200) {
this.$message.success(res.msg);
this.getData();
} else {
this.$message.error(res.msg);
}
});
},
});
},
// 上传图片
// handleChange(data) {
// console.log(data);
// this.fileList = data;
// // 删除照片
// if (this.fileList.length === 0) {
// this.form.imgUrls = [];
// } else if (data[0].status === "done") {
// this.form.imgUrls.push(data[0].response.data);
// }
// },
handleChange(data) {
this.fileList = data;
this.form.imgUrls = [];
data.forEach(ele => {
if(ele.status == 'done') {
this.form.imgUrls.push(ele.response.data)
}
})
},
},
};
</script>
<style lang="less" scoped>
/deep/.ant-upload.ant-upload-select-picture-card {
width: 90%;
height: 200px;
}
/deep/.ant-upload-list-picture-card .ant-upload-list-item {
width: 90%;
height: 200px;
}
/deep/.ant-upload-list-picture-card-container {
width: 90%;
height: 200px;
}
.list-img {
width: 300px;
height: 200px;
}
.card-close {
position: absolute;
right: 10px;
top: -3px;
cursor: pointer;
font-size: 20px;
}
</style>