1
0

settings.wxml 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755
  1. <navigation-bar background="{{themeMode === 'dark' ? '#111827' : '#FFF'}}"></navigation-bar>
  2. <view wx:if="{{toastText}}" class="page-toast page-toast--{{toastType}} {{themeClass}}">
  3. {{toastText}}
  4. </view>
  5. <view wx:if="{{activeSettingsView}}" class="subpage-fixed-header {{themeClass}}">
  6. <view class="subpage-page-header">
  7. <view class="subpage-back" bindtap="backToSettingsHome">
  8. <view class="subpage-back-icon"></view>
  9. </view>
  10. <view class="subpage-page-title">{{activeSettingsTitle}}</view>
  11. </view>
  12. </view>
  13. <scroll-view class="scrollarea {{themeClass}} {{activeSettingsView ? 'scrollarea--subpage' : ''}}" scroll-y type="list">
  14. <view class="page-shell">
  15. <block wx:if="{{activeSettingsView}}">
  16. <block wx:if="{{activeSettingsView == 'crc'}}">
  17. <view class="panel params-section-panel crc-algorithm-panel {{crcAlgorithmCollapsed ? 'panel--collapsed' : ''}}">
  18. <view class="param-row input-row">
  19. <picker
  20. class="crc-algorithm-picker"
  21. mode="selector"
  22. range="{{crcPresetOptions}}"
  23. range-key="label"
  24. value="{{crcPresetIndex}}"
  25. bindchange="onCrcPresetChange"
  26. >
  27. <view class="crc-algorithm-picker-content">
  28. <view class="param-main">
  29. <view class="param-name">算法</view>
  30. </view>
  31. <view class="generic-picker-value crc-picker-value">{{crcPresetOptions[crcPresetIndex].label}}</view>
  32. </view>
  33. </picker>
  34. <view
  35. class="collapse-toggle {{crcAlgorithmCollapsed ? 'is-collapsed' : ''}}"
  36. bindtap="toggleCrcAlgorithmPanel"
  37. >
  38. <view class="collapse-indicator"></view>
  39. </view>
  40. </view>
  41. <view wx:if="{{!crcAlgorithmCollapsed && (crcShowCrcConfig || crcShowHmacKey || crcShowPbkdf2Config)}}" class="crc-algorithm-fields">
  42. <block wx:if="{{crcShowCrcConfig}}">
  43. <view class="param-row input-row">
  44. <view class="param-main">
  45. <view class="param-name">位宽</view>
  46. <view class="param-meta">1 - 64</view>
  47. </view>
  48. <view class="input-wrap">
  49. <input class="value-input crc-config-input" type="number" data-field="crcWidth" value="{{crcWidth}}" bindinput="onCrcConfigInput" />
  50. </view>
  51. </view>
  52. <view class="param-row input-row">
  53. <view class="param-main">
  54. <view class="param-name">Poly</view>
  55. <view class="param-meta">HEX</view>
  56. </view>
  57. <view class="input-wrap">
  58. <input class="value-input crc-config-input" data-field="crcPoly" value="{{crcPoly}}" bindinput="onCrcConfigInput" />
  59. </view>
  60. </view>
  61. <view class="param-row input-row">
  62. <view class="param-main">
  63. <view class="param-name">初始值</view>
  64. <view class="param-meta">HEX</view>
  65. </view>
  66. <view class="input-wrap">
  67. <input class="value-input crc-config-input" data-field="crcInitialValue" value="{{crcInitialValue}}" bindinput="onCrcConfigInput" />
  68. </view>
  69. </view>
  70. <view class="param-row input-row">
  71. <view class="param-main">
  72. <view class="param-name">结果异或值</view>
  73. <view class="param-meta">HEX</view>
  74. </view>
  75. <view class="input-wrap">
  76. <input class="value-input crc-config-input" data-field="crcXorOut" value="{{crcXorOut}}" bindinput="onCrcConfigInput" />
  77. </view>
  78. </view>
  79. <view class="crc-switch-row">
  80. <view class="crc-switch-field">
  81. <view class="param-name">输入反转</view>
  82. <switch checked="{{crcReflectIn}}" color="#0f766e" data-field="crcReflectIn" bindchange="onCrcReflectChange" />
  83. </view>
  84. <view class="crc-switch-field">
  85. <view class="param-name">输出反转</view>
  86. <switch checked="{{crcReflectOut}}" color="#0f766e" data-field="crcReflectOut" bindchange="onCrcReflectChange" />
  87. </view>
  88. </view>
  89. </block>
  90. <block wx:elif="{{crcShowHmacKey}}">
  91. <view class="param-row input-row">
  92. <view class="param-main">
  93. <view class="param-name">密钥</view>
  94. <view class="param-meta">UTF-8</view>
  95. </view>
  96. <view class="input-wrap">
  97. <input class="value-input crc-config-input" data-field="crcHmacKey" value="{{crcHmacKey}}" bindinput="onCrcConfigInput" />
  98. </view>
  99. </view>
  100. </block>
  101. <block wx:elif="{{crcShowPbkdf2Config}}">
  102. <view class="param-row input-row">
  103. <view class="param-main">
  104. <view class="param-name">盐值</view>
  105. <view class="param-meta">UTF-8</view>
  106. </view>
  107. <view class="input-wrap">
  108. <input class="value-input crc-config-input" data-field="crcPbkdf2Salt" value="{{crcPbkdf2Salt}}" bindinput="onCrcConfigInput" />
  109. </view>
  110. </view>
  111. <view class="param-row input-row">
  112. <view class="param-main">
  113. <view class="param-name">迭代次数</view>
  114. <view class="param-meta">1 - 100000</view>
  115. </view>
  116. <view class="input-wrap">
  117. <input class="value-input crc-config-input" type="number" data-field="crcPbkdf2Iterations" value="{{crcPbkdf2Iterations}}" bindinput="onCrcConfigInput" />
  118. </view>
  119. </view>
  120. <view class="param-row input-row">
  121. <view class="param-main">
  122. <view class="param-name">输出长度</view>
  123. <view class="param-meta">1 - 4096 Byte</view>
  124. </view>
  125. <view class="input-wrap">
  126. <input class="value-input crc-config-input" type="number" data-field="crcPbkdf2Length" value="{{crcPbkdf2Length}}" bindinput="onCrcConfigInput" />
  127. </view>
  128. </view>
  129. </block>
  130. </view>
  131. </view>
  132. <view class="panel params-section-panel">
  133. <view class="params-section-title crc-data-card-header">
  134. <view class="crc-data-title">数据</view>
  135. <view class="crc-data-header-actions">
  136. <picker
  137. class="crc-data-type-picker"
  138. mode="selector"
  139. range="{{crcInputTypeOptions}}"
  140. range-key="label"
  141. value="{{crcInputTypeIndex}}"
  142. bindchange="onCrcInputTypeChange"
  143. >
  144. <view class="crc-data-type-value">{{crcInputTypeOptions[crcInputTypeIndex].label}}</view>
  145. </picker>
  146. <view class="panel-action-button" bindtap="loadCrcFileFromMessage">加载</view>
  147. <view class="panel-action-button" bindtap="clearCrcInput">清空</view>
  148. <view class="panel-action-button is-active" bindtap="calculateCrc">计算</view>
  149. </view>
  150. </view>
  151. <view wx:if="{{crcFileName}}" class="param-row">
  152. <view class="param-main">
  153. <view class="param-name">文件</view>
  154. <view class="param-meta">{{crcFileSizeText}}</view>
  155. </view>
  156. <view class="crc-file-name">{{crcFileName}}</view>
  157. </view>
  158. <view class="crc-data-wrap">
  159. <textarea
  160. class="crc-data-input"
  161. maxlength="-1"
  162. auto-height
  163. value="{{crcDataText}}"
  164. bindinput="onCrcDataInput"
  165. />
  166. </view>
  167. </view>
  168. <view class="panel params-section-panel">
  169. <view class="params-section-title">结果</view>
  170. <view class="param-row crc-calc-result-row">
  171. <view class="param-main crc-calc-result-main">
  172. <view class="param-name">HEX</view>
  173. <view class="crc-calc-result-value" data-value="{{crcResultHex}}" bindtap="copyToolResult">{{crcResultHex}}</view>
  174. </view>
  175. </view>
  176. <view wx:if="{{crcShowBinResult}}" class="param-row crc-calc-result-row crc-calc-result-row--bin">
  177. <view class="param-main crc-calc-result-main">
  178. <view class="param-name">BIN</view>
  179. <view class="crc-calc-result-value crc-calc-result-value--bin" data-value="{{crcResultBin}}" bindtap="copyToolResult">
  180. <text wx:for="{{crcResultBinLines}}" wx:key="id" class="crc-result-bin-line">{{item.text}}</text>
  181. </view>
  182. </view>
  183. </view>
  184. <view class="param-row crc-calc-result-row">
  185. <view class="param-main crc-calc-result-main">
  186. <view class="param-name">Base64</view>
  187. <view class="crc-calc-result-value" data-value="{{crcResultBase64}}" bindtap="copyToolResult">{{crcResultBase64}}</view>
  188. </view>
  189. </view>
  190. <view wx:if="{{crcErrorText}}" class="param-row">
  191. <view class="param-main">
  192. <view class="param-name">错误</view>
  193. </view>
  194. <view class="crc-error-value">{{crcErrorText}}</view>
  195. </view>
  196. </view>
  197. </block>
  198. <block wx:elif="{{activeSettingsView == 'filter'}}">
  199. <view class="panel params-section-panel">
  200. <view class="params-section-title filter-section-title">
  201. <view class="filter-section-title-text">参数</view>
  202. <view class="filter-mode-actions">
  203. <view class="filter-mode-button" bindtap="toggleFilterNetwork">{{filterNetworkText}}</view>
  204. <view class="filter-mode-button" bindtap="toggleFilterResponse">{{filterResponseText}}</view>
  205. <view class="filter-mode-button" bindtap="clearFilterInputs">清除</view>
  206. </view>
  207. </view>
  208. <view class="param-row input-row">
  209. <view class="param-main">
  210. <view class="param-name">电阻 R</view>
  211. <view wx:if="{{filterComputedKey == 'resistance'}}" class="param-meta">自动计算</view>
  212. </view>
  213. <view class="filter-input-wrap">
  214. <input
  215. class="value-input filter-value-input {{filterComputedKey == 'resistance' ? 'filter-value-input--computed' : ''}}"
  216. type="digit"
  217. placeholder="--"
  218. data-field="resistance"
  219. value="{{filterResistanceDisplayValue}}"
  220. bindinput="onFilterResistanceInput"
  221. bindblur="onFilterValueBlur"
  222. />
  223. <picker
  224. class="filter-unit-picker"
  225. mode="selector"
  226. range="{{filterResistanceUnitOptions}}"
  227. range-key="label"
  228. value="{{filterResistanceUnitIndex}}"
  229. bindchange="onFilterResistanceUnitChange"
  230. >
  231. <view class="filter-unit-value">{{filterResistanceUnitText}}</view>
  232. </picker>
  233. </view>
  234. </view>
  235. <view class="param-row input-row">
  236. <view class="param-main">
  237. <view class="param-name">{{filterReactiveName}} {{filterReactiveSymbol}}</view>
  238. <view wx:if="{{filterComputedKey == 'reactive'}}" class="param-meta">自动计算</view>
  239. </view>
  240. <view class="filter-input-wrap">
  241. <input
  242. class="value-input filter-value-input {{filterComputedKey == 'reactive' ? 'filter-value-input--computed' : ''}}"
  243. type="digit"
  244. placeholder="--"
  245. data-field="reactive"
  246. value="{{filterReactiveDisplayValue}}"
  247. bindinput="onFilterReactiveInput"
  248. bindblur="onFilterValueBlur"
  249. />
  250. <picker
  251. class="filter-unit-picker"
  252. mode="selector"
  253. range="{{filterReactiveUnitOptions}}"
  254. range-key="label"
  255. value="{{filterReactiveUnitIndex}}"
  256. bindchange="onFilterReactiveUnitChange"
  257. >
  258. <view class="filter-unit-value">{{filterReactiveUnitText}}</view>
  259. </picker>
  260. </view>
  261. </view>
  262. <view class="param-row input-row">
  263. <view class="param-main">
  264. <view class="param-name">-3dB截止频率</view>
  265. <view wx:if="{{filterComputedKey == 'frequency'}}" class="param-meta">自动计算</view>
  266. </view>
  267. <view class="filter-input-wrap">
  268. <input
  269. class="value-input filter-value-input {{filterComputedKey == 'frequency' ? 'filter-value-input--computed' : ''}}"
  270. type="digit"
  271. placeholder="--"
  272. data-field="frequency"
  273. value="{{filterFrequencyDisplayValue}}"
  274. bindinput="onFilterFrequencyInput"
  275. bindblur="onFilterValueBlur"
  276. />
  277. <picker
  278. class="filter-unit-picker"
  279. mode="selector"
  280. range="{{filterFrequencyUnitOptions}}"
  281. range-key="label"
  282. value="{{filterFrequencyUnitIndex}}"
  283. bindchange="onFilterFrequencyUnitChange"
  284. >
  285. <view class="filter-unit-value">{{filterFrequencyUnitText}}</view>
  286. </picker>
  287. </view>
  288. </view>
  289. <view wx:if="{{filterErrorText}}" class="filter-error-inline">{{filterErrorText}}</view>
  290. </view>
  291. <view class="panel params-section-panel">
  292. <view class="params-section-title filter-diagram-title">
  293. <view>电路图</view>
  294. <view class="filter-diagram-mode">{{filterNetworkText}} · {{filterResponseText}}</view>
  295. </view>
  296. <view class="filter-diagram">
  297. <view class="filter-schematic">
  298. <view class="filter-schematic-label filter-schematic-label--input">Vin</view>
  299. <view class="filter-schematic-label filter-schematic-label--output">Vout</view>
  300. <view class="filter-schematic-dot filter-schematic-dot--input-top"></view>
  301. <view class="filter-schematic-dot filter-schematic-dot--input-bottom"></view>
  302. <view class="filter-schematic-dot filter-schematic-dot--node-top"></view>
  303. <view class="filter-schematic-dot filter-schematic-dot--node-bottom"></view>
  304. <view class="filter-schematic-dot filter-schematic-dot--output-top"></view>
  305. <view class="filter-schematic-dot filter-schematic-dot--output-bottom"></view>
  306. <view class="filter-schematic-wire filter-schematic-wire--top-input"></view>
  307. <view class="filter-schematic-wire filter-schematic-wire--top-middle"></view>
  308. <view class="filter-schematic-wire filter-schematic-wire--top-output"></view>
  309. <view class="filter-schematic-wire filter-schematic-wire--bottom-input"></view>
  310. <view class="filter-schematic-wire filter-schematic-wire--bottom-output"></view>
  311. <view class="filter-schematic-wire filter-schematic-wire--branch-top"></view>
  312. <view class="filter-schematic-wire filter-schematic-wire--branch-bottom"></view>
  313. <view class="filter-schematic-mark filter-schematic-mark--series">{{filterSeriesLabel}}</view>
  314. <view class="filter-schematic-component filter-schematic-component--series">
  315. <image class="filter-schematic-symbol" src="{{filterSeriesComponentSrc}}" mode="aspectFit" />
  316. </view>
  317. <view class="filter-schematic-mark filter-schematic-mark--shunt">{{filterShuntLabel}}</view>
  318. <view class="filter-schematic-component filter-schematic-component--shunt">
  319. <image class="filter-schematic-symbol filter-schematic-symbol--vertical" src="{{filterShuntComponentSrc}}" mode="aspectFit" />
  320. </view>
  321. </view>
  322. </view>
  323. </view>
  324. </block>
  325. <block wx:elif="{{activeSettingsView == 'reactance'}}">
  326. <view class="panel params-section-panel">
  327. <view class="params-section-title filter-section-title">
  328. <view class="filter-section-title-text">参数</view>
  329. <view class="filter-mode-actions">
  330. <view class="filter-mode-button" bindtap="toggleReactanceMode">{{reactanceModeText}}</view>
  331. <view class="filter-mode-button" bindtap="clearReactanceInputs">清除</view>
  332. </view>
  333. </view>
  334. <view class="param-row input-row">
  335. <view class="param-main">
  336. <view class="param-name">频率 f</view>
  337. </view>
  338. <view class="filter-input-wrap">
  339. <input
  340. class="value-input filter-value-input"
  341. type="digit"
  342. placeholder="--"
  343. data-field="frequency"
  344. value="{{reactanceFrequencyDisplayValue}}"
  345. bindinput="onReactanceFrequencyInput"
  346. bindblur="onReactanceValueBlur"
  347. />
  348. <picker
  349. class="filter-unit-picker"
  350. mode="selector"
  351. range="{{reactanceFrequencyUnitOptions}}"
  352. range-key="label"
  353. value="{{reactanceFrequencyUnitIndex}}"
  354. bindchange="onReactanceFrequencyUnitChange"
  355. >
  356. <view class="filter-unit-value">{{reactanceFrequencyUnitText}}</view>
  357. </picker>
  358. </view>
  359. </view>
  360. <view class="param-row input-row">
  361. <view class="param-main">
  362. <view class="param-name">{{reactanceReactiveName}} {{reactanceReactiveSymbol}}</view>
  363. </view>
  364. <view class="filter-input-wrap">
  365. <input
  366. class="value-input filter-value-input"
  367. type="digit"
  368. placeholder="--"
  369. data-field="reactive"
  370. value="{{reactanceReactiveDisplayValue}}"
  371. bindinput="onReactanceReactiveInput"
  372. bindblur="onReactanceValueBlur"
  373. />
  374. <picker
  375. class="filter-unit-picker"
  376. mode="selector"
  377. range="{{reactanceReactiveUnitOptions}}"
  378. range-key="label"
  379. value="{{reactanceReactiveUnitIndex}}"
  380. bindchange="onReactanceReactiveUnitChange"
  381. >
  382. <view class="filter-unit-value">{{reactanceReactiveUnitText}}</view>
  383. </picker>
  384. </view>
  385. </view>
  386. <view wx:if="{{reactanceErrorText}}" class="filter-error-inline">{{reactanceErrorText}}</view>
  387. </view>
  388. <view class="panel params-section-panel">
  389. <view class="params-section-title filter-diagram-title">
  390. <view>结果</view>
  391. <view class="filter-diagram-mode">{{reactanceModeText}}</view>
  392. </view>
  393. <view
  394. wx:for="{{reactanceResultRows}}"
  395. wx:for-item="row"
  396. wx:key="label"
  397. class="param-row smd-result-row"
  398. >
  399. <view class="param-main">
  400. <view class="param-name">{{row.label}}</view>
  401. <view class="param-meta">{{row.meta}}</view>
  402. </view>
  403. <view class="smd-result-value">{{row.value}}</view>
  404. </view>
  405. </view>
  406. </block>
  407. <block wx:elif="{{activeSettingsView == 'smdCode'}}">
  408. <view class="panel params-section-panel">
  409. <view class="params-section-title smd-section-title">
  410. <view class="smd-section-title-text">类型</view>
  411. <view class="smd-mode-actions">
  412. <view
  413. wx:for="{{smdKindOptions}}"
  414. wx:key="key"
  415. class="smd-mode-button {{smdKindKey == item.key ? 'is-active' : ''}}"
  416. data-kind="{{item.key}}"
  417. bindtap="onSmdKindTap"
  418. >
  419. {{item.label}}
  420. </view>
  421. </view>
  422. </view>
  423. <view class="smd-format-row">
  424. <view
  425. wx:for="{{smdFormatOptions}}"
  426. wx:key="key"
  427. class="smd-format-button {{smdFormatKey == item.key ? 'is-active' : ''}}"
  428. data-format="{{item.key}}"
  429. bindtap="onSmdFormatTap"
  430. >
  431. {{item.label}}
  432. </view>
  433. </view>
  434. </view>
  435. <view class="panel params-section-panel">
  436. <view class="params-section-title smd-section-title">
  437. <view class="smd-section-title-text">编码</view>
  438. <view wx:if="{{smdCodeText}}" class="panel-action-button" bindtap="clearSmdCodeInput">清空</view>
  439. </view>
  440. <view class="param-row input-row">
  441. <view class="param-main">
  442. <view class="param-name">EIA</view>
  443. <view class="param-meta">{{smdKindText}} · {{smdFormatText}}</view>
  444. </view>
  445. <view class="input-wrap">
  446. <input
  447. class="value-input smd-code-input"
  448. placeholder="{{smdFormatKey == 'eia96' ? '01A' : smdFormatKey == 'eia198' ? 'A4' : '103'}}"
  449. value="{{smdCodeText}}"
  450. bindinput="onSmdCodeInput"
  451. />
  452. </view>
  453. </view>
  454. </view>
  455. <view class="panel params-section-panel">
  456. <view class="params-section-title">结果</view>
  457. <view class="param-row smd-result-row">
  458. <view class="param-main">
  459. <view class="param-name">显示值</view>
  460. <view class="param-meta {{smdErrorText ? 'param-meta--dirty' : ''}}">{{smdErrorText || smdFormulaText || '输入编码后自动计算'}}</view>
  461. </view>
  462. <view class="smd-result-value {{smdErrorText ? 'smd-result-value--error' : ''}}">{{smdResultText}}</view>
  463. </view>
  464. </view>
  465. </block>
  466. <block wx:elif="{{activeSettingsView == 'refrigeration'}}">
  467. <view class="panel params-section-panel">
  468. <view class="params-section-title smd-section-title refrigeration-title-row">
  469. <view class="smd-section-title-text">公式</view>
  470. <picker
  471. class="refrigeration-mode-picker"
  472. mode="selector"
  473. range="{{coolingModeOptions}}"
  474. range-key="label"
  475. value="{{coolingModeIndex}}"
  476. bindchange="onCoolingModeChange"
  477. >
  478. <view class="generic-picker-value refrigeration-picker-value">
  479. {{coolingModeText}}
  480. </view>
  481. </picker>
  482. </view>
  483. <view class="smd-format-row refrigeration-formula-row">
  484. <view class="refrigeration-formula-text">{{coolingFormulaText}}</view>
  485. </view>
  486. </view>
  487. <view class="panel params-section-panel">
  488. <view class="params-section-title smd-section-title">
  489. <view class="smd-section-title-text">输入</view>
  490. <view wx:if="{{coolingAnyInput}}" class="panel-action-button" bindtap="clearCoolingInputs">清空</view>
  491. </view>
  492. <view
  493. wx:for="{{coolingFieldRows}}"
  494. wx:for-item="field"
  495. wx:key="key"
  496. class="param-row input-row"
  497. >
  498. <view class="param-main">
  499. <view class="param-name">{{field.label}}</view>
  500. <view class="param-meta">{{field.unit}}</view>
  501. </view>
  502. <view class="input-wrap">
  503. <input
  504. class="value-input smd-code-input refrigeration-input"
  505. type="text"
  506. placeholder="{{field.placeholder}}"
  507. value="{{field.value}}"
  508. data-field="{{field.key}}"
  509. bindinput="onCoolingInput"
  510. />
  511. </view>
  512. </view>
  513. </view>
  514. <view class="panel params-section-panel">
  515. <view class="params-section-title">结果</view>
  516. <view wx:if="{{coolingErrorText}}" class="filter-error-inline">{{coolingErrorText}}</view>
  517. <view wx:if="{{!coolingResultRows.length && !coolingErrorText}}" class="param-row smd-result-row">
  518. <view class="param-main">
  519. <view class="param-name">显示值</view>
  520. <view class="param-meta">输入参数后自动计算</view>
  521. </view>
  522. <view class="smd-result-value">--</view>
  523. </view>
  524. <view
  525. wx:for="{{coolingResultRows}}"
  526. wx:for-item="row"
  527. wx:key="label"
  528. class="param-row smd-result-row"
  529. >
  530. <view class="param-main">
  531. <view class="param-name">{{row.label}}</view>
  532. </view>
  533. <view class="smd-result-value">{{row.value}}</view>
  534. </view>
  535. </view>
  536. </block>
  537. <block wx:elif="{{activeSettingsView == 'threePhasePower'}}">
  538. <view class="panel params-section-panel">
  539. <view class="params-section-title smd-section-title">
  540. <view class="smd-section-title-text">参数</view>
  541. <view class="smd-mode-actions">
  542. <view
  543. wx:for="{{threePhaseConnectionOptions}}"
  544. wx:key="key"
  545. class="smd-mode-button {{threePhaseConnectionKey == item.key ? 'is-active' : ''}}"
  546. data-connection="{{item.key}}"
  547. bindtap="onThreePhaseConnectionTap"
  548. >
  549. {{item.label}}
  550. </view>
  551. <view class="panel-action-button" bindtap="clearThreePhaseInputs">清除</view>
  552. </view>
  553. </view>
  554. <view wx:if="{{threePhaseErrorText}}" class="filter-error-inline">{{threePhaseErrorText}}</view>
  555. <view
  556. wx:for="{{threePhaseRows}}"
  557. wx:for-item="row"
  558. wx:key="key"
  559. class="param-row {{row.editable ? 'input-row' : ''}}"
  560. >
  561. <view class="param-main">
  562. <view class="param-name">{{row.label}}</view>
  563. <view wx:if="{{row.unit}}" class="param-meta">{{row.unit}}</view>
  564. </view>
  565. <view wx:if="{{!row.editable}}" class="smd-result-value">{{row.value}}</view>
  566. <view wx:if="{{row.editable}}" class="input-wrap">
  567. <input
  568. class="value-input smd-code-input three-phase-input"
  569. type="text"
  570. placeholder="{{row.placeholder}}"
  571. value="{{row.value}}"
  572. data-field="{{row.field}}"
  573. bindinput="onThreePhaseInput"
  574. />
  575. </view>
  576. </view>
  577. </view>
  578. </block>
  579. </block>
  580. <block wx:else>
  581. <view class="panel settings-section-panel">
  582. <view class="params-section-title">通用设置</view>
  583. <view class="settings-row">
  584. <view class="settings-row-main">
  585. <view class="param-name">夜间模式启用</view>
  586. <view class="param-meta">当前 {{themeMode === 'dark' ? '夜间' : '日间'}}</view>
  587. </view>
  588. <switch
  589. checked="{{nightModeEnabledSwitch}}"
  590. color="#0f766e"
  591. disabled="{{nightModeFollowSystem}}"
  592. bindchange="onNightModeEnabledChange"
  593. />
  594. </view>
  595. <view class="settings-row">
  596. <view class="settings-row-main">
  597. <view class="param-name">夜间模式跟随系统</view>
  598. <view class="param-meta">{{nightModeFollowSystem ? '已跟随' : '手动控制'}}</view>
  599. </view>
  600. <switch
  601. checked="{{nightModeFollowSystem}}"
  602. color="#0f766e"
  603. bindchange="onNightModeFollowSystemChange"
  604. />
  605. </view>
  606. </view>
  607. <view class="panel settings-section-panel">
  608. <view class="params-section-title">Modbus</view>
  609. <view class="settings-row">
  610. <view class="settings-row-main">
  611. <view class="param-name">协议筛选</view>
  612. <view class="param-meta">用于选择当前调试协议</view>
  613. </view>
  614. <picker
  615. mode="selector"
  616. range="{{modbusProtocolOptions}}"
  617. range-key="label"
  618. value="{{modbusProtocolIndex}}"
  619. bindchange="onModbusProtocolChange"
  620. >
  621. <view class="settings-picker-value">{{modbusProtocolText}}</view>
  622. </picker>
  623. </view>
  624. <view class="settings-row settings-row--input">
  625. <view class="settings-row-main">
  626. <view class="param-name">从机地址</view>
  627. <view class="param-meta">00 - FF</view>
  628. </view>
  629. <view class="settings-input-wrap">
  630. <input
  631. class="value-input settings-value-input settings-value-input--hex"
  632. maxlength="2"
  633. value="{{modbusSlaveAddress}}"
  634. bindblur="onModbusSlaveAddressBlur"
  635. bindconfirm="onModbusSlaveAddressBlur"
  636. />
  637. </view>
  638. </view>
  639. <view wx:if="{{!isGenericProtocol}}" class="settings-row settings-row--input">
  640. <view class="settings-row-main">
  641. <view class="param-name">用户状态个数</view>
  642. <view class="param-meta">0 - {{maxUserStatusCount}}</view>
  643. </view>
  644. <view class="settings-input-wrap">
  645. <input
  646. class="value-input settings-value-input"
  647. type="number"
  648. value="{{userStatusCount}}"
  649. bindblur="onUserStatusCountBlur"
  650. bindconfirm="onUserStatusCountBlur"
  651. />
  652. </view>
  653. </view>
  654. <view wx:if="{{!isGenericProtocol}}" class="settings-row settings-row--input">
  655. <view class="settings-row-main">
  656. <view class="param-name">状态轮询间隔</view>
  657. <view class="param-meta">{{statusPollMinInterval}} - {{statusPollMaxInterval}} ms</view>
  658. </view>
  659. <view class="settings-input-wrap settings-input-wrap--unit">
  660. <input
  661. class="value-input settings-value-input settings-value-input--unit"
  662. type="number"
  663. value="{{statusPollInterval}}"
  664. bindblur="onStatusPollIntervalBlur"
  665. bindconfirm="onStatusPollIntervalBlur"
  666. />
  667. <text class="settings-unit settings-unit--inside">ms</text>
  668. </view>
  669. </view>
  670. <view wx:if="{{isGenericProtocol}}" class="settings-row">
  671. <view class="settings-row-main">
  672. <view class="param-name">自动轮询</view>
  673. <view class="param-meta">{{genericModbusAutoPollEnabled ? '已启用' : '已停止'}}</view>
  674. </view>
  675. <switch
  676. checked="{{genericModbusAutoPollEnabled}}"
  677. color="#0f766e"
  678. bindchange="onGenericModbusAutoPollChange"
  679. />
  680. </view>
  681. <view wx:if="{{isGenericProtocol}}" class="settings-row settings-row--input">
  682. <view class="settings-row-main">
  683. <view class="param-name">轮询间隔</view>
  684. <view class="param-meta">{{statusPollMinInterval}} - {{statusPollMaxInterval}} ms</view>
  685. </view>
  686. <view class="settings-input-wrap settings-input-wrap--unit">
  687. <input
  688. class="value-input settings-value-input settings-value-input--unit"
  689. type="number"
  690. value="{{genericModbusPollInterval}}"
  691. bindblur="onGenericModbusPollIntervalBlur"
  692. bindconfirm="onGenericModbusPollIntervalBlur"
  693. />
  694. <text class="settings-unit settings-unit--inside">ms</text>
  695. </view>
  696. </view>
  697. <view wx:if="{{isGenericProtocol}}" class="settings-row settings-row--input">
  698. <view class="settings-row-main">
  699. <view class="param-name">最大包长</view>
  700. <view class="param-meta">0 为无限制,最小 {{genericModbusMinPacketLength}} 字节</view>
  701. </view>
  702. <view class="settings-input-wrap settings-input-wrap--unit">
  703. <input
  704. class="value-input settings-value-input settings-value-input--unit"
  705. type="number"
  706. value="{{genericModbusMaxPacketLength}}"
  707. bindblur="onGenericModbusMaxPacketLengthBlur"
  708. bindconfirm="onGenericModbusMaxPacketLengthBlur"
  709. />
  710. <text class="settings-unit settings-unit--inside">B</text>
  711. </view>
  712. </view>
  713. </view>
  714. <view class="panel settings-section-panel">
  715. <view class="params-section-title">工具</view>
  716. <view
  717. wx:for="{{toolEntries}}"
  718. wx:key="view"
  719. class="settings-row settings-tool-row"
  720. data-view="{{item.view}}"
  721. bindtap="openToolEntry"
  722. >
  723. <view class="settings-tool-main">
  724. <view class="settings-tool-icon-frame {{item.icon}}">
  725. <image class="settings-tool-icon-image" src="{{item.iconSrc}}" mode="aspectFit" />
  726. </view>
  727. <view class="param-name settings-tool-title">{{item.label}}</view>
  728. </view>
  729. <view class="entry-chevron"></view>
  730. </view>
  731. </view>
  732. </block>
  733. </view>
  734. </scroll-view>