<template>
  <div class="special">
    <template v-if="speciaIsShowAdd">
      <div class="head-title">
        专题
        <el-button @click="speciaIsShowAdd=false,clearInfo()" style="float:right;margin-top: -5px;" size="small"
          type="primary">
          新增
        </el-button>
      </div>
      <div class="content">
        <div>
          <el-select size="small" class="w150" v-model="msg.TopicTypeId">
            <el-option label="全部专题" :value="0"></el-option>
            <el-option v-for="item in TypeList" :key="item.Id" :label="item.TopicName" :value="item.Id">
            </el-option>
          </el-select>
          <div class="searchInput">
            <el-input style="display:inline-block;width:225px;height:30px" placeholder="请输入搜索内容" v-model="msg.Title"
              size="small" clearable @keyup.enter.native="msg.pageIndex=1,getList()">
            </el-input>
            <span class="el-icon-search" style="color:#979dad;font-size:14px;position:relative;top:1px"
              @click="msg.pageIndex=1,getList()"> </span>
          </div>
        </div>
        <el-table :data="dataList" v-loading="loading" border style="width: 100%;margin:20px 0">
          <el-table-column prop="Id" label="ID" width="100">
          </el-table-column>
          <el-table-column prop="TopicName" label="分类" width="120">
          </el-table-column>
          <el-table-column prop="Title" label="专题">
          </el-table-column>
          <el-table-column prop="FlexTypeStr" label="布局方式" width="120">
          </el-table-column>
          <el-table-column prop="IsChoiceStr" label="是否精选" width="100">
          </el-table-column>
          <el-table-column prop="SortNum" label="排序" width="200">
          </el-table-column>
          <el-table-column label="操作" width="150">
            <template slot-scope="scope">
              <img @click="EditRole(scope.row)" src="../../assets/img/userman/edit.png" alt="">
              <img @click="RemmoveRole(scope.row)" src="../../assets/img/userman/del.png" alt="">
            </template>
          </el-table-column>
        </el-table>
        <el-pagination style="text-align:right" background @current-change="handleCurrentChange"
          :page-size="msg.pageSize" layout="prev, pager, next" :total="total">
        </el-pagination>
      </div>
    </template>
    <template v-else>
      <div class="head-title">
        <span @click="speciaIsShowAdd=true" style="color:rgb(64, 158, 255);cursor:pointer;">专题</span><span
          style="margin:0 9px;color:#C0C4CC">/</span><span>专题编辑</span>
      </div>
      <div class="content">
        <el-tabs v-model="activeName">
          <el-tab-pane label="基础设置" name="first">
            <div class="contentTwo">
              <el-form label-width="10rem" :model="addMsg" :rules="rules" ref="addMsg">
                <el-form-item label="标题" prop="Title">
                  <el-input type="text" maxlength="100" size="small" v-model="addMsg.Title"></el-input>
                </el-form-item>
                <el-form-item label="专题列表布局方式">
                  <el-radio-group v-model="addMsg.FlexType">
                    <el-radio :label="1">小图模式</el-radio>
                    <el-radio :label="2">大图模式</el-radio>
                    <el-radio :label="3">多图模式</el-radio>
                  </el-radio-group>
                  <div class="flexTypeList">
                    小图模式建议封面图片大小：268×202；大图模式建议封面图片大小：702×350；多图模式建议封面图片大小：268×202，最多上传3张图片
                  </div>
                </el-form-item>
                <el-form-item label="封面图" prop="CoverImg">
                  <el-tooltip class="item" effect="dark" content="建议尺寸: 268 * 202" placement="top">
                    <el-button size="mini" @click="choicImg=true,commonIndex=1">选择图片</el-button>
                  </el-tooltip>
                  <div class="customize-share-title">
                    <div class="zk_pic_box" style="width:80px;height:80px;" flex="main:center cross:center"
                      :style="{backgroundImage:'url(' + getIconLink(addMsg.CoverImg) + ')'}">
                      <i v-if="addMsg.CoverImg==''" class="el-icon-picture-outline"></i>
                    </div>
                  </div>
                </el-form-item>
                <el-form-item>
                  <span slot="label">摘要</span>
                  <el-tooltip slot="label" class="item" effect="dark" content="专题内容的简介，用于列表上显示" placement="top">
                    <i class="el-icon-info"></i>
                  </el-tooltip>
                  <el-input type="textarea" size="small" v-model="addMsg.Abstract" :rows="2"></el-input>
                </el-form-item>
                <el-form-item label="自定义分享标题">
                  <el-input type="text" size="small" v-model="addMsg.CustomTitle"></el-input>
                </el-form-item>
                <el-form-item label="自定义分享图片">
                  <el-tooltip class="item" effect="dark" content="建议尺寸:420 * 336" placement="top">
                    <el-button size="mini" @click="choicImg=true,commonIndex=2">选择图片</el-button>
                  </el-tooltip>
                  <div class="customize-share-title">
                    <div class="zk_pic_box" style="width:80px;height:80px;" flex="main:center cross:center"
                      :style="{backgroundImage:'url(' + getIconLink(addMsg.CustomImg) + ')'}">
                      <i v-if="addMsg.CustomImg==''" class="el-icon-picture-outline"></i>
                    </div>
                  </div>
                </el-form-item>
                <el-form-item label="是否精选">
                  <el-switch v-model="addMsg.IsChoice" :active-value="1" :inactive-value="0"></el-switch>
                </el-form-item>
                <el-form-item label="分类" prop="TopicTypeId">
                  <el-select v-model="addMsg.TopicTypeId" size="small">
                    <el-option :key="0" label="请选择" :value="0">
                    </el-option>
                    <el-option v-for="item in TypeList" :key="item.Id" :label="item.TopicName" :value="item.Id">
                    </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item>
                  <span slot="label">虚拟阅读量</span>
                  <el-tooltip slot="label" class="item" effect="dark" content="手机端显示的阅读量=实际阅读量+虚拟阅读量" placement="top">
                    <i class="el-icon-info"></i>
                  </el-tooltip>
                  <el-input type="text" size="small" v-model="addMsg.ReadNum"
                    @keyup.native="checkInteger(addMsg,'ReadNum')" maxlength="8"></el-input>
                </el-form-item>
                <el-form-item label="排序">
                  <el-input type="text" size="small" v-model="addMsg.SortNum"
                    @keyup.native="checkInteger(addMsg,'SortNum')" maxlength="2"></el-input>
                </el-form-item>
              </el-form>
            </div>
          </el-tab-pane>
          <el-tab-pane label="详情设置" name="second">
            <div style="position: relative; margin-bottom: 10px; height: 621px;">
              <div class="all-components">
                <div class="component-list">
                  <div class="component-item" @click="setPlugin('rubik')">
                    <img :src="domainManager().ImageUrl+'/Static/rubik.png'" alt="">
                    <div class="component-name">图片广告</div>
                  </div>
                  <div class="component-item" @click="setPlugin('video')">
                    <img :src="domainManager().ImageUrl+'/Static/video.png'" alt="">
                    <div class="component-name">视频</div>
                  </div>
                  <div class="component-item" @click="setPlugin('image-text')">
                    <img :src="domainManager().ImageUrl+'/Static/image-text.png'" alt="">
                    <div class="component-name">图文详情</div>
                  </div>
                </div>
              </div>
              <div class="special_Content">
                <div class="mobile-framework">
                  <div class="mobile-framework-header"></div>
                  <div class="mobile-framework-body">
                    <!-- 为空的样式开始 -->
                    <div v-if="pluginData.length==0" flex="main:center cross:center"
                      style="height: 200px; color: rgb(173, 177, 184); text-align: center;">
                      <div>
                        <i class="el-icon-folder-opened" style="font-size: 32px; margin-bottom: 10px;"></i>
                        <div>空空如也</div>
                        <div>请从左侧组件库添加组件</div>
                      </div>
                    </div>
                    <!-- 为空的样式结束 -->
                    <div v-for="(item,index) in pluginData" :key="index" @click="getItem(item)">
                      <rubik v-if="item.Id=='rubik'" :rubData="item" @getSord="getSord" @comDelPlugin="comDelPlugin"
                        :index="index" :dataLeng="pluginData.length"></rubik>
                      <myvideo v-if="item.Id=='video'" :videoData="item" @getSord="getSord" @comDelPlugin="comDelPlugin"
                        :index="index" :dataLeng="dataList.length"></myvideo>
                      <imageText v-if="item.Id=='image-text'" :imageData="item" @getSord="getSord"
                        @comDelPlugin="comDelPlugin" :index="index" :dataLeng="dataList.length"></imageText>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </el-tab-pane>
        </el-tabs>
      </div>
      <el-button size="small" style="margin-top:20px;padding:9px 25px;" type="primary" @click="submitform('addMsg')">保存
      </el-button>
    </template>
    <!-- 选择图片文件 -->
    <el-dialog title="选择文件" :visible.sync="choicImg" width="1240px">
      <ChooseImg @SelectId="SelectId"></ChooseImg>
    </el-dialog>
  </div>
