<template>
  <div class="flex" :gutter="10">
    <div class="flex-1">
      <el-card>
        <div slot="header" class="header">
          <el-select v-model="queryParams.typeId" :placeholder="$t('选择类型')" style="width:120px" clearable @change="getList" :disabled="loading">
            <el-option v-for="item in typeList" :key="item.id" :label="item.titleZh" :value="item.id" />
          </el-select>
          <el-select v-model="queryParams.attrId" :placeholder="$t('选择属性')" style="width:120px" clearable @change="getList" :disabled="loading">
            <el-option v-for="item in attrList" :key="item.id" :label="item.attrName" :value="item.id" />
          </el-select>
          <el-input v-model="queryParams.titleZh" :placeholder="$t('产品关键字')" style="width:120px" clearable  onkeyup="this.value=this.value.replace(/\s+/g, '')" :disabled="loading"/>
          <el-button type="primary" @click="reLoad" :loading="loading">{{$t('搜索')}}</el-button>

          <div style="height: 36px; display: flex; align-items: center">
            <el-checkbox :label="$t('全选') + `(${$t('{total}个', {total})})`" @change="toggleAll" v-model="isCheckedAll" :disabled="isAllProduct || loading"></el-checkbox>
          </div>
        </div>
        <div class="list">
          <div class="item" v-for="item in currentList" :key="item.id">
            <el-checkbox @change="toggleCheck(item, $event)" :value="ids.indexOf(item.id) > -1" :disabled="isAllProduct" /> {{item.titleZh}}
            <div>{{item.titleEn}}</div>
          </div>
        </div>
				<el-pagination :total="list.length"  :page-sizes="[100, 200, 300, 500]" :page-size="pageSize" @current-change="leftPage = $event" layout="prev, pager, next, total, sizes" :current-page="leftPage" />
      </el-card>
    </div>
    <div class="flex-1 ml-10">
      <el-card style="height:100%">
        <div slot="header" class="header">
          <el-select v-model="selectedFilterParams.typeId" :placeholder="$t('选择类型')" style="width:120px" clearable :disabled="loading">
            <el-option v-for="item in typeList" :key="item.id" :label="item.titleZh" :value="item.id" />
          </el-select>
          <el-select v-model="selectedFilterParams.attrId" :placeholder="$t('选择属性')" style="width:120px" clearable :disabled="loading">
            <el-option v-for="item in attrList" :key="item.id" :label="item.attrName" :value="item.id" />
          </el-select>
          <el-input v-model="selectedFilterParams.titleZh" :placeholder="$t('产品关键字')" style="width:120px" clearable  onkeyup="this.value=this.value.replace(/\s+/g, '')" :disabled="loading"/>
          <!--<el-button type="primary" @click="reLoad" :loading="loading">{{$t('搜索')}}</el-button>-->

          <div class="flex">
            <div class="flex-1 flex items-center">{{$t('已选{cnt}个产品', {cnt: choosedList.length})}}</div>
            <el-button :disabled="!choosedList.length" type="text" @click="clearAll">{{$t('全部清除')}}</el-button>
          </div>
        </div>
        <div class="list">
          <div class="item" v-for="(choosed) in selectedList" :key="choosed.id">
            <el-link class="el-icon-delete" @click="remove(choosed)" :disabled="isAllProduct"/> {{choosed.titleZh}}
            <div>{{choosed.titleEn}}</div>
          </div>
        </div>
				<el-pagination :total="filteredList.length" :page-sizes="[100, 200, 300, 500]" :page-size="pageSize" @current-change="rightPage = $event" layout="prev, pager, next, total, sizes" :current-page="rightPage" />
      </el-card>
    </div>
  </div>
</template>
<script>
import {getProductPage, getProductList, getProductIds, getSimpleProductList} from '@/api/ecw/product'
import { getProductTypeList } from '@/api/ecw/productType'
import { getProductAttrList } from '@/api/ecw/productAttr'

export default {
  props: {
    defaultIds: {
      type: Array,
      default: () => {
        return []
      }
    },
    showAll: Boolean,
    isall: Boolean,
    // 是否允许勾选全部搜索结果，优惠券那边无法回显所以不能启用，编辑路线价格等不需要回显的场景可以启用
    enableFiltered: Boolean
  },
  data() {
    return {
      loading: false,
      list: [],
      page: 1,
      pages: 1,
      allTotal: 0, // 全库商品总数
      queryParams: {
        pageNo: 1,
        pageSize: 10000,
        attrId: null,
        titleZh: null,
        typeId: null
      },
      selectedFilterParams:{
        attrId: null,
        titleZh: null,
        typeId: null
      },
      choosedList: [],
      typeList: [],
      attrList: [],
      isAllProduct: false,
      //isAllFiltered: false, // 是否全部搜索结果
      // 是否显示搜索结果勾选，有筛选条件才显示
      showFiltered: false,
      // 左侧页码
      leftPage: 1,
      // 右侧页码
      rightPage: 1,
      // 页大小
      pageSize: 100,
      // 是否选中全选
      isCheckedAll: false
    }
  },
  computed: {
    total(){
      return this.list.length
    },
    ids: {
      get() {
        let arr = []
        this.choosedList.forEach(item => {
          arr.push(item.id)
        })
        return arr
      },
      set(v) {

      }
    },
    // 左侧当前显示的列表
    currentList(){
      return this.list.slice((this.leftPage - 1) * this.pageSize, this.leftPage * this.pageSize)
    },
    // 已选中 且符合筛选的
    filteredList(){
      return this.choosedList.filter(item => {
        if(this.selectedFilterParams.typeId && item.typeId != this.selectedFilterParams.typeId){
          return false
        }
        if(this.selectedFilterParams.attrId && item.attrId != this.selectedFilterParams.attrId){
          return false
        }
        if(this.selectedFilterParams.titleZh && item.titleZh.indexOf(this.selectedFilterParams.titleZh) == -1){
          return false
        }
        return true
      })
    },
    // 已勾选的显示列表，当前分页显示的
    selectedList(){
      return this.filteredList.slice((this.rightPage - 1) * this.pageSize, this.rightPage * this.pageSize)
    }
  },
  watch: {
    ids(val) {
      this.$emit('input', val)
    },
    isAllProduct(isAllProduct){
      console.log('isAllProduct', isAllProduct)
      this.choosedList = []
      this.$emit('setall', isAllProduct)
    },
    /*isAllFiltered(isAllFiltered){
      this.choosedList = []
      this.isAllProduct = false
      this.$emit('setFiltered', isAllFiltered)
    },*/
    defaultIds(newValue, oldValue){
      if(!oldValue || !oldValue.length){
        // this.loadDefaultProds()
      }
    },
    isall(isall){
      this.isAllProduct = isall
    }
  },
  async created() {
    getProductTypeList().then(res => this.typeList = res.data)
    getProductAttrList().then(res => this.attrList = res.data)
    await this.reLoad()
    this.ids = this.defaultIds //数据回显
    this.isAllProduct = this.isall
    // 如果有默认商品则获取内容供回显
    if(this.defaultIds.length){
      this.setDefaultChooseProds()
      //this.loadDefaultProds()
    }

    // 获取全库商品总数
    /*getProductPage({pageNo: 1, pageSize: 1}).then(res => {
      this.allTotal = res.data.total
    })*/
  },
  methods: {
    /* setAllProduct(status){
      this.isAllProduct = true
    }, */
    /*loadDefaultProds(){
      if(!this.defaultIds || !this.defaultIds.length){
        return false
      }
      getProductList({ids: this.defaultIds.join(',')}).then(res => {
        res.data.forEach(item => {
          this.choose(item)
        })
      })
    },*/
    //  设置默认选中的商品
    setDefaultChooseProds(){
      this.list.forEach(item => {
        if(this.defaultIds.indexOf(item.id) > -1){
          this.choose(item)
        }
      })
    },
    toggleAll(status){
      this.list.forEach(item => {
        this.toggleCheck(item, status)
      })
    },
    async reLoad() {
      this.queryParams.page = 1
      this.list = []
      await this.getList()
    },
    loadNextPage() {
      if (this.page >= this.pages) {
        return this.$message.error(this.$t('已加载全部'))
      }
      this.queryParams.page++
      this.getList()
    },
    async getList() {
      this.loading = true
      let res = await getSimpleProductList(this.queryParams)
      this.loading = false
      this.list = res.data
      // 2024-01-29根据要求，切换类型后不清空已选中的商品
      /* this.choosedList = []
      this.isCheckedAll = false */
    },
    // 获得指定条件的商品的全部ID
    getFilteredIds(){
      return getProductIds(this.queryParams).then(res => {
        return res.data
      })
    },
    toggleCheck(item, checked) {
      if (checked) {
        this.choose(item)
      } else {
        this.remove(item)
      }
    },
    choose(item) {
      if(!this.choosedList.find(it => it.id == item.id)){
        this.choosedList.push(item)
      }
    },
    remove(item) {
      this.choosedList.forEach((choosed, index) => {
        if (choosed.id == item.id) this.choosedList.splice(index, 1)
      })
    },
    // 清除全部
    async clearAll() {
      await this.$confirm(this.$t('确定要全部清除么？'))
      this.choosedList = []
      this.isCheckedAll = false
    }
  }
}
</script>
<style scoped lang="scss">
.header {
  > div {
    margin-right: 5px;
  }
}
.list {
  height: 200px;
  border: 1px solid #ccc;
  overflow-y: auto;
  overflow-x: hidden;
  padding: 0 10px;

  display: flex;
  flex-wrap: wrap;
  .item {
    width: 50%;
    line-height: 20px;
    height: 50px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
}
</style>
