From b0e9fe4eba32dd2b477963d1b4719b1e182361df Mon Sep 17 00:00:00 2001
From: Bang <15622356989@163.com>
Date: Wed, 15 Feb 2023 15:12:52 +0800
Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9Etag?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/docs/tag.md | 27 ++++
.../opendesign/src/components/tag/OTag.vue | 138 ++++++++++++++++++
.../src/components/tag/__demo__/IndexTag.vue | 23 +++
.../src/components/tag/__demo__/TagBasic.vue | 16 ++
.../components/tag/__demo__/TagBordered.vue | 13 ++
.../components/tag/__demo__/TagCheckable.vue | 26 ++++
.../components/tag/__demo__/TagClosable.vue | 17 +++
.../src/components/tag/__demo__/TagShape.vue | 11 ++
.../src/components/tag/__demo__/TagSize.vue | 12 ++
.../src/components/tag/__demo__/TagStatus.vue | 19 +++
.../src/components/tag/style/index.scss | 108 ++++++++++++++
.../src/components/tag/style/index.ts | 2 +
.../src/components/tag/style/var.scss | 27 ++++
packages/portal/src/router.ts | 6 +
14 files changed, 445 insertions(+)
create mode 100644 packages/docs/tag.md
create mode 100644 packages/opendesign/src/components/tag/OTag.vue
create mode 100644 packages/opendesign/src/components/tag/__demo__/IndexTag.vue
create mode 100644 packages/opendesign/src/components/tag/__demo__/TagBasic.vue
create mode 100644 packages/opendesign/src/components/tag/__demo__/TagBordered.vue
create mode 100644 packages/opendesign/src/components/tag/__demo__/TagCheckable.vue
create mode 100644 packages/opendesign/src/components/tag/__demo__/TagClosable.vue
create mode 100644 packages/opendesign/src/components/tag/__demo__/TagShape.vue
create mode 100644 packages/opendesign/src/components/tag/__demo__/TagSize.vue
create mode 100644 packages/opendesign/src/components/tag/__demo__/TagStatus.vue
create mode 100644 packages/opendesign/src/components/tag/style/index.scss
create mode 100644 packages/opendesign/src/components/tag/style/index.ts
create mode 100644 packages/opendesign/src/components/tag/style/var.scss
diff --git a/packages/docs/tag.md b/packages/docs/tag.md
new file mode 100644
index 00000000..3eddd8bf
--- /dev/null
+++ b/packages/docs/tag.md
@@ -0,0 +1,27 @@
+# Tag 标签
+
+## props
+
+| name | type | 默认值 | 说明 |
+| :--------------- | :--------------------------------------------- | :------- | ------------------------------------------------------- |
+| status | 'normal' \| 'success' \| 'warning' \| 'danger' | 'normal' | 标签状态 |
+| bordered | boolean | false | 是否有边框 |
+| size | 'large' \| 'normal' \| 'small' | 'normal' | 标签形状 |
+| shape | 'normal' \| 'round' | 'normal' | 尺寸 |
+| closable | boolean | false | 是否可关闭 |
+| checkable | boolean | false | 是否可选中 |
+| checked(v-model) | boolean | false | 是否被选中(仅 checkable 为 true 生效) |
+| defaultChecked | boolean | false | 非受控状态时,默认是否选中(仅 checkable 为 true 生效) |
+
+## event
+
+| name | 参数 | 说明 |
+| :---- | :----------- | :----------- |
+| close | | 值改变时触发 |
+| check | val: boolean | 选中时触发 |
+
+## slot
+
+| name | 说明 |
+| :--- | :------- |
+| icon | 按钮图标 |
diff --git a/packages/opendesign/src/components/tag/OTag.vue b/packages/opendesign/src/components/tag/OTag.vue
new file mode 100644
index 00000000..aa76fd1f
--- /dev/null
+++ b/packages/opendesign/src/components/tag/OTag.vue
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/opendesign/src/components/tag/__demo__/IndexTag.vue b/packages/opendesign/src/components/tag/__demo__/IndexTag.vue
new file mode 100644
index 00000000..2862b691
--- /dev/null
+++ b/packages/opendesign/src/components/tag/__demo__/IndexTag.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/opendesign/src/components/tag/__demo__/TagBasic.vue b/packages/opendesign/src/components/tag/__demo__/TagBasic.vue
new file mode 100644
index 00000000..edb8590a
--- /dev/null
+++ b/packages/opendesign/src/components/tag/__demo__/TagBasic.vue
@@ -0,0 +1,16 @@
+
+
+
+ 基础用法
+
+ Tag1
+ Tag2
+
+
+ Icon Tag
+
+
+
diff --git a/packages/opendesign/src/components/tag/__demo__/TagBordered.vue b/packages/opendesign/src/components/tag/__demo__/TagBordered.vue
new file mode 100644
index 00000000..9cfdfe48
--- /dev/null
+++ b/packages/opendesign/src/components/tag/__demo__/TagBordered.vue
@@ -0,0 +1,13 @@
+
+
+
+ 带边框标签
+
+ Tag1
+ Tag2
+ Tag3
+ Tag4
+
+
diff --git a/packages/opendesign/src/components/tag/__demo__/TagCheckable.vue b/packages/opendesign/src/components/tag/__demo__/TagCheckable.vue
new file mode 100644
index 00000000..810737ca
--- /dev/null
+++ b/packages/opendesign/src/components/tag/__demo__/TagCheckable.vue
@@ -0,0 +1,26 @@
+
+
+
+ 可选中标签
+
+ Tag1
+ Tag2
+ Tag3
+ Tag4
+ Tag5
+ Tag6
+ Tag7
+ Tag8
+
+
diff --git a/packages/opendesign/src/components/tag/__demo__/TagClosable.vue b/packages/opendesign/src/components/tag/__demo__/TagClosable.vue
new file mode 100644
index 00000000..a050bb09
--- /dev/null
+++ b/packages/opendesign/src/components/tag/__demo__/TagClosable.vue
@@ -0,0 +1,17 @@
+
+
+
+ 可关闭按钮
+
+ Tag1
+ Tag2
+ Tag3
+ Tag4
+ Tag5
+
+
diff --git a/packages/opendesign/src/components/tag/__demo__/TagShape.vue b/packages/opendesign/src/components/tag/__demo__/TagShape.vue
new file mode 100644
index 00000000..322d54e2
--- /dev/null
+++ b/packages/opendesign/src/components/tag/__demo__/TagShape.vue
@@ -0,0 +1,11 @@
+
+
+
+ Shape
+
+ Normal Tag
+ Round Tag
+
+
diff --git a/packages/opendesign/src/components/tag/__demo__/TagSize.vue b/packages/opendesign/src/components/tag/__demo__/TagSize.vue
new file mode 100644
index 00000000..ea6b8552
--- /dev/null
+++ b/packages/opendesign/src/components/tag/__demo__/TagSize.vue
@@ -0,0 +1,12 @@
+
+
+
+ Size
+
+ Large Tag
+ Normal Tag
+ Small Tag
+
+
diff --git a/packages/opendesign/src/components/tag/__demo__/TagStatus.vue b/packages/opendesign/src/components/tag/__demo__/TagStatus.vue
new file mode 100644
index 00000000..4c6be243
--- /dev/null
+++ b/packages/opendesign/src/components/tag/__demo__/TagStatus.vue
@@ -0,0 +1,19 @@
+
+
+
+ Status
+
+ Normal Tag
+ Success Tag
+ Warning Tag
+ Danger Tag
+
+
+
+
diff --git a/packages/opendesign/src/components/tag/style/index.scss b/packages/opendesign/src/components/tag/style/index.scss
new file mode 100644
index 00000000..18bb1c1a
--- /dev/null
+++ b/packages/opendesign/src/components/tag/style/index.scss
@@ -0,0 +1,108 @@
+@use './var.scss';
+
+.o-tag {
+ font-size: var(--tag-text-size);
+ line-height: var(--tag-text-height);
+ height: var(--tag-height);
+ border: 1px solid var(--tag-border);
+ border-radius: var(--tag-radius);
+ padding: var(--tag-padding);
+ transition: all var(--o-duration-s) var(--o-easing-standard);
+ background-color: var(--tag-bg);
+ color: var(--tag-color);
+ white-space: nowrap;
+
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.o-tag-size-small {
+ --tag-padding: 0 7px;
+ --tag-height: var(--tag-height-s);
+ --tag-radius: var(--tag-radius-s);
+}
+
+.o-tag-size-normal {
+ --tag-padding: 4px 15px;
+ --tag-height: var(--tag-height-m);
+ --tag-radius: var(--tag-radius-m);
+}
+
+.o-tag-size-large {
+ --tag-padding: 4px 19px;
+ --tag-height: var(--tag-height-l);
+ --tag-radius: var(--tag-radius-l);
+}
+
+.o-tag-status-success {
+ --tag-color: var(--tag-color-success);
+ --tag-bg: var(--tag-bg-success);
+ --tag-border: var(--tag-border-success);
+}
+
+.o-tag-status-warning {
+ --tag-color: var(--tag-color-warning);
+ --tag-bg: var(--tag-bg-warning);
+ --tag-border: var(--tag-border-warning);
+}
+
+.o-tag-status-danger {
+ --tag-color: var(--tag-color-danger);
+ --tag-bg: var(--tag-bg-danger);
+ --tag-border: var(--tag-border-danger);
+}
+
+.o-tag-icon {
+ display: inline-flex;
+ align-items: center;
+ > svg {
+ vertical-align: top;
+ }
+
+ &.prefix {
+ margin-right: 6px;
+ }
+
+ &.suffix {
+ margin-left: 6px;
+ }
+}
+
+.o-tag-icon-close {
+ cursor: pointer;
+}
+
+.o-tag-shape-round {
+ --tag-radius: var(--tag-height-l);
+}
+
+.o-tag-bordered {
+ --tag-bg: transparent;
+ &.o-tag-status-success {
+ --tag-color: var(--tag-bg-success);
+ }
+ &.o-tag-status-warning {
+ --tag-color: var(--tag-bg-warning);
+ }
+ &.o-tag-status-danger {
+ --tag-color: var(--tag-bg-danger);
+ }
+}
+
+.o-tag-checkable {
+ cursor: pointer;
+ &:not(.o-tag-checked) {
+ --tag-bg: transparent;
+ --tag-border: transparent;
+ &.o-tag-status-success {
+ --tag-color: var(--tag-bg-success);
+ }
+ &.o-tag-status-warning {
+ --tag-color: var(--tag-bg-warning);
+ }
+ &.o-tag-status-danger {
+ --tag-color: var(--tag-bg-danger);
+ }
+ }
+}
diff --git a/packages/opendesign/src/components/tag/style/index.ts b/packages/opendesign/src/components/tag/style/index.ts
new file mode 100644
index 00000000..591b2fbd
--- /dev/null
+++ b/packages/opendesign/src/components/tag/style/index.ts
@@ -0,0 +1,2 @@
+import '../../style';
+import './index.scss';
diff --git a/packages/opendesign/src/components/tag/style/var.scss b/packages/opendesign/src/components/tag/style/var.scss
new file mode 100644
index 00000000..3b524dea
--- /dev/null
+++ b/packages/opendesign/src/components/tag/style/var.scss
@@ -0,0 +1,27 @@
+.o-tag {
+ --tag-color: var(--o-color-text2);
+ --tag-color-success: var(--o-color-text1-inverse);
+ --tag-color-warning: var(--o-color-text1-inverse);
+ --tag-color-danger: var(--o-color-text1-inverse);
+
+ --tag-bg: var(--o-color-info1);
+ --tag-bg-success: var(--o-color-success1);
+ --tag-bg-warning: var(--o-color-warning1);
+ --tag-bg-danger: var(--o-color-danger1);
+
+ --tag-border: var(--o-color-info1);
+ --tag-border-success: var(--o-color-success1);
+ --tag-border-warning: var(--o-color-warning1);
+ --tag-border-danger: var(--o-color-danger1);
+
+ --tag-text-size: var(--o-font_size-text);
+ --tag-text-height: var(--o-line_height-text);
+
+ --tag-height-s: var(--o-size-s);
+ --tag-height-m: var(--o-size-m);
+ --tag-height-l: var(--o-size-l);
+
+ --tag-radius-s: var(--o-radius-s);
+ --tag-radius-m: var(--o-radius-s);
+ --tag-radius-l: var(--o-radius-s);
+}
diff --git a/packages/portal/src/router.ts b/packages/portal/src/router.ts
index 91d99718..3cf315c7 100644
--- a/packages/portal/src/router.ts
+++ b/packages/portal/src/router.ts
@@ -117,6 +117,12 @@ export const routes = [
label: '分割线',
component: () => import('@demo/divider/__demo__/IndexDivider.vue'),
},
+ {
+ path: '/tag',
+ name: 'Tag',
+ label: '标签',
+ component: () => import('@demo/tag/__demo__/IndexTag.vue'),
+ },
];
export const router = createRouter({
--
Gitee
From da48b766a6683515456becc9b2f0f38356f5b28b Mon Sep 17 00:00:00 2001
From: Bang <15622356989@163.com>
Date: Wed, 15 Feb 2023 15:24:11 +0800
Subject: [PATCH 2/3] =?UTF-8?q?chore:=20=E4=BF=AE=E6=94=B9=E5=8F=98?=
=?UTF-8?q?=E9=87=8F=E5=91=BD=E5=90=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/opendesign/src/components/tag/OTag.vue | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/packages/opendesign/src/components/tag/OTag.vue b/packages/opendesign/src/components/tag/OTag.vue
index aa76fd1f..dfb9108c 100644
--- a/packages/opendesign/src/components/tag/OTag.vue
+++ b/packages/opendesign/src/components/tag/OTag.vue
@@ -66,12 +66,12 @@ const emits = defineEmits<{
const isVisible = ref(true);
// 监听checked属性改变
-const isCheckedChanged = ref(false);
+const isCheckedPropChange = ref(false);
watch(
() => props.checked,
() => {
- isCheckedChanged.value = true;
+ isCheckedPropChange.value = true;
}
);
@@ -82,7 +82,7 @@ const isChecked = computed(() => {
return false;
}
- if (!isUndefined(props.checked) || isCheckedChanged.value) {
+ if (!isUndefined(props.checked) || isCheckedPropChange.value) {
return props.checked ?? false;
}
--
Gitee
From 8383eb58c9d21ca9a83808ee1c2993aed9161a7f Mon Sep 17 00:00:00 2001
From: Bang <15622356989@163.com>
Date: Wed, 15 Feb 2023 16:27:19 +0800
Subject: [PATCH 3/3] =?UTF-8?q?chore:=20TagStatusT=E5=9C=A8types.ts?=
=?UTF-8?q?=E4=B8=AD=E5=AE=9A=E4=B9=89=E5=B9=B6=E5=AF=BC=E5=87=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/opendesign/src/components/tag/OTag.vue | 3 +--
packages/opendesign/src/components/tag/index.ts | 2 ++
packages/opendesign/src/components/tag/types.ts | 1 +
3 files changed, 4 insertions(+), 2 deletions(-)
create mode 100644 packages/opendesign/src/components/tag/types.ts
diff --git a/packages/opendesign/src/components/tag/OTag.vue b/packages/opendesign/src/components/tag/OTag.vue
index dfb9108c..7b5fa558 100644
--- a/packages/opendesign/src/components/tag/OTag.vue
+++ b/packages/opendesign/src/components/tag/OTag.vue
@@ -2,11 +2,10 @@
import { computed, ref, watch } from 'vue';
import { defaultSize, defaultShape } from '../_shared/global';
import type { SizeT, ShapeT } from '../_shared/global';
+import type { TagStatusT } from './types';
import { IconClose } from '../_shared/icons';
import { isUndefined } from '../_shared/is';
-type TagStatusT = 'normal' | 'success' | 'warning' | 'danger';
-
interface TagPropT {
/**
* 标签状态
diff --git a/packages/opendesign/src/components/tag/index.ts b/packages/opendesign/src/components/tag/index.ts
index c8883279..64dae6f7 100644
--- a/packages/opendesign/src/components/tag/index.ts
+++ b/packages/opendesign/src/components/tag/index.ts
@@ -2,6 +2,8 @@ import type { App } from 'vue';
import _OTag from './OTag.vue';
+export * from './types';
+
const OTag = Object.assign(_OTag, {
install(app: App) {
app.component(_OTag.name, _OTag);
diff --git a/packages/opendesign/src/components/tag/types.ts b/packages/opendesign/src/components/tag/types.ts
new file mode 100644
index 00000000..0d963e64
--- /dev/null
+++ b/packages/opendesign/src/components/tag/types.ts
@@ -0,0 +1 @@
+export type TagStatusT = 'normal' | 'success' | 'warning' | 'danger';
--
Gitee