@pubinfo/core 2.0.0-beta.30 → 2.0.0-beta.32

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-CVExa3_K.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-p9KS2Pve.js → PreferencesContent-BdSTTSM-.js} +6 -6
  6. package/dist/{SettingBreadcrumb-DwvQtev2.js → SettingBreadcrumb-ChQx96br.js} +8 -8
  7. package/dist/{SettingCopyright-Wb3hkKZZ.js → SettingCopyright-CkMab5VK.js} +8 -8
  8. package/dist/{SettingEnableTransition-DT23T8dO.js → SettingEnableTransition-BSXU87vT.js} +15 -15
  9. package/dist/{SettingHome-C0K6wkyt.js → SettingHome-DwioPezC.js} +13 -13
  10. package/dist/{SettingMenu-CCKj46sg.js → SettingMenu-yvKu7Yoq.js} +25 -25
  11. package/dist/{SettingMode-pwpzZcxj.js → SettingMode-C99ADNad.js} +6 -6
  12. package/dist/{SettingNavSearch-zoiP1hL2.js → SettingNavSearch-mURLLetZ.js} +8 -8
  13. package/dist/{SettingOther-OIZZcjfo.js → SettingOther-BGoSdp7a.js} +9 -9
  14. package/dist/{SettingPage-CyljqOiV.js → SettingPage-Wwy5PtzC.js} +7 -7
  15. package/dist/{SettingTabbar-DCQai4_R.js → SettingTabbar-C2ya4r4U.js} +9 -9
  16. package/dist/{SettingThemes-DJIaIqy1.js → SettingThemes-7oYUooGR.js} +27 -27
  17. package/dist/{SettingToolbar-Dvv11piV.js → SettingToolbar-A6OiGfAD.js} +5 -5
  18. package/dist/{SettingTopbar-CMpP98WU.js → SettingTopbar-GDEPltxm.js} +9 -9
  19. package/dist/{SettingWidthMode-DVPAA6Xs.js → SettingWidthMode-qwkmTFIK.js} +15 -15
  20. package/dist/{TopThinMode-D8rMfa-C.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-lv9zqWqR.js → index-Dpq4uqWd.js} +22 -22
  31. package/dist/{index-CyyndQxa.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 +12 -0
  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 +19 -0
  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
@@ -1,5 +1,4 @@
1
1
  <script setup lang="ts">
2
- import { PubinfoIcon } from '@/components';
3
2
  import { isUndefined } from 'lodash-es';
4
3
  import { OverlayScrollbarsComponent } from 'overlayscrollbars-vue';
5
4
  import Sortable from 'sortablejs';
@@ -7,6 +6,7 @@ import { useI18n } from 'vue-i18n';
7
6
  import FluentDelete24Filled from '~icons/fluent/delete-24-filled';
8
7
  import FluentStarAdd16Regular from '~icons/fluent/star-add-16-regular';
9
8
  import FluentStarDismiss16Regular from '~icons/fluent/star-dismiss-16-regular';
9
+ import { PubinfoIcon } from '@/components';
10
10
  import { useContext } from '../../../composables/useContext';
11
11
 
12
12
  defineOptions({
@@ -123,13 +123,13 @@ watch(favoritesContainerRef, (newSortableContainer) => {
123
123
  </div>
124
124
  </template>
125
125
 
126
- <style lang="scss" scoped>
126
+ <style scoped>
127
127
  :deep([data-overlayscrollbars-viewport]) {
128
- overscroll-behavior: contain;
128
+ --at-apply: overscroll-contain;
129
129
  }
130
130
 
131
131
  .draggable-ghost {
132
- opacity: 0;
132
+ --at-apply: op-0;
133
133
  }
134
134
 
135
135
  .name {
@@ -1,8 +1,8 @@
1
1
  <script setup lang="ts">
2
2
  import type { RouteRecordRaw } from 'vue-router';
3
- import { PubinfoIcon } from '@/components';
4
3
  import { cloneDeep } from 'lodash-es';
5
4
  import { compile } from 'path-to-regexp';
5
+ import { PubinfoIcon } from '@/components';
6
6
  import { useContext } from '../../../composables/useContext';
7
7
  import Breadcrumb from '../../Tools/Breadcrumb/index.vue';
8
8
  import BreadcrumbItem from '../../Tools/Breadcrumb/item.vue';
@@ -238,64 +238,47 @@ function onSelect(node: RouteRecordRaw, index: number) {
238
238
  </div>
239
239
  </template>
240
240
 
241
- <style lang="scss" scoped>
241
+ <style scoped>
242
242
  .toolbar-container {
243
- display: flex;
244
- align-items: center;
245
- justify-content: space-between;
246
- height: var(--g-toolbar-height);
247
- background-color: var(--g-container-bg);
248
- transition: background-color 0.3s;
249
-
250
- .left-box {
251
- display: flex;
252
- align-items: center;
253
- padding-right: 50px;
254
- padding-left: 10px;
255
- overflow: hidden;
256
- mask-image: linear-gradient(90deg, #000 0%, #000 calc(100% - 50px), transparent);
257
-
258
- .breadcrumb {
259
- padding-left: 10px;
260
- white-space: nowrap;
261
-
262
- &.breadcrumb-modern {
263
- :deep(.breadcrumb-item) {
264
- .text {
265
- --at-apply: bg-stone-2/80 dark:bg-stone-8/80;
266
-
267
- padding: 6px 16px;
268
- clip-path: polygon(0 0, calc(100% - 8px) 0, 100% 50%, calc(100% - 8px) 100%, 0 100%, 8px 50%);
269
-
270
- &.is-link:hover {
271
- --at-apply: bg-stone-2 dark:bg-stone-8;
272
- }
273
- }
274
-
275
- &:first-child .text {
276
- padding-left: 12px;
277
- clip-path: polygon(0 0, calc(100% - 8px) 0, 100% 50%, calc(100% - 8px) 100%, 0 100%);
278
- border-radius: 6px 0 0 6px;
279
- }
280
-
281
- &:last-child:not(:first-child) .text {
282
- --at-apply: bg-stone-2 dark:bg-stone-8;
283
-
284
- padding-right: 12px;
285
- clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%, 8px 50%);
286
- border-radius: 0 6px 6px 0;
287
- }
288
-
289
- .separator {
290
- display: none;
291
- }
292
- }
293
- }
294
- }
295
- }
243
+ --at-apply: flex items-center justify-between h-[--g-toolbar-height]
244
+ bg-[--g-container-bg] transition-[background-color] duration-[0.3s];
245
+ }
246
+
247
+ .left-box {
248
+ --at-apply: flex items-center overflow-hidden pl-2.5 pr-[50px];
249
+ mask-image: linear-gradient(90deg, #000 0%, #000 calc(100% - 50px), transparent);
250
+ }
251
+
252
+ .breadcrumb {
253
+ --at-apply: pl-10px whitespace-normal;
254
+ }
255
+
256
+ .breadcrumb.breadcrumb-modern :deep(.breadcrumb-item) .text {
257
+ --at-apply: bg-black/5 px-4 py-1.5 bg-stone-2/80 dark:bg-stone-8/80;
258
+ clip-path: polygon(0 0, calc(100% - 8px) 0, 100% 50%, calc(100% - 8px) 100%, 0 100%, 8px 50%);
259
+ }
260
+
261
+ .breadcrumb.breadcrumb-modern :deep(.breadcrumb-item) .text.is-link:hover {
262
+ --at-apply: bg-stone-2 dark:bg-stone-8;
263
+ }
264
+
265
+ .breadcrumb.breadcrumb-modern :deep(.breadcrumb-item):first-child .text {
266
+ --at-apply: pl-3;
267
+ clip-path: polygon(0 0, calc(100% - 8px) 0, 100% 50%, calc(100% - 8px) 100%, 0 100%);
268
+ border-radius: 6px 0 0 6px;
269
+ }
270
+
271
+ .breadcrumb.breadcrumb-modern :deep(.breadcrumb-item):last-child:not(:first-child) .text {
272
+ --at-apply: bg-stone-2 dark:bg-stone-8 pl-3;
273
+ clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%, 8px 50%);
274
+ border-radius: 0 6px 6px 0;
275
+ }
276
+
277
+ .breadcrumb.breadcrumb-modern :deep(.breadcrumb-item) .separator {
278
+ --at-apply: hidden;
296
279
  }
297
280
 
298
- // 面包屑动画
281
+ /* 面包屑动画 */
299
282
  .breadcrumb-enter-active {
300
283
  transition: transform 0.3s, opacity 0.3s;
301
284
  }
@@ -76,31 +76,28 @@ watch(scrollTop, (val, oldVal) => {
76
76
  </div>
77
77
  </template>
78
78
 
79
- <style lang="scss" scoped>
79
+ <style scoped>
80
80
  .topbar-container {
81
- position: absolute;
82
- top: 0;
83
- z-index: 100;
84
- display: flex;
85
- flex-direction: column;
81
+ --at-apply: absolute top-0 z-100 flex flex-col;
86
82
  box-shadow: 0 1px 0 0 var(--g-border-color);
87
83
  transition: width 0.3s, top 0.3s, transform 0.3s, box-shadow 0.3s;
84
+ }
88
85
 
89
- &.topbar-fixed,
90
- &.topbar-sticky {
91
- position: fixed;
86
+ .topbar-container.topbar-fixed,
87
+ .topbar-container.topbar-sticky {
88
+ --at-apply: fixed;
89
+ }
92
90
 
93
- &.shadow {
94
- box-shadow: 0 10px 10px -10px var(--g-box-shadow-color);
95
- }
96
- }
91
+ .topbar-container.topbar-fixed.shadow,
92
+ .topbar-container.topbar-sticky.shadow {
93
+ box-shadow: 0 10px 10px -10px var(--g-box-shadow-color);
94
+ }
97
95
 
98
- &.topbar-sticky.hide {
99
- top: calc((var(--g-tabbar-height) + var(--g-toolbar-height)) * -1) !important;
100
- }
96
+ .topbar-container.topbar-sticky.hide {
97
+ top: calc((var(--g-tabbar-height) + var(--g-toolbar-height)) * -1) !important;
98
+ }
101
99
 
102
- &.switch-tabbar-toolbar {
103
- flex-direction: column-reverse;
104
- }
100
+ .topbar-container.switch-tabbar-toolbar {
101
+ flex-direction: column-reverse;
105
102
  }
106
103
  </style>
@@ -1,3 +1,4 @@
1
+ import type { InjectionKey } from 'vue';
1
2
  import type {
2
3
  useFavoritesStore,
3
4
  useIframeStore,
@@ -8,7 +9,6 @@ import type {
8
9
  useTabbarStore,
9
10
  useUserStore,
10
11
  } from '@/stores';
11
- import type { InjectionKey } from 'vue';
12
12
 
13
13
  interface LayoutContext {
14
14
  settingsStore: ReturnType<typeof useSettingsStore>
@@ -1,6 +1,6 @@
1
1
  import type { Menu } from '#/menu';
2
- import { useMenuStore, useSettingsStore } from '@/stores';
3
2
  import { message } from 'ant-design-vue';
3
+ import { useMenuStore, useSettingsStore } from '@/stores';
4
4
 
5
5
  /**
6
6
  * 用于管理菜单功能的自定义组合函数。
@@ -1,6 +1,6 @@
1
1
  import type { RouteLocationRaw } from 'vue-router';
2
- import { useSettingsStore, useTabbarStore } from '@/stores';
3
2
  import Message from 'vue-m-message';
3
+ import { useSettingsStore, useTabbarStore } from '@/stores';
4
4
 
5
5
  export default function useTabbar() {
6
6
  const route = useRoute();
@@ -1,5 +1,5 @@
1
- import { useSettingsStore } from '@/stores';
2
1
  import { useI18n } from 'vue-i18n';
2
+ import { useSettingsStore } from '@/stores';
3
3
 
4
4
  export function useTitle(appTitle: string) {
5
5
  const settingsStore = useSettingsStore();
@@ -1,3 +1,4 @@
1
+ import { h } from 'vue';
1
2
  import { PubinfoProvider } from '@/components';
2
3
  import {
3
4
  useFavoritesStore,
@@ -9,7 +10,6 @@ import {
9
10
  useTabbarStore,
10
11
  useUserStore,
11
12
  } from '@/stores';
12
- import { h } from 'vue';
13
13
  import { createContext } from './composables/useContext';
14
14
  import { useTitle } from './composables/useTitle';
15
15
 
@@ -4,7 +4,7 @@ import CarbonClose from '~icons/carbon/close';
4
4
 
5
5
  const props = withDefaults(
6
6
  defineProps<{
7
- modelValue: boolean
7
+ modelValue?: boolean
8
8
  appear?: boolean
9
9
  title?: string
10
10
  preventClose?: boolean
@@ -10,44 +10,15 @@ const props = defineProps<{
10
10
 
11
11
  <template>
12
12
  <div w-full>
13
- <div class="divider">
14
- <div class="divider-card">
13
+ <div
14
+ class="flex items-center justify-between gap-4 my-4 whitespace-nowrap text-sm font-500
15
+ before:content-empty before:w-full before:h-1px before:bg-stone-2 dark:before:bg-stone-6
16
+ after:content-empty after:w-full after:h-1px after:bg-stone-2 dark:after:bg-stone-6"
17
+ >
18
+ <div class="px-2.5 py-[5px]">
15
19
  {{ props.title }}
16
20
  </div>
17
21
  </div>
18
22
  <slot />
19
23
  </div>
20
24
  </template>
21
-
22
- <style scoped lang="scss">
23
- .divider {
24
- --at-apply:
25
- flex
26
- items-center
27
- justify-between
28
- gap-4
29
- my-4
30
- whitespace-nowrap
31
- text-sm
32
- font-500;
33
-
34
- &::before,
35
- &::after {
36
- --at-apply:
37
- content-empty
38
- w-full
39
- h-1px
40
- bg-stone-2
41
- dark:bg-stone-6;
42
- }
43
-
44
- .divider-card {
45
- padding: 5px 10px;
46
-
47
- // --at-apply:
48
- // rounded-md
49
- // bg-#409EFF
50
- // dark:bg-blue;
51
- }
52
- }
53
- </style>
@@ -5,7 +5,7 @@ import CarbonClose from '~icons/carbon/close';
5
5
 
6
6
  const props = withDefaults(
7
7
  defineProps<{
8
- modelValue: boolean
8
+ modelValue?: boolean
9
9
  appear?: boolean
10
10
  side?: 'left' | 'right'
11
11
  title?: string
@@ -28,97 +28,56 @@ const enabled = computed({
28
28
  <template>
29
29
  <label class="switch">
30
30
  <input v-model="enabled" type="checkbox">
31
- <span />
31
+ <span class="bg-[#d6d3d1] dark:bg-stone-5" />
32
32
  </label>
33
33
  </template>
34
34
 
35
- <style scoped lang="scss">
36
- $greed: var(--ui-primary);
37
-
35
+ <style scoped lang="css">
38
36
  .switch {
39
- cursor: pointer;
40
- transform: scale(0.75);
41
-
42
- input {
43
- display: none;
44
-
45
- & + span {
46
- position: relative;
47
- display: block;
48
- width: 48px;
49
- height: 28px;
50
- background: #d6d3d1;
51
- border-radius: 14px;
52
- transition: all 0.3s ease;
53
-
54
- --at-apply: dark:bg-stone-5;
55
-
56
- &::before,
57
- &::after {
58
- position: absolute;
59
- display: block;
60
- content: "";
61
- transition: all 0.3s ease;
62
- }
63
-
64
- &::before {
65
- top: 5px;
66
- left: 5px;
67
- width: 18px;
68
- height: 18px;
69
- border: 5px solid #fff;
70
- border-radius: 9px;
71
-
72
- --at-apply: dark:border-dark;
73
- }
74
-
75
- &::after {
76
- top: 5px;
77
- left: 32px;
78
- width: 6px;
79
- height: 18px;
80
- background: #fff;
81
- border-radius: 40%;
82
- opacity: 0;
83
- transform-origin: 50% 50%;
84
-
85
- --at-apply: dark:bg-stone-7;
86
- }
87
-
88
- &:active {
89
- transform: scale(0.92);
90
- }
91
- }
92
-
93
- &:checked {
94
- & + span {
95
- background: rgb($greed);
96
- box-shadow: 0 8px 16px -1px rgba($greed, 0.2);
97
-
98
- &::before {
99
- width: 0;
100
- margin-left: 27px;
101
- background: #fff;
102
- border-width: 3px;
103
- border-radius: 3px;
104
-
105
- --at-apply: dark:bg-stone-7;
106
- }
107
-
108
- &::after {
109
- animation: blob-checked 0.35s linear forwards 0.2s;
110
- }
111
- }
112
- }
113
-
114
- &:not(:checked) {
115
- & + span {
116
- &::before {
117
- animation: blob 0.85s linear forwards 0.2s;
118
- }
119
- }
120
- }
121
- }
37
+ --at-apply: cursor-pointer scale-75;
38
+ }
39
+
40
+ .switch input {
41
+ --at-apply: hidden;
42
+ }
43
+
44
+ .switch input + span {
45
+ --at-apply: relative block w-12 h-7 rounded-14px transition-all duration-300 ease;
46
+ }
47
+
48
+ .switch input + span::before,
49
+ .switch input + span::after {
50
+ --at-apply: absolute block content-empty transition-all duration-300 ease;
51
+ }
52
+
53
+ .switch input + span::before {
54
+ --at-apply: top-5px left-5px size-18px border-5px border-solid border-white dark:border-dark rounded-9px;
55
+ }
56
+
57
+ .switch input + span::after {
58
+ --at-apply: top-5px left-32px w-6px h-18px bg-white rounded-4/10 op-0 dark:bg-stone-7;
59
+ transform-origin: 50% 50%;
60
+ }
61
+
62
+ .switch input + span:active {
63
+ --at-apply: scale-92;
64
+ }
65
+
66
+ .switch input:checked + span {
67
+ --at-apply: bg-ui-primary;
68
+ box-shadow: 0 8px 16px -1px rgba(var(--ui-primary), 0.2);
69
+ }
70
+
71
+ .switch input:checked + span::before {
72
+ --at-apply: w-0 ml-27px bg-white dark:bg-stone-7 border-3px rounded-3px;
73
+ }
74
+
75
+ .switch input:checked + span::after {
76
+ animation: blob-checked 0.35s linear forwards 0.2s;
77
+ }
78
+
79
+ .switch input:not(:checked) + span::before {
80
+ animation: blob 0.85s linear forwards 0.2s;
122
81
  }
123
82
 
124
83
  @keyframes blob {
@@ -166,12 +125,9 @@ html {
166
125
  -webkit-font-smoothing: antialiased;
167
126
  }
168
127
 
169
- * {
128
+ *,
129
+ *::before,
130
+ *::after {
170
131
  box-sizing: border-box;
171
-
172
- &::before,
173
- &::after {
174
- box-sizing: border-box;
175
- }
176
132
  }
177
133
  </style>
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  withDefaults(
3
3
  defineProps<{
4
- text: string
4
+ text?: string
5
5
  }>(),
6
6
  {
7
7
  text: '',
@@ -1,7 +1,7 @@
1
1
  import type { App } from 'vue';
2
- import { useSettingsStore } from '@/stores';
3
2
  import { cloneDeep } from 'lodash-es';
4
3
  import { createI18n as _createI18n } from 'vue-i18n';
4
+ import { useSettingsStore } from '@/stores';
5
5
  import _en from './lang/en.json';
6
6
  import _zhCN from './lang/zh-cn.json';
7
7
  import _zhTW from './lang/zh-tw.json';
@@ -1,8 +1,8 @@
1
1
  <script setup lang="ts">
2
2
  import type { ProColumns } from '@pubinfo/pro-components';
3
- import { getRbacUserUserEntireInfo } from '@/api/modules/rbac';
4
3
  import { SchemaForm } from '@pubinfo/pro-components';
5
4
  import { isNil } from 'lodash-es';
5
+ import { getRbacUserUserEntireInfo } from '@/api/modules/rbac';
6
6
 
7
7
  // TODO 解耦组件库
8
8
 
@@ -59,16 +59,14 @@ function goBack() {
59
59
  </div>
60
60
  </template>
61
61
 
62
- <style lang="scss" scoped>
62
+ <style scoped>
63
63
  .allIcon {
64
64
  background: url("@/assets/icons/404.svg") no-repeat;
65
65
  background-size: 100% 100%;
66
66
  }
67
67
 
68
- [data-theme="dark"] {
69
- .allIcon {
70
- background: url("@/assets/icons/404_dark.svg") no-repeat;
71
- background-size: 100% 100%;
72
- }
68
+ [data-theme="dark"] .allIcon {
69
+ background: url("@/assets/icons/404_dark.svg") no-repeat;
70
+ background-size: 100% 100%;
73
71
  }
74
72
  </style>
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
+ import { message } from 'ant-design-vue';
2
3
  import { PubinfoIcon } from '@/components';
3
4
  import { useUserStore } from '@/stores';
4
- import { message } from 'ant-design-vue';
5
5
 
6
6
  defineOptions({
7
7
  name: 'ChangeOrganization',
@@ -125,50 +125,36 @@ async function changeOrganization() {
125
125
  </div>
126
126
  </template>
127
127
 
128
- <style lang="scss" scoped>
128
+ <style scoped>
129
129
  .change-org {
130
- width: 100%;
131
- height: 100%;
130
+ --at-apply: size-full;
132
131
  background: url("@/assets/images/login-small.png") no-repeat 50%;
133
132
  background-size: cover;
133
+ }
134
134
 
135
- .org-item {
136
- box-sizing: border-box;
137
- display: flex;
138
- align-items: center;
139
- justify-content: space-between;
140
- width: 100%;
141
- height: 91px;
142
- padding: 22px 32px;
143
- margin-bottom: 15px;
144
- overflow: hidden;
145
- color: #86909c;
146
- cursor: pointer;
147
- background: #fff;
148
- border: 1px solid #f2f3f5;
149
- border-radius: 8px;
135
+ .change-org .org-item {
136
+ --at-apply: box-border flex items-center justify-between w-full h-[91px]
137
+ overflow-hidden text-[#86909c] cursor-pointer border mb-[15px] px-8
138
+ py-[22px] rounded-lg border-solid border-[#f2f3f5];
139
+ background: #fff;
140
+ }
150
141
 
151
- &.active {
152
- background-color: rgb(22 119 255 / 10%);
153
- border-color: #1677ff;
154
- }
155
- }
142
+ .change-org .org-item.active {
143
+ --at-apply: bg-[#1677FF] bg-op-10 border-[#1677ff];
156
144
  }
157
145
 
158
- [data-theme="dark"] {
159
- .change-org {
160
- background: url("@/assets/images/login-small_dark.webp") no-repeat 50%;
161
- background-size: cover;
162
- }
146
+ [data-theme="dark"] .change-org {
147
+ background: url("@/assets/images/login-small_dark.webp") no-repeat 50%;
148
+ background-size: cover;
149
+ }
163
150
 
164
- .org-item {
165
- background: #2c2c2c;
166
- border: 1px solid #2c2c2c;
151
+ [data-theme="dark"] .org-item {
152
+ background: #2c2c2c;
153
+ border: 1px solid #2c2c2c;
154
+ }
167
155
 
168
- &.active {
169
- background: rgb(20 20 20 / 60%);
170
- border-color: #1668dc;
171
- }
172
- }
156
+ [data-theme="dark"] .org-item.active {
157
+ background: rgb(20 20 20 / 60%);
158
+ border-color: #1668dc;
173
159
  }
174
160
  </style>
@@ -1,9 +1,9 @@
1
1
  <script setup lang="ts">
2
2
  import type { FormInstance, Rule } from 'ant-design-vue/es/form';
3
3
  import type { RouteParamValue } from 'vue-router';
4
- import { useUserStore } from '@/stores';
5
4
  import { message } from 'ant-design-vue';
6
5
  import { delay } from 'lodash-es';
6
+ import { useUserStore } from '@/stores';
7
7
 
8
8
  defineOptions({
9
9
  name: 'ChangePasswordForm',