Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 805c47d

Browse files
feat: refactor
1 parent 25d43b3 commit 805c47d

File tree

5 files changed

+544
-296
lines changed

5 files changed

+544
-296
lines changed

‎src/App.vue‎

Lines changed: 157 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<template>
22
<div id="app">
3-
<Tree :tree-data="demeData"
3+
<Tree
4+
:tree-data="demeData"
45
expandedAll
56
show-checkbox
67
hasHalfelEction
@@ -35,6 +36,7 @@ export default {
3536
},
3637
data () {
3738
return {
39+
visible: true,
3840
baseData: [],
3941
demeData: [
4042
{
@@ -48,7 +50,7 @@ export default {
4850
{
4951
name: "三级 1-1-1",
5052
id: "3",
51-
selected: true,
53+
checked: true,
5254
children: [
5355
{
5456
name: "四级 1-1-1-1",
@@ -128,10 +130,25 @@ export default {
128130
]
129131
}
130132
},
133+
watch: {
134+
visible: {
135+
handler: function(val) {
136+
if (!val) {
137+
this.genBaseData()
138+
} else {
139+
this.genBaseData()
140+
}
141+
}
142+
}
143+
},
131144
created () {
132145
this.genBaseData()
146+
console.log(this.baseData)
133147
},
134148
methods: {
149+
toggleVisible () {
150+
this.visible = !this.visible
151+
},
135152
genBaseData () {
136153
const start = Math.round(Math.random())
137154
const end = start + Math.round(Math.random() * 4)
@@ -173,16 +190,88 @@ export default {
173190
</style>
174191
<style lang="less">
175192
@transition-time : .2s;
193+
@primary-color: #409eff;
194+
@background-color-base: #F1F3F5;
195+
@normal-color: #1F2E4D;
196+
@unimportance-color: #b7beca;
197+
@border-radius-small : 3px;
198+
199+
.frame {
200+
// position: absolute;
201+
height: 300px;
202+
background: #eee;
203+
204+
}
176205
177206
.icon {
178207
display: inline-block;
179208
padding: 2px;
180209
font-size: 12px;
181-
background: #eee;
210+
//background: #eee;
182211
cursor: pointer;
183212
margin-right: 4px;
184213
}
185214
215+
.motion-common() {
216+
animation-duration: .3s;
217+
animation-fill-mode: both;
218+
}
219+
220+
.move-motion(@className, @keyframeName) {
221+
.make-motion(@className, @keyframeName);
222+
.@{className}-enter-active {
223+
animation-timing-function: ease-in-out;
224+
}
225+
.@{className}-leave-active {
226+
animation-timing-function: ease-in-out;
227+
}
228+
}
229+
230+
.make-motion(@className, @keyframeName) {
231+
.@{className}-enter-active {
232+
.motion-common();
233+
animation-play-state: paused;
234+
}
235+
.@{className}-leave-active {
236+
.motion-common();
237+
animation-play-state: paused;
238+
}
239+
.@{className}-enter-active {
240+
animation-name: ~"@{keyframeName}In";
241+
animation-play-state: running;
242+
}
243+
.@{className}-leave-active {
244+
animation-name: ~"@{keyframeName}Out";
245+
animation-play-state: running;
246+
}
247+
}
248+
249+
.move-motion(transition-drop, shTransitionDrop);
250+
251+
@keyframes shTransitionDropIn {
252+
0% {
253+
opacity: 0;
254+
transform: scaleY(0.8);
255+
}
256+
100% {
257+
opacity: 1;
258+
transform: scaleY(1);
259+
}
260+
}
261+
262+
@keyframes shTransitionDropOut {
263+
0% {
264+
opacity: 1;
265+
transform: scaleY(1);
266+
}
267+
100% {
268+
opacity: 0;
269+
transform: scaleY(0.8);
270+
}
271+
}
272+
273+
274+
186275
.rotate-motion(@className, @deg) {
187276
.transform {
188277
transform-origin: center;
@@ -222,4 +311,69 @@ export default {
222311
color: #fff;
223312
}
224313
}
314+
315+
.vue-tree {
316+
user-select: none;
317+
position: relative;
318+
.drop-indicator {
319+
position: absolute;
320+
left: 0;
321+
right: 0;
322+
height: 1px;
323+
background-color: @primary-color;
324+
}
325+
.child-node {
326+
padding-left: 22px;
327+
line-height: 28px;
328+
cursor: pointer;
329+
.node-content {
330+
width: 100%;
331+
position: relative;
332+
display: inline-block;
333+
padding-left: 22px;
334+
.icon {
335+
position: absolute;
336+
display: inline-block;
337+
left: 0px;
338+
&-expand {
339+
color: @normal-color;
340+
}
341+
&-unexpand {
342+
color: @unimportance-color;
343+
}
344+
}
345+
.inner-wrap {
346+
padding-left: 2px;
347+
display: flex;
348+
align-items: center;
349+
border-radius: @border-radius-small;
350+
border: 1px solid transparent;
351+
}
352+
.drop-wrap {
353+
border-color: @primary-color;
354+
}
355+
.drop-inner {
356+
border-bottom: 1px solid @primary-color;
357+
}
358+
}
359+
.active-li {
360+
.inner-wrap {
361+
background: @background-color-base;
362+
}
363+
}
364+
.inset {
365+
cursor: move;
366+
}
367+
.disabled {
368+
cursor: no-drop;
369+
}
370+
}
371+
.add-node {
372+
cursor: pointer;
373+
}
374+
.is-drop-inner > .node-content > .inner-wrap > .node-name {
375+
background-color: @primary-color;
376+
color: #fff;
377+
}
378+
}
225379
</style>

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /