<template>
  <ele-modal
    :title="title"
    :visible.sync="visible"
    :before-close="handleClose"
    :close-on-click-modal="false"
    :close-on-press-escape="false"
    append-to-body
    width="70%"
    :maxable="true"
  >
    <el-card shadow="never">
      <ele-split-layout
        width="236px"
        allow-collapse
        :right-style="{ overflow: 'hidden' }"
      >
        <div>
          <div class="ele-border-lighter split-layout-right-content">
            <el-tree
              :data="treeList"
              :props="defaultProps"
              ref="treeRef"
              :default-expanded-keys="categoryId ? [categoryId] : []"
              :highlight-current="true"
              node-key="id"
              @node-click="handleNodeClick"
            ></el-tree>
          </div>
        </div>

        <!-- 数据表格 -->
        <template v-slot:content>
          <!-- <ProductSearch @search="reload" ref="searchRef" /> -->
          <seek-page :seekList="seekList" @search="reload"> </seek-page>
          <ele-pro-table
            style="min-height: 400px"
            ref="table"
            :columns="columns"
            :datasource="datasource"
            :selection.sync="selection"
            row-key="id"
          >
            <template #radio="{ row }">
              <el-radio
                v-model="currentId"
                :label="row.id"
                @change="current = row"
                class="radio"
              >
                <i></i>
              </el-radio>
            </template>
          </ele-pro-table>
        </template>
      </ele-split-layout>
    </el-card>

    <div class="rx-sc">
      <el-button type="primary" size="small" @click="selected">选择</el-button>
      <el-button size="small" @click="handleClose">关闭</el-button>
    </div>
  </ele-modal>
</template>

<script>
  import {
    getProduceTreeByPid,
    getList as getMaterialList
  } from '@/api/classifyManage/index.js';
  import SeekPage from '@/components/common/seekPage.vue';

  export default {
    components: {
      SeekPage
    },
    props: {
      // 是否多选
      multiple: {
        type: Boolean,
        default: true
      }
    },
    data() {
      return {
        visible: false,
        title: '选择工具',

        categoryLevelId: null,
        categoryId: 1,
        treeList: [],
        treeLoading: false,

        defaultProps: {
          children: 'children',
          label: 'name'
        },
        type: null,

        // 表格选中数据
        selection: [],

        processData: [],
        seekList: [
          {
            label: '编码：',
            value: 'code',
            type: 'input',
            placeholder: '请输入'
          },
          {
            label: '名称：',
            value: 'name',
            type: 'input',
            placeholder: '请输入'
          },
          {
            label: '型号：',
            value: 'modelType',
            type: 'input',
            placeholder: '请输入'
          }
        ],
        currentId: null,
        current: null
      };
    },
    computed: {
      // 表格列配置
      columns() {
        const list = [
          {
            label: '物料名称',
            prop: 'name'
          },

          {
            label: '物料编码',
            prop: 'code'
          },
          {
            label: '牌号',
            prop: 'brandNum'
          },
          {
            label: '型号',
            prop: 'modelType'
          },

          {
            prop: 'availableCountBase',
            label: '包装库存',
            sortable: 'custom'
          },
          {
            label: '单位',
            prop: 'weightUnit'
          },

          {
            prop: 'packingCountBase',
            label: '计量库存',
            sortable: 'custom'
          },

          {
            label: '计量单位',
            prop: 'unit'
          },

          {
            label: '数量',
            prop: 'count'
          }
        ];

        if (this.multiple) {
          list.unshift({
            columnKey: 'selection',
            type: 'selection',
            width: 45,
            align: 'center',
            selectable: (row, index) => {
              return !this.processData.some((it) => row.id == it.categoryId);
            },
            reserveSelection: true,
            fixed: 'left'
          });
        } else {
          list.unshift({
            prop: 'radio',
            slot: 'radio',
            width: 50,
            align: 'center',
            fixed: 'left'
          });
        }

        return list;
      }
    },
    methods: {
      /* 表格数据源 */
      async datasource({ page, limit, where }) {
        const res = await getMaterialList({
          ...where,
          pageNum: page,
          size: limit,
          categoryLevelId: this.categoryLevelId
        });
        return res;
      },

      open(item) {
        this.processData = item || [];
        this.visible = true;

        this.getTreeData();
      },

      async getTreeData() {
        try {
          this.treeLoading = true;

          const res = await getProduceTreeByPid(5);
          this.treeLoading = false;
          if (res?.code === '0') {
            this.treeList = res.data;

            this.$nextTick(() => {
              // 默认高亮第一级树节点
              if (this.treeList[0]) {
                this.rootTreeId = this.treeList[0].id;
                this.$nextTick(() => {
                  this.$refs.treeRef.setCurrentKey(this.treeList[0].id);
                });
              }
            });
            return this.treeList;
          }
        } catch (error) {}
        this.treeLoading = false;
      },

      handleNodeClick(data) {
        this.categoryLevelId = data.id;
        this.$refs.table.reload({ pageNum: 1, where: {} });
      },

      /* 刷新表格 */
      reload(where) {
        this.$refs.table.reload({ page: 1, where: where });
      },

      handleClose() {
        this.visible = false;
        this.$refs.table.setSelectedRows([]);
        this.current = null;
        this.currentId = '';
        this.selection = [];
      },
      selected() {
        if (!this.selection.length && this.multiple) {
          this.$message.warning('请至少选择一条数据');
          return;
        }

        if (!this.multiple && !this.current) {
          this.$message.warning('请选择选择工具');
          return;
        }

        this.$emit(
          'chooseModal',
          this.multiple ? this.selection : this.current
        );
        this.handleClose();
      }
    }
  };
</script>

<style lang="scss" scoped>
  .rx-sc {
    display: flex;
    align-items: center;
    justify-content: center;
  }

  .ml60 {
    margin-left: 60px;
  }
</style>
