| 其他收支 |
diff --git a/YLErpWeb/Views/clientbalance/TradeMarketReport_BalanceStatement.cshtml b/YLErpWeb/Views/clientbalance/TradeMarketReport_BalanceStatement.cshtml
index f6dd7225..7bba1cf6 100644
--- a/YLErpWeb/Views/clientbalance/TradeMarketReport_BalanceStatement.cshtml
+++ b/YLErpWeb/Views/clientbalance/TradeMarketReport_BalanceStatement.cshtml
@@ -322,7 +322,7 @@
else if (cellValue == "出金" || cellValue == "其他支出") {
return "支出";
}
- else if (rowObject.Action == "系统操作-期权费" || rowObject.Action == "系统操作-平仓费" || rowObject.Action == "系统操作-行权费" || rowObject.Action == "系统操作-票息" || rowObject.Action == "系统操作-互换" || rowObject.Action == "系统操作-应付预付金" || rowObject.Action == "系统操作-预付金返息") {
+ else if (rowObject.Action == "系统操作-期权费" || rowObject.Action == "系统操作-平仓费" || rowObject.Action == "系统操作-行权费" || rowObject.Action == "系统操作-票息" || rowObject.Action == "系统操作-互换" || rowObject.Action == "系统操作-应付预付金" || rowObject.Action == "系统操作-预付金返息" || rowObject.Action == "系统操作-追加保证金") {
if (rowObject.Money < 0) {
return "支出";
}
diff --git a/YLErpWeb/Views/entryexit/entryexitList.cshtml b/YLErpWeb/Views/entryexit/entryexitList.cshtml
index aaafc651..f4ee4332 100644
--- a/YLErpWeb/Views/entryexit/entryexitList.cshtml
+++ b/YLErpWeb/Views/entryexit/entryexitList.cshtml
@@ -384,6 +384,10 @@
else if (rowObject.Action == "系统操作-预付金返息") {
action = "预付金返息";
}
+ else if (rowObject.Action == "系统操作-追加保证金") {
+ //阶段四 §4.1 合约维度 EOD 结算产生的追保入金
+ action = "追加保证金";
+ }
if (action) {
return `${action}${parseFloat(rowObject.Money) > 0 ? "收入" : "支出"}`;
}
diff --git a/YLErpWeb/Views/margin_template_v2/margin_template_v2ClientEdit.cshtml b/YLErpWeb/Views/margin_template_v2/margin_template_v2ClientEdit.cshtml
index f1ce1c96..815a2769 100644
--- a/YLErpWeb/Views/margin_template_v2/margin_template_v2ClientEdit.cshtml
+++ b/YLErpWeb/Views/margin_template_v2/margin_template_v2ClientEdit.cshtml
@@ -253,7 +253,7 @@
{{spanText(sec.detail).priceCurShort1}} ≤ × {{spanText(sec.detail).priceInit}}
- × {{spanText(sec.detail).priceInit}} < {{spanText(sec.detail).priceCur}} ≤ × {{spanText(sec.detail).priceInit}}
+ × {{spanText(sec.detail).priceInit}} < {{spanText(sec.detail).priceCurShort}} ≤ × {{spanText(sec.detail).priceInit}}
diff --git a/YLErpWeb/Views/margin_template_v2/margin_template_v2DefaultEdit.cshtml b/YLErpWeb/Views/margin_template_v2/margin_template_v2DefaultEdit.cshtml
index 850c0fbd..3e4eca0f 100644
--- a/YLErpWeb/Views/margin_template_v2/margin_template_v2DefaultEdit.cshtml
+++ b/YLErpWeb/Views/margin_template_v2/margin_template_v2DefaultEdit.cshtml
@@ -254,7 +254,7 @@
{{spanText(sec.detail).priceCurShort1}} ≤ × {{spanText(sec.detail).priceInit}}
- × {{spanText(sec.detail).priceInit}} < {{spanText(sec.detail).priceCur}} ≤ × {{spanText(sec.detail).priceInit}}
+ × {{spanText(sec.detail).priceInit}} < {{spanText(sec.detail).priceCurShort}} ≤ × {{spanText(sec.detail).priceInit}}
|
diff --git a/YLErpWeb/Views/margin_template_v2/margin_template_v2Edit.cshtml b/YLErpWeb/Views/margin_template_v2/margin_template_v2Edit.cshtml
index e4906c83..0be12633 100644
--- a/YLErpWeb/Views/margin_template_v2/margin_template_v2Edit.cshtml
+++ b/YLErpWeb/Views/margin_template_v2/margin_template_v2Edit.cshtml
@@ -230,7 +230,7 @@
{{spanText(sec.detail).priceCurShort1}} ≤ × {{spanText(sec.detail).priceInit}}
- × {{spanText(sec.detail).priceInit}} < {{spanText(sec.detail).priceCur}} ≤ × {{spanText(sec.detail).priceInit}}
+ × {{spanText(sec.detail).priceInit}} < {{spanText(sec.detail).priceCurShort}} ≤ × {{spanText(sec.detail).priceInit}}
|
diff --git a/YLErpWeb/wwwroot/Scripts/app/client/tradeMarketReport.js b/YLErpWeb/wwwroot/Scripts/app/client/tradeMarketReport.js
index 0398c209..7e3f4cc2 100644
--- a/YLErpWeb/wwwroot/Scripts/app/client/tradeMarketReport.js
+++ b/YLErpWeb/wwwroot/Scripts/app/client/tradeMarketReport.js
@@ -290,11 +290,13 @@ function SearchClientBalance() {
main.post("/trade_span/GetClientLatestBalance", { clientId: $("#ClientId").val(), ValueDateFrom: param.ValueDateStart, ValueDateTo: param.ValueDateEnd, IsClientBalanceGap: param.IsClientBalanceGap, IsGetOuterMarginGap: param.IsGetOuterMarginGap, ParentFlag: param.ParentFlag }).done(function (data) {
$("#LastDayRemainFund").text(numFormart(data.LastDayRemainFund));
- $("#MySideMargin").text(numFormart(data.MySideMargin));
+ //R2 阶段三 §3.2 口径(BUG-07 修正,与邮件/Excel 报告 SettlementReportService 同源):
+ //初始保证金=SwapInitMargin(应付预付金净额)、维持保证金=−MySideMargin(client_span 维持保证金反号聚合)
+ $("#SwapInitMargin").text(numFormart(data.SwapInitMargin));
$("#WinLoss").text(numFormart(data.WinLoss));
$("#CashInCashOutChange").text(numFormart(data.NetFundAll));
$("#PositionPnl").text(numFormart(isPvRounded ? data.RoundedPositionPnl : data.PositionPnl));
- $("#MaintenanceMargin").text(numFormart(data.MaintenanceMargin));
+ $("#MaintenanceMargin").text(numFormart(-data.MySideMargin));
$("#NetFundAll").text(numFormart(data.NetFund));
$("#SwapMarketAmount").text(numFormart(data.SwapMarketAmount));
$("#VmFundSum").text(numFormart(data.VmFundSum));
@@ -303,6 +305,8 @@ function SearchClientBalance() {
$("#MarginByPayableMargin").text(numFormart(data.MarginByPayableMarginTotal));
$("#ToDayRemainFund").text(numFormart(data.AmountFund));
$("#DesirableFund").text(numFormart(data.DesirableFundTotal));
+ $("#TotalCredit").text(numFormart(data.TotalCredit));
+ $("#UsedCredit").text(numFormart(data.UsedCredit));
});
var data = { clientId: $("#ClientId").val(), ValueDateFrom: $("#ValueDateFrom").val(), ValueDateTo: $("#ValueDate").val() };
diff --git a/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2DefaultEdit.js b/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2DefaultEdit.js
index b9a92bed..8585ebda 100644
--- a/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2DefaultEdit.js
+++ b/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2DefaultEdit.js
@@ -462,7 +462,7 @@ const vue = new Vue({
},
//规则15录入区块文案:按 detail 资产类型切换计价口径。
//债券类(利率债16/信用债32/其它债券64)及其他类型(默认债券口径):期初净价/当前净价,金额=×期初全价×券面总额;
- //基金及基金专户(32768)/债券指数(536870912):参考标的期初净价/参考标的当前净价(空头第1层用"参考标的当前收盘价"),
+ //基金及基金专户(32768)/债券指数(536870912):参考标的期初净价/参考标的当前收盘价(空头各层统一收盘价,BUG-11 修正),
//金额=×参考标的期初价格×参考标的名义份额。
spanText(detail) {
var ut = (detail && detail.UnderlyingType) || 0;
@@ -471,6 +471,7 @@ const vue = new Vue({
priceInit: '参考标的期初净价',
priceCur: '参考标的当前净价',
priceCurShort1: '参考标的当前收盘价',
+ priceCurShort: '参考标的当前收盘价',
amountBase: '参考标的期初价格 × 参考标的名义份额'
};
}
@@ -478,6 +479,7 @@ const vue = new Vue({
priceInit: '期初净价',
priceCur: '当前净价',
priceCurShort1: '当前净价',
+ priceCurShort: '当前净价',
amountBase: '期初全价 × 券面总额'
};
},
diff --git a/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2Edit.js b/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2Edit.js
index 557d4c0b..0e09bc36 100644
--- a/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2Edit.js
+++ b/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2Edit.js
@@ -226,7 +226,7 @@ const vue = new Vue({
needDetailRules.push(MarginRuleTypeEnum.买入自动赎回规则1);
needDetailRules.push(MarginRuleTypeEnum.卖出自动赎回规则1);
needDetailRules.push(MarginRuleTypeEnum.区间追保结构);
- needDetailRules.push(MarginRuleTypeEnum.单独计算规则1);
+ needDetailRules.push(MarginRuleTypeEnum.单独计算规则);
if (needDetailRules.indexOf(that.marginTemplate.RuleType.toString()) >= 0) {
new Promise((reslove) => {
//规则15:新增的是"资产类型区块"(含区间录入结构与独立区块键);其他规则维持原样
@@ -473,7 +473,7 @@ const vue = new Vue({
},
//规则15录入区块文案:按 detail 资产类型切换计价口径。
//债券类(利率债16/信用债32/其它债券64)及其他类型(默认债券口径):期初净价/当前净价,金额=×期初全价×券面总额;
- //基金及基金专户(32768)/债券指数(536870912):参考标的期初净价/参考标的当前净价(空头第1层用"参考标的当前收盘价"),
+ //基金及基金专户(32768)/债券指数(536870912):参考标的期初净价/参考标的当前收盘价(空头各层统一收盘价,BUG-11 修正),
//金额=×参考标的期初价格×参考标的名义份额。
spanText(detail) {
var ut = (detail && detail.UnderlyingType) || 0;
@@ -482,6 +482,7 @@ const vue = new Vue({
priceInit: '参考标的期初净价',
priceCur: '参考标的当前净价',
priceCurShort1: '参考标的当前收盘价',
+ priceCurShort: '参考标的当前收盘价',
amountBase: '参考标的期初价格 × 参考标的名义份额'
};
}
@@ -489,6 +490,7 @@ const vue = new Vue({
priceInit: '期初净价',
priceCur: '当前净价',
priceCurShort1: '当前净价',
+ priceCurShort: '当前净价',
amountBase: '期初全价 × 券面总额'
};
},
diff --git a/YLErpWeb/wwwroot/Scripts/app/swaptrade/swapTradeList.js b/YLErpWeb/wwwroot/Scripts/app/swaptrade/swapTradeList.js
index 6925ac7e..b0e65a9c 100644
--- a/YLErpWeb/wwwroot/Scripts/app/swaptrade/swapTradeList.js
+++ b/YLErpWeb/wwwroot/Scripts/app/swaptrade/swapTradeList.js
@@ -1,4 +1,4 @@
-var g_grid = {};
+var g_grid = {};
var query_data = {};
$(function () {
@@ -337,13 +337,17 @@ function confirmAllSelect() {
main.message("请选择需确认的交易");
return;
}
- var confirmFunc = function (additionalProcessing) {
+ var confirmFunc = function (additionalProcessing, id, useRecall) {
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);
+ 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 静默跳过资金校验——普通确认走校验,
@@ -357,6 +361,72 @@ function confirmAllSelect() {
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);
});
};
diff --git a/YLErpWeb/wwwroot/Scripts/app/trade/swapTradeList.js b/YLErpWeb/wwwroot/Scripts/app/trade/swapTradeList.js
index 2e7987fa..effbe631 100644
--- a/YLErpWeb/wwwroot/Scripts/app/trade/swapTradeList.js
+++ b/YLErpWeb/wwwroot/Scripts/app/trade/swapTradeList.js
@@ -1,4 +1,4 @@
-var g_grid = {};
+var g_grid = {};
var query_data = {};
$(function () {
@@ -1048,13 +1048,17 @@ function confirmAllSelect() {
main.message("请选择需确认的交易");
return;
}
- var confirmFunc = function (additionalProcessing) {
+ var confirmFunc = function (additionalProcessing, id, useRecall) {
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);
+ 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 静默跳过资金校验——普通确认走校验,
@@ -1069,6 +1073,72 @@ function confirmAllSelect() {
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);
});
};
|