From 6f8c93ea533cd40cf3aa7bc7d1e9aede05ff9bb1 Mon Sep 17 00:00:00 2001
From: VRlie <2755561608@qq.com>
Date: Mon, 17 Jun 2024 10:52:40 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BB=A3=E7=A0=81=E6=AF=94=E8=BE=83Cod?=
=?UTF-8?q?eReview=E7=BB=84=E4=BB=B6=E5=A2=9E=E5=8A=A0=E5=A4=9A=E8=A1=8C?=
=?UTF-8?q?=E9=80=89=E4=B8=AD=E5=8A=9F=E8=83=BD=E3=80=82=E4=BD=BF=E7=94=A8?=
=?UTF-8?q?allow-checked=E5=8F=82=E6=95=B0=E6=8E=A7=E5=88=B6=E3=80=82?=
=?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AF=A6=E7=BB=86=E4=BD=BF=E7=94=A8=E7=A4=BA?=
=?UTF-8?q?=E4=BE=8B=E5=92=8C=E6=96=87=E6=A1=A3=E8=AF=B4=E6=98=8E=E3=80=82?=
=?UTF-8?q?#1876=20(#1885)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* 组件易用性优化,category-search组件唤出textInput时,input框自动聚焦 (#1842)
* feat: 代码比较CodeReview组件增加行/多行选中功能。使用allow-checked参数控制。增加详细使用示例和文档说明。 #1876
---
.../devui/code-editor/src/code-editor.tsx | 16 +-
packages/devui-vue/devui/code-review/index.ts | 2 +-
.../code-review/src/code-review-types.ts | 4 +
.../devui/code-review/src/code-review.scss | 47 +++
.../devui/code-review/src/code-review.tsx | 21 +-
.../src/components/code-review-header.tsx | 1 +
.../src/components/code-review-icons.tsx | 1 +
.../composables/use-code-review-comment.ts | 208 +++++++++++-
.../devui-vue/devui/code-review/src/utils.ts | 19 +-
.../docs/components/code-review/index.md | 315 ++++++++++++++++++
10 files changed, 603 insertions(+), 31 deletions(-)
diff --git a/packages/devui-vue/devui/code-editor/src/code-editor.tsx b/packages/devui-vue/devui/code-editor/src/code-editor.tsx
index 1bce5641d9..9c8ad83b02 100644
--- a/packages/devui-vue/devui/code-editor/src/code-editor.tsx
+++ b/packages/devui-vue/devui/code-editor/src/code-editor.tsx
@@ -1,3 +1,4 @@
+/* @jsxImportSource vue */
import { defineComponent } from 'vue';
import type { SetupContext } from 'vue';
import { codeEditorProps, CodeEditorProps } from './code-editor-types';
@@ -5,12 +6,11 @@ import { useCodeEditor } from './composables/use-code-editor';
import './code-editor.scss';
export default defineComponent({
- name: 'DCodeEditor',
- props: codeEditorProps,
- emits: ['update:modelValue', 'afterEditorInit', 'click'],
- setup(props: CodeEditorProps, ctx: SetupContext) {
- const { editorEl } = useCodeEditor(props, ctx);
-
- return () =>
;
- }
+ name: 'DCodeEditor',
+ props: codeEditorProps,
+ emits: ['update:modelValue', 'afterEditorInit', 'click'],
+ setup(props: CodeEditorProps, ctx: SetupContext) {
+ const { editorEl } = useCodeEditor(props, ctx);
+ return () => ;
+ }
});
diff --git a/packages/devui-vue/devui/code-review/index.ts b/packages/devui-vue/devui/code-review/index.ts
index b86ea709fb..ce1d93fa11 100644
--- a/packages/devui-vue/devui/code-review/index.ts
+++ b/packages/devui-vue/devui/code-review/index.ts
@@ -9,6 +9,6 @@ export default {
category: '演进中',
status: '100%',
install(app: App): void {
- app.component(CodeReview.name, CodeReview);
+ app.component(CodeReview.name as string, CodeReview);
},
};
diff --git a/packages/devui-vue/devui/code-review/src/code-review-types.ts b/packages/devui-vue/devui/code-review/src/code-review-types.ts
index 951f24c19a..74a368ab81 100644
--- a/packages/devui-vue/devui/code-review/src/code-review-types.ts
+++ b/packages/devui-vue/devui/code-review/src/code-review-types.ts
@@ -30,6 +30,10 @@ export const codeReviewProps = {
type: Boolean,
default: true,
},
+ allowChecked: {
+ type: Boolean,
+ default: false,
+ },
allowExpand: {
type: Boolean,
default: true,
diff --git a/packages/devui-vue/devui/code-review/src/code-review.scss b/packages/devui-vue/devui/code-review/src/code-review.scss
index 88077ea8d0..47a1c36bff 100644
--- a/packages/devui-vue/devui/code-review/src/code-review.scss
+++ b/packages/devui-vue/devui/code-review/src/code-review.scss
@@ -223,6 +223,53 @@
display: table-cell;
}
}
+
+ .d2h-file-diff {
+ // 单栏
+ .comment-checked {
+ &.d2h-cntx {
+ background-color: #fff8c5; // 通常选中
+ }
+
+ &.d2h-del {
+ background-color: #ffe5b4; // 删除行选中
+
+ &.d2h-code-linenumber {
+ background-color: #ffc89d; // 删除行中的number
+ }
+ }
+
+ &.d2h-ins {
+ background-color: #d1f1a8; // 增加行选中
+
+ &.d2h-code-linenumber {
+ background-color: #daf4ae; // 增加行中的number
+ }
+ }
+ }
+ }
+
+ .comment-checked {
+ &.d2h-cntx {
+ background-color: #fff8c5; // 通常选中
+ }
+
+ &.d2h-del {
+ background-color: #ffe5b4; // 删除行选中
+
+ &.d2h-code-side-linenumber {
+ background-color: #ffc89d; // 删除行中的number
+ }
+ }
+
+ &.d2h-ins {
+ background-color: #d1f1a8; // 增加行选中
+
+ &.d2h-code-side-linenumber {
+ background-color: #daf4ae; // 增加行中的number
+ }
+ }
+ }
}
.comment-icon {
diff --git a/packages/devui-vue/devui/code-review/src/code-review.tsx b/packages/devui-vue/devui/code-review/src/code-review.tsx
index ac2e59574a..4337d95306 100644
--- a/packages/devui-vue/devui/code-review/src/code-review.tsx
+++ b/packages/devui-vue/devui/code-review/src/code-review.tsx
@@ -1,4 +1,5 @@
-import { defineComponent, onMounted, provide, toRefs } from 'vue';
+/* @jsxImportSource vue */
+import { defineComponent, onMounted, provide, toRefs, onBeforeUnmount } from 'vue';
import type { SetupContext } from 'vue';
import CodeReviewHeader from './components/code-review-header';
import { CommentIcon } from './components/code-review-icons';
@@ -19,13 +20,20 @@ export default defineComponent({
const { diffType } = toRefs(props);
const { renderHtml, reviewContentRef, diffFile, onContentClick } = useCodeReview(props, ctx);
const { isFold, toggleFold } = useCodeReviewFold(props, ctx);
- const { commentLeft, commentTop, mouseEvent, onCommentMouseLeave, onCommentIconClick, insertComment, removeComment } =
- useCodeReviewComment(reviewContentRef, props, ctx);
+ const { commentLeft, commentTop,
+ mouseEvent, onCommentMouseLeave,
+ onCommentIconClick, onCommentKeyDown,
+ unCommentKeyDown, insertComment,
+ removeComment, updateCheckedLineClass } = useCodeReviewComment(reviewContentRef, props, ctx);
onMounted(() => {
- ctx.emit('afterViewInit', { toggleFold, insertComment, removeComment });
+ ctx.emit('afterViewInit', { toggleFold, insertComment, removeComment, updateCheckedLineClass });
+ onCommentKeyDown();
+ });
+ // 销毁
+ onBeforeUnmount(() => {
+ unCommentKeyDown();
});
-
provide(CodeReviewInjectionKey, { diffType, reviewContentRef, diffInfo: diffFile.value[0], isFold, rootCtx: ctx });
return () => (
@@ -51,7 +59,8 @@ export default defineComponent({
class="comment-icon"
style={{ left: commentLeft.value + 'px', top: commentTop.value + 'px' }}
onClick={onCommentIconClick}
- onMouseleave={onCommentMouseLeave}>
+ onMouseleave={onCommentMouseLeave}
+ >
)}
diff --git a/packages/devui-vue/devui/code-review/src/components/code-review-header.tsx b/packages/devui-vue/devui/code-review/src/components/code-review-header.tsx
index aff973f89f..50ee8bf674 100644
--- a/packages/devui-vue/devui/code-review/src/components/code-review-header.tsx
+++ b/packages/devui-vue/devui/code-review/src/components/code-review-header.tsx
@@ -1,3 +1,4 @@
+/* @jsxImportSource vue */
import { defineComponent, inject } from 'vue';
import type { SetupContext } from 'vue';
import { Popover } from '../../../popover';
diff --git a/packages/devui-vue/devui/code-review/src/components/code-review-icons.tsx b/packages/devui-vue/devui/code-review/src/components/code-review-icons.tsx
index 0aa7852e37..fea51ff085 100644
--- a/packages/devui-vue/devui/code-review/src/components/code-review-icons.tsx
+++ b/packages/devui-vue/devui/code-review/src/components/code-review-icons.tsx
@@ -1,3 +1,4 @@
+/* @jsxImportSource vue */
export function FoldIcon(): JSX.Element {
return (