<template>
  <!-- <ele-modal
    custom-class="ele-dialog-form long-dialog-form"
    :centered="true"
    v-if="visible"
    :visible.sync="visible"
    :title="title"
    :close-on-click-modal="false"
    width="80%"
    @close="cancel"
  > -->
  <div>
    <el-form ref="form" :model="form" :rules="rules" label-width="120px">
      <headerTitle title="基本信息"></headerTitle>
      <el-row>
        <el-col :span="12">
          <el-form-item
            label="关联商机"
            prop="opportunityId"
            style="margin-bottom: 22px"
          >
            <el-select v-model="form.opportunityId" placeholder="请选择" style="width: 100%;">
              <el-option
                v-for="item in businessList"
                :key="item.id"
                :label="item.name"
                :value="item.id"
              >
              </el-option>
            </el-select>
          </el-form-item>
          <el-form-item
            label="询价方名称"
            prop="contactName"
            style="margin-bottom: 22px"
          >
            <el-input
              clearable
              v-model="form.contactName"
              @click.native="handParent"
              placeholder="请输入"
            />
          </el-form-item>

          <el-form-item
            label="询价方联系人"
            prop="contactLinkName"
            style="margin-bottom: 22px" 
          >
            <el-select style="width: 100%;"
              v-model="form.contactLinkName"
              placeholder="请选择"
              @change="onchangeLink"
              @focus="selectFocus"
            >
              <el-option
                v-for="item in linkNameOptions"
                :key="item.id"
                :label="item.linkName"
                :value="item.id"
              >
              </el-option>
            </el-select>
          </el-form-item>
          <el-form-item
            label="询价方电话"
            prop="contactTel"
            style="margin-bottom: 22px"
          >
            <el-input
              clearable
              :maxlength="20"
              v-model="form.contactTel"
              placeholder="请输入"
            />
          </el-form-item>
          <el-form-item
            label="询价方传真"
            prop="contactFax"
            style="margin-bottom: 22px"
          >
            <el-input
              clearable
              v-model="form.contactFax"
              placeholder="请输入"
            />
          </el-form-item>
          <el-form-item
            label="	询价方Email"
            prop="contactEmail"
            style="margin-bottom: 22px"
          >
            <el-input
              clearable
              v-model="form.contactEmail"
              placeholder="请输入"
            />
          </el-form-item>
          <el-form-item
            label="询价方地址"
            prop="contactAddress"
            style="margin-bottom: 22px"
          >
            <el-input
              clearable
              v-model="form.contactAddress"
              placeholder="请输入"
            />
          </el-form-item>
          <el-form-item prop="askFile" label="附件">
            <fileUpload
              v-model="form.askFile"
              module="main"
              :showLib="false"
              :limit="1"
            />
          </el-form-item>
        </el-col>

        <el-col :span="12">
          <el-form-item
            label="报价方名称"
            prop="quoteName"
            style="margin-bottom: 22px"
          >
            <el-input clearable v-model="form.quoteName" placeholder="请输入" />
          </el-form-item>

          <el-form-item
            label="报价方联系人"
            prop="quoteLinkName"
            style="margin-bottom: 22px"
          >
            <el-input
              clearable
              v-model="form.quoteLinkName"
              @click.native="handHead"
              placeholder="请输入"
            />
          </el-form-item>
          <el-form-item prop="quoteTel" label="报价方联系电话">
            <el-input clearable v-model="form.quoteTel" placeholder="请输入" />
          </el-form-item>
          <el-form-item prop="quoteFax" label="报价方传真">
            <el-input clearable v-model="form.quoteFax" placeholder="请输入" />
          </el-form-item>

          <el-form-item
            label="报价方Email"
            prop="quoteEmail"
            style="margin-bottom: 22px"
          >
            <el-input
              clearable
              v-model="form.quoteEmail"
              placeholder="请输入"
            />
          </el-form-item>

          <el-form-item
            label="报价方地址"
            prop="quoteAddress"
            style="margin-bottom: 22px"
          >
            <el-input
              clearable
              v-model="form.quoteAddress"
              placeholder="请输入"
            />
          </el-form-item>
        </el-col>
      </el-row>

      <headerTitle title="报价单产品清单"></headerTitle>
      <inventoryTable
        ref="inventoryTable"
        :isCustomerMark="false"
        :isDeliveryDeadline="false"
        :isGuaranteePeriod="false"
      ></inventoryTable>
      <el-row style="margin-top: 20px">
        <el-col :span="6">
          <el-form-item prop="taxRate" label="税率">
            <el-input clearable v-model="form.taxRate" placeholder="请输入">
              <template slot="append">%</template>
            </el-input>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item prop="deliveryDate" label="交货日期">
            <el-date-picker
              v-model="form.deliveryDate"
              value-format="yyyy-MM-dd"
              placeholder="请选择交货日期"
              type="date"
              style="width: 150px"
              class="filter-item"
            ></el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item
            label="结算方式"
            prop="settlementMode"
            style="margin-bottom: 22px"
          >
            <DictSelection
              dictName="结算方式"
              clearable
              v-model="form.settlementMode"
            >
            </DictSelection>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item
            label="是否接受拆单"
            prop="acceptUnpack"
            style="margin-bottom: 22px"
          >
            <el-select v-model="form.acceptUnpack" placeholder="请选择">
              <el-option
                v-for="item in acceptUnpackoptions"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              >
              </el-option>
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>

    <parentList
      ref="parentRef"
      classType="1"
      @changeParent="changeParent"
    ></parentList>
    <head-list ref="headRef" @changeParent="changePersonel"></head-list>
  </div>
