Browse Source

商品掉期 摘牌添加 图表

huangbin 4 năm trước cách đây
mục cha
commit
c892942e39

+ 558 - 425
src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/components/delisting/index.vue

@@ -1,151 +1,192 @@
 <template>
   <!-- 挂牌求购 -->
-  <Drawer :title="!isBuy() ? '摘牌买入' : '摘牌卖出' "
-          :placement="'right'"
-          :visible="visible"
-          @cancel="cancel"
-          class="top">
-    <div class="post_buying">
-      <a-form class="inlineForm dialogForm"
-              ref="formRef"
-              :model="formState"
-              :rules="rules">
-        <div class="formBar">
-          <a-row :gutter="24">
-            <a-col :span="24">
-              <a-form-item label="交易账户"
-                           name="accountid">
-                <a-select class="inlineFormSelect"
-                          style="width: 260px"
-                          v-model:value="formState.accountid"
-                          placeholder="请选择">
-                  <a-select-option v-for="item in accountList"
-                                   :value="item.accountid"
-                                   :key="item.accountid">{{item.accountid}}</a-select-option>
-                </a-select>
-              </a-form-item>
+  <Drawer
+    :title="!isBuy() ? '摘牌买入' : '摘牌卖出'"
+    :placement="'right'"
+    :visible="visible"
+    @cancel="cancel"
+    class="top post-buying-container"
+  >
+    <a-row>
+      <a-col :span="12">
+        <div class="post_buying_chart">
+          <div class="buying_chart__nav">
+            <div class="content--left">{{ parantSelectedRow.goodscode }}</div>
+            <div class="content--right">{{ parantSelectedRow.goodsname }}</div>
+          </div>
+          <div class="chart-tips__last">
+            <div
+              :class="['content--left', handleQuotePriceColor_out(parantSelectedRow.refgoodscode, 'last')]"
+            >{{ getQuoteValue_out(parantSelectedRow.refgoodscode, 'last') }}</div>
+            <div class="content--right">
+              <span
+                :class="handleQuotePriceColor_out(parantSelectedRow.refgoodscode, 'last')"
+              >{{ quoteChange_out(parantSelectedRow.refgoodscode) }}</span>
+              <span
+                :class="handleQuotePriceColor_out(parantSelectedRow.refgoodscode, 'last')"
+              >{{ quoteAmplitude_out(parantSelectedRow.refgoodscode) }}</span>
+            </div>
+          </div>
+          <a-row>
+            <a-col :span="4" :offset="2">最高价</a-col>
+            <a-col :span="6">
+              <span
+                :class="handleQuotePriceColor_out(parantSelectedRow.refgoodscode, 'highest')"
+              >{{ getQuoteValue_out(parantSelectedRow.refgoodscode, 'highest') }}</span>
             </a-col>
-            <a-col :span="24">
-              <a-form-item label="挂牌方">
-                <span class="white">{{selectedRow.username}}</span>
-              </a-form-item>
+            <a-col :span="4" :offset="2">开盘价</a-col>
+            <a-col :span="6">
+              <span
+                :class="handleQuotePriceColor_out(parantSelectedRow.refgoodscode, 'opened')"
+              >{{ getQuoteValue_out(parantSelectedRow.refgoodscode, 'opened') }}</span>
             </a-col>
