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

318 lines
8.9 KiB
Vue

<template>
<div style="padding: 8px">
<el-card shadow="never" style="border-radius: 6px">
<el-form :inline="true" :model="queryForm" class="demo-form-inline">
<el-form-item label="模版名称">
<el-input v-model="queryForm.templateName" placeholder="模版名称"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="queryModels">查询</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card shadow="never" style="border-radius: 6px;margin-top: 12px">
<el-button type="primary" @click="addModels">新增</el-button>
<el-table
v-loading="load"
:data="tableData"
style="width: 100%"
>
<el-table-column
v-if="false"
prop="templateId">
</el-table-column>
<el-table-column
prop="templateName"
label="名称">
</el-table-column>
<el-table-column
label="缩略图">
<template slot-scope="scope">
<div class="miniLayout">
<component :is="JSON.parse(scope.row.templateContent).center"
:tree="JSON.parse(scope.row.templateContent).centerChildren"></component>
</div>
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="120">
<template slot-scope="scope">
<el-button @click="queryModelInfo(scope.row)" type="text" size="small" style="padding: 0 4px">修改</el-button>
<el-popconfirm
title="确定删除吗?"
@confirm="delModelOk(scope.row.templateId)">
<el-button slot="reference" type="text" size="small" style="padding: 0 4px">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<div style="margin-top: 12px">
<el-pagination
style="display: flex;justify-content: flex-end;"
@size-change="getList"
@current-change="getList"
:current-page.sync="queryForm.pageNum"
:page-sizes="[10,20,50,100]"
:page-size="queryForm.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
</el-card>
<el-dialog
:title="dialogTitle1"
:visible.sync="addModelDialog"
:append-to-body="true"
width="30%">
<el-form ref="form" :model="form" label-width="80px">
<el-form-item label="模型名称">
<el-input v-model="form.templateName"></el-input>
</el-form-item>
<el-form-item label="模型内容">
<div class="layout" ref="layout" :style="`background-image:url(${form.templateContent.pageCfg.bg})`">
<component :is="form.templateContent.center" :tree="form.templateContent.centerChildren"></component>
</div>
</el-form-item>
<el-form-item label="背景" label-width="80px">
<el-upload
class="avatar-uploader"
action="dev-api/basic/hwTemplateAchieve/saveImage"
:headers="{
authorization:'Bearer ' + getToken()
}"
:show-file-list="false"
:on-success="getImg">
<img v-if="form.templateContent.pageCfg.bg" :src="form.templateContent.pageCfg.bg" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="addModelOk" v-if="dialogTitle1 === '新增模型'">新 增</el-button>
<el-button type="primary" @click="changeModel" v-if="dialogTitle1 === '修改模型'">确 定</el-button>
<el-button @click="addModelDialog = false">取 消</el-button>
</span>
</el-dialog>
<el-dialog
title="提示"
:visible.sync="dialogVisible"
:append-to-body="true"
width="30%">
<el-button type="primary" @click="leftRight">左右</el-button>
<el-button type="primary" @click="upDown">上下</el-button>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import LeftRight from '@/components/Configure/setLayout/leftRightStr'
import UpDown from '@/components/Configure/setLayout/upDownStr'
import {addModel, delModel, queryModel, updateModel} from "@/api/configure/configuration/layoutModel";
import {getToken} from "@/utils/auth";
export default {
name: 'Layout',
components: {
LeftRight: () => import('@/components/Configure/setLayout/leftRightStr'),
UpDown: () => import('@/components/Configure/setLayout/upDownStr')
},
data() {
return {
load: false,
dialogTitle1: '',
addModelDialog: false,
tree: {},
dialogVisible: false,
queryForm: {
pageNum: 1,
pageSize: 10,
},
pageCfg: {},
total: 0,
form: {
templateName: '',
templateContent: {
center: null,
centerChildren: {},
pageCfg: {
bg: ''
}
}
},
tableData: []
}
},
mounted() {
this.queryModels()
},
methods: {
getToken() {
return getToken()
},
async getImg(file) {
this.$set(this.form.templateContent.pageCfg, 'bg', file.data.url)
},
getList() {
console.log(this.queryForm)
this.load = true
queryModel(this.queryForm).then(e => {
console.log(e)
this.tableData = e.rows
this.load = false
this.total = e.total
})
},
queryModels() {
this.queryForm = {
pageNum: 1,
pageSize: 10,
}
this.getList()
},
addModels() {
this.dialogTitle1 = '新增模型'
this.form = {
templateName: '',
templateContent: {
center: null,
centerChildren: {},
pageCfg: {
bg: ''
}
}
}
this.addModelDialog = true
this.$nextTick(() => {
this.$refs.layout.addEventListener('contextmenu', (event) => {
event.preventDefault()
if (!this.form.templateContent.center) {
this.dialogVisible = true
}
})
})
},
leftRight() {
this.$set(this.form.templateContent, 'center', 'LeftRight')
this.$set(this.form.templateContent.centerChildren, 'separate', 50)
this.dialogVisible = false
},
upDown() {
this.$set(this.form.templateContent, 'center', 'UpDown')
this.$set(this.form.templateContent.centerChildren, 'separate', 50)
this.dialogVisible = false
},
addModelOk() {
addModel({
templateName: this.form.templateName,
templateContent: JSON.stringify(this.form.templateContent)
}).then(e => {
this.$message({
message: '添加成功',
type: 'success'
});
this.getList()
this.addModelDialog = false
})
},
queryModelInfo(e) {
this.dialogTitle1 = '修改模型'
this.form = {
templateId: e.templateId,
templateName: e.templateName,
templateContent: JSON.parse(e.templateContent)
}
this.addModelDialog = true
this.$nextTick(() => {
this.$refs.layout.addEventListener('contextmenu', (event) => {
event.preventDefault()
if (!this.form.templateContent.center) {
this.dialogVisible = true
}
})
})
},
changeModel() {
updateModel({
templateId: this.form.templateId,
templateName: this.form.templateName,
templateContent: JSON.stringify(this.form.templateContent)
}).then(e => {
this.$message({
message: '修改成功',
type: 'success'
});
this.getList()
this.addModelDialog = false
})
},
delModelOk(e) {
delModel({
templateId: e
}).then(e => {
this.$message({
message: '删除成功',
type: 'success'
});
this.getList()
})
},
}
}
</script>
<style lang="less" scoped>
.layout {
height: 500px;
border: 1px solid #0003;
background-repeat: no-repeat;
background-size: 100% 100%;
}
.miniLayout {
width: 30px;
height: 30px;
border: 1px solid #0003;
pointer-events: none
}
/deep/ .avatar-uploader {
.el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.el-upload:hover {
border-color: #409EFF;
}
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
line-height: 178px;
text-align: center;
}
.avatar {
width: 178px;
height: 178px;
display: block;
}
</style>