li.shaoyi 1 ヶ月 前
コミット
0876434dcc
34 ファイル変更892 行追加637 行削除
  1. 22 17
      src/packages/digital/views/contract/components/account/index.vue
  2. 16 21
      src/packages/digital/views/contract/components/order/cancel/index.vue
  3. 91 0
      src/packages/digital/views/contract/components/order/history/index.vue
  4. 36 197
      src/packages/digital/views/contract/components/order/index.vue
  5. 116 0
      src/packages/digital/views/contract/components/order/list/index.vue
  6. 13 10
      src/packages/digital/views/contract/components/position/close/index.vue
  7. 93 0
      src/packages/digital/views/contract/components/position/history/index.vue
  8. 37 129
      src/packages/digital/views/contract/components/position/index.vue
  9. 131 0
      src/packages/digital/views/contract/components/position/list/index.vue
  10. 31 35
      src/packages/digital/views/contract/components/position/market-close/index.vue
  11. 11 3
      src/packages/digital/views/contract/components/statement/history/index.vue
  12. 2 2
      src/packages/digital/views/contract/components/statement/index.vue
  13. 11 3
      src/packages/digital/views/contract/components/statement/list/index.vue
  14. 99 0
      src/packages/digital/views/contract/components/trade/history/index.vue
  15. 39 194
      src/packages/digital/views/contract/components/trade/index.vue
  16. 98 0
      src/packages/digital/views/contract/components/trade/list/index.vue
  17. 3 3
      src/packages/digital/views/contract/detail/index.vue
  18. 1 1
      src/packages/digital/views/contract/goods/chart/index.vue
  19. 5 5
      src/packages/digital/views/contract/goods/detail/index.vue
  20. 1 1
      src/packages/digital/views/spot/components/account/activate/index.vue
  21. 1 1
      src/packages/digital/views/spot/components/account/index.vue
  22. 1 1
      src/packages/digital/views/spot/components/order/cancel/index.vue
  23. 1 1
      src/packages/digital/views/spot/components/order/index.vue
  24. 1 1
      src/packages/digital/views/spot/components/statement/index.vue
  25. 1 1
      src/packages/digital/views/spot/components/trade/index.vue
  26. 1 1
      src/packages/digital/views/spot/goods/chart/index.vue
  27. 1 1
      src/packages/digital/views/spot/goods/detail/index.vue
  28. 1 1
      src/packages/digital/views/wallet/components/record/index.vue
  29. 1 1
      src/packages/digital/views/wallet/components/spot/composables.ts
  30. 6 1
      src/stores/modules/account.ts
  31. 3 3
      src/stores/modules/futures.ts
  32. 7 0
      src/stores/modules/position.ts
  33. 5 1
      src/types/model/bank.d.ts
  34. 6 2
      src/types/model/order.d.ts

+ 22 - 17
src/packages/digital/views/contract/components/account/index.vue

@@ -1,48 +1,56 @@
 <template>
     <div class="g-detail-table">
-        <table cellspacing="0" cellpadding="0">
+        <table cellspacing="0" cellpadding="0" v-for="(item, index) in accountList" :key="index">
             <thead>
                 <tr>
                     <th colspan="3">
-                        <span>资金({{ taAccount.accountid }})</span>
+                        <span>资金({{ item.accountid }})</span>
                     </th>
                 </tr>
             </thead>
-            <tbody @click="navigateTo('contract-detail', taAccount.accountid)">
+            <tbody>
                 <tr>
                     <td colspan="2">
                         <span class="text-small">账户权益(USDT)</span>
-                        <span>{{ formatDecimal(taAccount.balance) }}</span>
+                        <span>{{ formatDecimal(item.balance) }}</span>
                     </td>
                     <td>
                         <span class="text-small">浮动盈亏</span>
-                        <span>{{ formatDecimal(taAccount.closepl) }}</span>
+                        <span>{{ formatDecimal(item.closepl) }}</span>
                     </td>
                 </tr>
                 <tr>
                     <td>
                         <span class="text-small">可用(USDT)</span>
-                        <span>{{ formatDecimal(taAccount.currentbalance) }}</span>
+                        <span>{{ formatDecimal(item.currentbalance) }}</span>
                     </td>
                     <td>
                         <span class="text-small">占用(USDT)</span>
-                        <span>{{ formatDecimal(taAccount.usedmargin) }}</span>
+                        <span>{{ formatDecimal(item.usedmargin) }}</span>
                     </td>
                     <td>
                         <span class="text-small">冻结(USDT)</span>
-                        <span>{{ formatDecimal(taAccount.freezeMargin) }}</span>
+                        <span>{{ formatDecimal(item.freezeMargin) }}</span>
                     </td>
                 </tr>
             </tbody>
+            <tfoot>
+                <tr>
+                    <td colspan="3">
+                        <Button size="small" @click="navigateTo('wallet-transfer', item.accountid)">划转</Button>
+                    </td>
+                </tr>
+            </tfoot>
         </table>
     </div>
 </template>
 
 <script lang="ts" setup>
-import { useNavigation } from '@mobile/router/navigation'
-import { useAccountStore, useFuturesStore } from '@/stores'
 import { computed } from 'vue'
+import { Button } from 'vant'
 import { formatDecimal } from '@/filters'
