voc-validation-ch6-competitor.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // ==============================================================================
  2. // VOC 验证报告 · Ch6 竞品认知 · 6 竞品子章(快照模式)
  3. // 详见 ch2-package.js 头部说明。
  4. // ==============================================================================
  5. const fs = require('fs');
  6. const path = require('path');
  7. let _snapshot = null;
  8. function getSnapshot() {
  9. if (!_snapshot) {
  10. _snapshot = JSON.parse(fs.readFileSync(
  11. path.join(__dirname, '..', '_slides-snapshot.json'), 'utf8',
  12. ));
  13. }
  14. return _snapshot;
  15. }
  16. function fromSnapshot(id, slideNum) {
  17. const sec = getSnapshot()[id];
  18. if (!sec) {
  19. return `<section class="report-section" id="${id}" data-slide-num="${slideNum}"><div class="section-inner"><h2 class="text-h1">[Missing] ${id}</h2></div></section>`;
  20. }
  21. return sec.html.replace(/data-slide-num="[^"]+"/, `data-slide-num="${slideNum}"`);
  22. }
  23. function renderCompetitor1Huganpian({ slideNum } = {}) { return fromSnapshot('competitor-1', slideNum); }
  24. function renderCompetitor2Yishanfu({ slideNum } = {}) { return fromSnapshot('competitor-2', slideNum); }
  25. function renderCompetitor3Pianzaihuang({ slideNum } = {}) { return fromSnapshot('competitor-3', slideNum); }
  26. function renderCompetitor4Xiongdanfen({ slideNum } = {}) { return fromSnapshot('competitor-4', slideNum); }
  27. function renderCompetitor5Swisse({ slideNum } = {}) { return fromSnapshot('competitor-5', slideNum); }
  28. function renderCompetitor6Haiwang({ slideNum } = {}) { return fromSnapshot('competitor-6', slideNum); }
  29. module.exports = {
  30. renderCompetitor1Huganpian,
  31. renderCompetitor2Yishanfu,
  32. renderCompetitor3Pianzaihuang,
  33. renderCompetitor4Xiongdanfen,
  34. renderCompetitor5Swisse,
  35. renderCompetitor6Haiwang,
  36. };