@sugarat/easypicker2-client 2.7.2 → 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.
- package/dist/assets/aria-legacy-B70JmEZA.js.map +1 -1
- package/dist/assets/aria-nkjrUMQ-.js.map +1 -1
- package/dist/assets/config-CnEgj70a.css +1 -0
- package/dist/assets/config-DR4Jo6x0.js +2 -0
- package/dist/assets/config-DR4Jo6x0.js.map +1 -0
- package/dist/assets/config-legacy-Frhed9Ou.js +2 -0
- package/dist/assets/config-legacy-Frhed9Ou.js.map +1 -0
- package/dist/assets/{data-analysis-B9140nBj.js → data-analysis-B8jQ_UrC.js} +2 -2
- package/dist/assets/data-analysis-B8jQ_UrC.js.map +1 -0
- package/dist/assets/{data-analysis-legacy-hCmX88pc.js → data-analysis-legacy-DjCCKm5W.js} +2 -2
- package/dist/assets/data-analysis-legacy-DjCCKm5W.js.map +1 -0
- package/dist/assets/{data-board-D3o_ZTM6.js → data-board-BGj6fORD.js} +2 -2
- package/dist/assets/data-board-BGj6fORD.js.map +1 -0
- package/dist/assets/{data-board-legacy-B3GeXOqc.js → data-board-legacy-D0aBtKuE.js} +2 -2
- package/dist/assets/data-board-legacy-D0aBtKuE.js.map +1 -0
- package/dist/assets/delete-filled-B3KAHg4C.js +2 -0
- package/dist/assets/delete-filled-B3KAHg4C.js.map +1 -0
- package/dist/assets/delete-filled-legacy-IwQ4U_-h.js +2 -0
- package/dist/assets/delete-filled-legacy-IwQ4U_-h.js.map +1 -0
- package/dist/assets/el-date-picker-2VHUEHRN.js +2 -0
- package/dist/assets/el-date-picker-2VHUEHRN.js.map +1 -0
- package/dist/assets/el-date-picker-legacy-6LjuTLvj.js +2 -0
- package/dist/assets/el-date-picker-legacy-6LjuTLvj.js.map +1 -0
- package/dist/assets/el-dropdown-item-C_iGHfk5.js +2 -0
- package/dist/assets/el-dropdown-item-C_iGHfk5.js.map +1 -0
- package/dist/assets/el-dropdown-item-legacy-Dd1a85un.js +2 -0
- package/dist/assets/el-dropdown-item-legacy-Dd1a85un.js.map +1 -0
- package/dist/assets/el-empty-C2yupmrg.css +1 -0
- package/dist/assets/el-empty-DM1AJWOT.js +2 -0
- package/dist/assets/el-empty-DM1AJWOT.js.map +1 -0
- package/dist/assets/el-empty-legacy-ZCYPIt_S.js +2 -0
- package/dist/assets/el-empty-legacy-ZCYPIt_S.js.map +1 -0
- package/dist/assets/el-input-number-CU7OpiYS.css +1 -0
- package/dist/assets/el-input-number-CgyrHNcj.js +2 -0
- package/dist/assets/el-input-number-CgyrHNcj.js.map +1 -0
- package/dist/assets/el-input-number-legacy-Bh6hK4h_.js +2 -0
- package/dist/assets/el-input-number-legacy-Bh6hK4h_.js.map +1 -0
- package/dist/assets/{el-loading-BzK_8zqi.js → el-loading-DqRoOOxo.js} +2 -2
- package/dist/assets/el-loading-DqRoOOxo.js.map +1 -0
- package/dist/assets/el-loading-legacy-CFNL_MoE.js +2 -0
- package/dist/assets/el-loading-legacy-CFNL_MoE.js.map +1 -0
- package/dist/assets/el-pagination-DVClk9XJ.js +2 -0
- package/dist/assets/el-pagination-DVClk9XJ.js.map +1 -0
- package/dist/assets/el-pagination-legacy-DwnhLxcB.js +2 -0
- package/dist/assets/el-pagination-legacy-DwnhLxcB.js.map +1 -0
- package/dist/assets/el-scrollbar-B_rEcSsQ.js +2 -0
- package/dist/assets/el-scrollbar-B_rEcSsQ.js.map +1 -0
- package/dist/assets/el-scrollbar-DFu7lMno.css +1 -0
- package/dist/assets/el-scrollbar-legacy-DVIFmrwk.js +2 -0
- package/dist/assets/el-scrollbar-legacy-DVIFmrwk.js.map +1 -0
- package/dist/assets/el-select-C5BnfITI.js +2 -0
- package/dist/assets/el-select-C5BnfITI.js.map +1 -0
- package/dist/assets/el-select-Dm4tLYz8.css +1 -0
- package/dist/assets/el-select-legacy-yKcmdaqh.js +2 -0
- package/dist/assets/el-select-legacy-yKcmdaqh.js.map +1 -0
- package/dist/assets/el-switch-BUjvki0a.js +2 -0
- package/dist/assets/el-switch-BUjvki0a.js.map +1 -0
- package/dist/assets/el-switch-legacy-CeDo4e_6.js +2 -0
- package/dist/assets/el-switch-legacy-CeDo4e_6.js.map +1 -0
- package/dist/assets/el-tab-pane-DKrBN9bA.js +2 -0
- package/dist/assets/el-tab-pane-DKrBN9bA.js.map +1 -0
- package/dist/assets/{el-tab-pane-legacy-CDSRCQdO.js → el-tab-pane-legacy-Ct9rYze8.js} +2 -2
- package/dist/assets/el-tab-pane-legacy-Ct9rYze8.js.map +1 -0
- package/dist/assets/{el-table-column-B2R1FOoB.js → el-table-column-cVnV9Qdi.js} +3 -3
- package/dist/assets/el-table-column-cVnV9Qdi.js.map +1 -0
- package/dist/assets/el-table-column-legacy-D2UbUqx0.js +24 -0
- package/dist/assets/el-table-column-legacy-D2UbUqx0.js.map +1 -0
- package/dist/assets/el-tag-Bgje3_SF.css +1 -0
- package/dist/assets/el-tag-CR8VXqUN.js +2 -0
- package/dist/assets/el-tag-CR8VXqUN.js.map +1 -0
- package/dist/assets/el-tag-legacy-diNMtlkE.js +2 -0
- package/dist/assets/el-tag-legacy-diNMtlkE.js.map +1 -0
- package/dist/assets/el-upload-B2Zxm6X5.css +1 -0
- package/dist/assets/el-upload-DRWHzvzW.js +2 -0
- package/dist/assets/el-upload-DRWHzvzW.js.map +1 -0
- package/dist/assets/el-upload-legacy-C7Y6h5AK.js +2 -0
- package/dist/assets/el-upload-legacy-C7Y6h5AK.js.map +1 -0
- package/dist/assets/index-8vfFTV-B.css +1 -0
- package/dist/assets/index-B2PHCM63.js +23 -0
- package/dist/assets/index-B2PHCM63.js.map +1 -0
- package/dist/assets/{index-C4H-Ptjt.css → index-BDkChTag.css} +1 -1
- package/dist/assets/index-BDsN2eKB.js +2 -0
- package/dist/assets/index-BDsN2eKB.js.map +1 -0
- package/dist/assets/index-BIKx9Xnn.js +2 -0
- package/dist/assets/index-BIKx9Xnn.js.map +1 -0
- package/dist/assets/index-BOFlLnYl.js +2 -0
- package/dist/assets/index-BOFlLnYl.js.map +1 -0
- package/dist/assets/index-BSMNPGJ5.css +1 -0
- package/dist/assets/index-BVp20vyj.css +1 -0
- package/dist/assets/index-BWExpeba.js +2 -0
- package/dist/assets/index-BWExpeba.js.map +1 -0
- package/dist/assets/index-B_7cUQcW.js +2 -0
- package/dist/assets/index-B_7cUQcW.js.map +1 -0
- package/dist/assets/index-BcJxc1ki.css +1 -0
- package/dist/assets/index-BgihxBmj.css +1 -0
- package/dist/assets/index-BjSgvXxj.css +1 -0
- package/dist/assets/index-BrOLxzFM.js.map +1 -1
- package/dist/assets/index-Bx68sw-c.js +2 -0
- package/dist/assets/index-Bx68sw-c.js.map +1 -0
- package/dist/assets/index-BxcfgZqH.js +2 -0
- package/dist/assets/index-BxcfgZqH.js.map +1 -0
- package/dist/assets/{index-ehQnwCE_.css → index-Bxvzu7zF.css} +1 -1
- package/dist/assets/index-BzQdnJY9.js +2 -0
- package/dist/assets/index-BzQdnJY9.js.map +1 -0
- package/dist/assets/index-CFpIdG49.css +1 -0
- package/dist/assets/index-CQjXznXy.js +2 -0
- package/dist/assets/index-CQjXznXy.js.map +1 -0
- package/dist/assets/index-CQud0ONT.css +1 -0
- package/dist/assets/index-CkyNID7q.css +1 -0
- package/dist/assets/index-CsfbnGni.css +1 -0
- package/dist/assets/index-CuGN8YoJ.js +2 -0
- package/dist/assets/index-CuGN8YoJ.js.map +1 -0
- package/dist/assets/index-D94P-51I.css +1 -0
- package/dist/assets/index-DLuR61Hw.css +1 -0
- package/dist/assets/index-DRKBIvKP.js +2 -0
- package/dist/assets/index-DRKBIvKP.js.map +1 -0
- package/dist/assets/index-DTRiT4Ia.js +2 -0
- package/dist/assets/index-DTRiT4Ia.js.map +1 -0
- package/dist/assets/index-DVSUcRaY.js +2 -0
- package/dist/assets/index-DVSUcRaY.js.map +1 -0
- package/dist/assets/index-DWOXO9QK.js +2 -0
- package/dist/assets/index-DWOXO9QK.js.map +1 -0
- package/dist/assets/index-DWi4klmy.js +2 -0
- package/dist/assets/index-DWi4klmy.js.map +1 -0
- package/dist/assets/index-DcUtl6Nq.css +1 -0
- package/dist/assets/index-Diw0ScGB.js +2 -0
- package/dist/assets/index-Diw0ScGB.js.map +1 -0
- package/dist/assets/index-Dk60yOI9.js +2 -0
- package/dist/assets/index-Dk60yOI9.js.map +1 -0
- package/dist/assets/index-FISBGs_l.css +1 -0
- package/dist/assets/index-LKJh-8oZ.css +1 -0
- package/dist/assets/index-MRZ7DYIX.js +2 -0
- package/dist/assets/index-MRZ7DYIX.js.map +1 -0
- package/dist/assets/index-Q8b92C8V.css +1 -0
- package/dist/assets/index-X0ZxbeZs.js +2 -0
- package/dist/assets/index-X0ZxbeZs.js.map +1 -0
- package/dist/assets/index-fz1mWSN_.js +2 -0
- package/dist/assets/index-fz1mWSN_.js.map +1 -0
- package/dist/assets/index-legacy-B5_Eg4NO.js +2 -0
- package/dist/assets/index-legacy-B5_Eg4NO.js.map +1 -0
- package/dist/assets/index-legacy-B71iq4Jg.js +2 -0
- package/dist/assets/index-legacy-B71iq4Jg.js.map +1 -0
- package/dist/assets/index-legacy-B7MgTgVj.js +2 -0
- package/dist/assets/index-legacy-B7MgTgVj.js.map +1 -0
- package/dist/assets/index-legacy-BLCMV_4m.js +2 -0
- package/dist/assets/index-legacy-BLCMV_4m.js.map +1 -0
- package/dist/assets/index-legacy-BLu3Mu8j.js +2 -0
- package/dist/assets/index-legacy-BLu3Mu8j.js.map +1 -0
- package/dist/assets/index-legacy-BSmhgZ-n.js +2 -0
- package/dist/assets/index-legacy-BSmhgZ-n.js.map +1 -0
- package/dist/assets/index-legacy-BTvagK_v.js +2 -0
- package/dist/assets/index-legacy-BTvagK_v.js.map +1 -0
- package/dist/assets/index-legacy-C-gHf8SN.js.map +1 -1
- package/dist/assets/index-legacy-C2bwTRoT.js +2 -0
- package/dist/assets/index-legacy-C2bwTRoT.js.map +1 -0
- package/dist/assets/index-legacy-CM7bG2hM.js +2 -0
- package/dist/assets/index-legacy-CM7bG2hM.js.map +1 -0
- package/dist/assets/index-legacy-CRa6h-UF.js +2 -0
- package/dist/assets/index-legacy-CRa6h-UF.js.map +1 -0
- package/dist/assets/index-legacy-CkcZHDIb.js +54 -0
- package/dist/assets/index-legacy-CkcZHDIb.js.map +1 -0
- package/dist/assets/index-legacy-Cp4ut576.js +2 -0
- package/dist/assets/index-legacy-Cp4ut576.js.map +1 -0
- package/dist/assets/index-legacy-CvW_2XYj.js +2 -0
- package/dist/assets/index-legacy-CvW_2XYj.js.map +1 -0
- package/dist/assets/index-legacy-CwUt8UiU.js +2 -0
- package/dist/assets/index-legacy-CwUt8UiU.js.map +1 -0
- package/dist/assets/index-legacy-CzoivdRy.js +2 -0
- package/dist/assets/index-legacy-CzoivdRy.js.map +1 -0
- package/dist/assets/index-legacy-D-mrc8ns.js +2 -0
- package/dist/assets/index-legacy-D-mrc8ns.js.map +1 -0
- package/dist/assets/index-legacy-D2hV5N51.js +2 -0
- package/dist/assets/index-legacy-D2hV5N51.js.map +1 -0
- package/dist/assets/index-legacy-D6Zqa9lw.js +2 -0
- package/dist/assets/index-legacy-D6Zqa9lw.js.map +1 -0
- package/dist/assets/index-legacy-DrA0B2e4.js +2 -0
- package/dist/assets/index-legacy-DrA0B2e4.js.map +1 -0
- package/dist/assets/index-legacy-DysxAWeo.js +2 -0
- package/dist/assets/index-legacy-DysxAWeo.js.map +1 -0
- package/dist/assets/index-legacy-TKeSN56S.js +16 -0
- package/dist/assets/index-legacy-TKeSN56S.js.map +1 -0
- package/dist/assets/index-legacy-erTEdV9o.js +2 -0
- package/dist/assets/index-legacy-erTEdV9o.js.map +1 -0
- package/dist/assets/index-legacy-pHu03Ans.js +2 -0
- package/dist/assets/index-legacy-pHu03Ans.js.map +1 -0
- package/dist/assets/index-legacy-w1mXHpIQ.js +2 -0
- package/dist/assets/index-legacy-w1mXHpIQ.js.map +1 -0
- package/dist/assets/index-mtfctTgx.css +1 -0
- package/dist/assets/index-sRZE1X3H.js +2 -0
- package/dist/assets/index-sRZE1X3H.js.map +1 -0
- package/dist/assets/index-uNaj-154.js +40 -0
- package/dist/assets/index-uNaj-154.js.map +1 -0
- package/dist/assets/index-vo_ird7L.js +2 -0
- package/dist/assets/index-vo_ird7L.js.map +1 -0
- package/dist/assets/linkDialog-Dida934t.css +1 -0
- package/dist/assets/linkDialog-legacy-0_j99SG_.js +2 -0
- package/dist/assets/linkDialog-legacy-0_j99SG_.js.map +1 -0
- package/dist/assets/linkDialog-vYdu1-Ul.js +2 -0
- package/dist/assets/linkDialog-vYdu1-Ul.js.map +1 -0
- package/dist/assets/other-BiIe9Z0L.js +2 -0
- package/dist/assets/other-BiIe9Z0L.js.map +1 -0
- package/dist/assets/other-legacy-Bfm4KL87.js +2 -0
- package/dist/assets/other-legacy-Bfm4KL87.js.map +1 -0
- package/dist/assets/polyfills-legacy-DqO_DCwg.js +1 -0
- package/dist/assets/{refresh-BA55HwKz.js → refresh-BnOQ8sKt.js} +2 -2
- package/dist/assets/refresh-BnOQ8sKt.js.map +1 -0
- package/dist/assets/{refresh-legacy-CpA05Fzr.js → refresh-legacy-D7NGa5wN.js} +2 -2
- package/dist/assets/refresh-legacy-D7NGa5wN.js.map +1 -0
- package/dist/assets/tip-CyB8omfw.js +2 -0
- package/dist/assets/tip-CyB8omfw.js.map +1 -0
- package/dist/assets/tip-legacy-DXZHLiK7.js +2 -0
- package/dist/assets/tip-legacy-DXZHLiK7.js.map +1 -0
- package/dist/assets/tipInfo-0FQ2unt4.js +2 -0
- package/dist/assets/tipInfo-0FQ2unt4.js.map +1 -0
- package/dist/assets/tipInfo-BPHCIpRm.css +1 -0
- package/dist/assets/tipInfo-legacy-cRqTuiqx.js +2 -0
- package/dist/assets/tipInfo-legacy-cRqTuiqx.js.map +1 -0
- package/dist/index.html +105 -128
- package/package.json +13 -35
- package/README.md +0 -86
- package/dist/assets/data-analysis-B9140nBj.js.map +0 -1
- package/dist/assets/data-analysis-legacy-hCmX88pc.js.map +0 -1
- package/dist/assets/data-board-D3o_ZTM6.js.map +0 -1
- package/dist/assets/data-board-legacy-B3GeXOqc.js.map +0 -1
- package/dist/assets/el-date-picker-DLwRZtue.js +0 -2
- package/dist/assets/el-date-picker-DLwRZtue.js.map +0 -1
- package/dist/assets/el-date-picker-legacy-D8g_iKhG.js +0 -2
- package/dist/assets/el-date-picker-legacy-D8g_iKhG.js.map +0 -1
- package/dist/assets/el-dialog-Cu2jwelC.css +0 -1
- package/dist/assets/el-dialog-Dq3XmL6w.js +0 -2
- package/dist/assets/el-dialog-Dq3XmL6w.js.map +0 -1
- package/dist/assets/el-dialog-legacy-DCFOVWEQ.js +0 -2
- package/dist/assets/el-dialog-legacy-DCFOVWEQ.js.map +0 -1
- package/dist/assets/el-dropdown-item-C3aOY1Nr.js +0 -2
- package/dist/assets/el-dropdown-item-C3aOY1Nr.js.map +0 -1
- package/dist/assets/el-dropdown-item-legacy-QQu1PUxO.js +0 -2
- package/dist/assets/el-dropdown-item-legacy-QQu1PUxO.js.map +0 -1
- package/dist/assets/el-form-item-Cc9R0dZ1.css +0 -1
- package/dist/assets/el-form-item-CtSEmj9z.js +0 -2
- package/dist/assets/el-form-item-CtSEmj9z.js.map +0 -1
- package/dist/assets/el-form-item-legacy-BS5eT84Y.js +0 -2
- package/dist/assets/el-form-item-legacy-BS5eT84Y.js.map +0 -1
- package/dist/assets/el-loading-BzK_8zqi.js.map +0 -1
- package/dist/assets/el-loading-legacy-DWfn3F3x.js +0 -2
- package/dist/assets/el-loading-legacy-DWfn3F3x.js.map +0 -1
- package/dist/assets/el-pagination-Qx_lnumK.js +0 -2
- package/dist/assets/el-pagination-Qx_lnumK.js.map +0 -1
- package/dist/assets/el-pagination-legacy-DqLvzT2t.js +0 -2
- package/dist/assets/el-pagination-legacy-DqLvzT2t.js.map +0 -1
- package/dist/assets/el-progress-CeLYmjYA.js +0 -2
- package/dist/assets/el-progress-CeLYmjYA.js.map +0 -1
- package/dist/assets/el-progress-legacy-CwFO38du.js +0 -2
- package/dist/assets/el-progress-legacy-CwFO38du.js.map +0 -1
- package/dist/assets/el-progress-njCW9-w4.css +0 -1
- package/dist/assets/el-select-BSO0hXRI.css +0 -1
- package/dist/assets/el-select-HG63LP3Z.js +0 -2
- package/dist/assets/el-select-HG63LP3Z.js.map +0 -1
- package/dist/assets/el-select-legacy-fKvGMZFT.js +0 -2
- package/dist/assets/el-select-legacy-fKvGMZFT.js.map +0 -1
- package/dist/assets/el-switch-FjmuXBNe.js +0 -2
- package/dist/assets/el-switch-FjmuXBNe.js.map +0 -1
- package/dist/assets/el-switch-legacy-CU4cCeO5.js +0 -2
- package/dist/assets/el-switch-legacy-CU4cCeO5.js.map +0 -1
- package/dist/assets/el-tab-pane-CuYcnzTM.js +0 -2
- package/dist/assets/el-tab-pane-CuYcnzTM.js.map +0 -1
- package/dist/assets/el-tab-pane-legacy-CDSRCQdO.js.map +0 -1
- package/dist/assets/el-table-column-B2R1FOoB.js.map +0 -1
- package/dist/assets/el-table-column-legacy-DDZdwCAr.js +0 -24
- package/dist/assets/el-table-column-legacy-DDZdwCAr.js.map +0 -1
- package/dist/assets/index-0SN-qZs5.js +0 -2
- package/dist/assets/index-0SN-qZs5.js.map +0 -1
- package/dist/assets/index-4ToTyeX6.css +0 -1
- package/dist/assets/index-5sS3uHi0.css +0 -1
- package/dist/assets/index-B5tZv3FB.css +0 -1
- package/dist/assets/index-BMhqAx1_.js +0 -2
- package/dist/assets/index-BMhqAx1_.js.map +0 -1
- package/dist/assets/index-BghihfR3.css +0 -1
- package/dist/assets/index-BjPgOd_H.js +0 -2
- package/dist/assets/index-BjPgOd_H.js.map +0 -1
- package/dist/assets/index-BjdYG4YE.js +0 -2
- package/dist/assets/index-BjdYG4YE.js.map +0 -1
- package/dist/assets/index-BkLqrfrW.js +0 -2
- package/dist/assets/index-BkLqrfrW.js.map +0 -1
- package/dist/assets/index-BvTJrWND.js +0 -2
- package/dist/assets/index-BvTJrWND.js.map +0 -1
- package/dist/assets/index-BxLy8VN3.js +0 -2
- package/dist/assets/index-BxLy8VN3.js.map +0 -1
- package/dist/assets/index-C0ZXXBCX.js +0 -40
- package/dist/assets/index-C0ZXXBCX.js.map +0 -1
- package/dist/assets/index-CbkKWoQA.css +0 -1
- package/dist/assets/index-CeWnhlkq.css +0 -1
- package/dist/assets/index-ChQZKkse.css +0 -1
- package/dist/assets/index-Cs-E_cyt.js +0 -2
- package/dist/assets/index-Cs-E_cyt.js.map +0 -1
- package/dist/assets/index-CsvxKrFP.js +0 -2
- package/dist/assets/index-CsvxKrFP.js.map +0 -1
- package/dist/assets/index-D2p3cWtM.css +0 -1
- package/dist/assets/index-DABL-KOd.js +0 -2
- package/dist/assets/index-DABL-KOd.js.map +0 -1
- package/dist/assets/index-DFVlBjXp.js +0 -2
- package/dist/assets/index-DFVlBjXp.js.map +0 -1
- package/dist/assets/index-DIlzTatU.js +0 -2
- package/dist/assets/index-DIlzTatU.js.map +0 -1
- package/dist/assets/index-DREZLSQi.js +0 -2
- package/dist/assets/index-DREZLSQi.js.map +0 -1
- package/dist/assets/index-DaSb9EV4.css +0 -1
- package/dist/assets/index-DclP3Kg-.js +0 -2
- package/dist/assets/index-DclP3Kg-.js.map +0 -1
- package/dist/assets/index-DlyJUJ0j.js +0 -2
- package/dist/assets/index-DlyJUJ0j.js.map +0 -1
- package/dist/assets/index-DnxF29eG.css +0 -1
- package/dist/assets/index-GC0X-O3Y.js +0 -2
- package/dist/assets/index-GC0X-O3Y.js.map +0 -1
- package/dist/assets/index-HzWmB96f.js +0 -2
- package/dist/assets/index-HzWmB96f.js.map +0 -1
- package/dist/assets/index-I0Y2y6h5.css +0 -1
- package/dist/assets/index-U2z5KAu0.js +0 -2
- package/dist/assets/index-U2z5KAu0.js.map +0 -1
- package/dist/assets/index-XNFQHmLL.css +0 -1
- package/dist/assets/index-dEAnfrhp.css +0 -1
- package/dist/assets/index-hhTdfxnD.css +0 -1
- package/dist/assets/index-legacy-B4IHsyj2.js +0 -42
- package/dist/assets/index-legacy-B4IHsyj2.js.map +0 -1
- package/dist/assets/index-legacy-BKxszgZW.js +0 -2
- package/dist/assets/index-legacy-BKxszgZW.js.map +0 -1
- package/dist/assets/index-legacy-BO3hAqA9.js +0 -2
- package/dist/assets/index-legacy-BO3hAqA9.js.map +0 -1
- package/dist/assets/index-legacy-BSXJnLod.js +0 -2
- package/dist/assets/index-legacy-BSXJnLod.js.map +0 -1
- package/dist/assets/index-legacy-BSv-V3Il.js +0 -2
- package/dist/assets/index-legacy-BSv-V3Il.js.map +0 -1
- package/dist/assets/index-legacy-CCqMKGqS.js +0 -2
- package/dist/assets/index-legacy-CCqMKGqS.js.map +0 -1
- package/dist/assets/index-legacy-CphqUnR0.js +0 -2
- package/dist/assets/index-legacy-CphqUnR0.js.map +0 -1
- package/dist/assets/index-legacy-D13WKbpb.js +0 -2
- package/dist/assets/index-legacy-D13WKbpb.js.map +0 -1
- package/dist/assets/index-legacy-D6IvG9Dt.js +0 -2
- package/dist/assets/index-legacy-D6IvG9Dt.js.map +0 -1
- package/dist/assets/index-legacy-DCezoU0z.js +0 -2
- package/dist/assets/index-legacy-DCezoU0z.js.map +0 -1
- package/dist/assets/index-legacy-DIwVyUHd.js +0 -2
- package/dist/assets/index-legacy-DIwVyUHd.js.map +0 -1
- package/dist/assets/index-legacy-DO2MADPO.js +0 -2
- package/dist/assets/index-legacy-DO2MADPO.js.map +0 -1
- package/dist/assets/index-legacy-DcFvM5kb.js +0 -2
- package/dist/assets/index-legacy-DcFvM5kb.js.map +0 -1
- package/dist/assets/index-legacy-Df_9F2Oo.js +0 -2
- package/dist/assets/index-legacy-Df_9F2Oo.js.map +0 -1
- package/dist/assets/index-legacy-Dhs-OKEx.js +0 -2
- package/dist/assets/index-legacy-Dhs-OKEx.js.map +0 -1
- package/dist/assets/index-legacy-DjWDlkzN.js +0 -2
- package/dist/assets/index-legacy-DjWDlkzN.js.map +0 -1
- package/dist/assets/index-legacy-DxQA53Qy.js +0 -2
- package/dist/assets/index-legacy-DxQA53Qy.js.map +0 -1
- package/dist/assets/index-legacy-GbLWntci.js +0 -2
- package/dist/assets/index-legacy-GbLWntci.js.map +0 -1
- package/dist/assets/index-legacy-I4qT4Thb.js +0 -2
- package/dist/assets/index-legacy-I4qT4Thb.js.map +0 -1
- package/dist/assets/index-legacy-quXi4jhF.js +0 -2
- package/dist/assets/index-legacy-quXi4jhF.js.map +0 -1
- package/dist/assets/index-tyMcidBi.js +0 -2
- package/dist/assets/index-tyMcidBi.js.map +0 -1
- package/dist/assets/index-ypHH_Z_A.css +0 -1
- package/dist/assets/isEqual-Cecwc716.js +0 -2
- package/dist/assets/isEqual-Cecwc716.js.map +0 -1
- package/dist/assets/isEqual-legacy-dqS7X02N.js +0 -2
- package/dist/assets/isEqual-legacy-dqS7X02N.js.map +0 -1
- package/dist/assets/other-legacy-DjiCmSH4.js +0 -2
- package/dist/assets/other-legacy-DjiCmSH4.js.map +0 -1
- package/dist/assets/other-yMAyytYx.js +0 -2
- package/dist/assets/other-yMAyytYx.js.map +0 -1
- package/dist/assets/polyfills-legacy-CPmsgIAF.js +0 -4
- package/dist/assets/refresh-BA55HwKz.js.map +0 -1
- package/dist/assets/refresh-legacy-CpA05Fzr.js.map +0 -1
- package/dist/assets/tip-CrU2GCmD.js +0 -2
- package/dist/assets/tip-CrU2GCmD.js.map +0 -1
- package/dist/assets/tip-legacy-B05oHh9-.js +0 -2
- package/dist/assets/tip-legacy-B05oHh9-.js.map +0 -1
- package/dist/assets/validator-Ca0QsRid.js +0 -2
- package/dist/assets/validator-Ca0QsRid.js.map +0 -1
- package/dist/assets/validator-legacy-D0GLFVMZ.js +0 -2
- package/dist/assets/validator-legacy-D0GLFVMZ.js.map +0 -1
- /package/dist/assets/{el-date-picker-NjWHL2Br.css → el-date-picker-C36c2CGO.css} +0 -0
- /package/dist/assets/{el-dropdown-item-CUgTpiu6.css → el-dropdown-item-5b6bMUQF.css} +0 -0
- /package/dist/assets/{el-loading-Uv12lkco.css → el-loading-BPl8mdQ3.css} +0 -0
- /package/dist/assets/{el-pagination-MvCAleW2.css → el-pagination-DMHBWKFj.css} +0 -0
- /package/dist/assets/{el-switch-D6dVIPlw.css → el-switch-CH9HekZJ.css} +0 -0
- /package/dist/assets/{el-tab-pane-kUw7IczA.css → el-tab-pane-CO1C5qCV.css} +0 -0
- /package/dist/assets/{el-table-column-DMXHP8sd.css → el-table-column-x3grTP_N.css} +0 -0
- /package/dist/assets/{tip-ovQu2XSt.css → tip-rRSL6nZ2.css} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-legacy-CRa6h-UF.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","Symbol","emitChangeFn","value","isNumber","collapseProps","buildProps","accordion","Boolean","modelValue","type","definePropType","Array","String","Number","default","mutable","_sfc_main","defineComponent","name","props","emits","UPDATE_MODEL_EVENT","CHANGE_EVENT","setup","__props","expose","emit","ns","useNamespace","activeNames","ref","castArray","setActiveNames","_activeNames","watch","deep","provide","handleItemClick","index","indexOf","splice","push","_ctx","_cache","openBlock","createElementBlock","class","normalizeClass","unref","b","role","renderSlot","$slots","Collapse","_export_sfc","collapseItemProps","title","generateId","disabled","_hoisted_1","_hoisted_2","_hoisted_3","CollapseItem","collapse","inject","focusing","isClick","id","isActive","computed","includes","handleFocus","setTimeout","handleHeaderClick","handleEnterClick","is","createElementVNode","be","tabindex","onClick","onKeypress","withKeys","withModifiers","onFocus","onBlur","$event","createTextVNode","toDisplayString","createVNode","ElIcon","withCtx","ArrowRight","_","_CollapseTransition","withDirectives","vShow","ElCollapse","withInstall","ElCollapseItem","withNoopInstall","ConfigServiceAPI","getServiceOverview","ajax","get","getMysqlSchema","getMysqlSchemaExportSql","applyMysqlSchema","post","getMysqlLiveIntrospect","checkMysqlDatabase","body","listConfigAdminUsers","createConfigAdminUser","resetConfigAdminUserPassword","getServiceConfig","updateCfg","data","put","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","length","running","filter","item","status","required","optional","abnormal","showErrorList","errMsg","showMysqlToolTabs","some","s","mysqlLive","mysqlLiveLoading","mysqlLiveOpenNames","currentConfig","find","getServiceTagType","service","getServiceTagText","isNumberConfig","key","updateConfigValue","async","loadMysqlSchema","loadMysqlLiveIntrospect","formatBytes","n","isNaN","units","v","i","toFixed","Math","round","refreshStatus","ElMessage","success","error","openMysqlExportDialog","sql","trim","description","closeMysqlExportDialog","adminUsersLoading","adminUsersList","loginIsSuper","loginIsSystem","canOperateConfigAdmins","adminCreateForm","account","pwd1","pwd2","bindPhone","phone","code","adminCreateSubmitting","adminResetVisible","adminResetRow","adminResetPwd1","adminResetPwd2","adminResetSubmitting","adminCodeText","adminCodeTime","refreshAdminCodeText","getAdminCreateCode","rMobilePhone","test","PublicApi","getCode","then","warning","loadAdminUsers","list","submitCreateAdminUser","rAccount","rPassword","rVerCode","checkAdminCreateForm","pwd","ok","closeAdminResetDialog","submitAdminResetPassword","copyMysqlExportSqlAll","navigator","clipboard","writeText","showSuccess","updateCfgGroup","group","check","items","pick","it","configMysqlDataToCheckBody","canConnect","databaseExists","autoItem","dbName","msg","ElMessageBox","confirm","confirmButtonText","cancelButtonText","label","isSecret","refreshMysqlToolsTab","needBindPhone","need","immediate","open","document","style","overflow","onMounted","t","UserApi","checkPower","power","system","loadLoginPower","idx","columns","map","c","p","subPart","column","join","tbl","text","createSql","row"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5]}
|