@sugarat/easypicker2-client 2.7.3 → 2.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/dist/assets/aria-legacy-B70JmEZA.js.map +1 -1
  2. package/dist/assets/aria-nkjrUMQ-.js.map +1 -1
  3. package/dist/assets/config-CDHxxo7b.js +2 -0
  4. package/dist/assets/config-CDHxxo7b.js.map +1 -0
  5. package/dist/assets/config-CnEgj70a.css +1 -0
  6. package/dist/assets/config-legacy-n3sQ5kGn.js +2 -0
  7. package/dist/assets/config-legacy-n3sQ5kGn.js.map +1 -0
  8. package/dist/assets/{data-analysis-Bnq_VWU8.js → data-analysis-DBnVKJmJ.js} +2 -2
  9. package/dist/assets/data-analysis-DBnVKJmJ.js.map +1 -0
  10. package/dist/assets/{data-analysis-legacy-_KcR253K.js → data-analysis-legacy-4qD1YhB2.js} +2 -2
  11. package/dist/assets/data-analysis-legacy-4qD1YhB2.js.map +1 -0
  12. package/dist/assets/{data-board-L3s5ouKd.js → data-board-DeJXppeB.js} +2 -2
  13. package/dist/assets/data-board-DeJXppeB.js.map +1 -0
  14. package/dist/assets/{data-board-legacy-BFxWeFnQ.js → data-board-legacy-8OJulkyJ.js} +2 -2
  15. package/dist/assets/data-board-legacy-8OJulkyJ.js.map +1 -0
  16. package/dist/assets/delete-filled-DvkAD61M.js +2 -0
  17. package/dist/assets/delete-filled-DvkAD61M.js.map +1 -0
  18. package/dist/assets/delete-filled-legacy-BhHT0v2W.js +2 -0
  19. package/dist/assets/delete-filled-legacy-BhHT0v2W.js.map +1 -0
  20. package/dist/assets/el-date-picker-BX8jtnY2.js +2 -0
  21. package/dist/assets/el-date-picker-BX8jtnY2.js.map +1 -0
  22. package/dist/assets/el-date-picker-legacy-iQW0501V.js +2 -0
  23. package/dist/assets/el-date-picker-legacy-iQW0501V.js.map +1 -0
  24. package/dist/assets/el-dropdown-item-BQ-7lFIb.js +2 -0
  25. package/dist/assets/el-dropdown-item-BQ-7lFIb.js.map +1 -0
  26. package/dist/assets/el-dropdown-item-legacy-D5N_3F3d.js +2 -0
  27. package/dist/assets/el-dropdown-item-legacy-D5N_3F3d.js.map +1 -0
  28. package/dist/assets/el-empty-BZNyAlA7.js +2 -0
  29. package/dist/assets/el-empty-BZNyAlA7.js.map +1 -0
  30. package/dist/assets/el-empty-C2yupmrg.css +1 -0
  31. package/dist/assets/el-empty-legacy--8JR0M1C.js +2 -0
  32. package/dist/assets/el-empty-legacy--8JR0M1C.js.map +1 -0
  33. package/dist/assets/el-input-number-C0Bp8kfg.js +2 -0
  34. package/dist/assets/el-input-number-C0Bp8kfg.js.map +1 -0
  35. package/dist/assets/el-input-number-CU7OpiYS.css +1 -0
  36. package/dist/assets/el-input-number-legacy-CaZROy3J.js +2 -0
  37. package/dist/assets/el-input-number-legacy-CaZROy3J.js.map +1 -0
  38. package/dist/assets/{el-loading-DNzUD85e.js → el-loading-DgUVClxn.js} +2 -2
  39. package/dist/assets/el-loading-DgUVClxn.js.map +1 -0
  40. package/dist/assets/el-loading-legacy-BpxkUp1m.js +2 -0
  41. package/dist/assets/el-loading-legacy-BpxkUp1m.js.map +1 -0
  42. package/dist/assets/el-pagination-DX6u100-.js +2 -0
  43. package/dist/assets/el-pagination-DX6u100-.js.map +1 -0
  44. package/dist/assets/el-pagination-legacy-BcfQQTNs.js +2 -0
  45. package/dist/assets/el-pagination-legacy-BcfQQTNs.js.map +1 -0
  46. package/dist/assets/el-scrollbar-D2RZSJkX.js +2 -0
  47. package/dist/assets/el-scrollbar-D2RZSJkX.js.map +1 -0
  48. package/dist/assets/el-scrollbar-DFu7lMno.css +1 -0
  49. package/dist/assets/el-scrollbar-legacy-CLEobATW.js +2 -0
  50. package/dist/assets/el-scrollbar-legacy-CLEobATW.js.map +1 -0
  51. package/dist/assets/el-select-DWyBOD47.js +2 -0
  52. package/dist/assets/el-select-DWyBOD47.js.map +1 -0
  53. package/dist/assets/el-select-Dm4tLYz8.css +1 -0
  54. package/dist/assets/el-select-legacy-Cvxrwg7z.js +2 -0
  55. package/dist/assets/el-select-legacy-Cvxrwg7z.js.map +1 -0
  56. package/dist/assets/el-switch-c6xoppF3.js +2 -0
  57. package/dist/assets/el-switch-c6xoppF3.js.map +1 -0
  58. package/dist/assets/el-switch-legacy-DCF_46l4.js +2 -0
  59. package/dist/assets/el-switch-legacy-DCF_46l4.js.map +1 -0
  60. package/dist/assets/el-tab-pane-DWJdeyqN.js +2 -0
  61. package/dist/assets/el-tab-pane-DWJdeyqN.js.map +1 -0
  62. package/dist/assets/{el-tab-pane-legacy-DMdhUCHY.js → el-tab-pane-legacy-Cgd5IxXQ.js} +2 -2
  63. package/dist/assets/el-tab-pane-legacy-Cgd5IxXQ.js.map +1 -0
  64. package/dist/assets/{el-table-column-tkbtgrcD.js → el-table-column-DdhVw628.js} +3 -3
  65. package/dist/assets/el-table-column-DdhVw628.js.map +1 -0
  66. package/dist/assets/el-table-column-legacy-D1aU2dQP.js +24 -0
  67. package/dist/assets/el-table-column-legacy-D1aU2dQP.js.map +1 -0
  68. package/dist/assets/el-tag-Bgje3_SF.css +1 -0
  69. package/dist/assets/el-tag-legacy-DxOZcEw1.js +2 -0
  70. package/dist/assets/el-tag-legacy-DxOZcEw1.js.map +1 -0
  71. package/dist/assets/el-tag-uk6aooq0.js +2 -0
  72. package/dist/assets/el-tag-uk6aooq0.js.map +1 -0
  73. package/dist/assets/el-upload-B2Zxm6X5.css +1 -0
  74. package/dist/assets/el-upload-BxExG7hd.js +2 -0
  75. package/dist/assets/el-upload-BxExG7hd.js.map +1 -0
  76. package/dist/assets/el-upload-legacy-D8KH6HBU.js +2 -0
  77. package/dist/assets/el-upload-legacy-D8KH6HBU.js.map +1 -0
  78. package/dist/assets/index--nCmso-n.js +2 -0
  79. package/dist/assets/index--nCmso-n.js.map +1 -0
  80. package/dist/assets/index-2qujr45D.js +2 -0
  81. package/dist/assets/index-2qujr45D.js.map +1 -0
  82. package/dist/assets/index-6fj8rr7z.js +2 -0
  83. package/dist/assets/index-6fj8rr7z.js.map +1 -0
  84. package/dist/assets/index-8vfFTV-B.css +1 -0
  85. package/dist/assets/index-B-yBTqWJ.js +2 -0
  86. package/dist/assets/index-B-yBTqWJ.js.map +1 -0
  87. package/dist/assets/index-BC_fnfOg.js +2 -0
  88. package/dist/assets/index-BC_fnfOg.js.map +1 -0
  89. package/dist/assets/{index-C4H-Ptjt.css → index-BDkChTag.css} +1 -1
  90. package/dist/assets/index-BDsN2eKB.js +2 -0
  91. package/dist/assets/index-BDsN2eKB.js.map +1 -0
  92. package/dist/assets/index-BSIRw8UD.js +2 -0
  93. package/dist/assets/index-BSIRw8UD.js.map +1 -0
  94. package/dist/assets/index-BSMNPGJ5.css +1 -0
  95. package/dist/assets/index-BVEIUX2D.js +2 -0
  96. package/dist/assets/index-BVEIUX2D.js.map +1 -0
  97. package/dist/assets/index-BVp20vyj.css +1 -0
  98. package/dist/assets/index-BcJxc1ki.css +1 -0
  99. package/dist/assets/index-BgihxBmj.css +1 -0
  100. package/dist/assets/index-BjSgvXxj.css +1 -0
  101. package/dist/assets/index-BmheqIC4.js +2 -0
  102. package/dist/assets/index-BmheqIC4.js.map +1 -0
  103. package/dist/assets/index-BrOLxzFM.js.map +1 -1
  104. package/dist/assets/{index-ehQnwCE_.css → index-Bxvzu7zF.css} +1 -1
  105. package/dist/assets/index-CFpIdG49.css +1 -0
  106. package/dist/assets/index-CKVj2mCd.js +2 -0
  107. package/dist/assets/index-CKVj2mCd.js.map +1 -0
  108. package/dist/assets/index-CLt64lxI.js +2 -0
  109. package/dist/assets/index-CLt64lxI.js.map +1 -0
  110. package/dist/assets/index-COI3CDfm.js +2 -0
  111. package/dist/assets/index-COI3CDfm.js.map +1 -0
  112. package/dist/assets/index-CQud0ONT.css +1 -0
  113. package/dist/assets/index-CkyNID7q.css +1 -0
  114. package/dist/assets/index-CsTsOuFs.js +2 -0
  115. package/dist/assets/index-CsTsOuFs.js.map +1 -0
  116. package/dist/assets/index-CsfbnGni.css +1 -0
  117. package/dist/assets/index-D5EKLT5I.js +2 -0
  118. package/dist/assets/index-D5EKLT5I.js.map +1 -0
  119. package/dist/assets/index-D94P-51I.css +1 -0
  120. package/dist/assets/index-DBQzOZB-.js +23 -0
  121. package/dist/assets/index-DBQzOZB-.js.map +1 -0
  122. package/dist/assets/index-DC08DNQQ.js +2 -0
  123. package/dist/assets/index-DC08DNQQ.js.map +1 -0
  124. package/dist/assets/index-DLuR61Hw.css +1 -0
  125. package/dist/assets/index-DT7ciPLb.js +2 -0
  126. package/dist/assets/index-DT7ciPLb.js.map +1 -0
  127. package/dist/assets/index-DYTxk2nM.js +2 -0
  128. package/dist/assets/index-DYTxk2nM.js.map +1 -0
  129. package/dist/assets/index-DbhWmXsj.js +40 -0
  130. package/dist/assets/index-DbhWmXsj.js.map +1 -0
  131. package/dist/assets/index-DcUtl6Nq.css +1 -0
  132. package/dist/assets/index-DpoyDAhf.js +2 -0
  133. package/dist/assets/index-DpoyDAhf.js.map +1 -0
  134. package/dist/assets/index-Ds7mlGo_.js +2 -0
  135. package/dist/assets/index-Ds7mlGo_.js.map +1 -0
  136. package/dist/assets/index-FISBGs_l.css +1 -0
  137. package/dist/assets/index-FkvPFOBZ.js +2 -0
  138. package/dist/assets/index-FkvPFOBZ.js.map +1 -0
  139. package/dist/assets/index-HJwe3MZ4.js +2 -0
  140. package/dist/assets/index-HJwe3MZ4.js.map +1 -0
  141. package/dist/assets/index-LKJh-8oZ.css +1 -0
  142. package/dist/assets/index-Q8b92C8V.css +1 -0
  143. package/dist/assets/index-legacy-0p9exu0M.js +2 -0
  144. package/dist/assets/index-legacy-0p9exu0M.js.map +1 -0
  145. package/dist/assets/index-legacy-2gZknrAr.js +2 -0
  146. package/dist/assets/index-legacy-2gZknrAr.js.map +1 -0
  147. package/dist/assets/index-legacy-AH8uXlwH.js +2 -0
  148. package/dist/assets/index-legacy-AH8uXlwH.js.map +1 -0
  149. package/dist/assets/index-legacy-BTvagK_v.js +2 -0
  150. package/dist/assets/index-legacy-BTvagK_v.js.map +1 -0
  151. package/dist/assets/index-legacy-BUrH0Ubh.js +2 -0
  152. package/dist/assets/index-legacy-BUrH0Ubh.js.map +1 -0
  153. package/dist/assets/index-legacy-BVk27mxb.js +2 -0
  154. package/dist/assets/index-legacy-BVk27mxb.js.map +1 -0
  155. package/dist/assets/index-legacy-BnfLqgKz.js +2 -0
  156. package/dist/assets/index-legacy-BnfLqgKz.js.map +1 -0
  157. package/dist/assets/index-legacy-BsWj1xV2.js +54 -0
  158. package/dist/assets/index-legacy-BsWj1xV2.js.map +1 -0
  159. package/dist/assets/index-legacy-Bvis80MO.js +2 -0
  160. package/dist/assets/index-legacy-Bvis80MO.js.map +1 -0
  161. package/dist/assets/index-legacy-BxqvVJh6.js +16 -0
  162. package/dist/assets/index-legacy-BxqvVJh6.js.map +1 -0
  163. package/dist/assets/index-legacy-C-gHf8SN.js.map +1 -1
  164. package/dist/assets/index-legacy-C8OALizf.js +2 -0
  165. package/dist/assets/index-legacy-C8OALizf.js.map +1 -0
  166. package/dist/assets/index-legacy-Ca1NdJPm.js +2 -0
  167. package/dist/assets/index-legacy-Ca1NdJPm.js.map +1 -0
  168. package/dist/assets/index-legacy-D3Gbb8pX.js +2 -0
  169. package/dist/assets/index-legacy-D3Gbb8pX.js.map +1 -0
  170. package/dist/assets/index-legacy-DFUJlpQR.js +2 -0
  171. package/dist/assets/index-legacy-DFUJlpQR.js.map +1 -0
  172. package/dist/assets/index-legacy-DNPnYZJW.js +2 -0
  173. package/dist/assets/index-legacy-DNPnYZJW.js.map +1 -0
  174. package/dist/assets/index-legacy-DaUa56O-.js +2 -0
  175. package/dist/assets/index-legacy-DaUa56O-.js.map +1 -0
  176. package/dist/assets/index-legacy-DqfRlqrq.js +2 -0
  177. package/dist/assets/index-legacy-DqfRlqrq.js.map +1 -0
  178. package/dist/assets/index-legacy-DyJmAPRK.js +2 -0
  179. package/dist/assets/index-legacy-DyJmAPRK.js.map +1 -0
  180. package/dist/assets/index-legacy-DziFQjpX.js +2 -0
  181. package/dist/assets/index-legacy-DziFQjpX.js.map +1 -0
  182. package/dist/assets/index-legacy-N9COO-uZ.js +2 -0
  183. package/dist/assets/index-legacy-N9COO-uZ.js.map +1 -0
  184. package/dist/assets/index-legacy-P9gt2mpu.js +2 -0
  185. package/dist/assets/index-legacy-P9gt2mpu.js.map +1 -0
  186. package/dist/assets/index-legacy-c8lop5xr.js +2 -0
  187. package/dist/assets/index-legacy-c8lop5xr.js.map +1 -0
  188. package/dist/assets/index-legacy-npRizjoU.js +2 -0
  189. package/dist/assets/index-legacy-npRizjoU.js.map +1 -0
  190. package/dist/assets/index-legacy-xL9mLEDR.js +2 -0
  191. package/dist/assets/index-legacy-xL9mLEDR.js.map +1 -0
  192. package/dist/assets/index-mtfctTgx.css +1 -0
  193. package/dist/assets/index-oKiyEdt0.js +2 -0
  194. package/dist/assets/index-oKiyEdt0.js.map +1 -0
  195. package/dist/assets/linkDialog-D30VnNS0.js +2 -0
  196. package/dist/assets/linkDialog-D30VnNS0.js.map +1 -0
  197. package/dist/assets/linkDialog-Dida934t.css +1 -0
  198. package/dist/assets/linkDialog-legacy-CCHpjX0B.js +2 -0
  199. package/dist/assets/linkDialog-legacy-CCHpjX0B.js.map +1 -0
  200. package/dist/assets/other-BiIe9Z0L.js +2 -0
  201. package/dist/assets/other-BiIe9Z0L.js.map +1 -0
  202. package/dist/assets/other-legacy-Bfm4KL87.js +2 -0
  203. package/dist/assets/other-legacy-Bfm4KL87.js.map +1 -0
  204. package/dist/assets/polyfills-legacy-DqO_DCwg.js +1 -0
  205. package/dist/assets/{refresh-DPuuDO9h.js → refresh-Cccf8YoS.js} +2 -2
  206. package/dist/assets/refresh-Cccf8YoS.js.map +1 -0
  207. package/dist/assets/{refresh-legacy-DOts-8Wc.js → refresh-legacy-BwFA7z7t.js} +2 -2
  208. package/dist/assets/refresh-legacy-BwFA7z7t.js.map +1 -0
  209. package/dist/assets/tip-Nu5QmDDd.js +2 -0
  210. package/dist/assets/tip-Nu5QmDDd.js.map +1 -0
  211. package/dist/assets/tip-legacy-D_0YSCxT.js +2 -0
  212. package/dist/assets/tip-legacy-D_0YSCxT.js.map +1 -0
  213. package/dist/assets/tipInfo-BPHCIpRm.css +1 -0
  214. package/dist/assets/tipInfo-D75KJpWg.js +2 -0
  215. package/dist/assets/tipInfo-D75KJpWg.js.map +1 -0
  216. package/dist/assets/tipInfo-legacy-CV235bKZ.js +2 -0
  217. package/dist/assets/tipInfo-legacy-CV235bKZ.js.map +1 -0
  218. package/dist/index.html +105 -128
  219. package/package.json +13 -34
  220. package/README.md +0 -86
  221. package/dist/assets/data-analysis-Bnq_VWU8.js.map +0 -1
  222. package/dist/assets/data-analysis-legacy-_KcR253K.js.map +0 -1
  223. package/dist/assets/data-board-L3s5ouKd.js.map +0 -1
  224. package/dist/assets/data-board-legacy-BFxWeFnQ.js.map +0 -1
  225. package/dist/assets/el-date-picker-legacy-Uk9x97L5.js +0 -2
  226. package/dist/assets/el-date-picker-legacy-Uk9x97L5.js.map +0 -1
  227. package/dist/assets/el-date-picker-mhY2RJMG.js +0 -2
  228. package/dist/assets/el-date-picker-mhY2RJMG.js.map +0 -1
  229. package/dist/assets/el-dialog-Cu2jwelC.css +0 -1
  230. package/dist/assets/el-dialog-PRccau6N.js +0 -2
  231. package/dist/assets/el-dialog-PRccau6N.js.map +0 -1
  232. package/dist/assets/el-dialog-legacy-BRLM43ZY.js +0 -2
  233. package/dist/assets/el-dialog-legacy-BRLM43ZY.js.map +0 -1
  234. package/dist/assets/el-dropdown-item-Cr71teRg.js +0 -2
  235. package/dist/assets/el-dropdown-item-Cr71teRg.js.map +0 -1
  236. package/dist/assets/el-dropdown-item-legacy-B0ufpHvy.js +0 -2
  237. package/dist/assets/el-dropdown-item-legacy-B0ufpHvy.js.map +0 -1
  238. package/dist/assets/el-form-item-Cc9R0dZ1.css +0 -1
  239. package/dist/assets/el-form-item-DOwM4Mv8.js +0 -2
  240. package/dist/assets/el-form-item-DOwM4Mv8.js.map +0 -1
  241. package/dist/assets/el-form-item-legacy-CvQy7syv.js +0 -2
  242. package/dist/assets/el-form-item-legacy-CvQy7syv.js.map +0 -1
  243. package/dist/assets/el-loading-DNzUD85e.js.map +0 -1
  244. package/dist/assets/el-loading-legacy-B3RLcjwN.js +0 -2
  245. package/dist/assets/el-loading-legacy-B3RLcjwN.js.map +0 -1
  246. package/dist/assets/el-pagination-iCicJonH.js +0 -2
  247. package/dist/assets/el-pagination-iCicJonH.js.map +0 -1
  248. package/dist/assets/el-pagination-legacy-Bf-Bzx7n.js +0 -2
  249. package/dist/assets/el-pagination-legacy-Bf-Bzx7n.js.map +0 -1
  250. package/dist/assets/el-progress-1hLO5hs0.js +0 -2
  251. package/dist/assets/el-progress-1hLO5hs0.js.map +0 -1
  252. package/dist/assets/el-progress-legacy-QmxDezwR.js +0 -2
  253. package/dist/assets/el-progress-legacy-QmxDezwR.js.map +0 -1
  254. package/dist/assets/el-progress-njCW9-w4.css +0 -1
  255. package/dist/assets/el-select-BSO0hXRI.css +0 -1
  256. package/dist/assets/el-select-CVjQdC39.js +0 -2
  257. package/dist/assets/el-select-CVjQdC39.js.map +0 -1
  258. package/dist/assets/el-select-legacy-DSGgSQYX.js +0 -2
  259. package/dist/assets/el-select-legacy-DSGgSQYX.js.map +0 -1
  260. package/dist/assets/el-switch-B76QvbJN.js +0 -2
  261. package/dist/assets/el-switch-B76QvbJN.js.map +0 -1
  262. package/dist/assets/el-switch-legacy-CHkEgavQ.js +0 -2
  263. package/dist/assets/el-switch-legacy-CHkEgavQ.js.map +0 -1
  264. package/dist/assets/el-tab-pane-BhVByOfe.js +0 -2
  265. package/dist/assets/el-tab-pane-BhVByOfe.js.map +0 -1
  266. package/dist/assets/el-tab-pane-legacy-DMdhUCHY.js.map +0 -1
  267. package/dist/assets/el-table-column-legacy-N_oU_-0P.js +0 -24
  268. package/dist/assets/el-table-column-legacy-N_oU_-0P.js.map +0 -1
  269. package/dist/assets/el-table-column-tkbtgrcD.js.map +0 -1
  270. package/dist/assets/index-3yen43So.js +0 -2
  271. package/dist/assets/index-3yen43So.js.map +0 -1
  272. package/dist/assets/index-5sS3uHi0.css +0 -1
  273. package/dist/assets/index-9zuSLjpa.js +0 -2
  274. package/dist/assets/index-9zuSLjpa.js.map +0 -1
  275. package/dist/assets/index-B-6zRvEX.js +0 -2
  276. package/dist/assets/index-B-6zRvEX.js.map +0 -1
  277. package/dist/assets/index-B5tZv3FB.css +0 -1
  278. package/dist/assets/index-BN1f1UM3.js +0 -2
  279. package/dist/assets/index-BN1f1UM3.js.map +0 -1
  280. package/dist/assets/index-BUmkgniE.js +0 -2
  281. package/dist/assets/index-BUmkgniE.js.map +0 -1
  282. package/dist/assets/index-BbfnoqK6.js +0 -2
  283. package/dist/assets/index-BbfnoqK6.js.map +0 -1
  284. package/dist/assets/index-BghihfR3.css +0 -1
  285. package/dist/assets/index-C3IckGNL.js +0 -2
  286. package/dist/assets/index-C3IckGNL.js.map +0 -1
  287. package/dist/assets/index-CYAf_OTx.js +0 -40
  288. package/dist/assets/index-CYAf_OTx.js.map +0 -1
  289. package/dist/assets/index-Cb6-p2hG.js +0 -2
  290. package/dist/assets/index-Cb6-p2hG.js.map +0 -1
  291. package/dist/assets/index-CbkKWoQA.css +0 -1
  292. package/dist/assets/index-CeWnhlkq.css +0 -1
  293. package/dist/assets/index-Cfg2jkVw.css +0 -1
  294. package/dist/assets/index-CkMvb3wF.css +0 -1
  295. package/dist/assets/index-Cl4G6EQO.js +0 -2
  296. package/dist/assets/index-Cl4G6EQO.js.map +0 -1
  297. package/dist/assets/index-CnbFxlpi.css +0 -1
  298. package/dist/assets/index-Cyb1OjRN.js +0 -2
  299. package/dist/assets/index-Cyb1OjRN.js.map +0 -1
  300. package/dist/assets/index-D2p3cWtM.css +0 -1
  301. package/dist/assets/index-D7aZxhM6.js +0 -2
  302. package/dist/assets/index-D7aZxhM6.js.map +0 -1
  303. package/dist/assets/index-DI41wbky.js +0 -2
  304. package/dist/assets/index-DI41wbky.js.map +0 -1
  305. package/dist/assets/index-DaSb9EV4.css +0 -1
  306. package/dist/assets/index-DcOjlpKI.js +0 -2
  307. package/dist/assets/index-DcOjlpKI.js.map +0 -1
  308. package/dist/assets/index-DjO-nUIS.js +0 -2
  309. package/dist/assets/index-DjO-nUIS.js.map +0 -1
  310. package/dist/assets/index-DnxF29eG.css +0 -1
  311. package/dist/assets/index-DrKX0cCg.js +0 -2
  312. package/dist/assets/index-DrKX0cCg.js.map +0 -1
  313. package/dist/assets/index-F3S0vKOW.js +0 -2
  314. package/dist/assets/index-F3S0vKOW.js.map +0 -1
  315. package/dist/assets/index-I78Ur1Md.js +0 -2
  316. package/dist/assets/index-I78Ur1Md.js.map +0 -1
  317. package/dist/assets/index-L0LtrfyP.js +0 -2
  318. package/dist/assets/index-L0LtrfyP.js.map +0 -1
  319. package/dist/assets/index-XNFQHmLL.css +0 -1
  320. package/dist/assets/index-dEAnfrhp.css +0 -1
  321. package/dist/assets/index-hhTdfxnD.css +0 -1
  322. package/dist/assets/index-lTmxAqnX.js +0 -2
  323. package/dist/assets/index-lTmxAqnX.js.map +0 -1
  324. package/dist/assets/index-legacy-BJNK4MqF.js +0 -2
  325. package/dist/assets/index-legacy-BJNK4MqF.js.map +0 -1
  326. package/dist/assets/index-legacy-BLlk8iq-.js +0 -42
  327. package/dist/assets/index-legacy-BLlk8iq-.js.map +0 -1
  328. package/dist/assets/index-legacy-BmWYm3m_.js +0 -2
  329. package/dist/assets/index-legacy-BmWYm3m_.js.map +0 -1
  330. package/dist/assets/index-legacy-Bnp7569A.js +0 -2
  331. package/dist/assets/index-legacy-Bnp7569A.js.map +0 -1
  332. package/dist/assets/index-legacy-CQ24Si-w.js +0 -2
  333. package/dist/assets/index-legacy-CQ24Si-w.js.map +0 -1
  334. package/dist/assets/index-legacy-CT1nF7s9.js +0 -2
  335. package/dist/assets/index-legacy-CT1nF7s9.js.map +0 -1
  336. package/dist/assets/index-legacy-CeVzo60P.js +0 -2
  337. package/dist/assets/index-legacy-CeVzo60P.js.map +0 -1
  338. package/dist/assets/index-legacy-Cf0w_PNA.js +0 -2
  339. package/dist/assets/index-legacy-Cf0w_PNA.js.map +0 -1
  340. package/dist/assets/index-legacy-DZSQUiaj.js +0 -2
  341. package/dist/assets/index-legacy-DZSQUiaj.js.map +0 -1
  342. package/dist/assets/index-legacy-D_K0eXFb.js +0 -2
  343. package/dist/assets/index-legacy-D_K0eXFb.js.map +0 -1
  344. package/dist/assets/index-legacy-Da3YyHW_.js +0 -2
  345. package/dist/assets/index-legacy-Da3YyHW_.js.map +0 -1
  346. package/dist/assets/index-legacy-Da4s_D85.js +0 -2
  347. package/dist/assets/index-legacy-Da4s_D85.js.map +0 -1
  348. package/dist/assets/index-legacy-DhNaKknk.js +0 -2
  349. package/dist/assets/index-legacy-DhNaKknk.js.map +0 -1
  350. package/dist/assets/index-legacy-Dm1CXog1.js +0 -2
  351. package/dist/assets/index-legacy-Dm1CXog1.js.map +0 -1
  352. package/dist/assets/index-legacy-DpNNn-Dy.js +0 -2
  353. package/dist/assets/index-legacy-DpNNn-Dy.js.map +0 -1
  354. package/dist/assets/index-legacy-PkF4cKK9.js +0 -2
  355. package/dist/assets/index-legacy-PkF4cKK9.js.map +0 -1
  356. package/dist/assets/index-legacy-QHDmYAB8.js +0 -2
  357. package/dist/assets/index-legacy-QHDmYAB8.js.map +0 -1
  358. package/dist/assets/index-legacy-_M1-0586.js +0 -2
  359. package/dist/assets/index-legacy-_M1-0586.js.map +0 -1
  360. package/dist/assets/index-legacy-m0dvnwGi.js +0 -2
  361. package/dist/assets/index-legacy-m0dvnwGi.js.map +0 -1
  362. package/dist/assets/index-legacy-vRS79jKS.js +0 -2
  363. package/dist/assets/index-legacy-vRS79jKS.js.map +0 -1
  364. package/dist/assets/index-ypHH_Z_A.css +0 -1
  365. package/dist/assets/isEqual-BHpVKj_X.js +0 -2
  366. package/dist/assets/isEqual-BHpVKj_X.js.map +0 -1
  367. package/dist/assets/isEqual-legacy-BWUPR8bV.js +0 -2
  368. package/dist/assets/isEqual-legacy-BWUPR8bV.js.map +0 -1
  369. package/dist/assets/other-legacy-DjiCmSH4.js +0 -2
  370. package/dist/assets/other-legacy-DjiCmSH4.js.map +0 -1
  371. package/dist/assets/other-yMAyytYx.js +0 -2
  372. package/dist/assets/other-yMAyytYx.js.map +0 -1
  373. package/dist/assets/polyfills-legacy-CPmsgIAF.js +0 -4
  374. package/dist/assets/refresh-DPuuDO9h.js.map +0 -1
  375. package/dist/assets/refresh-legacy-DOts-8Wc.js.map +0 -1
  376. package/dist/assets/tip-CH7nBVXc.js +0 -2
  377. package/dist/assets/tip-CH7nBVXc.js.map +0 -1
  378. package/dist/assets/tip-legacy-DiCk_qP1.js +0 -2
  379. package/dist/assets/tip-legacy-DiCk_qP1.js.map +0 -1
  380. package/dist/assets/validator-BMr-jeUB.js +0 -2
  381. package/dist/assets/validator-BMr-jeUB.js.map +0 -1
  382. package/dist/assets/validator-legacy-CacjPWoF.js +0 -2
  383. package/dist/assets/validator-legacy-CacjPWoF.js.map +0 -1
  384. /package/dist/assets/{el-date-picker-NjWHL2Br.css → el-date-picker-C36c2CGO.css} +0 -0
  385. /package/dist/assets/{el-dropdown-item-CUgTpiu6.css → el-dropdown-item-5b6bMUQF.css} +0 -0
  386. /package/dist/assets/{el-loading-Uv12lkco.css → el-loading-BPl8mdQ3.css} +0 -0
  387. /package/dist/assets/{el-pagination-MvCAleW2.css → el-pagination-DMHBWKFj.css} +0 -0
  388. /package/dist/assets/{el-switch-D6dVIPlw.css → el-switch-CH9HekZJ.css} +0 -0
  389. /package/dist/assets/{el-tab-pane-kUw7IczA.css → el-tab-pane-CO1C5qCV.css} +0 -0
  390. /package/dist/assets/{el-table-column-DMXHP8sd.css → el-table-column-x3grTP_N.css} +0 -0
  391. /package/dist/assets/{tip-ovQu2XSt.css → tip-rRSL6nZ2.css} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CKVj2mCd.js","sources":["../../src/apis/modules/action.ts","../../../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.5.12_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/download.mjs","../../../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.5.12_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/picture.mjs","../../src/composables/user.ts","../../src/pages/dashboard/files/index.vue"],"sourcesContent":["import ajax from '../ajax'\n\nfunction getDownloadActions(\n pageSize: number,\n pageIndex: number,\n extraIds: string[] = [],\n): ActionApiTypes.getDownloadActions {\n return ajax.post('/action/download/list', {\n pageSize,\n pageIndex,\n extraIds,\n })\n}\n\nexport default {\n getDownloadActions,\n}\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Download\"\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: \"M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64zm384-253.696 236.288-236.352 45.248 45.248L508.8 704 192 387.2l45.248-45.248L480 584.704V128h64v450.304z\"\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 download = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { download 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: \"Picture\"\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: \"M160 160v704h704V160H160zm-32-64h768a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H128a32 32 0 0 1-32-32V128a32 32 0 0 1 32-32z\"\n}, null, -1);\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M384 288q64 0 64 64t-64 64q-64 0-64-64t64-64zM185.408 876.992l-50.816-38.912L350.72 556.032a96 96 0 0 1 134.592-17.856l1.856 1.472 122.88 99.136a32 32 0 0 0 44.992-4.864l216-269.888 49.92 39.936-215.808 269.824-.256.32a96 96 0 0 1-135.04 14.464l-122.88-99.072-.64-.512a32 32 0 0 0-44.8 5.952L185.408 876.992z\"\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 picture = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { picture as default };\n","import { computed, onMounted, reactive } from 'vue'\nimport { UserApi } from '@/apis'\nimport { formatSize } from '@/utils/stringUtil'\n\nexport function useSpaceUsage() {\n const usageData = reactive({\n size: 0,\n usage: 0,\n limitUpload: false,\n wallet: '0:00',\n cost: '0.00',\n limitSpace: false,\n limitWallet: false,\n price: {\n storage: '0:00',\n download: '0:00',\n },\n })\n const usage = computed(() => usageData.usage)\n const size = computed(() => usageData.size)\n const wallet = computed(() => usageData.wallet)\n const cost = computed(() => usageData.cost)\n const percentageValue = computed(() => usageData.size ? +(usageData.usage / usageData.size * 100).toFixed(2) : 0)\n const walletPercentageValue = computed(() => +usageData.wallet ? +(+usageData.cost / +usageData.wallet * 100).toFixed(2) : 0)\n const percentage = computed(() => `${percentageValue.value.toFixed(2)}%`)\n const walletPercentage = computed(() => `${walletPercentageValue.value.toFixed(2)}%`)\n const limitDownload = computed(() => usageData.limitUpload)\n const limitSpace = computed(() => usageData.limitSpace)\n const limitWallet = computed(() => usageData.limitWallet)\n const spaceUsageText = computed(() => {\n return `空间 ${percentage.value}: ${formatSize(usageData.usage)} / ${formatSize(usageData.size)}`\n })\n const moneyUsageText = computed(() => {\n return `钱包 ${walletPercentage.value}: ${usageData.cost} / ${usageData.wallet}¥`\n })\n const priceText = computed(() => {\n return `存储 ${usageData.price.storage}¥ + 下载 ${usageData.price.download}¥`\n })\n\n onMounted(() => {\n UserApi.usage().then((res) => {\n Object.assign(usageData, res.data)\n })\n })\n return {\n usage,\n size,\n wallet,\n cost,\n percentageValue,\n walletPercentageValue,\n percentage,\n walletPercentage,\n limitDownload,\n limitSpace,\n limitWallet,\n spaceUsageText,\n moneyUsageText,\n priceText,\n }\n}\n","<script lang=\"ts\" setup>\nimport type { tableItem } from '@/utils/networkUtil'\nimport LinkDialog from '@components/linkDialog.vue'\nimport {\n ArrowDown,\n DataAnalysis,\n Download,\n Picture,\n Refresh,\n Search,\n} from '@element-plus/icons-vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { computed, onMounted, reactive, ref, watch, watchEffect } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { useStore } from 'vuex'\nimport { ActionServiceAPI, FileApi } from '@/apis'\nimport FloatingContact from '@/components/FloatingContact/index.vue'\nimport InfosForm from '@/components/InfosForm/index.vue'\nimport { useIsMobile, useSiteConfig, useSpaceUsage } from '@/composables'\nimport { ActionType, DownloadStatus, filenamePattern } from '@/constants'\nimport { downLoadByUrl, tableToExcel } from '@/utils/networkUtil'\nimport {\n copyRes,\n formatDate,\n formatSize,\n getFileSuffix,\n normalizeFileName,\n parseInfo,\n} from '@/utils/stringUtil'\nimport Tip from '../tasks/components/infoPanel/tip.vue'\n\nconst { value: siteConfig } = useSiteConfig()\nconst isOpenPraise = computed(() => siteConfig.value.openPraise)\nconst showStorageLimit = computed(() => siteConfig.value.limitSpace)\nconst showWalletLimit = computed(() => siteConfig.value.limitWallet)\nconst showResourceLimitNotice = computed(\n () => isOpenPraise.value && (showStorageLimit.value || showWalletLimit.value),\n)\n\nconst {\n usage,\n size,\n wallet,\n cost,\n percentageValue,\n walletPercentageValue,\n limitDownload,\n limitSpace,\n limitWallet,\n priceText,\n} = useSpaceUsage()\n\nconst $store = useStore()\nconst $route = useRoute()\nconst showLinkModel = ref(false)\nconst downloadUrl = ref('')\nconst showImg = ref(localStorage.getItem('ep-show-images') !== 'false')\nconst showPeople = ref(true)\nconst showOriginName = ref(false)\nconst showHistoryPanel = ref(false)\nconst historyDownloadRecord = reactive({\n actions: [],\n pageSize: 3,\n /**\n * 总页数\n */\n pageCount: 0,\n pageCurrent: 1,\n pageTotal: 0,\n compressTask: [],\n})\n\nfunction loadActions() {\n // 已记录的task\n const compressTask: ActionApiTypes.DownloadActionData[] = JSON.parse(\n localStorage.getItem('ep_compress_task') || '[]',\n )\n historyDownloadRecord.compressTask = compressTask\n\n ActionServiceAPI.getDownloadActions(\n historyDownloadRecord.pageSize,\n historyDownloadRecord.pageCurrent,\n compressTask.map(v => v.id),\n ).then((v) => {\n const { actions, sum } = v.data\n const haveArchive = actions.some(v => v.status === DownloadStatus.ARCHIVE)\n\n actions\n .filter(v => v.type === ActionType.Compress)\n .forEach((action) => {\n const existIndex = compressTask.findIndex(v => v.id === action.id)\n // 判断状态\n // SUCCESS\n // 存在,触发下载,从compressTask移除\n if (action.status === DownloadStatus.SUCCESS && existIndex !== -1) {\n // 展示弹窗\n downloadUrl.value = action.url\n showLinkModel.value = true\n downLoadByUrl(action.url)\n // ElMessage.success(`自动下载归档任务 ${action.tip}`)\n compressTask.splice(existIndex, 1)\n }\n // Archive\n // 不存在,push进compressTask\n if (action.status === DownloadStatus.ARCHIVE && existIndex === -1) {\n compressTask.push(action)\n }\n\n // ERROR\n if (action.status === DownloadStatus.FAIL && existIndex !== -1) {\n compressTask.splice(existIndex, 1)\n }\n })\n // TODO:之后根据反馈优化\n historyDownloadRecord.compressTask = compressTask\n localStorage.setItem('ep_compress_task', JSON.stringify(compressTask))\n if (haveArchive) {\n // 递归查询\n setTimeout(loadActions, 1000)\n }\n historyDownloadRecord.pageTotal = sum\n historyDownloadRecord.actions = actions\n historyDownloadRecord.pageCount = Math.ceil(\n sum / historyDownloadRecord.pageSize,\n )\n })\n}\nfunction handleHistoryActionPageChange(v) {\n historyDownloadRecord.pageCurrent = v\n loadActions()\n}\n\n// 分类相关\nconst categories = computed(() => $store.state.category.categoryList)\nconst selectCategory = ref('all')\n// 任务相关\nconst tasks = computed<TaskApiTypes.TaskItem[]>(\n () => $store.state.task.taskList,\n)\nconst selectTask = ref('all')\nconst filterTasks = computed(() => {\n if (selectCategory.value === 'all') {\n return tasks.value\n }\n // eslint-disable-next-line vue/no-side-effects-in-computed-properties\n selectTask.value = 'all'\n return tasks.value.filter(t => t.category === selectCategory.value)\n})\nconst selectTaskName = computed(() => {\n const t = filterTasks.value.find(v => v.key === selectTask.value)\n return t?.name\n})\n\nwatchEffect(() => {\n if (\n tasks.value.length\n && tasks.value.some(v => v.key === $route.query.task)\n ) {\n selectTask.value = `${$route.query.task}`\n }\n})\n\n// 记录导出\nfunction handleExportExcel(files: FileApiTypes.File[], filename?: string) {\n if (files.length === 0) {\n ElMessage.warning('表格中没有可导出的内容')\n return\n }\n const baseHeaders = ['提交时间', '任务', '文件名', '大小']\n if (showOriginName.value) {\n baseHeaders.push('原文件名')\n }\n if (showPeople.value) {\n baseHeaders.push('姓名')\n }\n const headers: (string | tableItem)[] = baseHeaders.map(v => ({\n value: v,\n row: 2,\n }))\n\n const infosHeader = files.reduce((pre, value) => {\n try {\n JSON.parse(value.info).forEach((i: any) => {\n if (!pre.includes(i.text)) {\n pre.push(i.text)\n }\n })\n }\n catch {\n ElMessage.error({\n message: `数据异常${value.name},可联系平台管理员处理`,\n duration: 5000,\n })\n console.warn(value)\n }\n return pre\n }, [])\n headers.push({\n value: '提交信息',\n col: infosHeader.length,\n })\n\n const body = files.map((v) => {\n const { date, task_name: taskName, name, size, people } = v\n try {\n const infoObj = JSON.parse(v.info).reduce((pre, v) => {\n pre[v.text] = `${v.value}`\n return pre\n }, {})\n const info = infosHeader.map(v => infoObj[v] ?? '-')\n const rows = [formatDate(new Date(date)), taskName, name, formatSize(size)]\n if (showOriginName.value) {\n rows.push(v.origin_name || '-')\n }\n if (showPeople.value) {\n rows.push(people || '-')\n }\n rows.push(...info)\n return rows\n }\n catch {\n ElMessage.error({\n message: `数据异常${v.name},可联系平台管理员处理`,\n duration: 5000,\n })\n console.warn(v)\n }\n return []\n }).filter(v => !!v.length)\n body.unshift(infosHeader)\n\n const _filename = filename || `数据导出_${formatDate(new Date(), 'yyyy年MM月dd日hh时mm分ss秒')}.xlsx`\n const resFileName = selectTaskName.value ? `${normalizeFileName(selectTaskName.value)}_${_filename}` : _filename\n\n tableToExcel(\n headers,\n body,\n resFileName,\n )\n ElMessage.success('导出成功')\n}\n\nconst isLoadingData = ref(false)\n// 提交的所有文件\nconst files: FileApiTypes.File[] = reactive([])\nconst searchWord = ref('')\n// 分页\nconst pageSize = ref(6)\n// 当前页\nconst pageCurrent = ref(1)\nconst fileTotal = ref(0)\nconst filePageCount = ref(0)\nconst fileListTotalSize = ref(0)\nconst filterFileTotalSize = ref(0)\nlet loadFilesId = 0\nfunction loadFiles() {\n const currentLoadId = ++loadFilesId\n isLoadingData.value = true\n files.splice(0, files.length)\n FileApi.getFilePage({\n pageIndex: pageCurrent.value,\n pageSize: pageSize.value,\n categoryKey: selectCategory.value,\n taskKey: selectTask.value,\n keyword: searchWord.value,\n })\n .then((res) => {\n if (currentLoadId !== loadFilesId) {\n return\n }\n const { data } = res\n files.push(...data.files)\n fileTotal.value = data.total\n filePageCount.value = data.pageCount\n fileListTotalSize.value = data.totalSize\n filterFileTotalSize.value = data.filterSize\n })\n .finally(() => {\n if (currentLoadId === loadFilesId) {\n isLoadingData.value = false\n }\n })\n}\nasync function loadFilesForExport() {\n const exportFiles: FileApiTypes.File[] = []\n let pageIndex = 1\n let pageCount = 1\n do {\n const { data } = await FileApi.getFilePage({\n pageIndex,\n pageSize: 100,\n categoryKey: selectCategory.value,\n taskKey: selectTask.value,\n keyword: searchWord.value,\n })\n exportFiles.push(...data.files)\n pageCount = data.pageCount\n pageIndex += 1\n } while (pageIndex <= pageCount)\n return exportFiles\n}\nasync function handleExportFilterFiles() {\n const exportFiles = await loadFilesForExport()\n handleExportExcel(\n exportFiles,\n `筛选数据导出_${formatDate(\n new Date(),\n 'yyyy年MM月dd日hh时mm分ss秒',\n )}.xlsx`,\n )\n}\nconst multipleTable: any = ref()\n\nconst showFilterFiles = computed(() => files)\n\n/**\n * 清空所有选项\n */\nfunction clearSelection() {\n multipleTable.value.clearSelection()\n}\n// 多选选中的项\nconst selectItem: any[] = reactive([])\nfunction handleSelectionChange(e: any) {\n selectItem.splice(0, selectItem.length)\n selectItem.push(...e)\n}\nconst batchDownStart = ref(false)\nfunction handleDropdownClick(e: string) {\n const ids: number[] = selectItem.map(v => v.id)\n switch (e) {\n case 'download':\n if (limitDownload.value) {\n ElMessage.error('下载功能已被限制,请联系管理员扩容,或自行删除历史无用文件')\n return\n }\n if (selectItem.length === 0) {\n ElMessage.warning('没有选中需要下载的内容')\n return\n }\n if (batchDownStart.value) {\n ElMessage.warning('已经有批量下载任务正在进行,请稍后再试')\n return\n }\n FileApi.batchDownload(\n ids,\n `批量下载_${formatDate(new Date(), 'yyyy年MM月dd日hh时mm分ss秒')}`,\n )\n .then(() => {\n loadActions()\n })\n .catch(() => {\n ElMessage.error('所选文件均已从服务器上移除')\n batchDownStart.value = false\n })\n ElMessage.info('开始归档选中的文件,请赖心等待')\n break\n case 'delete':\n if (selectItem.length === 0) {\n ElMessage.warning('没有选中需要删除的内容')\n return\n }\n ElMessageBox.confirm('删除后无法恢复,是否删除', '数据无价,请谨慎操作')\n .then(() => {\n FileApi.batchDel(ids).then(() => {\n ElMessage.success('删除成功')\n if (files.length === ids.length && pageCurrent.value > 1) {\n pageCurrent.value -= 1\n return\n }\n loadFiles()\n })\n })\n .catch(() => {\n ElMessage.info('取消')\n })\n break\n case 'excel':\n if (selectItem.length === 0) {\n ElMessage.warning('没有选中需要导出的内容')\n return\n }\n handleExportExcel(\n selectItem,\n `批量导出_${formatDate(new Date(), 'yyyy年MM月dd日hh时mm分ss秒')}.xlsx`,\n )\n ElMessage.success('导出成功')\n break\n default:\n break\n }\n clearSelection()\n}\nconst showInfoDialog = ref(false)\nconst infos: any[] = reactive([])\nfunction checkInfo(e: any) {\n infos.splice(0, infos.length)\n infos.push(...parseInfo(e.info))\n showInfoDialog.value = true\n}\n\nconst showRenameDialog = ref(false)\nconst renameForm = reactive({\n oldName: '',\n newName: '',\n suffix: '',\n id: -1,\n})\nfunction rewriteFilename(e: any) {\n const { id, name } = e\n const suffix = getFileSuffix(name)\n renameForm.oldName = name\n renameForm.suffix = suffix\n renameForm.id = id\n showRenameDialog.value = true\n}\n\nfunction handleSaveNewName() {\n // 文件名校验,不能有系统不支持的字符\n if (filenamePattern.test(renameForm.newName)) {\n ElMessage.error(`文件名不能包含${filenamePattern.source}等字符`)\n filenamePattern.lastIndex = 0\n return\n }\n FileApi.updateFilename(\n renameForm.id,\n `${renameForm.newName}${renameForm.suffix}`,\n )\n .then(() => {\n ElMessage.success('修改成功')\n const file = files.find(v => v.id === renameForm.id)\n if (file) {\n file.name = `${renameForm.newName}${renameForm.suffix}`\n }\n })\n .catch(() => {\n ElMessage.error('修改失败')\n })\n .finally(() => {\n showRenameDialog.value = false\n })\n}\n\nfunction downloadOne(e: any) {\n if (limitDownload.value) {\n ElMessage.error('下载功能已被限制,请联系管理员扩容,或自行删除历史无用文件')\n return\n }\n const { id, name } = e\n FileApi.getOneFileUrl(id)\n .then((res) => {\n const { link } = res.data\n showLinkModel.value = true\n downloadUrl.value = link\n downLoadByUrl(link, name)\n // 刷新\n loadActions()\n // 刷新次数\n setTimeout(() => {\n loadFiles()\n }, 1000)\n })\n .catch(() => {\n ElMessage.error('文件已从服务器上移除')\n })\n}\nfunction handleDelete(e: any) {\n const idx = files.findIndex(v => v === e)\n ElMessageBox.confirm('确认删除此文件吗?', '数据无价,请谨慎操作')\n .then(() => {\n FileApi.deleteOneFile(e.id).then(() => {\n ElMessage.success('删除成功')\n files.splice(idx, 1)\n fileTotal.value -= 1\n if (files.length === 0 && pageCurrent.value > 1) {\n pageCurrent.value -= 1\n return\n }\n loadFiles()\n })\n })\n .catch(() => {\n ElMessage.info('取消删除')\n })\n}\n\nfunction handleSizeChange(v: number) {\n pageSize.value = v\n pageCurrent.value = 1\n}\n\nconst filterFileSize = computed(() =>\n formatSize(filterFileTotalSize.value),\n)\nconst fileListSize = computed(() =>\n formatSize(fileListTotalSize.value),\n)\nconst storageProgressPercentage = computed(() => Math.min(100, percentageValue.value))\nconst walletProgressPercentage = computed(() => Math.min(100, walletPercentageValue.value))\nfunction handlePageChange(idx: number) {\n pageCurrent.value = idx\n}\n\n// 刷新文件列表\n\nfunction handleRefresh() {\n ElMessage.success({\n message: '刷新成功',\n })\n loadFiles()\n}\nfunction handleDownloadTask() {\n if (fileTotal.value === 0) {\n ElMessage.warning('该任务中没有数据')\n return\n }\n if (batchDownStart.value) {\n ElMessage.warning('已经有批量下载任务正在进行,请稍后再试')\n return\n }\n batchDownStart.value = true\n FileApi.batchDownloadByQuery({\n taskKey: selectTask.value,\n zipName: selectTaskName.value,\n })\n .then(() => {\n loadActions()\n })\n .catch(() => {\n ElMessage.error('所选任务中的文件均已从服务器上移除')\n })\n .finally(() => {\n setTimeout(() => {\n batchDownStart.value = false\n }, 1000)\n })\n ElMessage.info('开始归档选中的文件,请赖心等待')\n}\n\nconst viewImageFilename = ref('')\n\nconst previewImages = computed(() => {\n return showFilterFiles.value.map(v => v.preview || '')\n})\n\nfunction handleSwitchImage(idx: number) {\n viewImageFilename.value = showFilterFiles.value[idx].name\n}\n\nfunction reloadFirstPage() {\n if (pageCurrent.value === 1) {\n loadFiles()\n return\n }\n pageCurrent.value = 1\n}\n\nwatch([selectCategory, selectTask, searchWord], reloadFirstPage)\nwatch([pageCurrent, pageSize], loadFiles)\nwatch(showImg, () => {\n window.localStorage.setItem('ep-show-images', `${showImg.value}`)\n})\n\nonMounted(() => {\n loadFiles()\n loadActions()\n $store.dispatch('category/getCategory')\n $store.dispatch('task/getTask')\n})\n\nconst isMobile = useIsMobile()\nfunction handleShowDetail() {\n ElMessageBox.confirm(priceText.value)\n}\n</script>\n\n<template>\n <div class=\"files\">\n <div v-if=\"isOpenPraise\" class=\"top-notice\">\n <div class=\"top-notice-main\">\n <strong>{{ siteConfig.filePagePraiseText }}<a\n :href=\"siteConfig.filePagePraiseLink\" target=\"_blank\"\n rel=\"noopener noreferrer\"\n >{{ siteConfig.filePagePraiseLinkText }}</a></strong>\n <strong>{{ siteConfig.filePageContactText }}<a\n :href=\"siteConfig.filePageContactLink\" target=\"_blank\"\n rel=\"noopener noreferrer\"\n >{{ siteConfig.filePageContactLinkText }}</a></strong>\n </div>\n <div v-if=\"showResourceLimitNotice\" class=\"top-notice-detail\">\n <span>{{ siteConfig.filePageLimitText }}</span>\n <span>{{ siteConfig.filePageSponsorText }}<a\n :href=\"siteConfig.filePageSponsorLink\" target=\"_blank\"\n rel=\"noopener noreferrer\"\n >{{ siteConfig.filePageSponsorLinkText }}</a>{{ siteConfig.filePageSponsorSuffix }}</span>\n <span>\n <a\n :href=\"siteConfig.filePageSelfHostLink\" target=\"_blank\"\n rel=\"noopener noreferrer\"\n >{{ siteConfig.filePageSelfHostLinkText }}</a>\n </span>\n </div>\n </div>\n <!-- 筛选框 -->\n <div class=\"panel header\">\n <div class=\"item\">\n <span class=\"label\">分类</span>\n <!-- TODO: multiple 多选待评估 -->\n <el-select v-model=\"selectCategory\" size=\"default\" filterable placeholder=\"请选择\">\n <el-option label=\"全部\" value=\"all\" />\n <el-option label=\"默认\" value=\"default\" />\n <el-option v-for=\"item in categories\" :key=\"item.k\" :label=\"item.name\" :value=\"item.k\" />\n <el-option label=\"无关联任务\" value=\"no-task\" />\n <el-option label=\"♻️回收站♻️\" value=\"trash\" />\n </el-select>\n </div>\n <div class=\"item\">\n <span class=\"label\">任务</span>\n <el-select v-model=\"selectTask\" size=\"default\" filterable placeholder=\"请选择\">\n <el-option label=\"全部\" value=\"all\" />\n <el-option v-for=\"item in filterTasks\" :key=\"item.key\" :label=\"item.name\" :value=\"item.key\" />\n </el-select>\n </div>\n <div class=\"item\">\n <el-button\n :loading=\"batchDownStart\" :disabled=\"selectTask === 'all'\" type=\"primary\" size=\"default\"\n :icon=\"Download\" @click=\"handleDownloadTask\"\n >\n 下载任务中的文件\n </el-button>\n </div>\n <div class=\"item search-item\">\n <el-input v-model=\"searchWord\" size=\"default\" clearable placeholder=\"请输入要检索的内容\" :prefix-icon=\"Search\" />\n <div class=\"search-tip\">\n 可搜索:文件名、任务名、提交人姓名、原文件名、提交信息\n </div>\n </div>\n </div>\n <div class=\"panel\">\n <div class=\"export-btns flex fac\">\n <el-dropdown trigger=\"click\" @command=\"handleDropdownClick\">\n <el-button type=\"primary\" size=\"default\">\n 批量操作<el-icon class=\"el-icon--right\">\n <ArrowDown />\n </el-icon>\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item :disabled=\"selectItem.length === 0\" command=\"download\">\n 下载\n </el-dropdown-item>\n <el-dropdown-item :disabled=\"selectItem.length === 0\" command=\"delete\">\n 删除\n </el-dropdown-item>\n <el-dropdown-item :disabled=\"selectItem.length === 0\" command=\"excel\">\n 导出记录\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <div v-show=\"false\">\n <!-- 迷惑的解决bug的手段 -->\n <el-dropdown trigger=\"click\" @command=\"handleDropdownClick\">\n <el-button type=\"primary\" :disabled=\"selectItem.length === 0\" size=\"default\">\n 批量操作\n <el-icon>\n <ArrowDown />\n </el-icon>\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item command=\"download\">\n 下载\n </el-dropdown-item>\n <el-dropdown-item command=\"delete\">\n 删除\n </el-dropdown-item>\n <el-dropdown-item command=\"excel\">\n 导出记录\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </div>\n <el-button size=\"default\" :icon=\"Refresh\" @click=\"handleRefresh\">\n 刷新\n </el-button>\n <el-button\n title=\"导出当前筛选条件下的所有数据\" type=\"success\" size=\"default\" :icon=\"DataAnalysis\"\n :disabled=\"fileTotal === 0\" @click=\"handleExportFilterFiles\"\n >\n 导出记录\n </el-button>\n <div class=\"control-item\">\n 显示图片\n <el-switch\n v-model=\"showImg\" inline-prompt active-color=\"#13ce66\" inactive-color=\"#ff4949\" active-text=\"是\"\n inactive-text=\"否\"\n />\n </div>\n <div class=\"control-item\">\n 展示原文件名\n <el-switch\n v-model=\"showOriginName\" inline-prompt active-color=\"#13ce66\" inactive-color=\"#ff4949\"\n active-text=\"是\" inactive-text=\"否\"\n />\n </div>\n <div class=\"control-item\">\n 显示提交人姓名\n <el-switch\n v-model=\"showPeople\" inline-prompt active-color=\"#13ce66\" inactive-color=\"#ff4949\" active-text=\"是\"\n inactive-text=\"否\"\n />\n </div>\n <div class=\"control-item\">\n ⏰ 查看下载历史\n <el-switch\n v-model=\"showHistoryPanel\" style=\"\n --el-switch-on-color: #13ce66;\n --el-switch-off-color: #ff4949;\n \"\n />\n </div>\n </div>\n </div>\n <div v-show=\"historyDownloadRecord.compressTask.length && !showHistoryPanel\" class=\"panel\">\n <Tip style=\"font-size: 16px\">\n 正在进行归档的任务\n {{ historyDownloadRecord.compressTask.length }}个\n </Tip>\n <Tip>详细归档记录点击右上角 “⏰查看下载历史”</Tip>\n <p\n v-for=\"(record, idx) in historyDownloadRecord.compressTask\" :key=\"record.id\" class=\"tc\"\n style=\"margin-top: 10px\"\n >\n {{ idx + 1 }}. {{ record.tip }}\n <span v-loading=\"true\" element-loading-text=\"...\" style=\"--el-loading-spinner-size: 20px\" />\n </p>\n </div>\n <div v-show=\"showHistoryPanel\" class=\"panel\">\n <Tip style=\"font-size: 16px\">\n ”❤️下面展示历史的下载记录与归档任务完成情况❤️“\n </Tip>\n <Tip>”再也不需要在页面停留等待归档完成“</Tip>\n <div>\n <el-table\n ref=\"multipleTable\" v-loading=\"isLoadingData\" element-loading-text=\"Loading...\" tooltip-effect=\"dark\"\n multiple-table stripe border :default-sort=\"{ prop: 'date', order: 'descending' }\"\n :max-height=\"666\" :data=\"historyDownloadRecord.actions\" style=\"width: 100%\"\n @selection-change=\"handleSelectionChange\"\n >\n <el-table-column prop=\"date\" label=\"触发时间\" width=\"200\">\n <template #default=\"scope\">\n {{\n formatDate(new Date(scope.row.date))\n }}\n </template>\n </el-table-column>\n <el-table-column prop=\"tip\" label=\"文件名\" />\n <el-table-column prop=\"type\" label=\"类型\">\n <template #default=\"scope\">\n <el-link v-if=\"scope.row.type === ActionType.Compress\" type=\"primary\">\n 归档下载\n </el-link>\n <el-link v-else type=\"default\">\n 普通下载\n </el-link>\n </template>\n </el-table-column>\n <el-table-column prop=\"size\" label=\"大小\" width=\"100\">\n <template #default=\"scope\">\n <span v-if=\"scope.row.status === DownloadStatus.ARCHIVE\"><el-link type=\"danger\">归档中...</el-link></span>\n <span v-else-if=\"scope.row.status !== DownloadStatus.FAIL\">{{\n !scope.row.size ? '未知大小' : formatSize(scope.row.size)\n }}</span>\n <span v-if=\"scope.row.status === DownloadStatus.FAIL\"><el-link type=\"danger\">归档失败</el-link></span>\n </template>\n </el-table-column>\n <el-table-column fixed=\"right\" label=\"操作\" width=\"140\">\n <template #default=\"scope\">\n <div v-if=\"scope.row.status === DownloadStatus.ARCHIVE\" v-loading=\"true\">\n 归档中...\n </div>\n <div v-if=\"scope.row.status === DownloadStatus.EXPIRED\">\n 链接已失效\n </div>\n <div v-if=\"scope.row.status === DownloadStatus.FAIL\">\n 联系开发者,提供错误信息:{{ scope.row.error }}\n </div>\n <div v-if=\"scope.row.status === DownloadStatus.SUCCESS\">\n <el-link type=\"primary\" @click=\"downLoadByUrl(scope.row.url)\">\n 下载\n </el-link>\n <el-link type=\"success\" style=\"margin-left: 10px\" @click=\"copyRes(scope.row.url)\">\n 链接\n </el-link>\n <el-link\n type=\"warning\" style=\"margin-left: 10px\" @click=\"() => {\n showLinkModel = true\n downloadUrl = scope.row.url\n }\n \"\n >\n 二维码\n </el-link>\n </div>\n </template>\n </el-table-column>\n </el-table>\n <div class=\"flex fc\">\n <el-pagination\n small :current-page=\"historyDownloadRecord.pageCurrent\"\n :page-count=\"historyDownloadRecord.pageCount\" :total=\"historyDownloadRecord.pageTotal\"\n layout=\"total, prev, pager, next\" @current-change=\"handleHistoryActionPageChange\"\n />\n </div>\n </div>\n </div>\n <!-- 主体内容 -->\n <div class=\"panel\">\n <div class=\"stats-dashboard\">\n <div class=\"stat-card\">\n <span class=\"stat-label\">全部文件</span>\n <strong>{{ fileListSize }}</strong>\n <small>当前账号提交文件总大小</small>\n </div>\n <div class=\"stat-card\">\n <span class=\"stat-label\">当前筛选</span>\n <strong>{{ filterFileSize }}</strong>\n <small>当前筛选条件下文件大小</small>\n </div>\n <div v-if=\"showStorageLimit\" class=\"stat-card\" :class=\"{ warning: limitSpace }\">\n <span class=\"stat-label\">存储空间</span>\n <strong>{{ formatSize(usage) }} / {{ formatSize(size) }}</strong>\n <el-progress :percentage=\"storageProgressPercentage\" :status=\"limitSpace ? 'exception' : undefined\" />\n <small>{{ percentageValue.toFixed(2) }}% 已使用</small>\n </div>\n <div v-if=\"showWalletLimit\" class=\"stat-card\" :class=\"{ warning: limitWallet }\">\n <span class=\"stat-label\">钱包消耗</span>\n <strong>{{ cost }} / {{ wallet }}¥</strong>\n <el-progress :percentage=\"walletProgressPercentage\" :status=\"limitWallet ? 'exception' : undefined\" />\n <small>统计时间:{{ formatDate(siteConfig.moneyStartDay, 'yyyy-MM-dd') }} - 至今</small>\n <button class=\"stat-link\" type=\"button\" @click=\"handleShowDetail\">\n 查看费用明细\n </button>\n </div>\n </div>\n <Tip v-if=\"limitDownload\">\n <h2 style=\"color:#f56c6c\">\n 空间超限将无法上传/下载文件,如需要使用,请联系管理员扩容,或自行删除无关文件\n </h2>\n </Tip>\n <el-table\n ref=\"multipleTable\" v-loading=\"isLoadingData\" element-loading-text=\"Loading...\" tooltip-effect=\"dark\"\n multiple-table stripe border :max-height=\"666\" :data=\"showFilterFiles\"\n style=\"width: 100%\" @selection-change=\"handleSelectionChange\"\n >\n <el-table-column type=\"selection\" width=\"55\" />\n <el-table-column prop=\"date\" label=\"提交时间\" width=\"160\">\n <template #default=\"scope\">\n {{\n formatDate(new Date(scope.row.date))\n }}\n </template>\n </el-table-column>\n <el-table-column prop=\"task_name\" label=\"任务\" width=\"150\" />\n <el-table-column prop=\"name\" label=\"文件名\" width=\"200\" />\n <template v-if=\"showOriginName\">\n <el-table-column prop=\"origin_name\" label=\"原文件名\" width=\"200\">\n <template #default=\"scope\">\n {{ scope.row.origin_name || '-' }}\n </template>\n </el-table-column>\n </template>\n <el-table-column prop=\"size\" label=\"大小\">\n <template #default=\"scope\">\n {{\n scope.row.size === 0 ? '未知大小' : formatSize(scope.row.size)\n }}\n </template>\n </el-table-column>\n <el-table-column prop=\"downloadCount\" width=\"90\" label=\"下载次数\" />\n <template v-if=\"showImg\">\n <el-table-column label=\"缩略图\" width=\"120\">\n <template #default=\"scope\">\n <el-image\n preview-teleported :preview-src-list=\"previewImages\" :initial-index=\"scope.$index\"\n lazy style=\"width: 100px; height: 100px\" :src=\"scope.row.cover\" fit=\"cover\"\n @switch=\"handleSwitchImage\" @click=\"handleSwitchImage(scope.$index)\"\n >\n <template #viewer>\n <div class=\"imageDes\">\n {{ viewImageFilename }}\n </div>\n </template>\n <template #placeholder>\n <div class=\"imageLoading\">\n Loading...\n </div>\n </template>\n <template #error>\n <div class=\"imageLoading\">\n 不支持\n <el-icon>\n <Picture />\n </el-icon>\n </div>\n </template>\n </el-image>\n </template>\n </el-table-column>\n </template>\n <template v-if=\"showPeople\">\n <el-table-column prop=\"people\" width=\"100\" label=\"限制名单\">\n <template #default=\"scope\">\n {{ scope.row.people || '-' }}\n </template>\n </el-table-column>\n </template>\n <el-table-column fixed=\"right\" label=\"操作\" width=\"140\">\n <template #default=\"scope\">\n <div class=\"text-btns\">\n <el-button type=\"primary\" text size=\"small\" @click=\"checkInfo(scope.row)\">\n 查看提交信息\n </el-button>\n <el-button type=\"primary\" text size=\"small\" @click=\"rewriteFilename(scope.row)\">\n 修改文件名\n </el-button>\n <el-button type=\"primary\" text size=\"small\" @click=\"downloadOne(scope.row)\">\n 下载\n </el-button>\n <el-button type=\"primary\" text size=\"small\" @click=\"handleDelete(scope.row)\">\n 删除\n </el-button>\n </div>\n </template>\n </el-table-column>\n </el-table>\n </div>\n <!-- 分页 -->\n <div class=\"panel flex fc\">\n <el-pagination\n :current-page=\"pageCurrent\" background :page-count=\"filePageCount\" :page-sizes=\"[6, 10, 50, 100]\"\n :page-size=\"pageSize\" :total=\"fileTotal\" layout=\"total, sizes, prev, pager, next, jumper\" @current-change=\"handlePageChange\"\n @size-change=\"handleSizeChange\"\n />\n </div>\n <!-- 信息弹窗 -->\n <el-dialog v-model=\"showInfoDialog\" :fullscreen=\"isMobile\" title=\"提交填写的信息\">\n <InfosForm :infos=\"infos\" :disabled=\"true\" />\n </el-dialog>\n <LinkDialog v-model:value=\"showLinkModel\" title=\"下载链接\" :link=\"downloadUrl\" />\n <FloatingContact\n v-if=\"siteConfig.filePageFloatingContactEnabled && siteConfig.filePageContactLink\"\n :href=\"siteConfig.filePageContactLink\"\n :text=\"siteConfig.filePageContactLinkText || '联系客服'\"\n />\n <el-dialog v-model=\"showRenameDialog\" :fullscreen=\"isMobile\" title=\"修改文件名\">\n <div>\n <el-form label-width=\"100px\" :model=\"renameForm\">\n <el-form-item label=\"原文件名\" prop=\"newName\">\n <el-input v-model=\"renameForm.oldName\" disabled />\n </el-form-item>\n <el-form-item label=\"新文件名\" prop=\"newName\">\n <el-input v-model=\"renameForm.newName\" placeholder=\"请输入新文件名\">\n <template #append>\n {{ renameForm.suffix }}\n </template>\n </el-input>\n </el-form-item>\n <el-form-item>\n <el-button type=\"success\" @click=\"handleSaveNewName\">\n 保存\n </el-button>\n <el-button @click=\"showRenameDialog = false\">\n 取消\n </el-button>\n </el-form-item>\n </el-form>\n </div>\n </el-dialog>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.files {\n width: min(1440px, calc(100vw - 48px));\n max-width: 1440px;\n margin: 0 auto;\n padding-bottom: 2em;\n}\n\n.top-notice {\n padding: 14px 18px;\n border: 1px solid rgb(64 158 255 / 18%);\n border-radius: 14px;\n margin: 10px auto;\n background:\n radial-gradient(circle at 96% 12%, rgb(64 158 255 / 16%), transparent 24%),\n linear-gradient(135deg, #fff 0%, #f7faff 100%);\n box-shadow: 0 8px 22px rgb(31 41 55 / 6%);\n color: #334155;\n font-size: 14px;\n line-height: 1.7;\n\n a {\n color: #409eff;\n }\n}\n\n.top-notice-detail {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 8px;\n margin-top: 4px;\n color: #f56c6c;\n font-weight: 700;\n}\n\n@media screen and (max-width: 700px) {\n .files {\n margin-top: 70px;\n }\n\n .text-btns {\n display: flex;\n flex-direction: column;\n\n :deep(.el-button) {\n margin-left: 0px;\n margin-bottom: 0px;\n }\n }\n\n .header {\n justify-content: center;\n }\n\n .export-btns {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-around;\n }\n}\n\n.panel {\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n border-radius: 4px;\n z-index: 1;\n\n .label {\n font-size: 12px;\n margin-right: 10px;\n }\n}\n\n.header {\n display: flex;\n flex-wrap: wrap;\n\n .item {\n margin-right: 10px;\n margin-bottom: 10px;\n }\n}\n\n.el-button {\n margin-left: 10px;\n margin-bottom: 10px;\n}\n\n.control-item {\n margin-left: 10px;\n margin-bottom: 10px;\n font-size: 14px;\n}\n\n.search-item {\n min-width: 260px;\n}\n\n.search-tip {\n margin-top: 4px;\n color: #909399;\n font-size: 12px;\n line-height: 1.4;\n}\n\n.stats-dashboard {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n gap: 14px;\n margin-bottom: 16px;\n}\n\n.stat-card {\n display: flex;\n flex-direction: column;\n min-height: 120px;\n padding: 16px;\n border: 1px solid #edf0f5;\n border-radius: 14px;\n background:\n radial-gradient(circle at 90% 16%, rgb(64 158 255 / 14%), transparent 28%),\n linear-gradient(135deg, #fff 0%, #f7faff 100%);\n box-shadow: 0 8px 22px rgb(31 41 55 / 6%);\n box-sizing: border-box;\n\n &.warning {\n border-color: rgb(245 108 108 / 38%);\n background:\n radial-gradient(circle at 90% 16%, rgb(245 108 108 / 14%), transparent 28%),\n linear-gradient(135deg, #fff 0%, #fff8f8 100%);\n }\n\n strong {\n margin: 8px 0 6px;\n color: #1f2937;\n font-size: 22px;\n line-height: 1.25;\n }\n\n small {\n color: #8a94a6;\n line-height: 1.5;\n }\n\n :deep(.el-progress) {\n margin: 4px 0 2px;\n }\n}\n\n.stat-label {\n color: #409eff;\n font-size: 13px;\n font-weight: 700;\n}\n\n.stat-link {\n align-self: flex-start;\n padding: 0;\n border: 0;\n margin-top: 8px;\n background: transparent;\n color: #409eff;\n cursor: pointer;\n font-size: 13px;\n}\n\n.imageLoading {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n}\n\n.imageDes {\n position: absolute;\n bottom: 80px;\n color: #fff;\n left: 50%;\n transform: translateX(-50%);\n}\n\n.progress-list {\n margin-top: 10px;\n\n .progress-item {\n margin-bottom: 10px;\n\n .progress {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: 6px;\n\n .el-progress--line {\n min-width: 200px;\n width: 260px;\n }\n\n .el-button {\n margin: 0 6px;\n }\n }\n\n .des {\n font-size: 12px;\n\n .filename {\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n word-break: keep-all;\n margin-right: 10px;\n }\n\n .mimeType {\n width: 60px;\n color: #409eff;\n }\n }\n\n text-align: center;\n }\n}\n</style>\n"],"names":["getDownloadActions","pageSize","pageIndex","extraIds","ajax","ActionServiceAPI","_sfc_main","defineComponent","_hoisted_1","_hoisted_2","createElementVNode","_hoisted_3","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","download","_export_sfc","_hoisted_4","picture","useSpaceUsage","usageData","reactive","usage","computed","size","wallet","cost","percentageValue","walletPercentageValue","percentage","walletPercentage","limitDownload","limitSpace","limitWallet","spaceUsageText","formatSize","moneyUsageText","priceText","onMounted","UserApi","res","siteConfig","useSiteConfig","isOpenPraise","showStorageLimit","showWalletLimit","showResourceLimitNotice","$store","useStore","$route","useRoute","showLinkModel","ref","downloadUrl","showImg","showPeople","showOriginName","showHistoryPanel","historyDownloadRecord","loadActions","compressTask","v","actions","sum","haveArchive","DownloadStatus","ActionType","action","existIndex","downLoadByUrl","handleHistoryActionPageChange","categories","selectCategory","tasks","selectTask","filterTasks","t","selectTaskName","watchEffect","handleExportExcel","files","filename","ElMessage","baseHeaders","headers","infosHeader","pre","value","i","e","body","date","taskName","name","people","infoObj","info","_a","rows","formatDate","_filename","resFileName","normalizeFileName","tableToExcel","isLoadingData","searchWord","pageCurrent","fileTotal","filePageCount","fileListTotalSize","filterFileTotalSize","loadFilesId","loadFiles","currentLoadId","FileApi","data","loadFilesForExport","exportFiles","pageCount","handleExportFilterFiles","multipleTable","showFilterFiles","clearSelection","selectItem","handleSelectionChange","batchDownStart","handleDropdownClick","ids","ElMessageBox","showInfoDialog","infos","checkInfo","parseInfo","showRenameDialog","renameForm","rewriteFilename","id","suffix","getFileSuffix","handleSaveNewName","filenamePattern","file","downloadOne","link","handleDelete","idx","handleSizeChange","filterFileSize","fileListSize","storageProgressPercentage","walletProgressPercentage","handlePageChange","handleRefresh","handleDownloadTask","viewImageFilename","previewImages","handleSwitchImage","reloadFirstPage","watch","isMobile","useIsMobile","handleShowDetail"],"mappings":"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","x_google_ignoreList":[1,2]}
