mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-08 17:37:24 +08:00
Merge branch 'main' into gitee
This commit is contained in:
commit
3fb9c6895e
@ -5,7 +5,7 @@ import TypeIt from "typeit";
|
|||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "TypeIt",
|
name: "TypeIt",
|
||||||
props: {
|
props: {
|
||||||
/** 打字速度,以每一步之间的毫秒数为单位 */
|
/** 打字速度,以每一步之间的毫秒数为单位,默认`200` */
|
||||||
speed: {
|
speed: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 200
|
default: 200
|
||||||
|
20
src/layout/components/sidebar/extraIcon.vue
Normal file
20
src/layout/components/sidebar/extraIcon.vue
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { toRaw } from "vue";
|
||||||
|
import { useRenderIcon } from "@/components/ReIcon/src/hooks";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
extraIcon: {
|
||||||
|
type: String,
|
||||||
|
default: ""
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div v-if="props.extraIcon" class="flex justify-center items-center">
|
||||||
|
<component
|
||||||
|
:is="useRenderIcon(toRaw(props.extraIcon))"
|
||||||
|
class="w-[30px] h-[30px]"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
@ -1,4 +1,5 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import extraIcon from "./extraIcon.vue";
|
||||||
import Search from "../search/index.vue";
|
import Search from "../search/index.vue";
|
||||||
import Notice from "../notice/index.vue";
|
import Notice from "../notice/index.vue";
|
||||||
import { useNav } from "@/layout/hooks/useNav";
|
import { useNav } from "@/layout/hooks/useNav";
|
||||||
@ -26,6 +27,7 @@ const {
|
|||||||
menuSelect,
|
menuSelect,
|
||||||
resolvePath,
|
resolvePath,
|
||||||
username,
|
username,
|
||||||
|
getDivStyle,
|
||||||
avatarsStyle,
|
avatarsStyle,
|
||||||
getDropdownItemStyle,
|
getDropdownItemStyle,
|
||||||
getDropdownItemClass
|
getDropdownItemClass
|
||||||
@ -85,15 +87,12 @@ watch(
|
|||||||
:is="useRenderIcon(route.meta && toRaw(route.meta.icon))"
|
:is="useRenderIcon(route.meta && toRaw(route.meta.icon))"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<span class="select-none">{{ transformI18n(route.meta.title) }}</span>
|
<div :style="getDivStyle">
|
||||||
<FontIcon
|
<span class="select-none">
|
||||||
v-if="route.meta.extraIcon"
|
{{ transformI18n(route.meta.title) }}
|
||||||
width="30px"
|
</span>
|
||||||
height="30px"
|
<extraIcon :extraIcon="route.meta.extraIcon" />
|
||||||
style="position: absolute; right: 10px"
|
</div>
|
||||||
:icon="route.meta.extraIcon.name"
|
|
||||||
:svg="route.meta.extraIcon.svg ? true : false"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
</el-menu>
|
</el-menu>
|
||||||
|
@ -1,18 +1,19 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import { getConfig } from "@/config";
|
import { getConfig } from "@/config";
|
||||||
|
import extraIcon from "./extraIcon.vue";
|
||||||
import { childrenType } from "../../types";
|
import { childrenType } from "../../types";
|
||||||
import { useNav } from "@/layout/hooks/useNav";
|
import { useNav } from "@/layout/hooks/useNav";
|
||||||
import { transformI18n } from "@/plugins/i18n";
|
import { transformI18n } from "@/plugins/i18n";
|
||||||
import { useRenderIcon } from "@/components/ReIcon/src/hooks";
|
import { useRenderIcon } from "@/components/ReIcon/src/hooks";
|
||||||
import { ref, toRaw, PropType, nextTick, computed, CSSProperties } from "vue";
|
import { ref, toRaw, PropType, nextTick, computed, CSSProperties } from "vue";
|
||||||
|
|
||||||
import ArrowUp from "@iconify-icons/ep/arrow-up";
|
import ArrowUp from "@iconify-icons/ep/arrow-up-bold";
|
||||||
import EpArrowDown from "@iconify-icons/ep/arrow-down";
|
import EpArrowDown from "@iconify-icons/ep/arrow-down-bold";
|
||||||
import ArrowLeft from "@iconify-icons/ep/arrow-left";
|
import ArrowLeft from "@iconify-icons/ep/arrow-left-bold";
|
||||||
import ArrowRight from "@iconify-icons/ep/arrow-right";
|
import ArrowRight from "@iconify-icons/ep/arrow-right-bold";
|
||||||
|
|
||||||
const { layout, isCollapse, tooltipEffect } = useNav();
|
const { layout, isCollapse, tooltipEffect, getDivStyle } = useNav();
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
item: {
|
item: {
|
||||||
@ -50,16 +51,6 @@ const getMenuTextStyle = computed(() => {
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
const getDivStyle = computed((): CSSProperties => {
|
|
||||||
return {
|
|
||||||
width: "100%",
|
|
||||||
display: "flex",
|
|
||||||
alignItems: "center",
|
|
||||||
justifyContent: "space-between",
|
|
||||||
overflow: "hidden"
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
const getsubMenuIconStyle = computed((): CSSProperties => {
|
const getsubMenuIconStyle = computed((): CSSProperties => {
|
||||||
return {
|
return {
|
||||||
display: "flex",
|
display: "flex",
|
||||||
@ -89,6 +80,28 @@ const getSubTextStyle = computed((): CSSProperties => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const getSubMenuDivStyle = computed((): any => {
|
||||||
|
return item => {
|
||||||
|
return !isCollapse.value
|
||||||
|
? {
|
||||||
|
width: "100%",
|
||||||
|
display: "flex",
|
||||||
|
alignItems: "center",
|
||||||
|
justifyContent: "space-between",
|
||||||
|
overflow: "hidden"
|
||||||
|
}
|
||||||
|
: {
|
||||||
|
width: "100%",
|
||||||
|
textAlign:
|
||||||
|
item?.parentId === null
|
||||||
|
? "center"
|
||||||
|
: layout.value === "mix" && item?.pathList?.length === 2
|
||||||
|
? "center"
|
||||||
|
: ""
|
||||||
|
};
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
const expandCloseIcon = computed(() => {
|
const expandCloseIcon = computed(() => {
|
||||||
if (!getConfig()?.MenuArrowIconNoTransition) return "";
|
if (!getConfig()?.MenuArrowIconNoTransition) return "";
|
||||||
return {
|
return {
|
||||||
@ -240,13 +253,7 @@ function resolvePath(routePath) {
|
|||||||
{{ transformI18n(onlyOneChild.meta.title) }}
|
{{ transformI18n(onlyOneChild.meta.title) }}
|
||||||
</span>
|
</span>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<FontIcon
|
<extraIcon :extraIcon="onlyOneChild.meta.extraIcon" />
|
||||||
v-if="onlyOneChild.meta.extraIcon"
|
|
||||||
width="30px"
|
|
||||||
height="30px"
|
|
||||||
:icon="onlyOneChild.meta.extraIcon.name"
|
|
||||||
:svg="onlyOneChild.meta.extraIcon.svg ? true : false"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
@ -267,18 +274,21 @@ function resolvePath(routePath) {
|
|||||||
:is="useRenderIcon(props.item.meta && toRaw(props.item.meta.icon))"
|
:is="useRenderIcon(props.item.meta && toRaw(props.item.meta.icon))"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<span v-if="layout === 'horizontal'">
|
<div
|
||||||
{{ transformI18n(props.item.meta.title) }}
|
:style="getSubMenuDivStyle(props.item)"
|
||||||
</span>
|
|
||||||
<el-tooltip
|
|
||||||
v-if="
|
v-if="
|
||||||
layout !== 'horizontal' &&
|
|
||||||
!(
|
!(
|
||||||
isCollapse &&
|
isCollapse &&
|
||||||
toRaw(props.item.meta.icon) &&
|
toRaw(props.item.meta.icon) &&
|
||||||
props.item.parentId === null
|
props.item.parentId === null
|
||||||
)
|
)
|
||||||
"
|
"
|
||||||
|
>
|
||||||
|
<span v-if="layout === 'horizontal'">
|
||||||
|
{{ transformI18n(props.item.meta.title) }}
|
||||||
|
</span>
|
||||||
|
<el-tooltip
|
||||||
|
v-if="layout !== 'horizontal'"
|
||||||
placement="top"
|
placement="top"
|
||||||
:effect="tooltipEffect"
|
:effect="tooltipEffect"
|
||||||
:offset="-10"
|
:offset="-10"
|
||||||
@ -292,16 +302,13 @@ function resolvePath(routePath) {
|
|||||||
:style="getSubTextStyle"
|
:style="getSubTextStyle"
|
||||||
@mouseover="hoverMenu(props.item)"
|
@mouseover="hoverMenu(props.item)"
|
||||||
>
|
>
|
||||||
{{ overflowSlice(transformI18n(props.item.meta.title), props.item) }}
|
{{
|
||||||
|
overflowSlice(transformI18n(props.item.meta.title), props.item)
|
||||||
|
}}
|
||||||
</span>
|
</span>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<FontIcon
|
<extraIcon v-if="!isCollapse" :extraIcon="props.item.meta.extraIcon" />
|
||||||
v-if="props.item.meta.extraIcon"
|
</div>
|
||||||
width="30px"
|
|
||||||
height="30px"
|
|
||||||
:icon="props.item.meta.extraIcon.name"
|
|
||||||
:svg="props.item.meta.extraIcon.svg ? true : false"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
<sidebar-item
|
<sidebar-item
|
||||||
v-for="child in props.item.children"
|
v-for="child in props.item.children"
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import { computed } from "vue";
|
|
||||||
import { storeToRefs } from "pinia";
|
import { storeToRefs } from "pinia";
|
||||||
import { getConfig } from "@/config";
|
import { getConfig } from "@/config";
|
||||||
import { useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
@ -7,6 +6,7 @@ import { routeMetaType } from "../types";
|
|||||||
import { useGlobal } from "@pureadmin/utils";
|
import { useGlobal } from "@pureadmin/utils";
|
||||||
import { transformI18n } from "@/plugins/i18n";
|
import { transformI18n } from "@/plugins/i18n";
|
||||||
import { router, remainingPaths } from "@/router";
|
import { router, remainingPaths } from "@/router";
|
||||||
|
import { computed, type CSSProperties } from "vue";
|
||||||
import { useAppStoreHook } from "@/store/modules/app";
|
import { useAppStoreHook } from "@/store/modules/app";
|
||||||
import { useUserStoreHook } from "@/store/modules/user";
|
import { useUserStoreHook } from "@/store/modules/user";
|
||||||
import { useEpThemeStoreHook } from "@/store/modules/epTheme";
|
import { useEpThemeStoreHook } from "@/store/modules/epTheme";
|
||||||
@ -21,6 +21,16 @@ export function useNav() {
|
|||||||
/** 平台`layout`中所有`el-tooltip`的`effect`配置,默认`light` */
|
/** 平台`layout`中所有`el-tooltip`的`effect`配置,默认`light` */
|
||||||
const tooltipEffect = getConfig()?.TooltipEffect ?? "light";
|
const tooltipEffect = getConfig()?.TooltipEffect ?? "light";
|
||||||
|
|
||||||
|
const getDivStyle = computed((): CSSProperties => {
|
||||||
|
return {
|
||||||
|
width: "100%",
|
||||||
|
display: "flex",
|
||||||
|
alignItems: "center",
|
||||||
|
justifyContent: "space-between",
|
||||||
|
overflow: "hidden"
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
/** 用户名 */
|
/** 用户名 */
|
||||||
const username = computed(() => {
|
const username = computed(() => {
|
||||||
return useUserStoreHook()?.username;
|
return useUserStoreHook()?.username;
|
||||||
@ -146,6 +156,7 @@ export function useNav() {
|
|||||||
$storage,
|
$storage,
|
||||||
backHome,
|
backHome,
|
||||||
onPanel,
|
onPanel,
|
||||||
|
getDivStyle,
|
||||||
changeTitle,
|
changeTitle,
|
||||||
toggleSideBar,
|
toggleSideBar,
|
||||||
menuSelect,
|
menuSelect,
|
||||||
|
@ -67,10 +67,7 @@ export type childrenType = {
|
|||||||
icon?: string;
|
icon?: string;
|
||||||
title?: string;
|
title?: string;
|
||||||
showParent?: boolean;
|
showParent?: boolean;
|
||||||
extraIcon?: {
|
extraIcon?: string;
|
||||||
svg?: boolean;
|
|
||||||
name?: string;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
showTooltip?: boolean;
|
showTooltip?: boolean;
|
||||||
parentId?: number;
|
parentId?: number;
|
||||||
|
@ -16,10 +16,7 @@ export default {
|
|||||||
component: () => import("@/views/components/message/index.vue"),
|
component: () => import("@/views/components/message/index.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsmessage"),
|
title: $t("menus.hsmessage"),
|
||||||
extraIcon: {
|
extraIcon: "IF-pure-iconfont-new svg",
|
||||||
svg: true,
|
|
||||||
name: "pure-iconfont-new"
|
|
||||||
},
|
|
||||||
transition: {
|
transition: {
|
||||||
enterTransition: "animate__fadeInLeft",
|
enterTransition: "animate__fadeInLeft",
|
||||||
leaveTransition: "animate__fadeOutRight"
|
leaveTransition: "animate__fadeOutRight"
|
||||||
|
@ -53,10 +53,7 @@ export default {
|
|||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsmenu1-2-2"),
|
title: $t("menus.hsmenu1-2-2"),
|
||||||
keepAlive: true,
|
keepAlive: true,
|
||||||
extraIcon: {
|
extraIcon: "IF-pure-iconfont-new svg"
|
||||||
svg: true,
|
|
||||||
name: "pure-iconfont-new"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -31,7 +31,7 @@ const barcodes = [
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="font-medium">
|
<div class="font-medium">
|
||||||
条形码(基于
|
条形码(基于
|
||||||
|
@ -24,7 +24,7 @@ const handleChange = value => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header> 区域级联选择器 </template>
|
<template #header> 区域级联选择器 </template>
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :xl="12" :lg="12" :md="24" :sm="24" :xs="24">
|
<el-col :xl="12" :lg="12" :md="24" :sm="24" :xs="24">
|
||||||
|
@ -17,7 +17,7 @@ const throttleClick = throttle(handle);
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<el-card class="mb-5">
|
<el-card class="mb-5" shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div>防抖:debounce</div>
|
<div>防抖:debounce</div>
|
||||||
</template>
|
</template>
|
||||||
@ -32,7 +32,7 @@ const throttleClick = throttle(handle);
|
|||||||
连续点击我,只会执行最后一次点击事件,延后执行
|
连续点击我,只会执行最后一次点击事件,延后执行
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div>节流:throttle</div>
|
<div>节流:throttle</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -26,7 +26,7 @@ function down() {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<span class="font-medium">文件下载功能</span>
|
<span class="font-medium">文件下载功能</span>
|
||||||
</template>
|
</template>
|
||||||
|
@ -69,7 +69,7 @@ const exportExcel = () => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="font-medium">
|
<div class="font-medium">
|
||||||
导出Execl(
|
导出Execl(
|
||||||
|
@ -10,7 +10,7 @@ const icon = ref("ep:add-location");
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">图标选择器</span>
|
<span class="font-medium">图标选择器</span>
|
||||||
|
@ -32,7 +32,7 @@ const load = () => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="font-medium">
|
<div class="font-medium">
|
||||||
表格无限滚动(
|
表格无限滚动(
|
||||||
|
@ -22,7 +22,7 @@ const dataProps = {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">
|
<span class="font-medium">
|
||||||
@ -33,7 +33,7 @@ const dataProps = {
|
|||||||
|
|
||||||
<el-row :gutter="24">
|
<el-row :gutter="24">
|
||||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12" class="mb-[20px]">
|
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12" class="mb-[20px]">
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium"> 普通树结构 </span>
|
<span class="font-medium"> 普通树结构 </span>
|
||||||
@ -62,7 +62,7 @@ const dataProps = {
|
|||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium"> 虚拟树结构 </span>
|
<span class="font-medium"> 虚拟树结构 </span>
|
||||||
|
@ -43,7 +43,7 @@ const filterMethod = (query: string, node: treeNode) => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">
|
<span class="font-medium">
|
||||||
|
@ -34,7 +34,7 @@ const onPrint = () => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="font-medium">
|
<div class="font-medium">
|
||||||
PDF预览(
|
PDF预览(
|
||||||
|
@ -77,7 +77,7 @@ const tableData: User[] = [
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">打印功能(报表、图表、图片)</span>
|
<span class="font-medium">打印功能(报表、图表、图片)</span>
|
||||||
|
@ -23,7 +23,7 @@ const disabledClick = () => {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="font-medium">
|
<div class="font-medium">
|
||||||
二维码(基于
|
二维码(基于
|
||||||
|
@ -84,7 +84,7 @@ const swiperExample: any[] = [
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="font-medium">
|
<div class="font-medium">
|
||||||
Swiper插件(
|
Swiper插件(
|
||||||
|
@ -41,7 +41,7 @@ const activities = [
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">时间线</span>
|
<span class="font-medium">时间线</span>
|
||||||
|
@ -9,7 +9,7 @@ defineOptions({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="font-medium">
|
<div class="font-medium">
|
||||||
虚拟列表组件(
|
虚拟列表组件(
|
||||||
|
@ -32,7 +32,7 @@ onBeforeUnmount(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">
|
<span class="font-medium">
|
||||||
|
@ -40,7 +40,7 @@ Object.keys(devDependencies).forEach(key => {
|
|||||||
</span>
|
</span>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card m-4" shadow="hover">
|
<el-card class="box-card m-4" shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">项目信息</span>
|
<span class="font-medium">项目信息</span>
|
||||||
@ -49,7 +49,7 @@ Object.keys(devDependencies).forEach(key => {
|
|||||||
<PureDescriptions :columns="columns" border :column="3" align="left" />
|
<PureDescriptions :columns="columns" border :column="3" align="left" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card m-4" shadow="hover">
|
<el-card class="box-card m-4" shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">生产环境依赖</span>
|
<span class="font-medium">生产环境依赖</span>
|
||||||
@ -73,7 +73,7 @@ Object.keys(devDependencies).forEach(key => {
|
|||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card m-4" shadow="hover">
|
<el-card class="box-card m-4" shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">开发环境依赖</span>
|
<span class="font-medium">开发环境依赖</span>
|
||||||
|
@ -11,7 +11,7 @@ const url = ref(`${VITE_PUBLIC_PATH}html/button.html`);
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">通过iframe引入按钮页面</span>
|
<span class="font-medium">通过iframe引入按钮页面</span>
|
||||||
|
@ -10,7 +10,7 @@ defineOptions({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">右键菜单组件</span>
|
<span class="font-medium">右键菜单组件</span>
|
||||||
|
@ -7,7 +7,7 @@ defineOptions({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">数字动画组件</span>
|
<span class="font-medium">数字动画组件</span>
|
||||||
|
@ -26,7 +26,7 @@ const onCropper = (): void => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">图片裁剪组件</span>
|
<span class="font-medium">图片裁剪组件</span>
|
||||||
|
@ -102,7 +102,7 @@ function addDanmu() {
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">
|
<span class="font-medium">
|
||||||
|
@ -56,7 +56,7 @@ onMounted(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">
|
<span class="font-medium">
|
||||||
@ -76,7 +76,7 @@ onMounted(() => {
|
|||||||
<!-- grid列表拖拽 -->
|
<!-- grid列表拖拽 -->
|
||||||
<el-row :gutter="25">
|
<el-row :gutter="25">
|
||||||
<el-col :xs="25" :sm="8" :md="8" :lg="8">
|
<el-col :xs="25" :sm="8" :md="8" :lg="8">
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>grid列表拖拽</span>
|
<span>grid列表拖拽</span>
|
||||||
@ -100,7 +100,7 @@ onMounted(() => {
|
|||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<el-col :xs="25" :sm="8" :md="8" :lg="8">
|
<el-col :xs="25" :sm="8" :md="8" :lg="8">
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>单列拖拽</span>
|
<span>单列拖拽</span>
|
||||||
@ -123,7 +123,7 @@ onMounted(() => {
|
|||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<el-col :xs="25" :sm="8" :md="8" :lg="8">
|
<el-col :xs="25" :sm="8" :md="8" :lg="8">
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>拖拽实现元素位置交换</span>
|
<span>拖拽实现元素位置交换</span>
|
||||||
|
@ -72,7 +72,7 @@ watch(
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">
|
<span class="font-medium">
|
||||||
|
@ -11,7 +11,7 @@ defineOptions({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium"> Message提示 </span>
|
<span class="font-medium"> Message提示 </span>
|
||||||
|
@ -50,7 +50,7 @@ function changeDirection(val) {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-space wrap>
|
<el-space wrap>
|
||||||
<el-card class="box-card">
|
<el-card class="box-card" shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>无缝滚动示例</span>
|
<span>无缝滚动示例</span>
|
||||||
|
@ -27,7 +27,12 @@ const selectedVal = ({ left, right }): void => {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<el-card class="box-card" v-for="(item, key) in dataLists" :key="key">
|
<el-card
|
||||||
|
class="box-card"
|
||||||
|
v-for="(item, key) in dataLists"
|
||||||
|
:key="key"
|
||||||
|
shadow="never"
|
||||||
|
>
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>{{ item.title }}</span>
|
<span>{{ item.title }}</span>
|
||||||
|
@ -20,7 +20,7 @@ const settingTB: ContextProps = reactive({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">切割面板组件</span>
|
<span class="font-medium">切割面板组件</span>
|
||||||
|
@ -7,7 +7,7 @@ defineOptions({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium"> 打字机组件 </span>
|
<span class="font-medium"> 打字机组件 </span>
|
||||||
|
@ -31,7 +31,7 @@ onMounted(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">
|
<span class="font-medium">
|
||||||
|
@ -39,7 +39,7 @@ const handleCreated = editor => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">
|
<span class="font-medium">
|
||||||
|
@ -65,7 +65,7 @@ onMounted(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">
|
<span class="font-medium">
|
||||||
|
@ -41,7 +41,7 @@ const guide = () => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">
|
<span class="font-medium">
|
||||||
|
@ -14,7 +14,7 @@ function tabClick({ index }) {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">
|
<span class="font-medium">
|
||||||
|
@ -14,7 +14,7 @@ function tabClick({ index }) {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">
|
<span class="font-medium">
|
||||||
|
@ -8,7 +8,7 @@ const { columns } = useColumns();
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">失败页</span>
|
<span class="font-medium">失败页</span>
|
||||||
|
@ -22,7 +22,7 @@ const columns = [
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">成功页</span>
|
<span class="font-medium">成功页</span>
|
||||||
|
@ -46,7 +46,7 @@ function onCloseTags() {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div>标签页复用,超出限制自动关闭</div>
|
<div>标签页复用,超出限制自动关闭</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -7,6 +7,7 @@ import {
|
|||||||
useECharts,
|
useECharts,
|
||||||
type EchartOptions
|
type EchartOptions
|
||||||
} from "@pureadmin/utils";
|
} from "@pureadmin/utils";
|
||||||
|
import * as echarts from "echarts/core";
|
||||||
|
|
||||||
const { isDark } = useDark();
|
const { isDark } = useDark();
|
||||||
|
|
||||||
@ -28,11 +29,13 @@ setOptions(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
grid: {
|
grid: {
|
||||||
containLabel: true,
|
bottom: "20px",
|
||||||
top: "10px",
|
right: "10px"
|
||||||
bottom: "0",
|
},
|
||||||
left: "0",
|
legend: {
|
||||||
right: "0"
|
//@ts-expect-error
|
||||||
|
right: true,
|
||||||
|
data: ["watchers", "fork", "star"]
|
||||||
},
|
},
|
||||||
xAxis: [
|
xAxis: [
|
||||||
{
|
{
|
||||||
@ -45,7 +48,7 @@ setOptions(
|
|||||||
// width: "70",
|
// width: "70",
|
||||||
// overflow: "truncate"
|
// overflow: "truncate"
|
||||||
},
|
},
|
||||||
data: ["open_issues", "forks", "watchers", "star"],
|
data: ["2021", "2022", "2023"],
|
||||||
triggerEvent: true
|
triggerEvent: true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -57,9 +60,58 @@ setOptions(
|
|||||||
],
|
],
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
name: "GitHub信息",
|
name: "watchers",
|
||||||
type: "bar",
|
type: "bar",
|
||||||
data: [1000, 10000, 20000, 66666]
|
barWidth: "15%",
|
||||||
|
itemStyle: {
|
||||||
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||||
|
{
|
||||||
|
offset: 0,
|
||||||
|
color: "#e6a23c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: "#eebe77"
|
||||||
|
}
|
||||||
|
])
|
||||||
|
},
|
||||||
|
data: [200, 320, 800]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "fork",
|
||||||
|
type: "bar",
|
||||||
|
barWidth: "15%",
|
||||||
|
itemStyle: {
|
||||||
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||||
|
{
|
||||||
|
offset: 0,
|
||||||
|
color: "#f56c6c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: "#f89898"
|
||||||
|
}
|
||||||
|
])
|
||||||
|
},
|
||||||
|
data: [1600, 2460, 4500]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "star",
|
||||||
|
type: "bar",
|
||||||
|
barWidth: "15%",
|
||||||
|
itemStyle: {
|
||||||
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||||
|
{
|
||||||
|
offset: 0,
|
||||||
|
color: "#409EFF"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: "#53a7ff"
|
||||||
|
}
|
||||||
|
])
|
||||||
|
},
|
||||||
|
data: [1450, 3620, 7500]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
addTooltip: true
|
addTooltip: true
|
||||||
|
@ -24,7 +24,6 @@ const list = [
|
|||||||
:key="index"
|
:key="index"
|
||||||
:columns="item.columns"
|
:columns="item.columns"
|
||||||
:column="item.column"
|
:column="item.column"
|
||||||
class="margin-top"
|
|
||||||
direction="vertical"
|
direction="vertical"
|
||||||
border
|
border
|
||||||
/>
|
/>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { useIntervalFn } from "@vueuse/core";
|
||||||
import { ref, computed, watch, type Ref } from "vue";
|
import { ref, computed, watch, type Ref } from "vue";
|
||||||
import { useAppStoreHook } from "@/store/modules/app";
|
import { useAppStoreHook } from "@/store/modules/app";
|
||||||
import {
|
import {
|
||||||
@ -11,43 +12,129 @@ import {
|
|||||||
const { isDark } = useDark();
|
const { isDark } = useDark();
|
||||||
|
|
||||||
const theme: EchartOptions["theme"] = computed(() => {
|
const theme: EchartOptions["theme"] = computed(() => {
|
||||||
return isDark.value ? "dark" : "light";
|
return isDark.value ? "dark" : "default";
|
||||||
});
|
});
|
||||||
|
|
||||||
const lineChartRef = ref<HTMLDivElement | null>(null);
|
const lineChartRef = ref<HTMLDivElement | null>(null);
|
||||||
const { setOptions, resize } = useECharts(lineChartRef as Ref<HTMLDivElement>, {
|
const { setOptions, getInstance, resize } = useECharts(
|
||||||
theme
|
lineChartRef as Ref<HTMLDivElement>,
|
||||||
});
|
{ theme }
|
||||||
|
);
|
||||||
|
|
||||||
|
const xData = (() => {
|
||||||
|
const data: any[] = [];
|
||||||
|
for (let i = 1; i < 31; i++) {
|
||||||
|
data.push(`${i}日`);
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
})();
|
||||||
|
|
||||||
setOptions(
|
setOptions(
|
||||||
{
|
{
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: "item"
|
trigger: "axis",
|
||||||
|
axisPointer: {
|
||||||
|
type: "shadow"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
grid: {
|
grid: {
|
||||||
containLabel: true,
|
bottom: "20px",
|
||||||
top: "10px",
|
right: "10px"
|
||||||
bottom: "0",
|
|
||||||
left: "0",
|
|
||||||
right: "0"
|
|
||||||
},
|
},
|
||||||
xAxis: {
|
legend: {
|
||||||
|
//@ts-expect-error
|
||||||
|
right: true,
|
||||||
|
data: ["fork", "star"]
|
||||||
|
},
|
||||||
|
calculable: true,
|
||||||
|
xAxis: [
|
||||||
|
{
|
||||||
|
triggerEvent: true,
|
||||||
type: "category",
|
type: "category",
|
||||||
axisLabel: {
|
splitLine: {
|
||||||
interval: 0
|
show: false
|
||||||
},
|
},
|
||||||
data: ["open_issues", "forks", "watchers", "star"],
|
axisTick: {
|
||||||
triggerEvent: true
|
show: false
|
||||||
},
|
},
|
||||||
yAxis: {
|
data: xData
|
||||||
|
}
|
||||||
|
],
|
||||||
|
yAxis: [
|
||||||
|
{
|
||||||
|
triggerEvent: true,
|
||||||
type: "value",
|
type: "value",
|
||||||
triggerEvent: true
|
splitLine: {
|
||||||
|
show: false
|
||||||
},
|
},
|
||||||
|
axisLine: {
|
||||||
|
show: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
dataZoom: [
|
||||||
|
{
|
||||||
|
type: "slider",
|
||||||
|
show: false,
|
||||||
|
realtime: true,
|
||||||
|
startValue: 0,
|
||||||
|
endValue: 24
|
||||||
|
}
|
||||||
|
],
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
data: [1000, 10000, 20000, 66666],
|
name: "fork",
|
||||||
type: "line",
|
type: "line",
|
||||||
areaStyle: {}
|
symbolSize: 10,
|
||||||
|
symbol: "circle",
|
||||||
|
color: "#f56c6c",
|
||||||
|
markPoint: {
|
||||||
|
label: {
|
||||||
|
color: "#fff"
|
||||||
|
},
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
type: "max",
|
||||||
|
name: "最大值"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "min",
|
||||||
|
name: "最小值"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
data: [
|
||||||
|
509, 917, 2455, 2610, 2719, 3033, 3044, 3085, 2708, 2809, 2117, 2000,
|
||||||
|
1455, 1210, 719, 733, 944, 2285, 2208, 3372, 3936, 3693, 2962, 2810,
|
||||||
|
3519, 2455, 2610, 2719, 2484, 2078
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "star",
|
||||||
|
type: "line",
|
||||||
|
symbolSize: 10,
|
||||||
|
symbol: "circle",
|
||||||
|
color: "#53a7ff",
|
||||||
|
markPoint: {
|
||||||
|
label: {
|
||||||
|
color: "#fff"
|
||||||
|
},
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
type: "max",
|
||||||
|
name: "最大值"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "min",
|
||||||
|
name: "最小值"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
data: [
|
||||||
|
2136, 3693, 2962, 3810, 3519, 3484, 3915, 3823, 3455, 4310, 4019,
|
||||||
|
3433, 3544, 3885, 4208, 3372, 3484, 3915, 3748, 3675, 4009, 4433,
|
||||||
|
3544, 3285, 4208, 3372, 3484, 3915, 3823, 4265, 4298
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
addTooltip: true
|
addTooltip: true
|
||||||
@ -57,9 +144,36 @@ setOptions(
|
|||||||
callback: params => {
|
callback: params => {
|
||||||
console.log("click", params);
|
console.log("click", params);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "contextmenu",
|
||||||
|
callback: params => {
|
||||||
|
console.log("contextmenu", params);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 点击空白处
|
||||||
|
{
|
||||||
|
type: "zrender",
|
||||||
|
name: "click",
|
||||||
|
callback: params => {
|
||||||
|
console.log("点击空白处", params);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let a = 1;
|
||||||
|
useIntervalFn(() => {
|
||||||
|
if (a == xData.length - 24) {
|
||||||
|
a = 0;
|
||||||
|
}
|
||||||
|
getInstance()!.dispatchAction({
|
||||||
|
type: "dataZoom",
|
||||||
|
startValue: a,
|
||||||
|
endValue: a + 24
|
||||||
|
});
|
||||||
|
a++;
|
||||||
|
}, 2000);
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => useAppStoreHook().getSidebarStatus,
|
() => useAppStoreHook().getSidebarStatus,
|
||||||
() => {
|
() => {
|
||||||
|
@ -25,8 +25,8 @@ setOptions(
|
|||||||
trigger: "item"
|
trigger: "item"
|
||||||
},
|
},
|
||||||
legend: {
|
legend: {
|
||||||
orient: "vertical",
|
icon: "circle",
|
||||||
// @ts-expect-error
|
//@ts-expect-error
|
||||||
right: true
|
right: true
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
@ -36,19 +36,19 @@ setOptions(
|
|||||||
top: "20%",
|
top: "20%",
|
||||||
radius: "80%",
|
radius: "80%",
|
||||||
center: ["40%", "50%"],
|
center: ["40%", "50%"],
|
||||||
|
color: ["#e6a23c", "#f56c6c", "#53a7ff"],
|
||||||
data: [
|
data: [
|
||||||
{ value: 20000, name: "watchers" },
|
{ value: 400, name: "watchers" },
|
||||||
{ value: 66666, name: "star" },
|
{ value: 1600, name: "forks" },
|
||||||
{ value: 10000, name: "forks" },
|
{ value: 7200, name: "star" }
|
||||||
{ value: 1000, name: "open_issues" }
|
]
|
||||||
],
|
// emphasis: {
|
||||||
emphasis: {
|
// itemStyle: {
|
||||||
itemStyle: {
|
// shadowBlur: 10,
|
||||||
shadowBlur: 10,
|
// shadowOffsetX: 0,
|
||||||
shadowOffsetX: 0,
|
// shadowColor: "rgba(0, 0, 0, 0.5)"
|
||||||
shadowColor: "rgba(0, 0, 0, 0.5)"
|
// }
|
||||||
}
|
// }
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -25,7 +25,7 @@ export function useColumns() {
|
|||||||
用户名
|
用户名
|
||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
value: "xiaoxian"
|
value: "乐于分享的程序员小铭"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
labelRenderer: () => (
|
labelRenderer: () => (
|
||||||
@ -47,7 +47,7 @@ export function useColumns() {
|
|||||||
居住地
|
居住地
|
||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
value: "杭州"
|
value: "中国"
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -80,7 +80,7 @@ export function useColumns() {
|
|||||||
联系地址
|
联系地址
|
||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
value: "杭州市西湖区"
|
value: "中华人民共和国"
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -91,15 +91,15 @@ export function useColumns() {
|
|||||||
<el-icon>
|
<el-icon>
|
||||||
<iconify-icon-offline icon={Notebook} />
|
<iconify-icon-offline icon={Notebook} />
|
||||||
</el-icon>
|
</el-icon>
|
||||||
好好学习,天天向上
|
个性签名
|
||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
cellRenderer: () => (
|
cellRenderer: () => (
|
||||||
<TypeIt
|
<TypeIt
|
||||||
className={"github"}
|
className={"github"}
|
||||||
values={["Coding as art. Keep open source. Enjoy open source."]}
|
values={["办法总比困难多"]}
|
||||||
cursor={false}
|
cursor={false}
|
||||||
speed={40}
|
speed={100}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -2,41 +2,20 @@
|
|||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import MdEditor from "md-editor-v3";
|
import MdEditor from "md-editor-v3";
|
||||||
import VueDanmaku from "vue3-danmaku";
|
|
||||||
import Bar from "./components/Bar.vue";
|
import Bar from "./components/Bar.vue";
|
||||||
import Pie from "./components/Pie.vue";
|
import Pie from "./components/Pie.vue";
|
||||||
import Line from "./components/Line.vue";
|
import Line from "./components/Line.vue";
|
||||||
import TypeIt from "@/components/ReTypeit";
|
import TypeIt from "@/components/ReTypeit";
|
||||||
|
import { ref, computed, markRaw } from "vue";
|
||||||
import Github from "./components/Github.vue";
|
import Github from "./components/Github.vue";
|
||||||
import { openLink, randomColor } from "@pureadmin/utils";
|
import { randomColor } from "@pureadmin/utils";
|
||||||
import { useRenderFlicker } from "@/components/ReFlicker";
|
import { useRenderFlicker } from "@/components/ReFlicker";
|
||||||
import { ref, computed, markRaw, onMounted, onUnmounted } from "vue";
|
|
||||||
|
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: "Welcome"
|
name: "Welcome"
|
||||||
});
|
});
|
||||||
|
|
||||||
const danmus = [
|
|
||||||
"太好用了吧",
|
|
||||||
"so easy",
|
|
||||||
"效率大大提高呀",
|
|
||||||
"还有精简版,还分国际化和非国际化,Perfect 😘",
|
|
||||||
"好多组件呀,爱啦爱啦 ❤️",
|
|
||||||
"精简版开发体验也太赞了吧 🙀",
|
|
||||||
"pure-admin-table 真方便呀",
|
|
||||||
"哇塞,pure-admin-utils 好多常用、易用的工具呀",
|
|
||||||
"我要 star 这个项目,爱啦爱啦",
|
|
||||||
"免费、开源做到这个程度,真不错 👍",
|
|
||||||
"文档简单易懂,上手真快",
|
|
||||||
"呀!还有免费的教学视频呢,我要去学习一下咯",
|
|
||||||
"稳定、可靠,未来可期呀,加油!",
|
|
||||||
"太卷了,太卷了,慢点让我跟上 😄"
|
|
||||||
];
|
|
||||||
|
|
||||||
let timer = 0;
|
|
||||||
const list = ref();
|
const list = ref();
|
||||||
const danmaku = ref();
|
|
||||||
const date: Date = new Date();
|
|
||||||
const loading = ref<boolean>(true);
|
const loading = ref<boolean>(true);
|
||||||
const titleClass = computed(() => {
|
const titleClass = computed(() => {
|
||||||
return ["text-base", "font-medium"];
|
return ["text-base", "font-medium"];
|
||||||
@ -46,23 +25,6 @@ setTimeout(() => {
|
|||||||
loading.value = !loading.value;
|
loading.value = !loading.value;
|
||||||
}, 800);
|
}, 800);
|
||||||
|
|
||||||
const greetings = computed(() => {
|
|
||||||
if (date.getHours() >= 0 && date.getHours() < 12) {
|
|
||||||
return "上午阳光明媚,祝你薪水翻倍🌞!";
|
|
||||||
} else if (date.getHours() >= 12 && date.getHours() < 18) {
|
|
||||||
return "下午小风娇好,愿你青春不老😃!";
|
|
||||||
} else {
|
|
||||||
return "折一根天使羽毛,愿拂去您的疲惫烦恼忧伤🌛!";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function resizeHandler() {
|
|
||||||
if (timer) clearTimeout(timer);
|
|
||||||
timer = window.setTimeout(() => {
|
|
||||||
danmaku.value.resize();
|
|
||||||
}, 500);
|
|
||||||
}
|
|
||||||
|
|
||||||
axios
|
axios
|
||||||
.get("https://api.github.com/repos/pure-admin/vue-pure-admin/releases")
|
.get("https://api.github.com/repos/pure-admin/vue-pure-admin/releases")
|
||||||
.then(res => {
|
.then(res => {
|
||||||
@ -78,42 +40,18 @@ axios
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
window.onresize = () => resizeHandler();
|
|
||||||
});
|
|
||||||
|
|
||||||
onUnmounted(() => {
|
|
||||||
window.onresize = null;
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="welcome">
|
<div>
|
||||||
<el-card class="top-content dark:border-none">
|
<el-row :gutter="24">
|
||||||
<div class="left-mark select-none">
|
|
||||||
<img
|
|
||||||
src="https://avatars.githubusercontent.com/u/44761321?v=4"
|
|
||||||
title="直达仓库地址"
|
|
||||||
@click="openLink('https://github.com/pure-admin/vue-pure-admin')"
|
|
||||||
/>
|
|
||||||
<TypeIt
|
|
||||||
:className="'type-it0'"
|
|
||||||
:values="[greetings]"
|
|
||||||
:cursor="false"
|
|
||||||
:speed="60"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
|
|
||||||
<el-row :gutter="24" style="margin: 20px">
|
|
||||||
<el-col
|
<el-col
|
||||||
:xs="24"
|
:xs="24"
|
||||||
:sm="24"
|
:sm="24"
|
||||||
:md="12"
|
:md="12"
|
||||||
:lg="12"
|
:lg="12"
|
||||||
:xl="12"
|
:xl="12"
|
||||||
style="margin-bottom: 20px"
|
class="mb-[18px]"
|
||||||
v-motion
|
v-motion
|
||||||
:initial="{
|
:initial="{
|
||||||
opacity: 0,
|
opacity: 0,
|
||||||
@ -127,66 +65,7 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<el-card style="height: 410px">
|
<el-card shadow="never" style="height: 347px">
|
||||||
<template #header>
|
|
||||||
<a
|
|
||||||
:class="titleClass"
|
|
||||||
href="https://github.com/xiaoxian521"
|
|
||||||
target="_black"
|
|
||||||
>
|
|
||||||
<TypeIt
|
|
||||||
:className="'type-it1'"
|
|
||||||
:values="['GitHub信息']"
|
|
||||||
:cursor="false"
|
|
||||||
:speed="120"
|
|
||||||
/>
|
|
||||||
</a>
|
|
||||||
</template>
|
|
||||||
<el-skeleton animated :rows="7" :loading="loading">
|
|
||||||
<template #default>
|
|
||||||
<Github />
|
|
||||||
<vue-danmaku
|
|
||||||
ref="danmaku"
|
|
||||||
loop
|
|
||||||
useSlot
|
|
||||||
isSuspend
|
|
||||||
randomChannel
|
|
||||||
:debounce="1200"
|
|
||||||
:danmus="danmus"
|
|
||||||
style="width: 100%; height: 80px"
|
|
||||||
>
|
|
||||||
<template v-slot:dm="{ danmu }">
|
|
||||||
<p :style="{ color: randomColor({ type: 'hex' }) as string }">
|
|
||||||
{{ danmu }}
|
|
||||||
</p>
|
|
||||||
</template>
|
|
||||||
</vue-danmaku>
|
|
||||||
</template>
|
|
||||||
</el-skeleton>
|
|
||||||
</el-card>
|
|
||||||
</el-col>
|
|
||||||
|
|
||||||
<el-col
|
|
||||||
:xs="24"
|
|
||||||
:sm="24"
|
|
||||||
:md="12"
|
|
||||||
:lg="12"
|
|
||||||
:xl="12"
|
|
||||||
style="margin-bottom: 20px"
|
|
||||||
v-motion
|
|
||||||
:initial="{
|
|
||||||
opacity: 0,
|
|
||||||
y: 100
|
|
||||||
}"
|
|
||||||
:enter="{
|
|
||||||
opacity: 1,
|
|
||||||
y: 0,
|
|
||||||
transition: {
|
|
||||||
delay: 200
|
|
||||||
}
|
|
||||||
}"
|
|
||||||
>
|
|
||||||
<el-card style="height: 410px">
|
|
||||||
<template #header>
|
<template #header>
|
||||||
<a
|
<a
|
||||||
:class="titleClass"
|
:class="titleClass"
|
||||||
@ -225,9 +104,9 @@ onUnmounted(() => {
|
|||||||
:xs="24"
|
:xs="24"
|
||||||
:sm="24"
|
:sm="24"
|
||||||
:md="12"
|
:md="12"
|
||||||
:lg="8"
|
:lg="12"
|
||||||
:xl="8"
|
:xl="12"
|
||||||
style="margin-bottom: 20px"
|
class="mb-[18px]"
|
||||||
v-motion
|
v-motion
|
||||||
:initial="{
|
:initial="{
|
||||||
opacity: 0,
|
opacity: 0,
|
||||||
@ -237,20 +116,20 @@ onUnmounted(() => {
|
|||||||
opacity: 1,
|
opacity: 1,
|
||||||
y: 0,
|
y: 0,
|
||||||
transition: {
|
transition: {
|
||||||
delay: 400
|
delay: 200
|
||||||
}
|
}
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<el-card>
|
<el-card shadow="never" style="height: 347px">
|
||||||
<template #header>
|
<template #header>
|
||||||
<a
|
<a
|
||||||
:class="titleClass"
|
:class="titleClass"
|
||||||
href="https://github.com/pure-admin/vue-pure-admin"
|
href="https://github.com/xiaoxian521"
|
||||||
target="_black"
|
target="_black"
|
||||||
>
|
>
|
||||||
<TypeIt
|
<TypeIt
|
||||||
:className="'type-it3'"
|
:className="'type-it1'"
|
||||||
:values="['GitHub饼图信息']"
|
:values="['GitHub信息']"
|
||||||
:cursor="false"
|
:cursor="false"
|
||||||
:speed="120"
|
:speed="120"
|
||||||
/>
|
/>
|
||||||
@ -258,7 +137,7 @@ onUnmounted(() => {
|
|||||||
</template>
|
</template>
|
||||||
<el-skeleton animated :rows="7" :loading="loading">
|
<el-skeleton animated :rows="7" :loading="loading">
|
||||||
<template #default>
|
<template #default>
|
||||||
<Pie />
|
<Github />
|
||||||
</template>
|
</template>
|
||||||
</el-skeleton>
|
</el-skeleton>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -270,7 +149,7 @@ onUnmounted(() => {
|
|||||||
:md="12"
|
:md="12"
|
||||||
:lg="8"
|
:lg="8"
|
||||||
:xl="8"
|
:xl="8"
|
||||||
style="margin-bottom: 20px"
|
class="mb-[18px]"
|
||||||
v-motion
|
v-motion
|
||||||
:initial="{
|
:initial="{
|
||||||
opacity: 0,
|
opacity: 0,
|
||||||
@ -284,7 +163,7 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<a
|
<a
|
||||||
:class="titleClass"
|
:class="titleClass"
|
||||||
@ -310,10 +189,10 @@ onUnmounted(() => {
|
|||||||
<el-col
|
<el-col
|
||||||
:xs="24"
|
:xs="24"
|
||||||
:sm="24"
|
:sm="24"
|
||||||
:md="24"
|
:md="12"
|
||||||
:lg="8"
|
:lg="8"
|
||||||
:xl="8"
|
:xl="8"
|
||||||
style="margin-bottom: 20px"
|
class="mb-[18px]"
|
||||||
v-motion
|
v-motion
|
||||||
:initial="{
|
:initial="{
|
||||||
opacity: 0,
|
opacity: 0,
|
||||||
@ -327,7 +206,50 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<el-card>
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<a
|
||||||
|
:class="titleClass"
|
||||||
|
href="https://github.com/pure-admin/vue-pure-admin"
|
||||||
|
target="_black"
|
||||||
|
>
|
||||||
|
<TypeIt
|
||||||
|
:className="'type-it3'"
|
||||||
|
:values="['GitHub饼图信息']"
|
||||||
|
:cursor="false"
|
||||||
|
:speed="120"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
</template>
|
||||||
|
<el-skeleton animated :rows="7" :loading="loading">
|
||||||
|
<template #default>
|
||||||
|
<Pie />
|
||||||
|
</template>
|
||||||
|
</el-skeleton>
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
|
<el-col
|
||||||
|
:xs="24"
|
||||||
|
:sm="24"
|
||||||
|
:md="24"
|
||||||
|
:lg="8"
|
||||||
|
:xl="8"
|
||||||
|
class="mb-[18px]"
|
||||||
|
v-motion
|
||||||
|
:initial="{
|
||||||
|
opacity: 0,
|
||||||
|
y: 100
|
||||||
|
}"
|
||||||
|
:enter="{
|
||||||
|
opacity: 1,
|
||||||
|
y: 0,
|
||||||
|
transition: {
|
||||||
|
delay: 400
|
||||||
|
}
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<el-card shadow="never">
|
||||||
<template #header>
|
<template #header>
|
||||||
<a
|
<a
|
||||||
:class="titleClass"
|
:class="titleClass"
|
||||||
@ -359,36 +281,6 @@ onUnmounted(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.main-content {
|
.main-content {
|
||||||
margin: 0 !important;
|
margin: 20px 20px 0 20px !important;
|
||||||
}
|
|
||||||
|
|
||||||
.welcome {
|
|
||||||
height: 100%;
|
|
||||||
|
|
||||||
.top-content {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
height: 60px;
|
|
||||||
background: var(--el-bg-color);
|
|
||||||
|
|
||||||
.left-mark {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
img {
|
|
||||||
display: block;
|
|
||||||
width: 50px;
|
|
||||||
height: 50px;
|
|
||||||
border-radius: 50%;
|
|
||||||
margin-right: 10px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
span {
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
7
types/global.d.ts
vendored
7
types/global.d.ts
vendored
@ -192,11 +192,8 @@ declare global {
|
|||||||
title: string;
|
title: string;
|
||||||
/** 菜单图标 `可选` */
|
/** 菜单图标 `可选` */
|
||||||
icon?: string | FunctionalComponent | IconifyIcon;
|
icon?: string | FunctionalComponent | IconifyIcon;
|
||||||
/** 菜单名称右侧的额外图标,支持`fontawesome`、`iconfont`、`element-plus-icon` `可选` */
|
/** 菜单名称右侧的额外图标 */
|
||||||
extraIcon?: {
|
extraIcon?: string | FunctionalComponent | IconifyIcon;
|
||||||
svg?: boolean;
|
|
||||||
name?: string;
|
|
||||||
};
|
|
||||||
/** 是否在菜单中显示(默认`true`)`可选` */
|
/** 是否在菜单中显示(默认`true`)`可选` */
|
||||||
showLink?: boolean;
|
showLink?: boolean;
|
||||||
/** 是否显示父级菜单 `可选` */
|
/** 是否显示父级菜单 `可选` */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user