index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. <template>
  2. <!-- 平安客户资料 -->
  3. <a-modal class="add-custom" :title="isAdd() ? '新增客户资料' : '修改客户资料'" v-model:visible="visible" @cancel="cancel" centered :maskClosable="false" v-if="isPingAnOem()" width="890px">
  4. <template #footer>
  5. <a-button key="submit" class="cancelBtn" :loading="loading" :disabled="loading" @click="submit(1)">完成 </a-button>
  6. </template>
  7. <a-form class="inlineForm" ref="formRef" :model="formState" :rules="rules">
  8. <a-row :gutter="24">
  9. <a-col :span="12">
  10. <a-form-item label="客户类型" name="userinfotype">
  11. <a-select class="typeSelect" style="width: 200px" v-model:value="formState.userinfotype" placeholder="请选择客户类型">
  12. <a-select-option value="1"> 个人 </a-select-option>
  13. <a-select-option value="2"> 企业 </a-select-option>
  14. </a-select>
  15. </a-form-item>
  16. </a-col>
  17. <template v-if="!isPersonal()">
  18. <a-col :span="12">
  19. <a-form-item label="企业名称" name="customername">
  20. <a-input class="dialogInput" v-model:value="formState.customername" style="width: 200px" placeholder="请输入企业名称" />
  21. </a-form-item>
  22. </a-col>
  23. </template>
  24. <template v-else>
  25. <a-col :span="12">
  26. <a-form-item label="姓名" name="username">
  27. <a-input class="dialogInput" style="width: 200px" v-model:value="formState.username" placeholder="请输入姓名" />
  28. </a-form-item>
  29. </a-col>
  30. </template>
  31. <a-col :span="12">
  32. <a-form-item label="点价联系人" name="contactname">
  33. <a-input class="dialogInput" style="width: 200px" v-model:value="formState.contactname" placeholder="请输入联系人" />
  34. </a-form-item>
  35. </a-col>
  36. <a-col :span="12">
  37. <a-form-item label="联系人手机号" name="mobilephone">
  38. <a-input class="dialogInput" style="width: 200px" v-model:value="formState.mobilephone" placeholder="请输入联系人手机号" />
  39. </a-form-item>
  40. </a-col>
  41. </a-row>
  42. </a-form>
  43. </a-modal>
  44. <!-- 其他项目客户资料 -->
  45. <a-modal class="add-custom" v-else :title="isAdd() ? '新增客户资料' : '修改客户资料'" v-model:visible="visible" @cancel="cancel" centered :maskClosable="false" width="890px">
  46. <template #footer>
  47. <a-button key="submit" class="cancelBtn" :loading="loading" :disabled="loading" @click="submit(1)">保存草稿 </a-button>
  48. <a-button key="submit" type="primary" :loading="loading" :disabled="loading" @click="submit(2)">提交审核 </a-button>
  49. </template>
  50. <a-form class="inlineForm" ref="formRef" :model="formState" :rules="rules">
  51. <a-row :gutter="24">
  52. <template v-if="isQianHaiJin()">
  53. <a-col :span="12">
  54. <a-form-item label="所属机构" name="areaid">
  55. <a-select class="typeSelect" style="width: 200px" v-model:value="formState.areaid" placeholder="请选择所属机构">
  56. <a-select-option v-for="item in areaList" :key="item.userid">
  57. {{ item.accountname }}
  58. </a-select-option>
  59. </a-select>
  60. </a-form-item>
  61. </a-col>
  62. <a-col :span="12">
  63. <a-form-item label="所属客户经理" name="teammanageruserid">
  64. <a-select class="typeSelect" style="width: 200px" v-model:value="formState.teammanageruserid" placeholder="请选择所属客户经理">
  65. <a-select-option v-for="item in brokerList" :key="item.userid">
  66. {{ item.customername }}
  67. </a-select-option>
  68. </a-select>
  69. </a-form-item>
  70. </a-col>
  71. <a-col :span="12" v-if="isAdd()">
  72. <a-form-item label="登录账号" name="logincode">
  73. <a-input class="dialogInput" v-model:value="formState.logincode" style="width: 200px" placeholder="请选择登录账号" />
  74. </a-form-item>
  75. </a-col>
  76. <a-col :span="12" v-if="isAdd()">
  77. <a-form-item label="登录密码" name="loginpwd">
  78. <a-input class="dialogInput" v-model:value="formState.loginpwd" style="width: 200px" placeholder="请选择登录密码" />
  79. </a-form-item>
  80. </a-col>
  81. </template>
  82. <a-col :span="12">
  83. <a-form-item label="客户类型" name="userinfotype">
  84. <a-select class="typeSelect" style="width: 200px" v-model:value="formState.userinfotype" placeholder="请选择客户类型">
  85. <a-select-option value="1"> 个人 </a-select-option>
  86. <a-select-option value="2"> 企业 </a-select-option>
  87. </a-select>
  88. </a-form-item>
  89. </a-col>
  90. <template v-if="!isPersonal()">
  91. <a-col :span="12">
  92. <a-form-item label="企业名称" name="customername">
  93. <a-input class="dialogInput" v-model:value="formState.customername" style="width: 200px" placeholder="请输入企业名称" />
  94. </a-form-item>
  95. </a-col>
  96. <a-col :span="12">
  97. <a-form-item label="企业简称" name="nickname">
  98. <a-input class="dialogInput" style="width: 200px" v-model:value="formState.nickname" placeholder="请输入企业简称" />
  99. </a-form-item>
  100. </a-col>
  101. <a-col :span="12">
  102. <a-form-item label="证件类型" name="cardtype">
  103. <a-select class="inlineFormSelect" v-model:value="formState.cardtype" style="width: 200px" placeholder="请选择证件类型">
  104. <a-select-option :value="item.enumitemname" v-for="item in cardTypeList" :key="item.autoid">
  105. {{ item.enumdicname }}
  106. </a-select-option>
  107. </a-select>
  108. </a-form-item>
  109. </a-col>
  110. <a-col :span="12">
  111. <a-form-item label="法定代表人" name="legalpersonname">
  112. <a-input class="dialogInput" style="width: 200px" v-model:value="formState.legalpersonname" placeholder="请输入法定代表人" />
  113. </a-form-item>
  114. </a-col>
  115. <a-col :span="12">
  116. <a-form-item label="证件号码" name="cardnum">
  117. <a-input class="dialogInput" style="width: 200px" v-model:value="formState.cardnum" placeholder="请输入证件号码" />
  118. </a-form-item>
  119. </a-col>
  120. <a-col :span="12">
  121. <a-form-item label="纳税人识别号" name="taxpayernum">
  122. <a-input class="dialogInput" style="width: 200px" v-model:value="formState.taxpayernum" placeholder="请输入纳税人识别号" />
  123. </a-form-item>
  124. </a-col>
  125. <a-col :span="12">
  126. <a-form-item label="营业执照">
  127. <UploadImg :visible="visible" :imgList="attachmentImgList" @upload="attachmentUpLoad" />
  128. </a-form-item>
  129. </a-col>
  130. <a-col :span="12">
  131. <a-form-item label="联系人" name="contactname">
  132. <a-input class="dialogInput" style="width: 200px" v-model:value="formState.contactname" placeholder="请输入联系人" />
  133. </a-form-item>
  134. </a-col>
  135. <a-col :span="12">
  136. <a-form-item label="联系人手机号" name="mobilephone">
  137. <a-input class="dialogInput" style="width: 200px" v-model:value="formState.mobilephone" placeholder="请输入联系人手机号" />
  138. </a-form-item>
  139. </a-col>
  140. <a-col :span="12">
  141. <a-form-item label="联系电话" name="telphone">
  142. <a-input class="dialogInput" style="width: 200px" v-model:value="formState.telphone" placeholder="请输入联系电话" />
  143. </a-form-item>
  144. </a-col>
  145. </template>
  146. <template v-else>
  147. <a-col :span="12">
  148. <a-form-item label="姓名" name="username">
  149. <a-input class="dialogInput" style="width: 200px" v-model:value="formState.username" placeholder="请输入姓名" />
  150. </a-form-item>
  151. </a-col>
  152. <a-col :span="12">
  153. <a-form-item label="身份证号码" name="cardnum">
  154. <a-input class="dialogInput" style="width: 200px" v-model:value="formState.cardnum" placeholder="请输入身份证号码" />
  155. </a-form-item>
  156. </a-col>
  157. <a-col :span="12">
  158. <a-form-item label="手机号码" name="mobilephone">
  159. <a-input class="dialogInput" style="width: 200px" v-model:value="formState.mobilephone" placeholder="请输入手机号码" />
  160. </a-form-item>
  161. </a-col>
  162. <a-col :span="12">
  163. <a-form-item label="身份证正面照" name="cardbackphotourl">
  164. <UploadImg :visible="visible" :imgList="cardfrontImgList" @upload="cardfrontphotourlUpLoad" />
  165. </a-form-item>
  166. </a-col>
  167. <a-col :span="12">
  168. <a-form-item label="邮箱" name="email">
  169. <a-input class="dialogInput" style="width: 200px" v-model:value="formState.email" placeholder="请输入邮箱" />
  170. </a-form-item>
  171. </a-col>
  172. <a-col :span="12">
  173. <a-form-item label="身份证反面照" name="cardfrontphotourl">
  174. <UploadImg :visible="visible" :imgList="cardbackImgList" @upload="cardbackphotourlUpLoad" />
  175. </a-form-item>
  176. </a-col>
  177. <a-col :span="12">
  178. <a-form-item label="联系电话" name="telphone">
  179. <a-input class="dialogInput" style="width: 200px" v-model:value="formState.telphone" placeholder="请输入联系电话" />
  180. </a-form-item>
  181. </a-col>
  182. <a-col :span="12" v-if="isQianHaiJin()">
  183. <a-form-item label="性别" name="sex">
  184. <a-select class="inlineFormSelect" v-model:value="formState.sex" style="width: 200px" placeholder="请选择性别">
  185. <a-select-option :value="item.id" v-for="item in sexList" :key="item.id">
  186. {{ item.value }}
  187. </a-select-option>
  188. </a-select>
  189. <!-- <a-input class="dialogInput"
  190. style="width: 200px"
  191. v-model:value="formState.sex"
  192. placeholder="请选择性别" /> -->
  193. </a-form-item>
  194. </a-col>
  195. <a-col :span="12" v-if="isQianHaiJin()">
  196. <a-form-item label="生日" name="birthday">
  197. <a-date-picker v-model:value="formState.birthday" :allowClear="false" style="width: 200px" placeholder="请选择生日" class="commonDatePicker" />
  198. <!-- <a-input class="dialogInput"
  199. style="width: 200px"
  200. v-model:value="formState.birthday"
  201. placeholder="请选择性别" /> -->
  202. </a-form-item>
  203. </a-col>
  204. <a-col :span="12">
  205. <a-form-item> &nbsp; </a-form-item>
  206. </a-col>
  207. </template>
  208. <a-col :span="24">
  209. <a-form-item label="通讯地址">
  210. <a-select class="inlineFormSelect" style="width: 205px" v-model:value="formState.provinceid" @change="getCityList" placeholder="请选择省">
  211. <a-select-option v-for="item in provinceList" :key="item.autoid" :value="item.autoid">
  212. {{ item.divisionname }}
  213. </a-select-option>
  214. </a-select>
  215. <a-select class="inlineFormSelect ml9" style="width: 205px" v-model:value="formState.cityid" @change="getDistrictList" placeholder="请选择市">
  216. <a-select-option v-for="item in cityList" :key="item.autoid" :value="item.autoid">
  217. {{ item.divisionname }}
  218. </a-select-option>
  219. </a-select>
  220. <a-select class="inlineFormSelect ml9" v-model:value="formState.districtid" style="width: 205px" placeholder="请选择县(区)">
  221. <a-select-option v-for="item in districtList" :key="item.autoid" :value="item.autoid">
  222. {{ item.divisionname }}
  223. </a-select-option>
  224. </a-select>
  225. </a-form-item>
  226. </a-col>
  227. <a-col :span="24">
  228. <a-form-item label="&nbsp;" name="cardaddress">
  229. <a-input class="dialogInput" style="width: 635px" v-model:value="formState.cardaddress" placeholder="请输入详细地址" />
  230. </a-form-item>
  231. </a-col>
  232. <a-col :span="24">
  233. <a-form-item label="备注" name="remark">
  234. <a-input class="dialogInput" style="width: 635px" v-model:value="formState.remark" placeholder="请输入备注" />
  235. </a-form-item>
  236. </a-col>
  237. </a-row>
  238. </a-form>
  239. </a-modal>
  240. </template>
  241. <script lang="ts">
  242. import UploadImg from '@/common/components/uploadImg/index.vue';
  243. import { isPingAnOem, isQianHaiJin } from '@/common/config/projectName';
  244. import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
  245. import { validateAction } from '@/common/setup/form';
  246. import { _closeModal } from '@/common/setup/modal/modal';
  247. import { getUploadImg } from '@/common/setup/upload';
  248. import { getUserId } from '@/services/bus/user';
  249. import { getAddress } from '@/services/go/adress';
  250. import { AllEnums } from '@/services/go/commonService/interface';
  251. import { QhjCustomer } from '@/services/go/ermcp/qhj/interface';
  252. import { addCustomerInfoOperate } from '@/services/proto/accountinfo';
  253. import { CustomerInfoOperateReq } from '@/services/proto/accountinfo/interface';
  254. import { mergeTwoObj } from '@/utils/objHandle';
  255. import { toBase64String } from '@/utils/storage/base64';
  256. import { defineComponent, PropType, ref } from 'vue';
  257. import { FormState } from './interface';
  258. import { getCardType, handleAreaList, handleBrokerApplyt, handleForm } from './setup';
  259. import moment, { Moment } from 'moment';
  260. export default defineComponent({
  261. name: 'add-custom',
  262. emits: ['cancel', 'update'],
  263. components: { UploadImg },
  264. props: {
  265. selectedRow: {
  266. default: {},
  267. type: Object as PropType<QhjCustomer>,
  268. },
  269. },
  270. setup(props, context) {
  271. // 控制关闭弹窗
  272. const { visible, cancel } = _closeModal(context);
  273. const loading = ref<boolean>(false);
  274. // 证件类型
  275. const cardTypeList = ref<AllEnums[]>(getCardType());
  276. // 表单
  277. const { formRef, formState, rules } = handleForm();
  278. // 地址
  279. const { cityList, districtList, provinceList, getCityList, getDistrictList } = getAddress();
  280. // 营业执照
  281. const { getFirstImg: getAttachmentImg, uploadImgAction: attachmentUpLoad, uploadImgList: attachmentImgList, handleImg: attachmentHandle } = getUploadImg();
  282. // 背面证件照地址
  283. const { getFirstImg: getBackImg, uploadImgAction: cardbackphotourlUpLoad, uploadImgList: cardbackImgList, handleImg: cardbackHandle } = getUploadImg();
  284. // 正面证件照地址
  285. const { getFirstImg: getFrontImg, uploadImgAction: cardfrontphotourlUpLoad, uploadImgList: cardfrontImgList, handleImg: cardfrontHandle } = getUploadImg();
  286. //查询所属机构列表
  287. const { areaList, getAreaList } = handleAreaList();
  288. // 查询客户经理
  289. const { brokerList, getBrokerApply } = handleBrokerApplyt();
  290. if (isQianHaiJin()) {
  291. Promise.all([getAreaList(loading), getBrokerApply(loading)]);
  292. }
  293. // 性别
  294. const sexList = [
  295. { id: 0, value: '女' },
  296. { id: 1, value: '男' },
  297. ];
  298. function isPersonal(): boolean {
  299. return formState.userinfotype === '1';
  300. }
  301. const isAdd = () => !props.selectedRow.userinfotype;
  302. const isN = (value: string) => value === '--';
  303. // 修改 客户资料的逻辑
  304. if (!isAdd()) {
  305. console.log('修改::::::::::::::::::::::::::');
  306. mergeTwoObj(formState, props.selectedRow);
  307. formState.userinfotype = formState.userinfotype.toString();
  308. if (isPersonal()) {
  309. formState.username = props.selectedRow.customername;
  310. } else {
  311. formState.username = props.selectedRow.username;
  312. }
  313. const { provinceid, cityid, address, mobile, memberuserid, brokerid, cardfrontphotourl, cardbackphotourl } = props.selectedRow;
  314. formState.cardaddress = isN(address) ? '' : address;
  315. formState.mobilephone = mobile;
  316. formState.areaid = memberuserid;
  317. formState.teammanageruserid = brokerid ? brokerid : undefined;
  318. provinceid ? getCityList(provinceid) : (formState.provinceid = undefined);
  319. cityid ? getDistrictList(cityid) : ((formState.cityid = undefined), (formState.districtid = undefined));
  320. if (cardfrontphotourl && !isN(cardfrontphotourl)) {
  321. // 营业执照
  322. attachmentImgList.value = attachmentHandle(cardfrontphotourl);
  323. }
  324. if (cardbackphotourl && !isN(cardbackphotourl)) {
  325. // 背面证件照地址
  326. cardbackImgList.value = cardbackHandle(cardbackphotourl);
  327. }
  328. if (cardbackphotourl && !isN(cardbackphotourl)) {
  329. // 正面证件照地址
  330. cardfrontImgList.value = cardfrontHandle(cardbackphotourl);
  331. }
  332. }
  333. function submit(OperateType: 1 | 2) {
  334. validateAction<FormState>(formRef, formState).then((param) => {
  335. console.log(props.selectedRow);
  336. const reqParam: CustomerInfoOperateReq = {
  337. operatetype: isAdd() ? 1 : 2, // 1: 新增 2:修改
  338. userid: getUserId(), // 必填
  339. areaid: getUserId(),
  340. userinfotype: Number(param.userinfotype),
  341. username: Number(param.userinfotype) === 1 ? param.username : param.customername,
  342. userstate: OperateType, // 1: 保存草稿 2: 新增
  343. // 以上必填
  344. cardtype: (param.cardtype as number) !== undefined ? (param.cardtype as number) : 0, // 证件类型
  345. cardnum: param.cardnum, // 证件号码
  346. nickname: param.nickname, // 昵称
  347. remark: param.remark, // 备注
  348. mobilephone: param.mobilephone, // 手机号码
  349. telphone: param.telphone, // 电话
  350. cardfrontphotourl: isPersonal() ? getFrontImg() : getAttachmentImg(), // 正面照片
  351. cardbackphotourl: isPersonal() ? getBackImg() : '', // 背面证件照地址
  352. ipaddress: param.cardaddress, // 证件地址
  353. cityid: (param.cityid as number) !== undefined ? (param.cityid as number) : 0, //城市
  354. districtid: (param.districtid as number) !== undefined ? (param.districtid as number) : 0, // 地区
  355. // countryid: param.,9
  356. provinceid: (param.provinceid as number) !== undefined ? (param.provinceid as number) : 0, //省
  357. contactname: param.contactname, // 联系人
  358. legalpersonname: param.legalpersonname, // 法人姓名(企业)
  359. taxpayernum: param.taxpayernum, // 纳税人识别号
  360. email: param.email, // email
  361. proxystatementurl: '',
  362. };
  363. if (isQianHaiJin()) {
  364. // 千海金
  365. reqParam.areaid = param.areaid as number;
  366. reqParam.logincode = param.logincode;
  367. reqParam.teammanageruserid = param.teammanageruserid ? param.teammanageruserid : 0;
  368. if (isPersonal()) {
  369. reqParam.sex = param.sex;
  370. if (param.birthday) {
  371. reqParam.birthday = moment(param.birthday).format('YYYY-MM-DD');
  372. }
  373. }
  374. reqParam.loginpwd = toBase64String(toBase64String(param.loginpwd));
  375. reqParam.userstate = 2;
  376. }
  377. debugger;
  378. requestResultLoadingAndInfo(addCustomerInfoOperate, reqParam, loading, OperateType === 1 ? ['保存草稿成功', '保存草稿失败:'] : ['新增客户资料成功', '新增客户资料失败:']).then(() => {
  379. cancel(true);
  380. });
  381. });
  382. }
  383. return {
  384. formState,
  385. rules,
  386. formRef,
  387. cardTypeList,
  388. isPersonal,
  389. visible,
  390. cancel,
  391. submit,
  392. loading,
  393. cityList,
  394. districtList,
  395. provinceList,
  396. areaList,
  397. brokerList,
  398. attachmentImgList,
  399. cardbackImgList,
  400. cardfrontImgList,
  401. sexList,
  402. getCityList,
  403. getDistrictList,
  404. attachmentUpLoad,
  405. cardbackphotourlUpLoad,
  406. cardfrontphotourlUpLoad,
  407. isPingAnOem,
  408. isQianHaiJin,
  409. isAdd,
  410. };
  411. },
  412. });
  413. </script>