一、介绍
svelte.js前端新框架爆火,可是网上对于svelte.js开发的组件库及后盾零碎比拟少。于是就本人入手开发了一个svelte-ui组件库和svelte-admin后盾管理系统。
Svelte Ui Admin 一款基于svelte3.x+svelteKit+svelte-ui+sass+mockjs
等技术构建的中后盾治理。
二、技术实现
- 开发工具:Vscode
- 技术框架:svelte3.x+svelteKit+vite3
- UI组件库:svelte-ui (基于svelte自定义pc端UI组件库)
- 图表组件:echarts^5.3.3
- 图文编辑器:wangeditor^4.7.15
- 国际化计划:svelte-i18n^3.4.0
- 数据模仿:mockjs^1.1.0
svelte-admin
反对动态化换肤、中英文/繁体国际化语言。
目录构造
Svelte-Ui组件库
我的项目中所有的组件均是遵循应用svelte-ui组件库。整体格调对立好看。
svelte-ui桌面pc端UI组件库
公共布局模板
svelte-admin
整体分为顶部导航条+左侧动静路由菜单+右侧主内容区域三个模块。
<div class="svadmin__container" style="--themeSkin: {$skin}"> <div class="svadmin__wrapper-layout flexbox flex-col"> <div class="sv__layout-header"> <Header /> </div> <div class="sv__layout-body flex1 flexbox"> <!-- //侧边栏 --> {#if rootRouteEnable} <div class="sv__bd-sidebar"> <SideMenu routes={mainRoutes} {activeRoute} /> </div> {/if} {#if (rootRouteEnable && route != '/') || !rootRouteEnable} <div class="sv__bd-menus" class:collapsed={collapsed&&!rootRouteEnable}> <RouteMenu routes={getAllRoutes} {activeRoute} {activeRootRoute} {rootRouteEnable} {collapsed} /> </div> {/if} <div class="sv__bd-main flex1 flexbox flex-col"> <!-- 面包屑导航 --> <BreadCrumb routes={getAllRoutes} {activeRoute} {activeRootRoute} /> <!-- 主内容区 --> <Scrollbar autohide gap={2}> <div class="sv__main-wrapper"> <slot /> </div> </Scrollbar> </div> </div> </div></div>
+error.svelte错误处理
<script> import { page } from '$app/stores' import { goto } from '$app/navigation' import { Button } from '$lib/svelte-ui' function goHome() { goto('/home/index') }</script><svelte:head> <title>{$page.status} Error!</title></svelte:head><div class="svadmin__pageErr flexbox flex-col flex-alignc flex-justifyc"> <div class="svadmin__pageErr-img"><i class="sv-icon-round_close_fill_light"></i></div> <div class="svadmin__pageErr-content"> <div class="c-red fs-18">┗| {$page.status} |┛ Page Error~~</div> <div class="c-999 mt-10 mb-10">{$page.error.message}</div> <Button size="small" on:click={goHome}>Go Home</Button> </div></div>
svelte-i18n国际化
我的项目路由菜单及页面反对动静配置中英文/繁体多语言。
npm i svelte-i18n
/** * 国际化语言配置 * @author YXY */import { addMessages, init, getLocaleFromNavigator } from 'svelte-i18n'import { browser } from '$app/env'import Storage from '@/utils/storage'// 引入语言配置import cn from '@/locale/zh-CN'import tw from '@/locale/zh-TW'import en from '@/locale/en-US'export const langKey = 'lang'export const langVal = 'cn'addMessages('cn', cn)addMessages('tw', tw)addMessages('en', en)const lang = getLang()console.log('以后国际化:', lang)init({ fallbackLocale: lang, initialLocale: getLocaleFromNavigator()})setHtmlLang(lang)/* 获取语言 */export function getLang() { const lang = Storage.get(langKey) return lang || langVal}/* 长久化存储 */export function setLang(lang, reload = false) { if(lang != getLang()) { Storage.set(langKey, lang || '') setHtmlLang(lang) // 重载页面 if(reload) { window.location.reload() } }}
svelte动静图表配置
为了解决多个中央应用图表的问题,新建了一个图表hooks文件。
/** * @title 动静图表Hooks * @author YXY*/import * as echarts from 'echarts'import elementResizeDetector from "element-resize-detector"import utils from '@/utils'export const useCharts = async(node, options) => { let chartInstance let chartNode = null let erd = elementResizeDetector() const resizeFn = utils.debounce(() => { chartInstance.resize() }, 100) if(node) { chartInstance = echarts.init(node) chartInstance.setOption(options) chartNode = chartInstance } erd.listenTo(node, resizeFn)}
好了,基于svlete-ui开发后盾管理系统就先分享这么多。后续会陆续分享一些实例我的项目。
https://segmentfault.com/a/11...
https://segmentfault.com/a/11...