From 6d0986f2aabee468bf57575e90d10418524bd752 Mon Sep 17 00:00:00 2001 From: hjhan Date: Fri, 28 Aug 2026 09:25:57 +0800 Subject: [PATCH 1/5] =?UTF-8?q?fix:=20=E9=A2=84=E4=BB=98=E9=87=91=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=A4=9A=E9=80=89=20chosen=20=E6=9C=89=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E9=A1=B9=E5=8D=B3=E9=9A=90=E8=97=8F=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E6=A1=86=EF=BC=8C=E7=A9=BA=E6=80=81=E6=81=A2=E5=A4=8D=E5=8D=A0?= =?UTF-8?q?=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 上一版仅全选时隐藏,仍有空框在剩余空间不足时换行占一行(簿记账户/资产类型单元格); 改为有任意选中项即隐藏(点选场景无需键盘过滤),全部取消后恢复占位提示 - 去掉搜索框 max-width 限宽:空态时全宽展示"请选择…" - 期限档位表操作列按钮去左边距+不换行,fixed 布局窄列下不再竖排 --- .../app/marginTemplate/marginTemplateV2DefaultEdit.js | 9 +++++---- .../app/marginTemplate/marginTemplateV2Edit.js | 9 +++++---- YLErpWeb/wwwroot/Style/Css/margin_template_v2Edit.css | 11 +++++++---- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2DefaultEdit.js b/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2DefaultEdit.js index 34699cb4..8fb25572 100644 --- a/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2DefaultEdit.js +++ b/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2DefaultEdit.js @@ -631,15 +631,16 @@ $(function () { if (!isNaN(idx)) vue.onUnderlyingTypeChange(idx); }); - //多选 chosen:可选项已全部选中时隐藏搜索框——没有剩余项可选,空搜索框只会把控件撑高一截; - //取消勾选后自动恢复。勾选变化会触发原 select 的 jQuery change(trigger_form_field_change), + //多选 chosen:已有选中项后隐藏搜索框——空框没有输入内容却占一行,放不下时还会换行留白 + //(本页多选均为点选场景,无需键盘过滤);全部取消后恢复,显示"请选择…"占位。 + //勾选变化会触发原 select 的 jQuery change(trigger_form_field_change), //加载重建/增删区块后的 refreshChosen 会触发 chosen:updated,两处都走这里的委托统一刷新 function refreshChosenSearchField(select) { var $sel = $(select); var $container = $sel.next('.chosen-container-multi'); if ($container.length === 0) return; - var allSelected = $sel.find('option').length > 0 && $sel.find('option:not(:selected)').length === 0; - $container.find('li.search-field').toggle(!allSelected); + var noneSelected = $sel.find('option:selected').length === 0; + $container.find('li.search-field').toggle(noneSelected); } $(document).on('change chosen:updated', 'select.chosen-select[multiple]', function () { refreshChosenSearchField(this); diff --git a/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2Edit.js b/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2Edit.js index f725c624..90a3d144 100644 --- a/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2Edit.js +++ b/YLErpWeb/wwwroot/Scripts/app/marginTemplate/marginTemplateV2Edit.js @@ -599,15 +599,16 @@ $(function () { if (!isNaN(idx)) vue.onUnderlyingTypeChange(idx); }); - //多选 chosen:可选项已全部选中时隐藏搜索框——没有剩余项可选,空搜索框只会把控件撑高一截; - //取消勾选后自动恢复。勾选变化会触发原 select 的 jQuery change(trigger_form_field_change), + //多选 chosen:已有选中项后隐藏搜索框——空框没有输入内容却占一行,放不下时还会换行留白 + //(本页多选均为点选场景,无需键盘过滤);全部取消后恢复,显示"请选择…"占位。 + //勾选变化会触发原 select 的 jQuery change(trigger_form_field_change), //加载重建/增删区块后的 refreshChosen 会触发 chosen:updated,两处都走这里的委托统一刷新 function refreshChosenSearchField(select) { var $sel = $(select); var $container = $sel.next('.chosen-container-multi'); if ($container.length === 0) return; - var allSelected = $sel.find('option').length > 0 && $sel.find('option:not(:selected)').length === 0; - $container.find('li.search-field').toggle(!allSelected); + var noneSelected = $sel.find('option:selected').length === 0; + $container.find('li.search-field').toggle(noneSelected); } $(document).on('change chosen:updated', 'select.chosen-select[multiple]', function () { refreshChosenSearchField(this); diff --git a/YLErpWeb/wwwroot/Style/Css/margin_template_v2Edit.css b/YLErpWeb/wwwroot/Style/Css/margin_template_v2Edit.css index 424ff76d..6d098cca 100644 --- a/YLErpWeb/wwwroot/Style/Css/margin_template_v2Edit.css +++ b/YLErpWeb/wwwroot/Style/Css/margin_template_v2Edit.css @@ -137,10 +137,13 @@ p { width: 4px; } -/*多选 chosen 的隐藏搜索框:全局 input[type=text] 152px 会把它撑宽到与已选标签挤不下而换行, - 在控件底部留出一截空行;限制宽度使 标签+搜索框 保持单行*/ -.form-layout .chosen-container-multi .chosen-choices li.search-field input { - max-width: 70px; +/*多选 chosen:有选中项后由页面 JS 隐藏搜索框(见 marginTemplateV2*Edit.js 的 refreshChosenSearchField), + 空态时搜索框独占控件全宽,负责展示"请选择…"占位*/ + +/*期限档位表操作列:delBtn 的 20px 左边距在 fixed 布局的窄列里会把"- 删除区块"挤成竖排*/ +.border.detail td .delBtn { + margin-left: 0; + white-space: nowrap; } /*区块标题(新模板信息/选择模板规则/参数组N):左色条 + 加粗,与表单正文分层*/ From 825ae87e383cccc0a4df35252e5cd60db6bf1486 Mon Sep 17 00:00:00 2001 From: hjhan Date: Fri, 28 Aug 2026 09:30:51 +0800 Subject: [PATCH 2/5] =?UTF-8?q?style:=20=E6=9C=9F=E9=99=90=E6=A1=A3?= =?UTF-8?q?=E4=BD=8D=E8=A1=A8=E5=86=85=E6=A0=87=E7=9A=84=E8=B5=84=E4=BA=A7?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=A4=9A=E9=80=89=E5=AE=B9=E5=99=A8=E6=92=91?= =?UTF-8?q?=E6=BB=A1=E5=8D=95=E5=85=83=E6=A0=BC=EF=BC=8C=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E6=A8=AA=E5=90=91=E6=8E=92=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpWeb/wwwroot/Style/Css/margin_template_v2Edit.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/YLErpWeb/wwwroot/Style/Css/margin_template_v2Edit.css b/YLErpWeb/wwwroot/Style/Css/margin_template_v2Edit.css index 6d098cca..d3e8dbd1 100644 --- a/YLErpWeb/wwwroot/Style/Css/margin_template_v2Edit.css +++ b/YLErpWeb/wwwroot/Style/Css/margin_template_v2Edit.css @@ -163,3 +163,9 @@ p { .border.detail table { table-layout: fixed; } + +/*标的资产类型多选(期限档位表单元格内):chosen 初始化取原生 select 的固有宽度(约 150px), + 窄容器放不下第二个已选标签,导致标签逐行竖排;单元格空间充足,容器撑满即可横向排列*/ +.border.detail .chosen-container-multi { + width: 100% !important; +} From 9717905245ddd8a628f09744ec6573ff7a588e68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=90=8D=E9=94=90?= <1565842059@qq.com> Date: Fri, 28 Aug 2026 09:44:47 +0800 Subject: [PATCH 3/5] =?UTF-8?q?feat(margin=5Ftemplate=5Fv2):=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=B0=BF=E8=AE=B0=E8=B4=A6=E6=88=B7=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 margin_template_v2 模型中新增 BookScopeName 属性用于显示簿记账户名称 - 更新客户端和服务端列表视图以显示适用簿记账户列 - 实现 SetBookScopeNames 方法将簿记账户ID转换为名称显示 - 添加 ParseBookIdsForDisplay 方法解析簿记账户ID列表 - 新增 MarginTemplateV2BookScopeTest 单元测试验证簿记账户范围逻辑 --- .../YLErp.Core/DBModels/margin_template_v2.cs | 13 +++ .../MarginTemplateV2BookScopeTest.cs | 110 ++++++++++++++++++ .../MarginModule/MarginTemplateService.cs | 60 ++++++++++ .../margin_template_v2ClientList.cshtml | 4 +- .../margin_template_v2DefaultList.cshtml | 4 +- 5 files changed, 189 insertions(+), 2 deletions(-) create mode 100644 UnitTestProject/Modules/CalcModules/MarginTemplateV2BookScopeTest.cs diff --git a/Framework/YLErp.Core/DBModels/margin_template_v2.cs b/Framework/YLErp.Core/DBModels/margin_template_v2.cs index f58cb003..c9ea9826 100644 --- a/Framework/YLErp.Core/DBModels/margin_template_v2.cs +++ b/Framework/YLErp.Core/DBModels/margin_template_v2.cs @@ -25,6 +25,19 @@ namespace YLErp.DBModels [Column("book_id")] public string BookIds { get; set; } + private string _bookScopeName; + + /// + /// 适用簿记账户名称,仅用于列表展示,不持久化。 + /// + [NotMapped] + [DisplayName("适用簿记账户")] + public string BookScopeName + { + get => string.IsNullOrWhiteSpace(BookIds) ? "全部" : _bookScopeName ?? string.Empty; + set => _bookScopeName = value; + } + /// /// 将簿记账户ID列表规范化为去空格、去重的逗号分隔字符串。 /// diff --git a/UnitTestProject/Modules/CalcModules/MarginTemplateV2BookScopeTest.cs b/UnitTestProject/Modules/CalcModules/MarginTemplateV2BookScopeTest.cs new file mode 100644 index 00000000..3da20b87 --- /dev/null +++ b/UnitTestProject/Modules/CalcModules/MarginTemplateV2BookScopeTest.cs @@ -0,0 +1,110 @@ +using YLErp.DBModels; +using YLErp.Modules.MarginModule; +using YLErp.Modules.SwapModule; + +namespace YLErp.Modules.CalcModules +{ + [TestClass] + public class MarginTemplateV2BookScopeTest + { + [TestMethod] + public void BS_001_空范围适用全部簿记账户() + { + var template = new margin_template_v2 { BookIds = null }; + + Assert.IsTrue(template.IsApplicableToBook(1)); + Assert.IsTrue(template.IsApplicableToBook(11)); + } + + [TestMethod] + public void BS_002_按完整token精确匹配避免1命中11() + { + var template = new margin_template_v2 { BookIds = "11, 12,11" }; + + Assert.IsFalse(template.IsApplicableToBook(1)); + Assert.IsTrue(template.IsApplicableToBook(11)); + Assert.IsTrue(template.IsApplicableToBook(12)); + Assert.AreEqual("11,12", margin_template_v2.NormalizeBookIds(template.BookIds)); + } + + [TestMethod] + public void BS_003_账户范围只接受正整数并规范前导零() + { + Assert.IsNull(margin_template_v2.NormalizeBookIds(null)); + Assert.IsNull(margin_template_v2.NormalizeBookIds(" ")); + Assert.AreEqual("1,2", margin_template_v2.NormalizeBookIds("001, 2,001")); + + Assert.ThrowsException(() => margin_template_v2.NormalizeBookIds("abc")); + Assert.ThrowsException(() => margin_template_v2.NormalizeBookIds("0")); + Assert.ThrowsException(() => margin_template_v2.NormalizeBookIds("-1")); + Assert.ThrowsException(() => margin_template_v2.NormalizeBookIds("1,,2")); + } + + [TestMethod] + public void BS_004_范围重叠空范围视为全部() + { + Assert.IsTrue(margin_template_v2.AreBookScopesOverlapping(null, "11")); + Assert.IsTrue(margin_template_v2.AreBookScopesOverlapping("11,12", "12,13")); + Assert.IsFalse(margin_template_v2.AreBookScopesOverlapping("1", "11")); + } + + [TestMethod] + public void BS_005_收集所有重叠范围的适用结构() + { + var candidates = new[] + { + new margin_template_v2 { BookIds = "1", TradeTypes = "收益互换" }, + new margin_template_v2 { BookIds = "2", TradeTypes = "香草期权" }, + new margin_template_v2 { BookIds = "3", TradeTypes = "远期" } + }; + + var tradeTypes = margin_template_v2.GetOverlappingTradeTypes(candidates, "1,2").ToList(); + + CollectionAssert.AreEquivalent(new[] { "收益互换", "香草期权" }, tradeTypes); + } + + [TestMethod] + public void BS_006_空交易ID不触发簿记账户查询() + { + Assert.IsNull(MarginTemplateV2RateHelper.GetTradeAssetId(null, null)); + Assert.IsNull(MarginTemplateV2RateHelper.GetTradeAssetId(0, null)); + } + + [TestMethod] + public void LEGACY_001_存量原样未知名称可保留() + { + Assert.IsTrue(SwapTradeService.CanKeepLegacyMarginTemplateName( + false, "历史模板", "历史模板", false)); + } + + [TestMethod] + public void LEGACY_002_新增交易的未知名称不可保留() + { + Assert.IsFalse(SwapTradeService.CanKeepLegacyMarginTemplateName( + true, "历史模板", "历史模板", false)); + } + + [TestMethod] + public void LEGACY_003_修改为不同未知名称不可保留() + { + Assert.IsFalse(SwapTradeService.CanKeepLegacyMarginTemplateName( + false, "历史模板", "另一历史模板", false)); + } + + [TestMethod] + public void LEGACY_004_已存在V2名称不作为历史值() + { + Assert.IsFalse(SwapTradeService.CanKeepLegacyMarginTemplateName( + false, "模板V2", "模板V2", true)); + } + + [TestMethod] + public void LEGACY_005_空名称不作为历史值() + { + Assert.IsFalse(SwapTradeService.CanKeepLegacyMarginTemplateName( + false, null, null, false)); + Assert.IsFalse(SwapTradeService.CanKeepLegacyMarginTemplateName( + false, " ", " ", false)); + } + } +} diff --git a/YLErpDAL/Modules/MarginModule/MarginTemplateService.cs b/YLErpDAL/Modules/MarginModule/MarginTemplateService.cs index 10539fbb..55ff63c5 100644 --- a/YLErpDAL/Modules/MarginModule/MarginTemplateService.cs +++ b/YLErpDAL/Modules/MarginModule/MarginTemplateService.cs @@ -1,4 +1,5 @@ using BaseOUDAL; +using System.Globalization; using YLErp.Model; namespace YLErp.Modules.MarginModule @@ -77,8 +78,67 @@ namespace YLErp.Modules.MarginModule } var retListResult = query.ToSearchList(req); + SetBookScopeNames(retListResult); return retListResult; } + + private void SetBookScopeNames(SearchListResult result) + { + var rows = result?.rows?.ToList(); + if (rows == null || rows.Count == 0) + { + return; + } + + var parsedRows = rows.Select(row => new + { + Row = row, + BookIds = row == null ? new List() : ParseBookIdsForDisplay(row.BookIds) + }).ToList(); + var bookIds = parsedRows.SelectMany(item => item.BookIds).Distinct().ToList(); + var bookNames = bookIds.Count == 0 + ? new Dictionary() + : DbContext.assetunit + .AsNoTracking() + .Where(book => bookIds.Contains(book.id)) + .Select(book => new { book.id, book.Name }) + .ToDictionary(book => book.id, book => book.Name); + + foreach (var item in parsedRows) + { + if (item.Row == null) + { + continue; + } + + item.Row.BookScopeName = string.IsNullOrWhiteSpace(item.Row.BookIds) + ? "全部" + : string.Join(",", item.BookIds + .Where(bookId => bookNames.ContainsKey(bookId)) + .Select(bookId => bookNames[bookId])); + } + + result.rows = rows; + } + + private static List ParseBookIdsForDisplay(string bookIds) + { + var ids = new List(); + if (string.IsNullOrWhiteSpace(bookIds)) + { + return ids; + } + + foreach (var rawId in bookIds.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + if (int.TryParse(rawId.Trim(), NumberStyles.None, CultureInfo.InvariantCulture, out var id) && id > 0) + { + ids.Add(id); + } + } + + return ids; + } } } diff --git a/YLErpWeb/Views/margin_template_v2/margin_template_v2ClientList.cshtml b/YLErpWeb/Views/margin_template_v2/margin_template_v2ClientList.cshtml index 161fb33e..7e0e4226 100644 --- a/YLErpWeb/Views/margin_template_v2/margin_template_v2ClientList.cshtml +++ b/YLErpWeb/Views/margin_template_v2/margin_template_v2ClientList.cshtml @@ -50,6 +50,8 @@ name: 'RuleType', label: '预付金规则', index: 'RuleType', width: 150, formatter: ruleTypeFormat }, { name: 'TradeTypes', label: '适用结构', index: 'TradeTypes', width: 460 + }, { + name: 'BookScopeName', label: '适用簿记账户', index: 'BookScopeName', width: 240 }]; function showToolName(cellValue, options, rowObject) { @@ -197,4 +199,4 @@ -@Html.Raw(JqGridSimple.OutTable()) \ No newline at end of file +@Html.Raw(JqGridSimple.OutTable()) diff --git a/YLErpWeb/Views/margin_template_v2/margin_template_v2DefaultList.cshtml b/YLErpWeb/Views/margin_template_v2/margin_template_v2DefaultList.cshtml index 2e841f0c..9f183439 100644 --- a/YLErpWeb/Views/margin_template_v2/margin_template_v2DefaultList.cshtml +++ b/YLErpWeb/Views/margin_template_v2/margin_template_v2DefaultList.cshtml @@ -49,6 +49,8 @@ name: 'RuleType', label: '预付金规则', index: 'RuleType', width: 150, formatter: ruleTypeFormat }, { name: 'TradeTypes', label: '适用结构', index: 'TradeTypes', width: 460 + }, { + name: 'BookScopeName', label: '适用簿记账户', index: 'BookScopeName', width: 240 }, { name: 'BuySellTypeName', label: '适用买卖方向', index: 'BuySellTypeName', width: 150 }, { @@ -201,4 +203,4 @@ -@Html.Raw(JqGridSimple.OutTable()) \ No newline at end of file +@Html.Raw(JqGridSimple.OutTable()) From b6a0573106587a6c70e7a582c38c9146669c806e Mon Sep 17 00:00:00 2001 From: tengyufan <1532636164@qq.com> Date: Fri, 28 Aug 2026 09:46:53 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=AE=8C=E5=96=84OA=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=8F=A3=E5=BE=84=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpDAL/Modules/TradeModule/TradeApprovalOAService.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/YLErpDAL/Modules/TradeModule/TradeApprovalOAService.cs b/YLErpDAL/Modules/TradeModule/TradeApprovalOAService.cs index 63baf9a4..1884fa2f 100644 --- a/YLErpDAL/Modules/TradeModule/TradeApprovalOAService.cs +++ b/YLErpDAL/Modules/TradeModule/TradeApprovalOAService.cs @@ -244,9 +244,10 @@ namespace YLErp.Modules.TradeModule // 3 + 结束:审批人批准,本地按通过处理; // 3 + 强制归档:OA 流程被强制关闭。正常情况下,本地发起 // forceEndOaFlow 后记录会先变为“归档中”、成功后变为“已归档”, - // 不会进入本轮待查询集合;若仍被查询到,则按客户确认的口径视为同意。 - // 0(非退回)及 1 + 审批人:草稿/待办,继续等待。 - // 其他组合也必须继续等待,不能仅凭 flowStatusType=1 或 3 推进本地流程。 + // 不会进入本轮待查询集合;若仍被查询到,则视为同意。 + // 0(非退回):草稿,继续等待。 + // 1 + 审批人:OA 待办,继续等待。 + // 其他组合也必须继续等待,不会仅凭 flowStatusType=1 或 3 推进本地流程。 var isReturned = flowStatusType == "0" && flowNode == "退回"; var isApproved = flowStatusType == "3" && (flowNode == "结束" || flowNode == "强制归档"); From 3f331f0e8303df6a36798c1f83dba0826c9a0c2c Mon Sep 17 00:00:00 2001 From: hjhan Date: Fri, 28 Aug 2026 09:54:09 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=E5=AE=A2=E6=88=B7=E9=A2=84?= =?UTF-8?q?=E4=BB=98=E9=87=91=E6=96=B0=E5=A2=9E=E6=94=AF=E6=8C=81=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E5=A4=9A=E9=80=89=E6=89=B9=E9=87=8F=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=EF=BC=8C=E7=A7=BB=E9=99=A4=E5=B9=BF=E5=8F=91=E5=95=86=E8=B4=B8?= =?UTF-8?q?=E5=AE=9A=E5=88=B6=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增弹窗客户名称改为 chosen 多选:保存时按选中客户逐条调用原有单条接口 (后端零改动,每条走完整互斥校验),逐条收集成败后统一汇总提示; 部分失败时刷新列表、弹窗保留供修正重试(重试已成功客户会被互斥校验拦截,不重复入库) - 编辑弹窗仍为单条绑定不变 - 删除 isGFSM(广发商贸)定制:客户等级下拉与切换 watchers、Span涨跌幅参数块; 本部署(国联民生)不涉及,后端接口保持原样 - 左栏加 tpl-base 统一控件宽度,多选搜索框隐藏行为与模板编辑页一致 --- .../client_margin_templateEdit.cshtml | 55 ++---- .../app/client/clientMarginTemplateEdit.js | 186 +++++++----------- 2 files changed, 92 insertions(+), 149 deletions(-) diff --git a/YLErpWeb/Views/client_margin_template/client_margin_templateEdit.cshtml b/YLErpWeb/Views/client_margin_template/client_margin_templateEdit.cshtml index 308784f8..cf7f5f76 100644 --- a/YLErpWeb/Views/client_margin_template/client_margin_templateEdit.cshtml +++ b/YLErpWeb/Views/client_margin_template/client_margin_templateEdit.cshtml @@ -10,8 +10,7 @@ isAdd = Model == null || Model.id == 0, marginTemplates = ViewBag.MarginTemplates, marginTemplate = ViewBag.MarginTemplate, - clientMarginTemplate = Model, - isGFSM = PS.Config.Company == CompanyEnum.广发商贸 + clientMarginTemplate = Model }; } @@ -43,26 +42,26 @@
-
+

新模板信息

- @if (pageObj.isGFSM) - { -
- - -
- }
- + @if (pageObj.isAdd) + { + @*新增:客户多选(类似适用簿记账户),保存时按选中客户逐条调用原有单条保存接口*@ + + } + else + { + @*编辑:单条绑定,仅改模板/日期,客户不可多选*@ + + }
@@ -98,7 +97,7 @@
-
@@ -109,26 +108,6 @@
- @if (PS.Config.Company == CompanyEnum.广发商贸) - { - - }