<template>
  <div class="ele-body">
    <el-card shadow="never" v-loading="loading">
      <ele-split-layout
        width="300px"
        allow-collapse
        :right-style="{ overflow: 'hidden' }"
      >
        <div>
          <div class="ele-border-lighter sys-organization-list">
            <AssetTree
              @handleNodeClick="handleNodeClick"
              id="20"
              :isFirstRefreshTable="false"
              ref="treeList"
            />
          </div>
        </div>
        <template v-slot:content>
          <div class="ele-border-lighter form-content" v-loading="loading">
            <search-contract @search="reload"></search-contract>

            <!-- 数据表格 -->
            <ele-pro-table
              ref="table"
              :columns="columns"
              :datasource="datasource"
              height="calc(100vh - 375px)"
              full-height="calc(100vh - 116px)"
              tool-class="ele-toolbar-form"
              :selection.sync="selection"
              cache-key="eomContactPageTable"
            >
              <!-- 表头工具栏 -->
              <template v-slot:toolbar>
                <el-button
                  size="small"
                  type="primary"
                  icon="el-icon-plus"
                  class="ele-btn-icon"
                  @click="openEdit('add', {})"
                >
                  新建
                </el-button>

                <el-button
                  size="small"
                  type="danger"
                  el-icon-delete
                  class="ele-btn-icon"
                  @click="allDelBtn"
                  :disabled="selection?.length === 0"
                >
                  批量删除
                </el-button>

                <el-button
                  size="small"
                  type="primary"

                  class="ele-btn-icon"
                  @click="contractBatchSubmit"
                  :disabled="selection?.length === 0"
                >
                  批量提交
                </el-button>
              </template>

              <!-- 查看详情列 -->
              <template v-slot:contractName="{ row }">
                <el-link
                  type="primary"
                  :underline="false"
                  @click="openDetail(row)"
                >
                  {{ row.contractName }}
                </el-link
                >
              </template>

              <!-- 操作列 -->
              <template v-slot:action="{ row }">
                <el-link
                  type="primary"
                  v-if="[0, 3].includes(row.status)"
                  :underline="false"
                  icon="el-icon-edit"
                  @click="openEdit('edit', row)"
                >
                  修改
                </el-link>
                <el-link
                  type="primary"
                  v-if="[0, 3].includes(row.status)"
                  :underline="false"
                  icon="el-icon-plus"
                  @click="contractBookSubmit(row)"
                >
                  提交
                </el-link>
                <el-link
                  type="primary"
                  v-if="[2].includes(row.status)&&!row.hasGeneratedOrder"
                  :underline="false"
                  icon="el-icon-plus"
                  @click="handleGenerateOrder(row)"
                >
                  生成订单
                </el-link>
                <el-popconfirm
                  v-if="[0, 3].includes(row.status)"
                  class="ele-action"
                  title="确定要删除此信息吗？"
                  @confirm="remove([row.id])"
                >
                  <template v-slot:reference>
                    <el-link
                      type="danger"
                      :underline="false"
                      icon="el-icon-delete"
                    >
                      删除
                    </el-link>
                  </template>
                </el-popconfirm>
              </template>
            </ele-pro-table>
          </div>
        </template>
      </ele-split-layout>
    </el-card>

    <add-dialog
      ref="addDialogRef"
      @done="reload"
      :categoryTreeList="treeList"
    ></add-dialog>
    <detail-dialog ref="contactDetailDialogRef"></detail-dialog>
    <!-- 多选删除弹窗 -->
    <pop-modal
      :visible.sync="delVisible"
      content="是否确定删除？"
      @done="commitBtn"
    />
    <saleOrderAddDialog ref="saleOrderAddDialogRef" @done="reload"></saleOrderAddDialog>
    <supplierAddDialog ref="supplierAddDialogRef" @done="reload"></supplierAddDialog>
  </div>
</template>

<script>
import searchContract from './components/searchContract.vue';
import addDialog from './components/addDialog.vue';
import detailDialog from './components/detailDialog.vue';
import popModal from '@/components/pop-modal';
import AssetTree from '@/components/AssetTree';
import {reviewStatus} from '@/enum/dict';
import {contactTypeTree} from '@/api/saleManage/contact';
import saleOrderAddDialog from '@/views/saleManage/saleOrder/components/addDialog.vue'
import supplierAddDialog from '@/views/purchasingManage/purchaseOrder/components/addDialog.vue'


import {
  getTableList,
  submit,
  deleteInformation, batchSubmitAPI,
} from '@/api/contractManage/contractBook';
import dictMixins from '@/mixins/dictMixins';

