<template>
  <!-- 新增 发运明细 -->
  <div id="AddShipDetDrawer">
    <a-drawer
      title="新增发运明细"
      width="89%"
      placement="right"
      :closable="true"
      :visible="visible"
      @close="handleCancel"
    >
      <!-- 主表信息 填写-->
      <a-card :bordered="true">
        <div class="table-page-search-wrapper">
          <!-- :rules="validatorRules" -->
          <a-form-model layout="inline" ref="form" :model="addShipDet" :rules="validatorRules">
            <a-row :gutter="24">
              <a-col :md="6" :sm="8">
                <!-- required 必填项 disabled 禁用  -->
                <a-form-model-item label="单据号" prop="documentNo">
                  <a-input placeholder="自动生成" v-model="addShipDet.documentNo" readOnly></a-input>
                </a-form-model-item>
              </a-col>

              <a-col :md="6" :sm="8">
                <a-form-model-item label="单据日期" prop="documentDate">
                  <a-date-picker
                    placeholder="请选择单据日期"
                    format="YYYY-MM-DD"
                    style="width:100%;"
                    v-model="addShipDet.documentDate"
                  />
                </a-form-model-item>
              </a-col>

              <a-col :md="6" :sm="8">
                <a-form-model-item label="客户" prop="customer">
                  <a-input placeholder="请输入客户" v-model="addShipDet.customer"></a-input>
                </a-form-model-item>
              </a-col>

              <!-- <a-col :md="6" :sm="8">
                <a-form-model-item label="预发货日期" prop="preDeliveryDate">
                  <a-date-picker
                    placeholder="请选择预发货时间"
                    format="YYYY-MM-DD"
                    style="width:100%;"
                    v-model="addShipDet.preDeliveryDate"
                  />
                </a-form-model-item>
              </a-col> -->

              <!-- <a-col :md="6" :sm="8">
                <a-form-model-item label="预完工日期" prop="preCompletionDate">
                  <a-date-picker
                    placeholder="请选择预完工日期"
                    format="YYYY-MM-DD"
                    style="width:100%;"
                    v-model="addShipDet.preCompletionDate"
                  />
                </a-form-model-item>
              </a-col> -->

              <a-col :md="6" :sm="8">
                <a-form-model-item label="订单类型" prop="orderType">
                  <a-input placeholder="请输入订单类型" v-model="addShipDet.orderType"></a-input>
                </a-form-model-item>
              </a-col>

              <!-- <a-col :md="6" :sm="8">
                <a-form-model-item label="成衣工厂" prop="garmentFactory">
                  <a-input placeholder="请输入成衣工厂" v-model="addShipDet.garmentFactory"></a-input>
                </a-form-model-item>
              </a-col> -->
