516 lines
24 KiB
Plaintext
516 lines
24 KiB
Plaintext
@model TradeViewModel
|
|
@using YLErp.Modules.CalculationModule
|
|
@{
|
|
Layout = null;
|
|
var tradeModel = Model.Trade;
|
|
var isPremiumRate = tradeModel.IsUsePremiumRate == true;
|
|
var salesNames = String.Join(",", Model.SalesCommission.Select(n => n.SalesmanName).ToArray());
|
|
|
|
var isJd = tradeModel.UnderlyingCode?.Trim().ToUpper().StartsWith("JD") ?? false;
|
|
tradeModel.TradeUnit = PS.Config.IsUseDisplayNotional ? (tradeModel.QuoteUnit == "500千克" ? "半吨" : (isJd ? "吨" : tradeModel.QuoteUnit)) : tradeModel.TradeUnit;
|
|
var volFmt = PS.Config.IsTradeVol && PS.Config.ErpElement.VolMoreAccurate ? OtcFormatFlag.percent4 : OtcFormatFlag.percent;
|
|
}
|
|
|
|
<div id="optionVueDiv">
|
|
<div class="tabbable">
|
|
<ul id="myTab" class="nav nav-tabs nav-main">
|
|
<li class="nav-item">
|
|
<a class="nav-link active" href="#baseInfo" data-toggle="tab">成交</a>
|
|
</li>
|
|
@if (Model.unWindTradeCashList != null && Model.unWindTradeCashList.Any())
|
|
{
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#terminationInfo" data-toggle="tab">提前终止</a>
|
|
</li>
|
|
}
|
|
@if (Model.maturityTradeCash != null)
|
|
{
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#maturityInfo" data-toggle="tab">到期</a>
|
|
</li>
|
|
}
|
|
@if (ConsTrade.TradeStatusAfterConfirmed.Contains(Model.Trade.TradeStatus))
|
|
{
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#ClientCashinCashout" data-toggle="tab">资金记录</a>
|
|
</li>
|
|
}
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="tab-content">
|
|
|
|
<div id="baseInfo" class="tab-pane in active">
|
|
<table class="table table-bordered">
|
|
<tr>
|
|
<td class="tdRight">簿记账户</td>
|
|
<td>@(tradeModel.AssetBookName)</td>
|
|
@if (isPremiumRate)
|
|
{
|
|
<td class="tdRight">期权费率</td>
|
|
<td>@(tradeModel.PremiumRate.OtcFormat(OtcFormatFlag.premiumRateP))</td>
|
|
}
|
|
else
|
|
{
|
|
<td class="tdRight">权利金</td>
|
|
<td>
|
|
@(tradeModel.TradeSinglePrice.OtcFormat(OtcFormatFlag.tradeSinglePrice))
|
|
@if (tradeModel.TradeSinglePrice != null)
|
|
{
|
|
@(tradeModel.QuoteUnitSingle)
|
|
}
|
|
</td>
|
|
}
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">交易员</td>
|
|
<td>@(tradeModel.TraderName)</td>
|
|
<td class="tdRight">有效成交数量</td>
|
|
<td>
|
|
@(tradeModel.TradeOriginalAmount.OtcFormatNotional(tradeModel.CountRatio, PS.Config.IsUseDisplayNotional))
|
|
@(tradeModel.TradeUnit)
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">交易对手方</td>
|
|
<td>@(tradeModel.ClientName)</td>
|
|
<td class="tdRight">成交数量</td>
|
|
<td>@(TradeCalcHelper.GetTradeAmountV(tradeModel).OtcFormatNotional(tradeModel.CountRatio, PS.Config.IsUseDisplayNotional)) @(tradeModel.TradeUnit)</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">交易编号</td>
|
|
<td>@(tradeModel.TradeNumber)</td>
|
|
<td class="tdRight">成交总额</td>
|
|
<td>@(tradeModel.TradePrice.OtcFormatMoney())</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">交易方向</td>
|
|
<td>@(tradeModel.BuySell)</td>
|
|
<td class="tdRight">名义本金</td>
|
|
<td>@(tradeModel.OriginalStockEqvNotionalV2.OtcFormat(OtcFormatFlag.StockEqvNotional))</td>
|
|
</tr>
|
|
@if (!string.IsNullOrEmpty(Model.OriginalStockEqvNotionalV2MultipleExchangeRate))
|
|
{
|
|
<tr>
|
|
<td class="tdRight">名义本金(结算币种)</td>
|
|
<td>@Model.OriginalStockEqvNotionalV2MultipleExchangeRate</td>
|
|
<td class="tdRight"></td>
|
|
<td></td>
|
|
</tr>
|
|
}
|
|
<tr>
|
|
<td class="tdRight">期权类型</td>
|
|
<td>@(tradeModel.TradeType)</td>
|
|
<td class="tdRight">有效名义本金</td>
|
|
<td>@(tradeModel.StockEqvNotionalReal.OtcFormat(OtcFormatFlag.StockEqvNotional))</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">标的代码</td>
|
|
<td>
|
|
@if (tradeModel.TradeType == "合成价差期权")
|
|
{
|
|
<a href="javascript:void(0)" class="selftooltip" style="z-index:10000000" data-toggle="tooltip" title="@(tradeModel.SyntheticUnderlyingTipsInfo)">@(tradeModel.UnderlyingCode)</a>
|
|
}
|
|
else
|
|
{
|
|
<span>@(tradeModel.UnderlyingCode)</span>
|
|
}
|
|
</td>
|
|
<td class="tdRight">期初标的价格</td>
|
|
<td>@(tradeModel.SpotPrice.OtcFormat(OtcFormatFlag.umprice))</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">成交日期</td>
|
|
<td>@(tradeModel.TradeDate.OtcFormatDate())</td>
|
|
<td class="tdRight">执行价格</td>
|
|
<td>@(tradeModel.StrikeToShow)</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">到期日期</td>
|
|
<td>@(tradeModel.ExerciseDate.OtcFormatDate())</td>
|
|
<td class="tdRight">有效持仓数量</td>
|
|
<td>@(tradeModel.TradeAmount.OtcFormatNotional(tradeModel.CountRatio, PS.Config.IsUseDisplayNotional))</td>
|
|
</tr>
|
|
@if (PS.Config.IsTradeVol)
|
|
{
|
|
<tr>
|
|
<td class="tdRight">成交波动率</td>
|
|
<td>@(tradeModel.TradeOpenVolatility.OtcFormat(volFmt))</td>
|
|
<td class="tdRight">目标波动率</td>
|
|
<td>@(tradeModel.TradeCloseVolatility.OtcFormat(volFmt))</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">平滑过渡天数</td>
|
|
<td>@(tradeModel.NumOfSmoothingDays)</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
}
|
|
<tr>
|
|
<td class="tdRight">交易状态</td>
|
|
<td>@(tradeModel.TradeStatus)</td>
|
|
<td class="tdRight">权利金应付日</td>
|
|
<td>@(tradeModel.PremiumPayDate.OtcFormatDate())</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">保底收益</td>
|
|
<td>
|
|
@if (isPremiumRate)
|
|
{
|
|
@(tradeModel.PrincipalRateWrite.OtcFormatPercent())
|
|
}
|
|
else
|
|
{
|
|
@(tradeModel.SinglePrincipalWrite.OtcFormatMoney())
|
|
if (tradeModel.TradeSinglePrice != null)
|
|
{
|
|
@(tradeModel.QuoteUnitSingle)
|
|
}
|
|
}
|
|
</td>
|
|
<td class="tdRight">保底收益总额</td>
|
|
<td>@(tradeModel.OriginalPrincipalSum.OtcFormatMoney())</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">参与率</td>
|
|
<td>@(tradeModel.ParticipationRate.OtcFormatPercent())</td>
|
|
<td class="tdRight">分红率</td>
|
|
<td>@(tradeModel.DividendRate.OtcFormatPercent())</td>
|
|
</tr>
|
|
@{
|
|
tradeModel.MetaDic.TryGetValue("AnnualizeFactor", out var factor);
|
|
<tr>
|
|
<td class="tdRight">期权年化</td>
|
|
<td>@(tradeModel.IsAnnualized ? '是' : '否')</td>
|
|
<td class="tdRight">年化系数</td>
|
|
<td>@(factor)</td>
|
|
</tr>
|
|
}
|
|
<tr>
|
|
<td class="tdRight">自定义结构类型</td>
|
|
<td>@tradeModel.StructureType</td>
|
|
<td class="tdRight">结构说明</td>
|
|
<td>@(tradeModel.StructureIntroduction)</td>
|
|
</tr>
|
|
@if (AppHelper.UseFutureVersion("销售提成", "V2"))
|
|
{
|
|
<tr>
|
|
<td class="tdRight"> @(PS.Config.ErpElement.SaleMode == YLErp.Configuration.Enums.SaleMode.SaleMen ? "销售员" : "客户经理")</td>
|
|
<td>@(salesNames)</td>
|
|
<td class="tdRight">销售提成</td>
|
|
<td>@(Model.SalesCommission.FirstOrDefault()?.CommissionString())</td>
|
|
</tr>
|
|
}
|
|
<tr>
|
|
<td class="tdRight">观察信息</td>
|
|
<td>
|
|
@{
|
|
if (tradeModel.trade_custom != null && !tradeModel.trade_custom.ObservationDates.IsNullOrWhiteSpace())
|
|
{
|
|
var colInfos = "['日期']";
|
|
@MyControls.Btn("查看", string.Format("showObservationInfos('{0}',{1},'{2}')", "观察信息", colInfos, tradeModel.trade_custom.ObservationDates))
|
|
}
|
|
}
|
|
</td>
|
|
@if (!PS.Config.Is润和)
|
|
{
|
|
<td class="tdRight">交易对手方</td>
|
|
<td>@(tradeModel.OpponentRole ?? "乙方")</td>
|
|
}
|
|
else
|
|
{
|
|
<td class="tdRight"></td>
|
|
<td></td>
|
|
}
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">报送观察频率</td>
|
|
<td>
|
|
@{
|
|
tradeModel.MetaDic.TryGetValue(YLErp.DBModels.Consts.ConsTradeMetaKey.kiObservationRate, out var kiObservationDate);
|
|
@(!string.IsNullOrEmpty(kiObservationDate) && kiObservationDate.IndexOf("|") > 0 ?
|
|
kiObservationDate.Substring(kiObservationDate.IndexOf('|') + 1).Replace("DAIL", " 日度").Replace("WEEK", " 周度").Replace("MNTH", " 月度").Replace("YEAR", " 年度").Replace("OTHER", "其他") : "其他")
|
|
}
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">备注</td>
|
|
<td colspan="3">@(tradeModel.RemarkInfo)</td>
|
|
</tr>
|
|
@if (CurUser.交易管理_交易标签查看权限)
|
|
{
|
|
<tr>
|
|
<td class="tdRight">标签</td>
|
|
<td colspan="3">
|
|
<div class="tag-context" style="width:100%;display:inline-block;line-height:36px;text-align:left;">
|
|
@if (Model.Tags != null && Model.Tags.Any())
|
|
{
|
|
foreach (var tag in Model.Tags)
|
|
{
|
|
<span class="tag-item" data-id="@tag.Id" data-name="@tag.Name">
|
|
<span class="tag-text" data-value="@tag.Id">@tag.Name</span>
|
|
@if (CurUser.交易管理_交易标签调整权限)
|
|
{
|
|
<span class="tag-remove" onclick="DeleteTag('@tag.Name')">x</span>
|
|
}
|
|
</span>
|
|
}
|
|
}
|
|
@if (CurUser.交易管理_交易标签调整权限)
|
|
{
|
|
<span class="tag-add">+</span>
|
|
}
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
}
|
|
</table>
|
|
|
|
@if (tradeModel.Propertys != null)
|
|
{
|
|
var i = 0;
|
|
var length = tradeModel.Propertys.Count;
|
|
var preProperty = new ExtendInfoModel();
|
|
|
|
<table class="table table-bordered table-exotic">
|
|
@foreach (var property in tradeModel.Propertys)
|
|
{
|
|
i++;
|
|
if (i % 2 == 1)
|
|
{
|
|
preProperty = property;
|
|
if (i == length)
|
|
{
|
|
<tr>
|
|
<td class="tdRight">@property.name</td>
|
|
<td>@property.value</td>
|
|
<td class="tdRight"></td>
|
|
<td></td>
|
|
</tr>
|
|
}
|
|
}
|
|
else
|
|
{
|
|
<tr>
|
|
<td class="tdRight">@preProperty.name</td>
|
|
<td>@preProperty.value</td>
|
|
<td class="tdRight">@property.name</td>
|
|
<td>@property.value</td>
|
|
</tr>
|
|
}
|
|
}
|
|
</table>
|
|
}
|
|
</div>
|
|
|
|
@if (Model.unWindTradeCashList != null)
|
|
{
|
|
var index = 1;
|
|
<div id="terminationInfo" class="tab-pane">
|
|
@foreach (var tradeCash in Model.unWindTradeCashList)
|
|
{
|
|
if (tradeCash.Action == "系统操作-行权费")
|
|
{
|
|
<table class="table table-bordered">
|
|
<tr>
|
|
<td class="tdRight">提前终止序号</td>
|
|
<td>@(index++)</td>
|
|
@if (isPremiumRate)
|
|
{
|
|
<td class="tdRight">行权比例</td>
|
|
<td>@(tradeCash.NotionalPercent.OtcFormatPercent())</td>
|
|
}
|
|
else
|
|
{
|
|
<td class="tdRight">行权数量</td>
|
|
<td>@(tradeCash.TradeAmount.OtcFormatNotional(tradeModel.CountRatio, PS.Config.IsUseDisplayNotional))</td>
|
|
}
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">行权日期</td>
|
|
<td>@(tradeCash.ValueDate.OtcFormatDate())</td>
|
|
<td class="tdRight">收益总额</td>
|
|
<td>@(tradeCash.Amount.OtcFormatMoney())</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">行权标的价格</td>
|
|
<td>@(tradeCash.FinalPrice.OtcFormat(OtcFormatFlag.umprice))</td>
|
|
<td class="tdRight">实现盈亏</td>
|
|
<td>@(tradeCash.WinLoss)</td>
|
|
</tr>
|
|
<tr>
|
|
@if (isPremiumRate)
|
|
{
|
|
<td class="tdRight">行权收益</td>
|
|
<td>@(tradeCash.SingleWinPricePercent.OtcFormat(OtcFormatFlag.premiumRateP))</td>
|
|
}
|
|
else
|
|
{
|
|
<td class="tdRight">行权收益</td>
|
|
<td>@(tradeCash.SingleWinPrice.OtcFormat(OtcFormatFlag.tradeSinglePrice))</td>
|
|
}
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
}
|
|
else
|
|
{
|
|
<table class="table table-bordered">
|
|
<tr>
|
|
<td class="tdRight">提前终止序号</td>
|
|
<td>@(index++)</td>
|
|
@if (isPremiumRate)
|
|
{
|
|
<td class="tdRight">平仓单价</td>
|
|
<td>@(tradeCash.UnwindPricePercentRate.OtcFormatPercent())</td>
|
|
}
|
|
else
|
|
{
|
|
<td class="tdRight">平仓单价</td>
|
|
<td>@(tradeCash.UnwindPrice.OtcFormat(OtcFormatFlag.umprice))</td>
|
|
}
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">平仓日期</td>
|
|
<td>@(tradeCash.ValueDate.OtcFormatDate())</td>
|
|
@if (isPremiumRate)
|
|
{
|
|
<td class="tdRight">平仓比例</td>
|
|
<td>@(tradeCash.UnwindPercentRate.OtcFormatPercent())</td>
|
|
}
|
|
else
|
|
{
|
|
<td class="tdRight">平仓数量</td>
|
|
<td>@(tradeCash.UnwindTradeAmount.OtcFormatNotional(tradeModel.CountRatio, PS.Config.IsUseDisplayNotional))</td>
|
|
}
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">平仓标的价格</td>
|
|
<td>@(tradeCash.FinalPrice.OtcFormat(OtcFormatFlag.umprice))</td>
|
|
<td class="tdRight">平仓总额</td>
|
|
<td>@(tradeCash.Amount.OtcFormatMoney())</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">实现盈亏</td>
|
|
<td>@(tradeCash.WinLoss)</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
}
|
|
}
|
|
</div>
|
|
}
|
|
@if (Model.maturityTradeCash != null)
|
|
{
|
|
var mtc = Model.maturityTradeCash;
|
|
var asianStrikeType = tradeModel.TradeType != "亚式期权" ? string.Empty : (tradeModel.trade_asian_option?.StrikeType == "Floating" ? "Floating" : "Fixed");
|
|
<div id="maturityInfo" class="tab-pane">
|
|
<table class="table table-bordered">
|
|
<tr>
|
|
<td class="tdRight">到期日期</td>
|
|
<td>@(mtc.ValueDateString)</td>
|
|
@if (tradeModel.TradeType == "累计期权")
|
|
{
|
|
<td></td>
|
|
<td></td>
|
|
}
|
|
else if (isPremiumRate)
|
|
{
|
|
<td class="tdRight">到期比例</td>
|
|
<td>@(mtc.NotionalPercent.OtcFormatPercent())</td>
|
|
}
|
|
else
|
|
{
|
|
<td class="tdRight">到期数量</td>
|
|
<td>@(mtc.TradeAmount.OtcFormatNotional(tradeModel.CountRatio, PS.Config.IsUseDisplayNotional))</td>
|
|
}
|
|
</tr>
|
|
<tr>
|
|
@if (isPremiumRate && mtc.Action != "系统操作-行权费")
|
|
{
|
|
<td class="tdRight">到期收益</td>
|
|
<td>@(mtc.SingleWinPricePercent.OtcFormat(OtcFormatFlag.premiumRateP))</td>
|
|
}
|
|
else
|
|
{
|
|
<td class="tdRight">到期收益</td>
|
|
<td>@(mtc.SingleWinPrice.OtcFormat(OtcFormatFlag.tradeSinglePrice))</td>
|
|
}
|
|
<td class="tdRight">实现盈亏</td>
|
|
<td>@(mtc.WinLoss)</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="tdRight">@(asianStrikeType == "Fixed" ? "到期标的均价" : "到期标的价格")</td>
|
|
<td>@(mtc.FinalPrice.OtcFormat(OtcFormatFlag.umprice))</td>
|
|
<td class="tdRight">收益总额</td>
|
|
<td>@(mtc.Amount.OtcFormatMoney())</td>
|
|
</tr>
|
|
@if (!string.IsNullOrEmpty(asianStrikeType))
|
|
{
|
|
<tr>
|
|
@if (asianStrikeType == "Fixed")
|
|
{
|
|
<td class="tdRight">到期标的价格</td>
|
|
<td>@(mtc.SpotPrice.OtcFormat(OtcFormatFlag.umprice))</td>
|
|
}
|
|
else
|
|
{
|
|
<td class="tdRight">浮动行权价</td>
|
|
<td>@(mtc.Strike.OtcFormat(OtcFormatFlag.umprice))</td>
|
|
}
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
}
|
|
</table>
|
|
</div>
|
|
}
|
|
@if (ConsTrade.TradeStatusAfterConfirmed.Contains(Model.Trade.TradeStatus))
|
|
{
|
|
<div id="ClientCashinCashout" class="tab-pane">
|
|
<div style="display:inline;right:100px;">
|
|
@if (CurUser.交易管理_交易资金维护)
|
|
{
|
|
<button id="" class="btn btn-primary " type="button" onclick="Addentryexit(0,@Model.Trade.id);return false;">
|
|
新增
|
|
</button>
|
|
<button id="" class="btn btn-primary " type="button" onclick="setExcute();return false;">
|
|
确认
|
|
</button>
|
|
<button id="" class="btn btn-primary " type="button" onclick="setReject();return false;">
|
|
拒绝
|
|
</button>
|
|
}
|
|
</div>
|
|
<div style="min-width: 1000px;" id="entryexitEditPopInner"></div>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="modal fade" id="myCommentsModal" data-backdrop="static">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<!-- 模态框头部 -->
|
|
<div class="modal-header">
|
|
<h4 class="modal-title">修改备注</h4>
|
|
<button type="button" class="close" v-on:click="closeModal()">×</button>
|
|
</div>
|
|
|
|
<!-- 模态框主体 -->
|
|
<div class="modal-body">
|
|
<lable>备注</lable>
|
|
<input v-model="Comments" />
|
|
<input hidden v-model="EncryptId" />
|
|
</div>
|
|
|
|
<!-- 模态框底部 -->
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn" v-on:click="saveModal()">保存</button>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div> |