vite-uni-dev-tool 0.0.48 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. package/README.md +20 -0
  2. package/dist/const.cjs +1 -0
  3. package/dist/const.d.ts +78 -161
  4. package/dist/const.d.ts.map +1 -1
  5. package/dist/const.js +1 -47
  6. package/dist/core-shared.d.ts +44 -0
  7. package/dist/core-shared.d.ts.map +1 -0
  8. package/dist/core-shared.js +1 -0
  9. package/dist/core.d.ts +2 -40
  10. package/dist/core.d.ts.map +1 -1
  11. package/dist/core.js +4 -159
  12. package/dist/i18n/index.cjs +1 -0
  13. package/dist/i18n/index.d.ts +9 -0
  14. package/dist/i18n/index.d.ts.map +1 -0
  15. package/dist/i18n/index.js +1 -0
  16. package/dist/i18n/instance.cjs +1 -0
  17. package/dist/i18n/instance.d.ts +15 -0
  18. package/dist/i18n/instance.d.ts.map +1 -0
  19. package/dist/i18n/instance.js +1 -0
  20. package/dist/i18n/locales/en.cjs +1 -0
  21. package/dist/i18n/locales/en.d.ts +470 -0
  22. package/dist/i18n/locales/en.d.ts.map +1 -0
  23. package/dist/i18n/locales/en.js +1 -0
  24. package/dist/i18n/locales/zh-Hans.cjs +1 -0
  25. package/dist/i18n/locales/zh-Hans.d.ts +476 -0
  26. package/dist/i18n/locales/zh-Hans.d.ts.map +1 -0
  27. package/dist/i18n/locales/zh-Hans.js +1 -0
  28. package/dist/index.cjs +1 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +1 -1
  31. package/dist/modules/devConsole/index.cjs +4 -0
  32. package/dist/{devConsole → modules/devConsole}/index.d.ts +1 -1
  33. package/dist/modules/devConsole/index.d.ts.map +1 -0
  34. package/dist/modules/devConsole/index.js +4 -0
  35. package/dist/modules/devEvent/index.cjs +5 -0
  36. package/dist/modules/devEvent/index.d.ts +115 -0
  37. package/dist/modules/devEvent/index.d.ts.map +1 -0
  38. package/dist/modules/devEvent/index.js +5 -0
  39. package/dist/modules/devIntercept/index.cjs +13 -0
  40. package/dist/modules/devIntercept/index.d.ts +71 -0
  41. package/dist/modules/devIntercept/index.d.ts.map +1 -0
  42. package/dist/modules/devIntercept/index.js +13 -0
  43. package/dist/modules/devStore/index.cjs +1 -0
  44. package/dist/modules/devStore/index.d.ts +159 -0
  45. package/dist/modules/devStore/index.d.ts.map +1 -0
  46. package/dist/modules/devStore/index.js +1 -0
  47. package/dist/modules/devToolInfo/index.cjs +1 -0
  48. package/dist/modules/devToolInfo/index.d.ts +27 -0
  49. package/dist/modules/devToolInfo/index.d.ts.map +1 -0
  50. package/dist/modules/devToolInfo/index.js +1 -0
  51. package/dist/plugins/uniDevTool/transform/transformApp.cjs +44 -0
  52. package/dist/plugins/uniDevTool/transform/transformApp.d.ts.map +1 -1
  53. package/dist/plugins/uniDevTool/transform/transformApp.js +17 -17
  54. package/dist/plugins/uniDevTool/transform/transformMain.cjs +3 -0
  55. package/dist/plugins/uniDevTool/transform/transformMain.d.ts.map +1 -1
  56. package/dist/plugins/uniDevTool/transform/transformMain.js +3 -3
  57. package/dist/plugins/uniDevTool/transform/transformVue.cjs +41 -0
  58. package/dist/plugins/uniDevTool/transform/transformVue.d.ts +1 -2
  59. package/dist/plugins/uniDevTool/transform/transformVue.d.ts.map +1 -1
  60. package/dist/plugins/uniDevTool/transform/transformVue.js +32 -19
  61. package/dist/plugins/uniDevTool/uniDevTool.cjs +5 -0
  62. package/dist/plugins/uniDevTool/uniDevTool.d.ts +3 -11
  63. package/dist/plugins/uniDevTool/uniDevTool.d.ts.map +1 -1
  64. package/dist/plugins/uniDevTool/uniDevTool.js +3 -3
  65. package/dist/plugins/uniGlobalComponents/uniGlobalComponents.cjs +19 -0
  66. package/dist/plugins/uniGlobalComponents/uniGlobalComponents.d.ts.map +1 -1
  67. package/dist/plugins/uniGlobalComponents/uniGlobalComponents.js +11 -19
  68. package/dist/plugins/uniParseStock/index.d.ts +10 -0
  69. package/dist/plugins/uniParseStock/index.d.ts.map +1 -0
  70. package/dist/plugins/utils/index.cjs +2 -0
  71. package/dist/plugins/utils/index.d.ts +1 -3
  72. package/dist/plugins/utils/index.d.ts.map +1 -1
  73. package/dist/plugins/utils/index.js +2 -2
  74. package/dist/shims-uni.d.ts +140 -0
  75. package/dist/type.d.ts +174 -16
  76. package/dist/type.d.ts.map +1 -1
  77. package/dist/utils/array.cjs +1 -0
  78. package/dist/utils/array.d.ts.map +1 -1
  79. package/dist/utils/array.js +1 -12
  80. package/dist/utils/date.cjs +1 -0
  81. package/dist/utils/date.d.ts.map +1 -1
  82. package/dist/utils/date.js +1 -59
  83. package/dist/utils/file.cjs +1 -0
  84. package/dist/utils/file.d.ts.map +1 -1
  85. package/dist/utils/file.js +1 -85
  86. package/dist/utils/function.cjs +1 -0
  87. package/dist/utils/function.d.ts +13 -0
  88. package/dist/utils/function.d.ts.map +1 -1
  89. package/dist/utils/function.js +1 -68
  90. package/dist/utils/index.cjs +1 -0
  91. package/dist/utils/index.d.ts.map +1 -1
  92. package/dist/utils/index.js +1 -63
  93. package/dist/utils/ip.cjs +1 -0
  94. package/dist/utils/ip.d.ts +1 -1
  95. package/dist/utils/ip.d.ts.map +1 -1
  96. package/dist/utils/ip.js +1 -45
  97. package/dist/utils/language.cjs +1 -0
  98. package/dist/utils/language.d.ts +2 -1
  99. package/dist/utils/language.d.ts.map +1 -1
  100. package/dist/utils/language.js +1 -63
  101. package/dist/utils/object.cjs +1 -0
  102. package/dist/utils/object.d.ts +4 -5
  103. package/dist/utils/object.d.ts.map +1 -1
  104. package/dist/utils/object.js +1 -136
  105. package/dist/utils/openLink.cjs +1 -0
  106. package/dist/utils/openLink.d.ts.map +1 -1
  107. package/dist/utils/openLink.js +1 -28
  108. package/dist/utils/page.cjs +1 -0
  109. package/dist/utils/page.d.ts.map +1 -1
  110. package/dist/utils/page.js +1 -7
  111. package/dist/utils/platform.cjs +1 -0
  112. package/dist/utils/platform.d.ts.map +1 -1
  113. package/dist/utils/platform.js +1 -17
  114. package/dist/utils/string.cjs +1 -0
  115. package/dist/utils/string.d.ts.map +1 -1
  116. package/dist/utils/string.js +1 -114
  117. package/dist/utils/utils.cjs +1 -0
  118. package/dist/utils/utils.d.ts +1 -1
  119. package/dist/utils/utils.d.ts.map +1 -1
  120. package/dist/utils/utils.js +1 -126
  121. package/dist/v3/AppTransition/index.vue +170 -0
  122. package/dist/v3/AutoSizer/index.vue +4 -5
  123. package/dist/v3/AutoSizer/index1.vue +4 -6
  124. package/dist/v3/AutoSizer/utils.ts +1 -1
  125. package/dist/v3/CaptureScreen/index.vue +19 -8
  126. package/dist/v3/CircularButton/index.vue +64 -13
  127. package/dist/v3/ConsoleList/ConsoleItem.vue +56 -5
  128. package/dist/v3/ConsoleList/RunJSInput.vue +10 -6
  129. package/dist/v3/ConsoleList/index.vue +51 -35
  130. package/dist/v3/CustomSwiper/CustomSwiperItem.vue +49 -0
  131. package/dist/v3/CustomSwiper/index.vue +104 -0
  132. package/dist/v3/DevTool/fps-collector.render.ts +148 -0
  133. package/dist/v3/DevTool/index.vue +209 -102
  134. package/dist/v3/DevToolButton/index.vue +40 -59
  135. package/dist/v3/DevToolTitle/index.vue +4 -1
  136. package/dist/v3/DevToolWindow/DevToolOverlay.vue +182 -0
  137. package/dist/v3/DevToolWindow/const.ts +47 -69
  138. package/dist/v3/DevToolWindow/hooks/dataUtils.ts +48 -0
  139. package/dist/v3/DevToolWindow/hooks/useDevToolData.ts +338 -0
  140. package/dist/v3/DevToolWindow/hooks/useDevToolHandlers.ts +549 -0
  141. package/dist/v3/DevToolWindow/hooks/useDevToolOverlay.ts +184 -0
  142. package/dist/v3/DevToolWindow/index.css +89 -0
  143. package/dist/v3/DevToolWindow/index.vue +800 -1450
  144. package/dist/v3/DraggableContainer/index.vue +456 -0
  145. package/dist/v3/ElEvent/ElEventItem.vue +4 -3
  146. package/dist/v3/ElEvent/index.vue +26 -9
  147. package/dist/v3/Empty/index.vue +1 -0
  148. package/dist/v3/FilterInput/index.vue +8 -22
  149. package/dist/v3/FilterSelect/index.vue +37 -24
  150. package/dist/v3/Instance/components/InstanceTreeNode.vue +265 -0
  151. package/dist/v3/Instance/flatten.ts +226 -0
  152. package/dist/v3/Instance/index.vue +94 -0
  153. package/dist/v3/Instance/registry.ts +49 -0
  154. package/dist/v3/Instance/transformTree.ts +375 -0
  155. package/dist/v3/Instance/transformTreeCtx.ts +268 -0
  156. package/dist/v3/{InstanceTree → Instance}/typing.d.ts +15 -2
  157. package/dist/v3/InstanceDetail/index.vue +433 -44
  158. package/dist/v3/JsonDetail/index.vue +12 -8
  159. package/dist/v3/JsonPretty/components/Brackets/index.vue +1 -0
  160. package/dist/v3/JsonPretty/components/Carets/index.vue +2 -1
  161. package/dist/v3/JsonPretty/components/CheckController/index.vue +26 -15
  162. package/dist/v3/JsonPretty/components/TreeNode/index.vue +42 -20
  163. package/dist/v3/JsonPretty/index.vue +60 -37
  164. package/dist/v3/JsonPretty/utils/index.ts +41 -44
  165. package/dist/v3/MovableContainer/index.vue +89 -0
  166. package/dist/v3/NFCList/NFCItem.vue +14 -14
  167. package/dist/v3/NFCList/NFCTool.vue +99 -81
  168. package/dist/v3/NFCList/index.vue +14 -10
  169. package/dist/v3/NetworkList/InterceptConfig.vue +154 -364
  170. package/dist/v3/NetworkList/InterceptItem.vue +14 -6
  171. package/dist/v3/NetworkList/NetworkDetail.vue +34 -29
  172. package/dist/v3/NetworkList/NetworkIntercept.vue +11 -8
  173. package/dist/v3/NetworkList/NetworkItem.vue +27 -11
  174. package/dist/v3/NetworkList/NetworkSend.vue +132 -290
  175. package/dist/v3/NetworkList/hooks/useNetworkForm.ts +86 -0
  176. package/dist/v3/NetworkList/index.vue +32 -24
  177. package/dist/v3/NetworkList/utils.ts +101 -0
  178. package/dist/v3/Performance/index.vue +495 -0
  179. package/dist/v3/Performance/modules/PerformanceMetrics.vue +153 -0
  180. package/dist/v3/Performance/modules/PerformanceWidget.vue +249 -0
  181. package/dist/v3/Performance/modules/usePerformanceChart.ts +460 -0
  182. package/dist/v3/Performance/modules/usePerformanceData.ts +258 -0
  183. package/dist/v3/Pick/index.vue +322 -0
  184. package/dist/v3/PiniaList/index.vue +38 -17
  185. package/dist/v3/RouteList/index.vue +32 -15
  186. package/dist/v3/RunJS/index.vue +30 -10
  187. package/dist/v3/ScanCodeList/ScanCodeItem.vue +2 -9
  188. package/dist/v3/ScanCodeList/index.vue +12 -9
  189. package/dist/v3/SettingButton/index.vue +45 -0
  190. package/dist/v3/SettingList/index.css +120 -0
  191. package/dist/v3/SettingList/index.vue +96 -537
  192. package/dist/v3/SettingList/modules/SettingDevTool.vue +208 -0
  193. package/dist/v3/SettingList/modules/SettingInfo.vue +119 -0
  194. package/dist/v3/SettingList/modules/SettingLanguage.vue +74 -0
  195. package/dist/v3/SettingList/modules/SettingLog.vue +230 -0
  196. package/dist/v3/SettingList/modules/SettingNetwork.vue +120 -0
  197. package/dist/v3/SettingList/modules/SettingTheme.vue +312 -0
  198. package/dist/v3/SourceCode/Line.vue +15 -2
  199. package/dist/v3/SourceCode/index.vue +25 -24
  200. package/dist/v3/SourceCode/parseCode.ts +114 -56
  201. package/dist/v3/StorageList/index.vue +33 -33
  202. package/dist/v3/Tabs/index.vue +31 -28
  203. package/dist/v3/Tag/index.vue +39 -20
  204. package/dist/v3/TransferList/TransferDetail.vue +268 -0
  205. package/dist/v3/TransferList/TransferItem.vue +125 -0
  206. package/dist/v3/TransferList/index.vue +181 -0
  207. package/dist/v3/UniEvent/UniEventItem.vue +1 -0
  208. package/dist/v3/UniEvent/index.vue +28 -29
  209. package/dist/v3/{VirtualListPro → VirtualList}/AutoSize.vue +1 -1
  210. package/dist/v3/VirtualList/index.vue +382 -82
  211. package/dist/v3/VuexList/index.vue +38 -17
  212. package/dist/v3/WebSocket/WebSocketDetail.vue +142 -80
  213. package/dist/v3/WebSocket/WebSocketItem.vue +10 -4
  214. package/dist/v3/WebSocket/index.vue +44 -30
  215. package/dist/v3/hooks/useNFC/index.ts +6 -6
  216. package/dist/v3/hooks/useNFC/typing.d.ts +2 -2
  217. package/dist/v3/hooks/useNFC/useNFCAndroid.ts +215 -626
  218. package/dist/v3/hooks/useNFC/useNFCMpWeiXin.ts +54 -85
  219. package/dist/v3/hooks/useNFC/utils.ts +3 -3
  220. package/dist/v3/hooks/useRequest/index.ts +2 -2
  221. package/dist/v3/hooks/useScanCode/index.ts +10 -8
  222. package/dist/v3/styles/theme.css +290 -0
  223. package/dist/v3/styles/theme.ts +12 -0
  224. package/package.json +25 -5
  225. package/dist/devConsole/index.d.ts.map +0 -1
  226. package/dist/devConsole/index.js +0 -273
  227. package/dist/devEvent/index.d.ts +0 -328
  228. package/dist/devEvent/index.d.ts.map +0 -1
  229. package/dist/devEvent/index.js +0 -697
  230. package/dist/devEventBus/index.d.ts +0 -42
  231. package/dist/devEventBus/index.d.ts.map +0 -1
  232. package/dist/devEventBus/index.js +0 -70
  233. package/dist/devIntercept/index.d.ts +0 -281
  234. package/dist/devIntercept/index.d.ts.map +0 -1
  235. package/dist/devIntercept/index.js +0 -949
  236. package/dist/devRunJS/index.d.ts +0 -67
  237. package/dist/devRunJS/index.d.ts.map +0 -1
  238. package/dist/devStore/index.d.ts +0 -199
  239. package/dist/devStore/index.d.ts.map +0 -1
  240. package/dist/devStore/index.js +0 -562
  241. package/dist/devToolInfo/index.d.ts +0 -17
  242. package/dist/devToolInfo/index.d.ts.map +0 -1
  243. package/dist/devToolInfo/index.js +0 -15
  244. package/dist/v3/AutoSizer/utils.d.ts +0 -5
  245. package/dist/v3/AutoSizer/utils.d.ts.map +0 -1
  246. package/dist/v3/ConsoleList/staticTips.d.ts +0 -13
  247. package/dist/v3/ConsoleList/staticTips.d.ts.map +0 -1
  248. package/dist/v3/DevToolWindow/const.d.ts +0 -46
  249. package/dist/v3/DevToolWindow/const.d.ts.map +0 -1
  250. package/dist/v3/InstanceTree/components/InstanceTreeNode.vue +0 -81
  251. package/dist/v3/InstanceTree/flatten.d.ts +0 -10
  252. package/dist/v3/InstanceTree/flatten.d.ts.map +0 -1
  253. package/dist/v3/InstanceTree/flatten.ts +0 -75
  254. package/dist/v3/InstanceTree/index.vue +0 -51
  255. package/dist/v3/InstanceTree/transformTree.d.ts +0 -17
  256. package/dist/v3/InstanceTree/transformTree.d.ts.map +0 -1
  257. package/dist/v3/InstanceTree/transformTree.ts +0 -237
  258. package/dist/v3/JsonPretty/hooks/useClipboard.d.ts +0 -4
  259. package/dist/v3/JsonPretty/hooks/useClipboard.d.ts.map +0 -1
  260. package/dist/v3/JsonPretty/hooks/useError.d.ts +0 -8
  261. package/dist/v3/JsonPretty/hooks/useError.d.ts.map +0 -1
  262. package/dist/v3/JsonPretty/type.d.ts +0 -94
  263. package/dist/v3/JsonPretty/type.d.ts.map +0 -1
  264. package/dist/v3/JsonPretty/utils/index.d.ts +0 -10
  265. package/dist/v3/JsonPretty/utils/index.d.ts.map +0 -1
  266. package/dist/v3/NFCList/const.d.ts +0 -13
  267. package/dist/v3/NFCList/const.d.ts.map +0 -1
  268. package/dist/v3/NetworkList/const.d.ts +0 -5
  269. package/dist/v3/NetworkList/const.d.ts.map +0 -1
  270. package/dist/v3/SourceCode/parseCode.d.ts +0 -27
  271. package/dist/v3/SourceCode/parseCode.d.ts.map +0 -1
  272. package/dist/v3/UploadList/UploadDetail.vue +0 -255
  273. package/dist/v3/UploadList/UploadItem.vue +0 -122
  274. package/dist/v3/UploadList/index.vue +0 -125
  275. package/dist/v3/VirtualListPro/index.vue +0 -229
  276. package/dist/v3/hooks/useContainerStyle.d.ts +0 -15
  277. package/dist/v3/hooks/useContainerStyle.d.ts.map +0 -1
  278. package/dist/v3/hooks/useNFC/index.d.ts +0 -5
  279. package/dist/v3/hooks/useNFC/index.d.ts.map +0 -1
  280. package/dist/v3/hooks/useNFC/useNFCAndroid.d.ts +0 -2
  281. package/dist/v3/hooks/useNFC/useNFCAndroid.d.ts.map +0 -1
  282. package/dist/v3/hooks/useNFC/useNFCMpWeiXin.d.ts +0 -2
  283. package/dist/v3/hooks/useNFC/useNFCMpWeiXin.d.ts.map +0 -1
  284. package/dist/v3/hooks/useNFC/utils.d.ts +0 -95
  285. package/dist/v3/hooks/useNFC/utils.d.ts.map +0 -1
  286. package/dist/v3/hooks/useRequest/index.d.ts +0 -126
  287. package/dist/v3/hooks/useRequest/index.d.ts.map +0 -1
  288. package/dist/v3/hooks/useRequest/utils.d.ts +0 -35
  289. package/dist/v3/hooks/useRequest/utils.d.ts.map +0 -1
  290. package/dist/v3/hooks/useScanCode/index.d.ts +0 -36
  291. package/dist/v3/hooks/useScanCode/index.d.ts.map +0 -1
  292. /package/dist/v3/{VirtualListPro → VirtualList}/readme.md +0 -0
