| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759 |
- <navigation-bar background="{{themeMode === 'dark' ? '#111827' : '#FFF'}}"></navigation-bar>
- <view wx:if="{{toastText}}" class="page-toast page-toast--{{toastType}} {{themeClass}}">
- {{toastText}}
- </view>
- <view wx:if="{{activeSettingsView}}" class="subpage-fixed-header {{themeClass}}">
- <view class="subpage-page-header">
- <view class="subpage-back" bindtap="backToSettingsHome">
- <view class="subpage-back-icon"></view>
- </view>
- <view class="subpage-page-title">{{activeSettingsTitle}}</view>
- </view>
- </view>
- <scroll-view class="scrollarea {{themeClass}} {{activeSettingsView ? 'scrollarea--subpage' : ''}}" scroll-y type="list">
- <view class="page-shell">
- <block wx:if="{{activeSettingsView}}">
- <block wx:if="{{activeSettingsView == 'crc'}}">
- <view class="panel params-section-panel crc-algorithm-panel {{crcAlgorithmCollapsed ? 'panel--collapsed' : ''}}">
- <view class="param-row input-row">
- <picker
- class="crc-algorithm-picker"
- mode="selector"
- range="{{crcPresetOptions}}"
- range-key="label"
- value="{{crcPresetIndex}}"
- bindchange="onCrcPresetChange"
- >
- <view class="crc-algorithm-picker-content">
- <view class="param-main">
- <view class="param-name">算法</view>
- </view>
- <view class="generic-picker-value crc-picker-value">{{crcPresetOptions[crcPresetIndex].label}}</view>
- </view>
- </picker>
- <view
- class="collapse-toggle {{crcAlgorithmCollapsed ? 'is-collapsed' : ''}}"
- bindtap="toggleCrcAlgorithmPanel"
- >
- <view class="collapse-indicator"></view>
- </view>
- </view>
- <view wx:if="{{!crcAlgorithmCollapsed && (crcShowCrcConfig || crcShowHmacKey || crcShowPbkdf2Config)}}" class="crc-algorithm-fields">
- <block wx:if="{{crcShowCrcConfig}}">
- <view class="param-row input-row">
- <view class="param-main">
- <view class="param-name">位宽</view>
- <view class="param-meta">1 - 64</view>
- </view>
- <view class="input-wrap">
- <input class="value-input crc-config-input" type="number" data-field="crcWidth" value="{{crcWidth}}" bindinput="onCrcConfigInput" />
- </view>
- </view>
- <view class="param-row input-row">
- <view class="param-main">
- <view class="param-name">Poly</view>
- <view class="param-meta">HEX</view>
- </view>
- <view class="input-wrap">
- <input class="value-input crc-config-input" data-field="crcPoly" value="{{crcPoly}}" bindinput="onCrcConfigInput" />
- </view>
- </view>
- <view class="param-row input-row">
- <view class="param-main">
- <view class="param-name">初始值</view>
- <view class="param-meta">HEX</view>
- </view>
- <view class="input-wrap">
- <input class="value-input crc-config-input" data-field="crcInitialValue" value="{{crcInitialValue}}" bindinput="onCrcConfigInput" />
- </view>
- </view>
- <view class="param-row input-row">
- <view class="param-main">
- <view class="param-name">结果异或值</view>
- <view class="param-meta">HEX</view>
- </view>
- <view class="input-wrap">
- <input class="value-input crc-config-input" data-field="crcXorOut" value="{{crcXorOut}}" bindinput="onCrcConfigInput" />
- </view>
- </view>
- <view class="crc-switch-row">
- <view class="crc-switch-field">
- <view class="param-name">输入反转</view>
- <switch checked="{{crcReflectIn}}" color="#0f766e" data-field="crcReflectIn" bindchange="onCrcReflectChange" />
- </view>
- <view class="crc-switch-field">
- <view class="param-name">输出反转</view>
- <switch checked="{{crcReflectOut}}" color="#0f766e" data-field="crcReflectOut" bindchange="onCrcReflectChange" />
- </view>
- </view>
- </block>
- <block wx:elif="{{crcShowHmacKey}}">
- <view class="param-row input-row">
- <view class="param-main">
- <view class="param-name">密钥</view>
- <view class="param-meta">UTF-8</view>
- </view>
- <view class="input-wrap">
- <input class="value-input crc-config-input" data-field="crcHmacKey" value="{{crcHmacKey}}" bindinput="onCrcConfigInput" />
- </view>
- </view>
- </block>
- <block wx:elif="{{crcShowPbkdf2Config}}">
- <view class="param-row input-row">
- <view class="param-main">
- <view class="param-name">盐值</view>
- <view class="param-meta">UTF-8</view>
- </view>
- <view class="input-wrap">
- <input class="value-input crc-config-input" data-field="crcPbkdf2Salt" value="{{crcPbkdf2Salt}}" bindinput="onCrcConfigInput" />
- </view>
- </view>
- <view class="param-row input-row">
- <view class="param-main">
- <view class="param-name">迭代次数</view>
- <view class="param-meta">1 - 100000</view>
- </view>
- <view class="input-wrap">
- <input class="value-input crc-config-input" type="number" data-field="crcPbkdf2Iterations" value="{{crcPbkdf2Iterations}}" bindinput="onCrcConfigInput" />
- </view>
- </view>
- <view class="param-row input-row">
- <view class="param-main">
- <view class="param-name">输出长度</view>
- <view class="param-meta">1 - 4096 Byte</view>
- </view>
- <view class="input-wrap">
- <input class="value-input crc-config-input" type="number" data-field="crcPbkdf2Length" value="{{crcPbkdf2Length}}" bindinput="onCrcConfigInput" />
- </view>
- </view>
- </block>
- </view>
- </view>
- <view class="panel params-section-panel">
- <view class="params-section-title crc-data-card-header">
- <view class="crc-data-title">数据</view>
- <view class="crc-data-header-actions">
- <picker
- class="crc-data-type-picker"
- mode="selector"
- range="{{crcInputTypeOptions}}"
- range-key="label"
- value="{{crcInputTypeIndex}}"
- bindchange="onCrcInputTypeChange"
- >
- <view class="crc-data-type-value">{{crcInputTypeOptions[crcInputTypeIndex].label}}</view>
- </picker>
- <view class="panel-action-button" bindtap="loadCrcFileFromMessage">加载</view>
- <view class="panel-action-button" bindtap="clearCrcInput">清空</view>
- <view class="panel-action-button is-active" bindtap="calculateCrc">计算</view>
- </view>
- </view>
- <view wx:if="{{crcFileName}}" class="param-row">
- <view class="param-main">
- <view class="param-name">文件</view>
- <view class="param-meta">{{crcFileSizeText}}</view>
- </view>
- <view class="crc-file-name">{{crcFileName}}</view>
- </view>
- <view class="crc-data-wrap">
- <textarea
- class="crc-data-input"
- maxlength="-1"
- auto-height
- value="{{crcDataText}}"
- bindinput="onCrcDataInput"
- />
- </view>
- </view>
- <view class="panel params-section-panel">
- <view class="params-section-title">结果</view>
- <view class="param-row crc-calc-result-row">
- <view class="param-main crc-calc-result-main">
- <view class="param-name">HEX</view>
- <view class="crc-calc-result-value" data-value="{{crcResultHex}}" bindtap="copyToolResult">{{crcResultHex}}</view>
- </view>
- </view>
- <view wx:if="{{crcShowBinResult}}" class="param-row crc-calc-result-row crc-calc-result-row--bin">
- <view class="param-main crc-calc-result-main">
- <view class="param-name">BIN</view>
- <view class="crc-calc-result-value crc-calc-result-value--bin" data-value="{{crcResultBin}}" bindtap="copyToolResult">
- <text wx:for="{{crcResultBinLines}}" wx:key="id" class="crc-result-bin-line">{{item.text}}</text>
- </view>
- </view>
- </view>
- <view class="param-row crc-calc-result-row">
- <view class="param-main crc-calc-result-main">
- <view class="param-name">Base64</view>
- <view class="crc-calc-result-value" data-value="{{crcResultBase64}}" bindtap="copyToolResult">{{crcResultBase64}}</view>
- </view>
- </view>
- <view wx:if="{{crcErrorText}}" class="param-row">
- <view class="param-main">
- <view class="param-name">错误</view>
- </view>
- <view class="crc-error-value">{{crcErrorText}}</view>
- </view>
- </view>
- </block>
- <block wx:elif="{{activeSettingsView == 'filter'}}">
- <view class="panel params-section-panel">
- <view class="params-section-title filter-section-title">
- <view class="filter-section-title-text">参数</view>
- <view class="filter-mode-actions">
- <view class="filter-mode-button" bindtap="toggleFilterNetwork">{{filterNetworkText}}</view>
- <view class="filter-mode-button" bindtap="toggleFilterResponse">{{filterResponseText}}</view>
- <view class="filter-mode-button" bindtap="clearFilterInputs">清除</view>
- </view>
- </view>
- <view class="param-row input-row">
- <view class="param-main">
- <view class="param-name">电阻 R</view>
- <view wx:if="{{filterComputedKey == 'resistance'}}" class="param-meta">自动计算</view>
- </view>
- <view class="filter-input-wrap">
- <input
- class="value-input filter-value-input {{filterComputedKey == 'resistance' ? 'filter-value-input--computed' : ''}}"
- type="digit"
- placeholder="--"
- data-field="resistance"
- value="{{filterResistanceDisplayValue}}"
- bindinput="onFilterResistanceInput"
- bindblur="onFilterValueBlur"
- />
- <picker
- class="filter-unit-picker"
- mode="selector"
- range="{{filterResistanceUnitOptions}}"
- range-key="label"
- value="{{filterResistanceUnitIndex}}"
- bindchange="onFilterResistanceUnitChange"
- >
- <view class="filter-unit-value">{{filterResistanceUnitText}}</view>
- </picker>
- </view>
- </view>
- <view class="param-row input-row">
- <view class="param-main">
- <view class="param-name">{{filterReactiveName}} {{filterReactiveSymbol}}</view>
- <view wx:if="{{filterComputedKey == 'reactive'}}" class="param-meta">自动计算</view>
- </view>
- <view class="filter-input-wrap">
- <input
- class="value-input filter-value-input {{filterComputedKey == 'reactive' ? 'filter-value-input--computed' : ''}}"
- type="digit"
- placeholder="--"
- data-field="reactive"
- value="{{filterReactiveDisplayValue}}"
- bindinput="onFilterReactiveInput"
- bindblur="onFilterValueBlur"
- />
- <picker
- class="filter-unit-picker"
- mode="selector"
- range="{{filterReactiveUnitOptions}}"
- range-key="label"
- value="{{filterReactiveUnitIndex}}"
- bindchange="onFilterReactiveUnitChange"
- >
- <view class="filter-unit-value">{{filterReactiveUnitText}}</view>
- </picker>
- </view>
- </view>
- <view class="param-row input-row">
- <view class="param-main">
- <view class="param-name">-3dB截止频率</view>
- <view wx:if="{{filterComputedKey == 'frequency'}}" class="param-meta">自动计算</view>
- </view>
- <view class="filter-input-wrap">
- <input
- class="value-input filter-value-input {{filterComputedKey == 'frequency' ? 'filter-value-input--computed' : ''}}"
- type="digit"
- placeholder="--"
- data-field="frequency"
- value="{{filterFrequencyDisplayValue}}"
- bindinput="onFilterFrequencyInput"
- bindblur="onFilterValueBlur"
- />
- <picker
- class="filter-unit-picker"
- mode="selector"
- range="{{filterFrequencyUnitOptions}}"
- range-key="label"
- value="{{filterFrequencyUnitIndex}}"
- bindchange="onFilterFrequencyUnitChange"
- >
- <view class="filter-unit-value">{{filterFrequencyUnitText}}</view>
- </picker>
- </view>
- </view>
- <view wx:if="{{filterErrorText}}" class="filter-error-inline">{{filterErrorText}}</view>
- </view>
- <view class="panel params-section-panel">
- <view class="params-section-title filter-diagram-title">
- <view>电路图</view>
- <view class="filter-diagram-mode">{{filterNetworkText}} · {{filterResponseText}}</view>
- </view>
- <view class="filter-diagram">
- <view class="filter-diagram-row filter-diagram-row--top">
- <view class="filter-diagram-port">Vin</view>
- <view class="filter-diagram-wire"></view>
- <view class="filter-diagram-component filter-diagram-component--series filter-diagram-component--{{filterSeriesComponentKey}}">
- <view class="filter-diagram-component-icon filter-diagram-component-icon--{{filterSeriesComponentKey}}">
- <view class="filter-diagram-icon-loop"></view>
- <view class="filter-diagram-icon-loop"></view>
- <view class="filter-diagram-icon-loop"></view>
- </view>
- </view>
- <view class="filter-diagram-wire"></view>
- <view class="filter-diagram-node-wrap">
- <view class="filter-diagram-node"></view>
- <view class="filter-diagram-branch">
- <view class="filter-diagram-branch-wire"></view>
- <view class="filter-diagram-component filter-diagram-component--shunt filter-diagram-component--{{filterShuntComponentKey}}">
- <view class="filter-diagram-component-icon filter-diagram-component-icon--{{filterShuntComponentKey}}">
- <view class="filter-diagram-icon-loop"></view>
- <view class="filter-diagram-icon-loop"></view>
- <view class="filter-diagram-icon-loop"></view>
- </view>
- </view>
- <view class="filter-diagram-ground">
- <view class="filter-diagram-ground-stem"></view>
- <view class="filter-diagram-ground-line filter-diagram-ground-line--1"></view>
- <view class="filter-diagram-ground-line filter-diagram-ground-line--2"></view>
- <view class="filter-diagram-ground-line filter-diagram-ground-line--3"></view>
- </view>
- </view>
- </view>
- <view class="filter-diagram-wire"></view>
- <view class="filter-diagram-port">Vout</view>
- </view>
- </view>
- </view>
- </block>
- <block wx:elif="{{activeSettingsView == 'reactance'}}">
- <view class="panel params-section-panel">
- <view class="params-section-title filter-section-title">
- <view class="filter-section-title-text">参数</view>
- <view class="filter-mode-actions">
- <view class="filter-mode-button" bindtap="toggleReactanceMode">{{reactanceModeText}}</view>
- <view class="filter-mode-button" bindtap="clearReactanceInputs">清除</view>
- </view>
- </view>
- <view class="param-row input-row">
- <view class="param-main">
- <view class="param-name">频率 f</view>
- </view>
- <view class="filter-input-wrap">
- <input
- class="value-input filter-value-input"
- type="digit"
- placeholder="--"
- data-field="frequency"
- value="{{reactanceFrequencyDisplayValue}}"
- bindinput="onReactanceFrequencyInput"
- bindblur="onReactanceValueBlur"
- />
- <picker
- class="filter-unit-picker"
- mode="selector"
- range="{{reactanceFrequencyUnitOptions}}"
- range-key="label"
- value="{{reactanceFrequencyUnitIndex}}"
- bindchange="onReactanceFrequencyUnitChange"
- >
- <view class="filter-unit-value">{{reactanceFrequencyUnitText}}</view>
- </picker>
- </view>
- </view>
- <view class="param-row input-row">
- <view class="param-main">
- <view class="param-name">{{reactanceReactiveName}} {{reactanceReactiveSymbol}}</view>
- </view>
- <view class="filter-input-wrap">
- <input
- class="value-input filter-value-input"
- type="digit"
- placeholder="--"
- data-field="reactive"
- value="{{reactanceReactiveDisplayValue}}"
- bindinput="onReactanceReactiveInput"
- bindblur="onReactanceValueBlur"
- />
- <picker
- class="filter-unit-picker"
- mode="selector"
- range="{{reactanceReactiveUnitOptions}}"
- range-key="label"
- value="{{reactanceReactiveUnitIndex}}"
- bindchange="onReactanceReactiveUnitChange"
- >
- <view class="filter-unit-value">{{reactanceReactiveUnitText}}</view>
- </picker>
- </view>
- </view>
- <view wx:if="{{reactanceErrorText}}" class="filter-error-inline">{{reactanceErrorText}}</view>
- </view>
- <view class="panel params-section-panel">
- <view class="params-section-title filter-diagram-title">
- <view>结果</view>
- <view class="filter-diagram-mode">{{reactanceModeText}}</view>
- </view>
- <view
- wx:for="{{reactanceResultRows}}"
- wx:for-item="row"
- wx:key="label"
- class="param-row smd-result-row"
- >
- <view class="param-main">
- <view class="param-name">{{row.label}}</view>
- <view class="param-meta">{{row.meta}}</view>
- </view>
- <view class="smd-result-value">{{row.value}}</view>
- </view>
- </view>
- </block>
- <block wx:elif="{{activeSettingsView == 'smdCode'}}">
- <view class="panel params-section-panel">
- <view class="params-section-title smd-section-title">
- <view class="smd-section-title-text">类型</view>
- <view class="smd-mode-actions">
- <view
- wx:for="{{smdKindOptions}}"
- wx:key="key"
- class="smd-mode-button {{smdKindKey == item.key ? 'is-active' : ''}}"
- data-kind="{{item.key}}"
- bindtap="onSmdKindTap"
- >
- {{item.label}}
- </view>
- </view>
- </view>
- <view class="smd-format-row">
- <view
- wx:for="{{smdFormatOptions}}"
- wx:key="key"
- class="smd-format-button {{smdFormatKey == item.key ? 'is-active' : ''}}"
- data-format="{{item.key}}"
- bindtap="onSmdFormatTap"
- >
- {{item.label}}
- </view>
- </view>
- </view>
- <view class="panel params-section-panel">
- <view class="params-section-title smd-section-title">
- <view class="smd-section-title-text">编码</view>
- <view wx:if="{{smdCodeText}}" class="panel-action-button" bindtap="clearSmdCodeInput">清空</view>
- </view>
- <view class="param-row input-row">
- <view class="param-main">
- <view class="param-name">EIA</view>
- <view class="param-meta">{{smdKindText}} · {{smdFormatText}}</view>
- </view>
- <view class="input-wrap">
- <input
- class="value-input smd-code-input"
- placeholder="{{smdFormatKey == 'eia96' ? '01A' : smdFormatKey == 'eia198' ? 'A4' : '103'}}"
- value="{{smdCodeText}}"
- bindinput="onSmdCodeInput"
- />
- </view>
- </view>
- </view>
- <view class="panel params-section-panel">
- <view class="params-section-title">结果</view>
- <view class="param-row smd-result-row">
- <view class="param-main">
- <view class="param-name">显示值</view>
- <view class="param-meta {{smdErrorText ? 'param-meta--dirty' : ''}}">{{smdErrorText || smdFormulaText || '输入编码后自动计算'}}</view>
- </view>
- <view class="smd-result-value {{smdErrorText ? 'smd-result-value--error' : ''}}">{{smdResultText}}</view>
- </view>
- </view>
- </block>
- <block wx:elif="{{activeSettingsView == 'refrigeration'}}">
- <view class="panel params-section-panel">
- <view class="params-section-title smd-section-title refrigeration-title-row">
- <view class="smd-section-title-text">公式</view>
- <picker
- class="refrigeration-mode-picker"
- mode="selector"
- range="{{coolingModeOptions}}"
- range-key="label"
- value="{{coolingModeIndex}}"
- bindchange="onCoolingModeChange"
- >
- <view class="generic-picker-value refrigeration-picker-value">
- {{coolingModeText}}
- </view>
- </picker>
- </view>
- <view class="smd-format-row refrigeration-formula-row">
- <view class="refrigeration-formula-text">{{coolingFormulaText}}</view>
- </view>
- </view>
- <view class="panel params-section-panel">
- <view class="params-section-title smd-section-title">
- <view class="smd-section-title-text">输入</view>
- <view wx:if="{{coolingAnyInput}}" class="panel-action-button" bindtap="clearCoolingInputs">清空</view>
- </view>
- <view
- wx:for="{{coolingFieldRows}}"
- wx:for-item="field"
- wx:key="key"
- class="param-row input-row"
- >
- <view class="param-main">
- <view class="param-name">{{field.label}}</view>
- <view class="param-meta">{{field.unit}}</view>
- </view>
- <view class="input-wrap">
- <input
- class="value-input smd-code-input refrigeration-input"
- type="text"
- placeholder="{{field.placeholder}}"
- value="{{field.value}}"
- data-field="{{field.key}}"
- bindinput="onCoolingInput"
- />
- </view>
- </view>
- </view>
- <view class="panel params-section-panel">
- <view class="params-section-title">结果</view>
- <view wx:if="{{coolingErrorText}}" class="filter-error-inline">{{coolingErrorText}}</view>
- <view wx:if="{{!coolingResultRows.length && !coolingErrorText}}" class="param-row smd-result-row">
- <view class="param-main">
- <view class="param-name">显示值</view>
- <view class="param-meta">输入参数后自动计算</view>
- </view>
- <view class="smd-result-value">--</view>
- </view>
- <view
- wx:for="{{coolingResultRows}}"
- wx:for-item="row"
- wx:key="label"
- class="param-row smd-result-row"
- >
- <view class="param-main">
- <view class="param-name">{{row.label}}</view>
- </view>
- <view class="smd-result-value">{{row.value}}</view>
- </view>
- </view>
- </block>
- <block wx:elif="{{activeSettingsView == 'threePhasePower'}}">
- <view class="panel params-section-panel">
- <view class="params-section-title smd-section-title">
- <view class="smd-section-title-text">参数</view>
- <view class="smd-mode-actions">
- <view
- wx:for="{{threePhaseConnectionOptions}}"
- wx:key="key"
- class="smd-mode-button {{threePhaseConnectionKey == item.key ? 'is-active' : ''}}"
- data-connection="{{item.key}}"
- bindtap="onThreePhaseConnectionTap"
- >
- {{item.label}}
- </view>
- <view class="panel-action-button" bindtap="clearThreePhaseInputs">清除</view>
- </view>
- </view>
- <view wx:if="{{threePhaseErrorText}}" class="filter-error-inline">{{threePhaseErrorText}}</view>
- <view
- wx:for="{{threePhaseRows}}"
- wx:for-item="row"
- wx:key="key"
- class="param-row {{row.editable ? 'input-row' : ''}}"
- >
- <view class="param-main">
- <view class="param-name">{{row.label}}</view>
- <view wx:if="{{row.unit}}" class="param-meta">{{row.unit}}</view>
- </view>
- <view wx:if="{{!row.editable}}" class="smd-result-value">{{row.value}}</view>
- <view wx:if="{{row.editable}}" class="input-wrap">
- <input
- class="value-input smd-code-input three-phase-input"
- type="text"
- placeholder="{{row.placeholder}}"
- value="{{row.value}}"
- data-field="{{row.field}}"
- bindinput="onThreePhaseInput"
- />
- </view>
- </view>
- </view>
- </block>
- </block>
- <block wx:else>
- <view class="panel settings-section-panel">
- <view class="params-section-title">通用设置</view>
- <view class="settings-row">
- <view class="settings-row-main">
- <view class="param-name">夜间模式启用</view>
- <view class="param-meta">当前 {{themeMode === 'dark' ? '夜间' : '日间'}}</view>
- </view>
- <switch
- checked="{{nightModeEnabledSwitch}}"
- color="#0f766e"
- disabled="{{nightModeFollowSystem}}"
- bindchange="onNightModeEnabledChange"
- />
- </view>
- <view class="settings-row">
- <view class="settings-row-main">
- <view class="param-name">夜间模式跟随系统</view>
- <view class="param-meta">{{nightModeFollowSystem ? '已跟随' : '手动控制'}}</view>
- </view>
- <switch
- checked="{{nightModeFollowSystem}}"
- color="#0f766e"
- bindchange="onNightModeFollowSystemChange"
- />
- </view>
- </view>
- <view class="panel settings-section-panel">
- <view class="params-section-title">Modbus</view>
- <view class="settings-row">
- <view class="settings-row-main">
- <view class="param-name">协议筛选</view>
- <view class="param-meta">用于选择当前调试协议</view>
- </view>
- <picker
- mode="selector"
- range="{{modbusProtocolOptions}}"
- range-key="label"
- value="{{modbusProtocolIndex}}"
- bindchange="onModbusProtocolChange"
- >
- <view class="settings-picker-value">{{modbusProtocolText}}</view>
- </picker>
- </view>
- <view class="settings-row settings-row--input">
- <view class="settings-row-main">
- <view class="param-name">从机地址</view>
- <view class="param-meta">00 - FF</view>
- </view>
- <view class="settings-input-wrap">
- <input
- class="value-input settings-value-input settings-value-input--hex"
- maxlength="2"
- value="{{modbusSlaveAddress}}"
- bindblur="onModbusSlaveAddressBlur"
- bindconfirm="onModbusSlaveAddressBlur"
- />
- </view>
- </view>
- <view wx:if="{{!isGenericProtocol}}" class="settings-row settings-row--input">
- <view class="settings-row-main">
- <view class="param-name">用户状态个数</view>
- <view class="param-meta">0 - {{maxUserStatusCount}}</view>
- </view>
- <view class="settings-input-wrap">
- <input
- class="value-input settings-value-input"
- type="number"
- value="{{userStatusCount}}"
- bindblur="onUserStatusCountBlur"
- bindconfirm="onUserStatusCountBlur"
- />
- </view>
- </view>
- <view wx:if="{{!isGenericProtocol}}" class="settings-row settings-row--input">
- <view class="settings-row-main">
- <view class="param-name">状态轮询间隔</view>
- <view class="param-meta">{{statusPollMinInterval}} - {{statusPollMaxInterval}} ms</view>
- </view>
- <view class="settings-input-wrap settings-input-wrap--unit">
- <input
- class="value-input settings-value-input settings-value-input--unit"
- type="number"
- value="{{statusPollInterval}}"
- bindblur="onStatusPollIntervalBlur"
- bindconfirm="onStatusPollIntervalBlur"
- />
- <text class="settings-unit settings-unit--inside">ms</text>
- </view>
- </view>
- <view wx:if="{{isGenericProtocol}}" class="settings-row">
- <view class="settings-row-main">
- <view class="param-name">自动轮询</view>
- <view class="param-meta">{{genericModbusAutoPollEnabled ? '已启用' : '已停止'}}</view>
- </view>
- <switch
- checked="{{genericModbusAutoPollEnabled}}"
- color="#0f766e"
- bindchange="onGenericModbusAutoPollChange"
- />
- </view>
- <view wx:if="{{isGenericProtocol}}" class="settings-row settings-row--input">
- <view class="settings-row-main">
- <view class="param-name">轮询间隔</view>
- <view class="param-meta">{{statusPollMinInterval}} - {{statusPollMaxInterval}} ms</view>
- </view>
- <view class="settings-input-wrap settings-input-wrap--unit">
- <input
- class="value-input settings-value-input settings-value-input--unit"
- type="number"
- value="{{genericModbusPollInterval}}"
- bindblur="onGenericModbusPollIntervalBlur"
- bindconfirm="onGenericModbusPollIntervalBlur"
- />
- <text class="settings-unit settings-unit--inside">ms</text>
- </view>
- </view>
- <view wx:if="{{isGenericProtocol}}" class="settings-row settings-row--input">
- <view class="settings-row-main">
- <view class="param-name">最大包长</view>
- <view class="param-meta">0 为无限制,最小 {{genericModbusMinPacketLength}} 字节</view>
- </view>
- <view class="settings-input-wrap settings-input-wrap--unit">
- <input
- class="value-input settings-value-input settings-value-input--unit"
- type="number"
- value="{{genericModbusMaxPacketLength}}"
- bindblur="onGenericModbusMaxPacketLengthBlur"
- bindconfirm="onGenericModbusMaxPacketLengthBlur"
- />
- <text class="settings-unit settings-unit--inside">B</text>
- </view>
- </view>
- </view>
- <view class="panel settings-section-panel">
- <view class="params-section-title">工具</view>
- <view
- wx:for="{{toolEntries}}"
- wx:key="view"
- class="settings-row settings-tool-row"
- data-view="{{item.view}}"
- bindtap="openToolEntry"
- >
- <view class="settings-tool-main">
- <view class="settings-tool-icon-frame {{item.icon}}">
- <image class="settings-tool-icon-image" src="{{item.iconSrc}}" mode="aspectFit"></image>
- </view>
- <view class="param-name settings-tool-title">{{item.label}}</view>
- </view>
- <view class="entry-chevron"></view>
- </view>
- </view>
- </block>
- </view>
- </scroll-view>
|