Quellcode durchsuchen

#4128、#4129、#4137、#4133、#4138、#4135、#4136

li.shaoyi vor 3 Jahren
Ursprung
Commit
999dc4ae53

+ 1 - 1
public/config/app.config.json

@@ -1,4 +1,4 @@
 {
-    "apiUrl": "http://192.168.31.139:8080/cfg?key=test_139",
+    "apiUrl": "http://192.168.31.204:8080/cfg?key=test_204",
     "icoTitle": "云融"
 }

+ 7 - 4
src/views/market/spot_trade/components/buy-sell-market/index.vue

@@ -80,8 +80,8 @@
           :btnList="handleBtnList(buyMarket.btnList)" />
       </a-col>
     </a-row>
-    <component :is="componentId" v-if="componentId" :selectedRow="getSelectedRow()" :enumName="enumName" :time="time"
-      @cancel="closeComponent"> </component>
+    <component :is="componentId" v-bind="{ selectedMarket, selectedRow: getSelectedRow(), enumName, time }"
+      v-if="componentId" @cancel="closeComponent"> </component>
   </div>
 </template>
 
@@ -105,13 +105,16 @@ import { getQuoteDayInfoByCodeFindPrice, getQuoteDayInfoByCode } from '@/service
 import TimerUtils from '@/utils/timer/timerUtil';
 import { BtnListType } from '@/common/components/btnList/interface';
 import moment, { Moment } from 'moment';
