mirror of
https://github.com/fantastic-admin/basic.git
synced 2026-10-07 13:28:38 +08:00
增加图片支持,整站图标改用 unocss icon 方式使用,方便在内网环境使用
This commit is contained in:
Executable → Regular
+3
@@ -1,5 +1,6 @@
|
||||
import path from 'node:path'
|
||||
import process from 'node:process'
|
||||
import { exec } from 'node:child_process'
|
||||
import fs from 'fs-extra'
|
||||
import inquirer from 'inquirer'
|
||||
import { lookupCollection, lookupCollections } from '@iconify/json'
|
||||
@@ -74,6 +75,8 @@ async function generateIcons() {
|
||||
path.resolve(process.cwd(), 'src/iconify/data.json'),
|
||||
collectionsMeta,
|
||||
)
|
||||
|
||||
exec('eslint src/iconify/data.json src/iconify/index.json --cache --fix')
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ const onSuccess: UploadProps['onSuccess'] = (res, file, fileList) => {
|
||||
drag
|
||||
>
|
||||
<div class="slot">
|
||||
<SvgIcon name="ep:upload-filled" class="el-icon--upload" />
|
||||
<SvgIcon name="i-ep:upload-filled" class="el-icon--upload" />
|
||||
<div class="el-upload__text">
|
||||
将文件拖到此处,或<em>点击上传</em>
|
||||
</div>
|
||||
|
||||
@@ -103,7 +103,7 @@ const onSuccess: UploadProps['onSuccess'] = (res) => {
|
||||
<ElImage v-if="url === ''" :src="url === '' ? placeholder : url" :style="`width:${width}px;height:${height}px;`" fit="fill">
|
||||
<template #error>
|
||||
<div class="image-slot" :style="`width:${width}px;height:${height}px;`">
|
||||
<SvgIcon name="ep:plus" class="icon" />
|
||||
<SvgIcon name="i-ep:plus" class="icon" />
|
||||
</div>
|
||||
</template>
|
||||
</ElImage>
|
||||
@@ -112,10 +112,10 @@ const onSuccess: UploadProps['onSuccess'] = (res) => {
|
||||
<div class="mask">
|
||||
<div class="actions">
|
||||
<span title="预览" @click.stop="preview">
|
||||
<SvgIcon name="ep:zoom-in" class="icon" />
|
||||
<SvgIcon name="i-ep:zoom-in" class="icon" />
|
||||
</span>
|
||||
<span title="移除" @click.stop="remove">
|
||||
<SvgIcon name="ep:delete" class="icon" />
|
||||
<SvgIcon name="i-ep:delete" class="icon" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -107,16 +107,16 @@ const onSuccess: UploadProps['onSuccess'] = (res) => {
|
||||
<div class="mask">
|
||||
<div class="actions">
|
||||
<span title="预览" @click="preview(index)">
|
||||
<SvgIcon name="ep:zoom-in" class="icon" />
|
||||
<SvgIcon name="i-ep:zoom-in" class="icon" />
|
||||
</span>
|
||||
<span title="移除" @click="remove(index)">
|
||||
<SvgIcon name="ep:delete" class="icon" />
|
||||
<SvgIcon name="i-ep:delete" class="icon" />
|
||||
</span>
|
||||
<span v-show="url.length > 1" title="左移" :class="{ disabled: index === 0 }" @click="move(index, 'left')">
|
||||
<SvgIcon name="ep:back" class="icon" />
|
||||
<SvgIcon name="i-ep:back" class="icon" />
|
||||
</span>
|
||||
<span v-show="url.length > 1" title="右移" :class="{ disabled: index === url.length - 1 }" @click="move(index, 'right')">
|
||||
<SvgIcon name="ep:right" class="icon" />
|
||||
<SvgIcon name="i-ep:right" class="icon" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -135,7 +135,7 @@ const onSuccess: UploadProps['onSuccess'] = (res) => {
|
||||
class="images-upload"
|
||||
>
|
||||
<div class="image-slot" :style="`width:${width}px;height:${height}px;`">
|
||||
<SvgIcon name="ep:plus" class="icon" />
|
||||
<SvgIcon name="i-ep:plus" class="icon" />
|
||||
</div>
|
||||
<div v-show="uploadData.progress.percent" class="progress" :style="`width:${width}px;height:${height}px;`">
|
||||
<ElImage :src="uploadData.progress.preview" :style="`width:${width}px;height:${height}px;`" fit="fill" />
|
||||
|
||||
@@ -41,7 +41,7 @@ function unCollaspe() {
|
||||
<slot />
|
||||
</div>
|
||||
<div v-if="isCollaspe" class="collaspe absolute bottom-0 w-full cursor-pointer from-transparent to-[var(--g-container-bg)] bg-gradient-to-b pb-2 pt-10 text-center" @click="unCollaspe">
|
||||
<SvgIcon name="ep:arrow-down" class="text-xl op-30 transition-opacity hover:op-100" />
|
||||
<SvgIcon name="i-ep:arrow-down" class="text-xl op-30 transition-opacity hover:op-100" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -40,7 +40,7 @@ function toggle() {
|
||||
<slot :fold="fold" :toggle="toggle" />
|
||||
<div v-if="showToggle" class="absolute bottom-0 left-0 w-full translate-y-1/2 text-center">
|
||||
<button class="h-5 inline-flex cursor-pointer select-none items-center border-size-0 rounded bg-[var(--g-bg)] px-2 text-xs font-medium outline-none" @click="toggle">
|
||||
<SvgIcon :name="fold ? 'ep:caret-bottom' : 'ep:caret-top' " />
|
||||
<SvgIcon :name="fold ? 'i-ep:caret-bottom' : 'i-ep:caret-top' " />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<script setup lang="ts">
|
||||
import { Icon } from '@iconify/vue'
|
||||
import { isOfflineUse } from '@/iconify/index.json'
|
||||
|
||||
defineOptions({
|
||||
name: 'SvgIcon',
|
||||
@@ -8,7 +7,6 @@ defineOptions({
|
||||
|
||||
const props = defineProps<{
|
||||
name: string
|
||||
async?: boolean
|
||||
flip?: 'horizontal' | 'vertical' | 'both'
|
||||
rotate?: number
|
||||
color?: string
|
||||
@@ -16,28 +14,18 @@ const props = defineProps<{
|
||||
}>()
|
||||
|
||||
const outputType = computed(() => {
|
||||
if (props.name.indexOf('i-') === 0) {
|
||||
return (props.async || isOfflineUse) ? 'svg' : 'css'
|
||||
if (/^https?:\/\//.test(props.name)) {
|
||||
return 'img'
|
||||
}
|
||||
else if (/i-[^:]+:[^:]+/.test(props.name)) {
|
||||
return 'unocss'
|
||||
}
|
||||
else if (props.name.includes(':')) {
|
||||
return 'iconify'
|
||||
}
|
||||
else {
|
||||
return 'svg'
|
||||
}
|
||||
else {
|
||||
return 'custom'
|
||||
}
|
||||
})
|
||||
|
||||
const outputName = computed(() => {
|
||||
if (props.name.indexOf('i-') === 0) {
|
||||
let conversionName = props.name
|
||||
if (props.async || isOfflineUse) {
|
||||
conversionName = conversionName.replace('i-', '')
|
||||
}
|
||||
return conversionName
|
||||
}
|
||||
else {
|
||||
return props.name
|
||||
}
|
||||
})
|
||||
|
||||
const style = computed(() => {
|
||||
@@ -68,11 +56,11 @@ const style = computed(() => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<i class="relative h-[1em] w-[1em] flex-inline items-center justify-center fill-current leading-[1em]" :style="style">
|
||||
<i v-if="outputType === 'css'" :class="outputName" />
|
||||
<Icon v-else-if="outputType === 'svg'" :icon="outputName" />
|
||||
<svg v-else h-1em w-1em aria-hidden="true">
|
||||
<use :xlink:href="`#icon-${outputName}`" />
|
||||
<i class="relative h-[1em] w-[1em] flex-inline items-center justify-center fill-current leading-[1em]" :class="{ [name]: outputType === 'unocss' }" :style="style">
|
||||
<Icon v-if="outputType === 'iconify'" :icon="name" />
|
||||
<svg v-else-if="outputType === 'svg'" class="h-[1em] w-[1em]" aria-hidden="true">
|
||||
<use :xlink:href="`#icon-${name}`" />
|
||||
</svg>
|
||||
<img v-else-if="outputType === 'img'" :src="name" class="h-[1em] w-[1em]">
|
||||
</i>
|
||||
</template>
|
||||
|
||||
@@ -33,6 +33,6 @@ const isUp = computed(() => {
|
||||
<span v-if="prefix" class="prefix">{{ prefix }}</span>
|
||||
<span class="text">{{ value }}</span>
|
||||
<span v-if="suffix" class="suffix">{{ suffix }}</span>
|
||||
<SvgIcon name="ep:caret-top" :rotate="isUp ? 0 : 180" class="ml-1 transition" />
|
||||
<SvgIcon name="i-ep:caret-top" :rotate="isUp ? 0 : 180" class="ml-1 transition" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
Executable → Regular
+1
-1
File diff suppressed because one or more lines are too long
@@ -126,7 +126,7 @@ function handleCopy() {
|
||||
<div class="label">
|
||||
主导航切换跳转
|
||||
<HTooltip text="开启该功能后,切换主导航时,页面自动跳转至该主导航下,次导航里第一个导航">
|
||||
<SvgIcon name="ri:question-line" />
|
||||
<SvgIcon name="i-ri:question-line" />
|
||||
</HTooltip>
|
||||
</div>
|
||||
<HToggle v-model="settingsStore.settings.menu.switchMainMenuAndPageJump" :disabled="['single'].includes(settingsStore.settings.menu.menuMode)" />
|
||||
@@ -135,7 +135,7 @@ function handleCopy() {
|
||||
<div class="label">
|
||||
次导航保持展开一个
|
||||
<HTooltip text="开启该功能后,次导航只保持单个菜单的展开">
|
||||
<SvgIcon name="ri:question-line" />
|
||||
<SvgIcon name="i-ri:question-line" />
|
||||
</HTooltip>
|
||||
</div>
|
||||
<HToggle v-model="settingsStore.settings.menu.subMenuUniqueOpened" />
|
||||
@@ -186,7 +186,7 @@ function handleCopy() {
|
||||
<div class="label">
|
||||
导航搜索
|
||||
<HTooltip text="对导航进行快捷搜索">
|
||||
<SvgIcon name="ri:question-line" />
|
||||
<SvgIcon name="i-ri:question-line" />
|
||||
</HTooltip>
|
||||
</div>
|
||||
<HToggle v-model="settingsStore.settings.toolbar.navSearch" />
|
||||
@@ -201,7 +201,7 @@ function handleCopy() {
|
||||
<div class="label">
|
||||
页面刷新
|
||||
<HTooltip text="使用框架内提供的刷新功能进行页面刷新">
|
||||
<SvgIcon name="ri:question-line" />
|
||||
<SvgIcon name="i-ri:question-line" />
|
||||
</HTooltip>
|
||||
</div>
|
||||
<HToggle v-model="settingsStore.settings.toolbar.pageReload" />
|
||||
@@ -210,7 +210,7 @@ function handleCopy() {
|
||||
<div class="label">
|
||||
颜色主题
|
||||
<HTooltip text="开启后可在明亮/暗黑模式中切换">
|
||||
<SvgIcon name="ri:question-line" />
|
||||
<SvgIcon name="i-ri:question-line" />
|
||||
</HTooltip>
|
||||
</div>
|
||||
<HToggle v-model="settingsStore.settings.toolbar.colorScheme" />
|
||||
@@ -273,7 +273,7 @@ function handleCopy() {
|
||||
<div class="label">
|
||||
是否启用
|
||||
<HTooltip text="该功能开启时,登录成功默认进入主页,反之则默认进入导航栏里第一个导航页面">
|
||||
<SvgIcon name="ri:question-line" />
|
||||
<SvgIcon name="i-ri:question-line" />
|
||||
</HTooltip>
|
||||
</div>
|
||||
<HToggle v-model="settingsStore.settings.home.enable" />
|
||||
@@ -282,7 +282,7 @@ function handleCopy() {
|
||||
<div class="label">
|
||||
主页名称
|
||||
<HTooltip text="开启国际化时,该设置无效">
|
||||
<SvgIcon name="ri:question-line" />
|
||||
<SvgIcon name="i-ri:question-line" />
|
||||
</HTooltip>
|
||||
</div>
|
||||
<HInput v-model="settingsStore.settings.home.title" />
|
||||
@@ -300,7 +300,7 @@ function handleCopy() {
|
||||
<div class="label">
|
||||
载入进度条
|
||||
<HTooltip text="该功能开启时,跳转路由会看到页面顶部有进度条">
|
||||
<SvgIcon name="ri:question-line" />
|
||||
<SvgIcon name="i-ri:question-line" />
|
||||
</HTooltip>
|
||||
</div>
|
||||
<HToggle v-model="settingsStore.settings.app.enableProgress" />
|
||||
@@ -309,14 +309,14 @@ function handleCopy() {
|
||||
<div class="label">
|
||||
动态标题
|
||||
<HTooltip text="该功能开启时,页面标题会显示当前路由标题,格式为“页面标题 - 网站名称”;关闭时则显示网站名称,网站名称在项目根目录下 .env.* 文件里配置">
|
||||
<SvgIcon name="ri:question-line" />
|
||||
<SvgIcon name="i-ri:question-line" />
|
||||
</HTooltip>
|
||||
</div>
|
||||
<HToggle v-model="settingsStore.settings.app.enableDynamicTitle" />
|
||||
</div>
|
||||
<template v-if="isSupported" #footer>
|
||||
<HButton block @click="handleCopy">
|
||||
<SvgIcon name="ep:document-copy" />
|
||||
<SvgIcon name="i-ep:document-copy" />
|
||||
复制配置
|
||||
</HButton>
|
||||
</template>
|
||||
|
||||
@@ -38,7 +38,7 @@ function handleClick() {
|
||||
<Teleport to="body">
|
||||
<Transition v-bind="transitionClass">
|
||||
<div v-if="scrollTop && scrollTop >= 200" class="fixed bottom-4 right-4 z-1000 h-12 w-12 flex cursor-pointer items-center justify-center rounded-full bg-white shadow-lg ring-1 ring-stone-3 ring-inset dark:bg-dark hover:bg-stone-1 dark:ring-stone-7 dark:hover:bg-dark/50" @click="handleClick">
|
||||
<SvgIcon name="icon-park-outline:to-top-one" :size="24" />
|
||||
<SvgIcon name="i-icon-park-outline:to-top-one" :size="24" />
|
||||
</div>
|
||||
</Transition>
|
||||
</Teleport>
|
||||
|
||||
@@ -42,7 +42,7 @@ onUnmounted(() => {
|
||||
<template>
|
||||
<div class="buy-it" :class="{ actived: isActived }">
|
||||
<div class="item" @click="switchUI">
|
||||
<SvgIcon name="icon-park-twotone:components" />
|
||||
<SvgIcon name="i-icon-park-twotone:components" />
|
||||
<span class="title">切换<br>组件库</span>
|
||||
<HDialog v-model="UIdialog" title="切换组件库" overlay>
|
||||
<div class="rounded-2 bg-green/20 px-4 py-2 text-sm/6 c-green-6">
|
||||
@@ -76,19 +76,19 @@ onUnmounted(() => {
|
||||
</HDialog>
|
||||
</div>
|
||||
<div class="item" @click="open(`https://fantastic-admin.gitee.io/buy.html`)">
|
||||
<SvgIcon name="ri:money-cny-box-line" />
|
||||
<SvgIcon name="i-ri:money-cny-box-line" />
|
||||
<span class="title">购买<br>专业版</span>
|
||||
</div>
|
||||
<div class="item" @click="open('https://gitee.com/fantastic-admin/basic')">
|
||||
<SvgIcon name="ri:code-s-slash-line" />
|
||||
<SvgIcon name="i-ri:code-s-slash-line" />
|
||||
<span class="title">下载<br>基础版</span>
|
||||
</div>
|
||||
<div class="item" @click="open(`https://fantastic-admin.gitee.io`)">
|
||||
<SvgIcon name="ri:book-read-line" />
|
||||
<SvgIcon name="i-ri:book-read-line" />
|
||||
<span class="title">开发<br>文档</span>
|
||||
</div>
|
||||
<div class="item" @click="open(`https://fantastic-admin.gitee.io/support.html`)">
|
||||
<SvgIcon name="ri:message-2-line" />
|
||||
<SvgIcon name="i-ri:message-2-line" />
|
||||
<span class="title">技术<br>支持</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -11,7 +11,7 @@ const settingsStore = useSettingsStore()
|
||||
<template>
|
||||
<footer v-if="settingsStore.settings.copyright.enable" class="copyright">
|
||||
<span>Copyright</span>
|
||||
<SvgIcon name="ri:copyright-line" :size="18" />
|
||||
<SvgIcon name="i-ri:copyright-line" :size="18" />
|
||||
<span v-if="settingsStore.settings.copyright.dates">{{ settingsStore.settings.copyright.dates }}</span>
|
||||
<template v-if="settingsStore.settings.copyright.company">
|
||||
<a v-if="settingsStore.settings.copyright.website" :href="settingsStore.settings.copyright.website" target="_blank" rel="noopener">{{ settingsStore.settings.copyright.company }}</a>
|
||||
|
||||
@@ -285,7 +285,7 @@ function pageJump(path: listTypes['path'], link: listTypes['link']) {
|
||||
<DialogPanel class="relative h-full max-h-4/5 w-full flex flex-col text-left sm:max-w-2xl">
|
||||
<div class="flex flex-col overflow-y-auto rounded-xl bg-white shadow-xl dark:bg-stone-8">
|
||||
<div class="flex items-center px-4 py-3" border-b="~ solid stone-2 dark:stone-7">
|
||||
<SvgIcon name="ep:search" :size="18" class="text-stone-5" />
|
||||
<SvgIcon name="i-ep:search" :size="18" class="text-stone-5" />
|
||||
<input ref="searchInputRef" v-model="searchInput" placeholder="搜索页面,支持标题、URL模糊查询" class="w-full border-0 rounded-md bg-transparent px-3 text-base text-dark dark:text-white focus:outline-none placeholder-stone-4 dark:placeholder-stone-5" @keydown.esc="eventBus.emit('global-search-toggle')" @keydown.up.prevent="keyUp" @keydown.down.prevent="keyDown" @keydown.enter.prevent="keyEnter">
|
||||
</div>
|
||||
<DialogDescription class="relative m-0 of-y-hidden">
|
||||
@@ -305,7 +305,7 @@ function pageJump(path: listTypes['path'], link: listTypes['link']) {
|
||||
</template>
|
||||
<template v-else>
|
||||
<div flex="center col" py-6 text-stone-5>
|
||||
<SvgIcon name="tabler:mood-empty" :size="40" />
|
||||
<SvgIcon name="i-tabler:mood-empty" :size="40" />
|
||||
<p m-2 text-base>
|
||||
没有找到你想要的
|
||||
</p>
|
||||
@@ -317,16 +317,16 @@ function pageJump(path: listTypes['path'], link: listTypes['link']) {
|
||||
<div class="flex gap-8">
|
||||
<div class="inline-flex items-center gap-1 text-xs">
|
||||
<HKbd>
|
||||
<SvgIcon name="ion:md-return-left" :size="14" />
|
||||
<SvgIcon name="i-ion:md-return-left" :size="14" />
|
||||
</HKbd>
|
||||
<span>访问</span>
|
||||
</div>
|
||||
<div class="inline-flex items-center gap-1 text-xs">
|
||||
<HKbd>
|
||||
<SvgIcon name="ant-design:caret-up-filled" :size="14" />
|
||||
<SvgIcon name="i-ant-design:caret-up-filled" :size="14" />
|
||||
</HKbd>
|
||||
<HKbd>
|
||||
<SvgIcon name="ant-design:caret-down-filled" :size="14" />
|
||||
<SvgIcon name="i-ant-design:caret-down-filled" :size="14" />
|
||||
</HKbd>
|
||||
<span>切换</span>
|
||||
</div>
|
||||
|
||||
@@ -38,6 +38,6 @@ function toggleColorScheme(event: MouseEvent) {
|
||||
|
||||
<template>
|
||||
<span class="flex-center cursor-pointer px-2 py-1" @click="toggleColorScheme">
|
||||
<SvgIcon :name="settingsStore.settings.app.colorScheme === 'light' ? 'ri:sun-line' : 'ri:moon-line'" />
|
||||
<SvgIcon :name="settingsStore.settings.app.colorScheme === 'light' ? 'i-ri:sun-line' : 'i-ri:moon-line'" />
|
||||
</span>
|
||||
</template>
|
||||
|
||||
@@ -13,6 +13,6 @@ const { isFullscreen, toggle } = useFullscreen()
|
||||
|
||||
<template>
|
||||
<span v-if="settingsStore.mode === 'pc'" class="flex-center cursor-pointer px-2 py-1" @click="toggle">
|
||||
<SvgIcon :name="isFullscreen ? 'ri:fullscreen-exit-line' : 'ri:fullscreen-line'" />
|
||||
<SvgIcon :name="isFullscreen ? 'i-ri:fullscreen-exit-line' : 'i-ri:fullscreen-line'" />
|
||||
</span>
|
||||
</template>
|
||||
|
||||
@@ -11,9 +11,9 @@ const settingsStore = useSettingsStore()
|
||||
|
||||
<template>
|
||||
<span class="flex-center cursor-pointer px-2 py-1" @click="eventBus.emit('global-search-toggle')">
|
||||
<SvgIcon v-if="settingsStore.mode === 'mobile'" name="ri:search-line" />
|
||||
<SvgIcon v-if="settingsStore.mode === 'mobile'" name="i-ri:search-line" />
|
||||
<span v-else class="group inline-flex cursor-pointer items-center gap-1 whitespace-nowrap rounded-2 bg-stone-1 px-2 py-1.5 text-dark ring-stone-3 ring-inset transition dark:bg-stone-9 dark:text-white hover:ring-1 dark:ring-stone-7">
|
||||
<SvgIcon name="ri:search-line" />
|
||||
<SvgIcon name="i-ri:search-line" />
|
||||
<span class="text-sm text-stone-5 transition group-hover:text-dark dark:group-hover:text-white">搜索</span>
|
||||
<HKbd v-if="settingsStore.settings.navSearch.enableHotkeys" class="ml-2">{{ settingsStore.os === 'mac' ? '⌥' : 'Alt' }} S</HKbd>
|
||||
</span>
|
||||
|
||||
@@ -8,6 +8,6 @@ const mainPage = useMainPage()
|
||||
|
||||
<template>
|
||||
<span class="flex-center cursor-pointer px-2 py-1" @click="mainPage.reload()">
|
||||
<SvgIcon name="iconoir:refresh-double" />
|
||||
<SvgIcon name="i-iconoir:refresh-double" />
|
||||
</span>
|
||||
</template>
|
||||
|
||||
@@ -46,9 +46,9 @@ watch(() => userStore.avatar, () => {
|
||||
>
|
||||
<div class="flex-center gap-1">
|
||||
<img v-if="userStore.avatar && !avatarError" :src="userStore.avatar" :onerror="() => (avatarError = true)" class="h-[24px] w-[24px] rounded-full">
|
||||
<SvgIcon v-else name="carbon:user-avatar-filled-alt" :size="24" class="text-gray-400" />
|
||||
<SvgIcon v-else name="i-carbon:user-avatar-filled-alt" :size="24" class="text-gray-400" />
|
||||
{{ userStore.account }}
|
||||
<SvgIcon name="ep:caret-bottom" />
|
||||
<SvgIcon name="i-ep:caret-bottom" />
|
||||
</div>
|
||||
</HDropdownMenu>
|
||||
</div>
|
||||
|
||||
@@ -23,7 +23,7 @@ function open() {
|
||||
<Transition name="slide-right" mode="out-in" appear>
|
||||
<PageMain :key="route.meta.link" class="flex flex-1 flex-col justify-center">
|
||||
<div class="flex flex-col items-center">
|
||||
<SvgIcon name="icon-park-twotone:planet" :size="120" class="text-ui-primary/80" />
|
||||
<SvgIcon name="i-icon-park-twotone:planet" :size="120" class="text-ui-primary/80" />
|
||||
<div class="my-2 text-xl text-dark dark:text-white">
|
||||
是否访问此链接
|
||||
</div>
|
||||
@@ -35,7 +35,7 @@ function open() {
|
||||
</HTooltip>
|
||||
</div>
|
||||
<HButton class="my-4" @click="open">
|
||||
<SvgIcon name="ri:external-link-fill" />
|
||||
<SvgIcon name="i-ri:external-link-fill" />
|
||||
立即访问
|
||||
</HButton>
|
||||
</div>
|
||||
|
||||
@@ -102,7 +102,7 @@ const enableAppSetting = import.meta.env.VITE_APP_SETTING === 'true'
|
||||
<HotkeysIntro />
|
||||
<template v-if="enableAppSetting">
|
||||
<div class="app-setting" @click="eventBus.emit('global-app-setting-toggle')">
|
||||
<SvgIcon name="uiw:setting-o" class="icon" />
|
||||
<SvgIcon name="i-uiw:setting-o" class="icon" />
|
||||
</div>
|
||||
<AppSetting />
|
||||
</template>
|
||||
|
||||
@@ -65,7 +65,7 @@ function close() {
|
||||
<DialogTitle m-0 text-lg text-dark dark:text-white>
|
||||
{{ title }}
|
||||
</DialogTitle>
|
||||
<SvgIcon name="carbon:close" cursor-pointer @click="close" />
|
||||
<SvgIcon name="i-carbon:close" cursor-pointer @click="close" />
|
||||
</div>
|
||||
<DialogDescription m-0 overflow-y-auto p-4>
|
||||
<slot />
|
||||
|
||||
@@ -33,7 +33,7 @@ const selected = computed({
|
||||
{{ selected.label }}
|
||||
</span>
|
||||
<span class="pointer-events-none absolute end-0 inset-y-0 flex items-center pe-2.5">
|
||||
<SvgIcon name="carbon:chevron-down" class="h-5 w-5 flex-shrink-0 text-stone-5" />
|
||||
<SvgIcon name="i-carbon:chevron-down" class="h-5 w-5 flex-shrink-0 text-stone-5" />
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -66,7 +66,7 @@ function close() {
|
||||
<DialogTitle m-0 text-lg text-dark dark:text-white>
|
||||
{{ title }}
|
||||
</DialogTitle>
|
||||
<SvgIcon name="carbon:close" cursor-pointer @click="close" />
|
||||
<SvgIcon name="i-carbon:close" cursor-pointer @click="close" />
|
||||
</div>
|
||||
<DialogDescription m-0 flex-1 of-y-hidden>
|
||||
<OverlayScrollbarsComponent :options="{ scrollbars: { autoHide: 'leave', autoHideDelay: 300 } }" defer class="h-full p-4">
|
||||
|
||||
@@ -11,7 +11,7 @@ const routes: RouteRecordRaw = {
|
||||
name: 'breadcrumbExample',
|
||||
meta: {
|
||||
title: '面包屑导航',
|
||||
icon: 'ic:twotone-double-arrow',
|
||||
icon: 'i-ic:twotone-double-arrow',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
|
||||
@@ -10,7 +10,7 @@ const routes: RouteRecordRaw = {
|
||||
name: 'componentExample',
|
||||
meta: {
|
||||
title: '组件',
|
||||
icon: 'bx:bxs-component',
|
||||
icon: 'i-bx:bxs-component',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
@@ -19,7 +19,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/component_basic_example/index.vue'),
|
||||
meta: {
|
||||
title: '基础组件',
|
||||
icon: 'ep:element-plus',
|
||||
icon: 'i-ep:element-plus',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -11,7 +11,7 @@ const routes: RouteRecordRaw[] = [
|
||||
component: Layout,
|
||||
meta: {
|
||||
title: '官方周边',
|
||||
icon: 'ion:apps',
|
||||
icon: 'i-ion:apps',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
@@ -20,6 +20,7 @@ const routes: RouteRecordRaw[] = [
|
||||
name: 'officialFantasticStartkit',
|
||||
meta: {
|
||||
title: 'Fantastic-startkit 项目启动套件',
|
||||
icon: 'https://cn.vuejs.org/logo.svg',
|
||||
link: 'https://hooray.gitee.io/fantastic-startkit/',
|
||||
},
|
||||
},
|
||||
@@ -29,62 +30,68 @@ const routes: RouteRecordRaw[] = [
|
||||
name: 'officialOneStepAdmin',
|
||||
meta: {
|
||||
title: 'One-step-admin 干啥都快人一步的中后台框架',
|
||||
icon: 'https://one-step-admin.gitee.io/logo.png',
|
||||
link: 'https://one-step-admin.gitee.io',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: '/cooperation',
|
||||
redirect: '/cooperation/vform',
|
||||
path: '/recommand',
|
||||
redirect: '/recommand/vform',
|
||||
component: Layout,
|
||||
meta: {
|
||||
title: '战略合作',
|
||||
icon: 'ic:outline-handshake',
|
||||
title: '友情推荐',
|
||||
icon: 'i-ic:outline-handshake',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: 'vform',
|
||||
redirect: '',
|
||||
name: 'cooperationVform',
|
||||
name: 'recommandVform',
|
||||
meta: {
|
||||
title: 'VForm 低代码表单',
|
||||
icon: 'https://www.vform666.com/mini-logo.png',
|
||||
link: 'https://www.vform666.com',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'form-create',
|
||||
redirect: '',
|
||||
name: 'cooperationFormcreate',
|
||||
name: 'recommandFormcreate',
|
||||
meta: {
|
||||
title: 'Form-create 动态表单生成器',
|
||||
icon: 'https://form-create.com/logo.png',
|
||||
link: 'https://form-create.com',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'quickadmin',
|
||||
redirect: '',
|
||||
name: 'cooperationQuickadmin',
|
||||
name: 'recommandQuickadmin',
|
||||
meta: {
|
||||
title: 'QuickAdmin 快速开发管理框架',
|
||||
link: 'https://gitee.com/sciqtw/quickadmin',
|
||||
icon: 'https://doc.quickadmin.cn/logo.png',
|
||||
link: 'https://doc.quickadmin.cn',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'vexip',
|
||||
redirect: '',
|
||||
name: 'cooperationVexip',
|
||||
name: 'recommandVexip',
|
||||
meta: {
|
||||
title: 'Vexip UI 组件库',
|
||||
icon: 'https://www.vexipui.com/vexip-ui.png',
|
||||
link: 'https://www.vexipui.com/zh-CN',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'idux',
|
||||
redirect: '',
|
||||
name: 'cooperationIDux',
|
||||
name: 'recommandIDux',
|
||||
meta: {
|
||||
title: 'iDux 组件库',
|
||||
icon: 'https://idux.site/icons/logo.svg',
|
||||
link: 'https://idux.site',
|
||||
},
|
||||
},
|
||||
|
||||
@@ -11,7 +11,7 @@ const routes: RouteRecordRaw = {
|
||||
name: 'externalLinkExample',
|
||||
meta: {
|
||||
title: '外链',
|
||||
icon: 'ri:external-link-fill',
|
||||
icon: 'i-ri:external-link-fill',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
|
||||
@@ -11,7 +11,7 @@ const routes: RouteRecordRaw = {
|
||||
name: 'featureExample',
|
||||
meta: {
|
||||
title: '功能',
|
||||
icon: 'ic:twotone-auto-awesome',
|
||||
icon: 'i-ic:twotone-auto-awesome',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
@@ -20,7 +20,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/feature_example/vueuse.vue'),
|
||||
meta: {
|
||||
title: 'VueUse',
|
||||
icon: 'logos:vueuse',
|
||||
icon: 'i-logos:vueuse',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -29,7 +29,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/feature_example/rules.vue'),
|
||||
meta: {
|
||||
title: '常用正则',
|
||||
icon: 'mdi:regex',
|
||||
icon: 'i-mdi:regex',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -39,7 +39,7 @@ const routes: RouteRecordRaw = {
|
||||
meta: {
|
||||
title: '表格高度自适应',
|
||||
i18n: 'route.feature.tableautoheight',
|
||||
icon: 'tabler:arrow-autofit-height',
|
||||
icon: 'i-tabler:arrow-autofit-height',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -48,7 +48,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/feature_example/reload.vue'),
|
||||
meta: {
|
||||
title: '主页面刷新',
|
||||
icon: 'iconoir:refresh-double',
|
||||
icon: 'i-iconoir:refresh-double',
|
||||
cache: true,
|
||||
},
|
||||
},
|
||||
@@ -58,7 +58,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/feature_example/menuswitch.vue'),
|
||||
meta: {
|
||||
title: '主导航切换',
|
||||
icon: 'charm:menu-hamburger',
|
||||
icon: 'i-charm:menu-hamburger',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -67,7 +67,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/feature_example/leavetips.vue'),
|
||||
meta: {
|
||||
title: '页面离开提醒',
|
||||
icon: 'pepicons:leave',
|
||||
icon: 'i-pepicons:leave',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -76,7 +76,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/feature_example/scroll.vue'),
|
||||
meta: {
|
||||
title: '记录滚动位置',
|
||||
icon: 'carbon:auto-scroll',
|
||||
icon: 'i-carbon:auto-scroll',
|
||||
cache: true,
|
||||
},
|
||||
},
|
||||
|
||||
@@ -11,7 +11,7 @@ const routes: RouteRecordRaw = {
|
||||
name: 'iconExample',
|
||||
meta: {
|
||||
title: '扩展图标',
|
||||
icon: 'ri:remixicon-line',
|
||||
icon: 'i-ri:remixicon-line',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
|
||||
@@ -11,7 +11,7 @@ const routes: RouteRecordRaw = {
|
||||
name: 'jsxExample',
|
||||
meta: {
|
||||
title: 'JSX',
|
||||
icon: 'file-icons:jsx',
|
||||
icon: 'i-file-icons:jsx',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
|
||||
@@ -11,7 +11,7 @@ const routes: RouteRecordRaw = {
|
||||
name: 'keepAliveExample',
|
||||
meta: {
|
||||
title: '页面缓存',
|
||||
icon: 'cil:window-restore',
|
||||
icon: 'i-cil:window-restore',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
|
||||
@@ -11,7 +11,7 @@ const routes: RouteRecordRaw = {
|
||||
name: 'mockExample',
|
||||
meta: {
|
||||
title: 'Mock',
|
||||
icon: 'ri:database-2-line',
|
||||
icon: 'i-ri:database-2-line',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
|
||||
@@ -11,7 +11,7 @@ const routes: RouteRecordRaw = {
|
||||
name: 'multilevelMenuExample',
|
||||
meta: {
|
||||
title: '多级导航',
|
||||
icon: 'heroicons-solid:menu-alt-3',
|
||||
icon: 'i-heroicons-solid:menu-alt-3',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
|
||||
@@ -11,7 +11,7 @@ const routes: RouteRecordRaw = {
|
||||
name: 'permissionExample',
|
||||
meta: {
|
||||
title: '权限验证',
|
||||
icon: 'ri:shield-keyhole-line',
|
||||
icon: 'i-ri:shield-keyhole-line',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
|
||||
@@ -11,7 +11,7 @@ const routes: RouteRecordRaw = {
|
||||
name: 'pluginExample',
|
||||
meta: {
|
||||
title: '插件',
|
||||
icon: 'clarity:plugin-outline-alerted',
|
||||
icon: 'i-clarity:plugin-outline-alerted',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
@@ -20,7 +20,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/plugin_example/qrcode.vue'),
|
||||
meta: {
|
||||
title: '二维码',
|
||||
icon: 'material-symbols:qr-code',
|
||||
icon: 'i-material-symbols:qr-code',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -29,7 +29,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/plugin_example/print.vue'),
|
||||
meta: {
|
||||
title: '打印',
|
||||
icon: 'ri:printer-line',
|
||||
icon: 'i-ri:printer-line',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -38,7 +38,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/plugin_example/esign.vue'),
|
||||
meta: {
|
||||
title: '电子签名',
|
||||
icon: 'mdi:draw',
|
||||
icon: 'i-mdi:draw',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -47,7 +47,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/plugin_example/animation.vue'),
|
||||
meta: {
|
||||
title: '过渡动画',
|
||||
icon: 'clarity:animation-line',
|
||||
icon: 'i-clarity:animation-line',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -56,7 +56,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/plugin_example/swiper.vue'),
|
||||
meta: {
|
||||
title: '轮播动画',
|
||||
icon: 'carbon:carousel-horizontal',
|
||||
icon: 'i-carbon:carousel-horizontal',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -65,7 +65,7 @@ const routes: RouteRecordRaw = {
|
||||
name: 'pluginExampleChart',
|
||||
meta: {
|
||||
title: '图表',
|
||||
icon: 'ri:bar-chart-2-line',
|
||||
icon: 'i-ri:bar-chart-2-line',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
@@ -92,7 +92,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/plugin_example/tinymce.vue'),
|
||||
meta: {
|
||||
title: 'TinyMCE 编辑器',
|
||||
icon: 'file-icons:tinymce',
|
||||
icon: 'i-file-icons:tinymce',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -101,7 +101,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/plugin_example/markdown.vue'),
|
||||
meta: {
|
||||
title: 'Markdown 编辑器',
|
||||
icon: 'teenyicons:markdown-outline',
|
||||
icon: 'i-teenyicons:markdown-outline',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -110,7 +110,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/plugin_example/count.to.vue'),
|
||||
meta: {
|
||||
title: '计数器',
|
||||
icon: 'carbon:character-whole-number',
|
||||
icon: 'i-carbon:character-whole-number',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -119,7 +119,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/plugin_example/splitpanes.vue'),
|
||||
meta: {
|
||||
title: '拆分面板',
|
||||
icon: 'icon-park-outline:split-cells',
|
||||
icon: 'i-icon-park-outline:split-cells',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -128,7 +128,7 @@ const routes: RouteRecordRaw = {
|
||||
component: () => import('@/views/plugin_example/vxe-table.vue'),
|
||||
meta: {
|
||||
title: 'vxe-table',
|
||||
icon: 'mdi:table-large',
|
||||
icon: 'i-mdi:table-large',
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
@@ -51,7 +51,7 @@ const systemRoutes: RouteRecordRaw[] = [
|
||||
component: () => import('@/views/index.vue'),
|
||||
meta: {
|
||||
title: () => useSettingsStore().settings.home.title,
|
||||
icon: 'ant-design:home-twotone',
|
||||
icon: 'i-ant-design:home-twotone',
|
||||
breadcrumb: false,
|
||||
},
|
||||
},
|
||||
@@ -90,7 +90,7 @@ const asyncRoutes: Route.recordMainRaw[] = [
|
||||
{
|
||||
meta: {
|
||||
title: '演示',
|
||||
icon: 'uim:box',
|
||||
icon: 'i-uim:box',
|
||||
},
|
||||
children: [
|
||||
MultilevelMenuExample,
|
||||
@@ -109,7 +109,7 @@ const asyncRoutes: Route.recordMainRaw[] = [
|
||||
{
|
||||
meta: {
|
||||
title: '生态',
|
||||
icon: 'icon-park-outline:circular-connection',
|
||||
icon: 'i-icon-park-outline:circular-connection',
|
||||
},
|
||||
children: [
|
||||
...EcologyExample,
|
||||
|
||||
@@ -64,32 +64,32 @@
|
||||
<ElRow>
|
||||
<ElButton circle>
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:search" />
|
||||
<SvgIcon name="i-ep:search" />
|
||||
</template>
|
||||
</ElButton>
|
||||
<ElButton type="primary" circle>
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:edit" />
|
||||
<SvgIcon name="i-ep:edit" />
|
||||
</template>
|
||||
</ElButton>
|
||||
<ElButton type="success" circle>
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:check" />
|
||||
<SvgIcon name="i-ep:check" />
|
||||
</template>
|
||||
</ElButton>
|
||||
<ElButton type="info" circle>
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:message" />
|
||||
<SvgIcon name="i-ep:message" />
|
||||
</template>
|
||||
</ElButton>
|
||||
<ElButton type="warning" circle>
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:star" />
|
||||
<SvgIcon name="i-ep:star" />
|
||||
</template>
|
||||
</ElButton>
|
||||
<ElButton type="danger" circle>
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:delete" />
|
||||
<SvgIcon name="i-ep:delete" />
|
||||
</template>
|
||||
</ElButton>
|
||||
</ElRow>
|
||||
@@ -162,56 +162,56 @@
|
||||
</ElDivider>
|
||||
<ElButton type="primary">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:edit" />
|
||||
<SvgIcon name="i-ep:edit" />
|
||||
</template>
|
||||
</ElButton>
|
||||
<ElButton type="primary">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:share" />
|
||||
<SvgIcon name="i-ep:share" />
|
||||
</template>
|
||||
</ElButton>
|
||||
<ElButton type="primary">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:delete" />
|
||||
<SvgIcon name="i-ep:delete" />
|
||||
</template>
|
||||
</ElButton>
|
||||
<ElButton type="primary">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:search" />
|
||||
<SvgIcon name="i-ep:search" />
|
||||
</template>
|
||||
搜索
|
||||
</ElButton>
|
||||
<ElButton type="primary">
|
||||
上传
|
||||
<SvgIcon name="ep:upload" class="el-icon--right" />
|
||||
<SvgIcon name="i-ep:upload" class="el-icon--right" />
|
||||
</ElButton>
|
||||
<ElDivider content-position="left">
|
||||
按钮组
|
||||
</ElDivider>
|
||||
<ElButtonGroup style="margin-right: 10px;">
|
||||
<ElButton type="primary">
|
||||
<SvgIcon name="ep:arrow-left" class="el-icon--left" />
|
||||
<SvgIcon name="i-ep:arrow-left" class="el-icon--left" />
|
||||
上一页
|
||||
</ElButton>
|
||||
<ElButton type="primary">
|
||||
下一页
|
||||
<SvgIcon name="ep:arrow-right" class="el-icon--right" />
|
||||
<SvgIcon name="i-ep:arrow-right" class="el-icon--right" />
|
||||
</ElButton>
|
||||
</ElButtonGroup>
|
||||
<ElButtonGroup>
|
||||
<ElButton type="primary">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:edit" />
|
||||
<SvgIcon name="i-ep:edit" />
|
||||
</template>
|
||||
</ElButton>
|
||||
<ElButton type="primary">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:share" />
|
||||
<SvgIcon name="i-ep:share" />
|
||||
</template>
|
||||
</ElButton>
|
||||
<ElButton type="primary">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:delete" />
|
||||
<SvgIcon name="i-ep:delete" />
|
||||
</template>
|
||||
</ElButton>
|
||||
</ElButtonGroup>
|
||||
|
||||
@@ -7,12 +7,12 @@ const icon = icons.filter(item => item.prefix === 'ep')[0]
|
||||
<template>
|
||||
<div>
|
||||
<div class="demo">
|
||||
<SvgIcon name="ep:edit" />
|
||||
<SvgIcon name="ep:share" />
|
||||
<SvgIcon name="ep:delete" />
|
||||
<SvgIcon name="i-ep:edit" />
|
||||
<SvgIcon name="i-ep:share" />
|
||||
<SvgIcon name="i-ep:delete" />
|
||||
<ElButton type="primary">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:search" />
|
||||
<SvgIcon name="i-ep:search" />
|
||||
</template>
|
||||
搜索
|
||||
</ElButton>
|
||||
|
||||
@@ -28,12 +28,12 @@ const textarea = ref('')
|
||||
</ElDivider>
|
||||
<ElInput v-model="input1" placeholder="请选择日期">
|
||||
<template #suffix>
|
||||
<SvgIcon name="ep:calendar" />
|
||||
<SvgIcon name="i-ep:calendar" />
|
||||
</template>
|
||||
</ElInput>
|
||||
<ElInput v-model="input2" placeholder="请输入内容">
|
||||
<template #prefix>
|
||||
<SvgIcon name="ep:search" />
|
||||
<SvgIcon name="i-ep:search" />
|
||||
</template>
|
||||
</ElInput>
|
||||
<ElDivider content-position="left">
|
||||
|
||||
@@ -53,12 +53,12 @@
|
||||
图标
|
||||
</ElDivider>
|
||||
<ElLink>
|
||||
<SvgIcon name="ep:edit" class="el-icon--left" />
|
||||
<SvgIcon name="i-ep:edit" class="el-icon--left" />
|
||||
编辑
|
||||
</ElLink>
|
||||
<ElLink>
|
||||
查看
|
||||
<SvgIcon name="ep:view" class="el-icon--right" />
|
||||
<SvgIcon name="i-ep:view" class="el-icon--right" />
|
||||
</ElLink>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -49,7 +49,7 @@ function open(url: string) {
|
||||
</template>
|
||||
<ElButton @click="open('https://element-plus.org/#/zh-CN')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
Element Plus 官网
|
||||
</ElButton>
|
||||
|
||||
@@ -47,7 +47,7 @@ const toggle = ref(false)
|
||||
<HDropdown>
|
||||
<div>
|
||||
下拉面板
|
||||
<SvgIcon name="ep:caret-bottom" />
|
||||
<SvgIcon name="i-ep:caret-bottom" />
|
||||
</div>
|
||||
<template #dropdown>
|
||||
<div class="h-30 w-60 flex items-center justify-center">
|
||||
@@ -71,7 +71,7 @@ const toggle = ref(false)
|
||||
>
|
||||
<div>
|
||||
下拉菜单
|
||||
<SvgIcon name="ep:caret-bottom" />
|
||||
<SvgIcon name="i-ep:caret-bottom" />
|
||||
</div>
|
||||
</HDropdownMenu>
|
||||
</PageMain>
|
||||
@@ -115,7 +115,7 @@ const toggle = ref(false)
|
||||
</PageMain>
|
||||
<PageMain title="Tooltip">
|
||||
<HTooltip text="注意噢!">
|
||||
<SvgIcon name="ri:question-line" />
|
||||
<SvgIcon name="i-ri:question-line" />
|
||||
</HTooltip>
|
||||
</PageMain>
|
||||
</div>
|
||||
|
||||
@@ -13,7 +13,7 @@ meta:
|
||||
</template>
|
||||
<ElButton round>
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:arrow-left" />
|
||||
<SvgIcon name="i-ep:arrow-left" />
|
||||
</template>
|
||||
返回
|
||||
</ElButton>
|
||||
|
||||
@@ -83,7 +83,7 @@ function onToggle(fold: boolean) {
|
||||
<ElFormItem>
|
||||
<ElButton type="primary">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:search" />
|
||||
<SvgIcon name="i-ep:search" />
|
||||
</template>
|
||||
筛选
|
||||
</ElButton>
|
||||
@@ -150,7 +150,7 @@ function onToggle(fold: boolean) {
|
||||
<ElFormItem>
|
||||
<ElButton type="primary">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:search" />
|
||||
<SvgIcon name="i-ep:search" />
|
||||
</template>
|
||||
筛选
|
||||
</ElButton>
|
||||
@@ -217,7 +217,7 @@ function onToggle(fold: boolean) {
|
||||
<ElFormItem>
|
||||
<ElButton type="primary">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:search" />
|
||||
<SvgIcon name="i-ep:search" />
|
||||
</template>
|
||||
筛选
|
||||
</ElButton>
|
||||
@@ -284,7 +284,7 @@ function onToggle(fold: boolean) {
|
||||
<ElFormItem>
|
||||
<ElButton type="primary">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:search" />
|
||||
<SvgIcon name="i-ep:search" />
|
||||
</template>
|
||||
筛选
|
||||
</ElButton>
|
||||
@@ -335,13 +335,13 @@ function onToggle(fold: boolean) {
|
||||
<ElFormItem>
|
||||
<ElButton type="primary">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:search" />
|
||||
<SvgIcon name="i-ep:search" />
|
||||
</template>
|
||||
筛选
|
||||
</ElButton>
|
||||
<ElButton link @click="toggle">
|
||||
<template #icon>
|
||||
<SvgIcon :name="fold ? 'ep:caret-bottom' : 'ep:caret-top' " />
|
||||
<SvgIcon :name="fold ? 'i-ep:caret-bottom' : 'i-ep:caret-top' " />
|
||||
</template>
|
||||
{{ fold ? '展开' : '收起' }}
|
||||
</ElButton>
|
||||
@@ -400,13 +400,13 @@ function onToggle(fold: boolean) {
|
||||
<ElFormItem label-width="0" class="action-box">
|
||||
<ElButton type="primary">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:search" />
|
||||
<SvgIcon name="i-ep:search" />
|
||||
</template>
|
||||
筛选
|
||||
</ElButton>
|
||||
<ElButton link @click="toggle">
|
||||
<template #icon>
|
||||
<SvgIcon :name="fold ? 'ep:caret-bottom' : 'ep:caret-top' " />
|
||||
<SvgIcon :name="fold ? 'i-ep:caret-bottom' : 'i-ep:caret-top' " />
|
||||
</template>
|
||||
{{ fold ? '展开' : '收起' }}
|
||||
</ElButton>
|
||||
|
||||
@@ -409,7 +409,7 @@ function open(url: string) {
|
||||
<PageHeader title="常用正则" content="正则来源于 Github 上 any-rule 项目">
|
||||
<ElButton @click="open('https://github.com/any86/any-rule')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
访问 any-rule
|
||||
</ElButton>
|
||||
|
||||
@@ -37,7 +37,7 @@ function open(url: string) {
|
||||
<PageHeader title="VueUse" content="VueUse 是一个 Vue Composition API 实用程序的集合,更多 API 和例子请查看 VueUse 官网。">
|
||||
<ElButton @click="open('https://vueuse.org/')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
VueUse 官网
|
||||
</ElButton>
|
||||
|
||||
@@ -16,7 +16,7 @@ const dialog = ref({
|
||||
})
|
||||
|
||||
const code = computed(() => {
|
||||
return `<svg-icon name="${dialog.value.iconName}"></svg-icon>`
|
||||
return `<SvgIcon name="i-${dialog.value.iconName}" />`
|
||||
})
|
||||
|
||||
watch(copied, (val) => {
|
||||
|
||||
+3
-3
@@ -85,7 +85,7 @@ function open(url: string) {
|
||||
</div>
|
||||
</template>
|
||||
<HButton outline @click="open('https://fantastic-admin.gitee.io')">
|
||||
<SvgIcon name="ri:file-text-line" />
|
||||
<SvgIcon name="i-ri:file-text-line" />
|
||||
开发文档
|
||||
</HButton>
|
||||
<HDropdownMenu
|
||||
@@ -97,9 +97,9 @@ function open(url: string) {
|
||||
]"
|
||||
>
|
||||
<HButton class="ml-2">
|
||||
<SvgIcon name="ri:code-s-slash-line" />
|
||||
<SvgIcon name="i-ri:code-s-slash-line" />
|
||||
代码仓库
|
||||
<SvgIcon name="ep:arrow-down" />
|
||||
<SvgIcon name="i-ep:arrow-down" />
|
||||
</HButton>
|
||||
</HDropdownMenu>
|
||||
</PageHeader>
|
||||
|
||||
+9
-9
@@ -168,14 +168,14 @@ function testAccount(account: string) {
|
||||
<ElFormItem prop="account">
|
||||
<ElInput v-model="loginForm.account" placeholder="用户名" type="text" tabindex="1">
|
||||
<template #prefix>
|
||||
<SvgIcon name="ri:user-3-fill" />
|
||||
<SvgIcon name="i-ri:user-3-fill" />
|
||||
</template>
|
||||
</ElInput>
|
||||
</ElFormItem>
|
||||
<ElFormItem prop="password">
|
||||
<ElInput v-model="loginForm.password" type="password" placeholder="密码" tabindex="2" autocomplete="new-password" show-password @keyup.enter="handleLogin">
|
||||
<template #prefix>
|
||||
<SvgIcon name="ri:lock-2-fill" />
|
||||
<SvgIcon name="i-ri:lock-2-fill" />
|
||||
</template>
|
||||
</ElInput>
|
||||
</ElFormItem>
|
||||
@@ -217,14 +217,14 @@ function testAccount(account: string) {
|
||||
<ElFormItem prop="account">
|
||||
<ElInput v-model="registerForm.account" placeholder="用户名" tabindex="1">
|
||||
<template #prefix>
|
||||
<SvgIcon name="ri:user-3-fill" />
|
||||
<SvgIcon name="i-ri:user-3-fill" />
|
||||
</template>
|
||||
</ElInput>
|
||||
</ElFormItem>
|
||||
<ElFormItem prop="captcha">
|
||||
<ElInput v-model="registerForm.captcha" placeholder="验证码" tabindex="2">
|
||||
<template #prefix>
|
||||
<SvgIcon name="ic:baseline-verified-user" />
|
||||
<SvgIcon name="i-ic:baseline-verified-user" />
|
||||
</template>
|
||||
<template #append>
|
||||
<ElButton>发送验证码</ElButton>
|
||||
@@ -234,14 +234,14 @@ function testAccount(account: string) {
|
||||
<ElFormItem prop="password">
|
||||
<ElInput v-model="registerForm.password" type="password" placeholder="密码" tabindex="3" show-password>
|
||||
<template #prefix>
|
||||
<SvgIcon name="ri:lock-2-fill" />
|
||||
<SvgIcon name="i-ri:lock-2-fill" />
|
||||
</template>
|
||||
</ElInput>
|
||||
</ElFormItem>
|
||||
<ElFormItem prop="checkPassword">
|
||||
<ElInput v-model="registerForm.checkPassword" type="password" placeholder="确认密码" tabindex="4" show-password>
|
||||
<template #prefix>
|
||||
<SvgIcon name="ri:lock-2-fill" />
|
||||
<SvgIcon name="i-ri:lock-2-fill" />
|
||||
</template>
|
||||
</ElInput>
|
||||
</ElFormItem>
|
||||
@@ -266,14 +266,14 @@ function testAccount(account: string) {
|
||||
<ElFormItem prop="account">
|
||||
<ElInput v-model="resetForm.account" placeholder="用户名" type="text" tabindex="1">
|
||||
<template #prefix>
|
||||
<SvgIcon name="ri:user-3-fill" />
|
||||
<SvgIcon name="i-ri:user-3-fill" />
|
||||
</template>
|
||||
</ElInput>
|
||||
</ElFormItem>
|
||||
<ElFormItem prop="captcha">
|
||||
<ElInput v-model="resetForm.captcha" placeholder="验证码" type="text" tabindex="2">
|
||||
<template #prefix>
|
||||
<SvgIcon name="ic:baseline-verified-user" />
|
||||
<SvgIcon name="i-ic:baseline-verified-user" />
|
||||
</template>
|
||||
<template #append>
|
||||
<ElButton>发送验证码</ElButton>
|
||||
@@ -283,7 +283,7 @@ function testAccount(account: string) {
|
||||
<ElFormItem prop="newPassword">
|
||||
<ElInput v-model="resetForm.newPassword" type="password" placeholder="新密码" tabindex="3" show-password>
|
||||
<template #prefix>
|
||||
<SvgIcon name="ri:lock-2-fill" />
|
||||
<SvgIcon name="i-ri:lock-2-fill" />
|
||||
</template>
|
||||
</ElInput>
|
||||
</ElFormItem>
|
||||
|
||||
@@ -29,7 +29,7 @@ function open(url: string) {
|
||||
<PageHeader title="Mock" content="通过拦截 Ajax 请求,返回模拟的响应数据,可以让前端工程师独立于后端进行开发,本演示站的登录和权限获取就是通过 mock 实现的。更多 Mock 语法规则请查询官方文档">
|
||||
<ElButton @click="open('http://mockjs.com/')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
Mock.js 官网
|
||||
</ElButton>
|
||||
|
||||
@@ -208,7 +208,7 @@ function open(url: string) {
|
||||
</template>
|
||||
<ElButton @click="open('https://github.com/animate-css/animate.css')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
访问 animate.css
|
||||
</ElButton>
|
||||
|
||||
@@ -41,7 +41,7 @@ function open(url: string) {
|
||||
</template>
|
||||
<ElButton @click="open('https://github.com/xiaofan9/vue-count-to')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
访问 vue-count-to
|
||||
</ElButton>
|
||||
|
||||
@@ -309,7 +309,7 @@ function open(url: string) {
|
||||
</template>
|
||||
<ElButton @click="open('https://github.com/apache/echarts')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
访问 echart
|
||||
</ElButton>
|
||||
|
||||
@@ -65,7 +65,7 @@ function open(url: string) {
|
||||
</template>
|
||||
<ElButton @click="open('https://github.com/JaimeCheng/vue-esign')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
访问 vue-esign
|
||||
</ElButton>
|
||||
|
||||
@@ -163,13 +163,13 @@ function open(url: string) {
|
||||
<ElButtonGroup>
|
||||
<ElButton @click="open('https://github.com/antvis/g2')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
访问 G2
|
||||
</ElButton>
|
||||
<ElButton @click="open('https://github.com/antvis/G2Plot')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
访问 G2plot
|
||||
</ElButton>
|
||||
|
||||
@@ -39,7 +39,7 @@ function open(url: string) {
|
||||
</template>
|
||||
<ElButton @click="open('https://github.com/bytedance/bytemd')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
访问 bytemd
|
||||
</ElButton>
|
||||
|
||||
@@ -68,7 +68,7 @@ function open(url: string) {
|
||||
</template>
|
||||
<ElButton @click="open('https://github.com/crabbly/print.js')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
访问 print.js
|
||||
</ElButton>
|
||||
|
||||
@@ -67,7 +67,7 @@ function open(url: string) {
|
||||
</template>
|
||||
<ElButton @click="open('https://github.com/soldair/node-qrcode')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
访问 node-qrcode
|
||||
</ElButton>
|
||||
|
||||
@@ -24,7 +24,7 @@ function open(url: string) {
|
||||
</template>
|
||||
<ElButton @click="open('https://github.com/antoniandre/splitpanes')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
访问 splitpanes
|
||||
</ElButton>
|
||||
|
||||
@@ -36,7 +36,7 @@ function open(url: string) {
|
||||
</template>
|
||||
<ElButton @click="open('https://swiperjs.com/vue')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
访问 swiper
|
||||
</ElButton>
|
||||
|
||||
@@ -78,7 +78,7 @@ function open(url: string) {
|
||||
</template>
|
||||
<ElButton @click="open('https://github.com/tinymce/tinymce')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
访问 TinyMCE
|
||||
</ElButton>
|
||||
|
||||
@@ -91,7 +91,7 @@ function open(url: string) {
|
||||
</template>
|
||||
<ElButton @click="open('https://github.com/x-extends/vxe-table')">
|
||||
<template #icon>
|
||||
<SvgIcon name="ep:link" />
|
||||
<SvgIcon name="i-ep:link" />
|
||||
</template>
|
||||
访问 vxe-table
|
||||
</ElButton>
|
||||
|
||||
@@ -13,6 +13,14 @@ import { entriesToCss, toArray } from '@unocss/core'
|
||||
import { darkTheme, lightTheme } from './themes'
|
||||
|
||||
export default defineConfig<Theme>({
|
||||
content: {
|
||||
pipeline: {
|
||||
include: [
|
||||
/\.(vue|svelte|[jt]sx|mdx?|astro|elm|php|phtml|html)($|\?)/,
|
||||
'src/**/*.{js,ts}',
|
||||
],
|
||||
},
|
||||
},
|
||||
shortcuts: [
|
||||
{
|
||||
'flex-center': 'flex justify-center items-center',
|
||||
|
||||
Reference in New Issue
Block a user