1
0
mirror of https://github.com/zclzone/vue-naive-admin.git synced 2025-05-01 06:39:01 +08:00
2023-12-11 21:06:54 +08:00

284 lines
8.1 KiB
Vue
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--------------------------------
- @Author: Ronnie Zhang
- @LastEditor: Ronnie Zhang
- @LastEditTime: 2023/12/05 21:28:22
- @Email: zclzone@outlook.com
- Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
--------------------------------->
<template>
<AppPage show-footer>
<div class="flex">
<n-card class="min-w-200 w-30%">
<div class="flex items-center">
<n-avatar round :size="60" :src="userStore.avatar" class="flex-shrink-0" />
<div class="ml-20 flex-col">
<span class="text-20 opacity-80">
Hello, {{ userStore.nickName ?? userStore.username }}
</span>
<span class="mt-4 opacity-50">当前角色{{ userStore.currentRole?.name }}</span>
</div>
</div>
<p class="mt-28 text-14 opacity-60">一个人几乎可以在任何他怀有无限热忱的事情上成功</p>
<p class="mt-12 text-right text-12 opacity-40"> 查尔斯·史考伯</p>
</n-card>
<n-card class="ml-12 w-70%" title="✨ 欢迎使用 Vue Naive Admin 2.0">
<template #header-extra>
<a
class="text-14 text-primary text-highlight hover:underline hover:opacity-80"
href="https://isme.top"
target="_blank"
@click.prevent="message?.info('官网正在火速开发中...')"
>
isme.top
</a>
</template>
<p class="opacity-60">
这是一款极简风格的后台管理模板包含前后端解决方案前端使用 Vite + Vue3 + Pinia +
Unocss后端使用 Nestjs + TypeOrm +
MySql简单易用赏心悦目历经十几次重构和细节打磨诚意满满
</p>
<footer class="mt-12 flex items-center justify-end">
<n-button
type="primary"
ghost
tag="a"
href="https://docs.isme.top/web/#/624306705/188522224"
target="__blank"
>
开发文档
</n-button>
<n-button
type="primary"
class="ml-12"
tag="a"
href="https://github.com/zclzone/vue-naive-admin/tree/2.x-beta"
target="__blank"
>
代码仓库
</n-button>
</footer>
</n-card>
</div>
<div class="mt-12 flex">
<n-card class="w-50%" title="💯 特性" segmented>
<template #header-extra>
<span class="opacity-90 text-highlight">👏 历经十几次重构和细节打磨</span>
</template>
<ul class="opacity-90">
<li class="py-4">
🆒 使用
<b>Vue3</b>
主流技术栈:
<span class="text-highlight">Vite + Vue3 + Pinia</span>
</li>
<li class="py-4">
🍇 使用
<b>原子CSS</b>
框架:
<span class="text-highlight">Unocss</span>
优雅轻量易用
</li>
<li class="py-4">
🤹 使用主流的
<span class="text-highlight">iconify + unocss</span>
图标方案支持自定义图标支持动态渲染
</li>
<li class="py-4">
🎨 使用 Naive UI
<span class="text-highlight">极致简洁的代码风格和清爽的页面设计</span>
审美在线主题轻松定制
</li>
<li class="py-4">
👏 先进且易于理解的文件结构设计多个模块之间
<b>零耦合</b>
单个业务模块删除不影响其他模块
</li>
<li class="py-4">
🚀
<span class="text-highlight">扁平化路由</span>
设计每一个组件都可以是一个页面告别多级路由 KeepAlive 难实现问题
</li>
<li class="py-4">
🍒
<span class="text-highlight">基于权限动态生成路由</span>
无需额外定义路由
<span class="text-highlight">403和404可区分</span>
而不是无权限也跳404
</li>
<li class="py-4">
🔐 基于Redis集成
<span class="text-highlight">无感刷新</span>
用户登录态可控安全与体验缺一不可
</li>
<li class="py-4">
基于 Naive UI 封装
<span class="text-highlight">message</span>
全局工具方法支持批量提醒支持跨页面共享实例
</li>
<li class="py-4">
基于 Naive UI 封装常用的业务组件包含
<span class="text-highlight">Page</span>
组件
<span class="text-highlight">CRUD</span>
表格组件及
<span class="text-highlight">Modal</span>
组件减少大量重复性工作
</li>
</ul>
<n-divider class="mb-0! mt-12!">
<p class="text-14 opacity-60">
👉点击
<b class="mx-2 transition hover:text-primary">
<a href="https://isme.top" target="_blank">更多</a>
</b>
查看更多实用功能持续开发中...
</p>
</n-divider>
</n-card>
<n-card class="ml-12 w-50%" title="🛠️ 技术栈" segmented>
<VChart :option="skillOption" autoresize />
</n-card>
</div>
<n-card class="mt-12" title="⚡️ 趋势" segmented>
<VChart :option="trendOption" :init-options="{ height: 400 }" autoresize />
</n-card>
</AppPage>
</template>
<script setup>
import { useUserStore } from '@/store'
import * as echarts from 'echarts/core'
import { TooltipComponent, GridComponent, LegendComponent } from 'echarts/components'
import { BarChart, LineChart, PieChart } from 'echarts/charts'
import { UniversalTransition } from 'echarts/features'
import { CanvasRenderer } from 'echarts/renderers'
import VChart from 'vue-echarts'
const userStore = useUserStore()
echarts.use([
TooltipComponent,
GridComponent,
LegendComponent,
BarChart,
LineChart,
CanvasRenderer,
UniversalTransition,
PieChart,
])
const trendOption = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
crossStyle: {
color: '#999',
},
},
},
legend: {
top: '5%',
data: ['star', 'fork'],
},
xAxis: [
{
type: 'category',
data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
axisPointer: {
type: 'shadow',
},
},
],
yAxis: [
{
type: 'value',
min: 0,
max: 3000,
interval: 500,
axisLabel: {
formatter: '{value}',
},
},
{
type: 'value',
min: 0,
max: 500,
interval: 100,
axisLabel: {
formatter: '{value}',
},
},
],
series: [
{
name: 'star',
type: 'line',
data: [200, 320, 520, 550, 600, 805, 888, 950, 1300, 2503, 2702, 2712],
},
{
name: 'fork',
yAxisIndex: 1,
type: 'bar',
data: [40, 72, 110, 115, 121, 175, 180, 201, 260, 398, 423, 455],
},
],
}
const skillOption = {
tooltip: {
trigger: 'item',
formatter({ name, value }) {
return `${name} ${value}%`
},
},
legend: {
left: 'center',
},
series: [
{
top: '12%',
type: 'pie',
radius: ['35%', '90%'],
avoidLabelOverlap: true,
itemStyle: {
borderRadius: 10,
borderColor: '#fff',
borderWidth: 2,
},
label: {
show: false,
position: 'center',
},
emphasis: {
label: {
show: true,
fontSize: 36,
fontWeight: 'bold',
},
},
labelLine: {
show: false,
},
data: [
{ value: 38.5, name: 'Vue' },
{ value: 37.0, name: 'JavaScript' },
{ value: 6.5, name: 'CSS' },
{ value: 6.2, name: 'HTML' },
{ value: 1.8, name: 'Other' },
],
},
],
}
const message = $message
</script>