455 lines
18 KiB
JavaScript
455 lines
18 KiB
JavaScript
|
|
var g_grid = {};
|
|
var quotaSettings = {};
|
|
var underlyingId = 0;
|
|
var disabledQuotaIndexs = ["止损金额", "Delta金额", "浮动盈亏"];
|
|
var quotaMonitorMultiple = 10000;
|
|
$(function () {
|
|
FastVue.numberInput(document.getElementById('QuotaRange-PercentDays'), { precision: 0 });
|
|
var postData = GetPostData();
|
|
var obj = {
|
|
datatype: 'local',
|
|
multiselect: false,
|
|
height: 'auto',
|
|
width: '90%',
|
|
autowidth: false,
|
|
shrinkToFit: false,
|
|
viewrecords: true,
|
|
colModel: colModel,
|
|
jsonReader: { repeatitems: false },
|
|
caption: '',
|
|
mtype: 'POST',
|
|
postData: postData,
|
|
afterInsertRow: AfterInsertRow,
|
|
onSelectRow: rowclick,
|
|
ondblClickRow: rowdblclick,
|
|
footerrow: false,
|
|
loadComplete: gridComplete,
|
|
onPaging: onJqgridPaging
|
|
};
|
|
g_grid = jQuery('#listGrid1').jqGrid(obj);
|
|
|
|
$.ajax({
|
|
type: "Post",
|
|
async: false,
|
|
url: "/risk/QuotaSettingQuery",
|
|
contentType: false,
|
|
processData: false,
|
|
success: function (res) {
|
|
$("#BusinessTotalScale").val(res.BusinessTotalScale);
|
|
$("#BusinessAvailableFunds").val(res.BusinessAvailableFunds);
|
|
$("#SingleUnderlyingRate").val(res.SingleUnderlyingRate);
|
|
quotaSettings = res.QuotaSettings;
|
|
_.forEach(quotaSettings, (item) => {
|
|
if (item.QuotaIndex.indexOf("名义本金") != -1) {
|
|
item.QuotaIndex = item.QuotaIndex + "(万)";
|
|
}
|
|
if (item.Percent) {
|
|
item.QuotaUpperLimit = item.QuotaUpperLimit == null || item.QuotaUpperLimit == undefined || item.QuotaUpperLimit == "NaN" || item.QuotaUpperLimit === "" ? "" : (Number.parseFloat(item.QuotaUpperLimit) * 100).toFixed(2);
|
|
item.QuotaLowerLimit = item.QuotaLowerLimit == null || item.QuotaLowerLimit == undefined || item.QuotaLowerLimit == "NaN" || item.QuotaLowerLimit === "" ? "" : (Number.parseFloat(item.QuotaLowerLimit) * 100).toFixed(2);
|
|
item.WarningUpperLimit = item.WarningUpperLimit == null || item.WarningUpperLimit == undefined || item.WarningUpperLimit == "NaN" || item.WarningUpperLimit === "" ? "" : (Number.parseFloat(item.WarningUpperLimit) * 100).toFixed(2);
|
|
item.WarningLowerLimit = item.WarningLowerLimit == null || item.WarningLowerLimit == undefined || item.WarningLowerLimit == "NaN" || item.WarningLowerLimit === "" ? "" : (Number.parseFloat(item.WarningLowerLimit) * 100).toFixed(2);
|
|
} else {
|
|
item.QuotaUpperLimit = item.QuotaUpperLimit == null || item.QuotaUpperLimit == undefined || item.QuotaUpperLimit == "NaN" || item.QuotaUpperLimit === "" ? "" : Number.parseFloat(item.QuotaUpperLimit).toFixed(2);
|
|
item.QuotaLowerLimit = item.QuotaLowerLimit == null || item.QuotaLowerLimit == undefined || item.QuotaLowerLimit == "NaN" || item.QuotaLowerLimit === "" ? "" : Number.parseFloat(item.QuotaLowerLimit).toFixed(2);
|
|
item.WarningUpperLimit = item.WarningUpperLimit == null || item.WarningUpperLimit == undefined || item.WarningUpperLimit == "NaN" || item.WarningUpperLimit === "" ? "" : Number.parseFloat(item.WarningUpperLimit).toFixed(2);
|
|
item.WarningLowerLimit = item.WarningLowerLimit == null || item.WarningLowerLimit == undefined || item.WarningLowerLimit == "NaN" || item.WarningLowerLimit === "" ? "" : Number.parseFloat(item.WarningLowerLimit).toFixed(2);
|
|
}
|
|
});
|
|
|
|
setRows(res)
|
|
},
|
|
beforeSend(jqXHR) {
|
|
main.waitMe(true);
|
|
},
|
|
complete(jqXHR, textStatus) {
|
|
main.waitMe(false);
|
|
}
|
|
});
|
|
var defaultValue = { Name: '全部', Code: '全部', id: '0' };
|
|
pageData.clients.unshift(defaultValue);
|
|
var width = 152;
|
|
for (var i = 0; i < pageData.clients.length; i++) {
|
|
let ele = document.createElement('span')
|
|
ele.innerText = pageData.clients[i].Name;
|
|
ele.style.fontSize = '14px';
|
|
document.documentElement.append(ele);
|
|
var charLength = ele.offsetWidth + 28;//滚动条
|
|
document.documentElement.removeChild(ele);
|
|
if (charLength > width) {
|
|
width = charLength
|
|
}
|
|
}
|
|
FastVue.autocomplete('QuotaRange-ClienetId', {
|
|
nameField: 'Name',
|
|
valueField: 'id',
|
|
searchField: ['Name', 'PinYin'],//如果不设置则只搜索nameField
|
|
lookup: pageData.clients,
|
|
width: width,
|
|
onSelect: (data) => {
|
|
setRows();
|
|
}
|
|
}).setData(defaultValue)
|
|
//簿记
|
|
pageData.assetUnits.unshift(defaultValue);
|
|
var width = 152;
|
|
for (var i = 0; i < pageData.assetUnits.length; i++) {
|
|
let ele = document.createElement('span')
|
|
ele.innerText = pageData.assetUnits[i].Name;
|
|
ele.style.fontSize = '14px';
|
|
document.documentElement.append(ele);
|
|
var charLength = ele.offsetWidth + 28;//滚动条
|
|
document.documentElement.removeChild(ele);
|
|
if (charLength > width) {
|
|
width = charLength
|
|
}
|
|
}
|
|
FastVue.autocomplete('QuotaRange-AssetUnitId', {
|
|
nameField: 'Name',
|
|
valueField: 'id',
|
|
searchField: ['Name', 'PinYin'],//如果不设置则只搜索nameField
|
|
lookup: pageData.assetUnits,
|
|
width: width,
|
|
onSelect: (data) => {
|
|
setRows();
|
|
}
|
|
}).setData(defaultValue)
|
|
//标的资产
|
|
var selFlag = tradeHelper.UnderlyingSelectFlag;
|
|
var underlyingCtrl = tradeHelper.UnderlyingAutoComplete('QuotaRange-UnderlyingId', { UseAll:true, SelectFlag: selFlag.UsePinYinFilter | selFlag.UseForTrading | selFlag.IncludeSynthetic | selFlag.IncludeMatured | selFlag.IncludeBasket | selFlag.CheckLaunch, BlackLimit: 2, });
|
|
underlyingCtrl.setFlag(tradeHelper.UnderlyingSelectFlag.OtcTrade);
|
|
underlyingCtrl.onSelect((data) => {
|
|
underlyingId = data.id;
|
|
setRows();
|
|
});
|
|
underlyingCtrl.setData(defaultValue);
|
|
|
|
$("#QuotaType").on("change", function (e) {
|
|
setRows();
|
|
$("#listGrid1").jqGrid('setGridWidth', $('#remark').width());
|
|
});
|
|
});
|
|
|
|
function GetPostData() {
|
|
var postData = {};
|
|
|
|
postData.TradeNumber = $("#TradeNumber").val();
|
|
postData.ClientId = $("#ClientId").val();
|
|
postData.ClientNumber = $("#ClientNumber").val();
|
|
postData.UnderlyingId = $("#UnderlyingId").val();
|
|
postData.SummaryType = $("#myTab .active a").text();
|
|
|
|
return postData;
|
|
}
|
|
|
|
function setRows() {
|
|
$("#QuotaRange-UnderlyingId").parents(".search-group").hide();
|
|
$("#QuotaRange-ClienetId").parents(".search-group").hide();
|
|
$("#QuotaRange-PercentDays").parents(".search-group").hide();
|
|
$("#QuotaRange-AssetUnitId").parents(".search-group").hide();
|
|
var quotaType = $("#QuotaType").val();
|
|
var rows = quotaSettings;
|
|
var range = 0;
|
|
switch (quotaType) {
|
|
case "3":
|
|
$("#QuotaRange-UnderlyingId").parents(".search-group").show();
|
|
range = underlyingId;
|
|
break;
|
|
case "5":
|
|
$("#QuotaRange-ClienetId").parents(".search-group").show();
|
|
range = $("#QuotaRange-ClienetId").val() | 0;
|
|
break;
|
|
case "18":
|
|
$("#QuotaRange-AssetUnitId").parents(".search-group").show();
|
|
range = $("#QuotaRange-AssetUnitId").val() | 0;
|
|
break;
|
|
case "15":
|
|
$("#QuotaRange-PercentDays").parents(".search-group").show();
|
|
//range = $("#QuotaRange-PercentDays").val() | 0;
|
|
break;
|
|
}
|
|
if (range != 0) {
|
|
var exist = false;
|
|
_.forEach(rows, (item) => {
|
|
if (item.QuotaRange == range && item.QuotaType == $("#QuotaType").val()) {
|
|
exist = true;
|
|
return;
|
|
}
|
|
});
|
|
if (!exist) {
|
|
range = 0;
|
|
}
|
|
}
|
|
g_grid.jqGrid("clearGridData");
|
|
for (var i = 0; i < rows.length; i++) {
|
|
if (rows[i].QuotaType != quotaType) {
|
|
continue;
|
|
}
|
|
if (rows[i].QuotaType == "15") {
|
|
$("#QuotaRange-PercentDays").val(rows[i].QuotaRange);
|
|
} else if (rows[i].QuotaRange != range) {
|
|
continue;
|
|
}
|
|
g_grid.jqGrid('addRowData', rows[i].id, rows[i]);
|
|
g_grid.jqGrid('editRow', rows[i].id, false);
|
|
}
|
|
$(".editable").on("input", function () {
|
|
var inputValue = $(this).val();
|
|
var showValue = toThousands(inputValue, false);
|
|
$(this).val(showValue);
|
|
});
|
|
}
|
|
|
|
function changePercent(obj) {
|
|
if (obj.text === "%") {
|
|
obj.text = "¥";
|
|
obj.title = '点击后切换成百分比';
|
|
} else {
|
|
obj.text = "%";
|
|
obj.title = '点击后切换成数值';
|
|
}
|
|
}
|
|
|
|
function gridComplete(obj) {
|
|
$("#listGrid1_QuotaIndex").css("background", "#BBF8F9");
|
|
$("#listGrid1_QuotaLowerLimit,#listGrid1_QuotaUpperLimit").css("background", "#EE7280");
|
|
$("#listGrid1_WarningLowerLimit,#listGrid1_WarningUpperLimit").css("background", "#F4F262");
|
|
$("#listGrid1").jqGrid('setGridWidth', $('#remark').width() - 20);
|
|
}
|
|
|
|
function save() {
|
|
var arr = [];
|
|
var quotaType = $("#QuotaType").val();
|
|
var remark = $("#remark").val();
|
|
var quotaRange = 0;
|
|
switch (quotaType) {
|
|
case "3":
|
|
quotaRange = underlyingId;
|
|
break;
|
|
case "5":
|
|
quotaRange = $("#QuotaRange-ClienetId").val();
|
|
break;
|
|
case "15":
|
|
quotaRange = $("#QuotaRange-PercentDays").val();
|
|
break;
|
|
case "18":
|
|
quotaRange = $("#QuotaRange-AssetUnitId").val();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
var ids = g_grid.getDataIDs();
|
|
_.forEach(ids, (v) => {
|
|
var item = g_grid.getRowData(v);
|
|
item.QuotaType = quotaType;
|
|
item.Precheck = $("#Precheck_" + v).prop("checked");
|
|
item.QuotaRange = quotaRange;
|
|
var index = item.QuotaIndex.indexOf('<');
|
|
if (index > 0) {
|
|
item.QuotaIndex = item.QuotaIndex.substring(0, index)
|
|
}
|
|
item.Percent = item.Percent.indexOf("%") >= 0;
|
|
if (item.Percent) {
|
|
item.QuotaUpperLimit = $("#" + v + "_QuotaUpperLimit").val() === "" ? "NaN" : removeThousands($("#" + v + "_QuotaUpperLimit").val()) / 100;
|
|
item.QuotaLowerLimit = $("#" + v + "_QuotaLowerLimit").val() === "" ? "NaN" : removeThousands($("#" + v + "_QuotaLowerLimit").val()) / 100;
|
|
item.WarningUpperLimit = $("#" + v + "_WarningUpperLimit").val() === "" ? "NaN" : removeThousands($("#" + v + "_WarningUpperLimit").val()) / 100;
|
|
item.WarningLowerLimit = $("#" + v + "_WarningLowerLimit").val() === "" ? "NaN" : removeThousands($("#" + v + "_WarningLowerLimit").val()) / 100;
|
|
} else {
|
|
item.QuotaUpperLimit = $("#" + v + "_QuotaUpperLimit").val() === "" ? "NaN" : removeThousands($("#" + v + "_QuotaUpperLimit").val());
|
|
item.QuotaLowerLimit = $("#" + v + "_QuotaLowerLimit").val() === "" ? "NaN" : removeThousands($("#" + v + "_QuotaLowerLimit").val());
|
|
item.WarningUpperLimit = $("#" + v + "_WarningUpperLimit").val() === "" ? "NaN" : removeThousands($("#" + v + "_WarningUpperLimit").val());
|
|
item.WarningLowerLimit = $("#" + v + "_WarningLowerLimit").val() === "" ? "NaN" : removeThousands($("#" + v + "_WarningLowerLimit").val());
|
|
if (item.QuotaIndex.indexOf("名义本金") != -1) {
|
|
item.QuotaIndex = item.QuotaIndex.replace("(万)", "");
|
|
item.QuotaUpperLimit = item.QuotaUpperLimi == "NaN" ?"NaN": item.QuotaUpperLimit * quotaMonitorMultiple;
|
|
item.QuotaLowerLimit = item.QuotaLowerLimit == "NaN" ? "NaN" : item.QuotaLowerLimit * quotaMonitorMultiple;
|
|
item.WarningUpperLimit = item.WarningUpperLimit == "NaN" ? "NaN" : item.WarningUpperLimit * quotaMonitorMultiple;
|
|
item.WarningLowerLimit = item.WarningLowerLimit == "NaN" ? "NaN" : item.WarningLowerLimit * quotaMonitorMultiple;
|
|
}
|
|
}
|
|
arr.push(item);
|
|
})
|
|
var res = {
|
|
BusinessTotalScale: $("#BusinessTotalScale").val(),
|
|
BusinessAvailableFunds: $("#BusinessAvailableFunds").val(),
|
|
SingleUnderlyingRate: $("#SingleUnderlyingRate").val(),
|
|
QuotaSettings: arr,
|
|
Remark: remark,
|
|
};
|
|
|
|
$.ajax({
|
|
type: "Post",
|
|
url: "/risk/SaveQuotaSetting",
|
|
data: res,
|
|
dataType: "json",
|
|
success: function (res) {
|
|
if (res && res.msg) {
|
|
main.alert(res.msg, function () {
|
|
layer.closeMe();
|
|
});
|
|
}
|
|
},
|
|
beforeSend(jqXHR) {
|
|
main.waitMe(true);
|
|
},
|
|
complete(jqXHR, textStatus) {
|
|
main.waitMe(false);
|
|
}
|
|
});
|
|
}
|
|
// 千分位展示
|
|
function toThousands(num, percent) {
|
|
if (percent) {
|
|
return num;
|
|
}
|
|
num = num.toString().replace(/,/g, "");
|
|
var parts = num.split('.');
|
|
let integerPart = parts[0];
|
|
const regex = /(\d+)(\d{3})/;
|
|
while (regex.test(integerPart)) {
|
|
integerPart = integerPart.replace(regex, '$1,$2');
|
|
}
|
|
|
|
// 返回处理后的整数部分和小数部分(如果有)
|
|
return parts.length === 2 ? integerPart + '.' + parts[1] : integerPart;
|
|
}
|
|
// 移除千分位
|
|
function removeThousands(num) {
|
|
return Number(num.replace(/,/g, ""));
|
|
}
|
|
const tipObj = {
|
|
"Delta敞口(多空比)": "单一合约品种所有合约(含现货)多头合计Delta与空头合计Delta的比值",
|
|
Delta净敞口比例: "场内场外的净敞口/场外期权应对冲delta\r\ndelta多空相加的时候要轧差\r\n场外期权应对冲delta约等于-场外期权delta",
|
|
产品占用资金限额: "主体为“产品”的对手方购买场外期权支付的期权费及缴纳的初始预付金合计",
|
|
轧差集中度: "(本次交易的挂钩标的券面+所有存续合约中该券的券面)/该券的发行量"
|
|
};
|
|
var colModel = [
|
|
{
|
|
name: 'id',
|
|
label: '',
|
|
index: 'id',
|
|
width: 120,
|
|
align: 'left',
|
|
sortable: false,
|
|
hidden: true
|
|
}, {
|
|
name: 'QuotaIndex',
|
|
label: '限额指标',
|
|
index: 'QuotaIndex',
|
|
width: 150,
|
|
align: 'center',
|
|
sortable: false,
|
|
formatter: function (cellvalue, options, rowObject) {
|
|
var html = cellvalue;
|
|
if (tipObj[cellvalue]) {
|
|
html += '<div style="float: right;width: 0px;"><i class="fa fa-question" title="' + tipObj[cellvalue] + '" aria-hidden="true" style="float: right;"></i></div>';
|
|
}
|
|
return html;
|
|
}
|
|
}, {
|
|
name: 'Precheck',
|
|
label: '事前检查',
|
|
index: 'Precheck',
|
|
width: 60,
|
|
align: 'center',
|
|
sortable: false,
|
|
formatter: function (cellvalue, options, rowObject) {
|
|
var html = "";
|
|
if (disabledQuotaIndexs.indexOf(rowObject.QuotaIndex)>=0) {
|
|
html += '<input class="search-input" type="checkbox" name="Precheck_{0}" value="on" {1} id="Precheck_{0}" disabled="disabled">'.template(rowObject.id, (cellvalue ? "checked" : ""));
|
|
} else {
|
|
html += '<input class="search-input" type="checkbox" name="Precheck_{0}" value="on" {1} id="Precheck_{0}">'.template(rowObject.id, (cellvalue ? "checked" : ""));
|
|
}
|
|
return html;
|
|
}
|
|
}, {
|
|
name: 'QuotaLowerLimit',
|
|
label: '限额下限',
|
|
index: 'QuotaLowerLimit',
|
|
width: 168,
|
|
align: 'left',
|
|
sortable: false,
|
|
editable: true,
|
|
edittype: 'text',
|
|
formatter: function (cellvalue, options, rowObject) {
|
|
return cellvalue == null || cellvalue == undefined || cellvalue == "NaN" ? "" : toThousands(cellvalue, rowObject.Percent);
|
|
}
|
|
}, {
|
|
name: 'QuotaUpperLimit',
|
|
label: '限额上限',
|
|
index: 'QuotaUpperLimit',
|
|
width: 168,
|
|
align: 'right',
|
|
sortable: false,
|
|
editable: true,
|
|
edittype: 'text',
|
|
formatter: function (cellvalue, options, rowObject) {
|
|
return cellvalue == null || cellvalue == undefined || cellvalue == "NaN" ? "" : toThousands(cellvalue, rowObject.Percent);
|
|
}
|
|
}, {
|
|
name: 'WarningLowerLimit',
|
|
label: '预警下限',
|
|
index: 'WarningLowerLimit',
|
|
width: 168,
|
|
align: 'right',
|
|
sortable: false,
|
|
editable: true,
|
|
edittype: 'text',
|
|
formatter: function (cellvalue, options, rowObject) {
|
|
return cellvalue == null || cellvalue == undefined || cellvalue == "NaN" ? "" : toThousands(cellvalue, rowObject.Percent);
|
|
}
|
|
}, {
|
|
name: 'WarningUpperLimit',
|
|
label: '预警上限',
|
|
index: 'WarningUpperLimit',
|
|
width: 168,
|
|
align: 'right',
|
|
sortable: false,
|
|
editable: true,
|
|
edittype: 'text',
|
|
formatter: function (cellvalue, options, rowObject) {
|
|
return cellvalue == null || cellvalue == undefined || cellvalue == "NaN" ? "" : toThousands(cellvalue, rowObject.Percent);
|
|
}
|
|
},
|
|
{
|
|
name: 'Percent',
|
|
label: ' ',
|
|
index: 'Percent',
|
|
width: 40,
|
|
align: 'center',
|
|
sortable: false,
|
|
formatter: function (cellvalue, options, rowObject) {
|
|
var html = "<a href='javascript:;' ";
|
|
if (rowObject.QuotaType != 15) {
|
|
switch (rowObject.QuotaIndex) {
|
|
case "集中度":
|
|
case "VaR值":
|
|
case "止损金额":
|
|
case "Delta敞口":
|
|
case "权益类业务规模":
|
|
case "非权益类业务规模":
|
|
case "本年累计盈亏":
|
|
case "浮动盈亏":
|
|
case "DV": // DV是绝对值指标,不允许百分比模式
|
|
break;
|
|
default:
|
|
html += "onclick='changePercent(this)' ";
|
|
if (cellvalue) {
|
|
html += "title='点击后切换成数值'";
|
|
}
|
|
else {
|
|
html += "title='点击后切换成百分比'";
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (cellvalue) {
|
|
html += ">%</a>";
|
|
}
|
|
else {
|
|
html += ">¥</a>";
|
|
}
|
|
return html;
|
|
},
|
|
}
|
|
]; |