// 提取团队页全部正文文本(label/description/displayName/placeholderText/表格单元格) import fs from 'node:fs'; const raw = fs.readFileSync('e:/code/crm-backend-matt/.scratch/lanhu-latest/team-page-data.js', 'utf8'); const start = raw.indexOf('{'); let depth = 0, end = -1, inStr = false, esc = false; for (let i = start; i < raw.length; i++) { const c = raw[i]; if (esc) { esc = false; continue; } if (c === '\\') { esc = true; continue; } if (c === '"') inStr = !inStr; if (inStr) continue; if (c === '{') depth++; else if (c === '}') { depth--; if (depth === 0) { end = i; break; } } } const data = JSON.parse(raw.slice(start, end + 1)); const out = []; function walk(obj, path) { if (obj === null || typeof obj !== 'object') return; if (Array.isArray(obj)) { obj.forEach((v, i) => walk(v, `${path}[${i}]`)); return; } for (const [k, v] of Object.entries(obj)) { if (typeof v === 'string' && (k === 'label' || k === 'description' || k === 'displayName' || k === 'placeholderText' || k === 'name' || k === '') && v.trim() && /[\u4e00-\u9fa5A-Za-z0-9]/.test(v) && !v.startsWith('images/') && !/^'?.*(sans-serif|Arial|微软)/.test(v)) { out.push(`[${k}] ${v.trim().slice(0, 200)}`); } else if (v && typeof v === 'object') walk(v, `${path}.${k}`); } } walk(data.page, 'page'); walk(data.masters, 'masters'); const uniq = [...new Set(out)]; console.log(`total=${out.length} unique=${uniq.length}`); uniq.forEach((l, i) => console.log(String(i + 1).padStart(3), l));