<!-- 
              <a-col :md="6" :sm="8">
                <a-form-model-item label="整单合计" prop="wholeOrderTotal">
                  <a-input placeholder="整单合计" v-model="addShipDet.wholeOrderTotal"></a-input>
                </a-form-model-item>
              </a-col> -->

              <!-- U8系统适用 -->
              <a-col :md="12" :sm="12">
                <a-form-model-item label="备注" prop="memo">
                  <a-input placeholder="U8系统适用" v-model="addShipDet.memo"></a-input>
                </a-form-model-item>
              </a-col>
            </a-row>
          </a-form-model>
        </div>
      </a-card>

      <!--  参照订单数据 増行-->
      <a-card :bordered="true" style="margin:10px 0">
        <div class="table-operator">
          <a-button type="primary" @click.stop="referOrderDataOpen" icon="ordered-list">参照订单数据</a-button>
          <!-- <a-button type="primary" @click.stop="handleAddColumn" icon="plus" style="margin-left: 20px">増行</a-button> -->
        </div>

        <!-- 子表  :model="form"  rowKey="id" ,y:800 -->
        <a-spin :spinning="confirmLoading">
          <a-form-model ref="formRef">
            <a-table
              :loading="loading"
              v-if="syShippingDetailsItemList"
              bordered
              :rowKey="record => record.id"
              :columns="columns"
              :data-source="syShippingDetailsItemList"
              :pagination="false"
              :scroll="{ x: 1500, y: 400 }"
              size="small"
            >
              <!-- 款号 输入框 :rules="rules.itemNumber" -->
              <template slot="itemNumber" slot-scope="text, record, index">
                <a-form-model-item prop="itemNumber">
                  <a-input style="width:100%" type="text" v-model="record.itemNumber" readOnly />
                </a-form-model-item>
              </template>

              <!-- 发货数量 :rules="rules.shipQuantity"-->
              <template slot="shipmentQuantity" slot-scope="text, record, index">
                <a-form-model-item prop="shipmentQuantity">
                  <a-input style="width:100%" type="text" v-model="record.shipmentQuantity" />
                </a-form-model-item>
              </template>

              <!-- 是否TC功能 :rules="rules.isTC"-->
              <!-- isTc ' 是否 tc 功能 0 否 1 是', -->
              <template slot="isTC" slot-scope="text, record, index">
                <a-form-model-item prop="isTc">
                  <a-select v-model="record.isTc">
                    <a-select-option value="">请选择</a-select-option>
                    <a-select-option :value="1">是</a-select-option>
                    <a-select-option :value="0">否</a-select-option>
                  </a-select>
                </a-form-model-item>
              </template>

              <!-- 物料成分 :rules="rules.materialComposition"-->
              <template slot="materialComposition" slot-scope="text, record, index">
                <a-form-model-item prop="materialComposition">
                  <a-input style="width:100%" type="text" v-model="record.materialComposition" />
                </a-form-model-item>
              </template>

              <!-- 采购/委外订单号 :rules="rules.purOrSubOrder"-->
              <template slot="purOrSubOrder" slot-scope="text, record, index">
                <a-form-model-item prop="purOrSubOrder">
                  <a-input style="width:100%" type="text" v-model="record.purOrSubOrder" />
                </a-form-model-item>
              </template>

              <!-- 报关单价 :rules="rules.customsDeclarationUnitPrice"-->
              <template slot="customsDeclarationUnitPrice" slot-scope="text, record, index">
                <a-form-model-item prop="customsDeclarationUnitPrice">
                  <a-input style="width:100%" type="text" v-model="record.customsDeclarationUnitPrice" />
                </a-form-model-item>
              </template>
              <!-- 套装件数 :rules="rules.numberOfSets"-->
              <template slot="numberOfSets" slot-scope="text, record, index">
                <a-form-model-item prop="numberOfSets">
                  <a-input style="width:100%" type="text" v-model="record.numberOfSets" />
                </a-form-model-item>
              </template>

              <!-- 工厂单价 :rules="rules.factoryUnitPrice"-->
              <template slot="factoryUnitPrice" slot-scope="text, record, index">
                <a-form-model-item prop="factoryUnitPrice">
                  <a-input style="width:100%" type="text" v-model="record.factoryUnitPrice" />
                </a-form-model-item>
              </template>

              <!--处理方式 -->
              <template slot="treatmentMethod" slot-scope="text, record, index">
                <a-form-model-item prop="treatmentMethod">
                  <a-input style="width:100%" type="text" v-model="record.treatmentMethod" />
                </a-form-model-item>
              </template>

              <!--是否手册纱 -->
              <template slot="manualYarnFlag" slot-scope="text, record, index">
                <a-form-model-item prop="manualYarnFlag">
                  <a-select v-model="record.manualYarnFlag">
                    <a-select-option value="">请选择</a-select-option>
                    <a-select-option :value="1">是</a-select-option>
                    <a-select-option :value="0">否</a-select-option>
                  </a-select>
                </a-form-model-item>
              </template>

              <!--手册纱单价 -->
              <template slot="manualYarnUnitPrice" slot-scope="text, record, index">
                <a-form-model-item prop="manualYarnUnitPrice">
                  <a-input style="width:100%" type="text" v-model="record.manualYarnUnitPrice" />
                </a-form-model-item>
              </template>

              <!--手册纱占比 -->
              <template slot="manualYarnProportion" slot-scope="text, record, index">
                <a-form-model-item prop="manualYarnProportion">
                  <a-input style="width:100%" type="text" v-model="record.manualYarnProportion" />
                </a-form-model-item>
              </template>

              <!-- 操作 -->
              <template slot="operationSlot" slot-scope="text, record, index">
                <a-popconfirm
                  v-if="syShippingDetailsItemList.length"
                  title="确定删除吗?"
                  @confirm="handleDelete(index)"
                >
                  <a href="javascript:void(0);" style="color:red;">删除</a>
                </a-popconfirm>

                <a-divider type="vertical" />

                <a @click="copy(record)">复制</a>
              </template>
            </a-table>
          </a-form-model>
        </a-spin>
      </a-card>

      <!-- 页面底部保存取消 -->
      <div
        :style="{
          position: 'absolute',
          right: 0,
          bottom: 0,
          width: '100%',
          borderTop: '1px solid #e9e9e9',
          padding: '10px 16px',
          background: '#fff',
          textAlign: 'right',
          zIndex: 1
        }"
      >
        <a-popconfirm title="确定放弃新增？" @confirm="handleCancel" okText="确定" cancelText="取消">
          <a-button :style="{ marginRight: '8px' }">取消</a-button>
        </a-popconfirm>
        <a-button type="primary" @click="addSave">
          保存
        </a-button>
      </div>
    </a-drawer>

    <!-- 参照订单数据弹框 -->
    <referOrderData-modal ref="referOrderDataModal" @bao="getSon" @ok="referOrderDataOk"></referOrderData-modal>
  </div>
