This commit is contained in:
halo
2022-01-05 12:42:50 +08:00
92 changed files with 2399 additions and 794 deletions

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
###### 回到顶部组件的默认样式,<code>lay-backtop</code> 会自动寻找最近的可滚动祖先元素,也可以使用 `target` 属性指定触发滚动事件的元素,通过滑动来查看页面右下角的正方形按钮。

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 主色调
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 普通容器
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,9 @@
::: anchor
:::
::: title 基础使用
:::
::: demo
<template>

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,9 @@
::: anchor
:::
::: title 基础使用
:::
::: demo
<template>

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::
@@ -9,9 +12,13 @@
<lay-menu-item title="用户" id="2"></lay-menu-item>
<lay-menu-item title="角色" id="3"></lay-menu-item>
<lay-menu-item title="目录" id="7">
<lay-menu-child-item title="菜单一" id="4"></lay-menu-child-item>
<lay-menu-child-item title="菜单二" id="5"></lay-menu-child-item>
<lay-menu-child-item title="菜单三" id="6"></lay-menu-child-item>
<lay-menu-item title="菜单一" id="8"></lay-menu-item>
<lay-menu-item title="菜单二" id="9"></lay-menu-item>
<lay-menu-item title="菜单三" id="10">
<lay-menu-item title="菜单一" id="11"></lay-menu-item>
<lay-menu-item title="菜单二" id="12"></lay-menu-item>
<lay-menu-item title="菜单三" id="13"></lay-menu-item>
</lay-menu-item>
</lay-menu-item>
</lay-menu>
</template>
@@ -49,9 +56,13 @@ export default {
<lay-menu-item title="用户" id="2"></lay-menu-item>
<lay-menu-item title="角色" id="3"></lay-menu-item>
<lay-menu-item title="目录" id="7">
<lay-menu-child-item title="菜单一" id="4"></lay-menu-child-item>
<lay-menu-child-item title="菜单二" id="5"></lay-menu-child-item>
<lay-menu-child-item title="菜单三" id="6"></lay-menu-child-item>
<lay-menu-item title="菜单一" id="8"></lay-menu-item>
<lay-menu-item title="菜单二" id="9"></lay-menu-item>
<lay-menu-item title="菜单三" id="10">
<lay-menu-item title="菜单一" id="11"></lay-menu-item>
<lay-menu-item title="菜单二" id="12"></lay-menu-item>
<lay-menu-item title="菜单三" id="13"></lay-menu-item>
</lay-menu-item>
</lay-menu-item>
</lay-menu>
</template>

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基本使用
:::
@@ -5,9 +8,9 @@
<template>
<lay-button @click="changeVisible1" type="primary">基础使用</lay-button>
<lay-modal title="基础使用" v-model="visible1">
<lay-layer title="基础使用" v-model="visible1">
内容
</lay-modal>
</lay-layer>
</template>
<script>
@@ -38,9 +41,9 @@ export default {
<template>
<lay-button @click="changeVisible2" type="primary">允许拖动</lay-button>
<lay-modal title="允许拖动" v-model="visible2">
<lay-layer title="允许拖动" v-model="visible2">
内容
</lay-modal>
</lay-layer>
</template>
<script>
@@ -71,9 +74,9 @@ export default {
<template>
<lay-button @click="changeVisible3" type="primary">放大缩小</lay-button>
<lay-modal title="放大缩小" v-model="visible3" move="true" maxmin="true">
<lay-layer title="放大缩小" v-model="visible3" move="true" maxmin="true">
内容
</lay-modal>
</lay-layer>
</template>
<script>
@@ -104,9 +107,9 @@ export default {
<template>
<lay-button @click="changeVisible4" type="primary">指定位置</lay-button>
<lay-modal title="指定位置" v-model="visible4" move="true" :offset="['100px','100px']">
<lay-layer title="指定位置" v-model="visible4" move="true" :offset="['100px','100px']">
内容
</lay-modal>
</lay-layer>
</template>
<script>
@@ -137,9 +140,9 @@ export default {
<template>
<lay-button @click="changeVisible8" type="primary">尺寸拉伸</lay-button>
<lay-modal title="拉伸尺寸" resize="true" v-model="visible8" move="true">
<lay-layer title="拉伸尺寸" resize="true" v-model="visible8" move="true">
内容
</lay-modal>
</lay-layer>
</template>
<script>
@@ -170,7 +173,7 @@ export default {
<template>
<lay-button @click="changeVisible5" type="primary">远程窗体</lay-button>
<lay-modal title="加载 Iframe 内容" width="500px" height="400px" maxmin="true" v-model="visible5" move="true" :type="type5" content="http://www.pearadmin.com"></lay-modal>
<lay-layer title="加载 Iframe 内容" width="500px" height="400px" maxmin="true" v-model="visible5" move="true" :type="type5" content="http://www.pearadmin.com"></lay-layer>
</template>
<script>
@@ -203,9 +206,9 @@ export default {
<template>
<lay-button @click="changeVisible6" type="primary">定义操作</lay-button>
<lay-modal title="定义操作" v-model="visible6" move="true" :btn="btn6">
<lay-layer title="定义操作" v-model="visible6" move="true" :btn="btn6">
内容
</lay-modal>
</lay-layer>
</template>
<script>
@@ -241,9 +244,9 @@ export default {
<template>
<lay-button @click="changeVisible7" type="primary">开启遮盖</lay-button>
<lay-modal title="开启遮盖" move="true" shade="false" v-model="visible7">
<lay-layer title="开启遮盖" move="true" shade="false" v-model="visible7">
内容
</lay-modal>
</lay-layer>
</template>
<script>
@@ -316,7 +319,7 @@ export default {
::: table
| 备注 | 描述 | 默认值 |
| --------------- | ------------- | -------------------------- |
| --------------- | ------------- | --------------------------|
| title | 标题 | -- |
| move | 允许拖拽 | `false` |
| maxmin | 最小化 最大化 | `false` |
@@ -326,6 +329,7 @@ export default {
| content | 内容 | -- |
| shade | 开启遮盖 | -- |
| shadeClose | 遮盖点击关闭 | -- |
| shadeOpacity | 遮盖层透明度 | `0.1` |
| zIndex | 自定义层级 | -- |
| type | 类型 | `1: component` `2: iframe` |
| closeBtn | 显示关闭 | true |
@@ -333,6 +337,8 @@ export default {
| btnAlign | 按钮布局 | `l` `r` `c` |
| anim | 入场动画 | `0` `-` `6` |
| isOutAnim | 关闭动画 | `true` `false` |
| success | 显示回调 | -- |
| end | 关闭回调 | -- |
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -0,0 +1,112 @@
::: anchor
:::
::: title 基础使用
:::
::: demo
<template>
<div>
<div style="margin-bottom: 10px">
<lay-switch v-model="loading" active-text="加载" inactive-text="关闭"></lay-switch>
</div>
<lay-skeleton :rows="4" :loading="loading" animated>
<p style="margin-bottom: 18px">1 layui-vue , 基 于 vue 3.0 的 桌 面 端 组 件 库 , layui 的 另 一 种 呈 现 方 式</p>
<p style="margin-bottom: 18px">2 layui-vue , 基 于 vue 3.0 的 桌 面 端 组 件 库 , layui 的 另 一 种 呈 现 方 式</p>
<p style="margin-bottom: 18px">3 layui-vue , 基 于 vue 3.0 的 桌 面 端 组 件 库 , layui 的 另 一 种 呈 现 方 式</p>
<p style="margin-bottom: 18px">4 layui-vue , 基 于 vue 3.0 的 桌 面 端 组 件 库 , layui 的 另 一 种 呈 现 方 式</p>
</lay-skeleton>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const loading = ref(true);
return {
loading,
}
}
}
</script>
:::
::: title 图片
:::
::: demo
<template>
<div>
<div style="margin-bottom: 10px">
<lay-switch v-model="loading" active-text="加载" inactive-text="关闭"></lay-switch>
</div>
<lay-skeleton :loading="loading" animated>
<template #skeleton>
<lay-skeleton-item type="image"/>
<lay-skeleton-item type="p" style="width: 240px"/>
</template>
<div class="img-content">
<img src="https://portrait.gitee.com/uploads/avatars/user/2813/8441097_shaynas_1610801433.png" />
<p style="margin-top: 18px">layui-vue 发展史....</p>
</div>
</lay-skeleton>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const loading = ref(true);
return {
loading,
}
}
}
</script>
<style>
.img-content {
width: 240px;
height: 240px;
}
</style>
:::
::: title 骨架屏属性
:::
::: table
| 属性 | 描述 | 可选值 |
| ----- | ---- | ------ |
| loading | 是否显示 | `true` `false` |
| rows | 显示行数 | -- |
| animated | 是否动画 | `true` `false` |
| type | 展示类型 | `p` `image` |
:::
::: title 骨架屏插槽
:::
::: table
| 插槽 | 描述 | 可选值 |
| ------ | -------- | ------ |
| default| 默认插槽 | -- |
| skeleton | 自定义插槽 | -- |
:::
::: comment
:::

View File

@@ -1,95 +1,95 @@
::: title 横向
:::
::: demo
<template>
<lay-slider v-model="value1" :disabled="false"></lay-slider>
</template>
<script>
import { ref } from 'vue'
export default {
setup() {
const value1 = ref(50)
return {
value1
}
}
}
</script>
:::
::: title 纵向
:::
::: demo
<template>
<lay-slider v-model="value2" :vertical="true" :disabled="true"></lay-slider>
</template>
<script>
import { ref } from 'vue'
export default {
setup() {
const value2 = ref(10)
return {
value2
}
}
}
</script>
:::
::: title 区间
:::
::: demo
<template>
<lay-slider v-model="value3" :range="true"></lay-slider>
</template>
<script>
import { ref } from 'vue'
export default {
setup() {
const value3 = ref([20,50])
return {
value3
}
}
}
</script>
:::
::: title 纵向区间
:::
::: demo
<template>
<lay-slider v-model:verticalrange="value4" :range="true" :vertical="true"></lay-slider>
</template>
<script>
import { ref } from 'vue'
export default {
setup() {
const value4 = ref([23,56])
return {
value4
}
}
}
</script>
:::
::: comment
:::
::: title 横向
:::
::: demo
<template>
<lay-slider v-model="value1" :disabled="false"></lay-slider>
</template>
<script>
import { ref } from 'vue'
export default {
setup() {
const value1 = ref(50)
return {
value1
}
}
}
</script>
:::
::: title 纵向
:::
::: demo
<template>
<lay-slider v-model="value2" :vertical="true" :disabled="true"></lay-slider>
</template>
<script>
import { ref } from 'vue'
export default {
setup() {
const value2 = ref(10)
return {
value2
}
}
}
</script>
:::
::: title 区间
:::
::: demo
<template>
<lay-slider v-model="value3" :range="true"></lay-slider>
</template>
<script>
import { ref } from 'vue'
export default {
setup() {
const value3 = ref([20,50])
return {
value3
}
}
}
</script>
:::
::: title 纵向区间
:::
::: demo
<template>
<lay-slider v-model:verticalrange="value4" :range="true" :vertical="true"></lay-slider>
</template>
<script>
import { ref } from 'vue'
export default {
setup() {
const value4 = ref([23,56])
return {
value4
}
}
}
</script>
:::
::: comment
:::

View File

@@ -0,0 +1,384 @@
::: anchor
:::
::: title 基础使用
:::
::: demo
<template>
<div>
<lay-step :active="active">
<lay-step-item></lay-step-item>
<lay-step-item></lay-step-item>
<lay-step-item></lay-step-item>
<lay-step-item></lay-step-item>
</lay-step>
<lay-button size="xs" @click="nexts">下一步</lay-button>
<lay-button size="xs" @click="previous">上一步</lay-button>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const loading = ref(true);
const active = ref(-1);
const nexts = () => {
if (active.value++ >=3) active.value = 0
};
const previous = () => {
if (active.value-- ===0) active.value = 0
};
return {
loading,
active
}
}
}
</script>
:::
::: title 带标题带描述
:::
::: demo
<template>
<div>
<lay-step :active="active">
<lay-step-item title="First" content="First step"></lay-step-item>
<lay-step-item title="Second" content="Second step"></lay-step-item>
<lay-step-item title="Third" content="Third step"></lay-step-item>
<lay-step-item title="Fourth" content="Fourth step"></lay-step-item>
</lay-step>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const loading = ref(true);
const active = ref(-1);
const nexts = () => {
if (active.value++ >=3) active.value = 0
};
const previous = () => {
if (active.value-- ===0) active.value = 0
};
return {
loading,
active
}
}
}
</script>
:::
::: title 设置当前选中状态
:::
::: demo
<template>
<div>
<lay-step :active="active" current-status="primary">
<lay-step-item title="First" content="First step"></lay-step-item>
<lay-step-item title="Second" content="Second step"></lay-step-item>
<lay-step-item title="Third" content="Third step"></lay-step-item>
</lay-step>
<lay-button size="xs" @click="next">下一步</lay-button>
<lay-button size="xs" @click="previous">上一步</lay-button>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const loading = ref(true);
const active = ref(-1);
const next = () => {
if (active.value++ >=2) active.value = 0
};
const previous = () => {
if (active.value-- ===0) active.value = 0
};
return {
loading,
active
}
}
}
</script>
:::
::: title 设置第几步状态
:::
这里设置`status` 会覆盖掉`current-status`
::: demo
<template>
<div>
<lay-step :active="active" current-status="warning">
<lay-step-item title="First" content="First step"></lay-step-item>
<lay-step-item status="fail" title="Second" content="Second step"></lay-step-item>
<lay-step-item title="Third" content="Third step"></lay-step-item>
<lay-step-item title="Fourth" content="Fourth step"></lay-step-item>
</lay-step>
<lay-button size="xs" @click="nexts">下一步</lay-button>
<lay-button size="xs" @click="previous">上一步</lay-button>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const loading = ref(true);
const active = ref(-1);
const nexts = () => {
if (active.value++ >=3) active.value = 0
};
const previous = () => {
if (active.value-- ===0) active.value = 0
};
return {
loading,
active
}
}
}
</script>
:::
::: title 自定义宽度
:::
::: demo
<template>
<div>
<lay-step :active="active" space="200px">
<lay-step-item title="First" content="First step"></lay-step-item>
<lay-step-item title="Second" content="Second step"></lay-step-item>
<lay-step-item title="Third" content="Third step"></lay-step-item>
</lay-step>
<lay-button size="xs" @click="next">下一步</lay-button>
<lay-button size="xs" @click="previous">上一步</lay-button>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const loading = ref(true);
const active = ref(-1);
const next = () => {
if (active.value++ >=2) active.value = 0
};
const previous = () => {
if (active.value-- ===0) active.value = 0
};
return {
loading,
active
}
}
}
</script>
:::
::: title 自定义图标
:::
::: demo
<template>
<div>
<lay-step :active="active">
<lay-step-item title="First" content="First step" icon="layui-icon-release"></lay-step-item>
<lay-step-item title="Second" content="Second step" icon="layui-icon-tree"></lay-step-item>
<lay-step-item title="Third" content="Third step" icon="layui-icon-share"></lay-step-item>
</lay-step>
<lay-button size="xs" @click="next">下一步</lay-button>
<lay-button size="xs" @click="previous">上一步</lay-button>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const loading = ref(true);
const active = ref(-1);
const next = () => {
if (active.value++ >=2) active.value = 0
};
const previous = () => {
if (active.value-- ===0) active.value = 0
};
return {
loading,
active
}
}
}
</script>
:::
::: title 居中
:::
::: demo
<template>
<div>
<lay-step :active="active" center>
<lay-step-item title="First" content="First step">
<template #pace>
<lay-icon type="layui-icon-ok"></lay-icon>
</template>
</lay-step-item>
<lay-step-item title="Second" content="Second step"></lay-step-item>
<lay-step-item title="Third" content="Third step"></lay-step-item>
</lay-step>
<lay-button size="xs" @click="next">下一步</lay-button>
<lay-button size="xs" @click="previous">上一步</lay-button>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const loading = ref(true);
const active = ref(-1);
const next = () => {
if (active.value++ >=2) active.value = 0
};
const previous = () => {
if (active.value-- ===0) active.value = 0
};
return {
loading,
active
}
}
}
</script>
:::
::: title 垂直
:::
::: demo
<template>
<div style="height: 300px">
<lay-step :active="active" direction="vertical">
<lay-step-item title="First" content="First step">
<template #pace>
<lay-icon type="layui-icon-ok"></lay-icon>
</template>
</lay-step-item>
<lay-step-item title="Second" content="Second step"></lay-step-item>
<lay-step-item title="Third" content="Third step"></lay-step-item>
</lay-step>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const loading = ref(true);
const active = ref(-1);
const next = () => {
if (active.value++ >=2) active.value = 0
};
const previous = () => {
if (active.value-- ===0) active.value = 0
};
return {
loading,
active
}
}
}
</script>
:::
::: title step步骤条属性
:::
::: table
| 属性 | 描述 | 类型 |可选值 | 默认值|
| ----- | ---- | ------ | ---| ---|
| active | 第几步 | number |-| 0 |
| center | 居中布局 | boolean | `true` `false` | `false` |
| direction | 垂直/平行布局 | string |`horizontal` `vertical` | `horizontal` |
| space | 宽度 | string | - | `auto` |
| currentStatus | 当前状态显示 | string | `primary` `success` `fail` `warning` | `primary` |
:::
::: title stepItem步骤条属性
:::
::: table
| 属性 | 描述 | 类型 |可选值 | 默认值|
| ----- | ---- | ------ | ---| ---|
| title| 标题 | string | - | - |
| content | 内容描述 | string | - | -|
| icon | 图标 | string | - | -|
| status | 状态 | string | `primary` `success` `fail` `warning` | `primary`|
:::
::: title stepItem步骤条slot
:::
::: table
| 属性 | 描述 |
| ----- | ---- |
| pace | 圆圈内容自定义 |
| default | 内容区域自定义 |
:::
::: comment
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::
@@ -72,7 +75,40 @@ export default {
:::
::: title timeline-item attributes
::: title 节点插槽
:::
::: demo
<template>
<lay-timeline>
<lay-timeline-item title="2021年layui vue 里程碑版本 1.0 发布" simple></lay-timeline-item>
<lay-timeline-item title="2017年layui 里程碑版本 2.0 发布" simple></lay-timeline-item>
<lay-timeline-item title="2016年layui 首个版本发布" simple></lay-timeline-item>
<lay-timeline-item title="2015年layui 孵化" simple>
<template #dot>
<lay-icon type="layui-icon-face-smile" color="red"></lay-icon>
</template>
</lay-timeline-item>
</lay-timeline>
</template>
<script>
import { ref } from 'vue'
export default {
setup() {
return {
}
}
}
</script>
:::
::: title Timeline Item 属性
:::
::: table
@@ -84,5 +120,16 @@ export default {
:::
::: title Timeline Item 属性
:::
::: table
| | | |
| ------ | -------- | --- |
| dot | 节点 | -- |
:::
::: comment
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: title 基础使用
:::

View File

@@ -1,3 +1,6 @@
::: anchor
:::
::: demo
<template>

View File

@@ -11,7 +11,33 @@
<template>
<lay-timeline>
<lay-timeline-item title="0.3.x">
<ul>
<ul>
<a name="0-3-3"> </a>
<li>
<h3>0.3.3 <span class="layui-badge-rim">2022-01-03</span></h3>
<ul>
<li>[新增] setup 步骤条组件。</li>
<li>[新增] timeline-item 时间线组件 dot 插槽, 支持自定义节点内容。</li>
<li>[修复] menu 组件 layui-nav-more 切换动画。</li>
</ul>
</li>
</ul>
<ul>
<a name="0-3-2"> </a>
<li>
<h3>0.3.2 <span class="layui-badge-rim">2022-01-03</span></h3>
<ul>
<li>[新增] skeleton 骨架屏组件。</li>
<li>[重构] tooltip 内部 popper 组件,支持移动到 tooltip 内部。</li>
<li>[增强] layer 部分函数 msg open confirm 等, content 支持 VNode 类型。</li>
<li>[增强] menu 菜单组件, 初步支持无限级嵌套。</li>
<li>[修复] layer.close layer.closeAll 函数无法触发 OutAnim 过度动画问题。</li>
<li>[废弃] menu-child-item 组件, 使用 menu-item 替代。</li>
<li>[升级] layer-vue 1.2.4。</li>
</ul>
</li>
</ul>
<ul>
<a name="0-3-1"> </a>
<li>
<h3>0.3.1 <span class="layui-badge-rim">2021-12-28</span></h3>

View File

@@ -3,20 +3,17 @@
<lay-card>
<lay-row>
<lay-col md="1">
<lay-col md="2">
<lay-avatar src="https://portrait.gitee.com/uploads/avatars/user/1611/4835367_Jmysy_1578975358.png"></lay-avatar>
</lay-col>
<lay-col md="2">
<lay-col md="3">
就眠仪式
</lay-col>
<lay-col md="6">
<lay-col md="8">
焦点layui-vue
</lay-col>
<lay-col md="4">
地点:China Beijing
</lay-col>
<lay-col md="5">
生态Pear Admin
地点:中国 北京
</lay-col>
<lay-col md="6">
其他Gitee Github
@@ -25,20 +22,17 @@
</lay-card>
<lay-card>
<lay-row>
<lay-col md="1">
<lay-col md="2">
<lay-avatar src="https://portrait.gitee.com/uploads/avatars/user/1755/5267877_jobin_jia_1608578025.png"></lay-avatar>
</lay-col>
<lay-col md="2">
<lay-col md="3">
落小梅
</lay-col>
<lay-col md="6">
<lay-col md="8">
焦点tree table
</lay-col>
<lay-col md="4">
地点:China Hunan
</lay-col>
<lay-col md="5">
生态Pear Admin
地点:中国 湖南
</lay-col>
<lay-col md="6">
其他Gitee Github
@@ -48,20 +42,17 @@
<lay-card>
<lay-row>
<lay-col md="1">
<lay-col md="2">
<lay-avatar src="https://portrait.gitee.com/uploads/avatars/user/702/2106738_wanglin300_1639442830.png"></lay-avatar>
</lay-col>
<lay-col md="2">
<lay-col md="3">
halo
</lay-col>
<lay-col md="6">
<lay-col md="8">
焦点slider
</lay-col>
<lay-col md="4">
地点:China Beijing
</lay-col>
<lay-col md="5">
生态:暂无
地点:中国 北京
</lay-col>
<lay-col md="6">
其他Gitee Github
@@ -71,43 +62,37 @@
<lay-card>
<lay-row>
<lay-col md="1">
<lay-col md="2">
<lay-avatar src="https://portrait.gitee.com/uploads/avatars/user/1871/5614379_xumisky_1607057214.png"></lay-avatar>
</lay-col>
<lay-col md="2">
<lay-col md="3">
须弥
</lay-col>
<lay-col md="6">
<lay-col md="8">
焦点layui-vue
</lay-col>
<lay-col md="4">
地点:未知
</lay-col>
<lay-col md="5">
生态:暂无
地点:中国 广州
</lay-col>
<lay-col md="6">
其他:Gitee Github
其他:<a href="https://gitee.com/xumisky">Gitee</a> <a href="https://github.com/xumiSky">Github</a>
</lay-col>
</lay-row>
</lay-card>
<lay-card>
<lay-row>
<lay-col md="1">
<lay-col md="2">
<lay-avatar src="https://portrait.gitee.com/uploads/avatars/user/2469/7407590_wcg666_1640528494.png"></lay-avatar>
</lay-col>
<lay-col md="2">
<lay-col md="3">
Sight
</lay-col>
<lay-col md="6">
<lay-col md="8">
焦点count-up backtop
</lay-col>
<lay-col md="4">
地点:未知
</lay-col>
<lay-col md="5">
生态:暂无
地点:中国 未知
</lay-col>
<lay-col md="6">
其他Gitee Github
@@ -117,20 +102,37 @@
<lay-card>
<lay-row>
<lay-col md="1">
<lay-col md="2">
<lay-avatar src="https://portrait.gitee.com/uploads/avatars/user/2596/7789823_finalsummer_1613993823.png"></lay-avatar>
</lay-col>
<lay-col md="2">
<lay-col md="3">
finalsummer
</lay-col>
<lay-col md="6">
<lay-col md="8">
焦点layer-vue
</lay-col>
<lay-col md="4">
地点:未知
地点:中国 未知
</lay-col>
<lay-col md="5">
生态:暂无
<lay-col md="6">
其他Gitee Github
</lay-col>
</lay-row>
</lay-card>
<lay-card>
<lay-row>
<lay-col md="2">
<lay-avatar src="http://mms0.baidu.com/it/u=1690972933,1482111264&fm=253&app=138&f=JPEG&fmt=auto&q=75?w=500&h=500"></lay-avatar>
</lay-col>
<lay-col md="3">
莫名点
</lay-col>
<lay-col md="8">
焦点skeleton setup
</lay-col>
<lay-col md="4">
地点:中国 未知
</lay-col>
<lay-col md="6">
其他Gitee Github

View File

@@ -0,0 +1,281 @@
<template>
<aside :class="classAside">
<div class="lay-aside-top">
<lay-button
type="primary"
size="xs"
:class="classAsideBtn"
@click="handlerBtnClick()"
>
<lay-icon :type="iconType" size="40"> </lay-icon>
</lay-button>
</div>
<lay-scroll
class="layui-side-scroll-bar layui-side-scroll::-webkit-scrollbar"
>
<ul>
<li
v-for="(anchor, index) in anchorList"
:key="index"
class="lay-aside-list"
:class="{ active: index === activeIndex }"
@click.prevent="handlerListItemClick(index, anchor)"
>
<a
:href="`#${anchor}`"
class="lay-aside-link"
:class="{ active: index === activeIndex }"
>{{ anchor }}</a
>
</li>
</ul>
</lay-scroll>
</aside>
</template>
<script setup lang="ts">
import { computed, onMounted, ref, shallowRef, watch } from "vue";
const props = defineProps<{
anchors?: Array<string> | string;
currIndex: number;
show: boolean;
}>();
let activeIndex = ref<number>(0);
const show = ref<boolean>(props.show);
const iconType = ref<string>("layui-icon-right");
const anchors: string | string[] | undefined = props.anchors;
/**滚动条高度 */
const scrollTop = ref<number>(0);
/**要监听的滚动元素 */
const scrollRefEl = shallowRef<HTMLElement | undefined>(undefined);
/**折叠动画 */
let enableAnimation = false;
const anchorList = computed(() => {
return typeof anchors === "string" ? anchors?.split(",") : anchors;
});
const classAside = computed(() => [
"lay-aside",
{ "lay-aside-animation": enableAnimation },
{ "lay-aside-collapse": !show.value },
]);
const classAsideBtn = computed(() => {
let classBtn = [];
if (enableAnimation) {
classBtn = [
"lay-aside-collapse-btn",
"lay-aside-animation",
{ "lay-aside-collapse-btn-collapse": !show.value }
];
} else {
classBtn = [
"lay-aside-collapse-btn",
{ "lay-aside-collapse-btn-collapse": !show.value }
];
enableAnimation = true;
}
return classBtn;
});
const handlerBtnClick = () => {
show.value = !show.value;
}
const handlerListItemClick = (index: number, id: string) => {
activeIndex.value = index;
scrollToTitle(id);
}
/**锚点标签跟随滚动高亮 */
const handlerScroll = () => {
// 距离顶部 90 改变 activeIndex
scrollTop.value = getScrollTop(scrollRefEl.value) + 90;
anchorList.value?.forEach((item, index) => {
const elOffsetTop = document.getElementById(item)?.offsetTop;
if (elOffsetTop) {
if (index === 0 && scrollTop.value < elOffsetTop) {
activeIndex.value = 0;
} else if (scrollTop.value >= elOffsetTop) {
activeIndex.value = index;
}
}
});
}
const handlerCollapse = () => {
iconType.value = show.value ? "layui-icon-right" : "layui-icon-left";
// @ts-ignore
scrollRefEl.value!.firstElementChild!.style.marginRight = show.value
? "180px"
: "0px";
}
watch(show, () => {
handlerCollapse();
});
onMounted(() => {
// @ts-ignore TODO 封装 hooks
scrollRefEl.value = document.querySelector(".layui-body");
if (!scrollRefEl.value) {
throw new Error(`scroll element is not existed: ".layui-body"`);
}
scrollRefEl.value.scrollTop = 0;
scrollRefEl.value?.addEventListener("scroll", throttle(handlerScroll, 500));
// 如果已折叠,关闭组件初始渲染时的动画,然后自动开启
// @ts-ignore
show.value = scrollRefEl.value!.firstElementChild!.style.marginRight !== "0px";
enableAnimation = show.value;
});
/**获取滚动高度 */
const getScrollTop = (el: HTMLElement | undefined): number => {
return el
? el.scrollTop
: window.pageYOffset ||
document.documentElement.scrollTop ||
document.body.scrollTop ||
0;
}
/**平滑滚动 */
const scrollToTitle = (id: string): void => {
document.getElementById(id)?.scrollIntoView({
behavior: "smooth",
block: "start",
inline: "nearest",
});
}
const throttle = (func: Function, wait: number) => {
var timer: any = null;
return (...args: any) => {
if (!timer) {
timer = setTimeout(() => {
timer = null;
func.apply(this, args);
}, wait);
}
};
};
</script>
<style lang="less" scoped>
.layui-side-scroll-bar {
overflow-y: scroll;
max-width: 156px;
}
.layui-side-scroll::-webkit-scrollbar {
width: 0;
}
.lay-aside {
position: fixed;
top: 65px;
right: 17px;
box-sizing: border-box;
width: 180px;
padding: 0 25px;
background-color: #ffffff;
border-left: 1px solid rgb(229 230 235);
transition: none;
-webkit-transition: none;
height: calc(100% - 60px);
}
.lay-aside-collapse {
right: -180px;
opacity: 0.7;
}
.lay-aside-top {
height: 29px;
}
.lay-aside-link {
display: inline-block;
padding: 1px 4px;
color: grey;
font-size: 13px;
line-height: 2;
max-width: 140px;
min-width: 68px;
text-decoration: none;
background-color: transparent;
border-radius: 2px;
cursor: pointer;
transition: all 0.1s cubic-bezier(0, 0, 1, 1);
}
.lay-aside-list {
position: relative;
margin: 5px 0px 0px 4px;
padding-left: 2px;
max-width: 140px;
border-radius: 2px;
list-style: none;
&:hover {
background-color: #f6f6f6 !important;
color: #5fb878;
}
&:active {
background-color: #f6f6f6 !important;
color: #89d89f;
}
&.active {
background-color: #f6f6f6 !important;
* {
color: #5fb878 !important;
}
}
}
.lay-aside-collapse-btn {
position: fixed;
right: 197px;
top: calc(50% - 20px);
display: flex;
align-items: center;
justify-content: center;
width: 18px;
height: 40px;
background-color: #f6f6f6;
border-radius: 0px;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
border: rgb(229 230 235) 1px solid;
border-right: none;
box-shadow: 2px 0 8px 0 rgb(29 35 41 / 5%);
transition: none;
-webkit-transition: none;
&:hover {
background-color: #e2e2e2;
}
}
.lay-aside-collapse-btn-collapse {
right: 0px;
}
.lay-aside-animation {
transition: right 200ms;
-webkit-transition: right 200ms;
}
@media screen and (max-width: 768px) {
.lay-aside {
width: 100px !important;
}
.lay-aside-collapse-btn {
right: 98px;
}
.lay-aside-collapse-btn-collapse {
right: 15px;
}
.lay-aside-list {
max-width: 68px;
}
.layui-side-scroll-bar {
max-width: 68px;
}
}
</style>

View File

@@ -5,9 +5,9 @@
</template>
<style>
.lay-table-box table {
width: 100%; /*表格宽度*/
border-collapse: collapse; /*使用单一线条的边框*/
empty-cells: show; /*单元格无内容依旧绘制边框*/
width: 100%;
border-collapse: collapse;
empty-cells: show;
border-right: 1px solid whitesmoke;
border-left: 1px solid whitesmoke;
border-radius: 4px;
@@ -18,8 +18,8 @@
.lay-table-box table th,
.lay-table-box table td {
font-size: 14px;
width: 160px;
max-width: 160px;
width: 50px;
max-width: 180px;
height: 50px; /*统一每一行的默认高度*/
border-top: 1px solid whitesmoke; /*内部边框样式*/
padding: 0 10px; /*内边距*/

View File

@@ -1,52 +1,52 @@
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
import { createApp } from './main'
import { renderToString } from '@vue/server-renderer'
import { createApp } from "./main";
import { renderToString } from "@vue/server-renderer";
export async function render(url, manifest): Promise<string[]> {
const { app, router } = createApp()
const { app, router } = createApp();
// set the router to the desired URL before rendering
router.push(url)
await router.isReady()
router.push(url);
await router.isReady();
// passing SSR context object which will be available via useSSRContext()
// @vitejs/plugin-vue injects code into a component's setup() that registers
// @vitejs/plugin-vue injects code into a component's step() that registers
// itself on ctx.modules. After the render, ctx.modules would contain all the
// components that have been instantiated during this render call.
const ctx = {}
const html = await renderToString(app, ctx)
const ctx = {};
const html = await renderToString(app, ctx);
// the SSR manifest generated by Vite contains module -> chunk/asset mapping
// which we can then use to determine what files need to be preloaded for this
// request.
const preloadLinks = renderPreloadLinks(ctx.modules, manifest)
return [html, preloadLinks]
const preloadLinks = renderPreloadLinks(ctx.modules, manifest);
return [html, preloadLinks];
}
function renderPreloadLinks(modules, manifest) {
let links = ''
const seen = new Set()
let links = "";
const seen = new Set();
modules.forEach((id) => {
const files = manifest[id]
const files = manifest[id];
if (files) {
files.forEach((file) => {
if (!seen.has(file)) {
seen.add(file)
links += renderPreloadLink(file)
seen.add(file);
links += renderPreloadLink(file);
}
})
});
}
})
return links
});
return links;
}
function renderPreloadLink(file) {
if (file.endsWith('.js')) {
return `<link rel="modulepreload" crossorigin href="${file}">`
} else if (file.endsWith('.css')) {
return `<link rel="stylesheet" href="${file}">`
if (file.endsWith(".js")) {
return `<link rel="modulepreload" crossorigin href="${file}">`;
} else if (file.endsWith(".css")) {
return `<link rel="stylesheet" href="${file}">`;
} else {
return ''
return "";
}
}

View File

@@ -43,7 +43,7 @@
</a>
</li>
<li class="layui-nav-item">
<a href="javascript:void(0)"> 0.3.1 </a>
<a href="javascript:void(0)"> 0.3.2 </a>
</li>
</ul>
</lay-header>

View File

@@ -7,6 +7,7 @@ import LayCode from './components/LayCode.vue'
import LaySearch from './components/LaySearch.vue'
import LayTableBox from './components/LayTableBox.vue'
import LayComment from './components/LayComment.vue'
import LayAnchor from './components/LayAnchor.vue'
import './assets/css/index.css'
export function createApp(): {
@@ -23,6 +24,7 @@ export function createApp(): {
.component('LaySearch', LaySearch)
.component('LayTableBox', LayTableBox)
.component('LayComment', LayComment)
.component('LayAnchor',LayAnchor)
.use(Layui)
return { app, router }

View File

@@ -9,6 +9,7 @@ import createBlock from './create-block'
import createDescribe from './create-describe'
import createTable from './create-table'
import createComment from './create-comment'
import createAnchor from './create-anchor'
import preWrapper from './pre-wrapper'
const plugins = [
@@ -31,8 +32,9 @@ const plugins = [
.use(...createTitle('title', ''))
.use(...createDescribe('describe', ''))
.use(...createComment('comment', ''))
.use(...createAnchor('anchor', ''))
},
}),
] as any
export default plugins
export default plugins

View File

@@ -0,0 +1,35 @@
import container from "markdown-it-container";
import type Token from "markdown-it/lib/token";
type ContainerArgs = [
typeof container, string,
{ render(tokens: Token[], idx: number): string }
]
export default function createContainer(
klass: string,
defaultTitle: string
): ContainerArgs {
return [
container,
klass,
{
render(tokens, idx) {
const token = tokens[idx];
if (token.nesting === 1) {
const anchors = [];
for (const token of tokens) {
if (token.nesting === 1 && token.info.includes("title")) {
const info = token.info.trim().slice(klass.length).trim();
anchors.push(info);
}
}
// 此处仅支持 string | number | boolean 类型
return `<lay-anchor anchors="${anchors}" :currIndex="-1" :show="true">`;
} else {
return "</lay-anchor>\n";
}
},
},
];
}

View File

@@ -2,11 +2,8 @@ import container from 'markdown-it-container'
import type Token from 'markdown-it/lib/token'
type ContainerArgs = [
typeof container,
string,
{
render(tokens: Token[], idx: number): string
}
typeof container, string,
{ render(tokens: Token[], idx: number): string }
]
export default function createContainer(

View File

@@ -2,11 +2,8 @@ import container from 'markdown-it-container'
import type Token from 'markdown-it/lib/token'
type ContainerArgs = [
typeof container,
string,
{
render(tokens: Token[], idx: number): string
}
typeof container, string,
{ render(tokens: Token[], idx: number): string }
]
export default function createContainer(
@@ -27,4 +24,4 @@ export default function createContainer(
},
},
]
}
}

