PendingOrderList.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <script setup>
  2. import { onMounted, reactive, ref } from "vue";
  3. import sHeader from "@/components/SimpleHeader";
  4. import { postPagePendList } from "@/service/pendingOrder";
  5. import { showFailToast } from "vant";
  6. import { getLoginUser, styleUrl } from "@/common/js/utils";
  7. import dateUtil from "@/utils/dateUtil";
  8. const typeTexts = ['未知类型', '买', '卖'];
  9. const showTypeText = (typeValue) => {
  10. return typeTexts[typeValue] || typeTexts[0];
  11. };
  12. const showStatusText = (statusVal) => {
  13. const statusMap = {
  14. 0: '过期',
  15. 1: '生效',
  16. 2: '撤单',
  17. 3: '全部成交',
  18. 4: '部分成交',
  19. }
  20. return statusMap[statusVal] || '未知状态';
  21. }
  22. const user = getLoginUser();
  23. const loading = ref(false); // 加载状态
  24. const error = ref(false); // 错误状态
  25. const finished = ref(false); // 结束翻页状态
  26. const pendingOrderList = ref([]); // 列表集合
  27. const pendingOrderTotal = ref(0); // 列表总数
  28. let searchParams = reactive({
  29. current: 1, // 当前页,默认第一页
  30. size: 10, // 页大小,默认10条
  31. });
  32. // 查询列表
  33. const searchGetList = () => {
  34. pendingOrderList.value = [];
  35. searchParams.current = 1;
  36. getList();
  37. };
  38. // 滚动加载
  39. const onLoad = () => {
  40. if (!finished.value) {
  41. searchParams.current++;
  42. getList();
  43. }
  44. };
  45. // 获取所有挂单列表
  46. const getList = async () => {
  47. finished.value = false;
  48. const params = Object.assign({}, searchParams);
  49. const { data } = await postPagePendList(params);
  50. if (data.code === "00000") {
  51. if (searchParams.current === 0) {
  52. pendingOrderList.value = [];
  53. }
  54. // 列表值叠加
  55. pendingOrderList.value = pendingOrderList.value.concat(
  56. data.data.records
  57. );
  58. pendingOrderTotal.value = data.data.total;
  59. if (pendingOrderList.value.length === data.data.total) {
  60. console.log("object", pendingOrderTotal.value);
  61. finished.value = true;
  62. }
  63. loading.value = false;
  64. } else {
  65. showFailToast(data.message);
  66. }
  67. };
  68. const showDateTime = (date) => {
  69. return date
  70. ? dateUtil.formateDate(new Date(date), "yyyy-MM-dd hh:mm:ss")
  71. : "";
  72. };
  73. // 是否有操作的权限
  74. const isOper = ref(true);
  75. // 初始化页面获取列表
  76. onMounted(async () => {
  77. // 加载样式
  78. styleUrl('pendingOrderList');
  79. if (user) {
  80. // searchParams.adminId = user.id;
  81. searchGetList();
  82. // 如果不是admin账号,不能有操作权限
  83. if (user.userName != 'admin') {
  84. isOper.value = false;
  85. }
  86. }
  87. });
  88. </script>
  89. <template>
  90. <!-- 挂单匹配列表 -->
  91. <div class="pendingOrderList flex-col">
  92. <s-header name="挂单匹配" :noback="false"></s-header>
  93. <div class="pendingOrderBox flex-col">
  94. <van-list v-model:loading="loading" v-model:error="error" :error-text="$t('common.reqFailClkReload')"
  95. :finished="finished" :finished-text="$t('common.noMoreTxt')" offset="300" :immediate-check="false"
  96. @load="onLoad">
  97. <div class="searchRow flex-row justify-between">
  98. <div class="flex-col">
  99. <div class="flex-row justify-between bd3">
  100. <!-- 图标 -->
  101. <!-- <div class="flex-col outer4 proportionIcon"></div> -->
  102. <span class="flex-col txt2">{{ $t("taskMessage.total")
  103. }}<span class="discountNumber">{{ pendingOrderTotal }}</span>{{
  104. $t("taskMessage.recordsInTotal") }}</span>
  105. </div>
  106. </div>
  107. </div>
  108. <div class="listBox">
  109. <div v-for="(item) in pendingOrderList" :key="item.id" class="listItem">
  110. <div class="itemBox">
  111. <div class="itemRow">
  112. <span class="itemTitle">挂单价格:&nbsp;</span>{{
  113. item.price }}
  114. </div>
  115. <div class="itemRow">
  116. <span class="itemTitle">委托数量:&nbsp;</span>{{
  117. item.entrustNumber }}
  118. </div>
  119. <div class="itemRow">
  120. <span class="itemTitle">挂单类型:&nbsp;</span>{{
  121. showTypeText(item.type) }}
  122. </div>
  123. <!-- if 0,1 不显示其他 -->
  124. <!-- if 2 显示撤单时间 -->
  125. <div v-if="item.status === '2'" class="itemRow">
  126. <span class="itemTitle">撤单时间:&nbsp;</span>{{
  127. item.cancelTime }}
  128. </div>
  129. <!-- if 3,4 显示成交数量 -->
  130. <div v-if="item.status === '3' || item.status === '4'" class="itemRow">
  131. <span class="itemTitle">成交数量:&nbsp;</span>{{
  132. item.tradeNumber }}
  133. </div>
  134. <!-- 创建时间 -->
  135. <div class="itemRow">
  136. <span class="itemTitle">创建时间:&nbsp;</span>{{
  137. showDateTime(item.createTime) }}
  138. </div>
  139. <!-- 卖家确认时间 -->
  140. <div class="itemRow" v-if="item.status === '1'">
  141. <span class="itemTitle">卖家确认时间:&nbsp;</span>{{
  142. showDateTime(item.sellerConfirmTime)
  143. }}
  144. </div>
  145. <!-- 状态:0过期,1生效,2撤单,3全部成交,4部分成交 -->
  146. <div class="itemRow" style="display: flex; justify-content: flex-end">
  147. <!-- 0过期 -->
  148. <span v-if="item.status === '0'" style="color: #B7B7B7">{{
  149. showStatusText(item.status)
  150. }}</span>
  151. <!-- 1生效 -->
  152. <span v-if="item.status === '1'" style="color: #4BC38B">{{
  153. showStatusText(item.status)
  154. }}</span>
  155. <!-- 2撤单 -->
  156. <span v-if="item.status === '2'" style="color: #D8553B">{{
  157. showStatusText(item.status)
  158. }}</span>
  159. <!-- 3全部成交 -->
  160. <span v-if="item.status === '3'" style="color: #ff0000">{{
  161. showStatusText(item.status)
  162. }}</span>
  163. <!-- 4部分成交 -->
  164. <span v-if="item.status === '4'" style="color: #9C3FC4">{{
  165. showStatusText(item.status)
  166. }}</span>
  167. </div>
  168. </div>
  169. </div>
  170. </div>
  171. </van-list>
  172. </div>
  173. </div>
  174. </template>
  175. <style lang="less" scoped>
  176. @import "../../common/style/common.less";
  177. </style>