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

企业风管8期-套期项目

li.shaoyi 3 éve
szülő
commit
85509f0a23
30 módosított fájl, 817 hozzáadás és 208 törlés
  1. 6 0
      src/@next/components/base/tab-component/index.less
  2. 3 0
      src/services/go/ermcp/exposure/interface.ts
  3. 81 1
      src/services/go/ermcp/hedgedItem/index.ts
  4. 224 4
      src/services/go/ermcp/hedgedItem/interface.ts
  5. 2 2
      src/services/proto/hedgedItem/interface.ts
  6. 9 8
      src/views/business/plan/components/close/index.vue
  7. 17 12
      src/views/hedgeditem/exposure/components/futures/index.vue
  8. 17 12
      src/views/hedgeditem/exposure/components/plan/index.vue
  9. 14 13
      src/views/hedgeditem/exposure/components/position/index.vue
  10. 17 12
      src/views/hedgeditem/exposure/components/spot/index.vue
  11. 15 9
      src/views/hedgeditem/exposure/list/index.vue
  12. 21 12
      src/views/hedgeditem/futures/in/components/bind/form.ts
  13. 40 8
      src/views/hedgeditem/futures/in/components/bind/index.vue
  14. 1 1
      src/views/hedgeditem/futures/out/index.vue
  15. 4 4
      src/views/hedgeditem/spot/contract/components/bind/form.ts
  16. 1 1
      src/views/hedgeditem/spot/contract/components/bind/index.vue
  17. 84 23
      src/views/hedgeditem/spot/plan/components/bind/form.ts
  18. 49 33
      src/views/hedgeditem/spot/plan/components/bind/index.vue
  19. 33 0
      src/views/hedgeditem/spot/plan/components/filter/index.vue
  20. 63 1
      src/views/hedgeditem/spot/plan/index.vue
  21. 2 2
      src/views/hedgeditem/trade/components/add/form.ts
  22. 14 14
      src/views/hedgeditem/trade/components/add/index.vue
  23. 17 9
      src/views/hedgeditem/trade/components/ending/index.vue
  24. 3 3
      src/views/hedgeditem/trade/components/futures/index.vue
  25. 2 2
      src/views/hedgeditem/trade/components/plan/index.vue
  26. 2 2
      src/views/hedgeditem/trade/components/position/index.vue
  27. 2 2
      src/views/hedgeditem/trade/components/spot/index.vue
  28. 29 9
      src/views/hedgeditem/trade/finish/index.vue
  29. 37 9
      src/views/hedgeditem/trade/running/index.vue
  30. 8 0
      src/views/iframe/setup.ts

+ 6 - 0
src/@next/components/base/tab-component/index.less

@@ -1,4 +1,10 @@
 .mtp-tab-component {
     display       : flex;
     flex-direction: column;
+
+    &.table-detail {
+        height    : 35%;
+        transition: height 300ms;
+        margin-top: 2px;
+    }
 }

+ 3 - 0
src/services/go/ermcp/exposure/interface.ts

@@ -109,6 +109,9 @@ export interface ErmcpExposurePostion {
     goodsname: string;//商品名称
     middlegoodsid: number;//套保商品id
     ydqty: number;//昨日持仓
+    middlegoodsname: string; // 套保商品名称
+    middlegoodscode: string; // 套保商品代码
+    curhedgeqty: number; // 期货套期量 = 当前持仓期货合约单位期货品种系数
 }
 
 

+ 81 - 1
src/services/go/ermcp/hedgedItem/index.ts

