li.shaoyi há 1 ano atrás
pai
commit
a8e2f257c5

+ 1 - 1
app/package.json

@@ -1,6 +1,6 @@
 {
   "name": "trading-beta",
-  "version": "1.0.18",
+  "version": "1.0.19",
   "main": "main.js",
   "dependencies": {
     "electron-updater": "^6.1.4",

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

@@ -1,8 +1,8 @@
 {
   "appId": "com.muchinfo.sbyj",
   "appName": "水贝亿爵",
-  "version": "1.0.7",
-  "versionCode": "100007",
+  "version": "1.0.8",
+  "versionCode": "100008",
   "apiUrl": "http://192.168.31.171:8080/cfg?key=test_171",
   "tradeChannel": "ws",
   "modules": [

+ 2 - 2
oem/zrwyt/config/appconfig.json

@@ -1,8 +1,8 @@
 {
   "appId": "com.muchinfo.zrwyt",
   "appName": "中融文遗通",
-  "version": "1.0.18",
-  "versionCode": "100018",
+  "version": "1.0.19",
+  "versionCode": "100019",
   "apiUrl": "http://192.168.31.134:8080/cfg?key=test_134",
   "tradeChannel": "ws",
   "modules": [

+ 3 - 4
src/packages/mobile/components/modules/quote/price/index.vue

@@ -120,12 +120,11 @@
                     </li>
                     <li>
                         <span>成交量</span>
-                        <span :class="quote.averagepriceColor">{{
-                            handleNumberValue(quote.totalvolume) }}</span>
+                        <span :class="quote.averagepriceColor">{{ changeUnit(quote.totalvolume) }}</span>
                     </li>
                     <li>
                         <span>成交额</span>
-                        <span>{{ handleNumberValue(quote.totalturnover) }}</span>
+                        <span>{{ changeUnit(quote.totalturnover) }}</span>
                     </li>
                 </ul>
             </div>
@@ -136,7 +135,7 @@
 <script lang="ts" setup>
 import { shallowRef, onMounted, onUnmounted } from 'vue'
 import { Icon, Divider } from 'vant'
-import { parsePercent, handleNumberValue } from '@/filters'
+import { parsePercent, handleNumberValue, changeUnit } from '@/filters'
 import { useFuturesStore } from '@/stores'
 import quoteSocket from '@/services/websocket/quote'
 

+ 15 - 0
src/packages/pc/components/layouts/page/index.less

@@ -32,6 +32,21 @@
                             border-left: 1px solid #363f45;
                         }
                     }
+
+                    .server-status{
+                        display: inline-block;
+                        width: 9px;
+                        height: 9px;
+                        border-radius: 2px;
+                        overflow: hidden;
+
+                        &.green{
+                            background-color: #3ac63a;
+                        }
+                        &.red{
+                            background-color: #ff8200;
+                        }
+                    }
                 }
             }
         }

+ 17 - 2
src/packages/pc/components/layouts/page/index.vue

@@ -47,7 +47,8 @@
           <li>
             <el-popover trigger="hover" title="公式" content="风险率 = (占用 / 净值) * 100%" :width="220">
               <template #reference>
-                <span :class="accountStore.currentAccount.hazardRatioColor" style="cursor: pointer;">风险率:{{ parsePercent(accountStore.currentAccount.hazardRatio) }}</span>
+                <span :class="accountStore.currentAccount.hazardRatioColor" style="cursor: pointer;">风险率:{{
+                  parsePercent(accountStore.currentAccount.hazardRatio) }}</span>
               </template>
             </el-popover>
           </li>
@@ -63,6 +64,11 @@
             <!-- <span>{{ serverTime?.format('MM/DD') }}</span> -->
             <span>{{ serverTime?.format('HH:mm:ss') }}</span>
           </li>
+          <li>
+            <el-tooltip :hide-after="0" :content="`行情服务:${quoteServerStatus ? '已连接' : '未连接'}`">
+              <i :class="['server-status', quoteServerStatus ? 'green' : 'red']"></i>
+            </el-tooltip>
+          </li>
         </ul>
       </div>
     </div>
@@ -72,12 +78,13 @@
 <script lang="ts" setup>
 import { ref, onMounted, onUnmounted, computed } from 'vue'
 import { RouteRecordNormalized, RouteRecordName } from 'vue-router'
+import moment, { Moment } from 'moment'
 import { timerTask } from '@/utils/timer'
 import { parsePercent } from '@/filters'
 import { getServerTime } from '@/services/api/common'
 import { useGlobalStore, useLoginStore, useAccountStore } from '@/stores'
 import eventBus from '@/services/bus'
-import moment, { Moment } from 'moment'
+import quoteSocket from '@/services/websocket/quote'
 import AppIcon from '@pc/components/base/icon/index.vue'
 import AppHeader from '../header/index.vue'
 import AppFooter from '../footer/index.vue'
@@ -89,6 +96,7 @@ const loginStore = useLoginStore()
 const accountStore = useAccountStore()
 const fullLoading = ref(false)
 const isCollapse = ref(globalStore.isMobile)
+const quoteServerStatus = ref(false) // 行情服务连接状态
 const footerWinType = ref(0) // -1最小化,0默认,1最大化
 const serverTime = ref<Moment>()
 
@@ -179,6 +187,11 @@ const documentVisibilityStateNotify = eventBus.$on('DocumentVisibilityStateNotif
   }
 })
 
