xto-fronted 0.4.85 → 0.4.86

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 (303) hide show
  1. package/dist/assets/404-BNfk6aVM.js +1 -0
  2. package/dist/assets/404-ByYjFnhI.js +1 -0
  3. package/dist/assets/404-CH5_LdtS.css +1 -0
  4. package/dist/assets/404-sqW80Hc-.css +1 -0
  5. package/dist/assets/_plugin-vue_export-helper-DlAUqK2U.js +1 -0
  6. package/dist/assets/index-BBhC8PX4.js +1 -0
  7. package/dist/assets/index-BOEFG4lP.css +1 -0
  8. package/dist/assets/index-BRR97dc6.js +1 -0
  9. package/dist/assets/index-BSa4SMHI.js +1 -0
  10. package/dist/assets/index-BihVoviB.js +1 -0
  11. package/dist/assets/index-Bmux4tGG.js +1 -0
  12. package/dist/assets/index-BrvR0Fn_.css +1 -0
  13. package/dist/assets/index-C4ZCZoPp.js +1 -0
  14. package/dist/assets/index-CMgRqiaT.js +1 -0
  15. package/dist/assets/index-CUh_s55Z.css +1 -0
  16. package/dist/assets/index-CV768Wu1.js +1 -0
  17. package/dist/assets/index-D0OnMilp.js +1 -0
  18. package/dist/assets/index-D9wlAuR_.js +1 -0
  19. package/dist/assets/index-DPkO-STg.js +1 -0
  20. package/dist/assets/index-DawJb02s.css +1 -0
  21. package/dist/assets/index-DcFOybjo.js +1 -0
  22. package/dist/assets/index-DiHSZ6SJ.js +2 -0
  23. package/dist/assets/index-GDP-IkXE.css +1 -0
  24. package/dist/assets/index-Gx75raue.js +2 -0
  25. package/dist/assets/index-JsZ6rkQj.js +1 -0
  26. package/dist/assets/index-PfV8pzQz.css +1 -0
  27. package/dist/assets/index-Swfu6yvD.css +1 -0
  28. package/dist/assets/index-eQ-JQMk3.css +1 -0
  29. package/dist/assets/vendor-42ANG6Sg.js +6 -0
  30. package/dist/assets/vite-Dw-pgLOX.js +1 -0
  31. package/dist/assets/vue-vendor-05sbU7Th.js +29 -0
  32. package/dist/assets/vue-vendor-Br-l7wbK.js +29 -0
  33. package/dist/assets/xto-base-BSTP-Yn2.js +1 -0
  34. package/dist/assets/xto-base-C-IBqjVs.js +1 -0
  35. package/dist/assets/xto-base-C6eqMPdO.css +1 -0
  36. package/dist/assets/xto-base-CL2NKZJJ.css +1 -0
  37. package/dist/assets/xto-business--V1F5Gwb.css +1 -0
  38. package/dist/assets/xto-core-DZK7Cyg0.js +1 -0
  39. package/dist/assets/xto-core-cL8BAdce.js +1 -0
  40. package/dist/assets/xto-data-BFpiDgJi.js +1 -0
  41. package/dist/assets/xto-data-CnAQAQH2.css +1 -0
  42. package/dist/assets/xto-data-Cw0dv5K5.js +1 -0
  43. package/dist/assets/xto-data-MxZsiJgi.css +1 -0
  44. package/dist/assets/xto-feedback-B2M02fn3.js +1 -0
  45. package/dist/assets/xto-feedback-Bxx38c3P.css +1 -0
  46. package/dist/assets/xto-feedback-ByaS-C7_.css +1 -0
  47. package/dist/assets/xto-feedback-CTk0sMCW.js +1 -0
  48. package/dist/assets/xto-form-C5i2lk3C.js +1 -0
  49. package/dist/assets/xto-form-CrsyAjyr.css +1 -0
  50. package/dist/assets/xto-form-Cu6q3VLG.css +1 -0
  51. package/dist/assets/xto-form-NRjKKNcY.js +1 -0
  52. package/dist/assets/xto-layout-BDD6sSlM.css +1 -0
  53. package/dist/assets/xto-layout-D1stVnJI.css +1 -0
  54. package/dist/assets/xto-navigation-BuRQVoD8.css +1 -0
  55. package/dist/assets/xto-navigation-DHsTg0WG.js +1 -0
  56. package/dist/assets/xto-navigation-XfpyMpEo.css +1 -0
  57. package/dist/assets/xto-navigation-qLRTxo68.js +1 -0
  58. package/dist/index-0h_oG71z.js +345 -0
  59. package/dist/index-1EEezXR3.js +142 -0
  60. package/dist/index-1EkaJDoD.js +142 -0
  61. package/dist/index-1VN-SSaj.js +2873 -0
  62. package/dist/index-23nX2t9j.js +142 -0
  63. package/dist/index-2RwL0s53.js +142 -0
  64. package/dist/index-2tvOdd6w.js +372 -0
  65. package/dist/index-3zeoNaqT.js +345 -0
  66. package/dist/index-8oCLh51t.js +475 -0
  67. package/dist/index-AF5JN8Up.js +142 -0
  68. package/dist/index-B02xiP9g.js +372 -0
  69. package/dist/index-B05xso4D.js +345 -0
  70. package/dist/index-B1VS4tRU.js +475 -0
  71. package/dist/index-B3_VQZ-d.js +372 -0
  72. package/dist/index-B3kL6i_g.js +345 -0
  73. package/dist/index-B4Wny0vt.js +345 -0
  74. package/dist/index-B5RdBQ-f.js +475 -0
  75. package/dist/index-B5rbuoWS.js +2835 -0
  76. package/dist/index-BAFpPlnI.js +475 -0
  77. package/dist/index-BAJakzRz.js +142 -0
  78. package/dist/index-BAOHlfVd.js +142 -0
  79. package/dist/index-BAzJWzWG.js +2852 -0
  80. package/dist/index-BEIxh_R3.js +2982 -0
  81. package/dist/index-BEWrRNps.js +475 -0
  82. package/dist/index-BFtKVmzo.js +142 -0
  83. package/dist/index-BHPrW1wN.js +142 -0
  84. package/dist/index-BHQIqN1E.js +372 -0
  85. package/dist/index-BHZ_y8lp.js +2067 -0
  86. package/dist/index-BHvnTk5Z.js +475 -0
  87. package/dist/index-BIf7CYCW.js +475 -0
  88. package/dist/index-BK1Y1z9_.js +142 -0
  89. package/dist/index-BK8qDl14.js +372 -0
  90. package/dist/index-BKnta6nv.js +372 -0
  91. package/dist/index-BLIem13z.js +345 -0
  92. package/dist/index-BNBv_FCu.js +142 -0
  93. package/dist/index-BNwtCm83.js +345 -0
  94. package/dist/index-BOEMA7WH.js +345 -0
  95. package/dist/index-BOwDukt-.js +2346 -0
  96. package/dist/index-BR9WVjrV.js +2851 -0
  97. package/dist/index-BRMkw154.js +475 -0
  98. package/dist/index-BRQBannD.js +345 -0
  99. package/dist/index-BShKtLTm.js +475 -0
  100. package/dist/index-BVpqTdd2.js +3132 -0
  101. package/dist/index-BWGQANAN.js +2851 -0
  102. package/dist/index-BZKw7U60.js +475 -0
  103. package/dist/index-BadGWG4q.js +475 -0
  104. package/dist/index-BbeWpCd3.js +345 -0
  105. package/dist/index-BeUYNx5P.js +475 -0
  106. package/dist/index-BgiGtxRr.js +142 -0
  107. package/dist/index-BhKJLk9M.js +2824 -0
  108. package/dist/index-BijsKQ3r.js +475 -0
  109. package/dist/index-BjEfspqP.js +475 -0
  110. package/dist/index-BjEnT8WQ.js +372 -0
  111. package/dist/index-BpOcz1m4.js +142 -0
  112. package/dist/index-BrRdLbLB.js +142 -0
  113. package/dist/index-BsHOXfCq.js +372 -0
  114. package/dist/index-Bt5ocakb.js +475 -0
  115. package/dist/index-BtE24Mt4.js +142 -0
  116. package/dist/index-BvcBQjw6.js +2836 -0
  117. package/dist/index-C0krZRWf.js +2859 -0
  118. package/dist/index-C1cKUqmA.js +372 -0
  119. package/dist/index-C3ANmIDM.js +475 -0
  120. package/dist/index-C5JrEkwD.js +345 -0
  121. package/dist/index-C5m4qNMQ.js +2851 -0
  122. package/dist/index-C69vu_ot.js +3147 -0
  123. package/dist/index-C6Um6eFy.js +475 -0
  124. package/dist/index-C75ePQYC.js +372 -0
  125. package/dist/index-C7wKLGhC.js +142 -0
  126. package/dist/index-C8DBDnxx.js +2836 -0
  127. package/dist/index-CAnqlIjX.js +475 -0
  128. package/dist/index-CB36fztK.js +345 -0
  129. package/dist/index-CBKo6Enz.js +345 -0
  130. package/dist/index-CBcuyFIa.js +2326 -0
  131. package/dist/index-CCxIu4ex.js +372 -0
  132. package/dist/index-CD1ZEMzL.js +2836 -0
  133. package/dist/index-CDx-6tvY.js +345 -0
  134. package/dist/index-CGrvOpdb.js +372 -0
  135. package/dist/index-CHJWNf3f.js +475 -0
  136. package/dist/index-CIb06BxE.js +372 -0
  137. package/dist/index-CLiJcB9v.js +142 -0
  138. package/dist/index-CNS6Ohfw.js +2853 -0
  139. package/dist/index-COkjB5Jm.js +142 -0
  140. package/dist/index-CS5h1O5W.js +345 -0
  141. package/dist/index-CT0deRSL.js +372 -0
  142. package/dist/index-CTQQBaf4.js +345 -0
  143. package/dist/index-CUAC0ZFB.js +475 -0
  144. package/dist/index-CVMV9Tfg.js +142 -0
  145. package/dist/index-CWOx59Vc.js +142 -0
  146. package/dist/index-CWdSR99B.js +372 -0
  147. package/dist/index-CWvOcS8Y.js +345 -0
  148. package/dist/index-C_8yJlf1.js +475 -0
  149. package/dist/index-C_MzXmh2.js +2830 -0
  150. package/dist/index-Cb7HXiBR.js +372 -0
  151. package/dist/index-CbA8oUvZ.js +142 -0
  152. package/dist/index-CbEIzXG9.js +475 -0
  153. package/dist/index-Cb_m0zz1.js +475 -0
  154. package/dist/index-Cc6HgGzc.js +142 -0
  155. package/dist/index-CcWdW9Mj.js +372 -0
  156. package/dist/index-CdAqkP8L.js +345 -0
  157. package/dist/index-CeVUHSt9.js +2847 -0
  158. package/dist/index-CejRpy0a.js +475 -0
  159. package/dist/index-Cg5wO_jJ.js +372 -0
  160. package/dist/index-CgZM1vHq.js +372 -0
  161. package/dist/index-CgofFg1D.js +372 -0
  162. package/dist/index-ChheXGDK.js +372 -0
  163. package/dist/index-ChuFHoI0.js +372 -0
  164. package/dist/index-CiOJZ6_b.js +372 -0
  165. package/dist/index-ClCWmz_7.js +2844 -0
  166. package/dist/index-CmajGrKA.js +142 -0
  167. package/dist/index-Cn_4o3fi.js +345 -0
  168. package/dist/index-CoJBI1vE.js +345 -0
  169. package/dist/index-CqLLaQ-P.js +372 -0
  170. package/dist/index-CsRhLwmR.js +475 -0
  171. package/dist/index-CttJvDTG.js +475 -0
  172. package/dist/index-Cu3m9UeX.js +345 -0
  173. package/dist/index-CyQbOMHa.js +2859 -0
  174. package/dist/index-D-NcbLKL.js +345 -0
  175. package/dist/index-D0gstkiI.js +2836 -0
  176. package/dist/index-D0krzDtx.js +475 -0
  177. package/dist/index-D1moFd4V.js +372 -0
  178. package/dist/index-D2Hs4bZj.js +345 -0
  179. package/dist/index-D4QhrTZs.js +475 -0
  180. package/dist/index-D6CC02F-.js +372 -0
  181. package/dist/index-D6s7Za5s.js +142 -0
  182. package/dist/index-D7i5bck2.js +3132 -0
  183. package/dist/index-D8YBeNfn.js +345 -0
  184. package/dist/index-D93bv6lU.js +372 -0
  185. package/dist/index-DAX_bFj5.js +142 -0
  186. package/dist/index-DBii9cjr.js +475 -0
  187. package/dist/index-DBzpSkNi.js +345 -0
  188. package/dist/index-DCuKNBck.js +3153 -0
  189. package/dist/index-DE3uKf0K.js +142 -0
  190. package/dist/index-DGAqp0QX.js +372 -0
  191. package/dist/index-DGh_w_v1.js +475 -0
  192. package/dist/index-DItKvJyI.js +475 -0
  193. package/dist/index-DKAyB0fv.js +345 -0
  194. package/dist/index-DKN4xsXi.js +2851 -0
  195. package/dist/index-DN_iIn8V.js +345 -0
  196. package/dist/index-DONIBpuJ.js +345 -0
  197. package/dist/index-DPDK8Ht4.js +2851 -0
  198. package/dist/index-DPr3ldST.js +2354 -0
  199. package/dist/index-DS1wfdxM.js +142 -0
  200. package/dist/index-DUW5cCh8.js +372 -0
  201. package/dist/index-DUv28uVd.js +142 -0
  202. package/dist/index-DVS-5SZn.js +475 -0
  203. package/dist/index-DWI51JAp.js +372 -0
  204. package/dist/index-DWVmEexu.js +475 -0
  205. package/dist/index-DXf9wUqQ.js +142 -0
  206. package/dist/index-DXmB-sjP.js +345 -0
  207. package/dist/index-DY_e_Dxv.js +372 -0
  208. package/dist/index-DZar-us7.js +142 -0
  209. package/dist/index-D_nwqVrw.js +2847 -0
  210. package/dist/index-DbEeir7h.js +2834 -0
  211. package/dist/index-Dbf5ypbh.js +142 -0
  212. package/dist/index-DcSK-2pt.js +345 -0
  213. package/dist/index-DclK-Mc7.js +2864 -0
  214. package/dist/index-DcnzaxVi.js +142 -0
  215. package/dist/index-Dd8PlF0M.js +2857 -0
  216. package/dist/index-DdkVT39s.js +345 -0
  217. package/dist/index-DeLbU1t-.js +345 -0
  218. package/dist/index-DfV_J8Te.js +345 -0
  219. package/dist/index-DgPnNd8U.js +475 -0
  220. package/dist/index-Dg_JLa7s.js +345 -0
  221. package/dist/index-Di2VPQjn.js +345 -0
  222. package/dist/index-DibHUbqc.js +372 -0
  223. package/dist/index-DjCVSrpw.js +475 -0
  224. package/dist/index-Djdb936p.js +142 -0
  225. package/dist/index-DmFL_GSt.js +142 -0
  226. package/dist/index-DmP4X2k0.js +372 -0
  227. package/dist/index-DmtmRd1r.js +372 -0
  228. package/dist/index-Dn8MA3kh.js +475 -0
  229. package/dist/index-Do7uXDSi.js +2071 -0
  230. package/dist/index-Dpv1M9Hu.js +372 -0
  231. package/dist/index-DqUuZC8f.js +372 -0
  232. package/dist/index-DtEXQIjn.js +372 -0
  233. package/dist/index-Dtw-qZ0V.js +372 -0
  234. package/dist/index-Dv3hIz8H.js +345 -0
  235. package/dist/index-Dv9jnaWp.js +345 -0
  236. package/dist/index-Dw8KZwGJ.js +2354 -0
  237. package/dist/index-DwJILh-Q.js +3149 -0
  238. package/dist/index-DwzGV3B9.js +142 -0
  239. package/dist/index-DyybaRkK.js +345 -0
  240. package/dist/index-DzerABZq.js +372 -0
  241. package/dist/index-F53NVkhc.js +142 -0
  242. package/dist/index-Fl0_k4XF.js +475 -0
  243. package/dist/index-HMYRCPrs.js +2326 -0
  244. package/dist/index-I49wpmT-.js +372 -0
  245. package/dist/index-IPv1O8Zq.js +345 -0
  246. package/dist/index-JLqnaery.js +372 -0
  247. package/dist/index-JRCQ1CYj.js +142 -0
  248. package/dist/index-L86-iO8O.js +345 -0
  249. package/dist/index-Q56EoFor.js +142 -0
  250. package/dist/index-QxKMr6p0.js +2829 -0
  251. package/dist/index-THRvW9Xm.js +2856 -0
  252. package/dist/index-WIUmTlfL.js +345 -0
  253. package/dist/index-WRrsK0pR.js +475 -0
  254. package/dist/index-Wq652QGf.js +2836 -0
  255. package/dist/index-YnSLCdjP.js +475 -0
  256. package/dist/index-Ynf0lvBE.js +142 -0
  257. package/dist/index-_OtTmb9i.js +142 -0
  258. package/dist/index-_oqoy_3D.js +142 -0
  259. package/dist/index-cl4Y-BWw.js +475 -0
  260. package/dist/index-d_eHJkDW.js +475 -0
  261. package/dist/index-dnmEyUWB.js +372 -0
  262. package/dist/index-dz6CwD6A.js +142 -0
  263. package/dist/index-g4rkaRry.js +475 -0
  264. package/dist/index-g9bRMdAX.js +142 -0
  265. package/dist/index-h4z4-a2p.js +2852 -0
  266. package/dist/index-h7BhcQYM.js +475 -0
  267. package/dist/index-hI3qofTF.js +345 -0
  268. package/dist/index-iyQQumAA.js +372 -0
  269. package/dist/index-js_OhKON.js +345 -0
  270. package/dist/index-kgb4MdHr.js +475 -0
  271. package/dist/index-logKl0VM.js +3144 -0
  272. package/dist/index-lrFMrOlR.js +3132 -0
  273. package/dist/index-mEHxtQWj.js +372 -0
  274. package/dist/index-mNm1BV3n.js +2857 -0
  275. package/dist/index-oOzAFXfr.js +142 -0
  276. package/dist/index-s3vGq0ro.js +345 -0
  277. package/dist/index-wt7AbUqc.js +2342 -0
  278. package/dist/index.es.js +1 -1
  279. package/dist/index.html +28 -0
  280. package/dist/index.umd.js +1 -8
  281. package/dist/style.css +1 -1
  282. package/package.json +87 -91
  283. package/src/App.vue +1 -30
  284. package/src/assets/styles/_root.scss +97 -141
  285. package/src/assets/styles/_variables.scss +19 -44
  286. package/src/assets/styles/index.scss +42 -267
  287. package/src/components/Layout/Sidebar.vue +2 -43
  288. package/src/components/Layout/TopMenu.vue +12 -37
  289. package/src/components/Layout/index.vue +0 -1
  290. package/src/utils/request.ts +1 -18
  291. package/src/views/dashboard/index.vue +155 -417
  292. package/src/views/error/403.vue +56 -251
  293. package/src/views/error/404.vue +56 -253
  294. package/src/views/login/index.vue +194 -586
  295. package/src/views/system/menu/index.vue +94 -403
  296. package/src/views/system/role/index.vue +69 -348
  297. package/src/views/system/user/index.vue +73 -402
  298. package/dist/index-BZaqYObA.js +0 -479
  299. package/dist/index-CbwOysFI.js +0 -641
  300. package/dist/index-Jynxhhda.js +0 -189
  301. package/dist/index-XgzSS-fV.js +0 -515
  302. package/dist/index-_iZKFlCa.js +0 -4178
  303. package/src/types/json-bigint.d.ts +0 -18