</template>

<script>
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import JEllipsis from '@/components/jeecg/JEllipsis'
import moment from 'moment'

import ReferOrderDataModal from '@views/shipment-details/referOrderDataModal.vue'

import { addShipmentList } from '@api/document/shipmentList'

export default {
  name: 'AddShipDetDrawer', // 新增 发运明细 抽屉
  mixins: [JeecgListMixin],
  components: { JEllipsis, ReferOrderDataModal, moment }, // 参照订单数据 弹框
  data() {
    let ellipsis = (v, l = 20) => <j-ellipsis value={v} length={l} />
    return {
      id: '',
      validatorRules:{
          documentDate:[{required: true, message: '请输入单据日期!'}],
         // customer:[{required: true, message: '请选择客户!'}],
         // preDeliveryDate:[{required: true, message: '请选择预发货时间!'}],
         // preCompletionDate:[{required: true, message: '请选择预完工日期!'}],
         // orderType:[{required: true, message: '请输入订单类型!'}],
        },
      // 表头
      columns: [
        {
          title: '账套',
          dataIndex: 'account',
          width: 80,
          fixed: 'left',
          className: 'replacecolor'
        },
        {
          title: '订单号',
          dataIndex: 'orderNumber',
          width: 120,
          fixed: 'left',
          className: 'replacecolor'
        },
        {
          title: '款号',
          dataIndex: 'itemNumber',
          fixed: 'left',
          width: 180,
          className: 'replacecolor'
        },
        {
          title: '订单日期',
          dataIndex: 'orderDate',
          width: 120,
          className: 'replacecolor',
          customRender: text => {
            return moment(text).format('YYYY-MM-DD')
          }
        },
        
         {
          title: '预发货日期',
          dataIndex: 'preDeliveryDate',
          width: 100,
          className: 'replacecolor',
        
        },
         {
          title: '预完工日期',
          dataIndex: 'preCompletionDate',
          width: 100,
          className: 'replacecolor',
         
        },
         {
          title: '成衣工厂',
          dataIndex: 'garmentFactory',
          width: 100,
          className: 'replacecolor'
        },
        {
          title: '业务类型',
          dataIndex: 'businessTypeText',
          width: 120,
          className: 'replacecolor'
        },
        {
          title: '订单主表ID',
          dataIndex: 'syOrderDataId',
          width: 100,
          className: 'replacecolor'
        },
        {
          title: '客户订单',
          dataIndex: 'customerOrder',
          width: 120,

          className: 'replacecolor'
        },
        {
          title: '小po',
          dataIndex: 'smallPo',
          width: 120,
          className: 'replacecolor'
        },
        {
          title: 'Pack Id',
          dataIndex: 'packId',
          width: 120,
          className: 'replacecolor'
        },
        {
          title: '分销点',
          dataIndex: 'distributionPoint',
          width: 120,
          className: 'replacecolor'
        },
        {
          title: '采购/委外订单号',
          dataIndex: 'purOrSubOrder',
          scopedSlots: { customRender: 'purOrSubOrder' },
          // fixed: 'left',
          width: 180,
          className: 'replacecolor'
        },
        {
          title: ' 报关单价',
          dataIndex: 'customsDeclarationUnitPrice',
          scopedSlots: { customRender: 'customsDeclarationUnitPrice' },
          // fixed: 'left',
          width: 180,
          className: 'replacecolor'
        },

        {
          title: '订单数量',
          dataIndex: 'orderQuantity',
          width: 120,
          className: 'replacecolor'
        },
        {
          title: '订单剩余数量',
          dataIndex: 'orderRemainingQuantity',
          width: 120,
          className: 'replacecolor'
        },

        {
          title: '发货数量',
          dataIndex: 'shipmentQuantity',
          scopedSlots: { customRender: 'shipmentQuantity' },
          width: 120,
        },

        {
          title: '套装件数',
          dataIndex: 'numberOfSets',
          scopedSlots: { customRender: 'numberOfSets' },
          width: 120,
          className: 'replacecolor'
        },
        {
          title: '是否TC功能',
          dataIndex: 'isTC',
          width: 90,
          scopedSlots: { customRender: 'isTC' },
          className: 'replacecolor'
        },
        {
          title: '物料成分',
          dataIndex: 'materialComposition',
          scopedSlots: { customRender: 'materialComposition' },
          width: 140,
          className: 'replacecolor'
        },

        {
          title: '销售类型',
          dataIndex: 'salesTypeText',
          width: 120,
          className: 'replacecolor'
        },
        {
          title: '客户简称',
          dataIndex: 'customerAbbreviation',
          width: 220,
          align: 'left',
          className: 'replacecolor'
        },
        {
          title: '客户名称',
          dataIndex: 'customerName',
          width: 220,
          align: 'left',
          className: 'replacecolor'
        },
        {
          title: '汇率',
          dataIndex: 'exchangeRate',
          width: 120,
          className: 'replacecolor'
        },

        {
          title: '销售部门',
          dataIndex: 'salesDepartment',
          width: 120,
          className: 'replacecolor'
        },
        {
          title: '业务员',
          dataIndex: 'salesman',
          width: 120,
          className: 'replacecolor'
        },
        {
          title: '币种',
          dataIndex: 'currencyText',
          width: 120,
          className: 'replacecolor'
        },

        {
          title: '品牌方',
          dataIndex: 'brandSide',
          width: 120,
          className: 'replacecolor'
        },
        {
          title: '第三方',
          dataIndex: 'thirdParty',
          width: 220,
          align: 'left',
          className: 'replacecolor'
        },
        {
          title: '定金比例(%)',
          dataIndex: 'depositRatio',
          width: 120,
          className: 'replacecolor'
        },
        {
          title: '定金',
          dataIndex: 'deposit',
          width: 120,
          className: 'replacecolor'
        },
        {
          title: '协同路线',
          dataIndex: 'collaborativeRoute',
          width: 120,
          className: 'replacecolor'
        },

        {
          title: '单价(销售)',
          dataIndex: 'salesUnitPrice',
          width: 120,
          className: 'replacecolor'
        },
        {
          title: '工厂单价',
          dataIndex: 'factoryUnitPrice',
          width: 120,
          scopedSlots: { customRender: 'factoryUnitPrice' },
          className: 'replacecolor'
        },
        {
          title: '付款条件',
          dataIndex: 'termOfPayment',
          width: 160,
          customRender: t => ellipsis(t),
          className: 'replacecolor'
        },
        {
          title: '最终客户',
          dataIndex: 'endCustomer',
          width: 120,
          className: 'replacecolor'
        },
        {
          title: '订单备注',
          dataIndex: 'orderRemarks',
          width: 160,
          customRender: t => ellipsis(t),
          className: 'replacecolor'
        },
        {
          title: '价格备注',
          dataIndex: 'priceRemarks',
          width: 160,
          customRender: t => ellipsis(t),
          className: 'replacecolor'
        },
        {
          title: '订单变更说明',
          dataIndex: 'orderChangeDescription',
          width: 160,
          customRender: t => ellipsis(t),
          className: 'replacecolor'
        },
        {
          title: '订单子表ID',
          dataIndex: 'syOrderDataItemId',
          width: 160,
          className: 'replacecolor'
        },

        {
          title: '处理方式',
          dataIndex: 'treatmentMethod',
          width: 160,
          scopedSlots: { customRender: 'treatmentMethod' },
          className: 'replacecolor'
        },
        {
          title: '是否手册纱',
          dataIndex: 'manualYarnFlag',
          width: 100,
          scopedSlots: { customRender: 'manualYarnFlag' },
          className: 'replacecolor'
        },
        {
          title: '手册纱单价',
          dataIndex: 'manualYarnUnitPrice',
          width: 160,
          scopedSlots: { customRender: 'manualYarnUnitPrice' },
          className: 'replacecolor'
        },
        {
          title: '手册纱占比',
          dataIndex: 'manualYarnProportion',
          width: 120,
          scopedSlots: { customRender: 'manualYarnProportion' },
          className: 'replacecolor'
        },
{
          title: '分组ID',
          dataIndex: 'groupId',
          width: 120,
          className: 'replacecolor'
        },

        {
          title: '操作',
          dataIndex: 'operation',
          scopedSlots: { customRender: 'operationSlot' },
          width: 160,
          fixed: 'right',
          className: 'replacecolor'
        }
      ],

      syShippingDetailsItemList: [], // 子表数据
      msgFormSon: 'test', // 子组件传来数据的变量

      addShipDet: {}, // 主表信息
      visible: false,
      confirmLoading: false,
      dateFormat: 'YYYY-MM-DD',
      state: '0', // 单据状态初始未【仅保存】
      pushState: '0' // 推送状态初始未【仅保存】
      // validatorRules: {
      //   documentNo: [{ required: true, message: '单据号不能为空', trigger: 'blur' }], 单据号
    }
  },
  // 接收父组件查询方法
  props: {
    fatherList: {
      type: Function,
      default: null
    }
  },

  methods: {
    getSon(val) {
      var copyValList = JSON.parse(JSON.stringify(val));
      this.addShipDet.customer = copyValList[0].customerName;
      for (var i in copyValList) {
        copyValList[i]['orderQuantity'] = copyValList[i].quantity
        copyValList[i]['orderRemainingQuantity'] = copyValList[i].surplusNum
        copyValList[i]['salesUnitPrice'] = copyValList[i].unitPriceIncludingTax
        copyValList[i]['customerOrder'] = copyValList[i].customerOrderNumber
        copyValList[i]['shipmentQuantity'] = copyValList[i].surplusNum // 订单剩余数量 赋值给发货数量
      }
      this.syShippingDetailsItemList = this.syShippingDetailsItemList.concat(copyValList);
      this.msgFormSon = this.syShippingDetailsItemList;
    },
    // 参照订单数据
    referOrderDataOpen() {
      this.$refs.referOrderDataModal.referOrderDataModVis = true
      // console.log('点击参照订单数据')
    },

    // 新增 保存
    addSave() {
      const that = this;
      // 触发表单验证
      this.$refs.form.validate(valid => {
      if (valid) {
        var newObj = {} // 新增对象
        newObj.documentNo = this.addShipDet.documentNo
        newObj.documentDate = this.addShipDet.documentDate.format('YYYY-MM-DD')
        newObj.customer = this.addShipDet.customer
        //newObj.preDeliveryDate = this.addShipDet.preDeliveryDate.format('YYYY-MM-DD') // 预发货日期
        //newObj.preCompletionDate = this.addShipDet.preCompletionDate.format('YYYY-MM-DD') // 预完工日期
        newObj.orderType = this.addShipDet.orderType

        newObj.garmentFactory = this.addShipDet.garmentFactory
        newObj.wholeOrderTotal = this.addShipDet.wholeOrderTotal
        newObj.memo = this.addShipDet.memo // U8系统适用
        newObj.syShippingDetailsItemList = this.syShippingDetailsItemList // 子表信息赋值

        // 必须选择子表 --- 参照订单数据
        if (newObj.syShippingDetailsItemList.length == 0) {
          this.$message.error('请选择参照订单数据')
        } else {
          for (var i=0; i<newObj.syShippingDetailsItemList.length; i++){
            var rowData = newObj.syShippingDetailsItemList[i];
            if (rowData.shipmentQuantity > rowData.orderRemainingQuantity){
              this.$message.error('第'+(i+1)+'行超发货数量超过订单剩余数量，无法保存');
              return;
            }
          }
          addShipmentList(newObj).then(res => {
            if (res.success) {
              this.$message.success('新增成功');
              this.close();
              // 清空信息
              this.addShipDet = {};
              this.addShipDet.syShippingDetailsItemList = [];
              this.fatherList(); // 调用父组件 查询方法
              // this.msgFormSon = {}  清空子表信息
            }else{
              this.$message.error(res.message);
            }
          })
        }
      }else{
        return false;
      }
      });
      
      // const that = this
      // // 触发表单验证
      // this.$refs.form.validate(valid => {
      //   if (valid) {
      //     that.confirmLoading = true
      //   }
      // })
    },

    // 増行
    // handleAddColumn() {
    //   console.log('増行')
    //   const addrow = {
    //     accountSet: '',
    //     documentNo: '',
    //     itemNumber: '',
    //     orderDate: '',
    //     businessType: '',
    //     customerOrder: '',
    //     smallPo: '',
    //     packId: '',
    //     orderDate: '',
    //     orderRemaQuantity: '',
    //     shipQuantity: '',
    //     isTC: '',
    //     materialComposition: '',
    //     saleType: '',
    //     customerShortName: '',
    //     customerName: '',
    //     exchangeRate: '',
    //     wholeSingleCombined: '',
    //     salesDepartment: '',
    //     salesman: '',
    //     currency: '',
    //     brand: '',
    //     thirdParty: '',
    //     depositRate: '',
    //     deposit: '',
    //     collaborativeRoute: '',
    //     paymentClause: '',
    //     finalCustomer: '',
    //     orderNote: '',
    //     priceNote: '',
    //     orderChangeDesc: '',
    //     operation: ''
    //   }
    //   this.syShippingDetailsItemList.push(addrow)
    // },
    // --------------------------------------
    // 操作 删除
    handleDelete(index) {
      return this.syShippingDetailsItemList.splice(index, 1)
    },
    // 操作 复制 复制一行已有的数据
    copy(record) {
      var newRecord = JSON.parse(JSON.stringify(record));
      this.syShippingDetailsItemList.push(newRecord)
    },

    handleCancel() {
      this.close()
    },

    close() {
      this.$emit('close');
      this.visible = false;
      this.addShipDet = {};
      this.syShippingDetailsItemList = [];
    },

    // 参照订单数据弹框 ok-------------------------------------
    referOrderDataOk() {
      // console.log('参照订单数据弹框确定')
      this.$refs.referOrderDataModal.referOrderDataModVis = false;
      this.$refs.referOrderDataModal.queryParam.orderNumber="";
      this.$refs.referOrderDataModal.queryParam.account="";
      this.$refs.referOrderDataModal.queryParam.salesman="";
      this.$refs.referOrderDataModal.queryParam.customerName="";
      this.$refs.referOrderDataModal.queryParam.dateRange=[];
    }
  }
}
</script>
<style lang="less" scoped>
@import '~@assets/less/common.less';
/deep/ .ant-table-thead > tr > th {
  text-align: center;
  // font-weight: 700;
}
/deep/ .ant-table-tbody {
  text-align: center;
}
// /deep/ th.replacecolor {
//   background-color: #ccc;
// }

// 抽屉里的card样式
/deep/ .ant-drawer-content {
  background-color: #f0f2f5;
}
/deep/ .ant-drawer-body {
  padding: 10px;
}

// 子表下拉显示
/deep/ .ant-card-body {
  margin-bottom: 60px;
}
</style>