+import { useNavigation } from '@mobile/router/navigation'
+import { useAccountStore, useFuturesStore } from '@/stores'
 
 const props = defineProps({
     goodsId: {
@@ -50,13 +58,12 @@ const props = defineProps({
     }
 })
 
-const goods = useFuturesStore().getGoods(props.goodsId ?? 0)
+const futuresStore = useFuturesStore()
 const accountStore = useAccountStore()
-const { accountComputedList } = accountStore.$toRefs()
 
-const taAccount = computed(() => {
-    return accountComputedList.value.find( e => e.currencyid === goods?.currencyid)
-})
+const { currencyid = 0, goodscurrencyid = 0 } = futuresStore.getQuoteItem({ goodsid: props.goodsId }) ?? {}
+
+const accountList = computed(() => accountStore.filterAccountsByCurrencyId(currencyid, goodscurrencyid))
 
 const { router } = useNavigation()
 
@@ -64,10 +71,8 @@ const navigateTo = (name: string, accountId: number) => {
     router.push({
         name,
         query: {
-            goodsId: props.goodsId,
             id: accountId
         }
     })
 }
-
 </script>

+ 16 - 21
src/packages/digital/views/contract/components/order/cancel/index.vue

@@ -1,6 +1,6 @@
 <template>
-    <Dialog v-model:show="showDialog" title="提示" show-cancel-button :before-close="onBeforeClose" @closed="onClosed" @confirm="onCancelSumit">
-        <span>是否撤销?</span>
+    <Dialog v-model:show="showDialog" show-cancel-button :before-close="onBeforeClose" @closed="onClosed"
+        message="是否撤销?">
     </Dialog>
 </template>
 
@@ -20,36 +20,31 @@ const props = defineProps({
 })
 
 const emit = defineEmits(['closed'])
-const { global: { t }} = i18n
+const { global: { t } } = i18n
 
 const { cancelSubmit, formData } = useCancelOrder()
-const pullRefreshRef = shallowRef()
 const showDialog = shallowRef(false)
 const refresh = shallowRef(false) // 是否刷新父组件数据
 
 const onBeforeClose = (action: string) => {
     if (action === 'confirm') {
-        refresh.value = true
-        showDialog.value = false
+        fullloading((hideLoading) => {
+            formData.Header = { MarketID: props.selectedRow.marketid, GoodsID: props.selectedRow.goodsid }
+            formData.OldOrderId = handleRequestBigNumber(props.selectedRow.orderid)
+
+            cancelSubmit().then(() => {
+                hideLoading(t('order.pricingorder.tips2'))
+                refresh.value = true
+            }).catch((err) => {
+                hideLoading(err, 'fail')
+            }).finally(() => {
+                showDialog.value = false
+            })
+        })
     }
     return true
 }
 
-const onCancelSumit = () => {
-    formData.Header = { MarketID: props.selectedRow.marketid, GoodsID: props.selectedRow.goodsid }
-    formData.OldOrderId = handleRequestBigNumber(props.selectedRow.orderid)
-
-    /// loding....
-    fullloading((hideLoading) => {
-        cancelSubmit().then(() => {
-            hideLoading(t('order.pricingorder.tips2'))
-            pullRefreshRef.value?.refresh()
-        }).catch((err) => {
-            hideLoading(err, 'fail')
-        })
-    })
-}
-
 const onClosed = () => {
     emit('closed', refresh.value)
 }

+ 91 - 0
src/packages/digital/views/contract/components/order/history/index.vue

@@ -0,0 +1,91 @@
+<template>
+    <app-pull-refresh ref="pullRefreshRef" class="g-detail-table" v-model:loading="loading"
+        v-model:pageIndex="pageIndex" :page-count="pageCount" @refresh="onRefresh">
+        <table cellspacing="0" cellpadding="0" v-for="(item, index) in dataList" :key="index">
+            <tbody>
+                <tr>
+                    <th>
+                        <span>{{ item.goodscode }}/{{ item.goodsname }}</span>
+                        <time class="text-small">{{ formatDate(item.ordertime) }}</time>
+                    </th>
+                    <th>
+                        <span>{{ getBuyOrSellName(item.buyorsell) }}</span>
+                    </th>
+                </tr>
+                <tr>
+                    <td>
+                        <span class="text-small">委托单号</span>
+                        <span>{{ item.orderid }}</span>
+                    </td>
+                    <td>
+                        <span class="text-small">委托状态</span>
+                        <span>{{ getWRTradeOrderStatusName(item.orderstatus) }}</span>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <span class="text-small">委托价格({{ enumName(item.goodsid) }})</span>
+                        <span>{{ formatDecimal(item.orderprice, item.decimalplace) }}</span>
+                    </td>
+                    <td>
+                        <span class="text-small">委托数量({{ item.goodscode }})</span>
+                        <span>{{ item.orderqty }}</span>
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+    </app-pull-refresh>
+</template>
+
+<script lang="ts" setup>
+import { PropType, shallowRef } from 'vue'
+import { formatDate, formatDecimal } from '@/filters'
+import { getBuyOrSellName, getWRTradeOrderStatusName, getGoodsCurrencyItemName } from '@/constants/order'
+import { useRequest } from '@/hooks/request'
+import { queryHisTradeOrderDetail } from '@/services/api/order'
+import { useFuturesStore } from '@/stores'
+import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
+
+const props = defineProps({
+    params: {
+        type: Object as PropType<Model.HisTradeOrderDetailReq>,
+        required: true
+    }
+})
+
+const futuresStore = useFuturesStore()
+const pullRefreshRef = shallowRef()
+const dataList = shallowRef<Model.HisTradeOrderDetailRsp[]>([])
+
+const { loading, pageIndex, pageCount, run } = useRequest(queryHisTradeOrderDetail, {
+    manual: true,
+    defaultParams: {
+        pagesize: 20,
+        tradeMode: '10'
+    },
+    onSuccess: (res) => {
+        if (pageIndex.value === 1) {
+            dataList.value = []
+        }
+        dataList.value.push(...res.data)
+    }
+})
+
+const enumName = (goodsid: number) => {
+    const item = futuresStore.getQuoteItem({ goodsid })
+    return item ? getGoodsCurrencyItemName(item.currencyid) : 0
+}
+
+const onRefresh = () => {
+    if (props.params.startDate || props.params.endDate) {
+        run(props.params)
+    }
+}
+
+// 暴露组件属性给父组件调用
+defineExpose({
+    refresh: () => {
+        pullRefreshRef.value?.refresh()
+    }
+})
+</script>

+ 36 - 197
src/packages/digital/views/contract/components/order/index.vue

@@ -1,214 +1,53 @@
 <template>
-    <table cellspacing="0" cellpadding="0" v-if="!goodsId">
-        <tbody>
-            <tr>
-                <td>
-                    <app-select v-model="dateType" :options="options" />
-                </td>
-            </tr>
-             <tr v-if="dateType != 0">
-                <td>
-                    <app-calendar :default-date="[currentDate]" @confirm="onConfirm" :title="$t('common.calendar')" :confirm-text="$t('operation.confirm')" />
-                </td>
-            </tr>
-        </tbody>
-    </table>
-    <app-pull-refresh v-if="dateType === 0" ref="pullRefreshRef" v-model:loading="loading" v-model:error="error" v-model:pageIndex="pageIndex"
-        :page-count="pageCount" @refresh="run">
-        <div class="g-detail-table"> 
-            <table cellspacing="0" cellpadding="0" v-for="(item, index) in dataList" :key="index">
-                <tbody>
-                    <tr>
-                        <th>
-                            <span>{{ item.goodscode }}/ {{ item.goodsname }}</span>
-                            <time class="text-small">{{ formatDate(item.ordertime) }}</time>
-                        </th>
-                        <th>
-                            <span>{{ getBuyOrSellName(item.buyorsell) }}</span>
-                        </th>
-                    </tr>
-                    <tr>
-                        <td>
-                            <span class="text-small">委托单号</span>
-                            <span>{{ item.orderid }}</span>
-                        </td>
-                        <td>
-                            <span class="text-small">委托状态</span>
-                            <span>{{ getWRTradeOrderStatusName(item.orderstatus) }}</span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <span class="text-small">委托价格({{ enumName(item.goodsid) }})</span>
-                            <span>{{ formatDecimal(item.orderprice, item.decimalplace) }}</span>
-                        </td>
-                        <td>
-                            <span class="text-small">委托数量({{ item.goodscode }})</span>
-                            <span>{{ item.orderqty }}</span>
-                        </td>
-                    </tr>
-                </tbody>
-                <tfoot>
-                    <tr>
-                        <td colspan="2">
-                            <Button size="small" @click="cancelOrder(item)">撤销</Button>
-                        </td>
-                    </tr>
-                </tfoot>
-            </table>
-        </div>
-    </app-pull-refresh>
-    <app-pull-refresh v-else ref="pullRefreshRef" v-model:loading="hisLoading" v-model:error="error" v-model:pageIndex="hisPageIndex"
-        :page-count="hisPageCount" @refresh="onRefresh">
-        <div class="g-detail-table"> 
-            <table cellspacing="0" cellpadding="0" v-for="(item, index) in dataList" :key="index">
-                <tbody>
-                    <tr>
-                        <th>
-                            <span>{{ item.goodscode }}/ {{ item.goodsname }}</span>
-                            <time class="text-small">{{ formatDate(item.ordertime) }}</time>
-                        </th>
-                        <th>
-                            <span>{{ getBuyOrSellName(item.buyorsell) }}</span>
-                        </th>
-                    </tr>
-                    <tr>
-                        <td>
-                            <span class="text-small">委托单号</span>
-                            <span>{{ item.orderid }}</span>
-                        </td>
-                        <td>
-                            <span class="text-small">委托状态</span>
-                            <span>{{ getWRTradeOrderStatusName(item.orderstatus) }}</span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <span class="text-small">委托价格({{ enumName(item.goodsid) }})</span>
-                            <span>{{ formatDecimal(item.orderprice, item.decimalplace) }}</span>
-                        </td>
-                        <td>
-                            <span class="text-small">委托数量({{ item.goodscode }})</span>
-                            <span>{{ item.orderqty }}</span>
-                        </td>
-                    </tr>
-                </tbody>
-                <tfoot>
-                    <tr>
-                        <td colspan="2">
-                            <Button size="small" @click="cancelOrder(item)">撤销</Button>
-                        </td>
-                    </tr>
-                </tfoot>
-            </table>
-        </div>
-    </app-pull-refresh>
-    <component ref="componentRef" v-bind="{ selectedRow }" :is="componentMap.get(componentId)"
-                @closed="closeComponent" v-if="componentId" />
+    <div class="g-detail-table">
+        <table cellspacing="0" cellpadding="0">
+            <tbody>
+                <tr>
+                    <td>
+                        <Checkbox v-model="checked">历史</Checkbox>
+                    </td>
+                    <td>
+                        <app-date-picker v-model="dateValue" @confirm="onRefresh()" v-if="checked" />
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+        <order-history ref="historyRef" :params="historyParams" v-if="checked" />
+        <order-list :params="listParams" v-else />
+    </div>
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, defineAsyncComponent, onUnmounted } from 'vue'
-import { useRequest } from '@/hooks/request'
-import { Button } from 'vant'
-import { useComponent } from '@/hooks/component'
-import { queryTradeOrderDetail, queryHisTradeOrderDetail } from '@/services/api/order'
-import { formatDate, formatDecimal } from '@/filters'
-import { getBuyOrSellName, getGoodsCurrencyItemName, getWRTradeOrderStatusName } from '@/constants/order'
-import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
-import AppSelect from '@mobile/components/base/select/index.vue'
-import AppCalendar from '@mobile/components/base/calendar/index.vue'
-import eventBus from '@/services/bus'
-import { useFuturesStore } from '@/stores'
+import { shallowRef, reactive, defineAsyncComponent } from 'vue'
+import { Checkbox } from 'vant'
+import AppDatePicker from '@mobile/components/base/datepicker/index.vue'
 
 const props = defineProps({
-    goodsId: Number
+    accountid: {
+        type: Number,
+        required: true
+    },
 })
 
-const dateType = shallowRef(0)
-const currentDate = shallowRef(new Date())
-const options = shallowRef([
-    { label: '当前', value: 0 },
-    { label: '历史', value: 1 }
-])
-
-const error = shallowRef(false)
-const dataList = shallowRef<Model.TradeOrderDetailRsp[]>([])
-const hisDataList = shallowRef<Model.HisTradeOrderDetailRsp[]>([])
-const pullRefreshRef = shallowRef()
-const selectedRow = shallowRef<Model.TradeOrderDetailRsp>()
+const OrderList = defineAsyncComponent(() => import('./list/index.vue')) // 当前
+const OrderHistory = defineAsyncComponent(() => import('./history/index.vue')) // 历史
 
-const componentMap = new Map<string, unknown>([
-    ['Cancel', defineAsyncComponent(() => import('./cancel/index.vue'))], // 撤销
-])
+const historyRef = shallowRef()
+const checked = shallowRef(false)
+const dateValue = shallowRef([])
 
-const { componentRef, componentId, openComponent, closeComponent } = useComponent(() => {
-    pullRefreshRef.value?.refresh()
+const listParams = reactive<Partial<Model.TradeOrderDetailReq>>({
+    accountID: props.accountid.toString()
 })
 
-const { loading, pageIndex, pageCount, run } = useRequest(queryTradeOrderDetail, {
-    defaultParams: {
-        pagesize: 20,
-        tradeMode: '10',
-        orderStatus: '3,7'
-    },
-    onSuccess: (res) => {
-        dataList.value = []
-        dataList.value.push(...res.data.filter(e => e.goodsid === props.goodsId))
-    },
-    onError: () => {
-        error.value = true
-    }
+const historyParams = reactive<Partial<Model.HisTradeOrderDetailReq>>({
+    accountID: props.accountid.toString()
 })
 
-const { loading: hisLoading, pageIndex: hisPageIndex, pageCount: hisPageCount, run: runHis } = useRequest(queryHisTradeOrderDetail, {
-    manual: true,
-    onSuccess: (res) => {
-        if (pageIndex.value === 1) {
-            hisDataList.value = []
-        }
-        hisDataList.value.push(...res.data)
-    },
-    onError: () => {
-        error.value = true
-    }
-})
-
-const enumName = (id: string) => {
-    const { currencyid = 0 } = useFuturesStore().getGoods(id) ?? {}
-    return getGoodsCurrencyItemName(currencyid)
-}
-
-// 撤销
-const cancelOrder = (item: Model.TradeOrderDetailRsp) => {
-    selectedRow.value = item
-    openComponent('Cancel')
-}
-
-// 选择日期
-const onConfirm = (value: Date) => {
-    currentDate.value = value
-    pageIndex.value = 1
-    pullRefreshRef.value?.refresh()
-}
-
 const onRefresh = () => {
-    const dateString = currentDate.value.toISOString()
-    const dateValue = formatDate(dateString, 'YYYYMMDD')
-    runHis({
-        tradeMode: '10',
-        startDate: dateValue,
-        endDate: dateValue,
-    })
+    const date = dateValue.value.join('')
+    historyParams.startDate = date
+    historyParams.endDate = date
+    historyRef.value?.refresh()
 }
-
-// 接收委托回应通知
-const orderRspNotify = eventBus.$on('OrderRsp', () => {
-    run()
-})
-
-onUnmounted(() => {
-    orderRspNotify.cancel()
-})
-
 </script>

+ 116 - 0
src/packages/digital/views/contract/components/order/list/index.vue

@@ -0,0 +1,116 @@
+<template>
+    <app-pull-refresh ref="pullRefreshRef" class="g-detail-table" v-model:loading="loading"
+        v-model:pageIndex="pageIndex" :page-count="pageCount" @refresh="onRefresh">
+        <table cellspacing="0" cellpadding="0" v-for="(item, index) in dataList" :key="index">
+            <tbody>
+                <tr>
+                    <th>
+                        <span>{{ item.goodscode }}/{{ item.goodsname }}</span>
+                        <time class="text-small">{{ formatDate(item.ordertime) }}</time>
+                    </th>
+                    <th>
+                        <span>{{ getBuyOrSellName(item.buyorsell) }}</span>
+                    </th>
+                </tr>
+                <tr>
+                    <td>
+                        <span class="text-small">委托单号</span>
+                        <span>{{ item.orderid }}</span>
+                    </td>
+                    <td>
+                        <span class="text-small">委托状态</span>
+                        <span>{{ getWRTradeOrderStatusName(item.orderstatus) }}</span>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <span class="text-small">委托价格({{ enumName(item.goodsid) }})</span>
+                        <span>{{ formatDecimal(item.orderprice, item.decimalplace) }}</span>
+                    </td>
+                    <td>
+                        <span class="text-small">委托数量({{ item.goodscode }})</span>
+                        <span>{{ item.orderqty }}</span>
+                    </td>
+                </tr>
+            </tbody>
+            <tfoot>
+                <tr>
+                    <td colspan="2">
+                        <Button size="small" @click="cancelOrder(item)">撤销</Button>
+                    </td>
+                </tr>
+            </tfoot>
+        </table>
+        <component ref="componentRef" v-bind="{ selectedRow }" :is="componentMap.get(componentId)"
+            @closed="closeComponent" v-if="componentId" />
+    </app-pull-refresh>
+</template>
+
+<script lang="ts" setup>
+import { PropType, shallowRef, defineAsyncComponent } from 'vue'
+import { Button } from 'vant'
+import { formatDate, formatDecimal } from '@/filters'
+import { getBuyOrSellName, getWRTradeOrderStatusName, getGoodsCurrencyItemName } from '@/constants/order'
+import { useRequest } from '@/hooks/request'
+import { useComponent } from '@/hooks/component'
+import { queryTradeOrderDetail } from '@/services/api/order'
+import { useFuturesStore } from '@/stores'
+import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
+
+const props = defineProps({
+    params: {
+        type: Object as PropType<Model.TradeOrderDetailReq>,
+        required: true
+    }
+})
+
+const componentMap = new Map<string, unknown>([
+    ['Cancel', defineAsyncComponent(() => import('../cancel/index.vue'))], // 撤销
+])
+
+const { componentRef, componentId, openComponent, closeComponent } = useComponent(() => {
+    pullRefreshRef.value?.refresh()
+})
+
+const futuresStore = useFuturesStore()
+const pullRefreshRef = shallowRef()
+const dataList = shallowRef<Model.TradeOrderDetailRsp[]>([])
+const selectedRow = shallowRef<Model.TradeOrderDetailRsp>()
+
+const { loading, pageIndex, pageCount, run } = useRequest(queryTradeOrderDetail, {
+    manual: true,
+    defaultParams: {
+        pagesize: 20,
+        pageflag: 1,
+        tradeMode: '10'
+    },
+    onSuccess: (res) => {
+        if (pageIndex.value === 1) {
+            dataList.value = []
+        }
+        dataList.value.push(...res.data)
+    }
+})
+
+// 撤销
+const cancelOrder = (item: Model.TradeOrderDetailRsp) => {
+    selectedRow.value = item
+    openComponent('Cancel')
+}
+
+const enumName = (goodsid: number) => {
+    const item = futuresStore.getQuoteItem({ goodsid })
+    return item ? getGoodsCurrencyItemName(item.currencyid) : 0
+}
+
+const onRefresh = () => {
+    run(props.params)
+}
+
+// 暴露组件属性给父组件调用
+defineExpose({
+    refresh: () => {
+        pullRefreshRef.value?.refresh()
+    }
+})
+</script>

+ 13 - 10
src/packages/digital/views/contract/components/position/close/index.vue

@@ -7,10 +7,10 @@
             </template>
             <Form ref="formRef" class="g-form__container" @submit="onCloseSumit">
                 <CellGroup title="持仓信息" inset>
-                    <Cell title="代码/名称"
-                        :value="`${selectedRow.goodsCode}/${selectedRow.goodsName}`" />
+                    <Cell title="代码/名称" :value="`${selectedRow.goodsCode}/${selectedRow.goodsName}`" />
                     <Cell title="持仓方向" :value="getBuyOrSellName(selectedRow.tHDetailEx.buyOrSell)" />
-                    <Cell title="持仓价格(USDT)" :value="formatDecimal(selectedRow.tHDetailEx.holderPrice, selectedRow.decimalPlace)" />
+                    <Cell title="持仓价格(USDT)"
+                        :value="formatDecimal(selectedRow.tHDetailEx.holderPrice, selectedRow.decimalPlace)" />
                     <Cell title="持仓量" :value="selectedRow.tHDetailEx.holderQty" />
                     <Cell title="冻结量" :value="selectedRow.tHDetailEx.freezeQty" />
                     <Cell title="浮动盈亏">
@@ -20,10 +20,12 @@
                             </span>
                         </template>
                     </Cell>
-                    <Field v-if="formData.PriceMode === EPriceMode.PRICEMODE_LIMIT" name="OrderPrice" :rules="formRules.OrderPrice" label="价格">
+                    <Field v-if="formData.PriceMode === EPriceMode.PRICEMODE_LIMIT" name="OrderPrice"
+                        :rules="formRules.OrderPrice" label="价格">
                         <template #input>
-                            <app-stepper v-model="formData.OrderPrice" min="0.0" :decimal-length="selectedRow.decimalPlace"
-                            :step="quote?.decimalvalue" :auto-fixed="false" />
+                            <app-stepper v-model="formData.OrderPrice" min="0.0"
+                                :decimal-length="selectedRow.decimalPlace" :step="quote?.decimalvalue"
+                                :auto-fixed="false" />
                         </template>
                     </Field>
                     <Cell v-else value="市价最优"></Cell>
@@ -34,14 +36,15 @@
                     </Field>
                     <Field name="OrderQty" :rules="formRules.OrderQty" label="数量">
                         <template #input>
-                            <app-stepper v-model="formData.OrderQty" min="0.0" :max="maxQty" :auto-fixed="false" integer />
+                            <app-stepper v-model="formData.OrderQty" min="0.0" :max="maxQty" :auto-fixed="false"
+                                integer />
                         </template>
                     </Field>
                 </CellGroup>
             </Form>
-            <template #footer>
-                <Button block square type="danger" @click="formRef?.submit">平仓</Button>
-            </template>
+            <div class="g-form__footer inset">
+                <Button type="primary" @click="formRef?.submit()" round block>平仓</Button>
+            </div>
         </app-view>
     </app-modal>
 </template>

+ 93 - 0
src/packages/digital/views/contract/components/position/history/index.vue

@@ -0,0 +1,93 @@
+<template>
+    <app-pull-refresh ref="pullRefreshRef" class="g-detail-table" v-model:loading="loading"
+        v-model:pageIndex="pageIndex" :page-count="pageCount" @refresh="onRefresh">
+        <table cellspacing="0" cellpadding="0" v-for="(item, index) in dataList" :key="index">
+            <thead>
+                <tr>
+                    <th>
+                        <span>{{ item.goodscode }}/{{ item.goodsname }}</span>
+                        <time>{{ formatDate(item.tradetime) }}</time>
+                    </th>
+                    <th>
+                        <span>{{ getBuyOrSellName(item.buyorsell) }}</span>
+                    </th>
+                </tr>
+            </thead>
+            <tbody>
+                <tr>
+                    <td>
+                        <span>持仓单号</span>
+                        <span>{{ item.tradeid }}</span>
+                    </td>
+                    <td>
+                        <span>开仓价格(USDT)</span>
+                        <span>{{ item.holderprice }}</span>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <span>开仓数量(Gold)</span>
+                        <span>{{ item.holderqty }}</span>
+                    </td>
+                    <td>
+                        <span>开仓金额(USDT)</span>
+                        <span>{{ item.holderamount }}</span>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <span>平仓盈亏(USDT)</span>
+                        <span>{{ item.closepl }}</span>
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+    </app-pull-refresh>
+</template>
+
+<script lang="ts" setup>
+import { PropType, shallowRef } from 'vue'
+import { formatDate } from '@/filters'
+import { getBuyOrSellName } from '@/constants/order'
+import { useRequest } from '@/hooks/request'
+import { queryTradeHolderDetailEx } from '@/services/api/order'
+import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
+
+const props = defineProps({
+    params: {
+        type: Object as PropType<Model.TradeHolderDetailExReq>,
+        required: true
+    }
+})
+
+const pullRefreshRef = shallowRef()
+const dataList = shallowRef<Model.TradeHolderDetailExRsp[]>([])
+
+const { loading, pageIndex, pageCount, run } = useRequest(queryTradeHolderDetailEx, {
+    manual: true,
+    defaultParams: {
+        pagesize: 20,
+        trademodes: '10',
+        holderqty: 0
+    },
+    onSuccess: (res) => {
+        if (pageIndex.value === 1) {
+            dataList.value = []
+        }
+        dataList.value.push(...res.data)
+    }
+})
+
+const onRefresh = () => {
+    if (props.params.tradedate) {
+        run(props.params)
+    }
+}
+
+// 暴露组件属性给父组件调用
+defineExpose({
+    refresh: () => {
+        pullRefreshRef.value?.refresh()
+    }
+})
+</script>

+ 37 - 129
src/packages/digital/views/contract/components/position/index.vue

@@ -1,144 +1,52 @@
 <!--  合约 - 商品交易 - 持仓单 -->
 <template>
-    <app-pull-refresh ref="pullRefreshRef" v-model:loading="loading" v-model:error="error" @refresh="getSBYJMyOrders">
-        <div class="g-detail-table">
-            <table cellspacing="0" cellpadding="0" v-if="!goodsId">
-                <tbody>
-                    <tr>
-                        <td>
-                            <app-select v-model="dateType" :options="options" />
-                        </td>
-                    </tr>
-                </tbody>
-            </table>
-            <table cellspacing="0" cellpadding="0" v-for="(item, index) in dataList" :key="index">
-                <tbody>
-                    <tr>
-                        <th colspan="2">
-                            <span>{{ item.goodsCode }}/ {{ item.goodsName }}</span>
-                            <time class="text-small">{{ formatDate(item.tHDetailEx.tradeTime) }}</time>
-                        </th>
-                        <th>
-                            <span :class="item.tHDetailEx.buyorsell === 0 ? 'g-price-up' : 'g-price-down'">
-                                {{ getBuyOrSellName(item.tHDetailEx.buyOrSell) }}
-                            </span>
-                        </th>
-                    </tr>
-                    <tr>
-                        <td colspan="2">
-                            <span class="text-small">浮动盈亏( {{ enumName(item.currencyid) }})</span>
-                            <span :class="item.closeplColor">
-                                {{ formatDecimal(item.tHDetailEx.floatPL, item.decimalPlace) }}
-                            </span>
-                        </td>
-                        <td>
-                            <span class="text-small">回报率(%)</span>
-                            <span>{{ parsePercent(calReturnRate(item)) }}</span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <span class="text-small">持仓量({{ item.goodsCode }})</span>
-                            <span>{{ item.tHDetailEx.holderQty }}</span>
-                        </td>
-                        <td>
-                            <span class="text-small">保证金( {{ enumName(item.currencyid) }} )</span>
-                            <span>{{ formatAmount(calUseMargin(item)) }}</span>
-                        </td>
-                        <td>
-                            <span class="text-small">风险率(%)</span>
-                            <span>{{ parsePercent(calRiskRate(item)) }}</span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <span class="text-small">冻结量({{ item.goodsCode }})</span>
-                            <span>{{ item.tHDetailEx.freezeQty }}</span>
-                        </td>
-                        <td>
-                            <span class="text-small">持仓价格( {{ enumName(item.currencyid) }})</span>
-                            <span>{{ formatDecimal(item.tHDetailEx.holderPrice, item.decimalPlace) }}</span>
-                        </td>
-                        <td>
-                            <span class="text-small">持金额( {{ enumName(item.currencyid) }} )</span>
-                            <span>{{ formatAmount(item.tHDetailEx.holderAmount) }}</span>
-                        </td>
-                    </tr>
-                </tbody>
-                <tfoot>
-                    <tr>
-                        <td colspan="3">
-                            <Button size="small" @click="closePosition(item)">平仓</Button>
-                            <Button size="small" @click="closePositionAtMarket(item)">市价平仓</Button>
-                        </td>
-                    </tr>
-                </tfoot>
-            </table>
-            <component ref="componentRef" v-bind="{ selectedRow }" :is="componentMap.get(componentId)"
-                @closed="closeComponent" v-if="componentId" />
-        </div>
-        <component ref="componentRef" v-bind="{ selectedRow }" :is="componentMap.get(componentId)" @closed="closeComponent"
-            v-if="componentId" />
-    </app-pull-refresh>
+    <div class="g-detail-table">
+        <table cellspacing="0" cellpadding="0">
+            <tbody>
+                <tr>
+                    <td>
+                        <Checkbox v-model="checked">历史</Checkbox>
+                    </td>
+                    <td>
+                        <app-date-picker v-model="dateValue" @confirm="onRefresh()" v-if="checked" />
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+        <position-history ref="historyRef" :params="historyParams" v-if="checked" />
+        <position-list :params="listParams" v-else />
+    </div>
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, defineAsyncComponent, onUnmounted } from 'vue'
-import { Button } from 'vant'
-import { getBuyOrSellName, getGoodsCurrencyItemName } from '@/constants/order'
-import { useComponent } from '@/hooks/component'
-import { useSBYJOrderStore } from '@/stores'
-import { formatDate, formatDecimal, formatAmount, parsePercent } from '@/filters'
-import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
-import AppSelect from '@mobile/components/base/select/index.vue'
-import eventBus from '@/services/bus'
+import { shallowRef, reactive, defineAsyncComponent } from 'vue'
+import { Checkbox } from 'vant'
+import AppDatePicker from '@mobile/components/base/datepicker/index.vue'
 
 const props = defineProps({
-    goodsId: Number
+    accountid: {
+        type: Number,
+        required: true
+    },
 })
 
-const dateType = shallowRef(0)
+const PositionList = defineAsyncComponent(() => import('./list/index.vue')) // 当前
+const PositionHistory = defineAsyncComponent(() => import('./history/index.vue')) // 历史
 
-const options = shallowRef([
-    { label: '当前', value: 0 },
-    { label: '历史', value: 1 }
-])
+const historyRef = shallowRef()
+const checked = shallowRef(false)
+const dateValue = shallowRef([])
 
-const componentMap = new Map<string, unknown>([
-    ['Close', defineAsyncComponent(() => import('./close/index.vue'))], // 平仓
-    ['MarketClose', defineAsyncComponent(() => import('./market-close/index.vue'))], // 市价平仓
-])
-
-const selectedRow = shallowRef<Model.SBYJMyOrderRsp>()
-const pullRefreshRef = shallowRef()
-
-const { getSBYJMyOrders, getOrderListByGoodsId, $toRefs, calRiskRate, calReturnRate, calUseMargin } = useSBYJOrderStore()
-const { orderComputedList, loading, error } = $toRefs()
-
-const { componentRef, componentId, openComponent, closeComponent } = useComponent(() => getSBYJMyOrders())
-
-const dataList = props.goodsId ? getOrderListByGoodsId(props.goodsId) : orderComputedList
-
-const enumName = (id: number) => {
-    return getGoodsCurrencyItemName(id)
-}
-// 平仓
-const closePosition = (row: Model.SBYJMyOrderRsp) => {
-    selectedRow.value = row
-    openComponent('Close')
-}
-
-// 市价平仓
-const closePositionAtMarket = (row: Model.SBYJMyOrderRsp) => {
-    selectedRow.value = row
-    openComponent('MarketClose')
-}
-
-// 接收头寸变化通知通知
-const posChangedNtf = eventBus.$on('PosChangedNtf', () => getSBYJMyOrders())
+const listParams = reactive<Partial<Model.SBYJMyOrderRsp['tHDetailEx']>>({
+    accountID: props.accountid
+})
 
-onUnmounted(() => {
-    posChangedNtf.cancel()
+const historyParams = reactive<Partial<Model.TradeHolderDetailExReq>>({
+    accountid: props.accountid
 })
 
+const onRefresh = () => {
+    historyParams.tradedate = dateValue.value.join('')
+    historyRef.value?.refresh()
+}
 </script>

+ 131 - 0
src/packages/digital/views/contract/components/position/list/index.vue

@@ -0,0 +1,131 @@
+<template>
+    <app-pull-refresh ref="pullRefreshRef" class="g-detail-table" v-model:loading="orderStore.loading"
+        @refresh="onRefresh">
+        <table cellspacing="0" cellpadding="0" v-for="(item, index) in dataList" :key="index">
+            <tbody>
+                <tr>
+                    <th colspan="2">
+                        <span>{{ item.goodsCode }}/ {{ item.goodsName }}</span>
+                        <time class="text-small">{{ formatDate(item.tHDetailEx.tradeTime) }}</time>
+                    </th>
+                    <th>
+                        <span :class="item.tHDetailEx.buyorsell === 0 ? 'g-price-up' : 'g-price-down'">
+                            {{ getBuyOrSellName(item.tHDetailEx.buyOrSell) }}
+                        </span>
+                    </th>
+                </tr>
+                <tr>
+                    <td colspan="2">
+                        <span class="text-small">浮动盈亏( {{ getGoodsCurrencyItemName(item.currencyid) }})</span>
+                        <span :class="item.closeplColor">
+                            {{ formatDecimal(item.tHDetailEx.floatPL, item.decimalPlace) }}
+                        </span>
+                    </td>
+                    <td>
+                        <span class="text-small">回报率(%)</span>
+                        <span>{{ parsePercent(orderStore.calReturnRate(item)) }}</span>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <span class="text-small">持仓量({{ item.goodsCode }})</span>
+                        <span>{{ item.tHDetailEx.holderQty }}</span>
+                    </td>
+                    <td>
+                        <span class="text-small">保证金( {{ getGoodsCurrencyItemName(item.currencyid) }} )</span>
+                        <span>{{ formatAmount(orderStore.calUseMargin(item)) }}</span>
+                    </td>
+                    <td>
+                        <span class="text-small">风险率(%)</span>
+                        <span>{{ parsePercent(orderStore.calRiskRate(item)) }}</span>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <span class="text-small">冻结量({{ item.goodsCode }})</span>
+                        <span>{{ item.tHDetailEx.freezeQty }}</span>
+                    </td>
+                    <td>
+                        <span class="text-small">持仓价格( {{ getGoodsCurrencyItemName(item.currencyid) }})</span>
+                        <span>{{ formatDecimal(item.tHDetailEx.holderPrice, item.decimalPlace) }}</span>
+                    </td>
+                    <td>
+                        <span class="text-small">持金额( {{ getGoodsCurrencyItemName(item.currencyid) }} )</span>
+                        <span>{{ formatAmount(item.tHDetailEx.holderAmount) }}</span>
+                    </td>
+                </tr>
+            </tbody>
+            <tfoot>
+                <tr>
+                    <td colspan="3">
+                        <Button size="small" @click="closePosition(item)">平仓</Button>
+                        <Button size="small" @click="closePositionAtMarket(item)">市价平仓</Button>
+                    </td>
+                </tr>
+            </tfoot>
+        </table>
+        <component ref="componentRef" v-bind="{ selectedRow }" :is="componentMap.get(componentId)"
+            @closed="closeComponent" v-if="componentId" />
+    </app-pull-refresh>
+</template>
+
+<script lang="ts" setup>
+import { PropType, shallowRef, defineAsyncComponent, computed, onUnmounted } from 'vue'
+import { Button } from 'vant'
+import { formatDate, formatDecimal, formatAmount, parsePercent } from '@/filters'
+import { useComponent } from '@/hooks/component'
+import { getBuyOrSellName, getGoodsCurrencyItemName } from '@/constants/order'
+import { useSBYJOrderStore } from '@/stores'
+import eventBus from '@/services/bus'
+import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
+
+const props = defineProps({
+    params: {
+        type: Object as PropType<Partial<Model.SBYJMyOrderRsp['tHDetailEx']>>,
+        required: true
+    }
+})
+
+const componentMap = new Map<string, unknown>([
+    ['Close', defineAsyncComponent(() => import('../close/index.vue'))], // 平仓
+    ['MarketClose', defineAsyncComponent(() => import('../market-close/index.vue'))], // 市价平仓
+])
+
+const { componentRef, componentId, openComponent, closeComponent } = useComponent(() => onRefresh())
+
+const orderStore = useSBYJOrderStore()
+const pullRefreshRef = shallowRef()
+const selectedRow = shallowRef<Model.SBYJMyOrderRsp>()
+
+const dataList = computed(() => orderStore.filterOrderList(props.params))
+
+// 平仓
+const closePosition = (row: Model.SBYJMyOrderRsp) => {
+    selectedRow.value = row
+    openComponent('Close')
+}
+
+// 市价平仓
+const closePositionAtMarket = (row: Model.SBYJMyOrderRsp) => {
+    selectedRow.value = row
+    openComponent('MarketClose')
+}
+
+const onRefresh = () => {
+    orderStore.getSBYJMyOrders()
+}
+
+// 接收头寸变化通知通知
+const posChangedNtf = eventBus.$on('PosChangedNtf', () => onRefresh())
+
+onUnmounted(() => {
+    posChangedNtf.cancel()
+})
+
+// 暴露组件属性给父组件调用
+defineExpose({
+    refresh: () => {
+        pullRefreshRef.value?.refresh()
+    }
+})
+</script>

+ 31 - 35
src/packages/digital/views/contract/components/position/market-close/index.vue

@@ -1,7 +1,6 @@
 <template>
-    <Dialog v-model:show="showDialog" title="您确定要按市价平仓吗?" show-cancel-button :before-close="onBeforeClose" @confirm="marketClose"
-        @closed="onClosed">
-        <span>市价平仓会以市价委托方式平掉此仓位。</span>
+    <Dialog v-model:show="showDialog" show-cancel-button :before-close="onBeforeClose" @closed="onClosed"
+        message="市价平仓会以市价委托方式平掉此仓位。">
     </Dialog>
 </template>
 
@@ -23,8 +22,9 @@ const props = defineProps({
     }
 })
 
-const { formData, formSubmit } = useOrder()
 const emit = defineEmits(['closed'])
+
+const { formData, formSubmit } = useOrder()
 const { global: { t } } = i18n
 const showDialog = shallowRef(false)
 const refresh = shallowRef(false) // 是否刷新父组件数据
@@ -32,8 +32,33 @@ const userStore = useUserStore()
 
 const onBeforeClose = (action: string) => {
     if (action === 'confirm') {
-        refresh.value = true
-        showDialog.value = false
+        fullloading((hideLoading) => {
+            const { tHDetailEx, agreeUnit } = props.selectedRow ?? {}
+            const { marketID, goodsID, holderQty } = tHDetailEx
+
+            /// 获取对应的市场ID
+            formData.Header = { GoodsID: goodsID, MarketID: marketID }
+            formData.MarketID = marketID
+            formData.PriceMode = EPriceMode.PRICEMODE_MARKET
+            formData.GoodsID = goodsID
+            formData.TimevalidType = EValidType.VALIDTYPE_DR
+            formData.OperateType = EOrderOperateType.ORDEROPERATETYPE_HOLDER_CLOSE
+            formData.BuildType = EBuildType.BUILDTYPE_CLOSE
+            formData.OrderQty = holderQty / agreeUnit // 数量÷合约乘数
+            formData.RelatedID = handleRequestBigNumber(tHDetailEx.tradeID) // 关联单号
+            formData.BuyOrSell = tHDetailEx.buyOrSell === BuyOrSell.Buy ? BuyOrSell.Sell : BuyOrSell.Buy // 持仓反方向
+            const param112 = userStore.getSystemParamValue('112')
+            formData.MarketMaxSub = Number(param112) || 100
+
+            formSubmit().then(() => {
+                hideLoading('提交成功', 'success')
+                refresh.value = true
+            }).catch((err) => {
+                hideLoading(err, 'fail')
+            }).finally(() => {
+                showDialog.value = false
+            })
+        })
     }
     return true
 }
@@ -42,35 +67,6 @@ const onClosed = () => {
     emit('closed', refresh.value)
 }
 
-const marketClose = () => {
-    
-    const { tHDetailEx, agreeUnit } = props.selectedRow ?? {}
-    const { marketID, goodsID, holderQty } = tHDetailEx
-    
-    /// 获取对应的市场ID
-    formData.Header = { GoodsID: goodsID, MarketID: marketID }
-    formData.MarketID = marketID
-    formData.PriceMode = EPriceMode.PRICEMODE_MARKET
-    formData.GoodsID = goodsID
-    formData.TimevalidType = EValidType.VALIDTYPE_DR
-    formData.OperateType = EOrderOperateType.ORDEROPERATETYPE_HOLDER_CLOSE
-    formData.BuildType = EBuildType.BUILDTYPE_CLOSE
-    formData.OrderQty = holderQty / agreeUnit // 数量÷合约乘数
-    formData.RelatedID = handleRequestBigNumber(tHDetailEx.tradeID) // 关联单号
-    formData.BuyOrSell = tHDetailEx.buyOrSell === BuyOrSell.Buy ? BuyOrSell.Sell : BuyOrSell.Buy // 持仓反方向
-    const param112 = userStore.getSystemParamValue('112')
-    formData.MarketMaxSub = Number(param112) || 100
-
-    fullloading((hideLoading) => {
-        formSubmit().then(() => {
-            hideLoading('提交成功', 'success')
-            onClosed()
-        }).catch((err) => {
-            hideLoading(err, 'fail')
-        })
-    })
-}
-
 onMounted(() => {
     showDialog.value = true
 })

+ 11 - 3
src/packages/digital/views/contract/components/statement/history/index.vue

@@ -10,7 +10,7 @@
             </dd>
             <dd>
                 <span class="text-small">{{ t('banksign.capital.operatetypename') }}</span>
-                <span>{{ getOperateTypeSearchName(item.operatetype) }}</span>
+                <span>{{ getEnumName(item) }}</span>
             </dd>
             <dd>
                 <span class="text-small">{{ t('banksign.capital.createtime') }}</span>
@@ -24,14 +24,15 @@
 import { PropType, shallowRef } from 'vue'
 import { formatDate } from '@/filters'
 import { useRequest } from '@/hooks/request'
-import { getOperateTypeSearchName } from '@/constants/order'
+import { getAccountBusinessCodeName } from '@/constants/bank'
+import { getOperateTypeName } from '@/constants/order'
 import { queryHisAmountLog } from '@/services/api/bank'
 import { i18n } from '@/stores'
 import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
 
 const props = defineProps({
     params: {
-        type: Object as PropType<Partial<Model.HisAmountLogReq>>,
+        type: Object as PropType<Model.HisAmountLogReq>,
         required: true
     }
 })
@@ -59,6 +60,13 @@ const onRefresh = () => {
     }
 }
 
+const getEnumName = (item: Model.HisAmountLogRsp) => {
+    if (item.changetypeenumcode === 'accountBusinessCode') {
+        return getAccountBusinessCodeName(item.changetypeenumvalue)
+    }
+    return getOperateTypeName(item.changetypeenumvalue)
+}
+
 // 暴露组件属性给父组件调用
 defineExpose({
     refresh: () => {

+ 2 - 2
src/packages/digital/views/contract/components/statement/index.vue

@@ -36,11 +36,11 @@ const historyRef = shallowRef()
 const checked = shallowRef(false)
 const dateValue = shallowRef([])
 
-const listParams = reactive<Partial<Model.AmountLogReq>>({
+const listParams = reactive<Model.AmountLogReq>({
     accountID: props.accountid.toString()
 })
 
-const historyParams = reactive<Partial<Model.HisAmountLogReq>>({
+const historyParams = reactive<Model.HisAmountLogReq>({
     accountID: props.accountid.toString()
 })
 

+ 11 - 3
src/packages/digital/views/contract/components/statement/list/index.vue

@@ -10,7 +10,7 @@
             </dd>
             <dd>
                 <span class="text-small">{{ t('banksign.capital.operatetypename') }}</span>
-                <span>{{ getOperateTypeSearchName(item.operatetype) }}</span>
+                <span>{{ getEnumName(item) }}</span>
             </dd>
             <dd>
                 <span class="text-small">{{ t('banksign.capital.createtime') }}</span>
@@ -24,14 +24,15 @@
 import { PropType, shallowRef } from 'vue'
 import { formatDate } from '@/filters'
 import { useRequest } from '@/hooks/request'
-import { getOperateTypeSearchName } from '@/constants/order'
+import { getAccountBusinessCodeName } from '@/constants/bank'
+import { getOperateTypeName } from '@/constants/order'
 import { queryAmountLog } from '@/services/api/bank'
 import { i18n } from '@/stores'
 import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
 
 const props = defineProps({
     params: {
-        type: Object as PropType<Partial<Model.AmountLogReq>>,
+        type: Object as PropType<Model.AmountLogReq>,
         required: true
     }
 })
@@ -58,6 +59,13 @@ const onRefresh = () => {
     run(props.params)
 }
 
+const getEnumName = (item: Model.AmountLogRsp) => {
+    if (item.changetypeenumcode === 'accountBusinessCode') {
+        return getAccountBusinessCodeName(item.changetypeenumvalue)
+    }
+    return getOperateTypeName(item.changetypeenumvalue)
+}
+
 // 暴露组件属性给父组件调用
 defineExpose({
     refresh: () => {

+ 99 - 0
src/packages/digital/views/contract/components/trade/history/index.vue

@@ -0,0 +1,99 @@
+<template>
+    <app-pull-refresh ref="pullRefreshRef" class="g-detail-table" v-model:loading="loading"
+        v-model:pageIndex="pageIndex" :page-count="pageCount" @refresh="onRefresh">
+        <table cellspacing="0" cellpadding="0" v-for="(item, index) in dataList" :key="index">
+            <thead>
+                <tr>
+                    <th>
+                        <span>{{ item.goodscode }}/{{ item.goodsname }}</span>
+                        <span :class="!item.buyorsell ? 'g-price-up' : 'g-price-down'">
+                            {{ formatDate(item.tradetime) }}
+                        </span>
+                    </th>
+                    <th>
+                        <span :class="!item.buyorsell ? 'g-price-up' : 'g-price-down'">
+                            {{ getBuyOrSellName(item.buyorsell) }}
+                        </span>
+                    </th>
+                </tr>
+            </thead>
+            <tbody>
+                <tr>
+                    <td>
+                        <span class="text-small">成交单号</span>
+                        <span>{{ item.tradeid }}</span>
+                    </td>
+                    <td>
+                        <span class="text-small">委托状态</span>
+                        <span>{{ item.status }}</span>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <span class="text-small">成交价格(USDT)</span>
+                        <span>{{ formatDecimal(item.tradeprice) }}</span>
+                    </td>
+                    <td>
+                        <span class="text-small">手续费(USDT)</span>
+                        <span>{{ formatDecimal(item.charge) }}</span>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <span class="text-small">成交数量(Gold)</span>
+                        <span>{{ item.tradeqty }}</span>
+                    </td>
+                    <td>
+                        <span class="text-small">平仓盈亏(USDT)</span>
+                        <span>{{ formatDecimal(item.closepl) }}</span>
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+    </app-pull-refresh>
+</template>
+
+<script lang="ts" setup>
+import { PropType, shallowRef } from 'vue'
+import { formatDate, formatDecimal } from '@/filters'
+import { getBuyOrSellName } from '@/constants/order'
+import { useRequest } from '@/hooks/request'
+import { queryHisTradeDetail } from '@/services/api/order'
+import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
+
+const props = defineProps({
+    params: {
+        type: Object as PropType<Model.HisTradeDetailReq>,
+        required: true
+    }
+})
+
+const pullRefreshRef = shallowRef()
+const dataList = shallowRef<Model.HisTradeDetailRsp[]>([])
+
+const { loading, pageIndex, pageCount, run } = useRequest(queryHisTradeDetail, {
+    manual: true,
+    defaultParams: {
+        pagesize: 20,
+        pageflag: 1,
+        tradeMode: '10'
+    },
+    onSuccess: (res) => {
+        if (pageIndex.value === 1) {
+            dataList.value = []
+        }
+        dataList.value.push(...res.data)
+    }
+})
+
+const onRefresh = () => {
+    run(props.params)
+}
+
+// 暴露组件属性给父组件调用
+defineExpose({
+    refresh: () => {
+        pullRefreshRef.value?.refresh()
+    }
+})
+</script>

+ 39 - 194
src/packages/digital/views/contract/components/trade/index.vue

@@ -1,208 +1,53 @@
 <template>
-    <table cellspacing="0" cellpadding="0">
-        <tbody>
-            <tr>
-                <td>
-                    <app-select v-model="dateType" :options="options" />
-                </td>
-            </tr>
-            <tr v-if="dateType != 0">
-                <td>
-                    <app-calendar :default-date="[currentDate]" @confirm="onConfirm" :title="$t('common.calendar')" :confirm-text="$t('operation.confirm')" />
-                </td>
-            </tr>
-        </tbody>
-    </table>
-    <app-pull-refresh v-if="dateType === 0" ref="pullRefreshRef" v-model:loading="loading" v-model:error="error" v-model:pageIndex="pageIndex"
-        :page-count="pageCount" @refresh="run">
-        <div class="g-detail-table">
-            <table cellspacing="0" cellpadding="0" v-for="(item, index) in dataList" :key="index">
-                <thead>
-                    <tr>
-                        <th>
-                            <span>{{ item.goodscode }}/ {{ item.goodsname }}</span>
-                            <span :class="!item.buyorsell ? 'g-price-up' : 'g-price-down'">
-                                {{ formatDate(item.tradetime) }}
-                            </span>
-                        </th>
-                        <th>
-                            <span :class="!item.buyorsell ? 'g-price-up' : 'g-price-down'">
-                                {{ getBuyOrSellName(item.buyorsell) }}
-                            </span>
-                        </th>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tr>
-                        <td>
-                            <span class="text-small">成交单号</span>
-                            <span>{{ item.tradeid }}</span>
-                        </td>
-                        <td>
-                            <span class="text-small">委托状态</span>
-                            <span>{{ item.status }}</span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <span class="text-small">成交价格(USDT)</span>
-                            <span>{{ formatDecimal(item.tradeprice) }}</span>
-                        </td>
-                        <td>
-                            <span class="text-small">手续费(USDT)</span>
-                            <span>{{ formatDecimal(item.charge) }}</span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <span class="text-small">成交数量(Gold)</span>
-                            <span>{{ item.tradeqty }}</span>
-                        </td>
-                        <td>
-                            <span class="text-small">平仓盈亏(USDT)</span>
-                            <span>{{ formatDecimal(item.closepl) }}</span>
-                        </td>
-                    </tr>
-                </tbody>
-            </table>
-        </div>
-    </app-pull-refresh>
-    <app-pull-refresh v-else ref="pullRefreshRef" v-model:loading="hisLoading" v-model:error="error" v-model:pageIndex="hisPageIndex"
-        :page-count="hisPageCount" @refresh="onRefresh">
-        <div class="g-detail-table">
-            <table cellspacing="0" cellpadding="0" v-for="(item, index) in hisDataList" :key="index">
-                <thead>
-                    <tr>
-                        <th>
-                            <span>{{ item.goodscode }}/ {{ item.goodsname }}</span>
-                            <span :class="!item.buyorsell ? 'g-price-up' : 'g-price-down'">
-                                {{ formatDate(item.tradetime) }}
-                            </span>
-                        </th>
-                        <th>
-                            <span :class="!item.buyorsell ? 'g-price-up' : 'g-price-down'">
-                                {{ getBuyOrSellName(item.buyorsell) }}
-                            </span>
-                        </th>
-                    </tr>
-                </thead>
-                <tbody>
-                    <tr>
-                        <td>
-                            <span class="text-small">成交单号</span>
-                            <span>{{ item.tradeid }}</span>
-                        </td>
-                        <td>
-                            <span class="text-small">委托状态</span>
-                            <span>{{ item.status }}</span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <span class="text-small">成交价格(USDT)</span>
-                            <span>{{ formatDecimal(item.tradeprice) }}</span>
-                        </td>
-                        <td>
-                            <span class="text-small">手续费(USDT)</span>
-                            <span>{{ formatDecimal(item.charge) }}</span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            <span class="text-small">成交数量(Gold)</span>
-                            <span>{{ item.tradeqty }}</span>
-                        </td>
-                        <td>
-                            <span class="text-small">平仓盈亏(USDT)</span>
-                            <span>{{ formatDecimal(item.closepl) }}</span>
-                        </td>
-                    </tr>
-                </tbody>
-            </table>
-        </div>
-    </app-pull-refresh>
-    <component ref="componentRef" v-bind="{ selectedRow }" :is="componentMap.get(componentId)" @closed="closeComponent"
-            v-if="componentId" />
+    <div class="g-detail-table">
+        <table cellspacing="0" cellpadding="0">
+            <tbody>
+                <tr>
+                    <td>
+                        <Checkbox v-model="checked">历史</Checkbox>
+                    </td>
+                    <td>
+                        <app-date-picker v-model="dateValue" @confirm="onRefresh()" v-if="checked" />
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+        <trade-history ref="historyRef" :params="historyParams" v-if="checked" />
+        <trade-list :params="listParams" v-else />
+    </div>
 </template>
 
 <script lang="ts" setup>
-import { shallowRef } from 'vue'
-import { useComponent } from '@/hooks/component'
-import { useRequest } from '@/hooks/request'
-import { queryTradeDetail, queryHisTradeDetail } from '@/services/api/order'
-import { getBuyOrSellName } from '@/constants/order'
-import { formatDate, formatDecimal } from '@/filters'
-import AppSelect from '@mobile/components/base/select/index.vue'
-import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
-import AppCalendar from '@mobile/components/base/calendar/index.vue'
-
-const dateType = shallowRef(0)
-const currentDate = shallowRef(new Date())
-const options = shallowRef([
-    { label: '当前', value: 0 },
-    { label: '历史', value: 1 }
-])
-
-const dataList = shallowRef<Model.TradeDetailRsp[]>([])
-const hisDataList = shallowRef<Model.HisTradeDetailRsp[]>([])
-const selectedRow = shallowRef<Model.TradeDetailRsp>()
-const error = shallowRef(false)
-const pullRefreshRef = shallowRef()
-
-const { componentRef, componentId, openComponent, closeComponent } = useComponent(() => {
-    pullRefreshRef.value?.refresh()
-})
-
-const { loading, pageIndex, pageCount, run } = useRequest(queryTradeDetail, {
-    defaultParams: {
-        pagesize: 20,
-        tradeMode: '10'
-    },
-    onSuccess: (res) => {
-        if (pageIndex.value === 1) {
-            dataList.value = []
-        }
-        dataList.value.push(...res.data)
+import { shallowRef, reactive, defineAsyncComponent } from 'vue'
+import { Checkbox } from 'vant'
+import AppDatePicker from '@mobile/components/base/datepicker/index.vue'
+
+const props = defineProps({
+    accountid: {
+        type: Number,
+        required: true
     },
-    onError: () => {
-        error.value = true
-    }
 })
 
-const { loading: hisLoading, pageIndex: hisPageIndex, pageCount: hisPageCount, run: runHis } = useRequest(queryHisTradeDetail, {
-    manual: true,
-    onSuccess: (res) => {
-        if (pageIndex.value === 1) {
-            hisDataList.value = []
-        }
-        hisDataList.value.push(...res.data)
-    },
-    onError: () => {
-        error.value = true
-    }
-})
+const TradeList = defineAsyncComponent(() => import('./list/index.vue')) // 当前
+const TradeHistory = defineAsyncComponent(() => import('./history/index.vue')) // 历史
 
+const historyRef = shallowRef()
+const checked = shallowRef(false)
+const dateValue = shallowRef([])
 
-const showComponent = (componentName: string, row: Model.TradeDetailRsp) => {
-    selectedRow.value = row
-    openComponent(componentName)
-}
+const listParams = reactive<Partial<Model.TradeDetailReq>>({
+    accountID: props.accountid.toString()
+})
 
-// 选择日期
-const onConfirm = (value: Date) => {
-    currentDate.value = value
-    pageIndex.value = 1
-    pullRefreshRef.value?.refresh()
-}
+const historyParams = reactive<Partial<Model.HisTradeDetailReq>>({
+    accountID: props.accountid.toString()
+})
 
 const onRefresh = () => {
-    const dateString = currentDate.value.toISOString()
-    const dateValue = formatDate(dateString, 'YYYYMMDD')
-    runHis({
-        tradeMode: '10',
-        startDate: dateValue,
-        endDate: dateValue,
-    })
+    const date = dateValue.value.join('')
+    historyParams.startDate = date
+    historyParams.endDate = date
+    historyRef.value?.refresh()
 }
-
 </script>

+ 98 - 0
src/packages/digital/views/contract/components/trade/list/index.vue

@@ -0,0 +1,98 @@
+<template>
+    <app-pull-refresh ref="pullRefreshRef" class="g-detail-table" v-model:loading="loading"
+        v-model:pageIndex="pageIndex" :page-count="pageCount" @refresh="onRefresh">
+        <table cellspacing="0" cellpadding="0" v-for="(item, index) in dataList" :key="index">
+            <thead>
+                <tr>
+                    <th>
+                        <span>{{ item.goodscode }}/{{ item.goodsname }}</span>
+                        <span :class="!item.buyorsell ? 'g-price-up' : 'g-price-down'">
+                            {{ formatDate(item.tradetime) }}
+                        </span>
+                    </th>
+                    <th>
+                        <span :class="!item.buyorsell ? 'g-price-up' : 'g-price-down'">
+                            {{ getBuyOrSellName(item.buyorsell) }}
+                        </span>
+                    </th>
+                </tr>
+            </thead>
+            <tbody>
+                <tr>
+                    <td>
+                        <span class="text-small">成交单号</span>
+                        <span>{{ item.tradeid }}</span>
+                    </td>
+                    <td>
+                        <span class="text-small">委托状态</span>
+                        <span>{{ item.status }}</span>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <span class="text-small">成交价格(USDT)</span>
+                        <span>{{ formatDecimal(item.tradeprice) }}</span>
+                    </td>
+                    <td>
+                        <span class="text-small">手续费(USDT)</span>
+                        <span>{{ formatDecimal(item.charge) }}</span>
+                    </td>
+                </tr>
+                <tr>
+                    <td>
+                        <span class="text-small">成交数量(Gold)</span>
+                        <span>{{ item.tradeqty }}</span>
+                    </td>
+                    <td>
+                        <span class="text-small">平仓盈亏(USDT)</span>
+                        <span>{{ formatDecimal(item.closepl) }}</span>
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+    </app-pull-refresh>
+</template>
+
+<script lang="ts" setup>
+import { PropType, shallowRef } from 'vue'
+import { formatDate, formatDecimal } from '@/filters'
+import { getBuyOrSellName } from '@/constants/order'
+import { useRequest } from '@/hooks/request'
+import { queryTradeDetail } from '@/services/api/order'
+import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
+
+const props = defineProps({
+    params: {
+        type: Object as PropType<Model.TradeDetailReq>,
+        required: true
+    }
+})
+
+const pullRefreshRef = shallowRef()
+const dataList = shallowRef<Model.TradeDetailRsp[]>([])
+
+const { loading, pageIndex, pageCount, run } = useRequest(queryTradeDetail, {
+    manual: true,
+    defaultParams: {
+        pagesize: 20,
+        tradeMode: '10'
+    },
+    onSuccess: (res) => {
+        if (pageIndex.value === 1) {
+            dataList.value = []
+        }
+        dataList.value.push(...res.data)
+    }
+})
+
+const onRefresh = () => {
+    run(props.params)
+}
+
+// 暴露组件属性给父组件调用
+defineExpose({
+    refresh: () => {
+        pullRefreshRef.value?.refresh()
+    }
+})
+</script>

+ 3 - 3
src/packages/digital/views/contract/detail/index.vue

@@ -40,13 +40,13 @@
         </div>
         <Tabs>
             <Tab title="委托">
-                <contract-order showDatePicker v-bind="{ isHis: true }" />
+                <contract-order v-bind="{ accountid }" />
             </Tab>
             <Tab title="成交">
-                <contract-trade />
+                <contract-trade v-bind="{ accountid }" />
             </Tab>
             <Tab title="持仓">
-                <contract-position />
+                <contract-position v-bind="{ accountid }" />
             </Tab>
             <Tab title="资金明细">
                 <contract-statement v-bind="{ accountid }" />

+ 1 - 1
src/packages/digital/views/contract/goods/chart/index.vue

@@ -77,7 +77,7 @@ const { getQueryStringToNumber, routerBack } = useNavigation()
 const goodsid = getQueryStringToNumber('id')
 const futuresStore = useFuturesStore()
 
-const quote = computed(() => futuresStore.getQuoteInfo({ goodsid }))
+const quote = computed(() => futuresStore.getQuoteItem({ goodsid }))
 </script>
 
 <style lang="less">

+ 5 - 5
src/packages/digital/views/contract/goods/detail/index.vue

@@ -123,10 +123,10 @@
         </Row>
         <Tabs v-model:active="tabIndex">
             <Tab title="持仓">
-                <contract-position v-bind="{ goodsId }" />
+                <contract-position :params="{ goodsID: goodsId }" />
             </Tab>
             <Tab title="委托">
-                <contract-order v-bind="{ goodsId }" />
+                <contract-order :params="{ goodsID: goodsId, orderStatus: '3,7' }" />
             </Tab>
             <Tab title="资金">
                 <contract-account v-bind="{ goodsId }" />
@@ -147,8 +147,8 @@ import { useOrder } from '@/business/trade'
 import { BuyOrSell, getGoodsCurrencyItemName } from '@/constants/order'
 import AppSelect from '@mobile/components/base/select/index.vue'
 import AppStepper from '@mobile/components/base/stepper/index.vue'
-import ContractPosition from '../../components/position/index.vue'
-import ContractOrder from '../../components/order/index.vue'
+import ContractPosition from '../../components/position/list/index.vue'
+import ContractOrder from '../../components/order/list/index.vue'
 import ContractAccount from '../../components/account/index.vue'
 
 const { router, getQueryStringToNumber, getGlobalUrlParams } = useNavigation()
@@ -168,7 +168,7 @@ const stopLossRatio = shallowRef(0) // 止损比例
 const sliderStep = 0.01 // 滑块步长
 
 const { getSBYJMyOrders } = useSBYJOrderStore()
-const quote = computed(() => futuresStore.getQuoteInfo({ goodsid: goodsId }))
+const quote = computed(() => futuresStore.getQuoteItem({ goodsid: goodsId }))
 const goods = computed(() => futuresStore.getGoods(goodsId ?? 0)) ?? {}
 
 const options = computed(() => {

+ 1 - 1
src/packages/digital/views/spot/components/account/activate/index.vue

@@ -1,5 +1,5 @@
 <template>
-    <Dialog v-model:show="showDialog" title="提示" show-cancel-button :before-close="onBeforeClose" @closed="onClosed"
+    <Dialog v-model:show="showDialog" show-cancel-button :before-close="onBeforeClose" @closed="onClosed"
         message="是否激活当前账户?">
     </Dialog>
 </template>

+ 1 - 1
src/packages/digital/views/spot/components/account/index.vue

@@ -66,7 +66,7 @@ const futuresStore = useFuturesStore()
 const spotAccountStore = useSpotAccountStore()
 const selectedRow = shallowRef<Model.TaaccountDigitalsRsp>()
 
-const { currencyid = 0, goodscurrencyid = 0 } = futuresStore.getQuoteInfo({ goodsid: props.goodsId }) ?? {}
+const { currencyid = 0, goodscurrencyid = 0 } = futuresStore.getQuoteItem({ goodsid: props.goodsId }) ?? {}
 
 const accountList = computed(() => spotAccountStore.filterAccountsByCurrencyId(currencyid, goodscurrencyid))
 

+ 1 - 1
src/packages/digital/views/spot/components/order/cancel/index.vue

@@ -1,5 +1,5 @@
 <template>
-    <Dialog v-model:show="showDialog" title="提示" show-cancel-button :before-close="onBeforeClose" @closed="onClosed"
+    <Dialog v-model:show="showDialog" show-cancel-button :before-close="onBeforeClose" @closed="onClosed"
         message="是否撤销?">
     </Dialog>
 </template>

+ 1 - 1
src/packages/digital/views/spot/components/order/index.vue

@@ -113,7 +113,7 @@ const { loading, pageIndex, pageCount, run } = useRequest(queryDigitalTradeOrder
 })
 
 const tableList = computed(() => dataList.value.map((e) => {
-    const quoteItem = futuresStore.getQuoteInfo({ goodsid: e.goodsid })
+    const quoteItem = futuresStore.getQuoteItem({ goodsid: e.goodsid })
 
     return {
         ...e,

+ 1 - 1
src/packages/digital/views/spot/components/statement/index.vue

@@ -15,7 +15,7 @@
                 <dd>
                     <span class="text-small">金额</span>
                     <span :class="item.changevalue > 0 ? 'g-price-up' : 'g-price-down'">
-                        {{ (item.changevalue > 0 ? '+' : '') + item.changevalue }} {{
+                        <b>{{ (item.changevalue > 0 ? '+' : '') + item.changevalue }}</b> {{
                             getDigitalCurrencyName(item.currencyid) }}
                     </span>
                 </dd>

+ 1 - 1
src/packages/digital/views/spot/components/trade/index.vue

@@ -94,7 +94,7 @@ const { loading, pageIndex, pageCount, run } = useRequest(queryDigitalTradeTrade
 })
 
 const tableList = computed(() => dataList.value.map((e) => {
-    const quoteItem = futuresStore.getQuoteInfo({ goodsid: e.goodsid })
+    const quoteItem = futuresStore.getQuoteItem({ goodsid: e.goodsid })
 
     return {
         ...e,

+ 1 - 1
src/packages/digital/views/spot/goods/chart/index.vue

@@ -76,7 +76,7 @@ const { getQueryStringToNumber, routerBack } = useNavigation()
 const goodsid = getQueryStringToNumber('id')
 const futuresStore = useFuturesStore()
 
-const quote = computed(() => futuresStore.getQuoteInfo({ goodsid }))
+const quote = computed(() => futuresStore.getQuoteItem({ goodsid }))
 </script>
 
 <style lang="less">

+ 1 - 1
src/packages/digital/views/spot/goods/detail/index.vue

@@ -122,7 +122,7 @@ const formData = reactive<Partial<Proto.DigitalOrderReq>>({
     OrderQty: 1,
 })
 
-const quote = computed(() => futuresStore.getQuoteInfo({ goodsid: goodsId }))
+const quote = computed(() => futuresStore.getQuoteItem({ goodsid: goodsId }))
 const baseAccount = computed(() => spotAccountStore.getAccountItem({ currencyid: quote.value?.goodscurrencyid })) // 基础货币账户
 const quoteAccount = computed(() => spotAccountStore.getAccountItem({ currencyid: quote.value?.currencyid })) // 计价货币账户
 

+ 1 - 1
src/packages/digital/views/wallet/components/record/index.vue

@@ -16,7 +16,7 @@
                 <thead>
                     <tr>
                         <th colspan="2">
-                            <span>充值(USDT)</span>
+                            <span>充值({{ getDigitalCurrencyName(item.currencyid) }})</span>
                             <time class="text-small">{{ formatDate(item.applytime) }}</time>
                         </th>
                     </tr>

+ 1 - 1
src/packages/digital/views/wallet/components/spot/composables.ts

@@ -12,7 +12,7 @@ export const useSpotAccountStore = defineStore('spotAaccount', () => {
     }
 
     const getAccountItem = (props: Partial<Model.TaaccountDigitalsRsp>) => {
-        return dataList.value.find(item => isMatch(item, props))
+        return dataList.value.find((item) => isMatch(item, props))
     }
 
     // 获取可用余额

+ 6 - 1
src/stores/modules/account.ts

@@ -160,6 +160,10 @@ export const useAccountStore = defineStore(() => {
         }
     })
 
+    const filterAccountsByCurrencyId = (...currencyIds: number[]) => {
+        return accountComputedList.value.filter((e) => currencyIds.includes(e.currencyid))
+    }
+
     const getAccountItem = (prop: Partial<Model.TaAccountsRsp>) => {
         return accountComputedList.value.find(item => isMatch(item, prop))
     }
@@ -220,6 +224,7 @@ export const useAccountStore = defineStore(() => {
         currentAccount,
         moneyChangedNotify,
         getAccountList,
-        getAccountItem
+        getAccountItem,
+        filterAccountsByCurrencyId
     }
 })

+ 3 - 3
src/stores/modules/futures.ts

@@ -193,7 +193,7 @@ export const useFuturesStore = defineStore(() => {
         return computed(() => state.quotationList.find((e) => e.goodscode === code || e.goodsid === code))
     }
 
-    const getQuoteInfo = (query: Partial<Model.GoodsQuote>) => {
+    const getQuoteItem = (query: Partial<Model.GoodsQuote>) => {
         return state.quotationList.find(item => isMatch(item, query))
     }
 
@@ -210,7 +210,7 @@ export const useFuturesStore = defineStore(() => {
 
     // 通过 goodscode 获取实时行情报价
     const getQuotePrice = (goodscode: string) => {
-        const { last = 0, presettle = 0, preclose = 0 } = getQuoteInfo({ goodscode }) ?? {}
+        const { last = 0, presettle = 0, preclose = 0 } = getQuoteItem({ goodscode }) ?? {}
         if (last != 0.0) {
             return last
         } else if (presettle != 0.0) {
@@ -583,7 +583,7 @@ export const useFuturesStore = defineStore(() => {
         quotePushNotify,
         getGoods,
         goodsdisplay,
-        getQuoteInfo,
+        getQuoteItem,
         getFeeValue
     }
 })

+ 7 - 0
src/stores/modules/position.ts

@@ -1,4 +1,5 @@
 import { reactive, computed, toRefs } from 'vue'
+import { isMatch } from 'lodash'
 import { handlePriceColor, round } from '@/filters'
 import { BuyOrSell } from '@/constants/order'
 import { queryTradePosition, querySBYJMyOrders } from '@/services/api/order'
@@ -225,6 +226,11 @@ export const useSBYJOrderStore = defineStore(() => {
         }
     }
 
+    // 过滤持仓列表
+    const filterOrderList = (props: Partial<Model.SBYJMyOrderRsp['tHDetailEx']>) => {
+        return orderComputedList.value.filter((e) => isMatch(e.tHDetailEx, props))
+    }
+
     const getOrderListByGoodsId = (goodsId = 0) => {
         return orderComputedList.value.filter((e) => e.tHDetailEx.goodsID === goodsId)
     }
@@ -249,6 +255,7 @@ export const useSBYJOrderStore = defineStore(() => {
         calRiskRate,
         calUseMargin,
         calReturnRate,
+        filterOrderList,
         getOrderListByGoodsId,
         calcFloatpl,
         eventNotify,

+ 5 - 1
src/types/model/bank.d.ts

@@ -213,6 +213,8 @@ declare namespace Model {
         relationorderid: string; // 关联单号
         remark: string; // 备注
         trademode: number; // 交易模式
+        changetypeenumcode: string; // 变更类型枚举项代码(operateType 或 accountBusinessCode)
+        changetypeenumvalue: number; // 变更类型枚举项值(operateType 或 accountBusinessCode 对应值)
     }
 
     /// 查询实名认证信息
@@ -294,7 +296,9 @@ declare namespace Model {
         // 备注
         remark: string
         // 交易模式
-        trademode: number
+        trademode: number;
+        changetypeenumcode: string; // 变更类型枚举项代码(operateType 或 accountBusinessCode)
+        changetypeenumvalue: number; // 变更类型枚举项值(operateType 或 accountBusinessCode 对应值)
     }
 
 

+ 6 - 2
src/types/model/order.d.ts

@@ -822,6 +822,10 @@ declare namespace Model {
         /// 委托单号
         orderID?: number
         incOrderID?: string; // 增量委托单号
+        goodsID?: number; // 商品ID
+        page?: number; // 页码
+        pagesize?: number; // 每页条数
+        pageflag?: number; // 分页标志 0-page从0开始 1-page从1开始
     }
 
     /*  查询我的订单/掉期委托 响应*/
@@ -1473,6 +1477,7 @@ declare namespace Model {
         userId?: number
         /// 商品ID
         goodsId?: number
+        accountId?: string; // 资金账户
     }
 
     interface TradeHolderDetailEx {
@@ -1748,13 +1753,12 @@ declare namespace Model {
     /** 查询我的订单 请求 */
     interface TradeHolderDetailExReq {
         accountid?: number; // 资金账户
-        tradedate?: number; // 交易日(yyyyMMdd)
+        tradedate?: string; // 交易日(yyyyMMdd)
         goodsid?: number; // 商品ID
         holderqty?: number; // 持仓数量
         page?: number; // 页码
         pagesize?: number; // 每页条数
         marketids?: string, // 目标市场ID列表,格式 1,2,3
-        holderqty?: number // 持仓数量 
         trademodes?: string, // 交易模式列表,格式 10,53,52
     }