378 lines
12 KiB
JavaScript
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);
|
|
}
|
|
}
|
|
]; |