test-fix-remark.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. // 测试修复后的 {remark} 替换逻辑
  2. console.log('=== 测试修复后的 {remark} 替换逻辑 ===\n');
  3. // 模拟数据库中的模板(实际配置)
  4. const databaseTemplate = `订单号: {orderNo}
  5. 时间: {orderTime}
  6. 商品: {goodsList}
  7. 合计: {totalAmount}
  8. 备注1: {remark}
  9. 收货人姓名: {receiverName}
  10. 地址: {address}
  11. 联系电话: {phone}`;
  12. // 模拟打印内容中的模板(实际打印出来的)
  13. const printedTemplate = `订单号: {orderNo}
  14. 时间: {orderTime}
  15. 商品: {goodsList}
  16. 合计: {payAmount}
  17. 备注: {remark}
  18. 收货人姓名: {receiverName}
  19. 地址: {address}
  20. 联系电话: {receiverPhone}`;
  21. // 模拟变量
  22. const variables = {
  23. orderNo: 'ORD20251210112844577127',
  24. orderTime: '2025-12-10 19:28:44',
  25. goodsList: '洗护产品6 × 1 = ¥0.01',
  26. totalAmount: '¥0.01',
  27. payAmount: '¥0.01',
  28. remark: '测试备注',
  29. receiverName: '1',
  30. address: '1',
  31. phone: '13100000000',
  32. receiverPhone: '13100000000'
  33. };
  34. // 修复后的替换逻辑
  35. function robustReplace(template, variables, tenantId = 1) {
  36. let content = template;
  37. console.log(`[租户${tenantId}] 模板变量替换前:`, {
  38. templateContainsRemark: template.includes('{remark}'),
  39. templatePreview: template.substring(0, 100) + (template.length > 100 ? '...' : '')
  40. });
  41. // 使用更健壮的替换方法,处理各种格式的占位符
  42. for (const [key, value] of Object.entries(variables)) {
  43. // 处理多种格式的占位符:{key}、{ key }、{{key}}等
  44. const patterns = [
  45. `{${key}}`, // 标准格式
  46. `{ ${key} }`, // 有空格
  47. `{{${key}}}`, // 双大括号
  48. `{{ ${key} }}`, // 双大括号有空格
  49. `{${key} }`, // 右空格
  50. `{ ${key}}`, // 左空格
  51. ];
  52. for (const pattern of patterns) {
  53. if (content.includes(pattern)) {
  54. content = content.split(pattern).join(value);
  55. console.log(`[租户${tenantId}] 替换变量 ${key} (模式: ${pattern}): ${value}`);
  56. }
  57. }
  58. }
  59. // 清理未替换的变量(特别是remark)
  60. // 使用正则表达式匹配各种格式的{remark}
  61. const remarkPatterns = [
  62. /\{remark\}/g,
  63. /\{\s*remark\s*\}/g,
  64. /\{\{remark\}\}/g,
  65. /\{\{\s*remark\s*\}\}/g,
  66. ];
  67. let hasUnreplacedRemark = false;
  68. for (const pattern of remarkPatterns) {
  69. if (pattern.test(content)) {
  70. hasUnreplacedRemark = true;
  71. console.log(`[租户${tenantId}] 模板中仍有未替换的remark占位符(模式: ${pattern.source}),使用默认值替换`);
  72. content = content.replace(pattern, variables.remark || '无备注');
  73. }
  74. }
  75. // 记录是否有未替换的remark
  76. if (hasUnreplacedRemark) {
  77. console.log(`[租户${tenantId}] 清理了未替换的remark占位符`);
  78. }
  79. console.log(`[租户${tenantId}] 模板变量替换后,是否还有{remark}:`, content.includes('{remark}') || content.includes('{ remark }'));
  80. return content;
  81. }
  82. // 测试1: 数据库模板
  83. console.log('\n=== 测试1: 数据库模板 (备注1: {remark}) ===');
  84. const result1 = robustReplace(databaseTemplate, variables);
  85. console.log('\n替换结果:');
  86. console.log(result1);
  87. // 测试2: 打印模板
  88. console.log('\n\n=== 测试2: 打印模板 (备注: {remark}) ===');
  89. const result2 = robustReplace(printedTemplate, variables);
  90. console.log('\n替换结果:');
  91. console.log(result2);
  92. // 测试3: 空备注
  93. console.log('\n\n=== 测试3: 空备注测试 ===');
  94. const emptyVariables = {
  95. ...variables,
  96. remark: null
  97. };
  98. const result3 = robustReplace(printedTemplate, emptyVariables);
  99. console.log('\n替换结果:');
  100. console.log(result3);
  101. // 测试4: 有空格的情况
  102. console.log('\n\n=== 测试4: 有空格的情况 ===');
  103. const spacedTemplate = `订单号: { orderNo }
  104. 时间: {orderTime }
  105. 商品: { goodsList }
  106. 合计: {totalAmount }
  107. 备注: { remark }
  108. 收货人姓名: {receiverName}
  109. 地址: { address }
  110. 联系电话: { phone }`;
  111. const result4 = robustReplace(spacedTemplate, variables);
  112. console.log('\n替换结果:');
  113. console.log(result4);
  114. // 测试5: 双大括号情况
  115. console.log('\n\n=== 测试5: 双大括号情况 ===');
  116. const doubleBraceTemplate = `订单号: {{orderNo}}
  117. 时间: {{orderTime}}
  118. 商品: {{goodsList}}
  119. 合计: {{totalAmount}}
  120. 备注: {{remark}}
  121. 收货人姓名: {{receiverName}}
  122. 地址: {{address}}
  123. 联系电话: {{phone}}`;
  124. const result5 = robustReplace(doubleBraceTemplate, variables);
  125. console.log('\n替换结果:');
  126. console.log(result5);