Handy_Cao пре 2 месеци
родитељ
комит
1d26f39ada

+ 1 - 1
oem/sbyj/config/appconfig.json

@@ -3,7 +3,7 @@
   "appName": "水贝亿爵",
   "version": "1.0.23",
   "versionCode": "100023",
-  "apiUrl": "http://192.168.31.158:15240/cfg?key=dev_104",
+  "apiUrl": "http://192.168.31.204:8080/cfg?key=test_204",
   "tradeChannel": "ws",
   "modules": [
     "register",

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

@@ -4,51 +4,44 @@
             <thead>
                 <tr>
                     <th colspan="3">
-                        <span>资金({{ currentAccount.accountid }})</span>
+                        <span>资金({{ taAccount.accountid }})</span>
                     </th>
                 </tr>
             </thead>
-            <tbody>
+            <tbody @click="navigateTo('contract-detail', taAccount.accountid)">
                 <tr>
                     <td colspan="2">
                         <span class="text-small">账户权益(USDT)</span>
-                        <span>{{ currentAccount.balance }}</span>
+                        <span>{{ taAccount.balance }}</span>
                     </td>
                     <td>
                         <span class="text-small">浮动盈亏</span>
-                        <span>{{ currentAccount.closepl }}</span>
+                        <span>{{ taAccount.closepl }}</span>
                     </td>
                 </tr>
                 <tr>
                     <td>
                         <span class="text-small">可用(USDT)</span>
-                        <span>{{ currentAccount.currentbalance }}</span>
+                        <span>{{ taAccount.currentbalance }}</span>
                     </td>
                     <td>
                         <span class="text-small">占用(USDT)</span>
-                        <span>{{ currentAccount.usedmargin }}</span>
+                        <span>{{ taAccount.usedmargin }}</span>
                     </td>
                     <td>
                         <span class="text-small">冻结(USDT)</span>
-                        <span>{{ currentAccount.freezeMargin }}</span>
+                        <span>{{ taAccount.freezeMargin }}</span>
                     </td>
                 </tr>
             </tbody>
-            <tfoot>
-                <tr>
-                    <td colspan="3">
-                        <Button size="small" @click="navigateTo('wallet-transfer', 0)">划转</Button>
-                    </td>
-                </tr>
-            </tfoot>
         </table>
     </div>
 </template>
 
 <script lang="ts" setup>
-import { Button } from 'vant'
 import { useNavigation } from '@mobile/router/navigation'
-import { useAccountStore } from '@/stores'
+import { useAccountStore, useFuturesStore } from '@/stores'
+import { computed } from 'vue'
 
 const props = defineProps({
     goodsId: {
@@ -56,8 +49,13 @@ const props = defineProps({
     }
 })
 
+const goods = useFuturesStore().getGoods(props.goodsId ?? 0)
 const accountStore = useAccountStore()
-const { currentAccount } = accountStore.$toRefs()
+const { accountComputedList } = accountStore.$toRefs()
+
+const taAccount = computed(() => {
+    return accountComputedList.value.find( e => e.currencyid === goods?.currencyid)
+})
 
 const { router } = useNavigation()
 
@@ -65,8 +63,10 @@ const navigateTo = (name: string, accountId: number) => {
     router.push({
         name,
         query: {
+            goodsId: props.goodsId,
             id: accountId
         }
     })
 }
+
 </script>

+ 72 - 48
src/packages/digital/views/contract/components/order/index.vue

@@ -1,48 +1,60 @@
 <template>
-    <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">委托价格(USDT)</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" />
-    </div>
+    <app-pull-refresh 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-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>
+                            <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">委托价格(USDT)</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" />
+        </div>
+    </app-pull-refresh>
 </template>
 
 <script lang="ts" setup>
@@ -53,18 +65,33 @@ import { useComponent } from '@/hooks/component'
 import { queryTradeOrderDetail } from '@/services/api/order'
 import { formatDate, formatDecimal } from '@/filters'
 import { getBuyOrSellName, getWRTradeOrderStatusName } from '@/constants/order'
+import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
+import AppSelect from '@mobile/components/base/select/index.vue'
 
 const props = defineProps({
     goodsId: Number
 })
 
+const dateType = shallowRef(0)
+
+const options = shallowRef([
+    { label: '当前', value: 0 },
+    { label: '历史', value: 1 }
+])
+
 const error = shallowRef(false)
 const dataList = shallowRef<Model.TradeOrderDetailRsp[]>([])
+const pullRefreshRef = shallowRef()
+const selectedRow = shallowRef<Model.TradeOrderDetailRsp>()
 
 const componentMap = new Map<string, unknown>([
     ['Cancel', defineAsyncComponent(() => import('./cancel/index.vue'))], // 撤销
 ])
 
+const { componentRef, componentId, openComponent, closeComponent } = useComponent(() => {
+    pullRefreshRef.value?.refresh()
+})
+
 const { loading, pageIndex, pageCount, run } = useRequest(queryTradeOrderDetail, {
     defaultParams: {
         pagesize: 20,
@@ -80,13 +107,10 @@ const { loading, pageIndex, pageCount, run } = useRequest(queryTradeOrderDetail,
     }
 })
 
-const selectedRow = shallowRef<Model.TradeOrderDetailRsp>()
-
-const { componentRef, componentId, openComponent, closeComponent } = useComponent()
-
 // 撤销
 const cancelOrder = (item: Model.TradeOrderDetailRsp) => {
     selectedRow.value = item
     openComponent('Cancel')
 }
+
 </script>

+ 92 - 68
src/packages/digital/views/contract/components/position/index.vue

@@ -1,72 +1,85 @@
 <!--  合约 - 商品交易 - 持仓单 -->
 <template>
-    <div class="g-detail-table">
-        <table cellspacing="0" cellpadding="0" v-for="(item, index) in orderComputedList" :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.buyorsell ? 'g-price-up' : 'g-price-down'">
-                            {{ getBuyOrSellName(item.tHDetailEx.buyOrSell) }}
-                        </span>
-                    </th>
-                </tr>
-                <tr>
-                    <td colspan="2">
-                        <span class="text-small">浮动盈亏( {{ getCurrencyName(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">保证金( {{ getCurrencyName(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">持仓价格( {{ getCurrencyName(item.currencyid) }})</span>
-                        <span>{{ formatDecimal(item.tHDetailEx.holderPrice, item.decimalPlace) }}</span>
-                    </td>
-                    <td>
-                        <span class="text-small">持金额( {{ getCurrencyName(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>
+    <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 orderComputedList" :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.buyorsell ? 'g-price-up' : 'g-price-down'">
+                                {{ getBuyOrSellName(item.tHDetailEx.buyOrSell) }}
+                            </span>
+                        </th>
+                    </tr>
+                    <tr>
+                        <td colspan="2">
+                            <span class="text-small">浮动盈亏( {{ getCurrencyName(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">保证金( {{ getCurrencyName(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">持仓价格( {{ getCurrencyName(item.currencyid) }})</span>
+                            <span>{{ formatDecimal(item.tHDetailEx.holderPrice, item.decimalPlace) }}</span>
+                        </td>
+                        <td>
+                            <span class="text-small">持金额( {{ getCurrencyName(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>
 </template>
 
 <script lang="ts" setup>
@@ -77,19 +90,30 @@ import { useComponent } from '@/hooks/component'
 import { useSBYJOrderStore } from '@/stores'
 import { formatDate, formatDecimal, formatAmount, parsePercent } from '@/filters'
 import { getCurrencyName } from '@/constants/order'
+import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
+import AppSelect from '@mobile/components/base/select/index.vue'
 
 defineProps({
     goodsId: Number
 })
 
+const dateType = shallowRef(0)
+
+const options = shallowRef([
+    { label: '当前', value: 0 },
+    { label: '历史', value: 1 }
+])
+
 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, $toRefs, calRiskRate, calReturnRate, calUseMargin } = useSBYJOrderStore()
-const { orderComputedList } = $toRefs()
+const { orderComputedList, loading, error } = $toRefs()
 
 const { componentRef, componentId, openComponent, closeComponent } = useComponent(() => getSBYJMyOrders())
 

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

@@ -1,8 +1,116 @@
 <template>
-    <div>
-        流水
-    </div>
+    <app-pull-refresh ref="pullRefreshRef" class="bank-statement" v-model:loading="loading" v-model:error="error" v-model:pageIndex="pageIndex"
+        :page-count="pageCount" @refresh="run">
+        <CellGroup>
+            
+            <Field name="operateType" :label="$t('banksign.fundstype')" is-link>
+                <template #input>
+                    <app-select v-model="operatetype" :placeholder="$t('banksign.pleasechoicefundstype')" :options="operateTypeSearchList" :optionProps="{ label: 'label', value: 'value' }" @confirm="onConfirm"/>
+                </template>
+            </Field>
+        </CellGroup>
+        <app-list class="bank-statement__table" :columns="columns" :data-list="dataList">
+            <template #createtime="{ value }">
+                <span>{{ formatDate(value, 'YYYY-MM-DD') }}</span>
+                <span>{{ formatDate(value, 'HH:mm:ss') }}</span>
+            </template>
+             <!-- 操作类型 -->
+            <template #operatetypename="{ row }">
+                {{ operatetypename(row) }}
+            </template>
+        </app-list>
+    </app-pull-refresh>
 </template>
 
 <script lang="ts" setup>
-</script>
+import { shallowRef } from 'vue'
+import { CellGroup, Field } from 'vant'
+import { formatDate } from '@/filters'
+import { useRequest } from '@/hooks/request'
+import { queryAmountLog } from '@/services/api/bank'
+import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
+import AppList from '@mobile/components/base/list/index.vue'
+import { getOperateTypeSearchList } from '@/constants/order'
+import AppSelect from '@mobile/components/base/select/index.vue'
+import { i18n } from '@/stores'
+
+const { global: { t } } = i18n
+const dataList = shallowRef<Model.AmountLogRsp[]>([])
+const error = shallowRef(false)
+/// 资金类型
+const operatetype = shallowRef(0)
+const pullRefreshRef = shallowRef()
+
+/// 查询数据
+const operateTypeSearchList = [{
+    label: t('common.all'),
+    value: 0
+}].concat(getOperateTypeSearchList())
+
+const operatetypename = ((row: Model.AmountLogRsp) => {
+    switch (i18n.global.locale) {
+        case "zh-CN":
+            return row.operatetypename
+        case "zh-TW":
+            return row.operatetypename_tw
+        case "en-US":
+            return row.operatetypenameen
+        case "vi":
+            return row.operatetypenamevi
+        default:
+            return row.operatetypenameth
+    }
+})
+
+const columns: Model.TableColumn[] = [
+    { field: 'createtime', label: t('banksign.capital.createtime') },
+    { field: 'operatetypename', label: t('banksign.capital.operatetypename') },
+    { field: 'amount', label: t('banksign.capital.amount') },
+]
+
+const { loading, pageIndex, pageCount, run } = useRequest(queryAmountLog, {
+    defaultParams: {
+        pagesize: 20,
+        pageflag: 1,
+    },
+    onSuccess: (res) => {
+        if (pageIndex.value === 1) {
+            dataList.value = res.data
+            return
+        } 
+        dataList.value.push(...res.data)
+    },
+    onError: () => {
+        error.value = true
+    }
+})
+
+// 选中资金类型
+const onConfirm = (value: number) => {
+    pageIndex.value = 1
+    run({
+        operateType: value === 0 ? undefined : value.toString()
+    })
+}
+</script>
+
+<style lang="less">
+.bank-statement {
+    padding-top: 10px;
+
+    &__table {
+        td.app-list__column {
+            &:first-child {
+                span:last-child {
+                    color: #999;
+                    font-size: 12px;
+                }
+            }
+
+            &:not(:first-child) {
+                font-size: 16px;
+            }
+        }
+    }
+}
+</style>

+ 102 - 56
src/packages/digital/views/contract/components/trade/index.vue

@@ -1,65 +1,80 @@
 <template>
-    <div class="g-detail-table">
-        <table cellspacing="0" cellpadding="0">
-            <tbody>
-                <tr>
-                    <td>
-                        <app-select v-model="dateType" :options="options" />
-                    </td>
-                </tr>
-            </tbody>
-        </table>
-        <table cellspacing="0" cellpadding="0">
-            <thead>
-                <tr>
-                    <th>
-                        <span>Gold黄金</span>
-                        <time class="text-small">2025-09-01 11:11:11</time>
-                    </th>
-                    <th>
-                        <span class="g-price-down">多开</span>
-                    </th>
-                </tr>
-            </thead>
-            <tbody>
-                <tr>
-                    <td>
-                        <span class="text-small">成交单号</span>
-                        <span>1001718728455010011</span>
-                    </td>
-                    <td>
-                        <span class="text-small">委托状态</span>
-                        <span>已成交</span>
-                    </td>
-                </tr>
-                <tr>
-                    <td>
-                        <span class="text-small">成交价格(USDT)</span>
-                        <span>3,480.88</span>
-                    </td>
-                    <td>
-                        <span class="text-small">手续费(USDT)</span>
-                        <span>100</span>
-                    </td>
-                </tr>
-                <tr>
-                    <td>
-                        <span class="text-small">成交数量(Gold)</span>
-                        <span>100</span>
-                    </td>
-                    <td>
-                        <span class="text-small">平仓盈亏(USDT)</span>
-                        <span>374.379644</span>
-                    </td>
-                </tr>
-            </tbody>
-        </table>
-    </div>
+    <app-pull-refresh 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">
+                <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">
+                <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>
+        <component ref="componentRef" v-bind="{ selectedRow }" :is="componentMap.get(componentId)" @closed="closeComponent"
+            v-if="componentId" />
+    </app-pull-refresh>
 </template>
 
 <script lang="ts" setup>
 import { shallowRef } from 'vue'
+import { useComponent } from '@/hooks/component'
+import { useRequest } from '@/hooks/request'
+import { queryTradeDetail } 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'
 
 const dateType = shallowRef(0)
 
@@ -67,4 +82,35 @@ const options = shallowRef([
     { label: '当前', value: 0 },
     { label: '历史', value: 1 }
 ])
+
+const dataList = shallowRef<Model.TradeDetailRsp[]>([])
+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: '50,16'
+    },
+    onSuccess: (res) => {
+        if (pageIndex.value === 1) {
+            dataList.value = []
+        }
+        dataList.value.push(...res.data)
+    },
+    onError: () => {
+        error.value = true
+    }
+})
+
+const showComponent = (componentName: string, row: Model.TradeDetailRsp) => {
+    selectedRow.value = row
+    openComponent(componentName)
+}
+
 </script>

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

@@ -1,7 +1,8 @@
+<!--  合约 - 合约明细 -->
 <template>
     <app-view class="contract-detail g-form">
         <template #header>
-            <app-navbar title="现货明细" />
+            <app-navbar title="合约明细" />
         </template>
         <Grid :border="false" :column-num="2">
             <GridItem icon="peer-pay" text="划转" :to="{ name: 'wallet-transfer', query: { id: accountId } }" />
@@ -39,7 +40,7 @@
         </div>
         <Tabs v-model:active="tabIndex">
             <Tab title="委托">
-                <contract-order showDatePicker />
+                <contract-order showDatePicker v-bind="{ isHis: true }" />
             </Tab>
             <Tab title="成交">
                 <contract-trade />
@@ -66,16 +67,16 @@ import ContractStatement from '../components/statement/index.vue'
 const { router, getQueryStringToNumber } = useNavigation()
 
 const accountId = getQueryStringToNumber('id')
+const goodsId = getQueryStringToNumber('goodsId')
 const tabIndex = shallowRef(0)
 
 const navigateToContractDetail = () => {
-    const goodsId = accountId
+
     // 多个商品弹出列表选择,单个商品直接跳转
     router.push({
         name: 'contract-goods-detail',
         query: {
-            id: goodsId
-        }
+            id: goodsId        }
     })
 }
 </script>

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

@@ -20,6 +20,14 @@
         </template>
         <Row class="g-layout-block g-layout-block--inset" gutter="10">
             <Col span="12">
+            <span :class="quote.askColor">{{ quote.ask }}</span>
+            </Col>
+            <Col span="12">
+            <span :class="quote.bidColor">{{ quote.bid }}</span>
+            </Col>
+        </Row>
+        <Row class="g-layout-block g-layout-block--inset" gutter="10">
+            <Col span="12">
             <Button type="success" size="small" block>开多</Button>
             </Col>
             <Col span="12">
@@ -47,7 +55,7 @@
                 <Field label="开仓价值"></Field>
             </CellGroup>
             <CellGroup>
-                <Cell title="可用余额" value="0" />
+                <Cell title="可用余额" :value="taAccount?.balance" />
                 <Cell title="可开数量" value="0" />
                 <Cell title="预估手续费" value="0" />
             </CellGroup>
@@ -77,10 +85,9 @@ import { Form, Button, CellGroup, Field, Cell, Tab, Tabs, FieldRule, Col, Row }
 import { EPriceMode, EValidType, EOrderOperateType, EBuildType } from '@/constants/client'
 import { parsePercent } from '@/filters'
 import { useNavigation } from '@mobile/router/navigation'
-import { useFuturesStore } from '@/stores'
+import { useFuturesStore, useSBYJOrderStore, useAccountStore } from '@/stores'
 import { fullloading, dialog } from '@/utils/vant'
 import { useOrder } from '@/business/trade'
-import { useSBYJOrderStore } from '@/stores'
 import AppStepper from '@mobile/components/base/stepper/index.vue'
 import AppSelect from '@mobile/components/base/select/index.vue'
 import ContractPosition from '../../components/position/index.vue'
@@ -96,6 +103,14 @@ const tabIndex = shallowRef(0)
 const { formData, formSubmit } = useOrder()
 const { getSBYJMyOrders } = useSBYJOrderStore()
 const quote = computed(() => futuresStore.getQuoteInfo({ goodsid: goodsId }))
+const goods = computed(() => futuresStore.getGoods(goodsId ?? 0 )) ?? {}
+
+const accountStore = useAccountStore()
+const { accountComputedList } = accountStore.$toRefs()
+
+const taAccount = computed(() => {
+    return accountComputedList.value.find( e => e.currencyid === goods.value?.currencyid)
+})
 
 const options = computed(() => {
     return [{