+
@click="clickTabGrid($event, item)"
:class="{ active: activeTabWidget === item.i }"
>
-
Please add widgets.
-
diff --git a/src/views/dashboard/controls/Widget.vue b/src/views/dashboard/controls/Widget.vue
index 74ca377c..56de4729 100644
--- a/src/views/dashboard/controls/Widget.vue
+++ b/src/views/dashboard/controls/Widget.vue
@@ -77,6 +77,7 @@ const props = {
default: () => ({ widget: {} }),
},
activeIndex: { type: String, default: "" },
+ needQuery: { type: Boolean, default: false },
};
export default defineComponent({
name: "Widget",
@@ -93,7 +94,7 @@ export default defineComponent({
const dashboardStore = useDashboardStore();
const selectorStore = useSelectorStore();
- if (dashboardStore.entity === EntityType[1].value) {
+ if (dashboardStore.entity === EntityType[1].value || props.needQuery) {
queryMetrics();
}
@@ -128,7 +129,10 @@ export default defineComponent({
watch(
() => [props.data.metricTypes, props.data.metrics],
() => {
- if (props.data.i !== dashboardStore.selectedGrid.i) {
+ if (
+ dashboardStore.selectedGrid &&
+ props.data.i !== dashboardStore.selectedGrid.i
+ ) {
return;
}
if (TableChartTypes.includes(dashboardStore.selectedGrid.graph.type)) {
diff --git a/src/views/dashboard/data.ts b/src/views/dashboard/data.ts
index 17a186f3..396de2cd 100644
--- a/src/views/dashboard/data.ts
+++ b/src/views/dashboard/data.ts
@@ -165,9 +165,9 @@ export const SortOrder = [
export const ToolIcons = [
{ name: "playlist_add", content: "Add Widget", id: "addWidget" },
{ name: "all_inbox", content: "Add Tab", id: "addTab" },
- { name: "device_hub", content: "Add Topology", id: "topology" },
- { name: "merge", content: "Add Trace", id: "trace" },
- { name: "timeline", content: "Add Profile", id: "profile" },
+ { name: "device_hub", content: "Add Topology", id: "addTopology" },
+ { name: "merge", content: "Add Trace", id: "addTrace" },
+ { name: "timeline", content: "Add Profile", id: "addProfile" },
// { name: "save_alt", content: "Export", id: "export" },
// { name: "folder_open", content: "Import", id: "import" },
// { name: "settings", content: "Settings", id: "settings" },
diff --git a/src/views/dashboard/panel/Layout.vue b/src/views/dashboard/panel/Layout.vue
index 72c95881..bc3938f8 100644
--- a/src/views/dashboard/panel/Layout.vue
+++ b/src/views/dashboard/panel/Layout.vue
@@ -53,6 +53,7 @@ export default defineComponent({
}
function clickGrid(item: LayoutConfig) {
dashboardStore.activeGridItem(item.i);
+ dashboardStore.selectWidget(item);
}
return {
dashboardStore,
diff --git a/src/views/dashboard/panel/Tool.vue b/src/views/dashboard/panel/Tool.vue
index 7e5774a8..b052257e 100644
--- a/src/views/dashboard/panel/Tool.vue
+++ b/src/views/dashboard/panel/Tool.vue
@@ -107,7 +107,6 @@ import { EntityType, ToolIcons, hasTopology, TraceEntitys } from "../data";
import { useSelectorStore } from "@/store/modules/selectors";
import { ElMessage } from "element-plus";
import { Option } from "@/types/app";
-import { Service } from "@/types/selector";
const dashboardStore = useDashboardStore();
const selectorStore = useSelectorStore();
@@ -260,7 +259,7 @@ async function getServices() {
}
}
-async function changeService(service: Service[]) {
+async function changeService(service: any) {
if (service[0]) {
states.currentService = service[0].value;
selectorStore.setCurrentService(service[0]);
@@ -270,7 +269,7 @@ async function changeService(service: Service[]) {
}
}
-function changeDestService(service: Service[]) {
+function changeDestService(service: any) {
if (service[0]) {
states.currentDestService = service[0].value;
selectorStore.setCurrentDestService(service[0]);
@@ -279,7 +278,7 @@ function changeDestService(service: Service[]) {
}
}
-function changePods(pod: Option[]) {
+function changePods(pod: any) {
if (pod[0]) {
selectorStore.setCurrentPod(pod[0]);
} else {
@@ -288,20 +287,55 @@ function changePods(pod: Option[]) {
}
function clickIcons(t: { id: string; content: string; name: string }) {
- switch (t.id) {
+ if (
+ dashboardStore.selectedGrid &&
+ dashboardStore.selectedGrid.type === "Tab"
+ ) {
+ setTabControls(t.id);
+ return;
+ }
+ if (dashboardStore.activedGridItem.split("-").length === 3) {
+ setTabControls(t.id);
+ return;
+ }
+ setControls(t.id);
+}
+
+function setTabControls(id: string) {
+ switch (id) {
+ case "addWidget":
+ dashboardStore.addTabControls("Widget");
+ break;
+ case "addTrace":
+ dashboardStore.addTabControls("Trace");
+ break;
+ case "addProfile":
+ dashboardStore.addTabControls("Profile");
+ break;
+ case "addTopology":
+ dashboardStore.addTabControls("Topology");
+ break;
+ default:
+ ElMessage.info("Don't support this control");
+ break;
+ }
+}
+
+function setControls(id: string) {
+ switch (id) {
case "addWidget":
dashboardStore.addControl("Widget");
break;
case "addTab":
dashboardStore.addControl("Tab");
break;
- case "trace":
+ case "addTrace":
dashboardStore.addControl("Trace");
break;
- case "profile":
+ case "addProfile":
dashboardStore.addControl("Profile");
break;
- case "topology":
+ case "addTopology":
dashboardStore.addControl("Topology");
break;
case "settings":
diff --git a/src/views/dashboard/related/profile/Content.vue b/src/views/dashboard/related/profile/Content.vue
index 4679ba67..18bd2658 100644
--- a/src/views/dashboard/related/profile/Content.vue
+++ b/src/views/dashboard/related/profile/Content.vue
@@ -65,19 +65,16 @@ function loadTrees(l: boolean) {
}
.thread-stack {
- padding: 5px 12px;
- height: calc(50% - 50px);
+ padding: 5px;
+ height: calc(50% - 20px);
overflow: auto;
width: 100%;
}
.t-loading {
text-align: center;
- position: absolute;
width: 100%;
- height: 70px;
- margin-top: 40px;
- line-height: 88px;
overflow: hidden;
+ height: calc(50% - 20px);
}
diff --git a/src/views/dashboard/related/profile/components/SpanTree.vue b/src/views/dashboard/related/profile/components/SpanTree.vue
index 63df51d9..0913b7dc 100644
--- a/src/views/dashboard/related/profile/components/SpanTree.vue
+++ b/src/views/dashboard/related/profile/components/SpanTree.vue
@@ -35,16 +35,18 @@ limitations under the License. -->
{{ t("analyze") }}
-