- 新增弹窗客户名称改为 chosen 多选:保存时按选中客户逐条调用原有单条接口 (后端零改动,每条走完整互斥校验),逐条收集成败后统一汇总提示; 部分失败时刷新列表、弹窗保留供修正重试(重试已成功客户会被互斥校验拦截,不重复入库) - 编辑弹窗仍为单条绑定不变 - 删除 isGFSM(广发商贸)定制:客户等级下拉与切换 watchers、Span涨跌幅参数块; 本部署(国联民生)不涉及,后端接口保持原样 - 左栏加 tpl-base 统一控件宽度,多选搜索框隐藏行为与模板编辑页一致
395 lines
24 KiB
Plaintext
395 lines
24 KiB
Plaintext
@using YLErp.Enums;
|
|
@model client_margin_template
|
|
|
|
@{
|
|
ViewBag.Title = "预付金模板 | 编辑";
|
|
Layout = "~/Views/Shared/_InfoLayout.cshtml";
|
|
|
|
var pageObj = new
|
|
{
|
|
isAdd = Model == null || Model.id == 0,
|
|
marginTemplates = ViewBag.MarginTemplates,
|
|
marginTemplate = ViewBag.MarginTemplate,
|
|
clientMarginTemplate = Model
|
|
};
|
|
}
|
|
|
|
@section CSS{
|
|
<link href="~/Style/Css/margin_template_v2Edit.css?v=@(HtmlUtil.JsVersion)" rel="stylesheet" />
|
|
@*<style>
|
|
.search-group span {
|
|
display: inline-block;
|
|
min-width: 160px;
|
|
margin: 0 8px 0 0;
|
|
text-align: right;
|
|
vertical-align: middle;
|
|
}
|
|
|
|
.search-group a span {
|
|
text-align: left;
|
|
}
|
|
</style>*@
|
|
}
|
|
|
|
@section JS{
|
|
<script type="text/javascript">
|
|
const page = @Json.Serialize(pageObj);
|
|
</script>
|
|
<script src="@HtmlUtil.BasicDataJs("客户")"></script>
|
|
<script src="~/front/calendar?v=@(HtmlUtil.JsVersion)"></script>
|
|
<script src="~/Scripts/app/client/clientMarginTemplateEdit.js?v=@HtmlUtil.JsVersion"></script>
|
|
}
|
|
|
|
<form id="marginTemplateV2Form" method="post" onsubmit="return false;">
|
|
<div class="row no-gutters">
|
|
<div class="col form-layout tpl-base" style="height: 520px; overflow-y: auto;">
|
|
<div class="border">
|
|
<P>新模板信息</P>
|
|
|
|
<div class="form-group">
|
|
<label class="formlabel">客户名称</label>
|
|
@if (pageObj.isAdd)
|
|
{
|
|
@*新增:客户多选(类似适用簿记账户),保存时按选中客户逐条调用原有单条保存接口*@
|
|
<select id="ClientId" class="chosen-select" multiple data-placeholder="请选择客户" style="width:260px;" v-model="selectedClientIds">
|
|
<option v-for="item in clientNames" v-bind:value="item.Value">{{item.Text}}</option>
|
|
</select>
|
|
}
|
|
else
|
|
{
|
|
@*编辑:单条绑定,仅改模板/日期,客户不可多选*@
|
|
<select v-model="clientMarginTemplate.ClientId" id="ClientId">
|
|
<option v-for="item in clientNames" v-bind:value="item.Value">{{item.Text}}</option>
|
|
</select>
|
|
}
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="formlabel">模板名称</label>
|
|
<select v-model="clientMarginTemplate.MarginTemplateId" v-on:change="changeMarginTemplate()">
|
|
<option v-for="item in marginTemplates" v-bind:value="item.id">
|
|
{{item.Name}}
|
|
</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="formlabel">适用结构</label>
|
|
<input class="text-box" v-model="marginTemplate.TradeTypes" id="suitableType" disabled />
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="formlabel">生效日期</label>
|
|
<vue-datepicker v-model="clientMarginTemplate.ValueDate" class="text-box"></vue-datepicker>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="formlabel">规则类型</label>
|
|
<input class="text-box" v-model="marginTemplate.MarginTypeName" disabled />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="border">
|
|
<div class="form-group">
|
|
<label class="formlabel">预付金规则</label>
|
|
<input class="text-box" v-model="marginTemplate.RuleTypeName" disabled />
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="formlabel">规则描述</label>
|
|
<textarea class="text-box" rows="3" style="text-align:left;" v-model="marginTemplate.Comments" v-bind:title="marginTemplate.Comments" disabled>
|
|
</textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col form-layout" style="height: 520px; overflow-y:auto;">
|
|
<template v-for="(detail,index) in marginTemplate.Details">
|
|
<div class="border detail">
|
|
<div class="row no-gutters">
|
|
<div class="col">
|
|
<template v-if="marginTemplate.RuleType == @((int)MarginRuleTypeEnum.按固定利率) || marginTemplate.RuleType == @((int)MarginRuleTypeEnum.按浮动盈亏)">
|
|
<div class="form-group">
|
|
<label class="formlabel">持仓预付金率</label>
|
|
<vue-number-input v-model="detail.MarginRatio2" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">是否使用持仓名义本金</label>
|
|
<select v-model="detail.UsePositionStockEqvNotional" disabled>
|
|
<option value="false">否</option>
|
|
<option value="true">是</option>
|
|
</select>
|
|
</div>
|
|
</template>
|
|
<template v-if="marginTemplate.RuleType == @((int)MarginRuleTypeEnum.类香草预付金规则)">
|
|
<div class="form-group">
|
|
<label class="formlabel">初始预付金率</label>
|
|
<vue-number-input v-model="detail.MarginRatio1" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">临时预付金率1</label>
|
|
<vue-number-input v-model="detail.MarginRatio2" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">临时预付金率2</label>
|
|
<vue-number-input v-model="detail.MarginRatio3" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">临时预付金率3</label>
|
|
<vue-number-input v-model="detail.MarginRatio4" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">是否内含价值</label>
|
|
<select v-model="detail.IsIntrinsicValue" disabled>
|
|
<option value="false">否</option>
|
|
<option value="true">是</option>
|
|
</select>
|
|
</div>
|
|
</template>
|
|
<template v-if="marginTemplate.RuleType == @((int)MarginRuleTypeEnum.触发条件预付金规则1) || marginTemplate.RuleType == @((int)MarginRuleTypeEnum.触发条件预付金规则2)">
|
|
<div class="form-group">
|
|
<label class="formlabel">预付金率</label>
|
|
<vue-number-input v-model="detail.MarginRatio1" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">维持预付金率</label>
|
|
<vue-number-input v-model="detail.MarginRatio2" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">触发追保跌幅</label>
|
|
<vue-number-input v-model="detail.RedeemPriceLimit" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">是否使用行权价</label>
|
|
<select v-model="detail.IsUseStrike" disabled>
|
|
<option value="false">否</option>
|
|
<option value="true">是</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">最大跌幅限制</label>
|
|
<vue-number-input v-model="detail.RedeemPriceMax" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
</template>
|
|
<template v-if="marginTemplate.RuleType == @((int)MarginRuleTypeEnum.触发条件预付金规则3)">
|
|
<div class="form-group">
|
|
<label class="formlabel">预付金比率</label>
|
|
<vue-number-input v-model="detail.MarginRatio1" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">持仓预付金比率</label>
|
|
<vue-number-input v-model="detail.MarginRatio3" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">是否使用持仓名义本金</label>
|
|
<select v-model="detail.UsePositionStockEqvNotional" disabled>
|
|
<option value="false">否</option>
|
|
<option value="true">是</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">涨跌幅类型</label>
|
|
<select v-model="detail.PriceLimitType" disabled>
|
|
<option value="0">跌幅</option>
|
|
<option value="1">涨幅</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">触发追保比例</label>
|
|
<vue-number-input v-model="detail.RedeemPriceLimit" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">是否使用行权价</label>
|
|
<select v-model="detail.IsUseStrike" disabled>
|
|
<option value="false">否</option>
|
|
<option value="true">是</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">最大涨跌幅限制</label>
|
|
<vue-number-input v-model="detail.RedeemPriceMax" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">追加比例</label>
|
|
<vue-number-input v-model="detail.MarginRatio2" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
</template>
|
|
<template v-if="marginTemplate.RuleType == @((int)MarginRuleTypeEnum.标准SPAN)">
|
|
<div class="form-group">
|
|
<label class="formlabel">标的价格变化幅度a</label>
|
|
<select v-model="detail.IsUsePriceLimit" disabled>
|
|
<option value="true">单日标的涨跌幅配置</option>
|
|
<option value="false">无</option>
|
|
</select> * <vue-number-input v-model="detail.MarginRatio1" v-bind:format="inputFormatPercent" disabled></vue-number-input> * St
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">标的波动率变化幅度b</label>
|
|
<vue-number-input v-model="detail.MarginRatio2" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<div style="margin-left: 25px;">
|
|
当计算维持预付金时,最后与初始预付金的 <vue-number-input v-model="detail.ComparedInitialMarginRate" v-bind:format="inputFormatPercentNegative" disabled></vue-number-input> 取较大值。
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<template v-if="marginTemplate.RuleType == @((int)MarginRuleTypeEnum.买入自动赎回规则1) || marginTemplate.RuleType == @((int)MarginRuleTypeEnum.卖出自动赎回规则1)">
|
|
<div class="form-group">
|
|
<label class="formlabel">x</label>
|
|
<vue-number-input v-model="detail.MarginRatio1" v-bind:format="marginTemplate.RuleType == @((int)MarginRuleTypeEnum.买入自动赎回规则1) ? inputFormatNegative : inputFormatPercentNegative" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">y</label>
|
|
<vue-number-input v-model="detail.MarginRatio2" v-bind:format="marginTemplate.RuleType == @((int)MarginRuleTypeEnum.买入自动赎回规则1) ? inputFormatNegative : inputFormatPercentNegative" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">是否取与保底金额孰小</label>
|
|
<select v-model="detail.IsNeedCompare" disabled>
|
|
<option value="false">否</option>
|
|
<option value="true">是</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<div style="margin-left: 25px;">
|
|
当计算维持预付金时,最后与初始预付金的 <vue-number-input v-model="detail.ComparedInitialMarginRate" v-bind:format="inputFormatPercentNegative" disabled></vue-number-input> 取较大值。
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-buttons">
|
|
<button class="btn btn-primary" type="button" v-on:click="saveMarginTemplateV2">保存</button>
|
|
<button class="btn btn-primary" type="button" onclick="layer.closeMe()">关闭</button>
|
|
</div>
|
|
</form>
|
|
|
|
<div class="modal fade" id="myModal" 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">
|
|
<div class="form-group">
|
|
<label class="formlabel">生效日期</label>
|
|
<vue-datepicker v-model="detail.ValueDate" class="text-box" disabled></vue-datepicker>
|
|
</div>
|
|
|
|
<template v-if="ruleType == @((int)MarginRuleTypeEnum.按固定利率) || ruleType == @((int)MarginRuleTypeEnum.按浮动盈亏)">
|
|
<div class="form-group">
|
|
<label class="formlabel">持仓预付金率</label>
|
|
<vue-number-input v-model="detail.MarginRatio2" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">是否使用持仓名义本金</label>
|
|
<select v-model="detail.UsePositionStockEqvNotional" disabled>
|
|
<option value="false">否</option>
|
|
<option value="true">是</option>
|
|
</select>
|
|
</div>
|
|
</template>
|
|
<template v-if="ruleType == @((int)MarginRuleTypeEnum.类香草预付金规则)">
|
|
<div class="form-group">
|
|
<label class="formlabel">初始预付金率</label>
|
|
<vue-number-input v-model="detail.MarginRatio1" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">临时预付金率1</label>
|
|
<vue-number-input v-model="detail.MarginRatio2" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">临时预付金率2</label>
|
|
<vue-number-input v-model="detail.MarginRatio3" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">临时预付金率3</label>
|
|
<vue-number-input v-model="detail.MarginRatio4" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">是否内含价值</label>
|
|
<select v-model="detail.IsIntrinsicValue" disabled>
|
|
<option value="false">否</option>
|
|
<option value="true">是</option>
|
|
</select>
|
|
</div>
|
|
</template>
|
|
<template v-if="ruleType == @((int)MarginRuleTypeEnum.触发条件预付金规则1) || ruleType == @((int)MarginRuleTypeEnum.触发条件预付金规则2)">
|
|
<div class="form-group">
|
|
<label class="formlabel">预付金率</label>
|
|
<vue-number-input v-model="detail.MarginRatio1" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">维持预付金率</label>
|
|
<vue-number-input v-model="detail.MarginRatio2" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">触发追保跌幅</label>
|
|
<vue-number-input v-model="detail.RedeemPriceLimit" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">是否使用行权价</label>
|
|
<select v-model="detail.IsUseStrike" disabled>
|
|
<option value="false">否</option>
|
|
<option value="true">是</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">最大跌幅限制</label>
|
|
<vue-number-input v-model="detail.RedeemPriceMax" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
</template>
|
|
<template v-if="ruleType == @((int)MarginRuleTypeEnum.触发条件预付金规则3)">
|
|
<div class="form-group">
|
|
<label class="formlabel">预付金比率</label>
|
|
<vue-number-input v-model="detail.MarginRatio1" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">持仓预付金比率</label>
|
|
<vue-number-input v-model="detail.MarginRatio3" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">是否使用持仓名义本金</label>
|
|
<select v-model="detail.UsePositionStockEqvNotional" disabled>
|
|
<option value="false">否</option>
|
|
<option value="true">是</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">涨跌幅类型</label>
|
|
<select v-model="detail.PriceLimitType" disabled>
|
|
<option value="0">跌幅</option>
|
|
<option value="1">涨幅</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">触发追保比例</label>
|
|
<vue-number-input v-model="detail.RedeemPriceLimit" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">是否使用行权价</label>
|
|
<select v-model="detail.IsUseStrike" disabled>
|
|
<option value="false">否</option>
|
|
<option value="true">是</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">最大涨跌幅限制</label>
|
|
<vue-number-input v-model="detail.RedeemPriceMax" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="formlabel">追加比例</label>
|
|
<vue-number-input v-model="detail.MarginRatio2" v-bind:format="inputFormatPercent" disabled></vue-number-input>
|
|
</div>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div> |