|
@@ -248,7 +248,9 @@
|
|
|
<div
|
|
<div
|
|
|
v-for="rule in popoverRelatedRules"
|
|
v-for="rule in popoverRelatedRules"
|
|
|
:key="rule.id"
|
|
:key="rule.id"
|
|
|
- class="rule-trace-card"
|
|
|
|
|
|
|
+ class="rule-trace-card clickable"
|
|
|
|
|
+ @click="openRuleWorkflow(rule)"
|
|
|
|
|
+ title="点击编辑规则"
|
|
|
>
|
|
>
|
|
|
<span class="rule-trace-action" :class="'action-' + rule.actionType">{{ ruleActionLabel(rule.actionType) }}</span>
|
|
<span class="rule-trace-action" :class="'action-' + rule.actionType">{{ ruleActionLabel(rule.actionType) }}</span>
|
|
|
<div class="rule-trace-info">
|
|
<div class="rule-trace-info">
|
|
@@ -258,7 +260,7 @@
|
|
|
v-for="inp in rule.inputs"
|
|
v-for="inp in rule.inputs"
|
|
|
:key="inp.inputId"
|
|
:key="inp.inputId"
|
|
|
class="rule-trace-att clickable"
|
|
class="rule-trace-att clickable"
|
|
|
- @click="openSourceInViewer(inp, rule)"
|
|
|
|
|
|
|
+ @click.stop="openSourceInViewer(inp, rule)"
|
|
|
title="点击查看来源"
|
|
title="点击查看来源"
|
|
|
>📎 {{ formatInputSource(inp) }}</span>
|
|
>📎 {{ formatInputSource(inp) }}</span>
|
|
|
</div>
|
|
</div>
|
|
@@ -276,7 +278,6 @@
|
|
|
</div>
|
|
</div>
|
|
|
<div class="popover-footer">
|
|
<div class="popover-footer">
|
|
|
<el-button size="small" @click="highlightPopover.visible = false">关闭</el-button>
|
|
<el-button size="small" @click="highlightPopover.visible = false">关闭</el-button>
|
|
|
- <el-button size="small" @click="enterReferenceModeFromPopover">📎 从附件引用</el-button>
|
|
|
|
|
<el-button size="small" type="primary" @click="savePopoverValue">保存</el-button>
|
|
<el-button size="small" type="primary" @click="savePopoverValue">保存</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -1454,6 +1455,14 @@ async function openWorkflowForRule(rule) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// 从弹窗中打开规则工作流编辑器
|
|
|
|
|
+async function openRuleWorkflow(rule) {
|
|
|
|
|
+ // 关闭弹窗
|
|
|
|
|
+ highlightPopover.value.visible = false
|
|
|
|
|
+ // 复用现有的打开工作流函数
|
|
|
|
|
+ await openWorkflowForRule(rule)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
function normalizeRuleSourceName(name) {
|
|
function normalizeRuleSourceName(name) {
|
|
|
const s = String(name || '').trim()
|
|
const s = String(name || '').trim()
|
|
|
if (!s) return ''
|
|
if (!s) return ''
|
|
@@ -6982,13 +6991,22 @@ onMounted(async () => {
|
|
|
display: flex;
|
|
display: flex;
|
|
|
align-items: flex-start;
|
|
align-items: flex-start;
|
|
|
gap: 8px;
|
|
gap: 8px;
|
|
|
- padding: 6px 8px;
|
|
|
|
|
|
|
+ padding: 8px 10px;
|
|
|
background: var(--bg);
|
|
background: var(--bg);
|
|
|
- border-radius: var(--radius-sm);
|
|
|
|
|
- border: 1px solid var(--border);
|
|
|
|
|
|
|
+ border-radius: 8px;
|
|
|
|
|
+ border: 1.5px solid var(--border);
|
|
|
margin-bottom: 6px;
|
|
margin-bottom: 6px;
|
|
|
|
|
+ cursor: pointer;
|
|
|
|
|
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
|
|
|
|
|
|
&:last-child { margin-bottom: 0; }
|
|
&:last-child { margin-bottom: 0; }
|
|
|
|
|
+
|
|
|
|
|
+ &:hover {
|
|
|
|
|
+ background: linear-gradient(135deg, #f8fbff 0%, #f0f7ff 100%);
|
|
|
|
|
+ border-color: #409eff;
|
|
|
|
|
+ transform: translateX(2px);
|
|
|
|
|
+ box-shadow: 0 2px 8px rgba(64, 158, 255, 0.08);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
.rule-trace-action {
|
|
.rule-trace-action {
|
|
|
flex-shrink: 0;
|
|
flex-shrink: 0;
|