@deppon/deppon-template 2.4.3 → 2.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1166,9 +1166,10 @@ body .el-overlay-dialog,
|
|
|
1166
1166
|
width: 100%;
|
|
1167
1167
|
height: 100%;
|
|
1168
1168
|
overflow: hidden;
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1169
|
+
--pro-layout-header-bg: var(--el-bg-color, #ffffff);
|
|
1170
|
+
--pro-layout-tags-bar-bg: var(--pro-layout-header-bg);
|
|
1171
|
+
--pro-layout-main-bg: var(--el-bg-color-page, #f2f3f5);
|
|
1172
|
+
background: #fff !important;
|
|
1172
1173
|
}
|
|
1173
1174
|
.pro-layout__sider {
|
|
1174
1175
|
display: flex;
|
|
@@ -1181,9 +1182,6 @@ body .el-overlay-dialog,
|
|
|
1181
1182
|
box-shadow: 2px 0 8px var(--pro-shadow-color-sider, rgba(0, 0, 0, 0.12));
|
|
1182
1183
|
transition: width 0.3s ease, transform 0.3s ease;
|
|
1183
1184
|
flex-shrink: 0;
|
|
1184
|
-
/* 去除菜单组右侧的竖线 */
|
|
1185
|
-
/* 直接针对 Element Plus 的 .el-menu 类设置样式 */
|
|
1186
|
-
/* 确保 .pro-layout__menu 类也能正确匹配 */
|
|
1187
1185
|
}
|
|
1188
1186
|
.pro-layout__sider .el-scrollbar__view {
|
|
1189
1187
|
overflow: visible;
|
|
@@ -1203,8 +1201,6 @@ body .el-overlay-dialog,
|
|
|
1203
1201
|
}
|
|
1204
1202
|
.pro-layout__sider .pro-layout__menu-group {
|
|
1205
1203
|
border-right: none !important;
|
|
1206
|
-
/* 确保菜单项也没有右侧边框 */
|
|
1207
|
-
/* 直接针对菜单组内的 Element Plus 菜单设置样式 */
|
|
1208
1204
|
}
|
|
1209
1205
|
.pro-layout__sider .pro-layout__menu-group::after,
|
|
1210
1206
|
.pro-layout__sider .pro-layout__menu-group::before {
|
|
@@ -1403,8 +1399,6 @@ body .el-overlay-dialog,
|
|
|
1403
1399
|
border-bottom: 1px solid var(--el-border-color-lighter, #f0f0f0) !important;
|
|
1404
1400
|
margin-bottom: 8px;
|
|
1405
1401
|
margin-top: -1px;
|
|
1406
|
-
/* 确保边框重叠时不会出现双边框 */
|
|
1407
|
-
/* 收缩时居中显示首字符 */
|
|
1408
1402
|
}
|
|
1409
1403
|
.pro-layout__menu-group-header-left {
|
|
1410
1404
|
display: flex;
|
|
@@ -1466,7 +1460,6 @@ body .el-overlay-dialog,
|
|
|
1466
1460
|
background-color: transparent;
|
|
1467
1461
|
font-weight: 400;
|
|
1468
1462
|
font-family: var(--pro-font-family, 'PingFangSC-Regular') !important;
|
|
1469
|
-
/* 常用菜单项样式 */
|
|
1470
1463
|
}
|
|
1471
1464
|
.pro-layout__menu--common .el-menu-item .el-menu-item__title {
|
|
1472
1465
|
display: flex;
|
|
@@ -1509,14 +1502,11 @@ body .el-overlay-dialog,
|
|
|
1509
1502
|
}
|
|
1510
1503
|
.pro-layout__header {
|
|
1511
1504
|
padding: 0 !important;
|
|
1512
|
-
background:
|
|
1513
|
-
backdrop-filter: blur(10px);
|
|
1505
|
+
background: var(--pro-layout-header-bg) !important;
|
|
1514
1506
|
position: relative;
|
|
1515
1507
|
z-index: 100;
|
|
1516
1508
|
width: 100vw;
|
|
1517
1509
|
border-bottom: 1px solid rgba(39, 82, 173, 0.08) !important;
|
|
1518
|
-
box-shadow: 0 8px 24px rgba(31, 56, 104, 0.06);
|
|
1519
|
-
/* 覆盖 Element Plus 默认的按钮间距 */
|
|
1520
1510
|
}
|
|
1521
1511
|
.pro-layout__header--fixed {
|
|
1522
1512
|
position: fixed;
|
|
@@ -1524,8 +1514,6 @@ body .el-overlay-dialog,
|
|
|
1524
1514
|
left: 0;
|
|
1525
1515
|
right: 0;
|
|
1526
1516
|
z-index: 1000;
|
|
1527
|
-
border-bottom: 1px solid rgba(39, 82, 173, 0.08) !important;
|
|
1528
|
-
box-shadow: 0 8px 24px rgba(31, 56, 104, 0.06);
|
|
1529
1517
|
}
|
|
1530
1518
|
.pro-layout__header-content {
|
|
1531
1519
|
display: flex;
|
|
@@ -1672,8 +1660,8 @@ body .el-overlay-dialog,
|
|
|
1672
1660
|
transition: all 0.2s ease !important;
|
|
1673
1661
|
}
|
|
1674
1662
|
.pro-layout__top-menu .el-menu-item:hover {
|
|
1675
|
-
color: #
|
|
1676
|
-
background:
|
|
1663
|
+
color: var(--el-color-primary, #409eff) !important;
|
|
1664
|
+
background: transparent !important;
|
|
1677
1665
|
}
|
|
1678
1666
|
.pro-layout__top-menu .el-menu-item.is-active {
|
|
1679
1667
|
background: linear-gradient(135deg, rgba(57, 124, 255, 0.18), rgba(108, 74, 255, 0.15)) !important;
|
|
@@ -1741,25 +1729,30 @@ body .el-overlay-dialog,
|
|
|
1741
1729
|
.pro-layout__tags-view {
|
|
1742
1730
|
flex-shrink: 0;
|
|
1743
1731
|
height: auto !important;
|
|
1744
|
-
|
|
1745
|
-
|
|
1732
|
+
padding: 0 !important;
|
|
1733
|
+
margin: 0 !important;
|
|
1734
|
+
display: flex;
|
|
1735
|
+
flex-direction: column;
|
|
1736
|
+
background: var(--pro-layout-header-bg) !important;
|
|
1746
1737
|
border-bottom: none !important;
|
|
1747
1738
|
overflow: visible;
|
|
1748
1739
|
}
|
|
1749
1740
|
.pro-layout__tags-menu {
|
|
1741
|
+
--el-menu-bg-color: var(--pro-layout-header-bg) !important;
|
|
1750
1742
|
display: flex !important;
|
|
1751
|
-
|
|
1743
|
+
flex: 1 1 auto;
|
|
1744
|
+
align-self: stretch;
|
|
1745
|
+
align-items: flex-end;
|
|
1752
1746
|
flex-wrap: nowrap !important;
|
|
1753
1747
|
overflow-x: auto !important;
|
|
1754
|
-
overflow-y:
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
margin: 8px 14px 6px;
|
|
1758
|
-
border-radius: 12px;
|
|
1748
|
+
overflow-y: visible !important;
|
|
1749
|
+
padding: 0 !important;
|
|
1750
|
+
margin: 0 !important;
|
|
1759
1751
|
border: none !important;
|
|
1760
1752
|
outline: none;
|
|
1761
|
-
background:
|
|
1762
|
-
|
|
1753
|
+
background: var(--pro-layout-header-bg) !important;
|
|
1754
|
+
min-height: 100%;
|
|
1755
|
+
width: 100%;
|
|
1763
1756
|
height: auto !important;
|
|
1764
1757
|
}
|
|
1765
1758
|
.pro-layout__tags-menu.el-menu.el-menu--horizontal {
|
|
@@ -1769,45 +1762,94 @@ body .el-overlay-dialog,
|
|
|
1769
1762
|
}
|
|
1770
1763
|
.pro-layout__tags-menu .el-menu-item {
|
|
1771
1764
|
flex: 0 0 auto;
|
|
1772
|
-
height:
|
|
1773
|
-
line-height:
|
|
1774
|
-
margin-right:
|
|
1765
|
+
height: 36px !important;
|
|
1766
|
+
line-height: 36px !important;
|
|
1767
|
+
margin-right: 4px !important;
|
|
1775
1768
|
margin-top: 0;
|
|
1776
1769
|
margin-bottom: 0;
|
|
1777
1770
|
padding: 0 12px !important;
|
|
1778
|
-
border-radius:
|
|
1771
|
+
border-radius: 10px 10px 0 0 !important;
|
|
1779
1772
|
border: none !important;
|
|
1780
1773
|
border-bottom: none !important;
|
|
1781
1774
|
background: transparent !important;
|
|
1782
|
-
transition:
|
|
1775
|
+
transition: color 0.2s ease;
|
|
1783
1776
|
position: relative;
|
|
1784
1777
|
cursor: pointer;
|
|
1785
1778
|
display: flex;
|
|
1786
1779
|
align-items: center;
|
|
1787
1780
|
}
|
|
1788
|
-
.pro-layout__tags-menu .el-menu-item:not(
|
|
1789
|
-
|
|
1790
|
-
}
|
|
1791
|
-
.pro-layout__tags-menu .el-menu-item:hover {
|
|
1792
|
-
background: rgba(78, 138, 255, 0.1) !important;
|
|
1781
|
+
.pro-layout__tags-menu .el-menu-item:not(.is-active):hover {
|
|
1782
|
+
background: transparent !important;
|
|
1793
1783
|
}
|
|
1794
1784
|
.pro-layout__tags-menu .el-menu-item.is-active {
|
|
1785
|
+
z-index: 2;
|
|
1795
1786
|
border: none !important;
|
|
1796
|
-
background:
|
|
1797
|
-
box-shadow:
|
|
1787
|
+
background: var(--pro-layout-main-bg) !important;
|
|
1788
|
+
box-shadow: none !important;
|
|
1798
1789
|
border-bottom: none !important;
|
|
1799
1790
|
overflow: visible;
|
|
1800
1791
|
}
|
|
1792
|
+
.pro-layout__tags-menu .el-menu-item.is-active::before {
|
|
1793
|
+
content: '';
|
|
1794
|
+
position: absolute;
|
|
1795
|
+
left: -8px;
|
|
1796
|
+
bottom: 0;
|
|
1797
|
+
width: 8px;
|
|
1798
|
+
height: 8px;
|
|
1799
|
+
background: var(--pro-layout-tags-bar-bg);
|
|
1800
|
+
border-bottom-right-radius: 8px;
|
|
1801
|
+
box-shadow: 2px 2px 0 0 var(--pro-layout-main-bg);
|
|
1802
|
+
}
|
|
1803
|
+
.pro-layout__tags-menu .el-menu-item.is-active::after {
|
|
1804
|
+
content: '';
|
|
1805
|
+
position: absolute;
|
|
1806
|
+
right: -8px;
|
|
1807
|
+
bottom: 0;
|
|
1808
|
+
width: 8px;
|
|
1809
|
+
height: 8px;
|
|
1810
|
+
background: var(--pro-layout-tags-bar-bg);
|
|
1811
|
+
border-bottom-left-radius: 8px;
|
|
1812
|
+
box-shadow: -2px 2px 0 0 var(--pro-layout-main-bg);
|
|
1813
|
+
}
|
|
1814
|
+
.pro-layout__tags-menu .pro-layout__tag-item--affix {
|
|
1815
|
+
padding: 0 10px !important;
|
|
1816
|
+
min-width: 40px;
|
|
1817
|
+
justify-content: center;
|
|
1818
|
+
border-radius: 10px 10px 0 0 !important;
|
|
1819
|
+
}
|
|
1820
|
+
.pro-layout__tags-menu .pro-layout__tag-item--affix.is-active::before {
|
|
1821
|
+
display: none;
|
|
1822
|
+
}
|
|
1801
1823
|
.pro-layout__tags-menu .pro-layout__tag-label {
|
|
1802
1824
|
color: #46556f;
|
|
1803
1825
|
font-size: 12px;
|
|
1804
1826
|
font-weight: 500;
|
|
1805
1827
|
text-decoration: none !important;
|
|
1806
1828
|
}
|
|
1807
|
-
.pro-layout__tags-menu .
|
|
1808
|
-
|
|
1829
|
+
.pro-layout__tags-menu .pro-layout__tag-label--affix-icon {
|
|
1830
|
+
display: inline-flex;
|
|
1831
|
+
align-items: center;
|
|
1832
|
+
justify-content: center;
|
|
1833
|
+
flex: none !important;
|
|
1834
|
+
overflow: visible;
|
|
1835
|
+
}
|
|
1836
|
+
.pro-layout__tags-menu .pro-layout__tag-label--affix-icon .el-icon {
|
|
1837
|
+
font-size: 16px;
|
|
1838
|
+
color: #5c6c84;
|
|
1839
|
+
}
|
|
1840
|
+
.pro-layout__tags-menu .pro-layout__tag-item--affix.is-active .pro-layout__tag-label--affix-icon .el-icon {
|
|
1841
|
+
color: var(--el-color-primary, #409eff);
|
|
1842
|
+
}
|
|
1843
|
+
.pro-layout__tags-menu .el-menu-item.is-active .pro-layout__tag-label:not(.pro-layout__tag-label--affix-icon) {
|
|
1844
|
+
color: var(--el-color-primary, #409eff) !important;
|
|
1809
1845
|
font-weight: 600;
|
|
1810
1846
|
}
|
|
1847
|
+
.pro-layout__tags-menu .el-menu-item:not(.is-active:hover .pro-layout__tag-label:not(.pro-layout__tag-label--affix-icon)) {
|
|
1848
|
+
color: var(--el-color-primary, #409eff) !important;
|
|
1849
|
+
}
|
|
1850
|
+
.pro-layout__tags-menu .el-menu-item:not(.is-active:hover .pro-layout__tag-label--affix-icon .el-icon) {
|
|
1851
|
+
color: var(--el-color-primary, #409eff) !important;
|
|
1852
|
+
}
|
|
1811
1853
|
.pro-layout__tags-menu .pro-layout__tag-actions .pro-layout__tag-icon {
|
|
1812
1854
|
color: #8a98b2;
|
|
1813
1855
|
font-size: 12px;
|
|
@@ -1816,7 +1858,7 @@ body .el-overlay-dialog,
|
|
|
1816
1858
|
display: inline-flex;
|
|
1817
1859
|
align-items: center;
|
|
1818
1860
|
gap: 2px;
|
|
1819
|
-
margin-left:
|
|
1861
|
+
margin-left: 4px;
|
|
1820
1862
|
}
|
|
1821
1863
|
.pro-layout__tags-menu .pro-layout__tag-item .pro-layout__tag-icon {
|
|
1822
1864
|
margin-left: 0 !important;
|
|
@@ -1826,28 +1868,6 @@ body .el-overlay-dialog,
|
|
|
1826
1868
|
.pro-layout__tags-menu .pro-layout__tag-actions .pro-layout__tag-icon:hover {
|
|
1827
1869
|
color: #2b65f5 !important;
|
|
1828
1870
|
}
|
|
1829
|
-
.pro-layout__tags-menu .fixed-home-tag-item {
|
|
1830
|
-
cursor: pointer;
|
|
1831
|
-
user-select: none;
|
|
1832
|
-
padding: 0 12px !important;
|
|
1833
|
-
background: linear-gradient(135deg, #eff5ff, #e8f1ff) !important;
|
|
1834
|
-
box-shadow: none !important;
|
|
1835
|
-
}
|
|
1836
|
-
.pro-layout__tags-menu .fixed-home-tag-item .fixed-home-tag-label {
|
|
1837
|
-
display: inline-flex;
|
|
1838
|
-
align-items: center;
|
|
1839
|
-
gap: 6px;
|
|
1840
|
-
color: #2e5ccf;
|
|
1841
|
-
font-weight: 600;
|
|
1842
|
-
}
|
|
1843
|
-
.pro-layout__tags-menu .fixed-home-tag-item .fixed-home-tag-icon {
|
|
1844
|
-
font-style: normal;
|
|
1845
|
-
font-size: 14px;
|
|
1846
|
-
line-height: 1;
|
|
1847
|
-
}
|
|
1848
|
-
.pro-layout__tags-menu .fixed-home-tag-item .pro-layout__tag-actions {
|
|
1849
|
-
display: none !important;
|
|
1850
|
-
}
|
|
1851
1871
|
.pro-layout__tags-menu > .el-sub-menu {
|
|
1852
1872
|
margin-left: auto !important;
|
|
1853
1873
|
position: sticky;
|
|
@@ -1879,7 +1899,6 @@ body .el-overlay-dialog,
|
|
|
1879
1899
|
}
|
|
1880
1900
|
.pro-layout__tag-item.is-active .pro-layout__tag-icon:hover {
|
|
1881
1901
|
color: var(--el-text-color-regular, #606266) !important;
|
|
1882
|
-
background-color: var(--el-fill-color-dark, #e4e7ed) !important;
|
|
1883
1902
|
}
|
|
1884
1903
|
.pro-layout__tag-item.is-active .pro-layout__tag-icon:hover .el-icon,
|
|
1885
1904
|
.pro-layout__tag-item.is-active .pro-layout__tag-icon:hover svg {
|
|
@@ -1916,7 +1935,6 @@ body .el-overlay-dialog,
|
|
|
1916
1935
|
justify-content: center;
|
|
1917
1936
|
width: 16px;
|
|
1918
1937
|
height: 16px;
|
|
1919
|
-
/* 穿透 el-icon 组件样式 */
|
|
1920
1938
|
}
|
|
1921
1939
|
.pro-layout__tag-icon .el-icon,
|
|
1922
1940
|
.pro-layout__tag-icon svg {
|
|
@@ -1925,7 +1943,6 @@ body .el-overlay-dialog,
|
|
|
1925
1943
|
}
|
|
1926
1944
|
.pro-layout__tag-icon:hover {
|
|
1927
1945
|
color: var(--el-text-color-regular, #606266) !important;
|
|
1928
|
-
background-color: var(--el-fill-color-dark, #e4e7ed) !important;
|
|
1929
1946
|
}
|
|
1930
1947
|
.pro-layout__tag-icon:hover .el-icon,
|
|
1931
1948
|
.pro-layout__tag-icon:hover svg {
|
|
@@ -1936,7 +1953,7 @@ body .el-overlay-dialog,
|
|
|
1936
1953
|
width: 100%;
|
|
1937
1954
|
padding: 0 !important;
|
|
1938
1955
|
margin: 0 !important;
|
|
1939
|
-
background:
|
|
1956
|
+
background: var(--pro-layout-main-bg) !important;
|
|
1940
1957
|
box-sizing: border-box;
|
|
1941
1958
|
display: flex;
|
|
1942
1959
|
flex-direction: column;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import '../_virtual/_rollup-plugin-inject-process-env.js';
|
|
2
|
-
import _typeof from '@babel/runtime/helpers/typeof';
|
|
3
2
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
|
-
import
|
|
3
|
+
import _typeof from '@babel/runtime/helpers/typeof';
|
|
4
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
5
|
+
import { useSlots, ref, computed, watch, markRaw, onMounted, onUnmounted, nextTick, openBlock, createBlock, unref, normalizeClass, withCtx, createElementVNode, createElementBlock, renderSlot, normalizeStyle, createCommentVNode, createTextVNode, toDisplayString, createVNode, Fragment, renderList, resolveDynamicComponent, withDirectives, mergeProps, withModifiers, vShow } from 'vue';
|
|
5
6
|
import { useRouter, useRoute } from '@deppon/deppon-router';
|
|
6
7
|
import { ElContainer, ElHeader, ElMenu, ElMenuItem, ElBadge, ElSubMenu, ElInput, ElIcon, ElButton, ElAside, ElScrollbar, ElTooltip, ElMain, ElFooter } from '@deppon/deppon-ui';
|
|
7
|
-
import { Search, Service, Bell, Close,
|
|
8
|
+
import { Search, Service, Bell, Close, House, Expand, Fold, ArrowRight, ArrowLeft } from '@deppon/deppon-ui/icons-vue';
|
|
8
9
|
import { isMobile as _isMobile } from '../utils/other.js';
|
|
9
10
|
|
|
10
11
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
@@ -89,197 +90,169 @@ var _hoisted_22 = {
|
|
|
89
90
|
"class": "pro-layout__menu-item-char"
|
|
90
91
|
};
|
|
91
92
|
var _hoisted_23 = {
|
|
92
|
-
"class": "pro-layout__tag-label"
|
|
93
|
+
"class": "pro-layout__tag-label pro-layout__tag-label--affix-icon"
|
|
93
94
|
};
|
|
94
95
|
var _hoisted_24 = {
|
|
96
|
+
"class": "pro-layout__tag-label"
|
|
97
|
+
};
|
|
98
|
+
var _hoisted_25 = {
|
|
95
99
|
"class": "pro-layout__tag-actions"
|
|
96
100
|
};
|
|
97
101
|
var script = {
|
|
98
102
|
__name: 'ProLayout',
|
|
99
103
|
props: {
|
|
100
|
-
/** 是否显示侧边栏 */
|
|
101
104
|
showSider: {
|
|
102
105
|
type: Boolean,
|
|
103
106
|
"default": true
|
|
104
107
|
},
|
|
105
|
-
/** 侧边栏宽度 */
|
|
106
108
|
siderWidth: {
|
|
107
109
|
type: String,
|
|
108
110
|
"default": '180px'
|
|
109
111
|
},
|
|
110
|
-
/** 侧边栏折叠宽度 */
|
|
111
112
|
siderCollapsedWidth: {
|
|
112
113
|
type: String,
|
|
113
114
|
"default": '64px'
|
|
114
115
|
},
|
|
115
|
-
/** 是否固定头部 */
|
|
116
116
|
fixedHeader: {
|
|
117
117
|
type: Boolean,
|
|
118
118
|
"default": true
|
|
119
119
|
},
|
|
120
|
-
/** 是否折叠 */
|
|
121
120
|
collapsed: {
|
|
122
121
|
type: Boolean,
|
|
123
122
|
"default": true
|
|
124
123
|
},
|
|
125
|
-
/** 是否显示折叠按钮 */
|
|
126
124
|
showCollapse: {
|
|
127
125
|
type: Boolean,
|
|
128
126
|
"default": true
|
|
129
127
|
},
|
|
130
|
-
/** 是否显示 Logo */
|
|
131
128
|
showLogo: {
|
|
132
129
|
type: Boolean,
|
|
133
130
|
"default": true
|
|
134
131
|
},
|
|
135
|
-
/** Logo 图片,可以是字符串(路径)或对象(包含 src 和 size) */
|
|
136
132
|
logo: {
|
|
137
133
|
type: [String, Object],
|
|
138
134
|
"default": null
|
|
139
135
|
},
|
|
140
|
-
/** 标题 */
|
|
141
136
|
title: {
|
|
142
137
|
type: String,
|
|
143
138
|
"default": 'Pro Layout'
|
|
144
139
|
},
|
|
145
|
-
/** 菜单项 */
|
|
146
140
|
menuItems: {
|
|
147
141
|
type: Array,
|
|
148
142
|
"default": function _default() {
|
|
149
143
|
return [];
|
|
150
144
|
}
|
|
151
145
|
},
|
|
152
|
-
/** 顶部菜单项 */
|
|
153
146
|
topMenuItems: {
|
|
154
147
|
type: Array,
|
|
155
148
|
"default": function _default() {
|
|
156
149
|
return [];
|
|
157
150
|
}
|
|
158
151
|
},
|
|
159
|
-
/** 当前激活的菜单 */
|
|
160
152
|
activeMenu: {
|
|
161
153
|
type: String,
|
|
162
154
|
"default": undefined
|
|
163
155
|
},
|
|
164
|
-
/** 菜单折叠动画 */
|
|
165
156
|
menuCollapseTransition: {
|
|
166
157
|
type: Boolean,
|
|
167
158
|
"default": true
|
|
168
159
|
},
|
|
169
|
-
/** 是否只保持一个子菜单的展开 */
|
|
170
160
|
menuUniqueOpened: {
|
|
171
161
|
type: Boolean,
|
|
172
162
|
"default": true
|
|
173
163
|
},
|
|
174
|
-
/** 菜单模式 */
|
|
175
164
|
menuMode: {
|
|
176
165
|
type: String,
|
|
177
166
|
"default": 'vertical'
|
|
178
167
|
},
|
|
179
|
-
/** 是否使用 vue-router 的模式 */
|
|
180
168
|
menuRouter: {
|
|
181
169
|
type: Boolean,
|
|
182
170
|
"default": true
|
|
183
171
|
},
|
|
184
|
-
/** 菜单属性 */
|
|
185
172
|
menuProps: {
|
|
186
173
|
type: Object,
|
|
187
174
|
"default": function _default() {
|
|
188
175
|
return {};
|
|
189
176
|
}
|
|
190
177
|
},
|
|
191
|
-
/** 是否显示头部 */
|
|
192
178
|
showHeader: {
|
|
193
179
|
type: Boolean,
|
|
194
180
|
"default": true
|
|
195
181
|
},
|
|
196
|
-
/** 头部高度 */
|
|
197
182
|
headerHeight: {
|
|
198
183
|
type: String,
|
|
199
184
|
"default": '60px'
|
|
200
185
|
},
|
|
201
|
-
/** 是否显示页脚 */
|
|
202
186
|
showFooter: {
|
|
203
187
|
type: Boolean,
|
|
204
188
|
"default": false
|
|
205
189
|
},
|
|
206
|
-
/** 页脚高度 */
|
|
207
190
|
footerHeight: {
|
|
208
191
|
type: String,
|
|
209
192
|
"default": '60px'
|
|
210
193
|
},
|
|
211
|
-
/** 是否启用响应式布局 */
|
|
212
194
|
responsive: {
|
|
213
195
|
type: Boolean,
|
|
214
196
|
"default": true
|
|
215
197
|
},
|
|
216
|
-
/** 响应式断点(屏幕宽度小于此值时视为移动端) */
|
|
217
198
|
breakpoint: {
|
|
218
199
|
type: Number,
|
|
219
200
|
"default": 768
|
|
220
201
|
},
|
|
221
|
-
/** 是否显示菜单搜索框 */
|
|
222
202
|
showMenuSearch: {
|
|
223
203
|
type: Boolean,
|
|
224
204
|
"default": true
|
|
225
205
|
},
|
|
226
|
-
/** 菜单搜索框占位符 */
|
|
227
206
|
menuSearchPlaceholder: {
|
|
228
207
|
type: String,
|
|
229
208
|
"default": '请输入菜单名称'
|
|
230
209
|
},
|
|
231
|
-
/** 是否显示常用菜单 */
|
|
232
210
|
showCommonMenus: {
|
|
233
211
|
type: Boolean,
|
|
234
212
|
"default": true
|
|
235
213
|
},
|
|
236
|
-
/** 常用菜单最大数量 */
|
|
237
214
|
commonMenusMax: {
|
|
238
215
|
type: Number,
|
|
239
216
|
"default": 5
|
|
240
217
|
},
|
|
241
|
-
/** 是否在头部显示 Logo */
|
|
242
218
|
showLogoInHeader: {
|
|
243
219
|
type: Boolean,
|
|
244
220
|
"default": true
|
|
245
221
|
},
|
|
246
|
-
/** 是否显示顶部菜单 */
|
|
247
222
|
showTopMenu: {
|
|
248
223
|
type: Boolean,
|
|
249
224
|
"default": true
|
|
250
225
|
},
|
|
251
|
-
/** 是否显示头部搜索框 */
|
|
252
226
|
showHeaderSearch: {
|
|
253
227
|
type: Boolean,
|
|
254
228
|
"default": true
|
|
255
229
|
},
|
|
256
|
-
/** 头部搜索框占位符 */
|
|
257
230
|
headerSearchPlaceholder: {
|
|
258
231
|
type: String,
|
|
259
232
|
"default": '输入客户名称'
|
|
260
233
|
},
|
|
261
|
-
/** 是否显示电话图标 */
|
|
262
234
|
showPhoneIcon: {
|
|
263
235
|
type: Boolean,
|
|
264
236
|
"default": true
|
|
265
237
|
},
|
|
266
|
-
/** 是否显示通知图标 */
|
|
267
238
|
showBellIcon: {
|
|
268
239
|
type: Boolean,
|
|
269
240
|
"default": true
|
|
270
241
|
},
|
|
271
|
-
/** 是否显示 TagsView */
|
|
272
242
|
showTagsView: {
|
|
273
243
|
type: Boolean,
|
|
274
244
|
"default": true
|
|
275
245
|
},
|
|
276
|
-
/** TagsView 高度 */
|
|
277
246
|
tagsViewHeight: {
|
|
278
247
|
type: String,
|
|
279
248
|
"default": '40px'
|
|
249
|
+
},
|
|
250
|
+
tagsViewHomePath: {
|
|
251
|
+
type: String,
|
|
252
|
+
"default": '/'
|
|
280
253
|
}
|
|
281
254
|
},
|
|
282
|
-
emits: ['update:collapsed', 'collapse-change', 'logo-click', 'breadcrumb-click', 'breadcrumb-close', 'phone-click', 'bell-click', 'user-command', 'menu-search', 'menu-search-click', 'header-search', 'tag-
|
|
255
|
+
emits: ['update:collapsed', 'collapse-change', 'logo-click', 'breadcrumb-click', 'breadcrumb-close', 'phone-click', 'bell-click', 'user-command', 'menu-search', 'menu-search-click', 'header-search', 'tag-close', 'common-menu-delete'],
|
|
283
256
|
setup: function setup(__props, _ref) {
|
|
284
257
|
var __emit = _ref.emit;
|
|
285
258
|
var slots = useSlots();
|
|
@@ -294,17 +267,21 @@ var script = {
|
|
|
294
267
|
var headerSearchText = ref('');
|
|
295
268
|
var menuTitleRefs = new Map();
|
|
296
269
|
var menuTitleOverflowMap = ref(new Map());
|
|
297
|
-
|
|
298
|
-
// TagsView 相关
|
|
299
270
|
var visitedTags = ref([]);
|
|
300
271
|
var currentPath = ref('');
|
|
301
|
-
|
|
302
|
-
// 为 tags menu 生成唯一的 key,确保动态添加标签时能触发 ellipsis 重新计算
|
|
303
272
|
var tagsMenuKey = computed(function () {
|
|
304
273
|
return "tags-menu-".concat(visitedTags.value.length, "-").concat(visitedTags.value.map(function (t) {
|
|
305
274
|
return t.path;
|
|
306
275
|
}).join('-'));
|
|
307
276
|
});
|
|
277
|
+
var tagsViewHomePath = computed(function () {
|
|
278
|
+
return props.tagsViewHomePath;
|
|
279
|
+
});
|
|
280
|
+
var otherVisitedTags = computed(function () {
|
|
281
|
+
return visitedTags.value.filter(function (t) {
|
|
282
|
+
return t.path !== tagsViewHomePath.value;
|
|
283
|
+
});
|
|
284
|
+
});
|
|
308
285
|
var getMenuTitleKey = function getMenuTitleKey(item) {
|
|
309
286
|
var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
310
287
|
return "".concat(prefix).concat((item === null || item === void 0 ? void 0 : item.path) || (item === null || item === void 0 ? void 0 : item.key) || (item === null || item === void 0 ? void 0 : item.title) || (item === null || item === void 0 ? void 0 : item.label) || '');
|
|
@@ -342,8 +319,6 @@ var script = {
|
|
|
342
319
|
var isMenuTitleOverflow = function isMenuTitleOverflow(key) {
|
|
343
320
|
return menuTitleOverflowMap.value.get(key) === true;
|
|
344
321
|
};
|
|
345
|
-
|
|
346
|
-
// 从 menuItems 中查找标题
|
|
347
322
|
var _findMenuTitle = function findMenuTitle(path) {
|
|
348
323
|
var menuItems = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.menuItems;
|
|
349
324
|
var _iterator = _createForOfIteratorHelper(menuItems),
|
|
@@ -366,29 +341,39 @@ var script = {
|
|
|
366
341
|
}
|
|
367
342
|
return null;
|
|
368
343
|
};
|
|
369
|
-
|
|
370
|
-
|
|
344
|
+
var ensureAffixHomeTag = function ensureAffixHomeTag() {
|
|
345
|
+
var hp = tagsViewHomePath.value;
|
|
346
|
+
var idx = visitedTags.value.findIndex(function (t) {
|
|
347
|
+
return t.path === hp;
|
|
348
|
+
});
|
|
349
|
+
if (idx === -1) {
|
|
350
|
+
var title = _findMenuTitle(hp) || '首页';
|
|
351
|
+
visitedTags.value.unshift({
|
|
352
|
+
path: hp,
|
|
353
|
+
title: title,
|
|
354
|
+
fullPath: hp
|
|
355
|
+
});
|
|
356
|
+
} else if (idx > 0) {
|
|
357
|
+
var _visitedTags$value$sp = visitedTags.value.splice(idx, 1),
|
|
358
|
+
_visitedTags$value$sp2 = _slicedToArray(_visitedTags$value$sp, 1),
|
|
359
|
+
homeTag = _visitedTags$value$sp2[0];
|
|
360
|
+
visitedTags.value.unshift(homeTag);
|
|
361
|
+
}
|
|
362
|
+
};
|
|
371
363
|
var getRouteTitle = function getRouteTitle(route) {
|
|
372
364
|
var _route$meta;
|
|
373
|
-
// 优先使用路由 meta.title
|
|
374
365
|
if ((_route$meta = route.meta) !== null && _route$meta !== void 0 && _route$meta.title) {
|
|
375
366
|
return route.meta.title;
|
|
376
367
|
}
|
|
377
|
-
// 其次从 menuItems 中查找
|
|
378
368
|
var menuTitle = _findMenuTitle(route.path);
|
|
379
369
|
if (menuTitle) {
|
|
380
370
|
return menuTitle;
|
|
381
371
|
}
|
|
382
|
-
// 最后使用路由名称或路径
|
|
383
372
|
return route.name || route.path;
|
|
384
373
|
};
|
|
385
|
-
|
|
386
|
-
// 添加标签
|
|
387
374
|
var addTag = function addTag(route) {
|
|
388
375
|
var path = route.path;
|
|
389
376
|
var title = getRouteTitle(route);
|
|
390
|
-
|
|
391
|
-
// 检查标签是否已存在
|
|
392
377
|
var existingTag = visitedTags.value.find(function (tag) {
|
|
393
378
|
return tag.path === path;
|
|
394
379
|
});
|
|
@@ -401,35 +386,30 @@ var script = {
|
|
|
401
386
|
}
|
|
402
387
|
currentPath.value = path;
|
|
403
388
|
};
|
|
404
|
-
|
|
405
|
-
// 删除标签
|
|
406
389
|
var removeTag = function removeTag(tag) {
|
|
390
|
+
if (tag.path === tagsViewHomePath.value) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
407
393
|
var index = visitedTags.value.findIndex(function (t) {
|
|
408
394
|
return t.path === tag.path;
|
|
409
395
|
});
|
|
410
396
|
if (index > -1) {
|
|
411
397
|
visitedTags.value.splice(index, 1);
|
|
412
|
-
|
|
413
|
-
// 如果删除的是当前标签,跳转到最后一个标签或首页
|
|
414
398
|
if (tag.path === currentPath.value) {
|
|
415
399
|
if (visitedTags.value.length > 0) {
|
|
416
400
|
var lastTag = visitedTags.value[visitedTags.value.length - 1];
|
|
417
401
|
router.push(lastTag.fullPath || lastTag.path);
|
|
418
402
|
} else {
|
|
419
|
-
router.push(
|
|
403
|
+
router.push(tagsViewHomePath.value);
|
|
420
404
|
}
|
|
421
405
|
}
|
|
422
406
|
}
|
|
423
407
|
};
|
|
424
|
-
|
|
425
|
-
// 点击标签
|
|
426
408
|
var handleTagClick = function handleTagClick(tag) {
|
|
427
409
|
if (tag.path !== currentPath.value) {
|
|
428
410
|
router.push(tag.fullPath || tag.path);
|
|
429
411
|
}
|
|
430
412
|
};
|
|
431
|
-
|
|
432
|
-
// 处理 el-menu 的 select 事件
|
|
433
413
|
var handleTagMenuSelect = function handleTagMenuSelect(index) {
|
|
434
414
|
var tag = visitedTags.value.find(function (t) {
|
|
435
415
|
return t.path === index;
|
|
@@ -438,50 +418,30 @@ var script = {
|
|
|
438
418
|
handleTagClick(tag);
|
|
439
419
|
}
|
|
440
420
|
};
|
|
441
|
-
|
|
442
|
-
// 刷新标签
|
|
443
|
-
var handleTagRefresh = function handleTagRefresh(tag) {
|
|
444
|
-
// 触发路由刷新,通过重新导航到相同路径并添加时间戳参数
|
|
445
|
-
var currentQuery = _objectSpread({}, route.query);
|
|
446
|
-
currentQuery._t = Date.now();
|
|
447
|
-
router.replace({
|
|
448
|
-
path: tag.fullPath || tag.path,
|
|
449
|
-
query: currentQuery
|
|
450
|
-
});
|
|
451
|
-
emit('tag-refresh', tag);
|
|
452
|
-
};
|
|
453
|
-
|
|
454
|
-
// 关闭标签
|
|
455
421
|
var handleTagClose = function handleTagClose(tag) {
|
|
456
|
-
|
|
457
|
-
if (visitedTags.value.length <= 1) {
|
|
422
|
+
if (tag.path === tagsViewHomePath.value) {
|
|
458
423
|
return;
|
|
459
424
|
}
|
|
460
425
|
removeTag(tag);
|
|
461
426
|
emit('tag-close', tag);
|
|
462
427
|
};
|
|
463
|
-
|
|
464
|
-
// 监听路由变化
|
|
465
428
|
watch(function () {
|
|
466
429
|
return route.path;
|
|
467
430
|
}, function (newPath) {
|
|
468
431
|
if (props.showTagsView && newPath) {
|
|
469
432
|
addTag(route);
|
|
433
|
+
ensureAffixHomeTag();
|
|
470
434
|
}
|
|
471
435
|
}, {
|
|
472
436
|
immediate: true
|
|
473
437
|
});
|
|
474
|
-
|
|
475
|
-
// 图标组件
|
|
476
438
|
var SearchIcon = markRaw(Search);
|
|
477
439
|
var PhoneIcon = markRaw(Service);
|
|
478
440
|
var BellIcon = markRaw(Bell);
|
|
479
441
|
var CloseIcon = markRaw(Close);
|
|
480
|
-
var
|
|
442
|
+
var HouseIcon = markRaw(House);
|
|
481
443
|
var ExpandIcon = markRaw(Expand);
|
|
482
444
|
var FoldIcon = markRaw(Fold);
|
|
483
|
-
|
|
484
|
-
// Logo 相关计算属性
|
|
485
445
|
var logoSrc = computed(function () {
|
|
486
446
|
if (!props.logo) return null;
|
|
487
447
|
if (typeof props.logo === 'string') {
|
|
@@ -517,8 +477,6 @@ var script = {
|
|
|
517
477
|
}
|
|
518
478
|
return {};
|
|
519
479
|
});
|
|
520
|
-
|
|
521
|
-
// 检测是否为移动端
|
|
522
480
|
var checkMobile = function checkMobile() {
|
|
523
481
|
if (!props.responsive) {
|
|
524
482
|
isMobile.value = _isMobile();
|
|
@@ -526,8 +484,6 @@ var script = {
|
|
|
526
484
|
}
|
|
527
485
|
windowWidth.value = window.innerWidth;
|
|
528
486
|
isMobile.value = windowWidth.value < props.breakpoint || _isMobile();
|
|
529
|
-
|
|
530
|
-
// 移动端自动折叠侧边栏
|
|
531
487
|
if (isMobile.value && !collapsed.value) {
|
|
532
488
|
collapsed.value = true;
|
|
533
489
|
}
|
|
@@ -562,8 +518,6 @@ var script = {
|
|
|
562
518
|
var toggleCollapse = function toggleCollapse() {
|
|
563
519
|
collapsed.value = !collapsed.value;
|
|
564
520
|
};
|
|
565
|
-
|
|
566
|
-
// 计算下方容器的高度和位置
|
|
567
521
|
var bodyStyle = computed(function () {
|
|
568
522
|
var style = {};
|
|
569
523
|
if (props.showHeader) {
|
|
@@ -578,39 +532,27 @@ var script = {
|
|
|
578
532
|
}
|
|
579
533
|
return style;
|
|
580
534
|
});
|
|
581
|
-
|
|
582
|
-
// 计算折叠按钮的位置
|
|
583
535
|
var collapseBtnStyle = computed(function () {
|
|
584
536
|
var siderWidthValue = collapsed.value ? props.siderCollapsedWidth : props.siderWidth;
|
|
585
|
-
// 将宽度值转换为数字(去掉 px 单位)
|
|
586
537
|
var widthNum = parseFloat(siderWidthValue);
|
|
587
538
|
return {
|
|
588
539
|
left: "".concat(widthNum, "px")
|
|
589
540
|
};
|
|
590
541
|
});
|
|
591
|
-
|
|
592
|
-
// 处理菜单项的通用函数
|
|
593
542
|
var _processMenuItem = function processMenuItem(item) {
|
|
594
543
|
var processed = _objectSpread({}, item);
|
|
595
|
-
// 如果 icon 是组件,使用 markRaw 标记
|
|
596
544
|
if (processed.icon && _typeof(processed.icon) === 'object' && 'setup' in processed.icon) {
|
|
597
545
|
processed.icon = markRaw(processed.icon);
|
|
598
546
|
}
|
|
599
|
-
|
|
600
|
-
// 菜单搜索过滤
|
|
601
547
|
if (props.showMenuSearch && menuSearchText.value) {
|
|
602
548
|
var searchText = menuSearchText.value.toLowerCase();
|
|
603
549
|
var title = (processed.title || processed.label || '').toLowerCase();
|
|
604
|
-
|
|
605
|
-
// 如果当前项匹配,保留所有子项
|
|
606
550
|
if (title.includes(searchText)) {
|
|
607
551
|
if (processed.children && Array.isArray(processed.children)) {
|
|
608
552
|
processed.children = processed.children.map(_processMenuItem);
|
|
609
553
|
}
|
|
610
554
|
return processed;
|
|
611
555
|
}
|
|
612
|
-
|
|
613
|
-
// 如果当前项不匹配,检查子项
|
|
614
556
|
if (processed.children && Array.isArray(processed.children)) {
|
|
615
557
|
var filteredChildren = processed.children.map(_processMenuItem).filter(function (child) {
|
|
616
558
|
return child !== null;
|
|
@@ -620,24 +562,16 @@ var script = {
|
|
|
620
562
|
return processed;
|
|
621
563
|
}
|
|
622
564
|
}
|
|
623
|
-
|
|
624
|
-
// 都不匹配,返回 null
|
|
625
565
|
return null;
|
|
626
566
|
}
|
|
627
|
-
|
|
628
|
-
// 递归处理子菜单(无搜索时)
|
|
629
567
|
if (processed.children && Array.isArray(processed.children)) {
|
|
630
568
|
processed.children = processed.children.map(_processMenuItem);
|
|
631
569
|
}
|
|
632
570
|
return processed;
|
|
633
571
|
};
|
|
634
|
-
|
|
635
|
-
// 处理菜单组,将 menuItems 中的组数据转换为可渲染的格式
|
|
636
572
|
var menuGroups = computed(function () {
|
|
637
573
|
return props.menuItems.map(function (group) {
|
|
638
|
-
// 如果 group 有 type 和 children,说明是分组格式
|
|
639
574
|
if (group.type && group.children) {
|
|
640
|
-
// 如果 type 是 'common' 且 showCommonMenus 为 false,则跳过
|
|
641
575
|
if (group.type === 'common' && !props.showCommonMenus) {
|
|
642
576
|
return null;
|
|
643
577
|
}
|
|
@@ -650,7 +584,6 @@ var script = {
|
|
|
650
584
|
items: processedItems
|
|
651
585
|
};
|
|
652
586
|
}
|
|
653
|
-
// 如果没有 type,说明是单个菜单项,需要包装成组
|
|
654
587
|
var processed = _processMenuItem(group);
|
|
655
588
|
if (processed) {
|
|
656
589
|
return {
|
|
@@ -664,38 +597,26 @@ var script = {
|
|
|
664
597
|
return group !== null && group.items.length > 0;
|
|
665
598
|
});
|
|
666
599
|
});
|
|
667
|
-
|
|
668
|
-
// 自动计算常用菜单数量
|
|
669
600
|
var commonMenusCount = computed(function () {
|
|
670
601
|
var commonGroup = menuGroups.value.find(function (group) {
|
|
671
602
|
return group.type === 'common';
|
|
672
603
|
});
|
|
673
604
|
return commonGroup ? commonGroup.items.length : 0;
|
|
674
605
|
});
|
|
675
|
-
|
|
676
|
-
// 菜单组展开/收缩状态管理
|
|
677
606
|
var menuGroupExpanded = ref({});
|
|
678
|
-
|
|
679
|
-
// 初始化菜单组展开状态(默认全部展开)
|
|
680
607
|
var initMenuGroupExpanded = function initMenuGroupExpanded() {
|
|
681
608
|
menuGroups.value.forEach(function (group, index) {
|
|
682
609
|
if (menuGroupExpanded.value[index] === undefined) {
|
|
683
|
-
menuGroupExpanded.value[index] = true;
|
|
610
|
+
menuGroupExpanded.value[index] = true;
|
|
684
611
|
}
|
|
685
612
|
});
|
|
686
613
|
};
|
|
687
|
-
|
|
688
|
-
// 判断菜单组是否展开
|
|
689
614
|
var isMenuGroupExpanded = function isMenuGroupExpanded(groupIndex) {
|
|
690
|
-
return menuGroupExpanded.value[groupIndex] !== false;
|
|
615
|
+
return menuGroupExpanded.value[groupIndex] !== false;
|
|
691
616
|
};
|
|
692
|
-
|
|
693
|
-
// 切换菜单组展开/收缩状态
|
|
694
617
|
var toggleMenuGroup = function toggleMenuGroup(groupIndex) {
|
|
695
618
|
menuGroupExpanded.value[groupIndex] = !isMenuGroupExpanded(groupIndex);
|
|
696
619
|
};
|
|
697
|
-
|
|
698
|
-
// 监听 menuGroups 变化,初始化展开状态
|
|
699
620
|
watch(menuGroups, function () {
|
|
700
621
|
initMenuGroupExpanded();
|
|
701
622
|
nextTick(checkAllMenuTitleOverflow);
|
|
@@ -708,41 +629,26 @@ var script = {
|
|
|
708
629
|
}, function () {
|
|
709
630
|
nextTick(checkAllMenuTitleOverflow);
|
|
710
631
|
});
|
|
711
|
-
|
|
712
|
-
// 编辑模式状态
|
|
713
632
|
var isEditMode = ref(false);
|
|
714
|
-
|
|
715
|
-
// 切换编辑模式
|
|
716
633
|
var toggleEditMode = function toggleEditMode() {
|
|
717
634
|
isEditMode.value = !isEditMode.value;
|
|
718
635
|
};
|
|
719
|
-
|
|
720
|
-
// 处理常用菜单删除
|
|
721
636
|
var handleCommonMenuDelete = function handleCommonMenuDelete(item) {
|
|
722
637
|
emit('common-menu-delete', item);
|
|
723
638
|
};
|
|
724
|
-
|
|
725
|
-
// 获取文字的第一个字符
|
|
726
639
|
var getFirstChar = function getFirstChar(text) {
|
|
727
640
|
if (!text) return '';
|
|
728
|
-
// 获取第一个字符(支持中文和英文)
|
|
729
641
|
var firstChar = text.trim().charAt(0);
|
|
730
642
|
return firstChar || '';
|
|
731
643
|
};
|
|
732
|
-
|
|
733
|
-
// 顶部菜单项(优先使用传入的 topMenuItems,否则从 menuItems 中提取顶级菜单)
|
|
734
644
|
var topMenuItems = computed(function () {
|
|
735
|
-
// 如果传入了 topMenuItems,直接使用
|
|
736
645
|
if (props.topMenuItems && props.topMenuItems.length > 0) {
|
|
737
646
|
return props.topMenuItems;
|
|
738
647
|
}
|
|
739
648
|
return [];
|
|
740
649
|
});
|
|
741
|
-
|
|
742
|
-
// 计算当前激活的顶部菜单
|
|
743
650
|
var activeTopMenu = computed(function () {
|
|
744
651
|
var currentPath = route.path;
|
|
745
|
-
// 查找匹配的菜单项
|
|
746
652
|
var _iterator2 = _createForOfIteratorHelper(props.topMenuItems),
|
|
747
653
|
_step2;
|
|
748
654
|
try {
|
|
@@ -751,7 +657,6 @@ var script = {
|
|
|
751
657
|
if (item.path && (currentPath === item.path || currentPath.startsWith(item.path + '/'))) {
|
|
752
658
|
return item.path || item.key;
|
|
753
659
|
}
|
|
754
|
-
// 检查子菜单
|
|
755
660
|
if (item.children && item.children.length > 0) {
|
|
756
661
|
var _iterator3 = _createForOfIteratorHelper(item.children),
|
|
757
662
|
_step3;
|
|
@@ -776,27 +681,18 @@ var script = {
|
|
|
776
681
|
}
|
|
777
682
|
return '';
|
|
778
683
|
});
|
|
779
|
-
|
|
780
|
-
// 处理顶部菜单点击
|
|
781
684
|
var handleTopMenuClick = function handleTopMenuClick(item) {
|
|
782
685
|
if (item.path) {
|
|
783
686
|
router.push(item.path);
|
|
784
687
|
}
|
|
785
688
|
};
|
|
786
|
-
|
|
787
|
-
// 处理菜单搜索按钮点击
|
|
788
689
|
var handleMenuSearchClick = function handleMenuSearchClick() {
|
|
789
|
-
// 点击后展开菜单
|
|
790
690
|
collapsed.value = false;
|
|
791
691
|
emit('menu-search-click');
|
|
792
692
|
};
|
|
793
|
-
|
|
794
|
-
// 监听菜单搜索
|
|
795
693
|
watch(menuSearchText, function (val) {
|
|
796
694
|
emit('menu-search', val);
|
|
797
695
|
});
|
|
798
|
-
|
|
799
|
-
// 监听头部搜索
|
|
800
696
|
watch(headerSearchText, function (val) {
|
|
801
697
|
emit('header-search', val);
|
|
802
698
|
});
|
|
@@ -807,7 +703,7 @@ var script = {
|
|
|
807
703
|
}])
|
|
808
704
|
}, {
|
|
809
705
|
"default": withCtx(function () {
|
|
810
|
-
return [
|
|
706
|
+
return [__props.showHeader ? (openBlock(), createBlock(unref(ElHeader), {
|
|
811
707
|
key: 0,
|
|
812
708
|
height: __props.headerHeight,
|
|
813
709
|
"class": normalizeClass(["pro-layout__header", {
|
|
@@ -815,7 +711,7 @@ var script = {
|
|
|
815
711
|
}])
|
|
816
712
|
}, {
|
|
817
713
|
"default": withCtx(function () {
|
|
818
|
-
return [createElementVNode("div", _hoisted_1, [
|
|
714
|
+
return [createElementVNode("div", _hoisted_1, [createElementVNode("div", _hoisted_2, [__props.showLogoInHeader ? (openBlock(), createElementBlock("div", {
|
|
819
715
|
key: 0,
|
|
820
716
|
"class": "pro-layout__header-logo",
|
|
821
717
|
onClick: _cache[0] || (_cache[0] = function ($event) {
|
|
@@ -833,7 +729,7 @@ var script = {
|
|
|
833
729
|
}, null, -1 /* CACHED */)), createTextVNode(" " + toDisplayString(__props.title), 1 /* TEXT */)])) : createCommentVNode("v-if", true)];
|
|
834
730
|
})])) : createCommentVNode("v-if", true), renderSlot(_ctx.$slots, "header-left", {
|
|
835
731
|
collapsed: collapsed.value
|
|
836
|
-
})]),
|
|
732
|
+
})]), __props.showTopMenu && topMenuItems.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_5, [createVNode(unref(ElMenu), {
|
|
837
733
|
"default-active": activeTopMenu.value,
|
|
838
734
|
mode: "horizontal",
|
|
839
735
|
router: __props.menuRouter,
|
|
@@ -955,12 +851,12 @@ var script = {
|
|
|
955
851
|
})])])])];
|
|
956
852
|
}),
|
|
957
853
|
_: 3 /* FORWARDED */
|
|
958
|
-
}, 8 /* PROPS */, ["height", "class"])) : createCommentVNode("v-if", true),
|
|
854
|
+
}, 8 /* PROPS */, ["height", "class"])) : createCommentVNode("v-if", true), createVNode(unref(ElContainer), {
|
|
959
855
|
"class": "pro-layout__body",
|
|
960
856
|
style: normalizeStyle(bodyStyle.value)
|
|
961
857
|
}, {
|
|
962
858
|
"default": withCtx(function () {
|
|
963
|
-
return [
|
|
859
|
+
return [__props.showSider ? (openBlock(), createBlock(unref(ElAside), {
|
|
964
860
|
key: 0,
|
|
965
861
|
width: collapsed.value ? __props.siderCollapsedWidth : __props.siderWidth,
|
|
966
862
|
"class": normalizeClass(["pro-layout__sider", {
|
|
@@ -968,9 +864,9 @@ var script = {
|
|
|
968
864
|
}])
|
|
969
865
|
}, {
|
|
970
866
|
"default": withCtx(function () {
|
|
971
|
-
return [
|
|
867
|
+
return [unref(slots)['sider-header'] ? (openBlock(), createElementBlock("div", _hoisted_10, [renderSlot(_ctx.$slots, "sider-header", {
|
|
972
868
|
collapsed: collapsed.value
|
|
973
|
-
})])) : createCommentVNode("v-if", true),
|
|
869
|
+
})])) : createCommentVNode("v-if", true), __props.showMenuSearch ? (openBlock(), createElementBlock("div", _hoisted_11, [!collapsed.value ? (openBlock(), createBlock(unref(ElInput), {
|
|
974
870
|
key: 0,
|
|
975
871
|
modelValue: menuSearchText.value,
|
|
976
872
|
"onUpdate:modelValue": _cache[4] || (_cache[4] = function ($event) {
|
|
@@ -1006,14 +902,14 @@ var script = {
|
|
|
1006
902
|
})];
|
|
1007
903
|
}),
|
|
1008
904
|
_: 1 /* STABLE */
|
|
1009
|
-
}))])) : createCommentVNode("v-if", true),
|
|
905
|
+
}))])) : createCommentVNode("v-if", true), createVNode(unref(ElScrollbar), {
|
|
1010
906
|
"class": "pro-layout__menu-scrollbar"
|
|
1011
907
|
}, {
|
|
1012
908
|
"default": withCtx(function () {
|
|
1013
|
-
return [
|
|
909
|
+
return [(openBlock(true), createElementBlock(Fragment, null, renderList(menuGroups.value, function (group, groupIndex) {
|
|
1014
910
|
return openBlock(), createElementBlock(Fragment, {
|
|
1015
911
|
key: "".concat(group.type, "-").concat(groupIndex)
|
|
1016
|
-
}, [group.items && group.items.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_12, [
|
|
912
|
+
}, [group.items && group.items.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_12, [__props.showCommonMenus || menuGroups.value.length > 1 ? (openBlock(), createElementBlock("div", {
|
|
1017
913
|
key: 0,
|
|
1018
914
|
"class": normalizeClass(["pro-layout__menu-group-header", {
|
|
1019
915
|
'pro-layout__menu-group-header--collapsed': collapsed.value
|
|
@@ -1183,17 +1079,17 @@ var script = {
|
|
|
1183
1079
|
})];
|
|
1184
1080
|
}),
|
|
1185
1081
|
_: 3 /* FORWARDED */
|
|
1186
|
-
}, 8 /* PROPS */, ["width", "class"])) : createCommentVNode("v-if", true),
|
|
1082
|
+
}, 8 /* PROPS */, ["width", "class"])) : createCommentVNode("v-if", true), __props.showSider && __props.showCollapse ? (openBlock(), createBlock(unref(ElButton), {
|
|
1187
1083
|
key: 1,
|
|
1188
1084
|
icon: collapsed.value ? unref(ArrowRight) : unref(ArrowLeft),
|
|
1189
1085
|
"class": "pro-layout__sider-collapse-btn",
|
|
1190
1086
|
style: normalizeStyle(collapseBtnStyle.value),
|
|
1191
1087
|
onClick: toggleCollapse
|
|
1192
|
-
}, null, 8 /* PROPS */, ["icon", "style"])) : createCommentVNode("v-if", true),
|
|
1088
|
+
}, null, 8 /* PROPS */, ["icon", "style"])) : createCommentVNode("v-if", true), createVNode(unref(ElContainer), {
|
|
1193
1089
|
"class": "pro-layout__content-wrapper"
|
|
1194
1090
|
}, {
|
|
1195
1091
|
"default": withCtx(function () {
|
|
1196
|
-
return [
|
|
1092
|
+
return [__props.showTagsView ? (openBlock(), createElementBlock("div", {
|
|
1197
1093
|
key: 0,
|
|
1198
1094
|
"class": "pro-layout__tags-view",
|
|
1199
1095
|
style: normalizeStyle({
|
|
@@ -1208,25 +1104,27 @@ var script = {
|
|
|
1208
1104
|
onSelect: handleTagMenuSelect
|
|
1209
1105
|
}, {
|
|
1210
1106
|
"default": withCtx(function () {
|
|
1211
|
-
return [(
|
|
1107
|
+
return [createVNode(unref(ElMenuItem), {
|
|
1108
|
+
index: tagsViewHomePath.value,
|
|
1109
|
+
"class": "pro-layout__tag-item pro-layout__tag-item--affix"
|
|
1110
|
+
}, {
|
|
1111
|
+
title: withCtx(function () {
|
|
1112
|
+
return [createElementVNode("span", _hoisted_23, [createVNode(unref(ElIcon), null, {
|
|
1113
|
+
"default": withCtx(function () {
|
|
1114
|
+
return [(openBlock(), createBlock(resolveDynamicComponent(unref(HouseIcon))))];
|
|
1115
|
+
}),
|
|
1116
|
+
_: 1 /* STABLE */
|
|
1117
|
+
})])];
|
|
1118
|
+
}),
|
|
1119
|
+
_: 1 /* STABLE */
|
|
1120
|
+
}, 8 /* PROPS */, ["index"]), (openBlock(true), createElementBlock(Fragment, null, renderList(otherVisitedTags.value, function (tag) {
|
|
1212
1121
|
return openBlock(), createBlock(unref(ElMenuItem), {
|
|
1213
1122
|
key: tag.path,
|
|
1214
1123
|
index: tag.path,
|
|
1215
1124
|
"class": "pro-layout__tag-item"
|
|
1216
1125
|
}, {
|
|
1217
1126
|
title: withCtx(function () {
|
|
1218
|
-
return [createElementVNode("span",
|
|
1219
|
-
"class": "pro-layout__tag-icon",
|
|
1220
|
-
onClick: withModifiers(function ($event) {
|
|
1221
|
-
return handleTagRefresh(tag);
|
|
1222
|
-
}, ["stop"])
|
|
1223
|
-
}, {
|
|
1224
|
-
"default": withCtx(function () {
|
|
1225
|
-
return [(openBlock(), createBlock(resolveDynamicComponent(unref(RefreshRightIcon))))];
|
|
1226
|
-
}),
|
|
1227
|
-
_: 1 /* STABLE */
|
|
1228
|
-
}, 8 /* PROPS */, ["onClick"]), visitedTags.value.length > 1 ? (openBlock(), createBlock(unref(ElIcon), {
|
|
1229
|
-
key: 0,
|
|
1127
|
+
return [createElementVNode("span", _hoisted_24, toDisplayString(tag.title), 1 /* TEXT */), createElementVNode("div", _hoisted_25, [createVNode(unref(ElIcon), {
|
|
1230
1128
|
"class": "pro-layout__tag-icon",
|
|
1231
1129
|
onClick: withModifiers(function ($event) {
|
|
1232
1130
|
return handleTagClose(tag);
|
|
@@ -1236,21 +1134,21 @@ var script = {
|
|
|
1236
1134
|
return [(openBlock(), createBlock(resolveDynamicComponent(unref(CloseIcon))))];
|
|
1237
1135
|
}),
|
|
1238
1136
|
_: 1 /* STABLE */
|
|
1239
|
-
}, 8 /* PROPS */, ["onClick"])
|
|
1137
|
+
}, 8 /* PROPS */, ["onClick"])])];
|
|
1240
1138
|
}),
|
|
1241
1139
|
_: 2 /* DYNAMIC */
|
|
1242
1140
|
}, 1032 /* PROPS, DYNAMIC_SLOTS */, ["index"]);
|
|
1243
1141
|
}), 128 /* KEYED_FRAGMENT */))];
|
|
1244
1142
|
}),
|
|
1245
1143
|
_: 1 /* STABLE */
|
|
1246
|
-
}, 8 /* PROPS */, ["default-active"]))], 4 /* STYLE */)) : createCommentVNode("v-if", true),
|
|
1144
|
+
}, 8 /* PROPS */, ["default-active"]))], 4 /* STYLE */)) : createCommentVNode("v-if", true), createVNode(unref(ElMain), {
|
|
1247
1145
|
"class": "pro-layout__content"
|
|
1248
1146
|
}, {
|
|
1249
1147
|
"default": withCtx(function () {
|
|
1250
1148
|
return [renderSlot(_ctx.$slots, "default")];
|
|
1251
1149
|
}),
|
|
1252
1150
|
_: 3 /* FORWARDED */
|
|
1253
|
-
}),
|
|
1151
|
+
}), __props.showFooter ? (openBlock(), createBlock(unref(ElFooter), {
|
|
1254
1152
|
key: 1,
|
|
1255
1153
|
height: __props.footerHeight,
|
|
1256
1154
|
"class": "pro-layout__footer"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deppon/deppon-template",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.5",
|
|
4
4
|
"main": "es/index.js",
|
|
5
5
|
"module": "es/index.js",
|
|
6
6
|
"typings": "es/index.d.ts",
|
|
@@ -43,11 +43,11 @@
|
|
|
43
43
|
"less": "^4.2.0"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@deppon/deppon-assets": "2.4.
|
|
47
|
-
"@deppon/deppon-request": "2.4.
|
|
48
|
-
"@deppon/deppon-router": "2.4.
|
|
49
|
-
"@deppon/deppon-ui": "2.4.
|
|
50
|
-
"@deppon/deppon-utils": "2.4.
|
|
46
|
+
"@deppon/deppon-assets": "2.4.5",
|
|
47
|
+
"@deppon/deppon-request": "2.4.5",
|
|
48
|
+
"@deppon/deppon-router": "2.4.5",
|
|
49
|
+
"@deppon/deppon-ui": "2.4.5",
|
|
50
|
+
"@deppon/deppon-utils": "2.4.5",
|
|
51
51
|
"dayjs": "^1.11.10",
|
|
52
52
|
"lodash-es": "^4.17.21",
|
|
53
53
|
"mitt": "^3.0.1"
|