<template>
  <ele-modal
    :modal="isModal"
    custom-class="ele-dialog-form long-dialog-form"
    :centered="true"
    v-if="visible"
    :visible.sync="visible"
    :append-to-body="true"
    :title="title"
    :close-on-click-modal="false"
    width="80%"
    @close="cancel"
    :maxable="true"
    :resizable="true"
  >
    <div class="switch">
      <div class="switch_left">
        <ul>
          <li
            v-for="item in tabOptions"
            :key="item.key"
            :class="{ active: activeComp == item.key }"
            @click="handleTag(item.key)"
          >
            {{ item.name }}
          </li>
        </ul>
      </div>
    </div>
    <div v-show="activeComp == 'main'">
      <el-form ref="form" :model="form" class="el-form-box" label-width="120px">
        <headerTitle title="基本信息"> </headerTitle>
        <el-row>
          <el-col :span="form?.sourceId ? 8 : 12">
            <el-form-item label="需求类型：" prop="sourceTypeName">
              <el-input v-model="form.sourceTypeName" disabled></el-input>
            </el-form-item>
            <el-form-item label="计划单名称：" prop="planName">
              <el-input v-model="form.planName" disabled></el-input>
              <!-- {{ form.requirementCode }} -->
            </el-form-item>
            <el-form-item label="需求部门：" prop="requireDeptName">
              <el-input v-model="form.requireDeptName" disabled></el-input>
            </el-form-item>
            <el-form-item prop="remark" label="是否接受拆单：">
              <el-select
                v-model="form.acceptUnpack"
                placeholder="请选择"
                disabled
                style="width: 100%"
              >
                <el-option label="接受" :value="1"></el-option>
                <el-option label="不接受" :value="0"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="完结日期：" prop="receiveDate">
              <el-input v-model="form.receiveDate" disabled></el-input>
            </el-form-item>
            <el-form-item prop="files" label="附件：">
              <fileMain v-model="form.files" type="view"></fileMain>
            </el-form-item>
          </el-col>
          <el-col :span="form?.sourceId ? 8 : 12">
            <el-form-item label="需求单名称：" prop="requirementCode">
              <el-input v-model="form.requirementName" disabled>
                <template slot="append" v-if="form?.requirementName">
                  <el-button
                    type="primary"
                    @click="openDetail(form)"
                    title="查看详情"
                    icon="el-icon-view"
                  ></el-button>
                </template>
              </el-input>
            </el-form-item>
            <el-form-item label="负责人：" prop="responsibleName">
              <el-input v-model="form.responsibleName" disabled></el-input>
            </el-form-item>
            <el-form-item label="需求人：" prop="requireUserName">
              <el-input v-model="form.requireUserName" disabled></el-input>
            </el-form-item>
            <el-form-item prop="remark" label="是否需要核价：">
              <el-select
                v-model="form.needInquiry"
                placeholder="请选择"
                disabled
                style="width: 100%"
              >
                <el-option label="是" :value="1"></el-option>
                <el-option label="否" :value="0"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item prop="remark" label="备注：">
              <el-input v-model="form.remark" disabled></el-input>
            </el-form-item>
          </el-col>
          <el-col v-if="form?.sourceId" :span="8">
            <outsourcing ref="outsourcingRef"></outsourcing>
          </el-col>
        </el-row>
      </el-form>
      <headerTitle title="计划清单" style="margin-top: 15px"></headerTitle>
      <el-tabs v-model="activeName" style="margin-top: 15px" type="border-card">
        <el-tab-pane label="物品清单" name="1">
          <ele-pro-table
            ref="table"
            :needPage="false"
            :columns="columns"
            @columns-change="handleColumnChange"
            :cache-key="cacheKeyUrl"
            :max-height="500"
            :datasource="detailData.detailList"
            row-key="id"
          >
            <template v-slot:expectReceiveDate="scope">
              <div v-if="scope.row.arrivalWay == 1">
                {{ scope.row.expectReceiveDate }}
              </div>
              <div v-if="scope.row.arrivalWay == 2">
                <el-link
                  type="primary"
                  :underline="false"
                  @click.native="handleMethod(scope.row)"
                >
                  查看分批时间
                </el-link>
              </div>
            </template>

            <template v-slot:technicalDrawings="{ row }">
              <fileMain v-model="row.technicalDrawings" type="view"></fileMain>
            </template>
            <template v-slot:files="{ row }">
              <fileMain v-model="row.files" type="view"></fileMain>
            </template>
          </ele-pro-table>
        </el-tab-pane>
        <el-tab-pane
          label="带料清单"
          name="2"
          v-if="orderSourceType.includes(form.sourceType)"
        >
          <ele-pro-table
            ref="table"
            :needPage="false"
            :columns="columns"
            :toolkit="[]"
            :max-height="500"
            :datasource="detailData.rawDetailList"
            row-key="id"
          >
            <template v-slot:expectReceiveDate="scope">
              <div v-if="scope.row.arrivalWay == 1">
                {{ scope.row.expectReceiveDate }}
              </div>
              <div v-if="scope.row.arrivalWay == 2">
                <el-link
                  type="primary"
                  :underline="false"
                  @click.native="handleMethod(scope.row)"
                >
                  {{ scope.row.expectReceiveDate }}
                </el-link>
              </div>
            </template>

            <template v-slot:technicalDrawings="{ row }">
              <fileMain v-model="row.technicalDrawings" type="view"></fileMain>
            </template>
            <template v-slot:files="{ row }">
              <fileMain v-model="row.files" type="view"></fileMain>
            </template>
          </ele-pro-table>
        </el-tab-pane>
        <el-tab-pane
          label="产出清单"
          name="3"
          v-if="orderSourceType.includes(form.sourceType)"
        >
          <ele-pro-table
            ref="table"
            :needPage="false"
            :columns="columns"
            :max-height="500"
            :datasource="detailData.outputDetailList"
            row-key="id"
          >
            <template v-slot:expectReceiveDate="scope">
              <div v-if="scope.row.arrivalWay == 1">
                {{ scope.row.expectReceiveDate }}
              </div>
              <div v-if="scope.row.arrivalWay == 2">
                <el-link
                  type="primary"
                  :underline="false"
                  @click.native="handleMethod(scope.row)"
                >
                  {{ scope.row.expectReceiveDate }}
                </el-link>
              </div>
            </template>

            <template v-slot:technicalDrawings="{ row }">
              <fileMain v-model="row.technicalDrawings" type="view"></fileMain>
            </template>
            <template v-slot:files="{ row }">
              <fileMain v-model="row.files" type="view"></fileMain>
            </template>
          </ele-pro-table>
        </el-tab-pane>
      </el-tabs>
    </div>

    <bpmDetail
      v-if="activeComp === 'bpm' && form.processInstanceId"
      :id="form.processInstanceId"
    ></bpmDetail>
    <div slot="footer" class="footer">
      <el-button @click="cancel">返回</el-button>
    </div>
    <timeDialog ref="timeDialogRef" :view="true"></timeDialog>

    <detail-dialog
      ref="contactDetailDialogRef"
      :isModal="false"
    ></detail-dialog>
    <inquiryManageIndex
      v-if="activeComp === 'inquiryManage'"
      :purchasePlanId="form.id"
      :sonPurchasePlanIds="sonPurchasePlanList.map((item) => item.id)"
    ></inquiryManageIndex>
    <!--入库详情-->
    <innerBoundDetails
      v-if="
        activeComp == 'store' &&
        form.status == 2 &&
        ['3', '4', '5'].includes(form.sourceType)
      "
      ref="innerBoundDetailsRef"
    ></innerBoundDetails>
  </ele-modal>
