li.shaoyi 4 lat temu
rodzic
commit
6a723604cd
78 zmienionych plików z 2599 dodań i 713 usunięć
  1. 1 1
      public/config/app.config.json
  2. 79 40
      public/proto/mtp.proto
  3. 118 3
      src/assets/styles/symbol_no_color/demo_index.html
  4. 23 3
      src/assets/styles/symbol_no_color/iconfont.css
  5. 0 0
      src/assets/styles/symbol_no_color/iconfont.js
  6. 35 0
      src/assets/styles/symbol_no_color/iconfont.json
  7. BIN
      src/assets/styles/symbol_no_color/iconfont.ttf
  8. BIN
      src/assets/styles/symbol_no_color/iconfont.woff
  9. BIN
      src/assets/styles/symbol_no_color/iconfont.woff2
  10. 1 0
      src/common/constants/enumRouterName.ts
  11. 131 0
      src/common/constants/enumsName.ts
  12. 52 68
      src/common/methods/request/resultInfo.ts
  13. 2 1
      src/common/setup/table/interface.ts
  14. 0 5
      src/common/setup/table/tableQuote.ts
  15. 1 3
      src/hooks/form/verify.ts
  16. 26 0
      src/hooks/system/index.ts
  17. 19 0
      src/router/index.ts
  18. 4 4
      src/services/bus/goods.ts
  19. 5 2
      src/services/bus/holdPosition.ts
  20. 2 2
      src/services/bus/user.ts
  21. 2 0
      src/services/funcode/index.ts
  22. 49 5
      src/services/go/ermcp/qhj/index.ts
  23. 163 0
      src/services/go/ermcp/qhj/interface.ts
  24. 5 0
      src/services/go/quote/interface.ts
  25. 1 0
      src/services/go/wrtrade/interface.ts
  26. 47 3
      src/services/socket/bank/index.ts
  27. 28 7
      src/services/socket/bank/interface/index.ts
  28. 220 0
      src/views/account-manager/account-manager-agency/account-manager-agency-sub/add.vue
  29. 63 0
      src/views/account-manager/account-manager-agency/account-manager-agency-sub/delete.vue
  30. 235 0
      src/views/account-manager/account-manager-agency/account-manager-agency-sub/index.vue
  31. 6 0
      src/views/account-manager/account-manager-agency/account-manager-agency-sub/interface.ts
  32. 217 0
      src/views/account-manager/account-manager-agency/account-manager-agency-sub/modiy.vue
  33. 52 0
      src/views/account-manager/account-manager-agency/account-manager-agency-sub/setup.ts
  34. 7 3
      src/views/market/spot_trade/components/buy-sell-market/components/delisting/setup.ts
  35. 7 3
      src/views/market/spot_trade/components/buy-sell-market/components/financing_delisting/setup.ts
  36. 108 79
      src/views/market/spot_trade/components/buy-sell-market/index.vue
  37. 1 1
      src/views/market/spot_trade/components/detail/index.vue
  38. 21 13
      src/views/market/spot_trade/components/post_buying/setup.ts
  39. 86 63
      src/views/market/spot_trade/spot_trade_order_transaction/components/buy-sell-market/index.vue
  40. 1 1
      src/views/market/spot_trade/spot_trade_order_transaction/components/detail/index.vue
  41. 2 2
      src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/components/buy-sell-market/index.vue
  42. 14 1
      src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/components/delisting/index.vue
  43. 1 1
      src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/components/detail/index.vue
  44. 6 5
      src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/components/post_buying/index.vue
  45. 1 1
      src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/components/sell/index.vue
  46. 9 0
      src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/components/setup.ts
  47. 2 2
      src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/index.vue
  48. 17 11
      src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/setup.ts
  49. 7 3
      src/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_blocs/components/delisting/setup.ts
  50. 7 3
      src/views/market/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_blocs/components/delisting/setup.ts
  51. 0 1
      src/views/order/commodity_contract/components/commodity_contract_bargain/components/commodity_contract_bargain_submit_order/index.vue
  52. 32 10
      src/views/order/commodity_contract/components/commodity_contract_summary/components/commodity_contract_summary_deal_closed/index.vue
  53. 1 21
      src/views/order/commodity_contract/components/commodity_contract_summary/components/commodity_contract_summary_deal_closed/setup.ts
  54. 53 22
      src/views/order/commodity_contract/components/commodity_contract_summary/components/commodity_contract_summary_order_closed/index.vue
  55. 1 24
      src/views/order/commodity_contract/components/commodity_contract_summary/components/commodity_contract_summary_order_closed/setup.ts
  56. 6 2
      src/views/order/commodity_contract/components/commodity_contract_summary/components/commodity_contract_summary_transfer/setup.ts
  57. 31 0
      src/views/order/commodity_contract/components/commodity_contract_summary/components/setup.ts
  58. 31 12
      src/views/order/commodity_contract/components/commodity_contract_summary/index.vue
  59. 16 0
      src/views/order/commodity_contract/components/commodity_contract_summary/setup.ts
  60. 133 0
      src/views/order/funding_information/components/funding_information_funding_summary/components/funding_information_funding_summary_recharge/index.vue
  61. 4 0
      src/views/order/funding_information/components/funding_information_funding_summary/components/funding_information_funding_summary_recharge/interface.ts
  62. 21 0
      src/views/order/funding_information/components/funding_information_funding_summary/components/funding_information_funding_summary_recharge/setup.ts
  63. 160 0
      src/views/order/funding_information/components/funding_information_funding_summary/components/funding_information_funding_summary_withdraw/index.vue
  64. 4 0
      src/views/order/funding_information/components/funding_information_funding_summary/components/funding_information_funding_summary_withdraw/interface.ts
  65. 21 0
      src/views/order/funding_information/components/funding_information_funding_summary/components/funding_information_funding_summary_withdraw/setup.ts
  66. 46 0
      src/views/order/funding_information/components/funding_information_funding_summary/components/setup.ts
  67. 45 3
      src/views/order/funding_information/components/funding_information_funding_summary/index.vue
  68. 6 8
      src/views/order/funding_information/components/funding_information_funding_summary/setup.ts
  69. 8 3
      src/views/order/pre_sale_warehouse_receipt/components/pre_sale_warehouse_receipt_bargain/index.vue
  70. 1 1
      src/views/order/pre_sale_warehouse_receipt/components/pre_sale_warehouse_receipt_pending_order/components/detail/index.vue
  71. 7 2
      src/views/order/spot_warran/components/spot_warrant_bargain/index.vue
  72. 1 1
      src/views/order/spot_warran/components/spot_warrant_pending_order/components/detail/index.vue
  73. 3 3
      src/views/search/search_document_records/search_pre_sale_warehouse_receipt/search_pre_sale_warehouse_receipt_commission_record/index.vue
  74. 3 3
      src/views/search/search_document_records/search_spot_warrant/search_spot_warrant_listing_record/index.vue
  75. 1 1
      src/views/search/search_financing_inquiry/search_financing_inquiry_apply_order/index.vue
  76. 64 49
      src/views/search/search_performance_template/search_performance_template_sub/index.vue
  77. 6 63
      swagger-to-ts/swagger.ts
  78. 10 145
      swagger-to-ts/swagger.txt

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

@@ -1,3 +1,3 @@
 {
     "apiUrl": "http://192.168.31.139:8080/cfg?key=test_139"
-}
+}

+ 79 - 40
public/proto/mtp.proto

@@ -565,46 +565,6 @@ message OrderCanceledNtf {
 		optional uint64 CancelQty = 6; // uint64 撤销数量
 		optional uint32 OrderStatus = 7; // uint32 单据状态
 }
