|
@@ -0,0 +1,628 @@
|
|
|
+<template>
|
|
|
+ <el-container class="_fc-designer" :style="'height:'+floorContainerHeight+'px'">
|
|
|
+ <el-main style="height: 100%;">
|
|
|
+ <el-container style="height: 100%;">
|
|
|
+ <el-aside class="_fc-l" width="266px">
|
|
|
+<!-- <template v-for="(item, index) in menuList">-->
|
|
|
+<!-- <div class="_fc-l-group" :key="index">-->
|
|
|
+<!-- <h4 class="_fc-l-title">{{ item.title }}</h4>-->
|
|
|
+<!-- <draggable :group="{name:'default', pull:'clone',put:false}" :sort="false"-->
|
|
|
+<!-- :list="item.list">-->
|
|
|
+<!-- <div class="_fc-l-item" v-for="(data, index) in item.list"-->
|
|
|
+<!-- :key="index">-->
|
|
|
+<!-- <div class="_fc-l-icon">-->
|
|
|
+<!-- <i :class="[data.icon ? (data.icon.substring(0,3) === 'el-' ? data.icon : 'fc-icon '+data.icon) : 'fc-icon icon-input']"></i>-->
|
|
|
+<!-- </div>-->
|
|
|
+<!-- <span class="_fc-l-name">{{ data.label }}</span>-->
|
|
|
+<!-- </div>-->
|
|
|
+<!-- </draggable>-->
|
|
|
+<!-- </div>-->
|
|
|
+<!-- </template>-->
|
|
|
+ <draggable v-model="templateArray" :options="tplOptions" :clone="clonedata">
|
|
|
+ <div v-for="item in templateArray" :class="'item-' + item.tpl_id" class="tpl-item">
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24/item.tpl_id" v-for="size in item.tpl_id" :key="size" class="grid-content" :class="'bg-purple-'+size"></el-col>
|
|
|
+ </el-row>
|
|
|
+ <span class="text-tpl">{{ templates[item.tpl_id].title }}</span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+ </draggable>
|
|
|
+
|
|
|
+ </el-aside>
|
|
|
+ <el-container class="_fc-m">
|
|
|
+<!-- <el-header class="_fc-m-tools" height="45">-->
|
|
|
+<!-- <slot name="handle"></slot>-->
|
|
|
+<!-- <el-button type="primary" icon="fc-icon icon-preview" plain round size="mini"-->
|
|
|
+<!-- @click="previewFc">预 览-->
|
|
|
+<!-- </el-button>-->
|
|
|
+<!-- <el-popconfirm-->
|
|
|
+<!-- title="清空后将不能恢复,确定要清空吗?"-->
|
|
|
+<!-- style="margin-left: 10px;"-->
|
|
|
+<!-- confirm-button-text="清空"-->
|
|
|
+<!-- cancel-button-text="取消"-->
|
|
|
+<!-- @confirm="clearDragRule"-->
|
|
|
+<!-- >-->
|
|
|
+<!-- <el-button slot="reference" type="danger" icon="fc-icon icon-delete" plain round size="mini">清 空-->
|
|
|
+<!-- </el-button>-->
|
|
|
+<!-- </el-popconfirm>-->
|
|
|
+
|
|
|
+<!-- </el-header>-->
|
|
|
+ <el-main style="background: #F5F5F5;padding: 20px;">
|
|
|
+ <div class="_fc-m-drag">
|
|
|
+ <nest-draggable :tasks="abc" @add="addItem" @delete="deleteData">
|
|
|
+
|
|
|
+ </nest-draggable>
|
|
|
+
|
|
|
+<!-- <draggable v-model="abc" :options="floorOptions" class="tpl-list" @add="addItem">-->
|
|
|
+<!-- <div v-for="(item, index) in abc" :class="'item-' + item.tpl_id" class="floor-item">-->
|
|
|
+<!-- <nest-component :tpl-id="item.tpl_id"-->
|
|
|
+<!-- :data="JSON.parse(JSON.stringify(item))"-->
|
|
|
+<!-- ></nest-component>-->
|
|
|
+<!--<!– <component–>-->
|
|
|
+<!--<!– :is="templates[item.tpl_id]"–>-->
|
|
|
+<!--<!– :data="JSON.parse(JSON.stringify(item))"–>-->
|
|
|
+<!--<!– is-edit–>-->
|
|
|
+<!--<!– @edit-block="(...props) => { handleEditBlock(index, ...props) }"–>-->
|
|
|
+<!--<!– @edit-title="(...props) => { handleEditTitle(index, ...props) }"–>-->
|
|
|
+<!--<!– @edit-tags="(...props) => { handleEditTags(index, ...props) }"–>-->
|
|
|
+<!--<!– ></component>–>-->
|
|
|
+<!-- </div>-->
|
|
|
+<!-- </draggable>-->
|
|
|
+ </div>
|
|
|
+ </el-main>
|
|
|
+ </el-container>
|
|
|
+ <el-aside class="_fc-r" width="320px" >
|
|
|
+ <el-container style="height: 100%;">
|
|
|
+<!-- <el-header height="40px" class="_fc-r-tabs">-->
|
|
|
+<!-- <div class="_fc-r-tab" :class="{active: activeTab==='props'}" v-if="!!activeRule || (config && config.showFormConfig === false)"-->
|
|
|
+<!-- @click="activeTab='props'">组件配置-->
|
|
|
+<!-- </div>-->
|
|
|
+<!-- <div class="_fc-r-tab" v-if="!config || config.showFormConfig !== false" :class="{active: activeTab==='form' && !!activeRule}"-->
|
|
|
+<!-- @click="activeTab='form'">表单配置-->
|
|
|
+<!-- </div>-->
|
|
|
+<!-- </el-header>-->
|
|
|
+<!-- <ElMain v-show="activeTab==='form'" v-if="!config || config.showFormConfig !== false">-->
|
|
|
+<!-- <component :is="FormCreate" :rule="form.rule" :option="form.option"-->
|
|
|
+<!-- :value.sync="form.value.form"></component>-->
|
|
|
+<!-- </ElMain>-->
|
|
|
+<!-- <ElMain v-show="activeTab==='props'" style="padding: 0 20px;"-->
|
|
|
+<!-- :key="activeRule ? activeRule._id: ''">-->
|
|
|
+<!-- <div>-->
|
|
|
+<!-- <ElDivider v-if="showBaseRule">基础配置</ElDivider>-->
|
|
|
+<!-- <component :is="FormCreate" v-show="showBaseRule" v-model="baseForm.api" :rule="baseForm.rule"-->
|
|
|
+<!-- :option="baseForm.options"-->
|
|
|
+<!-- @change="baseChange"></component>-->
|
|
|
+<!-- <ElDivider>属性配置</ElDivider>-->
|
|
|
+<!-- <component :is="FormCreate" v-model="propsForm.api" :rule="propsForm.rule" :option="propsForm.options"-->
|
|
|
+<!-- @change="propChange" @removeField="propRemoveField"></component>-->
|
|
|
+<!-- <ElDivider v-if="showBaseRule">验证规则</ElDivider>-->
|
|
|
+<!-- <component :is="FormCreate" v-show="showBaseRule" v-model="validateForm.api" :rule="validateForm.rule"-->
|
|
|
+<!-- :option="validateForm.options"-->
|
|
|
+<!-- @update:value="validateChange"></component>-->
|
|
|
+<!-- </div>-->
|
|
|
+<!-- </ElMain>-->
|
|
|
+ </el-container>
|
|
|
+ </el-aside>
|
|
|
+<!-- <ElDialog :visible.sync="preview.state" width="800px" append-to-body>-->
|
|
|
+<!-- <ViewForm :rule="preview.rule" :option="preview.option" v-if="preview.state"></ViewForm>-->
|
|
|
+<!-- </ElDialog>-->
|
|
|
+ </el-container>
|
|
|
+ </el-main>
|
|
|
+ </el-container>
|
|
|
+
|
|
|
+
|
|
|
+</template>
|
|
|
+
|
|
|
+<!--
|
|
|
+看板样式,内容设计器
|
|
|
+-->
|
|
|
+
|
|
|
+
|
|
|
+<script>
|
|
|
+ import Vue from 'vue'
|
|
|
+ import templates, {templateArray} from './templates'
|
|
|
+ import VueLazyload from 'vue-lazyload'
|
|
|
+ import draggable from 'vuedraggable'
|
|
|
+ import TextDisplay from "./templates/common/text-display";
|
|
|
+ import NestComponent from "./nest-component";
|
|
|
+ import NestDraggable from "./nest-draggable";
|
|
|
+ import { nanoid } from 'nanoid'
|
|
|
+ Vue.use(VueLazyload)
|
|
|
+ export default {
|
|
|
+ name: "infoboard-designer",
|
|
|
+ components:{NestDraggable, NestComponent, TextDisplay, draggable},
|
|
|
+ provide() {
|
|
|
+ return {
|
|
|
+ fcx: {
|
|
|
+ active: null
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+
|
|
|
+ return {
|
|
|
+ templates,
|
|
|
+ templateArray:[...templateArray],
|
|
|
+ props:{
|
|
|
+ type:'danger',
|
|
|
+ size:'small',
|
|
|
+ text:'sfdf'
|
|
|
+ },
|
|
|
+ abc:[],
|
|
|
+ tplOptions: {
|
|
|
+ group: { name: 'tplGroup', pull: 'clone', put: false },
|
|
|
+ sort: false
|
|
|
+ },
|
|
|
+ tplOptions2: {
|
|
|
+ group: { name: 'child', pull: 'clone', put: false },
|
|
|
+ sort: false
|
|
|
+ },
|
|
|
+ floorOptions: {
|
|
|
+ animation: 150,
|
|
|
+ group: { name: 'tplGroup', put: true },
|
|
|
+ sort: true,
|
|
|
+ handle: '.handle-move'
|
|
|
+ },
|
|
|
+
|
|
|
+ boardInfo: {
|
|
|
+ header: {
|
|
|
+ tpl_id: 4, //模板id
|
|
|
+ tpl_box_style: {},//标题模块样式
|
|
|
+ visible: true, //是否显示模块
|
|
|
+ moduleStyle: {
|
|
|
+ blockHeight: 60,
|
|
|
+ background:'#0081ff'
|
|
|
+ },
|
|
|
+ columnList: [
|
|
|
+ {
|
|
|
+ label: '标题',
|
|
|
+ content: '内容',
|
|
|
+ labelColor: '#333333',
|
|
|
+ labelBgColor: '#ffffff',
|
|
|
+ labelTextSize: 22,
|
|
|
+ labelAlign: 'right',
|
|
|
+ labelWidth: 200,
|
|
|
+ contentColor: '#333333',
|
|
|
+
|
|
|
+ contentTextSize: 22,
|
|
|
+ blockWidth: 8,
|
|
|
+ boardItemHisKeyVal: ''
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '标题',
|
|
|
+ content: '内容',
|
|
|
+ contentColor: '#fff',
|
|
|
+ contentTextSize: 22,
|
|
|
+ contentAlign:'center',
|
|
|
+ blockWidth: 10
|
|
|
+ }
|
|
|
+ ,
|
|
|
+ {
|
|
|
+ label: '标题',
|
|
|
+ content: '内容',
|
|
|
+ labelColor: '#333333',
|
|
|
+ labelBgColor: '#ffffff',
|
|
|
+ labelTextSize: 22,
|
|
|
+ labelAlign: 'right',
|
|
|
+ labelWidth: 200,
|
|
|
+ contentColor: '#fff',
|
|
|
+
|
|
|
+ contentTextSize: 22,
|
|
|
+ blockWidth: 6,
|
|
|
+ boardItemHisKeyVal: ''
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ body: {
|
|
|
+ tpl_id: 5, //模板id
|
|
|
+ },
|
|
|
+ footer: {}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ // 楼层模板盒子样式
|
|
|
+ tplBoxStyle() {
|
|
|
+ const { sidebar } = this.$store.getters
|
|
|
+ let left = (sidebar.opened ? 210 : 60)
|
|
|
+ left = this.tplBoxShow ? left : left - 300
|
|
|
+ return {
|
|
|
+ left: left + 'px'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ floorContainerHeight() {
|
|
|
+ return this.mainAreaHeight
|
|
|
+ },
|
|
|
+ partInfo() {
|
|
|
+ return this.$store.getters.organization
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ /** 保存发布 */
|
|
|
+ handleSaveFloor() {
|
|
|
+ this.titleData.content_config = JSON.stringify(this.floorList)
|
|
|
+ API_BoardTitle.update(this.titleData.id, this.titleData).then(() => this.$message.success('保存发布成功!'))
|
|
|
+ },
|
|
|
+
|
|
|
+ clonedata(origin){
|
|
|
+ const data = JSON.parse(JSON.stringify(origin))
|
|
|
+ if(data.unique===''||data.unique===undefined){
|
|
|
+ data.unique=nanoid(10)
|
|
|
+ }
|
|
|
+ console.log('clone',data)
|
|
|
+ return data
|
|
|
+ },
|
|
|
+ handleBoardItemSet(settingData) {
|
|
|
+ console.log(settingData)
|
|
|
+ const {index, target, columnIndex} = this.editOptions
|
|
|
+ const blockData = {...settingData}
|
|
|
+ target.columnList[columnIndex] = blockData
|
|
|
+ this.$set(this.floorList, index, target)
|
|
|
+ },
|
|
|
+ handleBoardModuleSet(settingData) {
|
|
|
+ const {index, blockdata} = this.editOptions
|
|
|
+ const moduleSetting = {...settingData}
|
|
|
+ blockdata.moduleStyle = moduleSetting
|
|
|
+ this.$set(this.floorList, index, blockdata)
|
|
|
+ },
|
|
|
+ addItem(){
|
|
|
+ console.log('abc',this.abc)
|
|
|
+ console.log('templatearray',this.templateArray)
|
|
|
+ },
|
|
|
+ /** 编辑楼层区块 */
|
|
|
+ handleEditBlock(index, target, columnIndex) {
|
|
|
+
|
|
|
+ const blockData = target.columnList[columnIndex]
|
|
|
+
|
|
|
+ this.settingShow = true
|
|
|
+ this.boardItemConfig = {...blockData}
|
|
|
+ // const block = target.columnList[columnIndex].blockList[blockIndex]
|
|
|
+ // const type = block.block_type
|
|
|
+ this.editOptions = {index, target, columnIndex}
|
|
|
+ // const blockData = JSON.parse(JSON.stringify(block))
|
|
|
+ // if (type === 'IMAGE') {
|
|
|
+ // this.defaultImageData = blockData.block_value ? [{
|
|
|
+ // url: blockData.block_value,
|
|
|
+ // opt: blockData.block_opt
|
|
|
+ // }] : null
|
|
|
+ // this.dialogImageShow = true
|
|
|
+ // } else if (type === 'GOODS') {
|
|
|
+ // // 填充默认数据
|
|
|
+ // // this.defaultGoodsData = blockData.block_value ? [blockData.block_value.goods_id] : []
|
|
|
+ // // this.dialogGoodsShow = true
|
|
|
+ // } else if (type === 'BRAND') {
|
|
|
+ // console.log('品牌模块')
|
|
|
+ // }
|
|
|
+ },
|
|
|
+
|
|
|
+ handleModule(index, blockdata) {
|
|
|
+ this.boardModuleConfig = {...blockdata.moduleStyle}
|
|
|
+ this.editOptions = {index, blockdata}
|
|
|
+ this.moduleSettingShow = true
|
|
|
+ console.log(index, blockdata)
|
|
|
+ },
|
|
|
+
|
|
|
+ /** 编辑楼层标题 */
|
|
|
+ handleEditTitle(index, target, columnIndex) {
|
|
|
+ this.editOptions = {index, target, columnIndex}
|
|
|
+ const column = target.columnList[columnIndex]
|
|
|
+ const columnData = JSON.parse(JSON.stringify(column))
|
|
|
+ this.defaultTitleData = {
|
|
|
+ text: column.title,
|
|
|
+ start_color: column.titleColors[0],
|
|
|
+ end_color: column.titleColors[1]
|
|
|
+ }
|
|
|
+ this.dialogTitleShow = true
|
|
|
+ },
|
|
|
+ /** 编辑楼层标签 */
|
|
|
+ handleEditTags(index, target, columnIndex) {
|
|
|
+ this.editOptions = {index, target, columnIndex}
|
|
|
+ const column = target.columnList[columnIndex]
|
|
|
+ const columnData = JSON.parse(JSON.stringify(column))
|
|
|
+ this.defaultTagsData = columnData.tagList
|
|
|
+ this.dialogTagsShow = true
|
|
|
+ },
|
|
|
+ getBoardTitle() {
|
|
|
+ API_BoardTitle.get(this.titleId, {}).then(
|
|
|
+ res => {
|
|
|
+ console.log('res', res)
|
|
|
+ this.titleData = {...res}
|
|
|
+ if (res.content_config !== null && res.content_config !== '') {
|
|
|
+ this.floorList = JSON.parse(res.content_config)
|
|
|
+ this.floorList.forEach(item => {
|
|
|
+ item.columnList.forEach(col => {
|
|
|
+ if (col.boardItemHisKeyVal !== '') {
|
|
|
+ console.log('col', this.boardItems)
|
|
|
+ const boardItem = this.boardItems.filter(p => p.his_keyval === col.boardItemHisKeyVal)[0]
|
|
|
+ console.log('boardItem', boardItem)
|
|
|
+ if (boardItem !== null && boardItem !== undefined) {
|
|
|
+ col.content = boardItem.area_content
|
|
|
+ col.label = boardItem.area_label
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ this.floorList = []
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ).catch(error => {
|
|
|
+ this.$message.error(error.message)
|
|
|
+ })
|
|
|
+ },
|
|
|
+ deleteData(unique){
|
|
|
+ this.deleteArrayData(this.abc,unique)
|
|
|
+
|
|
|
+ console.log('data delete ')
|
|
|
+ },
|
|
|
+
|
|
|
+ deleteArrayData(data, id) {
|
|
|
+ let node = null
|
|
|
+ if (data.length > 0) {
|
|
|
+ for (var i = 0; i < data.length; i++) {
|
|
|
+ if (data[i].unique === id) {
|
|
|
+ node = data[i]
|
|
|
+ data.splice(i,1)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (data[i].children && data[i].children.length > 0) {
|
|
|
+ this.deleteArrayData(data[i].children, id)
|
|
|
+ // if (subresult !== null) {
|
|
|
+ // node = subresult
|
|
|
+ // break
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // delete node
|
|
|
+ },
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped type="text/scss">
|
|
|
+ ._fc-designer {
|
|
|
+ height: 100%;
|
|
|
+ min-height: 500px;
|
|
|
+ overflow: hidden;
|
|
|
+ cursor: default;
|
|
|
+ position: relative;
|
|
|
+ }
|
|
|
+ ._fc-m-drag,.tpl-list{
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+ .el-aside{
|
|
|
+ margin-bottom: 0;
|
|
|
+ }
|
|
|
+ .container {
|
|
|
+ min-width: 1366px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .floor-container {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-around;
|
|
|
+ background-color: #E5E7EA;
|
|
|
+ padding: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .draggable-box {
|
|
|
+ position: relative;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ flex-direction: column;
|
|
|
+ width: 100%;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ .header {
|
|
|
+ width: 1210px;
|
|
|
+ overflow: hidden;
|
|
|
+ }
|
|
|
+
|
|
|
+ @media (max-width: 1300px) {
|
|
|
+ .header {
|
|
|
+ width: 900px;
|
|
|
+ }
|
|
|
+ .container {
|
|
|
+ min-width: 1000px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .draggable-box .floor {
|
|
|
+ width: 800px + 50px;
|
|
|
+ flex-shrink: 0;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .tpl-list {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ overflow: hidden;
|
|
|
+ width: 100%;
|
|
|
+ background-color: #fff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .tpl-item {
|
|
|
+ display: flex;
|
|
|
+ width: 100%;
|
|
|
+ flex-direction: column;
|
|
|
+ justify-content: center;
|
|
|
+ box-sizing: border-box;
|
|
|
+ border-bottom: 2px solid #D9E0E7;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ /*&.item-1 .img-tpl {*/
|
|
|
+ /* background: url("../../../assets/pc-tpl-01.png") no-repeat;*/
|
|
|
+ /* background-size: 100%;*/
|
|
|
+ /*}*/
|
|
|
+ /*&.item-2 .img-tpl {*/
|
|
|
+ /* background: url("../../../assets/pc-tpl-02.png") no-repeat;*/
|
|
|
+ /* background-size: 100%;*/
|
|
|
+ /*}*/
|
|
|
+ /*&.item-3 .img-tpl {*/
|
|
|
+ /* background: url("../../../assets/pc-tpl-03.png") no-repeat;*/
|
|
|
+ /* background-size: 100%;*/
|
|
|
+ /*}*/
|
|
|
+ /*&.item-4 .img-tpl {*/
|
|
|
+ /* background: url("../../../assets/pc-tpl-04.png") no-repeat;*/
|
|
|
+ /* background-size: 100%;*/
|
|
|
+ /*}*/
|
|
|
+ }
|
|
|
+
|
|
|
+ .img-tpl {
|
|
|
+ width: 100%;
|
|
|
+ min-height: 150px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .text-tpl {
|
|
|
+ text-align: center;
|
|
|
+ margin: 5px 0;
|
|
|
+ color: #ACB0B9;
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .floor-body {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ /*overflow-y: hidden;*/
|
|
|
+ }
|
|
|
+
|
|
|
+ .floor-list {
|
|
|
+ background-color: #E5E7EA;
|
|
|
+ /*min-width: 75%;*/
|
|
|
+ min-height: 500px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .floor-item {
|
|
|
+ position: relative;
|
|
|
+ box-sizing: border-box;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ .floor-item .panel-handle {
|
|
|
+ display: none;
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ right: -25px;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ .floor-item .panel-handle .icon-handle {
|
|
|
+ display: block;
|
|
|
+ cursor: pointer;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .floor-item .panel-handle .svg-icon {
|
|
|
+ width: 25px;
|
|
|
+ height: 25px;
|
|
|
+ background-color: #fff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .floor-item:hover .panel-handle {
|
|
|
+ display: block;
|
|
|
+ }
|
|
|
+
|
|
|
+ .floor-item:first-child .floor-layout {
|
|
|
+ margin-top: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .tpl-box {
|
|
|
+ position: fixed;
|
|
|
+ top: 20%;
|
|
|
+ left: 180px;
|
|
|
+ z-index: 99;
|
|
|
+ width: 300px;
|
|
|
+ margin-top: (-500px - 32px + 84px) / 2;
|
|
|
+ border-top: 10px solid #fff;
|
|
|
+ box-shadow: 4px 5px 20px 0 rgba(0, 0, 0, .6);
|
|
|
+ transition: all ease .3s;
|
|
|
+ }
|
|
|
+
|
|
|
+ .tpl-box .tpl-list {
|
|
|
+ height: 300px;
|
|
|
+ overflow-y: scroll;
|
|
|
+ }
|
|
|
+
|
|
|
+ .tpl-box .save-btn {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .tpl-box .tpl-btns {
|
|
|
+ position: absolute;
|
|
|
+ top: 50%;
|
|
|
+ right: -25px;
|
|
|
+ margin-top: -35px;
|
|
|
+ width: 25px;
|
|
|
+ height: 70px;
|
|
|
+ background-color: #fff;
|
|
|
+ text-align: center;
|
|
|
+ padding: 5px 0;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ .tpl-box .tpl-btns .btn-item {
|
|
|
+ cursor: pointer;
|
|
|
+ padding: 5px 0;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ .tpl-box .tpl-btns .btn-item + .btn-item {
|
|
|
+ margin-top: 8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .tpl-box .tpl-btns .btn-item:hover {
|
|
|
+ background-color: #46A0FC;
|
|
|
+ color: #fff
|
|
|
+ }
|
|
|
+
|
|
|
+ .bg-blue {
|
|
|
+ background-color: #0081ff;
|
|
|
+ color: #ffffff;
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/ .el-header {
|
|
|
+ line-height: 60px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .content_title {
|
|
|
+ font-size: 26px
|
|
|
+ }
|
|
|
+
|
|
|
+ .grid-content {
|
|
|
+ border-radius: 4px;
|
|
|
+ min-height: 36px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-col {
|
|
|
+ border-radius: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .bg-purple-1 {
|
|
|
+ background: #99a9bf;
|
|
|
+ }
|
|
|
+
|
|
|
+ .bg-purple-2 {
|
|
|
+ background: #d3dce6;
|
|
|
+ }
|
|
|
+
|
|
|
+ .bg-purple-3 {
|
|
|
+ background: #e5e9f2;
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/ .el-scrollbar__wrap {
|
|
|
+ overflow-x: hidden;
|
|
|
+ overflow-y: visible;
|
|
|
+ padding-bottom: 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ /deep/ .el-scrollbar {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+
|
|
|
+</style>
|