<template>
  <!-- 平安客户资料 -->
  <a-modal
    class="add-custom"
    :title="isAdd() ? '新增客户资料' : '修改客户资料'"
    v-model:visible="visible"
    @cancel="cancel"
    centered
    :maskClosable="false"
    v-if="isPingAnOem()"
    width="890px"
  >
    <template #footer>
      <a-button
        key="submit"
        class="cancelBtn"
        :loading="loading"
        :disabled="loading"
        @click="submit(1)"
      >完成</a-button>
    </template>
    <a-form class="inlineForm" ref="formRef" :model="formState" :rules="rules">
      <a-row :gutter="24">
        <a-col :span="12">
          <a-form-item label="客户类型" name="userinfotype">
            <a-select
              class="typeSelect"
              style="width: 200px"
              v-model:value="formState.userinfotype"
              placeholder="请选择客户类型"
            >
              <a-select-option value="1">个人</a-select-option>
              <a-select-option value="2">企业</a-select-option>
            </a-select>
          </a-form-item>
        </a-col>
        <template v-if="!isPersonal()">
          <a-col :span="12">
            <a-form-item label="企业名称" name="customername">
              <a-input
                class="dialogInput"
                v-model:value="formState.customername"
                style="width: 200px"
                placeholder="请输入企业名称"
              />
            </a-form-item>
          </a-col>
        </template>
        <template v-else>
          <a-col :span="12">
            <a-form-item label="姓名" name="username">
              <a-input
                class="dialogInput"
                style="width: 200px"
                v-model:value="formState.username"
                placeholder="请输入姓名"
              />
            </a-form-item>
          </a-col>
        </template>
        <a-col :span="12">
          <a-form-item label="点价联系人" name="contactname">
            <a-input
              class="dialogInput"
              style="width: 200px"
              v-model:value="formState.contactname"
              placeholder="请输入联系人"
            />
          </a-form-item>
        </a-col>
        <a-col :span="12">
          <a-form-item label="联系人手机号" name="mobilephone">
            <a-input
              class="dialogInput"
              style="width: 200px"
              v-model:value="formState.mobilephone"
              placeholder="请输入联系人手机号"
            />
          </a-form-item>
        </a-col>
      </a-row>
    </a-form>
  </a-modal>
  <!-- 其他项目客户资料 -->
  <a-modal
    class="add-custom"
    v-else
    :title="isAdd() ? '新增客户资料' : '修改客户资料'"
    v-model:visible="visible"
    @cancel="cancel"
    centered
    :maskClosable="false"
    width="890px"
  >
    <template #footer>
      <a-button
        key="submit"
        class="cancelBtn"
        :loading="loading"
        :disabled="loading"
        @click="submit(1)"
      >保存草稿</a-button>
      <a-button
        key="submit"
        type="primary"
        :loading="loading"
        :disabled="loading"
        @click="submit(2)"
      >提交审核</a-button>
    </template>
    <a-form class="inlineForm" ref="formRef" :model="formState" :rules="rules">
      <a-row :gutter="24">
        <template v-if="isQianHaiJin()">
          <a-col :span="12">
            <a-form-item label="所属机构" name="areaid">
              <a-select
                class="typeSelect"
                style="width: 200px"
                v-model:value="formState.areaid"
                placeholder="请选择所属机构"
              >
                <a-select-option v-for="item in areaList" :key="item.userid">{{ item.accountname }}</a-select-option>
              </a-select>
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="所属客户经理" name="teammanageruserid">
              <a-select
                class="typeSelect"
                style="width: 200px"
                v-model:value="formState.teammanageruserid"
                placeholder="请选择所属客户经理"
              >
                <a-select-option
                  v-for="item in brokerList"
                  :key="item.userid"
                >{{ item.customername }}</a-select-option>
              </a-select>
            </a-form-item>
          </a-col>
          <a-col :span="12" v-if="isAdd()">
            <a-form-item label="登录账号" name="logincode">
              <a-input
                class="dialogInput"
                v-model:value="formState.logincode"
                style="width: 200px"
                placeholder="请输入登录账号"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12" v-if="isAdd()">
            <a-form-item label="登录密码" name="loginpwd">
              <a-input
                class="dialogInput"
                v-model:value="formState.loginpwd"
                style="width: 200px"
                placeholder="请输入登录密码"
              />
            </a-form-item>
          </a-col>
        </template>
        <a-col :span="12">
          <a-form-item label="客户类型" name="userinfotype">
            <a-select
              class="typeSelect"
              style="width: 200px"
              v-model:value="formState.userinfotype"
              placeholder="请选择客户类型"
            >
              <a-select-option value="1">个人</a-select-option>
              <a-select-option value="2">企业</a-select-option>
            </a-select>
          </a-form-item>
        </a-col>
        <template v-if="!isPersonal()">
          <a-col :span="12">
            <a-form-item label="企业名称" name="customername">
              <a-input
                class="dialogInput"
                v-model:value="formState.customername"
                style="width: 200px"
                placeholder="请输入企业名称"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="企业简称" name="nickname">
              <a-input
                class="dialogInput"
                style="width: 200px"
                v-model:value="formState.nickname"
                placeholder="请输入企业简称"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="证件类型" name="cardtype">
              <a-select
                class="inlineFormSelect"
                v-model:value="formState.cardtype"
                style="width: 200px"
                placeholder="请选择证件类型"
              >
                <a-select-option
                  :value="item.enumitemname"
                  v-for="item in cardTypeList"
                  :key="item.autoid"
                >{{ item.enumdicname }}</a-select-option>
              </a-select>
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="法定代表人" name="legalpersonname">
              <a-input
                class="dialogInput"
                style="width: 200px"
                v-model:value="formState.legalpersonname"
                placeholder="请输入法定代表人"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="证件号码" name="cardnum">
              <a-input
                class="dialogInput"
                style="width: 200px"
                v-model:value="formState.cardnum"
                placeholder="请输入证件号码"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="纳税人识别号" name="taxpayernum">
              <a-input
                class="dialogInput"
                style="width: 200px"
                v-model:value="formState.taxpayernum"
                placeholder="请输入纳税人识别号"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="营业执照">
              <UploadImg
                :visible="visible"
                :imgList="attachmentImgList"
                @upload="attachmentUpLoad"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="联系人" name="contactname">
              <a-input
                class="dialogInput"
                style="width: 200px"
                v-model:value="formState.contactname"
                placeholder="请输入联系人"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="联系人手机号" name="mobilephone">
              <a-input
                class="dialogInput"
                style="width: 200px"
                v-model:value="formState.mobilephone"
                placeholder="请输入联系人手机号"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="联系电话" name="telphone">
              <a-input
                class="dialogInput"
                style="width: 200px"
                v-model:value="formState.telphone"
                placeholder="请输入联系电话"
              />
            </a-form-item>
          </a-col>
        </template>
        <template v-else>
          <a-col :span="12">
            <a-form-item label="姓名" name="username">
              <a-input
                class="dialogInput"
                style="width: 200px"
                v-model:value="formState.username"
                placeholder="请输入姓名"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="身份证号码" name="cardnum">
              <a-input
                class="dialogInput"
                style="width: 200px"
                v-model:value="formState.cardnum"
                placeholder="请输入身份证号码"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="手机号码" name="mobilephone">
              <a-input
                class="dialogInput"
                style="width: 200px"
                v-model:value="formState.mobilephone"
                placeholder="请输入手机号码"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="身份证正面照" name="cardbackphotourl">
              <UploadImg
                :visible="visible"
                :imgList="cardfrontImgList"
                @upload="cardfrontphotourlUpLoad"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="邮箱" name="email">
              <a-input
                class="dialogInput"
                style="width: 200px"
                v-model:value="formState.email"
                placeholder="请输入邮箱"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="身份证反面照" name="cardfrontphotourl">
              <UploadImg
                :visible="visible"
                :imgList="cardbackImgList"
                @upload="cardbackphotourlUpLoad"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item label="联系电话" name="telphone">
              <a-input
                class="dialogInput"
                style="width: 200px"
                v-model:value="formState.telphone"
                placeholder="请输入联系电话"
              />
            </a-form-item>
          </a-col>
          <a-col :span="12" v-if="isQianHaiJin()">
            <a-form-item label="性别" name="sex">
              <a-select
                class="inlineFormSelect"
                v-model:value="formState.sex"
                style="width: 200px"
                placeholder="请选择性别"
              >
                <a-select-option
                  :value="item.id"
                  v-for="item in sexList"
                  :key="item.id"
                >{{ item.value }}</a-select-option>
              </a-select>
              <!-- <a-input class="dialogInput"
                       style="width: 200px"
                       v-model:value="formState.sex"
              placeholder="请选择性别" />-->
            </a-form-item>
          </a-col>
          <a-col :span="12" v-if="isQianHaiJin()">
            <a-form-item label="生日" name="birthday">
              <a-date-picker
                v-model:value="formState.birthday"
                :allowClear="false"
                style="width: 200px"
                placeholder="请选择生日"
                class="commonDatePicker"
              />
              <!-- <a-input class="dialogInput"
                       style="width: 200px"
                       v-model:value="formState.birthday"
              placeholder="请选择性别" />-->
            </a-form-item>
          </a-col>
          <a-col :span="12">
            <a-form-item>&nbsp;</a-form-item>
          </a-col>
        </template>
        <a-col :span="24">
          <a-form-item label="通讯地址">
            <a-select
              class="inlineFormSelect"
              style="width: 205px"
              v-model:value="formState.provinceid"
              @change="getCityList"
              placeholder="请选择省"
            >
              <a-select-option
                v-for="item in provinceList"
                :key="item.autoid"
                :value="item.autoid"
              >{{ item.divisionname }}</a-select-option>
            </a-select>
            <a-select
              class="inlineFormSelect ml9"
              style="width: 205px"
              v-model:value="formState.cityid"
              @change="getDistrictList"
              placeholder="请选择市"
            >
              <a-select-option
                v-for="item in cityList"
                :key="item.autoid"
                :value="item.autoid"
              >{{ item.divisionname }}</a-select-option>
            </a-select>
            <a-select
              class="inlineFormSelect ml9"
              v-model:value="formState.districtid"
              style="width: 205px"
              placeholder="请选择县(区)"
            >
              <a-select-option
                v-for="item in districtList"
                :key="item.autoid"
                :value="item.autoid"
              >{{ item.divisionname }}</a-select-option>
            </a-select>
          </a-form-item>
        </a-col>
        <a-col :span="24">
          <a-form-item label="&nbsp;" name="cardaddress">
            <a-input
              class="dialogInput"
              style="width: 635px"
              v-model:value="formState.cardaddress"
              placeholder="请输入详细地址"
            />
          </a-form-item>
        </a-col>
        <a-col :span="24">
          <a-form-item label="备注" name="remark">
            <a-input
              class="dialogInput"
              style="width: 635px"
              v-model:value="formState.remark"
              placeholder="请输入备注"
            />
          </a-form-item>
        </a-col>
      </a-row>
    </a-form>
  </a-modal>
