<template>
  <div class="ele-body">
    <el-card shadow="never" v-loading="loading">
      <div class="switch">
        <div class="switch_left">
          <ul>
            <li
              v-for="item in tabOptions"
              :key="item.key"
              :class="{ active: activeComp == item.key }"
              @click="activeComp = item.key"
            >
              {{ item.name }}
            </li>
          </ul>
        </div>
      </div>
      <div class="main" style="padding: 0 10px">
        <div v-if="activeComp == 'saleorder'">
          <div class="ele-border-lighter form-content" v-loading="loading">
            <search-table @search="reload"></search-table>

            <!-- 数据表格 -->
            <ele-pro-table
              ref="table"
              :columns="columns"
              :datasource="datasource"
              height="calc(100vh - 365px)"
              style="margin-bottom: 10px"
              full-height="calc(100vh - 116px)"
              tool-class="ele-toolbar-form"
              :selection.sync="selection"
              :page-size="20"
              @columns-change="handleColumnChange"
              :cache-key="cacheKeyUrl"
            >
              <!-- 表头工具栏 -->
              <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
                  type="primary"
                  size="small"
                  icon="el-icon-upload2"
                  @click="uploadFile"
                  >导入</el-button
                >
                <exportButton
                  fileName="采购订单"
                  apiUrl="/eom/purchaseorder/export"
                  :params="params"
                ></exportButton>
              </template>

              <!-- 查看详情列 -->
              <template v-slot:contractNo="{ row }">
                <el-link
                  type="primary"
                  :underline="false"
                  @click="opencontractDetail(row)"
                >
                  {{ row.contractNo }}
                </el-link>
              </template>
              <template v-slot:orderNo="{ row }">
                <el-link
                  type="primary"
                  :underline="false"
                  @click="openorderDetail(row)"
                >
                  {{ row.orderNo }}
                </el-link>
              </template>
              <!-- 操作列 -->
              <template v-slot:action="{ row }">
                <el-link
                  type="primary"
                  :underline="false"
                  icon="el-icon-edit"
                  v-if="
                    (isNeed_process_is_close &&
                      [0, 3].includes(row.orderStatus)) ||
                    !isNeed_process_is_close
                  "
                  @click="openEdit('edit', row)"
                >
                  修改
                </el-link>
                <el-link
                  type="primary"
                  :underline="false"
                  icon="el-icon-plus"
                  @click="saleOrderSubmit(row)"
                  v-if="
                    isNeed_process_is_close && [0, 3].includes(row.orderStatus)
                  "
                >
                  提交
                </el-link>
                <el-popconfirm
                  class="ele-action"
                  title="确定要删除此信息吗？"
                  v-if="
                    (isNeed_process_is_close &&
                      [0, 3].includes(row.orderStatus)) ||
                    !isNeed_process_is_close
                  "
                  @confirm="remove([row.id])"
                >
                  <template v-slot:reference>
                    <el-link
                      type="danger"
                      :underline="false"
                      icon="el-icon-delete"
                    >
                      删除
                    </el-link>
                  </template>
                </el-popconfirm>
                <el-link
                  type="primary"
                  :underline="false"
                  icon="el-icon-plus"
                  @click="handleCommand('outsourceSend', row)"
                  v-if="
                    ['3', '4', '5', '6'].includes(row.sourceType) &&
                    [2].includes(row.orderStatus)
                  "
                >
                  创建委外发货单
                </el-link>
                <el-link
                  type="primary"
                  :underline="false"
                  icon="el-icon-plus"
                  @click="handleCommand('invoice', row)"
                  v-if="
                    !['3', '4', '5', '6'].includes(row.sourceType) &&
                    [2].includes(row.orderStatus)
                  "
                >
                  创建收货单
                </el-link>
                <el-link
                  type="primary"
                  :underline="false"
                  icon="el-icon-plus"
                  @click="handleCommand('invoiceManage', row)"
                  v-if="!row.hasInvoiceApply && [2].includes(row.orderStatus)"
                >
                  新增发票
                </el-link>
              </template>
            </ele-pro-table>
          </div>
        </div>
        <div v-if="activeComp == 'outsourceSend'">
          <outSourceSend></outSourceSend>
        </div>
        <div v-if="activeComp == 'invoice'">
          <invoice></invoice>
        </div>
        <div v-if="activeComp == 'invoiceConfirm'">
          <invoiceConfirm></invoiceConfirm>
        </div>

        <div v-if="activeComp == 'returnorder'" class="returnorder">
          <return-goods></return-goods>
        </div>
        <div v-if="activeComp == 'exceptionList'">
          <exceptionList :relationType="2"></exceptionList>
        </div>
        <div v-if="activeComp == 'accountstatement'">
          <accountstatement></accountstatement>
        </div>
      </div>
    </el-card>

    <add-dialog
      ref="addDialogRef"
      @done="reload"
      :isRequired="isRequired"
    ></add-dialog>
    <add-invoice-dialog
      ref="invoiceDialogRef"
      @done="reload"
    ></add-invoice-dialog>
    <add-return-goods-dialog
      ref="addReturnGoodsRef"
      @done="reload"
    ></add-return-goods-dialog>
    <contractr-detail ref="contractDetailRef"></contractr-detail>
    <detail-dialog ref="contactDetailDialogRef"></detail-dialog>
    <addOutSourceSend
      ref="addOrEditDialogRef"
      :add-or-edit-dialog-flag.sync="addOrEditDialogFlag"
      v-if="addOrEditDialogFlag"
      @done="reload"
    ></addOutSourceSend>
    <!-- 多选删除弹窗 -->
    <pop-modal
      :visible.sync="delVisible"
      content="是否确定删除？"
      @done="commitBtn"
    />
    <process-submit-dialog
      :isNotNeedProcess="false"
      :processSubmitDialogFlag.sync="processSubmitDialogFlag"
      v-if="processSubmitDialogFlag"
      ref="processSubmitDialogRef"
      @reload="reload"
    ></process-submit-dialog>
    <addInvoiceManage
      :add-or-edit-dialog-flag.sync="addOrEditDialogFlag1"
      ref="addOrEditDialogRef"
      v-if="addOrEditDialogFlag1"
      @reload="reload"
    ></addInvoiceManage>
    <importDialog
      ref="importDialogRef"
      @success="reload"
      :fileUrl="'/eos/importTemplate/采购订单导入模板.xlsx'"
      fileName="采购订单导入模板"
      apiUrl="/eom/purchaseorder/importFile"
    />
  </div>
