From 22c7fef70454bdd69b1604b105c860edae3e2599 Mon Sep 17 00:00:00 2001 From: sight <1453017105@qq.com> Date: Mon, 17 Jan 2022 00:57:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E5=BC=8F=E8=B0=83=E7=94=A8=E8=AE=BF=E9=97=AE=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E7=BB=84=E4=BB=B6=EF=BC=8Ccontext=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化 layer 函数式调用 childrenVNode 渲染时机,支持 VNode 类型响应式替换; 函数式调用表格表单 CRUD ,按钮事件通信(layer btn 按钮和组件内按钮)示例; 其它函数式调用响应式示例; --- example/src/App.vue | 10 +- example/src/components/HelloWord.vue | 7 +- .../components/func/CompositionAPITest.vue | 145 +++++++++++++ example/src/components/func/OptionAPITest.vue | 40 ++++ example/src/components/func/Test.vue | 48 +++++ example/src/components/func/UserForm.vue | 29 +++ example/src/components/func/UserList.vue | 193 ++++++++++++++++++ example/src/main.ts | 5 +- package.json | 1 + src/index.ts | 2 +- src/layer/index.ts | 64 ++++-- src/module/modal/index.vue | 43 ++-- 12 files changed, 540 insertions(+), 47 deletions(-) create mode 100644 example/src/components/func/CompositionAPITest.vue create mode 100644 example/src/components/func/OptionAPITest.vue create mode 100644 example/src/components/func/Test.vue create mode 100644 example/src/components/func/UserForm.vue create mode 100644 example/src/components/func/UserList.vue diff --git a/example/src/App.vue b/example/src/App.vue index dd8166f..b3b7c07 100644 --- a/example/src/App.vue +++ b/example/src/App.vue @@ -1,7 +1,13 @@ \ No newline at end of file diff --git a/example/src/components/HelloWord.vue b/example/src/components/HelloWord.vue index 90444bf..2287cdc 100644 --- a/example/src/components/HelloWord.vue +++ b/example/src/components/HelloWord.vue @@ -24,14 +24,14 @@ var instance = null; const openModal = () => { instance = layer.open({ content: "内容", - area: ['500px','500px'], + area: ['500px', '500px'], shade: false, maxmin: true }) } const openMsg = () => { - layer.msg("普通消息",{icon:2, time: 100000}) + layer.msg("普通消息", { icon: 2, time: 100000 }) } const close = () => { @@ -42,7 +42,7 @@ const closeAll = () => { layer.closeAll() } const openIframe = function () { - layer.open({ + layer.open({ type: 2, title: "标题", maxmin: true, @@ -52,4 +52,3 @@ const openIframe = function () { }; - diff --git a/example/src/components/func/CompositionAPITest.vue b/example/src/components/func/CompositionAPITest.vue new file mode 100644 index 0000000..cc3e2e9 --- /dev/null +++ b/example/src/components/func/CompositionAPITest.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/example/src/components/func/OptionAPITest.vue b/example/src/components/func/OptionAPITest.vue new file mode 100644 index 0000000..3a6c726 --- /dev/null +++ b/example/src/components/func/OptionAPITest.vue @@ -0,0 +1,40 @@ + + + \ No newline at end of file diff --git a/example/src/components/func/Test.vue b/example/src/components/func/Test.vue new file mode 100644 index 0000000..2e5d275 --- /dev/null +++ b/example/src/components/func/Test.vue @@ -0,0 +1,48 @@ + + \ No newline at end of file diff --git a/example/src/components/func/UserForm.vue b/example/src/components/func/UserForm.vue new file mode 100644 index 0000000..297a3de --- /dev/null +++ b/example/src/components/func/UserForm.vue @@ -0,0 +1,29 @@ + + \ No newline at end of file diff --git a/example/src/components/func/UserList.vue b/example/src/components/func/UserList.vue new file mode 100644 index 0000000..87463a9 --- /dev/null +++ b/example/src/components/func/UserList.vue @@ -0,0 +1,193 @@ + + + \ No newline at end of file diff --git a/example/src/main.ts b/example/src/main.ts index f10f092..a468319 100644 --- a/example/src/main.ts +++ b/example/src/main.ts @@ -1,5 +1,6 @@ import { createApp } from 'vue' import App from "./App.vue" +import Layui from '@layui/layui-vue' +import '@layui/layui-vue/lib/index.css' -createApp(App) -.mount('#app') \ No newline at end of file +createApp(App).use(Layui).mount('#app') \ No newline at end of file diff --git a/package.json b/package.json index 804de94..66fe7bd 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "vue": "^3.2.26" }, "dependencies": { + "@layui/layui-vue": "^0.3.3", "vue": "^3.2.26" }, "devDependencies": { diff --git a/src/index.ts b/src/index.ts index 29e62fb..7ed0f38 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,7 +2,7 @@ export * from './module/index' // 函数组件 -export { default as layer } from './layer' +export { useLayer, default as layer} from './layer' // 组件样式 import "./css/layer.css" \ No newline at end of file diff --git a/src/layer/index.ts b/src/layer/index.ts index ccb4fec..592cd11 100644 --- a/src/layer/index.ts +++ b/src/layer/index.ts @@ -1,7 +1,10 @@ -import { render, h, isVNode } from "vue"; +import { render, h, isVNode, getCurrentInstance, AppContext } from "vue"; import LayModal from "../module/modal/index.vue"; import { nextId } from "../tools"; +// 应用上下文 +let appContext: AppContext | null = null; +// layer 实例 const layerInstance: any = []; // 新增实例 @@ -48,8 +51,18 @@ const createContainer = () => { document.body.appendChild(modalContainer); return modalContainer; }; +// modal 子 VNode +const modalChildrenVNode = (content: any) => { + if(typeof content === 'function'){ + return isVNode(content()) + ? { default: () => content()} + : undefined + } + return isVNode(content) + ? { default:() => content } + : undefined +} -// 弹层 const layer = { // 页面层 open: (option: any, callback: Function) => { @@ -100,19 +113,25 @@ const layer = { // 创建容器 Dom const modalContainer = createContainer(); // 创建虚拟 Dom - const modalInstance = h(LayModal, { - ...options, - isFunction: true, - destroy() { - clearTimeout(timer); - modalInstance.component?.exposed?.close(); - setTimeout(() => { - render(null, modalContainer); - document.body.removeChild(modalContainer); - }, 2000); - delInstance(modalContainer.id); - }, - },isVNode(options.content) ? options.content : null); + const modalInstance = h( + LayModal, + { + ...options, + isFunction: true, + destroy() { + clearTimeout(timer); + modalInstance.component?.exposed?.close(); + setTimeout(() => { + render(null, modalContainer); + document.body.removeChild(modalContainer); + }, 2000); + delInstance(modalContainer.id); + }, + }, + modalChildrenVNode(options.content) + ); + // 设置上下文 + modalInstance.appContext = options.appContext || modalInstance.appContext || appContext // 将虚拟 dom 渲染到 dom 容器 render(modalInstance, modalContainer); // 调用 open 函数 @@ -164,4 +183,17 @@ const layer = { instance.modalInstance.component?.exposed?.reset(); }, }; -export default layer; + +export default layer + +export function useLayer () { + const instance = getCurrentInstance() + + if (!instance ) { + throw new Error('useLayer must be used during a component setup or Lifecycle Hooks') + } + appContext = instance.appContext; + return { + layer + } +} diff --git a/src/module/modal/index.vue b/src/module/modal/index.vue index eafb3e2..820b0ff 100644 --- a/src/module/modal/index.vue +++ b/src/module/modal/index.vue @@ -5,7 +5,7 @@ export default { - -::: - -##### 索引 - -::: demo 通过配置 index 显示索引列,支持 columns 的参数 - - - - - -::: - -##### 多选 - -::: demo 通过配置 selection 显示多选框,支持 columns 的参数 - - - - - -::: - -##### 展开 - -::: demo 通过配置 expand 开启展开插槽,通过 #expand 插槽定制显示内容,支持 columns 的参数 - - - - - -::: - -##### 操作 - -::: demo 通过配置 menu 开启按钮插槽,通过 #menu 插槽定制显示内容,支持 columns 的参数 - - - - - -::: - -##### 插槽 - -::: demo - - - - - -::: - -##### 分页 - -::: demo 当传入 total 数据时,将自动显示分页。可以通过 `v-model:current-page` 绑定当前页数、通过 `v-model:page-size` 绑定每页显示条目个数 - - - - - -::: - -##### 多级 - -::: demo 通过 columns 的 `children` 配置多级表头 - - - - - -::: - -##### 配置 - -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| :---------------------- | :------------------------------------------------------------------ | :------------------------------------------------------ | :----------------------------- | :--------------------------------------------------- | -| data | 显示的数据 | array | - | - | -| columns | 自动生成表单的参数,参考下面 columns | array | - | - | -| selection | 显示多选框,支持 columns 的配置 | boolean / object | - | false | -| index | 显示索引,支持 columns 的配置 | boolean / object | - | false | -| expand | 开启展开插槽,支持 columns 的配置 | boolean / object | - | false | -| menu | 开启操作按钮插槽,支持 columns 的配置 | boolean / object | - | false | -| show-overflow-tooltip | 当内容过长被隐藏时显示 tooltip | boolean | - | false | -| align | 对齐方式 | string | left / center / right | left | -| header-align | 表头对齐方式 | string | left / center / right | 同 align | -| total | 总条目数 | number | - | - | -| current-page | 当前页数,可以通过 `v-model:current-page` 绑定值 | number | - | - | -| page-size | 每页显示条目个数,可以通过 `v-model:page-size` 绑定值 | number | - | - | -| pagination | pagination 的配置,同 el-pagination | object | - | [参考全局配置](../guide/index#全局配置) | -| height | Table 的高度 | string / number | - | 自动高度 | -| max-height | Table 的最大高度 | string / number | - | - | -| stripe | 是否为斑马纹 table | boolean | - | false | -| border | 是否带有纵向边框 | boolean | - | false | -| size | Table 的尺寸 | string | medium / small / mini | - | -| fit | 列的宽度是否自撑开 | boolean | - | true | -| show-header | 是否显示表头 | boolean | - | true | -| highlight-current-row | 是否要高亮当前行 | boolean | - | false | -| current-row-key | 当前行的 key,只写属性 | string / number | - | - | -| row-class-name | 为行增加 className | Function({row, rowIndex}) / string | - | - | -| row-style | 为行增加 style | Function({row, rowIndex}) / object | - | - | -| cell-class-name | 为单元格增加 className | Function({row, column, rowIndex, columnIndex}) / string | - | - | -| cell-style | 为单元格增加 style | Function({row, column, rowIndex, columnIndex}) / object | - | - | -| header-row-class-name | 为表头行增加 className | Function({row, rowIndex}) / string | - | - | -| header-row-style | 为表头行增加 style | Function({row, rowIndex}) / object | - | - | -| header-cell-class-name | 为表头单元格增加 className | Function({row, column, rowIndex, columnIndex}) / string | - | - | -| header-cell-style | 为表头单元格增加 style | Function({row, column, rowIndex, columnIndex}) / object | - | - | -| row-key | 行数据的 Key,使用 reserveSelection 功能时必填 | Function(row) / string | - | - | -| empty-text | 空数据时显示的文本内容 | string | - | 暂无数据 | -| default-expand-all | 是否默认展开所有行 | boolean | - | false | -| expand-row-keys | Table 目前的展开行,与 row-key 配合使用 | array | - | - | -| default-sort | 默认的排序列的 prop 和顺序 | Object | `order`: ascending, descending | ascending | -| tooltip-effect | tooltip `effect` 属性 | String | dark / light | - | -| show-summary | 是否在表尾显示合计行 | Boolean | - | false | -| sum-text | 合计行第一列的文本 | String | - | 合计 | -| summary-method | 自定义的合计计算方法 | Function({ columns, data }) | - | - | -| span-method | 合并行或列的计算方法 | Function({ row, column, rowIndex, columnIndex }) | - | - | -| select-on-indeterminate | 当仅有部分行被选中时,点击表头的多选框时的行为,配合 selection 使用 | boolean | - | true | -| indent | 展示树形数据时,树节点的缩进 | number | - | 16 | -| lazy | 是否懒加载子节点数据 | boolean | - | - | -| load | 加载子节点数据的函数,lazy 为 true 时生效 | Function(row, treeNode, resolve) | - | - | -| tree-props | 渲染嵌套数据的配置选项 | Object | - | { hasChildren: 'hasChildren', children: 'children' } | - -##### 参数 - -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| :------------------ | :-------------------------------------------------------------------- | :-------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------- | -| prop | 对应 data 的字段名 (**必填,需要是唯一值**) | string | - | - | -| label | 显示的标题 | string | - | - | -| slot | 是否开启自定义插槽功能 | boolean | - | false | -| hide | 是否在表格中隐藏 | boolean | - | false | -| children | 实现多级表头 | array | - | - | -| columnKey | 当前项的 key,使用 filter-change 事件时需要 | string | - | - | -| width | 对应列的宽度 | string | - | - | -| minWidth | 对应列的最小宽度 | string | - | - | -| fixed | 列是否固定,true 表示固定在左侧 | string / boolean | true / left / right | - | -| renderHeader | 列标题 Label 区域渲染使用的 Function | Function(h, { column, $index }) | - | - | -| sortable | 对应列是否可以排序 | boolean / string | true / false / 'custom' | false | -| sortMethod | 对数据进行排序的时候使用的方法 | Function(a, b) | - | - | -| sortBy | 指定数据按照哪个属性进行排序 | string / array / Function(row, index) | - | - | -| sortOrders | 数据在排序时所使用排序策略的轮转顺序 | array | `ascending` 表示升序,`descending` 表示降序,`null` 表示还原为原始顺序 | ['ascending', 'descending', null] | -| resizable | 对应列是否可以通过拖动改变宽度,配合 border 使用 | boolean | - | true | -| formatter | 用来格式化内容 | Function(row, column, cellValue, index) | - | - | -| showOverflowTooltip | 当内容过长被隐藏时显示 tooltip | Boolean | - | false | -| align | 对齐方式 | string | left / center / right | left | -| headerAlign | 表头对齐方式 | string | left / center / right | 同 align | -| className | 列的 className | string | - | - | -| labelClassName | 当前列标题的自定义类名 | string | - | - | -| filters | 数据过滤的选项 | Array[{ text, value }] | - | - | -| filterPlacement | 过滤弹出框的定位 | string | top / top-start / top-end / bottom / bottom-start / bottom-end / left / left-start / left-end / right / right-start / right-end | - | -| filterMultiple | 数据过滤的选项是否多选 | boolean | - | true | -| filterMethod | 数据过滤使用的方法 | Function(value, row, column) | - | - | -| filteredValue | 选中的数据过滤项 | array | - | - | -| index | 自定义索引,只能够在 index 中配置 | Function(index) / number | - | - | -| selectable | 这一行的 CheckBox 是否可以勾选,只能够在 selection 中配置 | Function(row, index) | - | - | -| reserveSelection | 是否保留之前选中的数据(需指定 `row-key`),只能够在 selection 中配置 | boolean | - | false | - -##### 事件 - -| 事件名 | 说明 | 参数 | -| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | -| select | 当用户手动勾选数据行的 Checkbox 时触发的事件 | selection, row | -| select-all | 当用户手动勾选全选 Checkbox 时触发的事件 | selection | -| selection-change | 当选择项发生变化时会触发该事件 | selection | -| cell-mouse-enter | 当单元格 hover 进入时会触发该事件 | row, column, cell, event | -| cell-mouse-leave | 当单元格 hover 退出时会触发该事件 | row, column, cell, event | -| cell-click | 当某个单元格被点击时会触发该事件 | row, column, cell, event | -| cell-dblclick | 当某个单元格被双击击时会触发该事件 | row, column, cell, event | -| row-click | 当某一行被点击时会触发该事件 | row, column, event | -| row-contextmenu | 当某一行被鼠标右键点击时会触发该事件 | row, column, event | -| row-dblclick | 当某一行被双击时会触发该事件 | row, column, event | -| header-click | 当某一列的表头被点击时会触发该事件 | column, event | -| header-contextmenu | 当某一列的表头被鼠标右键点击时触发该事件 | column, event | -| sort-change | 当表格的排序条件发生变化的时候会触发该事件 | { column, prop, order } | -| filter-change | 当表格的筛选条件发生变化的时候会触发该事件,参数的值是一个对象,对象的 key 是 column 的 columnKey,对应的 value 为用户选择的筛选条件的数组。 | filters | -| current-change | 当表格的当前行发生变化的时候会触发该事件,如果要高亮当前行,请打开表格的 highlight-current-row 属性 | currentRow, oldCurrentRow | -| header-dragend | 当拖动表头改变了列的宽度的时候会触发该事件 | newWidth, oldWidth, column, event | -| expand-change | 当用户对某一行展开或者关闭的时候会触发该事件(展开行时,回调的第二个参数为 expandedRows;树形表格时第二参数为 expanded) | row, (expandedRows \| expanded) | -| size-change | pageSize 改变时会触发 | 每页条数 | -| current-change | currentPage 改变时会触发 | 当前页 | -| prev-click | 用户点击上一页按钮改变当前页后触发 | 当前页 | -| next-click | 用户点击下一页按钮改变当前页后触发 | 当前页 | - -##### 方法 - -| 方法名 | 说明 | 参数 | -| ------------------ | ----------------------------------------------------------------------------------------------------------------------- | --------------------------- | -| clearSelection | 用于多选表格,清空用户的选择 | - | -| toggleRowSelection | 用于多选表格,切换某一行的选中状态,如果使用了第二个参数,则是设置这一行选中与否(selected 为 true 则选中) | row, selected | -| toggleAllSelection | 用于多选表格,切换全选和全不选 | - | -| toggleRowExpansion | 用于可展开表格与树形表格,切换某一行的展开状态,如果使用了第二个参数,则是设置这一行展开与否(expanded 为 true 则展开) | row, expanded | -| setCurrentRow | 用于单选表格,设定某一行为选中行,如果调用时不加参数,则会取消目前高亮行的选中状态。 | row | -| clearSort | 用于清空排序条件,数据会恢复成未排序的状态 | - | -| clearFilter | 不传入参数时用于清空所有过滤条件,数据会恢复成未过滤的状态,也可传入由 columnKey 组成的数组以清除指定列的过滤条件 | columnKey | -| doLayout | 对 Table 进行重新布局。当 Table 或其祖先元素由隐藏切换为显示时,可能需要调用此方法 | - | -| sort | 手动对 Table 进行排序。参数`prop`属性指定排序列,`order`指定排序顺序。 | prop: string, order: string | - -::: tip 提示 -如果使用 `typescript` 可以从组件中导出 `ITableExpose` 提供更好的类型推导 -::: - -### 插槽 - -| name | 说明 | -| :------------ | :----------------------------------------------------------------------- | -| - | 在右侧菜单前插入的任意内容 | -| menu | 表格右侧自定义按钮,参数为 { size, row, column, $index } | -| expand | 当 expand 为 true 时,配置展开显示的内容,参数为 { row, column, $index } | -| append | 插入至表格最后一行之后的内容 | -| [prop] | 当前这列的内容,参数为 { size, row, column, $index } | -| [prop]-header | 当前这列表头的内容,参数为 { size, column, $index } | - -::: tip 提示 -[prop] 为 columns 中定义的 prop -::: diff --git a/example/docs/en-US/guide/home.md b/example/docs/en-US/guide/home.md deleted file mode 100644 index 0a75d65..0000000 --- a/example/docs/en-US/guide/home.md +++ /dev/null @@ -1 +0,0 @@ -##### 介绍 diff --git a/example/docs/en-US/guide/index.md b/example/docs/en-US/guide/index.md deleted file mode 100644 index d89e87a..0000000 --- a/example/docs/en-US/guide/index.md +++ /dev/null @@ -1,5 +0,0 @@ -##### 安装 - -``` -npm install layui-vue --save -``` diff --git a/example/docs/zh-CN/components/animation.md b/example/docs/zh-CN/components/animation.md deleted file mode 100644 index e50b1aa..0000000 --- a/example/docs/zh-CN/components/animation.md +++ /dev/null @@ -1,94 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 动画类名 -::: - -::: table - -| 类名 | 描述 | 使用 | -| --------------------------------- | ------------ | ---------------------------------------------- | -| layui-anim-down | 顶部往下滑入 | `layui-anim layui-anim-down` | -| layui-anim-downbit | 微微往下滑入 | `layui-anim layui-anim-downbit` | -| layui-anim-up | 底部往上滑入 | `layui-anim layui-anim-up` | -| layui-anim-upbit | 微微往上滑入 | `layui-anim ayui-anim-upbit` | -| layui-anim-scale | 平滑放大 | `layui-anim layui-anim-scale` | -| layui-anim-scaleSpring | 弹簧式放大 | `layui-anim layui-anim-scaleSpring` | -| layui-anim-scalesmall | 平滑放小 | `layui-anim layui-anim-scalesmall` | -| layui-anim-scalesmall-spring | 弹簧式放小 | `layui-anim layui-anim-scalesmall-spring` | -| layui-anim-fadein | 渐现 | `layui-anim layui-anim-fadein` | -| layui-anim-fadeout | 渐隐 | `layui-anim layui-anim-fadeout` | -| layui-anim-rotate | 360 度旋转 | `layui-anim layui-anim-rotate` | -| layui-anim-rotate layui-anim-loop | 循环动画 | `layui-anim layui-anim-rotate layui-anim-loop` | - -::: diff --git a/example/docs/zh-CN/components/avatar.md b/example/docs/zh-CN/components/avatar.md deleted file mode 100644 index 4726a96..0000000 --- a/example/docs/zh-CN/components/avatar.md +++ /dev/null @@ -1,94 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 圆角头像 -::: - -::: demo - - - - - -::: - -::: title 尺寸大小 -::: - -::: demo - - - - - -::: - -::: title 头像属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| ------ | ---- | -------------- | -| src | 图源 | -- | -| size | 尺寸 | `xs` `sm` `lg` | -| radius | 圆形 | `true` `false` | - -::: diff --git a/example/docs/zh-CN/components/badge.md b/example/docs/zh-CN/components/badge.md deleted file mode 100644 index d2f9747..0000000 --- a/example/docs/zh-CN/components/badge.md +++ /dev/null @@ -1,49 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 徽章属性 -::: - -::: table - -| | | | -| ----- | ---- | --------------------------------------------- | -| type | 类型 | `dot` `rim` | -| theme | 主题 | `orange` `green` `cyan` `blue` `black` `gray` | - -::: diff --git a/example/docs/zh-CN/components/block.md b/example/docs/zh-CN/components/block.md deleted file mode 100644 index 1d2500a..0000000 --- a/example/docs/zh-CN/components/block.md +++ /dev/null @@ -1,59 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 灰色主题 -::: - -::: demo - - - - - -::: - -::: title Block 属性 -::: - -::: table - -| Name | Description | Accepted Values | -| ---- | ----------- | --------------- | -| nm | 灰色样式 | -- | - -::: diff --git a/example/docs/zh-CN/components/breadcrumb.md b/example/docs/zh-CN/components/breadcrumb.md deleted file mode 100644 index 0dc7e11..0000000 --- a/example/docs/zh-CN/components/breadcrumb.md +++ /dev/null @@ -1,102 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 指定分割 -::: - -::: demo - - - - - -::: - -::: title 使用插槽 -::: - -::: demo - - - - - -::: - -::: title 面包屑属性 -::: - -::: table - -| 属性 | 描述 | 默认值 | -| --------- | ------ | ------ | -| separator | 分割符 | `/` | - -::: - -::: title 面包屑插槽 -::: - -::: table - -| 插槽 | 描述 | 默认值 | -| ------- | -------- | ------ | -| default | 默认插槽 | `--` | - -::: diff --git a/example/docs/zh-CN/components/button.md b/example/docs/zh-CN/components/button.md deleted file mode 100644 index 3e771d8..0000000 --- a/example/docs/zh-CN/components/button.md +++ /dev/null @@ -1,307 +0,0 @@ -::: title 基础使用 -::: - -::: demo 使用 lay-button 标签, 创建一个按钮 - - - - - -::: - -::: title 简约按钮 -::: - -::: demo 使用 border 属性设置 主要按钮 边框主题 - - - - - -::: - -::: title 按钮尺寸 -::: - -::: demo 传入 size 属性, 创建指定尺寸的按钮, 可选值 `lg` `sm` `xs` - - - - - -::: - -::: title 流式按钮 -::: - -::: demo 传入 fluid 属性, 创建最大化按钮 - - - - - -::: - -::: title 圆角按钮 -::: - -::: demo 传入 radius 属性,创建圆角按钮 - - - - - -::: - -::: title 按钮分组 -::: - -::: demo 使用 lay-button-group 标签, 创建一个按钮组 - - - - - -::: - -::: title 图标按钮 -::: - -::: demo 结合 lay-icon 组件, 创建图标按钮 - - - - - -::: - -::: title 按钮容器 -::: - -::: demo 使用 lay-button-container 标签, 创建一个按钮容器 - - - - - -::: - -::: title 加载按钮 -::: - -::: demo 传入 loading 属性, 控制按钮的加载状态 - - - - - -::: - -::: title 事件处理 -::: - -::: demo 使用 @click 设置单击回调 - - - - - -::: - -::: title 按钮属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| ------ | ------ | --------------------------------------------- | -| type | 主题 | `primary` `normal` `warm` `danger` `disabled` | -| size | 尺寸 | `lg` `sm` `xs` | -| fluid | 最大化 | `true` `false` | -| radius | 圆角 | `true` `false` | -| border | 边框 | `green` `blue` `orange` `red` `black` | - -::: - -::: title 按钮事件 -::: - -::: table - -| 事件 | 描述 | 参数 | -| ----- | -------- | ---- | -| click | 单击事件 | `--` | - -::: diff --git a/example/docs/zh-CN/components/card.md b/example/docs/zh-CN/components/card.md deleted file mode 100644 index 6eb6ccb..0000000 --- a/example/docs/zh-CN/components/card.md +++ /dev/null @@ -1,129 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - - - -::: - -::: title 卡片插槽 -::: - -::: demo - - - - - - - -::: - -::: title 简单使用 -::: - -::: demo - - - - - - - -::: - -::: title 卡片属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| ----- | ---- | ------ | -| title | 标题 | -- | - -::: - -::: title 卡片插槽 -::: - -::: table - -| 插槽 | 描述 | 可选值 | -| ------ | -------- | ------ | -| header | 头部插槽 | -- | -| body | 内容插槽 | -- | - -::: diff --git a/example/docs/zh-CN/components/carousel.md b/example/docs/zh-CN/components/carousel.md deleted file mode 100644 index b5b841f..0000000 --- a/example/docs/zh-CN/components/carousel.md +++ /dev/null @@ -1,141 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 不同方向 -::: - -::: demo - - - - - -::: - -::: title 控制位置 -::: - -::: demo - - - - - -::: - -::: title 轮播属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| --------- | ------------ | ------------------------- | -| v-model | 当前激活项 | `--` | -| anim | 切换方向 | `default` `updown` | -| indicator | 控制器位置 | `inside` `outside` `none` | -| arrow | 切换按钮状态 | `hover` `always` `none` | - -::: - -::: title 轮播事件 -::: - -::: table - -| 事件 | 描述 | 可选值 | -| ------ | -------- | ------ | -| change | 切换回调 | id | - -::: diff --git a/example/docs/zh-CN/components/checkbox.md b/example/docs/zh-CN/components/checkbox.md deleted file mode 100644 index 77e641e..0000000 --- a/example/docs/zh-CN/components/checkbox.md +++ /dev/null @@ -1,212 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 默认样式 -::: - -::: demo - - - - - -::: - -::: title 复选框组 -::: - -::: demo - - - - - -::: - -::: title 完整案例 -::: - -::: demo - - - - - -::: - -::: title 禁用状态 -::: - -::: demo - - - - - -::: - -::: title 事件回调 -::: - -::: demo - - - - - -::: - -::: title 复选框属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| ------------------- | ------------- | -------------------- | -| name | 原始属性 name | -- | -| skin | 主题 | -- | -| label | 选中值 | -- | -| v-model | 是否选中 | `true` `false` | -| change | 切换事件 | isChecked : 当前状态 | - -::: - -::: title 复选框事件 -::: - -::: table - -| 事件 | 描述 | 可选值 | -| ------ | -------- | -------------------- | -| change | 切换事件 | isChecked : 当前状态 | - -::: diff --git a/example/docs/zh-CN/components/collapse.md b/example/docs/zh-CN/components/collapse.md deleted file mode 100644 index 39c0c6c..0000000 --- a/example/docs/zh-CN/components/collapse.md +++ /dev/null @@ -1,52 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title Collapse 属性 -::: - -::: table - -| Name | Description | Accepted Values | -| -------- | ----------- | --------------- | -| openKeys | 打开的目录 | `array` | - -::: - -::: title Collapse-item 属性 -::: - -::: table - -| Name | Description | Accepted Values | -| ----- | ----------- | --------------- | -| id | 编号 | -- | -| title | 标题 | -- | - -::: diff --git a/example/docs/zh-CN/components/color.md b/example/docs/zh-CN/components/color.md deleted file mode 100644 index 46a9663..0000000 --- a/example/docs/zh-CN/components/color.md +++ /dev/null @@ -1,162 +0,0 @@ -::: title 主色调 -::: - -::: demo - - - - - -::: - -::: title 次色调 -::: - -::: demo - - - - - -::: - -::: title 中性色 -::: - -::: demo - - - - - -::: - -::: title 颜色说明 - -::: - -::: table - -| Class | 描述 | 使用 | -| --------------- | ---- | ----------------------- | -| layui-bg-red | 赤色 | class="layui-bg-red" | -| layui-bg-orange | 橙色 | class="layui-bg-orange" | -| layui-bg-green | 墨绿 | class="layui-bg-green" | -| layui-bg-cyan | 藏青 | class="layui-bg-cyan" | -| layui-bg-blue | 蓝色 | class="layui-bg-blue" | -| layui-bg-black | 雅黑 | class="layui-bg-black" | - -::: diff --git a/example/docs/zh-CN/components/colorPicker.md b/example/docs/zh-CN/components/colorPicker.md deleted file mode 100644 index cbb1b2d..0000000 --- a/example/docs/zh-CN/components/colorPicker.md +++ /dev/null @@ -1,30 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: title icon-picker 属性 -::: - -::: table - -| | | | -| ---------- | -------- | --- | -| v-model | 默认值 | -- | -| page | 开启分页 | -- | -| showSearch | 启用搜索 | -- | - -::: diff --git a/example/docs/zh-CN/components/container.md b/example/docs/zh-CN/components/container.md deleted file mode 100644 index c6809bf..0000000 --- a/example/docs/zh-CN/components/container.md +++ /dev/null @@ -1,77 +0,0 @@ -::: title 普通容器 -::: - -::: demo - - - - - - - -::: - -::: title 流式容器 -::: - -::: demo - - - - - - - -::: - -::: title 容器属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| ----- | ------ | -------------- | -| fluid | 流模式 | `true` `false` | - -::: diff --git a/example/docs/zh-CN/components/dropdown.md b/example/docs/zh-CN/components/dropdown.md deleted file mode 100644 index 7db551d..0000000 --- a/example/docs/zh-CN/components/dropdown.md +++ /dev/null @@ -1,90 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 触发方式 -::: - -::: demo - - - - - -::: - -::: title 下拉属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| ------- | -------- | --------------- | -| trigger | 触发方式 | `click` `hover` | - -::: - -::: title 下拉插槽 -::: - -::: table - -| 插槽 | 描述 | 可选值 | -| ------- | -------- | ------ | -| content | 下拉内容 | -- | - -::: diff --git a/example/docs/zh-CN/components/empty.md b/example/docs/zh-CN/components/empty.md deleted file mode 100644 index beda397..0000000 --- a/example/docs/zh-CN/components/empty.md +++ /dev/null @@ -1,56 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 指定描述 -::: - -::: demo - - - - - -::: - -::: title empty 属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| ----------- | -------- | ------ | -| description | 描述信息 | -- | - -::: diff --git a/example/docs/zh-CN/components/field.md b/example/docs/zh-CN/components/field.md deleted file mode 100644 index 13b3a49..0000000 --- a/example/docs/zh-CN/components/field.md +++ /dev/null @@ -1,70 +0,0 @@ -::: demo - - - - - -::: - -::: demo - - - - - -::: - -::: demo - - - - - -::: - -::: title 字段属性 -::: - -::: table - -| Name | Description | Accepted Values | -| ----- | ----------- | --------------- | -| title | 标题 | -- | - -::: diff --git a/example/docs/zh-CN/components/form.md b/example/docs/zh-CN/components/form.md deleted file mode 100644 index 289d40c..0000000 --- a/example/docs/zh-CN/components/form.md +++ /dev/null @@ -1,76 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 表单事件 -::: - -::: table - -| Name | Description | Accepted Values | -| ----- | ----------- | --------------- | -| model | 表单绑定值 | -- | - -::: - -::: title 表单事件 -::: - -::: table - -| Name | Description | Accepted Values | -| ------ | ----------- | --------------- | -| submit | 提交事件 | -- | - -::: - -::: title 表单项属性 -::: - -::: table - -| Name | Description | Accepted Values | -| ----- | ----------- | --------------- | -| label | 标题名称 | -- | - -::: diff --git a/example/docs/zh-CN/components/grid.md b/example/docs/zh-CN/components/grid.md deleted file mode 100644 index 7f7aa49..0000000 --- a/example/docs/zh-CN/components/grid.md +++ /dev/null @@ -1,166 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - - - -::: - -::: title 栅格偏移 -::: - -::: demo - - - - - - - -::: - -::: title 栅格适应 -::: - -::: demo - - - - - -::: - -::: title 流式布局 -::: - -::: demo - - - - - -::: - -::: title 行属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| ----- | ---- | ------ | -| space | 间隔 | 0 - 30 | - -::: - -::: title 列属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| --------- | ------------------------------ | ------ | -| xs | 尺寸 - 超小屏幕 (手机<768px) | 0 - 12 | -| sm | 尺寸 - 小屏幕 (平板 ≥768px) | 0 - 12 | -| md | 尺寸 - 中等屏幕 (桌面 ≥992px) | 0 - 12 | -| lg | 尺寸 - 大型屏幕 (桌面 ≥1200px) | 0 - 12 | -| xs-offset | 偏移 - 超小屏幕 (手机<768px) | 0 - 12 | -| sm-offset | 偏移 - 小屏幕 (平板 ≥768px) | 0 - 12 | -| md-offset | 偏移 - 中等屏幕 (桌面 ≥992px) | 0 - 12 | -| lg-offset | 偏移 - 大型屏幕 (桌面 ≥1200px) | 0 - 12 | - -::: diff --git a/example/docs/zh-CN/components/icon.md b/example/docs/zh-CN/components/icon.md deleted file mode 100644 index 64a67c7..0000000 --- a/example/docs/zh-CN/components/icon.md +++ /dev/null @@ -1,1119 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 图标颜色 -::: - -::: demo - - - - - -::: - -::: title 图标尺寸 -::: - -::: demo - - - - - -::: - -::: title 图标列表 -::: - -::: demo - - - - - -::: - -::: title 图标属性 -::: - -::: table - -| 属性 | 描述 | 默认值 | -| ------ | ---- | ----------------- | -| type | 图标 | `layui-icon-home` | -| prefix | 前缀 | `layui-icon` | -| color | 颜色 | -- | -| size | 尺寸 | -- | - -::: diff --git a/example/docs/zh-CN/components/iconPicker.md b/example/docs/zh-CN/components/iconPicker.md deleted file mode 100644 index e9d0b09..0000000 --- a/example/docs/zh-CN/components/iconPicker.md +++ /dev/null @@ -1,112 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 默认选择 -::: - -::: demo - - - - - -::: - -::: title 开启分页 -::: - -::: demo - - - - - -::: - -::: title 开启搜索 -::: - -::: demo - - - - - -::: - -::: title icon-picker 属性 -::: - -::: table - -| | | | -| ---------- | -------- | --- | -| v-model | 默认值 | -- | -| page | 开启分页 | -- | -| showSearch | 启用搜索 | -- | - -::: diff --git a/example/docs/zh-CN/components/input.md b/example/docs/zh-CN/components/input.md deleted file mode 100644 index 46197f5..0000000 --- a/example/docs/zh-CN/components/input.md +++ /dev/null @@ -1,131 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 提示信息 -::: - -::: demo - - - - - -::: - -::: title 事件回调 -::: - -::: demo - - - - - -::: - -::: title 禁止输入 -::: - -::: demo - - - - - -::: - -::: title 输入框属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| ----------- | ------------- | -------------- | -| name | 原始属性 name | -- | -| placeholder | 提示信息 | -- | -| disabled | 禁用 | `true` `false` | -| v-model | 值 | -- | - -::: - -::: title 输入框属性 -::: - -::: table - -| 事件 | 描述 | 参数 | -| ----- | --------------- | ---------------- | -| input | 原生 input 事件 | event : 事件对象 | -| foucs | 原生 foucs 事件 | event : 事件对象 | -| blur | 原生 blur 事件 | -- | - -::: diff --git a/example/docs/zh-CN/components/layer.md b/example/docs/zh-CN/components/layer.md deleted file mode 100644 index 80d7d35..0000000 --- a/example/docs/zh-CN/components/layer.md +++ /dev/null @@ -1,274 +0,0 @@ -::: title 基本使用 -::: - -::: demo - - - - - -::: - -::: title 允许拖动 -::: - -::: demo - - - - - -::: - -::: title 放大缩小 -::: - -::: demo - - - - - -::: - -::: title 指定位置 -::: - -::: demo - - - - - -::: - -::: title 远程窗体 -::: - -::: demo - - - - - -::: - -::: title 定义操作 -::: - -::: demo - - - - - -::: - -::: title 开启遮盖 -::: - -::: demo - - - - - -::: - -::: title 弹层属性 -::: - -::: table - -| 备注 | 描述 | 默认值 | -| --------------- | ------------- | -------------------------- | -| title | 标题 | -- | -| move | 允许拖拽 | `false` | -| maxmin | 最小化 最大化 | `false` | -| offset | 位置 | -- | -| width | 宽 | -- | -| height | 高 | -- | -| v-model:visible | 展示 隐藏 | false | -| content | 内容 | -- | -| shade | 开启遮盖 | -- | -| shadeClose | 遮盖点击关闭 | -- | -| zIndex | 自定义层级 | -- | -| type | 类型 | `1: component` `2: iframe` | -| closeBtn | 显示关闭 | true | -| btn | 按钮 | | -| btnAlign | 按钮布局 | `l` `r` `c` | -| anim | 入场动画 | `0` `-` `6` | -| isOutAnim | 关闭动画 | `true` `false` | - -::: diff --git a/example/docs/zh-CN/components/layout.md b/example/docs/zh-CN/components/layout.md deleted file mode 100644 index 8d940cd..0000000 --- a/example/docs/zh-CN/components/layout.md +++ /dev/null @@ -1,186 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - - - -::: - -::: title 左右布局 -::: - -::: demo - - - - - -::: - -::: title 后台布局 -::: - -::: demo - - - - - -::: - -::: title 复杂布局 -::: - -::: demo - - - - - -::: - -
-
- -::: title 布局组件 -::: - -::: table - -| 组件 | 描述 | | -| ---------- | ---- | --- | -| lay-layout | 容器 | -- | -| lay-header | 顶部 | -- | -| lay-logo | 图标 | -- | -| lay-side | 侧边 | -- | -| lay-body | 内容 | -- | -| lay-footer | 底部 | -- | - -::: diff --git a/example/docs/zh-CN/components/line.md b/example/docs/zh-CN/components/line.md deleted file mode 100644 index 19676f0..0000000 --- a/example/docs/zh-CN/components/line.md +++ /dev/null @@ -1,43 +0,0 @@ -::: demo - - - - - -::: - -::: title 分割属性 -::: - -::: table - -| Name | Description | Accepted Values | -| ----- | ----------- | --------------------------------------------- | -| theme | 主题 | `orange` `green` `cyan` `blue` `black` `gray` | - -::: diff --git a/example/docs/zh-CN/components/menu.md b/example/docs/zh-CN/components/menu.md deleted file mode 100644 index a8f7b7e..0000000 --- a/example/docs/zh-CN/components/menu.md +++ /dev/null @@ -1,101 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 垂直导航 -::: - -::: demo - - - - - -::: - -::: title 菜单属性 -::: - -::: table - -| 属性 | 描述 | 备注 | -| ------------------- | ------ | ---- | -| v-model:selectedKey | 选中项 | -- | -| v-model:openKeys | 打开项 | -- | - -::: - -::: title 菜单插槽 -::: - -::: table - -| 插槽 | 描述 | 备注 | -| ----- | -------- | ---- | -| title | 菜单标题 | -- | - -::: diff --git a/example/docs/zh-CN/components/page.md b/example/docs/zh-CN/components/page.md deleted file mode 100644 index 5e8bb3c..0000000 --- a/example/docs/zh-CN/components/page.md +++ /dev/null @@ -1,234 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 简单模式 -::: - -::: demo - - - - - -::: - -::: title 插槽使用 -::: - -::: demo - - - - - -::: - -::: title 不同主题 -::: - -::: demo - - - - - -::: - -::: title 完整分页 -::: - -::: demo - - - - - -::: - -::: title 切换事件 -::: - -::: demo - - - - - -::: - -::: title 分页属性 -::: - -::: table - -| 属性 | 描述 | 默认值 | -| ----------- | ------------ | ------- | -| limit | 每页数量 | -- | -| total | 总条数 | -- | -| showCount | 显示总数 | `false` | -| showPage | 显示每页 | `false` | -| showLimit | 显示每页数量 | `false` | -| showRefresh | 显示刷新按钮 | `false` | -| showSkip | 显示跳转 | `false` | - -::: - -::: title 分页事件 -::: - -::: table - -| 事件 | 描述 | 参数 | -| ---- | -------- | --------------------- | -| jump | 切换回调 | { current: 当前页面 } | - -::: - -::: title 分页插槽 -::: - -::: table - -| 插槽 | 描述 | 默认值 | -| ---- | ------ | ------ | -| prev | 上一页 | 上一页 | -| next | 下一页 | 下一页 | - -::: diff --git a/example/docs/zh-CN/components/panel.md b/example/docs/zh-CN/components/panel.md deleted file mode 100644 index bb65a5e..0000000 --- a/example/docs/zh-CN/components/panel.md +++ /dev/null @@ -1,33 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 面板插槽 -::: - -::: table - -| 插槽 | 描述 | 可选值 | -| ------- | -------- | ------ | -| default | 默认插槽 | -- | - -::: diff --git a/example/docs/zh-CN/components/progress.md b/example/docs/zh-CN/components/progress.md deleted file mode 100644 index c94f64e..0000000 --- a/example/docs/zh-CN/components/progress.md +++ /dev/null @@ -1,127 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 尺寸大小 -::: - -::: demo - - - - - -::: - -::: title 指定主题 -::: - -::: demo - - - - - -::: - -::: title 显示文字 -::: - -::: demo - - - - - -::: - -::: title 进度属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| -------- | -------- | --------------------------------------------- | -| percent | 进度 | -- | -| theme | 主题 | `orange` `green` `cyan` `blue` `black` `gray` | -| size | 尺寸 | `big` | -| text | 提示 | -- | -| color | 颜色 | -- | -| showText | 展示描述 | -- | - -::: diff --git a/example/docs/zh-CN/components/radio.md b/example/docs/zh-CN/components/radio.md deleted file mode 100644 index e57707f..0000000 --- a/example/docs/zh-CN/components/radio.md +++ /dev/null @@ -1,119 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 禁用状态 -::: - -::: demo - - - - - -::: - -::: title 事件回调 -::: - -::: demo - - - - - -::: - -::: title 单选框属性 -::: - -::: table - -| 属性 | 描述 | 默认值 | -| ------- | ------------- | ------ | -| name | 原始属性 name | -- | -| label | 当前值 | -- | -| v-model | 选中值 | -- | - -::: - -::: title 单选框事件 -::: - -::: table - -| 事件 | 描述 | 参数 | -| ------ | -------- | ---------------- | -| change | 切换事件 | current : 当前值 | - -::: diff --git a/example/docs/zh-CN/components/rate.md b/example/docs/zh-CN/components/rate.md deleted file mode 100644 index 96f2424..0000000 --- a/example/docs/zh-CN/components/rate.md +++ /dev/null @@ -1,148 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 响应结果 -::: - -::: demo - - - - - -::: - -::: title 指定长度 -::: - -::: demo - - - - - -::: - -::: title 只读模式 -::: - -::: demo - - - - - -::: - -::: title 定义主题 -::: - -::: demo - - - - - -::: - -::: title 评分属性 -::: - -::: table - -| 属性 | 描述 | 默认值 | -| -------- | -------- | ------ | -| v-model | 评分值 | -- | -| length | 评分长度 | -- | -| readonly | 只读模式 | -- | - -::: diff --git a/example/docs/zh-CN/components/select.md b/example/docs/zh-CN/components/select.md deleted file mode 100644 index 8765bf9..0000000 --- a/example/docs/zh-CN/components/select.md +++ /dev/null @@ -1,102 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 选择禁用 -::: - -::: demo - - - - - -::: - -::: title select 属性 -::: - -::: table - -| Name | Description | Accepted Values | -| ------- | -------------- | --------------- | -| name | 原生 name 属性 | -- | -| v-model | 选中值 | -- | - -::: - -::: title select-option 属性 -::: - -::: table - -| Name | Description | Accepted Values | -| ----- | ----------- | --------------- | -| label | 标签 | -- | -| value | 值 | -- | - -::: - -::: title select-option 插槽 -::: - -::: table - -| Name | Description | Accepted Values | -| ------- | ----------- | --------------- | -| default | 默认 | -- | - -::: - -::: title select 事件 -::: - -::: table - -| Name | Description | Accepted Values | -| ------ | ----------- | --------------- | -| change | 切换事件 | value | - -::: diff --git a/example/docs/zh-CN/components/slider.md b/example/docs/zh-CN/components/slider.md deleted file mode 100644 index 8f3e6c7..0000000 --- a/example/docs/zh-CN/components/slider.md +++ /dev/null @@ -1,42 +0,0 @@ -::: demo - - - - - -::: - -::: demo - - - - - -::: \ No newline at end of file diff --git a/example/docs/zh-CN/components/switch.md b/example/docs/zh-CN/components/switch.md deleted file mode 100644 index 3ee8a87..0000000 --- a/example/docs/zh-CN/components/switch.md +++ /dev/null @@ -1,135 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 事件回调 -::: - -::: demo - - - - - -::: - -::: title 禁用状态 -::: - -::: demo - - - - - -::: - -::: title 修改描述 -::: - -::: demo - - - - - -::: - -::: title 开关属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| ------------- | -------------- | -------------- | -| name | 原生 name 属性 | -- | -| v-model | 是否启用 | `true` `false` | -| disabled | 禁用 | `true` `false` | -| active-text | 启用描述 | `启动` | -| inactive-text | 禁用描述 | `禁用` | - -::: - -::: title 开关事件 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| ------ | -------- | ---------------- | -| change | 切换事件 | current : 当前值 | - -::: diff --git a/example/docs/zh-CN/components/tab.md b/example/docs/zh-CN/components/tab.md deleted file mode 100644 index b2fcc2e..0000000 --- a/example/docs/zh-CN/components/tab.md +++ /dev/null @@ -1,192 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 简约模式 -::: - -::: demo - - - - - -::: - -::: title 卡片模式 -::: - -::: demo - - - - - -::: - -::: title 允许关闭 -::: - -::: demo - - - - - -::: - -::: title 嵌套循环 -::: - -::: demo - - - - - -::: - -::: title 选项卡属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| ----------- | -------- | -------------- | -| v-model | 当前激活 | -- | -| type | 主题样式 | -- | -| allow-close | 允许关闭 | `true` `false` | - -::: - -::: title 选项卡事件 -::: - -::: table - -| 事件 | 描述 | 参数 | -| ------ | -------- | ---- | -| change | 选中切换 | -- | -| close | 关闭事件 | -- | - -::: diff --git a/example/docs/zh-CN/components/table.md b/example/docs/zh-CN/components/table.md deleted file mode 100644 index cbb312e..0000000 --- a/example/docs/zh-CN/components/table.md +++ /dev/null @@ -1,311 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 不同尺寸 -::: - -::: demo - - - - - -::: - -::: title 开启分页 -::: - -::: demo - - - - - -::: - -::: title 完整表格 -::: - -::: demo - - - - - -::: - -::: title 表格属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| ------------------------ | ---------- | -------------- | -| columns | 列配置 | -- | -| dataSource | 数据源 | -- | -| checkbox | 开启复现框 | -- | -| id | 主键 | -- | -| selectedKeys ( v-model ) | 选中项 | -- | -| default-toolbar | 开启工具栏 | `lg` `md` `sm` | -| size | 尺寸 | -- | - -::: - -::: title 表格事件 -::: - -::: table - -| 属性 | 描述 | 参数 | -| ---------- | ------ | ------------- | -| row | 行单击 | data : 当前行 | -| row-double | 行双击 | data : 当前行 | - -::: - -::: title 表格插槽 -::: - -::: table - -| 插槽 | 描述 | 默认 | -| ------- | ------------ | ---- | -| toolbar | 自定义工具栏 | -- | - -::: diff --git a/example/docs/zh-CN/components/textarea.md b/example/docs/zh-CN/components/textarea.md deleted file mode 100644 index cc3c8a3..0000000 --- a/example/docs/zh-CN/components/textarea.md +++ /dev/null @@ -1,110 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 事件回调 -::: - -::: demo - - - - - -::: - -::: title 禁止输入 -::: - -::: demo - - - - - -::: - -::: title 文本域属性 -::: - -::: table - -| 属性 | 描述 | 可选值 | -| ----------- | ------------- | -------------- | -| name | 原始属性 name | -- | -| placeholder | 提示信息 | -- | -| disabled | 禁用 | `true` `false` | -| v-model | 值 | -- | - -::: - -::: title 文本域事件 -::: - -::: table - -| 事件 | 描述 | 可选值 | -| ----- | --------------- | ---------------- | -| input | 原生 input 事件 | event : 事件对象 | -| foucs | 原生 foucs 事件 | event : 事件对象 | -| blur | 原生 blur 事件 | -- | - -::: diff --git a/example/docs/zh-CN/components/timeline.md b/example/docs/zh-CN/components/timeline.md deleted file mode 100644 index 43b5036..0000000 --- a/example/docs/zh-CN/components/timeline.md +++ /dev/null @@ -1,85 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 简单模式 -::: - -::: demo - - - - - -::: - -::: title timeline-item attributes -::: - -::: table - -| | | | -| ------ | -------- | --- | -| simple | 简单模式 | -- | -| title | 标题 | -- | - -::: diff --git a/example/docs/zh-CN/components/transfer.md b/example/docs/zh-CN/components/transfer.md deleted file mode 100644 index ba2f79a..0000000 --- a/example/docs/zh-CN/components/transfer.md +++ /dev/null @@ -1,108 +0,0 @@ -::: title 基础使用 -::: - -::: demo - - - - - -::: - -::: title 指定标题 -::: - -::: demo - - - - - -::: - -::: title 使用插槽 -::: - -::: demo - - - - - -::: - -::: title transfer 属性 -::: - -::: table - -| Name | Description | Accepted Values | -| ---------- | ----------- | --------------- | -| dataSource | 数据来源 | -- | -| title | 标题 | -- | -| id | 主键 | -- | - -::: - -::: title transfer 插槽 -::: - -::: table - -| Name | Description | Accepted Values | -| ---- | ----------- | --------------- | -| item | 列表项 | { data } | - -::: diff --git a/example/docs/zh-CN/components/tree.md b/example/docs/zh-CN/components/tree.md deleted file mode 100644 index acdd05e..0000000 --- a/example/docs/zh-CN/components/tree.md +++ /dev/null @@ -1,255 +0,0 @@ -::: demo - - - - - -::: - -::: title tree attributes -::: - -::: table - -| Name | Description | Accepted Values | -| -------------------------------- | ---------------------------------------- | --------------- | -| data | 树型组件数据,类型 TreeData \| TreeData[] | null | -| showCheckbox | 是否显示复选框 | false | -| onlyIconControl | 是否仅允许节点左侧图标控制展开收缩 | false | -| showLine | 是否开启连接线 | true | -| checkedKeys(v-model:checkedKeys) | 开启 showCheckbox 后, 选中的节点 | [] | - -::: - -::: title TreeData -::: - -::: table - -| Name | Description | Accepted Values | -| -------- | -------------- | --------------- | -| id | 唯一值 | - | -| title | 节点名称 | - | -| children | 子节点 | [] | -| disabled | 该节点是否禁用 | false | -| spread | 该节点是否展开 | false | - -::: - -::: title tree events -::: - -::: table - -| Name | Description | Accepted Params | -| ---------- | --------------- | --------------- | -| node-click | 节点 click 事件 | -- | - -::: diff --git a/example/docs/zh-CN/guide/changelog.md b/example/docs/zh-CN/guide/changelog.md deleted file mode 100644 index a3e350d..0000000 --- a/example/docs/zh-CN/guide/changelog.md +++ /dev/null @@ -1,164 +0,0 @@ -::: title 更新记录 -::: - - - - - - - -::: demo - - - - -::: diff --git a/example/docs/zh-CN/guide/contribution.md b/example/docs/zh-CN/guide/contribution.md deleted file mode 100644 index 54b084c..0000000 --- a/example/docs/zh-CN/guide/contribution.md +++ /dev/null @@ -1,2 +0,0 @@ -::: title 贡献代码 -::: diff --git a/example/docs/zh-CN/guide/getStarted.md b/example/docs/zh-CN/guide/getStarted.md deleted file mode 100644 index 793df67..0000000 --- a/example/docs/zh-CN/guide/getStarted.md +++ /dev/null @@ -1,54 +0,0 @@ -::: title 快速上手 -::: - -
- -::: describe 这里是 Layui 的 Vue 实现,开发和服务于企业级后台产品。 -::: - - - -
-
-
- -::: describe 1.使用 npm 下载 -::: - -``` -npm install @layui/layui-vue --save -``` - -
- -::: describe 2.在 main.ts 中依赖 -::: - -```js -import App from './App.vue' -import { createApp } from 'vue' -import Layui from '@layui/layui-vue' -import '@layui/layui-vue/lib/layui.css' - -createApp(App).use(Layui).mount('#app') -``` - -
- -::: describe 3.在 index.vue 使用 -::: - -```html - - - Layui Admin - - - - - - pearadmin.com - -``` - -- 前往: [layui-vue-sample](https://gitee.com/layui-vue/layui-vue-sample) diff --git a/example/docs/zh-CN/guide/introduce.md b/example/docs/zh-CN/guide/introduce.md deleted file mode 100644 index 8e57741..0000000 --- a/example/docs/zh-CN/guide/introduce.md +++ /dev/null @@ -1,19 +0,0 @@ -::: title 基本介绍 -::: - - - -
- -::: block - -layui - vue(谐音:类 UI) 是 一 套 Vue 3.0 的 桌 面 端 组 件 库 , Layui 的 另 一 种 呈 现 方 式 - -::: - - - - - - - diff --git a/example/docs/zh-CN/guide/norms.md b/example/docs/zh-CN/guide/norms.md deleted file mode 100644 index 2531f05..0000000 --- a/example/docs/zh-CN/guide/norms.md +++ /dev/null @@ -1,2 +0,0 @@ -::: title 开发规范 -::: \ No newline at end of file diff --git a/example/docs/zh-CN/guide/problem.md b/example/docs/zh-CN/guide/problem.md deleted file mode 100644 index ddcf1b9..0000000 --- a/example/docs/zh-CN/guide/problem.md +++ /dev/null @@ -1,2 +0,0 @@ -::: title 常见问题 -::: diff --git a/example/docs/zh-CN/guide/sandbox.md b/example/docs/zh-CN/guide/sandbox.md deleted file mode 100644 index 54aaf14..0000000 --- a/example/docs/zh-CN/guide/sandbox.md +++ /dev/null @@ -1,23 +0,0 @@ -::: title 沙盒环境 -::: - -::: demo - - - - - -::: diff --git a/example/docs/zh-CN/hooks/useClickOutside.md b/example/docs/zh-CN/hooks/useClickOutside.md deleted file mode 100644 index ddd56b6..0000000 --- a/example/docs/zh-CN/hooks/useClickOutside.md +++ /dev/null @@ -1,42 +0,0 @@ -::: title 基础使用 -::: - -::: block 使 用 useClickOutside 监 听 元 素 外 click 事 件 -::: - -```vue - - - -``` - -::: title 使用备注 -::: - -::: table - -| 备注 | 描述 | 类型 | -| -------------- | --------------- | ---- | -| isClickOutside | 使用 watch 监听 | Ref | - -::: diff --git a/example/docs/zh-CN/hooks/useFullScreen.md b/example/docs/zh-CN/hooks/useFullScreen.md deleted file mode 100644 index ec0d831..0000000 --- a/example/docs/zh-CN/hooks/useFullScreen.md +++ /dev/null @@ -1,42 +0,0 @@ -::: title 基础使用 -::: - -::: block 使 用 useMove 为 元 素 提 供 拖 拽 支 持 -::: - -```vue - - - -``` - -::: title 使用备注 -::: - -::: table - -| 事件 | 描述 | 类型 | -| ------------ | -------- | -------- | -| fullScreen | 全屏切换 | Function | -| isFullScreen | 当前状态 | Ref | - -::: diff --git a/example/docs/zh-CN/hooks/useMove.md b/example/docs/zh-CN/hooks/useMove.md deleted file mode 100644 index c3dc7d9..0000000 --- a/example/docs/zh-CN/hooks/useMove.md +++ /dev/null @@ -1,37 +0,0 @@ -::: title 基础使用 -::: - -::: block 使 用 useFullScreen 快 速 完 成 fullScreen 操 作 -::: - -```vue - - - -``` - -::: title 使用备注 -::: - -::: table - -| 备注 | 描述 | 类型 | -| ---- | -------------- | ----------- | -| el | 需要拖拽的元素 | HtmlElement | - -::: diff --git a/example/src/App.vue b/example/src/App.vue index b3b7c07..b3d096d 100644 --- a/example/src/App.vue +++ b/example/src/App.vue @@ -1,13 +1,7 @@ \ No newline at end of file diff --git a/example/src/components/HelloWord.vue b/example/src/components/HelloWord.vue index 2287cdc..f3ce001 100644 --- a/example/src/components/HelloWord.vue +++ b/example/src/components/HelloWord.vue @@ -1,11 +1,17 @@ @@ -14,24 +20,33 @@ import { ref, h } from "vue"; import { LayLayer, layer } from "../../../src/index"; const visible = ref(false); +const drawerVisible = ref(false); +const interiorDrawerVisible = ref(false); const onChangeVisible = () => { visible.value = true; } +const onChangeDrawerVisible = () => { + drawerVisible.value = true; +} + +const onChangeInteriorDrawerVisible = () => { + interiorDrawerVisible.value = true; +} + var instance = null; const openModal = () => { instance = layer.open({ content: "内容", area: ['500px', '500px'], - shade: false, maxmin: true }) } const openMsg = () => { - layer.msg("普通消息", { icon: 2, time: 100000 }) + layer.msg("普通消息", { icon: 2, time: 1000 }) } const close = () => { @@ -47,8 +62,17 @@ const openIframe = function () { title: "标题", maxmin: true, resize: true, - content: "https://finalsummer.gitee.io/layervue/", + content: "http://layui-vue.pearadmin.com", }); }; + +const openDrawer = () => { + layer.drawer({ + title: "抽屉", + content: "抽屉内容", + offset: "b", + area: "300px", + }) +} diff --git a/example/src/components/func/CompositionAPITest.vue b/example/src/components/func/CompositionAPITest.vue deleted file mode 100644 index cc3e2e9..0000000 --- a/example/src/components/func/CompositionAPITest.vue +++ /dev/null @@ -1,145 +0,0 @@ - - - - - diff --git a/example/src/components/func/OptionAPITest.vue b/example/src/components/func/OptionAPITest.vue deleted file mode 100644 index 3a6c726..0000000 --- a/example/src/components/func/OptionAPITest.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - \ No newline at end of file diff --git a/example/src/components/func/Test.vue b/example/src/components/func/Test.vue deleted file mode 100644 index 2e5d275..0000000 --- a/example/src/components/func/Test.vue +++ /dev/null @@ -1,48 +0,0 @@ - - \ No newline at end of file diff --git a/example/src/components/func/UserForm.vue b/example/src/components/func/UserForm.vue deleted file mode 100644 index 297a3de..0000000 --- a/example/src/components/func/UserForm.vue +++ /dev/null @@ -1,29 +0,0 @@ - - \ No newline at end of file diff --git a/example/src/components/func/UserList.vue b/example/src/components/func/UserList.vue deleted file mode 100644 index 87463a9..0000000 --- a/example/src/components/func/UserList.vue +++ /dev/null @@ -1,193 +0,0 @@ - - - \ No newline at end of file diff --git a/example/src/main.ts b/example/src/main.ts index a468319..7fc8a01 100644 --- a/example/src/main.ts +++ b/example/src/main.ts @@ -1,6 +1,4 @@ import { createApp } from 'vue' import App from "./App.vue" -import Layui from '@layui/layui-vue' -import '@layui/layui-vue/lib/index.css' -createApp(App).use(Layui).mount('#app') \ No newline at end of file +createApp(App).mount('#app') \ No newline at end of file diff --git a/package.json b/package.json index 66fe7bd..cba0b37 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@layui/layer-vue", - "version": "1.2.4", + "version": "1.2.5", "description": "a component library for Vue 3 base on layui-vue", "homepage": "https://gitee.com/layui-vue/layui-vue/blob/master/README.md", "module": "lib/layer-vue.es.js", @@ -28,12 +28,8 @@ ], "author": "就眠儀式", "license": "MIT", - "peerDependencies": { - "vue": "^3.2.26" - }, "dependencies": { - "@layui/layui-vue": "^0.3.3", - "vue": "^3.2.26" + "vue": "^3.2.27" }, "devDependencies": { "@babel/core": "^7.15.8", @@ -44,8 +40,8 @@ "@types/markdown-it-container": "^2.0.4", "@types/node": "^16.11.9", "@vitejs/plugin-vue": "^1.9.3", - "@vue/compiler-sfc": "^3.2.26", - "@vue/server-renderer": "^3.2.26", + "@vue/compiler-sfc": "^3.2.27", + "@vue/server-renderer": "^3.2.27", "escape-html": "^1.0.3", "less": "^4.1.2", "markdown-it-container": "^3.0.0", diff --git a/src/css/layer.css b/src/css/layer.css index ce7f6c1..ee0ff21 100644 --- a/src/css/layer.css +++ b/src/css/layer.css @@ -99,6 +99,284 @@ html #layuicss-layer { -webkit-animation-duration: .3s; animation-duration: .3s } +/* 抽屉开始 */ +/* right to left */ +@keyframes layer-rl { + from { + -webkit-transform: translate3d(100%, 0, 0); + -ms-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + opacity: 0; + + } + to { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@-webkit-keyframes layer-rl { + from { + -webkit-transform: translate3d(100%, 0, 0); + -ms-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + opacity: 0; + + } + to { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.layer-anim-rl { + -webkit-animation-name: layer-rl; + animation-name: layer-rl; + /* animation-timing-function:cubic-bezier(0.7, 0.3, 0.1, 1); */ +} + +/* right to left close */ +@keyframes layer-rl-close { + from { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + + } + to { + -webkit-transform: translate3d(100%, 0, 0); + -ms-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@-webkit-keyframes layer-rl-close { + from { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + + } + to { + -webkit-transform: translate3d(100%, 0, 0); + -ms-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.layer-anim-rl-close { + -webkit-animation-name: layer-rl-close; + animation-name: layer-rl-close; + /* animation-timing-function:cubic-bezier(0.7, 0.3, 0.1, 1); */ +} +/* left to right */ +@-webkit-keyframes layer-lr { + from { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 0 + } + to { + -webkit-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + opacity: 1 + } +} + +@keyframes layer-lr { + from { + -webkit-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + opacity: 0 + } + to { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1 + } +} +.layer-anim-lr { + -webkit-animation-name: layer-lr; + animation-name: layer-lr +} + +/* left to right close */ +@-webkit-keyframes layer-lr-close { + from { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + to { + -webkit-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes layer-lr-close { + from { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + to { + -webkit-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} +.layer-anim-lr-close { + -webkit-animation-name: layer-lr-close; + animation-name: layer-lr-close +} + +/* top to bottom */ +@-webkit-keyframes layer-tb { + from { + -webkit-transform: translate3d(0, -100%, 0); + -ms-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + opacity: 0; + animation-timing-function:cubic-bezier(0.7, 0.3, 0.1, 1); + } + to { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + animation-timing-function:cubic-bezier(0.7, 0.3, 0.1, 1); + } +} + +@keyframes layer-tb { + from { + -webkit-transform: translate3d(0, -100%, 0); + -ms-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + opacity: 0; + animation-timing-function:cubic-bezier(0.7, 0.3, 0.1, 1); + } + to { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + animation-timing-function:cubic-bezier(0.7, 0.3, 0.1, 1); + } +} +.layer-anim-tb { + -webkit-animation-name: layer-tb; + animation-name: layer-tb +} + +/* top to bottom close */ +@-webkit-keyframes layer-tb-close { + from { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + to { + -webkit-transform: translate3d(0, -100%, 0); + -ms-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes layer-tb-close { + from { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + to { + -webkit-transform: translate3d(0, -100%, 0); + -ms-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} +.layer-anim-tb-close { + -webkit-animation-name: layer-tb-close; + animation-name: layer-tb-close +} + +/* bottom to top */ +@-webkit-keyframes layer-bt { + from { + -webkit-transform: translate3d(0, 100%, 0); + -ms-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + opacity: 0 + } + to { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1 + } +} + +@keyframes layer-bt { + from { + -webkit-transform: translate3d(0, 100%, 0); + -ms-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + opacity: 0 + } + to { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1 + } +} +.layer-anim-bt { + -webkit-animation-name: layer-bt; + animation-name: layer-bt +} + +/* bottom to top close */ +@-webkit-keyframes layer-bt-close { + from { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + to { + -webkit-transform: translate3d(0, 100%, 0); + -ms-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes layer-bt-close { + from { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + + } + to { + -webkit-transform: translate3d(0, 100%, 0); + -ms-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + + } +} +.layer-anim-bt-close { + -webkit-animation-name: layer-bt-close; + animation-name: layer-bt-close +} +/* 抽屉结束 */ @-webkit-keyframes layer-bounceIn { 0% { diff --git a/src/layer/index.ts b/src/layer/index.ts index 592cd11..e7e0def 100644 --- a/src/layer/index.ts +++ b/src/layer/index.ts @@ -69,6 +69,13 @@ const layer = { let defaultOption = {}; return layer.create(option, defaultOption, callback); }, + // 抽屉 + drawer: (option: any, callback: Function) => { + let defaultOption = { + type:"drawer", + }; + return layer.create(option, defaultOption, callback); + }, // 消息框 msg: (message: string, option: any, callback: Function) => { let defaultOption = { diff --git a/src/module/modal/index.vue b/src/module/modal/index.vue index 820b0ff..ed70cc0 100644 --- a/src/module/modal/index.vue +++ b/src/module/modal/index.vue @@ -20,6 +20,8 @@ import { minArea, minOffset, updateMinArrays, + getDrawerAnimationClass, + calculateDrawerArea, } from "../../tools"; import useMove from "../../tools/useMove"; @@ -43,7 +45,7 @@ export interface LayModalProps { btn?: Record[] | false; move?: boolean | string; resize?: boolean | string; - type?: 0 | 1 | 2 | 3 | "dialog" | "component" | "iframe" | "loading"; + type?: 0 | 1 | 2 | 3 | "dialog" | "component" | "iframe" | "loading" | "drawer"; content?: string | Function | object | VNodeTypes isHtmlFragment?: boolean; shade?: boolean | string; @@ -99,8 +101,8 @@ const id: Ref = ref(nextId()); const max: Ref = ref(false); const min: Ref = ref(false); const type: number = calculateType(props.type); -const area: Ref = ref(calculateArea(props.area)); -const offset: Ref = ref(calculateOffset(props.offset, area)); +const area: Ref = props.type != "drawer" ? ref(calculateArea(props.area)) : ref(calculateDrawerArea(props.offset, props.area)); +const offset: Ref = ref(calculateOffset(props.offset, area, props.type)); const contentHeight = ref(calculateContent(area.value[1], props.btn, type)); const index: Ref = ref(props.zIndex); const visible: Ref = ref(false); @@ -122,7 +124,7 @@ const _l: Ref = ref(offset.value[1]); const firstOpenDelayCalculation = function () { setTimeout(() => { area.value = getArea(layero.value); - offset.value = calculateOffset(props.offset, area.value); + offset.value = calculateOffset(props.offset, area.value, props.type); w.value = area.value[0]; h.value = area.value[1]; t.value = offset.value[0]; @@ -241,7 +243,7 @@ const setTopHandle = () => { // 拖拽支持 const supportMove = function () { - if (props.move) { + if (props.move && props.type != "drawer") { if (layero.value != null) { // @ts-ignore useMove(layero.value, (width, height, left, top) => { @@ -269,11 +271,17 @@ const styles = computed(() => { // 入场动画 const enterActiveClass = computed(() => { + if(props.type === "drawer"){ + return getDrawerAnimationClass(props.offset) + } return `layer-anim layer-anim-0${props.anim}`; }); // 出场动画 const leaveActiveClass = computed(() => { + if(props.type === "drawer"){ + return getDrawerAnimationClass(props.offset,true); + } return props.isOutAnim ? `layer-anim-close` : ""; }); diff --git a/src/tools/index.ts b/src/tools/index.ts index 39544b2..971c481 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -50,10 +50,13 @@ export function calculateArea(area: any) { // @param offset // @param domSize // @return 正确位置 -export function calculateOffset(offset: any, area: any) { +export function calculateOffset(offset: any, area: any, type: any) { var arr = ['t', 'r', 'b', 'l', 'lt', 'lb', 'rt', 'rb'] var t = offset[0]; var l = offset[1]; + if(offset instanceof Array && type === "drawer"){ + offset = 'r'; + } // @ts-ignore if (arr.indexOf(offset) > -1) { t = '50%'; @@ -80,7 +83,7 @@ export function calculateOffset(offset: any, area: any) { export function calculateType(modalType: number | string) { if(modalType === 'dialog' || modalType === 0 || modalType === '0'){ return 0; - }else if(modalType === 'component' || modalType === 1 || modalType === '1'){ + }else if(modalType === 'component' || modalType === 'drawer' || modalType === 1 || modalType === '1'){ return 1; }else if(modalType === 'iframe' || modalType === 2 || modalType === '2'){ return 2; @@ -171,4 +174,36 @@ export function updateMinArrays(id: string, state: Boolean) { i = -1; } return i; -} \ No newline at end of file +} + +// 抽屉动画类 +export function getDrawerAnimationClass(offset: any,isClose: boolean = false){ + const prefix = "layer-anim layer-anim"; + let suffix = "rl"; + if(offset === "l"){ + suffix = "lr"; + }else if(offset === "r"){ + suffix = "rl" + }else if(offset === "t"){ + suffix = "tb" + }else if(offset === "b"){ + suffix = "bt" + } + return isClose ? `${prefix}-${suffix}-close` : `${prefix}-${suffix}`; +} + +// 抽屉宽/高 +export function calculateDrawerArea(offset: any, drawerArea: string[] | string = "350px"){ + if(drawerArea instanceof Array){ + return drawerArea; + } + if(drawerArea === "auto"){ + drawerArea = "350px"; + } + if(offset === "l" || offset === "r"){ + return [drawerArea, "100%"]; + }else if(offset === "t" || offset === "b"){ + return ["100%", drawerArea]; + } + return [drawerArea,"100%"]; +} -- Gitee