Parcourir la source

Merge branch 'v20' of http://192.168.31.240:3000/MTP2.0_New/MTP20_WEB_GLOBAL into v20

li.shaoyi il y a 1 an
Parent
commit
922b74cc24

+ 1 - 1
src/packages/mobile/router/section.ts

@@ -60,7 +60,7 @@ const pageRoutes: RouteRecordRaw[] = [
             {
                 path: 'trade',
                 name: 'pricing-trade',
-                component: () => import('@mobile/views/pricing/trade/Index.vue'),
+                component: () => import('@mobile/views/pricing/trade/v2/Index.vue'),
             }
         ]
     },

+ 292 - 0
src/packages/mobile/views/pricing/trade/v2/Index.vue

@@ -0,0 +1,292 @@
+<template>
+    <app-view class="pricing-trade">
+        <template #header>
+            <app-navbar :title="quote ? `${quote.goodscode}` : $t('quote.pricing.title')" >
+                <template #right>
+                    <Icon v-if="system_1012 != '0'" name="bars" size="20px" @click="openComponent('detail')" />
+                </template>
+            </app-navbar>
+        </template>
+        <div class="pricing-trade__form" v-if="quote">
+            <div class="form-buyorsell">
+                <Tabs class="van-tabs--list" v-model:active="formData.BuyOrSell" >
+                    <Tab :title="$t('quote.bid')" :name="BuyOrSell.Buy"></Tab>
+                    <Tab :title="$t('quote.ask')" :name="BuyOrSell.Sell"></Tab>
+                </Tabs>
+            </div>
+            <div class="form-price">
+                <dl v-if="formData.BuyOrSell === BuyOrSell.Buy">
+                    <dd :class="quote.bidColor">{{ handleNumberValue(formatDecimal(quote.ask, quote.decimalplace)) }}
+                    </dd>
+                </dl>
+                <dl v-if="formData.BuyOrSell === BuyOrSell.Sell">
+                    <dd :class="quote.askColor">{{ handleNumberValue(formatDecimal(quote.bid, quote.decimalplace)) }}
+                    </dd>
+                </dl>
+            </div>
+        </div>
+        <!-- 下单 -->
+        <Form ref="formRef" class="g-form__container" @submit="onSubmit">
+            <CellGroup inset>
+                <Field :label="$t('quote.pricing.pricemode')">
+                    <template #input>
+                        <RadioGroup v-model="formData.PriceMode" direction="horizontal" @click="onPriceModeChanged">
+                            <Radio v-for="(item, index) in getPricemode2List()" :key="index" :name="item.value">{{
+                                item.label
+                            }}</Radio>
+                        </RadioGroup>
+                    </template>
+                </Field> 
+                <Field name="OrderQty" :label="$t('quote.pricing.orderqty')">
+                    <template #input>
+                        <div class="g-qty-group">
+                            <div class="g-qty-group__stepper">
+                                <Stepper v-model="formData.OrderQty" theme="round" button-size="22" :min="0"
+                                    :step="qtyStep" integer />
+                            </div>
+                            <RadioGroup v-model="qtyStep" direction="horizontal" @change="onRadioChange">
+                                <Radio v-for="(value, index) in qtyStepList" :key="index" :name="value">{{ value }}
+                                </Radio>
+                            </RadioGroup>
+                        </div>
+                    </template>
+                </Field> 
+                <!-- 限价 -->
+                <Field name="OrderPrice" :rules="formRules.OrderPrice" :label="$t('quote.pricing.price')" v-if="formData.PriceMode === PriceMode.Limit">
+                    <template #input>
+                        <Stepper v-model="formData.OrderPrice" theme="round" button-size="22" :min="0"
+                            :auto-fixed="false" :decimal-length="decimalplace" :step="decimalvalue" />
+                    </template>
+                </Field>
+            </CellGroup>
+        </Form> 
+        <div class="g-form__footer">
+            <template v-if="formData.BuyOrSell === BuyOrSell.Buy">
+                <Button type="danger" block square :disabled="!formData.OrderQty"
+                    @click="onBeforeSubmit(BuildType.Open)" v-if="!quote?.iscannotbuy">{{ $t('operation.order') }}</Button>
+            </template>
+            <template v-if="formData.BuyOrSell === BuyOrSell.Sell">
+                <Button type="danger" block square :disabled="!formData.OrderQty"
+                    @click="onBeforeSubmit(BuildType.Open)"
+                    v-if="!isTrademode16 && !quote?.iscannotsell">{{ $t('operation.order') }}</Button>
+            </template>
+        </div>
+        <Tabs class="van-tabs--list" v-model:active="active" >
+            <template v-for="(item, index) in components.filter(e => e.show === true)" :key="index">
+                <Tab :title="item.title" :name="item.name">
+                    <component :is="item.component" v-bind="{ goodsCode, goodsid, fromTrade, pictureurl }" @callBack="itemBack"/>
+                </Tab>
+            </template>
+        </Tabs>
+        <template #footer>
+            <component ref="componentRef" :is="componentMap.get(componentId)" v-bind="{ goodsCode, goodsid, selectedRow }"
+            @closed="closeComponent" v-if="componentId" />
+        </template> 
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+import { useFuturesStore, useUserStore, i18n } from '@/stores'
+import { useNavigation } from '@mobile/router/navigation'
+import { shallowRef, onMounted, computed, defineAsyncComponent } from 'vue'
+import { Form, Field, Button, FieldRule, FormInstance, Radio, RadioGroup, CellGroup, Icon, Tab, Tabs } from 'vant'
+import { useOrder } from '@/business/trade'
+import { BuyOrSell, BuildType, getPricemode2List, PriceMode } from '@/constants/order'
+import { useComponent } from '@/hooks/component'
+import { fullloading, dialog } from '@/utils/vant'
+import { formatDecimal, handleNumberValue } from '@/filters'
+import Stepper from '@mobile/components/base/stepper/index.vue'
+import eventBus from '@/services/bus'
+
+const { getQueryString, getQueryStringToNumber } = useNavigation()
+const { global: { t } } = i18n
+
+const goodsCode = getQueryString('goodscode') ?? ''
+const goodsid = getQueryStringToNumber('goodsid')
+const buyOrSell = getQueryStringToNumber('buyOrSell')
+const buildType = getQueryStringToNumber('buildType')
+const orderQty = getQueryStringToNumber('orderQty')
+const futuresStore = useFuturesStore()
+const quote = futuresStore.getGoodsQuote(goodsCode)
+const { pictureurl } = futuresStore.getGoods(goodsCode) ?? {}
+// 小数位以及步进值
+const { decimalplace = 0.0 } = quote.value ?? {}
+const quoteminunit = quote.value?.quoteminunit ?? 1.0
+const decimalvalue = Math.pow(10.0, -decimalplace)*(quoteminunit == 0 ? 1 : quoteminunit)
+const isTrademode16 = computed(() => quote.value?.trademode === 16)
+
+const selectedRow = shallowRef<Model.SBYJMyOrderRsp>()
+
+const { getSystemParamValue } = useUserStore()
+const system_1012 = getSystemParamValue('1012') ?? '1'
+
+const { formData, formSubmit } = useOrder()
+const formRef = shallowRef<FormInstance>()
+// 数量步长列表
+const qtyStepList = computed(() => {
+    const system_1009 = Number(getSystemParamValue('1009')) ?? 1
+    return [1*system_1009, 5*system_1009, 10*system_1009, 20*system_1009, 30*system_1009, 50*system_1009]
+}) 
+const qtyStep = shallowRef(qtyStepList.value[0]) // 数量步长
+const fromTrade = true
+
+// 持仓汇总
+const position = shallowRef<Model.TradePositionRsp[]>([]) 
+
+// 点击返回
+const itemBack = (isPosition: number, buyorsell: BuyOrSell, tradeId: string, item: Model.SBYJMyOrderRsp) => {
+    formData.BuyOrSell = buyorsell === BuyOrSell.Buy ? BuyOrSell.Sell : BuyOrSell.Buy
+    if (isPosition === 2) { 
+        selectedRow.value = item
+        // 打开退订
+        openComponent('transfer')
+    }
+}
+
+const { componentRef, componentId, openComponent, closeComponent } = useComponent()
+
+const active = shallowRef(pictureurl != '' ? 'images' : 'cancel')
+
+const components = [
+    {
+        name: 'images',
+        title: t('operation.details'),
+        component: defineAsyncComponent(() => import('../images/Index.vue')),
+        show: pictureurl != ''
+    },
+    {
+        name: 'cancel',
+        title: t('quote.pricing.ordercancel'),
+        component: defineAsyncComponent(() => import('../components/cancel/Index.vue')),
+        show: true
+    },
+    {
+        name: 'position',
+        title: t('quote.pricing.position'),
+        component: defineAsyncComponent(() => import('@mobile/views/order/position/components/pricing/list/Index.vue')),
+        show: true
+    },
+    {
+        name: 'holdlb2',
+        title: t('quote.pricing.orderdetails'),
+        component: defineAsyncComponent(() => import('../holdlb2/Index.vue')),
+        detail: defineAsyncComponent(() => import('@mobile/views/order/position/components/pricing/detail2/Index.vue')),
+        show: true
+    }
+]
+    
+const componentMap = new Map<string, unknown>([
+    ['detail', defineAsyncComponent(() => import('../components/detail/Index.vue'))],
+    ['transfer', defineAsyncComponent(() => import('@mobile/views/order/position/components/pricing/detail2/components/transfer/Index.vue'))]
+])
+
+// 计算市价
+const marketPrice = computed(() => {
+    const { ask = 0, bid = 0 } = quote.value ?? {}
+    return formData.BuyOrSell === BuyOrSell.Buy ? ask : bid
+})
+
+// 表单验证规则
+const formRules: { [key in keyof Proto.OrderReq]?: FieldRule[] } = {
+    OrderQty: [{
+        message: t('quote.pricing.tips1'),
+        validator: () => {
+            return !!formData.OrderQty
+        }
+    }],
+    // 限价
+    MarketMaxSub: [{
+        message: t('quote.pricing.tips3'),
+        validator: (val) => {
+            if (formData.PriceMode === PriceMode.Market) {
+                if (val < 0) {
+                    return t('quote.pricing.tips3')
+                }
+                return true
+            }
+            return !!formData.MarketMaxSub
+        }
+    }],
+    // 限价
+    OrderPrice: [{
+        message: t('quote.pricing.tips2'),
+        validator: () => {
+            if (formData.PriceMode === PriceMode.Limit) {
+                return !!formData.OrderPrice
+            }
+            return true
+        }
+    }],
+}
+
+const onPriceModeChanged = () => {
+    if (formData.PriceMode === PriceMode.Limit) {
+        const { ask = 0, bid = 0 } = quote.value ?? {}
+        formData.OrderPrice = formData.BuyOrSell === BuyOrSell.Buy ? ask : bid
+    }
+}
+
+const onBeforeSubmit = (buildType: BuildType) => {
+    formData.BuildType = buildType
+    if (buildType === BuildType.Close) {
+        const { ask = 0, bid = 0 } = quote.value ?? {}
+        formData.OrderPrice = formData.BuyOrSell === BuyOrSell.Buy ? ask : bid
+
+        const datas = position.value.filter(item => formData.BuyOrSell === BuyOrSell.Buy ? item.buyorsell === BuyOrSell.Sell : item.buyorsell === BuyOrSell.Buy) // 反方向持仓
+        if (datas.length > 0) {
+            formData.OrderQty = datas[0].enableqty
+        }
+    } else {
+        formData.RelatedID = undefined
+    }
+    formRef.value?.submit()
+}
+
+// 委托下单
+const onSubmit = () => {
+    const { goodsid, marketid } = quote.value ?? {}
+    formData.GoodsID = goodsid
+    formData.MarketID = marketid
+    // 市价
+    if (formData.PriceMode === PriceMode.Market) { formData.OrderPrice = marketPrice.value }
+
+    fullloading((hideLoading) => {
+        formSubmit().then(() => {
+            hideLoading()
+            dialog({ message: t('common.submitsuccess'), confirmButtonText: t('operation.confirm') }).then(() => {
+                // 成交通知
+                eventBus.$emit('OrderDealedNtf')
+            })
+        }).catch((err) => {
+            hideLoading(err, 'fail')
+        })
+    })
+}
+
+const onRadioChange = (value: number) => {
+    formData.OrderQty = value
+}
+
+ onMounted(() => {
+    formData.BuyOrSell = BuyOrSell.Buy
+    formData.BuildType = BuildType.Open
+    formData.PriceMode = PriceMode.Market
+    formData.MarketMaxSub = 100.0
+    /// 默认价格和数量
+    const { last = 0, presettle = 0 } = quote.value ?? {}
+    formData.OrderPrice = last || presettle
+    formData.OrderQty = qtyStep.value
+
+    /// 如果是从头寸点进来的
+    if ( buildType === BuildType.Close) {
+        formData.OrderQty = orderQty
+        formData.BuyOrSell = buyOrSell
+        formData.BuildType = buildType
+    }
+ })
+
+</script>
+
+<style lang="less">
+@import './index.less';
+</style>

