mirror of
https://github.com/apache/skywalking-booster-ui.git
synced 2025-05-02 17:44:46 +00:00
feat: add widgets
This commit is contained in:
parent
e01fe93c3d
commit
91abc20fef
@ -31,6 +31,20 @@ export const dashboardStore = defineStore({
|
|||||||
setLayouts(data: GridItemData[]) {
|
setLayouts(data: GridItemData[]) {
|
||||||
this.layouts = data;
|
this.layouts = data;
|
||||||
},
|
},
|
||||||
|
addWidget() {
|
||||||
|
const newWidget: GridItemData = {
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
w: 12,
|
||||||
|
h: 3,
|
||||||
|
i: String(this.layouts.length),
|
||||||
|
};
|
||||||
|
this.layouts = this.layouts.map((d: GridItemData) => {
|
||||||
|
d.y = d.y + 3;
|
||||||
|
return d;
|
||||||
|
});
|
||||||
|
this.layouts.push(newWidget);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -14,7 +14,9 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License. -->
|
limitations under the License. -->
|
||||||
<template>
|
<template>
|
||||||
<div class="dashboard-tool">
|
<div class="dashboard-tool">
|
||||||
<el-button size="mini">Add Widget</el-button>
|
<el-button size="mini" @click="dashboardStore.addWidget">
|
||||||
|
Add Widget
|
||||||
|
</el-button>
|
||||||
<el-button size="mini">Save As</el-button>
|
<el-button size="mini">Save As</el-button>
|
||||||
<el-button size="mini">Discard</el-button>
|
<el-button size="mini">Discard</el-button>
|
||||||
<el-button size="mini" type="primary">Apply</el-button>
|
<el-button size="mini" type="primary">Apply</el-button>
|
||||||
@ -27,7 +29,34 @@ limitations under the License. -->
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { toRefs, defineComponent, reactive, ref } from "vue";
|
import { toRefs, defineComponent, reactive, ref } from "vue";
|
||||||
import { ElButton } from "element-plus";
|
import { ElButton } from "element-plus";
|
||||||
import GridLayout from "./widget/GridLayout.vue";
|
import GridLayout from "./widget/Layout.vue";
|
||||||
|
import { GridItemData } from "@/types/dashboard";
|
||||||
|
import { useDashboardStore } from "@/store/modules/dashboard";
|
||||||
|
|
||||||
|
const dashboardStore = useDashboardStore();
|
||||||
|
const layouts: GridItemData[] = [
|
||||||
|
{ x: 0, y: 0, w: 2, h: 2, i: "0" },
|
||||||
|
{ x: 2, y: 0, w: 2, h: 4, i: "1" },
|
||||||
|
{ x: 4, y: 0, w: 2, h: 5, i: "2" },
|
||||||
|
{ x: 6, y: 0, w: 2, h: 3, i: "3" },
|
||||||
|
{ x: 8, y: 0, w: 2, h: 3, i: "4" },
|
||||||
|
{ x: 10, y: 0, w: 2, h: 3, i: "5" },
|
||||||
|
{ x: 0, y: 5, w: 2, h: 5, i: "6" },
|
||||||
|
{ x: 2, y: 5, w: 2, h: 5, i: "7" },
|
||||||
|
{ x: 4, y: 5, w: 2, h: 5, i: "8" },
|
||||||
|
{ x: 6, y: 3, w: 2, h: 4, i: "9" },
|
||||||
|
{ x: 8, y: 4, w: 2, h: 4, i: "10" },
|
||||||
|
{ x: 10, y: 4, w: 2, h: 4, i: "11" },
|
||||||
|
{ x: 0, y: 10, w: 2, h: 5, i: "12" },
|
||||||
|
{ x: 2, y: 10, w: 2, h: 5, i: "13" },
|
||||||
|
{ x: 4, y: 8, w: 2, h: 4, i: "14" },
|
||||||
|
{ x: 6, y: 8, w: 2, h: 4, i: "15" },
|
||||||
|
{ x: 8, y: 10, w: 2, h: 5, i: "16" },
|
||||||
|
{ x: 10, y: 4, w: 2, h: 2, i: "17" },
|
||||||
|
{ x: 0, y: 9, w: 2, h: 3, i: "18" },
|
||||||
|
{ x: 2, y: 6, w: 2, h: 2, i: "19" },
|
||||||
|
];
|
||||||
|
dashboardStore.setLayouts(layouts);
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.dashboard-tool {
|
.dashboard-tool {
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License. -->
|
limitations under the License. -->
|
||||||
<template>
|
<template>
|
||||||
<grid-layout
|
<grid-layout
|
||||||
v-model:layout="layout"
|
v-model:layout="dashboardStore.layouts"
|
||||||
:col-num="12"
|
:col-num="12"
|
||||||
:row-height="30"
|
:row-height="30"
|
||||||
:is-draggable="true"
|
:is-draggable="true"
|
||||||
@ -24,7 +24,7 @@ limitations under the License. -->
|
|||||||
:use-css-transforms="true"
|
:use-css-transforms="true"
|
||||||
>
|
>
|
||||||
<grid-item
|
<grid-item
|
||||||
v-for="item in layout"
|
v-for="item in dashboardStore.layouts"
|
||||||
:x="item.x"
|
:x="item.x"
|
||||||
:y="item.y"
|
:y="item.y"
|
||||||
:w="item.w"
|
:w="item.w"
|
||||||
@ -37,30 +37,9 @@ limitations under the License. -->
|
|||||||
</grid-layout>
|
</grid-layout>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { GridItemData } from "@/types/dashboard";
|
import { useDashboardStore } from "@/store/modules/dashboard";
|
||||||
|
|
||||||
const layout: GridItemData[] = [
|
const dashboardStore = useDashboardStore();
|
||||||
{ x: 0, y: 0, w: 2, h: 2, i: "0" },
|
|
||||||
{ x: 2, y: 0, w: 2, h: 4, i: "1" },
|
|
||||||
{ x: 4, y: 0, w: 2, h: 5, i: "2" },
|
|
||||||
{ x: 6, y: 0, w: 2, h: 3, i: "3" },
|
|
||||||
{ x: 8, y: 0, w: 2, h: 3, i: "4" },
|
|
||||||
{ x: 10, y: 0, w: 2, h: 3, i: "5" },
|
|
||||||
{ x: 0, y: 5, w: 2, h: 5, i: "6" },
|
|
||||||
{ x: 2, y: 5, w: 2, h: 5, i: "7" },
|
|
||||||
{ x: 4, y: 5, w: 2, h: 5, i: "8" },
|
|
||||||
{ x: 6, y: 3, w: 2, h: 4, i: "9" },
|
|
||||||
{ x: 8, y: 4, w: 2, h: 4, i: "10" },
|
|
||||||
{ x: 10, y: 4, w: 2, h: 4, i: "11" },
|
|
||||||
{ x: 0, y: 10, w: 2, h: 5, i: "12" },
|
|
||||||
{ x: 2, y: 10, w: 2, h: 5, i: "13" },
|
|
||||||
{ x: 4, y: 8, w: 2, h: 4, i: "14" },
|
|
||||||
{ x: 6, y: 8, w: 2, h: 4, i: "15" },
|
|
||||||
{ x: 8, y: 10, w: 2, h: 5, i: "16" },
|
|
||||||
{ x: 10, y: 4, w: 2, h: 2, i: "17" },
|
|
||||||
{ x: 0, y: 9, w: 2, h: 3, i: "18" },
|
|
||||||
{ x: 2, y: 6, w: 2, h: 2, i: "19" },
|
|
||||||
];
|
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.vue-grid-layout {
|
.vue-grid-layout {
|
||||||
@ -70,8 +49,10 @@ const layout: GridItemData[] = [
|
|||||||
}
|
}
|
||||||
|
|
||||||
.vue-grid-item:not(.vue-grid-placeholder) {
|
.vue-grid-item:not(.vue-grid-placeholder) {
|
||||||
background: #ccc;
|
background: #fff;
|
||||||
border: 1px solid black;
|
box-shadow: 0px 1px 4px 0px #00000029;
|
||||||
|
border-radius: 5px;
|
||||||
|
// border: 1px solid black;
|
||||||
}
|
}
|
||||||
|
|
||||||
.vue-grid-item .resizing {
|
.vue-grid-item .resizing {
|
Loading…
Reference in New Issue
Block a user