</template>

<script>
  import searchTable from './components/searchTable.vue';
  import addDialog from './components/addDialog.vue';
  import invoice from './invoice/index.vue';
  import invoiceConfirm from './invoiceConfirm/index.vue';
  import detailDialog from './components/detailDialog.vue';
  import contractrDetail from '@/views/contractManage/contractBook/components/detailDialog.vue';
  import addInvoiceDialog from '@/views/purchasingManage/purchaseOrder/invoice/components/addInvoiceDialog';
  import addReturnGoodsDialog from '@/views/purchasingManage/purchaseOrder/returnGoods/components/addReturnGoodsDialog';
  import addOutSourceSend from '@/views/purchasingManage/purchaseOrder/outSourceSend/components/addOrEditDialog';
  import popModal from '@/components/pop-modal';
  import accountstatement from './accountstatement/index.vue';
  import returnGoods from './returnGoods/index.vue';
  import addInvoiceManage from '@/views/financialManage/invoiceManage/components/addOrEditDialog.vue';
  import outSourceSend from './outSourceSend/index';
  import {
    getTableList,
    deleteInformation,
    submit
  } from '@/api/purchasingManage/purchaseOrder';
  import dictMixins from '@/mixins/dictMixins';
  import {
    purchaseOrderProgressStatusEnum,
    reviewStatus,
    saleOrderProgressStatusEnum
  } from '@/enum/dict';
  import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
  import tabMixins from '@/mixins/tableColumnsMixin';
  import importDialog from '@/components/upload/import-dialog.vue';
  import exportButton from '@/components/upload/exportButton.vue';
  import { parameterGetByCode } from '@/api/main/index.js';
  import exceptionList from '@/views/saleManage/saleOrder/exceptionManagement/exceptionList/index.vue';
  export default {
    mixins: [dictMixins, tabMixins],
    components: {
      processSubmitDialog,
      exportButton,
      searchTable,
      returnGoods,
      accountstatement,
      popModal,
      contractrDetail,
      addReturnGoodsDialog,
      addInvoiceDialog,
      invoice,
      addDialog,
      detailDialog,
      outSourceSend,
      addOutSourceSend,
      addInvoiceManage,
      importDialog,
      invoiceConfirm,
      exceptionList
    },
    data() {
      return {
        activeComp: 'saleorder',
        tabOptions: [
          { key: 'saleorder', name: '采购订单' },
          { key: 'outsourceSend', name: '委外发货单' },
          { key: 'invoice', name: '收货单' },
          { key: 'invoiceConfirm', name: '收货确认单' },
          { key: 'exceptionList', name: '异常列表' },
          { key: 'returnorder', name: '退货单' },
          { key: 'accountstatement', name: '对账单' }
        ],

        selection: [], //单选中集合
        delVisible: false, //批量删除弹框状态
        loading: false, // 加载状态
        processSubmitDialogFlag: false,
        addOrEditDialogFlag: false,
        addOrEditDialogFlag1: false,
        params: {},
        columns: [
          {
            width: 45,
            type: 'selection',
            columnKey: 'selection',
            align: 'center'
          },
          {
            columnKey: 'index',
            label: '序号',
            type: 'index',
            width: 55,
            align: 'center',
            showOverflowTooltip: true,
            fixed: 'left'
          },
          {
            prop: 'orderNo',
            label: '订单编码',
            align: 'center',
            sortable: true,
            slot: 'orderNo',
            showOverflowTooltip: true,
            minWidth: 200,
            fixed: 'left'
          },
          {
            prop: 'sourceTypeName',
            label: '订单类型',
            align: 'center',
            sortable: true,
            showOverflowTooltip: true,
            minWidth: 200,
            fixed: 'left'
          },
          {
            prop: 'progress',
            label: '订单进度',
            align: 'center',
            showOverflowTooltip: true,
            formatter: (_row, _column, cellValue) => {
              return purchaseOrderProgressStatusEnum.find(
                (val) => val.value == _row.progress
              )?.label;
            },
            minWidth: 120
          },
          {
            prop: 'contractNo',
            label: '来源单据',
            align: 'center',
            slot: 'contractNo',
            showOverflowTooltip: true,
            minWidth: 250
          },
          // {
          //   prop: 'deliveryDate',
          //   label: '交货日期',
          //   align: 'center',
          //   showOverflowTooltip: true,
          //   minWidth: 200
          // },
          // {
          //   prop: 'purchaseTypeName',
          //   label: '采购订单类型',
          //   align: 'center',
          //   showOverflowTooltip: true,
          //   minWidth: 140
          // },
          {
            prop: 'partaName',
            label: '采购方名称',
            align: 'center',
            showOverflowTooltip: true,
            minWidth: 200
          },
          {
            prop: 'partaLinkName',
            label: '采购方联系人',
            align: 'center',
            showOverflowTooltip: true,
            minWidth: 130
          },

          {
            prop: 'partaTel',
            label: '采购方联系电话',
            align: 'center',
            showOverflowTooltip: true,
            minWidth: 130
          },
          {
            prop: 'productNames',
            label: '名称',
            align: 'center',
            showOverflowTooltip: true,
            minWidth: 200
          },
          {
            prop: 'productCodes',
            label: '编码',
            align: 'center',
            showOverflowTooltip: true,
            minWidth: 140
          },
          {
            prop: 'batchNos',
            label: '批次号',
            align: 'center',
            showOverflowTooltip: true,
            minWidth: 140
          },
          {
            prop: 'productCount',
            label: '数量',
            align: 'center',
            showOverflowTooltip: true,
            minWidth: 140
          },

          {
            prop: 'partbName',
            label: '供应商名称',
            align: 'center',
            showOverflowTooltip: true,
            minWidth: 250
          },
          {
            prop: 'partbLinkName',
            label: '供应商联系人',
            align: 'center',
            showOverflowTooltip: true,
            minWidth: 120
          },
          {
            prop: 'partbTel',
            label: '供应商联系电话',
            align: 'center',
            showOverflowTooltip: true,
            minWidth: 130
          },
          {
            prop: 'payAmount',
            label: '金额(元)',
            align: 'center',
            showOverflowTooltip: true,
            minWidth: 140
          },
          {
            prop: 'createUserName',
            label: '创建人',
            align: 'center',
            showOverflowTooltip: true,
            minWidth: 170
          },
          {
            prop: 'createTime',
            label: '创建时间',
            align: 'center',
            showOverflowTooltip: true,
            minWidth: 170
          },
          {
            prop: 'orderStatus',
            label: '审核状态',
            align: 'center',
            showOverflowTooltip: true,
            minWidth: 100,
            formatter: (_row, _column, cellValue) => {
              return reviewStatus[_row.orderStatus];
            }
          },
          {
            columnKey: 'action',
            label: '操作',
            width: 230,
            align: 'center',
            resizable: false,
            slot: 'action',
            showOverflowTooltip: true,
            fixed: 'right'
          }
        ],
        cacheKeyUrl: 'eos-5f2ac512-purchaseOrder-saleorder',
        isRequired: true
      };
    },
    computed: {},
    created() {
      this.requestDict('客户状态');
      parameterGetByCode({
        code: 'order_person_info'
      }).then((res) => {
        if (res.value) {
          this.isRequired = res.value === '1';
        }
      });
    },
    methods: {
      //更多菜单
      handleCommand(command, row) {
        console.log(command, row);
        if (command === 'invoice') {
          this.$refs.invoiceDialogRef.open('add', {}, row.id);
        }
        if (command === 'returnOrder') {
          this.$refs.addReturnGoodsRef.open('add', {});
        }
        if (command === 'outsourceSend') {
          this.addOrEditDialogFlag = true;

          this.$nextTick(() => {
            this.$refs.addOrEditDialogRef.open('add', {}, row.id);
          });
        }
        if (command === 'invoiceManage') {
          this.addOrEditDialogFlag1 = true;

          this.$nextTick(() => {
            this.$refs.addOrEditDialogRef.createInvoice1(row, 2, 3);
          });
        }
      },

      //点击左边分类
      handleNodeClick(data, node) {
        // this.curNodeData = data;
        this.reload({ categoryId: data.id });
      },
      /* 表格数据源 */
      datasource({ page, limit, where, order }) {
        this.params = {
          pageNum: page,
          size: limit,
          ...where
        };
        return getTableList(this.params);
      },

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

      //新增编辑
      openEdit(type, row) {
        this.$refs.addDialogRef.open(type, row, row.id);
        this.$refs.addDialogRef.$refs.form &&
          this.$refs.addDialogRef.$refs.form.clearValidate();
      },
      uploadFile() {
        this.$refs.importDialogRef.open();
      },
      //批量删除
      allDelBtn() {
        if (this.selection.length === 0) return;
        let flag = this.selection.some((item) =>
          [1, 2].includes(item.orderStatus)
        );
        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);
      },

      //查看详情
      openorderDetail(row) {
        this.$refs.contactDetailDialogRef.open(row);
      },
      saleOrderSubmit(res) {
        this.processSubmitDialogFlag = true;
        this.$nextTick(() => {
          let params = {
            businessId: res.id,
            businessKey: 'purchase_order_approve',
            formCreateUserId: res.createUserId,
            variables: {
              businessCode: res.orderNo,
              businessName: res.partaName,
              businessType: res.sourceTypeName
            }
          };

          this.$refs.processSubmitDialogRef.init(params);
        });
      },
      //查看合同详情
      opencontractDetail(row) {
        let data = {
          id: row.contractId
        };
        this.$refs.contractDetailRef.open(data);
      }
    }
  };
</script>

<style lang="scss" scoped>
  :deep .el-card__body {
    padding: 0;
  }

  :deep(.el-link--inner) {
    margin-left: 0px !important;
  }

  .sys-organization-list {
    height: calc(100vh - 264px);
    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;
    }
  }

  .switch_left ul .active {
    border-top: 4px solid var(--color-primary);
    color: var(--color-primary-5);
  }

  .switch {
    padding-bottom: 20px;
  }

  .el-dropdown-link {
    cursor: pointer;
    color: var(--color-primary-5);
  }

  .el-icon-arrow-down {
    font-size: 12px;
  }
</style>
