Merge remote-tracking branch 'origin/glms/feature/1.4.2' into glms/feature/1.4.2

This commit is contained in:
张名锐
2026-07-14 17:22:24 +08:00
71 changed files with 6356 additions and 70 deletions
@@ -49,18 +49,86 @@ function showSwapRate(timeRate, isMarginLeg) {
$("#swapIntervalModal").modal("show");
}
var layerIndex = -1;
var confirmFunc = function (id, additionalProcessing) {
var confirmFunc = function (id, additionalProcessing, ignoreRiskRuleIds, trialDataId) {
var pData = { tradeids: id };
if (!main.isEmpty(additionalProcessing)) {
pData.additionalProcessing = additionalProcessing;
}
if (ignoreRiskRuleIds && ignoreRiskRuleIds.length > 0) {
pData.ignoreRiskRuleIds = ignoreRiskRuleIds.join(',');
}
if (trialDataId) {
pData.trialDataId = trialDataId;
}
main.post("/trade/tradeConfirm", pData).done(function (data) {
if (!data.success) {
main.message(data.msg);
return;
}
if (data.obj && data.obj.proccessType === "QuotaTrialError") {
//限额试算不通过(老风控检查失败),展示详情表格但不允许审批
if (data.obj.TrialDataId) {
var quotaTrialErrorLayerSetting = {
type: 2,
title: "提示",
shadeClose: false,
shade: 0.4,
area: ['800px', '500px'],
content: "/trade/showQuotaTrial?id=" + data.obj.TrialDataId,
yes: function (index) {
layer.close(layerIndex);
},
cancel: function () {
if (window.parent && window.parent.reloadtrade) {
window.parent.reloadtrade();
}
layer.close(layerIndex);
}
};
quotaTrialErrorLayerSetting.btn = ["关闭"];
layerIndex = layer.open(quotaTrialErrorLayerSetting);
}
else if (data.obj.message) {
main.message(data.obj.message);
}
return;
}
if (data.obj && data.obj.proccessType === "AdditionalProcessing") {
if (data.obj.TrialDataId) {
// 交易特批来源,优先使用后端新增的 source 字段区分老风控/新风控,同时兼容旧返回结构。
var additionalProcessingSource = data.obj.source || "";
// 新风控需审批场景:source=RiskWarning 或 type=RiskWarningConfirm,二次确认时需要继续透传 ignoreRiskRuleIds。
var isRiskWarningConfirm = data.obj.type === "RiskWarningConfirm" || additionalProcessingSource === "RiskWarning";
// 老风控兼容特批场景:source=OldRiskQuotaTrialError 或 type=LackOfMoney,保持 master 原有“交易特批”按钮逻辑。
var isOldRiskSpecialApproval = additionalProcessingSource === "OldRiskQuotaTrialError" || data.obj.type === "LackOfMoney";
// 新风控特批走 RiskWarningConfirm,老风控特批继续走 LackOfMoney,兼容当前 confirmFunc 的入参约定。
var additionalProcessingType = isRiskWarningConfirm ? "RiskWarningConfirm" : "LackOfMoney";
// 新风控需审批时由后端返回本次命中的审批规则 id,前端二次确认时原样透传。
var currentIgnoreRiskRuleIds = data.obj.ignoreRiskRuleIds || [];
var currentTrialDataId = data.obj.TrialDataId;
var saveQuotaTrial = function (obj) {
var saveSuccess = true;
if (obj.Data.Remark && obj.Data.Remark.length > 0) {
main.post("/trade/SaveQuotaTrial", obj.Data, { async: false }).done(function (res) {
if (!res || !res.success) {
saveSuccess = false;
main.message(res.msg);
}
});
}
return saveSuccess;
};
var saveRiskWarningDecisionLog = function (quotaTrialId, decision) {
var saveSuccess = true;
main.post("/trade/SaveRiskWarningDecisionLog", { quotaTrialId: quotaTrialId, decision: decision }, { async: false }).done(function (res) {
if (!res || !res.success) {
saveSuccess = false;
main.message(res.msg);
}
});
return saveSuccess;
};
var layerSetting = {
type: 2,
title: "提示",
@@ -70,19 +138,30 @@ var confirmFunc = function (id, additionalProcessing) {
content: "/trade/showQuotaTrial?id=" + data.obj.TrialDataId,
yes: function (index) {
var obj = window["layui-layer-iframe" + index].page;
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);
}
});
layer.close(layerIndex);
confirmFunc(id, "LackOfMoney");
if (!obj.Data.Remark || obj.Data.Remark.length <= 0) {
main.message("必须填写说明内容,才可以录入交易");
return;
}
main.message("必须填写说明内容,才可以录入交易");
if (!saveQuotaTrial(obj)) {
return;
}
if (isRiskWarningConfirm) {
if (!saveRiskWarningDecisionLog(obj.Data.id, "确认通过")) {
return;
}
}
if (isOldRiskSpecialApproval) {
obj.Data.Remark = (obj.Data.Remark || "").trim();
}
layer.close(layerIndex);
confirmFunc(id, additionalProcessingType, currentIgnoreRiskRuleIds, currentTrialDataId);
},
cancel: function () {
var iframeWindow = window["layui-layer-iframe" + this.index];
var pageObj = iframeWindow && iframeWindow.page;
if (isRiskWarningConfirm && pageObj && pageObj.Data && pageObj.Data.id) {
saveRiskWarningDecisionLog(pageObj.Data.id, "取消不通过");
}
if (window.parent && window.parent.reloadtrade) {
window.parent.reloadtrade();
}
@@ -92,8 +171,11 @@ var confirmFunc = function (id, additionalProcessing) {
if (data.obj.type === "LackOfMoney") {
layerSetting.btn = [page.buttonStr, '取消'];
}
// 只展示"资金状况"的情况
if (data.obj.typecode === "FundStatus") {
else if (isRiskWarningConfirm) {
layerSetting.btn = ["交易特批", '取消'];
}
// 只展示“资金状况”的情况
else if (data.obj.typecode === "FundStatus") {
layerSetting.btn = ["确认", '取消'];
}
@@ -106,6 +188,38 @@ var confirmFunc = function (id, additionalProcessing) {
}
return;
}
if (data.msg && data.msg !== "操作完成") {
//新风控 ShowTip 提示:交易已确认成功,但触发提示规则,弹窗展示试算详情
if (data.obj && data.obj.TrialDataId) {
var showTipLayerSetting = {
type: 2,
title: "提示",
shadeClose: false,
shade: 0.4,
area: ['800px', '500px'],
content: "/trade/showQuotaTrial?id=" + data.obj.TrialDataId,
yes: function (index) {
layer.close(layerIndex);
closetradeWindow();
},
cancel: function () {
if (window.parent && window.parent.reloadtrade) {
window.parent.reloadtrade();
}
layer.close(layerIndex);
closetradeWindow();
}
};
showTipLayerSetting.btn = ["关闭"];
layerIndex = layer.open(showTipLayerSetting);
}
else {
main.alert(data.msg, function () {
closetradeWindow();
});
}
return;
}
if (window.parent && window.parent.reloadtrade) {
window.parent.reloadtrade();
}
@@ -115,6 +229,8 @@ var confirmFunc = function (id, additionalProcessing) {
}
}
closetradeWindow();
}).fail(function (err) {
console.log("[swapTradeView.tradeConfirm] fail, err=", err);
});
};
function confirmTrade(id) {
@@ -197,7 +313,7 @@ function unWindSwap(id) {
main.open(title,
srcurl,
{
area: ["90%", "800px"],
area: ["90%", "780px"],
end: function () {
if (window.parent && window.parent.reloadtrade) {
window.parent.reloadtrade();
@@ -15,6 +15,12 @@ function initSelectize(selector, options) {
}
function setRuleDiv() {
// 先销毁已有的 selectize 实例,避免在隐藏容器(v-show)里初始化后尺寸错位
$("[name='selectRule']").each(function () {
if (this.selectize) {
this.selectize.destroy();
}
});
initSelectize("[name='selectRule']", {
options: getRules(),
valueField: 'Value',
@@ -42,7 +48,7 @@ var app = new Vue({
{ text: '--请选择--', value: '0' },
{ text: '客户开户', value: '1' },
{ text: '客户信息修改', value: '5' },
{ text: '交易', value: '2' },
{ text: '交易新增和修改', value: '2' },
{ text: '交易了结', value: '6' },
/* { text: '资信与授信', value: '3' },*/
{ text: '出金', value: '4' }
@@ -79,11 +85,11 @@ var app = new Vue({
],
conditionOps: [
{ value: 'gt', text: '>' },
{ value: 'lt', text: '<' },
//{ value: 'lt', text: '<' },
{ value: 'gte', text: '>=' },
{ value: 'lte', text: '<=' },
{ value: 'eq', text: '=' },
{ value: 'neq', text: '≠' }
//{ value: 'lte', text: '<=' },
//{ value: 'eq', text: '=' },
//{ value: 'neq', text: '≠' }
],
conditionLogics: [
{ value: 'AND', text: '满足全部条件时触发' },
@@ -1456,6 +1462,7 @@ var app = new Vue({
handler(val, oldVal) {
this.$nextTick(function () {
setRuleDiv();
this.initRuleType();
})
},
},
@@ -1464,6 +1471,7 @@ var app = new Vue({
handler(val, oldVal) {
this.$nextTick(function () {
setRuleDiv();
this.initRuleType();
})
},
}
@@ -128,7 +128,7 @@ var confirmFunc = function (id, additionalProcessing) {
if (data.obj.type === "LackOfMoney") {
layerSetting.btn = [page.buttonStr, '取消'];
}
// 只展示"资金状况"的情况
// 只展示资金状况的情况
if (data.obj.typecode === "FundStatus") {
layerSetting.btn = ["确认", '取消'];
}