+// 接收行情服务连接状态通知
+const quoteServerStatusNotify = eventBus.$on('QuoteServerStatusNotify', (status) => {
+  quoteServerStatus.value = status as boolean
+})
+
 // 接收交易服务重连通知
 const tradeServerReconnectNotify = eventBus.$on('TradeServerReconnectNotify', () => {
   fullLoading.value = true
@@ -190,6 +203,7 @@ const tradeServerReconnectSuccessNotify = eventBus.$on('TradeServerReconnectSucc
 })
 
 onMounted(() => {
+  quoteServerStatus.value = quoteSocket.getStatus() === 'Connected'
   serverTime.value = moment(new Date())
   timerTask.setInterval(() => {
     serverTime.value = moment(serverTime.value).add(1000, 'ms')
@@ -201,6 +215,7 @@ onUnmounted(() => {
   timerTask.clearInterval('refreshTime')
   timerTask.clearTimeout('getServerTime')
   documentVisibilityStateNotify.cancel()
+  quoteServerStatusNotify.cancel()
   tradeServerReconnectNotify.cancel()
   tradeServerReconnectSuccessNotify.cancel()
 })

+ 1 - 1
src/packages/pc/components/modules/quote/price/index.vue

@@ -55,7 +55,7 @@
                 </li>
                 <li v-if="quote.marketid != 99201">
                     <span>成交额</span>
-                    <span>{{ quote.totalturnover ? changeUnit(quote.totalturnover) : handleNumberValue() }}</span>
+                    <span>{{ changeUnit(quote.totalturnover) }}</span>
                 </li>
                 <li v-if="globalStore.hasQuotationProperty('holdvolume')">
                     <span>持仓量</span>

+ 6 - 25
src/packages/zrwyt/views/order/position/Index.vue

@@ -2,28 +2,21 @@
     <app-view>
         <template #header>
             <app-navbar title="我的持仓">
-                <template #right v-if="selectedComponent.detail">
-                    <div class="button-more" @click="openComponent(selectedComponent.name)">
+                <template #right>
+                    <div class="button-more" @click="openComponent('detail')">
                         <span>明细</span>
                     </div>
                 </template>
             </app-navbar>
         </template>
-        <Tabs class="van-tabs--list" v-model:active="active" :swipe-threshold="4">
-            <template v-for="(item, index) in components" :key="index">
-                <Tab :title="item.title" :name="index">
-                    <component :is="item.component" />
-                </Tab>
-            </template>
-        </Tabs>
-        <component ref="componentRef" :is="selectedComponent.detail" @closed="closeComponent"
-            v-if="componentId && selectedComponent.detail" />
+        <component :is="components[0].component" />
+        <component ref="componentRef" :is="components[0].detail" @closed="closeComponent"
+            v-if="componentId" />
     </app-view>
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, computed, defineAsyncComponent } from 'vue'
-import { Tab, Tabs } from 'vant'
+import { defineAsyncComponent } from 'vue'
 import { useComponent } from '@/hooks/component'
 
 const components = [
@@ -33,19 +26,7 @@ const components = [
         component: defineAsyncComponent(() => import('@mobile/views/order/position/components/goods/list/Index.vue')),
         detail: defineAsyncComponent(() => import('@mobile/views/order/position/components/goods/detail/Index.vue')),
     },
-    // {
-    //     name: 'presale',
-    //     title: '预售持仓',
-    //     component: defineAsyncComponent(() => import('@mobile/views/order/position/components/presale/list/Index.vue')),
-    // },
-    // {
-    //     name: 'transfer',
-    //     title: '转让持仓',
-    //     component: defineAsyncComponent(() => import('@mobile/views/order/position/components/transfer/list/Index.vue')),
-    // },
 ]
 
-const active = shallowRef(0)
-const selectedComponent = computed(() => components[active.value])
 const { componentRef, componentId, openComponent, closeComponent } = useComponent()
 </script>

+ 1 - 1
src/services/bus/types.ts

@@ -4,7 +4,7 @@
 export enum EventCode {
     DocumentVisibilityStateNotify, // 窗口页面状态通知
     QuotePushNotify, // 行情推送通知
-    QuoteServerReconnectSuccessNotify, // 行情服务重连成功通知
+    QuoteServerStatusNotify, // 行情服务连接状态通知
     TradeServerReconnectNotify, // 交易服务重连通知
     TradeServerReconnectSuccessNotify, // 交易服务重连成功通知
     LoginNotify, // 用户登入通知

+ 16 - 0
src/services/websocket/quote.ts

@@ -17,6 +17,14 @@ export default new (class {
     private subscribeMap = new Map<string, string[]>()
 
     constructor() {
+        this.socket.onOpen = () => {
+            eventBus.$emit('QuoteServerStatusNotify', true)
+        }
+
+        this.socket.onClose = () => {
+            eventBus.$emit('QuoteServerStatusNotify', false)
+        }
+
         this.socket.onReconnect = () => {
             // 重新订阅商品
             this.subscribe()
@@ -38,6 +46,14 @@ export default new (class {
     }
 
     /**
+     * 获取服务连接状态
+     * @returns 
+     */
+    getStatus() {
+        return this.socket.connState
+    }
+
+    /**
      * 开始行情订阅
      */
     private subscribe = timerInterceptor.setDebounce(() => {