vite-uni-dev-tool 1.0.0 → 1.1.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.
- package/README.md +46 -0
- package/dist/const.cjs +1 -1
- package/dist/const.d.ts +12 -0
- package/dist/const.d.ts.map +1 -1
- package/dist/const.js +1 -1
- package/dist/core-shared.d.ts +1 -1
- package/dist/core-shared.d.ts.map +1 -1
- package/dist/core-shared.js +1 -1
- package/dist/core.d.ts +10 -3
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +2 -2
- package/dist/i18n/locales/en.cjs +1 -1
- package/dist/i18n/locales/en.d.ts +81 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +1 -1
- package/dist/i18n/locales/zh-Hans.cjs +1 -1
- package/dist/i18n/locales/zh-Hans.d.ts +82 -1
- package/dist/i18n/locales/zh-Hans.d.ts.map +1 -1
- package/dist/i18n/locales/zh-Hans.js +1 -1
- package/dist/modules/devConsole/index.cjs +1 -1
- package/dist/modules/devConsole/index.js +3 -3
- package/dist/modules/devEvent/index.cjs +3 -3
- package/dist/modules/devEvent/index.d.ts +1 -0
- package/dist/modules/devEvent/index.d.ts.map +1 -1
- package/dist/modules/devEvent/index.js +3 -3
- package/dist/modules/devIntercept/index.cjs +14 -13
- package/dist/modules/devIntercept/index.d.ts +19 -0
- package/dist/modules/devIntercept/index.d.ts.map +1 -1
- package/dist/modules/devIntercept/index.js +14 -13
- package/dist/modules/devStore/index.cjs +1 -1
- package/dist/modules/devStore/index.d.ts +21 -0
- package/dist/modules/devStore/index.d.ts.map +1 -1
- package/dist/modules/devStore/index.js +1 -1
- package/dist/plugins/uniDevTool/transform/transformMain.cjs +1 -1
- package/dist/plugins/uniDevTool/transform/transformMain.js +1 -1
- package/dist/type.d.ts +47 -2
- package/dist/type.d.ts.map +1 -1
- package/dist/utils/language.cjs +1 -1
- package/dist/utils/language.d.ts.map +1 -1
- package/dist/utils/language.js +1 -1
- package/dist/utils/object.cjs +1 -1
- package/dist/utils/object.d.ts.map +1 -1
- package/dist/utils/object.js +1 -1
- package/dist/v3/DevTool/components/BluetoothList/BluetoothItem.vue +199 -0
- package/dist/v3/DevTool/components/BluetoothList/BluetoothTool.vue +730 -0
- package/dist/v3/DevTool/components/BluetoothList/index.vue +167 -0
- package/dist/v3/{CaptureScreen → DevTool/components/CaptureScreen}/index.vue +109 -109
- package/dist/v3/{ConsoleList → DevTool/components/ConsoleList}/ConsoleItem.vue +225 -224
- package/dist/v3/{ConsoleList → DevTool/components/ConsoleList}/RunJSInput.vue +247 -249
- package/dist/v3/{ConsoleList → DevTool/components/ConsoleList}/index.vue +171 -160
- package/dist/v3/{ConsoleList → DevTool/components/ConsoleList}/staticTips.ts +1145 -1145
- package/dist/v3/{DevToolButton → DevTool/components/DevToolButton}/index.vue +7 -4
- package/dist/v3/{DevToolTitle → DevTool/components/DevToolTitle}/index.vue +24 -24
- package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/DevToolOverlay.vue +197 -182
- package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/const.ts +28 -5
- package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/hooks/dataUtils.ts +48 -48
- package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/hooks/useDevToolData.ts +387 -338
- package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/hooks/useDevToolHandlers.ts +629 -549
- package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/hooks/useDevToolOverlay.ts +197 -184
- package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/index.vue +67 -16
- package/dist/v3/{ElEvent → DevTool/components/ElEvent}/ElEventItem.vue +105 -105
- package/dist/v3/{ElEvent → DevTool/components/ElEvent}/index.vue +106 -109
- package/dist/v3/{Instance → DevTool/components/Instance}/components/InstanceTreeNode.vue +265 -265
- package/dist/v3/{Instance → DevTool/components/Instance}/flatten.ts +226 -226
- package/dist/v3/{Instance → DevTool/components/Instance}/index.vue +94 -94
- package/dist/v3/{Instance → DevTool/components/Instance}/registry.ts +49 -49
- package/dist/v3/{Instance → DevTool/components/Instance}/transformTree.ts +375 -375
- package/dist/v3/{Instance → DevTool/components/Instance}/transformTreeCtx.ts +268 -268
- package/dist/v3/{Instance → DevTool/components/Instance}/typing.d.ts +43 -43
- package/dist/v3/{InstanceDetail → DevTool/components/InstanceDetail}/index.vue +485 -485
- package/dist/v3/{JsonDetail → DevTool/components/JsonDetail}/index.vue +70 -70
- package/dist/v3/{NFCList → DevTool/components/NFCList}/NFCItem.vue +112 -113
- package/dist/v3/{NFCList → DevTool/components/NFCList}/NFCTool.vue +454 -478
- package/dist/v3/{NFCList → DevTool/components/NFCList}/const.ts +56 -56
- package/dist/v3/{NFCList → DevTool/components/NFCList}/index.vue +94 -98
- package/dist/v3/{NetworkList → DevTool/components/NetworkList}/InterceptConfig.vue +624 -608
- package/dist/v3/{NetworkList → DevTool/components/NetworkList}/InterceptItem.vue +140 -140
- package/dist/v3/{NetworkList → DevTool/components/NetworkList}/NetworkDetail.vue +287 -296
- package/dist/v3/{NetworkList → DevTool/components/NetworkList}/NetworkIntercept.vue +88 -93
- package/dist/v3/{NetworkList → DevTool/components/NetworkList}/NetworkItem.vue +163 -167
- package/dist/v3/{NetworkList → DevTool/components/NetworkList}/NetworkSend.vue +589 -556
- package/dist/v3/{NetworkList → DevTool/components/NetworkList}/const.ts +4 -4
- package/dist/v3/{NetworkList → DevTool/components/NetworkList}/hooks/useNetworkForm.ts +86 -86
- package/dist/v3/{NetworkList → DevTool/components/NetworkList}/index.vue +160 -160
- package/dist/v3/{NetworkList → DevTool/components/NetworkList}/utils.ts +101 -101
- package/dist/v3/{Performance → DevTool/components/Performance}/index.vue +498 -495
- package/dist/v3/{Performance → DevTool/components/Performance}/modules/PerformanceMetrics.vue +153 -153
- package/dist/v3/{Performance → DevTool/components/Performance}/modules/PerformanceWidget.vue +12 -9
- package/dist/v3/{Performance → DevTool/components/Performance}/modules/usePerformanceChart.ts +460 -460
- package/dist/v3/{Performance → DevTool/components/Performance}/modules/usePerformanceData.ts +258 -258
- package/dist/v3/{PiniaList → DevTool/components/PiniaList}/index.vue +93 -94
- package/dist/v3/{RouteList → DevTool/components/RouteList}/index.vue +21 -24
- package/dist/v3/{RunJS → DevTool/components/RunJS}/index.vue +148 -148
- package/dist/v3/{ScanCodeList → DevTool/components/ScanCodeList}/ScanCodeItem.vue +97 -98
- package/dist/v3/{ScanCodeList → DevTool/components/ScanCodeList}/index.vue +100 -104
- package/dist/v3/{SettingButton → DevTool/components/SettingButton}/index.vue +45 -45
- package/dist/v3/{SettingList → DevTool/components/SettingList}/index.vue +218 -150
- package/dist/v3/DevTool/components/SettingList/modules/SettingBarrage.vue +304 -0
- package/dist/v3/{SettingList → DevTool/components/SettingList}/modules/SettingDevTool.vue +212 -208
- package/dist/v3/{SettingList → DevTool/components/SettingList}/modules/SettingInfo.vue +157 -119
- package/dist/v3/{SettingList → DevTool/components/SettingList}/modules/SettingLanguage.vue +74 -74
- package/dist/v3/{SettingList → DevTool/components/SettingList}/modules/SettingLog.vue +230 -230
- package/dist/v3/{SettingList → DevTool/components/SettingList}/modules/SettingNetwork.vue +3 -3
- package/dist/v3/{SettingList → DevTool/components/SettingList}/modules/SettingTheme.vue +37 -7
- package/dist/v3/{SettingList → DevTool/components/SettingList}/typing.d.ts +2 -2
- package/dist/v3/{SourceCode → DevTool/components/SourceCode}/Line.vue +127 -116
- package/dist/v3/{SourceCode → DevTool/components/SourceCode}/index.vue +8 -8
- package/dist/v3/{SourceCode → DevTool/components/SourceCode}/parseCode.ts +609 -701
- package/dist/v3/{StorageList → DevTool/components/StorageList}/index.vue +174 -174
- package/dist/v3/{TransferList → DevTool/components/TransferList}/TransferDetail.vue +268 -268
- package/dist/v3/{TransferList → DevTool/components/TransferList}/TransferItem.vue +4 -4
- package/dist/v3/{TransferList → DevTool/components/TransferList}/index.vue +8 -8
- package/dist/v3/{UniEvent → DevTool/components/UniEvent}/UniEventItem.vue +6 -7
- package/dist/v3/{UniEvent → DevTool/components/UniEvent}/index.vue +6 -6
- package/dist/v3/{VuexList → DevTool/components/VuexList}/index.vue +84 -84
- package/dist/v3/{WebSocket → DevTool/components/WebSocket}/WebSocketDetail.vue +8 -8
- package/dist/v3/{WebSocket → DevTool/components/WebSocket}/WebSocketItem.vue +4 -4
- package/dist/v3/{WebSocket → DevTool/components/WebSocket}/index.vue +8 -8
- package/dist/v3/DevTool/index.vue +179 -5
- package/dist/v3/{AppTransition → components/AppTransition}/index.vue +176 -170
- package/dist/v3/{AutoSizer → components/AutoSizer}/index.vue +192 -192
- package/dist/v3/{AutoSizer → components/AutoSizer}/index1.vue +184 -184
- package/dist/v3/{AutoSizer → components/AutoSizer}/utils.ts +49 -49
- package/dist/v3/components/Barrage/BarrageItem.vue +137 -0
- package/dist/v3/components/Barrage/index.vue +202 -0
- package/dist/v3/{CircularButton → components/CircularButton}/index.vue +84 -84
- package/dist/v3/{CustomSwiper → components/CustomSwiper}/CustomSwiperItem.vue +49 -49
- package/dist/v3/{CustomSwiper → components/CustomSwiper}/index.vue +104 -104
- package/dist/v3/{DraggableContainer → components/DraggableContainer}/index.vue +1 -1
- package/dist/v3/{Empty → components/Empty}/index.vue +29 -29
- package/dist/v3/{FilterInput → components/FilterInput}/index.vue +1 -1
- package/dist/v3/{FilterSelect → components/FilterSelect}/index.vue +179 -179
- package/dist/v3/{JsonPretty → components/JsonPretty}/components/Brackets/index.vue +27 -27
- package/dist/v3/{JsonPretty → components/JsonPretty}/components/Carets/index.vue +59 -59
- package/dist/v3/{JsonPretty → components/JsonPretty}/components/CheckController/index.vue +136 -136
- package/dist/v3/{JsonPretty → components/JsonPretty}/components/TreeNode/index.vue +387 -381
- package/dist/v3/{JsonPretty → components/JsonPretty}/hooks/useClipboard.ts +21 -21
- package/dist/v3/{JsonPretty → components/JsonPretty}/hooks/useError.ts +21 -21
- package/dist/v3/{JsonPretty → components/JsonPretty}/index.vue +16 -13
- package/dist/v3/{JsonPretty → components/JsonPretty}/type.ts +127 -126
- package/dist/v3/{JsonPretty → components/JsonPretty}/utils/index.ts +169 -169
- package/dist/v3/{MovableContainer → components/MovableContainer}/index.vue +1 -1
- package/dist/v3/{Pick → components/Pick}/index.vue +322 -322
- package/dist/v3/{Tabs → components/Tabs}/index.vue +30 -4
- package/dist/v3/{Tag → components/Tag}/index.vue +113 -113
- package/dist/v3/{VirtualList → components/VirtualList}/AutoSize.vue +40 -40
- package/dist/v3/{VirtualList → components/VirtualList}/index.vue +416 -412
- package/dist/v3/hooks/useBluetooth/index.ts +561 -0
- package/dist/v3/hooks/useContainerStyle.ts +153 -153
- package/dist/v3/hooks/useNFC/index.ts +107 -107
- package/dist/v3/hooks/useNFC/typing.d.ts +396 -396
- package/dist/v3/hooks/useNFC/useNFCAndroid.ts +966 -966
- package/dist/v3/hooks/useNFC/useNFCMpWeiXin.ts +812 -812
- package/dist/v3/hooks/useNFC/utils.ts +754 -754
- package/dist/v3/hooks/useRequest/index.ts +586 -573
- package/dist/v3/hooks/useRequest/utils.ts +267 -267
- package/dist/v3/hooks/useScanCode/index.ts +206 -206
- package/dist/v3/hooks/useWebsocket/README.md +79 -0
- package/dist/v3/hooks/useWebsocket/index.ts +253 -0
- package/dist/v3/styles/theme.css +17 -10
- package/dist/v3/styles/theme.ts +12 -12
- package/package.json +59 -64
- package/dist/plugins/uniParseStock/index.d.ts +0 -10
- package/dist/plugins/uniParseStock/index.d.ts.map +0 -1
- /package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/index.css +0 -0
- /package/dist/v3/{SettingList → DevTool/components/SettingList}/index.css +0 -0
- /package/dist/v3/{Empty → components/Empty}/empty.png +0 -0
- /package/dist/v3/{VirtualList → components/VirtualList}/readme.md +0 -0
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<view class="vuex-content">
|
|
3
|
-
<view class="vuex-control">
|
|
4
|
-
<DevToolTitle>{{ t('vuex.title') }}</DevToolTitle>
|
|
5
|
-
</view>
|
|
6
|
-
<view class="vuex-json-wrapper">
|
|
7
|
-
<JsonPretty
|
|
8
|
-
editable
|
|
9
|
-
showLength
|
|
10
|
-
virtual
|
|
11
|
-
v-if="showJson"
|
|
12
|
-
:data="vuexList"
|
|
13
|
-
:theme="theme"
|
|
14
|
-
:height="contentHeight - 32 - 32"
|
|
15
|
-
:nodeSelectable="() => false"
|
|
16
|
-
:pathCollapsible="() => false"
|
|
17
|
-
@update:data="onUpdateData"
|
|
18
|
-
@nodeClick="onNodeClick"
|
|
19
|
-
/>
|
|
20
|
-
<Empty v-else />
|
|
21
|
-
</view>
|
|
22
|
-
</view>
|
|
23
|
-
</template>
|
|
24
|
-
<script lang="ts" setup>
|
|
25
|
-
import { computed } from 'vue';
|
|
26
|
-
import JsonPretty from '
|
|
27
|
-
import Empty from '
|
|
28
|
-
import DevToolTitle from '../DevToolTitle/index.vue';
|
|
29
|
-
import { useI18n } from '
|
|
30
|
-
|
|
31
|
-
const { t } = useI18n();
|
|
32
|
-
const props = defineProps<{
|
|
33
|
-
vuexList: Record<string, any>;
|
|
34
|
-
theme?: string;
|
|
35
|
-
contentHeight: number;
|
|
36
|
-
}>();
|
|
37
|
-
const emit = defineEmits<{
|
|
38
|
-
(e: 'update:vuexList', data: Record<string, any>): void;
|
|
39
|
-
(e: 'change', value: any): void;
|
|
40
|
-
}>();
|
|
41
|
-
const showJson = computed(() => {
|
|
42
|
-
try {
|
|
43
|
-
const str = JSON.stringify(props.vuexList);
|
|
44
|
-
if (typeof props.vuexList === 'object' && (str === '' || str === '{}')) {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
return true;
|
|
48
|
-
} catch (_error) {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
let currentSelect: any;
|
|
54
|
-
function onUpdateData(data: Record<string, any>) {
|
|
55
|
-
const firstKey = currentSelect?.path?.split('.')?.slice(1)?.[0];
|
|
56
|
-
emit('change', {
|
|
57
|
-
[firstKey]: data[firstKey],
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
function onNodeClick(node: any) {
|
|
61
|
-
currentSelect = node;
|
|
62
|
-
}
|
|
63
|
-
</script>
|
|
64
|
-
<style scoped>
|
|
65
|
-
.vuex-content {
|
|
66
|
-
font-size: var(--dev-tool-base-font-size);
|
|
67
|
-
height: 100%;
|
|
68
|
-
box-sizing: border-box;
|
|
69
|
-
overflow: hidden;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
.vuex-control {
|
|
73
|
-
display: flex;
|
|
74
|
-
align-items: center;
|
|
75
|
-
padding: 0 16px;
|
|
76
|
-
height: 32px;
|
|
77
|
-
border-bottom: 1px solid var(--dev-tool-border-color);
|
|
78
|
-
box-sizing: border-box;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
.vuex-json-wrapper {
|
|
82
|
-
padding: 0 16px;
|
|
83
|
-
}
|
|
84
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<view class="vuex-content">
|
|
3
|
+
<view class="vuex-control">
|
|
4
|
+
<DevToolTitle>{{ t('vuex.title') }}</DevToolTitle>
|
|
5
|
+
</view>
|
|
6
|
+
<view class="vuex-json-wrapper">
|
|
7
|
+
<JsonPretty
|
|
8
|
+
editable
|
|
9
|
+
showLength
|
|
10
|
+
virtual
|
|
11
|
+
v-if="showJson"
|
|
12
|
+
:data="vuexList"
|
|
13
|
+
:theme="theme"
|
|
14
|
+
:height="contentHeight - 32 - 32"
|
|
15
|
+
:nodeSelectable="() => false"
|
|
16
|
+
:pathCollapsible="() => false"
|
|
17
|
+
@update:data="onUpdateData"
|
|
18
|
+
@nodeClick="onNodeClick"
|
|
19
|
+
/>
|
|
20
|
+
<Empty v-else />
|
|
21
|
+
</view>
|
|
22
|
+
</view>
|
|
23
|
+
</template>
|
|
24
|
+
<script lang="ts" setup>
|
|
25
|
+
import { computed } from 'vue';
|
|
26
|
+
import JsonPretty from '../../../components/JsonPretty/index.vue';
|
|
27
|
+
import Empty from '../../../components/Empty/index.vue';
|
|
28
|
+
import DevToolTitle from '../DevToolTitle/index.vue';
|
|
29
|
+
import { useI18n } from '../../../../i18n';
|
|
30
|
+
|
|
31
|
+
const { t } = useI18n();
|
|
32
|
+
const props = defineProps<{
|
|
33
|
+
vuexList: Record<string, any>;
|
|
34
|
+
theme?: string;
|
|
35
|
+
contentHeight: number;
|
|
36
|
+
}>();
|
|
37
|
+
const emit = defineEmits<{
|
|
38
|
+
(e: 'update:vuexList', data: Record<string, any>): void;
|
|
39
|
+
(e: 'change', value: any): void;
|
|
40
|
+
}>();
|
|
41
|
+
const showJson = computed(() => {
|
|
42
|
+
try {
|
|
43
|
+
const str = JSON.stringify(props.vuexList);
|
|
44
|
+
if (typeof props.vuexList === 'object' && (str === '' || str === '{}')) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
} catch (_error) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
let currentSelect: any;
|
|
54
|
+
function onUpdateData(data: Record<string, any>) {
|
|
55
|
+
const firstKey = currentSelect?.path?.split('.')?.slice(1)?.[0];
|
|
56
|
+
emit('change', {
|
|
57
|
+
[firstKey]: data[firstKey],
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function onNodeClick(node: any) {
|
|
61
|
+
currentSelect = node;
|
|
62
|
+
}
|
|
63
|
+
</script>
|
|
64
|
+
<style scoped>
|
|
65
|
+
.vuex-content {
|
|
66
|
+
font-size: var(--dev-tool-base-font-size);
|
|
67
|
+
height: 100%;
|
|
68
|
+
box-sizing: border-box;
|
|
69
|
+
overflow: hidden;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.vuex-control {
|
|
73
|
+
display: flex;
|
|
74
|
+
align-items: center;
|
|
75
|
+
padding: 0 16px;
|
|
76
|
+
height: 32px;
|
|
77
|
+
border-bottom: 1px solid var(--dev-tool-border-color);
|
|
78
|
+
box-sizing: border-box;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.vuex-json-wrapper {
|
|
82
|
+
padding: 0 16px;
|
|
83
|
+
}
|
|
84
|
+
</style>
|
|
@@ -114,16 +114,16 @@
|
|
|
114
114
|
</template>
|
|
115
115
|
<script setup lang="ts">
|
|
116
116
|
import { ref, computed, watch } from 'vue';
|
|
117
|
-
import Tag from '
|
|
118
|
-
import CircularButton from '
|
|
117
|
+
import Tag from '../../../components/Tag/index.vue';
|
|
118
|
+
import CircularButton from '../../../components/CircularButton/index.vue';
|
|
119
119
|
import DevToolTitle from '../DevToolTitle/index.vue';
|
|
120
|
-
import Empty from '
|
|
121
|
-
import { formatDate } from '
|
|
122
|
-
import type { DevTool } from '
|
|
123
|
-
import { useI18n } from '
|
|
120
|
+
import Empty from '../../../components/Empty/index.vue';
|
|
121
|
+
import { formatDate } from '../../../../utils/index';
|
|
122
|
+
import type { DevTool } from '../../../../type';
|
|
123
|
+
import { useI18n } from '../../../../i18n';
|
|
124
124
|
import SettingButton from '../SettingButton/index.vue';
|
|
125
|
-
import VirtualList from '
|
|
126
|
-
import AutoSize from '
|
|
125
|
+
import VirtualList from '../../../components/VirtualList/index.vue';
|
|
126
|
+
import AutoSize from '../../../components/VirtualList/AutoSize.vue';
|
|
127
127
|
|
|
128
128
|
const { t } = useI18n();
|
|
129
129
|
|
|
@@ -37,10 +37,10 @@
|
|
|
37
37
|
</view>
|
|
38
38
|
</template>
|
|
39
39
|
<script lang="ts" setup>
|
|
40
|
-
import Tag from '
|
|
41
|
-
import { formatDate } from '
|
|
42
|
-
import type { DevTool } from '
|
|
43
|
-
import { useI18n } from '
|
|
40
|
+
import Tag from '../../../components/Tag/index.vue';
|
|
41
|
+
import { formatDate } from '../../../../utils';
|
|
42
|
+
import type { DevTool } from '../../../../type';
|
|
43
|
+
import { useI18n } from '../../../../i18n';
|
|
44
44
|
|
|
45
45
|
const { t } = useI18n();
|
|
46
46
|
|
|
@@ -43,15 +43,15 @@
|
|
|
43
43
|
<script lang="ts" setup>
|
|
44
44
|
import { computed } from 'vue';
|
|
45
45
|
import WebSocketItem from './WebSocketItem.vue';
|
|
46
|
-
import Tag from '
|
|
47
|
-
import Empty from '
|
|
48
|
-
import FilterInput from '
|
|
49
|
-
import Pick from '
|
|
50
|
-
import type { DevTool } from '
|
|
51
|
-
import VirtualList from '
|
|
52
|
-
import AutoSize from '
|
|
46
|
+
import Tag from '../../../components/Tag/index.vue';
|
|
47
|
+
import Empty from '../../../components/Empty/index.vue';
|
|
48
|
+
import FilterInput from '../../../components/FilterInput/index.vue';
|
|
49
|
+
import Pick from '../../../components/Pick/index.vue'; // Changed from FilterSelect to Pick
|
|
50
|
+
import type { DevTool } from '../../../../type';
|
|
51
|
+
import VirtualList from '../../../components/VirtualList/index.vue';
|
|
52
|
+
import AutoSize from '../../../components/VirtualList/AutoSize.vue';
|
|
53
53
|
import DevToolTitle from '../DevToolTitle/index.vue';
|
|
54
|
-
import { useI18n } from '
|
|
54
|
+
import { useI18n } from '../../../../i18n';
|
|
55
55
|
|
|
56
56
|
const { t } = useI18n();
|
|
57
57
|
|
|
@@ -33,13 +33,29 @@
|
|
|
33
33
|
:active="isPageActive"
|
|
34
34
|
:FPS="0"></view>
|
|
35
35
|
<!-- #endif -->
|
|
36
|
+
<!-- SafeArea Preview Mask -->
|
|
37
|
+
<view
|
|
38
|
+
v-if="showingSafeArea"
|
|
39
|
+
class="dev-tool-safe-area-preview"
|
|
40
|
+
:style="safeAreaStyle"></view>
|
|
41
|
+
<!-- Barrage -->
|
|
42
|
+
<Barrage
|
|
43
|
+
ref="barrageRef"
|
|
44
|
+
:zIndex="zIndex + 100"
|
|
45
|
+
:maxTracks="windowData.barrageMaxTracks"
|
|
46
|
+
:trackHeight="windowData.barrageTrackHeight"
|
|
47
|
+
:startTop="windowData.barrageStartTop"
|
|
48
|
+
:duration="windowData.barrageDuration"
|
|
49
|
+
:maxLength="windowData.barrageMaxLength"
|
|
50
|
+
:visible="barrageFinalVisible" />
|
|
36
51
|
</view>
|
|
37
52
|
</template>
|
|
38
53
|
|
|
39
54
|
<script lang="ts">
|
|
40
|
-
import DevToolButton from '
|
|
41
|
-
import DevToolWindow from '
|
|
42
|
-
import PerformanceWidget from '
|
|
55
|
+
import DevToolButton from './components/DevToolButton/index.vue';
|
|
56
|
+
import DevToolWindow from './components/DevToolWindow/index.vue';
|
|
57
|
+
import PerformanceWidget from './components/Performance/modules/PerformanceWidget.vue';
|
|
58
|
+
import Barrage from '../components/Barrage/index.vue';
|
|
43
59
|
|
|
44
60
|
export default {
|
|
45
61
|
__devTool: true,
|
|
@@ -47,6 +63,7 @@ export default {
|
|
|
47
63
|
DevToolButton,
|
|
48
64
|
DevToolWindow,
|
|
49
65
|
PerformanceWidget,
|
|
66
|
+
Barrage,
|
|
50
67
|
},
|
|
51
68
|
};
|
|
52
69
|
</script>
|
|
@@ -81,12 +98,17 @@ const sourceFileServers = ref<string[]>([]);
|
|
|
81
98
|
|
|
82
99
|
const mode = ref<string>();
|
|
83
100
|
|
|
101
|
+
const showingSafeArea = ref(false);
|
|
102
|
+
const safeAreaStyle = ref('');
|
|
103
|
+
|
|
84
104
|
const zIndex = ref(998);
|
|
85
105
|
|
|
86
106
|
const useDevSource = ref(false);
|
|
87
107
|
|
|
88
108
|
const windowOrigin = ref({ x: 0, y: 0 });
|
|
89
109
|
|
|
110
|
+
const barrageRef = ref<any>(null);
|
|
111
|
+
|
|
90
112
|
const theme = ref<string>('dark');
|
|
91
113
|
|
|
92
114
|
const devToolVersion = ref<string>('v0.0.0');
|
|
@@ -106,6 +128,14 @@ const baseFontSizePx = computed(() => baseFontSize.value + 'px');
|
|
|
106
128
|
const tagFontSizePx = computed(() => tagFontSize.value + 'px');
|
|
107
129
|
const tipsFontSizePx = computed(() => tipsFontSize.value + 'px');
|
|
108
130
|
|
|
131
|
+
const barrageFinalVisible = computed(() => {
|
|
132
|
+
if (!windowData.value.barrageVisible) return false;
|
|
133
|
+
// 如果主窗口打开了,且配置为“打开时不显示”,则隐藏
|
|
134
|
+
if (devToolWindowVisible.value && !windowData.value.barrageShowWhenOpen)
|
|
135
|
+
return false;
|
|
136
|
+
return true;
|
|
137
|
+
});
|
|
138
|
+
|
|
109
139
|
function updateWindowOrigin(pos?: { x: number; y: number }) {
|
|
110
140
|
const { left = 300, top = 500 } = getDevToolInfo();
|
|
111
141
|
let x = left + 50;
|
|
@@ -133,6 +163,36 @@ function sendCommand(type: string, data: any = {}) {
|
|
|
133
163
|
uni.$emit(DEV_UI_MESSAGE, { type, data });
|
|
134
164
|
}
|
|
135
165
|
|
|
166
|
+
function handleUIMessage(msg: any) {
|
|
167
|
+
let type, data;
|
|
168
|
+
try {
|
|
169
|
+
const payload = typeof msg === 'string' ? JSON.parse(msg) : msg;
|
|
170
|
+
type = payload.type;
|
|
171
|
+
data = payload.data;
|
|
172
|
+
} catch (e) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (type === 'TOGGLE_SAFE_AREA') {
|
|
177
|
+
renderSafeArea(data);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
function renderSafeArea(show: boolean) {
|
|
182
|
+
showingSafeArea.value = show;
|
|
183
|
+
if (show) {
|
|
184
|
+
if (uni.getWindowInfo) {
|
|
185
|
+
const info = uni.getWindowInfo();
|
|
186
|
+
const safeArea = info.safeArea;
|
|
187
|
+
if (safeArea) {
|
|
188
|
+
safeAreaStyle.value = `top: ${safeArea.top}px; left: ${safeArea.left}px; width: ${safeArea.width}px; height: ${safeArea.height}px; border: 3px solid #00ff00; background: rgba(0, 255, 0, 0.15);`;
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
safeAreaStyle.value = `top: env(safe-area-inset-top); bottom: env(safe-area-inset-bottom); left: env(safe-area-inset-left); right: env(safe-area-inset-right); border: 3px solid #00ff00; background: rgba(0, 255, 0, 0.15);`;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
136
196
|
function onDevToolButtonClick(pos: { x: number; y: number }) {
|
|
137
197
|
updateWindowOrigin(pos);
|
|
138
198
|
onShowDevToolWindow(true);
|
|
@@ -173,7 +233,8 @@ function onSendMessage(param: { type: string; data: Record<string, any> }) {
|
|
|
173
233
|
|
|
174
234
|
function onDevOptionSend(data: DevTool.WindowData) {
|
|
175
235
|
if (data) {
|
|
176
|
-
|
|
236
|
+
// 采用合并策略而不是直接替换,防止丢失部分本地状态
|
|
237
|
+
windowData.value = { ...windowData.value, ...data };
|
|
177
238
|
|
|
178
239
|
if (data.devToolVersion !== undefined)
|
|
179
240
|
devToolVersion.value = data.devToolVersion;
|
|
@@ -195,6 +256,33 @@ function onDevOptionSend(data: DevTool.WindowData) {
|
|
|
195
256
|
if (data.fontWeight !== undefined) fontWeight.value = data.fontWeight;
|
|
196
257
|
if (data.performanceVisible !== undefined)
|
|
197
258
|
performanceVisible.value = data.performanceVisible;
|
|
259
|
+
|
|
260
|
+
// 弹幕配置
|
|
261
|
+
if (data.barrageVisible !== undefined)
|
|
262
|
+
windowData.value.barrageVisible = data.barrageVisible;
|
|
263
|
+
if (data.barrageShowWhenOpen !== undefined)
|
|
264
|
+
windowData.value.barrageShowWhenOpen = data.barrageShowWhenOpen;
|
|
265
|
+
if (data.barrageMaxTracks !== undefined)
|
|
266
|
+
windowData.value.barrageMaxTracks = data.barrageMaxTracks;
|
|
267
|
+
if (data.barrageTrackHeight !== undefined)
|
|
268
|
+
windowData.value.barrageTrackHeight = data.barrageTrackHeight;
|
|
269
|
+
if (data.barrageStartTop !== undefined)
|
|
270
|
+
windowData.value.barrageStartTop = data.barrageStartTop;
|
|
271
|
+
if (data.barrageDuration !== undefined)
|
|
272
|
+
windowData.value.barrageDuration = data.barrageDuration;
|
|
273
|
+
if (data.barrageMaxLength !== undefined)
|
|
274
|
+
windowData.value.barrageMaxLength = data.barrageMaxLength;
|
|
275
|
+
|
|
276
|
+
if (data.barrageTypes !== undefined) {
|
|
277
|
+
if (Array.isArray(data.barrageTypes)) {
|
|
278
|
+
windowData.value.barrageTypes = data.barrageTypes;
|
|
279
|
+
} else {
|
|
280
|
+
console.warn(
|
|
281
|
+
'[DevTool] Received invalid barrageTypes in windowData:',
|
|
282
|
+
data.barrageTypes,
|
|
283
|
+
);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
198
286
|
}
|
|
199
287
|
}
|
|
200
288
|
|
|
@@ -230,9 +318,56 @@ function handleCoreMessage(msg: any) {
|
|
|
230
318
|
case MSG_TYPE.PERF_VISIBLE:
|
|
231
319
|
performanceVisible.value = data;
|
|
232
320
|
break;
|
|
233
|
-
case MSG_TYPE.
|
|
321
|
+
case MSG_TYPE.DATA_UPDATE:
|
|
234
322
|
onDevOptionSend(data);
|
|
235
323
|
break;
|
|
324
|
+
case MSG_TYPE.BARRAGE_VISIBLE:
|
|
325
|
+
windowData.value.barrageVisible = data;
|
|
326
|
+
break;
|
|
327
|
+
case MSG_TYPE.BARRAGE_SHOW_WHEN_OPEN:
|
|
328
|
+
windowData.value.barrageShowWhenOpen = data;
|
|
329
|
+
break;
|
|
330
|
+
case MSG_TYPE.BARRAGE_ADD:
|
|
331
|
+
if (barrageFinalVisible.value && barrageRef.value) {
|
|
332
|
+
const itemsList = data.items || [];
|
|
333
|
+
itemsList.forEach((item: any) => {
|
|
334
|
+
// 检查类型是否在允许列表中
|
|
335
|
+
if (!windowData.value.barrageTypes?.includes(item.type || 'log'))
|
|
336
|
+
return;
|
|
337
|
+
|
|
338
|
+
if (item.type === 'network') {
|
|
339
|
+
const status = item.status;
|
|
340
|
+
// 异常定义:已完成(非 pending)且 (状态码非 2xx 或 为 'ERR')
|
|
341
|
+
const isPending = status === 'pending';
|
|
342
|
+
const isSuccess =
|
|
343
|
+
typeof status === 'number'
|
|
344
|
+
? status >= 200 && status < 300
|
|
345
|
+
: typeof status === 'string' && /^[2]\d{2}$/.test(status);
|
|
346
|
+
|
|
347
|
+
if (!isPending && !isSuccess) {
|
|
348
|
+
barrageRef.value.add(
|
|
349
|
+
`[${item.method || 'GET'}] ${status} - ${item.url}`,
|
|
350
|
+
'network',
|
|
351
|
+
);
|
|
352
|
+
}
|
|
353
|
+
} else if (item.type === 'transfer') {
|
|
354
|
+
barrageRef.value.add(`Transfer Failed: ${item.url}`, 'error');
|
|
355
|
+
} else if (item.type === 'websocket') {
|
|
356
|
+
barrageRef.value.add(`WS: ${item.data}`, 'info');
|
|
357
|
+
} else {
|
|
358
|
+
const args = item.args || [];
|
|
359
|
+
const text = args
|
|
360
|
+
.map((arg: any) =>
|
|
361
|
+
typeof arg?.value === 'string'
|
|
362
|
+
? arg.value
|
|
363
|
+
: JSON.stringify(arg?.value ?? ''),
|
|
364
|
+
)
|
|
365
|
+
.join(' ');
|
|
366
|
+
barrageRef.value.add(text, item.type || 'log');
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
break;
|
|
236
371
|
// ... 其他消息处理
|
|
237
372
|
}
|
|
238
373
|
}
|
|
@@ -256,6 +391,23 @@ onBeforeMount(() => {
|
|
|
256
391
|
fontFamily: fontF = '',
|
|
257
392
|
fontWeight: weightF = 'normal',
|
|
258
393
|
theme: themeF = 'light',
|
|
394
|
+
showingSafeArea: safeAreaF = false,
|
|
395
|
+
barrageVisible: barrageVisibleF = true,
|
|
396
|
+
barrageShowWhenOpen: barrageShowWhenOpenF = false,
|
|
397
|
+
barrageMaxTracks: maxTracksF = 10,
|
|
398
|
+
barrageTrackHeight: trackHeightF = 36,
|
|
399
|
+
barrageStartTop: startTopF = 40,
|
|
400
|
+
barrageDuration: durationF = 6,
|
|
401
|
+
barrageMaxLength: maxLengthF = 100,
|
|
402
|
+
barrageTypes: typesF = [
|
|
403
|
+
'log',
|
|
404
|
+
'info',
|
|
405
|
+
'warn',
|
|
406
|
+
'error',
|
|
407
|
+
'network',
|
|
408
|
+
'transfer',
|
|
409
|
+
'websocket',
|
|
410
|
+
],
|
|
259
411
|
} = getDevToolInfo();
|
|
260
412
|
|
|
261
413
|
isActive = true;
|
|
@@ -264,6 +416,10 @@ onBeforeMount(() => {
|
|
|
264
416
|
devToolWindowVisible.value = false; // 始终从关闭状态开始
|
|
265
417
|
performanceVisible.value = false; // 始终从关闭状态开始
|
|
266
418
|
windowData.value.performanceVisible = false;
|
|
419
|
+
|
|
420
|
+
if (safeAreaF) {
|
|
421
|
+
renderSafeArea(safeAreaF);
|
|
422
|
+
}
|
|
267
423
|
baseFontSize.value = baseF;
|
|
268
424
|
tagFontSize.value = tagF;
|
|
269
425
|
tipsFontSize.value = tipsF;
|
|
@@ -274,10 +430,20 @@ onBeforeMount(() => {
|
|
|
274
430
|
windowData.value.tipsFontSize = tipsF;
|
|
275
431
|
windowData.value.fontFamily = fontF;
|
|
276
432
|
windowData.value.fontWeight = weightF;
|
|
433
|
+
windowData.value.barrageVisible = barrageVisibleF;
|
|
434
|
+
windowData.value.barrageShowWhenOpen = barrageShowWhenOpenF;
|
|
435
|
+
windowData.value.barrageMaxTracks = maxTracksF;
|
|
436
|
+
windowData.value.barrageTrackHeight = trackHeightF;
|
|
437
|
+
windowData.value.barrageStartTop = startTopF;
|
|
438
|
+
windowData.value.barrageDuration = durationF;
|
|
439
|
+
windowData.value.barrageMaxLength = maxLengthF;
|
|
440
|
+
windowData.value.barrageTypes = typesF;
|
|
277
441
|
theme.value = themeF;
|
|
278
442
|
|
|
279
443
|
// 监听核心模块消息
|
|
280
444
|
uni.$on(DEV_CORE_MESSAGE, handleCoreMessage);
|
|
445
|
+
// 自己也监听部分内网通讯用于控制外边框等全局状态
|
|
446
|
+
uni.$on(DEV_UI_MESSAGE, handleUIMessage);
|
|
281
447
|
|
|
282
448
|
// #ifdef H5
|
|
283
449
|
setTimeout(() => {
|
|
@@ -295,6 +461,7 @@ onBeforeMount(() => {
|
|
|
295
461
|
onUnmounted(() => {
|
|
296
462
|
sendCommand(CMD_TYPE.WINDOW_CLOSE, {});
|
|
297
463
|
uni.$off(DEV_CORE_MESSAGE, handleCoreMessage);
|
|
464
|
+
uni.$off(DEV_UI_MESSAGE, handleUIMessage);
|
|
298
465
|
});
|
|
299
466
|
|
|
300
467
|
onShow(() => {
|
|
@@ -342,4 +509,11 @@ onHide(() => {
|
|
|
342
509
|
font-family: var(--dev-tool-font-family);
|
|
343
510
|
font-weight: var(--dev-tool-font-weight);
|
|
344
511
|
}
|
|
512
|
+
|
|
513
|
+
.dev-tool-safe-area-preview {
|
|
514
|
+
position: fixed;
|
|
515
|
+
pointer-events: none;
|
|
516
|
+
z-index: 999999;
|
|
517
|
+
box-sizing: border-box;
|
|
518
|
+
}
|
|
345
519
|
</style>
|