View File

@@ -2,11 +2,8 @@ import container from 'markdown-it-container'
import type Token from 'markdown-it/lib/token'
type ContainerArgs = [
typeof container,
string,
{
render(tokens: Token[], idx: number): string
}
typeof container, string,
{ render(tokens: Token[], idx: number): string }
]
export default function createContainer(
@@ -28,4 +25,4 @@ export default function createContainer(
},
},
]
}
}

View File

@@ -2,11 +2,8 @@ import container from 'markdown-it-container'
import type Token from 'markdown-it/lib/token'
type ContainerArgs = [
typeof container,
string,
{
render(tokens: Token[], idx: number): string
}
typeof container, string,
{ render(tokens: Token[], idx: number): string }
]
export default function createContainer(
@@ -28,4 +25,4 @@ export default function createContainer(
},
},
]
}
}

View File

@@ -2,11 +2,8 @@ import container from 'markdown-it-container'
import type Token from 'markdown-it/lib/token'
type ContainerArgs = [
typeof container,
string,
{
render(tokens: Token[], idx: number): string
}
typeof container, string,
{ render(tokens: Token[], idx: number): string }
]
export default function createContainer(
@@ -17,17 +14,17 @@ export default function createContainer(
container,
klass,
{
render(tokens, idx) {
render(tokens, idx) {
const token = tokens[idx]
const info = token.info.trim().slice(klass.length).trim()
if (token.nesting === 1) {
return `<lay-field title="${
return `<lay-field id="${info || defaultTitle}" title="${
info || defaultTitle
}" style="margin-top:20px;margin-bottom: 20px;">`
}" style="margin-top:21px;margin-bottom: 20px;">`
} else {
return '</lay-field>\n'
}
},
},
]
}
}

