| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- <template>
- <app-view class="swap-detail">
- <template #header>
- <app-navbar :title="item.goodsgroupname + '/' + item.goodscode">
- <template #right>
- <div class="button-more" @click="onListing">
- <span>挂牌</span>
- </div>
- </template>
- </app-navbar>
- </template>
- <div class="swap-detail__quote" v-if="quote">
- <ul class="price">
- <li :class="quote.lastColor">{{ quote.last }}</li>
- <li :class="quote.lastColor">{{ handleNumberValue(quote.rise.toFixed(quote.decimalplace)) }}</li>
- <li :class="quote.lastColor">{{ parsePercent(quote.change) }}</li>
- </ul>
- <ul class="time">
- <li>{{ formatDate(quote.lasttime, 'MM-DD HH:mm:ss') }}</li>
- </ul>
- </div>
- <app-pull-refresh ref="pullRefreshRef" v-model:loading="loading" v-model:error="error" v-model:pageIndex="pageIndex"
- :page-count="pageCount" @refresh="onTabChange">
- <Tabs v-model:active="tabIndex" @click="onChange">
- <Tab title="买大厅" />
- <Tab title="卖大厅" />
- </Tabs>
- <div class="trade-section sell" v-if="dataList.length">
- <app-list :columns="columns" :data-list="dataList">
- <template #username="{ row }">
- <span>{{ row.userid }}/{{ row.username }}</span>
- </template>
- <template #operate="{ row }">
- <Button size="small" type="primary" round @click="onDelisting(row)">{{ tabIndex === 0 ? '卖出' : '买入'
- }}</Button>
- </template>
- </app-list>
- </div>
- </app-pull-refresh>
- <component ref="componentRef" :is="componentMap.get(componentId)" v-bind="{ selectedRow, tabIndex, item }"
- @closed="closeComponent" v-if="componentId" />
- </app-view>
- </template>
- <script lang="ts" setup>
- import { shallowRef, onMounted, onUnmounted, defineAsyncComponent } from 'vue'
- import { Tab, Tabs, Button, showToast } from 'vant'
- import { useRequest } from '@/hooks/request'
- import { useNavigation } from '@/hooks/navigation'
- import { useComponent } from '@/hooks/component'
- import { queryTjmdTradeOrderDetail } from '@/services/api/swap'
- import { useLoginStore } from '@/stores'
- import { useFuturesStore } from '@/stores'
- import { parsePercent, handleNumberValue, formatDate } from '@/filters'
- import quoteSocket from '@/services/websocket/quote'
- import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
- import AppList from '@mobile/components/base/list/index.vue'
- const componentMap = new Map<string, unknown>([
- ['delisting', defineAsyncComponent(() => import('./components/delisting/Index.vue'))],
- ['listing', defineAsyncComponent(() => import('./components/listing/Index.vue'))],
- ])
- const pullRefreshRef = shallowRef()
- const loginStore = useLoginStore()
- const { getParamString } = useNavigation()
- const { componentRef, componentId, openComponent, closeComponent } = useComponent(() => {
- pullRefreshRef.value?.refresh()
- })
- const futuresStore = useFuturesStore()
- const item: Model.QuoteGoodsListRsp = JSON.parse(getParamString('item')?.toString() || '{}')
- const tabIndex = shallowRef(0)
- const selectedRow = shallowRef<Model.TjmdTradeOrderDetailRsp>()
- const error = shallowRef(false)
- const dataList = shallowRef<Model.TjmdTradeOrderDetailRsp[]>([])
- const quote = futuresStore.getQuoteInfo(item.refgoodscode)
- const subscribe = quoteSocket.addSubscribe([item.refgoodscode])
- const { pageIndex, loading, run, pageCount } = useRequest(queryTjmdTradeOrderDetail, {
- params: {
- pagesize: 20,
- goodsid: item.goodsid,
- buyorsell: tabIndex.value
- },
- onSuccess: (res) => {
- if (pageIndex.value === 1) {
- dataList.value = []
- }
- dataList.value.push(...res.data)
- },
- onError: () => {
- error.value = true
- }
- })
- const onTabChange = () => {
- run({
- buyorsell: tabIndex.value,
- })
- }
- const onChange = () => {
- /// 重置为1
- pageIndex.value = 1
- run({
- buyorsell: tabIndex.value,
- page: 1
- })
- }
- const columns: Model.TableColumn[] = [
- { prop: 'orderprice', label: '价格' },
- { prop: 'orderqty', label: '数量' },
- { prop: 'username', label: '挂牌方' },
- { prop: 'operate', label: '摘牌' },
- ]
- const onDelisting = (row: Model.TjmdTradeOrderDetailRsp) => {
- selectedRow.value = row
- /// 不能与自己成交
- if (row.userid === loginStore.userId) {
- showToast('不能与自己成交')
- return
- }
- openComponent('delisting')
- }
- const onListing = () => {
- openComponent('listing')
- }
- onMounted(() => subscribe.start())
- onUnmounted(() => subscribe.stop())
- </script>
- <style lang="less">
- @import './index.less';
- </style>
|