Files
zszq-trs/YLErpWeb/wwwroot/Scripts/app/trade/tradeList.js
T

1962 lines
71 KiB
JavaScript

var g_grid = {};
var query_data = {};
const pricingFormat = otcformat.trading;
const consNumberFormat = Object.freeze(new function () {
this.fixed2 = main.numberFormat(2);
this.fixed3 = main.numberFormat(3);
this.fixed4 = main.numberFormat(4);
this.fixed5 = main.numberFormat(5);
this.fixed6 = main.numberFormat(6);
this.umpriceP = this.fixed4;
return this;
}());
const inputFormatPercent = Object.freeze({ precision: 2, append: '%' });
const inputFormatPremiumRate = Object.freeze({ precision: pricingFormat.premiumRateP.precision, append: '' });
const inputFormatEqvNotional = Object.freeze({ precision: pricingFormat.StockEqvNotional.precision, append: '' });
const inputFormatTradeAmount = Object.freeze({ precision: pricingFormat.notional.precision, negative: true, append: '' });
$(function () {
var PostData = {};
PostData.ValidState = $("#ValidState").val();
PostData.TabIndex = page.TabIndex;
if (settleDate) {
$("#DateFromExerciseDate").val(settleDate);
$("#DateToExerciseDate").val(settleDate);
PostData.ExerciseDateStart = settleDate;
PostData.ExerciseDateEnd = settleDate;
}
if (tradeType) {
var Types = tradeType.split(',');
$("#TradeTypes").val(Types);
$("#TradeTypes").change();
PostData.TradeTypes = $("#TradeTypes").val().join(",");
}
$('#createInvote2').click(
function () {
var tempTrim = String.prototype.trim;
String.prototype.trim = function () {
var firstChar = "";
if (this.indexOf("\t") === 0) {
firstChar = "\t";
}
return firstChar + this.replace(/(^\s*)|(\s*$)/g, "");
};
ExcellentExport.csv(this, 'excelTable');
String.prototype.trim = tempTrim;
return;
}
);
$(".datepicker").datepicker({
changeMonth: true,
changeYear: true,
showButtonPanel: true,
showOtherMonths: true,
selectOtherMonths: true
});
var url = "/trade/tradeQuery";
var prmNames = { page: 'page', rows: 'rows', sort: 'sidx', order: 'sord' };
if (PostData.TabIndex === 8) {
url = "/trade/AjaxGetMultiCloseList";
}
grid = jQuery('#listGrid').jqGrid({
cmTemplate: {
width: 80,
align: 'center',
sortable: true
},
url: url,
prmNames: prmNames,
datatype: 'json',
multiselect: true,
height: 'auto',
width: '96%',
autowidth: false,
shrinkToFit: false,
viewrecords: true,
jsonReader: { repeatitems: false },
caption: '',
mtype: 'POST',
postData: PostData,
onSelectRow: rowclick,
ondblClickRow: rowdblclick,
colModel: getColModel(),
pager: jQuery('#pagerGrid'),
pagerpos: 'left',
rowNum: 25,
rowList: [25, 50, 100, 200, 10000],
footerrow: false,
loadComplete: gridComplete,
onPaging: onJqgridPaging
});
function keyEnter(event) {
try {
var e = event ? event : (window.event ? window.event : null);
if (e.keyCode === 13) {
SearchClick(true);
}
} catch (e) {
//
}
}
document.onkeydown = keyEnter;
let underlyingCtrl = new tradeHelper.UnderlyingSelectCtrl('#UnderlyingId').setFlag(tradeHelper.UnderlyingSelectFlag.OtcTrade);
$("#CheckboxAll").click(selAllGrid);
});
function getColModelDefault() {
let i = 0;
let colModelGrid = [
{
name: 'rowFlag',
label: ' ',
width: 30,
optionHide: true,
formatter: expandFormat,
align: 'center',
sortable: false
}, {
name: 'TradeStatus',
label: '交易状态',
index: 'TradeStatus',
sortIndex: i++,
width: 70,
align: 'center',
sortable: false
}, {
name: 'TradeNumber',
label: '交易编号',
index: 'TradeNumber',
sortIndex: i++,
width: 240,
align: 'center',
sortable: false,
formatter: ShowStructFormater
}, {
name: 'ClientName',
label: '交易对手方',
index: 'ClientName',
sortIndex: i++,
width: 160,
align: 'center',
sortable: false
}, {
name: 'AssetBookName',
label: '簿记账户',
index: 'AssetBookName',
sortIndex: i++,
width: 120,
align: 'center',
sortable: false
},
{
name: 'id',
label: 'id',
index: 'id',
sortIndex: i++,
width: 70,
align: 'center',
hidden: true,
optionHide: true,
sortable: false
}, {
name: 'EncryptId',
label: 'EncryptId',
index: 'EncryptId',
sortIndex: i++,
width: 70,
align: 'center',
hidden: true,
optionHide: true,
sortable: false
}, {
name: 'IsMoneynessOption',
label: 'IsMoneynessOption',
index: 'IsMoneynessOption',
sortIndex: i++,
width: 70,
align: 'center',
hidden: true,
optionHide: true,
sortable: false
}, {
name: 'GroupName',
label: '分组名',
index: 'GroupName',
sortIndex: i++,
width: 80,
hidden: !page.setGroup,
sortable: false
},
{
name: 'TradeDate',
label: '成交日期',
index: 'TradeDate',
sortIndex: i++,
width: 90,
align: 'center',
formatter: 'date'
}, {
name: 'ExerciseDate',
label: '到期日期',
index: 'ExerciseDate',
sortIndex: i++,
width: 90,
align: 'center',
formatter: 'date'
}, {
name: 'BuySell',
label: '买卖方向',
index: 'BuySell',
sortIndex: i++,
width: 70,
align: 'center',
sortable: false
}, {
name: 'ExerciseModeCn',
label: '行权方式',
index: 'ExerciseModeCn',
sortIndex: i++,
width: 90,
align: 'center',
sortable: false
}, {
name: 'TradeType',
label: '结构类型',
index: 'TradeType',
sortIndex: i++,
width: 70,
align: 'center',
sortable: false,
formatter: function (cellvalue, options, rowObject) {
return rowObject.StructureType && rowObject.IsGroup != 2 ? rowObject.StructureType : rowObject.TradeType;
}
}, {
name: 'OptionType',
label: '看涨看跌',
index: 'OptionType',
sortIndex: i++,
width: 70,
align: 'center',
sortable: false
}, {
name: 'UnderlyingAssetName',
label: '标的名称',
index: 'UnderlyingAssetName',
sortIndex: i++,
width: 95,
align: 'center',
sortable: false
},
{
name: 'UnderlyingCode',
label: '标的代码',
index: 'UnderlyingCode',
sortIndex: i++,
width: 60,
align: 'center',
sortable: false,
formatter: ShowStructFormater
}, {
name: 'UnderlyingVariety',
label: '标的品种',
index: 'UnderlyingVariety',
sortIndex: i++,
width: 60,
align: 'center',
sortable: false,
hidden: !page.showUnderlyingVariety,
optionHide: !page.showUnderlyingVariety
},
{
name: 'SpotPrice',
label: '期初标的价格',
index: 'SpotPrice',
sortIndex: i++,
width: 85,
align: 'center',
sortable: true,
formatter: otcformat.trading.umprice
},
{
name: 'TradeType2',
label: 'TradeType2',
index: 'TradeType2',
sortIndex: i++,
width: 70,
optionHide: true,
hidden: true,
sortable: false,
formatter: function (cellvalue, options, rowObject) {
return rowObject.TradeType;
}
}, {
name: 'Strike',
label: '执行价格',
index: 'Strike',
sortIndex: i++,
width: 90,
align: 'center',
sortable: true,
formatter: StrikeFormatter
}, {
name: 'TradeSinglePrice',
label: '权利金(成交)',
index: 'TradeSinglePrice',
sortIndex: i++,
width: 90,
align: 'center',
sortable: true,
formatter: TradeSinglePriceFormat
}, {
name: 'TradeAmount',
label: '成交数量',
width: 70,
align: 'center',
sortable: false,
formatter: function (cellvalue, options, rowObject) {
return otcformat.trading.notional(tradeHelper.getTradeAmountV(rowObject));
}
}, {
name: 'TradeOriginalAmount',
label: '有效成交数量',
index: 'TradeOriginalAmount',
sortIndex: i++,
width: 96,
align: 'center',
sortable: false,
formatter: otcformat.trading.notional
}, {
name: 'OriginalStockEqvNotional',
label: '名义本金',
index: 'OriginalStockEqvNotional',
sortIndex: i++,
width: 70,
align: 'center',
sortable: true,
formatter: StockEqvNotionalMaxFormat
}, {
name: 'TradePrice',
label: '成交金额',
index: 'TradePrice',
sortIndex: i++,
width: 90,
align: 'center',
sortable: true,
formatter: TradePriceFormat
}, {
name: 'KnockInOutStatusObservation',
label: '敲入敲出状态',
index: 'KnockInOutStatusObservation',
sortIndex: i++,
width: 96,
align: 'center',
sortable: false
}, {
name: 'FinalPrice',
label: '期末价格',
index: 'FinalPrice',
sortIndex: i++,
width: 85,
align: 'center',
hidden: true,
optionHide: true,
sortable: false,
formatter: otcformat.trading.umprice
}, {
name: 'PairTrade',
label: 'PairTrade',
index: 'PairTrade',
sortIndex: i++,
align: 'center',
hidden: true,
optionHide: true,
sortable: false
}, {
name: 'SyntheticUnderlyingTipsInfo',
label: 'SyntheticUnderlyingTipsInfo',
index: 'SyntheticUnderlyingTipsInfo',
sortIndex: i++,
align: 'center',
hidden: true,
optionHide: true,
sortable: false
}, {
name: 'SalesCommission.SalesNameStr',
label: saleMode == 0 ? "销售人员" : "客户经理",
index: 'SalesCommission.SalesNameStr',
sortIndex: i++,
width: 70,
align: 'center',
sortable: false
}, {
name: 'SalesCommission.Commission',
label: '销售提成',
index: 'SalesCommission.Commission',
sortIndex: i++,
width: 70,
align: 'center',
sortable: false,
formatter: CommissionFormatter
}
];
colModelGrid.push({
name: 'UnderlyingPrice',
label: '最新标的价格',
index: 'UnderlyingPrice',
sortIndex: i++,
width: 96,
align: 'center',
sortable: false,
formatter: otcformat.trading.umprice
});
if (page.tabIndexSelect === page.TradeTabIndexEnum_cwqqjy) {
colModelGrid.push({
name: 'SinglePV',
label: '权利金(存续)',
index: 'SinglePV',
sortIndex: i++,
width: 65,
align: 'center',
sortable: false,
formatter: GetLatestSinglePVDesc
});
colModelGrid.push({
name: 'TradeAmountV',
label: '存续数量',
index: 'TradeAmountV',
sortIndex: i++,
width: 70,
align: 'center',
sortable: false,
formatter: TradeAmountFormat
});
colModelGrid.push({
name: 'PV',
label: '存续市值',
index: 'PV',
sortIndex: i++,
width: 65,
align: 'center',
sortable: false,
formatter: GetLatestPVDesc
});
colModelGrid.push({
name: 'PositionPnl',
label: '浮动盈亏',
index: 'PositionPnl',
sortIndex: i++,
width: 65,
align: 'center',
sortable: false,
formatter: GetPositionPnl
});
colModelGrid.push({
name: 'RealizedPnl',
label: '实现盈亏',
index: 'RealizedPnl',
sortIndex: i++,
width: 65,
align: 'center',
sortable: false,
formatter: GetRealizedPnl
});
}
if (page.tabIndexSelect === page.TradeTabIndexEnum_cwqqjy) {
colModelGrid.push({
name: 'UnWindDate',
label: '了结日期',
index: 'UnWindDate',
sortIndex: i++,
width: 65,
align: 'center',
sortable: true,
formatter: function (cellValue, options, rowObject) {
if (!cellValue) {
return "--";
}
else {
return cellValue.substring(0, 10);
}
}
});
colModelGrid.push({
name: 'UnWindUnderlyingPrice',
label: '了结标的价格',
index: 'UnWindUnderlyingPrice',
sortIndex: i++,
width: 96,
align: 'center',
sortable: false,
formatter: otcformat.trading.umprice
});
colModelGrid.push({
name: 'UnWindTotalAmount',
label: '了结数量',
index: 'UnWindTotalAmount',
sortIndex: i++,
width: 65,
align: 'center',
sortable: false,
formatter: otcformat.trading.notional
});
colModelGrid.push({
name: 'UnWindFee',
label: '了结总额',
index: 'UnWindFee',
sortIndex: i++,
width: 65,
align: 'center',
sortable: false,
formatter: UnWindFeeFormat
});
colModelGrid.push({
name: 'UnWindTimes',
label: '了结次数',
index: 'UnWindTimes',
sortIndex: i++,
width: 65,
align: 'center',
sortable: false
});
}
if (page.tabIndexSelect === page.TradeTabIndexEnum_cwqqjy && page.IsTradeVol) {
colModelGrid.push({
name: 'TradeOpenVolatility',
label: '成交波动率',
index: 'TradeOpenVolatility',
sortIndex: i++,
width: 80,
sortable: false,
align: 'center',
formatter: otcformat.trading.premiumRateP
});
colModelGrid.push({
name: 'TradeCloseVolatility',
label: '目标波动率',
index: 'TradeCloseVolatility',
sortIndex: i++,
width: 80,
sortable: false,
align: 'center',
formatter: otcformat.trading.premiumRateP
});
colModelGrid.push({
name: 'NumOfSmoothingDays',
label: '平滑天数',
index: 'NumOfSmoothingDays',
sortIndex: i++,
width: 65,
sortable: true,
align: 'center'
});
colModelGrid.push({
name: 'Comments',
label: '备注',
index: 'Comments',
sortIndex: i++,
width: 70,
sortable: false,
align: 'center',
formatter: function (cellValue, options, rowObject) {
if (cellValue && cellValue.startsWith("http://")) {
return "<a href='{0}' style='text-decoration:underline;' target='_blank'>{0}</a>".template(cellValue);
}
return cellValue == null ? "" : cellValue;
}
});
}
if (page.tabIndexSelect === page.TradeTabIndexEnum_cwqqjy && page.isDongZheng) {
colModelGrid.push({
name: 'Comments',
label: '对手编号',
index: 'Comments',
sortIndex: i++,
width: 120,
sortable: false,
align: 'center',
});
}
colModelGrid.push({
name: 'TraderName',
label: '交易员',
index: 'TraderName',
sortIndex: i++,
width: 120,
sortable: false,
align: 'center',
});
if (page.ViewTagPermission) {
colModelGrid.push({
name: 'Tags',
label: '标签值',
index: 'Tags',
sortIndex: i++,
width: 150,
align: 'left',
sortable: false,
formatter: function (cellvalue, options, rowObject) {
var html = '<div class="tag-context">';
var tagNames = "";
if (rowObject.Tags != null && rowObject.Tags.length > 0) {
for (var i = 0; i < rowObject.Tags.length; i++) {
if (i == rowObject.Tags.length - 1) {
tagNames += "[" + rowObject.Tags[i].Name + "]";
} else {
tagNames += "[" + rowObject.Tags[i].Name + "],";
}
}
if (rowObject.Tags.length > 2) {
for (var i = 0; i < 2; i++) {
html += '<span class="tag-item" data-id="' + rowObject.Tags[i].Id + '" data-name="' + rowObject.Tags[i].Name + '"><span class="tag-text" data-value="' + rowObject.Tags[i].Id + '">' + rowObject.Tags[i].Name + '</span></span>';
}
html += '<span class="tag-add" title="' + tagNames + '">...</span>';
} else {
for (var i = 0; i < rowObject.Tags.length; i++) {
html += '<span class="tag-item" data-id="' + rowObject.Tags[i].Id + '" data-name="' + rowObject.Tags[i].Name + '"><span class="tag-text" data-value="' + rowObject.Tags[i].Id + '">' + rowObject.Tags[i].Name + '</span></span>';
}
}
}
html += '</div>';
return html;
}
}, {
name: 'OutputTags',
label: 'OutputTags',
index: 'OutputTags',
width: 70,
align: 'center',
hidden: true,
optionHide: true
});
}
return tradeHelper.getAmountToNotional(colModelGrid);
}
function changeVolType() { //改变波动率类型
}
function uploadFinishedTrades() {
var srcurl = "/trade/finishedTradesUpload";
main.open("批量了结导入", srcurl, { area: ["550px", "300px"] });
}
function batchSetObservationPrice() {
var jgrid = jQuery('#listGrid');
var tradeids = main.GetGridIds(jgrid);
main.post("/trade/checkBatchSetObservationPrice", { tradeids: tradeids }).done(function (res) {
main.open("批量设置观察价格", "/trade/BatchSetObservationPrice/?tradeIds=" + tradeids.join(","),
{
area: ['900px', '600px'],
end: function () {
if (window.parent && window.parent.reloadtrade) {
window.parent.reloadtrade();
}
}
});
});
}
function uploadEodTradeRiskManualExcel() {
var srcurl = "/eod_trade_risk_manual/eod_trade_risk_manualUpload?isByType=false";
main.open("批量风险维护导入", srcurl, { area: ['500px', '400px'] });
}
function uploadTradeVolExcel() {
var srcurl = "/trade/tradeVolUpload";
main.open("批量波动率导入", srcurl, { area: ['500px', '400px'] });
}
function uploadTradeHedgeVolExcel() {
var srcurl = "/trade/tradeHedgeVolUpload";
main.open("批量对冲波动率导入", srcurl, { area: ['500px', '400px'] });
}
function UploadDividendRateAndNoRiskRateExcel() {
var srcurl = "/trade/tradeDividendRateAndNoRiskRate";
main.open("批量分红率和无风险利率导入", srcurl, { area: ['500px', '400px'] });
}
function GetLatestPVDesc(cellValue, options, rowObject) {
var html = "<span title='{0}'>{1}<span>";
if (rowObject.TradeStatus === page.trade_yizhixing || rowObject.TradeStatus === page.trade_yidaoqi || rowObject.TradeStatus === page.trade_yipingcang) {
return html.template("持仓交易最新价值", "--");
}
//根据选中的波动率类型显示
var voltype = $("#VolTypes").val();
if (rowObject.PV) {
var jgObj = JSON.parse(rowObject.PV);
var pv = $.grep(jgObj, function (d, i) {
return d.Key === voltype;
});
if (pv.length > 0) {
return html.template("持仓交易最新价值", otcformat.trading.tradePrice(pv[0].Value));
}
}
return html.template("持仓交易最新价值", "--");
}
function GetLatestSinglePVDesc(cellValue, options, rowObject) {
var html = "<span title='{0}'>{1}<span>";
if (rowObject.TradeStatus === page.trade_yizhixing || rowObject.TradeStatus === page.trade_yidaoqi || rowObject.TradeStatus === page.trade_yipingcang) {
return html.template("期权现价", "--");
}
//根据选中的波动率类型显示
var voltype = $("#VolTypes").val();
if (rowObject.PV) {
var jgObj = JSON.parse(rowObject.PV);
var pv = $.grep(jgObj, function (d, i) {
return d.Key === voltype;
});
if (pv.length > 0) {
if (rowObject.IsUsePremiumRate) {
var premiumRate = tradeHelper.GetPremiumRateByTradePrice(pv[0].Value, rowObject.StockEqvNotional, rowObject.ParticipationRate, rowObject.PrincipalSum, rowObject.AnnualizeFactor, rowObject.BuySell, rowObject.TradeType, false);
return html.template("期权现价", otcformat.trading.premiumRateP(premiumRate));
} else {
var singlePrice = tradeHelper.GetTradeSinglePriceByTradePrice(pv[0].Value, rowObject.StockEqvNotional, rowObject.Notional, rowObject.PrincipalSum, rowObject.AnnualizeFactor, rowObject.BuySell, rowObject.TradeType, false);
return html.template("期权现价", otcformat.trading.tradeSinglePrice(singlePrice));
}
}
}
return html.template("期权现价", "--");
}
function GetRealizedPnl(cellValue, options, rowObject) {
var html = "<span title='{0}'>{1}<span>";
if (rowObject.TradeStatus === page.trade_yizhixing || rowObject.TradeStatus === page.trade_yidaoqi || rowObject.TradeStatus === page.trade_yipingcang
|| rowObject.TradeStatus === page.trade_querenchengjiao || rowObject.TradeStatus === page.trade_pingcangdaifuhe || rowObject.TradeStatus === page.trade_xingquandaifuhe || rowObject.TradeStatus === page.trade_tiqianzhongzhi) {
return html.template("实现盈亏", otcformat.trading.tradePrice(cellValue));
}
return html.template("实现盈亏", "--");
}
function GetPositionPnl(cellValue, options, rowObject) {
var html = "<span title='{0}'>{1}<span>";
if (rowObject.TradeStatus === page.trade_yizhixing || rowObject.TradeStatus === page.trade_yidaoqi || rowObject.TradeStatus === page.trade_yipingcang) {
return html.template("持仓盈亏", "--");
}
//根据选中的波动率类型显示
var voltype = $("#VolTypes").val();
if (rowObject.PositionPnl) {
var jgObj = JSON.parse(rowObject.PositionPnl);
var positionPnl = $.grep(jgObj, function (d, i) {
return d.Key === voltype;
});
if (positionPnl.length > 0) {
return html.template("持仓盈亏", otcformat.trading.tradePrice(positionPnl[0].Value));
}
}
return html.template("持仓盈亏", "--");
}
function setStructTable(rowObject) {
structTrades = rowObject.SubTrades;
if (!structTrades) return;
var trhtml = "";
var trcode = "<td>标的代码</td><td colspan='{0}'>{1}</td>".template(structTrades.length, rowObject.UnderlyingCode);
var trstrike = "<td>执行价格</td>";
var tracturalstrike = "";
if (rowObject.IsMoneynessOption === "是") {
tracturalstrike = "<td>执行价格</td>";
}
var trbuysell = "<td>买卖方向</td>";
var trvarity = "<td>结构类型</td><td colspan='{0}'>{1}</td>".template(structTrades.length, rowObject.StructureType);
var trstockeqvnotional = "<td>名义本金</td><td colspan='{0}'>{1}</td>".template(structTrades.length, otcformat.trading.StockEqvNotional(new Number(rowObject.StockEqvNotional) / 10000) + "万");
var trmaturedate = "<td>到期日期</td><td colspan='{0}'>{1}</td>".template(structTrades.length, moment(rowObject.ExerciseDate).format("YYYY-MM-DD"));
//trtradestatus = "<td>交易状态</td><td colspan='{0}'>{1}</td>".template(structTrades.length, rowObject.TradeStatus);
if (structTrades) {
for (var i = 0; i < structTrades.length; i++) {
trstrike += "<td>{0}</td>".template(structTrades[i].IsMoneynessOption === "是" ? (otcformat.trading.premiumRateP(structTrades[i].Strike)) : otcformat.trading.umprice(structTrades[i].Strike));
if (rowObject.IsMoneynessOption === "是") {
tracturalstrike += "<td>{0}</td>".template(otcformat.trading.umprice(structTrades[i].Strike * (rowObject.SpotPrice || rowObject.InitialSpotPrice)));
}
trbuysell += "<td>{0}</td>".template(structTrades[i].BuySell);
}
}
trhtml = "<tr>{0}</tr>".template(trcode);
trhtml += "<tr>{0}</tr>".template(trstrike);
if (rowObject.IsMoneynessOption === "是") {
trhtml += "<tr>{0}</tr>".template(tracturalstrike);
}
trhtml += "<tr>{0}</tr>".template(trbuysell);
trhtml += "<tr>{0}</tr>".template(trstockeqvnotional);
trhtml += "<tr>{0}</tr>".template(trmaturedate);
//trhtml += "<tr>{0}</tr>".template(trtradestatus);
trhtml += "<tr>{0}</tr>".template(trvarity);
var showTable = "<table class='table'>{0}<table>".template(trhtml);
return showTable;
}
function ShowStructFormater(cellValue, options, rowObject) {
if (rowObject.TradeType === "结构化交易") {
//return "<a href=\"#\" class=\"selftooltip\" style=\"z-index:10000000\" data-toggle=\"tooltip\" title=\"{1}\">{0}</a>"
// .template(cellValue || '', setStructTable(rowObject));
}
else if (rowObject.TradeType === "合成价差期权") {
return "<a href=\"#\" class=\"selftooltip\" style=\"z-index:10000000\" data-toggle=\"tooltip\" title=\"{1}\">{0}</a>"
.template(cellValue || '', rowObject.SyntheticUnderlyingTipsInfo);
}
return cellValue || '';
}
function StrikeFormatter(cellValue, options, rowObject) {
if (rowObject.TradeType == "自定义交易") {
return rowObject.StrikeToShow;
}
else if (rowObject.TradeType === "收益互换") {
return "--";
}
if (rowObject.Strike) {
if (rowObject.IsMoneynessOption === "是") {
return otcformat.trading.umprice(rowObject.InitialSpotPrice * rowObject.Strike);
} else {
return otcformat.trading.umprice(rowObject.Strike);
}
} else {
if (rowObject.Strike === 0) {
return otcformat.trading.umprice(0);
}
else {
return "";
}
}
}
function CommissionFormatter(cellValue, options, rowObject) {
if (rowObject.SalesCommission.Commission) {
if (rowObject.SalesCommission.CommissionFixed == false) {
return otcformat.trading.premiumRateP(rowObject.SalesCommission.Commission);
} else {
return otcformat.trading.umprice(rowObject.SalesCommission.Commission);
}
} else {
if (rowObject.SalesCommission.Commission === 0) {
return otcformat.trading.umprice(0);
}
else {
return "";
}
}
}
function NotionalFormat(cellValue, options, rowObject) {
if (rowObject.TradeStatus === page.trade_yizhixing || rowObject.TradeStatus === page.trade_yidaoqi || rowObject.TradeStatus === page.trade_yipingcang) {
return "0.00";
}
else {
return otcformat.trading.notional(cellValue);
}
}
function TradeAmountFormat(cellValue, options, rowObject) {
if (rowObject.TradeStatus === page.trade_yizhixing || rowObject.TradeStatus === page.trade_yidaoqi || rowObject.TradeStatus === page.trade_yipingcang) {
return otcformat.trading.notional(0);
}
else {
return otcformat.trading.notional(tradeHelper.getTradeAmountV(rowObject, rowObject.TradeAmount, 1));
}
}
function TradePriceFormat(cellValue, options, rowObject) {
return otcformat.trading.tradePrice(cellValue * (rowObject.BuySell === "买入" || rowObject.BuySell === "多头开仓" || rowObject.BuySell === "空头平仓" ? -1 : 1));
}
function StockEqvNotionalMaxFormat(cellValue, options, rowObject) {
return otcformat.trading.StockEqvNotional(isUseStockEqvNotionalMax && cellValue > 0 ? rowObject.StockEqvNotionalMax : cellValue);
}
function UnWindFeeFormat(cellValue, options, rowObject) {
return otcformat.trading.tradePrice(cellValue);
}
function unwindDateFormat(cellValue, options, rowObject) {
return (rowObject.TradeStatus === "已执行" || rowObject.TradeStatus === "已到期") ? moment(cellValue).format("YYYY-MM-DD") : "";
}
function TradeSinglePriceFormat(cellValue, options, rowObject) {
if (rowObject.IsUsePremiumRate) {
return otcformat.trading.premiumRateP(rowObject.PremiumRate);
}
else {
return otcformat.trading.tradeSinglePrice(cellValue);
}
}
//展开折叠
function expandFormat(cellValue, options, rowObject) {
var hasExpandIcon = rowObject.IsGroup == 1;
if (hasExpandIcon) {
return `<a class="yl-grid-plus" href="#" ondblclick="event.stopPropagation()" onclick="toggleExpand('${options.rowId}')"><i class="fa fa-plus"></i></a>`;
}
return "";
}
var duichong_TradeType = ["商品期货", "商品现货", "股票"];
function gridComplete() {
var jgrid = $(this);
$(".selftooltip").tooltip({ html: true, show: 50000, trigger: "hover", container: "body" });
if (page.tabIndexSelect === page.TradeTabIndexEnum_cwqqjy) {
main.setcolumnChooser(jgrid, page.configcolumn_data_cwcj);
}
if (page.tabIndexSelect === page.TradeTabIndexEnum_cwlj) {
main.setcolumnChooser(jgrid, page.configcolumn_data_cwlj);
}
var rowDatas = jgrid.jqGrid('getDataIDs');
for (var i = 0; i < rowDatas.length; i++) {
var rowData = rowDatas[i];
var temp = i + 1;
var rowdata = jgrid.getRowData(rowData);
//股票和期货是绿色
if (duichong_TradeType.contains(rowdata.TradeType)) {
//获取每行下的TD更改CSS
var tr_temp = jgrid.find("tr:eq({0})".template(temp));
//tr_temp.css("background", "rgba(84, 255, 0, 0.99)");
tr_temp.find("[aria-describedby='listGrid_TradeSinglePrice']").html(" ");
tr_temp.find("[aria-describedby='listGrid_StockEqvNotional']").html(" ");
tr_temp.find("[aria-describedby='listGrid_Strike']").html(" ");
tr_temp.find("[aria-describedby='listGrid_ExerciseModeCn']").html(" ");
}
}
var newHeight = $(window).height() - 350;
$(".ui-jqgrid .ui-jqgrid-bdiv").css("cssText", "height: " + newHeight + "px!important;");
selAllGrid();
$('.ui-jqgrid-bdiv', '#gbox_listGrid').floatingScroll();
if (scrollIndex > 0) {
$("#gview_listGrid .ui-jqgrid-bdiv").scrollTop(scrollIndex);
scrollIndex = 0;
}
}
function customButton(cellValue, options, rowObject) {
var imageHtml = "<input type=\"button\" value=\"删除\" class=\"btn-warning\" onclick=\"deletetrade('" +
rowObject.EncryptId +
"');\" />";
return imageHtml;
}
function deletetrade(encryptId) {
if (confirm("确定删除吗?")) {
$.ajax({
type: "Post",
url: "/trade/InValidTrade",
data: { id: encryptId, d: new Date() },
success: function (data) {
showmiddlemessage(data.obj);
if (data.success) {
$('#listGrid').trigger('reloadGrid');
}
},
error: function (msg) {
alert("error:" + msg);
}
});
}
}
function showToolName(cellValue, options, rowObject) {
var color = "";
var title = "查看交易信息";
if (rowObject.PairTrade) {
color = "color:blue";
title = "已有匹配交易编号:{0}".template(rowObject.PairTradeNumber);
}
var html = "<input style=\"{2}\" type=\"button\" class=\"wentiEdit\" title='{3}' onclick=\"starttradeView('{0}','{1}')\" value=\"查看\" />"
.template(rowObject.EncryptId, rowObject.TradeType, color, title);
return html;
}
function rowdblclick(rowid) {
var rowData = $(this).getRowData(rowid);
if (rowData.EncryptId && rowData.TradeType) {
starttradeView(rowData.EncryptId, rowData.TradeType);
}
}
function toggleExpand(rowid) {
event.stopPropagation();
$(event.target).toggleClass('fa-minus');
if ($(event.target).hasClass('fa-minus')) {
main.post("/trade/SearchGroupChildrenList", { id: rowid }).done(function (res) {
for (var i = 0; i < res.length; i++) {
if (res[i].Comments == null) {
res[i].Comments = "";
}
jQuery('#listGrid').jqGrid('addRowData', res[i].id, res[i], 'after', rowid);
$('#' + res[i].id).find("td").addClass("ChildrenBG");
}
});
}
else {
main.post("/trade/SearchGroupChildrenList", { id: rowid }).done(function (res) {
for (var i = 0; i < res.length; i++) {
jQuery('#listGrid').jqGrid('delRowData', res[i].id);
}
});
}
}
function toggleTcIdExpand(rowid) {
event.stopPropagation();
$(event.target).toggleClass('fa-minus');
if ($(event.target).hasClass('fa-minus')) {
main.post("/trade/AjaxGetMultiCloseGroupChildren", { TcId: rowid }).done(function (res) {
for (var i = 0; i < res.length; i++) {
jQuery('#listGrid').jqGrid('addRowData', res[i].TcId, res[i], 'after', rowid);
$('#' + res[i].TcId).find("td").addClass("ChildrenBG");
}
});
}
else {
main.post("/trade/AjaxGetMultiCloseGroupChildren", { TcId: rowid }).done(function (res) {
for (var i = 0; i < res.length; i++) {
jQuery('#listGrid').jqGrid('delRowData', res[i].TcId);
}
});
}
}
function setTradeGroup() {
var url = "/trade_group/set_trade_group";
main.open("设置分组", url);
}
function addTradeGroup() {
var jgrid = jQuery('#listGrid');
var selObjs = main.GetGridIds(jgrid);
if (selObjs.length === 0) { main.message("请选择至少一个交易"); return; }
var url = "/trade_group/add_trade_group";
main.open("加入分组", url);
}
function addGroupTrade() {
var jgrid = jQuery('#listGrid');
var selIds = main.GetGridIds(jgrid);
if (selIds.length === 0) { main.message("请选择至少一个交易"); return; }
main.post("/trade/CheckSelectedTrades", { tradeids: selIds }).done(function (res) {
main.open("组合交易编辑", "/trade/CheckSelectedTradesForAddGroup?" + $.param({ tradeids: selIds }, true), { area: ['1220px', '845px'] });
});
}
function dismissGroupTrade() {
var jgrid = jQuery('#listGrid');
var selIds = main.GetGridIds(jgrid);
if (selIds.length === 0) { main.message("请选择至少一个交易"); return; }
main.post("/trade/DismissSelectedGroupTrades", { tradeids: selIds }).done(function (res) {
reloadtrade();
});
}
function addGroupTradeCash() {
var jgrid = jQuery('#listGrid');
var selIds = main.GetGridIds(jgrid);
if (selIds.length === 0) { main.message("请选择至少一个交易"); return; }
main.post("/trade/CheckSelectedGroupTradesForAction", { tradeids: selIds }).done(function (res) {
if (res.IsSuccess) {
OpenTradeSettle(selIds);
}
else {
main.message(res.ErrorMsg);
}
});
//groupVue.tradeIds = selIds;
}
function OpenTradeSettle(selIds) {
let srcurl = "/trade/tradeSettle/?ids=" + selIds.join(',');
main.open("分组了结", srcurl, { area: ['1220px', '845px'], scrollbar: false });
}
function groupTradeCashActionList() {
window.open("tradeGroupActionList", "_blank");
}
function cancelTradeGroup() {
var jgrid = jQuery('#listGrid');
var tradeids = main.GetGridIds(jgrid);
main.confirm("确认取消分组?",
function () {
main.post("/trade_group/cancelTradeGroup", { tradeids: tradeids }).done(function (res) {
reloadtrade();
});
});
}
function startAddtrade() {
main.open("查看交易", "/trade/tradeEdit/0", { area: ['1260px', '100%'], scrollbar: false });
}
function starttradeView(id, tradeType) {
if (tradeType.indexOf("远期") >= 0) {
let srcurl = "/forwardtrade/tradeView/?enid=" + id + "&isFromPositionReport=true";
main.open("查看远期交易", srcurl);
}
else {
let srcurl = "/trade/tradeView/?enid=" + id + "&checkBtn=1";
main.open("查看交易", srcurl, { area: ['1360px', '100%'], scrollbar: false });
}
}
let scrollIndex = 0;
function reloadtrade() {
scrollIndex = $("#gview_listGrid .ui-jqgrid-bdiv").scrollTop();
//重新加载
SearchClick();
}
function confirmAllSelect() {
var selectedIds = jQuery('#listGrid').jqGrid('getGridParam', 'selarrrow');
if (selectedIds.length < 1) {
main.message("请选择需确认的交易");
return;
}
var confirmFunc = function (additionalProcessing) {
var ggrid = jQuery('#listGrid');
var rowIds = ggrid.jqGrid('getGridParam', 'selarrrow');
var ors = [];
for (var i = 0; i < rowIds.length; i++) {
var or = ggrid.getRowData(rowIds[i]).id;
ors.push(or);
}
var pData = { tradeids: ors.join(",") };
pData.IsSkipCheck = true;
if (!main.isEmpty(additionalProcessing)) {
pData.additionalProcessing = additionalProcessing;
}
main.post("/trade/tradeConfirm", pData).done(function (data) {
//错误是打印错误提示
if (!data.success) {
main.message(data.msg);
return;
}
if (generateAmendDoc && data.obj && data.obj.generateChangeSuccess) {
main.downloadFiles(data.obj.url);
}
if (needSendChangeEmail && data.obj && data.obj.generateChangeSuccess) {
main.confirm("确认发送变更确认书?",
function () {
main.post("/trade/SendChangeConfirmEmails", { tradeids: ors.join(",") })
.done(function (data) {
if (data.success) {
main.message("发送成功");
} else {
main.message(data.msg);
}
});
});
}
SearchClick(true);
});
};
///批量结算
main.confirm("确认所有选中交易?", confirmFunc);
}
function uploadTrade() {
main.open("导入场外期权交易", "/trade/tradeUpload", { area: ['800px', '600px'] });
}
function UpdatePostData() {
var listGrid = $('#listGrid');
if (page.tabIndexSelect === page.TradeTabIndexEnum_cwqqjy || page.tabIndexSelect === page.TradeTabIndexEnum_cwlj) {
//场外成交 & 场外了结
listGrid.appendPostData({ UnWindTimes: $("#UnWindTimes").val() });
listGrid.appendPostData({ UnWindType: $("#UnWindType").val() });
listGrid.appendPostData({ UnwindDateStart: $("#DateFromUnwindDate").val() });
listGrid.appendPostData({ UnwindDateEnd: $("#DateToUnwindDate").val() });
}
listGrid.appendPostData({ TradeNumber: $("#TradeNumber").val() });
listGrid.appendPostData({ ContractCode: $("#ContractCode").val() });
listGrid.appendPostData({ AssetIds: !$("#AssetId").val() ? "" : $("#AssetId").val().join(",") })
listGrid.appendPostData({ AssetIdGroupList: $("#GroupId").val() })
listGrid.appendPostData({ ClientIds: !$("#ClientId").val() ? "" : $("#ClientId").val().join(",") });
listGrid.appendPostData({ AssetType: $("#AssetType").val() });
listGrid.appendPostData({ UnderlyingIds: !$("#UnderlyingId").val() ? "" : $("#UnderlyingId").val().join(",") });
listGrid.appendPostData({ ExchangeAccountCodes: $("#ExchangeAccountCode").val() });
listGrid.appendPostData({ TradeTypes: !$("#TradeTypes").val() ? "" : $("#TradeTypes").val().join(",") });
listGrid.appendPostData({ StructureType: $("#StructureType").val() });
listGrid.appendPostData({ TradeDateStart: $("#DateFromTradeDate").val() });
listGrid.appendPostData({ TradeDateEnd: $("#DateToTradeDate").val() });
listGrid.appendPostData({ BuySell: $("#BuySell").val() });
listGrid.appendPostData({ OptionType: $("#OptionType").val() });
listGrid.appendPostData({ StartDateStart: $("#DateFromStartDate").val() });
listGrid.appendPostData({ StartDateEnd: $("#DateToStartDate").val() });
listGrid.appendPostData({ MaturityDateStart: $("#DateFromMaturityDate").val() });
listGrid.appendPostData({ MaturityDateEnd: $("#DateToMaturityDate").val() });
listGrid.appendPostData({ TradePrice: $("#TradePrice").val() });
listGrid.appendPostData({ GroupNames: $("#GroupNames").val() });
listGrid.appendPostData({ VolTypes: $("#VolTypes").val() });
var reqTradeStatus = !$("#TradeStatus").val() ? page.AllTradeStatus : $("#TradeStatus").val().join(",");
if (!reqTradeStatus) {
reqTradeStatus = page.AllTradeStatus;
}
listGrid.appendPostData({ TradeStatus: reqTradeStatus });
listGrid.appendPostData({ OptIds: !$("#OptIds").val() ? "" : $("#OptIds").val().join(",") });
listGrid.appendPostData({ OptDateStart: $("#DateFromOptDate").val() });
listGrid.appendPostData({ OptDateEnd: $("#DateToOptDate").val() });
listGrid.appendPostData({ ValidState: $("#ValidState").val() });
listGrid.appendPostData({
TraderNames: !$("#TraderName").val() ? "" : $("#TraderName").val().join(",")
});
listGrid.appendPostData({ ExerciseDateStart: $("#DateFromExerciseDate").val() });
listGrid.appendPostData({ ExerciseDateEnd: $("#DateToExerciseDate").val() });
//listGrid.appendPostData({ GroupNames: !$("#GroupName").val() ? "" : $("#GroupName").val().join(",") });
if ($("#TradeProjectId").length > 0) {
listGrid.appendPostData({ TradeProjectIds: !$("#TradeProjectId").val() ? "" : $("#TradeProjectId").val().join(",") });
}
listGrid.appendPostData({ Comments: $("#Comments").val() });
listGrid.appendPostData({ ExerciseMode: $("#ExerciseMode").val() });
listGrid.appendPostData({ TabIndex: page.tabIndexSelect });
var isPairTrade = $("#PairTrade").val() === "是" ? true : ($("#PairTrade").val() === "否" ? false : null);
listGrid.appendPostData({ IsPairTrade: isPairTrade });
listGrid.appendPostData({ Strike: $("#Strike").val() });
listGrid.appendPostData({ TagIds: $("#TagIds").val() });
}
function SearchClick(isSearchclick) {
var listGrid = $('#listGrid');
UpdatePostData();
query_data = listGrid.jqGrid('getPostData');
if (typeof isSearchclick !== "undefined" && isSearchclick) {
//点击搜索时默认第一页
listGrid.jqGrid('setGridParam',
{
page: 1
});
}
listGrid.trigger('reloadGrid');
}
function finalSettlement() {
main.post("/clientbalance/finalSettlement").done(function (res) {
});
}
function exportTradeChoose() {
layer.open({
type: 1,
title: "导出交易",
shadeClose: false,
shade: 0.4,
area: ['300px', '240px'],
content: $('#exportTpl').html()
});
}
function Customexport() {
var url = "/trade/Customexport";
main.open("并表数据上报", url,
{
area: ['550px', '60%'],
end: function () {
}
});
}
function ExportClientEodPosition() {
var url = "/trade/ExportClientEodPosition";
main.open("日终数据采集", url,
{
area: ['550px', '60%'],
end: function () {
}
});
}
function getValidVal(val, defaultVal) {
if (!val) {
return defaultVal || "";
}
return val;
}
function getRowText(data, rowModel, template) {
var rowText = "";
for (var i = 0; i < data.length; i++) {
var val = getValidVal(data[i].value);
if (data[i].visible) {
if (typeof data[i].visible === "boolean" && !data[i].visible) {
continue;
}
if (typeof data[i].visible === "function" && !data[i].visible(val, rowModel)) {
continue;
}
}
if (data[i].func && typeof data[i].func === "function") {
val = data[i].func(val, rowModel);
}
rowText += template.template(data[i].name, val);
}
return rowText;
}
function downloadText(text, filename) {
var pom = document.createElement('a');
pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
pom.setAttribute('download', filename);
if (document.createEvent) {
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, true);
pom.dispatchEvent(event);
} else {
pom.click();
}
pom.remove();
}
function exportlist() {
var jgrid = jQuery('#listGrid');
var tradeids = main.GetGridIds(jgrid);
var queryParam = {};
if (tradeids.length > 0) {
queryParam.TradeIds = tradeids.join(",");
} else {
queryParam = $('#listGrid').jqGrid('getPostData');
queryParam.rows = 0;
}
main.post("/trade/ExportTradeAbstractInfo", queryParam, { dataType: 'text' }).done(function (resp) {
downloadText(resp, 'Trade_交易摘要_' + moment().format('YYYYMMDDHHmmss') + '.txt');
}).fail(function () {
main.alert('请求失败');
});
}
function exporttradetype() {
var jgrid = jQuery('#listGrid');
var rowInfo = main.GetGridObjs(jgrid);
var queryParam = {};
if (rowInfo.length > 0) {
queryParam.TradeCashIds = rowInfo.map(O => O.TcId).join(",");
} else {
queryParam = $('#listGrid').jqGrid('getPostData');
queryParam.rows = 0;
}
main.post("/trade/ExportTradeSettlementAbstractInfo", queryParam, { dataType: 'text' }).done(function (resp) {
downloadText(resp, 'Trade_交易摘要_' + moment().format('YYYYMMDDHHmmss') + '.txt');
}).fail(function () {
main.alert('请求失败');
});
}
function previewTradeAbstract() {
var jgrid = jQuery('#listGrid');
var tradeids = main.GetGridIds(jgrid);
var queryParam = {};
if (tradeids.length > 0) {
queryParam.TradeIds = tradeids.join(",");
} else {
queryParam = $('#listGrid').jqGrid('getPostData');
queryParam.rows = 0;
}
main.post("/trade/ExportTradeAbstractInfo", queryParam, { dataType: 'text' }).done(function (resp) {
downloadText(resp, 'Trade_交易摘要_' + moment().format('YYYYMMDDHHmmss') + '.txt');
}).fail(function () {
main.alert('请求失败');
});
}
Array.prototype.contains = function (obj) {
if (this.length === 0) {
return false;
}
for (var i = 0; i < this.length; i++) {
if (this[i] === obj) {
return true;
}
}
return false;
}
function exportTradeMultiFactors() {
var jgrid = jQuery('#listGrid');
UpdatePostData();
var postData = jgrid.jqGrid('getPostData');
postData.VolType = $("#VolTypes").val();
var url = "/trade/DownloadTradeQueryMultiFactors?" + $.param(postData, true);
var ids = jgrid.jqGrid('getGridParam', 'selarrrow');
if (ids.length > 0) {
var TradeIds = ids.join(",");
url = url + "&TradeIds=" + TradeIds + "&onlyTradeIds=true";
}
else {
//
}
downLoadFile(url);
}
function exportUnwindMultiFactors() {
var jgrid = jQuery('#listGrid');
UpdatePostData();
var postData = jgrid.jqGrid('getPostData');
var url = "/trade/UnwindMultiFactorsExport?" + $.param(postData, true);
var ids = jgrid.jqGrid('getGridParam', 'selarrrow');
if (ids.length > 0) {
var TradeCashIds = ids.join(",");
url = url + "&TradeCashIds=" + TradeCashIds;
}
else {
//
}
downLoadFile(url);
}
function downLoadFile(downloadUrlStr) {
window.open(downloadUrlStr);
}
function exportTrade(isExportAllCol) {
if (page.tabIndexSelect === page.TradeTabIndexEnum_cwlj) {
main.GetSortedGridObjs = function (ggrid) {
var rowIds = ggrid.jqGrid('getGridParam', 'selarrrow');
var rowDatas = ggrid.getRowData();
if (main.isEmpty(rowIds)) {
return [];
}
var ors = $.grep(rowDatas,
function (ele, index) {
return rowIds.some(function (rowId) { return rowId === ele.TcId; });
});
ors.forEach(function (item, index) {
if (item !== null) {
Object.keys(item).forEach(function (key) {
const regex = /#=(.*?)#/g;
var result = regex.exec(item[key]);
if (result) {
item[key] = result[1];
}
});
}
});
return ors;
};
}
if (!isExportAllCol) {
var dateTemp = new Date().Format("yyyyMMddhhmmss");
var fileName = "Trade_交易搜索_" + dateTemp;
var toExcelArray = [
{
colName: "分组名",
formatter: "text"
}, {
colName: "交易编号",
formatter: "text"
}, {
colName: "标的代码",
formatter: function (cellValue, options, rowObject) {
if (rowObject.TradeType === "合成价差期权") {
return rowObject.SyntheticUnderlyingTipsInfo;
}
return cellValue;
}
}, {
colName: "项目编号",
formatter: "text"
}];
if (page.ViewTagPermission) {
toExcelArray.push({
colName: "标签值",
formatter: function (cellValue, options, rowObject) {
return rowObject.OutputTags;
}
});
}
//海通交易数据导出判断
if (page.isHaiTong) {
//成交
var tradeDateStart = $("#DateFromTradeDate").val();
var tradeDateEnd = $("#DateToTradeDate").val();
//到期
var exerciseDateStart = $("#DateFromExerciseDate").val();
var exerciseDateEnd = $("#DateToExerciseDate").val();
//了结
var unwindDateStart = $("#DateFromUnwindDate").val();
var unwindDateEnd = $("#DateToUnwindDate").val();
if ((tradeDateStart != "" || tradeDateEnd != "") && exerciseDateStart == "" && exerciseDateEnd == "" && unwindDateStart == "" && unwindDateEnd == "") {
fileName = "成交_" + (tradeDateStart != "" ? tradeDateStart : "") + "_" + (tradeDateEnd != "" ? tradeDateEnd : "");
}
else if (tradeDateStart == "" && tradeDateEnd == "" && (exerciseDateStart != "" || exerciseDateEnd != "") && unwindDateStart == "" && unwindDateEnd == "") {
fileName = "到期_" + (exerciseDateStart != "" ? exerciseDateStart : "") + "_" + (exerciseDateEnd != "" ? exerciseDateEnd : "");
}
else if (tradeDateStart == "" && tradeDateEnd == "" && exerciseDateStart == "" && exerciseDateEnd == "" && (unwindDateStart != "" || unwindDateEnd != "")) {
fileName = "了结_" + (unwindDateStart != "" ? unwindDateStart : "") + "_" + (unwindDateEnd != "" ? unwindDateEnd : "");
}
}
main.toExcel("listGrid", fileName, "xls", null, " ,操作者,操作时间,操作", toExcelArray);
return;
}
}
function downCsv(fileName, exStrr, fileExtension) {
//针对换行符和空格符转换
exStrr = exStrr.replace(/&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp/g, " ").replace(/权&nbsp&nbsp利&nbsp&nbsp金/g, "权 利 金").replace(/<br\/>/g, "\r\n");
if (!fileExtension) {
fileExtension = ".csv";
}
var isIE = (navigator.userAgent.indexOf('MSIE') >= 0);
if (isIE) {
var strHTML = exStrr;
var winSave = window.open();
winSave.document.open("text", "utf-8");
winSave.document.write(strHTML);
winSave.document.execCommand("SaveAs", true, fileName + fileExtension);
winSave.close();
} else {
var mimeType = 'text/plain';
$('#createInvote').attr('download', fileName + fileExtension);
//\uFEFF bom
$('#createInvote').attr('href',
'data:' + mimeType + '; charset=utf-8,\uFEFF' + encodeURIComponent(exStrr));
if (fileExtension === ".txt") {
document.getElementById('createInvote').click();
return;
}
//todo test
$('#createInvote2').attr('download', fileName + fileExtension);
$("#excelTable").html(exStrr);
document.getElementById('createInvote2').click();
//document.getElementById('createInvote').click();
}
}
function unWindSelect(id, tradeType, isReCheck) {
if (tradeType === "商品期货") {
var message = "\"" + tradeType + "\"不允许平仓操作!";
main.confirm(message, function () { });
return;
}
var title = "交易平仓";
if (isReCheck) title = "平仓复核";
//障碍期权特殊处理 敲入时状态必须不为空才为有效 敲出时状态为空为有效
if (tradeType === "障碍期权") {
main.post("/trade/checkBarrierUnwind", { enid: id }).done(function (res) {
if (!res.success) {
main.alert(data.msg);
return;
} else {
var srcurl = "/trade/tradeUnwind/?enid=" + id;
if (isReCheck) srcurl += ("&isrecheck=" + isReCheck);
main.open(title, srcurl, {
area: ["1200px", "570px"],
end: function () {
reloadtrade();
}
});
}
});
} else {
var srcurl = "/trade/tradeUnwind/?enid=" + id;
if (isReCheck) srcurl += ("&isrecheck=" + isReCheck);
main.open(title, srcurl, {
area: ["1200px", "570px"],
end: function () {
reloadtrade();
}
});
}
}
function approvalList() {
var grid = $("#listGrid");
var selRow = grid.jqGrid('getGridParam', 'selarrrow');
if (selRow.length == 0) {
main.message("请勾选要匹配的交易");
return;
}
if (selRow.length > 1) {
main.message("请仅勾选一条交易操作");
return;
}
var trade = grid.getRowData(selRow[0]);
main.open("审批记录", "/trade/InterfaceApprovalRecord?type=1&code=" + trade.TradeNumber, { area: ["1200px", "600px"] });
}
function showcolumnChooser() {
var jgrid = jQuery('#listGrid');
if (page.tabIndexSelect === page.TradeTabIndexEnum_cwqqjy) {
main.showcolumnChooser(jgrid, page.configcolumn_data_cwcj);
}
else if (page.tabIndexSelect === page.TradeTabIndexEnum_cwlj) {
main.showcolumnChooser(jgrid, page.configcolumn_data_cwlj);
}
}
function selAllGrid() {
var checkAll = $("#CheckboxAll").prop("checked");
$("#cb_listGrid").click();
var cbGridClick = $("#cb_listGrid").prop("checked");
if (checkAll !== cbGridClick) {
$("#cb_listGrid").click();
}
}
function GetSelAll() {
var listGrid = $('#listGrid');
return {
IsSelAll: $("#CheckboxAll").prop("checked"), PostData: listGrid.getPostData()
};
}
function getSelectTradeIds() {
return main.GetGridIds($('#listGrid'));
}
function GetGridObjs() {
return main.GetGridObjs($('#listGrid'));
}
function openTradeConfirmList() {
var volType = $("#VolTypes").val();
window.open("tradeConfirmList?volType=" + volType, "_blank");
}
//ESC
$(document).keyup(function (event) {
switch (event.keyCode) {
case 27:
window.parent.layer.closeAll();
$(".jconfirm-open").addClass("hide");//关闭取消分组弹层
}
});
$(".three-wrap-gtja #AssetId").prev().addClass("Bookkeeping-account");
$(".three-wrap-gtja #TraderName").prev().addClass("Trader-account");
$(".morebtn").click(function (e) {
$(".hidediv").toggle();
});
//多次了结列配置
function getColModelOfMultiClose() {
function UnwindPriceFormat(cellValue, options, rowObject) {
if (rowObject.IsUsePremiumRate) {
return rowObject.TcAction === "系统操作-行权费" ?
otcformat.trading.tradeSinglePrice(Math.abs(cellValue))
: otcformat.trading.premiumRateP(Math.abs(rowObject.TcUnwindPricePercent));
}
else {
return otcformat.trading.tradeSinglePrice(Math.abs(cellValue));
}
}
//展开折叠
function expandFormat(cellValue, options, rowObject) {
var hasExpandIcon = rowObject.IsGroup === 1;
if (hasExpandIcon) {
return `<a class="yl-grid-plus" href="#" ondblclick="event.stopPropagation()" onclick="toggleTcIdExpand('${options.rowId}')"><i class="fa fa-plus"></i></a>`;
}
return "";
}
var col = [
{ name: 'rowFlag', label: ' ', width: 30, optionHide: true, formatter: expandFormat, align: 'center', sortable: false },
{ name: 'TcId', hidden: true, optionHide: true, key: true },
{ name: 'id', hidden: true, optionHide: true },
{ name: 'IsMoneynessOption', hidden: true, optionHide: true, sortable: false },
{ name: 'EncryptId', hidden: true, optionHide: true, sortable: false },
{ name: 'TradeNumber', label: '交易编号', width: 240, sortable: false },
{ name: 'TraderName', label: '交易员', width: 120, sortable: false },
{ name: 'AssetBookName', label: '簿记账户', width: 120, sortable: false },
{ name: 'ClientName', label: '交易对手方', width: 160, sortable: false },
{ name: 'TradeDate', label: '成交日期', width: 90, formatter: 'date', sortable: true },
{ name: 'ExerciseDate', label: '到期日期', width: 90, formatter: 'date', sortable: true },
{ name: 'BuySell', label: '买卖方向', width: 70, sortable: false },
{ name: 'ExerciseMode', label: '行权方式', width: 90, sortable: false },
{
name: 'TradeType', label: '结构类型', width: 70, sortable: false,
formatter: function (cellvalue, options, rowObject) {
return rowObject.StructureType && rowObject.IsGroup != 2 ? rowObject.StructureType : rowObject.TradeType;
}
},
{ name: 'OptionType', label: '看涨看跌', width: 70, sortable: false },
{ name: 'UnderlyingAssetName', label: '标的名称', width: 95, sortable: false },
{ name: 'UnderlyingCode', label: '标的代码', width: 60, sortable: false },
{ name: 'UnderlyingVariety', label: '标的品种', width: 60, align: 'center', sortable: false, hidden: !page.showUnderlyingVariety, optionHide: !page.showUnderlyingVariety },
{
name: 'SpotPrice', label: '期初标的价格', width: 85, sortable: true, formatter: otcformat.trading.umprice
},
{ name: 'Strike', label: '执行价格', width: 90, sortable: true, formatter: StrikeFormatter },
{ name: 'TradeSinglePrice', label: '权利金(成交)', width: 90, sortable: true, formatter: TradeSinglePriceFormat },
{
name: 'TradeAmount', label: '成交数量', width: 70, sortable: false,
formatter: function (cellvalue, options, rowObject) {
return otcformat.trading.notional(tradeHelper.getTradeAmountV(rowObject));
}
},
{
name: 'TradeOriginalAmount', label: '有效成交数量', width: 96, sortable: false, formatter: otcformat.trading.notional
},
{ name: 'KnockInOutStatusObservation', label: '敲入敲出状态', width: 70, sortable: false },
{ name: 'TcSequence', label: '了结序号', width: 70, sortable: false },
{ name: 'TcAction', label: '了结方式', width: 70, sortable: false },
{ name: 'TcValueDate', label: '了结日期', width: 70, sortable: true, formatter: 'date' },
{
name: 'TcFinalPrice', label: '了结标的价格', width: 70, sortable: true, formatter: otcformat.trading.umprice
},
{ name: 'TcUnwindPrice', label: '权利金(了结)', width: 70, sortable: true, formatter: UnwindPriceFormat },
{
name: 'TcUnwindTradeAmount', label: '了结数量', width: 70, sortable: true, formatter: otcformat.trading.notional
},
{ name: 'TcAmount', label: '了结金额', width: 70, sortable: true, formatter: UnWindFeeFormat },
{ name: 'TcTradePrice', label: '成交金额', width: 70, sortable: false, formatter: UnWindFeeFormat },
{ name: 'WinLoss', label: '实现盈亏', width: 70, sortable: false, formatter: UnWindFeeFormat },
{ name: 'SyntheticUnderlyingTipsInfo', hidden: true, optionHide: true, sortable: false }
];
col.push({
name: 'Tags',
label: '标签值',
index: 'Tags',
width: 150,
align: 'left',
sortable: false,
formatter: function (cellvalue, options, rowObject) {
var html = '<div class="tag-context">';
var tagNames = "";
if (rowObject.Tags != null && rowObject.Tags.length > 0) {
for (var i = 0; i < rowObject.Tags.length; i++) {
if (i == rowObject.Tags.length - 1) {
tagNames += "[" + rowObject.Tags[i].Name + "]";
} else {
tagNames += "[" + rowObject.Tags[i].Name + "],";
}
}
if (rowObject.Tags.length > 2) {
for (var i = 0; i < 2; i++) {
html += '<span class="tag-item" data-id="' + rowObject.Tags[i].Id + '" data-name="' + rowObject.Tags[i].Name + '"><span class="tag-text" data-value="' + rowObject.Tags[i].Id + '">' + rowObject.Tags[i].Name + '</span></span>';
}
html += '<span class="tag-add" title="' + tagNames + '">...</span>';
} else {
for (var i = 0; i < rowObject.Tags.length; i++) {
html += '<span class="tag-item" data-id="' + rowObject.Tags[i].Id + '" data-name="' + rowObject.Tags[i].Name + '"><span class="tag-text" data-value="' + rowObject.Tags[i].Id + '">' + rowObject.Tags[i].Name + '</span></span>';
}
}
}
html += '</div>';
return html;
}
});
return tradeHelper.getAmountToNotional(col);
}
//获取列配置
function getColModel() {
switch (page.TabIndex) {
case page.TradeTabIndexEnum_cwlj:
return getColModelOfMultiClose();
default: return getColModelDefault();
}
}
//用于layer.closeMe
window.reloadData = reloadtrade;
var groupVue = new Vue({
el: '#modalGroupTradeCashSave',
data: {
tradeIds: [],
SettleType: "0",
trade: page.trade,
tradeCash: page.tradeCash,
childTradeCashs: [],
},
computed: {
inputFormatStrike() {
let fmt = {};
if (this.trade.IsMoneynessOption === '是') {
fmt.append = '%';
fmt.negative = false;
fmt.precision = consNumberFormat.umpriceP.precision;
} else {
fmt.append = '';
fmt.negative = true;
fmt.precision = pricingFormat.umprice.precision;
}
return fmt;
},
},
methods: {
closeModal: function () {
$('#modalGroupTradeCashSave').modal('hide');
},
saveGroupTradeCash: function () {
var thisobj = this;
if (thisobj.tradeCash.ValueDate > thisobj.trade.ExerciseDate) {
main.message("了结日期不能在交易到期日之后");
return false;
}
if ((this.trade.IsUsePremiumRate == false) && this.tradeCash.TradeAmount < this.tradeCash.UnwindTradeAmount) {
main.message("了结数量不能大于持仓数量");
return false;
}
if ((this.trade.IsUsePremiumRate == true) && this.tradeCash.TradeAmount == 0) {
main.message("持仓数量为0,无法按比例换算");
return false;
}
if ((this.trade.IsUsePremiumRate == true) && this.tradeCash.TradeAmount < this.tradeCash.UnwindPercentRate / 100) {
main.message("了结比例不能大于持仓数量比例");
return false;
}
main.post("/trade_cash/SaveGroupTradeCash", { trade_cash: thisobj.tradeCash, tradeIds: this.tradeIds, childTradeCashs: thisobj.childTradeCashs }).done(function (resp) {
$('#modalGroupTradeCashSave').modal('hide');
window.open("tradeGroupActionList?TradeNumber=" + thisobj.trade.TradeNumber, "_blank");
});
},
changeAmount: function () {
let amount = this.tradeCash.Amount;
let childTotalTradeAmount = 0;
this.childTradeCashs.forEach(function (dom, index) {
childTotalTradeAmount += parseFloat(dom.UnwindTradeAmount);
})
let singleAmount = amount / childTotalTradeAmount;
this.childTradeCashs.forEach(function (dom, index) {
dom.Amount = otcformat.trading.tradePrice(dom.UnwindTradeAmount * singleAmount);
})
},
changeUnwindPercentRate: function () {
if ((this.trade.IsUsePremiumRate == true) && this.tradeCash.TradeAmount == 0) {
main.message("持仓数量为0,无法按比例换算");
return false;
}
if ((this.trade.IsUsePremiumRate == true) && this.tradeCash.TradeAmount < this.tradeCash.UnwindPercentRate / 100) {
main.message("了结比例不能大于持仓数量比例");
return false;
}
let unwindPercentRate = this.tradeCash.UnwindPercentRate / 100;
this.childTradeCashs.forEach(function (dom, index) {
dom.UnwindStockEqvNotional = dom.OriginalStockEqvNotional * unwindPercentRate;
dom.UnwindTradeAmount = otcformat.trading.notional(dom.TradeOriginalAmount * unwindPercentRate);
})
},
changeUnwindTradeAmount: function () {
if ((this.trade.IsUsePremiumRate == false) && this.tradeCash.TradeAmount < this.tradeCash.UnwindTradeAmount) {
main.message("了结数量不能大于持仓数量");
return false;
}
let unwindPercentRate = this.tradeCash.UnwindTradeAmount / this.trade.TradeOriginalAmount;
this.childTradeCashs.forEach(function (dom, index) {
dom.UnwindTradeAmount = dom.TradeOriginalAmount * unwindPercentRate;
dom.UnwindStockEqvNotional = otcformat.trading.StockEqvNotional(dom.OriginalStockEqvNotional * unwindPercentRate);
})
},
changeIsUsePremiumRate: function () {
if (this.trade.IsUsePremiumRate == false) {
this.changeUnwindTradeAmount();
} else {
this.changeUnwindPercentRate();
}
},
changeChildUnwindTradeAmount: function (dom) {
dom.UnwindStockEqvNotional = otcformat.trading.StockEqvNotional(dom.OriginalStockEqvNotional * dom.UnwindTradeAmount / dom.TradeOriginalAmount);
},
changeChildUnwindStockEqvNotional: function (dom) {
dom.UnwindTradeAmount = otcformat.trading.notional(dom.UnwindStockEqvNotional / dom.OriginalStockEqvNotional * dom.TradeOriginalAmount);
},
changeChildAmount: function () {
let sumAmount = 0;
this.childTradeCashs.forEach(function (dom, index) {
sumAmount += parseFloat(otcformat.trading.tradePrice(dom.Amount));
})
this.tradeCash.Amount = sumAmount;
},
starttradeView: function (EncryptId) {
var srcurl = "/trade/TradeView/?enid=" + EncryptId + "&isFromPositionReport=true";
main.open("查看交易", srcurl);
},
refreshUnderlyingPrice: function () {
var thisObj = this;
main.post("/underlying_manager/GetUnderlyingPriceByCode",
{ code: thisObj.trade.UnderlyingCode, tradeId: thisObj.trade.id, valuedate: thisObj.tradeCash.ValueDate }).done(function (res) {
thisObj.tradeCash.FinalPrice = res.obj;
});
},
exchangeToUnwindStockEqvNotional: function () {
this.tradeCash.IsUnwindStockEqvNotional = true;
if (this.tradeCash.UnwindType !== "全部平仓") {
this.tradeCash.UnwindStockEqvNotional = "";
this.tradeCash.UnwindPercentRate = "";
}
},
exchangeToUnwindPercentRate: function () {
this.tradeCash.IsUnwindStockEqvNotional = false;
if (this.tradeCash.UnwindType !== "全部平仓") {
this.tradeCash.UnwindStockEqvNotional = "";
this.tradeCash.UnwindPercentRate = "";
}
},
init: function () {
}
},
components: {
'vue-datepicker': FastVue.vueDatePicker(),
'vue-number-input': FastVue.vueNumberInput()
},
});
function BatchSetTradeTag() {
var jgrid = jQuery('#listGrid');
var selIds = main.GetGridIds(jgrid);
if (selIds.length === 0) { main.message("请选择至少一个交易"); return; }
let srcurl = "/Tag/BatchSetTradeTag/?ids=" + selIds.join(',');
main.open("批量设置标签", srcurl, { area: ['778px', '257px'], scrollbar: false });
}