-
- {{ extension }}
-
+
+
+
+ {{ tag }}
+
+
+
-
-
- 添加扩展名
+
+
+ 添加后缀名
+
diff --git a/ui/src/styles/STYLE_README.md b/ui/src/styles/STYLE_README.md
index d6f4ccb440b..98e28007dc8 100644
--- a/ui/src/styles/STYLE_README.md
+++ b/ui/src/styles/STYLE_README.md
@@ -397,6 +397,11 @@ Tailwind v4 的 `border` 只设置边框宽度和样式,不提供 `--tw-border
所有 `el-button` 的 `:active` 和 `.is-active` 视觉统一复用各自的 hover 样式,不额外加深背景、
边框或文字颜色;普通、plain、text、link、circle 及各语义类型按钮均遵循该规则。
+按钮式多选使用 `el-checkbox-group` 和 `el-checkbox-button`,外观与按钮式单选一致:
+组容器提供圆角边框、4px 内边距和间距,选中项使用主题色文字与浅色背景,不显示相邻按钮连接阴影。
+规则统一维护在 `element-plus.scss` 的 checkbox 分组;仅包含 `el-checkbox-button` 的组容器
+应用该布局,普通复选框组不受影响。保留禁用状态和键盘焦点提示。
+
Element Plus 所需的 `light-3` 至 `light-9` 和 `dark-2` 色阶使用 `color-mix()` 根据主题色生成。业务代码通常不需要直接修改 `--el-color-primary-*`。
项目内所有 Select 下拉弹层统一隐藏 Popper 箭头,并将 Element Plus 默认的 `12px` 偏移回收
diff --git a/ui/src/styles/element-plus.scss b/ui/src/styles/element-plus.scss
index c8430f79040..140be912dd2 100644
--- a/ui/src/styles/element-plus.scss
+++ b/ui/src/styles/element-plus.scss
@@ -62,7 +62,7 @@
/* anchor */
.el-anchor {
--el-anchor-font-size: 14px;
- --el-anchor-color: var(--mk-N900);
+ --el-anchor-color: var(--el-text-color-primary);
font-weight: 500;
&__list {
display: flex;
@@ -323,6 +323,46 @@
}
}
+.el-checkbox-button {
+ --el-checkbox-button-checked-bg-color: var(--mk-primary-transparent-10);
+ --el-checkbox-button-checked-text-color: var(--el-color-primary);
+
+ &.is-checked {
+ .el-checkbox-button__inner {
+ box-shadow: none !important;
+ font-weight: 500 !important;
+ }
+ }
+ &:not(.is-disabled) .el-checkbox-button__inner:hover {
+ background-color: rgb(var(--mk-N900-rgb) / 10%);
+ color: var(--el-text-color-primary);
+ }
+ &__inner {
+ border: none !important;
+ border-radius: var(--el-border-radius-small) !important;
+ color: var(--el-text-color-primary);
+ font-weight: 400;
+ outline: none !important;
+ padding: 5px calc(var(--spacing) * 2);
+ }
+ &__original:focus-visible + .el-checkbox-button__inner {
+ outline: 2px solid var(--mk-primary) !important;
+ outline-offset: 2px;
+ }
+}
+
+.el-checkbox-group {
+ &:has(.el-checkbox-button) {
+ align-items: center;
+ border: 1px solid var(--el-border-color);
+ border-radius: var(--el-border-radius-base);
+ display: inline-flex;
+ flex-wrap: wrap;
+ gap: var(--spacing);
+ padding: var(--spacing);
+ }
+}
+
/* dialog */
.el-date-editor {
.el-range__icon {
@@ -522,6 +562,9 @@
--el-input-focus-border-color: var(--el-input-border-color);
--el-input-hover-border-color: var(--el-input-border-color);
}
+ &--small {
+ --el-input-border-radius: var(--el-border-radius-small);
+ }
}
/* input-number */
.el-input-number {
@@ -745,6 +788,9 @@
&__input {
height: 22px;
}
+ &__tags-text {
+ color: var(--el-text-color-primary);
+ }
}
.el-select-dropdown {
@@ -885,7 +931,7 @@
font-weight: 400;
}
&.is-success {
- color: var(--mk-N900);
+ color: var(--el-text-color-primary);
}
}
@@ -1040,9 +1086,9 @@
/* tag */
.el-tag {
max-width: 115px;
-
padding: 0 6px;
font-weight: 400 !important;
+ line-height: 21px;
&__content {
overflow: hidden;
text-overflow: ellipsis;
@@ -1056,7 +1102,7 @@
}
&--plain {
&.el-tag--info {
- --el-tag-border-color: var(--mk-primary-transparent-10);
+ --el-tag-border-color: rgb(var(--mk-N900-rgb) / 15%) !important;
--el-tag-text-color: var(--mk-N600);
font-weight: 500 !important;
}
@@ -1091,9 +1137,25 @@
}
}
+ &.is-closable {
+ &.el-tag--plain.el-tag--info {
+ --el-tag-text-color: var(--el-text-color-primary) !important;
+ }
+ .el-tag__content {
+ font-weight: 400;
+ }
+ }
+
&__close {
+ margin-left: 4px !important;
.el-icon {
- color: var(--el-text-color-regular);
+ color: rgb(var(--mk-N900-rgb) / 60%) !important;
+ }
+ &:hover {
+ .el-icon {
+ color: var(--el-text-color-primary) !important;
+ }
+ background: none !important;
}
}
.el-icon {
diff --git a/ui/src/views/application/ApplicationView.vue b/ui/src/views/application/ApplicationView.vue
index c6e3505ac3a..52ceb85e93c 100644
--- a/ui/src/views/application/ApplicationView.vue
+++ b/ui/src/views/application/ApplicationView.vue
@@ -220,7 +220,12 @@ function handleBatchDelete() {
@selected="handleApplicationSelect(application.id, $event)"
>
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
{
:api="ToolApi"
:tool="tool"
/>
+
+
@@ -265,8 +267,6 @@ onMounted(() => {
@delete="handleDeleteTool"
/>
-
-
diff --git a/ui/src/workflow-canvas/WORKFLOW_README.md b/ui/src/workflow-canvas/WORKFLOW_README.md
index fefa96ab66b..8ec2c6e7db3 100644
--- a/ui/src/workflow-canvas/WORKFLOW_README.md
+++ b/ui/src/workflow-canvas/WORKFLOW_README.md
@@ -179,7 +179,8 @@ AI 对话、意图识别、问题优化、参数提取、图片理解、视频
的表单必填校验,取消不修改节点,关闭动画结束后统一清理草稿与校验状态。
文件类型与其他文件选择复用手动导入的 `MkCardCheckbox`;扩展名编辑复用非全局组件
`MkTagsEdit`,通过 `v-model` 编辑草稿的 `otherExtensions`,文件类型中已有的扩展名通过
-`reservedExtensions` 传入用于重复检查。组件内部阻止点击冒泡,避免增删扩展名时切换文件类型;
+`reservedTags` 传入用于重复检查。文件上传设置通过 `normalizeTag` 传入去除一个前导点并转为
+大写的扩展名规则,通过 `addText` 设置“添加后缀名”。组件内部阻止点击冒泡,避免增删扩展名时切换文件类型;
输入临时状态随弹窗内容卸载而清理。
表单收集节点的 `component/form-setting/FormSettingTable` 通过 `v-model` 编辑动态表单的
diff --git a/ui/src/workflow-canvas/nodes/ai-chat-node/component/resource-setting/index.vue b/ui/src/workflow-canvas/nodes/ai-chat-node/component/resource-setting/index.vue
index 2973b4c650a..71a1f950561 100644
--- a/ui/src/workflow-canvas/nodes/ai-chat-node/component/resource-setting/index.vue
+++ b/ui/src/workflow-canvas/nodes/ai-chat-node/component/resource-setting/index.vue
@@ -112,27 +112,30 @@ function removeId(field: 'application_ids' | 'mcp_tool_ids' | 'skill_tool_ids' |
MCP({{ mcpCount }})
-
+