664 lines
23 KiB
JavaScript
664 lines
23 KiB
JavaScript
const inputFormatNegative = Object.freeze({ precision: 2, negative: true });
|
|
var totalPv = 0;
|
|
var totalPnl = 0;
|
|
var totalPvClient = 0;
|
|
var totalPnlClient = 0;
|
|
var g_grid = {};
|
|
$(function () {
|
|
var PostData = {};
|
|
|
|
//控件选择时的触发事件
|
|
main.setTradeDatePicker("", "#ValueDate", page.calcDate);
|
|
|
|
//默认初始值赋值逻辑
|
|
$("#ValueDate").val(page.valueDate || page.calcDate);
|
|
$("#ValueDate").prop("disabled", true);
|
|
$("#ParentFlag").val(page.ParentFlag ? "True" : "False");
|
|
|
|
PostData.ValueDate = $("#ValueDate").val();
|
|
PostData.ClientId = $("#ClientId").val();
|
|
PostData.TradeTypes = ["收益互换"];
|
|
PostData.ParentFlag = $("#ParentFlag").val();
|
|
|
|
var url = $("#ClientId").val() > 0 ? '/trade_span/clientTradePositionQuery' : '';
|
|
|
|
var grid = jQuery('#listGrid').jqGrid({
|
|
url: url,
|
|
datatype: 'json',
|
|
height: 'auto',
|
|
width: '96%',
|
|
multiselect: true,
|
|
autowidth: false,
|
|
shrinkToFit: false,
|
|
viewrecords: true,
|
|
jsonReader: { repeatitems: false },
|
|
caption: '',
|
|
mtype: 'POST',
|
|
onSortCol: onSortCol,
|
|
postData: PostData,
|
|
afterInsertRow: AfterInsertRow,
|
|
onSelectRow: rowclick,
|
|
ondblClickRow: rowdblclick,
|
|
onSelectAll: allRowSelect,
|
|
colModel: colModelGrid,
|
|
pager: jQuery('#pagerGrid'),
|
|
pagerpos: 'left',
|
|
rowNum: 100,
|
|
rowList: [100, 1000],
|
|
footerrow: true,
|
|
loadComplete: gridComplete,
|
|
grouping: true
|
|
});
|
|
g_grid = jQuery('#listGrid');
|
|
|
|
let underlyingCtrl = new tradeHelper.UnderlyingSelectCtrl('#UnderlyingId').setFlag(tradeHelper.UnderlyingSelectFlag.OtcTrade);
|
|
|
|
$(".datepicker").datepicker({
|
|
changeMonth: true,
|
|
changeYear: true,
|
|
showButtonPanel: true,
|
|
showOtherMonths: true,
|
|
selectOtherMonths: true
|
|
});
|
|
|
|
try {
|
|
SetAceDropDown();
|
|
|
|
} catch (e) {
|
|
//
|
|
}
|
|
|
|
function AfterInsertRow(rowid, aData) {
|
|
}
|
|
});
|
|
|
|
function onSortCol(index, icol, sortorder) {
|
|
g_sort.name = index;
|
|
g_sort.order = sortorder;
|
|
}
|
|
|
|
const minusDoubleFormat = function (cellValue, options, rowObject) {
|
|
return otcformat.trading.greek(-cellValue);
|
|
};
|
|
|
|
var g_sort = { name: "TradeNumber", order: "desc" };
|
|
|
|
var i = 0;
|
|
|
|
var colModelGrid = (function () {
|
|
var col = [
|
|
{
|
|
name: 'EncryptTradeId',
|
|
label: 'EncryptTradeId',
|
|
index: 'EncryptTradeId',
|
|
sortIndex: i++,
|
|
width: 70,
|
|
align: 'center',
|
|
hidden: true,
|
|
optionHide: true
|
|
}, {
|
|
name: 'TradeId',
|
|
label: 'TradeId',
|
|
index: 'TradeId',
|
|
key: true,
|
|
sortIndex: i++,
|
|
width: 70,
|
|
align: 'center',
|
|
hidden: true,
|
|
optionHide: true
|
|
}, {
|
|
name: 'ClientName',
|
|
label: '客户名称',
|
|
index: 'ClientName',
|
|
width: 180,
|
|
sortIndex: i++,
|
|
sorttype: "text",
|
|
align: 'center'
|
|
}, {
|
|
name: 'TradeNumber',
|
|
label: '交易编号',
|
|
index: 'TradeNumber',
|
|
width: 180,
|
|
sortIndex: i++,
|
|
sorttype: "text",
|
|
align: 'center'
|
|
}, {
|
|
name: 'TradeDate',
|
|
label: '交易日期',
|
|
index: 'TradeDate',
|
|
width: 90,
|
|
sorttype: "date",
|
|
align: 'center',
|
|
sortIndex: i++,
|
|
formatter: 'date'
|
|
}, {
|
|
name: 'ExerciseDate',
|
|
label: '到期日期',
|
|
index: 'ExerciseDate',
|
|
width: 100,
|
|
sorttype: "date",
|
|
align: 'center',
|
|
sortIndex: i++,
|
|
formatter: 'date'
|
|
}, {
|
|
name: 'trade.SettlementDate',
|
|
label: '结算日期',
|
|
index: 'trade.SettlementDate',
|
|
width: 100,
|
|
sorttype: "date",
|
|
align: 'center',
|
|
sortIndex: i++,
|
|
sortable: false,
|
|
formatter: 'date'
|
|
}, {
|
|
name: 'trade.SettlementFlag',
|
|
label: '是否延期结算',
|
|
index: 'trade.SettlementFlag',
|
|
sortIndex: i++,
|
|
width: 100,
|
|
align: 'center',
|
|
sortable: false,
|
|
formatter: YesOrNoFormat
|
|
}, {
|
|
name: 'TradeMultipleType',
|
|
label: '结构类型',
|
|
index: 'TradeMultipleType',
|
|
width: 120,
|
|
align: 'center',
|
|
sortable: false,
|
|
sortIndex: i++
|
|
}, {
|
|
name: 'trade.trade_swap.PayUnderlyingCode',
|
|
label: '标的代码(支付方)',
|
|
index: 'trade.trade_swap.PayUnderlyingCode',
|
|
width: 80,
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
align: 'center'
|
|
}, {
|
|
name: 'trade.trade_swap.PaySpotPrice',
|
|
label: '期初标的价格(支付方)',
|
|
index: 'trade.trade_swap.PaySpotPrice',
|
|
width: 100,
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
align: 'center',
|
|
formatter: otcformat.trading.umprice
|
|
}, {
|
|
name: 'trade.trade_swap.PayTradeAmount',
|
|
label: '交易数量(支付方)',
|
|
index: 'trade.trade_swap.PayTradeAmount',
|
|
width: 100,
|
|
align: 'center',
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
formatter: function (cellValue, options, rowObject) {
|
|
return otcformat.trading.notional(page.IsUseDisplayNotional ? (rowObject.CountRatio || 1) * cellValue : cellValue);
|
|
}
|
|
}, {
|
|
name: 'trade.trade_swap.PayLongShort',
|
|
label: '多空方向(支付方)',
|
|
index: 'trade.trade_swap.PayLongShort',
|
|
width: 90,
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
align: 'center'
|
|
}, {
|
|
name: 'trade.trade_swap.PaySwapTimeAndRate',
|
|
label: '互换利率(支付方)',
|
|
index: 'trade.trade_swap.PaySwapTimeAndRate',
|
|
width: 100,
|
|
align: 'center',
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
formatter: SwapTimeAndRateFormat
|
|
}, {
|
|
name: 'trade.trade_swap.PaySingleFee',
|
|
label: '单位交易费用(支付方)',
|
|
index: 'trade.trade_swap.PaySingleFee',
|
|
width: 90,
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
align: 'center',
|
|
formatter: TradeSinglePriceFormat
|
|
}, {
|
|
name: 'trade.trade_swap.PayTradePrice',
|
|
label: '交易费用(支付方)',
|
|
index: 'trade.trade_swap.PayTradePrice',
|
|
width: 90,
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
align: 'center',
|
|
formatter: otcformat.trading.tradePrice
|
|
}, {
|
|
name: 'trade.trade_swap.PayMarginRate',
|
|
label: '初始预付金率(支付方)',
|
|
index: 'trade.trade_swap.PayMarginRate',
|
|
width: 100,
|
|
align: 'center',
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
formatter: otcformat.trading.marginRateP
|
|
}, {
|
|
name: 'trade.trade_swap.GetUnderlyingCode',
|
|
label: '标的代码(收取方)',
|
|
index: 'trade.trade_swap.GetUnderlyingCode',
|
|
width: 80,
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
align: 'center'
|
|
}, {
|
|
name: 'trade.trade_swap.GetSpotPrice',
|
|
label: '期初标的价格(收取方)',
|
|
index: 'trade.trade_swap.GetSpotPrice',
|
|
width: 100,
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
align: 'center',
|
|
formatter: otcformat.trading.umprice
|
|
}, {
|
|
name: 'trade.trade_swap.GetTradeAmount',
|
|
label: '交易数量(收取方)',
|
|
index: 'trade.trade_swap.GetTradeAmount',
|
|
width: 100,
|
|
align: 'center',
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
formatter: function (cellValue, options, rowObject) {
|
|
return otcformat.trading.notional(page.IsUseDisplayNotional ? (rowObject.CountRatio || 1) * cellValue : cellValue);
|
|
}
|
|
}, {
|
|
name: 'trade.trade_swap.GetLongShort',
|
|
label: '多空方向(收取方)',
|
|
index: 'trade.trade_swap.GetLongShort',
|
|
width: 90,
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
align: 'center'
|
|
}, {
|
|
name: 'trade.trade_swap.GetSwapTimeAndRate',
|
|
label: '互换利率(收取方)',
|
|
index: 'trade.trade_swap.GetSwapTimeAndRate',
|
|
width: 100,
|
|
align: 'center',
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
formatter: SwapTimeAndRateFormat
|
|
}, {
|
|
name: 'trade.trade_swap.GetSingleFee',
|
|
label: '单位交易费用(收取方)',
|
|
index: 'trade.trade_swap.GetSingleFee',
|
|
width: 90,
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
align: 'center',
|
|
formatter: GETTradeSinglePriceFormat
|
|
}, {
|
|
name: 'trade.trade_swap.GetTradePrice',
|
|
label: '交易费用(收取方)',
|
|
index: 'trade.trade_swap.GetTradePrice',
|
|
width: 90,
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
align: 'center',
|
|
formatter: otcformat.trading.tradePrice
|
|
}, {
|
|
name: 'trade.trade_swap.GetMarginRate',
|
|
label: '初始预付金率(收取方)',
|
|
index: 'trade.trade_swap.GetMarginRate',
|
|
width: 100,
|
|
align: 'center',
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
formatter: otcformat.trading.marginRateP
|
|
}, {
|
|
name: 'OriginalStockEqvNotional',
|
|
label: '名义本金',
|
|
index: 'OriginalStockEqvNotional',
|
|
width: 120,
|
|
align: 'center',
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
formatter: otcformat.trading.stockEqvNotional
|
|
}, {
|
|
name: 'trade.trade_swap.AnnualDays',
|
|
label: '年化天数',
|
|
index: 'trade.trade_swap.AnnualDays',
|
|
width: 120,
|
|
align: 'center',
|
|
sortable: false,
|
|
sortIndex: i++
|
|
}, {
|
|
name: 'UnderlyingCode',
|
|
label: '标的代码',
|
|
index: 'UnderlyingCode',
|
|
width: 100,
|
|
align: 'center',
|
|
sortIndex: i++,
|
|
optionHide: true,
|
|
hide: true
|
|
}, {
|
|
name: 'UnderlyingPrice',
|
|
label: '当前标的价格',
|
|
index: 'UnderlyingPrice',
|
|
width: 100,
|
|
align: 'center',
|
|
sortIndex: i++,
|
|
}, {
|
|
name: page.isPvRounded ? 'RoundedPv' : 'Pv',
|
|
label: '持仓市值',
|
|
index: page.isPvRounded ? 'RoundedPv' : 'Pv',
|
|
width: 120,
|
|
align: 'center',
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
formatter: otcformat.trading.tradePrice,
|
|
summaryType: 'sum'
|
|
}, {
|
|
name: 'TradeAmount',
|
|
label: '持仓数量',
|
|
index: 'TradeAmount',
|
|
sortIndex: i++,
|
|
width: 120,
|
|
align: 'center',
|
|
sortable: false,
|
|
formatter: function (cellvalue, options, rowObject) {
|
|
return otcformat.trading.notional(page.IsUseDisplayNotional ? tradeHelper.getTradeAmountV(rowObject.trade, rowObject.TradeAmount, 1) * (rowObject.CountRatio || 1) : tradeHelper.getTradeAmountV(rowObject.trade, rowObject.TradeAmount, 1));
|
|
}
|
|
}, {
|
|
name: page.isPvRounded ? 'RoundedPnl' : 'Pnl',
|
|
label: '持仓盈亏',
|
|
index: page.isPvRounded ? 'RoundedPnl' : 'Pnl',
|
|
width: 120,
|
|
align: 'center',
|
|
sortable: false,
|
|
sortIndex: i++,
|
|
formatter: otcformat.trading.tradePrice,
|
|
summaryType: 'sum'
|
|
},
|
|
];
|
|
return col;
|
|
}());
|
|
|
|
function gridComplete() {
|
|
var jgrid = $(this);
|
|
var rowNum = parseInt(jgrid.getGridParam('records'), 10);
|
|
if (rowNum > 0) {
|
|
$(".ui-jqgrid-sdiv").show();
|
|
var totalPv = arguments[0].Sum == null ? "" : (page.isPvRounded ? arguments[0].Sum.RoundedPvSum : arguments[0].Sum.PvSum);
|
|
var totalPnl = arguments[0].Sum == null ? "" : (page.isPvRounded ? arguments[0].Sum.RoundedDailyPnLSum : arguments[0].Sum.DailyPnLSum);
|
|
if (page.isPvRounded) {
|
|
jgrid.footerData("set", { ClientName: "合计", RoundedPv: totalPv, RoundedPnl: totalPnl });
|
|
}
|
|
else {
|
|
jgrid.footerData("set", { ClientName: "合计", Pv: totalPv, Pnl: totalPnl });
|
|
}
|
|
$(".ui-jqgrid-sortable").css("text-align", "center");
|
|
|
|
var newHeight = $(window).height() - 270;
|
|
$(".ui-jqgrid .ui-jqgrid-bdiv").css("cssText", "height: " + newHeight + "px!important;");
|
|
$('.ui-jqgrid-bdiv', '#gbox_listGrid').floatingScroll();
|
|
|
|
if ($("#PvSum").val() == "" && $("#PnlSum").val() == "") {
|
|
$("#PvSum").val(otcformat.trading.tradePrice(totalPv));
|
|
$("#PvSum").css('color', totalPv > 0 ? 'red' : (totalPv < 0 ? 'green' : ''));
|
|
$("#PnlSum").val(otcformat.trading.tradePrice(totalPnl));
|
|
$("#PnlSum").css('color', totalPnl > 0 ? 'red' : (totalPnl < 0 ? 'green' : ''));
|
|
totalPvClient = numeral(otcformat.trading.tradePrice(totalPv)).value();
|
|
totalPnlClient = numeral(otcformat.trading.tradePrice(totalPnl)).value();
|
|
}
|
|
} else {
|
|
$(".ui-jqgrid-sdiv").hide();
|
|
}
|
|
//jgrid.sortGrid(g_sort.name, g_sort.order);
|
|
main.setcolumnChooser(jgrid, page.configcolumn);
|
|
$(".selftooltip").tooltip({ html: true, show: 50000, trigger: "hover" });
|
|
}
|
|
|
|
function rowdblclick(rowid) {
|
|
var rowData = $(this).getRowData(rowid);
|
|
if (rowData.EncryptTradeId) {
|
|
starttradeView(rowData.TradeMultipleType, rowData.EncryptTradeId);
|
|
}
|
|
}
|
|
|
|
function starttradeView(tradetype, id) {
|
|
if (tradetype.indexOf("远期") >= 0) {
|
|
let srcurl = "/forwardtrade/tradeView/?enid=" + id + "&isFromPositionReport=true";
|
|
main.open("查看远期交易", srcurl, { area: ['1260px', '100%'] });
|
|
}
|
|
else {
|
|
let srcurl = "/trade/tradeView/?enid=" + id + "&isFromPositionReport=true";
|
|
main.open("查看交易", srcurl, { area: ['1260px', '100%'] });
|
|
}
|
|
}
|
|
|
|
function TradeSinglePriceFormat(cellValue, options, rowObject) {
|
|
if (rowObject.IsUsePremiumRate) {
|
|
return otcformat.trading.premiumRateP(rowObject.PremiumRate);
|
|
}
|
|
else {
|
|
return otcformat.trading.tradeSinglePrice(cellValue);
|
|
}
|
|
}
|
|
|
|
function YesOrNoFormat(cellValue, options, rowObject) {
|
|
return cellValue ? "是" : "否";
|
|
}
|
|
|
|
function GETTradeSinglePriceFormat(cellValue, options, rowObject) {
|
|
if (rowObject.trade.trade_swap.IsGetFloatingProfit == false && rowObject.trade.trade_swap.GetUnAnnualRate < 1 && rowObject.trade.trade_swap.GetUnAnnualRate > 0) {
|
|
return otcformat.trading.premiumRateP(rowObject.trade.trade_swap.GetUnAnnualRate);
|
|
}
|
|
else {
|
|
if (!rowObject.trade.trade_swap.IsShare) {
|
|
return rowObject.trade.trade_swap.PayContractSize == 0 ? 0 : otcformat.trading.tradeSinglePrice(cellValue / rowObject.trade.trade_swap.PayContractSize);
|
|
}
|
|
return otcformat.trading.tradeSinglePrice(cellValue);
|
|
}
|
|
}
|
|
|
|
function SwapTimeAndRateFormat(cellValue, options, rowObject) {
|
|
if (cellValue != null && cellValue.indexOf(";") > 0) {
|
|
var spCellValue = cellValue.split(";")[1];
|
|
if (spCellValue != null && spCellValue.indexOf(",") > 0) {
|
|
return otcformat.trading.premiumRateP(spCellValue.split(",")[0]);
|
|
} else {
|
|
return otcformat.trading.premiumRateP(spCellValue);
|
|
}
|
|
}
|
|
return otcformat.trading.premiumRateP(cellValue);
|
|
}
|
|
|
|
function unformat(cellValue, options, rowObject) {
|
|
return numeral(cellValue).value();
|
|
}
|
|
|
|
function rowclick(id) {
|
|
setFooter();
|
|
}
|
|
|
|
function allRowSelect(rowids, status) {
|
|
setFooter();
|
|
}
|
|
|
|
function reloadTradeMarketReport() {
|
|
//重新加载
|
|
SearchClick(true);
|
|
}
|
|
|
|
//搜索持仓明细
|
|
function SearchClick(isSearchclick) {
|
|
var listGrid = $('#listGrid');
|
|
listGrid.jqGrid('setGridParam', {
|
|
url: '/trade_span/clientTradePositionQuery',
|
|
datatype: 'json'
|
|
})
|
|
listGrid.appendPostData({ ClientId: $("#ClientId").val() });
|
|
listGrid.appendPostData({ TradeNumber: $("#TradeNumber").val() });
|
|
listGrid.appendPostData({ ValueDate: $("#ValueDate").val() });
|
|
listGrid.appendPostData({ ParentFlag: $("#ParentFlag").val() });
|
|
listGrid.appendPostData({ BookIds: $("#AssetId").val() })
|
|
listGrid.appendPostData({ AssetIdGroupList: $("#GroupId").val() })
|
|
listGrid.appendPostData({ UnderlyingIds: $("#UnderlyingId").val() });
|
|
listGrid.appendPostData({ TradeDateStart: $("#DateFromTradeDate").val() });
|
|
listGrid.appendPostData({ TradeDateEnd: $("#DateToTradeDate").val() });
|
|
listGrid.appendPostData({ ExerciseDateStart: $("#DateFromExerciseDate").val() });
|
|
listGrid.appendPostData({ ExerciseDateEnd: $("#DateToExerciseDate").val() });
|
|
|
|
if (!$("#ValueDate").val()) {
|
|
main.message("请选择要查看报告的结束日期!");
|
|
return;
|
|
}
|
|
|
|
if ($("#ValueDate").val() > page.calcDate) {
|
|
main.message("结束日期不能大于当前系统日期!");
|
|
return;
|
|
}
|
|
if ($("#ValueDate").val() < $("#ValueDateFrom").val()) {
|
|
main.message("起始日期不能大于结束日期!");
|
|
return;
|
|
}
|
|
|
|
if (typeof (isSearchclick) != "undefined" && isSearchclick) {
|
|
//点击搜索时默认第一页
|
|
listGrid.jqGrid('setGridParam',
|
|
{
|
|
page: 1
|
|
});
|
|
}
|
|
listGrid.trigger('reloadGrid');
|
|
history.replaceState(null, null, window.location.href.replace(/([?&]clientId)=[^&]+/, '$1=' + $("#ClientId").val()));
|
|
|
|
var req = {};
|
|
req.ValueDate = $("#ValueDate").val();
|
|
req.ClientId = $("#ClientId").val();
|
|
req.ParentFlag = $("#ParentFlag").val();
|
|
req.TradeTypes = ["收益互换"];
|
|
main.post("/trade_span/clientTradePositionQuery", { req: req }).done(function (resp) {
|
|
var pvSum = otcformat.trading.tradePrice(page.isPvRounded ? resp.Sum.RoundedPvSum : resp.Sum.PvSum);
|
|
var pnlSum = otcformat.trading.tradePrice(page.isPvRounded ? resp.Sum.RoundedDailyPnLSum : resp.Sum.DailyPnLSum);
|
|
$("#PvSum").val(pvSum);
|
|
$("#PvSum").css('color', (page.isPvRounded ? resp.Sum.RoundedPvSum : resp.Sum.PvSum) > 0 ? 'red' : ((page.isPvRounded ? resp.Sum.RoundedPvSum : resp.Sum.PvSum) < 0 ? 'green' : ''));
|
|
$("#PnlSum").val(pnlSum);
|
|
$("#PnlSum").css('color', (page.isPvRounded ? resp.Sum.RoundedDailyPnLSum : resp.Sum.DailyPnLSum) > 0 ? 'red' : ((page.isPvRounded ? resp.Sum.RoundedDailyPnLSum : resp.Sum.DailyPnLSum) < 0 ? 'green' : ''));
|
|
totalPvClient = numeral(pvSum).value();
|
|
totalPnlClient = numeral(pnlSum).value();
|
|
});
|
|
}
|
|
|
|
function showChiCang() {
|
|
main.showcolumnChooser(jQuery('#listGrid'), page.configcolumn);
|
|
}
|
|
|
|
function locationChange(tab) {
|
|
if ($("#ValueDate").val() > page.calcDate) {
|
|
main.message("结束日期不能大于当前系统日期!");
|
|
return;
|
|
}
|
|
|
|
window.location.href = tab + "?clientId=" + $("#ClientId").val() + "&valueDate=" + $("#ValueDate").val() + "&ParentFlag=" + $("#ParentFlag").val();
|
|
return;
|
|
}
|
|
|
|
function batchSetPrices() {
|
|
var jgrid = $("#listGrid");
|
|
var rowObjs = main.GetGridObjs(jgrid);
|
|
var pricesDic = [];
|
|
if (rowObjs.length > 0) {
|
|
rowObjs.forEach(obj => {
|
|
if (!pricesDic.find(t => t.key == obj.UnderlyingCode)) {
|
|
pricesDic.push({ key: obj.UnderlyingCode, value: numeral(obj.UnderlyingPrice ? obj.UnderlyingPrice : $("#priceInput" + obj.TradeId).val()).value() });
|
|
}
|
|
});
|
|
vuePrice.pricesDic = pricesDic;
|
|
$('#priceModal').modal('show');
|
|
}
|
|
else {
|
|
main.alert("请选择需要设置的交易");
|
|
}
|
|
}
|
|
|
|
function setFooter() {
|
|
var jgrid = $("#listGrid");
|
|
var rowObjs = main.GetGridObjs(jgrid);
|
|
var pvSum = rowObjs.length > 0 ? 0 : totalPv;
|
|
var roundedPvSum = rowObjs.length > 0 ? 0 : totalPv;
|
|
var pnlSum = rowObjs.length > 0 ? 0 : totalPnl;
|
|
var roundedPnlSum = rowObjs.length > 0 ? 0 : totalPnl;
|
|
|
|
rowObjs.forEach(obj => {
|
|
pvSum += numeral(obj.Pv).value();
|
|
roundedPvSum += numeral(obj.RoundedPv).value();
|
|
pnlSum += numeral(obj.Pnl).value();
|
|
roundedPnlSum += numeral(obj.RoundedPnl).value();
|
|
});
|
|
|
|
if (page.isPvRounded) {
|
|
jgrid.footerData("set", { ClientName: "合计", RoundedPv: roundedPvSum, RoundedPnl: roundedPnlSum });
|
|
}
|
|
else {
|
|
jgrid.footerData("set", { ClientName: "合计", Pv: pvSum, Pnl: pnlSum });
|
|
}
|
|
|
|
$("#PvSum").val(otcformat.trading.tradePrice(totalPvClient));
|
|
$("#PvSum").css('color', totalPvClient > 0 ? 'red' : (totalPvClient < 0 ? 'green' : ''));
|
|
$("#PnlSum").val(otcformat.trading.tradePrice(totalPnlClient));
|
|
$("#PnlSum").css('color', totalPnlClient > 0 ? 'red' : (totalPnlClient < 0 ? 'green' : ''));
|
|
}
|
|
|
|
var vuePrice = new Vue({
|
|
el: "#priceModal",
|
|
data: {
|
|
pricesDic: []
|
|
},
|
|
created: function () {
|
|
},
|
|
methods: {
|
|
closeModal: function () {
|
|
$('#priceModal').modal('hide');
|
|
},
|
|
saveModal: function () {
|
|
var thisobj = this;
|
|
var request = {};
|
|
var tradeIds = [];
|
|
|
|
var listGrid = $("#listGrid");
|
|
var rowObjs = main.GetGridObjs(listGrid);
|
|
rowObjs.forEach(obj => {
|
|
tradeIds.push(obj.TradeId);
|
|
});
|
|
request.TradeIds = tradeIds;
|
|
request.ValueDate = $("#ValueDate").val();
|
|
request.PricesDic = thisobj.pricesDic;
|
|
|
|
main.post("/pricing/AjaxCalcSwapTrades", { request: request }).done(function (resp) {
|
|
rowObjs.forEach(obj => {
|
|
var optionValue = resp.obj.TradeOptionValueDic[obj.TradeId];
|
|
var needRowData = {};
|
|
needRowData.UnderlyingPrice = numeral(thisobj.pricesDic.find(t => t.key == obj.UnderlyingCode).value).value();
|
|
needRowData.TradeId = obj.TradeId;
|
|
needRowData.Pv = -optionValue.Pv;
|
|
needRowData.RoundedPv = -optionValue.Pv;
|
|
needRowData.Pnl = -optionValue.Pnl;
|
|
needRowData.RoundedPnl = -optionValue.Pnl;
|
|
|
|
var pvGap = (-optionValue.Pv) - (page.isPvRounded ? obj.RoundedPv : obj.Pv);
|
|
var pnlGap = (-optionValue.Pnl) - (page.isPvRounded ? obj.RoundedPnl : obj.Pnl);
|
|
totalPv = numeral(otcformat.trading.tradePrice(totalPv + pvGap)).value();
|
|
totalPnl = numeral(otcformat.trading.tradePrice(totalPnl + pnlGap)).value();
|
|
totalPvClient = numeral(otcformat.trading.tradePrice(totalPvClient + pvGap)).value();
|
|
totalPnlClient = numeral(otcformat.trading.tradePrice(totalPnlClient + pnlGap)).value();
|
|
|
|
listGrid.setRowData(obj.TradeId, needRowData);
|
|
});
|
|
|
|
setFooter();
|
|
});
|
|
$('#priceModal').modal('hide');
|
|
}
|
|
},
|
|
components: {
|
|
'vue-number-input': FastVue.vueNumberInput()
|
|
}
|
|
}); |