Jelajahi Sumber

动态市场版块

li.shaoyi 3 tahun lalu
induk
melakukan
4d017465ed

+ 35 - 33
src/assets/styles/mixin.less

@@ -2491,7 +2491,41 @@ input:-internal-autofill-selected {
 }
 
 .topTableHeight {
-    height: calc(100% - 28px);
+    flex          : 1;
+    overflow      : hidden;
+    display       : flex;
+    flex-direction: column;
+
+    &__container {
+        flex          : 1;
+        overflow      : hidden;
+        display       : flex;
+        flex-direction: column;
+    }
+
+    .condSecondTabTableHalfTop {
+        .ant-table {
+            .ant-table-thead {
+                tr {
+                    th {
+                        background: @m-green1;
+                    }
+                }
+            }
+        }
+    }
+
+    .halfBottom {
+        .ant-table {
+            .ant-table-thead {
+                tr {
+                    th {
+                        background: @m-red2;
+                    }
+                }
+            }
+        }
+    }
 }
 
 
@@ -2783,10 +2817,6 @@ input:-internal-autofill-selected {
             }
 
             .ant-table-placeholder {
-                height  : calc(100vh - 480px);
-                position: absolute;
-                top     : 30px;
-                right   : 50%;
 
                 .ant-empty.ant-empty-normal {
                     margin: 0;
@@ -2802,10 +2832,6 @@ input:-internal-autofill-selected {
                 min-height: calc(100vh - 138px);
                 max-height: calc(100vh - 138px);
             }
-
-            .ant-table-placeholder {
-                height: calc(100vh - 138px);
-            }
         }
     }
 
@@ -2844,10 +2870,6 @@ input:-internal-autofill-selected {
                 max-height: calc(100vh - 407px);
                 background: @m-black2;
             }
-
-            .ant-table-placeholder {
-                height: calc(100vh - 407px);
-            }
         }
     }
 
@@ -2858,10 +2880,6 @@ input:-internal-autofill-selected {
                 max-height: calc(100vh - 167px);
                 background: @m-black2;
             }
-
-            .ant-table-placeholder {
-                height: calc(100vh - 167px);
-            }
         }
     }
 }
@@ -2875,10 +2893,6 @@ input:-internal-autofill-selected {
                 max-height: calc(100vh - 443px);
                 background: @m-black2;
             }
-
-            .ant-table-placeholder {
-                height: calc(100vh - 443px);
-            }
         }
     }
 
@@ -2889,10 +2903,6 @@ input:-internal-autofill-selected {
                 max-height: calc(100vh - 196px);
                 background: @m-black2;
             }
-
-            .ant-table-placeholder {
-                height: calc(100vh - 196px);
-            }
         }
     }
 
@@ -2912,10 +2922,6 @@ input:-internal-autofill-selected {
                     }
                 }
             }
-
-            .ant-table-placeholder {
-                height: calc((100vh - 443px)/2 - 13px);
-            }
         }
     }
 
@@ -2938,10 +2944,6 @@ input:-internal-autofill-selected {
                 max-height: calc((100vh - 196px)/2 - 16px);
                 background: @m-black2;
             }
-
-            .ant-table-placeholder {
-                height: calc((100vh - 196px)/2 - 16px);
-            }
         }
     }
 }

+ 32 - 37
src/common/components/filter/index.vue

@@ -2,37 +2,17 @@
     <!-- 过滤客户资料表格 -->
     <div class="filter-custom-table">
         <slot name="selectBefore"></slot>
-        <a-select
-            label-in-value
-            class="conditionSelect"
-            v-for="(item, i) in selectList"
-            :key="i + '11'"
-            style="width: 120px"
-            v-model:value="item.value"
-            :placeholder="item.placeholder"
-            @change="item.change"
-        >
-            <a-select-option
-                v-for="(option, j) in item.list"
-                :key="j + '22'"
-                :value="option.value"
-            >{{option.lable}}</a-select-option>
+        <a-select label-in-value class="conditionSelect" v-for="(item, i) in selectList" :key="i + '11'"
+            style="width: 120px" v-model:value="item.value" :placeholder="item.placeholder" @change="item.change">
+            <a-select-option v-for="(option, j) in item.list" :key="j + '22'" :value="option.value">{{ option.lable }}
+            </a-select-option>
         </a-select>
         <slot name="selectAfter"></slot>
-        <a-input
-            v-model:value="item.value"
-            v-for="(item,i) in inputList"
-            :key="i + '33'"
-            class="tableConditionInput"
-            :placeholder="item.placeholder"
-        />
+        <a-input v-model:value="item.value" v-for="(item, i) in inputList" :key="i + '33'" class="tableConditionInput"
+            :placeholder="item.placeholder" />
         <slot name="inputAfter"></slot>
-        <a-button
-            class="selectBtn"
-            v-for="(item, i) in fixedBtnList"
-            :key="i + 'fixed'"
-            @click="item.event"
-        >{{item.lable}}</a-button>
+        <a-button class="selectBtn" v-for="(item, i) in fixedBtnList" :key="i + 'fixed'" @click="item.event">
+            {{ item.lable }}</a-button>
         <slot></slot>
     </div>
 </template>