@@ -15,7 +15,7 @@
15
15
  @use 'dark';
16
16
 
17
17
  // ==============================================
18
- // 全局通用样式(企业级增强)
18
+ // 全局通用样式
19
19
  // ==============================================
20
20
 
21
21
  // 文字截断
@@ -33,13 +33,6 @@
33
33
  overflow: hidden;
34
34
  }
35
35
 
36
- .text-ellipsis-3 {
37
- display: -webkit-box;
38
- -webkit-line-clamp: 3;
39
- -webkit-box-orient: vertical;
40
- overflow: hidden;
41
- }
42
-
43
36
  // Flex 布局
44
37
  .flex {
45
38
  display: flex;
@@ -57,18 +50,6 @@
57
50
  justify-content: space-between;
58
51
  }
59
52
 
60
- .flex-start {
61
- display: flex;
62
- align-items: center;
63
- justify-content: flex-start;
64
- }
65
-
66
- .flex-end {
67
- display: flex;
68
- align-items: center;
69
- justify-content: flex-end;
70
- }
71
-
72
53
  .flex-wrap {
73
54
  flex-wrap: wrap;
74
55
  }
@@ -77,31 +58,6 @@
77
58
  flex: 1;
78
59
  }
79
60
 
80
- .flex-shrink-0 {
81
- flex-shrink: 0;
82
- }
83
-
84
- // 方向
85
- .flex-col {
86
- display: flex;
87
- flex-direction: column;
88
- }
89
-
90
- .flex-col-center {
91
- display: flex;
92
- flex-direction: column;
93
- align-items: center;
94
- }
95
-
96
- // Gap 间距(8px 网格系统)
97
- .gap-4 { gap: 4px; }
98
- .gap-8 { gap: 8px; }
99
- .gap-12 { gap: 12px; }
100
- .gap-16 { gap: 16px; }
101
- .gap-20 { gap: 20px; }
102
- .gap-24 { gap: 24px; }
103
- .gap-32 { gap: 32px; }
104
-
105
61
  // 文字对齐