@@ -0,0 +1,495 @@
1
+ <template>
2
+ <view class="performance-content">
3
+ <view class="performance-control">
4
+ <DevToolTitle>{{ t('performance.title') }}</DevToolTitle>
5
+ </view>
6
+ <view class="performance-item">
7
+ <!-- 图表容器 -->
8
+ <canvas
9
+ canvas-id="fpsChartTab"
10
+ class="fps-chart-container"
11
+ :style="{ backgroundColor: chartBgColor }"
12
+ id="fpsChartTab"></canvas>
13
+ <PerformanceMetrics
14
+ :is-tab="true"
15
+ :fps="fps"
16
+ :cpuLoad="cpuLoad"
17
+ :memory="memory"
18
+ :showFps="showFps"
19
+ :showCpu="showCpu"
20
+ :showMemory="showMemory" />
21
+
22
+ <view class="performance-item-content">
23
+ <!-- 平台限制提示 -->
24
+ <view
25
+ class="performance-tips"
26
+ style="
27
+ color: #e6a23c;
28
+ background: rgb(230 162 60 / 10%);
29
+ padding: 8px;
30
+ border-radius: 4px;
31
+ margin-bottom: 12px;
32
+ font-size: 11px;
33
+ "
34
+ v-if="!isH5">
35
+ {{ t('performance.platformTip') }}
36
+ </view>
37
+ <DevToolTitle>{{ t('performance.settings') }}</DevToolTitle>
38
+ <view class="performance-row">
39
+ <view>{{ t('performance.enable') }}</view>
40
+ <switch
41
+ :checked="performanceMonitorEnabled"
42
+ @change="toggleMonitor"
43
+ :color="themeColor"
44
+ style="transform: scale(0.7)" />
45
+ </view>
46
+ <view class="performance-tips">
47
+ {{ t('performance.enableTip') }}
48
+ </view>
49
+ <view class="performance-row">
50
+ <view>{{ t('performance.widget') }}</view>
51
+ <switch
52
+ :disabled="!performanceMonitorEnabled"
53
+ :checked="performanceVisible"
54
+ @change="togglePerformanceVisible"
55
+ :color="themeColor"
56
+ style="transform: scale(0.7)" />
57
+ </view>
58
+ <view class="performance-tips">
59
+ {{ t('performance.widgetTip') }}
60
+ </view>
61
+ <view class="performance-row">
62
+ <view>{{ t('performance.fps') }}</view>
63
+ <switch
64
+ :disabled="!performanceMonitorEnabled"
65
+ :checked="showFps"
66
+ @change="toggleFps"
67
+ :color="themeColor"
68
+ style="transform: scale(0.7)" />
69
+ </view>
70
+ <view class="performance-tips">
71
+ {{ t('performance.fpsTip') }}
72
+ </view>
73
+ <view class="performance-row">
74
+ <view>{{ t('performance.cpu') }}</view>
75
+ <switch
76
+ :disabled="!performanceMonitorEnabled"
77
+ :checked="showCpu"
78
+ @change="toggleCpu"
79
+ :color="themeColor"
80
+ style="transform: scale(0.7)" />
81
+ </view>
82
+ <view class="performance-tips">
83
+ {{ t('performance.cpuTip') }}
84
+ </view>
85
+ <view class="performance-row">
86
+ <view>{{ t('performance.memory') }}</view>
87
+ <switch
88
+ :disabled="!performanceMonitorEnabled"
89
+ :checked="showMemory"
90
+ @change="toggleMemory"
91
+ :color="themeColor"
92
+ style="transform: scale(0.7)" />
93
+ </view>
94
+ <view class="performance-tips">
95
+ {{ t('performance.memoryTip') }}
96
+ </view>
97
+
98
+ <!-- CPU Profile / Long Tasks List -->
99
+ <view
100
+ class="performance-item-content"
101
+ style="margin-top: 16px"
102
+ v-if="longTasksHistory.length > 0">
103
+ <DevToolTitle>{{ t('performance.longTaskTitle') }}</DevToolTitle>
104
+ <view class="performance-tips">
105
+ {{ t('performance.longTaskTip') }}
106
+ </view>
107
+ <view class="long-tasks-list">
108
+ <view
109
+ v-for="(task, index) in longTasksHistory.slice().reverse()"
110
+ :key="index"
111
+ class="long-task-item">
112
+ <view class="task-info">
113
+ <text
114
+ class="task-type"
115
+ :class="`type-${task.type?.toLowerCase()}`">
116
+ {{
117
+ task.type === 'Logic'
118
+ ? t('performance.logic')
119
+ : t('performance.ui')
120
+ }}
121
+ </text>
122
+ <text class="task-time">{{ formatTaskTime(task.ts) }}</text>
123
+ </view>
124
+ <view
125
+ class="task-duration"
126
+ :class="getDurationClass(task.duration)">
127
+ {{ task.duration }}ms
128
+ </view>
129
+ </view>
130
+ </view>
131
+ </view>
132
+ </view>
133
+ </view>
134
+ </view>
135
+ </template>
136
+
137
+ <script setup lang="ts">
138
+ import { ref, computed, onMounted, onUnmounted, getCurrentInstance } from 'vue';
139
+ import { getDevToolInfo, setDevToolInfo } from '../../modules/devToolInfo';
140
+ import PerformanceMetrics from './modules/PerformanceMetrics.vue';
141
+ import { usePerformanceData } from './modules/usePerformanceData';
142
+ import { usePerformanceChart } from './modules/usePerformanceChart';
143
+ import { MSG_TYPE, DEV_CORE_MESSAGE } from '../../const';
144
+ import DevToolTitle from '../DevToolTitle/index.vue';
145
+ import { useI18n } from '../../i18n';
146
+ import { getThemeMainColor } from '../styles/theme';
147
+ const { t } = useI18n();
148
+ const themeColor = computed(() => getThemeMainColor(props.theme));
149
+
150
+ // 无需声明 renderScript
151
+
152
+ const props = withDefaults(
153
+ defineProps<{
154
+ mode?: 'tab';
155
+ zIndex?: number;
156
+ customStyle?: Record<string, any>;
157
+ contentHeight?: number;
158
+ theme?: string;
159
+ }>(),
160
+ {
161
+ zIndex: 1000,
162
+ theme: 'light',
163
+ },
164
+ );
165
+
166
+ const showFps = ref(true);
167
+ const showCpu = ref(true);
168
+ const showMemory = ref(true);
169
+ const performanceVisible = ref(false);
170
+ const isH5 = ref(false);
171
+
172
+ function loadSettings() {
173
+ // #ifdef H5
174
+ isH5.value = true;
175
+ // #endif
176
+
177
+ const info = getDevToolInfo();
178
+ if (info && info.performanceSettings) {
179
+ showFps.value = info.performanceSettings.showFps ?? true;
180
+ showCpu.value = info.performanceSettings.showCpu ?? true;
181
+ showMemory.value = info.performanceSettings.showMemory ?? true;
182
+ performanceMonitorEnabled.value =
183
+ info.performanceSettings.enableMonitor ?? false;
184
+ }
185
+ if (info && info.performanceVisible !== undefined) {
186
+ performanceVisible.value = info.performanceVisible;
187
+ }
188
+ }
189
+
190
+ function saveSettings() {
191
+ setDevToolInfo({
192
+ performanceSettings: {
193
+ showFps: showFps.value,
194
+ showCpu: showCpu.value,
195
+ showMemory: showMemory.value,
196
+ enableMonitor: performanceMonitorEnabled.value,
197
+ },
198
+ performanceVisible: performanceVisible.value,
199
+ });
200
+ }
201
+
202
+ function toggleFps(e: any) {
203
+ showFps.value = e.detail.value;
204
+ saveSettings();
205
+ }
206
+
207
+ function toggleCpu(e: any) {
208
+ showCpu.value = e.detail.value;
209
+ saveSettings();
210
+ }
211
+
212
+ function toggleMemory(e: any) {
213
+ showMemory.value = e.detail.value;
214
+ saveSettings();
215
+ }
216
+
217
+ function togglePerformanceVisible(e: any) {
218
+ performanceVisible.value = e.detail.value;
219
+
220
+ // 如果关闭悬浮窗,同时关闭监测功能
221
+ if (!performanceVisible.value && performanceMonitorEnabled.value) {
222
+ performanceMonitorEnabled.value = false;
223
+ performanceData.stopHeartbeat();
224
+ performanceChart.stopRenderLoop();
225
+ // 通知 PerformanceWidget 停止监测
226
+ uni.$emit(MSG_TYPE.PERF_MONITOR, false);
227
+ }
228
+
229
+ saveSettings();
230
+ // 通知 DevTool 组件更新性能弹窗可见性
231
+ uni.$emit(DEV_CORE_MESSAGE, {
232
+ type: MSG_TYPE.PERF_VISIBLE,
233
+ data: performanceVisible.value,
234
+ });
235
+ }
236
+
237
+ function toggleMonitor(e: any) {
238
+ performanceMonitorEnabled.value = e.detail.value;
239
+ if (!performanceMonitorEnabled.value) {
240
+ performanceVisible.value = false;
241
+ }
242
+ saveSettings();
243
+ uni.$emit(MSG_TYPE.PERF_MONITOR, performanceMonitorEnabled.value);
244
+ if (performanceMonitorEnabled.value) {
245
+ performanceData.initData(
246
+ Math.ceil(performanceChart.canvasWidth.value / stepSize) + 4,
247
+ );
248
+ performanceData.startHeartbeat();
249
+ performanceChart.startRenderLoop();
250
+ uni.$emit(DEV_CORE_MESSAGE, {
251
+ type: MSG_TYPE.PERF_VISIBLE,
252
+ data: performanceVisible.value,
253
+ });
254
+ } else {
255
+ performanceData.stopHeartbeat();
256
+ performanceChart.stopRenderLoop();
257
+ uni.$emit(DEV_CORE_MESSAGE, {
258
+ type: MSG_TYPE.PERF_VISIBLE,
259
+ data: false,
260
+ });
261
+ }
262
+ }
263
+
264
+ // 根据主题计算颜色
265
+ const isDark = computed(() => {
266
+ return props.theme === 'dark';
267
+ });
268
+ const chartBgColor = computed(() =>
269
+ isDark.value ? 'rgba(255, 255, 255, 0.08)' : 'rgba(0, 0, 0, 0.05)',
270
+ );
271
+
272
+ const instance = getCurrentInstance();
273
+ const stepSize = 5;
274
+
275
+ // Hooks
276
+ const performanceData = usePerformanceData();
277
+ const { fps, cpuLoad, memory, performanceMonitorEnabled, longTasksHistory } =
278
+ performanceData;
279
+
280
+ const performanceChart = usePerformanceChart({
281
+ theme: props.theme,
282
+ isDark,
283
+ instance,
284
+ canvasIdFn: () => 'fpsChartTab',
285
+ stepSize,
286
+ data: performanceData,
287
+ config: {
288
+ showFps,
289
+ showCpu,
290
+ showMemory,
291
+ },
292
+ props: { mode: 'tab' },
293
+ });
294
+
295
+ function formatTaskTime(ts: number) {
296
+ const date = new Date(ts);
297
+ return `${date.getHours().toString().padStart(2, '0')}:${date
298
+ .getMinutes()
299
+ .toString()
300
+ .padStart(2, '0')}:${date.getSeconds().toString().padStart(2, '0')}.${date
301
+ .getMilliseconds()
302
+ .toString()
303
+ .padStart(3, '0')}`;
304
+ }
305
+
306
+ function getDurationClass(duration: number) {
307
+ if (duration > 200) return 'task-danger';
308
+ if (duration > 100) return 'task-warning';
309
+ return '';
310
+ }
311
+
312
+ onMounted(() => {
313
+ loadSettings();
314
+
315
+ performanceChart.initCanvas(() => {
316
+ performanceData.initData(
317
+ Math.ceil(performanceChart.canvasWidth.value / stepSize) + 4,
318
+ );
319
+ // 只有在监控开启且窗口可见时,才启动 Tab 的渲染循环
320
+ if (performanceMonitorEnabled.value) {
321
+ performanceChart.startRenderLoop();
322
+ }
323
+ });
324
+
325
+ // 如果监测状态是开启的,恢复执行
326
+ if (performanceMonitorEnabled.value) {
327
+ performanceData.startHeartbeat();
328
+ // @ts-ignore
329
+ if (performanceData.startLogicMonitor) {
330
+ // @ts-ignore
331
+ performanceData.startLogicMonitor();
332
+ }
333
+ }
334
+
335
+ // 监听核心模块消息
336
+ uni.$on(DEV_CORE_MESSAGE, handleCoreMessage);
337
+ // 监听监测状态变化(来自 PerformanceWidget)
338
+ uni.$on(MSG_TYPE.PERF_MONITOR, onMonitorStateChange);
339
+ });
340
+
341
+ // 监测状态变化处理(来自 PerformanceWidget 的通知)
342
+ function onMonitorStateChange(enabled: boolean) {
343
+ performanceMonitorEnabled.value = enabled;
344
+ if (!enabled) {
345
+ performanceData.stopHeartbeat();
346
+ performanceChart.stopRenderLoop();
347
+ } else {
348
+ // 补全开启逻辑
349
+ performanceData.startHeartbeat();
350
+ // 只有主窗口可见时才恢复绘制
351
+ const { devToolWindowVisible = false } = getDevToolInfo();
352
+ if (devToolWindowVisible) {
353
+ performanceChart.startRenderLoop();
354
+ }
355
+ }
356
+ }
357
+
358
+ // 处理核心模块消息
359
+ function handleCoreMessage(msg: string | { type: string; data: any }) {
360
+ let type: string | undefined;
361
+ let data: any;
362
+ try {
363
+ const payload = typeof msg === 'string' ? JSON.parse(msg) : msg;
364
+ type = payload.type;
365
+ data = payload.data;
366
+ } catch (_e) {
367
+ return;
368
+ }
369
+
370
+ if (type === MSG_TYPE.WINDOW_VISIBLE) {
371
+ onWindowVisibleChange(data);
372
+ }
373
+ }
374
+
375
+ // 窗口可见性变化处理
376
+ function onWindowVisibleChange(visible: boolean) {
377
+ if (!visible) {
378
+ // 窗口关闭时,仅停止 Tab 页面的渲染绘制,节省性能
379
+ performanceChart.stopRenderLoop();
380
+ // 逻辑层监控和心跳不再随窗口关闭而停止(只要 performanceMonitorEnabled 为 true)
381
+ } else {
382
+ // 窗口打开时,如果监控开启了,恢复 Tab 的渲染绘制
383
+ if (performanceMonitorEnabled.value) {
384
+ performanceChart.startRenderLoop();
385
+ }
386
+ }
387
+ }
388
+
389
+ onUnmounted(() => {
390
+ performanceChart.resetCanvas();
391
+ uni.$off(DEV_CORE_MESSAGE, handleCoreMessage);
392
+ uni.$off(MSG_TYPE.PERF_MONITOR, onMonitorStateChange);
393
+ });
394
+ </script>
395
+
396
+ <style scoped>
397
+ .performance-content {
398
+ height: 100%;
399
+ overflow: auto;
400
+ font-size: var(--dev-tool-base-font-size);
401
+ }
402
+
403
+ .performance-control {
404
+ padding: 0 16px;
405
+ }
406
+
407
+ .performance-item {
408
+ padding: 0 16px;
409
+ box-sizing: border-box;
410
+ }
411
+
412
+ .performance-row {
413
+ display: flex;
414
+ align-items: center;
415
+ justify-content: space-between;
416
+ min-height: 18px;
417
+ }
418
+
419
+ .fps-chart-container {
420
+ width: 100%;
421
+ flex: 1;
422
+ min-height: 50px;
423
+ margin-bottom: 4px;
424
+ border-radius: 4px;
425
+ overflow: hidden;
426
+ height: 300px;
427
+ }
428
+
429
+ .performance-tips {
430
+ color: #616161;
431
+ font-size: var(--dev-tool-tips-font-size);
432
+ margin-bottom: 8px;
433
+ }
434
+
435
+ .long-tasks-list {
436
+ background: var(--dev-tool-bg2-color);
437
+ border-radius: 4px;
438
+ padding: 8px;
439
+ max-height: 200px;
440
+ overflow-y: auto;
441
+ }
442
+
443
+ .long-task-item {
444
+ display: flex;
445
+ justify-content: space-between;
446
+ align-items: center;
447
+ padding: 4px 0;
448
+ border-bottom: 1px solid var(--dev-tool-border-color);
449
+ font-family: monospace;
450
+ }
451
+
452
+ .long-task-item:last-child {
453
+ border-bottom: none;
454
+ }
455
+
456
+ .task-info {
457
+ display: flex;
458
+ align-items: center;
459
+ font-size: 11px;
460
+ }
461
+
462
+ .task-type {
463
+ font-size: 10px;
464
+ padding: 0 4px;
465
+ border-radius: 2px;
466
+ color: #fff;
467
+ background: #909399;
468
+ margin-right: 6px;
469
+ line-height: 1.4;
470
+ }
471
+
472
+ .type-logic {
473
+ background: #9254de;
474
+ }
475
+
476
+ .type-ui {
477
+ background: #67c23a;
478
+ }
479
+
480
+ .task-time {
481
+ color: #888;
482
+ }
483
+
484
+ .task-duration {
485
+ font-weight: bold;
486
+ }
487
+
488
+ .task-warning {
489
+ color: #e6a23c;
490
+ }
491
+
492
+ .task-danger {
493
+ color: #f56c6c;
494
+ }
495
+ </style>
@@ -0,0 +1,153 @@
1
+ <template>
2
+ <view
3
+ class="performance-metrics"
4
+ :class="{ 'performance-metrics-tab': isTab }">
5
+ <view v-if="showCpu" class="metric-item">
6
+ <view class="metric-value" :class="cpuStatusClass">{{ cpuLoad }}%</view>
7
+ <view class="metric-label">
8
+ <view class="legend-dot bg-cpu"></view>
9
+ CPU
10
+ </view>
11
+ </view>
12
+ <view v-if="showMemory" class="metric-item">
13
+ <view class="metric-value fps-memory">{{ memory }} MB</view>
14
+ <view class="metric-label">
15
+ <view class="legend-dot bg-memory"></view>
16
+ Memory
17
+ </view>
18
+ </view>
19
+ <view v-if="showFps" class="metric-item">
20
+ <view class="metric-value" :class="fpsStatusClass">{{ fps }}</view>
21
+ <view class="metric-label">
22
+ <view class="legend-dot" :class="fpsBgStatusClass"></view>
23
+ FPS
24
+ </view>
25
+ </view>
26
+ </view>
27
+ </template>
28
+
29
+ <script setup lang="ts">
30
+ import { computed } from 'vue';
31
+
32
+ const props = defineProps<{
33
+ isTab: boolean;
34
+ fps: number;
35
+ cpuLoad: number;
36
+ memory: number;
37
+ showFps: boolean;
38
+ showCpu: boolean;
39
+ showMemory: boolean;
40
+ }>();
41
+
42
+ const fpsStatusClass = computed(() => {
43
+ if (props.fps >= 50) return 'fps-good';
44
+ if (props.fps >= 30) return 'fps-warning';
45
+ return 'fps-danger';
46
+ });
47
+
48
+ const cpuStatusClass = computed(() => {
49
+ if (props.cpuLoad <= 30) return 'fps-good';
50
+ if (props.cpuLoad <= 70) return 'fps-warning';
51
+ return 'fps-danger';
52
+ });
53
+
54
+ const fpsBgStatusClass = computed(() => {
55
+ if (props.fps >= 50) return 'bg-good';
56
+ if (props.fps >= 30) return 'bg-warning';
57
+ return 'bg-danger';
58
+ });
59
+ </script>
60
+
61
+ <style scoped>
62
+ .performance-metrics,
63
+ .performance-metrics-tab {
64
+ display: flex;
65
+ justify-content: space-around;
66
+ width: 100%;
67
+ margin-top: 4px;
68
+ }
69
+
70
+ .performance-metrics-tab {
71
+ padding: 10px 0;
72
+ }
73
+
74
+ .metric-item {
75
+ display: flex;
76
+ flex-direction: column;
77
+ align-items: center;
78
+ flex: 1;
79
+ }
80
+
81
+ .metric-label {
82
+ display: flex;
83
+ align-items: center;
84
+ color: #909399; /* Tab 模式默认 */
85
+ text-transform: uppercase;
86
+ margin-top: 2px;
87
+ }
88
+
89
+ .performance-widget .metric-label {
90
+ color: #333; /* widget 模式下加深标签颜色,需由父组件透传样式或 global 样式控制,此处暂保留结构 */
91
+ }
92
+
93
+ /* Legend Dots */
94
+ .legend-dot {
95
+ width: 24px;
96
+ height: 2px;
97
+ margin-right: 10px;
98
+ position: relative;
99
+ display: inline-block;
100
+ border-radius: 1px;
101
+ background-color: currentColor;
102
+ }
103
+
104
+ .legend-dot::after {
105
+ content: '';
106
+ position: absolute;
107
+ left: 50%;
108
+ top: 50%;
109
+ transform: translate(-50%, -50%);
110
+ width: 8px;
111
+ height: 8px;
112
+ border-radius: 50%;
113
+ border: 2px solid currentColor;
114
+ background-color: var(--dev-tool-bg2-color, #fff);
115
+ }
116
+
117
+ .bg-cpu {
118
+ color: #9254de !important;
119
+ }
120
+
121
+ .bg-good {
122
+ color: #67c23a !important;
123
+ }
124
+
125
+ .bg-warning {
126
+ color: #e6a23c !important;
127
+ }
128
+
129
+ .bg-danger {
130
+ color: #f56c6c !important;
131
+ }
132
+
133
+ .bg-memory {
134
+ color: #409eff !important;
135
+ }
136
+
137
+ /* Colors */
138
+ .fps-good {
139
+ color: #67c23a;
140
+ }
141
+
142
+ .fps-warning {
143
+ color: #e6a23c;
144
+ }
145
+
146
+ .fps-danger {
147
+ color: #f56c6c;
148
+ }
149
+
150
+ .fps-memory {
151
+ color: #409eff;
152
+ }
153
+ </style>