@sugarat/easypicker2-client 2.7.3 → 2.8.0

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 (391) hide show
  1. package/dist/assets/aria-legacy-B70JmEZA.js.map +1 -1
  2. package/dist/assets/aria-nkjrUMQ-.js.map +1 -1
  3. package/dist/assets/config-CnEgj70a.css +1 -0
  4. package/dist/assets/config-DR4Jo6x0.js +2 -0
  5. package/dist/assets/config-DR4Jo6x0.js.map +1 -0
  6. package/dist/assets/config-legacy-Frhed9Ou.js +2 -0
  7. package/dist/assets/config-legacy-Frhed9Ou.js.map +1 -0
  8. package/dist/assets/{data-analysis-Bnq_VWU8.js → data-analysis-B8jQ_UrC.js} +2 -2
  9. package/dist/assets/data-analysis-B8jQ_UrC.js.map +1 -0
  10. package/dist/assets/{data-analysis-legacy-_KcR253K.js → data-analysis-legacy-DjCCKm5W.js} +2 -2
  11. package/dist/assets/data-analysis-legacy-DjCCKm5W.js.map +1 -0
  12. package/dist/assets/{data-board-L3s5ouKd.js → data-board-BGj6fORD.js} +2 -2
  13. package/dist/assets/data-board-BGj6fORD.js.map +1 -0
  14. package/dist/assets/{data-board-legacy-BFxWeFnQ.js → data-board-legacy-D0aBtKuE.js} +2 -2
  15. package/dist/assets/data-board-legacy-D0aBtKuE.js.map +1 -0
  16. package/dist/assets/delete-filled-B3KAHg4C.js +2 -0
  17. package/dist/assets/delete-filled-B3KAHg4C.js.map +1 -0
  18. package/dist/assets/delete-filled-legacy-IwQ4U_-h.js +2 -0
  19. package/dist/assets/delete-filled-legacy-IwQ4U_-h.js.map +1 -0
  20. package/dist/assets/el-date-picker-2VHUEHRN.js +2 -0
  21. package/dist/assets/el-date-picker-2VHUEHRN.js.map +1 -0
  22. package/dist/assets/el-date-picker-legacy-6LjuTLvj.js +2 -0
  23. package/dist/assets/el-date-picker-legacy-6LjuTLvj.js.map +1 -0
  24. package/dist/assets/el-dropdown-item-C_iGHfk5.js +2 -0
  25. package/dist/assets/el-dropdown-item-C_iGHfk5.js.map +1 -0
  26. package/dist/assets/el-dropdown-item-legacy-Dd1a85un.js +2 -0
  27. package/dist/assets/el-dropdown-item-legacy-Dd1a85un.js.map +1 -0
  28. package/dist/assets/el-empty-C2yupmrg.css +1 -0
  29. package/dist/assets/el-empty-DM1AJWOT.js +2 -0
  30. package/dist/assets/el-empty-DM1AJWOT.js.map +1 -0
  31. package/dist/assets/el-empty-legacy-ZCYPIt_S.js +2 -0
  32. package/dist/assets/el-empty-legacy-ZCYPIt_S.js.map +1 -0
  33. package/dist/assets/el-input-number-CU7OpiYS.css +1 -0
  34. package/dist/assets/el-input-number-CgyrHNcj.js +2 -0
  35. package/dist/assets/el-input-number-CgyrHNcj.js.map +1 -0
  36. package/dist/assets/el-input-number-legacy-Bh6hK4h_.js +2 -0
  37. package/dist/assets/el-input-number-legacy-Bh6hK4h_.js.map +1 -0
  38. package/dist/assets/{el-loading-DNzUD85e.js → el-loading-DqRoOOxo.js} +2 -2
  39. package/dist/assets/el-loading-DqRoOOxo.js.map +1 -0
  40. package/dist/assets/el-loading-legacy-CFNL_MoE.js +2 -0
  41. package/dist/assets/el-loading-legacy-CFNL_MoE.js.map +1 -0
  42. package/dist/assets/el-pagination-DVClk9XJ.js +2 -0
  43. package/dist/assets/el-pagination-DVClk9XJ.js.map +1 -0
  44. package/dist/assets/el-pagination-legacy-DwnhLxcB.js +2 -0
  45. package/dist/assets/el-pagination-legacy-DwnhLxcB.js.map +1 -0
  46. package/dist/assets/el-scrollbar-B_rEcSsQ.js +2 -0
  47. package/dist/assets/el-scrollbar-B_rEcSsQ.js.map +1 -0
  48. package/dist/assets/el-scrollbar-DFu7lMno.css +1 -0
  49. package/dist/assets/el-scrollbar-legacy-DVIFmrwk.js +2 -0
  50. package/dist/assets/el-scrollbar-legacy-DVIFmrwk.js.map +1 -0
  51. package/dist/assets/el-select-C5BnfITI.js +2 -0
  52. package/dist/assets/el-select-C5BnfITI.js.map +1 -0
  53. package/dist/assets/el-select-Dm4tLYz8.css +1 -0
  54. package/dist/assets/el-select-legacy-yKcmdaqh.js +2 -0
  55. package/dist/assets/el-select-legacy-yKcmdaqh.js.map +1 -0
  56. package/dist/assets/el-switch-BUjvki0a.js +2 -0
  57. package/dist/assets/el-switch-BUjvki0a.js.map +1 -0
  58. package/dist/assets/el-switch-legacy-CeDo4e_6.js +2 -0
  59. package/dist/assets/el-switch-legacy-CeDo4e_6.js.map +1 -0
  60. package/dist/assets/el-tab-pane-DKrBN9bA.js +2 -0
  61. package/dist/assets/el-tab-pane-DKrBN9bA.js.map +1 -0
  62. package/dist/assets/{el-tab-pane-legacy-DMdhUCHY.js → el-tab-pane-legacy-Ct9rYze8.js} +2 -2
  63. package/dist/assets/el-tab-pane-legacy-Ct9rYze8.js.map +1 -0
  64. package/dist/assets/{el-table-column-tkbtgrcD.js → el-table-column-cVnV9Qdi.js} +3 -3
  65. package/dist/assets/el-table-column-cVnV9Qdi.js.map +1 -0
  66. package/dist/assets/el-table-column-legacy-D2UbUqx0.js +24 -0
  67. package/dist/assets/el-table-column-legacy-D2UbUqx0.js.map +1 -0
  68. package/dist/assets/el-tag-Bgje3_SF.css +1 -0
  69. package/dist/assets/el-tag-CR8VXqUN.js +2 -0
  70. package/dist/assets/el-tag-CR8VXqUN.js.map +1 -0
  71. package/dist/assets/el-tag-legacy-diNMtlkE.js +2 -0
  72. package/dist/assets/el-tag-legacy-diNMtlkE.js.map +1 -0
  73. package/dist/assets/el-upload-B2Zxm6X5.css +1 -0
  74. package/dist/assets/el-upload-DRWHzvzW.js +2 -0
  75. package/dist/assets/el-upload-DRWHzvzW.js.map +1 -0
  76. package/dist/assets/el-upload-legacy-C7Y6h5AK.js +2 -0
  77. package/dist/assets/el-upload-legacy-C7Y6h5AK.js.map +1 -0
  78. package/dist/assets/index-8vfFTV-B.css +1 -0
  79. package/dist/assets/index-B2PHCM63.js +23 -0
  80. package/dist/assets/index-B2PHCM63.js.map +1 -0
  81. package/dist/assets/{index-C4H-Ptjt.css → index-BDkChTag.css} +1 -1
  82. package/dist/assets/index-BDsN2eKB.js +2 -0
  83. package/dist/assets/index-BDsN2eKB.js.map +1 -0
  84. package/dist/assets/index-BIKx9Xnn.js +2 -0
  85. package/dist/assets/index-BIKx9Xnn.js.map +1 -0
  86. package/dist/assets/index-BOFlLnYl.js +2 -0
  87. package/dist/assets/index-BOFlLnYl.js.map +1 -0
  88. package/dist/assets/index-BSMNPGJ5.css +1 -0
  89. package/dist/assets/index-BVp20vyj.css +1 -0
  90. package/dist/assets/index-BWExpeba.js +2 -0
  91. package/dist/assets/index-BWExpeba.js.map +1 -0
  92. package/dist/assets/index-B_7cUQcW.js +2 -0
  93. package/dist/assets/index-B_7cUQcW.js.map +1 -0
  94. package/dist/assets/index-BcJxc1ki.css +1 -0
  95. package/dist/assets/index-BgihxBmj.css +1 -0
  96. package/dist/assets/index-BjSgvXxj.css +1 -0
  97. package/dist/assets/index-BrOLxzFM.js.map +1 -1
  98. package/dist/assets/index-Bx68sw-c.js +2 -0
  99. package/dist/assets/index-Bx68sw-c.js.map +1 -0
  100. package/dist/assets/index-BxcfgZqH.js +2 -0
  101. package/dist/assets/index-BxcfgZqH.js.map +1 -0
  102. package/dist/assets/{index-ehQnwCE_.css → index-Bxvzu7zF.css} +1 -1
  103. package/dist/assets/index-BzQdnJY9.js +2 -0
  104. package/dist/assets/index-BzQdnJY9.js.map +1 -0
  105. package/dist/assets/index-CFpIdG49.css +1 -0
  106. package/dist/assets/index-CQjXznXy.js +2 -0
  107. package/dist/assets/index-CQjXznXy.js.map +1 -0
  108. package/dist/assets/index-CQud0ONT.css +1 -0
  109. package/dist/assets/index-CkyNID7q.css +1 -0
  110. package/dist/assets/index-CsfbnGni.css +1 -0
  111. package/dist/assets/index-CuGN8YoJ.js +2 -0
  112. package/dist/assets/index-CuGN8YoJ.js.map +1 -0
  113. package/dist/assets/index-D94P-51I.css +1 -0
  114. package/dist/assets/index-DLuR61Hw.css +1 -0
  115. package/dist/assets/index-DRKBIvKP.js +2 -0
  116. package/dist/assets/index-DRKBIvKP.js.map +1 -0
  117. package/dist/assets/index-DTRiT4Ia.js +2 -0
  118. package/dist/assets/index-DTRiT4Ia.js.map +1 -0
  119. package/dist/assets/index-DVSUcRaY.js +2 -0
  120. package/dist/assets/index-DVSUcRaY.js.map +1 -0
  121. package/dist/assets/index-DWOXO9QK.js +2 -0
  122. package/dist/assets/index-DWOXO9QK.js.map +1 -0
  123. package/dist/assets/index-DWi4klmy.js +2 -0
  124. package/dist/assets/index-DWi4klmy.js.map +1 -0
  125. package/dist/assets/index-DcUtl6Nq.css +1 -0
  126. package/dist/assets/index-Diw0ScGB.js +2 -0
  127. package/dist/assets/index-Diw0ScGB.js.map +1 -0
  128. package/dist/assets/index-Dk60yOI9.js +2 -0
  129. package/dist/assets/index-Dk60yOI9.js.map +1 -0
  130. package/dist/assets/index-FISBGs_l.css +1 -0
  131. package/dist/assets/index-LKJh-8oZ.css +1 -0
  132. package/dist/assets/index-MRZ7DYIX.js +2 -0
  133. package/dist/assets/index-MRZ7DYIX.js.map +1 -0
  134. package/dist/assets/index-Q8b92C8V.css +1 -0
  135. package/dist/assets/index-X0ZxbeZs.js +2 -0
  136. package/dist/assets/index-X0ZxbeZs.js.map +1 -0
  137. package/dist/assets/index-fz1mWSN_.js +2 -0
  138. package/dist/assets/index-fz1mWSN_.js.map +1 -0
  139. package/dist/assets/index-legacy-B5_Eg4NO.js +2 -0
  140. package/dist/assets/index-legacy-B5_Eg4NO.js.map +1 -0
  141. package/dist/assets/index-legacy-B71iq4Jg.js +2 -0
  142. package/dist/assets/index-legacy-B71iq4Jg.js.map +1 -0
  143. package/dist/assets/index-legacy-B7MgTgVj.js +2 -0
  144. package/dist/assets/index-legacy-B7MgTgVj.js.map +1 -0
  145. package/dist/assets/index-legacy-BLCMV_4m.js +2 -0
  146. package/dist/assets/index-legacy-BLCMV_4m.js.map +1 -0
  147. package/dist/assets/index-legacy-BLu3Mu8j.js +2 -0
  148. package/dist/assets/index-legacy-BLu3Mu8j.js.map +1 -0
  149. package/dist/assets/index-legacy-BSmhgZ-n.js +2 -0
  150. package/dist/assets/index-legacy-BSmhgZ-n.js.map +1 -0
  151. package/dist/assets/index-legacy-BTvagK_v.js +2 -0
  152. package/dist/assets/index-legacy-BTvagK_v.js.map +1 -0
  153. package/dist/assets/index-legacy-C-gHf8SN.js.map +1 -1
  154. package/dist/assets/index-legacy-C2bwTRoT.js +2 -0
  155. package/dist/assets/index-legacy-C2bwTRoT.js.map +1 -0
  156. package/dist/assets/index-legacy-CM7bG2hM.js +2 -0
  157. package/dist/assets/index-legacy-CM7bG2hM.js.map +1 -0
  158. package/dist/assets/index-legacy-CRa6h-UF.js +2 -0
  159. package/dist/assets/index-legacy-CRa6h-UF.js.map +1 -0
  160. package/dist/assets/index-legacy-CkcZHDIb.js +54 -0
  161. package/dist/assets/index-legacy-CkcZHDIb.js.map +1 -0
  162. package/dist/assets/index-legacy-Cp4ut576.js +2 -0
  163. package/dist/assets/index-legacy-Cp4ut576.js.map +1 -0
  164. package/dist/assets/index-legacy-CvW_2XYj.js +2 -0
  165. package/dist/assets/index-legacy-CvW_2XYj.js.map +1 -0
  166. package/dist/assets/index-legacy-CwUt8UiU.js +2 -0
  167. package/dist/assets/index-legacy-CwUt8UiU.js.map +1 -0
  168. package/dist/assets/index-legacy-CzoivdRy.js +2 -0
  169. package/dist/assets/index-legacy-CzoivdRy.js.map +1 -0
  170. package/dist/assets/index-legacy-D-mrc8ns.js +2 -0
  171. package/dist/assets/index-legacy-D-mrc8ns.js.map +1 -0
  172. package/dist/assets/index-legacy-D2hV5N51.js +2 -0
  173. package/dist/assets/index-legacy-D2hV5N51.js.map +1 -0
  174. package/dist/assets/index-legacy-D6Zqa9lw.js +2 -0
  175. package/dist/assets/index-legacy-D6Zqa9lw.js.map +1 -0
  176. package/dist/assets/index-legacy-DrA0B2e4.js +2 -0
  177. package/dist/assets/index-legacy-DrA0B2e4.js.map +1 -0
  178. package/dist/assets/index-legacy-DysxAWeo.js +2 -0
  179. package/dist/assets/index-legacy-DysxAWeo.js.map +1 -0
  180. package/dist/assets/index-legacy-TKeSN56S.js +16 -0
  181. package/dist/assets/index-legacy-TKeSN56S.js.map +1 -0
  182. package/dist/assets/index-legacy-erTEdV9o.js +2 -0
  183. package/dist/assets/index-legacy-erTEdV9o.js.map +1 -0
  184. package/dist/assets/index-legacy-pHu03Ans.js +2 -0
  185. package/dist/assets/index-legacy-pHu03Ans.js.map +1 -0
  186. package/dist/assets/index-legacy-w1mXHpIQ.js +2 -0
  187. package/dist/assets/index-legacy-w1mXHpIQ.js.map +1 -0
  188. package/dist/assets/index-mtfctTgx.css +1 -0
  189. package/dist/assets/index-sRZE1X3H.js +2 -0
  190. package/dist/assets/index-sRZE1X3H.js.map +1 -0
  191. package/dist/assets/index-uNaj-154.js +40 -0
  192. package/dist/assets/index-uNaj-154.js.map +1 -0
  193. package/dist/assets/index-vo_ird7L.js +2 -0
  194. package/dist/assets/index-vo_ird7L.js.map +1 -0
  195. package/dist/assets/linkDialog-Dida934t.css +1 -0
  196. package/dist/assets/linkDialog-legacy-0_j99SG_.js +2 -0
  197. package/dist/assets/linkDialog-legacy-0_j99SG_.js.map +1 -0
  198. package/dist/assets/linkDialog-vYdu1-Ul.js +2 -0
  199. package/dist/assets/linkDialog-vYdu1-Ul.js.map +1 -0
  200. package/dist/assets/other-BiIe9Z0L.js +2 -0
  201. package/dist/assets/other-BiIe9Z0L.js.map +1 -0
  202. package/dist/assets/other-legacy-Bfm4KL87.js +2 -0
  203. package/dist/assets/other-legacy-Bfm4KL87.js.map +1 -0
  204. package/dist/assets/polyfills-legacy-DqO_DCwg.js +1 -0
  205. package/dist/assets/{refresh-DPuuDO9h.js → refresh-BnOQ8sKt.js} +2 -2
  206. package/dist/assets/refresh-BnOQ8sKt.js.map +1 -0
  207. package/dist/assets/{refresh-legacy-DOts-8Wc.js → refresh-legacy-D7NGa5wN.js} +2 -2
  208. package/dist/assets/refresh-legacy-D7NGa5wN.js.map +1 -0
  209. package/dist/assets/tip-CyB8omfw.js +2 -0
  210. package/dist/assets/tip-CyB8omfw.js.map +1 -0
  211. package/dist/assets/tip-legacy-DXZHLiK7.js +2 -0
  212. package/dist/assets/tip-legacy-DXZHLiK7.js.map +1 -0
  213. package/dist/assets/tipInfo-0FQ2unt4.js +2 -0
  214. package/dist/assets/tipInfo-0FQ2unt4.js.map +1 -0
  215. package/dist/assets/tipInfo-BPHCIpRm.css +1 -0
  216. package/dist/assets/tipInfo-legacy-cRqTuiqx.js +2 -0
  217. package/dist/assets/tipInfo-legacy-cRqTuiqx.js.map +1 -0
  218. package/dist/index.html +105 -128
  219. package/package.json +13 -34
  220. package/README.md +0 -86
  221. package/dist/assets/data-analysis-Bnq_VWU8.js.map +0 -1
  222. package/dist/assets/data-analysis-legacy-_KcR253K.js.map +0 -1
  223. package/dist/assets/data-board-L3s5ouKd.js.map +0 -1
  224. package/dist/assets/data-board-legacy-BFxWeFnQ.js.map +0 -1
  225. package/dist/assets/el-date-picker-legacy-Uk9x97L5.js +0 -2
  226. package/dist/assets/el-date-picker-legacy-Uk9x97L5.js.map +0 -1
  227. package/dist/assets/el-date-picker-mhY2RJMG.js +0 -2
  228. package/dist/assets/el-date-picker-mhY2RJMG.js.map +0 -1
  229. package/dist/assets/el-dialog-Cu2jwelC.css +0 -1
  230. package/dist/assets/el-dialog-PRccau6N.js +0 -2
  231. package/dist/assets/el-dialog-PRccau6N.js.map +0 -1
  232. package/dist/assets/el-dialog-legacy-BRLM43ZY.js +0 -2
  233. package/dist/assets/el-dialog-legacy-BRLM43ZY.js.map +0 -1
  234. package/dist/assets/el-dropdown-item-Cr71teRg.js +0 -2
  235. package/dist/assets/el-dropdown-item-Cr71teRg.js.map +0 -1
  236. package/dist/assets/el-dropdown-item-legacy-B0ufpHvy.js +0 -2
  237. package/dist/assets/el-dropdown-item-legacy-B0ufpHvy.js.map +0 -1
  238. package/dist/assets/el-form-item-Cc9R0dZ1.css +0 -1
  239. package/dist/assets/el-form-item-DOwM4Mv8.js +0 -2
  240. package/dist/assets/el-form-item-DOwM4Mv8.js.map +0 -1
  241. package/dist/assets/el-form-item-legacy-CvQy7syv.js +0 -2
  242. package/dist/assets/el-form-item-legacy-CvQy7syv.js.map +0 -1
  243. package/dist/assets/el-loading-DNzUD85e.js.map +0 -1
  244. package/dist/assets/el-loading-legacy-B3RLcjwN.js +0 -2
  245. package/dist/assets/el-loading-legacy-B3RLcjwN.js.map +0 -1
  246. package/dist/assets/el-pagination-iCicJonH.js +0 -2
  247. package/dist/assets/el-pagination-iCicJonH.js.map +0 -1
  248. package/dist/assets/el-pagination-legacy-Bf-Bzx7n.js +0 -2
  249. package/dist/assets/el-pagination-legacy-Bf-Bzx7n.js.map +0 -1
  250. package/dist/assets/el-progress-1hLO5hs0.js +0 -2
  251. package/dist/assets/el-progress-1hLO5hs0.js.map +0 -1
  252. package/dist/assets/el-progress-legacy-QmxDezwR.js +0 -2
  253. package/dist/assets/el-progress-legacy-QmxDezwR.js.map +0 -1
  254. package/dist/assets/el-progress-njCW9-w4.css +0 -1
  255. package/dist/assets/el-select-BSO0hXRI.css +0 -1
  256. package/dist/assets/el-select-CVjQdC39.js +0 -2
  257. package/dist/assets/el-select-CVjQdC39.js.map +0 -1
  258. package/dist/assets/el-select-legacy-DSGgSQYX.js +0 -2
  259. package/dist/assets/el-select-legacy-DSGgSQYX.js.map +0 -1
  260. package/dist/assets/el-switch-B76QvbJN.js +0 -2
  261. package/dist/assets/el-switch-B76QvbJN.js.map +0 -1
  262. package/dist/assets/el-switch-legacy-CHkEgavQ.js +0 -2
  263. package/dist/assets/el-switch-legacy-CHkEgavQ.js.map +0 -1
  264. package/dist/assets/el-tab-pane-BhVByOfe.js +0 -2
  265. package/dist/assets/el-tab-pane-BhVByOfe.js.map +0 -1
  266. package/dist/assets/el-tab-pane-legacy-DMdhUCHY.js.map +0 -1
  267. package/dist/assets/el-table-column-legacy-N_oU_-0P.js +0 -24
  268. package/dist/assets/el-table-column-legacy-N_oU_-0P.js.map +0 -1
  269. package/dist/assets/el-table-column-tkbtgrcD.js.map +0 -1
  270. package/dist/assets/index-3yen43So.js +0 -2
  271. package/dist/assets/index-3yen43So.js.map +0 -1
  272. package/dist/assets/index-5sS3uHi0.css +0 -1
  273. package/dist/assets/index-9zuSLjpa.js +0 -2
  274. package/dist/assets/index-9zuSLjpa.js.map +0 -1
  275. package/dist/assets/index-B-6zRvEX.js +0 -2
  276. package/dist/assets/index-B-6zRvEX.js.map +0 -1
  277. package/dist/assets/index-B5tZv3FB.css +0 -1
  278. package/dist/assets/index-BN1f1UM3.js +0 -2
  279. package/dist/assets/index-BN1f1UM3.js.map +0 -1
  280. package/dist/assets/index-BUmkgniE.js +0 -2
  281. package/dist/assets/index-BUmkgniE.js.map +0 -1
  282. package/dist/assets/index-BbfnoqK6.js +0 -2
  283. package/dist/assets/index-BbfnoqK6.js.map +0 -1
  284. package/dist/assets/index-BghihfR3.css +0 -1
  285. package/dist/assets/index-C3IckGNL.js +0 -2
  286. package/dist/assets/index-C3IckGNL.js.map +0 -1
  287. package/dist/assets/index-CYAf_OTx.js +0 -40
  288. package/dist/assets/index-CYAf_OTx.js.map +0 -1
  289. package/dist/assets/index-Cb6-p2hG.js +0 -2
  290. package/dist/assets/index-Cb6-p2hG.js.map +0 -1
  291. package/dist/assets/index-CbkKWoQA.css +0 -1
  292. package/dist/assets/index-CeWnhlkq.css +0 -1
  293. package/dist/assets/index-Cfg2jkVw.css +0 -1
  294. package/dist/assets/index-CkMvb3wF.css +0 -1
  295. package/dist/assets/index-Cl4G6EQO.js +0 -2
  296. package/dist/assets/index-Cl4G6EQO.js.map +0 -1
  297. package/dist/assets/index-CnbFxlpi.css +0 -1
  298. package/dist/assets/index-Cyb1OjRN.js +0 -2
  299. package/dist/assets/index-Cyb1OjRN.js.map +0 -1
  300. package/dist/assets/index-D2p3cWtM.css +0 -1
  301. package/dist/assets/index-D7aZxhM6.js +0 -2
  302. package/dist/assets/index-D7aZxhM6.js.map +0 -1
  303. package/dist/assets/index-DI41wbky.js +0 -2
  304. package/dist/assets/index-DI41wbky.js.map +0 -1
  305. package/dist/assets/index-DaSb9EV4.css +0 -1
  306. package/dist/assets/index-DcOjlpKI.js +0 -2
  307. package/dist/assets/index-DcOjlpKI.js.map +0 -1
  308. package/dist/assets/index-DjO-nUIS.js +0 -2
  309. package/dist/assets/index-DjO-nUIS.js.map +0 -1
  310. package/dist/assets/index-DnxF29eG.css +0 -1
  311. package/dist/assets/index-DrKX0cCg.js +0 -2
  312. package/dist/assets/index-DrKX0cCg.js.map +0 -1
  313. package/dist/assets/index-F3S0vKOW.js +0 -2
  314. package/dist/assets/index-F3S0vKOW.js.map +0 -1
  315. package/dist/assets/index-I78Ur1Md.js +0 -2
  316. package/dist/assets/index-I78Ur1Md.js.map +0 -1
  317. package/dist/assets/index-L0LtrfyP.js +0 -2
  318. package/dist/assets/index-L0LtrfyP.js.map +0 -1
  319. package/dist/assets/index-XNFQHmLL.css +0 -1
  320. package/dist/assets/index-dEAnfrhp.css +0 -1
  321. package/dist/assets/index-hhTdfxnD.css +0 -1
  322. package/dist/assets/index-lTmxAqnX.js +0 -2
  323. package/dist/assets/index-lTmxAqnX.js.map +0 -1
  324. package/dist/assets/index-legacy-BJNK4MqF.js +0 -2
  325. package/dist/assets/index-legacy-BJNK4MqF.js.map +0 -1
  326. package/dist/assets/index-legacy-BLlk8iq-.js +0 -42
  327. package/dist/assets/index-legacy-BLlk8iq-.js.map +0 -1
  328. package/dist/assets/index-legacy-BmWYm3m_.js +0 -2
  329. package/dist/assets/index-legacy-BmWYm3m_.js.map +0 -1
  330. package/dist/assets/index-legacy-Bnp7569A.js +0 -2
  331. package/dist/assets/index-legacy-Bnp7569A.js.map +0 -1
  332. package/dist/assets/index-legacy-CQ24Si-w.js +0 -2
  333. package/dist/assets/index-legacy-CQ24Si-w.js.map +0 -1
  334. package/dist/assets/index-legacy-CT1nF7s9.js +0 -2
  335. package/dist/assets/index-legacy-CT1nF7s9.js.map +0 -1
  336. package/dist/assets/index-legacy-CeVzo60P.js +0 -2
  337. package/dist/assets/index-legacy-CeVzo60P.js.map +0 -1
  338. package/dist/assets/index-legacy-Cf0w_PNA.js +0 -2
  339. package/dist/assets/index-legacy-Cf0w_PNA.js.map +0 -1
  340. package/dist/assets/index-legacy-DZSQUiaj.js +0 -2
  341. package/dist/assets/index-legacy-DZSQUiaj.js.map +0 -1
  342. package/dist/assets/index-legacy-D_K0eXFb.js +0 -2
  343. package/dist/assets/index-legacy-D_K0eXFb.js.map +0 -1
  344. package/dist/assets/index-legacy-Da3YyHW_.js +0 -2
  345. package/dist/assets/index-legacy-Da3YyHW_.js.map +0 -1
  346. package/dist/assets/index-legacy-Da4s_D85.js +0 -2
  347. package/dist/assets/index-legacy-Da4s_D85.js.map +0 -1
  348. package/dist/assets/index-legacy-DhNaKknk.js +0 -2
  349. package/dist/assets/index-legacy-DhNaKknk.js.map +0 -1
  350. package/dist/assets/index-legacy-Dm1CXog1.js +0 -2
  351. package/dist/assets/index-legacy-Dm1CXog1.js.map +0 -1
  352. package/dist/assets/index-legacy-DpNNn-Dy.js +0 -2
  353. package/dist/assets/index-legacy-DpNNn-Dy.js.map +0 -1
  354. package/dist/assets/index-legacy-PkF4cKK9.js +0 -2
  355. package/dist/assets/index-legacy-PkF4cKK9.js.map +0 -1
  356. package/dist/assets/index-legacy-QHDmYAB8.js +0 -2
  357. package/dist/assets/index-legacy-QHDmYAB8.js.map +0 -1
  358. package/dist/assets/index-legacy-_M1-0586.js +0 -2
  359. package/dist/assets/index-legacy-_M1-0586.js.map +0 -1
  360. package/dist/assets/index-legacy-m0dvnwGi.js +0 -2
  361. package/dist/assets/index-legacy-m0dvnwGi.js.map +0 -1
  362. package/dist/assets/index-legacy-vRS79jKS.js +0 -2
  363. package/dist/assets/index-legacy-vRS79jKS.js.map +0 -1
  364. package/dist/assets/index-ypHH_Z_A.css +0 -1
  365. package/dist/assets/isEqual-BHpVKj_X.js +0 -2
  366. package/dist/assets/isEqual-BHpVKj_X.js.map +0 -1
  367. package/dist/assets/isEqual-legacy-BWUPR8bV.js +0 -2
  368. package/dist/assets/isEqual-legacy-BWUPR8bV.js.map +0 -1
  369. package/dist/assets/other-legacy-DjiCmSH4.js +0 -2
  370. package/dist/assets/other-legacy-DjiCmSH4.js.map +0 -1
  371. package/dist/assets/other-yMAyytYx.js +0 -2
  372. package/dist/assets/other-yMAyytYx.js.map +0 -1
  373. package/dist/assets/polyfills-legacy-CPmsgIAF.js +0 -4
  374. package/dist/assets/refresh-DPuuDO9h.js.map +0 -1
  375. package/dist/assets/refresh-legacy-DOts-8Wc.js.map +0 -1
  376. package/dist/assets/tip-CH7nBVXc.js +0 -2
  377. package/dist/assets/tip-CH7nBVXc.js.map +0 -1
  378. package/dist/assets/tip-legacy-DiCk_qP1.js +0 -2
  379. package/dist/assets/tip-legacy-DiCk_qP1.js.map +0 -1
  380. package/dist/assets/validator-BMr-jeUB.js +0 -2
  381. package/dist/assets/validator-BMr-jeUB.js.map +0 -1
  382. package/dist/assets/validator-legacy-CacjPWoF.js +0 -2
  383. package/dist/assets/validator-legacy-CacjPWoF.js.map +0 -1
  384. /package/dist/assets/{el-date-picker-NjWHL2Br.css → el-date-picker-C36c2CGO.css} +0 -0
  385. /package/dist/assets/{el-dropdown-item-CUgTpiu6.css → el-dropdown-item-5b6bMUQF.css} +0 -0
  386. /package/dist/assets/{el-loading-Uv12lkco.css → el-loading-BPl8mdQ3.css} +0 -0
  387. /package/dist/assets/{el-pagination-MvCAleW2.css → el-pagination-DMHBWKFj.css} +0 -0
  388. /package/dist/assets/{el-switch-D6dVIPlw.css → el-switch-CH9HekZJ.css} +0 -0
  389. /package/dist/assets/{el-tab-pane-kUw7IczA.css → el-tab-pane-CO1C5qCV.css} +0 -0
  390. /package/dist/assets/{el-table-column-DMXHP8sd.css → el-table-column-x3grTP_N.css} +0 -0
  391. /package/dist/assets/{tip-ovQu2XSt.css → tip-rRSL6nZ2.css} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B_7cUQcW.js","sources":["../../../../node_modules/.pnpm/element-plus@2.2.13_vue@3.5.12_typescript@4.9.5_/node_modules/element-plus/es/tokens/collapse.mjs","../../../../node_modules/.pnpm/element-plus@2.2.13_vue@3.5.12_typescript@4.9.5_/node_modules/element-plus/es/components/collapse/src/collapse.mjs","../../../../node_modules/.pnpm/element-plus@2.2.13_vue@3.5.12_typescript@4.9.5_/node_modules/element-plus/es/components/collapse/src/collapse2.mjs","../../../../node_modules/.pnpm/element-plus@2.2.13_vue@3.5.12_typescript@4.9.5_/node_modules/element-plus/es/components/collapse/src/collapse-item.mjs","../../../../node_modules/.pnpm/element-plus@2.2.13_vue@3.5.12_typescript@4.9.5_/node_modules/element-plus/es/components/collapse/src/collapse-item2.mjs","../../../../node_modules/.pnpm/element-plus@2.2.13_vue@3.5.12_typescript@4.9.5_/node_modules/element-plus/es/components/collapse/index.mjs","../../src/apis/modules/config.ts","../../src/pages/dashboard/config/index.vue"],"sourcesContent":["const collapseContextKey = Symbol(\"collapseContextKey\");\n\nexport { collapseContextKey };\n//# sourceMappingURL=collapse.mjs.map\n","import '../../../utils/index.mjs';\nimport '../../../constants/index.mjs';\nimport { isNumber } from '@vueuse/core';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { mutable } from '../../../utils/typescript.mjs';\nimport { UPDATE_MODEL_EVENT, CHANGE_EVENT } from '../../../constants/event.mjs';\n\nconst emitChangeFn = (value) => typeof isNumber(value);\nconst collapseProps = buildProps({\n accordion: Boolean,\n modelValue: {\n type: definePropType([Array, String, Number]),\n default: () => mutable([])\n }\n});\nconst collapseEmits = {\n [UPDATE_MODEL_EVENT]: emitChangeFn,\n [CHANGE_EVENT]: emitChangeFn\n};\n\nexport { collapseEmits, collapseProps, emitChangeFn };\n//# sourceMappingURL=collapse.mjs.map\n","import { defineComponent, ref, watch, provide, openBlock, createElementBlock, normalizeClass, unref, renderSlot } from 'vue';\nimport '../../../utils/index.mjs';\nimport '../../../constants/index.mjs';\nimport '../../../hooks/index.mjs';\nimport '../../../tokens/index.mjs';\nimport { collapseProps, collapseEmits } from './collapse.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { castArray } from 'lodash-unified';\nimport { UPDATE_MODEL_EVENT, CHANGE_EVENT } from '../../../constants/event.mjs';\nimport { collapseContextKey } from '../../../tokens/collapse.mjs';\n\nconst __default__ = {\n name: \"ElCollapse\"\n};\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: collapseProps,\n emits: collapseEmits,\n setup(__props, { expose, emit }) {\n const props = __props;\n const ns = useNamespace(\"collapse\");\n const activeNames = ref(castArray(props.modelValue));\n const setActiveNames = (_activeNames) => {\n activeNames.value = _activeNames;\n const value = props.accordion ? activeNames.value[0] : activeNames.value;\n emit(UPDATE_MODEL_EVENT, value);\n emit(CHANGE_EVENT, value);\n };\n const handleItemClick = (name) => {\n if (props.accordion) {\n setActiveNames([\n (activeNames.value[0] || activeNames.value[0] === 0) && activeNames.value[0] === name ? \"\" : name\n ]);\n } else {\n const _activeNames = [...activeNames.value];\n const index = _activeNames.indexOf(name);\n if (index > -1) {\n _activeNames.splice(index, 1);\n } else {\n _activeNames.push(name);\n }\n setActiveNames(_activeNames);\n }\n };\n watch(() => props.modelValue, () => activeNames.value = castArray(props.modelValue), { deep: true });\n provide(collapseContextKey, {\n activeNames,\n handleItemClick\n });\n expose({\n activeNames,\n setActiveNames\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass(unref(ns).b()),\n role: \"tablist\",\n \"aria-multiselectable\": \"true\"\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 2);\n };\n }\n});\nvar Collapse = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"/home/runner/work/element-plus/element-plus/packages/components/collapse/src/collapse.vue\"]]);\n\nexport { Collapse as default };\n//# sourceMappingURL=collapse2.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { generateId } from '../../../utils/rand.mjs';\n\nconst collapseItemProps = buildProps({\n title: {\n type: String,\n default: \"\"\n },\n name: {\n type: definePropType([String, Number]),\n default: () => generateId()\n },\n disabled: Boolean\n});\n\nexport { collapseItemProps };\n//# sourceMappingURL=collapse-item.mjs.map\n","import { defineComponent, inject, ref, computed, openBlock, createElementBlock, normalizeClass, unref, createElementVNode, withKeys, withModifiers, renderSlot, createTextVNode, toDisplayString, createVNode, withCtx, withDirectives, vShow } from 'vue';\nimport '../../../utils/index.mjs';\nimport _CollapseTransition from '../../collapse-transition/index.mjs';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { ArrowRight } from '@element-plus/icons-vue';\nimport '../../../hooks/index.mjs';\nimport '../../../tokens/index.mjs';\nimport { collapseItemProps } from './collapse-item.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { collapseContextKey } from '../../../tokens/collapse.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { generateId } from '../../../utils/rand.mjs';\n\nconst _hoisted_1 = [\"aria-expanded\", \"aria-controls\", \"aria-describedby\"];\nconst _hoisted_2 = [\"id\", \"tabindex\", \"onKeypress\"];\nconst _hoisted_3 = [\"id\", \"aria-hidden\", \"aria-labelledby\"];\nconst __default__ = {\n name: \"ElCollapseItem\"\n};\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: collapseItemProps,\n setup(__props, { expose }) {\n const props = __props;\n const collapse = inject(collapseContextKey);\n const ns = useNamespace(\"collapse\");\n const focusing = ref(false);\n const isClick = ref(false);\n const id = ref(generateId());\n const isActive = computed(() => collapse == null ? void 0 : collapse.activeNames.value.includes(props.name));\n const handleFocus = () => {\n setTimeout(() => {\n if (!isClick.value) {\n focusing.value = true;\n } else {\n isClick.value = false;\n }\n }, 50);\n };\n const handleHeaderClick = () => {\n if (props.disabled)\n return;\n collapse == null ? void 0 : collapse.handleItemClick(props.name);\n focusing.value = false;\n isClick.value = true;\n };\n const handleEnterClick = () => {\n collapse == null ? void 0 : collapse.handleItemClick(props.name);\n };\n expose({\n isActive\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\n unref(ns).b(\"item\"),\n unref(ns).is(\"active\", unref(isActive)),\n unref(ns).is(\"disabled\", _ctx.disabled)\n ])\n }, [\n createElementVNode(\"div\", {\n role: \"tab\",\n \"aria-expanded\": unref(isActive),\n \"aria-controls\": unref(ns).b(`content-${id.value}`),\n \"aria-describedby\": unref(ns).b(`content-${id.value}`)\n }, [\n createElementVNode(\"div\", {\n id: unref(ns).b(`head-${id.value}`),\n class: normalizeClass([\n unref(ns).be(\"item\", \"header\"),\n unref(ns).is(\"active\", unref(isActive)),\n { focusing: focusing.value && !_ctx.disabled }\n ]),\n role: \"button\",\n tabindex: _ctx.disabled ? -1 : 0,\n onClick: handleHeaderClick,\n onKeypress: withKeys(withModifiers(handleEnterClick, [\"stop\", \"prevent\"]), [\"space\", \"enter\"]),\n onFocus: handleFocus,\n onBlur: _cache[0] || (_cache[0] = ($event) => focusing.value = false)\n }, [\n renderSlot(_ctx.$slots, \"title\", {}, () => [\n createTextVNode(toDisplayString(_ctx.title), 1)\n ]),\n createVNode(unref(ElIcon), {\n class: normalizeClass([unref(ns).be(\"item\", \"arrow\"), unref(ns).is(\"active\", unref(isActive))])\n }, {\n default: withCtx(() => [\n createVNode(unref(ArrowRight))\n ]),\n _: 1\n }, 8, [\"class\"])\n ], 42, _hoisted_2)\n ], 8, _hoisted_1),\n createVNode(unref(_CollapseTransition), null, {\n default: withCtx(() => [\n withDirectives(createElementVNode(\"div\", {\n id: unref(ns).b(`content-${id.value}`),\n class: normalizeClass(unref(ns).be(\"item\", \"wrap\")),\n role: \"tabpanel\",\n \"aria-hidden\": !unref(isActive),\n \"aria-labelledby\": unref(ns).b(`head-${id.value}`)\n }, [\n createElementVNode(\"div\", {\n class: normalizeClass(unref(ns).be(\"item\", \"content\"))\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 2)\n ], 10, _hoisted_3), [\n [vShow, unref(isActive)]\n ])\n ]),\n _: 3\n })\n ], 2);\n };\n }\n});\nvar CollapseItem = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"/home/runner/work/element-plus/element-plus/packages/components/collapse/src/collapse-item.vue\"]]);\n\nexport { CollapseItem as default };\n//# sourceMappingURL=collapse-item2.mjs.map\n","import '../../utils/index.mjs';\nimport Collapse from './src/collapse2.mjs';\nimport CollapseItem from './src/collapse-item2.mjs';\nexport { collapseEmits, collapseProps, emitChangeFn } from './src/collapse.mjs';\nexport { collapseItemProps } from './src/collapse-item.mjs';\nimport { withInstall, withNoopInstall } from '../../utils/vue/install.mjs';\n\nconst ElCollapse = withInstall(Collapse, {\n CollapseItem\n});\nconst ElCollapseItem = withNoopInstall(CollapseItem);\n\nexport { ElCollapse, ElCollapseItem, ElCollapse as default };\n//# sourceMappingURL=index.mjs.map\n","import ajax from '../ajax'\n\nfunction getServiceOverview(): ConfigServiceAPITypes.getServiceOverview {\n return ajax.get('/config/service/overview')\n}\n\nfunction getMysqlSchema(): ConfigServiceAPITypes.getMysqlSchema {\n return ajax.get('/config/service/mysql/schema')\n}\n\nfunction getMysqlSchemaExportSql(): ConfigServiceAPITypes.getMysqlSchemaExportSql {\n return ajax.get('/config/service/mysql/schema/export-sql')\n}\n\nfunction applyMysqlSchema(): ConfigServiceAPITypes.applyMysqlSchema {\n return ajax.post('/config/service/mysql/schema/apply')\n}\n\nfunction getMysqlLiveIntrospect(): ConfigServiceAPITypes.getMysqlLiveIntrospect {\n return ajax.get('/config/service/mysql/introspect')\n}\n\nfunction checkMysqlDatabase(\n body: ConfigServiceAPITypes.MysqlCheckDatabaseBody,\n): ConfigServiceAPITypes.checkMysqlDatabase {\n return ajax.post('/config/service/mysql/check-database', body)\n}\n\nfunction listConfigAdminUsers(): ConfigServiceAPITypes.listConfigAdminUsers {\n return ajax.get('/config/service/admin-users')\n}\n\nfunction createConfigAdminUser(\n body: ConfigServiceAPITypes.CreateConfigAdminUserBody,\n): ConfigServiceAPITypes.createConfigAdminUser {\n return ajax.post('/config/service/admin-users', body)\n}\n\nfunction resetConfigAdminUserPassword(\n body: ConfigServiceAPITypes.ResetConfigAdminUserPasswordBody,\n): ConfigServiceAPITypes.resetConfigAdminUserPassword {\n return ajax.post('/config/service/admin-users/reset-password', body)\n}\n\nfunction getServiceConfig(): ConfigServiceAPITypes.getServiceConfig {\n return ajax.get('/config/service/config')\n}\n\nfunction updateCfg(data: ConfigServiceAPITypes.ServiceConfigItem | ConfigServiceAPITypes.ServiceConfigItem[]) {\n return ajax.put('/config/service/config', data)\n}\n\nexport default {\n getServiceOverview,\n getMysqlSchema,\n getMysqlSchemaExportSql,\n applyMysqlSchema,\n getMysqlLiveIntrospect,\n checkMysqlDatabase,\n listConfigAdminUsers,\n createConfigAdminUser,\n resetConfigAdminUserPassword,\n getServiceConfig,\n updateCfg,\n}\n","<script lang=\"ts\" setup>\nimport { Refresh } from '@element-plus/icons-vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { computed, onMounted, reactive, ref, watch } from 'vue'\nimport { ConfigServiceAPI, PublicApi, UserApi } from '@/apis'\nimport { useSiteConfig } from '@/composables'\nimport { rAccount, rMobilePhone, rPassword, rVerCode } from '@/utils/regExp'\nimport Tip from '../tasks/components/infoPanel/tip.vue'\n\ntype ConfigData = ConfigServiceAPITypes.ConfigData\ntype ServiceConfigItem = ConfigServiceAPITypes.ServiceConfigItem\ntype ServiceOverviewItem = ConfigServiceAPITypes.ServiceOverviewItem\ntype MysqlSchemaOverview = ConfigServiceAPITypes.MysqlSchemaOverview\ntype MysqlLiveIntrospection = ConfigServiceAPITypes.MysqlLiveIntrospection\ntype MysqlLiveTable = ConfigServiceAPITypes.MysqlLiveTable\n\n/** 与 MySQL 相关的子 Tab(连接配置仍在 name=mysql 的主 Tab);结构与脚本已与「在线库表」合并 */\nconst MYSQL_INTROSPECT_TAB = 'mysql-introspect'\nconst CONFIG_ADMIN_USERS_TAB = 'config-admin-users'\n\nconst { value: siteConfig } = useSiteConfig()\n\nconst mysqlSchema = ref<MysqlSchemaOverview | null>(null)\nconst schemaLoading = ref(false)\n\n/** 建表 SQL 全屏预览 */\nconst mysqlExportDialogVisible = ref(false)\nconst mysqlExportLoading = ref(false)\nconst mysqlExportSql = ref('')\nconst mysqlExportDescription = ref('')\nconst mysqlExportError = ref('')\n\nconst serviceOverview = ref<ServiceOverviewItem[]>([])\nconst serverConfig = ref<ConfigData[]>([])\nconst loading = ref(false)\nconst configLoading = ref(false)\nconst activeConfigTab = ref('')\nconst savingMap = reactive<Record<string, boolean>>({})\n\nconst overviewStats = computed(() => {\n const total = serviceOverview.value.length\n const running = serviceOverview.value.filter(item => item.status).length\n const required = serviceOverview.value.filter(item => item.required).length\n const optional = total - required\n return {\n total,\n running,\n required,\n optional,\n abnormal: total - running,\n }\n})\nconst showErrorList = computed(() => serviceOverview.value.filter(item => item.errMsg))\nconst showMysqlToolTabs = computed(() => serverConfig.value.some(s => s.type === 'mysql'))\nconst mysqlLive = ref<MysqlLiveIntrospection | null>(null)\nconst mysqlLiveLoading = ref(false)\nconst mysqlLiveOpenNames = ref<string[]>([])\n\nconst currentConfig = computed(() => serverConfig.value.find(item => item.type === activeConfigTab.value))\n\nfunction isActiveConfigTabValid(name: string) {\n if (name === CONFIG_ADMIN_USERS_TAB)\n return true\n if (serverConfig.value.some(item => item.type === name))\n return true\n if (showMysqlToolTabs.value && name === MYSQL_INTROSPECT_TAB)\n return true\n return false\n}\n\nfunction getServiceTagType(service: ServiceOverviewItem) {\n if (service.status) {\n return 'success'\n }\n return service.required ? 'danger' : 'warning'\n}\n\nfunction getServiceTagText(service: ServiceOverviewItem) {\n if (service.status) {\n return '运行中'\n }\n return service.required ? '异常' : '未就绪'\n}\n\nfunction isBooleanConfig(item: ServiceConfigItem) {\n return (\n typeof item.value === 'boolean'\n || item.key === 'auth'\n || item.key === 'autoCreateDatabase'\n || item.key === 'autoSyncSchemaOnStartup'\n )\n}\n\nfunction isNumberConfig(item: ServiceConfigItem) {\n return typeof item.value === 'number' || item.key === 'port'\n}\n\nfunction updateConfigValue(item: ServiceConfigItem, value: string | number | boolean) {\n item.value = value\n}\n\nasync function loadMysqlSchema() {\n schemaLoading.value = true\n try {\n const { data } = await ConfigServiceAPI.getMysqlSchema()\n mysqlSchema.value = data ?? null\n }\n catch {\n mysqlSchema.value = null\n }\n finally {\n schemaLoading.value = false\n }\n}\n\nasync function loadMysqlLiveIntrospect() {\n mysqlLiveLoading.value = true\n try {\n const { data } = await ConfigServiceAPI.getMysqlLiveIntrospect()\n mysqlLive.value = data ?? null\n }\n catch {\n mysqlLive.value = null\n }\n finally {\n mysqlLiveLoading.value = false\n }\n}\n\nfunction formatBytes(n: number | null) {\n if (n == null || Number.isNaN(n))\n return '—'\n if (n < 1024)\n return `${n} B`\n const units = ['KB', 'MB', 'GB', 'TB']\n let v = n / 1024\n let i = 0\n while (v >= 1024 && i < units.length - 1) {\n v /= 1024\n i++\n }\n return `${v < 10 ? v.toFixed(1) : Math.round(v)} ${units[i]}`\n}\n\nfunction indexColumnsLabel(idx: MysqlLiveTable['indexes'][number]) {\n return idx.columns\n .map((c) => {\n const p = c.subPart != null ? `(${c.subPart})` : ''\n return `${c.column}${p}`\n })\n .join(', ')\n}\n\nasync function copyMysqlTableDdl(tbl: MysqlLiveTable) {\n const text = tbl.createSql?.trim() ?? ''\n if (!text) {\n ElMessage.warning('建表语句为空')\n return\n }\n try {\n await navigator.clipboard.writeText(text)\n ElMessage.success(`已复制 ${tbl.name} 的建表 SQL`)\n }\n catch {\n ElMessage.error('复制失败,请手动选取文本框中的内容')\n }\n}\n\nasync function applyMysqlSchema() {\n schemaLoading.value = true\n try {\n await ConfigServiceAPI.applyMysqlSchema()\n await loadMysqlSchema()\n await loadMysqlLiveIntrospect()\n await refreshStatus(false)\n ElMessage.success('已按 mysql-schema.json 对齐缺列及列类型')\n }\n catch {\n ElMessage.error('执行失败,请查看服务端日志')\n }\n finally {\n schemaLoading.value = false\n }\n}\n\nasync function openMysqlExportDialog() {\n mysqlExportDialogVisible.value = true\n mysqlExportSql.value = ''\n mysqlExportDescription.value = ''\n mysqlExportError.value = ''\n mysqlExportLoading.value = true\n try {\n const { data } = await ConfigServiceAPI.getMysqlSchemaExportSql()\n if (!data?.sql?.trim() || data?.error) {\n mysqlExportError.value = data?.error || '未生成 SQL'\n return\n }\n mysqlExportSql.value = data.sql\n mysqlExportDescription.value = data.description?.trim() ?? ''\n }\n catch {\n mysqlExportError.value = '加载失败,请稍后重试'\n }\n finally {\n mysqlExportLoading.value = false\n }\n}\n\nfunction onMysqlExportDialogClosed() {\n mysqlExportSql.value = ''\n mysqlExportDescription.value = ''\n mysqlExportError.value = ''\n}\n\nfunction closeMysqlExportDialog() {\n mysqlExportDialogVisible.value = false\n onMysqlExportDialogClosed()\n}\n\nconst adminUsersLoading = ref(false)\nconst adminUsersList = ref<ConfigServiceAPITypes.ConfigAdminUserRow[]>([])\nconst loginIsSuper = ref(false)\nconst loginIsSystem = ref(false)\nconst canOperateConfigAdmins = computed(() => loginIsSuper.value || loginIsSystem.value)\n\nconst adminCreateForm = reactive({\n account: '',\n pwd1: '',\n pwd2: '',\n bindPhone: false,\n phone: '',\n code: '',\n})\nconst adminCreateSubmitting = ref(false)\nconst adminResetVisible = ref(false)\nconst adminResetRow = ref<ConfigServiceAPITypes.ConfigAdminUserRow | null>(null)\nconst adminResetPwd1 = ref('')\nconst adminResetPwd2 = ref('')\nconst adminResetSubmitting = ref(false)\nconst adminCodeText = ref('获取验证码')\nconst adminCodeTime = ref(0)\n\nfunction refreshAdminCodeText() {\n if (adminCodeTime.value === 0) {\n adminCodeText.value = '获取验证码'\n return\n }\n adminCodeText.value = `${adminCodeTime.value}s`\n adminCodeTime.value -= 1\n setTimeout(refreshAdminCodeText, 1000)\n}\n\nfunction getAdminCreateCode() {\n if (!rMobilePhone.test(adminCreateForm.phone)) {\n ElMessage.warning('手机号格式不正确')\n return\n }\n PublicApi.getCode(adminCreateForm.phone).then(() => {\n adminCodeTime.value = 120\n refreshAdminCodeText()\n ElMessage.success('验证码已发送')\n })\n}\n\nfunction adminStatusLabel(status: number) {\n if (status === 0)\n return '正常'\n if (status === 1)\n return '冻结'\n if (status === 2)\n return '封禁'\n return String(status)\n}\n\nasync function loadLoginPower() {\n try {\n const { data } = await UserApi.checkPower()\n loginIsSuper.value = Boolean(data?.power)\n loginIsSystem.value = Boolean(data?.system)\n }\n catch {\n loginIsSuper.value = false\n loginIsSystem.value = false\n }\n}\n\nasync function loadAdminUsers() {\n adminUsersLoading.value = true\n try {\n const { data } = await ConfigServiceAPI.listConfigAdminUsers()\n adminUsersList.value = data?.list ?? []\n }\n catch {\n adminUsersList.value = []\n }\n finally {\n adminUsersLoading.value = false\n }\n}\n\nwatch(() => siteConfig.value?.needBindPhone, (need) => {\n if (need)\n adminCreateForm.bindPhone = true\n}, { immediate: true })\n\nfunction checkAdminCreateForm(): boolean {\n if (!canOperateConfigAdmins.value) {\n ElMessage.warning('当前账号无权创建超级管理员')\n return false\n }\n if (!rAccount.test(adminCreateForm.account)) {\n ElMessage.warning('帐号格式不正确(4-11位 数字字母)')\n return false\n }\n if (!rPassword.test(adminCreateForm.pwd1)) {\n ElMessage.warning('密码格式不正确(6-16位 支持字母/数字/下划线)')\n return false\n }\n if (adminCreateForm.pwd1 !== adminCreateForm.pwd2) {\n ElMessage.warning('两次输入的密码不一致')\n return false\n }\n if (adminCreateForm.bindPhone) {\n if (!rMobilePhone.test(adminCreateForm.phone)) {\n ElMessage.warning('手机号格式不正确')\n return false\n }\n if (!rVerCode.test(adminCreateForm.code)) {\n ElMessage.warning('验证码不正确(4位 数字)')\n return false\n }\n }\n return true\n}\n\nasync function submitCreateAdminUser() {\n if (!checkAdminCreateForm())\n return\n adminCreateSubmitting.value = true\n try {\n const { data } = await ConfigServiceAPI.createConfigAdminUser({\n account: adminCreateForm.account,\n pwd: adminCreateForm.pwd1,\n bindPhone: adminCreateForm.bindPhone,\n phone: adminCreateForm.phone,\n code: adminCreateForm.code,\n })\n if (!data?.ok) {\n ElMessage.error(data?.error || '创建失败')\n return\n }\n ElMessage.success('管理员账号已创建')\n adminCreateForm.account = ''\n adminCreateForm.pwd1 = ''\n adminCreateForm.pwd2 = ''\n adminCreateForm.phone = ''\n adminCreateForm.code = ''\n await loadAdminUsers()\n }\n catch {\n ElMessage.error('请求失败')\n }\n finally {\n adminCreateSubmitting.value = false\n }\n}\n\nfunction openAdminResetDialog(row: ConfigServiceAPITypes.ConfigAdminUserRow) {\n adminResetRow.value = row\n adminResetPwd1.value = ''\n adminResetPwd2.value = ''\n adminResetVisible.value = true\n}\n\nfunction closeAdminResetDialog() {\n adminResetVisible.value = false\n adminResetRow.value = null\n}\n\nasync function submitAdminResetPassword() {\n if (!adminResetRow.value) {\n return\n }\n if (!rPassword.test(adminResetPwd1.value)) {\n ElMessage.warning('密码格式不正确(6-16位 支持字母/数字/下划线)')\n return\n }\n if (adminResetPwd1.value !== adminResetPwd2.value) {\n ElMessage.warning('两次输入的密码不一致')\n return\n }\n adminResetSubmitting.value = true\n try {\n const { data } = await ConfigServiceAPI.resetConfigAdminUserPassword({\n id: adminResetRow.value.id,\n pwd: adminResetPwd1.value,\n })\n if (!data?.ok) {\n ElMessage.error(data?.error || '重置失败')\n return\n }\n ElMessage.success('密码已重置')\n closeAdminResetDialog()\n }\n catch {\n ElMessage.error('请求失败')\n }\n finally {\n adminResetSubmitting.value = false\n }\n}\n\nwatch(mysqlExportDialogVisible, (open) => {\n if (typeof document === 'undefined')\n return\n document.body.style.overflow = open ? 'hidden' : ''\n})\n\nasync function copyMysqlExportSqlAll() {\n const text = mysqlExportSql.value?.trim?.() ?? ''\n if (!text) {\n ElMessage.warning('暂无 SQL 可复制')\n return\n }\n try {\n await navigator.clipboard.writeText(mysqlExportSql.value)\n ElMessage.success('已复制全部 SQL')\n }\n catch {\n ElMessage.error('复制失败,请手动在文本框中选取复制')\n }\n}\n\nasync function refreshStatus(showSuccess = true) {\n if (loading.value)\n return\n loading.value = true\n try {\n const { data } = await ConfigServiceAPI.getServiceOverview()\n serviceOverview.value = data || []\n if (showSuccess) {\n ElMessage.success('服务状态刷新完成')\n }\n }\n catch {\n ElMessage.error('服务状态刷新失败')\n }\n finally {\n loading.value = false\n }\n}\n\nasync function getServiceConfig() {\n configLoading.value = true\n try {\n const { data } = await ConfigServiceAPI.getServiceConfig()\n serverConfig.value = data || []\n if (!activeConfigTab.value || !isActiveConfigTabValid(activeConfigTab.value)) {\n activeConfigTab.value = serverConfig.value[0]?.type || CONFIG_ADMIN_USERS_TAB\n }\n }\n catch {\n ElMessage.error('服务配置加载失败')\n }\n finally {\n configLoading.value = false\n }\n}\n\nfunction configMysqlDataToCheckBody(\n items: ServiceConfigItem[],\n): ConfigServiceAPITypes.MysqlCheckDatabaseBody {\n const pick = ['host', 'port', 'user', 'password', 'database'] as const\n const body: ConfigServiceAPITypes.MysqlCheckDatabaseBody = {}\n for (const it of items) {\n if (it.type !== 'mysql' || !pick.includes(it.key as typeof pick[number]))\n continue\n const k = it.key as keyof ConfigServiceAPITypes.MysqlCheckDatabaseBody\n body[k] = it.value as never\n }\n return body\n}\n\nasync function updateCfgGroup(group?: ConfigData) {\n if (!group || savingMap[group.type])\n return\n\n if (group.type === 'mysql') {\n let check: ConfigServiceAPITypes.MysqlCheckDatabaseResult | null = null\n try {\n const { data } = await ConfigServiceAPI.checkMysqlDatabase(configMysqlDataToCheckBody(group.data))\n check = data ?? null\n }\n catch {\n ElMessage.error('检测数据库状态失败')\n return\n }\n if (!check) {\n ElMessage.error('检测数据库状态失败')\n return\n }\n if (!check.canConnect) {\n ElMessage.error(check.error || '无法连接 MySQL,请检查地址与账号')\n return\n }\n if (!check.databaseExists) {\n const autoItem = group.data.find(i => i.key === 'autoCreateDatabase')\n const autoOn = Boolean(autoItem?.value)\n if (!autoOn) {\n const dbName = group.data.find(i => i.key === 'database')?.value\n const name = dbName != null ? String(dbName).trim() : ''\n const msg = name\n ? `服务器上不存在名为「${name}」的数据库。是否开启「无库时自动建库并按模板导入全部表结构」并保存?`\n : `服务器上不存在该数据库。是否开启「无库时自动建库并按模板导入全部表结构」并保存?`\n try {\n await ElMessageBox.confirm(\n msg,\n '数据库不存在',\n {\n type: 'warning',\n confirmButtonText: '开启并保存',\n cancelButtonText: '取消',\n },\n )\n }\n catch {\n return\n }\n if (autoItem) {\n autoItem.value = true\n }\n else {\n group.data.push({\n type: 'mysql',\n key: 'autoCreateDatabase',\n value: true,\n label: '无库时自动建库并按模板导入全部表结构',\n isSecret: false,\n })\n }\n }\n }\n }\n\n savingMap[group.type] = true\n try {\n await ConfigServiceAPI.updateCfg(group.data)\n ElMessage.success(`${group.title} 配置已保存`)\n await getServiceConfig()\n await refreshStatus(false)\n if (group.type === 'mysql') {\n await loadMysqlSchema()\n await loadMysqlLiveIntrospect()\n }\n }\n catch {\n ElMessage.error(`${group.title} 配置保存失败`)\n }\n finally {\n savingMap[group.type] = false\n }\n}\n\nonMounted(() => {\n refreshStatus(false)\n getServiceConfig()\n})\n\nasync function refreshMysqlToolsTab() {\n await loadMysqlSchema()\n await loadMysqlLiveIntrospect()\n}\n\nwatch(activeConfigTab, (t) => {\n if (t === MYSQL_INTROSPECT_TAB)\n refreshMysqlToolsTab()\n if (t === CONFIG_ADMIN_USERS_TAB) {\n loadLoginPower()\n loadAdminUsers()\n }\n})\n</script>\n\n<template>\n <div class=\"config-page\">\n <section class=\"hero-card\">\n <div>\n <p class=\"eyebrow\">\n 服务配置\n </p>\n <h1>依赖服务概况</h1>\n <p class=\"hero-desc\">\n 按服务端当前实际启用的能力展示依赖状态;未启用的 Redis 不展示,MongoDB 异常也不会影响本页配置管理。\n </p>\n </div>\n <div class=\"hero-stats\">\n <div>\n <strong>{{ overviewStats.running }}</strong>\n <span>运行中</span>\n </div>\n <div>\n <strong>{{ overviewStats.abnormal }}</strong>\n <span>需关注</span>\n </div>\n <div>\n <strong>{{ overviewStats.optional }}</strong>\n <span>可选服务</span>\n </div>\n </div>\n </section>\n\n <section class=\"panel\">\n <div class=\"section-head\">\n <div>\n <h2>总体依赖服务概况</h2>\n <Tip>这里只检查当前服务端正在使用或已配置的依赖服务。</Tip>\n </div>\n <el-button :loading=\"loading\" :icon=\"Refresh\" @click=\"refreshStatus()\">\n 刷新状态\n </el-button>\n </div>\n\n <el-empty v-if=\"!loading && !serviceOverview.length\" description=\"暂无可展示的服务依赖\" />\n <div v-else v-loading=\"loading\" class=\"service-grid\">\n <article\n v-for=\"service in serviceOverview\"\n :key=\"service.type\"\n class=\"service-card\"\n :class=\"{ error: !service.status }\"\n >\n <div class=\"service-card-head\">\n <div>\n <h3>{{ service.title }}</h3>\n <p>{{ service.description }}</p>\n </div>\n <el-tag :type=\"getServiceTagType(service)\" effect=\"dark\">\n {{ getServiceTagText(service) }}\n </el-tag>\n </div>\n <div class=\"service-meta\">\n <span>{{ service.required ? '核心依赖' : '可选依赖' }}</span>\n <span v-if=\"service.errMsg\" class=\"error-text\">{{ service.errMsg }}</span>\n </div>\n </article>\n </div>\n </section>\n\n <section v-show=\"showErrorList.length\" class=\"panel\">\n <div class=\"section-head compact\">\n <div>\n <h2>异常信息</h2>\n <p>以下服务未通过状态检查,可在对应配置 Tab 中集中修改后保存。</p>\n </div>\n </div>\n <div class=\"error-list\">\n <p v-for=\"err in showErrorList\" :key=\"err.type\">\n <strong>{{ err.title }}:</strong>\n <span>{{ err.errMsg }}</span>\n </p>\n </div>\n </section>\n\n <section class=\"panel\">\n <div class=\"section-head\">\n <div>\n <h2>服务相关配置</h2>\n <Tip>\n 各类服务按 Tab 展开编辑,同一类服务修改完成后统一保存。\n <a\n href=\"https://docs.ep.sugarat.top/deploy/online-new.html#_5-%E6%9C%80%E5%90%8E%E6%9B%B4%E6%96%B0%E9%85%8D%E7%BD%AE\"\n >\n <el-button type=\"primary\" link>配置手册?</el-button></a>\n </Tip>\n </div>\n </div>\n\n <el-empty v-if=\"!configLoading && !serverConfig.length\" description=\"暂无可编辑的服务配置\" />\n <div v-else v-loading=\"configLoading\">\n <el-tabs v-model=\"activeConfigTab\" class=\"config-tabs\">\n <el-tab-pane\n v-for=\"serverItem in serverConfig\"\n :key=\"serverItem.type\"\n :label=\"serverItem.title\"\n :name=\"serverItem.type\"\n >\n <div class=\"tab-head\">\n <div>\n <h3>{{ serverItem.title }}</h3>\n <p>{{ serverItem.description }}</p>\n </div>\n <el-button\n type=\"primary\"\n :loading=\"savingMap[serverItem.type]\"\n @click=\"updateCfgGroup(serverItem)\"\n >\n 保存 {{ serverItem.title }}\n </el-button>\n </div>\n\n <el-form label-position=\"top\" class=\"config-form\">\n <div class=\"field-list\">\n <el-form-item\n v-for=\"cfgItem in serverItem.data\"\n :key=\"cfgItem.key\"\n class=\"field-item\"\n >\n <template #label>\n <span class=\"field-label\">{{ cfgItem.label || cfgItem.key }}</span>\n <span v-if=\"cfgItem.isSecret\" class=\"field-desc\">敏感项未修改时会保持原值</span>\n </template>\n\n <el-switch\n v-if=\"isBooleanConfig(cfgItem)\"\n :model-value=\"Boolean(cfgItem.value)\"\n inline-prompt\n active-text=\"开\"\n inactive-text=\"关\"\n @update:model-value=\"updateConfigValue(cfgItem, $event)\"\n />\n <el-input-number\n v-else-if=\"isNumberConfig(cfgItem)\"\n :model-value=\"Number(cfgItem.value)\"\n :min=\"0\"\n controls-position=\"right\"\n class=\"full-control\"\n @update:model-value=\"updateConfigValue(cfgItem, Number($event))\"\n />\n <el-input\n v-else\n :model-value=\"String(cfgItem.value)\"\n :type=\"cfgItem.isSecret ? 'password' : 'text'\"\n :show-password=\"cfgItem.isSecret\"\n :placeholder=\"cfgItem.isSecret ? '留空则保持原值' : '请输入'\"\n clearable\n @update:model-value=\"updateConfigValue(cfgItem, $event)\"\n />\n </el-form-item>\n </div>\n </el-form>\n </el-tab-pane>\n\n <el-tab-pane\n v-if=\"showMysqlToolTabs\"\n label=\"MySQL · 在线库表\"\n :name=\"MYSQL_INTROSPECT_TAB\"\n >\n <div class=\"tab-head\">\n <div>\n <h3>MySQL 在线库表与结构脚本</h3>\n <p>\n 上半部分与发布包内 <code>mysql-schema.json</code> 对照,可预览整库建表 SQL、检测漂移并一键对齐;下半部分读取当前连接库的真实结构(可与上方对照)。\n </p>\n </div>\n <el-button :loading=\"schemaLoading || mysqlLiveLoading\" :icon=\"Refresh\" @click=\"refreshMysqlToolsTab\">\n 刷新\n </el-button>\n </div>\n\n <div class=\"mysql-merged-section mysql-tool-block mysql-tool-block--solo\">\n <div class=\"mysql-merged-section__head\">\n <h4 class=\"mysql-merged-section__title\">\n 结构与脚本\n </h4>\n <p class=\"mysql-merged-section__desc\">\n 基于 canonical 定义检测缺表、缺列与类型漂移;弹窗可预览完整建库 SQL。\n </p>\n </div>\n <div v-loading=\"schemaLoading\" class=\"mysql-schema-hints mysql-schema-hints--in-tab\">\n <template v-if=\"mysqlSchema\">\n <div v-if=\"!mysqlSchema.error\" class=\"mysql-export-actions\">\n <el-button size=\"small\" :loading=\"mysqlExportLoading\" @click=\"openMysqlExportDialog\">\n 预览建表 SQL(全屏)\n </el-button>\n <span class=\"mysql-export-actions__hint\">\n 弹窗内可浏览、框选复制片段,或使用「复制全部」。\n </span>\n </div>\n <el-alert\n v-if=\"mysqlSchema.error\"\n :closable=\"false\"\n show-icon\n type=\"error\"\n title=\"MySQL schema 检测失败\"\n class=\"mysql-schema-alert\"\n >\n <p>{{ mysqlSchema.error }}</p>\n </el-alert>\n <el-alert\n v-else-if=\"mysqlSchema.pending\"\n type=\"warning\"\n :closable=\"false\"\n show-icon\n class=\"mysql-schema-alert\"\n >\n <div class=\"schema-drift-body\">\n <p>当前数据库与发布包 docs/schema/mysql-schema.json 期望结构不一致。</p>\n <p v-if=\"(mysqlSchema.missingTables ?? []).length\" style=\"margin: 8px 0 0 0;\">\n <strong>缺表:</strong>\n </p>\n <ul v-if=\"(mysqlSchema.missingTables ?? []).length\">\n <li v-for=\"t in (mysqlSchema.missingTables ?? [])\" :key=\"t\">\n {{ t }}\n </li>\n </ul>\n <p v-if=\"(mysqlSchema.missingColumns ?? []).length\" style=\"margin: 8px 0 0 0;\">\n <strong>缺列:</strong>\n </p>\n <ul v-if=\"(mysqlSchema.missingColumns ?? []).length\">\n <li v-for=\"c in mysqlSchema.missingColumns\" :key=\"`${c.table}.${c.column}`\">\n {{ c.table }}.{{ c.column }}\n </li>\n </ul>\n <p v-if=\"(mysqlSchema.typeMismatches ?? []).length\" style=\"margin: 8px 0 0 0;\">\n <strong>列类型不符(normalized):</strong>\n </p>\n <ul v-if=\"(mysqlSchema.typeMismatches ?? []).length\">\n <li v-for=\"m in mysqlSchema.typeMismatches\" :key=\"`${m.table}.${m.column}`\">\n {{ m.table }}.{{ m.column }}\n :库 {{ m.actualComparable }} /\n 期望 {{ m.expectedComparable }}\n </li>\n </ul>\n <el-button type=\"primary\" :loading=\"schemaLoading\" style=\"margin-top: 8px\" @click=\"applyMysqlSchema\">\n 一键对齐表结构\n </el-button>\n </div>\n </el-alert>\n <el-alert\n v-else-if=\"!mysqlSchema.autoSyncSchemaOnStartup\"\n type=\"info\"\n :closable=\"false\"\n show-icon\n title=\"未开启启动时自动同步\"\n class=\"mysql-schema-alert\"\n >\n <p style=\"margin: 0 0 8px 0;\">\n 当前关闭「启动时自动补齐表结构」;建议在版本升级后轮询此处并手动执行对齐。\n </p>\n <el-button size=\"small\" type=\"primary\" :loading=\"schemaLoading\" @click=\"applyMysqlSchema\">\n 检查并补齐表结构\n </el-button>\n </el-alert>\n </template>\n </div>\n </div>\n\n <div class=\"mysql-tool-block mysql-tool-block--solo mysql-merged-section mysql-merged-section--live\">\n <div class=\"mysql-merged-section__head\">\n <h4 class=\"mysql-merged-section__title\">\n 在线库表\n </h4>\n <p class=\"mysql-merged-section__desc\">\n 读取 information_schema(InnoDB 行数为估算);每张表含字段、索引与 SHOW CREATE TABLE。\n </p>\n </div>\n <div v-loading=\"mysqlLiveLoading\" class=\"mysql-live-panel\">\n <el-alert\n v-if=\"mysqlLive?.error\"\n type=\"error\"\n :closable=\"false\"\n show-icon\n title=\"无法读取库表信息\"\n >\n <p>{{ mysqlLive.error }}</p>\n </el-alert>\n <template v-else-if=\"mysqlLive\">\n <p class=\"mysql-live-summary\">\n <span>MySQL {{ mysqlLive.mysqlVersion }}</span>\n <span>库 <strong>{{ mysqlLive.database }}</strong></span>\n <span>共 {{ mysqlLive.tables.length }} 张表</span>\n </p>\n <el-empty v-if=\"!mysqlLive.tables.length\" description=\"当前库中暂无业务表\" />\n <el-collapse v-else v-model=\"mysqlLiveOpenNames\" class=\"mysql-live-collapse\">\n <el-collapse-item v-for=\"tbl in mysqlLive.tables\" :key=\"tbl.name\" :name=\"tbl.name\">\n <template #title>\n <span class=\"mysql-live-collapse-title\">\n <strong>{{ tbl.name }}</strong>\n <span class=\"mysql-live-collapse-meta\">\n {{ tbl.engine || '—' }}\n <span v-if=\"tbl.rowEstimate != null\"> · 约 {{ tbl.rowEstimate.toLocaleString() }} 行</span>\n <span v-if=\"tbl.dataLength != null\"> · 数据 {{ formatBytes(tbl.dataLength) }}</span>\n <span v-if=\"tbl.indexLength != null\"> · 索引 {{ formatBytes(tbl.indexLength) }}</span>\n </span>\n </span>\n </template>\n\n <div class=\"mysql-live-block\">\n <h4>字段</h4>\n <el-table :data=\"tbl.columns\" size=\"small\" border stripe class=\"mysql-live-table\">\n <el-table-column prop=\"name\" label=\"列名\" min-width=\"120\" />\n <el-table-column prop=\"columnType\" label=\"类型\" min-width=\"140\" />\n <el-table-column label=\"可空\" width=\"72\" align=\"center\">\n <template #default=\"{ row }\">\n {{ row.nullable ? 'YES' : 'NO' }}\n </template>\n </el-table-column>\n <el-table-column prop=\"key\" label=\"键\" width=\"84\" />\n <el-table-column label=\"默认值\" min-width=\"100\" show-overflow-tooltip>\n <template #default=\"{ row }\">\n {{ row.default ?? 'NULL' }}\n </template>\n </el-table-column>\n <el-table-column prop=\"extra\" label=\"额外\" width=\"120\" />\n <el-table-column prop=\"comment\" label=\"注释\" min-width=\"120\" show-overflow-tooltip />\n </el-table>\n </div>\n\n <div class=\"mysql-live-block\">\n <h4>索引</h4>\n <el-table v-if=\"tbl.indexes.length\" :data=\"tbl.indexes\" size=\"small\" border stripe class=\"mysql-live-table\">\n <el-table-column prop=\"name\" label=\"索引名\" min-width=\"120\" />\n <el-table-column label=\"唯一\" width=\"72\" align=\"center\">\n <template #default=\"{ row }\">\n {{ row.unique ? '是' : '否' }}\n </template>\n </el-table-column>\n <el-table-column prop=\"indexType\" label=\"类型\" width=\"100\" />\n <el-table-column label=\"列(序)\" min-width=\"200\">\n <template #default=\"{ row }\">\n {{ indexColumnsLabel(row) }}\n </template>\n </el-table-column>\n </el-table>\n <p v-else class=\"mysql-live-muted\">\n 无二级索引(或仅剩主键于信息模式中已展示于「键」列)\n </p>\n </div>\n\n <div class=\"mysql-live-block\">\n <div class=\"mysql-live-ddl-head\">\n <h4>SHOW CREATE TABLE</h4>\n <el-button size=\"small\" @click=\"copyMysqlTableDdl(tbl)\">\n 复制建表 SQL\n </el-button>\n </div>\n <el-input\n :model-value=\"tbl.createSql\"\n type=\"textarea\"\n readonly\n :rows=\"10\"\n class=\"mysql-live-ddl\"\n spellcheck=\"false\"\n />\n </div>\n </el-collapse-item>\n </el-collapse>\n </template>\n </div>\n </div>\n </el-tab-pane>\n\n <el-tab-pane label=\"系统管理员\" :name=\"CONFIG_ADMIN_USERS_TAB\">\n <div class=\"tab-head\">\n <div>\n <h3>系统管理员账号</h3>\n <p>\n 来自业务库 <code>user</code> 表,列出超级管理员与系统管理员。<strong>系统管理员与超级管理员</strong>均可在此新增超级管理员、重置管理员密码;新增规则与「注册」一致(不受站点「关闭注册」影响)。\n </p>\n </div>\n <el-button :loading=\"adminUsersLoading\" :icon=\"Refresh\" @click=\"loadAdminUsers\">\n 刷新列表\n </el-button>\n </div>\n <div v-loading=\"adminUsersLoading\" class=\"admin-users-panel\">\n <el-table :data=\"adminUsersList\" size=\"small\" border stripe class=\"admin-users-table\">\n <el-table-column prop=\"account\" label=\"账号\" min-width=\"120\" />\n <el-table-column prop=\"powerLabel\" label=\"权限\" width=\"120\" />\n <el-table-column prop=\"phoneMasked\" label=\"手机号\" min-width=\"120\" />\n <el-table-column label=\"状态\" width=\"88\">\n <template #default=\"{ row }\">\n {{ adminStatusLabel(row.status) }}\n </template>\n </el-table-column>\n <el-table-column label=\"注册时间\" min-width=\"160\" show-overflow-tooltip>\n <template #default=\"{ row }\">\n {{ row.joinTime || '—' }}\n </template>\n </el-table-column>\n <el-table-column v-if=\"canOperateConfigAdmins\" label=\"操作\" width=\"100\" fixed=\"right\">\n <template #default=\"{ row }\">\n <el-button type=\"primary\" link size=\"small\" @click=\"openAdminResetDialog(row)\">\n 重置密码\n </el-button>\n </template>\n </el-table-column>\n </el-table>\n\n <div v-if=\"canOperateConfigAdmins\" class=\"mysql-tool-block mysql-tool-block--solo admin-create-block\">\n <h3 class=\"mysql-tool-block__title\">\n 新增超级管理员\n </h3>\n <p class=\"mysql-tool-block__desc\">\n 创建后账号权限为「超级管理员」。若站点开启须绑定手机,则需按注册流程校验手机号。\n </p>\n <el-form label-position=\"top\" class=\"admin-create-form\">\n <div class=\"admin-create-grid\">\n <el-form-item label=\"登录账号\">\n <el-input v-model=\"adminCreateForm.account\" maxlength=\"11\" placeholder=\"4-11 位数字或字母\" clearable />\n </el-form-item>\n <el-form-item label=\"密码\">\n <el-input v-model=\"adminCreateForm.pwd1\" type=\"password\" show-password clearable />\n </el-form-item>\n <el-form-item label=\"确认密码\">\n <el-input v-model=\"adminCreateForm.pwd2\" type=\"password\" show-password clearable />\n </el-form-item>\n <el-form-item label=\"绑定手机\">\n <el-checkbox v-model=\"adminCreateForm.bindPhone\" :disabled=\"siteConfig?.needBindPhone\">\n 绑定手机号(与注册一致)\n </el-checkbox>\n </el-form-item>\n <template v-if=\"adminCreateForm.bindPhone\">\n <el-form-item label=\"手机号\">\n <el-input v-model=\"adminCreateForm.phone\" maxlength=\"11\" clearable />\n </el-form-item>\n <el-form-item label=\"验证码\">\n <div class=\"code-row\">\n <el-input v-model=\"adminCreateForm.code\" maxlength=\"4\" clearable />\n <el-button :disabled=\"adminCodeTime > 0\" @click=\"getAdminCreateCode\">\n {{ adminCodeText }}\n </el-button>\n </div>\n </el-form-item>\n </template>\n </div>\n <el-button type=\"primary\" :loading=\"adminCreateSubmitting\" @click=\"submitCreateAdminUser\">\n 创建超级管理员\n </el-button>\n </el-form>\n </div>\n </div>\n\n <el-dialog\n v-model=\"adminResetVisible\"\n title=\"重置管理员密码\"\n width=\"420px\"\n destroy-on-close\n @closed=\"closeAdminResetDialog\"\n >\n <p v-if=\"adminResetRow\" class=\"admin-reset-hint\">\n 账号 <strong>{{ adminResetRow.account }}</strong>({{ adminResetRow.powerLabel }})\n </p>\n <el-form label-position=\"top\" class=\"admin-reset-form\">\n <el-form-item label=\"新密码\">\n <el-input v-model=\"adminResetPwd1\" type=\"password\" show-password clearable autocomplete=\"new-password\" />\n </el-form-item>\n <el-form-item label=\"确认新密码\">\n <el-input v-model=\"adminResetPwd2\" type=\"password\" show-password clearable autocomplete=\"new-password\" />\n </el-form-item>\n </el-form>\n <template #footer>\n <el-button @click=\"closeAdminResetDialog\">\n 取消\n </el-button>\n <el-button type=\"primary\" :loading=\"adminResetSubmitting\" @click=\"submitAdminResetPassword\">\n 确定重置\n </el-button>\n </template>\n </el-dialog>\n </el-tab-pane>\n </el-tabs>\n\n <div v-if=\"currentConfig\" class=\"bottom-actions-row\">\n <p class=\"bottom-actions-hint\">\n 与当前 Tab 右上角「保存 {{ currentConfig.title }}」是同一功能;表单项较多时滚到此处保存即可。\n </p>\n <el-button\n type=\"primary\"\n :loading=\"savingMap[currentConfig.type]\"\n @click=\"updateCfgGroup(currentConfig)\"\n >\n 保存当前服务配置\n </el-button>\n </div>\n </div>\n </section>\n\n <Teleport to=\"body\">\n <div\n v-if=\"mysqlExportDialogVisible\"\n class=\"mysql-export-fs\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"mysql-export-fs-title\"\n >\n <div class=\"mysql-export-fs__shell\">\n <header class=\"mysql-export-fs__head\">\n <h2 id=\"mysql-export-fs-title\" class=\"mysql-export-fs__title\">\n 完整建表 SQL(mysql-schema.json)\n </h2>\n <div class=\"mysql-export-fs__head-actions\">\n <el-button size=\"small\" @click=\"closeMysqlExportDialog\">\n 关闭\n </el-button>\n </div>\n </header>\n <div v-loading=\"mysqlExportLoading\" class=\"mysql-export-fs__main\">\n <el-alert\n v-if=\"mysqlExportError\"\n type=\"error\"\n :closable=\"false\"\n show-icon\n :title=\"mysqlExportError\"\n />\n <template v-else>\n <p v-if=\"mysqlExportDescription\" class=\"mysql-export-fs__desc\">\n {{ mysqlExportDescription }}\n </p>\n <p class=\"mysql-export-fs__hint\">\n 在下方可直接框选复制局部语句;需要整段请点底部「复制全部」。\n </p>\n <textarea\n v-model=\"mysqlExportSql\"\n readonly\n spellcheck=\"false\"\n class=\"mysql-export-fs__textarea\"\n placeholder=\"正在加载…\"\n />\n </template>\n </div>\n <footer class=\"mysql-export-fs__foot\">\n <el-button @click=\"closeMysqlExportDialog\">\n 关闭\n </el-button>\n <el-button\n type=\"primary\"\n :disabled=\"!mysqlExportSql.trim() || !!mysqlExportError\"\n @click=\"copyMysqlExportSqlAll\"\n >\n 复制全部\n </el-button>\n </footer>\n </div>\n </div>\n </Teleport>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.config-page {\n max-width: 1256px;\n margin: 10px auto;\n color: #1f2937;\n}\n\n.hero-card,\n.panel {\n box-sizing: border-box;\n border: 1px solid #edf0f5;\n border-radius: 18px;\n background: #fff;\n box-shadow: 0 10px 30px rgb(31 41 55 / 8%);\n}\n\n.hero-card {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 24px;\n padding: 28px 32px;\n overflow: hidden;\n background:\n radial-gradient(circle at 88% 20%, rgb(64 158 255 / 18%), transparent 28%),\n linear-gradient(135deg, #fff 0%, #f6f9ff 100%);\n\n h1 {\n margin: 6px 0 10px;\n font-size: 30px;\n line-height: 1.2;\n }\n}\n\n.eyebrow {\n margin: 0;\n color: #409eff;\n font-size: 13px;\n font-weight: 700;\n letter-spacing: 0.12em;\n}\n\n.hero-desc {\n max-width: 640px;\n margin: 0;\n color: #6b7280;\n line-height: 1.7;\n}\n\n.hero-stats {\n display: grid;\n grid-template-columns: repeat(3, 92px);\n gap: 10px;\n\n div {\n display: grid;\n place-items: center;\n min-height: 92px;\n border-radius: 20px;\n background: rgb(255 255 255 / 74%);\n box-shadow: inset 0 0 0 1px rgb(64 158 255 / 12%);\n }\n\n strong {\n color: #2563eb;\n font-size: 32px;\n line-height: 1;\n }\n\n span {\n color: #6b7280;\n font-size: 13px;\n }\n}\n\n.panel {\n margin-top: 18px;\n padding: 24px;\n}\n\n.section-head {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 20px;\n\n &.compact {\n margin-bottom: 12px;\n }\n\n h2 {\n margin: 0 0 6px;\n font-size: 20px;\n }\n\n p {\n margin: 0;\n color: #6b7280;\n line-height: 1.6;\n }\n}\n\n.service-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n gap: 14px;\n}\n\n.service-card {\n padding: 16px;\n border: 1px solid #e8edf5;\n border-radius: 14px;\n background: #fbfdff;\n\n &.error {\n background: #fff8f8;\n }\n}\n\n.service-card-head {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n\n h3 {\n margin: 0 0 6px;\n font-size: 17px;\n }\n\n p {\n margin: 0;\n color: #6b7280;\n font-size: 13px;\n line-height: 1.5;\n }\n}\n\n.service-meta {\n display: grid;\n gap: 8px;\n margin-top: 14px;\n color: #8a94a6;\n font-size: 13px;\n}\n\n.error-text,\n.error-list span {\n color: #d03050;\n word-break: break-all;\n}\n\n.error-list {\n display: grid;\n gap: 8px;\n\n p {\n margin: 0;\n line-height: 1.6;\n }\n}\n\n.config-tabs {\n :deep(.el-tabs__header) {\n margin-bottom: 14px;\n }\n\n :deep(.el-tabs__nav-wrap::after) {\n height: 1px;\n background-color: #edf0f5;\n }\n\n :deep(.el-tabs__item) {\n height: 36px;\n padding: 0 18px;\n color: #6b7280;\n font-weight: 700;\n }\n}\n\n.tab-head {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 14px;\n padding: 12px 14px;\n border-radius: 12px;\n background: #f7faff;\n\n h3 {\n margin: 0 0 5px;\n font-size: 16px;\n }\n\n p {\n margin: 0;\n color: #6b7280;\n line-height: 1.5;\n }\n}\n\n.field-list {\n display: grid;\n gap: 12px;\n}\n\n.config-form :deep(.el-form-item) {\n margin-bottom: 0;\n}\n\n.field-item {\n min-width: 0;\n display: grid;\n grid-template-columns: minmax(180px, 1fr) minmax(220px, 380px);\n align-items: center;\n gap: 16px;\n padding: 12px 14px;\n border: 1px solid #edf0f5;\n border-radius: 12px;\n background: #fff;\n\n :deep(.el-form-item__label) {\n margin-bottom: 0;\n padding-right: 0;\n line-height: 1.4;\n }\n\n :deep(.el-form-item__content) {\n min-width: 0;\n }\n}\n\n.field-label,\n.field-desc {\n display: block;\n}\n\n.field-label {\n color: #1f2937;\n font-size: 14px;\n font-weight: 700;\n}\n\n.field-desc {\n margin-top: 3px;\n color: #8a94a6;\n font-size: 13px;\n}\n\n.full-control {\n width: 100%;\n}\n\n.bottom-actions-row {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n flex-wrap: wrap;\n gap: 12px 16px;\n margin-top: 18px;\n}\n\n.bottom-actions-hint {\n flex: 1 1 220px;\n margin: 0;\n margin-right: auto;\n min-width: 0;\n color: #6b7280;\n font-size: 13px;\n line-height: 1.5;\n}\n\n.mysql-live-panel {\n min-height: 120px;\n}\n\n.mysql-tool-block {\n margin-top: 28px;\n padding: 20px 18px;\n border: 1px solid #edf0f5;\n border-radius: 14px;\n background: #fbfdff;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.mysql-tool-block__head {\n margin-bottom: 14px;\n\n &--row {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px 20px;\n }\n}\n\n.mysql-tool-block__title {\n margin: 0 0 6px;\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.mysql-tool-block__desc {\n margin: 0;\n color: #6b7280;\n font-size: 13px;\n line-height: 1.5;\n}\n\n.mysql-schema-hints--in-tab {\n margin-top: 4px;\n}\n\n.mysql-export-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px 12px;\n margin-bottom: 12px;\n}\n\n.mysql-export-actions__hint {\n color: var(--el-text-color-secondary);\n font-size: 13px;\n}\n\n.mysql-schema-alert {\n margin-bottom: 12px;\n}\n\n.mysql-tool-block--solo {\n margin-top: 16px;\n}\n\n.mysql-merged-section {\n margin-top: 0;\n}\n\n.mysql-merged-section--live {\n margin-top: 20px;\n}\n\n.mysql-merged-section__head {\n margin-bottom: 12px;\n}\n\n.mysql-merged-section__title {\n margin: 0 0 6px;\n font-size: 16px;\n font-weight: 600;\n color: #303133;\n}\n\n.mysql-merged-section__desc {\n margin: 0;\n font-size: 13px;\n line-height: 1.5;\n color: #606266;\n}\n\n.admin-users-panel {\n margin-top: 8px;\n}\n\n.admin-users-table {\n width: 100%;\n margin-bottom: 24px;\n}\n\n.admin-create-block {\n margin-top: 8px;\n}\n\n.admin-create-form {\n max-width: 720px;\n}\n\n.admin-create-grid {\n display: grid;\n gap: 4px 20px;\n grid-template-columns: repeat(2, minmax(200px, 1fr));\n margin-bottom: 12px;\n}\n\n.code-row {\n display: flex;\n gap: 10px;\n align-items: center;\n width: 100%;\n\n .el-input {\n flex: 1;\n }\n}\n\n.field-hint-muted {\n margin: 6px 0 0;\n color: #8a94a6;\n font-size: 12px;\n}\n\n.admin-reset-hint {\n margin: 0 0 12px;\n color: #606266;\n font-size: 14px;\n}\n\n@media screen and (max-width: 700px) {\n .admin-create-grid {\n grid-template-columns: 1fr;\n }\n}\n\n.mysql-live-summary {\n display: flex;\n flex-wrap: wrap;\n gap: 10px 18px;\n margin: 0 0 14px;\n color: #6b7280;\n font-size: 13px;\n line-height: 1.5;\n}\n\n.mysql-live-collapse {\n border: none;\n\n :deep(.el-collapse-item__header) {\n height: auto;\n min-height: 48px;\n padding: 10px 12px;\n line-height: 1.4;\n background: #fbfdff;\n }\n\n :deep(.el-collapse-item__wrap) {\n border-bottom: 1px solid #edf0f5;\n }\n\n :deep(.el-collapse-item__content) {\n padding-bottom: 16px;\n }\n}\n\n.mysql-live-collapse-title {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: 8px 14px;\n width: 100%;\n padding-right: 8px;\n}\n\n.mysql-live-collapse-meta {\n color: #8a94a6;\n font-size: 13px;\n font-weight: 400;\n}\n\n.mysql-live-block {\n margin-top: 16px;\n\n h4 {\n margin: 0 0 10px;\n font-size: 14px;\n color: #374151;\n }\n}\n\n.mysql-live-table {\n width: 100%;\n}\n\n.mysql-live-muted {\n margin: 0;\n color: #8a94a6;\n font-size: 13px;\n}\n\n.mysql-live-ddl-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n.mysql-live-ddl {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\n font-size: 12px;\n}\n\n.tab-head code {\n padding: 1px 6px;\n border-radius: 4px;\n background: rgb(64 158 255 / 12%);\n font-size: 12px;\n}\n\n@media screen and (max-width: 900px) {\n .config-page {\n margin-top: 40px;\n }\n\n .hero-card {\n align-items: flex-start;\n flex-direction: column;\n padding: 22px;\n }\n\n .hero-stats {\n width: 100%;\n grid-template-columns: repeat(3, 1fr);\n }\n\n .field-item {\n grid-template-columns: 1fr;\n gap: 8px;\n }\n}\n\n@media screen and (max-width: 700px) {\n .config-page {\n margin: 40px 10px 0;\n }\n\n .panel {\n padding: 18px;\n border-radius: 14px;\n }\n\n .section-head,\n .tab-head {\n display: block;\n }\n\n .section-head .el-button,\n .tab-head .el-button {\n width: 100%;\n margin-top: 14px;\n }\n\n .hero-stats {\n grid-template-columns: 1fr;\n }\n\n .config-tabs :deep(.el-tabs__nav-scroll) {\n overflow-x: auto;\n }\n\n .field-item {\n padding: 12px;\n }\n\n .bottom-actions-row {\n flex-direction: column;\n align-items: stretch;\n }\n\n .bottom-actions-hint {\n margin-right: 0;\n }\n\n .bottom-actions-row .el-button {\n width: 100%;\n }\n}\n</style>\n\n<!-- Teleport 全屏预览:挂载到 body,样式独立于 scoped -->\n<style lang=\"scss\">\n.mysql-export-fs {\n position: fixed;\n inset: 0;\n z-index: 3000;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n background: var(--el-bg-color, #fff);\n}\n\n.mysql-export-fs__shell {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n min-width: 0;\n width: 100%;\n height: 100%;\n background: inherit;\n}\n\n.mysql-export-fs__head {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 14px 18px;\n border-bottom: 1px solid var(--el-border-color-lighter, #ebeef5);\n box-sizing: border-box;\n}\n\n.mysql-export-fs__title {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--el-text-color-primary);\n}\n\n.mysql-export-fs__main {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding: 12px 18px;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n.mysql-export-fs__desc {\n margin: 0;\n flex-shrink: 0;\n font-size: 13px;\n line-height: 1.5;\n color: var(--el-text-color-secondary);\n}\n\n.mysql-export-fs__hint {\n margin: 0;\n flex-shrink: 0;\n font-size: 13px;\n line-height: 1.5;\n color: var(--el-text-color-regular);\n}\n\n.mysql-export-fs__textarea {\n flex: 1 1 0;\n min-height: 0;\n width: 100%;\n resize: none;\n box-sizing: border-box;\n padding: 12px 14px;\n border: 1px solid var(--el-border-color, #dcdfe6);\n border-radius: var(--el-border-radius-base, 4px);\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\n font-size: 13px;\n line-height: 1.5;\n tab-size: 2;\n color: var(--el-text-color-primary);\n background: var(--el-fill-color-blank, #fff);\n cursor: text;\n overflow-y: auto;\n}\n\n.mysql-export-fs__textarea:focus-visible {\n outline: 2px solid var(--el-color-primary);\n outline-offset: 0;\n}\n\n.mysql-export-fs__foot {\n flex-shrink: 0;\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n padding: 12px 18px;\n border-top: 1px solid var(--el-border-color-lighter, #ebeef5);\n box-sizing: border-box;\n}\n</style>\n"],"names":["collapseContextKey","emitChangeFn","value","isNumber","collapseProps","buildProps","definePropType","mutable","collapseEmits","UPDATE_MODEL_EVENT","CHANGE_EVENT","__default__","_sfc_main","defineComponent","__props","expose","emit","props","ns","useNamespace","activeNames","ref","castArray","setActiveNames","_activeNames","handleItemClick","name","index","watch","provide","_ctx","_cache","openBlock","createElementBlock","normalizeClass","unref","renderSlot","Collapse","_export_sfc","collapseItemProps","generateId","_hoisted_1","_hoisted_2","_hoisted_3","collapse","inject","focusing","isClick","id","isActive","computed","handleFocus","handleHeaderClick","handleEnterClick","createElementVNode","withKeys","withModifiers","$event","createTextVNode","toDisplayString","createVNode","ElIcon","withCtx","ArrowRight","_CollapseTransition","withDirectives","vShow","CollapseItem","ElCollapse","withInstall","ElCollapseItem","withNoopInstall","getServiceOverview","ajax","getMysqlSchema","getMysqlSchemaExportSql","applyMysqlSchema","getMysqlLiveIntrospect","checkMysqlDatabase","body","listConfigAdminUsers","createConfigAdminUser","resetConfigAdminUserPassword","getServiceConfig","updateCfg","data","ConfigServiceAPI","MYSQL_INTROSPECT_TAB","CONFIG_ADMIN_USERS_TAB","siteConfig","useSiteConfig","mysqlSchema","schemaLoading","mysqlExportDialogVisible","mysqlExportLoading","mysqlExportSql","mysqlExportDescription","mysqlExportError","serviceOverview","serverConfig","loading","configLoading","activeConfigTab","savingMap","reactive","overviewStats","total","running","item","required","optional","showErrorList","showMysqlToolTabs","s","mysqlLive","mysqlLiveLoading","mysqlLiveOpenNames","currentConfig","isActiveConfigTabValid","getServiceTagType","service","getServiceTagText","isBooleanConfig","isNumberConfig","updateConfigValue","loadMysqlSchema","e","loadMysqlLiveIntrospect","formatBytes","n","units","v","i","indexColumnsLabel","idx","c","p","copyMysqlTableDdl","tbl","text","_b","_a","ElMessage","refreshStatus","openMysqlExportDialog","_c","onMysqlExportDialogClosed","closeMysqlExportDialog","adminUsersLoading","adminUsersList","loginIsSuper","loginIsSystem","canOperateConfigAdmins","adminCreateForm","adminCreateSubmitting","adminResetVisible","adminResetRow","adminResetPwd1","adminResetPwd2","adminResetSubmitting","adminCodeText","adminCodeTime","refreshAdminCodeText","getAdminCreateCode","rMobilePhone","PublicApi","adminStatusLabel","status","loadLoginPower","UserApi","loadAdminUsers","need","checkAdminCreateForm","rAccount","rPassword","rVerCode","submitCreateAdminUser","openAdminResetDialog","row","closeAdminResetDialog","submitAdminResetPassword","open","copyMysqlExportSqlAll","showSuccess","configMysqlDataToCheckBody","items","pick","it","k","updateCfgGroup","group","check","autoItem","dbName","msg","ElMessageBox","onMounted","refreshMysqlToolsTab","t"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5]}