View File

@@ -19,13 +19,8 @@ export default (md: MarkdownIt): void => {
}
const start = pos + 3
const end = state.skipSpacesBack(max, pos)
const rawPath = state.src
.slice(start, end)
.trim()
.replace(/^@/, process.cwd())
const content = fs.existsSync(rawPath)
? fs.readFileSync(rawPath).toString()
: 'Not found: ' + rawPath
const rawPath = state.src.slice(start, end).trim().replace(/^@/, process.cwd())
const content = fs.existsSync(rawPath) ? fs.readFileSync(rawPath).toString() : 'Not found: ' + rawPath
const meta = rawPath.replace(rawPath, '')
state.line = startLine + 1
const token = state.push('fence', 'code', 0)
@@ -36,4 +31,4 @@ export default (md: MarkdownIt): void => {
return true
}
md.block.ruler.before('fence', 'snippet', parser)
}
}

View File

@@ -1,357 +1,373 @@
import BaseLayout from '../layouts/Layout.vue'
import Component from '../view/component.vue'
import Hooks from '../view/hooks.vue'
import Guide from '../view/guide.vue'
import Index from '../view/index.vue'
import Ecology from '../view/ecology.vue'
import BaseLayout from "../layouts/Layout.vue";
import Component from "../view/component.vue";
import Hooks from "../view/hooks.vue";
import Guide from "../view/guide.vue";
import Index from "../view/index.vue";
import Ecology from "../view/ecology.vue";
const zhCN = [
{
path: '/',
redirect: '/zh-CN/index',
path: "/",
redirect: "/zh-CN/index",
component: BaseLayout,
meta: { title: '首页' },
meta: { title: "首页" },
children: [
{
path: '/zh-CN/index',
path: "/zh-CN/index",
component: Index,
meta: { title: '指南' },
meta: { title: "指南" },
},
{
path: '/zh-CN/ecology',
path: "/zh-CN/ecology",
component: Ecology,
meta: { title: '生态' },
meta: { title: "生态" },
},
{
path: '/zh-CN/guide',
redirect: '/zh-CN/guide/introduce',
path: "/zh-CN/guide",
redirect: "/zh-CN/guide/introduce",
component: Guide,
meta: { title: '指南' },
meta: { title: "指南" },
children: [
{
path: '/zh-CN/guide/introduce',
component: () => import('../../docs/zh-CN/guide/introduce.md'),
meta: { title: '介绍' },
path: "/zh-CN/guide/introduce",
component: () => import("../../docs/zh-CN/guide/introduce.md"),
meta: { title: "介绍" },
},
{
path: '/zh-CN/guide/getStarted',
component: () => import('../../docs/zh-CN/guide/getStarted.md'),
meta: { title: '安装' },
path: "/zh-CN/guide/getStarted",
component: () => import("../../docs/zh-CN/guide/getStarted.md"),
meta: { title: "安装" },
},
{
path: '/zh-CN/guide/changelog',
component: () => import('../../docs/zh-CN/guide/changelog.md'),
meta: { title: '更新' },
path: "/zh-CN/guide/changelog",
component: () => import("../../docs/zh-CN/guide/changelog.md"),
meta: { title: "更新" },
},
{
path: '/zh-CN/guide/problem',
component: () => import('../../docs/zh-CN/guide/problem.md'),
meta: { title: '问题' },
path: "/zh-CN/guide/problem",
component: () => import("../../docs/zh-CN/guide/problem.md"),
meta: { title: "问题" },
},
{
path: '/zh-CN/guide/member',
component: () => import('../../docs/zh-CN/guide/member.md'),
meta: { title: '团队' },
path: "/zh-CN/guide/member",
component: () => import("../../docs/zh-CN/guide/member.md"),
meta: { title: "团队" },
},
{
path: '/zh-CN/guide/norms',
component: () => import('../../docs/zh-CN/guide/norms.md'),
meta: { title: '规范' },
path: "/zh-CN/guide/norms",
component: () => import("../../docs/zh-CN/guide/norms.md"),
meta: { title: "规范" },
},
{
path: '/zh-CN/guide/theme',
component: () => import('../../docs/zh-CN/guide/theme.md'),
meta: { title: '主题' },
path: "/zh-CN/guide/theme",
component: () => import("../../docs/zh-CN/guide/theme.md"),
meta: { title: "主题" },
},
{
path: '/zh-CN/guide/sponsor',
component: () => import('../../docs/zh-CN/guide/sponsor.md'),
meta: { title: '赞助' },
path: "/zh-CN/guide/sponsor",
component: () => import("../../docs/zh-CN/guide/sponsor.md"),
meta: { title: "赞助" },
},
],
},
{
path: '/zh-CN/components',
redirect: '/zh-CN/components/color',
path: "/zh-CN/components",
redirect: "/zh-CN/components/color",
component: Component,
meta: { title: '组件' },
meta: { title: "组件" },
children: [
{
path: '/zh-CN/components/layout',
component: () => import('../../docs/zh-CN/components/layout.md'),
meta: { title: '布局' },
path: "/zh-CN/components/skeleton",
component: () => import("../../docs/zh-CN/components/skeleton.md"),
meta: { title: "骨架屏" },
},
{
path: '/zh-CN/components/color',
component: () => import('../../docs/zh-CN/components/color.md'),
meta: { title: '颜色' },
path: "/zh-CN/components/layout",
component: () => import("../../docs/zh-CN/components/layout.md"),
meta: { title: "布局" },
},
{
path: '/zh-CN/components/container',
component: () => import('../../docs/zh-CN/components/container.md'),
meta: { title: '容器' },
path: "/zh-CN/components/color",
component: () => import("../../docs/zh-CN/components/color.md"),
meta: { title: "颜色" },
},
{
path: '/zh-CN/components/breadcrumb',
path: "/zh-CN/components/container",
component: () => import("../../docs/zh-CN/components/container.md"),
meta: { title: "容器" },
},
{
path: "/zh-CN/components/breadcrumb",
component: () =>
import('../../docs/zh-CN/components/breadcrumb.md'),
meta: { title: '面包屑' },
import("../../docs/zh-CN/components/breadcrumb.md"),
meta: { title: "面包屑" },
},
{
path: '/zh-CN/components/button',
component: () => import('../../docs/zh-CN/components/button.md'),
meta: { title: '按钮' },
path: "/zh-CN/components/button",
component: () => import("../../docs/zh-CN/components/button.md"),
meta: { title: "按钮" },
},
{
path: '/zh-CN/components/icon',
component: () => import('../../docs/zh-CN/components/icon.md'),
meta: { title: '图标' },
path: "/zh-CN/components/icon",
component: () => import("../../docs/zh-CN/components/icon.md"),
meta: { title: "图标" },
},
{
path: '/zh-CN/components/panel',
component: () => import('../../docs/zh-CN/components/panel.md'),
meta: { title: '面板' },
path: "/zh-CN/components/panel",
component: () => import("../../docs/zh-CN/components/panel.md"),
meta: { title: "面板" },
},
{
path: '/zh-CN/components/animation',
component: () => import('../../docs/zh-CN/components/animation.md'),
meta: { title: '动画' },
path: "/zh-CN/components/animation",
component: () => import("../../docs/zh-CN/components/animation.md"),
meta: { title: "动画" },
},
{
path: '/zh-CN/components/card',
component: () => import('../../docs/zh-CN/components/card.md'),
meta: { title: '卡片' },
path: "/zh-CN/components/card",
component: () => import("../../docs/zh-CN/components/card.md"),
meta: { title: "卡片" },
},
{
path: '/zh-CN/components/grid',
component: () => import('../../docs/zh-CN/components/grid.md'),
meta: { title: '栅格' },
path: "/zh-CN/components/grid",
component: () => import("../../docs/zh-CN/components/grid.md"),
meta: { title: "栅格" },
},
{
path: '/zh-CN/components/form',
component: () => import('../../docs/zh-CN/components/form.md'),
meta: { title: '表单' },
path: "/zh-CN/components/form",
component: () => import("../../docs/zh-CN/components/form.md"),
meta: { title: "表单" },
},
{
path: '/zh-CN/components/badge',
component: () => import('../../docs/zh-CN/components/badge.md'),
meta: { title: '徽章' },
path: "/zh-CN/components/badge",
component: () => import("../../docs/zh-CN/components/badge.md"),
meta: { title: "徽章" },
},
{
path: '/zh-CN/components/block',
component: () => import('../../docs/zh-CN/components/block.md'),
meta: { title: '辅助' },
path: "/zh-CN/components/block",
component: () => import("../../docs/zh-CN/components/block.md"),
meta: { title: "辅助" },
},
{
path: '/zh-CN/components/line',
component: () => import('../../docs/zh-CN/components/line.md'),
meta: { title: '分割' },
path: "/zh-CN/components/line",
component: () => import("../../docs/zh-CN/components/line.md"),
meta: { title: "分割" },
},
{
path: '/zh-CN/components/progress',
component: () => import('../../docs/zh-CN/components/progress.md'),
meta: { title: '进度' },
path: "/zh-CN/components/progress",
component: () => import("../../docs/zh-CN/components/progress.md"),
meta: { title: "进度" },
},
{
path: '/zh-CN/components/menu',
component: () => import('../../docs/zh-CN/components/menu.md'),
meta: { title: '菜单' },
path: "/zh-CN/components/menu",
component: () => import("../../docs/zh-CN/components/menu.md"),
meta: { title: "菜单" },
},
{
path: '/zh-CN/components/timeline',
component: () => import('../../docs/zh-CN/components/timeline.md'),
meta: { title: '时间线' },
path: "/zh-CN/components/timeline",
component: () => import("../../docs/zh-CN/components/timeline.md"),
meta: { title: "时间线" },
},
{
path: '/zh-CN/components/collapse',
component: () => import('../../docs/zh-CN/components/collapse.md'),
meta: { title: '折叠面板' },
path: "/zh-CN/components/collapse",
component: () => import("../../docs/zh-CN/components/collapse.md"),
meta: { title: "折叠面板" },
},
{
path: '/zh-CN/components/table',
component: () => import('../../docs/zh-CN/components/table.md'),
meta: { title: '表格' },
path: "/zh-CN/components/step",
component: () => import("../../docs/zh-CN/components/step.md"),
meta: { title: "分步" },
},
{
path: '/zh-CN/components/avatar',
component: () => import('../../docs/zh-CN/components/avatar.md'),
meta: { title: '头像' },
path: "/zh-CN/components/table",
component: () => import("../../docs/zh-CN/components/table.md"),
meta: { title: "表格" },
},
{
path: '/zh-CN/components/field',
component: () => import('../../docs/zh-CN/components/field.md'),
meta: { title: '字段' },
path: "/zh-CN/components/avatar",
component: () => import("../../docs/zh-CN/components/avatar.md"),
meta: { title: "头像" },
},
{
path: '/zh-CN/components/empty',
component: () => import('../../docs/zh-CN/components/empty.md'),
meta: { title: '空' },
path: "/zh-CN/components/field",
component: () => import("../../docs/zh-CN/components/field.md"),
meta: { title: "字段" },
},
{
path: '/zh-CN/components/rate',
component: () => import('../../docs/zh-CN/components/rate.md'),
meta: { title: '评分' },
path: "/zh-CN/components/empty",
component: () => import("../../docs/zh-CN/components/empty.md"),
meta: { title: "空" },
},
{
path: '/zh-CN/components/dropdown',
component: () => import('../../docs/zh-CN/components/dropdown.md'),
meta: { title: '下拉' },
path: "/zh-CN/components/rate",
component: () => import("../../docs/zh-CN/components/rate.md"),
meta: { title: "评分" },
},
{
path: '/zh-CN/components/tab',
component: () => import('../../docs/zh-CN/components/tab.md'),
meta: { title: '选项卡' },
path: "/zh-CN/components/dropdown",
component: () => import("../../docs/zh-CN/components/dropdown.md"),
meta: { title: "下拉" },
},
{
path: '/zh-CN/components/iconPicker',
path: "/zh-CN/components/tab",
component: () => import("../../docs/zh-CN/components/tab.md"),
meta: { title: "选项卡" },
},
{
path: "/zh-CN/components/iconPicker",
component: () =>
import('../../docs/zh-CN/components/iconPicker.md'),
meta: { title: '图标选择' },
import("../../docs/zh-CN/components/iconPicker.md"),
meta: { title: "图标选择" },
},
{
path: '/zh-CN/components/tree',
component: () => import('../../docs/zh-CN/components/tree.md'),
meta: { title: '树形组件' },
path: "/zh-CN/components/tree",
component: () => import("../../docs/zh-CN/components/tree.md"),
meta: { title: "树形组件" },
},
{
path: '/zh-CN/components/page',
component: () => import('../../docs/zh-CN/components/page.md'),
meta: { title: '分页' },
path: "/zh-CN/components/page",
component: () => import("../../docs/zh-CN/components/page.md"),
meta: { title: "分页" },
},
{
path: '/zh-CN/components/transfer',
component: () => import('../../docs/zh-CN/components/transfer.md'),
meta: { title: '穿梭框' },
path: "/zh-CN/components/transfer",
component: () => import("../../docs/zh-CN/components/transfer.md"),
meta: { title: "穿梭框" },
},
{
path: '/zh-CN/components/checkbox',
component: () => import('../../docs/zh-CN/components/checkbox.md'),
meta: { title: '复选框' },
path: "/zh-CN/components/checkbox",
component: () => import("../../docs/zh-CN/components/checkbox.md"),
meta: { title: "复选框" },
},
{
path: '/zh-CN/components/radio',
component: () => import('../../docs/zh-CN/components/radio.md'),
meta: { title: '单选框' },
path: "/zh-CN/components/radio",
component: () => import("../../docs/zh-CN/components/radio.md"),
meta: { title: "单选框" },
},
{
path: '/zh-CN/components/input',
component: () => import('../../docs/zh-CN/components/input.md'),
meta: { title: '输入框' },
path: "/zh-CN/components/input",
component: () => import("../../docs/zh-CN/components/input.md"),
meta: { title: "输入框" },
},
{
path: '/zh-CN/components/inputNumber',
component: () => import('../../docs/zh-CN/components/inputNumber.md'),
meta: { title: '数字输入框' },
},
{
path: '/zh-CN/components/textarea',
component: () => import('../../docs/zh-CN/components/textarea.md'),
meta: { title: '文本域' },
},
{
path: '/zh-CN/components/switch',
component: () => import('../../docs/zh-CN/components/switch.md'),
meta: { title: '开关' },
},
{
path: '/zh-CN/components/slider',
component: () => import('../../docs/zh-CN/components/slider.md'),
meta: { title: '滑块' },
},
{
path: '/zh-CN/components/carousel',
component: () => import('../../docs/zh-CN/components/carousel.md'),
meta: { title: '轮播' },
},
{
path: '/zh-CN/components/select',
component: () => import('../../docs/zh-CN/components/select.md'),
meta: { title: '下拉选择' },
},
{
path: '/zh-CN/components/colorPicker',
path: "/zh-CN/components/inputNumber",
component: () =>
import('../../docs/zh-CN/components/colorPicker.md'),
meta: { title: '颜色选择器' },
},{
path: '/zh-CN/components/layer',
component: () => import('../../docs/zh-CN/components/layer.md'),
meta: { title: '简介' },
import("../../docs/zh-CN/components/inputNumber.md"),
meta: { title: "数字输入框" },
},
{
path: '/zh-CN/components/tooltip',
component: () => import('../../docs/zh-CN/components/tooltip.md'),
meta: { title: '文字提示' },
path: "/zh-CN/components/textarea",
component: () => import("../../docs/zh-CN/components/textarea.md"),
meta: { title: "文本域" },
},
{
path: '/zh-CN/components/modal',
component: () => import('../../docs/zh-CN/components/modal.md'),
meta: { title: '弹层' },
},{
path: '/zh-CN/components/load',
component: () => import('../../docs/zh-CN/components/load.md'),
meta: { title: '加载' },
},{
path: '/zh-CN/components/confirm',
component: () => import('../../docs/zh-CN/components/confirm.md'),
meta: { title: '询问' },
},{
path: '/zh-CN/components/msg',
component: () => import('../../docs/zh-CN/components/msg.md'),
meta: { title: '信息' },
},{
path: '/zh-CN/components/backtop',
component: () => import('../../docs/zh-CN/components/backtop.md'),
meta: { title: '返回顶部' },
path: "/zh-CN/components/switch",
component: () => import("../../docs/zh-CN/components/switch.md"),
meta: { title: "开关" },
},
{
path: '/zh-CN/components/countup',
component: () => import('../../docs/zh-CN/components/countup.md'),
meta: { title: '数字滚动' },
path: "/zh-CN/components/slider",
component: () => import("../../docs/zh-CN/components/slider.md"),
meta: { title: "滑块" },
},
{
path: "/zh-CN/components/carousel",
component: () => import("../../docs/zh-CN/components/carousel.md"),
meta: { title: "轮播" },
},
{
path: "/zh-CN/components/select",
component: () => import("../../docs/zh-CN/components/select.md"),
meta: { title: "下拉选择" },
},
{
path: "/zh-CN/components/colorPicker",
component: () =>
import("../../docs/zh-CN/components/colorPicker.md"),
meta: { title: "颜色选择器" },
},
{
path: "/zh-CN/components/layer",
component: () => import("../../docs/zh-CN/components/layer.md"),
meta: { title: "简介" },
},
{
path: "/zh-CN/components/tooltip",
component: () => import("../../docs/zh-CN/components/tooltip.md"),
meta: { title: "文字提示" },
},
{
path: "/zh-CN/components/modal",
component: () => import("../../docs/zh-CN/components/modal.md"),
meta: { title: "弹层" },
},
{
path: "/zh-CN/components/load",
component: () => import("../../docs/zh-CN/components/load.md"),
meta: { title: "加载" },
},
{
path: "/zh-CN/components/confirm",
component: () => import("../../docs/zh-CN/components/confirm.md"),
meta: { title: "询问" },
},
{
path: "/zh-CN/components/msg",
component: () => import("../../docs/zh-CN/components/msg.md"),
meta: { title: "信息" },
},
{
path: "/zh-CN/components/backtop",
component: () => import("../../docs/zh-CN/components/backtop.md"),
meta: { title: "返回顶部" },
},
{
path: "/zh-CN/components/countup",
component: () => import("../../docs/zh-CN/components/countup.md"),
meta: { title: "数字滚动" },
},
],
},
{
path: '/zh-CN/hooks',
redirect: '/zh-CN/hooks/useStarted',
path: "/zh-CN/hooks",
redirect: "/zh-CN/hooks/useStarted",
component: Hooks,
meta: { title: 'hooks' },
meta: { title: "hooks" },
children: [
{
path: '/zh-CN/hooks/useStarted',
path: "/zh-CN/hooks/useStarted",
component: () => import("../../docs/zh-CN/hooks/useStarted.md"),
meta: { title: "useStarted" },
},
{
path: "/zh-CN/hooks/useClickOutside",
component: () =>
import('../../docs/zh-CN/hooks/useStarted.md'),
meta: { title: 'useStarted' },
import("../../docs/zh-CN/hooks/useClickOutside.md"),
meta: { title: "useClickOutside" },
},
{
path: '/zh-CN/hooks/useClickOutside',
component: () =>
import('../../docs/zh-CN/hooks/useClickOutside.md'),
meta: { title: 'useClickOutside' },
path: "/zh-CN/hooks/useFullScreen",
component: () => import("../../docs/zh-CN/hooks/useFullScreen.md"),
meta: { title: "useFullScreen" },
},
{
path: '/zh-CN/hooks/useFullScreen',
component: () => import('../../docs/zh-CN/hooks/useFullScreen.md'),
meta: { title: 'useFullScreen' },
path: "/zh-CN/hooks/useMove",
component: () => import("../../docs/zh-CN/hooks/useMove.md"),
meta: { title: "useMove" },
},
{
path: '/zh-CN/hooks/useMove',
component: () => import('../../docs/zh-CN/hooks/useMove.md'),
meta: { title: 'useMove' },
}, {
path: '/zh-CN/hooks/useState',
component: () => import('../../docs/zh-CN/hooks/useState.md'),
meta: { title: 'useState' },
path: "/zh-CN/hooks/useState",
component: () => import("../../docs/zh-CN/hooks/useState.md"),
meta: { title: "useState" },
},
{
path: '/zh-CN/hooks/useBoolean',
component: () => import('../../docs/zh-CN/hooks/useBoolean.md'),
meta: { title: 'useBoolean' },
path: "/zh-CN/hooks/useBoolean",
component: () => import("../../docs/zh-CN/hooks/useBoolean.md"),
meta: { title: "useBoolean" },
},
],
},
],
},
]
];
export default zhCN
export default zhCN;

