<template>
	<div class="canvas">
		<div class="topBox">
			<!--<a class="btn-black">返回店铺</a>-->
			<ul>
				<li v-for="(item, index) in deviceList" :key="index" @click="toggleDevice(item.id)"
					:class="{ 'on': terminal == item.id }">
					<i class="iconfont" :class="'icon-' + item.name"></i>
				</li>
			</ul>
			<el-button class="btn-save" type="primary" @click="canvasSave">保存画布</el-button>
		</div>
		<div class="bottomWarp">
			<div class="leftBox">
				<left-bar></left-bar>
			</div>
			<div class="mainContentWarp">
				<div class="mainContent" :class="'view-' + terminal">
					<shop-layout :terminal="terminal" :typeId="typeId" :shopId="shopId" @showRightBox="showRightBox"></shop-layout>
				</div>
			</div>
			<div class="RightBox">
				<tool-panel v-if="comChoose"></tool-panel>
				<div v-else class="noChoose">
					<div> <i class="iconfont icon-kong"></i>
						<p>没有选定的组件<br>请拖拽左侧组件栏添加或者选择一个组件</p>
					</div>
				</div>
			</div>
		</div>
	</div>
</template>

<script>
import leftBar from '../components/leftBar/panel.vue'
import toolPanel from '../components/toolBar/toolPanel'
import ShopLayout from '../components/canvasEditPage'
import { mapGetters, mapMutations } from 'vuex'
import api from '@@/components/canvasShow/config/api'
import { sendReqMixin } from '@@/components/canvasShow/config/mixin'
import Cookies from 'js-cookie'
export default {
	name: 'canvasContainer',
	mixins: [sendReqMixin],
	components: {
		ShopLayout,
		leftBar,
		toolPanel
	},
	data() {
		return {
			comChoose: false,
			deviceList: [{
				id: 1,
				name: 'xiaochengxu'

			}, {
				id: 2,
				name: 'h5'
			}, {
				id: 4,
				name: 'pc'
			}, {
				id: 3,
				name: 'app'
			}],
			canvasId: '',
			shopId: 0
		}
	},
	computed: {
		...mapGetters([
			'terminal',
			'componentsData',
			'typeId'
		])
	},
	mounted() {
		this.shopId = parseInt(Cookies.get('shopID'))
		this.canvasGet()
	},
	methods: {
		...mapMutations({
			setTerminal: 'SET_TERMINAL',
			setActiveComponent: 'SET_ACTIVECOMPONENT',
			setComponentsData: 'SET_COMPONENTSDATA'
		}),
		toggleDevice(id) {
			this.setActiveComponent({})
			this.setTerminal(id)
			this.canvasGet()
		},
		// 保存画布
		canvasSave() {
			// 删除非必要的字符
			let cloneComponentsData = JSON.parse(JSON.stringify(this.componentsData))
			for (let i = 0; i < cloneComponentsData.length; i++) {
				delete cloneComponentsData[i].iconClass
				if (cloneComponentsData[i].type === 'productList') {
					cloneComponentsData[i].componentContent.productData.imgTextData = [] // 清除展示数据
				}
			}
			var paramsData = {
				terminal: this.terminal,
				json: JSON.stringify(cloneComponentsData)
			}
			if (this.canvasId) {
				paramsData.canvasId = this.canvasId
			}
			if (this.shopId && this.typeId == 3) {
				paramsData.shopId = this.shopId
			}
			paramsData.type = this.typeId
			console.log(paramsData)
			let params = {
				url: api.saveCanvas,
				method: 'POST',
				data: paramsData
			}
			this.sendReq(params, (res) => {
				if (res.message) {
					this.$message.error(res.message)
				} else {
					this.$message({
						message: '保存成功!',
						type: 'success'
					})
				}
			})
		},
		// 读取画布
		canvasGet() {
			var _this = this
			this.setComponentsData([])
			var apiUrl = api.getCanvas + '?terminal=' + this.terminal + '&type=' + this.typeId
			if (this.shopId && this.typeId == 3) {
				apiUrl += '&shopId=' + this.shopId
			}
			let params = {
				url: apiUrl,
				method: 'GET'
			}
			this.sendReq(params, (res) => {
				if (typeof (uni) !== 'undefined') {
					uni.setStorage({ key: 'sendNum', data: 0 });
				} else {
					localStorage.setItem('sendNum', 0)
				}
				if (JSON.stringify(res.data) !== '{}') {
					_this.canvasId = res.data.canvasId
					var componentsData = JSON.parse(res.data.json)
					for (let i = 0; i < componentsData.length; i++) {
						componentsData[i].componentContent.hasDatas = true
					}
					_this.setComponentsData(componentsData)
				} else {
					_this.canvasId = ''
				}
			}, (err) => {

			})
		},
		// 右侧工具栏显隐
		showRightBox(flag) {
			this.comChoose = flag
		}
	}
}
</script>

<style lang="scss" scoped>
.canvas {
	position: relative;
	display: flex;
	flex-direction: column;
	height: 100%;

	.topBox {
		height: 52px;
		line-height: 52px;
		border-bottom: 1px solid #F0F3F4;
		position: relative;
		display: flex;
		justify-content: center;

		.btn-black {
			position: absolute;
			left: 20px;
			top: 0;
		}

		li {
			width: 56px;
			height: 52px;
			cursor: pointer;
			text-align: center;
			display: inline-block;

			.iconfont {
				font-size: 24px;
			}

			&:hover,
			&.on {
				background-color: $mainColor;
				color: #fff;
			}
		}

		.btn-save {
			position: absolute;
			right: 20px;
			top: 5px;
		}
	}

	.bottomWarp {
		flex: 1;
		display: flex;
		height: 0;
	}

	.leftBox {
		height: 100%;
		overflow-y: auto;
		overflow-x: hidden;
	}

	.mainContentWarp {
		background-color: #F0F3F4;
		overflow: auto;
		height: 100%;
		flex: 1;

		.mainContent {
			margin: 0 auto;
			max-width: 100%;
			width: 750px;

			&.view-4 {
				width: 1300px;
			}
		}
	}

	.RightBox {
		height: 100%;
		overflow: auto;

		.noChoose {
			width: 320px;
			display: flex;
			height: 100%;
			-webkit-box-align: center;
			align-items: center;
			-webkit-box-pack: center;
			justify-content: center;
			color: #999;
			text-align: center;
			font-size: 16px;
			line-height: 1.8;

			.iconfont {
				font-size: 100px;
				color: $mainColor;
			}
		}
	}
}</style>