diff --git a/nezha-fronted/src/assets/css/common/tableCommon.scss b/nezha-fronted/src/assets/css/common/tableCommon.scss
index b0d5fd9df..51b6eaca0 100644
--- a/nezha-fronted/src/assets/css/common/tableCommon.scss
+++ b/nezha-fronted/src/assets/css/common/tableCommon.scss
@@ -17,6 +17,7 @@
.main-container {
padding: 10px;
height: 100%;
+ box-sizing: border-box;
background-color: $--background-color-base;
&>div {
background-color: $--background-color-empty;
diff --git a/nezha-fronted/src/assets/css/components/chart/chart.scss b/nezha-fronted/src/assets/css/components/chart/chart.scss
new file mode 100644
index 000000000..54cc63880
--- /dev/null
+++ b/nezha-fronted/src/assets/css/components/chart/chart.scss
@@ -0,0 +1,70 @@
+.panel-chart {
+ border: 1px solid $--chart-box-border-color;
+ height: 100%;
+
+ .chart-header {
+ display: flex;
+ justify-content:space-between;
+ align-items:center;
+ padding: 0 10px;
+ height: 39px;
+
+ font-size: 14px;
+ line-height: 40px;
+ color: $--color-text-primary;
+ transition: all 0.2s;
+
+ &:hover {
+ background-color: $--chart-title-hover-background-color;
+
+ .chart-header__tools {
+ .chart-header__tool .tool__icon {
+ visibility: visible;
+ }
+ }
+ }
+ .chart-header__title {
+ max-width: calc(100% - 100px);
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ }
+ .chart-header__tools {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+ .chart-header__tool {
+ margin-left: 20px;
+ cursor: pointer;
+
+ .tool__icon {
+ visibility: hidden;
+ font-size: 14px;
+ color: $--color-text-primary;
+ }
+ .nz-chart-dropdown {
+ position: absolute;
+ top: 44px;
+ right: 0;
+ left: unset;
+ transform-origin: center top;
+ z-index: 1000;
+ width: 180px;
+ li {
+ padding-left: 15px !important;
+ padding-right: 0 !important;
+ width: calc(100% - 15px);
+ text-align: left;
+ i {
+ margin-right: 10px;
+ }
+ &:hover i {
+ color: $--color-primary;
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/nezha-fronted/src/assets/css/components/index.scss b/nezha-fronted/src/assets/css/components/index.scss
index 446f3bfcb..3333168ba 100644
--- a/nezha-fronted/src/assets/css/components/index.scss
+++ b/nezha-fronted/src/assets/css/components/index.scss
@@ -1,3 +1,4 @@
+@import './chart/chart.scss';
@import './charts/chart.scss';
@import './charts/chart-list.scss';
@import './cli/webSSH.scss';
diff --git a/nezha-fronted/src/assets/css/components/page/dashboard/panel.scss b/nezha-fronted/src/assets/css/components/page/dashboard/panel.scss
index f99735a47..934eab9f7 100644
--- a/nezha-fronted/src/assets/css/components/page/dashboard/panel.scss
+++ b/nezha-fronted/src/assets/css/components/page/dashboard/panel.scss
@@ -15,13 +15,12 @@
.table-list {
margin-top: 0;
overflow-y: auto;
- height: calc(100% - 50px);
+ height: calc(100% - 60px);
flex: 1;
background-color: $--dashboard-background-color-empty;
}
.table-list-box {
border-top: 1px solid $--background-color-base;
- padding: 10px 0 0 10px;
background-color: $--background-color-empty;
}
.box-content {
diff --git a/nezha-fronted/src/components/chart/chart-list-grid.vue b/nezha-fronted/src/components/chart/chart-list-grid.vue
new file mode 100644
index 000000000..8473dc663
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart-list-grid.vue
@@ -0,0 +1,2046 @@
+
+
+
+
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}"
+ >
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}"
+ >
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}"
+ >
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}"
+ >
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @on-edit-group-chart="editDataGroup"
+ @on-remove-group-chart="removeChartGroup"
+ @on-duplicate-group-chart="duplicateChartGroup"
+ @on-add-group-item-chart="addGroupItem"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+
+
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart-list-group-grid.vue b/nezha-fronted/src/components/chart/chart-list-group-grid.vue
new file mode 100644
index 000000000..56cbec328
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart-list-group-grid.vue
@@ -0,0 +1,1755 @@
+
+
+
+
+
+
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}"
+ >
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}"
+ >
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}"
+ >
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}"
+ >
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+
+
+
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart-list-group.vue b/nezha-fronted/src/components/chart/chart-list-group.vue
new file mode 100644
index 000000000..c9b85584e
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart-list-group.vue
@@ -0,0 +1,1596 @@
+
+
+
+
+
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}"
+ >
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+ {dropmenuChange(item.id, show)}"
+ >
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}"
+ >
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}"
+ >
+
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}"
+ >
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+ {chartBySync(item)}"
+ @on-refresh-data="refreshChart"
+ @on-search-data="searchData"
+ @on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
+ @on-drag-chart="editChartForDrag"
+ @on-edit-chart-block="editData"
+ @dropmenu-change="(show) => {dropmenuChange(item.id, show)}">
+
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart.vue b/nezha-fronted/src/components/chart/chart.vue
new file mode 100644
index 000000000..efc98c891
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartAssetInfo.vue b/nezha-fronted/src/components/chart/chart/chartAssetInfo.vue
new file mode 100644
index 000000000..612d2de04
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartAssetInfo.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartBar.vue b/nezha-fronted/src/components/chart/chart/chartBar.vue
new file mode 100644
index 000000000..738f07c59
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartBar.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartClock.vue b/nezha-fronted/src/components/chart/chart/chartClock.vue
new file mode 100644
index 000000000..5c8ab9eb9
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartClock.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartDiagram.vue b/nezha-fronted/src/components/chart/chart/chartDiagram.vue
new file mode 100644
index 000000000..3a093e07d
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartDiagram.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartEndpointInfo.vue b/nezha-fronted/src/components/chart/chart/chartEndpointInfo.vue
new file mode 100644
index 000000000..07052c31e
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartEndpointInfo.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartGauge.vue b/nezha-fronted/src/components/chart/chart/chartGauge.vue
new file mode 100644
index 000000000..259bf9dac
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartGauge.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartGroup.vue b/nezha-fronted/src/components/chart/chart/chartGroup.vue
new file mode 100644
index 000000000..3abedc1a3
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartGroup.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartLog.vue b/nezha-fronted/src/components/chart/chart/chartLog.vue
new file mode 100644
index 000000000..b06d22641
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartLog.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartPie.vue b/nezha-fronted/src/components/chart/chart/chartPie.vue
new file mode 100644
index 000000000..d57fa9761
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartPie.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartStat.vue b/nezha-fronted/src/components/chart/chart/chartStat.vue
new file mode 100644
index 000000000..28e6932b2
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartStat.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartTable.vue b/nezha-fronted/src/components/chart/chart/chartTable.vue
new file mode 100644
index 000000000..e49062193
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartTable.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartText.vue b/nezha-fronted/src/components/chart/chart/chartText.vue
new file mode 100644
index 000000000..6ec3d43d0
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartText.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartTimeSeries.vue b/nezha-fronted/src/components/chart/chart/chartTimeSeries.vue
new file mode 100644
index 000000000..9c6345989
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartTimeSeries.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartTreemap.vue b/nezha-fronted/src/components/chart/chart/chartTreemap.vue
new file mode 100644
index 000000000..7ae1825b4
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartTreemap.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartUrl.vue b/nezha-fronted/src/components/chart/chart/chartUrl.vue
new file mode 100644
index 000000000..89fdb814c
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartUrl.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/chartValue.vue b/nezha-fronted/src/components/chart/chart/chartValue.vue
new file mode 100644
index 000000000..855b10db1
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/chartValue.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chart/options/chartBar.js b/nezha-fronted/src/components/chart/chart/options/chartBar.js
new file mode 100644
index 000000000..bc279ce64
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/options/chartBar.js
@@ -0,0 +1,4 @@
+const chartBarOption = {
+
+}
+export default chartBarOption
diff --git a/nezha-fronted/src/components/chart/chart/options/chartGauge.js b/nezha-fronted/src/components/chart/chart/options/chartGauge.js
new file mode 100644
index 000000000..5b61384ae
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/options/chartGauge.js
@@ -0,0 +1,4 @@
+const chartGaugeOption = {
+
+}
+export default chartGaugeOption
diff --git a/nezha-fronted/src/components/chart/chart/options/chartPie.js b/nezha-fronted/src/components/chart/chart/options/chartPie.js
new file mode 100644
index 000000000..3faec2045
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/options/chartPie.js
@@ -0,0 +1,4 @@
+const chartPieOption = {
+
+}
+export default chartPieOption
diff --git a/nezha-fronted/src/components/chart/chart/options/chartTimeSeries.js b/nezha-fronted/src/components/chart/chart/options/chartTimeSeries.js
new file mode 100644
index 000000000..ea8d3025a
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/options/chartTimeSeries.js
@@ -0,0 +1,9 @@
+export const chartTimeSeriesLineOption = {
+
+}
+export const chartTimeSeriesBarOption = {
+
+}
+export const chartTimeSeriesScatterOption = {
+
+}
diff --git a/nezha-fronted/src/components/chart/chart/options/chartTreemap.js b/nezha-fronted/src/components/chart/chart/options/chartTreemap.js
new file mode 100644
index 000000000..265b61b47
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/options/chartTreemap.js
@@ -0,0 +1,4 @@
+const chartTreemapOption = {
+
+}
+export default chartTreemapOption
diff --git a/nezha-fronted/src/components/chart/chart/options/index.js b/nezha-fronted/src/components/chart/chart/options/index.js
new file mode 100644
index 000000000..52473da2d
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chart/options/index.js
@@ -0,0 +1,7 @@
+import chartBarOption from './chartBar'
+import chartGaugeOption from './chartGauge'
+import chartPieOption from './chartPie'
+import { chartTimeSeriesLineOption, chartTimeSeriesBarOption, chartTimeSeriesScatterOption } from './chartTimeSeries'
+import chartTreemapOption from './chartTreemap'
+
+export default { chartBarOption, chartGaugeOption, chartPieOption, chartTimeSeriesLineOption, chartTimeSeriesBarOption, chartTimeSeriesScatterOption, chartTreemapOption }
diff --git a/nezha-fronted/src/components/chart/chartHeader.vue b/nezha-fronted/src/components/chart/chartHeader.vue
new file mode 100644
index 000000000..a412663c5
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chartHeader.vue
@@ -0,0 +1,81 @@
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/chartList.vue b/nezha-fronted/src/components/chart/chartList.vue
new file mode 100644
index 000000000..c588bc886
--- /dev/null
+++ b/nezha-fronted/src/components/chart/chartList.vue
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/panelChart.vue b/nezha-fronted/src/components/chart/panelChart.vue
new file mode 100644
index 000000000..a33fd5b32
--- /dev/null
+++ b/nezha-fronted/src/components/chart/panelChart.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
diff --git a/nezha-fronted/src/components/chart/testData.js b/nezha-fronted/src/components/chart/testData.js
new file mode 100644
index 000000000..1c694d00c
--- /dev/null
+++ b/nezha-fronted/src/components/chart/testData.js
@@ -0,0 +1,452 @@
+const chartData = {
+ msg: 'success',
+ code: 200,
+ data: {
+ total: 3,
+ pageSize: -1,
+ pages: 1,
+ pageNo: 1,
+ list: [
+ {
+ id: 690483,
+ name: '123',
+ panelId: 1243,
+ groupId: 0,
+ span: 12,
+ height: 6,
+ updateBy: 1,
+ updateAt: '2021-11-10 07:06:09',
+ type: 'line',
+ unit: 2,
+ weight: 0,
+ param: {
+ last: 0,
+ legendValue: {
+ total: 'off',
+ min: 'off',
+ avg: 'off',
+ last: 'off',
+ max: 'off'
+ },
+ threshold: '',
+ valueMapping: {
+ mapping: [
+ {
+ color: {
+ bac: '#fff',
+ text: '#000'
+ },
+ text: '',
+ value: ''
+ }
+ ],
+ type: 'text'
+ },
+ state: '1',
+ url: '',
+ nullType: 'null'
+ },
+ pid: null,
+ buildIn: 0,
+ remark: '123',
+ seq: null,
+ x: 0,
+ y: 0,
+ w: 6,
+ h: 4,
+ i: 690483,
+ elements: [
+ {
+ id: 68527,
+ chartId: 690483,
+ expression: '123',
+ type: 'expert',
+ legend: '',
+ buildIn: 0,
+ seq: null
+ }
+ ],
+ sync: null,
+ panel: {
+ id: 1243,
+ name: 'test',
+ createBy: null,
+ type: null,
+ link: null,
+ pid: null,
+ weight: null,
+ buildIn: null,
+ seq: null,
+ children: null,
+ parent: null,
+ chartNum: null
+ },
+ group: {
+ id: 0,
+ name: null,
+ panelId: null,
+ groupId: null,
+ span: null,
+ height: null,
+ updateBy: null,
+ updateAt: null,
+ type: null,
+ unit: null,
+ weight: null,
+ param: null,
+ pid: null,
+ buildIn: null,
+ remark: null,
+ seq: null,
+ x: null,
+ y: null,
+ elements: null,
+ sync: null,
+ panel: null,
+ group: null,
+ children: null,
+ chartNums: null,
+ asset: null,
+ varType: null,
+ varId: null,
+ varName: null
+ },
+ children: [
+
+ ],
+ chartNums: null,
+ asset: null,
+ varType: null,
+ varId: null,
+ varName: null
+ },
+ {
+ id: 690500,
+ name: '233',
+ panelId: 1243,
+ groupId: 0,
+ span: 6,
+ height: 4,
+ updateBy: 1,
+ updateAt: '2021-11-10 09:05:13',
+ type: 'line',
+ unit: 2,
+ weight: 1,
+ param: {
+ last: 0,
+ legendValue: {
+ total: 'off',
+ min: 'off',
+ avg: 'off',
+ last: 'off',
+ max: 'off'
+ },
+ threshold: '',
+ valueMapping: {
+ mapping: [
+ {
+ color: {
+ bac: '#fff',
+ text: '#000'
+ },
+ text: '',
+ value: ''
+ }
+ ],
+ type: 'text'
+ },
+ url: '',
+ nullType: 'null'
+ },
+ pid: null,
+ buildIn: 0,
+ remark: '',
+ seq: null,
+ x: 6,
+ y: 0,
+ w: 3,
+ h: 4,
+ i: 690484,
+ elements: [
+ {
+ id: 68542,
+ chartId: 690500,
+ expression: '233',
+ type: 'expert',
+ legend: '',
+ buildIn: 0,
+ seq: null
+ }
+ ],
+ sync: null,
+ panel: {
+ id: 1243,
+ name: 'test',
+ createBy: null,
+ type: null,
+ link: null,
+ pid: null,
+ weight: null,
+ buildIn: null,
+ seq: null,
+ children: null,
+ parent: null,
+ chartNum: null
+ },
+ group: {
+ id: 0,
+ name: null,
+ panelId: null,
+ groupId: null,
+ span: null,
+ height: null,
+ updateBy: null,
+ updateAt: null,
+ type: null,
+ unit: null,
+ weight: null,
+ param: null,
+ pid: null,
+ buildIn: null,
+ remark: null,
+ seq: null,
+ x: null,
+ y: null,
+ elements: null,
+ sync: null,
+ panel: null,
+ group: null,
+ children: null,
+ chartNums: null,
+ asset: null,
+ varType: null,
+ varId: null,
+ varName: null
+ },
+ children: [
+
+ ],
+ chartNums: null,
+ asset: null,
+ varType: null,
+ varId: null,
+ varName: null
+ },
+ {
+ id: 690501,
+ name: '323',
+ panelId: 1243,
+ groupId: 0,
+ span: 6,
+ height: 4,
+ updateBy: 1,
+ updateAt: '2021-11-10 09:51:06',
+ type: 'group',
+ unit: 2,
+ weight: 2,
+ param: {
+ last: 0,
+ legendValue: {
+ total: 'off',
+ min: 'off',
+ avg: 'off',
+ last: 'off',
+ max: 'off'
+ },
+ threshold: '',
+ valueMapping: {
+ mapping: [
+ {
+ color: {
+ bac: '#fff',
+ text: '#000'
+ },
+ text: '',
+ value: ''
+ }
+ ],
+ type: 'text'
+ },
+ url: '',
+ nullType: 'null'
+ },
+ pid: null,
+ buildIn: 0,
+ remark: '123',
+ seq: null,
+ x: 0,
+ y: 4,
+ w: 6,
+ h: 4,
+ i: 690485,
+ elements: null,
+ sync: null,
+ panel: {
+ id: 1243,
+ name: 'test',
+ createBy: null,
+ type: null,
+ link: null,
+ pid: null,
+ weight: null,
+ buildIn: null,
+ seq: null,
+ children: null,
+ parent: null,
+ chartNum: null
+ },
+ group: {
+ id: 0,
+ name: null,
+ panelId: null,
+ groupId: null,
+ span: null,
+ height: null,
+ updateBy: null,
+ updateAt: null,
+ type: null,
+ unit: null,
+ weight: null,
+ param: null,
+ pid: null,
+ buildIn: null,
+ remark: null,
+ seq: null,
+ x: null,
+ y: null,
+ elements: null,
+ sync: null,
+ panel: null,
+ group: null,
+ children: null,
+ chartNums: null,
+ asset: null,
+ varType: null,
+ varId: null,
+ varName: null
+ },
+ children: [
+ {
+ id: 690502,
+ name: '123',
+ panelId: 1243,
+ groupId: 690501,
+ span: 12,
+ height: 4,
+ updateBy: 1,
+ updateAt: '2021-11-10 09:51:15',
+ type: 'line',
+ unit: 2,
+ weight: 3,
+ param: {
+ last: 0,
+ legendValue: {
+ total: 'off',
+ min: 'off',
+ avg: 'off',
+ last: 'off',
+ max: 'off'
+ },
+ threshold: '123',
+ valueMapping: {
+ mapping: [
+ {
+ color: {
+ bac: '#fff',
+ text: '#000'
+ },
+ text: '',
+ value: ''
+ }
+ ],
+ type: 'text'
+ },
+ url: '',
+ nullType: 'null'
+ },
+ pid: null,
+ buildIn: 0,
+ remark: '',
+ seq: null,
+ x: 0,
+ y: 0,
+ w: 12,
+ h: 4,
+ i: 690489,
+ elements: [
+ {
+ id: 68543,
+ chartId: 690502,
+ expression: '123',
+ type: 'expert',
+ legend: '',
+ buildIn: 0,
+ seq: null
+ }
+ ],
+ sync: null,
+ panel: {
+ id: 1243,
+ name: 'test',
+ createBy: null,
+ type: null,
+ link: null,
+ pid: null,
+ weight: null,
+ buildIn: null,
+ seq: null,
+ children: null,
+ parent: null,
+ chartNum: null
+ },
+ group: {
+ id: 690501,
+ name: '123',
+ panelId: null,
+ groupId: null,
+ span: null,
+ height: null,
+ updateBy: null,
+ updateAt: null,
+ type: null,
+ unit: null,
+ weight: null,
+ param: null,
+ pid: null,
+ buildIn: null,
+ remark: null,
+ seq: null,
+ x: null,
+ y: null,
+ elements: null,
+ sync: null,
+ panel: null,
+ group: null,
+ children: null,
+ chartNums: null,
+ asset: null,
+ varType: null,
+ varId: null,
+ varName: null
+ },
+ children: [
+
+ ],
+ chartNums: null,
+ asset: null,
+ varType: null,
+ varId: null,
+ varName: null
+ }
+ ],
+ chartNums: null,
+ asset: null,
+ varType: null,
+ varId: null,
+ varName: null
+ }
+ ]
+ },
+ time: '2021-11-10 09:51:27'
+}
+export default chartData
diff --git a/nezha-fronted/src/components/page/dashboard/panel.vue b/nezha-fronted/src/components/page/dashboard/panel.vue
index a4778841c..f9aa40133 100644
--- a/nezha-fronted/src/components/page/dashboard/panel.vue
+++ b/nezha-fronted/src/components/page/dashboard/panel.vue
@@ -8,7 +8,7 @@