</template>
<script>
  import ChooseImg from "@/components/global/ChooseImg.vue";
  import rubik from "../sallCenter/plugin/rubik.vue"
  import myvideo from "../sallCenter/plugin/video.vue"
  import imageText from "../sallCenter/plugin/image-text.vue"
  export default {
    components: {
      ChooseImg,
      rubik,
      myvideo,
      imageText
    },
    data() {
      let validataTopic = (rule, value, callback) => {
        if (this.addMsg.TopicTypeId == 0) {
          return callback(new Error('请选择专题分类'));
        } else {
          callback();
        }
      }
      return {
        loading: false,
        choicImg:false,
        commonIndex:-1,
        activeName: 'first',
        pluginData: [],
        TypeList: [], //分类列表
        dataList: [],
        msg: {
          pageIndex: 1,
          pageSize: 15,
          TopicTypeId: 0,
          Title: "",
        },
        pwdMsg: {
          password: ''
        },
        total: 0,
        speciaIsShowAdd: true,
        addMsg: {
          Id: 0,
          Title: '', //标题
          FlexType: 1, //专题列表布局方式
          CoverImg: '', //封面图
          Abstract: '', //摘要
          CustomTitle: '', //自定义分享标题
          CustomImg: '', //自定义分享图片
          IsChoice: 0, //是否精选
          TopicTypeId: 0, //分类
          ReadNum: 0, //虚拟阅读量 
          SortNum: 0, //排序
          ComponentDataList: [], //插件
        },
        rules: {
          Title: [{
            required: true,
            message: "标题不能为空",
            trigger: "blur"
          }],
          CoverImg: [{
            required: true,
            message: "封面图片不能为空",
            trigger: "blur"
          }],
          TopicTypeId:[{
            validator: validataTopic,
            trigger: "change",
            required: true
          }]

        },
      };
    },
    created() {

    },
    methods: {
      handleCurrentChange(val) {
        this.msg.pageIndex = val;
        this.getList();
      },
      //选择图片
      SelectId(msg) {
        if(this.commonIndex==1){
           this.addMsg.CoverImg = msg.url;
        }else if(this.commonIndex==2){
           this.addMsg.CustomImg=msg.url;
        }
        this.choicImg = false;
      },
      getList() {
        this.apipost("/api/MContent/GetTopicPageList", this.msg, res => {
          if (res.data.resultCode == 1) {
            this.dataList = res.data.data.pageData;
            this.total = res.data.data.count;
          } else {
            this.Info(res.data.message);
          }
        })
      },
      submitform(addMsg) {
        //提交创建、修改表单
        this.$refs[addMsg].validate(valid => {
          if (valid) {
            this.saveMsg();
          } else {
            return false;
          }
        });
      },
      //保存
      saveMsg() {
        this.addMsg.ComponentDataList = this.pluginData;
        this.apipost("/api/MContent/SetTopic", this.addMsg, res => {
          if (res.data.resultCode == 1) {
            this.getList();
            this.clearInfo();
            this.speciaIsShowAdd = true;
            this.Success(res.data.message);
          } else {
            this.Info(res.data.message);
          }
        })
      },
      //清空
      clearInfo() {
        this.addMsg.Id = 0;
        this.addMsg.Title = '';
        this.addMsg.FlexType = 1;
        this.addMsg.CoverImg = '';
        this.addMsg.Abstract = '';
        this.addMsg.CustomTitle = '';
        this.addMsg.CustomImg = '';
        this.addMsg.IsChoice = 0;
        this.addMsg.TopicTypeId = 0;
        this.addMsg.ReadNum = 0;
        this.addMsg.SortNum = 0;
        this.activeName='first';
        this.addMsg.ComponentDataList = [];
        this.pluginData=[];
      },
      //修改
      EditRole(item) {
        this.speciaIsShowAdd=false;
        this.activeName='first';
        this.apipost("/api/MContent/GetTopic", {
          Id: item.Id
        }, res => {
          if (res.data.resultCode == 1) {
            var jsonData = res.data.data;
            this.addMsg.Id = jsonData.Id;
            this.addMsg.Title = jsonData.Title;
            this.addMsg.FlexType = jsonData.FlexType;
            this.addMsg.CoverImg = jsonData.CoverImg;
            this.addMsg.Abstract = jsonData.Abstract;
            this.addMsg.CustomTitle = jsonData.CustomTitle;
            this.addMsg.CustomImg = jsonData.CustomImg;
            this.addMsg.IsChoice = jsonData.IsChoice;
            this.addMsg.TopicTypeId = jsonData.TopicTypeId;
            this.addMsg.ReadNum = jsonData.ReadNum;
            this.addMsg.SortNum = jsonData.SortNum;
            if(jsonData.ComponentDataList){
                this.addMsg.ComponentDataList = jsonData.ComponentDataList;
                this.pluginData = jsonData.ComponentDataList;
            }
          } else {
            this.Info(res.data.message);
          }
        })
      },
      //删除
      RemmoveRole(item) {
        var that = this;
        that.Confirm("是否要删除?", function () {
          that.apipost("/api/MContent/RemoveTopic", {
            Id: item.Id
          }, res => {
            if (res.data.resultCode == 1) {
              that.getList();
            } else {
              that.Info(res.data.message);
            }
          })
        })
      },
      //点击设置组件
      setPlugin(Id) {
        switch (Id.toString()) {
          //图片广告
          case 'rubik':
            let rubObj = {
              Id: 'rubik',
              isCked: false,
              data: {
                style: -1, //样式-选取几张图
                space: 0, //图片件间隔
                height: 0, //选中的第几张图 对应的style_list里的height
                w: 1, //选中的第几张图 对应的style_list里的w
                h: 1, //选中的第几张图 对应的style_list里的h
                list: [], //选中的第几张图的小区域对应的数据
                hotspot: [] //热区划分
              }
            }
            this.pluginData.push(rubObj);
            break;
            //视频
          case 'video':
            let videoObj = {
              Id: 'video',
              isCked: false,
              data: {
                pic_url: '', //图片地址
                url: '' //视频地址
              }
            }
            this.pluginData.push(videoObj);
            break;
            //图文详情
          case 'image-text':
            let tuwenObj = {
              Id: 'image-text',
              isCked: false,
              data: {
                content: '',
              }
            }
            this.pluginData.push(tuwenObj);
            break;
        }
      },
      //给子组件调用 重新排序上移下移
      getSord(index, IsUp) {
        var currentItem = this.pluginData[index];
        if (IsUp == 0) {
          if (index > 0) {
            var upItem = this.pluginData[index - 1];
            this.$set(this.pluginData, index - 1, currentItem);
            this.$set(this.pluginData, index, upItem);
          }
        } else {
          if (index != this.pluginData.length - 1) {
            var downItem = this.pluginData[index + 1];
            this.$set(this.pluginData, index + 1, currentItem);
            this.$set(this.pluginData, index, downItem);
          }
        }
      },
      //删除组件事件
      comDelPlugin(index) {
        this.pluginData.splice(index, 1);
      },
      //点击选中
      getItem(item) {
        this.pluginData.forEach(x => {
          x.isCked = false;
        })
        item.isCked = true;
      },
      getTypeList() {
        this.apipost("/api/MContent/GetTopicTypeList", {}, res => {
          if (res.data.resultCode == 1) {
            this.TypeList = res.data.data;
          } else {
            this.Info(res.data.message);
          }
        })
      }
    },
    mounted() {
      this.getTypeList();
      this.getList();
    }
  };

