Forráskód Böngészése

Merge branch 'master' of http://47.101.159.18:3000/Muchinfo/MTP2.0_WEB

huangbin 4 éve
szülő
commit
8a7b1db735

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

@@ -22,12 +22,14 @@
               <a-form-item label="挂牌方式"
                            name="WRPriceType">
                 <a-select class="inlineFormSelect"
-                          default-value="1"
-                          v-model:value="formState.WRPriceType"
-                          style="width: 140px">
-                  <a-select-option :value="1">一口价</a-select-option>
+                          v-model:value="formState.marketid"
+                          @change="handleMarket"
+                          style="width: 140px"
+                          placeholder="请选择挂牌市场">
+                  <!-- <a-select-option :value="1">一口价</a-select-option>
                   <a-select-option :value="2">浮动价</a-select-option>
-                  <a-select-option :value="3">贸易圈</a-select-option>
+                  <a-select-option :value="3">贸易圈</a-select-option> -->
+                  <a-select-option v-for="item in spotMarkets" :key="item.marketid" :value="item.marketid">{{item.marketname}}</a-select-option>
                 </a-select>
               </a-form-item>
             </a-col>
@@ -158,7 +160,6 @@
               </a-form-item>
             </a-col>
           </a-row>
-          <template v-if="isBlocs()">
             <a-row :gutter="24">
               <a-col :span="12">
                 <a-form-item label="履约保证金"
@@ -187,32 +188,33 @@
                              class="inputIconBox">
                   <span :class="['clickBox', formState.permanceTempName ? 'white' : '']"
                         style="width: 140px"
-                        @click="openPermance">{{formState.permanceTempName ? formState.permanceTempName : '选择履约模板'}}</span>
+                        @click="handlePermance">{{formState.permanceTempName ? formState.permanceTempName : '选择履约模板'}}</span>
                   <svg class="icon svg-icon"
                        aria-hidden="true"
-                       @click="openPermance">
+                       @click="handlePermance">
                     <use xlink:href="#icon-moban" />
                   </svg>
                 </a-form-item>
               </a-col>
-              <a-col :span="12">
-                <a-form-item label="指定朋友"
-                             class="inputIconBox">
-                  <span :class="['clickBox', getFriendLength() ? 'white' : '']"
-                        style="width: 140px"
-                        @click="openFriend">{{getFriendLength() ? `已选${getFriendLength() }人` : '选择朋友'}}</span>
-                  <svg class="icon svg-icon"
-                       aria-hidden="true"
-                       @click="openFriend">
-                    <use xlink:href="#icon-pengyou1" />
-                  </svg>
-                  <a-checkbox class="commonCheckbox"
-                              v-model:checked="friendCheck"
-                              @change="limiteFriends">不限</a-checkbox>
-                </a-form-item>
-              </a-col>
+              <template v-if="isBlocs()">
+                <a-col :span="12">
+                  <a-form-item label="指定朋友"
+                              class="inputIconBox">
+                    <span :class="['clickBox', getFriendLength() ? 'white' : '']"
+                          style="width: 140px"
+                          @click="openFriend">{{getFriendLength() ? `已选${getFriendLength() }人` : '选择朋友'}}</span>
+                    <svg class="icon svg-icon"
+                        aria-hidden="true"
+                        @click="openFriend">
+                      <use xlink:href="#icon-pengyou1" />
+                    </svg>
+                    <a-checkbox class="commonCheckbox"
+                                v-model:checked="friendCheck"
+                                @change="limiteFriends">不限</a-checkbox>
+                  </a-form-item>
+                </a-col>
+              </template>
             </a-row>
-          </template>
           <a-row :gutter="24">
             <a-col :span="24"
                    v-if="isFloat()"
@@ -290,6 +292,7 @@
   <!-- 选择履约模板 -->
   <Permance v-if="showPermance"
             :position="'bottom'"
+            :marketid="formState.marketid"
             @cancel="choosePermance"
             @update="choosePermance" />
 </template>
