@sugarat/easypicker2-client 2.7.1 → 2.7.2
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/{data-analysis-B61f8OZD.js → data-analysis-B9140nBj.js} +2 -2
- package/dist/assets/{data-analysis-B61f8OZD.js.map → data-analysis-B9140nBj.js.map} +1 -1
- package/dist/assets/{data-analysis-legacy-sXkPNcPD.js → data-analysis-legacy-hCmX88pc.js} +2 -2
- package/dist/assets/{data-analysis-legacy-sXkPNcPD.js.map → data-analysis-legacy-hCmX88pc.js.map} +1 -1
- package/dist/assets/{data-board-BIN3HXKE.js → data-board-D3o_ZTM6.js} +2 -2
- package/dist/assets/{data-board-BIN3HXKE.js.map → data-board-D3o_ZTM6.js.map} +1 -1
- package/dist/assets/{data-board-legacy-mqcredpF.js → data-board-legacy-B3GeXOqc.js} +2 -2
- package/dist/assets/{data-board-legacy-mqcredpF.js.map → data-board-legacy-B3GeXOqc.js.map} +1 -1
- package/dist/assets/{el-date-picker-B-cvGosU.js → el-date-picker-DLwRZtue.js} +2 -2
- package/dist/assets/{el-date-picker-B-cvGosU.js.map → el-date-picker-DLwRZtue.js.map} +1 -1
- package/dist/assets/{el-date-picker-legacy-CACCtxzL.js → el-date-picker-legacy-D8g_iKhG.js} +2 -2
- package/dist/assets/{el-date-picker-legacy-CACCtxzL.js.map → el-date-picker-legacy-D8g_iKhG.js.map} +1 -1
- package/dist/assets/{el-dialog-C9wNxcPt.js → el-dialog-Dq3XmL6w.js} +2 -2
- package/dist/assets/{el-dialog-C9wNxcPt.js.map → el-dialog-Dq3XmL6w.js.map} +1 -1
- package/dist/assets/{el-dialog-legacy-CX7a77_4.js → el-dialog-legacy-DCFOVWEQ.js} +2 -2
- package/dist/assets/{el-dialog-legacy-CX7a77_4.js.map → el-dialog-legacy-DCFOVWEQ.js.map} +1 -1
- package/dist/assets/{el-dropdown-item-jbdZL0Yj.js → el-dropdown-item-C3aOY1Nr.js} +2 -2
- package/dist/assets/{el-dropdown-item-jbdZL0Yj.js.map → el-dropdown-item-C3aOY1Nr.js.map} +1 -1
- package/dist/assets/{el-dropdown-item-legacy-ChoB2YAN.js → el-dropdown-item-legacy-QQu1PUxO.js} +2 -2
- package/dist/assets/{el-dropdown-item-legacy-ChoB2YAN.js.map → el-dropdown-item-legacy-QQu1PUxO.js.map} +1 -1
- package/dist/assets/{el-form-item-BhAyaXPT.js → el-form-item-CtSEmj9z.js} +2 -2
- package/dist/assets/{el-form-item-BhAyaXPT.js.map → el-form-item-CtSEmj9z.js.map} +1 -1
- package/dist/assets/{el-form-item-legacy-DNwgpXzk.js → el-form-item-legacy-BS5eT84Y.js} +2 -2
- package/dist/assets/{el-form-item-legacy-DNwgpXzk.js.map → el-form-item-legacy-BS5eT84Y.js.map} +1 -1
- package/dist/assets/{el-loading-D5D_2rI_.js → el-loading-BzK_8zqi.js} +2 -2
- package/dist/assets/{el-loading-D5D_2rI_.js.map → el-loading-BzK_8zqi.js.map} +1 -1
- package/dist/assets/{el-loading-legacy-CCDpn-BT.js → el-loading-legacy-DWfn3F3x.js} +2 -2
- package/dist/assets/{el-loading-legacy-CCDpn-BT.js.map → el-loading-legacy-DWfn3F3x.js.map} +1 -1
- package/dist/assets/{el-pagination-DRV4WevC.js → el-pagination-Qx_lnumK.js} +2 -2
- package/dist/assets/{el-pagination-DRV4WevC.js.map → el-pagination-Qx_lnumK.js.map} +1 -1
- package/dist/assets/{el-pagination-legacy-CAxn6D5y.js → el-pagination-legacy-DqLvzT2t.js} +2 -2
- package/dist/assets/{el-pagination-legacy-CAxn6D5y.js.map → el-pagination-legacy-DqLvzT2t.js.map} +1 -1
- package/dist/assets/{el-progress-GDfl1hgb.js → el-progress-CeLYmjYA.js} +2 -2
- package/dist/assets/{el-progress-GDfl1hgb.js.map → el-progress-CeLYmjYA.js.map} +1 -1
- package/dist/assets/{el-progress-legacy-C5K3FqLs.js → el-progress-legacy-CwFO38du.js} +2 -2
- package/dist/assets/{el-progress-legacy-C5K3FqLs.js.map → el-progress-legacy-CwFO38du.js.map} +1 -1
- package/dist/assets/{el-select-B9z8VvNb.js → el-select-HG63LP3Z.js} +2 -2
- package/dist/assets/{el-select-B9z8VvNb.js.map → el-select-HG63LP3Z.js.map} +1 -1
- package/dist/assets/{el-select-legacy-BI1YK9Jv.js → el-select-legacy-fKvGMZFT.js} +2 -2
- package/dist/assets/{el-select-legacy-BI1YK9Jv.js.map → el-select-legacy-fKvGMZFT.js.map} +1 -1
- package/dist/assets/{el-switch-oOC_byJv.js → el-switch-FjmuXBNe.js} +2 -2
- package/dist/assets/{el-switch-oOC_byJv.js.map → el-switch-FjmuXBNe.js.map} +1 -1
- package/dist/assets/{el-switch-legacy-CG_sT4XS.js → el-switch-legacy-CU4cCeO5.js} +2 -2
- package/dist/assets/{el-switch-legacy-CG_sT4XS.js.map → el-switch-legacy-CU4cCeO5.js.map} +1 -1
- package/dist/assets/{el-tab-pane-NvGl_NI0.js → el-tab-pane-CuYcnzTM.js} +2 -2
- package/dist/assets/{el-tab-pane-NvGl_NI0.js.map → el-tab-pane-CuYcnzTM.js.map} +1 -1
- package/dist/assets/{el-tab-pane-legacy-usarmKVQ.js → el-tab-pane-legacy-CDSRCQdO.js} +2 -2
- package/dist/assets/{el-tab-pane-legacy-usarmKVQ.js.map → el-tab-pane-legacy-CDSRCQdO.js.map} +1 -1
- package/dist/assets/{el-table-column-JBAymLKS.js → el-table-column-B2R1FOoB.js} +2 -2
- package/dist/assets/{el-table-column-JBAymLKS.js.map → el-table-column-B2R1FOoB.js.map} +1 -1
- package/dist/assets/{el-table-column-legacy-BWpnrxZl.js → el-table-column-legacy-DDZdwCAr.js} +2 -2
- package/dist/assets/{el-table-column-legacy-BWpnrxZl.js.map → el-table-column-legacy-DDZdwCAr.js.map} +1 -1
- package/dist/assets/{index-Cno4i6lg.js → index-0SN-qZs5.js} +2 -2
- package/dist/assets/{index-Cno4i6lg.js.map → index-0SN-qZs5.js.map} +1 -1
- package/dist/assets/index-4ToTyeX6.css +1 -0
- package/dist/assets/{index-DRHl9KU8.js → index-BMhqAx1_.js} +2 -2
- package/dist/assets/{index-DRHl9KU8.js.map → index-BMhqAx1_.js.map} +1 -1
- package/dist/assets/{index-DDGYm9L-.js → index-BjPgOd_H.js} +2 -2
- package/dist/assets/{index-DDGYm9L-.js.map → index-BjPgOd_H.js.map} +1 -1
- package/dist/assets/{index-MTuc20rr.js → index-BjdYG4YE.js} +2 -2
- package/dist/assets/{index-MTuc20rr.js.map → index-BjdYG4YE.js.map} +1 -1
- package/dist/assets/{index-bD-fr3vy.js → index-BkLqrfrW.js} +2 -2
- package/dist/assets/{index-bD-fr3vy.js.map → index-BkLqrfrW.js.map} +1 -1
- package/dist/assets/{index-B0mV367i.js → index-BvTJrWND.js} +2 -2
- package/dist/assets/{index-B0mV367i.js.map → index-BvTJrWND.js.map} +1 -1
- package/dist/assets/{index-BUF8Xxid.js → index-BxLy8VN3.js} +2 -2
- package/dist/assets/{index-BUF8Xxid.js.map → index-BxLy8VN3.js.map} +1 -1
- package/dist/assets/index-C0ZXXBCX.js +40 -0
- package/dist/assets/index-C0ZXXBCX.js.map +1 -0
- package/dist/assets/{index-DJnltRnr.js → index-Cs-E_cyt.js} +2 -2
- package/dist/assets/{index-DJnltRnr.js.map → index-Cs-E_cyt.js.map} +1 -1
- package/dist/assets/index-CsvxKrFP.js +2 -0
- package/dist/assets/{index-DEiWe2Bk.js.map → index-CsvxKrFP.js.map} +1 -1
- package/dist/assets/{index-CHIrZkSk.js → index-DABL-KOd.js} +2 -2
- package/dist/assets/{index-CHIrZkSk.js.map → index-DABL-KOd.js.map} +1 -1
- package/dist/assets/{index-DMIqQLOE.js → index-DFVlBjXp.js} +2 -2
- package/dist/assets/{index-DMIqQLOE.js.map → index-DFVlBjXp.js.map} +1 -1
- package/dist/assets/{index-CKIiHmIf.js → index-DIlzTatU.js} +2 -2
- package/dist/assets/{index-CKIiHmIf.js.map → index-DIlzTatU.js.map} +1 -1
- package/dist/assets/{index-DCwrZmag.js → index-DREZLSQi.js} +2 -2
- package/dist/assets/{index-DCwrZmag.js.map → index-DREZLSQi.js.map} +1 -1
- package/dist/assets/{index-C0niS8Vv.js → index-DclP3Kg-.js} +2 -2
- package/dist/assets/{index-C0niS8Vv.js.map → index-DclP3Kg-.js.map} +1 -1
- package/dist/assets/index-DlyJUJ0j.js +2 -0
- package/dist/assets/{index-BxsJs6HZ.js.map → index-DlyJUJ0j.js.map} +1 -1
- package/dist/assets/index-DnxF29eG.css +1 -0
- package/dist/assets/{index-fb67TYJ8.js → index-GC0X-O3Y.js} +2 -2
- package/dist/assets/{index-fb67TYJ8.js.map → index-GC0X-O3Y.js.map} +1 -1
- package/dist/assets/{index-Byzqqd86.js → index-HzWmB96f.js} +2 -2
- package/dist/assets/{index-Byzqqd86.js.map → index-HzWmB96f.js.map} +1 -1
- package/dist/assets/{index-BOep9MOB.css → index-I0Y2y6h5.css} +1 -1
- package/dist/assets/{index-Dxy6ycv8.js → index-U2z5KAu0.js} +2 -2
- package/dist/assets/{index-Dxy6ycv8.js.map → index-U2z5KAu0.js.map} +1 -1
- package/dist/assets/{index-legacy-DC5-MYgp.js → index-legacy-B4IHsyj2.js} +13 -8
- package/dist/assets/index-legacy-B4IHsyj2.js.map +1 -0
- package/dist/assets/index-legacy-BKxszgZW.js +2 -0
- package/dist/assets/{index-legacy-DM_G6GXF.js.map → index-legacy-BKxszgZW.js.map} +1 -1
- package/dist/assets/{index-legacy-Cbyz8WHA.js → index-legacy-BO3hAqA9.js} +2 -2
- package/dist/assets/{index-legacy-Cbyz8WHA.js.map → index-legacy-BO3hAqA9.js.map} +1 -1
- package/dist/assets/{index-legacy-l7TP3X8w.js → index-legacy-BSXJnLod.js} +2 -2
- package/dist/assets/{index-legacy-l7TP3X8w.js.map → index-legacy-BSXJnLod.js.map} +1 -1
- package/dist/assets/{index-legacy-2G5G7SiF.js → index-legacy-BSv-V3Il.js} +2 -2
- package/dist/assets/{index-legacy-2G5G7SiF.js.map → index-legacy-BSv-V3Il.js.map} +1 -1
- package/dist/assets/{index-legacy-Qibh5ehq.js → index-legacy-CCqMKGqS.js} +2 -2
- package/dist/assets/{index-legacy-Qibh5ehq.js.map → index-legacy-CCqMKGqS.js.map} +1 -1
- package/dist/assets/{index-legacy-BN-W2P7-.js → index-legacy-CphqUnR0.js} +2 -2
- package/dist/assets/{index-legacy-BN-W2P7-.js.map → index-legacy-CphqUnR0.js.map} +1 -1
- package/dist/assets/{index-legacy-BwpR0DP9.js → index-legacy-D13WKbpb.js} +2 -2
- package/dist/assets/{index-legacy-BwpR0DP9.js.map → index-legacy-D13WKbpb.js.map} +1 -1
- package/dist/assets/{index-legacy-Chw6iyCz.js → index-legacy-D6IvG9Dt.js} +2 -2
- package/dist/assets/{index-legacy-Chw6iyCz.js.map → index-legacy-D6IvG9Dt.js.map} +1 -1
- package/dist/assets/{index-legacy-BZb5uhBF.js → index-legacy-DCezoU0z.js} +2 -2
- package/dist/assets/{index-legacy-BZb5uhBF.js.map → index-legacy-DCezoU0z.js.map} +1 -1
- package/dist/assets/{index-legacy-BdJHr4yN.js → index-legacy-DIwVyUHd.js} +2 -2
- package/dist/assets/{index-legacy-BdJHr4yN.js.map → index-legacy-DIwVyUHd.js.map} +1 -1
- package/dist/assets/{index-legacy-K0GPuvtR.js → index-legacy-DO2MADPO.js} +2 -2
- package/dist/assets/{index-legacy-K0GPuvtR.js.map → index-legacy-DO2MADPO.js.map} +1 -1
- package/dist/assets/{index-legacy-B1WwgC0S.js → index-legacy-DcFvM5kb.js} +2 -2
- package/dist/assets/{index-legacy-B1WwgC0S.js.map → index-legacy-DcFvM5kb.js.map} +1 -1
- package/dist/assets/{index-legacy-Dmi-DBK0.js → index-legacy-Df_9F2Oo.js} +2 -2
- package/dist/assets/{index-legacy-Dmi-DBK0.js.map → index-legacy-Df_9F2Oo.js.map} +1 -1
- package/dist/assets/{index-legacy-DiNZXmUs.js → index-legacy-Dhs-OKEx.js} +2 -2
- package/dist/assets/{index-legacy-DiNZXmUs.js.map → index-legacy-Dhs-OKEx.js.map} +1 -1
- package/dist/assets/{index-legacy-DUrsbgNe.js → index-legacy-DjWDlkzN.js} +2 -2
- package/dist/assets/{index-legacy-DUrsbgNe.js.map → index-legacy-DjWDlkzN.js.map} +1 -1
- package/dist/assets/{index-legacy-DV-KwU0c.js → index-legacy-DxQA53Qy.js} +2 -2
- package/dist/assets/{index-legacy-DV-KwU0c.js.map → index-legacy-DxQA53Qy.js.map} +1 -1
- package/dist/assets/{index-legacy-DmJc-LaA.js → index-legacy-GbLWntci.js} +2 -2
- package/dist/assets/{index-legacy-DmJc-LaA.js.map → index-legacy-GbLWntci.js.map} +1 -1
- package/dist/assets/{index-legacy-gQf30T09.js → index-legacy-I4qT4Thb.js} +2 -2
- package/dist/assets/{index-legacy-gQf30T09.js.map → index-legacy-I4qT4Thb.js.map} +1 -1
- package/dist/assets/{index-legacy-DP3Q6cDA.js → index-legacy-quXi4jhF.js} +2 -2
- package/dist/assets/{index-legacy-DP3Q6cDA.js.map → index-legacy-quXi4jhF.js.map} +1 -1
- package/dist/assets/{index-Dj5caLYF.js → index-tyMcidBi.js} +2 -2
- package/dist/assets/{index-Dj5caLYF.js.map → index-tyMcidBi.js.map} +1 -1
- package/dist/assets/{isEqual-pN6Ih18F.js → isEqual-Cecwc716.js} +2 -2
- package/dist/assets/{isEqual-pN6Ih18F.js.map → isEqual-Cecwc716.js.map} +1 -1
- package/dist/assets/{isEqual-legacy-DVLZyo95.js → isEqual-legacy-dqS7X02N.js} +2 -2
- package/dist/assets/{isEqual-legacy-DVLZyo95.js.map → isEqual-legacy-dqS7X02N.js.map} +1 -1
- package/dist/assets/{refresh-BTQLK-UW.js → refresh-BA55HwKz.js} +2 -2
- package/dist/assets/{refresh-BTQLK-UW.js.map → refresh-BA55HwKz.js.map} +1 -1
- package/dist/assets/{refresh-legacy-Cv7RM_sm.js → refresh-legacy-CpA05Fzr.js} +2 -2
- package/dist/assets/{refresh-legacy-Cv7RM_sm.js.map → refresh-legacy-CpA05Fzr.js.map} +1 -1
- package/dist/assets/{tip-DQo-E_Pu.js → tip-CrU2GCmD.js} +2 -2
- package/dist/assets/{tip-DQo-E_Pu.js.map → tip-CrU2GCmD.js.map} +1 -1
- package/dist/assets/{tip-legacy-Ci60OMi9.js → tip-legacy-B05oHh9-.js} +2 -2
- package/dist/assets/{tip-legacy-Ci60OMi9.js.map → tip-legacy-B05oHh9-.js.map} +1 -1
- package/dist/assets/validator-Ca0QsRid.js +2 -0
- package/dist/assets/{validator-CZlzBDi2.js.map → validator-Ca0QsRid.js.map} +1 -1
- package/dist/assets/validator-legacy-D0GLFVMZ.js +2 -0
- package/dist/assets/{validator-legacy-D-pC1hkO.js.map → validator-legacy-D0GLFVMZ.js.map} +1 -1
- package/dist/index.html +2 -2
- package/package.json +3 -3
- package/dist/assets/index-1eHw6sEI.css +0 -1
- package/dist/assets/index-BG1GuMIu.css +0 -1
- package/dist/assets/index-BxsJs6HZ.js +0 -2
- package/dist/assets/index-D80lTVeV.js +0 -36
- package/dist/assets/index-D80lTVeV.js.map +0 -1
- package/dist/assets/index-DEiWe2Bk.js +0 -2
- package/dist/assets/index-legacy-DC5-MYgp.js.map +0 -1
- package/dist/assets/index-legacy-DM_G6GXF.js +0 -2
- package/dist/assets/validator-CZlzBDi2.js +0 -2
- package/dist/assets/validator-legacy-D-pC1hkO.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
System.register(["./index-legacy-DC5-MYgp.js","./el-loading-legacy-CCDpn-BT.js","./el-dialog-legacy-CX7a77_4.js","./el-pagination-legacy-CAxn6D5y.js","./el-select-legacy-BI1YK9Jv.js","./el-table-column-legacy-BWpnrxZl.js","./other-legacy-DjiCmSH4.js","./data-board-legacy-mqcredpF.js","./refresh-legacy-Cv7RM_sm.js","./data-analysis-legacy-sXkPNcPD.js","./index-legacy-DiNZXmUs.js","./isEqual-legacy-DVLZyo95.js","./validator-legacy-D-pC1hkO.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-
|
|
1
|
+
System.register(["./index-legacy-B4IHsyj2.js","./el-loading-legacy-DWfn3F3x.js","./el-dialog-legacy-DCFOVWEQ.js","./el-pagination-legacy-DqLvzT2t.js","./el-select-legacy-fKvGMZFT.js","./el-table-column-legacy-DDZdwCAr.js","./other-legacy-DjiCmSH4.js","./data-board-legacy-B3GeXOqc.js","./refresh-legacy-CpA05Fzr.js","./data-analysis-legacy-hCmX88pc.js","./index-legacy-Dhs-OKEx.js","./isEqual-legacy-dqS7X02N.js","./validator-legacy-D0GLFVMZ.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-I4qT4Thb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-legacy-gQf30T09.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]}
|
|
1
|
+
{"version":3,"file":"index-legacy-I4qT4Thb.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]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
System.register(["./index-legacy-DC5-MYgp.js","./el-form-item-legacy-DNwgpXzk.js","./el-date-picker-legacy-CACCtxzL.js","./el-dialog-legacy-CX7a77_4.js","./el-pagination-legacy-CAxn6D5y.js","./el-select-legacy-BI1YK9Jv.js","./el-table-column-legacy-BWpnrxZl.js","./tip-legacy-Ci60OMi9.js","./index-legacy-C-gHf8SN.js","./refresh-legacy-Cv7RM_sm.js","./index-legacy-DmJc-LaA.js","./isEqual-legacy-DVLZyo95.js","./index-legacy-DiNZXmUs.js","./validator-legacy-D-pC1hkO.js","./aria-legacy-B70JmEZA.js"],(function(e,l){"use strict";var a,t,o,n,u,i,s,r,d,c,p,m,f,v,w,g,b,h,y,C,x,V,_,z,k,S,U,T,j,E,M,$,L,B,F,A,H,P,O,D,R,q,N,I,Z,G,W,Y,J,K,Q;return{setters:[e=>{a=e.g,t=e.d,o=e.a,n=e.c,u=e.b,i=e.r,s=e.Z,r=e.bt,d=e.O,c=e.o,p=e.a6,m=e.j,f=e.w,v=e.F,w=e.C,g=e.D,b=e.k,h=e.bu,y=e.e,C=e.t,x=e.s,V=e.a5,_=e.S,z=e.H,k=e.a0,S=e.E,U=e.q,T=e.P,j=e.v,E=e.x,M=e.p,$=e.f,L=e.z,B=e.A,F=e._},e=>{A=e.E,H=e.a},e=>{P=e.d,O=e.E},e=>{D=e.u,R=e.E},e=>{q=e.s,N=e.E},e=>{I=e.E,Z=e.a},e=>{G=e.E,W=e.a},e=>{Y=e.T},e=>{J=e.U},e=>{K=e.r},e=>{Q=e.E},null,null,null,null],execute:function(){var l=document.createElement("style");l.textContent="@media screen and (max-width: 700px){.user[data-v-5fb60ef4]{margin-top:40px!important}.log-filter[data-v-5fb60ef4]{justify-content:center}}.w100[data-v-5fb60ef4]{width:100px}.user[data-v-5fb60ef4]{margin:0 auto}.panel[data-v-5fb60ef4]{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-5fb60ef4]{display:flex;flex-wrap:wrap}.log-filter .item[data-v-5fb60ef4]{margin-right:10px;margin-bottom:10px}.log-filter .item .label[data-v-5fb60ef4]{margin-right:10px;font-size:12px}.text-btn-list[data-v-5fb60ef4]{display:flex;flex-wrap:wrap}.text-btn-list button[data-v-5fb60ef4]{margin-left:0}.user-oss-info[data-v-5fb60ef4]{list-style:none}.user-oss-info li[data-v-5fb60ef4]{margin-bottom:10px}.user-oss-info .clear-btn[data-v-5fb60ef4]{margin-left:10px}.user-oss-info.disabled[data-v-5fb60ef4]{background-color:rgba(245,108,108,.3)}\n",document.head.appendChild(l);const X=t({name:"Message"}),ee={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},le=[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 ae=a(X,[["render",function(e,l,a,t,u,i){return o(),n("svg",ee,le)}]]);const te=t({name:"Money"}),oe={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},ne=[u("path",{fill:"currentColor",d:"M256 640v192h640V384H768v-64h150.976c14.272 0 19.456 1.472 24.64 4.288a29.056 29.056 0 0 1 12.16 12.096c2.752 5.184 4.224 10.368 4.224 24.64v493.952c0 14.272-1.472 19.456-4.288 24.64a29.056 29.056 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H233.024c-14.272 0-19.456-1.472-24.64-4.288a29.056 29.056 0 0 1-12.16-12.096c-2.688-5.184-4.224-10.368-4.224-24.576V640h64z"},null,-1),u("path",{fill:"currentColor",d:"M768 192H128v448h640V192zm64-22.976v493.952c0 14.272-1.472 19.456-4.288 24.64a29.056 29.056 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H105.024c-14.272 0-19.456-1.472-24.64-4.288a29.056 29.056 0 0 1-12.16-12.096C65.536 682.432 64 677.248 64 663.04V169.024c0-14.272 1.472-19.456 4.288-24.64a29.056 29.056 0 0 1 12.096-12.16C85.568 129.536 90.752 128 104.96 128h685.952c14.272 0 19.456 1.472 24.64 4.288a29.056 29.056 0 0 1 12.16 12.096c2.752 5.184 4.224 10.368 4.224 24.64z"},null,-1),u("path",{fill:"currentColor",d:"M448 576a160 160 0 1 1 0-320 160 160 0 0 1 0 320zm0-64a96 96 0 1 0 0-192 96 96 0 0 0 0 192z"},null,-1)];var ue=a(te,[["render",function(e,l,a,t,u,i){return o(),n("svg",oe,ne)}]]);const ie=e=>(M("data-v-5fb60ef4"),e=e(),$(),e),se={class:"user"},re={class:"panel"},de={class:"p10 log-filter"},ce={class:"item"},pe=ie((()=>u("span",{class:"label"},"状态",-1))),me={class:"item"},fe=ie((()=>u("span",{class:"label"},"排序",-1))),ve={class:"item"},we={class:"item"},ge={class:"item"},be=ie((()=>u("br",null,null,-1))),he=ie((()=>u("br",null,null,-1))),ye=ie((()=>u("br",null,null,-1))),Ce=ie((()=>u("br",null,null,-1))),xe=ie((()=>u("br",null,null,-1))),Ve=ie((()=>u("br",null,null,-1))),_e=ie((()=>u("br",null,null,-1))),ze=ie((()=>u("br",null,null,-1))),ke=ie((()=>u("br",null,null,-1))),Se=ie((()=>u("br",null,null,-1))),Ue=ie((()=>u("br",null,null,-1))),Te={class:"text-btn-list"},je={class:"flex fc p10"},Ee={class:"tc"},Me={class:"dialog-footer"},$e={class:"tc"},Le={key:0,style:{"margin-top":"10px"},class:"tc"},Be={class:"dialog-footer"},Fe={class:"tc"},Ae={class:"dialog-footer"},He={class:"tc"},Pe={class:"dialog-footer"},Oe={class:"tc"},De={class:"dialog-footer"},Re={class:"tc"},qe={class:"dialog-footer"},Ne=t({__name:"index",setup(e){const l=i(""),a=s([]);function t(){k.getUserList().then((e=>{a.splice(0,a.length,...e.data.list),l.value=e.data.sumCost,S.success("列表数据刷新成功")}))}const M=r("userStatusType",J.NORMAL),$=i(""),F=s([{label:"正常",type:J.NORMAL},{label:"冻结",type:J.FREEZE},{label:"封禁",type:J.BAN}]),X=r("userListSortType","id"),ee=[{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"}],le=r("userListSortOrder","desc"),te=[{label:"升序",value:"asc"},{label:"降序",value:"desc"}],oe=d((()=>{const e=[...a];return e.sort(((e,l)=>"asc"===le.value?e[X.value]-l[X.value]:l[X.value]-e[X.value])),e.filter((e=>e.status===M.value)).filter((e=>{const{id:l,account:a,phone:t,joinTime:o,loginCount:n,loginTime:u,openTime:i}=e;return 0===$.value.length||`${l} ${a} ${t} ${u} ${x(i)} ${x(n)} ${x(o)}`.includes($.value)}))})),ne=r("userListPageSize",10);function ie(e){ne.value=e}const Ne=d((()=>Math.ceil(oe.value.length/ne.value))),Ie=i(1),Ze=d((()=>{const e=(Ie.value-1)*ne.value,l=Ie.value*ne.value;return oe.value.slice(e,l)}));function Ge(e){Ie.value=e}const We=i(!1),Ye=i(0),Je=i(J.NORMAL),Ke=F,Qe=i("");function Xe(){const e=a.find((e=>e.id===Ye.value));if(Je.value===J.FREEZE){if(!Qe.value)return void S.warning("请设置解冻时间");e.openTime=Qe.value}else e.openTime="";e.status=Je.value,We.value=!1,k.updateUserStatus(e.id,e.status,e.openTime).then((()=>{S.success("修改成功")}))}const el=i(!1),ll=s({pwd1:"",pwd2:""});function al(){(L.test(ll.pwd1)?ll.pwd1===ll.pwd2||(S.warning("两次输入的密码不一致"),0):(S.warning("密码格式不正确(6-16位 支持字母/数字/下划线)"),0))&&Q.confirm("此操作不可逆,请谨慎操作","确定要重置用户的密码吗?",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((()=>{k.resetPassword(Ye.value,ll.pwd1).then((()=>{S.success("重置成功"),el.value=!1}))})).catch((()=>{}))}const tl=i(!1),ol=s({size:2});async function nl(){+ol.size<0?S.warning("空间上限不能小于0"):(await k.resetLimitSpace(Ye.value,+ol.size),S.success("修改成功"),tl.value=!1,t())}const ul=i(!1),il=s({money:2});async function sl(){+il.money<0?S.warning("余额不能小于0"):(await k.updateWallet(Ye.value,+il.money),S.success("修改成功"),ul.value=!1,t())}const rl=i(!1),dl=s({phone:"",code:""}),cl=i("获取验证码"),pl=i(0);function ml(){0!==pl.value?(cl.value=`${pl.value}s`,pl.value-=1,setTimeout(ml,1e3)):cl.value="获取验证码"}function fl(){U.test(dl.phone)?T.checkPhone(dl.phone).then((()=>{T.getCode(dl.phone).then((()=>{pl.value=120,ml(),S.success("获取成功,请注意查看手机短信")}))})).catch((e=>{const{code:l}=e;S.error({1002:"手机号已被注册",1006:"手机号格式不正确"}[l]||"注册失败,未知错误")})):S.warning("手机号格式不正确")}async function vl(){(U.test(dl.phone)?B.test(dl.code)||(S.warning("验证码格式不正确"),0):(S.warning("手机号格式不正确"),0))&&k.resetPhone(Ye.value,dl.phone,dl.code).then((()=>{S.success("绑定成功"),rl.value=!1,dl.code="",dl.phone="",t()})).catch((e=>{const{code:l}=e;S.error({1002:"手机号已被注册",1003:"验证码不正确"}[l]||"绑定失败,未知错误")}))}function wl(e,l){Ye.value=e,Q.confirm("移除后这些文件将无法恢复,请谨慎操作","删除前确认?",{confirmButtonText:`确认删除 ${{month:"一个月前",quarter:"三个月前",half:"半年前"}[l]}文件`}).then((()=>{k.clearOssFile(e,l).then((()=>{S.success("清理成功")}))})).catch((()=>{}))}const gl=i(1),bl=i(!1),hl=i("");function yl(e,l=1){Ye.value=e,gl.value=l,bl.value=!0}function Cl(){k.sendMessage(hl.value,gl.value,Ye.value).then((()=>{S.success("推送成功"),hl.value="",bl.value=!1}))}c((()=>{t()}));const xl=D(),{moneyStartDay:Vl}=p();return(e,a)=>{const i=I,s=Z,r=j,d=E,c=G,p=W,U=N,T=R,L=O,B=A,D=H;return o(),n("div",se,[u("div",re,[u("div",de,[u("span",ce,[pe,m(s,{modelValue:b(M),"onUpdate:modelValue":a[0]||(a[0]=e=>h(M)?M.value=e:null),size:"default",class:"w100"},{default:f((()=>[(o(!0),n(v,null,w(F,((e,l)=>(o(),g(i,{key:l,label:e.label,value:e.type},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])]),u("span",me,[fe,m(s,{modelValue:b(X),"onUpdate:modelValue":a[1]||(a[1]=e=>h(X)?X.value=e:null),size:"default",class:"w100"},{default:f((()=>[(o(),n(v,null,w(ee,((e,l)=>m(i,{key:l,label:e.label,value:e.value},null,8,["label","value"]))),64))])),_:1},8,["modelValue"]),m(s,{modelValue:b(le),"onUpdate:modelValue":a[2]||(a[2]=e=>h(le)?le.value=e:null),size:"default",class:"w100"},{default:f((()=>[(o(),n(v,null,w(te,((e,l)=>m(i,{key:l,label:e.label,value:e.value},null,8,["label","value"]))),64))])),_:1},8,["modelValue"])]),u("span",ve,[m(r,{modelValue:$.value,"onUpdate:modelValue":a[3]||(a[3]=e=>$.value=e),size:"default",clearable:"",placeholder:"请输入要检索的内容","prefix-icon":b(q)},null,8,["modelValue","prefix-icon"])]),u("span",we,[m(d,{size:"default",icon:b(K),onClick:t},{default:f((()=>[y("刷新")])),_:1},8,["icon"])]),u("span",ge,[m(d,{size:"warning",icon:b(ae),onClick:a[4]||(a[4]=e=>yl(null,0))},{default:f((()=>[y("推送全局消息")])),_:1},8,["icon"])])]),m(Y,null,{default:f((()=>[y(" 预估费用:"+C(l.value)+"¥, 计费起始时间:"+C(b(x)(b(Vl))),1)])),_:1}),m(p,{height:"550",stripe:"",border:"","default-sort":{prop:"date",order:"descending"},data:Ze.value,style:{width:"100%"}},{default:f((()=>[m(c,{prop:"id",label:"ID",width:"60"}),m(c,{prop:"account",label:"账号",width:"130"}),m(c,{prop:"phone",label:"手机号",width:"80"}),m(c,{label:"统计",width:"190"},{default:f((e=>[y(" 最后登录:"+C(e.row.loginTime&&b(x)(new Date(e.row.loginTime))),1),be,y(" 注册时间:"+C(b(x)(new Date(e.row.joinTime))),1),he,y(" 登录次数:"+C(e.row.loginCount),1),ye,y(" token: "+C(e.row.onlineCount),1),Ce])),_:1}),m(c,{prop:"downloadCount",label:"累计下载"},{default:f((({row:{downloadCount:e,downloadSize:l,oneFile:a,compressFile:t,templateFile:o}})=>[y(C(e)+" / "+C(b(V)(l)),1),xe,y(" 单文件:"+C(a.count)+" / "+C(b(V)(a.size)),1),Ve,y(" 归档:"+C(t.count)+" / "+C(b(V)(t.size)),1),_e,y(" 模板:"+C(o.count)+" / "+C(b(V)(o.size)),1)])),_:1}),1===b(M)?(o(),g(c,{key:0,prop:"openTime",label:"解封时间"},{default:f((e=>[y(C(e.row.openTime&&b(x)(new Date(e.row.openTime))),1)])),_:1})):_("",!0),m(c,{prop:"fileCount",label:"文件"},{default:f((e=>[y(" 累计:"+C(e.row.fileCount)+"/"+C(b(V)(e.row.originFileSize)),1),ze,y(" OSS:"+C(e.row.ossCount)+"/"+C(b(V)(e.row.usage)),1),ke,y(" 平均:"+C(e.row.originFileSize&&e.row.fileCount&&b(V)(Math.round(e.row.originFileSize/e.row.fileCount))),1),Se,y(" 平均:"+C(e.row.usage&&e.row.ossCount&&b(V)(Math.round(e.row.usage/e.row.ossCount))),1),Ue])),_:1}),m(c,{label:"云空间",width:"240"},{default:f((({row:{wallet:e,price:l,balance:a,resources:t,monthAgoSize:n,quarterAgoSize:i,halfYearSize:s,id:r,limitSize:c,limitUpload:p,percentage:f}})=>[u("ul",{class:z(["user-oss-info",{disabled:p}])},[u("li",null,[y(" ¥:"+C(l.total)+" / "+C(e)+" = "+C(a)+" ",1),m(d,{icon:b(ue),circle:"",size:"small",onClick:e=>function(e){const{backhaulTrafficPrice:l,cdnPrice:a,compressPrice:t,ossPrice:o}=e;Q.confirm(`存储:${o}, 下载:${a},压缩:${t},回源:${l}`,{showCancelButton:!1})}(l)},null,8,["icon","onClick"])]),u("li",null,C(f)+"% "+C(t)+"/"+C(c),1),u("li",null,[y(" 一月前:"+C(n),1),"0B"!==t?(o(),g(d,{key:0,class:"clear-btn",icon:b(P),circle:"",size:"small",onClick:e=>wl(r,"month")},null,8,["icon","onClick"])):_("",!0)]),u("li",null,[y(" 三月前:"+C(i),1),"0B"!==i?(o(),g(d,{key:0,class:"clear-btn",icon:b(P),circle:"",size:"small",onClick:e=>wl(r,"quarter")},null,8,["icon","onClick"])):_("",!0)]),u("li",null,[y(" 半年前:"+C(s),1),"0B"!==s?(o(),g(d,{key:0,class:"clear-btn",icon:b(P),circle:"",size:"small",onClick:e=>wl(r,"half")},null,8,["icon","onClick"])):_("",!0)])],2)])),_:1}),m(c,{fixed:"right",label:"操作",width:"100"},{default:f((e=>[u("div",Te,[m(d,{type:"primary",text:"",size:"small",onClick:l=>{return a=e.row.id,t=e.row.status,o=e.row.openTime,Ye.value=a,Je.value=t,Qe.value=o,void(We.value=!0);var a,t,o}},{default:f((()=>[y(" 修改状态 ")])),_:2},1032,["onClick"]),m(d,{type:"primary",text:"",size:"small",onClick:l=>{return a=e.row.id,Ye.value=a,el.value=!0,ll.pwd1="",void(ll.pwd2="");var a}},{default:f((()=>[y(" 重置密码 ")])),_:2},1032,["onClick"]),m(d,{type:"primary",text:"",size:"small",onClick:l=>{return a=e.row.id,Ye.value=a,void(rl.value=!0);var a}},{default:f((()=>[y(" 绑定手机号 ")])),_:2},1032,["onClick"]),m(d,{type:"warning",text:"",size:"small",onClick:l=>yl(e.row.id)},{default:f((()=>[y(" 发送消息 ")])),_:2},1032,["onClick"]),m(d,{type:"danger",text:"",size:"small",onClick:l=>{return a=e.row.id,t=e.row.size,Ye.value=a,ol.size=t,void(tl.value=!0);var a,t}},{default:f((()=>[y(" 修改上限 ")])),_:2},1032,["onClick"]),m(d,{type:"danger",text:"",size:"small",onClick:l=>function(e,l){Ye.value=e,il.money=l,ul.value=!0}(e.row.id,e.row.wallet)},{default:f((()=>[y(" 修改余额 ")])),_:2},1032,["onClick"]),0!==e.row.onlineCount?(o(),g(d,{key:0,type:"danger",text:"",size:"small",onClick:l=>{return a=e.row.account,void k.logout(a).then((()=>{S.success(`下线成功 ${a}`),t()}));var a}},{default:f((()=>[y(" 一键下线 ")])),_:2},1032,["onClick"])):_("",!0)])])),_:1})])),_:1},8,["data"]),u("div",je,[m(U,{"current-page":Ie.value,background:"","page-count":Ne.value,"page-sizes":[10,50,100,200],"page-size":b(ne),total:oe.value.length,layout:"total, sizes, prev, pager, next, jumper",onCurrentChange:Ge,onSizeChange:ie},null,8,["current-page","page-count","page-size","total"])])]),m(T,{modelValue:bl.value,"onUpdate:modelValue":a[7]||(a[7]=e=>bl.value=e),fullscreen:b(xl),center:"",title:"消息推送"},{footer:f((()=>[u("span",Me,[m(d,{onClick:a[6]||(a[6]=e=>bl.value=!1)},{default:f((()=>[y("取 消")])),_:1}),m(d,{type:"primary",onClick:Cl},{default:f((()=>[y("确 定")])),_:1})])])),default:f((()=>[u("div",Ee,[m(r,{modelValue:hl.value,"onUpdate:modelValue":a[5]||(a[5]=e=>hl.value=e),autosize:{minRows:6,maxRows:20},type:"textarea",placeholder:"输入要推送的消息,支持HTML内容(推荐使用mdnice 转 markdown 转html)"},null,8,["modelValue"])])])),_:1},8,["modelValue","fullscreen"]),m(T,{modelValue:We.value,"onUpdate:modelValue":a[11]||(a[11]=e=>We.value=e),fullscreen:b(xl),center:"",title:"状态修改"},{footer:f((()=>[u("span",Be,[m(d,{onClick:a[10]||(a[10]=e=>We.value=!1)},{default:f((()=>[y("取 消")])),_:1}),m(d,{type:"primary",onClick:Xe},{default:f((()=>[y("确 定")])),_:1})])])),default:f((()=>[u("div",$e,[m(s,{modelValue:Je.value,"onUpdate:modelValue":a[8]||(a[8]=e=>Je.value=e),placeholder:"请选择新分类"},{default:f((()=>[(o(!0),n(v,null,w(b(Ke),(e=>(o(),g(i,{key:e.type,label:e.label,value:e.type},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])]),1===Je.value?(o(),n("div",Le,[m(L,{modelValue:Qe.value,"onUpdate:modelValue":a[9]||(a[9]=e=>Qe.value=e),editable:!1,type:"datetime",placeholder:"点击设置解封日期"},null,8,["modelValue"])])):_("",!0)])),_:1},8,["modelValue","fullscreen"]),m(T,{modelValue:el.value,"onUpdate:modelValue":a[15]||(a[15]=e=>el.value=e),fullscreen:b(xl),center:"",title:"密码重置"},{footer:f((()=>[u("span",Ae,[m(d,{onClick:a[14]||(a[14]=e=>el.value=!1)},{default:f((()=>[y("取 消")])),_:1}),m(d,{type:"primary",onClick:al},{default:f((()=>[y("确 定")])),_:1})])])),default:f((()=>[u("div",Fe,[m(D,{model:ll,"label-width":"80px"},{default:f((()=>[m(B,{label:"新密码"},{default:f((()=>[m(r,{modelValue:ll.pwd1,"onUpdate:modelValue":a[12]||(a[12]=e=>ll.pwd1=e),"show-word-limit":"",clearable:"",placeholder:"请输入新密码",maxlength:"16",minlength:"6"},null,8,["modelValue"])])),_:1}),m(B,null,{default:f((()=>[m(r,{modelValue:ll.pwd2,"onUpdate:modelValue":a[13]||(a[13]=e=>ll.pwd2=e),"show-word-limit":"",clearable:"",placeholder:"请再次输入",maxlength:"16",minlength:"6"},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])])),_:1},8,["modelValue","fullscreen"]),m(T,{modelValue:rl.value,"onUpdate:modelValue":a[19]||(a[19]=e=>rl.value=e),fullscreen:b(xl),center:"",title:"绑定手机号"},{footer:f((()=>[u("span",Pe,[m(d,{onClick:a[18]||(a[18]=e=>rl.value=!1)},{default:f((()=>[y("取 消")])),_:1}),m(d,{type:"primary",onClick:vl},{default:f((()=>[y("确 定")])),_:1})])])),default:f((()=>[u("div",He,[m(D,{model:dl,"label-width":"60px"},{default:f((()=>[m(B,{label:"手机号"},{default:f((()=>[m(r,{modelValue:dl.phone,"onUpdate:modelValue":a[16]||(a[16]=e=>dl.phone=e),"show-word-limit":"",clearable:"",placeholder:"请输入手机号",maxlength:"11"},{append:f((()=>[m(d,{disabled:0!==pl.value,onClick:fl},{default:f((()=>[y(C(cl.value),1)])),_:1},8,["disabled"])])),_:1},8,["modelValue"])])),_:1}),m(B,null,{default:f((()=>[m(r,{modelValue:dl.code,"onUpdate:modelValue":a[17]||(a[17]=e=>dl.code=e),"show-word-limit":"",clearable:"",placeholder:"请输入验证码",maxlength:"4"},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])])),_:1},8,["modelValue","fullscreen"]),m(T,{modelValue:tl.value,"onUpdate:modelValue":a[22]||(a[22]=e=>tl.value=e),fullscreen:b(xl),center:"",title:"修改空间上限"},{footer:f((()=>[u("span",De,[m(d,{onClick:a[21]||(a[21]=e=>tl.value=!1)},{default:f((()=>[y("取 消")])),_:1}),m(d,{type:"primary",onClick:nl},{default:f((()=>[y("确 定")])),_:1})])])),default:f((()=>[u("div",Oe,[m(D,{model:ol,"label-width":"60px"},{default:f((()=>[m(B,{label:"大小"},{default:f((()=>[m(r,{modelValue:ol.size,"onUpdate:modelValue":a[20]||(a[20]=e=>ol.size=e),"show-word-limit":"",clearable:"",placeholder:"请输入空间上限",maxlength:"4",type:"number"},{append:f((()=>[y(" GB ")])),_:1},8,["modelValue"])])),_:1})])),_:1},8,["model"])])])),_:1},8,["modelValue","fullscreen"]),m(T,{modelValue:ul.value,"onUpdate:modelValue":a[25]||(a[25]=e=>ul.value=e),fullscreen:b(xl),center:"",title:"修改空间上限"},{footer:f((()=>[u("span",qe,[m(d,{onClick:a[24]||(a[24]=e=>ul.value=!1)},{default:f((()=>[y("取 消")])),_:1}),m(d,{type:"primary",onClick:sl},{default:f((()=>[y("确 定")])),_:1})])])),default:f((()=>[u("div",Re,[m(D,{model:il,"label-width":"60px"},{default:f((()=>[m(B,{label:"余额"},{default:f((()=>[m(r,{modelValue:il.money,"onUpdate:modelValue":a[23]||(a[23]=e=>il.money=e),"show-word-limit":"",clearable:"",placeholder:"请输入新的余额",maxlength:"4",type:"number"},{append:f((()=>[y(" ¥ ")])),_:1},8,["modelValue"])])),_:1})])),_:1},8,["model"])])])),_:1},8,["modelValue","fullscreen"])])}}});e("default",F(Ne,[["__scopeId","data-v-5fb60ef4"]]))}}}));
|
|
2
|
-
//# sourceMappingURL=index-legacy-
|
|
1
|
+
System.register(["./index-legacy-B4IHsyj2.js","./el-form-item-legacy-BS5eT84Y.js","./el-date-picker-legacy-D8g_iKhG.js","./el-dialog-legacy-DCFOVWEQ.js","./el-pagination-legacy-DqLvzT2t.js","./el-select-legacy-fKvGMZFT.js","./el-table-column-legacy-DDZdwCAr.js","./tip-legacy-B05oHh9-.js","./index-legacy-C-gHf8SN.js","./refresh-legacy-CpA05Fzr.js","./index-legacy-GbLWntci.js","./isEqual-legacy-dqS7X02N.js","./index-legacy-Dhs-OKEx.js","./validator-legacy-D0GLFVMZ.js","./aria-legacy-B70JmEZA.js"],(function(e,l){"use strict";var a,t,o,n,u,i,s,r,d,c,p,m,f,v,w,g,b,h,y,C,x,V,_,z,k,S,U,T,j,E,M,$,L,B,F,A,H,P,O,D,R,q,N,I,Z,G,W,Y,J,K,Q;return{setters:[e=>{a=e.g,t=e.d,o=e.a,n=e.c,u=e.b,i=e.r,s=e.Z,r=e.bt,d=e.O,c=e.o,p=e.a6,m=e.j,f=e.w,v=e.F,w=e.C,g=e.D,b=e.k,h=e.bu,y=e.e,C=e.t,x=e.s,V=e.a5,_=e.S,z=e.H,k=e.a0,S=e.E,U=e.q,T=e.P,j=e.v,E=e.x,M=e.p,$=e.f,L=e.z,B=e.A,F=e._},e=>{A=e.E,H=e.a},e=>{P=e.d,O=e.E},e=>{D=e.u,R=e.E},e=>{q=e.s,N=e.E},e=>{I=e.E,Z=e.a},e=>{G=e.E,W=e.a},e=>{Y=e.T},e=>{J=e.U},e=>{K=e.r},e=>{Q=e.E},null,null,null,null],execute:function(){var l=document.createElement("style");l.textContent="@media screen and (max-width: 700px){.user[data-v-5fb60ef4]{margin-top:40px!important}.log-filter[data-v-5fb60ef4]{justify-content:center}}.w100[data-v-5fb60ef4]{width:100px}.user[data-v-5fb60ef4]{margin:0 auto}.panel[data-v-5fb60ef4]{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-5fb60ef4]{display:flex;flex-wrap:wrap}.log-filter .item[data-v-5fb60ef4]{margin-right:10px;margin-bottom:10px}.log-filter .item .label[data-v-5fb60ef4]{margin-right:10px;font-size:12px}.text-btn-list[data-v-5fb60ef4]{display:flex;flex-wrap:wrap}.text-btn-list button[data-v-5fb60ef4]{margin-left:0}.user-oss-info[data-v-5fb60ef4]{list-style:none}.user-oss-info li[data-v-5fb60ef4]{margin-bottom:10px}.user-oss-info .clear-btn[data-v-5fb60ef4]{margin-left:10px}.user-oss-info.disabled[data-v-5fb60ef4]{background-color:rgba(245,108,108,.3)}\n",document.head.appendChild(l);const X=t({name:"Message"}),ee={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},le=[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 ae=a(X,[["render",function(e,l,a,t,u,i){return o(),n("svg",ee,le)}]]);const te=t({name:"Money"}),oe={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},ne=[u("path",{fill:"currentColor",d:"M256 640v192h640V384H768v-64h150.976c14.272 0 19.456 1.472 24.64 4.288a29.056 29.056 0 0 1 12.16 12.096c2.752 5.184 4.224 10.368 4.224 24.64v493.952c0 14.272-1.472 19.456-4.288 24.64a29.056 29.056 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H233.024c-14.272 0-19.456-1.472-24.64-4.288a29.056 29.056 0 0 1-12.16-12.096c-2.688-5.184-4.224-10.368-4.224-24.576V640h64z"},null,-1),u("path",{fill:"currentColor",d:"M768 192H128v448h640V192zm64-22.976v493.952c0 14.272-1.472 19.456-4.288 24.64a29.056 29.056 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H105.024c-14.272 0-19.456-1.472-24.64-4.288a29.056 29.056 0 0 1-12.16-12.096C65.536 682.432 64 677.248 64 663.04V169.024c0-14.272 1.472-19.456 4.288-24.64a29.056 29.056 0 0 1 12.096-12.16C85.568 129.536 90.752 128 104.96 128h685.952c14.272 0 19.456 1.472 24.64 4.288a29.056 29.056 0 0 1 12.16 12.096c2.752 5.184 4.224 10.368 4.224 24.64z"},null,-1),u("path",{fill:"currentColor",d:"M448 576a160 160 0 1 1 0-320 160 160 0 0 1 0 320zm0-64a96 96 0 1 0 0-192 96 96 0 0 0 0 192z"},null,-1)];var ue=a(te,[["render",function(e,l,a,t,u,i){return o(),n("svg",oe,ne)}]]);const ie=e=>(M("data-v-5fb60ef4"),e=e(),$(),e),se={class:"user"},re={class:"panel"},de={class:"p10 log-filter"},ce={class:"item"},pe=ie((()=>u("span",{class:"label"},"状态",-1))),me={class:"item"},fe=ie((()=>u("span",{class:"label"},"排序",-1))),ve={class:"item"},we={class:"item"},ge={class:"item"},be=ie((()=>u("br",null,null,-1))),he=ie((()=>u("br",null,null,-1))),ye=ie((()=>u("br",null,null,-1))),Ce=ie((()=>u("br",null,null,-1))),xe=ie((()=>u("br",null,null,-1))),Ve=ie((()=>u("br",null,null,-1))),_e=ie((()=>u("br",null,null,-1))),ze=ie((()=>u("br",null,null,-1))),ke=ie((()=>u("br",null,null,-1))),Se=ie((()=>u("br",null,null,-1))),Ue=ie((()=>u("br",null,null,-1))),Te={class:"text-btn-list"},je={class:"flex fc p10"},Ee={class:"tc"},Me={class:"dialog-footer"},$e={class:"tc"},Le={key:0,style:{"margin-top":"10px"},class:"tc"},Be={class:"dialog-footer"},Fe={class:"tc"},Ae={class:"dialog-footer"},He={class:"tc"},Pe={class:"dialog-footer"},Oe={class:"tc"},De={class:"dialog-footer"},Re={class:"tc"},qe={class:"dialog-footer"},Ne=t({__name:"index",setup(e){const l=i(""),a=s([]);function t(){k.getUserList().then((e=>{a.splice(0,a.length,...e.data.list),l.value=e.data.sumCost,S.success("列表数据刷新成功")}))}const M=r("userStatusType",J.NORMAL),$=i(""),F=s([{label:"正常",type:J.NORMAL},{label:"冻结",type:J.FREEZE},{label:"封禁",type:J.BAN}]),X=r("userListSortType","id"),ee=[{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"}],le=r("userListSortOrder","desc"),te=[{label:"升序",value:"asc"},{label:"降序",value:"desc"}],oe=d((()=>{const e=[...a];return e.sort(((e,l)=>"asc"===le.value?e[X.value]-l[X.value]:l[X.value]-e[X.value])),e.filter((e=>e.status===M.value)).filter((e=>{const{id:l,account:a,phone:t,joinTime:o,loginCount:n,loginTime:u,openTime:i}=e;return 0===$.value.length||`${l} ${a} ${t} ${u} ${x(i)} ${x(n)} ${x(o)}`.includes($.value)}))})),ne=r("userListPageSize",10);function ie(e){ne.value=e}const Ne=d((()=>Math.ceil(oe.value.length/ne.value))),Ie=i(1),Ze=d((()=>{const e=(Ie.value-1)*ne.value,l=Ie.value*ne.value;return oe.value.slice(e,l)}));function Ge(e){Ie.value=e}const We=i(!1),Ye=i(0),Je=i(J.NORMAL),Ke=F,Qe=i("");function Xe(){const e=a.find((e=>e.id===Ye.value));if(Je.value===J.FREEZE){if(!Qe.value)return void S.warning("请设置解冻时间");e.openTime=Qe.value}else e.openTime="";e.status=Je.value,We.value=!1,k.updateUserStatus(e.id,e.status,e.openTime).then((()=>{S.success("修改成功")}))}const el=i(!1),ll=s({pwd1:"",pwd2:""});function al(){(L.test(ll.pwd1)?ll.pwd1===ll.pwd2||(S.warning("两次输入的密码不一致"),0):(S.warning("密码格式不正确(6-16位 支持字母/数字/下划线)"),0))&&Q.confirm("此操作不可逆,请谨慎操作","确定要重置用户的密码吗?",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((()=>{k.resetPassword(Ye.value,ll.pwd1).then((()=>{S.success("重置成功"),el.value=!1}))})).catch((()=>{}))}const tl=i(!1),ol=s({size:2});async function nl(){+ol.size<0?S.warning("空间上限不能小于0"):(await k.resetLimitSpace(Ye.value,+ol.size),S.success("修改成功"),tl.value=!1,t())}const ul=i(!1),il=s({money:2});async function sl(){+il.money<0?S.warning("余额不能小于0"):(await k.updateWallet(Ye.value,+il.money),S.success("修改成功"),ul.value=!1,t())}const rl=i(!1),dl=s({phone:"",code:""}),cl=i("获取验证码"),pl=i(0);function ml(){0!==pl.value?(cl.value=`${pl.value}s`,pl.value-=1,setTimeout(ml,1e3)):cl.value="获取验证码"}function fl(){U.test(dl.phone)?T.checkPhone(dl.phone).then((()=>{T.getCode(dl.phone).then((()=>{pl.value=120,ml(),S.success("获取成功,请注意查看手机短信")}))})).catch((e=>{const{code:l}=e;S.error({1002:"手机号已被注册",1006:"手机号格式不正确"}[l]||"注册失败,未知错误")})):S.warning("手机号格式不正确")}async function vl(){(U.test(dl.phone)?B.test(dl.code)||(S.warning("验证码格式不正确"),0):(S.warning("手机号格式不正确"),0))&&k.resetPhone(Ye.value,dl.phone,dl.code).then((()=>{S.success("绑定成功"),rl.value=!1,dl.code="",dl.phone="",t()})).catch((e=>{const{code:l}=e;S.error({1002:"手机号已被注册",1003:"验证码不正确"}[l]||"绑定失败,未知错误")}))}function wl(e,l){Ye.value=e,Q.confirm("移除后这些文件将无法恢复,请谨慎操作","删除前确认?",{confirmButtonText:`确认删除 ${{month:"一个月前",quarter:"三个月前",half:"半年前"}[l]}文件`}).then((()=>{k.clearOssFile(e,l).then((()=>{S.success("清理成功")}))})).catch((()=>{}))}const gl=i(1),bl=i(!1),hl=i("");function yl(e,l=1){Ye.value=e,gl.value=l,bl.value=!0}function Cl(){k.sendMessage(hl.value,gl.value,Ye.value).then((()=>{S.success("推送成功"),hl.value="",bl.value=!1}))}c((()=>{t()}));const xl=D(),{moneyStartDay:Vl}=p();return(e,a)=>{const i=I,s=Z,r=j,d=E,c=G,p=W,U=N,T=R,L=O,B=A,D=H;return o(),n("div",se,[u("div",re,[u("div",de,[u("span",ce,[pe,m(s,{modelValue:b(M),"onUpdate:modelValue":a[0]||(a[0]=e=>h(M)?M.value=e:null),size:"default",class:"w100"},{default:f((()=>[(o(!0),n(v,null,w(F,((e,l)=>(o(),g(i,{key:l,label:e.label,value:e.type},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])]),u("span",me,[fe,m(s,{modelValue:b(X),"onUpdate:modelValue":a[1]||(a[1]=e=>h(X)?X.value=e:null),size:"default",class:"w100"},{default:f((()=>[(o(),n(v,null,w(ee,((e,l)=>m(i,{key:l,label:e.label,value:e.value},null,8,["label","value"]))),64))])),_:1},8,["modelValue"]),m(s,{modelValue:b(le),"onUpdate:modelValue":a[2]||(a[2]=e=>h(le)?le.value=e:null),size:"default",class:"w100"},{default:f((()=>[(o(),n(v,null,w(te,((e,l)=>m(i,{key:l,label:e.label,value:e.value},null,8,["label","value"]))),64))])),_:1},8,["modelValue"])]),u("span",ve,[m(r,{modelValue:$.value,"onUpdate:modelValue":a[3]||(a[3]=e=>$.value=e),size:"default",clearable:"",placeholder:"请输入要检索的内容","prefix-icon":b(q)},null,8,["modelValue","prefix-icon"])]),u("span",we,[m(d,{size:"default",icon:b(K),onClick:t},{default:f((()=>[y("刷新")])),_:1},8,["icon"])]),u("span",ge,[m(d,{size:"warning",icon:b(ae),onClick:a[4]||(a[4]=e=>yl(null,0))},{default:f((()=>[y("推送全局消息")])),_:1},8,["icon"])])]),m(Y,null,{default:f((()=>[y(" 预估费用:"+C(l.value)+"¥, 计费起始时间:"+C(b(x)(b(Vl))),1)])),_:1}),m(p,{height:"550",stripe:"",border:"","default-sort":{prop:"date",order:"descending"},data:Ze.value,style:{width:"100%"}},{default:f((()=>[m(c,{prop:"id",label:"ID",width:"60"}),m(c,{prop:"account",label:"账号",width:"130"}),m(c,{prop:"phone",label:"手机号",width:"80"}),m(c,{label:"统计",width:"190"},{default:f((e=>[y(" 最后登录:"+C(e.row.loginTime&&b(x)(new Date(e.row.loginTime))),1),be,y(" 注册时间:"+C(b(x)(new Date(e.row.joinTime))),1),he,y(" 登录次数:"+C(e.row.loginCount),1),ye,y(" token: "+C(e.row.onlineCount),1),Ce])),_:1}),m(c,{prop:"downloadCount",label:"累计下载"},{default:f((({row:{downloadCount:e,downloadSize:l,oneFile:a,compressFile:t,templateFile:o}})=>[y(C(e)+" / "+C(b(V)(l)),1),xe,y(" 单文件:"+C(a.count)+" / "+C(b(V)(a.size)),1),Ve,y(" 归档:"+C(t.count)+" / "+C(b(V)(t.size)),1),_e,y(" 模板:"+C(o.count)+" / "+C(b(V)(o.size)),1)])),_:1}),1===b(M)?(o(),g(c,{key:0,prop:"openTime",label:"解封时间"},{default:f((e=>[y(C(e.row.openTime&&b(x)(new Date(e.row.openTime))),1)])),_:1})):_("",!0),m(c,{prop:"fileCount",label:"文件"},{default:f((e=>[y(" 累计:"+C(e.row.fileCount)+"/"+C(b(V)(e.row.originFileSize)),1),ze,y(" OSS:"+C(e.row.ossCount)+"/"+C(b(V)(e.row.usage)),1),ke,y(" 平均:"+C(e.row.originFileSize&&e.row.fileCount&&b(V)(Math.round(e.row.originFileSize/e.row.fileCount))),1),Se,y(" 平均:"+C(e.row.usage&&e.row.ossCount&&b(V)(Math.round(e.row.usage/e.row.ossCount))),1),Ue])),_:1}),m(c,{label:"云空间",width:"240"},{default:f((({row:{wallet:e,price:l,balance:a,resources:t,monthAgoSize:n,quarterAgoSize:i,halfYearSize:s,id:r,limitSize:c,limitUpload:p,percentage:f}})=>[u("ul",{class:z(["user-oss-info",{disabled:p}])},[u("li",null,[y(" ¥:"+C(l.total)+" / "+C(e)+" = "+C(a)+" ",1),m(d,{icon:b(ue),circle:"",size:"small",onClick:e=>function(e){const{backhaulTrafficPrice:l,cdnPrice:a,compressPrice:t,ossPrice:o}=e;Q.confirm(`存储:${o}, 下载:${a},压缩:${t},回源:${l}`,{showCancelButton:!1})}(l)},null,8,["icon","onClick"])]),u("li",null,C(f)+"% "+C(t)+"/"+C(c),1),u("li",null,[y(" 一月前:"+C(n),1),"0B"!==t?(o(),g(d,{key:0,class:"clear-btn",icon:b(P),circle:"",size:"small",onClick:e=>wl(r,"month")},null,8,["icon","onClick"])):_("",!0)]),u("li",null,[y(" 三月前:"+C(i),1),"0B"!==i?(o(),g(d,{key:0,class:"clear-btn",icon:b(P),circle:"",size:"small",onClick:e=>wl(r,"quarter")},null,8,["icon","onClick"])):_("",!0)]),u("li",null,[y(" 半年前:"+C(s),1),"0B"!==s?(o(),g(d,{key:0,class:"clear-btn",icon:b(P),circle:"",size:"small",onClick:e=>wl(r,"half")},null,8,["icon","onClick"])):_("",!0)])],2)])),_:1}),m(c,{fixed:"right",label:"操作",width:"100"},{default:f((e=>[u("div",Te,[m(d,{type:"primary",text:"",size:"small",onClick:l=>{return a=e.row.id,t=e.row.status,o=e.row.openTime,Ye.value=a,Je.value=t,Qe.value=o,void(We.value=!0);var a,t,o}},{default:f((()=>[y(" 修改状态 ")])),_:2},1032,["onClick"]),m(d,{type:"primary",text:"",size:"small",onClick:l=>{return a=e.row.id,Ye.value=a,el.value=!0,ll.pwd1="",void(ll.pwd2="");var a}},{default:f((()=>[y(" 重置密码 ")])),_:2},1032,["onClick"]),m(d,{type:"primary",text:"",size:"small",onClick:l=>{return a=e.row.id,Ye.value=a,void(rl.value=!0);var a}},{default:f((()=>[y(" 绑定手机号 ")])),_:2},1032,["onClick"]),m(d,{type:"warning",text:"",size:"small",onClick:l=>yl(e.row.id)},{default:f((()=>[y(" 发送消息 ")])),_:2},1032,["onClick"]),m(d,{type:"danger",text:"",size:"small",onClick:l=>{return a=e.row.id,t=e.row.size,Ye.value=a,ol.size=t,void(tl.value=!0);var a,t}},{default:f((()=>[y(" 修改上限 ")])),_:2},1032,["onClick"]),m(d,{type:"danger",text:"",size:"small",onClick:l=>function(e,l){Ye.value=e,il.money=l,ul.value=!0}(e.row.id,e.row.wallet)},{default:f((()=>[y(" 修改余额 ")])),_:2},1032,["onClick"]),0!==e.row.onlineCount?(o(),g(d,{key:0,type:"danger",text:"",size:"small",onClick:l=>{return a=e.row.account,void k.logout(a).then((()=>{S.success(`下线成功 ${a}`),t()}));var a}},{default:f((()=>[y(" 一键下线 ")])),_:2},1032,["onClick"])):_("",!0)])])),_:1})])),_:1},8,["data"]),u("div",je,[m(U,{"current-page":Ie.value,background:"","page-count":Ne.value,"page-sizes":[10,50,100,200],"page-size":b(ne),total:oe.value.length,layout:"total, sizes, prev, pager, next, jumper",onCurrentChange:Ge,onSizeChange:ie},null,8,["current-page","page-count","page-size","total"])])]),m(T,{modelValue:bl.value,"onUpdate:modelValue":a[7]||(a[7]=e=>bl.value=e),fullscreen:b(xl),center:"",title:"消息推送"},{footer:f((()=>[u("span",Me,[m(d,{onClick:a[6]||(a[6]=e=>bl.value=!1)},{default:f((()=>[y("取 消")])),_:1}),m(d,{type:"primary",onClick:Cl},{default:f((()=>[y("确 定")])),_:1})])])),default:f((()=>[u("div",Ee,[m(r,{modelValue:hl.value,"onUpdate:modelValue":a[5]||(a[5]=e=>hl.value=e),autosize:{minRows:6,maxRows:20},type:"textarea",placeholder:"输入要推送的消息,支持HTML内容(推荐使用mdnice 转 markdown 转html)"},null,8,["modelValue"])])])),_:1},8,["modelValue","fullscreen"]),m(T,{modelValue:We.value,"onUpdate:modelValue":a[11]||(a[11]=e=>We.value=e),fullscreen:b(xl),center:"",title:"状态修改"},{footer:f((()=>[u("span",Be,[m(d,{onClick:a[10]||(a[10]=e=>We.value=!1)},{default:f((()=>[y("取 消")])),_:1}),m(d,{type:"primary",onClick:Xe},{default:f((()=>[y("确 定")])),_:1})])])),default:f((()=>[u("div",$e,[m(s,{modelValue:Je.value,"onUpdate:modelValue":a[8]||(a[8]=e=>Je.value=e),placeholder:"请选择新分类"},{default:f((()=>[(o(!0),n(v,null,w(b(Ke),(e=>(o(),g(i,{key:e.type,label:e.label,value:e.type},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])]),1===Je.value?(o(),n("div",Le,[m(L,{modelValue:Qe.value,"onUpdate:modelValue":a[9]||(a[9]=e=>Qe.value=e),editable:!1,type:"datetime",placeholder:"点击设置解封日期"},null,8,["modelValue"])])):_("",!0)])),_:1},8,["modelValue","fullscreen"]),m(T,{modelValue:el.value,"onUpdate:modelValue":a[15]||(a[15]=e=>el.value=e),fullscreen:b(xl),center:"",title:"密码重置"},{footer:f((()=>[u("span",Ae,[m(d,{onClick:a[14]||(a[14]=e=>el.value=!1)},{default:f((()=>[y("取 消")])),_:1}),m(d,{type:"primary",onClick:al},{default:f((()=>[y("确 定")])),_:1})])])),default:f((()=>[u("div",Fe,[m(D,{model:ll,"label-width":"80px"},{default:f((()=>[m(B,{label:"新密码"},{default:f((()=>[m(r,{modelValue:ll.pwd1,"onUpdate:modelValue":a[12]||(a[12]=e=>ll.pwd1=e),"show-word-limit":"",clearable:"",placeholder:"请输入新密码",maxlength:"16",minlength:"6"},null,8,["modelValue"])])),_:1}),m(B,null,{default:f((()=>[m(r,{modelValue:ll.pwd2,"onUpdate:modelValue":a[13]||(a[13]=e=>ll.pwd2=e),"show-word-limit":"",clearable:"",placeholder:"请再次输入",maxlength:"16",minlength:"6"},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])])),_:1},8,["modelValue","fullscreen"]),m(T,{modelValue:rl.value,"onUpdate:modelValue":a[19]||(a[19]=e=>rl.value=e),fullscreen:b(xl),center:"",title:"绑定手机号"},{footer:f((()=>[u("span",Pe,[m(d,{onClick:a[18]||(a[18]=e=>rl.value=!1)},{default:f((()=>[y("取 消")])),_:1}),m(d,{type:"primary",onClick:vl},{default:f((()=>[y("确 定")])),_:1})])])),default:f((()=>[u("div",He,[m(D,{model:dl,"label-width":"60px"},{default:f((()=>[m(B,{label:"手机号"},{default:f((()=>[m(r,{modelValue:dl.phone,"onUpdate:modelValue":a[16]||(a[16]=e=>dl.phone=e),"show-word-limit":"",clearable:"",placeholder:"请输入手机号",maxlength:"11"},{append:f((()=>[m(d,{disabled:0!==pl.value,onClick:fl},{default:f((()=>[y(C(cl.value),1)])),_:1},8,["disabled"])])),_:1},8,["modelValue"])])),_:1}),m(B,null,{default:f((()=>[m(r,{modelValue:dl.code,"onUpdate:modelValue":a[17]||(a[17]=e=>dl.code=e),"show-word-limit":"",clearable:"",placeholder:"请输入验证码",maxlength:"4"},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])])),_:1},8,["modelValue","fullscreen"]),m(T,{modelValue:tl.value,"onUpdate:modelValue":a[22]||(a[22]=e=>tl.value=e),fullscreen:b(xl),center:"",title:"修改空间上限"},{footer:f((()=>[u("span",De,[m(d,{onClick:a[21]||(a[21]=e=>tl.value=!1)},{default:f((()=>[y("取 消")])),_:1}),m(d,{type:"primary",onClick:nl},{default:f((()=>[y("确 定")])),_:1})])])),default:f((()=>[u("div",Oe,[m(D,{model:ol,"label-width":"60px"},{default:f((()=>[m(B,{label:"大小"},{default:f((()=>[m(r,{modelValue:ol.size,"onUpdate:modelValue":a[20]||(a[20]=e=>ol.size=e),"show-word-limit":"",clearable:"",placeholder:"请输入空间上限",maxlength:"4",type:"number"},{append:f((()=>[y(" GB ")])),_:1},8,["modelValue"])])),_:1})])),_:1},8,["model"])])])),_:1},8,["modelValue","fullscreen"]),m(T,{modelValue:ul.value,"onUpdate:modelValue":a[25]||(a[25]=e=>ul.value=e),fullscreen:b(xl),center:"",title:"修改空间上限"},{footer:f((()=>[u("span",qe,[m(d,{onClick:a[24]||(a[24]=e=>ul.value=!1)},{default:f((()=>[y("取 消")])),_:1}),m(d,{type:"primary",onClick:sl},{default:f((()=>[y("确 定")])),_:1})])])),default:f((()=>[u("div",Re,[m(D,{model:il,"label-width":"60px"},{default:f((()=>[m(B,{label:"余额"},{default:f((()=>[m(r,{modelValue:il.money,"onUpdate:modelValue":a[23]||(a[23]=e=>il.money=e),"show-word-limit":"",clearable:"",placeholder:"请输入新的余额",maxlength:"4",type:"number"},{append:f((()=>[y(" ¥ ")])),_:1},8,["modelValue"])])),_:1})])),_:1},8,["model"])])])),_:1},8,["modelValue","fullscreen"])])}}});e("default",F(Ne,[["__scopeId","data-v-5fb60ef4"]]))}}}));
|
|
2
|
+
//# sourceMappingURL=index-legacy-quXi4jhF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-legacy-DP3Q6cDA.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","../../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/money.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","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Money\"\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: \"M256 640v192h640V384H768v-64h150.976c14.272 0 19.456 1.472 24.64 4.288a29.056 29.056 0 0 1 12.16 12.096c2.752 5.184 4.224 10.368 4.224 24.64v493.952c0 14.272-1.472 19.456-4.288 24.64a29.056 29.056 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H233.024c-14.272 0-19.456-1.472-24.64-4.288a29.056 29.056 0 0 1-12.16-12.096c-2.688-5.184-4.224-10.368-4.224-24.576V640h64z\"\n}, null, -1);\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M768 192H128v448h640V192zm64-22.976v493.952c0 14.272-1.472 19.456-4.288 24.64a29.056 29.056 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H105.024c-14.272 0-19.456-1.472-24.64-4.288a29.056 29.056 0 0 1-12.16-12.096C65.536 682.432 64 677.248 64 663.04V169.024c0-14.272 1.472-19.456 4.288-24.64a29.056 29.056 0 0 1 12.096-12.16C85.568 129.536 90.752 128 104.96 128h685.952c14.272 0 19.456 1.472 24.64 4.288a29.056 29.056 0 0 1 12.16 12.096c2.752 5.184 4.224 10.368 4.224 24.64z\"\n}, null, -1);\nconst _hoisted_4 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M448 576a160 160 0 1 1 0-320 160 160 0 0 1 0 320zm0-64a96 96 0 1 0 0-192 96 96 0 0 0 0 192z\"\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 money = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { money as default };\n","<script lang=\"ts\" setup>\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { DeleteFilled, Message, Money, Refresh, Search } from '@element-plus/icons-vue'\nimport { useLocalStorage } from '@vueuse/core'\nimport Tip from '../../tasks/components/infoPanel/tip.vue'\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, useSiteConfig } from '@/composables'\n\nconst sumCost = ref('')\n// 用户\nconst users = reactive<SuperUserApiTypes.UserItem[]>([])\nfunction refreshUsers() {\n SuperUserApi.getUserList().then((res) => {\n users.splice(0, users.length, ...res.data.list)\n sumCost.value = res.data.sumCost\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\nconst { moneyStartDay } = useSiteConfig()\n\nfunction handleCheckDetail(price) {\n const { backhaulTrafficPrice, cdnPrice, compressPrice, ossPrice } = price\n ElMessageBox.confirm(`存储:${ossPrice}, 下载:${cdnPrice},压缩:${compressPrice},回源:${backhaulTrafficPrice}`, {\n showCancelButton: false,\n })\n}\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 <Tip>\n 预估费用:{{ sumCost }}¥,\n 计费起始时间:{{ formatDate(moneyStartDay) }}\n </Tip>\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\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=\"240\">\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>\n ¥:{{ price.total }} / {{ wallet }} = {{ balance }} <el-button\n :icon=\"Money\"\n circle\n size=\"small\"\n @click=\"handleCheckDetail(price)\"\n />\n </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","_hoisted_5","money","sumCost","ref","users","reactive","refreshUsers","SuperUserApi","getUserList","then","res","splice","length","data","list","value","ElMessage","success","userStatusType","useLocalStorage","USER_STATUS","NORMAL","searchWord","statusTypeList","label","type","FREEZE","BAN","sortType","sortTypeList","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","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","moneyStartDay","useSiteConfig","price","backhaulTrafficPrice","cdnPrice","compressPrice","ossPrice","showCancelButton","oTime","logout"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"index-legacy-quXi4jhF.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","../../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/money.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","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Money\"\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: \"M256 640v192h640V384H768v-64h150.976c14.272 0 19.456 1.472 24.64 4.288a29.056 29.056 0 0 1 12.16 12.096c2.752 5.184 4.224 10.368 4.224 24.64v493.952c0 14.272-1.472 19.456-4.288 24.64a29.056 29.056 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H233.024c-14.272 0-19.456-1.472-24.64-4.288a29.056 29.056 0 0 1-12.16-12.096c-2.688-5.184-4.224-10.368-4.224-24.576V640h64z\"\n}, null, -1);\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M768 192H128v448h640V192zm64-22.976v493.952c0 14.272-1.472 19.456-4.288 24.64a29.056 29.056 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H105.024c-14.272 0-19.456-1.472-24.64-4.288a29.056 29.056 0 0 1-12.16-12.096C65.536 682.432 64 677.248 64 663.04V169.024c0-14.272 1.472-19.456 4.288-24.64a29.056 29.056 0 0 1 12.096-12.16C85.568 129.536 90.752 128 104.96 128h685.952c14.272 0 19.456 1.472 24.64 4.288a29.056 29.056 0 0 1 12.16 12.096c2.752 5.184 4.224 10.368 4.224 24.64z\"\n}, null, -1);\nconst _hoisted_4 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M448 576a160 160 0 1 1 0-320 160 160 0 0 1 0 320zm0-64a96 96 0 1 0 0-192 96 96 0 0 0 0 192z\"\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 money = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { money as default };\n","<script lang=\"ts\" setup>\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { DeleteFilled, Message, Money, Refresh, Search } from '@element-plus/icons-vue'\nimport { useLocalStorage } from '@vueuse/core'\nimport Tip from '../../tasks/components/infoPanel/tip.vue'\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, useSiteConfig } from '@/composables'\n\nconst sumCost = ref('')\n// 用户\nconst users = reactive<SuperUserApiTypes.UserItem[]>([])\nfunction refreshUsers() {\n SuperUserApi.getUserList().then((res) => {\n users.splice(0, users.length, ...res.data.list)\n sumCost.value = res.data.sumCost\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\nconst { moneyStartDay } = useSiteConfig()\n\nfunction handleCheckDetail(price) {\n const { backhaulTrafficPrice, cdnPrice, compressPrice, ossPrice } = price\n ElMessageBox.confirm(`存储:${ossPrice}, 下载:${cdnPrice},压缩:${compressPrice},回源:${backhaulTrafficPrice}`, {\n showCancelButton: false,\n })\n}\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 <Tip>\n 预估费用:{{ sumCost }}¥,\n 计费起始时间:{{ formatDate(moneyStartDay) }}\n </Tip>\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\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=\"240\">\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>\n ¥:{{ price.total }} / {{ wallet }} = {{ balance }} <el-button\n :icon=\"Money\"\n circle\n size=\"small\"\n @click=\"handleCheckDetail(price)\"\n />\n </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","_hoisted_5","money","sumCost","ref","users","reactive","refreshUsers","SuperUserApi","getUserList","then","res","splice","length","data","list","value","ElMessage","success","userStatusType","useLocalStorage","USER_STATUS","NORMAL","searchWord","statusTypeList","label","type","FREEZE","BAN","sortType","sortTypeList","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","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","moneyStartDay","useSiteConfig","price","backhaulTrafficPrice","cdnPrice","compressPrice","ossPrice","showCancelButton","oTime","logout"],"mappings":"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","x_google_ignoreList":[0,1]}
|