-            <a-col :span="24"
-                   v-if="!isFloat()">
-              <a-form-item label="价格类型">
-                <span class="white">固定价</span>
-              </a-form-item>
-            </a-col>
-            <a-col :span="24"
-                   v-if="isFloat()">
-              <a-form-item label="挂牌估算价">
-                <span class="white">{{getRatio()}}</span>
-              </a-form-item>
-            </a-col>
-            <a-col :span="24"
-                   v-if="isFloat()">
-              <a-form-item label="卖出价格"
-                           name="priceType">
-                <a-radio-group class="commonRadioGroup"
-                               v-model:value="formState.priceType">
-                  <a-radio :value="1">市价</a-radio>
-                  <a-radio :value="2">限价</a-radio>
-                </a-radio-group>
-              </a-form-item>
-            </a-col>
-            <a-col :span="24"
-                   v-if="isFloat() && isLimit()">
-              <a-form-item label="摘牌价格"
-                           name="price"
-                           class="inputIconBox">
-                <a-input-number class="commonInput"
-                                style="width: 260px"
-                                :min="0"
-                                v-model:value="formState.price" />
-                <MinusOutlined @click="decreasePrice" />
-                <PlusOutlined @click="increasePrice" />
-              </a-form-item>
-            </a-col>
-            <a-col :span="24">
-              <a-form-item label="挂牌数量">
-                <span class="white">{{selectedRow.orderqty}}</span>
-              </a-form-item>
-            </a-col>
-            <a-col :span="24"
-                   v-if="!useUserType()">
-              <a-form-item label="摘牌数量">
-                <span class="white">{{formState.num}}</span>
-              </a-form-item>
-            </a-col>
-            <a-col :span="24"
-                   v-if="useUserType()">
-              <a-form-item label="摘牌数量"
-                           name="num"
-                           class="inputIconBox">
-                <a-input-number class="commonInput"
-                                style="width: 260px"
-                                :min="0"
-                                :max="selectedRow.orderqty"
-                                v-model:value="formState.num" />
-                <MinusOutlined @click="decreaseNumber" />
-                <PlusOutlined @click="increaseNumber" />
-                <span class="input-enumdicname">{{selectedRow.enumdicname}}</span>
-              </a-form-item>
-            </a-col>
-            <a-col :span="24"
-                   v-if="useUserType()"
-                   class="mt-10">
-              <a-form-item>
-                <a-slider :min="0"
-                          v-model:value="formState.num"
-                          :max="selectedRow.orderqty"
-                          class="formSlider" />
-                <div class="unit">
-                  <span>0</span>
-                  <span>{{selectedRow.orderqty}}{{selectedRow.enumdicname}}</span>
-                </div>
-              </a-form-item>
-            </a-col>
-            <a-col :span="24"
-                   class="relative mt20"
-                   v-if="!isFloat()">
-              <a-form-item :label="'摘牌金额'">
-                <span class="white ml8">{{getMoney()}}</span>
-              </a-form-item>
-            </a-col>
-            <a-col :span="24"
-                   class="relative mt20"
-                   v-if="isFloat()">
-              <a-form-item :label="'估算金额'">
-                <span class="white ml8">{{getMoney()}}</span>
-              </a-form-item>
-            </a-col>
-            <a-col :span="24"
-                   v-if="getMargin()">
-              <a-form-item :label="'履约保证金'">
-                <span class="white ml8">{{getMargin()}}</span>
-              </a-form-item>
-            </a-col>
-            <a-col :span="24">
-              <a-form-item label="可用资金">
-                <span class="white ml8">{{canUseMoney()}}</span>
-              </a-form-item>
+          </a-row>
+          <a-row>
+            <a-col :span="4" :offset="2">最低价</a-col>
+            <a-col :span="6">
+              <span
+                :class="handleQuotePriceColor_out(parantSelectedRow.refgoodscode, 'lowest')"
+              >{{ getQuoteValue_out(parantSelectedRow.refgoodscode, 'lowest') }}</span>
             </a-col>
+            <a-col :span="4" :offset="2">昨结价</a-col>
+            <a-col :span="6">{{ getQuoteValue_out(parantSelectedRow.refgoodscode, 'presettle') }}</a-col>
           </a-row>
