From 24d0fab2714a1466c377f65817d3dacd97806c4b Mon Sep 17 00:00:00 2001 From: Codex Date: Tue, 13 Oct 2026 10:39:56 +0800 Subject: [PATCH] style: use tables in order sku details --- static/js/app.js | 59 +++++++++++-------- tests/test_packaging_loading_and_sku_modal.py | 8 +++ 2 files changed, 43 insertions(+), 24 deletions(-) diff --git a/static/js/app.js b/static/js/app.js index 43171b7..0876d9f 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -19824,37 +19824,48 @@ window.showSkuInfoModal = function(el, title) { html += '
订单在途
' + transitOrders.length + ' 笔
'; html += '
产品类型
' + escHtml(d.product_type || '-') + '
'; html += ''; - html += '
📋 基础信息
'; - fields.forEach(function(f) { - var k = f[0], v = f[1] !== undefined && f[1] !== null && f[1] !== '' ? String(f[1]) : '-'; - html += '
' + escHtml(k) + '' + escHtml(v) + '
'; - }); - html += '
'; + html += '
📋 基础信息
'; + html += ''; + for (var fieldIndex = 0; fieldIndex < fields.length; fieldIndex += 2) { + var leftField = fields[fieldIndex]; + var rightField = fields[fieldIndex + 1]; + var leftValue = leftField[1] !== undefined && leftField[1] !== null && leftField[1] !== '' ? String(leftField[1]) : '-'; + var rowBg = (fieldIndex / 2) % 2 === 0 ? '#ffffff' : '#f8fbff'; + html += ''; + if (rightField) { + var rightValue = rightField[1] !== undefined && rightField[1] !== null && rightField[1] !== '' ? String(rightField[1]) : '-'; + html += ''; + } else { + html += ''; + } + html += ''; + } + html += '
字段内容字段内容
' + escHtml(leftField[0]) + '' + escHtml(leftValue) + '' + escHtml(rightField[0]) + '' + escHtml(rightValue) + '
'; // 订单在途列表 - html += '
📦 订单在途
共 ' + transitOrders.length + ' 笔
'; - html += '
'; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; + html += '
📦 订单在途
共 ' + transitOrders.length + ' 笔
'; + html += '
下单时间编号名称下单数量采购跟单采购计划
'; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; html += ''; if (transitOrders.length > 0) { - transitOrders.forEach(function(o) { - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; + transitOrders.forEach(function(o, transitIndex) { + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; html += ''; }); } else { - html += ''; + html += ''; } html += '
下单时间编号名称下单数量采购跟单采购计划
' + escHtml(o['下单时间'] || '-') + '' + escHtml(o['编码'] || '') + '' + escHtml(o['名称'] || '-') + '' + (parseInt(o['下单数量']) || 0).toLocaleString() + '' + escHtml(o['采购跟单'] || '-') + '' + escHtml(o['采购计划'] || '-') + '
' + escHtml(o['下单时间'] || '-') + '' + escHtml(o['编码'] || '') + '' + escHtml(o['名称'] || '-') + '' + (parseInt(o['下单数量']) || 0).toLocaleString() + '' + escHtml(o['采购跟单'] || '-') + '' + escHtml(o['采购计划'] || '-') + '
暂无在途订单
暂无在途订单
'; diff --git a/tests/test_packaging_loading_and_sku_modal.py b/tests/test_packaging_loading_and_sku_modal.py index 8f7f5d6..9b95aa8 100644 --- a/tests/test_packaging_loading_and_sku_modal.py +++ b/tests/test_packaging_loading_and_sku_modal.py @@ -32,6 +32,14 @@ class PackagingLoadingAndSkuModalTest(unittest.TestCase): self.assertIn('订单在途', APP_JS) self.assertIn('grid-template-columns:repeat(2,minmax(0,1fr))', APP_JS) + def test_sku_information_sections_use_bordered_tables_with_colored_headers(self): + self.assertIn('class="sku-info-basic-table"', APP_JS) + self.assertIn('class="sku-info-transit-table"', APP_JS) + self.assertIn('border:1px solid #b8c8db', APP_JS) + self.assertIn('border:1px solid #b9cdbf', APP_JS) + self.assertIn('background:#eef6ff', APP_JS) + self.assertIn('background:#edf8f0', APP_JS) + if __name__ == '__main__': unittest.main()