smart-admin-web 10.15.0 → 10.20.1

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 (432) hide show
  1. package/README.md +1 -1
  2. package/dist/api/index.d.ts +4 -2
  3. package/dist/api/index.js +1 -1
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/api/schema.d.ts +39 -5
  6. package/dist/assets/icons/ph-subset.json.js +5 -5
  7. package/dist/components/AppIcon.vue.js +9 -9
  8. package/dist/components/AppIcon.vue.js.map +1 -1
  9. package/dist/components/AppWatermark.vue.d.ts +14 -0
  10. package/dist/components/AppWatermark.vue.js +38 -0
  11. package/dist/components/AppWatermark.vue.js.map +1 -0
  12. package/dist/components/AppWatermark2.vue.js +5 -0
  13. package/dist/components/AppWatermark2.vue.js.map +1 -0
  14. package/dist/components/Chart/PieChart.vue.d.ts +1 -1
  15. package/dist/components/Chart/echarts.js +15 -20
  16. package/dist/components/Chart/echarts.js.map +1 -1
  17. package/dist/components/CronEditor/index.vue.js +1 -1
  18. package/dist/components/CronEditor/index2.vue.js +2 -1
  19. package/dist/components/CronEditor/index2.vue.js.map +1 -1
  20. package/dist/components/DetailPage/index.vue.js +2 -2
  21. package/dist/components/DetailPage/index2.vue.js.map +1 -1
  22. package/dist/components/DictTag/index.vue.js.map +1 -1
  23. package/dist/components/ErrorBoundary/index.vue.js +2 -2
  24. package/dist/components/ErrorBoundary/index2.vue.js +1 -1
  25. package/dist/components/ErrorBoundary/index2.vue.js.map +1 -1
  26. package/dist/components/FormContainer/index.vue.js +91 -56
  27. package/dist/components/FormContainer/index.vue.js.map +1 -1
  28. package/dist/components/ImportWizard/index.vue.js +1 -1
  29. package/dist/components/ImportWizard/index2.vue.js +44 -41
  30. package/dist/components/ImportWizard/index2.vue.js.map +1 -1
  31. package/dist/components/MenuSearch.vue.js +2 -2
  32. package/dist/components/MenuSearch2.vue.js +19 -18
  33. package/dist/components/MenuSearch2.vue.js.map +1 -1
  34. package/dist/components/PasswordStrength/index.vue.js +2 -2
  35. package/dist/components/PasswordStrength/index2.vue.js +20 -18
  36. package/dist/components/PasswordStrength/index2.vue.js.map +1 -1
  37. package/dist/components/TableTotal/index.vue.d.ts +6 -0
  38. package/dist/components/{SelectTable → TableTotal}/index.vue.js +1 -1
  39. package/dist/components/TableTotal/index2.vue.js +16 -0
  40. package/dist/components/TableTotal/index2.vue.js.map +1 -0
  41. package/dist/components/TableZoomButton/index.vue.js.map +1 -1
  42. package/dist/components/UserPicker/index.vue.js +2 -2
  43. package/dist/components/UserPicker/index2.vue.js +176 -117
  44. package/dist/components/UserPicker/index2.vue.js.map +1 -1
  45. package/dist/composables/useBatchDelete.js.map +1 -1
  46. package/dist/composables/useLayoutMenu.js +17 -16
  47. package/dist/composables/useLayoutMenu.js.map +1 -1
  48. package/dist/composables/useModule.js +39 -29
  49. package/dist/composables/useModule.js.map +1 -1
  50. package/dist/composables/useShellBreakpoint.d.ts +19 -0
  51. package/dist/composables/useShellBreakpoint.js +37 -0
  52. package/dist/composables/useShellBreakpoint.js.map +1 -0
  53. package/dist/composables/useSite.d.ts +15 -0
  54. package/dist/composables/useSite.js +16 -14
  55. package/dist/composables/useSite.js.map +1 -1
  56. package/dist/composables/useTabTitle.js.map +1 -1
  57. package/dist/composables/useTableTitle.d.ts +6 -0
  58. package/dist/composables/useTableTitle.js +11 -0
  59. package/dist/composables/useTableTitle.js.map +1 -0
  60. package/dist/composables/useTableZoom.d.ts +5 -0
  61. package/dist/composables/useTableZoom.js.map +1 -1
  62. package/dist/composables/useTheme.d.ts +2 -2
  63. package/dist/composables/useTheme.js +23 -20
  64. package/dist/composables/useTheme.js.map +1 -1
  65. package/dist/createSmartAdmin.d.ts +12 -2
  66. package/dist/createSmartAdmin.js +72 -60
  67. package/dist/createSmartAdmin.js.map +1 -1
  68. package/dist/index.d.ts +5 -2
  69. package/dist/index.js +219 -205
  70. package/dist/index.js.map +1 -1
  71. package/dist/layouts/AccentPicker.vue.js +8 -0
  72. package/dist/layouts/AccentPicker.vue.js.map +1 -0
  73. package/dist/layouts/AccentPicker2.vue.js +131 -0
  74. package/dist/layouts/AccentPicker2.vue.js.map +1 -0
  75. package/dist/layouts/AppHeader.vue.d.ts +8 -1
  76. package/dist/layouts/AppHeader.vue.js +2 -2
  77. package/dist/layouts/AppHeader2.vue.js +317 -235
  78. package/dist/layouts/AppHeader2.vue.js.map +1 -1
  79. package/dist/layouts/NoticeBell.vue.js +2 -2
  80. package/dist/layouts/NoticeBell2.vue.js +19 -18
  81. package/dist/layouts/NoticeBell2.vue.js.map +1 -1
  82. package/dist/layouts/PersonalLayout.vue.js +2 -2
  83. package/dist/layouts/PersonalLayout2.vue.js +69 -47
  84. package/dist/layouts/PersonalLayout2.vue.js.map +1 -1
  85. package/dist/layouts/SettingsDrawer.vue.js +3 -3
  86. package/dist/layouts/SettingsDrawer2.vue.js +261 -325
  87. package/dist/layouts/SettingsDrawer2.vue.js.map +1 -1
  88. package/dist/layouts/TabsBar.vue.js +2 -2
  89. package/dist/layouts/TabsBar2.vue.js +97 -69
  90. package/dist/layouts/TabsBar2.vue.js.map +1 -1
  91. package/dist/layouts/components/SideNav.vue.d.ts +3 -0
  92. package/dist/layouts/components/SideNav.vue.js +1 -1
  93. package/dist/layouts/components/SideNav2.vue.js +54 -26
  94. package/dist/layouts/components/SideNav2.vue.js.map +1 -1
  95. package/dist/layouts/default.vue.js +1 -1
  96. package/dist/layouts/default2.vue.js +170 -140
  97. package/dist/layouts/default2.vue.js.map +1 -1
  98. package/dist/lib/loginHero.d.ts +2 -2
  99. package/dist/lib/loginHero.js.map +1 -1
  100. package/dist/lib/runtime.js +1 -1
  101. package/dist/lib/watermark.d.ts +110 -0
  102. package/dist/lib/watermark.js +151 -0
  103. package/dist/lib/watermark.js.map +1 -0
  104. package/dist/locales/en-US.d.ts +221 -15
  105. package/dist/locales/en-US.js +230 -21
  106. package/dist/locales/en-US.js.map +1 -1
  107. package/dist/locales/kernelMenuTitles.d.ts +1 -0
  108. package/dist/locales/kernelMenuTitles.js +128 -0
  109. package/dist/locales/kernelMenuTitles.js.map +1 -0
  110. package/dist/locales/menuTitle.d.ts +3 -0
  111. package/dist/locales/menuTitle.js +14 -12
  112. package/dist/locales/menuTitle.js.map +1 -1
  113. package/dist/locales/zh-CN.d.ts +221 -15
  114. package/dist/locales/zh-CN.js +238 -28
  115. package/dist/locales/zh-CN.js.map +1 -1
  116. package/dist/router/index.js +41 -32
  117. package/dist/router/index.js.map +1 -1
  118. package/dist/router/namedPage.d.ts +4 -0
  119. package/dist/router/namedPage.js +7 -7
  120. package/dist/router/namedPage.js.map +1 -1
  121. package/dist/router/viewRegistry.js +8 -8
  122. package/dist/router/viewRegistry.js.map +1 -1
  123. package/dist/stores/app.d.ts +0 -12
  124. package/dist/stores/app.js +11 -12
  125. package/dist/stores/app.js.map +1 -1
  126. package/dist/stores/tabs.js.map +1 -1
  127. package/dist/stores/user.d.ts +10 -0
  128. package/dist/stores/user.js.map +1 -1
  129. package/dist/style.css +1 -1
  130. package/dist/theme/accentTokens.d.ts +27 -0
  131. package/dist/theme/accentTokens.js +54 -0
  132. package/dist/theme/accentTokens.js.map +1 -0
  133. package/dist/theme/accents.d.ts +21 -1
  134. package/dist/theme/accents.js +11 -2
  135. package/dist/theme/accents.js.map +1 -1
  136. package/dist/theme/mix.d.ts +58 -7
  137. package/dist/theme/mix.js +115 -30
  138. package/dist/theme/mix.js.map +1 -1
  139. package/dist/theme/naive-theme.d.ts +5 -2
  140. package/dist/theme/naive-theme.js +407 -75
  141. package/dist/theme/naive-theme.js.map +1 -1
  142. package/dist/utils/jwt.d.ts +8 -0
  143. package/dist/utils/jwt.js +14 -0
  144. package/dist/utils/jwt.js.map +1 -0
  145. package/dist/utils/menuIcon.d.ts +2 -0
  146. package/dist/utils/menuIcon.js +8 -0
  147. package/dist/utils/menuIcon.js.map +1 -0
  148. package/dist/utils/oauthBrand.js.map +1 -1
  149. package/dist/utils/tableFilter.d.ts +88 -0
  150. package/dist/utils/tableFilter.js +116 -0
  151. package/dist/utils/tableFilter.js.map +1 -0
  152. package/dist/utils/tableToolbar.d.ts +18 -0
  153. package/dist/utils/tableToolbar.js +11 -0
  154. package/dist/utils/tableToolbar.js.map +1 -0
  155. package/dist/utils/treeFilter.d.ts +20 -0
  156. package/dist/utils/treeFilter.js +24 -0
  157. package/dist/utils/treeFilter.js.map +1 -0
  158. package/dist/views/dashboard/ShortcutPicker.vue.js +1 -1
  159. package/dist/views/dashboard/ShortcutPicker2.vue.js +73 -48
  160. package/dist/views/dashboard/ShortcutPicker2.vue.js.map +1 -1
  161. package/dist/views/dashboard/biz.vue.js +1 -1
  162. package/dist/views/dashboard/biz2.vue.js +310 -257
  163. package/dist/views/dashboard/biz2.vue.js.map +1 -1
  164. package/dist/views/dashboard/workbench.vue.js +2 -2
  165. package/dist/views/dashboard/workbench2.vue.js +141 -155
  166. package/dist/views/dashboard/workbench2.vue.js.map +1 -1
  167. package/dist/views/embed/iframe.vue.js +2 -2
  168. package/dist/views/embed/iframe2.vue.js +22 -15
  169. package/dist/views/embed/iframe2.vue.js.map +1 -1
  170. package/dist/views/error/404.vue.js +2 -2
  171. package/dist/views/error/4042.vue.js +33 -24
  172. package/dist/views/error/4042.vue.js.map +1 -1
  173. package/dist/views/error/BootError.vue.js +1 -1
  174. package/dist/views/error/BootError2.vue.js +59 -48
  175. package/dist/views/error/BootError2.vue.js.map +1 -1
  176. package/dist/views/error/MissingRoute.vue.js +2 -2
  177. package/dist/views/error/MissingRoute2.vue.js +34 -15
  178. package/dist/views/error/MissingRoute2.vue.js.map +1 -1
  179. package/dist/views/login/LoginForm.vue.d.ts +7 -1
  180. package/dist/views/login/LoginForm.vue.js +2 -2
  181. package/dist/views/login/LoginForm2.vue.js +580 -488
  182. package/dist/views/login/LoginForm2.vue.js.map +1 -1
  183. package/dist/views/login/components/LoginDesk.vue.d.ts +36 -0
  184. package/dist/views/login/components/LoginDesk.vue.js +9 -0
  185. package/dist/views/login/components/LoginDesk.vue.js.map +1 -0
  186. package/dist/views/login/components/LoginDesk2.vue.js +100 -0
  187. package/dist/views/login/components/LoginDesk2.vue.js.map +1 -0
  188. package/dist/views/login/components/LoginHeroPanel.vue.js +3 -3
  189. package/dist/views/login/components/LoginHeroPanel2.vue.js +34 -39
  190. package/dist/views/login/components/LoginHeroPanel2.vue.js.map +1 -1
  191. package/dist/views/login/index.vue.js +1 -1
  192. package/dist/views/login/index2.vue.js +141 -71
  193. package/dist/views/login/index2.vue.js.map +1 -1
  194. package/dist/views/login/layout.d.ts +11 -0
  195. package/dist/views/login/layout.js +27 -0
  196. package/dist/views/login/layout.js.map +1 -0
  197. package/dist/views/mfa/index.vue.js +2 -2
  198. package/dist/views/mfa/index2.vue.js +367 -321
  199. package/dist/views/mfa/index2.vue.js.map +1 -1
  200. package/dist/views/module/index.vue.js +2 -2
  201. package/dist/views/module/index2.vue.js +132 -99
  202. package/dist/views/module/index2.vue.js.map +1 -1
  203. package/dist/views/oauth/callback.vue.js +2 -2
  204. package/dist/views/oauth/callback2.vue.js +65 -51
  205. package/dist/views/oauth/callback2.vue.js.map +1 -1
  206. package/dist/views/personal/bindings.vue.js +2 -2
  207. package/dist/views/personal/bindings2.vue.js +98 -94
  208. package/dist/views/personal/bindings2.vue.js.map +1 -1
  209. package/dist/views/personal/notice2.vue.js +103 -76
  210. package/dist/views/personal/notice2.vue.js.map +1 -1
  211. package/dist/views/personal/password2.vue.js +47 -40
  212. package/dist/views/personal/password2.vue.js.map +1 -1
  213. package/dist/views/personal/profile.vue.js +3 -3
  214. package/dist/views/personal/profile2.vue.js +24 -18
  215. package/dist/views/personal/profile2.vue.js.map +1 -1
  216. package/dist/views/personal/security.vue.js +2 -2
  217. package/dist/views/personal/security2.vue.js +65 -53
  218. package/dist/views/personal/security2.vue.js.map +1 -1
  219. package/dist/views/personal/sessions.vue.js +2 -2
  220. package/dist/views/personal/sessions2.vue.js +67 -62
  221. package/dist/views/personal/sessions2.vue.js.map +1 -1
  222. package/dist/views/system/ai-model/components/ProviderCard.vue.js +2 -2
  223. package/dist/views/system/ai-model/components/ProviderCard2.vue.js +142 -130
  224. package/dist/views/system/ai-model/components/ProviderCard2.vue.js.map +1 -1
  225. package/dist/views/system/ai-model/components/ProviderForm.vue.js +2 -2
  226. package/dist/views/system/ai-model/components/ProviderForm2.vue.js +71 -70
  227. package/dist/views/system/ai-model/components/ProviderForm2.vue.js.map +1 -1
  228. package/dist/views/system/ai-model/index.vue.js +2 -2
  229. package/dist/views/system/ai-model/index2.vue.js +99 -99
  230. package/dist/views/system/ai-model/index2.vue.js.map +1 -1
  231. package/dist/views/system/ai-model/presets.d.ts +1 -1
  232. package/dist/views/system/ai-model/presets.js +18 -18
  233. package/dist/views/system/ai-model/presets.js.map +1 -1
  234. package/dist/views/system/ai-usage/index.vue.js +2 -2
  235. package/dist/views/system/ai-usage/index2.vue.js +356 -258
  236. package/dist/views/system/ai-usage/index2.vue.js.map +1 -1
  237. package/dist/views/system/api-docs/index.vue.js +5 -2
  238. package/dist/views/system/api-docs/index.vue.js.map +1 -1
  239. package/dist/views/system/api-docs/index2.vue.js +92 -42
  240. package/dist/views/system/api-docs/index2.vue.js.map +1 -1
  241. package/dist/views/system/cache/index.vue.js +2 -2
  242. package/dist/views/system/cache/index2.vue.js +74 -80
  243. package/dist/views/system/cache/index2.vue.js.map +1 -1
  244. package/dist/views/system/config/components/AdminMock.vue.js +2 -2
  245. package/dist/views/system/config/components/AdminMock2.vue.js +60 -43
  246. package/dist/views/system/config/components/AdminMock2.vue.js.map +1 -1
  247. package/dist/views/system/config/components/AdvancedSection.vue.js +5 -2
  248. package/dist/views/system/config/components/AdvancedSection.vue.js.map +1 -1
  249. package/dist/views/system/config/components/AdvancedSection2.vue.js +98 -70
  250. package/dist/views/system/config/components/AdvancedSection2.vue.js.map +1 -1
  251. package/dist/views/system/config/components/BrandSection.vue.js +2 -2
  252. package/dist/views/system/config/components/BrandSection2.vue.js +121 -119
  253. package/dist/views/system/config/components/BrandSection2.vue.js.map +1 -1
  254. package/dist/views/system/config/components/CfgGroup.vue.js +3 -3
  255. package/dist/views/system/config/components/CfgGroup2.vue.js.map +1 -1
  256. package/dist/views/system/config/components/CfgRow.vue.js +1 -1
  257. package/dist/views/system/config/components/CfgRow2.vue.js +24 -23
  258. package/dist/views/system/config/components/CfgRow2.vue.js.map +1 -1
  259. package/dist/views/system/config/components/CfgSegment.vue.js +1 -1
  260. package/dist/views/system/config/components/CfgSegment2.vue.js +16 -15
  261. package/dist/views/system/config/components/CfgSegment2.vue.js.map +1 -1
  262. package/dist/views/system/config/components/ConfigFormModal.vue.js +2 -2
  263. package/dist/views/system/config/components/ConfigFormModal2.vue.js +35 -33
  264. package/dist/views/system/config/components/ConfigFormModal2.vue.js.map +1 -1
  265. package/dist/views/system/config/components/JobSection.vue.js +2 -2
  266. package/dist/views/system/config/components/JobSection2.vue.js +46 -44
  267. package/dist/views/system/config/components/JobSection2.vue.js.map +1 -1
  268. package/dist/views/system/config/components/LoginMock.vue.js +3 -3
  269. package/dist/views/system/config/components/LoginMock2.vue.js +83 -72
  270. package/dist/views/system/config/components/LoginMock2.vue.js.map +1 -1
  271. package/dist/views/system/config/components/LogoCropper.vue.js +1 -1
  272. package/dist/views/system/config/components/LogoCropper2.vue.js.map +1 -1
  273. package/dist/views/system/config/components/LogoEditor.vue.js +2 -2
  274. package/dist/views/system/config/components/LogoEditor2.vue.js +11 -13
  275. package/dist/views/system/config/components/LogoEditor2.vue.js.map +1 -1
  276. package/dist/views/system/config/components/ProviderSheet.vue.js +3 -3
  277. package/dist/views/system/config/components/ProviderSheet2.vue.js.map +1 -1
  278. package/dist/views/system/config/components/SectionLayout.vue.d.ts +4 -2
  279. package/dist/views/system/config/components/SectionLayout.vue.js +2 -2
  280. package/dist/views/system/config/components/SectionLayout2.vue.js +51 -27
  281. package/dist/views/system/config/components/SectionLayout2.vue.js.map +1 -1
  282. package/dist/views/system/config/components/SecuritySection.vue.js +2 -2
  283. package/dist/views/system/config/components/SecuritySection2.vue.js +207 -206
  284. package/dist/views/system/config/components/SecuritySection2.vue.js.map +1 -1
  285. package/dist/views/system/config/components/SensitiveSection.vue.js +2 -2
  286. package/dist/views/system/config/components/SensitiveSection2.vue.js +107 -102
  287. package/dist/views/system/config/components/SensitiveSection2.vue.js.map +1 -1
  288. package/dist/views/system/config/components/UploadSection.vue.js +2 -2
  289. package/dist/views/system/config/components/UploadSection2.vue.js +86 -77
  290. package/dist/views/system/config/components/UploadSection2.vue.js.map +1 -1
  291. package/dist/views/system/config/components/WatermarkSection.vue.js +8 -0
  292. package/dist/views/system/config/components/WatermarkSection.vue.js.map +1 -0
  293. package/dist/views/system/config/components/WatermarkSection2.vue.js +284 -0
  294. package/dist/views/system/config/components/WatermarkSection2.vue.js.map +1 -0
  295. package/dist/views/system/config/draft.d.ts +2 -2
  296. package/dist/views/system/config/draft.js.map +1 -1
  297. package/dist/views/system/config/groups.d.ts +4 -1
  298. package/dist/views/system/config/groups.js +54 -49
  299. package/dist/views/system/config/groups.js.map +1 -1
  300. package/dist/views/system/config/index.vue.js +3 -2
  301. package/dist/views/system/config/index.vue.js.map +1 -1
  302. package/dist/views/system/config/index2.vue.js +173 -148
  303. package/dist/views/system/config/index2.vue.js.map +1 -1
  304. package/dist/views/system/config/layoutMode.d.ts +23 -0
  305. package/dist/views/system/config/layoutMode.js +28 -0
  306. package/dist/views/system/config/layoutMode.js.map +1 -0
  307. package/dist/views/system/dict/index.vue.js +2 -2
  308. package/dist/views/system/dict/index2.vue.js +471 -366
  309. package/dist/views/system/dict/index2.vue.js.map +1 -1
  310. package/dist/views/system/file/index2.vue.js +91 -76
  311. package/dist/views/system/file/index2.vue.js.map +1 -1
  312. package/dist/views/system/job/index.vue.js +3 -3
  313. package/dist/views/system/job/index2.vue.js +897 -828
  314. package/dist/views/system/job/index2.vue.js.map +1 -1
  315. package/dist/views/system/job-log/components/AttemptTable.vue.d.ts +8 -0
  316. package/dist/views/system/job-log/components/AttemptTable.vue.js +5 -0
  317. package/dist/views/system/job-log/components/AttemptTable.vue.js.map +1 -0
  318. package/dist/views/system/job-log/components/AttemptTable2.vue.js +54 -0
  319. package/dist/views/system/job-log/components/AttemptTable2.vue.js.map +1 -0
  320. package/dist/views/system/job-log/index.vue.js +2 -2
  321. package/dist/views/system/job-log/index2.vue.js +193 -207
  322. package/dist/views/system/job-log/index2.vue.js.map +1 -1
  323. package/dist/views/system/job-log/runStatus.d.ts +13 -0
  324. package/dist/views/system/job-log/runStatus.js +26 -0
  325. package/dist/views/system/job-log/runStatus.js.map +1 -0
  326. package/dist/views/system/job-monitor/index.vue.js +2 -2
  327. package/dist/views/system/job-monitor/index2.vue.js +172 -180
  328. package/dist/views/system/job-monitor/index2.vue.js.map +1 -1
  329. package/dist/views/system/log/exception/index.vue.js +2 -2
  330. package/dist/views/system/log/exception/index2.vue.js +135 -96
  331. package/dist/views/system/log/exception/index2.vue.js.map +1 -1
  332. package/dist/views/system/log/login/index2.vue.js +62 -41
  333. package/dist/views/system/log/login/index2.vue.js.map +1 -1
  334. package/dist/views/system/log/op/index.vue.js +2 -2
  335. package/dist/views/system/log/op/index2.vue.js +200 -162
  336. package/dist/views/system/log/op/index2.vue.js.map +1 -1
  337. package/dist/views/system/menu/components/ButtonManager.vue.js +2 -2
  338. package/dist/views/system/menu/components/ButtonManager2.vue.js +206 -190
  339. package/dist/views/system/menu/components/ButtonManager2.vue.js.map +1 -1
  340. package/dist/views/system/menu/components/MenuFormModal.vue.js +2 -2
  341. package/dist/views/system/menu/components/MenuFormModal2.vue.js +127 -118
  342. package/dist/views/system/menu/components/MenuFormModal2.vue.js.map +1 -1
  343. package/dist/views/system/menu/index.vue.js +1 -1
  344. package/dist/views/system/menu/index2.vue.js +216 -183
  345. package/dist/views/system/menu/index2.vue.js.map +1 -1
  346. package/dist/views/system/module/index.vue.js +1 -1
  347. package/dist/views/system/module/index2.vue.js +177 -144
  348. package/dist/views/system/module/index2.vue.js.map +1 -1
  349. package/dist/views/system/monitor/index.vue.js +2 -2
  350. package/dist/views/system/monitor/index2.vue.js +134 -149
  351. package/dist/views/system/monitor/index2.vue.js.map +1 -1
  352. package/dist/views/system/notice/index.vue.js +1 -1
  353. package/dist/views/system/notice/index2.vue.js +209 -181
  354. package/dist/views/system/notice/index2.vue.js.map +1 -1
  355. package/dist/views/system/org/index.vue.js +1 -1
  356. package/dist/views/system/org/index2.vue.js +278 -248
  357. package/dist/views/system/org/index2.vue.js.map +1 -1
  358. package/dist/views/system/position/index.vue.js +5 -2
  359. package/dist/views/system/position/index.vue.js.map +1 -1
  360. package/dist/views/system/position/index2.vue.js +128 -92
  361. package/dist/views/system/position/index2.vue.js.map +1 -1
  362. package/dist/views/system/recycle/index.vue.js +2 -2
  363. package/dist/views/system/recycle/index2.vue.js +90 -67
  364. package/dist/views/system/recycle/index2.vue.js.map +1 -1
  365. package/dist/views/system/role/components/GrantMenuSheet.vue.d.ts +20 -0
  366. package/dist/views/system/role/components/GrantMenuSheet.vue.js +8 -0
  367. package/dist/views/system/role/components/GrantMenuSheet.vue.js.map +1 -0
  368. package/dist/views/system/role/components/GrantMenuSheet2.vue.js +117 -0
  369. package/dist/views/system/role/components/GrantMenuSheet2.vue.js.map +1 -0
  370. package/dist/views/system/role/components/GrantMenuTable.vue.d.ts +6 -4
  371. package/dist/views/system/role/components/GrantMenuTable.vue.js +2 -2
  372. package/dist/views/system/role/components/GrantMenuTable2.vue.js +279 -177
  373. package/dist/views/system/role/components/GrantMenuTable2.vue.js.map +1 -1
  374. package/dist/views/system/role/components/MatchText.vue.d.ts +7 -0
  375. package/dist/views/system/role/components/MatchText.vue.js +8 -0
  376. package/dist/views/system/role/components/MatchText.vue.js.map +1 -0
  377. package/dist/views/system/role/components/MatchText2.vue.js +29 -0
  378. package/dist/views/system/role/components/MatchText2.vue.js.map +1 -0
  379. package/dist/views/system/role/components/grantMenuGroups.d.ts +36 -0
  380. package/dist/views/system/role/components/grantMenuGroups.js +110 -48
  381. package/dist/views/system/role/components/grantMenuGroups.js.map +1 -1
  382. package/dist/views/system/role/index.vue.js +5 -2
  383. package/dist/views/system/role/index.vue.js.map +1 -1
  384. package/dist/views/system/role/index2.vue.js +181 -165
  385. package/dist/views/system/role/index2.vue.js.map +1 -1
  386. package/dist/views/system/session/index2.vue.js +75 -49
  387. package/dist/views/system/session/index2.vue.js.map +1 -1
  388. package/dist/views/system/user/components/ResetPasswordModal.vue.js +2 -2
  389. package/dist/views/system/user/components/ResetPasswordModal2.vue.js +2 -0
  390. package/dist/views/system/user/components/ResetPasswordModal2.vue.js.map +1 -1
  391. package/dist/views/system/user/components/UserFormModal.vue.js +2 -2
  392. package/dist/views/system/user/components/UserFormModal2.vue.js +77 -76
  393. package/dist/views/system/user/components/UserFormModal2.vue.js.map +1 -1
  394. package/dist/views/system/user/index.vue.js +2 -2
  395. package/dist/views/system/user/index2.vue.js +362 -275
  396. package/dist/views/system/user/index2.vue.js.map +1 -1
  397. package/package.json +3 -5
  398. package/dist/components/SelectTable/index.vue.d.ts +0 -76
  399. package/dist/components/SelectTable/index2.vue.js +0 -256
  400. package/dist/components/SelectTable/index2.vue.js.map +0 -1
  401. package/dist/composables/useTableRowSort.d.ts +0 -20
  402. package/dist/composables/useTableRowSort.js +0 -59
  403. package/dist/composables/useTableRowSort.js.map +0 -1
  404. package/dist/layouts/LayoutModeCards.vue.js +0 -8
  405. package/dist/layouts/LayoutModeCards.vue.js.map +0 -1
  406. package/dist/layouts/LayoutModeCards2.vue.js +0 -67
  407. package/dist/layouts/LayoutModeCards2.vue.js.map +0 -1
  408. package/dist/layouts/SettingRow.vue.d.ts +0 -16
  409. package/dist/layouts/SettingRow.vue.js +0 -8
  410. package/dist/layouts/SettingRow.vue.js.map +0 -1
  411. package/dist/layouts/SettingRow2.vue.js +0 -23
  412. package/dist/layouts/SettingRow2.vue.js.map +0 -1
  413. package/dist/views/login/skins/AuroraGlass.vue.js +0 -8
  414. package/dist/views/login/skins/AuroraGlass.vue.js.map +0 -1
  415. package/dist/views/login/skins/AuroraGlass2.vue.js +0 -80
  416. package/dist/views/login/skins/AuroraGlass2.vue.js.map +0 -1
  417. package/dist/views/login/skins/SplitPanel.vue.d.ts +0 -3
  418. package/dist/views/login/skins/SplitPanel.vue.js +0 -8
  419. package/dist/views/login/skins/SplitPanel.vue.js.map +0 -1
  420. package/dist/views/login/skins/SplitPanel2.vue.js +0 -65
  421. package/dist/views/login/skins/SplitPanel2.vue.js.map +0 -1
  422. package/dist/views/login/skins/Spotlight.vue.d.ts +0 -3
  423. package/dist/views/login/skins/Spotlight.vue.js +0 -8
  424. package/dist/views/login/skins/Spotlight.vue.js.map +0 -1
  425. package/dist/views/login/skins/Spotlight2.vue.js +0 -36
  426. package/dist/views/login/skins/Spotlight2.vue.js.map +0 -1
  427. package/dist/views/login/skins.d.ts +0 -8
  428. package/dist/views/login/skins.js +0 -13
  429. package/dist/views/login/skins.js.map +0 -1
  430. /package/dist/components/{SelectTable → TableTotal}/index.vue.js.map +0 -0
  431. /package/dist/layouts/{LayoutModeCards.vue.d.ts → AccentPicker.vue.d.ts} +0 -0
  432. /package/dist/views/{login/skins/AuroraGlass.vue.d.ts → system/config/components/WatermarkSection.vue.d.ts} +0 -0
