contract-history.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <template>
  2. <v-paging :ajax="getHistoryEntrust" class="h-max" ref="vPag">
  3. <template #box="list">
  4. <van-empty v-if="!$list(list).length" description="" />
  5. <div
  6. class="item bg-panel-4 m-md rounded-sm box-shadow"
  7. v-for="item in $list(list)"
  8. :key="item.id"
  9. @click="showDetail(item)"
  10. >
  11. <div
  12. class="head d-flex align-center border-b p-x-md p-y-xs justify-between"
  13. >
  14. <div class="d-flex">
  15. <div>
  16. <div class="color-light fn-20">{{ item.symbol }}/USDT</div>
  17. <div class="fn-10">{{ item.created_at }}</div>
  18. </div>
  19. </div>
  20. <div class="d-flex">
  21. <span>{{ item.lever_rate }}X</span>
  22. </div>
  23. </div>
  24. <div class="p-x-md p-y-xs">
  25. <div class="row d-flex m-y-mini justify-between">
  26. <div class="label fn-sm">{{$t('contract.a6')}}</div>
  27. <div v-if="item.side==1&&item.order_type==1" class="color-light color-success">{{cals(item.side,item.order_type)}}</div>
  28. <div v-else-if="item.side==2&&item.order_type==1" class="color-light color-danger">{{cals(item.side,item.order_type)}}</div>
  29. <div v-else class="color-light">{{cals(item.side,item.order_type)}}</div>
  30. </div>
  31. <div class="row d-flex m-y-mini justify-between">
  32. <div class="label fn-sm">{{$t('contract.a7')}}/{{$t('contract.a8')}}</div>
  33. <div class="color-light">{{item.traded_amount}}/{{item.amount}}</div>
  34. </div>
  35. <div class="row d-flex m-y-mini justify-between" >
  36. <div class="label fn-sm" v-if="item.profit">{{$t('contract.i1')}}/{{$t('contract.b0')}}</div>
  37. <div class="label fn-sm" v-if="!item.profit && item.side == 1">{{$t('exchange.c3')}}{{$t('contract.d1') }}</div>
  38. <div class="label fn-sm" v-if="!item.profit && item.side == 2">{{$t('contract.c2')}}{{$t('contract.d1') }}</div>
  39. <div class="color-light" v-if="item.side == 1 && item.profit">{{(item.avg_price*1 + (item.profit*1/(item.traded_amount*1))).toFixed(2)||'--'}}/{{item.avg_price||'--'}}</div>
  40. <div class="color-light" v-if="item.side == 2 && item.profit">{{(item.avg_price*1 - (item.profit*1/(item.traded_amount*1))).toFixed(2)||'--'}}/{{item.avg_price||'--'}}</div>
  41. <div class="color-light" v-if="!item.profit">{{item.avg_price||'--'}}</div>
  42. </div>
  43. <div class="row d-flex m-y-mini justify-between">
  44. <div class="label fn-sm">{{$t('contract.b1')}}</div>
  45. <div class="color-light">{{item.margin*1}}</div>
  46. </div>
  47. <div class="row d-flex m-y-mini justify-between">
  48. <div class="label fn-sm">{{$t('contract.b2')}}</div>
  49. <div class="color-light">{{item.fee*1}}</div>
  50. </div>
  51. <div class="row d-flex m-y-mini justify-between">
  52. <div class="label fn-sm">{{$t('contract.c7')}}</div>
  53. <div class="color-light">{{item.profit*1||'--'}}</div>
  54. </div>
  55. <div class="row d-flex m-y-mini justify-between">
  56. <div class="label fn-sm">{{$t('contract.b3')}}</div>
  57. <div class="color-light">{{ status(item.status) }}</div>
  58. </div>
  59. <div class="row d-flex m-y-mini justify-between" v-if="item.order_type==2">
  60. <div class="label fn-sm">{{$t('contract.b4')}}</div>
  61. <div class="color-light">
  62. <v-button type="green-plain" class="m-l-xs rounded-xs" size="mini" plain
  63. :to="{path:'/pages/income/index',query:{
  64. symbol:item.symbol,
  65. side:item.side,
  66. profitRate:item.profit/item.margin*100+'',
  67. lever_rate:item.lever_rate,
  68. avg_price:item.avg_price,
  69. pair_name:item.symbol+'/USDT',
  70. entrust_id:item.id,
  71. label:cals(item.side,item.order_type)
  72. }}"
  73. >{{$t('contract.c8')}}</v-button>
  74. </div>
  75. </div>
  76. </div>
  77. </div>
  78. <van-popup
  79. v-model="show"
  80. closeable
  81. close-on-popstate
  82. position="bottom"
  83. :style="{ height: '80%', width: '100%' }"
  84. >
  85. <div class="bg-panel-1 h-max" @touchstart.stop @touchmove.stop>
  86. <div class="fn-center title-box p-md bg-panel-4 fn-lg">
  87. {{$t('contract.c9')}}
  88. </div>
  89. <van-empty v-if="!order_details.length" :description="$t('contract.d0')" />
  90. <div class="item bg-panel-4 m-md rounded-sm p-md" v-for="item in order_details" :key="item.id">
  91. <div class="row d-flex m-y-xs justify-between">
  92. <div class="label fn-sm">{{$t('contract.d1')}}</div>
  93. <div class="color-light">{{item.unit_price}}</div>
  94. </div>
  95. <div class="row d-flex m-y-xs justify-between">
  96. <div class="label fn-sm">{{$t('contract.d2')}}</div>
  97. <div class="color-light">{{item.trade_amount}}</div>
  98. </div>
  99. <div class="row d-flex m-y-xs justify-between">
  100. <div class="label fn-sm">{{$t('contract.b2')}}</div>
  101. <div class="color-light">{{item.trade_buy_fee}}</div>
  102. </div>
  103. <div class="row d-flex m-y-xs justify-between">
  104. <div class="label fn-sm">{{$t('contract.d3')}}</div>
  105. <div class="color-light">{{item.created_at}}</div>
  106. </div>
  107. </div>
  108. </div>
  109. </van-popup>
  110. </template>
  111. </v-paging>
  112. </template>
  113. <script>
  114. import Contract from "@/api/contract";
  115. export default {
  116. name: "contract-entrustment",
  117. data() {
  118. return {
  119. show:false,
  120. activeItem:{},
  121. order_details:[]
  122. };
  123. },
  124. methods: {
  125. getHistoryEntrust: Contract.getHistoryEntrust,
  126. status(status) {
  127. switch (status) {
  128. case 0:
  129. return this.$t('contract.b6');
  130. case 1:
  131. return this.$t('contract.b7');
  132. case 2:
  133. return this.$t('contract.b9');
  134. case 3:
  135. return this.$t('contract.b9');
  136. }
  137. },
  138. cals(side, order_type) {
  139. // side - order_type
  140. let map = {
  141. "1-1": this.$t('contract.c0'),
  142. "1-2": this.$t('contract.c1'),
  143. "2-1": this.$t('contract.c2'),
  144. "2-2": this.$t('contract.c3'),
  145. };
  146. return map[`${side}-${order_type}`];
  147. },
  148. showDetail(item){
  149. Contract.getEntrustDealList({
  150. entrust_id:item.id,
  151. symbol:item.symbol
  152. },{loading:true}).then(res=>{
  153. this.order_details= res.data
  154. this.show = true
  155. })
  156. }
  157. },
  158. };
  159. </script>
  160. <style lang="scss" scoped>
  161. .m-y-mini{
  162. margin-top: 5px;
  163. margin-bottom: 5px;
  164. }
  165. </style>