export default {
  mixins: [dictMixins],
  components: {
    AssetTree,
    searchContract,
    popModal,
    addDialog,
    detailDialog,
    saleOrderAddDialog,
    supplierAddDialog
  },
  data() {
    return {
      selection: [], //单选中集合
      delVisible: false, //批量删除弹框状态
      loading: false, // 加载状态
      treeList: [], //左边分类数据
      columns: [
        {
          width: 45,
          type: 'selection',
          columnKey: 'selection',
          align: 'center'
        },
        {
          columnKey: 'index',
          label: '序号',
          type: 'index',
          width: 55,
          align: 'center',
          showOverflowTooltip: true,
          fixed: 'left'
        },
        {
          prop: 'contractName',
          label: '合同名称',
          align: 'center',
          slot: 'contractName',
          showOverflowTooltip: true,
          minWidth: 200
        },
        {
          prop: 'categoryName',
          label: '合同分类',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 140
        },
        {
          prop: 'productNames',
          label: '产品名称',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 140
        },
        {
          prop: 'partaName',
          label: '甲方名称',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 150
        },
        {
          prop: 'partaLinkName',
          label: '甲方联系人',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 130
        },

        {
          prop: 'partaTel',
          label: '甲方联系电话',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 130
        },
        {
          prop: 'partbName',
          label: '乙方名称',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 130
        },
        {
          prop: 'partbLinkName',
          label: '乙方联系人',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 130
        },
        {
          prop: 'partbTel',
          label: '乙方联系电话',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 130
        },

        {
          prop: 'contractNo',
          label: '编码',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 170
        },
        {
          prop: 'contractNumber',
          label: '合同编号',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 200
        },

        {
          prop: 'enabled',
          label: '是否可用',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 140,
          formatter: (_row, _column, cellValue) => {
            return _row.enabled ? '是' : '否';
          }
        },
        {
          prop: 'contractStartDate',
          label: '签订日期',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 140
        },
        {
          prop: 'contractEndDate',
          label: '结束日期',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 140
        },
        {
          prop: 'receiptPaymentType',
          label: '收付款类型',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 130,
          formatter: (_row, _column, cellValue) => {
            return _row.receiptPaymentType == 1 ? '固定' : '分期';
          }
        },
        {
          prop: 'totalPrice',
          label: '合同总金额',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 130
        },

        {
          prop: 'status',
          label: '审核状态',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 100,
          formatter: (_row, _column, cellValue) => {
            return reviewStatus[_row.status];
          }
        },
        {
          prop: 'createTime',
          label: '创建时间',
          align: 'center',
          showOverflowTooltip: true,
          minWidth: 150
        },
        {
          columnKey: 'action',
          label: '操作',
          width: 230,
          align: 'center',
          resizable: false,
          slot: 'action',
          showOverflowTooltip: true,
          fixed: 'right'
        }
      ]
    };
  },
  computed: {},
  created() {
    this.requestDict('客户状态');
    this.getTreeData();
  },
  methods: {
    //点击左边分类
    handleNodeClick(data, node) {
      // this.curNodeData = data;
      this.reload({categoryId: data.id});
    },
    /* 表格数据源 */
    datasource({page, limit, where, order}) {
      return getTableList({
        pageNum: page,
        size: limit,
        ...where
      });
    },

    //获取左边分类
    async getTreeData() {
      try {
        this.treeLoading = true;
        const res = await contactTypeTree({type: 20});
        this.treeLoading = false;
        if (res?.code === '0') {
          this.treeList = res.data;

          return this.treeList;
        }
      } catch (error) {
      }
      this.treeLoading = false;
    },
    /* 刷新表格 */
    reload(where) {
      this.$refs.table.reload({page: 1, where});
    },

    //新增编辑
    openEdit(type, row) {
      this.$refs.addDialogRef.open(type, row);
      this.$refs.addDialogRef.$refs.form &&
      this.$refs.addDialogRef.$refs.form.clearValidate();
    },

    //批量删除
    allDelBtn() {
      if (this.selection.length === 0) return;
      let flag = this.selection.some(item => [1, 2].includes(item.status))
      if (flag) return this.$message.warning('抱歉已审核、审核中的数据不能删除,请检查')
      this.delVisible = true;
    },

    //删除接口
    remove(delData) {
      deleteInformation(delData).then((res) => {
        this.$message.success('删除成功！');
        this.reload();
      });
    },

    //删除弹框确定
    commitBtn() {
      const dataId = this.selection.map((v) => v.id);
      this.remove(dataId);
    },
    contractBookSubmit(res) {

      submit({
        businessId: res.id,
        businessType: res.type

      }).then((res) => {
        this.$message.success('提交成功！');
        this.reload();
      });
    },
    contractBatchSubmit() {
      if (this.selection.some(item => ![0, 3].includes(item.status))) return this.$message.warning('审核中、已提交数据不能再次提交，请检查')
      let arr = this.selection.map(item => {
        return {
          businessId: item.id,
          businessType: item.type
        }
      })
      batchSubmitAPI(arr).then((res) => {
        this.$message.success('提交成功！');
        this.reload();
      });
    },
    //
    handleGenerateOrder(row) {
      //1销售2是采购
      let refName = row.type == '1' ? 'saleOrderAddDialogRef' : 'supplierAddDialogRef'
      this.$refs[refName].contractOpen(row);
      this.$refs[refName].$refs.form &&
      this.$refs[refName].$refs.form.clearValidate();
    },
    //查看详情
    openDetail(row) {
      this.$refs.contactDetailDialogRef.open(row);
    }
  }
};
</script>

<style lang="scss" scoped>
:deep(.el-link--inner) {
  margin-left: 0px !important;
}

.sys-organization-list {
  height: calc(100vh - 225px);
  box-sizing: border-box;
  border-width: 1px;
  border-style: solid;
  overflow: auto;
}

.sys-organization-list :deep(.el-tree-node__content) {
  height: 40px;

  & > .el-tree-node__expand-icon {
    margin-left: 10px;
  }
}
</style>
