1
0

index.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. const crcTool = require('../../tools/crc-hash/crc-tool.js')
  2. const asciiCodeTool = require('../../tools/ascii-code/index.js')
  3. const filterCalculator = require('../../tools/filter/index.js')
  4. const smdCodeCalculator = require('../../tools/smd-code/index.js')
  5. const refrigerationCalculator = require('../../tools/refrigeration/index.js')
  6. const reactanceCalculator = require('../../tools/reactance/index.js')
  7. const threePhasePowerCalculator = require('../../tools/three-phase-power/index.js')
  8. const {
  9. getWxApi
  10. } = require('../../utils/base-utils.js')
  11. const crcHandlers = require('./handlers/crc.js')
  12. const asciiCodeHandlers = require('./handlers/ascii-code.js')
  13. const filterHandlers = require('./handlers/filter.js')
  14. const reactanceHandlers = require('./handlers/reactance.js')
  15. const refrigerationHandlers = require('./handlers/refrigeration.js')
  16. const smdCodeHandlers = require('./handlers/smd-code.js')
  17. const threePhasePowerHandlers = require('./handlers/three-phase-power.js')
  18. const TOOL_MODULES = [
  19. { view: 'bootloader', label: 'BootLoader升级', icon: 'icon-chip', iconSrc: '/assets/icons/chip-white.png' },
  20. { view: 'crc', label: 'CRC与哈希计算', icon: 'icon-crc', iconSrc: '/assets/icons/hash-white.png', calculator: crcTool, handlers: crcHandlers.handlers },
  21. { view: 'asciiCode', label: 'ASCII/数值转换', icon: 'icon-terminal', iconSrc: '/assets/icons/terminal-white.png', calculator: asciiCodeTool, handlers: asciiCodeHandlers.handlers },
  22. { view: 'filter', label: '滤波器计算', icon: 'icon-filter', iconSrc: '/assets/icons/funnel-white.png', calculator: filterCalculator, handlers: filterHandlers.handlers },
  23. { view: 'reactance', label: '电抗计算', icon: 'icon-reactance', iconSrc: '/assets/icons/audio-waveform-white.png', calculator: reactanceCalculator, handlers: reactanceHandlers.handlers },
  24. { view: 'smdCode', label: '贴片电阻/容代码', icon: 'icon-smd', iconSrc: '/assets/icons/microchip-white.png', calculator: smdCodeCalculator, handlers: smdCodeHandlers.handlers },
  25. { view: 'refrigeration', label: '制冷计算', icon: 'icon-snow', iconSrc: '/assets/icons/snowflake-white.png', calculator: refrigerationCalculator, handlers: refrigerationHandlers.handlers },
  26. { view: 'threePhasePower', label: '三相功率计算', icon: 'icon-three-phase', iconSrc: '/assets/icons/zap-white.png', calculator: threePhasePowerCalculator, handlers: threePhasePowerHandlers.handlers }
  27. ]
  28. const TOOL_ENTRIES = TOOL_MODULES.map((item) => ({
  29. icon: item.icon,
  30. iconSrc: item.iconSrc,
  31. label: item.label,
  32. view: item.view
  33. }))
  34. function getToolEntries() {
  35. return TOOL_ENTRIES.map((item) => ({ ...item }))
  36. }
  37. function isToolView(view) {
  38. return TOOL_ENTRIES.some((item) => item.view === view)
  39. }
  40. function getToolEntry(view) {
  41. return TOOL_ENTRIES.find((item) => item.view === view) || null
  42. }
  43. function getToolTitle(view) {
  44. const entry = getToolEntry(view)
  45. return entry ? entry.label : ''
  46. }
  47. function createToolInitialState() {
  48. return TOOL_MODULES.reduce((state, item) => {
  49. if (!item.calculator || typeof item.calculator.createInitialState !== 'function') return state
  50. return {
  51. ...state,
  52. ...item.calculator.createInitialState()
  53. }
  54. }, {})
  55. }
  56. const toolNavigation = {
  57. getToolEntry,
  58. getToolEntries,
  59. getToolTitle,
  60. isToolView
  61. }
  62. function copyToolResult(event) {
  63. const value = event && event.currentTarget && event.currentTarget.dataset
  64. ? event.currentTarget.dataset.value
  65. : ''
  66. const text = String(value === undefined || value === null ? '' : value).trim()
  67. if (!text || text === '--') return
  68. const wxApi = getWxApi()
  69. if (typeof wxApi.setClipboardData !== 'function') {
  70. if (this.pageToast) this.pageToast.show('当前环境不支持复制', 'error')
  71. return
  72. }
  73. wxApi.setClipboardData({
  74. data: text,
  75. fail: () => {
  76. if (this.pageToast) this.pageToast.show('复制失败', 'error')
  77. },
  78. success: () => {
  79. if (this.pageToast) this.pageToast.show('已复制')
  80. }
  81. })
  82. }
  83. function createToolHandlers() {
  84. return TOOL_MODULES.reduce((handlers, item) => {
  85. if (!item.handlers) return handlers
  86. return {
  87. ...handlers,
  88. ...item.handlers
  89. }
  90. }, {})
  91. }
  92. const toolPageHandlers = {
  93. copyToolResult,
  94. ...createToolHandlers()
  95. }
  96. module.exports = {
  97. createToolInitialState,
  98. toolNavigation,
  99. toolPageHandlers
  100. }