+ 27 - 0
src/packages/mobile/views/pricing/trade/v2/index.css

@@ -0,0 +1,27 @@
+.pricing-trade__form {
+  background-color: #fff;
+  border-radius: 8px;
+  margin: 15px 15px 0px 15px;
+  margin-bottom: 0;
+}
+.pricing-trade__form .form-buyorsell {
+  margin: 5px 8px;
+}
+.pricing-trade__form .form-price {
+  display: flex;
+  padding: 16px 0;
+}
+.pricing-trade__form .form-price dl {
+  flex: 1;
+  text-align: center;
+}
+.pricing-trade__form .form-price dl dt {
+  margin-bottom: 5px;
+}
+.pricing-trade__form .form-price dl dd {
+  font-size: 28px;
+  font-weight: bold;
+}
+.pricing-trade .g-form__footer {
+  margin-bottom: 10px;
+}

+ 35 - 0
src/packages/mobile/views/pricing/trade/v2/index.less

@@ -0,0 +1,35 @@
+.pricing-trade {
+    &__form {
+        background-color: #fff;
+        border-radius: 8px;
+        margin: 15px 15px 0px 15px;
+        margin-bottom: 0;
+
+        .form-buyorsell {
+            margin: 5px 8px;
+        }
+
+        .form-price {
+            display: flex;
+            padding: 16px 0;
+
+            dl {
+                flex: 1;
+                text-align: center;
+
+                dt {
+                    margin-bottom: 5px;
+                }
+
+                dd {
+                    font-size: 28px;
+                    font-weight: bold;
+                }
+            }
+        }
+    }
+
+    .g-form__footer {
+        margin-bottom: 10px;
+    }
+}

