<template xmlns="">
  <div>

    <el-row type="flex" style="margin-top: 15px;margin-bottom: 15px" justify="center">
      <el-col :xs="24" :sm="24" :md="24" :lg="22" :xl="20">
        <el-form ref="form" :model="form" :rules="rules" label-width="150px">
          <el-row :gutter="10">
            <el-col :span="12">
              <el-form-item label="客户名称" prop="name">
                <el-input v-model="form.name" placeholder="请输入客户名称" />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="国家" prop="country">
                <el-select v-model="form.country" placeholder="请选择国家">
                  <el-option v-for="dict in countryList"
                             :key="dict.id" :label="dict.nameZh" :value="parseInt(dict.id)" />
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="客户等级" prop="level">
                <el-select v-model="form.level" placeholder="请选择客户等级" disabled>
                  <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_LEVEL)"
                             :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="联系地址" prop="address">
                <el-input v-model="form.address" placeholder="请输入联系地址" />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="客户类别" prop="type">
                <dict-selector :type="DICT_TYPE.CUSTOMER_TYPE" form-type="checkbox" multiple v-model="form.type"></dict-selector>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="常用提货网点" prop="pickupPoint">
                <el-select v-model="form.pickupPoint" placeholder="请输入常用提货网点">
                  <el-option v-for="node in nodeList"
                             :key="node.id" :label="node.titleZh" :value="node.id" />
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="13" v-show="form.type && form.type.indexOf('3') !== -1">
              <el-form-item label="所属代理" prop="agentId">
                <el-select v-model="form.agentId" placeholder="请选择所属代理">
                  <el-option v-for="item in serviceUserList"
                             :key="item.id" :label="item.nickname" :value="item.id" />
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">

              <el-form-item label="公司名称" prop="company">
                <el-input v-model="form.company" placeholder="请输入公司名称" />
              </el-form-item>
            </el-col>
            <el-col :span="12">

              <el-form-item label="客户生日" prop="birthday">
                <el-date-picker
                  v-model="form.birthday"
                  type="date"
                  value-format="timestamp"
                  placeholder="请输入客户生日">
                </el-date-picker>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="主营类别" prop="productType">
                <el-row :gutter="10">
                  <el-col :span="11">
                    <el-select v-model="form.productType" placeholder="请选择产品类别" @change="form.productId = ''">
                      <el-option :label="item.titleZh" :value="item.id" v-for="(item) in productTypeList" :key="item.id"/>
                    </el-select>
                  </el-col>
                  <el-col :span="11">
                    <el-select v-model="form.productId" placeholder="请选择">
                      <el-option :label="item.titleZh" :value="parseInt(item.id)" v-for="(item) in productListFilter" :key="item.id"/>
                    </el-select>
                  </el-col>
                </el-row>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="客户来源" prop="source">
                <el-select v-model="form.source" placeholder="请选择客户来源">
                  <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_SOURCE)"
                             :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="结算方式" prop="balance">
                <el-select v-model="form.balance" placeholder="请选择结算方式">
                  <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_BALANCE)"
                             :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="客户经理" prop="customerService">
                <el-select v-model="form.customerService" placeholder="请选择客户经理">
                  <el-option v-for="item in serviceUserList"
                             :key="item.id" :label="item.nickname" :value="item.id" />
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="图片" prop="picture">
                <upload v-model="form.picture" :limit="1"></upload>
              </el-form-item>

            </el-col>
            <el-col :span="12">
              <el-form-item label="客户状态" prop="status">
                <el-select v-model="form.status" placeholder="请选择客户状态" disabled>
                  <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_STATUS)"
                             :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="推介人" prop="promoter">
                <el-select v-model="form.promoter" placeholder="请输入推介人" filterable>
                  <el-option
                    v-for="item in customerSelect"
                    :key="item.id"
                    :label="item.name"
                    :value="item.id">
                  </el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="创建人" prop="founder">
                <el-select v-model="form.founder" disabled>
                  <el-option
                    v-for="item in serviceUserList"
                    :key="item.id"
                    :label="item.nickname"
                    :value="item.id">
                  </el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="创建时间" prop="createTime">
                <el-date-picker
                  v-model="form.createTime"
                  type="datetime"
                  value-format="timestamp"
                  placeholder="选择创建时间">
                </el-date-picker>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="备注" prop="remarks">
                <el-input v-model="form.remarks" placeholder="请输入备注"/>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="是否显示提单价格" prop="remarks">
              <el-switch  v-model="form.isShowTidanPrice"></el-switch>
              </el-form-item>
            </el-col>
            <el-col :span="24">
              <el-form-item label="到仓确认" prop="arrivalConfirm">
                <el-switch v-model="form.arrivalConfirm" :active-value="0" :inactive-value="1" />
              </el-form-item>
            </el-col>
            <el-col :span="13">
              <el-form-item label="重货标准" prop="weightUnit">
                <el-switch v-model="showZhong"/>
                <el-input v-model="form.weightUnit" placeholder="请输入重货标准" v-show="showZhong">
                  <template slot="append">kg/cbm</template>
                </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="24" v-show="showZhong">
              <el-form-item label="指定线路" prop="line">
                <el-switch v-model="showZhong1"></el-switch>
                <customer-line-table v-show="showZhong1" :warehouse-list="warehouseList" :import-city-list="importCityList" v-model="zhongLines" :zhong-pao-type="0"></customer-line-table>
              </el-form-item>
            </el-col>
            <el-col :span="13">
              <el-form-item label="泡货标准" prop="weightUnit">
                <el-switch v-model="showPao"/>
                <el-input v-model="form.lightUnit" placeholder="请输入泡货标准" v-show="showPao">
                  <template slot="append">kg/cbm</template>
                </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="24" v-show="showPao">
              <el-form-item label="指定线路" prop="line">
                <el-switch v-model="showPao1"></el-switch>
                <customer-line-table v-show="showPao1" :warehouse-list="warehouseList" :import-city-list="importCityList" v-model="paoLines" :zhong-pao-type="1"></customer-line-table>
              </el-form-item>
            </el-col>
          </el-row>

          <el-card class="box-card">
            <div slot="header" class="clearfix">
              <span>联系人</span>
              <el-button style="float: right;" size="small" type="primary" @click="handleAddContact">+</el-button>
            </div>
            <el-form ref="contactForm" :rules="contactRules" :model="form">
            <el-table
              :data="form.customerContacts"
              style="width: 100%"
            >
              <el-table-column
                prop="department"
                label="部门"
                width=""
              >
                <template v-slot="{ row }">
                  <el-form-item label="">
                    <el-input v-model="row.department" placeholder="请输入部门" size="mini"/>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                prop="position"
                label="职位"
                width=""
              >
                <template v-slot="{row}">
                  <el-form-item label="">
                    <el-input v-model="row.position" placeholder="请输入职位" size="mini"/>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                prop="name"
                label="联系人"
              >
                <template slot="header">
                  联系人 <span style="color: #ff0000">*</span>
                </template>
                <template v-slot="{row, cellValue, $index}">
                  <el-form-item :rules="contactRules.name" :prop="'customerContacts.' + $index + '.name'" label="">
                    <el-input v-model="row.name" placeholder="请输入联系人" size="mini"/>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                prop="areaCode"
                label="区号"
              >
                <template slot="header">
                  区号 <span style="color: #ff0000">*</span>
                </template>
                <template v-slot="{row, cellValue, $index}">
                  <el-form-item :rules="contactRules.areaCode" :prop="'customerContacts.' + $index + '.areaCode'" label="">
                    <el-select v-model="row.areaCode" placeholder="请选择区号" filterable size="mini">
                      <el-option v-for="(item, index) in countryList"
                                 :key="index" :label="item.nameShort + item.nameZh + '(' + item.tel + ')'" :value="item.tel" />
                    </el-select>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                prop="phoneNew"
                label="联系方式"
              >
                <template slot="header">
                  联系方式 <span style="color: #ff0000">*</span>
                </template>
                <template v-slot="{row, cellValue, $index}">
                  <el-form-item :rules="contactRules.phoneNew" :prop="'customerContacts.' + $index + '.phoneNew'" label="">
                    <el-input v-model="row.phoneNew" placeholder="请输入联系方式" size="mini"/>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                prop=""
                label="关联账号"
              >
               <template v-slot = "{row}">
                 <el-form-item label="">
                   <el-select v-model="row.userid" @change="selectBD" size="mini">
                     <el-option v-for="(item,index) in memberList" :value="item.id" :key="item.id"  :label="item.nickname + '(' + item.mobile + ')'" ></el-option>
                   </el-select>
                 </el-form-item>
               </template>
              </el-table-column>
              <el-table-column
                prop="social"
                label="社交软件"
              >
                <template v-slot="{row}">
                  <el-form-item label="">
                    <el-select v-model="row.social" placeholder="请选择社交软件" size="mini">
                      <el-option v-for="dict in getDictDatas(DICT_TYPE.SOCIAL)"
                                 :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
                    </el-select>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                prop="socialNumber"
                label="社交软件号码"
              >
                <template v-slot="{row}">
                  <el-form-item label="">
                    <el-input v-model="row.socialNumber" placeholder="请输入社交软件号码" size="mini"/>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                prop="email"
                label="邮箱"
              >
                <template v-slot="{row}">
                  <el-form-item label="">
                    <el-input v-model="row.email" placeholder="请输入邮箱" size="mini"/>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                prop="isDefault"
                label="设为默认"
              >
                <template v-slot="{ row, column, $index }">
                  <el-form-item label="">
                    <el-select v-model="row.isDefault" placeholder="设为默认" @change="handleDefaultChange($index)" size="mini">
                      <el-option v-for="dict in getDictDatas(DICT_TYPE.IS_DEFAULT)"
                                 :key="dict.value" :label="dict.label" :value="Number(dict.value)" />
                    </el-select>
                  </el-form-item>
                </template>
              </el-table-column>
              <el-table-column
                prop="name"
                label="操作"
              >
                <template v-slot="{ row, column, $index }">
                  <el-form-item label="">
                    <el-button type="danger" @click="handleDeleteContact($index)" size="mini">删除</el-button>
                  </el-form-item>
                </template>
              </el-table-column>
            </el-table>
            </el-form>
          </el-card>

          <el-row :gutter="10" style="margin-top: 15px">
            <el-col :span="12">
              <el-form-item label="发票抬头" prop="invoiceTitle">
                <el-input v-model="form.invoiceTitle" placeholder="请输入发票抬头" />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="纳税人识别号" prop="licenseNumber">
                <el-input v-model="form.licenseNumber" placeholder="请输入纳税人识别号" />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="开户行" prop="bank">
                <el-input v-model="form.bank" placeholder="请输入开户行" />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="账户" prop="bankNumber">
                <el-input v-model="form.bankNumber" placeholder="请输入账户" />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="项目" prop="project">
                <el-input v-model="form.project" placeholder="请输入项目" />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="开票地址" prop="billingAddress">
                <el-input v-model="form.billingAddress" placeholder="请输入开票地址" />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="开票电话" prop="billingTell">
                <el-input v-model="form.billingTell" placeholder="请输入开票电话" maxlength="50" />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="税率" prop="taxRate">
                <el-input v-model="form.taxRate" placeholder="请输入税率" />
              </el-form-item>
            </el-col>
          </el-row>
        </el-form>
        <div style="text-align: center">
          <el-button type="primary" @click="submitForm">确 定</el-button>
          <el-button @click="cancel">取 消</el-button>
        </div>
      </el-col>
    </el-row>

  </div>
