index.vue 55 KB

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