Bläddra i källkod

心跳回复 => 发送回复

li.shaoyi 3 år sedan
förälder
incheckning
13394b99cf

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

@@ -1,3 +1,3 @@
 {
-    "apiUrl": "http://192.168.31.204:8080/cfg?key=test_204"
+    "apiUrl": "http://192.168.31.203:8080/cfg?key=test_203"
 }

+ 0 - 8
src/common/components/drawer/index.vue

@@ -153,10 +153,6 @@ export default defineComponent({
     }
 }
 .delistingBottom {
-    .position(fixed, auto, 0, -2px, auto);
-    width: 100%;
-    height: 100%;
-    z-index: 10;
     .ant-drawer-mask {
         height: 100%;
         background: @m-black46 !important;
@@ -185,10 +181,6 @@ export default defineComponent({
     }
 }
 .bottomListed.delistingBottom {
-    .position(fixed, auto, 0, -2px, auto);
-    width: 100%;
-    height: 100%;
-    z-index: 10;
     .ant-drawer-mask {
         height: 100%;
         background: @m-black46 !important;

+ 112 - 111
src/common/components/friends/index.vue

@@ -1,51 +1,36 @@
 <template>
-    <!--选择朋友-->
-    <Drawer
-        :title="'选择朋友'"
-        :placement="'right'"
-        :visible="visible"
-        @cancel="cancel"
-        :class="[position === 'top' ? 'top486' : 'delistingBottom']"
-    >
-        <a-spin :spinning="loading">
-            <div class="listed">
-                <a-form class="inlineForm dialogForm">
-                    <a-input-search
-                        placeholder="搜索朋友编码或名称"
-                        class="searchFriendInput noSuffixInput"
-                        enter-button
-                        v-model:value="searchValue"
-                    >
-                        <template #prefix>
-                            <SearchOutlined />
-                        </template>
-                    </a-input-search>
-                    <div class="formBar ant-checkbox-group commonCheckboxGroup whitebgCheckbox">
-                        <!-- <a-checkbox-group class="commonCheckboxGroup"> -->
-                        <div class="ant-checkbox-wrapper" style="width: 100%">
-                            <div
-                                class="item"
-                                v-for="(item, index) in getViewFriends()"
-                                :key="index + '11'"
-                            >
-                                <a-checkbox v-model:checked="item.checked">
-                                    <span class="txt">{{ item.frienduserid }} {{ item.friendname }}</span>
-                                </a-checkbox>
-                            </div>
-                        </div>
-                        <!-- </a-checkbox-group> -->
-                    </div>
-                    <a-row :gutter="24">
-                        <a-col :span="24" class="fixedBtns">
-                            <a-form-item class="btnCenter">
-                                <a-button class="listedBtn" @click="submit">确定</a-button>
-                            </a-form-item>
-                        </a-col>
-                    </a-row>
-                </a-form>
+  <!--选择朋友-->
+  <Drawer title="选择朋友" placement="right" :visible="visible" @cancel="cancel" :class="[position === 'top' ? 'top486' : 'delistingBottom']">
+    <a-spin :spinning="loading">
+      <div class="listed">
+        <a-form class="inlineForm dialogForm">
+          <a-input-search placeholder="搜索朋友编码或名称" class="searchFriendInput noSuffixInput" enter-button v-model:value="searchValue">
+            <template #prefix>
+              <SearchOutlined />
+            </template>
+          </a-input-search>
+          <div class="formBar ant-checkbox-group commonCheckboxGroup whitebgCheckbox">
+            <!-- <a-checkbox-group class="commonCheckboxGroup"> -->
+            <div class="ant-checkbox-wrapper" style="width: 100%">
+              <div class="item" v-for="(item, index) in getViewFriends()" :key="index + '11'">
+                <a-checkbox v-model:checked="item.checked">
+                  <span class="txt">{{ item.frienduserid }} {{ item.friendname }}</span>
+                </a-checkbox>
+              </div>
             </div>
-        </a-spin>
-    </Drawer>
+            <!-- </a-checkbox-group> -->
+          </div>
+          <a-row :gutter="24">
+            <a-col :span="24" class="fixedBtns">
+              <a-form-item class="btnCenter">
+                <a-button class="listedBtn" @click="submit">确定</a-button>
+              </a-form-item>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+    </a-spin>
+  </Drawer>
 </template>
 
 <script lang="ts">
@@ -60,83 +45,84 @@ import { queryQueryWrFriend } from '@/services/go/wrtrade';
 import { message } from 'ant-design-vue';
 
 interface FriendList extends QueryWrFriendApplyRsp {
-    checked: boolean;
+  checked: boolean;
 }
 
 export default defineComponent({
-    emits: ['cancel', 'update'],
-    name: 'warehouse_receipt_trade_blocs_delisting',
-    components: { Des, Drawer, PlusOutlined, MinusOutlined, SearchOutlined },
-    props: {
-        position: {
-            type: String,
-            default: 'top',
-        },
-        friends: {
-            type: Array as PropType<number[]>,
-            default: [],
-        },
+  emits: ['cancel', 'update'],
+  name: 'warehouse_receipt_trade_blocs_delisting',
+  components: { Des, Drawer, PlusOutlined, MinusOutlined, SearchOutlined },
+  props: {
+    position: {
+      type: String,
+      default: 'top',
     },
-    setup(props, context) {
-        const { visible, cancel } = _closeModal(context);
-        const loading = ref<boolean>(false);
-        const searchValue = ref<string>('');
-        const myFriends = ref<FriendList[]>([]);
-        // 查询好友列表
-        function queryMyFriend(value?: string) {
-            loading.value = true;
-            queryQueryWrFriend(value)
-                .then((res) => {
-                    if (res) {
-                        myFriends.value = [];
-                        res.forEach((el) => {
-                            const checked = props.friends.includes(el.frienduserid) ? true : false;
-                            myFriends.value.push({ ...el, checked });
-                        });
-                    }
-                })
-                .catch((err: string) => message.error(err))
-                .finally(() => {
-                    loading.value = false;
-                });
-        }
-        queryMyFriend();
-        function getViewFriends() {
-            if (searchValue.value) {
-                return myFriends.value.filter((el) => String(el.frienduserid).includes(searchValue.value));
-            } else {
-                return myFriends.value;
-            }
-        }
-        function submit() {
-            const result: number[] = [];
-            myFriends.value.forEach((el) => {
-                if (el.checked) {
-                    result.push(el.frienduserid);
-                }
+    friends: {
+      type: Array as PropType<number[]>,
+      default: [],
+    },
+  },
+  setup(props, context) {
+    const { visible, cancel } = _closeModal(context);
+    const loading = ref<boolean>(false);
+    const searchValue = ref<string>('');
+    const myFriends = ref<FriendList[]>([]);
+    // 查询好友列表
+    function queryMyFriend(value?: string) {
+      loading.value = true;
+      queryQueryWrFriend(value)
+        .then((res) => {
+          if (res) {
+            myFriends.value = [];
+            res.forEach((el) => {
+              const checked = props.friends.includes(el.frienduserid) ? true : false;
+              myFriends.value.push({ ...el, checked });
             });
-            if (result.length) {
-                context.emit('update', result);
-            } else {
-                message.warn('请选择朋友');
-            }
+          }
+        })
+        .catch((err: string) => message.error(err))
+        .finally(() => {
+          loading.value = false;
+        });
+    }
+    queryMyFriend();
+    function getViewFriends() {
+      if (searchValue.value) {
+        return myFriends.value.filter((el) => String(el.frienduserid).includes(searchValue.value));
+      } else {
+        return myFriends.value;
+      }
+    }
+    function submit() {
+      const result: number[] = [];
+      myFriends.value.forEach((el) => {
+        if (el.checked) {
+          result.push(el.frienduserid);
         }
+      });
+      if (result.length) {
+        context.emit('update', result);
+      } else {
+        message.warn('请选择朋友');
+      }
+    }
 
-        return {
-            loading,
-            myFriends,
-            cancel,
-            visible,
-            submit,
-            searchValue,
-            getViewFriends,
-        };
-    },
+    return {
+      loading,
+      myFriends,
+      cancel,
+      visible,
+      submit,
+      searchValue,
+      getViewFriends,
+    };
+  },
 });
 </script>
 
 <style lang="less" scoped>
 .listed {
+    flex: 1;
     padding: 18px 20px 0;
     .formBar {
         height: calc(100% - 120px);
@@ -154,6 +140,21 @@ export default defineComponent({
         }
     }
 }
+.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;
+    }
+}
 .ant-checkbox-group.commonCheckboxGroup {
     .ant-checkbox-wrapper {
         span.txt {

+ 0 - 0
src/common/components/searchUser/index.less


+ 158 - 0
src/common/components/searchUser/index.vue

@@ -0,0 +1,158 @@
+<template>
+  <!--选择用户-->
+  <Drawer title="选择用户" placement="right" :class="[position === 'top' ? 'top486' : 'delistingBottom']" @cancel="cancel">
+    <a-spin :spinning="loading">
+      <div class="listed">
+        <a-form class="inlineForm dialogForm">
+          <a-input-search placeholder="搜索用户名称" class="searchFriendInput noSuffixInput" enter-button v-model:value="searchValue" @change="searchUser">
+            <template #prefix>
+              <SearchOutlined />
+            </template>
+          </a-input-search>
+          <div class="formBar ant-checkbox-group commonCheckboxGroup whitebgCheckbox">
+            <!-- <a-checkbox-group class="commonCheckboxGroup"> -->
+            <div class="ant-checkbox-wrapper" style="width: 100%">
+              <a-checkbox-group v-model:value="selectedUser" style="width: 100%">
+                <div class="item" v-for="(item, index) in userList" :key="index + '11'">
+                  <a-checkbox :value="item.userid">
+                    <span class="txt">{{ item.userid }} {{ item.username }}</span>
+                  </a-checkbox>
+                </div>
+              </a-checkbox-group>
+            </div>
+            <!-- </a-checkbox-group> -->
+          </div>
+          <a-row :gutter="24">
+            <a-col :span="24" class="fixedBtns">
+              <a-form-item class="btnCenter">
+                <a-button class="listedBtn" @click="submit">确定</a-button>
+              </a-form-item>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+    </a-spin>
+  </Drawer>
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType, ref, computed } from 'vue';
+import Drawer from '@/common/components/drawer/index.vue';
+import { SearchOutlined } from '@ant-design/icons-vue';
+import { QueryWrSearchUserRsp } from '@/services/go/wrtrade/interface';
+import { queryWrSearchUser } from '@/services/go/wrtrade';
+import { message } from 'ant-design-vue';
+import { debounce } from '@/utils/time'
+
+export default defineComponent({
+  emits: ['update:visible', 'update:selectedValue'],
+  components: {
+    Drawer,
+    SearchOutlined
+  },
+  props: {
+    position: {
+      type: String,
+      default: 'top',
+    },
+    selectedValue: {
+      type: Array as PropType<number[]>,
+      default: [],
+    },
+  },
+  setup(props, context) {
+    const loading = ref<boolean>(false);
+    const searchValue = ref<string>('');
+    const userList = ref<QueryWrSearchUserRsp[]>([]);
+
+    const selectedUser = computed({
+      get: () => props.selectedValue,
+      set: (val) => context.emit('update:selectedValue', val)
+    })
+
+    // 查询用户
+    const searchUser = debounce(() => {
+      userList.value = [];
+      selectedUser.value = [];
+
+      if (searchValue.value) {
+        loading.value = true;
+        queryWrSearchUser({ username: searchValue.value })
+          .then((res) => {
+            userList.value = res;
+          })
+          .catch((err: string) => message.error(err))
+          .finally(() => {
+            loading.value = false;
+          })
+      }
+    }, 500)
+
+    const submit = () => {
+      if (selectedUser.value.length) {
+        cancel();
+      } else {
+        message.warn('请选择用户');
+      }
+    }
+
+    const cancel = () => {
+      context.emit('update:visible', false);
+    }
+
+    return {
+      loading,
+      userList,
+      selectedUser,
+      cancel,
+      submit,
+      searchValue,
+      searchUser,
+    };
+  },
+});
+</script>
+
+<style lang="less" scoped>
+.listed {
+    flex: 1;
+    padding: 18px 20px 0;
+    .formBar {
+        height: calc(100% - 120px);
+        padding: 0 20px 0 13px;
+        margin-top: 16px;
+        background: @m-grey63;
+        border: 1px solid @m-black45;
+        .item {
+            width: 100%;
+            height: 50px;
+            line-height: 50px;
+            border-bottom: 1px solid @m-black45;
+            font-size: 16px;
+            color: @m-white6;
+        }
+    }
+}
+.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;
+    }
+}
+.ant-checkbox-group.commonCheckboxGroup {
+    .ant-checkbox-wrapper {
+        span.txt {
+            color: @m-white11;
+        }
+    }
+}
+</style>

+ 1 - 3
src/common/setup/modal/modal.ts

@@ -53,9 +53,7 @@ export function openModal(modelName: keyof ModalName, data?: any) {
 
 export type { ModalName };
 
-type emitFn = 'cancel' | 'update'
-
-export function _closeModal(context: SetupContext<emitFn[]>) {
+export function _closeModal<T extends string[]>(context: SetupContext<T>) {
     const visible = ref<boolean>(true);
     /**
      * 关闭弹窗

+ 12 - 1
src/services/go/wrtrade/index.ts

@@ -56,7 +56,9 @@ import {
     WrStandardFactoryItemEx,
     WrTradeDetail,
     WrTradeOrderDetailReq,
-    WrTradeOrderDetailRsp
+    WrTradeOrderDetailRsp,
+    QueryWrSearchUserReq,
+    QueryWrSearchUserRsp,
 } from "@/services/go/wrtrade/interface";
 
 /**
@@ -396,3 +398,12 @@ export function queryWrPerformanceStepType(): Promise<QueryWrPerformanceStepType
     });
 }
 
+/**
+ * 查询用户 /WrTrade2/QueryWrSearchUser
+ * @param param 
+ */
+export function queryWrSearchUser(param: QueryWrSearchUserReq): Promise<QueryWrSearchUserRsp[]> {
+    return commonSearch_go('/WrTrade2/QueryWrSearchUser', param).catch((err) => {
+        throw new Error(`查询用户: ${err}`);
+    });
+}

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

@@ -1179,4 +1179,15 @@ export interface QueryWrPerformanceStepTypeRsp {
     canauto: number; // 能否自动确认 - 0:不可自动确认 1:可自动确认 (可设置自动确认步骤: 1:买方支付 3:买方自提 5:买方确认货 7:买方确认票)
     steptypeid: number; // 步骤类型ID - 1:买方支付 2:卖方收款 3:买方自提 4:卖方发货 5:买方确认货 6:卖方发票 7:买方确认票 8:仓单转移
     steptypename: string; // 步骤类型名称
+}
+
+export interface QueryWrSearchUserReq {
+    username: string; // 用户名称(模糊匹配)
+}
+
+export interface QueryWrSearchUserRsp {
+    userid: number; // 用户ID
+    username: string; // 用户名称(已脱敏)
+    username2: string; // 用户名称(未脱敏)
+    usertype: number; //账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户 7:企业成员(云平台)
 }

+ 1 - 1
src/utils/websocket/index.ts

@@ -181,7 +181,7 @@ export class MTP2WebSocket<T extends Package40 | Package50> {
     private sendBeat(timer: beatTimer) {
         timerUtil.setInterval(
             () => {
-                console.log('心跳回复', this.packageType, ':', this.connState);
+                console.log('发送回复', this.packageType, ':', this.connState);
                 // 当前没有连接
                 if (this.connState !== 2) {
                     return;

+ 6 - 3
src/views/business/purchase/list/all/index.vue

@@ -70,6 +70,7 @@ import { getTableButton } from '@/common/setup/table/button';
 import { useRoute } from 'vue-router';
 import { getBizTypeName, getPriceTypeName } from '@/common/constants/enumsName';
 import { useTradeAccount } from '@/hooks/account'
+import moment from 'moment';
 
 export default defineComponent({
   name: EnumRouterName.purchase_pending,
@@ -95,17 +96,19 @@ export default defineComponent({
     const { loading, tableList, queryTable } = queryTableList<Ermcp3SellBuyContract>(true, 2);
 
     // 获取列表数据
-    const queryTableAction = () => {
+    const queryTableAction = async () => {
       switch (routeName) {
         // 待点价合同
         case 'purchase_pending':
-          queryTable(QueryPurchase, { querytype: 2 });
+          await queryTable(QueryPurchase, { querytype: 2 });
           break;
         // 待交收合同
         case 'purchase_performance':
-          queryTable(QueryPurchase, { querytype: 3 });
+          await queryTable(QueryPurchase, { querytype: 3 });
           break;
       }
+      // 日期降序排序
+      tableList.value = tableList.value.sort((a, b) => moment(b.createtime).valueOf() - moment(a.createtime).valueOf());
     };
 
     // 获取表头名称

+ 6 - 3
src/views/business/sell/list/all/index.vue

@@ -61,6 +61,7 @@ import { getTableButton } from '@/common/setup/table/button';
 import { useRoute } from 'vue-router';
 import { getBizTypeName, getPriceTypeName } from '@/common/constants/enumsName';
 import { useTradeAccount } from '@/hooks/account'
+import moment from 'moment';
 
 export default defineComponent({
   name: EnumRouterName.sell_pending,
@@ -86,17 +87,19 @@ export default defineComponent({
     const { loading, tableList, queryTable } = queryTableList<Ermcp3SellBuyContract>(true, 2);
 
     // 获取列表数据
-    const queryTableAction = () => {
+    const queryTableAction = async () => {
       switch (routeName) {
         // 待点价合同
         case 'sell_pending':
-          queryTable(QueryWareHouse, { querytype: 2 });
+          await queryTable(QueryWareHouse, { querytype: 2 });
           break;
         // 待交收合同
         case 'sell_performance':
-          queryTable(QueryWareHouse, { querytype: 3 });
+          await queryTable(QueryWareHouse, { querytype: 3 });
           break;
       }
+      // 日期降序排序
+      tableList.value = tableList.value.sort((a, b) => moment(b.createtime).valueOf() - moment(a.createtime).valueOf());
     };
 
     // 获取表头名称

+ 6 - 3
src/views/information/spot-contract/list/purchase/index.vue

@@ -70,6 +70,7 @@ import { QuerySpotContract } from '@/services/go/ermcp/spot-contract';
 import { EnumRouterName } from '@/common/constants/enumRouterName';
 import { getTableButton } from '@/common/setup/table/button';
 import { useRoute } from 'vue-router';
+import moment from 'moment';
 
 export default defineComponent({
   name: EnumRouterName.spot_contract_unsubmitted,
@@ -93,17 +94,19 @@ export default defineComponent({
     const { loading, tableList, queryTable } = queryTableList<Ermcp3ContractRsp>();
 
     // 获取列表数据
-    const queryTableAction = () => {
+    const queryTableAction = async () => {
       switch (routeName) {
         // 新增合同
         case 'purchase_contract':
-          queryTable(QuerySpotContract, { contracttype: 1, querytype: '1,2' });
+          await queryTable(QuerySpotContract, { contracttype: 1, querytype: '1,2' });
           break;
         // 已完结合同
         case 'purchase_finish':
-          queryTable(QuerySpotContract, { contracttype: 1, querytype: '4' });
+          await queryTable(QuerySpotContract, { contracttype: 1, querytype: '4' });
           break;
       }
+      // 日期降序排序
+      tableList.value = tableList.value.sort((a, b) => moment(b.createtime).valueOf() - moment(a.createtime).valueOf());
       // 获取 业务账户
       queryBusinessManager();
     };

+ 6 - 3
src/views/information/spot-contract/list/sell/index.vue

@@ -70,6 +70,7 @@ import { QuerySpotContract } from '@/services/go/ermcp/spot-contract';
 import { EnumRouterName } from '@/common/constants/enumRouterName';
 import { getTableButton } from '@/common/setup/table/button';
 import { useRoute } from 'vue-router';
+import moment from 'moment';
 
 export default defineComponent({
   name: EnumRouterName.spot_contract_unsubmitted,
@@ -92,17 +93,19 @@ export default defineComponent({
     const { loading, tableList, queryTable } = queryTableList<Ermcp3ContractRsp>();
 
     // 获取列表数据
-    const queryTableAction = () => {
+    const queryTableAction = async () => {
       switch (routeName) {
         // 新增合同
         case 'sell_contract':
-          queryTable(QuerySpotContract, { contracttype: -1, querytype: '1,2' });
+          await queryTable(QuerySpotContract, { contracttype: -1, querytype: '1,2' });
           break;
         // 已完结合同
         case 'sell_finish':
-          queryTable(QuerySpotContract, { contracttype: -1, querytype: '4' });
+          await queryTable(QuerySpotContract, { contracttype: -1, querytype: '4' });
           break;
       }
+      // 日期降序排序
+      tableList.value = tableList.value.sort((a, b) => moment(b.createtime).valueOf() - moment(a.createtime).valueOf());
       // 获取 业务账户
       queryBusinessManager();
     };

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

@@ -11,14 +11,15 @@
       </div>
       <div class="mtp-modal__container form-row">
         <a-form ref="formRef" :model="formState" :rules="rules">
-          <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>
-              <a-select-option :value="2">浮动价</a-select-option>
-              <a-select-option :value="3">贸易圈</a-select-option>
+          <a-form-item label="挂牌方式" name="marketid">
+            <a-select class="inlineFormSelect" v-model:value="formState.marketid" @change="handleMarket" 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 v-for="item in spotMarkets" :key="item.marketid" :value="item.marketid">{{ item.marketname }}</a-select-option>
             </a-select>
           </a-form-item>
-          <a-form-item ref="FixedPrice" label="挂牌价格" name="FixedPrice" :autoLink="false" v-if="isFixed() || isBlocs()">
+          <a-form-item ref="FixedPrice" label="挂牌价格" name="FixedPrice" :autoLink="false" v-if="!isFloat()">
             <div class="block">
               <div class="block-content">
                 <a-input-number class="block-content__input dialogInput" :min="0" v-model:value="formState.FixedPrice" @blur="() => $refs.FixedPrice.onFieldBlur()" />
@@ -91,6 +92,18 @@
               </div>
             </div>
           </a-form-item>
+          <a-form-item label="指定用户" v-if="isAgreemt()">
+            <div class="block">
+              <div class="block-content">
+                <div class="block-content">
+                  <span :class="['clickBox', getFriendLength() ? 'white' : '']" @click="showUser = true">{{ getFriendLength() ? `已选${getFriendLength()}人` : '选择用户' }}</span>
+                  <svg class="block-content__suffix icon svg-icon" aria-hidden="true" @click="showUser = true">
+                    <use xlink:href="#icon-pengyou1" />
+                  </svg>
+                </div>
+              </div>
+            </div>
+          </a-form-item>
           <a-form-item label="指定朋友" v-if="isBlocs()">
             <div class="block">
               <div class="block-content">
@@ -117,12 +130,9 @@
           <a-form-item label="估算金额" style="width:100%" v-if="isFloat()">
             <span class="white ml8">{{ getWrMoney() }}</span>
           </a-form-item>
-          <a-form-item label="挂牌金额" style="width:100%" v-if="isFixed()">
+          <a-form-item label="挂牌金额" style="width:100%" v-else>
             <span class="white ml8">{{ getWrMoney() }}</span>
           </a-form-item>
-          <a-form-item label="挂牌金额" style="width:100%" v-if="isBlocs()">
-            <span class="white ml8">{{ getMoney() }}</span>
-          </a-form-item>
           <a-form-item label="履约保证金" style="width:100%" v-if="isBlocs()">
             <span class="white ml8">{{ getMargin() }}</span>
           </a-form-item>
@@ -142,14 +152,14 @@
   </Drawer>
   <!-- 选择朋友 -->
   <Friend v-if="showFriend" :friends="formState.friends" :position="'bottom'" @cancel="chooseFriend" @update="chooseFriend" />
+  <!-- 选择用户 -->
+  <SearchUser v-model:visible="showUser" v-model:selectedValue="formState.friends" :position="'bottom'" />
   <!-- 选择履约模板 -->
   <Permance v-if="showPermance" :position="'bottom'" @cancel="choosePermance" @update="choosePermance" />
 </template>
 
 <script lang="ts">
 import Drawer from '@/common/components/drawer/index.vue';
-import Friend from '@/common/components/friends/index.vue';
-import Permance from '@/common/components/permanceTemp/choosePermancePlanTmp.vue';
 import { BuyOrSell } from '@/common/constants/enumCommon';
 import { ModalEnum } from '@/common/constants/modalNameEnum';
 import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
@@ -169,13 +179,18 @@ import { getGoodsPrice } from '@/views/market/market-spot/components/buy-sell-ma
 import { message } from 'ant-design-vue';
 import moment from 'moment';
 import { v4 as uuidv4, v4 } from 'uuid';
-import { defineComponent, onBeforeUnmount, PropType, ref } from 'vue';
+import { defineComponent, defineAsyncComponent, onBeforeUnmount, 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,
-  components: { Drawer, Friend, Permance },
+  components: {
+    Drawer,
+    Friend: defineAsyncComponent(() => import('@/common/components/friends/index.vue')), // 选择朋友
+    Permance: defineAsyncComponent(() => import('@/common/components/permanceTemp/choosePermancePlanTmp.vue')), // 选择履约模板
+    SearchUser: defineAsyncComponent(() => import('@/common/components/searchUser/index.vue')), // 选择用户
+  },
   emits: ['cancel', 'update'],
   props: {
     selectedRow: {
@@ -185,6 +200,7 @@ export default defineComponent({
   },
   setup(props, context) {
     const loading = ref<boolean>(false);
+    const showUser = ref(false);
     const { visible, cancel } = _closeModal(context);
     const { rules, formState, formRef } = handleForm(props.selectedRow);
 
@@ -198,6 +214,36 @@ export default defineComponent({
     const { numCheck, increaseNumber, decreaseNumber } = useBlocksNumber(formState);
 
     const { goodsGroup, goodsList, groupsChange, findGoodsCode } = handleGoods();
+
+    // 获取仓单贸易市场
+    const { spotMarkets } = queryMarketSection(false)
+
+    // 切换市场
+    function handleMarket(value: number) {
+      formState.friends = [];
+      const market = spotMarkets.value.find((e) => e.marketid === value);
+      if (market) {
+        switch (market.listingmode) {
+          // 浮动价
+          case 2: {
+            formState.WRPriceType = 2;
+          }
+          // 贸易圈
+          case 3: {
+            formState.isSpecified = 1;
+          }
+          // 指定价
+          case 4: {
+            formState.isSpecified = 2;
+          }
+          default: {
+            formState.WRPriceType = 1;
+            formState.isSpecified = 0;
+          }
+        }
+      }
+    }
+
     // 切换商品组
     function handleGoodsGroups(value: number) {
       groupsChange(value);
@@ -218,7 +264,7 @@ export default defineComponent({
     // 估算价
     function getPrice() {
       let result = '--';
-      if (goodsCode.value) {
+      if (goodsCode.value && typeof formState.PriceMove === 'number') {
         const goodsPrice = getQuoteDayInfoByCodeFindPrice(goodsCode.value);
         if (goodsPrice && goodsPrice !== '--') {
           // 有实时行情价格
@@ -231,7 +277,7 @@ export default defineComponent({
     onBeforeUnmount(() => {
       removeSubscribeQuotation(uuid);
     });
-    const { getWrMoney, getWrMargin, isFloat, isFixed, isBlocs } = handleNumAndPrice();
+    const { getWrMoney, getWrMargin, isFloat, isFixed, isBlocs, isAgreemt } = handleNumAndPrice();
     // 处理内部资金账号
     function handleSelectedAccount() {
       const item = getSelectedAccount();
@@ -239,7 +285,25 @@ 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) => {
@@ -255,7 +319,7 @@ export default defineComponent({
             ClientSerialNo: uuidv4(), // 客户端流水号
             // OperateSrc: 2,
             ClientType: 4,
-            // MarketID: 17201,
+            MarketID: formState.marketid,
             LadingBillId: props.selectedRow.ladingbillid ? props.selectedRow.ladingbillid : 0, // 提单id(wrholdlb的LadingBillId字段),卖的时候填写 uint64
             // LadingBillId: 'uint642081626946446000001', // 提单id(wrholdlb的LadingBillId字段),卖的时候填写 uint64
             TradeDate: moment(marketInfo.tradedate).format('YYYYMMDD'), // 交易日 string
@@ -263,7 +327,7 @@ export default defineComponent({
             SubNum: props.selectedRow.subnum ? props.selectedRow.subnum : 0,
             // WRFactorTypeId: '2121626946446000001', // 仓单要素ID(wrholdlb的WRFactorTypeId字段),卖的时候填写 uint64
             WRFactorTypeId: props.selectedRow.wrfactortypeid, // 仓单要素ID(wrholdlb的WRFactorTypeId字段),卖的时候填写 uint64
-            IsSpecified: 0, // 是否指定对手 0:不指定 1:指定 uint32
+            IsSpecified: res.isSpecified, // 是否指定对手 0:不指定 1:指定 uint32
             MatchAccIDs: [], // 仓单贸易对手资金账号ID集合(指定对手时填写) uint32
             OrderQty: res.OrderQty, // 委托数量(可挂部分数据量) ======
             DeliveryGoodsID: props.selectedRow.deliverygoodsid, // 交割商品商品ID
@@ -295,10 +359,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('请选择朋友');
@@ -306,9 +370,7 @@ export default defineComponent({
               }
             }
             const obj = {
-              IsSpecified: 1,
               MatchAccIDs: res.friends,
-              WRPriceType: 1,
               TimevalidType: 3, // 时间有效类型 1:当日有效 2:本周有效 3:指定时间有效 4:一直有效
               MarginFlag: 1, // 挂牌是否指定保证金 0:否 1:是
               MarginAlgorithm: 1, // 指定保证金方式 1:比率 2:固定
@@ -349,6 +411,7 @@ export default defineComponent({
       decreasePrice,
       ...useBlocksAccount(formState),
       ...useBlocksMoney(formState),
+      showUser,
       showPermance,
       choosePermance,
       openPermance,
@@ -362,6 +425,10 @@ export default defineComponent({
       getFriendLength,
       limiteFriends,
       getPrice,
+      isAgreemt,
+      handleMarket,
+      spotMarkets,
+      handleSelectedAccount,
     };
   },
 });

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

@@ -1,10 +1,12 @@
 import { BlocsListingForm } from '@/common/setup/warehouse_receipt_trade/interface';
 export interface ListingForm extends BlocsListingForm {
-    WRPriceType: 1 | 2 | 3,// 价格方式 1:固定价 2:浮动价 3:贸易圈
+    WRPriceType: number,// 价格方式 1:固定价 2:浮动价
     FixedPrice: number, // 固定价格
     OrderQty: number,
     DelistMinQty: number,
     PriceMove: number,// 升贴水(浮动价时填写)
     goodsgroupid: number | undefined,
     goodsid: number | undefined,
+    marketid: number | undefined,   // 当前选择挂牌市场ID
+    isSpecified: number, // 是否指定对手
 }

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

@@ -1,15 +1,18 @@
 import { TradeMode } from '@/common/constants/enumCommon';
 import { validateCommon } from '@/common/setup/validate';
 import { handleForm as useForm } from '@/common/setup/warehouse_receipt_trade/listing';
-import { useVerifyListingNum, useVerifyListingBasis } from '@/hooks/form/verify';
+import { useVerifyBeginDelistingNum, useVerifyListingNum, useVerifyListingBasis } from '@/hooks/form/verify';
 import { getGoodsGroupsByTradeMode, getIPOGoodsList, getGoodsById, getQuoteDayInfoByCode, getQuoteDayInfoByCodeFindPrice } from '@/services/bus/goods';
 import { getRules } from '@/services/bus/rules';
+import { queryTjmdMarketSection } from "@/services/go/Tjmd";
+import { TjmdMarketSectionConfig } from '@/services/go/Tjmd/interface';
 import { Goods } from "@/services/go/ermcp/goodsInfo/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 { getAllMarkets } from '@/services/bus/market';
 
 function initFormData(): ListingForm {
     return {
@@ -28,6 +31,8 @@ function initFormData(): ListingForm {
         friends: [],
         permanceTempName: '',
         permaceTempId: 0,
+        marketid: undefined,
+        isSpecified: 0,
     }
 }
 
@@ -45,16 +50,20 @@ export function handleForm(data: WrPosition) {
         }
     };
 
-    const { v_num } = useVerifyListingNum<ListingForm, 'DelistMinQty'>(formState, 'DelistMinQty', minivalue, creditenableqty);
+    const { v_num } = useVerifyListingNum(formState, 'OrderQty', minivalue, creditenableqty);
     const { v_basis } = useVerifyListingBasis(formState, 'goodsid');
 
+    // 验证 起摘数量
+    const { v_beginDelistingNum } = useVerifyBeginDelistingNum(data.minivalue);
+
     const rule = {
         FixedPrice: [{ required: true, message: '请输入挂牌价格', trigger: 'blur', type: 'number', min: 1, }],
         OrderQty: [{ required: true, validator: v_num, trigger: 'blur', type: 'number' }],
         PriceMove: [{ required: true, validator: v_basis, trigger: 'blur', type: 'number', }],
-        DelistMinQty: [{ required: true, message: '请输入起摘数量', trigger: 'blur', type: 'number', min: 0, }],
+        DelistMinQty: [{ required: true, validator: v_beginDelistingNum, trigger: 'blur', type: 'number', }],
         DeliveryMonth: [{ required: true, message: '请选择交收月', }],
         goodsid: [{ required: true, validator: v_group }],
+        marketid: [{ required: true, message: '请选择挂牌方式', type: 'number', }]
 
     }
     Object.assign(rules, rule)
@@ -80,13 +89,17 @@ export function handleGoods() {
 
 export function handleNumAndPrice() {
     function isFloat() {
-        return formState.WRPriceType === 2;
+        return formState.marketid === 2;
     }
     function isFixed() {
-        return formState.WRPriceType === 1;
+        return formState.marketid === 1;
     }
     function isBlocs() {
-        return formState.WRPriceType === 3;
+        return formState.marketid === 3;
+    }
+    // 协议指定
+    function isAgreemt() {
+        return formState.marketid === 4;
     }
     // 获取选中的资金账号
     const hasRules = () => getRules().length > 0
@@ -95,11 +108,13 @@ export function handleNumAndPrice() {
         let result = 0
         if (isFloat()) {
             if (hasRules()) {
-                const goodsCode = goodsList.value.find(e => e.goodsid === formState.goodsid)?.goodscode as string
-                const goodsPrice = getQuoteDayInfoByCodeFindPrice(goodsCode);
-                if (goodsPrice && goodsPrice !== '--') {
-                    // 浮动价挂牌金额=(基差价格+期货合约最新价)*挂牌数量
-                    result = (formState.PriceMove + (goodsPrice as number)) * formState.OrderQty
+                const goods = goodsList.value.find(e => e.goodsid === formState.goodsid);
+                if (goods) {
+                    const goodsPrice = getQuoteDayInfoByCodeFindPrice(goods.goodscode);
+                    if (goodsPrice && goodsPrice !== '--') {
+                        // 浮动价挂牌金额=(基差价格+期货合约最新价)*挂牌数量
+                        result = (formState.PriceMove + (goodsPrice as number)) * formState.OrderQty
+                    }
                 }
             }
         } else {
@@ -121,5 +136,33 @@ export function handleNumAndPrice() {
         }
 
     }
-    return { getWrMoney, getWrMargin, isFloat, isFixed, isBlocs }
+    return { getWrMoney, getWrMargin, isFloat, isFixed, isBlocs, isAgreemt }
 }
+
+/**
+ * 查询市场板块,用于挂牌时挂牌方式选择,替代之前的“一口价、浮动价和贸易圈”
+ */
+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 => {
+            const a = item.auctionwrtype === (isPre ? 1 : 2);
+            const b = item.trademode === TradeMode.WarehouseReceiptTrade;
+            const c = markets.findIndex(m => m.marketid === item.marketid) > -1;
+            return a && b && c;
+        })
+        spotMarkets.value = resMarkets
+
+        const market = resMarkets.find((e) => e.listingmode === formState.WRPriceType)
+        if (market) {
+            formState.marketid = market.marketid;
+        }
+    })
+
+    return { spotMarkets };
+}

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

@@ -89,6 +89,18 @@
               </div>
             </div>
           </a-form-item>
+          <a-form-item label="指定用户" v-if="isAgreemt()">
+            <div class="block">
+              <div class="block-content">
+                <div class="block-content">
+                  <span :class="['clickBox', getFriendLength() ? 'white' : '']" @click="showUser = true">{{ getFriendLength() ? `已选${getFriendLength()}人` : '选择用户' }}</span>
+                  <svg class="block-content__suffix icon svg-icon" aria-hidden="true" @click="showUser = true">
+                    <use xlink:href="#icon-pengyou1" />
+                  </svg>
+                </div>
+              </div>
+            </div>
+          </a-form-item>
           <a-form-item label="指定朋友" v-if="isBlocs()">
             <div class="block">
               <div class="block-content">
@@ -137,14 +149,14 @@
   </Drawer>
   <!-- 选择朋友 -->
   <Friend v-if="showFriend" :friends="formState.friends" :position="'bottom'" @cancel="chooseFriend" @update="chooseFriend" />
+  <!-- 选择用户 -->
+  <SearchUser v-model:visible="showUser" v-model:selectedValue="formState.friends" :position="'bottom'" />
   <!-- 选择履约模板 -->
   <Permance v-if="showPermance" :position="'bottom'" :marketid="formState.marketid" @cancel="choosePermance" @update="choosePermance" />
 </template>
 
 <script lang="ts">
 import Drawer from '@/common/components/drawer/index.vue';
-import Friend from '@/common/components/friends/index.vue';
-import Permance from '@/common/components/permanceTemp/choosePermancePlanTmp.vue';
 import { BuyOrSell } from '@/common/constants/enumCommon';
 import { ModalEnum } from '@/common/constants/modalNameEnum';
 import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
@@ -162,13 +174,18 @@ import Bus from '@/utils/eventBus/index';
 import { message } from 'ant-design-vue';
 import moment from 'moment';
 import { v4 } from 'uuid';
-import { defineComponent, onBeforeUnmount, PropType, ref } from 'vue';
+import { defineComponent, defineAsyncComponent, onBeforeUnmount, PropType, ref, } from 'vue';
 import { ListingForm } from './interface';
 import { handleForm, handleGoods, handleNumAndPrice, queryMarketSection } from './setup';
 
 export default defineComponent({
   name: ModalEnum.spot_warrant_spot_details_listed,
-  components: { Drawer, Friend, Permance },
+  components: {
+    Drawer,
+    Friend: defineAsyncComponent(() => import('@/common/components/friends/index.vue')), // 选择朋友
+    Permance: defineAsyncComponent(() => import('@/common/components/permanceTemp/choosePermancePlanTmp.vue')), // 选择履约模板
+    SearchUser: defineAsyncComponent(() => import('@/common/components/searchUser/index.vue')), // 选择用户
+  },
   emits: ['cancel', 'update'],
   props: {
     selectedRow: {
@@ -178,6 +195,7 @@ export default defineComponent({
   },
   setup(props, context) {
     const loading = ref<boolean>(false);
+    const showUser = ref(false);
     const { visible, cancel } = _closeModal(context);
     const { rules, formState, formRef } = handleForm(props.selectedRow);
 
@@ -193,16 +211,7 @@ export default defineComponent({
     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) {
-        // 市场挂牌方式 1:一口价 2:浮动价 3:贸易圈 4:协议指定
-        formState.WRPriceType = market.listingmode;
-      }
-    }
+    const { spotMarkets, handleMarket } = queryMarketSection(false)
 
     // 点选履约模板
     function handlePermance() {
@@ -293,7 +302,7 @@ export default defineComponent({
             SubNum: props.selectedRow.subnum,
             // WRFactorTypeId: '2121626946446000001', // 仓单要素ID(wrholdlb的WRFactorTypeId字段),卖的时候填写 uint64
             WRFactorTypeId: props.selectedRow.wrfactortypeid, // 仓单要素ID(wrholdlb的WRFactorTypeId字段),卖的时候填写 uint64
-            IsSpecified: 0, // 是否指定对手 0:不指定 1:指定 uint32
+            IsSpecified: res.isSpecified, // 是否指定对手 0:不指定 1:指定 uint32
             MatchAccIDs: [], // 仓单贸易对手资金账号ID集合(指定对手时填写) uint32
             OrderQty: res.OrderQty, // 委托数量(可挂部分数据量) ======
             DeliveryGoodsID: props.selectedRow.deliverygoodsid, // 交割商品商品ID
@@ -336,9 +345,7 @@ export default defineComponent({
               }
             }
             const obj = {
-              IsSpecified: 1,
               MatchAccIDs: res.friends,
-              WRPriceType: 1,
               TimevalidType: 3, // 时间有效类型 1:当日有效 2:本周有效 3:指定时间有效 4:一直有效
               MarginFlag: 1, // 挂牌是否指定保证金 0:否 1:是
               MarginAlgorithm: 1, // 指定保证金方式 1:比率 2:固定
@@ -382,6 +389,7 @@ export default defineComponent({
       decreasePrice,
       ...useBlocksAccount(formState),
       ...useBlocksMoney(formState),
+      showUser,
       showPermance,
       choosePermance,
       openPermance,

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

@@ -1,6 +1,6 @@
 import { BlocsListingForm } from '@/common/setup/warehouse_receipt_trade/interface';
 export interface ListingForm extends BlocsListingForm {
-    WRPriceType: number,// 价格方式 1:固定价 2:浮动价 3:贸易圈
+    WRPriceType: number,// 价格方式 1:固定价 2:浮动价
     FixedPrice: number, // 固定价格
     OrderQty: number,
     DelistMinQty: number,
@@ -8,4 +8,6 @@ export interface ListingForm extends BlocsListingForm {
     goodsgroupid: number | undefined,
     goodsid: number | undefined,
     marketid: number | undefined,   // 当前选择挂牌市场ID
+    isSpecified: number, // 是否指定对手
+    listingmode: number, // 挂牌方式 1:一口价 2:浮动价 3:贸易圈 4:协议指定
 }

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

@@ -32,6 +32,8 @@ function initFormData(): ListingForm {
         permanceTempName: '',
         permaceTempId: 0,
         marketid: undefined,
+        isSpecified: 0,
+        listingmode: 0,
     }
 }
 
@@ -50,11 +52,11 @@ export function handleForm(data: WrHoldLB) {
         }
     };
 
-    const { v_num } = useVerifyListingNum<ListingForm, 'DelistMinQty'>(formState, 'DelistMinQty', minivalue, enableqty);
+    const { v_num } = useVerifyListingNum(formState, 'OrderQty', minivalue, enableqty);
     const { v_basis } = useVerifyListingBasis(formState, 'goodsid');
 
     // 验证 起摘数量
-    const { v_beginDelistingRules, v_beginDelistingNum } = useVerifyBeginDelistingNum(data.minivalue);
+    const { v_beginDelistingNum } = useVerifyBeginDelistingNum(data.minivalue);
 
     const rule = {
         FixedPrice: [{ required: true, message: '请输入挂牌价格', trigger: 'blur', type: 'number', min: 1, }],
@@ -84,23 +86,22 @@ export function handleGoods() {
     return { goodsGroup, goodsList, groupsChange, findGoodsCode }
 }
 
-
 export function handleNumAndPrice() {
-    // 浮动价
-    function isFloat() {
-        return formState.WRPriceType === 2;
-    }
     // 一口价
     function isFixed() {
-        return formState.WRPriceType === 1;
+        return formState.listingmode === 1;
+    }
+    // 浮动价
+    function isFloat() {
+        return formState.listingmode === 2;
     }
     // 贸易圈
     function isBlocs() {
-        return formState.WRPriceType === 3;
+        return formState.listingmode === 3;
     }
     // 协议指定
     function isAgreemt() {
-        return formState.WRPriceType === 4;
+        return formState.listingmode === 4;
     }
 
     // 获取选中的资金账号
@@ -160,11 +161,39 @@ export function queryMarketSection(isPre: boolean) {
         })
         spotMarkets.value = resMarkets
 
-        const market = resMarkets.find((e) => e.listingmode === formState.WRPriceType)
-        if (market) {
-            formState.marketid = market.marketid;
+        if (resMarkets.length) {
+            const marketid = resMarkets[0].marketid;
+            handleMarket(marketid);
         }
     })
 
-    return { spotMarkets };
+    const handleMarket = (marketid: number) => {
+        formState.friends = [];
+        formState.marketid = marketid;
+        const market = spotMarkets.value.find((e) => e.marketid === marketid);
+        if (market) {
+            formState.listingmode = market.listingmode
+            debugger
+            switch (market.listingmode) {
+                // 浮动价
+                case 2: {
+                    formState.WRPriceType = 2;
+                }
+                // 贸易圈
+                case 3: {
+                    formState.isSpecified = 1;
+                }
+                // 指定价
+                case 4: {
+                    formState.isSpecified = 2;
+                }
+                default: {
+                    formState.WRPriceType = 1;
+                    formState.isSpecified = 0;
+                }
+            }
+        }
+    }
+
+    return { spotMarkets, handleMarket };
 }