新年的第一次提交

This commit is contained in:
就眠儀式 2022-02-01 07:23:20 +08:00
parent 5fe02df5db
commit 126d20bc3f
77 changed files with 1393 additions and 1297 deletions

6
build.less.ts Normal file
View File

@ -0,0 +1,6 @@
/**
* merge less file
* <p>
*/

View File

@ -12,7 +12,6 @@
<lay-button type="normal">百搭按钮</lay-button> <lay-button type="normal">百搭按钮</lay-button>
<lay-button type="warm">暖色按钮</lay-button> <lay-button type="warm">暖色按钮</lay-button>
<lay-button type="danger">警告按钮</lay-button> <lay-button type="danger">警告按钮</lay-button>
<lay-button type="disabled">禁用按钮</lay-button>
</template> </template>
<script> <script>

View File

@ -2,11 +2,11 @@
<div class="lay-code"> <div class="lay-code">
<div id="source" class="source"> <div id="source" class="source">
<slot /> <slot />
</div>
<div ref="meta" class="meta">
<div v-if="$slots.description" class="description"> <div v-if="$slots.description" class="description">
<slot name="description" /> <slot name="description" />
</div> </div>
</div>
<div ref="meta" class="meta">
<div class="language-html"> <div class="language-html">
<slot name="code" /> <slot name="code" />
</div> </div>
@ -133,6 +133,7 @@ function handleScroll() {
} }
.lay-code .source { .lay-code .source {
padding: 24px; padding: 24px;
padding-bottom:15px;
} }
.lay-code .meta { .lay-code .meta {
padding: 0 10px; padding: 0 10px;
@ -141,9 +142,10 @@ function handleScroll() {
overflow: hidden; overflow: hidden;
transition: height 0.2s; transition: height 0.2s;
} }
.lay-code .meta .description { .lay-code .source .description {
padding: 20px; padding: 20px;
margin: 10px 0; margin: 20px 0;
margin-bottom: 0px;
border: 1px solid whitesmoke; border: 1px solid whitesmoke;
box-sizing: border-box; box-sizing: border-box;
background: var(--c-bg); background: var(--c-bg);
@ -152,11 +154,11 @@ function handleScroll() {
color: var(--c-text-light-1); color: var(--c-text-light-1);
word-break: break-word; word-break: break-word;
} }
.lay-code .meta .description p { .lay-code .source .description p {
margin: 0 !important; margin: 0 !important;
line-height: 26px !important; line-height: 26px !important;
} }
.lay-code .meta .description code { .lay-code .source .description code {
display: inline-block; display: inline-block;
padding: 1px 5px; padding: 1px 5px;
margin: 0 4px; margin: 0 4px;
@ -167,6 +169,7 @@ function handleScroll() {
line-height: 18px; line-height: 18px;
color: var(--c-text-light); color: var(--c-text-light);
} }
.lay-code .control { .lay-code .control {
height: 44px; height: 44px;
box-sizing: border-box; box-sizing: border-box;

View File

@ -10,8 +10,8 @@ import "./index.less";
const props = defineProps<{ const props = defineProps<{
src?: String; src?: String;
radius?: boolean;
size?: string; size?: string;
radius?: boolean;
}>(); }>();
</script> </script>

View File

@ -1,24 +1,3 @@
<template>
<div
v-show="visible"
ref="backtopRef"
class="layui-backtop"
:class="classBacktop"
:style="{ ...styleBacktop }"
@click.stop="handleClick"
@mousedown="handlerMousedown"
@mouseup="handlerMouseup"
>
<slot>
<lay-icon
:type="props.icon"
:size="`${props.iconSize}px`"
:color="props.iconColor"
/>
</slot>
</div>
</template>
<script lang="ts"> <script lang="ts">
export default { export default {
name: "LayBacktop", name: "LayBacktop",
@ -215,3 +194,24 @@ onMounted(() => {
scrollTarget.value.addEventListener("scroll", throttle(handleScroll, 300)); scrollTarget.value.addEventListener("scroll", throttle(handleScroll, 300));
}); });
</script> </script>
<template>
<div
v-show="visible"
ref="backtopRef"
class="layui-backtop"
:class="classBacktop"
:style="{ ...styleBacktop }"
@click.stop="handleClick"
@mousedown="handlerMousedown"
@mouseup="handlerMouseup"
>
<slot>
<lay-icon
:type="props.icon"
:size="`${props.iconSize}px`"
:color="props.iconColor"
/>
</slot>
</div>
</template>

View File

@ -13,6 +13,7 @@ export interface LayBadgeProps {
theme?: string; theme?: string;
color?: string; color?: string;
} }
const props = defineProps<LayBadgeProps>(); const props = defineProps<LayBadgeProps>();
const classes = computed(() => { const classes = computed(() => {

View File

@ -4,7 +4,7 @@ export default {
}; };
</script> </script>
<script setup name="LayBody" lang="ts"> <script setup lang="ts">
import "./index.less"; import "./index.less";
</script> </script>

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayBreadcrumbItem", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -10,7 +10,13 @@
<span lay-separator>{{ separator }}</span> <span lay-separator>{{ separator }}</span>
</template> </template>
<script setup name="LayBreadcrumbItem" lang="ts"> <script lang="ts">
export default {
name: "LayBreadcrumbItem"
}
</script>
<script setup lang="ts">
import { defineProps, inject, useSlots } from "vue"; import { defineProps, inject, useSlots } from "vue";
const slot = useSlots(); const slot = useSlots();

View File

@ -1,14 +1,16 @@
@import "../../theme/variable.less";
.layui-btn { .layui-btn {
height: 38px; height: 38px;
line-height: 36px; line-height: 36px;
border: 1px solid transparent;
padding: 0 18px; padding: 0 18px;
background-color: #009688;
color: #fff; color: #fff;
white-space: nowrap;
text-align: center;
font-size: 14px; font-size: 14px;
border-radius: 2px; text-align: center;
white-space: nowrap;
border: 1px solid transparent;
background-color: @button-primary-color;
border-radius: @button-border-radius;
cursor: pointer; cursor: pointer;
} }
@ -44,34 +46,19 @@
} }
.layui-btn-primary:hover { .layui-btn-primary:hover {
border-color: #009688;
color: #333; color: #333;
} }
.layui-btn-normal { .layui-btn-normal {
background-color: #1e9fff; background-color: @global-normal-color;
} }
.layui-btn-warm { .layui-btn-warm {
background-color: #ffb800; background-color: @global-warm-color;
} }
.layui-btn-danger { .layui-btn-danger {
background-color: #ff5722; background-color: @global-danger-color;
}
.layui-btn-checked {
background-color: #5fb878;
}
.layui-btn-disabled,
.layui-btn-disabled:active,
.layui-btn-disabled:hover {
border-color: #eee !important;
background-color: #fbfbfb !important;
color: #d2d2d2 !important;
cursor: not-allowed !important;
opacity: 1;
} }
.layui-btn-lg { .layui-btn-lg {
@ -93,12 +80,21 @@
line-height: 22px; line-height: 22px;
padding: 0 5px; padding: 0 5px;
font-size: 12px; font-size: 12px;
} i {
.layui-btn-xs i {
font-size: 12px !important; font-size: 12px !important;
} }
}
.layui-btn-fluid { .layui-btn-fluid {
width: 100%; width: 100%;
} }
.layui-btn-disabled,
.layui-btn-disabled:active,
.layui-btn-disabled:hover {
border-color: #eee !important;
background-color: #fbfbfb !important;
color: #d2d2d2 !important;
cursor: not-allowed !important;
opacity: 1;
}

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayButton", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,16 +1,10 @@
.layui-btn-container { .layui-btn-container {
font-size: 0; font-size: 0;
} .layui-btn {
.layui-btn-container .layui-btn {
margin-right: 10px; margin-right: 10px;
margin-bottom: 10px; margin-bottom: 10px;
} }
.layui-btn + .layui-btn {
.layui-btn-container .layui-btn + .layui-btn {
margin-left: 0; margin-left: 0;
} }
.layui-table .layui-btn-container .layui-btn {
margin-bottom: 9px;
} }

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayButtonContainer", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,9 +1,3 @@
<template>
<div class="layui-btn-container">
<slot></slot>
</div>
</template>
<script lang="ts"> <script lang="ts">
export default { export default {
name: "LayButtonContainer", name: "LayButtonContainer",
@ -13,3 +7,9 @@ export default {
<script setup lang="ts"> <script setup lang="ts">
import "./index.less"; import "./index.less";
</script> </script>
<template>
<div class="layui-btn-container">
<slot></slot>
</div>
</template>

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayButtonGroup", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,41 +1,24 @@
@import "../../theme/variable.less";
.layui-card { .layui-card {
margin-bottom: 15px; margin-bottom: 15px;
border-radius: 2px; border-radius: @card-border-radius;
background-color: #fff; background-color: #fff;
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.layui-card:last-child {
margin-bottom: 0;
}
.layui-card-header { .layui-card-header {
height: 42px; height: 42px;
line-height: 42px; line-height: 42px;
padding: 0 15px; padding: 0 15px;
border-bottom: 1px solid #f6f6f6; border-bottom: 1px solid #f6f6f6;
color: #333; color: #333;
border-radius: 2px 2px 0 0;
font-size: 14px; font-size: 14px;
} }
.layui-card-body { .layui-card-body {
padding: 10px 15px; padding: 10px 15px;
line-height: 24px; line-height: 24px;
} }
.layui-card-body[pad15] {
padding: 15px;
} }
.layui-card-body[pad20] { .layui-card:last-child {
padding: 20px; margin-bottom: 0;
}
.layui-card-body .layui-table {
margin: 5px 0;
}
.layui-card .layui-tab {
margin: 0;
} }

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayCard ", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,3 +1,22 @@
<script lang="ts">
export default {
name: "LayCard"
}
</script>
<script setup lang="ts">
import { useSlots } from "vue";
import "./index.less";
const slot = useSlots();
export interface LayCardProps {
title?: string;
}
const props = defineProps<LayCardProps>();
</script>
<template> <template>
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-header" v-if="slot.header || title"> <div class="layui-card-header" v-if="slot.header || title">
@ -10,16 +29,3 @@
</div> </div>
</div> </div>
</template> </template>
<script setup name="LayCard" lang="ts">
import { useSlots } from "vue";
import "./index.less";
const slot = useSlots();
export interface LayCardProps {
title?: string;
}
const props = defineProps<LayCardProps>();
</script>

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayCarousel", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,40 +1,10 @@
<template> <script lang="ts">
<div export default {
class="layui-carousel" name: "LayCarousel"
:lay-anim="anim" }
:lay-indicator="indicator" </script>
:lay-arrow="arrow"
:style="{ width: width, height: height }" <script setup lang="ts">
>
<div carousel-item>
<slot></slot>
</div>
<div class="layui-carousel-ind">
<ul>
<li
v-for="ss in slots"
:key="ss"
:class="[ss.props.id === active ? 'layui-this' : '']"
@click.stop="change(ss.props.id)"
></li>
</ul>
</div>
<button
class="layui-icon layui-carousel-arrow"
lay-type="sub"
@click="prev"
>
{{ anim === "updown" ? "" : "" }}</button
><button
class="layui-icon layui-carousel-arrow"
lay-type="add"
@click="next"
>
{{ anim === "updown" ? "" : "" }}
</button>
</div>
</template>
<script setup name="LayCarousel" lang="ts">
import { import {
withDefaults, withDefaults,
defineProps, defineProps,
@ -107,3 +77,40 @@ const next = function () {
} }
}; };
</script> </script>
<template>
<div
class="layui-carousel"
:lay-anim="anim"
:lay-indicator="indicator"
:lay-arrow="arrow"
:style="{ width: width, height: height }"
>
<div carousel-item>
<slot></slot>
</div>
<div class="layui-carousel-ind">
<ul>
<li
v-for="ss in slots"
:key="ss"
:class="[ss.props.id === active ? 'layui-this' : '']"
@click.stop="change(ss.props.id)"
></li>
</ul>
</div>
<button
class="layui-icon layui-carousel-arrow"
lay-type="sub"
@click="prev"
>
{{ anim === "updown" ? "" : "" }}</button
><button
class="layui-icon layui-carousel-arrow"
lay-type="add"
@click="next"
>
{{ anim === "updown" ? "" : "" }}
</button>
</div>
</template>

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayCarouselItem", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,9 +1,10 @@
<template> <script lang="ts">
<li :class="[active === id ? 'layui-this' : '']"> export default {
<slot></slot> name: "LayCarouselItem"
</li> }
</template> </script>
<script setup name="LayCarouselItem" lang="ts">
<script setup lang="ts">
import { defineProps, inject } from "vue"; import { defineProps, inject } from "vue";
const props = defineProps<{ const props = defineProps<{
@ -12,3 +13,9 @@ const props = defineProps<{
const active = inject("active"); const active = inject("active");
</script> </script>
<template>
<li :class="[active === id ? 'layui-this' : '']">
<slot></slot>
</li>
</template>

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayCheckbox", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayCheckboxGroup", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,9 +1,3 @@
<template>
<div class="layui-checkbox-group">
<slot></slot>
</div>
</template>
<script lang="ts"> <script lang="ts">
export default { export default {
name: "LayCheckboxGroup", name: "LayCheckboxGroup",
@ -12,7 +6,7 @@ export default {
<script setup lang="ts"> <script setup lang="ts">
import { computed, defineProps, provide, ref, watch } from "vue"; import { computed, defineProps, provide, ref, watch } from "vue";
import { Recordable } from "../type"; import { Recordable } from "../../types";
export interface LayCheckboxGroupProps { export interface LayCheckboxGroupProps {
modelValue?: Recordable[]; modelValue?: Recordable[];
@ -42,3 +36,9 @@ watch(
(val) => (modelValue.value = val) (val) => (modelValue.value = val)
); );
</script> </script>
<template>
<div class="layui-checkbox-group">
<slot></slot>
</div>
</template>

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayCollapse", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,20 +1,3 @@
<template>
<div class="layui-colla-item">
<h2
:class="['layui-colla-title', { 'layui-disabled': disabled }]"
@click="showHandle"
>
<slot name="title" :props="props">{{ title }}</slot>
<i class="layui-icon layui-colla-icon">{{ isShow ? "" : "" }}</i>
</h2>
<div class="layui-colla-content" :class="isShow ? 'layui-show' : ''">
<p>
<slot :props="props"></slot>
</p>
</div>
</div>
</template>
<script lang="ts"> <script lang="ts">
export default { export default {
name:"LayCollapseItem" name:"LayCollapseItem"
@ -64,3 +47,20 @@ const showHandle = function () {
emit("change", props.id, !_isShow, activeValues.value); emit("change", props.id, !_isShow, activeValues.value);
}; };
</script> </script>
<template>
<div class="layui-colla-item">
<h2
:class="['layui-colla-title', { 'layui-disabled': disabled }]"
@click="showHandle"
>
<slot name="title" :props="props">{{ title }}</slot>
<i class="layui-icon layui-colla-icon">{{ isShow ? "" : "" }}</i>
</h2>
<div class="layui-colla-content" :class="isShow ? 'layui-show' : ''">
<p>
<slot :props="props"></slot>
</p>
</div>
</div>
</template>

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayContainer", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayCountUp", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -4,6 +4,12 @@
<slot name="suffix"></slot> <slot name="suffix"></slot>
</template> </template>
<script lang="ts">
export default {
name: "LayCountUp",
};
</script>
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, ref, watch } from 'vue' import { onMounted, ref, watch } from 'vue'
import { CountUp } from 'countup.js' import { CountUp } from 'countup.js'

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayDropdown", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayDropdownItem", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,12 +1,10 @@
<template> <script lang="ts">
<li> export default {
<div class="layui-menu-body-title" @click="click"> name: "LayDropdownItem"
<slot></slot> }
</div> </script>
</li>
</template>
<script setup name="LayDropdownItem" lang="ts"> <script setup lang="ts">
import { inject, Ref } from "vue"; import { inject, Ref } from "vue";
const openState: Ref<boolean> = inject("openState") as Ref<boolean>; const openState: Ref<boolean> = inject("openState") as Ref<boolean>;
@ -15,3 +13,11 @@ const click = function () {
openState.value = false; openState.value = false;
}; };
</script> </script>
<template>
<li>
<div class="layui-menu-body-title" @click="click">
<slot></slot>
</div>
</li>
</template>

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayEmpty", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayField", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,3 +1,19 @@
<script lang="ts">
export default {
name: "LayField"
}
</script>
<script setup lang="ts">
import { defineProps, useSlots } from "vue";
const slot = useSlots();
const props = defineProps<{
title?: string;
}>();
</script>
<template> <template>
<fieldset v-if="slot.default" class="layui-elem-field"> <fieldset v-if="slot.default" class="layui-elem-field">
<legend>{{ title }}</legend> <legend>{{ title }}</legend>
@ -12,13 +28,3 @@
</legend> </legend>
</fieldset> </fieldset>
</template> </template>
<script setup name="LayField" lang="ts">
import { defineProps, useSlots } from "vue";
const slot = useSlots();
const props = defineProps<{
title?: string;
}>();
</script>

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayFooter", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayIconPicker", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -78,7 +78,13 @@
</lay-dropdown> </lay-dropdown>
</template> </template>
<script setup name="LayIconPicker" lang="ts"> <script lang="ts">
export default {
name: "LayIconPicker"
}
</script>
<script setup lang="ts">
import { defineProps, Ref, ref } from "vue"; import { defineProps, Ref, ref } from "vue";
import { LayIconList as icons } from "@layui/icons-vue"; import { LayIconList as icons } from "@layui/icons-vue";

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayInput", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,19 +1,10 @@
<template> <script lang="ts">
<input export default {
:type="type" name: "LayInput"
:name="name" }
:value="modelValue" </script>
:disabled="disabled"
:placeholder="placeholder"
:class="{ 'layui-disabled': disabled }"
class="layui-input"
@input="onInput"
@focus="onFocus"
@blur="onBlur"
/>
</template>
<script setup name="LayInput" lang="ts"> <script setup lang="ts">
import { defineProps, defineEmits } from "vue"; import { defineProps, defineEmits } from "vue";
export interface LayInputProps { export interface LayInputProps {
@ -42,3 +33,18 @@ const onBlur = function () {
emit("blur"); emit("blur");
}; };
</script> </script>
<template>
<input
:type="type"
:name="name"
:value="modelValue"
:disabled="disabled"
:placeholder="placeholder"
:class="{ 'layui-disabled': disabled }"
class="layui-input"
@input="onInput"
@focus="onFocus"
@blur="onBlur"
/>
</template>

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayLine", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,7 +1,3 @@
<template>
<hr :class="['layui-border-' + theme]" />
</template>
<script lang="ts"> <script lang="ts">
export default { export default {
name: "LayLine" name: "LayLine"
@ -15,3 +11,7 @@ const props = defineProps<{
theme?: string; theme?: string;
}>(); }>();
</script> </script>
<template>
<hr :class="['layui-border-' + theme]" />
</template>

View File

@ -157,15 +157,15 @@
} }
.layui-nav-tree .layui-nav-item { .layui-nav-tree .layui-nav-item {
display: block;
width: 100%; width: 100%;
display: block;
line-height: 42px; line-height: 42px;
} }
.layui-nav-tree .layui-nav-item > a { .layui-nav-tree .layui-nav-item > a {
position: relative;
height: 40px; height: 40px;
line-height: 40px; line-height: 40px;
position: relative;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
@ -208,11 +208,11 @@
} }
.layui-nav-tree .layui-nav-child { .layui-nav-tree .layui-nav-child {
position: relative;
z-index: 0;
top: 0; top: 0;
z-index: 0;
border: none; border: none;
box-shadow: none; box-shadow: none;
position: relative;
} }
.layui-nav-tree .layui-nav-child dd { .layui-nav-tree .layui-nav-child dd {

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayMenu", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,10 +1,10 @@
<template> <script lang="ts">
<ul class="layui-nav" :class="[level? 'level':'',inverted ? 'inverted':'',tree ? 'layui-nav-tree' : '', theme === 'dark' ? 'layui-nav-dark':'layui-nav-light' ]"> export default {
<slot></slot> name: "LayMenu"
</ul> }
</template> </script>
<script setup name="LayMenu" lang="ts"> <script setup lang="ts">
import { computed, defineProps, provide } from "vue"; import { computed, defineProps, provide } from "vue";
import "./index.less"; import "./index.less";
@ -52,3 +52,9 @@ provide("isTree", isTree);
provide("selectedKey", selectedKey); provide("selectedKey", selectedKey);
provide("openKeys", openKeys); provide("openKeys", openKeys);
</script> </script>
<template>
<ul class="layui-nav" :class="[level? 'level':'',inverted ? 'inverted':'',tree ? 'layui-nav-tree' : '', theme === 'dark' ? 'layui-nav-dark':'layui-nav-light' ]">
<slot></slot>
</ul>
</template>

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayMenuItem", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayPage", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,70 +1,10 @@
<template> <script lang="ts">
<div class="layui-box layui-laypage layui-laypage-default"> export default {
<span v-if="showCount" class="layui-laypage-count" name: "LayPage"
> {{ total }} {{ maxPage }} </span }
> </script>
<a
href="javascript:;"
class="layui-laypage-prev"
:class="[currentPage === 1 ? 'layui-disabled' : '']"
@click="prev()"
>
<slot v-if="slots.prev" name="prev"></slot>
<template v-else>上一页</template>
</a>
<template v-if="showPage">
<template v-for="index of totalPage" :key="index">
<span v-if="index === currentPage" class="layui-laypage-curr">
<em
class="layui-laypage-em"
:class="[theme ? 'layui-bg-' + theme : '']"
></em>
<em>{{ index }}</em>
</span>
<a v-else href="javascript:;" @click="jump(index)">{{ index }}</a>
</template>
</template>
<a <script setup lang="ts">
href="javascript:;"
class="layui-laypage-next"
:class="[currentPage === maxPage ? 'layui-disabled' : '']"
@click="next()"
>
<slot v-if="slots.next" name="next"></slot>
<template v-else>下一页</template>
</a>
<span v-if="showLimit" class="layui-laypage-limits">
<select v-model="inlimit">
<option v-for="val of limits" :key="val" :value="val">
{{ val }} /
</option>
</select>
</span>
<a v-if="showRefresh" href="javascript:;" class="layui-laypage-refresh">
<i class="layui-icon layui-icon-refresh"></i>
</a>
<span v-if="showSkip" class="layui-laypage-skip">
到第
<input
v-model="currentPageShow"
@keypress.enter="jumpPage()"
type="number"
class="layui-input layui-input-number"
/>
<button
type="button"
class="layui-laypage-btn"
@click="jumpPage()"
:disabled="currentPageShow > maxPage"
>
确定
</button>
</span>
</div>
</template>
<script setup name="LayPage" lang="ts">
import { defineProps, Ref, ref, watch, useSlots, computed } from "vue"; import { defineProps, Ref, ref, watch, useSlots, computed } from "vue";
const slots = useSlots(); const slots = useSlots();
@ -161,3 +101,69 @@ watch(currentPage, function () {
emit("jump", { current: currentPage.value }); emit("jump", { current: currentPage.value });
}); });
</script> </script>
<template>
<div class="layui-box layui-laypage layui-laypage-default">
<span v-if="showCount" class="layui-laypage-count"
> {{ total }} {{ maxPage }} </span
>
<a
href="javascript:;"
class="layui-laypage-prev"
:class="[currentPage === 1 ? 'layui-disabled' : '']"
@click="prev()"
>
<slot v-if="slots.prev" name="prev"></slot>
<template v-else>上一页</template>
</a>
<template v-if="showPage">
<template v-for="index of totalPage" :key="index">
<span v-if="index === currentPage" class="layui-laypage-curr">
<em
class="layui-laypage-em"
:class="[theme ? 'layui-bg-' + theme : '']"
></em>
<em>{{ index }}</em>
</span>
<a v-else href="javascript:;" @click="jump(index)">{{ index }}</a>
</template>
</template>
<a
href="javascript:;"
class="layui-laypage-next"
:class="[currentPage === maxPage ? 'layui-disabled' : '']"
@click="next()"
>
<slot v-if="slots.next" name="next"></slot>
<template v-else>下一页</template>
</a>
<span v-if="showLimit" class="layui-laypage-limits">
<select v-model="inlimit">
<option v-for="val of limits" :key="val" :value="val">
{{ val }} /
</option>
</select>
</span>
<a v-if="showRefresh" href="javascript:;" class="layui-laypage-refresh">
<i class="layui-icon layui-icon-refresh"></i>
</a>
<span v-if="showSkip" class="layui-laypage-skip">
到第
<input
v-model="currentPageShow"
@keypress.enter="jumpPage()"
type="number"
class="layui-input layui-input-number"
/>
<button
type="button"
class="layui-laypage-btn"
@click="jumpPage()"
:disabled="currentPageShow > maxPage"
>
确定
</button>
</span>
</div>
</template>

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayPanel", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayProgress", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayRadio ", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,3 +1,30 @@
<script lang="ts">
export default {
name: "LayRadio"
}
</script>
<script setup lang="ts">
import { defineProps, defineEmits } from "vue";
const props = defineProps<{
modelValue: string;
disabled?: boolean;
label?: string;
name: string;
}>();
const emit = defineEmits(["update:modelValue", "change"]);
const handleClick = function () {
if (props.disabled) {
return;
}
emit("change", props.label);
emit("update:modelValue", props.label);
};
</script>
<template> <template>
<span> <span>
<input type="radio" :value="label" :name="name" /> <input type="radio" :value="label" :name="name" />
@ -23,24 +50,3 @@
</div> </div>
</span> </span>
</template> </template>
<script setup name="LayRadio" lang="ts">
import { defineProps, defineEmits } from "vue";
const props = defineProps<{
modelValue: string;
disabled?: boolean;
label?: string;
name: string;
}>();
const emit = defineEmits(["update:modelValue", "change"]);
const handleClick = function () {
if (props.disabled) {
return;
}
emit("change", props.label);
emit("update:modelValue", props.label);
};
</script>

View File

@ -1,4 +1,7 @@
<script lang="ts"> <script lang="ts">
export default {
name: "LayResult"
}
</script> </script>
<script setup lang="ts"> <script setup lang="ts">

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayRow", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayScroll", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,9 +1,3 @@
<template>
<div class="layui-side-scroll">
<slot></slot>
</div>
</template>
<script lang="ts"> <script lang="ts">
export default { export default {
name: "LayScroll" name: "LayScroll"
@ -13,3 +7,9 @@ export default {
<script setup lang="ts"> <script setup lang="ts">
import { defineProps } from "vue"; import { defineProps } from "vue";
</script> </script>
<template>
<div class="layui-side-scroll">
<slot></slot>
</div>
</template>

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LaySelect", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,79 +1,10 @@
<template> <script lang="ts">
<div export default {
ref="selectRef" name: "LaySelect"
class="layui-unselect layui-form-select" }
:class="{ 'layui-form-selected': openState }" </script>
>
<div class="layui-select-title" @click="open">
<input
type="text"
:placeholder="
selectItem.value !== null &&
Array.isArray(selectItem.value) &&
selectItem.value.length > 0
? ''
: emptyMessage ?? placeholder
"
:disabled="disabled"
readonly
:value="
!selectItem.multiple && selectItem.value !== null
? selectItem.label
: null
"
:name="name"
:class="[
'layui-input',
'layui-unselect',
{ 'layui-disabled': disabled },
]"
/>
<i :class="['layui-edge', { 'layui-disabled': disabled }]"></i>
<!-- 多选 -->
<div
v-if="selectItem.multiple && Array.isArray(selectItem.label)"
class="layui-multiple-select-row"
>
<div class="layui-multiple-select-badge">
<template v-for="(item, index) in selectItem.label" :key="index">
<lay-badge theme="green">
<span>{{ item }}</span>
<i
:class="['layui-icon', { 'layui-icon-close': true }]"
v-if="
!disabled &&
!(
Array.isArray(selectItem.value) &&
selectItem.value.length > 0 &&
disabledItemMap[selectItem.value[index]]
)
"
@click="
removeItemHandle($event, {
label: item,
value: Array.isArray(selectItem.value)
? selectItem.value[index]
: null,
})
"
>
</i>
</lay-badge>
</template>
</div>
</div>
</div>
<dl class="layui-anim layui-anim-upbit">
<!-- 多选不支持空提示 -->
<template v-if="!multiple && showEmpty">
<lay-select-option :value="null" :label="emptyMessage ?? placeholder" />
</template>
<slot></slot>
</dl>
</div>
</template>
<script setup name="LaySelect" lang="ts"> <script setup lang="ts">
import "./index.less"; import "./index.less";
import LaySelectOption from "../selectOption/index.vue"; import LaySelectOption from "../selectOption/index.vue";
import { import {
@ -88,7 +19,7 @@ import {
Ref, Ref,
} from "vue"; } from "vue";
import { useClickOutside } from "@layui/hooks-vue"; import { useClickOutside } from "@layui/hooks-vue";
import { SelectItem } from "../type"; import { SelectItem } from "../../types";
const selectRef = ref<null | HTMLElement>(null); const selectRef = ref<null | HTMLElement>(null);
const isClickOutside = useClickOutside(selectRef); const isClickOutside = useClickOutside(selectRef);
@ -218,3 +149,78 @@ provide("selectItemHandle", selectItemHandle);
provide("selectItem", selectItem); provide("selectItem", selectItem);
provide("selectItemPush", selectItemPush); provide("selectItemPush", selectItemPush);
</script> </script>
<template>
<div
ref="selectRef"
class="layui-unselect layui-form-select"
:class="{ 'layui-form-selected': openState }"
>
<div class="layui-select-title" @click="open">
<input
type="text"
:placeholder="
selectItem.value !== null &&
Array.isArray(selectItem.value) &&
selectItem.value.length > 0
? ''
: emptyMessage ?? placeholder
"
:disabled="disabled"
readonly
:value="
!selectItem.multiple && selectItem.value !== null
? selectItem.label
: null
"
:name="name"
:class="[
'layui-input',
'layui-unselect',
{ 'layui-disabled': disabled },
]"
/>
<i :class="['layui-edge', { 'layui-disabled': disabled }]"></i>
<!-- 多选 -->
<div
v-if="selectItem.multiple && Array.isArray(selectItem.label)"
class="layui-multiple-select-row"
>
<div class="layui-multiple-select-badge">
<template v-for="(item, index) in selectItem.label" :key="index">
<lay-badge theme="green">
<span>{{ item }}</span>
<i
:class="['layui-icon', { 'layui-icon-close': true }]"
v-if="
!disabled &&
!(
Array.isArray(selectItem.value) &&
selectItem.value.length > 0 &&
disabledItemMap[selectItem.value[index]]
)
"
@click="
removeItemHandle($event, {
label: item,
value: Array.isArray(selectItem.value)
? selectItem.value[index]
: null,
})
"
>
</i>
</lay-badge>
</template>
</div>
</div>
</div>
<dl class="layui-anim layui-anim-upbit">
<!-- 多选不支持空提示 -->
<template v-if="!multiple && showEmpty">
<lay-select-option :value="null" :label="emptyMessage ?? placeholder" />
</template>
<slot></slot>
</dl>
</div>
</template>

View File

@ -1,21 +1,3 @@
<template>
<dd
:value="value"
:class="[{ 'layui-this': selected }, { 'layui-disabled': disabled }]"
@click="selectHandle"
>
<template v-if="selectItem.multiple">
<lay-checkbox
skin="primary"
v-model="selected"
@change="selectHandle"
label=""
/>
</template>
<slot>{{ label }}</slot>
</dd>
</template>
<script lang="ts"> <script lang="ts">
export default { export default {
name: "LaySelectOption", name: "LaySelectOption",
@ -80,3 +62,21 @@ onMounted(() => {
selected.value && callSelectItemHandle(); selected.value && callSelectItemHandle();
}); });
</script> </script>
<template>
<dd
:value="value"
:class="[{ 'layui-this': selected }, { 'layui-disabled': disabled }]"
@click="selectHandle"
>
<template v-if="selectItem.multiple">
<lay-checkbox
skin="primary"
v-model="selected"
@change="selectHandle"
label=""
/>
</template>
<slot>{{ label }}</slot>
</dd>
</template>

View File

@ -1,9 +1,8 @@
import type { App } from 'vue' import type { App } from 'vue'
import Component from './index.vue' import Component from './index.vue'
import type { IDefineComponent } from '../../types/index'
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || 'LaySkeleton', Component) app.component(Component.name, Component)
} }
export default Component as IDefineComponent export default Component;

View File

@ -1,21 +1,10 @@
<template> <script lang="ts">
<div :class="['lay-skeleton', animated ? 'lay-skeleton-animated': '',]" v-bind="$attrs"> export default {
<template v-if="loading"> name: "LaySkeleton"
<slot name="skeleton"> }
<lay-skeleton-item </script>
v-for="item in rows"
:class="[
item===1? 'lay-skeleton-first': '',
item === rows? 'lay-skeleton-last': '']"
type="p"
></lay-skeleton-item>
</slot>
</template>
<slot v-else></slot>
</div>
</template>
<script setup name="LaySkeleton" lang="ts"> <script setup lang="ts">
import LaySkeletonItem from '../skeletonItem/index.vue' import LaySkeletonItem from '../skeletonItem/index.vue'
import './index.less' import './index.less'
import { defineProps, withDefaults} from "vue"; import { defineProps, withDefaults} from "vue";
@ -31,4 +20,22 @@ const props = withDefaults(defineProps<LaySkeletonProps>(), {
loading: false, loading: false,
animated: false, animated: false,
}); });
</script>- </script>
<template>
<div :class="['lay-skeleton', animated ? 'lay-skeleton-animated': '',]" v-bind="$attrs">
<template v-if="loading">
<slot name="skeleton">
<lay-skeleton-item
v-for="item in rows"
:key="item"
:class="[
item===1? 'lay-skeleton-first': '',
item === rows? 'lay-skeleton-last': '']"
type="p"
></lay-skeleton-item>
</slot>
</template>
<slot v-else></slot>
</div>
</template>

View File

@ -1,16 +1,3 @@
<template>
<div
ref="target"
:class="['lay-split-panel', vertical ? 'lay-split-panel-vertical' : '']"
:style="{
cursor: domStatus ? (!vertical ? 'col-resize' : 'row-resize') : '',
}"
v-on="{ mouseup: mouseup }"
>
<slot></slot>
</div>
</template>
<script lang="ts"> <script lang="ts">
export default { export default {
name: "laySplitPanel" name: "laySplitPanel"
@ -132,3 +119,16 @@ provide("laySplitPanel", {
moveChange, moveChange,
}); });
</script> </script>
<template>
<div
ref="target"
:class="['lay-split-panel', vertical ? 'lay-split-panel-vertical' : '']"
:style="{
cursor: domStatus ? (!vertical ? 'col-resize' : 'row-resize') : '',
}"
v-on="{ mouseup: mouseup }"
>
<slot></slot>
</div>
</template>

View File

@ -1,26 +1,3 @@
<template>
<div
v-if="!isStart"
:class="[!isStart ? 'lay-split-panel-line' : '']"
ref="el"
v-on="{ mousedown: mousedown, mouseup: mouseup }"
></div>
<div
v-if="isVertical"
:class="['lay-split-panel-item']"
:style="{ height: `${space ? space : (100 + space) / stepsCount}%` }"
>
<slot></slot>
</div>
<div
v-else
:class="['lay-split-panel-item']"
:style="{ width: `${space ? space : (100 + space) / stepsCount}%` }"
>
<slot></slot>
</div>
</template>
<script lang="ts"> <script lang="ts">
export default { export default {
name: "LaySplitPanelItem" name: "LaySplitPanelItem"
@ -100,3 +77,26 @@ onBeforeUnmount(() => {
); );
}); });
</script> </script>
<template>
<div
v-if="!isStart"
:class="[!isStart ? 'lay-split-panel-line' : '']"
ref="el"
v-on="{ mousedown: mousedown, mouseup: mouseup }"
></div>
<div
v-if="isVertical"
:class="['lay-split-panel-item']"
:style="{ height: `${space ? space : (100 + space) / stepsCount}%` }"
>
<slot></slot>
</div>
<div
v-else
:class="['lay-split-panel-item']"
:style="{ width: `${space ? space : (100 + space) / stepsCount}%` }"
>
<slot></slot>
</div>
</template>

View File

@ -1,86 +1,3 @@
<template>
<div
v-if="!simple"
:class="[
'lay-step-item',
isLast && !isCenter && composition !== 'row' ? 'lay-step-item-last' : '',
isCenter ? 'is-item-center' : '',
isVertical ? 'is-vertical' : '',
]"
:style="{ flexBasis: space, flexGrow: space === 'auto' ? 1 : 0 }"
>
<div
:class="[
!isLast
? isLineActive
? `lay-step-item-line lay-step-item-line-${status || 'active'}`
: 'lay-step-item-line'
: '',
isCenter ? 'is-line-center' : '',
]"
>
<div
:class="[
'lay-step-item-pace',
isActive ? `lay-step-item-active` : '',
isCurrent === index ? `lay-step-item--${currentStatus}` : '',
status ? `lay-step-item-${status}` : '',
isWait ? 'lay-step-item-wait' : '',
isCenter ? 'is-center' : '',
]"
@click="onChange(index + 1)"
>
<slot name="pace">
<template v-if="icon">
<lay-icon :type="icon"></lay-icon>
</template>
<template v-else>
<span v-if="!isActive">{{ index + 1 }}</span>
<lay-icon
v-else
:type="status === 'fail' ? 'layui-icon-close' : 'layui-icon-ok'"
></lay-icon>
</template>
</slot>
</div>
</div>
<div
:class="[
'lay-step-item-content',
composition === 'row' ? 'lay-step-item-content-row' : '',
isActive ? `lay-step-item-content-active` : '',
isCurrent === index ? `lay-step-item-content--${currentStatus}` : '',
status ? `lay-step-item-content-${status}` : '',
isWait ? 'lay-step-item-content-wait' : '',
]"
@click="onChange(index + 1)"
>
<slot>
<div class="lay-step-item-content-title">{{ title }}</div>
<p>{{ content }}</p>
</slot>
</div>
</div>
<div
v-else
:class="[
'lay-step-item',
'lay-step-simple',
!isStart ? 'lay-step-item-simple' : '',
'lay-step-item-simple-border',
isActive ? 'lay-step-item-simple-active' : '',
isCurrent === index ? `lay-step-item-simple-${currentStatus}` : '',
isCurrentBorder === index
? `lay-step-item-simple-${currentStatus}-border`
: '',
isSimpleActive ? 'lay-step-item-simple-active-border' : '',
]"
@click="onChange(index + 1)"
>
<slot>{{ index + 1 }}.{{ title }}</slot>
</div>
</template>
<script lang="ts"> <script lang="ts">
export default { export default {
name: "LayStepItem" name: "LayStepItem"
@ -201,3 +118,86 @@ onBeforeUnmount(() => {
); );
}); });
</script> </script>
<template>
<div
v-if="!simple"
:class="[
'lay-step-item',
isLast && !isCenter && composition !== 'row' ? 'lay-step-item-last' : '',
isCenter ? 'is-item-center' : '',
isVertical ? 'is-vertical' : '',
]"
:style="{ flexBasis: space, flexGrow: space === 'auto' ? 1 : 0 }"
>
<div
:class="[
!isLast
? isLineActive
? `lay-step-item-line lay-step-item-line-${status || 'active'}`
: 'lay-step-item-line'
: '',
isCenter ? 'is-line-center' : '',
]"
>
<div
:class="[
'lay-step-item-pace',
isActive ? `lay-step-item-active` : '',
isCurrent === index ? `lay-step-item--${currentStatus}` : '',
status ? `lay-step-item-${status}` : '',
isWait ? 'lay-step-item-wait' : '',
isCenter ? 'is-center' : '',
]"
@click="onChange(index + 1)"
>
<slot name="pace">
<template v-if="icon">
<lay-icon :type="icon"></lay-icon>
</template>
<template v-else>
<span v-if="!isActive">{{ index + 1 }}</span>
<lay-icon
v-else
:type="status === 'fail' ? 'layui-icon-close' : 'layui-icon-ok'"
></lay-icon>
</template>
</slot>
</div>
</div>
<div
:class="[
'lay-step-item-content',
composition === 'row' ? 'lay-step-item-content-row' : '',
isActive ? `lay-step-item-content-active` : '',
isCurrent === index ? `lay-step-item-content--${currentStatus}` : '',
status ? `lay-step-item-content-${status}` : '',
isWait ? 'lay-step-item-content-wait' : '',
]"
@click="onChange(index + 1)"
>
<slot>
<div class="lay-step-item-content-title">{{ title }}</div>
<p>{{ content }}</p>
</slot>
</div>
</div>
<div
v-else
:class="[
'lay-step-item',
'lay-step-simple',
!isStart ? 'lay-step-item-simple' : '',
'lay-step-item-simple-border',
isActive ? 'lay-step-item-simple-active' : '',
isCurrent === index ? `lay-step-item-simple-${currentStatus}` : '',
isCurrentBorder === index
? `lay-step-item-simple-${currentStatus}-border`
: '',
isSimpleActive ? 'lay-step-item-simple-active-border' : '',
]"
@click="onChange(index + 1)"
>
<slot>{{ index + 1 }}.{{ title }}</slot>
</div>
</template>

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayTabItem", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -4,3 +4,610 @@
.layui-table-col-special { .layui-table-col-special {
width: 34px; width: 34px;
} }
.layui-table {
width: 100%;
background-color: #fff;
color: #666;
}
.layui-table tr {
transition: all 0.3s;
-webkit-transition: all 0.3s;
}
.layui-table th {
text-align: left;
font-weight: 400;
}
.layui-table tbody tr:hover,
.layui-table thead tr,
.layui-table-click,
.layui-table-header,
.layui-table-hover,
.layui-table-mend,
.layui-table-patch,
.layui-table-tool,
.layui-table-total,
.layui-table-total tr,
.layui-table[lay-even] tr:nth-child(even) {
background-color: #fafafa;
}
.layui-table td,
.layui-table th,
.layui-table-col-set,
.layui-table-fixed-r,
.layui-table-grid-down,
.layui-table-header,
.layui-table-page,
.layui-table-tips-main,
.layui-table-tool,
.layui-table-total,
.layui-table-view,
.layui-table[lay-skin="line"],
.layui-table[lay-skin="row"] {
border-width: 1px;
border-style: solid;
border-color: #eee;
}
.layui-table td,
.layui-table th {
position: relative;
padding: 9px 15px;
min-height: 20px;
line-height: 20px;
font-size: 14px;
}
.layui-table[lay-skin="line"] td,
.layui-table[lay-skin="line"] th {
border-width: 0 0 1px;
}
.layui-table[lay-skin="row"] td,
.layui-table[lay-skin="row"] th {
border-width: 0 1px 0 0;
}
.layui-table[lay-skin="nob"] td,
.layui-table[lay-skin="nob"] th {
border: none;
}
.layui-table img {
max-width: 100px;
}
.layui-table[lay-size="lg"] td,
.layui-table[lay-size="lg"] th {
padding: 15px 30px;
}
.layui-table-view .layui-table[lay-size="lg"] .layui-table-cell {
height: 40px;
line-height: 40px;
}
.layui-table[lay-size="sm"] td,
.layui-table[lay-size="sm"] th {
font-size: 12px;
padding: 5px 10px;
}
.layui-table-view .layui-table[lay-size="sm"] .layui-table-cell {
height: 20px;
line-height: 20px;
}
.layui-table[lay-data] {
display: none;
}
.layui-table-box {
position: relative;
overflow: hidden;
}
.layui-table-view .layui-table {
position: relative;
margin: 0;
border-collapse: separate;
}
.layui-table-view .layui-table[lay-skin="line"] {
border-width: 0 1px 0 0;
}
.layui-table-view .layui-table[lay-skin="row"] {
border-width: 0 0 1px;
}
.layui-table-view .layui-table td,
.layui-table-view .layui-table th {
border-top: none;
border-left: none;
}
.layui-table-view .layui-table td.layui-table-col-special,
.layui-table-view .layui-table th.layui-table-col-special {
padding: 5px 16px;
}
.layui-table-view .layui-table th.layui-unselect .layui-table-cell span {
cursor: pointer;
}
.layui-table-view .layui-table td {
cursor: default;
}
.layui-table-view .layui-table td[data-edit="text"] {
cursor: text;
}
.layui-table-view .layui-form-checkbox[lay-skin="primary"] i {
width: 18px;
height: 18px;
}
.layui-table-view .layui-form-radio {
line-height: 0;
padding: 0;
}
.layui-table-view .layui-form-radio > i {
margin: 0;
font-size: 20px;
}
.layui-table-init {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
text-align: center;
z-index: 110;
}
.layui-table-init .layui-icon {
position: absolute;
left: 50%;
top: 50%;
margin: -15px 0 0 -15px;
font-size: 30px;
color: #c2c2c2;
}
.layui-table-header {
border-width: 0 0 1px;
overflow: hidden;
}
.layui-table-header .layui-table {
margin-bottom: -1px;
}
.layui-table-tool .layui-inline[lay-event] {
position: relative;
width: 26px;
height: 26px;
padding: 5px;
line-height: 16px;
margin-right: 10px;
text-align: center;
color: #333;
border: 1px solid #ccc;
cursor: pointer;
-webkit-transition: 0.5s all;
transition: 0.5s all;
}
.layui-table-tool .layui-inline[lay-event]:hover {
border: 1px solid #999;
}
.layui-table-tool-temp {
padding-right: 120px;
}
.layui-table-tool-self {
position: absolute;
right: 17px;
top: 10px;
}
.layui-table-tool .layui-table-tool-self .layui-inline[lay-event] {
margin: 0 0 0 10px;
}
.layui-table-tool-panel {
position: absolute;
top: 29px;
left: -1px;
padding: 5px 0;
min-width: 150px;
min-height: 40px;
border: 1px solid #d2d2d2;
text-align: left;
overflow-y: auto;
background-color: #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12);
}
.layui-table-cell,
.layui-table-tool-panel li {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.layui-table-tool-panel li {
padding: 0 10px;
line-height: 30px;
-webkit-transition: 0.5s all;
transition: 0.5s all;
}
.layui-table-tool-panel li .layui-form-checkbox[lay-skin="primary"] {
width: 100%;
padding-left: 28px;
}
.layui-table-tool-panel li:hover {
background-color: #f6f6f6;
}
.layui-table-tool-panel li .layui-form-checkbox[lay-skin="primary"] i {
position: absolute;
left: 0;
top: 0;
}
.layui-table-tool-panel li .layui-form-checkbox[lay-skin="primary"] span {
padding: 0;
}
.layui-table-tool .layui-table-tool-self .layui-table-tool-panel {
left: auto;
right: -1px;
}
.layui-table-col-set {
position: absolute;
right: 0;
top: 0;
width: 20px;
height: 100%;
border-width: 0 0 0 1px;
background-color: #fff;
}
.layui-table-sort {
width: 10px;
height: 20px;
margin-left: 5px;
cursor: pointer !important;
}
.layui-table-sort .layui-edge {
position: absolute;
left: 5px;
border-width: 5px;
}
.layui-table-sort .layui-table-sort-asc {
top: 3px;
border-top: none;
border-bottom-style: solid;
border-bottom-color: #b2b2b2;
}
.layui-table-sort .layui-table-sort-asc:hover {
border-bottom-color: #666;
}
.layui-table-sort .layui-table-sort-desc {
bottom: 5px;
border-bottom: none;
border-top-style: solid;
border-top-color: #b2b2b2;
}
.layui-table-sort .layui-table-sort-desc:hover {
border-top-color: #666;
}
.layui-table-sort[lay-sort="asc"] .layui-table-sort-asc {
border-bottom-color: #000;
}
.layui-table-sort[lay-sort="desc"] .layui-table-sort-desc {
border-top-color: #000;
}
.layui-table-cell {
height: 28px;
line-height: 28px;
position: relative;
box-sizing: border-box;
}
.layui-table-cell .layui-form-checkbox[lay-skin="primary"] {
top: -1px;
padding: 0;
}
.layui-table-cell .layui-table-link {
color: #01aaed;
}
.laytable-cell-checkbox,
.laytable-cell-numbers,
.laytable-cell-radio,
.laytable-cell-space {
padding: 0;
text-align: center;
-webkit-box-pack: center;
}
.layui-table-body {
position: relative;
overflow: auto;
margin-right: -1px;
margin-bottom: -1px;
}
.layui-table-body .layui-none {
line-height: 26px;
padding: 30px 15px;
text-align: center;
color: #999;
}
.layui-table-fixed {
position: absolute;
left: 0;
top: 0;
z-index: 101;
}
.layui-table-fixed .layui-table-body {
overflow: hidden;
}
.layui-table-fixed-l {
box-shadow: 1px 0 8px rgba(0, 0, 0, 0.08);
}
.layui-table-fixed-r {
left: auto;
right: -1px;
border-width: 0 0 0 1px;
box-shadow: -1px 0 8px rgba(0, 0, 0, 0.08);
}
.layui-table-fixed-r .layui-table-header {
position: relative;
overflow: visible;
}
.layui-table-mend {
position: absolute;
right: -49px;
top: 0;
height: 100%;
width: 50px;
}
.layui-table-tool {
position: relative;
z-index: 890;
width: 100%;
min-height: 50px;
line-height: 30px;
padding: 10px 15px;
border-width: 0 0 1px;
}
.layui-table-tool .layui-btn-container {
margin-bottom: -10px;
}
.layui-table-page,
.layui-table-total {
border-width: 1px 0 0;
margin-bottom: -1px;
overflow: hidden;
}
.layui-table-page {
position: relative;
width: 100%;
padding: 7px 7px 0;
height: 41px;
font-size: 12px;
white-space: nowrap;
}
.layui-table-page > div {
height: 26px;
}
.layui-table-page .layui-laypage {
margin: 0;
}
.layui-table-page .layui-laypage a,
.layui-table-page .layui-laypage span {
height: 26px;
line-height: 26px;
margin-bottom: 10px;
border: none;
background: 0 0;
}
.layui-table-page .layui-laypage a,
.layui-table-page .layui-laypage span.layui-laypage-curr {
padding: 0 12px;
}
.layui-table-page .layui-laypage span {
margin-left: 0;
padding: 0;
}
.layui-table-page .layui-laypage .layui-laypage-prev {
margin-left: -7px !important;
}
.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em {
left: 0;
top: 0;
padding: 0;
}
.layui-table-page .layui-laypage button,
.layui-table-page .layui-laypage input {
height: 26px;
line-height: 26px;
}
.layui-table-page .layui-laypage input {
width: 40px;
}
.layui-table-page .layui-laypage button {
padding: 0 10px;
}
.layui-table-page select {
height: 18px;
}
.layui-table-pagebar {
float: right;
line-height: 26px;
}
.layui-table-view select[lay-ignore] {
display: inline-block;
}
.layui-table-patch .layui-table-cell {
padding: 0;
width: 30px;
}
.layui-table-edit {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
padding: 0 14px 1px;
border-radius: 0;
box-shadow: 1px 1px 20px rgba(0, 0, 0, 0.15);
}
.layui-table-edit:focus {
border-color: #5fb878 !important;
}
select.layui-table-edit {
padding: 0 0 0 10px;
border-color: #d2d2d2;
}
.layui-table-view .layui-form-checkbox,
.layui-table-view .layui-form-radio,
.layui-table-view .layui-form-switch {
top: 0;
margin: 0;
box-sizing: content-box;
}
.layui-table-view .layui-form-checkbox {
top: -1px;
height: 26px;
line-height: 26px;
}
.layui-table-view .layui-form-checkbox i {
height: 26px;
}
.layui-table-grid .layui-table-cell {
overflow: visible;
}
.layui-table-grid-down {
position: absolute;
top: 0;
right: 0;
width: 26px;
height: 100%;
padding: 5px 0;
border-width: 0 0 0 1px;
text-align: center;
background-color: #fff;
color: #999;
cursor: pointer;
}
.layui-table-grid-down .layui-icon {
position: absolute;
top: 50%;
left: 50%;
margin: -8px 0 0 -8px;
}
.layui-table-grid-down:hover {
background-color: #fbfbfb;
}
body .layui-table-tips .layui-layer-content {
background: 0 0;
padding: 0;
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.12);
}
.layui-table-tips-main {
margin: -44px 0 0 -1px;
max-height: 150px;
padding: 8px 15px;
font-size: 14px;
overflow-y: scroll;
background-color: #fff;
color: #666;
}
.layui-table-tips-c {
position: absolute;
right: -3px;
top: -13px;
width: 20px;
height: 20px;
padding: 3px;
cursor: pointer;
background-color: #666;
border-radius: 50%;
color: #fff;
}
.layui-table-tips-c:hover {
background-color: #777;
}
.layui-table-tips-c:before {
position: relative;
right: -2px;
}
.layui-table,
.layui-table-view {
margin: 10px 0;
}

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayTimeline", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,9 +1,8 @@
import type { App } from "vue"; import type { App } from "vue";
import Component from "./index.vue"; import Component from "./index.vue";
import type { IDefineComponent } from "../../types/index";
Component.install = (app: App) => { Component.install = (app: App) => {
app.component(Component.name || "LayTimelineItem", Component); app.component(Component.name, Component);
}; };
export default Component as IDefineComponent; export default Component;

