index.vue 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311
  1. <template>
  2. <div id="TradingDetailedInfoAdd" class="InfoBox" :class="{ active: dialogInfoTradingAdd }">
  3. <div class="header">
  4. <div v-if="addType == '1'">
  5. <span class="title">{{ $t('Ucard.CardVirtualCard.d1') }}</span>
  6. </div>
  7. <div v-if="addType == '2'">
  8. <span class="title">{{ $t('Ucard.CardVirtualCard.d2') }}</span>
  9. </div>
  10. <div v-if="addType == '3'">
  11. <span class="title">{{ $t('Ucard.CardVirtualCard.d3') }}</span>
  12. </div>
  13. <div v-if="addType == '4'">
  14. <span class="title">{{ $t('R-CardOrder-Btn3') }}</span>
  15. </div>
  16. <div v-if="addType == '5'">
  17. <span class="title">{{ $t('R-CardKycAuth-Btn1') }}</span>
  18. </div>
  19. <div v-if="addType == '6'">
  20. <span class="title">{{ $t('Ucard.CardVirtualCard.d6') }}</span>
  21. </div>
  22. <div v-if="addType == '7'">
  23. <span class="title">{{ $t('R-CardVirtualCard-Btn6') }}</span>
  24. </div>
  25. <div v-if="addType == '8'">
  26. <span class="title">{{ $t('R-CardVirtualCard-Btn7') }}</span>
  27. </div>
  28. <div v-if="addType == '9'">
  29. <span class="title">{{ $t('R-CardVirtualCard-Btn3') }}</span>
  30. </div>
  31. <div v-if="addType == '10'">
  32. <span class="title">{{ $t('R-Business-Btn1') }}</span>
  33. </div>
  34. <div v-if="addType == '11'">
  35. <span class="title">{{ $t('R-Recharge-Btn3') }}</span>
  36. </div>
  37. <div v-if="addType == '12'">
  38. <span class="title">{{ $t('Ucard.CardKycAuth.b3') }}</span>
  39. </div>
  40. <div v-if="addType == '13'">
  41. <span class="title">{{ $t('R-CardVirtualCard-Btn11') }}</span>
  42. </div>
  43. <span class="close crm-cursor" @click="close">
  44. <el-icon><Close /></el-icon>
  45. </span>
  46. </div>
  47. <template v-if="addType == '1'">
  48. <el-form ref="formRef" :rules="rules" :model="form" label-width="120PX">
  49. <el-form-item prop="uniqueId" :label="$t('Ucard.CardVirtualCard.item7') + ':'">
  50. <el-input
  51. v-model="form.uniqueId"
  52. disabled
  53. :placeholder="$t('Placeholder.Input')"
  54. ></el-input>
  55. </el-form-item>
  56. <el-form-item prop="cardNumber" :label="$t('Ucard.CardVirtualCard.item2') + ':'">
  57. <el-input v-model="form.cardNumber" :placeholder="$t('Placeholder.Input')"></el-input>
  58. </el-form-item>
  59. <el-form-item prop="activeCode" :label="$t('card.Form.f26') + ':'">
  60. <el-input v-model="form.activeCode" :placeholder="$t('Placeholder.Input')"></el-input>
  61. </el-form-item>
  62. <el-form-item prop="pin" :label="$t('card.Form.f25') + ':'">
  63. <el-input v-model="form.pin" :placeholder="$t('Placeholder.Input')"></el-input>
  64. </el-form-item>
  65. </el-form>
  66. <span class="btn crm-cursor" @click="confirm">{{ $t('Btn.Confirm') }}</span>
  67. </template>
  68. <template v-if="addType == '2'">
  69. <el-form ref="formRef" :rules="rules" :model="form" label-width="120PX">
  70. <el-form-item
  71. prop="cId
  72. "
  73. :label="$t('Label.CidAccount') + ':'"
  74. >
  75. <el-input v-model="form.cId" disabled :placeholder="$t('Placeholder.Input')"></el-input>
  76. </el-form-item>
  77. <el-form-item prop="lastName" :label="$t('Ucard.CardKycAuth.item4') + ':'">
  78. <el-input
  79. v-model="form.lastName"
  80. disabled
  81. :placeholder="$t('Placeholder.Input')"
  82. ></el-input>
  83. </el-form-item>
  84. <el-form-item prop="firstName" :label="$t('Ucard.CardKycAuth.item5') + ':'">
  85. <el-input
  86. v-model="form.firstName"
  87. disabled
  88. :placeholder="$t('Placeholder.Input')"
  89. ></el-input>
  90. </el-form-item>
  91. <el-form-item prop="mobile" :label="$t('Ucard.CardKycAuth.item2') + ':'">
  92. <el-input
  93. v-model="form.mobile"
  94. disabled
  95. :placeholder="$t('Placeholder.Input')"
  96. ></el-input>
  97. </el-form-item>
  98. <el-form-item prop="email" :label="$t('Label.Email') + ':'">
  99. <el-input v-model="form.email" disabled :placeholder="$t('Placeholder.Input')"></el-input>
  100. </el-form-item>
  101. <el-form-item prop="cardNumber" :label="$t('Ucard.CardVirtualCard.item2') + ':'">
  102. <el-input
  103. v-model="form.cardNumber"
  104. disabled
  105. :placeholder="$t('Placeholder.Input')"
  106. ></el-input>
  107. </el-form-item>
  108. <el-form-item prop="amount" :label="$t('Ucard.Recharge.item4') + ':'">
  109. <el-input v-model="form.amount" :placeholder="$t('Placeholder.Input')"></el-input>
  110. </el-form-item>
  111. </el-form>
  112. <span class="btn crm-cursor" @click="confirm">{{ $t('Btn.Confirm') }}</span>
  113. </template>
  114. <template v-if="addType == '3'">
  115. <el-form ref="formRef" :rules="rules" :model="form" label-width="120PX">
  116. <el-form-item prop="currency" :label="$t('Ucard.CardVirtualCard.item9') + ':'">
  117. <el-select v-model="form.currency" :placeholder="$t('Placeholder.Choose')">
  118. <el-option
  119. v-for="(item, index) in currencyList"
  120. :key="index"
  121. :value="item.currency"
  122. :label="item.currency"
  123. ></el-option>
  124. </el-select>
  125. </el-form-item>
  126. <el-form-item prop="amount" :label="$t('Ucard.Recharge.item4') + ':'">
  127. <el-input v-model="form.amount" :placeholder="$t('Placeholder.Input')"></el-input>
  128. </el-form-item>
  129. </el-form>
  130. <span class="btn crm-cursor" @click="confirm">{{ $t('Ucard.CardVirtualCard.b9') }}</span>
  131. <el-form v-if="isOk" ref="receivedRef" :model="received" label-width="120PX">
  132. <el-form-item :label="$t('Ucard.Recharge.item7') + ':'">
  133. {{ received.receivedCurrency }}
  134. </el-form-item>
  135. <el-form-item :label="$t('Ucard.Recharge.item6') + ':'">
  136. {{ received.receivedAmount }}
  137. </el-form-item>
  138. <el-form-item :label="$t('Ucard.Recharge.item8') + ':'">
  139. {{ received.exchangeRate }}
  140. </el-form-item>
  141. </el-form>
  142. <span v-if="isOk" class="btn crm-cursor" @click="close">{{
  143. $t('Ucard.CardVirtualCard.b10')
  144. }}</span>
  145. </template>
  146. <template v-if="addType == '4'">
  147. <el-form ref="formRef" :rules="rules" :model="form" label-width="120PX">
  148. <el-form-item :label="$t('Ucard.CardKycAuth.item8') + ':'">
  149. <el-input v-model="form.cId" disabled placeholder=""></el-input>
  150. </el-form-item>
  151. <el-form-item :label="$t('Ucard.CardKycAuth.item9') + ':'">
  152. <el-input
  153. v-model="form.lastName"
  154. disabled
  155. style="width: 45%; display: inline-block"
  156. ></el-input>
  157. <el-input
  158. v-model="form.firstName"
  159. disabled
  160. style="width: 45%; display: inline-block; margin-left: 10px"
  161. ></el-input>
  162. </el-form-item>
  163. <el-form-item :label="$t('Ucard.CardKycAuth.item10') + ':'">
  164. <el-input v-model="form.email" disabled placeholder=""></el-input>
  165. </el-form-item>
  166. <el-form-item :label="$t('Ucard.CardKycAuth.item11') + ':'">
  167. <el-input v-model="form.mobile" disabled placeholder=""></el-input>
  168. </el-form-item>
  169. <el-form-item prop="status" :label="$t('Label.CheckResults') + ':'">
  170. <el-select
  171. v-model="form.status"
  172. class="crm_search_down"
  173. :placeholder="$t('Placeholder.Choose')"
  174. @change="cardNumberList"
  175. >
  176. <el-option :label="$t('Apply_info.VerifiedUser.Agree')" :value="2"></el-option>
  177. <el-option :label="$t('Apply_info.VerifiedUser.Refused')" :value="3"></el-option>
  178. </el-select>
  179. </el-form-item>
  180. <el-form-item v-if="form.status == 3" prop="approveDesc" :label="$t('Label.Descr') + ':'">
  181. <el-select
  182. v-model="form.approveDesc"
  183. filterable
  184. class="crm_search_down"
  185. :placeholder="$t('Placeholder.Choose')"
  186. allow-create
  187. >
  188. <el-option
  189. v-for="item in reasons"
  190. :key="item.id"
  191. :label="Session.Get('lang') == 'cn' ? item.content : item.enContent"
  192. :value="item.id"
  193. ></el-option>
  194. </el-select>
  195. </el-form-item>
  196. <el-form-item
  197. v-if="form.status == 2"
  198. prop="cardTypeId"
  199. :label="$t('Ucard.CardKycAuth.item1') + ':'"
  200. >
  201. <el-select
  202. v-model="form.cardTypeId"
  203. :placeholder="$t('Placeholder.Choose')"
  204. @change="changeCardType"
  205. >
  206. <el-option
  207. v-for="(item, index) in cardType"
  208. :key="index"
  209. :value="item.cardTypeId"
  210. :label="item.cardName"
  211. ></el-option>
  212. </el-select>
  213. </el-form-item>
  214. <el-form-item
  215. v-if="cardTypes && form.status == 2"
  216. prop="cardNumber"
  217. :label="$t('card.Form.f24') + ':'"
  218. >
  219. <el-select v-model="form.cardNumber" filterable :placeholder="$t('Placeholder.Choose')">
  220. <el-option
  221. v-for="(item, index) in cardNumbersList"
  222. :key="index"
  223. :value="item.cardNumber"
  224. :label="item.cardNumber"
  225. ></el-option>
  226. </el-select>
  227. </el-form-item>
  228. </el-form>
  229. <span class="btn crm-cursor" @click="confirm">{{ $t('Btn.Confirm') }}</span>
  230. </template>
  231. <template v-if="addType == '5'">
  232. <el-form ref="formRef" :rules="rules" :model="form" label-width="120PX">
  233. <el-form-item :label="$t('Ucard.CardKycAuth.item8') + ':'">
  234. <el-input v-model="form.cId" disabled placeholder=""></el-input>
  235. </el-form-item>
  236. <el-form-item :label="$t('Ucard.CardKycAuth.item9') + ':'">
  237. <el-input
  238. v-model="form.lastName"
  239. disabled
  240. style="width: 45%; display: inline-block"
  241. ></el-input>
  242. <el-input
  243. v-model="form.firstName"
  244. disabled
  245. style="width: 45%; display: inline-block; margin-left: 10px"
  246. ></el-input>
  247. </el-form-item>
  248. <el-form-item :label="$t('Ucard.CardKycAuth.item10') + ':'">
  249. <el-input v-model="form.email" disabled placeholder=""></el-input>
  250. </el-form-item>
  251. <el-form-item :label="$t('Ucard.CardKycAuth.item11') + ':'">
  252. <el-input v-model="form.mobile" disabled placeholder=""></el-input>
  253. </el-form-item>
  254. <el-form-item prop="status" :label="$t('Label.CheckResults') + ':'">
  255. <el-select
  256. v-model="form.status"
  257. class="crm_search_down"
  258. :placeholder="$t('Placeholder.Choose')"
  259. >
  260. <el-option :label="$t('Apply_info.VerifiedUser.Refused')" :value="3"></el-option>
  261. <el-option :label="$t('Apply_info.VerifiedUser.Agree')" :value="2"></el-option>
  262. </el-select>
  263. </el-form-item>
  264. <el-form-item v-if="form.status == 3" prop="approveDesc" :label="$t('Label.Descr') + ':'">
  265. <el-select
  266. v-model="form.approveDesc"
  267. filterable
  268. class="crm_search_down"
  269. :placeholder="$t('Placeholder.Choose')"
  270. allow-create
  271. >
  272. <el-option
  273. v-for="item in reasons"
  274. :key="item.id"
  275. :label="Session.Get('lang') == 'cn' ? item.content : item.enContent"
  276. :value="item.id"
  277. ></el-option>
  278. </el-select>
  279. </el-form-item>
  280. </el-form>
  281. <span class="btn crm-cursor" @click="confirm">{{ $t('Ucard.CardVirtualCard.b9') }}</span>
  282. </template>
  283. <template v-if="addType == '6'">
  284. <el-form ref="formRef" :rules="rules" :model="form" label-width="120PX">
  285. <el-form-item prop="cardNumber" :label="$t('Ucard.CardVirtualCard.item2') + ':'">
  286. <el-input
  287. v-model="form.cardNumber"
  288. disabled
  289. :placeholder="$t('Placeholder.Input')"
  290. ></el-input>
  291. </el-form-item>
  292. <el-form-item prop="pin" :label="$t('card.Form.f25') + ':'">
  293. <el-input v-model="form.pin" :placeholder="$t('Placeholder.Input')"></el-input>
  294. </el-form-item>
  295. </el-form>
  296. <span class="btn crm-cursor" @click="confirm">{{ $t('Btn.Confirm') }}</span>
  297. </template>
  298. <template v-if="addType == '7' || addType == '8'">
  299. <el-form ref="formRef" :rules="rules" :model="form" label-width="120PX">
  300. <el-form-item prop="cardNumber" :label="$t('Ucard.CardVirtualCard.item2') + ':'">
  301. <el-input
  302. v-model="form.cardNumber"
  303. disabled
  304. :placeholder="$t('Placeholder.Input')"
  305. ></el-input>
  306. </el-form-item>
  307. <el-form-item :label="$t('card.Form.f27') + ':'">
  308. <el-input v-model="form.clientRemark" :placeholder="$t('Placeholder.Input')"></el-input>
  309. </el-form-item>
  310. </el-form>
  311. <span class="btn crm-cursor" @click="confirm">{{ $t('Btn.Confirm') }}</span>
  312. </template>
  313. <template v-if="addType == '9'">
  314. <el-form ref="formRef" :rules="rules" :model="form" label-width="120PX">
  315. <el-form-item :label="$t('card.Form.f26') + ':'">
  316. <el-input v-model="activationCode" :placeholder="$t('Placeholder.Input')"></el-input>
  317. </el-form-item>
  318. </el-form>
  319. <span class="btn crm-cursor" @click="confirm">{{ $t('card.Form.f62') }}</span>
  320. </template>
  321. <template v-if="addType == '10'">
  322. <el-form ref="formRef" :rules="rules" :model="form" label-width="120PX">
  323. <el-form-item
  324. prop="cId
  325. "
  326. :label="$t('Label.CidAccount') + ':'"
  327. >
  328. <el-input v-model="form.cId" disabled :placeholder="$t('Placeholder.Input')"></el-input>
  329. </el-form-item>
  330. <el-form-item prop="lastName" :label="$t('Ucard.CardKycAuth.item4') + ':'">
  331. <el-input
  332. v-model="form.lastName"
  333. disabled
  334. :placeholder="$t('Placeholder.Input')"
  335. ></el-input>
  336. </el-form-item>
  337. <el-form-item prop="firstName" :label="$t('Ucard.CardKycAuth.item5') + ':'">
  338. <el-input
  339. v-model="form.firstName"
  340. disabled
  341. :placeholder="$t('Placeholder.Input')"
  342. ></el-input>
  343. </el-form-item>
  344. <el-form-item prop="mobile" :label="$t('Ucard.CardKycAuth.item2') + ':'">
  345. <el-input
  346. v-model="form.mobile"
  347. disabled
  348. :placeholder="$t('Placeholder.Input')"
  349. ></el-input>
  350. </el-form-item>
  351. <el-form-item prop="email" :label="$t('Label.Email') + ':'">
  352. <el-input v-model="form.email" disabled :placeholder="$t('Placeholder.Input')"></el-input>
  353. </el-form-item>
  354. <el-form-item prop="type" :label="$t('card.Form.f52') + ':'">
  355. <el-select v-model="form.type" :placeholder="$t('Placeholder.Choose')">
  356. <el-option :value="1" :label="$t('card.Form.f60')"></el-option>
  357. <el-option :value="2" :label="$t('card.Form.f61')"></el-option>
  358. </el-select>
  359. </el-form-item>
  360. <el-form-item prop="amount" :label="$t('Ucard.Recharge.item4') + ':'">
  361. <el-input v-model="form.amount" :placeholder="$t('Placeholder.Input')"></el-input>
  362. </el-form-item>
  363. </el-form>
  364. <span class="btn crm-cursor" @click="confirm">{{ $t('Btn.Confirm') }}</span>
  365. </template>
  366. <template v-if="addType == '11'">
  367. <el-form ref="formRef" :rules="rules" :model="form" label-width="120PX">
  368. <el-form-item :label="$t('Ucard.CardKycAuth.item8') + ':'">
  369. <el-input v-model="form.cId" disabled placeholder=""></el-input>
  370. </el-form-item>
  371. <el-form-item :label="$t('Ucard.CardKycAuth.item9') + ':'">
  372. <el-input
  373. v-model="form.lastName"
  374. disabled
  375. style="width: 45%; display: inline-block"
  376. ></el-input>
  377. <el-input
  378. v-model="form.firstName"
  379. disabled
  380. style="width: 45%; display: inline-block; margin-left: 10px"
  381. ></el-input>
  382. </el-form-item>
  383. <el-form-item :label="$t('Ucard.CardKycAuth.item10') + ':'">
  384. <el-input v-model="form.email" disabled placeholder=""></el-input>
  385. </el-form-item>
  386. <el-form-item :label="$t('Ucard.CardKycAuth.item11') + ':'">
  387. <el-input v-model="form.mobile" disabled placeholder=""></el-input>
  388. </el-form-item>
  389. <el-form-item prop="status" :label="$t('Label.CheckResults') + ':'">
  390. <el-select
  391. v-model="form.status"
  392. class="crm_search_down"
  393. :placeholder="$t('Placeholder.Choose')"
  394. >
  395. <el-option :label="$t('Apply_info.VerifiedUser.Agree')" :value="2"></el-option>
  396. <el-option :label="$t('Apply_info.VerifiedUser.Refused')" :value="3"></el-option>
  397. </el-select>
  398. </el-form-item>
  399. <el-form-item v-if="form.status == 3" prop="approveDesc" :label="$t('Label.Descr') + ':'">
  400. <el-select
  401. v-model="form.approveDesc"
  402. filterable
  403. class="crm_search_down"
  404. :placeholder="$t('Placeholder.Choose')"
  405. allow-create
  406. >
  407. <el-option
  408. v-for="item in reasons"
  409. :key="item.id"
  410. :label="Session.Get('lang') == 'cn' ? item.content : item.enContent"
  411. :value="item.id"
  412. ></el-option>
  413. </el-select>
  414. </el-form-item>
  415. </el-form>
  416. <span class="btn crm-cursor" @click="confirm">{{ $t('Btn.Confirm') }}</span>
  417. </template>
  418. <template v-if="addType == '12'">
  419. <el-form ref="formRef" :rules="rules" :model="form" label-width="120PX">
  420. <el-form-item :label="$t('Ucard.CardKycAuth.item8') + ':'">
  421. <el-input v-model="form.cId" disabled placeholder=""></el-input>
  422. </el-form-item>
  423. <el-form-item :label="$t('Ucard.CardKycAuth.item9') + ':'">
  424. <el-input
  425. v-model="form.lastName"
  426. disabled
  427. style="width: 45%; display: inline-block"
  428. ></el-input>
  429. <el-input
  430. v-model="form.firstName"
  431. disabled
  432. style="width: 45%; display: inline-block; margin-left: 10px"
  433. ></el-input>
  434. </el-form-item>
  435. <el-form-item :label="$t('Ucard.CardKycAuth.item10') + ':'">
  436. <el-input v-model="form.email" disabled placeholder=""></el-input>
  437. </el-form-item>
  438. <el-form-item :label="$t('Ucard.CardKycAuth.item11') + ':'">
  439. <el-input v-model="form.mobile" disabled placeholder=""></el-input>
  440. </el-form-item>
  441. <el-form-item prop="cardTypeId" :label="$t('Ucard.CardKycAuth.item1') + ':'">
  442. <el-select
  443. v-model="form.cardTypeId"
  444. :placeholder="$t('Placeholder.Choose')"
  445. @change="changeCardType"
  446. >
  447. <el-option
  448. v-for="(item, index) in cardType"
  449. :key="index"
  450. :value="item.cardTypeId"
  451. :label="item.cardName"
  452. ></el-option>
  453. </el-select>
  454. </el-form-item>
  455. <el-form-item prop="nationality" :label="$t('card.Form.f7')">
  456. <el-select v-model="form.nationality" filterable :placeholder="$t('card.vaildate.v6')">
  457. <el-option
  458. v-for="item in countryCityList"
  459. :key="item.id"
  460. :label="item.cnName"
  461. :value="item.code"
  462. />
  463. </el-select>
  464. </el-form-item>
  465. <el-form-item prop="town" :label="$t('card.Form.f9')">
  466. <el-select
  467. v-model="form.town"
  468. filterable
  469. :placeholder="$t('card.vaildate.v7')"
  470. :disabled="!form.nationality"
  471. >
  472. <el-option
  473. v-for="item in cityList"
  474. :key="item.id"
  475. :label="item.enName"
  476. :value="item.code"
  477. />
  478. </el-select>
  479. </el-form-item>
  480. <el-form-item prop="addressCn" :label="$t('card.Form.f10')">
  481. <el-input
  482. v-model="form.addressCn"
  483. :placeholder="$t('card.vaildate.v27')"
  484. @change="setAddress"
  485. />
  486. </el-form-item>
  487. <el-form-item prop="address" :label="$t('card.New.n11')">
  488. <el-input v-model="form.address" :placeholder="$t('card.vaildate.v27')" />
  489. </el-form-item>
  490. <el-form-item prop="postCode" :label="$t('card.Form.f11')">
  491. <el-input v-model="form.postCode" :placeholder="$t('card.vaildate.v8')" />
  492. </el-form-item>
  493. </el-form>
  494. <span class="btn crm-cursor" @click="confirm">{{ $t('Btn.Confirm') }}</span>
  495. </template>
  496. <template v-if="addType == '13'">
  497. <el-form ref="formRef" :rules="rules" :model="form" label-width="120PX">
  498. <el-form-item prop="cId" :label="$t('Label.CidAccount') + ':'">
  499. <el-input v-model="form.cId" disabled :placeholder="$t('Placeholder.Input')"></el-input>
  500. </el-form-item>
  501. <el-form-item prop="lastName" :label="$t('Ucard.CardKycAuth.item4') + ':'">
  502. <el-input
  503. v-model="form.lastName"
  504. disabled
  505. :placeholder="$t('Placeholder.Input')"
  506. ></el-input>
  507. </el-form-item>
  508. <el-form-item prop="firstName" :label="$t('Ucard.CardKycAuth.item5') + ':'">
  509. <el-input
  510. v-model="form.firstName"
  511. disabled
  512. :placeholder="$t('Placeholder.Input')"
  513. ></el-input>
  514. </el-form-item>
  515. <el-form-item prop="mobile" :label="$t('Ucard.CardKycAuth.item2') + ':'">
  516. <el-input
  517. v-model="form.mobile"
  518. disabled
  519. :placeholder="$t('Placeholder.Input')"
  520. ></el-input>
  521. </el-form-item>
  522. <el-form-item prop="email" :label="$t('Label.Email') + ':'">
  523. <el-input v-model="form.email" disabled :placeholder="$t('Placeholder.Input')"></el-input>
  524. </el-form-item>
  525. <el-form-item prop="cardNumber" :label="$t('Ucard.CardVirtualCard.item2') + ':'">
  526. <el-input
  527. v-model="form.cardNumber"
  528. disabled
  529. :placeholder="$t('Placeholder.Input')"
  530. ></el-input>
  531. </el-form-item>
  532. <el-form-item prop="amount" :label="$t('card.Form.f55') + ':'">
  533. <el-input v-model="form.amount" :placeholder="$t('Placeholder.Input')"></el-input>
  534. </el-form-item>
  535. </el-form>
  536. <span class="btn crm-cursor" @click="confirm">{{ $t('Btn.Confirm') }}</span>
  537. </template>
  538. </div>
  539. </template>
  540. <script lang="ts" setup>
  541. import { ref, reactive, computed, watch, onMounted, inject } from 'vue'
  542. import Config from '@/config'
  543. import Service from '@/service/ucard'
  544. import Service2 from '@/service/apply'
  545. import { pinyin } from 'pinyin-pro'
  546. import { useI18n } from 'vue-i18n'
  547. import { copyText } from '@/utils/untils'
  548. import { Close } from '@element-plus/icons-vue'
  549. const { Code, Host85 } = Config
  550. const Session = inject('session')
  551. const Pigeon = inject('pigeon')
  552. const { t } = useI18n()
  553. // Props
  554. const props = defineProps({
  555. dialogInfoTradingAdd: {
  556. type: Boolean,
  557. default: false,
  558. },
  559. addType: {
  560. default: '',
  561. },
  562. editor: {
  563. default: '',
  564. },
  565. myInfo: {
  566. default: '',
  567. },
  568. formList: {
  569. default: '',
  570. },
  571. })
  572. // Emits
  573. const emit = defineEmits(['closeAdd', 'confirmToReload'])
  574. // 响应式数据
  575. const form = ref({})
  576. const formRef = ref()
  577. const receivedRef = ref()
  578. const cardType = ref([])
  579. const cardTypes = ref(false)
  580. const isOk = ref(false)
  581. const currencyList = ref([])
  582. const imgUrl = ref(Host85)
  583. const pagerInfo = reactive({ row: 10, current: 1, pageTotal: 0, rowTotal: 0 })
  584. const received = reactive({ receivedCurrency: '', receivedAmount: '', exchangeRate: '' })
  585. const activationCode = ref('')
  586. const reasons = ref([])
  587. const countryCityList = ref([])
  588. const cityList = ref([])
  589. const cardNumbersList = ref([])
  590. // 计算属性
  591. const AccessToken = computed(() => ({
  592. 'Access-Token': sessionStorage.getItem('access_token'),
  593. }))
  594. const user = computed(() => {
  595. try {
  596. return JSON.parse(Session.Get('user', true) || '{}')
  597. } catch (error) {
  598. console.error('Error parsing user data:', error)
  599. return {}
  600. }
  601. })
  602. // 验证规则
  603. const rules = reactive({
  604. signaturePhoto: [
  605. {
  606. required: true,
  607. message: t('vaildate.img.empty'),
  608. trigger: 'change',
  609. },
  610. ],
  611. currency: [
  612. {
  613. required: true,
  614. message: t('Placeholder.Choose'),
  615. trigger: 'change',
  616. },
  617. ],
  618. cardNumber: [
  619. {
  620. required: true,
  621. message: t('Placeholder.Input'),
  622. trigger: 'blur',
  623. },
  624. ],
  625. activeCode: [
  626. {
  627. validator: (rule, value, callback) => {
  628. if (/^\d*$/.test(value)) {
  629. callback()
  630. } else {
  631. callback(new Error(t('card.vaildate.v24')))
  632. }
  633. },
  634. trigger: 'blur',
  635. required: true,
  636. },
  637. ],
  638. pin: [
  639. {
  640. required: true,
  641. message: t('Placeholder.Input'),
  642. trigger: 'blur',
  643. },
  644. ],
  645. uniqueId: [
  646. {
  647. required: true,
  648. message: t('Placeholder.Input'),
  649. trigger: 'blur',
  650. },
  651. ],
  652. amount: [
  653. {
  654. required: true,
  655. message: t('Placeholder.Input'),
  656. trigger: 'blur',
  657. },
  658. ],
  659. cardTypeId: [
  660. {
  661. required: true,
  662. message: t('vaildate.select.empty'),
  663. trigger: 'blur',
  664. },
  665. ],
  666. cardNo: [
  667. {
  668. required: true,
  669. message: t('Placeholder.Input'),
  670. trigger: 'blur',
  671. },
  672. ],
  673. status: [
  674. {
  675. required: true,
  676. message: t('vaildate.select.empty'),
  677. trigger: 'blur',
  678. },
  679. ],
  680. type: [
  681. {
  682. required: true,
  683. message: t('vaildate.select.empty'),
  684. trigger: 'blur',
  685. },
  686. ],
  687. approveStatus: [
  688. {
  689. required: true,
  690. message: t('vaildate.select.empty'),
  691. trigger: 'blur',
  692. },
  693. ],
  694. approveDesc: [
  695. {
  696. required: true,
  697. message: t('vaildate.select.empty'),
  698. trigger: 'blur',
  699. },
  700. ],
  701. nationality: [
  702. {
  703. required: true,
  704. message: t('card.vaildate.v6'),
  705. trigger: 'change',
  706. },
  707. ],
  708. country: [
  709. {
  710. required: true,
  711. message: t('card.vaildate.v6'),
  712. trigger: 'change',
  713. },
  714. ],
  715. town: [
  716. {
  717. required: true,
  718. message: t('card.vaildate.v7'),
  719. trigger: 'change',
  720. },
  721. ],
  722. address: [
  723. {
  724. required: true,
  725. message: t('card.vaildate.v27'),
  726. trigger: 'blur',
  727. },
  728. {
  729. validator: (rule, value, callback) => {
  730. const regex = /[\u4e00-\u9fa5]/
  731. if (value.length < 2 || value.length > 40) {
  732. callback(new Error(t('card.New.n1')))
  733. } else if (regex.test(value)) {
  734. callback(new Error(t('card.New.n1')))
  735. } else {
  736. callback()
  737. }
  738. },
  739. trigger: 'blur',
  740. },
  741. ],
  742. addressCn: [
  743. {
  744. required: true,
  745. message: t('card.vaildate.v27'),
  746. trigger: 'blur',
  747. },
  748. ],
  749. postCode: [
  750. {
  751. required: true,
  752. message: t('card.vaildate.v8'),
  753. trigger: 'blur',
  754. },
  755. {
  756. validator: (rule, value, callback) => {
  757. const regex = /^[a-zA-Z0-9]{1,15}$/
  758. if (!regex.test(value)) {
  759. callback(new Error(t('card.New.n2')))
  760. } else {
  761. callback()
  762. }
  763. },
  764. trigger: 'blur',
  765. },
  766. ],
  767. })
  768. // 方法
  769. const getCountryListForSelect = async () => {
  770. const res = await Service.ucardCountryCity({ code: '' })
  771. if (res.code === 200) {
  772. countryCityList.value = res.data || []
  773. }
  774. }
  775. const cardNumberList = async () => {
  776. const res = await Service.cardNumberDropdown({ status: 1 })
  777. if (res.code === 200) {
  778. cardNumbersList.value = res.data || []
  779. }
  780. }
  781. const getCityListForSelect = async (countryCode) => {
  782. const res = await Service.ucardCountryCity({ code: countryCode })
  783. if (res.code === 200) {
  784. cityList.value = res.data || []
  785. }
  786. }
  787. const setAddress = (e) => {
  788. const containsChinese = (str) => /[\u4e00-\u9fa5]/.test(str)
  789. if (containsChinese(e)) {
  790. form.value.address = formatText(e)
  791. } else {
  792. form.value.address = e
  793. }
  794. }
  795. const formatText = (input) => {
  796. const chinesePattern = /[\u4e00-\u9fa5]+/g
  797. let formattedText = input.replace(chinesePattern, (match) => {
  798. return ' ' + pinyin(match, { toneType: 'none', type: 'capitalize' }) + ' '
  799. })
  800. return formattedText
  801. }
  802. // 银行卡激活
  803. const ucardActivate = async () => {
  804. const res = await Service.ucardActivate({
  805. ...form.value,
  806. cId: user.value.cId,
  807. })
  808. if (res.code == Code.StatusOK) {
  809. Pigeon.MessageOK(t('Msg.Success1'))
  810. confirmToReload()
  811. } else {
  812. Pigeon.MessageError(res.msg)
  813. }
  814. }
  815. // 冻结卡片
  816. const ucardFreeze = async () => {
  817. const res = await Service.ucardFreeze({ ...form.value, cId: user.value.cId })
  818. if (res.code == Code.StatusOK) {
  819. Pigeon.MessageOK(t('Msg.Success4'))
  820. confirmToReload()
  821. } else {
  822. Pigeon.MessageError(res.msg)
  823. }
  824. }
  825. // 解冻卡片
  826. const ucardUnfreeze = async () => {
  827. const res = await Service.ucardUnfreeze({
  828. ...form.value,
  829. cId: user.value.cId,
  830. })
  831. if (res.code == Code.StatusOK) {
  832. Pigeon.MessageOK(t('Msg.Success5'))
  833. confirmToReload()
  834. } else {
  835. Pigeon.MessageError(res.msg)
  836. }
  837. }
  838. // 银行卡充值
  839. const ucardRecharge = async () => {
  840. form.value.amount = Number(form.value.amount)
  841. if (form.value.amount <= 0) {
  842. Pigeon.MessageError(t('card.vaildate.v34'))
  843. return
  844. }
  845. const res = await Service.ucardRecharge({
  846. ...form.value,
  847. cId: user.value.cId,
  848. })
  849. if (res.code == Code.StatusOK) {
  850. Pigeon.MessageOK(t('Msg.Success2'))
  851. confirmToReload()
  852. } else {
  853. Pigeon.MessageError(res.msg)
  854. }
  855. }
  856. const ucardRithdraw = async () => {
  857. form.value.amount = Number(form.value.amount)
  858. if (form.value.amount <= 0) {
  859. Pigeon.MessageError(t('card.vaildate.v34'))
  860. return
  861. }
  862. const res = await Service.ucardRithdraw({
  863. ...form.value,
  864. cId: user.value.cId,
  865. })
  866. if (res.code == Code.StatusOK) {
  867. Pigeon.MessageOK(t('Msg.Success2'))
  868. confirmToReload()
  869. } else {
  870. Pigeon.MessageError(res.msg)
  871. }
  872. }
  873. // 获取币种
  874. const cardTypesList = async () => {
  875. const res = await Service.cardTypesList({
  876. cardTypeId: form.value.cardTypeId,
  877. page: {
  878. current: pagerInfo.current,
  879. row: pagerInfo.row,
  880. },
  881. })
  882. if (res.code == Code.StatusOK) {
  883. cardType.value = res.data
  884. currencyList.value = res.data[0]?.rechargeCurrencyInfoList || []
  885. } else {
  886. Pigeon.MessageError(res.msg)
  887. }
  888. }
  889. const changeCardType = (e) => {
  890. const res = cardType.value.find((item) => item.cardTypeId == e)
  891. if (res?.type == 'Physical') {
  892. cardTypes.value = true
  893. } else {
  894. cardTypes.value = false
  895. }
  896. }
  897. // 查询充值预估到账金额
  898. const ucardRechargeEstimate = async ({ cardTypeId, currency, amount }) => {
  899. const res = await Service.ucardRechargeEstimate({
  900. cardTypeId,
  901. currency,
  902. amount,
  903. })
  904. if (res.code == Code.StatusOK) {
  905. Pigeon.MessageOK(t('Msg.SearchSuccess'))
  906. isOk.value = true
  907. Object.assign(received, res.data)
  908. } else {
  909. isOk.value = false
  910. Pigeon.MessageError(res.msg)
  911. }
  912. }
  913. //关闭
  914. const close = () => {
  915. emit('closeAdd', false)
  916. }
  917. //提交成功后回调
  918. const confirmToReload = () => {
  919. emit('confirmToReload', true)
  920. }
  921. //提交
  922. const confirm = async () => {
  923. const valid = await formRef.value.validate()
  924. if (valid) {
  925. toConfirm()
  926. }
  927. }
  928. const toConfirm = () => {
  929. if (form.value.cardNumber) {
  930. form.value.cardNumber = form.value.cardNumber.replace(/\s+/g, '')
  931. }
  932. switch (props.addType) {
  933. case '6':
  934. ucardResetPassword()
  935. break
  936. case '3':
  937. ucardRechargeEstimate({ ...form.value, cId: user.value.cId })
  938. break
  939. case '1':
  940. ucardActivate()
  941. break
  942. case '2':
  943. ucardRecharge()
  944. break
  945. case '4':
  946. if (form.value.status == 3) {
  947. applyApprove()
  948. } else {
  949. numberVerify()
  950. }
  951. break
  952. case '5':
  953. kycSubmit()
  954. break
  955. case '7':
  956. ucardFreeze()
  957. break
  958. case '8':
  959. ucardUnfreeze()
  960. break
  961. case '9':
  962. copyText(activationCode.value)
  963. break
  964. case '10':
  965. balanceUpdate()
  966. break
  967. case '11':
  968. rechargeApprove()
  969. break
  970. case '12':
  971. ucardApply()
  972. break
  973. case '13':
  974. ucardRithdraw()
  975. break
  976. }
  977. }
  978. // 申请审批
  979. const applyApprove = async () => {
  980. const res = await Service.applyApprove({
  981. cardTypeId: form.value.cardTypeId,
  982. cardNumber: form.value.cardNumber,
  983. uniqueId: form.value.uniqueId,
  984. approveDesc: form.value.approveDesc,
  985. approveStatus: form.value.status,
  986. id: form.value.id,
  987. cId: user.value.cId,
  988. })
  989. if (res.code == Code.StatusOK) {
  990. if (form.value.status == 3) {
  991. Pigeon.MessageOK(t('Msg.Success11'))
  992. } else {
  993. Pigeon.MessageOK(t('Msg.Success17'))
  994. }
  995. confirmToReload()
  996. } else {
  997. Pigeon.MessageError(res.msg)
  998. }
  999. }
  1000. // 申请开卡
  1001. const ucardApply = async () => {
  1002. await Service.addressUpdate({
  1003. ...form.value,
  1004. mailingAddress: form.value.address,
  1005. mailingAddressCn: form.value.addressCn,
  1006. })
  1007. const res = await Service.ucardApply({
  1008. ...form.value,
  1009. cId: user.value.cId,
  1010. })
  1011. if (res.code == Code.StatusOK) {
  1012. Pigeon.MessageOK(t('Msg.Success7'))
  1013. confirmToReload()
  1014. } else {
  1015. Pigeon.MessageError(res.msg)
  1016. }
  1017. }
  1018. // 审核充值
  1019. const rechargeApprove = async () => {
  1020. const res = await Service.rechargeApprove({
  1021. cardTypeId: form.value.cardTypeId,
  1022. cardNumber: form.value.cardNumber,
  1023. uniqueId: form.value.uniqueId,
  1024. approveDesc: form.value.approveDesc,
  1025. approveStatus: form.value.status,
  1026. ids: [form.value.id],
  1027. cId: user.value.cId,
  1028. })
  1029. if (res.code == Code.StatusOK) {
  1030. Pigeon.MessageOK(t('Msg.Success12'))
  1031. confirmToReload()
  1032. } else {
  1033. Pigeon.MessageError(res.msg)
  1034. }
  1035. }
  1036. // 找回密码
  1037. const ucardResetPassword = async () => {
  1038. const res = await Service.ucardResetPassword({
  1039. ...form.value,
  1040. cId: user.value.cId,
  1041. })
  1042. if (res.code == Code.StatusOK) {
  1043. Pigeon.MessageOK(t('Msg.Success3'))
  1044. confirmToReload()
  1045. } else {
  1046. Pigeon.MessageError(res.msg)
  1047. }
  1048. }
  1049. // 审核KYC认证
  1050. const kycSubmit = async () => {
  1051. const res = await Service.kycSubmit({ ...form.value, cId: user.value.cId })
  1052. if (res.code == Code.StatusOK) {
  1053. Pigeon.MessageOK(t('Msg.Success13'))
  1054. confirmToReload()
  1055. } else {
  1056. Pigeon.MessageError(res.msg)
  1057. }
  1058. }
  1059. // 卡是否可用
  1060. const numberVerify = async () => {
  1061. const res = await Service.numberVerify({
  1062. cardNumber: form.value.cardNumber,
  1063. })
  1064. if (res.code == Code.StatusOK) {
  1065. Pigeon.MessageConfirm(
  1066. t('card.vaildate.v41'),
  1067. t('Msg.SystemPrompt'),
  1068. t('Btn.Confirm'),
  1069. t('Btn.Cancel'),
  1070. applyApprove,
  1071. function () {}
  1072. )
  1073. } else {
  1074. Pigeon.MessageError(res.msg)
  1075. }
  1076. }
  1077. //获取原因列表
  1078. const searchReasons = async () => {
  1079. const res = await Service2.reasonsRefusalList({ type: 15 })
  1080. if (res.code == Code.StatusOK) {
  1081. reasons.value = res.data == null ? {} : res.data
  1082. } else {
  1083. Pigeon.MessageError(res.msg)
  1084. }
  1085. }
  1086. //获取激活码
  1087. const getActivationCode = async () => {
  1088. const res = await Service.getActivationCode({
  1089. cardNo: form.value.cardNo,
  1090. cId: user.value.cId,
  1091. })
  1092. if (res.code == Code.StatusOK) {
  1093. activationCode.value = res.data.values
  1094. } else {
  1095. Pigeon.MessageError(res.msg)
  1096. }
  1097. }
  1098. // 调整余额
  1099. const balanceUpdate = async () => {
  1100. form.value.amount = Number(form.value.amount)
  1101. if (form.value.amount <= 0) {
  1102. Pigeon.MessageError(t('card.vaildate.v34'))
  1103. return
  1104. }
  1105. const res = await Service.balanceUpdate({
  1106. amount: form.value.amount,
  1107. cId: form.value.cId,
  1108. uniqueId: form.value.uniqueId,
  1109. type: form.value.type,
  1110. })
  1111. if (res.code == Code.StatusOK) {
  1112. Pigeon.MessageOK(t('Msg.Success14'))
  1113. confirmToReload()
  1114. } else {
  1115. Pigeon.MessageError(res.msg)
  1116. }
  1117. }
  1118. // 生命周期
  1119. onMounted(() => {
  1120. cardNumberList()
  1121. })
  1122. // 监听器
  1123. watch(
  1124. () => props.formList,
  1125. (formData) => {
  1126. form.value = {}
  1127. isOk.value = false
  1128. Object.assign(received, {
  1129. receivedCurrency: '',
  1130. receivedAmount: '',
  1131. exchangeRate: '',
  1132. })
  1133. form.value = {
  1134. ...formData,
  1135. signaturePhoto: '',
  1136. currency: '',
  1137. clientRemark: '',
  1138. activePhoto: '',
  1139. status: '',
  1140. }
  1141. if (props.addType == '9' && props.dialogInfoTradingAdd) {
  1142. getActivationCode()
  1143. }
  1144. }
  1145. )
  1146. watch(
  1147. () => props.addType,
  1148. (type) => {
  1149. if (type == '3' || type == '2' || type == '4' || type == '12') {
  1150. cardTypesList()
  1151. }
  1152. if (type == '5' || type == '11' || type == '4') {
  1153. searchReasons()
  1154. }
  1155. if (type == '12') {
  1156. getCountryListForSelect()
  1157. if (props.formList.nationality) {
  1158. getCityListForSelect(props.formList.country)
  1159. }
  1160. }
  1161. if (type == '4') {
  1162. if (props.formList.type == 'Physical') {
  1163. cardTypes.value = true
  1164. } else {
  1165. cardTypes.value = false
  1166. }
  1167. }
  1168. }
  1169. )
  1170. </script>
  1171. <style lang="scss" scoped>
  1172. .imgs {
  1173. width: 100%;
  1174. height: 100%;
  1175. position: relative;
  1176. .el-upload-list__item-actions {
  1177. width: 100%;
  1178. height: 100%;
  1179. position: absolute;
  1180. top: 0;
  1181. left: 0;
  1182. }
  1183. }
  1184. .dispute-submit-container {
  1185. padding: 20px;
  1186. }
  1187. .section-title {
  1188. font-size: 18px;
  1189. font-weight: bold;
  1190. margin-bottom: 20px;
  1191. color: #303133;
  1192. }
  1193. .section-divider {
  1194. margin: 30px 0 15px;
  1195. border-top: 1px solid #ebeef5;
  1196. padding-top: 15px;
  1197. }
  1198. .subsection-title {
  1199. font-size: 16px;
  1200. color: #606266;
  1201. margin-bottom: 10px;
  1202. }
  1203. .form-tip {
  1204. font-size: 12px;
  1205. color: #909399;
  1206. margin-bottom: 15px;
  1207. }
  1208. .note {
  1209. font-size: 12px;
  1210. color: #909399;
  1211. margin-left: 10px;
  1212. }
  1213. .info-item,
  1214. .file-item {
  1215. position: relative;
  1216. padding: 20px;
  1217. margin-bottom: 15px;
  1218. border: 1px dashed #e4e7ed;
  1219. border-radius: 4px;
  1220. }
  1221. .remove-btn {
  1222. position: absolute;
  1223. top: 10px;
  1224. right: 10px;
  1225. }
  1226. .add-btn-container {
  1227. margin-bottom: 20px;
  1228. }
  1229. .upload-file {
  1230. width: 148px;
  1231. height: 148px;
  1232. line-height: 148px;
  1233. }
  1234. .upload-file .el-upload {
  1235. width: 148px;
  1236. height: 148px;
  1237. line-height: 148px;
  1238. }
  1239. .form-actions {
  1240. margin-top: 30px;
  1241. }
  1242. </style>