@sugarat/easypicker2-client 2.6.1-beta.0 → 2.7.0-beta.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.af0825d3.js → aria-legacy-B70JmEZA.js} +1 -1
- package/dist/assets/aria-legacy-B70JmEZA.js.map +1 -0
- package/dist/assets/{aria-bc8e8b0f.js → aria-nkjrUMQ-.js} +1 -1
- package/dist/assets/aria-nkjrUMQ-.js.map +1 -0
- package/dist/assets/{data-analysis-632af70e.js → data-analysis-c8lgg0AB.js} +2 -2
- package/dist/assets/data-analysis-c8lgg0AB.js.map +1 -0
- package/dist/assets/{data-analysis-legacy.297ff95d.js → data-analysis-legacy-CW8BY_nY.js} +2 -2
- package/dist/assets/data-analysis-legacy-CW8BY_nY.js.map +1 -0
- package/dist/assets/data-board-CfWZjPIl.js +2 -0
- package/dist/assets/data-board-CfWZjPIl.js.map +1 -0
- package/dist/assets/{data-board-legacy.b3bf2f61.js → data-board-legacy-DDytbRz4.js} +2 -2
- package/dist/assets/data-board-legacy-DDytbRz4.js.map +1 -0
- package/dist/assets/{el-date-picker-b3398f8f.js → el-date-picker-CI8bdk_f.js} +2 -2
- package/dist/assets/el-date-picker-CI8bdk_f.js.map +1 -0
- package/dist/assets/{el-date-picker-legacy.fd044c30.js → el-date-picker-legacy-CSDTG-yp.js} +2 -2
- package/dist/assets/el-date-picker-legacy-CSDTG-yp.js.map +1 -0
- package/dist/assets/el-dialog-C8bI9VGw.js +2 -0
- package/dist/assets/el-dialog-C8bI9VGw.js.map +1 -0
- package/dist/assets/el-dialog-legacy-DfEb6k1B.js +2 -0
- package/dist/assets/el-dialog-legacy-DfEb6k1B.js.map +1 -0
- package/dist/assets/{el-dropdown-item-3eb29c67.js → el-dropdown-item-febUKGk9.js} +2 -2
- package/dist/assets/el-dropdown-item-febUKGk9.js.map +1 -0
- package/dist/assets/{el-dropdown-item-legacy.60575f42.js → el-dropdown-item-legacy-Bi1TbzqG.js} +2 -2
- package/dist/assets/el-dropdown-item-legacy-Bi1TbzqG.js.map +1 -0
- package/dist/assets/el-form-item-SCs-OERV.js +2 -0
- package/dist/assets/el-form-item-SCs-OERV.js.map +1 -0
- package/dist/assets/el-form-item-legacy-CNxAgkUf.js +2 -0
- package/dist/assets/el-form-item-legacy-CNxAgkUf.js.map +1 -0
- package/dist/assets/el-loading-DSlXrliU.js +2 -0
- package/dist/assets/el-loading-DSlXrliU.js.map +1 -0
- package/dist/assets/{el-loading-legacy.8045609e.js → el-loading-legacy-CbNNE-qk.js} +2 -2
- package/dist/assets/el-loading-legacy-CbNNE-qk.js.map +1 -0
- package/dist/assets/{el-pagination-legacy.02ed0149.js → el-pagination-legacy-CeTPKkkI.js} +2 -2
- package/dist/assets/el-pagination-legacy-CeTPKkkI.js.map +1 -0
- package/dist/assets/{el-pagination-85149e11.js → el-pagination-nfYZbPTI.js} +2 -2
- package/dist/assets/el-pagination-nfYZbPTI.js.map +1 -0
- package/dist/assets/el-progress-BRTU4m5q.js +2 -0
- package/dist/assets/el-progress-BRTU4m5q.js.map +1 -0
- package/dist/assets/{el-progress-legacy.1165db46.js → el-progress-legacy-B6EwNV6c.js} +2 -2
- package/dist/assets/el-progress-legacy-B6EwNV6c.js.map +1 -0
- package/dist/assets/{el-select-legacy.5ccdd9a4.js → el-select-legacy-BFhy033s.js} +2 -2
- package/dist/assets/el-select-legacy-BFhy033s.js.map +1 -0
- package/dist/assets/{el-select-2a16e5df.js → el-select-uDoCZCn5.js} +2 -2
- package/dist/assets/el-select-uDoCZCn5.js.map +1 -0
- package/dist/assets/el-switch-B8IyK6ZR.js +2 -0
- package/dist/assets/el-switch-B8IyK6ZR.js.map +1 -0
- package/dist/assets/{el-switch-legacy.96786863.js → el-switch-legacy-LBGoMV4l.js} +2 -2
- package/dist/assets/{el-switch-abdd5a33.js.map → el-switch-legacy-LBGoMV4l.js.map} +1 -1
- package/dist/assets/el-tab-pane-fWqYc0uG.js +2 -0
- package/dist/assets/el-tab-pane-fWqYc0uG.js.map +1 -0
- package/dist/assets/{el-tab-pane-legacy.143cbc33.js → el-tab-pane-legacy-ChZdms4s.js} +2 -2
- package/dist/assets/el-tab-pane-legacy-ChZdms4s.js.map +1 -0
- package/dist/assets/{el-table-column-19feeab8.js → el-table-column-C3qC7HsW.js} +3 -3
- package/dist/assets/el-table-column-C3qC7HsW.js.map +1 -0
- package/dist/assets/{el-table-column-legacy.afba06f3.js → el-table-column-legacy-Wp8N0Zxv.js} +4 -4
- package/dist/assets/el-table-column-legacy-Wp8N0Zxv.js.map +1 -0
- package/dist/assets/{index-3f82ab7a.css → index-1eHw6sEI.css} +1 -1
- package/dist/assets/index-5sS3uHi0.css +1 -0
- package/dist/assets/index-AYz8tt3l.js +2 -0
- package/dist/assets/index-AYz8tt3l.js.map +1 -0
- package/dist/assets/index-B5tZv3FB.css +1 -0
- package/dist/assets/index-B621FN6u.js +2 -0
- package/dist/assets/index-B621FN6u.js.map +1 -0
- package/dist/assets/{index-68448dbd.js → index-BAFXwCno.js} +2 -2
- package/dist/assets/index-BAFXwCno.js.map +1 -0
- package/dist/assets/index-BN8Mg9Y5.js +2 -0
- package/dist/assets/index-BN8Mg9Y5.js.map +1 -0
- package/dist/assets/index-BYEN2QaU.css +1 -0
- package/dist/assets/index-BghihfR3.css +1 -0
- package/dist/assets/index-Bp9D-Hzs.js +2 -0
- package/dist/assets/index-Bp9D-Hzs.js.map +1 -0
- package/dist/assets/{index-9e6bd406.js → index-BrOLxzFM.js} +1 -1
- package/dist/assets/{index-9e6bd406.js.map → index-BrOLxzFM.js.map} +1 -1
- package/dist/assets/index-C0TTJR9g.js +2 -0
- package/dist/assets/index-C0TTJR9g.js.map +1 -0
- package/dist/assets/index-C1FTaXL2.js +2 -0
- package/dist/assets/index-C1FTaXL2.js.map +1 -0
- package/dist/assets/index-CAbIiez7.js +2 -0
- package/dist/assets/{index-51740dfd.js.map → index-CAbIiez7.js.map} +1 -1
- package/dist/assets/index-CYU98hsF.js +2 -0
- package/dist/assets/index-CYU98hsF.js.map +1 -0
- package/dist/assets/index-Cbj5Qf1k.js +2 -0
- package/dist/assets/index-Cbj5Qf1k.js.map +1 -0
- package/dist/assets/index-CbkKWoQA.css +1 -0
- package/dist/assets/index-CcPY3ZJk.js +2 -0
- package/dist/assets/index-CcPY3ZJk.js.map +1 -0
- package/dist/assets/index-CeWnhlkq.css +1 -0
- package/dist/assets/index-ChQZKkse.css +1 -0
- package/dist/assets/index-CvlaXQXr.js +40 -0
- package/dist/assets/index-CvlaXQXr.js.map +1 -0
- package/dist/assets/index-CwmiY_sv.css +1 -0
- package/dist/assets/{index-78a8b3c7.js → index-D2jrbKvI.js} +2 -2
- package/dist/assets/index-D2jrbKvI.js.map +1 -0
- package/dist/assets/index-D2p3cWtM.css +1 -0
- package/dist/assets/index-DIARiZcJ.js +2 -0
- package/dist/assets/index-DIARiZcJ.js.map +1 -0
- package/dist/assets/index-DVHa0g7s.js +2 -0
- package/dist/assets/{index-f74b7eb6.js.map → index-DVHa0g7s.js.map} +1 -1
- package/dist/assets/index-DaSb9EV4.css +1 -0
- package/dist/assets/index-DvM_o_Iw.js +2 -0
- package/dist/assets/index-DvM_o_Iw.js.map +1 -0
- package/dist/assets/index-E_UelRIx.js +2 -0
- package/dist/assets/index-E_UelRIx.js.map +1 -0
- package/dist/assets/index-Lsr6KH3b.js +2 -0
- package/dist/assets/index-Lsr6KH3b.js.map +1 -0
- package/dist/assets/{index-82a6b493.css → index-ShzTlShR.css} +1 -1
- package/dist/assets/{index-b8357360.js → index-UJqXhonq.js} +2 -2
- package/dist/assets/index-UJqXhonq.js.map +1 -0
- package/dist/assets/index-WblpVXQj.js +2 -0
- package/dist/assets/{index-16b096cf.js.map → index-WblpVXQj.js.map} +1 -1
- package/dist/assets/index-dEAnfrhp.css +1 -0
- package/dist/assets/index-ehQnwCE_.css +1 -0
- package/dist/assets/index-hhTdfxnD.css +1 -0
- package/dist/assets/{index-legacy.1796b3ef.js → index-legacy-3jO8hk9z.js} +2 -2
- package/dist/assets/index-legacy-3jO8hk9z.js.map +1 -0
- package/dist/assets/index-legacy-8ekXefFL.js +2 -0
- package/dist/assets/index-legacy-8ekXefFL.js.map +1 -0
- package/dist/assets/index-legacy-B865ACt-.js +2 -0
- package/dist/assets/index-legacy-B865ACt-.js.map +1 -0
- package/dist/assets/index-legacy-B8pZsXYp.js +2 -0
- package/dist/assets/index-legacy-B8pZsXYp.js.map +1 -0
- package/dist/assets/index-legacy-BA8TBope.js +2 -0
- package/dist/assets/index-legacy-BA8TBope.js.map +1 -0
- package/dist/assets/index-legacy-BWGaTIeh.js +2 -0
- package/dist/assets/index-legacy-BWGaTIeh.js.map +1 -0
- package/dist/assets/index-legacy-BaUX-zxP.js +42 -0
- package/dist/assets/index-legacy-BaUX-zxP.js.map +1 -0
- package/dist/assets/index-legacy-Bwwm9nit.js +2 -0
- package/dist/assets/index-legacy-Bwwm9nit.js.map +1 -0
- package/dist/assets/index-legacy-BzCDv5Tg.js +2 -0
- package/dist/assets/index-legacy-BzCDv5Tg.js.map +1 -0
- package/dist/assets/{index-legacy.7a041259.js → index-legacy-Bziat01y.js} +2 -2
- package/dist/assets/{index-68448dbd.js.map → index-legacy-Bziat01y.js.map} +1 -1
- package/dist/assets/{index-legacy.f84efe08.js → index-legacy-C-gHf8SN.js} +1 -1
- package/dist/assets/index-legacy-C-gHf8SN.js.map +1 -0
- package/dist/assets/index-legacy-D-yT7UP7.js +2 -0
- package/dist/assets/index-legacy-D-yT7UP7.js.map +1 -0
- package/dist/assets/{index-legacy.ec490514.js → index-legacy-D14E8pOh.js} +2 -2
- package/dist/assets/index-legacy-D14E8pOh.js.map +1 -0
- package/dist/assets/index-legacy-D8QuGa98.js +2 -0
- package/dist/assets/index-legacy-D8QuGa98.js.map +1 -0
- package/dist/assets/index-legacy-D93ANJJU.js +2 -0
- package/dist/assets/index-legacy-D93ANJJU.js.map +1 -0
- package/dist/assets/index-legacy-DTtXpYbD.js +2 -0
- package/dist/assets/index-legacy-DTtXpYbD.js.map +1 -0
- package/dist/assets/index-legacy-DZC-JuD-.js +2 -0
- package/dist/assets/index-legacy-DZC-JuD-.js.map +1 -0
- package/dist/assets/index-legacy-DiTQKLfl.js +2 -0
- package/dist/assets/index-legacy-DiTQKLfl.js.map +1 -0
- package/dist/assets/index-legacy-DqLKrBdr.js +2 -0
- package/dist/assets/index-legacy-DqLKrBdr.js.map +1 -0
- package/dist/assets/index-legacy-GmcnXr6o.js +2 -0
- package/dist/assets/index-legacy-GmcnXr6o.js.map +1 -0
- package/dist/assets/index-legacy-z4MDfS45.js +2 -0
- package/dist/assets/index-legacy-z4MDfS45.js.map +1 -0
- package/dist/assets/index-ypHH_Z_A.css +1 -0
- package/dist/assets/isEqual-a1R5cOCU.js +2 -0
- package/dist/assets/{isEqual-95d6c129.js.map → isEqual-a1R5cOCU.js.map} +1 -1
- package/dist/assets/isEqual-legacy-D_cb03Zv.js +2 -0
- package/dist/assets/isEqual-legacy-D_cb03Zv.js.map +1 -0
- package/dist/assets/{other-legacy.39078796.js → other-legacy-DjiCmSH4.js} +1 -1
- package/dist/assets/other-legacy-DjiCmSH4.js.map +1 -0
- package/dist/assets/{other-8d7ba6a0.js → other-yMAyytYx.js} +1 -1
- package/dist/assets/{other-8d7ba6a0.js.map → other-yMAyytYx.js.map} +1 -1
- package/dist/assets/polyfills-legacy-CPmsgIAF.js +4 -0
- package/dist/assets/{refresh-be31af7a.js → refresh-Bz5ULfz9.js} +2 -2
- package/dist/assets/refresh-Bz5ULfz9.js.map +1 -0
- package/dist/assets/{refresh-legacy.600c5af4.js → refresh-legacy-NT5iEzmI.js} +2 -2
- package/dist/assets/refresh-legacy-NT5iEzmI.js.map +1 -0
- package/dist/assets/tip-BCCd4P_x.js +2 -0
- package/dist/assets/tip-BCCd4P_x.js.map +1 -0
- package/dist/assets/{tip-legacy.b6d754fd.js → tip-legacy-Cm2JPa4-.js} +2 -2
- package/dist/assets/tip-legacy-Cm2JPa4-.js.map +1 -0
- package/dist/assets/{tip-9cb18ee8.css → tip-ovQu2XSt.css} +1 -1
- package/dist/assets/validator-BESrcCvQ.js +2 -0
- package/dist/assets/validator-BESrcCvQ.js.map +1 -0
- package/dist/assets/validator-legacy-xarmcLjs.js +2 -0
- package/dist/assets/validator-legacy-xarmcLjs.js.map +1 -0
- package/dist/index.html +6 -7
- package/package.json +30 -24
- package/dist/assets/aria-bc8e8b0f.js.map +0 -1
- package/dist/assets/data-analysis-632af70e.js.map +0 -1
- package/dist/assets/data-board-4290cade.js +0 -2
- package/dist/assets/data-board-4290cade.js.map +0 -1
- package/dist/assets/el-date-picker-b3398f8f.js.map +0 -1
- package/dist/assets/el-dialog-c11c4af2.js +0 -2
- package/dist/assets/el-dialog-c11c4af2.js.map +0 -1
- package/dist/assets/el-dialog-legacy.d2229175.js +0 -2
- package/dist/assets/el-dropdown-item-3eb29c67.js.map +0 -1
- package/dist/assets/el-form-item-fb230be3.js +0 -2
- package/dist/assets/el-form-item-fb230be3.js.map +0 -1
- package/dist/assets/el-form-item-legacy.237ed4b6.js +0 -2
- package/dist/assets/el-loading-e9365e7e.js +0 -2
- package/dist/assets/el-loading-e9365e7e.js.map +0 -1
- package/dist/assets/el-pagination-85149e11.js.map +0 -1
- package/dist/assets/el-progress-b98becda.js +0 -2
- package/dist/assets/el-progress-b98becda.js.map +0 -1
- package/dist/assets/el-select-2a16e5df.js.map +0 -1
- package/dist/assets/el-switch-abdd5a33.js +0 -2
- package/dist/assets/el-tab-pane-db271c8d.js +0 -2
- package/dist/assets/el-tab-pane-db271c8d.js.map +0 -1
- package/dist/assets/el-table-column-19feeab8.js.map +0 -1
- package/dist/assets/index-01e33329.css +0 -1
- package/dist/assets/index-0f83ff96.css +0 -1
- package/dist/assets/index-0fbe23b2.js +0 -2
- package/dist/assets/index-0fbe23b2.js.map +0 -1
- package/dist/assets/index-14d600a5.js +0 -2
- package/dist/assets/index-14d600a5.js.map +0 -1
- package/dist/assets/index-1639ad54.js +0 -15
- package/dist/assets/index-1639ad54.js.map +0 -1
- package/dist/assets/index-16b096cf.js +0 -2
- package/dist/assets/index-1bd2cd2e.js +0 -2
- package/dist/assets/index-1bd2cd2e.js.map +0 -1
- package/dist/assets/index-2c76567d.js +0 -2
- package/dist/assets/index-2c76567d.js.map +0 -1
- package/dist/assets/index-3091894a.css +0 -1
- package/dist/assets/index-34fd4f9f.css +0 -1
- package/dist/assets/index-37e15bc6.css +0 -1
- package/dist/assets/index-43d1d27e.js +0 -2
- package/dist/assets/index-43d1d27e.js.map +0 -1
- package/dist/assets/index-488b0f9e.js +0 -2
- package/dist/assets/index-488b0f9e.js.map +0 -1
- package/dist/assets/index-4b1f55ea.js +0 -2
- package/dist/assets/index-4b1f55ea.js.map +0 -1
- package/dist/assets/index-4c81cf78.css +0 -1
- package/dist/assets/index-51740dfd.js +0 -2
- package/dist/assets/index-5281fad0.js +0 -2
- package/dist/assets/index-5281fad0.js.map +0 -1
- package/dist/assets/index-74330c06.js +0 -2
- package/dist/assets/index-74330c06.js.map +0 -1
- package/dist/assets/index-76f31e30.css +0 -1
- package/dist/assets/index-76ff9b9b.css +0 -1
- package/dist/assets/index-78a8b3c7.js.map +0 -1
- package/dist/assets/index-98b55468.css +0 -1
- package/dist/assets/index-9e6a9bcf.js +0 -2
- package/dist/assets/index-9e6a9bcf.js.map +0 -1
- package/dist/assets/index-ac06071b.js +0 -2
- package/dist/assets/index-ac06071b.js.map +0 -1
- package/dist/assets/index-adc1b681.js +0 -2
- package/dist/assets/index-adc1b681.js.map +0 -1
- package/dist/assets/index-b8357360.js.map +0 -1
- package/dist/assets/index-d09329eb.js +0 -2
- package/dist/assets/index-d09329eb.js.map +0 -1
- package/dist/assets/index-d3ae2239.css +0 -1
- package/dist/assets/index-da51da36.css +0 -1
- package/dist/assets/index-e7d8a83e.css +0 -1
- package/dist/assets/index-eb08e7b7.css +0 -1
- package/dist/assets/index-f31c9ba4.css +0 -1
- package/dist/assets/index-f74b7eb6.js +0 -2
- package/dist/assets/index-legacy.082ccf5b.js +0 -2
- package/dist/assets/index-legacy.12de1889.js +0 -2
- package/dist/assets/index-legacy.227978b5.js +0 -2
- package/dist/assets/index-legacy.296716c3.js +0 -2
- package/dist/assets/index-legacy.36482c14.js +0 -2
- package/dist/assets/index-legacy.41d8801d.js +0 -2
- package/dist/assets/index-legacy.4b2923ee.js +0 -2
- package/dist/assets/index-legacy.4c1d6eb3.js +0 -2
- package/dist/assets/index-legacy.820f4ba0.js +0 -2
- package/dist/assets/index-legacy.8311ba4a.js +0 -2
- package/dist/assets/index-legacy.9eb93981.js +0 -18
- package/dist/assets/index-legacy.a19ed25e.js +0 -2
- package/dist/assets/index-legacy.b8de0bf4.js +0 -2
- package/dist/assets/index-legacy.e932a3d4.js +0 -2
- package/dist/assets/index-legacy.e96fb189.js +0 -2
- package/dist/assets/index-legacy.ed2883a1.js +0 -2
- package/dist/assets/index-legacy.f16524a6.js +0 -2
- package/dist/assets/isEqual-95d6c129.js +0 -2
- package/dist/assets/isEqual-legacy.83836994.js +0 -2
- package/dist/assets/polyfills-legacy.99e38685.js +0 -4
- package/dist/assets/refresh-be31af7a.js.map +0 -1
- package/dist/assets/tip-822b05b7.js +0 -2
- package/dist/assets/tip-822b05b7.js.map +0 -1
- package/dist/assets/validator-5c60ab85.js +0 -2
- package/dist/assets/validator-5c60ab85.js.map +0 -1
- package/dist/assets/validator-legacy.86b93c0e.js +0 -2
- /package/dist/assets/{el-date-picker-cf2e83b6.css → el-date-picker-NjWHL2Br.css} +0 -0
- /package/dist/assets/{el-dialog-25bd2fb8.css → el-dialog-Cu2jwelC.css} +0 -0
- /package/dist/assets/{el-dropdown-item-0c6ddabc.css → el-dropdown-item-CUgTpiu6.css} +0 -0
- /package/dist/assets/{el-form-item-3aad794a.css → el-form-item-Cc9R0dZ1.css} +0 -0
- /package/dist/assets/{el-loading-d0f2d079.css → el-loading-Uv12lkco.css} +0 -0
- /package/dist/assets/{el-pagination-bf7c736d.css → el-pagination-MvCAleW2.css} +0 -0
- /package/dist/assets/{el-progress-63aabe3a.css → el-progress-njCW9-w4.css} +0 -0
- /package/dist/assets/{el-select-6be23320.css → el-select-BSO0hXRI.css} +0 -0
- /package/dist/assets/{el-switch-aeab2c6b.css → el-switch-D6dVIPlw.css} +0 -0
- /package/dist/assets/{el-tab-pane-4a1bb4c7.css → el-tab-pane-kUw7IczA.css} +0 -0
- /package/dist/assets/{el-table-column-6c2089f9.css → el-table-column-DMXHP8sd.css} +0 -0
- /package/dist/assets/{index-93c733b3.css → index-C4H-Ptjt.css} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-legacy-D8QuGa98.js","sources":["../../src/pages/about/index.vue"],"sourcesContent":["<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>如有私有化的需求,可自行部署使用(也可 <router-link to=\"/author\">联系作者</router-link> 提供帮助)</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<script lang=\"ts\">\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n setup() {\n return {\n\n }\n },\n})\n</script>\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,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","setup","_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_2","class","_hoisted_3","_createElementVNode","_hoisted_4","_hoisted_5","_resolveComponent","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_component_router_link","to","default","_withCtx","_hoisted_6","_createTextVNode","_"],"mappings":"opCAyFA,MAAAA,EAAeC,EAAgB,CAC7BC,MAAQA,KACC,MAxFMC,EAAAC,IAAKC,EAAQ,mBAAAD,EAAAA,IAAAE,IAAAF,qBAELG,EAAY,CAAAC,MAAA,SAAIC,EAAwDN,GAAA,IAAAO,EAAA,MAAA,CAAAF,MAAA,+EAKjFG,EAAAR,GAAG,IAA0BO,EAAA,MAAA,CAAAF,MAAA,SAAA,CAAAE,EAAA,KAAA,KAAA,MAEfA,EAAA,IAAA,KAAA,qCAZ9BE,EAAA,CAAAJ,MAAA,gqHACIK,EAmFM,sBAjFEC,IAIMC,EAAA,MAAAC,EAAA,CADYN,EAAA,OAAA,KAAA,CAAAA,EAN9B,MAKkGH,EAAA,CAAAU,EAA9EC,EAA8E,CAAAC,GAAA,KAAA,CAAAC,QAAAC,GAAA,IAAA,CALlGZ,aAYYE,IAaI,MAA6EC,EAAA,CAAAU,EAAVZ,EAAA,IAAA,KAAA,CAAAa,EAzBnF,wBAyBqEN,EAzBrEC,EAyBqE,CAAAC,GAAA,WAAA,CAAAC,QAAAC,GAAA,IAAA,CAzBrEE,EAAA,WAAAC,EAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
System.register(["./index-legacy-BaUX-zxP.js"],(function(e,a){"use strict";var l,n,t,u,o,r,d,i,s,c,v,p,m,g,h,f,x,w,V,b,y,k,_,C,z,A,U,T;return{setters:[e=>{l=e.g,n=e.d,t=e.a,u=e.c,o=e.b,r=e.r,d=e.h,i=e.u,s=e.i,c=e.j,v=e.w,p=e.k,m=e.l,g=e.e,h=e.t,f=e.m,x=e.n,w=e.q,V=e.E,b=e.P,y=e.U,k=e.s,_=e.v,C=e.x,z=e.y,A=e.z,U=e.A,T=e._}],execute:function(){var a=document.createElement("style");a.textContent=".login[data-v-4e645608]{background-image:linear-gradient(120deg,#a1c4fd,#c2e9fb);min-height:100vh}.inputArea[data-v-4e645608]{margin:0 auto;max-width:320px}.inputArea div[data-v-4e645608]{margin-top:10px}.links[data-v-4e645608]{display:flex;justify-content:center}.links a[data-v-4e645608]{color:#409eff;margin-left:10px}\n",document.head.appendChild(a);const j=n({name:"ChatDotSquare"}),H={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},M=[o("path",{fill:"currentColor",d:"M273.536 736H800a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64H224a64 64 0 0 0-64 64v570.88L273.536 736zM296 800 147.968 918.4A32 32 0 0 1 96 893.44V256a128 128 0 0 1 128-128h576a128 128 0 0 1 128 128v416a128 128 0 0 1-128 128H296z"},null,-1),o("path",{fill:"currentColor",d:"M512 499.2a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm192 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm-384 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4z"},null,-1)];var q=l(j,[["render",function(e,a,l,n,o,r){return t(),u("svg",H,M)}]]);const D={class:"login"},E={class:"inputArea"},P={class:"tc"},S={class:"links"};e("default",T(n({__name:"index",setup(e){const a=r(""),l=r(""),n=r(""),T=r(""),j=d(),H=i(),M=r("获取验证码"),$=r(0),B=()=>{0!==$.value?(M.value=`${$.value}s`,$.value-=1,setTimeout(B,1e3)):M.value="获取验证码"},I=()=>{w.test(a.value)?b.getCode(a.value).then((()=>{$.value=120,B(),V.success("获取成功,请注意查看手机短信")})):V.warning("手机号格式不正确")},L=()=>{(w.test(a.value)?A.test(n.value)?n.value!==T.value?(V.warning("两次输入的密码不一致"),0):U.test(l.value)||(V.warning("验证码不正确(4位 数字)"),0):(V.warning("密码格式不正确(6-16位 支持字母/数字/下划线)"),0):(V.warning("手机号格式不正确"),0))&&y.resetPwd(a.value,l.value,n.value).then((e=>{V.success("密码重置成功");const{token:a}=e.data;j.commit("user/setToken",a),H.replace({name:"dashboard"})})).catch((e=>{const{code:a,data:l}=e,n={1008:"该手机号未绑定任何账号",1003:"验证码不正确",1004:"密码格式不正确",1010:"账号已被封禁,有疑问请联系管理员",1009:`账号已被冻结,解冻时间${l?.openTime&&k(new Date(l.openTime))}`};V.error(n[a]||"重置失败,未知错误")}))};return(e,r)=>{const d=_,i=C,w=z,V=s("router-link");return t(),u("div",D,[c(x,null,{default:v((()=>[o("div",E,[o("div",null,[c(d,{maxlength:"11",placeholder:"手机号","prefix-icon":p(m),modelValue:a.value,"onUpdate:modelValue":r[0]||(r[0]=e=>a.value=e),clearable:""},null,8,["prefix-icon","modelValue"])]),o("div",null,[c(d,{maxlength:"4",type:"number",placeholder:"请输入验证码","prefix-icon":p(q),modelValue:l.value,"onUpdate:modelValue":r[1]||(r[1]=e=>l.value=e),clearable:""},{append:v((()=>[c(i,{disabled:0!==$.value,onClick:I},{default:v((()=>[g(h(M.value),1)])),_:1},8,["disabled"])])),_:1},8,["prefix-icon","modelValue"])]),o("div",null,[c(d,{maxlength:"16",minlength:"6",type:"password",placeholder:"请输入新密码","prefix-icon":p(f),modelValue:n.value,"onUpdate:modelValue":r[2]||(r[2]=e=>n.value=e),"show-password":"",clearable:""},null,8,["prefix-icon","modelValue"])]),o("div",null,[c(d,{maxlength:"16",minlength:"6",type:"password",placeholder:"请再次输入新密码","prefix-icon":p(f),modelValue:T.value,"onUpdate:modelValue":r[3]||(r[3]=e=>T.value=e),"show-password":"",clearable:""},null,8,["prefix-icon","modelValue"])]),o("div",P,[c(i,{onClick:L,type:"primary",class:"fw-w100"},{default:v((()=>[g("确认重置")])),_:1})]),c(w),o("div",S,[c(V,{to:"/login"},{default:v((()=>[g("去登陆")])),_:1})])])])),_:1})])}}}),[["__scopeId","data-v-4e645608"]]))}}}));
|
|
2
|
+
//# sourceMappingURL=index-legacy-D93ANJJU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-legacy-D93ANJJU.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/chat-dot-square.mjs","../../src/pages/reset/index.vue"],"sourcesContent":["import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"ChatDotSquare\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M273.536 736H800a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64H224a64 64 0 0 0-64 64v570.88L273.536 736zM296 800 147.968 918.4A32 32 0 0 1 96 893.44V256a128 128 0 0 1 128-128h576a128 128 0 0 1 128 128v416a128 128 0 0 1-128 128H296z\"\n}, null, -1);\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M512 499.2a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm192 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm-384 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4z\"\n}, null, -1);\nconst _hoisted_4 = [\n _hoisted_2,\n _hoisted_3\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_4);\n}\nvar chatDotSquare = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { chatDotSquare as default };\n","<template>\n <div class=\"login\">\n <login-panel>\n <!-- 表单输入区域 -->\n <div class=\"inputArea\">\n <div>\n <el-input\n maxlength=\"11\"\n placeholder=\"手机号\"\n :prefix-icon=\"Phone\"\n v-model=\"account\"\n clearable\n ></el-input>\n </div>\n <div>\n <el-input\n maxlength=\"4\"\n type=\"number\"\n placeholder=\"请输入验证码\"\n :prefix-icon=\"ChatDotSquare\"\n v-model=\"code\"\n clearable\n >\n <template #append>\n <!-- 获取验证码 -->\n <el-button :disabled=\"time !== 0\" @click=\"getCode\">{{ codeText }}</el-button>\n </template>\n </el-input>\n </div>\n <div>\n <el-input\n maxlength=\"16\"\n minlength=\"6\"\n type=\"password\"\n placeholder=\"请输入新密码\"\n :prefix-icon=\"Lock\"\n v-model=\"pwd1\"\n show-password\n clearable\n ></el-input>\n </div>\n <div>\n <el-input\n maxlength=\"16\"\n minlength=\"6\"\n type=\"password\"\n placeholder=\"请再次输入新密码\"\n :prefix-icon=\"Lock\"\n v-model=\"pwd2\"\n show-password\n clearable\n ></el-input>\n </div>\n <div class=\"tc\">\n <el-button @click=\"reset\" type=\"primary\" class=\"fw-w100\">确认重置</el-button>\n </div>\n <el-divider></el-divider>\n <div class=\"links\">\n <router-link to=\"/login\">去登陆</router-link>\n </div>\n </div>\n </login-panel>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { ElMessage } from 'element-plus'\nimport {\n Lock, Phone, ChatDotSquare,\n} from '@element-plus/icons-vue'\nimport {\n ref,\n} from 'vue'\nimport { useRouter } from 'vue-router'\nimport { useStore } from 'vuex'\nimport loginPanel from '@components/loginPanel.vue'\nimport { PublicApi, UserApi } from '@/apis'\nimport {\n rMobilePhone, rPassword, rVerCode,\n} from '@/utils/regExp'\nimport { formatDate } from '@/utils/stringUtil'\n\nconst account = ref('')\nconst code = ref('')\nconst pwd1 = ref('')\nconst pwd2 = ref('')\nconst $store = useStore()\nconst $router = useRouter()\nconst redirectDashBoard = () => {\n $router.replace({\n name: 'dashboard',\n })\n}\nconst checkForm = () => {\n if (!rMobilePhone.test(account.value)) {\n ElMessage.warning('手机号格式不正确')\n return false\n }\n\n if (!rPassword.test(pwd1.value)) {\n ElMessage.warning('密码格式不正确(6-16位 支持字母/数字/下划线)')\n return false\n }\n if (pwd1.value !== pwd2.value) {\n ElMessage.warning('两次输入的密码不一致')\n return false\n }\n\n if (!rVerCode.test(code.value)) {\n ElMessage.warning('验证码不正确(4位 数字)')\n return false\n }\n return true\n}\nconst codeText = ref('获取验证码')\nconst time = ref(0)\nconst refreshCodeText = () => {\n if (time.value === 0) {\n codeText.value = '获取验证码'\n return\n }\n codeText.value = `${time.value}s`\n time.value -= 1\n setTimeout(refreshCodeText, 1000)\n}\nconst getCode = () => {\n if (!rMobilePhone.test(account.value)) {\n ElMessage.warning('手机号格式不正确')\n return\n }\n PublicApi.getCode(account.value).then(() => {\n time.value = 120\n refreshCodeText()\n ElMessage.success('获取成功,请注意查看手机短信')\n })\n}\nconst reset = () => {\n if (!checkForm()) {\n return\n }\n UserApi\n .resetPwd(account.value, code.value, pwd1.value)\n .then((res) => {\n ElMessage.success('密码重置成功')\n const { token } = res.data\n $store.commit('user/setToken', token)\n redirectDashBoard()\n })\n .catch((err) => {\n const { code: c, data } = err\n const options: any = {\n 1008: '该手机号未绑定任何账号',\n 1003: '验证码不正确',\n 1004: '密码格式不正确',\n 1010: '账号已被封禁,有疑问请联系管理员',\n 1009: `账号已被冻结,解冻时间${data?.openTime && formatDate(new Date(data.openTime))}`,\n }\n ElMessage.error(options[c] || '重置失败,未知错误')\n })\n}\n\n</script>\n\n<style scoped lang=\"scss\">\n.login {\n background-image: linear-gradient(120deg, #a1c4fd 0%, #c2e9fb 100%);\n min-height: 100vh;\n}\n\n.inputArea {\n // padding: 1rem;\n margin: 0 auto;\n max-width: 320px;\n div {\n margin-top: 10px;\n }\n}\n// 登录按钮下方链接\n.links {\n display: flex;\n justify-content: center;\n a {\n color: #409eff;\n margin-left: 10px;\n }\n}\n</style>\n"],"names":["_sfc_main","defineComponent","name","_hoisted_1","viewBox","xmlns","_hoisted_4","createElementVNode","fill","d","chatDotSquare","_export_sfc","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","account","ref","code","pwd1","pwd2","$store","useStore","$router","useRouter","codeText","time","refreshCodeText","value","setTimeout","getCode","rMobilePhone","test","PublicApi","then","ElMessage","success","warning","reset","rPassword","rVerCode","UserApi","resetPwd","res","token","data","commit","replace","catch","err","c","options","openTime","formatDate","Date","error"],"mappings":"+uBAGA,MAAMA,EAAYC,EAAgB,CAChCC,KAAM,kBAEFC,EAAa,CACjBC,QAAS,gBACTC,MAAO,8BAUHC,EAAa,CARgBC,EAAmB,OAAQ,CAC5DC,KAAM,eACNC,EAAG,qOACF,MAAO,GACyBF,EAAmB,OAAQ,CAC5DC,KAAM,eACNC,EAAG,8KACF,MAAO,IAQV,IAAIC,EAAgCC,EAAYX,EAAW,CAAC,CAAC,SAH7D,SAAqBY,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GACxD,OAAOC,IAAaC,EAAmB,MAAOhB,EAAYG,EAC5D,6HCyDM,MAAAc,EAAUC,EAAI,IACdC,EAAOD,EAAI,IACXE,EAAOF,EAAI,IACXG,EAAOH,EAAI,IACXI,EAASC,IACTC,EAAUC,IA2BVC,EAAWR,EAAI,SACfS,EAAOT,EAAI,GACXU,EAAkBA,KACH,IAAfD,EAAKE,OAIAH,EAAAG,MAAQ,GAAGF,EAAKE,SACzBF,EAAKE,OAAS,EACdC,WAAWF,EAAiB,MAL1BF,EAASG,MAAQ,OAKa,EAE5BE,EAAUA,KACTC,EAAaC,KAAKhB,EAAQY,OAI/BK,EAAUH,QAAQd,EAAQY,OAAOM,MAAK,KACpCR,EAAKE,MAAQ,IACGD,IAChBQ,EAAUC,QAAQ,iBAAgB,IANlCD,EAAUE,QAAQ,WAOnB,EAEGC,EAAQA,MA1CPP,EAAaC,KAAKhB,EAAQY,OAK1BW,EAAUP,KAAKb,EAAKS,OAIrBT,EAAKS,QAAUR,EAAKQ,OACtBO,EAAUE,QAAQ,cACX,GAGJG,EAASR,KAAKd,EAAKU,SACtBO,EAAUE,QAAQ,qBATlBF,EAAUE,QAAQ,8BACX,IANPF,EAAUE,QAAQ,YACX,KA6CNI,EAAAC,SAAS1B,EAAQY,MAAOV,EAAKU,MAAOT,EAAKS,OACzCM,MAAMS,IACLR,EAAUC,QAAQ,UACZ,MAAAQ,MAAEA,GAAUD,EAAIE,KACfxB,EAAAyB,OAAO,gBAAiBF,GAxDnCrB,EAAQwB,QAAQ,CACdjD,KAAM,aAwDc,IAEnBkD,OAAOC,IACN,MAAQ/B,KAAMgC,EAAGL,KAAAA,GAASI,EACpBE,EAAe,CACnB,KAAM,cACN,KAAM,SACN,KAAM,UACN,KAAM,mBACN,KAAM,cAAcN,GAAMO,UAAYC,EAAW,IAAIC,KAAKT,EAAKO,cAEjEjB,EAAUoB,MAAMJ,EAAQD,IAAM,YAAW,GAC1C","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
System.register(["./index-legacy-BaUX-zxP.js","./el-switch-legacy-LBGoMV4l.js","./validator-legacy-xarmcLjs.js"],(function(e,a){"use strict";var t,l,n,s,d,i,o,u,r,c,p,v,m,x,f,g,h,y,b,w,k,_,C,S,j,z;return{setters:[e=>{t=e.d,l=e.u,n=e.O,s=e.Z,d=e.r,i=e.c_,o=e.o,u=e.bs,r=e.i,c=e.a,p=e.c,v=e.b,m=e.j,x=e.w,f=e.e,g=e.F,h=e.C,y=e.t,b=e.D,w=e.k,k=e.E,_=e.y,C=e.x,S=e.v,j=e._},e=>{z=e.E},null],execute:function(){var a=document.createElement("style");a.textContent="@media screen and (max-width: 700px){.user[data-v-1e07da88]{margin-top:40px!important}}.user[data-v-1e07da88]{margin:0 auto}.panel[data-v-1e07da88]{max-width:1256px;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}.routes[data-v-1e07da88]{max-width:500px;margin:0 auto}.routes li[data-v-1e07da88]{display:flex;padding:20px;align-items:center}.routes li .title[data-v-1e07da88]{font-weight:700;margin:0 10px}.config-btn[data-v-1e07da88]{text-align:center}.config-panel[data-v-1e07da88]{max-width:500px;margin:0 auto}\n",document.head.appendChild(a);const O={class:"user"},D={class:"panel"},J={class:"routes"},N={class:"title"},R={class:"path"},V={class:"config-btn"},E={class:"config-panel"};e("default",j(t({__name:"index",setup(e){const a=l(),t=n((()=>a.options.routes.filter((e=>e.meta?.allowDisabled)))),j=s([]),F=d(!1),{value:I,updateValue:U}=i(),Z=d("");function q(){F.value=!0,Z.value=JSON.stringify(I.value,null,2)}async function A(){try{const e=JSON.parse(Z.value);I.value=e,await U(),F.value=!1,k.success("保存成功")}catch(e){return k.error("JSON 格式错误")}}return o((()=>{for(const e of t.value)u.checkDisabledRoute(e.path).then((a=>{j.push({path:e.path,name:e.name.toString(),title:e.meta.title,disabled:!!a.data?.status})}))})),(e,a)=>{const t=_,l=z,n=C,s=r("json-viewer"),d=S;return c(),p("div",O,[v("div",D,[m(t,null,{default:x((()=>[f("禁用路由管理")])),_:1}),v("ul",J,[(c(!0),p(g,null,h(j,(e=>(c(),p("li",{key:e.name},[m(l,{"model-value":!e.disabled,style:{"--el-switch-on-color":"#13ce66","--el-switch-off-color":"#ff4949"},onChange:a=>function(e){u.addDisabledRoute(e.path,!e.disabled).then((()=>{e.disabled=!e.disabled,k.success("切换成功")}))}(e)},null,8,["model-value","onChange"]),v("span",N,y(e.title),1),v("span",R,y(e.path)+y("/register"===e.path?" 关闭后将同时禁用注册功能":""),1)])))),128))]),m(t,null,{default:x((()=>[f("全局配置管理(JSON)")])),_:1}),v("div",V,[F.value?(c(),p(g,{key:1},[m(n,{size:"small",type:"danger",onClick:a[0]||(a[0]=e=>F.value=!1)},{default:x((()=>[f(" 取消 ")])),_:1}),m(n,{size:"small",type:"success",onClick:A},{default:x((()=>[f(" 保存 ")])),_:1})],64)):(c(),b(n,{key:0,size:"small",type:"primary",onClick:q},{default:x((()=>[f(" 更新 ")])),_:1}))]),v("div",E,[F.value?(c(),b(d,{key:1,modelValue:Z.value,"onUpdate:modelValue":a[1]||(a[1]=e=>Z.value=e),autosize:{minRows:2,maxRows:30},type:"textarea"},null,8,["modelValue"])):(c(),b(s,{key:0,value:w(I),"expand-depth":5,copyable:"",boxed:"",sort:""},null,8,["value"]))])])])}}}),[["__scopeId","data-v-1e07da88"]]))}}}));
|
|
2
|
+
//# sourceMappingURL=index-legacy-DTtXpYbD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-legacy-DTtXpYbD.js","sources":["../../src/pages/dashboard/manage/config/index.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ElMessage } from 'element-plus'\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { SuperOverviewApi } from '@/apis'\nimport { useSiteAllConfig } from '@/composables'\n\nconst $router = useRouter()\nconst routes = computed(() =>\n $router.options.routes.filter(v => v.meta?.allowDisabled),\n)\nconst showRoutes = reactive<\n {\n path: string\n name: string\n title: string\n disabled: boolean\n }[]\n>([])\n\nfunction handleChangeRoute(r: (typeof showRoutes)[0]) {\n SuperOverviewApi.addDisabledRoute(r.path, !r.disabled).then(() => {\n r.disabled = !r.disabled\n ElMessage.success('切换成功')\n })\n}\n\nconst editConfig = ref(false)\nconst { value: jsonData, updateValue: updateJsonData } = useSiteAllConfig()\n\nconst editJSON = ref('')\n\nfunction handleEditConfig() {\n editConfig.value = true\n editJSON.value = JSON.stringify(jsonData.value, null, 2)\n}\nasync function handleSaveConfig() {\n try {\n const data = JSON.parse(editJSON.value)\n jsonData.value = data\n await updateJsonData()\n editConfig.value = false\n ElMessage.success('保存成功')\n }\n catch (e) {\n return ElMessage.error('JSON 格式错误')\n }\n}\nonMounted(() => {\n for (const r of routes.value) {\n SuperOverviewApi.checkDisabledRoute(r.path).then((v) => {\n showRoutes.push({\n path: r.path,\n name: r.name.toString(),\n title: r.meta.title,\n disabled: !!v.data?.status,\n })\n })\n }\n})\n</script>\n\n<template>\n <div class=\"user\">\n <div class=\"panel\">\n <el-divider>禁用路由管理</el-divider>\n <ul class=\"routes\">\n <li v-for=\"r in showRoutes\" :key=\"r.name\">\n <el-switch\n :model-value=\"!r.disabled\" style=\"\n --el-switch-on-color: #13ce66;\n --el-switch-off-color: #ff4949;\n \" @change=\"handleChangeRoute(r)\"\n />\n <span class=\"title\">{{ r.title }}</span>\n <span class=\"path\">{{ r.path }}{{ r.path === '/register' ? ' 关闭后将同时禁用注册功能' : '' }}</span>\n </li>\n </ul>\n <el-divider>全局配置管理(JSON)</el-divider>\n <div class=\"config-btn\">\n <el-button v-if=\"!editConfig\" size=\"small\" type=\"primary\" @click=\"handleEditConfig\">\n 更新\n </el-button>\n <template v-else>\n <el-button size=\"small\" type=\"danger\" @click=\"editConfig = false\">\n 取消\n </el-button>\n <el-button size=\"small\" type=\"success\" @click=\"handleSaveConfig\">\n 保存\n </el-button>\n </template>\n </div>\n <div class=\"config-panel\">\n <json-viewer\n v-if=\"!editConfig\"\n :value=\"jsonData\"\n :expand-depth=\"5\"\n copyable\n boxed\n sort\n />\n <!-- TODO: JSON editor -->\n <el-input\n v-else\n v-model=\"editJSON\"\n :autosize=\"{ minRows: 2, maxRows: 30 }\"\n type=\"textarea\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n@media screen and (max-width: 700px) {\n .user {\n margin-top: 40px !important;\n }\n}\n\n.user {\n margin: 0 auto;\n}\n\n.panel {\n max-width: 1256px;\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n border-radius: 4px;\n}\n\n.routes {\n max-width: 500px;\n margin: 0 auto;\n\n li {\n display: flex;\n padding: 20px;\n align-items: center;\n\n .title {\n font-weight: bold;\n margin: 0 10px;\n }\n }\n}\n.config-btn {\n text-align: center;\n}\n.config-panel {\n max-width: 500px;\n margin: 0 auto;\n}\n</style>\n"],"names":["$router","useRouter","routes","computed","options","filter","v","meta","allowDisabled","showRoutes","reactive","editConfig","ref","value","jsonData","updateValue","updateJsonData","useSiteAllConfig","editJSON","handleEditConfig","JSON","stringify","async","handleSaveConfig","data","parse","ElMessage","success","e","error","onMounted","r","SuperOverviewApi","checkDisabledRoute","path","then","push","name","toString","title","disabled","status","addDisabledRoute"],"mappings":"svCAOA,MAAMA,EAAUC,IACVC,EAASC,GAAS,IACtBH,EAAQI,QAAQF,OAAOG,QAAYC,GAAAA,EAAEC,MAAMC,kBAEvCC,EAAaC,EAOjB,IASIC,EAAaC,GAAI,IACfC,MAAOC,EAAUC,YAAaC,GAAmBC,IAEnDC,EAAWN,EAAI,IAErB,SAASO,IACPR,EAAWE,OAAQ,EACnBK,EAASL,MAAQO,KAAKC,UAAUP,EAASD,MAAO,KAAM,EACxD,CACAS,eAAeC,IACT,IACF,MAAMC,EAAOJ,KAAKK,MAAMP,EAASL,OACjCC,EAASD,MAAQW,QACXR,IACNL,EAAWE,OAAQ,EACnBa,EAAUC,QAAQ,cAEbC,GACE,OAAAF,EAAUG,MAAM,YACzB,CACF,QACAC,GAAU,KACG,IAAA,MAAAC,KAAK7B,EAAOW,MACrBmB,EAAiBC,mBAAmBF,EAAEG,MAAMC,MAAM7B,IAChDG,EAAW2B,KAAK,CACdF,KAAMH,EAAEG,KACRG,KAAMN,EAAEM,KAAKC,WACbC,MAAOR,EAAExB,KAAKgC,MACdC,WAAYlC,EAAEkB,MAAMiB,QACrB,GAEL,uTAtCF,SAA2BV,GACRC,EAAAU,iBAAiBX,EAAEG,MAAOH,EAAES,UAAUL,MAAK,KACxDJ,EAAAS,UAAYT,EAAES,SAChBd,EAAUC,QAAQ,OAAM,GAE5B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
System.register(["./index-legacy-BaUX-zxP.js","./el-form-item-legacy-CNxAgkUf.js","./el-date-picker-legacy-CSDTG-yp.js","./el-dialog-legacy-DfEb6k1B.js","./el-pagination-legacy-CeTPKkkI.js","./el-select-legacy-BFhy033s.js","./el-table-column-legacy-Wp8N0Zxv.js","./index-legacy-C-gHf8SN.js","./refresh-legacy-NT5iEzmI.js","./index-legacy-3jO8hk9z.js","./isEqual-legacy-D_cb03Zv.js","./index-legacy-Bziat01y.js","./validator-legacy-xarmcLjs.js","./aria-legacy-B70JmEZA.js"],(function(e,l){"use strict";var a,t,o,n,u,i,s,d,r,c,p,m,v,f,g,w,b,h,y,x,C,V,_,k,z,U,S,T,j,E,L,F,M,$,A,B,O,R,q,D,H,P,N,I,Z,G,W,Y,J;return{setters:[e=>{a=e.g,t=e.d,o=e.a,n=e.c,u=e.b,i=e.Z,s=e.bt,d=e.r,r=e.O,c=e.o,p=e.j,m=e.w,v=e.F,f=e.C,g=e.D,w=e.k,b=e.bu,h=e.e,y=e.t,x=e.s,C=e.a5,V=e.S,_=e.H,k=e.a0,z=e.E,U=e.q,S=e.P,T=e.v,j=e.x,E=e.p,L=e.f,F=e.z,M=e.A,$=e._},e=>{A=e.E,B=e.a},e=>{O=e.d,R=e.E},e=>{q=e.u,D=e.E},e=>{H=e.s,P=e.E},e=>{N=e.E,I=e.a},e=>{Z=e.E,G=e.a},e=>{W=e.U},e=>{Y=e.r},e=>{J=e.E},null,null,null,null],execute:function(){var l=document.createElement("style");l.textContent="@media screen and (max-width: 700px){.user[data-v-aa923229]{margin-top:40px!important}.log-filter[data-v-aa923229]{justify-content:center}}.w100[data-v-aa923229]{width:100px}.user[data-v-aa923229]{margin:0 auto}.panel[data-v-aa923229]{max-width:1256px;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}.log-filter[data-v-aa923229]{display:flex;flex-wrap:wrap}.log-filter .item[data-v-aa923229]{margin-right:10px;margin-bottom:10px}.log-filter .item .label[data-v-aa923229]{margin-right:10px;font-size:12px}.text-btn-list[data-v-aa923229]{display:flex;flex-wrap:wrap}.text-btn-list button[data-v-aa923229]{margin-left:0}.user-oss-info[data-v-aa923229]{list-style:none}.user-oss-info li[data-v-aa923229]{margin-bottom:10px}.user-oss-info .clear-btn[data-v-aa923229]{margin-left:10px}.user-oss-info.disabled[data-v-aa923229]{background-color:rgba(245,108,108,.3)}\n",document.head.appendChild(l);const K=t({name:"Message"}),Q={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},X=[u("path",{fill:"currentColor",d:"M128 224v512a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V224H128zm0-64h768a64 64 0 0 1 64 64v512a128 128 0 0 1-128 128H192A128 128 0 0 1 64 736V224a64 64 0 0 1 64-64z"},null,-1),u("path",{fill:"currentColor",d:"M904 224 656.512 506.88a192 192 0 0 1-289.024 0L120 224h784zm-698.944 0 210.56 240.704a128 128 0 0 0 192.704 0L818.944 224H205.056z"},null,-1)];var ee=a(K,[["render",function(e,l,a,t,u,i){return o(),n("svg",Q,X)}]]);const le=e=>(E("data-v-aa923229"),e=e(),L(),e),ae={class:"user"},te={class:"panel"},oe={class:"p10 log-filter"},ne={class:"item"},ue=le((()=>u("span",{class:"label"},"状态",-1))),ie={class:"item"},se=le((()=>u("span",{class:"label"},"排序",-1))),de={class:"item"},re={class:"item"},ce={class:"item"},pe=le((()=>u("br",null,null,-1))),me=le((()=>u("br",null,null,-1))),ve=le((()=>u("br",null,null,-1))),fe=le((()=>u("br",null,null,-1))),ge=le((()=>u("br",null,null,-1))),we=le((()=>u("br",null,null,-1))),be=le((()=>u("br",null,null,-1))),he=le((()=>u("br",null,null,-1))),ye=le((()=>u("br",null,null,-1))),xe=le((()=>u("br",null,null,-1))),Ce=le((()=>u("br",null,null,-1))),Ve={class:"text-btn-list"},_e={class:"flex fc p10"},ke={class:"tc"},ze={class:"dialog-footer"},Ue={class:"tc"},Se={key:0,style:{"margin-top":"10px"},class:"tc"},Te={class:"dialog-footer"},je={class:"tc"},Ee={class:"dialog-footer"},Le={class:"tc"},Fe={class:"dialog-footer"},Me={class:"tc"},$e={class:"dialog-footer"},Ae={class:"tc"},Be={class:"dialog-footer"};e("default",$(t({__name:"index",setup(e){const l=i([]);function a(){k.getUserList().then((e=>{l.splice(0,l.length,...e.data.list),z.success("列表数据刷新成功")}))}const t=s("userStatusType",W.NORMAL),E=d(""),L=i([{label:"正常",type:W.NORMAL},{label:"冻结",type:W.FREEZE},{label:"封禁",type:W.BAN}]),$=s("userListSortType","id"),K=[{label:"ID",value:"id"},{label:"累计上传数量",value:"fileCount"},{label:"累计占用空间",value:"originFileSize"},{label:"OSS文件数量",value:"ossCount"},{label:"最后登录时间",value:"lastLoginTime"},{label:"登录次数",value:"login_count"},{label:"容量大小",value:"size"},{label:"占用空间",value:"usage"},{label:"限制使用",value:"limitUpload"},{label:"下载次数",value:"downloadCount"},{label:"累计下载大小",value:"downloadSize"},{label:"累计费用",value:"cost"}],Q=s("userListSortOrder","desc"),X=[{label:"升序",value:"asc"},{label:"降序",value:"desc"}],le=r((()=>{const e=[...l];return e.sort(((e,l)=>"asc"===Q.value?e[$.value]-l[$.value]:l[$.value]-e[$.value])),e.filter((e=>e.status===t.value)).filter((e=>{const{id:l,account:a,phone:t,joinTime:o,loginCount:n,loginTime:u,openTime:i}=e;return 0===E.value.length||`${l} ${a} ${t} ${u} ${x(i)} ${x(n)} ${x(o)}`.includes(E.value)}))})),Oe=s("userListPageSize",10);function Re(e){Oe.value=e}const qe=r((()=>Math.ceil(le.value.length/Oe.value))),De=d(1),He=r((()=>{const e=(De.value-1)*Oe.value,l=De.value*Oe.value;return le.value.slice(e,l)}));function Pe(e){De.value=e}const Ne=d(!1),Ie=d(0),Ze=d(W.NORMAL),Ge=L,We=d("");function Ye(){const e=l.find((e=>e.id===Ie.value));if(Ze.value===W.FREEZE){if(!We.value)return void z.warning("请设置解冻时间");e.openTime=We.value}else e.openTime="";e.status=Ze.value,Ne.value=!1,k.updateUserStatus(e.id,e.status,e.openTime).then((()=>{z.success("修改成功")}))}const Je=d(!1),Ke=i({pwd1:"",pwd2:""});function Qe(){(F.test(Ke.pwd1)?Ke.pwd1===Ke.pwd2||(z.warning("两次输入的密码不一致"),0):(z.warning("密码格式不正确(6-16位 支持字母/数字/下划线)"),0))&&J.confirm("此操作不可逆,请谨慎操作","确定要重置用户的密码吗?",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((()=>{k.resetPassword(Ie.value,Ke.pwd1).then((()=>{z.success("重置成功"),Je.value=!1}))})).catch((()=>{}))}const Xe=d(!1),el=i({size:2});async function ll(){+el.size<0?z.warning("空间上限不能小于0"):(await k.resetLimitSpace(Ie.value,+el.size),z.success("修改成功"),Xe.value=!1,a())}const al=d(!1),tl=i({money:2});async function ol(){+tl.money<0?z.warning("余额不能小于0"):(await k.updateWallet(Ie.value,+tl.money),z.success("修改成功"),al.value=!1,a())}const nl=d(!1),ul=i({phone:"",code:""}),il=d("获取验证码"),sl=d(0);function dl(){0!==sl.value?(il.value=`${sl.value}s`,sl.value-=1,setTimeout(dl,1e3)):il.value="获取验证码"}function rl(){U.test(ul.phone)?S.checkPhone(ul.phone).then((()=>{S.getCode(ul.phone).then((()=>{sl.value=120,dl(),z.success("获取成功,请注意查看手机短信")}))})).catch((e=>{const{code:l}=e;z.error({1002:"手机号已被注册",1006:"手机号格式不正确"}[l]||"注册失败,未知错误")})):z.warning("手机号格式不正确")}async function cl(){(U.test(ul.phone)?M.test(ul.code)||(z.warning("验证码格式不正确"),0):(z.warning("手机号格式不正确"),0))&&k.resetPhone(Ie.value,ul.phone,ul.code).then((()=>{z.success("绑定成功"),nl.value=!1,ul.code="",ul.phone="",a()})).catch((e=>{const{code:l}=e;z.error({1002:"手机号已被注册",1003:"验证码不正确"}[l]||"绑定失败,未知错误")}))}function pl(e,l){Ie.value=e,J.confirm("移除后这些文件将无法恢复,请谨慎操作","删除前确认?",{confirmButtonText:`确认删除 ${{month:"一个月前",quarter:"三个月前",half:"半年前"}[l]}文件`}).then((()=>{k.clearOssFile(e,l).then((()=>{z.success("清理成功")}))})).catch((()=>{}))}const ml=d(1),vl=d(!1),fl=d("");function gl(e,l=1){Ie.value=e,ml.value=l,vl.value=!0}function wl(){k.sendMessage(fl.value,ml.value,Ie.value).then((()=>{z.success("推送成功"),fl.value="",vl.value=!1}))}c((()=>{a()}));const bl=q();return(e,l)=>{const i=N,s=I,d=T,r=j,c=Z,U=G,S=P,F=D,M=R,q=A,W=B;return o(),n("div",ae,[u("div",te,[u("div",oe,[u("span",ne,[ue,p(s,{modelValue:w(t),"onUpdate:modelValue":l[0]||(l[0]=e=>b(t)?t.value=e:null),size:"default",class:"w100"},{default:m((()=>[(o(!0),n(v,null,f(L,((e,l)=>(o(),g(i,{key:l,label:e.label,value:e.type},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])]),u("span",ie,[se,p(s,{modelValue:w($),"onUpdate:modelValue":l[1]||(l[1]=e=>b($)?$.value=e:null),size:"default",class:"w100"},{default:m((()=>[(o(),n(v,null,f(K,((e,l)=>p(i,{key:l,label:e.label,value:e.value},null,8,["label","value"]))),64))])),_:1},8,["modelValue"]),p(s,{modelValue:w(Q),"onUpdate:modelValue":l[2]||(l[2]=e=>b(Q)?Q.value=e:null),size:"default",class:"w100"},{default:m((()=>[(o(),n(v,null,f(X,((e,l)=>p(i,{key:l,label:e.label,value:e.value},null,8,["label","value"]))),64))])),_:1},8,["modelValue"])]),u("span",de,[p(d,{modelValue:E.value,"onUpdate:modelValue":l[3]||(l[3]=e=>E.value=e),size:"default",clearable:"",placeholder:"请输入要检索的内容","prefix-icon":w(H)},null,8,["modelValue","prefix-icon"])]),u("span",re,[p(r,{size:"default",icon:w(Y),onClick:a},{default:m((()=>[h("刷新")])),_:1},8,["icon"])]),u("span",ce,[p(r,{size:"warning",icon:w(ee),onClick:l[4]||(l[4]=e=>gl(null,0))},{default:m((()=>[h("推送全局消息")])),_:1},8,["icon"])])]),p(U,{height:"550",stripe:"",border:"","default-sort":{prop:"date",order:"descending"},data:He.value,style:{width:"100%"}},{default:m((()=>[p(c,{prop:"id",label:"ID",width:"60"}),p(c,{prop:"account",label:"账号",width:"130"}),p(c,{prop:"phone",label:"手机号",width:"80"}),p(c,{label:"统计",width:"190"},{default:m((e=>[h(" 最后登录:"+y(e.row.loginTime&&w(x)(new Date(e.row.loginTime))),1),pe,h(" 注册时间:"+y(w(x)(new Date(e.row.joinTime))),1),me,h(" 登录次数:"+y(e.row.loginCount),1),ve,h(" token: "+y(e.row.onlineCount),1),fe])),_:1}),p(c,{prop:"downloadCount",label:"累计下载"},{default:m((({row:{downloadCount:e,downloadSize:l,oneFile:a,compressFile:t,templateFile:o}})=>[h(y(e)+" / "+y(w(C)(l)),1),ge,h(" 单文件:"+y(a.count)+" / "+y(w(C)(a.size)),1),we,h(" 归档:"+y(t.count)+" / "+y(w(C)(t.size)),1),be,h(" 模板:"+y(o.count)+" / "+y(w(C)(o.size)),1)])),_:1}),1===w(t)?(o(),g(c,{key:0,prop:"openTime",label:"解封时间"},{default:m((e=>[h(y(e.row.openTime&&w(x)(new Date(e.row.openTime))),1)])),_:1})):V("",!0),p(c,{prop:"fileCount",label:"文件"},{default:m((e=>[h(" 累计:"+y(e.row.fileCount)+"/"+y(w(C)(e.row.originFileSize)),1),he,h(" OSS:"+y(e.row.ossCount)+"/"+y(w(C)(e.row.usage)),1),ye,h(" 平均:"+y(e.row.originFileSize&&e.row.fileCount&&w(C)(Math.round(e.row.originFileSize/e.row.fileCount))),1),xe,h(" 平均:"+y(e.row.usage&&e.row.ossCount&&w(C)(Math.round(e.row.usage/e.row.ossCount))),1),Ce])),_:1}),p(c,{label:"云空间",width:"200"},{default:m((({row:{wallet:e,price:l,balance:a,resources:t,monthAgoSize:n,quarterAgoSize:i,halfYearSize:s,id:d,limitSize:c,limitUpload:p,percentage:m}})=>[u("ul",{class:_(["user-oss-info",{disabled:p}])},[u("li",null,"¥:"+y(l.total)+" / "+y(e)+" = "+y(a),1),u("li",null,y(m)+"% "+y(t)+"/"+y(c),1),u("li",null,[h(" 一月前:"+y(n),1),"0B"!==t?(o(),g(r,{key:0,class:"clear-btn",icon:w(O),circle:"",size:"small",onClick:e=>pl(d,"month")},null,8,["icon","onClick"])):V("",!0)]),u("li",null,[h(" 三月前:"+y(i),1),"0B"!==i?(o(),g(r,{key:0,class:"clear-btn",icon:w(O),circle:"",size:"small",onClick:e=>pl(d,"quarter")},null,8,["icon","onClick"])):V("",!0)]),u("li",null,[h(" 半年前:"+y(s),1),"0B"!==s?(o(),g(r,{key:0,class:"clear-btn",icon:w(O),circle:"",size:"small",onClick:e=>pl(d,"half")},null,8,["icon","onClick"])):V("",!0)])],2)])),_:1}),p(c,{fixed:"right",label:"操作",width:"100"},{default:m((e=>[u("div",Ve,[p(r,{type:"primary",text:"",size:"small",onClick:l=>{return a=e.row.id,t=e.row.status,o=e.row.openTime,Ie.value=a,Ze.value=t,We.value=o,void(Ne.value=!0);var a,t,o}},{default:m((()=>[h(" 修改状态 ")])),_:2},1032,["onClick"]),p(r,{type:"primary",text:"",size:"small",onClick:l=>{return a=e.row.id,Ie.value=a,Je.value=!0,Ke.pwd1="",void(Ke.pwd2="");var a}},{default:m((()=>[h(" 重置密码 ")])),_:2},1032,["onClick"]),p(r,{type:"primary",text:"",size:"small",onClick:l=>{return a=e.row.id,Ie.value=a,void(nl.value=!0);var a}},{default:m((()=>[h(" 绑定手机号 ")])),_:2},1032,["onClick"]),p(r,{type:"warning",text:"",size:"small",onClick:l=>gl(e.row.id)},{default:m((()=>[h(" 发送消息 ")])),_:2},1032,["onClick"]),p(r,{type:"danger",text:"",size:"small",onClick:l=>{return a=e.row.id,t=e.row.size,Ie.value=a,el.size=t,void(Xe.value=!0);var a,t}},{default:m((()=>[h(" 修改上限 ")])),_:2},1032,["onClick"]),p(r,{type:"danger",text:"",size:"small",onClick:l=>{return a=e.row.id,t=e.row.wallet,Ie.value=a,tl.money=t,void(al.value=!0);var a,t}},{default:m((()=>[h(" 修改余额 ")])),_:2},1032,["onClick"]),0!==e.row.onlineCount?(o(),g(r,{key:0,type:"danger",text:"",size:"small",onClick:l=>{return t=e.row.account,void k.logout(t).then((()=>{z.success(`下线成功 ${t}`),a()}));var t}},{default:m((()=>[h(" 一键下线 ")])),_:2},1032,["onClick"])):V("",!0)])])),_:1})])),_:1},8,["data"]),u("div",_e,[p(S,{"current-page":De.value,background:"","page-count":qe.value,"page-sizes":[10,50,100,200],"page-size":w(Oe),total:le.value.length,layout:"total, sizes, prev, pager, next, jumper",onCurrentChange:Pe,onSizeChange:Re},null,8,["current-page","page-count","page-size","total"])])]),p(F,{modelValue:vl.value,"onUpdate:modelValue":l[7]||(l[7]=e=>vl.value=e),fullscreen:w(bl),center:"",title:"消息推送"},{footer:m((()=>[u("span",ze,[p(r,{onClick:l[6]||(l[6]=e=>vl.value=!1)},{default:m((()=>[h("取 消")])),_:1}),p(r,{type:"primary",onClick:wl},{default:m((()=>[h("确 定")])),_:1})])])),default:m((()=>[u("div",ke,[p(d,{modelValue:fl.value,"onUpdate:modelValue":l[5]||(l[5]=e=>fl.value=e),autosize:{minRows:6,maxRows:20},type:"textarea",placeholder:"输入要推送的消息,支持HTML内容(推荐使用mdnice 转 markdown 转html)"},null,8,["modelValue"])])])),_:1},8,["modelValue","fullscreen"]),p(F,{modelValue:Ne.value,"onUpdate:modelValue":l[11]||(l[11]=e=>Ne.value=e),fullscreen:w(bl),center:"",title:"状态修改"},{footer:m((()=>[u("span",Te,[p(r,{onClick:l[10]||(l[10]=e=>Ne.value=!1)},{default:m((()=>[h("取 消")])),_:1}),p(r,{type:"primary",onClick:Ye},{default:m((()=>[h("确 定")])),_:1})])])),default:m((()=>[u("div",Ue,[p(s,{modelValue:Ze.value,"onUpdate:modelValue":l[8]||(l[8]=e=>Ze.value=e),placeholder:"请选择新分类"},{default:m((()=>[(o(!0),n(v,null,f(w(Ge),(e=>(o(),g(i,{key:e.type,label:e.label,value:e.type},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])]),1===Ze.value?(o(),n("div",Se,[p(M,{modelValue:We.value,"onUpdate:modelValue":l[9]||(l[9]=e=>We.value=e),editable:!1,type:"datetime",placeholder:"点击设置解封日期"},null,8,["modelValue"])])):V("",!0)])),_:1},8,["modelValue","fullscreen"]),p(F,{modelValue:Je.value,"onUpdate:modelValue":l[15]||(l[15]=e=>Je.value=e),fullscreen:w(bl),center:"",title:"密码重置"},{footer:m((()=>[u("span",Ee,[p(r,{onClick:l[14]||(l[14]=e=>Je.value=!1)},{default:m((()=>[h("取 消")])),_:1}),p(r,{type:"primary",onClick:Qe},{default:m((()=>[h("确 定")])),_:1})])])),default:m((()=>[u("div",je,[p(W,{model:Ke,"label-width":"80px"},{default:m((()=>[p(q,{label:"新密码"},{default:m((()=>[p(d,{modelValue:Ke.pwd1,"onUpdate:modelValue":l[12]||(l[12]=e=>Ke.pwd1=e),"show-word-limit":"",clearable:"",placeholder:"请输入新密码",maxlength:"16",minlength:"6"},null,8,["modelValue"])])),_:1}),p(q,null,{default:m((()=>[p(d,{modelValue:Ke.pwd2,"onUpdate:modelValue":l[13]||(l[13]=e=>Ke.pwd2=e),"show-word-limit":"",clearable:"",placeholder:"请再次输入",maxlength:"16",minlength:"6"},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])])),_:1},8,["modelValue","fullscreen"]),p(F,{modelValue:nl.value,"onUpdate:modelValue":l[19]||(l[19]=e=>nl.value=e),fullscreen:w(bl),center:"",title:"绑定手机号"},{footer:m((()=>[u("span",Fe,[p(r,{onClick:l[18]||(l[18]=e=>nl.value=!1)},{default:m((()=>[h("取 消")])),_:1}),p(r,{type:"primary",onClick:cl},{default:m((()=>[h("确 定")])),_:1})])])),default:m((()=>[u("div",Le,[p(W,{model:ul,"label-width":"60px"},{default:m((()=>[p(q,{label:"手机号"},{default:m((()=>[p(d,{modelValue:ul.phone,"onUpdate:modelValue":l[16]||(l[16]=e=>ul.phone=e),"show-word-limit":"",clearable:"",placeholder:"请输入手机号",maxlength:"11"},{append:m((()=>[p(r,{disabled:0!==sl.value,onClick:rl},{default:m((()=>[h(y(il.value),1)])),_:1},8,["disabled"])])),_:1},8,["modelValue"])])),_:1}),p(q,null,{default:m((()=>[p(d,{modelValue:ul.code,"onUpdate:modelValue":l[17]||(l[17]=e=>ul.code=e),"show-word-limit":"",clearable:"",placeholder:"请输入验证码",maxlength:"4"},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])])),_:1},8,["modelValue","fullscreen"]),p(F,{modelValue:Xe.value,"onUpdate:modelValue":l[22]||(l[22]=e=>Xe.value=e),fullscreen:w(bl),center:"",title:"修改空间上限"},{footer:m((()=>[u("span",$e,[p(r,{onClick:l[21]||(l[21]=e=>Xe.value=!1)},{default:m((()=>[h("取 消")])),_:1}),p(r,{type:"primary",onClick:ll},{default:m((()=>[h("确 定")])),_:1})])])),default:m((()=>[u("div",Me,[p(W,{model:el,"label-width":"60px"},{default:m((()=>[p(q,{label:"大小"},{default:m((()=>[p(d,{modelValue:el.size,"onUpdate:modelValue":l[20]||(l[20]=e=>el.size=e),"show-word-limit":"",clearable:"",placeholder:"请输入空间上限",maxlength:"4",type:"number"},{append:m((()=>[h(" GB ")])),_:1},8,["modelValue"])])),_:1})])),_:1},8,["model"])])])),_:1},8,["modelValue","fullscreen"]),p(F,{modelValue:al.value,"onUpdate:modelValue":l[25]||(l[25]=e=>al.value=e),fullscreen:w(bl),center:"",title:"修改空间上限"},{footer:m((()=>[u("span",Be,[p(r,{onClick:l[24]||(l[24]=e=>al.value=!1)},{default:m((()=>[h("取 消")])),_:1}),p(r,{type:"primary",onClick:ol},{default:m((()=>[h("确 定")])),_:1})])])),default:m((()=>[u("div",Ae,[p(W,{model:tl,"label-width":"60px"},{default:m((()=>[p(q,{label:"余额"},{default:m((()=>[p(d,{modelValue:tl.money,"onUpdate:modelValue":l[23]||(l[23]=e=>tl.money=e),"show-word-limit":"",clearable:"",placeholder:"请输入新的余额",maxlength:"4",type:"number"},{append:m((()=>[h(" ¥ ")])),_:1},8,["modelValue"])])),_:1})])),_:1},8,["model"])])])),_:1},8,["modelValue","fullscreen"])])}}}),[["__scopeId","data-v-aa923229"]]))}}}));
|
|
2
|
+
//# sourceMappingURL=index-legacy-DZC-JuD-.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-legacy-DZC-JuD-.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/message.mjs","../../src/pages/dashboard/manage/user/index.vue"],"sourcesContent":["import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Message\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M128 224v512a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V224H128zm0-64h768a64 64 0 0 1 64 64v512a128 128 0 0 1-128 128H192A128 128 0 0 1 64 736V224a64 64 0 0 1 64-64z\"\n}, null, -1);\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M904 224 656.512 506.88a192 192 0 0 1-289.024 0L120 224h784zm-698.944 0 210.56 240.704a128 128 0 0 0 192.704 0L818.944 224H205.056z\"\n}, null, -1);\nconst _hoisted_4 = [\n _hoisted_2,\n _hoisted_3\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_4);\n}\nvar message = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { message as default };\n","<script lang=\"ts\" setup>\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { DeleteFilled, Message, Refresh, Search } from '@element-plus/icons-vue'\nimport { useLocalStorage } from '@vueuse/core'\nimport { PublicApi, SuperUserApi } from '@/apis'\nimport { USER_STATUS } from '@/constants'\nimport { formatDate, formatSize } from '@/utils/stringUtil'\nimport { rMobilePhone, rPassword, rVerCode } from '@/utils/regExp'\n\nimport { useIsMobile } from '@/composables'\n\n// 用户\nconst users = reactive<SuperUserApiTypes.UserItem[]>([])\nfunction refreshUsers() {\n SuperUserApi.getUserList().then((res) => {\n users.splice(0, users.length, ...res.data.list)\n ElMessage.success('列表数据刷新成功')\n })\n}\n\n// 筛选用户状态\nconst userStatusType = useLocalStorage('userStatusType', USER_STATUS.NORMAL)\nconst searchWord = ref('')\nconst statusTypeList = reactive([\n {\n label: '正常',\n type: USER_STATUS.NORMAL,\n },\n {\n label: '冻结',\n type: USER_STATUS.FREEZE,\n },\n {\n label: '封禁',\n type: USER_STATUS.BAN,\n },\n])\nconst sortType = useLocalStorage('userListSortType', 'id')\nconst sortTypeList = [\n {\n label: 'ID',\n value: 'id',\n },\n {\n label: '累计上传数量',\n value: 'fileCount',\n },\n {\n label: '累计占用空间',\n value: 'originFileSize',\n },\n {\n label: 'OSS文件数量',\n value: 'ossCount',\n },\n {\n label: '最后登录时间',\n value: 'lastLoginTime',\n },\n {\n label: '登录次数',\n value: 'login_count',\n },\n {\n label: '容量大小',\n value: 'size',\n },\n {\n label: '占用空间',\n value: 'usage',\n },\n {\n label: '限制使用',\n value: 'limitUpload',\n },\n {\n label: '下载次数',\n value: 'downloadCount',\n },\n {\n label: '累计下载大小',\n value: 'downloadSize',\n },\n {\n label: '累计费用',\n value: 'cost',\n },\n]\n\n// 升降序\nconst sortOrder = useLocalStorage('userListSortOrder', 'desc')\nconst sortOrderList = [\n {\n label: '升序',\n value: 'asc',\n },\n {\n label: '降序',\n value: 'desc',\n },\n]\nconst filterUsers = computed(() => {\n const copyUsers = [...users]\n copyUsers.sort((a, b) => {\n return sortOrder.value === 'asc'\n ? a[sortType.value] - b[sortType.value]\n : b[sortType.value] - a[sortType.value]\n })\n return copyUsers\n .filter(v => v.status === userStatusType.value)\n .filter((v) => {\n const {\n id,\n account,\n phone,\n joinTime,\n loginCount,\n loginTime,\n openTime,\n } = v\n if (searchWord.value.length === 0)\n return true\n return `${id} ${account} ${phone} ${loginTime} ${formatDate(\n openTime,\n )} ${formatDate(loginCount)} ${formatDate(joinTime)}`.includes(\n searchWord.value,\n )\n })\n})\n\n// 分页\nconst pageSize = useLocalStorage<number>('userListPageSize', 10)\nfunction handleSizeChange(v: number) {\n pageSize.value = v\n}\nconst pageCount = computed(() => {\n const t = Math.ceil(filterUsers.value.length / pageSize.value)\n return t\n})\nconst pageCurrent = ref(1)\nconst pageUsers = computed(() => {\n const start = (pageCurrent.value - 1) * pageSize.value\n const end = pageCurrent.value * pageSize.value\n return filterUsers.value.slice(start, end)\n})\nfunction handlePageChange(idx: number) {\n pageCurrent.value = idx\n}\n\n// 状态修改\nconst showUserStatusDialog = ref(false)\nconst selectUserId = ref(0)\nconst selectStatus = ref(USER_STATUS.NORMAL)\nconst userStatusList = statusTypeList\nconst openTime = ref('')\nfunction handleChangeStatus(userId: number, status: USER_STATUS, oTime: string) {\n selectUserId.value = userId\n selectStatus.value = status\n openTime.value = oTime\n showUserStatusDialog.value = true\n}\nfunction handleSaveStatus() {\n const user = users.find(u => u.id === selectUserId.value)\n if (selectStatus.value === USER_STATUS.FREEZE) {\n if (!openTime.value) {\n ElMessage.warning('请设置解冻时间')\n return\n }\n user.openTime = openTime.value\n }\n else {\n user.openTime = ''\n }\n user.status = selectStatus.value\n showUserStatusDialog.value = false\n SuperUserApi.updateUserStatus(user.id, user.status, user.openTime).then(\n () => {\n ElMessage.success('修改成功')\n },\n )\n}\n\n// 重置密码\nconst showResetPasswordDialog = ref(false)\nconst pwdForm = reactive({\n pwd1: '',\n pwd2: '',\n})\nfunction handleResetPassword(userId: number) {\n selectUserId.value = userId\n showResetPasswordDialog.value = true\n pwdForm.pwd1 = ''\n pwdForm.pwd2 = ''\n}\n\nfunction checkPwdForm() {\n if (!rPassword.test(pwdForm.pwd1)) {\n ElMessage.warning('密码格式不正确(6-16位 支持字母/数字/下划线)')\n return false\n }\n if (pwdForm.pwd1 !== pwdForm.pwd2) {\n ElMessage.warning('两次输入的密码不一致')\n return false\n }\n\n return true\n}\n\nfunction handleSavePassword() {\n if (!checkPwdForm())\n return\n ElMessageBox.confirm('此操作不可逆,请谨慎操作', '确定要重置用户的密码吗?', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning',\n })\n .then(() => {\n SuperUserApi.resetPassword(selectUserId.value, pwdForm.pwd1).then(() => {\n ElMessage.success('重置成功')\n showResetPasswordDialog.value = false\n })\n })\n .catch(() => {\n //\n })\n}\n\n// 限制空间大小\nconst showLimitSizeDialog = ref(false)\nconst limitSizeForm = reactive({\n size: 2,\n})\nfunction handleRewriteSize(id: number, size: number) {\n selectUserId.value = id\n limitSizeForm.size = size\n showLimitSizeDialog.value = true\n}\nasync function handleSaveSize() {\n if (+limitSizeForm.size < 0) {\n ElMessage.warning('空间上限不能小于0')\n return\n }\n await SuperUserApi.resetLimitSpace(selectUserId.value, +limitSizeForm.size)\n // 接口调用修改\n ElMessage.success('修改成功')\n showLimitSizeDialog.value = false\n refreshUsers()\n}\n// TODO: 重复代码优化\n// 修改余额\nconst showWalletDialog = ref(false)\nconst walletForm = reactive({\n money: 2,\n})\nfunction handleRewriteWallet(id: number, money: number) {\n selectUserId.value = id\n walletForm.money = money\n showWalletDialog.value = true\n}\nasync function handleSaveWallet() {\n if (+walletForm.money < 0) {\n ElMessage.warning('余额不能小于0')\n return\n }\n await SuperUserApi.updateWallet(selectUserId.value, +walletForm.money)\n // 接口调用修改\n ElMessage.success('修改成功')\n showWalletDialog.value = false\n refreshUsers()\n}\n\n// 绑定手机号\nconst showPhoneDialog = ref(false)\nconst phoneForm = reactive({\n phone: '',\n code: '',\n})\nconst codeText = ref('获取验证码')\nconst time = ref(0)\nfunction refreshCodeText() {\n if (time.value === 0) {\n codeText.value = '获取验证码'\n return\n }\n codeText.value = `${time.value}s`\n time.value -= 1\n setTimeout(refreshCodeText, 1000)\n}\nfunction getCode() {\n if (!rMobilePhone.test(phoneForm.phone)) {\n ElMessage.warning('手机号格式不正确')\n return\n }\n // check是否可用\n PublicApi.checkPhone(phoneForm.phone)\n .then(() => {\n PublicApi.getCode(phoneForm.phone).then(() => {\n time.value = 120\n refreshCodeText()\n ElMessage.success('获取成功,请注意查看手机短信')\n })\n })\n .catch((err) => {\n const { code: c } = err\n const msg = '注册失败,未知错误'\n const options: any = {\n 1002: '手机号已被注册',\n 1006: '手机号格式不正确',\n }\n ElMessage.error(options[c] || msg)\n })\n}\nfunction checkPhoneForm() {\n if (!rMobilePhone.test(phoneForm.phone)) {\n ElMessage.warning('手机号格式不正确')\n return false\n }\n if (!rVerCode.test(phoneForm.code)) {\n ElMessage.warning('验证码格式不正确')\n return false\n }\n\n return true\n}\nfunction handleBindPhone(id: number) {\n selectUserId.value = id\n showPhoneDialog.value = true\n}\nasync function handleSavePhone() {\n if (!checkPhoneForm()) {\n return\n }\n // 调用API更新,验证码 不正确判断\n SuperUserApi.resetPhone(selectUserId.value, phoneForm.phone, phoneForm.code)\n .then(() => {\n ElMessage.success('绑定成功')\n showPhoneDialog.value = false\n phoneForm.code = ''\n phoneForm.phone = ''\n refreshUsers()\n })\n .catch((err) => {\n const { code: c } = err\n const msg = '绑定失败,未知错误'\n const options: any = {\n 1002: '手机号已被注册',\n 1003: '验证码不正确',\n }\n ElMessage.error(options[c] || msg)\n })\n}\n\nfunction handleClearFiles(userId: number, type: 'month' | 'quarter' | 'half') {\n const tipWords = {\n month: '一个月前',\n quarter: '三个月前',\n half: '半年前',\n }\n selectUserId.value = userId\n ElMessageBox.confirm('移除后这些文件将无法恢复,请谨慎操作', '删除前确认?', {\n confirmButtonText: `确认删除 ${tipWords[type]}文件`,\n })\n .then(() => {\n SuperUserApi.clearOssFile(userId, type).then(() => {\n ElMessage.success('清理成功')\n })\n })\n .catch(() => {})\n}\n\n// TODO: 0 global 1 user_push\nconst pushMessageType = ref(1)\nconst showMessageDialog = ref(false)\nconst pushMessageText = ref('')\nfunction sendMessage(id: number, type = 1) {\n selectUserId.value = id\n pushMessageType.value = type\n showMessageDialog.value = true\n}\n\nfunction sureSendMessage() {\n SuperUserApi.sendMessage(\n pushMessageText.value,\n pushMessageType.value,\n selectUserId.value,\n ).then(() => {\n ElMessage.success('推送成功')\n // 推送成功\n pushMessageText.value = ''\n showMessageDialog.value = false\n })\n}\nfunction logout(account: string) {\n SuperUserApi.logout(account).then(() => {\n ElMessage.success(`下线成功 ${account}`)\n refreshUsers()\n })\n}\n\nonMounted(() => {\n refreshUsers()\n})\n\nconst isMobile = useIsMobile()\n</script>\n\n<template>\n <div class=\"user\">\n <div class=\"panel\">\n <div class=\"p10 log-filter\">\n <span class=\"item\">\n <span class=\"label\">状态</span>\n <el-select\n v-model=\"userStatusType\"\n size=\"default\"\n class=\"w100\"\n >\n <el-option\n v-for=\"(item, idx) in statusTypeList\"\n :key=\"idx\"\n :label=\"item.label\"\n :value=\"item.type\"\n />\n </el-select>\n </span>\n <span class=\"item\">\n <span class=\"label\">排序</span>\n <el-select\n v-model=\"sortType\"\n size=\"default\"\n class=\"w100\"\n >\n <el-option\n v-for=\"(item, idx) in sortTypeList\"\n :key=\"idx\"\n :label=\"item.label\"\n :value=\"item.value\"\n />\n </el-select>\n <el-select\n v-model=\"sortOrder\"\n size=\"default\"\n class=\"w100\"\n >\n <el-option\n v-for=\"(item, idx) in sortOrderList\"\n :key=\"idx\"\n :label=\"item.label\"\n :value=\"item.value\"\n />\n </el-select>\n </span>\n <span class=\"item\">\n <el-input\n v-model=\"searchWord\"\n size=\"default\"\n clearable\n placeholder=\"请输入要检索的内容\"\n :prefix-icon=\"Search\"\n />\n </span>\n <span class=\"item\">\n <el-button size=\"default\" :icon=\"Refresh\" @click=\"refreshUsers\">刷新</el-button>\n </span>\n <span class=\"item\">\n <el-button\n size=\"warning\"\n :icon=\"Message\"\n @click=\"sendMessage(null, 0)\"\n >推送全局消息</el-button>\n </span>\n </div>\n <el-table\n height=\"550\"\n stripe\n border\n :default-sort=\"{ prop: 'date', order: 'descending' }\"\n :data=\"pageUsers\"\n style=\"width: 100%\"\n >\n <el-table-column prop=\"id\" label=\"ID\" width=\"60\" />\n <el-table-column\n prop=\"account\"\n label=\"账号\"\n width=\"130\"\n />\n <el-table-column\n prop=\"phone\"\n label=\"手机号\"\n width=\"80\"\n />\n <el-table-column\n label=\"统计\"\n width=\"190\"\n >\n <template #default=\"scope\">\n 最后登录:{{\n scope.row.loginTime && formatDate(new Date(scope.row.loginTime))\n }}<br>\n 注册时间:{{ formatDate(new Date(scope.row.joinTime)) }}<br>\n 登录次数:{{ scope.row.loginCount }}<br>\n token: {{ scope.row.onlineCount }}<br>\n </template>\n </el-table-column>\n <!-- <el-table-column prop=\"joinTime\" label=\"注册时间\" width=\"190\">\n <template #default=\"scope\">\n {{\n formatDate(new Date(scope.row.joinTime))\n }}\n </template>\n </el-table-column> -->\n <!-- <el-table-column\n prop=\"loginCount\"\n label=\"登录次数\"\n /> -->\n <el-table-column\n prop=\"downloadCount\"\n label=\"累计下载\"\n >\n <template #default=\"{ row: { downloadCount, downloadSize, oneFile, compressFile, templateFile } }\">\n {{ downloadCount }} / {{ formatSize(downloadSize) }}<br>\n 单文件:{{ oneFile.count }} / {{ formatSize(oneFile.size) }}<br>\n 归档:{{ compressFile.count }} / {{ formatSize(compressFile.size) }}<br>\n 模板:{{ templateFile.count }} / {{ formatSize(templateFile.size) }}\n </template>\n </el-table-column>\n <el-table-column\n v-if=\"userStatusType === 1\"\n prop=\"openTime\"\n label=\"解封时间\"\n >\n <template #default=\"scope\">\n {{\n scope.row.openTime && formatDate(new Date(scope.row.openTime))\n }}\n </template>\n </el-table-column>\n <el-table-column\n prop=\"fileCount\"\n label=\"文件\"\n >\n <template #default=\"scope\">\n 累计:{{ scope.row.fileCount }}/{{ formatSize(scope.row.originFileSize) }}<br>\n OSS:{{ scope.row.ossCount }}/{{ formatSize(scope.row.usage) }}<br>\n 平均:{{ scope.row.originFileSize && scope.row.fileCount && formatSize(Math.round(scope.row.originFileSize / scope.row.fileCount)) }}<br>\n 平均:{{ scope.row.usage && scope.row.ossCount && formatSize(Math.round(scope.row.usage / scope.row.ossCount)) }}<br>\n </template>\n </el-table-column>\n <el-table-column label=\"云空间\" width=\"200\">\n <template\n #default=\"{\n row: { wallet, price, balance, resources, monthAgoSize, quarterAgoSize, halfYearSize, id, limitSize, limitUpload, percentage },\n }\"\n >\n <ul class=\"user-oss-info\" :class=\"{ disabled: limitUpload }\">\n <li>¥:{{ price.total }} / {{ wallet }} = {{ balance }}</li>\n <li>{{ percentage }}% {{ resources }}/{{ limitSize }}</li>\n <li>\n 一月前:{{ monthAgoSize\n }}<el-button\n v-if=\"resources !== '0B'\"\n class=\"clear-btn\"\n :icon=\"DeleteFilled\"\n circle\n size=\"small\"\n @click=\"handleClearFiles(id, 'month')\"\n />\n </li>\n <li>\n 三月前:{{ quarterAgoSize\n }}<el-button\n v-if=\"quarterAgoSize !== '0B'\"\n class=\"clear-btn\"\n :icon=\"DeleteFilled\"\n circle\n size=\"small\"\n @click=\"handleClearFiles(id, 'quarter')\"\n />\n </li>\n <li>\n 半年前:{{ halfYearSize\n }}<el-button\n v-if=\"halfYearSize !== '0B'\"\n class=\"clear-btn\"\n :icon=\"DeleteFilled\"\n circle\n size=\"small\"\n @click=\"handleClearFiles(id, 'half')\"\n />\n </li>\n </ul>\n </template>\n </el-table-column>\n <el-table-column fixed=\"right\" label=\"操作\" width=\"100\">\n <template #default=\"scope\">\n <div class=\"text-btn-list\">\n <el-button\n type=\"primary\"\n text\n size=\"small\"\n @click=\"\n handleChangeStatus(\n scope.row.id,\n scope.row.status,\n scope.row.openTime,\n )\n \"\n >\n 修改状态\n </el-button>\n <el-button\n type=\"primary\"\n text\n size=\"small\"\n @click=\"handleResetPassword(scope.row.id)\"\n >\n 重置密码\n </el-button>\n <el-button\n type=\"primary\"\n text\n size=\"small\"\n @click=\"handleBindPhone(scope.row.id)\"\n >\n 绑定手机号\n </el-button>\n <el-button\n type=\"warning\"\n text\n size=\"small\"\n @click=\"sendMessage(scope.row.id)\"\n >\n 发送消息\n </el-button>\n <el-button\n type=\"danger\"\n text\n size=\"small\"\n @click=\"handleRewriteSize(scope.row.id, scope.row.size)\"\n >\n 修改上限\n </el-button>\n <el-button\n type=\"danger\"\n text\n size=\"small\"\n @click=\"handleRewriteWallet(scope.row.id, scope.row.wallet)\"\n >\n 修改余额\n </el-button>\n <el-button\n v-if=\"scope.row.onlineCount !== 0\"\n type=\"danger\"\n text\n size=\"small\"\n @click=\"logout(scope.row.account)\"\n >\n 一键下线\n </el-button>\n </div>\n </template>\n </el-table-column>\n </el-table>\n <div class=\"flex fc p10\">\n <el-pagination\n :current-page=\"pageCurrent\"\n background\n :page-count=\"pageCount\"\n :page-sizes=\"[10, 50, 100, 200]\"\n :page-size=\"pageSize\"\n :total=\"filterUsers.length\"\n layout=\"total, sizes, prev, pager, next, jumper\"\n @current-change=\"handlePageChange\"\n @size-change=\"handleSizeChange\"\n />\n </div>\n </div>\n <!-- 消息推送弹窗 -->\n <el-dialog\n v-model=\"showMessageDialog\"\n :fullscreen=\"isMobile\"\n center\n title=\"消息推送\"\n >\n <div class=\"tc\">\n <el-input\n v-model=\"pushMessageText\"\n :autosize=\"{ minRows: 6, maxRows: 20 }\"\n type=\"textarea\"\n placeholder=\"输入要推送的消息,支持HTML内容(推荐使用mdnice 转 markdown 转html)\"\n />\n </div>\n <template #footer>\n <span class=\"dialog-footer\">\n <el-button @click=\"showMessageDialog = false\">取 消</el-button>\n <el-button type=\"primary\" @click=\"sureSendMessage\">确 定</el-button>\n </span>\n </template>\n </el-dialog>\n <!-- 用户状态修改弹窗 -->\n <el-dialog\n v-model=\"showUserStatusDialog\"\n :fullscreen=\"isMobile\"\n center\n title=\"状态修改\"\n >\n <div class=\"tc\">\n <el-select v-model=\"selectStatus\" placeholder=\"请选择新分类\">\n <el-option\n v-for=\"s in userStatusList\"\n :key=\"s.type\"\n :label=\"s.label\"\n :value=\"s.type\"\n />\n </el-select>\n </div>\n <div v-if=\"selectStatus === 1\" style=\"margin-top: 10px\" class=\"tc\">\n <el-date-picker\n v-model=\"openTime\"\n :editable=\"false\"\n type=\"datetime\"\n placeholder=\"点击设置解封日期\"\n />\n </div>\n <template #footer>\n <span class=\"dialog-footer\">\n <el-button @click=\"showUserStatusDialog = false\">取 消</el-button>\n <el-button type=\"primary\" @click=\"handleSaveStatus\">确 定</el-button>\n </span>\n </template>\n </el-dialog>\n\n <!-- 重置密码 -->\n <el-dialog\n v-model=\"showResetPasswordDialog\"\n :fullscreen=\"isMobile\"\n center\n title=\"密码重置\"\n >\n <div class=\"tc\">\n <el-form :model=\"pwdForm\" label-width=\"80px\">\n <el-form-item label=\"新密码\">\n <el-input\n v-model=\"pwdForm.pwd1\"\n show-word-limit\n clearable\n placeholder=\"请输入新密码\"\n maxlength=\"16\"\n minlength=\"6\"\n />\n </el-form-item>\n <el-form-item>\n <el-input\n v-model=\"pwdForm.pwd2\"\n show-word-limit\n clearable\n placeholder=\"请再次输入\"\n maxlength=\"16\"\n minlength=\"6\"\n />\n </el-form-item>\n </el-form>\n </div>\n <template #footer>\n <span class=\"dialog-footer\">\n <el-button @click=\"showResetPasswordDialog = false\">取 消</el-button>\n <el-button type=\"primary\" @click=\"handleSavePassword\">确 定</el-button>\n </span>\n </template>\n </el-dialog>\n <!-- 重绑定手机号 -->\n <el-dialog\n v-model=\"showPhoneDialog\"\n :fullscreen=\"isMobile\"\n center\n title=\"绑定手机号\"\n >\n <div class=\"tc\">\n <el-form :model=\"phoneForm\" label-width=\"60px\">\n <el-form-item label=\"手机号\">\n <el-input\n v-model=\"phoneForm.phone\"\n show-word-limit\n clearable\n placeholder=\"请输入手机号\"\n maxlength=\"11\"\n >\n <template #append>\n <!-- 获取验证码 -->\n <el-button :disabled=\"time !== 0\" @click=\"getCode\">\n {{\n codeText\n }}\n </el-button>\n </template>\n </el-input>\n </el-form-item>\n <el-form-item>\n <el-input\n v-model=\"phoneForm.code\"\n show-word-limit\n clearable\n placeholder=\"请输入验证码\"\n maxlength=\"4\"\n />\n </el-form-item>\n </el-form>\n </div>\n <template #footer>\n <span class=\"dialog-footer\">\n <el-button @click=\"showPhoneDialog = false\">取 消</el-button>\n <el-button type=\"primary\" @click=\"handleSavePhone\">确 定</el-button>\n </span>\n </template>\n </el-dialog>\n <!-- 修改空间上限 -->\n <el-dialog\n v-model=\"showLimitSizeDialog\"\n :fullscreen=\"isMobile\"\n center\n title=\"修改空间上限\"\n >\n <div class=\"tc\">\n <el-form :model=\"limitSizeForm\" label-width=\"60px\">\n <el-form-item label=\"大小\">\n <el-input\n v-model=\"limitSizeForm.size\"\n show-word-limit\n clearable\n placeholder=\"请输入空间上限\"\n maxlength=\"4\"\n type=\"number\"\n >\n <template #append>\n GB\n </template>\n </el-input>\n </el-form-item>\n </el-form>\n </div>\n <template #footer>\n <span class=\"dialog-footer\">\n <el-button @click=\"showLimitSizeDialog = false\">取 消</el-button>\n <el-button type=\"primary\" @click=\"handleSaveSize\">确 定</el-button>\n </span>\n </template>\n </el-dialog>\n <!-- 修改余额 -->\n <el-dialog\n v-model=\"showWalletDialog\"\n :fullscreen=\"isMobile\"\n center\n title=\"修改空间上限\"\n >\n <div class=\"tc\">\n <el-form :model=\"walletForm\" label-width=\"60px\">\n <el-form-item label=\"余额\">\n <el-input\n v-model=\"walletForm.money\"\n show-word-limit\n clearable\n placeholder=\"请输入新的余额\"\n maxlength=\"4\"\n type=\"number\"\n >\n <template #append>\n ¥\n </template>\n </el-input>\n </el-form-item>\n </el-form>\n </div>\n <template #footer>\n <span class=\"dialog-footer\">\n <el-button @click=\"showWalletDialog = false\">取 消</el-button>\n <el-button type=\"primary\" @click=\"handleSaveWallet\">确 定</el-button>\n </span>\n </template>\n </el-dialog>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n@media screen and (max-width: 700px) {\n .user {\n margin-top: 40px !important;\n }\n\n .log-filter {\n justify-content: center;\n }\n}\n.w100 {\n width: 100px;\n}\n.user {\n margin: 0 auto;\n}\n\n.panel {\n max-width: 1256px;\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n border-radius: 4px;\n}\n\n.log-filter {\n display: flex;\n flex-wrap: wrap;\n\n .item {\n margin-right: 10px;\n margin-bottom: 10px;\n .label {\n margin-right: 10px;\n font-size: 12px;\n }\n }\n}\n\n.text-btn-list {\n display: flex;\n flex-wrap: wrap;\n\n button {\n margin-left: 0;\n }\n}\n\n.user-oss-info {\n list-style: none;\n li {\n margin-bottom: 10px;\n }\n .clear-btn {\n margin-left: 10px;\n }\n &.disabled {\n background-color: rgb(245 108 108 / 30%);\n }\n}\n</style>\n"],"names":["_sfc_main","defineComponent","name","_hoisted_1","viewBox","xmlns","_hoisted_4","createElementVNode","fill","d","message","_export_sfc","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","users","reactive","refreshUsers","SuperUserApi","getUserList","then","res","splice","length","data","list","ElMessage","success","userStatusType","useLocalStorage","USER_STATUS","NORMAL","searchWord","ref","statusTypeList","label","type","FREEZE","BAN","sortType","sortTypeList","value","sortOrder","sortOrderList","filterUsers","computed","copyUsers","sort","a","b","filter","v","status","id","account","phone","joinTime","loginCount","loginTime","openTime","formatDate","includes","pageSize","handleSizeChange","pageCount","Math","ceil","pageCurrent","pageUsers","start","end","slice","handlePageChange","idx","showUserStatusDialog","selectUserId","selectStatus","userStatusList","handleSaveStatus","user","find","u","warning","updateUserStatus","showResetPasswordDialog","pwdForm","pwd1","pwd2","handleSavePassword","rPassword","test","ElMessageBox","confirm","confirmButtonText","cancelButtonText","resetPassword","catch","showLimitSizeDialog","limitSizeForm","size","async","handleSaveSize","resetLimitSpace","showWalletDialog","walletForm","money","handleSaveWallet","updateWallet","showPhoneDialog","phoneForm","code","codeText","time","refreshCodeText","setTimeout","getCode","rMobilePhone","PublicApi","checkPhone","err","c","error","handleSavePhone","rVerCode","resetPhone","handleClearFiles","userId","month","quarter","half","clearOssFile","pushMessageType","showMessageDialog","pushMessageText","sendMessage","sureSendMessage","onMounted","isMobile","useIsMobile","oTime","logout"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
System.register(["./index-legacy-BaUX-zxP.js","./el-form-item-legacy-CNxAgkUf.js","./tip-legacy-Cm2JPa4-.js","./refresh-legacy-NT5iEzmI.js","./isEqual-legacy-D_cb03Zv.js","./index-legacy-Bziat01y.js"],(function(e,a){"use strict";var t,l,n,r,s,i,o,d,c,u,g,p,m,v,f,x,y,h,w,k,M,b,z,C,E,_,j,O,T,B,I,N,S;return{setters:[e=>{t=e.a4,l=e.g,n=e.d,r=e.a,s=e.c,i=e.b,o=e.Z,d=e.r,c=e.O,u=e.o,g=e.j,p=e.w,m=e.k,v=e.H,f=e.a8,x=e.a9,y=e.e,h=e.F,w=e.C,k=e.t,M=e.D,b=e.S,z=e.E,C=e.I,E=e.x,_=e.v,j=e.p,O=e.f,T=e._},e=>{B=e.E,I=e.a},e=>{N=e.T},e=>{S=e.r},null,null],execute:function(){var a=document.createElement("style");a.textContent="@media screen and (max-width: 700px){.user[data-v-9638922a]{margin-top:40px!important}}.user[data-v-9638922a]{margin:0 auto}.panel[data-v-9638922a]{max-width:1256px;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}h1[data-v-9638922a]{margin:0;padding:10px 0;font-size:20px;font-weight:700;text-align:center;display:flex;justify-content:center;align-items:center}.service-list[data-v-9638922a]{display:flex;flex-wrap:wrap;justify-content:space-around}.service-item[data-v-9638922a]{display:flex;flex-direction:column;justify-content:center;align-items:center;margin:10px;min-width:120px}.service-item img[data-v-9638922a]{width:80px}.service-item p[data-v-9638922a]{text-align:center;padding-top:10px;font-size:14px}@keyframes rotate-9638922a{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.loading[data-v-9638922a]{margin-left:10px;animation:rotate-9638922a 1s linear infinite}.error-panel[data-v-9638922a]{padding:0 20px}.error-panel p[data-v-9638922a]{margin-bottom:10px}.error-panel p .error[data-v-9638922a]{color:red}.config-container[data-v-9638922a]{display:flex;justify-content:space-around;flex-wrap:wrap}.config-panel h2[data-v-9638922a]{text-align:center;font-size:16px;margin-bottom:10px}\n",document.head.appendChild(a);const D={getServiceOverview:function(){return t.get("/config/service/overview")},getServiceConfig:function(){return t.get("/config/service/config")},updateCfg:function(e){return t.put("/config/service/config",e)}},A=n({name:"CloseBold"}),L={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},Y=[i("path",{fill:"currentColor",d:"M195.2 195.2a64 64 0 0 1 90.496 0L512 421.504 738.304 195.2a64 64 0 0 1 90.496 90.496L602.496 512 828.8 738.304a64 64 0 0 1-90.496 90.496L512 602.496 285.696 828.8a64 64 0 0 1-90.496-90.496L421.504 512 195.2 285.696a64 64 0 0 1 0-90.496z"},null,-1)];var q=l(A,[["render",function(e,a,t,l,n,i){return r(),s("svg",L,Y)}]]);const V=n({name:"Select"}),Q={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},U=[i("path",{fill:"currentColor",d:"M77.248 415.04a64 64 0 0 1 90.496 0l226.304 226.304L846.528 188.8a64 64 0 1 1 90.56 90.496l-543.04 543.04-316.8-316.8a64 64 0 0 1 0-90.496z"},null,-1)];var F=l(V,[["render",function(e,a,t,l,n,i){return r(),s("svg",Q,U)}]]);const H=e=>(j("data-v-9638922a"),e=e(),O(),e),R={class:"user"},Z={class:"panel"},G=H((()=>i("span",null,"服务概况",-1))),J={class:"service-list"},K=["src","alt"],P={key:2},W={class:"error-panel"},X=H((()=>i("h1",null,"错误信息",-1))),$={class:"error"},ee=H((()=>i("h1",null,"服务相关配置",-1))),ae={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"},te={class:"config-container"},le={class:"flex",style:{flex:"1"}};e("default",T(n({__name:"index",setup(e){const a=o([{name:"MySQL",key:"mysql",logo:"https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTAyMjIwNA==657359022204",status:!1,des:"存储用户数据",errMsg:""},{name:"七牛云",key:"qiniu",logo:"https://img.cdn.sugarat.top/mdImg/MTY1NzM1ODcyODM0Mg==657358728342",status:!1,des:"文件存储"},{name:"MongoDB",key:"mongodb",logo:"https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTA4OTc3Nw==657359089777",status:!1,des:"用户数据与日志"},{name:"Redis",key:"redis",logo:"https://img.cdn.sugarat.top/mdImg/MTY1NzM1ODgyNzM1MA==657358827350",status:!1,des:"持久化缓存数据",error:"确保安装redis,且监听端口6379"},{name:"腾讯云",key:"tx",logo:"https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTE1MzQzOQ==657359153439",status:!1,des:"短信服务"}]),t=d(!1),l=c((()=>a.filter((e=>e.errMsg))));function n(){t.value||(t.value=!0,D.getServiceOverview().then((e=>{const{data:l}=e;a.forEach((e=>{const{status:a,errMsg:t}=l[e.key];e.status=a,e.errMsg=t})),z.success("服务状态刷新完成"),t.value=!1})))}const j=d([]);return u((()=>{n(),D.getServiceConfig().then((e=>{e.data.forEach((e=>{e.data.forEach((e=>{e.disabled=!0}))})),j.value=e.data}))})),(e,o)=>{const d=C,c=E,u=_,O=B,T=I;return r(),s("div",R,[i("div",Z,[i("div",null,[i("h1",null,[G,g(d,{class:v({loading:t.value}),style:{cursor:"pointer","margin-left":"10px"},onClick:n},{default:p((()=>[g(m(S))])),_:1},8,["class"]),f(i("span",null,"数据加载中...",512),[[x,t.value]])]),g(N,null,{default:p((()=>[y("查看各个服务的运行情况")])),_:1}),i("div",J,[(r(!0),s(h,null,w(a,(e=>(r(),s("div",{key:e.key,class:"service-item"},[i("img",{src:e.logo,alt:e.name},null,8,K),i("p",null,[g(N,null,{default:p((()=>[y(k(e.des),1)])),_:2},1024)]),e.status?(r(),M(c,{key:0,type:"success",size:"small",icon:m(F),circle:""},null,8,["icon"])):(r(),M(c,{key:1,type:"danger",size:"small",icon:m(q),circle:""},null,8,["icon"])),!e.status&&e.error?(r(),s("p",P,[g(N,null,{default:p((()=>[y(k(e.error),1)])),_:2},1024)])):b("",!0)])))),128))])]),f(i("div",W,[X,(r(!0),s(h,null,w(l.value,(e=>(r(),s("p",{key:e.key},[i("strong",null,k(e.name)+":",1),i("span",$,k(e.errMsg),1)])))),128))],512),[[x,l.value.length]]),i("div",null,[ee,g(N,null,{default:p((()=>[y(" 在此面板,配置服务器运行相关参数 "),i("a",ae,[g(c,{type:"primary",link:""},{default:p((()=>[y("配置手册?")])),_:1})])])),_:1})]),i("div",te,[(r(!0),s(h,null,w(j.value,(e=>(r(),s("div",{key:e.title,class:"config-panel"},[i("h2",null,k(e.title),1),g(T,{"label-position":"right","label-width":"100px",style:{"max-width":"400px",margin:"0 auto"}},{default:p((()=>[(r(!0),s(h,null,w(e.data,(e=>(r(),M(O,{key:e.key,"label-width":"auto",label:e.label||e.key},{default:p((()=>[i("div",le,[g(u,{modelValue:e.value,"onUpdate:modelValue":a=>e.value=a,disabled:e.disabled},null,8,["modelValue","onUpdate:modelValue","disabled"]),e.disabled?(r(),M(c,{key:0,type:"primary",text:"",onClick:a=>e.disabled=!1},{default:p((()=>[y(" 更新 ")])),_:2},1032,["onClick"])):(r(),M(c,{key:1,type:"success",text:"",onClick:a=>{return t=e,void D.updateCfg(t).then((()=>{t.disabled=!0,z.success("更新成功"),n()}));var t}},{default:p((()=>[y(" 完成 ")])),_:2},1032,["onClick"]))])])),_:2},1032,["label"])))),128))])),_:2},1024)])))),128))])])])}}}),[["__scopeId","data-v-9638922a"]]))}}}));
|
|
2
|
+
//# sourceMappingURL=index-legacy-DiTQKLfl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-legacy-DiTQKLfl.js","sources":["../../src/apis/modules/config.ts","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/close-bold.mjs","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/select.mjs","../../src/pages/dashboard/config/index.vue"],"sourcesContent":["import ajax from '../ajax'\n\nfunction getServiceOverview(): ConfigServiceAPITypes.getServiceOverview {\n return ajax.get('/config/service/overview')\n}\n\nfunction getServiceConfig(): ConfigServiceAPITypes.getServiceConfig {\n return ajax.get('/config/service/config')\n}\n\nfunction updateCfg(data: ConfigServiceAPITypes.ServiceConfigItem) {\n return ajax.put('/config/service/config', data)\n}\n\nexport default {\n getServiceOverview,\n getServiceConfig,\n updateCfg\n}\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"CloseBold\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M195.2 195.2a64 64 0 0 1 90.496 0L512 421.504 738.304 195.2a64 64 0 0 1 90.496 90.496L602.496 512 828.8 738.304a64 64 0 0 1-90.496 90.496L512 602.496 285.696 828.8a64 64 0 0 1-90.496-90.496L421.504 512 195.2 285.696a64 64 0 0 1 0-90.496z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar closeBold = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { closeBold as default };\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Select\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M77.248 415.04a64 64 0 0 1 90.496 0l226.304 226.304L846.528 188.8a64 64 0 1 1 90.56 90.496l-543.04 543.04-316.8-316.8a64 64 0 0 1 0-90.496z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar select = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { select as default };\n","<script lang=\"ts\" setup>\nimport { ElMessage } from 'element-plus'\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { CloseBold, Refresh, Select } from '@element-plus/icons-vue'\nimport Tip from '../tasks/components/infoPanel/tip.vue'\nimport { ConfigServiceAPI } from '@/apis'\n\nconst serviceList = reactive([\n {\n name: 'MySQL',\n key: 'mysql',\n logo: 'https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTAyMjIwNA==657359022204',\n status: false,\n des: '存储用户数据',\n errMsg: '',\n },\n {\n name: '七牛云',\n key: 'qiniu',\n logo: 'https://img.cdn.sugarat.top/mdImg/MTY1NzM1ODcyODM0Mg==657358728342',\n status: false,\n des: '文件存储',\n },\n {\n name: 'MongoDB',\n key: 'mongodb',\n logo: 'https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTA4OTc3Nw==657359089777',\n status: false,\n des: '用户数据与日志',\n },\n {\n name: 'Redis',\n key: 'redis',\n logo: 'https://img.cdn.sugarat.top/mdImg/MTY1NzM1ODgyNzM1MA==657358827350',\n status: false,\n des: '持久化缓存数据',\n error: '确保安装redis,且监听端口6379',\n },\n {\n name: '腾讯云',\n key: 'tx',\n logo: 'https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTE1MzQzOQ==657359153439',\n status: false,\n des: '短信服务',\n },\n])\n\nconst loading = ref(false)\nconst showErrorList = computed(() => serviceList.filter(item => item.errMsg))\nfunction refreshStatus() {\n if (loading.value)\n return\n loading.value = true\n ConfigServiceAPI.getServiceOverview().then((v) => {\n const { data } = v\n serviceList.forEach((item) => {\n const { status, errMsg } = data[item.key]\n item.status = status\n item.errMsg = errMsg\n })\n ElMessage.success('服务状态刷新完成')\n loading.value = false\n })\n}\n\nconst serverConfig = ref([])\nfunction getServiceConfig() {\n ConfigServiceAPI.getServiceConfig().then((v) => {\n // console.log(v.data)\n v.data.forEach((v) => {\n v.data.forEach((v) => {\n v.disabled = true\n })\n })\n serverConfig.value = v.data\n })\n}\nfunction updateCfg(item: ConfigServiceAPITypes.ServiceConfigItem) {\n ConfigServiceAPI.updateCfg(item).then(() => {\n item.disabled = true\n ElMessage.success('更新成功')\n refreshStatus()\n })\n}\nonMounted(() => {\n refreshStatus()\n getServiceConfig()\n})\n</script>\n\n<template>\n <div class=\"user\">\n <div class=\"panel\">\n <!-- 服务概况 -->\n <div>\n <h1>\n <span>服务概况</span>\n <el-icon\n :class=\"{\n loading,\n }\"\n style=\"cursor: pointer; margin-left: 10px\"\n @click=\"refreshStatus\"\n >\n <Refresh />\n </el-icon>\n <span v-show=\"loading\">数据加载中...</span>\n </h1>\n <Tip>查看各个服务的运行情况</Tip>\n <div class=\"service-list\">\n <div\n v-for=\"service in serviceList\"\n :key=\"service.key\"\n class=\"service-item\"\n >\n <img :src=\"service.logo\" :alt=\"service.name\">\n <!-- <p>{{ service.name }}</p> -->\n <p>\n <Tip>{{ service.des }}</Tip>\n </p>\n <el-button\n v-if=\"service.status\"\n type=\"success\"\n size=\"small\"\n :icon=\"Select\"\n circle\n />\n <el-button\n v-else\n type=\"danger\"\n size=\"small\"\n :icon=\"CloseBold\"\n circle\n />\n <p v-if=\"!service.status && service.error\">\n <Tip>{{ service.error }}</Tip>\n </p>\n </div>\n </div>\n </div>\n <div v-show=\"showErrorList.length\" class=\"error-panel\">\n <h1>错误信息</h1>\n <p v-for=\"err in showErrorList\" :key=\"err.key\">\n <strong>{{ err.name }}:</strong>\n <span class=\"error\">{{ err.errMsg }}</span>\n </p>\n </div>\n <div>\n <h1>服务相关配置</h1>\n <Tip>\n 在此面板,配置服务器运行相关参数\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 class=\"config-container\">\n <div\n v-for=\"serverItem in serverConfig\"\n :key=\"serverItem.title\"\n class=\"config-panel\"\n >\n <h2>\n {{ serverItem.title }}\n </h2>\n <el-form\n label-position=\"right\"\n label-width=\"100px\"\n style=\"max-width: 400px; margin: 0 auto\"\n >\n <el-form-item\n v-for=\"cfgItem in serverItem.data\"\n :key=\"cfgItem.key\"\n label-width=\"auto\"\n :label=\"cfgItem.label || cfgItem.key\"\n >\n <div class=\"flex\" style=\"flex: 1\">\n <el-input\n v-model=\"cfgItem.value\"\n :disabled=\"cfgItem.disabled\"\n />\n <el-button\n v-if=\"cfgItem.disabled\"\n type=\"primary\"\n text\n @click=\"cfgItem.disabled = false\"\n >\n 更新\n </el-button>\n <el-button\n v-else\n type=\"success\"\n text\n @click=\"updateCfg(cfgItem)\"\n >\n 完成\n </el-button>\n </div>\n </el-form-item>\n </el-form>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n@media screen and (max-width: 700px) {\n .user {\n margin-top: 40px !important;\n }\n}\n\n.user {\n margin: 0 auto;\n}\n\n.panel {\n max-width: 1256px;\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n border-radius: 4px;\n}\n\nh1 {\n margin: 0;\n padding: 10px 0;\n font-size: 20px;\n font-weight: bold;\n text-align: center;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.service-list {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-around;\n}\n\n.service-item {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n margin: 10px;\n min-width: 120px;\n\n img {\n width: 80px;\n }\n\n p {\n text-align: center;\n padding-top: 10px;\n font-size: 14px;\n }\n}\n\n@keyframes rotate {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.loading {\n margin-left: 10px;\n animation: rotate 1s linear infinite;\n}\n\n.error-panel {\n padding: 0 20px;\n\n p {\n .error {\n color: red;\n }\n\n margin-bottom: 10px;\n }\n}\n\n.config-container {\n display: flex;\n justify-content: space-around;\n flex-wrap: wrap;\n}\n\n.config-panel {\n h2 {\n text-align: center;\n font-size: 16px;\n margin-bottom: 10px;\n }\n}\n</style>\n"],"names":["ConfigServiceAPI","getServiceOverview","ajax","get","getServiceConfig","updateCfg","data","put","_sfc_main","defineComponent","name","_hoisted_1","viewBox","xmlns","_hoisted_3","createElementVNode","fill","d","closeBold","_export_sfc","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","select","serviceList","reactive","key","logo","status","des","errMsg","error","loading","ref","showErrorList","computed","filter","item","refreshStatus","value","then","v","forEach","ElMessage","success","serverConfig","onMounted","disabled"],"mappings":"g5DAce,MAAAA,EAAA,CACbC,mBAbF,WACS,OAAAC,EAAKC,IAAI,2BAClB,EAYEC,iBAVF,WACS,OAAAF,EAAKC,IAAI,yBAClB,EASEE,UAPF,SAAmBC,GACV,OAAAJ,EAAKK,IAAI,yBAA0BD,EAC5C,GCTME,EAAYC,EAAgB,CAChCC,KAAM,cAEFC,EAAa,CACjBC,QAAS,gBACTC,MAAO,8BAMHC,EAAa,CAJgBC,EAAmB,OAAQ,CAC5DC,KAAM,eACNC,EAAG,iPACF,MAAO,IAOV,IAAIC,EAA4BC,EAAYX,EAAW,CAAC,CAAC,SAHzD,SAAqBY,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GACxD,OAAOC,IAAaC,EAAmB,MAAOhB,EAAYG,EAC5D,KChBA,MAAMN,EAAYC,EAAgB,CAChCC,KAAM,WAEFC,EAAa,CACjBC,QAAS,gBACTC,MAAO,8BAMHC,EAAa,CAJgBC,EAAmB,OAAQ,CAC5DC,KAAM,eACNC,EAAG,+IACF,MAAO,IAOV,IAAIW,EAAyBT,EAAYX,EAAW,CAAC,CAAC,SAHtD,SAAqBY,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GACxD,OAAOC,IAAaC,EAAmB,MAAOhB,EAAYG,EAC5D,igBCZA,MAAMe,EAAcC,EAAS,CAC3B,CACEpB,KAAM,QACNqB,IAAK,QACLC,KAAM,qEACNC,QAAQ,EACRC,IAAK,SACLC,OAAQ,IAEV,CACEzB,KAAM,MACNqB,IAAK,QACLC,KAAM,qEACNC,QAAQ,EACRC,IAAK,QAEP,CACExB,KAAM,UACNqB,IAAK,UACLC,KAAM,qEACNC,QAAQ,EACRC,IAAK,WAEP,CACExB,KAAM,QACNqB,IAAK,QACLC,KAAM,qEACNC,QAAQ,EACRC,IAAK,UACLE,MAAO,uBAET,CACE1B,KAAM,MACNqB,IAAK,KACLC,KAAM,qEACNC,QAAQ,EACRC,IAAK,UAIHG,EAAUC,GAAI,GACdC,EAAgBC,GAAS,IAAMX,EAAYY,QAAeC,GAAAA,EAAKP,WACrE,SAASQ,IACHN,EAAQO,QAEZP,EAAQO,OAAQ,EAChB5C,EAAiBC,qBAAqB4C,MAAMC,IACpC,MAAAxC,KAAEA,GAASwC,EACLjB,EAAAkB,SAASL,IACnB,MAAMT,OAAEA,EAAQE,OAAAA,GAAW7B,EAAKoC,EAAKX,KACrCW,EAAKT,OAASA,EACdS,EAAKP,OAASA,CAAA,IAEhBa,EAAUC,QAAQ,YAClBZ,EAAQO,OAAQ,CAAA,IAEpB,CAEM,MAAAM,EAAeZ,EAAI,WAmBzBa,GAAU,KACMR,IAlBd3C,EAAiBI,mBAAmByC,MAAMC,IAEtCA,EAAAxC,KAAKyC,SAASD,IACdA,EAAExC,KAAKyC,SAASD,IACdA,EAAEM,UAAW,CAAA,GACd,IAEHF,EAAaN,MAAQE,EAAExC,IAAA,GAYR,yxDATAoC,SACjB1C,EAAiBK,UAAUqC,GAAMG,MAAK,KACpCH,EAAKU,UAAW,EAChBJ,EAAUC,QAAQ,QACJN,GAAA,IAJlB,IAAmBD","x_google_ignoreList":[1,2]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
System.register(["./index-legacy-BaUX-zxP.js","./el-loading-legacy-CbNNE-qk.js","./el-dialog-legacy-DfEb6k1B.js","./el-pagination-legacy-CeTPKkkI.js","./el-select-legacy-BFhy033s.js","./el-table-column-legacy-Wp8N0Zxv.js","./other-legacy-DjiCmSH4.js","./data-board-legacy-DDytbRz4.js","./refresh-legacy-NT5iEzmI.js","./data-analysis-legacy-CW8BY_nY.js","./index-legacy-Bziat01y.js","./isEqual-legacy-D_cb03Zv.js","./validator-legacy-xarmcLjs.js"],(function(e,a){"use strict";var l,t,n,o,r,s,i,c,u,d,p,v,g,m,f,h,x,b,y,w,z,C,V,j,k,$,_,H,M,S,E,D,B,I,L,O,U,P,T,q,F,J,N,A,G,K;return{setters:[e=>{l=e.g,t=e.d,n=e.a,o=e.c,r=e.b,s=e.r,i=e.Z,c=e.br,u=e.O,d=e.a7,p=e.o,v=e.i,g=e.a8,m=e.F,f=e.C,h=e.j,x=e.w,b=e.D,y=e.G,w=e.t,z=e.k,C=e.e,V=e.s,j=e.bs,k=e.E,$=e.ab,_=e.ad,H=e.I,M=e.v,S=e.x,E=e.p,D=e.f,B=e._},e=>{I=e.v},e=>{L=e.u,O=e.E},e=>{U=e.s,P=e.E},e=>{T=e.E,q=e.a},e=>{F=e.E,J=e.a},e=>{N=e.d},e=>{A=e.d},e=>{G=e.r},e=>{K=e.d},null,null,null],execute:function(){var a=ae.createElement("style");a.textContent="@media screen and (max-width: 700px){.card-list[data-v-2d96ccb5]{margin-top:40px}.card[data-v-2d96ccb5]{min-width:300px}.log-filter[data-v-2d96ccb5]{justify-content:center}}.overview[data-v-2d96ccb5]{margin:0 auto}.card-list[data-v-2d96ccb5]{display:flex;margin-top:20px;justify-content:center;flex-wrap:wrap}.card[data-v-2d96ccb5]{margin:10px;cursor:pointer;font-size:12px;position:relative;overflow:hidden;color:#666;background:#fff;box-shadow:4px 4px 40px rgba(0,0,0,.05);border-color:rgba(0,0,0,.05);min-width:300px}.card .logo[data-v-2d96ccb5]{float:left;margin:4px 10px 0;-webkit-transition:all .38s ease-out;transition:all .38s ease-out;border-radius:6px;font-size:48px}.card .logo i[data-v-2d96ccb5]{padding:10px}.card .content[data-v-2d96ccb5]{float:right;font-weight:700;margin:10px 10px 10px 0}.card .content .title[data-v-2d96ccb5]{line-height:18px;color:rgba(0,0,0,.45);font-size:14px;text-align:right}.card .content .text[data-v-2d96ccb5]{font-size:16px;text-align:right}.card .content .supplement[data-v-2d96ccb5]{font-size:12px;font-weight:lighter;text-align:right}.panel[data-v-2d96ccb5]{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}.log-filter[data-v-2d96ccb5]{display:flex;flex-wrap:wrap}.log-filter .item[data-v-2d96ccb5]{margin-right:10px;margin-bottom:10px}.log-filter .item .label[data-v-2d96ccb5]{margin-right:10px;font-size:12px}\n",ae.head.appendChild(a);const Z=t({name:"Coin"}),Q={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},R=[r("path",{fill:"currentColor",d:"m161.92 580.736 29.888 58.88C171.328 659.776 160 681.728 160 704c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 615.808 928 657.664 928 704c0 129.728-188.544 224-416 224S96 833.728 96 704c0-46.592 24.32-88.576 65.92-123.264z"},null,-1),r("path",{fill:"currentColor",d:"m161.92 388.736 29.888 58.88C171.328 467.84 160 489.792 160 512c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 423.808 928 465.664 928 512c0 129.728-188.544 224-416 224S96 641.728 96 512c0-46.592 24.32-88.576 65.92-123.264z"},null,-1),r("path",{fill:"currentColor",d:"M512 544c-227.456 0-416-94.272-416-224S284.544 96 512 96s416 94.272 416 224-188.544 224-416 224zm0-64c196.672 0 352-77.696 352-160S708.672 160 512 160s-352 77.696-352 160 155.328 160 352 160z"},null,-1)];var W=l(Z,[["render",function(e,a,l,t,r,s){return n(),o("svg",Q,R)}]]);const X=t({name:"Document"}),Y={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},ee=[r("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640V384zm-26.496-64L640 154.496V320h165.504zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32zm160 448h384v64H320v-64zm0-192h160v64H320v-64zm0 384h384v64H320v-64z"},null,-1)];var ae=l(X,[["render",function(e,a,l,t,r,s){return n(),o("svg",Y,ee)}]]);const le=t({name:"TakeawayBox"}),te={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},ne=[r("path",{fill:"currentColor",d:"M832 384H192v448h640V384zM96 320h832V128H96v192zm800 64v480a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V384H64a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32h896a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32h-64zM416 512h192a32 32 0 0 1 0 64H416a32 32 0 0 1 0-64z"},null,-1)];var oe=l(le,[["render",function(e,a,l,t,r,s){return n(),o("svg",te,ne)}]]);const re=t({name:"Tickets"}),se={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},ie=[r("path",{fill:"currentColor",d:"M192 128v768h640V128H192zm-32-64h704a32 32 0 0 1 32 32v832a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32zm160 448h384v64H320v-64zm0-192h192v64H320v-64zm0 384h384v64H320v-64z"},null,-1)];var ce=l(re,[["render",function(e,a,l,t,r,s){return n(),o("svg",se,ie)}]]);const ue={class:"overview"},de={class:"card-list","element-loading-text":"Loading..."},pe={class:"logo"},ve={class:"content"},ge={class:"title"},me={class:"text"},fe={class:"supplement"},he={class:"panel"},xe={class:"p10 log-filter"},be={class:"item"},ye=(e=>(E("data-v-2d96ccb5"),e=e(),D(),e))((()=>r("span",{class:"label"},"类型",-1))),we={class:"item"},ze={class:"item"},Ce={class:"item"},Ve={class:"item"},je={class:"flex fc p10"},ke={class:"dialog-footer"},$e=t({__name:"index",setup(e){const a=L(),l=s(!1),t=i([{type:"user",title:"用户数量",value:"0",supplement:"较昨日 +0",icon:c,color:"#40c9c6"},{type:"file",title:"记录/OSS",value:"0",supplement:"记录较昨日 +0",icon:ae,color:"#36a3f7"},{type:"log",title:"日志数量",value:"0",supplement:"较昨日 +0",icon:ce,color:"#f4516c"},{type:"pv",title:"PV/UV",value:"0/0",supplement:"",icon:A,color:"#34bfa3"},{type:"compress",title:"归档&无效文件",value:"0/0KB",supplement:"已失效0个",icon:W,color:"#e38013"}]);function E(){l.value=!0,j.getCount().then((e=>{const{user:a,file:n,log:o,pv:r,compress:s}=e.data;t[0].value=`${a.sum}`,t[0].supplement=`较昨日 +${a.recent}`,t[1].value=`${n.server.sum}/${n.oss.sum} (${n.oss.size})`,t[1].supplement=`记录较昨日 +${n.server.recent}`,t[2].value=`${o.sum}`,t[2].supplement=`较昨日 +${o.recent}`,t[3].value=`${r.today.sum}/${r.today.uv}`,t[3].supplement=`历史: ${r.all.sum}/${r.all.uv}`,t[4].value=`${s.all.sum}/${s.all.size}`,t[4].supplement=`已失效 ${s.expired.sum}/${s.expired.size}`,l.value=!1}))}const D=s(!1);function B(){D.value=!0,j.clearExpiredCompressFile().then((()=>{setTimeout((()=>{k.success("清理成功,数据同步可能有延迟"),D.value=!1,E()}),2e3)}))}const Z=i([]),Q=s("behavior"),R=s(""),X=i([{label:"用户行为",type:"behavior"},{label:"网络请求",type:"request"},{label:"服务端错误",type:"error"},{label:"页面访问",type:"pv"}]),Y=s(10);function ee(e){Y.value=e}const le=s(0),te=u((()=>Math.ceil(le.value/Y.value))),ne=s(1);function re(e){ne.value=e}const se=N((()=>{j.getLogMsg(Y.value,ne.value,Q.value,R.value).then((e=>{Z.splice(0,Z.length),Z.push(...e.data.logs),le.value=e.data.sum}))}),100,!1);d((()=>{Q.value&&(ne.value=1)})),d((()=>{void 0!==R.value&&se()})),d((()=>{Q.value&&se()})),d((()=>{(ne.value||Y.value)&&se()}));const ie=s(!1),$e=s(""),_e=u((()=>{try{return JSON.parse($e.value)}catch(e){return{}}}));function He(){$($e.value)}function Me(){if(0===Z.length)return;const e=Z.map((e=>{const{date:a,ip:l,msg:t}=e;return[V(new Date(a)),l,t]}));_(["日期","IP","内容"],e,`导出日志_${Z.length}条${V(new Date,"yyyy年MM月日hh时mm分ss秒")}.xlsx`),k.success("导出成功")}return p((()=>{E()})),(e,s)=>{const i=H,c=T,u=q,d=M,p=S,k=F,$=J,_=P,E=v("json-viewer"),L=O,N=I;return n(),o("div",ue,[g((n(),o("div",de,[(n(!0),o(m,null,f(t,(e=>(n(),o("div",{key:e.type,class:"card"},[r("div",pe,[h(i,{color:e.color},{default:x((()=>[(n(),b(y(e.icon)))])),_:2},1032,["color"])]),r("div",ve,[r("div",ge,w(e.title),1),r("div",me,w(e.value),1),r("div",fe,w(e.supplement),1)])])))),128))])),[[N,l.value]]),r("div",he,[r("div",xe,[r("span",be,[ye,h(u,{modelValue:Q.value,"onUpdate:modelValue":s[0]||(s[0]=e=>Q.value=e),size:"default",placeholder:"请选择日志类型"},{default:x((()=>[(n(!0),o(m,null,f(X,((e,a)=>(n(),b(c,{key:a,label:e.label,value:e.type},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])]),r("span",we,[h(d,{modelValue:R.value,"onUpdate:modelValue":s[1]||(s[1]=e=>R.value=e),size:"default",clearable:"",placeholder:"请输入要检索的内容","prefix-icon":z(U)},null,8,["modelValue","prefix-icon"])]),r("span",ze,[h(p,{size:"default",icon:z(G),onClick:z(se)},{default:x((()=>[C("刷新")])),_:1},8,["icon","onClick"])]),r("span",Ce,[h(p,{size:"default",type:"primary",icon:z(K),onClick:Me},{default:x((()=>[C("导出日志 "+w(Z.length)+" 条",1)])),_:1},8,["icon"])]),r("span",Ve,[g((n(),b(p,{size:"default",type:"danger",icon:z(oe),disabled:D.value,onClick:B},{default:x((()=>[C("清理无效文件")])),_:1},8,["icon","disabled"])),[[N,D.value]])])]),h($,{"tooltip-effect":"dark",height:"400",stripe:"",border:"","default-sort":{prop:"date",order:"descending"},data:Z,style:{width:"100%"}},{default:x((()=>[h(k,{sortable:"",prop:"date",label:"日期",width:"180"},{default:x((e=>[C(w(z(V)(new Date(e.row.date))),1)])),_:1}),h(k,{sortable:"",prop:"ip",label:"IP",width:"100"}),h(k,{"min-width":"160",prop:"msg",label:"内容"}),h(k,{fixed:"right",label:"操作",width:"100"},{default:x((e=>[h(p,{type:"primary",text:"",size:"small",onClick:a=>{return l=e.row.id,void j.getLogMsgDetail(l).then((e=>{ie.value=!0,$e.value=JSON.stringify(e.data,null,2)}));var l}},{default:x((()=>[C(" 查看详情 ")])),_:2},1032,["onClick"])])),_:1})])),_:1},8,["data"]),r("div",je,[h(_,{"current-page":ne.value,background:"","page-count":te.value,"page-sizes":[10,50,100,200,500,1e3],"page-size":Y.value,total:le.value,layout:"total, sizes, prev, pager, next, jumper",onCurrentChange:re,onSizeChange:ee},null,8,["current-page","page-count","page-size","total"])])]),h(L,{modelValue:ie.value,"onUpdate:modelValue":s[3]||(s[3]=e=>ie.value=e),title:"详细信息",width:"50%",center:"",fullscreen:z(a)},{footer:x((()=>[r("span",ke,[h(p,{type:"default",onClick:He},{default:x((()=>[C("复制")])),_:1}),h(p,{type:"primary",onClick:s[2]||(s[2]=e=>ie.value=!1)},{default:x((()=>[C("确定")])),_:1})])])),default:x((()=>[h(E,{value:_e.value,"expand-depth":5,copyable:"",boxed:"",sort:""},null,8,["value"])])),_:1},8,["modelValue","fullscreen"])])}}});e("default",B($e,[["__scopeId","data-v-2d96ccb5"]]))}}}));
|
|
2
|
+
//# sourceMappingURL=index-legacy-DqLKrBdr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-legacy-DqLKrBdr.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/coin.mjs","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/document.mjs","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/takeaway-box.mjs","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/tickets.mjs","../../src/pages/dashboard/manage/overview/index.vue"],"sourcesContent":["import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Coin\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"m161.92 580.736 29.888 58.88C171.328 659.776 160 681.728 160 704c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 615.808 928 657.664 928 704c0 129.728-188.544 224-416 224S96 833.728 96 704c0-46.592 24.32-88.576 65.92-123.264z\"\n}, null, -1);\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"m161.92 388.736 29.888 58.88C171.328 467.84 160 489.792 160 512c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 423.808 928 465.664 928 512c0 129.728-188.544 224-416 224S96 641.728 96 512c0-46.592 24.32-88.576 65.92-123.264z\"\n}, null, -1);\nconst _hoisted_4 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M512 544c-227.456 0-416-94.272-416-224S284.544 96 512 96s416 94.272 416 224-188.544 224-416 224zm0-64c196.672 0 352-77.696 352-160S708.672 160 512 160s-352 77.696-352 160 155.328 160 352 160z\"\n}, null, -1);\nconst _hoisted_5 = [\n _hoisted_2,\n _hoisted_3,\n _hoisted_4\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_5);\n}\nvar coin = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { coin as default };\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Document\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M832 384H576V128H192v768h640V384zm-26.496-64L640 154.496V320h165.504zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32zm160 448h384v64H320v-64zm0-192h160v64H320v-64zm0 384h384v64H320v-64z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar document = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { document as default };\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"TakeawayBox\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M832 384H192v448h640V384zM96 320h832V128H96v192zm800 64v480a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V384H64a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32h896a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32h-64zM416 512h192a32 32 0 0 1 0 64H416a32 32 0 0 1 0-64z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar takeawayBox = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { takeawayBox as default };\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Tickets\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M192 128v768h640V128H192zm-32-64h704a32 32 0 0 1 32 32v832a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32zm160 448h384v64H320v-64zm0-192h192v64H320v-64zm0 384h384v64H320v-64z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar tickets = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { tickets as default };\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref, watchEffect } from 'vue'\nimport {\n Coin,\n DataAnalysis,\n DataBoard,\n Document,\n Refresh,\n Search,\n TakeawayBox,\n Tickets,\n User,\n} from '@element-plus/icons-vue'\nimport { ElMessage } from 'element-plus'\nimport { SuperOverviewApi } from '@/apis'\nimport { copyRes, formatDate } from '@/utils/stringUtil'\nimport { tableToExcel } from '@/utils/networkUtil'\nimport { debounce } from '@/utils/other'\nimport { useIsMobile } from '@/composables'\n\nconst isMobile = useIsMobile()\n\nconst isLoadingOverview = ref(false)\nconst cardList = reactive([\n {\n type: 'user',\n title: '用户数量',\n value: '0',\n supplement: '较昨日 +0',\n icon: User,\n color: '#40c9c6',\n },\n {\n type: 'file',\n title: '记录/OSS',\n value: '0',\n supplement: '记录较昨日 +0',\n icon: Document,\n color: '#36a3f7',\n },\n {\n type: 'log',\n title: '日志数量',\n value: '0',\n supplement: '较昨日 +0',\n icon: Tickets,\n color: '#f4516c',\n },\n {\n type: 'pv',\n title: 'PV/UV',\n value: '0/0',\n supplement: '',\n icon: DataBoard,\n color: '#34bfa3',\n },\n {\n type: 'compress',\n title: '归档&无效文件',\n value: '0/0KB',\n supplement: '已失效0个',\n icon: Coin,\n color: '#e38013',\n },\n])\n// 刷新记录条数\nfunction refreshCount() {\n isLoadingOverview.value = true\n SuperOverviewApi.getCount().then((res) => {\n const { user, file, log, pv, compress } = res.data\n cardList[0].value = `${user.sum}`\n cardList[0].supplement = `较昨日 +${user.recent}`\n cardList[1].value = `${file.server.sum}/${file.oss.sum} (${file.oss.size})`\n cardList[1].supplement = `记录较昨日 +${file.server.recent}`\n cardList[2].value = `${log.sum}`\n cardList[2].supplement = `较昨日 +${log.recent}`\n cardList[3].value = `${pv.today.sum}/${pv.today.uv}`\n cardList[3].supplement = `历史: ${pv.all.sum}/${pv.all.uv}`\n cardList[4].value = `${compress.all.sum}/${compress.all.size}`\n cardList[4].supplement = `已失效 ${compress.expired.sum}/${compress.expired.size}`\n isLoadingOverview.value = false\n })\n}\n\nconst disableDelete = ref(false)\nfunction clearExpiredCompressFile() {\n disableDelete.value = true\n SuperOverviewApi.clearExpiredCompressFile().then(() => {\n setTimeout(() => {\n ElMessage.success('清理成功,数据同步可能有延迟')\n disableDelete.value = false\n refreshCount()\n }, 2000)\n })\n}\n\n// 日志\nconst logs: any[] = reactive([])\n\n// function getLogsTypeText(type: string) {\n// const logsTypeText: any = {\n// request: '网络请求',\n// behavior: '用户行为',\n// error: '错误',\n// pv: '页面访问',\n// }\n// return logsTypeText[type]\n// }\n// 筛选的日志\nconst filterLogType = ref('behavior')\nconst searchWord = ref('')\nconst logTypeList = reactive([\n {\n label: '用户行为',\n type: 'behavior',\n },\n {\n label: '网络请求',\n type: 'request',\n },\n {\n label: '服务端错误',\n type: 'error',\n },\n {\n label: '页面访问',\n type: 'pv',\n },\n])\n\n// 分页\n// 页大小\nconst pageSize = ref(10)\nfunction handleSizeChange(v: number) {\n pageSize.value = v\n}\n// 总条数\nconst logSumCount = ref(0)\nconst pageCount = computed(() => {\n const t = Math.ceil(logSumCount.value / pageSize.value)\n return t\n})\nconst pageCurrent = ref(1)\nfunction handlePageChange(idx: number) {\n pageCurrent.value = idx\n}\n\nconst refreshLogs = debounce(\n () => {\n SuperOverviewApi.getLogMsg(\n pageSize.value,\n pageCurrent.value,\n filterLogType.value,\n searchWord.value,\n ).then((res) => {\n logs.splice(0, logs.length)\n logs.push(...res.data.logs)\n logSumCount.value = res.data.sum\n })\n },\n 100,\n false,\n)\n\nwatchEffect(() => {\n if (filterLogType.value) {\n pageCurrent.value = 1\n }\n})\n\nwatchEffect(() => {\n if (searchWord.value !== undefined) {\n refreshLogs()\n }\n})\n\nwatchEffect(() => {\n if (filterLogType.value) {\n refreshLogs()\n }\n})\n\nwatchEffect(() => {\n if (pageCurrent.value || pageSize.value) {\n refreshLogs()\n }\n})\n\nconst showDetail = ref(false)\nconst showData = ref('')\nfunction handleDetail(id) {\n SuperOverviewApi.getLogMsgDetail(id).then((res) => {\n showDetail.value = true\n showData.value = JSON.stringify(res.data, null, 2)\n })\n}\nconst jsonData = computed(() => {\n try {\n return JSON.parse(showData.value)\n }\n catch (e) {\n return {}\n }\n})\nfunction handleCopyDetail() {\n copyRes(showData.value)\n}\n\nfunction exportLogData() {\n if (logs.length === 0) {\n return\n }\n const headers = ['日期', 'IP', '内容']\n const body = logs.map((v) => {\n const { date, ip, msg } = v\n return [formatDate(new Date(date)), ip, msg]\n })\n tableToExcel(\n headers,\n body,\n `导出日志_${logs.length}条${formatDate(\n new Date(),\n 'yyyy年MM月日hh时mm分ss秒',\n )}.xlsx`,\n )\n ElMessage.success('导出成功')\n}\nonMounted(() => {\n refreshCount()\n})\n</script>\n\n<template>\n <div class=\"overview\">\n <div\n v-loading=\"isLoadingOverview\"\n class=\"card-list\"\n element-loading-text=\"Loading...\"\n >\n <div v-for=\"c in cardList\" :key=\"c.type\" class=\"card\">\n <div class=\"logo\">\n <el-icon :color=\"c.color\">\n <component :is=\"c.icon\" />\n </el-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">\n {{ c.title }}\n </div>\n <div class=\"text\">\n {{ c.value }}\n </div>\n <div class=\"supplement\">\n {{ c.supplement }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"panel\">\n <div class=\"p10 log-filter\">\n <span class=\"item\">\n <span class=\"label\">类型</span>\n <el-select\n v-model=\"filterLogType\"\n size=\"default\"\n placeholder=\"请选择日志类型\"\n >\n <el-option\n v-for=\"(item, idx) in logTypeList\"\n :key=\"idx\"\n :label=\"item.label\"\n :value=\"item.type\"\n />\n </el-select>\n </span>\n <span class=\"item\">\n <el-input\n v-model=\"searchWord\"\n size=\"default\"\n clearable\n placeholder=\"请输入要检索的内容\"\n :prefix-icon=\"Search\"\n />\n </span>\n <span class=\"item\">\n <el-button size=\"default\" :icon=\"Refresh\" @click=\"refreshLogs\">刷新</el-button>\n </span>\n <span class=\"item\">\n <el-button\n size=\"default\"\n type=\"primary\"\n :icon=\"DataAnalysis\"\n @click=\"exportLogData\"\n >导出日志 {{ logs.length }} 条</el-button>\n </span>\n <span class=\"item\">\n <el-button\n v-loading=\"disableDelete\"\n size=\"default\"\n type=\"danger\"\n :icon=\"TakeawayBox\"\n :disabled=\"disableDelete\"\n @click=\"clearExpiredCompressFile\"\n >清理无效文件</el-button>\n </span>\n </div>\n <el-table\n tooltip-effect=\"dark\"\n height=\"400\"\n stripe\n border\n :default-sort=\"{ prop: 'date', order: 'descending' }\"\n :data=\"logs\"\n style=\"width: 100%\"\n >\n <el-table-column sortable prop=\"date\" label=\"日期\" width=\"180\">\n <template #default=\"scope\">\n {{\n formatDate(new Date(scope.row.date))\n }}\n </template>\n </el-table-column>\n <!-- <el-table-column prop=\"type\" label=\"类型\" width=\"100\">\n <template #default=\"scope\">{{ getLogsTypeText(scope.row.type) }}</template>\n </el-table-column> -->\n <el-table-column\n sortable\n prop=\"ip\"\n label=\"IP\"\n width=\"100\"\n />\n <el-table-column\n min-width=\"160\"\n prop=\"msg\"\n label=\"内容\"\n />\n <el-table-column fixed=\"right\" label=\"操作\" width=\"100\">\n <template #default=\"scope\">\n <el-button\n type=\"primary\"\n text\n size=\"small\"\n @click=\"handleDetail(scope.row.id)\"\n >\n 查看详情\n </el-button>\n </template>\n </el-table-column>\n </el-table>\n\n <div class=\"flex fc p10\">\n <el-pagination\n :current-page=\"pageCurrent\"\n background\n :page-count=\"pageCount\"\n :page-sizes=\"[10, 50, 100, 200, 500, 1000]\"\n :page-size=\"pageSize\"\n :total=\"logSumCount\"\n layout=\"total, sizes, prev, pager, next, jumper\"\n @current-change=\"handlePageChange\"\n @size-change=\"handleSizeChange\"\n />\n </div>\n </div>\n <el-dialog\n v-model=\"showDetail\"\n title=\"详细信息\"\n width=\"50%\"\n center\n :fullscreen=\"isMobile\"\n >\n <json-viewer\n :value=\"jsonData\"\n :expand-depth=\"5\"\n copyable\n boxed\n sort\n />\n <template #footer>\n <span class=\"dialog-footer\">\n <el-button type=\"default\" @click=\"handleCopyDetail\">复制</el-button>\n <el-button type=\"primary\" @click=\"showDetail = false\">确定</el-button>\n </span>\n </template>\n </el-dialog>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n@media screen and (max-width: 700px) {\n .card-list {\n margin-top: 40px;\n }\n\n .card {\n min-width: 300px;\n }\n\n .log-filter {\n justify-content: center;\n }\n}\n\n.overview {\n margin: 0 auto;\n}\n\n.card-list {\n display: flex;\n margin-top: 20px;\n justify-content: center;\n flex-wrap: wrap;\n}\n\n.card {\n margin: 10px;\n cursor: pointer;\n font-size: 12px;\n position: relative;\n overflow: hidden;\n color: #666;\n background: #fff;\n box-shadow: 4px 4px 40px rgb(0 0 0 / 5%);\n border-color: rgba(0, 0, 0, 0.05);\n min-width: 300px;\n\n .logo {\n float: left;\n margin: 4px 10px 0 10px;\n -webkit-transition: all 0.38s ease-out;\n transition: all 0.38s ease-out;\n border-radius: 6px;\n font-size: 48px;\n\n i {\n padding: 10px;\n }\n }\n\n .content {\n float: right;\n font-weight: 700;\n margin: 10px;\n margin-left: 0;\n\n .title {\n line-height: 18px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n text-align: right;\n }\n\n .text {\n font-size: 16px;\n text-align: right;\n }\n\n .supplement {\n font-size: 12px;\n font-weight: lighter;\n text-align: right;\n }\n }\n}\n\n.panel {\n max-width: 1024px;\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n border-radius: 4px;\n}\n\n.log-filter {\n display: flex;\n flex-wrap: wrap;\n\n .item {\n margin-right: 10px;\n margin-bottom: 10px;\n\n .label {\n margin-right: 10px;\n font-size: 12px;\n }\n }\n}\n</style>\n"],"names":["_sfc_main","defineComponent","name","_hoisted_1","viewBox","xmlns","_hoisted_5","createElementVNode","fill","d","coin","_export_sfc","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","_hoisted_3","document","takeawayBox","tickets","isMobile","useIsMobile","isLoadingOverview","ref","cardList","reactive","type","title","value","supplement","icon","User","color","Document","Tickets","DataBoard","Coin","refreshCount","SuperOverviewApi","getCount","then","res","user","file","log","pv","compress","data","sum","recent","server","oss","size","today","uv","all","expired","disableDelete","clearExpiredCompressFile","setTimeout","ElMessage","success","logs","filterLogType","searchWord","logTypeList","label","pageSize","handleSizeChange","v","logSumCount","pageCount","computed","Math","ceil","pageCurrent","handlePageChange","idx","refreshLogs","debounce","getLogMsg","splice","length","push","watchEffect","showDetail","showData","jsonData","JSON","parse","e","handleCopyDetail","copyRes","exportLogData","body","map","date","ip","msg","formatDate","Date","tableToExcel","onMounted","id","getLogMsgDetail","stringify"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
System.register(["./index-legacy-BaUX-zxP.js","./el-loading-legacy-CbNNE-qk.js","./el-progress-legacy-B6EwNV6c.js","./el-form-item-legacy-CNxAgkUf.js","./tip-legacy-Cm2JPa4-.js","./index-legacy-BWGaTIeh.js","./el-dialog-legacy-DfEb6k1B.js","./index-legacy-3jO8hk9z.js","./index-legacy-Bziat01y.js","./isEqual-legacy-D_cb03Zv.js","./el-select-legacy-BFhy033s.js","./validator-legacy-xarmcLjs.js","./aria-legacy-B70JmEZA.js"],(function(e,a){"use strict";var l,t,n,i,s,o,u,d,r,c,p,v,f,m,g,h,y,x,k,w,b,_,z,j,N,$,C,E,T,U,I,L,S,F,O,M,D,P,V,A,G,J,R,W,q,B,H,K,Y,X,Z,Q,ee,ae,le,te,ne,ie,se;return{setters:[e=>{l=e.g,t=e.d,n=e.a,i=e.c,s=e.b,o=e.u,u=e.a1,d=e.Z,r=e.O,c=e.r,p=e.$,v=e.bt,f=e.o,m=e.aW,g=e.E,h=e.bf,y=e.i,x=e.j,k=e.w,w=e.F,b=e.C,_=e.t,z=e.a8,j=e.k,N=e.S,$=e.e,C=e.D,E=e.a9,T=e.a5,U=e.a3,I=e.aY,L=e.ag,S=e.bX,F=e.ae,O=e.aa,M=e.af,D=e.y,P=e.v,V=e.x,A=e.I,G=e.p,J=e.f,R=e.b0,W=e.s,q=e.ac,B=e.a_,H=e.P,K=e._},e=>{Y=e.v},e=>{X=e.a,Z=e.E},e=>{Q=e.E,ee=e.a},e=>{ae=e.T,le=e.E},e=>{te=e.I,ne=e.L},e=>{ie=e.u},e=>{se=e.E},null,null,null,null,null],execute:function(){var a=document.createElement("style");a.textContent='@charset "UTF-8";.task-panel[data-v-8a74d233] ul.el-upload-list{border:1px dashed #d4d4d4;padding:10px}.task-panel[data-v-8a74d233] ul.el-upload-list:before{content:"此处展示选择文件列表";font-size:12px;position:relative;bottom:4px}.task-panel[data-v-8a74d233] .el-upload-list__item-name{display:block;overflow:hidden;max-width:290px;text-overflow:ellipsis;word-break:keep-all}.task-panel[data-v-8a74d233] .is-ready .el-icon--close{display:block;color:#000}.task-panel[data-v-8a74d233]{background-color:#f3f6f8;padding-bottom:1rem;position:relative}.pc-nav[data-v-8a74d233]{background-color:#fff;display:flex;padding:10px;justify-content:space-between;align-items:center}.pc-nav .exit[data-v-8a74d233]{cursor:pointer}.pc-nav .nav[data-v-8a74d233]{display:flex}.pc-nav .nav nav[data-v-8a74d233]{display:flex;align-items:center}.pc-nav .nav nav .nav-item[data-v-8a74d233]{font-size:1rem;color:#595959;padding:10px;cursor:pointer}.pc-nav .nav nav .nav-item.active[data-v-8a74d233]{color:#409eff!important;font-weight:600}.pc-nav .nav .exit[data-v-8a74d233]{color:#595959}.pc-nav .logo[data-v-8a74d233]{width:180px;margin:0 10px}.pc-nav .logo img[data-v-8a74d233]{height:40px}.panel[data-v-8a74d233]{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-8a74d233]{text-align:center}.panel .ddl[data-v-8a74d233]{margin-top:10px;color:#919191;font-size:14px}.panel .infos[data-v-8a74d233]{max-width:460px;margin:auto;overflow:hidden}.panel .infos[data-v-8a74d233] div.el-form-item>label{font-weight:700}.panel .infos[data-v-8a74d233] div.el-form-item>label:before{content:"* ";color:red}.withdraw[data-v-8a74d233]{text-align:right}.tip-wrapper[data-v-8a74d233]{line-height:20px;text-align:left;word-break:break-all;overflow:hidden;padding:0 20px;color:#e6a23c;max-width:320px;font-size:14px}\n',document.head.appendChild(a);const oe=t({name:"UploadFilled"}),ue={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},de=[s("path",{fill:"currentColor",d:"M544 864V672h128L512 480 352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.808 239.808 0 0 1 512 192a239.872 239.872 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6H544z"},null,-1)];var re=l(oe,[["render",function(e,a,l,t,s,o){return n(),i("svg",ue,de)}]]);const ce=e=>(G("data-v-8a74d233"),e=e(),J(),e),pe={class:"task-panel"},ve={class:"pc-nav"},fe={class:"nav"},me={class:"logo"},ge=ce((()=>s("img",{style:{height:"40px",width:"170px"},src:"https://img.cdn.sugarat.top/easypicker/EasyPicker.png",alt:"logo"},null,-1))),he=["onClick"],ye={key:0,"element-loading-text":"Loading...",class:"panel tc"},xe={class:"name"},ke={key:0,style:{color:"red"}},we={class:"tip-wrapper"},be={class:"ddl"},_e={key:0},ze={key:4},je={class:"infos"},Ne={key:0},$e={class:"infos"},Ce=ce((()=>s("div",{class:"el-upload__text"},[$(" 将文件拖于此处 or "),s("em",null,"直接选择文件")],-1))),Ee={class:"p10"},Te={class:"p10"},Ue={class:"p10 option-tips"},Ie={style:{color:"red"}},Le={style:{color:"red"}},Se=ce((()=>s("br",null,null,-1))),Fe=ce((()=>s("br",null,null,-1))),Oe=ce((()=>s("strong",null,"查询提交情况,需填写和提交时一样的表单信息",-1))),Me=ce((()=>s("br",null,null,-1))),De=ce((()=>s("strong",null,"选择大文件后需要等待一会儿才展示处理",-1))),Pe=ce((()=>s("br",null,null,-1))),Ve={class:"withdraw"},Ae={key:1,class:"panel tc"},Ge={class:"name"},Je={style:{"padding-top":"20px"}};e("default",K(t({__name:"index",setup(e){const a=ie(),l=o(),t=u(),G=d([{title:"我也要收集",path:"https://docs.ep.sugarat.top/"}]),J=d({name:"",category:""}),K=d({bindField:""}),oe=r((()=>R(K.format))),ue=c(""),de=c(0),ce=r((()=>de.value<=0)),Re=r((()=>{let e=~~(de.value/1e3),a=~~(e/3600);const l=~~(a/24);a%=24;const t=~~(e%3600/60);return e%=60,`剩余${l}天${a}时${t}分${e}秒`}));function We(e=!0){if(K?.ddl){const e=new Date(K.ddl);de.value=e.getTime()-Date.now()}else de.value=0;e&&setTimeout((()=>{We()}),1e3)}const qe=r((()=>{if(K?.ddl){const e=new Date(K.ddl);return W(e)}return""})),Be=d([]),He=c([]),Ke=c(),Ye=r((()=>He.value.filter((e=>"uploading"===e.status)).length>0)),Xe=e=>"uploading"!==e.status&&"success"!==e.status||se.confirm("不影响已经上传成功的,正在上传的将取消上传","确定从列表移除文件吗?").then((()=>("uploading"===e.status&&(g.info(`取消${e.name}的上传`),e.subscription.unsubscribe()),!0))).catch((()=>!1)),Ze=r((()=>Be.every((e=>e.value)))),Qe=r((()=>K.bindField.trim()||"姓名")),ea=r((()=>Be.find((e=>e.text===Qe.value)))),aa=r((()=>K.people&&!ea.value)),la=d({peopleName:""});function ta(e,a,l){if(!a){const e=`请输入${Qe.value}`;return l(new Error(e)),void g.error(e)}I.checkPeopleIsExist(ue.value,a).then((e=>{e.data.exist||g.error("你不在此次提交名单中,如有疑问请联系管理员"),l(e.data.exist?void 0:new Error("你不在此次提交名单中,如有疑问请联系管理员"))}))}const na=c(),ia=d({peopleName:[{validator:ta,trigger:"blur"}]});function sa(){if(ea.value){const e=Be.find((e=>e.text===Qe.value))?.value;return la.peopleName=e||"",new Promise((a=>{ta(0,e,a)})).then((e=>!e))}return na.value.validate((e=>e))}async function oa(){if(Ze.value){if(K.people&&!(await sa()))return;!function(){const e=He.value;for(const a of e)if(a.md5){if("ready"===a.status){a.status="uploading";let{name:e}=a;const l=e;K.rewrite&&(e=Be.map((e=>e.value)).join(oe.value.splitChar||"-")+L(e)),e=q(e);const t=`easypicker2/${ue.value}/${a.md5}/${e}`;F.getUploadToken().then((n=>{B(n.data.token,a.raw,t,{success(t){const{fsize:n}=t;F.addFile({originName:l,name:e,taskKey:ue.value,taskName:J.name,size:n,hash:a.md5,info:JSON.stringify(Be),people:la.peopleName}).then((()=>{a.status="success",g.success(`文件:${a.name}提交成功`),K.people&&I.updatePeopleStatus(ue.value,e,la.peopleName,a.md5)}))},process(e,l,t){a.percentage=Math.floor(e),a.subscription=t}})}))}}else g.info(`文件(${a.name})的唯一指纹还在计算中,再等待一会儿再点击上传`),setTimeout((()=>{g.info("文件越大计算时间越长(1G通常需要20s)")}),100)}()}else g.warning("请先完成必要信息的填写")}const ua=r((()=>{for(const e of He.value)if("ready"===e.status)return!0;return!1})),da=r((()=>{for(const e of He.value)if(["success","ready"].includes(e.status))return!0;return!1})),ra=c(0);function ca(e){const{name:a}=e;if(oe.value.format.length&&oe.value.status){const l=L(a);if(!oe.value.format.find((e=>l.toLowerCase().endsWith(e))))return g.error(`${a} 格式不符合要求`),void Ke.value.handleRemove(e)}if(oe.value.size&&oe.value.size<e.size)return g.error(`${a} 大小${T(e.size)} 不符合要求`),void Ke.value.handleRemove(e);ra.value+=1,S(e.raw).then((a=>{e.md5=a,ra.value-=1}))}const pa=r((()=>oe.value.limit||10));function va(){g.warning(`一次提交最多只能选择${pa.value}个文件,请移除已经上传成功的或刷新页面`)}const fa=c(!1),ma=c("");function ga(){F.getTemplateUrl(K.template,ue.value).then((e=>{fa.value=!0;const{link:a}=e.data;ma.value=a,O(a,K.template)})).catch((()=>{g.warning("文件已从服务器上移除,请联系管理员重新上传")}))}const ha=c(!1);async function ya(){if(Ze.value){if(K.people&&!(await sa()))return;!function(){const e=He.value;for(const a of e)if(a.md5){if(!["fail","uploading"].includes(a.status)){let{name:e}=a;K.rewrite&&(e=Be.map((e=>e.value)).join(oe.value.splitChar||"-")+L(e)),F.withdrawFile({taskKey:ue.value,taskName:J.name,filename:e,hash:a.md5,info:JSON.stringify(Be),peopleName:la.peopleName}).then((()=>{g.success(`文件:${a.name}撤回成功`),a.name+=" - (已撤回 ✅ )",a.status="fail"})).catch((()=>{g.error(`撤回失败: 没有文件:${a.name}对应提交记录`)}))}}else g.info(`文件(${a.name})的唯一指纹还在计算中,再等待一会儿再点击上传`),setTimeout((()=>{g.info("文件越大计算时间越长(1G通常需要20s)")}),100)}()}else g.warning("请先完成必要信息的填写")}async function xa(){if(Ze.value){if(K.people&&!(await sa()))return;F.checkSubmitStatus(ue.value,Be,la.peopleName).then((e=>{e.data.isSubmit?g.success("已经提交过啦"):g.warning("还未提交过哟")}))}else g.warning("请先完成必要信息的填写,需和提交时信息完全一致")}const ka=c(!1),wa=c(!1);function ba(e=[],a=[]){return e.length===a.length&&e.every(((e,l)=>e.type===a[l].type&&e.text===a[l].text&&ba(e.children,a[l].children)))}function _a(e=!1){m.getTaskMoreInfo(ue.value).then((a=>{Object.assign(K,a.data),ba(Be,M(K.info))||(Be.splice(0,Be.length),Be.push(...M(K.info)),e&&g.success("表单信息有更新")),We(!1),ka.value=!1}))}function za(){wa.value=!0}function ja(){wa.value&&!Ye.value&&(wa.value=!1,_a(!0))}const Na=r((()=>ce.value?qe.value:qe.value+Re.value)),$a=d({text:"",imgs:[]}),Ca=c([]);p((()=>K.tip),(()=>{try{const e=JSON.parse(K.tip);$a.imgs=e.imgs,$a.text=e.text||"",Ca.value=$a.imgs.map((e=>({...e,url:"https://img.cdn.sugarat.top/mdImg/MTY3NzkxMDI1NTU1Nw==20140524124237518.gif"}))),Ca.value.length&&H.getTipImageUrl(ue.value,Ca.value.map((e=>({uid:e.uid,name:e.name})))).then((e=>{e.data.forEach(((e,a)=>{Ca.value[a].url=e.cover,Object.assign(Ca.value[a],{preview:e.preview})}))}))}catch{$a.text="",$a.imgs=[],Ca.value=[]}}));const Ea=v("disabledUpload",!1);return f((()=>{ue.value=t.params.key,ue.value&&(ka.value=!0,m.getTaskInfo(ue.value).then((e=>{Object.assign(J,e.data),Ea.value=!!e.data.limitUpload,Ea.value&&se.alert("任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间")})).catch((e=>{4001===e.code&&(g.error("任务不存在"),ue.value="",J.name="任务不存在")})),_a(),We()),window.addEventListener("blur",za),window.addEventListener("focus",ja)})),h((()=>{window.removeEventListener("blur",za),window.removeEventListener("focus",ja)})),(e,t)=>{const o=y("router-link"),u=D,d=le,r=X,c=P,p=Q,v=ee,f=V,m=A,g=Z,h=Y;return n(),i("div",pe,[s("div",ve,[s("div",fe,[s("div",me,[x(o,{to:"/"},{default:k((()=>[ge])),_:1})]),s("nav",null,[(n(!0),i(w,null,b(G,((e,a)=>(n(),i("div",{key:a,class:"nav-item",onClick:e=>function(e){G[e].path.startsWith("http")?window.location.href=G[e].path:l.push({path:G[e].path})}(a)},_(e.title),9,he)))),128))])])]),ue.value?z((n(),i("div",ye,[s("h1",xe,_(J.name),1),j(Ea)?(n(),i("h2",ke," 任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间 ")):N("",!0),!$a.text||qe.value&&ce.value?N("",!0):(n(),i(w,{key:1},[x(u,null,{default:k((()=>[$("⚠️ 注意事项 ⚠️")])),_:1}),x(ae,null,{default:k((()=>[s("div",we,[(n(!0),i(w,null,b($a.text.split("\n"),((e,a)=>(n(),i("p",{key:a},_(e.replace(/\s/g," ")),1)))),128))])])),_:1})],64)),!Ca.value.length||qe.value&&ce.value?N("",!0):(n(!0),i(w,{key:2},b(Ca.value,((e,a)=>(n(),C(d,{key:e.uid,"hide-on-click-modal":"",style:{width:"100px",height:"100px",margin:"10px"},src:e.url,"zoom-rate":1.2,"preview-src-list":Ca.value.map((e=>e.preview)),"initial-index":a,fit:"contain"},null,8,["src","preview-src-list","initial-index"])))),128)),qe.value?(n(),i(w,{key:3},[x(u,null,{default:k((()=>[$("截止时间")])),_:1}),s("h2",be,_(Na.value),1),ce.value?(n(),i("div",_e,[x(r,{description:"已经结束啦!"})])):N("",!0)],64)):N("",!0),qe.value&&ce.value?N("",!0):(n(),i("div",ze,[x(u,null,{default:k((()=>[$("必要信息填写")])),_:1}),s("div",je,[z(s("div",null,[x(ae,null,{default:k((()=>[$("“"+_(Qe.value)+"”在参与名单里才能正常提交",1)])),_:1})],512),[[E,K.people]]),aa.value?(n(),i("div",Ne,[s("div",$e,[x(v,{ref_key:"validModalRef",ref:na,rules:ia,"status-icon":"",model:la,disabled:Ye.value,"label-position":"top"},{default:k((()=>[x(p,{prop:"peopleName",label:Qe.value},{default:k((()=>[x(c,{modelValue:la.peopleName,"onUpdate:modelValue":t[0]||(t[0]=e=>la.peopleName=e),maxlength:14,clearable:"","show-word-limit":"",placeholder:`请输入 ${Qe.value}`},null,8,["modelValue","placeholder"])])),_:1},8,["label"])])),_:1},8,["rules","model","disabled"])])])):N("",!0),x(te,{infos:Be,disabled:Ye.value},null,8,["infos","disabled"])]),x(g,{ref_key:"fileUpload",ref:Ke,"file-list":He.value,"onUpdate:fileList":t[1]||(t[1]=e=>He.value=e),style:{"max-width":"400px",margin:"0 auto"},drag:!j(a),action:"","on-change":ca,"before-remove":Xe,"on-exceed":va,"auto-upload":!1,multiple:"",limit:pa.value},{tip:k((()=>[z(s("div",Ee,[x(ae,null,{default:k((()=>[$(" 还有 "+_(ra.value)+" 个文件正在生成校验信息,请稍等(1G通常需要20s) ",1)])),_:1})],512),[[E,!!ra.value]])])),default:k((()=>[j(a)?(n(),C(f,{key:0,type:"primary"},{default:k((()=>[$(" 选择文件 ")])),_:1})):(n(),i(w,{key:1},[x(m,{class:"el-icon--upload"},{default:k((()=>[x(j(re))])),_:1}),Ce],64))])),_:1},8,["file-list","drag","limit"]),s("div",Te,[ha.value?(n(),C(f,{key:0,size:"default",type:"warning",disabled:!da.value||!!ra.value,onClick:ya},{default:k((()=>[$(" 一键撤回 ")])),_:1},8,["disabled"])):j(Ea)?N("",!0):(n(),C(f,{key:1,size:"default",type:"success",disabled:!ua.value||!!ra.value,onClick:oa},{default:k((()=>[$(" 提交文件 ")])),_:1},8,["disabled"])),x(f,{size:"default",onClick:xa},{default:k((()=>[$(" 查询提交情况 ")])),_:1})]),s("div",Ue,[oe.value.status&&oe.value.format.length?(n(),C(ae,{key:0},{default:k((()=>[$(" 限制格式为: "),s("span",Ie,_(oe.value.format.join(", ")),1)])),_:1})):N("",!0),oe.value.size?(n(),C(ae,{key:1},{default:k((()=>[$(" 限制文件大小不超过: "),s("span",Le,_(j(T)(oe.value.size)),1)])),_:1})):N("",!0),ha.value?(n(),C(ae,{key:2},{default:k((()=>[$(" ① 须保证选择的文件与提交时的文件一致"),Se,$(" ② 填写表单信息一致 "),Fe,$(" ③ 完全一模一样的文件的提交记录(内容md5+命名),将会一次性全部撤回 ")])),_:1})):(n(),i(w,{key:3},[x(ae,null,{default:k((()=>[Oe])),_:1}),x(ae,null,{default:k((()=>[$(" ① 选择完文件,点击 ”提交文件“即可 "),Me,$(" ② "),De,K.template&&!j(Ea)?(n(),i(w,{key:0},[Pe,$(" ③ "),s("strong",null,[x(f,{type:"primary",text:"",style:{color:"#85ce61"},size:"small",onClick:ga},{default:k((()=>[$("右下角可 “查看提交示例” ")])),_:1})])],64)):N("",!0)])),_:1})],64))]),s("div",Ve,[K.template&&!j(Ea)?(n(),C(f,{key:0,type:"primary",text:"",style:{color:"#85ce61"},size:"small",onClick:ga},{default:k((()=>[$(" 查看提交示例 ")])),_:1})):N("",!0),ha.value?(n(),C(f,{key:1,size:"small",type:"primary",text:"",onClick:t[2]||(t[2]=e=>ha.value=!1)},{default:k((()=>[$(" 正常提交 ")])),_:1})):(n(),C(f,{key:2,size:"small",type:"primary",text:"",onClick:t[3]||(t[3]=e=>ha.value=!0)},{default:k((()=>[$(" 我要撤回 ")])),_:1}))])]))])),[[h,ka.value]]):(n(),i("div",Ae,[s("h1",Ge,_(J.name),1)])),x(ne,{value:fa.value,"onUpdate:value":t[4]||(t[4]=e=>fa.value=e),title:"示例文件下载链接",link:ma.value},null,8,["value","link"]),s("div",Je,[x(U,{type:"task"})])])}}}),[["__scopeId","data-v-8a74d233"]]))}}}));
|
|
2
|
+
//# sourceMappingURL=index-legacy-GmcnXr6o.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-legacy-GmcnXr6o.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/upload-filled.mjs","../../src/pages/task/index.vue"],"sourcesContent":["import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"UploadFilled\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M544 864V672h128L512 480 352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.808 239.808 0 0 1 512 192a239.872 239.872 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6H544z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar uploadFilled = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { uploadFilled as default };\n","<script lang=\"ts\" setup>\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport type { FormInstance, UploadInstance, UploadUserFile } from 'element-plus'\nimport { computed, onMounted, onUnmounted, reactive, ref, watch } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport HomeFooter from '@components/HomeFooter/index.vue'\nimport LinkDialog from '@components/linkDialog.vue'\nimport { UploadFilled } from '@element-plus/icons-vue'\nimport { useStore } from 'vuex'\nimport { useLocalStorage } from '@vueuse/core'\nimport Tip from '../dashboard/tasks/components/infoPanel/tip.vue'\nimport {\n formatDate,\n formatSize,\n getFileMd5Hash,\n getFileSuffix,\n normalizeFileName,\n parseFileFormat,\n parseInfo,\n} from '@/utils/stringUtil'\nimport { downLoadByUrl, qiniuUpload } from '@/utils/networkUtil'\nimport { FileApi, PeopleApi, PublicApi, TaskApi } from '@/apis'\nimport InfosForm from '@/components/InfosForm/index.vue'\nimport { useIsMobile } from '@/composables'\n\nconst isMobile = useIsMobile()\n// 顶部导航\nconst $router = useRouter()\nconst $route = useRoute()\nconst pcNavs = reactive([\n {\n title: '我也要收集',\n path: 'https://docs.ep.sugarat.top/',\n },\n])\nfunction handleNav(idx: number) {\n if (pcNavs[idx].path.startsWith('http')) {\n window.location.href = pcNavs[idx].path\n return\n }\n $router.push({\n path: pcNavs[idx].path,\n })\n}\n\n// 任务基本信息展示\nconst taskInfo = reactive<TaskApiTypes.TaskInfo>({\n name: '',\n category: '',\n})\nconst taskMoreInfo = reactive<Partial<TaskApiTypes.TaskInfo>>({\n bindField: '',\n})\nconst formatData = computed(() => parseFileFormat(taskMoreInfo.format))\nconst k = ref('')\n\n// 用于展示截止日期\nconst waitTime = ref(0)\n// 判断是否结束\nconst isOver = computed(() => waitTime.value <= 0)\nconst waitTimeStr = computed(() => {\n let seconds = ~~(waitTime.value / 1000)\n let hour = ~~(seconds / (60 * 60))\n const day = ~~(hour / 24)\n hour %= 24\n const minute = ~~((seconds % 3600) / 60)\n seconds %= 60\n return `剩余${day}天${hour}时${minute}分${seconds}秒`\n})\nfunction refreshWaitTime(loop = true) {\n if (taskMoreInfo?.ddl) {\n const date = new Date(taskMoreInfo.ddl)\n waitTime.value = date.getTime() - Date.now()\n }\n else {\n waitTime.value = 0\n }\n if (loop) {\n setTimeout(() => {\n refreshWaitTime()\n }, 1000)\n }\n}\nconst ddlStr = computed(() => {\n if (taskMoreInfo?.ddl) {\n const date = new Date(taskMoreInfo.ddl)\n return formatDate(date)\n }\n return ''\n})\n\n// 必填信息\nconst infos = reactive<InfoItem[]>([])\n\n// 文件上传部分\n\n// 文件上传\nconst fileList = ref<(UploadUserFile & { md5: string, subscription: any })[]>(\n [],\n)\nconst fileUpload = ref<UploadInstance>()\nconst disableForm = computed(\n () => fileList.value.filter(item => item.status === 'uploading').length > 0,\n)\nconst handleRemoveFile: any = (file: any) => {\n if (file.status === 'uploading' || file.status === 'success') {\n return ElMessageBox.confirm(\n '不影响已经上传成功的,正在上传的将取消上传',\n '确定从列表移除文件吗?',\n )\n .then(() => {\n if (file.status === 'uploading') {\n ElMessage.info(`取消${file.name}的上传`)\n // 取消上传\n file.subscription.unsubscribe() // 取消上传\n }\n return true\n })\n .catch(() => false)\n }\n return true\n}\n\n// 校验表单填写\nconst isWriteFinish = computed(() => infos.every(item => item.value))\n// 提交文件\n\nconst limitBindField = computed(() => {\n return taskMoreInfo.bindField.trim() || '姓名'\n})\n\n// 身份核验表单\nconst isSameFieldName = computed(() =>\n infos.find(v => v.text === limitBindField.value),\n)\nconst showValidForm = computed(\n () => taskMoreInfo.people && !isSameFieldName.value,\n)\nconst validModal = reactive({\n peopleName: '',\n})\n\nfunction validatePeopleName(rule: any, value: any, callback: any) {\n if (!value) {\n const message = `请输入${limitBindField.value}`\n callback(new Error(message))\n ElMessage.error(message)\n return\n }\n // 异步校验\n PeopleApi.checkPeopleIsExist(k.value, value).then((res) => {\n if (!res.data.exist) {\n ElMessage.error('你不在此次提交名单中,如有疑问请联系管理员')\n }\n callback(\n res.data.exist\n ? undefined\n : new Error('你不在此次提交名单中,如有疑问请联系管理员'),\n )\n })\n}\n\nconst validModalRef = ref<FormInstance>()\nconst validModalRules = reactive({\n peopleName: [{ validator: validatePeopleName, trigger: 'blur' }],\n})\nfunction confirmPeopleName() {\n // 处理表单必填项含有 limitBindField 的情况\n if (isSameFieldName.value) {\n const value = infos.find(v => v.text === limitBindField.value)?.value\n validModal.peopleName = value || ''\n return new Promise((resolve) => {\n validatePeopleName(null, value, resolve)\n }).then(v => !v)\n }\n return validModalRef.value.validate((isValid: boolean) => isValid)\n}\n\nfunction startUpload() {\n const uploadFiles = fileList.value\n for (const file of uploadFiles) {\n if (!file.md5) {\n ElMessage.info(\n `文件(${file.name})的唯一指纹还在计算中,再等待一会儿再点击上传`,\n )\n setTimeout(() => {\n ElMessage.info('文件越大计算时间越长(1G通常需要20s)')\n }, 100)\n }\n else if (file.status === 'ready') {\n // 开始上传\n file.status = 'uploading'\n let { name } = file\n const originName = name\n // 如果开启了自动重命名,这里重命名一下\n if (taskMoreInfo.rewrite) {\n name\n = infos.map(v => v.value).join(formatData.value.splitChar || '-')\n + getFileSuffix(name)\n }\n // 替换不合法的字符\n name = normalizeFileName(name)\n const key = `easypicker2/${k.value}/${file.md5}/${name}`\n\n FileApi.getUploadToken().then((res) => {\n qiniuUpload(res.data.token, file.raw, key, {\n success(data: any) {\n const { fsize } = data\n FileApi.addFile({\n originName,\n name,\n taskKey: k.value,\n taskName: taskInfo.name,\n size: fsize,\n hash: file.md5,\n info: JSON.stringify(infos),\n people: validModal.peopleName,\n }).then(() => {\n file.status = 'success'\n ElMessage.success(`文件:${file.name}提交成功`)\n if (taskMoreInfo.people) {\n // 无感知更新一下\n PeopleApi.updatePeopleStatus(\n k.value,\n name,\n validModal.peopleName,\n file.md5,\n )\n }\n })\n },\n process(per: number, data: any, subscription: any) {\n file.percentage = Math.floor(per)\n // 挂载取消上传的方法\n file.subscription = subscription\n },\n })\n })\n }\n }\n}\n\nasync function submitUpload() {\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写')\n return\n }\n\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n startUpload()\n}\n\n// 是否允许上传\nconst allowUpload = computed(() => {\n for (const file of fileList.value) {\n if (file.status === 'ready') {\n return true\n }\n }\n return false\n})\n\n// 是否允许撤回\nconst allowWithdraw = computed(() => {\n for (const file of fileList.value) {\n if (['success', 'ready'].includes(file.status)) {\n return true\n }\n }\n return false\n})\n\n// 添加文件\n// 正在计算MD5值的文件个数\nconst calculateMd5Count = ref(0)\nfunction handleChangeFile(file: any) {\n // 校验文件后缀名\n const { name } = file\n if (formatData.value.format.length && formatData.value.status) {\n const suffix = getFileSuffix(name)\n if (\n !formatData.value.format.find(v => suffix.toLowerCase().endsWith(v))\n ) {\n ElMessage.error(`${name} 格式不符合要求`)\n fileUpload.value.handleRemove(file)\n return\n }\n }\n\n // 校验文件大小\n if (formatData.value.size && formatData.value.size < file.size) {\n ElMessage.error(`${name} 大小${formatSize(file.size)} 不符合要求`)\n fileUpload.value.handleRemove(file)\n return\n }\n\n calculateMd5Count.value += 1\n // 计算md5 hash\n getFileMd5Hash(file.raw).then((str) => {\n file.md5 = str\n calculateMd5Count.value -= 1\n })\n}\n\nconst limitUploadCount = computed(() => formatData.value.limit || 10)\nfunction handleExceed() {\n ElMessage.warning(\n `一次提交最多只能选择${limitUploadCount.value}个文件,请移除已经上传成功的或刷新页面`,\n )\n}\nconst showLinkModel = ref(false)\nconst templateLink = ref('')\nfunction runWithdraw() {\n const uploadFiles = fileList.value\n for (const file of uploadFiles) {\n if (!file.md5) {\n ElMessage.info(\n `文件(${file.name})的唯一指纹还在计算中,再等待一会儿再点击上传`,\n )\n setTimeout(() => {\n ElMessage.info('文件越大计算时间越长(1G通常需要20s)')\n }, 100)\n }\n else if (!['fail', 'uploading'].includes(file.status)) {\n // 准备开始撤回\n let { name } = file\n\n // 如果开启了自动重命名,这里重命名一下\n if (taskMoreInfo.rewrite) {\n name\n = infos.map(v => v.value).join(formatData.value.splitChar || '-')\n + getFileSuffix(name)\n }\n\n FileApi.withdrawFile({\n taskKey: k.value,\n taskName: taskInfo.name,\n filename: name,\n hash: file.md5,\n info: JSON.stringify(infos),\n peopleName: validModal.peopleName,\n })\n .then(() => {\n ElMessage.success(`文件:${file.name}撤回成功`)\n file.name += ' - (已撤回 ✅ )'\n file.status = 'fail'\n })\n .catch(() => {\n ElMessage.error(`撤回失败: 没有文件:${file.name}对应提交记录`)\n })\n }\n }\n}\nfunction downloadTemplate() {\n FileApi.getTemplateUrl(taskMoreInfo.template, k.value)\n .then((res) => {\n showLinkModel.value = true\n const { link } = res.data\n templateLink.value = link\n downLoadByUrl(link, taskMoreInfo.template)\n })\n .catch(() => {\n ElMessage.warning('文件已从服务器上移除,请联系管理员重新上传')\n })\n}\n\n// 撤回相关逻辑\nconst isWithdraw = ref(false)\nasync function startWithdraw() {\n // 校验表单填写\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写')\n return\n }\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n runWithdraw()\n}\n\n// 查询提交情况\nasync function checkSubmitStatus() {\n // 校验表单填写\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写,需和提交时信息完全一致')\n return\n }\n // 卡控人员限制\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n FileApi.checkSubmitStatus(k.value, infos, validModal.peopleName).then(\n (res) => {\n if (res.data.isSubmit) {\n ElMessage.success('已经提交过啦')\n }\n else {\n ElMessage.warning('还未提交过哟')\n }\n },\n )\n}\nconst isLoadingData = ref(false)\nconst readyRefresh = ref(false)\nfunction isEqualInfos(a: InfoItem[] = [], b: InfoItem[] = []) {\n if (a.length !== b.length) {\n return false\n }\n return a.every(\n (v, i) =>\n v.type === b[i].type\n && v.text === b[i].text\n && isEqualInfos(v.children, b[i].children),\n )\n}\nfunction refreshTaskMoreInfo(hot = false) {\n TaskApi.getTaskMoreInfo(k.value).then((res) => {\n Object.assign(taskMoreInfo, res.data)\n if (!isEqualInfos(infos, parseInfo(taskMoreInfo.info))) {\n infos.splice(0, infos.length)\n infos.push(...parseInfo(taskMoreInfo.info))\n if (hot) {\n ElMessage.success('表单信息有更新')\n }\n }\n refreshWaitTime(false)\n isLoadingData.value = false\n })\n}\nfunction handleBlur() {\n readyRefresh.value = true\n}\nfunction handleFocus() {\n if (readyRefresh.value && !disableForm.value) {\n readyRefresh.value = false\n refreshTaskMoreInfo(true)\n }\n}\n\n// 展示的时间提示文案\nconst timeInfo = computed(() => {\n if (!isOver.value) {\n return ddlStr.value + waitTimeStr.value\n }\n return ddlStr.value\n})\n\n// tipImage\nconst tipData = reactive<{\n text: string\n imgs: {\n uid: number\n name: string\n }[]\n}>({\n text: '',\n imgs: [],\n})\nconst imageList = ref<\n { name: string, uid: number, preview?: string, url: string }[]\n>([])\n\nwatch(\n () => taskMoreInfo.tip,\n () => {\n // 初始化\n try {\n const parseData = JSON.parse(taskMoreInfo.tip)\n tipData.imgs = parseData.imgs\n tipData.text = parseData.text || ''\n imageList.value = tipData.imgs.map((v) => {\n return {\n ...v,\n url: 'https://img.cdn.sugarat.top/mdImg/MTY3NzkxMDI1NTU1Nw==20140524124237518.gif',\n }\n })\n if (imageList.value.length) {\n // 异步填充url\n PublicApi.getTipImageUrl(\n k.value,\n imageList.value.map(v => ({\n uid: v.uid,\n name: v.name,\n })),\n ).then((v) => {\n v.data.forEach((url, idx) => {\n imageList.value[idx].url = url.cover\n Object.assign(imageList.value[idx], {\n preview: url.preview,\n })\n })\n })\n }\n }\n catch {\n tipData.text = ''\n tipData.imgs = []\n imageList.value = []\n }\n },\n)\n\n// 禁用上传\nconst disabledUpload = useLocalStorage('disabledUpload', false)\n\nonMounted(() => {\n k.value = $route.params.key as string\n if (k.value) {\n isLoadingData.value = true\n TaskApi.getTaskInfo(k.value)\n .then((res) => {\n Object.assign(taskInfo, res.data)\n disabledUpload.value = !!res.data.limitUpload\n if (disabledUpload.value) {\n ElMessageBox.alert(\n '任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间',\n )\n }\n })\n .catch((err) => {\n if (err.code === 4001) {\n ElMessage.error('任务不存在')\n k.value = ''\n taskInfo.name = '任务不存在'\n }\n })\n refreshTaskMoreInfo()\n refreshWaitTime()\n }\n // 页面隐藏\n window.addEventListener('blur', handleBlur)\n\n // 页面展示\n window.addEventListener('focus', handleFocus)\n})\n\nonUnmounted(() => {\n // 页面隐藏\n window.removeEventListener('blur', handleBlur)\n // 页面展示\n window.removeEventListener('focus', handleFocus)\n})\n</script>\n\n<template>\n <div class=\"task-panel\">\n <div class=\"pc-nav\">\n <div class=\"nav\">\n <!-- LOGO -->\n <div class=\"logo\">\n <router-link to=\"/\">\n <img\n style=\"height: 40px; width: 170px\"\n src=\"https://img.cdn.sugarat.top/easypicker/EasyPicker.png\"\n alt=\"logo\"\n >\n </router-link>\n </div>\n <nav>\n <div\n v-for=\"(n, idx) in pcNavs\"\n :key=\"idx\"\n class=\"nav-item\"\n @click=\"handleNav(idx)\"\n >\n {{ n.title }}\n </div>\n </nav>\n </div>\n </div>\n <!-- 有效 -->\n <div\n v-if=\"k\"\n v-loading=\"isLoadingData\"\n element-loading-text=\"Loading...\"\n class=\"panel tc\"\n >\n <!-- 任务名 -->\n <h1 class=\"name\">\n {{ taskInfo.name }}\n </h1>\n <h2 v-if=\"disabledUpload\" style=\"color: red\">\n 任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间\n </h2>\n <!-- 提示信息 -->\n <!-- 时间截止了也不再展示 -->\n <template v-if=\"tipData.text && (ddlStr ? !isOver : true)\">\n <el-divider>⚠️ 注意事项 ⚠️</el-divider>\n <Tip>\n <div class=\"tip-wrapper\">\n <p v-for=\"(t, i) in tipData.text.split('\\n')\" :key=\"i\">\n {{ t.replace(/\\s/g, ' ') }}\n </p>\n </div>\n </Tip>\n </template>\n <template v-if=\"imageList.length && (ddlStr ? !isOver : true)\">\n <el-image\n v-for=\"(img, idx) in imageList\"\n :key=\"img.uid\"\n hide-on-click-modal\n style=\"width: 100px; height: 100px; margin: 10px\"\n :src=\"img.url\"\n :zoom-rate=\"1.2\"\n :preview-src-list=\"imageList.map((v) => v.preview)\"\n :initial-index=\"idx\"\n fit=\"contain\"\n />\n </template>\n <!-- 截止时间字符串 -->\n <template v-if=\"ddlStr\">\n <el-divider>截止时间</el-divider>\n <h2 class=\"ddl\">\n {{ timeInfo }}\n </h2>\n <div v-if=\"isOver\">\n <el-empty description=\"已经结束啦!\" />\n </div>\n </template>\n <!-- 未设置ddl 或者 设置了还未结束 -->\n <div v-if=\"!ddlStr || !isOver\">\n <el-divider>必要信息填写</el-divider>\n <div class=\"infos\">\n <div v-show=\"taskMoreInfo.people\">\n <Tip>“{{ limitBindField }}”在参与名单里才能正常提交</Tip>\n </div>\n <div v-if=\"showValidForm\">\n <div class=\"infos\">\n <el-form\n ref=\"validModalRef\"\n :rules=\"validModalRules\"\n status-icon\n :model=\"validModal\"\n :disabled=\"disableForm\"\n label-position=\"top\"\n >\n <el-form-item prop=\"peopleName\" :label=\"limitBindField\">\n <el-input\n v-model=\"validModal.peopleName\"\n :maxlength=\"14\"\n clearable\n show-word-limit\n :placeholder=\"`请输入 ${limitBindField}`\"\n />\n </el-form-item>\n </el-form>\n </div>\n </div>\n <InfosForm :infos=\"infos\" :disabled=\"disableForm\" />\n </div>\n <el-upload\n ref=\"fileUpload\"\n v-model:file-list=\"fileList\"\n style=\"max-width: 400px; margin: 0 auto\"\n :drag=\"!isMobile\"\n action=\"\"\n :on-change=\"handleChangeFile\"\n :before-remove=\"handleRemoveFile\"\n :on-exceed=\"handleExceed\"\n :auto-upload=\"false\"\n multiple\n :limit=\"limitUploadCount\"\n >\n <el-button v-if=\"isMobile\" type=\"primary\">\n 选择文件\n </el-button>\n <template v-else>\n <el-icon class=\"el-icon--upload\">\n <UploadFilled />\n </el-icon>\n <div class=\"el-upload__text\">\n 将文件拖于此处 or <em>直接选择文件</em>\n </div>\n </template>\n <template #tip>\n <div v-show=\"!!calculateMd5Count\" class=\"p10\">\n <Tip>\n 还有\n {{ calculateMd5Count }}\n 个文件正在生成校验信息,请稍等(1G通常需要20s)\n </Tip>\n </div>\n </template>\n </el-upload>\n <div class=\"p10\">\n <el-button\n v-if=\"isWithdraw\"\n size=\"default\"\n type=\"warning\"\n :disabled=\"!allowWithdraw || !!calculateMd5Count\"\n @click=\"startWithdraw\"\n >\n 一键撤回\n </el-button>\n <el-button\n v-else-if=\"!disabledUpload\"\n size=\"default\"\n type=\"success\"\n :disabled=\"!allowUpload || !!calculateMd5Count\"\n @click=\"submitUpload\"\n >\n 提交文件\n </el-button>\n <el-button size=\"default\" @click=\"checkSubmitStatus\">\n 查询提交情况\n </el-button>\n </div>\n <!-- 提示信息 -->\n <div class=\"p10 option-tips\">\n <Tip v-if=\"formatData.status && formatData.format.length\">\n 限制格式为:\n <span style=\"color: red\">{{\n formatData.format.join(', ')\n }}</span>\n </Tip>\n <Tip v-if=\"formatData.size\">\n 限制文件大小不超过:\n <span style=\"color: red\">{{\n formatSize(formatData.size)\n }}</span>\n </Tip>\n <template v-if=\"isWithdraw\">\n <Tip>\n ① 须保证选择的文件与提交时的文件一致<br>\n ② 填写表单信息一致 <br>\n ③\n 完全一模一样的文件的提交记录(内容md5+命名),将会一次性全部撤回\n </Tip>\n </template>\n <template v-else>\n <Tip>\n <strong>查询提交情况,需填写和提交时一样的表单信息</strong>\n </Tip>\n <Tip>\n ① 选择完文件,点击 ”提交文件“即可 <br>\n ② <strong>选择大文件后需要等待一会儿才展示处理</strong>\n <template v-if=\"taskMoreInfo.template && !disabledUpload\">\n <br>\n ③\n <strong>\n <el-button\n type=\"primary\"\n text\n style=\"color: #85ce61\"\n size=\"small\"\n @click=\"downloadTemplate\"\n >右下角可 “查看提交示例”\n </el-button>\n </strong>\n </template>\n </Tip>\n </template>\n </div>\n <div class=\"withdraw\">\n <el-button\n v-if=\"taskMoreInfo.template && !disabledUpload\"\n type=\"primary\"\n text\n style=\"color: #85ce61\"\n size=\"small\"\n @click=\"downloadTemplate\"\n >\n 查看提交示例\n </el-button>\n <el-button\n v-if=\"isWithdraw\"\n size=\"small\"\n type=\"primary\"\n text\n @click=\"isWithdraw = false\"\n >\n 正常提交\n </el-button>\n <el-button\n v-else\n size=\"small\"\n type=\"primary\"\n text\n @click=\"isWithdraw = true\"\n >\n 我要撤回\n </el-button>\n </div>\n </div>\n </div>\n <!-- 无效任务 -->\n <div v-else class=\"panel tc\">\n <h1 class=\"name\">\n {{ taskInfo.name }}\n </h1>\n </div>\n <LinkDialog\n v-model:value=\"showLinkModel\"\n title=\"示例文件下载链接\"\n :link=\"templateLink\"\n />\n <div style=\"padding-top: 20px\">\n <HomeFooter type=\"task\" />\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.task-panel :deep(ul.el-upload-list) {\n border: 1px dashed #d4d4d4;\n padding: 10px;\n\n &::before {\n content: '此处展示选择文件列表';\n font-size: 12px;\n position: relative;\n bottom: 4px;\n }\n}\n\n.task-panel :deep(.el-upload-list__item-name) {\n display: block;\n overflow: hidden;\n max-width: 290px;\n text-overflow: ellipsis;\n word-break: keep-all;\n}\n\n.task-panel :deep(.is-ready .el-icon--close) {\n display: block;\n color: black;\n}\n\n.task-panel {\n background-color: #f3f6f8;\n padding-bottom: 1rem;\n position: relative;\n}\n\n.pc-nav {\n background-color: #fff;\n display: flex;\n padding: 10px;\n justify-content: space-between;\n align-items: center;\n\n .exit {\n cursor: pointer;\n }\n\n .nav {\n display: flex;\n\n nav {\n display: flex;\n align-items: center;\n\n .nav-item {\n font-size: 1rem;\n color: #595959;\n padding: 10px;\n cursor: pointer;\n\n &.active {\n color: #409eff !important;\n font-weight: 600;\n }\n }\n }\n\n .exit {\n color: #595959;\n }\n }\n\n .logo {\n width: 180px;\n margin: 0 10px;\n\n img {\n height: 40px;\n }\n }\n}\n\n.panel {\n max-width: 1024px;\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n border-radius: 4px;\n\n .name {\n text-align: center;\n }\n\n .ddl {\n margin-top: 10px;\n color: #919191;\n font-size: 14px;\n }\n\n .infos {\n max-width: 460px;\n margin: auto;\n overflow: hidden;\n :deep(div.el-form-item > label) {\n font-weight: bold;\n &::before {\n content: '* ';\n color: red;\n }\n }\n }\n}\n\n.withdraw {\n text-align: right;\n}\n\n.tip-wrapper {\n line-height: 20px;\n text-align: left;\n word-break: break-all;\n // max-height: 100px;\n overflow: hidden;\n padding: 0 20px;\n color: #e6a23c;\n max-width: 320px;\n font-size: 14px;\n}\n</style>\n"],"names":["_sfc_main","defineComponent","name","_hoisted_1","viewBox","xmlns","_hoisted_3","createElementVNode","fill","d","uploadFilled","_export_sfc","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","isMobile","useIsMobile","$router","useRouter","$route","useRoute","pcNavs","reactive","title","path","taskInfo","category","taskMoreInfo","bindField","formatData","computed","parseFileFormat","format","k","ref","waitTime","isOver","value","waitTimeStr","seconds","hour","day","minute","refreshWaitTime","loop","ddl","date","Date","getTime","now","setTimeout","ddlStr","formatDate","infos","fileList","fileUpload","disableForm","filter","item","status","length","handleRemoveFile","file","ElMessageBox","confirm","then","ElMessage","info","subscription","unsubscribe","catch","isWriteFinish","every","limitBindField","trim","isSameFieldName","find","v","text","showValidForm","people","validModal","peopleName","validatePeopleName","rule","callback","message","Error","error","PeopleApi","checkPeopleIsExist","res","data","exist","validModalRef","validModalRules","validator","trigger","confirmPeopleName","Promise","resolve","validate","isValid","async","submitUpload","uploadFiles","md5","originName","rewrite","map","join","splitChar","getFileSuffix","normalizeFileName","key","FileApi","getUploadToken","qiniuUpload","token","raw","success","fsize","addFile","taskKey","taskName","size","hash","JSON","stringify","updatePeopleStatus","process","per","percentage","Math","floor","startUpload","warning","allowUpload","allowWithdraw","includes","calculateMd5Count","handleChangeFile","suffix","toLowerCase","endsWith","handleRemove","formatSize","getFileMd5Hash","str","limitUploadCount","limit","handleExceed","showLinkModel","templateLink","downloadTemplate","getTemplateUrl","template","link","downLoadByUrl","isWithdraw","startWithdraw","withdrawFile","filename","runWithdraw","checkSubmitStatus","isSubmit","isLoadingData","readyRefresh","isEqualInfos","a","b","i","type","children","refreshTaskMoreInfo","hot","TaskApi","getTaskMoreInfo","Object","assign","parseInfo","splice","push","handleBlur","handleFocus","timeInfo","tipData","imgs","imageList","watch","tip","parseData","parse","url","PublicApi","getTipImageUrl","uid","forEach","idx","cover","preview","disabledUpload","useLocalStorage","onMounted","params","getTaskInfo","limitUpload","alert","err","code","window","addEventListener","onUnmounted","removeEventListener","startsWith","location","href"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
System.register(["./index-legacy-BaUX-zxP.js"],(function(a,t){"use strict";var e,n,i,d,l,o,r,c,m,s,g,p,u,f,x,v,h,w,b;return{setters:[a=>{e=a.g,n=a.d,i=a.a,d=a.c,l=a.b,o=a.i,r=a.F,c=a.C,m=a.j,s=a.w,g=a.D,p=a.G,u=a.H,f=a.t,x=a.e,v=a.I,h=a.p,w=a.f,b=a._}],execute:function(){var t=document.createElement("style");t.textContent="h1[data-v-a235cdd8],h2[data-v-a235cdd8],h3[data-v-a235cdd8],h4[data-v-a235cdd8]{font-weight:500}.callme[data-v-a235cdd8]{background-image:linear-gradient(120deg,#a1c4fd,#c2e9fb);min-height:100vh}main[data-v-a235cdd8]{max-width:860px;margin:0 auto;padding:20px}main .panel[data-v-a235cdd8]{position:relative;margin:0 auto 20px;padding:16px 20px;width:100%;overflow:hidden;border-radius:.25rem;box-shadow:#eee;box-sizing:border-box;transition:all .3s;background-color:#fff}main h1[data-v-a235cdd8]{font-size:1.6rem;font-weight:500;margin-bottom:10px}main .baseinfo[data-v-a235cdd8]{color:#7f7f7f;font-size:1rem;display:flex;flex-wrap:wrap;margin-bottom:10px}main .baseinfo a[data-v-a235cdd8]{color:#7f7f7f;font-size:1rem;margin-left:10px}main .baseinfo .info-item[data-v-a235cdd8]{margin-right:20px}main hr[data-v-a235cdd8]{margin-bottom:10px}main .qq-wechat ul[data-v-a235cdd8]{list-style:none;display:flex;flex-wrap:wrap;margin-bottom:10px}main .qq-wechat ul li[data-v-a235cdd8]{text-align:center}main .qq-wechat ul li .title[data-v-a235cdd8]{font-weight:600}main .qq-wechat ul li .content[data-v-a235cdd8]{padding:.5em}main .qq-wechat ul li img[data-v-a235cdd8]{width:150px}main .description[data-v-a235cdd8]{color:#242424;font-size:15px;margin-bottom:10px;text-align:center}main .links[data-v-a235cdd8]{text-align:center}main .links a[data-v-a235cdd8]{color:#409eff}\n",document.head.appendChild(t);const z=n({name:"Promotion"}),q={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},T=[l("path",{fill:"currentColor",d:"m64 448 832-320-128 704-446.08-243.328L832 192 242.816 545.472 64 448zm256 512V657.024L512 768 320 960z"},null,-1)];var k=e(z,[["render",function(a,t,e,n,l,o){return i(),d("svg",q,T)}]]);const y=n({name:"UserFilled"}),M={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},_=[l("path",{fill:"currentColor",d:"M288 320a224 224 0 1 0 448 0 224 224 0 1 0-448 0zm544 608H160a32 32 0 0 1-32-32v-96a160 160 0 0 1 160-160h448a160 160 0 0 1 160 160v96a32 32 0 0 1-32 32z"},null,-1)];var N=e(y,[["render",function(a,t,e,n,l,o){return i(),d("svg",M,_)}]]);const E=a=>(h("data-v-a235cdd8"),a=a(),w(),a),I={class:"callme"},Q={class:"panel"},j=E((()=>l("h1",null,"联系作者",-1))),C={class:"baseinfo"},O=["href"],Y=E((()=>l("hr",null,null,-1))),A={class:"qq-wechat"},B={class:"title"},D={class:"content"},F=["src"],H=E((()=>l("div",{class:"description"},[l("p",null,"如遇无法解决的账号/使用问题,欢迎小窗联系我")],-1))),L={class:"links"};a("default",b(n({__name:"index",setup(a){const t=[{icon:N,text:"粥里有勺糖",href:"https://sugarat.top"},{icon:k,text:"engineerzjl@foxmail.com",href:"mailto:engineerzjl@foxmail.com"}],e=[{text:"微信",img:"https://img.cdn.sugarat.top/mdImg/MTYxOTE1NTk3MTkyNA==619155971925"},{text:"公众号",img:"https://img.cdn.sugarat.top/mdImg/MTYxOTE1NTYwNzQ5MQ==619155607491"},{text:"QQ",img:"https://img.cdn.sugarat.top/mdImg/MTYxOTE1NjQ5ODczOQ==619156498739"},{text:"交流群",img:"https://img.cdn.sugarat.top/mdImg/MTY0Nzc2MTE2MTE2NA==ep-group.png"}];return(a,n)=>{const h=v,w=o("router-link");return i(),d("div",I,[l("main",null,[l("div",Q,[j,l("div",C,[(i(),d(r,null,c(t,((a,t)=>l("span",{key:t,class:"info-item"},[m(h,null,{default:s((()=>[(i(),g(p(a.icon)))])),_:2},1024),l("i",{class:u(a.icon)},null,2),l("a",{target:"_blank",href:a.href},f(a.text),9,O)]))),64))]),Y,l("div",A,[l("ul",null,[(i(),d(r,null,c(e,((a,t)=>l("li",{key:t},[l("div",B,f(a.text),1),l("div",D,[l("img",{src:a.img},null,8,F)])]))),64))])]),H,l("div",L,[m(w,{to:"/"},{default:s((()=>[x("回到首页")])),_:1})])])])])}}}),[["__scopeId","data-v-a235cdd8"]]))}}}));
|
|
2
|
+
//# sourceMappingURL=index-legacy-z4MDfS45.js.map
|