</template>

<script>
  import { getplanDetail } from '@/api/purchasingManage/purchasePlanManage';
  import { getFile } from '@/api/system/file';
  import dictMixins from '@/mixins/dictMixins';
  import { copyObj } from '@/utils/util';
  import detailDialog from '../../../purchasingManage/purchaseNeedManage/components/detailDialog.vue';
  import bpmDetail from '@/views/bpm/processInstance/detail.vue';
  import timeDialog from '@/components/timeDialog/index.vue';
  // import fileMain from '@/components/addDoc/index.vue';
  import outsourcing from './outsourcing.vue';
  import { orderSourceType } from '@/enum/dict';
  import tabMixins from '@/mixins/tableColumnsMixin';
  import inquiryManageIndex from '@/views/purchasingManage/inquiryManage/index.vue';
  import innerBoundDetails from '@/BIZComponents/innerdetails.vue';

  export default {
    mixins: [dictMixins, tabMixins],
    components: {
      // fileMain,
      detailDialog,
      bpmDetail,
      timeDialog,
      outsourcing,
      inquiryManageIndex,
      innerBoundDetails
    },
    props: {
      isModal: {
        default: true
      }
    },
    data() {
      return {
        cacheKeyUrl:
          'eos-purchasingManage-purchasePlanManage-inventoryTableDetail',
        orderSourceType,
        activeComp: 'main',
        tabOptions: [
          { key: 'main', name: '计划详情' },
          { key: 'bpm', name: '流程详情' },
          { key: 'inquiryManage', name: '核价清单' },
          { key: 'store', name: '入库详情' }
        ],
        activeName: '1',
        fullscreen: false,
        visible: false,
        detailId: '',
        title: '详情',
        row: {},
        form: {},
        sonPurchasePlanList: [],
        detailData: {},
        columns: [
          {
            width: 45,
            type: 'index',
            columnKey: 'index',
            align: 'center',
            fixed: 'left'
          },
          {
            width: 150,
            prop: 'productCategoryName',
            label: '分类',
            slot: 'productCategoryName',
            align: 'center'
          },
          {
            width: 140,
            prop: 'productCode',
            label: '编码',
            slot: 'productCode',
            align: 'center'
          },
          {
            width: 240,
            prop: 'productName',
            label: '名称',
            slot: 'productName',
            align: 'center'
          },
          {
            minWidth: 100,
            label: '状态',
            fixed: 'left',
            formatter: (row, column) => {
              return row.isInquiry == 1
                ? '部分核价'
                : row.isInquiry == 2
                ? '全部核价完成'
                : row.isInquiry == 3
                ? '核价中'
                : '未核价';
            },
            align: 'center'
          },
          {
            width: 110,
            prop: 'batchNo',
            label: '批次号',
            slot: 'batchNo',
            align: 'center'
          },
          {
            prop: 'provenance',
            label: '产地',
            slot: 'provenance',
            align: 'center',
            minWidth: 200,
            showOverflowTooltip: true,
            formatter: (row, column) => {
              return row.provenance && row.provenance.length
                ? row.provenance
                    .map((item) => this.getDictValue('产地', item))
                    .join(',')
                : '';
            }
          },
          {
            width: 150,
            prop: 'taskName',
            label: '工序',
            slot: 'taskName',
            align: 'center'
          },
          {
            width: 150,
            prop: 'productBrand',
            label: '牌号',
            slot: 'productBrand',
            align: 'center'
          },
          {
            width: 80,
            prop: 'totalCount',
            label: '数量',
            slot: 'totalCount',
            align: 'center'
          },
          {
            width: 200,
            prop: 'warehouseName',
            label: '入库仓库',
            align: 'center'
          },
          {
            width: 150,
            prop: 'reqTotalCount',
            label: '需求数量',
            align: 'center'
          },
          {
            width: 150,
            prop: 'inquiryNum',
            label: '已核价数量',
            align: 'center'
          },
          {
            width: 150,
            prop: 'splitTotalCount',
            label: '已拆分数量',
            align: 'center'
          },
          {
            width: 80,
            prop: 'doneTotalCount',
            label: '已采数量',
            align: 'center'
          },
          {
            width: 80,
            prop: 'waitTotalCount',
            label: '待采数量',
            align: 'center'
          },
          // {
          //   width: 120,
          //   prop: 'singleWeight',
          //   label: '单重',
          //   slot: 'singleWeight',
          //   align: 'center'
          // },
          {
            width: 120,
            prop: 'totalWeight',
            label: '重量',
            slot: 'totalWeight',
            align: 'center'
          },
          {
            width: 150,
            prop: 'inquiryWeight',
            label: '已核价重量',
            align: 'center'
          },
          {
            width: 100,
            prop: 'measuringUnit',
            label: '单位',
            slot: 'measuringUnit',
            align: 'center'
          },
          {
            width: 130,
            prop: 'modelType',
            label: '型号',
            slot: 'modelType',
            align: 'center'
          },

          {
            width: 120,
            prop: 'specification',
            label: '规格',
            slot: 'specification',
            align: 'center'
          },
          // {
          //   width: 130,
          //   prop: 'modelType',
          //   label: '品牌',
          //   slot: 'modelType'
          // },

          {
            width: 150,
            prop: 'arrivalWay',
            label: '到货方式',
            formatter: (row, column, cellValue) => {
              return cellValue == 1 ? '一次性到货' : '分批到货';
            },
            align: 'center'
          },
          {
            width: 170,
            prop: 'receiveDate',
            label: '到货日期',
            slot: 'expectReceiveDate',
            align: 'center'
          },

          {
            width: 130,
            prop: 'supplierName',
            label: '供应商',
            slot: 'supplierName',
            headerSlot: 'headerSupplierName',
            align: 'center'
          },
          {
            width: 120,
            prop: 'packingSpecification',
            align: 'center',
            label: '包装规格',
            showOverflowTooltip: true
          },
          {
            width: 160,
            prop: 'technicalDrawings',
            label: '图纸附件',
            slot: 'technicalDrawings',
            align: 'center'
          },
          {
            width: 140,
            prop: 'files',
            label: '附件',
            slot: 'files',
            align: 'center'
          },
          {
            width: 220,
            prop: 'remark',
            label: '备注',
            slot: 'remark',
            align: 'center'
          }
        ]
      };
    },
    created() {
      this.requestDict('产地');
    },
    methods: {
      // //导出
      // async exportTable() {
      //   this.loading = true;
      //   const response = await getExport(this.detailId);
      // },
      handleTag(val) {
        this.activeComp = val;
        if (val == 'store') {
          this.$nextTick(() => {
            this.$refs.innerBoundDetailsRef._getInfo(this.form.planCode);
          });
        }
      },
      async open(row) {
        this.activeName = '1';
        this.activeComp = 'main';

        this.sonPurchasePlanList = row.sonPurchasePlanList || [];
        this.visible = true;
        this.getPlanData(row.planId || row.id);
        this.detailId = row.id;
      },

      cancel() {
        this.$nextTick(() => {
          // 关闭后，销毁所有的表单数据
          (this.form = copyObj(this.formDef)),
            (this.otherForm = copyObj(this.otherFormDef)),
            (this.tableBankData = []);
          this.tableLinkData = [];
          this.visible = false;
        });
      },
      handleMethod(row) {
        this.$refs.timeDialogRef.open(row);
      },
      downloadFile(file) {
        getFile({ objectName: file.storePath }, file.name);
      },
      async getPlanData(id) {
        this.loading = true;
        const data = await getplanDetail(id);
        this.loading = false;
        if (data) {
          this.detailData = data;
          this.form = data;
          this.$nextTick(() => {
            this.$refs.outsourcingRef &&
              this.$refs.outsourcingRef.init(data.sourceId);
          });

          if (data.files && data.files.length > 0) {
            this.form.files = data.files[0];
          } else {
            this.form.files = null;
          }
        }
      },

      //查看详情
      openDetail(row) {
        console.log(row);
        this.$refs.contactDetailDialogRef.open(row);
      }
    }
  };
</script>

<style scoped lang="scss">
  .ele-dialog-form {
    .el-form-item {
      margin-bottom: 10px;
    }
  }

  .headbox {
    display: flex;
    justify-content: space-between;
    align-items: center;
    .amount {
      font-size: 14px;
      font-weight: bold;
    }
  }
</style>