View File

@ -1,21 +1,3 @@
<template>
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis" v-if="slot.dot">
<slot name="dot"></slot>
</i>
<i class="layui-icon layui-timeline-axis" v-else></i>
<div class="layui-timeline-content layui-text">
<div v-if="simple" class="layui-timeline-title">
{{ title }}
</div>
<h3 v-else class="layui-timeline-title">
{{ title }}
</h3>
<slot></slot>
</div>
</li>
</template>
<script lang="ts"> <script lang="ts">
export default { export default {
name: "LayTimelineItem", name: "LayTimelineItem",
@ -34,3 +16,21 @@ export interface LayTimelineItemProps {
const props = defineProps<LayTimelineItemProps>(); const props = defineProps<LayTimelineItemProps>();
</script> </script>
<template>
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis" v-if="slot.dot">
<slot name="dot"></slot>
</i>
<i class="layui-icon layui-timeline-axis" v-else></i>
<div class="layui-timeline-content layui-text">
<div v-if="simple" class="layui-timeline-title">
{{ title }}
</div>
<h3 v-else class="layui-timeline-title">
{{ title }}
</h3>
<slot></slot>
</div>
</li>
</template>

View File

@ -75,6 +75,7 @@ import LaySplitPanel from "./component/splitPanel/index";
import LaySplitPanelItem from "./component/splitPanelItem/index"; import LaySplitPanelItem from "./component/splitPanelItem/index";
import LayException from "./component/exception/index" import LayException from "./component/exception/index"
import LayResult from "./component/result/index" import LayResult from "./component/result/index"
import LayConfigProvider from "./provider"
const components: Record<string, Component> = { const components: Record<string, Component> = {
LaySplitPanel, LaySplitPanel,
@ -146,7 +147,8 @@ const components: Record<string, Component> = {
LayStepItem, LayStepItem,
LaySubMenu, LaySubMenu,
LayException, LayException,
LayResult LayResult,
LayConfigProvider
}; };
const install = (app: App): void => { const install = (app: App): void => {
@ -226,7 +228,8 @@ export {
LayStepItem, LayStepItem,
LaySubMenu, LaySubMenu,
LayException, LayException,
LayResult LayResult,
LayConfigProvider
}; };
export { layer, useLayer }; export { layer, useLayer };

8
src/provider/index.ts Normal file
View File

@ -0,0 +1,8 @@
import type { App } from "vue";
import Component from "./index.vue";
Component.install = (app: App) => {
app.component(Component.name, Component);
};
export default Component;

19
src/provider/index.vue Normal file
View File

@ -0,0 +1,19 @@
<script lang="ts">
export default {
name: "lay-config-provider"
}
</script>
<script setup lang="ts">
//
//
</script>
<template>
<div class="lay-config-provider">
<slot></slot>
</div>
</template>

View File

@ -1677,11 +1677,6 @@ a cite {
cursor: pointer; cursor: pointer;
} }
.layui-table,
.layui-table-view {
margin: 10px 0;
}
.layui-flow-more { .layui-flow-more {
margin: 10px 0; margin: 10px 0;
text-align: center; text-align: center;
@ -1716,253 +1711,6 @@ a cite {
color: #737383; color: #737383;
} }
.layui-table {
width: 100%;
background-color: #fff;
color: #666;
}
.layui-table tr {
transition: all 0.3s;
-webkit-transition: all 0.3s;
}
.layui-table th {
text-align: left;
font-weight: 400;
}
.layui-table tbody tr:hover,
.layui-table thead tr,
.layui-table-click,
.layui-table-header,
.layui-table-hover,
.layui-table-mend,
.layui-table-patch,
.layui-table-tool,
.layui-table-total,
.layui-table-total tr,
.layui-table[lay-even] tr:nth-child(even) {
background-color: #fafafa;
}
.layui-table td,
.layui-table th,
.layui-table-col-set,
.layui-table-fixed-r,
.layui-table-grid-down,
.layui-table-header,
.layui-table-page,
.layui-table-tips-main,
.layui-table-tool,
.layui-table-total,
.layui-table-view,
.layui-table[lay-skin="line"],
.layui-table[lay-skin="row"] {
border-width: 1px;
border-style: solid;
border-color: #eee;
}
.layui-table td,
.layui-table th {
position: relative;
padding: 9px 15px;
min-height: 20px;
line-height: 20px;
font-size: 14px;
}
.layui-table[lay-skin="line"] td,
.layui-table[lay-skin="line"] th {
border-width: 0 0 1px;
}
.layui-table[lay-skin="row"] td,
.layui-table[lay-skin="row"] th {
border-width: 0 1px 0 0;
}
.layui-table[lay-skin="nob"] td,
.layui-table[lay-skin="nob"] th {
border: none;
}
.layui-table img {
max-width: 100px;
}
.layui-table[lay-size="lg"] td,
.layui-table[lay-size="lg"] th {
padding: 15px 30px;
}
.layui-table-view .layui-table[lay-size="lg"] .layui-table-cell {
height: 40px;
line-height: 40px;
}
.layui-table[lay-size="sm"] td,
.layui-table[lay-size="sm"] th {
font-size: 12px;
padding: 5px 10px;
}
.layui-table-view .layui-table[lay-size="sm"] .layui-table-cell {
height: 20px;
line-height: 20px;
}
.layui-table[lay-data] {
display: none;
}
.layui-table-box {
position: relative;
overflow: hidden;
}
.layui-table-view .layui-table {
position: relative;
margin: 0;
border-collapse: separate;
}
.layui-table-view .layui-table[lay-skin="line"] {
border-width: 0 1px 0 0;
}
.layui-table-view .layui-table[lay-skin="row"] {
border-width: 0 0 1px;
}
.layui-table-view .layui-table td,
.layui-table-view .layui-table th {
border-top: none;
border-left: none;
}
.layui-table-view .layui-table td.layui-table-col-special,
.layui-table-view .layui-table th.layui-table-col-special {
padding: 5px 16px;
}
.layui-table-view .layui-table th.layui-unselect .layui-table-cell span {
cursor: pointer;
}
.layui-table-view .layui-table td {
cursor: default;
}
.layui-table-view .layui-table td[data-edit="text"] {
cursor: text;
}
.layui-table-view .layui-form-checkbox[lay-skin="primary"] i {
width: 18px;
height: 18px;
}
.layui-table-view .layui-form-radio {
line-height: 0;
padding: 0;
}
.layui-table-view .layui-form-radio > i {
margin: 0;
font-size: 20px;
}
.layui-table-init {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
text-align: center;
z-index: 110;
}
.layui-table-init .layui-icon {
position: absolute;
left: 50%;
top: 50%;
margin: -15px 0 0 -15px;
font-size: 30px;
color: #c2c2c2;
}
.layui-table-header {
border-width: 0 0 1px;
overflow: hidden;
}
.layui-table-header .layui-table {
margin-bottom: -1px;
}
.layui-table-tool .layui-inline[lay-event] {
position: relative;
width: 26px;
height: 26px;
padding: 5px;
line-height: 16px;
margin-right: 10px;
text-align: center;
color: #333;
border: 1px solid #ccc;
cursor: pointer;
-webkit-transition: 0.5s all;
transition: 0.5s all;
}
.layui-table-tool .layui-inline[lay-event]:hover {
border: 1px solid #999;
}
.layui-table-tool-temp {
padding-right: 120px;
}
.layui-table-tool-self {
position: absolute;
right: 17px;
top: 10px;
}
.layui-table-tool .layui-table-tool-self .layui-inline[lay-event] {
margin: 0 0 0 10px;
}
.layui-table-tool-panel {
position: absolute;
top: 29px;
left: -1px;
padding: 5px 0;
min-width: 150px;
min-height: 40px;
border: 1px solid #d2d2d2;
text-align: left;
overflow-y: auto;
background-color: #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12);
}
.layui-table-cell,
.layui-table-tool-panel li {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.layui-table-tool-panel li {
padding: 0 10px;
line-height: 30px;
-webkit-transition: 0.5s all;
transition: 0.5s all;
}
.layui-iconpicker-list li, .layui-iconpicker-list li,
.layui-keyboard-list li, .layui-keyboard-list li,
.layui-menu li, .layui-menu li,
@ -1971,284 +1719,6 @@ a cite {
transition: all 0.3s; transition: all 0.3s;
} }
.layui-table-tool-panel li .layui-form-checkbox[lay-skin="primary"] {
width: 100%;
padding-left: 28px;
}
.layui-table-tool-panel li:hover {
background-color: #f6f6f6;
}
.layui-table-tool-panel li .layui-form-checkbox[lay-skin="primary"] i {
position: absolute;
left: 0;
top: 0;
}
.layui-table-tool-panel li .layui-form-checkbox[lay-skin="primary"] span {
padding: 0;
}
.layui-table-tool .layui-table-tool-self .layui-table-tool-panel {
left: auto;
right: -1px;
}
.layui-table-col-set {
position: absolute;
right: 0;
top: 0;
width: 20px;
height: 100%;
border-width: 0 0 0 1px;
background-color: #fff;
}
.layui-table-sort {
width: 10px;
height: 20px;
margin-left: 5px;
cursor: pointer !important;
}
.layui-table-sort .layui-edge {
position: absolute;
left: 5px;
border-width: 5px;
}
.layui-table-sort .layui-table-sort-asc {
top: 3px;
border-top: none;
border-bottom-style: solid;
border-bottom-color: #b2b2b2;
}
.layui-table-sort .layui-table-sort-asc:hover {
border-bottom-color: #666;
}
.layui-table-sort .layui-table-sort-desc {
bottom: 5px;
border-bottom: none;
border-top-style: solid;
border-top-color: #b2b2b2;
}
.layui-table-sort .layui-table-sort-desc:hover {
border-top-color: #666;
}
.layui-table-sort[lay-sort="asc"] .layui-table-sort-asc {
border-bottom-color: #000;
}
.layui-table-sort[lay-sort="desc"] .layui-table-sort-desc {
border-top-color: #000;
}
.layui-table-cell {
height: 28px;
line-height: 28px;
position: relative;
box-sizing: border-box;
}
.layui-table-cell .layui-form-checkbox[lay-skin="primary"] {
top: -1px;
padding: 0;
}
.layui-table-cell .layui-table-link {
color: #01aaed;
}
.laytable-cell-checkbox,
.laytable-cell-numbers,
.laytable-cell-radio,
.laytable-cell-space {
padding: 0;
text-align: center;
-webkit-box-pack: center;
}
.layui-table-body {
position: relative;
overflow: auto;
margin-right: -1px;
margin-bottom: -1px;
}
.layui-table-body .layui-none {
line-height: 26px;
padding: 30px 15px;
text-align: center;
color: #999;
}
.layui-table-fixed {
position: absolute;
left: 0;
top: 0;
z-index: 101;
}
.layui-table-fixed .layui-table-body {
overflow: hidden;
}
.layui-table-fixed-l {
box-shadow: 1px 0 8px rgba(0, 0, 0, 0.08);
}
.layui-table-fixed-r {
left: auto;
right: -1px;
border-width: 0 0 0 1px;
box-shadow: -1px 0 8px rgba(0, 0, 0, 0.08);
}
.layui-table-fixed-r .layui-table-header {
position: relative;
overflow: visible;
}
.layui-table-mend {
position: absolute;
right: -49px;
top: 0;
height: 100%;
width: 50px;
}
.layui-table-tool {
position: relative;
z-index: 890;
width: 100%;
min-height: 50px;
line-height: 30px;
padding: 10px 15px;
border-width: 0 0 1px;
}
.layui-table-tool .layui-btn-container {
margin-bottom: -10px;
}
.layui-table-page,
.layui-table-total {
border-width: 1px 0 0;
margin-bottom: -1px;
overflow: hidden;
}
.layui-table-page {
position: relative;
width: 100%;
padding: 7px 7px 0;
height: 41px;
font-size: 12px;
white-space: nowrap;
}
.layui-table-page > div {
height: 26px;
}
.layui-table-page .layui-laypage {
margin: 0;
}
.layui-table-page .layui-laypage a,
.layui-table-page .layui-laypage span {
height: 26px;
line-height: 26px;
margin-bottom: 10px;
border: none;
background: 0 0;
}
.layui-table-page .layui-laypage a,
.layui-table-page .layui-laypage span.layui-laypage-curr {
padding: 0 12px;
}
.layui-table-page .layui-laypage span {
margin-left: 0;
padding: 0;
}
.layui-table-page .layui-laypage .layui-laypage-prev {
margin-left: -7px !important;
}
.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em {
left: 0;
top: 0;
padding: 0;
}
.layui-table-page .layui-laypage button,
.layui-table-page .layui-laypage input {
height: 26px;
line-height: 26px;
}
.layui-table-page .layui-laypage input {
width: 40px;
}
.layui-table-page .layui-laypage button {
padding: 0 10px;
}
.layui-table-page select {
height: 18px;
}
.layui-table-pagebar {
float: right;
line-height: 26px;
}
.layui-table-view select[lay-ignore] {
display: inline-block;
}
.layui-table-patch .layui-table-cell {
padding: 0;
width: 30px;
}
.layui-table-edit {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
padding: 0 14px 1px;
border-radius: 0;
box-shadow: 1px 1px 20px rgba(0, 0, 0, 0.15);
}
.layui-table-edit:focus {
border-color: #5fb878 !important;
}
select.layui-table-edit {
padding: 0 0 0 10px;
border-color: #d2d2d2;
}
.layui-table-view .layui-form-checkbox,
.layui-table-view .layui-form-radio,
.layui-table-view .layui-form-switch {
top: 0;
margin: 0;
box-sizing: content-box;
}
.layui-colorpicker-alpha-slider, .layui-colorpicker-alpha-slider,
.layui-colorpicker-side-slider, .layui-colorpicker-side-slider,
.layui-menu, .layui-menu,
@ -2257,83 +1727,6 @@ select.layui-table-edit {
box-sizing: border-box; box-sizing: border-box;
} }
.layui-table-view .layui-form-checkbox {
top: -1px;
height: 26px;
line-height: 26px;
}
.layui-table-view .layui-form-checkbox i {
height: 26px;
}
.layui-table-grid .layui-table-cell {
overflow: visible;
}
.layui-table-grid-down {
position: absolute;
top: 0;
right: 0;
width: 26px;
height: 100%;
padding: 5px 0;
border-width: 0 0 0 1px;
text-align: center;
background-color: #fff;
color: #999;
cursor: pointer;
}
.layui-table-grid-down .layui-icon {
position: absolute;
top: 50%;
left: 50%;
margin: -8px 0 0 -8px;
}
.layui-table-grid-down:hover {
background-color: #fbfbfb;
}
body .layui-table-tips .layui-layer-content {
background: 0 0;
padding: 0;
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.12);
}
.layui-table-tips-main {
margin: -44px 0 0 -1px;
max-height: 150px;
padding: 8px 15px;
font-size: 14px;
overflow-y: scroll;
background-color: #fff;
color: #666;
}
.layui-table-tips-c {
position: absolute;
right: -3px;
top: -13px;
width: 20px;
height: 20px;
padding: 3px;
cursor: pointer;
background-color: #666;
border-radius: 50%;
color: #fff;
}
.layui-table-tips-c:hover {
background-color: #777;
}
.layui-table-tips-c:before {
position: relative;
right: -2px;
}
.layui-upload-file { .layui-upload-file {
display: none !important; display: none !important;
opacity: 0.01; opacity: 0.01;

27
src/theme/variable.less Normal file
View File

@ -0,0 +1,27 @@
@global-primary-color: #009688;
@global-danger-color: #ff5722;
@global-normal-color: #1e9fff;
@global-warm-color: #ffb800;
@global-bg-color: #393D49;
@global-text-color: #fff;
@global-border-radius: 2px;
@button-primary-color: @global-primary-color;
@button-normal-color: @global-normal-color;
@button-danger-color: @global-danger-color;
@button-warm-color: @global-warm-color;
@button-border-radius: @global-border-radius;
@card-border-radius: @global-border-radius;
@card-bg-color: @global-bg-color;