mirror of
https://github.com/continew-org/continew-admin-ui.git
synced 2025-09-27 14:57:08 +08:00
fix: 左树右表动画问题
This commit is contained in:
@@ -1,33 +1,27 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div ref="rootRef" class="ca-split-panel" :class="{
|
||||||
ref="rootRef"
|
|
||||||
class="ca-split-panel"
|
|
||||||
:class="{
|
|
||||||
'is-vertical': vertical,
|
'is-vertical': vertical,
|
||||||
'is-resizing': resizing,
|
'is-resizing': resizing,
|
||||||
'is-collapse': isCollapse,
|
'is-collapse': isCollapse,
|
||||||
'is-responsive': isResponsive,
|
'is-responsive': isResponsive,
|
||||||
'is-mobile': isMobile,
|
'is-mobile': isMobile,
|
||||||
}"
|
}" :style="customStyle">
|
||||||
:style="customStyle"
|
|
||||||
>
|
|
||||||
<div class="container" :style="sideStyle">
|
<div class="container" :style="sideStyle">
|
||||||
<div ref="sideRef" class="ca-split-panel__side" :class="{ clead_padding: isCollapse }">
|
<div ref="sideRef" class="ca-split-panel__side">
|
||||||
<div class="ca-split-panel__content">
|
<div class="ca-split-panel__content">
|
||||||
<slot name="left"></slot>
|
<slot name="left"></slot>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- 竖线和按钮 -->
|
<!-- 竖线和按钮 -->
|
||||||
<div class="divider-container">
|
<div class="divider-container">
|
||||||
<div class="divider" v-show="!isCollapse"></div>
|
<div v-show="!isCollapse" class="divider"></div>
|
||||||
<div v-if="allowCollapse" class="ca-split-panel__collapse-trigger" :class="{
|
<div v-if="allowCollapse" class="ca-split-panel__collapse-trigger" :class="{
|
||||||
'is-collapse': isCollapse,
|
'is-collapse': isCollapse,
|
||||||
'is-mobile': isMobile,
|
'is-mobile': isMobile,
|
||||||
}" :style="!isMobile ? collapseTriggerStyle : undefined" @click="toggleCollapse">
|
}" @click="toggleCollapse">
|
||||||
<div class="ca-split-panel__collapse-trigger-icon" style="">
|
<div class="ca-split-panel__collapse-trigger-icon">
|
||||||
<icon-right size="20" v-if="isCollapse" />
|
<IconRight v-if="isCollapse" size="20" />
|
||||||
<icon-left v-else size="20" />
|
<IconLeft v-else size="20" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -123,7 +117,7 @@ const sideStyle = computed((): CSSProperties => ({
|
|||||||
* 计算主内容区域样式
|
* 计算主内容区域样式
|
||||||
*/
|
*/
|
||||||
const mainStyle = computed(() => ({
|
const mainStyle = computed(() => ({
|
||||||
transition: 'padding-left 0.5s ease',
|
transition: 'padding 0.5s ease',
|
||||||
flex: 1,
|
flex: 1,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
@@ -136,32 +130,6 @@ const isResponsive = computed(() => {
|
|||||||
return window.innerWidth < 768
|
return window.innerWidth < 768
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
|
||||||
* 计算折叠触发器的样式
|
|
||||||
*/
|
|
||||||
const collapseTriggerStyle = computed(() => {
|
|
||||||
if (isMobile.value) {
|
|
||||||
return {}
|
|
||||||
}
|
|
||||||
|
|
||||||
const baseSize = resizedSize.value || normalizedSize.value
|
|
||||||
const buttonOffset = '16px' // 按钮偏移量
|
|
||||||
|
|
||||||
if (props.reverse) {
|
|
||||||
return {
|
|
||||||
right: isCollapse.value
|
|
||||||
? `-${buttonOffset}`
|
|
||||||
: `calc(${baseSize} - ${buttonOffset})`,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
left: isCollapse.value
|
|
||||||
? `-${buttonOffset}`
|
|
||||||
: `calc(${baseSize} - ${buttonOffset})`,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 切换折叠状态
|
* 切换折叠状态
|
||||||
* 触发 update:collapse 事件通知父组件
|
* 触发 update:collapse 事件通知父组件
|
||||||
@@ -203,10 +171,12 @@ onUnmounted(() => {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
position: relative;
|
position: relative;
|
||||||
background: var(--color-bg-2);
|
background: var(--color-bg-2);
|
||||||
.container{
|
|
||||||
|
.container {
|
||||||
display: flex;
|
display: flex;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.divider-container {
|
.divider-container {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
@@ -221,12 +191,10 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 布局变体
|
|
||||||
&.is-vertical {
|
&.is-vertical {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 基础组件
|
|
||||||
&__side {
|
&__side {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
@@ -235,6 +203,9 @@ onUnmounted(() => {
|
|||||||
background: var(--color-bg-1);
|
background: var(--color-bg-1);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
transition: transform 0.5s ease, width 0.5s ease;
|
transition: transform 0.5s ease, width 0.5s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__content {
|
||||||
padding: $padding;
|
padding: $padding;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -244,10 +215,10 @@ onUnmounted(() => {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
:deep(.arco-table-border .arco-table-container) {
|
:deep(.arco-table-border .arco-table-container) {
|
||||||
/* border-left: none;*/
|
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&__main {
|
&__main {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -259,15 +230,11 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.ca-split-panel__collapse-trigger-icon {
|
.ca-split-panel__collapse-trigger-icon {
|
||||||
// padding: 2px;
|
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
// position: relative;
|
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
box-shadow: 0px 0px 0px 1px var(--color-border-1);
|
box-shadow: 0px 0px 0px 1px var(--color-border-1);
|
||||||
// left: 0;
|
|
||||||
// transform: translate(-50%, -50%);
|
|
||||||
background-color: var(--color-bg-1);
|
background-color: var(--color-bg-1);
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@@ -279,7 +246,6 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 折叠触发器
|
|
||||||
&__collapse-trigger {
|
&__collapse-trigger {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@@ -289,12 +255,11 @@ onUnmounted(() => {
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
left: 50% !important;
|
left: 50%;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
z-index: 3;
|
z-index: 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 折叠状态
|
|
||||||
&.is-collapse {
|
&.is-collapse {
|
||||||
.ca-split-panel__side {
|
.ca-split-panel__side {
|
||||||
width: 0;
|
width: 0;
|
||||||
@@ -305,14 +270,12 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 移动端样式
|
|
||||||
&.is-mobile {
|
&.is-mobile {
|
||||||
.ca-split-panel__side {
|
.ca-split-panel__side {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background: var(--color-bg-1);
|
background: var(--color-bg-1);
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
padding: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.divider {
|
.divider {
|
||||||
@@ -325,10 +288,6 @@ onUnmounted(() => {
|
|||||||
z-index: 12;
|
z-index: 12;
|
||||||
transform: translateX(-100%);
|
transform: translateX(-100%);
|
||||||
|
|
||||||
&::before {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.is-collapse {
|
&.is-collapse {
|
||||||
left: 10px;
|
left: 10px;
|
||||||
right: auto;
|
right: auto;
|
||||||
@@ -340,18 +299,16 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 表格固定列适配
|
|
||||||
:deep(.arco-table-col-fixed-left),
|
:deep(.arco-table-col-fixed-left),
|
||||||
:deep(.arco-table-col-fixed-right) {
|
:deep(.arco-table-col-fixed-right) {
|
||||||
position: sticky; // 默认状态
|
position: sticky;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 移动端表格固定列适配
|
|
||||||
&.is-mobile {
|
&.is-mobile {
|
||||||
:deep(.arco-table-col-fixed-left),
|
:deep(.arco-table-col-fixed-left),
|
||||||
:deep(.arco-table-col-fixed-right) {
|
:deep(.arco-table-col-fixed-right) {
|
||||||
position: static; // 移动端状态
|
position: static;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user