@@ -0,0 +1,2 @@
1
+ import{d as le,X as D,r as u,M as z,o as ae,Z as se,a as y,c as I,b as n,i as l,w as s,F as L,A as M,B as A,j as w,e as i,t as F,n as N,bs as T,E as R,q as oe,s as ne,a0 as ue,ag as ie,ah as de,_ as re}from"./index-DbhWmXsj.js";import{s as pe,E as ce}from"./el-pagination-DX6u100-.js";import"./el-tag-uk6aooq0.js";import{E as fe,a as me}from"./el-select-DWyBOD47.js";import"./el-scrollbar-D2RZSJkX.js";import{E as ve,a as _e}from"./el-table-column-DdhVw628.js";import{W as f}from"./index-BrOLxzFM.js";import"./index-DT7ciPLb.js";const be={class:"user"},ge={class:"panel"},he={class:"p10 log-filter"},Ve={class:"item"},ye={class:"item"},we={class:"text-btn-list"},Ee={class:"flex fc p10"},Ce={class:"tc"},xe={class:"dialog-footer"},We={class:"dialog-footer"},j="80px",Se=le({__name:"index",setup(ke){const m=D([]);function O(){T.findAllWish().then(a=>{m.splice(0,m.length,...a.data)})}const E=u(-1),C=u(""),S=D([{label:"待审核",type:f.REVIEW},{label:"待开始",type:f.WAIT},{label:"关闭",type:f.CLOSE},{label:"已上线",type:f.END},{label:"开发中",type:f.START}]),k=z(()=>m.filter(a=>a.status===E.value||E.value===-1).filter(a=>{const{createDate:e,title:d,des:W,contact:h}=a;return C.value.length===0?!0:"".concat(N(new Date(e))," ").concat(d," ").concat(W," ").concat(h).includes(C.value)})),v=u(10);function P(a){v.value=a}const q=z(()=>Math.ceil(k.value.length/v.value)),x=u(1),X=z(()=>{const a=(x.value-1)*v.value,e=x.value*v.value;return k.value.slice(a,e)});function Z(a){x.value=a}const _=u(!1),r=u(""),b=u(f.REVIEW),G=S;function H(a,e){r.value=a,b.value=e,_.value=!0}function J(){const a=m.find(e=>e.id===r.value);a.status=b.value,_.value=!1,T.updateWishStatus(r.value,b.value).then(()=>{R.success("修改成功")})}const g=u(!1),o=D({title:"",des:""});function K(a,e,d){r.value=a,o.title=e,o.des=d,g.value=!0}function Q(){const a=m.find(e=>e.id===r.value);T.updateWishDes(r.value,o.title,o.des).then(()=>{g.value=!1,a.title=o.title,a.des=o.des,R.success("修改成功")})}ae(()=>{O()});const U=se();return(a,e)=>{const d=fe,W=me,h=oe,p=ve,c=ne,Y=_e,ee=ce,$=ue,B=ie,te=de;return y(),I("div",be,[n("div",ge,[n("div",he,[n("span",Ve,[e[9]||(e[9]=n("span",{class:"label"},"状态",-1)),l(W,{modelValue:E.value,"onUpdate:modelValue":e[0]||(e[0]=t=>E.value=t),size:"default",placeholder:"请选择筛选状态"},{default:s(()=>[l(d,{label:"全部",value:-1}),(y(!0),I(L,null,M(S,(t,V)=>(y(),A(d,{key:V,label:t.label,value:t.type},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),n("span",ye,[l(h,{modelValue:C.value,"onUpdate:modelValue":e[1]||(e[1]=t=>C.value=t),size:"default",clearable:"",placeholder:"请输入要检索的内容","prefix-icon":w(pe)},null,8,["modelValue","prefix-icon"])])]),l(Y,{height:"550",stripe:"",border:"","default-sort":{prop:"date",order:"descending"},data:X.value,style:{width:"100%"}},{default:s(()=>[l(p,{sortable:"",prop:"createDate",label:"提交时间",width:"190"},{default:s(t=>[i(F(t.row.createDate&&w(N)(new Date(t.row.createDate))),1)]),_:1}),l(p,{prop:"title",label:"标题",width:"120"}),l(p,{prop:"des",label:"详细描述"}),l(p,{prop:"contact",label:"联系方式"}),l(p,{prop:"status",label:"状态"},{default:s(t=>[i(F(S.find(V=>V.type===t.row.status).label),1)]),_:1}),l(p,{fixed:"right",label:"操作",width:"100"},{default:s(t=>[n("div",we,[l(c,{type:"primary",text:"",size:"small",onClick:V=>H(t.row.id,t.row.status)},{default:s(()=>e[10]||(e[10]=[i(" 修改状态 ")])),_:2},1032,["onClick"]),l(c,{type:"primary",text:"",size:"small",onClick:V=>K(t.row.id,t.row.title,t.row.des)},{default:s(()=>e[11]||(e[11]=[i(" 修改描述 ")])),_:2},1032,["onClick"])])]),_:1})]),_:1},8,["data"]),n("div",Ee,[l(ee,{"current-page":x.value,background:"","page-count":q.value,"page-sizes":[10,50,100,200],"page-size":v.value,total:k.value.length,layout:"total, sizes, prev, pager, next, jumper",onCurrentChange:Z,onSizeChange:P},null,8,["current-page","page-count","page-size","total"])])]),l($,{modelValue:_.value,"onUpdate:modelValue":e[4]||(e[4]=t=>_.value=t),fullscreen:w(U),center:"",title:"状态修改"},{footer:s(()=>[n("span",xe,[l(c,{onClick:e[3]||(e[3]=t=>_.value=!1)},{default:s(()=>e[12]||(e[12]=[i("取 消")])),_:1}),l(c,{type:"primary",onClick:J},{default:s(()=>e[13]||(e[13]=[i("确 定")])),_:1})])]),default:s(()=>[n("div",Ce,[l(W,{modelValue:b.value,"onUpdate:modelValue":e[2]||(e[2]=t=>b.value=t),placeholder:"请选择新状态"},{default:s(()=>[(y(!0),I(L,null,M(w(G),t=>(y(),A(d,{key:t.type,label:t.label,value:t.type},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])]),_:1},8,["modelValue","fullscreen"]),l($,{modelValue:g.value,"onUpdate:modelValue":e[8]||(e[8]=t=>g.value=t),title:"需求信息",fullscreen:w(U)},{footer:s(()=>[n("span",We,[l(c,{onClick:e[7]||(e[7]=t=>g.value=!1)},{default:s(()=>e[14]||(e[14]=[i("取 消")])),_:1}),l(c,{type:"primary",onClick:Q},{default:s(()=>e[15]||(e[15]=[i("确 定")])),_:1})])]),default:s(()=>[l(te,{model:o},{default:s(()=>[l(B,{label:"需求","label-width":j},{default:s(()=>[l(h,{modelValue:o.title,"onUpdate:modelValue":e[5]||(e[5]=t=>o.title=t),placeholder:"一句简单明了的话概括一下"},null,8,["modelValue"])]),_:1}),l(B,{label:"详细描述","label-width":j},{default:s(()=>[l(h,{modelValue:o.des,"onUpdate:modelValue":e[6]||(e[6]=t=>o.des=t),placeholder:"用朴素的话语进一步描述你的需求",type:"textarea"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","fullscreen"])])}}}),Me=re(Se,[["__scopeId","data-v-9d0301c0"]]);export{Me as default};
2
+ //# sourceMappingURL=index-CLt64lxI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CLt64lxI.js","sources":["../../src/pages/dashboard/manage/wish/index.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { Search } from '@element-plus/icons-vue'\nimport { ElMessage } from 'element-plus'\nimport {\n computed,\n onMounted,\n reactive,\n ref,\n} from 'vue'\nimport { WishApi } from '@/apis'\nimport { useIsMobile } from '@/composables'\nimport { WishStatus } from '@/constants'\nimport { formatDate } from '@/utils/stringUtil'\n\nconst wishes = reactive<WishApiTypes.WishItem[]>([])\nfunction refreshWishes() {\n WishApi.findAllWish().then((v) => {\n wishes.splice(0, wishes.length, ...v.data)\n })\n}\n\n// 筛选状态\nconst filterLogType = ref(-1)\nconst searchWord = ref('')\nconst logTypeList = reactive([\n {\n label: '待审核',\n type: WishStatus.REVIEW,\n },\n {\n label: '待开始',\n type: WishStatus.WAIT,\n },\n {\n label: '关闭',\n type: WishStatus.CLOSE,\n },\n {\n label: '已上线',\n type: WishStatus.END,\n },\n {\n label: '开发中',\n type: WishStatus.START,\n },\n])\n\nconst filterWishes = computed(() => wishes\n .filter(v => v.status === filterLogType.value || filterLogType.value === -1)\n .filter((v) => {\n const {\n createDate,\n title,\n des,\n contact,\n } = v\n if (searchWord.value.length === 0)\n return true\n return `${formatDate(new Date(createDate))} ${title} ${des} ${contact}`.includes(searchWord.value)\n }))\n\n// 分页\nconst pageSize = ref(10)\nfunction handleSizeChange(v: number) {\n pageSize.value = v\n}\nconst pageCount = computed(() => {\n const t = Math.ceil(filterWishes.value.length / pageSize.value)\n return t\n})\nconst pageCurrent = ref(1)\nconst pageWishes = computed(() => {\n const start = (pageCurrent.value - 1) * pageSize.value\n const end = (pageCurrent.value) * pageSize.value\n return filterWishes.value.slice(start, end)\n})\nfunction handlePageChange(idx: number) {\n pageCurrent.value = idx\n}\n\n// 状态修改\nconst showWishStatusDialog = ref(false)\nconst selectWishId = ref('')\nconst selectStatus = ref(WishStatus.REVIEW)\nconst wishStatusList = logTypeList\nfunction handleChangeStatus(wishId: string, status: WishStatus) {\n selectWishId.value = wishId\n selectStatus.value = status\n showWishStatusDialog.value = true\n}\nfunction handleSaveStatus() {\n const wish = wishes.find(v => v.id === selectWishId.value)\n wish.status = selectStatus.value\n showWishStatusDialog.value = false\n WishApi\n .updateWishStatus(selectWishId.value, selectStatus.value)\n .then(() => {\n ElMessage.success('修改成功')\n })\n}\n\n// 描述信息修改\nconst formLabelWidth = '80px'\nconst desVisible = ref(false)\nconst formData = reactive({\n title: '',\n des: '',\n})\nfunction handleRewriteDes(id: string, title: string, des: string) {\n selectWishId.value = id\n formData.title = title\n formData.des = des\n desVisible.value = true\n}\nfunction handleUpdateWish() {\n const wish = wishes.find(v => v.id === selectWishId.value)\n WishApi\n .updateWishDes(selectWishId.value, formData.title, formData.des)\n .then(() => {\n desVisible.value = false\n wish.title = formData.title\n wish.des = formData.des\n ElMessage.success('修改成功')\n })\n}\nonMounted(() => {\n refreshWishes()\n})\n\nconst isMobile = useIsMobile()\n</script>\n\n<template>\n <div class=\"user\">\n <div class=\"panel\">\n <div class=\"p10 log-filter\">\n <span class=\"item\">\n <span class=\"label\">状态</span>\n <el-select v-model=\"filterLogType\" size=\"default\" placeholder=\"请选择筛选状态\">\n <el-option label=\"全部\" :value=\"-1\" />\n <el-option v-for=\"(item, idx) in logTypeList\" :key=\"idx\" :label=\"item.label\" :value=\"item.type\" />\n </el-select>\n </span>\n <span class=\"item\">\n <el-input v-model=\"searchWord\" size=\"default\" clearable placeholder=\"请输入要检索的内容\" :prefix-icon=\"Search\" />\n </span>\n </div>\n <el-table\n height=\"550\" stripe border :default-sort=\"{ prop: 'date', order: 'descending' }\" :data=\"pageWishes\"\n style=\"width: 100%\"\n >\n <el-table-column sortable prop=\"createDate\" label=\"提交时间\" width=\"190\">\n <template #default=\"scope\">\n {{ scope.row.createDate && formatDate(new Date(scope.row.createDate)) }}\n </template>\n </el-table-column>\n <el-table-column prop=\"title\" label=\"标题\" width=\"120\" />\n <el-table-column prop=\"des\" label=\"详细描述\" />\n <el-table-column prop=\"contact\" label=\"联系方式\" />\n <el-table-column prop=\"status\" label=\"状态\">\n <template #default=\"scope\">\n {{ logTypeList.find(v => v.type === scope.row.status).label }}\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 type=\"primary\" text size=\"small\" @click=\"handleChangeStatus(scope.row.id, scope.row.status)\">\n 修改状态\n </el-button>\n <el-button\n type=\"primary\" text size=\"small\"\n @click=\"handleRewriteDes(scope.row.id, scope.row.title, scope.row.des)\"\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\" background :page-count=\"pageCount\" :page-sizes=\"[10, 50, 100, 200]\"\n :page-size=\"pageSize\" :total=\"filterWishes.length\" layout=\"total, sizes, prev, pager, next, jumper\"\n @current-change=\"handlePageChange\" @size-change=\"handleSizeChange\"\n />\n </div>\n </div>\n <!-- 状态修改弹窗 -->\n <el-dialog v-model=\"showWishStatusDialog\" :fullscreen=\"isMobile\" center title=\"状态修改\">\n <div class=\"tc\">\n <el-select v-model=\"selectStatus\" placeholder=\"请选择新状态\">\n <el-option v-for=\"s in wishStatusList\" :key=\"s.type\" :label=\"s.label\" :value=\"s.type\" />\n </el-select>\n </div>\n <template #footer>\n <span class=\"dialog-footer\">\n <el-button @click=\"showWishStatusDialog = false\">取 消</el-button>\n <el-button type=\"primary\" @click=\"handleSaveStatus\">确 定</el-button>\n </span>\n </template>\n </el-dialog>\n\n <!-- 需求描述更新弹窗 -->\n <el-dialog v-model=\"desVisible\" title=\"需求信息\" :fullscreen=\"isMobile\">\n <el-form :model=\"formData\">\n <el-form-item label=\"需求\" :label-width=\"formLabelWidth\">\n <el-input v-model=\"formData.title\" placeholder=\"一句简单明了的话概括一下\" />\n </el-form-item>\n <el-form-item label=\"详细描述\" :label-width=\"formLabelWidth\">\n <el-input v-model=\"formData.des\" placeholder=\"用朴素的话语进一步描述你的需求\" type=\"textarea\" />\n </el-form-item>\n </el-form>\n <template #footer>\n <span class=\"dialog-footer\">\n <el-button @click=\"desVisible = false\">取 消</el-button>\n <el-button type=\"primary\" @click=\"handleUpdateWish\">确 定</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\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\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</style>\n"],"names":["formLabelWidth","wishes","reactive","refreshWishes","WishApi","v","filterLogType","ref","searchWord","logTypeList","WishStatus","filterWishes","computed","createDate","title","des","contact","formatDate","pageSize","handleSizeChange","pageCount","pageCurrent","pageWishes","start","end","handlePageChange","idx","showWishStatusDialog","selectWishId","selectStatus","wishStatusList","handleChangeStatus","wishId","status","handleSaveStatus","wish","ElMessage","desVisible","formData","handleRewriteDes","id","handleUpdateWish","onMounted","isMobile","useIsMobile"],"mappings":"svBAsGMA,EAAiB,uCAxFjB,MAAAC,EAASC,EAAkC,CAAA,CAAE,EACnD,SAASC,GAAgB,CACvBC,EAAQ,YAAY,EAAE,KAAMC,GAAM,CAChCJ,EAAO,OAAO,EAAGA,EAAO,OAAQ,GAAGI,EAAE,IAAI,CAAA,CAC1C,CACH,CAGM,MAAAC,EAAgBC,EAAI,EAAE,EACtBC,EAAaD,EAAI,EAAE,EACnBE,EAAcP,EAAS,CAC3B,CACE,MAAO,MACP,KAAMQ,EAAW,MACnB,EACA,CACE,MAAO,MACP,KAAMA,EAAW,IACnB,EACA,CACE,MAAO,KACP,KAAMA,EAAW,KACnB,EACA,CACE,MAAO,MACP,KAAMA,EAAW,GACnB,EACA,CACE,MAAO,MACP,KAAMA,EAAW,KACnB,CAAA,CACD,EAEKC,EAAeC,EAAS,IAAMX,EACjC,UAAYI,EAAE,SAAWC,EAAc,OAASA,EAAc,QAAU,EAAE,EAC1E,OAAQD,GAAM,CACP,KAAA,CACJ,WAAAQ,EACA,MAAAC,EACA,IAAAC,EACA,QAAAC,CACE,EAAAX,EACA,OAAAG,EAAW,MAAM,SAAW,EACvB,GACF,GAAG,OAAAS,EAAW,IAAI,KAAKJ,CAAU,CAAC,EAAC,KAAI,OAAAC,EAAK,KAAI,OAAAC,EAAG,KAAI,OAAAC,GAAU,SAASR,EAAW,KAAK,CAClG,CAAA,CAAC,EAGEU,EAAWX,EAAI,EAAE,EACvB,SAASY,EAAiBd,EAAW,CACnCa,EAAS,MAAQb,CACnB,CACM,MAAAe,EAAYR,EAAS,IACf,KAAK,KAAKD,EAAa,MAAM,OAASO,EAAS,KAAK,CAE/D,EACKG,EAAcd,EAAI,CAAC,EACnBe,EAAaV,EAAS,IAAM,CAChC,MAAMW,GAASF,EAAY,MAAQ,GAAKH,EAAS,MAC3CM,EAAOH,EAAY,MAASH,EAAS,MAC3C,OAAOP,EAAa,MAAM,MAAMY,EAAOC,CAAG,CAAA,CAC3C,EACD,SAASC,EAAiBC,EAAa,CACrCL,EAAY,MAAQK,CACtB,CAGM,MAAAC,EAAuBpB,EAAI,EAAK,EAChCqB,EAAerB,EAAI,EAAE,EACrBsB,EAAetB,EAAIG,EAAW,MAAM,EACpCoB,EAAiBrB,EACd,SAAAsB,EAAmBC,EAAgBC,EAAoB,CAC9DL,EAAa,MAAQI,EACrBH,EAAa,MAAQI,EACrBN,EAAqB,MAAQ,EAC/B,CACA,SAASO,GAAmB,CAC1B,MAAMC,EAAOlC,EAAO,QAAUI,EAAE,KAAOuB,EAAa,KAAK,EACzDO,EAAK,OAASN,EAAa,MAC3BF,EAAqB,MAAQ,GAC7BvB,EACG,iBAAiBwB,EAAa,MAAOC,EAAa,KAAK,EACvD,KAAK,IAAM,CACVO,EAAU,QAAQ,MAAM,CAAA,CACzB,CACL,CAIM,MAAAC,EAAa9B,EAAI,EAAK,EACtB+B,EAAWpC,EAAS,CACxB,MAAO,GACP,IAAK,EAAA,CACN,EACQ,SAAAqC,EAAiBC,EAAY1B,EAAeC,EAAa,CAChEa,EAAa,MAAQY,EACrBF,EAAS,MAAQxB,EACjBwB,EAAS,IAAMvB,EACfsB,EAAW,MAAQ,EACrB,CACA,SAASI,GAAmB,CAC1B,MAAMN,EAAOlC,EAAO,QAAUI,EAAE,KAAOuB,EAAa,KAAK,EAEtDxB,EAAA,cAAcwB,EAAa,MAAOU,EAAS,MAAOA,EAAS,GAAG,EAC9D,KAAK,IAAM,CACVD,EAAW,MAAQ,GACnBF,EAAK,MAAQG,EAAS,MACtBH,EAAK,IAAMG,EAAS,IACpBF,EAAU,QAAQ,MAAM,CAAA,CACzB,CACL,CACAM,GAAU,IAAM,CACAvC,GAAA,CACf,EAED,MAAMwC,EAAWC"}
@@ -0,0 +1,2 @@
1
+ import{f as Ae,d as $e,a as s,c as p,b as l,Z as Oe,u as qe,a1 as Ge,X as z,M as g,r as _,Y as He,bq as Je,o as Ye,aY as he,E as r,bp as Ke,h as Qe,i as d,w as o,F as $,A as te,t as k,a8 as ae,j as N,Q as h,e as u,B as y,a9 as ye,a5 as we,a3 as Xe,b0 as ke,ae as le,bM as Ze,ac as W,aa as et,ad as be,v as tt,q as at,ag as lt,ah as st,s as nt,G as ot,a_ as it,n as ut,ai as rt,b2 as dt,P as pt,_ as mt}from"./index-DbhWmXsj.js";import{v as ft}from"./el-loading-DgUVClxn.js";import{E as vt}from"./el-upload-BxExG7hd.js";import{I as ct}from"./index--nCmso-n.js";import{E as gt}from"./el-empty-BZNyAlA7.js";import{T as E,E as _t}from"./tip-Nu5QmDDd.js";import{L as ht}from"./linkDialog-D30VnNS0.js";import{E as xe}from"./index-DC08DNQQ.js";import"./el-tag-uk6aooq0.js";import"./el-select-DWyBOD47.js";import"./el-scrollbar-D2RZSJkX.js";import"./index-DT7ciPLb.js";import"./aria-nkjrUMQ-.js";const yt=$e({name:"UploadFilled"}),wt={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},kt=l("path",{fill:"currentColor",d:"M544 864V672h128L512 480 352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.808 239.808 0 0 1 512 192a239.872 239.872 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6H544z"},null,-1),bt=[kt];function xt(Ne,O,se,ne,V,oe){return s(),p("svg",wt,bt)}var $t=Ae(yt,[["render",xt]]);const Nt={class:"task-panel"},Et={class:"pc-nav"},Ft={class:"nav"},Ut={class:"logo"},zt=["onClick"],Ct={key:0,"element-loading-text":"Loading...",class:"panel tc"},Tt={class:"name"},Lt={key:0,style:{color:"red"}},Mt={class:"tip-wrapper"},St={class:"ddl"},It={key:0},Vt={key:4},Dt={class:"infos"},Bt={key:0},Pt={class:"infos"},Rt={class:"p10"},Wt={class:"p10"},jt={class:"p10 option-tips"},At={style:{color:"red"}},Ot={style:{color:"red"}},qt={class:"withdraw"},Gt={key:1,class:"panel tc"},Ht={class:"name"},Jt={style:{"padding-top":"20px"}},Yt=$e({__name:"index",setup(Ne){const O=Oe(),se=qe(),ne=Ge(),V=z([{title:"我也要收集",path:"https://docs.ep.sugarat.top/"}]);function oe(t){if(V[t].path.startsWith("http")){window.location.href=V[t].path;return}se.push({path:V[t].path})}const C=z({name:"",category:""}),n=z({bindField:""}),v=g(()=>it(n.format)),m=_(""),j=_(0),D=g(()=>j.value<=0),Ee=g(()=>{let t=~~(j.value/1e3),e=~~(t/(60*60));const a=~~(e/24);e%=24;const i=~~(t%3600/60);return t%=60,"剩余".concat(a,"天").concat(e,"时").concat(i,"分").concat(t,"秒")});function q(t=!0){if(n!=null&&n.ddl){const e=new Date(n.ddl);j.value=e.getTime()-Date.now()}else j.value=0;t&&setTimeout(()=>{q()},1e3)}const T=g(()=>{if(n!=null&&n.ddl){const t=new Date(n.ddl);return ut(t)}return""}),c=z([]),F=_([]),G=_(),H=g(()=>F.value.filter(t=>t.status==="uploading").length>0),Fe=t=>t.status==="uploading"||t.status==="success"?xe.confirm("不影响已经上传成功的,正在上传的将取消上传","确定从列表移除文件吗?").then(()=>(t.status==="uploading"&&(r.info("取消".concat(t.name,"的上传")),t.subscription.unsubscribe()),!0)).catch(()=>!1):!0,J=g(()=>c.every(t=>t.value)),L=g(()=>n.bindField.trim()||"姓名"),ie=g(()=>c.find(t=>t.text===L.value)),Ue=g(()=>n.people&&!ie.value),b=z({peopleName:""});function ue(t,e,a){if(!e){const i="请输入".concat(L.value);a(new Error(i)),r.error(i);return}ke.checkPeopleIsExist(m.value,e).then(i=>{i.data.exist||r.error("你不在此次提交名单中,如有疑问请联系管理员"),a(i.data.exist?void 0:new Error("你不在此次提交名单中,如有疑问请联系管理员"))})}const re=_(),ze=z({peopleName:[{validator:ue,trigger:"blur"}]});function Y(){var t;if(ie.value){const e=(t=c.find(a=>a.text===L.value))==null?void 0:t.value;return b.peopleName=e||"",new Promise(a=>{ue(null,e,a)}).then(a=>!a)}return re.value.validate(e=>e)}function Ce(){const t=F.value;for(const e of t)if(!e.md5)r.info("文件(".concat(e.name,")的唯一指纹还在计算中,再等待一会儿再点击上传")),setTimeout(()=>{r.info("文件越大计算时间越长(1G通常需要20s)")},100);else if(e.status==="ready"){e.status="uploading";let{name:a}=e;const i=a;n.rewrite&&(a=c.map(P=>P.value).join(v.value.splitChar||"-")+le(a)),a=rt(a);const Z="easypicker2/".concat(m.value,"/").concat(e.md5,"/").concat(a);W.getUploadToken().then(P=>{dt(P.data.token,e.raw,Z,{success(R){const{fsize:A}=R;W.addFile({originName:i,name:a,taskKey:m.value,taskName:C.name,size:A,hash:e.md5,info:JSON.stringify(c),people:b.peopleName}).then(()=>{e.status="success",r.success("文件:".concat(e.name,"提交成功")),n.people&&ke.updatePeopleStatus(m.value,a,b.peopleName,e.md5)})},process(R,A,ee){e.percentage=Math.floor(R),e.subscription=ee}})})}}async function Te(){if(!J.value){r.warning("请先完成必要信息的填写");return}n.people&&!await Y()||Ce()}const Le=g(()=>{for(const t of F.value)if(t.status==="ready")return!0;return!1}),Me=g(()=>{for(const t of F.value)if(["success","ready"].includes(t.status))return!0;return!1}),M=_(0);function Se(t){const{name:e}=t;if(v.value.format.length&&v.value.status){const a=le(e);if(!v.value.format.some(i=>a.toLowerCase().endsWith(i))){r.error("".concat(e," 格式不符合要求")),G.value.handleRemove(t);return}}if(v.value.size&&v.value.size<t.size){r.error("".concat(e," 大小").concat(we(t.size)," 不符合要求")),G.value.handleRemove(t);return}M.value+=1,Ze(t.raw).then(a=>{t.md5=a,M.value-=1})}const de=g(()=>v.value.limit||10);function Ie(){r.warning("一次提交最多只能选择".concat(de.value,"个文件,请移除已经上传成功的或刷新页面"))}const K=_(!1),pe=_("");function Ve(){const t=F.value;for(const e of t)if(!e.md5)r.info("文件(".concat(e.name,")的唯一指纹还在计算中,再等待一会儿再点击上传")),setTimeout(()=>{r.info("文件越大计算时间越长(1G通常需要20s)")},100);else if(!["fail","uploading"].includes(e.status)){let{name:a}=e;n.rewrite&&(a=c.map(i=>i.value).join(v.value.splitChar||"-")+le(a)),W.withdrawFile({taskKey:m.value,taskName:C.name,filename:a,hash:e.md5,info:JSON.stringify(c),peopleName:b.peopleName}).then(()=>{r.success("文件:".concat(e.name,"撤回成功")),e.name+=" - (已撤回 ✅ )",e.status="fail"}).catch(()=>{r.error("撤回失败: 没有文件:".concat(e.name,"对应提交记录"))})}}function me(){W.getTemplateUrl(n.template,m.value).then(t=>{K.value=!0;const{link:e}=t.data;pe.value=e,et(e,n.template)}).catch(()=>{r.warning("文件已从服务器上移除,请联系管理员重新上传")})}const B=_(!1);async function De(){if(!J.value){r.warning("请先完成必要信息的填写");return}n.people&&!await Y()||Ve()}async function Be(){if(!J.value){r.warning("请先完成必要信息的填写,需和提交时信息完全一致");return}n.people&&!await Y()||W.checkSubmitStatus(m.value,c,b.peopleName).then(t=>{t.data.isSubmit?r.success("已经提交过啦"):r.warning("还未提交过哟")})}const Q=_(!1),X=_(!1);function fe(t=[],e=[]){return t.length!==e.length?!1:t.every((a,i)=>a.type===e[i].type&&a.text===e[i].text&&fe(a.children,e[i].children))}function ve(t=!1){he.getTaskMoreInfo(m.value).then(e=>{Object.assign(n,e.data),fe(c,be(n.info))||(c.splice(0,c.length),c.push(...be(n.info)),t&&r.success("表单信息有更新")),q(!1),Q.value=!1})}function ce(){X.value=!0}function ge(){X.value&&!H.value&&(X.value=!1,ve(!0))}const Pe=g(()=>D.value?T.value:T.value+Ee.value),U=z({text:"",imgs:[]}),w=_([]);He(()=>n.tip,()=>{try{const t=JSON.parse(n.tip);U.imgs=t.imgs,U.text=t.text||"",w.value=U.imgs.map(e=>({...e,url:"https://img.cdn.sugarat.top/mdImg/MTY3NzkxMDI1NTU1Nw==20140524124237518.gif"})),w.value.length&&pt.getTipImageUrl(m.value,w.value.map(e=>({uid:e.uid,name:e.name}))).then(e=>{e.data.forEach((a,i)=>{w.value[i].url=a.cover,Object.assign(w.value[i],{preview:a.preview})})})}catch(t){U.text="",U.imgs=[],w.value=[]}});const S=Je("disabledUpload",!1);return Ye(()=>{m.value=ne.params.key,m.value&&(Q.value=!0,he.getTaskInfo(m.value).then(t=>{Object.assign(C,t.data),S.value=!!t.data.limitUpload,S.value&&xe.alert("任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间")}).catch(t=>{t.code===4001&&(r.error("任务不存在"),m.value="",C.name="任务不存在")}),ve(),q()),window.addEventListener("blur",ce),window.addEventListener("focus",ge)}),Ke(()=>{window.removeEventListener("blur",ce),window.removeEventListener("focus",ge)}),(t,e)=>{const a=Qe("router-link"),i=tt,Z=_t,P=gt,R=at,A=lt,ee=st,x=nt,Re=ot,We=vt,je=ft;return s(),p("div",Nt,[l("div",Et,[l("div",Ft,[l("div",Ut,[d(a,{to:"/"},{default:o(()=>e[5]||(e[5]=[l("img",{style:{height:"40px",width:"170px"},src:"https://img.cdn.sugarat.top/easypicker/EasyPicker.png",alt:"logo"},null,-1)])),_:1})]),l("nav",null,[(s(!0),p($,null,te(V,(f,I)=>(s(),p("div",{key:I,class:"nav-item",onClick:_e=>oe(I)},k(f.title),9,zt))),128))])])]),m.value?ae((s(),p("div",Ct,[l("h1",Tt,k(C.name),1),N(S)?(s(),p("h2",Lt," 任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间 ")):h("",!0),U.text&&(!T.value||!D.value)?(s(),p($,{key:1},[d(i,null,{default:o(()=>e[6]||(e[6]=[u("⚠️ 注意事项 ⚠️")])),_:1}),d(E,null,{default:o(()=>[l("div",Mt,[(s(!0),p($,null,te(U.text.split("\n"),(f,I)=>(s(),p("p",{key:I},k(f.replace(/\s/g," ")),1))),128))])]),_:1})],64)):h("",!0),w.value.length&&(!T.value||!D.value)?(s(!0),p($,{key:2},te(w.value,(f,I)=>(s(),y(Z,{key:f.uid,"hide-on-click-modal":"",style:{width:"100px",height:"100px",margin:"10px"},src:f.url,"zoom-rate":1.2,"preview-src-list":w.value.map(_e=>_e.preview),"initial-index":I,fit:"contain"},null,8,["src","preview-src-list","initial-index"]))),128)):h("",!0),T.value?(s(),p($,{key:3},[d(i,null,{default:o(()=>e[7]||(e[7]=[u("截止时间")])),_:1}),l("h2",St,k(Pe.value),1),D.value?(s(),p("div",It,[d(P,{description:"已经结束啦!"})])):h("",!0)],64)):h("",!0),!T.value||!D.value?(s(),p("div",Vt,[d(i,null,{default:o(()=>e[8]||(e[8]=[u("必要信息填写")])),_:1}),l("div",Dt,[ae(l("div",null,[d(E,null,{default:o(()=>[u("“"+k(L.value)+"”在参与名单里才能正常提交",1)]),_:1})],512),[[ye,n.people]]),Ue.value?(s(),p("div",Bt,[l("div",Pt,[d(ee,{ref_key:"validModalRef",ref:re,rules:ze,"status-icon":"",model:b,disabled:H.value,"label-position":"top"},{default:o(()=>[d(A,{prop:"peopleName",label:L.value},{default:o(()=>[d(R,{modelValue:b.peopleName,"onUpdate:modelValue":e[0]||(e[0]=f=>b.peopleName=f),maxlength:14,clearable:"","show-word-limit":"",placeholder:"请输入 ".concat(L.value)},null,8,["modelValue","placeholder"])]),_:1},8,["label"])]),_:1},8,["rules","model","disabled"])])])):h("",!0),d(ct,{infos:c,disabled:H.value},null,8,["infos","disabled"])]),d(We,{ref_key:"fileUpload",ref:G,"file-list":F.value,"onUpdate:fileList":e[1]||(e[1]=f=>F.value=f),style:{"max-width":"400px",margin:"0 auto"},drag:!N(O),action:"","on-change":Se,"before-remove":Fe,"on-exceed":Ie,"auto-upload":!1,multiple:"",limit:de.value},{tip:o(()=>[ae(l("div",Rt,[d(E,null,{default:o(()=>[u(" 还有 "+k(M.value)+" 个文件正在生成校验信息,请稍等(1G通常需要20s) ",1)]),_:1})],512),[[ye,!!M.value]])]),default:o(()=>[N(O)?(s(),y(x,{key:0,type:"primary"},{default:o(()=>e[9]||(e[9]=[u(" 选择文件 ")])),_:1})):(s(),p($,{key:1},[d(Re,{class:"el-icon--upload"},{default:o(()=>[d(N($t))]),_:1}),e[10]||(e[10]=l("div",{class:"el-upload__text"},[u(" 将文件拖于此处 or "),l("em",null,"直接选择文件")],-1))],64))]),_:1},8,["file-list","drag","limit"]),l("div",Wt,[B.value?(s(),y(x,{key:0,size:"default",type:"warning",disabled:!Me.value||!!M.value,onClick:De},{default:o(()=>e[11]||(e[11]=[u(" 一键撤回 ")])),_:1},8,["disabled"])):N(S)?h("",!0):(s(),y(x,{key:1,size:"default",type:"success",disabled:!Le.value||!!M.value,onClick:Te},{default:o(()=>e[12]||(e[12]=[u(" 提交文件 ")])),_:1},8,["disabled"])),d(x,{size:"default",onClick:Be},{default:o(()=>e[13]||(e[13]=[u(" 查询提交情况 ")])),_:1})]),l("div",jt,[v.value.status&&v.value.format.length?(s(),y(E,{key:0},{default:o(()=>[e[14]||(e[14]=u(" 限制格式为: ")),l("span",At,k(v.value.format.join(", ")),1)]),_:1})):h("",!0),v.value.size?(s(),y(E,{key:1},{default:o(()=>[e[15]||(e[15]=u(" 限制文件大小不超过: ")),l("span",Ot,k(N(we)(v.value.size)),1)]),_:1})):h("",!0),B.value?(s(),y(E,{key:2},{default:o(()=>e[16]||(e[16]=[u(" ① 须保证选择的文件与提交时的文件一致"),l("br",null,null,-1),u(" ② 填写表单信息一致 "),l("br",null,null,-1),u(" ③ 完全一模一样的文件的提交记录(内容md5+命名),将会一次性全部撤回 ")])),_:1})):(s(),p($,{key:3},[d(E,null,{default:o(()=>e[17]||(e[17]=[l("strong",null,"查询提交情况,需填写和提交时一样的表单信息",-1)])),_:1}),d(E,null,{default:o(()=>[e[21]||(e[21]=u(" ① 选择完文件,点击 ”提交文件“即可 ")),e[22]||(e[22]=l("br",null,null,-1)),e[23]||(e[23]=u(" ② ")),e[24]||(e[24]=l("strong",null,"选择大文件后需要等待一会儿才展示处理",-1)),n.template&&!N(S)?(s(),p($,{key:0},[e[19]||(e[19]=l("br",null,null,-1)),e[20]||(e[20]=u(" ③ ")),l("strong",null,[d(x,{type:"primary",text:"",style:{color:"#85ce61"},size:"small",onClick:me},{default:o(()=>e[18]||(e[18]=[u("右下角可 “查看提交示例” ")])),_:1})])],64)):h("",!0)]),_:1})],64))]),l("div",qt,[n.template&&!N(S)?(s(),y(x,{key:0,type:"primary",text:"",style:{color:"#85ce61"},size:"small",onClick:me},{default:o(()=>e[25]||(e[25]=[u(" 查看提交示例 ")])),_:1})):h("",!0),B.value?(s(),y(x,{key:1,size:"small",type:"primary",text:"",onClick:e[2]||(e[2]=f=>B.value=!1)},{default:o(()=>e[26]||(e[26]=[u(" 正常提交 ")])),_:1})):(s(),y(x,{key:2,size:"small",type:"primary",text:"",onClick:e[3]||(e[3]=f=>B.value=!0)},{default:o(()=>e[27]||(e[27]=[u(" 我要撤回 ")])),_:1}))])])):h("",!0)])),[[je,Q.value]]):(s(),p("div",Gt,[l("h1",Ht,k(C.name),1)])),d(ht,{value:K.value,"onUpdate:value":e[4]||(e[4]=f=>K.value=f),title:"示例文件下载链接",link:pe.value},null,8,["value","link"]),l("div",Jt,[d(Xe,{type:"task"})])])}}}),ra=mt(Yt,[["__scopeId","data-v-7bb49be2"]]);export{ra as default};
2
+ //# sourceMappingURL=index-COI3CDfm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-COI3CDfm.js","sources":["../../../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.5.12_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/upload-filled.mjs","../../src/pages/task/index.vue"],"sourcesContent":["import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"UploadFilled\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M544 864V672h128L512 480 352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.808 239.808 0 0 1 512 192a239.872 239.872 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6H544z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar uploadFilled = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { uploadFilled as default };\n","<script lang=\"ts\" setup>\nimport type { FormInstance, UploadInstance, UploadUserFile } from 'element-plus'\nimport HomeFooter from '@components/HomeFooter/index.vue'\nimport LinkDialog from '@components/linkDialog.vue'\nimport { UploadFilled } from '@element-plus/icons-vue'\nimport { useLocalStorage } from '@vueuse/core'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { computed, onMounted, onUnmounted, reactive, ref, watch } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { FileApi, PeopleApi, PublicApi, TaskApi } from '@/apis'\nimport InfosForm from '@/components/InfosForm/index.vue'\nimport { useIsMobile } from '@/composables'\nimport { downLoadByUrl, qiniuUpload } from '@/utils/networkUtil'\nimport {\n formatDate,\n formatSize,\n getFileMd5Hash,\n getFileSuffix,\n normalizeFileName,\n parseFileFormat,\n parseInfo,\n} from '@/utils/stringUtil'\nimport Tip from '../dashboard/tasks/components/infoPanel/tip.vue'\n\nconst isMobile = useIsMobile()\n// 顶部导航\nconst $router = useRouter()\nconst $route = useRoute()\nconst pcNavs = reactive([\n {\n title: '我也要收集',\n path: 'https://docs.ep.sugarat.top/',\n },\n])\nfunction handleNav(idx: number) {\n if (pcNavs[idx].path.startsWith('http')) {\n window.location.href = pcNavs[idx].path\n return\n }\n $router.push({\n path: pcNavs[idx].path,\n })\n}\n\n// 任务基本信息展示\nconst taskInfo = reactive<TaskApiTypes.TaskInfo>({\n name: '',\n category: '',\n})\nconst taskMoreInfo = reactive<Partial<TaskApiTypes.TaskInfo>>({\n bindField: '',\n})\nconst formatData = computed(() => parseFileFormat(taskMoreInfo.format))\nconst k = ref('')\n\n// 用于展示截止日期\nconst waitTime = ref(0)\n// 判断是否结束\nconst isOver = computed(() => waitTime.value <= 0)\nconst waitTimeStr = computed(() => {\n let seconds = ~~(waitTime.value / 1000)\n let hour = ~~(seconds / (60 * 60))\n const day = ~~(hour / 24)\n hour %= 24\n const minute = ~~((seconds % 3600) / 60)\n seconds %= 60\n return `剩余${day}天${hour}时${minute}分${seconds}秒`\n})\nfunction refreshWaitTime(loop = true) {\n if (taskMoreInfo?.ddl) {\n const date = new Date(taskMoreInfo.ddl)\n waitTime.value = date.getTime() - Date.now()\n }\n else {\n waitTime.value = 0\n }\n if (loop) {\n setTimeout(() => {\n refreshWaitTime()\n }, 1000)\n }\n}\nconst ddlStr = computed(() => {\n if (taskMoreInfo?.ddl) {\n const date = new Date(taskMoreInfo.ddl)\n return formatDate(date)\n }\n return ''\n})\n\n// 必填信息\nconst infos = reactive<InfoItem[]>([])\n\n// 文件上传部分\n\n// 文件上传\nconst fileList = ref<(UploadUserFile & { md5: string, subscription: any })[]>(\n [],\n)\nconst fileUpload = ref<UploadInstance>()\nconst disableForm = computed(\n () => fileList.value.filter(item => item.status === 'uploading').length > 0,\n)\nconst handleRemoveFile: any = (file: any) => {\n if (file.status === 'uploading' || file.status === 'success') {\n return ElMessageBox.confirm(\n '不影响已经上传成功的,正在上传的将取消上传',\n '确定从列表移除文件吗?',\n )\n .then(() => {\n if (file.status === 'uploading') {\n ElMessage.info(`取消${file.name}的上传`)\n // 取消上传\n file.subscription.unsubscribe() // 取消上传\n }\n return true\n })\n .catch(() => false)\n }\n return true\n}\n\n// 校验表单填写\nconst isWriteFinish = computed(() => infos.every(item => item.value))\n// 提交文件\n\nconst limitBindField = computed(() => {\n return taskMoreInfo.bindField.trim() || '姓名'\n})\n\n// 身份核验表单\nconst isSameFieldName = computed(() =>\n infos.find(v => v.text === limitBindField.value),\n)\nconst showValidForm = computed(\n () => taskMoreInfo.people && !isSameFieldName.value,\n)\nconst validModal = reactive({\n peopleName: '',\n})\n\nfunction validatePeopleName(rule: any, value: any, callback: any) {\n if (!value) {\n const message = `请输入${limitBindField.value}`\n callback(new Error(message))\n ElMessage.error(message)\n return\n }\n // 异步校验\n PeopleApi.checkPeopleIsExist(k.value, value).then((res) => {\n if (!res.data.exist) {\n ElMessage.error('你不在此次提交名单中,如有疑问请联系管理员')\n }\n callback(\n res.data.exist\n ? undefined\n : new Error('你不在此次提交名单中,如有疑问请联系管理员'),\n )\n })\n}\n\nconst validModalRef = ref<FormInstance>()\nconst validModalRules = reactive({\n peopleName: [{ validator: validatePeopleName, trigger: 'blur' }],\n})\nfunction confirmPeopleName() {\n // 处理表单必填项含有 limitBindField 的情况\n if (isSameFieldName.value) {\n const value = infos.find(v => v.text === limitBindField.value)?.value\n validModal.peopleName = value || ''\n return new Promise((resolve) => {\n validatePeopleName(null, value, resolve)\n }).then(v => !v)\n }\n return validModalRef.value.validate((isValid: boolean) => isValid)\n}\n\nfunction startUpload() {\n const uploadFiles = fileList.value\n for (const file of uploadFiles) {\n if (!file.md5) {\n ElMessage.info(\n `文件(${file.name})的唯一指纹还在计算中,再等待一会儿再点击上传`,\n )\n setTimeout(() => {\n ElMessage.info('文件越大计算时间越长(1G通常需要20s)')\n }, 100)\n }\n else if (file.status === 'ready') {\n // 开始上传\n file.status = 'uploading'\n let { name } = file\n const originName = name\n // 如果开启了自动重命名,这里重命名一下\n if (taskMoreInfo.rewrite) {\n name\n = infos.map(v => v.value).join(formatData.value.splitChar || '-')\n + getFileSuffix(name)\n }\n // 替换不合法的字符\n name = normalizeFileName(name)\n const key = `easypicker2/${k.value}/${file.md5}/${name}`\n\n FileApi.getUploadToken().then((res) => {\n qiniuUpload(res.data.token, file.raw, key, {\n success(data: any) {\n const { fsize } = data\n FileApi.addFile({\n originName,\n name,\n taskKey: k.value,\n taskName: taskInfo.name,\n size: fsize,\n hash: file.md5,\n info: JSON.stringify(infos),\n people: validModal.peopleName,\n }).then(() => {\n file.status = 'success'\n ElMessage.success(`文件:${file.name}提交成功`)\n if (taskMoreInfo.people) {\n // 无感知更新一下\n PeopleApi.updatePeopleStatus(\n k.value,\n name,\n validModal.peopleName,\n file.md5,\n )\n }\n })\n },\n process(per: number, data: any, subscription: any) {\n file.percentage = Math.floor(per)\n // 挂载取消上传的方法\n file.subscription = subscription\n },\n })\n })\n }\n }\n}\n\nasync function submitUpload() {\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写')\n return\n }\n\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n startUpload()\n}\n\n// 是否允许上传\nconst allowUpload = computed(() => {\n for (const file of fileList.value) {\n if (file.status === 'ready') {\n return true\n }\n }\n return false\n})\n\n// 是否允许撤回\nconst allowWithdraw = computed(() => {\n for (const file of fileList.value) {\n if (['success', 'ready'].includes(file.status)) {\n return true\n }\n }\n return false\n})\n\n// 添加文件\n// 正在计算MD5值的文件个数\nconst calculateMd5Count = ref(0)\nfunction handleChangeFile(file: any) {\n // 校验文件后缀名\n const { name } = file\n if (formatData.value.format.length && formatData.value.status) {\n const suffix = getFileSuffix(name)\n if (\n !formatData.value.format.some(v => suffix.toLowerCase().endsWith(v))\n ) {\n ElMessage.error(`${name} 格式不符合要求`)\n fileUpload.value.handleRemove(file)\n return\n }\n }\n\n // 校验文件大小\n if (formatData.value.size && formatData.value.size < file.size) {\n ElMessage.error(`${name} 大小${formatSize(file.size)} 不符合要求`)\n fileUpload.value.handleRemove(file)\n return\n }\n\n calculateMd5Count.value += 1\n // 计算md5 hash\n getFileMd5Hash(file.raw).then((str) => {\n file.md5 = str\n calculateMd5Count.value -= 1\n })\n}\n\nconst limitUploadCount = computed(() => formatData.value.limit || 10)\nfunction handleExceed() {\n ElMessage.warning(\n `一次提交最多只能选择${limitUploadCount.value}个文件,请移除已经上传成功的或刷新页面`,\n )\n}\nconst showLinkModel = ref(false)\nconst templateLink = ref('')\nfunction runWithdraw() {\n const uploadFiles = fileList.value\n for (const file of uploadFiles) {\n if (!file.md5) {\n ElMessage.info(\n `文件(${file.name})的唯一指纹还在计算中,再等待一会儿再点击上传`,\n )\n setTimeout(() => {\n ElMessage.info('文件越大计算时间越长(1G通常需要20s)')\n }, 100)\n }\n else if (!['fail', 'uploading'].includes(file.status)) {\n // 准备开始撤回\n let { name } = file\n\n // 如果开启了自动重命名,这里重命名一下\n if (taskMoreInfo.rewrite) {\n name\n = infos.map(v => v.value).join(formatData.value.splitChar || '-')\n + getFileSuffix(name)\n }\n\n FileApi.withdrawFile({\n taskKey: k.value,\n taskName: taskInfo.name,\n filename: name,\n hash: file.md5,\n info: JSON.stringify(infos),\n peopleName: validModal.peopleName,\n })\n .then(() => {\n ElMessage.success(`文件:${file.name}撤回成功`)\n file.name += ' - (已撤回 ✅ )'\n file.status = 'fail'\n })\n .catch(() => {\n ElMessage.error(`撤回失败: 没有文件:${file.name}对应提交记录`)\n })\n }\n }\n}\nfunction downloadTemplate() {\n FileApi.getTemplateUrl(taskMoreInfo.template, k.value)\n .then((res) => {\n showLinkModel.value = true\n const { link } = res.data\n templateLink.value = link\n downLoadByUrl(link, taskMoreInfo.template)\n })\n .catch(() => {\n ElMessage.warning('文件已从服务器上移除,请联系管理员重新上传')\n })\n}\n\n// 撤回相关逻辑\nconst isWithdraw = ref(false)\nasync function startWithdraw() {\n // 校验表单填写\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写')\n return\n }\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n runWithdraw()\n}\n\n// 查询提交情况\nasync function checkSubmitStatus() {\n // 校验表单填写\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写,需和提交时信息完全一致')\n return\n }\n // 卡控人员限制\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n FileApi.checkSubmitStatus(k.value, infos, validModal.peopleName).then(\n (res) => {\n if (res.data.isSubmit) {\n ElMessage.success('已经提交过啦')\n }\n else {\n ElMessage.warning('还未提交过哟')\n }\n },\n )\n}\nconst isLoadingData = ref(false)\nconst readyRefresh = ref(false)\nfunction isEqualInfos(a: InfoItem[] = [], b: InfoItem[] = []) {\n if (a.length !== b.length) {\n return false\n }\n return a.every(\n (v, i) =>\n v.type === b[i].type\n && v.text === b[i].text\n && isEqualInfos(v.children, b[i].children),\n )\n}\nfunction refreshTaskMoreInfo(hot = false) {\n TaskApi.getTaskMoreInfo(k.value).then((res) => {\n Object.assign(taskMoreInfo, res.data)\n if (!isEqualInfos(infos, parseInfo(taskMoreInfo.info))) {\n infos.splice(0, infos.length)\n infos.push(...parseInfo(taskMoreInfo.info))\n if (hot) {\n ElMessage.success('表单信息有更新')\n }\n }\n refreshWaitTime(false)\n isLoadingData.value = false\n })\n}\nfunction handleBlur() {\n readyRefresh.value = true\n}\nfunction handleFocus() {\n if (readyRefresh.value && !disableForm.value) {\n readyRefresh.value = false\n refreshTaskMoreInfo(true)\n }\n}\n\n// 展示的时间提示文案\nconst timeInfo = computed(() => {\n if (!isOver.value) {\n return ddlStr.value + waitTimeStr.value\n }\n return ddlStr.value\n})\n\n// tipImage\nconst tipData = reactive<{\n text: string\n imgs: {\n uid: number\n name: string\n }[]\n}>({\n text: '',\n imgs: [],\n})\nconst imageList = ref<\n { name: string, uid: number, preview?: string, url: string }[]\n>([])\n\nwatch(\n () => taskMoreInfo.tip,\n () => {\n // 初始化\n try {\n const parseData = JSON.parse(taskMoreInfo.tip)\n tipData.imgs = parseData.imgs\n tipData.text = parseData.text || ''\n imageList.value = tipData.imgs.map((v) => {\n return {\n ...v,\n url: 'https://img.cdn.sugarat.top/mdImg/MTY3NzkxMDI1NTU1Nw==20140524124237518.gif',\n }\n })\n if (imageList.value.length) {\n // 异步填充url\n PublicApi.getTipImageUrl(\n k.value,\n imageList.value.map(v => ({\n uid: v.uid,\n name: v.name,\n })),\n ).then((v) => {\n v.data.forEach((url, idx) => {\n imageList.value[idx].url = url.cover\n Object.assign(imageList.value[idx], {\n preview: url.preview,\n })\n })\n })\n }\n }\n catch {\n tipData.text = ''\n tipData.imgs = []\n imageList.value = []\n }\n },\n)\n\n// 禁用上传\nconst disabledUpload = useLocalStorage('disabledUpload', false)\n\nonMounted(() => {\n k.value = $route.params.key as string\n if (k.value) {\n isLoadingData.value = true\n TaskApi.getTaskInfo(k.value)\n .then((res) => {\n Object.assign(taskInfo, res.data)\n disabledUpload.value = !!res.data.limitUpload\n if (disabledUpload.value) {\n ElMessageBox.alert(\n '任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间',\n )\n }\n })\n .catch((err) => {\n if (err.code === 4001) {\n ElMessage.error('任务不存在')\n k.value = ''\n taskInfo.name = '任务不存在'\n }\n })\n refreshTaskMoreInfo()\n refreshWaitTime()\n }\n // 页面隐藏\n window.addEventListener('blur', handleBlur)\n\n // 页面展示\n window.addEventListener('focus', handleFocus)\n})\n\nonUnmounted(() => {\n // 页面隐藏\n window.removeEventListener('blur', handleBlur)\n // 页面展示\n window.removeEventListener('focus', handleFocus)\n})\n</script>\n\n<template>\n <div class=\"task-panel\">\n <div class=\"pc-nav\">\n <div class=\"nav\">\n <!-- LOGO -->\n <div class=\"logo\">\n <router-link to=\"/\">\n <img\n style=\"height: 40px; width: 170px\"\n src=\"https://img.cdn.sugarat.top/easypicker/EasyPicker.png\"\n alt=\"logo\"\n >\n </router-link>\n </div>\n <nav>\n <div\n v-for=\"(n, idx) in pcNavs\"\n :key=\"idx\"\n class=\"nav-item\"\n @click=\"handleNav(idx)\"\n >\n {{ n.title }}\n </div>\n </nav>\n </div>\n </div>\n <!-- 有效 -->\n <div\n v-if=\"k\"\n v-loading=\"isLoadingData\"\n element-loading-text=\"Loading...\"\n class=\"panel tc\"\n >\n <!-- 任务名 -->\n <h1 class=\"name\">\n {{ taskInfo.name }}\n </h1>\n <h2 v-if=\"disabledUpload\" style=\"color: red\">\n 任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间\n </h2>\n <!-- 提示信息 -->\n <!-- 时间截止了也不再展示 -->\n <template v-if=\"tipData.text && (ddlStr ? !isOver : true)\">\n <el-divider>⚠️ 注意事项 ⚠️</el-divider>\n <Tip>\n <div class=\"tip-wrapper\">\n <p v-for=\"(t, i) in tipData.text.split('\\n')\" :key=\"i\">\n {{ t.replace(/\\s/g, '&nbsp;') }}\n </p>\n </div>\n </Tip>\n </template>\n <template v-if=\"imageList.length && (ddlStr ? !isOver : true)\">\n <el-image\n v-for=\"(img, idx) in imageList\"\n :key=\"img.uid\"\n hide-on-click-modal\n style=\"width: 100px; height: 100px; margin: 10px\"\n :src=\"img.url\"\n :zoom-rate=\"1.2\"\n :preview-src-list=\"imageList.map((v) => v.preview)\"\n :initial-index=\"idx\"\n fit=\"contain\"\n />\n </template>\n <!-- 截止时间字符串 -->\n <template v-if=\"ddlStr\">\n <el-divider>截止时间</el-divider>\n <h2 class=\"ddl\">\n {{ timeInfo }}\n </h2>\n <div v-if=\"isOver\">\n <el-empty description=\"已经结束啦!\" />\n </div>\n </template>\n <!-- 未设置ddl 或者 设置了还未结束 -->\n <div v-if=\"!ddlStr || !isOver\">\n <el-divider>必要信息填写</el-divider>\n <div class=\"infos\">\n <div v-show=\"taskMoreInfo.people\">\n <Tip>“{{ limitBindField }}”在参与名单里才能正常提交</Tip>\n </div>\n <div v-if=\"showValidForm\">\n <div class=\"infos\">\n <el-form\n ref=\"validModalRef\"\n :rules=\"validModalRules\"\n status-icon\n :model=\"validModal\"\n :disabled=\"disableForm\"\n label-position=\"top\"\n >\n <el-form-item prop=\"peopleName\" :label=\"limitBindField\">\n <el-input\n v-model=\"validModal.peopleName\"\n :maxlength=\"14\"\n clearable\n show-word-limit\n :placeholder=\"`请输入 ${limitBindField}`\"\n />\n </el-form-item>\n </el-form>\n </div>\n </div>\n <InfosForm :infos=\"infos\" :disabled=\"disableForm\" />\n </div>\n <el-upload\n ref=\"fileUpload\"\n v-model:file-list=\"fileList\"\n style=\"max-width: 400px; margin: 0 auto\"\n :drag=\"!isMobile\"\n action=\"\"\n :on-change=\"handleChangeFile\"\n :before-remove=\"handleRemoveFile\"\n :on-exceed=\"handleExceed\"\n :auto-upload=\"false\"\n multiple\n :limit=\"limitUploadCount\"\n >\n <el-button v-if=\"isMobile\" type=\"primary\">\n 选择文件\n </el-button>\n <template v-else>\n <el-icon class=\"el-icon--upload\">\n <UploadFilled />\n </el-icon>\n <div class=\"el-upload__text\">\n 将文件拖于此处 or <em>直接选择文件</em>\n </div>\n </template>\n <template #tip>\n <div v-show=\"!!calculateMd5Count\" class=\"p10\">\n <Tip>\n 还有\n {{ calculateMd5Count }}\n 个文件正在生成校验信息,请稍等(1G通常需要20s)\n </Tip>\n </div>\n </template>\n </el-upload>\n <div class=\"p10\">\n <el-button\n v-if=\"isWithdraw\"\n size=\"default\"\n type=\"warning\"\n :disabled=\"!allowWithdraw || !!calculateMd5Count\"\n @click=\"startWithdraw\"\n >\n 一键撤回\n </el-button>\n <el-button\n v-else-if=\"!disabledUpload\"\n size=\"default\"\n type=\"success\"\n :disabled=\"!allowUpload || !!calculateMd5Count\"\n @click=\"submitUpload\"\n >\n 提交文件\n </el-button>\n <el-button size=\"default\" @click=\"checkSubmitStatus\">\n 查询提交情况\n </el-button>\n </div>\n <!-- 提示信息 -->\n <div class=\"p10 option-tips\">\n <Tip v-if=\"formatData.status && formatData.format.length\">\n 限制格式为:\n <span style=\"color: red\">{{\n formatData.format.join(', ')\n }}</span>\n </Tip>\n <Tip v-if=\"formatData.size\">\n 限制文件大小不超过:\n <span style=\"color: red\">{{\n formatSize(formatData.size)\n }}</span>\n </Tip>\n <template v-if=\"isWithdraw\">\n <Tip>\n ① 须保证选择的文件与提交时的文件一致<br>\n ② 填写表单信息一致 <br>\n ③\n 完全一模一样的文件的提交记录(内容md5+命名),将会一次性全部撤回\n </Tip>\n </template>\n <template v-else>\n <Tip>\n <strong>查询提交情况,需填写和提交时一样的表单信息</strong>\n </Tip>\n <Tip>\n ① 选择完文件,点击 ”提交文件“即可 <br>\n ② <strong>选择大文件后需要等待一会儿才展示处理</strong>\n <template v-if=\"taskMoreInfo.template && !disabledUpload\">\n <br>\n ③\n <strong>\n <el-button\n type=\"primary\"\n text\n style=\"color: #85ce61\"\n size=\"small\"\n @click=\"downloadTemplate\"\n >右下角可 “查看提交示例”\n </el-button>\n </strong>\n </template>\n </Tip>\n </template>\n </div>\n <div class=\"withdraw\">\n <el-button\n v-if=\"taskMoreInfo.template && !disabledUpload\"\n type=\"primary\"\n text\n style=\"color: #85ce61\"\n size=\"small\"\n @click=\"downloadTemplate\"\n >\n 查看提交示例\n </el-button>\n <el-button\n v-if=\"isWithdraw\"\n size=\"small\"\n type=\"primary\"\n text\n @click=\"isWithdraw = false\"\n >\n 正常提交\n </el-button>\n <el-button\n v-else\n size=\"small\"\n type=\"primary\"\n text\n @click=\"isWithdraw = true\"\n >\n 我要撤回\n </el-button>\n </div>\n </div>\n </div>\n <!-- 无效任务 -->\n <div v-else class=\"panel tc\">\n <h1 class=\"name\">\n {{ taskInfo.name }}\n </h1>\n </div>\n <LinkDialog\n v-model:value=\"showLinkModel\"\n title=\"示例文件下载链接\"\n :link=\"templateLink\"\n />\n <div style=\"padding-top: 20px\">\n <HomeFooter type=\"task\" />\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.task-panel :deep(ul.el-upload-list) {\n border: 1px dashed #d4d4d4;\n padding: 10px;\n\n &::before {\n content: '此处展示选择文件列表';\n font-size: 12px;\n position: relative;\n bottom: 4px;\n }\n}\n\n.task-panel :deep(.el-upload-list__item-name) {\n display: block;\n overflow: hidden;\n max-width: 290px;\n text-overflow: ellipsis;\n word-break: keep-all;\n}\n\n.task-panel :deep(.is-ready .el-icon--close) {\n display: block;\n color: black;\n}\n\n.task-panel {\n background-color: #f3f6f8;\n padding-bottom: 1rem;\n position: relative;\n}\n\n.pc-nav {\n background-color: #fff;\n display: flex;\n padding: 10px;\n justify-content: space-between;\n align-items: center;\n\n .exit {\n cursor: pointer;\n }\n\n .nav {\n display: flex;\n\n nav {\n display: flex;\n align-items: center;\n\n .nav-item {\n font-size: 1rem;\n color: #595959;\n padding: 10px;\n cursor: pointer;\n\n &.active {\n color: #409eff !important;\n font-weight: 600;\n }\n }\n }\n\n .exit {\n color: #595959;\n }\n }\n\n .logo {\n width: 180px;\n margin: 0 10px;\n\n img {\n height: 40px;\n }\n }\n}\n\n.panel {\n max-width: 1024px;\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n border-radius: 4px;\n\n .name {\n text-align: center;\n }\n\n .ddl {\n margin-top: 10px;\n color: #919191;\n font-size: 14px;\n }\n\n .infos {\n max-width: 460px;\n margin: auto;\n overflow: hidden;\n :deep(div.el-form-item > label) {\n font-weight: bold;\n &::before {\n content: '* ';\n color: red;\n }\n }\n }\n}\n\n.withdraw {\n text-align: right;\n}\n\n.tip-wrapper {\n line-height: 20px;\n text-align: left;\n word-break: break-all;\n // max-height: 100px;\n overflow: hidden;\n padding: 0 20px;\n color: #e6a23c;\n max-width: 320px;\n font-size: 14px;\n}\n</style>\n"],"names":["_sfc_main","defineComponent","_hoisted_1","_hoisted_2","createElementVNode","_hoisted_3","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","uploadFilled","_export_sfc","isMobile","useIsMobile","$router","useRouter","$route","useRoute","pcNavs","reactive","handleNav","idx","taskInfo","taskMoreInfo","formatData","computed","parseFileFormat","k","ref","waitTime","isOver","waitTimeStr","seconds","hour","day","minute","refreshWaitTime","loop","date","ddlStr","formatDate","infos","fileList","fileUpload","disableForm","item","handleRemoveFile","file","ElMessageBox","ElMessage","isWriteFinish","limitBindField","isSameFieldName","v","showValidForm","validModal","validatePeopleName","rule","value","callback","message","PeopleApi","res","validModalRef","validModalRules","confirmPeopleName","_a","resolve","isValid","startUpload","uploadFiles","name","originName","getFileSuffix","normalizeFileName","key","FileApi","qiniuUpload","data","fsize","per","subscription","submitUpload","allowUpload","allowWithdraw","calculateMd5Count","handleChangeFile","suffix","formatSize","getFileMd5Hash","str","limitUploadCount","handleExceed","showLinkModel","templateLink","runWithdraw","downloadTemplate","link","downLoadByUrl","isWithdraw","startWithdraw","checkSubmitStatus","isLoadingData","readyRefresh","isEqualInfos","a","b","refreshTaskMoreInfo","hot","TaskApi","parseInfo","handleBlur","handleFocus","timeInfo","tipData","imageList","watch","parseData","PublicApi","url","e","disabledUpload","useLocalStorage","onMounted","err","onUnmounted"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1 @@
1
+ .fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transition:var(--el-transition-md-fade);transform-origin:center top}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transition:var(--el-transition-md-fade);transform-origin:center bottom}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transition:var(--el-transition-md-fade);transform-origin:top left}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-enter-active,.el-collapse-transition-leave-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-collapse{--el-collapse-border-color:var(--el-border-color-lighter);--el-collapse-header-height:48px;--el-collapse-header-bg-color:var(--el-fill-color-blank);--el-collapse-header-text-color:var(--el-text-color-primary);--el-collapse-header-font-size:13px;--el-collapse-content-bg-color:var(--el-fill-color-blank);--el-collapse-content-font-size:13px;--el-collapse-content-text-color:var(--el-text-color-primary);border-top:1px solid var(--el-collapse-border-color);border-bottom:1px solid var(--el-collapse-border-color)}.el-collapse-item.is-disabled .el-collapse-item__header{color:var(--el-text-color-disabled);cursor:not-allowed}.el-collapse-item__header{display:flex;align-items:center;height:var(--el-collapse-header-height);line-height:var(--el-collapse-header-height);background-color:var(--el-collapse-header-bg-color);color:var(--el-collapse-header-text-color);cursor:pointer;border-bottom:1px solid var(--el-collapse-border-color);font-size:var(--el-collapse-header-font-size);font-weight:500;transition:border-bottom-color var(--el-transition-duration);outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;transition:transform var(--el-transition-duration);font-weight:300}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:var(--el-color-primary)}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:var(--el-collapse-content-bg-color);overflow:hidden;box-sizing:border-box;border-bottom:1px solid var(--el-collapse-border-color)}.el-collapse-item__content{padding-bottom:25px;font-size:var(--el-collapse-content-font-size);color:var(--el-collapse-content-text-color);line-height:1.7692307692}.el-collapse-item:last-child{margin-bottom:-1px}.config-page[data-v-543b98ed]{max-width:1256px;margin:10px auto;color:#1f2937}.hero-card[data-v-543b98ed],.panel[data-v-543b98ed]{box-sizing:border-box;border:1px solid #edf0f5;border-radius:18px;background:#fff;box-shadow:0 10px 30px rgba(31,41,55,.08)}.hero-card[data-v-543b98ed]{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:28px 32px;overflow:hidden;background:radial-gradient(circle at 88% 20%,rgba(64,158,255,.18),transparent 28%),linear-gradient(135deg,#fff,#f6f9ff)}.hero-card h1[data-v-543b98ed]{margin:6px 0 10px;font-size:30px;line-height:1.2}.eyebrow[data-v-543b98ed]{margin:0;color:#409eff;font-size:13px;font-weight:700;letter-spacing:.12em}.hero-desc[data-v-543b98ed]{max-width:640px;margin:0;color:#6b7280;line-height:1.7}.hero-stats[data-v-543b98ed]{display:grid;grid-template-columns:repeat(3,92px);gap:10px}.hero-stats div[data-v-543b98ed]{display:grid;place-items:center;min-height:92px;border-radius:20px;background:rgba(255,255,255,.74);box-shadow:inset 0 0 0 1px rgba(64,158,255,.12)}.hero-stats strong[data-v-543b98ed]{color:#2563eb;font-size:32px;line-height:1}.hero-stats span[data-v-543b98ed]{color:#6b7280;font-size:13px}.panel[data-v-543b98ed]{margin-top:18px;padding:24px}.section-head[data-v-543b98ed]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px}.section-head.compact[data-v-543b98ed]{margin-bottom:12px}.section-head h2[data-v-543b98ed]{margin:0 0 6px;font-size:20px}.section-head p[data-v-543b98ed]{margin:0;color:#6b7280;line-height:1.6}.service-grid[data-v-543b98ed]{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px}.service-card[data-v-543b98ed]{padding:16px;border:1px solid #e8edf5;border-radius:14px;background:#fbfdff}.service-card.error[data-v-543b98ed]{background:#fff8f8}.service-card-head[data-v-543b98ed]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.service-card-head h3[data-v-543b98ed]{margin:0 0 6px;font-size:17px}.service-card-head p[data-v-543b98ed]{margin:0;color:#6b7280;font-size:13px;line-height:1.5}.service-meta[data-v-543b98ed]{display:grid;gap:8px;margin-top:14px;color:#8a94a6;font-size:13px}.error-text[data-v-543b98ed],.error-list span[data-v-543b98ed]{color:#d03050;word-break:break-all}.error-list[data-v-543b98ed]{display:grid;gap:8px}.error-list p[data-v-543b98ed]{margin:0;line-height:1.6}.config-tabs[data-v-543b98ed] .el-tabs__header{margin-bottom:14px}.config-tabs[data-v-543b98ed] .el-tabs__nav-wrap:after{height:1px;background-color:#edf0f5}.config-tabs[data-v-543b98ed] .el-tabs__item{height:36px;padding:0 18px;color:#6b7280;font-weight:700}.tab-head[data-v-543b98ed]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px;padding:12px 14px;border-radius:12px;background:#f7faff}.tab-head h3[data-v-543b98ed]{margin:0 0 5px;font-size:16px}.tab-head p[data-v-543b98ed]{margin:0;color:#6b7280;line-height:1.5}.field-list[data-v-543b98ed]{display:grid;gap:12px}.config-form[data-v-543b98ed] .el-form-item{margin-bottom:0}.field-item[data-v-543b98ed]{min-width:0;display:grid;grid-template-columns:minmax(180px,1fr) minmax(220px,380px);align-items:center;gap:16px;padding:12px 14px;border:1px solid #edf0f5;border-radius:12px;background:#fff}.field-item[data-v-543b98ed] .el-form-item__label{margin-bottom:0;padding-right:0;line-height:1.4}.field-item[data-v-543b98ed] .el-form-item__content{min-width:0}.field-label[data-v-543b98ed],.field-desc[data-v-543b98ed]{display:block}.field-label[data-v-543b98ed]{color:#1f2937;font-size:14px;font-weight:700}.field-desc[data-v-543b98ed]{margin-top:3px;color:#8a94a6;font-size:13px}.full-control[data-v-543b98ed]{width:100%}.bottom-actions-row[data-v-543b98ed]{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px 16px;margin-top:18px}.bottom-actions-hint[data-v-543b98ed]{flex:1 1 220px;margin:0 auto 0 0;min-width:0;color:#6b7280;font-size:13px;line-height:1.5}.mysql-live-panel[data-v-543b98ed]{min-height:120px}.mysql-tool-block[data-v-543b98ed]{margin-top:28px;padding:20px 18px;border:1px solid #edf0f5;border-radius:14px;background:#fbfdff}.mysql-tool-block[data-v-543b98ed]:first-child{margin-top:0}.mysql-tool-block__head[data-v-543b98ed]{margin-bottom:14px}.mysql-tool-block__head--row[data-v-543b98ed]{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px 20px}.mysql-tool-block__title[data-v-543b98ed]{margin:0 0 6px;font-size:16px;font-weight:600;color:#1f2937}.mysql-tool-block__desc[data-v-543b98ed]{margin:0;color:#6b7280;font-size:13px;line-height:1.5}.mysql-schema-hints--in-tab[data-v-543b98ed]{margin-top:4px}.mysql-export-actions[data-v-543b98ed]{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-bottom:12px}.mysql-export-actions__hint[data-v-543b98ed]{color:var(--el-text-color-secondary);font-size:13px}.mysql-schema-alert[data-v-543b98ed]{margin-bottom:12px}.mysql-tool-block--solo[data-v-543b98ed]{margin-top:16px}.mysql-merged-section[data-v-543b98ed]{margin-top:0}.mysql-merged-section--live[data-v-543b98ed]{margin-top:20px}.mysql-merged-section__head[data-v-543b98ed]{margin-bottom:12px}.mysql-merged-section__title[data-v-543b98ed]{margin:0 0 6px;font-size:16px;font-weight:600;color:#303133}.mysql-merged-section__desc[data-v-543b98ed]{margin:0;font-size:13px;line-height:1.5;color:#606266}.admin-users-panel[data-v-543b98ed]{margin-top:8px}.admin-users-table[data-v-543b98ed]{width:100%;margin-bottom:24px}.admin-create-block[data-v-543b98ed]{margin-top:8px}.admin-create-form[data-v-543b98ed]{max-width:720px}.admin-create-grid[data-v-543b98ed]{display:grid;gap:4px 20px;grid-template-columns:repeat(2,minmax(200px,1fr));margin-bottom:12px}.code-row[data-v-543b98ed]{display:flex;gap:10px;align-items:center;width:100%}.code-row .el-input[data-v-543b98ed]{flex:1}.field-hint-muted[data-v-543b98ed]{margin:6px 0 0;color:#8a94a6;font-size:12px}.admin-reset-hint[data-v-543b98ed]{margin:0 0 12px;color:#606266;font-size:14px}@media screen and (max-width: 700px){.admin-create-grid[data-v-543b98ed]{grid-template-columns:1fr}}.mysql-live-summary[data-v-543b98ed]{display:flex;flex-wrap:wrap;gap:10px 18px;margin:0 0 14px;color:#6b7280;font-size:13px;line-height:1.5}.mysql-live-collapse[data-v-543b98ed]{border:none}.mysql-live-collapse[data-v-543b98ed] .el-collapse-item__header{height:auto;min-height:48px;padding:10px 12px;line-height:1.4;background:#fbfdff}.mysql-live-collapse[data-v-543b98ed] .el-collapse-item__wrap{border-bottom:1px solid #edf0f5}.mysql-live-collapse[data-v-543b98ed] .el-collapse-item__content{padding-bottom:16px}.mysql-live-collapse-title[data-v-543b98ed]{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 14px;width:100%;padding-right:8px}.mysql-live-collapse-meta[data-v-543b98ed]{color:#8a94a6;font-size:13px;font-weight:400}.mysql-live-block[data-v-543b98ed]{margin-top:16px}.mysql-live-block h4[data-v-543b98ed]{margin:0 0 10px;font-size:14px;color:#374151}.mysql-live-table[data-v-543b98ed]{width:100%}.mysql-live-muted[data-v-543b98ed]{margin:0;color:#8a94a6;font-size:13px}.mysql-live-ddl-head[data-v-543b98ed]{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.mysql-live-ddl[data-v-543b98ed]{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;font-size:12px}.tab-head code[data-v-543b98ed]{padding:1px 6px;border-radius:4px;background:rgba(64,158,255,.12);font-size:12px}@media screen and (max-width: 900px){.config-page[data-v-543b98ed]{margin-top:40px}.hero-card[data-v-543b98ed]{align-items:flex-start;flex-direction:column;padding:22px}.hero-stats[data-v-543b98ed]{width:100%;grid-template-columns:repeat(3,1fr)}.field-item[data-v-543b98ed]{grid-template-columns:1fr;gap:8px}}@media screen and (max-width: 700px){.config-page[data-v-543b98ed]{margin:40px 10px 0}.panel[data-v-543b98ed]{padding:18px;border-radius:14px}.section-head[data-v-543b98ed],.tab-head[data-v-543b98ed]{display:block}.section-head .el-button[data-v-543b98ed],.tab-head .el-button[data-v-543b98ed]{width:100%;margin-top:14px}.hero-stats[data-v-543b98ed]{grid-template-columns:1fr}.config-tabs[data-v-543b98ed] .el-tabs__nav-scroll{overflow-x:auto}.field-item[data-v-543b98ed]{padding:12px}.bottom-actions-row[data-v-543b98ed]{flex-direction:column;align-items:stretch}.bottom-actions-hint[data-v-543b98ed]{margin-right:0}.bottom-actions-row .el-button[data-v-543b98ed]{width:100%}}.mysql-export-fs{position:fixed;top:0;right:0;bottom:0;left:0;z-index:3000;display:flex;flex-direction:column;box-sizing:border-box;background:var(--el-bg-color, #fff)}.mysql-export-fs__shell{flex:1;display:flex;flex-direction:column;min-height:0;min-width:0;width:100%;height:100%;background:inherit}.mysql-export-fs__head{flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;border-bottom:1px solid var(--el-border-color-lighter, #ebeef5);box-sizing:border-box}.mysql-export-fs__title{margin:0;font-size:16px;font-weight:600;color:var(--el-text-color-primary)}.mysql-export-fs__main{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px;padding:12px 18px;box-sizing:border-box;overflow:hidden}.mysql-export-fs__desc{margin:0;flex-shrink:0;font-size:13px;line-height:1.5;color:var(--el-text-color-secondary)}.mysql-export-fs__hint{margin:0;flex-shrink:0;font-size:13px;line-height:1.5;color:var(--el-text-color-regular)}.mysql-export-fs__textarea{flex:1 1 0;min-height:0;width:100%;resize:none;box-sizing:border-box;padding:12px 14px;border:1px solid var(--el-border-color, #dcdfe6);border-radius:var(--el-border-radius-base, 4px);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;font-size:13px;line-height:1.5;tab-size:2;color:var(--el-text-color-primary);background:var(--el-fill-color-blank, #fff);cursor:text;overflow-y:auto}.mysql-export-fs__textarea:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:0}.mysql-export-fs__foot{flex-shrink:0;display:flex;justify-content:flex-end;gap:10px;padding:12px 18px;border-top:1px solid var(--el-border-color-lighter, #ebeef5);box-sizing:border-box}
@@ -0,0 +1 @@
1
+ h1[data-v-b3208120],h2[data-v-b3208120],h3[data-v-b3208120],h4[data-v-b3208120]{font-weight:500}.callme[data-v-b3208120]{background-image:linear-gradient(120deg,#a1c4fd,#c2e9fb);min-height:100vh}main[data-v-b3208120]{max-width:860px;margin:0 auto;padding:20px}main .panel[data-v-b3208120]{position:relative;margin:0 auto 20px;padding:16px 20px;width:100%;overflow:hidden;border-radius:.25rem;box-shadow:#eee;box-sizing:border-box;transition:all .3s;background-color:#fff}main h1[data-v-b3208120]{font-size:1.6rem;font-weight:500;margin-bottom:10px}main .baseinfo[data-v-b3208120]{color:#7f7f7f;font-size:1rem;display:flex;flex-wrap:wrap}main .baseinfo a[data-v-b3208120]{color:#7f7f7f;font-size:1rem;margin-left:10px}main .baseinfo .info-item[data-v-b3208120]{margin-right:20px}main .baseinfo[data-v-b3208120]{margin-bottom:10px}main hr[data-v-b3208120]{margin-bottom:10px}main .qq-wechat ul[data-v-b3208120]{list-style:none;display:flex;flex-wrap:wrap;margin-bottom:10px}main .qq-wechat ul li[data-v-b3208120]{text-align:center}main .qq-wechat ul li .title[data-v-b3208120]{font-weight:600}main .qq-wechat ul li .content[data-v-b3208120]{padding:.5em}main .qq-wechat ul li img[data-v-b3208120]{width:150px}main .description[data-v-b3208120]{color:#242424;font-size:15px;margin-bottom:10px;text-align:center}main .links[data-v-b3208120]{text-align:center}main .links a[data-v-b3208120]{color:#409eff}
@@ -0,0 +1,2 @@
1
+ import{f as xe,d as ge,a as v,c as z,b as n,r as f,X as F,bq as oe,M as fe,o as tl,Z as ol,a6 as nl,i as t,w as o,F as ne,A as ae,B as x,j as u,br as ve,e as s,t as i,n as S,a5 as _,Q as R,D as al,$ as V,E as d,m as $e,P as he,q as sl,s as ul,a0 as il,ag as rl,ah as dl,x as ml,y as pl,_ as fl}from"./index-DbhWmXsj.js";import{E as vl}from"./el-date-picker-BX8jtnY2.js";import"./el-scrollbar-D2RZSJkX.js";import{s as cl,E as wl}from"./el-pagination-DX6u100-.js";import"./el-tag-uk6aooq0.js";import{E as gl,a as bl}from"./el-select-DWyBOD47.js";import{E as Cl,a as yl}from"./el-table-column-DdhVw628.js";import{U as O}from"./index-BrOLxzFM.js";import{T as Vl}from"./tip-Nu5QmDDd.js";import{r as kl}from"./refresh-Cccf8YoS.js";import{d as ce}from"./delete-filled-DvkAD61M.js";import{E as we}from"./index-DC08DNQQ.js";import"./index-BDsN2eKB.js";import"./index-DT7ciPLb.js";import"./aria-nkjrUMQ-.js";const _l=ge({name:"Message"}),zl={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},$l=n("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),hl=n("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),xl=[$l,hl];function Sl(be,X,T,k,$,U){return v(),z("svg",zl,xl)}var Tl=xe(_l,[["render",Sl]]);const Ul=ge({name:"Money"}),El={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},Ml=n("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),Pl=n("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),Bl=n("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),Ll=[Ml,Pl,Bl];function Dl(be,X,T,k,$,U){return v(),z("svg",El,Ll)}var Fl=xe(Ul,[["render",Dl]]);const Rl={class:"user"},Ol={class:"panel"},Al={class:"p10 log-filter"},Hl={class:"item"},Nl={class:"item"},Il={class:"item"},Wl={class:"item"},jl={class:"item"},ql={class:"text-btn-list"},Zl={class:"flex fc p10"},Gl={class:"tc"},Ql={class:"dialog-footer"},Xl={class:"tc"},Jl={key:0,style:{"margin-top":"10px"},class:"tc"},Kl={class:"dialog-footer"},Yl={class:"tc"},et={class:"dialog-footer"},lt={class:"tc"},tt={class:"dialog-footer"},ot={class:"tc"},nt={class:"dialog-footer"},at={class:"tc"},st={class:"dialog-footer"},ut=ge({__name:"index",setup(be){const X=f(""),T=F([]);function k(){V.getUserList().then(a=>{T.splice(0,T.length,...a.data.list),X.value=a.data.sumCost,d.success("列表数据刷新成功")})}const $=oe("userStatusType",O.NORMAL),U=f(""),Ce=F([{label:"正常",type:O.NORMAL},{label:"冻结",type:O.FREEZE},{label:"封禁",type:O.BAN}]),h=oe("userListSortType","id"),Se=[{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"}],J=oe("userListSortOrder","desc"),Te=[{label:"升序",value:"asc"},{label:"降序",value:"desc"}],se=fe(()=>{const a=[...T];return a.sort((e,m)=>J.value==="asc"?e[h.value]-m[h.value]:m[h.value]-e[h.value]),a.filter(e=>e.status===$.value).filter(e=>{const{id:m,account:g,phone:b,joinTime:r,loginCount:y,loginTime:re,openTime:de}=e;return U.value.length===0?!0:"".concat(m," ").concat(g," ").concat(b," ").concat(re," ").concat(S(de)," ").concat(S(y)," ").concat(S(r)).includes(U.value)})}),A=oe("userListPageSize",10);function Ue(a){A.value=a}const Ee=fe(()=>Math.ceil(se.value.length/A.value)),K=f(1),Me=fe(()=>{const a=(K.value-1)*A.value,e=K.value*A.value;return se.value.slice(a,e)});function Pe(a){K.value=a}const H=f(!1),w=f(0),E=f(O.NORMAL),Be=Ce,N=f("");function Le(a,e,m){w.value=a,E.value=e,N.value=m,H.value=!0}function De(){const a=T.find(e=>e.id===w.value);if(E.value===O.FREEZE){if(!N.value){d.warning("请设置解冻时间");return}a.openTime=N.value}else a.openTime="";a.status=E.value,H.value=!1,V.updateUserStatus(a.id,a.status,a.openTime).then(()=>{d.success("修改成功")})}const I=f(!1),C=F({pwd1:"",pwd2:""});function Fe(a){w.value=a,I.value=!0,C.pwd1="",C.pwd2=""}function Re(){return ml.test(C.pwd1)?C.pwd1!==C.pwd2?(d.warning("两次输入的密码不一致"),!1):!0:(d.warning("密码格式不正确(6-16位 支持字母/数字/下划线)"),!1)}function Oe(){Re()&&we.confirm("此操作不可逆,请谨慎操作","确定要重置用户的密码吗?",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{V.resetPassword(w.value,C.pwd1).then(()=>{d.success("重置成功"),I.value=!1})}).catch(()=>{})}const W=f(!1),M=F({size:2});function Ae(a,e){w.value=a,M.size=e,W.value=!0}async function He(){if(+M.size<0){d.warning("空间上限不能小于0");return}await V.resetLimitSpace(w.value,+M.size),d.success("修改成功"),W.value=!1,k()}const j=f(!1),P=F({money:2});function Ne(a,e){w.value=a,P.money=e,j.value=!0}async function Ie(){if(+P.money<0){d.warning("余额不能小于0");return}await V.updateWallet(w.value,+P.money),d.success("修改成功"),j.value=!1,k()}const q=f(!1),c=F({phone:"",code:""}),ue=f("获取验证码"),Z=f(0);function ye(){if(Z.value===0){ue.value="获取验证码";return}ue.value="".concat(Z.value,"s"),Z.value-=1,setTimeout(ye,1e3)}function We(){if(!$e.test(c.phone)){d.warning("手机号格式不正确");return}he.checkPhone(c.phone).then(()=>{he.getCode(c.phone).then(()=>{Z.value=120,ye(),d.success("获取成功,请注意查看手机短信")})}).catch(a=>{const{code:e}=a,m="注册失败,未知错误",g={1002:"手机号已被注册",1006:"手机号格式不正确"};d.error(g[e]||m)})}function je(){return $e.test(c.phone)?pl.test(c.code)?!0:(d.warning("验证码格式不正确"),!1):(d.warning("手机号格式不正确"),!1)}function qe(a){w.value=a,q.value=!0}async function Ze(){je()&&V.resetPhone(w.value,c.phone,c.code).then(()=>{d.success("绑定成功"),q.value=!1,c.code="",c.phone="",k()}).catch(a=>{const{code:e}=a,m="绑定失败,未知错误",g={1002:"手机号已被注册",1003:"验证码不正确"};d.error(g[e]||m)})}function ie(a,e){const m={month:"一个月前",quarter:"三个月前",half:"半年前"};w.value=a,we.confirm("移除后这些文件将无法恢复,请谨慎操作","删除前确认?",{confirmButtonText:"确认删除 ".concat(m[e],"文件")}).then(()=>{V.clearOssFile(a,e).then(()=>{d.success("清理成功")})}).catch(()=>{})}const Ve=f(1),G=f(!1),Y=f("");function ke(a,e=1){w.value=a,Ve.value=e,G.value=!0}function Ge(){V.sendMessage(Y.value,Ve.value,w.value).then(()=>{d.success("推送成功"),Y.value="",G.value=!1})}function Qe(a){V.logout(a).then(()=>{d.success("下线成功 ".concat(a)),k()})}tl(()=>{k()});const B=ol(),{moneyStartDay:Xe}=nl();function Je(a){const{backhaulTrafficPrice:e,cdnPrice:m,compressPrice:g,ossPrice:b}=a;we.confirm("存储:".concat(b,", 下载:").concat(m,",压缩:").concat(g,",回源:").concat(e),{showCancelButton:!1})}return(a,e)=>{const m=gl,g=bl,b=sl,r=ul,y=Cl,re=yl,de=wl,L=il,Ke=vl,D=rl,ee=dl;return v(),z("div",Rl,[n("div",Ol,[n("div",Al,[n("span",Hl,[e[26]||(e[26]=n("span",{class:"label"},"状态",-1)),t(g,{modelValue:u($),"onUpdate:modelValue":e[0]||(e[0]=l=>ve($)?$.value=l:null),size:"default",class:"w100"},{default:o(()=>[(v(!0),z(ne,null,ae(Ce,(l,p)=>(v(),x(m,{key:p,label:l.label,value:l.type},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),n("span",Nl,[e[27]||(e[27]=n("span",{class:"label"},"排序",-1)),t(g,{modelValue:u(h),"onUpdate:modelValue":e[1]||(e[1]=l=>ve(h)?h.value=l:null),size:"default",class:"w100"},{default:o(()=>[(v(),z(ne,null,ae(Se,(l,p)=>t(m,{key:p,label:l.label,value:l.value},null,8,["label","value"])),64))]),_:1},8,["modelValue"]),t(g,{modelValue:u(J),"onUpdate:modelValue":e[2]||(e[2]=l=>ve(J)?J.value=l:null),size:"default",class:"w100"},{default:o(()=>[(v(),z(ne,null,ae(Te,(l,p)=>t(m,{key:p,label:l.label,value:l.value},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),n("span",Il,[t(b,{modelValue:U.value,"onUpdate:modelValue":e[3]||(e[3]=l=>U.value=l),size:"default",clearable:"",placeholder:"请输入要检索的内容","prefix-icon":u(cl)},null,8,["modelValue","prefix-icon"])]),n("span",Wl,[t(r,{size:"default",icon:u(kl),onClick:k},{default:o(()=>e[28]||(e[28]=[s("刷新")])),_:1},8,["icon"])]),n("span",jl,[t(r,{size:"warning",icon:u(Tl),onClick:e[4]||(e[4]=l=>ke(null,0))},{default:o(()=>e[29]||(e[29]=[s("推送全局消息")])),_:1},8,["icon"])])]),t(Vl,null,{default:o(()=>[s(" 预估费用:"+i(X.value)+"¥, 计费起始时间:"+i(u(S)(u(Xe))),1)]),_:1}),t(re,{height:"550",stripe:"",border:"","default-sort":{prop:"date",order:"descending"},data:Me.value,style:{width:"100%"}},{default:o(()=>[t(y,{prop:"id",label:"ID",width:"60"}),t(y,{prop:"account",label:"账号",width:"130"}),t(y,{prop:"phone",label:"手机号",width:"80"}),t(y,{label:"统计",width:"190"},{default:o(l=>[s(" 最后登录:"+i(l.row.loginTime&&u(S)(new Date(l.row.loginTime))),1),e[30]||(e[30]=n("br",null,null,-1)),s(" 注册时间:"+i(u(S)(new Date(l.row.joinTime))),1),e[31]||(e[31]=n("br",null,null,-1)),s(" 登录次数:"+i(l.row.loginCount),1),e[32]||(e[32]=n("br",null,null,-1)),s(" token: "+i(l.row.onlineCount),1),e[33]||(e[33]=n("br",null,null,-1))]),_:1}),t(y,{prop:"downloadCount",label:"累计下载"},{default:o(({row:{downloadCount:l,downloadSize:p,oneFile:le,compressFile:Q,templateFile:te}})=>[s(i(l)+" / "+i(u(_)(p)),1),e[34]||(e[34]=n("br",null,null,-1)),s(" 单文件:"+i(le.count)+" / "+i(u(_)(le.size)),1),e[35]||(e[35]=n("br",null,null,-1)),s(" 归档:"+i(Q.count)+" / "+i(u(_)(Q.size)),1),e[36]||(e[36]=n("br",null,null,-1)),s(" 模板:"+i(te.count)+" / "+i(u(_)(te.size)),1)]),_:1}),u($)===1?(v(),x(y,{key:0,prop:"openTime",label:"解封时间"},{default:o(l=>[s(i(l.row.openTime&&u(S)(new Date(l.row.openTime))),1)]),_:1})):R("",!0),t(y,{prop:"fileCount",label:"文件"},{default:o(l=>[s(" 累计:"+i(l.row.fileCount)+"/"+i(u(_)(l.row.originFileSize)),1),e[37]||(e[37]=n("br",null,null,-1)),s(" OSS:"+i(l.row.ossCount)+"/"+i(u(_)(l.row.usage)),1),e[38]||(e[38]=n("br",null,null,-1)),s(" 平均:"+i(l.row.originFileSize&&l.row.fileCount&&u(_)(Math.round(l.row.originFileSize/l.row.fileCount))),1),e[39]||(e[39]=n("br",null,null,-1)),s(" 平均:"+i(l.row.usage&&l.row.ossCount&&u(_)(Math.round(l.row.usage/l.row.ossCount))),1),e[40]||(e[40]=n("br",null,null,-1))]),_:1}),t(y,{label:"云空间",width:"240"},{default:o(({row:{wallet:l,price:p,balance:le,resources:Q,monthAgoSize:te,quarterAgoSize:_e,halfYearSize:ze,id:me,limitSize:Ye,limitUpload:el,percentage:ll}})=>[n("ul",{class:al(["user-oss-info",{disabled:el}])},[n("li",null,[s(" ¥:"+i(p.total)+" / "+i(l)+" = "+i(le)+" ",1),t(r,{icon:u(Fl),circle:"",size:"small",onClick:pe=>Je(p)},null,8,["icon","onClick"])]),n("li",null,i(ll)+"% "+i(Q)+"/"+i(Ye),1),n("li",null,[s(" 一月前:"+i(te),1),Q!=="0B"?(v(),x(r,{key:0,class:"clear-btn",icon:u(ce),circle:"",size:"small",onClick:pe=>ie(me,"month")},null,8,["icon","onClick"])):R("",!0)]),n("li",null,[s(" 三月前:"+i(_e),1),_e!=="0B"?(v(),x(r,{key:0,class:"clear-btn",icon:u(ce),circle:"",size:"small",onClick:pe=>ie(me,"quarter")},null,8,["icon","onClick"])):R("",!0)]),n("li",null,[s(" 半年前:"+i(ze),1),ze!=="0B"?(v(),x(r,{key:0,class:"clear-btn",icon:u(ce),circle:"",size:"small",onClick:pe=>ie(me,"half")},null,8,["icon","onClick"])):R("",!0)])],2)]),_:1}),t(y,{fixed:"right",label:"操作",width:"100"},{default:o(l=>[n("div",ql,[t(r,{type:"primary",text:"",size:"small",onClick:p=>Le(l.row.id,l.row.status,l.row.openTime)},{default:o(()=>e[41]||(e[41]=[s(" 修改状态 ")])),_:2},1032,["onClick"]),t(r,{type:"primary",text:"",size:"small",onClick:p=>Fe(l.row.id)},{default:o(()=>e[42]||(e[42]=[s(" 重置密码 ")])),_:2},1032,["onClick"]),t(r,{type:"primary",text:"",size:"small",onClick:p=>qe(l.row.id)},{default:o(()=>e[43]||(e[43]=[s(" 绑定手机号 ")])),_:2},1032,["onClick"]),t(r,{type:"warning",text:"",size:"small",onClick:p=>ke(l.row.id)},{default:o(()=>e[44]||(e[44]=[s(" 发送消息 ")])),_:2},1032,["onClick"]),t(r,{type:"danger",text:"",size:"small",onClick:p=>Ae(l.row.id,l.row.size)},{default:o(()=>e[45]||(e[45]=[s(" 修改上限 ")])),_:2},1032,["onClick"]),t(r,{type:"danger",text:"",size:"small",onClick:p=>Ne(l.row.id,l.row.wallet)},{default:o(()=>e[46]||(e[46]=[s(" 修改余额 ")])),_:2},1032,["onClick"]),l.row.onlineCount!==0?(v(),x(r,{key:0,type:"danger",text:"",size:"small",onClick:p=>Qe(l.row.account)},{default:o(()=>e[47]||(e[47]=[s(" 一键下线 ")])),_:2},1032,["onClick"])):R("",!0)])]),_:1})]),_:1},8,["data"]),n("div",Zl,[t(de,{"current-page":K.value,background:"","page-count":Ee.value,"page-sizes":[10,50,100,200],"page-size":u(A),total:se.value.length,layout:"total, sizes, prev, pager, next, jumper",onCurrentChange:Pe,onSizeChange:Ue},null,8,["current-page","page-count","page-size","total"])])]),t(L,{modelValue:G.value,"onUpdate:modelValue":e[7]||(e[7]=l=>G.value=l),fullscreen:u(B),center:"",title:"消息推送"},{footer:o(()=>[n("span",Ql,[t(r,{onClick:e[6]||(e[6]=l=>G.value=!1)},{default:o(()=>e[48]||(e[48]=[s("取 消")])),_:1}),t(r,{type:"primary",onClick:Ge},{default:o(()=>e[49]||(e[49]=[s("确 定")])),_:1})])]),default:o(()=>[n("div",Gl,[t(b,{modelValue:Y.value,"onUpdate:modelValue":e[5]||(e[5]=l=>Y.value=l),autosize:{minRows:6,maxRows:20},type:"textarea",placeholder:"输入要推送的消息,支持HTML内容(推荐使用mdnice 转 markdown 转html)"},null,8,["modelValue"])])]),_:1},8,["modelValue","fullscreen"]),t(L,{modelValue:H.value,"onUpdate:modelValue":e[11]||(e[11]=l=>H.value=l),fullscreen:u(B),center:"",title:"状态修改"},{footer:o(()=>[n("span",Kl,[t(r,{onClick:e[10]||(e[10]=l=>H.value=!1)},{default:o(()=>e[50]||(e[50]=[s("取 消")])),_:1}),t(r,{type:"primary",onClick:De},{default:o(()=>e[51]||(e[51]=[s("确 定")])),_:1})])]),default:o(()=>[n("div",Xl,[t(g,{modelValue:E.value,"onUpdate:modelValue":e[8]||(e[8]=l=>E.value=l),placeholder:"请选择新分类"},{default:o(()=>[(v(!0),z(ne,null,ae(u(Be),l=>(v(),x(m,{key:l.type,label:l.label,value:l.type},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),E.value===1?(v(),z("div",Jl,[t(Ke,{modelValue:N.value,"onUpdate:modelValue":e[9]||(e[9]=l=>N.value=l),editable:!1,type:"datetime",placeholder:"点击设置解封日期"},null,8,["modelValue"])])):R("",!0)]),_:1},8,["modelValue","fullscreen"]),t(L,{modelValue:I.value,"onUpdate:modelValue":e[15]||(e[15]=l=>I.value=l),fullscreen:u(B),center:"",title:"密码重置"},{footer:o(()=>[n("span",et,[t(r,{onClick:e[14]||(e[14]=l=>I.value=!1)},{default:o(()=>e[52]||(e[52]=[s("取 消")])),_:1}),t(r,{type:"primary",onClick:Oe},{default:o(()=>e[53]||(e[53]=[s("确 定")])),_:1})])]),default:o(()=>[n("div",Yl,[t(ee,{model:C,"label-width":"80px"},{default:o(()=>[t(D,{label:"新密码"},{default:o(()=>[t(b,{modelValue:C.pwd1,"onUpdate:modelValue":e[12]||(e[12]=l=>C.pwd1=l),"show-word-limit":"",clearable:"",placeholder:"请输入新密码",maxlength:"16",minlength:"6"},null,8,["modelValue"])]),_:1}),t(D,null,{default:o(()=>[t(b,{modelValue:C.pwd2,"onUpdate:modelValue":e[13]||(e[13]=l=>C.pwd2=l),"show-word-limit":"",clearable:"",placeholder:"请再次输入",maxlength:"16",minlength:"6"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])])]),_:1},8,["modelValue","fullscreen"]),t(L,{modelValue:q.value,"onUpdate:modelValue":e[19]||(e[19]=l=>q.value=l),fullscreen:u(B),center:"",title:"绑定手机号"},{footer:o(()=>[n("span",tt,[t(r,{onClick:e[18]||(e[18]=l=>q.value=!1)},{default:o(()=>e[54]||(e[54]=[s("取 消")])),_:1}),t(r,{type:"primary",onClick:Ze},{default:o(()=>e[55]||(e[55]=[s("确 定")])),_:1})])]),default:o(()=>[n("div",lt,[t(ee,{model:c,"label-width":"60px"},{default:o(()=>[t(D,{label:"手机号"},{default:o(()=>[t(b,{modelValue:c.phone,"onUpdate:modelValue":e[16]||(e[16]=l=>c.phone=l),"show-word-limit":"",clearable:"",placeholder:"请输入手机号",maxlength:"11"},{append:o(()=>[t(r,{disabled:Z.value!==0,onClick:We},{default:o(()=>[s(i(ue.value),1)]),_:1},8,["disabled"])]),_:1},8,["modelValue"])]),_:1}),t(D,null,{default:o(()=>[t(b,{modelValue:c.code,"onUpdate:modelValue":e[17]||(e[17]=l=>c.code=l),"show-word-limit":"",clearable:"",placeholder:"请输入验证码",maxlength:"4"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])])]),_:1},8,["modelValue","fullscreen"]),t(L,{modelValue:W.value,"onUpdate:modelValue":e[22]||(e[22]=l=>W.value=l),fullscreen:u(B),center:"",title:"修改空间上限"},{footer:o(()=>[n("span",nt,[t(r,{onClick:e[21]||(e[21]=l=>W.value=!1)},{default:o(()=>e[57]||(e[57]=[s("取 消")])),_:1}),t(r,{type:"primary",onClick:He},{default:o(()=>e[58]||(e[58]=[s("确 定")])),_:1})])]),default:o(()=>[n("div",ot,[t(ee,{model:M,"label-width":"60px"},{default:o(()=>[t(D,{label:"大小"},{default:o(()=>[t(b,{modelValue:M.size,"onUpdate:modelValue":e[20]||(e[20]=l=>M.size=l),"show-word-limit":"",clearable:"",placeholder:"请输入空间上限",maxlength:"4",type:"number"},{append:o(()=>e[56]||(e[56]=[s(" GB ")])),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])])]),_:1},8,["modelValue","fullscreen"]),t(L,{modelValue:j.value,"onUpdate:modelValue":e[25]||(e[25]=l=>j.value=l),fullscreen:u(B),center:"",title:"修改空间上限"},{footer:o(()=>[n("span",st,[t(r,{onClick:e[24]||(e[24]=l=>j.value=!1)},{default:o(()=>e[60]||(e[60]=[s("取 消")])),_:1}),t(r,{type:"primary",onClick:Ie},{default:o(()=>e[61]||(e[61]=[s("确 定")])),_:1})])]),default:o(()=>[n("div",at,[t(ee,{model:P,"label-width":"60px"},{default:o(()=>[t(D,{label:"余额"},{default:o(()=>[t(b,{modelValue:P.money,"onUpdate:modelValue":e[23]||(e[23]=l=>P.money=l),"show-word-limit":"",clearable:"",placeholder:"请输入新的余额",maxlength:"4",type:"number"},{append:o(()=>e[59]||(e[59]=[s(" ¥ ")])),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])])]),_:1},8,["modelValue","fullscreen"])])}}}),_t=fl(ut,[["__scopeId","data-v-6f3c0a46"]]);export{_t as default};
2
+ //# sourceMappingURL=index-CsTsOuFs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CsTsOuFs.js","sources":["../../../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.5.12_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.5.12_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 { DeleteFilled, Message, Money, Refresh, Search } from '@element-plus/icons-vue'\nimport { useLocalStorage } from '@vueuse/core'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { PublicApi, SuperUserApi } from '@/apis'\nimport { useIsMobile, useSiteConfig } from '@/composables'\nimport { USER_STATUS } from '@/constants'\nimport { rMobilePhone, rPassword, rVerCode } from '@/utils/regExp'\nimport { formatDate, formatSize } from '@/utils/stringUtil'\n\nimport Tip from '../../tasks/components/infoPanel/tip.vue'\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","_hoisted_1","_hoisted_2","createElementVNode","_hoisted_3","_hoisted_4","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","message","_export_sfc","_hoisted_5","money","sumCost","ref","users","reactive","refreshUsers","SuperUserApi","res","ElMessage","userStatusType","useLocalStorage","USER_STATUS","searchWord","statusTypeList","sortType","sortTypeList","sortOrder","sortOrderList","filterUsers","computed","copyUsers","a","b","v","id","account","phone","joinTime","loginCount","loginTime","openTime","formatDate","pageSize","handleSizeChange","pageCount","pageCurrent","pageUsers","start","end","handlePageChange","idx","showUserStatusDialog","selectUserId","selectStatus","userStatusList","handleChangeStatus","userId","status","oTime","handleSaveStatus","user","u","showResetPasswordDialog","pwdForm","handleResetPassword","checkPwdForm","rPassword","handleSavePassword","ElMessageBox","showLimitSizeDialog","limitSizeForm","handleRewriteSize","size","handleSaveSize","showWalletDialog","walletForm","handleRewriteWallet","handleSaveWallet","showPhoneDialog","phoneForm","codeText","time","refreshCodeText","getCode","rMobilePhone","PublicApi","err","c","msg","options","checkPhoneForm","rVerCode","handleBindPhone","handleSavePhone","handleClearFiles","type","tipWords","pushMessageType","showMessageDialog","pushMessageText","sendMessage","sureSendMessage","logout","onMounted","isMobile","useIsMobile","moneyStartDay","useSiteConfig","handleCheckDetail","price","backhaulTrafficPrice","cdnPrice","compressPrice","ossPrice"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -0,0 +1 @@
1
+ .not-found[data-v-28368472]{font-family:Avenir,Helvetica,Arial,sans-serif;background-image:linear-gradient(to top,#30cfd0,#330867);min-height:100vh}h1[data-v-28368472],h2[data-v-28368472],h3[data-v-28368472],a[data-v-28368472]{color:#f0f8ff;text-align:center;font-weight:lighter}a[data-v-28368472]{margin-left:10px;border-bottom:2px solid aliceblue}h1[data-v-28368472]{font-size:48px;padding-top:10%}h2[data-v-28368472]{font-size:30px;padding-top:2vh}h3[data-v-28368472]{font-size:28px;padding-top:1vh}