diff --git a/package/component/src/component/cascader/index.less b/package/component/src/component/cascader/index.less new file mode 100644 index 00000000..1f1e49bc --- /dev/null +++ b/package/component/src/component/cascader/index.less @@ -0,0 +1,55 @@ +.layui-cascader { + position: relative; +} +.layui-cascader .layui-icon-down { + transition: all 0.3s ease-in-out; + transform: rotate(0); +} +.layui-cascader-open .layui-icon-down { + transform: rotate(180deg); +} + +.layui-cascader .layui-cascader-panel { + position: absolute; + margin-top: 2px; + z-index: 899; + background-color: #fff; + box-sizing: border-box; + border: 1px solid #e4e7ed; + border-radius: 2px; + box-shadow: 0 2px 12px #0000001a; + line-height: 26px; + color: #000c; + font-size: 14px; + white-space: nowrap; + display: none; +} +.layui-cascader-menu { + border-right: 1px solid var(--global-neutral-color-3); + max-height: 360px; + overflow-y: scroll; +} +.layui-cascader-menu:last-child { + border-right: none; +} +.layui-cascader-menu-item { + min-width: 130px; + padding: 5px 15px; + box-sizing: border-box; + transition: all 0.1s ease-in-out; + display: flex; + justify-content: space-between; + align-items: center; + padding-right: 9px; +} +.layui-cascader-menu-item:hover { + background-color: var(--global-checked-color); + color: white; +} +.layui-cascader-selected { + background-color: var(--global-checked-color); + color: white; +} +.layui-cascader-open .layui-cascader-panel { + display: flex !important; +} diff --git a/package/component/src/component/cascader/index.ts b/package/component/src/component/cascader/index.ts new file mode 100644 index 00000000..bc751ebc --- /dev/null +++ b/package/component/src/component/cascader/index.ts @@ -0,0 +1,5 @@ +import { withInstall, WithInstallType } from "../../utils"; +import Component from "./index.vue"; + +const component: WithInstallType = withInstall(Component); +export default component; diff --git a/package/component/src/component/cascader/index.vue b/package/component/src/component/cascader/index.vue new file mode 100644 index 00000000..9616acae --- /dev/null +++ b/package/component/src/component/cascader/index.vue @@ -0,0 +1,213 @@ + + + + + diff --git a/package/component/src/index.ts b/package/component/src/index.ts index d8ecfdc9..9e198334 100644 --- a/package/component/src/index.ts +++ b/package/component/src/index.ts @@ -85,6 +85,7 @@ import LayUpload from "./component/upload/index"; import LayRipple from "./component/ripple/index"; import LayNoticeBar from "./component/noticeBar/index"; import LayPageHeader from "./component/pageHeader/index"; +import LayCascader from "./component/cascader/index"; import LayConfigProvider from "./provider"; import { InstallOptions } from "./types"; @@ -168,6 +169,7 @@ const components: Record = { LayRipple, LayNoticeBar, LayPageHeader, + LayCascader, }; const install = (app: App, options?: InstallOptions): void => { @@ -258,6 +260,7 @@ export { LayRipple, LayNoticeBar, LayPageHeader, + LayCascader, install, }; diff --git a/package/document/src/document/zh-CN/components/cascader.md b/package/document/src/document/zh-CN/components/cascader.md new file mode 100644 index 00000000..8f08dfc9 --- /dev/null +++ b/package/document/src/document/zh-CN/components/cascader.md @@ -0,0 +1,360 @@ +::: anchor +::: + +::: title 基本介绍 +::: + +::: describe 将数据按照指定的格式传入后分层分级,通过此组件逐级查看并选择。 +::: + +::: title 基础使用 +::: + +::: demo 使用 `lay-cascader` 标签创建级联选择器 + + + + + +::: + +::: title 自定义分割符号 +::: +::: demo 使用 `decollator` 属性 自定义分割符号 + + + +::: + + +::: title Cascader 插槽 +::: +::: demo 使用 `默认插槽` 可以自定义回显区域的内容,并且你可以通过change回调轻松拿到回显的值 + + + + +::: + +::: title Cascader 属性 +::: + +::: table + +| 属性 | 描述 | +| ----------------------- | -------------------- | +| placeholder | 提示信息 | +| v-model / modelValue | 值 | +| decollator | 分割符号,默认为 / | +| options | 选项参数 格式请见上面的demo | + +::: + +::: title Cascader 事件 +::: + +::: table + +| 属性 | 描述 | +| ---- | ------------ | +| change | 选中后数据改变的回调 | + +::: + +::: previousNext cascader +::: diff --git a/package/document/src/document/zh-CN/components/datePicker.md b/package/document/src/document/zh-CN/components/datePicker.md index 4de00a5e..24166a8e 100644 --- a/package/document/src/document/zh-CN/components/datePicker.md +++ b/package/document/src/document/zh-CN/components/datePicker.md @@ -238,5 +238,5 @@ export default { ::: -::: previousNext transfer +::: previousNext datePicker ::: \ No newline at end of file diff --git a/package/document/src/router/zh-CN.ts b/package/document/src/router/zh-CN.ts index 3e806c9e..f1dcea73 100644 --- a/package/document/src/router/zh-CN.ts +++ b/package/document/src/router/zh-CN.ts @@ -398,6 +398,11 @@ const zhCN = [ component: () =>import("../document/zh-CN/components/pageHeader.md"), meta: { title: "页头" }, }, + { + path: "/zh-CN/components/Cascader", + component: () =>import("../document/zh-CN/components/cascader.md"), + meta: { title: "级联选择器" }, + }, ], }, ], diff --git a/package/document/src/view/utils/menus.ts b/package/document/src/view/utils/menus.ts index c30c5c80..a32348bd 100644 --- a/package/document/src/view/utils/menus.ts +++ b/package/document/src/view/utils/menus.ts @@ -189,6 +189,12 @@ const menus = [ subTitle: "datePicker", path: "/zh-CN/components/datePicker", }, + { + id: 40, + title: "级联选择器", + subTitle: "cascader", + path: "/zh-CN/components/cascader", + }, { id: 40, title: "文件上传",