From e285f720878a1217fa2c1a7e6a1e713d196f1ba2 Mon Sep 17 00:00:00 2001 From: handsomezyw <1165966467@qq.com> Date: Sat, 3 Sep 2022 15:17:17 +0800 Subject: [PATCH 1/5] =?UTF-8?q?fix(modal):=20=E4=BF=AE=E5=A4=8Ddialog?= =?UTF-8?q?=E7=9A=84=E4=B8=AA=E7=AC=AC=E4=B8=80=E4=B8=AAicon=E5=92=8C?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E7=9A=84=E4=B8=8D=E5=AF=B9=E9=BD=90#1300?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/devui-vue/devui/modal/src/modal.scss | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/devui-vue/devui/modal/src/modal.scss b/packages/devui-vue/devui/modal/src/modal.scss index 6e4c917693..ce753279be 100644 --- a/packages/devui-vue/devui/modal/src/modal.scss +++ b/packages/devui-vue/devui/modal/src/modal.scss @@ -45,13 +45,14 @@ align-items: center; &-icon { - display: inline-block; + display: flex; + align-items: center; + justify-content: center; vertical-align: middle; margin-right: 8px; width: 24px; height: 24px; line-height: 16px; - text-align: center; } &-text { From 5390d0bca6a0fdb1ebde2420c261b8d747f48f19 Mon Sep 17 00:00:00 2001 From: handsomezyw <1165966467@qq.com> Date: Sat, 3 Sep 2022 18:36:49 +0800 Subject: [PATCH 2/5] =?UTF-8?q?fix(select):=20=E4=BF=AE=E5=A4=8Dselect?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=89=E9=A1=B9=EF=BC=8C=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=EF=BC=8C=E5=85=B6=E4=BB=96=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=9A=84=E9=80=89=E9=A1=B9=E5=85=A8=E9=83=A8=E8=A2=AB=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E4=BA=86=20#1274?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/devui-vue/devui/select/src/use-select.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/devui-vue/devui/select/src/use-select.ts b/packages/devui-vue/devui/select/src/use-select.ts index dee17c7217..39823fe078 100644 --- a/packages/devui-vue/devui/select/src/use-select.ts +++ b/packages/devui-vue/devui/select/src/use-select.ts @@ -131,7 +131,7 @@ export default function useSelect( const newOption = { name: value, value: value, - _checked: false, + _checked: true, }; return value ? newOption : option; } else { @@ -236,7 +236,7 @@ export default function useSelect( const tagDelete = (data: OptionObjectItem) => { let { modelValue } = props; const checkedItems = []; - for (const child of injectOptions.value.values()) { + for (const child of selectedOptions.value) { if (data.value === child.value) { child._checked = false; } From 219d0e15d179776228c65a37fc6e93222ddbbd1b Mon Sep 17 00:00:00 2001 From: handsomezyw <1165966467@qq.com> Date: Sun, 4 Sep 2022 01:39:24 +0800 Subject: [PATCH 3/5] =?UTF-8?q?fix(tabs):=20=E4=BF=AE=E5=A4=8DTabs?= =?UTF-8?q?=E6=BA=A2=E5=87=BA=E4=B8=8D=E6=88=AA=E6=96=AD=20#1062?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tabs/src/components/tab-nav/tab-nav.scss | 9 +++++++ .../tabs/src/components/tab-nav/tab-nav.tsx | 26 +++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss index 4b5ef22fdc..a2dda34916 100644 --- a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss +++ b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss @@ -293,6 +293,15 @@ $devui-tab-slider-bg: $devui-list-item-hover-bg; align-items: center; list-style: none; padding-left: 0; + overflow-y: hidden; + overflow-x: scroll; + // 隐藏滚动条 + scrollbar-width: none; + -ms-overflow-style: none; + + &::-webkit-scrollbar { + display: none; + } li { a { diff --git a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx index c0f255e17e..b78b91f1a5 100644 --- a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx +++ b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx @@ -1,4 +1,16 @@ -import { computed, defineComponent, inject, onBeforeMount, onMounted, onUpdated, reactive, SetupContext, shallowRef, watch } from 'vue'; +import { + computed, + defineComponent, + inject, + onBeforeMount, + onMounted, + onUpdated, + reactive, + SetupContext, + shallowRef, + watch, + nextTick, +} from 'vue'; import { TabsData, tabsProps, TabsProps, TabsStateData } from '../../tabs-types'; import { useNamespace } from '../../../../shared/hooks/use-namespace'; import { useTabNavRender } from './composables/use-tab-nav-render'; @@ -35,6 +47,16 @@ export default defineComponent({ } ); + const handleTabAdd = () => { + onTabAdd(); + nextTick(() => { + // 使每次添加新tab后,滚动条都在最右侧 + if (tabsEle.value) { + tabsEle.value.scrollLeft = tabsEle.value.scrollWidth; + } + }); + }; + return () => { const closeIconEl = (item: TabsStateData) => { return tabCanClose(item) ? ( @@ -44,7 +66,7 @@ export default defineComponent({ ) : null; }; const newButton = props.addable ? ( -
  • +
  • ) : null; From 8c9bd0c305ed0b25c4ffcbe7f9cc3c02e8852b07 Mon Sep 17 00:00:00 2001 From: handsomezyw <1165966467@qq.com> Date: Sun, 4 Sep 2022 17:34:14 +0800 Subject: [PATCH 4/5] =?UTF-8?q?fix(tabs):=20=E4=BF=AE=E5=A4=8Dtabs?= =?UTF-8?q?=E6=BA=A2=E5=87=BA=E9=BC=A0=E6=A0=87=E6=8B=96=E5=8A=A8tab?= =?UTF-8?q?=E4=B8=8D=E4=BC=9A=E6=BB=91=E5=8A=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tabs/src/components/tab-nav/tab-nav.scss | 1 + .../tabs/src/components/tab-nav/tab-nav.tsx | 64 +++++++++++++++---- 2 files changed, 54 insertions(+), 11 deletions(-) diff --git a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss index a2dda34916..2f3db29b8c 100644 --- a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss +++ b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.scss @@ -295,6 +295,7 @@ $devui-tab-slider-bg: $devui-list-item-hover-bg; padding-left: 0; overflow-y: hidden; overflow-x: scroll; + user-select: none; // 隐藏滚动条 scrollbar-width: none; -ms-overflow-style: none; diff --git a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx index b78b91f1a5..88b535905a 100644 --- a/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx +++ b/packages/devui-vue/devui/tabs/src/components/tab-nav/tab-nav.tsx @@ -5,6 +5,7 @@ import { onBeforeMount, onMounted, onUpdated, + onUnmounted, reactive, SetupContext, shallowRef, @@ -33,9 +34,60 @@ export default defineComponent({ const { update, beforeMount, mounted, activeClick, tabCanClose } = useTabNavFunction(props, tabs, tabsList, data, ctx, tabsEle); const { onTabRemove, onTabAdd } = useTabNavEvent(ctx); + // 添加新的tab选项 + const handleTabAdd = () => { + onTabAdd(); + nextTick(() => { + // 使每次添加新tab后,滚动条都在最右侧 + if (tabsEle.value) { + tabsEle.value.scrollLeft = tabsEle.value.scrollWidth; + } + }); + }; + + // 鼠标是否在滑动 + let isSlide = false; + // tab滑动 + const handleSlideTab = (mousedownEvent: MouseEvent) => { + if (tabsEle.value) { + // 鼠标按下x坐标 + const mousedownX = mousedownEvent.clientX; + // 当前滚动条距离 + const scrollLeft = tabsEle.value.scrollLeft; + isSlide = true; + // 监听鼠标滑动 + tabsEle.value.addEventListener('mousemove', (mousemoveEvent: MouseEvent) => { + if (isSlide && tabsEle.value) { + // 当前鼠标移动x坐标 + const mousemoveX = mousemoveEvent.clientX; + // 滑动距离 + const scrollWidth = mousemoveX - mousedownX; + tabsEle.value.scrollLeft = scrollLeft - scrollWidth; + } + }); + tabsEle.value.addEventListener('mouseup', () => { + isSlide = false; + }); + tabsEle.value.addEventListener('mouseleave', () => { + isSlide = false; + }); + } + }; + onUpdated(() => update()); onBeforeMount(() => beforeMount()); - onMounted(() => mounted()); + onMounted(() => { + mounted(); + // tab超出容器后监听滑动 + if (tabsEle.value) { + tabsEle.value.addEventListener('mousedown', handleSlideTab); + } + }); + onUnmounted(() => { + if (tabsEle.value) { + tabsEle.value.removeEventListener('mousedown', handleSlideTab); + } + }); watch( () => props.modelValue, @@ -47,16 +99,6 @@ export default defineComponent({ } ); - const handleTabAdd = () => { - onTabAdd(); - nextTick(() => { - // 使每次添加新tab后,滚动条都在最右侧 - if (tabsEle.value) { - tabsEle.value.scrollLeft = tabsEle.value.scrollWidth; - } - }); - }; - return () => { const closeIconEl = (item: TabsStateData) => { return tabCanClose(item) ? ( From f3ef2b64008ea8435b0e8d6fe22d3d5403385fc6 Mon Sep 17 00:00:00 2001 From: handsomezyw <1165966467@qq.com> Date: Mon, 5 Sep 2022 11:33:22 +0800 Subject: [PATCH 5/5] =?UTF-8?q?fix(mention):=20=E4=BF=AE=E5=A4=8DMention?= =?UTF-8?q?=20=E7=BB=84=E4=BB=B6=E7=9A=84=E8=81=94=E6=83=B3=E6=96=87?= =?UTF-8?q?=E5=AD=97=E9=80=89=E4=B8=AD=E5=90=8E=E5=BA=94=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E8=BE=93=E5=85=A5=E7=9A=84=E8=81=94=E6=83=B3?= =?UTF-8?q?=E6=96=87=E6=9C=AC=EF=BC=8C=E8=80=8C=E9=9D=9E=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=20#1303?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/devui-vue/devui/mention/src/mention.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/devui-vue/devui/mention/src/mention.tsx b/packages/devui-vue/devui/mention/src/mention.tsx index 181cc9732e..7f77ca868e 100644 --- a/packages/devui-vue/devui/mention/src/mention.tsx +++ b/packages/devui-vue/devui/mention/src/mention.tsx @@ -63,7 +63,7 @@ export default defineComponent({ e.stopPropagation(); e.preventDefault(); showSuggestions.value = false; - textContext.value += item[props.dmValueParse.value as keyof IMentionSuggestionItem]; + textContext.value = textContext.value.substring(0, 1) + item[props.dmValueParse.value as keyof IMentionSuggestionItem]; }; const arrowKeyDown = (e: KeyboardEvent) => { @@ -98,7 +98,9 @@ export default defineComponent({ e.stopPropagation(); e.preventDefault(); showSuggestions.value = false; - textContext.value += filteredSuggestions.value[currentIndex.value][props.dmValueParse.value as keyof IMentionSuggestionItem]; + textContext.value = + textContext.value.substring(0, 1) + + filteredSuggestions.value[currentIndex.value][props.dmValueParse.value as keyof IMentionSuggestionItem]; emit('select', filteredSuggestions.value[currentIndex.value]); } }