const crcTool = require('../../tools/crc-hash/crc-tool.js') const asciiCodeTool = require('../../tools/ascii-code/index.js') const filterCalculator = require('../../tools/filter/index.js') const smdCodeCalculator = require('../../tools/smd-code/index.js') const refrigerationCalculator = require('../../tools/refrigeration/index.js') const reactanceCalculator = require('../../tools/reactance/index.js') const threePhasePowerCalculator = require('../../tools/three-phase-power/index.js') const { getWxApi } = require('../../utils/base-utils.js') const crcHandlers = require('./handlers/crc.js') const asciiCodeHandlers = require('./handlers/ascii-code.js') const filterHandlers = require('./handlers/filter.js') const reactanceHandlers = require('./handlers/reactance.js') const refrigerationHandlers = require('./handlers/refrigeration.js') const smdCodeHandlers = require('./handlers/smd-code.js') const threePhasePowerHandlers = require('./handlers/three-phase-power.js') const TOOL_MODULES = [ { view: 'crc', label: 'CRC与哈希计算', icon: 'icon-crc', iconSrc: '/assets/icons/hash-white.png', calculator: crcTool, handlers: crcHandlers.handlers }, { view: 'asciiCode', label: 'ASCII/数值转换', icon: 'icon-terminal', iconSrc: '/assets/icons/terminal-white.png', calculator: asciiCodeTool, handlers: asciiCodeHandlers.handlers }, { view: 'filter', label: '滤波器计算', icon: 'icon-filter', iconSrc: '/assets/icons/funnel-white.png', calculator: filterCalculator, handlers: filterHandlers.handlers }, { view: 'reactance', label: '电抗计算', icon: 'icon-reactance', iconSrc: '/assets/icons/audio-waveform-white.png', calculator: reactanceCalculator, handlers: reactanceHandlers.handlers }, { view: 'smdCode', label: '贴片电阻/容代码', icon: 'icon-smd', iconSrc: '/assets/icons/microchip-white.png', calculator: smdCodeCalculator, handlers: smdCodeHandlers.handlers }, { view: 'refrigeration', label: '制冷计算', icon: 'icon-snow', iconSrc: '/assets/icons/snowflake-white.png', calculator: refrigerationCalculator, handlers: refrigerationHandlers.handlers }, { view: 'threePhasePower', label: '三相功率计算', icon: 'icon-three-phase', iconSrc: '/assets/icons/zap-white.png', calculator: threePhasePowerCalculator, handlers: threePhasePowerHandlers.handlers } ] const TOOL_ENTRIES = TOOL_MODULES.map((item) => ({ icon: item.icon, iconSrc: item.iconSrc, label: item.label, view: item.view })) function getToolEntries() { return TOOL_ENTRIES.map((item) => ({ ...item })) } function isToolView(view) { return TOOL_ENTRIES.some((item) => item.view === view) } function getToolEntry(view) { return TOOL_ENTRIES.find((item) => item.view === view) || null } function getToolTitle(view) { const entry = getToolEntry(view) return entry ? entry.label : '' } function createToolInitialState() { return TOOL_MODULES.reduce((state, item) => { if (!item.calculator || typeof item.calculator.createInitialState !== 'function') return state return { ...state, ...item.calculator.createInitialState() } }, {}) } const toolNavigation = { getToolEntry, getToolEntries, getToolTitle, isToolView } function copyToolResult(event) { const value = event && event.currentTarget && event.currentTarget.dataset ? event.currentTarget.dataset.value : '' const text = String(value === undefined || value === null ? '' : value).trim() if (!text || text === '--') return const wxApi = getWxApi() if (typeof wxApi.setClipboardData !== 'function') { if (this.pageToast) this.pageToast.show('当前环境不支持复制', 'error') return } wxApi.setClipboardData({ data: text, fail: () => { if (this.pageToast) this.pageToast.show('复制失败', 'error') }, success: () => { if (this.pageToast) this.pageToast.show('已复制') } }) } function createToolHandlers() { return TOOL_MODULES.reduce((handlers, item) => { if (!item.handlers) return handlers return { ...handlers, ...item.handlers } }, {}) } const toolPageHandlers = { copyToolResult, ...createToolHandlers() } module.exports = { createToolInitialState, toolNavigation, toolPageHandlers }