This commit is contained in:
2022-12-09 16:41:41 +08:00
parent c1cce5a7c2
commit ff7aa8774f
2003 changed files with 156639 additions and 140 deletions

View File

@@ -0,0 +1,112 @@
<script lang="ts">
export default {
name: "LayMenu",
};
</script>
<script setup lang="ts">
import { computed, ComputedRef, provide, Ref, ref, watch } from "vue";
import { provideLevel } from "./useLevel";
import "./index.less";
export interface MenuProps {
selectedKey?: string;
openKeys?: string[];
tree?: boolean;
theme?: string;
inverted?: boolean | string;
level?: boolean | string;
collapse?: boolean | string;
collapseTransition?: boolean | string;
indent?: boolean | string; // 菜单栏是否缩进
}
const emit = defineEmits([
"update:selectedKey",
"update:openKeys",
"changeSelectedKey",
"changeOpenKeys",
]);
const props = withDefaults(defineProps<MenuProps>(), {
selectedKey: "",
openKeys: () => [],
tree: false,
theme: "dark",
inverted: false,
level: true,
collapse: false,
collapseTransition: true,
indent: false,
});
const isTree: ComputedRef<boolean> = computed(() => props.tree);
const isCollapse: ComputedRef<boolean | string> = computed(
() => props.collapse
);
const isCollapseTransition: ComputedRef = computed(
() => props.collapseTransition
);
const oldOpenKeys: Ref = ref<string[]>(props.openKeys);
const menuTheme = computed(() => props.theme);
const openKeys = computed({
get() {
return props.collapse ? [] : props.openKeys;
},
set(val) {
emit("update:openKeys", val);
emit("changeOpenKeys", val);
},
});
const selectedKey = computed({
get() {
return props.selectedKey;
},
set(val) {
emit("update:selectedKey", val);
emit("changeSelectedKey", val);
},
});
const indent = computed(() => {
return props.indent;
});
watch(
() => props.collapse,
() => {
if (props.collapse) {
oldOpenKeys.value = props.openKeys;
openKeys.value = [];
} else {
openKeys.value = oldOpenKeys.value;
}
}
);
provideLevel(1);
provide("isTree", isTree);
provide("selectedKey", selectedKey);
provide("openKeys", openKeys);
provide("isCollapse", isCollapse);
provide("isCollapseTransition", isCollapseTransition);
provide("menuTheme", menuTheme);
provide("indent", indent);
</script>
<template>
<ul
class="layui-nav"
:class="[
level ? '' : 'not-level',
inverted ? 'inverted' : '',
tree ? 'layui-nav-tree' : '',
theme === 'dark' ? 'layui-nav-dark' : 'layui-nav-light',
collapse ? 'layui-nav-collapse' : '',
]"
>
<slot></slot>
</ul>
</template>

View File

@@ -0,0 +1,16 @@
<script lang="ts">
export default {
name: "FileIcon",
};
</script>
<script setup lang="ts">
import LayIcon from "../component/icon/index";
const props = defineProps<{
color?: string;
size?: string;
}>();
</script>
<template>
<lay-icon :color="props.color" :size="props.size" type="layui-icon-file" />
</template>

View File

@@ -0,0 +1,16 @@
<script lang="ts">
export default {
name: "ChatIcon",
};
</script>
<script setup lang="ts">
import LayIcon from "../component/icon/index";
const props = defineProps<{
color?: string;
size?: string;
}>();
</script>
<template>
<lay-icon :color="props.color" :size="props.size" type="layui-icon-chat" />
</template>

View File

@@ -0,0 +1,49 @@
export type DropdownTrigger = "click" | "hover" | "focus" | "contextMenu";
export type DropdownPlacementLegacy =
| "top-left"
| "top-right"
| "bottom-left"
| "bottom-right"
| "right-top"
| "right-bottom"
| "left-top"
| "left-bottom";
export type DropdownPlacement =
| "top"
| "top-start"
| "top-end"
| "bottom"
| "bottom-start"
| "bottom-end"
| "right"
| "right-start"
| "right-end"
| "left"
| "left-start"
| "left-end"
| DropdownPlacementLegacy;
export interface ElementScrollRect {
top: number;
bottom: number;
left: number;
right: number;
scrollTop: number;
scrollBottom: number;
scrollLeft: number;
scrollRight: number;
width: number;
height: number;
}
export interface DropdownContext {
onMouseenter: Function;
onMouseleave: Function;
addChildRef: Function;
removeChildRef: Function;
hide: Function;
}
export const dropdownInjectionKey = Symbol("dropdownInjectKey");

View File

@@ -0,0 +1 @@
.layui-breadcrumb{font-size:0}.layui-breadcrumb>*{font-size:14px}.layui-breadcrumb a{color:#999}.layui-breadcrumb a:hover{color:var(--global-checked-color)!important}.layui-breadcrumb a:nth-last-child(2){color:#666;font-style:normal}.layui-breadcrumb span:last-child{display:none}.layui-breadcrumb span[lay-separator]{margin:0 10px;color:var(--global-neutral-color-7)}

View File

@@ -0,0 +1,20 @@
<script lang="ts">
export default {
name: "NotFoundIcon",
};
</script>
<script setup lang="ts">
import LayIcon from "../component/icon/index";
const props = defineProps<{
color?: string;
size?: string;
}>();
</script>
<template>
<lay-icon
:color="props.color"
:size="props.size"
type="layui-icon-not-found"
/>
</template>