| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422 |
- const crcTool = require('./crc-tool')
- const filterCalculator = require('./filter-calculator')
- const smdCodeCalculator = require('./smd-code-calculator')
- const refrigerationCalculator = require('./refrigeration-calculator')
- const reactanceCalculator = require('./reactance-calculator')
- const threePhasePowerCalculator = require('./three-phase-power-calculator')
- const {
- getWxApi
- } = require('./platform-utils')
- function createToolInitialState() {
- return {
- ...crcTool.createInitialState(),
- ...filterCalculator.createInitialState(),
- ...smdCodeCalculator.createInitialState(),
- ...refrigerationCalculator.createInitialState(),
- ...reactanceCalculator.createInitialState(),
- ...threePhasePowerCalculator.createInitialState()
- }
- }
- const toolPageHandlers = {
- 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('已复制')
- }
- })
- },
- onCrcPresetChange(event) {
- const presetIndex = Number(event.detail.value)
- this.setData({
- ...crcTool.createPresetState(presetIndex),
- crcErrorText: ''
- })
- },
- onCrcInputTypeChange(event) {
- this.setData({
- crcErrorText: '',
- crcInputTypeIndex: Number(event.detail.value)
- })
- },
- onCrcConfigInput(event) {
- const field = event.currentTarget.dataset.field
- if (!field) return
- const isCrcConfigField = crcTool.CRC_CONFIG_FIELDS.includes(field)
- const nextData = {
- [field]: event.detail.value,
- crcErrorText: ''
- }
- if (isCrcConfigField) {
- nextData.crcAlgorithmCollapsed = false
- nextData.crcPresetIndex = crcTool.getCustomPresetIndex()
- }
- this.setData(nextData)
- },
- onCrcReflectChange(event) {
- const field = event.currentTarget.dataset.field
- if (!field) return
- this.setData({
- [field]: !!event.detail.value,
- crcAlgorithmCollapsed: false,
- crcErrorText: '',
- crcPresetIndex: crcTool.getCustomPresetIndex()
- })
- },
- toggleCrcAlgorithmPanel() {
- this.setData({
- crcAlgorithmCollapsed: !this.data.crcAlgorithmCollapsed
- })
- },
- onCrcDataInput(event) {
- this.crcFileBytes = null
- this.setData({
- crcDataText: event.detail.value,
- crcErrorText: '',
- crcFileName: '',
- crcFileSizeText: ''
- })
- },
- calculateCrc() {
- try {
- this.setData(crcTool.calculateFromState(this.data, this.crcFileBytes))
- } catch (error) {
- const message = error && error.message ? error.message : '计算失败'
- this.setData({
- crcErrorText: message
- })
- if (this.pageToast) this.pageToast.show(message, 'error')
- }
- },
- async loadCrcFileFromMessage() {
- try {
- const file = await crcTool.loadFileFromMessage()
- this.crcFileBytes = file.bytes
- this.setData({
- crcDataLengthText: file.sizeText,
- crcDataText: '',
- crcErrorText: '',
- crcFileName: file.name,
- crcFileSizeText: file.sizeText
- })
- this.calculateCrc()
- } catch (error) {
- const message = error && (error.errMsg || error.message)
- ? (error.errMsg || error.message)
- : '读取文件失败'
- if (!/cancel/i.test(message) && this.pageToast) {
- this.pageToast.show(message, 'error')
- }
- }
- },
- clearCrcInput() {
- this.crcFileBytes = null
- this.setData({
- crcDataLengthText: '0 bytes',
- crcDataText: '',
- crcErrorText: '',
- crcFileName: '',
- crcFileSizeText: '',
- crcResultBase64: '--',
- crcResultBin: '--',
- crcResultBinLines: [
- {
- id: 'bin-line-0',
- text: '--'
- }
- ],
- crcResultHex: '--'
- })
- },
- setFilterState(changedData) {
- this.setData(filterCalculator.updateState(this.data, changedData))
- },
- toggleFilterNetwork() {
- this.setFilterState({
- filterNetworkIndex: this.data.filterNetworkKey === 'rl' ? 0 : 1
- })
- },
- toggleFilterResponse() {
- this.setFilterState({
- filterResponseIndex: this.data.filterResponseKey === 'highpass' ? 0 : 1
- })
- },
- onFilterNetworkChange(event) {
- this.setFilterState({
- filterNetworkIndex: Number(event.detail.value)
- })
- },
- onFilterResponseChange(event) {
- this.setFilterState({
- filterResponseIndex: Number(event.detail.value)
- })
- },
- onFilterResistanceInput(event) {
- this.setFilterState({
- filterResistanceValue: event.detail.value
- })
- },
- onFilterReactiveInput(event) {
- this.setFilterState({
- filterReactiveValue: event.detail.value
- })
- },
- onFilterFrequencyInput(event) {
- this.setFilterState({
- filterFrequencyValue: event.detail.value
- })
- },
- clearFilterInputs() {
- this.ignoreFilterBlurUntil = Date.now() + 300
- this.setFilterState({
- filterFrequencyValue: '',
- filterReactiveValue: '',
- filterResistanceValue: ''
- })
- },
- onFilterResistanceUnitChange(event) {
- this.setFilterState({
- filterResistanceUnitIndex: Number(event.detail.value)
- })
- },
- onFilterReactiveUnitChange(event) {
- const unitIndex = Number(event.detail.value)
- const field = this.data.filterNetworkKey === 'rl'
- ? 'filterInductanceUnitIndex'
- : 'filterCapacitanceUnitIndex'
- this.setFilterState({
- [field]: unitIndex
- })
- },
- onFilterFrequencyUnitChange(event) {
- this.setFilterState({
- filterFrequencyUnitIndex: Number(event.detail.value)
- })
- },
- onFilterValueBlur(event) {
- if (this.ignoreFilterBlurUntil && Date.now() < this.ignoreFilterBlurUntil) return
- const field = event.currentTarget.dataset.field
- const valueKeyMap = {
- frequency: 'filterFrequencyValue',
- reactive: 'filterReactiveValue',
- resistance: 'filterResistanceValue'
- }
- const valueKey = valueKeyMap[field]
- if (this.data.filterComputedKey === field && valueKey && !this.data[valueKey]) return
- this.setData(filterCalculator.normalizeValue(this.data, field, event.detail.value))
- },
- setSmdCodeState(changedData) {
- this.setData(smdCodeCalculator.updateState(this.data, changedData))
- },
- onSmdKindTap(event) {
- const kind = event.currentTarget.dataset.kind
- const kindIndex = (this.data.smdKindOptions || []).findIndex((item) => item.key === kind)
- if (kindIndex < 0) return
- this.setSmdCodeState({
- smdFormatIndex: 0,
- smdFormatKey: '',
- smdKindIndex: kindIndex
- })
- },
- onSmdFormatTap(event) {
- const format = event.currentTarget.dataset.format
- const formatIndex = (this.data.smdFormatOptions || []).findIndex((item) => item.key === format)
- if (formatIndex < 0) return
- this.setSmdCodeState({
- smdFormatIndex: formatIndex,
- smdFormatKey: format
- })
- },
- onSmdCodeInput(event) {
- this.setSmdCodeState({
- smdCodeText: event.detail.value
- })
- },
- clearSmdCodeInput() {
- this.setSmdCodeState({
- smdCodeText: ''
- })
- },
- setCoolingState(changedData) {
- this.setData(refrigerationCalculator.updateState(this.data, changedData))
- },
- onCoolingModeTap(event) {
- const mode = event.currentTarget.dataset.mode
- const modeIndex = (this.data.coolingModeOptions || []).findIndex((item) => item.key === mode)
- if (modeIndex < 0) return
- this.setCoolingState({
- coolingModeIndex: modeIndex
- })
- },
- onCoolingModeChange(event) {
- this.setCoolingState({
- coolingModeIndex: Number(event.detail.value)
- })
- },
- onCoolingInput(event) {
- const field = event.currentTarget.dataset.field
- if (!field) return
- this.setCoolingState({
- [field]: event.detail.value
- })
- },
- clearCoolingInputs() {
- this.setData(refrigerationCalculator.clearInputs(this.data))
- },
- setThreePhasePowerState(changedData) {
- this.setData(threePhasePowerCalculator.updateState(this.data, changedData))
- },
- onThreePhaseConnectionTap(event) {
- const connection = event.currentTarget.dataset.connection
- const connectionIndex = (this.data.threePhaseConnectionOptions || []).findIndex((item) => item.key === connection)
- if (connectionIndex < 0) return
- this.setThreePhasePowerState({
- threePhaseConnectionIndex: connectionIndex
- })
- },
- onThreePhaseInput(event) {
- const field = event.currentTarget.dataset.field
- if (!field) return
- const changedData = {
- [field]: event.detail.value
- }
- if (threePhasePowerCalculator.ELECTRICAL_INPUT_KEYS.includes(field)) {
- changedData.threePhaseElectricalDriver = field
- }
- if (threePhasePowerCalculator.POWER_DRIVER_KEYS.includes(field)) {
- changedData.threePhasePowerDriver = field
- }
- this.setThreePhasePowerState(changedData)
- },
- clearThreePhaseInputs() {
- this.setData(threePhasePowerCalculator.clearInputs(this.data))
- },
- setReactanceState(changedData) {
- this.setData(reactanceCalculator.updateState(this.data, changedData))
- },
- toggleReactanceMode() {
- this.setReactanceState({
- reactanceModeIndex: this.data.reactanceModeKey === 'inductive' ? 0 : 1
- })
- },
- onReactanceFrequencyInput(event) {
- this.setReactanceState({
- reactanceFrequencyValue: event.detail.value
- })
- },
- onReactanceReactiveInput(event) {
- this.setReactanceState({
- reactanceReactiveValue: event.detail.value
- })
- },
- clearReactanceInputs() {
- this.ignoreReactanceBlurUntil = Date.now() + 300
- this.setData(reactanceCalculator.clearInputs(this.data))
- },
- onReactanceFrequencyUnitChange(event) {
- this.setReactanceState({
- reactanceFrequencyUnitIndex: Number(event.detail.value)
- })
- },
- onReactanceReactiveUnitChange(event) {
- const unitIndex = Number(event.detail.value)
- const field = this.data.reactanceModeKey === 'inductive'
- ? 'reactanceInductanceUnitIndex'
- : 'reactanceCapacitanceUnitIndex'
- this.setReactanceState({
- [field]: unitIndex
- })
- },
- onReactanceValueBlur(event) {
- if (this.ignoreReactanceBlurUntil && Date.now() < this.ignoreReactanceBlurUntil) return
- const field = event.currentTarget.dataset.field
- this.setData(reactanceCalculator.normalizeValue(this.data, field, event.detail.value))
- }
- }
- module.exports = {
- createToolInitialState,
- toolPageHandlers
- }
|