@@ -0,0 +1 @@
1
+ h1[data-v-a3fa2333],h2[data-v-a3fa2333],h3[data-v-a3fa2333],h4[data-v-a3fa2333]{font-weight:500}.about[data-v-a3fa2333]{background-image:linear-gradient(120deg,#a1c4fd,#c2e9fb);min-height:100vh}main[data-v-a3fa2333]{max-width:860px;margin:0 auto;padding:20px}main .panel[data-v-a3fa2333]{position:relative;margin:0 auto 10px;padding:16px 20px;width:100%;overflow:hidden;border-radius:.25rem;box-shadow:#eee;box-sizing:border-box;transition:all .3s;background-color:#fff}main .logo[data-v-a3fa2333]{width:100%;max-width:520px;margin:0 auto;display:block}main h1[data-v-a3fa2333]{font-size:1.6rem;margin-bottom:10px}main h2[data-v-a3fa2333]{font-size:1.3rem;margin-bottom:12px}main ul[data-v-a3fa2333],main ol[data-v-a3fa2333]{margin-left:20px;font-size:15px;margin-bottom:1em}main p[data-v-a3fa2333]{font-size:15px;margin-bottom:1em}main a[data-v-a3fa2333]{color:#409eff}
@@ -0,0 +1 @@
1
+ .not-found[data-v-c4535c7c]{font-family:Avenir,Helvetica,Arial,sans-serif;background-image:linear-gradient(to top,#30cfd0,#330867);min-height:100vh}h1[data-v-c4535c7c],h2[data-v-c4535c7c],h3[data-v-c4535c7c],a[data-v-c4535c7c]{color:#f0f8ff;text-align:center;font-weight:lighter}a[data-v-c4535c7c]{margin-left:10px;border-bottom:2px solid aliceblue;cursor:pointer}h1[data-v-c4535c7c]{font-size:48px;padding-top:10%}h2[data-v-c4535c7c]{font-size:30px;padding-top:2vh}h3[data-v-c4535c7c]{font-size:28px;padding-top:1vh}
@@ -0,0 +1 @@
1
+ @charset "UTF-8";.task-panel[data-v-7bb49be2] ul.el-upload-list{border:1px dashed #d4d4d4;padding:10px}.task-panel[data-v-7bb49be2] ul.el-upload-list:before{content:"此处展示选择文件列表";font-size:12px;position:relative;bottom:4px}.task-panel[data-v-7bb49be2] .el-upload-list__item-name{display:block;overflow:hidden;max-width:290px;text-overflow:ellipsis;word-break:keep-all}.task-panel[data-v-7bb49be2] .is-ready .el-icon--close{display:block;color:#000}.task-panel[data-v-7bb49be2]{background-color:#f3f6f8;padding-bottom:1rem;position:relative}.pc-nav[data-v-7bb49be2]{background-color:#fff;display:flex;padding:10px;justify-content:space-between;align-items:center}.pc-nav .exit[data-v-7bb49be2]{cursor:pointer}.pc-nav .nav[data-v-7bb49be2]{display:flex}.pc-nav .nav nav[data-v-7bb49be2]{display:flex;align-items:center}.pc-nav .nav nav .nav-item[data-v-7bb49be2]{font-size:1rem;color:#595959;padding:10px;cursor:pointer}.pc-nav .nav nav .nav-item.active[data-v-7bb49be2]{color:#409eff!important;font-weight:600}.pc-nav .nav .exit[data-v-7bb49be2]{color:#595959}.pc-nav .logo[data-v-7bb49be2]{width:180px;margin:0 10px}.pc-nav .logo img[data-v-7bb49be2]{height:40px}.panel[data-v-7bb49be2]{max-width:1024px;padding:1em;background-color:#fff;margin:10px auto;box-sizing:border-box;box-shadow:0 2px 12px rgba(0,0,0,.1);border-radius:4px}.panel .name[data-v-7bb49be2]{text-align:center}.panel .ddl[data-v-7bb49be2]{margin-top:10px;color:#919191;font-size:14px}.panel .infos[data-v-7bb49be2]{max-width:460px;margin:auto;overflow:hidden}.panel .infos[data-v-7bb49be2] div.el-form-item>label{font-weight:700}.panel .infos[data-v-7bb49be2] div.el-form-item>label:before{content:"* ";color:red}.withdraw[data-v-7bb49be2]{text-align:right}.tip-wrapper[data-v-7bb49be2]{line-height:20px;text-align:left;word-break:break-all;overflow:hidden;padding:0 20px;color:#e6a23c;max-width:320px;font-size:14px}
@@ -1 +1 @@
1
- {"version":3,"file":"index-BrOLxzFM.js","sources":["../../src/constants/index.ts"],"sourcesContent":["/**\n * 用户状态\n */\nexport enum USER_STATUS {\n /**\n * 正常\n */\n NORMAL,\n /**\n * 冻结\n */\n FREEZE,\n /**\n * 封禁\n */\n BAN\n}\n\nexport enum WishStatus {\n /**\n * 审核中\n */\n REVIEW,\n /**\n * 待开始\n */\n WAIT,\n /**\n * 开发中\n */\n START,\n /**\n * 已上线\n */\n END,\n /**\n * 关闭\n */\n CLOSE\n}\n\nexport enum ActionType {\n /**\n * 点赞\n */\n PRAISE,\n\n /**\n * 文件下载\n */\n Download,\n\n /**\n * 文件归档\n */\n Compress,\n\n /**\n * 路由禁用\n */\n DisabledRoute\n}\n\nexport enum DownloadStatus {\n /**\n * 归档中\n */\n ARCHIVE,\n /**\n * 链接已失效\n */\n EXPIRED,\n /**\n * 可下载\n */\n SUCCESS,\n /**\n * 归档失败\n */\n FAIL\n}\n\nexport const filenamePattern = /[\\\\/:*?\"<>|]/g\n"],"names":["USER_STATUS","USER_STATUS2","WishStatus","WishStatus2","ActionType","ActionType2","DownloadStatus","DownloadStatus2","filenamePattern"],"mappings":"AAGY,IAAAA,GAAAA,IAIVA,EAAAC,EAAA,OAAA,CAAA,EAAA,SAIAD,EAAAC,EAAA,OAAA,CAAA,EAAA,SAIAD,EAAAC,EAAA,IAAA,CAAA,EAAA,MAZUD,IAAAA,GAAA,CAAA,CAAA,EAeAE,GAAAA,IAIVA,EAAAC,EAAA,OAAA,CAAA,EAAA,SAIAD,EAAAC,EAAA,KAAA,CAAA,EAAA,OAIAD,EAAAC,EAAA,MAAA,CAAA,EAAA,QAIAD,EAAAC,EAAA,IAAA,CAAA,EAAA,MAIAD,EAAAC,EAAA,MAAA,CAAA,EAAA,QApBUD,IAAAA,GAAA,CAAA,CAAA,EAuBAE,GAAAA,IAIVA,EAAAC,EAAA,OAAA,CAAA,EAAA,SAKAD,EAAAC,EAAA,SAAA,CAAA,EAAA,WAKAD,EAAAC,EAAA,SAAA,CAAA,EAAA,WAKAD,EAAAC,EAAA,cAAA,CAAA,EAAA,gBAnBUD,IAAAA,GAAA,CAAA,CAAA,EAsBAE,GAAAA,IAIVA,EAAAC,EAAA,QAAA,CAAA,EAAA,UAIAD,EAAAC,EAAA,QAAA,CAAA,EAAA,UAIAD,EAAAC,EAAA,QAAA,CAAA,EAAA,UAIAD,EAAAC,EAAA,KAAA,CAAA,EAAA,OAhBUD,IAAAA,GAAA,CAAA,CAAA,EAmBL,MAAME,EAAkB"}
1
+ {"version":3,"file":"index-BrOLxzFM.js","sources":["../../src/constants/index.ts"],"sourcesContent":["/**\n * 用户状态\n */\nexport enum USER_STATUS {\n /**\n * 正常\n */\n NORMAL,\n /**\n * 冻结\n */\n FREEZE,\n /**\n * 封禁\n */\n BAN,\n}\n\nexport enum WishStatus {\n /**\n * 审核中\n */\n REVIEW,\n /**\n * 待开始\n */\n WAIT,\n /**\n * 开发中\n */\n START,\n /**\n * 已上线\n */\n END,\n /**\n * 关闭\n */\n CLOSE,\n}\n\nexport enum ActionType {\n /**\n * 点赞\n */\n PRAISE,\n\n /**\n * 文件下载\n */\n Download,\n\n /**\n * 文件归档\n */\n Compress,\n\n /**\n * 路由禁用\n */\n DisabledRoute,\n}\n\nexport enum DownloadStatus {\n /**\n * 归档中\n */\n ARCHIVE,\n /**\n * 链接已失效\n */\n EXPIRED,\n /**\n * 可下载\n */\n SUCCESS,\n /**\n * 归档失败\n */\n FAIL,\n}\n\nexport const filenamePattern = /[\\\\/:*?\"<>|]/g\n"],"names":["USER_STATUS","USER_STATUS2","WishStatus","WishStatus2","ActionType","ActionType2","DownloadStatus","DownloadStatus2","filenamePattern"],"mappings":"AAGY,IAAAA,GAAAA,IAIVA,EAAAC,EAAA,OAAA,CAAA,EAAA,SAIAD,EAAAC,EAAA,OAAA,CAAA,EAAA,SAIAD,EAAAC,EAAA,IAAA,CAAA,EAAA,MAZUD,IAAAA,GAAA,CAAA,CAAA,EAeAE,GAAAA,IAIVA,EAAAC,EAAA,OAAA,CAAA,EAAA,SAIAD,EAAAC,EAAA,KAAA,CAAA,EAAA,OAIAD,EAAAC,EAAA,MAAA,CAAA,EAAA,QAIAD,EAAAC,EAAA,IAAA,CAAA,EAAA,MAIAD,EAAAC,EAAA,MAAA,CAAA,EAAA,QApBUD,IAAAA,GAAA,CAAA,CAAA,EAuBAE,GAAAA,IAIVA,EAAAC,EAAA,OAAA,CAAA,EAAA,SAKAD,EAAAC,EAAA,SAAA,CAAA,EAAA,WAKAD,EAAAC,EAAA,SAAA,CAAA,EAAA,WAKAD,EAAAC,EAAA,cAAA,CAAA,EAAA,gBAnBUD,IAAAA,GAAA,CAAA,CAAA,EAsBAE,GAAAA,IAIVA,EAAAC,EAAA,QAAA,CAAA,EAAA,UAIAD,EAAAC,EAAA,QAAA,CAAA,EAAA,UAIAD,EAAAC,EAAA,QAAA,CAAA,EAAA,UAIAD,EAAAC,EAAA,KAAA,CAAA,EAAA,OAhBUD,IAAAA,GAAA,CAAA,CAAA,EAmBL,MAAME,EAAkB"}
@@ -0,0 +1,2 @@
1
+ import{d as e,_ as F,h as d,a as f,c as i,b as a,i as s,w as l,z as r,e as t}from"./index-uNaj-154.js";const n=e({setup(){return{}}}),A={class:"about"},o={class:"panel"},v={class:"panel"};function p(B,u,D,g,h,C){const E=d("router-link");return f(),i("div",A,[a("main",null,[a("div",o,[s(E,{to:"/"},{default:l(()=>u[0]||(u[0]=[a("img",{class:"logo",src:"https://img.cdn.sugarat.top/easypicker/EasyPicker.png"},null,-1)])),_:1})]),u[5]||(u[5]=a("div",{class:"panel"},[a("h1",null,"简介"),a("p",null,"在线文件收取助手,帮助用户快速的完成一对多的文件收取")],-1)),a("div",v,[u[4]||(u[4]=r('<h1 data-v-a3fa2333>诞生背景</h1><p data-v-a3fa2333>校园学习或者工作场景中会有以下几个场景:</p><ul data-v-a3fa2333><li data-v-a3fa2333><strong data-v-a3fa2333>电子文件:</strong> 班委向同学收取各种实验电子报告</li><li data-v-a3fa2333><strong data-v-a3fa2333>图片:</strong> 收取各种截图证明/活动照片</li><li data-v-a3fa2333>...</li></ul><p data-v-a3fa2333>目前最广泛的收取方式为,通过邮箱,QQ,微信等通讯工具传递</p><p data-v-a3fa2333>弊端显而易见,不方便整理统计。还占用电脑/手机内存</p><p data-v-a3fa2333>为了解决这个问题,此项目应运而生</p><p data-v-a3fa2333>当然<span data-v-a3fa2333><strong data-v-a3fa2333>市面上也有几款类似的办公工具</strong></span> ,功能及使用方式都差不多</p><p data-v-a3fa2333>本项目<strong data-v-a3fa2333>是 <a href="https://github.com/ATQQ/easypicker2-client" data-v-a3fa2333>开源</a> 的</strong></p>',8)),a("p",null,[u[2]||(u[2]=t(" 如有私有化的需求,可自行部署使用(也可 ")),s(E,{to:"/author"},{default:l(()=>u[1]||(u[1]=[t(" 联系作者 ")])),_:1}),u[3]||(u[3]=t(" 提供帮助) "))])]),u[6]||(u[6]=r('<div class="panel" data-v-a3fa2333><h1 data-v-a3fa2333>现有功能 <span style="color:grey;font-size:0.8rem;" data-v-a3fa2333>(用户关心的)</span></h1><h2 data-v-a3fa2333>收集任务</h2><ul data-v-a3fa2333><li data-v-a3fa2333><strong data-v-a3fa2333>分类管理: </strong> 收集任务支持分类管理</li><li data-v-a3fa2333><strong data-v-a3fa2333>设置DDL(截止日期): </strong> 任务截止后不可再提交文件</li><li data-v-a3fa2333><strong data-v-a3fa2333>限制提交人员: </strong> 非指定的人员(姓名),无法提交文件</li><li data-v-a3fa2333><strong data-v-a3fa2333>设置模板文件: </strong> 提交者可直接在提交页面下载此文件</li><li data-v-a3fa2333><strong data-v-a3fa2333>自动重命名: </strong> 提交的文件按填写表单信息进行自动重名(如:姓名-工号.后缀)</li></ul><h2 data-v-a3fa2333>文件相关</h2><ul data-v-a3fa2333><li data-v-a3fa2333><strong data-v-a3fa2333>上传(提交): </strong>单个/多个</li><li data-v-a3fa2333><strong data-v-a3fa2333>下载: </strong>单个/多个/按收集任务</li><li data-v-a3fa2333><strong data-v-a3fa2333>撤回: </strong>用户可以撤回自己提交的文件</li><li data-v-a3fa2333><strong data-v-a3fa2333>分享: </strong>用户可以将文件下载链接分享给朋友</li><li data-v-a3fa2333><strong data-v-a3fa2333>模板下载: </strong> 下载任务发布者设置的模板文件</li><li data-v-a3fa2333><strong data-v-a3fa2333>导出: </strong> 导出提交记录</li></ul></div><div class="panel" data-v-a3fa2333><h1 data-v-a3fa2333>相关链接</h1><h2 data-v-a3fa2333>应用链接相关</h2><ul data-v-a3fa2333><li data-v-a3fa2333><a href="https://docs.ep.sugarat.top" target="_blank" rel="noopener noreferrer" data-v-a3fa2333>私有化部署</a></li><li data-v-a3fa2333><a target="_blank" href="https://ep.sugarat.top" data-v-a3fa2333>Easypicker1.0</a></li><li data-v-a3fa2333><a target="_blank" href="https://ep2.sugarat.top" data-v-a3fa2333>Easypicker2.0</a></li></ul><h2 data-v-a3fa2333>应用源代码 <span style="color:grey;font-size:0.8rem;" data-v-a3fa2333>(开发者需要的)</span></h2><ul data-v-a3fa2333><li data-v-a3fa2333><a target="_blank" href="https://github.com/ATQQ/EasyPicker-webpack" data-v-a3fa2333>Easypicker1.0-客户端</a></li><li data-v-a3fa2333><a target="_blank" href="https://github.com/ATQQ/easypicker-server" data-v-a3fa2333>Easypicker1.0-服务端</a></li></ul><ul data-v-a3fa2333><li data-v-a3fa2333><a target="_blank" href="https://github.com/ATQQ/easypicker2-client" data-v-a3fa2333>Easypicker2.0-客户端</a></li><li data-v-a3fa2333><a target="_blank" href="https://github.com/ATQQ/easypicker2-server" data-v-a3fa2333>Easypicker2.0-服务端</a></li></ul><ul data-v-a3fa2333><li data-v-a3fa2333><a target="_blank" href="https://github.com/ATQQ/vite-vue3-template" data-v-a3fa2333>Easypicker2.0-客户端模板仓库</a></li><li data-v-a3fa2333><a target="_blank" href="https://github.com/ATQQ/node-server" data-v-a3fa2333>Easypicker2.0-服务端模板仓库</a></li></ul><h2 data-v-a3fa2333>作者 <span style="color:grey;font-size:0.8rem;" data-v-a3fa2333>(夹带私货)</span></h2><ul data-v-a3fa2333><li data-v-a3fa2333><a target="_blank" href="https://sugarat.top" data-v-a3fa2333>博客</a></li><li data-v-a3fa2333><a target="_blank" href="https://github.com/ATQQ" data-v-a3fa2333>GitHub</a></li><li data-v-a3fa2333><a target="_blank" href="https://juejin.cn/user/1028798615918983" data-v-a3fa2333>掘金</a></li></ul></div>',2))])])}const k=F(n,[["render",p],["__scopeId","data-v-a3fa2333"]]);export{k as default};
2
+ //# sourceMappingURL=index-Bx68sw-c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Bx68sw-c.js","sources":["../../src/pages/about/index.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n setup() {\n return {\n\n }\n },\n})\n</script>\n\n<template>\n <div class=\"about\">\n <main>\n <div class=\"panel\">\n <router-link to=\"/\">\n <img class=\"logo\" src=\"https://img.cdn.sugarat.top/easypicker/EasyPicker.png\">\n </router-link>\n </div>\n <div class=\"panel\">\n <h1>简介</h1>\n <p>在线文件收取助手,帮助用户快速的完成一对多的文件收取</p>\n </div>\n <div class=\"panel\">\n <h1>诞生背景</h1>\n <p>校园学习或者工作场景中会有以下几个场景:</p>\n <ul>\n <li><strong>电子文件:</strong> 班委向同学收取各种实验电子报告</li>\n <li><strong>图片:</strong> 收取各种截图证明/活动照片</li>\n <li>...</li>\n </ul>\n <p>目前最广泛的收取方式为,通过邮箱,QQ,微信等通讯工具传递</p>\n <p>弊端显而易见,不方便整理统计。还占用电脑/手机内存</p>\n <p>为了解决这个问题,此项目应运而生</p>\n <p>当然<span><strong>市面上也有几款类似的办公工具</strong></span> ,功能及使用方式都差不多</p>\n <p>本项目<strong>是 <a href=\"https://github.com/ATQQ/easypicker2-client\">开源</a> 的</strong> </p>\n <p>\n 如有私有化的需求,可自行部署使用(也可 <router-link to=\"/author\">\n 联系作者\n </router-link> 提供帮助)\n </p>\n </div>\n <div class=\"panel\">\n <h1>现有功能 <span style=\"color:grey;font-size:0.8rem;\">(用户关心的)</span></h1>\n <h2>收集任务</h2>\n <ul>\n <li><strong>分类管理: </strong> 收集任务支持分类管理</li>\n <li><strong>设置DDL(截止日期): </strong> 任务截止后不可再提交文件</li>\n <li><strong>限制提交人员: </strong> 非指定的人员(姓名),无法提交文件</li>\n <li><strong>设置模板文件: </strong> 提交者可直接在提交页面下载此文件</li>\n <li><strong>自动重命名: </strong> 提交的文件按填写表单信息进行自动重名(如:姓名-工号.后缀)</li>\n </ul>\n <h2>文件相关</h2>\n <ul>\n <li><strong>上传(提交): </strong>单个/多个</li>\n <li><strong>下载: </strong>单个/多个/按收集任务</li>\n <li><strong>撤回: </strong>用户可以撤回自己提交的文件</li>\n <li><strong>分享: </strong>用户可以将文件下载链接分享给朋友</li>\n <li><strong>模板下载: </strong> 下载任务发布者设置的模板文件</li>\n <li><strong>导出: </strong> 导出提交记录</li>\n </ul>\n </div>\n <div class=\"panel\">\n <h1>相关链接</h1>\n <h2>应用链接相关</h2>\n <ul>\n <li><a href=\"https://docs.ep.sugarat.top\" target=\"_blank\" rel=\"noopener noreferrer\">私有化部署</a></li>\n <li><a target=\"_blank\" href=\"https://ep.sugarat.top\">Easypicker1.0</a></li>\n <li><a target=\"_blank\" href=\"https://ep2.sugarat.top\">Easypicker2.0</a></li>\n </ul>\n <h2>应用源代码 <span style=\"color:grey;font-size:0.8rem;\">(开发者需要的)</span></h2>\n <ul>\n <li><a target=\"_blank\" href=\"https://github.com/ATQQ/EasyPicker-webpack\">Easypicker1.0-客户端</a></li>\n <li><a target=\"_blank\" href=\"https://github.com/ATQQ/easypicker-server\">Easypicker1.0-服务端</a></li>\n </ul>\n <ul>\n <li><a target=\"_blank\" href=\"https://github.com/ATQQ/easypicker2-client\">Easypicker2.0-客户端</a></li>\n <li><a target=\"_blank\" href=\"https://github.com/ATQQ/easypicker2-server\">Easypicker2.0-服务端</a></li>\n </ul>\n <ul>\n <li><a target=\"_blank\" href=\"https://github.com/ATQQ/vite-vue3-template\">Easypicker2.0-客户端模板仓库</a></li>\n <li><a target=\"_blank\" href=\"https://github.com/ATQQ/node-server\">Easypicker2.0-服务端模板仓库</a></li>\n </ul>\n <h2>作者 <span style=\"color:grey;font-size:0.8rem;\">(夹带私货)</span></h2>\n <ul>\n <li><a target=\"_blank\" href=\"https://sugarat.top\">博客</a></li>\n <li><a target=\"_blank\" href=\"https://github.com/ATQQ\">GitHub</a></li>\n <li><a target=\"_blank\" href=\"https://juejin.cn/user/1028798615918983\">掘金</a></li>\n </ul>\n </div>\n <!-- <div class=\"panel\">\n <h1>开发计划</h1>\n <h2>...未完待续</h2>\n </div>\n <div class=\"panel\">\n <h1>涉及技术</h1>\n <h2>...未完待续</h2>\n </div> -->\n </main>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\nh1,\nh2,\nh3,\nh4 {\n font-weight: 500;\n}\n.about {\n background-image: linear-gradient(120deg, #a1c4fd 0%, #c2e9fb 100%);\n min-height: 100vh;\n}\nmain {\n max-width: 860px;\n margin: 0 auto;\n padding: 20px;\n .panel {\n position: relative;\n margin: 0 auto 10px;\n padding: 16px 20px;\n width: 100%;\n overflow: hidden;\n border-radius: 0.25rem;\n box-shadow: #eee;\n box-sizing: border-box;\n transition: all 0.3s;\n background-color: #fff;\n }\n .logo {\n width: 100%;\n max-width: 520px;\n margin: 0 auto;\n display: block;\n }\n h1 {\n font-size: 1.6rem;\n margin-bottom: 10px;\n }\n h2 {\n font-size: 1.3rem;\n margin-bottom: 12px;\n }\n ul,\n ol {\n margin-left: 20px;\n font-size: 15px;\n margin-bottom: 1em;\n }\n p {\n font-size: 15px;\n margin-bottom: 1em;\n }\n a {\n color: #409eff;\n }\n}\n</style>\n"],"names":["_sfc_main","defineComponent","_hoisted_1","_resolveComponent","_openBlock","_createElementBlock","_createElementVNode","_hoisted_2","_createVNode","_component_router_link","_withCtx","_cache","_hoisted_3","_createStaticVNode","_createTextVNode"],"mappings":"uGAGA,MAAAA,EAAeC,EAAgB,CAC7B,OAAQ,CACN,MAAO,EAGT,CACF,CAAC,EAeUC,EAAA,CAAA,MAAM,6EAXfC,EAuFM,aAAA,SArFFC,EAIM,EAAAC,EAAA,MAAAH,EAAA,CADUI,EAAA,OAAA,KAAA,CAAAA,EAlBtB,MAiBwFC,EAAA,CAAAC,EAA9EC,EAA8E,CAAA,GAAA,GAAA,EAAA,CAAA,QAApEC,EAAO,IAAAC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,CAAKL,EAAA,MAAA,CAAA,MAAA,kEAjBhC,EAAA,KAAA,EAAA,CAAA,EAAA,UAsBQK,EAAA,CAAA,IAAAA,EAAA,CAAiC,IAA9B,MAA0B,CAAA,MAAA,SAAA,CAAAL,EAAA,KAAA,KAAA,IAAA,EAE/BA,EAkBM,IAlBN,KAkBM,4BAAA,CAAA,EAAA,EAAA,KALJ,MAIIM,EAAA,CAAAD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAE,EAJD,iqBACmB,CAAA,GAENP,EAAA,IAAA,KAAA,CAAAK,EAxCxB,CAwCU,IAAAA,EAAA,CAAA,EAAAG,EAAA,uBAAA,GAAAN,EAxCVC,EAwCU,CAAA,GAAA,SAAA,EAAA,CAAA,QAAAC,EAAA,IAAAC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,CAxCVG,EAAA,QAAA,CAAA,EAAA"}
@@ -0,0 +1,2 @@
1
+ import{d as s,a as o,c as r,b as e,t as n,_ as l}from"./index-uNaj-154.js";const i=["href","aria-label","title"],c={class:"label"},p=s({__name:"index",props:{href:{},text:{}},setup(f){return(a,t)=>(o(),r("a",{class:"floating-contact",href:a.href,target:"_blank",rel:"noopener noreferrer","aria-label":a.text||"联系客服",title:a.text||"联系客服"},[t[0]||(t[0]=e("span",{class:"icon","aria-hidden":"true"},[e("svg",{viewBox:"0 0 24 24",focusable:"false"},[e("path",{d:"M12 3.5a7.5 7.5 0 0 0-7.5 7.5v3.25A2.75 2.75 0 0 0 7.25 17H8a1 1 0 0 0 1-1v-4.5a1 1 0 0 0-1-1H6.5A5.5 5.5 0 0 1 17.5 10.5H16a1 1 0 0 0-1 1V16a1 1 0 0 0 1 1h1.5v.25A1.75 1.75 0 0 1 15.75 19H13.7a2 2 0 0 0-1.7-1h-1a2 2 0 1 0 0 4h1a2 2 0 0 0 1.73-1h2.02a3.75 3.75 0 0 0 3.75-3.75V11A7.5 7.5 0 0 0 12 3.5Z"})])],-1)),e("span",c,n(a.text||"联系客服"),1)],8,i))}}),d=l(p,[["__scopeId","data-v-f1601c1b"]]);export{d as F};
2
+ //# sourceMappingURL=index-BxcfgZqH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BxcfgZqH.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}