+ 156 - 0
src/packages/pc/views/footer/pricing/detail2/components/delivery/index.vue

@@ -0,0 +1,156 @@
+<!-- 挂牌点价-订单明细-交收 -->
+<template>
+    <app-drawer :title="t('operation.delivery')" :width="840" v-model:show="show" :loading="loading" :refresh="refresh">
+        <el-form ref="formRef" class="el-form--horizontal" label-width="140px" :model="formData" :rules="formRules">
+            <el-form-item :label="t('position.goods.goodsname')">
+                <span>{{ selectedRow.goodsCode }}</span>
+            </el-form-item>
+            <el-form-item :label="t('position.goods.buyorsell')">
+                <span>{{ getBuyOrSellName(selectedRow.tHDetailEx.buyOrSell) }}</span>
+            </el-form-item>
+            <el-form-item :label="t('position.goods.curholderamount')">
+                <span>{{ formatDecimal(selectedRow.tHDetailEx.holderAmount, selectedRow.decimalPlace) }}</span>
+            </el-form-item>
+            <el-form-item :label="t('position.goods.curpositionqty')">
+                <span>{{ selectedRow.tHDetailEx.holderQty*selectedRow.agreeUnit + getGoodsUnitName(selectedRow.goodsUnitID) }}</span>
+            </el-form-item>
+            <el-form-item :label="t('position.goods.frozenqty')">
+                <span>{{ selectedRow.tHDetailEx.freezeQty*selectedRow.agreeUnit + getGoodsUnitName(selectedRow.goodsUnitID) }}</span>
+            </el-form-item>
+            <el-form-item :label="t('position.goods.enableqty')">
+                <span>{{ enableqty }}</span>
+            </el-form-item>
+            <el-form-item :label="t('position.goods.mindeliverylot')">
+                <span>{{ mindeliverylot }}</span>
+            </el-form-item>
+            <el-form-item :label="t('position.goods.holddetail.holderprice')">
+                <span>{{ formatDecimal(selectedRow.tHDetailEx.holderPrice, selectedRow.decimalPlace) }}</span>
+            </el-form-item>
+            <el-form-item :label="t('position.goods.closepl')">
+                <span :class="handlePriceColor(selectedRow.tHDetailEx.floatPL)">
+                    {{ formatDecimal(selectedRow.tHDetailEx.floatPL) }}
+                </span>
+            </el-form-item>
+            <el-form-item prop="DeliveryLot" :label="t('position.goods.deliverylot')">
+                <el-input-number :placeholder="t('common.pleaseenter')" v-model="formData.DeliveryLot" :precision="0"
+                    :max="enableqty" :min="0" />
+            </el-form-item>
+            <el-form-item :label="t('position.goods.deliveryqty')">
+                <span>{{ (formData.DeliveryLot ?? 0) * selectedRow.agreeUnit }}{{ selectedRow.goodsUnit }}</span>
+            </el-form-item>
+            <el-form-item class="el-form-item--row" prop="DeliveryInfo"
+                :label="selectedRow.tHDetailEx.buyOrSell === BuyOrSell.Buy ? t('position.goods.address') : t('position.goods.deliveryinfo')">
+                <div class="el-form-item--col">
+                    <el-input type="textarea" :placeholder="selectedRow.tHDetailEx.buyOrSell === BuyOrSell.Buy ? t('position.goods.tips9') : t('position.goods.tips10')"
+                        :rows="3" v-model="formData.DeliveryInfo" />
+                    <el-icon :size="20" style="cursor: pointer;" @click="showAddress = true"
+                        v-if="selectedRow.tHDetailEx.buyOrSell === BuyOrSell.Buy">
+                        <CirclePlusFilled />
+                    </el-icon>
+                </div>
+            </el-form-item>
+        </el-form> 
+        <app-address v-model:show="showAddress" @change="onAddressChange" />
+        <template #footer>
+            <el-button type="info" @click="onCancel(false)">{{ t('operation.cancel') }}</el-button>
+            <el-button type="primary" :disabled="enableqty === 0" @click="onSubmit">{{ t('operation.delivery') }}</el-button>
+        </template> 
+    </app-drawer>
+</template>
+
+<script lang="ts" setup>
+import { ref, PropType, computed } from 'vue'
+import { ElMessage, FormInstance, FormRules } from 'element-plus'
+import { useOfflineDelivery } from '@/business/trade'
+import { getBuyOrSellName, BuyOrSell } from '@/constants/order'
+import { formatDecimal, handlePriceColor, handleRequestBigNumber } from '@/filters'
+import { getGoodsUnitName } from '@/constants/unit'
+import { i18n, useFuturesStore } from '@/stores'
+import AppDrawer from '@pc/components/base/drawer/index.vue'
+import AppAddress from '@pc/components/modules/address/index.vue'
+
+const { t } = i18n.global
+
+const props = defineProps({
+    selectedRow: {
+        type: Object as PropType<Model.SBYJMyOrderRsp & {
+            closepl: number; // 浮动盈亏
+            closeplColor: string; // 浮动盈亏颜色
+        }>,
+        required: true,
+    }
+})
+
+const { formSubmit, formData, loading } = useOfflineDelivery()
+const show = ref(true)
+const refresh = ref(false)
+const showAddress = ref(false)
+const formRef = ref<FormInstance>()
+const futuresStore = useFuturesStore()
+const goods = futuresStore.getGoods(props.selectedRow.goodsCode)
+
+const { mindeliverylot = 0 } = goods ?? {}
+
+// 表单验证规则
+const formRules: FormRules = {
+    DeliveryLot: [{
+        required: true,
+        message: t('position.goods.tips7'),
+        validator: (rule, value, callback) => {
+            if (value >= mindeliverylot) {
+                callback()
+            } else {
+                callback(new Error(t('position.goods.tips8') + `${mindeliverylot}`))
+            }
+        }
+    }],
+    DeliveryInfo: [{
+        required: true,
+        message: props.selectedRow.tHDetailEx.buyOrSell === BuyOrSell.Buy ? t('position.goods.tips9') : t('position.goods.tips10'),
+        validator: () => {
+            return !!formData.DeliveryInfo
+        }
+    }],
+}
+
+// 可用重量
+const enableqty = computed(() => {
+    const { tHDetailEx, agreeUnit } = props.selectedRow
+    return (tHDetailEx.holderQty - tHDetailEx.freezeQty) * agreeUnit
+}) 
+
+// 选择地址
+const onAddressChange = (item: Model.UserReceiveInfoRsp) => {
+    const contact = `${item.receivername} ${item.phonenum}`
+    const address = `${item.provincename} ${item.cityname} ${item.districtname} ${item.address}`
+    formData.DeliveryInfo = [contact, address].join('\n')
+}
+
+const onCancel = (isRefresh = false) => {
+    show.value = false
+    refresh.value = isRefresh
+}
+
+const onSubmit = () => {
+    formRef.value?.validate((valid) => {
+        if (valid) {
+            const { buyOrSell, tradeID } = props.selectedRow.tHDetailEx
+            const { goodsCode } = props.selectedRow
+            const { marketid, goodsid } = goods ?? {}
+            /// 市场ID
+            formData.Header = { MarketID: marketid, GoodsID: goodsid }
+            formData.GoodsCode = goodsCode
+            formData.GoodsID = goodsid
+            formData.BuyOrSell = buyOrSell
+            formData.TradeID = handleRequestBigNumber(tradeID)
+
+            formSubmit().then(() => {
+                ElMessage.success(t('common.submitsuccess'))
+                onCancel(true)
+            }).catch((err) => {
+                ElMessage.error(t('common.submitfailure') + err)
+            })
+        }
+    })
+}
+</script>