</script>
<style>
  .special .content .searchInput {
    border: 1px solid #DCDFE6;
    border-radius: 4px;
  }

  .special .content .searchInput .el-input__inner {
    border: none;
    outline: none;
    height: 30px;
    line-height: 30px;
  }

  .special .content .searchInput {
    line-height: normal;
    display: inline-table;
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    width: 250px;
    margin-right: 20px;
  }

  .special .content {
    background: #fff;
    margin-top: 10px;
    padding: 20px;
    box-sizing: border-box;
  }

  .special .contentTwo {
    min-width: 1000px;
    padding: 20px;
    padding-right: 50%;
  }

  .special .el-alert__content {
    display: flex;
    align-items: center;
  }

  .special .el-alert {
    padding: 0 0 5px 5px;
  }

  .special .el-alert__title {
    margin-top: 5px;
  }

  .special .flexTypeList {
    color: rgb(99, 108, 114);
    font-size: 12px;
    margin-top: -0.5rem;
  }

  .all-components {
    width: 422px;
    background: #fff;
    max-height: 625px;
    overflow-y: auto;
  }

  .all-components .component-list {
    display: flex;
    flex-wrap: wrap;
    border: 0 solid #eeeeee;
    border-width: 1px 0 0 1px;
  }

  .all-components .component-list .component-item {
    width: 140px;
    height: 100px;
    border: 0 solid #eeeeee;
    border-width: 0 1px 1px 0;
    text-align: center;
    padding: 15px 0 0;
    cursor: pointer;
  }

  .all-components .component-list .component-item img {
    width: 40px;
    height: 40px;
  }

  .special_Content {
    width: 430px;
    overflow: hidden auto;
    margin-top: 16px;
    height: 605px;
  }

  .special_Content .mobile-framework {
    width: 420px;
    padding: 22px 22px 22px 23px;
    background-color: #FFFFFF;
    border-radius: 16px;
  }

  .special_Content .mobile-framework-header {
    height: 60px;
    line-height: 60px;
    background: #333;
    color: #fff;
    text-align: center;
    background: url(../../assets/img/storeDesign/topic-head.png) no-repeat;
    border: 0 solid #eeeeee;
    border-width: 2px 2px 0 2px;
    width: 375px;
  }

  .special_Content .mobile-framework-body {
    width: 375px;
    min-height: 500px;
    border: 1px solid #e2e2e2;
    background: #f5f7f9;
  }

  .diy-component-options .el-button {
    height: 25px;
    line-height: 25px;
    width: 25px;
    padding: 0;
    text-align: center;
    border: none;
    border-radius: 0;
    position: absolute;
    margin-left: 0;
  }

  .diy-component-preview {
    cursor: pointer;
    position: relative;
    zoom: 0.5;
    -moz-transform: scale(0.5);
    -moz-transform-origin: top left;
    font-size: 28px;
  }

  .diy-component-edit {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 465px;
    right: 0;
    background: #fff;
    padding: 20px;
    overflow: auto;
    min-width: 650px;
    padding-right: 20%;
  }

  .diy-component-options {
    position: relative;
  }

  .active .diy-component-preview {
    border: 2px dashed #409EFF;
    left: -2px;
    right: -2px;
    width: calc(100% + 4px);
  }

</style>
