commit
dbfba278c1
@ -1,4 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
. "$(dirname "$0")/_/husky.sh"
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
|
||||||
npx --no-install commitlint --edit $1
|
npm run lint:prettier
|
||||||
|
npx --no -- commitlint --edit $1
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
"build:types": "rimraf types && tsc -d",
|
"build:types": "rimraf types && tsc -d",
|
||||||
"build:example": "vite build example",
|
"build:example": "vite build example",
|
||||||
"lint:eslint": "eslint 'src/**/*.{vue,ts,tsx}' --fix",
|
"lint:eslint": "eslint 'src/**/*.{vue,ts,tsx}' --fix",
|
||||||
"lint:prettier": "prettier --write \"src/**/*\"",
|
"lint:prettier": "prettier --write \"src/**/*.{vue,ts}\"",
|
||||||
"prepare": "husky install",
|
"prepare": "husky install",
|
||||||
"postinstall": "npm run prepare",
|
"postinstall": "npm run prepare",
|
||||||
"commit": "git-cz",
|
"commit": "git-cz",
|
||||||
|
@ -13,9 +13,7 @@ export interface LayAvatarProps {
|
|||||||
radius?: boolean;
|
radius?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LayAvatarProps>(), {
|
const props = withDefaults(defineProps<LayAvatarProps>(), {});
|
||||||
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -4,8 +4,7 @@ export default {
|
|||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts"></script>
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="layui-avatar-list">
|
<div class="layui-avatar-list">
|
||||||
|
@ -25,13 +25,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.layui-backtop-medium{
|
.layui-backtop-medium {
|
||||||
width: @width - 10px;
|
width: @width - 10px;
|
||||||
height: @height - 10px;
|
height: @height - 10px;
|
||||||
font-size: 30px;
|
font-size: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layui-backtop-small{
|
.layui-backtop-small {
|
||||||
width: @width - 20px;
|
width: @width - 20px;
|
||||||
height: @height - 20px;
|
height: @height - 20px;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
|
@ -5,13 +5,7 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import {
|
import { ref, shallowRef, withDefaults, computed, onMounted } from "vue";
|
||||||
ref,
|
|
||||||
shallowRef,
|
|
||||||
withDefaults,
|
|
||||||
computed,
|
|
||||||
onMounted,
|
|
||||||
} from "vue";
|
|
||||||
import LayIcon from "../icon/index";
|
import LayIcon from "../icon/index";
|
||||||
import "./index.less";
|
import "./index.less";
|
||||||
|
|
||||||
@ -50,15 +44,15 @@ let visible = ref(props.showHeight === 0);
|
|||||||
|
|
||||||
const classBacktop = computed(() => {
|
const classBacktop = computed(() => {
|
||||||
return {
|
return {
|
||||||
'layui-backtop-medium': props.size === "medium",
|
"layui-backtop-medium": props.size === "medium",
|
||||||
'layui-backtop-small': props.size === "small"
|
"layui-backtop-small": props.size === "small",
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
const borderRadius = computed(() => {
|
const borderRadius = computed(() => {
|
||||||
if (props.circle) {
|
if (props.circle) {
|
||||||
return "50%"
|
return "50%";
|
||||||
};
|
}
|
||||||
return typeof props.borderRadius === "number"
|
return typeof props.borderRadius === "number"
|
||||||
? `${props.borderRadius}px`
|
? `${props.borderRadius}px`
|
||||||
: props.borderRadius;
|
: props.borderRadius;
|
||||||
@ -132,13 +126,15 @@ const getScrollTarget = () => {
|
|||||||
return getScrollParent(backtopRef.value!, false);
|
return getScrollParent(backtopRef.value!, false);
|
||||||
} else {
|
} else {
|
||||||
const targetElement = document.querySelector<HTMLElement>(props.target);
|
const targetElement = document.querySelector<HTMLElement>(props.target);
|
||||||
if (!targetElement){
|
if (!targetElement) {
|
||||||
throw new Error(`target is not existed: ${props.target}`);
|
throw new Error(`target is not existed: ${props.target}`);
|
||||||
}
|
}
|
||||||
// 特定容器内部显示
|
// 特定容器内部显示
|
||||||
if (props.position === "absolute") {
|
if (props.position === "absolute") {
|
||||||
if (!targetElement.parentElement){
|
if (!targetElement.parentElement) {
|
||||||
throw new Error( `target parent element is not existed: ${props.target}`);
|
throw new Error(
|
||||||
|
`target parent element is not existed: ${props.target}`
|
||||||
|
);
|
||||||
}
|
}
|
||||||
targetElement.parentElement.style.position = "relative";
|
targetElement.parentElement.style.position = "relative";
|
||||||
// backtopRef.value!.style.position = props.position;
|
// backtopRef.value!.style.position = props.position;
|
||||||
@ -163,7 +159,9 @@ const getScrollParent = (
|
|||||||
if (excludeStaticParent && style.position === "static") {
|
if (excludeStaticParent && style.position === "static") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)){
|
if (
|
||||||
|
overflowRegex.test(style.overflow + style.overflowY + style.overflowX)
|
||||||
|
) {
|
||||||
return parent;
|
return parent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,14 +8,12 @@ export default {
|
|||||||
import { provide, withDefaults } from "vue";
|
import { provide, withDefaults } from "vue";
|
||||||
|
|
||||||
export interface LayBreadcrumbProps {
|
export interface LayBreadcrumbProps {
|
||||||
separator?: string;
|
separator?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LayBreadcrumbProps>(),
|
const props = withDefaults(defineProps<LayBreadcrumbProps>(), {
|
||||||
{
|
separator: "/",
|
||||||
separator: "/",
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
provide("separator", props.separator);
|
provide("separator", props.separator);
|
||||||
</script>
|
</script>
|
||||||
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayBreadcrumbItem"
|
name: "LayBreadcrumbItem",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
@ -31,11 +31,11 @@ const props = withDefaults(defineProps<LayButtonProps>(), {
|
|||||||
|
|
||||||
const emit = defineEmits(["click"]);
|
const emit = defineEmits(["click"]);
|
||||||
|
|
||||||
const onClick = (event : any) => {
|
const onClick = (event: any) => {
|
||||||
if(!props.disabled) {
|
if (!props.disabled) {
|
||||||
emit("click", event);
|
emit("click", event);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
const classes = computed(() => {
|
const classes = computed(() => {
|
||||||
return [
|
return [
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayCard"
|
name: "LayCard",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
@ -1,17 +1,11 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayCarousel"
|
name: "LayCarousel",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {
|
import { withDefaults, provide, useSlots, ref, computed } from "vue";
|
||||||
withDefaults,
|
|
||||||
provide,
|
|
||||||
useSlots,
|
|
||||||
ref,
|
|
||||||
computed,
|
|
||||||
} from "vue";
|
|
||||||
|
|
||||||
const slot = useSlots() as any;
|
const slot = useSlots() as any;
|
||||||
const slots = slot.default && (slot.default() as any[]);
|
const slots = slot.default && (slot.default() as any[]);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayCarouselItem"
|
name: "LayCarouselItem",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
@ -1,28 +1,21 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name:"LayCollapse"
|
name: "LayCollapse",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {
|
import { withDefaults, provide, ref, watch } from "vue";
|
||||||
withDefaults,
|
|
||||||
provide,
|
|
||||||
ref,
|
|
||||||
watch,
|
|
||||||
} from "vue";
|
|
||||||
|
|
||||||
export interface LayCollapseProps {
|
export interface LayCollapseProps {
|
||||||
modelValue?: number | string | [];
|
modelValue?: number | string | [];
|
||||||
accordion?: boolean;
|
accordion?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LayCollapseProps>(),
|
const props = withDefaults(defineProps<LayCollapseProps>(), {
|
||||||
{
|
modelValue: () => [],
|
||||||
modelValue: () => [],
|
accordion: false,
|
||||||
accordion: false,
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// 监听传入的值
|
// 监听传入的值
|
||||||
watch(
|
watch(
|
||||||
|
@ -1,23 +1,21 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name:"LayCollapseItem"
|
name: "LayCollapseItem",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { withDefaults, inject, computed, ref } from "vue";
|
import { withDefaults, inject, computed, ref } from "vue";
|
||||||
|
|
||||||
export interface LayCollapseItemProps {
|
export interface LayCollapseItemProps {
|
||||||
id: number | string;
|
id: number | string;
|
||||||
title: string;
|
title: string;
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LayCollapseItemProps>(),
|
const props = withDefaults(defineProps<LayCollapseItemProps>(), {
|
||||||
{
|
disabled: false,
|
||||||
disabled: false,
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
const { accordion, activeValues, emit } = inject("layCollapse") as any;
|
const { accordion, activeValues, emit } = inject("layCollapse") as any;
|
||||||
|
|
||||||
|
@ -75,7 +75,8 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
height: 10px;
|
height: 10px;
|
||||||
box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1);
|
box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1);
|
||||||
background: #fff url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAWElEQVRIiWM8fubkfwYygKWJOSM5+mCAhRLNoxaPWjxq8ajFoxbTyeL/DAfJ0Xjs3Cl7Siwmu4Yht1aDgZEYx6MWj1o8avGoxaMWD3qLya5X//4nqx6HAQC7RBGFzolqTAAAAABJRU5ErkJggg==");
|
background: #fff
|
||||||
|
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAWElEQVRIiWM8fubkfwYygKWJOSM5+mCAhRLNoxaPWjxq8ajFoxbTyeL/DAfJ0Xjs3Cl7Siwmu4Yht1aDgZEYx6MWj1o8avGoxaMWD3qLya5X//4nqx6HAQC7RBGFzolqTAAAAABJRU5ErkJggg==");
|
||||||
background-size: 10px 10px;
|
background-size: 10px 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,13 +110,7 @@ export interface LayColorPicker {
|
|||||||
|
|
||||||
const props = withDefaults(defineProps<LayColorPicker>(), {
|
const props = withDefaults(defineProps<LayColorPicker>(), {
|
||||||
modelValue: { r: 217, g: 128, b: 95, a: 1 },
|
modelValue: { r: 217, g: 128, b: 95, a: 1 },
|
||||||
preset: [
|
preset: ["#009688", "#1e9fff", "#ffb800", "#ff5722", "#5fb878"],
|
||||||
"#009688",
|
|
||||||
"#1e9fff",
|
|
||||||
"#ffb800",
|
|
||||||
"#ff5722",
|
|
||||||
"#5fb878",
|
|
||||||
]
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const saturationValue = ref<null | HTMLElement>(null);
|
const saturationValue = ref<null | HTMLElement>(null);
|
||||||
|
@ -1 +0,0 @@
|
|||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<slot name="prefix"></slot>
|
<slot name="prefix"></slot>
|
||||||
<span ref="counterRef" style="font-family:sans-serif;" />
|
<span ref="counterRef" style="font-family: sans-serif" />
|
||||||
<slot name="suffix"></slot>
|
<slot name="suffix"></slot>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -11,9 +11,9 @@ export default {
|
|||||||
</script>
|
</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";
|
||||||
import type { CountUpOptions } from 'countup.js'
|
import type { CountUpOptions } from "countup.js";
|
||||||
|
|
||||||
export interface LayCountupProps {
|
export interface LayCountupProps {
|
||||||
endVal?: number; //显示的值
|
endVal?: number; //显示的值
|
||||||
@ -30,51 +30,58 @@ export interface LayCountupProps {
|
|||||||
const props = withDefaults(defineProps<LayCountupProps>(), {
|
const props = withDefaults(defineProps<LayCountupProps>(), {
|
||||||
endVal: 0,
|
endVal: 0,
|
||||||
option: () => {
|
option: () => {
|
||||||
return {}
|
return {};
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const counterRef = ref<HTMLDivElement | null>(null);
|
const counterRef = ref<HTMLDivElement | null>(null);
|
||||||
const instance = ref<CountUp | null>(null);
|
const instance = ref<CountUp | null>(null);
|
||||||
const {decimalPlaces,useGrouping,separator,useEasing,duration,prefix,suffix} = props;
|
const {
|
||||||
|
decimalPlaces,
|
||||||
|
useGrouping,
|
||||||
|
separator,
|
||||||
|
useEasing,
|
||||||
|
duration,
|
||||||
|
prefix,
|
||||||
|
suffix,
|
||||||
|
} = props;
|
||||||
const defaultOptions: CountUpOptions = {
|
const defaultOptions: CountUpOptions = {
|
||||||
startVal: 0, // 开始数字
|
startVal: 0, // 开始数字
|
||||||
decimalPlaces: decimalPlaces ? decimalPlaces : 0, // 小数位数
|
decimalPlaces: decimalPlaces ? decimalPlaces : 0, // 小数位数
|
||||||
useEasing: useEasing ? useEasing : true, // 使用缓动动画
|
useEasing: useEasing ? useEasing : true, // 使用缓动动画
|
||||||
duration: duration ? duration : 2, // 动画持续时间
|
duration: duration ? duration : 2, // 动画持续时间
|
||||||
useGrouping: useGrouping ? useGrouping : true, // 是否使用千位分隔符
|
useGrouping: useGrouping ? useGrouping : true, // 是否使用千位分隔符
|
||||||
separator:separator ? separator : ",", // 千位分隔符
|
separator: separator ? separator : ",", // 千位分隔符
|
||||||
decimal:".", // 小数点分隔符
|
decimal: ".", // 小数点分隔符
|
||||||
prefix: prefix ? prefix : "", // 前缀
|
prefix: prefix ? prefix : "", // 前缀
|
||||||
suffix: suffix ? suffix : "", // 后缀
|
suffix: suffix ? suffix : "", // 后缀
|
||||||
}
|
};
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.endVal,
|
() => props.endVal,
|
||||||
() => {
|
() => {
|
||||||
update(props.endVal)
|
update(props.endVal);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
createCounter()
|
createCounter();
|
||||||
})
|
});
|
||||||
|
|
||||||
const createCounter = () => {
|
const createCounter = () => {
|
||||||
if (!counterRef.value) return
|
if (!counterRef.value) return;
|
||||||
const opts: CountUpOptions = Object.assign(defaultOptions, props.option)
|
const opts: CountUpOptions = Object.assign(defaultOptions, props.option);
|
||||||
instance.value = new CountUp(counterRef?.value, props.endVal, opts);
|
instance.value = new CountUp(counterRef?.value, props.endVal, opts);
|
||||||
start();
|
start();
|
||||||
}
|
};
|
||||||
|
|
||||||
const start = () => {
|
const start = () => {
|
||||||
if (!instance.value) return
|
if (!instance.value) return;
|
||||||
instance?.value.start();
|
instance?.value.start();
|
||||||
}
|
};
|
||||||
|
|
||||||
const update = (newEndVal: number) => {
|
const update = (newEndVal: number) => {
|
||||||
if (!instance.value) return
|
if (!instance.value) return;
|
||||||
instance?.value.update(newEndVal);
|
instance?.value.update(newEndVal);
|
||||||
}
|
};
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayDropdownItem"
|
name: "LayDropdownItem",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
@ -1,43 +1,43 @@
|
|||||||
.layui-exception{
|
.layui-exception {
|
||||||
.layui-exception-image{
|
.layui-exception-image {
|
||||||
width: 50%;
|
width: 50%;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
> div {
|
> div {
|
||||||
height: 200px;
|
height: 200px;
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
}
|
|
||||||
.error-401 {
|
|
||||||
background-image: url(./image/401.svg);
|
|
||||||
}
|
|
||||||
.error-403 {
|
|
||||||
background-image: url(./image/403.svg);
|
|
||||||
}
|
|
||||||
.error-404 {
|
|
||||||
background-image: url(./image/404.svg);
|
|
||||||
}
|
|
||||||
.error-500 {
|
|
||||||
background-image: url(./image/500.svg);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
.layui-exception-details{
|
.error-401 {
|
||||||
.layui-exception-details-content {
|
background-image: url(./image/401.svg);
|
||||||
margin-left: 100px;
|
|
||||||
.layui-exception-details-title{
|
|
||||||
font-size: 60px;
|
|
||||||
color: #434e59;
|
|
||||||
margin-bottom: 24px;
|
|
||||||
font-weight: 600;
|
|
||||||
}
|
|
||||||
.layui-exception-details-describe{
|
|
||||||
font-size: 18px;
|
|
||||||
color: rgba(0, 0, 0, .45);
|
|
||||||
margin-bottom: 26px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
width: 50%;
|
|
||||||
vertical-align: top;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
}
|
||||||
|
.error-403 {
|
||||||
|
background-image: url(./image/403.svg);
|
||||||
|
}
|
||||||
|
.error-404 {
|
||||||
|
background-image: url(./image/404.svg);
|
||||||
|
}
|
||||||
|
.error-500 {
|
||||||
|
background-image: url(./image/500.svg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.layui-exception-details {
|
||||||
|
.layui-exception-details-content {
|
||||||
|
margin-left: 100px;
|
||||||
|
.layui-exception-details-title {
|
||||||
|
font-size: 60px;
|
||||||
|
color: #434e59;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.layui-exception-details-describe {
|
||||||
|
font-size: 18px;
|
||||||
|
color: rgba(0, 0, 0, 0.45);
|
||||||
|
margin-bottom: 26px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
width: 50%;
|
||||||
|
vertical-align: top;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayException"
|
name: "LayException",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useSlots } from "vue";
|
import { useSlots } from "vue";
|
||||||
@ -17,28 +17,28 @@ const slots = useSlots();
|
|||||||
|
|
||||||
const props = withDefaults(defineProps<LayDropdownProps>(), {
|
const props = withDefaults(defineProps<LayDropdownProps>(), {
|
||||||
title: "Exception",
|
title: "Exception",
|
||||||
describe: "describe"
|
describe: "describe",
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="layui-exception">
|
<div class="layui-exception">
|
||||||
<div class="layui-exception-image">
|
<div class="layui-exception-image">
|
||||||
<slot name="image" v-if="slots.default"></slot>
|
<slot name="image" v-if="slots.default"></slot>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<div v-if="status=='401'" class="error-401" />
|
<div v-if="status == '401'" class="error-401" />
|
||||||
<div v-if="status=='403'" class="error-403" />
|
<div v-if="status == '403'" class="error-403" />
|
||||||
<div v-if="status=='404'" class="error-404" />
|
<div v-if="status == '404'" class="error-404" />
|
||||||
<div v-if="status=='500'" class="error-500" />
|
<div v-if="status == '500'" class="error-500" />
|
||||||
</template>
|
</template>
|
||||||
</div>
|
|
||||||
<div class="layui-exception-details">
|
|
||||||
<div class="layui-exception-details-content">
|
|
||||||
<div class="layui-exception-details-title">{{title}}</div>
|
|
||||||
<div class="layui-exception-details-describe">{{describe}}</div>
|
|
||||||
<div class="layui-exception-details-operate">
|
|
||||||
<slot name="action"></slot>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="layui-exception-details">
|
||||||
|
<div class="layui-exception-details-content">
|
||||||
|
<div class="layui-exception-details-title">{{ title }}</div>
|
||||||
|
<div class="layui-exception-details-describe">{{ describe }}</div>
|
||||||
|
<div class="layui-exception-details-operate">
|
||||||
|
<slot name="action"></slot>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
@ -1 +0,0 @@
|
|||||||
|
|
@ -1,12 +1,11 @@
|
|||||||
|
|
||||||
@import "../../theme/variable.less";
|
@import "../../theme/variable.less";
|
||||||
|
|
||||||
@field-border-color: var(--field-border-color);
|
@field-border-color: var(--field-border-color);
|
||||||
@field-border-radius: var(--field-border-radius);
|
@field-border-radius: var(--field-border-radius);
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--field-border-color: @global-border-color;
|
--field-border-color: @global-border-color;
|
||||||
--field-border-radius: @global-border-radius;
|
--field-border-radius: @global-border-radius;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layui-field {
|
.layui-field {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayField"
|
name: "LayField",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
@ -7,33 +7,27 @@ export default {
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { toRefs, provide, reactive, onMounted } from "vue";
|
import { toRefs, provide, reactive, onMounted } from "vue";
|
||||||
import { Rule, ValidateError, ValidateMessages } from "async-validator";
|
import { Rule, ValidateError, ValidateMessages } from "async-validator";
|
||||||
import {
|
import { LayFormItemContext, FormCallback, modelType } from "../../types/form";
|
||||||
LayFormItemContext,
|
|
||||||
FormCallback,
|
|
||||||
modelType,
|
|
||||||
} from "../../types/form";
|
|
||||||
|
|
||||||
export interface LayFormProps {
|
export interface LayFormProps {
|
||||||
model?: modelType;
|
model?: modelType;
|
||||||
required?: boolean;
|
required?: boolean;
|
||||||
rules?: Rule;
|
rules?: Rule;
|
||||||
initValidate?: boolean;
|
initValidate?: boolean;
|
||||||
requiredIcons?: string;
|
requiredIcons?: string;
|
||||||
requiredErrorMessage?: string;
|
requiredErrorMessage?: string;
|
||||||
validateMessage?: ValidateMessages;
|
validateMessage?: ValidateMessages;
|
||||||
useCN?: boolean;
|
useCN?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LayFormProps>(),
|
const props = withDefaults(defineProps<LayFormProps>(), {
|
||||||
{
|
model: function () {
|
||||||
model: function () {
|
return {};
|
||||||
return {};
|
},
|
||||||
},
|
useCN: true,
|
||||||
useCN: true,
|
requiredIcons: "",
|
||||||
requiredIcons: "",
|
initValidate: false,
|
||||||
initValidate: false,
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
const formItems: LayFormItemContext[] = [];
|
const formItems: LayFormItemContext[] = [];
|
||||||
const formItemMap: { [key: string]: LayFormItemContext } = {};
|
const formItemMap: { [key: string]: LayFormItemContext } = {};
|
||||||
@ -144,7 +138,7 @@ const addField = function (item: LayFormItemContext) {
|
|||||||
defineExpose({ validate, clearValidate, reset });
|
defineExpose({ validate, clearValidate, reset });
|
||||||
|
|
||||||
provide(
|
provide(
|
||||||
'LayForm',
|
"LayForm",
|
||||||
reactive({
|
reactive({
|
||||||
formItems,
|
formItems,
|
||||||
addField,
|
addField,
|
||||||
|
@ -10,7 +10,8 @@
|
|||||||
.layui-input-block,
|
.layui-input-block,
|
||||||
.layui-input-inline {
|
.layui-input-inline {
|
||||||
.layui-form-danger {
|
.layui-form-danger {
|
||||||
&, .layui-input {
|
&,
|
||||||
|
.layui-input {
|
||||||
border-color: #ff5722 !important;
|
border-color: #ff5722 !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: 'LayFormItem'
|
name: "LayFormItem",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@ -32,21 +32,19 @@ import Schema, {
|
|||||||
import cnValidateMessage from "./cnValidateMessage";
|
import cnValidateMessage from "./cnValidateMessage";
|
||||||
|
|
||||||
export interface LayFormItemProps {
|
export interface LayFormItemProps {
|
||||||
prop?: string;
|
prop?: string;
|
||||||
mode?: string;
|
mode?: string;
|
||||||
label?: string;
|
label?: string;
|
||||||
errorMessage?: string;
|
errorMessage?: string;
|
||||||
rules?: Rule;
|
rules?: Rule;
|
||||||
required?: boolean;
|
required?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LayFormItemProps>(),
|
const props = withDefaults(defineProps<LayFormItemProps>(), {
|
||||||
{
|
mode: "block",
|
||||||
mode: "block",
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
const layForm = inject('LayForm', {} as LayFormContext);
|
const layForm = inject("LayForm", {} as LayFormContext);
|
||||||
const formItemRef = ref<HTMLDivElement>();
|
const formItemRef = ref<HTMLDivElement>();
|
||||||
const slotParent = ref<HTMLDivElement>();
|
const slotParent = ref<HTMLDivElement>();
|
||||||
|
|
||||||
|
@ -80,8 +80,8 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayIconPicker"
|
name: "LayIconPicker",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayInput"
|
name: "LayInput",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import "./index.less"
|
import "./index.less";
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from "vue-i18n";
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
|
||||||
@ -18,8 +18,7 @@ export interface LayInputProps {
|
|||||||
placeholder?: string;
|
placeholder?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LayInputProps>(), {
|
const props = withDefaults(defineProps<LayInputProps>(), {});
|
||||||
});
|
|
||||||
|
|
||||||
const emit = defineEmits(["update:modelValue", "input", "focus", "blur"]);
|
const emit = defineEmits(["update:modelValue", "input", "focus", "blur"]);
|
||||||
|
|
||||||
|
@ -9,12 +9,7 @@ import layButton from "../button/index";
|
|||||||
import layIcon from "../icon/index";
|
import layIcon from "../icon/index";
|
||||||
import layInput from "../input/index";
|
import layInput from "../input/index";
|
||||||
import "./index.less";
|
import "./index.less";
|
||||||
import {
|
import { ref, watch, withDefaults, computed } from "vue";
|
||||||
ref,
|
|
||||||
watch,
|
|
||||||
withDefaults,
|
|
||||||
computed,
|
|
||||||
} from "vue";
|
|
||||||
|
|
||||||
export interface LayInputNumberProps {
|
export interface LayInputNumberProps {
|
||||||
modelValue?: number;
|
modelValue?: number;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayLine"
|
name: "LayLine",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
@ -6,9 +6,8 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayLogo"
|
name: "LayLogo",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts"></script>
|
||||||
</script>
|
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
left: calc(100% + 5px);
|
left: calc(100% + 5px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.layui-nav .layui-show.layui-anim-upbit .left-nav.layui-show.layui-anim-upbit
|
.layui-nav .layui-show.layui-anim-upbit .left-nav.layui-show.layui-anim-upbit,
|
||||||
, .layui-nav .layui-show.layui-anim-upbit .left-nav .layui-show.layui-anim-upbit {
|
.layui-nav .layui-show.layui-anim-upbit .left-nav .layui-show.layui-anim-upbit {
|
||||||
top: 0px;
|
top: 0px;
|
||||||
left: calc(-100% - 20px);
|
left: calc(-100% - 20px);
|
||||||
}
|
}
|
||||||
@ -47,7 +47,7 @@
|
|||||||
line-height: 60px;
|
line-height: 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layui-nav .layui-nav-item > a {
|
.layui-nav .layui-nav-item > a {
|
||||||
display: block;
|
display: block;
|
||||||
padding: 0 30px;
|
padding: 0 30px;
|
||||||
color: rgba(255, 255, 255, 0.7);
|
color: rgba(255, 255, 255, 0.7);
|
||||||
@ -280,7 +280,7 @@
|
|||||||
.layui-nav-light {
|
.layui-nav-light {
|
||||||
background-color: #ffffff;
|
background-color: #ffffff;
|
||||||
* {
|
* {
|
||||||
color: grey!important;
|
color: grey !important;
|
||||||
}
|
}
|
||||||
.layui-nav-itemed > .layui-nav-child {
|
.layui-nav-itemed > .layui-nav-child {
|
||||||
background-color: rgba(0, 0, 0, 0.02);
|
background-color: rgba(0, 0, 0, 0.02);
|
||||||
@ -293,7 +293,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.layui-nav-tree .layui-this * {
|
.layui-nav-tree .layui-this * {
|
||||||
color: white!important;
|
color: white !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layui-nav-tree.inverted .layui-this,
|
.layui-nav-tree.inverted .layui-this,
|
||||||
@ -304,11 +304,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.layui-nav-tree.inverted .layui-this > a,
|
.layui-nav-tree.inverted .layui-this > a,
|
||||||
.layui-nav-tree.inverted .layui-this:hover > a {
|
.layui-nav-tree.inverted .layui-this:hover > a {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layui-nav-tree.inverted .layui-this > a{
|
.layui-nav-tree.inverted .layui-this > a {
|
||||||
padding: 5px 24px 5px 24px;
|
padding: 5px 24px 5px 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayMenu"
|
name: "LayMenu",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@ -23,9 +23,9 @@ const props = withDefaults(defineProps<LayMenuProps>(), {
|
|||||||
selectedKey: "",
|
selectedKey: "",
|
||||||
openKeys: () => [],
|
openKeys: () => [],
|
||||||
tree: false,
|
tree: false,
|
||||||
theme: 'dark',
|
theme: "dark",
|
||||||
inverted: false,
|
inverted: false,
|
||||||
level: false
|
level: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
const isTree = computed(() => props.tree);
|
const isTree = computed(() => props.tree);
|
||||||
@ -54,7 +54,15 @@ provide("openKeys", openKeys);
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<ul class="layui-nav" :class="[level? 'level':'',inverted ? 'inverted':'',tree ? 'layui-nav-tree' : '', theme === 'dark' ? 'layui-nav-dark':'layui-nav-light' ]">
|
<ul
|
||||||
|
class="layui-nav"
|
||||||
|
:class="[
|
||||||
|
level ? 'level' : '',
|
||||||
|
inverted ? 'inverted' : '',
|
||||||
|
tree ? 'layui-nav-tree' : '',
|
||||||
|
theme === 'dark' ? 'layui-nav-dark' : 'layui-nav-light',
|
||||||
|
]"
|
||||||
|
>
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</ul>
|
</ul>
|
||||||
</template>
|
</template>
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayMenuItem"
|
name: "LayMenuItem",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
@ -6,7 +6,7 @@ export default {
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { Ref, ref, watch, useSlots, computed } from "vue";
|
import { Ref, ref, watch, useSlots, computed } from "vue";
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from "vue-i18n";
|
||||||
|
|
||||||
export interface LayPageProps {
|
export interface LayPageProps {
|
||||||
total: number;
|
total: number;
|
||||||
@ -116,7 +116,7 @@ watch(currentPage, function () {
|
|||||||
@click="prev()"
|
@click="prev()"
|
||||||
>
|
>
|
||||||
<slot v-if="slots.prev" name="prev"></slot>
|
<slot v-if="slots.prev" name="prev"></slot>
|
||||||
<template v-else>{{ t('page.prev') }}</template>
|
<template v-else>{{ t("page.prev") }}</template>
|
||||||
</a>
|
</a>
|
||||||
<template v-if="showPage">
|
<template v-if="showPage">
|
||||||
<template v-for="index of totalPage" :key="index">
|
<template v-for="index of totalPage" :key="index">
|
||||||
@ -138,7 +138,7 @@ watch(currentPage, function () {
|
|||||||
@click="next()"
|
@click="next()"
|
||||||
>
|
>
|
||||||
<slot v-if="slots.next" name="next"></slot>
|
<slot v-if="slots.next" name="next"></slot>
|
||||||
<template v-else>{{ t('page.next') }}</template>
|
<template v-else>{{ t("page.next") }}</template>
|
||||||
</a>
|
</a>
|
||||||
<span v-if="showLimit" class="layui-laypage-limits">
|
<span v-if="showLimit" class="layui-laypage-limits">
|
||||||
<select v-model="inlimit">
|
<select v-model="inlimit">
|
||||||
|
@ -1 +0,0 @@
|
|||||||
|
|
@ -1,6 +1,5 @@
|
|||||||
@import "../../theme/variable.less";
|
@import "../../theme/variable.less";
|
||||||
|
|
||||||
|
|
||||||
@panel-border-color: var(--panel-border-color);
|
@panel-border-color: var(--panel-border-color);
|
||||||
@panel-border-radius: var(--panel-border-radius);
|
@panel-border-radius: var(--panel-border-radius);
|
||||||
@panel-fore-color: var(--panel-fore-color);
|
@panel-fore-color: var(--panel-fore-color);
|
||||||
|
@ -27,27 +27,24 @@ import { CSSProperties, ref, watch, onMounted } from "vue";
|
|||||||
import { on } from "../../utils/domUtil";
|
import { on } from "../../utils/domUtil";
|
||||||
|
|
||||||
export interface LayPopperProps {
|
export interface LayPopperProps {
|
||||||
el: any;
|
el: any;
|
||||||
content?: string | Number;
|
content?: string | Number;
|
||||||
position?: string;
|
position?: string;
|
||||||
trigger?: string;
|
trigger?: string;
|
||||||
enterable?: boolean;
|
enterable?: boolean;
|
||||||
isDark?: boolean;
|
isDark?: boolean;
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
isCanHide?: boolean;
|
isCanHide?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LayPopperProps>(),
|
const props = withDefaults(defineProps<LayPopperProps>(), {
|
||||||
{
|
position: "top",
|
||||||
position: 'top',
|
isDark: true,
|
||||||
isDark: true,
|
disabled: false,
|
||||||
disabled: false,
|
enterable: true,
|
||||||
enterable: true,
|
isCanHide: true,
|
||||||
isCanHide: true,
|
trigger: "hover",
|
||||||
trigger: "hover",
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
const EVENT_MAP: any = {
|
const EVENT_MAP: any = {
|
||||||
hover: ["mouseenter", null, "mouseleave", false],
|
hover: ["mouseenter", null, "mouseleave", false],
|
||||||
@ -66,18 +63,21 @@ const innnerPosition = ref(props.position);
|
|||||||
const innerVisible = ref(!props.isCanHide);
|
const innerVisible = ref(!props.isCanHide);
|
||||||
const isExist = ref(!props.isCanHide);
|
const isExist = ref(!props.isCanHide);
|
||||||
|
|
||||||
watch(() => props.isCanHide, (val) => {
|
watch(
|
||||||
innerVisible.value = !val;
|
() => props.isCanHide,
|
||||||
});
|
(val) => {
|
||||||
|
innerVisible.value = !val;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
watch(innerVisible, (val) => {
|
watch(innerVisible, (val) => {
|
||||||
invokeShowPosistion();
|
invokeShowPosistion();
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(popper, (val) => {
|
watch(popper, (val) => {
|
||||||
if (props.trigger === 'hover' && props.enterable) {
|
if (props.trigger === "hover" && props.enterable) {
|
||||||
on(popper.value, EVENT_MAP['hover'][0], doShow);
|
on(popper.value, EVENT_MAP["hover"][0], doShow);
|
||||||
on(popper.value, EVENT_MAP['hover'][2], doHidden);
|
on(popper.value, EVENT_MAP["hover"][2], doHidden);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -91,10 +91,10 @@ watch(
|
|||||||
const doShow = function () {
|
const doShow = function () {
|
||||||
if (!props.disabled) {
|
if (!props.disabled) {
|
||||||
if (!isExist.value) {
|
if (!isExist.value) {
|
||||||
isExist.value = true;
|
isExist.value = true;
|
||||||
setTimeout(()=>innerVisible.value = true, 0);
|
setTimeout(() => (innerVisible.value = true), 0);
|
||||||
} else {
|
} else {
|
||||||
innerVisible.value = true;
|
innerVisible.value = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -110,7 +110,7 @@ const doHidden = function (e: MouseEvent) {
|
|||||||
}
|
}
|
||||||
innerVisible.value = false;
|
innerVisible.value = false;
|
||||||
innnerPosition.value = props.position;
|
innnerPosition.value = props.position;
|
||||||
style.value = { top: -window.innerHeight + "px", left: 0 }
|
style.value = { top: -window.innerHeight + "px", left: 0 };
|
||||||
};
|
};
|
||||||
|
|
||||||
// 计算位置显示
|
// 计算位置显示
|
||||||
|
@ -12,11 +12,13 @@ export interface LayQuoteProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const props = defineProps<LayQuoteProps>();
|
const props = defineProps<LayQuoteProps>();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<blockquote class="layui-quote" :class="[type ? `layui-quote-${props.type}` : '']">
|
<blockquote
|
||||||
|
class="layui-quote"
|
||||||
|
:class="[type ? `layui-quote-${props.type}` : '']"
|
||||||
|
>
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</template>
|
</template>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayRadio"
|
name: "LayRadio",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
@ -1,38 +1,34 @@
|
|||||||
.result {
|
.result {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
||||||
}
|
}
|
||||||
.result .success svg {
|
.result .success svg {
|
||||||
color: #32C682;
|
color: #32c682;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 40px;
|
margin-top: 40px;
|
||||||
|
|
||||||
}
|
}
|
||||||
.result .failure svg {
|
.result .failure svg {
|
||||||
color: #f56c6c;
|
color: #f56c6c;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 40px;
|
margin-top: 40px;
|
||||||
|
|
||||||
}
|
}
|
||||||
.result .title {
|
.result .title {
|
||||||
margin-top: 25px;
|
margin-top: 25px;
|
||||||
|
|
||||||
}
|
}
|
||||||
.result .desc {
|
.result .desc {
|
||||||
margin-top: 25px;
|
margin-top: 25px;
|
||||||
width: 60%;
|
width: 60%;
|
||||||
margin-left: 20%;
|
margin-left: 20%;
|
||||||
color: rgba(0, 0, 0, .45);
|
color: rgba(0, 0, 0, 0.45);
|
||||||
}
|
}
|
||||||
.result .content {
|
.result .content {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
width: 80%;
|
width: 80%;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
background-color: whitesmoke;
|
background-color: whitesmoke;
|
||||||
margin-left: 10%;
|
margin-left: 10%;
|
||||||
}
|
}
|
||||||
.result .action {
|
.result .action {
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
border-top: 1px whitesmoke solid;
|
border-top: 1px whitesmoke solid;
|
||||||
margin-top: 25px;
|
margin-top: 25px;
|
||||||
}
|
}
|
||||||
|
@ -122,7 +122,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (min-width: 768px) {
|
@media screen and (min-width: 768px) {
|
||||||
|
|
||||||
.layui-hide-sm {
|
.layui-hide-sm {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
@ -143,7 +142,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (min-width: 992px) {
|
@media screen and (min-width: 992px) {
|
||||||
|
|
||||||
.layui-hide-md {
|
.layui-hide-md {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
@ -164,7 +162,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (min-width: 1200px) {
|
@media screen and (min-width: 1200px) {
|
||||||
|
|
||||||
.layui-hide-lg {
|
.layui-hide-lg {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayScroll"
|
name: "LayScroll",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts"></script>
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="layui-side-scroll">
|
<div class="layui-side-scroll">
|
||||||
|
@ -40,7 +40,6 @@ dl.layui-anim-upbit > dd .layui-form-checkbox,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.layui-select {
|
.layui-select {
|
||||||
height: 38px;
|
height: 38px;
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
|
@ -1,150 +1,147 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LaySelect"
|
name: "LaySelect",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup 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 {
|
||||||
provide,
|
provide,
|
||||||
isProxy,
|
isProxy,
|
||||||
ref,
|
ref,
|
||||||
watch,
|
watch,
|
||||||
computed,
|
computed,
|
||||||
reactive,
|
reactive,
|
||||||
toRefs,
|
toRefs,
|
||||||
Ref,
|
Ref,
|
||||||
} from "vue";
|
} from "vue";
|
||||||
import { useClickOutside } from "@layui/hooks-vue";
|
import { useClickOutside } from "@layui/hooks-vue";
|
||||||
import { SelectItem } from "../../types";
|
import { SelectItem } from "../../types";
|
||||||
|
|
||||||
export interface LaySelectProps {
|
export interface LaySelectProps {
|
||||||
modelValue?: string | number | [] | null;
|
modelValue?: string | number | [] | null;
|
||||||
name?: string;
|
name?: string;
|
||||||
placeholder?: string;
|
placeholder?: string;
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
showEmpty?: boolean;
|
showEmpty?: boolean;
|
||||||
emptyMessage?: string;
|
emptyMessage?: string;
|
||||||
multiple?: boolean;
|
multiple?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const selectRef = ref<null | HTMLElement>(null);
|
const selectRef = ref<null | HTMLElement>(null);
|
||||||
const isClickOutside = useClickOutside(selectRef);
|
const isClickOutside = useClickOutside(selectRef);
|
||||||
|
|
||||||
watch(isClickOutside, () => {
|
watch(isClickOutside, () => {
|
||||||
if (isClickOutside.value) {
|
if (isClickOutside.value) {
|
||||||
openState.value = false;
|
openState.value = false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const props = withDefaults(
|
const props = withDefaults(defineProps<LaySelectProps>(), {
|
||||||
defineProps<LaySelectProps>(),
|
modelValue: null,
|
||||||
{
|
placeholder: "请选择",
|
||||||
modelValue: null,
|
disabled: false,
|
||||||
placeholder: "请选择",
|
showEmpty: true,
|
||||||
disabled: false,
|
multiple: false,
|
||||||
showEmpty: true,
|
});
|
||||||
multiple: false,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
const openState = ref(false);
|
const openState = ref(false);
|
||||||
|
|
||||||
const open = function () {
|
const open = function () {
|
||||||
// 禁用
|
// 禁用
|
||||||
if (props.disabled) {
|
if (props.disabled) {
|
||||||
openState.value = false;
|
openState.value = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
openState.value = !openState.value;
|
openState.value = !openState.value;
|
||||||
};
|
};
|
||||||
|
|
||||||
const emit = defineEmits(["update:modelValue", "change"]);
|
const emit = defineEmits(["update:modelValue", "change"]);
|
||||||
const selectItem = ref<SelectItem>({
|
const selectItem = ref<SelectItem>({
|
||||||
value: !props.multiple
|
value: !props.multiple
|
||||||
? props.modelValue
|
? props.modelValue
|
||||||
: props.modelValue
|
: props.modelValue
|
||||||
? ([] as any[]).concat(props.modelValue)
|
? ([] as any[]).concat(props.modelValue)
|
||||||
: [],
|
: [],
|
||||||
label: props.multiple ? [] : null,
|
label: props.multiple ? [] : null,
|
||||||
multiple: props.multiple,
|
multiple: props.multiple,
|
||||||
} as SelectItem);
|
} as SelectItem);
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => selectItem.value.value,
|
() => selectItem.value.value,
|
||||||
(val) => {
|
(val) => {
|
||||||
emit("update:modelValue", val);
|
emit("update:modelValue", val);
|
||||||
emit("change", val);
|
emit("change", val);
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
deep: true,
|
deep: true,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
watch(props, () => {
|
watch(props, () => {
|
||||||
let value = props.modelValue;
|
let value = props.modelValue;
|
||||||
if (props.multiple) {
|
if (props.multiple) {
|
||||||
if (Array.isArray(value)) {
|
if (Array.isArray(value)) {
|
||||||
selectItem.value.value = value;
|
selectItem.value.value = value;
|
||||||
selectItem.value.label = value.map((o) => ItemsMap.value[o]);
|
selectItem.value.label = value.map((o) => ItemsMap.value[o]);
|
||||||
} else {
|
} else {
|
||||||
console.error("多选时请传入数组值");
|
console.error("多选时请传入数组值");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
selectItem.value.value = value;
|
selectItem.value.value = value;
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
selectItem.value.label = ItemsMap.value[value] || "";
|
selectItem.value.label = ItemsMap.value[value] || "";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 禁止操作子项
|
// 禁止操作子项
|
||||||
const disabledItemMap: { [key: string | number]: boolean } = {};
|
const disabledItemMap: { [key: string | number]: boolean } = {};
|
||||||
const selectItemHandle = function (
|
const selectItemHandle = function (
|
||||||
_selectItem: SelectItem,
|
_selectItem: SelectItem,
|
||||||
isChecked?: boolean
|
isChecked?: boolean
|
||||||
) {
|
) {
|
||||||
if (!props.multiple) {
|
if (!props.multiple) {
|
||||||
openState.value = false;
|
openState.value = false;
|
||||||
}
|
}
|
||||||
disabledItemMap[_selectItem.value as string | number] =
|
disabledItemMap[_selectItem.value as string | number] =
|
||||||
_selectItem.disabled as boolean;
|
_selectItem.disabled as boolean;
|
||||||
if (typeof isChecked !== "boolean") {
|
if (typeof isChecked !== "boolean") {
|
||||||
props.multiple
|
props.multiple
|
||||||
? (selectItem.value.label as any[]).push(_selectItem.label)
|
? (selectItem.value.label as any[]).push(_selectItem.label)
|
||||||
: (selectItem.value.label = _selectItem.label);
|
: (selectItem.value.label = _selectItem.label);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let values = selectItem.value.value;
|
let values = selectItem.value.value;
|
||||||
if (props.multiple && Array.isArray(values)) {
|
if (props.multiple && Array.isArray(values)) {
|
||||||
const _values = values as any[];
|
const _values = values as any[];
|
||||||
const _labels = selectItem.value.label as any[];
|
const _labels = selectItem.value.label as any[];
|
||||||
if (isChecked) {
|
if (isChecked) {
|
||||||
_values.push(_selectItem.value);
|
_values.push(_selectItem.value);
|
||||||
_labels.push(_selectItem.label);
|
_labels.push(_selectItem.label);
|
||||||
} else {
|
} else {
|
||||||
_values.splice(_values.indexOf(_selectItem.value), 1);
|
_values.splice(_values.indexOf(_selectItem.value), 1);
|
||||||
_labels.splice(_labels.indexOf(_selectItem.label), 1);
|
_labels.splice(_labels.indexOf(_selectItem.label), 1);
|
||||||
}
|
}
|
||||||
selectItem.value.value = _values;
|
selectItem.value.value = _values;
|
||||||
selectItem.value.label = _labels;
|
selectItem.value.label = _labels;
|
||||||
} else {
|
} else {
|
||||||
selectItem.value.value = _selectItem.value;
|
selectItem.value.value = _selectItem.value;
|
||||||
selectItem.value.label = _selectItem.label;
|
selectItem.value.label = _selectItem.label;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const removeItemHandle = function (e: MouseEvent, _selectItem: SelectItem) {
|
const removeItemHandle = function (e: MouseEvent, _selectItem: SelectItem) {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
selectItemHandle(_selectItem, false);
|
selectItemHandle(_selectItem, false);
|
||||||
};
|
};
|
||||||
const ItemsMap: Ref<{ [index: string]: string }> = ref({});
|
const ItemsMap: Ref<{ [index: string]: string }> = ref({});
|
||||||
const selectItemPush = function (p: SelectItem) {
|
const selectItemPush = function (p: SelectItem) {
|
||||||
if (p.value !== null) {
|
if (p.value !== null) {
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
ItemsMap.value[p.value] = p.label;
|
ItemsMap.value[p.value] = p.label;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
provide("selectItemHandle", selectItemHandle);
|
provide("selectItemHandle", selectItemHandle);
|
||||||
provide("selectItem", selectItem);
|
provide("selectItem", selectItem);
|
||||||
@ -152,76 +149,76 @@ provide("selectItemPush", selectItemPush);
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
ref="selectRef"
|
ref="selectRef"
|
||||||
class="layui-unselect layui-form-select"
|
class="layui-unselect layui-form-select"
|
||||||
:class="{ 'layui-form-selected': openState }"
|
:class="{ 'layui-form-selected': openState }"
|
||||||
>
|
>
|
||||||
<div class="layui-select-title" @click="open">
|
<div class="layui-select-title" @click="open">
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
:placeholder="
|
:placeholder="
|
||||||
selectItem.value !== null &&
|
selectItem.value !== null &&
|
||||||
Array.isArray(selectItem.value) &&
|
Array.isArray(selectItem.value) &&
|
||||||
selectItem.value.length > 0
|
selectItem.value.length > 0
|
||||||
? ''
|
? ''
|
||||||
: emptyMessage ?? placeholder
|
: emptyMessage ?? placeholder
|
||||||
"
|
"
|
||||||
:disabled="disabled"
|
:disabled="disabled"
|
||||||
readonly
|
readonly
|
||||||
:value="
|
:value="
|
||||||
!selectItem.multiple && selectItem.value !== null
|
!selectItem.multiple && selectItem.value !== null
|
||||||
? selectItem.label
|
? selectItem.label
|
||||||
: null
|
: null
|
||||||
"
|
"
|
||||||
:name="name"
|
:name="name"
|
||||||
:class="[
|
:class="[
|
||||||
'layui-input',
|
'layui-input',
|
||||||
'layui-unselect',
|
'layui-unselect',
|
||||||
{ 'layui-disabled': disabled },
|
{ 'layui-disabled': disabled },
|
||||||
]"
|
]"
|
||||||
/>
|
/>
|
||||||
<i :class="['layui-edge', { 'layui-disabled': disabled }]"></i>
|
<i :class="['layui-edge', { 'layui-disabled': disabled }]"></i>
|
||||||
<!-- 多选 -->
|
<!-- 多选 -->
|
||||||
<div
|
<div
|
||||||
v-if="selectItem.multiple && Array.isArray(selectItem.label)"
|
v-if="selectItem.multiple && Array.isArray(selectItem.label)"
|
||||||
class="layui-multiple-select-row"
|
class="layui-multiple-select-row"
|
||||||
>
|
>
|
||||||
<div class="layui-multiple-select-badge">
|
<div class="layui-multiple-select-badge">
|
||||||
<template v-for="(item, index) in selectItem.label" :key="index">
|
<template v-for="(item, index) in selectItem.label" :key="index">
|
||||||
<lay-badge theme="green">
|
<lay-badge theme="green">
|
||||||
<span>{{ item }}</span>
|
<span>{{ item }}</span>
|
||||||
<i
|
<i
|
||||||
:class="['layui-icon', { 'layui-icon-close': true }]"
|
:class="['layui-icon', { 'layui-icon-close': true }]"
|
||||||
v-if="
|
v-if="
|
||||||
!disabled &&
|
!disabled &&
|
||||||
!(
|
!(
|
||||||
Array.isArray(selectItem.value) &&
|
Array.isArray(selectItem.value) &&
|
||||||
selectItem.value.length > 0 &&
|
selectItem.value.length > 0 &&
|
||||||
disabledItemMap[selectItem.value[index]]
|
disabledItemMap[selectItem.value[index]]
|
||||||
)
|
)
|
||||||
"
|
"
|
||||||
@click="
|
@click="
|
||||||
removeItemHandle($event, {
|
removeItemHandle($event, {
|
||||||
label: item,
|
label: item,
|
||||||
value: Array.isArray(selectItem.value)
|
value: Array.isArray(selectItem.value)
|
||||||
? selectItem.value[index]
|
? selectItem.value[index]
|
||||||
: null,
|
: null,
|
||||||
})
|
})
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
</i>
|
</i>
|
||||||
</lay-badge>
|
</lay-badge>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<dl class="layui-anim layui-anim-upbit">
|
<dl class="layui-anim layui-anim-upbit">
|
||||||
<!-- 多选不支持空提示 -->
|
<!-- 多选不支持空提示 -->
|
||||||
<template v-if="!multiple && showEmpty">
|
<template v-if="!multiple && showEmpty">
|
||||||
<lay-select-option :value="null" :label="emptyMessage ?? placeholder" />
|
<lay-select-option :value="null" :label="emptyMessage ?? placeholder" />
|
||||||
</template>
|
</template>
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LaySelectOption",
|
name: "LaySelectOption",
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -10,74 +10,72 @@ import { SelectItem, SelectItemHandle, SelectItemPush } from "../../types";
|
|||||||
import { computed, inject, onMounted, Ref } from "vue";
|
import { computed, inject, onMounted, Ref } from "vue";
|
||||||
|
|
||||||
export interface LaySelectOptionProps {
|
export interface LaySelectOptionProps {
|
||||||
value: string | null | undefined;
|
value: string | null | undefined;
|
||||||
label?: string;
|
label?: string;
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LaySelectOptionProps>(),
|
const props = withDefaults(defineProps<LaySelectOptionProps>(), {
|
||||||
{
|
disabled: false,
|
||||||
disabled: false,
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
const selectItemHandle = inject("selectItemHandle") as SelectItemHandle;
|
const selectItemHandle = inject("selectItemHandle") as SelectItemHandle;
|
||||||
const selectItem = inject("selectItem") as Ref<SelectItem>;
|
const selectItem = inject("selectItem") as Ref<SelectItem>;
|
||||||
const selectItemPush = inject("selectItemPush") as Ref<SelectItemPush>;
|
const selectItemPush = inject("selectItemPush") as Ref<SelectItemPush>;
|
||||||
|
|
||||||
const selectHandle = function () {
|
const selectHandle = function () {
|
||||||
!props.disabled && callSelectItemHandle(!selected.value);
|
!props.disabled && callSelectItemHandle(!selected.value);
|
||||||
};
|
};
|
||||||
const callSelectItemHandle = function (isChecked?: boolean) {
|
const callSelectItemHandle = function (isChecked?: boolean) {
|
||||||
// console.log("callSelectItemHandle");
|
// console.log("callSelectItemHandle");
|
||||||
selectItemHandle(
|
selectItemHandle(
|
||||||
{
|
{
|
||||||
value: props.value,
|
value: props.value,
|
||||||
label: props.label,
|
label: props.label,
|
||||||
disabled: props.disabled,
|
disabled: props.disabled,
|
||||||
},
|
},
|
||||||
isChecked
|
isChecked
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
const selected = computed({
|
const selected = computed({
|
||||||
get() {
|
get() {
|
||||||
const selectValues = selectItem.value.value;
|
const selectValues = selectItem.value.value;
|
||||||
if (Array.isArray(selectValues)) {
|
if (Array.isArray(selectValues)) {
|
||||||
return (selectValues as any[]).indexOf(props.value) > -1;
|
return (selectValues as any[]).indexOf(props.value) > -1;
|
||||||
}
|
}
|
||||||
return selectItem.value.value === props.value;
|
return selectItem.value.value === props.value;
|
||||||
},
|
},
|
||||||
set(val) {},
|
set(val) {},
|
||||||
});
|
});
|
||||||
const callSelectItemPush = function () {
|
const callSelectItemPush = function () {
|
||||||
let item = {
|
let item = {
|
||||||
value: props.value,
|
value: props.value,
|
||||||
label: props.label,
|
label: props.label,
|
||||||
disabled: props.disabled,
|
disabled: props.disabled,
|
||||||
};
|
};
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
selectItemPush(item);
|
selectItemPush(item);
|
||||||
};
|
};
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
callSelectItemPush();
|
callSelectItemPush();
|
||||||
selected.value && callSelectItemHandle();
|
selected.value && callSelectItemHandle();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<dd
|
<dd
|
||||||
:value="value"
|
:value="value"
|
||||||
:class="[{ 'layui-this': selected }, { 'layui-disabled': disabled }]"
|
:class="[{ 'layui-this': selected }, { 'layui-disabled': disabled }]"
|
||||||
@click="selectHandle"
|
@click="selectHandle"
|
||||||
>
|
>
|
||||||
<template v-if="selectItem.multiple">
|
<template v-if="selectItem.multiple">
|
||||||
<lay-checkbox
|
<lay-checkbox
|
||||||
skin="primary"
|
skin="primary"
|
||||||
v-model="selected"
|
v-model="selected"
|
||||||
@change="selectHandle"
|
@change="selectHandle"
|
||||||
label=""
|
label=""
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
<slot>{{ label }}</slot>
|
<slot>{{ label }}</slot>
|
||||||
</dd>
|
</dd>
|
||||||
</template>
|
</template>
|
@ -9,7 +9,7 @@ import { computed, CSSProperties } from "vue";
|
|||||||
import "./index.less";
|
import "./index.less";
|
||||||
|
|
||||||
export interface LaySideProps {
|
export interface LaySideProps {
|
||||||
width?: string | number;
|
width?: string | number;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LaySideProps>(), {
|
const props = withDefaults(defineProps<LaySideProps>(), {
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
.lay-skeleton {
|
.lay-skeleton {
|
||||||
|
|
||||||
.lay-skeleton-item {
|
.lay-skeleton-item {
|
||||||
height: 16px;
|
height: 16px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import type { App } from 'vue'
|
import type { App } from "vue";
|
||||||
import Component from './index.vue'
|
import Component from "./index.vue";
|
||||||
|
|
||||||
Component.install = (app: App) => {
|
Component.install = (app: App) => {
|
||||||
app.component(Component.name, Component)
|
app.component(Component.name, Component);
|
||||||
}
|
};
|
||||||
|
|
||||||
export default Component;
|
export default Component;
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LaySkeleton"
|
name: "LaySkeleton",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup 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 { withDefaults} from "vue";
|
import { withDefaults } from "vue";
|
||||||
|
|
||||||
export interface LaySkeletonProps {
|
export interface LaySkeletonProps {
|
||||||
rows?: number;
|
rows?: number;
|
||||||
@ -23,16 +23,20 @@ const props = withDefaults(defineProps<LaySkeletonProps>(), {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div :class="['lay-skeleton', animated ? 'lay-skeleton-animated': '',]" v-bind="$attrs">
|
<div
|
||||||
|
:class="['lay-skeleton', animated ? 'lay-skeleton-animated' : '']"
|
||||||
|
v-bind="$attrs"
|
||||||
|
>
|
||||||
<template v-if="loading">
|
<template v-if="loading">
|
||||||
<slot name="skeleton">
|
<slot name="skeleton">
|
||||||
<lay-skeleton-item
|
<lay-skeleton-item
|
||||||
v-for="item in rows"
|
v-for="item in rows"
|
||||||
:key="item"
|
:key="item"
|
||||||
:class="[
|
:class="[
|
||||||
item===1? 'lay-skeleton-first': '',
|
item === 1 ? 'lay-skeleton-first' : '',
|
||||||
item === rows? 'lay-skeleton-last': '']"
|
item === rows ? 'lay-skeleton-last' : '',
|
||||||
type="p"
|
]"
|
||||||
|
type="p"
|
||||||
></lay-skeleton-item>
|
></lay-skeleton-item>
|
||||||
</slot>
|
</slot>
|
||||||
</template>
|
</template>
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import type { App } from 'vue'
|
import type { App } from "vue";
|
||||||
import Component from './index.vue'
|
import Component from "./index.vue";
|
||||||
|
|
||||||
Component.install = (app: App) => {
|
Component.install = (app: App) => {
|
||||||
app.component(Component.name, Component)
|
app.component(Component.name, Component);
|
||||||
}
|
};
|
||||||
|
|
||||||
export default Component;
|
export default Component;
|
||||||
|
@ -1,24 +1,27 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LaySkeletonItem"
|
name: "LaySkeletonItem",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { withDefaults} from "vue";
|
import { withDefaults } from "vue";
|
||||||
|
|
||||||
export interface LaySkeletonProps {
|
export interface LaySkeletonProps {
|
||||||
type?: string;
|
type?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LaySkeletonProps>(), {
|
const props = withDefaults(defineProps<LaySkeletonProps>(), {
|
||||||
type: 'p',
|
type: "p",
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div :class="['lay-skeleton-item',`lay-skeleton-type--${type}`]" v-bind="$attrs">
|
<div
|
||||||
<div v-if="type==='image'" >
|
:class="['lay-skeleton-item', `lay-skeleton-type--${type}`]"
|
||||||
|
v-bind="$attrs"
|
||||||
|
>
|
||||||
|
<div v-if="type === 'image'">
|
||||||
<lay-icon type="layui-icon-picture"></lay-icon>
|
<lay-icon type="layui-icon-picture"></lay-icon>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -6,18 +6,24 @@
|
|||||||
class="layui-slider-vrange"
|
class="layui-slider-vrange"
|
||||||
v-if="range"
|
v-if="range"
|
||||||
>
|
>
|
||||||
<lay-tooltip :content="'' + verticalRangeValue[1]" :is-can-hide="tooptipHide">
|
<lay-tooltip
|
||||||
<div
|
:content="'' + verticalRangeValue[1]"
|
||||||
:style="{ bottom: verticalRangeValue[1] + '%' }"
|
:is-can-hide="tooptipHide"
|
||||||
class="layui-slider-vertical-btn"
|
>
|
||||||
></div>
|
<div
|
||||||
</lay-tooltip>
|
:style="{ bottom: verticalRangeValue[1] + '%' }"
|
||||||
<lay-tooltip :content="'' + verticalRangeValue[0]" :is-can-hide="tooptipHide">
|
class="layui-slider-vertical-btn"
|
||||||
<div
|
></div>
|
||||||
:style="{ bottom: verticalRangeValue[0] + '%' }"
|
</lay-tooltip>
|
||||||
class="layui-slider-vertical-btn"
|
<lay-tooltip
|
||||||
></div>
|
:content="'' + verticalRangeValue[0]"
|
||||||
</lay-tooltip>
|
:is-can-hide="tooptipHide"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
:style="{ bottom: verticalRangeValue[0] + '%' }"
|
||||||
|
class="layui-slider-vertical-btn"
|
||||||
|
></div>
|
||||||
|
</lay-tooltip>
|
||||||
|
|
||||||
<div class="layui-slider-vertical-line"></div>
|
<div class="layui-slider-vertical-line"></div>
|
||||||
<div
|
<div
|
||||||
@ -36,7 +42,7 @@
|
|||||||
:class="[props.disabled ? 'layui-slider-disabled' : '']"
|
:class="[props.disabled ? 'layui-slider-disabled' : '']"
|
||||||
v-else
|
v-else
|
||||||
>
|
>
|
||||||
<lay-tooltip :content="modelValue + ''" :is-can-hide="tooptipHide">
|
<lay-tooltip :content="modelValue + ''" :is-can-hide="tooptipHide">
|
||||||
<div
|
<div
|
||||||
:style="{ bottom: modelValue + '%' }"
|
:style="{ bottom: modelValue + '%' }"
|
||||||
class="layui-slider-vertical-btn"
|
class="layui-slider-vertical-btn"
|
||||||
@ -59,13 +65,13 @@
|
|||||||
class="layui-slider-srange"
|
class="layui-slider-srange"
|
||||||
v-if="range"
|
v-if="range"
|
||||||
>
|
>
|
||||||
<lay-tooltip :content="rangeValue[0] + ''" :is-can-hide="tooptipHide">
|
<lay-tooltip :content="rangeValue[0] + ''" :is-can-hide="tooptipHide">
|
||||||
<div
|
<div
|
||||||
:style="{ left: rangeValue[0] + '%' }"
|
:style="{ left: rangeValue[0] + '%' }"
|
||||||
class="layui-slider-btn-v"
|
class="layui-slider-btn-v"
|
||||||
></div>
|
></div>
|
||||||
</lay-tooltip>
|
</lay-tooltip>
|
||||||
<lay-tooltip :content="rangeValue[1] + ''" :is-can-hide="tooptipHide">
|
<lay-tooltip :content="rangeValue[1] + ''" :is-can-hide="tooptipHide">
|
||||||
<div
|
<div
|
||||||
:style="{ left: rangeValue[1] + '%' }"
|
:style="{ left: rangeValue[1] + '%' }"
|
||||||
class="layui-slider-btn-v"
|
class="layui-slider-btn-v"
|
||||||
@ -112,15 +118,15 @@ import { on, off } from "evtd";
|
|||||||
import "./index.less";
|
import "./index.less";
|
||||||
|
|
||||||
export interface LaySliderProps {
|
export interface LaySliderProps {
|
||||||
vertical?: boolean;
|
vertical?: boolean;
|
||||||
modelValue?: number | Array<number>;
|
modelValue?: number | Array<number>;
|
||||||
min?: number;
|
min?: number;
|
||||||
max?: number;
|
max?: number;
|
||||||
step?: number;
|
step?: number;
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
range?: boolean;
|
range?: boolean;
|
||||||
verticalrange?: number[];
|
verticalrange?: number[];
|
||||||
standardrange?: number[];
|
standardrange?: number[];
|
||||||
}
|
}
|
||||||
|
|
||||||
const emit = defineEmits(["update:modelValue"]);
|
const emit = defineEmits(["update:modelValue"]);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.lay-split-panel{
|
.lay-split-panel {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
position: relative;
|
position: relative;
|
||||||
@ -7,12 +7,12 @@
|
|||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
border: 1px #eeeeee solid;
|
border: 1px #eeeeee solid;
|
||||||
}
|
}
|
||||||
.lay-split-panel-item-move{
|
.lay-split-panel-item-move {
|
||||||
user-select: none;
|
user-select: none;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
cursor: col-resize;
|
cursor: col-resize;
|
||||||
}
|
}
|
||||||
.lay-split-panel-line{
|
.lay-split-panel-line {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 3px;
|
width: 3px;
|
||||||
border: 1px #eeeeee solid;
|
border: 1px #eeeeee solid;
|
||||||
@ -22,7 +22,7 @@
|
|||||||
cursor: col-resize;
|
cursor: col-resize;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
&:before{
|
&:before {
|
||||||
content: "";
|
content: "";
|
||||||
height: 6px;
|
height: 6px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -33,15 +33,15 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.lay-split-panel-vertical{
|
.lay-split-panel-vertical {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
position: relative;
|
position: relative;
|
||||||
.lay-split-panel-item-move{
|
.lay-split-panel-item-move {
|
||||||
user-select: none;
|
user-select: none;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
cursor: row-resize;
|
cursor: row-resize;
|
||||||
}
|
}
|
||||||
.lay-split-panel-line{
|
.lay-split-panel-line {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -51,7 +51,7 @@
|
|||||||
background-color: #fafafa;
|
background-color: #fafafa;
|
||||||
border-top: none;
|
border-top: none;
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
&:before{
|
&:before {
|
||||||
content: "";
|
content: "";
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 6px;
|
width: 6px;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "laySplitPanel"
|
name: "laySplitPanel",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@ -9,8 +9,8 @@ import { ref, watch, provide, withDefaults, onMounted } from "vue";
|
|||||||
import "./index.less";
|
import "./index.less";
|
||||||
|
|
||||||
export interface LayStepProps {
|
export interface LayStepProps {
|
||||||
vertical?: boolean;
|
vertical?: boolean;
|
||||||
minSize?: number;
|
minSize?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LayStepProps>(), {
|
const props = withDefaults(defineProps<LayStepProps>(), {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LaySplitPanelItem"
|
name: "LaySplitPanelItem",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@ -20,7 +20,7 @@ import {
|
|||||||
import type { ComputedRef } from "vue";
|
import type { ComputedRef } from "vue";
|
||||||
|
|
||||||
export interface LayStepItemProps {
|
export interface LayStepItemProps {
|
||||||
space?: number;
|
space?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LayStepItemProps>(), {
|
const props = withDefaults(defineProps<LayStepItemProps>(), {
|
||||||
|
@ -1,111 +1,111 @@
|
|||||||
@width-height-pace: 24px;
|
@width-height-pace: 24px;
|
||||||
@step-color: @step-success-color;
|
@step-color: @step-success-color;
|
||||||
@step-fail-color: #FF5722;
|
@step-fail-color: #ff5722;
|
||||||
@step-primary-color: #1E9FFF;
|
@step-primary-color: #1e9fff;
|
||||||
@step-warning-color: #FFB800;
|
@step-warning-color: #ffb800;
|
||||||
@step-success-color: #5FB878;
|
@step-success-color: #5fb878;
|
||||||
|
|
||||||
.lay-step{
|
.lay-step {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: nowrap;
|
flex-wrap: nowrap;
|
||||||
.lay-step-item{
|
.lay-step-item {
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.is-item-center{
|
.is-item-center {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lay-step-item-last {
|
.lay-step-item-last {
|
||||||
flex-grow: 0 !important;
|
flex-grow: 0 !important;
|
||||||
}
|
}
|
||||||
.lay-step-item-pace{
|
.lay-step-item-pace {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
width: @width-height-pace;
|
width: @width-height-pace;
|
||||||
height: @width-height-pace;
|
height: @width-height-pace;
|
||||||
border: 1px #8D8D8D solid;
|
border: 1px #8d8d8d solid;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: @width-height-pace;
|
line-height: @width-height-pace;
|
||||||
background: #FFFFFF;
|
background: #ffffff;
|
||||||
}
|
}
|
||||||
.is-center{
|
.is-center {
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
.lay-step-item-active{
|
.lay-step-item-active {
|
||||||
border: 1px @step-color solid;
|
border: 1px @step-color solid;
|
||||||
color: @step-color;
|
color: @step-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lay-step-item-wait{
|
.lay-step-item-wait {
|
||||||
border: 1px #000000 solid;
|
border: 1px #000000 solid;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lay-step-item--success {
|
.lay-step-item--success {
|
||||||
border: 1px @step-color solid;
|
border: 1px @step-color solid;
|
||||||
color: #FFFFFF;
|
color: #ffffff;
|
||||||
background: @step-color;
|
background: @step-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lay-step-item--fail{
|
.lay-step-item--fail {
|
||||||
border: 1px @step-fail-color solid;
|
border: 1px @step-fail-color solid;
|
||||||
color: #FFFFFF;
|
color: #ffffff;
|
||||||
background: @step-fail-color;
|
background: @step-fail-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lay-step-item--warning{
|
.lay-step-item--warning {
|
||||||
border: 1px @step-warning-color solid;
|
border: 1px @step-warning-color solid;
|
||||||
color: #FFFFFF;
|
color: #ffffff;
|
||||||
background: @step-warning-color;
|
background: @step-warning-color;
|
||||||
}
|
}
|
||||||
.lay-step-item--primary{
|
.lay-step-item--primary {
|
||||||
border: 1px @step-primary-color solid;
|
border: 1px @step-primary-color solid;
|
||||||
color: #FFFFFF;
|
color: #ffffff;
|
||||||
background: @step-primary-color;
|
background: @step-primary-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lay-step-item-success {
|
.lay-step-item-success {
|
||||||
border: 1px @step-color solid;
|
border: 1px @step-color solid;
|
||||||
color: #FFFFFF;
|
color: #ffffff;
|
||||||
background: @step-color;
|
background: @step-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lay-step-item-fail{
|
.lay-step-item-fail {
|
||||||
border: 1px @step-fail-color solid;
|
border: 1px @step-fail-color solid;
|
||||||
color: #FFFFFF;
|
color: #ffffff;
|
||||||
background: @step-fail-color;
|
background: @step-fail-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lay-step-item-warning{
|
.lay-step-item-warning {
|
||||||
border: 1px @step-warning-color solid;
|
border: 1px @step-warning-color solid;
|
||||||
color: #FFFFFF;
|
color: #ffffff;
|
||||||
background: @step-warning-color;
|
background: @step-warning-color;
|
||||||
}
|
}
|
||||||
.lay-step-item-primary{
|
.lay-step-item-primary {
|
||||||
border: 1px @step-primary-color solid;
|
border: 1px @step-primary-color solid;
|
||||||
color: #FFFFFF;
|
color: #ffffff;
|
||||||
background: @step-primary-color;
|
background: @step-primary-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lay-step-item-content{
|
.lay-step-item-content {
|
||||||
color: #8D8D8D;
|
color: #8d8d8d;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
.lay-step-item-content-title{
|
.lay-step-item-content-title {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.lay-step-item-content-row {
|
.lay-step-item-content-row {
|
||||||
color: #8D8D8D;
|
color: #8d8d8d;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 5px;
|
top: 5px;
|
||||||
left: 24px;
|
left: 24px;
|
||||||
width: calc( 100% - 26px );
|
width: calc(100% - 26px);
|
||||||
.lay-step-item-content-title{
|
.lay-step-item-content-title {
|
||||||
word-wrap:break-word;
|
word-wrap: break-word;
|
||||||
max-width: calc(100% - 8px);
|
max-width: calc(100% - 8px);
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
@ -116,41 +116,40 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.lay-step-item-content-active{
|
.lay-step-item-content-active {
|
||||||
color: @step-color;
|
color: @step-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lay-step-item-content--success{
|
.lay-step-item-content--success {
|
||||||
color: @step-color;
|
color: @step-color;
|
||||||
}
|
}
|
||||||
.lay-step-item-content--fail{
|
.lay-step-item-content--fail {
|
||||||
color: @step-fail-color;
|
color: @step-fail-color;
|
||||||
}
|
}
|
||||||
.lay-step-item-content--warning{
|
.lay-step-item-content--warning {
|
||||||
color: @step-warning-color;
|
color: @step-warning-color;
|
||||||
}
|
}
|
||||||
.lay-step-item-content--primary{
|
.lay-step-item-content--primary {
|
||||||
color: @step-primary-color;
|
color: @step-primary-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lay-step-item-content-wait{
|
.lay-step-item-content-wait {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
}
|
}
|
||||||
.lay-step-item-content-success{
|
.lay-step-item-content-success {
|
||||||
color: @step-color;
|
color: @step-color;
|
||||||
}
|
}
|
||||||
.lay-step-item-content-fail{
|
.lay-step-item-content-fail {
|
||||||
color: @step-fail-color;
|
color: @step-fail-color;
|
||||||
}
|
}
|
||||||
.lay-step-item-content-warning{
|
.lay-step-item-content-warning {
|
||||||
color: @step-warning-color;
|
color: @step-warning-color;
|
||||||
}
|
}
|
||||||
.lay-step-item-content-primary{
|
.lay-step-item-content-primary {
|
||||||
color: @step-primary-color;
|
color: @step-primary-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.lay-step-item-line {
|
||||||
.lay-step-item-line{
|
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,7 +162,7 @@
|
|||||||
display: block;
|
display: block;
|
||||||
height: 1px;
|
height: 1px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background: #C9C5C5;
|
background: #c9c5c5;
|
||||||
}
|
}
|
||||||
.is-line-center:before {
|
.is-line-center:before {
|
||||||
left: 50%;
|
left: 50%;
|
||||||
@ -189,7 +188,7 @@
|
|||||||
background: @step-primary-color !important;
|
background: @step-primary-color !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lay-step-simple{
|
.lay-step-simple {
|
||||||
height: 30px;
|
height: 30px;
|
||||||
padding: 0 8px;
|
padding: 0 8px;
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
@ -197,10 +196,10 @@
|
|||||||
background-color: #cecece;
|
background-color: #cecece;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
.lay-step-item-simple{
|
.lay-step-item-simple {
|
||||||
padding: 0 18px;
|
padding: 0 18px;
|
||||||
}
|
}
|
||||||
.lay-step-item-simple:after{
|
.lay-step-item-simple:after {
|
||||||
content: "";
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
@ -215,7 +214,7 @@
|
|||||||
height: auto;
|
height: auto;
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
.lay-step-item-simple:before{
|
.lay-step-item-simple:before {
|
||||||
content: "";
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
@ -230,7 +229,7 @@
|
|||||||
height: auto;
|
height: auto;
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
.lay-step-item-simple-border:before{
|
.lay-step-item-simple-border:before {
|
||||||
left: 1px;
|
left: 1px;
|
||||||
border-color: transparent transparent transparent #ffffff;
|
border-color: transparent transparent transparent #ffffff;
|
||||||
}
|
}
|
||||||
@ -250,27 +249,29 @@
|
|||||||
.lay-step-item-simple-primary {
|
.lay-step-item-simple-primary {
|
||||||
background-color: @step-primary-color;
|
background-color: @step-primary-color;
|
||||||
}
|
}
|
||||||
.lay-step-item-simple-active-border:after{
|
.lay-step-item-simple-active-border:after {
|
||||||
border-color: transparent transparent transparent #9fd4ae !important;
|
border-color: transparent transparent transparent #9fd4ae !important;
|
||||||
}
|
}
|
||||||
.lay-step-item-simple-success-border:after{
|
.lay-step-item-simple-success-border:after {
|
||||||
border-color: transparent transparent transparent @step-success-color!important;
|
border-color: transparent transparent transparent
|
||||||
|
@step-success-color!important;
|
||||||
}
|
}
|
||||||
.lay-step-item-simple-fail-border:after{
|
.lay-step-item-simple-fail-border:after {
|
||||||
border-color: transparent transparent transparent @step-fail-color!important;
|
border-color: transparent transparent transparent @step-fail-color!important;
|
||||||
}
|
}
|
||||||
.lay-step-item-simple-warning-border:after{
|
.lay-step-item-simple-warning-border:after {
|
||||||
border-color: transparent transparent transparent @step-warning-color!important;
|
border-color: transparent transparent transparent
|
||||||
|
@step-warning-color!important;
|
||||||
}
|
}
|
||||||
.lay-step-item-simple-primary-border:after{
|
.lay-step-item-simple-primary-border:after {
|
||||||
border-color: transparent transparent transparent @step-primary-color!important;
|
border-color: transparent transparent transparent
|
||||||
|
@step-primary-color!important;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
.lay-step-column {
|
.lay-step-column {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
flex-flow: column;
|
flex-flow: column;
|
||||||
.lay-step-item-line{
|
.lay-step-item-line {
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 24px;
|
width: 24px;
|
||||||
@ -281,16 +282,16 @@
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
// transform: translateX(-50%);
|
// transform: translateX(-50%);
|
||||||
display: block;
|
display: block;
|
||||||
width: 1px;
|
width: 1px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background: #C9C5C5;
|
background: #c9c5c5;
|
||||||
}
|
}
|
||||||
.lay-step-item-content{
|
.lay-step-item-content {
|
||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
}
|
}
|
||||||
.is-vertical{
|
.is-vertical {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,26 +1,21 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayStep"
|
name: "LayStep",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {
|
import { ref, watch, provide, withDefaults } from "vue";
|
||||||
ref,
|
|
||||||
watch,
|
|
||||||
provide,
|
|
||||||
withDefaults,
|
|
||||||
} from "vue";
|
|
||||||
import "./index.less";
|
import "./index.less";
|
||||||
|
|
||||||
export interface LayStepProps {
|
export interface LayStepProps {
|
||||||
active?: number;
|
active?: number;
|
||||||
center?: boolean;
|
center?: boolean;
|
||||||
direction?: string;
|
direction?: string;
|
||||||
space?: string;
|
space?: string;
|
||||||
currentStatus?: string;
|
currentStatus?: string;
|
||||||
composition?: string;
|
composition?: string;
|
||||||
simple?: boolean;
|
simple?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LayStepProps>(), {
|
const props = withDefaults(defineProps<LayStepProps>(), {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LayStepItem"
|
name: "LayStepItem",
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@ -19,10 +19,10 @@ import {
|
|||||||
import type { ComputedRef } from "vue";
|
import type { ComputedRef } from "vue";
|
||||||
|
|
||||||
export interface LayStepItemProps {
|
export interface LayStepItemProps {
|
||||||
title?: string;
|
title?: string;
|
||||||
content?: string;
|
content?: string;
|
||||||
icon?: string;
|
icon?: string;
|
||||||
status?: string;
|
status?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LayStepItemProps>(), {
|
const props = withDefaults(defineProps<LayStepItemProps>(), {
|
||||||
|
@ -5,7 +5,15 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, inject, onBeforeUnmount, ref, Ref, useSlots, watch } from "vue";
|
import {
|
||||||
|
computed,
|
||||||
|
inject,
|
||||||
|
onBeforeUnmount,
|
||||||
|
ref,
|
||||||
|
Ref,
|
||||||
|
useSlots,
|
||||||
|
watch,
|
||||||
|
} from "vue";
|
||||||
|
|
||||||
export interface LaySubMenuProps {
|
export interface LaySubMenuProps {
|
||||||
id: string;
|
id: string;
|
||||||
@ -36,23 +44,26 @@ const isOpen = computed(() => {
|
|||||||
const layuiNavChild = ref<HTMLElement>();
|
const layuiNavChild = ref<HTMLElement>();
|
||||||
const position = ref<String>();
|
const position = ref<String>();
|
||||||
watch(isOpen, () => {
|
watch(isOpen, () => {
|
||||||
if (isOpen.value && position.value !== 'left-nav') {
|
if (isOpen.value && position.value !== "left-nav") {
|
||||||
setTimeout(setPosition, 0);
|
setTimeout(setPosition, 0);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const setPosition = function() {
|
const setPosition = function () {
|
||||||
if (!isTree || !layuiNavChild.value) {
|
if (!isTree || !layuiNavChild.value) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const offsetWidth = layuiNavChild.value.offsetWidth;
|
const offsetWidth = layuiNavChild.value.offsetWidth;
|
||||||
if (window.innerWidth < layuiNavChild.value.getBoundingClientRect().left + offsetWidth + 10) {
|
if (
|
||||||
position.value = 'left-nav';
|
window.innerWidth <
|
||||||
|
layuiNavChild.value.getBoundingClientRect().left + offsetWidth + 10
|
||||||
|
) {
|
||||||
|
position.value = "left-nav";
|
||||||
} else {
|
} else {
|
||||||
position.value = '';
|
position.value = "";
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
window.addEventListener('resize', setPosition);
|
window.addEventListener("resize", setPosition);
|
||||||
onBeforeUnmount(()=>window.removeEventListener('resize', setPosition));
|
onBeforeUnmount(() => window.removeEventListener("resize", setPosition));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -1 +0,0 @@
|
|||||||
|
|
@ -1 +0,0 @@
|
|||||||
|
|
@ -8,17 +8,14 @@ export default {
|
|||||||
import { withDefaults, inject, Ref } from "vue";
|
import { withDefaults, inject, Ref } from "vue";
|
||||||
|
|
||||||
export interface LayTabItemProps {
|
export interface LayTabItemProps {
|
||||||
id: string;
|
id: string;
|
||||||
title: string;
|
title: string;
|
||||||
closable?: boolean | string;
|
closable?: boolean | string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(
|
const props = withDefaults(defineProps<LayTabItemProps>(), {
|
||||||
defineProps<LayTabItemProps>(),
|
closable: true,
|
||||||
{
|
});
|
||||||
closable: true,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
const active = inject("active");
|
const active = inject("active");
|
||||||
const slotsChange: Ref<boolean> = inject("slotsChange") as Ref<boolean>;
|
const slotsChange: Ref<boolean> = inject("slotsChange") as Ref<boolean>;
|
||||||
|
@ -5,13 +5,7 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {
|
import { ref, watch, useSlots, withDefaults, onMounted } from "vue";
|
||||||
ref,
|
|
||||||
watch,
|
|
||||||
useSlots,
|
|
||||||
withDefaults,
|
|
||||||
onMounted,
|
|
||||||
} from "vue";
|
|
||||||
import { Recordable } from "../../types";
|
import { Recordable } from "../../types";
|
||||||
import { guid } from "../../utils/guidUtil";
|
import { guid } from "../../utils/guidUtil";
|
||||||
import LayCheckbox from "../checkbox";
|
import LayCheckbox from "../checkbox";
|
||||||
@ -23,25 +17,23 @@ import "./index.less";
|
|||||||
const tableId = guid();
|
const tableId = guid();
|
||||||
|
|
||||||
export interface LayTableProps {
|
export interface LayTableProps {
|
||||||
id?: string;
|
id?: string;
|
||||||
skin?: string;
|
skin?: string;
|
||||||
size?: string;
|
size?: string;
|
||||||
page?: Recordable;
|
page?: Recordable;
|
||||||
checkbox?: boolean;
|
checkbox?: boolean;
|
||||||
columns: Recordable[];
|
columns: Recordable[];
|
||||||
dataSource: Recordable[];
|
dataSource: Recordable[];
|
||||||
defaultToolbar?: boolean;
|
defaultToolbar?: boolean;
|
||||||
selectedKeys?: Recordable[];
|
selectedKeys?: Recordable[];
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LayTableProps>(),
|
const props = withDefaults(defineProps<LayTableProps>(), {
|
||||||
{
|
id: "id",
|
||||||
id: "id",
|
size: "md",
|
||||||
size: "md",
|
dataSource: () => [],
|
||||||
dataSource: () => [],
|
selectedKeys: () => [],
|
||||||
selectedKeys: () => [],
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
const emit = defineEmits([
|
const emit = defineEmits([
|
||||||
"change",
|
"change",
|
||||||
@ -114,11 +106,10 @@ let tableHeader = ref<HTMLElement | null>(null);
|
|||||||
let tableBody = ref<HTMLElement | null>(null);
|
let tableBody = ref<HTMLElement | null>(null);
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
tableBody.value?.addEventListener('scroll', () => {
|
tableBody.value?.addEventListener("scroll", () => {
|
||||||
tableHeader.value!.scrollLeft = tableBody.value?.scrollLeft || 0;
|
tableHeader.value!.scrollLeft = tableBody.value?.scrollLeft || 0;
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -8,10 +8,10 @@ export default {
|
|||||||
import "./index.less";
|
import "./index.less";
|
||||||
|
|
||||||
export interface LayTextareaProps {
|
export interface LayTextareaProps {
|
||||||
name?: string;
|
name?: string;
|
||||||
modelValue?: string;
|
modelValue?: string;
|
||||||
placeholder?: string;
|
placeholder?: string;
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = defineProps<LayTextareaProps>();
|
const props = defineProps<LayTextareaProps>();
|
||||||
|
@ -9,7 +9,7 @@ import { defineComponent, ref } from "vue";
|
|||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "LayTooltip",
|
name: "LayTooltip",
|
||||||
components: {
|
components: {
|
||||||
LayPopper
|
LayPopper,
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
content: {
|
content: {
|
||||||
@ -33,19 +33,19 @@ export default defineComponent({
|
|||||||
default: true,
|
default: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
setup(){
|
setup() {
|
||||||
const isMounted = ref(false);
|
const isMounted = ref(false);
|
||||||
return {
|
return {
|
||||||
isMounted
|
isMounted,
|
||||||
}
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
innerProps(){
|
innerProps() {
|
||||||
return {el: this.$el.nextElementSibling, ...this.$props};
|
return { el: this.$el.nextElementSibling, ...this.$props };
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.$nextTick(() => this.isMounted = true);
|
this.$nextTick(() => (this.isMounted = true));
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,2 +1 @@
|
|||||||
import { Recordable } from "../../types";
|
import { Recordable } from "../../types";
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
.layui-tree {
|
.layui-tree {
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
}
|
}
|
||||||
@ -133,9 +132,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.layui-tree-spread
|
.layui-tree-spread
|
||||||
> .layui-tree-entry
|
> .layui-tree-entry
|
||||||
> .layui-tree-iconClick
|
> .layui-tree-iconClick
|
||||||
> .layui-tree-iconArrow:after {
|
> .layui-tree-iconArrow:after {
|
||||||
transform: rotate(90deg) translate(3px, 4px);
|
transform: rotate(90deg) translate(3px, 4px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
src/index.ts
10
src/index.ts
@ -74,9 +74,9 @@ import LayStepItem from "./component/stepItem/index";
|
|||||||
import LaySubMenu from "./component/subMenu/index";
|
import LaySubMenu from "./component/subMenu/index";
|
||||||
import LaySplitPanel from "./component/splitPanel/index";
|
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"
|
import LayConfigProvider from "./provider";
|
||||||
|
|
||||||
const components: Record<string, Component> = {
|
const components: Record<string, Component> = {
|
||||||
LaySplitPanel,
|
LaySplitPanel,
|
||||||
@ -149,7 +149,7 @@ const components: Record<string, Component> = {
|
|||||||
LaySubMenu,
|
LaySubMenu,
|
||||||
LayException,
|
LayException,
|
||||||
LayResult,
|
LayResult,
|
||||||
LayConfigProvider
|
LayConfigProvider,
|
||||||
};
|
};
|
||||||
|
|
||||||
const install = (app: App): void => {
|
const install = (app: App): void => {
|
||||||
@ -231,7 +231,7 @@ export {
|
|||||||
LaySubMenu,
|
LaySubMenu,
|
||||||
LayException,
|
LayException,
|
||||||
LayResult,
|
LayResult,
|
||||||
LayConfigProvider
|
LayConfigProvider,
|
||||||
};
|
};
|
||||||
|
|
||||||
export { layer, useLayer };
|
export { layer, useLayer };
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
import { createI18n } from 'vue-i18n'
|
import { createI18n } from "vue-i18n";
|
||||||
import zh_CN from "./zh_CN";
|
import zh_CN from "./zh_CN";
|
||||||
import en_US from './en_US';
|
import en_US from "./en_US";
|
||||||
|
|
||||||
const i18n = createI18n({
|
const i18n = createI18n({
|
||||||
locale: 'en_US',
|
locale: "en_US",
|
||||||
messages: {
|
messages: {
|
||||||
zh_CN: zh_CN,
|
zh_CN: zh_CN,
|
||||||
en_US: en_US,
|
en_US: en_US,
|
||||||
},
|
},
|
||||||
})
|
});
|
||||||
|
|
||||||
export default i18n;
|
export default i18n;
|
@ -63,7 +63,8 @@ watch(
|
|||||||
locals?.forEach((item: any) => {
|
locals?.forEach((item: any) => {
|
||||||
changeLocales(item.name, item.locale, item.merge);
|
changeLocales(item.name, item.locale, item.merge);
|
||||||
});
|
});
|
||||||
}, { immediate: true, deep: true}
|
},
|
||||||
|
{ immediate: true, deep: true }
|
||||||
);
|
);
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
@global-warm-color: var(--global-warm-color);
|
@global-warm-color: var(--global-warm-color);
|
||||||
|
|
||||||
@global-danger-color: var(--global-danger-color);
|
@global-danger-color: var(--global-danger-color);
|
||||||
|
|
||||||
@global-checked-color: var(--global-checked-color);
|
@global-checked-color: var(--global-checked-color);
|
||||||
|
|
||||||
@ -17,14 +17,13 @@
|
|||||||
@global-back-color: var(--global-back-color);
|
@global-back-color: var(--global-back-color);
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
|
|
||||||
--global-primary-color: #009688;
|
--global-primary-color: #009688;
|
||||||
|
|
||||||
--global-normal-color: #1e9fff;
|
--global-normal-color: #1e9fff;
|
||||||
|
|
||||||
--global-warm-color: #ffb800;
|
--global-warm-color: #ffb800;
|
||||||
|
|
||||||
--global-danger-color: #ff5722;
|
--global-danger-color: #ff5722;
|
||||||
|
|
||||||
--global-checked-color: #5fb878;
|
--global-checked-color: #5fb878;
|
||||||
|
|
||||||
@ -35,15 +34,12 @@
|
|||||||
--global-fore-color: #333;
|
--global-fore-color: #333;
|
||||||
|
|
||||||
--global-back-color: #ffffff;
|
--global-back-color: #ffffff;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
body[lay-theme='dark'] {
|
body[lay-theme="dark"] {
|
||||||
|
|
||||||
--global-border-color: #d2d2d2;
|
--global-border-color: #d2d2d2;
|
||||||
|
|
||||||
--global-fore-color: #ffffff;
|
--global-fore-color: #ffffff;
|
||||||
|
|
||||||
--global-back-color: #393d49;
|
--global-back-color: #393d49;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -12,5 +12,5 @@ export interface SelectItemHandle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface SelectItemPush {
|
export interface SelectItemPush {
|
||||||
(selectItem: SelectItem): void
|
(selectItem: SelectItem): void;
|
||||||
}
|
}
|
@ -3,7 +3,7 @@
|
|||||||
* <p>
|
* <p>
|
||||||
* @param elem dom
|
* @param elem dom
|
||||||
* */
|
* */
|
||||||
export function getTop(elem: any) : any {
|
export function getTop(elem: any): any {
|
||||||
return (
|
return (
|
||||||
elem.offsetTop + ((elem.offsetParent && getTop(elem.offsetParent)) || 0)
|
elem.offsetTop + ((elem.offsetParent && getTop(elem.offsetParent)) || 0)
|
||||||
);
|
);
|
||||||
@ -14,7 +14,7 @@ export function getTop(elem: any) : any {
|
|||||||
* <p>
|
* <p>
|
||||||
* @param elem dom
|
* @param elem dom
|
||||||
* */
|
* */
|
||||||
export function getLeft(elem: any) : any {
|
export function getLeft(elem: any): any {
|
||||||
return (
|
return (
|
||||||
elem.offsetLeft + ((elem.offsetParent && getLeft(elem.offsetParent)) || 0)
|
elem.offsetLeft + ((elem.offsetParent && getLeft(elem.offsetParent)) || 0)
|
||||||
);
|
);
|
||||||
|
@ -13,5 +13,18 @@ export function S4() {
|
|||||||
* @param null 无参
|
* @param null 无参
|
||||||
* */
|
* */
|
||||||
export function guid() {
|
export function guid() {
|
||||||
return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
|
return (
|
||||||
|
S4() +
|
||||||
|
S4() +
|
||||||
|
"-" +
|
||||||
|
S4() +
|
||||||
|
"-" +
|
||||||
|
S4() +
|
||||||
|
"-" +
|
||||||
|
S4() +
|
||||||
|
"-" +
|
||||||
|
S4() +
|
||||||
|
S4() +
|
||||||
|
S4()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user