+ 21 - 9
src/packages/pc/views/footer/pricing/detail2/index.vue

@@ -36,8 +36,9 @@
         <!-- 浮动权益-->
         <template #profitLoss="{ row }">
             <!-- 待优化 -->
-            <span :class="handlePriceColor(sbyjOrderStore.calcFloatpl(row))">{{
-                formatDecimal(sbyjOrderStore.calcFloatpl(row)) }}</span>
+            <span :class="handlePriceColor(sbyjOrderStore.calcFloatpl(row))">
+                {{ formatDecimal(sbyjOrderStore.calcFloatpl(row)) }}
+            </span>
         </template>
         <!-- 风险率 -->
         <!-- <template #riskRate="{ row }">
@@ -57,6 +58,8 @@
         <template #operate="{ row }">
             <el-button type="danger" size="small" @click="showComponent('transfer', row)">{{ t('operation.close')
                 }}</el-button>
+            <el-button type="primary" size="small" @click="showComponent('delivery', row)">{{ t('operation.delivery')
+                }}</el-button>
         </template>
         <template #append v-if="showLoadMore">
             <el-button size="small" plain @click="loadMore">{{ t('common.loadMore') }}</el-button>
@@ -75,20 +78,18 @@ import { formatDecimal, formatDate, handlePriceColor } from '@/filters'
 import { getGoodsUnitName } from '@/constants/unit'
 import { useComponent } from '@/hooks/component'
 import { useLocalPagination } from '@/hooks/pagination'
