diff --git a/Antis.Erp.Plat/antis-ncc-admin/src/views/wtXsckd/detail-view.vue b/Antis.Erp.Plat/antis-ncc-admin/src/views/wtXsckd/detail-view.vue index 25e8645..1cec348 100644 --- a/Antis.Erp.Plat/antis-ncc-admin/src/views/wtXsckd/detail-view.vue +++ b/Antis.Erp.Plat/antis-ncc-admin/src/views/wtXsckd/detail-view.vue @@ -320,6 +320,7 @@ export default { if (ly == null || ly === '') return '无' if (ly === '门店') return '门店(收银台)' if (ly === '抖音订单') return '抖音订单' + if (ly === '后台') return '后台' return ly }, formatDjrq(ts) { diff --git a/Antis.Erp.Plat/antis-ncc-admin/src/views/wtXsckd/index.vue b/Antis.Erp.Plat/antis-ncc-admin/src/views/wtXsckd/index.vue index 3f8ba12..e280001 100644 --- a/Antis.Erp.Plat/antis-ncc-admin/src/views/wtXsckd/index.vue +++ b/Antis.Erp.Plat/antis-ncc-admin/src/views/wtXsckd/index.vue @@ -240,14 +240,14 @@ this.getskzhOptions(); }, methods: { - /** 收银台/抖音等:不走 ERP 二级审核、仅查看 */ + /** 非「后台」来源:不走 ERP 审核(与后端 IsSalesOutboundSkipErpAudit 一致;ly 空视为后台需审) */ isSkipErpAuditSource(row) { if (!row) return false - const ly = row.ly - if (ly === '门店' || ly === '抖音订单' || ly === '抖音抓单') return true const bz = row.bz != null && row.bz !== '' ? String(row.bz).trim() : '' if (bz.startsWith('抖音订单:')) return true - return false + const ly = row.ly != null && row.ly !== '' ? String(row.ly).trim() : '' + if (ly === '') return false + return ly !== '后台' }, /** 后台来源且草稿可编辑 */ canEditDraft(row) { @@ -272,6 +272,7 @@ if (ly == null || ly === '') return '无' if (ly === '门店') return '门店(收银台)' if (ly === '抖音订单') return '抖音订单' + if (ly === '后台') return '后台' return ly }, // ✅ 原价:优先使用后端存储的 ydje(与收银台订单原价一致),无则用 收款+优惠 兼容旧数据 diff --git a/Antis.Erp.Plat/netcore/src/Modularity/Extend/NCC.Extend/WtXsckdService.cs b/Antis.Erp.Plat/netcore/src/Modularity/Extend/NCC.Extend/WtXsckdService.cs index 55e350d..cafcc49 100644 --- a/Antis.Erp.Plat/netcore/src/Modularity/Extend/NCC.Extend/WtXsckdService.cs +++ b/Antis.Erp.Plat/netcore/src/Modularity/Extend/NCC.Extend/WtXsckdService.cs @@ -832,6 +832,11 @@ namespace NCC.Extend.WtXsckd entity.Ydje = input.ydje; entity.Cbje = input.cbje; entity.Bjsx = input.bjsx; + // 收银台/抖音等 JSON 为小写 ly、djzt、skmx;Mapster 在部分环境下未映射到实体 Pascal 属性, + // 配合 Insertable(ignoreNullColumn: true) 会导致整列不落库 → 免审与待办过滤失效。显式写入。 + entity.Ly = input.ly; + entity.Djzt = input.djzt; + entity.Skmx = input.skmx; // 获取用户ID(匿名访问时为null或空字符串) string? userId = null; @@ -1587,7 +1592,7 @@ namespace NCC.Extend.WtXsckd var oldHeader = await _db.Queryable().FirstAsync(p => p.Id == id); var oldMxList = await _db.Queryable().Where(u => u.Djbh == id).ToListAsync(); if (IsSalesOutboundSkipErpAudit(oldHeader)) - throw NCCException.Bah("收银台或抖音等外部来源的销售出库单不允许在此修改"); + throw NCCException.Bah("非后台来源的销售出库单不允许在此修改"); var entity = input.Adapt(); entity.Bjsx = input.bjsx; @@ -2861,23 +2866,20 @@ LIMIT {offset}, {pageSize}"; } /// - /// 销售出库单是否跳过 ERP 二级审核:收银台「门店」、抖音「抖音订单/抖音抓单」、或备注为抖音发货脚本格式(抖音订单:…)。 + /// 销售出库单是否跳过 ERP 审核:仅「单据来源 ly 为后台或空(未标记,视同后台录入需审)」走审核; + /// ly 有值且不为「后台」则免审;备注「抖音订单:」开头免审(兼容早期仅写备注的抖音单)。 /// private static bool IsSalesOutboundSkipErpAudit(WtXsckdEntity entity) { if (entity == null) return false; if (!string.Equals(entity.Djlx, "销售出库单", StringComparison.Ordinal)) return false; - var ly = entity.Ly?.Trim(); - if (!string.IsNullOrEmpty(ly)) - { - if (string.Equals(ly, "门店", StringComparison.Ordinal)) return true; - if (string.Equals(ly, "抖音订单", StringComparison.Ordinal)) return true; - if (string.Equals(ly, "抖音抓单", StringComparison.Ordinal)) return true; - } var bz = entity.Bz?.Trim(); if (!string.IsNullOrEmpty(bz) && bz.StartsWith("抖音订单:", StringComparison.Ordinal)) return true; - return false; + var ly = entity.Ly?.Trim(); + if (string.IsNullOrEmpty(ly)) + return false; + return !string.Equals(ly, "后台", StringComparison.Ordinal); } /// @@ -2905,10 +2907,22 @@ LIMIT {offset}, {pageSize}"; var entity = await _db.Queryable().Where(x => x.Id == id).FirstAsync(); if (entity == null) + { + _db.RollbackTran(); return new { success = false, message = "单据不存在" }; + } if (!string.IsNullOrEmpty(expectedDjlx) && entity.Djlx != expectedDjlx) + { + _db.RollbackTran(); return new { success = false, message = $"该单据不是{expectedDjlx},无法审核" }; + } + + if (entity.Djlx == "销售出库单" && IsSalesOutboundSkipErpAudit(entity)) + { + _db.RollbackTran(); + return new { success = false, message = "非后台来源的销售出库单无需在此审核" }; + } var actualDjlx = entity.Djlx; @@ -3108,7 +3122,7 @@ LIMIT {offset}, {pageSize}"; } /// - /// 审核销售出库单(支持两级审核)。收银台「门店」、抖音「抖音订单」等外部来源无需在此审核。 + /// 审核销售出库单(支持两级审核)。仅单据来源为「后台」或未标记来源的需审;其它来源无需在此审核。 /// /// 销售出库单主键 [HttpPost("ApproveSalesOutbound/{id}")] @@ -3116,7 +3130,7 @@ LIMIT {offset}, {pageSize}"; { var header = await _db.Queryable().FirstAsync(p => p.Id == id); if (header != null && IsSalesOutboundSkipErpAudit(header)) - return new { success = false, message = "收银台或抖音等外部来源的销售出库单无需在此审核" }; + return new { success = false, message = "非后台来源的销售出库单无需在此审核" }; return await ApproveDocument(id, "销售出库单", input?.remark); } @@ -3156,7 +3170,7 @@ LIMIT {offset}, {pageSize}"; return new { success = false, message = $"该单据不是{expectedDjlx},无法操作" }; if (entity.Djlx == "销售出库单" && IsSalesOutboundSkipErpAudit(entity)) - return new { success = false, message = "收银台或抖音等外部来源的销售出库单无需在此审核" }; + return new { success = false, message = "非后台来源的销售出库单无需在此审核" }; if (entity.Djzt == "已审核") return new { success = false, message = "该单据已审核通过,如需修改请使用反审" }; diff --git a/Antis.Erp.Plat/netcore/src/Modularity/VisualDev/NCC.VisualDev/DashboardService.cs b/Antis.Erp.Plat/netcore/src/Modularity/VisualDev/NCC.VisualDev/DashboardService.cs index 47c787e..cf4a0f6 100755 --- a/Antis.Erp.Plat/netcore/src/Modularity/VisualDev/NCC.VisualDev/DashboardService.cs +++ b/Antis.Erp.Plat/netcore/src/Modularity/VisualDev/NCC.VisualDev/DashboardService.cs @@ -346,12 +346,10 @@ namespace NCC.VisualDev { var list = new List(); list.AddRange(await QueryWtXsckdAuditTodosAsync("同价调拨单", userId, userAccount, null)); - // 与 ApproveSalesOutbound 一致:收银台门店、抖音来源、备注「抖音订单:」开头的不进待办 + // 仅单据来源为「后台」或未标记(ly 空)的销售出库单进待办;备注「抖音订单:」同后端免审规则 list.AddRange(await QueryWtXsckdAuditTodosAsync("销售出库单", userId, userAccount, - @"NOT ( - TRIM(IFNULL(d.ly, '')) IN ('门店', '抖音订单', '抖音抓单') - OR (TRIM(IFNULL(d.bz, '')) <> '' AND TRIM(d.bz) LIKE '抖音订单:%') -)")); + @"( TRIM(IFNULL(d.ly, '')) = '' OR TRIM(IFNULL(d.ly, '')) = '后台' ) + AND NOT ( TRIM(IFNULL(d.bz, '')) <> '' AND TRIM(d.bz) LIKE '抖音订单:%' )")); list.AddRange(await QueryWtXsckdAuditTodosAsync("销售退货单", userId, userAccount, null)); list.AddRange(await QueryWtXsckdAuditTodosAsync("采购入库单", userId, userAccount, null)); return list.OrderByDescending(x => x.creatorTime).ToList(); diff --git a/Antis.Erp.Plat/sy/PACKAGE_README.md b/Antis.Erp.Plat/sy/PACKAGE_README.md index cc35705..5508b20 100644 --- a/Antis.Erp.Plat/sy/PACKAGE_README.md +++ b/Antis.Erp.Plat/sy/PACKAGE_README.md @@ -23,6 +23,7 @@ package.bat ``` **注意**:Windows系统需要安装以下工具之一: + - 7-Zip(推荐) - WinRAR @@ -31,6 +32,7 @@ package.bat ## 📋 打包包含的文件 ### HTML文件 + - `login.html` - 登录页 - `home.html` - 商品列表页 - `settlement.html` - 收银台(核心功能) @@ -39,11 +41,13 @@ package.bat - `from.html` - 其他功能页 ### 资源目录 + - `css/` - 样式文件 - `js/` - JavaScript库(Vue.js, jQuery等) - `images/` - 图片资源 ### 文档文件 + - `README.md` - 项目说明 - `QUICK_START.md` - 快速开始指南 - `API_CONFIG.md` - API配置说明 @@ -51,6 +55,7 @@ package.bat - `LAUNCH_QUICK_REFERENCE.txt` - 快速参考 ### 启动脚本 + - `start.sh` - Linux/macOS启动脚本 - `start.bat` - Windows启动脚本 - `start_3001.sh` - 指定端口启动脚本 @@ -59,6 +64,7 @@ package.bat ## 🚫 排除的文件 以下文件**不会**被打包: + - `*.bak` - 备份文件 - `home copy.html` - 副本文件 - `axios-1.x/` - 开发依赖(已包含在js目录中) @@ -105,6 +111,7 @@ npx http-server . -p 8888 -c-1 ### Linux/macOS (`package.sh`) 修改以下部分: + ```bash # 添加要排除的文件 EXCLUDE_LIST=( @@ -117,6 +124,7 @@ EXCLUDE_LIST=( ### Windows (`package.bat`) 修改文件复制部分: + ```batch REM 添加要复制的文件或目录 copy "your_file.txt" "%TEMP_DIR%\" >nul @@ -133,22 +141,21 @@ copy "your_file.txt" "%TEMP_DIR%\" >nul 解压后检查以下文件是否存在: -- [ ] 所有HTML文件 -- [ ] `css/style.css` -- [ ] `js/vue.min.js` -- [ ] `js/jquery.min.js` -- [ ] `images/` 目录下的所有图标 -- [ ] 启动脚本文件 +- 所有HTML文件 +- `css/style.css` +- `js/vue.min.js` +- `js/jquery.min.js` +- `images/` 目录下的所有图标 +- 启动脚本文件 ## 📞 技术支持 如有问题,请检查: + 1. 打包脚本执行权限(Linux/macOS) 2. 压缩工具是否正确安装(Windows) 3. 文件路径是否正确 --- -**最后更新**:2025-12-22 - - +**最后更新**:2025-12-22 \ No newline at end of file