li.shaoyi 3 роки тому
батько
коміт
286451f683

+ 2 - 2
src/@next/components/base/echarts/setup.ts

@@ -1,5 +1,5 @@
 import { ref, onMounted, onUnmounted, getCurrentInstance } from 'vue'
-import { debounce } from '@/utils/time'
+import { timerInterceptor } from '@/@next/utils/timer'
 import { echarts, ECOption } from './core'
 import ResizeObserver from 'resize-observer-polyfill'
 
@@ -47,7 +47,7 @@ export function useEcharts() {
             })
 
             // 图表重置大小
-            const resize = debounce(() => {
+            const resize = timerInterceptor.setDebounce(() => {
                 chart.resize && chart.resize();
             }, 50);
 

+ 2 - 2
src/@next/hooks/echarts/candlestick/options.ts

@@ -1,6 +1,6 @@
 import { reactive, watch } from 'vue'
 import { ECOption } from '@/@next/components/base/echarts/core'
-import { throttle } from '@/utils/time'
+import { timerInterceptor } from '@/@next/utils/timer'
 import { getTheme } from '@/common/config/theme'
 import { EchartsDataset, EchartsOptions, Colors } from './interface'
 import moment from 'moment'
@@ -300,7 +300,7 @@ export function useOptions(dataset: EchartsDataset) {
     }
 
     // 动态更新数据
-    const updateOptions = throttle(() => {
+    const updateOptions = timerInterceptor.setThrottle(() => {
         const { candlestick, macd, vol, kdj, cci } = dataset;
 
         options.candlestick = {

+ 2 - 2
src/@next/hooks/echarts/timeline/options.ts

@@ -1,5 +1,5 @@
 import { reactive, watch } from 'vue'
-import { throttle } from '@/utils/time'
+import { timerInterceptor } from '@/@next/utils/timer'
 import { getTheme } from '@/common/config/theme'
 import { echarts } from '@/@next/components/base/echarts/core'
 import { EchartsDataset, EchartsOptions, Colors } from './interface'
@@ -201,7 +201,7 @@ export function useOptions(dataset: EchartsDataset) {
     }
 
     // 动态更新数据
-    const updateOptions = throttle(() => {
+    const updateOptions = timerInterceptor.setThrottle(() => {
         const { colors } = options;
         const { timeline, yestclose } = dataset;
 

+ 186 - 0
src/@next/utils/timer/index.ts

@@ -0,0 +1,186 @@
+import { v4 } from 'uuid'
+
+/**
+ * 定时任务
+ */
+export const timerTask = new (class {
+    private timeoutMap = new Map<string, number>();
+    private intervalMap = new Map<string, number>();
+
+    /**
+     * 设置定时器
+     * @param callback 
+     * @param delay 
+     * @param timerId 
+     */
+    setTimeout(callback: () => void, delay = 100, timerId?: string) {
+        const uuid = timerId || v4();
+        this.clearTimeout(uuid);
+
+        const timer = window.setTimeout(() => {
+            this.timeoutMap.delete(uuid);
+            callback();
+        }, delay)
+
+        this.timeoutMap.set(uuid, timer);
+
+        return {
+            uuid,
+            clear: () => this.clearTimeout(uuid)
+        }
+    }
+
+    /**
+     * 设置周期定时器
+     * @param callback 
+     * @param delay 
+     * @param timerId 
+     */
+    setInterval(callback: () => void, delay = 100, timerId?: string) {
+        const uuid = timerId || v4();
+        this.clearInterval(uuid);
+
+        const timer = window.setInterval(() => {
+            callback();
+        }, delay)
+
+        this.intervalMap.set(uuid, timer);
+
+        return {
+            uuid,
+            clear: () => this.clearInterval(uuid)
+        }
+    }
+
+    /**
+     * 清除定时器
+     * @param keys 
+     */
+    clearTimeout(...keys: string[]) {
+        if (keys.length) {
+            keys.forEach((key) => {
+                if (this.timeoutMap.has(key)) {
+                    window.clearTimeout(this.timeoutMap.get(key));
+                    this.timeoutMap.delete(key);
+                }
+            })
+        } else {
+            for (const [key, value] of this.timeoutMap.entries()) {
+                window.clearTimeout(value);
+                this.timeoutMap.delete(key);
+            }
+        }
+    }
+
+    /**
+     * 清除周期定时器
+     * @param keys 
+     */
+    clearInterval(...keys: string[]) {
+        if (keys.length) {
+            keys.forEach((key) => {
+                if (this.intervalMap.has(key)) {
+                    window.clearInterval(this.intervalMap.get(key));
+                    this.intervalMap.delete(key);
+                }
+            })
+        } else {
+            for (const [key, value] of this.intervalMap.entries()) {
+                window.clearInterval(value);
+                this.intervalMap.delete(key);
+            }
+        }
+    }
+
+    /**
+     * 清除所有定时器
+     */
+    clearAll() {
+        this.clearTimeout();
+        this.clearInterval();
+    }
+})
+
+/**
+ * 定时拦截器
+ */
+export const timerInterceptor = new (class {
+    private debounceMap = new Map<string, number>();
+    private throttleMap = new Map<string, () => void>();
+
+    /**
+     * 函数防抖(等待触发)
+     * @param callback 回调函数
+     * @param delay 延迟毫秒数,默认100毫秒
+     * @returns 
+     */
+    setDebounce<T extends unknown[]>(callback: (...params: T) => void, delay = 100) {
+        let timer = 0;
+        return function (...args: T) {
+            clearTimeout(timer);
+            timer = window.setTimeout(() => {
+                callback(...args);
+            }, delay)
+        }
+    }
+
+    /**
+     * 函数节流(间隔触发)
+     * @param callback 回调函数
+     * @param delay 延迟毫秒数,默认100毫秒
+     * @returns 
+     */
+    setThrottle<T extends unknown[]>(callback: (...params: T) => void, delay = 100) {
+        let timer = 0;
+        return function (...args: T) {
+            if (timer === 0) {
+                timer = window.setTimeout(() => {
+                    callback(...args);
+                    timer = 0;
+                }, delay)
+            }
+        }
+    }
+
+    /**
+     * 函数防抖(等待触发)
+     * @param callback 回调函数
+     * @param delay 延迟毫秒数,默认100毫秒
+     * @param timerId 计时器ID
+     */
+    debounce(callback: () => void, delay = 100, timerId = 'timer') {
+        if (this.debounceMap.has(timerId)) {
+            const t = this.debounceMap.get(timerId);
+            window.clearTimeout(t);
+        }
+
+        const timer = window.setTimeout(() => {
+            callback();
+            this.debounceMap.delete(timerId);
+        }, delay)
+
+        this.debounceMap.set(timerId, timer);
+    }
+
+    /**
+     * 函数节流(间隔触发)
+     * @param callback 回调函数
+     * @param delay 延迟毫秒数,默认100毫秒
+     * @param timerId 计时器ID
+     * @returns 
+     */
+    throttle(callback: () => void, delay = 100, timerId = 'timer') {
+        if (this.throttleMap.has(timerId)) {
+            this.throttleMap.set(timerId, callback); // 更新最新函数
+            return;
+        }
+
+        window.setTimeout(() => {
+            const fn = this.throttleMap.get(timerId);
+            fn && fn();
+            this.throttleMap.delete(timerId);
+        }, delay)
+
+        this.throttleMap.set(timerId, callback);
+    }
+})

+ 42 - 36
src/common/components/searchUser/index.vue

@@ -4,7 +4,8 @@
     <a-spin :spinning="loading">
       <div class="listed">
         <a-form class="inlineForm dialogForm">
-          <a-input-search placeholder="搜索用户名称" class="searchFriendInput noSuffixInput" enter-button v-model:value="searchValue" @change="searchUser">
+          <a-input-search placeholder="搜索用户名称" class="searchFriendInput noSuffixInput" enter-button
+            v-model:value="searchValue" @change="searchUser">
             <template #prefix>
               <SearchOutlined />
             </template>
@@ -42,7 +43,7 @@ import { SearchOutlined } from '@ant-design/icons-vue';
 import { QueryWrSearchUserRsp } from '@/services/go/wrtrade/interface';
 import { queryWrSearchUser } from '@/services/go/wrtrade';
 import { message } from 'ant-design-vue';
-import { debounce } from '@/utils/time'
+import { timerInterceptor } from '@/@next/utils/timer'
 
 export default defineComponent({
   emits: ['update:visible', 'update:selectedValue'],
@@ -71,7 +72,7 @@ export default defineComponent({
     })
 
     // 查询用户
-    const searchUser = debounce(() => {
+    const searchUser = timerInterceptor.setDebounce(() => {
       userList.value = [];
       selectedUser.value = [];
 
@@ -115,44 +116,49 @@ export default defineComponent({
 
 <style lang="less" scoped>
 .listed {
-    flex: 1;
-    padding: 18px 20px 0;
-    .formBar {
-        height: calc(100% - 120px);
-        padding: 0 20px 0 13px;
-        margin-top: 16px;
-        background: @m-grey63;
-        border: 1px solid @m-black45;
-        .item {
-            width: 100%;
-            height: 50px;
-            line-height: 50px;
-            border-bottom: 1px solid @m-black45;
-            font-size: 16px;
-            color: @m-white6;
-        }
+  flex: 1;
+  padding: 18px 20px 0;
+
+  .formBar {
+    height: calc(100% - 120px);
+    padding: 0 20px 0 13px;
+    margin-top: 16px;
+    background: @m-grey63;
+    border: 1px solid @m-black45;
+
+    .item {
+      width: 100%;
+      height: 50px;
+      line-height: 50px;
+      border-bottom: 1px solid @m-black45;
+      font-size: 16px;
+      color: @m-white6;
     }
+  }
 }
+
 .listedBtn {
-    width: 120px;
-    height: 30px;
-    line-height: 30px;
-    background: linear-gradient(0deg, @m-blue2 0%, @m-blue0 100%);
-    border-radius: 3px;
-    color: @m-white0;
-    font-size: 14px;
-    text-align: center;
-    border: 0;
-    &:hover {
-        background: linear-gradient(0deg, @m-blue0-hover 0%, @m-blue2-hover 100%);
-        color: @m-white0-hover;
-    }
+  width: 120px;
+  height: 30px;
+  line-height: 30px;
+  background: linear-gradient(0deg, @m-blue2 0%, @m-blue0 100%);
+  border-radius: 3px;
+  color: @m-white0;
+  font-size: 14px;
+  text-align: center;
+  border: 0;
+
+  &:hover {
+    background: linear-gradient(0deg, @m-blue0-hover 0%, @m-blue2-hover 100%);
+    color: @m-white0-hover;
+  }
 }
+
 .ant-checkbox-group.commonCheckboxGroup {
-    .ant-checkbox-wrapper {
-        span.txt {
-            color: @m-white11;
-        }
+  .ant-checkbox-wrapper {
+    span.txt {
+      color: @m-white11;
     }
+  }
 }
 </style>

+ 2 - 2
src/common/components/tableScroll/index.vue

@@ -10,7 +10,7 @@
 
 <script lang="ts">
 import { defineComponent, ref, onMounted } from 'vue';
-import { debounce } from '@/utils/time';
+import { timerInterceptor } from '@/@next/utils/timer';
 import ResizeObserver from 'resize-observer-polyfill';
 
 export default defineComponent({
@@ -32,7 +32,7 @@ export default defineComponent({
     const scrollElement = ref<HTMLDivElement>();
 
     onMounted(() => {
-      const onresize = debounce((entries: ResizeObserverEntry[]) => {
+      const onresize = timerInterceptor.setDebounce((entries: ResizeObserverEntry[]) => {
         for (const entry of entries) {
           const { height } = entry.contentRect;
           scroll.value.y = (height - props.top) + 'px';

+ 181 - 177
src/services/socket/quota/adapter/index.ts

@@ -8,7 +8,8 @@ import { Package40 } from '@/utils/websocket/package';
 import Long from 'long';
 import moment from 'moment';
 import { SubscribeInfoType } from '../interface';
-import { byteArrayToUInt, subscribeInfosToByteArrary } from './byteUtils';
+import { byteArrayToUInt, subscribeInfosToByteArrary } from './byteUtils'
+import { timerInterceptor } from '@/@next/utils/timer'
 
 /**
  * 构建行情订阅请求包
@@ -132,202 +133,205 @@ export function parseReceivePush(quotationData: any) {
         });
         if (itemQuote) {
             const goods = getGoodsByCode(itemQuote.goodscode);
-            if (goods) {
-                // console.log('goodsQuoteTik', goodsQuoteTik)
-                // 处理报价小数为
-                const decimalplace = goods.decimalplace
-                const num = Math.pow(10, decimalplace)
-                const fn = (value: number) => +(value / num).toFixed(decimalplace)
-                //
-                // 处理 报价小数位
-                const handleDeimalplace = (key: string) => {
-                    return Reflect.has(goodsQuoteTik, key) ? fn(goodsQuoteTik[key]) : itemQuote[key]
-                }
-                // 处理 如果有值则更新值,没有的话,则取上次的值
-                // 注意: 0 也是有效数字
-                const handleNoneValue = (key: string) => {
-                    return Reflect.has(goodsQuoteTik, key) ? goodsQuoteTik[key] : itemQuote[key]
-                }
+            // 节流控制数据刷新,防止推送频率太高导致页面渲染卡顿
+            timerInterceptor.throttle(() => {
+                if (goods) {
+                    // console.log('goodsQuoteTik', goodsQuoteTik)
+                    // 处理报价小数为
+                    const decimalplace = goods.decimalplace
+                    const num = Math.pow(10, decimalplace)
+                    const fn = (value: number) => +(value / num).toFixed(decimalplace)
+                    //
+                    // 处理 报价小数位
+                    const handleDeimalplace = (key: string) => {
+                        return Reflect.has(goodsQuoteTik, key) ? fn(goodsQuoteTik[key]) : itemQuote[key]
+                    }
+                    // 处理 如果有值则更新值,没有的话,则取上次的值
+                    // 注意: 0 也是有效数字
+                    const handleNoneValue = (key: string) => {
+                        return Reflect.has(goodsQuoteTik, key) ? goodsQuoteTik[key] : itemQuote[key]
+                    }
 
-                const changeValue = () => {
-                    // 实时行情由于行情源的问题可能不会下发现量,这时用盘面的总量来计算
-                    if (!goodsQuoteTik.lastvolume) {
-                        if (itemQuote.totalvolume) {
-                            itemQuote.lastvolume = goodsQuoteTik.totalvolume - itemQuote.totalvolume;
+                    const changeValue = () => {
+                        // 实时行情由于行情源的问题可能不会下发现量,这时用盘面的总量来计算
+                        if (!goodsQuoteTik.lastvolume) {
+                            if (itemQuote.totalvolume) {
+                                itemQuote.lastvolume = goodsQuoteTik.totalvolume - itemQuote.totalvolume;
+                            }
                         }
-                    }
-                    // 处理 最高最低价
-                    if (Reflect.has(goodsQuoteTik, 'last')) {
-                        const last = itemQuote.last = handleDeimalplace('last')
-                        if (last < itemQuote.lowest) {
-                            itemQuote.lowest = handleDeimalplace('last')
-                        } else if (itemQuote.lowest === 0) {
-                            // 处理成交的时候,最低价为的情况,需要把最新价赋值给最低价
-                            itemQuote.lowest = handleDeimalplace('last')
-                        } else if (last > itemQuote.highest) {
-                            itemQuote.highest = handleDeimalplace('last')
+                        // 处理 最高最低价
+                        if (Reflect.has(goodsQuoteTik, 'last')) {
+                            const last = itemQuote.last = handleDeimalplace('last')
+                            if (last < itemQuote.lowest) {
+                                itemQuote.lowest = handleDeimalplace('last')
+                            } else if (itemQuote.lowest === 0) {
+                                // 处理成交的时候,最低价为的情况,需要把最新价赋值给最低价
+                                itemQuote.lowest = handleDeimalplace('last')
+                            } else if (last > itemQuote.highest) {
+                                itemQuote.highest = handleDeimalplace('last')
+                            }
                         }
-                    }
 
-                    // 处理价格
-                    itemQuote.decimalplace = decimalplace
+                        // 处理价格
+                        itemQuote.decimalplace = decimalplace
 
-                    itemQuote.ask = handleDeimalplace('ask')
-                    itemQuote.ask2 = handleDeimalplace('ask2')
-                    itemQuote.ask3 = handleDeimalplace('ask3')
-                    itemQuote.ask4 = handleDeimalplace('ask4')
-                    itemQuote.ask5 = handleDeimalplace('ask5')
-                    itemQuote.ask6 = handleDeimalplace('ask6')
-                    itemQuote.ask7 = handleDeimalplace('ask7')
-                    itemQuote.ask8 = handleDeimalplace('ask8')
-                    itemQuote.ask9 = handleDeimalplace('ask9')
-                    itemQuote.ask10 = handleDeimalplace('ask10')
-                    itemQuote.bid = handleDeimalplace('bid')
-                    itemQuote.bid2 = handleDeimalplace('bid2')
-                    itemQuote.bid3 = handleDeimalplace('bid3')
-                    itemQuote.bid4 = handleDeimalplace('bid4')
-                    itemQuote.bid5 = handleDeimalplace('bid5')
-                    itemQuote.bid6 = handleDeimalplace('bid6')
-                    itemQuote.bid7 = handleDeimalplace('bid7')
-                    itemQuote.bid8 = handleDeimalplace('bid8')
-                    itemQuote.bid9 = handleDeimalplace('bid9')
-                    itemQuote.averageprice = handleDeimalplace('averageprice')
-                    itemQuote.grepmarketprice = handleDeimalplace('grepmarketprice')
+                        itemQuote.ask = handleDeimalplace('ask')
+                        itemQuote.ask2 = handleDeimalplace('ask2')
+                        itemQuote.ask3 = handleDeimalplace('ask3')
+                        itemQuote.ask4 = handleDeimalplace('ask4')
+                        itemQuote.ask5 = handleDeimalplace('ask5')
+                        itemQuote.ask6 = handleDeimalplace('ask6')
+                        itemQuote.ask7 = handleDeimalplace('ask7')
+                        itemQuote.ask8 = handleDeimalplace('ask8')
+                        itemQuote.ask9 = handleDeimalplace('ask9')
+                        itemQuote.ask10 = handleDeimalplace('ask10')
+                        itemQuote.bid = handleDeimalplace('bid')
+                        itemQuote.bid2 = handleDeimalplace('bid2')
+                        itemQuote.bid3 = handleDeimalplace('bid3')
+                        itemQuote.bid4 = handleDeimalplace('bid4')
+                        itemQuote.bid5 = handleDeimalplace('bid5')
+                        itemQuote.bid6 = handleDeimalplace('bid6')
+                        itemQuote.bid7 = handleDeimalplace('bid7')
+                        itemQuote.bid8 = handleDeimalplace('bid8')
+                        itemQuote.bid9 = handleDeimalplace('bid9')
+                        itemQuote.averageprice = handleDeimalplace('averageprice')
+                        itemQuote.grepmarketprice = handleDeimalplace('grepmarketprice')
 
-                    itemQuote.iep = handleDeimalplace('iep')
-                    itemQuote.limitdown = handleDeimalplace('limitdown')
-                    itemQuote.limitup = handleDeimalplace('limitup')
+                        itemQuote.iep = handleDeimalplace('iep')
+                        itemQuote.limitdown = handleDeimalplace('limitdown')
+                        itemQuote.limitup = handleDeimalplace('limitup')
 
 
-                    itemQuote.opened = handleDeimalplace('opened')
-                    itemQuote.lastturnover = handleDeimalplace('lastturnover')
-                    itemQuote.nontotalturnover = handleDeimalplace('nontotalturnover')
-                    itemQuote.lastturnover = handleDeimalplace('lastturnover')
-                    itemQuote.preclose = handleDeimalplace('preclose')
-                    itemQuote.settle = handleDeimalplace('settle')
-                    itemQuote.totalturnover = handleDeimalplace('totalturnover')
+                        itemQuote.opened = handleDeimalplace('opened')
+                        itemQuote.lastturnover = handleDeimalplace('lastturnover')
+                        itemQuote.nontotalturnover = handleDeimalplace('nontotalturnover')
+                        itemQuote.lastturnover = handleDeimalplace('lastturnover')
+                        itemQuote.preclose = handleDeimalplace('preclose')
+                        itemQuote.settle = handleDeimalplace('settle')
+                        itemQuote.totalturnover = handleDeimalplace('totalturnover')
 
-                    itemQuote.askorderid = handleNoneValue('askorderid')
-                    itemQuote.askorderid2 = handleNoneValue('askorderid2')
-                    itemQuote.askorderid3 = handleNoneValue('askorderid3')
-                    itemQuote.askorderid4 = handleNoneValue('askorderid4')
-                    itemQuote.askorderid5 = handleNoneValue('askorderid5')
-                    itemQuote.askordervolume = handleNoneValue('askordervolume')
-                    itemQuote.askordervolume2 = handleNoneValue('askordervolume2')
-                    itemQuote.askordervolume3 = handleNoneValue('askordervolume3')
-                    itemQuote.askordervolume4 = handleNoneValue('askordervolume4')
-                    itemQuote.askordervolume5 = handleNoneValue('askordervolume5')
-                    itemQuote.askordervolume6 = handleNoneValue('askordervolume6')
-                    itemQuote.askordervolume7 = handleNoneValue('askordervolume7')
-                    itemQuote.askordervolume8 = handleNoneValue('askordervolume8')
-                    itemQuote.askordervolume9 = handleNoneValue('askordervolume9')
-                    itemQuote.askqueueinfo = handleNoneValue('askqueueinfo')
-                    itemQuote.askvolume = handleNoneValue('askvolume')
-                    itemQuote.askvolume2 = handleNoneValue('askvolume2')
-                    itemQuote.askvolume3 = handleNoneValue('askvolume3')
-                    itemQuote.askvolume4 = handleNoneValue('askvolume4')
-                    itemQuote.askvolume5 = handleNoneValue('askvolume5')
-                    itemQuote.askvolume6 = handleNoneValue('askvolume6')
-                    itemQuote.askvolume7 = handleNoneValue('askvolume7')
-                    itemQuote.askvolume8 = handleNoneValue('askvolume8')
-                    itemQuote.askvolume9 = handleNoneValue('askvolume9')
+                        itemQuote.askorderid = handleNoneValue('askorderid')
+                        itemQuote.askorderid2 = handleNoneValue('askorderid2')
+                        itemQuote.askorderid3 = handleNoneValue('askorderid3')
+                        itemQuote.askorderid4 = handleNoneValue('askorderid4')
+                        itemQuote.askorderid5 = handleNoneValue('askorderid5')
+                        itemQuote.askordervolume = handleNoneValue('askordervolume')
+                        itemQuote.askordervolume2 = handleNoneValue('askordervolume2')
+                        itemQuote.askordervolume3 = handleNoneValue('askordervolume3')
+                        itemQuote.askordervolume4 = handleNoneValue('askordervolume4')
+                        itemQuote.askordervolume5 = handleNoneValue('askordervolume5')
+                        itemQuote.askordervolume6 = handleNoneValue('askordervolume6')
+                        itemQuote.askordervolume7 = handleNoneValue('askordervolume7')
+                        itemQuote.askordervolume8 = handleNoneValue('askordervolume8')
+                        itemQuote.askordervolume9 = handleNoneValue('askordervolume9')
+                        itemQuote.askqueueinfo = handleNoneValue('askqueueinfo')
+                        itemQuote.askvolume = handleNoneValue('askvolume')
+                        itemQuote.askvolume2 = handleNoneValue('askvolume2')
+                        itemQuote.askvolume3 = handleNoneValue('askvolume3')
+                        itemQuote.askvolume4 = handleNoneValue('askvolume4')
+                        itemQuote.askvolume5 = handleNoneValue('askvolume5')
+                        itemQuote.askvolume6 = handleNoneValue('askvolume6')
+                        itemQuote.askvolume7 = handleNoneValue('askvolume7')
+                        itemQuote.askvolume8 = handleNoneValue('askvolume8')
+                        itemQuote.askvolume9 = handleNoneValue('askvolume9')
 
-                    itemQuote.bidorderid = handleNoneValue('bidorderid')
-                    itemQuote.bidorderid2 = handleNoneValue('bidorderid2')
-                    itemQuote.bidorderid3 = handleNoneValue('bidorderid3')
-                    itemQuote.bidorderid4 = handleNoneValue('bidorderid4')
-                    itemQuote.bidorderid5 = handleNoneValue('bidorderid5')
-                    itemQuote.bidordervolume = handleNoneValue('bidordervolume')
-                    itemQuote.bidordervolume2 = handleNoneValue('bidordervolume2')
-                    itemQuote.bidordervolume3 = handleNoneValue('bidordervolume3')
-                    itemQuote.bidordervolume4 = handleNoneValue('bidordervolume4')
-                    itemQuote.bidordervolume5 = handleNoneValue('bidordervolume5')
-                    itemQuote.bidordervolume6 = handleNoneValue('bidordervolume6')
-                    itemQuote.bidordervolume7 = handleNoneValue('bidordervolume7')
-                    itemQuote.bidordervolume8 = handleNoneValue('bidordervolume8')
-                    itemQuote.bidordervolume9 = handleNoneValue('bidordervolume9')
-                    itemQuote.bidqueueinfo = handleNoneValue('bidqueueinfo')
-                    itemQuote.bidvolume = handleNoneValue('bidvolume')
-                    itemQuote.bidvolume2 = handleNoneValue('bidvolume2')
-                    itemQuote.bidvolume3 = handleNoneValue('bidvolume3')
-                    itemQuote.bidvolume4 = handleNoneValue('bidvolume4')
-                    itemQuote.bidvolume5 = handleNoneValue('bidvolume5')
-                    itemQuote.bidvolume6 = handleNoneValue('bidvolume6')
-                    itemQuote.bidvolume7 = handleNoneValue('bidvolume7')
-                    itemQuote.bidvolume8 = handleNoneValue('bidvolume8')
-                    itemQuote.bidvolume9 = handleNoneValue('bidvolume9')
-                    itemQuote.calloptionpremiums = handleNoneValue('calloptionpremiums')
-                    itemQuote.calloptionpremiums2 = handleNoneValue('calloptionpremiums2')
-                    itemQuote.calloptionpremiums3 = handleNoneValue('calloptionpremiums3')
-                    itemQuote.calloptionpremiums4 = handleNoneValue('calloptionpremiums4')
-                    itemQuote.calloptionpremiums5 = handleNoneValue('calloptionpremiums5')
-                    itemQuote.holdincrement = handleNoneValue('holdincrement')
-                    itemQuote.holdvolume = handleNoneValue('holdvolume')
-                    itemQuote.inventory = handleNoneValue('inventory')
-                    itemQuote.lastlot = handleNoneValue('lastlot')
-                    itemQuote.nontotalholdervolume = handleNoneValue('nontotalholdervolume')
-                    itemQuote.nontotallot = handleNoneValue('nontotallot')
-                    itemQuote.nontotalvolume = handleNoneValue('nontotalvolume')
-                    itemQuote.totallot = handleNoneValue('totallot')
-                    itemQuote.totalvolume = handleNoneValue('totalvolume')
-                }
+                        itemQuote.bidorderid = handleNoneValue('bidorderid')
+                        itemQuote.bidorderid2 = handleNoneValue('bidorderid2')
+                        itemQuote.bidorderid3 = handleNoneValue('bidorderid3')
+                        itemQuote.bidorderid4 = handleNoneValue('bidorderid4')
+                        itemQuote.bidorderid5 = handleNoneValue('bidorderid5')
+                        itemQuote.bidordervolume = handleNoneValue('bidordervolume')
+                        itemQuote.bidordervolume2 = handleNoneValue('bidordervolume2')
+                        itemQuote.bidordervolume3 = handleNoneValue('bidordervolume3')
+                        itemQuote.bidordervolume4 = handleNoneValue('bidordervolume4')
+                        itemQuote.bidordervolume5 = handleNoneValue('bidordervolume5')
+                        itemQuote.bidordervolume6 = handleNoneValue('bidordervolume6')
+                        itemQuote.bidordervolume7 = handleNoneValue('bidordervolume7')
+                        itemQuote.bidordervolume8 = handleNoneValue('bidordervolume8')
+                        itemQuote.bidordervolume9 = handleNoneValue('bidordervolume9')
+                        itemQuote.bidqueueinfo = handleNoneValue('bidqueueinfo')
+                        itemQuote.bidvolume = handleNoneValue('bidvolume')
+                        itemQuote.bidvolume2 = handleNoneValue('bidvolume2')
+                        itemQuote.bidvolume3 = handleNoneValue('bidvolume3')
+                        itemQuote.bidvolume4 = handleNoneValue('bidvolume4')
+                        itemQuote.bidvolume5 = handleNoneValue('bidvolume5')
+                        itemQuote.bidvolume6 = handleNoneValue('bidvolume6')
+                        itemQuote.bidvolume7 = handleNoneValue('bidvolume7')
+                        itemQuote.bidvolume8 = handleNoneValue('bidvolume8')
+                        itemQuote.bidvolume9 = handleNoneValue('bidvolume9')
+                        itemQuote.calloptionpremiums = handleNoneValue('calloptionpremiums')
+                        itemQuote.calloptionpremiums2 = handleNoneValue('calloptionpremiums2')
+                        itemQuote.calloptionpremiums3 = handleNoneValue('calloptionpremiums3')
+                        itemQuote.calloptionpremiums4 = handleNoneValue('calloptionpremiums4')
+                        itemQuote.calloptionpremiums5 = handleNoneValue('calloptionpremiums5')
+                        itemQuote.holdincrement = handleNoneValue('holdincrement')
+                        itemQuote.holdvolume = handleNoneValue('holdvolume')
+                        itemQuote.inventory = handleNoneValue('inventory')
+                        itemQuote.lastlot = handleNoneValue('lastlot')
+                        itemQuote.nontotalholdervolume = handleNoneValue('nontotalholdervolume')
+                        itemQuote.nontotallot = handleNoneValue('nontotallot')
+                        itemQuote.nontotalvolume = handleNoneValue('nontotalvolume')
+                        itemQuote.totallot = handleNoneValue('totallot')
+                        itemQuote.totalvolume = handleNoneValue('totalvolume')
+                    }
 
-                goodsQuoteTik.lasttime = moment(goodsQuoteTik.date + goodsQuoteTik.time, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss')
-                // 判断是一下行情时间是否比现在的要早
-                if (goodsQuoteTik.lasttime) {
-                    const quoteTime = moment(goodsQuoteTik.lasttime, 'YYYY-MM-DD HH:mm:ss')
-                    const localTime = moment(itemQuote.lasttime, 'YYYY-MM-DD HH:mm:ss')
-                    if (quoteTime >= localTime) {
+                    goodsQuoteTik.lasttime = moment(goodsQuoteTik.date + goodsQuoteTik.time, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss')
+                    // 判断是一下行情时间是否比现在的要早
+                    if (goodsQuoteTik.lasttime) {
+                        const quoteTime = moment(goodsQuoteTik.lasttime, 'YYYY-MM-DD HH:mm:ss')
+                        const localTime = moment(itemQuote.lasttime, 'YYYY-MM-DD HH:mm:ss')
+                        if (quoteTime >= localTime) {
+                            changeValue()
+                            itemQuote.lasttime = handleNoneValue('lasttime')
+                        }
+                    } else {
+                        // 委托单 没有 行情变更时间
                         changeValue()
-                        itemQuote.lasttime = handleNoneValue('lasttime')
                     }
-                } else {
-                    // 委托单 没有 行情变更时间
-                    changeValue()
-                }
 
 
 
-                // goodsQuoteTik.averageprice = goodsQuoteTik.averageprice ? (fn(goodsQuoteTik.averageprice)) : '--'
-                // goodsQuoteTik.grepmarketprice = goodsQuoteTik.grepmarketprice ? (fn(goodsQuoteTik.grepmarketprice)) : '--'
-                // goodsQuoteTik.highest = goodsQuoteTik.highest ? (fn(goodsQuoteTik.highest)) : '--'
-                // goodsQuoteTik.iep = goodsQuoteTik.iep ? (fn(goodsQuoteTik.iep)) : '--'
-                // goodsQuoteTik.limitdown = goodsQuoteTik.limitdown ? (fn(goodsQuoteTik.limitdown)) : '--'
-                // goodsQuoteTik.limitup = goodsQuoteTik.limitup ? (fn(goodsQuoteTik.limitup)) : '--'
-                // goodsQuoteTik.lowest = goodsQuoteTik.lowest ? (fn(goodsQuoteTik.lowest)) : '--'
-                // goodsQuoteTik.opened = goodsQuoteTik.opened ? (fn(goodsQuoteTik.opened)) : '--'
-                // goodsQuoteTik.preclose = goodsQuoteTik.preclose ? (fn(goodsQuoteTik.preclose)) : '--'
-                // goodsQuoteTik.settle = goodsQuoteTik.settle ? (fn(goodsQuoteTik.settle)) : '--'
-                // goodsQuoteTik.strikeprice = goodsQuoteTik.strikeprice ? (fn(goodsQuoteTik.strikeprice)) : '--'
+                    // goodsQuoteTik.averageprice = goodsQuoteTik.averageprice ? (fn(goodsQuoteTik.averageprice)) : '--'
+                    // goodsQuoteTik.grepmarketprice = goodsQuoteTik.grepmarketprice ? (fn(goodsQuoteTik.grepmarketprice)) : '--'
+                    // goodsQuoteTik.highest = goodsQuoteTik.highest ? (fn(goodsQuoteTik.highest)) : '--'
+                    // goodsQuoteTik.iep = goodsQuoteTik.iep ? (fn(goodsQuoteTik.iep)) : '--'
+                    // goodsQuoteTik.limitdown = goodsQuoteTik.limitdown ? (fn(goodsQuoteTik.limitdown)) : '--'
+                    // goodsQuoteTik.limitup = goodsQuoteTik.limitup ? (fn(goodsQuoteTik.limitup)) : '--'
+                    // goodsQuoteTik.lowest = goodsQuoteTik.lowest ? (fn(goodsQuoteTik.lowest)) : '--'
+                    // goodsQuoteTik.opened = goodsQuoteTik.opened ? (fn(goodsQuoteTik.opened)) : '--'
+                    // goodsQuoteTik.preclose = goodsQuoteTik.preclose ? (fn(goodsQuoteTik.preclose)) : '--'
+                    // goodsQuoteTik.settle = goodsQuoteTik.settle ? (fn(goodsQuoteTik.settle)) : '--'
+                    // goodsQuoteTik.strikeprice = goodsQuoteTik.strikeprice ? (fn(goodsQuoteTik.strikeprice)) : '--'
 
-                // goodsQuoteTik.lasttime = moment(goodsQuoteTik.date + goodsQuoteTik.time, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss')
+                    // goodsQuoteTik.lasttime = moment(goodsQuoteTik.date + goodsQuoteTik.time, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss')
 
-                // // 实时行情由于行情源的问题可能不会下发现量,这时用盘面的总量来计算
-                // if (!goodsQuoteTik.lastvolume) {
-                //     if (itemQuote.totalvolume) {
-                //         goodsQuoteTik.lastvolume = goodsQuoteTik.totalvolume - itemQuote.totalvolume;
-                //     } else {
-                //         goodsQuoteTik.lastvolume = "--";
-                //     }
-                // }
-                // !goodsQuoteTik.holdvolume && (goodsQuoteTik.holdvolume = '--')
-                // !goodsQuoteTik.holdincrement && (goodsQuoteTik.holdincrement = '--')
-                // !goodsQuoteTik.totalturnover && (goodsQuoteTik.totalturnover = '--')
-                // console.log('goodsQuoteTik', goodsQuoteTik)
-                // mergeObj(itemQuote, goodsQuoteTik);
-            } else {
-                console.warn(`行情推送的商品goods:${itemQuote.goodscode}在商品列表里不存在`)
-            }
+                    // // 实时行情由于行情源的问题可能不会下发现量,这时用盘面的总量来计算
+                    // if (!goodsQuoteTik.lastvolume) {
+                    //     if (itemQuote.totalvolume) {
+                    //         goodsQuoteTik.lastvolume = goodsQuoteTik.totalvolume - itemQuote.totalvolume;
+                    //     } else {
+                    //         goodsQuoteTik.lastvolume = "--";
+                    //     }
+                    // }
+                    // !goodsQuoteTik.holdvolume && (goodsQuoteTik.holdvolume = '--')
+                    // !goodsQuoteTik.holdincrement && (goodsQuoteTik.holdincrement = '--')
+                    // !goodsQuoteTik.totalturnover && (goodsQuoteTik.totalturnover = '--')
+                    // console.log('goodsQuoteTik', goodsQuoteTik)
+                    // mergeObj(itemQuote, goodsQuoteTik);
+                } else {
+                    console.warn(`行情推送的商品goods:${itemQuote.goodscode}在商品列表里不存在`)
+                }
 
-            // 注意:此处已 go 服务查询出来的盘面数据为基准,查询盘面 先修改成go 服务,第一次进入项目时候回查询一次所有盘面
-            // 之前是 通过 websocket 查询的,故 可能存在字段发生变化问题,如遇到,则进行优化处理
+                // 注意:此处已 go 服务查询出来的盘面数据为基准,查询盘面 先修改成go 服务,第一次进入项目时候回查询一次所有盘面
+                // 之前是 通过 websocket 查询的,故 可能存在字段发生变化问题,如遇到,则进行优化处理
 
-            // 判断是一下行情时间是否比现在的要早
-            // const quoteTime = moment(goodsQuoteTik.lasttime, 'YYYY-MM-DD HH:mm:ss')
-            // const localTime = moment(itemQuote.lasttime, 'YYYY-MM-DD HH:mm:ss')
-            // if (quoteTime >= localTime) {
-            //     mergeObj(itemQuote, goodsQuoteTik);
-            // }
+                // 判断是一下行情时间是否比现在的要早
+                // const quoteTime = moment(goodsQuoteTik.lasttime, 'YYYY-MM-DD HH:mm:ss')
+                // const localTime = moment(itemQuote.lasttime, 'YYYY-MM-DD HH:mm:ss')
+                // if (quoteTime >= localTime) {
+                //     mergeObj(itemQuote, goodsQuoteTik);
+                // }
+            }, 100, 'push_' + itemQuote.goodscode)
         } else {
             // 此处 待优化(存在字段变化问题)
             // console.log('itemQuote', itemQuote)

+ 0 - 48
src/utils/time/index.ts

@@ -1,4 +1,3 @@
-import timerUtil, { TimeoutTimerNames } from '@/utils/timer/timerUtil';
 import moment, { DurationInputArg1, Moment, unitOfTime } from "moment";
 
 /**
@@ -44,20 +43,6 @@ export function getRangeTime(val1: Time, val2: Time, type = 'YYYYMMDD', unit: un
 }
 
 /**
- * ------------------------------------------------------------------待优化后期废除
- * 防抖(debounce)
- * @param fn 需要防抖的函数
- * @param wait 毫秒,防抖期限值
- * @returns
- */
-export function _debounce(fn: () => void, wait: number, timer: keyof TimeoutTimerNames = 'debounce'): void {
-    return (function () {
-        timerUtil.clearTimeout(timer);
-        timerUtil.setTimeout(fn, wait, timer);
-    })();
-}
-
-/**
  * 时间排序
  * @param arr
  * @param key
@@ -71,37 +56,4 @@ export function sortTime<T extends object>(arr: T[], key: keyof T, isUp = true)
         return isUp ? time1 - time2 : time2 - time1;
     });
     return result;
-}
-
-/**
- * 函数防抖(等待触发)
- * @param callback 回调函数
- * @param delay 延迟毫秒数,默认100毫秒
- * @returns 
- */
-export function debounce<T extends unknown[]>(callback: (...param: T) => void, delay = 100) {
-    let timer = 0;
-    return function (...args: T) {
-        clearTimeout(timer);
-        timer = window.setTimeout(() => {
-            callback(...args);
-        }, delay);
-    }
-}
-
-/**
- * 函数节流(间隔触发)
- * @param callback 回调函数
- * @param delay 延迟毫秒数,默认100毫秒
- * @returns 
- */
-export function throttle<T extends unknown[]>(callback: (...param: T) => void, delay = 100) {
-    let timer = 0;
-    return function (...args: T) {
-        if (timer) return;
-        timer = window.setTimeout(() => {
-            timer = 0;
-            callback(...args);
-        }, delay);
-    }
 }

+ 1 - 1
src/views/hedgeditem/exposure/list/index.vue

@@ -76,7 +76,7 @@ export default defineComponent({
                 window.setTimeout(() => {
                     composeTable.selectedRow.value = selectedRow;
                     if (!selectedRow && res.length) {
-                        composeTable.selectedRow.value = res[0];
+                        composeTable.selectedRow.value = tableList.value[0];
                     }
                 }, 0)
             })