pledge.vue 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  1. <template>
  2. <view class="all">
  3. <!-- <view class="navList flex">
  4. <view v-for="(item, index) in navList" :key="index" class="navItem"
  5. :class="{ activeItem: tabCurrentIndex === index,tip:index == 0 }" @click="tabClick(index)">{{ item }}
  6. </view>
  7. </view> -->
  8. <!-- <view style="padding-top: 44px;" v-if="tabCurrentIndex == 0"> -->
  9. <view style="padding-top: 0;">
  10. <view class="listBox">
  11. <view class="titleTetx">数量</view>
  12. <view class="flex listTpl">
  13. <input type="number" class="inputBox" v-model="number" placeholder="请输入数量" />
  14. <view class="flex_item">
  15. <view class="listTip">USDT</view>
  16. <view class="listAll" @click="number=money">全部</view>
  17. </view>
  18. </view>
  19. <view class="flex tipBox">
  20. <view class="tip1">可用余额{{money}}USDT</view>
  21. <view class="tip1">限额{{baseData.min_sell}}到{{baseData.max_sell}}个</view>
  22. </view>
  23. </view>
  24. <view class="listBox" style="padding-top: 0rpx;">
  25. <view class="listTpl">
  26. <input type="number" class="inputBox" v-model="price" placeholder="请输入单价" />
  27. </view>
  28. <view class="flex tipBox">
  29. <view class="tip1">单价不得大于参考汇率</view>
  30. </view>
  31. </view>
  32. <view class="submission">
  33. <button class="golden" type="golden" hover-class="none" @click="submission">一键卖币</button>
  34. </view>
  35. <view class="tips">*参考汇率{{baseData.us_price}}</view>
  36. </view>
  37. <u-action-sheet :show="showBank" :actions="bankList" title="请选择银行卡"
  38. @close="showBank = false" @select="bankSelect">
  39. </u-action-sheet>
  40. </view>
  41. </template>
  42. <script>
  43. import {
  44. getsell,
  45. sellPush,
  46. sellBuy
  47. } from '@/api/game.js';
  48. import {
  49. getIndex
  50. } from '@/api/index.js';
  51. import {
  52. mapState,
  53. } from 'vuex';
  54. import {
  55. qianBao
  56. } from '@/api/wallet.js';
  57. import {
  58. getBank
  59. } from '@/api/set.js';
  60. import dayjs from '@/libs/dayjs/dayjs.min.js';
  61. export default {
  62. computed: {
  63. ...mapState('user', ['hasLogin','userInfo'])
  64. },
  65. filters: {
  66. dateFormat: function(value) {
  67. return dayjs(value * 1000).format('YYYY/MM/DD HH:mm');
  68. }
  69. },
  70. data() {
  71. return {
  72. tabIndex: 0,
  73. navList: ['支付宝','微信'],
  74. number: '',
  75. money:'',
  76. price: '',
  77. page: 1,
  78. limit: 10,
  79. list: [],
  80. loadingType: 'more',
  81. baseData:{
  82. min_sell:'',
  83. max_sell:''
  84. },
  85. loaded:false,
  86. showBank:false,
  87. bankList:[],
  88. bank_id:'',
  89. bank:{
  90. id:'',
  91. bank_real_name:'',
  92. bank_code:'',
  93. bank:'',
  94. bank_name:'',
  95. },
  96. weixin:{
  97. id:'',
  98. name:'',
  99. account:'',
  100. },
  101. zfb:{
  102. id:'',
  103. name:'',
  104. account:'',
  105. }
  106. }
  107. },
  108. onNavigationBarButtonTap(res) {
  109. uni.navigateTo({
  110. url: '/pages/index/order'
  111. })
  112. },
  113. onShow() {
  114. this.init();
  115. },
  116. onLoad() {
  117. this.getIndex()
  118. },
  119. methods: {
  120. qianBao() {
  121. const that = this;
  122. qianBao().then((res) => {
  123. that.money = +res.data.like_usdt;
  124. })
  125. },
  126. getBank() {
  127. const obj = this;
  128. getBank().then((res) => {
  129. let data = res.data.list
  130. let reg = /^(.{4})(?:\d+)(.{4})$/
  131. if(data.length > 0){
  132. data.forEach(item => {
  133. if(item.type == 'bank'){
  134. item.bank_code1 = item.bank_code.replace(reg, "**** $2")
  135. item.name = item.bank+' '+item.bank_code1
  136. }else{
  137. item.name = item.name+' '+item.phone
  138. }
  139. })
  140. obj.bankList = data
  141. obj.bank = obj.bankList[0]
  142. obj.bank_id = obj.bank.id
  143. obj.navList.push('银行卡')
  144. }
  145. })
  146. },
  147. bankSelect(e){
  148. const obj = this;
  149. this.bank_id = e.id
  150. obj.showBank = false
  151. uni.showModal({
  152. title: '请输入支付密码',
  153. editable:true,
  154. success: res => {
  155. if(res.confirm){
  156. sellPush({
  157. type: 'USDT',
  158. num: obj.number,
  159. price: obj.price,
  160. phone: obj.userInfo.phone || '',
  161. trade_psw: res.content,
  162. sell_type: 'money',
  163. bank_id:obj.bank_id
  164. }).then((
  165. data
  166. ) => {
  167. obj.qianBao();
  168. uni.showToast({
  169. title: data.msg,
  170. icon:'none'
  171. });
  172. })
  173. .catch(e => {
  174. console.log(e);
  175. });
  176. }
  177. },
  178. fail: () => {},
  179. complete: () => {}
  180. });
  181. },
  182. getIndex(){
  183. getIndex({})
  184. .then(({
  185. data
  186. }) => {
  187. this.baseData = data
  188. console.log(data);
  189. })
  190. .catch(e => {});
  191. },
  192. // 购买订单
  193. commitorder(item) {
  194. let obj = this
  195. uni.showModal({
  196. title: '请输入支付密码',
  197. editable:true,
  198. success: res => {
  199. if (res.confirm) {
  200. if (res.content) {
  201. uni.showLoading({
  202. title: '支付中。。。',
  203. mask: true
  204. });
  205. sellBuy({
  206. id: item.id,
  207. trade_psw: res.content,
  208. }).then((
  209. data
  210. ) => {
  211. uni.hideLoading();
  212. uni.showModal({
  213. title: '提示',
  214. content: data.msg,
  215. showCancel: false,
  216. });
  217. setTimeout(function () {
  218. obj.page = 1;
  219. obj.list = [];
  220. obj.loadingType = 'more';
  221. obj.loadData();
  222. }, 1000);
  223. })
  224. .catch(e => {
  225. uni.hideLoading()
  226. console.log(e);
  227. });
  228. }
  229. }
  230. },
  231. });
  232. },
  233. // 挂出
  234. submission() {
  235. let obj = this;
  236. if(!obj.number){
  237. uni.showToast({
  238. title: '请输入数量',
  239. icon:'none'
  240. });
  241. return
  242. }
  243. if(!obj.price){
  244. uni.showToast({
  245. title: '请输入单价',
  246. icon:'none'
  247. });
  248. return
  249. }
  250. if(obj.price > obj.baseData.us_price){
  251. uni.showToast({
  252. title: '单价不得大于当前汇率',
  253. icon:'none'
  254. });
  255. return
  256. }
  257. this.showBank = true
  258. },
  259. init() {
  260. this.page = 1;
  261. this.list = [];
  262. this.loadingType = 'more';
  263. // this.loadData();
  264. this.qianBao();
  265. this.getBank();
  266. },
  267. tabClick(index) {
  268. this.tabIndex = index
  269. },
  270. async loadData(source) {
  271. const that = this;
  272. //这里是将订单挂载到tab列表下
  273. let navItem = that;
  274. if (source === 'tabChange' && navItem.loaded === true) {
  275. //tab切换只有第一次需要加载数据
  276. return;
  277. }
  278. if (navItem.loadingType === 'loading') {
  279. //防止重复加载
  280. return;
  281. }
  282. if (navItem.loadingType === 'noMore') {
  283. //防止重复加载
  284. return;
  285. }
  286. // 修改当前对象状态为加载中
  287. navItem.loadingType = 'loading';
  288. getsell({
  289. page: navItem.page,
  290. limit: navItem.limit
  291. })
  292. .then(({
  293. data
  294. }) => {
  295. // 保存我的总金额
  296. let arr = data.list.map(e => {
  297. e.num = e.num * 1;
  298. e.price = e.price * 1;
  299. return e;
  300. });
  301. navItem.list = navItem.list.concat(arr);
  302. if (navItem.limit == data.length) {
  303. navItem.page++;
  304. //判断是否还有数据, 有改为 more, 没有改为noMore
  305. navItem.loadingType = 'more';
  306. return;
  307. } else {
  308. //判断是否还有数据, 有改为 more, 没有改为noMore
  309. navItem.loadingType = 'noMore';
  310. }
  311. uni.hideLoading();
  312. that.loaded = true;
  313. })
  314. .catch(e => {
  315. console.log(e);
  316. });
  317. },
  318. }
  319. };
  320. </script>
  321. <style lang="scss">
  322. .all {
  323. width: 750rpx;
  324. height: 100%;
  325. background-color: #051137;
  326. padding-top: var(--status-bar-height);
  327. padding-bottom: 40rpx;
  328. color: #fff;
  329. }
  330. .listBox {
  331. padding: 62rpx 32rpx;
  332. .titleTetx {
  333. font-weight: bold;
  334. font-size: 24rpx;
  335. color: #FFFFFF;
  336. padding-bottom: 25rpx;
  337. }
  338. .tipBox {
  339. padding-top: 15rpx;
  340. font-size: 24rpx;
  341. }
  342. }
  343. .listTpl {
  344. border-bottom: 1rpx solid #6A7288;
  345. padding-bottom: 25rpx;
  346. .inputBox {
  347. font-size: 35rpx;
  348. color: #FFFFFF;
  349. }
  350. .listTip {}
  351. .listAll {
  352. padding-left: 30rpx;
  353. font-size: 24rpx;
  354. color: #0C5AFA;
  355. }
  356. }
  357. .submission {
  358. padding: 80rpx 25rpx;
  359. padding-bottom: 25rpx;
  360. .golden {
  361. background: #0C5AFA;
  362. color: #ffffff;
  363. }
  364. }
  365. .tips {
  366. text-align: center;
  367. }
  368. .listItemBox {
  369. padding-top: 44px;
  370. .listItem {
  371. padding: 34rpx 34rpx;
  372. border-bottom: 1rpx solid #6A7288;
  373. .name {
  374. font-family: PingFang SC;
  375. font-weight: bold;
  376. font-size: 30rpx;
  377. color: #FFFFFF;
  378. padding-left: 25rpx;
  379. }
  380. .itemTpl {
  381. font-family: PingFang SC;
  382. font-weight: bold;
  383. font-size: 36rpx;
  384. color: #0C5AFA;
  385. padding-top: 25rpx;
  386. }
  387. .itemTip {
  388. .tipText {
  389. font-family: PingFang SC;
  390. font-weight: 500;
  391. font-size: 24rpx;
  392. color: #C1C1C1;
  393. padding-top: 15rpx;
  394. }
  395. .tipBtn {
  396. font-family: PingFang SC;
  397. font-weight: bold;
  398. font-size: 24rpx;
  399. color: #FFFFFF;
  400. background: linear-gradient(90deg, #0C5AFA, #1356FF);
  401. border-radius: 7rpx;
  402. padding: 15rpx 35rpx;
  403. }
  404. }
  405. }
  406. }
  407. .changeBank{
  408. text-align: right;
  409. margin-top: 25rpx;
  410. padding-right: 35rpx;
  411. .btnChange{
  412. background: #0C5AFA;
  413. color: #fff;
  414. display: inline-block;
  415. font-size: 24rpx;
  416. padding: 15rpx 25rpx;
  417. border-radius: 15rpx;
  418. }
  419. }
  420. .login_text {
  421. width: 100%;
  422. // padding: 25rpx 0rpx;
  423. font-size: 28rpx !important;
  424. padding: 0rpx 25rpx;
  425. }
  426. .login_input {
  427. border-bottom: 1px solid #464755;
  428. padding: 35rpx;
  429. }
  430. </style>