fix: avoid some abnormal settings (#561)

diff --git a/src/graph/fragments/dashboard.ts b/src/graph/fragments/dashboard.ts
index 2b46e60..90b5d0e 100644
--- a/src/graph/fragments/dashboard.ts
+++ b/src/graph/fragments/dashboard.ts
@@ -32,16 +32,6 @@
   `,
 };
 
-export const addTemplate = {
-  variable: '$setting: DashboardSetting!',
-  query: `
-    addTemplate(setting: $setting) {
-      status
-      message
-    }
-  `,
-};
-
 export const fetchEvents = {
   variable: ['$condition: EventQueryCondition'],
   query: `
diff --git a/src/graph/query/dashboard.ts b/src/graph/query/dashboard.ts
index d95f6c1..11be5b7 100644
--- a/src/graph/query/dashboard.ts
+++ b/src/graph/query/dashboard.ts
@@ -18,7 +18,6 @@
 import {
   TypeOfMetrics,
   getAllTemplates,
-  addTemplate,
   changeTemplate,
   disableTemplate,
   querySampledRecords,
@@ -32,8 +31,6 @@
 
 export const queryTypeOfMetrics = `query queryTypeOfMetrics(${TypeOfMetrics.variable}) {${TypeOfMetrics.query}}`;
 
-export const mutationAddTemplate = `mutation mutationAddTemplate(${addTemplate.variable}) {${addTemplate.query}}`;
-
 export const mutationChangeTemplate = `mutation mutationChangeTemplate(${changeTemplate.variable}) {
   ${changeTemplate.query}}`;
 
diff --git a/src/views/components/dashboard/charts/chart-edit.vue b/src/views/components/dashboard/charts/chart-edit.vue
index 998243a..15c1a19 100755
--- a/src/views/components/dashboard/charts/chart-edit.vue
+++ b/src/views/components/dashboard/charts/chart-edit.vue
@@ -285,8 +285,8 @@
         <input
           type="text"
           class="rk-chart-edit-input long"
-          :value="itemConfig.tips"
-          @change="setItemConfig({ type: 'tips', value: $event.target.value })"
+          :value="decodeURIComponent(itemConfig.tipsContent)"
+          @change="setItemConfig({ type: 'tipsContent', value: encodeURIComponent($event.target.value) })"
         />
       </div>
     </div>
@@ -381,6 +381,10 @@
       if (this.isChartSlow && !this.itemConfig.maxItemNum) {
         this.itemConfig.maxItemNum = MaxItemNum;
       }
+      if (!this.itemConfig.tipsContent && this.itemConfig.tips) {
+        this.itemConfig.tipsContent = encodeURIComponent(this.itemConfig.tips);
+        this.setItemConfig({ type: 'tipsContent', value: this.itemConfig.tipsContent });
+      }
       this.hasChartType();
     }
 
@@ -409,7 +413,7 @@
     private setItemConfig(params: { type: string; value: string }) {
       this.itemConfig[params.type] = params.value;
       const types = ['endpointsKey', 'instancesKey', 'currentService'];
-      const typesUpdate = ['title', 'width', 'height', 'unit', 'tips'];
+      const typesUpdate = ['title', 'width', 'height', 'unit', 'tipsContent'];
       if (params.type === 'servicesKey') {
         this.setItemServices(true);
       }
@@ -417,6 +421,9 @@
         this.getServiceObject(true);
       }
       if (typesUpdate.includes(params.type)) {
+        if (params.type === 'tipsContent') {
+          this.EDIT_COMP_CONFIG({ index: this.index, values: { tips: decodeURIComponent(params.value) } });
+        }
         this.$emit('updateStatus', params.type, params.value);
       }
       if (params.type === 'entityType') {
diff --git a/src/views/components/dashboard/dashboard-item.vue b/src/views/components/dashboard/dashboard-item.vue
index 57cb87c..3bbcff1 100644
--- a/src/views/components/dashboard/dashboard-item.vue
+++ b/src/views/components/dashboard/dashboard-item.vue
@@ -14,7 +14,7 @@
 limitations under the License. -->
 <template>
   <div class="rk-dashboard-item" :class="`g-sm-${width}`" :style="`height:${height}px;`" v-if="itemConfig.entityType">
-    <div class="rk-dashboard-item-title ell">
+    <div class="rk-dashboard-item-title">
       <span v-show="rocketGlobal.edit || stateTopo.editDependencyMetrics" @click="deleteItem(index, itemConfig.uuid)">
         <rk-icon class="r edit red" icon="file-deletion" />
       </span>
@@ -33,7 +33,10 @@
       >
         <rk-icon class="r cp" icon="review-list" />
       </span>
-      <rk-icon v-if="tips" class="r edit" icon="info_outline" v-tooltip:bottom="{ content: tips }" />
+      <span v-if="tips" class="r edit tipsContent" @mouseenter="showTips = true" @mouseleave="showTips = false">
+        <rk-icon icon="info_outline" />
+        <div v-show="showTips">{{ decodeURIComponent(tips) }}</div>
+      </span>
     </div>
     <div class="rk-dashboard-item-body" ref="chartBody">
       <div style="height:100%;width:100%">
@@ -133,11 +136,12 @@
       TopologyType.TOPOLOGY_SERVICE_INSTANCE_DEPENDENCY,
       TopologyType.TOPOLOGY_ENDPOINT_DEPENDENCY,
     ] as string[];
+    private showTips: boolean = false;
 
     private created() {
       this.status = this.item.metricType;
       this.title = this.item.title;
-      this.tips = this.item.tips;
+      this.tips = this.item.tips ? encodeURIComponent(this.item.tips) : '';
       this.width = this.item.width;
       this.height = this.item.height;
       this.unit = this.item.unit;
@@ -342,7 +346,7 @@
       if (type === 'unit') {
         this.unit = value;
       }
-      if (type === 'tips') {
+      if (type === 'tipsContent') {
         this.tips = value;
       }
     }
@@ -474,7 +478,7 @@
     }
   }
 </script>
-<style lang="scss">
+<style lang="scss" scope>
   .rk-dashboard-item {
     display: flex;
     height: 100%;
@@ -502,6 +506,8 @@
     background-color: rgba(196, 200, 225, 0.2);
     color: #9da5b2;
     padding: 6px 10px;
+    text-overflow: ellipsis;
+    white-space: nowrap;
   }
   .rk-dashboard-item-title .hint {
     color: #fbb03b;
@@ -541,4 +547,23 @@
   .config-box {
     padding: 40px 30px;
   }
+  .tipsContent {
+    position: relative;
+    > div {
+      display: inline-block;
+      position: absolute;
+      top: 16px;
+      left: 10px;
+      background: #252a2f;
+      box-shadow: 1px 5px 1px #333;
+      color: #efefef;
+      border-radius: 3px;
+      z-index: 9999;
+      padding: 10px;
+      word-wrap: break-word;
+      word-break: break-all;
+      height: auto;
+      max-width: 300px;
+    }
+  }
 </style>