251 lines
6.1 KiB
Vue

<template>
<div class="wrapper">
<Card class="category">
<div :class="{active:i == selectedIndex}" class="category-item" v-for="(typeItem,i) in pageTypes" :key="typeItem.type">
<div @click="clickType(typeItem.type,i)">{{typeItem.title}}</div>
</div>
</Card>
<Card class="content">
<Button type="primary" @click="createTemp">添加页面</Button>
<div class="list">
<Spin size="large" fix v-if="loading"></Spin>
<div class="item item-title">
<div>页面名称</div>
<div class="item-config">
<div>状态</div>
<div>操作</div>
</div>
</div>
<div class="item" v-for="(item, index) in list" :key="index">
<div>{{ item.name || "暂无模板昵称" }}</div>
<div class="item-config">
<i-switch v-model="item.pageShow" @on-change="releaseTemplate(item.id)">
<span slot="open"></span>
<span slot="close"></span>
</i-switch>
<Button type="info" placement="right" @click="Template(item)" size="small">编辑</Button>
<Button type="success" placement="right" @click="decorate(item)" size="small">装修</Button>
<Poptip confirm title="删除此模板?" @on-ok="delTemplate(item.id)" @on-cancel="cancel">
<Button type="error" size="small">删除</Button>
</Poptip>
</div>
</div>
<div class="no-more" v-if="list.length ==0">暂无更多模板</div>
</div>
</Card>
<Modal
v-model="showModal"
title="模板设置"
draggable
width="600"
:z-index="100"
:loading="loading"
mask-closable="false"
@on-ok="newTemplate"
@on-cancel="showModal = false"
>
<Form ref="form" :model="formData" :rules="rules" :label-width="80">
<FormItem label="模板名称" prop="name">
<Input v-model="formData.name" placeholder="请输入模板名称" />
</FormItem>
</Form>
</Modal>
</div>
</template>
<script>
import * as API_floor from "@/api/other.js";
export default {
name: "floorList",
data() {
return {
showModal: false, // 添加modal的显示
selectedIndex: 0, // 首页还是专题选择的index
formData: { // 新建模态框的数据
status: false, // 模板是否开启
name: "", // 模板名称
},
columns: [ // 列表展示的column
{
title: "页面名称",
key: "name",
},
{
title: "状态",
},
{
title: "操作",
key: "action",
},
],
loading: false, // 加载状态
pageTypes: [ // 那种类别的模板
{
type: "INDEX",
title: "首页",
}
// {
// type: "SPECIAL",
// title: "专题",
// },
],
list: [], // 模板列表
};
},
mounted() {
this.getTemplateList();
},
methods: {
newTemplate() {
// 添加,编辑模板
this.$refs.form.validate((valid) => {
if (valid) {
const data = this.formData;
data.status ? (data.pageShow = "OPEN") : (data.pageShow = "CLOSE");
delete data.status;
(data.pageType = "INDEX"), (data.pageClientType = "PC");
if (data.id) {
API_floor.updateHome(data.id, data).then((res) => {
this.$Message.success("编辑模板成功");
this.showModal = false;
this.getTemplateList();
});
} else {
API_floor.setHomeSetup(data).then((res) => {
this.$Message.success("新建模板成功");
this.showModal = false;
this.getTemplateList();
});
}
} else {
this.loading = false;
}
});
},
createTemp() {
// 新建表单
this.$refs.form.resetFields();
this.showModal = true;
},
Template(item) {
// 编辑表单
item.status = item.pageShow
this.formData = item;
this.showModal = true;
},
decorate(val) {
// 装修
this.$router.push({ name: "renovation", query: { id: val.id,pageShow:val.pageShow } });
},
getTemplateList() {
//模板列表
let params = {
pageNumber: 1,
pageSize: 999,
pageType: "INDEX",
pageClientType: "PC",
};
API_floor.getHomeList(params).then((res) => {
if (res.success) {
this.list = res.result.records;
this.list.forEach(e => {
if (e.pageShow === 'OPEN') {
e.pageShow = true
} else {
e.pageShow = false
}
})
}
});
},
releaseTemplate(id) {
//发布模板
API_floor.releasePageHome(id).then((res) => {
if (res.success) {
this.$Message.success("发布模板成功");
this.getTemplateList();
}
});
},
// 删除模板
delTemplate(id) {
API_floor.removePageHome(id).then((res) => {
if (res.success) {
this.$Message.success("删除模板成功");
this.getTemplateList();
}
});
},
}
};
</script>
<style lang="scss" scoped>
.category-item {
cursor: pointer;
padding: 4px;
}
.active {
background: #ededed;
}
.item-title {
background: #d7e7f5!important;
height: 54px;
}
.no-more {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.wrapper {
background: #fff;
padding: 20px;
display: flex;
}
.category {
flex: 2;
}
.content {
flex: 8;
}
* {
margin: 5px;
}
.list {
min-height: 600px;
position: relative;
}
.item:nth-of-type(2) {
margin: 0 5px;
}
.item {
width: 100% !important;
padding: 0 4px;
display: flex;
align-items: center;
justify-content: space-between;
> .item-config {
width: 250px;
display: flex;
justify-content: space-between;
align-items: center;
div:nth-child(2){
margin-right: 80px;
}
}
}
.item:nth-of-type(2n+1) {
background: #f5f7fa;
}
</style>