Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
hello-uvue
提交
2a022b47
H
hello-uvue
项目概览
DCloud
/
hello-uvue
通知
350
Star
2
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
H
hello-uvue
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
2a022b47
编写于
1月 02, 2024
作者:
DCloud-WZF
💬
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor: 首页优化样式
上级
02343201
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
256 addition
and
63 deletion
+256
-63
components/uni-collapse-item/uni-collapse-item.vue
components/uni-collapse-item/uni-collapse-item.vue
+138
-0
components/uni-collapse-item/util.uts
components/uni-collapse-item/util.uts
+19
-0
components/uni-collapse/uni-collapse.vue
components/uni-collapse/uni-collapse.vue
+48
-0
pages/index.uvue
pages/index.uvue
+51
-63
未找到文件。
components/uni-collapse-item/uni-collapse-item.vue
0 → 100644
浏览文件 @
2a022b47
<
template
>
<view
class=
"uni-collapse-item"
>
<view
class=
"uni-collapse-item__title"
@
click=
"openCollapse(!is_open)"
>
<text
class=
"uni-collapse-item__title-text"
:class=
"
{'is-disabled':disabled,'open--active':is_open}">
{{
title
}}
</text>
<view
class=
"down_arrow"
:class=
"
{'down_arrow--active': is_open}">
</view>
</view>
<view
ref=
"boxRef"
class=
"uni-collapse-item__content"
>
<view
ref=
"contentRef"
class=
"uni-collapse-item__content-box"
>
<slot></slot>
</view>
</view>
</view>
</
template
>
<
script
lang=
"uts"
>
import
{
$dispatch
}
from
'
./util.uts
'
export
default
{
name
:
"
UniCollapseItem
"
,
props
:
{
// 列表标题
title
:
{
type
:
String
,
default
:
''
},
open
:
{
type
:
Boolean
,
default
:
false
},
disabled
:
{
type
:
Boolean
,
default
:
false
}
},
data
()
{
return
{
height
:
0
,
is_open
:
this
.
open
as
boolean
,
boxNode
:
null
as
Element
|
null
,
contentNode
:
null
as
Element
|
null
,
};
},
watch
:
{
open
(
value
:
boolean
)
{
// this.is_open = value
if
(
this
.
boxNode
!=
null
)
{
this
.
openCollapse
(
value
)
}
}
},
created
()
{
$dispatch
(
this
,
'
UniCollapse
'
,
'
init
'
,
this
)
},
mounted
()
{
this
.
boxNode
=
this
.
$refs
[
'
boxRef
'
]
as
Element
;
this
.
contentNode
=
this
.
$refs
[
'
contentRef
'
]
as
Element
;
// this.openCollapse(this.open)
},
methods
:
{
// 开启或关闭折叠面板
openCollapse
(
open
:
boolean
)
{
if
(
this
.
disabled
)
return
// 关闭其他已打开
$dispatch
(
this
,
'
UniCollapse
'
,
'
cloceAll
'
)
this
.
is_open
=
open
this
.
openOrClose
(
open
)
},
openOrClose
(
open
:
boolean
)
{
const
boxNode
=
this
.
boxNode
?.
style
!
;
const
contentNode
=
this
.
contentNode
?.
style
!
;
let
hide
=
open
?
'
flex
'
:
'
none
'
;
const
opacity
=
open
?
1
:
0
let
ani_transform
=
open
?
'
translateY(0)
'
:
'
translateY(-100%)
'
;
boxNode
.
setProperty
(
'
display
'
,
hide
);
this
.
$nextTick
(()
=>
{
contentNode
.
setProperty
(
'
transform
'
,
ani_transform
);
contentNode
.
setProperty
(
'
opacity
'
,
opacity
);
})
}
}
}
</
script
>
<
style
scoped
>
.uni-collapse-item
{
background-color
:
#fff
;
}
.uni-collapse-item__title
{
flex-direction
:
row
;
align-items
:
center
;
padding
:
12px
;
background-color
:
#fff
;
}
.down_arrow
{
width
:
8px
;
height
:
8px
;
transform
:
rotate
(
45deg
);
border-right
:
1px
#999
solid
;
border-bottom
:
1px
#999
solid
;
margin-top
:
-3px
;
transition-property
:
transform
;
transition-duration
:
0.2s
;
}
.down_arrow--active
{
transform
:
rotate
(
-135deg
);
margin-top
:
0px
;
}
.uni-collapse-item__title-text
{
flex
:
1
;
color
:
#000
;
font-size
:
14px
;
font-weight
:
400
;
}
.open--active
{
/* background-color: #f0f0f0; */
color
:
#bbb
;
}
.is-disabled
{
color
:
#999
;
}
.uni-collapse-item__content
{
display
:
none
;
position
:
relative
;
}
.uni-collapse-item__content-box
{
width
:
100%
;
/* transition-property: transform , opacity;
transition-duration: 0.2s; */
transform
:
translateY
(
-100%
);
opacity
:
0
;
}
</
style
>
components/uni-collapse-item/util.uts
0 → 100644
浏览文件 @
2a022b47
// 查找父组件实例
export function $dispatch(
context : ComponentPublicInstance,
componentName : string,
eventName : string,
...params : any[]
) {
let parent = context.$parent
let name = parent?.$options?.name
while (parent != null && (name == null || componentName != name)) {
parent = parent.$parent
if (parent != null) {
name = parent.$options.name
}
}
if (parent != null) {
parent.$callMethod(eventName, ...params)
}
}
components/uni-collapse/uni-collapse.vue
0 → 100644
浏览文件 @
2a022b47
<
template
>
<!-- 父组件暂时无用,后续子组件联动需要使用到父组件 -->
<view>
<slot></slot>
</view>
</
template
>
<
script
lang=
"uts"
>
export
default
{
name
:
"
UniCollapse
"
,
props
:
{
// 是否开启手风琴效果
accordion
:
{
type
:
Boolean
,
default
:
true
}
},
data
()
{
return
{
child_nodes
:
[]
as
Array
<
ComponentPublicInstance
>
};
},
methods
:
{
init
(
child
:
ComponentPublicInstance
)
{
this
.
child_nodes
.
push
(
child
)
},
// 关闭所有
cloceAll
()
{
// 开启手风琴效果才回关闭其他
if
(
this
.
accordion
&&
this
.
child_nodes
.
length
>
0
)
{
this
.
child_nodes
.
forEach
((
item
)
=>
{
const
is_open
=
item
.
$data
[
'
is_open
'
]
as
boolean
// TODO 暂时无法获取子组件上的属性和方法,暂时使用绕过方案
if
(
is_open
)
{
item
.
$data
[
'
is_open
'
]
=
false
item
.
$callMethod
(
'
openOrClose
'
,
false
)
}
})
}
}
}
}
</
script
>
<
style
>
</
style
>
pages/index.uvue
浏览文件 @
2a022b47
...
...
@@ -3,26 +3,18 @@
<scroll-view style="flex: 1">
<!-- #endif -->
<view class="uni-container">
<view class="uni-panel" v-for="(item, index) in list" :key="item.id">
<view class="uni-panel-h" @click="triggerCollapse(item, index)">
<text class="uni-panel-text">{{ item.name }}</text>
<!-- <text class="uni-panel-icon uni-icon" :class="item.open ? 'uni-panel-icon-on' : ''">{{item.open ? '' : ''}}</text> -->
</view>
<view class="uni-panel-c" v-if="item.open">
<view
class="uni-navigate-item"
v-for="page in item.pages"
:key="page.name"
@click="goDetailPage(item.id, page)">
<text
class="uni-navigate-text"
:class="page.enable != true ? 'text-disabled' : ''"
>{{ page.name }}</text
>
<!-- <text class="uni-navigate-icon uni-icon"></text> -->
</view>
</view>
<uni-collapse>
<template v-for="item in list" :key="item.id">
<uni-collapse-item :title="item.name" class="item">
<view class="uni-navigate-item" :hover-class="page.enable == false ? '' : 'is--active'"
v-for="(page, key) in item.pages" :key="key" @click="goDetailPage(item.id, page)">
<text class="uni-navigate-text"
:class="page.enable == false ? 'text-disabled' : ''">{{ page.name }}</text>
<view class="down_arrow"></view>
</view>
</uni-collapse-item>
</template>
</uni-collapse>
</view>
<!-- #ifdef APP -->
</scroll-view>
...
...
@@ -441,7 +433,7 @@
name: '嵌套组件通信',
url: 'nested-component-communication',
enable: true,
},{
},
{
name: '自定义组件中使用 class 定制另一个自定义组件根节点样式',
url: 'set-custom-child-component-root-node-class',
enable: true,
...
...
@@ -487,22 +479,18 @@
</script>
<style>
.arrow {
.item {
margin-bottom: 12px;
}
.down_arrow {
width: 8px;
height: 8px;
border-top: 2px solid #ccc;
border-left: 2px solid #ccc;
}
.arrow-right {
transform: rotate(135deg);
}
.arrow-up {
transform: rotate(45deg);
}
.arrow-down {
transform: rotate(-135deg);
}
border-right: 1px #999 solid;
border-bottom: 1px #999 solid;
margin-top: -3px;
transition-property: transform;
transition-duration: 0.2s;
}
</style>
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录