index.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <!-- 商品详情 -->
  2. <template>
  3. <teleport to="#appPageTeleport">
  4. <app-view class="g-view-detail">
  5. <template #header>
  6. <div class="g-view-detail__header">
  7. <div class="iconbar">
  8. <el-button type="primary" icon="ArrowLeftBold" @click="emit('closed')" link />
  9. </div>
  10. <ul class="breadcrumb" v-if="quote">
  11. <li>
  12. <span>{{ goodsdisplay(quote.goodscode) }}</span>
  13. </li>
  14. </ul>
  15. <div class="buttonbar">
  16. <template v-if="market">
  17. <span style="color: #3a87f7;padding:0 10px;">
  18. {{ t('quote.marketstatus') }}{{ [2, 6].includes(market.runstatus) ? getRunStatusName(market.runstatus) : t('quote.unopening') }}
  19. </span>
  20. </template>
  21. <slot name="headerRight"></slot>
  22. <template v-if="![50, 99, 10, 53, 54].includes(quote?.trademode ?? 0)">
  23. <el-button type="primary" @click="active = false" v-if="active">{{ t('quote.buysellhall') }}</el-button>
  24. <el-button type="primary" @click="active = true" v-else>{{ t('operation.chart') }}</el-button>
  25. </template>
  26. </div>
  27. </div>
  28. </template>
  29. <Chart class="g-view-detail__container" v-bind="{ goodsCode }" v-if="active" />
  30. <Order class="g-view-detail__container" v-bind="{ goodsId }" v-else />
  31. </app-view>
  32. </teleport>
  33. </template>
  34. <script lang="ts" setup>
  35. import { onUnmounted, shallowRef, computed, defineAsyncComponent } from 'vue'
  36. import { timerTask } from '@/utils/timer'
  37. import { getRunStatusName } from '@/constants/market'
  38. import { useRequest } from '@/hooks/request'
  39. import { queryMarketRun } from '@/services/api/market'
  40. import { useFuturesStore } from '@/stores'
  41. import { i18n } from '@/stores'
  42. const { t } = i18n.global
  43. const Chart = defineAsyncComponent(() => import('./chart/index.vue'))
  44. const Order = defineAsyncComponent(() => import('./order/index.vue'))
  45. const props = defineProps({
  46. goodsId: {
  47. type: Number,
  48. required: true
  49. },
  50. })
  51. const emit = defineEmits(['closed'])
  52. const futuresStore = useFuturesStore()
  53. const { goodsdisplay } = useFuturesStore()
  54. const quote = futuresStore.getGoodsQuote(props.goodsId)
  55. const active = shallowRef(true)
  56. const goodsCode = computed(() => quote.value?.goodscode ?? '')
  57. const { data: market, run } = useRequest(queryMarketRun, {
  58. defaultParams: {
  59. marketID: quote.value?.marketid
  60. },
  61. onSuccess: (res) => {
  62. market.value = res.data[0]
  63. // 每1分钟轮询刷新
  64. timerTask.setTimeout(() => run(), 60 * 1000, 'getMarketRun')
  65. }
  66. })
  67. onUnmounted(() => timerTask.clearTimeout('getMarketRun'))
  68. </script>