@@ -317,7 +320,7 @@ import moment from 'moment';
 import { v4 as uuidv4, v4 } from 'uuid';
 import { defineComponent, onMounted, PropType, ref } from 'vue';
 import { ListingForm } from './interface';
-import { handleForm, handleGoods, handleNumAndPrice } from './setup';
+import { handleForm, handleGoods, handleNumAndPrice, queryMarketSection } from './setup';
 
 export default defineComponent({
     name: ModalEnum.spot_warrant_spot_details_listed,
@@ -344,6 +347,37 @@ export default defineComponent({
         const { numCheck, increaseNumber, decreaseNumber } = useBlocksNumber(formState);
 
         const { goodsGroup, goodsList, groupsChange, findGoodsCode } = handleGoods();
+
+        // 获取仓单贸易市场
+        const { spotMarkets } = queryMarketSection(false)
+
+        // 切换市场
+        function handleMarket(value: number) {
+          const market = spotMarkets.value.find(item => item.marketid === value)
+          if (!market) return
+
+          // 判断所选择市场挂牌方式 1:一口价 2:浮动价 3:贸易圈 4:协议指定
+          if (market.listingmode === 1) {
+            formState.WRPriceType = 1
+          } else if (market.listingmode === 2) {
+            formState.WRPriceType = 2
+          } else {
+            formState.WRPriceType = 3
+          }
+        }
+
+        // 点选履约模板
+        function handlePermance() {
+          // 必须先选择市场再选择对应的履约模板
+          if (!formState.marketid) {
+            message.info('请先选择市场')
+            return
+          }
+
+          openPermance()
+        }
+
+
         // 切换商品组
         function handleGoodsGroups(value: number) {
             formState.goodsid = undefined;
@@ -386,7 +420,26 @@ export default defineComponent({
             return item.taaccounttype === 2 ? item : list[0];
         }
         function submit() {
-            const marketInfo = getMarketRunByTradeMode(17);
+            // 市场信息
+            if (!formState.marketid) { 
+              message.info("请选择市场")
+              return
+            }
+
+            // const marketInfo = getMarketRunByTradeMode(17);
+            const market = spotMarkets.value.find(item => item.marketid === formState.marketid)
+            if (!market) {
+              message.info("市场信息异常,请稍后重试")
+              return
+            }
+
+            // 履约模板
+            if (!formState.permanceTempName) {
+              message.info('请选择履约模板')
+              return
+            }
+
+            const marketInfo = getMarketRunByTradeMode(market!.trademode)
             if (marketInfo) {
                 // 无仓单挂牌
                 validateAction<ListingForm>(formRef, formState).then((res) => {
@@ -442,10 +495,10 @@ export default defineComponent({
                     };
                     if (isBlocs()) {
                         // 贸易圈 是后加的, 处理贸易圈
-                        if (!formState.permanceTempName) {
-                            message.error('请选择履约模板');
-                            return;
-                        }
+                        // if (!formState.permanceTempName) {
+                        //     message.error('请选择履约模板');
+                        //     return;
+                        // }
                         if (!friendCheck.value) {
                             if (formState.friends.length === 0) {
                                 message.error('请选择朋友');
@@ -509,6 +562,9 @@ export default defineComponent({
             getFriendLength,
             limiteFriends,
             getPrice,
+            spotMarkets,
+            handleMarket,
+            handlePermance,
         };
     },
 });

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

@@ -7,4 +7,5 @@ export interface ListingForm extends BlocsListingForm {
     PriceMove: number,// 升贴水(浮动价时填写)
     goodsgroupid: number | undefined,
     goodsid: number | undefined,
+    marketid: number | undefined,   // 当前选择挂牌市场ID
 }

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

@@ -3,13 +3,16 @@ import { validateCommon } from '@/common/setup/validate';
 import { handleForm as useForm } from '@/common/setup/warehouse_receipt_trade/listing';
 import { useVerifyBeginDelistingNum, useVerifyListingBasis, useVerifyListingNum } from '@/hooks/form/verify';
 import { getGoodsGroupsByTradeMode, getIPOGoodsList, getQuoteDayInfoByCodeFindPrice } from '@/services/bus/goods';
+import { getAllMarkets } from '@/services/bus/market';
 import { getRules } from '@/services/bus/rules';
 import { Goods } from "@/services/go/ermcp/goodsInfo/interface";
+import { TjmdMarketSection, TjmdMarketSectionConfig } from '@/services/go/Tjmd/interface';
 import { WrPosition } from "@/services/go/wrtrade/interface";
 import { RuleObject } from 'ant-design-vue/lib/form/interface';
 import moment from 'moment';
 import { onBeforeUnmount, reactive, ref, UnwrapRef } from "vue";
 import { ListingForm } from "./interface";
+import { queryTjmdMarketSection } from "@/services/go/Tjmd"
 
 
 function initFormData(): ListingForm {
@@ -29,6 +32,7 @@ function initFormData(): ListingForm {
         friends: [],
         permanceTempName: '',
         permaceTempId: 0,
+        marketid: undefined,
     }
 }
 
@@ -57,7 +61,7 @@ export function handleForm(data: WrPosition) {
         DelistMinQty: v_beginDelistingRules,
         DeliveryMonth: [{ required: true, message: '请选择交收月', }],
         goodsid: [{ required: true, validator: v_group }],
-
+        marketid: [{ required: true, message: '请选择挂牌市场', }],
     }
     Object.assign(rules, rule)
     onBeforeUnmount(() => {
@@ -125,3 +129,25 @@ export function handleNumAndPrice() {
     }
     return { getWrMoney, getWrMargin, isFloat, isFixed, isBlocs }
 }
+
+/**
+ * 查询市场板块,用于挂牌时挂牌方式选择,替代之前的“一口价、浮动价和贸易圈”
+ */
+ export function queryMarketSection(isPre: boolean) {
+    const spotMarkets = ref<TjmdMarketSectionConfig[]>([]); 
+    queryTjmdMarketSection().then(res => {
+        let resMarkets: TjmdMarketSectionConfig[] = []
+        res.forEach(item => { resMarkets.push(...item.mlist) })
+        // 根据有无仓单过滤出仓单市场
+        // 过滤掉没有权限的市场
+        const markets = getAllMarkets()
+        resMarkets = resMarkets.filter(item => 
+            item.auctionwrtype === (isPre ? 1 : 2) && (item.trademode === TradeMode.WarehouseReceiptTrade)
+        ).filter(item => 
+            markets.findIndex(m => m.marketid === item.marketid) !== -1
+        )
+        spotMarkets.value = resMarkets
+    })
+
+    return { spotMarkets };
+}

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

@@ -415,7 +415,7 @@ export default defineComponent({
 
       // 履约模板
       if (!formState.permanceTempName) {
-        message.error('请选择履约模板')
+        message.info('请选择履约模板')
         return
       }
 
@@ -431,83 +431,82 @@ export default defineComponent({
           };
 
           // 仓单贸易挂牌  (仓单贸易 = HasWr = 1)
-
-          const param = {
-            AccountID: getInTaAccount(), // 默认内部资金账号第一个
-            ClientSerialNo: v4(), // 客户端流水号
-            // OperateSrc: 2,
-            ClientType: 4,
-            // MarketID: marketInfo.marketid,
-            LadingBillId: props.selectedRow.ladingbillid.toString(), // 提单id(wrholdlb的LadingBillId字段),卖的时候填写 uint64
-            // LadingBillId: 'uint642081626946446000001', // 提单id(wrholdlb的LadingBillId字段),卖的时候填写 uint64
-            TradeDate: moment(marketInfo.tradedate).format('YYYYMMDD'), // 交易日 string
-            // SubNum: '0', // 提单子单号
-            SubNum: props.selectedRow.subnum,
-            // WRFactorTypeId: '2121626946446000001', // 仓单要素ID(wrholdlb的WRFactorTypeId字段),卖的时候填写 uint64
-            WRFactorTypeId: props.selectedRow.wrfactortypeid, // 仓单要素ID(wrholdlb的WRFactorTypeId字段),卖的时候填写 uint64
-            IsSpecified: 0, // 是否指定对手 0:不指定 1:指定 uint32
-            MatchAccIDs: [], // 仓单贸易对手资金账号ID集合(指定对手时填写) uint32
-            OrderQty: res.OrderQty, // 委托数量(可挂部分数据量) ======
-            DeliveryGoodsID: props.selectedRow.deliverygoodsid, // 交割商品商品ID
-            WRPriceType: res.WRPriceType, // 价格方式 1:固定价 2:浮动价
-            FixedPrice: res.FixedPrice, // 固定价格
-            PriceFactor: 1, // 价格系数(浮动价时填写)
-            PriceMove: res.PriceMove, // 升贴水(浮动价时填写)
-            TimevalidType: 4, // 时间有效类型 1:当日有效 2:本周有效 3:指定时间有效 4:一直有效
-            // ValidTime: isBlocs() ? moment(res.vidaliteTime).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: BuyOrSell.sell, // 买卖方向 0买1卖
-            PriceDisplayMode: 1, // 浮动价显示方式 1:合并显示 2:分开显示
-            CanBargain: priceCheck.value ? 1 : 0, // 挂牌是否可议价0:不可1:可-摘牌是否议价
-            Attachment1: '', // 附件1
-            Attachment2: '', // 附件2
-            Remark: '', // 备注
-            ApplyID: 0, // 申请ID
-            CanPart: numCheck.value ? 0 : 1, // 是否允许部份摘牌0:不允许;1:允许
-            WRTradeGoods: [wrGoodsInfo],
-            wrstandardid: props.selectedRow.wrstandardid,
-            HasWr: 1,
-            DeliveryMonth: '',
-            MarginFlag: 0,
-            DelistMinQty: res.DelistMinQty, // 起摘数量
-          };
-          if (isBlocs()) {
-            // 贸易圈 是后加的, 处理贸易圈
-            if (!formState.permanceTempName) {
-              message.error('请选择履约模板');
-              return;
-            }
-            if (!friendCheck.value) {
-              if (formState.friends.length === 0) {
-                message.error('请选择朋友');
-                return;
-              }
+                    const param = {
+                        AccountID: getInTaAccount(), // 默认内部资金账号第一个
+                        ClientSerialNo: v4(), // 客户端流水号
+                        // OperateSrc: 2,
+                        ClientType: 4,
+                        // MarketID: marketInfo.marketid,
+                        LadingBillId: props.selectedRow.ladingbillid.toString(), // 提单id(wrholdlb的LadingBillId字段),卖的时候填写 uint64
+                        // LadingBillId: 'uint642081626946446000001', // 提单id(wrholdlb的LadingBillId字段),卖的时候填写 uint64
+                        TradeDate: moment(marketInfo.tradedate).format('YYYYMMDD'), // 交易日 string
+                        // SubNum: '0', // 提单子单号
+                        SubNum: props.selectedRow.subnum,
+                        // WRFactorTypeId: '2121626946446000001', // 仓单要素ID(wrholdlb的WRFactorTypeId字段),卖的时候填写 uint64
+                        WRFactorTypeId: props.selectedRow.wrfactortypeid, // 仓单要素ID(wrholdlb的WRFactorTypeId字段),卖的时候填写 uint64
+                        IsSpecified: 0, // 是否指定对手 0:不指定 1:指定 uint32
+                        MatchAccIDs: [], // 仓单贸易对手资金账号ID集合(指定对手时填写) uint32
+                        OrderQty: res.OrderQty, // 委托数量(可挂部分数据量) ======
+                        DeliveryGoodsID: props.selectedRow.deliverygoodsid, // 交割商品商品ID
+                        WRPriceType: res.WRPriceType, // 价格方式 1:固定价 2:浮动价
+                        FixedPrice: res.FixedPrice, // 固定价格
+                        PriceFactor: 1, // 价格系数(浮动价时填写)
+                        PriceMove: res.PriceMove, // 升贴水(浮动价时填写)
+                        TimevalidType: 4, // 时间有效类型 1:当日有效 2:本周有效 3:指定时间有效 4:一直有效
+                        // ValidTime: isBlocs() ? moment(res.vidaliteTime).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: BuyOrSell.sell, // 买卖方向 0买1卖
+                        PriceDisplayMode: 1, // 浮动价显示方式 1:合并显示 2:分开显示
+                        CanBargain: priceCheck.value ? 1 : 0, // 挂牌是否可议价0:不可1:可-摘牌是否议价
+                        Attachment1: '', // 附件1
+                        Attachment2: '', // 附件2
+                        Remark: '', // 备注
+                        ApplyID: 0, // 申请ID
+                        CanPart: numCheck.value ? 0 : 1, // 是否允许部份摘牌0:不允许;1:允许
+                        WRTradeGoods: [wrGoodsInfo],
+                        wrstandardid: props.selectedRow.wrstandardid,
+                        HasWr: 1,
+                        DeliveryMonth: '',
+                        MarginFlag: 0,
+                        DelistMinQty: res.DelistMinQty, // 起摘数量
+                    };
+                    if (isBlocs()) {
+                        // 贸易圈 是后加的, 处理贸易圈
+                        // if (!formState.permanceTempName) {
+                        //     message.error('请选择履约模板');
+                        //     return;
+                        // }
+                        if (!friendCheck.value) {
+                            if (formState.friends.length === 0) {
+                                message.error('请选择朋友');
+                                return;
+                            }
+                        }
+                        const obj = {
+                            IsSpecified: 1,
+                            MatchAccIDs: res.friends,
+                            WRPriceType: 1,
+                            TimevalidType: 3, // 时间有效类型 1:当日有效 2:本周有效 3:指定时间有效 4:一直有效
+                            MarginFlag: 1, // 挂牌是否指定保证金 0:否 1:是
+                            MarginAlgorithm: 1, // 指定保证金方式 1:比率 2:固定
+                            ValidTime: moment(res.vidaliteTime).format('YYYY-MM-DD HH:mm:ss'), // 有效期限
+                            MarginValue: +(formState.margin / 100).toFixed(2), // 指定保证金设置值
+                            AllFriendsFlag: friendCheck.value ? 1 : 0, //是否全好友可见 0:否 1:是
+                        };
+                        Object.assign(param, obj);
+                    }
+                    requestResultLoadingAndInfo(hdWROrder, param, loading, ['挂牌成功', '挂牌失败:']).then(() => {
+                        Bus.$emit('spotTrade', true);
+                        cancel(true);
+                    });
+                });
+            } else {
+                message.error('市场信息未获取到,请联系管理员!');
             }
-            const obj = {
-              IsSpecified: 1,
-              MatchAccIDs: res.friends,
-              WRPriceType: 1,
-              TimevalidType: 3, // 时间有效类型 1:当日有效 2:本周有效 3:指定时间有效 4:一直有效
-              MarginFlag: 1, // 挂牌是否指定保证金 0:否 1:是
-              MarginAlgorithm: 1, // 指定保证金方式 1:比率 2:固定
-              ValidTime: moment(res.vidaliteTime).format('YYYY-MM-DD HH:mm:ss'), // 有效期限
-              MarginValue: +(formState.margin / 100).toFixed(2), // 指定保证金设置值
-              AllFriendsFlag: friendCheck.value ? 1 : 0, //是否全好友可见 0:否 1:是
-            };
-            Object.assign(param, obj);
-          }
-          requestResultLoadingAndInfo(hdWROrder, param, loading, ['挂牌成功', '挂牌失败:']).then(() => {
-            Bus.$emit('spotTrade', true);
-            cancel(true);
-          });
-        });
-      } else {
-        message.error('市场信息未获取到,请联系管理员!');
-      }
     }
 
     return {