var g_grid = {}; var query_data = {}; $(function () { var PostData = {}; if (observationDate) { $("#DateValueDate").val(observationDate); PostData.ValueDate = observationDate; } if (settleDate) { $("#DateFromExerciseDate").val(settleDate); $("#DateToExerciseDate").val(settleDate); PostData.ExerciseDateStart = settleDate; PostData.ExerciseDateEnd = settleDate; } $(".datepicker").datepicker({ changeMonth: true, changeYear: true, showButtonPanel: true, showOtherMonths: true, selectOtherMonths: true }); grid = jQuery('#listGrid').jqGrid({ cmTemplate: { width: 80, align: 'center', sortable: false }, url: '/swapTrade2/TradeQuery', datatype: 'json', multiselect: true, height: 'auto', width: '96%', autowidth: false, shrinkToFit: false, viewrecords: true, jsonReader: { repeatitems: false }, caption: '', mtype: 'POST', postData: PostData, afterInsertRow: AfterInsertRow, onSelectRow: rowclick, ondblClickRow: rowdblclick, colModel: colModelGrid, pager: jQuery('#pagerGrid'), pagerpos: 'left', rowNum: 20, rowList: [20, 30, 50, 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; $("#CheckboxAll").click(function () { //setall selAllGrid(); }); }); var hideObj = { clientWidth: 160 }; var i = 0; var getColModelGrid = function () { var col = [ { 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: 'OptDate', label: '操作时间', index: 'OptDate', sortIndex: i++, width: 160, align: 'center', sortable: true, formatter: 'datetime' }, { name: 'OptName', label: '操作者', index: 'OptName', sortIndex: i++, width: 70, align: 'center' }, { name: 'Comments', label: '备注', index: 'Comments', sortIndex: i++, width: 110, align: 'center', formatter: function (cellValue, options, rowObject) { if (cellValue && cellValue.startsWith("http://")) { return "{0}".template(cellValue); } return cellValue == null ? "" : cellValue; } } , { name: 'AssetBookName', label: '簿记账户', index: 'AssetBookName', sortIndex: i++, width: 110, align: 'center' }, { name: 'TradeStatus', label: '交易状态', index: 'TradeStatus', sortIndex: i++, width: 70, align: 'center' }, { name: 'TradeNumber', label: '交易编号', index: 'TradeNumber', sortIndex: i++, width: 240, align: 'center', formatter: ShowStructFormater }, { name: 'ContractCode', label: '确认书编号', index: 'ContractCode', sortIndex: i++, width: 240, align: 'center', hidden: true, formatter: ShowStructFormater }, { name: 'TradeDate', label: '交易日期', index: 'TradeDate', sortIndex: i++, width: 90, align: 'center', sortable: true, formatter: 'date' }, { name: 'StartDate', label: '开始日期', index: 'StartDate', sortIndex: i++, width: 90, align: 'center', sortable: true, formatter: 'date' }, { name: 'ExerciseDate', label: '到期日期', index: 'ExerciseDate', sortIndex: i++, width: 90, align: 'center', sortable: true, formatter: 'date' }, { name: 'TradeType', label: '结构类型', index: 'TradeType', sortIndex: i++, width: 70, align: 'center' }, { name: 'StructureType', label: '互换类型', index: 'StructureType', sortIndex: i++, width: 160, align: 'center' }, { name: 'UnderlyingCode', label: '标的代码', index: 'UnderlyingCode', sortIndex: i++, width: 90, align: 'center' }, { name: 'OriginalStockEqvNotional', label: '名义本金', index: 'OriginalStockEqvNotional', sortIndex: i++, width: 100, align: 'center', sortable: true, formatter: otcformat.trading.StockEqvNotional }, { name: 'ClientName', label: '交易对手方', index: 'ClientName', sortIndex: i++, width: hideObj.clientWidth, align: 'center' }, { name: 'TradeAmount', label: '持仓数量', width: 100, sortIndex: i++, align: 'center', sortable: false, formatter: otcformat.trading.notional }, { name: 'TraderName', label: '交易员', index: 'TraderName', sortIndex: i++, width: 100, align: 'center' } ]; return col; }; var colModelGrid = getColModelGrid(); function ShowStructFormater(cellValue, options, rowObject) { return cellValue || ''; } 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 exportUnwindSwapTrade() { var url = "/swaptrade/UnwindSwapTradeExport"; downLoadFile(url); } function downLoadFile(downloadUrlStr) { window.open(downloadUrlStr); } function gridComplete() { var jgrid = $(this); var rowIds = jgrid.jqGrid('getDataIDs'); for (var i = 0; i < rowIds.length; i++) { var rowId = rowIds[i]; var rowdata = jgrid.getRowData(rowId); if (rowdata.ExerciseDate == page.systemDate && (rowdata.TradeStatus != "已平仓" && rowdata.TradeStatus != "已到期")) { $('#' + rowIds[i]).addClass("ExerciseDateBg"); } if (rowdata.TradeStatus == "已平仓" && rowdata.UnwindDate == page.systemDate) { $('#' + rowIds[i]).addClass("UnwindTradeBg"); } } main.setcolumnChooser(jgrid, page.configcolumn_data_hhjyss); $(".selftooltip").tooltip({ html: true, show: 50000, trigger: "hover" }); var newHeight = $(window).height() - 430; $(".ui-jqgrid .ui-jqgrid-bdiv").css("cssText", "height: " + newHeight + "px!important;"); $('.ui-jqgrid-bdiv', '#gbox_listGrid').floatingScroll(); } function customButton(cellValue, options, rowObject) { var imageHtml = ""; return imageHtml; } function rowdblclick(rowid) { var rowData = $(this).getRowData(rowid); if (rowData.EncryptId) { starttradeView(rowData.EncryptId); } } function startAddtrade() { main.open("新增互换交易", "/swapTrade2/TradeEdit/0", {area:["95%",'90%']}); } function starttradeView(id) { var srcurl = "/swapTrade2/TradeView/?enid=" + id + "&checkBtn=1"; main.open("查看交易", srcurl); } function reloadtrade() { //重新加载 SearchClick(); } function confirmAllSelect() { var selectedIds = jQuery('#listGrid').jqGrid('getGridParam', 'selarrrow'); if (selectedIds.length < 1) { main.message("请选择需确认的交易"); return; } var confirmFunc = function (additionalProcessing, id, useRecall) { var ggrid = jQuery('#listGrid'); var rowIds = ggrid.jqGrid('getGridParam', 'selarrrow'); var ors = []; if (id) { ors.push(id); } else { for (var i = 0; i < rowIds.length; i++) { var or = ggrid.getRowData(rowIds[i]).id; ors.push(or); } } var pData = { tradeids: ors.join(",") }; // R4:不再硬编码 IsSkipCheck=true 静默跳过资金校验——普通确认走校验, // 资金不足时由 LackOfMoney 弹窗走显式特批(additionalProcessing)链路 if (!main.isEmpty(additionalProcessing)) { pData.additionalProcessing = additionalProcessing; } main.post("/trade/tradeConfirm", pData).done(function (data) { //错误是打印错误提示 if (!data.success) { main.message(data.msg); return; } //R4(BUG-04 修正):资金不足时后端返回 success=true + proccessType="AdditionalProcessing"(交易实际未确认), //必须弹额度试算特批窗口并按弹窗结果重提(复用确认列表页 swapTradeConfirmList.js 逻辑),不能静默刷新 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 = ["交易特批", '取消']; } // 只展示"资金状况"的情况 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; } main.message(data.msg); SearchClick(true); }); }; ///批量结算 main.confirm("确认所有选中交易?", confirmFunc); } function importTrade() { main.open("互换交易导入", "/SwapTrade/SwapTradeUpload", { area: ['800px', '600px'] }); } function downTemplate() { if (page.company == "山西") { window.open("../App_Docs/导入模板/互换交易数据导入模板.xlsx"); } } function SearchClick(isSearchclick) { var listGrid = $('#listGrid'); listGrid.appendPostData({ TradeNumber: $("#TradeNumber").val() }); listGrid.appendPostData({ AssetIds: $("#AssetId").val() }); listGrid.appendPostData({ AssetIdGroupList: $("#GroupId").val() }); listGrid.appendPostData({ ClientIds: $("#ClientId").val() }); listGrid.appendPostData({ TradeDateStart: $("#DateFromTradeDate").val() }); listGrid.appendPostData({ TradeDateEnd: $("#DateToTradeDate").val() }); listGrid.appendPostData({ StartDateStart: $("#DateFromStartDate").val() }); listGrid.appendPostData({ StartDateEnd: $("#DateToStartDate").val() }); listGrid.appendPostData({ TradeStatus: $("#TradeStatus").val() }); listGrid.appendPostData({ TradeIds: $("#TraderName").val() }); listGrid.appendPostData({ ExerciseDateStart: $("#DateFromExerciseDate").val() }); listGrid.appendPostData({ ExerciseDateEnd: $("#DateToExerciseDate").val() }); listGrid.appendPostData({ ValueDate: $("#DateValueDate").val() }); query_data = listGrid.jqGrid('getPostData'); if (typeof isSearchclick !== "undefined" && isSearchclick) { //点击搜索时默认第一页 listGrid.jqGrid('setGridParam', { page: 1 }); } listGrid.trigger('reloadGrid'); } function openTradeConfirmList() { window.open("tradeConfirmList", "_blank"); } function exportSubmit(url) { var $form = $('#exportForm').html(''); $form.attr("action", url) $form.submit(); } 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 showcolumnChooser() { var jgrid = jQuery('#listGrid'); main.showcolumnChooser(jgrid, page.configcolumn_data_hhjyss); } 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 downTemplate() { if (page.company == "山西") { window.open("../App_Docs/导入模板/互换交易数据导入模板.xlsx"); } } 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"] }); } //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 exportTradeChoose() { layer.open({ type: 1, title: "导出交易", shadeClose: false, shade: 0.4, area: ['300px', '240px'], content: $('#exportTpl').html() }); } function exportTrade() { var dateTemp = new Date().Format("yyyyMMddhhmmss"); var fileName = "互换交易导出" + dateTemp; main.toExcel("listGrid", fileName, "xls"); } // EQD-5320 清理:原"互换日终估值导入"弹窗与 importEodFile/showImport/importClose 已删除—— // 页面从未有入口按钮调用 showImport()(弹窗不可达),其内部 /trs_hub_api/valuationEndOfDay/import // 直连反向代理的调用属死代码,也是全库最后一处 /trs_hub_api 依赖。如需恢复该功能, // 按 BatchSendSettleEmail 同款模式走 C# 服务端代理(multipart 转发),勿再直连反代。 window.reloadData = reloadtrade;