#!/usr/bin/env python3 """添加字段设置弹窗 + 列可见性控制""" with open('static/js/app.js', 'r') as f: js = f.read() # 列定义 DOMESTIC_COLUMNS = [ ('日期','日期',True),('计划下单时间','计划下单时间',True),('新旧品','新旧品',True), ('编码','编码',True),('名称','名称',True),('下单备注','下单备注',True), ('单价','单价',True),('是否审核价格','审核价格',True),('数量','数量',True), ('金额','金额',True),('供货商','供货商',True),('仓库','仓库',True), ('金蝶采购单','金蝶采购单',True),('采购员','采购员',True),('下单人','下单人',True), ('进度','进度',True),('旺店通生产单号','旺店通单号',True),('是否已录入旺店通','录入旺店通',True), ('采购开发','采购开发',True),('实际到货日期','实际到货日期',True),('实际到货数量辅助','到货数量辅',True), ('辅助1','辅助1',True),('实际到货数量','实到数量',True),('未到货数','未到货数',True), ('预计到货日期','预计到货日期',True),('金蝶入库','金蝶入库',True),('状态','状态',True), ] for i in range(1, 32): DOMESTIC_COLUMNS.append((str(i), str(i), False)) DOMESTIC_COLUMNS.append(('父记录','父记录',False)) OVERSEAS_COLUMNS = [ ('日期','日期',True),('计划下单时间','计划下单时间',True),('产品编码','产品编码',True), ('单价','单价',True),('是否审核价格','审核价格',True),('数量','数量',True), ('金额','金额',True),('供应商','供应商',True),('仓库','仓库',True), ('货品名称','货品名称',True),('新旧品','新旧品',True),('是否已做采购单','已做采购单',True), ('是否做入库','已入库',True),('采购员','采购员',True),('下单人','下单人',True), ('进度','进度',True),('下单备注','下单备注',True),('采购开发','采购开发',True), ('旺店通生产单号','旺店通单号',True),('是否已录入到旺店通','录入旺店通',True), ('实际到货日期','实际到货日期',True),('实际到货数量辅助','到货数量辅',True), ('辅助','辅助',True),('实际到货数量','实到数量',True),('预计到货日期','预计到货日期',True), ('未到货数','未到货数',True),('状态','状态',True), ] for i in range(1, 32): OVERSEAS_COLUMNS.append((str(i), str(i), False)) # Generate JS code cols_js = [] for field, label, default in DOMESTIC_COLUMNS: cols_js.append(f" {{field:'{field}',label:'{label}',defShow:{str(default).lower()}}}") dom_cols_code = "const DOMESTIC_COLUMNS = [\n" + ",\n".join(cols_js) + "\n];" cols_js = [] for field, label, default in OVERSEAS_COLUMNS: cols_js.append(f" {{field:'{field}',label:'{label}',defShow:{str(default).lower()}}}") ov_cols_code = "const OVERSEAS_COLUMNS = [\n" + ",\n".join(cols_js) + "\n];" # 字段设置弹窗函数 modal_code = f""" // ─── 字段设置功能 ─── {dom_cols_code} {ov_cols_code} function getDomesticVisible() {{ var stored = localStorage.getItem('domesticColVisible'); if (stored) {{ try {{ var m = JSON.parse(stored); return m; }} catch(e) {{}} }} var m = {{}}; DOMESTIC_COLUMNS.forEach(function(c) {{ m[c.field] = c.defShow; }}); return m; }} function getOverseasVisible() {{ var stored = localStorage.getItem('overseasColVisible'); if (stored) {{ try {{ var m = JSON.parse(stored); return m; }} catch(e) {{}} }} var m = {{}}; OVERSEAS_COLUMNS.forEach(function(c) {{ m[c.field] = c.defShow; }}); return m; }} function saveDomesticVisible(m) {{ localStorage.setItem('domesticColVisible', JSON.stringify(m)); }} function saveOverseasVisible(m) {{ localStorage.setItem('overseasColVisible', JSON.stringify(m)); }} function openDomesticColModal() {{ openColSettingsModal('domestic', DOMESTIC_COLUMNS, getDomesticVisible(), saveDomesticVisible); }} function openOverseasColModal() {{ openColSettingsModal('overseas', OVERSEAS_COLUMNS, getOverseasVisible(), saveOverseasVisible); }} function openColSettingsModal(type, columns, visibleMap, saveFn) {{ var overlay = document.createElement('div'); overlay.className = 'modal-overlay'; overlay.style.cssText = 'display:flex;z-index:9999'; var html = ''; overlay.innerHTML = html; document.body.appendChild(overlay); }} window.toggleColAll = function(checked) {{ document.querySelectorAll('.col-checkbox').forEach(function(cb) {{ cb.checked = checked; }}); }}; window.updateColSelectAll = function() {{ var all = document.querySelectorAll('.col-checkbox'); var checked = document.querySelectorAll('.col-checkbox:checked'); var selectAll = document.getElementById('colSelectAll'); if (selectAll) selectAll.checked = (all.length === checked.length); }}; window.resetColDefaults = function(type) {{ var cols = type === 'domestic' ? DOMESTIC_COLUMNS : OVERSEAS_COLUMNS; document.querySelectorAll('.col-checkbox').forEach(function(cb) {{ var col = cols.find(function(c) {{ return c.field === cb.value; }}); cb.checked = col ? col.defShow : false; }}); updateColSelectAll(); }}; window.applyColSettings = function(type) {{ var cols = type === 'domestic' ? DOMESTIC_COLUMNS : OVERSEAS_COLUMNS; var visible = {{}}; document.querySelectorAll('.col-checkbox').forEach(function(cb) {{ visible[cb.value] = cb.checked; }}); if (type === 'domestic') {{ saveDomesticVisible(visible); domesticLoadOrders(1); }} else {{ saveOverseasVisible(visible); overseasLoadOrders(1); }} document.querySelector('.modal-overlay').remove(); }}; """ # 在 editRemark 前插入 target = "window.editRemark = function(td, id, field, apiEndpoint) {" if target in js: js = js.replace(target, modal_code + "\n" + target) print("✅ 添加字段设置弹窗代码") else: print("❌ 未找到插入点") # 也把 each 的 polyfill 加上(IE兼容) - 不需要,现代浏览器都支持 with open('static/js/app.js', 'w') as f: f.write(js) print("✅ 完成")