index.vue 52 KB

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