@@ -1,6 +1,7 @@
 import { getUserId } from "@/services/bus/user";
 import { commonSearch_go } from '@/services/go/index';
 import {
+    Ermcp8RunningHedgeditemReq,
     Ermcp2HedgedItemReq,
     Ermcp2HedgedItemRsp,
     ERMCPJRLinkPosReq,
@@ -18,10 +19,33 @@ import {
     UnLinkSpotContractReq,
     UnLinkSpotContractRsp,
     Ermcp8EnableHedgeditemReq,
-    Ermcp8EnableHedgeditemRsp
+    Ermcp8EnableHedgeditemRsp,
+    Ermcp2AreaExposureReq,
+    Ermcp2AreaExposureRsp,
+    Ermcp2StockSpotChangeLogReq,
+    Ermcp2StockSpotChangeLogRsp,
+    Ermcp2HedgedItemsDetailReq,
+    Ermcp2HedgedItemsDetailRsp,
+    PatradeLinkDetailReq,
+    PatradeLinkDetailRsp,
+    UnLinkErmcpHedgePlanReq,
+    UnLinkErmcpHedgePlanRsp,
 } from './interface'
 
 /**
+ * 查询执行中项目查询信息
+ * @param req 
+ * @returns 
+ */
+export function queryErmcp8RunningHedgeditem(req: Ermcp8RunningHedgeditemReq): Promise<Ermcp2HedgedItemRsp[]> {
+    req.userid = getUserId();
+    return commonSearch_go('/Ermcp8/QueryErmcp8RunningHedgeditem', req).catch((err) => {
+        throw new Error(`
+        查询执行中项目查询信息: ${err}`);
+    })
+}
+
+/**
  * 查询被套期项目信息
  * @param req 
  * @returns 
@@ -110,6 +134,18 @@ export function queryUnLinkSpotContract(req: UnLinkSpotContractReq): Promise<UnL
     })
 }
 
+
+/**
+ * 未关联购销计划
+ * @param req 
+ * @returns 
+ */
+export function queryUnLinkErmcpHedgePlan(req: UnLinkErmcpHedgePlanReq): Promise<UnLinkErmcpHedgePlanRsp[]> {
+    return commonSearch_go('/Ermcp8/QueryUnLinkErmcpHedgePlan', req).catch((err) => {
+        throw new Error(`未关联购销计划: ${err}`);
+    })
+}
+
 /**
  * 可关联项目查询
  * @param req 
@@ -119,4 +155,48 @@ export function queryErmcp8EnableHedgeditem(req: Ermcp8EnableHedgeditemReq): Pro
     return commonSearch_go('/Ermcp8/QueryErmcp8EnableHedgeditem', req).catch((err) => {
         throw new Error(`可关联项目查询: ${err}`);
     })
+}
+
+/**
+ * 企业敞口查询
+ * @param req 
+ * @returns 
+ */
+export function queryErmcp2AreaExposure(req: Ermcp2AreaExposureReq): Promise<Ermcp2AreaExposureRsp[]> {
+    return commonSearch_go('/Ermcp8/QueryErmcp2AreaExposure', req).catch((err) => {
+        throw new Error(`企业敞口查询: ${err}`);
+    })
+}
+
+/**
+ * 敞口明细 - 现货变动明细查询
+ * @param req 
+ * @returns 
+ */
+export function queryErmcp2StockSpotChangeLog(req: Ermcp2StockSpotChangeLogReq): Promise<Ermcp2StockSpotChangeLogRsp[]> {
+    return commonSearch_go('/Ermcp8/QueryErmcp2StockSpotChangeLog', req).catch((err) => {
+        throw new Error(`敞口明细 - 现货变动明细查询: ${err}`);
+    })
+}
+
+/**
+ * 敞口明细 - 计划变动明细
+ * @param req 
+ * @returns 
+ */
+export function queryErmcp2HedgedItemsDetail(req: Ermcp2HedgedItemsDetailReq): Promise<Ermcp2HedgedItemsDetailRsp[]> {
+    return commonSearch_go('/Ermcp8/QueryErmcp2HedgedItemsDetail', req).catch((err) => {
+        throw new Error(`敞口明细 - 计划变动明细: ${err}`);
+    })
+}
+
+/**
+ * 敞口明细 - 期货变动明细
+ * @param req 
+ * @returns 
+ */
+export function queryPatradeLinkDetail(req: PatradeLinkDetailReq): Promise<PatradeLinkDetailRsp[]> {
+    return commonSearch_go('/Ermcp8/QueryPatradeLinkDetail', req).catch((err) => {
+        throw new Error(`敞口明细 - 期货变动明细: ${err}`);
+    })
 }

+ 224 - 4
src/services/go/ermcp/hedgedItem/interface.ts

@@ -1,10 +1,17 @@
 /**
+ * 查询执行中项目查询信息请求
+ */
+export interface Ermcp8RunningHedgeditemReq {
+    userid: string; // 用户ID
+}
+
+/**
  * 查询被套期项目信息请求
  */
 export interface Ermcp2HedgedItemReq {
     userid: string; // 用户ID
-    hedgedtype: number; // 套期类型 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
-    hedgeditemstatus: number; // 项目状态 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
+    hedgedtype?: number; // 套期类型 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
+    hedgeditemstatus?: number; // 项目状态 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
 }
 
 /**
@@ -304,19 +311,21 @@ export interface InternalEnableTradeDetailReq {
  */
 export interface InternalEnableTradeDetailRsp {
     areauserid: number; // 企业ID
+    agreeunit: number; // 合约乘数
+    convertratio: number; // 品种系数
     deliverygoodscode: string; // 现货品种代码
     deliverygoodsid: number; // 现货品种ID(SEQ_DELIVERYGOODS)
     deliverygoodsname: string; // 现货品种名称
     futurehedgeqty: number; // [已关联数量]期货持仓套期量
     goodsid: number; // 期货合约ID
     hedgeditemnum: string; // 项目编号
+    hedgeditemid: string; // 被套期项目ID
     unexehedgeqty: number; // 未执行套期量 = 未执行现货量折算系数 (1/(1+增值税)) * 套期比例(项目上)
     unexespotqty: number; // 未执行现货量
     wrstandardcode: string; // 现货品类代码
     wrstandardid: number; // 现货品类ID(SEQ_WRSTANDARD)
     wrstandardname: string; // 现货品类名称
     relatedlot?: number; // 本次关联手数
-    relatedqty?: number; // 本次关联数量
 }
 
 /**
@@ -392,6 +401,54 @@ export interface UnLinkSpotContractRsp {
 }
 
 /**
+ * 未关联购销计划请求
+ */
+export interface UnLinkErmcpHedgePlanReq {
+    areauserid: number; // 企业ID
+    contracttype?: number; // 计划类型 - 1:采购 -1:销售
+    hedgeplanno?: string; // 计划编号,模糊查询
+    wrstandardname?: string; // 现货商品,模糊查询
+}
+
+/**
+ * 未关联购销计划响应
+ */
+export interface UnLinkErmcpHedgePlanRsp {
+    accountid: number; // 期货账户ID - 作废
+    accountname: string; // 交易用户
+    applyid: number; // 申请人
+    applysrc: number; // 申请来源 - 1:管理端 2:终端
+    applytime: string; // 申请时间
+    areauserid: number; // [企业ID]机构ID
+    auditid: number; // 审核人
+    auditremark: string; // 审核备注
+    auditsrc: number; // 审核来源 - 1:管理端 2:终端
+    audittime: string; // 审核时间
+    audittradedate: string; // 审核交易日(yyyyMMdd)
+    biztype: number; // 业务类型 - 1:套保
+    contracttype: number; // 计划类型 - 1:采购 -1:销售
+    convertfactor: number; // 标仓系数 - 作废
+    createtime: string; // 创建时间
+    currencyid: number; // 结算币种ID - 作废
+    deliverygoodsid: number; // 现货品种ID
+    enumdicname: string; // 结算币种
+    hedgeplanid: number; // 套保计划ID(601+Unix秒时间戳(10位)+xxxxxx)
+    hedgeplanno: string; // [计划编号]套保计划编号,模糊查询
+    hedgeplanstatus: number; // [状态]套保计划状态 - 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
+    isrelated: number; // 是否已关联计划项目 - 0:否 1:是
+    planqty: number; // [计划量]计划数量
+    plantime: string; // 计划时间
+    producttype: number; // 产品类型 - 1:标准仓单 2:等标 3:非标
+    remark: string; // 备注
+    spotgoodsdesc: string; // 商品型号
+    tradedate: string; // 交易日(yyyyMMdd)
+    tradeuserid: number; // 交易用户ID
+    updatetime: string; // 更新时间
+    wrstandardid: number; // 现货商品ID
+    wrstandardname: string; // 现货商品,模糊查询
+}
+
+/**
  * 可关联项目查询请求
  */
 export interface Ermcp8EnableHedgeditemReq {
@@ -404,11 +461,174 @@ export interface Ermcp8EnableHedgeditemReq {
  */
 export interface Ermcp8EnableHedgeditemRsp {
     accountname: string; // 套期主体
-    hedgeditemid: number; // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
+    hedgeditemid: string; // 被套期项目ID(624+Unix秒时间戳(10位)+xxxxxx)
     hedgeditemname: string; // 项目名称
     hedgeditemnum: string; // 项目编号
     hedgedtype: number; // 套期类型 - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
     planenddate: string; // 计划结束日期
     planstartdate: string; // 计划开始日期
     relatedqty?: number; // 关联数量
+}
+
+/**
+ * 企业敞口查询请求
+ */
+export interface Ermcp2AreaExposureReq {
+    userid: number; // 用户ID
+}
+
+/**
+ * 企业敞口查询响应
+ */
+export interface Ermcp2AreaExposureRsp {
+    areauserid: number; // 所属机构
+    enumdicname: string; // 单位
+    futureqty: number; // 期货套期量
+    goodsunitid: number; // 单位ID
+    hedgedspotexposure: number; // 被套期现货敞口量
+    hedgedspratio: number; // 套期期现比例 = 期货套期量/被套期现货敞口量
+    hedgedtotalexposure: number; // 套期敞口量 = 被套期现货敞口量+期货套期量
+    hedgeplanqty: number; // 套期计划量
+    hedgespotqty: number; // 被套期现货量
+    middlegoodsid: number; // 套保品种
+    middlegoodsname: string; // 套保品种名称
+    orifutureqty: number; // 期初期货套期量
+    orihedgedspotexposure: number; // 期初被套期现货敞口量
+    orihedgedtotalexposure: number; // 期初套期敞口量
+    orihedgeplanqty: number; // 期初套期计划量
+    orihedgespotqty: number; // 期初被套期现货量
+    orispotexposure: number; // 期初现货敞口量
+    orispotqty: number; // 期初现货总量
+    oritotalexposure: number; // 期初总敞口量
+    spotexposure: number; // 现货敞口量
+    spotqty: number; // 现货总量
+    spratio: number; // 总期现比例 = 期货套期量/现货敞口量
+    totalexposure: number; // 总敞口量 = 现货敞口量 + 期货套期量
+    updatetime: string; // 更新时间 --DATE
+    totalexposurechange: number; // 总敞口变动量
+    hedgedtotalexposourechange: number; // 被套期敞口变动量
+    spotqtychange: number; // 现货变动量
+    hedgeplanqtychange: number; // 计划变动量
+    futureqtychange: number; // 期货变动量
+}
+
+/**
+ * 敞口明细 - 现货变动明细查询请求
+ */
+export interface Ermcp2StockSpotChangeLogReq {
+    userid: number; // 用户ID
+    middlegoodsid: number; // 套保品种ID
+}
+
+/**
+ * 敞口明细 - 现货变动明细查询响应
+ */
+export interface Ermcp2StockSpotChangeLogRsp {
+    accountname: string; // 套期主体
+    aftervalue: number; // 现货量
+    beforevalue: number; // 变更前现货量
+    contracttype: number; // 现货合同类型 - 1:采购 -1:销售
+    createtime: string; // 创建时间
+    customerusername: string; // 对手方
+    deliverygoodsid: number; // 现货品种ID
+    exetype: number; // 执行类型 - 1:采购合同 2:销售合同 3:生产入库 4:生产出库
+    logid: number; // 流水ID(604+Unix秒时间戳(10位)+xxxxxx)
+    logvalue: number; // 现货量变更值
+    middlegoodschange: number; // 套期商品变化量 = LogValue * 折算系数* (1/(1+增值税))
+    operatelogtype: number; // 操作流水类型 - 2:点价数量 21:正常完结(合同) 22:异常终止(合同) 24:采购入库 25:销售出库 26:生产入库 27:生产出库
+    relatedid: number; // 现货合同ID
+    spotgoodsbrandid: number; // 现货品牌ID
+    tradedate: string; // 交易日(yyyyMMdd)
+    userid: number; // 机构ID
+    warehouseinfoid: number; // 仓库ID
+    wrfactortypeid: number; // 仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)
+    wrstandardid: number; // 现货商品ID
+    wrstandardname: string; // 商品名称 LogValue * 折算系数* (1/(1+增值税))
+    contractno: string; // [编号]现货合同编号
+}
+
+/**
+ * 敞口明细 - 计划变动明细请求
+ */
+export interface Ermcp2HedgedItemsDetailReq {
+    userid: number; // 用户ID
+    middlegoodsid: number; // 套保品种ID
+}
+
+/**
+ * 敞口明细 - 计划变动明细响应
+ */
+export interface Ermcp2HedgedItemsDetailRsp {
+    accountname: string; // 套期主体
+    areauserid: number; // 企业ID
+    createtime: string; // 创建时间
+    customeruserid: number; // 对手方 【3:采购合同 4:销售合同】
+    deliverygoodsid: number; // 现货品种ID
+    enumdicname: string; // 单位
+    hedgeditemid: string; // 被套期项目ID
+    hedgeditemspotid: string; // 现货明细ID(625+Unix秒时间戳(10位)+xxxxxx)
+    hedgedtype: number; // 套期类型[计划类型] - 1:采购计划项目 2:销售计划项目 3:现货贸易项目 4:库存存货项目 5:定价采购合同项目
+    hedgeplanno: string; // 计划编号
+    oriavgprice: number; // 期初市场价[当初市场价]
+    relatedamount: number; // 市价总额 = 关联数量 * 期初市场价
+    relatedhedgeplanid: number; // 关联计划ID 【1:采购计划 2:销售计划】
+    relatedqty: number; // [期间变化量]关联数量
+    relatedspotcontractid: number; // 关联合同ID 【3:采购合同 4:销售合同】
+    relatedtype: number; // 关联类型 - 1:套期关联 2:执行关联
+    spotgoodsbrandid: number; // 现货品牌ID - 存“DGFactoryItem”表"DGFactoryItemID" = 2
+    spotpricedamount: number; // 定价总额
+    spotpricedavgprice: number; // 现货均价 = 定价总额 / 关联数量
+    spottype: number; // 现货类型 - 1:采购计划 2:销售计划 3:采购合同 4:销售合同 5:库存存货
+    tradeuserid: number; // 交易用户ID
+    unexeqty: number; // 未执行现货量 = 套期现货量 - 执行现货量
+    wrstandardid: number; // 现货商品ID
+    wrstandardname: string; // 现货商品
+    middlegoodschange: number;// 套期商品变化量 = RELATEDQTY * 折算系数 * (1/(1+增值税))
+}
+
+/**
+ * 敞口明细 - 期货变动明细请求
+ */
+export interface PatradeLinkDetailReq {
+    userid: number; // 用户ID
+    middlegoodsid: number; // 套保品种ID
+}
+
+/**
+ * 敞口明细 - 期货变动明细响应
+ */
+export interface PatradeLinkDetailRsp {
+    accountname: string; // 套期主体
+    agreeunit: number; // 合约乘数
+    amount: number; // 金额 = RelatedLot * TradePrice * AgreeUnit
+    areauserid: number; // 所属机构
+    bizsubjectid: number; // 归属业务部门ID - SubjectID
+    buyorsell: number; // 方向 - 0:买 1:卖
+    convertratio: number; // 品种系数
+    convertratiochange: number; // 套期商品变化量 = RelatedLot * AgreeUnit * ConvertRatio
+    createtime: string; // 创建时间
+    creatorid: number; // 创建人ID
+    creatorsrc: number; // 创建人来源 - 1:管理端 2:终端 3:交易
+    goodscode: string; // 商品代码(内部)
+    goodsgroupid: number; // 对冲品种ID[期货合约商品组ID]
+    goodsid: number; // 商品ID
+    hedgeditemid: number; // 现货ID[套期项目ID] [13 - 被套期项目ID] [4,10,11 - 现货合同ID] [9 - 套保计划ID]
+    hedgeflag: number; // 投机套保标志 - 0:无 1:投机 2:套保 3:套利 4:套期保值(平安\合同) 5:单边(平安) 6:移仓(平安) 7:错单处理(平安) 8:跨期套利(平安) 9:套期保值(计划) 10:套利(合同) 11:换月(合同) 12:交割(金瑞) 13:被套期项目
+    linkdetailid: string; // 期货明细ID(614+Unix秒时间戳(10位)+xxxxxx)
+    linkstatus: number; // 关联状态 - 1:成功 2:失败 3:解绑
+    middlegoodsid: number; // 套保品种ID
+    name: string; // 账户名/子账户
+    optioncode: string; // [期货合约]期权代码 [期权]
+    ordertype: number; // 单据类型[套期工具] - 1:期货单 2:看涨期权单 3:看跌期权单
+    relatedlot: number; // [数量]关联手数
+    relatedmode: number; // 关联方式 - 1:自动关联 2:手动关联 3:解绑关联
+    relatedqty: number; // 关联数量 = RelatedLot * AgreeUnit * ConvertRatio
+    retcode: number; // 返回码
+    saleuserid: number; // 业务员ID
+    tradedate: string; // 关联交易日(yyyyMMdd)
+    tradeid: string; // [成交单号]内部成交单ID
+    tradelot: number; // 成交手数
+    tradeprice: number; // [价格]成交价格
+    tradetime: string; // 日期时间
+    tradetradedate: string; // 成交交易日(yyyyMMdd)
 }

+ 2 - 2
src/services/proto/hedgedItem/interface.ts

@@ -110,8 +110,8 @@ export interface InnerTradeLinkReq {
     TradeId: number; // 内部成交单号
     HedgeFlag: number; // 投机套保标志
     SpotContractID: number; // 现货合同ID
-    SaleUserID: number; // 业务员ID
-    BizSubjectID: number; // 归属业务部门ID
+    SaleUserID?: number; // 业务员ID
+    BizSubjectID?: number; // 归属业务部门ID
     RelatedLot: number; // 关联手数
     RelatedMode: number; // 关联模式
     CreatorSrc: number; // 创建来源

+ 9 - 8
src/views/business/plan/components/close/index.vue

@@ -1,10 +1,10 @@
 <template>
     <!-- 关闭计划-->
     <a-modal class="commonModal fieldsetDialog plan_uncommitted_delete" title="关闭计划" centered v-model:visible="visible"
-        @cancel="cancel(false)" width="890px">
+        :maskClosable="false" @cancel="cancel(false)" width="890px">
         <template #footer>
+            <a-button key="cancel" class="cancelBtn" :loading="loading" @click="cancel(false)">取消</a-button>
             <a-button key="submit" type="primary" :loading="loading" @click="submit">关闭</a-button>
-            <a-button key="cancel" type="primary" :loading="loading" @click="cancel(false)">取消</a-button>
         </template>
         <a-form class="inlineForm">
             <fieldset class="formFieldSet">
@@ -109,7 +109,8 @@ export default defineComponent({
     setup(props, context) {
         const { visible, cancel } = _closeModal(context);
         const loading = ref<boolean>(false);
-        function submit() {
+
+        const submit = () => {
             Modal.confirm({
                 title: '是否确认关闭',
                 okText: '确认关闭',
@@ -118,14 +119,14 @@ export default defineComponent({
                     const params: HedgePlanCloseReq = {
                         HedgePlanID: Long.fromString(props.selectedRow.hedgeplanid),
                         ClientTicket: v4(),
-                    };
+                    }
                     requestResultLoadingAndInfo(hedgePlanCloseReq, params, loading, ['关闭成功', '关闭失败:']).then(() => {
                         cancel(true);
-                    });
-                },
-                onCancel() { },
-            });
+                    })
+                }
+            })
         }
+
         return {
             visible,
             loading,

+ 17 - 12
src/views/hedgeditem/exposure/components/futures/index.vue

@@ -11,9 +11,10 @@
 <script lang="ts">
 import { PropType, watch } from 'vue'
 import { queryTableList, defineComponent, handleComposeTable } from '@/common/export/commonTable';
-import { } from '@/services/go/ermcp/hedgedItem/interface'
-import { } from '@/services/go/ermcp/hedgedItem'
-import MtpTableScroll from '@/common/components/tableScroll/index.vue';
+import { Ermcp2AreaExposureRsp, PatradeLinkDetailReq, PatradeLinkDetailRsp } from '@/services/go/ermcp/hedgedItem/interface'
+import { queryPatradeLinkDetail } from '@/services/go/ermcp/hedgedItem'
+import { getUserId } from '@/services/bus/user'
+import MtpTableScroll from '@/common/components/tableScroll/index.vue'
 
 export default defineComponent({
     components: {
@@ -22,27 +23,31 @@ export default defineComponent({
     props: {
         name: String,
         selectedRow: {
-            type: Object as PropType<unknown>,
-            default: () => ({})
+            type: Object as PropType<Ermcp2AreaExposureRsp>,
+            default: () => ({}),
         },
     },
     setup(props) {
-        const { loading, tableList, queryTable } = queryTableList<unknown>(true, 2); // 表格列表数据
+        const { loading, tableList, queryTable } = queryTableList<PatradeLinkDetailRsp>(true, 2); // 表格列表数据
 
         const queryFn = () => {
-            // const { hedgeditemnum } = props.selectedRow;
-            // if (hedgeditemnum) {
-            //     queryTable(queryErmcp2HedgedItem, { spotcontractid: hedgeditemnum });
-            // }
+            const { middlegoodsid } = props.selectedRow;
+            if (middlegoodsid) {
+                const param: PatradeLinkDetailReq = {
+                    userid: getUserId(),
+                    middlegoodsid
+                }
+                queryTable(queryPatradeLinkDetail, param);
+            }
         }
 
         // 表格通用逻辑
-        const composeTable = handleComposeTable<unknown>({
+        const composeTable = handleComposeTable<PatradeLinkDetailRsp>({
             queryFn,
             tableName: 'table_pcweb_hedgeditem_exposure_futures_details',
         })
 
-        watch(() => props.selectedRow, () => queryFn);
+        watch(() => props.selectedRow, () => queryFn());
 
         return {
             ...composeTable,

+ 17 - 12
src/views/hedgeditem/exposure/components/plan/index.vue

@@ -11,9 +11,10 @@
 <script lang="ts">
 import { PropType, watch } from 'vue'
 import { queryTableList, defineComponent, handleComposeTable } from '@/common/export/commonTable';
-import { } from '@/services/go/ermcp/hedgedItem/interface'
-import { } from '@/services/go/ermcp/hedgedItem'
-import MtpTableScroll from '@/common/components/tableScroll/index.vue';
+import { Ermcp2AreaExposureRsp, Ermcp2HedgedItemsDetailReq, Ermcp2HedgedItemsDetailRsp } from '@/services/go/ermcp/hedgedItem/interface'
+import { queryErmcp2HedgedItemsDetail } from '@/services/go/ermcp/hedgedItem'
+import { getUserId } from '@/services/bus/user'
+import MtpTableScroll from '@/common/components/tableScroll/index.vue'
 
 export default defineComponent({
     components: {
@@ -22,27 +23,31 @@ export default defineComponent({
     props: {
         name: String,
         selectedRow: {
-            type: Object as PropType<unknown>,
-            default: () => ({})
+            type: Object as PropType<Ermcp2AreaExposureRsp>,
+            default: () => ({}),
         },
     },
     setup(props) {
-        const { loading, tableList, queryTable } = queryTableList<unknown>(true, 2); // 表格列表数据
+        const { loading, tableList, queryTable } = queryTableList<Ermcp2HedgedItemsDetailRsp>(true, 2); // 表格列表数据
 
         const queryFn = () => {
-            // const { hedgeditemnum } = props.selectedRow;
-            // if (hedgeditemnum) {
-            //     queryTable(queryErmcp2HedgedItem, { spotcontractid: hedgeditemnum });
-            // }
+            const { middlegoodsid } = props.selectedRow;
+            if (middlegoodsid) {
+                const param: Ermcp2HedgedItemsDetailReq = {
+                    userid: getUserId(),
+                    middlegoodsid
+                }
+                queryTable(queryErmcp2HedgedItemsDetail, param);
+            }
         }
 
         // 表格通用逻辑
-        const composeTable = handleComposeTable<unknown>({
+        const composeTable = handleComposeTable<Ermcp2HedgedItemsDetailRsp>({
             queryFn,
             tableName: 'table_pcweb_hedgeditem_exposure_plan_details',
         })
 
-        watch(() => props.selectedRow, () => queryFn);
+        watch(() => props.selectedRow, () => queryFn());
 
         return {
             ...composeTable,

+ 14 - 13
src/views/hedgeditem/exposure/components/position/index.vue

@@ -10,10 +10,11 @@
 
 <script lang="ts">
 import { PropType, watch } from 'vue'
-import { queryTableList, defineComponent, handleComposeTable } from '@/common/export/commonTable';
-import { } from '@/services/go/ermcp/hedgedItem/interface'
-import { } from '@/services/go/ermcp/hedgedItem'
-import MtpTableScroll from '@/common/components/tableScroll/index.vue';
+import { queryTableList, defineComponent, handleComposeTable } from '@/common/export/commonTable'
+import { Ermcp2AreaExposureRsp } from '@/services/go/ermcp/hedgedItem/interface'
+import { ErmcpExposurePostion } from '@/services/go/ermcp/exposure/interface'
+import { QueryAutualExposurePosition } from '@/services/go/ermcp/exposure'
+import MtpTableScroll from '@/common/components/tableScroll/index.vue'
 
 export default defineComponent({
     components: {
@@ -22,27 +23,27 @@ export default defineComponent({
     props: {
         name: String,
         selectedRow: {
-            type: Object as PropType<unknown>,
-            default: () => ({})
+            type: Object as PropType<Ermcp2AreaExposureRsp>,
+            default: () => ({}),
         },
     },
     setup(props) {
-        const { loading, tableList, queryTable } = queryTableList<unknown>(true, 2); // 表格列表数据
+        const { loading, tableList, queryTable } = queryTableList<ErmcpExposurePostion>(true, 2); // 表格列表数据
 
         const queryFn = () => {
-            // const { hedgeditemnum } = props.selectedRow;
-            // if (hedgeditemnum) {
-            //     queryTable(queryErmcp2HedgedItem, { spotcontractid: hedgeditemnum });
-            // }
+            const { middlegoodsid } = props.selectedRow;
+            if (middlegoodsid) {
+                queryTable(QueryAutualExposurePosition, { middlegoodsid });
+            }
         }
 
         // 表格通用逻辑
-        const composeTable = handleComposeTable<unknown>({
+        const composeTable = handleComposeTable<ErmcpExposurePostion>({
             queryFn,
             tableName: 'table_pcweb_hedgeditem_exposure_position_details',
         })
 
-        watch(() => props.selectedRow, () => queryFn);
+        watch(() => props.selectedRow, () => queryFn());
 
         return {
             ...composeTable,

+ 17 - 12
src/views/hedgeditem/exposure/components/spot/index.vue

@@ -11,9 +11,10 @@
 <script lang="ts">
 import { PropType, watch } from 'vue'
 import { queryTableList, defineComponent, handleComposeTable } from '@/common/export/commonTable';
-import { } from '@/services/go/ermcp/hedgedItem/interface'
-import { } from '@/services/go/ermcp/hedgedItem'
-import MtpTableScroll from '@/common/components/tableScroll/index.vue';
+import { Ermcp2AreaExposureRsp, Ermcp2StockSpotChangeLogReq, Ermcp2StockSpotChangeLogRsp } from '@/services/go/ermcp/hedgedItem/interface'
+import { queryErmcp2StockSpotChangeLog } from '@/services/go/ermcp/hedgedItem'
+import { getUserId } from '@/services/bus/user'
+import MtpTableScroll from '@/common/components/tableScroll/index.vue'
 
 export default defineComponent({
     components: {
@@ -22,27 +23,31 @@ export default defineComponent({
     props: {
         name: String,
         selectedRow: {
-            type: Object as PropType<unknown>,
-            default: () => ({})
+            type: Object as PropType<Ermcp2AreaExposureRsp>,
+            default: () => ({}),
         },
     },
     setup(props) {
-        const { loading, tableList, queryTable } = queryTableList<unknown>(true, 2); // 表格列表数据
+        const { loading, tableList, queryTable } = queryTableList<Ermcp2StockSpotChangeLogRsp>(true, 2); // 表格列表数据
 
         const queryFn = () => {
-            // const { hedgeditemnum } = props.selectedRow;
-            // if (hedgeditemnum) {
-            //     queryTable(queryErmcp2HedgedItem, { spotcontractid: hedgeditemnum });
-            // }
+            const { middlegoodsid } = props.selectedRow;
+            if (middlegoodsid) {
+                const param: Ermcp2StockSpotChangeLogReq = {
+                    userid: getUserId(),
+                    middlegoodsid
+                }
+                queryTable(queryErmcp2StockSpotChangeLog, param);
+            }
         }
 
         // 表格通用逻辑
-        const composeTable = handleComposeTable<unknown>({
+        const composeTable = handleComposeTable<Ermcp2StockSpotChangeLogRsp>({
             queryFn,
             tableName: 'table_pcweb_hedgeditem_exposure_spot_details',
         })
 
-        watch(() => props.selectedRow, () => queryFn);
+        watch(() => props.selectedRow, () => queryFn());
 
         return {
             ...composeTable,

+ 15 - 9
src/views/hedgeditem/exposure/list/index.vue

@@ -7,14 +7,15 @@
             </a-table>
         </template>
     </mtp-table-scroll>
-    <mtp-tab-component :options="{ selectedRow }" />
+    <mtp-tab-component class="table-detail" :options="{ selectedRow }" />
     <component :is="componentId" v-if="componentId" v-bind="{ selectedRow }" @cancel="closeComponent"></component>
 </template>
 
 <script lang="ts">
 import { queryTableList, MtpTableButton, defineComponent, handleComposeTable } from '@/common/export/commonTable'
-import { Ermcp2HedgedItemRsp } from '@/services/go/ermcp/hedgedItem/interface'
-import { queryErmcp2HedgedItem } from '@/services/go/ermcp/hedgedItem'
+import { Ermcp2AreaExposureReq, Ermcp2AreaExposureRsp } from '@/services/go/ermcp/hedgedItem/interface'
+import { queryErmcp2AreaExposure } from '@/services/go/ermcp/hedgedItem'
+import { getUserId } from '@/services/bus/user'
 import MtpTableScroll from '@/common/components/tableScroll/index.vue'
 import MtpTabComponent from '@/@next/components/base/tab-component/index.vue'
 
@@ -25,16 +26,21 @@ export default defineComponent({
         MtpTableScroll,
     },
     setup() {
-        const { loading, tableList, queryTable } = queryTableList<Ermcp2HedgedItemRsp>(true, 2); // 表格列表数据
+        const { loading, tableList, queryTable } = queryTableList<Ermcp2AreaExposureRsp>(true, 2); // 表格列表数据
 
-        const queryFn = () => queryTable(queryErmcp2HedgedItem, { hedgeditemstatus: 3 }).then((res) => {
-            if (res.length) {
-                composeTable.selectedRow.value = res[0];
+        const queryFn = () => {
+            const param: Ermcp2AreaExposureReq = {
+                userid: getUserId()
             }
-        })
+            queryTable(queryErmcp2AreaExposure, param).then((res) => {
+                if (res.length) {
+                    composeTable.selectedRow.value = res[0];
+                }
+            })
+        }
 
         // 表格通用逻辑
-        const composeTable = handleComposeTable<Ermcp2HedgedItemRsp>({
+        const composeTable = handleComposeTable<Ermcp2AreaExposureRsp>({
             queryFn,
             tableName: 'table_pcweb_hedgeditem_exposure',
         })

+ 21 - 12
src/views/hedgeditem/futures/in/components/bind/form.ts

@@ -1,5 +1,6 @@
 import { ref, computed } from 'vue'
 import { v4 } from 'uuid'
+import Long from 'long'
 import { message } from 'ant-design-vue'
 import { geLoginID_number } from '@/services/bus/login'
 import { queryTableList, handleComposeTable } from '@/common/export/commonTable'
@@ -10,7 +11,7 @@ import { innerTradeLink } from '@/services/proto/hedgedItem'
 import { getAreaUserId } from '@/services/bus/user'
 
 export function useForm(selectedRow: InternalUncorrelatedTradeDetailRsp) {
-    const { hedgeditemid, goodsid, enableqty } = selectedRow;
+    const { tradeid, goodsid, tradelot } = selectedRow;
     const { tableList, queryTable } = queryTableList<InternalEnableTradeDetailRsp>(true, 2); // 表格列表数据
     const loading = ref<boolean>(false);
     const selectedRowKeys = ref<number[]>([]); // 表格选中的 rowKey 数据 :rowKey="(record,index)=>index"
@@ -19,7 +20,7 @@ export function useForm(selectedRow: InternalUncorrelatedTradeDetailRsp) {
     const currentQty = computed(() => {
         return tableList.value.reduce((pre, cur, index) => {
             if (selectedRowKeys.value.includes(index)) {
-                pre += cur?.relatedqty ?? 0;
+                pre += cur?.relatedlot ?? 0;
             }
             return pre;
         }, 0);
@@ -40,6 +41,15 @@ export function useForm(selectedRow: InternalUncorrelatedTradeDetailRsp) {
         },
     }))
 
+    // 计算本次关联数量
+    const calcRelatedqty = (record: InternalEnableTradeDetailRsp) => {
+        const { relatedlot, agreeunit, convertratio } = record;
+        if (relatedlot) {
+            return relatedlot * agreeunit * convertratio;
+        }
+        return 0;
+    }
+
     // 表格通用逻辑
     const composeTable = handleComposeTable<InternalEnableTradeDetailRsp>({
         tableName: 'table_pcweb_hedgeditem_futures_in_relation',
@@ -83,21 +93,19 @@ export function useForm(selectedRow: InternalUncorrelatedTradeDetailRsp) {
 
         if (seledtedRows.length) {
             if (seledtedRows.every((e) => e.relatedlot && e.relatedlot > 0)) {
-                if (currentQty.value > enableqty) {
-                    message.error('关联数量不能大于可关联手数');
+                if (currentQty.value > tradelot) {
+                    message.error('关联数量不能大于成交手数');
                 } else {
                     loading.value = true;
                     const result: Promise<InnerTradeLinkRsp>[] = [];
 
                     seledtedRows.forEach((e) => {
                         result.push(innerTradeLink({
-                            TradeId: 0, // 内部成交单号
-                            HedgeFlag: 0, // 投机套保标志
-                            SpotContractID: hedgeditemid, // 现货合同ID
-                            SaleUserID: 0, // 业务员ID
-                            BizSubjectID: 0, // 归属业务部门ID
-                            RelatedLot: 0, // 关联手数
-                            RelatedMode: 0, // 关联模式
+                            TradeId: Long.fromString(tradeid), // 内部成交单号
+                            HedgeFlag: 13, // 投机套保标志
+                            SpotContractID: Long.fromString(e.hedgeditemid), // 现货合同ID
+                            RelatedLot: e.relatedlot!, // 关联手数
+                            RelatedMode: 2, // 关联模式
                             CreatorSrc: 2, // 创建来源
                             CreatorID: geLoginID_number()!, // 创建人
                             ClientTicket: v4() // 客户端流水号
@@ -105,7 +113,7 @@ export function useForm(selectedRow: InternalUncorrelatedTradeDetailRsp) {
                     })
 
                     Promise.all(result).then(() => {
-                        message.error('关联成功');
+                        message.success('关联成功');
                         callback && callback();
                     }).catch((err) => {
                         message.error('关联失败:' + err);
@@ -129,6 +137,7 @@ export function useForm(selectedRow: InternalUncorrelatedTradeDetailRsp) {
         rowSelection,
         currentQty,
         columns,
+        calcRelatedqty,
         formSubmit,
     }
 }

+ 40 - 8
src/views/hedgeditem/futures/in/components/bind/index.vue

@@ -1,7 +1,7 @@
 <template>
     <!-- 套期交易-期货成交关联-关联 -->
     <a-modal class="commonModal custom-detail" title="期现单据关联" v-model:visible="visible" centered @cancel="cancel(false)"
-        width="890px">
+        :maskClosable="false" width="890px">
         <a-form class="inlineForm">
             <fieldset class="formFieldSet">
                 <legend>成交单信息</legend>
@@ -29,8 +29,8 @@
                         </a-form-item>
                     </a-col>
                     <a-col :span="12">
-                        <a-form-item label="成交数">
-                            <span class="white">{{ formatValue(selectedRow.relatedqty) }}</span>
+                        <a-form-item label="成交数">
+                            <span class="white">{{ formatValue(selectedRow.tradelot) }}</span>
                         </a-form-item>
                     </a-col>
                     <a-col :span="12">
@@ -38,6 +38,11 @@
                             <span class="white">{{ formatValue(selectedRow.tradetime) }}</span>
                         </a-form-item>
                     </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="套期商品数量">
+                            <span class="white">{{ formatValue(selectedRow.relatedqty) }}</span>
+                        </a-form-item>
+                    </a-col>
                 </a-row>
             </fieldset>
             <fieldset class="formFieldSet">
@@ -57,15 +62,15 @@
                                 :disabled="!selectedRowKeys.includes(index)" :precision="0"
                                 v-model:value="record.relatedlot" style="width:100px" />
                         </template>
-                        <template #relatedqty="{ text }">
-                            <span>{{ text ?? 0 }}</span>
+                        <template #relatedqty="{ record }">
+                            <span>{{ calcRelatedqty(record) }}</span>
                         </template>
                     </a-table>
                 </div>
             </fieldset>
         </a-form>
         <template #footer>
-            <a-button key="submit" class="cancelBtn" @click="cancel(false)">取消</a-button>
+            <a-button key="submit" class="cancelBtn" :loading="loading" @click="cancel(false)">取消</a-button>
             <a-button key="submit" type="primary" :loading="loading" @click="formSubmit(() => cancel(true))">确定
             </a-button>
         </template>
@@ -90,7 +95,7 @@ export default defineComponent({
     },
     setup(props, context) {
         const { visible, cancel } = _closeModal(context);
-        const { loading, tableList, columns, currentQty, selectedRowKeys, rowSelection, formSubmit } = useForm(props.selectedRow);
+        const { loading, tableList, columns, currentQty, selectedRowKeys, rowSelection, calcRelatedqty, formSubmit } = useForm(props.selectedRow);
 
         return {
             visible,
@@ -102,10 +107,37 @@ export default defineComponent({
             currentQty,
             selectedRowKeys,
             rowSelection,
+            calcRelatedqty,
             formSubmit,
             getBuyOrSellName,
             getChannelBuildName,
         }
     }
 })
-</script>
+</script>
+
+<style lang="less">
+.custom-detail {
+    .ant-modal-body {
+        padding-top: 0;
+        padding-left: 0;
+        padding-right: 0;
+    }
+
+    .tableDatas {
+        margin-top: 26px;
+        padding: 0;
+        overflow: hidden;
+
+        .dialogTable {
+            width: 100%;
+            overflow-x: auto;
+        }
+    }
+
+    .ant-form.inlineForm {
+        margin-top: 20px;
+        padding: 0 24px;
+    }
+}
+</style>

+ 1 - 1
src/views/hedgeditem/futures/out/index.vue

@@ -7,7 +7,7 @@
             </a-table>
         </template>
     </mtp-table-scroll>
-    <mtp-tab-component :options="{ selectedRow }" />
+    <mtp-tab-component class="table-detail" :options="{ selectedRow }" />
     <component :is="componentId" v-if="componentId" v-bind="{ selectedRow }" @cancel="closeComponent"></component>
 </template>
 

+ 4 - 4
src/views/hedgeditem/spot/contract/components/bind/form.ts

@@ -10,7 +10,7 @@ import { contractRelatedHedgedItem } from '@/services/proto/hedgedItem'
 import { getUserId } from '@/services/bus/user'
 
 export function useForm(selectedRow: UnLinkSpotContractRsp) {
-    const { contractno, qty, contracttype } = selectedRow;
+    const { spotcontractid, qty, contracttype } = selectedRow;
     const { tableList, queryTable } = queryTableList<Ermcp8EnableHedgeditemRsp>(true, 2); // 表格列表数据
     const loading = ref<boolean>(false);
     const selectedRowKeys = ref<number[]>([]); // 表格选中的 rowKey 数据 :rowKey="(record,index)=>index"
@@ -101,9 +101,9 @@ export function useForm(selectedRow: UnLinkSpotContractRsp) {
 
                     seledtedRows.forEach((e) => {
                         result.push(contractRelatedHedgedItem({
-                            SpotContractID: Long.fromString(contractno),
+                            SpotContractID: Long.fromString(spotcontractid),
                             HedgedItemInfos: {
-                                HedgedItemID: e.hedgeditemid,
+                                HedgedItemID: Long.fromString(e.hedgeditemid),
                                 RelatedQty: e.relatedqty!
                             },
                             ClientTicket: v4(),
@@ -111,7 +111,7 @@ export function useForm(selectedRow: UnLinkSpotContractRsp) {
                     })
 
                     Promise.all(result).then(() => {
-                        message.error('关联成功');
+                        message.success('关联成功');
                         callback && callback();
                     }).catch((err) => {
                         message.error('关联失败:' + err);

+ 1 - 1
src/views/hedgeditem/spot/contract/components/bind/index.vue

@@ -130,7 +130,7 @@ export default defineComponent({
 
         .dialogTable {
             width: 100%;
-            overflow: overlay;
+            overflow-x: auto;
         }
     }
 

+ 84 - 23
src/views/hedgeditem/spot/plan/components/bind/form.ts

@@ -1,38 +1,99 @@
-import { reactive, ref } from 'vue'
+import { ref, computed } from 'vue'
 import { v4 } from 'uuid'
-import { HedgedItemRelatedPlanReq } from '@/services/proto/hedgedItem/interface'
+import Long from 'long'
+import { message } from 'ant-design-vue'
+import { queryTableList, handleComposeTable } from '@/common/export/commonTable'
+import { Ermcp8EnableHedgeditemReq, Ermcp8EnableHedgeditemRsp, UnLinkErmcpHedgePlanRsp } from '@/services/go/ermcp/hedgedItem/interface'
+import { queryErmcp8EnableHedgeditem } from '@/services/go/ermcp/hedgedItem'
+import { HedgedItemRelatedPlanRsp } from '@/services/proto/hedgedItem/interface'
 import { hedgedItemRelatedPlan } from '@/services/proto/hedgedItem'
-import { validateAction } from '@/common/setup/form'
-import { requestResultLoadingAndInfo } from '@/common/methods/request/resultInfo'
+import { getUserId } from '@/services/bus/user'
 
-export function useForm() {
+export function useForm(selectedRow: UnLinkErmcpHedgePlanRsp) {
+    const { hedgeplanid, contracttype } = selectedRow;
+    const { tableList, queryTable } = queryTableList<Ermcp8EnableHedgeditemRsp>(true, 2); // 表格列表数据
     const loading = ref<boolean>(false);
-    const formElement = ref<HTMLElement>();
-
-    const formData = reactive<HedgedItemRelatedPlanReq>({
-        HedgedItemID: 0, // 现货合同ID
-        RelatedHedgePlanInfos: {
-            HedgePlanID: 0,
-            OriAvgPrice: 0,
-        }, // 被套期项目信息
-        ClientTicket: v4(), // 客户端流水号
+    const marketPrice = ref<number>(); // 现货市价
+    const selectedRowKeys = ref<number[]>([]); // 表格选中的 rowKey 数据 :rowKey="(record,index)=>index"
+
+    // 自定义表格选择项
+    const rowSelection = computed(() => ({
+        columnTitle: '选择',
+        type: 'radio',
+        selectedRowKeys: selectedRowKeys.value,
+        onChange: (keys: number[]) => {
+            selectedRowKeys.value = keys;
+        },
+    }))
+
+    // 表格通用逻辑
+    const { columns } = handleComposeTable<Ermcp8EnableHedgeditemRsp>({
+        tableName: 'table_pcweb_hedgeditem_spot_plan_relation',
+        queryFn: () => {
+            const param: Ermcp8EnableHedgeditemReq = {
+                userid: getUserId(),
+                spottype: 0,
+            }
+            switch (contracttype) {
+                // 采购合同
+                case 1: {
+                    param.spottype = 1;
+                    break;
+                }
+                // 销售合同
+                case -1: {
+                    param.spottype = 2;
+                    break;
+                }
+            }
+            queryTable(queryErmcp8EnableHedgeditem, param);
+        },
     })
 
     // 表单提交
     const formSubmit = (callback?: () => void) => {
-        validateAction(formElement, formData).then((param) => {
-            requestResultLoadingAndInfo(hedgedItemRelatedPlan, param, loading, ['关联成功', '关联失败:']).then(() => {
-                callback && callback();
-            }).catch(() => {
-                loading.value = false;
-            })
-        })
+        const keys = selectedRowKeys.value;
+        const seledtedRows = tableList.value.filter((e, index) => keys.includes(index));
+        const oriAvgPrice = marketPrice.value
+
+        if (seledtedRows.length) {
+            if (oriAvgPrice && oriAvgPrice > 0) {
+                loading.value = true;
+                const result: Promise<HedgedItemRelatedPlanRsp>[] = [];
+
+                seledtedRows.forEach((e) => {
+                    result.push(hedgedItemRelatedPlan({
+                        HedgedItemID: Long.fromString(e.hedgeditemid),
+                        RelatedHedgePlanInfos: {
+                            HedgePlanID: hedgeplanid,
+                            OriAvgPrice: oriAvgPrice
+                        },
+                        ClientTicket: v4(),
+                    }))
+                })
+
+                Promise.all(result).then(() => {
+                    message.success('关联成功');
+                    callback && callback();
+                }).catch((err) => {
+                    message.error('关联失败:' + err);
+                }).finally(() => {
+                    loading.value = false;
+                })
+            } else {
+                message.error('请输入现货市价');
+            }
+        } else {
+            message.error('请选择关联订单');
+        }
     }
 
     return {
         loading,
-        formElement,
-        formData,
+        tableList,
+        marketPrice,
+        rowSelection,
+        columns,
         formSubmit,
     }
 }

+ 49 - 33
src/views/hedgeditem/spot/plan/components/bind/index.vue

@@ -1,8 +1,8 @@
 <template>
     <!-- 套期交易-套期项目关联-计划关联项目 -->
     <a-modal class="commonModal custom-detail" title="关联套期项目" v-model:visible="visible" centered @cancel="cancel(false)"
-        width="890px">
-        <a-form class="inlineForm" ref="formElement" :model="formData">
+        :maskClosable="false" width="890px">
+        <a-form class="inlineForm">
             <fieldset class="formFieldSet">
                 <legend>合同信息</legend>
                 <a-row :gutter="24">
@@ -23,7 +23,7 @@
                     </a-col>
                     <a-col :span="12">
                         <a-form-item label="结算币种">
-                            <span class="white">{{ formatValue(selectedRow.currencyname) }}</span>
+                            <span class="white">{{ formatValue(selectedRow.enumdicname) }}</span>
                         </a-form-item>
                     </a-col>
                     <a-col :span="12">
@@ -37,19 +37,27 @@
                 <legend>关联信息</legend>
                 <a-row :gutter="24">
                     <a-col :span="12">
-                        <a-form-item label="当前关联数量">
-                            <span class="white">{{ formatValue(selectedRow.planqty) }}</span>
+                        <a-form-item label="现货市价" required>
+                            <span class="white">
+                                <a-input-number class="dialogInput" size="small" v-model:value="marketPrice"
+                                    style="width:100px" />
+                            </span>
                         </a-form-item>
                     </a-col>
                 </a-row>
                 <div class="tableDatas">
-                    <a-table class="dialogTable" :columns="columns" :data-source="tableList">
+                    <a-table class="dialogTable" :columns="columns" :data-source="tableList" :pagination="false"
+                        :loading="loading" :rowKey="(record, index) => index" :row-selection="rowSelection">
+                        <!-- 套期类型 -->
+                        <template #hedgedtype="{ text }">
+                            <span>{{ getHedgedTypeName(text) }}</span>
+                        </template>
                     </a-table>
                 </div>
             </fieldset>
         </a-form>
         <template #footer>
-            <a-button key="submit" class="cancelBtn" @click="cancel(false)">取消</a-button>
+            <a-button key="submit" class="cancelBtn" :loading="loading" @click="cancel(false)">取消</a-button>
             <a-button key="submit" type="primary" :loading="loading" @click="formSubmit(() => cancel(true))">确定
             </a-button>
         </template>
@@ -60,12 +68,8 @@
 import { defineComponent, PropType } from 'vue'
 import { _closeModal } from '@/common/setup/modal/modal'
 import { formatValue } from '@/common/methods'
-import { getChannelBuildName, getBuyOrSellName } from '@/common/constants/enumsName'
-import { InternalEnableTradeDetailReq, InternalEnableTradeDetailRsp } from '@/services/go/ermcp/hedgedItem/interface'
-import { Ermcp3HedgePlan } from '@/services/go/ermcp/plan/interface'
-import { queryTableList, handleComposeTable } from '@/common/export/commonTable'
-import { queryInternalEnableTradeDetail } from '@/services/go/ermcp/hedgedItem'
-import { getAreaUserId } from "@/services/bus/user"
+import { UnLinkErmcpHedgePlanRsp } from '@/services/go/ermcp/hedgedItem/interface'
+import { getHedgedTypeName } from '@/@next/constants/enum/hedgedType'
 import { getPlanContractType } from '@/views/business/plan/setup'
 import { useForm } from './form'
 
@@ -73,41 +77,53 @@ export default defineComponent({
     emits: ['cancel'],
     props: {
         selectedRow: {
-            type: Object as PropType<Ermcp3HedgePlan>,
+            type: Object as PropType<UnLinkErmcpHedgePlanRsp>,
             required: true
         },
     },
     setup(props, context) {
         const { visible, cancel } = _closeModal(context);
-        const { formElement, loading, formData, formSubmit } = useForm();
-        const { tableList, queryTable } = queryTableList<InternalEnableTradeDetailRsp>(true, 2); // 表格列表数据
-
-        const queryFn = () => {
-            const param: InternalEnableTradeDetailReq = {
-                areauserid: getAreaUserId(),
-                goodsid: props.selectedRow.deliverygoodsid,
-            }
-            queryTable(queryInternalEnableTradeDetail, param);
-        }
-
-        // 表格通用逻辑
-        const { columns } = handleComposeTable<InternalEnableTradeDetailRsp>({
-            queryFn,
-            tableName: 'table_pcweb_hedgeditem_spot_plan_relation',
-        })
+        const { loading, tableList, marketPrice, columns, rowSelection, formSubmit } = useForm(props.selectedRow);
 
         return {
             visible,
             loading,
             tableList,
             columns,
+            marketPrice,
             cancel,
             formatValue,
-            formElement,
-            formData,
+            rowSelection,
             getPlanContractType,
+            getHedgedTypeName,
             formSubmit,
         }
     }
 })
-</script>
+</script>
+
+<style lang="less">
+.custom-detail {
+    .ant-modal-body {
+        padding-top: 0;
+        padding-left: 0;
+        padding-right: 0;
+    }
+
+    .tableDatas {
+        margin-top: 26px;
+        padding: 0;
+        overflow: hidden;
+
+        .dialogTable {
+            width: 100%;
+            overflow-x: auto;
+        }
+    }
+
+    .ant-form.inlineForm {
+        margin-top: 20px;
+        padding: 0 24px;
+    }
+}
+</style>

+ 33 - 0
src/views/hedgeditem/spot/plan/components/filter/index.vue

@@ -0,0 +1,33 @@
+<template>
+    <div class="filterTable">
+        <FilterOption :inputList="inputList" :buttonList="buttonList" />
+        <slot></slot>
+    </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import { UnLinkErmcpHedgePlanRsp } from '@/services/go/ermcp/hedgedItem/interface'
+import { useFilter } from '@/common/components/filter/setup';
+import FilterOption from '@/common/components/filter/index.vue';
+
+export default defineComponent({
+    name: 'purchase_pending-filter-table',
+    components: {
+        FilterOption
+    },
+    setup(props, context) {
+        const { inputList, buttonList } = useFilter<UnLinkErmcpHedgePlanRsp>(context);
+
+        inputList.value = [
+            { keys: ['hedgeplanno'], value: '', placeholder: '模糊搜索计划' },
+            { keys: ['wrstandardname'], value: '', placeholder: '模糊搜索商品' }
+        ]
+
+        return {
+            inputList,
+            buttonList,
+        }
+    },
+})
+</script>

+ 63 - 1
src/views/hedgeditem/spot/plan/index.vue

@@ -1,2 +1,64 @@
 <template>
-</template>
+    <!-- 套期交易:未关联采购合同-未关联购销计划 -->
+    <mtp-table-scroll>
+        <template #header>
+            <Filter @search="updateColumn"></Filter>
+        </template>
+        <template #default="{ scroll }">
+            <a-table :columns="columns" class="srcollYTable" :pagination="false" :expandedRowKeys="expandedRowKeys"
+                :customRow="Rowclick" :rowKey="(record, index) => index" :data-source="tableList" :scroll="scroll">
+                <template #expandedRowRender="{ record }">
+                    <mtp-table-button class="btn-list-sticky" :buttons="auth" :record="record" @click="openComponent" />
+                </template>
+            </a-table>
+        </template>
+    </mtp-table-scroll>
+    <!-- 右键 -->
+    <contextMenu :contextMenu="contextMenu" @cancel="closeContext" :list="auth"> </contextMenu>
+    <component :is="componentId" v-if="componentId" :selectedRow="selectedRow" @cancel="closeComponent"></component>
+</template>
+
+<script lang="ts">
+import { queryTableList, contextMenu, defineComponent, MtpTableButton, defineAsyncComponent, handleComposeTable } from '@/common/export/commonTable'
+import { UnLinkErmcpHedgePlanReq, UnLinkErmcpHedgePlanRsp } from '@/services/go/ermcp/hedgedItem/interface'
+import { queryUnLinkErmcpHedgePlan } from '@/services/go/ermcp/hedgedItem'
+import { useMenu } from '@/@next/hooks/common'
+import { getAreaUserId } from '@/services/bus/user'
+import MtpTableScroll from '@/common/components/tableScroll/index.vue'
+import Filter from './components/filter/index.vue';
+
+export default defineComponent({
+    components: {
+        MtpTableScroll,
+        Filter,
+        MtpTableButton,
+        contextMenu,
+        detail: defineAsyncComponent(() => import('@/views/business/plan/components/detail/index.vue')), // 详情
+        bind: defineAsyncComponent(() => import('./components/bind/index.vue')), // 关联项目
+    },
+    setup() {
+        const { auth } = useMenu();
+        const { loading, tableList, queryTable } = queryTableList<UnLinkErmcpHedgePlanRsp>(true, 2); // 表格列表数据
+
+        const queryFn = () => {
+            const param: UnLinkErmcpHedgePlanReq = {
+                areauserid: getAreaUserId(),
+            }
+            queryTable(queryUnLinkErmcpHedgePlan, param);
+        }
+
+        // 表格通用逻辑
+        const composeTable = handleComposeTable<UnLinkErmcpHedgePlanRsp>({
+            queryFn,
+            tableName: 'table_pcweb_hedgeditem_spot_plan',
+        })
+
+        return {
+            ...composeTable,
+            loading,
+            tableList,
+            auth,
+        }
+    }
+})
+</script>

+ 2 - 2
src/views/hedgeditem/trade/components/add/form.ts

@@ -30,8 +30,8 @@ export function useForm() {
     const rules = {
         HedgedItemNum: [{ required: true, trigger: 'blur', message: '请输入项目编号' }],
         HedgedItemName: [{ required: true, trigger: 'blur', message: '请输入项目名称' }],
-        PlanStartDate: [{ required: true, message: '请选择开始时间' }],
-        PlanEndDate: [{ required: true, message: '请选择结束时间' }],
+        //PlanStartDate: [{ required: true, message: '请选择开始时间' }],
+        //PlanEndDate: [{ required: true, message: '请选择结束时间' }],
         HedgedType: [{ required: true, type: 'number', message: '请选择套期类型' }],
         TradeUserID: [{ required: true, type: 'number', message: '请选择交易主体' }],
     }

+ 14 - 14
src/views/hedgeditem/trade/components/add/index.vue

@@ -17,20 +17,6 @@
                     </a-form-item>
                 </a-col>
                 <a-col :span="12">
-                    <a-form-item label="计划开始" name="PlanStartDate">
-                        <a-date-picker class="commonDatePicker" style="width: 200px" placeholder="请选择开始时间"
-                            value-format="YYYY-MM-DD" :disabled-date="disabledStartDate"
-                            v-model:value="formData.PlanStartDate" />
-                    </a-form-item>
-                </a-col>
-                <a-col :span="12">
-                    <a-form-item label="计划结束" name="PlanEndDate">
-                        <a-date-picker class="commonDatePicker" style="width: 200px" placeholder="请选择结束时间"
-                            value-format="YYYY-MM-DD" :disabled-date="disabledEndDate"
-                            v-model:value="formData.PlanEndDate" />
-                    </a-form-item>
-                </a-col>
-                <a-col :span="12">
                     <a-form-item label="套期类型" name="HedgedType">
                         <a-select class="inlineFormSelect" style="width: 200px" placeholder="请选择套期类型"
                             v-model:value="formData.HedgedType">
@@ -51,6 +37,20 @@
                         </a-select>
                     </a-form-item>
                 </a-col>
+                <a-col :span="12">
+                    <a-form-item label="计划开始" name="PlanStartDate">
+                        <a-date-picker class="commonDatePicker" style="width: 200px" placeholder="请选择开始时间"
+                            value-format="YYYY-MM-DD" :disabled-date="disabledStartDate"
+                            v-model:value="formData.PlanStartDate" />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="计划结束" name="PlanEndDate">
+                        <a-date-picker class="commonDatePicker" style="width: 200px" placeholder="请选择结束时间"
+                            value-format="YYYY-MM-DD" :disabled-date="disabledEndDate"
+                            v-model:value="formData.PlanEndDate" />
+                    </a-form-item>
+                </a-col>
             </a-row>
         </a-form>
         <template #footer>

+ 17 - 9
src/views/hedgeditem/trade/components/ending/index.vue

@@ -1,7 +1,7 @@
 <template>
     <!-- 套期交易-完结项目 -->
-    <a-modal class="commonModal custom-detail" title="套期项目正常完结" v-model:visible="visible" centered @cancel="cancel"
-        width="890px">
+    <a-modal class="commonModal custom-detail" title="套期项目正常完结" v-model:visible="visible" centered
+        @cancel="cancel(false)" :maskClosable="false" width="890px">
         <a-form class="inlineForm">
             <fieldset class="formFieldSet">
                 <legend>套期项目</legend>
@@ -45,7 +45,7 @@
             </fieldset>
         </a-form>
         <template #footer>
-            <a-button key="submit" class="cancelBtn" @click="cancel(false)">取消</a-button>
+            <a-button key="submit" class="cancelBtn" :loading="loading" @click="cancel(false)">取消</a-button>
             <a-button key="submit" type="primary" :loading="loading" @click="submit">确认完结</a-button>
         </template>
     </a-modal>
@@ -62,6 +62,7 @@ import { Ermcp2HedgedItemRsp } from '@/services/go/ermcp/hedgedItem/interface'
 import { getHedgedTypeName } from '@/@next/constants/enum/hedgedType'
 import { hedgedItemEnd } from '@/services/proto/hedgedItem'
 import { HedgedItemEndReq } from '@/services/proto/hedgedItem/interface'
+import { Modal } from 'ant-design-vue'
 
 export default defineComponent({
     emits: ['cancel'],
@@ -76,12 +77,19 @@ export default defineComponent({
         const loading = ref<boolean>(false);
 
         const submit = () => {
-            const param: HedgedItemEndReq = {
-                HedgedItemID: Long.fromString(props.selectedRow.hedgeditemid),
-                ClientTicket: v4()
-            }
-            requestResultLoadingAndInfo(hedgedItemEnd, param, loading, ['套期项目完结成功', '套期项目完结失败:']).then(() => {
-                cancel(true);
+            Modal.confirm({
+                title: '是否确认完结',
+                okText: '确认完结',
+                cancelText: '取消',
+                onOk() {
+                    const params: HedgedItemEndReq = {
+                        HedgedItemID: Long.fromString(props.selectedRow.hedgeditemid),
+                        ClientTicket: v4()
+                    }
+                    requestResultLoadingAndInfo(hedgedItemEnd, params, loading, ['套期项目完结成功', '套期项目完结失败::']).then(() => {
+                        cancel(true);
+                    })
+                }
             })
         }
 

+ 3 - 3
src/views/hedgeditem/trade/components/futures/index.vue

@@ -23,7 +23,7 @@ export default defineComponent({
         name: String,
         selectedRow: {
             type: Object as PropType<Ermcp2HedgedItemRsp>,
-            default: () => ({})
+            default: () => ({}),
         },
     },
     setup(props) {
@@ -32,7 +32,7 @@ export default defineComponent({
         const queryFn = () => {
             const { hedgeditemid } = props.selectedRow;
             if (hedgeditemid) {
-                queryTable(queryERMCPPatradeLinkDetail, { spotcontractid: hedgeditemid });
+                queryTable(queryERMCPPatradeLinkDetail, { hedgeditemid });
             }
         }
 
@@ -42,7 +42,7 @@ export default defineComponent({
             tableName: 'table_pcweb_hedgeditem_trade_futures_details',
         })
 
-        watch(() => props.selectedRow, () => queryFn);
+        watch(() => props.selectedRow, () => queryFn());
 
         return {
             ...composeTable,

+ 2 - 2
src/views/hedgeditem/trade/components/plan/index.vue

@@ -29,7 +29,7 @@ export default defineComponent({
         name: String,
         selectedRow: {
             type: Object as PropType<Ermcp2HedgedItemRsp>,
-            default: () => ({})
+            default: () => ({}),
         },
     },
     setup(props) {
@@ -48,7 +48,7 @@ export default defineComponent({
             tableName: 'table_pcweb_hedgeditem_trade_plan_details',
         })
 
-        watch(() => props.selectedRow, () => queryFn);
+        watch(() => props.selectedRow, () => queryFn());
 
         return {
             ...composeTable,

+ 2 - 2
src/views/hedgeditem/trade/components/position/index.vue

@@ -23,7 +23,7 @@ export default defineComponent({
         name: String,
         selectedRow: {
             type: Object as PropType<Ermcp2HedgedItemRsp>,
-            default: () => ({})
+            default: () => ({}),
         },
     },
     setup(props) {
@@ -42,7 +42,7 @@ export default defineComponent({
             tableName: 'table_pcweb_hedgeditem_trade_position_details',
         })
 
-        watch(() => props.selectedRow, () => queryFn);
+        watch(() => props.selectedRow, () => queryFn());
 
         return {
             ...composeTable,

+ 2 - 2
src/views/hedgeditem/trade/components/spot/index.vue

@@ -23,7 +23,7 @@ export default defineComponent({
         name: String,
         selectedRow: {
             type: Object as PropType<Ermcp2HedgedItemRsp>,
-            default: () => ({})
+            default: () => ({}),
         },
     },
     setup(props) {
@@ -42,7 +42,7 @@ export default defineComponent({
             tableName: 'table_pcweb_hedgeditem_trade_spot_details',
         })
 
-        watch(() => props.selectedRow, () => queryFn);
+        watch(() => props.selectedRow, () => queryFn());
 
         return {
             ...composeTable,

+ 29 - 9
src/views/hedgeditem/trade/finish/index.vue

@@ -11,20 +11,27 @@
                 <template #expandedRowRender="{ record }">
                     <mtp-table-button class="btn-list-sticky" :buttons="auth" :record="record" @click="openComponent" />
                 </template>
+                <!-- 套期类型 -->
+                <template #hedgedtype="{ text }">
+                    <span>{{ getHedgedTypeName(text) }}</span>
+                </template>
             </a-table>
         </template>
     </mtp-table-scroll>
-    <mtp-tab-component :options="{ selectedRow }" />
+    <mtp-tab-component class="table-detail" :options="{ selectedRow }" />
 </template>
 
 <script lang="ts">
-import { queryTableList, MtpTableButton, defineComponent, handleComposeTable, ComposeTableParam } from '@/common/export/commonTable';
-import { Ermcp2HedgedItemRsp } from '@/services/go/ermcp/hedgedItem/interface'
+import { queryTableList, MtpTableButton, defineComponent, handleComposeTable } from '@/common/export/commonTable'
+import { HedgedItemStatus } from '@/@next/constants/enum/hedgedItemStatus'
+import { getHedgedTypeName } from '@/@next/constants/enum/hedgedType'
+import { Ermcp2HedgedItemReq, Ermcp2HedgedItemRsp } from '@/services/go/ermcp/hedgedItem/interface'
 import { queryErmcp2HedgedItem } from '@/services/go/ermcp/hedgedItem'
 import { useMenu } from '@/@next/hooks/common'
-import MtpTableScroll from '@/common/components/tableScroll/index.vue';
+import { getUserId } from '@/services/bus/user'
+import MtpTableScroll from '@/common/components/tableScroll/index.vue'
 import MtpTabComponent from '@/@next/components/base/tab-component/index.vue'
-import Filter from '../components/filter/index.vue';
+import Filter from '../components/filter/index.vue'
 
 export default defineComponent({
     components: {
@@ -37,17 +44,30 @@ export default defineComponent({
         const { auth } = useMenu();
         const { loading, tableList, queryTable } = queryTableList<Ermcp2HedgedItemRsp>(true, 2); // 表格列表数据
 
+        const queryFn = () => {
+            const param: Ermcp2HedgedItemReq = {
+                userid: getUserId(),
+                hedgeditemstatus: HedgedItemStatus.Finish,
+            }
+            queryTable(queryErmcp2HedgedItem, param).then((res) => {
+                if (res.length) {
+                    composeTable.selectedRow.value = res[0];
+                }
+            })
+        }
+
         // 表格通用逻辑
-        const param: ComposeTableParam = {
-            queryFn: () => queryTable(queryErmcp2HedgedItem, { hedgeditemstatus: 3 }),
+        const composeTable = handleComposeTable<Ermcp2HedgedItemRsp>({
+            queryFn,
             tableName: 'table_pcweb_hedgeditem_trade_finish',
-        }
+        })
 
         return {
-            ...handleComposeTable(param),
+            ...composeTable,
             loading,
             tableList,
             auth,
+            getHedgedTypeName,
         }
     }
 })

+ 37 - 9
src/views/hedgeditem/trade/running/index.vue

@@ -14,18 +14,40 @@
                     <mtp-table-button class="btn-list-sticky" :buttons="tableButtons" :record="record"
                         @click="openComponent" />
                 </template>
+                <!-- 套期类型 -->
+                <template #hedgedtype="{ text }">
+                    <span>{{ getHedgedTypeName(text) }}</span>
+                </template>
+                <!-- 套期商品 -->
+                <template #middlegoodsname="{ record }">
+                    <span>{{ record.middlegoodslist[0]?.middlegoodsname ?? '--' }}</span>
+                </template>
+                <!-- 未执行套期量 -->
+                <template #unexehedgeqty="{ record }">
+                    <span>{{ record.middlegoodslist[0]?.unexehedgeqty ?? '--' }}</span>
+                </template>
+                <!-- 期货套期量 -->
+                <template #futurehedgeqty="{ record }">
+                    <span>{{ record.middlegoodslist[0]?.futurehedgeqty ?? '--' }}</span>
+                </template>
+                <!-- 期现敞口量 -->
+                <template #hiexpsoure="{ record }">
+                    <span>{{ record.middlegoodslist[0]?.hiexpsoure ?? '--' }}</span>
+                </template>
             </a-table>
         </template>
     </mtp-table-scroll>
-    <mtp-tab-component :options="{ selectedRow }" />
+    <mtp-tab-component class="table-detail" :options="{ selectedRow }" />
     <component :is="componentId" v-if="componentId" v-bind="{ selectedRow }" @cancel="closeComponent"></component>
 </template>
 
 <script lang="ts">
 import { queryTableList, MtpTableButton, defineAsyncComponent, defineComponent, handleComposeTable } from '@/common/export/commonTable'
-import { Ermcp2HedgedItemRsp } from '@/services/go/ermcp/hedgedItem/interface'
-import { queryErmcp2HedgedItem } from '@/services/go/ermcp/hedgedItem'
+import { getHedgedTypeName } from '@/@next/constants/enum/hedgedType'
+import { Ermcp8RunningHedgeditemReq, Ermcp2HedgedItemRsp } from '@/services/go/ermcp/hedgedItem/interface'
+import { queryErmcp8RunningHedgeditem } from '@/services/go/ermcp/hedgedItem'
 import { useMenu } from '@/@next/hooks/common'
+import { getUserId } from '@/services/bus/user'
 import MtpTableScroll from '@/common/components/tableScroll/index.vue'
 import MtpTabComponent from '@/@next/components/base/tab-component/index.vue'
 import Filter from '../components/filter/index.vue'
@@ -47,16 +69,21 @@ export default defineComponent({
         const headerButtons = authFilter(['add']);
         const tableButtons = authFilter(['add'], true);
 
-        const queryFn = () => queryTable(queryErmcp2HedgedItem, { hedgeditemstatus: 3 }).then((res) => {
-            if (res.length) {
-                composeTable.selectedRow.value = res[0];
+        const queryFn = () => {
+            const param: Ermcp8RunningHedgeditemReq = {
+                userid: getUserId(),
             }
-        })
+            queryTable(queryErmcp8RunningHedgeditem, param).then((res) => {
+                if (res.length) {
+                    composeTable.selectedRow.value = res[0];
+                }
+            })
+        }
 
         // 表格通用逻辑
         const composeTable = handleComposeTable<Ermcp2HedgedItemRsp>({
             queryFn,
-            tableName: 'table_pcweb_hedgeditem_trade_finish',
+            tableName: 'table_pcweb_hedgeditem_trade_running',
         })
 
         return {
@@ -64,7 +91,8 @@ export default defineComponent({
             loading,
             tableList,
             headerButtons,
-            tableButtons
+            tableButtons,
+            getHedgedTypeName,
         }
     }
 })

+ 8 - 0
src/views/iframe/setup.ts

@@ -56,6 +56,14 @@ const iframeCode: { code: string, tabIndex: number }[] = [
         tabIndex: 3,
     },
     {
+        code: 'hedgeditem_futures_out', // 套期交易-期货成交关联-外部成交单关联
+        tabIndex: 1,
+    },
+    {
+        code: 'hedgeditem_futures_record', // 套期交易-期货成交关联-关联记录
+        tabIndex: 3,
+    },
+    {
         code: 'hedge_ratio_checkpending', // 风管审核-套保比例审核-待审核
         tabIndex: 1,
     },