</template>

<script>
import { getDictDatas, DICT_TYPE } from '@/utils/dict';
import upload from '@/components/ImageUpload'
import {createCustomer, getCustomer, updateCustomer, userMemberUserList,} from '@/api/ecw/customer'
import {getNodeList} from "@/api/ecw/node"
import { getProductTypeList } from '@/api/ecw/productType'
import { getProductList } from '@/api/ecw/product'
import {getTradeCityList} from "@/api/ecw/region"
import {getWarehouseList} from "@/api/ecw/warehouse"
import CustomerLineTable from '@/components/CustomerLineTable'
import {getCustomerSelect} from "@/api/ecw/customer"
import {listServiceUser, listSimpleUsers} from "@/api/system/user"
import { getZhongPaoBest, getZhongPaoPage } from '@/api/ecw/zhongPao'
import { getCustomerContactsListByCustomer } from '@/api/ecw/customerContacts'
import { getCountryListAll } from '@/api/ecw/country'
import Template from "@/views/cms/template";
import {validatorMobile} from "@/api/ecw/validate"

export default {
  name: "edit",
  props: {
    customerId: String
  },
  components: {
    Template,
    upload,
    CustomerLineTable
  },
  created() {
    this.reset()
    if(this.customerId !== '0') {
      this.getCustomer(this.customerId).then(() => {
        getCustomerContactsListByCustomer({customerId: this.customerId}).then(r => {
          this.form.customerContacts = r.data
        })
      })
    } else {
      const obj = Object.assign({}, this.$route, { title: "自定义标题" })
      this.$tab.updatePage(obj);
      this.$tab.updatePage({...this.$route, meta: {...this.$route.meta, name: 'abc'}})
    }

    getNodeList().then(r => {
      this.nodeList = r.data
    })
    getProductTypeList().then(r => {
      this.productTypeList = r.data
    })
    getProductList().then(r => {
      this.productList = r.data
    })
    getTradeCityList({type: 1}).then(r => {
      this.importCityList = r.data.filter(item => item.type === '1')
    })
    getWarehouseList().then(r => {
      this.warehouseList = r.data
    })
    getCustomerSelect().then(r => {
      this.customerSelect = r.data
    })
    listSimpleUsers().then(r => {
      this.serviceUserList = r.data
    })
    getCountryListAll().then(r => {
      this.countryList = r.data
    })
    userMemberUserList().then(r => {
      this.memberList = r.data
    })

    this.getZhongPao()
  },
  data(){
    return {
      getDictDatas,
      DICT_TYPE,

      // 表单参数
      form: {},
      // 表单校验
      rules: {
        name: [{ required: true, message: "客户名称不能为空", trigger: "blur" }],
        country: [{ required: true, message: "国家不能为空", trigger: "blur" }],
        level: [{ required: true, message: "客户等级不能为空", trigger: "blur" }],
        type: [{ required: true, message: "客户类别不能为空", trigger: "blur" }],
        createTime: [{ required: true, message: "创建时间不能为空", trigger: "blur" }],
        source: [{ required: true, message: "客户来源不能为空", trigger: "blur" }],
        customerService: [{ required: true, message: "客户经理不能为空", trigger: "blur" }],
        status: [{ required: true, message: "客户状态不能为空", trigger: "blur" }],
        founder: [{ required: true, message: "创建人不能为空", trigger: "blur" }],


      },
      contactRules: {
        name: [{ required: true, message: "请输入联系人", trigger: "blur" }],
        areaCode: [{ required: true, message: "请选择区号", trigger: "change" }],
        phoneNew: [{
          required: true,
          trigger: "blur",
          validator: this.phoneValidator
        }],
      },
      // 网点
      nodeList: [],
      productTypeList: [],
      productList: [],
      showZhong: false,
      showZhong1: false,
      showPao: false,
      showPao1: false,
      warehouseList: [], // 仓库列表
      importCityList: [], // 进口地址
      customerSelect: [],
      serviceUserList: [],
      countryList: [],

      zhongLines: [], // 重货线路
      paoLines: [], // 泡货线路
      memberList:[],//会员列表
    }
  },

  methods: {
    phoneValidator(rule, value, callback){
      if (!value) {
        return callback(new Error('请输入联系方式'));
      }
      validatorMobile({
        code: this.form.customerContacts.find(e => e.phoneNew === value).areaCode,
        mobile: value
      }).then(r => {
        if (r.data){
          callback()
        } else {
          callback(new Error(r.msg || '手机号验证失败'))
        }
      }).catch(e => {
        console.error(e)
        callback(new Error('手机号验证失败'))
      })
    },
    handleDefaultChange($index){
      // 只有一个联系人，设置成非默认
      if (this.form.customerContacts.length === 1 && this.form.customerContacts[0].isDefault === 0){
        this.$modal.msgWarning('至少拥有一个默认联系人')
        this.form.customerContacts[0].isDefault = 1
        return
      }

      // 设置默认联系人
      if (this.form.customerContacts[$index].isDefault === 1) {
        // 其他的置否
        let i = 0
        this.form.customerContacts.forEach(e => {
          if (i !== $index){
            e.isDefault = 0
          }
          i++
        })
      } else {
        // 第一个置是
        this.form.customerContacts[0].isDefault = 1
      }
    },
    selectBD(){
      this.$forceUpdate();
    },
    /** 取消按钮 */
    cancel() {
      this.$tab.closePage()
      this.open = false;
      this.reset();
    },
    /** 提交按钮 */
    submitForm() {
      if(this.form.customerContacts.length === 0){
        this.$modal.alert('至少添加一位联系人')
        return
      }
      this.$refs["contactForm"].validate(valid1 => {
        this.$refs["form"].validate(valid2 => {
          if (!valid1 || !valid2) {
            return;
          }
          if (this.form.customerContacts.length === 0){
            this.$modal.msgError("至少填写一个联系人信息");
            return
          }

          const form = {...this.form, type: this.form.type?.join(','), taxRate: Number(this.form.taxRate)}

          // 修改的提交
          if (this.form.id != null) {
            this.form.customerContacts.forEach(e => {
              e.customerId = this.customerId
            })

            updateCustomer(form).then(response => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              // this.getList();
              const obj = { path: "/customer/customer" };
              this.$tab.closeOpenPage(obj);
            }).catch(e => {
              this.$modal.msgError(e.msg || '添加客户失败，请联系管理员')
            });
            return;
          }
          // 添加的提交
          createCustomer(form).then(response => {
            this.$modal.msgSuccess("新增成功");
            this.open = false;
            // this.getList();
            const obj = { path: "/customer/customer" };
            this.$tab.closeOpenPage(obj);
          }).catch(e => {
            this.$modal.msgError(e.msg || '添加客户失败，请联系管理员')
          });
        });
      })
    },
    /** 表单重置 */
    reset() {
      this.form = {
        id: undefined,
        number: undefined,
        name: undefined,
        level: 1,
        country: undefined,
        type: undefined,
        agentId: undefined,
        company: undefined,
        address: undefined,
        productType: undefined,
        productId: undefined,
        pickupPoint: undefined,
        memberId: undefined,
        birthday: undefined,
        balance: undefined,
        source: undefined,
        picture: undefined,
        customerService: undefined,
        customerContacts: [],
        customerLines: [],
        lightUnit: undefined,
        promoter: undefined,
        status: 1,
        founder: this.$store.getters.userId,
        department: undefined,
        invoiceTitle: undefined,
        licenseNumber: undefined,
        bank: undefined,
        bankNumber: undefined,
        project: undefined,
        billingAddress: undefined,
        billingTell: undefined,
        taxRate: undefined,
        remarks: undefined,
        arrivalConfirm: undefined,
        weightUnit: undefined,
        createTime: undefined,
        isShowTidanPrice:true,
      };
      this.resetForm("form");
    },
    getCustomer(id) {
      return getCustomer(id).then(response => {
        this.form = { ...this.form, ...response.data, id: this.customerId };
        this.open = true;
        this.title = "修改客户";
      });
    },
    updateCustomerLines() {
      let zhongLines = [], paoLines = []
      if (this.zhongLines.length > 0) {
        zhongLines = this.zhongLines
      }
      if (this.paoLines.length > 0) {
        paoLines = this.paoLines
      }
      this.form.customerLines = [...zhongLines, ...paoLines]
    },
    handleAddContact() {
      this.form.customerContacts.push({
        "areaCode": "",
        // "customerId": 0,
        "department": "",
        "email": "",
        "isDefault": this.form.customerContacts.length === 0 ? 1 : 0,
        "name": "",
        "phoneNew": "",
        "position": "",
        "social": undefined,
        "socialNumber": "",
        "userid": [],
        // "username": ""
      })
    },
    handleDeleteContact($index){
      this.form.customerContacts.splice($index, 1)
      if (this.form.customerContacts.length > 0) {
        this.$refs['contactForm'].clearValidate()

        if (!this.form.customerContacts.find(e => e.isDefault)){
          this.form.customerContacts[0].isDefault = 1
        }
      }
    },
    getZhongPao(){
      getZhongPaoBest({
        customerId: this.customerId,
        // departureId: this.departureId,
        // objectiveId: this.objectiveId
      }).then(r => {
        this.form.weightUnit = r.data.zhongEdge
        this.form.lightUnit = r.data.paoEdge
      })
    }
  },
  computed: {
    productListFilter(){
      return this.productList.filter((p) => p.typeId === this.form.productType)
    },
  },
  watch: {
    zhongLines() {
      console.log('zhongLines')
      this.updateCustomerLines()
    },
    paoLines() {
      console.log('paoLines')
      this.updateCustomerLines()
    }
  }
}
</script>

<style scoped lang="scss">
::v-deep .el-table__cell {
  padding-bottom: 0;
  .cell {
    .el-form-item {
      margin-bottom: 9px;
    }

    .el-form-item__error {
      z-index: 1;
      padding-top: 0;
      top: 32px;
    }
  }
}
</style>
