<template>
  <div class="container">
    <div class="head">
      <div>卫星介绍</div>
      <el-button type="primary" @click="addItem">添加卫星</el-button>
    </div>
    <div class="app-container calendar-list-container">
      <div class="filter-container">
        <el-form :inline="true" :model="searchForm" class="demo-form-inline">
          <el-form-item label="所有状态">
            <el-select v-model="searchForm.status" clearable>
              <el-option v-for="(item, index) in bannerStatus" :key="index" :label="item" :value="~~index"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="卫星名称">
            <el-input v-model="searchForm.name" placeholder="请输入卫星名称"></el-input>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" plain @click="search">搜索</el-button>
            <el-button type="primary" plain @click="clearFilterData">清除搜索</el-button>
          </el-form-item>
        </el-form>
      </div>
      <el-table :data="list" v-loading.body="listLoading" border fit highlight-current-row style="width: 100%">
        <el-table-column align="center" label="序号" prop="index" width="65"></el-table-column>
        <el-table-column align="center" label="卫星名称" prop="name"></el-table-column>
        <el-table-column align="center" label="缩略图">
          <template slot-scope="scope">
            <img class="cover" :src="scope.row.coverImg"  @click.stop="showPreview(scope.row.coverImg)"/>
          </template>
        </el-table-column>
        <el-table-column align="center" label="分辨率" prop="resolution"></el-table-column>
        <el-table-column align="center" label="排序" prop="rank"></el-table-column>
        <el-table-column align="center" label="状态">
          <template slot-scope="scope">
            {{ getStatus(scope.row.status) }}
          </template>
        </el-table-column>
        <el-table-column align="center" label="操作" width="250">
          <template slot-scope="scope">
            <el-button type="primary" size="mini" @click="edit(scope.row)">编辑</el-button>
            <el-button :type="scope.row.status === 1 ? 'info': 'warning'" size="mini" @click="changeParams(scope.row, 'status')">{{scope.row.status === 1 ? '下架': '上架'}}</el-button>
            <el-button type="danger" size="mini" @click="changeParams(scope.row, 'isDel')">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <!-- 使用图片查看器预览当前缩略图 -->
      <el-image-viewer
        v-show="currentIcon.showPreview"
        :on-close="closePreview"
        :url-list="[currentIcon.url]"
      />
      <div class="page-foot">
        <el-pagination
          @size-change="handleSizeChange"
          @current-change="currentChange"
          :current-page.sync="listQuery.page"
          :page-sizes="[10, 20, 30, 40]"
          :page-size="listQuery.limit"
          layout="total, sizes, prev, pager, next, jumper"
          :total="~~total">
        </el-pagination>
        <!-- <el-pagination
          background
          layout="prev, pager, next"
          :page-size="listQuery.limit"
          :current-page="listQuery.page"
          :total="total" @current-change="currentChange">
        </el-pagination> -->
      </div>
    </div>

  </div>
</template>

<script>
import ElImageViewer from "element-ui/packages/image/src/image-viewer";
import { satelliteIntroduction } from "@/utils/formDatas.js"
import { page, update } from "@/api/website/satelliteIntroduction"

export default {
  name: "satelliteIntroduction",
  components:{
    ElImageViewer
  },
  data() {
    return {
      currentIcon:{
        showPreview: false,
        url: "",
      },
      data: null,//原数据
      list: null,//赋值数据 | 过滤数据
      total: null,
      listLoading: true,//请求加载状态
      //请求参数。页码页数等
      listQuery: this.$parent.pageInfo,
      //搜索表单
      searchForm: {
        status: this.$parent.pageInfo.status,
        name: this.$parent.pageInfo.name
      },
      //添加banner与修改banner的form对象
      editForm: satelliteIntroduction.init(),//提交的表单参数
      editFormInfo: satelliteIntroduction.formInfo,//表单项。
      editFormRules: satelliteIntroduction.rules,//表单规则
      //是否启用，1、启用，2、禁用
      bannerStatus: {
        // 0: '全部',
        1: '启用',
        2: '禁用',
      },
      dialogVisible: false,
      dialogTitle: "新增卫星"
    }
  },
  mounted() {
    this.getList()
  },
  methods: {
    handleSizeChange(val) {
      this.listQuery.limit = val

      this.getList();
    },
    showPreview(url) {
      this.currentIcon.url = url;
      this.currentIcon.showPreview = true;
    },
    closePreview() {
      this.currentIcon.showPreview = false;
    },
    changePageInfo(page) {
      this.$emit('recordPageInfo', page)
    },
    search() {
      this.listQuery = {
        status: this.searchForm.status || null,
        name: this.searchForm.name || null,
        page: 1,
        limit: 10
      }
      this.changePageInfo(this.listQuery)

      this.getList();
    },
    //清除搜索
    clearFilterData() {
      this.searchForm = {
        status: 0,
        name: ""
      }

      this.listQuery = {
        status: this.searchForm.status || null,
        name: this.searchForm.name || null,
        page: 1,
        limit: 10
      }
      this.changePageInfo(this.listQuery)
      this.getList()
    },
    //切换页码
    currentChange(val) {
      this.listQuery.page = val;
      this.changePageInfo(this.listQuery)

      this.getList();
    },
    //编辑
    edit(row) {
      this.$emit('change', 'Edit', row)
    },
    //校验表单
    submitForm() {
      let _this = this;
      this.$refs.ruleForm.validate((valid) => {
        if (valid) {
          _this.updateFunc();
        } else {
          console.log('error submit!!');
          return false;
        }
      });
    },
    //更新方法
    updateFunc() {
      update(this.editForm).then(res => {
        if (res.status ==  200) {
          this.dialogVisible = false;
          this.getList();
        } else {
          this.$message.error(res.message);
        }
      })
    },
    //取消表单
    resetForm() {
      this.$refs.ruleForm.resetFields();
      this.dialogVisible = false;
    },
    //新增banner
    addItem() {
      this.$emit('change', 'edit')
    },
    //获取状态
    getStatus(val) {
      return this.bannerStatus[val]
    },
    //上下架、删除更新
    changeParams(row, key) {
      this.$confirm('确定继续执行该操作吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.editForm = row;
        if (key == 'isDel') {
          this.editForm[key] = row[key] == 0 ? 1 : 0;
        } else {
          this.editForm[key] = row[key] == 1 ? 2 : 1;
        }

        //更新专题
        this.updateFunc();
      })
    },
    //获取banner列表
    getList() {
      this.listLoading = true;
      page(this.listQuery).then(res => {
        this.list = res.data.data
        this.list.forEach((element,index) => {
          element.index = ((this.listQuery.page-1)*this.listQuery.limit)+(index+1)
        });
        this.data = res.data.data
        this.total = res.data.totalCount;
        this.listLoading = false;
      }).catch(err => {
        this.listLoading = false;
      })
    }
  }
}
</script>

<style lang="scss" scoped>
.head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 20px;
  width: 100%;
  border-bottom: 1px solid #e6e6e6;
}
.cover {
  width: 50px;
  height: 50px;
  object-fit: cover;
  cursor: pointer;
}
.page-foot {
  margin-top: 20px;
}
</style>
