@pubinfo/core 2.0.0-beta.31 → 2.0.0-beta.33

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.
Files changed (124) hide show
  1. package/dist/{AppSetting-C1dyZ-8E.js → AppSetting-DhcdApoo.js} +17 -17
  2. package/dist/{HCheckList.vue_vue_type_script_setup_true_lang-B3wESRn7.js → HCheckList.vue_vue_type_script_setup_true_lang-Bi9jyf-Y.js} +2 -2
  3. package/dist/HDivider.vue_vue_type_script_setup_true_lang-DIHR-9Yv.js +20 -0
  4. package/dist/HToggle-Di3WNnzE.js +34 -0
  5. package/dist/{PreferencesContent-DgycKl9e.js → PreferencesContent-BdSTTSM-.js} +6 -6
  6. package/dist/{SettingBreadcrumb-BlgX0ZNE.js → SettingBreadcrumb-ChQx96br.js} +8 -8
  7. package/dist/{SettingCopyright-FmqadL1w.js → SettingCopyright-CkMab5VK.js} +8 -8
  8. package/dist/{SettingEnableTransition-dzMgw8cN.js → SettingEnableTransition-BSXU87vT.js} +15 -15
  9. package/dist/{SettingHome-BwlXsTTt.js → SettingHome-DwioPezC.js} +13 -13
  10. package/dist/{SettingMenu-B5tHMS24.js → SettingMenu-yvKu7Yoq.js} +25 -25
  11. package/dist/{SettingMode-Bh0mvh66.js → SettingMode-C99ADNad.js} +6 -6
  12. package/dist/{SettingNavSearch-D4g24uwl.js → SettingNavSearch-mURLLetZ.js} +8 -8
  13. package/dist/{SettingOther-DwTtu6As.js → SettingOther-BGoSdp7a.js} +9 -9
  14. package/dist/{SettingPage-cDQXtwcG.js → SettingPage-Wwy5PtzC.js} +7 -7
  15. package/dist/{SettingTabbar-m8X7jEJH.js → SettingTabbar-C2ya4r4U.js} +9 -9
  16. package/dist/{SettingThemes-CX9ISeD_.js → SettingThemes-7oYUooGR.js} +27 -27
  17. package/dist/{SettingToolbar-ByLjBezg.js → SettingToolbar-A6OiGfAD.js} +5 -5
  18. package/dist/{SettingTopbar-o8wBZolp.js → SettingTopbar-GDEPltxm.js} +9 -9
  19. package/dist/{SettingWidthMode-Ux60mKiv.js → SettingWidthMode-qwkmTFIK.js} +15 -15
  20. package/dist/{TopThinMode-17GrCZdo.js → TopThinMode-BkmPN66X.js} +1 -1
  21. package/dist/{_...all_-6l5FWUkL.js → _...all_-CdjdWhUr.js} +5 -5
  22. package/dist/assets/styles/index.d.ts +3 -3
  23. package/dist/{colors-DiWJrScm.js → colors-7rGvqeKK.js} +1 -1
  24. package/dist/{index-CfasTv4x.js → index-BC-gcL8e.js} +4 -4
  25. package/dist/{index-Md7zV10q.js → index-C-6XxK2D.js} +5 -5
  26. package/dist/{index-bsi-FZDt.js → index-CgLD0zqO.js} +169 -169
  27. package/dist/{index-BmMbAV1Y.js → index-CtyzB2cq.js} +13 -13
  28. package/dist/{index-Ckgil96Y.js → index-Cw1uN5m-.js} +2 -2
  29. package/dist/{index-Be7jJtXg.js → index-DVUDANdM.js} +5 -5
  30. package/dist/{index-Dzwhw1L9.js → index-Dpq4uqWd.js} +22 -22
  31. package/dist/{index-DgpcBgWl.js → index-DuoLZ3r3.js} +4394 -4294
  32. package/dist/{index-De_ME_Ws.js → index-sYaQXYQC.js} +2 -2
  33. package/dist/index.js +4 -4
  34. package/dist/{index.vue_vue_type_style_index_0_scoped_fa1c6ee4_lang-B3Eieo0k.js → index.vue_vue_type_style_index_0_scoped_051f4e99_lang-CuU-JtjC.js} +870 -856
  35. package/dist/interface.d.ts +17 -2
  36. package/dist/layout/ui-kit/HDialog.vue.d.ts +1 -1
  37. package/dist/layout/ui-kit/HSlideover.vue.d.ts +1 -1
  38. package/dist/layout/ui-kit/HTooltip.vue.d.ts +1 -1
  39. package/dist/{menu-CC5544p-.js → menu-BL6hH6OM.js} +1862 -1856
  40. package/dist/{pick-CJo2YiT-.js → pick-CAmKymZJ.js} +1 -1
  41. package/dist/request.js +34 -32
  42. package/dist/stores/plugin/persist.d.ts +2 -2
  43. package/dist/style.css +3 -3
  44. package/package.json +25 -26
  45. package/src/assets/styles/globals.css +188 -0
  46. package/src/assets/styles/index.ts +3 -3
  47. package/src/assets/styles/nprogress.css +68 -0
  48. package/src/assets/styles/rbac.css +51 -0
  49. package/src/assets/styles/resources/utils.css +53 -0
  50. package/src/assets/styles/resources/variables.css +5 -0
  51. package/src/components/NotAllowed/index.vue +4 -6
  52. package/src/components/PassStrengthValidator/index.vue +33 -48
  53. package/src/components/PassStrengthValidator/rule.vue +13 -25
  54. package/src/components/PubinfoIcon/index.vue +4 -8
  55. package/src/composables/watchDiff.ts +1 -1
  56. package/src/create.ts +10 -3
  57. package/src/interface.ts +24 -2
  58. package/src/layout/Layout.vue +113 -161
  59. package/src/layout/components/Content/IframeView.vue +1 -2
  60. package/src/layout/components/Content/LinkView.vue +2 -2
  61. package/src/layout/components/Content/index.vue +1 -2
  62. package/src/layout/components/Copyright/index.vue +7 -8
  63. package/src/layout/components/Header/TopMode/More.vue +24 -32
  64. package/src/layout/components/Header/TopMode/NotCursor.vue +20 -29
  65. package/src/layout/components/Header/TopMode/index.vue +1 -1
  66. package/src/layout/components/Header/index.vue +118 -206
  67. package/src/layout/components/Logo/index.vue +4 -19
  68. package/src/layout/components/Menu/item.vue +16 -25
  69. package/src/layout/components/SettingBar/AppSetting.vue +11 -11
  70. package/src/layout/components/SettingBar/components/DayNightToggle.vue +26 -120
  71. package/src/layout/components/SettingBar/components/SettingEnableTransition.vue +111 -136
  72. package/src/layout/components/SettingBar/components/SettingMode.vue +78 -88
  73. package/src/layout/components/SettingBar/components/SettingThemes.vue +48 -85
  74. package/src/layout/components/SettingBar/components/SettingWidthMode.vue +63 -71
  75. package/src/layout/components/SettingBar/index.vue +29 -62
  76. package/src/layout/components/Sidebar/MainSidebar.vue +81 -126
  77. package/src/layout/components/Sidebar/SubSidebar.vue +50 -59
  78. package/src/layout/components/Tools/Breadcrumb/index.vue +6 -12
  79. package/src/layout/components/Tools/DayNightSwitch.vue +40 -63
  80. package/src/layout/components/Tools/Preferences/PreferencesContent.vue +210 -277
  81. package/src/layout/components/Tools/Search.vue +5 -5
  82. package/src/layout/components/Tools/index.vue +1 -1
  83. package/src/layout/components/Topbar/Tabbar/MoreAction.vue +98 -145
  84. package/src/layout/components/Topbar/Tabbar/index.vue +259 -395
  85. package/src/layout/components/Topbar/Toolbar/Favorites.vue +4 -4
  86. package/src/layout/components/Topbar/Toolbar/index.vue +39 -56
  87. package/src/layout/components/Topbar/index.vue +16 -19
  88. package/src/layout/composables/useContext.ts +1 -1
  89. package/src/layout/composables/useMenu.ts +1 -1
  90. package/src/layout/composables/useTabbar.ts +1 -1
  91. package/src/layout/composables/useTitle.ts +1 -1
  92. package/src/layout/provider.ts +1 -1
  93. package/src/layout/ui-kit/HDialog.vue +1 -1
  94. package/src/layout/ui-kit/HDivider.vue +6 -35
  95. package/src/layout/ui-kit/HSlideover.vue +1 -1
  96. package/src/layout/ui-kit/HToggle.vue +49 -93
  97. package/src/layout/ui-kit/HTooltip.vue +1 -1
  98. package/src/locales/index.ts +1 -1
  99. package/src/pages/personal/profile/index.vue +1 -1
  100. package/src/pages/system/[...all].vue +4 -6
  101. package/src/pages/system/change-organization/index.vue +23 -37
  102. package/src/pages/system/change-password/components/ChangePasswordForm/index.vue +1 -1
  103. package/src/pages/system/change-password/index.vue +16 -29
  104. package/src/pages/system/not-permission/index.vue +4 -6
  105. package/src/route/guard/basic.ts +1 -1
  106. package/src/route/routes.ts +1 -1
  107. package/src/stores/modules/favorites.ts +1 -1
  108. package/src/stores/modules/menu.ts +1 -1
  109. package/src/stores/modules/route.ts +2 -2
  110. package/src/stores/modules/settings.ts +7 -7
  111. package/src/stores/modules/user.ts +2 -2
  112. package/src/stores/plugin/persist.ts +3 -3
  113. package/src/stores/plugin/sideEffect/tabbarStorage.ts +1 -1
  114. package/src/utils/crypto.ts +1 -1
  115. package/types/auto-imports.d.ts +1 -1
  116. package/types/components.d.ts +1 -0
  117. package/types/vue-router.d.ts +8 -8
  118. package/dist/HDivider-DgXBhPr0.js +0 -21
  119. package/dist/HToggle-Cd71WKvG.js +0 -34
  120. package/src/assets/styles/globals.scss +0 -189
  121. package/src/assets/styles/nprogress.scss +0 -63
  122. package/src/assets/styles/rbac.scss +0 -61
  123. package/src/assets/styles/resources/utils.scss +0 -53
  124. package/src/assets/styles/resources/variables.scss +0 -6
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pubinfo/core",
3
3
  "type": "module",