+          <div class="chart-content">
+            <Chart
+              :selectedRow="getQuoteDayInfoByCode(parantSelectedRow.refgoodscode)"
+              :showExchange="false"
+            />
+          </div>
+        </div>
+      </a-col>
+      <a-col :span="12">
+        <div class="post_buying">
+          <a-form class="inlineForm dialogForm" ref="formRef" :model="formState" :rules="rules">
+            <div class="formBar">
+              <a-row :gutter="24">
+                <a-col :span="24">
+                  <a-form-item label="交易账户" name="accountid">
+                    <a-select
+                      class="inlineFormSelect"
+                      style="width: 260px"
+                      v-model:value="formState.accountid"
+                      placeholder="请选择"
+                    >
+                      <a-select-option
+                        v-for="item in accountList"
+                        :value="item.accountid"
+                        :key="item.accountid"
+                      >{{ item.accountid }}</a-select-option>
+                    </a-select>
+                  </a-form-item>
+                </a-col>
+                <a-col :span="24">
+                  <a-form-item label="挂牌方">
+                    <span class="white">{{ selectedRow.username }}</span>
+                  </a-form-item>
+                </a-col>
+                <a-col :span="24" v-if="!isFloat()">
+                  <a-form-item label="价格类型">
+                    <span class="white">固定价</span>
+                  </a-form-item>
+                </a-col>
+                <a-col :span="24" v-if="isFloat()">
+                  <a-form-item label="挂牌估算价">
+                    <span class="white">{{ getRatio() }}</span>
+                  </a-form-item>
+                </a-col>
+                <a-col :span="24" v-if="isFloat()">
+                  <a-form-item label="卖出价格" name="priceType">
+                    <a-radio-group class="commonRadioGroup" v-model:value="formState.priceType">
+                      <a-radio :value="1">市价</a-radio>
+                      <a-radio :value="2">限价</a-radio>
+                    </a-radio-group>
+                  </a-form-item>
+                </a-col>
+                <a-col :span="24" v-if="isFloat() && isLimit()">
+                  <a-form-item label="摘牌价格" name="price" class="inputIconBox">
+                    <a-input-number
+                      class="commonInput"
+                      style="width: 260px"
+                      :min="0"
+                      v-model:value="formState.price"
+                    />
+                    <MinusOutlined @click="decreasePrice" />
+                    <PlusOutlined @click="increasePrice" />
+                  </a-form-item>
+                </a-col>
+                <a-col :span="24">
+                  <a-form-item label="挂牌数量">
+                    <span class="white">{{ selectedRow.orderqty }}</span>
+                  </a-form-item>
+                </a-col>
+                <a-col :span="24" v-if="!useUserType()">
+                  <a-form-item label="摘牌数量">
+                    <span class="white">{{ formState.num }}</span>
+                  </a-form-item>
+                </a-col>
+                <a-col :span="24" v-if="useUserType()">
+                  <a-form-item label="摘牌数量" name="num" class="inputIconBox">
+                    <a-input-number
+                      class="commonInput"
+                      style="width: 260px"
+                      :min="0"
+                      :max="selectedRow.orderqty"
+                      v-model:value="formState.num"
+                    />
+                    <MinusOutlined @click="decreaseNumber" />
+                    <PlusOutlined @click="increaseNumber" />
+                    <span class="input-enumdicname">{{ selectedRow.enumdicname }}</span>
+                  </a-form-item>
+                </a-col>
+                <a-col :span="24" v-if="useUserType()" class="mt-10">
+                  <a-form-item>
+                    <a-slider
+                      :min="0"
+                      v-model:value="formState.num"
+                      :max="selectedRow.orderqty"
+                      class="formSlider"
+                    />
+                    <div class="unit">
+                      <span>0</span>
+                      <span>{{ selectedRow.orderqty }}{{ selectedRow.enumdicname }}</span>
+                    </div>
+                  </a-form-item>
+                </a-col>
+                <a-col :span="24" class="relative mt20" v-if="!isFloat()">
+                  <a-form-item :label="'摘牌金额'">
+                    <span class="white ml8">{{ getMoney() }}</span>
+                  </a-form-item>
+                </a-col>
+                <a-col :span="24" class="relative mt20" v-if="isFloat()">
+                  <a-form-item :label="'估算金额'">
+                    <span class="white ml8">{{ getMoney() }}</span>
+                  </a-form-item>
+                </a-col>
+                <a-col :span="24" v-if="getMargin()">
+                  <a-form-item :label="'履约保证金'">
+                    <span class="white ml8">{{ getMargin() }}</span>
+                  </a-form-item>
+                </a-col>
+                <a-col :span="24">
+                  <a-form-item label="可用资金">
+                    <span class="white ml8">{{ canUseMoney() }}</span>
+                  </a-form-item>
+                </a-col>
+              </a-row>
+            </div>
+            <a-row :gutter="24">
+              <a-col :span="24" class="fixedBtns">
+                <a-form-item class="btnCenter">
+                  <a-button class="listedBtn" @click="submit">{{ !isBuy() ? '买入' : '卖出' }}</a-button>
+                  <a-button class="ml10 cancelBtn" @click="cancel">取消</a-button>
+                </a-form-item>
+              </a-col>
+            </a-row>
+          </a-form>
         </div>
-        <a-row :gutter="24">
-          <a-col :span="24"
-                 class="fixedBtns">
-            <a-form-item class="btnCenter">
-              <a-button class="listedBtn"
-                        @click="submit">{{!isBuy() ? '买入' : '卖出'}}</a-button>
-              <a-button class="ml10 cancelBtn"
-                        @click="cancel">取消</a-button>
-            </a-form-item>
-          </a-col>
-        </a-row>
-      </a-form>
-    </div>
+      </a-col>
+    </a-row>
   </Drawer>
 </template>
 
@@ -158,345 +199,437 @@ import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo
 import { useTaAccount } from '@/common/setup/account';
 import { validateAction } from '@/common/setup/form';
 import { _closeModal } from '@/common/setup/modal/modal';
-import { useTradeRule } from '@/common/setup/trade';
-import { getGoodsAgreeunitByGoodsId, getQuoteDayInfoByCodeFindPrice } from '@/services/bus/goods';
+import { getQuoteValue_out, handleQuotePriceColor_out, handleSubcriteOnDemandQuote, quoteAmplitude_out, quoteAmplituOfVibration, quoteChange_out } from '@/common/setup/table/tableQuote';
+import { useTodayMargin } from '@/hooks/margin';
+import { getSelectedAccountId } from '@/services/bus/account';
+import { getGoodsAgreeunitByGoodsId, getQuoteDayInfoByCode, getQuoteDayInfoByCodeFindPrice } from '@/services/bus/goods';
 import { geLoginID_number } from '@/services/bus/login';
 import { getMarketByTradeMode, getMarketIdsByTradeMode } from '@/services/bus/market';
 import { QueryQuoteGoodsListRsp, QueryTjmdTodayAccountMarginReq, QueryTjmdTradeOrderDetailRsp } from '@/services/go/Tjmd/interface';
 import { diaoQiOrder } from '@/services/socket/order';
 import { OrderReq } from '@/services/socket/order/interface';
+import Bus from '@/utils/eventBus/index';
 import { MinusOutlined, PlusOutlined } from '@ant-design/icons-vue';
 import Long from 'long';
 import moment from 'moment';
 import { v4 as uuidv4 } from 'uuid';
 import { defineComponent, PropType, ref } from 'vue';
