Files
zszq-trs/YLErpWeb/Views/volatility/volsurfaceUpload.cshtml
T
2024-05-09 14:06:26 +08:00

241 lines
10 KiB
Plaintext

@model volatility
@{
ViewBag.Title = "波动率曲面 | 数据导入";
Layout = "~/Views/Shared/_InfoLayout.cshtml";
var Vols = YLErp.QdpModule.Constants.ConsVolInfos.VolTypes.ToList();
if (!Vols.Contains(YLErp.QdpModule.Constants.ConsVolInfos.BidAsk))
{
Vols.Add(YLErp.QdpModule.Constants.ConsVolInfos.BidAsk);
}
if (!Vols.Contains("All"))
{
Vols.Add("All");
}
var VolTypes = GlobalData.GetSelectItems(Vols);
}
@section CSS{
<link href="~/Style/Css/volsurfaceUpload.css" rel="stylesheet" />
}
@section JS
{
<script type="text/javascript">
//是否使用更加精确的波动率
var g_volMoreAccurate = "@YLErp.PS.Config.ErpElement.VolMoreAccurate" == "True";
$(function () {
$(".datepicker").datepicker({ changeMonth: true, changeYear: true, showButtonPanel: true, showOtherMonths: true, selectOtherMonths: true });
$(".datepicker").val("@ViewBag.Voldate");
var time = $(".datepicker").val().split("-");
var year = time[0];
var month = time[1] - 1;
var day = time[2];
$(".datepicker").datepicker(
'option', 'minDate', new Date(year, month, day)
);
SetAceDropDown();
function hidealldemo() {
$("#standdemo").hide();
$("#simpledemo").hide();
$("#bidaskdemo").hide();
$("#alldemo").hide();
}
$("#importMode").change(function (data) {
hidealldemo();
$("#VolType option").prop("disabled", true);
$("#VolType option").prop("selected", false);
var imode = $("#importMode").val();
if (imode == "Stand") {
$("#VolSurfaceMode").parent().show();
$("#VolType").parent().show();
$("#standdemo").show();
$("#VolType option[value!='BidAsk'][value!='All']").prop("disabled", false);
$("#VolType option[value='交易']").prop("selected", true);
}
else if (imode == "BidAsk") {
$("#VolSurfaceMode").parent().show();
$("#VolType").parent().show();
$("#bidaskdemo").show();
$("#VolType option[value='BidAsk']").prop("disabled", false);
$("#VolType option[value='BidAsk']").prop("selected", true);
}
else if (imode == "All") {
$("#VolSurfaceMode").parent().hide();
$("#VolType").parent().hide();
$("#alldemo").show();
$("#VolType option[value='All']").prop("disabled", false);
$("#VolType option[value='All']").prop("selected", true);
}
else {
$("#VolSurfaceMode").parent().hide();
$("#VolType").parent().hide();
$("#simpledemo").show();
$("#VolType option[value!='BidAsk'][value!='All']").prop("disabled", false);
$("#VolType option[value='交易']").prop("selected", true);
}
$("#VolType").trigger("chosen:updated");
changeVolType();
});
$("#importMode").change();
});
function uploadVolatility() {
if (!checkData()) return false;
var formData = new FormData($('form')[0]);
main.waitMe("show");
$.ajax({
url: '/volatility/UploadVolSurface',
type: 'POST',
xhr: function () {
myXhr = $.ajaxSettings.xhr();
if (myXhr.upload) {
myXhr.upload.addEventListener('progress', progressHandlingFunction, false);
}
return myXhr;
},
success: function (resp) {
try {
debugger;
if (resp.success) {
parent.main.message("导入成功!");
parent.ReloadVolsurface(resp.obj ? resp.obj.underlyingCode : null);
parent.layer.closeAll();
} else {
main.alert("导入失败:{0}".template(resp.msg));
}
} catch (e) {
} finally {
main.waitMe("hide");
}
},
error: function (data) {
main.waitMe("hide");
main.alert("导入失败:{0}".template(data.error.message));
},
data: formData,
cache: false,
contentType: false,
processData: false
});
}
function progressHandlingFunction(e) {
if (e.lengthComputable) {
$('progress').attr({ value: e.loaded, max: e.total });
}
}
function checkData() {
if ($('#openFile').val() == null || $('#openFile').val() == "" || $('#openFile').val() == undefined) {
main.alert("波动率文件未选择!");
return false;
}
//非CSV文件不允许用户导入
var fileName = $('#openFile').val();
var arr = "xlsx";
var index = fileName.lastIndexOf(".");
var ext = fileName.substr(index + 1);
if (ext != arr) {
main.alert("请导入xlsx格式文件!");
return false;
}
return true;
}
function changeVolType() {
var imode = $("#importMode").val();
var voltype = $("#VolType").val();
$("#Bid_Deviation").parent().hide();
$("#Ask_Deviation").parent().hide();
if (voltype == "交易" && imode == "Stand") {
$("#Bid_Deviation").parent().show();
$("#Ask_Deviation").parent().show();
}
}
function checknumber(obj) {
//精确模式保留6位小数
if (g_volMoreAccurate) {
var objval = $(obj).val();
if (objval.split('.')[1].length >= 6) {
var checkval = objval.split('.')[0] + '.' + objval.split('.')[1].substr(0, 6);
$(obj).val(checkval);
}
}
//非精确模式保留4位小数
else {
var objval = $(obj).val();
if (objval.split('.')[1].length >= 4) {
var checkval = objval.split('.')[0] + '.' + objval.split('.')[1].substr(0, 4);
$(obj).val(checkval);
}
}
}
function reInput(obj) {
$(obj).click(function () {
$(this).val("");
});
}
</script>
}
@using (Html.BeginForm("volatilityEdit", "volatility", FormMethod.Post, new { id = "volatilityUploadForm" }))
{
<div class="well" style="margin:0px auto;margin-top:10px;">
<fieldset>
<!--目前框架新增和修改同一界面,造成的问题就是输入的字段新增和修改都一样-->
@if (Model != null)
{
<input type="hidden" value="@Model.id" name="id" id="id" />
}
<div class="form-group col-md-6">
<label class="formlabel">导入模式</label>
<select id="importMode">
<option value="Stand">标准模式</option>
<option value="Simple">简易模式</option>
<option value="BidAsk">BidAsk模式</option>
<option value="All">全量模式</option>
</select>
<a href="~/App_Docs/导入模板/波动率标准模版.xlsx" id="standdemo">标准模板xlsx</a>
<a href="~/App_Docs/导入模板/波动率简易模板.xlsx" id="simpledemo">简易模板xlsx</a>
<a href="~/App_Docs/导入模板/BidAsk波动率模版.xlsx" id="bidaskdemo">BidAsk波动率模板xlsx</a>
<a href="~/App_Docs/导入模板/波动率全量模版.xlsx" id="alldemo">全量模板xlsx</a>
</div>
@Html.MyDateFor(model => model.QuotationDate, true)
@Html.MyDropdownFor(model => model.VolSurfaceMode, GlobalData.GetSelectItems(YLErp.QdpModule.Constants.ConsVolInfos.Gtja_VolSurfaceModes), "", false)
@Html.MyDropdownFor(model => model.VolType, VolTypes, new { onchange = "changeVolType()" }, "", false)
<div class="form-group">
<input type="file" id="openFile" name="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" onchange="reInput(this)" />
</div>
<div class="form-group">
<label><input type="checkbox" name="overridByMainCode" value="true" /><strong>&nbsp;使用主力合约波动率曲面(eg. RB00),覆盖同品种其他所有月份合约</strong></label>
</div>
<div class="form-group">
<label class="formlabel" for="Bid_Deviation">Bid波动率调整</label>
<input id="Bid_Deviation" class="" step="0.0001" onkeyup="checknumber(this)" type="number" value="" name="Bid_Deviation">
<label class="formlabel" style="color:blue">(例:-0.01表示将波动率整体降低0.01(1%)得到Bid曲面,留空不作调整)</label>
</div>
<div class="form-group">
<label class="formlabel" for="Ask_Deviation">Ask波动率调整</label>
<input id="Ask_Deviation" class="text-box" onkeyup="checknumber(this)" step="0.0001" onblur="this.value=(/^(-?[0-9]\d*)(\.\d*)?$/.test(this.value) ? this.value : '')" type="number" value="" name="Ask_Deviation">
<label class="formlabel" style="color:blue">(例:0.01表示将波动率整体提高0.01(1%)得到Ask曲面,留空不作调整)</label>
</div>
</fieldset>
</div>
<div class="form-buttons">
@MyControls.Btn("导入数据", "uploadVolatility()")
@MyControls.Btn("关闭", "layer.closeMe()")
</div>
}