Files
zszq-trs/YLErpWeb/wwwroot/Scripts/app/pricing/HistoricalBacktest.js
T
2024-05-09 14:06:26 +08:00

378 lines
12 KiB
JavaScript

var grid = {};
$(function () {
mainVue.init(colModelGrid);
SetAceDropDown(true);
});
var mainVue = new Vue({
el: '#searchdiv',
data: {
range: [],
index: [],
dataSourceTypeList: pageObj.dataSourceTypeList,
dataSourceList: pageObj.dataSourceList[pageObj.defaultType],
dataSourceType: pageObj.defaultType,
dataSource: "",
},
methods: {
changedataSourceType() {
this.dataSourceList = pageObj.dataSourceList[this.dataSourceType];
this.dataSource = "";
},
init(colModel) {
$('#range').val(pageObj.calcRange);
$('#index').val(pageObj.calcIndex);
$("#range,#index").trigger("chosen:updated");
this.initGrid(colModel);
},
initGrid(colModel) {
var obj = {
url: '/pricing/calcHistoricalBacktest',
datatype: 'local',
multiselect: false,
height: 'auto',
width: '100%',
autowidth: false,
shrinkToFit: false,
viewrecords: true,
jsonReader: { repeatitems: false },
caption: '',
mtype: 'POST',
postData: this.postData,
colModel: colModel,
afterInsertRow: AfterInsertRow,
onSelectRow: rowclick,
ondblClickRow: rowdblclick,
//pager: jQuery('#pagerGrid'),
//pagerpos: 'left',
//rowNum: 20,
//rowList: [20, 30, 50, 200, 10000],
footerrow: false,
loadComplete: this.gridComplete,
//onPaging: onJqgridPaging
};
grid = jQuery('#listGrid1').jqGrid(obj);
var th = $("thead tr th");
th.each(function (index, item) {
switch ($(item).text().trim()) {
case "估值日期":
case "标的名称":
case "时间序列":
case "标的价格":
$(item).css("background-color", "#b6e5fb");
break;
case "delta":
case "deltaCash":
case "deltaInLots":
case "gamma":
case "vega":
case "rho":
case "theta":
$(item).css("background-color", "#d7d7d7");
break;
}
});
},
postData() {
var obj = {
encryptId: this.dataSource,
Range: $("#range_chosen span").map(function () { return $(this).text(); }).get(),
Index: $("#index_chosen span").map(function () { return $(this).text(); }).get(),
}
return obj;
},
SearchClick(isSearchclick) {
var obj = this.postData();
var useAlert = false;
if (!obj.encryptId) {
main.message("请选择要计算的模板");
useAlert = true;
}
if (obj.Range.length == 0) {
main.message("请选择要计算的维度");
useAlert = true;
}
if (obj.Index.length == 0) {
main.message("请选择要计算的指标");
useAlert = true;
}
if (useAlert) {
return;
}
grid.jqGrid("clearGridData");
var colArr = [...obj.Range, ...obj.Index];
var colModel = [];
colArr.forEach((v) => {
var col = colModelGrid.filter(o => $.inArray(o.label, v.split("-")) >= 0);
if (col) {
colModel = colModel.concat(col)
}
});
if (typeof grid.GridUnload === 'function') { grid.GridUnload(); }
this.initGrid(colModel);
$.ajax({
type: "Post",
url: "/pricing/calcHistoricalBacktest",
data: obj,
dataType: "json",
success: function (res) {
if (res && res.msg) {
main.message(res.msg);
}
if (res && res.success) {
res.obj.forEach((o, i) => {
grid.jqGrid('addRowData', i, o);
});
mergerRow("listGrid1", "ValueDate");
}
},
beforeSend(jqXHR) {
main.waitMe(true);
},
complete(jqXHR, textStatus) {
main.waitMe(false);
}
});
},
gridComplete(obj) {
$(window).off('resize.jqGrid');
$(window).on('resize.jqGrid', function () {
$("#listGrid1").jqGrid('setGridWidth', $('#_content').width() - 30);
});
$("#listGrid1").jqGrid('setGridWidth', $('#_content').width() - 30);
},
showDetail(id) {
main.post('/pricing/ConfigInfos', { encryptId: id }).done(function (obj) {
debugger;
});
},
Output() {
var obj = this.postData();
if (obj.Range.length == 0 || obj.Index.length == 0) {
main.alert("维度或指标不能为空");
} else {
var downloadUrlStr = "/pricing/OutputHistoricalBacktest?" + $.param(obj, true);
window.location.href = downloadUrlStr;
}
},
importPrice() {
layer.open({
type: 1,
title: '维度序列导入',
content: $('#uploadTpl').html(),
area: ["500px", "200px"]
});
},
clearInfo(id) {
$("#" + id).val('').trigger("chosen:updated");
}
}
});
function mergerRow(gridName, cellName) {
// 获取所有行
var rows = $('#' + gridName + '').getDataIDs()
//当前显示多少条
var length = rows.length
for (var i = 0; i < length; i++) {
//从上到下获取一条信息
var before = $('#' + gridName + '').jqGrid('getRowData', rows[i])
var rowSpanTaxCount = 1
for (j = i + 1; j <= length; j++) {
//和上边的信息对比 如果值一样就合并行数+1 然后设置rowspan 让当前单元格隐藏
var end = $('#' + gridName + '').jqGrid('getRowData', rows[j])
if (before[cellName] == end[cellName]) {
rowSpanTaxCount++
// 设置单元格隐藏
$('#' + gridName + '').setCell(rows[j], cellName, '', {
display: 'none',
})
} else {
rowSpanTaxCount = 1
break
}
// 设置单元格的rowspan
// 这里的需要用上层for循环的索引 i
$('#' + gridName + '').setCell(
rows[i],
cellName,
'',
{},
{
rowspan: rowSpanTaxCount,
}
)
}
}
}
function importDatas() {
if (!checkSubmitData()) return;
var formData = new FormData($('#formImport')[0]);
main.post('/Pricing/UploadPrice', formData, {
success: function (res) {
if (!res.success) {
main.message(res.msg);
}
else {
main.message(res.msg);
}
layer.closeAll();
},
error: function (msg) {
alert("error:" + msg);
}
});
}
function checkSubmitData() {
//非xlsx文件不允许用户导入
var fileName = $('#openFile').val();
if (fileName == "") {
main.message("请选择文件!");
return false;
}
var arr = "xlsx";
var index = fileName.lastIndexOf(".");
var ext = fileName.substr(index + 1);
if (ext == arr) {
return true;
}
else {
parent.main.message("请导入xlsx格式文件!");
}
return true;
}
var i = 0;
var colModelGrid = [
{
name: 'ValueDate',
label: '估值日期',
index: 'ValueDate',
width: 90,
sortIndex: i++,
align: 'left',
sortable: false,
formatter: 'date',
cellattr: function (cellvalue, options, rowObject) {
return "class='fixedRange'";
}
}, {
name: 'UnderlyingName',
label: '标的名称',
index: 'UnderlyingName',
width: 120,
sortIndex: i++,
align: 'left',
sortable: false,
cellattr: function (cellvalue, options, rowObject) {
return "class='fixedRange'";
}
}, {
name: 'TimeSeries',
label: '时间序列',
index: 'TimeSeries',
width: 160,
sortIndex: i++,
align: 'left',
sortable: false,
//formatter: function (cellvalue, options, rowObject) {
// return cellvalue.toFixed(4);
//},
cellattr: function (cellvalue, options, rowObject) {
return "class='fixedRange'";
}
}, {
name: 'Price',
label: '标的价格',
index: 'Price',
width: 120,
sortIndex: i++,
align: 'left',
sortable: false,
formatter: function (cellvalue, options, rowObject) {
return cellvalue.toFixed(4);
},
cellattr: function (cellvalue, options, rowObject) {
return "class='fixedRange'";
}
}, {
name: 'delta',
label: 'delta',
index: 'delta',
width: 90,
sortindex: i++,
align: 'left',
sortable: false,
formatter: function (cellvalue, options, rowObject) {
return cellvalue.toFixed(4);
}
}, {
name: 'deltaCash',
label: 'deltaCash',
index: 'deltaCash',
width: 90,
sortindex: i++,
align: 'left',
sortable: false,
formatter: function (cellvalue, options, rowObject) {
return cellvalue.toFixed(4);
}
}, {
name: 'deltaInLots',
label: 'deltaInLots',
index: 'deltaInLots',
width: 90,
sortindex: i++,
align: 'left',
sortable: false,
formatter: function (cellvalue, options, rowObject) {
return cellvalue.toFixed(4);
}
}, {
name: 'gamma',
label: 'gamma',
index: 'gamma',
width: 90,
sortindex: i++,
align: 'left',
sortable: false,
formatter: function (cellvalue, options, rowObject) {
return cellvalue.toFixed(4);
}
}, {
name: 'vega',
label: 'vega',
index: 'vega',
width: 90,
sortindex: i++,
align: 'left',
sortable: false,
formatter: function (cellvalue, options, rowObject) {
return cellvalue.toFixed(4);
}
}, {
name: 'rho',
label: 'rho',
index: 'rho',
width: 90,
sortindex: i++,
align: 'left',
sortable: false,
formatter: function (cellvalue, options, rowObject) {
return cellvalue.toFixed(4);
}
}, {
name: 'theta',
label: 'theta',
index: 'theta',
width: 90,
sortindex: i++,
align: 'left',
sortable: false,
formatter: function (cellvalue, options, rowObject) {
return cellvalue.toFixed(4);
}
}
];