@@ -1,12 +1,16 @@
1
- import { defineComponent as D, useModel as z, computed as u, ref as V, onDeactivated as j, openBlock as S, createBlock as $, unref as e, normalizeStyle as U, normalizeClass as W, createSlots as x, withCtx as l, renderSlot as d, createVNode as i, createTextVNode as w, toDisplayString as c, createElementVNode as A, mergeModels as E } from "vue";
2
- import { NModal as F, NSpace as g, NButton as y, NDrawer as I, NDrawerContent as q } from "naive-ui";
3
- import { useI18n as G } from "vue-i18n";
4
- import { useWindowSize as H } from "@vueuse/core";
5
- import { useAppStore as J } from "../../stores/app.js";
6
- import { useCompactScreen as K } from "../../composables/useCompactScreen.js";
7
- const Y = /* @__PURE__ */ D({
1
+ import { defineComponent as E, useModel as U, computed as i, ref as W, onDeactivated as A, openBlock as k, createBlock as C, unref as e, normalizeStyle as F, normalizeClass as z, createSlots as B, withCtx as l, renderSlot as v, createVNode as r, createTextVNode as y, toDisplayString as c, createElementBlock as I, createElementVNode as q, mergeModels as G } from "vue";
2
+ import { NModal as H, NSpace as N, NButton as h, NDrawer as J, NDrawerContent as K } from "naive-ui";
3
+ import { useI18n as L } from "vue-i18n";
4
+ import { useWindowSize as O } from "@vueuse/core";
5
+ import { useCompactScreen as P } from "../../composables/useCompactScreen.js";
6
+ import { useShellBreakpoint as Q } from "../../composables/useShellBreakpoint.js";
7
+ import { useAppStore as R } from "../../stores/app.js";
8
+ const X = {
9
+ key: 0,
10
+ class: "smart-form-foot"
11
+ }, te = /* @__PURE__ */ E({
8
12
  __name: "index",
9
- props: /* @__PURE__ */ E({
13
+ props: /* @__PURE__ */ G({
10
14
  title: {},
11
15
  variant: {},
12
16
  width: {},
@@ -21,58 +25,59 @@ const Y = /* @__PURE__ */ D({
21
25
  }),
22
26
  emits: ["update:show"],
23
27
  setup(a) {
24
- const o = z(a, "show"), r = a, { t: m } = G(), N = J(), T = u(() => r.variant ?? N.formStyle), t = V(!1), { width: p } = H(), B = K(), h = u(
25
- () => r.fullscreen === "auto" ? B.value : r.fullscreen === !0
26
- ), k = u(
27
- () => h.value ? p.value : Math.min(r.width ?? 560, Math.round(p.value * 0.9))
28
- ), M = u(() => h.value ? void 0 : { width: `${k.value}px` }), v = u(() => !t.value), C = u(() => (r.maskClosable ?? !1) && !t.value);
28
+ const o = U(a, "show"), u = a, { t: d } = L(), M = R(), g = i(() => u.variant ?? M.formStyle), t = W(!1), { width: S } = O(), D = P(), w = i(
29
+ () => u.fullscreen === "auto" ? D.value : u.fullscreen === !0
30
+ ), { bp: V } = Q(), m = i(() => g.value === "drawer" && V.value === "narrow" && !w.value), $ = i(() => m.value ? "large" : "medium"), x = i(
31
+ () => w.value ? S.value : Math.min(u.width ?? 560, Math.round(S.value * 0.9))
32
+ ), j = i(() => w.value ? void 0 : { width: `${x.value}px` }), p = i(() => !t.value), T = i(() => (u.maskClosable ?? !1) && !t.value);
29
33
  async function b() {
30
- if (!r.onConfirm) {
34
+ if (!u.onConfirm) {
31
35
  o.value = !1;
32
36
  return;
33
37
  }
34
38
  t.value = !0;
35
39
  try {
36
- await r.onConfirm() !== !1 && (o.value = !1);
40
+ await u.onConfirm() !== !1 && (o.value = !1);
37
41
  } catch {
38
42
  } finally {
39
43
  t.value = !1;
40
44
  }
41
45
  }
42
- return j(() => {
46
+ return A(() => {
43
47
  o.value = !1;
44
- }), (s, n) => T.value === "modal" ? (S(), $(e(F), {
48
+ }), (n, s) => g.value === "modal" ? (k(), C(e(H), {
45
49
  key: 0,
46
50
  show: o.value,
47
- "onUpdate:show": n[1] || (n[1] = (f) => o.value = f),
51
+ "onUpdate:show": s[1] || (s[1] = (f) => o.value = f),
48
52
  preset: "card",
49
53
  title: a.title,
50
- closable: v.value,
51
- "close-on-esc": v.value,
52
- "mask-closable": C.value,
53
- class: W({ "smart-form--fullscreen": h.value }),
54
- style: U(M.value)
55
- }, x({
54
+ closable: p.value,
55
+ "close-on-esc": p.value,
56
+ "mask-closable": T.value,
57
+ class: z({ "smart-form--fullscreen": w.value }),
58
+ style: F(j.value)
59
+ }, B({
56
60
  footer: l(() => [
57
- d(s.$slots, "footer", {}, () => [
58
- i(e(g), { justify: "end" }, {
61
+ v(n.$slots, "footer", {}, () => [
62
+ r(e(N), { justify: "end" }, {
59
63
  default: l(() => [
60
- i(e(y), {
64
+ r(e(h), {
65
+ secondary: "",
61
66
  disabled: t.value,
62
- onClick: n[0] || (n[0] = (f) => o.value = !1)
67
+ onClick: s[0] || (s[0] = (f) => o.value = !1)
63
68
  }, {
64
69
  default: l(() => [
65
- w(c(a.cancelText ?? e(m)("common.cancel")), 1)
70
+ y(c(a.cancelText ?? e(d)("common.cancel")), 1)
66
71
  ]),
67
72
  _: 1
68
73
  }, 8, ["disabled"]),
69
- i(e(y), {
74
+ r(e(h), {
70
75
  type: "primary",
71
76
  loading: t.value,
72
77
  onClick: b
73
78
  }, {
74
79
  default: l(() => [
75
- w(c(a.confirmText ?? e(m)("common.confirm")), 1)
80
+ y(c(a.confirmText ?? e(d)("common.confirm")), 1)
76
81
  ]),
77
82
  _: 1
78
83
  }, 8, ["loading"])
@@ -82,79 +87,109 @@ const Y = /* @__PURE__ */ D({
82
87
  ])
83
88
  ]),
84
89
  default: l(() => [
85
- d(s.$slots, "default")
90
+ v(n.$slots, "default")
86
91
  ]),
87
92
  _: 2
88
93
  }, [
89
- s.$slots["header-extra"] ? {
94
+ n.$slots["header-extra"] ? {
90
95
  name: "header-extra",
91
96
  fn: l(() => [
92
- d(s.$slots, "header-extra")
97
+ v(n.$slots, "header-extra")
93
98
  ]),
94
99
  key: "0"
95
100
  } : void 0
96
- ]), 1032, ["show", "title", "closable", "close-on-esc", "mask-closable", "class", "style"])) : (S(), $(e(I), {
101
+ ]), 1032, ["show", "title", "closable", "close-on-esc", "mask-closable", "class", "style"])) : (k(), C(e(J), {
97
102
  key: 1,
98
103
  show: o.value,
99
- "onUpdate:show": n[3] || (n[3] = (f) => o.value = f),
100
- width: k.value,
101
- "close-on-esc": v.value,
102
- "mask-closable": C.value
104
+ "onUpdate:show": s[4] || (s[4] = (f) => o.value = f),
105
+ placement: m.value ? "bottom" : "right",
106
+ width: m.value ? void 0 : x.value,
107
+ height: m.value ? "92%" : void 0,
108
+ class: z({ "smart-form-sheet": m.value }),
109
+ "close-on-esc": p.value,
110
+ "mask-closable": T.value
103
111
  }, {
104
112
  default: l(() => [
105
- i(e(q), {
113
+ r(e(K), {
106
114
  title: a.title,
107
- closable: v.value,
115
+ closable: p.value,
108
116
  "native-scrollbar": !1
109
- }, x({
117
+ }, B({
110
118
  footer: l(() => [
111
- d(s.$slots, "footer", {}, () => [
112
- i(e(g), { justify: "end" }, {
119
+ v(n.$slots, "footer", {}, () => [
120
+ m.value ? (k(), I("div", X, [
121
+ r(e(h), {
122
+ secondary: "",
123
+ size: $.value,
124
+ disabled: t.value,
125
+ onClick: s[2] || (s[2] = (f) => o.value = !1)
126
+ }, {
127
+ default: l(() => [
128
+ y(c(a.cancelText ?? e(d)("common.cancel")), 1)
129
+ ]),
130
+ _: 1
131
+ }, 8, ["size", "disabled"]),
132
+ r(e(h), {
133
+ type: "primary",
134
+ size: $.value,
135
+ loading: t.value,
136
+ onClick: b
137
+ }, {
138
+ default: l(() => [
139
+ y(c(a.confirmText ?? e(d)("common.confirm")), 1)
140
+ ]),
141
+ _: 1
142
+ }, 8, ["size", "loading"])
143
+ ])) : (k(), C(e(N), {
144
+ key: 1,
145
+ justify: "end"
146
+ }, {
113
147
  default: l(() => [
114
- i(e(y), {
148
+ r(e(h), {
149
+ secondary: "",
115
150
  disabled: t.value,
116
- onClick: n[2] || (n[2] = (f) => o.value = !1)
151
+ onClick: s[3] || (s[3] = (f) => o.value = !1)
117
152
  }, {
118
153
  default: l(() => [
119
- w(c(a.cancelText ?? e(m)("common.cancel")), 1)
154
+ y(c(a.cancelText ?? e(d)("common.cancel")), 1)
120
155
  ]),
121
156
  _: 1
122
157
  }, 8, ["disabled"]),
123
- i(e(y), {
158
+ r(e(h), {
124
159
  type: "primary",
125
160
  loading: t.value,
126
161
  onClick: b
127
162
  }, {
128
163
  default: l(() => [
129
- w(c(a.confirmText ?? e(m)("common.confirm")), 1)
164
+ y(c(a.confirmText ?? e(d)("common.confirm")), 1)
130
165
  ]),
131
166
  _: 1
132
167
  }, 8, ["loading"])
133
168
  ]),
134
169
  _: 1
135
- })
170
+ }))
136
171
  ])
137
172
  ]),
138
173
  default: l(() => [
139
- d(s.$slots, "default")
174
+ v(n.$slots, "default")
140
175
  ]),
141
176
  _: 2
142
177
  }, [
143
- s.$slots["header-extra"] ? {
178
+ n.$slots["header-extra"] ? {
144
179
  name: "header",
145
180
  fn: l(() => [
146
- A("span", null, c(a.title), 1),
147
- d(s.$slots, "header-extra")
181
+ q("span", null, c(a.title), 1),
182
+ v(n.$slots, "header-extra")
148
183
  ]),
149
184
  key: "0"
150
185
  } : void 0
151
186
  ]), 1032, ["title", "closable"])
152
187
  ]),
153
188
  _: 3
154
- }, 8, ["show", "width", "close-on-esc", "mask-closable"]));
189
+ }, 8, ["show", "placement", "width", "height", "class", "close-on-esc", "mask-closable"]));
155
190
  }
156
191
  });
157
192
  export {
158
- Y as default
193
+ te as default
159
194
  };
160
195
  //# sourceMappingURL=index.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.js","sources":["../../../src/components/FormContainer/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 弹窗/抽屉二合一表单容器:消化 CRUD 页「saving ref + 手写 footer + n-modal 包装」样板。\n// 形态默认跟随全局偏好(app.formStyle,设置抽屉可切),variant 按实例覆盖。\n// onConfirm 协议:返回 Promise → 确认钮自动 loading;reject 或 resolve(false) → 不关闭\n// (n-form 校验放 onConfirm 首行,失败 reject 即挡住关闭);其余情况自动关。\nimport { computed, onDeactivated, ref } from 'vue'\nimport { NModal, NDrawer, NDrawerContent, NButton, NSpace } from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { useWindowSize } from '@vueuse/core'\nimport { useAppStore, type FormStyle } from '#/stores/app'\nimport { useCompactScreen } from '#/composables/useCompactScreen'\n\nconst show = defineModel<boolean>('show', { default: false })\n\nconst props = defineProps<{\n title: string\n /** 不传 → 跟随 app.formStyle 全局偏好 */\n variant?: FormStyle\n /** modal=卡片宽 / drawer=抽屉宽,实际生效 min(width, 90vw) */\n width?: number\n /** 见顶部协议注释;不传则确认钮直接关闭 */\n onConfirm?: () => unknown | Promise<unknown>\n confirmText?: string\n cancelText?: string\n /** 默认 false:表单防误触丢输入 */\n maskClosable?: boolean\n /**\n * 铺满视口。默认 `false` —— 不给 `'auto'` 当默认值是刻意的:没传这个 prop 的既有页面\n * 不该因为换了台平板就换一种形态。字段多的表单显式传 `true`,想跟着屏幕走再传 `'auto'`\n * (紧凑屏判定见 composables/useCompactScreen)。\n */\n fullscreen?: boolean | 'auto'\n}>()\n\nconst { t } = useI18n()\nconst app = useAppStore()\n\nconst mode = computed(() => props.variant ?? app.formStyle)\nconst loading = ref(false)\n// 窄屏不溢出:同 SettingsDrawer 惯例,宽度取 min(width, 90vw)。\nconst { width: winW } = useWindowSize()\nconst compact = useCompactScreen()\nconst fullscreen = computed(() =>\n props.fullscreen === 'auto' ? compact.value : props.fullscreen === true,\n)\nconst w = computed(() =>\n fullscreen.value ? winW.value : Math.min(props.width ?? 560, Math.round(winW.value * 0.9)),\n)\n// 全屏时不再钉宽度,交给 .smart-form--fullscreen 那条全局样式铺满。\nconst modalStyle = computed(() => (fullscreen.value ? undefined : { width: `${w.value}px` }))\n// 提交中禁止任何途径关闭(esc/遮罩/关闭钮/取消钮),防提交中途关闭导致状态错乱。\nconst canClose = computed(() => !loading.value)\nconst maskClose = computed(() => (props.maskClosable ?? false) && !loading.value)\n\nasync function handleConfirm() {\n if (!props.onConfirm) {\n show.value = false\n return\n }\n loading.value = true\n try {\n if ((await props.onConfirm()) !== false) show.value = false\n } catch {\n // 静默:n-form 校验失败已有内联提示;API 错误 toast 由业务 onConfirm 内负责。\n } finally {\n loading.value = false\n }\n}\n\n// keep-alive 页签切走时,teleport 到 body 的弹层会残留可见 → 强制收起。\nonDeactivated(() => {\n show.value = false\n})\n</script>\n\n<template>\n <n-modal\n v-if=\"mode === 'modal'\"\n v-model:show=\"show\"\n preset=\"card\"\n :title=\"title\"\n :closable=\"canClose\"\n :close-on-esc=\"canClose\"\n :mask-closable=\"maskClose\"\n :class=\"{ 'smart-form--fullscreen': fullscreen }\"\n :style=\"modalStyle\"\n >\n <template v-if=\"$slots['header-extra']\" #header-extra>\n <slot name=\"header-extra\" />\n </template>\n <slot />\n <template #footer>\n <slot name=\"footer\">\n <n-space justify=\"end\">\n <n-button :disabled=\"loading\" @click=\"show = false\">\n {{ cancelText ?? t('common.cancel') }}\n </n-button>\n <n-button type=\"primary\" :loading=\"loading\" @click=\"handleConfirm\">\n {{ confirmText ?? t('common.confirm') }}\n </n-button>\n </n-space>\n </slot>\n </template>\n </n-modal>\n\n <n-drawer\n v-else\n v-model:show=\"show\"\n :width=\"w\"\n :close-on-esc=\"canClose\"\n :mask-closable=\"maskClose\"\n >\n <n-drawer-content :title=\"title\" :closable=\"canClose\" :native-scrollbar=\"false\">\n <!-- n-drawer-content 无 header-extra 原生槽:业务传了才自拼 #header(标题 + 附加区并排) -->\n <template v-if=\"$slots['header-extra']\" #header>\n <span>{{ title }}</span>\n <slot name=\"header-extra\" />\n </template>\n <slot />\n <template #footer>\n <slot name=\"footer\">\n <n-space justify=\"end\">\n <n-button :disabled=\"loading\" @click=\"show = false\">\n {{ cancelText ?? t('common.cancel') }}\n </n-button>\n <n-button type=\"primary\" :loading=\"loading\" @click=\"handleConfirm\">\n {{ confirmText ?? t('common.confirm') }}\n </n-button>\n </n-space>\n </slot>\n </template>\n </n-drawer-content>\n </n-drawer>\n</template>\n\n<!-- 不能加 scoped:n-modal / n-drawer 的内容 teleport 到 body,scoped 编译出的 data-v 属性到不了那棵子树,\n 写了等于没写(这正是\"全屏样式不生效\"最常见的原因)。故用带前缀的类名自行隔离。 -->\n<style>\n.smart-form--fullscreen {\n width: 100vw;\n max-width: 100vw;\n height: 100dvh;\n max-height: 100dvh;\n display: flex;\n flex-direction: column;\n border-radius: 0;\n}\n/* 头/脚按内容高,正文吃满剩余并自己滚 —— 否则长表单会把整张卡撑出视口,底部按钮点不到。 */\n.smart-form--fullscreen > .n-card__content {\n flex: 1;\n min-height: 0;\n overflow: auto;\n}\n</style>\n"],"names":["show","_useModel","__props","props","t","useI18n","app","useAppStore","mode","computed","loading","ref","winW","useWindowSize","compact","useCompactScreen","fullscreen","w","modalStyle","canClose","maskClose","handleConfirm","onDeactivated","_createBlock","_unref","NModal","$event","_renderSlot","_ctx","_createVNode","NSpace","NButton","_createTextVNode","_toDisplayString","$slots","NDrawer","NDrawerContent","_createElementVNode"],"mappings":"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"}
1
+ {"version":3,"file":"index.vue.js","sources":["../../../src/components/FormContainer/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 弹窗/抽屉二合一表单容器:消化 CRUD 页「saving ref + 手写 footer + n-modal 包装」样板。\n// 形态默认跟随全局偏好(app.formStyle,外观设置里切,默认弹窗),variant 按实例覆盖。\n// 抽屉形态按壳层档位走:宽 / 中档 = 右侧抽屉,窄档(< 600)= 底部抽屉,高 92%,\n// 底栏两个按钮等分整行。弹窗形态不分档,仍是居中卡片。\n// onConfirm 协议:返回 Promise → 确认钮自动 loading;reject 或 resolve(false) → 不关闭\n// (n-form 校验放 onConfirm 首行,失败 reject 即挡住关闭);其余情况自动关。\nimport { computed, onDeactivated, ref } from 'vue'\nimport { NModal, NDrawer, NDrawerContent, NButton, NSpace } from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { useWindowSize } from '@vueuse/core'\nimport { useCompactScreen } from '#/composables/useCompactScreen'\nimport { useShellBreakpoint } from '#/composables/useShellBreakpoint'\nimport { useAppStore, type FormStyle } from '#/stores/app'\n\nconst show = defineModel<boolean>('show', { default: false })\n\nconst props = defineProps<{\n title: string\n /** 不传 → 跟随 app.formStyle 全局偏好 */\n variant?: FormStyle\n /** modal=卡片宽 / drawer=抽屉宽,实际生效 min(width, 90vw) */\n width?: number\n /** 见顶部协议注释;不传则确认钮直接关闭 */\n onConfirm?: () => unknown | Promise<unknown>\n confirmText?: string\n cancelText?: string\n /** 默认 false:表单防误触丢输入 */\n maskClosable?: boolean\n /**\n * 铺满视口。默认 `false` —— 不给 `'auto'` 当默认值是刻意的:没传这个 prop 的既有页面\n * 不该因为换了台平板就换一种形态。字段多的表单显式传 `true`,想跟着屏幕走再传 `'auto'`\n * (紧凑屏判定见 composables/useCompactScreen)。\n */\n fullscreen?: boolean | 'auto'\n}>()\n\nconst { t } = useI18n()\nconst app = useAppStore()\n\nconst mode = computed(() => props.variant ?? app.formStyle)\nconst loading = ref(false)\n// 窄屏不溢出:同 SettingsDrawer 惯例,宽度取 min(width, 90vw)。\nconst { width: winW } = useWindowSize()\nconst compact = useCompactScreen()\nconst fullscreen = computed(() =>\n props.fullscreen === 'auto' ? compact.value : props.fullscreen === true,\n)\n// 窄档抽屉改底部抽屉。全屏表单(fullscreen)本就铺满视口,不叠底部抽屉形态。\nconst { bp } = useShellBreakpoint()\nconst sheet = computed(() => mode.value === 'drawer' && bp.value === 'narrow' && !fullscreen.value)\nconst btnSize = computed(() => (sheet.value ? 'large' : 'medium'))\nconst w = computed(() =>\n fullscreen.value ? winW.value : Math.min(props.width ?? 560, Math.round(winW.value * 0.9)),\n)\n// 全屏时不再钉宽度,交给 .smart-form--fullscreen 那条全局样式铺满。\nconst modalStyle = computed(() => (fullscreen.value ? undefined : { width: `${w.value}px` }))\n// 提交中禁止任何途径关闭(esc/遮罩/关闭钮/取消钮),防提交中途关闭导致状态错乱。\nconst canClose = computed(() => !loading.value)\nconst maskClose = computed(() => (props.maskClosable ?? false) && !loading.value)\n\nasync function handleConfirm() {\n if (!props.onConfirm) {\n show.value = false\n return\n }\n loading.value = true\n try {\n if ((await props.onConfirm()) !== false) show.value = false\n } catch {\n // 静默:n-form 校验失败已有内联提示;API 错误 toast 由业务 onConfirm 内负责。\n } finally {\n loading.value = false\n }\n}\n\n// keep-alive 页签切走时,teleport 到 body 的弹层会残留可见 → 强制收起。\nonDeactivated(() => {\n show.value = false\n})\n</script>\n\n<template>\n <n-modal\n v-if=\"mode === 'modal'\"\n v-model:show=\"show\"\n preset=\"card\"\n :title=\"title\"\n :closable=\"canClose\"\n :close-on-esc=\"canClose\"\n :mask-closable=\"maskClose\"\n :class=\"{ 'smart-form--fullscreen': fullscreen }\"\n :style=\"modalStyle\"\n >\n <template v-if=\"$slots['header-extra']\" #header-extra>\n <slot name=\"header-extra\" />\n </template>\n <slot />\n <template #footer>\n <slot name=\"footer\">\n <n-space justify=\"end\">\n <n-button secondary :disabled=\"loading\" @click=\"show = false\">\n {{ cancelText ?? t('common.cancel') }}\n </n-button>\n <n-button type=\"primary\" :loading=\"loading\" @click=\"handleConfirm\">\n {{ confirmText ?? t('common.confirm') }}\n </n-button>\n </n-space>\n </slot>\n </template>\n </n-modal>\n\n <n-drawer\n v-else\n v-model:show=\"show\"\n :placement=\"sheet ? 'bottom' : 'right'\"\n :width=\"sheet ? undefined : w\"\n :height=\"sheet ? '92%' : undefined\"\n :class=\"{ 'smart-form-sheet': sheet }\"\n :close-on-esc=\"canClose\"\n :mask-closable=\"maskClose\"\n >\n <n-drawer-content :title=\"title\" :closable=\"canClose\" :native-scrollbar=\"false\">\n <!-- n-drawer-content 无 header-extra 原生槽:业务传了才自拼 #header(标题 + 附加区并排) -->\n <template v-if=\"$slots['header-extra']\" #header>\n <span>{{ title }}</span>\n <slot name=\"header-extra\" />\n </template>\n <slot />\n <template #footer>\n <slot name=\"footer\">\n <!-- 窄档底部抽屉:两个按钮等分整行、大号 -->\n <div v-if=\"sheet\" class=\"smart-form-foot\">\n <n-button secondary :size=\"btnSize\" :disabled=\"loading\" @click=\"show = false\">\n {{ cancelText ?? t('common.cancel') }}\n </n-button>\n <n-button type=\"primary\" :size=\"btnSize\" :loading=\"loading\" @click=\"handleConfirm\">\n {{ confirmText ?? t('common.confirm') }}\n </n-button>\n </div>\n <n-space v-else justify=\"end\">\n <n-button secondary :disabled=\"loading\" @click=\"show = false\">\n {{ cancelText ?? t('common.cancel') }}\n </n-button>\n <n-button type=\"primary\" :loading=\"loading\" @click=\"handleConfirm\">\n {{ confirmText ?? t('common.confirm') }}\n </n-button>\n </n-space>\n </slot>\n </template>\n </n-drawer-content>\n </n-drawer>\n</template>\n\n<!-- 不能加 scoped:n-modal / n-drawer 的内容 teleport 到 body,scoped 编译出的 data-v 属性到不了那棵子树,\n 写了等于没写(这正是\"全屏样式不生效\"最常见的原因)。故用带前缀的类名自行隔离。 -->\n<style>\n.smart-form--fullscreen {\n width: 100vw;\n max-width: 100vw;\n height: 100dvh;\n max-height: 100dvh;\n display: flex;\n flex-direction: column;\n border-radius: 0;\n}\n/* 头/脚按内容高,正文吃满剩余并自己滚 —— 否则长表单会把整张卡撑出视口,底部按钮点不到。 */\n.smart-form--fullscreen > .n-card__content {\n flex: 1;\n min-height: 0;\n overflow: auto;\n}\n/* 窄档底部抽屉:圆角只在上沿;按钮等分整行。\n 高度用 92% 而不是随内容:表单长短不一,固定高度让不同表单的抽屉一致,正文自己滚。 */\n.n-drawer.smart-form-sheet {\n border-radius: var(--radius-xl) var(--radius-xl) 0 0;\n}\n.smart-form-foot {\n display: flex;\n gap: 10px;\n width: 100%;\n}\n.smart-form-foot > .n-button {\n flex: 1;\n}\n</style>\n"],"names":["show","_useModel","__props","props","t","useI18n","app","useAppStore","mode","computed","loading","ref","winW","useWindowSize","compact","useCompactScreen","fullscreen","bp","useShellBreakpoint","sheet","btnSize","w","modalStyle","canClose","maskClose","handleConfirm","onDeactivated","_createBlock","_unref","NModal","$event","_renderSlot","_ctx","_createVNode","NSpace","NButton","_createTextVNode","_toDisplayString","$slots","NDrawer","NDrawerContent","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import o from "./index2.vue.js";
2
2
  /* empty css */
3
3
  import r from "../../_virtual/_plugin-vue_export-helper.js";
4
- const a = /* @__PURE__ */ r(o, [["__scopeId", "data-v-20fd3250"]]);
4
+ const a = /* @__PURE__ */ r(o, [["__scopeId", "data-v-8de37228"]]);
5
5
  export {
6
6
  a as default
7
7
  };
@@ -1,13 +1,14 @@
1
- import { defineComponent as ze, useModel as Re, ref as h, shallowRef as ae, computed as T, watch as Se, h as N, openBlock as v, createBlock as y, unref as l, withCtx as o, createVNode as i, withDirectives as H, createElementVNode as c, createTextVNode as p, toDisplayString as n, vShow as B, createCommentVNode as w, createElementBlock as j, Fragment as W, renderList as re, mergeModels as oe } from "vue";
2
- import { useMessage as Te, NInput as Fe, NTooltip as A, NTag as G, NModal as Ue, NSteps as $e, NStep as V, NSpace as S, NButton as k, NUpload as De, NUploadDragger as Me, NText as U, NAlert as ie, NSelect as Oe, NSwitch as He, NDataTable as Be, NRadioGroup as je, NRadio as Ve } from "naive-ui";
3
- import { useI18n as Ke } from "vue-i18n";
1
+ import { defineComponent as Se, useModel as ze, ref as h, shallowRef as ae, computed as T, watch as Re, h as N, openBlock as v, createBlock as y, unref as l, withCtx as o, createVNode as i, withDirectives as H, createElementVNode as c, createTextVNode as p, toDisplayString as n, vShow as B, createCommentVNode as w, createElementBlock as j, Fragment as W, renderList as re, mergeModels as oe } from "vue";
2
+ import { useMessage as Te, NInput as Fe, NTooltip as A, NTag as G, NModal as Ue, NSteps as $e, NStep as V, NSpace as R, NButton as k, NUpload as Me, NUploadDragger as Oe, NText as U, NAlert as ie, NSelect as De, NSwitch as He, NRadioGroup as Be, NRadio as je } from "naive-ui";
3
+ import { useI18n as Ve } from "vue-i18n";
4
+ import { SmartTable as Ke } from "smart-naive-table";
4
5
  import K from "../AppIcon.vue.js";
5
6
  import Le from "../DictSelect/index.vue.js";
6
7
  import { translateError as C } from "../../utils/error.js";
7
8
  import { triggerBlobDownload as ne } from "../../utils/download.js";
8
9
  import { isDuplicateOnly as qe, isHardError as Ie, hardErrorsOf as Pe } from "../../utils/importDup.js";
9
10
  import { DuplicateStrategy as _ } from "../../types/api.js";
10
- const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge = { class: "import-pane" }, Je = { class: "import-mapping" }, Qe = { class: "import-mapping-head" }, Xe = ["title"], Ye = { class: "import-pane" }, Ze = { class: "import-strategy" }, el = { class: "import-pane" }, pl = /* @__PURE__ */ ze({
11
+ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge = { class: "import-pane" }, Je = { class: "import-mapping" }, Qe = { class: "import-mapping-head" }, Xe = ["title"], Ye = { class: "import-pane" }, Ze = { class: "import-strategy" }, el = { class: "import-pane" }, dl = /* @__PURE__ */ Se({
11
12
  __name: "index",
12
13
  props: /* @__PURE__ */ oe({
13
14
  api: {},
@@ -21,7 +22,7 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
21
22
  }),
22
23
  emits: /* @__PURE__ */ oe(["done"], ["update:show"]),
23
24
  setup(J, { emit: se }) {
24
- const $ = Re(J, "show"), g = J, ue = se, { t: a } = Ke(), x = Te(), u = h(1), s = h(!1), E = h(null), D = h([]), L = ae([]), z = h({}), R = ae([]), f = h([]), M = h([]), F = h(!1), b = h(_.Skip), d = h(null), pe = {
25
+ const $ = ze(J, "show"), g = J, ue = se, { t: a } = Ve(), x = Te(), u = h(1), s = h(!1), E = h(null), M = h([]), L = ae([]), S = h({}), z = ae([]), f = h([]), O = h([]), F = h(!1), b = h(_.Skip), d = h(null), pe = {
25
26
  [_.Skip]: () => a("import.strategySkip"),
26
27
  [_.Overwrite]: () => a("import.strategyOverwrite"),
27
28
  [_.Error]: () => a("import.strategyError")
@@ -36,17 +37,17 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
36
37
  );
37
38
  function ce() {
38
39
  var e;
39
- u.value = 1, s.value = !1, E.value = null, D.value = [], L.value = [], z.value = {}, R.value = [], f.value = [], M.value = [], F.value = !1, b.value = q.value.some((t) => t.value === _.Skip) ? _.Skip : ((e = q.value[0]) == null ? void 0 : e.value) ?? _.Skip, d.value = null;
40
+ u.value = 1, s.value = !1, E.value = null, M.value = [], L.value = [], S.value = {}, z.value = [], f.value = [], O.value = [], F.value = !1, b.value = q.value.some((t) => t.value === _.Skip) ? _.Skip : ((e = q.value[0]) == null ? void 0 : e.value) ?? _.Skip, d.value = null;
40
41
  }
41
- Se($, (e) => {
42
+ Re($, (e) => {
42
43
  e && ce();
43
44
  });
44
45
  function Y(e) {
45
- L.value = [...e.headers], z.value = { ...e.mapping }, R.value = e.columns, f.value = e.rows.map((t) => ({
46
+ L.value = [...e.headers], S.value = { ...e.mapping }, z.value = e.columns, f.value = e.rows.map((t) => ({
46
47
  index: t.index,
47
48
  cells: { ...t.cells },
48
49
  errors: [...t.errors]
49
- })), M.value = e.columnErrors;
50
+ })), O.value = e.columnErrors;
50
51
  }
51
52
  async function ve() {
52
53
  s.value = !0;
@@ -61,12 +62,12 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
61
62
  }
62
63
  function me(e) {
63
64
  var r;
64
- D.value = e.slice(-1);
65
+ M.value = e.slice(-1);
65
66
  const t = (r = e[e.length - 1]) == null ? void 0 : r.file;
66
67
  E.value = t instanceof File ? t : null;
67
68
  }
68
69
  function fe() {
69
- D.value = [], E.value = null;
70
+ M.value = [], E.value = null;
70
71
  }
71
72
  async function ye() {
72
73
  if (!E.value) {
@@ -78,7 +79,7 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
78
79
  const e = await g.api.preview(E.value);
79
80
  Y(e);
80
81
  for (const t of e.headers)
81
- t in z.value || (z.value[t] = "");
82
+ t in S.value || (S.value[t] = "");
82
83
  u.value = 2;
83
84
  } catch (e) {
84
85
  x.error(C(e));
@@ -89,7 +90,7 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
89
90
  async function ge() {
90
91
  if (!E.value) return;
91
92
  const e = {};
92
- for (const [t, r] of Object.entries(z.value))
93
+ for (const [t, r] of Object.entries(S.value))
93
94
  r && (e[t] = r);
94
95
  s.value = !0;
95
96
  try {
@@ -103,7 +104,7 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
103
104
  }
104
105
  const he = T(() => [
105
106
  { label: a("import.unmap"), value: "" },
106
- ...R.value.map((e) => ({
107
+ ...z.value.map((e) => ({
107
108
  label: e.required ? `${e.title} *` : e.title,
108
109
  value: e.key
109
110
  }))
@@ -126,14 +127,14 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
126
127
  render: (t) => t.index
127
128
  }
128
129
  ];
129
- for (const t of R.value)
130
+ for (const t of z.value)
130
131
  e.push({
131
132
  title: () => t.required ? `${t.title} *` : t.title,
132
133
  key: t.key,
133
134
  minWidth: 120,
134
135
  ellipsis: { tooltip: !1 },
135
136
  render: (r) => {
136
- const m = we(r, t.key), O = m !== void 0 && !de(m), le = r.cells[t.key] ?? null, Ee = t.dictTypeCode ? N(Le, {
137
+ const m = we(r, t.key), D = m !== void 0 && !de(m), le = r.cells[t.key] ?? null, Ee = t.dictTypeCode ? N(Le, {
137
138
  typeCode: t.dictTypeCode,
138
139
  value: le,
139
140
  clearable: !t.required,
@@ -143,17 +144,17 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
143
144
  // 跟随反而更整齐 —— 所以只在向导关掉,不动共用的 DictSelect。
144
145
  consistentMenuWidth: !1,
145
146
  style: { width: "100%" },
146
- status: m && !O ? "error" : void 0,
147
+ status: m && !D ? "error" : void 0,
147
148
  "onUpdate:value": (P) => Z(r, t.key, P)
148
149
  }) : N(Fe, {
149
150
  value: le ?? "",
150
151
  size: "small",
151
- status: m && !O ? "error" : void 0,
152
+ status: m && !D ? "error" : void 0,
152
153
  onUpdateValue: (P) => Z(r, t.key, P)
153
154
  }), te = N(
154
155
  "div",
155
156
  {
156
- class: m ? O ? "import-cell import-cell--dup" : "import-cell import-cell--error" : "import-cell"
157
+ class: m ? D ? "import-cell import-cell--dup" : "import-cell import-cell--error" : "import-cell"
157
158
  },
158
159
  [Ee]
159
160
  );
@@ -162,7 +163,7 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
162
163
  { trigger: "hover" },
163
164
  {
164
165
  trigger: () => te,
165
- default: () => O ? a(`import.dupHint.${b.value}`) : C(m.code)
166
+ default: () => D ? a(`import.dupHint.${b.value}`) : C(m.code)
166
167
  }
167
168
  ) : te;
168
169
  }
@@ -211,7 +212,7 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
211
212
  index: t.index,
212
213
  cells: { ...t.cells },
213
214
  errors: [...t.errors]
214
- })), R.value = e.columns.length ? e.columns : R.value, x.success(a("import.revalidated", { errors: Q.value, total: e.total }));
215
+ })), z.value = e.columns.length ? e.columns : z.value, x.success(a("import.revalidated", { errors: Q.value, total: e.total }));
215
216
  } catch (e) {
216
217
  x.error(C(e));
217
218
  } finally {
@@ -266,7 +267,7 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
266
267
  "close-on-esc": !s.value
267
268
  }, {
268
269
  footer: o(() => [
269
- i(l(S), { justify: "end" }, {
270
+ i(l(R), { justify: "end" }, {
270
271
  default: o(() => [
271
272
  i(l(k), {
272
273
  disabled: s.value,
@@ -359,7 +360,7 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
359
360
  _: 1
360
361
  }, 8, ["current"]),
361
362
  H(c("div", We, [
362
- i(l(S), {
363
+ i(l(R), {
363
364
  vertical: "",
364
365
  size: 12
365
366
  }, {
@@ -380,8 +381,8 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
380
381
  ]),
381
382
  _: 1
382
383
  }, 8, ["loading"]),
383
- i(l(De), {
384
- "file-list": D.value,
384
+ i(l(Me), {
385
+ "file-list": M.value,
385
386
  max: 1,
386
387
  accept: ".xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
387
388
  "default-upload": !1,
@@ -389,7 +390,7 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
389
390
  onRemove: fe
390
391
  }, {
391
392
  default: o(() => [
392
- i(l(Me), null, {
393
+ i(l(Oe), null, {
393
394
  default: o(() => [
394
395
  c("div", Ae, [
395
396
  i(K, {
@@ -425,13 +426,13 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
425
426
  [B, u.value === 1]
426
427
  ]),
427
428
  H(c("div", Ge, [
428
- M.value.length ? (v(), y(l(ie), {
429
+ O.value.length ? (v(), y(l(ie), {
429
430
  key: 0,
430
431
  type: "warning",
431
432
  style: { "margin-bottom": "12px" }
432
433
  }, {
433
434
  default: o(() => [
434
- p(n(M.value.map((r) => `${r.columnKey}: ${l(C)(r.code)}`).join("; ")), 1)
435
+ p(n(O.value.map((r) => `${r.columnKey}: ${l(C)(r.code)}`).join("; ")), 1)
435
436
  ]),
436
437
  _: 1
437
438
  })) : w("", !0),
@@ -457,9 +458,9 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
457
458
  class: "import-mapping-header",
458
459
  title: r
459
460
  }, n(r), 9, Xe),
460
- i(l(Oe), {
461
- value: z.value[r],
462
- "onUpdate:value": (m) => z.value[r] = m,
461
+ i(l(De), {
462
+ value: S.value[r],
463
+ "onUpdate:value": (m) => S.value[r] = m,
463
464
  options: he.value,
464
465
  "consistent-menu-width": !1,
465
466
  size: "small"
@@ -470,14 +471,14 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
470
471
  [B, u.value === 2]
471
472
  ]),
472
473
  H(c("div", Ye, [
473
- i(l(S), {
474
+ i(l(R), {
474
475
  justify: "space-between",
475
476
  align: "center",
476
477
  style: { "margin-bottom": "12px" },
477
478
  wrap: ""
478
479
  }, {
479
480
  default: o(() => [
480
- i(l(S), { align: "center" }, {
481
+ i(l(R), { align: "center" }, {
481
482
  default: o(() => [
482
483
  i(l(U), null, {
483
484
  default: o(() => [
@@ -504,7 +505,7 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
504
505
  ]),
505
506
  _: 1
506
507
  }),
507
- i(l(S), null, {
508
+ i(l(R), null, {
508
509
  default: o(() => [
509
510
  i(l(k), {
510
511
  size: "small",
@@ -528,13 +529,15 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
528
529
  ]),
529
530
  _: 1
530
531
  }),
531
- i(l(Be), {
532
+ i(l(Ke), {
532
533
  size: "small",
533
534
  columns: _e.value,
534
535
  data: ke.value,
535
536
  "row-key": (r) => r.index,
537
+ toolbar: !1,
536
538
  "max-height": 420,
537
- "scroll-x": Math.max(800, R.value.length * 140 + 220)
539
+ "scroll-x": Math.max(800, z.value.length * 140 + 220),
540
+ "storage-key": "import-preview"
538
541
  }, null, 8, ["columns", "data", "row-key", "scroll-x"]),
539
542
  c("div", Ze, [
540
543
  i(l(U), {
@@ -546,15 +549,15 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
546
549
  ]),
547
550
  _: 1
548
551
  }),
549
- i(l(je), {
552
+ i(l(Be), {
550
553
  value: b.value,
551
554
  "onUpdate:value": t[1] || (t[1] = (r) => b.value = r),
552
555
  name: "dup-strategy"
553
556
  }, {
554
557
  default: o(() => [
555
- i(l(S), null, {
558
+ i(l(R), null, {
556
559
  default: o(() => [
557
- (v(!0), j(W, null, re(q.value, (r) => (v(), y(l(Ve), {
560
+ (v(!0), j(W, null, re(q.value, (r) => (v(), y(l(je), {
558
561
  key: r.value,
559
562
  value: r.value
560
563
  }, {
@@ -588,7 +591,7 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
588
591
  ]),
589
592
  _: 1
590
593
  }, 8, ["type", "title"])) : w("", !0),
591
- i(l(S), { style: { "margin-top": "16px" } }, {
594
+ i(l(R), { style: { "margin-top": "16px" } }, {
592
595
  default: o(() => [
593
596
  d.value && d.value.failed > 0 ? (v(), y(l(k), {
594
597
  key: 0,
@@ -629,6 +632,6 @@ const We = { class: "import-pane" }, Ae = { class: "import-upload-icon" }, Ge =
629
632
  }
630
633
  });
631
634
  export {
632
- pl as default
635
+ dl as default
633
636
  };
634
637
  //# sourceMappingURL=index2.vue.js.map