-import { useTableColumnsStore, i18n } from '@/stores'
+import { i18n } from '@/stores'
 import { useSBYJOrderStore } from '@/stores'
 import AppTable from '@pc/components/base/table/index.vue'
 
 const componentMap = new Map<string, unknown>([
     ['transfer', defineAsyncComponent(() => import('./components/transfer/index.vue'))],
+    ['delivery', defineAsyncComponent(() => import('./components/delivery/index.vue'))],
 ])
 
 const { t } = i18n.global
-const { getTableColumns } = useTableColumnsStore()
 const { tableList, showLoadMore, initTableData, loadMore } = useLocalPagination<Model.SBYJMyOrderRsp>()
-
 const selectedRow = shallowRef<Model.SBYJMyOrderRsp>()
-const tableColumns = shallowRef<Model.TableColumn[]>([])
 
 const sbyjOrderStore = useSBYJOrderStore()
 
@@ -105,9 +106,20 @@ const showComponent = (componentName: string, row: Model.SBYJMyOrderRsp) => {
     openComponent(componentName)
 }
 
-getTableColumns('order-detail2', true).then((res) => {
-    tableColumns.value = res
-})
+const tableColumns = shallowRef<Model.TableColumn[]>([
+    { field: 'goodsname', label: 'position.goods.goodsname' },
+    { field: 'buyorsell', label: 'position.goods.buyorsell' },
+    { field: 'holderqty', label: 'position.goods.holddetail.holderqty' },
+    { field: 'freezeqty', label: 'position.goods.holddetail.freezeqty' },
+    { field: 'enableqty', label: 'position.goods.holddetail.enableqty' },
+    { field: 'holderprice', label: 'position.goods.holddetail.holderprice' },
+    { field: 'holderamount', label: 'position.goods.holddetail.holderamount' },
+    { field: 'usedMargin', label: 'position.goods.holddetail.usedMargin' },
+    { field: 'profitLoss', label: 'position.goods.holddetail.profitLoss' },
+    { field: 'tradetime', label: 'position.goods.holddetail.tradetime' },
+    { field: 'tradeid', label: 'position.goods.holddetail.tradeid' },
+    { field: 'operate', label: 'common.operate', fixed: 'right', width: 140 },
+])
 
 onMounted(() => {
     // 待优化

+ 1 - 2
src/packages/thj/views/home/main/Index.vue

@@ -52,14 +52,13 @@ import { parsePercent, handleNumberValue, formatDecimal, formatDate } from '@/fi
 import { queryQuoteGoodsList } from '@/services/api/swap'
 import { queryImageConfigs } from '@/services/api/common'
 import { queryNewTitles } from '@/services/api/news'
-import { useGlobalStore, useUserStore, useFuturesStore } from '@/stores'
+import { useUserStore, useFuturesStore } from '@/stores'
 import quoteSocket from '@/services/websocket/quote'
 import Banner from '@mobile/components/base/banner/index.vue'
 
 const LineChart = defineAsyncComponent(() => import('@mobile/components/modules/echarts/line/index.vue'))
 
 const subscribe = quoteSocket.createSubscribe()
-const globalStore = useGlobalStore()
 const userStore = useUserStore()
 const futuresStore = useFuturesStore()
 const refreshing = shallowRef(false) // 是否处于加载中状态

+ 1 - 1
src/packages/tss/views/mine/Index.vue

@@ -23,7 +23,7 @@
                     <div class="profile-account">
                         <div class="profile-account-first">
                             <span>{{ $t('account.account') }}</span>
-                            <Icon name="checked" size="14" color="#CC0000" ></Icon>
+                            <Icon name="checked" size="14" color="#46D63C" ></Icon>
                         </div>
                         <span>{{ currentAccount.accountid ?? 0 }}</span>
                     </div>