<template>
  <el-dialog
    title="选择"
    :visible.sync="visible"
    :before-close="handleClose"
    :close-on-click-modal="false"
    top="5vh"
    :close-on-press-escape="false"
    append-to-body
    width="70%"
  >
    <el-card shadow="never">
      <searchProduct @search="reload"></searchProduct>
      <ele-pro-table
        ref="table"
        :columns="columns"
        :datasource="datasource"
        row-key="id"
        height="calc(100vh - 480px)"
        class="dict-table"
        @cell-click="cellClick"
        :selection.sync="selection"
      >
        <!-- 表头工具栏 -->
        <template v-slot:action="{ row }">
          <el-radio class="radio" v-model="radio" :label="row.code"
            ><i></i
          ></el-radio>
        </template>
      </ele-pro-table>
    </el-card>

    <div slot="footer">
      <el-button type="primary" size="small" @click="selected">选择</el-button>
      <el-button size="small" @click="handleClose">关闭</el-button>
    </div>
  </el-dialog>
</template>

<script>
  import { getProduceTreeByCode } from '@/api/saleManage/quotation';
  import searchProduct from './searchProduct.vue';
  import { getInventoryTotalAPI } from '@/api/wms';
  import { getByCode } from '@/api/system/dictionary-data';
  import {
    businessStatus,
    networkStatus,
    treeClassifyCodeEnum
  } from '@/enum/dict';
  import { assetPageAPI } from '@/api/main';

  export default {
    components: {
      searchProduct
    },
    props: {
      code: {
        type: String,
        default: ''
      }
    },

    data() {
      return {
        visible: false,
        currentIndex: null,
        radio: null,
        dictList: {},
        selection: []
      };
    },
    watch: {},
    computed: {
      treeClassifyCodeEnum() {
        return treeClassifyCodeEnum;
      },
      columns() {
        return [
          {
            action: 'action',
            slot: 'action',
            align: 'center',
            label: '选择',
            show: this.currentIndex != -1
          },
          {
            label: '选择',
            show: this.currentIndex == -1,
            width: 45,
            type: 'selection',
            columnKey: 'selection',
            align: 'center'
          },
          {
            columnKey: 'index',
            type: 'index',
            label: '序号',
            width: 55,
            align: 'center',
            showOverflowTooltip: true,
            fixed: 'left'
          },
          {
            columnKey: 'code',
            prop: 'code',
            slot: 'code',
            label: '编码',
            showOverflowTooltip: true,
            minWidth: 180,
            align: 'center'
          },
          // {
          //   columnKey: 'code',
          //   prop: 'code',
          //   label: '设备编码',
          //   showOverflowTooltip: true,
          //   minWidth: 110,
          //   slot: 'code'
          // },
          {
            prop: 'name',
            label: '名称',
            showOverflowTooltip: true,
            minWidth: 110,
            align: 'center'
          },
          {
            prop: 'category.brandNum',
            label: '牌号',
            showOverflowTooltip: true,
            minWidth: 110,
            align: 'center'
          },
          {
            prop: 'fixCode',
            label: '固资编码',
            showOverflowTooltip: true,
            minWidth: 110,
            align: 'center'
          },
          {
            prop: 'postName',
            label: '使用岗位',
            showOverflowTooltip: true,
            minWidth: 110,
            align: 'center'
          },
          {
            prop: 'codeNumber',
            label: '编号',
            showOverflowTooltip: true,
            minWidth: 110,
            align: 'center'
          },
          {
            prop: 'category.modelType',
            label: '型号',
            showOverflowTooltip: true,
            minWidth: 110,
            align: 'center'
          },
          {
            prop: 'category.specification',
            label: '规格',
            showOverflowTooltip: true,
            minWidth: 110,
            align: 'center'
          },
          {
            prop: 'usePerson',
            label: '使用人',
            showOverflowTooltip: true,
            minWidth: 80,
            align: 'center'
          },
          {
            prop: 'chargePerson',
            label: '负责人',
            showOverflowTooltip: true,
            minWidth: 80,
            align: 'center'
          },
          {
            prop: 'endTime',
            label: '有效结束时间',
            showOverflowTooltip: true,
            minWidth: 150,
            align: 'center'
          },
          {
            prop: 'source',
            label: '生命周期',
            showOverflowTooltip: true,
            minWidth: 110,
            align: 'center'
          },
          {
            prop: 'level',
            label: '级别',
            showOverflowTooltip: true,
            minWidth: 110,
            formatter: (_row) => {
              return this.getDictV('asset_level', _row.level);
            },
            align: 'center'
          },
          {
            prop: 'networkStatus',
            label: '网络状态',
            showOverflowTooltip: true,
            minWidth: 110,
            formatter: (_row) => {
              if (_row.networkStatus) {
                return networkStatus.filter(
                  (item) => item.code == _row.networkStatus
                )[0].label;
              } else {
                return '离线';
              }
            },
            align: 'center'
          },
          {
            prop: 'status',
            label: '状态',
            showOverflowTooltip: true,
            minWidth: 110,
            formatter: (_row) => {
              if (_row.status) {
                return businessStatus.filter(
                  (item) => item.code == _row.status
                )[0].label;
              } else {
                return '空闲';
              }
            },
            align: 'center'
          },
          {
            prop: 'pathName',
            label: '位置',
            showOverflowTooltip: true,
            minWidth: 110,
            formatter: (_row) => {
              const positionDetail =
                _row.position &&
                _row.position.length != 0 &&
                _row.position[0].detailPosition
                  ? _row.position[0].detailPosition
                  : '-';
              return _row.deviceLocationName
                ? _row.deviceLocationName + '-' + positionDetail
                : '';
            },
            align: 'center'
          }
        ];
      }
    },
    methods: {
      getDictV(code, val) {
        if (!this.dictList[code]) return '';
        return this.dictList[code].find((item) => item.value == val)?.label;
      },
      async getDictList(code) {
        let { data: res } = await getByCode(code);
        this.dictList[code] = res.map((item) => {
          let values = Object.keys(item);
          return {
            value: values[0],
            label: item[values[0]]
          };
        });
      },
      async open(item, currentIndex) {
        this.currentIndex = currentIndex;
        this.visible = true;
        await this.getDictList('asset_level');
      },
      /* 表格数据源 */
      async datasource({ page, limit, where, order }) {
        let typeObj = await getProduceTreeByCode(this.code);
        return assetPageAPI({
          pageNum: page,
          size: limit,
          categoryLevelId: typeObj[0]?.id || '-1',
          ...where
        });
      },

      /* 刷新表格 */
      reload(where) {
        this.$refs.table.reload({ pageNum: 1, where: where });
      },
      handleNodeClick(data, node) {
        this.curNodeData = data;
        this.reload({ categoryLevelId: data.id });
      },

      // 单击获取id
      cellClick(row) {
        if (this.currentIndex == -1) return;
        this.current = row;
        this.radio = row.id;
      },
      handleClose() {
        this.visible = false;
        this.current = null;
        this.selection = [];
        this.$refs.table.clearSelection();
        this.radio = '';
      },

      async selected() {
        if (!this.current && !this.selection.length) {
          return this.$message.warning('请至少选择一条数据');
        }
        let list = this.currentIndex == -1 ? this.selection : [this.current];
        this.$emit('changeParent', list, this.currentIndex);

        this.handleClose();
      }
    }
  };
</script>

<style lang="scss" scoped>
  .tree_col {
    border: 1px solid #eee;
    padding: 10px 0;
    box-sizing: border-box;
    height: 500px;
    overflow: auto;
  }

  .table_col {
    padding-left: 10px;

    ::v-deep .el-table th.el-table__cell {
      background: #f2f2f2;
    }
  }

  .pagination {
    text-align: right;
    padding: 10px 0;
  }

  .btns {
    text-align: center;
    padding: 10px 0;
  }

  .topsearch {
    margin-bottom: 15px;
  }
</style>