@@ -65,47 +45,59 @@ export default defineComponent({
 .btnDeafault.ant-btn {
     margin-left: 0;
 }
-.ant-select + .btnDeafault.ant-btn {
+
+.ant-select+.btnDeafault.ant-btn {
     margin-left: 10px;
 }
-.ant-space.ant-space-vertical + .btnDeafault.ant-btn {
+
+.ant-space.ant-space-vertical+.btnDeafault.ant-btn {
     margin-left: 0;
 }
+
 .filter-custom-table {
     display: inline-flex;
     padding-top: 4px;
     height: 34px;
+
     .conditionSelect:first-child {
         margin-right: 10px;
     }
+
     .btnDeafault.ant-btn,
     .operBtn.ant-btn {
         height: 26px !important;
         line-height: 26px !important;
     }
 
-    .ant-select-single:not(.ant-select-customize-input) + .ant-select-single:not(.ant-select-customize-input),
-    .ant-select + .ant-space.ant-space-vertical {
+    .ant-select-single:not(.ant-select-customize-input)+.ant-select-single:not(.ant-select-customize-input),
+    .ant-select+.ant-space.ant-space-vertical {
         margin-left: 10px;
     }
+
     .ant-select-single:not(.ant-select-customize-input) {
         height: 26px;
         line-height: 26px !important;
+
         .ant-select-selector {
             height: 26px;
-            border-color: @m-grey46 !important;
+            border-color: @m-grey46  !important;
             background: @m-grey47;
+            overflow: hidden;
             .rounded-corners(3px);
+
             .ant-select-selection-item {
                 line-height: 26px;
             }
+
             .ant-select-selection-search {
                 height: 26px;
+
                 .ant-select-selection-search-input {
                     height: 26px;
-                    line-height: 27px !important;
+                    line-height: 26px !important;
                 }
             }
+
             .ant-select-selection-placeholder {
                 line-height: 26px;
             }
@@ -114,16 +106,19 @@ export default defineComponent({
 
     .allDatePicker.ant-calendar-picker {
         height: 26px !important;
-        border: 1px solid @m-grey46 !important;
+        border: 1px solid @m-grey46  !important;
+
         .ant-calendar-picker-input.ant-input {
             height: 26px;
             line-height: 26px;
+
             &::placeholder {
-                color: @m-grey10 !important;
+                color: @m-grey10  !important;
             }
         }
     }
-    .conditionSelect + .conditionSelect {
+
+    .conditionSelect+.conditionSelect {
         margin-left: 10px;
     }
 }

+ 12 - 14
src/common/components/firstMenu/index.vue

@@ -1,13 +1,8 @@
 <template>
     <div class="first-menu">
-        <a-menu
-            class="a-menu_container"
-            theme="dark"
-            v-model:selectedKeys="current"
-            @click="menuClick"
-            mode="horizontal"
-        >
-            <a-menu-item :key="String(index)" v-for="(item, index) in list">{{ item[value]}}</a-menu-item>
+        <a-menu class="a-menu_container" theme="dark" v-model:selectedKeys="current" @click="menuClick"
+            mode="horizontal">
+            <a-menu-item :key="String(index)" v-for="(item, index) in list">{{ item[value] }}</a-menu-item>
         </a-menu>
         <div class="menu_right">
             <slot></slot>
@@ -16,7 +11,7 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, PropType, ref, watchEffect } from 'vue';
+import { defineComponent, PropType, ref, watch } from 'vue';
 
 interface Key {
     [propName: string]: string;
@@ -42,13 +37,16 @@ export default defineComponent({
     components: {},
     setup(props, context) {
         const current = ref<string[]>(['0']);
-        watchEffect(() => {
-            current.value = props.selectedKey;
-        });
+
         function menuClick(value: any) {
-            const index = +value.key;
-            context.emit('selectMenu', props.list[index]);
+            if (value.keyPath.toString() !== current.value.toString()) {
+                const index = +value.key;
+                context.emit('selectMenu', props.list[index]);
+            }
         }
+
+        watch(() => props.selectedKey, (val) => current.value = val);
+
         return {
             current,
             menuClick,

+ 61 - 51
src/common/components/thirdMenu/index.vue

@@ -8,7 +8,7 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, ref, PropType, watchEffect } from 'vue';
+import { defineComponent, ref, PropType, watch } from 'vue';
 
 interface Key {
   [propName: string]: string;
@@ -33,15 +33,16 @@ export default defineComponent({
   },
   components: {},
   setup(props, context) {
-    const current = ref<string>('1');
-    watchEffect(() => {
-      current.value = props.selectedKey.toString();
-    });
+    const current = ref(props.selectedKey);
+
     function menuClick(value: string) {
       const index = +value;
       const item = props.list[index];
       context.emit('selectMenu', +value, item);
     }
+
+    watch(() => props.selectedKey, (val) => current.value = val);
+
     return {
       current,
       menuClick,
@@ -52,56 +53,65 @@ export default defineComponent({
 
 <style lang="less">
 .noBorderBottom {
-    border-bottom: none;
+  border-bottom: none;
 }
+
 .thirdMenu {
-    width: 100%;
-    height: 28px;
-    padding-top: 2px;
-    background-color: @m-black5;
-    z-index: 2;
-    margin-top: auto;
-    .ant-tabs {
-        line-height: 26px;
-        .flex;
-        .ant-tabs-bar {
-            margin-bottom: 0;
-            border-bottom: 0;
-            .ant-tabs-nav-container {
-                margin-bottom: 0;
-                line-height: 100%;
-                .ant-tabs-nav-wrap {
-                    margin-bottom: 0;
-                    .ant-tabs-nav-scroll {
-                        .ant-tabs-nav {
-                            .ant-tabs-tab {
-                                min-width: 121px;
-                                height: 26px;
-                                line-height: 26px;
-                                text-align: center;
-                                color: @m-grey1;
-                                padding: 0 20px;
-                                margin: 0;
-                                background: @m-tabbg center center no-repeat;
-                                background-size: cover;
-                            }
-                            .ant-tabs-tab-active.ant-tabs-tab {
-                                color: @m-white0;
-                                background: @m-tabbg-active center center no-repeat;
-                                background-size: cover;
-                                z-index: 2;
-                            }
-                            .ant-tabs-tab + .ant-tabs-tab {
-                                margin-left: -14px;
-                            }
-                            .ant-tabs-ink-bar {
-                                width: 0px !important;
-                            }
-                        }
-                    }
-                }
+  width: 100%;
+  height: 28px;
+  padding-top: 2px;
+  background-color: @m-black5;
+  z-index: 2;
+  margin-top: auto;
+
+  .ant-tabs {
+    line-height: 26px;
+    .flex;
+
+    .ant-tabs-bar {
+      margin-bottom: 0;
+      border-bottom: 0;
+
+      .ant-tabs-nav-container {
+        margin-bottom: 0;
+        line-height: 100%;
+
+        .ant-tabs-nav-wrap {
+          margin-bottom: 0;
+
+          .ant-tabs-nav-scroll {
+            .ant-tabs-nav {
+              .ant-tabs-tab {
+                min-width: 121px;
+                height: 26px;
+                line-height: 26px;
+                text-align: center;
+                color: @m-grey1;
+                padding: 0 20px;
+                margin: 0;
+                background: @m-tabbg center center no-repeat;
+                background-size: cover;
+              }
+
+              .ant-tabs-tab-active.ant-tabs-tab {
+                color: @m-white0;
+                background: @m-tabbg-active center center no-repeat;
+                background-size: cover;
+                z-index: 2;
+              }
+
+              .ant-tabs-tab+.ant-tabs-tab {
+                margin-left: -14px;
+              }
+
+              .ant-tabs-ink-bar {
+                width: 0px !important;
+              }
             }
+          }
         }
+      }
     }
+  }
 }
 </style>

+ 15 - 0
src/common/constants/enumCommon.ts

@@ -121,6 +121,21 @@ export enum TradeMode {
     quote99 = 99,
 }
 
+// 仓单类型
+export enum AuctionwrType {
+    noWr = 1, // 无仓单
+    hasWr = 2, // 有仓单
+    noLimite = 3, // 有无仓单均可
+}
+
+//挂牌方式 1:一口价 2:浮动价 3:贸易圈 4:协议指定
+export enum ListingMode {
+    fix = 1,  // 一口价
+    float = 2, // 浮动价
+    blocs = 3, // 贸易圈
+    designate = 4, // 协议指定
+}
+
 // 协议类型
 export enum AgreementType {
     register = 1,   // 注册

+ 55 - 24
src/layout/components/top.vue

@@ -4,13 +4,8 @@
             <Header />
         </a-layout-header>
         <a-layout class="middleLayout">
-            <a-layout-sider
-                class="m-layout-left"
-                width="160"
-                v-model:collapsed="collapsed"
-                @collapse="collapse"
-                collapsible
-            >
+            <a-layout-sider class="m-layout-left" width="160" v-model:collapsed="collapsed" @collapse="collapse"
+                collapsible>
                 <Menu @chooseMenu="chooseMenu" :collapsed="collapsed" />
             </a-layout-sider>
             <a-layout-content :style="{ background: '#0E0E0F', flex: 1, }">
@@ -78,7 +73,8 @@ export default defineComponent({
                     //     tempIndex = 2;
                     // }
                     // 默认第一个tab页
-                    name = value.children[tempIndex].code;
+                    //name = value.children[tempIndex].code;
+                    name = 'spot_trade';
                     index.value = [tempIndex.toString()];
                 } else {
                     router.push({ name: '404' });
@@ -89,9 +85,13 @@ export default defineComponent({
                 const i = value.children.findIndex((e) => e.code === temp);
                 if (i === -1) {
                     // 切换左边菜单栏
-                    if (value?.children.length) {
-                        // 默认第一个tab页
-                        name = value.children[0].code;
+                    if (value.children.length) {
+                        if (value.code === 'spot_trade') {
+                            name = value.code;
+                        } else {
+                            // 默认第一个tab页
+                            name = value.children[0].code;
+                        }
                         index.value = ['0'];
                     } else {
                         router.push({ name: '404' });
@@ -128,13 +128,16 @@ export default defineComponent({
 .layout-top-no-bottom {
     height: 100%;
 }
+
 .layout-top-bottom {
     height: calc(100vh - 336px);
 }
+
 .layout-top {
     .flex;
     width: 100%;
     flex-direction: column;
+
     .m-layout-header {
         width: 100%;
         height: 32px;
@@ -144,11 +147,13 @@ export default defineComponent({
         padding: 0 20px;
         .flex();
         justify-content: space-between;
+
         img {
             margin-right: 16px;
             width: 20px;
             height: 20px;
         }
+
         .searchInput.ant-input-affix-wrapper {
             width: 240px;
             height: 30px;
@@ -160,28 +165,36 @@ export default defineComponent({
             padding-left: 40px;
             position: relative;
             .rounded-corners(15px);
+
             .ant-input {
                 background: @m-grey9;
                 color: @m-white0;
             }
+
             .ant-input-suffix {
                 margin-left: -215px;
+
                 .ant-input-search-icon {
                     color: @m-grey10;
                 }
             }
         }
+
         .m-layout-header-right {
             .flex();
+
             .news-container {
                 padding-left: 10px;
                 padding-right: 16px;
+
                 .ant-badge {
                     margin-top: 4px;
                     cursor: pointer;
-                    > svg {
+
+                    >svg {
                         font-size: 24px;
                     }
+
                     .ant-badge-dot {
                         box-shadow: 0 0 0 1px @m-red0;
                     }
@@ -202,24 +215,30 @@ export default defineComponent({
         background: @m-grey18;
         .inlineflex;
         border-bottom: 1px solid @m-black2;
+
         .ant-layout-sider-has-trigger {
             padding-bottom: 30px;
             background: @m-black4;
+
             .ant-layout-sider-children {
                 background: @m-grey18;
             }
         }
+
         .m-layout-left {
             min-height: calc(100vh - 316px);
             background: @m-black4;
             border-right: 1px solid @m-black32;
             overflow: hidden;
+
             .ant-layout-sider-children {
                 ul.ant-menu.ant-menu-inline.left-menu {
                     height: calc(100vh - 316px);
                     overflow-y: auto;
+
                     li.ant-menu-submenu {
                         padding-bottom: 0;
+
                         .ant-menu-submenu-title {
                             color: @m-grey33;
                             font-size: 14px;
@@ -228,15 +247,18 @@ export default defineComponent({
                             margin-top: 0;
                             margin-bottom: 0;
                             padding-left: 10px !important;
+
                             .icon {
                                 font-size: 14px;
                             }
+
                             .menu-item_title {
                                 display: inline-block;
                                 font-size: 14px;
                                 margin-left: 5px;
                             }
                         }
+
                         .ant-menu-sub {
                             .ant-menu-item {
                                 padding-left: 28px !important;
@@ -248,19 +270,24 @@ export default defineComponent({
                             }
                         }
                     }
+
                     li.ant-menu-submenu-open {
                         .ant-menu-submenu-title {
                             color: @m-white6;
+
                             .icon {
                                 color: @m-white7;
                             }
+
                             .ant-menu-submenu-arrow {
+
                                 &::before,
                                 &::after {
                                     background: @m-white7;
                                 }
                             }
                         }
+
                         .ant-menu-sub {
                             .ant-menu-item.ant-menu-item-selected {
                                 background-color: @m-blue0;
@@ -269,47 +296,57 @@ export default defineComponent({
                     }
                 }
             }
+
             .ant-layout-sider-trigger {
                 width: 100%;
                 height: 30px;
                 line-height: 30px;
                 background: @m-black0;
                 position: absolute;
+
                 .anticon {
                     color: @m-white12;
                 }
             }
         }
+
         .ant-layout-sider-collapsed {
             width: 60px !important;
             min-width: 60px !important;
             max-width: 60px !important;
+
             .ant-layout-sider-children {
                 .ant-menu-inline-collapsed {
                     width: 60px;
                 }
             }
+
             .ant-layout-sider-trigger {
                 width: 60px !important;
             }
         }
+
         .ant-layout-content {
             overflow: hidden;
-            background: @m-black31 !important;
+            background: @m-black31  !important;
         }
+
         .ant-menu-vertical {
             .ant-menu-submenu-vertical {
                 height: 50px;
                 line-height: 50px;
                 padding: 5px 0;
+
                 .ant-menu-submenu-title {
                     height: 40px;
                     line-height: 40px;
+
                     .icon {
                         font-size: 20px;
                     }
                 }
             }
+
             .ant-menu-submenu {
                 .ant-menu-submenu-title {
                     .menu-item_title {
@@ -326,17 +363,11 @@ export default defineComponent({
         height: @bottomHeight;
         .inlineflex;
     }
-    .ant-menu-inline-collapsed > .ant-menu-item,
-    .ant-menu-inline-collapsed
-        > .ant-menu-item-group
-        > .ant-menu-item-group-list
-        > .ant-menu-item,
-    .ant-menu-inline-collapsed
-        > .ant-menu-item-group
-        > .ant-menu-item-group-list
-        > .ant-menu-submenu
-        > .ant-menu-submenu-title,
-    .ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title {
+
+    .ant-menu-inline-collapsed>.ant-menu-item,
+    .ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item,
+    .ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title,
+    .ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title {
         padding: 0 20px !important;
     }
 }

+ 141 - 141
src/router/index.ts

@@ -1645,147 +1645,147 @@ const routes: Array<RouteRecordRaw> = [
             {
                 path: '/spot_trade',
                 name: EnumRouterName.spot_trade,
-                component: Main,
-                meta: {
-                    requireAuth: true,
-                },
-                redirect: { name: EnumRouterName.warehouse_receipt_trade, },
-                children: [
-                    {
-                        path: '/spot_trade/warehouse_receipt_trade',
-                        name: EnumRouterName.warehouse_receipt_trade,
-                        component: () => import('@/views/market/spot_trade/warehouse_receipt_trade/index.vue'),
-                        meta: {
-                            requireAuth: true,
-                        },
-                        children: [
-                            {
-                                path: '/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_floating_price',
-                                name: EnumRouterName.warehouse_receipt_trade_floating_price,
-                                component: () => import('@/views/market/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_floating_price/index.vue'),
-                                meta: {
-                                    requireAuth: true,
-                                },
-                            },
-                            {
-                                path: '/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_price',
-                                name: EnumRouterName.warehouse_receipt_trade_price,
-                                component: () => import('@/views/market/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_price/index.vue'),
-                                meta: {
-                                    requireAuth: true,
-                                },
-                            },
-                            {
-                                path: '/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_blocs',
-                                name: 'warehouse_receipt_trade_blocs',
-                                component: () => import('@/views/market/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_blocs/index.vue'),
-                                meta: {
-                                    requireAuth: true,
-                                },
-                            },
-                            {
-                                path: '/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_designate',
-                                name: 'warehouse_receipt_trade_designate',
-                                component: () => import('@/views/market/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_designate/index.vue'),
-                                meta: {
-                                    requireAuth: true,
-                                },
-                            },
-                        ]
-                    },
-                    {
-                        path: '/spot_trade/warehouse_pre_sale',
-                        name: EnumRouterName.warehouse_pre_sale,
-                        component: () => import('@/views/market/spot_trade/warehouse_pre_sale/index.vue'),
-                        meta: {
-                            requireAuth: true,
-                        },
-                        children: [
-                            {
-                                path: '/spot_trade/warehouse_pre_sale/warehouse_pre_sale_floating_price',
-                                name: EnumRouterName.warehouse_pre_sale_floating_price,
-                                component: () => import('@/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_floating_price/index.vue'),
-                                meta: {
-                                    requireAuth: true,
-                                },
-                            },
-                            {
-                                path: '/spot_trade/warehouse_pre_sale/warehouse_pre_sale_price',
-                                name: EnumRouterName.warehouse_pre_sale_price,
-                                component: () => import('@/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_price/index.vue'),
-                                meta: {
-                                    requireAuth: true,
-                                },
-                            },
-                            {
-                                path: '/spot_trade/warehouse_pre_sale/warehouse_pre_sale_blocs',
-                                name: EnumRouterName.warehouse_pre_sale_blocs,
-                                component: () => import('@/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_blocs/index.vue'),
-                                meta: {
-                                    requireAuth: true,
-                                },
-                            },
-                            {
-                                path: '/spot_trade/warehouse_pre_sale/warehouse_pre_sale_designate',
-                                name: 'warehouse_pre_sale_designate',
-                                component: () => import('@/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_designate/index.vue'),
-                                meta: {
-                                    requireAuth: true,
-                                },
-                            },
-                        ]
-                    },
-                    {
-                        path: '/spot_trade/spot_trade_order_transaction',
-                        name: EnumRouterName.spot_trade_order_transaction,
-                        component: () => import('@/views/market/spot_trade/spot_trade_order_transaction/index.vue'),
-                        meta: {
-                            requireAuth: true,
-                        },
-                        children: [
-                            {
-                                path: '/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_basis_difference',
-                                name: EnumRouterName.spot_trade_order_transaction_basis_difference,
-                                component: () => import('@/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_basis_difference/index.vue'),
-                                meta: {
-                                    requireAuth: true,
-                                },
-                            },
-                            {
-                                path: '/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_listing_transfer',
-                                name: EnumRouterName.spot_trade_order_transaction_listing_transfer,
-                                component: () => import('@/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_listing_transfer/index.vue'),
-                                meta: {
-                                    requireAuth: true,
-                                },
-                            },
-                            {
-                                path: '/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap',
-                                name: 'spot_trade_order_transaction_swap',
-                                component: () => import('@/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/index.vue'),
-                                meta: {
-                                    requireAuth: true,
-                                },
-                            },
-                        ]
-                    },
-                    {
-                        path: '/spot_trade/spot_trade_reference_market',
-                        name: EnumRouterName.spot_trade_reference_market,
-                        component: () => import('@/views/market/spot_trade/spot_trade_reference_market/index.vue'),
-                        meta: {
-                            requireAuth: true,
-                        },
-                    },
-                    {
-                        path: 'spot_trade_advertisement',
-                        name: 'spot_trade_advertisement',
-                        component: () => import('@/views/market/spot_trade/spot_trade_advertisement/index.vue'),
-                        meta: {
-                            requireAuth: true,
-                        },
-                    }
-                ]
+                component: () => import('@/views/market/spot_trade/index.vue'),
+                meta: {
+                    requireAuth: true,
+                },
+                //redirect: { name: EnumRouterName.warehouse_receipt_trade, },
+                // children: [
+                //     {
+                //         path: '/spot_trade/warehouse_receipt_trade',
+                //         name: EnumRouterName.warehouse_receipt_trade,
+                //         component: () => import('@/views/market/spot_trade/warehouse_receipt_trade/index.vue'),
+                //         meta: {
+                //             requireAuth: true,
+                //         },
+                //         children: [
+                //             {
+                //                 path: '/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_floating_price',
+                //                 name: EnumRouterName.warehouse_receipt_trade_floating_price,
+                //                 component: () => import('@/views/market/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_floating_price/index.vue'),
+                //                 meta: {
+                //                     requireAuth: true,
+                //                 },
+                //             },
+                //             {
+                //                 path: '/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_price',
+                //                 name: EnumRouterName.warehouse_receipt_trade_price,
+                //                 component: () => import('@/views/market/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_price/index.vue'),
+                //                 meta: {
+                //                     requireAuth: true,
+                //                 },
+                //             },
+                //             {
+                //                 path: '/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_blocs',
+                //                 name: 'warehouse_receipt_trade_blocs',
+                //                 component: () => import('@/views/market/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_blocs/index.vue'),
+                //                 meta: {
+                //                     requireAuth: true,
+                //                 },
+                //             },
+                //             {
+                //                 path: '/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_designate',
+                //                 name: 'warehouse_receipt_trade_designate',
+                //                 component: () => import('@/views/market/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_designate/index.vue'),
+                //                 meta: {
+                //                     requireAuth: true,
+                //                 },
+                //             },
+                //         ]
+                //     },
+                //     {
+                //         path: '/spot_trade/warehouse_pre_sale',
+                //         name: EnumRouterName.warehouse_pre_sale,
+                //         component: () => import('@/views/market/spot_trade/warehouse_pre_sale/index.vue'),
+                //         meta: {
+                //             requireAuth: true,
+                //         },
+                //         children: [
+                //             {
+                //                 path: '/spot_trade/warehouse_pre_sale/warehouse_pre_sale_floating_price',
+                //                 name: EnumRouterName.warehouse_pre_sale_floating_price,
+                //                 component: () => import('@/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_floating_price/index.vue'),
+                //                 meta: {
+                //                     requireAuth: true,
+                //                 },
+                //             },
+                //             {
+                //                 path: '/spot_trade/warehouse_pre_sale/warehouse_pre_sale_price',
+                //                 name: EnumRouterName.warehouse_pre_sale_price,
+                //                 component: () => import('@/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_price/index.vue'),
+                //                 meta: {
+                //                     requireAuth: true,
+                //                 },
+                //             },
+                //             {
+                //                 path: '/spot_trade/warehouse_pre_sale/warehouse_pre_sale_blocs',
+                //                 name: EnumRouterName.warehouse_pre_sale_blocs,
+                //                 component: () => import('@/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_blocs/index.vue'),
+                //                 meta: {
+                //                     requireAuth: true,
+                //                 },
+                //             },
+                //             {
+                //                 path: '/spot_trade/warehouse_pre_sale/warehouse_pre_sale_designate',
+                //                 name: 'warehouse_pre_sale_designate',
+                //                 component: () => import('@/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_designate/index.vue'),
+                //                 meta: {
+                //                     requireAuth: true,
+                //                 },
+                //             },
+                //         ]
+                //     },
+                //     {
+                //         path: '/spot_trade/spot_trade_order_transaction',
+                //         name: EnumRouterName.spot_trade_order_transaction,
+                //         component: () => import('@/views/market/spot_trade/spot_trade_order_transaction/index.vue'),
+                //         meta: {
+                //             requireAuth: true,
+                //         },
+                //         children: [
+                //             {
+                //                 path: '/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_basis_difference',
+                //                 name: EnumRouterName.spot_trade_order_transaction_basis_difference,
+                //                 component: () => import('@/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_basis_difference/index.vue'),
+                //                 meta: {
+                //                     requireAuth: true,
+                //                 },
+                //             },
+                //             {
+                //                 path: '/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_listing_transfer',
+                //                 name: EnumRouterName.spot_trade_order_transaction_listing_transfer,
+                //                 component: () => import('@/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_listing_transfer/index.vue'),
+                //                 meta: {
+                //                     requireAuth: true,
+                //                 },
+                //             },
+                //             {
+                //                 path: '/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap',
+                //                 name: 'spot_trade_order_transaction_swap',
+                //                 component: () => import('@/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/index.vue'),
+                //                 meta: {
+                //                     requireAuth: true,
+                //                 },
+                //             },
+                //         ]
+                //     },
+                //     {
+                //         path: '/spot_trade/spot_trade_reference_market',
+                //         name: EnumRouterName.spot_trade_reference_market,
+                //         component: () => import('@/views/market/spot_trade/spot_trade_reference_market/index.vue'),
+                //         meta: {
+                //             requireAuth: true,
+                //         },
+                //     },
+                //     {
+                //         path: 'spot_trade_advertisement',
+                //         name: 'spot_trade_advertisement',
+                //         component: () => import('@/views/market/spot_trade/spot_trade_advertisement/index.vue'),
+                //         meta: {
+                //             requireAuth: true,
+                //         },
+                //     }
+                // ]
             },
             {
                 path: '/search_document_records',

+ 2 - 1
src/services/bus/index.ts

@@ -12,6 +12,7 @@ import { queryMarketRun, QueryMarketsByLoginID } from '../go/commonMarket';
 import { GetErmcpGoods, QueryDeliveryGoodsDetail } from '../go/ermcp/goodsInfo';
 import { getTaAccount } from '../go/TaAccount';
 import { queryWrMarketTradeConfig } from '../go/wrtrade';
+import { queryTjmdMarketSection } from '@/services/go/Tjmd';
 
 /**
  * 全局数据刷新
@@ -36,7 +37,7 @@ export async function globalDataRefresh(): Promise<string> {
             } else {
                 // token校验成功 马上轮询
                 checkTokenAction();
-                await Promise.all([GetErmcpGoods(), GetPCMenus(), QueryTableDefine(), LoginQuery(), QueryDeliveryGoodsDetail(), getTaAccount(), queryMarketRun(), QueryMarketsByLoginID(), queryWrMarketTradeConfig()])
+                await Promise.all([GetErmcpGoods(), GetPCMenus(), QueryTableDefine(), LoginQuery(), QueryDeliveryGoodsDetail(), getTaAccount(), queryMarketRun(), queryTjmdMarketSection(), QueryMarketsByLoginID(), queryWrMarketTradeConfig()])
             }
         } else {
             // 重置数据中心数据

+ 3 - 0
src/services/bus/login.ts

@@ -4,6 +4,7 @@ import { isAllEnum } from '@/services/bus/allEnum';
 import { checkTokenAction } from '@/services/bus/token';
 import { getAllEnums, GetPCMenus, getServerTime, queryErrorInfos, QueryTableDefine } from '@/services/go/commonService/index';
 import { GetErmcpGoods, QueryDeliveryGoodsDetail } from '@/services/go/ermcp/goodsInfo';
+import { queryTjmdMarketSection } from '@/services/go/Tjmd';
 import { GetLoginID, LoginQuery } from '@/services/go/useInfo/index';
 import { sessionStorageUtil } from '@/utils/storage/index';
 import { queryMarketRun, QueryMarketsByLoginID } from '../go/commonMarket';
@@ -33,6 +34,8 @@ export const login = async (logidCode: string, password: string, byteArr: Uint8A
         setLoginData(loginData);
         await Promise.all([GetErmcpGoods(), GetPCMenus(), QueryTableDefine(), getServerTime(), LoginQuery(), QueryDeliveryGoodsDetail(), getTaAccount(), queryMarketRun(), QueryMarketsByLoginID(), queryWrMarketTradeConfig()])
 
+        await queryTjmdMarketSection()
+
         // await GetPCMenus();
         // await QueryTableDefine();
         // 获取服务时间

+ 1 - 0
src/services/dataCenter/index.ts

@@ -31,6 +31,7 @@ const needClearSourceData: NeedClearSourceDataType = {
     RootUser: [],
     rules: [],
     marketsByLoginID: [],
+    marketsSection: [], // 市场板块列表
 };
 
 /**

+ 2 - 1
src/services/dataCenter/interface.ts

@@ -4,6 +4,7 @@ import * as advert from '@/services/go/quote/interface';
 import * as useInfo from '@/services/go/useInfo/interface';
 import { Marketrun, QueryMarketsByLoginIDRsp } from '../go/commonMarket/interface';
 import { WrMarketTradeConfig } from '../go/wrtrade/interface';
+import { TjmdMarketSection } from '../go/Tjmd/interface';
 import { AccountListItem } from './interafce/account';
 
 /**
@@ -44,7 +45,7 @@ export interface NeedClearSourceDataType {
     quoteDayInfo: advert.QueryQuoteDayRsp[]; // 行情盘面信息
     RootUser: useInfo.Ermcp3RootUserAccount[],
     rules: WrMarketTradeConfig[],
-
+    marketsSection: TjmdMarketSection[],
     marketsByLoginID: QueryMarketsByLoginIDRsp[] // 登录账号有权限的市场信息
 }
 

+ 6 - 1
src/services/go/Tjmd/index.ts

@@ -1,4 +1,5 @@
 import { commonSearch_go } from "@/services/go";
+import APP from '@/services';
 import * as type from './interface';
 
 /**
@@ -41,7 +42,11 @@ export function queryTjmdTransferApply(req: type.QueryTjmdTransferApplyReq): Pro
  * /Tjmd/QueryTjmdMarketSection 查询市场板块
  */
 export function queryTjmdMarketSection(): Promise<type.TjmdMarketSection[]> {
-    return commonSearch_go('/Tjmd/QueryTjmdMarketSection', {}).catch((err) => {
+    return commonSearch_go('/Tjmd/QueryTjmdMarketSection', {}).then(res => {
+        console.log('查询市场板块:  ', res)
+        APP.set('marketsSection', res);
+        return res
+    }).catch((err) => {
         throw new Error(`查询市场板块 : ${err}`);
     });
 }

+ 97 - 0
src/views/market/spot_trade/index.vue

@@ -0,0 +1,97 @@
+<template>
+    <div class="exposure">
+        <firstMenu :list="marketsSetion" value="marketsectionname" @selectMenu="onSelectMenu" />
+        <component :is="componentId" v-if="componentId" />
+        <thirdMenu :list="markets" value="marketname" :selectedKey="selectedKey" @selectMenu="onSelectMarket"
+            v-if="markets.length" />
+    </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, defineAsyncComponent, ref } from 'vue'
+import APP from '@/services'
+import { TradeMode, ListingMode, AuctionwrType } from '@/common/constants/enumCommon';
+import { TjmdMarketSection, TjmdMarketSectionConfig } from '@/services/go/Tjmd/interface'
+import { initData } from '@/common/methods'
+import firstMenu from '@/common/components/firstMenu/index.vue'
+import thirdMenu from '@/common/components/thirdMenu/index.vue'
+
+export default defineComponent({
+    components: {
+        firstMenu,
+        thirdMenu,
+        // 仓单贸易 有仓单 一口价
+        [`${TradeMode.WarehouseReceiptTrade}-${AuctionwrType.hasWr}-${ListingMode.fix}`]: defineAsyncComponent(() => import('./warehouse_receipt_trade/warehouse_receipt_trade_price/index.vue')),
+        // 仓单贸易 有仓单 浮动价
+        [`${TradeMode.WarehouseReceiptTrade}-${AuctionwrType.hasWr}-${ListingMode.float}`]: defineAsyncComponent(() => import('./warehouse_receipt_trade/warehouse_receipt_trade_floating_price/index.vue')),
+        // 仓单贸易 有仓单 贸易圈
+        [`${TradeMode.WarehouseReceiptTrade}-${AuctionwrType.hasWr}-${ListingMode.blocs}`]: defineAsyncComponent(() => import('./warehouse_receipt_trade/warehouse_receipt_trade_blocs/index.vue')),
+        // 仓单贸易 有仓单 协议指定
+        [`${TradeMode.WarehouseReceiptTrade}-${AuctionwrType.hasWr}-${ListingMode.designate}`]: defineAsyncComponent(() => import('./warehouse_receipt_trade/warehouse_receipt_trade_designate/index.vue')),
+        // 仓单贸易 无仓单 一口价
+        [`${TradeMode.WarehouseReceiptTrade}-${AuctionwrType.noWr}-${ListingMode.fix}`]: defineAsyncComponent(() => import('./warehouse_pre_sale/warehouse_pre_sale_price/index.vue')),
+        // 仓单贸易 无仓单 浮动价
+        [`${TradeMode.WarehouseReceiptTrade}-${AuctionwrType.noWr}-${ListingMode.float}`]: defineAsyncComponent(() => import('./warehouse_pre_sale/warehouse_pre_sale_floating_price/index.vue')),
+        // 仓单贸易 无仓单 贸易圈
+        [`${TradeMode.WarehouseReceiptTrade}-${AuctionwrType.noWr}-${ListingMode.blocs}`]: defineAsyncComponent(() => import('./warehouse_pre_sale/warehouse_pre_sale_blocs/index.vue')),
+        // 仓单贸易 无仓单 协议指定
+        [`${TradeMode.WarehouseReceiptTrade}-${AuctionwrType.noWr}-${ListingMode.designate}`]: defineAsyncComponent(() => import('./warehouse_pre_sale/warehouse_pre_sale_designate/index.vue')),
+        // 参考行情
+        [TradeMode.quote99]: defineAsyncComponent(() => import('./spot_trade_reference_market/index.vue')),
+        // 挂牌点选
+        [TradeMode.ListingAndSelection]: defineAsyncComponent(() => import('./spot_trade_order_transaction/spot_trade_order_transaction_basis_difference/index.vue')),
+        // 掉期贸易
+        [TradeMode.DiaoQi]: defineAsyncComponent(() => import('./spot_trade_order_transaction/spot_trade_order_transaction_swap/index.vue')),
+        // 融资融货
+        advertisement: defineAsyncComponent(() => import('./spot_trade_advertisement/index.vue')),
+    },
+    setup() {
+        // 市场板块
+        const marketsSetion = APP.getRef('marketsSection')
+        // 市场
+        const markets = ref<TjmdMarketSectionConfig[]>([])
+        // 选中的市场
+        const selectedKey = ref('0')
+        // 组件ID
+        const componentId = ref('')
+
+        // 切换版块
+        const onSelectMenu = (item: TjmdMarketSection) => {
+            markets.value = item.mlist
+            selectedKey.value = '0'
+            if (item.mlist.length) {
+                onSelectMarket(0, item.mlist[0])
+            } else {
+                componentId.value = ''
+            }
+        }
+
+        // 切换市场
+        const onSelectMarket = (index: number, item: TjmdMarketSectionConfig) => {
+            const { trademode, auctionwrtype, listingmode } = item
+            selectedKey.value = index.toString()
+            // 仓单贸易
+            if (trademode === TradeMode.WarehouseReceiptTrade) {
+                componentId.value = `${trademode}-${auctionwrtype}-${listingmode}`
+            } else {
+                componentId.value = trademode.toString()
+            }
+        }
+
+        initData(() => {
+            if (marketsSetion.value.length) {
+                onSelectMenu(marketsSetion.value[0])
+            }
+        })
+
+        return {
+            marketsSetion,
+            markets,
+            selectedKey,
+            componentId,
+            onSelectMenu,
+            onSelectMarket
+        }
+    }
+})
+</script>

+ 9 - 14
src/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_blocs/index.vue

@@ -1,18 +1,13 @@
 <template>
-  <!-- 仓单贸易 贸易圈挂牌-->
-  <div class="topTableHeight">
-    <Filter :enumName="name"
-            @search="search"
-            @buy="buyOpen" />
-    <div>
-      <Sell />
-      <Buy />
+    <!-- 仓单贸易 贸易圈挂牌-->
+    <div class="topTableHeight">
+        <Filter :enumName="name" @search="search" @buy="buyOpen" />
+        <div class="topTableHeight__container">
+            <Sell />
+            <Buy />
+        </div>
+        <component :is="componentId" v-if="componentId" :selectedRow="selectedRow" @cancel="closeComponent"></component>
     </div>
-    <component :is="componentId"
-               v-if="componentId"
-               :selectedRow="selectedRow"
-               @cancel="closeComponent"></component>
-  </div>
 </template>
 
 <script lang="ts">
@@ -42,7 +37,7 @@ export default defineComponent({
         }
         // 控制异步组件
         const { componentId, closeComponent } = handleModalComponent(queryFn, selectedRow);
-        function search() {}
+        function search() { }
         function buyOpen(value: any) {
             componentId.value = 'postBuying';
             selectedRow.value = value;

+ 9 - 14
src/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_designate/index.vue

@@ -1,18 +1,13 @@
 <template>
-  <!-- 仓单贸易 贸易圈挂牌-->
-  <div class="topTableHeight">
-    <Filter :enumName="name"
-            @search="search"
-            @buy="buyOpen" />
-    <div>
-      <Sell />
-      <Buy />
+    <!-- 仓单贸易 贸易圈挂牌-->
+    <div class="topTableHeight">
+        <Filter :enumName="name" @search="search" @buy="buyOpen" />
+        <div class="topTableHeight__container">
+            <Sell />
+            <Buy />
+        </div>
+        <component :is="componentId" v-if="componentId" :selectedRow="selectedRow" @cancel="closeComponent"></component>
     </div>
-    <component :is="componentId"
-               v-if="componentId"
-               :selectedRow="selectedRow"
-               @cancel="closeComponent"></component>
-  </div>
 </template>
 
 <script lang="ts">
@@ -42,7 +37,7 @@ export default defineComponent({
         }
         // 控制异步组件
         const { componentId, closeComponent } = handleModalComponent(queryFn, selectedRow);
-        function search() {}
+        function search() { }
         function buyOpen(value: any) {
             componentId.value = 'postBuying';
             selectedRow.value = value;

+ 15 - 7
src/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_floating_price/index.vue

@@ -1,16 +1,23 @@
 <template>
   <!-- 仓单预售 浮动价预售-->
-  <div class="topTableHeight">
-    <Filter :enumName="name" @buy="buyOpen" @filterGoods="filterGoods" @search="search" />
-    <a-table :columns="columns" :class="['srcollYTable', isBottom ? 'condSecondTabTable' : 'condSecondTabTableNoBottom', tableList.length ? 'noPlaceHolder' : 'hasPlaceHolder']" :scroll="{ x: '100%', y: isBottom ? 'calc(100vh- 443px)' : 'calc(100vh - 196px)' }" :pagination="false" :loading="loading" :expandedRowKeys="expandedRowKeys" :customRow="Rowclick" rowKey="key" :data-source="tableList"></a-table>
-    <!-- 右键 -->
-    <contextMenu :contextMenu="contextMenu" @cancel="closeContext" :list="firstBtn"></contextMenu>
-    <component :is="componentId" v-if="componentId" :enumName="name" :selectedRow="selectedRow" @cancel="closeComponent"></component>
-  </div>
+  <mtp-table-scroll>
+    <template #header>
+      <Filter :enumName="name" @buy="buyOpen" @filterGoods="filterGoods" @search="search" />
+    </template>
+    <template #default="{ scroll }">
+      <a-table :columns="columns" class="srcollYTable" :scroll="scroll" :pagination="false" :loading="loading"
+        :expandedRowKeys="expandedRowKeys" :customRow="Rowclick" rowKey="key" :data-source="tableList"></a-table>
+    </template>
+  </mtp-table-scroll>
+  <!-- 右键 -->
+  <contextMenu :contextMenu="contextMenu" @cancel="closeContext" :list="firstBtn"></contextMenu>
+  <component :is="componentId" v-if="componentId" :enumName="name" :selectedRow="selectedRow" @cancel="closeComponent">
+  </component>
 </template>
 
 <script lang="ts">
 import { onBeforeUnmount } from 'vue';
+import MtpTableScroll from '@/common/components/tableScroll/index.vue';
 import { EnumRouterName } from '@/common/constants/enumRouterName';
 import { queryTableList, contextMenu, defineAsyncComponent, defineComponent, ModalEnum, ComposeTableParam } from '@/common/export/commonTable';
 import { QueryOrderQuoteReq, WrOrderQuote } from '@/services/go/wrtrade/interface';
@@ -25,6 +32,7 @@ import Bus from '@/utils/eventBus/index';
 export default defineComponent({
   name: EnumRouterName.warehouse_pre_sale_floating_price,
   components: {
+    MtpTableScroll,
     contextMenu,
     Filter,
     warehouse_pre_sale_floating_price_spot_trade_warehouse_detail: defineAsyncComponent(() => import('../../components/detail/index.vue')),

+ 16 - 8
src/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_price/index.vue

@@ -1,16 +1,23 @@
 <template>
   <!-- 仓单预售 一口价预售-->
-  <div class="topTableHeight">
-    <Filter :enumName="name" @search="search" @buy="buyOpen" />
-    <a-table :columns="columns" :class="['srcollYTable', isBottom ? 'condSecondTabTable' : 'condSecondTabTableNoBottom', tableList.length ? 'noPlaceHolder' : 'hasPlaceHolder']" :scroll="{ x: '100%', y: isBottom ? 'calc(100vh- 443px)' : 'calc(100vh - 196px)' }" :pagination="false" :loading="loading" :expandedRowKeys="expandedRowKeys" :customRow="Rowclick" rowKey="key" :data-source="tableList"></a-table>
-    <!-- 右键 -->
-    <contextMenu :contextMenu="contextMenu" @cancel="closeContext" :list="firstBtn"></contextMenu>
-    <component :is="componentId" v-if="componentId" :enumName="name" :selectedRow="selectedRow" @cancel="closeComponent"></component>
-  </div>
-</template>
+  <mtp-table-scroll>
+    <template #header>
+      <Filter :enumName="name" @search="search" @buy="buyOpen" />
+    </template>
+    <template #default="{ scroll }">
+      <a-table :columns="columns" class="srcollYTable" :scroll="scroll" :pagination="false" :loading="loading"
+        :expandedRowKeys="expandedRowKeys" :customRow="Rowclick" rowKey="key" :data-source="tableList"></a-table>
+    </template>
+  </mtp-table-scroll>
+  <!-- 右键 -->
+  <contextMenu :contextMenu="contextMenu" @cancel="closeContext" :list="firstBtn"></contextMenu>
+  <component :is="componentId" v-if="componentId" :enumName="name" :selectedRow="selectedRow" @cancel="closeComponent">
+  </component>
+</template> 
 
 <script lang="ts">
 import { onBeforeUnmount } from 'vue';
+import MtpTableScroll from '@/common/components/tableScroll/index.vue';
 import { EnumRouterName } from '@/common/constants/enumRouterName';
 import { queryTableList, contextMenu, defineAsyncComponent, defineComponent, ModalEnum, ComposeTableParam } from '@/common/export/commonTable';
 import { QueryOrderQuoteReq, WrOrderQuote } from '@/services/go/wrtrade/interface';
@@ -23,6 +30,7 @@ import Bus from '@/utils/eventBus/index';
 export default defineComponent({
   name: EnumRouterName.warehouse_pre_sale_price,
   components: {
+    MtpTableScroll,
     contextMenu,
     Filter,
     warehouse_pre_sale_price_spot_trade_warehouse_detail: defineAsyncComponent(() => import('../../components/detail/index.vue')),

+ 4 - 10
src/views/market/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_blocs/index.vue

@@ -1,19 +1,13 @@
 <template>
     <!-- 仓单贸易 贸易圈挂牌-->
-    <div class="topTableHeight topTableHeight_413">
+    <div class="topTableHeight">
         <Filter :enumName="name" @search="search" @buy="buyOpen" />
-        <div>
+        <div class="topTableHeight__container">
             <Sell isWR="1" IsSpecified="1" />
             <Buy isWR="1" IsSpecified="1" />
         </div>
-        <component
-            :is="componentId"
-            v-if="componentId"
-            isWR="1"
-            IsSpecified="1"
-            :selectedRow="selectedRow"
-            @cancel="closeComponent"
-        ></component>
+        <component :is="componentId" v-if="componentId" isWR="1" IsSpecified="1" :selectedRow="selectedRow"
+            @cancel="closeComponent"></component>
     </div>
 </template>
 

+ 9 - 14
src/views/market/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_designate/index.vue

@@ -1,18 +1,13 @@
 <template>
-  <!-- 仓单贸易 贸易圈挂牌-->
-  <div class="topTableHeight">
-    <Filter :enumName="name"
-            @search="search"
-            @buy="buyOpen" />
-    <div>
-      <Sell />
-      <Buy />
+    <!-- 仓单贸易 贸易圈挂牌-->
+    <div class="topTableHeight">
+        <Filter :enumName="name" @search="search" @buy="buyOpen" />
+        <div class="topTableHeight__container">
+            <Sell />
+            <Buy />
+        </div>
+        <component :is="componentId" v-if="componentId" :selectedRow="selectedRow" @cancel="closeComponent"></component>
     </div>
-    <component :is="componentId"
-               v-if="componentId"
-               :selectedRow="selectedRow"
-               @cancel="closeComponent"></component>
-  </div>
 </template>
 
 <script lang="ts">
@@ -42,7 +37,7 @@ export default defineComponent({
         }
         // 控制异步组件
         const { componentId, closeComponent } = handleModalComponent(queryFn, selectedRow);
-        function search() {}
+        function search() { }
         function buyOpen(value: any) {
             componentId.value = 'postBuying';
             selectedRow.value = value;

+ 15 - 7
src/views/market/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_floating_price/index.vue

@@ -1,16 +1,23 @@
 <template>
   <!-- 仓单贸易 浮动价挂牌-->
-  <div class="topTableHeight topTableHeight_413">
-    <Filter :enumName="name" @search="search" @filterGoods="filterGoods" @buy="buyOpen" />
-    <a-table :columns="columns" :class="['srcollYTable', isBottom ? 'condSecondTabTable' : 'condSecondTabTableNoBottom', tableList.length ? 'noPlaceHolder' : 'hasPlaceHolder']" :scroll="{ x: '100%', y: isBottom ? 'calc(100vh- 443px)' : 'calc(100vh - 196px)' }" :pagination="false" :loading="loading" :expandedRowKeys="expandedRowKeys" :customRow="Rowclick" rowKey="key" :data-source="tableList"></a-table>
-    <!-- 右键 -->
-    <contextMenu :contextMenu="contextMenu" @cancel="closeContext" :list="firstBtn"></contextMenu>
-    <component :is="componentId" v-if="componentId" :enumName="name" :selectedRow="selectedRow" @cancel="closeComponent"></component>
-  </div>
+  <mtp-table-scroll>
+    <template #header>
+      <Filter :enumName="name" @search="search" @filterGoods="filterGoods" @buy="buyOpen" />
+    </template>
+    <template #default="{ scroll }">
+      <a-table :columns="columns" class="srcollYTable" :scroll="scroll" :pagination="false" :loading="loading"
+        :expandedRowKeys="expandedRowKeys" :customRow="Rowclick" rowKey="key" :data-source="tableList"></a-table>
+    </template>
+  </mtp-table-scroll>
+  <!-- 右键 -->
+  <contextMenu :contextMenu="contextMenu" @cancel="closeContext" :list="firstBtn"></contextMenu>
+  <component :is="componentId" v-if="componentId" :enumName="name" :selectedRow="selectedRow" @cancel="closeComponent">
+  </component>
 </template>
 
 <script lang="ts">
 import { onBeforeUnmount } from 'vue';
+import MtpTableScroll from '@/common/components/tableScroll/index.vue';
 import { getShowBottomValue } from '@/common/config/constrolBottom';
 import { EnumRouterName } from '@/common/constants/enumRouterName';
 import { ComposeTableParam, contextMenu, defineAsyncComponent, defineComponent, queryTableList } from '@/common/export/commonTable';
@@ -25,6 +32,7 @@ import Filter from '../../components/filter/index.vue';
 export default defineComponent({
   name: EnumRouterName.warehouse_receipt_trade_floating_price,
   components: {
+    MtpTableScroll,
     contextMenu,
     Filter,
     warehouse_receipt_trade_floating_price_spot_trade_warehouse_detail: defineAsyncComponent(() => import('../../components/detail/index.vue')),