4
- "version": "2.0.0-beta.31",
4
+ "version": "2.0.0-beta.33",
5
5
  "exports": {
6
6
  ".": {
7
7
  "types": "./dist/index.d.ts",
@@ -23,45 +23,45 @@
23
23
  "types"
24
24
  ],
25
25
  "peerDependencies": {
26
- "alova": "^3.2.13",
27
- "pinia": "^2.3.1",
28
- "vue": "^3.5.16",
26
+ "alova": "^3.3.4",
27
+ "pinia": "^3.0.3",
28
+ "vue": "^3.5.17",
29
29
  "vue-i18n": "^10.0.7",
30
30
  "vue-router": "^4.5.1",
31
- "@pubinfo/config": "2.0.0-beta.31"
31
+ "@pubinfo/config": "2.0.0-beta.33"
32
32
  },
33
33
  "dependencies": {
34
- "@alova/adapter-axios": "^2.0.14",
34
+ "@alova/adapter-axios": "^2.0.16",
35
35
  "@ant-design/icons-vue": "^7.0.1",
36
36
  "@headlessui/vue": "^1.7.23",
37
- "@imengyu/vue3-context-menu": "^1.5.0",
37
+ "@imengyu/vue3-context-menu": "^1.5.1",
38
38
  "@pubinfo/pro-components": "^1.7.1",
39
39
  "@unocss/reset": "^65.5.0",
40
- "@vueuse/core": "^13.3.0",
41
- "@vueuse/integrations": "^13.3.0",
40
+ "@vueuse/core": "^13.5.0",
41
+ "@vueuse/integrations": "^13.5.0",
42
42
  "ant-design-vue": "^4.2.6",
43
- "axios": "^1.9.0",
43
+ "axios": "^1.10.0",
44
44
  "consola": "^3.4.2",
45
45
  "floating-vue": "5.2.2",
46
46
  "hookable": "^5.5.3",
47
- "hotkeys-js": "^3.13.10",
47
+ "hotkeys-js": "^3.13.14",
48
48
  "jsencrypt": "^3.3.2",
49
49
  "lodash-es": "^4.17.21",
50
50
  "md5": "^2.3.0",
51
51
  "mitt": "^3.0.1",
52
52
  "nprogress": "^0.2.0",
53
- "overlayscrollbars": "^2.11.3",
53
+ "overlayscrollbars": "^2.11.4",
54
54
  "overlayscrollbars-vue": "^0.5.9",
55
55
  "path-browserify": "^1.0.1",
56
- "path-to-regexp": "^6.3.0",
57
- "pinia-plugin-persistedstate": "^3.2.3",
56
+ "path-to-regexp": "^8.2.0",
57
+ "pinia-plugin-persistedstate": "^4.4.1",
58
58
  "sortablejs": "^1.15.6",
59
59
  "vue-m-message": "^4.0.2",
60
60
  "zxcvbn": "^4.4.2"
61
61
  },
62
62
  "devDependencies": {
63
- "@iconify/json": "^2.2.343",
64
- "@iconify/vue": "^4.3.0",
63
+ "@iconify/json": "^2.2.354",
64
+ "@iconify/vue": "^5.0.0",
65
65
  "@pubinfo/openapi": "^0.8.4",
66
66
  "@pubinfo/preset-openapi": "^0.8.4",
67
67
  "@types/lodash-es": "^4.17.12",
@@ -70,22 +70,21 @@
70
70
  "@types/path-browserify": "^1.0.3",
71
71
  "@types/sortablejs": "^1.15.8",
72
72
  "@types/zxcvbn": "^4.4.5",
73
- "@vitejs/plugin-vue": "^5.2.4",
74
- "@vitejs/plugin-vue-jsx": "^4.2.0",
75
- "alova": "^3.2.13",
76
- "pinia": "^2.3.1",
77
- "sass": "1.83.0",
73
+ "@vitejs/plugin-vue": "^6.0.0",
74
+ "@vitejs/plugin-vue-jsx": "^5.0.1",
75
+ "alova": "^3.3.4",
76
+ "pinia": "^3.0.3",
78
77
  "type-fest": "^4.41.0",
79
78
  "unocss": "^65.5.0",
80
- "unplugin-auto-import": "^0.18.6",
81
- "unplugin-icons": "^0.22.0",
82
- "unplugin-vue-components": "^0.27.5",
79
+ "unplugin-auto-import": "^19.3.0",
80
+ "unplugin-icons": "^22.1.0",
81
+ "unplugin-vue-components": "^28.8.0",
83
82
  "vite": "^6.3.5",
84
83
  "vite-plugin-dts": "^4.5.4",
85
- "vue": "^3.5.16",
84
+ "vue": "^3.5.17",
86
85
  "vue-i18n": "^10.0.7",
87
86
  "vue-router": "^4.5.1",
88
- "@pubinfo/config": "2.0.0-beta.31"
87
+ "@pubinfo/config": "2.0.0-beta.33"
89
88
  },
90
89
  "scripts": {
91
90
  "dev": "vite build -w -m watch",
@@ -0,0 +1,188 @@
1
+ /* 页面布局 CSS 变量 */
2
+ :root {
3
+ /* 这是一个复合变量
4
+ 当页宽模式为 adaption-min-width 时,它代表 最小宽度
5
+ 当页宽模式为 center 时,它代表 固定宽度
6
+ 当页宽模式为 center-max-width 时,它代表 最大宽度 */
7
+ --g-app-width: 1400px;
8
+
9
+ /* 头部宽度(默认自适应宽度,可固定宽度,固定宽度后为居中显示) */
10
+ --g-header-width: 100%;
11
+
12
+ /* 头部高度 */
13
+ --g-header-height: 56px;
14
+
15
+ /* 侧边栏宽度 */
16
+ --g-main-sidebar-width: 63px;
17
+ --g-sub-sidebar-width: 220px;
18
+ --g-sub-sidebar-collapse-width: 64px;
19
+
20
+ /* 侧边栏 Logo 区域高度 */
21
+ --g-sidebar-logo-height: 50px;
22
+
23
+ /* 标签栏高度 */
24
+ --g-tabbar-height: 48px;
25
+
26
+ /* 工具栏高度 */
27
+ --g-toolbar-height: 45px;
28
+
29
+ /* 标签页最大最小宽度,两个宽度为同一数值时,则为固定宽度,反之将宽度设置为 unset 则为自适应 */
30
+ --g-tabbar-tab-max-width: 150px;
31
+ --g-tabbar-tab-min-width: 150px;
32
+ }
33
+
34
+ /* 明暗模式 CSS 变量 */
35
+ :root {
36
+ color-scheme: light;
37
+ --g-box-shadow-color: rgba(0, 0, 0, 0.12);
38
+ }
39
+
40
+ :root::view-transition-old(root),
41
+ :root::view-transition-new(root) {
42
+ mix-blend-mode: normal;
43
+ animation: none;
44
+ }
45
+
46
+ :root::view-transition-old(root) {
47
+ z-index: 1;
48
+ }
49
+
50
+ :root::view-transition-new(root) {
51
+ z-index: 9999;
52
+ }
53
+
54
+ :root.dark {
55
+ color-scheme: dark;
56
+ --g-box-shadow-color: rgba(0, 0, 0, 0.72);
57
+ }
58
+
59
+ :root.dark::view-transition-old(root) {
60
+ z-index: 9999;
61
+ }
62
+
63
+ :root.dark::view-transition-new(root) {
64
+ z-index: 1;
65
+ }
66
+
67
+ ::-webkit-scrollbar {
68
+ width: 12px;
69
+ height: 12px;
70
+ }
71
+
72
+ ::-webkit-scrollbar-thumb {
73
+ background-color: rgba(0, 0, 0, 0.4);
74
+ background-clip: padding-box;
75
+ border: 3px solid transparent;
76
+ border-radius: 6px;
77
+ }
78
+
79
+ ::-webkit-scrollbar-thumb:hover {
80
+ background-color: rgba(0, 0, 0, 0.5);
81
+ }
82
+
83
+ ::-webkit-scrollbar-track {
84
+ background-color: transparent;
85
+ }
86
+
87
+ html,
88
+ body {
89
+ height: 100%;
90
+ }
91
+
92
+ body {
93
+ box-sizing: border-box;
94
+ margin: 0;
95
+ font-family: Lato, "PingFang SC", "Microsoft YaHei", sans-serif;
96
+ background-color: var(--g-container-bg);
97
+ -webkit-tap-highlight-color: transparent;
98
+ }
99
+
100
+ body.overflow-hidden {
101
+ overflow: hidden;
102
+ }
103
+
104
+ * {
105
+ box-sizing: inherit;
106
+ }
107
+
108
+ /* 右侧内容区针对fixed元素,有横向铺满的需求,可在fixed元素上设置 [data-fixed-calc-width] */
109
+ [data-fixed-calc-width] {
110
+ position: fixed;
111
+ right: 0;
112
+ left: 50%;
113
+ }
114
+
115
+ [data-app-width-mode="adaption"] [data-fixed-calc-width],
116
+ [data-app-width-mode="adaption-min-width"] [data-fixed-calc-width] {
117
+ width: calc(100% - var(--g-main-sidebar-actual-width) - var(--g-sub-sidebar-actual-width));
118
+ transform: translateX(-50%) translateX(calc(var(--g-main-sidebar-actual-width) / 2)) translateX(calc(var(--g-sub-sidebar-actual-width) / 2));
119
+ }
120
+
121
+ [data-app-width-mode="center"] [data-fixed-calc-width],
122
+ [data-app-width-mode="center-max-width"] [data-fixed-calc-width] {
123
+ width: calc(var(--g-app-width) - var(--g-main-sidebar-actual-width) - var(--g-sub-sidebar-actual-width));
124
+ transform: translateX(-50%) translateX(calc(var(--g-main-sidebar-actual-width) / 2)) translateX(calc(var(--g-sub-sidebar-actual-width) / 2));
125
+ }
126
+
127
+ [data-mode="mobile"] [data-fixed-calc-width] {
128
+ width: 100% !important;
129
+ transform: translateX(-50%) !important;
130
+ }
131
+
132
+ /* textarea 字体跟随系统 */
133
+ textarea {
134
+ font-family: inherit;
135
+ }
136
+
137
+ /* Overrides Floating Vue */
138
+ .v-popper--theme-dropdown,
139
+ .v-popper--theme-tooltip {
140
+ display: inline-flex;
141
+ }
142
+
143
+ .v-popper--theme-dropdown .v-popper__inner,
144
+ .v-popper--theme-tooltip .v-popper__inner {
145
+ background-color: white;
146
+ color: #1a1a1a;
147
+ border-radius: 6px;
148
+ box-shadow: 0 6px 30px rgba(0, 0, 0, 0.1);
149
+ border: 1px solid rgba(120, 113, 108, 0.2);
150
+ font-size: 12px;
151
+ font-weight: normal;
152
+ }
153
+
154
+ .dark .v-popper--theme-dropdown .v-popper__inner,
155
+ .dark .v-popper--theme-tooltip .v-popper__inner {
156
+ background-color: #1c1c1e;
157
+ color: white;
158
+ }
159
+
160
+ .v-popper--theme-tooltip .v-popper__arrow-inner,
161
+ .v-popper--theme-dropdown .v-popper__arrow-inner {
162
+ border-color: white;
163
+ }
164
+
165
+ .dark .v-popper--theme-tooltip .v-popper__arrow-inner,
166
+ .dark .v-popper--theme-dropdown .v-popper__arrow-inner {
167
+ border-color: #2c2c2e;
168
+ }
169
+
170
+ .v-popper--theme-tooltip .v-popper__arrow-outer,
171
+ .v-popper--theme-dropdown .v-popper__arrow-outer {
172
+ border-color: rgba(120, 113, 108, 0.2);
173
+ }
174
+
175
+ .v-popper--theme-tooltip.v-popper--shown,
176
+ .v-popper--theme-tooltip.v-popper--shown * {
177
+ transition: none !important;
178
+ }
179
+
180
+ [data-overlayscrollbars-contents] {
181
+ overscroll-behavior: contain;
182
+ }
183
+
184
+ /* medium-zoom */
185
+ .medium-zoom-overlay,
186
+ .medium-zoom-image {
187
+ z-index: 3000;
188
+ }
@@ -1,6 +1,6 @@
1
1
  import '@unocss/reset/normalize.css';
2
2
  import 'overlayscrollbars/overlayscrollbars.css';
3
- import './globals.scss';
4
- import './nprogress.scss';
5
- import './rbac.scss';
3
+ import './globals.css';
4
+ import './nprogress.css';
5
+ import './rbac.css';
6
6
  import 'virtual:uno.css';
@@ -0,0 +1,68 @@
1
+ #nprogress {
2
+ pointer-events: none;
3
+ }
4
+
5
+ #nprogress .bar {
6
+ position: fixed;
7
+ top: 0;
8
+ left: 0;
9
+ z-index: 1031;
10
+ width: 100%;
11
+ height: 2px;
12
+ background: rgb(var(--ui-primary));
13
+ }
14
+
15
+ #nprogress .peg {
16
+ position: absolute;
17
+ right: 0;
18
+ display: block;
19
+ width: 100px;
20
+ height: 100%;
21
+ box-shadow: 0 0 10px rgb(var(--ui-primary)), 0 0 5px rgb(var(--ui-primary));
22
+ opacity: 1;
23
+ -webkit-transform: rotate(3deg) translate(0, -4px);
24
+ -moz-transform: rotate(3deg) translate(0, -4px);
25
+ -ms-transform: rotate(3deg) translate(0, -4px);
26
+ transform: rotate(3deg) translate(0, -4px);
27
+ }
28
+
29
+ #nprogress .spinner {
30
+ position: fixed;
31
+ top: 11px;
32
+ right: 14px;
33
+ z-index: 1031;
34
+ display: block;
35
+ }
36
+
37
+ #nprogress .spinner .spinner-icon {
38
+ box-sizing: border-box;
39
+ width: 18px;
40
+ height: 18px;
41
+ border: solid 2px transparent;
42
+ border-top-color: rgb(var(--ui-primary));
43
+ border-left-color: rgb(var(--ui-primary));
44
+ border-radius: 50%;
45
+ -webkit-animation: nprogress-spinner 400ms linear infinite;
46
+ -moz-animation: nprogress-spinner 400ms linear infinite;
47
+ -ms-animation: nprogress-spinner 400ms linear infinite;
48
+ animation: nprogress-spinner 400ms linear infinite;
49
+ }
50
+
51
+ .nprogress-custom-parent {
52
+ position: relative;
53
+ overflow: hidden;
54
+ }
55
+
56
+ .nprogress-custom-parent #nprogress .spinner,
57
+ .nprogress-custom-parent #nprogress .bar {
58
+ position: absolute;
59
+ }
60
+
61
+ @keyframes nprogress-spinner {
62
+ 0% {
63
+ transform: rotate(0deg);
64
+ }
65
+ 100% {
66
+ transform: rotate(360deg);
67
+ }
68
+ }
@@ -0,0 +1,51 @@
1
+ [data-theme="classic"] #app-main {
2
+ background-image: url("@/assets/images/slider-bg.png");
3
+ background-repeat: no-repeat;
4
+ background-position: left bottom;
5
+ background-size: 450px 89%;
6
+ }
7
+
8
+ [data-theme="classic"] #app-main .sub-sidebar-container {
9
+ background-color: transparent;
10
+ }
11
+
12
+ [data-theme="classic"] #app-main > header {
13
+ background-image: url("@/assets/images/header-bg.png");
14
+ background-repeat: no-repeat;
15
+ background-position: left bottom;
16
+ background-size: cover;
17
+ }
18
+
19
+ [data-theme="classic"] #app-main > header .menu {
20
+ background-color: transparent !important;
21
+ }
22
+
23
+ [data-theme="classic"] #app-main > header .header-container .tools > span {
24
+ background-color: #4173f9;
25
+ }
26
+
27
+ [data-theme="classic"] #app-main .page-container {
28
+ padding-left: 0;
29
+ }
30
+
31
+ [data-theme="classic"] .wrapper .sidebar-container {
32
+ box-shadow: none !important;
33
+ }
34
+
35
+ [data-theme="classic"] .wrapper .main-container {
36
+ box-shadow: none !important;
37
+ }
38
+
39
+ /* FIXME: Over rides @pubinfo/pro-components */
40
+ .pro-table .ant-form-item {
41
+ margin-bottom: 16px;
42
+ }
43
+
44
+ .pro-table .ant-card .ant-card-body {
45
+ padding: 16px;
46
+ }
47
+
48
+ .pro-table .ant-card .ant-card-head {
49
+ min-height: 48px;
50
+ padding: 0 16px;
51
+ }
@@ -0,0 +1,53 @@
1
+ /* 单行超出隐藏固定宽度 */
2
+ .text-overflow-singleline {
3
+ overflow: hidden;
4
+ text-overflow: ellipsis;
5
+ white-space: nowrap;
6
+ }
7
+
8
+ /* 多行超出隐藏,例如两行 */
9
+ .text-overflow-multiline {
10
+ display: -webkit-box;
11
+ -webkit-box-orient: vertical;
12
+ overflow: hidden;
13
+ -webkit-line-clamp: 2;
14
+ }
15
+
16
+ /* 定位居中 - 水平居中 */
17
+ .position-center-x {
18
+ position: absolute;
19
+ left: 50%;
20
+ transform: translateX(-50%);
21
+ }
22
+
23
+ /* 定位居中 - 垂直居中 */
24
+ .position-center-y {
25
+ position: absolute;
26
+ top: 50%;
27
+ transform: translateY(-50%);
28
+ }
29
+
30
+ /* 定位居中 - 水平垂直居中 */
31
+ .position-center-xy {
32
+ position: absolute;
33
+ top: 50%;
34
+ left: 50%;
35
+ transform: translateX(-50%) translateY(-50%);
36
+ }
37
+
38
+ /* 文字两端对齐 */
39
+ .justify-align {
40
+ text-align: justify;
41
+ text-align-last: justify;
42
+ }
43
+
44
+ /* 清除浮动 */
45
+ .clearfix {
46
+ zoom: 1;
47
+ }
48
+ .clearfix::before,
49
+ .clearfix::after {
50
+ display: block;
51
+ clear: both;
52
+ content: "";
53
+ }
@@ -0,0 +1,5 @@
1
+ /* 全局变量 */
2
+ :root {
3
+ --g-app-width: 1400px;
4
+ --g-header-width: 100%;
5
+ }
@@ -61,16 +61,14 @@ function goBack() {
61
61
  </div>
62
62
  </template>
63
63
 
64
- <style lang="scss" scoped>
64
+ <style scoped>
65
65
  .noPermissionIcon {
66
66
  background: url("@/assets/icons/403.svg") no-repeat;
67
67
  background-size: 100% 100%;
68
68
  }
69
69
 
70
- [data-theme="dark"] {
71
- .noPermissionIcon {
72
- background: url("@/assets/icons/403_dark.svg") no-repeat;
73
- background-size: 100% 100%;
74
- }
70
+ [data-theme="dark"] .noPermissionIcon {
71
+ background: url("@/assets/icons/403_dark.svg") no-repeat;
72
+ background-size: 100% 100%;
75
73
  }
76
74
  </style>
@@ -152,61 +152,46 @@ watchEffect(() => {
152
152
  </div>
153
153
  </template>
154
154
 
155
- <style lang="scss" scoped>
155
+ <style scoped>
156
156
  .pass-strength-validator {
157
- padding: 15px;
158
-
159
- .title-wrap {
160
- margin-bottom: 40px;
161
- font-size: 24px;
162
- font-weight: 600;
163
- color: #1677ff;
164
- }
165
-
166
- .rules-title {
167
- margin-bottom: 15px;
168
- font-size: 16px;
169
- font-weight: 500;
170
- }
171
-
172
- &.vertical {
173
- width: 1130px;
174
- padding: 18px 32px 24px;
175
-
176
- .title-wrap {
177
- margin-bottom: 16px;
178
- font-size: 16px;
179
- }
157
+ --at-apply: p-15px;
158
+ }
180
159
 
181
- .rules-wrap {
182
- display: flex;
183
- }
160
+ .pass-strength-validator .title-wrap {
161
+ --at-apply: text-2xl font-semibold text-[#1677ff] mb-10;
162
+ }
184
163
 
185
- .basic-rules,
186
- .advanced-rules {
187
- position: relative;
188
- flex: 1;
189
- }
164
+ .pass-strength-validator .rules-title {
165
+ --at-apply: text-base font-medium mb-[15px];
166
+ }
190
167
 
191
- .basic-rules::after {
192
- position: absolute;
193
- top: 11px;
194
- right: 35px;
195
- bottom: 11px;
196
- width: 1px;
197
- height: auto;
198
- content: "";
199
- background: #e5e6eb;
200
- }
168
+ .pass-strength-validator.vertical {
169
+ --at-apply: w-[1130px] pt-[18px] pb-6 px-8;
170
+ }
171
+ .pass-strength-validator.vertical .title-wrap {
172
+ --at-apply: text-base mb-4;
173
+ }
174
+ .pass-strength-validator.vertical .rules-wrap {
175
+ --at-apply: flex;
176
+ }
177
+ .pass-strength-validator.vertical .basic-rules,
178
+ .pass-strength-validator.vertical .advanced-rules {
179
+ --at-apply: relative flex-1;
180
+ }
181
+ .pass-strength-validator.vertical .basic-rules::after {
182
+ --at-apply: absolute w-px h-auto content-[""] right-[35px] inset-y-[11px];
183
+ background: #e5e6eb;
184
+ }
185
+ .pass-strength-validator.vertical .rules-title {
186
+ --at-apply: text-sm font-[bold] mb-3.5;
187
+ }
201
188
 
202
- .rules-title {
203
- margin-bottom: 14px;
204
- font-size: 14px;
205
- font-weight: bold;
206
- }
207
- }
189
+ /* 样式穿透,用于覆盖 ant-design-vue 组件样式 */
190
+ .pass-strength-validator :deep(.ant-divider) {
191
+ --at-apply: mx-0 my-4;
208
192
  }
209
193
 
194
+ /* 暗色主题支持 */
210
195
  .dark .pass-strength-validator.vertical .basic-rules::after {
211
196
  background: #424242;
212
197
  }
@@ -23,29 +23,17 @@ const props = defineProps<{
23
23
  </div>
24
24
  </template>
25
25
 
26
- <style scoped lang="scss">
27
- .rule-item {
28
- display: flex;
29
- flex-direction: row;
30
- padding: 10px 0;
31
- font-size: 14px;
32
- line-height: 19px;
33
-
34
- .icon {
35
- margin-right: 10px;
36
- line-height: 23px;
37
- }
38
-
39
- &.vertical {
40
- padding: 0;
41
- margin-bottom: 6px;
42
- line-height: 18px;
43
- color: #86909c;
44
-
45
- .icon {
46
- margin-right: 6px;
47
- line-height: 18px;
48
- }
49
- }
50
- }
26
+ <style scoped>
27
+ .rule-item {
28
+ --at-apply: flex flex-row text-sm leading-[19px] px-0 py-2.5;
29
+ }
30
+ .rule-item .icon {
31
+ --at-apply: leading-[23px] mr-2.5;
32
+ }
33
+ .rule-item.vertical {
34
+ --at-apply: leading-[18px] text-[#86909c] mb-1.5 p-0;
35
+ }
36
+ .rule-item.vertical .icon {
37
+ --at-apply: leading-[18px] mr-1.5;
38
+ }
51
39
  </style>
@@ -69,19 +69,15 @@ const style = computed(() => {
69
69
  };
70
70
  });
71
71
 
72
- function _loadIcon() {
73
- if (!loadIcon && outputType.value === 'custom') {
74
- return new Error('Need pro `loadIcon`, according to [PubinfoProvider].');
75
- }
76
-
72
+ const icon = computed(() => {
77
73
  return loadIcon?.(props.name) ?? iconRegistry.get(props.name);
78
- }
74
+ });
79
75
  </script>
80
76
 
81
77
  <template>
82
- <i class="relative h-[1em] w-[1em] flex-inline items-center justify-center fill-current leading-[1em]" :style="style">
78
+ <i class="relative size-[1em] flex-inline items-center justify-center fill-current leading-[1em]" :style="style">
83
79
  <i v-if="outputType === 'css'" :class="outputName" />
84
80
  <Icon v-else-if="outputType === 'svg'" :icon="outputName" />
85
- <img v-else-if="loadIcon" class="w-1em h-1em" :src="_loadIcon()">
81
+ <img v-else-if="icon" class="size-1em" :src="icon">
86
82
  </i>
87
83
  </template>
@@ -35,7 +35,7 @@ export function watchDiffObject<
35
35
  ) {
36
36
  let oldValue: Record<string, any> = options?.immediate
37
37
  ? {}
38
- : cloneDeep(source instanceof Function
38
+ : cloneDeep(typeof source === 'function'
39
39
  ? source()
40
40
  : source,
41
41
  );