index.vue 63 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384
  1. <template>
  2. <!-- 提现账号 -->
  3. <div class="shandeMchPage flex-col"
  4. :class="{ page1: pageType === '1', page2: pageType === '2', page3: pageType === '3', page4: pageType === '4' }">
  5. <s-header :name="$t('joinpayMch.settlementAccount')" :noback="false"></s-header>
  6. <div class="shandeMchBox flex-col">
  7. <div class="topSpeed" v-if="pageType !== '4'"
  8. :class="{ page1: pageType === '1', page2: pageType === '2', page3: pageType === '3' }"></div>
  9. <div v-if="pageType === '1' || pageType === '4'">
  10. <van-form @submit="saveJoinPayMchFun">
  11. <div class="van-cell van-field">
  12. <div class="van-cell__title van-field__label"><span>{{ $t('joinpayMch.joinpayAuditStatus') }}</span></div>
  13. <div class="van-cell__value van-field__value" style="text-align: left;">
  14. <span :style="{
  15. color: joinPayMchID != null ? (joinPayMchType == '1' ? (joinPayMchStep == '1' ? (signStatus == '签约成功' ? '#00ff80'
  16. : '#FFA500') : '#FFA500') : '#FFA500') : '#FFA500'
  17. }">
  18. {{ joinPayMchID != null ? (joinPayMchType == '1' ? (joinPayMchStep == '1' ? (signStatus == '签约成功' ? '注册成功'
  19. : '待签约') : '待上传证件图片') : '审核未通过') : '未注册' }}
  20. </span>
  21. </div>
  22. </div>
  23. <div class="van-cell van-field">
  24. <div class="van-cell__title van-field__label"><span>{{ $t('joinpayMch.huifuAuditStatus') }}</span></div>
  25. <div class="van-cell__value van-field__value" style="text-align: left;">
  26. <!-- <span :style="{
  27. color: huifuMchID != null ? (huifuAuditStatus == '2' ? (conStat == '5' ? '#00ff80' : '#FFA500') :
  28. (huifuAuditStatus == '0' ? '#FFA500' : (huifuAuditStatus == '1' || huifuAuditStatus == '4' ? '#FFA500' :
  29. '#FF0000'))) : '#FFA500'
  30. }">
  31. {{ huifuMchID != null ? (huifuAuditStatus == '2' ? (conStat == '5' ? '注册成功' : '待签约') :
  32. (huifuAuditStatus == '0' ? '待上传证件图片' : (huifuAuditStatus == '1' || huifuAuditStatus == '4' ? '待签约' :
  33. '审核未通过'))) : '未注册' }}
  34. </span> -->
  35. <span :style="{
  36. color: huifuMchID != null ? (huifuAuditStatus == '2' ? '#00ff80' : (huifuAuditStatus == '0' ? '#FFA500' :
  37. (huifuAuditStatus == '1' || huifuAuditStatus == '4' ? '#FFA500' :
  38. '#FF0000'))) : '#FFA500'
  39. }">
  40. {{ huifuMchID != null ? (huifuAuditStatus == '2' ? '注册成功' : (huifuAuditStatus == '0' ? '待上传证件图片' :
  41. (huifuAuditStatus == '1' || huifuAuditStatus == '4' ? '待签约' :
  42. '审核未通过'))) : '未注册' }}
  43. </span>
  44. </div>
  45. </div>
  46. <div v-if="pageType === '4'">
  47. <van-field v-model="altMchName" name="altMchName" :label="$t('joinpayMch.merchantNameLabel')" readonly />
  48. <van-field v-model="altMchNo" name="altMchNo" :label="$t('joinpayMch.merchantAccountLabel')" readonly />
  49. <!-- <van-field v-model="altMchShortName" name="altMchShortName" :label="$t('joinpayMch.merchantAbbreviationLabel')" readonly /> -->
  50. </div>
  51. <div class="intervalRow"></div>
  52. <!-- 商户类型 -->
  53. <div class="van-cell van-field requiredLeft">
  54. <div class="van-cell__title van-field__label"><span>{{ $t('joinpayMch.merchantType') }}</span></div>
  55. <div class="van-cell__value van-field__value radioBox">
  56. <van-radio-group v-model="altMerchantType" direction="horizontal" @change="fieldUpdate"
  57. :disabled="huifuMchID != null || joinPayMchID != null">
  58. <van-radio name="10" icon-size="18px">{{ $t('joinpayMch.personal') }}</van-radio>
  59. <!-- <van-radio name="11" icon-size="18px">{{$t('joinpayMch.individualBusinesses')}}</van-radio> -->
  60. <van-radio name="12" icon-size="18px">{{ $t('joinpayMch.enterprise') }}</van-radio>
  61. </van-radio-group>
  62. </div>
  63. </div>
  64. <div v-if="altMerchantType == 12" class="requiredLeft">
  65. <!-- 商户名称 -->
  66. <div class="cell-input">
  67. <van-popover v-model:show="regNameVisible" trigger="manual" placement="top" popover-class="custom-popover"
  68. :offset="[25,]" theme="dark">
  69. <template #reference>
  70. <van-field v-model="regNameValue" name="regNameValue" :label="$t('huifuMch.huifuRegName')"
  71. :placeholder="$t('huifuMch.huifuRegNamePlaceholder')"
  72. :rules="[{ required: true, message: $t('huifuMch.huifuRegNamePlaceholder') }]"
  73. @update:model-value="fieldUpdate" @click="showPopover(1)" />
  74. </template>
  75. {{ $t('joinpayMch.merchantNameTips') }}
  76. </van-popover>
  77. </div>
  78. <!-- 商户简称 -->
  79. <!-- <div class="cell-input">
  80. <van-popover v-model:show="shortNameVisible" trigger="manual" placement="bottom"
  81. popover-class="custom-popover" :offset="[25, 0]" theme="dark">
  82. <template #reference>
  83. <van-field v-model="shortNameValue" name="shortNameValue" :label="$t('huifuMch.shortNameLabel')"
  84. :placeholder="$t('huifuMch.shortNamePlaceholder')"
  85. :rules="[{ required: true, message: $t('huifuMch.shortNamePlaceholder') }]"
  86. @update:model-value="fieldUpdate" @click="showPopover(2)" />
  87. </template>
  88. {{ $t('joinpayMch.merchantAbbreviationTips') }}
  89. </van-popover>
  90. </div> -->
  91. <!-- 注册地址 -->
  92. <van-field v-model="registeredAddress" is-link readonly name="registeredAddress"
  93. :label="$t('huifuMch.huifuRegisteredAddress')"
  94. :placeholder="$t('huifuMch.huifuRegisteredAddressPlaceholder')"
  95. :rules="[{ required: true, message: $t('huifuMch.huifuRegisteredAddressPlaceholder') }]"
  96. @click="showReAddress = true" />
  97. <!-- 成立时间 -->
  98. <!-- <van-field v-model="companyFoundDate" readonly name="companyFoundDate"
  99. :label="$t('huifuMch.companyFoundDate')" :placeholder="$t('huifuMch.companyFoundDatePlaceholder')"
  100. @click="showFoundDate = true"
  101. :rules="[{ required: true, message: $t('huifuMch.companyFoundDatePlaceholder') }]" /> -->
  102. <!-- 客服电话 -->
  103. <!-- <van-field v-model="servicePhoneValue" name="servicePhoneValue" :label="$t('huifuMch.huifuServicePhone')"
  104. :placeholder="$t('huifuMch.huifuServicePhonePlaceholder')"
  105. :rules="[{ required: true, message: $t('huifuMch.huifuServicePhonePlaceholder') }]"
  106. @update:model-value="fieldUpdate" /> -->
  107. </div>
  108. <div class="intervalRow"></div>
  109. <!-- 联系人姓名 -->
  110. <van-field class="requiredLeft" v-model="busiContactName" name="busiContactName"
  111. :label="$t('joinpayMch.contactNameLabel')" :placeholder="$t('joinpayMch.contactNamePlaceholder')"
  112. :rules="[{ required: true, message: $t('joinpayMch.contactNamePlaceholder') }]"
  113. @update:model-value="fieldUpdate" />
  114. <!-- 联系人手机号码 -->
  115. <van-field class="requiredLeft" v-model="busiContactMobileNo" name="busiContactMobileNo"
  116. :label="$t('joinpayMch.cellPhoneLabel')" :placeholder="$t('joinpayMch.cellPhonePlaceholder')"
  117. :rules="[{ required: true, message: $t('joinpayMch.cellPhonePlaceholder') }]"
  118. @update:model-value="fieldUpdate" />
  119. <!-- 联系人邮箱 -->
  120. <!-- <van-field class="requiredLeft" v-model="emailValue" name="emailValue" :label="$t('huifuMch.huifuContactEmail')"
  121. :placeholder="$t('huifuMch.huifuContactEmailPlaceholder')"
  122. :rules="[{ required: true, pattern: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/, message: $t('huifuMch.huifuContactEmailMessage') }]"
  123. @update:model-value="fieldUpdate" /> -->
  124. <!-- 法人/个人姓名 -->
  125. <van-field class="requiredLeft" v-model="legalPerson" name="legalPerson"
  126. :label="$t('joinpayMch.nameOfLegalPerson/IndividualLabel')"
  127. :placeholder="$t('joinpayMch.nameOfLegalPerson/IndividualPlaceholder')"
  128. :rules="[{ required: true, message: $t('joinpayMch.nameOfLegalPerson/IndividualPlaceholder') }]"
  129. @update:model-value="fieldUpdate" />
  130. <!-- 法人/个人手机号 -->
  131. <van-field class="requiredLeft" v-model="phoneNo" name="phoneNo"
  132. :label="$t('joinpayMch.phoneNumberOfLegalPerson/IndividualLabel')"
  133. :placeholder="$t('joinpayMch.phoneNumberOfLegalPerson/IndividualPlaceholder')"
  134. :rules="[{ required: true, message: $t('joinpayMch.phoneNumberOfLegalPerson/IndividualPlaceholder') }]"
  135. @update:model-value="fieldUpdate" />
  136. <!-- 身份证号 -->
  137. <van-field class="requiredLeft" v-model="idCardNo" name="idCardNo" :label="$t('joinpayMch.IDLabel')"
  138. :placeholder="$t('joinpayMch.IDPlaceholder')"
  139. :rules="[{ required: true, message: $t('joinpayMch.IDPlaceholder') }]" @update:model-value="fieldUpdate" />
  140. <!-- 身份证地址 -->
  141. <van-field v-if="bankAccountType == '4'" class="requiredLeft" v-model="certAddressValue" name="certAddressValue"
  142. :label="$t('huifuMch.certAddress')" :placeholder="$t('huifuMch.certAddressPlaceholder')"
  143. :rules="[{ required: true, message: $t('huifuMch.certAddressPlaceholder') }]"
  144. @update:model-value="fieldUpdate" />
  145. <!-- 身份证有效期类型 -->
  146. <div class="van-cell van-field requiredLeft">
  147. <div class="van-cell__title van-field__label"><span>{{ $t('huifuMch.certType') }}</span></div>
  148. <div class="van-cell__value van-field__value radioBox">
  149. <van-radio-group v-model="validityType" direction="horizontal" @change="fieldUpdate">
  150. <van-radio name="1" icon-size="18px">{{ $t('huifuMch.permanent') }}</van-radio>
  151. <van-radio name="0" icon-size="18px">{{ $t('huifuMch.noPermanent') }}</van-radio>
  152. </van-radio-group>
  153. </div>
  154. </div>
  155. <!-- 有效开始日期 -->
  156. <van-field class="requiredLeft" v-model="beginDate" readonly name="beginDate" :label="$t('huifuMch.beginDate')"
  157. :placeholder="$t('huifuMch.beginDatePlaceholder')" @click="showBeginDate = true"
  158. :rules="[{ required: true, message: $t('huifuMch.beginDatePlaceholder') }]" />
  159. <!-- 有效截止日期 -->
  160. <van-field class="requiredLeft" v-if="validityType == 0" v-model="endDate" readonly name="endDate"
  161. :label="$t('huifuMch.endDate')" :placeholder="$t('huifuMch.endDatePlaceholder')" @click="showEndDate = true"
  162. :rules="[{ required: true, message: $t('huifuMch.endDatePlaceholder') }]" />
  163. <!-- 图片审核情况 -->
  164. <div class="van-cell van-field" v-if="pageType === '4'">
  165. <div class="van-cell__title van-field__label"><span>{{ $t('joinpayMch.pictureReview') }}</span></div>
  166. <div class="van-cell__value van-field__value radioBox" style="display: flex; justify-content: space-around;">
  167. <span
  168. :style="{ color: approveStatus === '审核通过' ? (huifuPicUpStatus === 1 ? '#00ff80' : '#FF0000') : (approveStatus === '审核中' ? '#FFA500' : '#FF0000') }">
  169. {{ approveStatus === '审核通过' ? (huifuPicUpStatus === 1 ? '审核通过' : '请重新上传') : approveStatus }}
  170. </span>
  171. <van-button span="5" round type="primary" style="height: 2em; padding: 0 1.5em" @click='updateSentImage()'>
  172. {{ $t('joinpayMch.reUpload') }}</van-button>
  173. </div>
  174. </div>
  175. <!-- 签约状态 -->
  176. <div class="van-cell van-field" v-if="pageType === '4'">
  177. <div class="van-cell__title van-field__label"><span>{{ $t('joinpayMch.signingStatus') }}</span></div>
  178. <div class="van-cell__value van-field__value radioBox" style="display: flex; justify-content: space-around;">
  179. <!-- <span
  180. :style="{ color: signStatus == '签约成功' ? (conStat == null && huifuMchID == null ? '#00ff80' : (conStat == 5 && huifuAuditStatus == '2' ? '#00ff80' : '#FFA500')) : '#FFA500' }">
  181. {{ signStatus == '签约成功' ? (conStat == null && huifuMchID == null ? signStatus : (conStat == 5 &&
  182. huifuAuditStatus == '2' ?
  183. signStatus : '待签约')) : '待签约' }}
  184. </span> -->
  185. <span
  186. :style="{ color: signStatus == '签约成功' ? (huifuMchID == null ? '#00ff80' : (huifuAuditStatus == '2' ? '#00ff80' : '#FFA500')) : '#FFA500' }">
  187. {{ signStatus == '签约成功' ? (huifuMchID == null ? signStatus : (huifuAuditStatus == '2' ? signStatus :
  188. '待签约')) : '待签约' }}
  189. </span>
  190. <van-button
  191. :disabled="huifuMchID == null ? (signStatus == '签约成功' ? true : false) : (huifuAuditStatus == '2' && signStatus == '签约成功' ? true : false)"
  192. span="5" round type="primary" style="height: 2em; padding: 0 2.5em" @click='altMchSignFun()'>{{
  193. $t('joinpayMch.signAContract') }}
  194. </van-button>
  195. </div>
  196. </div>
  197. <div class="intervalRow"></div>
  198. <!-- 账户类型 -->
  199. <div class="van-cell van-field requiredLeft">
  200. <div class="van-cell__title van-field__label"><span>{{ $t('joinpayMch.accountType') }}</span></div>
  201. <div class="van-cell__value van-field__value radioBox">
  202. <van-radio-group v-model="bankAccountType" direction="horizontal" @change="fieldUpdate"
  203. :disabled="altMerchantType === '10'">
  204. <van-radio name="1" icon-size="18px">{{ $t('joinpayMch.debitCard') }}</van-radio>
  205. <van-radio name="4" icon-size="18px">{{
  206. $t('joinpayMch.corporateAccount')
  207. }}</van-radio>
  208. </van-radio-group>
  209. </div>
  210. </div>
  211. <!-- 银行账户名称 -->
  212. <div class="cell-input">
  213. <van-popover v-model:show="popoverVisible" trigger="manual" placement="top" popover-class="custom-popover"
  214. :offset="[25, 5]" theme="dark">
  215. <template #reference>
  216. <van-field class="custom-input" v-model="bankAccountName" name="bankAccountName"
  217. :label="$t('joinpayMch.bankAccountNameLabel')"
  218. :placeholder="$t('joinpayMch.bankAccountNamePlaceholder')"
  219. :rules="[{ required: true, message: $t('joinpayMch.bankAccountNamePlaceholder') }]"
  220. @update:model-value="fieldUpdate" @click="showPopover(3)" />
  221. </template>
  222. {{ $t('joinpayMch.bankAccountNameTips') }}
  223. </van-popover>
  224. </div>
  225. <!-- 银行账号 -->
  226. <van-field class="requiredLeft" v-model="bankAccountNo" name="bankAccountNo"
  227. :label="$t('joinpayMch.bankAccountLabel')" :placeholder="$t('joinpayMch.bankAccountPlaceholder')"
  228. :rules="[{ required: true, message: $t('joinpayMch.bankAccountPlaceholder') }]"
  229. @update:model-value="fieldUpdate" />
  230. <!-- 银行地址 -->
  231. <van-field class="requiredLeft" v-model="bankAddress" is-link readonly name="bankAddress"
  232. :label="$t('huifuMch.huifuBankAddress')" :placeholder="$t('huifuMch.huifuBankAddressPlaceholder')"
  233. :rules="[{ required: true, message: $t('huifuMch.huifuBankAddressPlaceholder') }]"
  234. @click="showBankAddress = true" />
  235. <!-- <div v-if="bankAccountType === '4'" class="requiredLeft"> -->
  236. <!-- 联行号 -->
  237. <van-field v-if="bankAccountType === '4'" class="requiredLeft" v-model="bankChannelNo" name="bankChannelNo"
  238. :label="$t('joinpayMch.interBankNoLabel')" :placeholder="$t('joinpayMch.interBankNoPlaceholder')"
  239. :rules="[{ required: bankAccountType === '4', message: $t('joinpayMch.interBankNoPlaceholder') }]"
  240. @update:model-value="fieldUpdate" />
  241. <!-- 银行编号 -->
  242. <van-field v-if="bankAccountType === '4'" class="bankCode" v-model="bankCodeValue" name="bankCodeValue"
  243. :label="$t('huifuMch.bankCodeLabel')" :placeholder="$t('huifuMch.bankCodePlaceholder')"
  244. :rules="[{ required: true, message: $t('huifuMch.bankCodePlaceholder') }]" @update:model-value="fieldUpdate">
  245. <template #button>
  246. <van-button size="small" type="primary" @click="showBankCode = true" style="padding: 0 1em;">
  247. 选择所属银行
  248. </van-button>
  249. </template>
  250. </van-field>
  251. <!-- </div> -->
  252. <!-- 银行编号弹窗 -->
  253. <van-popup v-model:show="showBankCode" position="bottom">
  254. <van-picker title="请选择所属银行" :columns="bankCodePopList" @confirm="bankCodePopConfirm"
  255. @cancel="showBankCode = false" />
  256. </van-popup>
  257. <div v-if="altMerchantType === '12'" class="requiredLeft">
  258. <!-- 营业执照编号 -->
  259. <van-field v-model="licenseNo" name="licenseNo" :label="$t('joinpayMch.businessLicenseNoLabel')"
  260. :placeholder="$t('joinpayMch.businessLicenseNoPlaceholder')"
  261. :rules="[{ required: bankAccountType === '4', message: $t('joinpayMch.businessLicenseNoPlaceholder') }]"
  262. @update:model-value="fieldUpdate" />
  263. <!-- 营业执照有效期 -->
  264. <div class="van-cell van-field">
  265. <div class="van-cell__title van-field__label"><span>{{ $t('huifuMch.validityType') }}</span></div>
  266. <div class="van-cell__value van-field__value radioBox">
  267. <van-radio-group v-model="validityType1" direction="horizontal" @change="fieldUpdate">
  268. <van-radio name="1" icon-size="18px">{{ $t('huifuMch.permanent') }}</van-radio>
  269. <van-radio name="0" icon-size="18px">{{ $t('huifuMch.noPermanent') }}</van-radio>
  270. </van-radio-group>
  271. </div>
  272. </div>
  273. <van-field v-model="beginDateLicense" readonly name="beginDateLicense" :label="$t('huifuMch.beginDate')"
  274. :placeholder="$t('huifuMch.beginDatePlaceholder')" @click="showBeginDateLicense = true"
  275. :rules="[{ required: true, message: $t('huifuMch.beginDatePlaceholder') }]" />
  276. <van-field v-if="validityType1 == 0" v-model="endDateLicense" readonly name="endDateLicense"
  277. :label="$t('huifuMch.endDate')" :placeholder="$t('huifuMch.endDatePlaceholder')"
  278. @click="showEndDateLicense = true"
  279. :rules="[{ required: true, message: $t('huifuMch.endDatePlaceholder') }]" />
  280. </div>
  281. <!-- <div class="intervalRow"></div> -->
  282. <!-- 经营范围 -->
  283. <!-- <van-field v-model="manageScope" name="manageScope" :label="$t('joinpayMch.natureOfBusinessLabel')"
  284. :placeholder="$t('joinpayMch.natureOfBusinessPlaceholder')" @update:model-value="fieldUpdate" />
  285. <van-field class="requiredLeft" v-model="manageAddr" is-link readonly name="manageAddr"
  286. :label="$t('huifuMch.huifuBusinessAddress')" :placeholder="$t('huifuMch.huifuBusinessAddressPlaceholder')"
  287. :rules="[{ required: true, message: $t('huifuMch.huifuBusinessAddressPlaceholder') }]"
  288. @click="showArea = true" />
  289. <van-field v-if="huifuMchNO != null" v-model="sms" center clearable :label="$t('huifuMch.sms')"
  290. class="requiredLeft" :placeholder="$t('huifuMch.smsPlaceholder')"
  291. :rules="[{ required: true, message: $t('huifuMch.smsPlaceholder') }]">
  292. <template #button>
  293. <van-button size="small" type="primary" @click="sendCode()" :disabled="time !== 0" style="padding: 0 1em">
  294. {{ time === 0 ? $t('huifuMch.sendSms') : time + $t('huifuMch.replaysInSeconds') }}
  295. </van-button>
  296. </template>
  297. </van-field> -->
  298. <!-- 操作 -->
  299. <van-row justify="space-around" v-if="huifuAuditStatus != '4' && huifuAuditStatus != '1'"
  300. style="padding: 1em; margin: 2em 0;">
  301. <van-button span="5" round type="primary" style="height: 2em; padding: 1.5em 2em" native-type="submit">{{
  302. $t('joinpayMch.submitDataForReview') }}
  303. </van-button>
  304. </van-row>
  305. </van-form>
  306. <!-- 时间弹窗 -->
  307. <van-popup v-model:show="showBeginDate" position="bottom">
  308. <van-date-picker :min-date="minDate" :max-date="maxDate" @confirm="onConfirmBeginDate"
  309. @cancel="showBeginDate = false" />
  310. </van-popup>
  311. <van-popup v-model:show="showEndDate" position="bottom">
  312. <van-date-picker :min-date="minDate" :max-date="maxDate" @confirm="onConfirmEndDate"
  313. @cancel="showEndDate = false" />
  314. </van-popup>
  315. <van-popup v-model:show="showFoundDate" position="bottom">
  316. <van-date-picker :min-date="minDate" :max-date="maxDate" @confirm="onConfirmFoundDate"
  317. @cancel="showFoundDate = false" />
  318. </van-popup>
  319. <van-popup v-model:show="showEndDateLicense" position="bottom">
  320. <van-date-picker :min-date="minDate" :max-date="maxDate" @confirm="onConfirmEndDateLicense"
  321. @cancel="showEndDateLicense = false" />
  322. </van-popup>
  323. <van-popup v-model:show="showBeginDateLicense" position="bottom">
  324. <van-date-picker :min-date="minDate" :max-date="maxDate" @confirm="onConfirmBeginDateLicense"
  325. @cancel="showBeginDateLicense = false" />
  326. </van-popup>
  327. <!-- 地址弹窗 -->
  328. <van-popup v-model:show="showArea" position="bottom">
  329. <van-area :area-list="areaList" @confirm="onConfirm" @cancel="showArea = false" />
  330. </van-popup>
  331. <van-popup v-model:show="showBankAddress" position="bottom">
  332. <van-area :area-list="areaList" :columns-num="2" @confirm="onConfirmBankAddress"
  333. @cancel="showBankAddress = false" />
  334. </van-popup>
  335. <van-popup v-model:show="showReAddress" position="bottom">
  336. <van-area :area-list="areaList" @confirm="onConfirmReAddress" @cancel="showReAddress = false" />
  337. </van-popup>
  338. </div>
  339. <div v-if="pageType === '2'" class="joinPayMch2">
  340. <img src='../../assets/joinPayMch/center.png' style="width: 50%; margin-top: 3em;" />
  341. <div v-if="joinPayMchType === '0'" style="width: 100%;">
  342. <div style="width: 100%; text-align: center;">
  343. <span style=" font-size: 1.4em; font-weight: bold; line-height: 3;">{{
  344. $t('joinpayMch.thePlatformAdministratorIsReviewing') }}</span>
  345. </div>
  346. <div style="width: 100%; text-align: center;">
  347. <span style="line-height: 1.2;">{{ $t('joinpayMch.youCan') }}<span
  348. style="color: #4d6add; text-decoration: underline;" @click='updateJoinPay()'>{{
  349. $t('joinpayMch.withdrawAndRevise') }}</span></span>
  350. </div>
  351. </div>
  352. <div v-if="joinPayMchType === '2' || joinPayMchType === '3'" style="width: 100%;">
  353. <div style="width: 100%; text-align: center;">
  354. <span style=" font-size: 1.4em; font-weight: bold; line-height: 3; color: #ee0a24;">{{
  355. $t('joinpayMch.failedToPassTheReview') }}</span>
  356. </div>
  357. <div style="width: 100%; text-align: center;">
  358. <span style="line-height: 1.2;">{{ $t('joinpayMch.failedToPassTheReview') }},<span
  359. style="color: #4d6add; text-decoration: underline;" @click='pageType = "1"'>{{
  360. $t('joinpayMch.clickHereToFillInTheInformationAgain') }}</span></span>
  361. </div>
  362. </div>
  363. <div v-if="joinPayMchStep === '0'">
  364. <div style="width: 100%; text-align: center;">
  365. <span style=" font-size: 1.4em; font-weight: bold; line-height: 3; color: #07c160;">{{
  366. $t('joinpayMch.approvalPassed') }}</span>
  367. </div>
  368. <div style="width: 100%; text-align: center;">
  369. <span style="line-height: 1.2;">{{ $t('joinpayMch.approvalPassed') }},{{ $t('joinpayMch.youCan') }}<span
  370. style="color: #4d6add; text-decoration: underline;" @click='pageType = "1"'>{{
  371. $t('joinpayMch.clickHereToFillInAgainAndSubmitForReview') }}</span></span>
  372. </div>
  373. <van-row justify="space-around" style="padding: 1em">
  374. <van-button span="5" round type="primary" style="height: 2em; padding: 0 2em" @click='pageType = "3"'>
  375. {{ $t('joinpayMch.nextGoToUploadIDPhotos') }}</van-button>
  376. </van-row>
  377. </div>
  378. </div>
  379. <div v-if="pageType === '3'">
  380. <van-form @submit="sentImageFun">
  381. <div class="upLoaderRow">
  382. <div class="baseRow flex-row justify-between">
  383. <div class="group2 flex-col"></div>
  384. <span class="baseText">{{ $t('joinpayMch.uploYourIdCard') }}</span>
  385. </div>
  386. <div class="cardRow">
  387. <div class="cardLi">
  388. <van-uploader v-model="cardNegativeList" :max-size="2 * 1024 * 1024" :max-count="1"
  389. :after-read="afterRead" :before-delete="deleteCertFront" @oversize="onOversize" />
  390. <p>{{ $t('joinpayMch.uploPortrait') }}</p>
  391. </div>
  392. <div class="cardLi">
  393. <van-uploader v-model="cardPositiveList" :max-size="2 * 1024 * 1024" :max-count="1"
  394. :after-read="afterRead" :before-delete="deleteCertBack" @oversize="onOversize" />
  395. <p>{{ $t('joinpayMch.uploNatiEmblem') }}</p>
  396. </div>
  397. </div>
  398. </div>
  399. <div class="upLoaderRow" v-if="bankAccountType === '1'">
  400. <div class="baseRow flex-row justify-between">
  401. <div class="group2 flex-col"></div>
  402. <span class="baseText">{{ $t('joinpayMch.upStatementCard') }}</span>
  403. </div>
  404. <div class="cardRow">
  405. <div class="cardLi">
  406. <van-uploader v-model="statementCard" :max-size="2 * 1024 * 1024" :max-count="1" :after-read="afterRead"
  407. :before-delete="deleteCard" @oversize="onOversize" />
  408. <p>{{ $t('joinpayMch.statementCard') }}</p>
  409. </div>
  410. </div>
  411. </div>
  412. <div class="upLoaderRow" v-if="bankAccountType === '4'">
  413. <div class="baseRow flex-row justify-between">
  414. <div class="group2 flex-col"></div>
  415. <span class="baseText">{{ $t('joinpayMch.businessLicensePlace') }}</span>
  416. </div>
  417. <div class="cardRow">
  418. <div class="cardLi">
  419. <van-uploader v-model="tradeLicenceList" :max-size="2 * 1024 * 1024" :max-count="1"
  420. :before-delete="deleteTradeLicence" :after-read="afterRead" @oversize="onOversize" />
  421. <p>{{ $t('joinpayMch.businessLicense') }}</p>
  422. </div>
  423. </div>
  424. </div>
  425. <div class="upLoaderRow" v-if="bankAccountType === '4'">
  426. <div class="baseRow flex-row justify-between">
  427. <div class="group2 flex-col"></div>
  428. <span class="baseText">{{ $t('joinpayMch.accountOpeningLicensePlace') }}</span>
  429. </div>
  430. <div class="cardRow">
  431. <div class="cardLi">
  432. <van-uploader v-model="openAccountLicenceList" :max-size="2 * 1024 * 1024" :max-count="1"
  433. :before-delete="deleteAccountLicence" :after-read="afterRead" @oversize="onOversize" />
  434. <p>{{ $t('joinpayMch.accountOpeningLicense') }}</p>
  435. </div>
  436. </div>
  437. </div>
  438. <van-row justify="space-around" style="padding: 1em">
  439. <van-button span="5" round type="primary" style="height: 2em; padding: 0 2em" native-type="submit">{{
  440. $t('joinpayMch.submissions') }}
  441. </van-button>
  442. </van-row>
  443. </van-form>
  444. </div>
  445. </div>
  446. </div>
  447. </template>
  448. <script>
  449. import { onMounted, reactive, toRefs, ref } from "vue";
  450. import sHeader from "../../components/SimpleHeader";
  451. import { showFailToast, showSuccessToast, showToast, showLoadingToast } from "vant";
  452. import { areaList } from "@vant/area-data";
  453. import {
  454. getOneJoinPayMch, updateJoinPayMchCheck, altMchSign,
  455. sentImage, updateApproveStatus, saveJoinPayMch
  456. } from '../../service/joinpayMch';
  457. import { newUploadPic, getHuifuMchCheck, newSaveHuifuMch, updateMerchant, openAccount, sendSms } from "@/service/huifuMch";
  458. import { getLoginUser, styleUrl, getLocal, setLocal } from "../../common/js/utils";
  459. import dateUtil from "../../utils/dateUtil";
  460. import { useI18n } from "vue-i18n";
  461. export default {
  462. components: { sHeader },
  463. setup() {
  464. // 引入语言
  465. const { t } = useI18n();
  466. const user = getLoginUser();
  467. const idCardExpiryShow = ref(false);
  468. const idCardExpiryOnConfirm = (value) => {
  469. idCardExpiryShow.value = false;
  470. addParams.idCardExpiry = dateUtil.formateDate(value, "yyyy-MM-dd");
  471. fieldUpdate();
  472. };
  473. const licenseExpiryShow = ref(false);
  474. const licenseExpiryOnConfirm = (value) => {
  475. licenseExpiryShow.value = false;
  476. addParams.licenseExpiry = dateUtil.formateDate(value, "yyyy-MM-dd");
  477. fieldUpdate();
  478. };
  479. const showBeginDate = ref(false);
  480. const showEndDate = ref(false);
  481. const showBeginDateLicense = ref(false);
  482. const showEndDateLicense = ref(false);
  483. const showFoundDate = ref(false);
  484. const showArea = ref(false); // 是否弹窗
  485. const showBankAddress = ref(false);
  486. const showReAddress = ref(false);
  487. const showBankCode = ref(false);
  488. const bankCodePopList = [
  489. {
  490. text: '中国银行',
  491. value: "01040000",
  492. },
  493. {
  494. text: '中国农业银行',
  495. value: "01030000",
  496. },
  497. {
  498. text: '中国工商银行',
  499. value: "01020000",
  500. },
  501. {
  502. text: '中国建设银行',
  503. value: "01050000",
  504. },
  505. {
  506. text: '交通银行',
  507. value: "03010000",
  508. },
  509. {
  510. text: '中信银行',
  511. value: "03020000",
  512. },
  513. {
  514. text: '中国光大银行',
  515. value: "03030000",
  516. },
  517. {
  518. text: '华夏银行',
  519. value: "03040000",
  520. },
  521. {
  522. text: '中国民生银行',
  523. value: "03050000",
  524. },
  525. {
  526. text: '广发银行',
  527. value: "03060000",
  528. },
  529. {
  530. text: '招商银行',
  531. value: "03080000",
  532. },
  533. {
  534. text: '兴业银行',
  535. value: "03090000",
  536. },
  537. {
  538. text: '中国邮政储蓄银行',
  539. value: "04030000",
  540. },
  541. {
  542. text: '农村商业银行',
  543. value: "03140000",
  544. },
  545. {
  546. text: '其他,请咨询售后人员',
  547. value: "",
  548. },
  549. ];
  550. const bankCodePopConfirm = ({ selectedOptions }) => {
  551. console.log(selectedOptions[0])
  552. addParams.bankCodeValue = selectedOptions[0].value;
  553. fieldUpdate();
  554. showBankCode.value = false;
  555. };
  556. const verCodeTime = reactive({
  557. time: 0
  558. });
  559. const regNameVisible = ref(false);
  560. const shortNameVisible = ref(false);
  561. const popoverVisible = ref(false);
  562. const showPopover = (value) => {
  563. console.log(value);
  564. switch (value) {
  565. case 1:
  566. regNameVisible.value = true;
  567. break;
  568. case 2:
  569. shortNameVisible.value = true;
  570. break;
  571. case 3:
  572. popoverVisible.value = true;
  573. break;
  574. }
  575. }
  576. let addParams = reactive({
  577. adminId: user.id, // 当前登录账户的id Long 必填
  578. altMchName: '', // 分账方名称; string 必填
  579. altMchNo: '', // 分账方账号; string 必填
  580. altMchShortName: '', // 分账方商户简称; string
  581. altMerchantType: '10', // 分账方商户类型,10:个人,11:个体工商户,12:企业; integer(int32) 必填
  582. regNameValue: '', // 汇付商户名称
  583. shortNameValue: '', // 汇付商户简称
  584. registeredAddress: '', // 汇付商户注册地址
  585. companyFoundDate: '', // 汇付商户公司成立时间
  586. servicePhoneValue: '', // 汇付客服电话
  587. busiContactName: '', // 业务联系人姓名; string 必填
  588. busiContactMobileNo: '', // 业务联系人手机; string 必填
  589. legalPerson: '', // 法人; string 必填
  590. phoneNo: '', // 电话; string 必填
  591. emailValue: '', // 联系人邮箱
  592. idCardNo: '', // 身份证; string 必填
  593. certAddressValue: '', // 汇付参数,身份证地址,对公账户必填
  594. validityType: '1', // 身份证有效期类型
  595. idCardExpiry: '', // 身份证有效期; string
  596. beginDate: '', // 有效期开始日期
  597. endDate: '', // 有效期截日期
  598. bankAccountType: '1', // 账户类型 * 1 借记卡,4 对公账户; integer(int32) 必填
  599. bankAccountName: '', // 银行账户名称,分账方结算银行账户名称; string 必填
  600. bankAccountNo: '', // 银行账号; string 必填
  601. bankAddress: '', // 银行地址,个人账户必填
  602. bankChannelNo: '', // 联行号; string 对公账户;必填
  603. openLicenceNoValue: '', // 汇付参数,基本存款账户编号或核准号,对公账户必填
  604. bankCodeValue: '', // 汇付参数,银行编号
  605. validityType1: '1', // 营业执照有效期类型
  606. licenseNo: '', // 营业执照编号; string 对公账户;必填
  607. licenseExpiry: '', // 营业执照有效期; string
  608. beginDateLicense: '', // 有效期开始日期
  609. endDateLicense: '', // 有效期截日期
  610. settMode: 1, // 结算方式 * 1 由汇聚自动结算 * 2 由商户平台手工结算(结算接口); integer(int32) 默认填1
  611. settDateType: 1, // 结算周期类型 * 1 工作日,2 自然日,3 月结日; integer(int32) 默认填1
  612. riskDay: 1, // 结算周期; integer(int32) 默认填1
  613. manageScope: '', // 经营范围; string
  614. manageAddr: '', // 经营地址; string
  615. bizCode: '', // 业务响应码; string
  616. loginName: '', // 分账方登录名,即邮箱; string
  617. });
  618. // 汇付字段
  619. let huifuParams = reactive({
  620. id: null,
  621. adminId: user.id, // 当前登录账户的id
  622. type: '0', // 类型 String 必填 企业:type='1'; 个人:type='0'
  623. regName: '', // 商户名称
  624. shortName: '', // 商户简称
  625. foundDate: '', // 成立时间
  626. licenseCode: '', // 营业执照编号
  627. licenseValidityType: "1", // 营业执照有效期类型
  628. licenseBeginDate: '', // 营业执照有效开始日期
  629. licenseEndDate: '', // 营业执照有效截止日期
  630. regProvId: '', // 注册省编码
  631. regAreaId: '', // 注册市编码
  632. regDistrictId: '', // 注册区编码
  633. regDetail: '', // 注册详细地址
  634. name: '', // 联系人姓名
  635. phone: '', // 联系人手机号码
  636. email: '', // 联系人邮箱
  637. provId: '', // 省编码
  638. areaId: '', // 省编码
  639. districtId: '', // 市编码
  640. detailAddr: '', // 经营地址
  641. servicePhone: '', // 客服电话
  642. cardName: '', // 卡户名
  643. cardType: '1', // 结算账户类型,“0”为对公账户,“1”为个人账户
  644. cardNo: '', // 银行卡号
  645. branchCode: '', // 联行号
  646. openLicenceNo: '', // 基本存款账户编号或核准号
  647. bankCode: '',
  648. cardProvId: '', // 省编码
  649. cardAreaId: '', // 省编码
  650. mp: '', // 结算手机号
  651. certNo: '', // 身份证号
  652. certAddress: '', // 身份证地址
  653. certValidityType: '1', // 身份证有效期类型
  654. certBeginDate: '', // 有效期开始日期
  655. certEndDate: '', // 有效期截止日期
  656. sms: '', // 验证码
  657. });
  658. let cardPositiveList = ref([]);
  659. let cardNegativeList = ref([]);
  660. let tradeLicenceList = ref([]);
  661. let statementCard = ref([]);
  662. let openAccountLicenceList = ref([]);
  663. let sentImageForm = reactive({
  664. cardPositive: '', // 身份证正面 String 必填
  665. cardNegative: '', // 身份证背面 String 必填
  666. tradeLicence: '', // 营业执照图片 String Type=0时必填
  667. openAccountLicence: '', // 开户许可证 String Type=0时必填
  668. type: '', // 账户类型 String 必填 0:对公;1,个人
  669. status: '0', // 第几次提交 String 必填 0,第一次提交;1,第n次提交(重新上传)
  670. });
  671. const pageType = ref('1');
  672. const joinPayMchType = ref(null);
  673. const joinPayMchStep = ref(null);
  674. const joinPayMchID = ref(null); // 汇聚账号ID
  675. const huifuMchID = ref(null); //汇付账号ID
  676. const huifuPicUpStatus = ref(0); // 汇付照片上传状态
  677. // let joinPayMchNo = null; // 汇聚商户号
  678. const huifuMchNO = ref(null); // 汇付商户号
  679. const approveStatus = ref(null);
  680. const signStatus = ref(null); // 汇聚签约状态
  681. const huifuAuditStatus = ref(null); // 汇付审核状态
  682. const conStat = ref(null); // 汇付签约状态
  683. let isMemoryFormType = false;
  684. // 日期选择
  685. const onConfirmBeginDate = ({ selectedValues }) => {
  686. addParams.beginDate = selectedValues.join("-");
  687. showBeginDate.value = false;
  688. fieldUpdate();
  689. };
  690. const onConfirmEndDate = ({ selectedValues }) => {
  691. addParams.endDate = selectedValues.join("-");
  692. showEndDate.value = false;
  693. fieldUpdate();
  694. };
  695. const onConfirmFoundDate = ({ selectedValues }) => {
  696. addParams.companyFoundDate = selectedValues.join("-");
  697. showFoundDate.value = false;
  698. fieldUpdate();
  699. };
  700. const onConfirmEndDateLicense = ({ selectedValues }) => {
  701. addParams.endDateLicense = selectedValues.join("-");
  702. showEndDateLicense.value = false;
  703. fieldUpdate();
  704. };
  705. const onConfirmBeginDateLicense = ({ selectedValues }) => {
  706. addParams.beginDateLicense = selectedValues.join("-");
  707. showBeginDateLicense.value = false;
  708. fieldUpdate();
  709. };
  710. // 地址选择
  711. const onConfirm = ({ selectedOptions }) => {
  712. console.log(selectedOptions[0].value);
  713. showArea.value = false;
  714. addParams.manageAddr = (selectedOptions[0]?.text != selectedOptions[1]?.text ? selectedOptions[0]?.text : '')
  715. + selectedOptions[1]?.text + selectedOptions[2]?.text;
  716. console.log(addParams.manageAddr)
  717. huifuParams.provId = selectedOptions[0]?.value || '';
  718. huifuParams.areaId = selectedOptions[1]?.value || '';
  719. huifuParams.districtId = selectedOptions[2]?.value || '';
  720. huifuParams.detailAddr = addParams.manageAddr;
  721. fieldUpdate();
  722. console.log("huifuMch", huifuParams);
  723. };
  724. const onConfirmBankAddress = ({ selectedOptions }) => {
  725. showBankAddress.value = false;
  726. addParams.bankAddress = (selectedOptions[0]?.text != selectedOptions[1]?.text ? selectedOptions[0]?.text : '')
  727. + selectedOptions[1]?.text;
  728. huifuParams.cardProvId = selectedOptions[0]?.value || '';
  729. huifuParams.cardAreaId = selectedOptions[1]?.value || '';
  730. fieldUpdate();
  731. console.log("huifuMch", huifuParams);
  732. };
  733. const onConfirmReAddress = ({ selectedOptions }) => {
  734. showReAddress.value = false;
  735. addParams.registeredAddress = (selectedOptions[0]?.text != selectedOptions[1]?.text ? selectedOptions[0]?.text : '')
  736. + selectedOptions[1]?.text + selectedOptions[2]?.text;
  737. huifuParams.regProvId = selectedOptions[0]?.value || '';
  738. huifuParams.regAreaId = selectedOptions[1]?.value || '';
  739. huifuParams.regDistrictId = selectedOptions[2]?.value || '';
  740. huifuParams.regDetail = addParams.registeredAddress;
  741. // console.log("详细地址", huifuParams.regDetail);
  742. fieldUpdate();
  743. console.log("huifuMch", huifuParams);
  744. };
  745. onMounted(async () => {
  746. styleUrl('joinpayMch');
  747. console.log("huifuMch", huifuParams);
  748. getOneJoinPayMchFun();
  749. getHuifuMchFun();
  750. verCodeTime.time = getLocal('registerVerCodeTime');
  751. if (huifuMchID.value == null) {
  752. huifuPicUpStatus.value = 1;
  753. console.log(huifuPicUpStatus.value);
  754. }
  755. if (verCodeTime.time && verCodeTime.time !== '') {
  756. verCodeTime.time = parseInt(verCodeTime.time);
  757. if (verCodeTime.time > 0) {
  758. verCodeTimeInterval();
  759. }
  760. } else {
  761. verCodeTime.time = 0;
  762. }
  763. });
  764. // 获取汇聚账号回显
  765. const getOneJoinPayMchFun = async () => {
  766. const { data } = await getOneJoinPayMch({ adminId: user.id });
  767. console.log(data);
  768. if (data.code === "00000") {
  769. joinPayMchType.value = data.data.type;
  770. if (data.data.type === '2' || data.data.type === '3' || data.data.type === '0') {
  771. pageType.value = '2';
  772. }
  773. if ((data.data.type === null || data.data.type === '1') && data.data.step === '0') {
  774. pageType.value = '2';
  775. joinPayMchStep.value = '0';
  776. }
  777. if ((data.data.type === null || data.data.type === '1') && data.data.step === '1') {
  778. pageType.value = '4';
  779. joinPayMchStep.value = '1';
  780. }
  781. console.log('pageType', pageType.value);
  782. joinPayMchID.value = data.data.id;
  783. approveStatus.value = data.data.approveStatus;
  784. signStatus.value = data.data.signStatus;
  785. addParams.altMchName = data.data.altMchName;
  786. addParams.altMchNo = data.data.altMchNo;
  787. // joinPayMchNo = data.data.altMchNo;
  788. addParams.altMchShortName = data.data.altMchShortName;
  789. addParams.altMerchantType = data.data.altMerchantType ? data.data.altMerchantType.toString() : '';
  790. addParams.busiContactName = data.data.busiContactName;
  791. addParams.busiContactMobileNo = data.data.busiContactMobileNo;
  792. addParams.legalPerson = data.data.legalPerson;
  793. addParams.phoneNo = data.data.phoneNo;
  794. addParams.idCardNo = data.data.idCardNo;
  795. if (data.data.idCardExpiry) {
  796. addParams.idCardExpiry = dateUtil.formateDate(new Date(data.data.idCardExpiry), "yyyy-MM-dd");
  797. }
  798. addParams.bankAccountType = data.data.bankAccountType ? data.data.bankAccountType.toString() : '';
  799. addParams.bankAccountName = data.data.bankAccountName;
  800. addParams.bankAccountNo = data.data.bankAccountNo;
  801. addParams.bankChannelNo = data.data.bankChannelNo;
  802. addParams.licenseNo = data.data.licenseNo;
  803. if (data.data.licenseExpiry) {
  804. addParams.licenseExpiry = dateUtil.formateDate(new Date(data.data.licenseExpiry), "yyyy-MM-dd");
  805. }
  806. addParams.settMode = data.data.settMode ? data.data.settMode.toString() : '';
  807. addParams.settDateType = data.data.settDateType ? data.data.settDateType.toString() : '';
  808. addParams.riskDay = data.data.riskDay;
  809. addParams.manageScope = data.data.manageScope;
  810. addParams.manageAddr = data.data.manageAddr;
  811. addParams.bizCode = data.data.bizCode;
  812. addParams.loginName = data.data.loginName;
  813. if (data.data.approveStatus === "审核中") {
  814. changeApproveStatus();
  815. }
  816. } else {
  817. pageType.value = '1';
  818. // showFailToast(data.message);
  819. }
  820. memoryForm();
  821. isMemoryFormType = true;
  822. };
  823. // 获取汇付账号回显
  824. const getHuifuMchFun = async () => {
  825. const { data } = await getHuifuMchCheck({ adminId: user.id });
  826. console.log("huifu", data);
  827. if (data.code === "00000") {
  828. if (data.data != null) {
  829. huifuMchID.value = data.data.id;
  830. huifuParams.id = data.data.id;
  831. console.log("huifuMchID", huifuMchID.value);
  832. conStat.value = data.data.conStat;
  833. addParams.altMerchantType = "10";
  834. addParams.busiContactName = data.data.name;
  835. addParams.busiContactMobileNo = data.data.phone;
  836. addParams.legalPerson = data.data.name;
  837. addParams.phoneNo = data.data.phone;
  838. addParams.idCardNo = data.data.certNo;
  839. addParams.bankAccountName = data.data.cardName;
  840. addParams.bankAccountNo = data.data.cardNo;
  841. huifuAuditStatus.value = data.data.status;
  842. addParams.emailValue = data.data.email;
  843. addParams.manageAddr = areaList.province_list[data.data.provId] + areaList.city_list[data.data.areaId] + areaList.county_list[data.data.districtId];
  844. huifuMchNO.value = data.data.huifuId;
  845. // if (huifuMchNO.value != null && conStat.value != "5") {
  846. // changeConStat();
  847. // }
  848. addParams.validityType = data.data.certValidityType;
  849. addParams.beginDate = dateUtil.formatDate(data.data.certBeginDate);
  850. addParams.endDate = dateUtil.formatDate(data.data.certEndDate);
  851. huifuParams.provId = data.data.provId;
  852. huifuParams.areaId = data.data.areaId;
  853. huifuParams.districtId = data.data.districtId;
  854. huifuParams.cardProvId = data.data.cardProvId;
  855. huifuParams.cardAreaId = data.data.cardAreaId;
  856. huifuParams.detailAddr = data.data.detailAddr;
  857. addParams.bankAddress = areaList.province_list[data.data.cardProvId] == areaList.city_list[data.data.cardAreaId] ? areaList.province_list[data.data.cardProvId] :
  858. (areaList.province_list[data.data.cardProvId] + areaList.city_list[data.data.cardAreaId]);
  859. if (data.data.cardFrontPic != null && data.data.legalCertBackPic != null && data.data.legalCertFrontPic) {
  860. huifuPicUpStatus.value = 1;
  861. }
  862. console.log(data.data.cardProvId);
  863. if (data.data.type === "1") {
  864. addParams.altMerchantType = "12";
  865. addParams.regNameValue = data.data.regName;
  866. addParams.shortNameValue = data.data.shortName;
  867. addParams.registeredAddress = areaList.province_list[data.data.regProvId] == areaList.city_list[data.data.regAreaId] ? (areaList.city_list[data.data.regAreaId] + areaList.county_list[data.data.regDistrictId]) :
  868. (areaList.province_list[data.data.regProvId] + areaList.city_list[data.data.regAreaId] + areaList.county_list[data.data.regDistrictId]);
  869. huifuParams.regProvId = data.data.regProvId;
  870. huifuParams.regAreaId = data.data.regAreaId;
  871. huifuParams.regDistrictId = data.data.regDistrictId;
  872. addParams.companyFoundDate = dateUtil.formatDate(data.data.foundDate);
  873. addParams.servicePhoneValue = data.data.servicePhone;
  874. addParams.licenseNo = data.data.licenseCode;
  875. if (data.data.cardType === "0") {
  876. addParams.bankAccountType = '4';
  877. addParams.certAddressValue = data.data.certAddress;
  878. addParams.openLicenceNoValue = data.data.openLicenceNo;
  879. addParams.bankCodeValue = data.data.bankCode;
  880. addParams.bankChannelNo = data.data.branchCode;
  881. }
  882. addParams.validityType1 = data.data.licenseValidityType;
  883. addParams.beginDateLicense = dateUtil.formatDate(data.data.licenseBeginDate);
  884. addParams.endDateLicense = dateUtil.formatDate(data.data.licenseEndDate);
  885. if (data.data.licensePic != null && data.data.certBackPic != null && data.data.certFrontPic != null && data.data.regAcctPic != null) {
  886. huifuPicUpStatus.value = 1;
  887. }
  888. }
  889. if (data.data.status === '0') {
  890. huifuPicUpStatus.value = 0;
  891. console.log(huifuPicUpStatus.value)
  892. }
  893. console.log('huifuAuditStatus', huifuAuditStatus.value)
  894. }
  895. }
  896. }
  897. // 更新汇付签约状态
  898. // const changeConStat = async () => {
  899. // const { data } = await updateConStat(huifuParams);
  900. // if (data.code === "00000") {
  901. // // showSuccessToast(t('joinpayMch.withdrawalSucceeded'));
  902. // if (data.data === "5") {
  903. // location.reload();
  904. // }
  905. // }
  906. // }
  907. // 更新图片审核情况
  908. const changeApproveStatus = async () => {
  909. const { data } = await updateApproveStatus({ id: joinPayMchID.value });
  910. if (data.code === "00000") {
  911. // showSuccessToast(t('joinpayMch.withdrawalSucceeded'));
  912. if (data.data === "P1000") {
  913. location.reload();
  914. }
  915. }
  916. }
  917. // 记忆表单
  918. const memoryForm = () => {
  919. const formDataString = localStorage.getItem('joinPayMchForm');
  920. const huifuMchFormData = localStorage.getItem('huifuMchForm');
  921. if (formDataString) {
  922. const formData = JSON.parse(formDataString);
  923. Object.keys(formData).forEach(key => {
  924. addParams[key] = formData[key];
  925. });
  926. }
  927. if (huifuMchFormData) {
  928. const huifuFormData = JSON.parse(huifuMchFormData);
  929. Object.keys(huifuFormData).forEach(key => {
  930. huifuParams[key] = huifuFormData[key];
  931. });
  932. }
  933. };
  934. // 发送验证码
  935. const sendCode = async () => {
  936. const { data } = await sendSms({
  937. adminId: user.id,
  938. });
  939. console.log('seedVerCodeSuccess', data);
  940. if (data.code === '00000') {
  941. showToast({
  942. duration: 2000,
  943. message: t('huifuMch.successSend') + '\n' + maskPhoneNumber(data.data.phone)
  944. });
  945. console.log('seedVerCodeSuccess');
  946. verCodeTime.time = 60;
  947. verCodeTimeInterval();
  948. } else {
  949. showFailToast(data.message);
  950. }
  951. }
  952. // 格式手机号码
  953. const maskPhoneNumber = (value) => {
  954. const prefix = value.slice(0, 3);
  955. const suffix = value.slice(-4);
  956. return `${prefix}****${suffix}`;
  957. }
  958. // 验证码发送成功开始3分钟倒计时
  959. const verCodeTimeInterval = () => {
  960. verCodeTime.time--;
  961. setLocal('registerVerCodeTime', verCodeTime.time)
  962. if (verCodeTime.time !== 0) {
  963. setTimeout(() => {
  964. verCodeTimeInterval();
  965. }, 1000);
  966. }
  967. }
  968. // 提交审批表单
  969. const saveJoinPayMchFun = async () => {
  970. const params = Object.assign({}, addParams);
  971. params.altMerchantType = parseInt(params.altMerchantType);
  972. params.bankAccountType = parseInt(params.bankAccountType);
  973. params.settMode = parseInt(params.settMode);
  974. params.settDateType = parseInt(params.settDateType);
  975. addParams.idCardExpiry = addParams.beginDate;
  976. addParams.licenseExpiry = addParams.beginDateLicense;
  977. if (addParams.validityType === '0') {
  978. addParams.idCardExpiry = addParams.endDate;
  979. }
  980. if (addParams.validityType1 === '0') {
  981. addParams.licenseExpiry = addParams.endDateLicense;
  982. }
  983. huifuParams.regName = addParams.legalPerson;
  984. huifuParams.name = addParams.legalPerson;
  985. huifuParams.phone = addParams.phoneNo;
  986. huifuParams.email = addParams.emailValue;
  987. huifuParams.cardName = addParams.bankAccountName;
  988. huifuParams.cardNo = addParams.bankAccountNo.replace(/\s/g, '');
  989. huifuParams.mp = addParams.phoneNo;
  990. huifuParams.certNo = addParams.idCardNo;
  991. huifuParams.certValidityType = addParams.validityType;
  992. huifuParams.certBeginDate = addParams.beginDate.replace(/-/g, "");
  993. huifuParams.certEndDate = addParams.endDate.replace(/-/g, "");
  994. if (addParams.altMerchantType === '12') {
  995. huifuParams.type = '1';
  996. huifuParams.regName = addParams.regNameValue;
  997. huifuParams.foundDate = addParams.companyFoundDate.replace(/-/g, "");
  998. huifuParams.licenseCode = addParams.licenseNo;
  999. huifuParams.licenseValidityType = addParams.validityType1;
  1000. huifuParams.licenseBeginDate = addParams.beginDateLicense.replace(/-/g, "");
  1001. huifuParams.licenseEndDate = addParams.endDateLicense.replace(/-/g, "");
  1002. huifuParams.servicePhone = addParams.servicePhoneValue;
  1003. huifuParams.regDetail = addParams.registeredAddress;
  1004. if (addParams.bankAccountType === '4') {
  1005. huifuParams.cardType = '0';
  1006. huifuParams.branchCode = addParams.bankChannelNo;
  1007. huifuParams.openLicenceNo = addParams.openLicenceNoValue;
  1008. huifuParams.bankCode = addParams.bankCodeValue;
  1009. huifuParams.certAddress = addParams.certAddressValue
  1010. }
  1011. }
  1012. console.log("addParams:", addParams);
  1013. console.log("huifuParams:", huifuParams)
  1014. try {
  1015. const { data } = await saveJoinPayMch(addParams);
  1016. if (data.code === "00000") {
  1017. let huifuMch = null;
  1018. if (huifuMchNO.value == null) {
  1019. huifuMch = await newSaveHuifuMch(huifuParams);
  1020. } else {
  1021. // huifuMch = await auditMerchantUpdate(huifuParams);
  1022. huifuMch = await updateMerchant(huifuParams);
  1023. }
  1024. if (huifuMch.data.code === "00000") {
  1025. showSuccessToast(t(('joinpayMch.submittedSuccessfully')));
  1026. localStorage.removeItem('joinPayMchForm');
  1027. setTimeout(() => {
  1028. location.reload();
  1029. }, 1500);
  1030. } else {
  1031. showFailToast(`${huifuMch.data.message}`);
  1032. }
  1033. } else {
  1034. showFailToast(`${t('joinpayMch.submitFailed')} ${data.message}`);
  1035. }
  1036. } catch (error) {
  1037. console.error('请求发生错误:', error);
  1038. showFailToast(t('joinpayMch.submitFailed'));
  1039. }
  1040. };
  1041. // 撤回
  1042. const updateJoinPay = async () => {
  1043. const { data } = await updateJoinPayMchCheck({ id: joinPayMchID.value });
  1044. if (data.code === "00000") {
  1045. showSuccessToast(t('joinpayMch.withdrawalSucceeded'));
  1046. setTimeout(() => {
  1047. location.reload();
  1048. }, 1500);
  1049. } else { showFailToast(`${data.message}`); }
  1050. }
  1051. // 图片上传表单提交
  1052. const sentImageFun = async () => {
  1053. const loadingUp = showLoadingToast({
  1054. message: '上传中...',
  1055. forbidClick: true,
  1056. duration: 0,
  1057. });
  1058. const params = {
  1059. id: joinPayMchID.value,
  1060. type: addParams.bankAccountType === '4' ? '0' : '1',
  1061. status: sentImageForm.status,
  1062. tradeLicence: null,
  1063. openAccountLicence: null
  1064. };
  1065. if (cardNegativeList.value.length < 1) { showFailToast(t('joinpayMch.uploPortrait')); return; }
  1066. if (cardPositiveList.value.length < 1) { showFailToast(t('joinpayMch.uploNatiEmblem')); return; }
  1067. if (addParams.bankAccountType === '1') {
  1068. if (statementCard.value.length < 1) { showFailToast(t('joinpayMch.upStatementCard')); return; }
  1069. }
  1070. params.cardPositive = cardPositiveList.value[0].content;
  1071. params.cardNegative = cardNegativeList.value[0].content;
  1072. if (addParams.bankAccountType === '4') {
  1073. if (tradeLicenceList.value.length < 1) { showFailToast(t('joinpayMch.businessLicensePlace')); return; }
  1074. if (openAccountLicenceList.value.length < 1) { showFailToast(t('joinpayMch.accountOpeningLicensePlace')); return; }
  1075. }
  1076. if (tradeLicenceList.value.length > 0) { params.tradeLicence = tradeLicenceList.value[0].content; }
  1077. if (openAccountLicenceList.value.length > 0) { params.openAccountLicence = openAccountLicenceList.value[0].content; }
  1078. try {
  1079. const { data } = await sentImage(params);
  1080. let response = null;
  1081. if (data.code === "00000") {
  1082. if (huifuMchNO.value == null) {
  1083. response = await openAccount({ id: huifuMchID.value });
  1084. if (response.data.code === "00000") {
  1085. console.log("response", response);
  1086. loadingUp.close();
  1087. showSuccessToast(t('joinpayMch.uploadSucceeded'));
  1088. setTimeout(() => {
  1089. location.reload();
  1090. }, 1500);
  1091. } else {
  1092. console.log("response", response);
  1093. loadingUp.close();
  1094. showFailToast(`${response.data.message}`);
  1095. }
  1096. } else {
  1097. showSuccessToast(t('joinpayMch.uploadSucceeded'));
  1098. setTimeout(() => {
  1099. location.reload();
  1100. }, 1500);
  1101. }
  1102. } else { showFailToast(t('joinpayMch.submitFailed')); }
  1103. } catch (error) {
  1104. loadingUp.close();
  1105. console.error('请求发生错误:', error);
  1106. showFailToast(t('joinpayMch.submitFailed'));
  1107. }
  1108. }
  1109. // 图片重新上传触发
  1110. const updateSentImage = () => {
  1111. sentImageForm.status = '1';
  1112. pageType.value = '3';
  1113. }
  1114. // 签约触发
  1115. const altMchSignFun = async () => {
  1116. console.log("joinPayMchID", joinPayMchID.value);
  1117. console.log("huifuMchID", huifuMchID.value);
  1118. try {
  1119. const { data } = await altMchSign({ id: joinPayMchID.value });
  1120. if (data.code === "00000") {
  1121. console.log(huifuAuditStatus.value);
  1122. let huifuMch = await openAccount({ id: huifuMchID.value });
  1123. if (huifuMch.data.code === "00000") {
  1124. showSuccessToast(t('joinpayMch.signingSuccessfully'));
  1125. setTimeout(() => {
  1126. location.reload();
  1127. }, 1500);
  1128. } else {
  1129. showFailToast(`${huifuMch.data.message}`);
  1130. }
  1131. } else {
  1132. showFailToast(`${data.message}`);
  1133. }
  1134. } catch (error) {
  1135. console.error('请求发生错误:', error);
  1136. showFailToast(t('joinpayMch.submitFailed'));
  1137. }
  1138. }
  1139. // 记录表单填写
  1140. const fieldUpdate = () => {
  1141. // console.log('fieldUpdate');
  1142. if (addParams.altMerchantType === '10') {
  1143. addParams.bankAccountType = '1';
  1144. }
  1145. if (isMemoryFormType) {
  1146. localStorage.setItem('joinPayMchForm', JSON.stringify(addParams));
  1147. localStorage.setItem("huifuMchForm", JSON.stringify(huifuParams));
  1148. }
  1149. };
  1150. // 图片上传状态,0:未上传 1:已上传
  1151. const uploadCertFront = ref(0);
  1152. const uploadCertBack = ref(0);
  1153. const uploadCard = ref(0);
  1154. const tradeLicenceStatus = ref(0);
  1155. const accountLicenceStatus = ref(0);
  1156. // 文件上传
  1157. const afterRead = async (file) => {
  1158. file.status = 'uploading';
  1159. file.message = '上传中...';
  1160. const params = {
  1161. adminId: user.id,
  1162. base64Str: null,
  1163. fileType: null,
  1164. };
  1165. // 人像面
  1166. if (cardNegativeList.value.length > 0 && uploadCertFront.value === 0) {
  1167. params.base64Str = cardNegativeList.value[0].content;
  1168. if (addParams.bankAccountType === '1') {
  1169. params.fileType = "F40";
  1170. } else {
  1171. params.fileType = "F02";
  1172. }
  1173. try {
  1174. console.log(params.fileType);
  1175. const { data } = await newUploadPic(params);
  1176. if (data.code == "00000") {
  1177. file.status = 'done';
  1178. uploadCertFront.value = 1;
  1179. } else {
  1180. file.status = 'failed';
  1181. file.message = '上传失败';
  1182. }
  1183. } catch {
  1184. file.status = 'failed';
  1185. file.message = '上传失败';
  1186. }
  1187. }
  1188. // 国徽面
  1189. if (cardPositiveList.value.length > 0 && uploadCertBack.value === 0) {
  1190. params.base64Str = cardPositiveList.value[0].content;
  1191. if (addParams.bankAccountType === '1') {
  1192. params.fileType = "F41";
  1193. } else {
  1194. params.fileType = "F03";
  1195. }
  1196. try {
  1197. console.log(params.fileType);
  1198. const { data } = await newUploadPic(params);
  1199. if (data.code == "00000") {
  1200. file.status = 'done';
  1201. uploadCertBack.value = 1;
  1202. } else {
  1203. file.status = 'failed';
  1204. file.message = '上传失败';
  1205. }
  1206. } catch {
  1207. file.status = 'failed';
  1208. file.message = '上传失败';
  1209. }
  1210. }
  1211. // 结算卡
  1212. if (statementCard.value.length > 0 && uploadCard.value === 0) {
  1213. params.base64Str = statementCard.value[0].content;
  1214. params.fileType = "F13";
  1215. try {
  1216. console.log(params.fileType);
  1217. const { data } = await newUploadPic(params);
  1218. if (data.code == "00000") {
  1219. file.status = 'done';
  1220. uploadCard.value = 1;
  1221. } else {
  1222. file.status = 'failed';
  1223. file.message = '上传失败';
  1224. }
  1225. } catch {
  1226. file.status = 'failed';
  1227. file.message = '上传失败';
  1228. }
  1229. }
  1230. // 营业执照
  1231. if (tradeLicenceList.value.length > 0 && tradeLicenceStatus.value === 0) {
  1232. params.base64Str = tradeLicenceList.value[0].content;
  1233. params.fileType = "F07";
  1234. try {
  1235. const { data } = await newUploadPic(params);
  1236. if (data.code == "00000") {
  1237. file.status = 'done';
  1238. tradeLicenceStatus.value = 1;
  1239. } else {
  1240. file.status = 'failed';
  1241. file.message = '上传失败';
  1242. }
  1243. } catch {
  1244. file.status = 'failed';
  1245. file.message = '上传失败';
  1246. }
  1247. }
  1248. // 开户许可证
  1249. if (openAccountLicenceList.value.length > 0 && accountLicenceStatus.value === 0) {
  1250. params.base64Str = openAccountLicenceList.value[0].content;
  1251. params.fileType = "F08";
  1252. try {
  1253. const { data } = await newUploadPic(params);
  1254. if (data.code == "00000") {
  1255. file.status = 'done';
  1256. accountLicenceStatus.value = 1;
  1257. } else {
  1258. file.status = 'failed';
  1259. file.message = '上传失败';
  1260. }
  1261. } catch {
  1262. file.status = 'failed';
  1263. file.message = '上传失败';
  1264. }
  1265. }
  1266. }
  1267. // 删除时改变上传状态
  1268. const deleteCertFront = () => {
  1269. uploadCertFront.value = 0;
  1270. cardNegativeList.value = [];
  1271. }
  1272. const deleteCertBack = () => {
  1273. uploadCertBack.value = 0;
  1274. cardPositiveList.value = [];
  1275. }
  1276. const deleteCard = () => {
  1277. uploadCard.value = 0;
  1278. statementCard.value = [];
  1279. }
  1280. const deleteTradeLicence = () => {
  1281. tradeLicenceStatus.value = 0;
  1282. tradeLicenceList.value = [];
  1283. }
  1284. const deleteAccountLicence = () => {
  1285. accountLicenceStatus.value = 0;
  1286. openAccountLicenceList.value = [];
  1287. }
  1288. const onOversize = () => { showFailToast(t('joinpayMch.exceedPictSize')); }
  1289. return {
  1290. pageType,
  1291. joinPayMchType,
  1292. joinPayMchStep,
  1293. ...toRefs(addParams),
  1294. ...toRefs(huifuParams),
  1295. ...toRefs(sentImageForm),
  1296. cardPositiveList,
  1297. cardNegativeList,
  1298. tradeLicenceList,
  1299. statementCard,
  1300. openAccountLicenceList,
  1301. saveJoinPayMchFun,
  1302. updateJoinPay,
  1303. sentImageFun,
  1304. approveStatus,
  1305. signStatus,
  1306. conStat,
  1307. updateSentImage,
  1308. altMchSignFun,
  1309. idCardExpiryShow,
  1310. idCardExpiryOnConfirm,
  1311. licenseExpiryShow,
  1312. licenseExpiryOnConfirm,
  1313. fieldUpdate,
  1314. afterRead,
  1315. deleteCertFront,
  1316. deleteCertBack,
  1317. deleteCard,
  1318. deleteTradeLicence,
  1319. deleteAccountLicence,
  1320. onOversize,
  1321. showBeginDate,
  1322. showEndDate,
  1323. minDate: new Date(2000, 0, 1),
  1324. maxDate: new Date(2050, 11, 31),
  1325. onConfirmBeginDate,
  1326. onConfirmEndDate,
  1327. showBankAddress,
  1328. showBankCode,
  1329. bankCodePopList,
  1330. bankCodePopConfirm,
  1331. areaList,
  1332. onConfirmBankAddress,
  1333. showArea,
  1334. onConfirm,
  1335. showReAddress,
  1336. onConfirmReAddress,
  1337. showFoundDate,
  1338. onConfirmFoundDate,
  1339. showBeginDateLicense,
  1340. showEndDateLicense,
  1341. onConfirmEndDateLicense,
  1342. onConfirmBeginDateLicense,
  1343. huifuMchNO,
  1344. sendCode,
  1345. maskPhoneNumber,
  1346. verCodeTimeInterval,
  1347. verCodeTime,
  1348. ...toRefs(verCodeTime),
  1349. huifuAuditStatus,
  1350. huifuPicUpStatus,
  1351. huifuMchID,
  1352. joinPayMchID,
  1353. showPopover,
  1354. regNameVisible,
  1355. shortNameVisible,
  1356. popoverVisible
  1357. };
  1358. },
  1359. };
  1360. </script>
  1361. <style lang="less" scoped>
  1362. @import "../../common/style/common.less";
  1363. @import "../../styles/joinpayMch/index.less";
  1364. </style>