Handy_Cao 3 rokov pred
rodič
commit
009d7d6864
27 zmenil súbory, kde vykonal 745 pridanie a 15 odobranie
  1. 28 0
      public/proto/thj.proto
  2. 80 1
      src/business/order/index.ts
  3. 36 3
      src/business/trade/index.ts
  4. 28 0
      src/constants/client.ts
  5. 2 0
      src/constants/funcode.ts
  6. 28 2
      src/packages/mobile/router/index.ts
  7. 1 1
      src/packages/mobile/views/home/components/mine/index.vue
  8. 0 1
      src/packages/mobile/views/mine/order/detail/index.less
  9. 2 0
      src/packages/mobile/views/mine/order/detail/purchasetrade/index.less
  10. 0 0
      src/packages/mobile/views/mine/order/detail/purchasetrade/index.vue
  11. 73 0
      src/packages/mobile/views/mine/order/detail/wrorder/index.vue
  12. 46 0
      src/packages/mobile/views/mine/order/detail/wrtrade/index.vue
  13. 7 1
      src/packages/mobile/views/mine/order/list/components/wrorder/index.vue
  14. 7 1
      src/packages/mobile/views/mine/order/list/components/wrtrade/index.vue
  15. 4 4
      src/packages/mobile/views/mine/order/list/index.vue
  16. 50 0
      src/packages/mobile/views/mine/wareorder/list/components/holdlb/index.vue
  17. 49 0
      src/packages/mobile/views/mine/wareorder/list/components/wroutinapply/index.vue
  18. 16 0
      src/packages/mobile/views/mine/wareorder/list/index.less
  19. 29 0
      src/packages/mobile/views/mine/wareorder/list/index.vue
  20. 7 0
      src/packages/mobile/views/mine/wareorder/listing/index.vue
  21. 7 0
      src/packages/mobile/views/mine/wareorder/pickup/index.vue
  22. 0 0
      src/packages/mobile/views/mine/wareorder/wroutinapplydetail/index.less
  23. 43 0
      src/packages/mobile/views/mine/wareorder/wroutinapplydetail/index.vue
  24. 14 0
      src/services/api/order/index.ts
  25. 8 1
      src/services/api/trade/index.ts
  26. 151 0
      src/types/model/order.d.ts
  27. 29 0
      src/types/proto/trade.d.ts

+ 28 - 0
public/proto/thj.proto

@@ -612,4 +612,32 @@ message AccountFundInfoRsp {
 	optional double AvailableMargin = 6; // double 可用保证金,查询位掩码: 1
 	optional double AvailableOutMoney = 7; // double 可出资金,查询位掩码: 2
 	optional int32 IsCleanAccount = 8; // int32 是否是干净账户,查询位掩码: 4
+}
+
+// 挂牌撤单请求
+message WRListingCancelOrderReq {
+	optional MessageHead Header = 1;
+	optional uint32 UserID = 2; // 用户ID
+	optional uint64 AccountID = 3; // 资金账号
+	optional uint64 OldWRTradeOrderID = 4; // 目标仓单贸易委托单ID
+	optional uint32 OrderSrc = 5; // 委托来源
+	optional string ClientSerialNo = 6; // 客户端流水号
+	optional string ClientOrderTime = 7; // 客户端委托时间
+	optional uint32 ClientType = 8; // 终端类型
+	optional uint64 OperatorID = 9; // 操作员账号ID
+	optional uint32 BuyOrSell = 10; // 买卖方向
+	optional uint64 WRID = 11; // 仓单ID,卖的时候填写
+}
+// 挂牌撤单应答
+message WRListingCancelOrderRsp {
+	optional MessageHead Header = 1; // 消息头
+	optional int32 RetCode = 2; // 返回码
+	optional string RetDesc = 3; // 描述信息
+	optional uint64 WRTradeCancelID = 4; // 仓单贸易撤单号
+	optional uint64 OldWRTradeOrderID = 5; // 目标仓单贸易委托单ID
+	optional uint32 UserID = 6; // 用户ID
+	optional uint64 AccountID = 7; // 资金账号
+	optional uint64 CancelQty = 8; // 撤单数量
+	optional string OrderTime = 9; // 接受撤单的时间
+	optional string ClientSerialNo = 10; // 客户端流水号
 }

+ 80 - 1
src/business/order/index.ts

@@ -1,8 +1,87 @@
 import { shallowRef } from 'vue'
 import { useDataTable } from '@/hooks/datatable'
-import { queryWrOrderDetail, queryWrTradeDetail, queryTHJPurchaseTradeDetail } from '@/services/api/order'
+import { queryWrOrderDetail, queryWrTradeDetail, queryTHJPurchaseTradeDetail, queryHoldLB, queryWrOutInApply } from '@/services/api/order'
 import { useLoginStore } from '@/stores'
 
