index.vue 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716
  1. <template>
  2. <!-- 备用提现账号 -->
  3. <div class="huifuPage flex-col">
  4. <s-header :name="$t('huifuMch.standbyWithdrawalAccountNo')" :noback="false"></s-header>
  5. <!-- 申请表单 -->
  6. <div class="huifuform flex-col" v-if="showStatus == null">
  7. <van-form @submit="onSubmit">
  8. <div class="huifuBox">
  9. <div class="van-cell van-field">
  10. <div class="van-cell__title van-field__label"><span>{{ $t('huifuMch.merchantType') }}</span></div>
  11. <div class="van-cell__value van-field__value radioBox">
  12. <van-radio-group v-model="type" direction="horizontal">
  13. <van-radio name="0" icon-size="18px">{{ $t('huifuMch.personal') }}</van-radio>
  14. <van-radio name="1" icon-size="18px">{{ $t('huifuMch.enterprise') }}</van-radio>
  15. </van-radio-group>
  16. </div>
  17. </div>
  18. <van-field v-model="regName" name="regName" :label="$t('huifuMch.huifuRegName')"
  19. :placeholder="$t('huifuMch.huifuRegNamePlaceholder')"
  20. :rules="[{ required: true, message: $t('huifuMch.huifuRegNamePlaceholder') }]" />
  21. <van-field v-model="shortName" name="shortName" :label="$t('huifuMch.shortNameLabel')"
  22. :placeholder="$t('huifuMch.shortNamePlaceholder')" />
  23. <div v-if="type == 1">
  24. <van-field v-model="registeredAddress" is-link readonly name="registeredAddress"
  25. :label="$t('huifuMch.huifuRegisteredAddress')"
  26. :placeholder="$t('huifuMch.huifuRegisteredAddressPlaceholder')"
  27. :rules="[{ required: true, message: $t('huifuMch.huifuRegisteredAddressPlaceholder') }]"
  28. @click="showReAddress = true" />
  29. <van-field v-model="regDetail" name="regDetail" :label="$t('huifuMch.huifuRegDetail')"
  30. :placeholder="$t('huifuMch.huifuRegDetailPlaceholder')"
  31. :rules="[{ required: true, message: $t('huifuMch.huifuRegDetailPlaceholder') }]" />
  32. </div>
  33. </div>
  34. <div class="huifuBox" v-if="type == 1">
  35. <van-field v-model="companyFoundDate" readonly name="companyFoundDate" :label="$t('huifuMch.companyFoundDate')"
  36. :placeholder="$t('huifuMch.companyFoundDatePlaceholder')" @click="showFoundDate = true"
  37. :rules="[{ required: true, message: $t('huifuMch.companyFoundDatePlaceholder') }]" />
  38. <van-field v-model="licenseCode" name="licenseCode" :label="$t('huifuMch.licenseCode')"
  39. :placeholder="$t('huifuMch.licenseCodePlaceholder')"
  40. :rules="[{ required: true, message: $t('huifuMch.licenseCodePlaceholder') }]" />
  41. <div class="van-cell van-field">
  42. <div class="van-cell__title van-field__label"><span>{{ $t('huifuMch.validityType') }}</span></div>
  43. <div class="van-cell__value van-field__value radioBox">
  44. <van-radio-group v-model="licenseValidityType" direction="horizontal">
  45. <van-radio name="1" icon-size="18px">{{ $t('huifuMch.permanent') }}</van-radio>
  46. <van-radio name="0" icon-size="18px">{{ $t('huifuMch.noPermanent') }}</van-radio>
  47. </van-radio-group>
  48. </div>
  49. </div>
  50. <van-field v-model="beginDateLicense" readonly name="beginDateLicense" :label="$t('huifuMch.beginDate')"
  51. :placeholder="$t('huifuMch.beginDatePlaceholder')" @click="showBeginDateLicense = true"
  52. :rules="[{ required: true, message: $t('huifuMch.beginDatePlaceholder') }]" />
  53. <van-field v-if="licenseValidityType == 0" v-model="endDateLicense" readonly name="endDateLicense"
  54. :label="$t('huifuMch.endDate')" :placeholder="$t('huifuMch.endDatePlaceholder')"
  55. @click="showEndDateLicense = true"
  56. :rules="[{ required: true, message: $t('huifuMch.endDatePlaceholder') }]" />
  57. </div>
  58. <div class="huifuBox">
  59. <van-field v-model="name" name="name" :label="$t('huifuMch.huifuContactName')"
  60. :placeholder="$t('huifuMch.huifuContactNamePlaceholder')"
  61. :rules="[{ required: true, message: $t('huifuMch.huifuContactNamePlaceholder') }]" />
  62. <van-field v-model="phone" name="phone" :label="$t('huifuMch.huifuContactMobile')"
  63. :placeholder="$t('huifuMch.huifuContactMobilePlaceholder')"
  64. :rules="[{ required: true, pattern: /^1[3456789]\d{9}$/, message: $t('huifuMch.huifuContactMobileMessage') }]" />
  65. <van-field v-model="email" name="email" :label="$t('huifuMch.huifuContactEmail')"
  66. :placeholder="$t('huifuMch.huifuContactEmailPlaceholder')"
  67. :rules="[{ required: true, pattern: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/, message: $t('huifuMch.huifuContactEmailMessage') }]" />
  68. <van-field v-model="businessAddress" is-link readonly name="businessAddress"
  69. :label="$t('huifuMch.huifuBusinessAddress')" :placeholder="$t('huifuMch.huifuBusinessAddressPlaceholder')"
  70. :rules="[{ required: true, message: $t('huifuMch.huifuBusinessAddressPlaceholder') }]"
  71. @click="showArea = true" />
  72. <van-field v-model="detailAddr" name="detailAddr" :label="$t('huifuMch.huifuOperatingAddress')"
  73. :placeholder="$t('huifuMch.huifuOperatingAddressPlaceholder')"
  74. :rules="[{ required: true, message: $t('huifuMch.huifuOperatingAddressPlaceholder') }]" />
  75. <van-field v-if="type == 1" v-model="servicePhone" name="servicePhone" :label="$t('huifuMch.huifuServicePhone')"
  76. :placeholder="$t('huifuMch.huifuServicePhonePlaceholder')"
  77. :rules="[{ required: true, message: $t('huifuMch.huifuServicePhonePlaceholder') }]" />
  78. </div>
  79. <div class="huifuBox">
  80. <div class="van-cell van-field" v-if="type == 1">
  81. <div class="van-cell__title van-field__label"><span>{{ $t('huifuMch.cardType') }}</span></div>
  82. <div class="van-cell__value van-field__value radioBox">
  83. <van-radio-group v-model="cardType" direction="horizontal">
  84. <van-radio name="1" icon-size="18px">{{ $t('huifuMch.personalAccount') }}</van-radio>
  85. <van-radio name="0" icon-size="18px">{{ $t('huifuMch.corporateAccount') }}</van-radio>
  86. </van-radio-group>
  87. </div>
  88. </div>
  89. <van-field v-model="cardName" name="cardName" :label="$t('huifuMch.huifuCardName')"
  90. :placeholder="$t('huifuMch.huifuCardNamePlaceholder')"
  91. :rules="[{ required: true, message: $t('huifuMch.huifuCardNamePlaceholder') }]" />
  92. <van-field v-model="cardNo" name="cardNo" :label="$t('huifuMch.huifuCardNo')"
  93. :placeholder="$t('huifuMch.huifuCardNoPlaceholder')"
  94. :rules="[{ required: true, message: $t('huifuMch.huifuCardNoPlaceholder') }]" />
  95. <van-field v-if="cardType == '1'" v-model="mp" name="mp" :label="$t('huifuMch.huifuMp')"
  96. :placeholder="$t('huifuMch.huifuMpPlaceholder')"
  97. :rules="[{ required: true, pattern: /^1[3456789]\d{9}$/, message: $t('huifuMch.huifuContactMobileMessage') }]" />
  98. <van-field v-if="cardType == 0" v-model="branchCode" name="branchCode" :label="$t('huifuMch.branchCode')"
  99. :placeholder="$t('huifuMch.branchCodePlaceholder')"
  100. :rules="[{ required: true, message: $t('huifuMch.branchCodePlaceholder') }]" />
  101. <van-field v-if="cardType == 0" v-model="openLicenceNo" name="openLicenceNo"
  102. :label="$t('huifuMch.openLicenceNo')" :placeholder="$t('huifuMch.openLicenceNoPlaceholder')"
  103. :rules="[{ required: true, message: $t('huifuMch.openLicenceNoPlaceholder') }]" />
  104. <van-field v-if="cardType == '1'" v-model="bankAddress" is-link readonly name="bankAddress"
  105. :label="$t('huifuMch.huifuBankAddress')" :placeholder="$t('huifuMch.huifuBankAddressPlaceholder')"
  106. :rules="[{ required: true, message: $t('huifuMch.huifuBankAddressPlaceholder') }]"
  107. @click="showBankAddress = true" />
  108. <van-field v-model="certNo" name="certNo" :label="$t('huifuMch.huifuCertNo')"
  109. :placeholder="$t('huifuMch.huifuCertNoPlaceholder')"
  110. :rules="[{ required: true, pattern: /^\d{17}[\dXx]$/, message: $t('huifuMch.huifuCertNoMessage') }]" />
  111. <van-field v-if="cardType == '0'" v-model="certAddress" name="certAddress" :label="$t('huifuMch.certAddress')"
  112. :placeholder="$t('huifuMch.certAddressPlaceholder')"
  113. :rules="[{ required: true, message: $t('huifuMch.certAddressPlaceholder') }]" />
  114. <div class="van-cell van-field">
  115. <div class="van-cell__title van-field__label"><span>{{ $t('huifuMch.certType') }}</span></div>
  116. <div class="van-cell__value van-field__value radioBox">
  117. <van-radio-group v-model="certValidityType" direction="horizontal">
  118. <van-radio name="1" icon-size="18px">{{ $t('huifuMch.permanent') }}</van-radio>
  119. <van-radio name="0" icon-size="18px">{{ $t('huifuMch.noPermanent') }}</van-radio>
  120. </van-radio-group>
  121. </div>
  122. </div>
  123. <van-field v-model="beginDate" readonly name="beginDate" :label="$t('huifuMch.beginDate')"
  124. :placeholder="$t('huifuMch.beginDatePlaceholder')" @click="showBeginDate = true"
  125. :rules="[{ required: true, message: $t('huifuMch.beginDatePlaceholder') }]" />
  126. <van-field v-if="certValidityType == 0" v-model="endDate" readonly name="endDate"
  127. :label="$t('huifuMch.endDate')" :placeholder="$t('huifuMch.endDatePlaceholder')" @click="showEndDate = true"
  128. :rules="[{ required: true, message: $t('huifuMch.endDatePlaceholder') }]" />
  129. </div>
  130. <!-- 地址弹窗 -->
  131. <van-popup v-model:show="showArea" position="bottom">
  132. <van-area :area-list="areaList" @confirm="onConfirm" @cancel="showArea = false" />
  133. </van-popup>
  134. <van-popup v-model:show="showBankAddress" position="bottom">
  135. <van-area :area-list="areaList" :columns-num="2" @confirm="onConfirmBankAddress"
  136. @cancel="showBankAddress = false" />
  137. </van-popup>
  138. <van-popup v-model:show="showReAddress" position="bottom">
  139. <van-area :area-list="areaList" @confirm="onConfirmReAddress" @cancel="showReAddress = false" />
  140. </van-popup>
  141. <!-- 时间弹窗 -->
  142. <van-popup v-model:show="showEndDateLicense" position="bottom">
  143. <van-datetime-picker type="date" :min-date="minDate" :max-date="maxDate" @confirm="onConfirmEndDateLicense"
  144. @cancel="showEndDateLicense = false" />
  145. </van-popup>
  146. <van-popup v-model:show="showBeginDateLicense" position="bottom">
  147. <van-datetime-picker type="date" :min-date="minDate" :max-date="maxDate" @confirm="onConfirmBeginDateLicense"
  148. @cancel="showBeginDateLicense = false" />
  149. </van-popup>
  150. <van-popup v-model:show="showFoundDate" position="bottom">
  151. <van-datetime-picker type="date" :min-date="minDate" :max-date="maxDate" @confirm="onConfirmFoundDate"
  152. @cancel="showFoundDate = false" />
  153. </van-popup>
  154. <van-popup v-model:show="showBeginDate" position="bottom">
  155. <van-datetime-picker type="date" :min-date="minDate" :max-date="maxDate" @confirm="onConfirmBeginDate"
  156. @cancel="showBeginDate = false" />
  157. </van-popup>
  158. <van-popup v-model:show="showEndDate" position="bottom">
  159. <van-datetime-picker type="date" :min-date="minDate" :max-date="maxDate" @confirm="onConfirmEndDate"
  160. @cancel="showEndDate = false" />
  161. </van-popup>
  162. <van-row justify="space-around" style="padding: 3em; background-color: #f6f7f9;">
  163. <van-button span="10" round type="primary" style=" padding: 0 5em" native-type="submit">{{
  164. $t('huifuMch.submit') }}
  165. </van-button>
  166. </van-row>
  167. </van-form>
  168. </div>
  169. <!-- 上传图片 -->
  170. <div class="upLoad flex-col" v-if="showStatus == '0'">
  171. <van-cell title="身份证" size="large" icon="contact" />
  172. <div class="uploader-container">
  173. <van-uploader v-model="certFrontPic" accept=".jpg,.png" :preview-size="[320, 180]"
  174. style="display: block; padding: 0.5em 1em;" :max-size="2 * 1024 * 1024" @oversize="onOversize"
  175. :after-read="upCertFrontPic" upload-text="点击上传身份证正面照片" capture="camera" image-fit="contain" :max-count="1" />
  176. <van-uploader v-model="certBackPic" accept=".jpg,.png" :preview-size="[320, 180]"
  177. style="display: block; padding: 0.5em 1em;" :max-size="2 * 1024 * 1024" @oversize="onOversize"
  178. :after-read="upCertBackPic" upload-text="点击上传身份证背面照片" capture="camera" image-fit="contain" :max-count="1" />
  179. </div>
  180. <div v-if="type == '1'">
  181. <van-cell title="营业执照" size="large" icon="contact" />
  182. <div class="uploader-container">
  183. <van-uploader v-model="licensePic" accept=".jpg,.png" :preview-size="[320, 180]"
  184. style="display: block; padding: 0.5em 1em;" :max-size="2 * 1024 * 1024" @oversize="onOversize"
  185. :after-read="upLicensePic" upload-text="点击上传营业执照" capture="camera" image-fit="contain" :max-count="1" />
  186. </div>
  187. </div>
  188. <div v-if="cardType == '1'">
  189. <van-cell title="结算卡" size="large" icon="debit-pay" />
  190. <div class="uploader-container">
  191. <van-uploader v-model="cardFrontPic" accept=".jpg,.png" :preview-size="[320, 180]"
  192. style="display: block; padding: 0.5em 1em;" :max-size="2 * 1024 * 1024" @oversize="onOversize"
  193. :after-read="upCardFrontPic" upload-text="点击上传结算卡正面照片" capture="camera" image-fit="contain" :max-count="1" />
  194. </div>
  195. </div>
  196. <div v-if="cardType == '0'">
  197. <van-cell title="开户许可证" size="large" icon="debit-pay" />
  198. <div class="uploader-container">
  199. <van-uploader v-model="regAcctPic" accept=".jpg,.png" :preview-size="[320, 180]"
  200. style="display: block; padding: 0.5em 1em;" :max-size="2 * 1024 * 1024" @oversize="onOversize"
  201. :after-read="upRegAcctPic" upload-text="点击上传开户许可证照片" capture="camera" image-fit="contain" :max-count="1" />
  202. </div>
  203. </div>
  204. <van-row justify="space-around" style="padding: 3em;">
  205. <van-button span="10" round type="primary" style=" padding: 0 5em" native-type="sumbit" @click="submitCheck">{{
  206. $t('huifuMch.submit') }}
  207. </van-button>
  208. </van-row>
  209. </div>
  210. <!-- 审核状态 -->
  211. <div v-if="showStatus == '1' || showStatus == '2' || showStatus == '3' || showStatus == '4'">
  212. <van-cell value="" size="large">
  213. <!-- 使用 title 插槽来自定义标题 -->
  214. <template #title>
  215. <span class="custom-title">审核状态: </span>
  216. <span v-if="showStatus == '1' || showStatus == '4'" class="custom-title" style="color: #FFA500;">审核中</span>
  217. <span v-if="showStatus == '2'" class="custom-title" style="color: #00FF00;">审核通过</span>
  218. <span v-if="showStatus == '3'" class="custom-title" style="color: #FF0000;">审核未通过</span>
  219. </template>
  220. </van-cell>
  221. <div class="parent-container" v-if="huifuMchCheck.type == '0'">
  222. <span>{{ $t('huifuMch.merchantType') }}:个人</span>
  223. <span>{{ $t('huifuMch.huifuRegName') }}:{{ huifuMchCheck.regName }}</span>
  224. <span>{{ $t('huifuMch.shortNameLabel') }}:{{ huifuMchCheck.shortName }}</span>
  225. <span>{{ $t('huifuMch.huifuContactName') }}:{{ huifuMchCheck.name }}</span>
  226. <span>{{ $t('huifuMch.huifuContactMobile') }}:{{ huifuMchCheck.phone }}</span>
  227. <span>{{ $t('huifuMch.huifuContactEmail') }}:{{ huifuMchCheck.email }}</span>
  228. <span>{{ $t('huifuMch.huifuBusinessAddress') }}:{{ huifuMchCheck.detailAddr }}</span>
  229. <span>{{ $t('huifuMch.huifuCardName') }}:{{ huifuMchCheck.cardName }}</span>
  230. <span>{{ $t('huifuMch.huifuCardNo') }}:{{ huifuMchCheck.cardNo }}</span>
  231. <span>{{ $t('huifuMch.huifuMp') }}:{{ huifuMchCheck.mp }}</span>
  232. <span>{{ $t('huifuMch.huifuCertNo') }}:{{ huifuMchCheck.certNo }}</span>
  233. </div>
  234. <div class="parent-container" v-if="huifuMchCheck.type == '1'">
  235. <span>{{ $t('huifuMch.merchantType') }}:企业</span>
  236. <span>{{ $t('huifuMch.huifuRegName') }}:{{ huifuMchCheck.regName }}</span>
  237. <span>{{ $t('huifuMch.shortNameLabel') }}:{{ huifuMchCheck.shortName }}</span>
  238. <span>{{ $t('huifuMch.companyFoundDate') }}:{{ huifuMchCheck.foundDate }}</span>
  239. <span>{{ $t('huifuMch.licenseCode') }}:{{ huifuMchCheck.licenseCode }}</span>
  240. <span>{{ $t('huifuMch.huifuRegDetail') }}:{{ huifuMchCheck.regDetail }}</span>
  241. <span>{{ $t('huifuMch.huifuContactName') }}:{{ huifuMchCheck.name }}</span>
  242. <span>{{ $t('huifuMch.huifuContactMobile') }}:{{ huifuMchCheck.phone }}</span>
  243. <span>{{ $t('huifuMch.huifuContactEmail') }}:{{ huifuMchCheck.email }}</span>
  244. <span>{{ $t('huifuMch.huifuBusinessAddress') }}:{{ huifuMchCheck.detailAddr }}</span>
  245. <span>{{ $t('huifuMch.huifuServicePhone') }}:{{ huifuMchCheck.servicePhone }}</span>
  246. <span>{{ $t('huifuMch.cardType') }}:{{ huifuMchCheck.cardType == '1' ?
  247. $t('huifuMch.personalAccount') : $t('huifuMch.corporateAccount') }}</span>
  248. <span>{{ $t('huifuMch.huifuCardName') }}:{{ huifuMchCheck.cardName }}</span>
  249. <span>{{ $t('huifuMch.huifuCardNo') }}:{{ huifuMchCheck.cardNo }}</span>
  250. <span v-if="huifuMchCheck.cardType == '1'">{{ $t('huifuMch.huifuMp') }}:{{ huifuMchCheck.mp }}</span>
  251. <span>{{ $t('huifuMch.huifuCertNo') }}:{{ huifuMchCheck.certNo }}</span>
  252. <span v-if="huifuMchCheck.cardType == '0'">{{ $t('huifuMch.openLicenceNo') }}:{{ huifuMchCheck.openLicenceNo
  253. }}</span>
  254. <span v-if="huifuMchCheck.cardType == '0'">{{ $t('huifuMch.branchCode') }}:{{ huifuMchCheck.branchCode }}</span>
  255. </div>
  256. <van-row v-if="showStatus == '2' || showStatus == '3'" justify="space-around" style="padding: 3em;">
  257. <van-button span="10" round type="primary" style=" padding: 0 5em" native-type="sumbit" @click="updateHuifu">{{
  258. $t('huifuMch.update') }}
  259. </van-button>
  260. </van-row>
  261. <van-row v-if="showStatus == '2' || showStatus == '3'" justify="space-around" style="padding: 1em;">
  262. <van-button span="5" round type="primary" style="padding: 0 3em" native-type="sumbit" @click="upload">{{
  263. $t('huifuMch.uploadPage') }}
  264. </van-button>
  265. </van-row>
  266. </div>
  267. </div>
  268. </template>
  269. <script>
  270. import { onMounted, reactive, toRefs, ref } from "vue";
  271. import sHeader from "@/components/SimpleHeader";
  272. import dateUtil from "@/utils/dateUtil";
  273. import { Toast } from "vant";
  274. import { areaList } from "@vant/area-data";
  275. import { saveHuifuMch, getHuifuMchCheck, uploadPic, submitHuifuCheck } from "@/service/huifuMch";
  276. import { getLoginUser } from "@/common/js/utils";
  277. import { useRouter } from "vue-router";
  278. import { useI18n } from "vue-i18n";
  279. export default {
  280. components: { sHeader },
  281. setup() {
  282. // 引入语言
  283. const { t } = useI18n();
  284. const router = useRouter();
  285. const user = getLoginUser();
  286. const huifuMchCheck = ref(null); // 审核信息
  287. const businessAddress = ref(''); //经营地址
  288. const registeredAddress = ref(''); //注册地址
  289. const bankAddress = ref(''); // 银行地址
  290. const showArea = ref(false); // 是否弹窗
  291. const showBankAddress = ref(false);
  292. const showReAddress = ref(false);
  293. const companyFoundDate = ref(''); // 成立日期
  294. const showFoundDate = ref(false);
  295. const beginDateLicense = ref(''); // 营业执照有效开始日期
  296. const showBeginDateLicense = ref(false);
  297. const endDateLicense = ref(''); // 营业执照有效截止日期
  298. const showEndDateLicense = ref(false);
  299. const beginDate = ref(''); // 有效期开始日期
  300. const showBeginDate = ref(false);
  301. const endDate = ref(''); // 有效期截日期
  302. const showEndDate = ref(false);
  303. const showStatus = ref(null);
  304. const certBackPic = ref();
  305. const certFrontPic = ref();
  306. const cardFrontPic = ref();
  307. const licensePic = ref();
  308. const regAcctPic = ref();
  309. let addParams = reactive({
  310. adminId: user.id, // 当前登录账户的id
  311. type: '0', // 类型 String 必填 对公企业:type=0; 个人:type=1
  312. regName: '', // 商户名称
  313. shortName: '', // 商户简称
  314. foundDate: '', // 成立时间
  315. licenseCode: '', // 营业执照编号
  316. licenseValidityType: "1", // 营业执照有效期类型
  317. licenseBeginDate: '', // 营业执照有效开始日期
  318. licenseEndDate: '', // 营业执照有效截止日期
  319. regProvId: '', // 注册省编码
  320. regAreaId: '', // 注册市编码
  321. regDistrictId: '', // 注册区编码
  322. regDetail: '', // 注册详细地址
  323. name: '', // 联系人姓名
  324. phone: '', // 联系人手机号码
  325. email: '', // 联系人邮箱
  326. provId: '', // 省编码
  327. areaId: '', // 省编码
  328. districtId: '', // 市编码
  329. detailAddr: '', // 经营地址
  330. servicePhone: '', // 客服电话
  331. cardName: '', // 卡户名
  332. cardType: '1', // 结算账户类型,“0”为对公账户,“1”为个人账户
  333. cardNo: '', // 银行卡号
  334. branchCode: '', // 联行号
  335. openLicenceNo: '', // 基本存款账户编号或核准号
  336. cardProvId: '', // 省编码
  337. cardAreaId: '', // 省编码
  338. mp: '', // 结算手机号
  339. certNo: '', // 身份证号
  340. certAddress: '', // 身份证地址
  341. certValidityType: '1', // 身份证有效期类型
  342. certBeginDate: '', // 有效期开始日期
  343. certEndDate: '', // 有效期截止日期
  344. });
  345. // 上传身份证正面
  346. const upCertFrontPic = async (file) => {
  347. file.status = 'uploading';
  348. file.message = '上传中...';
  349. const formData = new FormData();
  350. formData.append('file', file.file, file.file.name);
  351. formData.append('adminId', user.id);
  352. formData.append('fileType', "F40");
  353. // console.log(formData.get("file"));
  354. if (addParams.type === '1') {
  355. formData.append('fileType', "F02");
  356. }
  357. try {
  358. const { data } = await uploadPic(formData, {
  359. headers: {
  360. 'Content-Type': 'multipart/form-data',
  361. },
  362. });
  363. if (addParams.type === '1') {
  364. const { data1 } = await uploadPic(formData, {
  365. headers: {
  366. 'Content-Type': 'multipart/form-data',
  367. },
  368. });
  369. if (data.code == "00000" && data1.code == "00000") {
  370. console.log(data);
  371. file.status = 'done';
  372. } else {
  373. file.status = 'failed';
  374. file.message = '上传失败';
  375. }
  376. } else {
  377. if (data.code == "00000") {
  378. console.log(data);
  379. file.status = 'done';
  380. } else {
  381. file.status = 'failed';
  382. file.message = '上传失败';
  383. }
  384. }
  385. } catch {
  386. file.status = 'failed';
  387. file.message = '上传失败';
  388. }
  389. };
  390. // 上传身份证背面
  391. const upCertBackPic = async (file) => {
  392. file.status = 'uploading';
  393. file.message = '上传中...';
  394. // 此时可以自行将文件上传至服务器
  395. // const fileObject = new File([file.content], file.file.name, { type: file.file.type });
  396. const formData = new FormData();
  397. formData.append('file', file.file, file.file.name);
  398. formData.append('adminId', user.id);
  399. formData.append('fileType', "F41");
  400. if (addParams.type == '1') {
  401. formData.append('fileType', "F03");
  402. }
  403. console.log(formData.get("file"));
  404. try {
  405. const { data } = await uploadPic(formData, {
  406. headers: {
  407. 'Content-Type': 'multipart/form-data',
  408. },
  409. });
  410. if (addParams.type == '1') {
  411. const { data1 } = await uploadPic(formData, {
  412. headers: {
  413. 'Content-Type': 'multipart/form-data',
  414. },
  415. });
  416. if (data.code == "00000" && data1.code == "00000") {
  417. console.log(data1);
  418. file.status = 'done';
  419. } else {
  420. file.status = 'failed';
  421. file.message = '上传失败';
  422. }
  423. } else {
  424. if (data.code == "00000") {
  425. console.log(data);
  426. file.status = 'done';
  427. } else {
  428. file.status = 'failed';
  429. file.message = '上传失败';
  430. }
  431. }
  432. } catch {
  433. file.status = 'failed';
  434. file.message = '上传失败';
  435. }
  436. };
  437. // 上传结算卡正面
  438. const upCardFrontPic = async (file) => {
  439. file.status = 'uploading';
  440. file.message = '上传中...';
  441. // 此时可以自行将文件上传至服务器
  442. const formData = new FormData();
  443. formData.append('file', file.file, file.file.name);
  444. formData.append('adminId', user.id);
  445. formData.append('fileType', "F13");
  446. console.log(formData.get("file"));
  447. try {
  448. const { data } = await uploadPic(formData, 'multipart/form-data'
  449. );
  450. if (data.code == "00000") {
  451. console.log(data);
  452. file.status = 'done';
  453. } else {
  454. file.status = 'failed';
  455. file.message = '上传失败';
  456. }
  457. } catch {
  458. file.status = 'failed';
  459. file.message = '上传失败';
  460. }
  461. };
  462. // 上传营业执照
  463. const upLicensePic = async (file) => {
  464. file.status = 'uploading';
  465. file.message = '上传中...';
  466. // 此时可以自行将文件上传至服务器
  467. const formData = new FormData();
  468. formData.append('file', file.file, file.file.name);
  469. formData.append('adminId', user.id);
  470. formData.append('fileType', "F07");
  471. console.log(formData.get("file"));
  472. try {
  473. const { data } = await uploadPic(formData, {
  474. headers: {
  475. 'Content-Type': 'multipart/form-data',
  476. },
  477. });
  478. if (data.code == "00000") {
  479. console.log(data);
  480. file.status = 'done';
  481. } else {
  482. file.status = 'failed';
  483. file.message = '上传失败';
  484. }
  485. } catch {
  486. file.status = 'failed';
  487. file.message = '上传失败';
  488. }
  489. };
  490. // 上传开户许可证
  491. const upRegAcctPic = async (file) => {
  492. file.status = 'uploading';
  493. file.message = '上传中...';
  494. // 此时可以自行将文件上传至服务器
  495. // const fileObject = new File([file.content], file.file.name, { type: file.file.type });
  496. // const formData = new FormData();
  497. // formData.append('file', fileObject);
  498. const formData = new FormData();
  499. formData.append('file', file.file, file.file.name);
  500. formData.append('adminId', user.id);
  501. formData.append('fileType', "F08");
  502. console.log(formData.get("file"));
  503. try {
  504. const { data } = await uploadPic(formData, {
  505. headers: {
  506. 'Content-Type': 'multipart/form-data',
  507. },
  508. });
  509. if (data.code == "00000") {
  510. console.log(data);
  511. file.status = 'done';
  512. } else {
  513. file.status = 'failed';
  514. file.message = '上传失败';
  515. }
  516. } catch {
  517. file.status = 'failed';
  518. file.message = '上传失败';
  519. }
  520. };
  521. const onOversize = (file) => {
  522. console.log(file);
  523. Toast('文件大小不能超过 2MB');
  524. };
  525. // 地址选择
  526. const onConfirm = (areaValues) => {
  527. console.log(areaValues)
  528. showArea.value = false;
  529. businessAddress.value = areaValues
  530. .filter((item) => !!item)
  531. .map((item) => item.name)
  532. .join('/');
  533. addParams.provId = areaValues[0]?.code || '';
  534. addParams.areaId = areaValues[1]?.code || '';
  535. addParams.districtId = areaValues[2]?.code || '';
  536. // addParams.detailAddr = areaValues[0].name + areaValues[1].name + areaValues[2].name;
  537. };
  538. const onConfirmBankAddress = (areaValues) => {
  539. console.log(areaValues)
  540. showBankAddress.value = false;
  541. bankAddress.value = areaValues
  542. .filter((item) => !!item)
  543. .map((item) => item.name)
  544. .join('/');
  545. addParams.cardProvId = areaValues[0]?.code || '';
  546. addParams.cardAreaId = areaValues[1]?.code || '';
  547. };
  548. const onConfirmReAddress = (areaValues) => {
  549. showReAddress.value = false;
  550. registeredAddress.value = areaValues
  551. .filter((item) => !!item)
  552. .map((item) => item.name)
  553. .join('/');
  554. addParams.regProvId = areaValues[0]?.code || '';
  555. addParams.regAreaId = areaValues[1]?.code || '';
  556. addParams.regDistrictId = areaValues[2]?.code || '';
  557. };
  558. // 时间选择
  559. const onConfirmEndDateLicense = (value) => {
  560. endDateLicense.value = dateUtil.formateDate(value, "yyyy-MM-dd");
  561. addParams.licenseEndDate = endDateLicense.value.replace(/-/g, "");
  562. showEndDateLicense.value = false;
  563. };
  564. const onConfirmBeginDateLicense = (value) => {
  565. beginDateLicense.value = dateUtil.formateDate(value, "yyyy-MM-dd");
  566. addParams.licenseBeginDate = beginDateLicense.value.replace(/-/g, "");
  567. showBeginDateLicense.value = false;
  568. };
  569. const onConfirmFoundDate = (value) => {
  570. companyFoundDate.value = dateUtil.formateDate(value, "yyyy-MM-dd");
  571. addParams.foundDate = companyFoundDate.value.replace(/-/g, "");
  572. showFoundDate.value = false;
  573. };
  574. const onConfirmBeginDate = (value) => {
  575. beginDate.value = dateUtil.formateDate(value, "yyyy-MM-dd");
  576. addParams.certBeginDate = beginDate.value.replace(/-/g, "");
  577. showBeginDate.value = false;
  578. };
  579. const onConfirmEndDate = (value) => {
  580. endDate.value = dateUtil.formateDate(value, "yyyy-MM-dd");
  581. addParams.certEndDate = endDate.value.replace(/-/g, "");
  582. showEndDate.value = false;
  583. };
  584. onMounted(async () => {
  585. const { data } = await getHuifuMchCheck({ adminId: user.id });
  586. console.log(data.data);
  587. if (data.data != null) {
  588. huifuMchCheck.value = data.data;
  589. showStatus.value = huifuMchCheck.value.status;
  590. addParams.type = huifuMchCheck.value.type;
  591. addParams.cardType = huifuMchCheck.value.cardType;
  592. }
  593. });
  594. // 提交审核
  595. const submitCheck = async () => {
  596. if (certBackPic.value == null) {
  597. Toast("请上传身份证正面照片");
  598. return;
  599. } else if (certFrontPic.value == null) {
  600. Toast("请上传身份证背面照片");
  601. return;
  602. }
  603. if (addParams.cardType == '1') {
  604. if (cardFrontPic.value == null) {
  605. Toast("请上传结算卡正面照片");
  606. return;
  607. }
  608. } else {
  609. if (licensePic.value == null) {
  610. Toast("请上传营业执照照片");
  611. return;
  612. }
  613. if (regAcctPic.value == null) {
  614. Toast("请上传开户许可证照片");
  615. return;
  616. }
  617. }
  618. const { data } = await submitHuifuCheck(addParams);
  619. if (data.code == "00000") {
  620. console.log(data);
  621. Toast.success(t('huifuMch.submittedSuccessfully'));
  622. setTimeout(() => {
  623. router.go(0);
  624. }, 1500);
  625. } else {
  626. Toast.fail(`${t('huifuMch.submitFailed')} ${data.message}`);
  627. }
  628. }
  629. // 跳转到修改页面
  630. const updateHuifu = async () => {
  631. router.push("/huifuMchEdit");
  632. }
  633. // 跳转到上传图片页面
  634. const upload = async () => {
  635. router.push("/upload");
  636. }
  637. // 提交审核表单
  638. const onSubmit = async () => {
  639. console.log('onSubmit', addParams);
  640. saveHuifuMchFun();
  641. };
  642. const saveHuifuMchFun = async () => {
  643. const { data } = await saveHuifuMch(addParams);
  644. if (data.code === "00000") {
  645. Toast.success(t('huifuMch.submittedSuccessfully'));
  646. setTimeout(() => {
  647. router.go(0);
  648. }, 1500);
  649. } else {
  650. Toast.fail(`${t('huifuMch.submitFailed')} ${data.message}`);
  651. }
  652. console.log("onSubmit", data);
  653. };
  654. return {
  655. ...toRefs(addParams),
  656. onSubmit,
  657. showStatus,
  658. businessAddress,
  659. bankAddress,
  660. registeredAddress,
  661. huifuMchCheck,
  662. areaList,
  663. beginDateLicense,
  664. endDateLicense,
  665. companyFoundDate,
  666. beginDate,
  667. endDate,
  668. showArea,
  669. showBankAddress,
  670. showReAddress,
  671. showBeginDateLicense,
  672. showEndDateLicense,
  673. showFoundDate,
  674. showBeginDate,
  675. showEndDate,
  676. onConfirm,
  677. onConfirmBankAddress,
  678. onConfirmReAddress,
  679. onConfirmBeginDateLicense,
  680. onConfirmEndDateLicense,
  681. onConfirmFoundDate,
  682. onConfirmBeginDate,
  683. onConfirmEndDate,
  684. minDate: new Date(2000, 0, 1),
  685. maxDate: new Date(2035, 11, 31),
  686. licensePic,
  687. regAcctPic,
  688. certBackPic,
  689. certFrontPic,
  690. upLicensePic,
  691. upRegAcctPic,
  692. upCertBackPic,
  693. upCertFrontPic,
  694. upCardFrontPic,
  695. cardFrontPic,
  696. submitCheck,
  697. onOversize,
  698. updateHuifu,
  699. upload,
  700. };
  701. },
  702. };
  703. </script>
  704. <style lang="less" scoped>
  705. @import "../../common/style/common.less";
  706. @import "./index.less";
  707. </style>