106
62
  .text-left {
107
63
  text-align: left;
@@ -136,14 +92,6 @@
136
92
  color: var(--color-info);
137
93
  }
138
94
 
139
- .text-secondary {
140
- color: var(--color-text-secondary);
141
- }
142
-
143
- .text-placeholder {
144
- color: var(--color-text-placeholder);
145
- }
146
-
147
95
  // 背景
148
96
  .bg-primary {
149
97
  background-color: var(--color-primary);
@@ -161,254 +109,81 @@
161
109
  background-color: var(--color-danger);
162
110
  }
163
111
 
164
- .bg-page {
165
- background-color: var(--bg-color-page);
112
+ // 间距
113
+ .mt-10 {
114
+ margin-top: 10px;
166
115
  }
167
116
 
168
- .bg-card {
169
- background-color: var(--bg-color);
117
+ .mt-20 {
118
+ margin-top: 20px;
170
119
  }
171
120
 
172
- // 间距(8px 网格系统)
173
- .mt-4 { margin-top: 4px; }
174
- .mt-8 { margin-top: 8px; }
175
- .mt-12 { margin-top: 12px; }
176
- .mt-16 { margin-top: 16px; }
177
- .mt-20 { margin-top: 20px; }
178
- .mt-24 { margin-top: 24px; }
179
- .mt-32 { margin-top: 32px; }
180
-
181
- .mb-4 { margin-bottom: 4px; }
182
- .mb-8 { margin-bottom: 8px; }
183
- .mb-12 { margin-bottom: 12px; }
184
- .mb-16 { margin-bottom: 16px; }
185
- .mb-20 { margin-bottom: 20px; }
186
- .mb-24 { margin-bottom: 24px; }
187
- .mb-32 { margin-bottom: 32px; }
188
-
189
- .ml-4 { margin-left: 4px; }
190
- .ml-8 { margin-left: 8px; }
191
- .ml-12 { margin-left: 12px; }
192
- .ml-16 { margin-left: 16px; }
193
-
194
- .mr-4 { margin-right: 4px; }
195
- .mr-8 { margin-right: 8px; }
196
- .mr-12 { margin-right: 12px; }
197
- .mr-16 { margin-right: 16px; }
198
-
199
- .p-4 { padding: 4px; }
200
- .p-8 { padding: 8px; }
201
- .p-12 { padding: 12px; }
202
- .p-16 { padding: 16px; }
203
- .p-20 { padding: 20px; }
204
- .p-24 { padding: 24px; }
205
- .p-32 { padding: 32px; }
206
-
207
- .px-4 { padding-left: 4px; padding-right: 4px; }
208
- .px-8 { padding-left: 8px; padding-right: 8px; }
209
- .px-12 { padding-left: 12px; padding-right: 12px; }
210
- .px-16 { padding-left: 16px; padding-right: 16px; }
211
- .px-24 { padding-left: 24px; padding-right: 24px; }
212
-
213
- .py-4 { padding-top: 4px; padding-bottom: 4px; }
214
- .py-8 { padding-top: 8px; padding-bottom: 8px; }
215
- .py-12 { padding-top: 12px; padding-bottom: 12px; }
216
- .py-16 { padding-top: 16px; padding-bottom: 16px; }
217
- .py-24 { padding-top: 24px; padding-bottom: 24px; }
218
-
219
- // 卡片容器(企业级)
220
- .card {
221
- background-color: var(--bg-color);
222
- border-radius: var(--border-radius-large);
223
- box-shadow: var(--box-shadow-card);
224
- padding: var(--spacing-lg);
225
- transition: box-shadow 0.3s ease;
121
+ .mb-10 {
122
+ margin-bottom: 10px;
123
+ }
226
124
 
227
- &:hover {
228
- box-shadow: var(--box-shadow-card-hover);
229
- }
125
+ .mb-20 {
126
+ margin-bottom: 20px;
127
+ }
128
+
129
+ .ml-10 {
130
+ margin-left: 10px;
230
131
  }
231
132
 
232
- .card-flat {
133
+ .mr-10 {
134
+ margin-right: 10px;
135
+ }
136
+
137
+ .p-10 {
138
+ padding: 10px;
139
+ }
140
+
141
+ .p-20 {
142
+ padding: 20px;
143
+ }
144
+
145
+ // 卡片容器
146
+ .card {
233
147
  background-color: var(--bg-color);
234
- border-radius: var(--border-radius-large);
235
- padding: var(--spacing-lg);
236
- border: 1px solid var(--color-border-lighter);
148
+ border-radius: var(--border-radius-base);
149
+ box-shadow: var(--box-shadow-light);
150
+ padding: var(--spacing-md);
237
151
  }
238
152
 
239
153
  // 页面容器
240
154
  .page-container {
241
- padding: 12px;
155
+ padding: var(--spacing-md);
242
156
  min-height: 100%;
243
- background: var(--bg-color-page);
244
157
  }
245
158
 
246
- // 搜索栏(企业级)
159
+ // 搜索栏
247
160
  .search-bar {
248
161
  display: flex;
249
162
  flex-wrap: wrap;
250
- gap: var(--spacing-md);
251
- margin-bottom: 12px;
252
- padding: 12px;
253
- background: var(--bg-color);
254
- border-radius: var(--border-radius-large);
255
- box-shadow: var(--box-shadow-card);
163
+ gap: var(--spacing-sm);
164
+ margin-bottom: var(--spacing-md);
256
165
  }
257
166
 
258
- // 工具栏(企业级)
167
+ // 工具栏
259
168
  .toolbar {
260
169
  display: flex;
261
170
  align-items: center;
262
171
  justify-content: space-between;
263
- padding: 12px;
264
- border-bottom: 1px solid var(--color-border-lighter);
265
- }
266
-
267
- .toolbar-left {
268
- display: flex;
269
- align-items: center;
270
- gap: var(--spacing-sm);
271
- }
272
-
273
- .toolbar-right {
274
- display: flex;
275
- align-items: center;
276
- gap: var(--spacing-sm);
172
+ margin-bottom: var(--spacing-md);
277
173
  }
278
174
 
279
- // 表格容器(企业级)
175
+ // 表格容器
280
176
  .table-container {
281
177
  background-color: var(--bg-color);
282
- border-radius: var(--border-radius-large);
283
- box-shadow: var(--box-shadow-card);
284
- overflow: hidden;
178
+ border-radius: var(--border-radius-base);
179
+ padding: var(--spacing-md);
285
180
  }
286
181
 
287
182
  // 分页容器
288
183
  .pagination-container {
289
184
  display: flex;
290
185
  justify-content: flex-end;
291
- padding: 12px;
292
- border-top: 1px solid var(--color-border-lighter);
293
- }
294
-
295
- // 标签徽章
296
- .badge {
297
- display: inline-flex;
298
- align-items: center;
299
- justify-content: center;
300
- min-width: 20px;
301
- height: 20px;
302
- padding: 0 6px;
303
- font-size: 12px;
304
- font-weight: 500;
305
- border-radius: 10px;
306
- background: var(--color-fill);
307
- color: var(--color-text-secondary);
308
- }
309
-
310
- .badge-primary {
311
- background: var(--color-primary-light-6);
312
- color: var(--color-primary);
313
- }
314
-
315
- .badge-success {
316
- background: var(--color-success-lighter);
317
- color: var(--color-success);
318
- }
319
-
320
- .badge-warning {
321
- background: var(--color-warning-lighter);
322
- color: var(--color-warning);
323
- }
324
-
325
- .badge-danger {
326
- background: var(--color-danger-lighter);
327
- color: var(--color-danger);
328
- }
329
-
330
- // 分隔线
331
- .divider {
332
- height: 1px;
333
- background: var(--color-border-lighter);
334
- margin: var(--spacing-md) 0;
335
- }
336
-
337
- .divider-vertical {
338
- width: 1px;
339
- height: 100%;
340
- background: var(--color-border-lighter);
341
- margin: 0 var(--spacing-md);
342
- }
343
-
344
- // 空状态
345
- .empty-state {
346
- display: flex;
347
- flex-direction: column;
348
- align-items: center;
349
- justify-content: center;
350
- padding: 60px 20px;
351
- color: var(--color-text-placeholder);
352
-
353
- .empty-icon {
354
- width: 64px;
355
- height: 64px;
356
- margin-bottom: 16px;
357
- opacity: 0.5;
358
- }
359
-
360
- .empty-text {
361
- font-size: 14px;
362
- }
363
- }
364
-
365
- // 加载状态
366
- .loading-state {
367
- display: flex;
368
- flex-direction: column;
369
- align-items: center;
370
- justify-content: center;
371
- padding: 60px 20px;
372
-
373
- .loading-spinner {
374
- width: 32px;
375
- height: 32px;
376
- border: 3px solid var(--color-border-lighter);
377
- border-top-color: var(--color-primary);
378
- border-radius: 50%;
379
- animation: spin 0.8s linear infinite;
380
- }
381
-
382
- .loading-text {
383
- margin-top: 16px;
384
- font-size: 14px;
385
- color: var(--color-text-secondary);
386
- }
387
- }
388
-
389
- @keyframes spin {
390
- to { transform: rotate(360deg); }
391
- }
392
-
393
- // 链接样式
394
- .link {
395
- color: var(--color-primary);
396
- text-decoration: none;
397
- transition: color 0.2s ease;
398
-
399
- &:hover {
400
- color: var(--color-primary-dark-1);
401
- }
402
- }
403
-
404
- .link-underline {
405
- color: var(--color-primary);
406
- text-decoration: underline;
407
- text-underline-offset: 2px;
408
-
409
- &:hover {
410
- color: var(--color-primary-dark-1);
411
- }
186
+ margin-top: var(--spacing-md);
412
187
  }
413
188
 
414
189
  // ==============================================
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { computed, ref, watch } from 'vue'
2
+ import { computed } from 'vue'
3
3
  import { useRoute, useRouter } from 'vue-router'
4
4
  import { useMenuStore } from '@/stores/menu'
5
5
  import { useUserStore } from '@/stores/user'
@@ -7,7 +7,6 @@ import { useAuthStore } from '@/stores/auth'
7
7
  import { useAppStore } from '@/stores/app'
8
8
  import { Menu } from '@xto/navigation'
9
9
  import { Button } from '@xto/base'
10
- import { local } from '@/utils/storage'
11
10
  import SidebarMenuItem from './SidebarMenuItem.vue'
12
11
 
13
12
  // Props
@@ -34,45 +33,6 @@ const displayMenuList = computed(() => props.menuList.length > 0 ? props.menuLis
34
33
  const isCollapsed = computed(() => appStore.isCollapsed)
35
34
  const activeMenu = computed(() => route.path)
36
35
 
37
- // 菜单展开状态持久化
38
- const OPENED_MENUS_KEY = 'sidebar_opened_menus'
39
- const openedMenus = ref<string[]>(local.get<string[]>(OPENED_MENUS_KEY) || [])
40
-
41
- // 监听变化并持久化
42
- watch(openedMenus, (val) => {
43
- local.set(OPENED_MENUS_KEY, val)
44
- }, { deep: true })
45
-
46
- // 递归查找当前路由对应的父菜单路径
47
- const findMenuPath = (menus: any[], path: string, parentUrls: string[] = []): string[] | null => {
48
- for (const menu of menus) {
49
- // 当前菜单匹配
50
- if (path === menu.menuUrl || path.startsWith(menu.menuUrl + '/')) {
51
- return [...parentUrls, menu.menuUrl]
52
- }
53
- // 递归查找子菜单
54
- if (menu.children?.length) {
55
- const result = findMenuPath(menu.children, path, [...parentUrls, menu.menuUrl])
56
- if (result) return result
57
- }
58
- }
59
- return null
60
- }
61
-
62
- // 监听路由变化,只展开当前路由相关的父菜单
63
- watch([() => route.path, displayMenuList], ([path, menus]) => {
64
- if (menus.length > 0) {
65
- const menuPath = findMenuPath(menus, path)
66
- if (menuPath) {
67
- // 只保留路径上的父菜单(不包括当前页面本身)
68
- openedMenus.value = menuPath.slice(0, -1)
69
- } else {
70
- // 如果找不到匹配的菜单,关闭所有
71
- openedMenus.value = []
72
- }
73
- }
74
- }, { immediate: true })
75
-
76
36
  // 菜单主题相关
77
37
  const menuBgColor = computed(() => appStore.isDark ? '#1d1e1f' : '#fff')
78
38
  const menuTextColor = computed(() => appStore.isDark ? '#cfd3dc' : '#303133')
@@ -104,8 +64,7 @@ const handleLogout = () => {
104
64
 
105
65
  <!-- 菜单 -->
106
66
  <Menu
107
- v-model="activeMenu"
108
- v-model:openeds="openedMenus"
67
+ :model-value="activeMenu"
109
68
  mode="vertical"
110
69
  :collapse="isCollapsed"
111
70
  :collapse-transition="false"
@@ -322,44 +322,19 @@ onUnmounted(() => {
322
322
  <span class="top-menu__menu-text">{{ menu.menuName }}</span>
323
323
  </span>
324
324
  </template>
325
- <!-- 递归渲染子菜单 -->
326
- <template v-for="child in menu.children" :key="child.menuUrl">
327
- <SubMenu v-if="child.children && child.children.length > 0" :index="child.menuUrl">
328
- <template #title>
329
- <span class="top-menu__menu-content">
330
- <span class="top-menu__menu-icon">
331
- <Icon v-if="iconExists(getMenuIcon(child.icon))" :name="getMenuIcon(child.icon)" :size="16" />
332
- <span v-else class="top-menu__menu-char">{{ getFirstChar(child.menuName) }}</span>
333
- </span>
334
- <span class="top-menu__menu-text">{{ child.menuName }}</span>
335
- </span>
336
- </template>
337
- <!-- 三级菜单项 -->
338
- <MenuItem
339
- v-for="grandChild in child.children"
340
- :key="grandChild.menuUrl"
341
- :index="grandChild.menuUrl"
342
- >
343
- <span class="top-menu__menu-content">
344
- <span class="top-menu__menu-icon">
345
- <Icon v-if="iconExists(getMenuIcon(grandChild.icon))" :name="getMenuIcon(grandChild.icon)" :size="16" />
346
- <span v-else class="top-menu__menu-char">{{ getFirstChar(grandChild.menuName) }}</span>
347
- </span>
348
- <span class="top-menu__menu-text">{{ grandChild.menuName }}</span>
349
- </span>
350
- </MenuItem>
351
- </SubMenu>
352
- <!-- 二级菜单项 -->
353
- <MenuItem v-else :index="child.menuUrl">
354
- <span class="top-menu__menu-content">
355
- <span class="top-menu__menu-icon">
356
- <Icon v-if="iconExists(getMenuIcon(child.icon))" :name="getMenuIcon(child.icon)" :size="16" />
357
- <span v-else class="top-menu__menu-char">{{ getFirstChar(child.menuName) }}</span>
358
- </span>
359
- <span class="top-menu__menu-text">{{ child.menuName }}</span>
325
+ <MenuItem
326
+ v-for="child in menu.children"
327
+ :key="child.menuUrl"
328
+ :index="child.menuUrl"
329
+ >
330
+ <span class="top-menu__menu-content">
331
+ <span class="top-menu__menu-icon">
332
+ <Icon v-if="iconExists(getMenuIcon(child.icon))" :name="getMenuIcon(child.icon)" :size="16" />
333
+ <span v-else class="top-menu__menu-char">{{ getFirstChar(child.menuName) }}</span>
360
334
  </span>
361
- </MenuItem>
362
- </template>
335
+ <span class="top-menu__menu-text">{{ child.menuName }}</span>
336
+ </span>
337
+ </MenuItem>
363
338
  </SubMenu>
364
339
  <!-- 无子菜单 -->
365
340
  <MenuItem v-else :index="menu.menuUrl">
@@ -187,7 +187,6 @@ const showMixSidebar = computed(() => {
187
187
  flex: 1;
188
188
  overflow: auto;
189
189
  background-color: var(--bg-color-page);
190
- padding: 0;
191
190
  }
192
191
  }
193
192
  </style>
@@ -5,10 +5,6 @@
5
5
  import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from 'axios'
6
6
  import { getToken, getTokenType, clearToken } from './auth'
7
7
  import { Message } from '@xto/feedback'
8
- import JSONBig from 'json-bigint'
9
-
10
- // 配置 json-bigint 将大整数转为字符串,避免 JavaScript Number 精度丢失
11
- const JSONBigString = JSONBig({ storeAsString: true })
12
8
 
13
9
  // 响应数据接口(Euler 框架 Result 格式)
14
10
  export interface ApiResponse<T = unknown> {
@@ -36,20 +32,7 @@ const createRequest = (): AxiosInstance => {
36
32
  timeout: 30000,
37
33
  headers: {
38
34
  'Content-Type': 'application/json'
39
- },
40
- // 使用 json-bigint 解析响应数据,避免大整数精度丢失
41
- transformResponse: [
42
- (data) => {
43
- if (typeof data === 'string') {
44
- try {
45
- return JSONBigString.parse(data)
46
- } catch (e) {
47
- return data
48
- }
49
- }
50
- return data
51
- }
52
- ]
35
+ }
53
36
  })
54
37
 
55
38
  // 请求拦截器