</template>

<script>
  import { emailReg, numberReg } from 'ele-admin';
  import { acceptUnpackoptions } from '@/enum/dict';
  import inventoryTable from '@/views/bpm/handleTask/components/contractBook/inventoryTable.vue';

  import fileUpload from '@/components/upload/fileUpload';
  import dictMixins from '@/mixins/dictMixins';
  import headList from '@/components/headList';
  import parentList from './parentList.vue';
  import {
    getTableList,
    getcontactlink,
    getDetail
  } from '@/api/bpm/components/saleManage/quotation';
  import { copyObj } from '@/utils/util';
  import { getFile } from '@/api/system/file';

  export default {
    mixins: [dictMixins],
    components: {
      fileUpload,
      inventoryTable,
      parentList,
      headList
    },
    props: {
      businessId: {
        default: ''
      }
    },
    data() {
      let formDef = {
        id: '',
        acceptUnpack: null,
        askFile: null,
        contactAddress: '',
        opportunityId: '',
        contactEmail: '',
        contactFax: '',
        contactId: '',
        contactLinkId: '',
        contactLinkName: '',
        contactName: '',
        contactTel: '',
        deliveryDate: '',
        settlementMode: '',
        settlementModeName: '',
        quoteAddress: '',
        quoteEmail: '',
        quoteFax: '',
        quoteLinkId: '',
        quoteLinkName: '',
        quoteName: '',
        quoteTel: '',
        taxRate: null,
        totalPrice: null
      };

      return {
        payWayOptions: [],
        delDetailIds: [],
        linkNameOptions: [],
        acceptUnpackoptions,
        visible: false,
        title: '',
        row: {},
        activeName: 'base',
        formDef,
        form: copyObj(formDef),
        // removeBankList: [],
        // removeLinkList: [],
        tableBankData: [],
        tableLinkData: [],
        businessList: [], //商机列表
        rules: {
          opportunityId: [
            { required: true, message: '请选择关联商机', trigger: 'change' }
          ],
          contactName: [
            { required: true, message: '请选择客户', trigger: 'change' }
          ],
          name: [
            { required: true, message: '请输入客户名称', trigger: 'blur' }
          ],
          contactLinkName: [
            { required: true, message: '请选择联系人', trigger: 'change' }
          ],
          acceptUnpack: [
            { required: true, message: '请选择是否接受', trigger: 'change' }
          ],
          contactTel: [
            {
              required: true,
              pattern: numberReg,
              message: '请输入联系电话',
              trigger: 'blur'
            }
          ],
          deliveryDate: [
            { required: true, message: '请选择交货日期', trigger: 'change' }
          ],
          settlementMode: [
            { required: true, message: '请选择结算方式', trigger: 'change' }
          ],
          quoteLinkName: [
            { required: true, message: '请输入报价方联系人', trigger: 'change' }
          ],
          quoteName: [
            { required: true, message: '请输入报价方名称', trigger: 'blur' }
          ],
          quoteTel: [
            {
              required: true,
              pattern: numberReg,
              message: '请输入报价方联系电话',
              trigger: 'blur'
            }
          ],
          quoteEmail: [
            { pattern: emailReg, message: '邮箱格式不正确', trigger: 'blur' }
          ],
          contactEmail: [
            { pattern: emailReg, message: '邮箱格式不正确', trigger: 'blur' }
          ],
          taxRate: [
            { pattern: numberReg, message: '请输入数字', trigger: 'blur' }
          ]
        },

        // 提交状态
        loading: false,
        // 是否是修改
        isUpdate: false,

        // 组织机构树形结构数据
        groupTreeData: [],
        // 组织机构平铺数据
        groupData: []
      };
    },
    created() {
      this.getDetailData(this.businessId);
    },
    methods: {
      //获取详情
      async getDetailData(id) {
        this.loading = true;
        const data = await getDetail(id);
        this.loading = false;
        if (data) {
          this.$nextTick(() => {
            this.form = data;
            if (data.askFile !== '') {
              this.$set(this.form, 'askFile', [data?.askFile]);
            }
            this.$refs.inventoryTable &&
              this.$refs.inventoryTable.putTableValue(data);
            this.getLinkInfo(data.contactId);
            this.getBusinessList(data.contactName);
          });
        }
      },

      //更新联系人数据
      async getLinkInfo(contactId) {
        const data = await getcontactlink({ contactId });
        if (data && data?.length) {
          this.linkNameOptions = data;
        }
      },

      selectFocus() {
        if (this.linkNameOptions.length === 0) {
          return this.$message.error('请先选择名称');
        }
      },
      //获取客户的商机列表
      async getBusinessList(name) {
        if (!this.form.contactName)
          return this.$message.error('请先选择询价方名称');
        const data = await getTableList({
          pageNum: 1,
          size: 30,
          contactName: name,
          approvalStatus:2

        });
        this.businessList = data.list;
      },
      //选择下拉框
      onchangeLink(selectedOptions) {
        const option = this.linkNameOptions.find(
          (opt) => opt.id === selectedOptions
        );
        this.form = Object.assign({}, this.form, {
          contactEmail: option?.email,
          contactLinkName: option?.linkName || '',
          contactTel: option?.mobilePhone || option?.phone || '',
          contactLinkId: option?.id
        });
      },
      handHead() {
        let item = {
          id: this.form.quoteLinkId
        };
        this.$refs.headRef.open(item);
      },
      downloadFile(file) {
        getFile({ objectName: file.storePath }, file.name);
      },
      //选择报价方人回调
      changePersonel(obj) {
        this.$set(this.form, 'quoteLinkId', obj.id);
        this.$set(this.form, 'quoteLinkName', obj.name);
        this.$set(this.form, 'quoteTel', obj.phone);
        this.$set(this.form, 'quoteEmail', obj.email);
      },
      //选择客户回调
      changeParent(obj) {
        this.form = Object.assign({}, this.form, {
          contactId: obj.id,
          contactName: obj.name,
          contactAddress: obj.addressName + obj.address,
          contactLinkId: '',
          contactLinkName: '',
          contactEmail: '',
          contactTel: ''
        });
        this.getLinkInfo(obj.id);
        this.getBusinessList(obj.name);
      },

      handParent() {
        let item = {
          id: this.form.contactId
        };
        this.$refs.parentRef.open(item);
      },

      getValidate() {
        return Promise.all([
          new Promise((resolve, reject) => {
            this.$refs.form.validate((valid) => {
              if (!valid) {
                reject(false);
              } else {
                resolve(true);
              }
            });
          }),
          new Promise((resolve, reject) => {
            this.$refs.inventoryTable.validateForm((valid) => {
              if (!valid) {
                reject(false);
              } else {
                resolve(true);
              }
            });
          })
        ]);
      },
      async getTableValue() {
        try {
          await this.getValidate();
          // 表单验证通过，执行保存操作
          this.loading = true;

          let settlementModeName = this.getDictValue(
            '结算方式',
            this.form.settlementMode
          );

          if (this.form.askFile && this.form.askFile.length > 0) {
            this.form.askFile = this.form.askFile[0];
          } else {
            this.form.askFile = null;
          }
          let commitData = Object.assign({}, this.form, {
            settlementModeName,
            quoteProductList: this.$refs.inventoryTable.getTableValue(),
            totalPrice: this.$refs.inventoryTable.getTotalPrice()
          });
          return commitData;
          // UpdateInformation(commitData)
          //   .then((res) => {
          //     this.loading = false;
          //     this.$message.success('修改成功');
          //     this.cancel();
          //     this.$emit('done');
          //   })
          //   .catch((e) => {
          //     //this.loading = false;
          //   });
        } catch (error) {
          console.log(error);
          // 表单验证未通过，不执行保存操作
        }
      }
    }
  };
</script>
<style scoped lang="scss">
  .TotalAmount {
    font-size: 16px;
    padding-right: 30px;
  }
</style>
@/api/bpm/components/saleManage/quotation