li.shaoyi před 3 roky
rodič
revize
9846bb5bea

+ 29 - 27
src/hooks/form/verify.ts

@@ -40,41 +40,43 @@ export const useVerifyListingNum = <T extends object, k extends keyof T>(formSta
 
 /**
  * 验证 挂牌基差
- * @param formState 表单状态
- * @param key 商品ID对应的key
- * @returns
  */
-export const useVerifyListingBasis = <T, k extends keyof T>(formState: T, key: k) => {
+export const useVerifyListingBasis = (getFormState: () => { goodsid?: number, marketid?: number }) => {
     const v_basis = async (rule: RuleObject, value: number) => {
-        if (formState[key]) {
-            if (typeof value === 'number') {
-                const goodsCode = getGoodsById(formState[key] as unknown as number)?.goodscode as string;
-                const quote = getQuoteDayInfoByCode(goodsCode);
-                if (quote) {
-                    const { basisdownratio, basisupratio } = getRules()[0];
-                    // 最小值 = 基差下限百分比 * 昨日收盘价 * -1
-                    const minValue = (basisdownratio * quote.presettle * -1).toFixed(2);
-                    // 最大值 = 基差上限百分比 * 昨日收盘价
-                    const maxValue = (basisupratio * quote.presettle).toFixed(2);
+        const { goodsid, marketid } = getFormState();
+        if (marketid) {
+            const config = getRules().find((e) => e.marketid === marketid);
+            if (config) {
+                if (goodsid) {
+                    const goodsCode = getGoodsById(goodsid)?.goodscode as string;
+                    const quote = getQuoteDayInfoByCode(goodsCode);
+                    if (quote) {
+                        if (typeof value === 'number') {
+                            // 最小值 = 基差下限百分比 * 昨日收盘价 * -1
+                            const minValue = (config.basisdownratio * quote.presettle * -1).toFixed(2);
+                            // 最大值 = 基差上限百分比 * 昨日收盘价
+                            const maxValue = (config.basisupratio * quote.presettle).toFixed(2);
 
-                    if (value >= Number(minValue) && value <= Number(maxValue)) {
-                        return Promise.resolve();
-                    } else {
-                        if (value < Number(minValue)) {
-                            return Promise.reject(`基差不能小于${minValue}`);
-                        }
-                        if (value > Number(maxValue)) {
-                            return Promise.reject(`基差不能大于${maxValue}`);
+                            if (value >= Number(minValue) && value <= Number(maxValue)) {
+                                return Promise.resolve();
+                            } else {
+                                if (value < Number(minValue)) {
+                                    return Promise.reject(`基差不能小于${minValue}`);
+                                }
+                                if (value > Number(maxValue)) {
+                                    return Promise.reject(`基差不能大于${maxValue}`);
+                                }
+                            }
                         }
+                        return Promise.reject('请输入基差');
                     }
+                    return Promise.reject('商品盘面不存在');
                 }
-                return Promise.reject('合约不存在');
-            } else {
-                return Promise.reject('请输入基差');
+                return Promise.reject('请选择合约');
             }
-        } else {
-            return Promise.reject('请选择合约');
+            return Promise.reject('市场参数未配置');
         }
+        return Promise.reject('请选择交易市场');
     };
     return { v_basis }
 }

+ 2 - 0
src/services/go/wrtrade/interface.ts

@@ -77,6 +77,8 @@ export interface WrOrderQuoteDetail {
     delistminqty: string; // 起摘数量
     //+Unix秒时间戳(1number;
     //位)+xxxxxx)
+    marketid: number; // 市场ID
+    ordertime: string; // 委托时间
 }
 
 /**

+ 7 - 0
src/services/proto/warehousetrade/index.ts

@@ -33,6 +33,13 @@ export const hdWROrder = (param: HdWROrderReq): Promise<any> => {
  * @constructor
  */
 export const HdWRDealOrder = (param: HdWRDealOrderReq): Promise<any> => {
+    if (param.MarketID) {
+        const header: IMessageHead = {
+            MarketID: param.MarketID,
+            AccountID: getInTaAccount(),
+        }
+        return protoMiddleware<HdWRDealOrderReq>(param, 'HdWRDealOrderReq', 'HdWRDealOrderRsp', header)
+    }
     return protoMiddleware<HdWRDealOrderReq>(param, 'HdWRDealOrderReq', 'HdWRDealOrderRsp', HeadEnum.tradeMode17)
 }
 /**

+ 1 - 1
src/services/proto/warehousetrade/interface.ts

@@ -78,7 +78,7 @@ export interface HdWRDealOrderReq {
     HasWr: number; // uint32 是否有仓单-0:没有仓单 1:有仓单
     IsFinancing: number; // uint32 是否融资购买(买摘牌时有效)-0:否 1:是
     ProductDetailID: number; // uint64 金融机构产品组合ID(融资购买时有效)
-
+    MarketID?: number; // 市场ID
 }
 
 export interface WrBargainApplyReq {

+ 3 - 2
src/views/market/market-spot/components/buy-sell-market/components/delisting/index.vue

@@ -36,9 +36,9 @@
               </a-form-item>
             </a-col>
           </a-row>
-          <a-row :gutter="24" v-if="isBuy() && getAuctionwrType(AuctionwrType.hasWr)">
+          <a-row :gutter="24" v-if="isBuy()">
             <a-col :span="24">
-              <a-form-item label="现货仓单" name="LadingBillId">
+              <a-form-item :label="getAuctionwrType(AuctionwrType.hasWr) ? '现货仓单' : '预售仓单'" name="LadingBillId">
                 <a-select class="inlineFormSelect" style="width: 260px" v-model:value="formState.LadingBillId" placeholder="请选择">
                   <a-select-option v-for="item in wrHoldList" :value="item.id" :key="item.id">{{ item.name }}</a-select-option>
                 </a-select>
@@ -214,6 +214,7 @@ export default defineComponent({
           HasWr: getAuctionwrType(AuctionwrType.noWr) ? 0 : 1, // uint32 是否有仓单-0:没有仓单 1:有仓单
           IsFinancing: 0, // uint32 是否融资购买(买摘牌时有效)-0:否 1:是
           ProductDetailID: 0, // uint64 金融机构产品组合ID(融资购买时有效)
+          MarketID: props.selectedRow.marketid, // 市场ID
         };
         // 摘买方向
         if (isBuy()) {

+ 1 - 1
src/views/market/market-spot/components/buy-sell-market/components/delisting/interface.ts

@@ -3,7 +3,7 @@ import { WrOrderQuoteDetail } from "@/services/go/wrtrade/interface";
 export interface ListingForm {
     accountid: undefined | number,
     num: number,
-    LadingBillId: string | number,
+    LadingBillId: undefined | string | number,
 }
 
 export interface Wrhold {

+ 11 - 13
src/views/market/market-spot/components/buy-sell-market/components/delisting/setup.ts

@@ -18,7 +18,7 @@ export function handleForm(data: WrOrderQuoteDetail) {
     const formState: UnwrapRef<ListingForm> = reactive({
         accountid: undefined,
         num: 0,
-        LadingBillId: '',
+        LadingBillId: undefined,
     })
     const rules = {
         accountid: [{ required: true, message: '请选择交易账户' }],
@@ -48,19 +48,17 @@ const allWR = ref<WrHoldLB[]>([])
 export function handleSpotWarrant(enumName: EnumRouterName, buyOrSell: BuyOrSell, selectedRow: WrOrderQuote, loading: Ref<boolean>) {
     const wrHoldList = ref<Wrhold[]>([])
     if (isBuy(buyOrSell)) {
-        if (getAuctionwrType(AuctionwrType.hasWr)) {
-            queryResultLoadingAndInfo(queryHoldLB, loading).then(res => {
-                allWR.value = res;
-                wrHoldList.value.length = 0
-                res.forEach(e => {
-                    if (e.wrfactortypeid === String(selectedRow.wrfactortypeid)) {
-                        const { wrholdeno, enableqty, ladingbillid, enumdicname, subnum } = e
-                        const result = { id: ladingbillid, name: `${wrholdeno}(${enableqty}${enumdicname})`, subnum }
-                        wrHoldList.value.push(result)
-                    }
-                })
+        queryResultLoadingAndInfo(queryHoldLB, loading).then(res => {
+            allWR.value = res;
+            wrHoldList.value.length = 0
+            res.forEach(e => {
+                if (e.wrfactortypeid === String(selectedRow.wrfactortypeid)) {
+                    const { wrholdeno, enableqty, ladingbillid, enumdicname, subnum } = e
+                    const result = { id: ladingbillid, name: `${wrholdeno}(${enableqty}${enumdicname})`, subnum }
+                    wrHoldList.value.push(result)
+                }
             })
-        }
+        })
     }
     return { wrHoldList }
 }

+ 265 - 321
src/views/market/market-spot/components/post_buying/index.vue

@@ -1,130 +1,78 @@
 <template>
-    <!-- 挂牌求购 -->
-    <Drawer :title="'挂牌求购'" :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>
-                        </a-col>
-                        <a-col :span="24" v-if="getListingMode(ListingMode.fix)">
-                            <a-form-item label="挂牌价格" name="FixedPrice">
-                                <a-input-number
-                                    class="commonInput"
-                                    style="width: 260px"
-                                    :min="0"
-                                    v-model:value="formState.FixedPrice"
-                                />
-                            </a-form-item>
-                        </a-col>
-                        <a-col :span="24" v-else>
-                            <a-form-item label="基差" name="PriceMove">
-                                <a-input-number
-                                    class="commonInput"
-                                    style="width: 260px"
-                                    v-model:value="formState.PriceMove"
-                                />
-                            </a-form-item>
-                        </a-col>
-                        <a-col :span="24" v-if="getListingMode(ListingMode.float)">
-                            <a-form-item label="估算价">
-                                <span class="white">{{ getPrice() }}</span>
-                            </a-form-item>
-                        </a-col>
+  <!-- 挂牌求购 -->
+  <Drawer :title="'挂牌求购'" :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>
+            </a-col>
+            <a-col :span="24" v-if="getListingMode(ListingMode.fix)">
+              <a-form-item label="挂牌价格" name="FixedPrice">
+                <a-input-number class="commonInput" style="width: 260px" :min="0" v-model:value="formState.FixedPrice" />
+              </a-form-item>
+            </a-col>
+            <a-col :span="24" v-else>
+              <a-form-item label="基差" name="PriceMove">
+                <a-input-number class="commonInput" style="width: 260px" v-model:value="formState.PriceMove" />
+              </a-form-item>
+            </a-col>
+            <a-col :span="24" v-if="getListingMode(ListingMode.float)">
+              <a-form-item label="估算价">
+                <span class="white">{{ getPrice() }}</span>
+              </a-form-item>
+            </a-col>
 
-                        <a-col :span="24">
-                            <a-form-item label="挂牌数量" name="OrderQty">
-                                <a-input-number
-                                    class="commonInput"
-                                    style="width: 260px"
-                                    :min="0"
-                                    :max="getMaxNum()"
-                                    v-model:value="formState.OrderQty"
-                                />
-                                <span class="input-enumdicname">{{ selectedRow.enumdicname }}</span>
-                            </a-form-item>
-                        </a-col>
-                        <a-col :span="24" v-if="getAuctionwrType(AuctionwrType.noWr)">
-                            <a-form-item label="交收月" name="DeliveryMonth">
-                                <a-month-picker
-                                    style="width: 260px"
-                                    v-model:value="formState.DeliveryMonth"
-                                    :allowClear="false"
-                                    class="commonDatePicker dialogDatePicker"
-                                />
-                            </a-form-item>
-                        </a-col>
-                        <a-col :span="24" class="mt-10">
-                            <a-form-item>
-                                <a-slider
-                                    :min="0"
-                                    v-model:value="formState.OrderQty"
-                                    :max="getMaxNum()"
-                                    class="formSlider"
-                                />
-                                <div class="unit">
-                                    <span>{{ getMaxNum() ? selectedRow.minivalue : 0 }}</span>
-                                    <span>{{ getMaxNum() }}{{ selectedRow.enumdicname }}</span>
-                                </div>
-                            </a-form-item>
-                        </a-col>
-                        <a-col :span="24">
-                            <a-form-item label="起摘数量" name="DelistMinQty" class="relative">
-                                <a-input-number
-                                    class="commonInput"
-                                    :suffix="selectedRow.enumdicname"
-                                    v-model:value="formState.DelistMinQty"
-                                    :min="0"
-                                    style="width: 260px !important"
-                                />
-                                <div
-                                    class="tip-listing"
-                                >最小单位:{{ selectedRow.minivalue }}{{ selectedRow.enumdicname }}</div>
-                            </a-form-item>
-                        </a-col>
-                        <a-col :span="24">
-                            <a-form-item label="履约方式" class="inputIconBox">
-                                <span
-                                    :class="['clickBox', formState.permanceTempName ? 'white' : '']"
-                                    style="width: 260px"
-                                    @click="handlePermance"
-                                >{{ formState.permanceTempName ? formState.permanceTempName : '选择履约模板' }}</span>
-                                <svg
-                                    class="icon svg-icon"
-                                    aria-hidden="true"
-                                    @click="handlePermance"
-                                >
-                                    <use xlink:href="#icon-moban" />
-                                </svg>
-                            </a-form-item>
-                        </a-col>
-                        <a-col :span="24" class="relative mt20">
-                            <a-form-item
-                                :label="getListingMode(ListingMode.float) ? '估算金额' : '挂牌金额'"
-                            >
-                                <span class="white ml8">{{ getMoney() }}</span>
-                            </a-form-item>
-                        </a-col>
-                        <a-col :span="24" v-if="getMargin()">
-                            <a-form-item :label="getMargin() ? '履约保证金' : ''">
-                                <!-- <a-row>
+            <a-col :span="24">
+              <a-form-item label="挂牌数量" name="OrderQty">
+                <a-input-number class="commonInput" style="width: 260px" :min="0" :max="getMaxNum()" v-model:value="formState.OrderQty" />
+                <span class="input-enumdicname">{{ selectedRow.enumdicname }}</span>
+              </a-form-item>
+            </a-col>
+            <a-col :span="24" v-if="getAuctionwrType(AuctionwrType.noWr)">
+              <a-form-item label="交收月" name="DeliveryMonth">
+                <a-month-picker style="width: 260px" v-model:value="formState.DeliveryMonth" :allowClear="false" class="commonDatePicker dialogDatePicker" />
+              </a-form-item>
+            </a-col>
+            <a-col :span="24" class="mt-10">
+              <a-form-item>
+                <a-slider :min="0" v-model:value="formState.OrderQty" :max="getMaxNum()" class="formSlider" />
+                <div class="unit">
+                  <span>{{ getMaxNum() ? selectedRow.minivalue : 0 }}</span>
+                  <span>{{ getMaxNum() }}{{ selectedRow.enumdicname }}</span>
+                </div>
+              </a-form-item>
+            </a-col>
+            <a-col :span="24">
+              <a-form-item label="起摘数量" name="DelistMinQty" class="relative">
+                <a-input-number class="commonInput" :suffix="selectedRow.enumdicname" v-model:value="formState.DelistMinQty" :min="0" style="width: 260px !important" />
+                <div class="tip-listing">最小单位:{{ selectedRow.minivalue }}{{ selectedRow.enumdicname }}</div>
+              </a-form-item>
+            </a-col>
+            <a-col :span="24">
+              <a-form-item label="履约方式" class="inputIconBox">
+                <span :class="['clickBox', formState.permanceTempName ? 'white' : '']" style="width: 260px" @click="handlePermance">{{ formState.permanceTempName ? formState.permanceTempName : '选择履约模板' }}</span>
+                <svg class="icon svg-icon" aria-hidden="true" @click="handlePermance">
+                  <use xlink:href="#icon-moban" />
+                </svg>
+              </a-form-item>
+            </a-col>
+            <a-col :span="24" class="relative mt20">
+              <a-form-item :label="getListingMode(ListingMode.float) ? '估算金额' : '挂牌金额'">
+                <span class="white ml8">{{ getMoney() }}</span>
+              </a-form-item>
+            </a-col>
+            <a-col :span="24" v-if="getMargin()">
+              <a-form-item :label="getMargin() ? '履约保证金' : ''">
+                <!-- <a-row>
                                 <a-col :span="8">-->
-                                <span class="white ml8">{{ getMargin() }}</span>
-                                <!-- </a-col>
+                <span class="white ml8">{{ getMargin() }}</span>
+                <!-- </a-col>
                                     <a-col :span="4" class="tr">
                                         <span class="grey1">可用资金</span>
                                     </a-col>
@@ -134,33 +82,28 @@
                                         >{{getCanUseMoney(getSelectedAccount())}}</span>
                                     </a-col>
                                 </a-row>-->
-                            </a-form-item>
-                        </a-col>
-                        <a-col :span="24">
-                            <a-form-item label="可用资金">
-                                <span class="white ml8">{{ getCanUseMoney(getSelectedAccount()) }}</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" :loading="loading">买入</a-button>
-                            <a-button class="ml10 cancelBtn" @click="cancel" :disabled="loading">取消</a-button>
-                        </a-form-item>
-                    </a-col>
-                </a-row>
-            </a-form>
+              </a-form-item>
+            </a-col>
+            <a-col :span="24">
+              <a-form-item label="可用资金">
+                <span class="white ml8">{{ getCanUseMoney(getSelectedAccount()) }}</span>
+              </a-form-item>
+            </a-col>
+          </a-row>
         </div>
-    </Drawer>
-    <!-- 选择履约模板 -->
-    <Permance
-        v-if="showPermance"
-        :marketid="formState.marketid"
-        @cancel="choosePermance"
-        @update="choosePermance"
-    />
+        <a-row :gutter="24">
+          <a-col :span="24" class="fixedBtns">
+            <a-form-item class="btnCenter">
+              <a-button class="listedBtn" @click="submit" :loading="loading">买入</a-button>
+              <a-button class="ml10 cancelBtn" @click="cancel(false)" :disabled="loading">取消</a-button>
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+  </Drawer>
+  <!-- 选择履约模板 -->
+  <Permance v-if="showPermance" :marketid="formState.marketid" @cancel="choosePermance" @update="choosePermance" />
 </template>
 
 <script lang="ts">
@@ -172,191 +115,200 @@ import Drawer from '@/common/components/drawer/index.vue';
 import { PlusOutlined, MinusOutlined } from '@ant-design/icons-vue';
 import { hdWROrder } from '@/services/proto/warehousetrade';
 import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
-import { DGFactoryItems, WRGoodsInfo } from '@/services/proto/warehousetrade/interface';
+import { WRGoodsInfo } from '@/services/proto/warehousetrade/interface';
 import { getAccountTypeList, getUserId } from '@/services/bus/account';
 import { v4 as uuidv4 } from 'uuid';
 import moment, { Moment } from 'moment';
-import { getMarketRunByTradeMode } from '@/services/bus/market';
-import { WrOrderQuote } from '@/services/go/wrtrade/interface';
 import { handleForm, handleNumAndPrice } from './setup';
 import { validateAction } from '@/common/setup/form';
 import { FormParam, TempWrOrderQuoteDetail } from './interface';
 import { EnumRouterName } from '@/common/constants/enumRouterName';
 import { getAuctionwrType, getListingMode } from '@/views/market/market-spot/setup'
-import { BuyOrSell, ListingMode, AuctionwrType } from '@/common/constants/enumCommon';
+import { ListingMode, AuctionwrType } from '@/common/constants/enumCommon';
 import { getCanUseMoney } from '@/services/bus/account';
 import { message } from 'ant-design-vue';
 import Permance from '@/common/components/permanceTemp/choosePermancePlanTmp.vue';
 import { QueryPermancePlanTmpRsp } from '@/services/go/wrtrade/interface';
 import { getMarketByTradeMode } from '@/services/bus/market';
+import APP from '@/services';
 
 export default defineComponent({
-    emits: ['cancel', 'update'],
-    name: ModalEnum.spot_trade_warehouse_post_buying,
-    components: {
-        Des,
-        Drawer,
-        Permance,
-        PlusOutlined,
-        MinusOutlined,
+  emits: ['cancel', 'update'],
+  name: ModalEnum.spot_trade_warehouse_post_buying,
+  components: {
+    Des,
+    Drawer,
+    Permance,
+    PlusOutlined,
+    MinusOutlined,
+  },
+  props: {
+    selectedRow: {
+      type: Object as PropType<TempWrOrderQuoteDetail>,
+      default: {},
     },
-    props: {
-        selectedRow: {
-            type: Object as PropType<TempWrOrderQuoteDetail>,
-            default: {},
-        },
-        enumName: {
-            default: '',
-            type: String as PropType<EnumRouterName>,
-        },
-        time: {
-            type: Object as PropType<Moment>,
-            default: moment(),
-        },
+    enumName: {
+      default: '',
+      type: String as PropType<EnumRouterName>,
     },
-    setup(props, context) {
-        const { visible, cancel } = _closeModal(context);
-        const { rules, formState, formRef } = handleForm(props.selectedRow);
-        const loading = ref<boolean>(false);
-        const accountList = getAccountTypeList([2]);
-        if (accountList.length) {
-            formState.accountid = accountList[0].accountid;
-        }
-        function getSelectedAccount() {
-            return accountList.find((e) => e.accountid === formState.accountid);
-        }
-        formState.DeliveryMonth = props.selectedRow.deliverymonth ? moment(props.selectedRow.deliverymonth) : props.time;
+    time: {
+      type: Object as PropType<Moment>,
+      default: moment(),
+    },
+  },
+  setup(props, context) {
+    const { visible, cancel } = _closeModal(context);
+    const { rules, formState, formRef } = handleForm(props.selectedRow);
+    const loading = ref<boolean>(false);
+    const accountList = getAccountTypeList([2]);
+    if (accountList.length) {
+      formState.accountid = accountList[0].accountid;
+    }
+    function getSelectedAccount() {
+      return accountList.find((e) => e.accountid === formState.accountid);
+    }
+    formState.DeliveryMonth = props.selectedRow.deliverymonth ? moment(props.selectedRow.deliverymonth) : props.time;
 
-        // 17=仓单贸易市场
-        const market = getMarketByTradeMode(17);
-        if (market) {
-            formState.marketid = market.marketid;
-        } else {
-            message.error('市场信息异常,请稍后重试');
-        }
+    // 拿 props.enumName 来判断有问题待处理
+    switch (props.enumName) {
+      // 仓单贸易
+      case 'warehouse_receipt_trade_price': {
+        formState.marketid = 17201;
+        break;
+      }
+      // 仓单预售
+      case 'warehouse_pre_sale_price': {
+        formState.marketid = 17202;
+        break;
+      }
+      default: {
+        message.error('市场信息异常,请稍后重试');
+      }
+    }
+    debugger
 
-        const { getMaxNum, getMoney, getMargin, getPrice } = handleNumAndPrice(props.enumName, props.selectedRow);
-        if (getMaxNum()) {
-            formState.OrderQty = props.selectedRow.minivalue;
-        }
+    const { getMaxNum, getMoney, getMargin, getPrice } = handleNumAndPrice(props.enumName, props.selectedRow);
+    if (getMaxNum()) {
+      formState.OrderQty = props.selectedRow.minivalue;
+    }
 
-        const showPermance = ref<boolean>(false);
-        function choosePermance(value: QueryPermancePlanTmpRsp | false) {
-            if (value) {
-                formState.permanceTempName = value.templatename;
-                formState.permaceTempId = value.autoid;
-            }
-            showPermance.value = false;
-        }
-        function openPermance() {
-            showPermance.value = true;
-        }
+    const showPermance = ref<boolean>(false);
+    function choosePermance(value: QueryPermancePlanTmpRsp | false) {
+      if (value) {
+        formState.permanceTempName = value.templatename;
+        formState.permaceTempId = value.autoid;
+      }
+      showPermance.value = false;
+    }
+    function openPermance() {
+      showPermance.value = true;
+    }
 
-        // 点选履约模板
-        function handlePermance() {
-            // 必须先选择市场再选择对应的履约模板
-            if (!formState.marketid) {
-                message.info('请先选择市场');
-                return;
-            }
+    // 点选履约模板
+    function handlePermance() {
+      // 必须先选择市场再选择对应的履约模板
+      if (!formState.marketid) {
+        message.info('请先选择市场');
+        return;
+      }
 
-            openPermance();
-        }
+      openPermance();
+    }
 
-        function submit() {
-            const marketInfo = getMarketRunByTradeMode(17);
-            if (marketInfo) {
-                validateAction<FormParam>(formRef, formState).then((res) => {
-                    // 现在增加一种挂牌求购的情况
-                    // 这种求购模式会生成一种仓单贸易商品
+    function submit() {
+      const marketInfo = APP.get('marketRun').find(({ marketid }: { marketid: number }) => marketid === formState.marketid)
+      if (marketInfo) {
+        validateAction<FormParam>(formRef, formState).then((res) => {
+          // 现在增加一种挂牌求购的情况
+          // 这种求购模式会生成一种仓单贸易商品
 
-                    const wrGoodsInfo: WRGoodsInfo = {
-                        GoodsID: props.selectedRow.goodsid, // uint32 配置商品ID
-                        GoodsCode: props.selectedRow.goodscode, // string 配置商品代码
-                        PriceFactor: 1, // double 商品价格系数
-                        PriceMove: 0, // double 商品升贴水值
-                        WeightRatio: 1, // double 商品重量系数
-                    };
-                    const param = {
-                        AccountID: res.accountid, // 默认内部资金账号第一个
-                        ClientSerialNo: uuidv4(), // 客户端流水号
-                        // OperateSrc: 2,
-                        ClientType: 4,
-                        MarketID: res.marketid,
-                        // MarketID: marketInfo.marketid,
-                        LadingBillId: 0, // 提单id(wrholdlb的LadingBillId字段),卖的时候填写 uint64
-                        // LadingBillId: 'uint642081626946446000001', // 提单id(wrholdlb的LadingBillId字段),卖的时候填写 uint64
-                        TradeDate: moment(marketInfo.tradedate).format('YYYYMMDD'), // 交易日 string
-                        // SubNum: '0', // 提单子单号
-                        SubNum: 0,
-                        // WRFactorTypeId: '2121626946446000001', // 仓单要素ID(wrholdlb的WRFactorTypeId字段),卖的时候填写 uint64
-                        WRFactorTypeId: props.selectedRow.wrfactortypeid ? props.selectedRow.wrfactortypeid : 0, // 仓单要素ID(wrholdlb的WRFactorTypeId字段),卖的时候填写 uint64
-                        IsSpecified: 0, // 是否指定对手 0:不指定 1:指定 uint32
-                        // MatchUserIDs: 0, // 仓单贸易对手资金账号ID集合(指定对手时填写) uint32
-                        OrderQty: res.OrderQty, // 委托数量(可挂部分数据量) ======
-                        DeliveryGoodsID: props.selectedRow.deliverygoodsid, // 交割商品商品ID  // 有仓单求购
-                        WRPriceType: getListingMode(ListingMode.float) ? 2 : 1, // 价格方式 1:固定价 2:浮动价
-                        FixedPrice: res.FixedPrice, // 固定价格
-                        PriceFactor: 1, // 价格系数(浮动价时填写)
-                        PriceMove: res.PriceMove ? res.PriceMove : 0, // 升贴水(浮动价时填写)
-                        TimevalidType: 4, // 时间有效类型 1:当日有效 2:本周有效 3:指定时间有效 4:一直有效
-                        // ValidTime: moment('2021-08-25 00:00:00').format('YYYY-MM-DD HH:mm:ss'), // 有效期限
-                        ClientOrderTime: moment().format('YYYY-MM-DD HH:mm:ss'),
-                        FirstRatio: 0, // 首付比例
-                        PerformanceTemplateID: res.permaceTempId, // 履约计划模板ID
-                        UserID: getUserId(),
-                        OperatorID: getUserId(), // 操作员账号ID
-                        BuyOrSell: 0, // 买卖方向 0买1卖
-                        PriceDisplayMode: 1, // 浮动价显示方式 1:合并显示 2:分开显示
-                        CanBargain: 0, // 挂牌是否可议价0:不可1:可-摘牌是否议价
-                        Attachment1: '', // 附件1
-                        Attachment2: '', // 附件2
-                        Remark: '', // 备注
-                        ApplyID: 0, // 申请ID
-                        WRTradeGoods: getListingMode(ListingMode.float) ? [wrGoodsInfo] : [],
-                        CanPart: 1, // 是否允许部份摘牌0:不允许;1:允许
-                        WRStandardID: props.selectedRow.wrstandardid,
-                        HasWr: getAuctionwrType(AuctionwrType.hasWr) ? 1 : 0, // 无仓单挂牌  是否有无仓单
-                        DelistMinQty: res.DelistMinQty, // 起摘数量
-                        DeliveryMonth: getAuctionwrType(AuctionwrType.hasWr) ? '' : moment(res.DeliveryMonth).format('YYYY-MM'),
-                        FactoryItems:
-                            props.selectedRow.wrResult != undefined
-                                ? props.selectedRow.wrResult.flatMap((it) => {
-                                    return {
-                                        DGFactoryItemTypeID: it.dgfactoryitemtypeid, // uint64 要素项类型ID
-                                        DGFactoryItemID: it.dgfactoryitemid, // uint64 预约要素项类型值
-                                        ItemTypeMode: 1, // uint32 要素项类型模式
-                                    };
-                                })
-                                : [], // DGFactoryItems 要素类型明细集合(没有仓单要素ID填写)
-                    };
-                    requestResultLoadingAndInfo(hdWROrder, param, loading, ['求购成功', '求购失败:']).then(() => {
-                        cancel(true);
-                    });
-                });
-            }
-        }
-        return {
-            submit,
-            cancel,
-            loading,
-            visible,
-            accountList,
-            rules,
-            formState,
-            formRef,
-            getMaxNum,
-            getMoney,
-            getMargin,
-            getSelectedAccount,
-            getCanUseMoney,
-            getPrice,
-            showPermance,
-            handlePermance,
-            choosePermance,
-            getAuctionwrType, getListingMode, ListingMode, AuctionwrType,
-        };
-    },
+          const wrGoodsInfo: WRGoodsInfo = {
+            GoodsID: props.selectedRow.goodsid, // uint32 配置商品ID
+            GoodsCode: props.selectedRow.goodscode, // string 配置商品代码
+            PriceFactor: 1, // double 商品价格系数
+            PriceMove: 0, // double 商品升贴水值
+            WeightRatio: 1, // double 商品重量系数
+          };
+          const param = {
+            AccountID: res.accountid, // 默认内部资金账号第一个
+            ClientSerialNo: uuidv4(), // 客户端流水号
+            // OperateSrc: 2,
+            ClientType: 4,
+            MarketID: res.marketid,
+            // MarketID: marketInfo.marketid,
+            LadingBillId: 0, // 提单id(wrholdlb的LadingBillId字段),卖的时候填写 uint64
+            // LadingBillId: 'uint642081626946446000001', // 提单id(wrholdlb的LadingBillId字段),卖的时候填写 uint64
+            TradeDate: moment(marketInfo.tradedate).format('YYYYMMDD'), // 交易日 string
+            // SubNum: '0', // 提单子单号
+            SubNum: 0,
+            // WRFactorTypeId: '2121626946446000001', // 仓单要素ID(wrholdlb的WRFactorTypeId字段),卖的时候填写 uint64
+            WRFactorTypeId: props.selectedRow.wrfactortypeid ? props.selectedRow.wrfactortypeid : 0, // 仓单要素ID(wrholdlb的WRFactorTypeId字段),卖的时候填写 uint64
+            IsSpecified: 0, // 是否指定对手 0:不指定 1:指定 uint32
+            // MatchUserIDs: 0, // 仓单贸易对手资金账号ID集合(指定对手时填写) uint32
+            OrderQty: res.OrderQty, // 委托数量(可挂部分数据量) ======
+            DeliveryGoodsID: props.selectedRow.deliverygoodsid, // 交割商品商品ID  // 有仓单求购
+            WRPriceType: getListingMode(ListingMode.float) ? 2 : 1, // 价格方式 1:固定价 2:浮动价
+            FixedPrice: res.FixedPrice, // 固定价格
+            PriceFactor: 1, // 价格系数(浮动价时填写)
+            PriceMove: res.PriceMove ? res.PriceMove : 0, // 升贴水(浮动价时填写)
+            TimevalidType: 4, // 时间有效类型 1:当日有效 2:本周有效 3:指定时间有效 4:一直有效
+            // ValidTime: moment('2021-08-25 00:00:00').format('YYYY-MM-DD HH:mm:ss'), // 有效期限
+            ClientOrderTime: moment().format('YYYY-MM-DD HH:mm:ss'),
+            FirstRatio: 0, // 首付比例
+            PerformanceTemplateID: res.permaceTempId, // 履约计划模板ID
+            UserID: getUserId(),
+            OperatorID: getUserId(), // 操作员账号ID
+            BuyOrSell: 0, // 买卖方向 0买1卖
+            PriceDisplayMode: 1, // 浮动价显示方式 1:合并显示 2:分开显示
+            CanBargain: 0, // 挂牌是否可议价0:不可1:可-摘牌是否议价
+            Attachment1: '', // 附件1
+            Attachment2: '', // 附件2
+            Remark: '', // 备注
+            ApplyID: 0, // 申请ID
+            WRTradeGoods: getListingMode(ListingMode.float) ? [wrGoodsInfo] : [],
+            CanPart: 1, // 是否允许部份摘牌0:不允许;1:允许
+            WRStandardID: props.selectedRow.wrstandardid,
+            HasWr: getAuctionwrType(AuctionwrType.hasWr) ? 1 : 0, // 无仓单挂牌  是否有无仓单
+            DelistMinQty: res.DelistMinQty, // 起摘数量
+            DeliveryMonth: getAuctionwrType(AuctionwrType.hasWr) ? '' : moment(res.DeliveryMonth).format('YYYY-MM'),
+            FactoryItems:
+              props.selectedRow.wrResult != undefined
+                ? props.selectedRow.wrResult.flatMap((it) => {
+                  return {
+                    DGFactoryItemTypeID: it.dgfactoryitemtypeid, // uint64 要素项类型ID
+                    DGFactoryItemID: it.dgfactoryitemid, // uint64 预约要素项类型值
+                    ItemTypeMode: 1, // uint32 要素项类型模式
+                  };
+                })
+                : [], // DGFactoryItems 要素类型明细集合(没有仓单要素ID填写)
+          };
+          requestResultLoadingAndInfo(hdWROrder, param, loading, ['求购成功', '求购失败:']).then(() => {
+            cancel(true);
+          });
+        });
+      }
+    }
+    return {
+      submit,
+      cancel,
+      loading,
+      visible,
+      accountList,
+      rules,
+      formState,
+      formRef,
+      getMaxNum,
+      getMoney,
+      getMargin,
+      getSelectedAccount,
+      getCanUseMoney,
+      getPrice,
+      showPermance,
+      handlePermance,
+      choosePermance,
+      getAuctionwrType, getListingMode, ListingMode, AuctionwrType,
+    };
+  },
 });
 </script>
 
@@ -421,22 +373,14 @@ export default defineComponent({
     text-align: center;
     border: 0;
     &:hover {
-        background: linear-gradient(
-            0deg,
-            @m-blue0-hover 0%,
-            @m-blue2-hover 100%
-        );
+        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;
+        background: linear-gradient(0deg, @m-grey12-hover 0%, @m-grey13-hover 100%) !important;
         color: @m-white0-hover;
     }
 }

+ 1 - 1
src/views/market/market-spot/components/post_buying/setup.ts

@@ -31,7 +31,7 @@ export function handleForm(selectedRow: TempWrOrderQuoteDetail) {
     const formRef = ref();
     //
     const { v_num } = useVerifyListingNum<FormParam, 'DelistMinQty'>(formState, 'DelistMinQty', selectedRow.minivalue);
-    const { v_basis } = useVerifyListingBasis(selectedRow, 'goodsid');
+    const { v_basis } = useVerifyListingBasis(() => ({ goodsid: selectedRow.goodsid, marketid: formState.marketid }));
     const { v_beginDelistingRules, v_beginDelistingNum } = useVerifyBeginDelistingNum(selectedRow.minivalue)
     const v_price = async (rule: RuleObject, value: number) => {
         return validateCommon(value, '请输入挂牌价格');

+ 1 - 1
src/views/order/pre_sale_warehouse_receipt/components/pre_sale_warehouse_receipt_order_summary/components/listed/index.vue

@@ -146,7 +146,7 @@
       </div>
       <div class="mtp-modal__footer">
         <a-button :loading="loading" :disabled="loading" @click="submit">卖出</a-button>
-        <a-button :loading="loading" :disabled="loading" @click="cancel">取消</a-button>
+        <a-button :loading="loading" :disabled="loading" @click="cancel(false)">取消</a-button>
       </div>
     </div>
   </Drawer>

+ 1 - 1
src/views/order/pre_sale_warehouse_receipt/components/pre_sale_warehouse_receipt_order_summary/components/listed/setup.ts

@@ -52,7 +52,7 @@ export function handleForm(data: WrPosition) {
     };
 
     const { v_num } = useVerifyListingNum(formState, 'OrderQty', minivalue, creditenableqty);
-    const { v_basis } = useVerifyListingBasis(formState, 'goodsid');
+    const { v_basis } = useVerifyListingBasis(() => ({ goodsid: formState.goodsid, marketid: formState.marketid }));
 
     // 验证 起摘数量
     const { v_beginDelistingNum } = useVerifyBeginDelistingNum(data.minivalue);

+ 1 - 1
src/views/order/spot_warran/components/spot_warrant_spot_details/components/listing/index.vue

@@ -143,7 +143,7 @@
       </div>
       <div class="mtp-modal__footer">
         <a-button :loading="loading" :disabled="loading" @click="submit">卖出</a-button>
-        <a-button :loading="loading" :disabled="loading" @click="cancel">取消</a-button>
+        <a-button :loading="loading" :disabled="loading" @click="cancel(false)">取消</a-button>
       </div>
     </div>
   </Drawer>

+ 1 - 1
src/views/order/spot_warran/components/spot_warrant_spot_details/components/listing/setup.ts

@@ -53,7 +53,7 @@ export function handleForm(data: WrHoldLB) {
     };
 
     const { v_num } = useVerifyListingNum(formState, 'OrderQty', minivalue, enableqty);
-    const { v_basis } = useVerifyListingBasis(formState, 'goodsid');
+    const { v_basis } = useVerifyListingBasis(() => ({ goodsid: formState.goodsid, marketid: formState.marketid }));
 
     // 验证 起摘数量
     const { v_beginDelistingNum } = useVerifyBeginDelistingNum(data.minivalue);

+ 1 - 1
src/views/order/spot_warran/components/spot_warrant_spot_details/index.vue

@@ -36,7 +36,7 @@ export default defineComponent({
     MtpTableScroll,
     BtnList,
     listed: defineAsyncComponent(() => import('./components/listing/index.vue')), // 挂牌
-    pickup: defineAsyncComponent(() => import('./components/pick_up/index.vue')), // 摘牌
+    pickup: defineAsyncComponent(() => import('./components/pick_up/index.vue')), // 提货
   },
   setup(props) {
     const { buttons } = props.parentComponent;