!27 commit 时代码格式化

Merge pull request !27 from 莫名点/develop
This commit is contained in:
就眠儀式 2022-02-16 09:34:45 +00:00 committed by Gitee
commit dbfba278c1
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
96 changed files with 824 additions and 853 deletions

View File

@ -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

View File

@ -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",

View File

@ -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>

View File

@ -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">

View File

@ -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;

View File

@ -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;
} }
} }

View File

@ -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>

View File

@ -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">

View File

@ -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 [

View File

@ -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">

View File

@ -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[]);

View File

@ -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">

View File

@ -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(

View File

@ -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;

View File

@ -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;
} }

View File

@ -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);

View File

@ -1 +0,0 @@

View File

@ -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>

View File

@ -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">

View File

@ -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;
}
} }

View File

@ -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>

View File

@ -1 +0,0 @@

View File

@ -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 {

View File

@ -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">

View File

@ -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,

View File

@ -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;
} }
} }

View File

@ -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>();

View File

@ -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">

View File

@ -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"]);

View File

@ -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;

View File

@ -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">

View File

@ -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>

View File

@ -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;
} }

View File

@ -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>

View File

@ -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">

View File

@ -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">

View File

@ -1 +0,0 @@

View File

@ -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);

View File

@ -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 };
}; };
// //

View File

@ -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>

View File

@ -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">

View File

@ -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;
} }

View File

@ -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;
} }

View File

@ -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">

View File

@ -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;

View File

@ -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>

View File

@ -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>

View File

@ -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>(), {

View File

@ -1,5 +1,4 @@
.lay-skeleton { .lay-skeleton {
.lay-skeleton-item { .lay-skeleton-item {
height: 16px; height: 16px;
border-radius: 5px; border-radius: 5px;

View File

@ -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;

View File

@ -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>

View File

@ -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;

View File

@ -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>

View File

@ -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"]);

View File

@ -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;

View File

@ -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>(), {

View File

@ -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>(), {

View File

@ -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;
} }
} }

View File

@ -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>(), {

View File

@ -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>(), {

View File

@ -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>

View File

@ -1 +0,0 @@

View File

@ -1 +0,0 @@

View File

@ -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>;

View File

@ -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>

View File

@ -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>();

View File

@ -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>

View File

@ -1,2 +1 @@
import { Recordable } from "../../types"; import { Recordable } from "../../types";

View File

@ -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);
} }

View File

@ -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 };

View File

@ -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;

View File

@ -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(

View File

@ -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;
} }

View File

@ -12,5 +12,5 @@ export interface SelectItemHandle {
} }
export interface SelectItemPush { export interface SelectItemPush {
(selectItem: SelectItem): void (selectItem: SelectItem): void;
} }

View File

@ -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)
); );

View File

@ -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()
);
} }