mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-06 00:18:51 +08:00
feat: 额外图标(比如这个是新加的页面,路由菜单右上角显示个新图标)
This commit is contained in:
parent
b1702ed7fe
commit
e080fe4128
Binary file not shown.
Before Width: | Height: | Size: 2.4 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.7 KiB |
@ -1,8 +1,8 @@
|
||||
@font-face {
|
||||
font-family: "iconfont"; /* Project id 2208059 */
|
||||
src: url("iconfont.woff2?t=1632557807050") format("woff2"),
|
||||
url("iconfont.woff?t=1632557807050") format("woff"),
|
||||
url("iconfont.ttf?t=1632557807050") format("truetype");
|
||||
src: url("iconfont.woff2?t=1634092870259") format("woff2"),
|
||||
url("iconfont.woff?t=1634092870259") format("woff"),
|
||||
url("iconfont.ttf?t=1634092870259") format("truetype");
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
@ -13,6 +13,18 @@
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.team-iconzuixinlianzai::before {
|
||||
content: "\e6da";
|
||||
}
|
||||
|
||||
.team-iconxinpin::before {
|
||||
content: "\e614";
|
||||
}
|
||||
|
||||
.team-iconxinpinrenqiwang::before {
|
||||
content: "\e615";
|
||||
}
|
||||
|
||||
.team-iconinternationality::before {
|
||||
content: "\e67a";
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -5,6 +5,27 @@
|
||||
"css_prefix_text": "team-icon",
|
||||
"description": "pure-admin",
|
||||
"glyphs": [
|
||||
{
|
||||
"icon_id": "2508809",
|
||||
"name": "最新连载",
|
||||
"font_class": "zuixinlianzai",
|
||||
"unicode": "e6da",
|
||||
"unicode_decimal": 59098
|
||||
},
|
||||
{
|
||||
"icon_id": "7795613",
|
||||
"name": "新品",
|
||||
"font_class": "xinpin",
|
||||
"unicode": "e614",
|
||||
"unicode_decimal": 58900
|
||||
},
|
||||
{
|
||||
"icon_id": "7795615",
|
||||
"name": "新品人气王",
|
||||
"font_class": "xinpinrenqiwang",
|
||||
"unicode": "e615",
|
||||
"unicode_decimal": 58901
|
||||
},
|
||||
{
|
||||
"icon_id": "18367956",
|
||||
"name": "中英文2 中文",
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
12
src/components/ReIcon/index.ts
Normal file
12
src/components/ReIcon/index.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { App } from "vue";
|
||||
import icon from "./src/Icon.vue";
|
||||
|
||||
export const Icon = Object.assign(icon, {
|
||||
install(app: App) {
|
||||
app.component(icon.name, icon);
|
||||
}
|
||||
});
|
||||
|
||||
export default {
|
||||
Icon
|
||||
};
|
97
src/components/ReIcon/src/Icon.vue
Normal file
97
src/components/ReIcon/src/Icon.vue
Normal file
@ -0,0 +1,97 @@
|
||||
<script lang="ts">
|
||||
export default {
|
||||
name: "Icon"
|
||||
};
|
||||
</script>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, computed } from "vue";
|
||||
|
||||
const props = defineProps({
|
||||
content: {
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
size: {
|
||||
type: Number,
|
||||
default: 18
|
||||
},
|
||||
width: {
|
||||
type: Number,
|
||||
default: 20
|
||||
},
|
||||
height: {
|
||||
type: Number,
|
||||
default: 20
|
||||
},
|
||||
color: {
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
svg: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: "click"): void;
|
||||
}>();
|
||||
|
||||
let text = ref("");
|
||||
|
||||
let className = computed(() => {
|
||||
if (props.content.indexOf("fa-") > -1) {
|
||||
return props.content.indexOf("fa ") === 0
|
||||
? props.content
|
||||
: ["fa", props.content];
|
||||
} else if (props.content.indexOf("el-icon-") > -1) {
|
||||
return props.content;
|
||||
} else if (props.content.indexOf("#") > -1) {
|
||||
// eslint-disable-next-line vue/no-side-effects-in-computed-properties
|
||||
text.value = props.content;
|
||||
return "iconfont";
|
||||
} else {
|
||||
// eslint-disable-next-line vue/no-side-effects-in-computed-properties
|
||||
text.value = props.content;
|
||||
return "";
|
||||
}
|
||||
});
|
||||
|
||||
let iconStyle = computed(() => {
|
||||
return (
|
||||
"font-size: " +
|
||||
props.size +
|
||||
"px; color: " +
|
||||
props.color +
|
||||
"; width: " +
|
||||
props.width +
|
||||
"px; height: " +
|
||||
props.height +
|
||||
"px; font-style: normal;"
|
||||
);
|
||||
});
|
||||
|
||||
const clickHandle = () => {
|
||||
emit("click");
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<i
|
||||
v-if="!props.svg"
|
||||
:class="className"
|
||||
:style="iconStyle"
|
||||
v-html="text"
|
||||
@click="clickHandle"
|
||||
></i>
|
||||
<svg
|
||||
class="icon-svg"
|
||||
v-if="props.svg"
|
||||
aria-hidden="true"
|
||||
:style="iconStyle"
|
||||
@click="clickHandle"
|
||||
>
|
||||
<use :xlink:href="`#${props.content}`" />
|
||||
</svg>
|
||||
</template>
|
@ -1,6 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
import path from "path";
|
||||
import { PropType, ref } from "vue";
|
||||
import Icon from "/@/components/ReIcon/src/Icon.vue";
|
||||
import { RouteRecordRaw } from "vue-router";
|
||||
|
||||
const props = defineProps({
|
||||
@ -34,13 +35,8 @@ function hasOneShowingChild(
|
||||
parent: RouteRecordRaw
|
||||
) {
|
||||
const showingChildren = children.filter((item: any) => {
|
||||
if (item.hidden) {
|
||||
// 不显示hidden属性为true的菜单
|
||||
return false;
|
||||
} else {
|
||||
onlyOneChild.value = item;
|
||||
return true;
|
||||
}
|
||||
onlyOneChild.value = item;
|
||||
return true;
|
||||
});
|
||||
|
||||
if (showingChildren.length === 1) {
|
||||
@ -78,6 +74,11 @@ function resolvePath(routePath) {
|
||||
/>
|
||||
<template #title>
|
||||
<span>{{ $t(onlyOneChild.meta.title) }}</span>
|
||||
<Icon
|
||||
v-if="onlyOneChild.meta.extraIcon"
|
||||
:svg="onlyOneChild.meta.extraIcon.svg ? true : false"
|
||||
:content="`${onlyOneChild.meta.extraIcon.name}`"
|
||||
/>
|
||||
</template>
|
||||
</el-menu-item>
|
||||
</template>
|
||||
@ -91,6 +92,11 @@ function resolvePath(routePath) {
|
||||
<template #title>
|
||||
<i :class="props.item.meta.icon"></i>
|
||||
<span>{{ $t(props.item.meta.title) }}</span>
|
||||
<Icon
|
||||
v-if="props.item.meta.extraIcon"
|
||||
:svg="props.item.meta.extraIcon.svg ? true : false"
|
||||
:content="`${props.item.meta.extraIcon.name}`"
|
||||
/>
|
||||
</template>
|
||||
<sidebar-item
|
||||
v-for="child in props.item.children"
|
||||
|
@ -59,6 +59,10 @@ const componentsRouter = {
|
||||
meta: {
|
||||
title: "message.hssplitPane",
|
||||
showLink: true,
|
||||
extraIcon: {
|
||||
svg: true,
|
||||
name: "team-iconxinpinrenqiwang"
|
||||
},
|
||||
savedPosition: true
|
||||
}
|
||||
},
|
||||
|
@ -21,6 +21,10 @@ const editorRouter = {
|
||||
title: "message.hseditor",
|
||||
showLink: true,
|
||||
keepAlive: true,
|
||||
extraIcon: {
|
||||
svg: true,
|
||||
name: "team-iconxinpin"
|
||||
},
|
||||
savedPosition: true
|
||||
}
|
||||
}
|
||||
|
@ -69,6 +69,10 @@ const nestedRouter = {
|
||||
title: "message.hsmenu1-2-2",
|
||||
showLink: true,
|
||||
keepAlive: true,
|
||||
extraIcon: {
|
||||
svg: true,
|
||||
name: "team-iconxinpinrenqiwang"
|
||||
},
|
||||
savedPosition: false
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user