diff --git a/frontend/desktop/src/assets/fonts/bksops-icon.eot b/frontend/desktop/src/assets/fonts/bksops-icon.eot
index d8c71d9d0f..0ed6cf8ed2 100644
Binary files a/frontend/desktop/src/assets/fonts/bksops-icon.eot and b/frontend/desktop/src/assets/fonts/bksops-icon.eot differ
diff --git a/frontend/desktop/src/assets/fonts/bksops-icon.svg b/frontend/desktop/src/assets/fonts/bksops-icon.svg
index 0b4dc054f8..e1c5106cd9 100644
--- a/frontend/desktop/src/assets/fonts/bksops-icon.svg
+++ b/frontend/desktop/src/assets/fonts/bksops-icon.svg
@@ -587,7 +587,7 @@
-
+
diff --git a/frontend/desktop/src/assets/fonts/bksops-icon.ttf b/frontend/desktop/src/assets/fonts/bksops-icon.ttf
index ed11d935cb..59bf7604dd 100644
Binary files a/frontend/desktop/src/assets/fonts/bksops-icon.ttf and b/frontend/desktop/src/assets/fonts/bksops-icon.ttf differ
diff --git a/frontend/desktop/src/assets/fonts/bksops-icon.woff b/frontend/desktop/src/assets/fonts/bksops-icon.woff
index f42a17ea0d..d89befc02a 100644
Binary files a/frontend/desktop/src/assets/fonts/bksops-icon.woff and b/frontend/desktop/src/assets/fonts/bksops-icon.woff differ
diff --git a/frontend/desktop/src/components/common/RenderForm/FormGroup.vue b/frontend/desktop/src/components/common/RenderForm/FormGroup.vue
index 4b7041edf2..dd592e4b9f 100644
--- a/frontend/desktop/src/components/common/RenderForm/FormGroup.vue
+++ b/frontend/desktop/src/components/common/RenderForm/FormGroup.vue
@@ -104,7 +104,7 @@
.rf-tag-form {
+ margin-right: 58px;
+ }
+ .hook-icon {
+ padding-right: 3px !important;
+ }
}
.rf-group-name {
display: block
@@ -446,15 +454,17 @@
display: flex;
align-items: center;
justify-content: center;
- padding: 0 8px;
height: 32px;
background: #f0f1f5;
border-radius: 2px;
+ cursor: pointer;
z-index: 1;
- .hook-icon {
- font-size: 16px;
+ .hook-icon,
+ .render-skip-icon {
+ height: 32px;
+ line-height: 32px;
+ font-size: 12px;
color: #979ba5;
- cursor: pointer;
&.disabled {
color: #c4c6cc;
cursor: not-allowed;
@@ -464,8 +474,13 @@
}
}
.hook-icon {
+ line-height: 33px;
+ padding: 0 8px;
font-size: 16px;
}
+ .render-skip-icon {
+ padding: 0 8px 0 3px;
+ }
.icon-angle-up-fill {
font-size: 12px;
color: #c4c6cc;
diff --git a/frontend/desktop/src/components/common/RenderForm/FormItem.vue b/frontend/desktop/src/components/common/RenderForm/FormItem.vue
index dae623311b..6d53b47681 100644
--- a/frontend/desktop/src/components/common/RenderForm/FormItem.vue
+++ b/frontend/desktop/src/components/common/RenderForm/FormItem.vue
@@ -477,12 +477,15 @@
}
&.rf-has-hook {
& > .rf-tag-form {
- margin-right: 45px;
+ margin-right: 40px;
}
}
&.show-render {
> .rf-tag-form {
- margin-right: 64px;
+ margin-right: 58px;
+ }
+ .hook-icon {
+ padding-right: 3px !important;
}
}
&.rf-col-layout {
@@ -548,16 +551,17 @@
display: flex;
align-items: center;
justify-content: space-between;
- padding: 0 8px;
height: 32px;
background: #f0f1f5;
border-radius: 2px;
z-index: 1;
+ cursor: pointer;
.hook-icon,
.render-skip-icon {
- font-size: 14px;
+ height: 32px;
+ line-height: 32px;
+ font-size: 12px;
color: #979ba5;
- cursor: pointer;
&.disabled {
color: #c4c6cc;
cursor: not-allowed;
@@ -567,10 +571,12 @@
}
}
.hook-icon {
+ line-height: 31px;
+ padding: 0 8px;
font-size: 16px;
}
.render-skip-icon {
- margin-left: 7px;
+ padding: 0 8px 0 3px;
}
.icon-angle-up-fill {
font-size: 12px;
diff --git a/frontend/desktop/src/components/common/RenderForm/tags/TagCodeEditor.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagCodeEditor.vue
index 520428a8f5..e438f40b05 100644
--- a/frontend/desktop/src/components/common/RenderForm/tags/TagCodeEditor.vue
+++ b/frontend/desktop/src/components/common/RenderForm/tags/TagCodeEditor.vue
@@ -213,12 +213,14 @@
}
})
})
- } else if (this.decorationsMap[lineNumber]) {
- this.decorationsMap[lineNumber].forEach(decorations => {
- monacoInstance.deltaDecorations(
- [...decorations],
- []
- )
+ } else {
+ Object.keys(this.decorationsMap).forEach(key => {
+ this.decorationsMap[key].forEach(decorations => {
+ monacoInstance.deltaDecorations(
+ [...decorations],
+ []
+ )
+ })
})
this.decorationsMap = {}
}
diff --git a/frontend/desktop/src/components/common/RenderForm/tags/TagInput.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagInput.vue
index f3679cd257..3b772babee 100644
--- a/frontend/desktop/src/components/common/RenderForm/tags/TagInput.vue
+++ b/frontend/desktop/src/components/common/RenderForm/tags/TagInput.vue
@@ -48,11 +48,11 @@
- {{ item }}
+ :key="item.key"
+ :class="{ 'is-hover': hoverKey === item.key }"
+ @click.stop="onSelectVal(item.key)">
+ {{ item.key }}
+ {{ item.name }}
@@ -122,14 +122,14 @@
}),
constantArr: {
get () {
- let Keylist = []
+ let KeyList = []
if (this.constants) {
- Keylist = [...Object.keys(this.constants)]
+ KeyList = [...Object.values(this.constants)]
}
if (this.internalVariable) {
- Keylist = [...Keylist, ...Object.keys(this.internalVariable)]
+ KeyList = [...KeyList, ...Object.values(this.internalVariable)]
}
- return Keylist
+ return KeyList
},
set (val) {
this.varList = val
@@ -330,7 +330,7 @@
matchResult = [matchText]
}
if (matchResult && matchResult[0]) {
- this.varList = this.constantArr.filter(item => item.indexOf(matchText) > -1)
+ this.varList = this.constantArr.filter(item => item.key.indexOf(matchText) > -1)
// 计算变量下拉列表的left
this.isListOpen = false
if (this.varList.length) {
@@ -352,11 +352,10 @@
this.$el.appendChild(newDom)
const focusValueWidth = newDom.offsetWidth || 0
this.$el.removeChild(newDom)
- let right = inputWidth - 238 - previousDomLeft - previousDomWidth - focusValueWidth
- right = right > 0 ? right : 0
- this.varListPositionRight = right
this.$nextTick(() => {
- const { height: varListHeight } = document.querySelector('.rf-select-list').getBoundingClientRect()
+ const { width: varListWidth, height: varListHeight } = document.querySelector('.rf-select-list').getBoundingClientRect()
+ let right = inputWidth - varListWidth - previousDomLeft - previousDomWidth - focusValueWidth
+ right = right > 0 ? right : 0
const top = window.innerHeight < inputTop + 30 + varListHeight + 50 ? -95 : 30
this.varListPosition = `right: ${right}px; top: ${top}px`
})
@@ -382,9 +381,14 @@
// 获取行内纯文本
const divInputDom = this.$el.querySelector('.div-input')
let inputValue = divInputDom.textContent
+ inputValue.replace(' ', ' ')
if (divInputDom.childNodes.length) {
inputValue = Array.from(divInputDom.childNodes).map(item => {
- return item.type === 'button' ? item.value : item.textContent
+ return item.type === 'button'
+ ? item.value
+ : item.textContent.trim() === ''
+ ? ' '
+ : item.textContent.replace(/ /g, ' ')
}).join('')
}
this.input.value = inputValue
@@ -410,7 +414,7 @@
let isExistVar = false
if ($0) {
isExistVar = this.constantArr.some(item => {
- const varText = item.slice(2, -1)
+ const varText = item.key.slice(2, -1)
if ($0.indexOf(varText) > -1) {
const regexp = new RegExp(`^(.*\\W|\\W)?${varText}(\\W|\\W.*)?$`)
return regexp.test($0)
@@ -451,12 +455,12 @@
if (len) {
event.preventDefault()
event.stopPropagation()
- let curIndex = this.varList.findIndex(item => item === this.hoverKey)
+ let curIndex = this.varList.findIndex(item => item.key === this.hoverKey)
curIndex = event.code === 'ArrowDown' ? curIndex + 1 : curIndex - 1
curIndex = curIndex > len - 1 ? 0 : (curIndex < 0 ? len - 1 : curIndex)
const option = this.varList[curIndex]
if (option) {
- this.hoverKey = option
+ this.hoverKey = option.key
const selectDom = this.$el.querySelector('.rf-select-content')
const hoverItemDom = selectDom.querySelector('.is-hover')
if (hoverItemDom) {
@@ -487,12 +491,17 @@
position: absolute;
top: 30px;
right: 0;
- width: 238px;
+ max-width: 600px;
background: #ffffff;
+ border: 1px solid #dcdee5;
border-radius: 2px;
- box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 3px 9px 0 rgba(0,0,0,.1);
overflow-y: hidden;
z-index: 100;
+ .name {
+ color: #c4c6cc;
+ margin-left: 16px;
+ }
}
.rf-select-content {
max-height: 100px;
@@ -501,12 +510,21 @@
@include scrollbar;
}
.rf-select-item {
+ display: flex;
+ align-items: center;
padding: 0 10px;
line-height: 32px;
font-size: 12px;
cursor: pointer;
- overflow: hidden;
- text-overflow: ellipsis;
+ > span {
+ flex-shrink: 0;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ }
+ .name {
+ max-width: 250px;
+ }
&.is-hover,
&:hover {
background: #f5f7fa;
diff --git a/frontend/desktop/src/components/common/RenderForm/tags/TagTextarea.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagTextarea.vue
index 4d16f302c8..c3f3832971 100644
--- a/frontend/desktop/src/components/common/RenderForm/tags/TagTextarea.vue
+++ b/frontend/desktop/src/components/common/RenderForm/tags/TagTextarea.vue
@@ -38,11 +38,11 @@
- {{ item }}
+ :key="item.key"
+ :class="{ 'is-hover': hoverKey === item.key }"
+ @click.stop="onSelectVal(item.key)">
+ {{ item.key }}
+ {{ item.name }}
@@ -107,10 +107,10 @@
get () {
let KeyList = []
if (this.constants) {
- KeyList = [...Object.keys(this.constants)]
+ KeyList = [...Object.values(this.constants)]
}
if (this.internalVariable) {
- KeyList = [...KeyList, ...Object.keys(this.internalVariable)]
+ KeyList = [...KeyList, ...Object.values(this.internalVariable)]
}
return KeyList
},
@@ -277,7 +277,7 @@
}
// 判断是否为变量格式
if (matchText === '$' || /^\${[a-zA-Z_]*[\w|.]*/.test(matchText)) {
- this.varList = this.constantArr.filter(item => item.indexOf(matchText) > -1)
+ this.varList = this.constantArr.filter(item => item.key.indexOf(matchText) > -1)
// 计算变量下拉列表的坐标
this.isListOpen = false
if (this.varList.length) {
@@ -307,13 +307,13 @@
const focusValueWidth = newDom.offsetWidth || 0
const focusValueHeight = newDom.offsetHeight || 0
this.$el.removeChild(newDom)
- let popLeft = previousDomLeft + previousDomWidth + focusValueWidth
- if (popLeft > inputWidth - 238) {
- popLeft = inputWidth - 238
- }
- let popTop = textNodeTop - inputTop + focusValueHeight + 2 // 2px是为了使光标和联想列表隔开
this.$nextTick(() => {
- const { height: varListHeight } = document.querySelector('.rf-select-list').getBoundingClientRect()
+ const { height: varListHeight, width: varListWidth } = document.querySelector('.rf-select-list').getBoundingClientRect()
+ let popLeft = previousDomLeft + previousDomWidth + focusValueWidth
+ if (popLeft > inputWidth - varListWidth) {
+ popLeft = inputWidth - varListWidth
+ }
+ let popTop = textNodeTop - inputTop + focusValueHeight + 2 // 2px是为了使光标和联想列表隔开
if (window.innerHeight < textNodeTop + focusValueHeight + varListHeight + 50) {
popTop = textNodeTop - inputTop - varListHeight - 2
}
@@ -345,7 +345,11 @@
let domValue = dom.textContent || '\n'
if (dom.childNodes.length) {
domValue = Array.from(dom.childNodes).map(item => {
- return item.type === 'button' ? item.value : item.textContent
+ return item.type === 'button'
+ ? item.value
+ : item.textContent.trim() === ''
+ ? ' '
+ : item.textContent.replace(/ /g, ' ')
}).join('')
}
return domValue
@@ -376,7 +380,7 @@
let isExistVar = false
if ($0) {
isExistVar = this.constantArr.some(item => {
- const varText = item.slice(2, -1)
+ const varText = item.key.slice(2, -1)
if ($0.indexOf(varText) > -1) {
const regexp = new RegExp(`^(.*\\W|\\W)?${varText}(\\W|\\W.*)?$`)
return regexp.test($0)
@@ -436,12 +440,12 @@
if (len) {
event.preventDefault()
event.stopPropagation()
- let curIndex = this.varList.findIndex(item => item === this.hoverKey)
+ let curIndex = this.varList.findIndex(item => item.key === this.hoverKey)
curIndex = event.code === 'ArrowDown' ? curIndex + 1 : curIndex - 1
curIndex = curIndex > len - 1 ? 0 : (curIndex < 0 ? len - 1 : curIndex)
const option = this.varList[curIndex]
if (option) {
- this.hoverKey = option
+ this.hoverKey = option.key
const selectDom = this.$el.querySelector('.rf-select-content')
const hoverItemDom = selectDom.querySelector('.is-hover')
if (hoverItemDom) {
@@ -471,12 +475,17 @@
position: absolute;
top: 40px;
right: 0;
- width: 238px;
+ max-width: 600px;
background: #ffffff;
+ border: 1px solid #dcdee5;
border-radius: 2px;
- box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 3px 9px 0 rgba(0,0,0,.1);
overflow-y: hidden;
z-index: 100;
+ .name {
+ color: #c4c6cc;
+ margin-left: 16px;
+ }
}
.rf-select-content {
max-height: 100px;
@@ -485,12 +494,21 @@
@include scrollbar;
}
.rf-select-item {
+ display: flex;
+ align-items: center;
padding: 0 10px;
line-height: 32px;
font-size: 12px;
cursor: pointer;
- overflow: hidden;
- text-overflow: ellipsis;
+ > span {
+ flex-shrink: 0;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ }
+ .name {
+ max-width: 250px;
+ }
&.is-hover,
&:hover {
background: #f5f7fa;
diff --git a/frontend/desktop/src/config/i18n/cn.js b/frontend/desktop/src/config/i18n/cn.js
index fff8ebb805..b69269f734 100644
--- a/frontend/desktop/src/config/i18n/cn.js
+++ b/frontend/desktop/src/config/i18n/cn.js
@@ -1788,7 +1788,10 @@ const cn = {
'清除所有IP': '清除所有IP',
'清除异常IP': '清除异常IP',
'节点输入型变量仅支持从节点"取消使用变量"来删除': '节点输入型变量仅支持从节点"取消使用变量"来删除',
- '节点输出型变量仅支持从节点"取消接收输出"来删除': '节点输出型变量仅支持从节点"取消接收输出"来删除 '
+ '节点输出型变量仅支持从节点"取消接收输出"来删除': '节点输出型变量仅支持从节点"取消接收输出"来删除',
+ '刷新': '刷新',
+ 'exFailedText': '节点执行失败,请前往{0}查看错误原因',
+ 'exFailedText_调用日志': '调用日志'
}
export default cn
diff --git a/frontend/desktop/src/config/i18n/en.js b/frontend/desktop/src/config/i18n/en.js
index ecff355d91..ad57c28e8d 100644
--- a/frontend/desktop/src/config/i18n/en.js
+++ b/frontend/desktop/src/config/i18n/en.js
@@ -1822,7 +1822,10 @@ const en = {
'清除所有IP': 'Clear all IPs',
'清除异常IP': 'Clear abnormal IP',
'节点输入型变量仅支持从节点"取消使用变量"来删除': 'Node input variables can only be deleted by the node "Cancel Using variable"',
- '节点输出型变量仅支持从节点"取消接收输出"来删除': 'Node output variables can only be deleted by the node "Cancel Receiving Output"'
+ '节点输出型变量仅支持从节点"取消接收输出"来删除': 'Node output variables can only be deleted by the node "Cancel Receiving Output"',
+ '刷新': 'Refresh',
+ 'exFailedText': 'Node execution failed. Please go to the {0} to check the error reason.',
+ 'exFailedText_调用日志': 'call log'
}
export default en
diff --git a/frontend/desktop/src/pages/task/TaskExecute/ExecuteInfo.vue b/frontend/desktop/src/pages/task/TaskExecute/ExecuteInfo.vue
index d654c1de1a..14df3b33f6 100644
--- a/frontend/desktop/src/pages/task/TaskExecute/ExecuteInfo.vue
+++ b/frontend/desktop/src/pages/task/TaskExecute/ExecuteInfo.vue
@@ -130,7 +130,8 @@
:execute-info="executeRecord"
:node-detail-config="nodeDetailConfig"
:not-performed-sub-node="notPerformedSubNode"
- :is-sub-process-node="isSubProcessNode">
+ :is-sub-process-node="isSubProcessNode"
+ @onTabChange="onTabChange">
-
-
-
- {{ isExpand ? $t('收起') : $t('显示全部') }}
+
@@ -174,11 +179,6 @@
color: #3a84ff;
}
}
- .not-fail {
- color: #979ba5;
- font-size: 12px;
- padding-left: 15px;
- }
.operation-table {
display: flex;
align-items: center;
diff --git a/frontend/desktop/src/pages/template/TemplateEdit/NodeConfig/InputParams.vue b/frontend/desktop/src/pages/template/TemplateEdit/NodeConfig/InputParams.vue
index 527f870c8d..3d88878eaf 100644
--- a/frontend/desktop/src/pages/template/TemplateEdit/NodeConfig/InputParams.vue
+++ b/frontend/desktop/src/pages/template/TemplateEdit/NodeConfig/InputParams.vue
@@ -434,7 +434,7 @@
}
.form-item-group {
padding: 16px;
- margin-right: 45px;
+ margin-right: 40px;
background: #f5f7fa;
.rf-tag-form {
margin-right: 0;
diff --git a/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables/VariableCitedList.vue b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables/VariableCitedList.vue
index 53d94550fb..d1925685c0 100644
--- a/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables/VariableCitedList.vue
+++ b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables/VariableCitedList.vue
@@ -24,7 +24,7 @@
@click.stop="onCitedNodeClick(group.key, item.id)">
{{ item.name }}
-
+
diff --git a/frontend/desktop/src/scss/iconfont.scss b/frontend/desktop/src/scss/iconfont.scss
index bad7e07801..eb48bed614 100644
--- a/frontend/desktop/src/scss/iconfont.scss
+++ b/frontend/desktop/src/scss/iconfont.scss
@@ -590,9 +590,9 @@
.common-icon-full-screen:before {
content: "\e202";
}
-.common-icon-variable-hook:before {
- content: "\e205";
-}
.common-icon-converge-node:before {
content: "\e204";
}
+.common-icon-variable-hook:before {
+ content: "\e207";
+}