</template>

<script lang="ts">
import UploadImg from '@/common/components/uploadImg/index.vue';
import { isPingAnOem, isQianHaiJin } from '@/common/config/projectName';
import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
import { validateAction } from '@/common/setup/form';
import { _closeModal } from '@/common/setup/modal/modal';
import { getUploadImg } from '@/common/setup/upload';
import { getUserId } from '@/services/bus/user';
import { getAddress } from '@/services/go/adress';
import { AllEnums } from '@/services/go/commonService/interface';
import { QhjCustomer } from '@/services/go/ermcp/qhj/interface';
import { addCustomerInfoOperate } from '@/services/proto/accountinfo';
import { CustomerInfoOperateReq } from '@/services/proto/accountinfo/interface';
import { mergeTwoObj } from '@/utils/objHandle';
import { toBase64String } from '@/utils/storage/base64';
import moment from 'moment';
import { defineComponent, PropType, ref } from 'vue';
import { FormState } from './interface';
import { getCardType, handleAreaList, handleBrokerApplyt, handleForm } from './setup';

export default defineComponent({
  name: 'add-custom',
  emits: ['cancel', 'update'],
  components: { UploadImg },
  props: {
    selectedRow: {
      default: {},
      type: Object as PropType<QhjCustomer>,
    },
  },
  setup(props, context) {
    // 控制关闭弹窗
    const { visible, cancel } = _closeModal(context);
    const loading = ref<boolean>(false);
    // 证件类型
    const cardTypeList = ref<AllEnums[]>(getCardType());
    // 表单
    const { formRef, formState, rules } = handleForm();
    // 地址
    const { cityList, districtList, provinceList, getCityList, getDistrictList } = getAddress();
    // 营业执照
    const { getFirstImg: getAttachmentImg, uploadImgAction: attachmentUpLoad, uploadImgList: attachmentImgList, handleImg: attachmentHandle } = getUploadImg();
    // 背面证件照地址
    const { getFirstImg: getBackImg, uploadImgAction: cardbackphotourlUpLoad, uploadImgList: cardbackImgList, handleImg: cardbackHandle } = getUploadImg();
    // 正面证件照地址
    const { getFirstImg: getFrontImg, uploadImgAction: cardfrontphotourlUpLoad, uploadImgList: cardfrontImgList, handleImg: cardfrontHandle } = getUploadImg();
    //查询所属机构列表
    const { areaList, getAreaList } = handleAreaList();
    // 查询客户经理
    const { brokerList, getBrokerApply } = handleBrokerApplyt();
    if (isQianHaiJin()) {
      Promise.all([getAreaList(loading), getBrokerApply(loading)]);
    }

    // 性别
    const sexList = [
      { id: 0, value: '女' },
      { id: 1, value: '男' },
    ];
    function isPersonal(): boolean {
      return formState.userinfotype === '1';
    }
    const isAdd = () => !props.selectedRow.userinfotype;
    const isN = (value: string) => value === '--';
    // 修改 客户资料的逻辑
    if (!isAdd()) {
      console.log('修改::::::::::::::::::::::::::');

      mergeTwoObj(formState, props.selectedRow);
      formState.userinfotype = formState.userinfotype.toString();
      if (isPersonal()) {
        formState.username = props.selectedRow.customername;
      } else {
        formState.username = props.selectedRow.username;
      }
      const { provinceid, cityid, address, mobile, memberuserid, brokerid, cardfrontphotourl, cardbackphotourl } = props.selectedRow;
      formState.cardaddress = isN(address) ? '' : address;
      formState.mobilephone = mobile;
      formState.areaid = memberuserid;
      formState.teammanageruserid = brokerid ? brokerid : undefined;
      provinceid ? getCityList(provinceid) : (formState.provinceid = undefined);
      cityid ? getDistrictList(cityid) : ((formState.cityid = undefined), (formState.districtid = undefined));

      if (cardfrontphotourl && !isN(cardfrontphotourl)) {
        // 营业执照
        attachmentImgList.value = attachmentHandle(cardfrontphotourl);
      }
      if (cardbackphotourl && !isN(cardbackphotourl)) {
        // 背面证件照地址
        cardbackImgList.value = cardbackHandle(cardbackphotourl);
      }
      if (cardbackphotourl && !isN(cardbackphotourl)) {
        // 正面证件照地址
        cardfrontImgList.value = cardfrontHandle(cardbackphotourl);
      }
    }

    function submit(OperateType: 1 | 2) {
      validateAction<FormState>(formRef, formState).then((param) => {
        console.log(props.selectedRow);
        const reqParam: CustomerInfoOperateReq = {
          operatetype: isAdd() ? 1 : 2, // 1： 新增 2:修改
          userid: getUserId(), // 必填
          areaid: getUserId(),
          userinfotype: Number(param.userinfotype),
          username: Number(param.userinfotype) === 1 ? param.username : param.customername,
          userstate: OperateType, // 1： 保存草稿 2： 新增
          // 以上必填
          cardtype: (param.cardtype as number) !== undefined ? (param.cardtype as number) : 0, // 证件类型
          cardnum: param.cardnum, // 证件号码
          nickname: param.nickname, // 昵称
          remark: param.remark, // 备注
          mobilephone: param.mobilephone, //  手机号码
          telphone: param.telphone, // 电话
          cardfrontphotourl: isPersonal() ? getFrontImg() : getAttachmentImg(), // 正面照片
          cardbackphotourl: isPersonal() ? getBackImg() : '', // 背面证件照地址
          ipaddress: param.cardaddress, // 证件地址
          cityid: (param.cityid as number) !== undefined ? (param.cityid as number) : 0, //城市
          districtid: (param.districtid as number) !== undefined ? (param.districtid as number) : 0, // 地区
          // countryid: param.,9
          provinceid: (param.provinceid as number) !== undefined ? (param.provinceid as number) : 0, //省
          contactname: param.contactname, // 联系人
          legalpersonname: param.legalpersonname, // 法人姓名(企业)
          taxpayernum: param.taxpayernum, // 纳税人识别号
          email: param.email, // email
          proxystatementurl: '',
        };
        if (isQianHaiJin()) {
          // 千海金
          reqParam.areaid = param.areaid as number;
          reqParam.logincode = param.logincode;
          reqParam.teammanageruserid = param.teammanageruserid ? param.teammanageruserid : 0;
          if (isPersonal()) {
            reqParam.sex = param.sex;
            if (param.birthday) {
              reqParam.birthday = moment(param.birthday).format('YYYY-MM-DD');
            }
          }
          reqParam.loginpwd = toBase64String(toBase64String(param.loginpwd));
          reqParam.userstate = 2;
        }
        debugger;
        requestResultLoadingAndInfo(addCustomerInfoOperate, reqParam, loading, OperateType === 1 ? ['保存草稿成功', '保存草稿失败:'] : ['新增客户资料成功', '新增客户资料失败:']).then(() => {
          cancel(true);
        });
      });
    }
    return {
      formState,
      rules,
      formRef,
      cardTypeList,
      isPersonal,
      visible,
      cancel,
      submit,
      loading,
      cityList,
      districtList,
      provinceList,
      areaList,
      brokerList,
      attachmentImgList,
      cardbackImgList,
      cardfrontImgList,
      sexList,
      getCityList,
      getDistrictList,
      attachmentUpLoad,
      cardbackphotourlUpLoad,
      cardfrontphotourlUpLoad,
      isPingAnOem,
      isQianHaiJin,
      isAdd,
    };
  },
});
</script>