-// 出金请求
-message t2bBankWithdrawReq {
-	optional MessageHead Header = 1;
-		required uint64 ExtOperatorID = 2; // 外部操作流水号
-		optional string ExchId = 3; // 交易所编号
-		required string AccountCode = 4; // 资金账户
-		required string CusBankID = 5; // 托管银行编号
-		required string Currency = 6; // 币种
-		optional int32 AccountType = 7; // 账户类型
-		optional string BankChildAccount = 8; // 银行子账号
-		optional string BankChildAccountName = 9; // 银行子账号名
-		optional string OpenCardBankId = 10; // 银行卡行号
-		optional string BankAccoutNum = 11; // 银行卡号
-		optional string BankAccoutName = 12; // 银行卡户名
-		required double Amount = 13; // 出金金额
-		optional string AppDateTime = 14; // 申请日期和时间
-		optional string OldTaPWD = 15; // 资金密码
-		optional string Desc = 16; // 备注
-		optional string IdentifyCode = 17; // 验证码
-		optional string BranchBankName = 18; // 收款支行名称
-		optional string extend_info = 19; // 扩展信息(JSON串,参考配置要求进行填充)
-		optional string Remark = 20; // 备注
-		optional string ExchTicket = 21; // 交易所流水号
-}
-// 出金应答
-message t2bBankWithdrawRsp {
-	optional MessageHead Header = 1; // 消息头
-	optional int32 RetCode = 2; // 返回码
-	optional string RetDesc = 3; // 描述信息
-		optional uint64 ExtOperatorID = 4; // 外部操作流水号
-		optional int32 Status = 5; // 状态(0成功,其他数值参考银行服务的错误码)
-		required string ExchTicket = 6; // 交易所流水号
-		optional string ExchId = 7; // 交易所编号
-		optional string TradeDate = 8; // 交易日
-		optional string CenterTicket = 9; // 中心流水号
-		optional string CenterErrCode = 10; // 中心返回码
-		optional string CenterErrMsg = 11; // 中心返回结果说明
-		optional string CerterCheckDate = 12; // 中心对账日期
-		optional string NetAddr = 13; // 网络地址(当这里有网址时,应自动跳转网页)
-}
 
 // 签约请求
 message t2bBankSignReq {
@@ -2046,4 +2006,83 @@ message HolderCloseRsp {
         optional string RetDesc = 3; // string 描述信息
         optional uint64 OrderID = 4; // uint64 一级生成的订单号
         optional string OrderTime = 5; // string 接收委托交易的时间
+}
+
+// 出金请求 0 9 13
+message t2bBankWithdrawReq {
+	optional MessageHead Header = 1; // MessageHead
+	required uint64 ExtOperatorID = 2; // uint64 外部操作流水号
+	optional string ExchId = 3; // string 交易所编号
+	required string AccountCode = 4; // string 资金账户
+	required string CusBankID = 5; // string 托管银行编号
+	required string Currency = 6; // string 币种
+	optional int32 AccountType = 7; // int32 账户类型
+	optional string BankChildAccount = 8; // string 银行子账号
+	optional string BankChildAccountName = 9; // string 银行子账号名
+	optional string OpenCardBankId = 10; // string 银行卡行号
+	optional string BankAccoutNum = 11; // string 银行卡号
+	optional string BankAccoutName = 12; // string 银行卡户名
+	required double Amount = 13; // double 出金金额
+	optional string AppDateTime = 14; // string 申请日期和时间
+	optional string OldTaPWD = 15; // string 资金密码
+	optional string Desc = 16; // string 备注
+	optional string IdentifyCode = 17; // string 验证码
+	optional string BranchBankName = 18; // string 收款支行名称
+	optional string extend_info = 19; // string 扩展信息(JSON串, 参考配置要求进行填充)
+	optional string Remark = 20; // string 备注
+	optional string ExchTicket = 21; // string 交易所流水号
+}
+// 出金应答 0 9 14
+message t2bBankWithdrawRsp {
+	optional MessageHead Header = 1; // MessageHead 消息头
+	optional int32 RetCode = 2; // int32 返回码
+	optional string RetDesc = 3; // string 描述信息
+	optional uint64 ExtOperatorID = 4; // uint64 外部操作流水号
+	optional int32 Status = 5; // int32 状态(0 成功, 其他数值参考银行服务的错误码)
+	required string ExchTicket = 6; // string 交易所流水号
+	optional string ExchId = 7; // string 交易所编号
+	optional string TradeDate = 8; // string 交易日
+	optional string CenterTicket = 9; // string 中心流水号
+	optional string CenterErrCode = 10; // string 中心返回码
+	optional string CenterErrMsg = 11; // string 中心返回结果说明
+	optional string CerterCheckDate = 12; // string 中心对账日期
+	optional string NetAddr = 13; // string 网络地址(当这里有网址时,应自动跳转网页)
+}
+
+// 入金请求 0 9 19
+message t2bBankDepositReq {
+	optional MessageHead Header = 1; // MessageHead
+	required uint64 ExtOperatorID = 2; // uint64 外部操作流水号
+	required string CusBankID = 3; // string 托管银行编号
+	optional string ExchId = 4; // string 交易所编号
+	optional string TradeDate = 5; // string 交易日
+	optional string ExchTicket = 6; // string 交易所流水号
+	required string AccountCode = 7; // string 资金账户
+	optional string BusinessNo = 8; // string 银行业务编号
+	optional string BankChildAccount = 9; // string 银行子账号
+	optional string BankChildAccountName = 10; // string 银行子账号名
+	optional string OldTaPWD = 11; // string 资金密码
+	required double Amount = 12; // double 金额
+	required string Currency = 13; // string 币种
+	optional string Remark = 14; // string 备注
+	optional string OpenCardBankId = 15; // string 银行卡行号
+	optional string BankAccoutNum = 16; // string 银行卡号
+	optional string BankAccoutName = 17; // string 银行卡户名
+	optional string extend_info = 18; // string 扩展信息(JSON串, 参考配置要求进行填充)
+}
+// 入金应答 0 9 20
+message t2bBankDepositRsp {
+	optional MessageHead Header = 1; // MessageHead 消息头
+	optional int32 RetCode = 2; // int32 返回码
+	optional string RetDesc = 3; // string 描述信息
+	optional uint64 ExtOperatorID = 4; // uint64 外部操作流水号
+	optional int32 Status = 5; // int32 状态(0 成功, 其他数值参考银行服务的错误码)
+	required string ExchTicket = 6; // string 交易所流水号
+	optional string ExchId = 7; // string 交易所编号
+	optional string TradeDate = 8; // string 交易日
+	optional string CenterTicket = 9; // string 中心流水号
+	optional string CenterErrCode = 10; // string 中心返回码
+	optional string CenterErrMsg = 11; // string 中心返回结果说明
+	optional string CerterCheckDate = 12; // string 中心对账日期
+	optional string NetAddr = 13; // string 网络地址(当这里有网址时,应自动跳转网页)
 }

+ 118 - 3
src/assets/styles/symbol_no_color/demo_index.html

@@ -55,6 +55,36 @@
           <ul class="icon_lists dib-box">
           
             <li class="dib">
+              <span class="icon iconfont">&#xe630;</span>
+                <div class="name">叉叉</div>
+                <div class="code-name">&amp;#xe630;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe610;</span>
+                <div class="name">新增分配表</div>
+                <div class="code-name">&amp;#xe610;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe634;</span>
+                <div class="name">搜索</div>
+                <div class="code-name">&amp;#xe634;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe616;</span>
+                <div class="name">删除</div>
+                <div class="code-name">&amp;#xe616;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe60c;</span>
+                <div class="name">添加银行卡</div>
+                <div class="code-name">&amp;#xe60c;</div>
+              </li>
+          
+            <li class="dib">
               <span class="icon iconfont">&#xe70a;</span>
                 <div class="name">切换</div>
                 <div class="code-name">&amp;#xe70a;</div>
@@ -378,9 +408,9 @@
 <pre><code class="language-css"
 >@font-face {
   font-family: 'iconfont';
-  src: url('iconfont.woff2?t=1632896613541') format('woff2'),
-       url('iconfont.woff?t=1632896613541') format('woff'),
-       url('iconfont.ttf?t=1632896613541') format('truetype');
+  src: url('iconfont.woff2?t=1634797892146') format('woff2'),
+       url('iconfont.woff?t=1634797892146') format('woff'),
+       url('iconfont.ttf?t=1634797892146') format('truetype');
 }
 </code></pre>
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -407,6 +437,51 @@
         <ul class="icon_lists dib-box">
           
           <li class="dib">
+            <span class="icon iconfont icon-chacha"></span>
+            <div class="name">
+              叉叉
+            </div>
+            <div class="code-name">.icon-chacha
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-xinzeng"></span>
+            <div class="name">
+              新增分配表
+            </div>
+            <div class="code-name">.icon-xinzeng
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-sousuo"></span>
+            <div class="name">
+              搜索
+            </div>
+            <div class="code-name">.icon-sousuo
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shanchu1"></span>
+            <div class="name">
+              删除
+            </div>
+            <div class="code-name">.icon-shanchu1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-tianjiayinhangka"></span>
+            <div class="name">
+              添加银行卡
+            </div>
+            <div class="code-name">.icon-tianjiayinhangka
+            </div>
+          </li>
+          
+          <li class="dib">
             <span class="icon iconfont icon-B"></span>
             <div class="name">
               切换
@@ -894,6 +969,46 @@
           
             <li class="dib">
                 <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-chacha"></use>
+                </svg>
+                <div class="name">叉叉</div>
+                <div class="code-name">#icon-chacha</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-xinzeng"></use>
+                </svg>
+                <div class="name">新增分配表</div>
+                <div class="code-name">#icon-xinzeng</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-sousuo"></use>
+                </svg>
+                <div class="name">搜索</div>
+                <div class="code-name">#icon-sousuo</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shanchu1"></use>
+                </svg>
+                <div class="name">删除</div>
+                <div class="code-name">#icon-shanchu1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-tianjiayinhangka"></use>
+                </svg>
+                <div class="name">添加银行卡</div>
+                <div class="code-name">#icon-tianjiayinhangka</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
                   <use xlink:href="#icon-B"></use>
                 </svg>
                 <div class="name">切换</div>

+ 23 - 3
src/assets/styles/symbol_no_color/iconfont.css

@@ -1,8 +1,8 @@
 @font-face {
   font-family: "iconfont"; /* Project id 2293216 */
-  src: url('iconfont.woff2?t=1632896613541') format('woff2'),
-       url('iconfont.woff?t=1632896613541') format('woff'),
-       url('iconfont.ttf?t=1632896613541') format('truetype');
+  src: url('iconfont.woff2?t=1634797892146') format('woff2'),
+       url('iconfont.woff?t=1634797892146') format('woff'),
+       url('iconfont.ttf?t=1634797892146') format('truetype');
 }
 
 .iconfont {
@@ -13,6 +13,26 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.icon-chacha:before {
+  content: "\e630";
+}
+
+.icon-xinzeng:before {
+  content: "\e610";
+}
+
+.icon-sousuo:before {
+  content: "\e634";
+}
+
+.icon-shanchu1:before {
+  content: "\e616";
+}
+
+.icon-tianjiayinhangka:before {
+  content: "\e60c";
+}
+
 .icon-B:before {
   content: "\e70a";
 }

Plik diff jest za duży
+ 0 - 0
src/assets/styles/symbol_no_color/iconfont.js


+ 35 - 0
src/assets/styles/symbol_no_color/iconfont.json

@@ -6,6 +6,41 @@
   "description": "",
   "glyphs": [
     {
+      "icon_id": "2583881",
+      "name": "叉叉",
+      "font_class": "chacha",
+      "unicode": "e630",
+      "unicode_decimal": 58928
+    },
+    {
+      "icon_id": "5790730",
+      "name": "新增分配表",
+      "font_class": "xinzeng",
+      "unicode": "e610",
+      "unicode_decimal": 58896
+    },
+    {
+      "icon_id": "6966946",
+      "name": "搜索",
+      "font_class": "sousuo",
+      "unicode": "e634",
+      "unicode_decimal": 58932
+    },
+    {
+      "icon_id": "8653551",
+      "name": "删除",
+      "font_class": "shanchu1",
+      "unicode": "e616",
+      "unicode_decimal": 58902
+    },
+    {
+      "icon_id": "12900730",
+      "name": "添加银行卡",
+      "font_class": "tianjiayinhangka",
+      "unicode": "e60c",
+      "unicode_decimal": 58892
+    },
+    {
       "icon_id": "13479212",
       "name": "切换",
       "font_class": "B",

BIN
src/assets/styles/symbol_no_color/iconfont.ttf


BIN
src/assets/styles/symbol_no_color/iconfont.woff


BIN
src/assets/styles/symbol_no_color/iconfont.woff2


+ 1 - 0
src/common/constants/enumRouterName.ts

@@ -326,4 +326,5 @@ export enum EnumRouterName {
 	warehouse_receipt_trade_blocs = 'warehouse_receipt_trade_blocs', //  仓单贸易 贸易圈挂牌
 	warehouse_pre_sale_blocs = 'warehouse_pre_sale_blocs', //  仓单预售 贸易圈挂牌
 	search_performance_template_sub = 'search_performance_template_sub', //  履约模板
+	account_manager_agency_sub = 'account-manager-agency-sub'
 }

+ 131 - 0
src/common/constants/enumsName.ts

@@ -1337,4 +1337,135 @@ export function getTaacountStatus(status: number) {
             break
     }
     return result
+}
+
+/**
+ * 签约状态
+ * @param signstatus
+ */
+export function getSignStatus(signstatus: number) {
+    let result = '--'
+    switch (signstatus) {
+        case 1:
+            result = '未签约'
+            break
+        case 2:
+            result = '签约待审核'
+            break
+        case 3:
+            result = '签约中'
+            break
+        case 4:
+            result = '已签约'
+            break
+        case 5:
+            result = '解约待审核'
+            break
+        case 6:
+            result = '解约中'
+            break
+        case 7:
+            result = '解约'
+            break
+        case 8:
+            result = '已解绑'
+            break
+        case 9:
+            result = '绑卡中'
+            break
+        case 10:
+            result = '审核拒绝'
+            break
+        case 11:
+            result = '换签待审核'
+            break
+    }
+    return result
+}
+
+/**
+ * 出入金申请状态
+ * @param applystatus
+ * @returns
+ */
+export function getAccountInOutApplyStatus(applystatus: number) {
+    let result = '--'
+    switch (applystatus) {
+        case 1:
+            result = '待审核'
+            break
+        case 2:
+            result = '待复审 '
+            break
+        case 3:
+            result = '签约中'
+            break
+        case 4:
+            result = '已签约'
+            break
+        case 5:
+            result = '交易解冻中'
+            break
+        case 6:
+            result = '交易解冻扣款中'
+            break
+        case 7:
+            result = '交易入金中'
+            break
+        case 8:
+            result = '交易冻结/解冻/扣款中'
+            break
+        case 9:
+            result = '银行出金中 '
+            break
+        case 10:
+            result = '银行入金中'
+            break
+        case 11:
+            result = '成功'
+            break
+        case 12:
+            result = '失败'
+            break
+        case 13:
+            result = '银行审核中'
+            break
+        case 14:
+            result = '账户服务入金失败'
+            break
+        case 15:
+            result = '账户服务解冻失败'
+            break
+        case 16:
+            result = '账户服务解冻扣款失败'
+            break
+        case 17:
+            result = '账户服务出金失败 '
+            break
+        case 18:
+            result = '复审通过 '
+            break
+        case 19:
+            result = '复审拒绝 '
+            break
+        case 20:
+            result = '提交审核,账户冻结中 '
+            break
+        case 21:
+            result = '审核拒绝,账户解冻中 '
+            break
+        case 22:
+            result = '待审核,账户服务解冻回滚中 '
+            break
+        case 23:
+            result = '待复审,账户服务解冻回滚中 '
+            break
+        case 24:
+            result = '审核通过,账户冻结金额检查中'
+            break
+        case 25:
+            result = '复审通过,账户冻结金额检查中'
+            break
+    }
+    return result
 }

+ 52 - 68
src/common/methods/request/resultInfo.ts

@@ -36,70 +36,6 @@ export function commonResultInfo(fn: Promise<any>, sign: ResultInfo, loading: Re
         })
 }
 
-/**
- * 控制 请求接口 打开与关闭loading
- * @param fn 请求接口 函数
- * @param param 请求接口 参数
- * @param loading
- * @returns
- */
-export async function controlLoading(fn: Function, loading: Ref<boolean>, param?: any,): Promise<any> {
-    console.log('请求接口参数: ', param);
-    loading.value = true;
-    try {
-        const result = await param ? fn(param) : fn()
-        loading.value = false;
-        return result;
-    } catch (err) {
-        loading.value = false;
-        Promise.resolve(err)
-    }
-}
-
-/**
- * 控制服务请求成功和失败的弹窗提示
- * @param fn 请求接口 函数
- * @param msgInfo [成功结果, 失败结果]
- * @returns
- */
-export function controlResultInfo(fn: Promise<any>, msgInfo: [string, string] = ['成功', '失败']) {
-    const [sucInfo, errInfo] = msgInfo
-    return fn.then(res => {
-        message.success(sucInfo)
-        return res;
-    }).catch(err => {
-        console.warn(`${fn}调用失败: ${err}`);
-        const result = errInfo + err
-        message.error(result)
-        Promise.reject(result)
-    })
-}
-
-/**
- * 用户查询数据,成功返回数据,失败提示
- * @param fn
- * @returns
- */
-export function controlResultErrInfo(fn: Promise<any>) {
-    return fn.then(res => {
-        let result = res
-        if (Array.isArray(res)) {
-            // 列表数据需要一个key,要不然会报错,统一处理
-            result = res.map((e: any, i: number) => {
-                if (e.hasOwnProperty('key')) {
-                    return e
-                } else {
-                    return { ...e, key: String(i) };
-                }
-            })
-        }
-        console.log('查询数据成功:', result)
-        return result
-    }).catch(err => {
-        console.error('查询数据失败:', err)
-        message.error(err.message)
-    })
-}
 
 /**
  * 处理服务请求时候的loading和 成功和失败提示
@@ -109,8 +45,32 @@ export function controlResultErrInfo(fn: Promise<any>) {
  * @param messageInfo
  * @returns
  */
-export function requestResultLoadingAndInfo(fn: Function, param: any, loading: Ref<boolean>, messageInfo: [string, string] = ['成功', '失败']) {
-    return controlResultInfo(controlLoading(fn, loading, param), messageInfo)
+export async function requestResultLoadingAndInfo(fn: any, param: any, loading: Ref<boolean>, messageInfo: [string, string] = ['成功', '失败'], isDefaultMsg = false) {
+    console.log('请求接口参数: ', param);
+    const [sucInfo, errInfo] = messageInfo
+    loading.value = true;
+    return new Promise((resolve, reject) => {
+        const tempFN = param ? fn(param) : fn()
+        tempFN.then((res: any) => {
+            // 处理同一个请求,根据不同场景提现不同消息
+            const msg = isDefaultMsg ? res : sucInfo
+            message.success(msg)
+            loading.value = false;
+            resolve(res);
+        }).catch((err: string) => {
+            loading.value = false;
+            const msg = '您的申请已提交,请稍后查询结果!'
+            if (err === msg) {
+                message.success(msg)
+                resolve('ok');
+            } else {
+                console.warn(`${fn}调用失败: ${err}`);
+                const temp = errInfo + err
+                message.error(temp)
+                reject(temp)
+            }
+        })
+    })
 }
 
 /**
@@ -120,7 +80,31 @@ export function requestResultLoadingAndInfo(fn: Function, param: any, loading: R
  * @param param
  * @returns
  */
-export function queryResultLoadingAndInfo(fn: Function, loading: Ref<boolean>, param?: any) {
-    return controlResultErrInfo(controlLoading(fn, loading, param))
+export async function queryResultLoadingAndInfo(fn: Function, loading: Ref<boolean>, param?: any): Promise<any[]> {
+    loading.value = true;
+    return new Promise((resolve, reject) => {
+        const tempFN = param ? fn(param) : fn()
+        tempFN.then((res: any) => {
+            let result = res
+            if (Array.isArray(res)) {
+                // 列表数据需要一个key,要不然会报错,统一处理
+                result = res.map((e: any, i: number) => {
+                    if (e.hasOwnProperty('key')) {
+                        return e
+                    } else {
+                        return { ...e, key: String(i) };
+                    }
+                })
+            }
+            console.log('查询数据成功:', result)
+            loading.value = false;
+            resolve(result as any[]);
+        }).catch((err: { message: string }) => {
+            loading.value = false;
+            console.error('查询数据失败:', err)
+            message.error(err.message)
+            reject(err)
+        })
+    })
 }
 

+ 2 - 1
src/common/setup/table/interface.ts

@@ -34,7 +34,8 @@ export interface ComposeTableDetailParam {
     queryFn: Function,  // 查询表格数据
     tableName?: keyof TableKey, // 表头key
     tableFilterKey: string[], // 表格过滤字段
-    menuType: EnumRouterName
+    menuType: EnumRouterName,
+    visible?: boolean, // 是否默认展开
 }
 
 export interface TableParam {

+ 0 - 5
src/common/setup/table/tableQuote.ts

@@ -166,9 +166,4 @@ export function quoteAmplituOfVibration(record: QueryQuoteDayRsp, decimalplace =
         }
     }
     return result
-}
-
-// 处理行情数值显示
-export function quoteValue(value: number) {
-    return value || '--';
 }

+ 1 - 3
src/hooks/form/verify.ts

@@ -1,6 +1,6 @@
-import { RuleObject } from "ant-design-vue/lib/form/interface";
 import { getGoodsById, getQuoteDayInfoByCode } from '@/services/bus/goods';
 import { getRules } from '@/services/bus/rules';
+import { RuleObject } from "ant-design-vue/lib/form/interface";
 
 // 验证 挂牌数量
 /**
@@ -65,8 +65,6 @@ export const useVerifyListingBasis = <T, k extends keyof T>(formState: T, key: k
                     return Promise.resolve();
                 }
                 return Promise.reject('商品合约不存在');
-            } else {
-                return Promise.reject('请输入基差');
             }
         } else {
             return Promise.reject('请选择商品合约');

+ 26 - 0
src/hooks/system/index.ts

@@ -0,0 +1,26 @@
+import APP from '@/services';
+import { Systemparam } from '@/services/go/useInfo/interface';
+
+// 获取全部系统配置
+export const getAllSystemParam = (): Systemparam[] => {
+    return APP.getRef('systemParams').value
+}
+
+// 通过 code 获取系统配置
+export const getSystemParamByCode = (paramcode: string): Systemparam | undefined => {
+    return getAllSystemParam().find(e => e.paramcode === paramcode)
+}
+// 通过 code 获取系统配置对应的值
+export const getSystemParamValueByCode = (paramcode: string) => {
+    return getSystemParamByCode(paramcode)?.paramvalue
+}
+
+/**
+ * 通过 code 查找 系统配置是否存在 value 值
+ * @param paramcode
+ * @param value
+ * @returns
+ */
+export const hasSystemParam = (paramcode: string, value: string) => {
+    return getSystemParamByCode(paramcode)?.paramvalue === value
+}

+ 19 - 0
src/router/index.ts

@@ -630,6 +630,25 @@ const routes: Array<RouteRecordRaw> = [
                 ]
             },
             {
+                path: '/account-manager-agency',
+                name: 'account-manager-agency',
+                component: Main,
+                meta: {
+                    requireAuth: true,
+                },
+                redirect: { name: 'account-manager-agency-sub' },
+                children: [
+                    {
+                        path: '/account-manager-agency/account-manager-agency-sub',
+                        name: 'account-manager-agency-sub',
+                        component: () => import('@/views/account-manager/account-manager-agency/account-manager-agency-sub/index.vue'),
+                        meta: {
+                            requireAuth: true,
+                        },
+                    },
+                ]
+            },
+            {
                 path: '/finance_report',
                 name: 'finance_report',
                 component: Main,

+ 4 - 4
src/services/bus/goods.ts

@@ -3,7 +3,7 @@ import { initData } from '@/common/methods';
 import APP from '@/services';
 import { Ref, ref } from 'vue';
 import { Goods } from '../go/ermcp/goodsInfo/interface';
-import { QueryQuoteDayRsp } from '../go/quote/interface';
+import { QueryQuoteDay, QueryQuoteDayRsp } from '../go/quote/interface';
 import { Goodsgroup, Market } from '../go/useInfo/interface';
 import { getMarketByTradeMode } from './market';
 
@@ -32,7 +32,7 @@ export function getGoodsListByTrade(trademode: TradeMode): Ref<Goods[]> {
 
 // 通过trademode 获取行情,并获取goodsname
 export function getQutoGoodsByTradeMode(trademode: TradeMode) {
-    const result = ref<QueryQuoteDayRsp[]>([])
+    const result = ref<QueryQuoteDay[]>([])
     initData(() => {
         // 获取市场信息
         const marketInfo = getMarketByTradeMode(trademode)
@@ -44,8 +44,8 @@ export function getQutoGoodsByTradeMode(trademode: TradeMode) {
                 // 找到行情数据
                 const quote = getQuoteDayInfoByCode(el.goodscode);
                 if (quote) {
-                    Object.assign(quote, { goodsname: el.goodsname, goodsid: el.goodsid })
-                    result.value.push(quote)
+                    const obj = { ...quote, goodsname: el.goodsname, goodsid: el.goodsid }
+                    result.value.push(obj)
                 }
                 console.log('result', result)
             })

+ 5 - 2
src/services/bus/holdPosition.ts

@@ -1,3 +1,4 @@
+import { BuyOrSell } from "@/common/constants/enumCommon";
 import { QueryTradePositionRsp } from "../go/ermcp/order/interface";
 import { getQuoteDayInfoByCodeFindPrice } from "./goods";
 
@@ -10,8 +11,10 @@ export const useProfitloss = (record: QueryTradePositionRsp) => {
     // 最新价
     const lastPrice = getQuoteDayInfoByCodeFindPrice(record.goodscode);
     if (lastPrice !== '--') {
-        const { averageprice, decimalplace, agreeunit, curpositionqty } = record;
-        return ((+lastPrice - averageprice) * curpositionqty * agreeunit).toFixed(decimalplace);
+        const { averageprice, decimalplace, agreeunit, curpositionqty, buyorsell } = record;
+        const temp = buyorsell === BuyOrSell.buy ? 1 : -1
+        const result = ((+lastPrice - averageprice) * curpositionqty * agreeunit * temp).toFixed(2);
+        return result === '-0' ? '0' : result
     } else {
         return lastPrice;
     }

+ 2 - 2
src/services/bus/user.ts

@@ -1,5 +1,5 @@
 import APP from '@/services';
-import { Arearole, Ermcp3RootUserAccount } from '../go/useInfo/interface';
+import { Arearole, Ermcp3RootUserAccount, Userinfo } from '../go/useInfo/interface';
 
 /**
  * 获取用户账户类型
@@ -12,7 +12,7 @@ export function getUserAccountType(): number {
 /**
  * 获取用户
  */
-export function getUserInfo() {
+export function getUserInfo(): Userinfo {
     return APP.get('userInfo')
 }
 

+ 2 - 0
src/services/funcode/index.ts

@@ -44,6 +44,8 @@ export const funCode: Code = {
     UserReceiveIsDefaultRsp: 1900571, // 设置默认收货地址响应
     t2bBankWithdrawReq: 589837, // 出金请求
     t2bBankWithdrawRsp: 589838, // 出金应答
+    t2bBankDepositReq: 589843, // 入金请求
+    t2bBankDepositRsp: 589844, //入金应答
     t2bBankSignReq: 589825, // 签约请求
     t2bBankSignRsp: 589826, // 签约应答
     t2bBankCancelSignReq: 589827, // 解约请求

+ 49 - 5
src/services/go/ermcp/qhj/index.ts

@@ -1,5 +1,5 @@
 /** ================================= 前海金相关接口 ================================**/
-import { getSelectedAccountId } from "@/services/bus/account";
+import { getSelectedAccountId, getUserId } from "@/services/bus/account";
 import { getUsrId } from "@/services/bus/user";
 import { commonSearch_go } from "@/services/go";
 import {
@@ -20,9 +20,10 @@ import {
     QhjRStrategy,
     QhjRSTriggerLog,
     QhjTradeGoodsPickup,
-    QueryAccountInOutApplyReq, QueryAgreementChangeLogReq, QueryAgreementConfigReq,
+    QueryAccountInOutApplyReq, QueryAccountInOutApplyRsp, QueryAccountInOutApplyRsq, QueryAgreementChangeLogReq, QueryAgreementConfigReq,
+    QueryBankAccountSignQsp,
     QueryContractLogReq,
-    QueryContractLogRsp, QueryCustomerSignStatusReq,
+    QueryContractLogRsp, QueryCusBankSignBankRsp, QueryCustomerSignStatusReq,
 
 
     QueryPayOrderReq,
@@ -31,7 +32,8 @@ import {
     QueryTradeDetailReq,
     QueryTradeOrderDetailReq,
     QueryTradePayOrderReq,
-    QueryTradePositionReq
+    QueryTradePositionReq,
+    QueryBankInfoRsp
 } from "@/services/go/ermcp/qhj/interface";
 
 /**
@@ -277,4 +279,46 @@ export function queryCustomerSignStatus(req: QueryCustomerSignStatusReq): Promis
     return commonSearch_go('/QhjSys/QueryCustomerSignStatus', req).catch((err) => {
         throw new Error(`查询客户协议签约状态: ${err}`);
     });
-}
+}
+
+/**
+ * 查询签约银行信息(提现账户管理) /Qhj/QueryBankAccountSign
+ */
+export function queryBankAccountSign(): Promise<QueryBankAccountSignQsp[]> {
+    const param = { userid: getUserId() }
+    return commonSearch_go('/Qhj/QueryBankAccountSign', param).catch((err) => {
+        throw new Error(`查询签约银行信息: ${err}`);
+    });
+}
+
+/**
+ * 查询充值提现 /Qhj/QueryAccountInOutApply
+ */
+export function QueryAccountInOutApply(param: QueryAccountInOutApplyRsq): Promise<QueryAccountInOutApplyRsp[]> {
+    if (!param.userid) {
+        param.userid = getUserId()
+    }
+    return commonSearch_go('/Qhj/QueryAccountInOutApply', param).catch((err) => {
+        throw new Error(`查询充值提现: ${err}`);
+    });
+}
+
+
+/**
+ * 查询托管银行/Qhj/QueryCusBankSignBank
+ */
+export function QueryCusBankSignBank(): Promise<QueryCusBankSignBankRsp[]> {
+    return commonSearch_go('/Qhj/QueryCusBankSignBank', {}).catch((err) => {
+        throw new Error(`查询托管银行: ${err}`);
+    });
+}
+
+/**
+ * 查询开户行/Qhj/QueryBankInfo
+ */
+export function QueryBankInfo(): Promise<QueryBankInfoRsp[]> {
+    return commonSearch_go('/Qhj/QueryBankInfo', {}).catch((err) => {
+        throw new Error(`查询开户行: ${err}`);
+    });
+}
+

+ 163 - 0
src/services/go/ermcp/qhj/interface.ts

@@ -805,3 +805,166 @@ export interface QhjCustomerSignStatus {
     username: string;//客户名称
 }
 
+export interface QueryBankAccountSignQsp {
+    accountcode: string;//资金账号
+    accountname: string;//资金账号对应的账号名(UserName)
+    accountname2: string;//资金账号对应的账号名(UserName) - 密文
+    accounttype: number;//账户类型(UserType)
+    applicationtime: string;//最后一次更新的时间
+    applyexchticket: string;//申请流水
+    auditid: number;//审核人
+    audittime: string;//审核时间
+    bankaccountname: string;//签约银行卡账号名
+    bankaccountname2: string;//签约银行卡账号名 - 密文
+    bankaccountno: string;//银行卡号
+    bankaccountno2: string;//银行卡号 - 密文
+    bankaccounttype: number;//银行账户类型 - 1-对私; 2-对公
+    bankcardtype: number;//银行卡类型
+    bankchildaccount: string;//银行子账号(签约成功后,很多银行会返回对应的这个虚拟账号)
+    bankcity: string;//开户行城市
+    bankid: string;//签约银行ID
+    bankname: string;//签约银行名称
+    bankprovince: string;//开户行省份
+    branchbankid: string;//签约银行支行号
+    branchbankname: string;//签约银行支行名称
+    cardno: string;//证件号码
+    cardno2: string;//证件号码 - 密文
+    cardtype: string;//证件类型
+    currency: string;//币种
+    cusbankid: string;//托管银行编号
+    direct: number;//方向(可以判断那方先发起的签约)
+    exchticket: string;//最后一次签约成功的流水号
+    extendinfo: string;//扩展信息(JSON字符串)
+    mobilephone: string;//手机号
+    mobilephone2: string;//手机号 - 密文
+    netaddr: string;//调转网址
+    relateduserid: number;//关联使用者userid
+    signstatus: number;//签约状态 - 1:未签约 2:签约待审核 3:签约中 4:已签约 5:解约待审核 6:解约中 7:已解约 8:已解绑 9:绑卡中 1number;
+    //:审核拒绝 11:换签待审核
+    updatetime: string;//更新时间(签解约更新时间)
+}
+
+export interface QueryAccountInOutApplyRsq {
+    userid?: number;
+    likename?: string //  名称(模糊搜索账户)
+    begindate?: string //  开始交易日(yyyymmdd)
+    enddate?: string   //  结束交易日(yyyymmdd)
+}
+
+export interface QueryAccountInOutApplyRsp {
+    accountcode: string;//资金账号
+    accountname: string;//用户名称(名称)
+    accountpwd: string;//资金密码
+    accountticket: string;//最新账户服务流水号
+    amount: number;//金额
+    applyremark: string;//申请备注
+    applystatus: number;//申请状态 - 1:待审核 2:待复审 3:初审拒绝 4:交易冻结中 5:交易解冻中 6:交易解冻扣款中 7:交易入金中 8:交易冻结/解冻/扣款中(银行发起出金时用) 9:银行出金中 1number;
+    //:银行入金中 11:成功 12:失败 13:银行审核中 14:账户服务入金失败; 15:账户服务解冻失败; 16:账户服务解冻扣款失败; 17:账户服务出金失败 18:复审通过 19:复审拒绝 2number;
+    //:提交审核,账户冻结中 21:审核拒绝,账户解冻中;22: 待审核,账户服务解冻回滚中; 23:待复审,账户服务解冻回滚中; 24: 审核通过,账户冻结金额检查中;25: 复审通过,账户冻结金额检查中;
+    auditid: number;//审核人
+    audittime: string;//审核时间
+    bank_apply_ticket: string;//银行申请流水
+    bankaccountname: string;//银行账户名
+    bankaccountno: string;//银行卡号
+    bankid: string;//银行编号
+    bankticket: string;//银行流水
+    branchbankid: string;//银行支行号
+    branchbankname: string;//银行支行名称
+    capamountout: number;//出金(劣后本金) - 外部子账户
+    certificatephotourl: string;//凭证地址
+    charge: number;//手续费
+    checkerrorflag: number;//对账差错标志 - 1:为单边账;其它为正常出入金
+    currency: string;//币种
+    cusbankid: string;//托管银行编号
+    exchticket: string;//银行服务流水号
+    executetype: number;//申请类型 - 1:出金 2:入金 3: 单边账调整:入金; 4:单边账调整:出金 5:外部母账户调整:入金 6:外部母账户调整:出金 7:外部子账户:入金 8:外部子账户:出金
+    extendinfo: string;//扩展信息
+    extoperateid: number;//交易服务流水号
+    infamount: number;//劣后金额(自有)
+    logincode: string;//登录账号(账号)
+    netaddr: string;//调转网址
+    priamount: number;//优先金额(授信)
+    reauditid: number;//复审人
+    reauditremark: string;//复审备注
+    reaudittime: string;//复审时间
+    relatedorderid: string;//三方关联ID
+    remark: string;//备注
+    remark2: string;//备注(失败原因)
+    soucreamount: number;//原始出入金金额
+    soucrecurrencyid: number;//原始出入金币种
+    tradedate: string;//交易日(yyyyMMdd)
+    updatetime: string;//更新时间(申请时间)
+    userid: number;//用户id
+    userinfotype: number;//账户类型 1-个人 2-企业
+}
+
+export interface QhjBankInfo {
+    bankid: string;//银行ID
+    bankname: string;//银行名称
+    clearbankno: string;//清算系统银行编号
+    orderindex: number;//排序顺序
+    status: number;//状态 - number;
+    //:正常 1:注销
+}
+
+export interface QueryCusBankSignBankRsp {
+    Banklst: QhjBankInfo[],
+    canallot: number;//是否支持跨行调拨 - number;
+    //:不支持 1:支持
+    canallotquery: number;//是否支持跨行调拨查询 - number;
+    //:不支持 1:支持
+    canbindcard: number;//是否可绑卡与解卡 - number;
+    //:不可 1:可以
+    caninamount: number;//是否可入金 - number;
+    //:不可 1:可以
+    caninamount2: number;//是否可入金(网银端) - number;
+    //:不可 1:可以
+    canmodifybankcard: number;//是否可修改银行卡号 - number;
+    //:不可 1:可以
+    canmodifyphone: number;//是否可修改手机号 - number;
+    //:不可 1:可以
+    canmodifysigninfo: number;//是否可修改签约信息 - number;
+    //:不可 1:可以
+    canoutamount: number;//是否可出金 - number;
+    //:不可 1:可以
+    canoutamount2: number;//是否可出金(网银端) - number;
+    //:不可 1:可以
+    canrelease: number;//是否可解约 - number;
+    //:不可 1:可以
+    canrelease2: number;//是否可解约(网银端) - number;
+    //:不可 1:可以
+    cansign: number;//是否可签约 - number;
+    //:不可 1:可以
+    cansign2: number;//是否可签约(网银端) - number;
+    //:不可 1:可以
+    currency: string;//币种
+    cusbankid: string;//托管银行编号(对应清算中心TRAN_NO)
+    cusbankname: string;//银行业务名称
+    cusbankshortname: string;//银行业务简称
+    exchbankid: string;//交易所开户银行ID
+    exchpaybankaccname: string;//交易所支出结算账户户名
+    exchpaybankaccno: string;//交易所支出结算账户
+    isneedcheck: number;//是否需要对账 - number;
+    //:需要 1:不需要 [不需要界面配置]
+    isneedclear: number;//是否需要清算 - number;
+    //:不需要 1:需要
+    lastcheckstatus: number;//最后对账状态 - 对账状态 - 1:未对账 2:对账成功 3:对账失败
+    lastchecktime: string;//最后对账时间
+    lastclearstatus: number;//最后清算状态 - 1:未清算 2:清算成功 3:清算失败 4:清算部分成功
+    lastcleartime: string;//最后清算时间
+    lastsignintime: string;//最后签到时间
+    lastsignouttime: string;//最后签退时间
+    riskinfo: string;//签约风险提示书
+    signstatus: number;//当前签到/签退状态 - 1:签到 2:签退
+    tradedate: string;//交易日(yyyyMMdd)
+    updatetime: string;//当前签到/签退更新时间
+}
+
+export interface QueryBankInfoRsp {
+    bankid: string;//银行ID
+    bankname: string;//银行名称
+    clearbankno: string;//清算系统银行编号
+    orderindex: number;//排序顺序
+    status: number;//状态 - number;
+    //:正常 1:注销
+}

+ 5 - 0
src/services/go/quote/interface.ts

@@ -219,3 +219,8 @@ export interface QueryQuoteDayRsp {
     totalvolume: number;
     utclasttime: string;
 }
+
+export interface QueryQuoteDay extends QueryQuoteDayRsp {
+    goodsid: number;
+    goodsname: string;
+}

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

@@ -332,6 +332,7 @@ export interface WrSpecialMatchOrder {
     amount: number;//金额 = 数量  价格
     buyorsell: number;//买卖 - number;
     //:买 1:卖(挂牌类型 买为采购 卖为销售)
+    chargevalue: number; // 手续费
     cancelqty: number;//撤销数量
     deliverygoodscode: string;//品种代码
     deliverygoodsid: number;//品种ID

+ 47 - 3
src/services/socket/bank/index.ts

@@ -2,8 +2,8 @@ import APP from '@/services';
 import { getAccoutIdList } from '@/services/bus/account';
 import { buildProtoReq50, parseProtoRsp50 } from '@/services/socket/protobuf/buildReq';
 import { Callback } from '@/utils/websocket/index';
-import { sha256 } from 'js-sha256';
 import * as type from './interface/index';
+import { BuildInMoneyReq } from './interface/index';
 
 
 /**
@@ -29,8 +29,8 @@ export function buildOutMoney(param: type.buildOutMoneyReqParam) {
                 ExchTicket: '', // 交易所流水号
             },
         };
-        Object.assign(params.reqParams, param, { OldTaPWD: sha256.hex(param.OldTaPWD) });
-        console.log('params', params);
+        // Object.assign(params.reqParams, param, { OldTaPWD: sha256.hex(param.OldTaPWD) });
+        Object.assign(params.reqParams, param);
         const package50 = buildProtoReq50(params);
         APP.sendTradingServer(package50, undefined, {
             onSuccess: (res) => {
@@ -49,6 +49,50 @@ export function buildOutMoney(param: type.buildOutMoneyReqParam) {
 }
 
 /**
+ * 构建入金请求包的方法
+ * @param param
+ * @returns
+ */
+export function buildInMoney(param: BuildInMoneyReq) {
+    return new Promise((resolve, reject) => {
+        const params = {
+            protobufName: 't2bBankDepositReq',
+            funCodeName: 't2bBankDepositReq',
+            reqParams: {
+                ExtOperatorID: Date.now(), // 外部操作流水号
+                ExchId: '', // 交易所编号
+                Currency: 'RMB', // 币种
+                BankChildAccount: '', // 银行子账号
+                BankChildAccountName: '', // 银行子账号名
+                OpenCardBankId: '', // 银行卡行号
+                AppDateTime: null, // 申请日期和时间
+                Desc: '', // 备注
+                IdentifyCode: null, // 验证码
+                BranchBankName: null, // 收款支行名称
+                Remark: '', // 备注
+                ExchTicket: '', // 交易所流水号
+            },
+        };
+        // Object.assign(params.reqParams, param, { OldTaPWD: sha256.hex(param.OldTaPWD) });
+        Object.assign(params.reqParams, param);
+        const package50 = buildProtoReq50(params);
+        APP.sendTradingServer(package50, undefined, {
+            onSuccess: (res) => {
+                const { isSuccess, result } = parseProtoRsp50(res, 't2bBankDepositRsp');
+                if (isSuccess) {
+                    resolve('ok');
+                } else {
+                    reject(result);
+                }
+            },
+            onFail: (err) => {
+                reject(err.message)
+            },
+        } as Callback);
+    });
+}
+
+/**
  * 签约请求
  */
 export const requestBankSign = (param: type.t2bBankSignReq): Promise<type.t2bBankSignRsp[]> => {

+ 28 - 7
src/services/socket/bank/interface/index.ts

@@ -163,14 +163,35 @@ export interface CusBankInfoRsp {
 
 //  出金请求 参数
 export interface buildOutMoneyReqParam {
-    AccountCode: string; // 资金账户
-    CusBankID: string; // 托管银行编号
-    AccountType: number; // 账户类型
-    BankAccoutNum: string; // 银行卡号
-    BankAccoutName: string; // 银行卡户名
+    AccountCode?: string; // 资金账户
+    Currency?: string;
+    CusBankID?: string; // 托管银行编号
+    AccountType?: number; // 账户类型
+    BankAccoutNum?: string; // 银行卡号
+    BankAccoutName?: string; // 银行卡户名
     Amount: number; // 出金金额
-    OldTaPWD: string; // 资金密码
-    extend_info: string; // 扩展信息(JSON串,参考配置要求进行填充)
+    OldTaPWD?: string; // 资金密码
+    extend_info?: string; // 扩展信息(JSON串,参考配置要求进行填充)
+}
+
+export interface BuildInMoneyReq {
+    ExtOperatorID: number; // 外部操作流水号
+    Amount: number; // 金额
+    CusBankID: string; // 托管银行编号
+    ExchId?: string; // 交易所编号
+    TradeDate?: string; // 交易日
+    ExchTicket?: string; // 交易所流水号
+    AccountCode?: string; // 资金账户
+    BusinessNo?: string; // 银行业务编号
+    BankChildAccount?: string; // 银行子账号
+    BankChildAccountName?: string; // 银行子账号名
+    OldTaPWD?: string; // 资金密码
+    Currency?: string; // 币种
+    Remark?: string; // 备注
+    OpenCardBankId?: string; // 银行卡行号
+    BankAccoutNum?: string; // 银行卡号
+    BankAccoutName?: string; // 银行卡户名
+    extend_info?: string; // 扩展信息(JSON串, 参考配置要求进行填充
 }
 
 export interface buildSearchMoneyOutInParam {

+ 220 - 0
src/views/account-manager/account-manager-agency/account-manager-agency-sub/add.vue

@@ -0,0 +1,220 @@
+<template>
+  <!--新增签约银行-->
+  <Drawer :title="'新增'"
+          :placement="'right'"
+          :visible="visible"
+          @cancel="cancel"
+          :class="'top'">
+    <a-spin :spinning="loading">
+      <div class="post_buying">
+        <a-form class="inlineForm dialogForm"
+                ref="formRef"
+                :model="formState"
+                :rules="rules">
+          <div class="formBar">
+            <a-col :span="24">
+              <a-form-item label="姓名"
+                           class="inputIconBox">
+                <a-input class="commonInput"
+                         style="width: 260px"
+                         :readonly="true"
+                         :value="getUserName()" />
+              </a-form-item>
+            </a-col>
+            <a-row :gutter="24">
+              <a-col :span="24">
+                <a-form-item label="开户银行"
+                             name="bankId">
+                  <a-select class="inlineFormSelect"
+                            style="width: 260px"
+                            v-model:value="formState.bankId"
+                            placeholder="请选择">
+                    <a-select-option v-for="item in accountList"
+                                     :value="item.bankid"
+                                     :key="item.bankname">{{item.bankname}}</a-select-option>
+                  </a-select>
+                </a-form-item>
+              </a-col>
+              <a-col :span="24">
+                <a-form-item label="银行卡号"
+                             name="bankNo"
+                             class="inputIconBox">
+                  <a-input class="commonInput"
+                           style="width: 260px"
+                           v-model:value="formState.bankNo" />
+                </a-form-item>
+              </a-col>
+
+              <a-col :span="24">
+                <a-form-item label="支行名称"
+                             name="subBankName"
+                             class="inputIconBox">
+                  <a-input class="commonInput"
+                           style="width: 260px"
+                           v-model:value="formState.subBankName" />
+                </a-form-item>
+              </a-col>
+            </a-row>
+          </div>
+          <a-row :gutter="24">
+            <a-col :span="24"
+                   class="fixedBtns">
+              <a-form-item class="btnCenter">
+                <a-button class="listedBtn"
+                          :loading="loading"
+                          :disabled="loading"
+                          @click="submit">确定</a-button>
+              </a-form-item>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+    </a-spin>
+  </Drawer>
+</template>
+
+<script lang="ts">
+import { Des } from '@/common/components/commonDes';
+import Drawer from '@/common/components/drawer/index.vue';
+import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
+import { validateAction } from '@/common/setup/form';
+import { _closeModal } from '@/common/setup/modal/modal';
+import { getSelectedAccountId } from '@/services/bus/account';
+import { getUserInfo, getUserName } from '@/services/bus/user';
+import { QueryBankInfo, QueryCusBankSignBank } from '@/services/go/ermcp/qhj';
+import { QueryBankInfoRsp, QueryCusBankSignBankRsp } from '@/services/go/ermcp/qhj/interface';
+import { QueryPermancePlanTmpRsp } from '@/services/go/wrtrade/interface';
+import { requestBankSign } from '@/services/socket/bank';
+import { t2bBankSignReq } from '@/services/socket/bank/interface';
+import { getTimeValue } from '@/utils/time';
+import { MinusOutlined, PlusCircleOutlined, PlusOutlined, SearchOutlined } from '@ant-design/icons-vue';
+import { message } from 'ant-design-vue';
+import { defineComponent, PropType, ref } from 'vue';
+import { FormParam } from './interface';
+import { useForm } from './setup';
+
+export default defineComponent({
+    emits: ['cancel', 'update'],
+    name: 'warehouse_receipt_trade_blocs_delisting',
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryPermancePlanTmpRsp>,
+            default: {},
+        },
+        position: {
+            type: String,
+            default: 'top',
+        },
+    },
+    components: { Des, Drawer, PlusOutlined, MinusOutlined, SearchOutlined, PlusCircleOutlined },
+    setup(props, context) {
+        const { visible, cancel } = _closeModal(context);
+        const loading = ref<boolean>(false);
+        // 开户银行
+        const accountList = ref<QueryBankInfoRsp[]>([]);
+        // 托管银行
+        const managerList = ref<QueryCusBankSignBankRsp[]>([]);
+        Promise.all([QueryCusBankSignBank(), QueryBankInfo()]).then((res) => {
+            // 托管说是只有一个,具体因为未知
+            managerList.value = res[0].filter((el) => el.cansign === 1);
+            // 状态 - 0:正常 1:注销
+            accountList.value = res[1].filter((el) => el.status === 0);
+        });
+
+        const { rules, formState, formRef } = useForm();
+
+        function submit() {
+            if (managerList.value.length === 0) {
+                message.error('未查询到托管银行,请联系管理人员!');
+                return;
+            }
+            validateAction<FormParam>(formRef, formState).then((res) => {
+                const selectdBank = accountList.value.find((el) => el.bankid === res.bankId)!;
+                // 托管说是只有一个,具体因为未知
+                const managerBank = managerList.value[0]; // 托管银行
+                const userInfo = getUserInfo();
+                const extendInfo = {
+                    sex: userInfo.sex,
+                };
+                const param: t2bBankSignReq = {
+                    OperateType: 1, // 变更类型[1-增加; 2-修改; 4-绑卡;
+                    IsForce: 0, // 是否强制[0-否; 1-是]强制
+                    AgentCertType: 0, // 授权代理人证件类型
+                    BankCardType: 0, // 银行卡类型
+                    AccountType: 1, // // 账户类型[1-对私; 2-对公]
+                    extend_info: JSON.stringify(extendInfo), //  扩展信息(JSON串,参考配置要求进行填充)
+                    BankAccountNo: res.bankNo, // 银行账户
+                    BankAccountName: getUserName(), // 银行账户名称
+                    AccountCode: getSelectedAccountId().toString(), // 账户
+                    AccountName: getUserName(), // 客户名称
+                    OpenBankName: res.subBankName, // 开户支行名称
+                    ExtOperatorID: getTimeValue(), // 外部操作流水号
+                    CertType: userInfo.cardtypeid.toString(), // 证件类型
+                    CertID: userInfo.cardnum, // 证件号码
+                    CusBankID: managerBank.cusbankid, // 托管银行编号
+                    Currency: managerBank.currency, // 币种
+                    TradeDate: managerBank.tradedate, // 交易所业务日期
+                    ExBankName: selectdBank.bankname, // // 开户行名称
+                    OpenBankAccId: selectdBank.bankid, // 银行卡行号
+                };
+                const msg: [string, string] = ['您的申请已提交,请稍后查询结果!', '新增失败:'];
+                requestResultLoadingAndInfo(requestBankSign, param, loading, msg, true).then(() => {
+                    cancel(true);
+                });
+            });
+        }
+        return {
+            loading,
+            formRef,
+            formState,
+            rules,
+            submit,
+            cancel,
+            visible,
+            accountList,
+            getUserName,
+        };
+    },
+});
+</script>
+
+<style lang="less" scoped>
+.post_buying {
+    width: 100%;
+    height: 100%;
+    .flex;
+    flex-direction: column;
+    position: relative;
+    overflow: hidden;
+    .ant-form {
+        height: 100%;
+    }
+    .condition {
+        width: 100%;
+        height: 48px;
+        margin: 0 16px;
+        padding: 10px 0;
+        border-bottom: 1px solid @m-black6;
+        .inlineflex;
+        .conditionBtn {
+            align-self: center;
+            align-items: center;
+            border: 0;
+            min-width: 80px;
+            height: 28px;
+            line-height: 28px;
+            background: @m-black7;
+            .rounded-corners(3px);
+            font-size: 14px;
+            color: @m-blue0;
+            &:hover {
+                background: @m-black7-hover;
+                color: @m-blue0-hover;
+            }
+        }
+        .conditionBtn + .conditionBtn {
+            margin-left: 10px;
+        }
+    }
+}
+</style>

+ 63 - 0
src/views/account-manager/account-manager-agency/account-manager-agency-sub/delete.vue

@@ -0,0 +1,63 @@
+<template>
+  <!-- 删除 -->
+  <div>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType, ref } from 'vue';
+import Drawer from '@/common/components/drawer/index.vue';
+import { QueryPermancePlanTmpRsp } from '@/services/go/wrtrade/interface';
+import { _closeModal } from '@/common/setup/modal/modal';
+import { Modal } from 'ant-design-vue';
+import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
+import { delPerformancePlanTemplateReq } from '@/services/proto/performance';
+import { requestBankCancelSign } from '@/services/socket/bank';
+import { t2bBankCancelSignReq } from '@/services/socket/bank/interface';
+import { getSelectedAccountId } from '@/services/bus/account';
+import { QueryBankAccountSignQsp } from '@/services/go/ermcp/qhj/interface';
+import { getTimeValue } from '@/utils/time';
+
+export default defineComponent({
+    name: 'search_performance_template_delete',
+    components: { Drawer },
+    emits: ['cancel', 'update'],
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryBankAccountSignQsp>,
+            default: {},
+        },
+    },
+    setup(props, context) {
+        const { visible, cancel } = _closeModal(context);
+        const loading = ref<boolean>(false);
+        Modal.confirm({
+            title: '删除',
+            content: '是否确认删除签约银行!',
+            onOk: submit,
+            onCancel: cancel,
+        });
+        function submit() {
+            const param: t2bBankCancelSignReq = {
+                AccountCode: getSelectedAccountId().toString(), // 账户
+                CusBankID: props.selectedRow.cusbankid,
+                IsForce: 0,
+                ExtOperatorID: getTimeValue(), // 外部操作流水号
+            };
+            // 挂牌撤单请求
+            requestResultLoadingAndInfo(requestBankCancelSign, param, loading, ['删除成功', '删除失败:'], true).then(() => {
+                cancel(true);
+            });
+        }
+        return {
+            visible,
+            cancel,
+            submit,
+            loading,
+        };
+    },
+});
+</script>
+
+<style lang="less" scoped>
+</style>;

+ 235 - 0
src/views/account-manager/account-manager-agency/account-manager-agency-sub/index.vue

@@ -0,0 +1,235 @@
+<template>
+  <!-- 签约账号管理 -->
+  <section>
+    <a-table :columns="columns"
+             class="srcollYTable expandLeftTable"
+             :scroll="{ x: '100%', y: 'calc(100vh - 163px)' }"
+             :pagination="false"
+             :loading="loading"
+             :expandedRowKeys="expandedRowKeys"
+             :customRow="Rowclick"
+             :expandIcon="expandIcon"
+             :expandIconAsCell="false"
+             rowKey="key"
+             :data-source="tableList">
+
+      <template #handle="{ record }">
+        <BtnList :btnList="tableBtns"
+                 v-if="record.signstatus === 4"
+                 :record="record"
+                 class="btn-list-sticky"
+                 @click="openComponent" />
+      </template>
+      <!-- 签约状态 -->
+      <template #signstatus="{ text }">
+
+        <span>{{ getSignStatus(text) }}</span>
+      </template>
+    </a-table>
+    <div v-if="tableList.length === 0">
+      <span class="add-bank"
+            @click="componentId = addCode">
+        <svg class="icon svg-icon add-svg"
+             aria-hidden="true">
+          <use xlink:href="#icon-tianjiayinhangka"></use>
+        </svg>
+        添加签约银行
+      </span>
+    </div>
+    <!-- 明细 -->
+    <Description v-if="visible"
+                 @changeTab="changeTab"
+                 @close="closeDrawer"
+                 :tabList="tabList">
+      <a-table :columns="detailColumns"
+               class="topTable"
+               :pagination="false"
+               rowKey="key"
+               :data-source="detailList"
+               :scroll="{ x: '100%', y: 'calc(100vh - 163px)' }">
+        <template #updatetime="{ text }">
+          <span>{{ formatTime(text) }}</span>
+        </template>
+        <template #certificatephotourl="{ text }">
+          <a @click="previewImg(text)">{{text ? text === '--' ? text : '查看附件' : '--'}}</a>
+        </template>
+        <template #applystatus="{ text }">
+          <span>{{ getAccountInOutApplyStatus(text) }}</span>
+        </template>
+      </a-table>
+    </Description>
+    <component :is="componentId"
+               v-if="componentId"
+               :selectedRow="selectedRow"
+               @cancel="closeComponent"></component>
+    <a-modal :visible="previewVisible"
+             :footer="null"
+             @cancel="cancelImg">
+      <img alt="预览附件"
+           style="width: 100%"
+           :src="previewImage" />
+    </a-modal>
+  </section>
+</template>
+
+<script lang="ts">
+import Description from '@/common/components/description/index.vue';
+import { TabList } from '@/common/components/description/interface';
+import { EnumRouterName } from '@/common/constants/enumRouterName';
+import { getAccountInOutApplyStatus, getSignStatus } from '@/common/constants/enumsName';
+import { BtnList, defineAsyncComponent, defineComponent, queryTableList } from '@/common/export/commonTable';
+import { formatTime } from '@/common/methods';
+import { handleModalComponent } from '@/common/setup/asyncComponent';
+import { getButtonList } from '@/common/setup/table/button';
+import { expandIcon } from '@/common/setup/table/clolumn';
+import { handleComposeTable_detail } from '@/common/setup/table/compose';
+import { ComposeTableDetailParam } from '@/common/setup/table/interface';
+import { handlePreviewImg } from '@/common/setup/upload';
+import { QueryAccountInOutApply, queryBankAccountSign } from '@/services/go/ermcp/qhj';
+import { QueryAccountInOutApplyRsp, QueryAccountInOutApplyRsq, QueryBankAccountSignQsp } from '@/services/go/ermcp/qhj/interface';
+import { QueryPermancePlanTmpRsp } from '@/services/go/wrtrade/interface';
+import { ref, watch } from 'vue';
+import { getColumns } from './setup';
+
+const addCode = 'account-manager-agency-sub-add';
+const updateCode = 'account-manager-agency-sub-modiy';
+const deleteCode = 'account-manager-agency-sub-delete';
+
+const useButton = () => {
+    // 表格操作按钮列表
+    const btnList = getButtonList(EnumRouterName.account_manager_agency_sub, false);
+    // 过滤新增按钮
+    const tableBtns = btnList.filter((e) => e.code !== addCode);
+    return { tableBtns };
+};
+
+export default defineComponent({
+    name: EnumRouterName.account_manager_agency_sub,
+    components: {
+        BtnList,
+        Description,
+        [addCode]: defineAsyncComponent(() => import('./add.vue')),
+        [updateCode]: defineAsyncComponent(() => import('./modiy.vue')),
+        [deleteCode]: defineAsyncComponent(() => import('./delete.vue')),
+    },
+    setup() {
+        // 表格列表数据
+        const { loading, tableList, queryTable } = queryTableList<QueryBankAccountSignQsp>();
+        const flag = ref(false);
+        const loadData = () => {
+            queryTable(queryBankAccountSign).then((res) => {
+                const set = new Set([2, 3, 4]);
+                tableList.value = res.filter((e) => set.has(e.signstatus));
+                if (tableList.value.length) {
+                    flag.value = true;
+                }
+            });
+        };
+        // 预览附件
+        const { previewVisible, previewImage, cancelImg, previewImg } = handlePreviewImg();
+        // 表头
+        const { columns, applyInColumns, applyOutCloums } = getColumns();
+        const detailList = ref<QueryAccountInOutApplyRsq[]>([]);
+        const allDetailList = ref<QueryAccountInOutApplyRsp[]>([]);
+        const fn = (type: 1 | 2) => allDetailList.value.filter((e) => e.executetype === type);
+        // 出入金申请列表
+        function queryDetail() {
+            const { queryTable } = queryTableList<QueryAccountInOutApplyRsp>();
+            queryTable(QueryAccountInOutApply, {}).then((res) => {
+                allDetailList.value = res;
+                changeTab(0, tabList.value[0]);
+            });
+        }
+
+        // 明细表头
+        const detailColumns = ref(applyInColumns);
+        // 切换明细
+        function changeTab(index: number, current: TabList) {
+            const { code, lable } = current;
+            // executetype: number;//申请类型 - 1:出金 2:入金 3: 单边账调整:入金; 4:单边账调整:出金 5:外部母账户调整:入金 6:外部母账户调整:出金 7:外部子账户:入金 8:外部子账户:出金
+            if (code === 'account-manager-agency-sub-apply-in') {
+                // 充值申请
+                detailColumns.value = applyInColumns;
+                detailList.value = fn(1);
+            } else if (code === 'account-manager-agency-sub-apply-out') {
+                // 提现申请
+                detailColumns.value = applyOutCloums;
+                detailList.value = fn(2);
+            } else {
+                detailList.value = [];
+                console.error(`${lable}没有配置对应的code: ${code},`);
+                return;
+            }
+        }
+
+        const param: ComposeTableDetailParam = {
+            queryFn: loadData, // 查询表格数据
+            tableFilterKey: [], // 表格过滤字段
+            menuType: EnumRouterName.account_manager_agency_sub, // 当前tab页对应的code
+        };
+        const {
+            visible,
+            closeDrawer, // 控制 drawer 组件是否显示
+            expandedRowKeys,
+            selectedRow,
+            Rowclick, // 表格事件
+            tabList,
+        } = handleComposeTable_detail<QueryPermancePlanTmpRsp>(param);
+        watch(flag, () => {
+            visible.value = true;
+            queryDetail();
+        });
+
+        return {
+            loading,
+            tableList,
+            ...useButton(),
+            columns,
+            ...handleModalComponent(loadData, selectedRow),
+
+            visible,
+            closeDrawer, // 控制 drawer 组件是否显示
+            expandedRowKeys,
+            selectedRow,
+            Rowclick, // 表格事件
+            tabList,
+            detailColumns,
+            formatTime,
+            expandIcon,
+            getSignStatus,
+            changeTab,
+            addCode,
+            detailList,
+            getAccountInOutApplyStatus,
+            previewVisible,
+            previewImage,
+            cancelImg,
+            previewImg,
+        };
+    },
+});
+</script>
+
+<style lang="less" scope>
+.add-svg {
+    color: var(--m-blue0);
+    font-size: 22px;
+    // fill: currentColor !important;
+    // path {
+    //     fill: inherit !important;
+    // }
+}
+.add-bank {
+    cursor: pointer;
+    display: inline-block;
+    width: 181px;
+    height: 51px;
+    border: 1px dashed var(--m-blue0);
+    border-radius: 10px;
+    font-size: 16px;
+    line-height: 46px;
+    font-family: Adobe Heiti Std;
+    font-weight: normal;
+    color: var(--m-blue0);
+}
+</style>;

+ 6 - 0
src/views/account-manager/account-manager-agency/account-manager-agency-sub/interface.ts

@@ -0,0 +1,6 @@
+export interface FormParam {
+    bankId: string | undefined;
+    bankNo: string;
+    name: string;
+    subBankName: string;
+}

+ 217 - 0
src/views/account-manager/account-manager-agency/account-manager-agency-sub/modiy.vue

@@ -0,0 +1,217 @@
+<template>
+  <!--新增签约银行-->
+  <Drawer :title="'修改'"
+          :placement="'right'"
+          :visible="visible"
+          @cancel="cancel"
+          :class="'top'">
+    <a-spin :spinning="loading">
+      <div class="post_buying">
+        <a-form class="inlineForm dialogForm"
+                ref="formRef"
+                :model="formState"
+                :rules="rules">
+          <div class="formBar">
+            <a-col :span="24">
+              <a-form-item label="姓名"
+                           class="inputIconBox">
+                <a-input class="commonInput"
+                         style="width: 260px"
+                         :readonly="true"
+                         :value="getUserName()" />
+              </a-form-item>
+            </a-col>
+            <a-row :gutter="24">
+              <a-col :span="24">
+                <a-form-item label="开户银行"
+                             name="bankId">
+                  <a-select class="inlineFormSelect"
+                            style="width: 260px"
+                            v-model:value="formState.bankId"
+                            placeholder="请选择">
+                    <a-select-option v-for="item in accountList"
+                                     :value="item.bankid"
+                                     :key="item.bankname">{{item.bankname}}</a-select-option>
+                  </a-select>
+                </a-form-item>
+              </a-col>
+              <a-col :span="24">
+                <a-form-item label="银行卡号"
+                             name="bankNo"
+                             class="inputIconBox">
+                  <a-input class="commonInput"
+                           style="width: 260px"
+                           v-model:value="formState.bankNo" />
+                </a-form-item>
+              </a-col>
+
+              <a-col :span="24">
+                <a-form-item label="支行名称"
+                             name="subBankName"
+                             class="inputIconBox">
+                  <a-input class="commonInput"
+                           style="width: 260px"
+                           v-model:value="formState.subBankName" />
+                </a-form-item>
+              </a-col>
+            </a-row>
+          </div>
+          <a-row :gutter="24">
+            <a-col :span="24"
+                   class="fixedBtns">
+              <a-form-item class="btnCenter">
+                <a-button class="listedBtn"
+                          :loading="loading"
+                          :disabled="loading"
+                          @click="submit">确定</a-button>
+              </a-form-item>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+    </a-spin>
+  </Drawer>
+</template>
+
+<script lang="ts">
+import { Des } from '@/common/components/commonDes';
+import Drawer from '@/common/components/drawer/index.vue';
+import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
+import { validateAction } from '@/common/setup/form';
+import { _closeModal } from '@/common/setup/modal/modal';
+import { getSelectedAccountId } from '@/services/bus/account';
+import { getUserName } from '@/services/bus/user';
+import { QueryBankInfo, QueryCusBankSignBank } from '@/services/go/ermcp/qhj';
+import { QueryBankAccountSignQsp, QueryBankInfoRsp, QueryCusBankSignBankRsp } from '@/services/go/ermcp/qhj/interface';
+import { requestBankSign } from '@/services/socket/bank';
+import { t2bBankSignReq } from '@/services/socket/bank/interface';
+import { getTimeValue } from '@/utils/time';
+import { MinusOutlined, PlusCircleOutlined, PlusOutlined, SearchOutlined } from '@ant-design/icons-vue';
+import { message } from 'ant-design-vue';
+import { defineComponent, PropType, ref } from 'vue';
+import { FormParam } from './interface';
+import { useForm } from './setup';
+
+export default defineComponent({
+    emits: ['cancel', 'update'],
+    name: 'warehouse_receipt_trade_blocs_delisting',
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryBankAccountSignQsp>,
+            default: {},
+        },
+        position: {
+            type: String,
+            default: 'top',
+        },
+    },
+    components: { Des, Drawer, PlusOutlined, MinusOutlined, SearchOutlined, PlusCircleOutlined },
+    setup(props, context) {
+        const { visible, cancel } = _closeModal(context);
+        const loading = ref<boolean>(false);
+        // 开户银行
+        const accountList = ref<QueryBankInfoRsp[]>([]);
+        // 托管银行
+        const managerList = ref<QueryCusBankSignBankRsp[]>([]);
+        Promise.all([QueryCusBankSignBank(), QueryBankInfo()]).then((res) => {
+            // 托管说是只有一个,具体因为未知
+            managerList.value = res[0].filter((el) => el.cansign === 1);
+            // 状态 - 0:正常 1:注销
+            accountList.value = res[1].filter((el) => el.status === 0);
+        });
+
+        const { rules, formState, formRef } = useForm();
+        formState.bankId = props.selectedRow.bankid;
+        formState.subBankName = props.selectedRow.branchbankname;
+        formState.bankNo = props.selectedRow.bankaccountno;
+        function submit() {
+            if (managerList.value.length === 0) {
+                message.error('未查询到托管银行,请联系管理人员!');
+                return;
+            }
+            validateAction<FormParam>(formRef, formState).then((res) => {
+                const selectdBank = accountList.value.find((el) => el.bankid === res.bankId)!;
+                // 托管说是只有一个,具体因为未知
+                const managerBank = managerList.value[0]; // 托管银行
+                const param: t2bBankSignReq = {
+                    OperateType: 2, // 变更类型[1-增加; 2-修改; 4-绑卡;
+                    IsForce: 0, // 是否强制[0-否; 1-是]强制
+                    AgentCertType: 0, // 授权代理人证件类型
+                    BankCardType: 0, // 银行卡类型
+                    AccountType: 1, // // 账户类型[1-对私; 2-对公]
+                    extend_info: '', //  扩展信息(JSON串,参考配置要求进行填充)
+                    BankAccountNo: res.bankNo, // 银行账户
+                    BankAccountName: res.name, // 银行账户名称
+                    AccountCode: getSelectedAccountId().toString(), // 账户
+                    AccountName: getUserName(), // 客户名称
+                    OpenBankName: res.subBankName, // 开户支行名称
+                    ExtOperatorID: getTimeValue(), // 外部操作流水号
+                    CertType: '', // 证件类型
+                    CertID: '', // 证件号码
+                    CusBankID: managerBank.cusbankid, // 托管银行编号
+                    Currency: managerBank.currency, // 币种
+                    TradeDate: managerBank.tradedate, // 交易所业务日期
+                    ExBankName: selectdBank.bankname, // // 开户行名称
+                    OpenBankAccId: selectdBank.bankid, // 银行卡行号
+                };
+                const msg: [string, string] = ['修改成功', '修改失败:'];
+                requestResultLoadingAndInfo(requestBankSign, param, loading, msg).then(() => {
+                    cancel(true);
+                });
+            });
+        }
+        return {
+            loading,
+            formRef,
+            formState,
+            rules,
+            submit,
+            cancel,
+            visible,
+            accountList,
+            getUserName,
+        };
+    },
+});
+</script>
+
+<style lang="less" scoped>
+.post_buying {
+    width: 100%;
+    height: 100%;
+    .flex;
+    flex-direction: column;
+    position: relative;
+    overflow: hidden;
+    .ant-form {
+        height: 100%;
+    }
+    .condition {
+        width: 100%;
+        height: 48px;
+        margin: 0 16px;
+        padding: 10px 0;
+        border-bottom: 1px solid @m-black6;
+        .inlineflex;
+        .conditionBtn {
+            align-self: center;
+            align-items: center;
+            border: 0;
+            min-width: 80px;
+            height: 28px;
+            line-height: 28px;
+            background: @m-black7;
+            .rounded-corners(3px);
+            font-size: 14px;
+            color: @m-blue0;
+            &:hover {
+                background: @m-black7-hover;
+                color: @m-blue0-hover;
+            }
+        }
+        .conditionBtn + .conditionBtn {
+            margin-left: 10px;
+        }
+    }
+}
+</style>

+ 52 - 0
src/views/account-manager/account-manager-agency/account-manager-agency-sub/setup.ts

@@ -0,0 +1,52 @@
+import { onBeforeUnmount, reactive, ref, UnwrapRef } from "vue"
+import { FormParam } from './interface'
+
+export function getColumns() {
+    const columns = [
+        { title: '开户银行', key: 'bankname', dataIndex: 'bankname', align: 'center', width: 200 },
+        { title: '银行卡号', key: 'bankaccountno', dataIndex: 'bankaccountno', align: 'center', width: 200, slots: { customRender: 'bankaccountno' } },
+        { title: '姓名', key: 'accountname', dataIndex: 'accountname', align: 'center', width: 200, slots: { customRender: 'accountname' } },
+        { title: '支行名称', key: 'branchbankname', dataIndex: 'branchbankname', align: 'center', width: 200, slots: { customRender: 'branchbankname' } },
+        { title: '签约状态', key: 'signstatus', dataIndex: 'signstatus', align: 'center', width: 200, slots: { customRender: 'signstatus' } },
+        { title: '操作', key: 'handle', dataIndex: 'handle', align: 'center', width: 200, slots: { customRender: 'handle' } },
+    ]
+    // 充值申请 表头
+    const applyInColumns = [
+        { title: '充值金额', key: 'amount', dataIndex: 'amount', align: 'center', width: 200 },
+        { title: '凭证', key: 'certificatephotourl', dataIndex: 'certificatephotourl', align: 'center', width: 200, slots: { customRender: 'certificatephotourl' } },
+        { title: '申请时间', key: 'updatetime', dataIndex: 'updatetime', align: 'center', width: 200, slots: { customRender: 'bankaccountno' } },
+        { title: '状态', key: 'applystatus', dataIndex: 'applystatus', align: 'center', width: 200, slots: { customRender: 'applystatus' } },
+    ]
+    // 提现申请 表头
+    const applyOutCloums = [
+        { title: '提现金额', key: 'amount', dataIndex: 'amount', align: 'center', width: 200 },
+        { title: '申请时间', key: 'updatetime', dataIndex: 'updatetime', align: 'center', width: 200, slots: { customRender: 'updatetime' } },
+        { title: '状态', key: 'applystatus', dataIndex: 'applystatus', align: 'center', width: 200, slots: { customRender: 'applystatus' } },
+    ]
+    return { columns, applyInColumns, applyOutCloums }
+}
+
+
+export const useForm = () => {
+    function initForm(): FormParam {
+        return {
+            bankId: undefined,
+            bankNo: '',
+            name: '',
+            subBankName: '',
+        }
+    }
+    const formState: UnwrapRef<FormParam> = reactive(initForm())
+    const formRef = ref();
+    const rules = {
+        bankId: [{ required: true, message: '请选择开户银行', }],
+        bankNo: [{ required: true, message: '请输入银行卡号' }],
+        name: [{ required: true, message: '请输入姓名' }],
+        subBankName: [{ required: true, message: '请输入支行名称' }],
+    }
+    onBeforeUnmount(() => {
+        initForm()
+        formRef.value.resetFields()
+    })
+    return { rules, formState, formRef }
+}

+ 7 - 3
src/views/market/spot_trade/components/buy-sell-market/components/delisting/setup.ts

@@ -51,9 +51,13 @@ export function handleSpotWarrant(enumName: EnumRouterName, buyOrSell: BuyOrSell
         if (isWR()) {
             queryResultLoadingAndInfo(queryHoldLB, loading).then(res => {
                 allWR.value = res;
-                wrHoldList.value = res.filter((e: WrHoldLB) => e.wrfactortypeid === String(selectedRow.wrfactortypeid)).map((e: WrHoldLB) => {
-                    const { wrholdeno, enableqty, ladingbillid, enumdicname, subnum } = e
-                    return { id: ladingbillid, name: `${wrholdeno}(${enableqty}${enumdicname})`, subnum }
+                wrHoldList.value.length = 0
+                res.forEach(e => {
+                    if (e.wrfactortypeid === String(selectedRow.wrfactortypeid)) {
+                        const { wrholdeno, enableqty, ladingbillid, enumdicname, subnum } = e
+                        const result = { id: ladingbillid, name: `${wrholdeno}(${enableqty}${enumdicname})`, subnum }
+                        wrHoldList.value.push(result)
+                    }
                 })
             })
         }

+ 7 - 3
src/views/market/spot_trade/components/buy-sell-market/components/financing_delisting/setup.ts

@@ -56,9 +56,13 @@ export function handleSpotWarrant(enumName: EnumRouterName, buyOrSell: BuyOrSell
         if (isWR()) {
             queryResultLoadingAndInfo(queryHoldLB, loading).then(res => {
                 allWR.value = res;
-                wrHoldList.value = res.filter((e: WrHoldLB) => e.wrfactortypeid === String(selectedRow.wrfactortypeid)).map((e: WrHoldLB) => {
-                    const { wrholdeno, enableqty, ladingbillid, enumdicname, subnum } = e
-                    return { id: ladingbillid, name: `${wrholdeno}(${enableqty}${enumdicname})`, subnum }
+                wrHoldList.value.length = 0
+                res.forEach(e => {
+                    if (e.wrfactortypeid === String(selectedRow.wrfactortypeid)) {
+                        const { wrholdeno, enableqty, ladingbillid, enumdicname, subnum } = e
+                        const result = { id: ladingbillid, name: `${wrholdeno}(${enableqty}${enumdicname})`, subnum }
+                        wrHoldList.value.push(result)
+                    }
                 })
             })
         }

+ 108 - 79
src/views/market/spot_trade/components/buy-sell-market/index.vue

@@ -1,84 +1,114 @@
 <template>
-    <!-- 买卖大厅 -->
-    <div class="buy-sell-market">
-        <div class="buy-sell-market-title">
-            <a class="backIcon" @click="cancel">
-                <LeftOutlined />
-            </a>
-            <div class="titleBtn">
-                <div class="name">{{ selectedRow.deliverygoodsname }}</div>
-                <div class="arrowRightIcon"></div>
-            </div>
-            <div class="titleBtn titleBtn2">
-                <div class="arrowLeftIcon"></div>
-                <div class="name">{{ selectedRow.wrgoodsname }}</div>
-                <div class="arrowRightIcon"></div>
-            </div>
-            <div class="titleBtn titleBtn2">
-                <div class="arrowLeftIcon"></div>
-                <div class="name">{{ selectedRow.warehousename }}</div>
-                <div class="arrowRightIcon"></div>
-            </div>
-            <div class="titleBtn titleBtn3" v-if="!isWR(enumName)">
-                <div class="arrowLeftIcon"></div>
-                <div class="name">
-                    <a-month-picker :allowClear="false" v-model:value="time" @change="timeChange" class="commonDatePicker conditionPicker" />
-                </div>
-                <DownOutlined />
-            </div>
+  <!-- 买卖大厅 -->
+  <div class="buy-sell-market">
+    <div class="buy-sell-market-title">
+      <a class="backIcon"
+         @click="cancel">
+        <LeftOutlined />
+      </a>
+      <div class="titleBtn">
+        <div class="name">{{ selectedRow.deliverygoodsname }}</div>
+        <div class="arrowRightIcon"></div>
+      </div>
+      <div class="titleBtn titleBtn2">
+        <div class="arrowLeftIcon"></div>
+        <div class="name">{{ selectedRow.wrgoodsname }}</div>
+        <div class="arrowRightIcon"></div>
+      </div>
+      <div class="titleBtn titleBtn2">
+        <div class="arrowLeftIcon"></div>
+        <div class="name">{{ selectedRow.warehousename }}</div>
+        <div class="arrowRightIcon"></div>
+      </div>
+      <div class="titleBtn titleBtn3"
+           v-if="!isWR(enumName)">
+        <div class="arrowLeftIcon"></div>
+        <div class="name">
+          <a-month-picker :allowClear="false"
+                          v-model:value="time"
+                          @change="timeChange"
+                          class="commonDatePicker conditionPicker" />
+        </div>
+        <DownOutlined />
+      </div>
 
-            <div class="priceBar bdf1 ml20">
-                <div class="greenBar green">
-                    <div class="numBlock" v-if="isFloat()">
-                        <div class="first">卖基差</div>
-                        <div class="last">{{ selectedRow.sellpricemove }}</div>
-                    </div>
-                    <div class="numBlock" v-else>
-                        <div class="first">卖价</div>
-                        <div class="last">{{ selectedRow.sellprice }}</div>
-                    </div>
-                    <div class="numBlock">
-                        <div class="first">卖量</div>
-                        <div class="last">{{ selectedRow.sellqty }}</div>
-                    </div>
-                </div>
-                <div class="redBar red">
-                    <div class="numBlock" v-if="isFloat()">
-                        <div class="first">买基差</div>
-                        <div class="last">{{ selectedRow.buypricemove }}</div>
-                    </div>
-                    <div class="numBlock ml15" v-else>
-                        <div class="first">买价</div>
-                        <div class="last">{{ selectedRow.buyprice }}</div>
-                    </div>
-                    <div class="numBlock">
-                        <div class="first">买量</div>
-                        <div class="last">{{ selectedRow.buyqty }}</div>
-                    </div>
-                </div>
-            </div>
-            <a-button class="market" v-if="isFloat()" @click="openComponent({ code: 'GoodsChart' })">
-                <div class="first">{{ selectedRow.goodscode }}</div>
-                <div class="last red">{{ getGoodsPrice() }}</div>
-                <LineChartOutlined />
-            </a-button>
-            <!-- 历史走势按钮 -->
-            <a-button class="historyBtn" @click="openComponent({ code: 'HisChart' })">
-                历史走势
-                <LineChartOutlined />
-            </a-button>
-            <BtnList :btnList="firstBtn" :record="selectedRow" @click="openComponent" />
+      <div class="priceBar bdf1 ml20">
+        <div class="greenBar green">
+          <div class="numBlock"
+               v-if="isFloat()">
+            <div class="first">卖基差</div>
+            <div class="last">{{ selectedRow.sellpricemove }}</div>
+          </div>
+          <div class="numBlock"
+               v-else>
+            <div class="first">卖价</div>
+            <div class="last">{{ selectedRow.sellprice }}</div>
+          </div>
+          <div class="numBlock">
+            <div class="first">卖量</div>
+            <div class="last">{{ selectedRow.sellqty }}</div>
+          </div>
+        </div>
+        <div class="redBar red">
+          <div class="numBlock"
+               v-if="isFloat()">
+            <div class="first">买基差</div>
+            <div class="last">{{ selectedRow.buypricemove }}</div>
+          </div>
+          <div class="numBlock ml15"
+               v-else>
+            <div class="first">买价</div>
+            <div class="last">{{ selectedRow.buyprice }}</div>
+          </div>
+          <div class="numBlock">
+            <div class="first">买量</div>
+            <div class="last">{{ selectedRow.buyqty }}</div>
+          </div>
         </div>
-        <a-row class="buySellHall">
-            <a-col :span="12" v-if="sellMarket.isMarket">
-                <Sell :enumName="enumName" ref="sellRef" :parantSelectedRow="selectedRow" :time="time" :btnList="handleBtnList(sellMarket.btnList)" />
-            </a-col>
-            <a-col :span="12" v-if="buyMarket.isMarket">
-                <Buy :enumName="enumName" ref="buyRef" :time="time" :parantSelectedRow="selectedRow" :btnList="handleBtnList(buyMarket.btnList)" />
-            </a-col>
-        </a-row>
-        <component :is="componentId" v-if="componentId" :selectedRow="getSelectedRow()" :goodsPrice="getGoodsPrice()" :enumName="enumName" :time="time" @cancel="closeComponent"> </component>
+      </div>
+      <a-button class="market"
+                v-if="isFloat()"
+                @click="openComponent({ code: 'GoodsChart' })">
+        <div class="first">{{ selectedRow.goodscode }}</div>
+        <div class="last red">{{ getGoodsPrice() }}</div>
+        <LineChartOutlined />
+      </a-button>
+      <!-- 历史走势按钮 -->
+      <a-button class="historyBtn"
+                @click="openComponent({ code: 'HisChart' })">
+        历史走势
+        <LineChartOutlined />
+      </a-button>
+      <BtnList :btnList="firstBtn"
+               :record="selectedRow"
+               @click="openComponent" />
     </div>
+    <a-row class="buySellHall">
+      <a-col :span="12"
+             v-if="sellMarket.isMarket">
+        <Sell :enumName="enumName"
+              ref="sellRef"
+              :parantSelectedRow="selectedRow"
+              :time="time"
+              :btnList="handleBtnList(sellMarket.btnList)" />
+      </a-col>
+      <a-col :span="12"
+             v-if="buyMarket.isMarket">
+        <Buy :enumName="enumName"
+             ref="buyRef"
+             :time="time"
+             :parantSelectedRow="selectedRow"
+             :btnList="handleBtnList(buyMarket.btnList)" />
+      </a-col>
+    </a-row>
+    <component :is="componentId"
+               v-if="componentId"
+               :selectedRow="getSelectedRow()"
+               :goodsPrice="getGoodsPrice()"
+               :enumName="enumName"
+               :time="time"
+               @cancel="closeComponent"> </component>
+  </div>
 </template>
 
 <script lang="ts">
@@ -195,8 +225,7 @@ export default defineComponent({
         const getSelectedRow = () => {
             if (componentId.value === 'GoodsChart') {
                 return quote;
-            }
-            if (componentId.value === 'HisChart') {
+            } else {
                 return props.selectedRow;
             }
         };

+ 1 - 1
src/views/market/spot_trade/components/detail/index.vue

@@ -23,7 +23,7 @@
                  v-for="item in lststep"
                  :key="item.autoid">
               <!-- <div class="no">{{index + 1}}</div> -->
-              <div class="name">{{item.steptypename}}</div>
+              <div class="name">{{item.stepinfo}}</div>
               <div class="time">{{item.stepdate}}</div>
             </div>
           </a-col>

+ 21 - 13
src/views/market/spot_trade/components/post_buying/setup.ts

@@ -1,10 +1,12 @@
 import { BuyOrSell } from "@/common/constants/enumCommon";
 import { EnumRouterName } from "@/common/constants/enumRouterName";
-import { useVerifyListingNum, useVerifyListingBasis } from '@/hooks/form/verify';
+import { validateCommon } from "@/common/setup/validate";
+import { useVerifyListingBasis, useVerifyListingNum } from '@/hooks/form/verify';
 import { getAccountTypeList, getCanUseMoney } from "@/services/bus/account";
 import { getRules } from '@/services/bus/rules';
 import { AccountListItem } from "@/services/dataCenter/interafce/account";
 import { WrOrderQuote } 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 { getGoodsPrice, handleIs } from "../buy-sell-market/setup";
@@ -27,9 +29,11 @@ export function handleForm(selectedRow: TempWrOrderQuoteDetail) {
 
     const { v_num } = useVerifyListingNum<FormParam, 'DelistMinQty'>(formState, 'DelistMinQty', selectedRow.minivalue);
     const { v_basis } = useVerifyListingBasis(selectedRow, 'goodsid');
-
+    const v_price = async (rule: RuleObject, value: number) => {
+        return validateCommon(value, '请输入挂牌价格');
+    };
     const rules = {
-        FixedPrice: [{ required: true, message: '请输入挂牌价格', trigger: 'blur', type: 'number', }],
+        FixedPrice: [{ required: true, validator: v_price, trigger: 'blur', type: 'number', }],
         OrderQty: [{ required: true, validator: v_num, trigger: 'change', type: 'number' }],
         PriceMove: [{ required: true, validator: v_basis, trigger: 'blur', type: 'number', }],
         accountid: [{ required: true, message: '请输入交易账号' }],
@@ -74,17 +78,21 @@ export function handleNumAndPrice(enumName: EnumRouterName, selectedRow: WrOrder
     //  摘牌金额
     function getMoney() {
         let result = 0
-        if (isFloat()) {
-            const goodsPrice = getGoodsPrice()
-            if (goodsPrice.value && goodsPrice.value !== '--') {   // 有实时行情价格
-                // 估算总价=挂牌基差+期货合约价;
-                const predictTotal = formState.PriceMove + (goodsPrice.value as number);
-                // 估算总额=估算总价*摘牌数量;
-                result = predictTotal * formState.OrderQty
+        if (formState.OrderQty) {
+            if (isFloat()) {
+                const goodsPrice = getGoodsPrice()
+                if (goodsPrice.value && goodsPrice.value !== '--') {   // 有实时行情价格
+                    // 估算总价=挂牌基差+期货合约价;
+                    const predictTotal = formState.PriceMove + (goodsPrice.value as number);
+                    // 估算总额=估算总价*摘牌数量;
+                    result = predictTotal * formState.OrderQty
+                }
+            } else {
+                // 摘牌金额=挂牌价格*摘牌数量
+                if (formState.FixedPrice) {
+                    result = formState.OrderQty * formState.FixedPrice
+                }
             }
-        } else {
-            // 摘牌金额=挂牌价格*摘牌数量
-            result = formState.OrderQty * formState.FixedPrice
         }
         return Number(result.toFixed(2))
     }

+ 86 - 63
src/views/market/spot_trade/spot_trade_order_transaction/components/buy-sell-market/index.vue

@@ -1,70 +1,92 @@
 <template>
-    <!-- 买卖大厅 -->
-    <div class="buy-sell-market">
-        <div class="buy-sell-market-title">
-            <a class="backIcon" @click="cancelAction">
-                <LeftOutlined />
-            </a>
-            <div class="titleBtn">
-                <div class="name">{{ selectedRow.goodscode }} {{ selectedRow.goodsname }}</div>
-                <div class="arrowRightIcon"></div>
+  <!-- 买卖大厅 -->
+  <div class="buy-sell-market">
+    <div class="buy-sell-market-title">
+      <a class="backIcon"
+         @click="cancelAction">
+        <LeftOutlined />
+      </a>
+      <div class="titleBtn">
+        <div class="name">{{ selectedRow.goodscode }} {{ selectedRow.goodsname }}</div>
+        <div class="arrowRightIcon"></div>
+      </div>
+      <div class="inlineBar">
+        <div class="valNums bdf1 ml10">
+          <!-- 最新价 -->
+          <div
+               :class="['firstNum', 'start', handleQuotePriceColor(selectedRow.last, selectedRow.presettle)]">
+            {{ selectedRow.last }}</div>
+          <div class="lastNum start">
+            <!-- 涨跌值 -->
+            <div :class="handleQuotePriceColor(selectedRow.last, selectedRow.presettle)">
+              {{ quoteChange(selectedRow, selectedRow.decimalplace) }}</div>
+            <!-- 涨跌幅 -->
+            <div class="ml20"
+                 :class="handleQuotePriceColor(selectedRow.last, selectedRow.presettle)">
+              {{ quoteAmplitude(selectedRow, selectedRow.decimalplace) }}</div>
+          </div>
+        </div>
+        <div class="priceBar ml20">
+          <div class="inlineBar start">
+            <div class="greenBar green">
+              <div class="numBlock ml15">
+                <div class="first">卖价</div>
+                <div class="last"
+                     :class="handleQuotePriceColor(selectedRow.ask, selectedRow.presettle)">
+                  {{ handleNoneValue(selectedRow.ask) }}</div>
+              </div>
+              <div class="numBlock">
+                <div class="first">卖量</div>
+                <div class="last">{{ handleNoneValue(selectedRow.askvolume) }}</div>
+              </div>
             </div>
-            <div class="inlineBar">
-                <div class="valNums bdf1 ml10">
-                    <!-- 最新价 -->
-                    <div :class="['firstNum', 'start', handleQuotePriceColor(selectedRow.last, selectedRow.presettle)]"> {{ selectedRow.last }}</div>
-                    <div class="lastNum start">
-                        <!-- 涨跌值 -->
-                        <div :class="handleQuotePriceColor(selectedRow.last, selectedRow.presettle)"> {{ quoteChange(selectedRow, selectedRow.decimalplace) }}</div>
-                        <!-- 涨跌幅 -->
-                        <div class="ml20" :class="handleQuotePriceColor(selectedRow.last, selectedRow.presettle)"> {{ quoteAmplitude(selectedRow, selectedRow.decimalplace) }}</div>
-                    </div>
-                </div>
-                <div class="priceBar ml20">
-                    <div class="inlineBar start">
-                        <div class="greenBar green">
-                            <div class="numBlock ml15">
-                                <div class="first">卖价</div>
-                                <div class="last" :class="handleQuotePriceColor(selectedRow.ask, selectedRow.presettle)"> {{ selectedRow.ask }}</div>
-                            </div>
-                            <div class="numBlock">
-                                <div class="first">卖量</div>
-                                <div class="last">{{ selectedRow.askvolume }}</div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="inlineBar start">
-                        <div class="redBar red1">
-                            <div class="numBlock">
-                                <div class="first">买价</div>
-                                <div class="last" :class="handleQuotePriceColor(selectedRow.bid, selectedRow.presettle)"> {{ selectedRow.bid }}</div>
-                            </div>
-                            <div class="numBlock">
-                                <div class="first">买量</div>
-                                <div class="last">{{ selectedRow.bidvolume }}</div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <BtnList :btnList="btnListData" :record="selectedRow" @click="openComponent" />
+          </div>
+          <div class="inlineBar start">
+            <div class="redBar red1">
+              <div class="numBlock">
+                <div class="first">买价</div>
+                <div class="last"
+                     :class="handleQuotePriceColor(selectedRow.bid, selectedRow.presettle)">
+                  {{ handleNoneValue(selectedRow.bid) }}</div>
+              </div>
+              <div class="numBlock">
+                <div class="first">买量</div>
+                <div class="last">{{ handleNoneValue(selectedRow.bidvolume) }}</div>
+              </div>
             </div>
+          </div>
         </div>
-        <!-- 交易图表 -->
-        <!-- <Chart v-if="showComponentsId === ComponentType.chart" @update="changeComponent" :deliverGoods="deliverGoods" /> -->
-        <Chart v-if="showComponentsId === ComponentType.chart" @update="changeComponent" :selectedRow="selectedRow" />
-        <!-- 买卖大厅内容 -->
-        <a-row class="buySellHall" v-if="showComponentsId === ComponentType.marketContent">
-            <a-col :span="12">
-                <Sell ref="sellRef" :parantSelectedRow="deliverGoods" />
-            </a-col>
-            <a-col :span="12">
-                <Buy ref="buyRef" :parantSelectedRow="deliverGoods" />
-            </a-col>
-        </a-row>
-        <!-- 成交明细 -->
-        <StockExchange :deliverGoods="deliverGoods" v-if="showComponentsId === ComponentType.tradeDetail" />
-        <component :is="componentId" v-if="componentId" :selectedRow="selectedRow" :deliverGoods="deliverGoods" @cancel="closeComponent"></component>
+        <BtnList :btnList="btnListData"
+                 :record="selectedRow"
+                 @click="openComponent" />
+      </div>
     </div>
+    <!-- 交易图表 -->
+    <!-- <Chart v-if="showComponentsId === ComponentType.chart" @update="changeComponent" :deliverGoods="deliverGoods" /> -->
+    <Chart v-if="showComponentsId === ComponentType.chart"
+           @update="changeComponent"
+           :selectedRow="selectedRow" />
+    <!-- 买卖大厅内容 -->
+    <a-row class="buySellHall"
+           v-if="showComponentsId === ComponentType.marketContent">
+      <a-col :span="12">
+        <Sell ref="sellRef"
+              :parantSelectedRow="deliverGoods" />
+      </a-col>
+      <a-col :span="12">
+        <Buy ref="buyRef"
+             :parantSelectedRow="deliverGoods" />
+      </a-col>
+    </a-row>
+    <!-- 成交明细 -->
+    <StockExchange :deliverGoods="deliverGoods"
+                   v-if="showComponentsId === ComponentType.tradeDetail" />
+    <component :is="componentId"
+               v-if="componentId"
+               :selectedRow="selectedRow"
+               :deliverGoods="deliverGoods"
+               @cancel="closeComponent"></component>
+  </div>
 </template>
 
 <script lang="ts">
@@ -88,7 +110,7 @@ import StockExchange from '../stock-exchange/index.vue';
 //import Chart from '../chart/index.vue';
 import Chart from '../../../components/goods-chart/chart/index.vue'; // 暂用组件,待优化
 import { ComponentType } from '../../setup';
-import { handleSubcriteOnDemandQuote, handleQuotePriceColor, quoteChange, quoteAmplitude, quoteAmplituOfVibration } from '@/common/setup/table/tableQuote';
+import { handleSubcriteOnDemandQuote, handleQuotePriceColor, quoteChange, quoteAmplitude, quoteAmplituOfVibration, handleNoneValue } from '@/common/setup/table/tableQuote';
 
 export default defineComponent({
     emits: ['cancel', 'update'],
@@ -174,6 +196,7 @@ export default defineComponent({
             cancelAction,
             handleSubcriteOnDemandQuote,
             handleQuotePriceColor,
+            handleNoneValue,
             quoteChange,
             quoteAmplitude,
             quoteAmplituOfVibration,

+ 1 - 1
src/views/market/spot_trade/spot_trade_order_transaction/components/detail/index.vue

@@ -23,7 +23,7 @@
                  v-for="item in lststep"
                  :key="item.autoid">
               <!-- <div class="no">{{index + 1}}</div> -->
-              <div class="name">{{item.steptypename}}</div>
+              <div class="name">{{item.stepinfo}}</div>
               <div class="time">{{item.stepdate}}</div>
             </div>
           </a-col>

+ 2 - 2
src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/components/buy-sell-market/index.vue

@@ -14,11 +14,11 @@
         <div class="greenBar">
           <div class="numBlock">
             <div class="first">卖量</div>
-            <div class="last green">{{selectedRow.sellqty}}</div>
+            <div class="last green">{{selectedRow.askvolume ? selectedRow.askvolume : '--'}}</div>
           </div>
           <div class="numBlock">
             <div class="first">买量</div>
-            <div class="last white">{{selectedRow.buyqty}}</div>
+            <div class="last white">{{selectedRow.bidvolume ? selectedRow.bidvolume : '--'}}</div>
           </div>
         </div>
       </div>

+ 14 - 1
src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/components/delisting/index.vue

@@ -159,7 +159,7 @@ import { useTaAccount } from '@/common/setup/account';
 import { validateAction } from '@/common/setup/form';
 import { _closeModal } from '@/common/setup/modal/modal';
 import { useTradeRule } from '@/common/setup/trade';
-import { getGoodsAgreeunitByGoodsId } from '@/services/bus/goods';
+import { getGoodsAgreeunitByGoodsId, getQuoteDayInfoByCodeFindPrice } from '@/services/bus/goods';
 import { geLoginID_number } from '@/services/bus/login';
 import { getMarketByTradeMode, getMarketIdsByTradeMode } from '@/services/bus/market';
 import { QueryQuoteGoodsListRsp, QueryTjmdTodayAccountMarginReq, QueryTjmdTradeOrderDetailRsp } from '@/services/go/Tjmd/interface';
@@ -175,6 +175,7 @@ import { FormParam } from './interface';
 import { handleForm, useBlocksPrice, useBlocksNumber } from './setup';
 import { useTodayMargin } from '@/hooks/margin';
 import { getSelectedAccountId } from '@/services/bus/account';
+import Bus from '@/utils/eventBus/index';
 
 export default defineComponent({
     emits: ['cancel', 'update'],
@@ -235,6 +236,17 @@ export default defineComponent({
             }
             return result ? result.toFixed(2) : '--';
         };
+        // 估算价
+        // function getGuseetPrice() {
+        //     let result = '--';
+        //     const goodsPrice = getQuoteDayInfoByCodeFindPrice(props.selectedRow.refgoodscode);
+        //     console.log('goodsPrice', goodsPrice);
+        //     if (goodsPrice && goodsPrice !== '--') {
+        //         // 有实时行情价格
+        //         result = ((goodsPrice as number) + formState.PriceMove).toFixed(2);
+        //     }
+        //     return result;
+        // }
         // const { getMaxNum, getMoney, getMargin, getPrice } = handleNumAndPrice(props.selectedRow);
         function submit() {
             validateAction<FormParam>(formRef, formState).then((res) => {
@@ -282,6 +294,7 @@ export default defineComponent({
                 // }
                 requestResultLoadingAndInfo(diaoQiOrder, param, loading, ['摘牌求购成功', '摘牌求购失败:']).then(() => {
                     cancel(true);
+                    Bus.$emit('spotTrade', true);
                 });
             });
         }

+ 1 - 1
src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/components/detail/index.vue

@@ -23,7 +23,7 @@
                  v-for="item in lststep"
                  :key="item.autoid">
               <!-- <div class="no">{{index + 1}}</div> -->
-              <div class="name">{{item.steptypename}}</div>
+              <div class="name">{{item.stepinfo}}<span></span></div>
               <div class="time">{{item.stepdate}}</div>
             </div>
           </a-col>

+ 6 - 5
src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/components/post_buying/index.vue

@@ -217,12 +217,12 @@ export default defineComponent({
                 if (marginType === 1) {
                     if (getMoney()) {
                         // 履约保证金=挂牌金额*保证金比例
-                        result = (getMoney() * marginValue).toFixed(2);
+                        result = (Math.round(getMoney() * marginValue * 100) / 100).toString();
                     }
                 } else {
                     if (formState.OrderQty) {
                         // 履约保证金=挂牌数量*保证金固定值
-                        result = (formState.OrderQty * marginValue).toFixed(2);
+                        result = (Math.round(formState.OrderQty * marginValue * 100) / 100).toString();
                     }
                 }
             }
@@ -236,7 +236,7 @@ export default defineComponent({
             // 可用资金
             const temp = +canUseMoney();
             const money = temp > 0 ? temp : 0;
-            const price = isFloat() ? getQuoteDayInfoByCodeFindPrice(goodscode) : formState.FixedPrice;
+            const price = isFloat() ? getQuoteDayInfoByCodeFindPrice(props.selectedRow.refgoodscode) : formState.FixedPrice;
             if (marginType && money && price && price !== '--') {
                 // 保证金方式 1:比率 2:固定
                 if (marginType === 1) {
@@ -254,7 +254,8 @@ export default defineComponent({
         // 估算价
         function getPrice() {
             let result = '--';
-            const goodsPrice = getQuoteDayInfoByCodeFindPrice(props.selectedRow.goodscode);
+            const goodsPrice = getQuoteDayInfoByCodeFindPrice(props.selectedRow.refgoodscode);
+            console.log('goodsPrice', goodsPrice);
             if (goodsPrice && goodsPrice !== '--') {
                 // 有实时行情价格
                 result = ((goodsPrice as number) + formState.PriceMove).toFixed(2);
@@ -304,7 +305,7 @@ export default defineComponent({
                 if (isFloat()) {
                     // 浮动价
                     param.MarketMaxSub = res.PriceMove; // 基差
-                    param.OrderPrice = +getQuoteDayInfoByCodeFindPrice(goodscode)!;
+                    param.OrderPrice = +getQuoteDayInfoByCodeFindPrice(props.selectedRow.refgoodscode)!;
                 }
                 requestResultLoadingAndInfo(diaoQiOrder, param, loading, ['挂牌求购成功', '挂牌求购失败:']).then(() => {
                     cancel(true);

+ 1 - 1
src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/components/sell/index.vue

@@ -85,7 +85,7 @@ const columns = [
     {
         key: '3th',
         dataIndex: 'username',
-        title: '购买方',
+        title: '销售方',
         align: 'center',
         slots: {
             customRender: 'username',

+ 9 - 0
src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/components/setup.ts

@@ -17,6 +17,15 @@ export const useUserType = () => {
     return getUserAccountType() === UserType.investment
 }
 
+// 判断是否是 机构
+export const isInstitution = () => {
+    return getUserAccountType() === UserType.institution
+}
+// 判断是否是 投资者
+export const isInvestment = () => {
+    return getUserAccountType() === UserType.investment
+}
+
 // 交易账号
 export function useBlocksAccount<T extends { accountid: number | undefined }>(formState: UnwrapRef<T>) {
     // 资金账号

+ 2 - 2
src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/index.vue

@@ -112,14 +112,14 @@ export default defineComponent({
         };
 
         // 行情按需订阅
-        let stopSubcribe = handleSubcriteOnDemandQuote<RefGoodsList>(goodsList);
+        let stopSubcribe = handleSubcriteOnDemandQuote<RefGoodsList>(goodsList, 'refgoodscode');
         // 过滤标的合约
         function goodsChange(value: string) {
             filterGoodsList(value);
             // 停止上次订阅
             stopSubcribe();
             // 重新发起订阅
-            stopSubcribe = handleSubcriteOnDemandQuote<RefGoodsList>(goodsList);
+            stopSubcribe = handleSubcriteOnDemandQuote<RefGoodsList>(goodsList, 'refgoodscode');
         }
         return {
             isBottom,

+ 17 - 11
src/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/setup.ts

@@ -16,22 +16,28 @@ const allGoodsList = ref<RefGoodsList[]>([])
 export function findItemGoods(goodscode: string) {
     return refGoods.value.find(el => el.goodscode === goodscode)!
 }
+
+const { loading, queryTable } = queryTableList<QueryQuoteGoodsListRsp>();
+
+export function getSwapList() {
+    // 组装 参数
+    const marketids = getMarketIdsByTradeMode(TradeMode.DiaoQi)
+    const param: QueryQuoteGoodsListReq = {
+        usertype: getUserAccountType(),
+    }
+    if (marketids) {
+        param.marketids = marketids
+    }
+    return queryTable(queryQuoteGoodsList, param)
+}
+
 // 获取 商品掉期 商品列表
 export const useSwapList = () => {
-    const { loading, queryTable } = queryTableList<QueryQuoteGoodsListRsp>();
     // 行情商品
     const goodsList = ref<RefGoodsList[]>([])
     initData(() => {
-        // 组装 参数
-        const marketids = getMarketIdsByTradeMode(TradeMode.DiaoQi)
-        const param: QueryQuoteGoodsListReq = {
-            usertype: getUserAccountType(),
-        }
-        if (marketids) {
-            param.marketids = marketids
-        }
         // 开始查询 商品掉期
-        queryTable(queryQuoteGoodsList, param).then(res => {
+        getSwapList().then(res => {
             refGoods.value = res
             goodsList.value.length = 0
             allGoodsList.value.length = 0
@@ -109,7 +115,7 @@ export const columnsList = [
 export function getBtnList(isBuyAndSell: boolean) {
     const btnList: BtnListType[] = [
         { lable: '挂牌求购', code: 'PostBuying', className: 'operBtn' },
-        { lable: '详情', code: 'Detail', className: 'btnDeafault' },
+        // { lable: '详情', code: 'Detail', className: 'btnDeafault' },
     ];
     if (isBuyAndSell) {
         btnList.push({ lable: '买卖大厅', code: 'BuyAndSell', className: 'btnDeafault' })

+ 7 - 3
src/views/market/spot_trade/warehouse_pre_sale/warehouse_pre_sale_blocs/components/delisting/setup.ts

@@ -39,9 +39,13 @@ export function handleSpotWarrant(buyOrSell: BuyOrSell, selectedRow: QueryOrderQ
     if (buyOrSell === BuyOrSell.buy) {
         queryResultLoadingAndInfo(queryHoldLB, loading).then(res => {
             allWrHoldList.value = res
-            wrHoldList.value = res.filter((e: WrHoldLB) => e.wrfactortypeid === String(selectedRow.wrfactortypeid)).map((e: WrHoldLB) => {
-                const { wrholdeno, enableqty, ladingbillid, enumdicname, subnum } = e
-                return { id: ladingbillid, name: `${wrholdeno}(${enableqty}${enumdicname})`, subnum }
+            wrHoldList.value.length = 0
+            res.forEach(e => {
+                if (e.wrfactortypeid === String(selectedRow.wrfactortypeid)) {
+                    const { wrholdeno, enableqty, ladingbillid, enumdicname, subnum } = e
+                    const result = { id: ladingbillid, name: `${wrholdeno}(${enableqty}${enumdicname})`, subnum }
+                    wrHoldList.value.push(result)
+                }
             })
         })
     }

+ 7 - 3
src/views/market/spot_trade/warehouse_receipt_trade/warehouse_receipt_trade_blocs/components/delisting/setup.ts

@@ -41,9 +41,13 @@ export function handleSpotWarrant(buyOrSell: BuyOrSell, selectedRow: QueryOrderQ
     if (buyOrSell === BuyOrSell.buy) {
         queryResultLoadingAndInfo(queryHoldLB, loading).then(res => {
             allWrHoldList.value = res
-            wrHoldList.value = res.filter((e: WrHoldLB) => e.wrfactortypeid === String(selectedRow.wrfactortypeid)).map((e: WrHoldLB) => {
-                const { wrholdeno, enableqty, ladingbillid, enumdicname, subnum } = e
-                return { id: ladingbillid, name: `${wrholdeno}(${enableqty}${enumdicname})`, subnum }
+            wrHoldList.value.length = 0
+            res.forEach(el => {
+                if (el.wrfactortypeid === String(selectedRow.wrfactortypeid)) {
+                    const { wrholdeno, enableqty, ladingbillid, enumdicname, subnum } = el
+                    const result = { id: ladingbillid, name: `${wrholdeno}(${enableqty}${enumdicname})`, subnum }
+                    wrHoldList.value.push(result)
+                }
             })
         })
     }

+ 0 - 1
src/views/order/commodity_contract/components/commodity_contract_bargain/components/commodity_contract_bargain_submit_order/index.vue

@@ -30,7 +30,6 @@ export default defineComponent({
 
         function submit() {
             console.log(geLoginID_number());
-            debugger;
             const param: TradeHoldTransferApplyAuditReqType = {
                 ApplyID: props.selectedRow.applyid,
                 ApplyStatus: 3, // 1:撤销2:拒绝3:通过

+ 32 - 10
src/views/order/commodity_contract/components/commodity_contract_summary/components/commodity_contract_summary_deal_closed/index.vue

@@ -31,8 +31,9 @@
                     <a-checkbox @change="checkboxChange(item)"
                                 :value="item.tradeid"></a-checkbox>
                   </div>
-                  <div class="name">{{item.tradeid}}</div>
-                  <div class="date">{{formatTime(item.tradetime, 'd')}}</div>
+                  <div class="name">{{ item.tradeid }}
+                  </div>
+                  <div class="date">{{formatTime(item.expiredate, 'd')}}</div>
                 </div>
                 <div class="line2">
                   <div class="left">{{item.buyorsell === BuyOrSell.buy ? '买入' : '卖出'}}</div>
@@ -41,7 +42,8 @@
                     <div>{{item.holderprice}}</div>
                     <div>{{item.holderamount}}</div>
                   </div>
-                  <div class="right red">+100</div>
+                  <div class="right red">
+                    {{useProfit(item, goodscode)}}</div>
                 </div>
               </div>
             </a-checkbox-group>
@@ -65,7 +67,7 @@
             <a-col :span="24">
               <a-form-item label="平仓金额"
                            class="mb10 not-copy ">
-                <span class="white">50400.20</span>
+                <span class="white">{{getMoney()}}</span>
               </a-form-item>
             </a-col>
           </a-row>
@@ -104,8 +106,11 @@ import { message } from 'ant-design-vue';
 import Long from 'long';
 import { defineComponent, PropType } from 'vue';
 import { BargainList, FormState } from './interface';
-import { handleForm, useCheckd, usePrice } from './setup';
+import { handleForm, usePrice } from './setup';
 import { formatTime } from '@/common/methods';
+import { useProfit, useCheckd } from '../setup';
+import { QueryQuoteGoodsListRsp } from '@/services/go/Tjmd/interface';
+import { findGoodsCode } from '../../setup';
 
 export default defineComponent({
     name: ModalEnum.commodity_contract_summary_settlement,
@@ -120,10 +125,16 @@ export default defineComponent({
             type: Number as PropType<BuyOrSell>,
             default: BuyOrSell.buy,
         },
+        swapList: {
+            type: Array as PropType<QueryQuoteGoodsListRsp[]>,
+            default: [],
+        },
     },
     setup(props, context) {
         const { visible, cancel } = _closeModal(context);
         const { rules, formState, formRef } = handleForm();
+        const goodscode = findGoodsCode(props.selectedRow.goodsid, props.selectedRow.goodscode, props.swapList);
+
         // 选中逻辑
         const { checked, selected, checkGroupChange, checkboxChange } = useCheckd();
 
@@ -134,16 +145,24 @@ export default defineComponent({
             userid: getUserId(),
             goodsid: props.selectedRow.goodsid,
         };
+        // 平仓金额
+        function getMoney() {
+            let result = '--';
+            if (selected.value && formState.price) {
+                const { holderqty, agreeunit, decimalplace } = selected.value;
+                result = (+formState.price * holderqty * agreeunit).toFixed(decimalplace);
+            }
+            return result;
+        }
         queryTable(queryTradeHolderDetail, param).then((res) => {
             tableList.value = res.map((e, i) => {
-                if (i) {
-                    return { ...e, checked: false };
-                } else {
-                    // 默认勾选第一个
+                if (i === 0) {
                     checked.value = e.tradeid;
                     const result = { ...e, checked: true };
                     selected.value = result;
                     return result;
+                } else {
+                    return { ...e, checked: false };
                 }
             });
         });
@@ -185,6 +204,9 @@ export default defineComponent({
             checkboxChange,
             BuyOrSell,
             formatTime,
+            useProfit,
+            goodscode,
+            getMoney,
         };
     },
 });
@@ -249,7 +271,7 @@ export default defineComponent({
                     width: 100%;
                     height: 40px;
                     line-height: 40px;
-                    font-size: 16px;
+                    font-size: 12px;
                     color: @m-white6;
                     white-space: nowrap;
                     text-overflow: ellipsis;

+ 1 - 21
src/views/order/commodity_contract/components/commodity_contract_summary/components/commodity_contract_summary_deal_closed/setup.ts

@@ -1,7 +1,7 @@
 import { validateCommon } from "@/common/setup/validate";
 import { RuleObject } from "ant-design-vue/lib/form/interface";
 import { reactive, ref, UnwrapRef } from "vue";
-import { BargainList, FormState } from "./interface";
+import { FormState } from "./interface";
 
 export function handleForm() {
     const formRef = ref();
@@ -31,25 +31,5 @@ export function usePrice(formState: UnwrapRef<FormState>) {
     return { increasePirce, decreasePrice }
 }
 
-export function useCheckd() {
-    const checked = ref<string>();
-    const selected = ref<BargainList>()
-    function checkGroupChange(checkedValue: string[]) {
-        checked.value = checkedValue[checkedValue.length - 1];
-    }
-    function checkboxChange(item: BargainList) {
-        selected.value = item;
-    }
-    return { checked, selected, checkGroupChange, checkboxChange }
-}
-
-// 计算盈亏
-export function useProfit(item: BargainList) {
-    const { buyorsell, holderprice, agreeunit, holderqty } = item
-    // let result = '--'
-    // if(buyorsell === BuyOrSell.buy) {
 
-    // } else {
 
-    // }
-}

+ 53 - 22
src/views/order/commodity_contract/components/commodity_contract_summary/components/commodity_contract_summary_order_closed/index.vue

@@ -29,10 +29,15 @@
                 <div class="line1">
                   <div class>
                     <a-checkbox @change="checkboxChange(item)"
+                                :disabled="item.holderdays"
                                 :value="item.tradeid"></a-checkbox>
                   </div>
-                  <div class="name">{{ item.tradeid }}</div>
-                  <div class="date">{{ formatTime(item.tradetime, 'd') }}</div>
+                  <div class="name">{{ item.tradeid }}
+                    <template v-if="item.holderdays">
+                      <span class="red">{{item.holderdays}}</span>天后可平
+                    </template>
+                  </div>
+                  <div class="date">{{ formatTime(item.expiredate, 'd') }}</div>
                 </div>
                 <div class="line2">
                   <div class="left">{{ item.buyorsell === BuyOrSell.buy ? '买入' : '卖出' }}</div>
@@ -41,32 +46,27 @@
                     <div>{{ item.holderprice }}</div>
                     <div>{{ item.holderamount }}</div>
                   </div>
-                  <div class="right red">+100</div>
+                  <div class="right red">
+                    {{useProfit(item, goodscode)}}</div>
                 </div>
               </div>
             </a-checkbox-group>
           </div>
         </div>
         <div class="fixedBtns">
-          <a-row :gutter="24"
-                 v-if="false">
+          <a-row :gutter="24">
             <a-col :span="24"
                    class="mt12">
               <a-form-item label="估算价"
-                           name="price"
                            class="inputIconBox mb10 not-copy">
-                <a-input-number class="commonInput not-copy"
-                                v-model:value="formState.price"
-                                style="width: 200px"
-                                :min="0" />
-                <MinusOutlined @click="decreasePrice" />
-                <PlusOutlined @click="increasePirce" />
+                <!-- 估算价取标的商品行情的最新价 -->
+                <span class="white">{{getQuoteDayInfoByCodeFindPrice(goodscode)}}</span>
               </a-form-item>
             </a-col>
             <a-col :span="24">
               <a-form-item label="估算金额"
                            class="mb10 not-copy">
-                <span class="white">50400.20</span>
+                <span class="white">{{selected ? getMoney() : '--'}}</span>
               </a-form-item>
             </a-col>
           </a-row>
@@ -105,8 +105,12 @@ import { message } from 'ant-design-vue';
 import Long from 'long';
 import { defineComponent, PropType } from 'vue';
 import { BargainList, FormState } from './interface';
-import { handleForm, useCheckd, usePrice } from './setup';
+import { handleForm, usePrice } from './setup';
 import { formatTime } from '@/common/methods';
+import { useProfit, useCheckd } from '../setup';
+import { QueryQuoteGoodsListRsp } from '@/services/go/Tjmd/interface';
+import { findGoodsCode } from '../../setup';
+import { getQuoteDayInfoByCodeFindPrice } from '@/services/bus/goods';
 
 export default defineComponent({
     name: ModalEnum.commodity_contract_summary_settlement,
@@ -121,8 +125,14 @@ export default defineComponent({
             type: Number as PropType<BuyOrSell>,
             default: BuyOrSell.buy,
         },
+        swapList: {
+            type: Array as PropType<QueryQuoteGoodsListRsp[]>,
+            default: [],
+        },
     },
     setup(props, context) {
+        const goodscode = findGoodsCode(props.selectedRow.goodsid, props.selectedRow.goodscode, props.swapList);
+
         const { visible, cancel } = _closeModal(context);
         const { rules, formState, formRef } = handleForm();
         // 选中逻辑
@@ -135,17 +145,33 @@ export default defineComponent({
             userid: getUserId(),
             goodsid: props.selectedRow.goodsid,
         };
+        // 估算金额=估算价*平仓数量*合约单位。
+        function getMoney() {
+            let result = '--';
+            const lastPrice = getQuoteDayInfoByCodeFindPrice(goodscode);
+            if (lastPrice && lastPrice !== '--' && selected.value) {
+                const { holderqty, agreeunit, decimalplace } = selected.value;
+                result = (+lastPrice * holderqty * agreeunit).toFixed(decimalplace);
+            }
+            return result;
+        }
 
         queryTable(queryTradeHolderDetail, param).then((res) => {
+            let index = 0; // 默认勾选
             tableList.value = res.map((e, i) => {
-                if (i) {
-                    return { ...e, checked: false };
+                if (index === i) {
+                    if (e.holderdays === 0) {
+                        checked.value = e.tradeid;
+                        const result = { ...e, checked: true };
+                        selected.value = result;
+                        index = -1;
+                        return result;
+                    } else {
+                        index++;
+                        return { ...e, checked: false };
+                    }
                 } else {
-                    // 默认勾选第一个
-                    checked.value = e.tradeid;
-                    const result = { ...e, checked: true };
-                    selected.value = result;
-                    return result;
+                    return { ...e, checked: false };
                 }
             });
         });
@@ -193,6 +219,11 @@ export default defineComponent({
             checkboxChange,
             BuyOrSell,
             formatTime,
+            useProfit,
+            goodscode,
+            getQuoteDayInfoByCodeFindPrice,
+            getMoney,
+            selected,
         };
     },
 });
@@ -257,7 +288,7 @@ export default defineComponent({
                     width: 100%;
                     height: 40px;
                     line-height: 40px;
-                    font-size: 16px;
+                    font-size: 12px;
                     color: @m-white6;
                     white-space: nowrap;
                     text-overflow: ellipsis;

+ 1 - 24
src/views/order/commodity_contract/components/commodity_contract_summary/components/commodity_contract_summary_order_closed/setup.ts

@@ -1,7 +1,7 @@
 import { validateCommon } from "@/common/setup/validate";
 import { RuleObject } from "ant-design-vue/lib/form/interface";
 import { reactive, ref, UnwrapRef } from "vue";
-import { BargainList, FormState } from "./interface";
+import { FormState } from "./interface";
 
 export function handleForm() {
     const formRef = ref();
@@ -30,26 +30,3 @@ export function usePrice(formState: UnwrapRef<FormState>) {
     }
     return { increasePirce, decreasePrice }
 }
-
-export function useCheckd() {
-    const checked = ref<string>();
-    const selected = ref<BargainList>()
-    function checkGroupChange(checkedValue: string[]) {
-        checked.value = checkedValue[checkedValue.length - 1];
-    }
-    function checkboxChange(item: BargainList) {
-        selected.value = item;
-    }
-    return { checked, selected, checkGroupChange, checkboxChange }
-}
-
-// 计算盈亏
-export function useProfit(item: BargainList) {
-    const { buyorsell, holderprice, agreeunit, holderqty } = item
-    // let result = '--'
-    // if(buyorsell === BuyOrSell.buy) {
-
-    // } else {
-
-    // }
-}

+ 6 - 2
src/views/order/commodity_contract/components/commodity_contract_summary/components/commodity_contract_summary_transfer/setup.ts

@@ -1,3 +1,5 @@
+import { validateCommon } from "@/common/setup/validate";
+import { RuleObject } from "ant-design-vue/lib/form/interface";
 import { reactive, ref, UnwrapRef } from "vue";
 import { FormState } from "./interface";
 
@@ -8,10 +10,12 @@ export function handleForm() {
         num: 0,
         goodsid: 0,
     })
+    const v_num = async (rule: RuleObject, value: number) => {
+        return validateCommon(value, '请输入挂牌价');
+    };
     const rules = {
         price: [
-            { require, message: '请输入挂牌价', trigger: 'blur', type: 'number' },
-            { message: '挂牌价不能小于1', min: 1, type: 'number' }
+            { require, trigger: 'blur', type: 'number', validator: v_num },
         ],
         num: [
             { require, message: '请输入挂牌数量', trigger: 'blur', type: 'number' },

+ 31 - 0
src/views/order/commodity_contract/components/commodity_contract_summary/components/setup.ts

@@ -0,0 +1,31 @@
+import { BuyOrSell } from "@/common/constants/enumCommon";
+import { getQuoteDayInfoByCodeFindPrice } from "@/services/bus/goods";
+import { ref } from "vue";
+import { BargainList } from "./commodity_contract_summary_deal_closed/interface";
+
+// 计算盈亏
+// 浮动盈亏	持仓单:
+// 收益权=(最新价-持仓价)*持仓数量*合约单位*方向(买[1]:卖[-1])(*汇率)
+// 所有权=(最新价*持仓数量*合约单位(*汇率) - 持仓金额)
+export function useProfit(item: BargainList, goodcode: string) {
+    // 最新价
+    const lastPrice = getQuoteDayInfoByCodeFindPrice(goodcode);
+    if (lastPrice && lastPrice !== '--') {
+        const { holderprice, holderqty, agreeunit, decimalplace, buyorsell } = item
+        const temp = buyorsell === BuyOrSell.buy ? 1 : -1
+        return ((+lastPrice - holderprice) * holderqty * agreeunit * temp).toFixed(decimalplace)
+    } else {
+        return lastPrice
+    }
+}
+export function useCheckd() {
+    const checked = ref<string>();
+    const selected = ref<BargainList>()
+    function checkGroupChange(checkedValue: string[]) {
+        checked.value = checkedValue[checkedValue.length - 1];
+    }
+    function checkboxChange(item: BargainList) {
+        selected.value = item;
+    }
+    return { checked, selected, checkGroupChange, checkboxChange }
+}

+ 31 - 12
src/views/order/commodity_contract/components/commodity_contract_summary/index.vue

@@ -47,6 +47,7 @@
                v-if="componentId"
                :selectedRow="selectedRow"
                :tableList="tableList"
+               :swapList="swapList"
                @cancel="closeComponent"></component>
   </section>
 </template>
@@ -68,6 +69,12 @@ import { useHolderprice, useProfitloss } from '@/services/bus/holdPosition';
 import { queryTradePosition } from '@/services/go/ermcp/order';
 import { QueryTradePositionRsp } from '@/services/go/ermcp/order/interface';
 import { getBuyOrSellName, getChannelBuildName } from '@/common/constants/enumsName';
+import { isInvestment } from '@/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/components/setup';
+import { useIsDiaoQi, findGoodsCode } from './setup';
+import { getSwapList } from '@/views/market/spot_trade/spot_trade_order_transaction/spot_trade_order_transaction_swap/setup';
+import { ref } from 'vue';
+import { QueryQuoteGoodsListRsp } from '@/services/go/Tjmd/interface';
+import Bus from '@/utils/eventBus/index';
 
 const tabColumns = [
     {
@@ -197,23 +204,30 @@ export default defineComponent({
         const { subscribeAction } = handleSubcriteQuote();
         // 交割商品
         handleDeliveryRelation();
-
+        const swapList = ref<QueryQuoteGoodsListRsp[]>([]);
         // 挂牌点选商品
         //         const { deliverGoods, getQuoteList, goodsList, } = handleDeliveryRelation([1, 3]);
         //         // 参考行情商品
         // const goodsList = getQutoGoodsByTradeMode(TradeMode.quote99);
+
         // 获取列表数据
         const queryTableAction = () => {
-            queryTable(queryTradePosition).then((res) => {
-                const result: string[] = [];
-                res.forEach((el) => {});
-                const goodsList = res.map((el) => {
-                    return el.goodscode;
+            Promise.all([queryTable(queryTradePosition), getSwapList()]).then((res) => {
+                swapList.value = res[1];
+                tableList.value = res[0];
+                const goodsSet = new Set<string>();
+                res[0].forEach((el) => {
+                    // 商品掉期取参考行情最新价,挂牌点选取自己行情的最新价
+                    const goodscode = findGoodsCode(el.goodsid, el.goodscode, swapList.value);
+                    if (goodscode) {
+                        goodsSet.add(goodscode);
+                    }
                 });
                 //  行情订阅
-                subscribeAction(goodsList);
+                subscribeAction([...goodsSet]);
             });
         };
+        Bus.$on('spotTrade', queryTableAction);
         // 表格通用逻辑
         const param: ComposeOrderTableParam = {
             queryFn: queryTableAction,
@@ -221,16 +235,20 @@ export default defineComponent({
             recordList: getRecordItemTab(),
         };
         // 现价
-        function getLastprice({ goodscode, decimalplace }: QueryTradePositionRsp) {
-            const lastPrice = getQuoteDayInfoByCodeFindPrice(goodscode);
-            return lastPrice === '--' ? lastPrice : Number(lastPrice).toFixed(decimalplace);
+        function getLastprice(record: QueryTradePositionRsp) {
+            let result: number | string = '--';
+            const goodscode = findGoodsCode(record.goodsid, record.goodscode, swapList.value);
+            if (goodscode) {
+                result = getQuoteDayInfoByCodeFindPrice(goodscode);
+            }
+            return result;
         }
-
         function handleBtnList(record: QueryTradePositionRsp, btnList: BtnListType[]) {
             // 挂牌点选
             const listing = ['commodity_contract_summary_transfer', 'commodity_contract_summary_settlement'];
             // 贸易圈
-            const diaoqi = ['commodity_contract_summary_deal_closed', 'commodity_contract_summary_order_closed'];
+            // 只有机构 才有平仓
+            const diaoqi = isInvestment() ? ['commodity_contract_summary_deal_closed', 'commodity_contract_summary_order_closed'] : ['commodity_contract_summary_deal_closed'];
             const arr = findGoodsTradeModeById(record.goodsid) === TradeMode.DiaoQi ? diaoqi : listing;
             return btnList.filter((e) => arr.includes(e.code));
         }
@@ -246,6 +264,7 @@ export default defineComponent({
             handleBtnList,
             tabColumns,
             getBuyOrSellName,
+            swapList,
         };
     },
 });

+ 16 - 0
src/views/order/commodity_contract/components/commodity_contract_summary/setup.ts

@@ -0,0 +1,16 @@
+// 获取最新价
+
+import { TradeMode } from "@/common/constants/enumCommon";
+import { findGoodsTradeModeById } from "@/services/bus/goods";
+import { QueryQuoteGoodsListRsp } from "@/services/go/Tjmd/interface";
+
+export const useIsDiaoQi = (goodsid: number) => {
+    return findGoodsTradeModeById(goodsid) === TradeMode.DiaoQi
+}
+
+
+// 商品掉期取参考行情最新价,挂牌点选取自己行情的最新价
+export function findGoodsCode(goodsid: number, goodscode: string, swapList: QueryQuoteGoodsListRsp[]) {
+    const result = useIsDiaoQi(goodsid) ? swapList.find((el) => goodsid === goodsid)?.refgoodscode : goodscode;
+    return result ? result : ''
+}

+ 133 - 0
src/views/order/funding_information/components/funding_information_funding_summary/components/funding_information_funding_summary_recharge/index.vue

@@ -0,0 +1,133 @@
+<template>
+  <Drawer :title="'充值'"
+          :placement="'right'"
+          :visible="visible"
+          class="delistingBottom"
+          @cancel="cancel">
+    <div class="listed">
+      <a-form class="inlineForm dialogForm"
+              ref="formRef"
+              :model="formState"
+              :rules="rules">
+        <div class="formBar">
+          <a-row :gutter="24">
+            <a-col :span="24">
+              <a-form-item label="充值金额"
+                           name="price">
+                <a-input-number class="commonInput"
+                                v-model:value="formState.price"
+                                style="width: 100%" />
+              </a-form-item>
+            </a-col>
+            <a-col :span="24">
+              <a-form-item label="凭证">
+                <UploadImg :visible="visible"
+                           @upload="uploadImgAction"></UploadImg>
+              </a-form-item>
+            </a-col>
+            <a-col :span="24">
+              <span class="red">充值提现时间段:{{getApplyInOrOutTime()}}</span>
+            </a-col>
+          </a-row>
+        </div>
+        <a-row :gutter="24">
+          <a-col :span="24"
+                 class="fixedBtns">
+            <a-form-item class="btnCenter">
+              <a-button class="listedBtn"
+                        :loading="loading"
+                        :disabled="loading"
+                        @click="submit">提交
+              </a-button>
+              <a-button key="submit"
+                        class="ml10 cancelBtn"
+                        @click="cancel">取消</a-button>
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+  </Drawer>
+</template>
+
+<script lang="ts">
+import Drawer from '@/common/components/drawer/index.vue';
+import UploadImg from '@/common/components/uploadImg/index.vue';
+import { ModalEnum } from '@/common/constants/modalNameEnum';
+import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
+import { validateAction } from '@/common/setup/form';
+import { _closeModal } from '@/common/setup/modal/modal';
+import { getUploadImg } from '@/common/setup/upload';
+import { Taaccount } from '@/services/go/TaAccount/interface';
+import { buildInMoney } from '@/services/socket/bank';
+import { BuildInMoneyReq, buildOutMoneyReqParam } from '@/services/socket/bank/interface';
+import { message } from 'ant-design-vue';
+import { defineComponent, PropType, ref } from 'vue';
+import { getApplyInOrOutTime, useSignBank } from '../setup';
+import { FormState } from './interface';
+import { handleForm } from './setup';
+
+export default defineComponent({
+    name: 'funding_information_funding_summary_recharge',
+    components: { Drawer, UploadImg },
+    emits: ['cancel', 'update'],
+    props: {
+        selectedRow: {
+            type: Object as PropType<Taaccount>,
+            default: {},
+        },
+    },
+    setup(props, context) {
+        const { visible, cancel } = _closeModal(context);
+        const loading = ref<boolean>(false);
+        const { rules, formState, formRef } = handleForm();
+        // 附件
+        const { getFirstImg, uploadImgAction } = getUploadImg();
+        // 签约银行
+        const { hasSignBank, getSignBank } = useSignBank();
+        function submit() {
+            if (!hasSignBank()) {
+                message.error('请先签约银行!');
+                return;
+            }
+            const url = getFirstImg();
+            if (!url) {
+                message.error('请先上传凭证');
+                return;
+            }
+            validateAction<FormState>(formRef, formState).then((res) => {
+                const signBank = getSignBank()!;
+                const extendInfo = { certificatephotourl: url };
+                const param: BuildInMoneyReq = {
+                    ExtOperatorID: Date.now(), // 外部操作流水号
+                    AccountCode: signBank.accountcode,
+                    Currency: signBank.currency,
+                    CusBankID: signBank.cusbankid,
+                    BankAccoutNum: signBank.bankaccountno2,
+                    BankAccoutName: signBank.bankaccountname2,
+                    Amount: res.price,
+                    extend_info: JSON.stringify(extendInfo),
+                };
+                requestResultLoadingAndInfo(buildInMoney, param, loading, ['充值成功', '充值失败:']).then(() => {
+                    cancel(true);
+                });
+            });
+        }
+        return {
+            visible,
+            cancel,
+            submit,
+            loading,
+            rules,
+            formState,
+            formRef,
+            getFirstImg,
+            uploadImgAction,
+            getApplyInOrOutTime,
+        };
+    },
+});
+</script>
+
+<style lang="less" scoped>
+</style>;

+ 4 - 0
src/views/order/funding_information/components/funding_information_funding_summary/components/funding_information_funding_summary_recharge/interface.ts

@@ -0,0 +1,4 @@
+export interface FormState {
+    price: number,
+    url: string,
+}

+ 21 - 0
src/views/order/funding_information/components/funding_information_funding_summary/components/funding_information_funding_summary_recharge/setup.ts

@@ -0,0 +1,21 @@
+import { validateCommon } from "@/common/setup/validate";
+import { RuleObject } from "ant-design-vue/lib/form/interface";
+import { reactive, ref, UnwrapRef } from "vue";
+import { FormState } from "./interface";
+
+export function handleForm() {
+    const formRef = ref();
+    const formState: UnwrapRef<FormState> = reactive({
+        price: 0,
+        url: '',
+    })
+    const v_price = async (rule: RuleObject, value: number) => {
+        return validateCommon(value, '请输入充值金额');
+    };
+    const rules = {
+        price: [
+            { require, trigger: 'blur', type: 'number', validator: v_price },
+        ]
+    }
+    return { rules, formState, formRef }
+}

+ 160 - 0
src/views/order/funding_information/components/funding_information_funding_summary/components/funding_information_funding_summary_withdraw/index.vue

@@ -0,0 +1,160 @@
+<template>
+  <Drawer :title="'提现'"
+          :placement="'right'"
+          :visible="visible"
+          class="delistingBottom"
+          @cancel="cancel">
+    <div class="listed">
+      <a-form class="inlineForm dialogForm"
+              ref="formRef"
+              :model="formState"
+              :rules="rules">
+        <div class="formBar">
+          <a-row :gutter="24">
+            <a-col :span="24">
+              <a-form-item label="提现金额"
+                           name="price">
+                <a-input-number class="commonInput"
+                                v-model:value="formState.price"
+                                style="width: 100%" />
+              </a-form-item>
+            </a-col>
+            <a-col :span="24">
+              <a-form-item label="可提现金额"
+                           name="price">
+                <span class="white ml8"> {{selectedRow.currentbalance}} <span class="blue"
+                        @click="chooseAll">全部</span></span>
+              </a-form-item>
+
+            </a-col>
+            <a-col :span="24">
+              <a-form-item label="银行卡号">
+                <span class="white ml8">{{getItemSignBankValue('bankname')}}</span>
+              </a-form-item>
+            </a-col>
+            <a-col :span="24">
+              <a-form-item label="开会银行">
+                <span class="white ml8">{{getItemSignBankValue('bankaccountno')}}</span>
+              </a-form-item>
+            </a-col>
+            <a-col :span="24">
+              <a-form-item label="姓名">
+                <span class="white ml8">{{getItemSignBankValue('accountname')}}</span>
+              </a-form-item>
+            </a-col>
+            <a-col :span="24">
+              <a-form-item label="支行名称">
+                <span class="white ml8">{{getItemSignBankValue('branchbankname')}}</span>
+              </a-form-item>
+            </a-col>
+            <a-col :span="24">
+              <span class="red">充值提现时间段:{{getApplyInOrOutTime()}}</span>
+            </a-col>
+          </a-row>
+        </div>
+        <a-row :gutter="24">
+          <a-col :span="24"
+                 class="fixedBtns">
+            <a-form-item class="btnCenter">
+              <a-button class="listedBtn"
+                        :loading="loading"
+                        :disabled="loading"
+                        @click="submit">提交
+              </a-button>
+              <a-button key="submit"
+                        class="ml10 cancelBtn"
+                        @click="cancel">取消</a-button>
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+  </Drawer>
+</template>
+
+<script lang="ts">
+import Drawer from '@/common/components/drawer/index.vue';
+import UploadImg from '@/common/components/uploadImg/index.vue';
+import { ModalEnum } from '@/common/constants/modalNameEnum';
+import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo';
+import { validateAction } from '@/common/setup/form';
+import { _closeModal } from '@/common/setup/modal/modal';
+import { getUploadImg } from '@/common/setup/upload';
+import { QueryBankAccountSignQsp } from '@/services/go/ermcp/qhj/interface';
+import { Taaccount } from '@/services/go/TaAccount/interface';
+import { buildOutMoney } from '@/services/socket/bank';
+import { buildOutMoneyReqParam } from '@/services/socket/bank/interface';
+import { message } from 'ant-design-vue';
+import { defineComponent, PropType, ref } from 'vue';
+import { getApplyInOrOutTime, useSignBank } from '../setup';
+import { FormState } from './interface';
+import { handleForm } from './setup';
+
+export default defineComponent({
+    name: 'funding_information_funding_summary_withdraw',
+    components: { Drawer, UploadImg },
+    emits: ['cancel', 'update'],
+    props: {
+        selectedRow: {
+            type: Object as PropType<Taaccount>,
+            default: {},
+        },
+    },
+    setup(props, context) {
+        const { visible, cancel } = _closeModal(context);
+        const loading = ref<boolean>(false);
+        const { rules, formState, formRef } = handleForm();
+        // 签约银行
+        const { hasSignBank, getSignBank, getItemSignBankValue } = useSignBank();
+        function chooseAll() {
+            formState.price = props.selectedRow.currentbalance;
+        }
+        function submit() {
+            if (!hasSignBank()) {
+                message.error('请先签约银行!');
+                return;
+            }
+            const max = props.selectedRow.currentbalance;
+            if (max) {
+                if (formState.price > max) {
+                    message.error(`提现金额不能超过${max}`);
+                    return;
+                }
+            } else {
+                message.error('没有余额可提现');
+                return;
+            }
+            validateAction<FormState>(formRef, formState).then((res) => {
+                const signBank = getSignBank()!;
+                const param: buildOutMoneyReqParam = {
+                    AccountCode: signBank.accountcode,
+                    Currency: signBank.currency,
+                    CusBankID: signBank.cusbankid,
+                    BankAccoutNum: signBank.bankaccountno2,
+                    BankAccoutName: signBank.bankaccountname2,
+                    Amount: res.price,
+                    extend_info: '',
+                };
+                requestResultLoadingAndInfo(buildOutMoney, param, loading, ['提现成功', '提现失败:']).then(() => {
+                    cancel(true);
+                });
+            });
+        }
+        return {
+            visible,
+            cancel,
+            submit,
+            loading,
+            rules,
+            formState,
+            formRef,
+            getApplyInOrOutTime,
+            getItemSignBankValue,
+            chooseAll,
+        };
+    },
+});
+</script>
+
+<style lang="less" scoped>
+</style>;

+ 4 - 0
src/views/order/funding_information/components/funding_information_funding_summary/components/funding_information_funding_summary_withdraw/interface.ts

@@ -0,0 +1,4 @@
+export interface FormState {
+    price: number,
+    url: string,
+}

+ 21 - 0
src/views/order/funding_information/components/funding_information_funding_summary/components/funding_information_funding_summary_withdraw/setup.ts

@@ -0,0 +1,21 @@
+import { validateCommon } from "@/common/setup/validate";
+import { RuleObject } from "ant-design-vue/lib/form/interface";
+import { reactive, ref, UnwrapRef } from "vue";
+import { FormState } from "./interface";
+
+export function handleForm() {
+    const formRef = ref();
+    const formState: UnwrapRef<FormState> = reactive({
+        price: 0,
+        url: '',
+    })
+    const v_price = async (rule: RuleObject, value: number) => {
+        return validateCommon(value, '请输入提现金额');
+    };
+    const rules = {
+        price: [
+            { require, trigger: 'blur', type: 'number', validator: v_price },
+        ]
+    }
+    return { rules, formState, formRef }
+}

+ 46 - 0
src/views/order/funding_information/components/funding_information_funding_summary/components/setup.ts

@@ -0,0 +1,46 @@
+import { getSystemParamValueByCode } from "@/hooks/system";
+import { queryBankAccountSign } from "@/services/go/ermcp/qhj";
+import { QueryBankAccountSignQsp } from "@/services/go/ermcp/qhj/interface";
+import { ref } from "vue";
+
+// 获取 充值提现时间段
+export const getApplyInOrOutTime = () => {
+    let result = '--';
+    const beginTime = getSystemParamValueByCode('012')
+    const endTime = getSystemParamValueByCode('013')
+    if (beginTime && endTime) {
+        result = beginTime + '~' + endTime
+    }
+    return result
+}
+
+// 获取 签约银行
+export const useSignBank = () => {
+    // 签约银行列表
+    const signBanks = ref<QueryBankAccountSignQsp[]>([])
+    if (signBanks.value.length === 0) {
+        queryBankAccountSign().then(res => {
+            // 4: 已签约
+            signBanks.value = res.filter(e => e.signstatus === 4)
+        })
+    }
+    function hasSignBank() {
+        return signBanks.value.length > 0
+    }
+    function getSignBank() {
+        let result = null
+        if (hasSignBank()) {
+            result = signBanks.value[0]
+        }
+        return result
+    }
+    function getItemSignBankValue(key: keyof QueryBankAccountSignQsp) {
+        let result: string | number = '--'
+        const signBank = getSignBank();
+        if (signBank) {
+            result = signBank[key]
+        }
+        return result
+    }
+    return { signBanks, hasSignBank, getSignBank, getItemSignBankValue }
+}

+ 45 - 3
src/views/order/funding_information/components/funding_information_funding_summary/index.vue

@@ -18,7 +18,7 @@
         <BtnList :btnList="btnList"
                  :record="record"
                  class="btn-list-sticky"
-                 @click="openComponent" />
+                 @click="openComponentAction" />
       </template>
       <template #balance="{record}">
         <span>{{canUseMoney(record)}}</span>
@@ -50,6 +50,7 @@
 </template>
 
 <script lang="ts">
+import { BtnListType } from '@/common/components/btnList/interface';
 import { enumOrderComponents } from '@/common/constants/enumOrderComponents';
 import { getTaacountStatus } from '@/common/constants/enumsName';
 import { BtnList, defineComponent, queryTableList } from '@/common/export/commonTable';
@@ -64,13 +65,17 @@ import { QueryTradePositionRsp } from '@/services/go/ermcp/order/interface';
 import { getTaAccounts } from '@/services/go/TaAccount';
 import { GetTaAccountsReq, Taaccount } from '@/services/go/TaAccount/interface';
 import Bus from '@/utils/eventBus/index';
-import { ref } from 'vue';
+import { message } from 'ant-design-vue';
+import { defineAsyncComponent, ref } from 'vue';
+import { useSignBank } from './components/setup';
 import { tableColumns, useHazardRates } from './setup';
 
 export default defineComponent({
     name: enumOrderComponents.funding_information_funding_summary,
     components: {
         BtnList,
+        funding_information_funding_summary_recharge: defineAsyncComponent(() => import('./components/funding_information_funding_summary_recharge/index.vue')),
+        funding_information_funding_summary_withdraw: defineAsyncComponent(() => import('./components/funding_information_funding_summary_withdraw/index.vue')),
     },
     setup() {
         // 表格列表数据
@@ -99,8 +104,32 @@ export default defineComponent({
             tableName: 'table_pcweb_spot_trade_bottom_funding_info_summary',
             recordList: getRecordItemTab(),
         };
+
+        const {
+            contextMenu,
+            openContext,
+            closeContext, // 右键
+            columns,
+            registerColumn,
+            updateColumn, // 表头
+            expandedRowKeys,
+            selectedRow,
+            Rowclick, // 表格折腾面板数据与单击、双击事件
+            componentId,
+            closeComponent,
+            openComponent, // 控制异步组件
+            btnList, // 表格按钮
+        } = handleComposeOrderTable<Taaccount>(param);
+        // 签约银行
+        const { hasSignBank } = useSignBank();
+        function openComponentAction(item: BtnListType, record: Taaccount) {
+            if (hasSignBank()) {
+                openComponent(item, record);
+            } else {
+                message.error('请先签约银行!');
+            }
+        }
         return {
-            ...handleComposeOrderTable<Taaccount>(param),
             loading,
             tableList,
             getCanUseMoney,
@@ -112,6 +141,19 @@ export default defineComponent({
             getTaacountStatus,
             netWorth,
             canUseMoney,
+            contextMenu,
+            openContext,
+            closeContext, // 右键
+            columns,
+            registerColumn,
+            updateColumn, // 表头
+            expandedRowKeys,
+            selectedRow,
+            Rowclick, // 表格折腾面板数据与单击、双击事件
+            componentId,
+            closeComponent,
+            openComponentAction, // 控制异步组件
+            btnList, // 表格按钮
         };
     },
 });

+ 6 - 8
src/views/order/funding_information/components/funding_information_funding_summary/setup.ts

@@ -1,9 +1,8 @@
-import APP from '@/services';
+import { hasSystemParam } from '@/hooks/system';
 import { useHolderprice, useProfitloss } from '@/services/bus/holdPosition';
 import { getMarketTradePropertyByGoodsId } from '@/services/bus/market';
 import { QueryTradePositionRsp } from '@/services/go/ermcp/order/interface';
 import { Taaccount } from '@/services/go/TaAccount/interface';
-import { Systemparam } from '@/services/go/useInfo/interface';
 import { Ref } from 'vue';
 
 export const tableColumns = [
@@ -105,8 +104,7 @@ export const useHazardRates = (positions: Ref<QueryTradePositionRsp[]>) => {
     function getDecimalplace() {
         return positions.value.length > 0 ? positions.value[0].decimalplace : 2
     }
-    // 获取系统参数
-    const getSystemParam = (paramcode: string, value: string) => APP.getRef('systemParams').value.find((param: Systemparam) => param.paramcode === paramcode)?.paramvalue === value
+
     // 获取当前资金账号对应的头寸
     function getTaaccountPosition(accountid: number) {
         return positions.value.filter(e => e.accountid === accountid)
@@ -141,7 +139,7 @@ export const useHazardRates = (positions: Ref<QueryTradePositionRsp[]>) => {
         const profitloss = handleProfitloss(taaccount, false) as number
 
         // 市值
-        const price = getSystemParam('087', '1') ? handleHoldPrice(accountid) : 0
+        const price = hasSystemParam('087', '1') ? handleHoldPrice(accountid) : 0
         // 风险净值	根据系统参数“087 风险净值是否加上市值 - 0:不加 1:加“
         // 0. 风险净值=期末余额+浮动盈亏(收益权)-其他冻结-出金冻结
         // 1. 风险净值=期末余额+市值+浮动盈亏(收益权)-其他冻结-出金冻结
@@ -154,7 +152,7 @@ export const useHazardRates = (positions: Ref<QueryTradePositionRsp[]>) => {
     function netWorth(taaccount: Taaccount) {
         const { accountid, currentbalance, otherfreezemargin, outamountfreeze } = taaccount
         // 浮动盈亏
-        const free = getSystemParam('037', '1') ? (otherfreezemargin + outamountfreeze) : 0
+        const free = hasSystemParam('037', '1') ? (otherfreezemargin + outamountfreeze) : 0
 
         const profitloss = handleProfitloss(taaccount, false) as number
         // 市值
@@ -171,7 +169,7 @@ export const useHazardRates = (positions: Ref<QueryTradePositionRsp[]>) => {
         //   风险率	根据系统参数“132   风险率计算公式”:
         // 1. 风险率=占用/风险净值
         // 2. 风险率=(占用-授信金额)/(风险净值-授信金额)
-        const credit = getSystemParam('132', '1') ? 0 : mortgagecredit
+        const credit = hasSystemParam('132', '1') ? 0 : mortgagecredit
         let result = 0
         if (riskValue && (riskValue - credit)) {
             result = (usedmargin - credit) / (riskValue - credit)
@@ -193,7 +191,7 @@ export const useHazardRates = (positions: Ref<QueryTradePositionRsp[]>) => {
             result = currentbalance + profitloss - freeze
         } else {
             // *系统参数”113“(当日浮动盈利是否可用) 0:不可用 1:可用
-            const isUse = getSystemParam('113', '1')
+            const isUse = hasSystemParam('113', '1')
             if (isUse) {
                 // 账户总浮动盈亏为正 且 113 = 1 :=期末余额+总浮动盈亏-占用-冻结-其它冻结-手续费冻结-出金冻结
                 result = currentbalance + profitloss - freeze

+ 8 - 3
src/views/order/pre_sale_warehouse_receipt/components/pre_sale_warehouse_receipt_bargain/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <!-- 现货仓单 挂单 -->
+  <!-- 现货仓单 议价 -->
   <section>
     <a-table :columns="columns"
              class="srcollYTable expandLeftTable"
@@ -14,7 +14,7 @@
              :data-source="tableList">
       <!-- 额外的展开行 -->
       <template #expandedRowRender="{ record }">
-        <BtnList :btnList="btnList"
+        <BtnList :btnList="handleBtnLsit(record)"
                  :record="record"
                  class="btn-list-sticky"
                  @click="openComponent" />
@@ -106,7 +106,11 @@ export default defineComponent({
             openComponent, // 控制异步组件
             btnList, // 表格按钮
         } = handleComposeOrderTable<QueryWrTradeBargainApplyQsp>(param);
-
+        function handleBtnLsit(record: QueryWrTradeBargainApplyQsp) {
+            // applystatus: number;//申请状态(议价状态) - 1:待确认 2:已确认 3:已拒绝 4:已撤销 5:系统撤销 6:处理失败 7:确认中
+            const arr = [2, 3];
+            return arr.includes(record.applystatus) ? btnList : [];
+        }
         return {
             contextMenu,
             openContext,
@@ -126,6 +130,7 @@ export default defineComponent({
             expandIcon,
             formatTime,
             getBarmaginApplyStatus,
+            handleBtnLsit,
         };
     },
 });

+ 1 - 1
src/views/order/pre_sale_warehouse_receipt/components/pre_sale_warehouse_receipt_pending_order/components/detail/index.vue

@@ -23,7 +23,7 @@
                  v-for="item in lststep"
                  :key="item.autoid">
               <!-- <div class="no">{{index + 1}}</div> -->
-              <div class="name">{{item.steptypename}}</div>
+              <div class="name">{{item.stepinfo}}</div>
               <div class="time">{{item.stepdate}}</div>
             </div>
           </a-col>

+ 7 - 2
src/views/order/spot_warran/components/spot_warrant_bargain/index.vue

@@ -14,7 +14,7 @@
              :data-source="tableList">
       <!-- 额外的展开行 -->
       <template #expandedRowRender="{ record }">
-        <BtnList :btnList="btnList"
+        <BtnList :btnList="handleBtnLsit(record)"
                  :record="record"
                  class="btn-list-sticky"
                  @click="openComponent" />
@@ -107,7 +107,11 @@ export default defineComponent({
             openComponent, // 控制异步组件
             btnList, // 表格按钮
         } = handleComposeOrderTable<QueryWrTradeBargainApplyQsp>(param);
-
+        function handleBtnLsit(record: QueryWrTradeBargainApplyQsp) {
+            // applystatus: number;//申请状态(议价状态) - 1:待确认 2:已确认 3:已拒绝 4:已撤销 5:系统撤销 6:处理失败 7:确认中
+            const arr = [2, 3];
+            return arr.includes(record.applystatus) ? btnList : [];
+        }
         return {
             contextMenu,
             openContext,
@@ -127,6 +131,7 @@ export default defineComponent({
             expandIcon,
             formatTime,
             getBarmaginApplyStatus,
+            handleBtnLsit,
         };
     },
 });

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

@@ -23,7 +23,7 @@
                  v-for="item in lststep"
                  :key="item.autoid">
               <!-- <div class="no">{{index + 1}}</div> -->
-              <div class="name">{{item.steptypename}}</div>
+              <div class="name">{{item.stepinfo}}</div>
               <div class="time">{{item.stepdate}}</div>
             </div>
           </a-col>

+ 3 - 3
src/views/search/search_document_records/search_pre_sale_warehouse_receipt/search_pre_sale_warehouse_receipt_commission_record/index.vue

@@ -16,7 +16,7 @@
         >
             <!--  委托状态-->
             <template #wrtradeorderstatus="{ record }">
-                <a>{{ getWrTradeOrderStatusName(record.wrtradeorderstatus) }}</a>
+                <a>{{ getOrderStatusName(record.wrtradeorderstatus) }}</a>
             </template>
             <!-- 挂牌类型 -->
             <template #wrtradetype="{ record }">
@@ -34,7 +34,7 @@ import { QueryWrOrderDetailReq, WrOrderDetail } from '@/services/go/wrtrade/inte
 import { getRecordItemTab } from '@/common/setup/order/orderData';
 import { handleComposeOrderTable } from '@/common/setup/table/compose';
 import { ComposeOrderTableParam } from '@/common/setup/table/interface';
-import { getWrOrderTypeName, getWrTradeOrderStatusName } from '@/common/constants/enumsName';
+import { getWrOrderTypeName, getOrderStatusName } from '@/common/constants/enumsName';
 import { BtnListType } from '@/common/components/btnList/interface';
 import { expandIcon } from '@/common/setup/table/clolumn';
 import { EnumRouterName } from '@/common/constants/enumRouterName';
@@ -62,7 +62,7 @@ export default defineComponent({
             loading,
             tableList,
             expandIcon,
-            getWrTradeOrderStatusName,
+            getOrderStatusName,
             getWrOrderTypeName,
         };
     },

+ 3 - 3
src/views/search/search_document_records/search_spot_warrant/search_spot_warrant_listing_record/index.vue

@@ -14,7 +14,7 @@
              :data-source="tableList">
       <!--  委托状态-->
       <template #wrtradeorderstatus="{ record }">
-        <a>{{ getWrTradeOrderStatusName(record.wrtradeorderstatus) }}</a>
+        <a>{{ getOrderStatusName(record.wrtradeorderstatus) }}</a>
       </template>
       <!-- 挂牌类型 -->
       <template #wrtradetype="{ record }">
@@ -33,7 +33,7 @@ import { QueryWrOrderDetailReq, WrOrderDetail } from '@/services/go/wrtrade/inte
 import { getRecordItemTab } from '@/common/setup/order/orderData';
 import { handleComposeOrderTable } from '@/common/setup/table/compose';
 import { ComposeOrderTableParam } from '@/common/setup/table/interface';
-import { getWrOrderTypeName, getWrTradeOrderStatusName } from '@/common/constants/enumsName';
+import { getWrOrderTypeName, getOrderStatusName } from '@/common/constants/enumsName';
 import { BtnListType } from '@/common/components/btnList/interface';
 import { expandIcon } from '@/common/setup/table/clolumn';
 import { EnumRouterName } from '@/common/constants/enumRouterName';
@@ -61,7 +61,7 @@ export default defineComponent({
             ...handleComposeOrderTable<WrOrderDetail>(param),
             loading,
             tableList,
-            getWrTradeOrderStatusName,
+            getOrderStatusName,
             getWrOrderTypeName,
             expandIcon,
         };

+ 1 - 1
src/views/search/search_financing_inquiry/search_financing_inquiry_apply_order/index.vue

@@ -32,7 +32,7 @@
       </template>
       <!-- 费用 -->
       <template #interestsettlevalue="{ record }">
-        <a>{{ getInterestrateModeName(record.interestratemode, record.interestrate) }}</a>
+        <a>{{ getInterestrateModeName(record.interestratemode, record.interestrate, record.enumdicname) }}</a>
       </template>
 
     </a-table>

+ 64 - 49
src/views/search/search_performance_template/search_performance_template_sub/index.vue

@@ -1,53 +1,58 @@
 <template>
-  <!-- 履约模板查询 -->
-  <div class="tltRight">
-    <BtnList :btnList="headBtns"
-             @click="openComponent" />
-  </div>
-  <section>
-    <a-table :columns="columns"
-             class="srcollYTable expandLeftTable"
-             :scroll="{ x: '100%', y: 'calc(100vh - 163px)' }"
-             :pagination="false"
-             :loading="loading"
-             :expandedRowKeys="expandedRowKeys"
-             :customRow="Rowclick"
-             :expandIcon="expandIcon"
-             :expandIconAsCell="false"
-             rowKey="key"
-             :data-source="tableList">
-      <!-- 状态 -->
-      <template #handle="{ record }">
-        <BtnList :btnList="tableBtns"
-                 :record="record"
-                 class="btn-list-sticky"
-                 @click="openComponent" />
-      </template>
+    <!-- 履约模板查询 -->
+    <div class="tltRight">
+        <BtnList :btnList="headBtns" @click="openComponent" />
+    </div>
+    <section>
+        <a-table
+            :columns="columns"
+            class="srcollYTable expandLeftTable"
+            :scroll="{ x: '100%', y: 'calc(100vh - 163px)' }"
+            :pagination="false"
+            :loading="loading"
+            :expandedRowKeys="expandedRowKeys"
+            :customRow="Rowclick"
+            :expandIcon="expandIcon"
+            :expandIconAsCell="false"
+            rowKey="key"
+            :data-source="tableList"
+        >
+            <!-- 状态 -->
+            <template #handle="{ record }">
+                <BtnList
+                    :btnList="tableBtns"
+                    :record="record"
+                    class="btn-list-sticky"
+                    @click="openComponent"
+                />
+            </template>
 
-      <template #createtime="{ record }">
-        <span>{{ formatTime(record.createtime) }}</span>
-      </template>
-    </a-table>
-    <!-- 明细 -->
-    <Description v-if="visible"
-                 @close="closeDrawer"
-                 :tabList="tabList">
-      <a-table :columns="detailColumns"
-               class="topTable"
-               :pagination="false"
-               rowKey="key"
-               :data-source="getDetailTalbeList()"
-               :scroll="{ x: '100%', y: 'calc(100vh - 163px)' }">
-        <template #stepvalue="{ text }">
-          <span>{{ text ? (text * 100).toFixed(0) : text }}</span>
-        </template>
-      </a-table>
-    </Description>
-    <component :is="componentId"
-               v-if="componentId"
-               :selectedRow="selectedRow"
-               @cancel="closeComponent"></component>
-  </section>
+            <template #createtime="{ record }">
+                <span>{{ formatTime(record.createtime) }}</span>
+            </template>
+        </a-table>
+        <!-- 明细 -->
+        <Description v-if="visible" @close="closeDrawer" :tabList="tabList">
+            <a-table
+                :columns="detailColumns"
+                class="topTable"
+                :pagination="false"
+                rowKey="key"
+                :data-source="getDetailTalbeList()"
+                :scroll="{ x: '100%', y: 'calc(100% - 36px)' }"
+            >
+                <template #stepvalue="{ text }">
+                    <span>{{ text ? (text * 100).toFixed(0) : text }}</span>
+                </template>
+            </a-table>
+        </Description>
+        <component
+            :is="componentId"
+            v-if="componentId"
+            :selectedRow="selectedRow"
+            @cancel="closeComponent"
+        ></component>
+    </section>
 </template>
 
 <script lang="ts">
@@ -161,5 +166,15 @@ export default defineComponent({
 });
 </script>
 
-<style lang="less">
+<style lang="less" scoped>
+/deep/.topTable {
+    .ant-table {
+        .ant-table-content {
+            height: 100%;
+            .ant-table-scroll {
+                height: 100%;
+            }
+        }
+    }
+}
 </style>;

+ 6 - 63
swagger-to-ts/swagger.ts

@@ -1,65 +1,8 @@
 export interface Name{
-    accountid	:number;//交易账号(资金账号)
-allfriendsflag	:number;//是否全好友可见 - number;
-//:否 1:是
-amount	:number;//挂牌金额 = 委托数量  固定价或升贴水
-buyorsell	:number;//买卖 - number;
-//:买 1:卖(挂牌类型 买为采购 卖为销售)
-canbargain	:number;//是否可议价 - number;
-//:不可 1:可
-cancelqty	:number;//撤销数量
-canpart	:number;//是否允许部份摘牌 - number;
-//:不允许(要求整单) 1:允许(可以不整单)
-delistminqty	:number;//起摘数量
-deliverygoodscode	:string;//品种代码
-deliverygoodsid	:number;//品种ID
-deliverygoodsname	:string;//品种名称
-deliverymonth	:string;//交收月
-enumdicname	:string;//单位名称
-fixedprice	:number;//固定价格 - [挂牌]
-freezemargin	:number;//冻结保证金(保证金)
-futupricemove	:number;//期货升贴水
-futushow	:string;//期货合约/升贴水
-goodscode	:string;//期货合约
-goodsid	:number;//期货商品id
-goodsname	:string;//商品名称
-haswr	:number;//是否有仓单-卖方 - number;
-//:无仓单 1:有仓单
-isspecified	:number;//是否指定对手 - number;
-//:不指定 1:指定 - [挂牌]
-ladingbillid	:string;//提单ID(2number;
-//8+Unix秒时间戳(1number;
-//位)+xxxxxx)
-marginvalue	:number;//保证金设置值(履约保证金)
-marketid	:number;//市场ID
-matchusername	:string;//对手方名称(当ISSPECIFIED=1时,有值,指定朋友的名称)
-minivalue	:number;//现货商品最小变动值
-optioncompare	:string;//选择项比较串【{选择项ID}+{冒号}+选择项值 } ,逗号分隔,头尾加逗号】-- 所有选择项拼接,用于比较
-orderqty	:number;//委托数量
-ordertime	:string;//委托时间(挂牌时间)
-performancetemplateid	:number;//履约模板id
-pricemove	:number;//升贴水(浮动价时填写) - [挂牌]
-taname	:string;//交易用户名称(资金账号名称)
-tradedate	:string;//交易日(yyyyMMdd)
-tradeprice	:number;//成交价格 - [摘牌] (浮动价 ((商品1价格商品1价格系数+升贴水) 商品1重量系数 + 商品2价格商品2价格系数+商品2升贴水) 商品2重量系数 …) 委托单价格系数 + 委托单升贴水)
-tradeqty	:number;//成交数量
-userid	:number;//用户ID
-validtime	:string;//挂牌有效期
-warehouseid	:number;//仓库ID
-warehousename	:string;//仓库名称
-wrfactortypeid	:string;//仓单要素类型ID(212+Unix秒时间戳(1number;
-//位)+xxxxxx)
-wrfactortypename	:string;//仓单要素类型名称(选择项要素的名称合并显示,逗号分隔)
-wrpricetype	:number;//价格方式 - 1:固定价 2-浮动价 - [挂牌]
-wrstandardcode	:string;//现货商品代码
-wrstandardid	:number;//现货商品ID
-wrstandardname	:string;//商品名称
-wrtradeorderid	:string;//仓单贸易委托单ID(32number;
-//+Unix秒时间戳(1number;
-//位)+xxxxxx)
-wrtradeorderstatus	:number;//委托状态 - 1:委托请求 2:待冻结 3:委托成功 4:委托失败 5:配对成功 6:已撤 7:部成 8:已成 9:部成部撤 1number;
-//:成交失败 11:委托拒绝 12:经过摘牌(先摘后挂专用) 13:冻结成功(通道交易专用) 14:通道已撤 15:通道部成部撤 16:成交失败违约(荷兰式竞拍专用) 17:冻结PD成功 18:冻结PD失败 19:冻结能量成功 2number;
-//:冻结能量失败 21:预约已报价 22:过期未付 23:优惠券处理中 24:仓单生成失败 25:首付扣款失败 26:履约失败 27:撤单解冻贷款失败
-wrtradetype	:number;//仓单贸易类型 - 1:挂牌 2:摘牌 3:提货卖(文化中国) 4:提货买(文化中国)
-wrtypename	:string;//商品
+    bankid	:string;//银行ID
+bankname	:string;//银行名称
+clearbankno	:string;//清算系统银行编号
+orderindex	:number;//排序顺序
+status	:number;//状态 - number;
+//:正常 1:注销
 }

+ 10 - 145
swagger-to-ts/swagger.txt

@@ -1,151 +1,16 @@
 {
-    accountid	integer
-交易账号(资金账号)
+    bankid	string
+银行ID
 
-allfriendsflag	integer
-是否全好友可见 - 0:否 1:是
+bankname	string
+银行名称
 
-amount	number
-挂牌金额 = 委托数量 * 固定价或升贴水
+clearbankno	string
+清算系统银行编号
 
-buyorsell	integer
-买卖 - 0:买 1:卖(挂牌类型 买为采购 卖为销售)
+orderindex	integer
+排序顺序
 
-canbargain	integer
-是否可议价 - 0:不可 1:可
-
-cancelqty	number
-撤销数量
-
-canpart	integer
-是否允许部份摘牌 - 0:不允许(要求整单) 1:允许(可以不整单)
-
-delistminqty	integer
-起摘数量
-
-deliverygoodscode	string
-品种代码
-
-deliverygoodsid	integer
-品种ID
-
-deliverygoodsname	string
-品种名称
-
-deliverymonth	string
-交收月
-
-enumdicname	string
-单位名称
-
-fixedprice	number
-固定价格 - [挂牌]
-
-freezemargin	number
-冻结保证金(保证金)
-
-futupricemove	number
-期货升贴水
-
-futushow	string
-期货合约/升贴水
-
-goodscode	string
-期货合约
-
-goodsid	integer
-期货商品id
-
-goodsname	string
-商品名称
-
-haswr	integer
-是否有仓单-卖方 - 0:无仓单 1:有仓单
-
-isspecified	integer
-是否指定对手 - 0:不指定 1:指定 - [挂牌]
-
-ladingbillid	string
-提单ID(208+Unix秒时间戳(10位)+xxxxxx)
-
-marginvalue	number
-保证金设置值(履约保证金)
-
-marketid	integer
-市场ID
-
-matchusername	string
-对手方名称(当ISSPECIFIED=1时,有值,指定朋友的名称)
-
-minivalue	integer
-现货商品最小变动值
-
-optioncompare	string
-选择项比较串【{选择项ID}+{冒号}+选择项值 } ,逗号分隔,头尾加逗号】-- 所有选择项拼接,用于比较
-
-orderqty	number
-委托数量
-
-ordertime	string
-委托时间(挂牌时间)
-
-performancetemplateid	integer
-履约模板id
-
-pricemove	number
-升贴水(浮动价时填写) - [挂牌]
-
-taname	string
-交易用户名称(资金账号名称)
-
-tradedate	string
-交易日(yyyyMMdd)
-
-tradeprice	number
-成交价格 - [摘牌] (浮动价 ((商品1价格商品1价格系数+升贴水) 商品1重量系数 + 商品2价格商品2价格系数+商品2升贴水) 商品2重量系数 …)* 委托单价格系数 + 委托单升贴水)
-
-tradeqty	number
-成交数量
-
-userid	integer
-用户ID
-
-validtime	string
-挂牌有效期
-
-warehouseid	integer
-仓库ID
-
-warehousename	string
-仓库名称
-
-wrfactortypeid	string
-仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)
-
-wrfactortypename	string
-仓单要素类型名称(选择项要素的名称合并显示,逗号分隔)
-
-wrpricetype	integer
-价格方式 - 1:固定价 2-浮动价 - [挂牌]
-
-wrstandardcode	string
-现货商品代码
-
-wrstandardid	integer
-现货商品ID
-
-wrstandardname	string
-商品名称
-
-wrtradeorderid	string
-仓单贸易委托单ID(320+Unix秒时间戳(10位)+xxxxxx)
-
-wrtradeorderstatus	integer
-委托状态 - 1:委托请求 2:待冻结 3:委托成功 4:委托失败 5:配对成功 6:已撤 7:部成 8:已成 9:部成部撤 10:成交失败 11:委托拒绝 12:经过摘牌(先摘后挂专用) 13:冻结成功(通道交易专用) 14:通道已撤 15:通道部成部撤 16:成交失败违约(荷兰式竞拍专用) 17:冻结PD成功 18:冻结PD失败 19:冻结能量成功 20:冻结能量失败 21:预约已报价 22:过期未付 23:优惠券处理中 24:仓单生成失败 25:首付扣款失败 26:履约失败 27:撤单解冻贷款失败
-
-wrtradetype	integer
-仓单贸易类型 - 1:挂牌 2:摘牌 3:提货卖(文化中国) 4:提货买(文化中国)
-
-wrtypename	string
-商品
+status	integer
+状态 - 0:正常 1:注销
 }

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików