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); } } ];