mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-06 16:37:18 +08:00
perf: 优化演示页面
This commit is contained in:
parent
9ca6941946
commit
db723b7908
@ -292,7 +292,7 @@
|
|||||||
- 添加 `@pureadmin/table` 行、列拖拽示例
|
- 添加 `@pureadmin/table` 行、列拖拽示例
|
||||||
- 添加 `@pureadmin/table` 右键菜单示例
|
- 添加 `@pureadmin/table` 右键菜单示例
|
||||||
- 添加 `@pureadmin/table` 导出 `Excel` 示例
|
- 添加 `@pureadmin/table` 导出 `Excel` 示例
|
||||||
- 添加 `@pureadmin/table` 编辑单元格示例
|
- 添加 `@pureadmin/table` 修改单元格示例
|
||||||
- 添加 `@pureadmin/table` 水印示例
|
- 添加 `@pureadmin/table` 水印示例
|
||||||
- 添加 `@pureadmin/table` 打印示例
|
- 添加 `@pureadmin/table` 打印示例
|
||||||
- 添加 `@pureadmin/table` 内嵌 `echarts` 图表示例
|
- 添加 `@pureadmin/table` 内嵌 `echarts` 图表示例
|
||||||
|
@ -141,7 +141,7 @@ After operating the above two commands, open `http://localhost:8080` in the brow
|
|||||||
Of course, you can also operate the `docker` project through the [Docker Desktop](https://www.docker.com/products/docker-desktop/) visual interface, as shown below
|
Of course, you can also operate the `docker` project through the [Docker Desktop](https://www.docker.com/products/docker-desktop/) visual interface, as shown below
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img alt="docker" width="100%" src="https://xiaoxian521.github.io/hyperlink/img/docker-desktop.jpg">
|
<img alt="docker-desktop" width="100%" src="https://xiaoxian521.github.io/hyperlink/img/docker-desktop.jpg">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## Change Log
|
## Change Log
|
||||||
|
@ -141,7 +141,7 @@ docker run -dp 8080:80 --name pure-admin vue-pure-admin
|
|||||||
当然也可以通过 [Docker Desktop](https://www.docker.com/products/docker-desktop/) 可视化界面去操作 `docker` 项目,如下图
|
当然也可以通过 [Docker Desktop](https://www.docker.com/products/docker-desktop/) 可视化界面去操作 `docker` 项目,如下图
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img alt="docker" width="100%" src="https://xiaoxian521.github.io/hyperlink/img/docker-desktop.jpg">
|
<img alt="docker-desktop" width="100%" src="https://xiaoxian521.github.io/hyperlink/img/docker-desktop.jpg">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## 更新日志
|
## 更新日志
|
||||||
|
@ -36,23 +36,23 @@ menus:
|
|||||||
hsfourZeroOne: "403"
|
hsfourZeroOne: "403"
|
||||||
hsFive: "500"
|
hsFive: "500"
|
||||||
hscomponents: Components
|
hscomponents: Components
|
||||||
hsdialog: Dialog Components
|
hsdialog: Dialog
|
||||||
hsmessage: Message Tips Components
|
hsmessage: Message Tips
|
||||||
hsvideo: Video Components
|
hsvideo: Video
|
||||||
hssegmented: Segmented Components
|
hssegmented: Segmented
|
||||||
hswaterfall: Waterfall Components
|
hswaterfall: Waterfall
|
||||||
hsmap: Map Components
|
hsmap: Map
|
||||||
hsdraggable: Draggable Components
|
hsdraggable: Draggable
|
||||||
hssplitPane: Split Pane
|
hssplitPane: Split Pane
|
||||||
hsbutton: Button Components
|
hsbutton: Button
|
||||||
hscropping: Picture Cropping
|
hscropping: Picture Cropping
|
||||||
hsanimatecss: AnimateCss Selector
|
hsanimatecss: AnimateCss Selector
|
||||||
hscountTo: Digital Animation
|
hscountTo: Digital Animation
|
||||||
hsselector: Selector Components
|
hsselector: Scope Selector
|
||||||
hsflowChart: Flow Chart
|
hsflowChart: Flow Chart
|
||||||
hsseamless: Seamless Scroll
|
hsseamless: Seamless Scroll
|
||||||
hscontextmenu: Context Menu
|
hscontextmenu: Context Menu
|
||||||
hstypeit: Typeit Components
|
hstypeit: Typeit
|
||||||
hsjsoneditor: JSON Editor
|
hsjsoneditor: JSON Editor
|
||||||
hsmenus: MultiLevel Menu
|
hsmenus: MultiLevel Menu
|
||||||
hsmenu1: Menu1
|
hsmenu1: Menu1
|
||||||
@ -107,10 +107,9 @@ menus:
|
|||||||
hsInfiniteScroll: Table Infinite Scroll
|
hsInfiniteScroll: Table Infinite Scroll
|
||||||
hsSensitive: Sensitive Filter
|
hsSensitive: Sensitive Filter
|
||||||
hsPinyin: PinYin
|
hsPinyin: PinYin
|
||||||
hsdanmaku: Danmaku Components
|
hsdanmaku: Danmaku
|
||||||
hsPureTableBase: Base Usage
|
hsPureTableBase: Base Usage
|
||||||
hsPureTableHigh: High Usage
|
hsPureTableHigh: High Usage
|
||||||
hsTree: Big Data Tree
|
|
||||||
hsboard: Paint Board
|
hsboard: Paint Board
|
||||||
hsMenuoverflow: Menu Overflow Show Tooltip Text
|
hsMenuoverflow: Menu Overflow Show Tooltip Text
|
||||||
hsChildMenuoverflow: Child Menu Overflow Show Tooltip Text
|
hsChildMenuoverflow: Child Menu Overflow Show Tooltip Text
|
||||||
|
@ -36,23 +36,23 @@ menus:
|
|||||||
hsfourZeroOne: "403"
|
hsfourZeroOne: "403"
|
||||||
hsFive: "500"
|
hsFive: "500"
|
||||||
hscomponents: 组件
|
hscomponents: 组件
|
||||||
hsdialog: 函数式弹框组件
|
hsdialog: 函数式弹框
|
||||||
hsmessage: 消息提示组件
|
hsmessage: 消息提示
|
||||||
hsvideo: 视频组件
|
hsvideo: 视频
|
||||||
hssegmented: 分段控制器组件
|
hssegmented: 分段控制器
|
||||||
hswaterfall: 瀑布流无限滚动组件
|
hswaterfall: 瀑布流无限滚动
|
||||||
hsmap: 地图组件
|
hsmap: 地图
|
||||||
hsdraggable: 拖拽组件
|
hsdraggable: 拖拽
|
||||||
hssplitPane: 切割面板
|
hssplitPane: 切割面板
|
||||||
hsbutton: 按钮组件
|
hsbutton: 按钮
|
||||||
hscropping: 图片裁剪
|
hscropping: 图片裁剪
|
||||||
hsanimatecss: AnimateCss选择器组件
|
hsanimatecss: animate.css选择器
|
||||||
hscountTo: 数字动画
|
hscountTo: 数字动画
|
||||||
hsselector: 选择器组件
|
hsselector: 范围选择器
|
||||||
hsflowChart: 流程图
|
hsflowChart: 流程图
|
||||||
hsseamless: 无缝滚动
|
hsseamless: 无缝滚动
|
||||||
hscontextmenu: 右键菜单
|
hscontextmenu: 右键菜单
|
||||||
hstypeit: 打字机组件
|
hstypeit: 打字机
|
||||||
hsjsoneditor: JSON编辑器
|
hsjsoneditor: JSON编辑器
|
||||||
hsmenus: 多级菜单
|
hsmenus: 多级菜单
|
||||||
hsmenu1: 菜单1
|
hsmenu1: 菜单1
|
||||||
@ -107,10 +107,9 @@ menus:
|
|||||||
hsInfiniteScroll: 表格无限滚动
|
hsInfiniteScroll: 表格无限滚动
|
||||||
hsSensitive: 敏感词过滤
|
hsSensitive: 敏感词过滤
|
||||||
hsPinyin: 汉语拼音
|
hsPinyin: 汉语拼音
|
||||||
hsdanmaku: 弹幕组件
|
hsdanmaku: 弹幕
|
||||||
hsPureTableBase: 基础用法(23个示例)
|
hsPureTableBase: 基础用法(23个示例)
|
||||||
hsPureTableHigh: 高级用法(11个示例)
|
hsPureTableHigh: 高级用法(11个示例)
|
||||||
hsTree: 大数据树业务组件
|
|
||||||
hsboard: 艺术画板
|
hsboard: 艺术画板
|
||||||
hsMenuoverflow: 目录超出显示 Tooltip 文字提示
|
hsMenuoverflow: 目录超出显示 Tooltip 文字提示
|
||||||
hsChildMenuoverflow: 菜单超出显示 Tooltip 文字提示
|
hsChildMenuoverflow: 菜单超出显示 Tooltip 文字提示
|
||||||
|
@ -18,7 +18,7 @@ const systemRouter = {
|
|||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "/system/user/index",
|
path: "/system/user/index",
|
||||||
name: "User",
|
name: "SystemUser",
|
||||||
meta: {
|
meta: {
|
||||||
icon: "flUser",
|
icon: "flUser",
|
||||||
title: "menus.hsUser",
|
title: "menus.hsUser",
|
||||||
@ -27,7 +27,7 @@ const systemRouter = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/system/role/index",
|
path: "/system/role/index",
|
||||||
name: "Role",
|
name: "SystemRole",
|
||||||
meta: {
|
meta: {
|
||||||
icon: "role",
|
icon: "role",
|
||||||
title: "menus.hsRole",
|
title: "menus.hsRole",
|
||||||
@ -36,7 +36,7 @@ const systemRouter = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/system/dept/index",
|
path: "/system/dept/index",
|
||||||
name: "Dept",
|
name: "SystemDept",
|
||||||
meta: {
|
meta: {
|
||||||
icon: "dept",
|
icon: "dept",
|
||||||
title: "menus.hsDept",
|
title: "menus.hsDept",
|
||||||
|
@ -72,11 +72,11 @@ function onMouseleave() {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-select
|
<el-select
|
||||||
class="!w-[200px]"
|
|
||||||
:model-value="inputValue"
|
|
||||||
placeholder="请选择动画"
|
|
||||||
clearable
|
clearable
|
||||||
filterable
|
filterable
|
||||||
|
placeholder="请选择动画"
|
||||||
|
popper-class="pure-animate-popper"
|
||||||
|
:model-value="inputValue"
|
||||||
:filter-method="filterMethod"
|
:filter-method="filterMethod"
|
||||||
@clear="onClear"
|
@clear="onClear"
|
||||||
>
|
>
|
||||||
@ -121,3 +121,9 @@ function onMouseleave() {
|
|||||||
</template>
|
</template>
|
||||||
</el-select>
|
</el-select>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.pure-animate-popper {
|
||||||
|
min-width: 0 !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@ -129,6 +129,11 @@ export default defineComponent({
|
|||||||
|
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
cropper.value?.destroy();
|
cropper.value?.destroy();
|
||||||
|
isReady.value = false;
|
||||||
|
cropper.value = null;
|
||||||
|
imgBase64.value = "";
|
||||||
|
scaleX = 1;
|
||||||
|
scaleY = 1;
|
||||||
});
|
});
|
||||||
|
|
||||||
useResizeObserver(tippyElRef, () => handCropper("reset"));
|
useResizeObserver(tippyElRef, () => handCropper("reset"));
|
||||||
|
@ -121,7 +121,7 @@ watch(
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="selector w-[220px]">
|
<div class="selector">
|
||||||
<el-input v-model="inputValue" disabled>
|
<el-input v-model="inputValue" disabled>
|
||||||
<template #append>
|
<template #append>
|
||||||
<el-popover
|
<el-popover
|
||||||
|
@ -196,13 +196,6 @@ const layoutHeader = defineComponent({
|
|||||||
</div>
|
</div>
|
||||||
<!-- 系统设置 -->
|
<!-- 系统设置 -->
|
||||||
<setting />
|
<setting />
|
||||||
<a
|
|
||||||
target="_blank"
|
|
||||||
href="https://www.bilibili.com/video/BV1He411m7Qs/"
|
|
||||||
class="absolute top-[53px] right-[50px] text-lg z-[999] cursor-pointer review"
|
|
||||||
>
|
|
||||||
回顾2023!
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -237,24 +230,4 @@ const layoutHeader = defineComponent({
|
|||||||
.re-screen {
|
.re-screen {
|
||||||
margin-top: 12px;
|
margin-top: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes pulse {
|
|
||||||
0%,
|
|
||||||
100% {
|
|
||||||
transform: scale(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
50% {
|
|
||||||
transform: scale(1.3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.review {
|
|
||||||
font-size: 18px;
|
|
||||||
animation: pulse 2s 3;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
opacity: 0.75;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -10,30 +10,6 @@ export default {
|
|||||||
rank: able
|
rank: able
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
{
|
|
||||||
path: "/able/videoFrame",
|
|
||||||
name: "VideoFrame",
|
|
||||||
component: () => import("@/views/able/video-frame/index.vue"),
|
|
||||||
meta: {
|
|
||||||
title: $t("menus.hsVideoFrame")
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/able/wavesurfer",
|
|
||||||
name: "Wavesurfer",
|
|
||||||
component: () => import("@/views/able/wavesurfer/index.vue"),
|
|
||||||
meta: {
|
|
||||||
title: $t("menus.hsWavesurfer")
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/able/directives",
|
|
||||||
name: "Directives",
|
|
||||||
component: () => import("@/views/able/directives.vue"),
|
|
||||||
meta: {
|
|
||||||
title: $t("menus.hsOptimize")
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: "/able/watermark",
|
path: "/able/watermark",
|
||||||
name: "WaterMark",
|
name: "WaterMark",
|
||||||
@ -59,35 +35,11 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/able/iconSelect",
|
path: "/able/excel",
|
||||||
name: "IconSelect",
|
name: "Excel",
|
||||||
component: () => import("@/views/able/icon-select.vue"),
|
component: () => import("@/views/able/excel.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsIconSelect")
|
title: $t("menus.hsExcel")
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/able/timeline",
|
|
||||||
name: "TimeLine",
|
|
||||||
component: () => import("@/views/able/timeline.vue"),
|
|
||||||
meta: {
|
|
||||||
title: $t("menus.hsTimeline")
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/able/menuTree",
|
|
||||||
name: "MenuTree",
|
|
||||||
component: () => import("@/views/able/menu-tree.vue"),
|
|
||||||
meta: {
|
|
||||||
title: $t("menus.hsMenuTree")
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/able/lineTree",
|
|
||||||
name: "LineTree",
|
|
||||||
component: () => import("@/views/able/line-tree.vue"),
|
|
||||||
meta: {
|
|
||||||
title: $t("menus.hsLineTree")
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -98,6 +50,34 @@ export default {
|
|||||||
title: $t("menus.hsDebounce")
|
title: $t("menus.hsDebounce")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "/able/directives",
|
||||||
|
name: "Directives",
|
||||||
|
component: () => import("@/views/able/directives.vue"),
|
||||||
|
meta: {
|
||||||
|
title: $t("menus.hsOptimize")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/able/draggable",
|
||||||
|
name: "Draggable",
|
||||||
|
component: () => import("@/views/able/draggable.vue"),
|
||||||
|
meta: {
|
||||||
|
title: $t("menus.hsdraggable"),
|
||||||
|
transition: {
|
||||||
|
enterTransition: "animate__zoomIn",
|
||||||
|
leaveTransition: "animate__zoomOut"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/able/pdf",
|
||||||
|
name: "Pdf",
|
||||||
|
component: () => import("@/views/able/pdf.vue"),
|
||||||
|
meta: {
|
||||||
|
title: $t("menus.hsPdf")
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: "/able/barcode",
|
path: "/able/barcode",
|
||||||
name: "BarCode",
|
name: "BarCode",
|
||||||
@ -115,43 +95,47 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/able/cascader",
|
path: "/able/map",
|
||||||
name: "Cascader",
|
name: "MapPage",
|
||||||
component: () => import("@/views/able/cascader.vue"),
|
component: () => import("@/views/able/map.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsCascader")
|
title: $t("menus.hsmap"),
|
||||||
|
keepAlive: true,
|
||||||
|
transition: {
|
||||||
|
name: "fade"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/able/swiper",
|
path: "/able/wavesurfer",
|
||||||
name: "Swiper",
|
name: "Wavesurfer",
|
||||||
component: () => import("@/views/able/swiper.vue"),
|
component: () => import("@/views/able/wavesurfer/index.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsSwiper")
|
title: $t("menus.hsWavesurfer")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/able/virtualList",
|
path: "/able/video",
|
||||||
name: "VirtualList",
|
name: "VideoPage",
|
||||||
component: () => import("@/views/able/virtual-list/index.vue"),
|
component: () => import("@/views/able/video.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsVirtualList")
|
title: $t("menus.hsvideo")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/able/pdf",
|
path: "/able/videoFrame",
|
||||||
name: "Pdf",
|
name: "VideoFrame",
|
||||||
component: () => import("@/views/able/pdf.vue"),
|
component: () => import("@/views/able/video-frame/index.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsPdf")
|
title: $t("menus.hsVideoFrame")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/able/excel",
|
path: "/able/danmaku",
|
||||||
name: "Excel",
|
name: "Danmaku",
|
||||||
component: () => import("@/views/able/excel.vue"),
|
component: () => import("@/views/able/danmaku/index.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsExcel")
|
title: $t("menus.hsdanmaku")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -162,6 +146,30 @@ export default {
|
|||||||
title: $t("menus.hsInfiniteScroll")
|
title: $t("menus.hsInfiniteScroll")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "/able/menuTree",
|
||||||
|
name: "MenuTree",
|
||||||
|
component: () => import("@/views/able/menu-tree.vue"),
|
||||||
|
meta: {
|
||||||
|
title: $t("menus.hsMenuTree")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/able/lineTree",
|
||||||
|
name: "LineTree",
|
||||||
|
component: () => import("@/views/able/line-tree.vue"),
|
||||||
|
meta: {
|
||||||
|
title: $t("menus.hsLineTree")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/able/typeit",
|
||||||
|
name: "Typeit",
|
||||||
|
component: () => import("@/views/able/typeit.vue"),
|
||||||
|
meta: {
|
||||||
|
title: $t("menus.hstypeit")
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: "/able/sensitive",
|
path: "/able/sensitive",
|
||||||
name: "Sensitive",
|
name: "Sensitive",
|
||||||
|
@ -16,84 +16,31 @@ export default {
|
|||||||
component: () => import("@/views/components/dialog/index.vue"),
|
component: () => import("@/views/components/dialog/index.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsdialog"),
|
title: $t("menus.hsdialog"),
|
||||||
extraIcon: "IF-pure-iconfont-new svg",
|
extraIcon: "IF-pure-iconfont-new svg"
|
||||||
transition: {
|
|
||||||
enterTransition: "animate__fadeInLeft",
|
|
||||||
leaveTransition: "animate__fadeOutRight"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/components/message",
|
path: "/components/message",
|
||||||
name: "Message",
|
name: "Message",
|
||||||
component: () => import("@/views/components/message/index.vue"),
|
component: () => import("@/views/components/message.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsmessage")
|
title: $t("menus.hsmessage")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/components/segmented",
|
path: "/components/iconSelect",
|
||||||
name: "Segmented",
|
name: "IconSelect",
|
||||||
component: () => import("@/views/components/segmented/index.vue"),
|
component: () => import("@/views/components/icon-select.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hssegmented"),
|
title: $t("menus.hsIconSelect")
|
||||||
extraIcon: "IF-pure-iconfont-new svg"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/components/waterfall",
|
path: "/components/animatecss",
|
||||||
name: "Waterfall",
|
name: "AnimateCss",
|
||||||
component: () => import("@/views/components/waterfall/index.vue"),
|
component: () => import("@/views/components/animatecss.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hswaterfall")
|
title: $t("menus.hsanimatecss")
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/components/video",
|
|
||||||
name: "VideoPage",
|
|
||||||
component: () => import("@/views/components/video/index.vue"),
|
|
||||||
meta: {
|
|
||||||
title: $t("menus.hsvideo")
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/components/map",
|
|
||||||
name: "MapPage",
|
|
||||||
component: () => import("@/views/components/map/index.vue"),
|
|
||||||
meta: {
|
|
||||||
title: $t("menus.hsmap"),
|
|
||||||
keepAlive: true,
|
|
||||||
transition: {
|
|
||||||
name: "fade"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/components/draggable",
|
|
||||||
name: "Draggable",
|
|
||||||
component: () => import("@/views/components/draggable/index.vue"),
|
|
||||||
meta: {
|
|
||||||
title: $t("menus.hsdraggable"),
|
|
||||||
transition: {
|
|
||||||
enterTransition: "animate__zoomIn",
|
|
||||||
leaveTransition: "animate__zoomOut"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/components/splitPane",
|
|
||||||
name: "SplitPane",
|
|
||||||
component: () => import("@/views/components/split-pane/index.vue"),
|
|
||||||
meta: {
|
|
||||||
title: $t("menus.hssplitPane")
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/components/button",
|
|
||||||
name: "ButtonPage",
|
|
||||||
component: () => import("@/views/components/button/index.vue"),
|
|
||||||
meta: {
|
|
||||||
title: $t("menus.hsbutton")
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -105,35 +52,68 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/components/animatecss",
|
path: "/components/segmented",
|
||||||
name: "AnimateCss",
|
name: "Segmented",
|
||||||
component: () => import("@/views/components/animatecss/index.vue"),
|
component: () => import("@/views/components/segmented.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsanimatecss")
|
title: $t("menus.hssegmented"),
|
||||||
|
extraIcon: "IF-pure-iconfont-new svg"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/components/countTo",
|
path: "/components/cascader",
|
||||||
name: "CountTo",
|
name: "Cascader",
|
||||||
component: () => import("@/views/components/count-to/index.vue"),
|
component: () => import("@/views/components/cascader.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hscountTo")
|
title: $t("menus.hsCascader")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/components/selector",
|
path: "/components/selector",
|
||||||
name: "Selector",
|
name: "Selector",
|
||||||
component: () => import("@/views/components/selector/index.vue"),
|
component: () => import("@/views/components/selector.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsselector")
|
title: $t("menus.hsselector")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/components/seamlessScroll",
|
path: "/components/waterfall",
|
||||||
name: "SeamlessScroll",
|
name: "Waterfall",
|
||||||
component: () => import("@/views/components/seamless-scroll/index.vue"),
|
component: () => import("@/views/components/waterfall/index.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsseamless")
|
title: $t("menus.hswaterfall")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/components/splitPane",
|
||||||
|
name: "SplitPane",
|
||||||
|
component: () => import("@/views/components/split-pane.vue"),
|
||||||
|
meta: {
|
||||||
|
title: $t("menus.hssplitPane")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/components/swiper",
|
||||||
|
name: "Swiper",
|
||||||
|
component: () => import("@/views/components/swiper.vue"),
|
||||||
|
meta: {
|
||||||
|
title: $t("menus.hsSwiper")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/components/timeline",
|
||||||
|
name: "TimeLine",
|
||||||
|
component: () => import("@/views/components/timeline.vue"),
|
||||||
|
meta: {
|
||||||
|
title: $t("menus.hsTimeline")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/components/countTo",
|
||||||
|
name: "CountTo",
|
||||||
|
component: () => import("@/views/components/count-to.vue"),
|
||||||
|
meta: {
|
||||||
|
title: $t("menus.hscountTo")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -144,28 +124,36 @@ export default {
|
|||||||
title: $t("menus.hscontextmenu")
|
title: $t("menus.hscontextmenu")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: "/components/typeit",
|
|
||||||
name: "Typeit",
|
|
||||||
component: () => import("@/views/components/typeit/index.vue"),
|
|
||||||
meta: {
|
|
||||||
title: $t("menus.hstypeit")
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: "/components/json-editor",
|
path: "/components/json-editor",
|
||||||
name: "JsonEditor",
|
name: "JsonEditor",
|
||||||
component: () => import("@/views/components/json-editor/index.vue"),
|
component: () => import("@/views/components/json-editor.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsjsoneditor")
|
title: $t("menus.hsjsoneditor")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/components/danmaku",
|
path: "/components/seamlessScroll",
|
||||||
name: "Danmaku",
|
name: "SeamlessScroll",
|
||||||
component: () => import("@/views/components/danmaku/index.vue"),
|
component: () => import("@/views/components/seamless-scroll.vue"),
|
||||||
meta: {
|
meta: {
|
||||||
title: $t("menus.hsdanmaku")
|
title: $t("menus.hsseamless")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/components/virtualList",
|
||||||
|
name: "VirtualList",
|
||||||
|
component: () => import("@/views/components/virtual-list/index.vue"),
|
||||||
|
meta: {
|
||||||
|
title: $t("menus.hsVirtualList")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/components/button",
|
||||||
|
name: "ButtonPage",
|
||||||
|
component: () => import("@/views/components/button.vue"),
|
||||||
|
meta: {
|
||||||
|
title: $t("menus.hsbutton")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -25,10 +25,10 @@ watch(icon, () => {
|
|||||||
>
|
>
|
||||||
animate.css
|
animate.css
|
||||||
</el-link>
|
</el-link>
|
||||||
选择器组件
|
选择器
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<ReAnimateSelector v-model="icon" />
|
<ReAnimateSelector v-model="icon" class="!w-[200px]" />
|
||||||
</el-card>
|
</el-card>
|
||||||
</template>
|
</template>
|
@ -26,10 +26,10 @@ const handleChange = value => {
|
|||||||
<template>
|
<template>
|
||||||
<el-card shadow="never">
|
<el-card shadow="never">
|
||||||
<template #header> <p class="font-medium">区域级联选择器</p> </template>
|
<template #header> <p class="font-medium">区域级联选择器</p> </template>
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="24">
|
||||||
<el-col :xl="12" :lg="12" :md="24" :sm="24" :xs="24">
|
<el-col :xl="12" :lg="12" :md="24" :sm="24" :xs="24">
|
||||||
<div class="flex flex-col items-center justify-center">
|
<div class="flex flex-col items-center justify-center">
|
||||||
<span class="imp">
|
<span class="text-[var(--el-color-primary)]">
|
||||||
1. 二级联动(不带“全部”选项)
|
1. 二级联动(不带“全部”选项)
|
||||||
<el-cascader
|
<el-cascader
|
||||||
v-model="selectedOptions1"
|
v-model="selectedOptions1"
|
||||||
@ -58,7 +58,7 @@ const handleChange = value => {
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xl="12" :lg="12" :md="24" :sm="24" :xs="24">
|
<el-col :xl="12" :lg="12" :md="24" :sm="24" :xs="24">
|
||||||
<div class="flex flex-col items-center justify-center mt-3">
|
<div class="flex flex-col items-center justify-center mt-3">
|
||||||
<span class="imp">
|
<span class="text-[var(--el-color-primary)]">
|
||||||
2. 二级联动(带有“全部”选项)
|
2. 二级联动(带有“全部”选项)
|
||||||
<el-cascader
|
<el-cascader
|
||||||
v-model="selectedOptions3"
|
v-model="selectedOptions3"
|
||||||
@ -87,7 +87,7 @@ const handleChange = value => {
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xl="12" :lg="12" :md="24" :sm="24" :xs="24">
|
<el-col :xl="12" :lg="12" :md="24" :sm="24" :xs="24">
|
||||||
<div class="flex flex-col items-center justify-center mt-3">
|
<div class="flex flex-col items-center justify-center mt-3">
|
||||||
<span class="imp">
|
<span class="text-[var(--el-color-primary)]">
|
||||||
3. 三级联动(不带“全部”选项)
|
3. 三级联动(不带“全部”选项)
|
||||||
<el-cascader
|
<el-cascader
|
||||||
v-model="selectedOptions2"
|
v-model="selectedOptions2"
|
||||||
@ -118,7 +118,7 @@ const handleChange = value => {
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xl="12" :lg="12" :md="24" :sm="24" :xs="24">
|
<el-col :xl="12" :lg="12" :md="24" :sm="24" :xs="24">
|
||||||
<div class="flex flex-col items-center justify-center mt-3">
|
<div class="flex flex-col items-center justify-center mt-3">
|
||||||
<span class="imp">
|
<span class="text-[var(--el-color-primary)]">
|
||||||
4. 三级联动(带"全部选项")
|
4. 三级联动(带"全部选项")
|
||||||
<el-cascader
|
<el-cascader
|
||||||
v-model="selectedOptions4"
|
v-model="selectedOptions4"
|
||||||
@ -150,9 +150,3 @@ const handleChange = value => {
|
|||||||
</el-row>
|
</el-row>
|
||||||
</el-card>
|
</el-card>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.imp {
|
|
||||||
color: var(--el-color-primary);
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<p class="mb-2">基本使用</p>
|
<p class="mb-2">基础用法</p>
|
||||||
<div v-contextmenu:contextmenu class="wrapper">
|
<div v-contextmenu:contextmenu class="wrapper">
|
||||||
<code>右键点击此区域</code>
|
<code>右键点击此区域</code>
|
||||||
</div>
|
</div>
|
||||||
|
@ -13,12 +13,12 @@ defineOptions({
|
|||||||
<el-card shadow="never">
|
<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>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<el-row :gutter="24">
|
<el-row :gutter="24">
|
||||||
<el-col :xs="24" :sm="10" :md="10" :lg="8" :xl="10">
|
<el-col :xs="24" :sm="10" :md="10" :lg="8" :xl="10">
|
||||||
<!-- 基本使用 -->
|
<!-- 基础用法 -->
|
||||||
<basic />
|
<basic />
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :sm="10" :md="10" :lg="8" :xl="10">
|
<el-col :xs="24" :sm="10" :md="10" :lg="8" :xl="10">
|
||||||
|
35
src/views/components/count-to.vue
Normal file
35
src/views/components/count-to.vue
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ReNormalCountTo, ReboundCountTo } from "@/components/ReCountTo";
|
||||||
|
|
||||||
|
defineOptions({
|
||||||
|
name: "CountTo"
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<el-card shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<div class="card-header">
|
||||||
|
<span class="font-medium">数字动画</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<ReNormalCountTo
|
||||||
|
prefix="$"
|
||||||
|
:duration="1000"
|
||||||
|
:color="'#409EFF'"
|
||||||
|
:fontSize="'2em'"
|
||||||
|
:startVal="1"
|
||||||
|
:endVal="1000"
|
||||||
|
/>
|
||||||
|
<br />
|
||||||
|
<ul class="flex">
|
||||||
|
<ReboundCountTo
|
||||||
|
v-for="(num, inx) of [1, 6, 6, 6]"
|
||||||
|
:key="inx"
|
||||||
|
:i="num"
|
||||||
|
:blur="inx"
|
||||||
|
:delay="inx + 1"
|
||||||
|
/>
|
||||||
|
</ul>
|
||||||
|
</el-card>
|
||||||
|
</template>
|
@ -1,36 +0,0 @@
|
|||||||
<script setup lang="ts">
|
|
||||||
import { ReNormalCountTo, ReboundCountTo } from "@/components/ReCountTo";
|
|
||||||
|
|
||||||
defineOptions({
|
|
||||||
name: "CountTo"
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<el-card shadow="never">
|
|
||||||
<template #header>
|
|
||||||
<div class="card-header">
|
|
||||||
<span class="font-medium">数字动画组件</span>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<div class="flex items-center">
|
|
||||||
<ReNormalCountTo
|
|
||||||
prefix="$"
|
|
||||||
:duration="1000"
|
|
||||||
:color="'#409EFF'"
|
|
||||||
:fontSize="'2em'"
|
|
||||||
:startVal="1"
|
|
||||||
:endVal="1000"
|
|
||||||
/>
|
|
||||||
<ul class="flex ml-8">
|
|
||||||
<ReboundCountTo
|
|
||||||
v-for="(num, inx) of [1, 6, 6, 6]"
|
|
||||||
:key="inx"
|
|
||||||
:i="num"
|
|
||||||
:blur="inx"
|
|
||||||
:delay="inx + 1"
|
|
||||||
/>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
</template>
|
|
@ -1,6 +1,6 @@
|
|||||||
<script setup lang="tsx">
|
<script setup lang="tsx">
|
||||||
import { ref } from "vue";
|
|
||||||
import avatar from "./avatar.png";
|
import avatar from "./avatar.png";
|
||||||
|
import { ref, onBeforeUnmount } from "vue";
|
||||||
import ReCropper from "@/components/ReCropper";
|
import ReCropper from "@/components/ReCropper";
|
||||||
import { formatBytes } from "@pureadmin/utils";
|
import { formatBytes } from "@pureadmin/utils";
|
||||||
|
|
||||||
@ -9,6 +9,7 @@ defineOptions({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const infos = ref();
|
const infos = ref();
|
||||||
|
const popoverRef = ref();
|
||||||
const refCropper = ref();
|
const refCropper = ref();
|
||||||
const showPopover = ref(false);
|
const showPopover = ref(false);
|
||||||
const cropperImg = ref<string>("");
|
const cropperImg = ref<string>("");
|
||||||
@ -18,6 +19,10 @@ function onCropper({ base64, blob, info }) {
|
|||||||
infos.value = info;
|
infos.value = info;
|
||||||
cropperImg.value = base64;
|
cropperImg.value = base64;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onBeforeUnmount(() => {
|
||||||
|
popoverRef.value.hide();
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -25,7 +30,7 @@ function onCropper({ base64, blob, info }) {
|
|||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">
|
<span class="font-medium">
|
||||||
图片裁剪组件,基于开源的
|
图片裁剪,基于开源的
|
||||||
<el-link
|
<el-link
|
||||||
href="https://fengyuanchen.github.io/cropperjs/"
|
href="https://fengyuanchen.github.io/cropperjs/"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
@ -37,11 +42,12 @@ function onCropper({ base64, blob, info }) {
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
<div v-loading="!showPopover" element-loading-background="transparent">
|
||||||
<el-popover
|
<el-popover
|
||||||
|
ref="popoverRef"
|
||||||
:visible="showPopover"
|
:visible="showPopover"
|
||||||
placement="right"
|
placement="right"
|
||||||
width="300px"
|
width="300px"
|
||||||
:teleported="false"
|
|
||||||
>
|
>
|
||||||
<template #reference>
|
<template #reference>
|
||||||
<ReCropper
|
<ReCropper
|
||||||
@ -71,5 +77,6 @@ function onCropper({ base64, blob, info }) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
</template>
|
</template>
|
||||||
|
@ -20,8 +20,8 @@ const router = useRouter();
|
|||||||
|
|
||||||
function onBaseClick() {
|
function onBaseClick() {
|
||||||
addDialog({
|
addDialog({
|
||||||
title: "基本使用",
|
title: "基础用法",
|
||||||
contentRenderer: () => <p>弹框内容-基本使用</p> // jsx 语法 (注意在.vue文件启用jsx语法,需要在script开启lang="tsx")
|
contentRenderer: () => <p>弹框内容-基础用法</p> // jsx 语法 (注意在.vue文件启用jsx语法,需要在script开启lang="tsx")
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -422,7 +422,7 @@ function onBeforeSureClick() {
|
|||||||
title: "点击底部确定按钮的回调",
|
title: "点击底部确定按钮的回调",
|
||||||
contentRenderer: () => (
|
contentRenderer: () => (
|
||||||
<p>
|
<p>
|
||||||
弹框内容-点击底部确定按钮的回调(会暂停弹框的关闭,经常用于新增、编辑弹框内容后调用接口)
|
弹框内容-点击底部确定按钮的回调(会暂停弹框的关闭,经常用于新增、修改弹框内容后调用接口)
|
||||||
</p>
|
</p>
|
||||||
),
|
),
|
||||||
beforeSure: (done, { options, index }) => {
|
beforeSure: (done, { options, index }) => {
|
||||||
@ -454,15 +454,16 @@ function onBeforeSureClick() {
|
|||||||
,采用函数式调用弹框组件(更多操作实例请参考
|
,采用函数式调用弹框组件(更多操作实例请参考
|
||||||
<span
|
<span
|
||||||
class="cursor-pointer text-primary"
|
class="cursor-pointer text-primary"
|
||||||
@click="router.push({ name: 'Dept' })"
|
@click="router.push({ name: 'SystemDept' })"
|
||||||
>系统管理页面</span
|
|
||||||
>
|
>
|
||||||
|
系统管理页面
|
||||||
|
</span>
|
||||||
)
|
)
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<el-space wrap>
|
<el-space wrap>
|
||||||
<el-button @click="onBaseClick"> 基本使用 </el-button>
|
<el-button @click="onBaseClick"> 基础用法 </el-button>
|
||||||
<el-button @click="onDraggableClick"> 可拖拽 </el-button>
|
<el-button @click="onDraggableClick"> 可拖拽 </el-button>
|
||||||
<el-button @click="onFullscreenClick"> 全屏 </el-button>
|
<el-button @click="onFullscreenClick"> 全屏 </el-button>
|
||||||
<el-button @click="onFullscreenIconClick"> 全屏按钮 </el-button>
|
<el-button @click="onFullscreenIconClick"> 全屏按钮 </el-button>
|
||||||
@ -510,7 +511,7 @@ function onBeforeSureClick() {
|
|||||||
点击底部取消按钮的回调(会暂停弹框的关闭)
|
点击底部取消按钮的回调(会暂停弹框的关闭)
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button @click="onBeforeSureClick">
|
<el-button @click="onBeforeSureClick">
|
||||||
点击底部确定按钮的回调(会暂停弹框的关闭,经常用于新增、编辑弹框内容后调用接口)
|
点击底部确定按钮的回调(会暂停弹框的关闭,经常用于新增、修改弹框内容后调用接口)
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-space>
|
</el-space>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
@ -16,6 +16,6 @@ const icon = ref("ep:add-location");
|
|||||||
<span class="font-medium">图标选择器</span>
|
<span class="font-medium">图标选择器</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<IconSelect v-model="icon" />
|
<IconSelect v-model="icon" class="w-[200px]" />
|
||||||
</el-card>
|
</el-card>
|
||||||
</template>
|
</template>
|
@ -76,7 +76,7 @@ watch(
|
|||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="font-medium">
|
<span class="font-medium">
|
||||||
JSON编辑器组件,采用开源的
|
JSON编辑器,采用开源的
|
||||||
<el-link
|
<el-link
|
||||||
href="https://github.com/leezng/vue-json-pretty"
|
href="https://github.com/leezng/vue-json-pretty"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
@ -87,7 +87,7 @@ watch(
|
|||||||
(支持大数据量)。
|
(支持大数据量)。
|
||||||
</span>
|
</span>
|
||||||
<span class="font-medium">
|
<span class="font-medium">
|
||||||
当然我们还有一款代码编辑器组件推荐(这里就不做演示了),采用开源的
|
当然还有一款代码编辑器推荐(这里就不做演示了),采用开源的
|
||||||
<el-link
|
<el-link
|
||||||
href="https://github.com/surmon-china/vue-codemirror"
|
href="https://github.com/surmon-china/vue-codemirror"
|
||||||
target="_blank"
|
target="_blank"
|
@ -14,7 +14,7 @@ defineOptions({
|
|||||||
<el-card shadow="never">
|
<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"> 消息提示 </span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -53,7 +53,7 @@ function changeDirection(val) {
|
|||||||
<el-card class="box-card" shadow="never">
|
<el-card class="box-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>
|
||||||
<el-button
|
<el-button
|
||||||
class="button"
|
class="button"
|
||||||
link
|
link
|
@ -30,6 +30,30 @@ const optionsBasis: Array<OptionsType> = [
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/** tooltip 提示 */
|
||||||
|
const optionsTooltip: Array<OptionsType> = [
|
||||||
|
{
|
||||||
|
label: "周一",
|
||||||
|
tip: "周一启航,新的篇章"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "周二",
|
||||||
|
tip: "周二律动,携手共进"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "周三",
|
||||||
|
tip: "周三昂扬,激情不减"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "周四",
|
||||||
|
tip: "周四精进,事半功倍"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "周五",
|
||||||
|
tip: "周五喜悦,收尾归档"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
/** 禁用 */
|
/** 禁用 */
|
||||||
const optionsDisabled: Array<OptionsType> = [
|
const optionsDisabled: Array<OptionsType> = [
|
||||||
{
|
{
|
||||||
@ -51,7 +75,7 @@ const optionsDisabled: Array<OptionsType> = [
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
/** 设置图标 */
|
/** 可设置图标 */
|
||||||
const optionsIcon: Array<OptionsType> = [
|
const optionsIcon: Array<OptionsType> = [
|
||||||
{
|
{
|
||||||
label: "周一",
|
label: "周一",
|
||||||
@ -65,8 +89,7 @@ const optionsIcon: Array<OptionsType> = [
|
|||||||
icon: "terminalWindowLine"
|
icon: "terminalWindowLine"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "周四",
|
label: "周四"
|
||||||
icon: "streamline-emojis:airplane"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "周五",
|
label: "周五",
|
||||||
@ -99,7 +122,7 @@ const optionsLabel: Array<OptionsType> = [
|
|||||||
label: () => (
|
label: () => (
|
||||||
<div>
|
<div>
|
||||||
{h(useRenderIcon(HomeFilled), {
|
{h(useRenderIcon(HomeFilled), {
|
||||||
class: "m-auto w-[20px] h-[20px]"
|
class: "m-auto mt-1 w-[18px] h-[18px]"
|
||||||
})}
|
})}
|
||||||
<p>周一</p>
|
<p>周一</p>
|
||||||
</div>
|
</div>
|
||||||
@ -109,7 +132,7 @@ const optionsLabel: Array<OptionsType> = [
|
|||||||
label: () => (
|
label: () => (
|
||||||
<div>
|
<div>
|
||||||
{h(useRenderIcon("terminalWindowLine"), {
|
{h(useRenderIcon("terminalWindowLine"), {
|
||||||
class: "m-auto w-[20px] h-[20px]"
|
class: "m-auto mt-1 w-[18px] h-[18px]"
|
||||||
})}
|
})}
|
||||||
<p>周二</p>
|
<p>周二</p>
|
||||||
</div>
|
</div>
|
||||||
@ -119,7 +142,7 @@ const optionsLabel: Array<OptionsType> = [
|
|||||||
label: () => (
|
label: () => (
|
||||||
<div>
|
<div>
|
||||||
{h(useRenderIcon("streamline-emojis:cow-face"), {
|
{h(useRenderIcon("streamline-emojis:cow-face"), {
|
||||||
class: "m-auto w-[20px] h-[20px]"
|
class: "m-auto mt-1 w-[18px] h-[18px]"
|
||||||
})}
|
})}
|
||||||
<p>周三</p>
|
<p>周三</p>
|
||||||
</div>
|
</div>
|
||||||
@ -158,6 +181,7 @@ function onChange({ index, option }) {
|
|||||||
<span class="font-medium">分段控制器</span>
|
<span class="font-medium">分段控制器</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
<el-scrollbar>
|
||||||
<p class="mb-2">
|
<p class="mb-2">
|
||||||
基础用法(v-model)<span class="text-primary">
|
基础用法(v-model)<span class="text-primary">
|
||||||
{{ optionsBasis[value].label }}
|
{{ optionsBasis[value].label }}
|
||||||
@ -165,10 +189,16 @@ function onChange({ index, option }) {
|
|||||||
</p>
|
</p>
|
||||||
<Segmented v-model="value" :options="optionsBasis" />
|
<Segmented v-model="value" :options="optionsBasis" />
|
||||||
<el-divider />
|
<el-divider />
|
||||||
|
<p class="mb-2">tooltip 提示</p>
|
||||||
|
<Segmented :options="optionsTooltip" />
|
||||||
|
<el-divider />
|
||||||
|
<p class="mb-2">change 事件</p>
|
||||||
|
<Segmented :options="optionsChange" @change="onChange" />
|
||||||
|
<el-divider />
|
||||||
<p class="mb-2">禁用</p>
|
<p class="mb-2">禁用</p>
|
||||||
<Segmented :options="optionsDisabled" />
|
<Segmented :options="optionsDisabled" />
|
||||||
<el-divider />
|
<el-divider />
|
||||||
<p class="mb-2">设置图标</p>
|
<p class="mb-2">可设置图标</p>
|
||||||
<Segmented :options="optionsIcon" />
|
<Segmented :options="optionsIcon" />
|
||||||
<el-divider />
|
<el-divider />
|
||||||
<p class="mb-2">只设置图标</p>
|
<p class="mb-2">只设置图标</p>
|
||||||
@ -176,8 +206,12 @@ function onChange({ index, option }) {
|
|||||||
<el-divider />
|
<el-divider />
|
||||||
<p class="mb-2">自定义渲染</p>
|
<p class="mb-2">自定义渲染</p>
|
||||||
<Segmented :options="optionsLabel" />
|
<Segmented :options="optionsLabel" />
|
||||||
<el-divider />
|
</el-scrollbar>
|
||||||
<p class="mb-2">change事件</p>
|
|
||||||
<Segmented :options="optionsChange" @change="onChange" />
|
|
||||||
</el-card>
|
</el-card>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
:deep(.el-divider--horizontal) {
|
||||||
|
margin: 17px 0;
|
||||||
|
}
|
||||||
|
</style>
|
@ -9,7 +9,7 @@ defineOptions({
|
|||||||
const selectRange = ref<string>("");
|
const selectRange = ref<string>("");
|
||||||
const dataLists = ref([
|
const dataLists = ref([
|
||||||
{
|
{
|
||||||
title: "基本使用",
|
title: "基础用法",
|
||||||
echo: [],
|
echo: [],
|
||||||
disabled: false
|
disabled: false
|
||||||
},
|
},
|
@ -23,7 +23,7 @@ const settingTB: ContextProps = reactive({
|
|||||||
<el-card shadow="never">
|
<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>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div class="split-pane">
|
<div class="split-pane">
|
||||||
@ -31,17 +31,21 @@ const settingTB: ContextProps = reactive({
|
|||||||
<!-- #paneL 表示指定该组件为左侧面板 -->
|
<!-- #paneL 表示指定该组件为左侧面板 -->
|
||||||
<template #paneL>
|
<template #paneL>
|
||||||
<!-- 自定义左侧面板的内容 -->
|
<!-- 自定义左侧面板的内容 -->
|
||||||
|
<el-scrollbar>
|
||||||
<div class="dv-a">A</div>
|
<div class="dv-a">A</div>
|
||||||
|
</el-scrollbar>
|
||||||
</template>
|
</template>
|
||||||
<!-- #paneR 表示指定该组件为右侧面板 -->
|
<!-- #paneR 表示指定该组件为右侧面板 -->
|
||||||
<template #paneR>
|
<template #paneR>
|
||||||
<!-- 再次将右侧面板进行拆分 -->
|
<!-- 再次将右侧面板进行拆分 -->
|
||||||
<splitpane :splitSet="settingTB">
|
<splitpane :splitSet="settingTB">
|
||||||
<template #paneL>
|
<template #paneL>
|
||||||
<div class="dv-b">B</div>
|
<el-scrollbar><div class="dv-b">B</div></el-scrollbar>
|
||||||
</template>
|
</template>
|
||||||
<template #paneR>
|
<template #paneR>
|
||||||
|
<el-scrollbar>
|
||||||
<div class="dv-c">C</div>
|
<div class="dv-c">C</div>
|
||||||
|
</el-scrollbar>
|
||||||
</template>
|
</template>
|
||||||
</splitpane>
|
</splitpane>
|
||||||
</template>
|
</template>
|
||||||
@ -51,36 +55,25 @@ const settingTB: ContextProps = reactive({
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
$W: 100%;
|
|
||||||
$H: 70vh;
|
|
||||||
|
|
||||||
.split-pane {
|
.split-pane {
|
||||||
width: 70vw;
|
width: 100%;
|
||||||
height: $H;
|
height: calc(100vh - 260px);
|
||||||
font-size: 50px;
|
font-size: 50px;
|
||||||
color: #fff;
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
border: 1px solid #e5e6eb;
|
border: 1px solid #e5e6eb;
|
||||||
|
|
||||||
.dv-a,
|
.dv-a {
|
||||||
.dv-b,
|
padding-top: 30vh;
|
||||||
.dv-c {
|
|
||||||
width: $W;
|
|
||||||
height: $W;
|
|
||||||
line-height: $H;
|
|
||||||
color: rgba($color: dodgerblue, $alpha: 80%);
|
color: rgba($color: dodgerblue, $alpha: 80%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.dv-b,
|
|
||||||
.dv-c {
|
|
||||||
line-height: 250px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dv-b {
|
.dv-b {
|
||||||
|
padding-top: 10vh;
|
||||||
color: rgba($color: #000, $alpha: 80%);
|
color: rgba($color: #000, $alpha: 80%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.dv-c {
|
.dv-c {
|
||||||
|
padding-top: 18vh;
|
||||||
color: rgba($color: #ce272d, $alpha: 80%);
|
color: rgba($color: #ce272d, $alpha: 80%);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { markRaw } from "vue";
|
import { markRaw } from "vue";
|
||||||
|
import { randomGradient } from "@pureadmin/utils";
|
||||||
import { useRenderFlicker } from "@/components/ReFlicker";
|
import { useRenderFlicker } from "@/components/ReFlicker";
|
||||||
import { useRenderIcon } from "@/components/ReIcon/src/hooks";
|
import { useRenderIcon } from "@/components/ReIcon/src/hooks";
|
||||||
import Iphone from "@iconify-icons/ep/iphone";
|
import Iphone from "@iconify-icons/ep/iphone";
|
||||||
@ -11,15 +12,26 @@ defineOptions({
|
|||||||
const { lastBuildTime } = __APP_INFO__;
|
const { lastBuildTime } = __APP_INFO__;
|
||||||
const activities = [
|
const activities = [
|
||||||
{
|
{
|
||||||
content: "支持圆点闪动",
|
content: "支持圆点发光",
|
||||||
timestamp: lastBuildTime,
|
timestamp: lastBuildTime,
|
||||||
icon: markRaw(useRenderFlicker())
|
icon: markRaw(useRenderFlicker())
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
content: "支持方形闪动",
|
content: "支持方形发光",
|
||||||
timestamp: lastBuildTime,
|
timestamp: lastBuildTime,
|
||||||
icon: markRaw(useRenderFlicker({ borderRadius: 0, background: "#67C23A" }))
|
icon: markRaw(useRenderFlicker({ borderRadius: 0, background: "#67C23A" }))
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
content: "支持渐变发光",
|
||||||
|
timestamp: lastBuildTime,
|
||||||
|
icon: markRaw(
|
||||||
|
useRenderFlicker({
|
||||||
|
background: randomGradient({
|
||||||
|
randomizeHue: true
|
||||||
|
})
|
||||||
|
})
|
||||||
|
)
|
||||||
|
},
|
||||||
{
|
{
|
||||||
content: "支持默认颜色",
|
content: "支持默认颜色",
|
||||||
timestamp: lastBuildTime
|
timestamp: lastBuildTime
|
||||||
@ -70,7 +82,7 @@ const activities = [
|
|||||||
placement="bottom"
|
placement="bottom"
|
||||||
>
|
>
|
||||||
<div class="message">
|
<div class="message">
|
||||||
vue-pure-admin是基于Vue3.0+TypeScript+Vite+Element-Plus编写的一套后台管理系统
|
vue-pure-admin 是一款开源免费且开箱即用的中后台管理系统模版
|
||||||
</div>
|
</div>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
@ -56,7 +56,7 @@ export function useColumns() {
|
|||||||
];
|
];
|
||||||
|
|
||||||
const handleEdit = (index: number, row) => {
|
const handleEdit = (index: number, row) => {
|
||||||
message(`您编辑了第 ${index} 行,数据为:${JSON.stringify(row)}`, {
|
message(`您修改了第 ${index} 行,数据为:${JSON.stringify(row)}`, {
|
||||||
type: "success"
|
type: "success"
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -15,7 +15,7 @@ export function useColumns() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const handleEdit = (index: number, row) => {
|
const handleEdit = (index: number, row) => {
|
||||||
message(`您编辑了第 ${index} 行,数据为:${JSON.stringify(row)}`, {
|
message(`您修改了第 ${index} 行,数据为:${JSON.stringify(row)}`, {
|
||||||
type: "success"
|
type: "success"
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -30,11 +30,11 @@ export function useColumns() {
|
|||||||
disabled: true
|
disabled: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "编辑",
|
label: "修改",
|
||||||
tips: "Edit",
|
tips: "Edit",
|
||||||
fn: row =>
|
fn: row =>
|
||||||
message(
|
message(
|
||||||
`您编辑了第 ${
|
`您修改了第 ${
|
||||||
dataList.value.findIndex(v => v.id === row.id) + 1
|
dataList.value.findIndex(v => v.id === row.id) + 1
|
||||||
} 行,数据为:${JSON.stringify(row)}`,
|
} 行,数据为:${JSON.stringify(row)}`,
|
||||||
{
|
{
|
||||||
|
@ -5,11 +5,11 @@ import { clone, delay } from "@pureadmin/utils";
|
|||||||
import EditPen from "@iconify-icons/ep/edit-pen";
|
import EditPen from "@iconify-icons/ep/edit-pen";
|
||||||
import Check from "@iconify-icons/ep/check";
|
import Check from "@iconify-icons/ep/check";
|
||||||
|
|
||||||
// 温馨提示:编辑整行方法雷同,将cellRenderer后面渲染的组件抽出来做对应处理即可
|
// 温馨提示:修改整行方法雷同,将cellRenderer后面渲染的组件抽出来做对应处理即可
|
||||||
export function useColumns() {
|
export function useColumns() {
|
||||||
// 编辑值(可多个)
|
// 修改值(可多个)
|
||||||
const inputValMap = ref({});
|
const inputValMap = ref({});
|
||||||
// 是否正处于编辑状态(可多个)
|
// 是否正处于修改状态(可多个)
|
||||||
const editStatus = ref({});
|
const editStatus = ref({});
|
||||||
// 当前激活的单元格(唯一)
|
// 当前激活的单元格(唯一)
|
||||||
const activeIndex = ref(-1);
|
const activeIndex = ref(-1);
|
||||||
@ -43,7 +43,7 @@ export function useColumns() {
|
|||||||
|
|
||||||
const columns: TableColumnList = [
|
const columns: TableColumnList = [
|
||||||
{
|
{
|
||||||
label: "ID(可编辑)",
|
label: "ID(可修改)",
|
||||||
prop: "id",
|
prop: "id",
|
||||||
// class="flex-bc" flex-bc 代表 flex justify-between items-center 具体看 src/style/tailwind.css 文件
|
// class="flex-bc" flex-bc 代表 flex justify-between items-center 具体看 src/style/tailwind.css 文件
|
||||||
cellRenderer: ({ row, index }) => (
|
cellRenderer: ({ row, index }) => (
|
||||||
@ -93,7 +93,7 @@ export function useColumns() {
|
|||||||
inputValMap.value[index] = Object.assign({}, inputValMap.value[index], {
|
inputValMap.value[index] = Object.assign({}, inputValMap.value[index], {
|
||||||
value: id
|
value: id
|
||||||
});
|
});
|
||||||
// 处于编辑状态
|
// 处于修改状态
|
||||||
editStatus.value[index] = Object.assign({}, editStatus.value[index], {
|
editStatus.value[index] = Object.assign({}, editStatus.value[index], {
|
||||||
editing: true
|
editing: true
|
||||||
});
|
});
|
||||||
@ -112,14 +112,14 @@ export function useColumns() {
|
|||||||
function onSure(index) {
|
function onSure(index) {
|
||||||
dataList.value[index].id = inputValMap.value[index].value;
|
dataList.value[index].id = inputValMap.value[index].value;
|
||||||
message(
|
message(
|
||||||
`您编辑了第 ${index + 1} 行,编辑后数据为:${JSON.stringify(
|
`您修改了第 ${index + 1} 行,修改后数据为:${JSON.stringify(
|
||||||
dataList.value[index]
|
dataList.value[index]
|
||||||
)}`,
|
)}`,
|
||||||
{
|
{
|
||||||
type: "success"
|
type: "success"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
// 编辑状态关闭
|
// 修改状态关闭
|
||||||
editStatus.value[index] = Object.assign({}, editStatus.value[index], {
|
editStatus.value[index] = Object.assign({}, editStatus.value[index], {
|
||||||
editing: false
|
editing: false
|
||||||
});
|
});
|
||||||
|
@ -53,7 +53,7 @@ export const list = [
|
|||||||
{
|
{
|
||||||
key: "edit",
|
key: "edit",
|
||||||
content: rendContent("edit"),
|
content: rendContent("edit"),
|
||||||
title: "单元格编辑",
|
title: "单元格修改",
|
||||||
component: Edit
|
component: Edit
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -10,7 +10,7 @@ import Refresh from "@iconify-icons/ep/refresh";
|
|||||||
import AddFill from "@iconify-icons/ri/add-circle-line";
|
import AddFill from "@iconify-icons/ri/add-circle-line";
|
||||||
|
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: "Dept"
|
name: "SystemDept"
|
||||||
});
|
});
|
||||||
|
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
@ -71,7 +71,7 @@ const {
|
|||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<PureTableBar
|
<PureTableBar
|
||||||
title="部门列表(仅演示,操作后不生效)"
|
title="部门管理(仅演示,操作后不生效)"
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
:tableRef="tableRef?.getTableRef()"
|
:tableRef="tableRef?.getTableRef()"
|
||||||
@refresh="onSearch"
|
@refresh="onSearch"
|
||||||
@ -111,10 +111,20 @@ const {
|
|||||||
link
|
link
|
||||||
type="primary"
|
type="primary"
|
||||||
:size="size"
|
:size="size"
|
||||||
:icon="useRenderIcon(EditPen)"
|
:icon="useRenderIcon(AddFill)"
|
||||||
@click="openDialog('编辑', row)"
|
@click="openDialog('新增', { parentId: row.id } as any)"
|
||||||
>
|
>
|
||||||
编辑
|
新增
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
class="reset-margin"
|
||||||
|
link
|
||||||
|
type="primary"
|
||||||
|
:size="size"
|
||||||
|
:icon="useRenderIcon(EditPen)"
|
||||||
|
@click="openDialog('修改', row)"
|
||||||
|
>
|
||||||
|
修改
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-popconfirm
|
<el-popconfirm
|
||||||
:title="`是否确认删除部门名称为${row.name}的这条数据`"
|
:title="`是否确认删除部门名称为${row.name}的这条数据`"
|
||||||
|
@ -57,7 +57,7 @@ export function useDept() {
|
|||||||
{
|
{
|
||||||
label: "操作",
|
label: "操作",
|
||||||
fixed: "right",
|
fixed: "right",
|
||||||
width: 160,
|
width: 210,
|
||||||
slot: "operation"
|
slot: "operation"
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
@ -141,7 +141,7 @@ export function useDept() {
|
|||||||
// 实际开发先调用新增接口,再进行下面操作
|
// 实际开发先调用新增接口,再进行下面操作
|
||||||
chores();
|
chores();
|
||||||
} else {
|
} else {
|
||||||
// 实际开发先调用编辑接口,再进行下面操作
|
// 实际开发先调用修改接口,再进行下面操作
|
||||||
chores();
|
chores();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -168,7 +168,7 @@ export function useDept() {
|
|||||||
onSearch,
|
onSearch,
|
||||||
/** 重置 */
|
/** 重置 */
|
||||||
resetForm,
|
resetForm,
|
||||||
/** 新增、编辑部门 */
|
/** 新增、修改部门 */
|
||||||
openDialog,
|
openDialog,
|
||||||
/** 删除部门 */
|
/** 删除部门 */
|
||||||
handleDelete,
|
handleDelete,
|
||||||
|
@ -13,7 +13,7 @@ import Menu from "@iconify-icons/ep/menu";
|
|||||||
import AddFill from "@iconify-icons/ri/add-circle-line";
|
import AddFill from "@iconify-icons/ri/add-circle-line";
|
||||||
|
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: "Role"
|
name: "SystemRole"
|
||||||
});
|
});
|
||||||
|
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
@ -87,7 +87,7 @@ const {
|
|||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<PureTableBar
|
<PureTableBar
|
||||||
title="角色列表(仅演示,操作后不生效)"
|
title="角色管理(仅演示,操作后不生效)"
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
@refresh="onSearch"
|
@refresh="onSearch"
|
||||||
>
|
>
|
||||||
@ -127,7 +127,7 @@ const {
|
|||||||
type="primary"
|
type="primary"
|
||||||
:size="size"
|
:size="size"
|
||||||
:icon="useRenderIcon(EditPen)"
|
:icon="useRenderIcon(EditPen)"
|
||||||
@click="openDialog('编辑', row)"
|
@click="openDialog('修改', row)"
|
||||||
>
|
>
|
||||||
修改
|
修改
|
||||||
</el-button>
|
</el-button>
|
||||||
|
@ -200,7 +200,7 @@ export function useRole() {
|
|||||||
// 实际开发先调用新增接口,再进行下面操作
|
// 实际开发先调用新增接口,再进行下面操作
|
||||||
chores();
|
chores();
|
||||||
} else {
|
} else {
|
||||||
// 实际开发先调用编辑接口,再进行下面操作
|
// 实际开发先调用修改接口,再进行下面操作
|
||||||
chores();
|
chores();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ import Refresh from "@iconify-icons/ep/refresh";
|
|||||||
import AddFill from "@iconify-icons/ri/add-circle-line";
|
import AddFill from "@iconify-icons/ri/add-circle-line";
|
||||||
|
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: "User"
|
name: "SystemUser"
|
||||||
});
|
});
|
||||||
|
|
||||||
const treeRef = ref();
|
const treeRef = ref();
|
||||||
@ -173,7 +173,7 @@ const {
|
|||||||
type="primary"
|
type="primary"
|
||||||
:size="size"
|
:size="size"
|
||||||
:icon="useRenderIcon(EditPen)"
|
:icon="useRenderIcon(EditPen)"
|
||||||
@click="openDialog('编辑', row)"
|
@click="openDialog('修改', row)"
|
||||||
>
|
>
|
||||||
修改
|
修改
|
||||||
</el-button>
|
</el-button>
|
||||||
|
@ -342,7 +342,7 @@ export function useUser(tableRef: Ref, treeRef: Ref) {
|
|||||||
// 实际开发先调用新增接口,再进行下面操作
|
// 实际开发先调用新增接口,再进行下面操作
|
||||||
chores();
|
chores();
|
||||||
} else {
|
} else {
|
||||||
// 实际开发先调用编辑接口,再进行下面操作
|
// 实际开发先调用修改接口,再进行下面操作
|
||||||
chores();
|
chores();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2
types/router.d.ts
vendored
2
types/router.d.ts
vendored
@ -32,7 +32,7 @@ declare global {
|
|||||||
frameSrc?: string;
|
frameSrc?: string;
|
||||||
/** `iframe`页是否开启首次加载动画(默认`true`)`可选` */
|
/** `iframe`页是否开启首次加载动画(默认`true`)`可选` */
|
||||||
frameLoading?: boolean;
|
frameLoading?: boolean;
|
||||||
/** 页面加载动画(有两种形式,一种直接采用vue内置的`transitions`动画,另一种是使用`animate.css`写进、离场动画)`可选` */
|
/** 页面加载动画(两种模式,第二种权重更高,第一种直接采用`vue`内置的`transitions`动画,第二种是使用`animate.css`编写进、离场动画,平台更推荐使用第二种模式,已经内置了`animate.css`,直接写对应的动画名即可)`可选` */
|
||||||
transition?: {
|
transition?: {
|
||||||
/**
|
/**
|
||||||
* @description 当前路由动画效果
|
* @description 当前路由动画效果
|
||||||
|
Loading…
x
Reference in New Issue
Block a user