View File

@@ -37,363 +37,384 @@
</lay-scroll>
</lay-side>
<lay-body>
<div style="padding: 20px">
<div
style="
padding: 20px;
margin-right: 180px;
transition: margin 240ms 60ms;
"
>
<router-view />
</div>
</lay-body>
</lay-layout>
</template>
<script>
import { ref, watch } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import { ref, watch } from "vue";
import { useRouter, useRoute } from "vue-router";
export default {
setup() {
const route = useRoute()
const router = useRouter()
const currentPath = ref('/zh-CN/guide')
const route = useRoute();
const router = useRouter();
const currentPath = ref("/zh-CN/guide");
watch(
() => route.path,
(val) => {
currentPath.value = val
currentPath.value = val;
},
{
immediate: true,
deep: true,
}
)
);
const menus = [
{
id: 1,
title: '通用',
title: "通用",
children: [
{
id: 20,
title: '颜色',
subTitle: 'color',
path: '/zh-CN/components/color',
title: "颜色",
subTitle: "color",
path: "/zh-CN/components/color",
},
{
id: 6,
title: '按钮',
subTitle: 'button',
path: '/zh-CN/components/button',
title: "按钮",
subTitle: "button",
path: "/zh-CN/components/button",
},
{
id: 7,
title: '图标',
subTitle: 'iconfont',
path: '/zh-CN/components/icon',
title: "图标",
subTitle: "iconfont",
path: "/zh-CN/components/icon",
},
{
id: 10,
title: '动画',
subTitle: 'animation',
path: '/zh-CN/components/animation',
title: "动画",
subTitle: "animation",
path: "/zh-CN/components/animation",
},
],
},
{
id: 1,
title: '布局',
title: "布局",
children: [
{
id: 111,
title: "骨架屏",
subTitle: "skeleton",
path: "/zh-CN/components/skeleton",
},
{
id: 4,
title: '布局',
subTitle: 'layout',
path: '/zh-CN/components/layout',
title: "布局",
subTitle: "layout",
path: "/zh-CN/components/layout",
},
{
id: 5,
title: '容器',
subTitle: 'container',
path: '/zh-CN/components/container',
title: "容器",
subTitle: "container",
path: "/zh-CN/components/container",
},
{
id: 11,
title: '栅格',
subTitle: 'grid',
path: '/zh-CN/components/grid',
title: "栅格",
subTitle: "grid",
path: "/zh-CN/components/grid",
},
{
id: 8,
title: '面板',
subTitle: 'panel',
path: '/zh-CN/components/panel',
title: "面板",
subTitle: "panel",
path: "/zh-CN/components/panel",
},
{
id: 9,
title: '卡片',
subTitle: 'card',
path: '/zh-CN/components/card',
title: "卡片",
subTitle: "card",
path: "/zh-CN/components/card",
},
],
},
{
id: 1,
title: '导航',
title: "导航",
children: [
{
id: 16,
title: '菜单',
subTitle: 'nav',
path: '/zh-CN/components/menu',
title: "菜单",
subTitle: "nav",
path: "/zh-CN/components/menu",
},
{
id: 17,
title: '面包屑',
subTitle: 'breadcrumb',
path: '/zh-CN/components/breadcrumb',
title: "面包屑",
subTitle: "breadcrumb",
path: "/zh-CN/components/breadcrumb",
},
{
id: 28,
title: '选项卡',
subTitle: 'tab',
path: '/zh-CN/components/tab',
title: "选项卡",
subTitle: "tab",
path: "/zh-CN/components/tab",
},
{
id: 27,
title: '下拉菜单',
subTitle: 'dropdown',
path: '/zh-CN/components/dropdown',
title: "下拉菜单",
subTitle: "dropdown",
path: "/zh-CN/components/dropdown",
},
{
id: 42,
title: '返回顶部',
subTitle: 'backtop',
path: '/zh-CN/components/backtop',
title: "返回顶部",
subTitle: "backtop",
path: "/zh-CN/components/backtop",
},
],
},
{
id: 1,
title: '表单',
title: "表单",
children: [
{
id: 36,
title: '开关',
subTitle: 'switch',
path: '/zh-CN/components/switch',
title: "开关",
subTitle: "switch",
path: "/zh-CN/components/switch",
},
{
id: 32,
title: '复选框',
subTitle: 'checkbox',
path: '/zh-CN/components/checkbox',
title: "复选框",
subTitle: "checkbox",
path: "/zh-CN/components/checkbox",
},
{
id: 33,
title: '单选框',
subTitle: 'radio',
path: '/zh-CN/components/radio',
title: "单选框",
subTitle: "radio",
path: "/zh-CN/components/radio",
},
{
id: 34,
title: '输入框',
subTitle: 'input',
path: '/zh-CN/components/input',
title: "输入框",
subTitle: "input",
path: "/zh-CN/components/input",
},
{
id: 341,
title: '数字输入框',
subTitle: 'inputNumber',
path: '/zh-CN/components/inputNumber',
title: "数字输入框",
subTitle: "inputNumber",
path: "/zh-CN/components/inputNumber",
},
{
id: 35,
title: '文本域',
subTitle: 'textarea',
path: '/zh-CN/components/textarea',
title: "文本域",
subTitle: "textarea",
path: "/zh-CN/components/textarea",
},
{
id: 39,
title: '下拉选择',
subTitle: 'select',
path: '/zh-CN/components/select',
title: "下拉选择",
subTitle: "select",
path: "/zh-CN/components/select",
},
{
id: 40,
title: '颜色选择器',
subTitle: 'colorPicker',
path: '/zh-CN/components/colorPicker',
title: "颜色选择器",
subTitle: "colorPicker",
path: "/zh-CN/components/colorPicker",
},
{
id: 29,
title: '图标选择器',
subTitle: 'iconPicker',
path: '/zh-CN/components/iconPicker',
title: "图标选择器",
subTitle: "iconPicker",
path: "/zh-CN/components/iconPicker",
},
{
id: 26,
title: '评分',
subTitle: 'rate',
path: '/zh-CN/components/rate',
title: "评分",
subTitle: "rate",
path: "/zh-CN/components/rate",
},
{
id: 37,
title: '滑块',
subTitle: 'slider',
path: '/zh-CN/components/slider',
title: "滑块",
subTitle: "slider",
path: "/zh-CN/components/slider",
},
{
id: 12,
title: '表单',
subTitle: 'form',
path: '/zh-CN/components/form',
title: "表单",
subTitle: "form",
path: "/zh-CN/components/form",
},
],
},
{
id: 1,
title: '展示',
title: "展示",
children: [
{
id: 18,
title: '进度',
subTitle: 'progress',
path: '/zh-CN/components/progress',
title: "进度",
subTitle: "progress",
path: "/zh-CN/components/progress",
},
{
id: 19,
title: '时间线',
subTitle: 'timeline',
path: '/zh-CN/components/timeline',
title: "时间线",
subTitle: "timeline",
path: "/zh-CN/components/timeline",
},
{
id: 21,
title: '折叠面板',
subTitle: 'collapse',
path: '/zh-CN/components/collapse',
title: "折叠面板",
subTitle: "collapse",
path: "/zh-CN/components/collapse",
},
{
id: 22,
title: '表格',
subTitle: 'table',
path: '/zh-CN/components/table',
title: "表格",
subTitle: "table",
path: "/zh-CN/components/table",
},
{
id: 23,
title: '头像',
subTitle: 'avatar',
path: '/zh-CN/components/avatar',
title: "头像",
subTitle: "avatar",
path: "/zh-CN/components/avatar",
},
{
id: 25,
title: '空',
subTitle: 'empty',
path: '/zh-CN/components/empty',
title: "空",
subTitle: "empty",
path: "/zh-CN/components/empty",
},
{
id: 29,
title: '分页',
subTitle: 'page',
path: '/zh-CN/components/page',
title: "分页",
subTitle: "page",
path: "/zh-CN/components/page",
},
{
id: 30,
title: '树形组件',
subTitle: 'tree',
path: '/zh-CN/components/tree',
title: "树形组件",
subTitle: "tree",
path: "/zh-CN/components/tree",
},
{
id: 31,
title: '穿梭框',
subTitle: 'transfer',
path: '/zh-CN/components/transfer',
title: "穿梭框",
subTitle: "transfer",
path: "/zh-CN/components/transfer",
},
{
id: 38,
title: '轮播',
subTitle: 'carousel',
path: '/zh-CN/components/carousel',
title: "轮播",
subTitle: "carousel",
path: "/zh-CN/components/carousel",
},
{
id: 43,
title: '数字滚动',
subTitle: 'countUp',
path: '/zh-CN/components/countup',
title: "数字滚动",
subTitle: "countUp",
path: "/zh-CN/components/countup",
},
],
},
{
id: 1,
title: '辅助',
title: "辅助",
children: [
{
id: 13,
title: '徽章',
subTitle: 'badge',
path: '/zh-CN/components/badge',
title: "徽章",
subTitle: "badge",
path: "/zh-CN/components/badge",
},
{
id: 14,
title: '区块',
subTitle: 'block',
path: '/zh-CN/components/block',
title: "区块",
subTitle: "block",
path: "/zh-CN/components/block",
},
{
id: 15,
title: '分割',
subTitle: 'line',
path: '/zh-CN/components/line',
title: "分割",
subTitle: "line",
path: "/zh-CN/components/line",
},
{
id: 24,
title: '字段',
subTitle: 'field',
path: '/zh-CN/components/field',
title: "字段",
subTitle: "field",
path: "/zh-CN/components/field",
},
{
id: 25,
title: '文字提示',
subTitle: 'tooltip',
path: '/zh-CN/components/tooltip',
title: "文字提示",
subTitle: "tooltip",
path: "/zh-CN/components/tooltip",
},
{
id: 99,
title: "分步",
subTitle: "setup",
path: "/zh-CN/components/step",
},
],
},
{
id: 1,
title: '反馈',
title: "反馈",
children: [
{
id: 90,
title: '弹层',
subTitle: 'modal',
path: '/zh-CN/components/modal',
},{
title: "弹层",
subTitle: "modal",
path: "/zh-CN/components/modal",
},
{
id: 91,
title: '加载',
subTitle: 'modal',
path: '/zh-CN/components/load',
},{
title: "加载",
subTitle: "modal",
path: "/zh-CN/components/load",
},
{
id: 92,
title: '询问',
subTitle: 'confirm',
path: '/zh-CN/components/confirm',
},{
title: "询问",
subTitle: "confirm",
path: "/zh-CN/components/confirm",
},
{
id: 93,
title: '消息',
subTitle: 'msg',
path: '/zh-CN/components/msg',
title: "消息",
subTitle: "msg",
path: "/zh-CN/components/msg",
},
],
},
]
];
const selected = ref(1)
const selected = ref(1);
const handleClick = function (menu) {
selected.value = menu.id
router.push(menu.path)
}
selected.value = menu.id;
router.push(menu.path);
};
return {
menus,
selected,
currentPath,
handleClick,
}
};
},
}
};
</script>

View File

@@ -26,7 +26,7 @@
>
</div>
<div class="site-version">
<span>当前版本v<cite class="site-showv">0.3.1</cite></span>
<span>当前版本v<cite class="site-showv">0.3.2</cite></span>
<span
><router-link
class="layui-inline site-down"
@@ -34,7 +34,7 @@
>更新日志</router-link
></span
>
<span>下载量<em class="site-showdowns">2324</em></span>
<span>下载量<em class="site-showdowns">3124</em></span>
</div>
</div>
<div class="site-banner-other">
@@ -44,7 +44,7 @@
rel="nofollow"
class="site-star"
>
<i class="layui-icon"></i> Star <cite id="getStars">521</cite>
<i class="layui-icon"></i> Star <cite id="getStars">544</cite>
</a>
<a
href="https://gitee.com/layui-vue"