+import { RefGoodsList } from '../../interface';
 import { useUserType } from '../setup';
 import { FormParam } from './interface';
-import { handleForm, useBlocksPrice, useBlocksNumber } from './setup';
-import { useTodayMargin } from '@/hooks/margin';
-import { getSelectedAccountId } from '@/services/bus/account';
-import Bus from '@/utils/eventBus/index';
-import { RefGoodsList } from '../../interface';
+import { handleForm, useBlocksNumber, useBlocksPrice } from './setup';
 
 export default defineComponent({
-    emits: ['cancel', 'update'],
-    name: ModalEnum.spot_trade_warehouse_post_buying,
-    components: { Des, Drawer, PlusOutlined, MinusOutlined },
-    props: {
-        selectedRow: {
-            type: Object as PropType<QueryTjmdTradeOrderDetailRsp>,
-            default: {},
-        },
-        parantSelectedRow: {
-            type: Object as PropType<RefGoodsList>,
-            default: {},
-        },
-        refGoods: {
-            type: Object as PropType<QueryQuoteGoodsListRsp[]>,
-            default: [],
-        },
-        buyOrSell: {
-            type: Number as PropType<BuyOrSell>,
-            defualt: BuyOrSell.buy,
-        },
+  emits: ['cancel', 'update'],
+  name: ModalEnum.spot_trade_warehouse_post_buying,
+  components: { Des, Drawer, PlusOutlined, MinusOutlined },
+  props: {
+    selectedRow: {
+      type: Object as PropType<QueryTjmdTradeOrderDetailRsp>,
+      default: {},
     },
-    setup(props, context) {
-        const marginParam: QueryTjmdTodayAccountMarginReq = {
-            accountid: getSelectedAccountId()!.toString(),
-            goodsid: props.selectedRow.goodsid,
-            marketids: getMarketIdsByTradeMode(TradeMode.DiaoQi),
-        };
-        // 获取保证金比例
-        const { getReckonMarginValueByTradeMode } = useTodayMargin(marginParam);
-        // 控制弹窗
-        const { visible, cancel } = _closeModal(context);
-        // 表单
-        const { rules, formState, formRef } = handleForm();
-        const loading = ref<boolean>(false);
-        // 资金账号
-        const { canUseMoney, accountList } = useTaAccount<FormParam>(formState);
+    parantSelectedRow: {
+      type: Object as PropType<RefGoodsList>,
+      default: {},
+    },
+    refGoods: {
+      type: Object as PropType<QueryQuoteGoodsListRsp[]>,
+      default: [],
+    },
+    buyOrSell: {
+      type: Number as PropType<BuyOrSell>,
+      defualt: BuyOrSell.buy,
+    },
+  },
+  setup(props, context) {
+    const marginParam: QueryTjmdTodayAccountMarginReq = {
+      accountid: getSelectedAccountId()!.toString(),
+      goodsid: props.selectedRow.goodsid,
+      marketids: getMarketIdsByTradeMode(TradeMode.DiaoQi),
+    };
+    // 获取保证金比例
+    const { getReckonMarginValueByTradeMode } = useTodayMargin(marginParam);
+    // 控制弹窗
+    const { visible, cancel } = _closeModal(context);
+    // 表单
+    const { rules, formState, formRef } = handleForm();
+    const loading = ref<boolean>(false);
+    // 资金账号
+    const { canUseMoney, accountList } = useTaAccount<FormParam>(formState);
 
-        const isBuy = () => props.buyOrSell === BuyOrSell.buy;
-        const isFloat = () => props.selectedRow.pricemode === 3;
-        // 投资者摘牌时可以选择数量,机构摘牌时不能改数量只能整单摘(全部挂牌数量
-        if (!useUserType() || !isFloat()) {
-            formState.num = props.selectedRow.orderqty;
+    const isBuy = () => props.buyOrSell === BuyOrSell.buy;
+    const isFloat = () => props.selectedRow.pricemode === 3;
+    // 投资者摘牌时可以选择数量,机构摘牌时不能改数量只能整单摘(全部挂牌数量
+    if (!useUserType() || !isFloat()) {
+      formState.num = props.selectedRow.orderqty;
+    }
+    // 是否是 限价
+    const isLimit = () => formState.priceType === 2;
+    const getPrice = () => (isFloat() && isLimit() ? formState.price : props.selectedRow.orderprice);
+    // 四舍五入
+    const fn = (value: number) => Math.round(value * 100) / 100;
+    // 金额
+    const getMoney = () => {
+      let result = 0;
+      const temp = getGoodsAgreeunitByGoodsId(props.selectedRow.goodsid);
+      const argeeunit = temp ? temp : 1;
+      let priceTemp: number = 0;
+      // 限价
+      if (isLimit()) {
+        priceTemp = formState.price;
+      } else {
+        // 市价
+        if (isFloat()) {
+          const price = getQuoteDayInfoByCodeFindPrice(props.parantSelectedRow.refgoodscode);
+          if (price && price !== '--') {
+            // 浮动价
+            priceTemp = +price + props.selectedRow.marketmaxsub;
+          }
+        } else {
+          priceTemp = props.selectedRow.orderprice;
         }
-        // 是否是 限价
-        const isLimit = () => formState.priceType === 2;
-        const getPrice = () => (isFloat() && isLimit() ? formState.price : props.selectedRow.orderprice);
+      }
+      if (formState.num) {
         // 四舍五入
-        const fn = (value: number) => Math.round(value * 100) / 100;
-        // 金额
-        const getMoney = () => {
-            let result = 0;
-            const temp = getGoodsAgreeunitByGoodsId(props.selectedRow.goodsid);
-            const argeeunit = temp ? temp : 1;
-            let priceTemp: number = 0;
-            // 限价
-            if (isLimit()) {
-                priceTemp = formState.price;
-            } else {
-                // 市价
-                if (isFloat()) {
-                    const price = getQuoteDayInfoByCodeFindPrice(props.parantSelectedRow.refgoodscode);
-                    if (price && price !== '--') {
-                        // 浮动价
-                        priceTemp = +price + props.selectedRow.marketmaxsub;
-                    }
-                } else {
-                    priceTemp = props.selectedRow.orderprice;
-                }
-            }
-            if (formState.num) {
-                // 四舍五入
-                result = fn(formState.num * argeeunit * +priceTemp);
-            }
-            return result ? result : '--';
-        };
-        // 估算价
-        const getRatio = () => {
-            let result = '--';
-            const price = getQuoteDayInfoByCodeFindPrice(props.parantSelectedRow.refgoodscode);
-            if (price && price !== '--') {
-                // 四舍五入
-                result = fn(+price + props.selectedRow.marketmaxsub).toString();
-            }
-            return result;
-        };
-        // 保证金
-        const getMargin = () => {
-            let result = '--';
-            const price = getMoney();
-            if (price !== '--') {
-                const marginvalue = getReckonMarginValueByTradeMode(TradeMode.DiaoQi);
-                if (formState.num && marginvalue) {
-                    // 四舍五入
-                    result = fn(+price + marginvalue * formState.num).toString();
-                }
-            }
-            return result;
-        };
-        // 估算价
-        // function getGuseetPrice() {
-        //     let result = '--';
-        //     const goodsPrice = getQuoteDayInfoByCodeFindPrice(props.selectedRow.refgoodscode);
-        //     console.log('goodsPrice', goodsPrice);
-        //     if (goodsPrice && goodsPrice !== '--') {
-        //         // 有实时行情价格
-        //         result = ((goodsPrice as number) + formState.PriceMove).toFixed(2);
-        //     }
-        //     return result;
-        // }
-        // const { getMaxNum, getMoney, getMargin, getPrice } = handleNumAndPrice(props.selectedRow);
-        function submit() {
-            validateAction<FormParam>(formRef, formState).then((res) => {
-                const param: OrderReq = {
-                    ClientSerialNo: uuidv4(), // 客户端流水号
-                    ClientOrderTime: moment(new Date()).format('YYYY-MM-DD HH:mm:ss'), // 客户端委托时间
-                    ClientType: 4, // 终端类型
-                    LoginID: geLoginID_number()!, // 登陆账号
-                    AccountID: res.accountid, // 交易账号
-                    GoodsID: props.selectedRow.goodsid, // 商品ID
-                    MarketID: getMarketByTradeMode(TradeMode.DiaoQi)?.marketid, // 市场ID
-                    ValidType: 1, // 校验类型 当日有效
-                    OperateType: 1, // 操作类型: 申请
-                    OrderSrc: 1, // 单据来源: 客户端下单
-                    RelatedID: Long.fromString(props.selectedRow.orderid), // 操作员账号ID
-                    OrderPrice: getPrice(), // 委托价格
-                    OperatorID: Number(geLoginID_number()),
-                    // MarketMaxSub: number // 市价允许最大偏差(做市)
-                    OrderQty: formState.num, // 委托数量
-                    BuyOrSell: isBuy() ? BuyOrSell.sell : BuyOrSell.buy, // 买卖方向  0 买 1 卖
-                    BuildType: 1, // 下单类型  1 建 2 平
-                    // CurtQuotePrice: 0, // 保留,计算冻结金额使用
-                    // SpPrice: 0 ,// 止盈价格
-                    // SlPrice: 0 , // 止损价格
-                    PriceMode: res.priceType, // 取价方式
-                    TimevalidType: 1, // 时间有效类型 单日有效
-                    TriggerType: 1, // 预埋单触发类型
-                    // TriggerPrice: number // 预埋单触发价格
-                    ListingSelectType: 2, // 挂牌点选类型 1:挂牌 2:摘牌 3:先摘后挂
-                    DelistingType: 2, // 摘牌类型 2:点选成交
-                    // RelatedID: number // 关联单号
-                    OptionType: 1, // 期权类型(1:认购(看涨)2:认沽(看跌))
-                    // Premium: number // 权利金
-                    // TriggerOperator: number // 触发条件(1:大于等于2:小于等于)
-                    // ServiceTime: string // 服务端时间
-                    // CouponTypeID: number // 优惠券类型ID(买方)
-                    // UsedQty: number // 使用数量
-                    // ValidTime: string // 指定有效日期
-                    // ReceiveInfoID: number // 收货地址ID
-                };
-                // if (isFloat()) {
-                //     // 浮动价
-                //     param.MarketMaxSub = res.PriceMove; // 基差
-                //     param.OrderPrice = +getQuoteDayInfoByCodeFindPrice(goodscode)!;
-                // }
-                requestResultLoadingAndInfo(diaoQiOrder, param, loading, ['摘牌求购成功', '摘牌求购失败:']).then(() => {
-                    cancel(true);
-                    Bus.$emit('spotTrade', true);
-                });
-            });
+        result = fn(formState.num * argeeunit * +priceTemp);
+      }
+      return result ? result : '--';
+    };
+    // 估算价
+    const getRatio = () => {
+      let result = '--';
+      const price = getQuoteDayInfoByCodeFindPrice(props.parantSelectedRow.refgoodscode);
+      if (price && price !== '--') {
+        // 四舍五入
+        result = fn(+price + props.selectedRow.marketmaxsub).toString();
+      }
+      return result;
+    };
+    // 保证金
+    const getMargin = () => {
+      let result = '--';
+      const price = getMoney();
+      if (price !== '--') {
+        const marginvalue = getReckonMarginValueByTradeMode(TradeMode.DiaoQi);
+        if (formState.num && marginvalue) {
+          // 四舍五入
+          result = fn(+price + marginvalue * formState.num).toString();
         }
-        return {
-            submit,
-            cancel,
-            visible,
-            accountList,
-            rules,
-            formState,
-            formRef,
-            isFloat,
-            getMoney,
-            getMargin,
-            canUseMoney,
-            isBuy,
-            useUserType,
-            isLimit,
-            ...useBlocksPrice(),
-            ...useBlocksNumber(),
-            getRatio,
+      }
+      return result;
+    };
+    // 估算价
+    // function getGuseetPrice() {
+    //     let result = '--';
+    //     const goodsPrice = getQuoteDayInfoByCodeFindPrice(props.selectedRow.refgoodscode);
+    //     console.log('goodsPrice', goodsPrice);
+    //     if (goodsPrice && goodsPrice !== '--') {
+    //         // 有实时行情价格
+    //         result = ((goodsPrice as number) + formState.PriceMove).toFixed(2);
+    //     }
+    //     return result;
+    // }
+    // const { getMaxNum, getMoney, getMargin, getPrice } = handleNumAndPrice(props.selectedRow);
+    function submit() {
+      validateAction<FormParam>(formRef, formState).then((res) => {
+        const param: OrderReq = {
+          ClientSerialNo: uuidv4(), // 客户端流水号
+          ClientOrderTime: moment(new Date()).format('YYYY-MM-DD HH:mm:ss'), // 客户端委托时间
+          ClientType: 4, // 终端类型
+          LoginID: geLoginID_number()!, // 登陆账号
+          AccountID: res.accountid, // 交易账号
+          GoodsID: props.selectedRow.goodsid, // 商品ID
+          MarketID: getMarketByTradeMode(TradeMode.DiaoQi)?.marketid, // 市场ID
+          ValidType: 1, // 校验类型 当日有效
+          OperateType: 1, // 操作类型: 申请
+          OrderSrc: 1, // 单据来源: 客户端下单
+          RelatedID: Long.fromString(props.selectedRow.orderid), // 操作员账号ID
+          OrderPrice: getPrice(), // 委托价格
+          OperatorID: Number(geLoginID_number()),
+          // MarketMaxSub: number // 市价允许最大偏差(做市)
+          OrderQty: formState.num, // 委托数量
+          BuyOrSell: isBuy() ? BuyOrSell.sell : BuyOrSell.buy, // 买卖方向  0 买 1 卖
+          BuildType: 1, // 下单类型  1 建 2 平
+          // CurtQuotePrice: 0, // 保留,计算冻结金额使用
+          // SpPrice: 0 ,// 止盈价格
+          // SlPrice: 0 , // 止损价格
+          PriceMode: res.priceType, // 取价方式
+          TimevalidType: 1, // 时间有效类型 单日有效
+          TriggerType: 1, // 预埋单触发类型
+          // TriggerPrice: number // 预埋单触发价格
+          ListingSelectType: 2, // 挂牌点选类型 1:挂牌 2:摘牌 3:先摘后挂
+          DelistingType: 2, // 摘牌类型 2:点选成交
+          // RelatedID: number // 关联单号
+          OptionType: 1, // 期权类型(1:认购(看涨)2:认沽(看跌))
+          // Premium: number // 权利金
+          // TriggerOperator: number // 触发条件(1:大于等于2:小于等于)
+          // ServiceTime: string // 服务端时间
+          // CouponTypeID: number // 优惠券类型ID(买方)
+          // UsedQty: number // 使用数量
+          // ValidTime: string // 指定有效日期
+          // ReceiveInfoID: number // 收货地址ID
         };
-    },
+        // if (isFloat()) {
+        //     // 浮动价
+        //     param.MarketMaxSub = res.PriceMove; // 基差
+        //     param.OrderPrice = +getQuoteDayInfoByCodeFindPrice(goodscode)!;
+        // }
+        requestResultLoadingAndInfo(diaoQiOrder, param, loading, ['摘牌求购成功', '摘牌求购失败:']).then(() => {
+          cancel(true);
+          Bus.$emit('spotTrade', true);
+        });
+      });
+    }
+    return {
+      submit,
+      cancel,
+      visible,
+      accountList,
+      rules,
+      formState,
+      formRef,
+      isFloat,
+      getMoney,
+      getMargin,
+      canUseMoney,
+      isBuy,
+      useUserType,
+      isLimit,
+      ...useBlocksPrice(),
+      ...useBlocksNumber(),
+      getRatio,
+      handleQuotePriceColor_out, handleSubcriteOnDemandQuote, quoteAmplitude_out, quoteAmplituOfVibration, quoteChange_out, getQuoteValue_out, getQuoteDayInfoByCode
+    };
+  },
 });
 </script>
 
 <style lang="less">
-.post_buying {
-    width: 100%;
-    height: 100%;
-    .flex;
-    flex-direction: column;
-    position: relative;
-    overflow: hidden;
-    .ant-form {
-        height: 100%;
+.post-buying-container {
+  top: 101px;
+  .ant-drawer-content-wrapper {
+    height: 605px;
+  }
+}
+.chart-content {
+  height: 400px;
+}
+.formBar {
+  height: 100%;
+  max-height: 100%;
+}
+.post_buying_chart {
+  [theme="light"] & {
+    --bgcolor: #fff;
+    --tab-border-color: #dae5ec;
+    --tab-checked-color: #0866b8;
+    --tab-checked-bgcolor: #d4e0ff;
+    --slider-border-color: #b2c4dd;
+    --slider-bgcolor: #edf2f7;
+    --slider-button-color: #b2c4dd;
+    --row-border-color: #dae5ec;
+    --row-title-color: #acb8c0;
+    --row-content-color: #3c454b;
+    --tik-title-bgcolor: #ecf2f5;
+    --tik-title-color: #7a8a94;
+  }
+  color: @m-grey67;
+
+  // background-color: var(--bgcolor, #0e0e0f);
+
+  // background: @m-blue37;
+  // color: @m-grey67;
+  .buying_chart {
+    display: flex;
+
+    // background-color: @m-blue36;
+    &__nav {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+
+      .content {
+        &:first-child:not(:last-child) {
+          margin-right: 16px;
+        }
+
+        &--left {
+          font-size: 16px;
+          color: var(--row-content-color, #acb8c0);
+          margin-right: 6px;
+        }
+
+        &--right {
+          font-size: 24px;
+          color: #fc9618;
+        }
+      }
     }
-    .condition {
-        width: 100%;
-        height: 48px;
-        margin: 0 16px;
-        padding: 10px 0;
-        border-bottom: 1px solid @m-black6;
-        .inlineflex;
-        .conditionBtn {
-            align-self: center;
-            align-items: center;
-            border: 0;
-            min-width: 80px;
-            height: 28px;
-            line-height: 28px;
-            background: @m-black7;
-            .rounded-corners(3px);
-            font-size: 14px;
-            color: @m-blue0;
-            &:hover {
-                background: @m-black7-hover;
-                color: @m-blue0-hover;
-            }
+  }
+  .chart-tips {
+    display: flex;
+    flex-direction: column;
+    width: 300px;
+    height: 100%;
+
+    &__last {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      padding: 16px 0;
+      .content {
+        &--left {
+          font-size: 24px;
+          margin-right: 16px;
         }
-        .conditionBtn + .conditionBtn {
-            margin-left: 10px;
+
+        &--right {
+          display: flex;
+          flex-direction: column;
+          align-items: flex-start;
         }
+      }
+    }
+  }
+}
+.post_buying {
+  width: 100%;
+  height: 100%;
+  .flex;
+  flex-direction: column;
+  position: relative;
+  overflow: hidden;
+  .ant-form {
+    height: 100%;
+  }
+  .condition {
+    width: 100%;
+    height: 48px;
+    margin: 0 16px;
+    padding: 10px 0;
+    border-bottom: 1px solid @m-black6;
+    .inlineflex;
+    .conditionBtn {
+      align-self: center;
+      align-items: center;
+      border: 0;
+      min-width: 80px;
+      height: 28px;
+      line-height: 28px;
+      background: @m-black7;
+      .rounded-corners(3px);
+      font-size: 14px;
+      color: @m-blue0;
+      &:hover {
+        background: @m-black7-hover;
+        color: @m-blue0-hover;
+      }
+    }
+    .conditionBtn + .conditionBtn {
+      margin-left: 10px;
     }
+  }
 }
 
 .unit {
-    margin-left: 70px;
-    width: 260px;
-    .flex;
-    justify-content: space-between;
-    font-size: 14px;
-    color: @m-grey41;
-    height: 14px;
-    line-height: 14px;
+  margin-left: 70px;
+  width: 260px;
+  .flex;
+  justify-content: space-between;
+  font-size: 14px;
+  color: @m-grey41;
+  height: 14px;
+  line-height: 14px;
 }
 .listedBtn {
-    width: 120px;
-    height: 30px;
-    line-height: 30px;
-    background: linear-gradient(0deg, @m-blue2 0%, @m-blue0 100%);
-    border-radius: 3px;
-    color: @m-white0;
-    font-size: 14px;
-    text-align: center;
-    border: 0;
-    &:hover {
-        background: linear-gradient(0deg, @m-blue0-hover 0%, @m-blue2-hover 100%);
-        color: @m-white0-hover;
-    }
+  width: 120px;
+  height: 30px;
+  line-height: 30px;
+  background: linear-gradient(0deg, @m-blue2 0%, @m-blue0 100%);
+  border-radius: 3px;
+  color: @m-white0;
+  font-size: 14px;
+  text-align: center;
+  border: 0;
+  &:hover {
+    background: linear-gradient(0deg, @m-blue0-hover 0%, @m-blue2-hover 100%);
+    color: @m-white0-hover;
+  }
 }
 .cancelBtn:extend(.listedBtn) {
-    background: linear-gradient(0deg, @m-grey12 0%, @m-grey13 100%) !important;
-    &:hover {
-        background: linear-gradient(0deg, @m-grey12-hover 0%, @m-grey13-hover 100%) !important;
-        color: @m-white0-hover;
-    }
+  background: linear-gradient(0deg, @m-grey12 0%, @m-grey13 100%) !important;
+  &:hover {
+    background: linear-gradient(
+      0deg,
+      @m-grey12-hover 0%,
+      @m-grey13-hover 100%
+    ) !important;
+    color: @m-white0-hover;
+  }
 }
 .ml10 {
-    margin-left: 10px;
+  margin-left: 10px;
 }
 .ant-form.dialogForm .ant-row.ant-form-item {
-    margin-bottom: 14px;
+  margin-bottom: 14px;
 }
 .mt20 {
-    margin-top: 20px;
+  margin-top: 20px;
 }
 .mt-10 {
-    margin-top: -10px;
+  margin-top: -10px;
 }
 .ant-input-suffix {
-    position: absolute;
-    right: -25px;
+  position: absolute;
+  right: -25px;
 }
 .minusBtn,
 .plusBtn {
-    width: 15px;
-    height: 32px;
-    line-height: 32px;
-    font-size: 15px;
-    color: @m-blue15;
-    cursor: pointer;
+  width: 15px;
+  height: 32px;
+  line-height: 32px;
+  font-size: 15px;
+  color: @m-blue15;
+  cursor: pointer;
 }
 .minusBtn {
-    position: absolute;
-    top: -6px;
-    left: 14px;
-    z-index: 1;
+  position: absolute;
+  top: -6px;
+  left: 14px;
+  z-index: 1;
 }
 .plusBtn {
-    position: absolute;
-    top: -6px;
-    right: 14px;
-    z-index: 1;
+  position: absolute;
+  top: -6px;
+  right: 14px;
+  z-index: 1;
 }
 .stepper {
-    padding-left: 30px;
-    padding-right: 30px;
-    text-align: center;
-    color: @m-yellow1;
-    font-size: 16px;
+  padding-left: 30px;
+  padding-right: 30px;
+  text-align: center;
+  color: @m-yellow1;
+  font-size: 16px;
 }
 .ant-slider.formSlider {
-    width: 260px !important;
-    margin-left: 70px;
-    .ant-slider-rail {
-        margin-right: 0;
-        padding-right: 0;
-        height: 3px !important;
-        border-radius: 2px !important;
-        background-color: @m-blue14;
-    }
-    .ant-slider-track {
-        height: 3px;
-        background-color: @m-blue0;
-    }
-    .ant-slider-step {
-        height: 3px;
-    }
-    .ant-progress-text {
-        display: none;
-    }
+  width: 260px !important;
+  margin-left: 70px;
+  .ant-slider-rail {
+    margin-right: 0;
+    padding-right: 0;
+    height: 3px !important;
+    border-radius: 2px !important;
+    background-color: @m-blue14;
+  }
+  .ant-slider-track {
+    height: 3px;
+    background-color: @m-blue0;
+  }
+  .ant-slider-step {
+    height: 3px;
+  }
+  .ant-progress-text {
+    display: none;
+  }
 }
 </style>