diff --git a/packages/devui-vue/devui/cascader/components/cascader-tag/index.tsx b/packages/devui-vue/devui/cascader/components/cascader-tag/index.tsx index 8c4ff034af70e4eae0b492f26eaac911799f23e3..4b68406c5fe300b883ae53e97d4aa1c57958d66c 100644 --- a/packages/devui-vue/devui/cascader/components/cascader-tag/index.tsx +++ b/packages/devui-vue/devui/cascader/components/cascader-tag/index.tsx @@ -16,11 +16,11 @@ export default (props: PropsType) => { multipleDeleteTag(tagList, tag) } return ( -
- { tag?.label } -
- +
+ {tag?.label} +
+
) -} \ No newline at end of file +} diff --git a/packages/devui-vue/devui/tag/index.ts b/packages/devui-vue/devui/tag/index.ts index 43310285f5c37a45fdbee30011f4ca0b4bb64b92..d3b5f9167e0ce43c41936c8e1b44ab788ae50af9 100644 --- a/packages/devui-vue/devui/tag/index.ts +++ b/packages/devui-vue/devui/tag/index.ts @@ -10,7 +10,7 @@ export { Tag } export default { title: 'Tag 标签', category: '数据展示', - status: '20%', // TODO: 组件若开发完成则填入"已完成",并删除该注释 + status: '70%', // TODO: 组件若开发完成则填入"已完成",并删除该注释 install(app: App): void { app.use(Tag as any) } diff --git a/packages/devui-vue/devui/tag/src/tag.scss b/packages/devui-vue/devui/tag/src/tag.scss index b6b73434648457cfb7cb9e2baa2849b6aa692b4a..0ef0d58515fdb73d651df94f080a92170f70c73e 100644 --- a/packages/devui-vue/devui/tag/src/tag.scss +++ b/packages/devui-vue/devui/tag/src/tag.scss @@ -56,4 +56,18 @@ $devui-tag-normal-config: ( } } } + .remove-button { + display: inline-block; + margin-left: 12px; + font-size: $devui-font-size-icon; + cursor: pointer; + width: 12px; + height: 12px; + line-height: 12px; + border-radius: 50%; + text-align: center; + position: relative; + top: -0.22em; + vertical-align: middle; + } } diff --git a/packages/devui-vue/devui/tag/src/tag.tsx b/packages/devui-vue/devui/tag/src/tag.tsx index 146046f2c0f21c7feccab9a956f51bc42639ea05..7d86daa1677c4e9cd47514ae1c462f15a038a69b 100644 --- a/packages/devui-vue/devui/tag/src/tag.tsx +++ b/packages/devui-vue/devui/tag/src/tag.tsx @@ -1,4 +1,4 @@ -import { defineComponent, ref, toRefs } from 'vue' +import { defineComponent, toRefs, ref, watch, onUnmounted } from 'vue' import { tagProps, TagProps } from './tag-types' import { useClass, useColor } from './hooks' import './tag.scss' @@ -7,36 +7,56 @@ import './tag.scss' export default defineComponent({ name: 'DTag', props: tagProps, - emits: ['click'], + emits: ['click', 'tagDelete', 'checkedChange'], setup(props: TagProps, { slots, emit }) { - const { type, color, checked, titleContent } = toRefs(props) + const { type, color, checked, titleContent, deletable } = toRefs(props) const tagClass = useClass(props) const themeColor = useColor(props) const tagTitle = titleContent.value || '' + const isDefaultTag = () => !type.value && !color.value + const isShow = ref(true) // 子组件的点击事件 - const Click = () => { + const handleClick = () => { emit('click') } - return () => ( -
- - {slots.default?.()} - -
- ) + const handleDelete = () => { + isShow.value = false + emit('tagDelete') + } + const closeIconEl = () => { + return deletable.value ? ( + + {isDefaultTag() ? ( + + ) : ( + + )} + + ) : null + } + //tag 的 check 状态改变时触发的事件checkedChange + const unWatch = watch(checked, (newVal) => { + console.log('checkedChange') + + emit('checkedChange', newVal) + }) + onUnmounted(() => unWatch()) + return () => + isShow.value && ( +
+ + {slots.default?.()} + {closeIconEl()} + +
+ ) } }) diff --git a/packages/devui-vue/docs/components/tag/index.md b/packages/devui-vue/docs/components/tag/index.md index 5357412c3924c7ee2bd5a44f029a3c788a5d4537..dfb22a07c749ff1670a5b9406fff66383132941a 100644 --- a/packages/devui-vue/docs/components/tag/index.md +++ b/packages/devui-vue/docs/components/tag/index.md @@ -58,7 +58,8 @@ export default defineComponent({ ```vue + + +``` + +::: + ### API #### Props -| 参数 | 类型 | 默认值 | 说明 | 可选值 | 跳转至 Demo | -| :-----: | :-------: | :-------: | :-----------------------------------------: | :------------------------------: | :---------------: | -| type | `string` | 'defalut' | 可选,标签的类型,指定类型后则 color 不生效 | `success\|info\|warning\|danger` | [示例](#基本用法) | -| color | `string` | '' | 可选,标签的主题色 | | | -| checked | `boolean` | false | 可选,可选,标签选中的初始状态 | `true\|false` | [示例](#基本用法) | +| 参数 | 类型 | 默认值 | 说明 | 可选值 | 跳转至 Demo | +| :----------: | :-------: | :-------: | :-----------------------------------------: | :------------------------------: | :---------------: | +| type | `string` | 'defalut' | 可选,标签的类型,指定类型后则 color 不生效 | `success\|info\|warning\|danger` | [示例](#基本用法) | +| color | `string` | '' | 可选,标签的主题色 | - | [示例](#基本用法) | +| titleContent | `string` | '' | 可选,设置鼠标悬浮时 title 的显示内容 | - | [示例](#基本用法) | +| checked | `boolean` | false | 可选,标签选中的初始状态 | `true\|false` | [示例](#可被选中) | +| deletable | `boolean` | false | 可选,设置标签是否可删除 | `true\|false` | [示例](#可关闭的) | #### Event -| 名称 | 说明 | -| :------------ | --------------------------------- | -| click | 点击tag 的时候触发的事件 | -| tagDelete | 删除 tag 的时候触发的事件 | -| checkedChange | tag 的 check 状态改变时触发的事件 | +| 名称 | 说明 | +| :------------ | ----------------------------------------------------------- | +| click | 点击 tag 的时候触发的事件 | +| tagDelete | 删除 tag 的时候触发的事件 | +| checkedChange | tag 的 check 状态改变时触发的事件,通过参数接收标签最新状态 |