-import { BuyOrSell } from '@/common/constants/enumCommon';
-import { QueryQuoteDayRsp } from '@/services/go/quote/interface';
+import { TjmdMarketSectionConfig } from '@/services/go/Tjmd/interface'
 
 export default defineComponent({
   emits: ['cancel', 'update'],
   name: 'buy-sell-market',
   props: {
+    selectedMarket: {
+      type: Object as PropType<TjmdMarketSectionConfig>,
+      required: true,
+    },
     selectedRow: {
       type: Object as PropType<WrOrderQuote>,
       default: {},

+ 2 - 0
src/views/market/spot_trade/components/filter/index.vue

@@ -131,6 +131,8 @@ export default defineComponent({
             if (el.key === id) {
               //  品种id
               result.deliverygoodsid = +(item.key as string).replace('--', '');
+              result.enumdicname = el.enumdicname;
+              result.minivalue = el.minivalue;
             }
           });
         });

+ 36 - 43
src/views/market/spot_trade/components/post_buying/index.vue

@@ -160,6 +160,7 @@ import Permance from '@/common/components/permanceTemp/choosePermancePlanTmp.vue
 import { queryWrPosition } from '@/services/go/wrtrade';
 import { QueryPermancePlanTmpRsp, WrPosition } from '@/services/go/wrtrade/interface';
 import { getRulesByMarketid } from '@/services/bus/rules';
+import { TjmdMarketSectionConfig } from '@/services/go/Tjmd/interface'
 
 export default defineComponent({
   emits: ['cancel', 'update'],
@@ -172,6 +173,10 @@ export default defineComponent({
     MinusOutlined,
   },
   props: {
+    selectedMarket: {
+      type: Object as PropType<TjmdMarketSectionConfig>,
+      required: true,
+    },
     selectedRow: {
       type: Object as PropType<TempWrOrderQuoteDetail>,
       default: {},
@@ -194,55 +199,43 @@ export default defineComponent({
     const wrPosition = ref<WrPosition>(); // 预售仓单头寸
     const showListingType = ref(false); // 是否显示挂牌方式
 
-    if (accountList.length) {
-      formState.accountid = accountList[0].accountid;
-    }
-    function getSelectedAccount() {
-      return accountList.find((e) => e.accountid === formState.accountid);
-    }
+    formState.accountid = accountList[0]?.accountid;
+    formState.marketid = props.selectedMarket.marketid;
     formState.DeliveryMonth = props.selectedRow.deliverymonth ? moment(new Date(props.selectedRow.deliverymonth)) : props.time;
 
-    switch (props.enumName) {
-      // 仓单贸易
-      case EnumRouterName.warehouse_receipt_trade_price: {
-        formState.marketid = 17201;
-        break;
-      }
-      // 仓单预售
-      case EnumRouterName.warehouse_pre_sale_price: {
-        formState.marketid = 17202;
-        // 仓单预售市场 任务 #3687
-        const marketConfig = getRulesByMarketid(17202);
-        if (marketConfig) {
-          // 是否效验无仓单额度
-          if (marketConfig.nowrquotaflag) {
-            // 获取持仓头寸
-            queryWrPosition({ haswr: 0, querytype: 2, }).then((res) => {
-              const { wrfactortypeid, wrstandardid, warehouseid, dgitemname } = props.selectedRow;
-
-              if (wrfactortypeid) {
-                // 根据仓单要素id查询头寸
-                wrPosition.value = res.find((e) => e.wrfactortypeid === wrfactortypeid);
-              } else {
-                // 根据商品、仓库、品牌查询持仓头寸
-                wrPosition.value = res.find((e) => e.wrstandardid === wrstandardid && e.warehouseid === warehouseid && e.wrtypename.includes(dgitemname));
-              }
-
-              // 卖方需要有仓单头寸 “预售可用额度”
-              if (wrPosition.value && wrPosition.value.creditenableqty > 0) {
-                showListingType.value = true;
-              }
-            })
-          }
+    // 仓单预售(无仓单)
+    if (props.selectedMarket.auctionwrtype === 1) {
+      // 仓单预售市场 任务 #3687
+      const marketConfig = getRulesByMarketid(formState.marketid);
+      if (marketConfig) {
+        // 是否效验无仓单额度
+        if (marketConfig.nowrquotaflag) {
+          // 获取持仓头寸
+          queryWrPosition({ haswr: 0, querytype: 2, }).then((res) => {
+            const { wrfactortypeid, wrstandardid, warehouseid, dgitemname } = props.selectedRow;
+
+            if (wrfactortypeid) {
+              // 根据仓单要素id查询头寸
+              wrPosition.value = res.find((e) => e.wrfactortypeid === wrfactortypeid);
+            } else {
+              // 根据商品、仓库、品牌查询持仓头寸
+              wrPosition.value = res.find((e) => e.wrstandardid === wrstandardid && e.warehouseid === warehouseid && e.wrtypename.includes(dgitemname));
+            }
+
+            // 卖方需要有仓单头寸 “预售可用额度”
+            if (wrPosition.value && wrPosition.value.creditenableqty > 0) {
+              showListingType.value = true;
+            }
+          })
         }
-        break;
-      }
-      default: {
-        message.error('市场信息异常,请稍后重试');
       }
     }
 
-    const { getMaxNum, getMoney, getMargin, getPrice } = handleNumAndPrice(props.enumName, props.selectedRow);
+    function getSelectedAccount() {
+      return accountList.find((e) => e.accountid === formState.accountid);
+    }
+
+    const { getMaxNum, getMoney, getMargin, getPrice } = handleNumAndPrice(props.enumName, props.selectedMarket);
     if (getMaxNum()) {
       formState.OrderQty = props.selectedRow.minivalue;
     }

+ 8 - 7
src/views/market/spot_trade/components/post_buying/setup.ts

@@ -11,6 +11,7 @@ import moment from "moment";
 import { onBeforeUnmount, reactive, ref, UnwrapRef } from "vue";
 import { getGoodsPrice, handleIs } from "../buy-sell-market/setup";
 import { FormParam, TempWrOrderQuoteDetail } from "./interface";
+import { TjmdMarketSectionConfig } from '@/services/go/Tjmd/interface'
 
 function initFormData(): FormParam {
     return {
@@ -50,7 +51,7 @@ export function handleForm(selectedRow: TempWrOrderQuoteDetail) {
 }
 
 
-export function handleNumAndPrice(enumName: EnumRouterName, selectedRow: WrOrderQuote) {
+export function handleNumAndPrice(enumName: EnumRouterName, selectedMarket: TjmdMarketSectionConfig) {
     const { isFloat } = handleIs(enumName)
     // 资金账号
     const accountList = getAccountTypeList([2]);
@@ -82,15 +83,15 @@ export function handleNumAndPrice(enumName: EnumRouterName, selectedRow: WrOrder
                     return rules.buymarginvalue;
                 }
                 case BuyOrSell.sell: {
-                    switch (formState.marketid) {
-                        // 有仓单
-                        case 17201: {
-                            return rules.sellmarginvalue;
-                        }
+                    switch (selectedMarket.auctionwrtype) {
                         // 无仓单
-                        case 17202: {
+                        case 1: {
                             return rules.sellmarginvalue2;
                         }
+                        // 有仓单
+                        default: {
+                            return rules.sellmarginvalue;
+                        }
                     }
                 }
             }

+ 6 - 2
src/views/market/spot_trade/index.vue

@@ -1,7 +1,7 @@
 <template>
     <div class="exposure">
         <firstMenu :list="marketsSetion" value="marketsectionname" @selectMenu="onSelectMenu" />
-        <component :is="componentId" v-if="componentId" />
+        <component :is="componentId" :selectedMarket="selectedMarket" v-if="componentId" />
         <thirdMenu :list="markets" value="marketname" :selectedKey="selectedKey" @selectMenu="onSelectMarket"
             v-if="markets.length" />
     </div>
@@ -39,7 +39,7 @@ export default defineComponent({
         // 参考行情
         [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.ListingAndSelection]: defineAsyncComponent(() => import('./spot_trade_order_transaction/spot_trade_order_transaction_listing_selection/index.vue')),
         // 掉期贸易
         [TradeMode.DiaoQi]: defineAsyncComponent(() => import('./spot_trade_order_transaction/spot_trade_order_transaction_swap/index.vue')),
         // 融资融货
@@ -51,6 +51,8 @@ export default defineComponent({
         // 市场
         const markets = ref<TjmdMarketSectionConfig[]>([])
         // 选中的市场
+        const selectedMarket = ref<TjmdMarketSectionConfig>()
+        // 选中的市场标签
         const selectedKey = ref('0')
         // 组件ID
         const componentId = ref('')
@@ -69,6 +71,7 @@ export default defineComponent({
         // 切换市场
         const onSelectMarket = (index: number, item: TjmdMarketSectionConfig) => {
             const { trademode, auctionwrtype, listingmode } = item
+            selectedMarket.value = item
             selectedKey.value = index.toString()
             // 仓单贸易
             if (trademode === TradeMode.WarehouseReceiptTrade) {
@@ -87,6 +90,7 @@ export default defineComponent({
         return {
             marketsSetion,
             markets,
+            selectedMarket,
             selectedKey,
             componentId,
             onSelectMenu,

+ 54 - 50
src/views/market/spot_trade/spot_trade_order_transaction/components/buy-sell-market/index.vue

@@ -2,7 +2,7 @@
   <!-- 买卖大厅 -->
   <div class="buy-sell-market">
     <div class="buy-sell-market-title">
-      <a class="backIcon" @click="cancelAction">
+      <a class="backIcon" @click="cancel()">
         <LeftOutlined />
       </a>
       <div class="titleBtn">
@@ -51,12 +51,19 @@
             </div>
           </div>
         </div>
-        <BtnList :btnList="handleBtnList()" :record="selectedRow" @click="openComponent" />
+        <BtnList :btnList="handleBtnList()" :record="selectedRow" @click="openComponent">
+          <template #after>
+            <a-button class="operBtn ant-btn" @click="changeComponent">
+              <span v-if="showComponentsId === ComponentType.marketContent">图表</span>
+              <span v-else>买卖大厅</span>
+            </a-button>
+          </template>
+        </BtnList>
       </div>
     </div>
     <!-- 交易图表 -->
-    <!-- <Chart v-if="showComponentsId === ComponentType.chart" @update="changeComponent" :deliverGoods="deliverGoods" /> -->
-    <Chart v-if="showComponentsId === ComponentType.chart" @update="changeComponent" :selectedRow="selectedRow" />
+    <!-- <Chart v-if="showComponentsId === ComponentType.chart" :deliverGoods="deliverGoods" /> -->
+    <Chart v-if="showComponentsId === ComponentType.chart" :selectedRow="selectedRow" />
     <!-- 买卖大厅内容 -->
     <a-row class="buySellHall" v-if="showComponentsId === ComponentType.marketContent">
       <a-col :span="12">
@@ -68,30 +75,25 @@
     </a-row>
     <!-- 成交明细 -->
     <StockExchange :deliverGoods="deliverGoods" v-if="showComponentsId === ComponentType.tradeDetail" />
-    <component :is="componentId" v-if="componentId" :selectedRow="selectedRow" :deliverGoods="deliverGoods" @cancel="closeComponent"></component>
+    <component :is="componentId" v-if="componentId" :selectedRow="selectedRow" :deliverGoods="deliverGoods"
+      @cancel="closeComponent"></component>
   </div>
 </template>
 
 <script lang="ts">
-import { EnumRouterName } from '@/common/constants/enumRouterName';
 import { defineAsyncComponent, defineComponent, BtnList } from '@/common/export/commonTable';
 import { _closeModal } from '@/common/setup/modal/modal';
-import { WrOrderQuote } from '@/services/go/wrtrade/interface';
 import { LeftOutlined } from '@ant-design/icons-vue';
 import Buy from '../buy-market/index.vue';
 import Sell from '../sell-market/index.vue';
 import { handleModalComponent } from '@/common/setup/asyncComponent';
-import { onBeforeUnmount, onMounted, PropType, ref } from 'vue';
-
+import { onBeforeUnmount, PropType, ref } from 'vue';
 import Bus from '@/utils/eventBus/index';
 import TimerUtils from '@/utils/timer/timerUtil';
 import { BtnListType } from '@/common/components/btnList/interface';
-import moment, { Moment } from 'moment';
-import { QueryQuoteDayRsp } from '@/services/go/quote/interface';
 import { QueryDeliveryRelationRsp } from '@/services/go/delivery/interface';
 import StockExchange from '../stock-exchange/index.vue';
 //import Chart from '../chart/index.vue';
-import Chart from '../../../components/goods-chart/chart/index.vue'; // 暂用组件,待优化
 import { ComponentType } from '../../setup';
 import { handleSubcriteOnDemandQuote, handleQuotePriceColor, quoteChange, quoteAmplitude, quoteAmplituOfVibration, handleNoneValue } from '@/common/setup/table/tableQuote';
 import { Tradesfer } from '../../spot_trade_order_transaction_listing_transfer/interface';
@@ -113,14 +115,14 @@ export default defineComponent({
     Buy,
     Sell,
     BtnList,
-    Chart,
+    Chart: defineAsyncComponent(() => import('../../../components/goods-chart/chart/index.vue')),
     LeftOutlined,
     Listing: defineAsyncComponent(() => import('../listing/index.vue')),
     Detail: defineAsyncComponent(() => import('../detail/index.vue')),
     StockExchange,
   },
   setup(props, context) {
-    const loading = ref<boolean>(false);
+    const loading = ref(false);
     const { visible, cancel } = _closeModal(context);
     function handleBtnList() {
       const result: BtnListType[] = [{ lable: '挂牌求购', code: 'Listing', className: 'operBtn' }];
@@ -142,18 +144,14 @@ export default defineComponent({
     };
     const { componentId, closeComponent, openComponent } = handleModalComponent(queryFn, ref({}));
 
-    const showComponentsId = ref<ComponentType>(ComponentType.chart);
+    const showComponentsId = ref<ComponentType>(ComponentType.marketContent);
 
     // 切换组件
-    function changeComponent(type: ComponentType) {
-      showComponentsId.value = type;
-    }
-    // 返回上层组件
-    function cancelAction() {
-      if (showComponentsId.value === ComponentType.chart) {
-        cancel();
+    function changeComponent() {
+      if (showComponentsId.value === ComponentType.marketContent) {
+        showComponentsId.value = ComponentType.chart
       } else {
-        showComponentsId.value = ComponentType.chart;
+        showComponentsId.value = ComponentType.marketContent
       }
     }
 
@@ -172,6 +170,7 @@ export default defineComponent({
     })
 
     return {
+      loading,
       buyRef,
       sellRef,
       cancel,
@@ -182,7 +181,6 @@ export default defineComponent({
       changeComponent,
       ComponentType,
       showComponentsId,
-      cancelAction,
       handleSubcriteOnDemandQuote,
       handleQuotePriceColor,
       handleNoneValue,
@@ -196,37 +194,43 @@ export default defineComponent({
 </script>
 <style lang="less">
 .valNums {
-    .flex;
-    flex-direction: column;
-    padding-left: 20px;
-    .firstNum {
-        font-size: 18px;
-        line-height: 18px;
-        font-weight: 400;
-    }
-    .lastNum {
-        margin-top: 2px;
-        display: inline-flex;
-        font-size: 12px;
-        line-height: 12px;
-        font-weight: 300;
-    }
+  .flex;
+  flex-direction: column;
+  padding-left: 20px;
+
+  .firstNum {
+    font-size: 18px;
+    line-height: 18px;
+    font-weight: 400;
+  }
+
+  .lastNum {
+    margin-top: 2px;
+    display: inline-flex;
+    font-size: 12px;
+    line-height: 12px;
+    font-weight: 300;
+  }
 }
+
 .inlineBar {
-    display: inline-flex;
+  display: inline-flex;
 }
+
 .priceBar {
-    .flex;
-    flex-direction: column;
-    height: 32px;
-    .greenBar,
-    .redBar {
-        height: 16px;
-        line-height: 16px;
-    }
+  .flex;
+  flex-direction: column;
+  height: 32px;
+
+  .greenBar,
+  .redBar {
+    height: 16px;
+    line-height: 16px;
+  }
 }
+
 .start {
-    align-self: flex-start !important;
-    align-items: flex-start !important;
+  align-self: flex-start !important;
+  align-items: flex-start !important;
 }
 </style>

+ 138 - 0
src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_listing_selection/index.vue

@@ -0,0 +1,138 @@
+<template>
+    <!-- 订单交易 挂牌点选-->
+    <mtp-table-scroll>
+        <template #default="{ scroll }">
+            <a-table :columns="columns" class="srcollYTable" :scroll="scroll" :pagination="false" :loading="loading"
+                :expandedRowKeys="expandedRowKeys" :customRow="Rowclick" rowKey="key" :data-source="quoteList">
+                <template #totalturnover="{ text }">
+                    <span>{{ changeUnit(text) }}</span>
+                </template>
+                <!-- 买量 -->
+                <template #bidvolume="{ text }">
+                    <span>{{ handleNoneValue(text) }}</span>
+                </template>
+                <!-- 卖量 -->
+                <template #askvolume="{ text }">
+                    <span>{{ handleNoneValue(text) }}</span>
+                </template>
+                <!-- 开盘价 -->
+                <template #opened="{ record, text }">
+                    <span :class="handleQuotePriceColor(text, record.presettle)">{{ handleNoneValue(text) }}</span>
+                </template>
+                <!-- 涨跌 -->
+                <template #change="{ record, text }">
+                    <span :class="handleQuotePriceColor(text, record.presettle)">{{ quoteChange(record,
+                            record.decimalplace)
+                    }}</span>
+                </template>
+                <!-- 幅度 -->
+                <template #amplitude="{ record }">
+                    <span :class="handleQuotePriceColor(record.last, record.presettle)">{{ quoteAmplitude(record,
+                            record.decimalplace)
+                    }}</span>
+                </template>
+                <!-- 振幅 -->
+                <template #vibration="{ record, text }">
+                    <span :class="handleQuotePriceColor(text, record.presettle)">{{ quoteAmplituOfVibration(record,
+                            record.decimalplace)
+                    }}</span>
+                </template>
+                <template #index="{ index }">
+                    <span>{{ index + 1 }}</span>
+                </template>
+                <!-- 买价 -->
+                <template #bid="{ text, record }">
+                    <span :class="handleQuotePriceColor(text, record.presettle)">{{ handleNoneValue(text) }}</span>
+                </template>
+                <!-- 卖价 -->
+                <template #ask="{ text, record }">
+                    <span :class="handleQuotePriceColor(text, record.presettle)">{{ handleNoneValue(text) }}</span>
+                </template>
+                <!-- 最新价 -->
+                <template #last="{ text, record }">
+                    <span :class="handleQuotePriceColor(text, record.presettle)">{{ handleNoneValue(text) }}</span>
+                </template>
+                <!-- 最低价 -->
+                <template #lowest="{ text, record }">
+                    <span :class="handleQuotePriceColor(text, record.presettle)">{{ handleNoneValue(text) }}</span>
+                </template>
+                <!-- 最高价 -->
+                <template #highest="{ text, record }">
+                    <span :class="handleQuotePriceColor(text, record.presettle)">{{ handleNoneValue(text) }}</span>
+                </template>
+            </a-table>
+        </template>
+    </mtp-table-scroll>
+    <!-- 右键 -->
+    <contextMenu :contextMenu="contextMenu" @cancel="closeContext" :list="btnList"></contextMenu>
+    <component :is="componentId" v-if="componentId"
+        v-bind="{ selectedMarket, selectedRow, deliverGoods: findDeilverGoodsByGoodsCode(selectedRow.goodscode) }"
+        @cancel="closeComponent"></component>
+</template>
+
+<script lang="ts">
+import MtpTableScroll from '@/common/components/tableScroll/index.vue';
+import { BtnListType } from '@/common/components/btnList/interface';
+import { getShowBottomValue } from '@/common/config/constrolBottom';
+import { EnumRouterName } from '@/common/constants/enumRouterName';
+import { contextMenu, defineAsyncComponent, defineComponent } from '@/common/export/commonTable';
+import { handleTableEventAndData } from '@/common/setup/table/compose';
+import { TableParam } from '@/common/setup/table/interface';
+import { handleNoneValue, handleQuotePriceColor, handleSubcriteOnDemandQuote, quoteAmplitude, quoteAmplituOfVibration, quoteChange } from '@/common/setup/table/tableQuote';
+import { QueryQuoteDayRsp } from '@/services/go/quote/interface';
+import { changeUnit } from '@/utils/qt/common';
+import { ref, PropType } from 'vue';
+import { columnsList, handleDeliveryRelation } from './setup';
+import { TjmdMarketSectionConfig } from '@/services/go/Tjmd/interface'
+
+export default defineComponent({
+    name: EnumRouterName.spot_trade_order_transaction_basis_difference,
+    components: {
+        MtpTableScroll,
+        contextMenu,
+        BuyAndSell: defineAsyncComponent(() => import('../components/buy-sell-market/index.vue')),
+        Listing: defineAsyncComponent(() => import('../components/listing/index.vue')),
+        Detail: defineAsyncComponent(() => import('../components/detail/index.vue')),
+    },
+    props: {
+        selectedMarket: {
+            type: Object as PropType<TjmdMarketSectionConfig>,
+            default: () => ({})
+        },
+    },
+    setup() {
+        const isBottom = getShowBottomValue();
+        const loading = ref<boolean>(false);
+        const param: TableParam = {
+            columnsList,
+            queryFn: () => { },
+            clickName: 'BuyAndSell',
+        };
+        const btnList: BtnListType[] = [
+            { lable: '挂牌求购', code: 'Listing', className: 'btnDeafault' },
+            { lable: '图表', code: 'BuyAndSell', className: 'btnDeafault' },
+            { lable: '详情', code: 'Detail', className: 'btnDeafault' },
+        ];
+        const { quoteList, findDeilverGoodsByGoodsCode } = handleDeliveryRelation();
+        // 行情按需订阅
+        handleSubcriteOnDemandQuote(quoteList);
+
+        return {
+            isBottom,
+            ...handleTableEventAndData<QueryQuoteDayRsp>(param),
+            btnList,
+            handleQuotePriceColor,
+            quoteChange,
+            quoteAmplitude,
+            quoteAmplituOfVibration,
+            quoteList,
+            findDeilverGoodsByGoodsCode,
+            loading,
+            handleNoneValue,
+            changeUnit,
+        };
+    },
+});
+</script>
+<style lang="less">
+</style>

+ 68 - 0
src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_listing_selection/setup.ts

@@ -0,0 +1,68 @@
+import { TradeMode } from "@/common/constants/enumCommon"
+import { initData } from "@/common/methods"
+import { getGoodsListByTrade, getQuoteDayInfoByCode } from "@/services/bus/goods"
+import { getMarketByTradeMode } from "@/services/bus/market"
+import { queryDeliveryRelation } from "@/services/go/delivery"
+import { QueryDeliveryRelationRsp } from "@/services/go/delivery/interface"
+import { QueryQuoteDayRsp } from "@/services/go/quote/interface"
+import { ref } from "vue"
+
+export function handleDeliveryRelation() {
+    // 查询交割商品
+    const allDeliverGoods = ref<QueryDeliveryRelationRsp[]>([])
+    // 行情商品
+    const quoteList = ref<QueryQuoteDayRsp[]>([])
+
+    initData(() => {
+        const allGoodsLsit = getGoodsListByTrade(TradeMode.ListingAndSelection).value.filter(e => e.goodsstatus === 3)
+        allGoodsLsit.forEach(el => {
+            // 找到盘面数据
+            const quote = getQuoteDayInfoByCode(el.goodscode);
+            if (quote) {
+                Object.assign(quote, { goodsname: el.goodsname, goodsid: el.goodsid })
+                quoteList.value.push(quote)
+            }
+        })
+
+        const marketid = getMarketByTradeMode(TradeMode.ListingAndSelection)!.marketid
+        queryDeliveryRelation({ marketid }).then(res => {
+            allDeliverGoods.value = res
+        })
+    })
+
+    // 通过goodscode 查找交割商品
+    function findDeilverGoodsByGoodsCode(goodscode: string) {
+        return allDeliverGoods.value.find(e => e.goodscode === goodscode)!
+    }
+    return { quoteList, allDeliverGoods, goodsList: allDeliverGoods, findDeilverGoodsByGoodsCode }
+}
+
+export const columnsList = [
+    { title: '序号', key: 'index', width: 80 },
+    { title: '代码', key: 'goodscode' },
+    { title: '名称', key: 'goodsname' },
+    { title: '买价', key: 'bid' },
+    { title: '买量', key: 'bidvolume' },
+    { title: '卖价', key: 'ask' },
+    { title: '卖量', key: 'askvolume' },
+    { title: '最新价', key: 'last' },
+    { title: '涨跌', key: 'change' }, // 最新价 - 昨结价
+    { title: '幅度', key: 'amplitude' }, // (最新价 - 昨结价) / 100 %
+    { title: '开盘价', key: 'opened' },
+    { title: '昨收价', key: 'preclose' },
+    { title: '昨结价', key: 'presettle' },
+    { title: '最低价', key: 'lowest' },
+    { title: '最高价', key: 'highest' },
+    // { title: '振幅', key: 'vibration' }, // (最高价 - 最低价 ) / 最新价  * 100 %
+    // { title: '总量', key: 'totalvolume' },
+    // { title: '现量', key: 'lastvolume' },
+    // { title: '持仓量', key: 'holdvolume' },
+    // { title: '日增', key: 'holdincrement' },
+    // { title: '金额', key: 'totalturnover' },
+];
+
+export enum ComponentType {
+    chart,
+    marketContent,
+    tradeDetail,
+}

+ 10 - 2
src/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_floating_price/index.vue

@@ -11,12 +11,13 @@
   </mtp-table-scroll>
   <!-- 右键 -->
   <contextMenu :contextMenu="contextMenu" @cancel="closeContext" :list="firstBtn"></contextMenu>
-  <component :is="componentId" v-if="componentId" :enumName="name" :selectedRow="selectedRow" @cancel="closeComponent">
+  <component :is="componentId" v-bind="{ selectedMarket, selectedRow, enumName: name }" v-if="componentId"
+    @cancel="closeComponent">
   </component>
 </template>
 
 <script lang="ts">
-import { onBeforeUnmount } from 'vue';
+import { onBeforeUnmount, PropType } 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';
@@ -28,6 +29,7 @@ import { Goods } from '@/services/go/ermcp/goodsInfo/interface';
 import { ref } from 'vue';
 import { getShowBottomValue } from '@/common/config/constrolBottom';
 import Bus from '@/utils/eventBus/index';
+import { TjmdMarketSectionConfig } from '@/services/go/Tjmd/interface'
 
 export default defineComponent({
   name: EnumRouterName.warehouse_pre_sale_floating_price,
@@ -40,6 +42,12 @@ export default defineComponent({
     buyAndSell: defineAsyncComponent(() => import('../../components/buy-sell-market/index.vue')),
     postBuying: defineAsyncComponent(() => import('../../components/post_buying/index.vue')),
   },
+  props: {
+    selectedMarket: {
+      type: Object as PropType<TjmdMarketSectionConfig>,
+      default: () => ({})
+    },
+  },
   setup() {
     const isBottom = getShowBottomValue();
     let cacheID: number | null = null;

+ 10 - 2
src/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_price/index.vue

@@ -11,12 +11,13 @@
   </mtp-table-scroll>
   <!-- 右键 -->
   <contextMenu :contextMenu="contextMenu" @cancel="closeContext" :list="firstBtn"></contextMenu>
-  <component :is="componentId" v-if="componentId" :enumName="name" :selectedRow="selectedRow" @cancel="closeComponent">
+  <component :is="componentId" v-bind="{ selectedMarket, selectedRow, enumName: name }" v-if="componentId"
+    @cancel="closeComponent">
   </component>
 </template> 
 
 <script lang="ts">
-import { onBeforeUnmount } from 'vue';
+import { onBeforeUnmount, PropType } 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';
@@ -26,6 +27,7 @@ import { handleComposeTable } from '@/views/market/spot_trade/setup';
 import Filter from '../../components/filter/index.vue';
 import { getShowBottomValue } from '@/common/config/constrolBottom';
 import Bus from '@/utils/eventBus/index';
+import { TjmdMarketSectionConfig } from '@/services/go/Tjmd/interface'
 
 export default defineComponent({
   name: EnumRouterName.warehouse_pre_sale_price,
@@ -38,6 +40,12 @@ export default defineComponent({
     buyAndSell: defineAsyncComponent(() => import('../../components/buy-sell-market/index.vue')),
     postBuying: defineAsyncComponent(() => import('../../components/post_buying/index.vue')),
   },
+  props: {
+    selectedMarket: {
+      type: Object as PropType<TjmdMarketSectionConfig>,
+      default: () => ({})
+    },
+  },
   setup() {
     const isBottom = getShowBottomValue();
     // 表格列表数据

+ 10 - 2
src/views/market/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_floating_price/index.vue

@@ -11,7 +11,8 @@
   </mtp-table-scroll>
   <!-- 右键 -->
   <contextMenu :contextMenu="contextMenu" @cancel="closeContext" :list="firstBtn"></contextMenu>
-  <component :is="componentId" v-if="componentId" :enumName="name" :selectedRow="selectedRow" @cancel="closeComponent">
+  <component :is="componentId" v-bind="{ selectedMarket, selectedRow, enumName: name }" v-if="componentId"
+    @cancel="closeComponent">
   </component>
 </template>
 
@@ -26,8 +27,9 @@ import { queryOrderQuote } from '@/services/go/wrtrade';
 import { QueryOrderQuoteReq, WrOrderQuote } from '@/services/go/wrtrade/interface';
 import Bus from '@/utils/eventBus/index';
 import { handleComposeTable } from '@/views/market/spot_trade/setup';
-import { ref } from 'vue';
+import { ref, PropType } from 'vue';
 import Filter from '../../components/filter/index.vue';
+import { TjmdMarketSectionConfig } from '@/services/go/Tjmd/interface'
 
 export default defineComponent({
   name: EnumRouterName.warehouse_receipt_trade_floating_price,
@@ -40,6 +42,12 @@ export default defineComponent({
     buyAndSell: defineAsyncComponent(() => import('../../components/buy-sell-market/index.vue')),
     postBuying: defineAsyncComponent(() => import('../../components/post_buying/index.vue')),
   },
+  props: {
+    selectedMarket: {
+      type: Object as PropType<TjmdMarketSectionConfig>,
+      default: () => ({})
+    },
+  },
   setup() {
     const isBottom = getShowBottomValue();
     let cacheID: number | null = null;

+ 13 - 3
src/views/market/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_price/index.vue

@@ -5,16 +5,19 @@
       <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>
+      <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>
+  <component :is="componentId" v-bind="{ selectedMarket, selectedRow, enumName: name }" v-if="componentId"
+    @cancel="closeComponent">
+  </component>
 </template>
 
 <script lang="ts">
-import { onBeforeUnmount } from 'vue';
+import { onBeforeUnmount, PropType } from 'vue';
 import MtpTableScroll from '@/common/components/tableScroll/index.vue';
 import { getShowBottomValue } from '@/common/config/constrolBottom';
 import { EnumRouterName } from '@/common/constants/enumRouterName';
@@ -24,6 +27,7 @@ import { QueryOrderQuoteReq, WrOrderQuote } from '@/services/go/wrtrade/interfac
 import Bus from '@/utils/eventBus/index';
 import { handleComposeTable } from '@/views/market/spot_trade/setup';
 import Filter from '../../components/filter/index.vue';
+import { TjmdMarketSectionConfig } from '@/services/go/Tjmd/interface'
 
 export default defineComponent({
   name: EnumRouterName.warehouse_receipt_trade_price,
@@ -36,6 +40,12 @@ export default defineComponent({
     buyAndSell: defineAsyncComponent(() => import('../../components/buy-sell-market/index.vue')),
     postBuying: defineAsyncComponent(() => import('../../components/post_buying/index.vue')),
   },
+  props: {
+    selectedMarket: {
+      type: Object as PropType<TjmdMarketSectionConfig>,
+      default: () => ({})
+    },
+  },
   setup() {
     const isBottom = getShowBottomValue();
     // 表格列表数据