const ConsTradeStatus = { 已执行: '已执行', 已到期: '已到期', 已平仓: '已平仓' }; const TradeTabIndexEnum = { 今日成交: 1, 今日提前终止: 2, 今日到期: 3, 明日到期: 4, 全部: 13 }; const g_ConfirmedState = ["已到期", "已执行", "已平仓"]; var hideObj = { clientWidth: 160 }; var i = 0; function GetGridColModes() { return [ { name: 'id', label: 'id', index: 'id', sortIndex: i++, width: 70, align: 'center', hidden: true, optionHide: true }, { name: 'EncryptId', label: 'EncryptId', index: 'EncryptId', sortIndex: i++, width: 70, align: 'center', hidden: true, optionHide: true }, { name: 'UnderlyingId', label: 'UnderlyingId', index: 'UnderlyingId', sortIndex: i++, width: 70, align: 'center', hidden: true, optionHide: true }, { name: 'IsMoneynessOption', label: 'IsMoneynessOption', index: 'IsMoneynessOption', sortIndex: i++, width: 70, align: 'center', hidden: true, optionHide: true } , { name: 'OptDate', label: '操作时间', index: 'OptDate', sortIndex: i++, width: 160, align: 'center', formatter: 'datetime' }, { name: 'OptName', label: '操作者', index: 'OptName', sortIndex: i++, width: 70, align: 'center' }, { name: 'CreatorName', label: '创建者', index: 'CreatorName', sortIndex: i++, width: 70, align: 'center' }, { name: 'Comments', label: '备注', index: 'Comments', sortIndex: i++, width: 70, align: 'center' }, { name: 'GroupName', label: '分组名', index: 'GroupName', hidden: true, optionhide: true, sortIndex: i++, width: 60 } , { name: 'TradeType', label: '结构类型', index: 'TradeType', sortIndex: i++, width: 70, align: 'center', formatter: function (cellvalue, options, rowObject) { return rowObject.StructureType && rowObject.IsGroup != 2 ? rowObject.StructureType : rowObject.TradeType; } }, { name: 'AssetBookName', label: '簿记账户', index: 'AssetBookName', sortIndex: i++, width: 110, align: 'center' }, { name: 'TraderName', label: '交易员', index: 'TraderName', sortIndex: i++, width: 70, align: 'center' }, { name: 'TradeStatus', label: '交易状态', index: 'TradeStatus', sortIndex: i++, width: 70, align: 'center' }, { name: 'TradeNumber', label: '交易编号', index: 'TradeNumber', sortIndex: i++, width: 150, align: 'center' }, { name: 'ClientName', label: '客户名称', index: 'ClientName', sortIndex: i++, width: hideObj.clientWidth, align: 'center' }, { name: 'BuySell', label: '交易方向', index: 'BuySell', sortIndex: i++, width: 70, align: 'center' }, { name: 'TradeDate', label: '交易日期', index: 'TradeDate', sortIndex: i++, width: 90, align: 'center', formatter: 'date' }, { name: 'StartDate', label: '开始日期', hidden: true, index: 'StartDate', sortIndex: i++, width: 90, align: 'center', formatter: 'date' }, { name: 'ExerciseDate', label: '到期日期', index: 'ExerciseDate', sortIndex: i++, width: 90, align: 'center', formatter: 'date' }, { name: 'UnderlyingCode', label: '标的代码', index: 'UnderlyingCode', sortIndex: i++, width: 60, align: 'center' }, { name: 'InitialSpotPrice', label: '期初标的价格', index: 'InitialSpotPrice', hidden: true, optionhide: true, sortIndex: i++, width: 85, align: 'center', formatter: DoubleFormat }, { name: 'MaturityDate', label: '标的到期日', index: 'MaturityDate', sortIndex: i++, width: 90, align: 'center', //formatter: 'date' //如果标的资产类型为Stock,则将该列值置空 formatter: function (cellValue, options, rowObject) { if (rowObject.UnderlyingInstrumentType === "Stock") return ""; else { if (rowObject.MaturityDate == null) return ""; else return (rowObject.MaturityDate + "").substring(0, 10); } } }, { name: 'ExerciseModeCn', label: '行权方式', hidden: true, index: 'ExerciseModeCn', sortIndex: i++, width: 90, align: 'center' }, { name: 'OptionType', label: '多空方向', index: 'OptionType', sortIndex: i++, width: 70, align: 'center', formatter: function (cellvalue, options, rowObject) { if (rowObject.OptionType != "") { return rowObject.OptionType == "看涨" ? "多头" : "空头"; } } }, { name: 'Strike', label: '交割价格', index: 'Strike', sortIndex: i++, width: 90, align: 'center', formatter: StrikeFormatter }, { name: 'TradeOriginalAmount', label: '交易数量', index: 'TradeOriginalAmount', sortIndex: i++, width: 70, align: 'center', sortable: false, formatter: tradeHelper.getNotionalFormatByDouble }, { name: 'trade_forward.OpenCommission', label: '开仓费用', index: 'OpenCommission', sortIndex: i++, width: 90, align: 'center', sortable: false, formatter: DoubleFormat }, { name: 'OriginalStockEqvNotional', label: '名义本金', sortable: false, sortIndex: i++, width: 70, align: 'center', formatter: otcformat.trading.StockEqvNotional }, { name: 'TotalOpenCommission', label: '开仓总费用', sortable: false, index: 'TotalOpenCommission', sortIndex: i++, width: 90, align: 'center', formatter: function (cellvalue, options, rowObject) { if (!rowObject.TradePrice) { return "0.00"; } var num = rowObject.TradePrice; return num.toFixed(2); } }, { name: 'FinalPrice', label: '期末价格', index: 'FinalPrice', sortIndex: i++, width: 85, align: 'center', hidden: true, formatter: DoubleFormat }, { name: 'PairTrade', label: 'PairTrade', index: 'PairTrade', sortIndex: i++, align: 'center', hidden: true, optionHide: true }, { name: 'SyntheticUnderlyingTipsInfo', label: 'SyntheticUnderlyingTipsInfo', index: 'SyntheticUnderlyingTipsInfo', sortIndex: i++, align: 'center', hidden: true, optionHide: true } ]; } function StrikeFormatter(cellValue, options, rowObject) { var num = new Number(rowObject.Strike); return num.toFixed(2); } function DoubleFormat(cellValue, options, rowObject) { return !cellValue ? "0.00" : cellValue.toFixed(2); } $(function () { $("#Btn_BatchExpire").hide(); $("#tab1NotShow").hide(); $("#tab3_4NotShow").show(); var PostData = {}; PostData.ValidState = $("#ValidState").val(); PostData.TabIndex = tabIndexSelect; var tradetype = ["远期"]; PostData.TradeTypes = tradetype; $(".datepicker").datepicker({ changeMonth: true, changeYear: true, showButtonPanel: true, showOtherMonths: true, selectOtherMonths: true }); colModelGrid = GetGridColModes(); grid = jQuery('#listGrid').jqGrid({ url: "/ForwardTrade/tradeOnValueDateQuery", datatype: 'json', multiselect: true, height: 'auto', width: '96%', autowidth: false, shrinkToFit: false, viewrecords: true, jsonReader: { repeatitems: false }, caption: '', mtype: 'POST', postData: PostData, colModel: colModelGrid, pager: jQuery('#pagerGrid'), pagerpos: 'left', ondblClickRow: rowdblclick, rowNum: 20, rowList: [20, 30, 50, 200, 10000], footerrow: false, loadComplete: gridComplete, grouping: true }); function keyEnter(event) { try { var e = event || window.event || {}; if (e.keyCode === 13) { SearchClick(true); } } catch (e) { // } } document.onkeydown = keyEnter; let underlyingCtrl = new tradeHelper.UnderlyingSelectCtrl('#UnderlyingId') .setFlag(tradeHelper.UnderlyingSelectFlag.OtcForward); tabSelect(tabIndexSelect); showTabTotalCount(); $(window).resize(); }); function showTabTotalCount() { main.post("/ForwardTrade/tradeCountsOnValueDateQuery", null, { waitMe: false }).done(function (data) { for (var i in data) { $(`#tab${i}`).find("a").attr("title", `总数${data[i]}笔`); } $(".selftooltip").tooltip({ html: true, show: 50000, trigger: "hover" }); }); } function rowdblclick(rowid) { var rowData = $(this).getRowData(rowid); starttradeView(rowData.EncryptId, rowData.TradeType); } function gridComplete() { var jgrid = $(this); var rowIds = jgrid.jqGrid('getDataIDs'); var newHeight = $(window).height() - 400; $(".ui-jqgrid .ui-jqgrid-bdiv").css("cssText", "height: " + newHeight + "px!important;"); $('.ui-jqgrid-bdiv', '#gbox_listGrid').floatingScroll(); $(".selftooltip").tooltip({ html: true, show: 50000, trigger: "hover" }); var columnKey = ""; if (tabIndexSelect === TradeTabIndexEnum.今日成交) { columnKey = page.configcolumn_data.当日成交; } else if (tabIndexSelect === TradeTabIndexEnum.今日到期) { columnKey = page.configcolumn_data.今日到期; } else if (tabIndexSelect === TradeTabIndexEnum.明日到期) { columnKey = page.configcolumn_data.明日到期; } main.setcolumnChooser(jgrid, columnKey); } function downloadFiles(files) { if (files instanceof Array) { if (files.length <= 0) { return; } $.each(files, function (index, val) { val && setTimeout(function () { window.open(val); }, 500); }); } else { files && window.open(files); } } function confirmAllSelect() { var selectedIds = $('#listGrid').jqGrid('getGridParam', 'selarrrow'); if (selectedIds.length < 1) { return main.message("请选择需确认的交易"); } var confirmFunc = function (additionalProcessing, id, useRecall) { var ors = []; if (id) { ors.push(id); } else { for (var i = 0; i < selectedIds.length; i++) { ors.push(selectedIds[i]); } } let pData = { tradeIds: ors, additionalProcessing: additionalProcessing }; var ajaxopt = { type: "Post", url: "/ForwardTrade/tradeConfirm", data: pData, success: function (data) { //错误是打印错误提示 if (!data.success) { main.alert(data.msg + "\r\n批量操作已终止"); if (reloadtrade) { reloadtrade(); } return; } if (data.obj && data.obj.proccessType === "AdditionalProcessing") { if (data.obj.TrialDataId) { var layerSetting = { type: 2, title: "提示", shadeClose: false, shade: 0.4, area: ['800px', '500px'], content: "/trade/showQuotaTrial?id=" + data.obj.TrialDataId, yes: function (index) { var obj = window["layui-layer-iframe" + index].page; if (obj.IsTF) { if (obj.Data.Remark && obj.Data.Remark.length > 0) { main.post("/trade/SaveQuotaTrial", obj.Data, { async: false }).done(function (res) { if (!res || !res.success) { main.message(res.msg); } }); confirmFunc("LackOfMoney", obj.Data.TradeId, true); } else { main.message("必须填写说明内容,才可以录入交易"); return; } } else { if (obj.Data.Remark && obj.Data.Remark.length > 0) { main.post("/trade/SaveQuotaTrial", obj.Data, { async: false }).done(function (res) { if (!res || !res.success) { main.message(res.msg); } }); } confirmFunc("LackOfMoney", obj.Data.TradeId, true); } (parent || window).layer.closeAll(); }, cancel: function () { if (window.parent && window.parent.reloadtrade) { window.parent.reloadtrade(); } (parent || window).layer.closeAll(); } }; if (data.obj.type === "LackOfMoney") { layerSetting.btn = [page.buttonStr, '取消']; } // 只展示“资金状况”的情况 if (data.obj.typecode === "FundStatus") { layerSetting.btn = ["确认", '取消']; } layer.open(layerSetting); } else { if (data.obj.message) { main.message(data.obj.message); } } return; } if (useRecall) { confirmFunc(); return; } else { main.message(data.msg); } if (generateAmendDoc && data.obj && data.obj.generateChangeSuccess) { main.downloadFiles(data.obj.url); } if (needSendChangeEmail && data.obj && data.obj.generateChangeSuccess) { main.confirm("确认发送变更确认书?", function () { main.post("/ForwardTrade/SendChangeConfirmEmails", { tradeIds: tradeIds }) .done(function (data) { if (data.success) { main.message("发送成功"); } else { main.message(data.msg); } }); }); } SearchClick(true); }, beforeSend: function () { main.waitMe(true); }, complete: function () { main.waitMe(false); }, error: function (msg) { main.message(msg); } }; $.ajax(ajaxopt); } ///批量结算 main.confirm("确认所有选中交易?", confirmFunc); } function starttradeView(id, tradeType) { main.open("查看交易", "/forwardtrade/tradeView/?enid={0}".template(id)); } function reloadtrade() { //重新加载 SearchClick(); $('#modal-edittrade').modal('hide'); } function setGridPostData() { var listGrid = $('#listGrid'); listGrid.appendPostData({ TradeNumber: $("#TradeNumber").val() }); listGrid.appendPostData({ ClientIds: $("#ClientId").val() }); listGrid.appendPostData({ AssetIds: $("#AssetId").val() }); listGrid.appendPostData({ AssetIdGroupList: $("#GroupId").val() }); listGrid.appendPostData({ TraderIds: $("#TraderId").val() }); listGrid.appendPostData({ UnderlyingIds: $("#UnderlyingId").val() }); listGrid.appendPostData({ BuySell: $("#BuySell").val() }); listGrid.appendPostData({ OptionType: $("#OptionType").val() }); listGrid.appendPostData({ TradeStatus: $("#TradeStatus").val() }); listGrid.appendPostData({ TabIndex: tabIndexSelect }); listGrid.appendPostData({ TradeTypes: ["远期"] }); } function SearchClick(isSearchclick) { setGridPostData(); if (isSearchclick) { //点击搜索时默认第一页 $('#listGrid').jqGrid('setGridParam', { page: 1 }); } main.isSearching = true; $('#listGrid').trigger('reloadGrid'); } function showcolumnChooser() { var jgrid = jQuery('#listGrid'); var columnKey = ""; if (tabIndexSelect === TradeTabIndexEnum.今日成交) { columnKey = page.configcolumn_data.当日成交; } else if (tabIndexSelect === TradeTabIndexEnum.今日到期) { columnKey = page.configcolumn_data.今日到期; } else if (tabIndexSelect === TradeTabIndexEnum.明日到期) { columnKey = page.configcolumn_data.明日到期; } main.showcolumnChooser(jgrid, columnKey); } function exportTrade() { var dateTemp = new Date().Format("yyyyMMddhhmmss"); var tabName = ""; if (tabIndexSelect === TradeTabIndexEnum.今日到期) { tabName = "今日到期"; } else if (tabIndexSelect === TradeTabIndexEnum.今日终止) { tabName = "今日提前终止"; } else if (tabIndexSelect === TradeTabIndexEnum.明日到期) { tabName = "明日到期"; } else { tabName = "今日成交"; } var fileName = "Trade_" + tabName + "_" + dateTemp; main.toExcel("listGrid", fileName, "xls", null, "操作者,操作时间,操作"); } function downCsv(fileName, exStrr, fileExtension) { 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)); document.getElementById('createInvote').click(); } } function tabSelect(tabIndex) { $("#myTab").children().removeClass("active"); $("#tab" + tabIndex).addClass("active"); tabIndexSelect = tabIndex; $("#Btn_BatchExpire").hide(); $("#tab1NotShow").hide(); $("#tab3_4NotShow").show(); if (tabIndex === TradeTabIndexEnum.今日到期 || tabIndex === TradeTabIndexEnum.明日到期) { if (tabIndex === TradeTabIndexEnum.今日到期) { $("#Btn_BatchExpire").show(); } $("#DateFromExerciseDate").prop("disabled", true); $("#DateToExerciseDate").prop("disabled", true); } else { $("#DateFromExerciseDate").prop("disabled", false); $("#DateToExerciseDate").prop("disabled", false); } if (tabIndex === TradeTabIndexEnum.今日终止) { $("#tab1NotShow").show(); $("#tab3_4NotShow").show(); } else if (tabIndex === TradeTabIndexEnum.今日到期 || tabIndex === TradeTabIndexEnum.明日到期) { $("#tab1NotShow").show(); $("#tab3_4NotShow").hide(); } SearchClick(true); }