<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>