620 lines
40 KiB
Plaintext
620 lines
40 KiB
Plaintext
@using YLErp.Web.Models.JsModels;
|
|
@model trade
|
|
@{
|
|
ViewBag.Title = "交易信息 | 编辑";
|
|
Layout = "~/Views/Shared/_InfoLayout.cshtml";
|
|
|
|
var isAdd = Model.id == 0;
|
|
var isUseApproval = ViewBag.isUseApproval ?? false;
|
|
var canChangeClient = isAdd || Model.TradeStatus == ConsTrade.新增待确认;
|
|
var canAddNewTrader = CurUser.交易管理_新增选择交易员;
|
|
|
|
var jsClients = canChangeClient ? JsDataModel.GetClients() : Enumerable.Empty<ClientJsModel>();
|
|
var jsClient = canChangeClient && Model.ClientId > 0 ? jsClients.FirstOrDefault(n => n.id == Model.ClientId) : null;
|
|
var jsAssetUnits = JsDataModel.GetAssetUnits(CurUser);
|
|
var tradeMarginTemplates = new tradeController().GetMarginTemplates();
|
|
var tradeMarginTemplateItems = new tradeController().GetMarginTemplateItems();
|
|
var jsAssetUnit = Model.AssetId > 0 ? jsAssetUnits.FirstOrDefault(n => n.id == Model.AssetId) : null;
|
|
var assetunits = JsDataModel.GetAssetUnits(CurUser);
|
|
var jsTraders = canAddNewTrader ? JsDataModel.GetTraders(assetunits) : Enumerable.Empty<TraderJsModel>();
|
|
var jsTrader = canAddNewTrader && Model.TraderId > 0 ? jsTraders.FirstOrDefault(n => n.id == Model.TraderId) : null;
|
|
var currencys = CurrencyController.getList();
|
|
|
|
var pageObj = new
|
|
{
|
|
isAdd,
|
|
canChangeClient,
|
|
canAddNewTrader,
|
|
Trade = Model,
|
|
valuedate = valuedateBLL.ValueDate.ToString("yyyy-MM-dd"),
|
|
g_get_trade_swap_details = Model.get_trade_swap_details,
|
|
g_pay_trade_swap_details = Model.pay_trade_swap_details,
|
|
jsClient,
|
|
jsClients,
|
|
jsAssetUnit,
|
|
jsAssetUnits,
|
|
jsTrader,
|
|
jsTraders,
|
|
tradeMarginTemplates = tradeMarginTemplates,
|
|
tradeMarginTemplateItems = tradeMarginTemplateItems,
|
|
needRemark = !isAdd && valuedateBLL.SystemDate.EditTradeNeedRemark,
|
|
parentTradeId = ViewBag.ParentTradeId,
|
|
currencys = currencys,
|
|
showCCR = PS.Config.Company == CompanyEnum.国海,
|
|
isGuoTou = PS.Config.Company == CompanyEnum.国投,
|
|
isHuaAn=PS.Config.Company==CompanyEnum.华安,
|
|
generateAmendDoc = PS.Config.TradeElement.IsGenerateAmendDoc,
|
|
needSendChangeEmail = PS.Config.TradeElement.IsAmendableAfterConfirm && PS.Config.TradeElement.IsGenerateAmendDoc,
|
|
};
|
|
}
|
|
@section CSS{
|
|
<link rel="stylesheet" href="~/Style/Css/swapTradeEdit.css?v=@(HtmlUtil.JsVersion)" />
|
|
<link href="~/Style/Css/settag.css?v=@(HtmlUtil.JsVersion)" rel="stylesheet" />
|
|
}
|
|
@section JS{
|
|
<script type="text/javascript">
|
|
const page = @Json.Serialize(pageObj);
|
|
page.Trade.StartDate = page.Trade.StartDate ? page.Trade.StartDate.substr(0, 10) : "";
|
|
page.Trade.TradeDate = page.Trade.TradeDate ? page.Trade.TradeDate.substr(0, 10) : "";
|
|
page.Trade.ExerciseDate = page.Trade.ExerciseDate ? page.Trade.ExerciseDate.substr(0, 10) : "";
|
|
page.Trade.SettlementDate = page.Trade.SettlementDate ? page.Trade.SettlementDate.substr(0, 10) : "";
|
|
if(page.Trade.trade_swap.PayLot>0){
|
|
page.Trade.trade_swap.PayLot = page.Trade.trade_swap.PayLot.toFixed(otcformat.trading.notional.precision);
|
|
}
|
|
if (page.Trade.trade_swap.GetLot > 0) {
|
|
page.Trade.trade_swap.GetLot = page.Trade.trade_swap.GetLot.toFixed(otcformat.trading.notional.precision);
|
|
}
|
|
</script>
|
|
<script src="@HtmlUtil.BasicDataJs("品种","客户","簿记","交易员")"></script>
|
|
<script src="~/front/calendar?v=@(HtmlUtil.JsVersion)"></script>
|
|
<script src="~/Scripts/fast/fastVue.components.js?v=@HtmlUtil.JsVersion"></script>
|
|
<script src="~/Scripts/app/tradeHelper.js?v=@HtmlUtil.JsVersion"></script>
|
|
<script src="~/Scripts/app/trade/swapTradeEdit.js?v=@HtmlUtil.JsVersion"></script>
|
|
<script src="~/Scripts/app/trade/settag.js?v=@HtmlUtil.JsVersion" type="text/javascript"></script>
|
|
<script type="text/javascript">
|
|
const HasEditTagPermission = @Json.Serialize(CurUser.系统管理.标签编辑权限);
|
|
</script>
|
|
}
|
|
|
|
<form id="tradeEditForm">
|
|
<div class="row no-gutters">
|
|
<div class="col-auto" style="width:400px;">
|
|
<div class="yc-panel">
|
|
<div class="form-group">
|
|
<label class="formlabel half">互换类型</label>
|
|
<select v-model="trade.trade_swap.SwapType" v-on:change="changeSwapType">
|
|
<option>普通</option>
|
|
@*<option>多空组合</option>*@
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">簿记账户</label>
|
|
<input type="hidden" name="AssetBookName" id="AssetBookName" value="@(Model.AssetBookName)" />
|
|
<input type="text" name="AssetId" id="AssetId" value="@(Model.AssetId)" class="text-box" />
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">交易对手方</label>
|
|
@if (pageObj.canChangeClient)
|
|
{
|
|
<input type="hidden" name="ClientName" id="ClientName" value="@(Model.ClientName)" />
|
|
<input type="text" name="ClientId" id="ClientId" value="@(Model.ClientId)" title="@(Model.ClientName)" class="text-box" />
|
|
}
|
|
else
|
|
{
|
|
<input type="hidden" name="ClientId" id="ClientId" value="@(Model.ClientId)" />
|
|
<input type="text" name="ClientName" id="ClientName" value="@(Model.ClientName)" title="@(Model.ClientName)" readonly class="text-box" />
|
|
}
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">交易员</label>
|
|
@if (pageObj.canAddNewTrader)
|
|
{
|
|
<input type="hidden" name="TraderName" id="TraderName" value="@(Model.TraderName)" />
|
|
<input type="text" name="TraderId" id="TraderId" value="@(Model.TraderId)" class="text-box" />
|
|
}
|
|
else
|
|
{
|
|
<input type="hidden" name="TraderId" id="TraderId" value="@(Model.TraderId)" />
|
|
<input type="text" name="TraderName" id="TraderName" value="@(Model.TraderName)" readonly class="text-box" />
|
|
}
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">成交日期</label>
|
|
<vue-datepicker :maxdate="maxTradeDate" :holiday="1" v-model="trade.TradeDate" v-on:input="changeTradeDate" />
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">开始日期</label>
|
|
<vue-datepicker :maxdate="maxTradeDate" :holiday="1" v-model="trade.StartDate" />
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">到期日期</label>
|
|
<vue-datepicker name="ExerciseDate" :holiday="1" v-model="trade.ExerciseDate" v-on:input="changeExerciseDate" />
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">结算日期</label>
|
|
<vue-datepicker name="SettlementDate" :holiday="1" v-model="trade.SettlementDate" />
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">名义本金</label>
|
|
<vue-number-input id="StockEqvNotional" name="StockEqvNotional" v-model="trade.StockEqvNotional" v-on:input="changeStockEqvNotional" v-bind:format="inputFormatEqvNotional" v-bind:disabled="trade.trade_swap.SwapType == '多空组合'"></vue-number-input>
|
|
</div>
|
|
@if (Model.id < 1 || PS.Config.ErpElement.CanEditTradeNumber)
|
|
{
|
|
<div class="form-group">
|
|
<label class="formlabel half">交易编号</label>
|
|
<input class="text-box" type="text" v-model="trade.TradeNumber" placeholder="留空自动生成">
|
|
</div>
|
|
}
|
|
<div id="salesCommissionCtrl"></div>
|
|
@if (pageObj.isGuoTou)
|
|
{
|
|
<div class="form-group">
|
|
<label class="formlabel half">预付金模板</label>
|
|
<input name="MarginTemplateName" id="MarginTemplateName" class="text-box" type="text">
|
|
</div>
|
|
}
|
|
|
|
@if (pageObj.showCCR)
|
|
{
|
|
<div class="form-group" id="ccr_kArea">
|
|
<label class="formlabel half">CCR指标k值</label>
|
|
<input type="text" class="input-number" id="ccr_k" name="ccr_k" value="@(Model.MetaDic.ContainsKey("ccr_k") ? Model.MetaDic["ccr_k"]:"1")" />
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">信用风险敞口</label>
|
|
<select id="ignoreRiskExposure">
|
|
<option value="0" @((!Model.MetaDic.ContainsKey(YLErp.DBModels.Consts.ConsTradeMetaKey.ignoreRiskExposure)) || Model.MetaDic[YLErp.DBModels.Consts.ConsTradeMetaKey.ignoreRiskExposure] != "1" ? "selected" : "")>参与计算</option>
|
|
<option value="1" @(Model.MetaDic.ContainsKey(YLErp.DBModels.Consts.ConsTradeMetaKey.ignoreRiskExposure) && Model.MetaDic[YLErp.DBModels.Consts.ConsTradeMetaKey.ignoreRiskExposure] == "1" ? "selected" : "")>忽略</option>
|
|
</select>
|
|
</div>
|
|
}
|
|
@if (PS.Config.ErpElement.SecuritiesEnvironment)
|
|
{
|
|
if (!PS.Config.Is润和)
|
|
{
|
|
<div class="form-group">
|
|
<label class="formlabel half">交易场所</label>
|
|
<select v-model="viewState.Extend.TradingPlace" v-on:change="changeTradingPlace">
|
|
@foreach (var item in YLErp.DBModels.Consts.ConsReport.TradingPlaceMap)
|
|
{
|
|
<option>@item.Key</option>
|
|
}
|
|
</select>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="formlabel half">清算机构</label>
|
|
<select name="ClearingAgency" v-model="viewState.Extend.ClearingAgency" v-on:change="changeClearingAgency">
|
|
@foreach (var item in YLErp.DBModels.Consts.ConsReport.ClearingAgencyMap)
|
|
{
|
|
if (item.Key == "甲方" || item.Key == "乙方")
|
|
{
|
|
continue;
|
|
}
|
|
<option>@item.Key</option>
|
|
}
|
|
</select>
|
|
</div>
|
|
}
|
|
|
|
if (Model.id == 0 || Model.TradeStatus == ConsTrade.新增待确认)
|
|
{
|
|
<div class="form-group">
|
|
<label class="formlabel half">主协议编号</label>
|
|
<select name="MainProtocolCode" id="MainProtocolCode" v-on:change="changeMainProtocolCode">
|
|
</select>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="formlabel half">补充协议编号</label>
|
|
<select name="SupProtocolCode" id="SupProtocolCode">
|
|
</select>
|
|
</div>
|
|
}
|
|
else
|
|
{
|
|
var MainProtocolCode = Model.MetaDic.Keys.Contains("主协议编号") ? Model.MetaDic["主协议编号"] : "";
|
|
var SupProtocolCode = Model.MetaDic.Keys.Contains("补充协议编号") ? Model.MetaDic["补充协议编号"] : "";
|
|
<div class="form-group">
|
|
<label class="formlabel half">主协议编号</label>
|
|
<input name="MainProtocolCode" id="MainProtocolCode" class="text-box" type="text" value="@MainProtocolCode" readonly>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="formlabel half">补充协议编号</label>
|
|
<input name="SupProtocolCode" id="SupProtocolCode" class="text-box" type="text" value="@SupProtocolCode" readonly>
|
|
</div>
|
|
}
|
|
}
|
|
else
|
|
{
|
|
<div class="form-group">
|
|
<label class="formlabel half">中央对手方清算</label>
|
|
<select id="IsCentralClearing" v-on:change="changeIsCentralClearing">
|
|
<option value="N">否</option>
|
|
<option value="Y">是</option>
|
|
<option value="I">计划中央对手方清算</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">中央清算平台</label>
|
|
<select id="CentralClearingPaltform" v-on:change="changeCentralClearingPaltform">
|
|
@foreach (var item in YLErp.BLL.DictionaryBLL.GetList("中央清算平台", true, "", true))
|
|
{
|
|
<option value="@item.Value">@item.Text</option>
|
|
}
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">交易平台</label>
|
|
<select id="TradingPaltform" v-on:change="changeTradingPaltform">
|
|
@foreach (var item in YLErp.BLL.DictionaryBLL.GetList("交易平台", true, "", true))
|
|
{
|
|
<option value="@item.Value">@item.Text</option>
|
|
}
|
|
</select>
|
|
</div>
|
|
}
|
|
@if (!PS.Config.Is润和)
|
|
{
|
|
<div class="form-group">
|
|
<label class="formlabel half">交易对手方角色</label>
|
|
<select name="OpponentRole" v-model="trade.OpponentRole">
|
|
<option>甲方</option>
|
|
<option>乙方</option>
|
|
</select>
|
|
</div>
|
|
}
|
|
</div>
|
|
<div class="yc-panel">
|
|
<div class="form-group">
|
|
<label class="formlabel half">浮动收益年化</label>
|
|
<select v-model="trade.trade_swap.AnnualVarIncome">
|
|
<option :value="true">是</option>
|
|
<option :value="false">否</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">年化天数</label>
|
|
<vue-number-input v-model="trade.trade_swap.AnnualDays" v-bind:format="inputFormatInteger"></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">计息方式</label>
|
|
<select v-model="trade.trade_swap.RateCalcMode">
|
|
<option value="11">算头算尾</option>
|
|
<option value="10">算头不算尾</option>
|
|
<option value="01">不算头算尾</option>
|
|
<option value="00">不算头不算尾</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">是否开仓时收取开仓费</label>
|
|
<select v-model="trade.trade_swap.IsTradePriceWhenOpen" v-bind:disabled="trade.trade_swap.SwapType == '多空组合'">
|
|
<option :value="true">是</option>
|
|
<option :value="false">否</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">收费基本单位</label>
|
|
<select v-model="trade.trade_swap.IsShare" v-on:change="changeBaseUnit()">
|
|
<option :value="true">按手数收费</option>
|
|
<option :value="false">按份数收费</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half">计价币种</label>
|
|
<select v-model="trade.QuoteCurrency" disabled>
|
|
<option v-for="option in currencys">
|
|
{{ option.Text }}
|
|
</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group" v-show="trade.QuoteCurrency && trade.QuoteCurrency!=='CNY'">
|
|
<label class="formlabel half">汇率</label>
|
|
<input name="ExchangeRate" v-model="trade.ExchangeRate" type="number" />
|
|
</div>
|
|
<div style="height:1px"></div>
|
|
</div>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row no-gutters">
|
|
<div class="col-6">
|
|
<div class="yc-panel">
|
|
<div class='form-group' style="background: #87CEFA;">
|
|
<label class='formlabel half'>交易员收取</label>
|
|
<select v-model="trade.trade_swap.IsGetFloatingProfit" v-on:change="changeIsGetFloatingProfit()" style="background: #87CEFA;">
|
|
<option :value="true">浮动收益</option>
|
|
<option :value="false">利息</option>
|
|
</select>
|
|
</div>
|
|
<div class='form-group' v-show="trade.trade_swap.IsGetFloatingProfit && trade.trade_swap.SwapType != '多空组合'">
|
|
<label class='formlabel half'>多头空头</label>
|
|
<select v-model="trade.trade_swap.GetLongShort">
|
|
<option>多头</option>
|
|
<option>空头</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group" v-show="trade.trade_swap.IsGetFloatingProfit">
|
|
<label class="formlabel half">标的代码</label>
|
|
<vue-underlying id="trade.trade_swap.GetUnderlyingCode" v-model="trade.trade_swap.GetUnderlyingCode" v-on:change="setGetUnderlyingCode" />
|
|
</div>
|
|
<div class="form-group" v-show="trade.trade_swap.IsGetFloatingProfit && trade.trade_swap.SwapType != '多空组合'">
|
|
<label class="formlabel half">期初标的价格</label>
|
|
<input id="trade_swap.GetSpotPrice" class="text-box has-popover-syn" v-on:input="changeStockEqvNotional" onkeyup="this.value=this.value.replace(/[^0-9.-]/g,'')" onblur="this.value=(/^(-?0|-?[1-9]\d*)(\.\d*)?$/.test(this.value) ? this.value : '')" type="text" value="@Model.trade_swap.GetSpotPrice" name="trade_swap.GetSpotPrice" data-meta="组合标的">
|
|
</div>
|
|
<div class="form-group" v-show="trade.trade_swap.IsGetFloatingProfit && trade.trade_swap.SwapType != '多空组合'">
|
|
<label class="formlabel half">数量</label>
|
|
<vue-number-input v-model="trade.trade_swap.GetTradeAmount" v-on:input="changeGetTradeAmount" v-bind:format="inputFormatTradeAmount"></vue-number-input>
|
|
</div>
|
|
<div class="form-group" v-show="trade.trade_swap.IsGetFloatingProfit && trade.trade_swap.SwapType != '多空组合'">
|
|
<label class="formlabel half">手数</label>
|
|
<vue-number-input v-model="trade.trade_swap.GetLot" v-on:input="changeGetLot" v-bind:format="inputFormatTradeAmount"></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<template v-if="trade.trade_swap.IsGetFloatingProfit">
|
|
<label class="formlabel half">增强收益率(年化)</label>
|
|
</template>
|
|
<template v-else>
|
|
<label class="formlabel half">互换利率(年化)</label>
|
|
</template>
|
|
<vue-number-input v-model="trade.trade_swap.GetSwapRate" v-bind:format="inputFormatSwapRate" v-on:input="blurSwapRate('Get')"></vue-number-input>
|
|
</div>
|
|
<template v-if="!trade.trade_swap.IsGetFloatingProfit">
|
|
<div class="form-group">
|
|
<label class="formlabel half">互换间隔</label>
|
|
<input type="text" min="0" class="text-box" id="GetObservationRate" name="observationRate" readonly />
|
|
<a href="javascript:;" class="yt-input-group-append" title="设置观察日" v-on:click="setObservationDates('Get')" tabindex="-1">
|
|
<i class="fa fa-pencil-square"></i>
|
|
</a>
|
|
@*<button class="btn btn-sm btn-outline-danger" type="button" v-on:click="setObservationDates('Get')">设置观察日</button>*@
|
|
</div>
|
|
</template>
|
|
<div class="form-group" v-show="!trade.trade_swap.IsGetFloatingProfit">
|
|
<label class="formlabel half">单位交易费用</label>
|
|
<template v-if="!isSingleFee">
|
|
<vue-number-input v-model="trade.trade_swap.GetUnAnnualRate" v-on:input="changeGetUnAnnualRate" v-bind:format="inputFormatSwapRate" v-bind:disabled="trade.trade_swap.SwapType == '多空组合'"></vue-number-input>
|
|
<a href="javascript:;" title="点击后切换成绝对值权利金" v-on:click="showAbsPrice" class="yt-input-group-append" tabindex="-1">%</a>
|
|
</template>
|
|
<template v-else>
|
|
<vue-number-input v-model="getNotionalSingleFee" v-on:input="changeGetSingleFee" v-bind:format="inputFormatTradeSinglePrice" v-bind:disabled="trade.trade_swap.SwapType == '多空组合'"></vue-number-input>
|
|
<a href="javascript:;" title="点击后切换成标的价格百分比" v-on:click="showPercentPrice" class="yt-input-group-append" tabindex="-1">¥</a>
|
|
</template>
|
|
</div>
|
|
<div class="form-group" v-show="!trade.trade_swap.IsGetFloatingProfit">
|
|
<label class="formlabel half">交易费用</label>
|
|
<vue-number-input v-model="trade.trade_swap.GetTradePrice" v-on:input="changeGetTradePrice" v-bind:format="inputFormatTradePrice" v-bind:disabled="trade.trade_swap.SwapType == '多空组合'"></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half" for="GetMarginRate">初始预付金</label>
|
|
<vue-number-input v-model="trade.trade_swap.GetMarginRate" v-bind:format="inputFormatMarginRate"></vue-number-input>
|
|
</div>
|
|
<div class="form-group" style="padding-bottom: 10px;" v-show="trade.trade_swap.IsGetFloatingProfit && trade.trade_swap.SwapType == '多空组合'">
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<td>标的代码</td>
|
|
<td>多空方向</td>
|
|
<td>期初价格</td>
|
|
<td>份额</td>
|
|
<td>交易费用</td>
|
|
<td>操作</td>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr v-for="(item, index) in trade.get_trade_swap_details">
|
|
<td><vue-underlying v-model="item.UnderlyingCode" v-bind:index="index" v-on:change="changeGetUnderlying" style="width: 100px !important;"></vue-underlying></td>
|
|
<td>
|
|
<select v-model="item.LongShort" style="width: 52px !important;">
|
|
<option>多头</option>
|
|
<option>空头</option>
|
|
</select>
|
|
</td>
|
|
<td><vue-number-input v-model="item.SpotPrice" v-bind:format="inputFormatDouble2" v-on:input="sumStockEqvNotional(true)" style="width: 72px !important;" /></td>
|
|
<td><vue-number-input v-model="item.Notional" v-bind:format="inputFormatDouble2" v-on:input="sumStockEqvNotional(true)" style="width: 72px !important;" /></td>
|
|
<td><vue-number-input v-model="item.TradePrice" v-bind:format="inputFormatTradePrice" v-on:input="sumTradePrice(true)" style="width: 72px !important;" /></td>
|
|
<td><a v-on:click="deleteItem(index, true)" style="color: red;">删除</a></td>
|
|
</tr>
|
|
</tbody>
|
|
<tfoot>
|
|
<tr>
|
|
<td colspan="5">
|
|
<a v-on:click="deleteAll(true)" style="margin: 10px; color: red;">删除所有</a>
|
|
<a v-on:click="add(true)" style="margin: 10px; color: red;">新增</a>
|
|
</td>
|
|
</tr>
|
|
</tfoot>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-6">
|
|
<div class="yc-panel">
|
|
<div class='form-group' style="background: #87CEFA;">
|
|
<label class='formlabel half'>交易员支付</label>
|
|
<select v-model="trade.trade_swap.IsPayFloatingProfit" v-on:change="changeIsPayFloatingProfit()" style="background: #87CEFA;">
|
|
<option :value="true">浮动收益</option>
|
|
<option :value="false">利息</option>
|
|
</select>
|
|
</div>
|
|
<div class='form-group' v-show="trade.trade_swap.IsPayFloatingProfit && trade.trade_swap.SwapType != '多空组合'">
|
|
<label class='formlabel half'>多头空头</label>
|
|
<select v-model="trade.trade_swap.PayLongShort">
|
|
<option>多头</option>
|
|
<option>空头</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group" v-show="trade.trade_swap.IsPayFloatingProfit">
|
|
<label class="formlabel half">标的代码</label>
|
|
<vue-underlying id="trade.trade_swap.PayUnderlyingCode" v-model="trade.trade_swap.PayUnderlyingCode" v-on:change="setPayUnderlyingCode" />
|
|
</div>
|
|
<div class="form-group" v-show="trade.trade_swap.IsPayFloatingProfit && trade.trade_swap.SwapType != '多空组合'">
|
|
<label class="formlabel half">期初标的价格</label>
|
|
<input id="trade_swap.PaySpotPrice" class="text-box has-popover-syn" v-on:input="changeStockEqvNotional" onkeyup="this.value=this.value.replace(/[^0-9.-]/g,'')" onblur="this.value=(/^(-?0|-?[1-9]\d*)(\.\d*)?$/.test(this.value) ? this.value : '')" type="text" value="@Model.trade_swap.PaySpotPrice" name="trade_swap.PaySpotPrice" data-meta="组合标的2">
|
|
</div>
|
|
<div class="form-group" v-show="trade.trade_swap.IsPayFloatingProfit && trade.trade_swap.SwapType != '多空组合'">
|
|
<label class="formlabel half">数量</label>
|
|
<vue-number-input v-model="trade.trade_swap.PayTradeAmount" v-on:input="changePayTradeAmount" v-bind:format="inputFormatTradeAmount"></vue-number-input>
|
|
</div>
|
|
<div class="form-group" v-show="trade.trade_swap.IsPayFloatingProfit && trade.trade_swap.SwapType != '多空组合'">
|
|
<label class="formlabel half">手数</label>
|
|
<vue-number-input v-model="trade.trade_swap.PayLot" v-on:input="changePayLot" v-bind:format="inputFormatTradeAmount"></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<template v-if="trade.trade_swap.IsPayFloatingProfit">
|
|
<label class="formlabel half">增强收益率(年化)</label>
|
|
</template>
|
|
<template v-else>
|
|
<label class="formlabel half">互换利率(年化)</label>
|
|
</template>
|
|
<vue-number-input v-model="trade.trade_swap.PaySwapRate" v-bind:format="inputFormatSwapRate" v-on:input="blurSwapRate('Pay')"></vue-number-input>
|
|
</div>
|
|
<template v-if="!trade.trade_swap.IsPayFloatingProfit">
|
|
<div class="form-group">
|
|
<label class="formlabel half">互换间隔</label>
|
|
<input type="text" min="0" class="text-box" id="PayObservationRate" name="observationRate" readonly />
|
|
<a href="javascript:;" class="yt-input-group-append" title="设置观察日" v-on:click="setObservationDates('Pay')" tabindex="-1">
|
|
<i class="fa fa-pencil-square"></i>
|
|
</a>
|
|
@*<button class="btn btn-sm btn-outline-danger" type="button" v-on:click="setObservationDates('Pay')">设置观察日</button>*@
|
|
</div>
|
|
</template>
|
|
<div class="form-group" v-show="!trade.trade_swap.IsPayFloatingProfit">
|
|
<label class="formlabel half">单位交易费用</label>
|
|
<template v-if="!isSingleFee">
|
|
<vue-number-input v-model="trade.trade_swap.PayUnAnnualRate" v-on:input="changePayUnAnnualRate" v-bind:format="inputFormatSwapRate" v-bind:disabled="trade.trade_swap.SwapType == '多空组合'"></vue-number-input>
|
|
<a href="javascript:;" title="点击后切换成绝对值权利金" v-on:click="showAbsPrice" class="yt-input-group-append" tabindex="-1">%</a>
|
|
</template>
|
|
<template v-else>
|
|
<vue-number-input v-model="payNotionalSingleFee" v-on:input="changePaySingleFee" v-bind:format="inputFormatTradeSinglePrice" v-bind:disabled="trade.trade_swap.SwapType == '多空组合'"></vue-number-input>
|
|
<a href="javascript:;" title="点击后切换成标的价格百分比" v-on:click="showPercentPrice" class="yt-input-group-append" tabindex="-1">¥</a>
|
|
</template>
|
|
</div>
|
|
<div class="form-group" v-show="!trade.trade_swap.IsPayFloatingProfit">
|
|
<label class="formlabel half">交易费用</label>
|
|
<vue-number-input v-model="trade.trade_swap.PayTradePrice" v-on:input="changePayTradePrice" v-bind:format="inputFormatTradePrice" v-bind:disabled="trade.trade_swap.SwapType == '多空组合'"></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel half" for="PayMarginRate">初始预付金</label>
|
|
<vue-number-input v-model="trade.trade_swap.PayMarginRate" v-bind:format="inputFormatMarginRate"></vue-number-input>
|
|
</div>
|
|
<div class="form-group" style="padding-bottom: 10px;" v-show="trade.trade_swap.IsPayFloatingProfit && trade.trade_swap.SwapType == '多空组合'">
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<td>标的代码</td>
|
|
<td>多空方向</td>
|
|
<td>期初价格</td>
|
|
<td>份额</td>
|
|
<td>交易费用</td>
|
|
<td>操作</td>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr v-for="(item, index) in trade.pay_trade_swap_details">
|
|
<td><vue-underlying v-model="item.UnderlyingCode" v-bind:index="index" v-on:change="changePayUnderlying" style="width: 100px !important;"></vue-underlying></td>
|
|
<td>
|
|
<select v-model="item.LongShort" style="width: 52px !important;">
|
|
<option>多头</option>
|
|
<option>空头</option>
|
|
</select>
|
|
</td>
|
|
<td><vue-number-input v-model="item.SpotPrice" v-bind:format="inputFormatDouble2" v-on:input="sumStockEqvNotional(false)" style="width: 72px !important;" /></td>
|
|
<td><vue-number-input v-model="item.Notional" v-bind:format="inputFormatDouble2" v-on:input="sumStockEqvNotional(false)" style="width: 72px !important;" /></td>
|
|
<td><vue-number-input v-model="item.TradePrice" v-bind:format="inputFormatTradePrice" v-on:input="sumTradePrice(false)" style="width: 72px !important;" /></td>
|
|
<td><a v-on:click="deleteItem(index, false)" style="color: red;">删除</a></td>
|
|
</tr>
|
|
</tbody>
|
|
<tfoot>
|
|
<tr>
|
|
<td colspan="5">
|
|
<a v-on:click="deleteAll(false)" style="margin: 10px; color: red;">删除所有</a>
|
|
<a v-on:click="add(false)" style="margin: 10px; color: red;">新增</a>
|
|
</td>
|
|
</tr>
|
|
</tfoot>
|
|
</table>
|
|
@*<div style="text-align: center; margin-bottom: 10px;">
|
|
<a v-on:click="deleteAll(false)" style="margin: 10px; color: red;">删除所有</a>
|
|
<a v-on:click="add(false)" style="margin: 10px; color: red;">新增</a>
|
|
</div>*@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row no-gutters">
|
|
<div class="col">
|
|
<div class="yc-panel mt-0">
|
|
<div class='form-group'>
|
|
<label class='formlabel mb-1' for='Comments'>交易备注</label>
|
|
<textarea v-model="trade.Comments" class='text-box text-left' style="width:834px;margin-left:0px;" rows='3' id='Comments'></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row no-gutters">
|
|
<div class="col">
|
|
<div class="yc-panel mt-0">
|
|
<div class='form-group'>
|
|
<label class='formlabel mb-1'>标签</label>
|
|
<div class="tag-context" style="border: 1px solid #bbb; width: 834px; display: inline-block; line-height: 36px; background-color: white;">
|
|
@if ((List<YLErp.Models.Tag.TagDto>)ViewBag.ModelTags != null && ((List<YLErp.Models.Tag.TagDto>)ViewBag.ModelTags).Any())
|
|
{
|
|
foreach (var tag in (List<YLErp.Models.Tag.TagDto>)ViewBag.ModelTags)
|
|
{
|
|
<span class="tag-item" data-id="@tag.Id" data-name="@tag.Name"><span class="tag-text" data-value="@tag.Id">@tag.Name</span><span class="tag-remove" onclick="DeleteTag('@tag.Name')">x</span></span>
|
|
}
|
|
}
|
|
<span class="tag-add">+</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row" id="hidsearchtag" style="display:none;">
|
|
<div class="tag-search">
|
|
<div class="keyword-div">
|
|
|
|
</div>
|
|
<div class="selectlist">
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="hidhastags" style="display:none;">
|
|
<ul>
|
|
@if (((List<sys_tag>)ViewBag.TagList) != null && ((List<sys_tag>)ViewBag.TagList).Any())
|
|
{
|
|
foreach (var tag in (List<sys_tag>)ViewBag.TagList)
|
|
{
|
|
<li data-id="@tag.id">@tag.Name</li>
|
|
}
|
|
}
|
|
</ul>
|
|
|
|
<span class="js-li-none-tip" style="display:none;">没有可选择的标签,可按Enter键新增</span>
|
|
</div>
|
|
<div class="text-center">
|
|
@if (isUseApproval)
|
|
{
|
|
<button class="btn btn-primary" type="button" v-on:click="submit('pass')">审批通过</button>
|
|
<button class="btn btn-primary" type="button" v-on:click="submit('reject')">拒绝</button>
|
|
}
|
|
else
|
|
{
|
|
<button class="btn btn-primary " type="button" v-on:click="savetrade">保存</button>
|
|
<button class="btn btn-primary " type="button" onclick="layer.closeMe();">关闭</button>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
|
|
@await Html.PartialAsync("/Views/Pricing/_SyntheticPrice.cshtml")
|
|
@await Html.PartialAsync("/Views/trade/_part/SalesCommission.cshtml", new SalesCommissionModel() { Disabled = false, ViewType = "互换" })
|
|
<div id="extendInfo" style="display:none">
|
|
<div class="search-group">
|
|
<textarea style="width: 580px;height: 160px;margin: 10px;resize: none;" id="editRemarks"></textarea>
|
|
</div>
|
|
</div>
|