+// 查询仓单持有记录
+export function useQueryHoldLB() {
+    const { dataList, total, pageIndex, pageSize, pageCount } = useDataTable<Model.HoldLBRsp>()
+    const loading = shallowRef(false)
+    const { getFirstAccountId } = useLoginStore()
+    
+    const getHoldLB = async (warehouseid?: number, deliverygoodsid?: number, wrstandardid?: number, wrfactortypeid?: number, dgitemname?: string) => {
+        loading.value = true
+        await queryHoldLB({
+            data: {
+                accountid: getFirstAccountId(),
+                warehouseid: warehouseid,
+                deliverygoodsid: deliverygoodsid,
+                wrstandardid: wrstandardid,
+                wrfactortypeid: wrfactortypeid,
+                dgitemname: dgitemname,
+                page: pageIndex.value,
+                pagesize: pageSize.value,
+            },
+            success: (res) => {
+                total.value = res.total
+                dataList.value = res.data
+            },
+            complete: () => {
+                loading.value = false
+            }
+        })
+        return dataList.value
+    }
+
+    return {
+        loading,
+        dataList,
+        total,
+        pageIndex,
+        pageSize,
+        pageCount,
+        getHoldLB,
+    }
+}
+
+// 查询提货申请
+export function useQueryWrOutInApply() {
+    const { dataList, total, pageIndex, pageSize, pageCount } = useDataTable<Model.WrOutInApplyRsp>()
+    const loading = shallowRef(false)
+    const { getUserId } = useLoginStore()
+    
+    const getWrOutInApply = async (begindate?: string, enddate?: string) => {
+        loading.value = true
+        await queryWrOutInApply({
+            data: {
+                userid: getUserId(),
+                begindate: begindate,
+                enddate: enddate,
+                page: pageIndex.value,
+                pagesize: pageSize.value,
+            },
+            success: (res) => {
+                total.value = res.total
+                dataList.value = res.data
+            },
+            complete: () => {
+                loading.value = false
+            }
+        })
+        return dataList.value
+    }
+
+    return {
+        loading,
+        dataList,
+        total,
+        pageIndex,
+        pageSize,
+        pageCount,
+        getWrOutInApply,
+    }
+}
+
 // 查询仓单委托单
 export function useQueryWrOrderDetail() {
     const { dataList, total, pageIndex, pageSize, pageCount } = useDataTable<Model.WrOrderDetailRsp>()

+ 36 - 3
src/business/trade/index.ts

@@ -1,8 +1,9 @@
 import { ref, shallowRef } from 'vue'
 import { v4 } from 'uuid'
-import { ClientType } from '@/constants/client'
+import { ClientType, OrderSrc } from '@/constants/client'
 import { useLoginStore } from '@/stores'
-import { spotPresaleDestingOrder, spotPresalePlaymentReq, spotPresaleDeliveryConfirm, spotPresaleBreachOfContractConfirm, spotPresaleBreachOfContractApply } from '@/services/api/trade'
+import { spotPresaleDestingOrder, spotPresalePlayment, wrListingCancelOrder, spotPresaleDeliveryConfirm, spotPresaleBreachOfContractConfirm, spotPresaleBreachOfContractApply } from '@/services/api/trade'
+import { formatDate } from "@/filters";
 
 // 采购摘牌
 export function usePurchaseOrderDesting() {
@@ -123,7 +124,7 @@ export function useSpotPresalePlayment() {
 
     const playmentSubmit = (id: number ) => {
         loading.value = true
-        return spotPresalePlaymentReq({
+        return spotPresalePlayment({
             data: {
                 UserID: getUserId(),
                 WRTradeDetailID: id,
@@ -140,4 +141,36 @@ export function useSpotPresalePlayment() {
         loading,
         playmentSubmit,
     }
+}
+
+// 挂牌撤单请求接口
+export function useWrListingCancelOrder() {
+    const loading = shallowRef(false)
+    const { getUserId, getFirstAccountId, getLoginId } = useLoginStore()
+
+    const cancelSubmit = (id: number, buyorsell: number, wrid?: number ) => {
+        loading.value = true
+        return wrListingCancelOrder({
+            data: {
+                UserID: getUserId(),
+                AccountID: getFirstAccountId(),
+                OperatorID: getLoginId(),
+                OrderSrc: OrderSrc.ORDERSRC_CLIENT,
+                OldWRTradeOrderID: id,
+                ClientOrderTime: formatDate(new Date().toString(), 'YYYY-MM-DD HH:mm:ss'),
+                ClientSerialNo: v4(), // 客户端流水号
+                ClientType: ClientType.Web, // 终端类型
+                BuyOrSell: buyorsell,
+                WRID: wrid
+            },
+            complete: () => {
+                loading.value = false
+            }
+        })
+    }
+
+    return {
+        loading,
+        cancelSubmit,
+    }
 }

+ 28 - 0
src/constants/client.ts

@@ -25,4 +25,32 @@ export enum ClientType {
  */
 export function getClientTypeList() {
     return getEnumTypeList('clientType')
+}
+
+/**
+ * 委托来源
+ */
+ export enum OrderSrc {
+    /// 客户端
+    ORDERSRC_CLIENT = 1,
+    /// 管理端
+    ORDERSRC_MANAGE = 2,
+    /// 风控服务
+    ORDERSRC_RISK = 3,
+    /// 交割服务
+    ORDERSRC_DELIVERY = 4,
+    /// 交易服务
+    ORDERSRC_TRADE = 5,
+    /// 交易日结
+    ORDERSRC_DAYEND = 6,
+    /// 商品强平
+    ORDERSRC_EXPIREFORCECLOSE = 7,
+    /// 管理端商品退市强平
+    ORDERSRC_MANAGEFORCECLOSE = 8,
+    /// 交易接口
+    ORDERSRC_TRADEINTERFACE = 9,
+    /// 交收服务商被动
+    ORDERSRC_ENTRUSACCEPT = 10,
+    /// 预埋触发
+    ORDERSRC_PREPOSORDER = 11,
 }

+ 2 - 0
src/constants/funcode.ts

@@ -60,4 +60,6 @@ export enum FunCode {
     SpotPresaleBreachOfContractConfirmRsp = 1441858, // 铁合金现货预售违约确认接口应答
     SpotPresalePlaymentReq = 1441853,                // 铁合金现货预售付款处理接口请求(0, 22, 61)
 	SpotPresalePlaymentRsp = 1441854,           	 // 铁合金现货预售付款处理接口应答(0, 22, 62)
+    WRListingCancelOrderReq = 1441796,               /// 挂牌撤单请求
+    WRListingCancelOrderRsp = 1441797,               /// 挂牌撤单应答
 }

+ 28 - 2
src/packages/mobile/router/index.ts

@@ -216,9 +216,35 @@ const routes: Array<RouteRecordRaw> = [
         component: () => import('../views/mine/order/list/index.vue'),
       },
       {
-        path: 'detail',
+        path: 'purchasetradedetail',
         name: 'purchase-trade-detail',
-        component: () => import('../views/mine/order/detail/index.vue'),
+        component: () => import('../views/mine/order/detail/purchasetrade/index.vue'),
+      },
+      {
+        path: 'wrtradedetail',
+        name: 'wrtrade-detail',
+        component: () => import('../views/mine/order/detail/wrtrade/index.vue'),
+      },
+      {
+        path: 'wrorderdetail',
+        name: 'wrorder-detail',
+        component: () => import('../views/mine/order/detail/wrorder/index.vue'),
+      }
+    ]
+  },
+  {
+    path: '/wareorder',
+    component: Page,
+    children: [
+      {
+        path: '',
+        name: 'my-wareorder',
+        component: () => import('../views/mine/wareorder/list/index.vue'),
+      },
+      {
+        path: 'wroutinapplydetail',
+        name: 'wroutinapply-detail',
+        component: () => import('../views/mine/wareorder/wroutinapplydetail/index.vue'),
       }
     ]
   },

+ 1 - 1
src/packages/mobile/views/home/components/mine/index.vue

@@ -56,7 +56,7 @@
         <li @click="routerTo('my-order')">
           <app-iconfont icon="icon-wodedingdan" label-direction="bottom">我的订单</app-iconfont>
         </li>
-        <li>
+        <li @click="routerTo('my-wareorder')">
           <app-iconfont icon="icon-wodecangdan" label-direction="bottom">我的仓单</app-iconfont>
         </li>
         <li>

+ 0 - 1
src/packages/mobile/views/mine/order/detail/index.less

@@ -1 +0,0 @@
-.order-detail {}

+ 2 - 0
src/packages/mobile/views/mine/order/detail/purchasetrade/index.less

@@ -0,0 +1,2 @@
+
+

+ 0 - 0
src/packages/mobile/views/mine/order/detail/index.vue → src/packages/mobile/views/mine/order/detail/purchasetrade/index.vue


+ 73 - 0
src/packages/mobile/views/mine/order/detail/wrorder/index.vue

@@ -0,0 +1,73 @@
+<template>
+    <app-view class="order-detail g-form">
+        <template #header>
+            <app-navbar title="供求委托详情" />
+        </template>
+        <div v-if="detail" class="order-detail__container g-form__container">
+            <CellGroup title="委托信息">
+                <Cell title="商品" :value="detail.wrstandardname" />
+                <Cell title="仓库" :value="detail.warehousename" />
+                <Cell title="类型" :value="detail.wrtradetype === 1 ? '挂牌' : '摘牌' " />
+                <Cell title="方向" :value="detail.tradeqty" />
+                <Cell title="委托价格" :value="detail.fixedprice.toFixed(2)" />
+                <Cell title="挂牌数量" :value="detail.orderqty" />
+                <Cell title="撤销数量" :value="detail.cancelqty" />
+                <Cell title="委托时间" :value="formatDate(detail.ordertime, 'YYYY/MM/DD HH:mm:ss')" />
+                <Cell title="状态" :value="detail.wrtradeorderstatus" />
+                <Cell title="委托单号:" :value="detail.wrtradeorderid" />
+            </CellGroup>
+        </div>
+        <div v-else>
+            <Empty />
+        </div>
+        <template #footer>
+            <div class="g-form__footer" v-if="detail">
+                <Button block v-if="detail.wrtradeorderstatus === (3 | 7)" round type="primary" @click="spotConfirmSubmit">撤销</Button>
+            </div>
+        </template>
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+
+import { shallowRef } from 'vue'
+import { useNavigation } from '@/hooks/navigation'
+import { fullloading, dialog } from '@/utils/vant'
+import { CellGroup, Cell, Empty, Button, Toast } from 'vant'
+import { formatDate } from "@/filters";
+import { useWrListingCancelOrder } from "@/business/trade";
+import { number } from '@intlify/core-base';
+
+const { route, router } = useNavigation()
+const item = route.params.item
+const detail = shallowRef<Model.WrOrderDetailRsp>()
+
+const { cancelSubmit } = useWrListingCancelOrder()
+
+if (item) {
+    detail.value = JSON.parse(item.toString())
+}
+
+/// 确认交收
+const spotConfirmSubmit = () => {
+    dialog('确认要撤销吗?', {
+        showCancelButton: true
+    }).then(() => {
+        fullloading((hideLoading) => {
+            cancelSubmit(<number><unknown>(detail.value?.wrtradeorderid ?? '0'), detail.value?.buyorsell ?? 0).then(() => {
+                hideLoading()
+                dialog('撤销请求成功,请耐心等待审核。').then(() => {
+                    router.back()
+                })
+            }).catch((err) => {
+                Toast.fail(err)
+            })
+        })
+    })
+}
+
+</script>
+
+<style lang="less">
+@import './index.less';
+</style>

+ 46 - 0
src/packages/mobile/views/mine/order/detail/wrtrade/index.vue

@@ -0,0 +1,46 @@
+<template>
+    <app-view class="order-detail g-form">
+        <template #header>
+            <app-navbar title="采购详情" />
+        </template>
+        <div v-if="detail" class="order-detail__container g-form__container">
+            <CellGroup title="成交信息">
+                <Cell title="商品" :value="detail.wrstandardname" />
+                <Cell title="仓库" :value="detail.warehousename" />
+                <Cell title="类型" :value="detail.wrtradetype === 1 ? '挂牌' : '摘牌' " />
+                <Cell title="方向" :value="detail.buyorsell === 0 ? '买入' : '卖出' " />
+                <Cell title="成交价格" :value="detail.tradeprice.toFixed(2)" />
+                <Cell title="成交数量" :value="detail.tradeqty" />
+                <Cell title="成交金额" :value="(detail.tradeprice*detail.tradeqty).toFixed(2)" />
+                <Cell title="成交时间" :value="formatDate(detail.tradetime, 'YYYY/MM/DD HH:mm:ss')" />
+                <Cell title="对手方" :value="detail.matchusername" />
+                <Cell title="成交单号:" :value="detail.wrtradedetailid" />
+            </CellGroup>
+        </div>
+        <div v-else>
+            <Empty />
+        </div>
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+
+import { shallowRef } from 'vue'
+import { useNavigation } from '@/hooks/navigation'
+import { CellGroup, Cell, Empty } from 'vant'
+import { formatDate } from "@/filters";
+
+const { route } = useNavigation()
+const item = route.params.item
+const detail = shallowRef<Model.WrTradeDetailRsp>()
+
+
+if (item) {
+    detail.value = JSON.parse(item.toString())
+}
+
+</script>
+
+<style lang="less">
+@import './index.less';
+</style>

+ 7 - 1
src/packages/mobile/views/mine/order/list/components/wrorder/index.vue

@@ -2,7 +2,7 @@
     <app-view class="wrorderdetail">
         <app-pull-refresh v-model:pageIndex="pageIndex" v-model:error="error" :page-count="pageCount"
             @refresh="onRefresh">
-            <app-list :columns="columns" :data-list="dataList">
+            <app-list :columns="columns" :data-list="dataList" @click="onClick">
                 <!-- 方向 -->
                 <template #buyorsell="{ value }">
                     {{ getBuyOrSellName(value) }}
@@ -25,7 +25,9 @@ import { getTHJOrderStatusName, getBuyOrSellName } from '@/constants/order'
 import { useQueryWrOrderDetail } from '@/business/order'
 import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
 import AppList from '@mobile/components/base/list/index.vue'
+import { useNavigation } from '@/hooks/navigation'
 
+const { router } = useNavigation()
 const { pageIndex, pageCount, getWrOrderDetail } = useQueryWrOrderDetail()
 const dataList = shallowRef<Model.WrOrderDetailRsp[]>([])
 const error = shallowRef(false)
@@ -39,6 +41,10 @@ const columns: Model.TableColumn[] = [
     { prop: 'wrtradeorderstatus', label: '状态' },
 ]
 
+const onClick = (item: Model.THJPurchaseTradeDetailRsp) => {
+    router.push({ name: 'wrorder-detail', params: { item: JSON.stringify(item) } })
+}
+
 const onRefresh = (finish: () => void) => {
     /// 查询未完成
     getWrOrderDetail(1).then((res) => {

+ 7 - 1
src/packages/mobile/views/mine/order/list/components/wrtrade/index.vue

@@ -2,7 +2,7 @@
     <app-view class="wrtradedetail">
         <app-pull-refresh v-model:pageIndex="pageIndex" :page-count="pageCount" v-model:error="error"
             @refresh="onRefresh">
-            <app-list :columns="columns" :data-list="dataList">
+            <app-list :columns="columns" :data-list="dataList" @click="onClick">
                 <!-- 方向 -->
                 <template #buyorsell="{ value }">
                     {{ getBuyOrSellName(value) }}
@@ -25,11 +25,17 @@ import { getBuyOrSellName } from '@/constants/order'
 import { useQueryWrTradeDetail } from '@/business/order'
 import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
 import AppList from '@mobile/components/base/list/index.vue'
+import { useNavigation } from '@/hooks/navigation'
 
+const { router } = useNavigation()
 const { pageIndex, pageCount, getWrTradeDetail } = useQueryWrTradeDetail()
 const dataList = shallowRef<Model.WrTradeDetailRsp[]>([])
 const error = shallowRef(false)
 
+const onClick = (item: Model.THJPurchaseTradeDetailRsp) => {
+    router.push({ name: 'wrtrade-detail', params: { item: JSON.stringify(item) } })
+}
+
 const columns: Model.TableColumn[] = [
     { prop: 'wrstandardname', label: '商品' },
     { prop: 'buyorsell', label: '方向' },

+ 4 - 4
src/packages/mobile/views/mine/order/list/index.vue

@@ -3,7 +3,7 @@
         <template #header>
             <app-navbar title="我的订单">
                 <template #right>
-                    <Button round @click="onMoreClick">更多</Button>
+                    <!-- <Button round @click="onMoreClick">更多</Button> -->
                 </template>
             </app-navbar>
         </template>
@@ -24,12 +24,12 @@
 <script lang="ts" setup>
 import { shallowRef } from 'vue'
 import { Tab, Tabs, Button } from 'vant'
-import { useNavigation } from '@/hooks/navigation'
+// import { useNavigation } from '@/hooks/navigation'
 import PurchaseTrade from './components/purchasetrade/index.vue'
 import WrOrder from './components/wrorder/index.vue'
 import WrTrade from './components/wrtrade/index.vue'
 
-const { routerTo } = useNavigation()
+// const { routerTo } = useNavigation()
 const activeTab = shallowRef(0)
 
 const onMoreClick = () => {
@@ -41,7 +41,7 @@ const onMoreClick = () => {
             break
         }
         case 2: {
-            routerTo('bank-hisstatement')
+            // routerTo('bank-hisstatement')
             break
         }
     }

+ 50 - 0
src/packages/mobile/views/mine/wareorder/list/components/holdlb/index.vue

@@ -0,0 +1,50 @@
+<template>
+    <app-view class="order-list-purchase">
+        <app-pull-refresh v-model:error="error" v-model:pageIndex="pageIndex" :page-count="pageCount"
+            @refresh="onRefresh">
+            <app-list :columns="columns" :data-list="dataList" @click="onClick" />
+            <!-- <Button>更多</Button> -->
+        </app-pull-refresh>
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+
+import { shallowRef } from 'vue'
+// import { Button } from 'vant'
+import { useNavigation } from '@/hooks/navigation'
+import { useQueryHoldLB } from '@/business/order'
+import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
+import AppList from '@mobile/components/base/list/index.vue'
+
+const { router } = useNavigation()
+const { pageIndex, pageCount, getHoldLB } = useQueryHoldLB()
+const dataList = shallowRef<Model.HoldLBRsp[]>([])
+const error = shallowRef(false)
+
+const columns: Model.TableColumn[] = [
+    { prop: 'wrstandardname', label: '商品' },
+    { prop: 'qty', label: '库存' },
+    { prop: 'freezerqty', label: '冻结' },
+    { prop: 'enableqty', label: '可用' },
+    { prop: 'warehousename', label: '仓库' }
+]
+
+const onClick = (item: Model.HoldLBRsp) => {
+    router.push({ name: '', params: { item: JSON.stringify(item) } })
+}
+
+const onRefresh = (finish: () => void) => {
+    /// 查询未完成
+    getHoldLB().then((res) => {
+        if (pageIndex.value === 1) {
+            dataList.value = []
+        }
+        dataList.value.push(...res)
+    }).catch(() => {
+        error.value = true
+    }).finally(() => {
+        finish()
+    })
+}
+</script>

+ 49 - 0
src/packages/mobile/views/mine/wareorder/list/components/wroutinapply/index.vue

@@ -0,0 +1,49 @@
+<template>
+    <app-view class="order-list-purchase">
+        <app-pull-refresh v-model:error="error" v-model:pageIndex="pageIndex" :page-count="pageCount"
+            @refresh="onRefresh">
+            <app-list :columns="columns" :data-list="dataList" @click="onClick" />
+        </app-pull-refresh>
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+
+import { shallowRef } from 'vue'
+import { useNavigation } from '@/hooks/navigation'
+import { useQueryWrOutInApply } from '@/business/order'
+import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
+import AppList from '@mobile/components/base/list/index.vue'
+
+const { router } = useNavigation()
+const { pageIndex, pageCount, getWrOutInApply } = useQueryWrOutInApply()
+const dataList = shallowRef<Model.WrOutInApplyRsp[]>([])
+const error = shallowRef(false)
+
+const columns: Model.TableColumn[] = [
+    { prop: 'wrstandardname', label: '商品' },
+    { prop: 'qty', label: '数量' },
+    { prop: 'applytype', label: '类型' },
+    { prop: 'applytime', label: '申请时间' },
+    { prop: 'warehousename', label: '仓库' },
+    { prop: 'applystatus', label: '状态' },
+]
+
+const onClick = (item: Model.WrOutInApplyRsp) => {
+    router.push({ name: 'wroutinapply-detail', params: { item: JSON.stringify(item) } })
+}
+
+const onRefresh = (finish: () => void) => {
+    /// 查询未完成
+    getWrOutInApply().then((res) => {
+        if (pageIndex.value === 1) {
+            dataList.value = []
+        }
+        dataList.value.push(...res)
+    }).catch(() => {
+        error.value = true
+    }).finally(() => {
+        finish()
+    })
+}
+</script>

+ 16 - 0
src/packages/mobile/views/mine/wareorder/list/index.less

@@ -0,0 +1,16 @@
+.mine-wareorder {
+    .van-tabs {
+        display       : flex;
+        flex-direction: column;
+        height        : 100%;
+
+        &__content {
+            flex       : 1;
+            padding-top: .2rem;
+        }
+
+        .van-tab__panel {
+            height: 100%;
+        }
+    }
+}

+ 29 - 0
src/packages/mobile/views/mine/wareorder/list/index.vue

@@ -0,0 +1,29 @@
+<template>
+    <app-view class="mine-wareorder">
+        <template #header>
+            <app-navbar title="我的仓单" />
+        </template>
+        <Tabs v-model:active="activeTab">
+            <Tab title="明细">
+                <HoldLB />
+            </Tab>
+            <Tab title="提货">
+                <WrOutInApply />
+            </Tab>
+        </Tabs>
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef } from 'vue'
+import { Tab, Tabs } from 'vant'
+import HoldLB from './components/holdlb/index.vue'
+import WrOutInApply from './components/wroutinapply/index.vue'
+
+const activeTab = shallowRef(0)
+
+</script>
+
+<style lang="less">
+@import './index.less';
+</style>

+ 7 - 0
src/packages/mobile/views/mine/wareorder/listing/index.vue

@@ -0,0 +1,7 @@
+<template>
+    <app-view class="listing g-form">
+        <template #header>
+            <app-navbar title="挂牌" />
+        </template>
+    </app-view>
+</template>

+ 7 - 0
src/packages/mobile/views/mine/wareorder/pickup/index.vue

@@ -0,0 +1,7 @@
+<template>
+    <app-view class="pickup g-form">
+        <template #header>
+            <app-navbar title="提货" />
+        </template>
+    </app-view>
+</template>

+ 0 - 0
src/packages/mobile/views/mine/wareorder/wroutinapplydetail/index.less


+ 43 - 0
src/packages/mobile/views/mine/wareorder/wroutinapplydetail/index.vue

@@ -0,0 +1,43 @@
+<template>
+    <app-view class="wroutinapply-detail g-form">
+        <template #header>
+            <app-navbar title="提货详情" />
+        </template>
+        <div v-if="detail" class="wroutinapply-detail__container g-form__container">
+            <CellGroup title="提货信息">
+                <Cell title="商品" :value="detail.wrstandardname" />
+                <Cell title="仓库" :value="detail.warehousename" />
+                <Cell title="提货数量" :value="detail.qty" />
+                <Cell title="提货方式"  />
+                <Cell title="联系人"  />
+                <Cell title="联系方式"  />
+                <Cell title="目的地地址"  />
+                <Cell title="发票信息"  />
+                <Cell title="提货状态" />
+            </CellGroup>
+        </div>
+        <div v-else>
+            <Empty />
+        </div>
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+
+import { shallowRef } from 'vue'
+import { useNavigation } from '@/hooks/navigation'
+import { CellGroup, Cell, Empty } from 'vant'
+
+const { route } = useNavigation()
+const item = route.params.item
+const detail = shallowRef<Model.WrOutInApplyRsp>()
+
+if (item) {
+    detail.value = JSON.parse(item.toString())
+}
+
+</script>
+
+<style lang="less">
+@import './index.less';
+</style>

+ 14 - 0
src/services/api/order/index.ts

@@ -20,4 +20,18 @@ import { HttpParams } from '@/services/http/interface'
  */
  export function queryTHJPurchaseTradeDetail(params: HttpParams<{ req: Model.THJPurchaseTradeDetailReq, rsp: Model.THJPurchaseTradeDetailRsp[] }>) {
     return httpRequest('/Ferroalloy/QueryTHJPurchaseTradeDetail', 'get', params);
+}
+
+/**
+ * 查询仓单持有记录
+ */
+ export function queryHoldLB(params: HttpParams<{ req: Model.HoldLBReq, rsp: Model.HoldLBRsp[] }>) {
+    return httpRequest('/WrTrade2/QueryHoldLB', 'get', params);
+}
+
+/**
+ * 查询提货申请
+ */
+ export function queryWrOutInApply(params: HttpParams<{ req: Model.WrOutInApplyReq, rsp: Model.WrOutInApplyRsp[] }>) {
+    return httpRequest('/WrTrade2/QueryWrOutInApply', 'get', params);
 }

+ 8 - 1
src/services/api/trade/index.ts

@@ -33,6 +33,13 @@ export function spotPresaleBreachOfContractConfirm(params: TradeParams<Proto.Spo
 /**
  * 铁合金现货预售付款处理接口请求
  */
- export function spotPresalePlaymentReq(params: TradeParams<Proto.SpotPresalePlaymentReq, Proto.SpotPresalePlaymentRsp>) {
+ export function spotPresalePlayment(params: TradeParams<Proto.SpotPresalePlaymentReq, Proto.SpotPresalePlaymentRsp>) {
     return tradeServerRequest('SpotPresalePlaymentReq', 'SpotPresalePlaymentRsp', params);
+}
+
+/**
+ * 挂牌撤单请求
+ */
+ export function wrListingCancelOrder(params: TradeParams<Proto.WRListingCancelOrderReq, Proto.WRListingCancelOrderRsp>) {
+    return tradeServerRequest('WRListingCancelOrderReq', 'WRListingCancelOrderRsp', params);
 }

+ 151 - 0
src/types/model/order.d.ts

@@ -333,4 +333,155 @@ declare namespace Model {
         /// 采购成交单ID(321+Unix秒时间戳(10位)+xxxxxx)
         wrtradedetailid: number
     }
+
+    /* 查询仓单持有记录 请求*/
+    interface HoldLBReq {
+        /// 页码
+        page?: number
+        /// 每页条数
+        pagesize?: number
+        /// 资金账号
+        accountid: number
+        /// 仓库id
+        warehouseid?: number
+        /// 品种id
+        deliverygoodsid?: number
+        /// 品类id
+        wrstandardid?: number
+        /// 仓单要素id
+        wrfactortypeid?: number
+        /// 商品要素项名称模糊匹配, 逗号隔开, 如 产地1,品牌1,规格12mm
+        dgitemname?: string 
+    }
+
+    /* 查询仓单持有记录 响应*/
+    interface HoldLBRsp {
+        /// 持有人帐户ID
+        accountid: number
+        /// Banner图
+        bannerpicurl: string
+        /// 创建时间(过户时间)
+        createtime: string
+        /// 品种代码
+        deliverygoodscode: string
+        /// 品种ID
+        deliverygoodsid: number
+        /// 品种名称
+        deliverygoodsname: string
+        /// 可用数量
+        enableqty: number
+        /// 单位名称
+        enumdicname: string
+        /// 冻结数量
+        freezerqty: number
+        /// 提单ID(208+Unix秒时间戳(10位)+xxxxxx)
+        ladingbillid: string
+        /// 现货商品最小变动值
+        minivalue: number
+        /// 选择项比较串【{选择项ID}+{冒号}+选择项值 } ,逗号分隔,头尾加逗号】-- 所有选择项拼接,用于比较
+        optioncompare: string
+        /// 拆分父子单号
+        parentsubnum: number
+        /// 质押数量
+        pledgeqty: number
+        /// 数量
+        qty: number
+        /// 提单子单号
+        subnum: number
+        /// 缩略图
+        thumurls: string
+        /// 交易日(yyyyMMdd)
+        tradedate: string
+        /// 持有人ID
+        userid: number
+        /// 仓库ID
+        warehouseid: number
+        /// 仓库名称
+        warehousename: string
+        /// 仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)
+        wrfactortypeid: string
+        /// 仓单要素类型名称(选择项要素的名称合并显示,逗号分隔)
+        wrfactortypename: string
+        /// 仓单编号
+        wrholdeno: string
+        /// 仓单变更ID
+        wrid: string
+        /// 现货商品代码
+        wrstandardcode: string
+        /// 现货商品ID
+        wrstandardid: number
+        /// 商品名称
+        wrstandardname: string
+        /// 商品
+        wrtypename: string
+    }
+
+    /* 查询提货申请 请求*/
+    interface WrOutInApplyReq {
+        /// 页码
+        page?: number
+        /// 每页条数
+        pagesize?: number
+        /// 用户id
+        userid: number
+        /// 开始交易日(yyyymmdd)
+        begindate?: string
+        /// 结束交易日(yyyymmdd)
+        enddate?: string
+    }
+
+    /* 查询提货申请 响应*/
+    interface WrOutInApplyRsp {
+        /// 申请单id
+        applyid: string
+        /// 申请状态 - 0:预约成功 1:待初审 2:初审通过 3:初审拒绝 4:初审失败 5复审通过 6:复审拒绝 7:复审失败 8:已撤销
+        applystatus: number
+        /// 申请时间
+        applytime: string
+        /// 申请类型 - 1:预约入库 2:预约出库 3:入库注册 4:出库注销
+        applytype: number
+        /// Banner图
+        bannerpicurl: string
+        /// 开始交易日(yyyymmdd)
+        begindate: string
+        /// 品种代码
+        deliverygoodscode: string
+        /// 品种ID
+        deliverygoodsid: number
+        /// 品种名称
+        deliverygoodsname: string
+        /// 结束交易日(yyyymmdd)
+        enddate: string
+        /// 单位名称
+        enumdicname: string
+        /// 物流公司
+        expresscompany: string
+        /// 物流单号
+        expressnum: string
+        /// 现货商品最小变动值
+        minivalue: number
+        /// 选择项比较串【{选择项ID}+{冒号}+选择项值 } ,逗号分隔,头尾加逗号】-- 所有选择项拼接,用于比较
+        optioncompare: string
+        /// 数量
+        qty: number
+        /// 用户id
+        userid: number
+        /// 仓库ID
+        warehouseid: number
+        /// 仓库名称
+        warehousename: string
+        /// 仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)
+        wrfactortypeid: string
+        /// 仓单要素类型名称(选择项要素的名称合并显示,逗号分隔)
+        wrfactortypename: string
+        /// 现货商品代码
+        wrstandardcode: string
+        /// 现货商品ID
+        wrstandardid: number
+        /// 商品名称
+        wrstandardname: string
+        /// 商品
+        wrtypename: string
+    }
+
 }

+ 29 - 0
src/types/proto/trade.d.ts

@@ -1,4 +1,5 @@
 import { IMessageHead } from '@/services/socket/trade/protobuf/proto'
+import { number } from 'echarts';
 import Long from 'long'
 
 declare global {
@@ -107,5 +108,33 @@ declare global {
             WRTradeDetailID: number; // 采购成交单ID
             ClientSerialNo: string; // 客户端流水号
         }
+
+        // 挂牌撤单请求
+        interface   WRListingCancelOrderReq {
+            Header?: IMessageHead;
+            UserID?: number // 用户ID
+            AccountID?: number // 资金账号
+            OldWRTradeOrderID?: number // 目标仓单贸易委托单ID
+            OrderSrc?: number // 委托来源
+            ClientSerialNo?: string // 客户端流水号
+            ClientOrderTime?: string // 客户端委托时间
+            ClientType?: number // 终端类型
+            OperatorID?: number  // 操作员账号ID
+            BuyOrSell?: number  // 买卖方向
+            WRID?: number // 仓单ID,卖的时候填写
+}
+        // 挂牌撤单应答
+        interface  WRListingCancelOrderRsp {
+            Header?: IMessageHead;
+            RetCode: number; // 返回码
+            RetDesc: string; // 描述信息
+            WRTradeCancelID ?: number // 仓单贸易撤单号
+            OldWRTradeOrderID?: number // 目标仓单贸易委托单ID
+            UserID?: number // 用户ID
+            AccountID?: number // 资金账号
+            CancelQty?: number // 撤单数量
+            OrderTime?: string // 接受撤单的时间
+            ClientSerialNo?: string // 客户端流水号
+        }
     }
 }