diff --git a/Changelog.md b/Changelog.md
index f50014238..0b9c5c15c 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -26,5 +26,6 @@
- 优化核心启动、停止及更新流程,减少竞态与残留进程
- 优化首页当前节点的交互
- Linux 代理设置缺失必要命令时,给出明确命令缺失信息,避免模糊报错
+- 支持在前置规则与后置规则之间直接切换规则位置
diff --git a/src/components/profile/rule-item.tsx b/src/components/profile/rule-item.tsx
index 6c16bd37a..81b4a38ff 100644
--- a/src/components/profile/rule-item.tsx
+++ b/src/components/profile/rule-item.tsx
@@ -1,6 +1,11 @@
import { useSortable } from '@dnd-kit/sortable'
import { CSS } from '@dnd-kit/utilities'
-import { DeleteForeverRounded, UndoRounded } from '@mui/icons-material'
+import {
+ DeleteForeverRounded,
+ UndoRounded,
+ VerticalAlignBottomRounded,
+ VerticalAlignTopRounded,
+} from '@mui/icons-material'
import {
Box,
IconButton,
@@ -13,10 +18,12 @@ interface Props {
type: 'prepend' | 'original' | 'delete' | 'append'
ruleRaw: string
onDelete: () => void
+ onPrepend?: () => void
+ onAppend?: () => void
}
export const RuleItem = (props: Props) => {
- const { type, ruleRaw, onDelete } = props
+ const { type, ruleRaw, onDelete, onPrepend, onAppend } = props
const sortable = type === 'prepend' || type === 'append'
const rule = ruleRaw.replace(',no-resolve', '')
@@ -105,6 +112,16 @@ export const RuleItem = (props: Props) => {
},
}}
/>
+ {type === 'prepend' && (
+
+
+
+ )}
+ {type === 'append' && (
+
+
+
+ )}
{type === 'delete' ? : }
diff --git a/src/components/profile/rules-editor-viewer.tsx b/src/components/profile/rules-editor-viewer.tsx
index 925f968d6..2888b635d 100644
--- a/src/components/profile/rules-editor-viewer.tsx
+++ b/src/components/profile/rules-editor-viewer.tsx
@@ -315,6 +315,12 @@ export const RulesEditorViewer = (props: Props) => {
onDelete={() => {
setPrependSeq(prependSeq.filter((v) => v !== item))
}}
+ onAppend={() => {
+ setAppendSeq((prev) =>
+ prev.includes(item) ? prev : [...prev, item],
+ )
+ setPrependSeq(prependSeq.filter((v) => v !== item))
+ }}
/>
)
})}
@@ -364,6 +370,12 @@ export const RulesEditorViewer = (props: Props) => {
onDelete={() => {
setAppendSeq(appendSeq.filter((v) => v !== item))
}}
+ onPrepend={() => {
+ setPrependSeq((prev) =>
+ prev.includes(item) ? prev : [...prev, item],
+ )
+ setAppendSeq(appendSeq.filter((v) => v !== item))
+ }}
/>
)
})}