<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"
  >
  
  <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="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 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"
          :delDetailIds="delDetailIds"
        ></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"
                  class="filter-item"
                ></el-date-picker>
              </el-form-item>
            </el-col>
            <el-col :span="6">
            <el-form-item
              label="付款方式"
              prop="payWay"
              style="margin-bottom: 22px"
            >
            <DictSelection dictName="付款方式" clearable v-model="form.payWay">
                </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>

    <div slot="footer" class="footer">
      <el-button type="primary" @click="save">保存</el-button>
      <el-button @click="cancel">返回</el-button>
    </div>
    
    <parentList ref="parentRef" classType="1" @changeParent="changeParent"></parentList>
    <head-list ref="headRef"  @changeParent="changePersonel"></head-list>
  </ele-modal>
</template>

<script>
import { emailReg, phoneReg,numberReg } from 'ele-admin';
import {acceptUnpackoptions} from '@/enum/dict';
import inventoryTable from './inventoryTable.vue'
import {categoryData} from 'element-china-category-data';
import fileUpload from '@/components/upload/fileUpload';
import {cityData} from 'ele-admin/packages/utils/regions';
import dictMixins from '@/mixins/dictMixins';
import deptSelect from '@/components/CommomSelect/dept-select.vue';
import personSelect from '@/components/CommomSelect/person-select.vue';
import parentList from '@/views/saleManage/contact/components/parentList.vue'
import { getDetail, UpdateInformation, addInformation,deleteInformation,updateStatus} from '@/api/saleManage/quotation';
import {getcontactlink} from '@/api/saleManage/businessFollow';
import headList from '@/views/saleManage/businessOpportunity/components/headList.vue'
import {copyObj} from '@/utils/util';


export default {
    props: {
      categoryTreeList: Array
    },
    mixins: [dictMixins],
    components: {
      fileUpload,
      headList,
      inventoryTable,
      deptSelect,
      parentList,
      personSelect
    },
    data() {
      let formDef = {
          id:'',
          acceptUnpack: null,
          askFile: null,
          contactAddress: '',
          contactEmail: '',
          contactFax: '',
          contactId: '',
          contactLinkId: '',
          contactLinkName: '',
          contactName:'',
          contactTel:'',
          deliveryDate:'',
          payWay:'',
          payWayName:'',
          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: [],
     
        rules: {
          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' }
          ],
          payWay: [
            { required: true, message: '请选择付款方式', trigger: 'change' }
          ],
          payWayName: [
            { required: true, message: '请输入报价方名称', trigger: 'blur' }
          ],
          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' }
          ]
        },
      
        options: {
          cityData,
          categoryData,
        },
        // 提交状态
        loading: false,
        // 是否是修改
        isUpdate: false,

        // 组织机构树形结构数据
        groupTreeData: [],
        // 组织机构平铺数据
        groupData: [],
      };
    },
  
    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.quoteProductList)
            this.getLinkInfo(data.contactId)
          })
          
          
        }
      },

   //更新联系人数据
   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('请先选择名称')
   }
    },
    //选择下拉框
    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)
      },
    //选择报价方人回调
   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)
      },
    
      
      handParent() {
        let item = {
          id:  this.form.contactId
        }
        this.$refs.parentRef.open(item)
      },
    
      async open(type, row, contactCategoryId) {
        this.title = type==='add'?'新增':'修改';
        this.row = row;
        this.visible = true;
        if (type == 'add') {
          this.isUpdate = false;
        } else {
          this.isUpdate = true;
          this.getDetailData(row.id)
        }
      },

      salesmanChange(val, info){
        this.otherForm.salesmanName = info.name;
      },
      settlementModeChange(info){
        this.otherForm.settlementModeName = info.dictValue;
      },
      ifChiefChange(value, idx){
        if(value === 1){
          this.tableLinkData.forEach(e => e.ifChief = 0);
          this.tableLinkData[idx].ifChief = 1;
        }
      },
 
    
   
      getValidate() {
          return  new Promise((resolve, reject) => {
              this.$refs.form.validate((valid) => {
                if (!valid) {
                  reject(false);
                } else {
                  resolve(true);
                }
              });
            })
     },
     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 save() {
        try {
           await this.getValidate();
           // 表单验证通过，执行保存操作
           this.loading = true;
      
        if (!this.isUpdate) {
          delete this.form.id;
        } 
        let payWayName=this.getDictValue('付款方式', this.form.payWay);

        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,{payWayName,
          quoteProductList:this.$refs.inventoryTable.getTableValue(),
          totalPrice:this.$refs.inventoryTable.getTotalPrice()})
        if (this.isUpdate) {
          UpdateInformation(commitData)
            .then((res) => {
              this.loading = false;
              this.$message.success("修改成功");
              this.cancel();
              this.$emit('done');
            })
            .catch((e) => {
              //this.loading = false;
            });
        } else {
          addInformation(commitData)
            .then((res) => {
              this.loading = false;
              this.$message.success("新增成功");
              this.cancel();
              this.$emit('done');
            })
            .catch((e) => {
              //this.loading = false;
            });
          }
        } catch (error) {
          console.log(error)
          // 表单验证未通过，不执行保存操作
        }
       
      },
      cancel() {
        this.$nextTick(() => {
          this.activeName = 'base';
          // 关闭后，销毁所有的表单数据
          this.$refs['otherForm'] &&  this.$refs['otherForm'].resetFields();
          this.$refs['formRef'] &&  this.$refs['formRef'].resetFields();
          this.form = copyObj(this.formDef)
          this.visible = false;
        })
      },
    

    }
  };
</script>
<style scoped lang="scss">
.TotalAmount{
  font-size: 16px;
  padding-right: 30px;
}
</style>