diff --git a/nezha-fronted/src/components/common/bottomBox/tabs/alertMessageTab.vue b/nezha-fronted/src/components/common/bottomBox/tabs/alertMessageTab.vue
index 7dfb17774..40a73a14e 100644
--- a/nezha-fronted/src/components/common/bottomBox/tabs/alertMessageTab.vue
+++ b/nezha-fronted/src/components/common/bottomBox/tabs/alertMessageTab.vue
@@ -528,7 +528,7 @@
setTimeout(() => {
this.$get('alert/message', this.searchLabel).then(response => {
if (response.code == 200) {
- this.nowTime=response.time;
+ this.nowTime=this.utcTimeToTimezoneStr(response.time);
this.tableData = response.data.list;
let axiosAll=[]
this.$nextTick(() => {
diff --git a/nezha-fronted/src/components/common/exportXLSX.vue b/nezha-fronted/src/components/common/exportXLSX.vue
index 9a78e30c2..aa12cef8e 100644
--- a/nezha-fronted/src/components/common/exportXLSX.vue
+++ b/nezha-fronted/src/components/common/exportXLSX.vue
@@ -156,6 +156,8 @@
url = "/alert/rule/cancelImport";
} else if(this.importUrl.indexOf("panel") > -1){
url = "/panel/cancelImport";
+ }else if(this.importUrl.indexOf("tmpl") > -1){
+ url = "/expression/tmpl/cancelImport";
}
this.$delete(url + '?seq='+this.importResult.seq).then(response=>{
if(response.code == 200 ){
@@ -223,6 +225,8 @@
url = "/panel/template";
}else if(this.importUrl.indexOf('endpoint') > -1){
url = '/endpoint/template'
+ }else if(this.importUrl.indexOf("tmpl") > -1){
+ url = "/expression/tmpl/template";
}
let param={language:language}
diff --git a/nezha-fronted/src/components/common/js/tools.js b/nezha-fronted/src/components/common/js/tools.js
index 7df251914..cdc61ebee 100644
--- a/nezha-fronted/src/components/common/js/tools.js
+++ b/nezha-fronted/src/components/common/js/tools.js
@@ -4,7 +4,7 @@ import MessageBox from "element-ui/packages/message-box/src/main";
import vuex from 'vuex'
import i18n from "../i18n";
/*弹窗点击外部后关闭*/
-const exceptClassName = ["config-dropdown", "nz-pop", "el-picker", "chart-box-dropdown", 'metric-dropdown', 'el-cascader__dropdown', "asset-dropdown", "no-style-class", 'el-message-box','nz-dashboard-dropdown', "el-autocomplete-suggestion"]; //clickoutside排除的class(白名单) no-style-class:没有任何样式的class
+const exceptClassName = ["config-dropdown", "nz-pop", "el-picker", "chart-box-dropdown", 'metric-dropdown', 'el-cascader__dropdown', "asset-dropdown", "no-style-class", 'el-message-box','nz-dashboard-dropdown', "el-autocomplete-suggestion",'nz-temp-box']; //clickoutside排除的class(白名单) no-style-class:没有任何样式的class
export const clickoutside = {
// 初始化指令
bind(el, binding, vnode) {
@@ -515,6 +515,7 @@ export const tableSet = {
case 'threshold':
case 'idc':
case 'alertNum':
+ case 'gname':
return'custom';
default : return false;
}
@@ -633,6 +634,13 @@ export const tableSet = {
case 'severity': return'ar.severity';
default : return prop;
}
+ case 'exprTemp':
+ switch(prop){
+ case 'id': return'id';
+ case 'name': return'name';
+ case 'gname': return'gname';
+ default : return prop;
+ }
default: break;
}
},
diff --git a/nezha-fronted/src/components/common/language/cn.js b/nezha-fronted/src/components/common/language/cn.js
index 784fd149d..cfff206e5 100644
--- a/nezha-fronted/src/components/common/language/cn.js
+++ b/nezha-fronted/src/components/common/language/cn.js
@@ -857,6 +857,23 @@ const cn = {
yes: "是",
no: "否"
}
+ },
+ exprTemp:{
+ exprTemp:'expression模板',
+ exprTempInfo:'Expression 模板详情',
+ exprTempRender:'expression模板渲染',
+ exprTempDown:"expression模板下载",
+ exprTempImport:"expression模板导入",
+ exprTempExport:"expression模板导出",
+ exprTempImportCancel:"expression模板导入撤销",
+ name:'名称',
+ gname:'组名',
+ expression:'表达式',
+ remark:'备注',
+ errorStr:'请填写 {errorStr} 的值',
+ edit:'修改表达式模板',
+ create:'创建表达式模板',
+ expressionError:'请填写表达式',
}
},
alert: {
diff --git a/nezha-fronted/src/components/common/language/en.js b/nezha-fronted/src/components/common/language/en.js
index 62eaae402..8e5f2333c 100644
--- a/nezha-fronted/src/components/common/language/en.js
+++ b/nezha-fronted/src/components/common/language/en.js
@@ -860,6 +860,23 @@ const en = {
yes:'Yes',
no:'No',
}
+ },
+ exprTemp:{
+ exprTemp:'Expression template',
+ exprTempInfo:'Expression template Info',
+ exprTempRender:'expression template render',
+ exprTempDown:"expression template download",
+ exprTempImport:"expression template import",
+ exprTempExport:"expression template export",
+ exprTempImportCancel:"expression template import rollback",
+ name:'Name',
+ gname:'Group',
+ expression:'Expression',
+ remark:'Reason',
+ errorStr:'Please fill in the {errorStr} value',
+ edit:'Edit expression template',
+ create:'New expression template',
+ expressionError:'Please fill in the "expression" value',
}
},
alert: {
diff --git a/nezha-fronted/src/components/common/project/popData/alertTable.vue b/nezha-fronted/src/components/common/project/popData/alertTable.vue
index 8c21abc38..cab7bcb42 100644
--- a/nezha-fronted/src/components/common/project/popData/alertTable.vue
+++ b/nezha-fronted/src/components/common/project/popData/alertTable.vue
@@ -345,7 +345,7 @@
this.$get('alert/message', {...this.searchLabel}).then(response => {
this.loading=false;
if (response.code == 200) {
- this.nowTime=response.time;
+ this.nowTime=this.utcTimeToTimezoneStr(response.time);
this.tableData = response.data.list;
this.tableData.forEach((item) => {
item.labels = JSON.parse(item.labels);
diff --git a/nezha-fronted/src/components/common/project/topologyL5.vue b/nezha-fronted/src/components/common/project/topologyL5.vue
index a583763dd..a25fe59e5 100644
--- a/nezha-fronted/src/components/common/project/topologyL5.vue
+++ b/nezha-fronted/src/components/common/project/topologyL5.vue
@@ -1762,6 +1762,10 @@
getTopology(this.topologyIndex).lock(0);
getTopology(this.topologyIndex).data.pens.forEach((item)=>{//停止动画 以及赋值默认data
item.stopAnimate();
+ if(!item.data.expressArr.length) {
+ item.data.expressArr=[''];
+ item.data.legends=[''];
+ }
item.animateType=item.data.animateType;
if(item.type===0){
item.fillStyle=item.data.fillStyle;
diff --git a/nezha-fronted/src/components/common/rightBox/exprTempBox.vue b/nezha-fronted/src/components/common/rightBox/exprTempBox.vue
new file mode 100644
index 000000000..9095ae310
--- /dev/null
+++ b/nezha-fronted/src/components/common/rightBox/exprTempBox.vue
@@ -0,0 +1,233 @@
+
+