@sugarat/easypicker2-client 2.7.0-beta.0 → 2.7.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 (169) hide show
  1. package/dist/assets/{data-analysis-c8lgg0AB.js → data-analysis-B61f8OZD.js} +2 -2
  2. package/dist/assets/{data-analysis-c8lgg0AB.js.map → data-analysis-B61f8OZD.js.map} +1 -1
  3. package/dist/assets/{data-analysis-legacy-CW8BY_nY.js → data-analysis-legacy-sXkPNcPD.js} +2 -2
  4. package/dist/assets/{data-analysis-legacy-CW8BY_nY.js.map → data-analysis-legacy-sXkPNcPD.js.map} +1 -1
  5. package/dist/assets/{data-board-CfWZjPIl.js → data-board-BIN3HXKE.js} +2 -2
  6. package/dist/assets/{data-board-CfWZjPIl.js.map → data-board-BIN3HXKE.js.map} +1 -1
  7. package/dist/assets/{data-board-legacy-DDytbRz4.js → data-board-legacy-mqcredpF.js} +2 -2
  8. package/dist/assets/{data-board-legacy-DDytbRz4.js.map → data-board-legacy-mqcredpF.js.map} +1 -1
  9. package/dist/assets/{el-date-picker-CI8bdk_f.js → el-date-picker-B-cvGosU.js} +2 -2
  10. package/dist/assets/{el-date-picker-CI8bdk_f.js.map → el-date-picker-B-cvGosU.js.map} +1 -1
  11. package/dist/assets/{el-date-picker-legacy-CSDTG-yp.js → el-date-picker-legacy-CACCtxzL.js} +2 -2
  12. package/dist/assets/{el-date-picker-legacy-CSDTG-yp.js.map → el-date-picker-legacy-CACCtxzL.js.map} +1 -1
  13. package/dist/assets/{el-dialog-C8bI9VGw.js → el-dialog-C9wNxcPt.js} +2 -2
  14. package/dist/assets/{el-dialog-C8bI9VGw.js.map → el-dialog-C9wNxcPt.js.map} +1 -1
  15. package/dist/assets/{el-dialog-legacy-DfEb6k1B.js → el-dialog-legacy-CX7a77_4.js} +2 -2
  16. package/dist/assets/{el-dialog-legacy-DfEb6k1B.js.map → el-dialog-legacy-CX7a77_4.js.map} +1 -1
  17. package/dist/assets/{el-dropdown-item-febUKGk9.js → el-dropdown-item-jbdZL0Yj.js} +2 -2
  18. package/dist/assets/{el-dropdown-item-febUKGk9.js.map → el-dropdown-item-jbdZL0Yj.js.map} +1 -1
  19. package/dist/assets/{el-dropdown-item-legacy-Bi1TbzqG.js → el-dropdown-item-legacy-ChoB2YAN.js} +2 -2
  20. package/dist/assets/{el-dropdown-item-legacy-Bi1TbzqG.js.map → el-dropdown-item-legacy-ChoB2YAN.js.map} +1 -1
  21. package/dist/assets/{el-form-item-SCs-OERV.js → el-form-item-BhAyaXPT.js} +2 -2
  22. package/dist/assets/{el-form-item-SCs-OERV.js.map → el-form-item-BhAyaXPT.js.map} +1 -1
  23. package/dist/assets/{el-form-item-legacy-CNxAgkUf.js → el-form-item-legacy-DNwgpXzk.js} +2 -2
  24. package/dist/assets/{el-form-item-legacy-CNxAgkUf.js.map → el-form-item-legacy-DNwgpXzk.js.map} +1 -1
  25. package/dist/assets/{el-loading-DSlXrliU.js → el-loading-D5D_2rI_.js} +2 -2
  26. package/dist/assets/{el-loading-DSlXrliU.js.map → el-loading-D5D_2rI_.js.map} +1 -1
  27. package/dist/assets/{el-loading-legacy-CbNNE-qk.js → el-loading-legacy-CCDpn-BT.js} +2 -2
  28. package/dist/assets/{el-loading-legacy-CbNNE-qk.js.map → el-loading-legacy-CCDpn-BT.js.map} +1 -1
  29. package/dist/assets/{el-pagination-nfYZbPTI.js → el-pagination-DRV4WevC.js} +2 -2
  30. package/dist/assets/{el-pagination-nfYZbPTI.js.map → el-pagination-DRV4WevC.js.map} +1 -1
  31. package/dist/assets/{el-pagination-legacy-CeTPKkkI.js → el-pagination-legacy-CAxn6D5y.js} +2 -2
  32. package/dist/assets/{el-pagination-legacy-CeTPKkkI.js.map → el-pagination-legacy-CAxn6D5y.js.map} +1 -1
  33. package/dist/assets/{el-progress-BRTU4m5q.js → el-progress-GDfl1hgb.js} +2 -2
  34. package/dist/assets/{el-progress-BRTU4m5q.js.map → el-progress-GDfl1hgb.js.map} +1 -1
  35. package/dist/assets/{el-progress-legacy-B6EwNV6c.js → el-progress-legacy-C5K3FqLs.js} +2 -2
  36. package/dist/assets/{el-progress-legacy-B6EwNV6c.js.map → el-progress-legacy-C5K3FqLs.js.map} +1 -1
  37. package/dist/assets/{el-select-uDoCZCn5.js → el-select-B9z8VvNb.js} +2 -2
  38. package/dist/assets/{el-select-uDoCZCn5.js.map → el-select-B9z8VvNb.js.map} +1 -1
  39. package/dist/assets/{el-select-legacy-BFhy033s.js → el-select-legacy-BI1YK9Jv.js} +2 -2
  40. package/dist/assets/{el-select-legacy-BFhy033s.js.map → el-select-legacy-BI1YK9Jv.js.map} +1 -1
  41. package/dist/assets/{el-switch-legacy-LBGoMV4l.js → el-switch-legacy-CG_sT4XS.js} +2 -2
  42. package/dist/assets/{el-switch-legacy-LBGoMV4l.js.map → el-switch-legacy-CG_sT4XS.js.map} +1 -1
  43. package/dist/assets/{el-switch-B8IyK6ZR.js → el-switch-oOC_byJv.js} +2 -2
  44. package/dist/assets/{el-switch-B8IyK6ZR.js.map → el-switch-oOC_byJv.js.map} +1 -1
  45. package/dist/assets/{el-tab-pane-fWqYc0uG.js → el-tab-pane-NvGl_NI0.js} +2 -2
  46. package/dist/assets/{el-tab-pane-fWqYc0uG.js.map → el-tab-pane-NvGl_NI0.js.map} +1 -1
  47. package/dist/assets/{el-tab-pane-legacy-ChZdms4s.js → el-tab-pane-legacy-usarmKVQ.js} +2 -2
  48. package/dist/assets/{el-tab-pane-legacy-ChZdms4s.js.map → el-tab-pane-legacy-usarmKVQ.js.map} +1 -1
  49. package/dist/assets/{el-table-column-C3qC7HsW.js → el-table-column-JBAymLKS.js} +2 -2
  50. package/dist/assets/{el-table-column-C3qC7HsW.js.map → el-table-column-JBAymLKS.js.map} +1 -1
  51. package/dist/assets/{el-table-column-legacy-Wp8N0Zxv.js → el-table-column-legacy-BWpnrxZl.js} +2 -2
  52. package/dist/assets/{el-table-column-legacy-Wp8N0Zxv.js.map → el-table-column-legacy-BWpnrxZl.js.map} +1 -1
  53. package/dist/assets/{index-DIARiZcJ.js → index-B0mV367i.js} +2 -2
  54. package/dist/assets/{index-DIARiZcJ.js.map → index-B0mV367i.js.map} +1 -1
  55. package/dist/assets/index-BG1GuMIu.css +1 -0
  56. package/dist/assets/{index-ShzTlShR.css → index-BOep9MOB.css} +1 -1
  57. package/dist/assets/{index-BAFXwCno.js → index-BUF8Xxid.js} +2 -2
  58. package/dist/assets/{index-BAFXwCno.js.map → index-BUF8Xxid.js.map} +1 -1
  59. package/dist/assets/index-BxsJs6HZ.js +2 -0
  60. package/dist/assets/index-BxsJs6HZ.js.map +1 -0
  61. package/dist/assets/{index-UJqXhonq.js → index-Byzqqd86.js} +2 -2
  62. package/dist/assets/{index-UJqXhonq.js.map → index-Byzqqd86.js.map} +1 -1
  63. package/dist/assets/{index-CYU98hsF.js → index-C0niS8Vv.js} +2 -2
  64. package/dist/assets/{index-CYU98hsF.js.map → index-C0niS8Vv.js.map} +1 -1
  65. package/dist/assets/{index-D2jrbKvI.js → index-CHIrZkSk.js} +2 -2
  66. package/dist/assets/{index-D2jrbKvI.js.map → index-CHIrZkSk.js.map} +1 -1
  67. package/dist/assets/index-CKIiHmIf.js +2 -0
  68. package/dist/assets/index-CKIiHmIf.js.map +1 -0
  69. package/dist/assets/{index-WblpVXQj.js → index-Cno4i6lg.js} +2 -2
  70. package/dist/assets/{index-WblpVXQj.js.map → index-Cno4i6lg.js.map} +1 -1
  71. package/dist/assets/index-D80lTVeV.js +36 -0
  72. package/dist/assets/index-D80lTVeV.js.map +1 -0
  73. package/dist/assets/{index-DVHa0g7s.js → index-DCwrZmag.js} +2 -2
  74. package/dist/assets/{index-DVHa0g7s.js.map → index-DCwrZmag.js.map} +1 -1
  75. package/dist/assets/{index-CAbIiez7.js → index-DDGYm9L-.js} +2 -2
  76. package/dist/assets/{index-CAbIiez7.js.map → index-DDGYm9L-.js.map} +1 -1
  77. package/dist/assets/{index-B621FN6u.js → index-DEiWe2Bk.js} +2 -2
  78. package/dist/assets/{index-B621FN6u.js.map → index-DEiWe2Bk.js.map} +1 -1
  79. package/dist/assets/{index-Bp9D-Hzs.js → index-DJnltRnr.js} +2 -2
  80. package/dist/assets/{index-Bp9D-Hzs.js.map → index-DJnltRnr.js.map} +1 -1
  81. package/dist/assets/index-DMIqQLOE.js +2 -0
  82. package/dist/assets/{index-E_UelRIx.js.map → index-DMIqQLOE.js.map} +1 -1
  83. package/dist/assets/{index-Cbj5Qf1k.js → index-DRHl9KU8.js} +2 -2
  84. package/dist/assets/{index-Cbj5Qf1k.js.map → index-DRHl9KU8.js.map} +1 -1
  85. package/dist/assets/{index-Lsr6KH3b.js → index-Dj5caLYF.js} +2 -2
  86. package/dist/assets/{index-Lsr6KH3b.js.map → index-Dj5caLYF.js.map} +1 -1
  87. package/dist/assets/{index-CcPY3ZJk.js → index-Dxy6ycv8.js} +2 -2
  88. package/dist/assets/{index-CcPY3ZJk.js.map → index-Dxy6ycv8.js.map} +1 -1
  89. package/dist/assets/{index-DvM_o_Iw.js → index-MTuc20rr.js} +2 -2
  90. package/dist/assets/{index-DvM_o_Iw.js.map → index-MTuc20rr.js.map} +1 -1
  91. package/dist/assets/index-XNFQHmLL.css +1 -0
  92. package/dist/assets/{index-C1FTaXL2.js → index-bD-fr3vy.js} +2 -2
  93. package/dist/assets/{index-C1FTaXL2.js.map → index-bD-fr3vy.js.map} +1 -1
  94. package/dist/assets/{index-AYz8tt3l.js → index-fb67TYJ8.js} +2 -2
  95. package/dist/assets/{index-AYz8tt3l.js.map → index-fb67TYJ8.js.map} +1 -1
  96. package/dist/assets/{index-legacy-B865ACt-.js → index-legacy-2G5G7SiF.js} +2 -2
  97. package/dist/assets/index-legacy-2G5G7SiF.js.map +1 -0
  98. package/dist/assets/{index-legacy-D8QuGa98.js → index-legacy-B1WwgC0S.js} +2 -2
  99. package/dist/assets/{index-legacy-D8QuGa98.js.map → index-legacy-B1WwgC0S.js.map} +1 -1
  100. package/dist/assets/{index-legacy-BzCDv5Tg.js → index-legacy-BN-W2P7-.js} +2 -2
  101. package/dist/assets/{index-legacy-BzCDv5Tg.js.map → index-legacy-BN-W2P7-.js.map} +1 -1
  102. package/dist/assets/{index-legacy-z4MDfS45.js → index-legacy-BZb5uhBF.js} +2 -2
  103. package/dist/assets/{index-legacy-z4MDfS45.js.map → index-legacy-BZb5uhBF.js.map} +1 -1
  104. package/dist/assets/{index-legacy-DiTQKLfl.js → index-legacy-BdJHr4yN.js} +2 -2
  105. package/dist/assets/{index-legacy-DiTQKLfl.js.map → index-legacy-BdJHr4yN.js.map} +1 -1
  106. package/dist/assets/{index-legacy-DTtXpYbD.js → index-legacy-BwpR0DP9.js} +2 -2
  107. package/dist/assets/{index-legacy-DTtXpYbD.js.map → index-legacy-BwpR0DP9.js.map} +1 -1
  108. package/dist/assets/{index-legacy-GmcnXr6o.js → index-legacy-Cbyz8WHA.js} +2 -2
  109. package/dist/assets/{index-legacy-GmcnXr6o.js.map → index-legacy-Cbyz8WHA.js.map} +1 -1
  110. package/dist/assets/index-legacy-Chw6iyCz.js +2 -0
  111. package/dist/assets/{index-legacy-B8pZsXYp.js.map → index-legacy-Chw6iyCz.js.map} +1 -1
  112. package/dist/assets/{index-legacy-BaUX-zxP.js → index-legacy-DC5-MYgp.js} +8 -13
  113. package/dist/assets/index-legacy-DC5-MYgp.js.map +1 -0
  114. package/dist/assets/{index-legacy-BWGaTIeh.js → index-legacy-DM_G6GXF.js} +2 -2
  115. package/dist/assets/{index-legacy-BWGaTIeh.js.map → index-legacy-DM_G6GXF.js.map} +1 -1
  116. package/dist/assets/index-legacy-DP3Q6cDA.js +2 -0
  117. package/dist/assets/index-legacy-DP3Q6cDA.js.map +1 -0
  118. package/dist/assets/{index-legacy-D93ANJJU.js → index-legacy-DUrsbgNe.js} +2 -2
  119. package/dist/assets/{index-legacy-D93ANJJU.js.map → index-legacy-DUrsbgNe.js.map} +1 -1
  120. package/dist/assets/{index-legacy-BA8TBope.js → index-legacy-DV-KwU0c.js} +2 -2
  121. package/dist/assets/{index-legacy-BA8TBope.js.map → index-legacy-DV-KwU0c.js.map} +1 -1
  122. package/dist/assets/{index-legacy-Bziat01y.js → index-legacy-DiNZXmUs.js} +2 -2
  123. package/dist/assets/{index-legacy-Bziat01y.js.map → index-legacy-DiNZXmUs.js.map} +1 -1
  124. package/dist/assets/{index-legacy-3jO8hk9z.js → index-legacy-DmJc-LaA.js} +2 -2
  125. package/dist/assets/{index-legacy-3jO8hk9z.js.map → index-legacy-DmJc-LaA.js.map} +1 -1
  126. package/dist/assets/{index-legacy-D-yT7UP7.js → index-legacy-Dmi-DBK0.js} +2 -2
  127. package/dist/assets/{index-legacy-D-yT7UP7.js.map → index-legacy-Dmi-DBK0.js.map} +1 -1
  128. package/dist/assets/{index-legacy-D14E8pOh.js → index-legacy-K0GPuvtR.js} +2 -2
  129. package/dist/assets/{index-legacy-D14E8pOh.js.map → index-legacy-K0GPuvtR.js.map} +1 -1
  130. package/dist/assets/{index-legacy-Bwwm9nit.js → index-legacy-Qibh5ehq.js} +2 -2
  131. package/dist/assets/{index-legacy-Bwwm9nit.js.map → index-legacy-Qibh5ehq.js.map} +1 -1
  132. package/dist/assets/{index-legacy-DqLKrBdr.js → index-legacy-gQf30T09.js} +2 -2
  133. package/dist/assets/{index-legacy-DqLKrBdr.js.map → index-legacy-gQf30T09.js.map} +1 -1
  134. package/dist/assets/{index-legacy-8ekXefFL.js → index-legacy-l7TP3X8w.js} +2 -2
  135. package/dist/assets/{index-legacy-8ekXefFL.js.map → index-legacy-l7TP3X8w.js.map} +1 -1
  136. package/dist/assets/{isEqual-legacy-D_cb03Zv.js → isEqual-legacy-DVLZyo95.js} +2 -2
  137. package/dist/assets/{isEqual-legacy-D_cb03Zv.js.map → isEqual-legacy-DVLZyo95.js.map} +1 -1
  138. package/dist/assets/{isEqual-a1R5cOCU.js → isEqual-pN6Ih18F.js} +2 -2
  139. package/dist/assets/{isEqual-a1R5cOCU.js.map → isEqual-pN6Ih18F.js.map} +1 -1
  140. package/dist/assets/{refresh-Bz5ULfz9.js → refresh-BTQLK-UW.js} +2 -2
  141. package/dist/assets/{refresh-Bz5ULfz9.js.map → refresh-BTQLK-UW.js.map} +1 -1
  142. package/dist/assets/{refresh-legacy-NT5iEzmI.js → refresh-legacy-Cv7RM_sm.js} +2 -2
  143. package/dist/assets/{refresh-legacy-NT5iEzmI.js.map → refresh-legacy-Cv7RM_sm.js.map} +1 -1
  144. package/dist/assets/{tip-BCCd4P_x.js → tip-DQo-E_Pu.js} +2 -2
  145. package/dist/assets/{tip-BCCd4P_x.js.map → tip-DQo-E_Pu.js.map} +1 -1
  146. package/dist/assets/{tip-legacy-Cm2JPa4-.js → tip-legacy-Ci60OMi9.js} +2 -2
  147. package/dist/assets/{tip-legacy-Cm2JPa4-.js.map → tip-legacy-Ci60OMi9.js.map} +1 -1
  148. package/dist/assets/validator-CZlzBDi2.js +2 -0
  149. package/dist/assets/{validator-BESrcCvQ.js.map → validator-CZlzBDi2.js.map} +1 -1
  150. package/dist/assets/validator-legacy-D-pC1hkO.js +2 -0
  151. package/dist/assets/{validator-legacy-xarmcLjs.js.map → validator-legacy-D-pC1hkO.js.map} +1 -1
  152. package/dist/index.html +2 -2
  153. package/package.json +4 -3
  154. package/dist/assets/index-BN8Mg9Y5.js +0 -2
  155. package/dist/assets/index-BN8Mg9Y5.js.map +0 -1
  156. package/dist/assets/index-BYEN2QaU.css +0 -1
  157. package/dist/assets/index-C0TTJR9g.js +0 -2
  158. package/dist/assets/index-C0TTJR9g.js.map +0 -1
  159. package/dist/assets/index-CvlaXQXr.js +0 -40
  160. package/dist/assets/index-CvlaXQXr.js.map +0 -1
  161. package/dist/assets/index-CwmiY_sv.css +0 -1
  162. package/dist/assets/index-E_UelRIx.js +0 -2
  163. package/dist/assets/index-legacy-B865ACt-.js.map +0 -1
  164. package/dist/assets/index-legacy-B8pZsXYp.js +0 -2
  165. package/dist/assets/index-legacy-BaUX-zxP.js.map +0 -1
  166. package/dist/assets/index-legacy-DZC-JuD-.js +0 -2
  167. package/dist/assets/index-legacy-DZC-JuD-.js.map +0 -1
  168. package/dist/assets/validator-BESrcCvQ.js +0 -2
  169. package/dist/assets/validator-legacy-xarmcLjs.js +0 -2
@@ -1,2 +1,2 @@
1
- import{a4 as D,d as se,Z as $,r as d,O as T,o as oe,a as y,c as U,b as u,j as l,w as s,F,C as N,D as R,k as E,e as r,t as O,s as j,E as P,v as ne,x as ue,p as ie,f as de,_ as re}from"./index-CvlaXQXr.js";import{E as pe,a as ce}from"./el-form-item-SCs-OERV.js";import{u as fe,E as me}from"./el-dialog-C8bI9VGw.js";import{s as _e,E as ve}from"./el-pagination-nfYZbPTI.js";import{E as he,a as be}from"./el-select-uDoCZCn5.js";import{E as ge,a as we}from"./el-table-column-C3qC7HsW.js";import{W as _}from"./index-BrOLxzFM.js";import"./isEqual-a1R5cOCU.js";import"./index-BAFXwCno.js";import"./validator-BESrcCvQ.js";function Ve(n){return D.post("/wish/add",n)}function ye(){return D.get("/wish/all")}function Ee(n,i){return D.put("/wish/update",{id:n,status:i})}function Ce(n,i,k){return D.put("/wish/update/".concat(n),{title:i,des:k})}const L={addWish:Ve,findAllWish:ye,updateWishStatus:Ee,updateWishDes:Ce},We=n=>(ie("data-v-fb1cf9f1"),n=n(),de(),n),Se={class:"user"},xe={class:"panel"},De={class:"p10 log-filter"},ke={class:"item"},ze=We(()=>u("span",{class:"label"},"状态",-1)),Ie={class:"item"},$e={class:"text-btn-list"},Te={class:"flex fc p10"},Ue={class:"tc"},Le={class:"dialog-footer"},Ae={class:"dialog-footer"},Z="80px",Be=se({__name:"index",setup(n){const i=$([]);function k(){L.findAllWish().then(a=>{i.splice(0,i.length,...a.data)})}const C=d(-1),W=d(""),z=$([{label:"待审核",type:_.REVIEW},{label:"待开始",type:_.WAIT},{label:"关闭",type:_.CLOSE},{label:"已上线",type:_.END},{label:"开发中",type:_.START}]),I=T(()=>i.filter(a=>a.status===C.value||C.value===-1).filter(a=>{const{createDate:t,title:p,des:x,contact:w}=a;return W.value.length===0?!0:"".concat(j(new Date(t))," ").concat(p," ").concat(x," ").concat(w).includes(W.value)})),v=d(10);function q(a){v.value=a}const G=T(()=>Math.ceil(I.value.length/v.value)),S=d(1),H=T(()=>{const a=(S.value-1)*v.value,t=S.value*v.value;return I.value.slice(a,t)});function J(a){S.value=a}const h=d(!1),c=d(""),b=d(_.REVIEW),K=z;function Q(a,t){c.value=a,b.value=t,h.value=!0}function X(){const a=i.find(t=>t.id===c.value);a.status=b.value,h.value=!1,L.updateWishStatus(c.value,b.value).then(()=>{P.success("修改成功")})}const g=d(!1),o=$({title:"",des:""});function Y(a,t,p){c.value=a,o.title=t,o.des=p,g.value=!0}function ee(){const a=i.find(t=>t.id===c.value);L.updateWishDes(c.value,o.title,o.des).then(()=>{g.value=!1,a.title=o.title,a.des=o.des,P.success("修改成功")})}oe(()=>{k()});const A=fe();return(a,t)=>{const p=he,x=be,w=ne,f=ge,m=ue,te=we,le=ve,B=me,M=pe,ae=ce;return y(),U("div",Se,[u("div",xe,[u("div",De,[u("span",ke,[ze,l(x,{modelValue:C.value,"onUpdate:modelValue":t[0]||(t[0]=e=>C.value=e),size:"default",placeholder:"请选择筛选状态"},{default:s(()=>[l(p,{label:"全部",value:-1}),(y(!0),U(F,null,N(z,(e,V)=>(y(),R(p,{key:V,label:e.label,value:e.type},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),u("span",Ie,[l(w,{modelValue:W.value,"onUpdate:modelValue":t[1]||(t[1]=e=>W.value=e),size:"default",clearable:"",placeholder:"请输入要检索的内容","prefix-icon":E(_e)},null,8,["modelValue","prefix-icon"])])]),l(te,{height:"550",stripe:"",border:"","default-sort":{prop:"date",order:"descending"},data:H.value,style:{width:"100%"}},{default:s(()=>[l(f,{sortable:"",prop:"createDate",label:"提交时间",width:"190"},{default:s(e=>[r(O(e.row.createDate&&E(j)(new Date(e.row.createDate))),1)]),_:1}),l(f,{prop:"title",label:"标题",width:"120"}),l(f,{prop:"des",label:"详细描述"}),l(f,{prop:"contact",label:"联系方式"}),l(f,{prop:"status",label:"状态"},{default:s(e=>[r(O(z.find(V=>V.type===e.row.status).label),1)]),_:1}),l(f,{fixed:"right",label:"操作",width:"100"},{default:s(e=>[u("div",$e,[l(m,{type:"primary",text:"",size:"small",onClick:V=>Q(e.row.id,e.row.status)},{default:s(()=>[r(" 修改状态 ")]),_:2},1032,["onClick"]),l(m,{type:"primary",text:"",size:"small",onClick:V=>Y(e.row.id,e.row.title,e.row.des)},{default:s(()=>[r(" 修改描述 ")]),_:2},1032,["onClick"])])]),_:1})]),_:1},8,["data"]),u("div",Te,[l(le,{"current-page":S.value,background:"","page-count":G.value,"page-sizes":[10,50,100,200],"page-size":v.value,total:I.value.length,layout:"total, sizes, prev, pager, next, jumper",onCurrentChange:J,onSizeChange:q},null,8,["current-page","page-count","page-size","total"])])]),l(B,{modelValue:h.value,"onUpdate:modelValue":t[4]||(t[4]=e=>h.value=e),fullscreen:E(A),center:"",title:"状态修改"},{footer:s(()=>[u("span",Le,[l(m,{onClick:t[3]||(t[3]=e=>h.value=!1)},{default:s(()=>[r("取 消")]),_:1}),l(m,{type:"primary",onClick:X},{default:s(()=>[r("确 定")]),_:1})])]),default:s(()=>[u("div",Ue,[l(x,{modelValue:b.value,"onUpdate:modelValue":t[2]||(t[2]=e=>b.value=e),placeholder:"请选择新状态"},{default:s(()=>[(y(!0),U(F,null,N(E(K),e=>(y(),R(p,{key:e.type,label:e.label,value:e.type},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])]),_:1},8,["modelValue","fullscreen"]),l(B,{modelValue:g.value,"onUpdate:modelValue":t[8]||(t[8]=e=>g.value=e),title:"需求信息",fullscreen:E(A)},{footer:s(()=>[u("span",Ae,[l(m,{onClick:t[7]||(t[7]=e=>g.value=!1)},{default:s(()=>[r("取 消")]),_:1}),l(m,{type:"primary",onClick:ee},{default:s(()=>[r("确 定")]),_:1})])]),default:s(()=>[l(ae,{model:o},{default:s(()=>[l(M,{label:"需求","label-width":Z},{default:s(()=>[l(w,{modelValue:o.title,"onUpdate:modelValue":t[5]||(t[5]=e=>o.title=e),placeholder:"一句简单明了的话概括一下"},null,8,["modelValue"])]),_:1}),l(M,{label:"详细描述","label-width":Z},{default:s(()=>[l(w,{modelValue:o.des,"onUpdate:modelValue":t[6]||(t[6]=e=>o.des=e),placeholder:"用朴素的话语进一步描述你的需求",type:"textarea"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","fullscreen"])])}}}),He=re(Be,[["__scopeId","data-v-fb1cf9f1"]]);export{He as default};
2
- //# sourceMappingURL=index-CcPY3ZJk.js.map
1
+ import{a4 as D,d as se,Z as $,r as d,O as T,o as oe,a as y,c as U,b as u,j as l,w as s,F,C as N,D as R,k as E,e as r,t as O,s as j,E as P,v as ne,x as ue,p as ie,f as de,_ as re}from"./index-D80lTVeV.js";import{E as pe,a as ce}from"./el-form-item-BhAyaXPT.js";import{u as fe,E as me}from"./el-dialog-C9wNxcPt.js";import{s as _e,E as ve}from"./el-pagination-DRV4WevC.js";import{E as he,a as be}from"./el-select-B9z8VvNb.js";import{E as ge,a as we}from"./el-table-column-JBAymLKS.js";import{W as _}from"./index-BrOLxzFM.js";import"./isEqual-pN6Ih18F.js";import"./index-BUF8Xxid.js";import"./validator-CZlzBDi2.js";function Ve(n){return D.post("/wish/add",n)}function ye(){return D.get("/wish/all")}function Ee(n,i){return D.put("/wish/update",{id:n,status:i})}function Ce(n,i,k){return D.put("/wish/update/".concat(n),{title:i,des:k})}const L={addWish:Ve,findAllWish:ye,updateWishStatus:Ee,updateWishDes:Ce},We=n=>(ie("data-v-fb1cf9f1"),n=n(),de(),n),Se={class:"user"},xe={class:"panel"},De={class:"p10 log-filter"},ke={class:"item"},ze=We(()=>u("span",{class:"label"},"状态",-1)),Ie={class:"item"},$e={class:"text-btn-list"},Te={class:"flex fc p10"},Ue={class:"tc"},Le={class:"dialog-footer"},Ae={class:"dialog-footer"},Z="80px",Be=se({__name:"index",setup(n){const i=$([]);function k(){L.findAllWish().then(a=>{i.splice(0,i.length,...a.data)})}const C=d(-1),W=d(""),z=$([{label:"待审核",type:_.REVIEW},{label:"待开始",type:_.WAIT},{label:"关闭",type:_.CLOSE},{label:"已上线",type:_.END},{label:"开发中",type:_.START}]),I=T(()=>i.filter(a=>a.status===C.value||C.value===-1).filter(a=>{const{createDate:t,title:p,des:x,contact:w}=a;return W.value.length===0?!0:"".concat(j(new Date(t))," ").concat(p," ").concat(x," ").concat(w).includes(W.value)})),v=d(10);function q(a){v.value=a}const G=T(()=>Math.ceil(I.value.length/v.value)),S=d(1),H=T(()=>{const a=(S.value-1)*v.value,t=S.value*v.value;return I.value.slice(a,t)});function J(a){S.value=a}const h=d(!1),c=d(""),b=d(_.REVIEW),K=z;function Q(a,t){c.value=a,b.value=t,h.value=!0}function X(){const a=i.find(t=>t.id===c.value);a.status=b.value,h.value=!1,L.updateWishStatus(c.value,b.value).then(()=>{P.success("修改成功")})}const g=d(!1),o=$({title:"",des:""});function Y(a,t,p){c.value=a,o.title=t,o.des=p,g.value=!0}function ee(){const a=i.find(t=>t.id===c.value);L.updateWishDes(c.value,o.title,o.des).then(()=>{g.value=!1,a.title=o.title,a.des=o.des,P.success("修改成功")})}oe(()=>{k()});const A=fe();return(a,t)=>{const p=he,x=be,w=ne,f=ge,m=ue,te=we,le=ve,B=me,M=pe,ae=ce;return y(),U("div",Se,[u("div",xe,[u("div",De,[u("span",ke,[ze,l(x,{modelValue:C.value,"onUpdate:modelValue":t[0]||(t[0]=e=>C.value=e),size:"default",placeholder:"请选择筛选状态"},{default:s(()=>[l(p,{label:"全部",value:-1}),(y(!0),U(F,null,N(z,(e,V)=>(y(),R(p,{key:V,label:e.label,value:e.type},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),u("span",Ie,[l(w,{modelValue:W.value,"onUpdate:modelValue":t[1]||(t[1]=e=>W.value=e),size:"default",clearable:"",placeholder:"请输入要检索的内容","prefix-icon":E(_e)},null,8,["modelValue","prefix-icon"])])]),l(te,{height:"550",stripe:"",border:"","default-sort":{prop:"date",order:"descending"},data:H.value,style:{width:"100%"}},{default:s(()=>[l(f,{sortable:"",prop:"createDate",label:"提交时间",width:"190"},{default:s(e=>[r(O(e.row.createDate&&E(j)(new Date(e.row.createDate))),1)]),_:1}),l(f,{prop:"title",label:"标题",width:"120"}),l(f,{prop:"des",label:"详细描述"}),l(f,{prop:"contact",label:"联系方式"}),l(f,{prop:"status",label:"状态"},{default:s(e=>[r(O(z.find(V=>V.type===e.row.status).label),1)]),_:1}),l(f,{fixed:"right",label:"操作",width:"100"},{default:s(e=>[u("div",$e,[l(m,{type:"primary",text:"",size:"small",onClick:V=>Q(e.row.id,e.row.status)},{default:s(()=>[r(" 修改状态 ")]),_:2},1032,["onClick"]),l(m,{type:"primary",text:"",size:"small",onClick:V=>Y(e.row.id,e.row.title,e.row.des)},{default:s(()=>[r(" 修改描述 ")]),_:2},1032,["onClick"])])]),_:1})]),_:1},8,["data"]),u("div",Te,[l(le,{"current-page":S.value,background:"","page-count":G.value,"page-sizes":[10,50,100,200],"page-size":v.value,total:I.value.length,layout:"total, sizes, prev, pager, next, jumper",onCurrentChange:J,onSizeChange:q},null,8,["current-page","page-count","page-size","total"])])]),l(B,{modelValue:h.value,"onUpdate:modelValue":t[4]||(t[4]=e=>h.value=e),fullscreen:E(A),center:"",title:"状态修改"},{footer:s(()=>[u("span",Le,[l(m,{onClick:t[3]||(t[3]=e=>h.value=!1)},{default:s(()=>[r("取 消")]),_:1}),l(m,{type:"primary",onClick:X},{default:s(()=>[r("确 定")]),_:1})])]),default:s(()=>[u("div",Ue,[l(x,{modelValue:b.value,"onUpdate:modelValue":t[2]||(t[2]=e=>b.value=e),placeholder:"请选择新状态"},{default:s(()=>[(y(!0),U(F,null,N(E(K),e=>(y(),R(p,{key:e.type,label:e.label,value:e.type},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])]),_:1},8,["modelValue","fullscreen"]),l(B,{modelValue:g.value,"onUpdate:modelValue":t[8]||(t[8]=e=>g.value=e),title:"需求信息",fullscreen:E(A)},{footer:s(()=>[u("span",Ae,[l(m,{onClick:t[7]||(t[7]=e=>g.value=!1)},{default:s(()=>[r("取 消")]),_:1}),l(m,{type:"primary",onClick:ee},{default:s(()=>[r("确 定")]),_:1})])]),default:s(()=>[l(ae,{model:o},{default:s(()=>[l(M,{label:"需求","label-width":Z},{default:s(()=>[l(w,{modelValue:o.title,"onUpdate:modelValue":t[5]||(t[5]=e=>o.title=e),placeholder:"一句简单明了的话概括一下"},null,8,["modelValue"])]),_:1}),l(M,{label:"详细描述","label-width":Z},{default:s(()=>[l(w,{modelValue:o.des,"onUpdate:modelValue":t[6]||(t[6]=e=>o.des=e),placeholder:"用朴素的话语进一步描述你的需求",type:"textarea"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","fullscreen"])])}}}),He=re(Be,[["__scopeId","data-v-fb1cf9f1"]]);export{He as default};
2
+ //# sourceMappingURL=index-Dxy6ycv8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-CcPY3ZJk.js","sources":["../../src/apis/modules/wish.ts","../../src/pages/dashboard/manage/wish/index.vue"],"sourcesContent":["import { WishStatus } from '@/constants'\nimport ajax from '../ajax'\n\nfunction addWish(wish: Partial<WishApiTypes.Wish>): WishApiTypes.addWish {\n return ajax.post('/wish/add', wish)\n}\n\nfunction findAllWish(): WishApiTypes.allWishData {\n return ajax.get('/wish/all')\n}\n\nfunction updateWishStatus(\n id: string,\n status: WishStatus\n): WishApiTypes.updateWish {\n return ajax.put('/wish/update', { id, status })\n}\n\nfunction updateWishDes(\n id: string,\n title: string,\n des: string\n): WishApiTypes.updateWish {\n return ajax.put(`/wish/update/${id}`, { title, des })\n}\nexport default {\n addWish,\n findAllWish,\n updateWishStatus,\n updateWishDes\n}\n","<script lang=\"ts\" setup>\nimport { ElMessage } from 'element-plus'\nimport {\n computed,\n onMounted,\n reactive,\n ref,\n} from 'vue'\nimport { Search } from '@element-plus/icons-vue'\nimport { WishApi } from '@/apis'\nimport { formatDate } from '@/utils/stringUtil'\nimport { WishStatus } from '@/constants'\nimport { useIsMobile } from '@/composables'\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":["addWish","wish","ajax","findAllWish","updateWishStatus","id","status","updateWishDes","title","des","WishApi","formLabelWidth","wishes","reactive","refreshWishes","v","filterLogType","ref","searchWord","logTypeList","WishStatus","filterWishes","computed","createDate","contact","formatDate","pageSize","handleSizeChange","pageCount","pageCurrent","pageWishes","start","end","handlePageChange","idx","showWishStatusDialog","selectWishId","selectStatus","wishStatusList","handleChangeStatus","wishId","handleSaveStatus","ElMessage","desVisible","formData","handleRewriteDes","handleUpdateWish","onMounted","isMobile","useIsMobile"],"mappings":"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"}
1
+ {"version":3,"file":"index-Dxy6ycv8.js","sources":["../../src/apis/modules/wish.ts","../../src/pages/dashboard/manage/wish/index.vue"],"sourcesContent":["import { WishStatus } from '@/constants'\nimport ajax from '../ajax'\n\nfunction addWish(wish: Partial<WishApiTypes.Wish>): WishApiTypes.addWish {\n return ajax.post('/wish/add', wish)\n}\n\nfunction findAllWish(): WishApiTypes.allWishData {\n return ajax.get('/wish/all')\n}\n\nfunction updateWishStatus(\n id: string,\n status: WishStatus\n): WishApiTypes.updateWish {\n return ajax.put('/wish/update', { id, status })\n}\n\nfunction updateWishDes(\n id: string,\n title: string,\n des: string\n): WishApiTypes.updateWish {\n return ajax.put(`/wish/update/${id}`, { title, des })\n}\nexport default {\n addWish,\n findAllWish,\n updateWishStatus,\n updateWishDes\n}\n","<script lang=\"ts\" setup>\nimport { ElMessage } from 'element-plus'\nimport {\n computed,\n onMounted,\n reactive,\n ref,\n} from 'vue'\nimport { Search } from '@element-plus/icons-vue'\nimport { WishApi } from '@/apis'\nimport { formatDate } from '@/utils/stringUtil'\nimport { WishStatus } from '@/constants'\nimport { useIsMobile } from '@/composables'\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":["addWish","wish","ajax","findAllWish","updateWishStatus","id","status","updateWishDes","title","des","WishApi","formLabelWidth","wishes","reactive","refreshWishes","v","filterLogType","ref","searchWord","logTypeList","WishStatus","filterWishes","computed","createDate","contact","formatDate","pageSize","handleSizeChange","pageCount","pageCurrent","pageWishes","start","end","handlePageChange","idx","showWishStatusDialog","selectWishId","selectStatus","wishStatusList","handleChangeStatus","wishId","handleSaveStatus","ElMessage","desVisible","formData","handleRewriteDes","handleUpdateWish","onMounted","isMobile","useIsMobile"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{g as f,d as r,a as o,c as n,b as t,i as $,F as m,C as h,j as u,w as g,D as w,G as T,H as k,t as x,e as I,I as z,p as N,f as C,_ as M}from"./index-CvlaXQXr.js";const E=r({name:"Promotion"}),B={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},O=t("path",{fill:"currentColor",d:"m64 448 832-320-128 704-446.08-243.328L832 192 242.816 545.472 64 448zm256 512V657.024L512 768 320 960z"},null,-1),Q=[O];function y(e,a,c,d,p,i){return o(),n("svg",B,Q)}var Y=f(E,[["render",y]]);const b=r({name:"UserFilled"}),j={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},D=t("path",{fill:"currentColor",d:"M288 320a224 224 0 1 0 448 0 224 224 0 1 0-448 0zm544 608H160a32 32 0 0 1-32-32v-96a160 160 0 0 1 160-160h448a160 160 0 0 1 160 160v96a32 32 0 0 1-32 32z"},null,-1),F=[D];function S(e,a,c,d,p,i){return o(),n("svg",j,F)}var V=f(b,[["render",S]]);const _=e=>(N("data-v-a235cdd8"),e=e(),C(),e),L={class:"callme"},q={class:"panel"},A=_(()=>t("h1",null,"联系作者",-1)),H={class:"baseinfo"},G=["href"],P=_(()=>t("hr",null,null,-1)),U={class:"qq-wechat"},J={class:"title"},K={class:"content"},R=["src"],W=_(()=>t("div",{class:"description"},[t("p",null,"如遇无法解决的账号/使用问题,欢迎小窗联系我")],-1)),X={class:"links"},Z=r({__name:"index",setup(e){const a=[{icon:V,text:"粥里有勺糖",href:"https://sugarat.top"},{icon:Y,text:"engineerzjl@foxmail.com",href:"mailto:engineerzjl@foxmail.com"}],c=[{text:"微信",img:"https://img.cdn.sugarat.top/mdImg/MTYxOTE1NTk3MTkyNA==619155971925"},{text:"公众号",img:"https://img.cdn.sugarat.top/mdImg/MTYxOTE1NTYwNzQ5MQ==619155607491"},{text:"QQ",img:"https://img.cdn.sugarat.top/mdImg/MTYxOTE1NjQ5ODczOQ==619156498739"},{text:"交流群",img:"https://img.cdn.sugarat.top/mdImg/MTY0Nzc2MTE2MTE2NA==ep-group.png"}];return(d,p)=>{const i=z,v=$("router-link");return o(),n("div",L,[t("main",null,[t("div",q,[A,t("div",H,[(o(),n(m,null,h(a,(s,l)=>t("span",{key:l,class:"info-item"},[u(i,null,{default:g(()=>[(o(),w(T(s.icon)))]),_:2},1024),t("i",{class:k(s.icon)},null,2),t("a",{target:"_blank",href:s.href},x(s.text),9,G)])),64))]),P,t("div",U,[t("ul",null,[(o(),n(m,null,h(c,(s,l)=>t("li",{key:l},[t("div",J,x(s.text),1),t("div",K,[t("img",{src:s.img},null,8,R)])])),64))])]),W,t("div",X,[u(v,{to:"/"},{default:g(()=>[I("回到首页")]),_:1})])])])])}}}),st=M(Z,[["__scopeId","data-v-a235cdd8"]]);export{st as default};
2
- //# sourceMappingURL=index-DvM_o_Iw.js.map
1
+ import{g as f,d as r,a as o,c as n,b as t,i as $,F as m,C as h,j as u,w as g,D as w,G as T,H as k,t as x,e as I,I as z,p as N,f as C,_ as M}from"./index-D80lTVeV.js";const E=r({name:"Promotion"}),B={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},O=t("path",{fill:"currentColor",d:"m64 448 832-320-128 704-446.08-243.328L832 192 242.816 545.472 64 448zm256 512V657.024L512 768 320 960z"},null,-1),Q=[O];function y(e,a,c,d,p,i){return o(),n("svg",B,Q)}var Y=f(E,[["render",y]]);const b=r({name:"UserFilled"}),j={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},D=t("path",{fill:"currentColor",d:"M288 320a224 224 0 1 0 448 0 224 224 0 1 0-448 0zm544 608H160a32 32 0 0 1-32-32v-96a160 160 0 0 1 160-160h448a160 160 0 0 1 160 160v96a32 32 0 0 1-32 32z"},null,-1),F=[D];function S(e,a,c,d,p,i){return o(),n("svg",j,F)}var V=f(b,[["render",S]]);const _=e=>(N("data-v-a235cdd8"),e=e(),C(),e),L={class:"callme"},q={class:"panel"},A=_(()=>t("h1",null,"联系作者",-1)),H={class:"baseinfo"},G=["href"],P=_(()=>t("hr",null,null,-1)),U={class:"qq-wechat"},J={class:"title"},K={class:"content"},R=["src"],W=_(()=>t("div",{class:"description"},[t("p",null,"如遇无法解决的账号/使用问题,欢迎小窗联系我")],-1)),X={class:"links"},Z=r({__name:"index",setup(e){const a=[{icon:V,text:"粥里有勺糖",href:"https://sugarat.top"},{icon:Y,text:"engineerzjl@foxmail.com",href:"mailto:engineerzjl@foxmail.com"}],c=[{text:"微信",img:"https://img.cdn.sugarat.top/mdImg/MTYxOTE1NTk3MTkyNA==619155971925"},{text:"公众号",img:"https://img.cdn.sugarat.top/mdImg/MTYxOTE1NTYwNzQ5MQ==619155607491"},{text:"QQ",img:"https://img.cdn.sugarat.top/mdImg/MTYxOTE1NjQ5ODczOQ==619156498739"},{text:"交流群",img:"https://img.cdn.sugarat.top/mdImg/MTY0Nzc2MTE2MTE2NA==ep-group.png"}];return(d,p)=>{const i=z,v=$("router-link");return o(),n("div",L,[t("main",null,[t("div",q,[A,t("div",H,[(o(),n(m,null,h(a,(s,l)=>t("span",{key:l,class:"info-item"},[u(i,null,{default:g(()=>[(o(),w(T(s.icon)))]),_:2},1024),t("i",{class:k(s.icon)},null,2),t("a",{target:"_blank",href:s.href},x(s.text),9,G)])),64))]),P,t("div",U,[t("ul",null,[(o(),n(m,null,h(c,(s,l)=>t("li",{key:l},[t("div",J,x(s.text),1),t("div",K,[t("img",{src:s.img},null,8,R)])])),64))])]),W,t("div",X,[u(v,{to:"/"},{default:g(()=>[I("回到首页")]),_:1})])])])])}}}),st=M(Z,[["__scopeId","data-v-a235cdd8"]]);export{st as default};
2
+ //# sourceMappingURL=index-MTuc20rr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-DvM_o_Iw.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/promotion.mjs","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/user-filled.mjs","../../src/pages/callme/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: \"Promotion\"\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: \"m64 448 832-320-128 704-446.08-243.328L832 192 242.816 545.472 64 448zm256 512V657.024L512 768 320 960z\"\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 promotion = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { promotion 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: \"UserFilled\"\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: \"M288 320a224 224 0 1 0 448 0 224 224 0 1 0-448 0zm544 608H160a32 32 0 0 1-32-32v-96a160 160 0 0 1 160-160h448a160 160 0 0 1 160 160v96a32 32 0 0 1-32 32z\"\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 userFilled = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { userFilled as default };\n","<template>\n <div class=\"callme\">\n <main>\n <div class=\"panel\">\n <h1>联系作者</h1>\n <!-- 基本信息 -->\n <div class=\"baseinfo\">\n <span v-for=\"(info, idx) in baseInfo\" :key=\"idx\" class=\"info-item\">\n <el-icon>\n <component :is=\"info.icon\" />\n </el-icon>\n <i :class=\"info.icon\"></i>\n <a target=\"_blank\" :href=\"info.href\">{{ info.text }}</a>\n </span>\n </div>\n <hr />\n <!-- 一堆二维码 -->\n <div class=\"qq-wechat\">\n <ul>\n <li v-for=\"(qrcode, idx) in qrCOdes\" :key=\"idx\">\n <div class=\"title\">{{ qrcode.text }}</div>\n <div class=\"content\">\n <img :src=\"qrcode.img\" />\n </div>\n </li>\n </ul>\n </div>\n <div class=\"description\">\n <p>如遇无法解决的账号/使用问题,欢迎小窗联系我</p>\n </div>\n <div class=\"links\">\n <router-link to=\"/\">回到首页</router-link>\n </div>\n </div>\n </main>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { UserFilled, Promotion } from '@element-plus/icons-vue'\n\nconst baseInfo = [\n {\n icon: UserFilled,\n text: '粥里有勺糖',\n href: 'https://sugarat.top',\n },\n {\n icon: Promotion,\n text: 'engineerzjl@foxmail.com',\n href: 'mailto:engineerzjl@foxmail.com',\n },\n]\n\nconst qrCOdes = [\n {\n text: '微信',\n img: 'https://img.cdn.sugarat.top/mdImg/MTYxOTE1NTk3MTkyNA==619155971925',\n },\n {\n text: '公众号',\n img: 'https://img.cdn.sugarat.top/mdImg/MTYxOTE1NTYwNzQ5MQ==619155607491',\n },\n {\n text: 'QQ',\n img: 'https://img.cdn.sugarat.top/mdImg/MTYxOTE1NjQ5ODczOQ==619156498739',\n },\n {\n text: '交流群',\n img: 'https://img.cdn.sugarat.top/mdImg/MTY0Nzc2MTE2MTE2NA==ep-group.png',\n },\n]\n\n</script>\n<style lang=\"scss\" scoped>\nh1,\nh2,\nh3,\nh4 {\n font-weight: 500;\n}\n.callme {\n background-image: linear-gradient(120deg, #a1c4fd 0%, #c2e9fb 100%);\n min-height: 100vh;\n}\nmain {\n max-width: 860px;\n margin: 0 auto;\n padding: 20px;\n .panel {\n position: relative;\n margin: 0 auto 20px;\n padding: 16px 20px;\n width: 100%;\n overflow: hidden;\n border-radius: 0.25rem;\n box-shadow: #eee;\n box-sizing: border-box;\n transition: all 0.3s;\n background-color: #fff;\n }\n h1 {\n font-size: 1.6rem;\n font-weight: 500;\n margin-bottom: 10px;\n }\n .baseinfo {\n color: #7f7f7f;\n font-size: 1rem;\n display: flex;\n flex-wrap: wrap;\n a {\n color: #7f7f7f;\n font-size: 1rem;\n margin-left: 10px;\n }\n .info-item {\n margin-right: 20px;\n }\n margin-bottom: 10px;\n }\n hr {\n margin-bottom: 10px;\n }\n .qq-wechat ul {\n list-style: none;\n display: flex;\n flex-wrap: wrap;\n margin-bottom: 10px;\n li {\n text-align: center;\n .title {\n font-weight: 600;\n }\n .content {\n padding: 0.5em;\n }\n img {\n width: 150px;\n }\n }\n }\n .description {\n color: #242424;\n font-size: 15px;\n margin-bottom: 10px;\n text-align: center;\n }\n .links {\n text-align: center;\n a {\n color: #409eff;\n }\n }\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","promotion","_export_sfc","userFilled","baseInfo","UserFilled","Promotion","qrCOdes"],"mappings":"sKAGA,MAAMA,EAAYC,EAAgB,CAChC,KAAM,WACR,CAAC,EACKC,EAAa,CACjB,QAAS,gBACT,MAAO,4BACT,EACMC,EAA6BC,EAAmB,OAAQ,CAC5D,KAAM,eACN,EAAG,yGACL,EAAG,KAAM,EAAE,EACLC,EAAa,CACjBF,CACF,EACA,SAASG,EAAYC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,EAAU,CAClE,OAAOC,EAAW,EAAEC,EAAmB,MAAOZ,EAAYG,CAAU,CACtE,CACA,IAAIU,EAA4BC,EAAYhB,EAAW,CAAC,CAAC,SAAUM,CAAW,CAAC,CAAC,ECjBhF,MAAMN,EAAYC,EAAgB,CAChC,KAAM,YACR,CAAC,EACKC,EAAa,CACjB,QAAS,gBACT,MAAO,4BACT,EACMC,EAA6BC,EAAmB,OAAQ,CAC5D,KAAM,eACN,EAAG,2JACL,EAAG,KAAM,EAAE,EACLC,EAAa,CACjBF,CACF,EACA,SAASG,EAAYC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,EAAU,CAClE,OAAOC,EAAW,EAAEC,EAAmB,MAAOZ,EAAYG,CAAU,CACtE,CACA,IAAIY,EAA6BD,EAAYhB,EAAW,CAAC,CAAC,SAAUM,CAAW,CAAC,CAAC,0XCoBjF,MAAMY,EAAW,CACf,CACE,KAAMC,EACN,KAAM,QACN,KAAM,qBACR,EACA,CACE,KAAMC,EACN,KAAM,0BACN,KAAM,gCACR,CAAA,EAGIC,EAAU,CACd,CACE,KAAM,KACN,IAAK,oEACP,EACA,CACE,KAAM,MACN,IAAK,oEACP,EACA,CACE,KAAM,KACN,IAAK,oEACP,EACA,CACE,KAAM,MACN,IAAK,oEACP,CAAA","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"index-MTuc20rr.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/promotion.mjs","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/user-filled.mjs","../../src/pages/callme/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: \"Promotion\"\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: \"m64 448 832-320-128 704-446.08-243.328L832 192 242.816 545.472 64 448zm256 512V657.024L512 768 320 960z\"\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 promotion = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { promotion 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: \"UserFilled\"\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: \"M288 320a224 224 0 1 0 448 0 224 224 0 1 0-448 0zm544 608H160a32 32 0 0 1-32-32v-96a160 160 0 0 1 160-160h448a160 160 0 0 1 160 160v96a32 32 0 0 1-32 32z\"\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 userFilled = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { userFilled as default };\n","<template>\n <div class=\"callme\">\n <main>\n <div class=\"panel\">\n <h1>联系作者</h1>\n <!-- 基本信息 -->\n <div class=\"baseinfo\">\n <span v-for=\"(info, idx) in baseInfo\" :key=\"idx\" class=\"info-item\">\n <el-icon>\n <component :is=\"info.icon\" />\n </el-icon>\n <i :class=\"info.icon\"></i>\n <a target=\"_blank\" :href=\"info.href\">{{ info.text }}</a>\n </span>\n </div>\n <hr />\n <!-- 一堆二维码 -->\n <div class=\"qq-wechat\">\n <ul>\n <li v-for=\"(qrcode, idx) in qrCOdes\" :key=\"idx\">\n <div class=\"title\">{{ qrcode.text }}</div>\n <div class=\"content\">\n <img :src=\"qrcode.img\" />\n </div>\n </li>\n </ul>\n </div>\n <div class=\"description\">\n <p>如遇无法解决的账号/使用问题,欢迎小窗联系我</p>\n </div>\n <div class=\"links\">\n <router-link to=\"/\">回到首页</router-link>\n </div>\n </div>\n </main>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { UserFilled, Promotion } from '@element-plus/icons-vue'\n\nconst baseInfo = [\n {\n icon: UserFilled,\n text: '粥里有勺糖',\n href: 'https://sugarat.top',\n },\n {\n icon: Promotion,\n text: 'engineerzjl@foxmail.com',\n href: 'mailto:engineerzjl@foxmail.com',\n },\n]\n\nconst qrCOdes = [\n {\n text: '微信',\n img: 'https://img.cdn.sugarat.top/mdImg/MTYxOTE1NTk3MTkyNA==619155971925',\n },\n {\n text: '公众号',\n img: 'https://img.cdn.sugarat.top/mdImg/MTYxOTE1NTYwNzQ5MQ==619155607491',\n },\n {\n text: 'QQ',\n img: 'https://img.cdn.sugarat.top/mdImg/MTYxOTE1NjQ5ODczOQ==619156498739',\n },\n {\n text: '交流群',\n img: 'https://img.cdn.sugarat.top/mdImg/MTY0Nzc2MTE2MTE2NA==ep-group.png',\n },\n]\n\n</script>\n<style lang=\"scss\" scoped>\nh1,\nh2,\nh3,\nh4 {\n font-weight: 500;\n}\n.callme {\n background-image: linear-gradient(120deg, #a1c4fd 0%, #c2e9fb 100%);\n min-height: 100vh;\n}\nmain {\n max-width: 860px;\n margin: 0 auto;\n padding: 20px;\n .panel {\n position: relative;\n margin: 0 auto 20px;\n padding: 16px 20px;\n width: 100%;\n overflow: hidden;\n border-radius: 0.25rem;\n box-shadow: #eee;\n box-sizing: border-box;\n transition: all 0.3s;\n background-color: #fff;\n }\n h1 {\n font-size: 1.6rem;\n font-weight: 500;\n margin-bottom: 10px;\n }\n .baseinfo {\n color: #7f7f7f;\n font-size: 1rem;\n display: flex;\n flex-wrap: wrap;\n a {\n color: #7f7f7f;\n font-size: 1rem;\n margin-left: 10px;\n }\n .info-item {\n margin-right: 20px;\n }\n margin-bottom: 10px;\n }\n hr {\n margin-bottom: 10px;\n }\n .qq-wechat ul {\n list-style: none;\n display: flex;\n flex-wrap: wrap;\n margin-bottom: 10px;\n li {\n text-align: center;\n .title {\n font-weight: 600;\n }\n .content {\n padding: 0.5em;\n }\n img {\n width: 150px;\n }\n }\n }\n .description {\n color: #242424;\n font-size: 15px;\n margin-bottom: 10px;\n text-align: center;\n }\n .links {\n text-align: center;\n a {\n color: #409eff;\n }\n }\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","promotion","_export_sfc","userFilled","baseInfo","UserFilled","Promotion","qrCOdes"],"mappings":"sKAGA,MAAMA,EAAYC,EAAgB,CAChC,KAAM,WACR,CAAC,EACKC,EAAa,CACjB,QAAS,gBACT,MAAO,4BACT,EACMC,EAA6BC,EAAmB,OAAQ,CAC5D,KAAM,eACN,EAAG,yGACL,EAAG,KAAM,EAAE,EACLC,EAAa,CACjBF,CACF,EACA,SAASG,EAAYC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,EAAU,CAClE,OAAOC,EAAW,EAAEC,EAAmB,MAAOZ,EAAYG,CAAU,CACtE,CACA,IAAIU,EAA4BC,EAAYhB,EAAW,CAAC,CAAC,SAAUM,CAAW,CAAC,CAAC,ECjBhF,MAAMN,EAAYC,EAAgB,CAChC,KAAM,YACR,CAAC,EACKC,EAAa,CACjB,QAAS,gBACT,MAAO,4BACT,EACMC,EAA6BC,EAAmB,OAAQ,CAC5D,KAAM,eACN,EAAG,2JACL,EAAG,KAAM,EAAE,EACLC,EAAa,CACjBF,CACF,EACA,SAASG,EAAYC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,EAAU,CAClE,OAAOC,EAAW,EAAEC,EAAmB,MAAOZ,EAAYG,CAAU,CACtE,CACA,IAAIY,EAA6BD,EAAYhB,EAAW,CAAC,CAAC,SAAUM,CAAW,CAAC,CAAC,0XCoBjF,MAAMY,EAAW,CACf,CACE,KAAMC,EACN,KAAM,QACN,KAAM,qBACR,EACA,CACE,KAAMC,EACN,KAAM,0BACN,KAAM,gCACR,CAAA,EAGIC,EAAU,CACd,CACE,KAAM,KACN,IAAK,oEACP,EACA,CACE,KAAM,MACN,IAAK,oEACP,EACA,CACE,KAAM,KACN,IAAK,oEACP,EACA,CACE,KAAM,MACN,IAAK,oEACP,CAAA","x_google_ignoreList":[0,1]}
@@ -0,0 +1 @@
1
+ @media screen and (max-width: 700px){.user[data-v-5fb60ef4]{margin-top:40px!important}.log-filter[data-v-5fb60ef4]{justify-content:center}}.w100[data-v-5fb60ef4]{width:100px}.user[data-v-5fb60ef4]{margin:0 auto}.panel[data-v-5fb60ef4]{max-width:1256px;padding:1em;background-color:#fff;margin:10px auto;box-sizing:border-box;box-shadow:0 2px 12px rgba(0,0,0,.1);border-radius:4px}.log-filter[data-v-5fb60ef4]{display:flex;flex-wrap:wrap}.log-filter .item[data-v-5fb60ef4]{margin-right:10px;margin-bottom:10px}.log-filter .item .label[data-v-5fb60ef4]{margin-right:10px;font-size:12px}.text-btn-list[data-v-5fb60ef4]{display:flex;flex-wrap:wrap}.text-btn-list button[data-v-5fb60ef4]{margin-left:0}.user-oss-info[data-v-5fb60ef4]{list-style:none}.user-oss-info li[data-v-5fb60ef4]{margin-bottom:10px}.user-oss-info .clear-btn[data-v-5fb60ef4]{margin-left:10px}.user-oss-info.disabled[data-v-5fb60ef4]{background-color:rgba(245,108,108,.3)}
@@ -1,2 +1,2 @@
1
- import{a4 as b,g as D,d as S,a as s,c as a,b as e,Z as Y,r as z,O as F,o as Q,j as r,w as n,k as E,H as j,a8 as N,a9 as T,e as _,F as k,C as M,t as g,D as m,S as q,E as O,I as U,x as H,v as P,p as R,f as Z,_ as G}from"./index-CvlaXQXr.js";import{E as J,a as K}from"./el-form-item-SCs-OERV.js";import{T as w}from"./tip-BCCd4P_x.js";import{r as W}from"./refresh-Bz5ULfz9.js";import"./isEqual-a1R5cOCU.js";import"./index-BAFXwCno.js";function X(){return b.get("/config/service/overview")}function ee(){return b.get("/config/service/config")}function te(i){return b.put("/config/service/config",i)}const $={getServiceOverview:X,getServiceConfig:ee,updateCfg:te},se=S({name:"CloseBold"}),ae={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},oe=e("path",{fill:"currentColor",d:"M195.2 195.2a64 64 0 0 1 90.496 0L512 421.504 738.304 195.2a64 64 0 0 1 90.496 90.496L602.496 512 828.8 738.304a64 64 0 0 1-90.496 90.496L512 602.496 285.696 828.8a64 64 0 0 1-90.496-90.496L421.504 512 195.2 285.696a64 64 0 0 1 0-90.496z"},null,-1),ne=[oe];function le(i,p,c,h,f,v){return s(),a("svg",ae,ne)}var re=D(se,[["render",le]]);const ie=S({name:"Select"}),ce={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},de=e("path",{fill:"currentColor",d:"M77.248 415.04a64 64 0 0 1 90.496 0l226.304 226.304L846.528 188.8a64 64 0 1 1 90.56 90.496l-543.04 543.04-316.8-316.8a64 64 0 0 1 0-90.496z"},null,-1),ue=[de];function _e(i,p,c,h,f,v){return s(),a("svg",ce,ue)}var pe=D(ie,[["render",_e]]);const B=i=>(R("data-v-9638922a"),i=i(),Z(),i),fe={class:"user"},ge={class:"panel"},me=B(()=>e("span",null,"服务概况",-1)),he={class:"service-list"},ve=["src","alt"],ye={key:2},ke={class:"error-panel"},Me=B(()=>e("h1",null,"错误信息",-1)),we={class:"error"},xe=B(()=>e("h1",null,"服务相关配置",-1)),Ce={href:"https://docs.ep.sugarat.top/deploy/online-new.html#_5-%E6%9C%80%E5%90%8E%E6%9B%B4%E6%96%B0%E9%85%8D%E7%BD%AE"},Ee={class:"config-container"},$e={class:"flex",style:{flex:"1"}},be=S({__name:"index",setup(i){const p=Y([{name:"MySQL",key:"mysql",logo:"https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTAyMjIwNA==657359022204",status:!1,des:"存储用户数据",errMsg:""},{name:"七牛云",key:"qiniu",logo:"https://img.cdn.sugarat.top/mdImg/MTY1NzM1ODcyODM0Mg==657358728342",status:!1,des:"文件存储"},{name:"MongoDB",key:"mongodb",logo:"https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTA4OTc3Nw==657359089777",status:!1,des:"用户数据与日志"},{name:"Redis",key:"redis",logo:"https://img.cdn.sugarat.top/mdImg/MTY1NzM1ODgyNzM1MA==657358827350",status:!1,des:"持久化缓存数据",error:"确保安装redis,且监听端口6379"},{name:"腾讯云",key:"tx",logo:"https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTE1MzQzOQ==657359153439",status:!1,des:"短信服务"}]),c=z(!1),h=F(()=>p.filter(o=>o.errMsg));function f(){c.value||(c.value=!0,$.getServiceOverview().then(o=>{const{data:y}=o;p.forEach(d=>{const{status:u,errMsg:x}=y[d.key];d.status=u,d.errMsg=x}),O.success("服务状态刷新完成"),c.value=!1}))}const v=z([]);function L(){$.getServiceConfig().then(o=>{o.data.forEach(y=>{y.data.forEach(d=>{d.disabled=!0})}),v.value=o.data})}function V(o){$.updateCfg(o).then(()=>{o.disabled=!0,O.success("更新成功"),f()})}return Q(()=>{f(),L()}),(o,y)=>{const d=U,u=H,x=P,A=J,I=K;return s(),a("div",fe,[e("div",ge,[e("div",null,[e("h1",null,[me,r(d,{class:j({loading:c.value}),style:{cursor:"pointer","margin-left":"10px"},onClick:f},{default:n(()=>[r(E(W))]),_:1},8,["class"]),N(e("span",null,"数据加载中...",512),[[T,c.value]])]),r(w,null,{default:n(()=>[_("查看各个服务的运行情况")]),_:1}),e("div",he,[(s(!0),a(k,null,M(p,t=>(s(),a("div",{key:t.key,class:"service-item"},[e("img",{src:t.logo,alt:t.name},null,8,ve),e("p",null,[r(w,null,{default:n(()=>[_(g(t.des),1)]),_:2},1024)]),t.status?(s(),m(u,{key:0,type:"success",size:"small",icon:E(pe),circle:""},null,8,["icon"])):(s(),m(u,{key:1,type:"danger",size:"small",icon:E(re),circle:""},null,8,["icon"])),!t.status&&t.error?(s(),a("p",ye,[r(w,null,{default:n(()=>[_(g(t.error),1)]),_:2},1024)])):q("",!0)]))),128))])]),N(e("div",ke,[Me,(s(!0),a(k,null,M(h.value,t=>(s(),a("p",{key:t.key},[e("strong",null,g(t.name)+":",1),e("span",we,g(t.errMsg),1)]))),128))],512),[[T,h.value.length]]),e("div",null,[xe,r(w,null,{default:n(()=>[_(" 在此面板,配置服务器运行相关参数 "),e("a",Ce,[r(u,{type:"primary",link:""},{default:n(()=>[_("配置手册?")]),_:1})])]),_:1})]),e("div",Ee,[(s(!0),a(k,null,M(v.value,t=>(s(),a("div",{key:t.title,class:"config-panel"},[e("h2",null,g(t.title),1),r(I,{"label-position":"right","label-width":"100px",style:{"max-width":"400px",margin:"0 auto"}},{default:n(()=>[(s(!0),a(k,null,M(t.data,l=>(s(),m(A,{key:l.key,"label-width":"auto",label:l.label||l.key},{default:n(()=>[e("div",$e,[r(x,{modelValue:l.value,"onUpdate:modelValue":C=>l.value=C,disabled:l.disabled},null,8,["modelValue","onUpdate:modelValue","disabled"]),l.disabled?(s(),m(u,{key:0,type:"primary",text:"",onClick:C=>l.disabled=!1},{default:n(()=>[_(" 更新 ")]),_:2},1032,["onClick"])):(s(),m(u,{key:1,type:"success",text:"",onClick:C=>V(l)},{default:n(()=>[_(" 完成 ")]),_:2},1032,["onClick"]))])]),_:2},1032,["label"]))),128))]),_:2},1024)]))),128))])])])}}}),De=G(be,[["__scopeId","data-v-9638922a"]]);export{De as default};
2
- //# sourceMappingURL=index-C1FTaXL2.js.map
1
+ import{a4 as b,g as D,d as S,a as s,c as a,b as e,Z as Y,r as z,O as F,o as Q,j as r,w as n,k as E,H as j,a8 as N,a9 as T,e as _,F as k,C as M,t as g,D as m,S as q,E as O,I as U,x as H,v as P,p as R,f as Z,_ as G}from"./index-D80lTVeV.js";import{E as J,a as K}from"./el-form-item-BhAyaXPT.js";import{T as w}from"./tip-DQo-E_Pu.js";import{r as W}from"./refresh-BTQLK-UW.js";import"./isEqual-pN6Ih18F.js";import"./index-BUF8Xxid.js";function X(){return b.get("/config/service/overview")}function ee(){return b.get("/config/service/config")}function te(i){return b.put("/config/service/config",i)}const $={getServiceOverview:X,getServiceConfig:ee,updateCfg:te},se=S({name:"CloseBold"}),ae={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},oe=e("path",{fill:"currentColor",d:"M195.2 195.2a64 64 0 0 1 90.496 0L512 421.504 738.304 195.2a64 64 0 0 1 90.496 90.496L602.496 512 828.8 738.304a64 64 0 0 1-90.496 90.496L512 602.496 285.696 828.8a64 64 0 0 1-90.496-90.496L421.504 512 195.2 285.696a64 64 0 0 1 0-90.496z"},null,-1),ne=[oe];function le(i,p,c,h,f,v){return s(),a("svg",ae,ne)}var re=D(se,[["render",le]]);const ie=S({name:"Select"}),ce={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},de=e("path",{fill:"currentColor",d:"M77.248 415.04a64 64 0 0 1 90.496 0l226.304 226.304L846.528 188.8a64 64 0 1 1 90.56 90.496l-543.04 543.04-316.8-316.8a64 64 0 0 1 0-90.496z"},null,-1),ue=[de];function _e(i,p,c,h,f,v){return s(),a("svg",ce,ue)}var pe=D(ie,[["render",_e]]);const B=i=>(R("data-v-9638922a"),i=i(),Z(),i),fe={class:"user"},ge={class:"panel"},me=B(()=>e("span",null,"服务概况",-1)),he={class:"service-list"},ve=["src","alt"],ye={key:2},ke={class:"error-panel"},Me=B(()=>e("h1",null,"错误信息",-1)),we={class:"error"},xe=B(()=>e("h1",null,"服务相关配置",-1)),Ce={href:"https://docs.ep.sugarat.top/deploy/online-new.html#_5-%E6%9C%80%E5%90%8E%E6%9B%B4%E6%96%B0%E9%85%8D%E7%BD%AE"},Ee={class:"config-container"},$e={class:"flex",style:{flex:"1"}},be=S({__name:"index",setup(i){const p=Y([{name:"MySQL",key:"mysql",logo:"https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTAyMjIwNA==657359022204",status:!1,des:"存储用户数据",errMsg:""},{name:"七牛云",key:"qiniu",logo:"https://img.cdn.sugarat.top/mdImg/MTY1NzM1ODcyODM0Mg==657358728342",status:!1,des:"文件存储"},{name:"MongoDB",key:"mongodb",logo:"https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTA4OTc3Nw==657359089777",status:!1,des:"用户数据与日志"},{name:"Redis",key:"redis",logo:"https://img.cdn.sugarat.top/mdImg/MTY1NzM1ODgyNzM1MA==657358827350",status:!1,des:"持久化缓存数据",error:"确保安装redis,且监听端口6379"},{name:"腾讯云",key:"tx",logo:"https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTE1MzQzOQ==657359153439",status:!1,des:"短信服务"}]),c=z(!1),h=F(()=>p.filter(o=>o.errMsg));function f(){c.value||(c.value=!0,$.getServiceOverview().then(o=>{const{data:y}=o;p.forEach(d=>{const{status:u,errMsg:x}=y[d.key];d.status=u,d.errMsg=x}),O.success("服务状态刷新完成"),c.value=!1}))}const v=z([]);function L(){$.getServiceConfig().then(o=>{o.data.forEach(y=>{y.data.forEach(d=>{d.disabled=!0})}),v.value=o.data})}function V(o){$.updateCfg(o).then(()=>{o.disabled=!0,O.success("更新成功"),f()})}return Q(()=>{f(),L()}),(o,y)=>{const d=U,u=H,x=P,A=J,I=K;return s(),a("div",fe,[e("div",ge,[e("div",null,[e("h1",null,[me,r(d,{class:j({loading:c.value}),style:{cursor:"pointer","margin-left":"10px"},onClick:f},{default:n(()=>[r(E(W))]),_:1},8,["class"]),N(e("span",null,"数据加载中...",512),[[T,c.value]])]),r(w,null,{default:n(()=>[_("查看各个服务的运行情况")]),_:1}),e("div",he,[(s(!0),a(k,null,M(p,t=>(s(),a("div",{key:t.key,class:"service-item"},[e("img",{src:t.logo,alt:t.name},null,8,ve),e("p",null,[r(w,null,{default:n(()=>[_(g(t.des),1)]),_:2},1024)]),t.status?(s(),m(u,{key:0,type:"success",size:"small",icon:E(pe),circle:""},null,8,["icon"])):(s(),m(u,{key:1,type:"danger",size:"small",icon:E(re),circle:""},null,8,["icon"])),!t.status&&t.error?(s(),a("p",ye,[r(w,null,{default:n(()=>[_(g(t.error),1)]),_:2},1024)])):q("",!0)]))),128))])]),N(e("div",ke,[Me,(s(!0),a(k,null,M(h.value,t=>(s(),a("p",{key:t.key},[e("strong",null,g(t.name)+":",1),e("span",we,g(t.errMsg),1)]))),128))],512),[[T,h.value.length]]),e("div",null,[xe,r(w,null,{default:n(()=>[_(" 在此面板,配置服务器运行相关参数 "),e("a",Ce,[r(u,{type:"primary",link:""},{default:n(()=>[_("配置手册?")]),_:1})])]),_:1})]),e("div",Ee,[(s(!0),a(k,null,M(v.value,t=>(s(),a("div",{key:t.title,class:"config-panel"},[e("h2",null,g(t.title),1),r(I,{"label-position":"right","label-width":"100px",style:{"max-width":"400px",margin:"0 auto"}},{default:n(()=>[(s(!0),a(k,null,M(t.data,l=>(s(),m(A,{key:l.key,"label-width":"auto",label:l.label||l.key},{default:n(()=>[e("div",$e,[r(x,{modelValue:l.value,"onUpdate:modelValue":C=>l.value=C,disabled:l.disabled},null,8,["modelValue","onUpdate:modelValue","disabled"]),l.disabled?(s(),m(u,{key:0,type:"primary",text:"",onClick:C=>l.disabled=!1},{default:n(()=>[_(" 更新 ")]),_:2},1032,["onClick"])):(s(),m(u,{key:1,type:"success",text:"",onClick:C=>V(l)},{default:n(()=>[_(" 完成 ")]),_:2},1032,["onClick"]))])]),_:2},1032,["label"]))),128))]),_:2},1024)]))),128))])])])}}}),De=G(be,[["__scopeId","data-v-9638922a"]]);export{De as default};
2
+ //# sourceMappingURL=index-bD-fr3vy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-C1FTaXL2.js","sources":["../../src/apis/modules/config.ts","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/close-bold.mjs","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/select.mjs","../../src/pages/dashboard/config/index.vue"],"sourcesContent":["import ajax from '../ajax'\n\nfunction getServiceOverview(): ConfigServiceAPITypes.getServiceOverview {\n return ajax.get('/config/service/overview')\n}\n\nfunction getServiceConfig(): ConfigServiceAPITypes.getServiceConfig {\n return ajax.get('/config/service/config')\n}\n\nfunction updateCfg(data: ConfigServiceAPITypes.ServiceConfigItem) {\n return ajax.put('/config/service/config', data)\n}\n\nexport default {\n getServiceOverview,\n getServiceConfig,\n updateCfg\n}\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"CloseBold\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M195.2 195.2a64 64 0 0 1 90.496 0L512 421.504 738.304 195.2a64 64 0 0 1 90.496 90.496L602.496 512 828.8 738.304a64 64 0 0 1-90.496 90.496L512 602.496 285.696 828.8a64 64 0 0 1-90.496-90.496L421.504 512 195.2 285.696a64 64 0 0 1 0-90.496z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar closeBold = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { closeBold as default };\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Select\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M77.248 415.04a64 64 0 0 1 90.496 0l226.304 226.304L846.528 188.8a64 64 0 1 1 90.56 90.496l-543.04 543.04-316.8-316.8a64 64 0 0 1 0-90.496z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar select = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { select as default };\n","<script lang=\"ts\" setup>\nimport { ElMessage } from 'element-plus'\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { CloseBold, Refresh, Select } from '@element-plus/icons-vue'\nimport Tip from '../tasks/components/infoPanel/tip.vue'\nimport { ConfigServiceAPI } from '@/apis'\n\nconst serviceList = reactive([\n {\n name: 'MySQL',\n key: 'mysql',\n logo: 'https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTAyMjIwNA==657359022204',\n status: false,\n des: '存储用户数据',\n errMsg: '',\n },\n {\n name: '七牛云',\n key: 'qiniu',\n logo: 'https://img.cdn.sugarat.top/mdImg/MTY1NzM1ODcyODM0Mg==657358728342',\n status: false,\n des: '文件存储',\n },\n {\n name: 'MongoDB',\n key: 'mongodb',\n logo: 'https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTA4OTc3Nw==657359089777',\n status: false,\n des: '用户数据与日志',\n },\n {\n name: 'Redis',\n key: 'redis',\n logo: 'https://img.cdn.sugarat.top/mdImg/MTY1NzM1ODgyNzM1MA==657358827350',\n status: false,\n des: '持久化缓存数据',\n error: '确保安装redis,且监听端口6379',\n },\n {\n name: '腾讯云',\n key: 'tx',\n logo: 'https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTE1MzQzOQ==657359153439',\n status: false,\n des: '短信服务',\n },\n])\n\nconst loading = ref(false)\nconst showErrorList = computed(() => serviceList.filter(item => item.errMsg))\nfunction refreshStatus() {\n if (loading.value)\n return\n loading.value = true\n ConfigServiceAPI.getServiceOverview().then((v) => {\n const { data } = v\n serviceList.forEach((item) => {\n const { status, errMsg } = data[item.key]\n item.status = status\n item.errMsg = errMsg\n })\n ElMessage.success('服务状态刷新完成')\n loading.value = false\n })\n}\n\nconst serverConfig = ref([])\nfunction getServiceConfig() {\n ConfigServiceAPI.getServiceConfig().then((v) => {\n // console.log(v.data)\n v.data.forEach((v) => {\n v.data.forEach((v) => {\n v.disabled = true\n })\n })\n serverConfig.value = v.data\n })\n}\nfunction updateCfg(item: ConfigServiceAPITypes.ServiceConfigItem) {\n ConfigServiceAPI.updateCfg(item).then(() => {\n item.disabled = true\n ElMessage.success('更新成功')\n refreshStatus()\n })\n}\nonMounted(() => {\n refreshStatus()\n getServiceConfig()\n})\n</script>\n\n<template>\n <div class=\"user\">\n <div class=\"panel\">\n <!-- 服务概况 -->\n <div>\n <h1>\n <span>服务概况</span>\n <el-icon\n :class=\"{\n loading,\n }\"\n style=\"cursor: pointer; margin-left: 10px\"\n @click=\"refreshStatus\"\n >\n <Refresh />\n </el-icon>\n <span v-show=\"loading\">数据加载中...</span>\n </h1>\n <Tip>查看各个服务的运行情况</Tip>\n <div class=\"service-list\">\n <div\n v-for=\"service in serviceList\"\n :key=\"service.key\"\n class=\"service-item\"\n >\n <img :src=\"service.logo\" :alt=\"service.name\">\n <!-- <p>{{ service.name }}</p> -->\n <p>\n <Tip>{{ service.des }}</Tip>\n </p>\n <el-button\n v-if=\"service.status\"\n type=\"success\"\n size=\"small\"\n :icon=\"Select\"\n circle\n />\n <el-button\n v-else\n type=\"danger\"\n size=\"small\"\n :icon=\"CloseBold\"\n circle\n />\n <p v-if=\"!service.status && service.error\">\n <Tip>{{ service.error }}</Tip>\n </p>\n </div>\n </div>\n </div>\n <div v-show=\"showErrorList.length\" class=\"error-panel\">\n <h1>错误信息</h1>\n <p v-for=\"err in showErrorList\" :key=\"err.key\">\n <strong>{{ err.name }}:</strong>\n <span class=\"error\">{{ err.errMsg }}</span>\n </p>\n </div>\n <div>\n <h1>服务相关配置</h1>\n <Tip>\n 在此面板,配置服务器运行相关参数\n <a\n href=\"https://docs.ep.sugarat.top/deploy/online-new.html#_5-%E6%9C%80%E5%90%8E%E6%9B%B4%E6%96%B0%E9%85%8D%E7%BD%AE\"\n >\n <el-button type=\"primary\" link>配置手册?</el-button></a>\n </Tip>\n </div>\n <div class=\"config-container\">\n <div\n v-for=\"serverItem in serverConfig\"\n :key=\"serverItem.title\"\n class=\"config-panel\"\n >\n <h2>\n {{ serverItem.title }}\n </h2>\n <el-form\n label-position=\"right\"\n label-width=\"100px\"\n style=\"max-width: 400px; margin: 0 auto\"\n >\n <el-form-item\n v-for=\"cfgItem in serverItem.data\"\n :key=\"cfgItem.key\"\n label-width=\"auto\"\n :label=\"cfgItem.label || cfgItem.key\"\n >\n <div class=\"flex\" style=\"flex: 1\">\n <el-input\n v-model=\"cfgItem.value\"\n :disabled=\"cfgItem.disabled\"\n />\n <el-button\n v-if=\"cfgItem.disabled\"\n type=\"primary\"\n text\n @click=\"cfgItem.disabled = false\"\n >\n 更新\n </el-button>\n <el-button\n v-else\n type=\"success\"\n text\n @click=\"updateCfg(cfgItem)\"\n >\n 完成\n </el-button>\n </div>\n </el-form-item>\n </el-form>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n@media screen and (max-width: 700px) {\n .user {\n margin-top: 40px !important;\n }\n}\n\n.user {\n margin: 0 auto;\n}\n\n.panel {\n max-width: 1256px;\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n border-radius: 4px;\n}\n\nh1 {\n margin: 0;\n padding: 10px 0;\n font-size: 20px;\n font-weight: bold;\n text-align: center;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.service-list {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-around;\n}\n\n.service-item {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n margin: 10px;\n min-width: 120px;\n\n img {\n width: 80px;\n }\n\n p {\n text-align: center;\n padding-top: 10px;\n font-size: 14px;\n }\n}\n\n@keyframes rotate {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.loading {\n margin-left: 10px;\n animation: rotate 1s linear infinite;\n}\n\n.error-panel {\n padding: 0 20px;\n\n p {\n .error {\n color: red;\n }\n\n margin-bottom: 10px;\n }\n}\n\n.config-container {\n display: flex;\n justify-content: space-around;\n flex-wrap: wrap;\n}\n\n.config-panel {\n h2 {\n text-align: center;\n font-size: 16px;\n margin-bottom: 10px;\n }\n}\n</style>\n"],"names":["getServiceOverview","ajax","getServiceConfig","updateCfg","data","ConfigServiceAPI","_sfc_main","defineComponent","_hoisted_1","_hoisted_2","createElementVNode","_hoisted_3","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","closeBold","_export_sfc","select","serviceList","reactive","loading","ref","showErrorList","computed","item","refreshStatus","v","status","errMsg","ElMessage","serverConfig","onMounted"],"mappings":"+aAEA,SAASA,GAA+D,CAC/D,OAAAC,EAAK,IAAI,0BAA0B,CAC5C,CAEA,SAASC,IAA2D,CAC3D,OAAAD,EAAK,IAAI,wBAAwB,CAC1C,CAEA,SAASE,GAAUC,EAA+C,CACzD,OAAAH,EAAK,IAAI,yBAA0BG,CAAI,CAChD,CAEA,MAAeC,EAAA,CACb,mBAAAL,EACA,iBAAAE,GACA,UAAAC,EACF,ECfMG,GAAYC,EAAgB,CAChC,KAAM,WACR,CAAC,EACKC,GAAa,CACjB,QAAS,gBACT,MAAO,4BACT,EACMC,GAA6BC,EAAmB,OAAQ,CAC5D,KAAM,eACN,EAAG,+OACL,EAAG,KAAM,EAAE,EACLC,GAAa,CACjBF,EACF,EACA,SAASG,GAAYC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,EAAU,CAClE,OAAOC,EAAW,EAAEC,EAAmB,MAAOZ,GAAYG,EAAU,CACtE,CACA,IAAIU,GAA4BC,EAAYhB,GAAW,CAAC,CAAC,SAAUM,EAAW,CAAC,CAAC,ECjBhF,MAAMN,GAAYC,EAAgB,CAChC,KAAM,QACR,CAAC,EACKC,GAAa,CACjB,QAAS,gBACT,MAAO,4BACT,EACMC,GAA6BC,EAAmB,OAAQ,CAC5D,KAAM,eACN,EAAG,6IACL,EAAG,KAAM,EAAE,EACLC,GAAa,CACjBF,EACF,EACA,SAASG,GAAYC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,EAAU,CAClE,OAAOC,EAAW,EAAEC,EAAmB,MAAOZ,GAAYG,EAAU,CACtE,CACA,IAAIY,GAAyBD,EAAYhB,GAAW,CAAC,CAAC,SAAUM,EAAW,CAAC,CAAC,sfCb7E,MAAMY,EAAcC,EAAS,CAC3B,CACE,KAAM,QACN,IAAK,QACL,KAAM,qEACN,OAAQ,GACR,IAAK,SACL,OAAQ,EACV,EACA,CACE,KAAM,MACN,IAAK,QACL,KAAM,qEACN,OAAQ,GACR,IAAK,MACP,EACA,CACE,KAAM,UACN,IAAK,UACL,KAAM,qEACN,OAAQ,GACR,IAAK,SACP,EACA,CACE,KAAM,QACN,IAAK,QACL,KAAM,qEACN,OAAQ,GACR,IAAK,UACL,MAAO,qBACT,EACA,CACE,KAAM,MACN,IAAK,KACL,KAAM,qEACN,OAAQ,GACR,IAAK,MACP,CAAA,CACD,EAEKC,EAAUC,EAAI,EAAK,EACnBC,EAAgBC,EAAS,IAAML,EAAY,OAAeM,GAAAA,EAAK,MAAM,CAAC,EAC5E,SAASC,GAAgB,CACnBL,EAAQ,QAEZA,EAAQ,MAAQ,GAChBrB,EAAiB,mBAAmB,EAAE,KAAM2B,GAAM,CAC1C,KAAA,CAAE,KAAA5B,CAAS,EAAA4B,EACLR,EAAA,QAASM,GAAS,CAC5B,KAAM,CAAE,OAAAG,EAAQ,OAAAC,CAAA,EAAW9B,EAAK0B,EAAK,GAAG,EACxCA,EAAK,OAASG,EACdH,EAAK,OAASI,CAAA,CACf,EACDC,EAAU,QAAQ,UAAU,EAC5BT,EAAQ,MAAQ,EAAA,CACjB,EACH,CAEM,MAAAU,EAAeT,EAAI,CAAA,CAAE,EAC3B,SAASzB,GAAmB,CAC1BG,EAAiB,iBAAiB,EAAE,KAAM2B,GAAM,CAE5CA,EAAA,KAAK,QAASA,GAAM,CACpBA,EAAE,KAAK,QAASA,GAAM,CACpBA,EAAE,SAAW,EAAA,CACd,CAAA,CACF,EACDI,EAAa,MAAQJ,EAAE,IAAA,CACxB,CACH,CACA,SAAS7B,EAAU2B,EAA+C,CAChEzB,EAAiB,UAAUyB,CAAI,EAAE,KAAK,IAAM,CAC1CA,EAAK,SAAW,GAChBK,EAAU,QAAQ,MAAM,EACVJ,GAAA,CACf,CACH,CACA,OAAAM,EAAU,IAAM,CACAN,IACG7B,GAAA,CAClB","x_google_ignoreList":[1,2]}
1
+ {"version":3,"file":"index-bD-fr3vy.js","sources":["../../src/apis/modules/config.ts","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/close-bold.mjs","../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/select.mjs","../../src/pages/dashboard/config/index.vue"],"sourcesContent":["import ajax from '../ajax'\n\nfunction getServiceOverview(): ConfigServiceAPITypes.getServiceOverview {\n return ajax.get('/config/service/overview')\n}\n\nfunction getServiceConfig(): ConfigServiceAPITypes.getServiceConfig {\n return ajax.get('/config/service/config')\n}\n\nfunction updateCfg(data: ConfigServiceAPITypes.ServiceConfigItem) {\n return ajax.put('/config/service/config', data)\n}\n\nexport default {\n getServiceOverview,\n getServiceConfig,\n updateCfg\n}\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"CloseBold\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M195.2 195.2a64 64 0 0 1 90.496 0L512 421.504 738.304 195.2a64 64 0 0 1 90.496 90.496L602.496 512 828.8 738.304a64 64 0 0 1-90.496 90.496L512 602.496 285.696 828.8a64 64 0 0 1-90.496-90.496L421.504 512 195.2 285.696a64 64 0 0 1 0-90.496z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar closeBold = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { closeBold as default };\n","import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"Select\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M77.248 415.04a64 64 0 0 1 90.496 0l226.304 226.304L846.528 188.8a64 64 0 1 1 90.56 90.496l-543.04 543.04-316.8-316.8a64 64 0 0 1 0-90.496z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar select = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { select as default };\n","<script lang=\"ts\" setup>\nimport { ElMessage } from 'element-plus'\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { CloseBold, Refresh, Select } from '@element-plus/icons-vue'\nimport Tip from '../tasks/components/infoPanel/tip.vue'\nimport { ConfigServiceAPI } from '@/apis'\n\nconst serviceList = reactive([\n {\n name: 'MySQL',\n key: 'mysql',\n logo: 'https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTAyMjIwNA==657359022204',\n status: false,\n des: '存储用户数据',\n errMsg: '',\n },\n {\n name: '七牛云',\n key: 'qiniu',\n logo: 'https://img.cdn.sugarat.top/mdImg/MTY1NzM1ODcyODM0Mg==657358728342',\n status: false,\n des: '文件存储',\n },\n {\n name: 'MongoDB',\n key: 'mongodb',\n logo: 'https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTA4OTc3Nw==657359089777',\n status: false,\n des: '用户数据与日志',\n },\n {\n name: 'Redis',\n key: 'redis',\n logo: 'https://img.cdn.sugarat.top/mdImg/MTY1NzM1ODgyNzM1MA==657358827350',\n status: false,\n des: '持久化缓存数据',\n error: '确保安装redis,且监听端口6379',\n },\n {\n name: '腾讯云',\n key: 'tx',\n logo: 'https://img.cdn.sugarat.top/mdImg/MTY1NzM1OTE1MzQzOQ==657359153439',\n status: false,\n des: '短信服务',\n },\n])\n\nconst loading = ref(false)\nconst showErrorList = computed(() => serviceList.filter(item => item.errMsg))\nfunction refreshStatus() {\n if (loading.value)\n return\n loading.value = true\n ConfigServiceAPI.getServiceOverview().then((v) => {\n const { data } = v\n serviceList.forEach((item) => {\n const { status, errMsg } = data[item.key]\n item.status = status\n item.errMsg = errMsg\n })\n ElMessage.success('服务状态刷新完成')\n loading.value = false\n })\n}\n\nconst serverConfig = ref([])\nfunction getServiceConfig() {\n ConfigServiceAPI.getServiceConfig().then((v) => {\n // console.log(v.data)\n v.data.forEach((v) => {\n v.data.forEach((v) => {\n v.disabled = true\n })\n })\n serverConfig.value = v.data\n })\n}\nfunction updateCfg(item: ConfigServiceAPITypes.ServiceConfigItem) {\n ConfigServiceAPI.updateCfg(item).then(() => {\n item.disabled = true\n ElMessage.success('更新成功')\n refreshStatus()\n })\n}\nonMounted(() => {\n refreshStatus()\n getServiceConfig()\n})\n</script>\n\n<template>\n <div class=\"user\">\n <div class=\"panel\">\n <!-- 服务概况 -->\n <div>\n <h1>\n <span>服务概况</span>\n <el-icon\n :class=\"{\n loading,\n }\"\n style=\"cursor: pointer; margin-left: 10px\"\n @click=\"refreshStatus\"\n >\n <Refresh />\n </el-icon>\n <span v-show=\"loading\">数据加载中...</span>\n </h1>\n <Tip>查看各个服务的运行情况</Tip>\n <div class=\"service-list\">\n <div\n v-for=\"service in serviceList\"\n :key=\"service.key\"\n class=\"service-item\"\n >\n <img :src=\"service.logo\" :alt=\"service.name\">\n <!-- <p>{{ service.name }}</p> -->\n <p>\n <Tip>{{ service.des }}</Tip>\n </p>\n <el-button\n v-if=\"service.status\"\n type=\"success\"\n size=\"small\"\n :icon=\"Select\"\n circle\n />\n <el-button\n v-else\n type=\"danger\"\n size=\"small\"\n :icon=\"CloseBold\"\n circle\n />\n <p v-if=\"!service.status && service.error\">\n <Tip>{{ service.error }}</Tip>\n </p>\n </div>\n </div>\n </div>\n <div v-show=\"showErrorList.length\" class=\"error-panel\">\n <h1>错误信息</h1>\n <p v-for=\"err in showErrorList\" :key=\"err.key\">\n <strong>{{ err.name }}:</strong>\n <span class=\"error\">{{ err.errMsg }}</span>\n </p>\n </div>\n <div>\n <h1>服务相关配置</h1>\n <Tip>\n 在此面板,配置服务器运行相关参数\n <a\n href=\"https://docs.ep.sugarat.top/deploy/online-new.html#_5-%E6%9C%80%E5%90%8E%E6%9B%B4%E6%96%B0%E9%85%8D%E7%BD%AE\"\n >\n <el-button type=\"primary\" link>配置手册?</el-button></a>\n </Tip>\n </div>\n <div class=\"config-container\">\n <div\n v-for=\"serverItem in serverConfig\"\n :key=\"serverItem.title\"\n class=\"config-panel\"\n >\n <h2>\n {{ serverItem.title }}\n </h2>\n <el-form\n label-position=\"right\"\n label-width=\"100px\"\n style=\"max-width: 400px; margin: 0 auto\"\n >\n <el-form-item\n v-for=\"cfgItem in serverItem.data\"\n :key=\"cfgItem.key\"\n label-width=\"auto\"\n :label=\"cfgItem.label || cfgItem.key\"\n >\n <div class=\"flex\" style=\"flex: 1\">\n <el-input\n v-model=\"cfgItem.value\"\n :disabled=\"cfgItem.disabled\"\n />\n <el-button\n v-if=\"cfgItem.disabled\"\n type=\"primary\"\n text\n @click=\"cfgItem.disabled = false\"\n >\n 更新\n </el-button>\n <el-button\n v-else\n type=\"success\"\n text\n @click=\"updateCfg(cfgItem)\"\n >\n 完成\n </el-button>\n </div>\n </el-form-item>\n </el-form>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n@media screen and (max-width: 700px) {\n .user {\n margin-top: 40px !important;\n }\n}\n\n.user {\n margin: 0 auto;\n}\n\n.panel {\n max-width: 1256px;\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n border-radius: 4px;\n}\n\nh1 {\n margin: 0;\n padding: 10px 0;\n font-size: 20px;\n font-weight: bold;\n text-align: center;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.service-list {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-around;\n}\n\n.service-item {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n margin: 10px;\n min-width: 120px;\n\n img {\n width: 80px;\n }\n\n p {\n text-align: center;\n padding-top: 10px;\n font-size: 14px;\n }\n}\n\n@keyframes rotate {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.loading {\n margin-left: 10px;\n animation: rotate 1s linear infinite;\n}\n\n.error-panel {\n padding: 0 20px;\n\n p {\n .error {\n color: red;\n }\n\n margin-bottom: 10px;\n }\n}\n\n.config-container {\n display: flex;\n justify-content: space-around;\n flex-wrap: wrap;\n}\n\n.config-panel {\n h2 {\n text-align: center;\n font-size: 16px;\n margin-bottom: 10px;\n }\n}\n</style>\n"],"names":["getServiceOverview","ajax","getServiceConfig","updateCfg","data","ConfigServiceAPI","_sfc_main","defineComponent","_hoisted_1","_hoisted_2","createElementVNode","_hoisted_3","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","closeBold","_export_sfc","select","serviceList","reactive","loading","ref","showErrorList","computed","item","refreshStatus","v","status","errMsg","ElMessage","serverConfig","onMounted"],"mappings":"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","x_google_ignoreList":[1,2]}
@@ -1,2 +1,2 @@
1
- import{g as Ae,d as Ee,a as s,c,b as l,u as He,a1 as Ge,Z as U,O as _,r as h,$ as Je,bt as qe,o as Ke,aW as we,E as r,bf as Ye,i as Xe,j as d,w as n,F as $,C as le,t as k,a8 as se,k as N,S as g,e as u,D as y,a9 as ke,a5 as xe,a3 as Ze,aY as be,ag as oe,bX as Qe,ae as j,aa as et,af as $e,y as tt,v as at,x as lt,I as st,p as ot,f as nt,b0 as it,s as ut,ac as rt,a_ as dt,P as ct,_ as pt}from"./index-CvlaXQXr.js";import{v as mt}from"./el-loading-DSlXrliU.js";import{a as ft,E as vt}from"./el-progress-BRTU4m5q.js";import{E as _t,a as ht}from"./el-form-item-SCs-OERV.js";import{T as E,E as gt}from"./tip-BCCd4P_x.js";import{I as yt,L as wt}from"./index-B621FN6u.js";import{u as kt}from"./el-dialog-C8bI9VGw.js";import{E as Ne}from"./index-UJqXhonq.js";import"./index-BAFXwCno.js";import"./isEqual-a1R5cOCU.js";import"./el-select-uDoCZCn5.js";import"./validator-BESrcCvQ.js";import"./aria-nkjrUMQ-.js";const xt=Ee({name:"UploadFilled"}),bt={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},$t=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),Nt=[$t];function Et(D,G,ne,ie,B,ue){return s(),c("svg",bt,Nt)}var Ft=Ae(xt,[["render",Et]]);const F=D=>(ot("data-v-8a74d233"),D=D(),nt(),D),Ct={class:"task-panel"},St={class:"pc-nav"},Ut={class:"nav"},zt={class:"logo"},It=F(()=>l("img",{style:{height:"40px",width:"170px"},src:"https://img.cdn.sugarat.top/easypicker/EasyPicker.png",alt:"logo"},null,-1)),Tt=["onClick"],Lt={key:0,"element-loading-text":"Loading...",class:"panel tc"},Mt={class:"name"},Vt={key:0,style:{color:"red"}},Dt={class:"tip-wrapper"},Bt={class:"ddl"},Pt={key:0},Rt={key:4},Wt={class:"infos"},Ot={key:0},jt={class:"infos"},At=F(()=>l("div",{class:"el-upload__text"},[u(" 将文件拖于此处 or "),l("em",null,"直接选择文件")],-1)),Ht={class:"p10"},Gt={class:"p10"},Jt={class:"p10 option-tips"},qt={style:{color:"red"}},Kt={style:{color:"red"}},Yt=F(()=>l("br",null,null,-1)),Xt=F(()=>l("br",null,null,-1)),Zt=F(()=>l("strong",null,"查询提交情况,需填写和提交时一样的表单信息",-1)),Qt=F(()=>l("br",null,null,-1)),ea=F(()=>l("strong",null,"选择大文件后需要等待一会儿才展示处理",-1)),ta=F(()=>l("br",null,null,-1)),aa={class:"withdraw"},la={key:1,class:"panel tc"},sa={class:"name"},oa={style:{"padding-top":"20px"}},na=Ee({__name:"index",setup(D){const G=kt(),ne=He(),ie=Ge(),B=U([{title:"我也要收集",path:"https://docs.ep.sugarat.top/"}]);function ue(t){if(B[t].path.startsWith("http")){window.location.href=B[t].path;return}ne.push({path:B[t].path})}const z=U({name:"",category:""}),o=U({bindField:""}),f=_(()=>it(o.format)),p=h(""),A=h(0),P=_(()=>A.value<=0),Fe=_(()=>{let t=~~(A.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 J(t=!0){if(o!=null&&o.ddl){const e=new Date(o.ddl);A.value=e.getTime()-Date.now()}else A.value=0;t&&setTimeout(()=>{J()},1e3)}const I=_(()=>{if(o!=null&&o.ddl){const t=new Date(o.ddl);return ut(t)}return""}),v=U([]),C=h([]),q=h(),K=_(()=>C.value.filter(t=>t.status==="uploading").length>0),Ce=t=>t.status==="uploading"||t.status==="success"?Ne.confirm("不影响已经上传成功的,正在上传的将取消上传","确定从列表移除文件吗?").then(()=>(t.status==="uploading"&&(r.info("取消".concat(t.name,"的上传")),t.subscription.unsubscribe()),!0)).catch(()=>!1):!0,Y=_(()=>v.every(t=>t.value)),T=_(()=>o.bindField.trim()||"姓名"),re=_(()=>v.find(t=>t.text===T.value)),Se=_(()=>o.people&&!re.value),x=U({peopleName:""});function de(t,e,a){if(!e){const i="请输入".concat(T.value);a(new Error(i)),r.error(i);return}be.checkPeopleIsExist(p.value,e).then(i=>{i.data.exist||r.error("你不在此次提交名单中,如有疑问请联系管理员"),a(i.data.exist?void 0:new Error("你不在此次提交名单中,如有疑问请联系管理员"))})}const ce=h(),Ue=U({peopleName:[{validator:de,trigger:"blur"}]});function X(){var t;if(re.value){const e=(t=v.find(a=>a.text===T.value))==null?void 0:t.value;return x.peopleName=e||"",new Promise(a=>{de(null,e,a)}).then(a=>!a)}return ce.value.validate(e=>e)}function ze(){const t=C.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;o.rewrite&&(a=v.map(W=>W.value).join(f.value.splitChar||"-")+oe(a)),a=rt(a);const te="easypicker2/".concat(p.value,"/").concat(e.md5,"/").concat(a);j.getUploadToken().then(W=>{dt(W.data.token,e.raw,te,{success(O){const{fsize:H}=O;j.addFile({originName:i,name:a,taskKey:p.value,taskName:z.name,size:H,hash:e.md5,info:JSON.stringify(v),people:x.peopleName}).then(()=>{e.status="success",r.success("文件:".concat(e.name,"提交成功")),o.people&&be.updatePeopleStatus(p.value,a,x.peopleName,e.md5)})},process(O,H,ae){e.percentage=Math.floor(O),e.subscription=ae}})})}}async function Ie(){if(!Y.value){r.warning("请先完成必要信息的填写");return}o.people&&!await X()||ze()}const Te=_(()=>{for(const t of C.value)if(t.status==="ready")return!0;return!1}),Le=_(()=>{for(const t of C.value)if(["success","ready"].includes(t.status))return!0;return!1}),L=h(0);function Me(t){const{name:e}=t;if(f.value.format.length&&f.value.status){const a=oe(e);if(!f.value.format.find(i=>a.toLowerCase().endsWith(i))){r.error("".concat(e," 格式不符合要求")),q.value.handleRemove(t);return}}if(f.value.size&&f.value.size<t.size){r.error("".concat(e," 大小").concat(xe(t.size)," 不符合要求")),q.value.handleRemove(t);return}L.value+=1,Qe(t.raw).then(a=>{t.md5=a,L.value-=1})}const pe=_(()=>f.value.limit||10);function Ve(){r.warning("一次提交最多只能选择".concat(pe.value,"个文件,请移除已经上传成功的或刷新页面"))}const Z=h(!1),me=h("");function De(){const t=C.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;o.rewrite&&(a=v.map(i=>i.value).join(f.value.splitChar||"-")+oe(a)),j.withdrawFile({taskKey:p.value,taskName:z.name,filename:a,hash:e.md5,info:JSON.stringify(v),peopleName:x.peopleName}).then(()=>{r.success("文件:".concat(e.name,"撤回成功")),e.name+=" - (已撤回 ✅ )",e.status="fail"}).catch(()=>{r.error("撤回失败: 没有文件:".concat(e.name,"对应提交记录"))})}}function fe(){j.getTemplateUrl(o.template,p.value).then(t=>{Z.value=!0;const{link:e}=t.data;me.value=e,et(e,o.template)}).catch(()=>{r.warning("文件已从服务器上移除,请联系管理员重新上传")})}const R=h(!1);async function Be(){if(!Y.value){r.warning("请先完成必要信息的填写");return}o.people&&!await X()||De()}async function Pe(){if(!Y.value){r.warning("请先完成必要信息的填写,需和提交时信息完全一致");return}o.people&&!await X()||j.checkSubmitStatus(p.value,v,x.peopleName).then(t=>{t.data.isSubmit?r.success("已经提交过啦"):r.warning("还未提交过哟")})}const Q=h(!1),ee=h(!1);function ve(t=[],e=[]){return t.length!==e.length?!1:t.every((a,i)=>a.type===e[i].type&&a.text===e[i].text&&ve(a.children,e[i].children))}function _e(t=!1){we.getTaskMoreInfo(p.value).then(e=>{Object.assign(o,e.data),ve(v,$e(o.info))||(v.splice(0,v.length),v.push(...$e(o.info)),t&&r.success("表单信息有更新")),J(!1),Q.value=!1})}function he(){ee.value=!0}function ge(){ee.value&&!K.value&&(ee.value=!1,_e(!0))}const Re=_(()=>P.value?I.value:I.value+Fe.value),S=U({text:"",imgs:[]}),w=h([]);Je(()=>o.tip,()=>{try{const t=JSON.parse(o.tip);S.imgs=t.imgs,S.text=t.text||"",w.value=S.imgs.map(e=>({...e,url:"https://img.cdn.sugarat.top/mdImg/MTY3NzkxMDI1NTU1Nw==20140524124237518.gif"})),w.value.length&&ct.getTipImageUrl(p.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){S.text="",S.imgs=[],w.value=[]}});const M=qe("disabledUpload",!1);return Ke(()=>{p.value=ie.params.key,p.value&&(Q.value=!0,we.getTaskInfo(p.value).then(t=>{Object.assign(z,t.data),M.value=!!t.data.limitUpload,M.value&&Ne.alert("任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间")}).catch(t=>{t.code===4001&&(r.error("任务不存在"),p.value="",z.name="任务不存在")}),_e(),J()),window.addEventListener("blur",he),window.addEventListener("focus",ge)}),Ye(()=>{window.removeEventListener("blur",he),window.removeEventListener("focus",ge)}),(t,e)=>{const a=Xe("router-link"),i=tt,te=gt,W=ft,O=at,H=_t,ae=ht,b=lt,We=st,Oe=vt,je=mt;return s(),c("div",Ct,[l("div",St,[l("div",Ut,[l("div",zt,[d(a,{to:"/"},{default:n(()=>[It]),_:1})]),l("nav",null,[(s(!0),c($,null,le(B,(m,V)=>(s(),c("div",{key:V,class:"nav-item",onClick:ye=>ue(V)},k(m.title),9,Tt))),128))])])]),p.value?se((s(),c("div",Lt,[l("h1",Mt,k(z.name),1),N(M)?(s(),c("h2",Vt," 任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间 ")):g("",!0),S.text&&(!I.value||!P.value)?(s(),c($,{key:1},[d(i,null,{default:n(()=>[u("⚠️ 注意事项 ⚠️")]),_:1}),d(E,null,{default:n(()=>[l("div",Dt,[(s(!0),c($,null,le(S.text.split("\n"),(m,V)=>(s(),c("p",{key:V},k(m.replace(/\s/g," ")),1))),128))])]),_:1})],64)):g("",!0),w.value.length&&(!I.value||!P.value)?(s(!0),c($,{key:2},le(w.value,(m,V)=>(s(),y(te,{key:m.uid,"hide-on-click-modal":"",style:{width:"100px",height:"100px",margin:"10px"},src:m.url,"zoom-rate":1.2,"preview-src-list":w.value.map(ye=>ye.preview),"initial-index":V,fit:"contain"},null,8,["src","preview-src-list","initial-index"]))),128)):g("",!0),I.value?(s(),c($,{key:3},[d(i,null,{default:n(()=>[u("截止时间")]),_:1}),l("h2",Bt,k(Re.value),1),P.value?(s(),c("div",Pt,[d(W,{description:"已经结束啦!"})])):g("",!0)],64)):g("",!0),!I.value||!P.value?(s(),c("div",Rt,[d(i,null,{default:n(()=>[u("必要信息填写")]),_:1}),l("div",Wt,[se(l("div",null,[d(E,null,{default:n(()=>[u("“"+k(T.value)+"”在参与名单里才能正常提交",1)]),_:1})],512),[[ke,o.people]]),Se.value?(s(),c("div",Ot,[l("div",jt,[d(ae,{ref_key:"validModalRef",ref:ce,rules:Ue,"status-icon":"",model:x,disabled:K.value,"label-position":"top"},{default:n(()=>[d(H,{prop:"peopleName",label:T.value},{default:n(()=>[d(O,{modelValue:x.peopleName,"onUpdate:modelValue":e[0]||(e[0]=m=>x.peopleName=m),maxlength:14,clearable:"","show-word-limit":"",placeholder:"请输入 ".concat(T.value)},null,8,["modelValue","placeholder"])]),_:1},8,["label"])]),_:1},8,["rules","model","disabled"])])])):g("",!0),d(yt,{infos:v,disabled:K.value},null,8,["infos","disabled"])]),d(Oe,{ref_key:"fileUpload",ref:q,"file-list":C.value,"onUpdate:fileList":e[1]||(e[1]=m=>C.value=m),style:{"max-width":"400px",margin:"0 auto"},drag:!N(G),action:"","on-change":Me,"before-remove":Ce,"on-exceed":Ve,"auto-upload":!1,multiple:"",limit:pe.value},{tip:n(()=>[se(l("div",Ht,[d(E,null,{default:n(()=>[u(" 还有 "+k(L.value)+" 个文件正在生成校验信息,请稍等(1G通常需要20s) ",1)]),_:1})],512),[[ke,!!L.value]])]),default:n(()=>[N(G)?(s(),y(b,{key:0,type:"primary"},{default:n(()=>[u(" 选择文件 ")]),_:1})):(s(),c($,{key:1},[d(We,{class:"el-icon--upload"},{default:n(()=>[d(N(Ft))]),_:1}),At],64))]),_:1},8,["file-list","drag","limit"]),l("div",Gt,[R.value?(s(),y(b,{key:0,size:"default",type:"warning",disabled:!Le.value||!!L.value,onClick:Be},{default:n(()=>[u(" 一键撤回 ")]),_:1},8,["disabled"])):N(M)?g("",!0):(s(),y(b,{key:1,size:"default",type:"success",disabled:!Te.value||!!L.value,onClick:Ie},{default:n(()=>[u(" 提交文件 ")]),_:1},8,["disabled"])),d(b,{size:"default",onClick:Pe},{default:n(()=>[u(" 查询提交情况 ")]),_:1})]),l("div",Jt,[f.value.status&&f.value.format.length?(s(),y(E,{key:0},{default:n(()=>[u(" 限制格式为: "),l("span",qt,k(f.value.format.join(", ")),1)]),_:1})):g("",!0),f.value.size?(s(),y(E,{key:1},{default:n(()=>[u(" 限制文件大小不超过: "),l("span",Kt,k(N(xe)(f.value.size)),1)]),_:1})):g("",!0),R.value?(s(),y(E,{key:2},{default:n(()=>[u(" ① 须保证选择的文件与提交时的文件一致"),Yt,u(" ② 填写表单信息一致 "),Xt,u(" ③ 完全一模一样的文件的提交记录(内容md5+命名),将会一次性全部撤回 ")]),_:1})):(s(),c($,{key:3},[d(E,null,{default:n(()=>[Zt]),_:1}),d(E,null,{default:n(()=>[u(" ① 选择完文件,点击 ”提交文件“即可 "),Qt,u(" ② "),ea,o.template&&!N(M)?(s(),c($,{key:0},[ta,u(" ③ "),l("strong",null,[d(b,{type:"primary",text:"",style:{color:"#85ce61"},size:"small",onClick:fe},{default:n(()=>[u("右下角可 “查看提交示例” ")]),_:1})])],64)):g("",!0)]),_:1})],64))]),l("div",aa,[o.template&&!N(M)?(s(),y(b,{key:0,type:"primary",text:"",style:{color:"#85ce61"},size:"small",onClick:fe},{default:n(()=>[u(" 查看提交示例 ")]),_:1})):g("",!0),R.value?(s(),y(b,{key:1,size:"small",type:"primary",text:"",onClick:e[2]||(e[2]=m=>R.value=!1)},{default:n(()=>[u(" 正常提交 ")]),_:1})):(s(),y(b,{key:2,size:"small",type:"primary",text:"",onClick:e[3]||(e[3]=m=>R.value=!0)},{default:n(()=>[u(" 我要撤回 ")]),_:1}))])])):g("",!0)])),[[je,Q.value]]):(s(),c("div",la,[l("h1",sa,k(z.name),1)])),d(wt,{value:Z.value,"onUpdate:value":e[4]||(e[4]=m=>Z.value=m),title:"示例文件下载链接",link:me.value},null,8,["value","link"]),l("div",oa,[d(Ze,{type:"task"})])])}}}),wa=pt(na,[["__scopeId","data-v-8a74d233"]]);export{wa as default};
2
- //# sourceMappingURL=index-AYz8tt3l.js.map
1
+ import{g as Ae,d as Ee,a as s,c,b as l,u as He,a1 as Ge,Z as U,O as _,r as h,$ as Je,bt as qe,o as Ke,aW as we,E as r,bf as Ye,i as Xe,j as d,w as n,F as $,C as le,t as k,a8 as se,k as N,S as g,e as u,D as y,a9 as ke,a5 as xe,a3 as Ze,aY as be,ag as oe,bX as Qe,ae as j,aa as et,af as $e,y as tt,v as at,x as lt,I as st,p as ot,f as nt,b0 as it,s as ut,ac as rt,a_ as dt,P as ct,_ as pt}from"./index-D80lTVeV.js";import{v as mt}from"./el-loading-D5D_2rI_.js";import{a as ft,E as vt}from"./el-progress-GDfl1hgb.js";import{E as _t,a as ht}from"./el-form-item-BhAyaXPT.js";import{T as E,E as gt}from"./tip-DQo-E_Pu.js";import{I as yt,L as wt}from"./index-DEiWe2Bk.js";import{u as kt}from"./el-dialog-C9wNxcPt.js";import{E as Ne}from"./index-Byzqqd86.js";import"./index-BUF8Xxid.js";import"./isEqual-pN6Ih18F.js";import"./el-select-B9z8VvNb.js";import"./validator-CZlzBDi2.js";import"./aria-nkjrUMQ-.js";const xt=Ee({name:"UploadFilled"}),bt={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},$t=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),Nt=[$t];function Et(D,G,ne,ie,B,ue){return s(),c("svg",bt,Nt)}var Ft=Ae(xt,[["render",Et]]);const F=D=>(ot("data-v-8a74d233"),D=D(),nt(),D),Ct={class:"task-panel"},St={class:"pc-nav"},Ut={class:"nav"},zt={class:"logo"},It=F(()=>l("img",{style:{height:"40px",width:"170px"},src:"https://img.cdn.sugarat.top/easypicker/EasyPicker.png",alt:"logo"},null,-1)),Tt=["onClick"],Lt={key:0,"element-loading-text":"Loading...",class:"panel tc"},Mt={class:"name"},Vt={key:0,style:{color:"red"}},Dt={class:"tip-wrapper"},Bt={class:"ddl"},Pt={key:0},Rt={key:4},Wt={class:"infos"},Ot={key:0},jt={class:"infos"},At=F(()=>l("div",{class:"el-upload__text"},[u(" 将文件拖于此处 or "),l("em",null,"直接选择文件")],-1)),Ht={class:"p10"},Gt={class:"p10"},Jt={class:"p10 option-tips"},qt={style:{color:"red"}},Kt={style:{color:"red"}},Yt=F(()=>l("br",null,null,-1)),Xt=F(()=>l("br",null,null,-1)),Zt=F(()=>l("strong",null,"查询提交情况,需填写和提交时一样的表单信息",-1)),Qt=F(()=>l("br",null,null,-1)),ea=F(()=>l("strong",null,"选择大文件后需要等待一会儿才展示处理",-1)),ta=F(()=>l("br",null,null,-1)),aa={class:"withdraw"},la={key:1,class:"panel tc"},sa={class:"name"},oa={style:{"padding-top":"20px"}},na=Ee({__name:"index",setup(D){const G=kt(),ne=He(),ie=Ge(),B=U([{title:"我也要收集",path:"https://docs.ep.sugarat.top/"}]);function ue(t){if(B[t].path.startsWith("http")){window.location.href=B[t].path;return}ne.push({path:B[t].path})}const z=U({name:"",category:""}),o=U({bindField:""}),f=_(()=>it(o.format)),p=h(""),A=h(0),P=_(()=>A.value<=0),Fe=_(()=>{let t=~~(A.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 J(t=!0){if(o!=null&&o.ddl){const e=new Date(o.ddl);A.value=e.getTime()-Date.now()}else A.value=0;t&&setTimeout(()=>{J()},1e3)}const I=_(()=>{if(o!=null&&o.ddl){const t=new Date(o.ddl);return ut(t)}return""}),v=U([]),C=h([]),q=h(),K=_(()=>C.value.filter(t=>t.status==="uploading").length>0),Ce=t=>t.status==="uploading"||t.status==="success"?Ne.confirm("不影响已经上传成功的,正在上传的将取消上传","确定从列表移除文件吗?").then(()=>(t.status==="uploading"&&(r.info("取消".concat(t.name,"的上传")),t.subscription.unsubscribe()),!0)).catch(()=>!1):!0,Y=_(()=>v.every(t=>t.value)),T=_(()=>o.bindField.trim()||"姓名"),re=_(()=>v.find(t=>t.text===T.value)),Se=_(()=>o.people&&!re.value),x=U({peopleName:""});function de(t,e,a){if(!e){const i="请输入".concat(T.value);a(new Error(i)),r.error(i);return}be.checkPeopleIsExist(p.value,e).then(i=>{i.data.exist||r.error("你不在此次提交名单中,如有疑问请联系管理员"),a(i.data.exist?void 0:new Error("你不在此次提交名单中,如有疑问请联系管理员"))})}const ce=h(),Ue=U({peopleName:[{validator:de,trigger:"blur"}]});function X(){var t;if(re.value){const e=(t=v.find(a=>a.text===T.value))==null?void 0:t.value;return x.peopleName=e||"",new Promise(a=>{de(null,e,a)}).then(a=>!a)}return ce.value.validate(e=>e)}function ze(){const t=C.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;o.rewrite&&(a=v.map(W=>W.value).join(f.value.splitChar||"-")+oe(a)),a=rt(a);const te="easypicker2/".concat(p.value,"/").concat(e.md5,"/").concat(a);j.getUploadToken().then(W=>{dt(W.data.token,e.raw,te,{success(O){const{fsize:H}=O;j.addFile({originName:i,name:a,taskKey:p.value,taskName:z.name,size:H,hash:e.md5,info:JSON.stringify(v),people:x.peopleName}).then(()=>{e.status="success",r.success("文件:".concat(e.name,"提交成功")),o.people&&be.updatePeopleStatus(p.value,a,x.peopleName,e.md5)})},process(O,H,ae){e.percentage=Math.floor(O),e.subscription=ae}})})}}async function Ie(){if(!Y.value){r.warning("请先完成必要信息的填写");return}o.people&&!await X()||ze()}const Te=_(()=>{for(const t of C.value)if(t.status==="ready")return!0;return!1}),Le=_(()=>{for(const t of C.value)if(["success","ready"].includes(t.status))return!0;return!1}),L=h(0);function Me(t){const{name:e}=t;if(f.value.format.length&&f.value.status){const a=oe(e);if(!f.value.format.find(i=>a.toLowerCase().endsWith(i))){r.error("".concat(e," 格式不符合要求")),q.value.handleRemove(t);return}}if(f.value.size&&f.value.size<t.size){r.error("".concat(e," 大小").concat(xe(t.size)," 不符合要求")),q.value.handleRemove(t);return}L.value+=1,Qe(t.raw).then(a=>{t.md5=a,L.value-=1})}const pe=_(()=>f.value.limit||10);function Ve(){r.warning("一次提交最多只能选择".concat(pe.value,"个文件,请移除已经上传成功的或刷新页面"))}const Z=h(!1),me=h("");function De(){const t=C.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;o.rewrite&&(a=v.map(i=>i.value).join(f.value.splitChar||"-")+oe(a)),j.withdrawFile({taskKey:p.value,taskName:z.name,filename:a,hash:e.md5,info:JSON.stringify(v),peopleName:x.peopleName}).then(()=>{r.success("文件:".concat(e.name,"撤回成功")),e.name+=" - (已撤回 ✅ )",e.status="fail"}).catch(()=>{r.error("撤回失败: 没有文件:".concat(e.name,"对应提交记录"))})}}function fe(){j.getTemplateUrl(o.template,p.value).then(t=>{Z.value=!0;const{link:e}=t.data;me.value=e,et(e,o.template)}).catch(()=>{r.warning("文件已从服务器上移除,请联系管理员重新上传")})}const R=h(!1);async function Be(){if(!Y.value){r.warning("请先完成必要信息的填写");return}o.people&&!await X()||De()}async function Pe(){if(!Y.value){r.warning("请先完成必要信息的填写,需和提交时信息完全一致");return}o.people&&!await X()||j.checkSubmitStatus(p.value,v,x.peopleName).then(t=>{t.data.isSubmit?r.success("已经提交过啦"):r.warning("还未提交过哟")})}const Q=h(!1),ee=h(!1);function ve(t=[],e=[]){return t.length!==e.length?!1:t.every((a,i)=>a.type===e[i].type&&a.text===e[i].text&&ve(a.children,e[i].children))}function _e(t=!1){we.getTaskMoreInfo(p.value).then(e=>{Object.assign(o,e.data),ve(v,$e(o.info))||(v.splice(0,v.length),v.push(...$e(o.info)),t&&r.success("表单信息有更新")),J(!1),Q.value=!1})}function he(){ee.value=!0}function ge(){ee.value&&!K.value&&(ee.value=!1,_e(!0))}const Re=_(()=>P.value?I.value:I.value+Fe.value),S=U({text:"",imgs:[]}),w=h([]);Je(()=>o.tip,()=>{try{const t=JSON.parse(o.tip);S.imgs=t.imgs,S.text=t.text||"",w.value=S.imgs.map(e=>({...e,url:"https://img.cdn.sugarat.top/mdImg/MTY3NzkxMDI1NTU1Nw==20140524124237518.gif"})),w.value.length&&ct.getTipImageUrl(p.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){S.text="",S.imgs=[],w.value=[]}});const M=qe("disabledUpload",!1);return Ke(()=>{p.value=ie.params.key,p.value&&(Q.value=!0,we.getTaskInfo(p.value).then(t=>{Object.assign(z,t.data),M.value=!!t.data.limitUpload,M.value&&Ne.alert("任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间")}).catch(t=>{t.code===4001&&(r.error("任务不存在"),p.value="",z.name="任务不存在")}),_e(),J()),window.addEventListener("blur",he),window.addEventListener("focus",ge)}),Ye(()=>{window.removeEventListener("blur",he),window.removeEventListener("focus",ge)}),(t,e)=>{const a=Xe("router-link"),i=tt,te=gt,W=ft,O=at,H=_t,ae=ht,b=lt,We=st,Oe=vt,je=mt;return s(),c("div",Ct,[l("div",St,[l("div",Ut,[l("div",zt,[d(a,{to:"/"},{default:n(()=>[It]),_:1})]),l("nav",null,[(s(!0),c($,null,le(B,(m,V)=>(s(),c("div",{key:V,class:"nav-item",onClick:ye=>ue(V)},k(m.title),9,Tt))),128))])])]),p.value?se((s(),c("div",Lt,[l("h1",Mt,k(z.name),1),N(M)?(s(),c("h2",Vt," 任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间 ")):g("",!0),S.text&&(!I.value||!P.value)?(s(),c($,{key:1},[d(i,null,{default:n(()=>[u("⚠️ 注意事项 ⚠️")]),_:1}),d(E,null,{default:n(()=>[l("div",Dt,[(s(!0),c($,null,le(S.text.split("\n"),(m,V)=>(s(),c("p",{key:V},k(m.replace(/\s/g," ")),1))),128))])]),_:1})],64)):g("",!0),w.value.length&&(!I.value||!P.value)?(s(!0),c($,{key:2},le(w.value,(m,V)=>(s(),y(te,{key:m.uid,"hide-on-click-modal":"",style:{width:"100px",height:"100px",margin:"10px"},src:m.url,"zoom-rate":1.2,"preview-src-list":w.value.map(ye=>ye.preview),"initial-index":V,fit:"contain"},null,8,["src","preview-src-list","initial-index"]))),128)):g("",!0),I.value?(s(),c($,{key:3},[d(i,null,{default:n(()=>[u("截止时间")]),_:1}),l("h2",Bt,k(Re.value),1),P.value?(s(),c("div",Pt,[d(W,{description:"已经结束啦!"})])):g("",!0)],64)):g("",!0),!I.value||!P.value?(s(),c("div",Rt,[d(i,null,{default:n(()=>[u("必要信息填写")]),_:1}),l("div",Wt,[se(l("div",null,[d(E,null,{default:n(()=>[u("“"+k(T.value)+"”在参与名单里才能正常提交",1)]),_:1})],512),[[ke,o.people]]),Se.value?(s(),c("div",Ot,[l("div",jt,[d(ae,{ref_key:"validModalRef",ref:ce,rules:Ue,"status-icon":"",model:x,disabled:K.value,"label-position":"top"},{default:n(()=>[d(H,{prop:"peopleName",label:T.value},{default:n(()=>[d(O,{modelValue:x.peopleName,"onUpdate:modelValue":e[0]||(e[0]=m=>x.peopleName=m),maxlength:14,clearable:"","show-word-limit":"",placeholder:"请输入 ".concat(T.value)},null,8,["modelValue","placeholder"])]),_:1},8,["label"])]),_:1},8,["rules","model","disabled"])])])):g("",!0),d(yt,{infos:v,disabled:K.value},null,8,["infos","disabled"])]),d(Oe,{ref_key:"fileUpload",ref:q,"file-list":C.value,"onUpdate:fileList":e[1]||(e[1]=m=>C.value=m),style:{"max-width":"400px",margin:"0 auto"},drag:!N(G),action:"","on-change":Me,"before-remove":Ce,"on-exceed":Ve,"auto-upload":!1,multiple:"",limit:pe.value},{tip:n(()=>[se(l("div",Ht,[d(E,null,{default:n(()=>[u(" 还有 "+k(L.value)+" 个文件正在生成校验信息,请稍等(1G通常需要20s) ",1)]),_:1})],512),[[ke,!!L.value]])]),default:n(()=>[N(G)?(s(),y(b,{key:0,type:"primary"},{default:n(()=>[u(" 选择文件 ")]),_:1})):(s(),c($,{key:1},[d(We,{class:"el-icon--upload"},{default:n(()=>[d(N(Ft))]),_:1}),At],64))]),_:1},8,["file-list","drag","limit"]),l("div",Gt,[R.value?(s(),y(b,{key:0,size:"default",type:"warning",disabled:!Le.value||!!L.value,onClick:Be},{default:n(()=>[u(" 一键撤回 ")]),_:1},8,["disabled"])):N(M)?g("",!0):(s(),y(b,{key:1,size:"default",type:"success",disabled:!Te.value||!!L.value,onClick:Ie},{default:n(()=>[u(" 提交文件 ")]),_:1},8,["disabled"])),d(b,{size:"default",onClick:Pe},{default:n(()=>[u(" 查询提交情况 ")]),_:1})]),l("div",Jt,[f.value.status&&f.value.format.length?(s(),y(E,{key:0},{default:n(()=>[u(" 限制格式为: "),l("span",qt,k(f.value.format.join(", ")),1)]),_:1})):g("",!0),f.value.size?(s(),y(E,{key:1},{default:n(()=>[u(" 限制文件大小不超过: "),l("span",Kt,k(N(xe)(f.value.size)),1)]),_:1})):g("",!0),R.value?(s(),y(E,{key:2},{default:n(()=>[u(" ① 须保证选择的文件与提交时的文件一致"),Yt,u(" ② 填写表单信息一致 "),Xt,u(" ③ 完全一模一样的文件的提交记录(内容md5+命名),将会一次性全部撤回 ")]),_:1})):(s(),c($,{key:3},[d(E,null,{default:n(()=>[Zt]),_:1}),d(E,null,{default:n(()=>[u(" ① 选择完文件,点击 ”提交文件“即可 "),Qt,u(" ② "),ea,o.template&&!N(M)?(s(),c($,{key:0},[ta,u(" ③ "),l("strong",null,[d(b,{type:"primary",text:"",style:{color:"#85ce61"},size:"small",onClick:fe},{default:n(()=>[u("右下角可 “查看提交示例” ")]),_:1})])],64)):g("",!0)]),_:1})],64))]),l("div",aa,[o.template&&!N(M)?(s(),y(b,{key:0,type:"primary",text:"",style:{color:"#85ce61"},size:"small",onClick:fe},{default:n(()=>[u(" 查看提交示例 ")]),_:1})):g("",!0),R.value?(s(),y(b,{key:1,size:"small",type:"primary",text:"",onClick:e[2]||(e[2]=m=>R.value=!1)},{default:n(()=>[u(" 正常提交 ")]),_:1})):(s(),y(b,{key:2,size:"small",type:"primary",text:"",onClick:e[3]||(e[3]=m=>R.value=!0)},{default:n(()=>[u(" 我要撤回 ")]),_:1}))])])):g("",!0)])),[[je,Q.value]]):(s(),c("div",la,[l("h1",sa,k(z.name),1)])),d(wt,{value:Z.value,"onUpdate:value":e[4]||(e[4]=m=>Z.value=m),title:"示例文件下载链接",link:me.value},null,8,["value","link"]),l("div",oa,[d(Ze,{type:"task"})])])}}}),wa=pt(na,[["__scopeId","data-v-8a74d233"]]);export{wa as default};
2
+ //# sourceMappingURL=index-fb67TYJ8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-AYz8tt3l.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/upload-filled.mjs","../../src/pages/task/index.vue"],"sourcesContent":["import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"UploadFilled\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M544 864V672h128L512 480 352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.808 239.808 0 0 1 512 192a239.872 239.872 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6H544z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar uploadFilled = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { uploadFilled as default };\n","<script lang=\"ts\" setup>\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport type { FormInstance, UploadInstance, UploadUserFile } from 'element-plus'\nimport { computed, onMounted, onUnmounted, reactive, ref, watch } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport HomeFooter from '@components/HomeFooter/index.vue'\nimport LinkDialog from '@components/linkDialog.vue'\nimport { UploadFilled } from '@element-plus/icons-vue'\nimport { useStore } from 'vuex'\nimport { useLocalStorage } from '@vueuse/core'\nimport Tip from '../dashboard/tasks/components/infoPanel/tip.vue'\nimport {\n formatDate,\n formatSize,\n getFileMd5Hash,\n getFileSuffix,\n normalizeFileName,\n parseFileFormat,\n parseInfo,\n} from '@/utils/stringUtil'\nimport { downLoadByUrl, qiniuUpload } from '@/utils/networkUtil'\nimport { FileApi, PeopleApi, PublicApi, TaskApi } from '@/apis'\nimport InfosForm from '@/components/InfosForm/index.vue'\nimport { useIsMobile } from '@/composables'\n\nconst isMobile = useIsMobile()\n// 顶部导航\nconst $router = useRouter()\nconst $route = useRoute()\nconst pcNavs = reactive([\n {\n title: '我也要收集',\n path: 'https://docs.ep.sugarat.top/',\n },\n])\nfunction handleNav(idx: number) {\n if (pcNavs[idx].path.startsWith('http')) {\n window.location.href = pcNavs[idx].path\n return\n }\n $router.push({\n path: pcNavs[idx].path,\n })\n}\n\n// 任务基本信息展示\nconst taskInfo = reactive<TaskApiTypes.TaskInfo>({\n name: '',\n category: '',\n})\nconst taskMoreInfo = reactive<Partial<TaskApiTypes.TaskInfo>>({\n bindField: '',\n})\nconst formatData = computed(() => parseFileFormat(taskMoreInfo.format))\nconst k = ref('')\n\n// 用于展示截止日期\nconst waitTime = ref(0)\n// 判断是否结束\nconst isOver = computed(() => waitTime.value <= 0)\nconst waitTimeStr = computed(() => {\n let seconds = ~~(waitTime.value / 1000)\n let hour = ~~(seconds / (60 * 60))\n const day = ~~(hour / 24)\n hour %= 24\n const minute = ~~((seconds % 3600) / 60)\n seconds %= 60\n return `剩余${day}天${hour}时${minute}分${seconds}秒`\n})\nfunction refreshWaitTime(loop = true) {\n if (taskMoreInfo?.ddl) {\n const date = new Date(taskMoreInfo.ddl)\n waitTime.value = date.getTime() - Date.now()\n }\n else {\n waitTime.value = 0\n }\n if (loop) {\n setTimeout(() => {\n refreshWaitTime()\n }, 1000)\n }\n}\nconst ddlStr = computed(() => {\n if (taskMoreInfo?.ddl) {\n const date = new Date(taskMoreInfo.ddl)\n return formatDate(date)\n }\n return ''\n})\n\n// 必填信息\nconst infos = reactive<InfoItem[]>([])\n\n// 文件上传部分\n\n// 文件上传\nconst fileList = ref<(UploadUserFile & { md5: string, subscription: any })[]>(\n [],\n)\nconst fileUpload = ref<UploadInstance>()\nconst disableForm = computed(\n () => fileList.value.filter(item => item.status === 'uploading').length > 0,\n)\nconst handleRemoveFile: any = (file: any) => {\n if (file.status === 'uploading' || file.status === 'success') {\n return ElMessageBox.confirm(\n '不影响已经上传成功的,正在上传的将取消上传',\n '确定从列表移除文件吗?',\n )\n .then(() => {\n if (file.status === 'uploading') {\n ElMessage.info(`取消${file.name}的上传`)\n // 取消上传\n file.subscription.unsubscribe() // 取消上传\n }\n return true\n })\n .catch(() => false)\n }\n return true\n}\n\n// 校验表单填写\nconst isWriteFinish = computed(() => infos.every(item => item.value))\n// 提交文件\n\nconst limitBindField = computed(() => {\n return taskMoreInfo.bindField.trim() || '姓名'\n})\n\n// 身份核验表单\nconst isSameFieldName = computed(() =>\n infos.find(v => v.text === limitBindField.value),\n)\nconst showValidForm = computed(\n () => taskMoreInfo.people && !isSameFieldName.value,\n)\nconst validModal = reactive({\n peopleName: '',\n})\n\nfunction validatePeopleName(rule: any, value: any, callback: any) {\n if (!value) {\n const message = `请输入${limitBindField.value}`\n callback(new Error(message))\n ElMessage.error(message)\n return\n }\n // 异步校验\n PeopleApi.checkPeopleIsExist(k.value, value).then((res) => {\n if (!res.data.exist) {\n ElMessage.error('你不在此次提交名单中,如有疑问请联系管理员')\n }\n callback(\n res.data.exist\n ? undefined\n : new Error('你不在此次提交名单中,如有疑问请联系管理员'),\n )\n })\n}\n\nconst validModalRef = ref<FormInstance>()\nconst validModalRules = reactive({\n peopleName: [{ validator: validatePeopleName, trigger: 'blur' }],\n})\nfunction confirmPeopleName() {\n // 处理表单必填项含有 limitBindField 的情况\n if (isSameFieldName.value) {\n const value = infos.find(v => v.text === limitBindField.value)?.value\n validModal.peopleName = value || ''\n return new Promise((resolve) => {\n validatePeopleName(null, value, resolve)\n }).then(v => !v)\n }\n return validModalRef.value.validate((isValid: boolean) => isValid)\n}\n\nfunction startUpload() {\n const uploadFiles = fileList.value\n for (const file of uploadFiles) {\n if (!file.md5) {\n ElMessage.info(\n `文件(${file.name})的唯一指纹还在计算中,再等待一会儿再点击上传`,\n )\n setTimeout(() => {\n ElMessage.info('文件越大计算时间越长(1G通常需要20s)')\n }, 100)\n }\n else if (file.status === 'ready') {\n // 开始上传\n file.status = 'uploading'\n let { name } = file\n const originName = name\n // 如果开启了自动重命名,这里重命名一下\n if (taskMoreInfo.rewrite) {\n name\n = infos.map(v => v.value).join(formatData.value.splitChar || '-')\n + getFileSuffix(name)\n }\n // 替换不合法的字符\n name = normalizeFileName(name)\n const key = `easypicker2/${k.value}/${file.md5}/${name}`\n\n FileApi.getUploadToken().then((res) => {\n qiniuUpload(res.data.token, file.raw, key, {\n success(data: any) {\n const { fsize } = data\n FileApi.addFile({\n originName,\n name,\n taskKey: k.value,\n taskName: taskInfo.name,\n size: fsize,\n hash: file.md5,\n info: JSON.stringify(infos),\n people: validModal.peopleName,\n }).then(() => {\n file.status = 'success'\n ElMessage.success(`文件:${file.name}提交成功`)\n if (taskMoreInfo.people) {\n // 无感知更新一下\n PeopleApi.updatePeopleStatus(\n k.value,\n name,\n validModal.peopleName,\n file.md5,\n )\n }\n })\n },\n process(per: number, data: any, subscription: any) {\n file.percentage = Math.floor(per)\n // 挂载取消上传的方法\n file.subscription = subscription\n },\n })\n })\n }\n }\n}\n\nasync function submitUpload() {\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写')\n return\n }\n\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n startUpload()\n}\n\n// 是否允许上传\nconst allowUpload = computed(() => {\n for (const file of fileList.value) {\n if (file.status === 'ready') {\n return true\n }\n }\n return false\n})\n\n// 是否允许撤回\nconst allowWithdraw = computed(() => {\n for (const file of fileList.value) {\n if (['success', 'ready'].includes(file.status)) {\n return true\n }\n }\n return false\n})\n\n// 添加文件\n// 正在计算MD5值的文件个数\nconst calculateMd5Count = ref(0)\nfunction handleChangeFile(file: any) {\n // 校验文件后缀名\n const { name } = file\n if (formatData.value.format.length && formatData.value.status) {\n const suffix = getFileSuffix(name)\n if (\n !formatData.value.format.find(v => suffix.toLowerCase().endsWith(v))\n ) {\n ElMessage.error(`${name} 格式不符合要求`)\n fileUpload.value.handleRemove(file)\n return\n }\n }\n\n // 校验文件大小\n if (formatData.value.size && formatData.value.size < file.size) {\n ElMessage.error(`${name} 大小${formatSize(file.size)} 不符合要求`)\n fileUpload.value.handleRemove(file)\n return\n }\n\n calculateMd5Count.value += 1\n // 计算md5 hash\n getFileMd5Hash(file.raw).then((str) => {\n file.md5 = str\n calculateMd5Count.value -= 1\n })\n}\n\nconst limitUploadCount = computed(() => formatData.value.limit || 10)\nfunction handleExceed() {\n ElMessage.warning(\n `一次提交最多只能选择${limitUploadCount.value}个文件,请移除已经上传成功的或刷新页面`,\n )\n}\nconst showLinkModel = ref(false)\nconst templateLink = ref('')\nfunction runWithdraw() {\n const uploadFiles = fileList.value\n for (const file of uploadFiles) {\n if (!file.md5) {\n ElMessage.info(\n `文件(${file.name})的唯一指纹还在计算中,再等待一会儿再点击上传`,\n )\n setTimeout(() => {\n ElMessage.info('文件越大计算时间越长(1G通常需要20s)')\n }, 100)\n }\n else if (!['fail', 'uploading'].includes(file.status)) {\n // 准备开始撤回\n let { name } = file\n\n // 如果开启了自动重命名,这里重命名一下\n if (taskMoreInfo.rewrite) {\n name\n = infos.map(v => v.value).join(formatData.value.splitChar || '-')\n + getFileSuffix(name)\n }\n\n FileApi.withdrawFile({\n taskKey: k.value,\n taskName: taskInfo.name,\n filename: name,\n hash: file.md5,\n info: JSON.stringify(infos),\n peopleName: validModal.peopleName,\n })\n .then(() => {\n ElMessage.success(`文件:${file.name}撤回成功`)\n file.name += ' - (已撤回 ✅ )'\n file.status = 'fail'\n })\n .catch(() => {\n ElMessage.error(`撤回失败: 没有文件:${file.name}对应提交记录`)\n })\n }\n }\n}\nfunction downloadTemplate() {\n FileApi.getTemplateUrl(taskMoreInfo.template, k.value)\n .then((res) => {\n showLinkModel.value = true\n const { link } = res.data\n templateLink.value = link\n downLoadByUrl(link, taskMoreInfo.template)\n })\n .catch(() => {\n ElMessage.warning('文件已从服务器上移除,请联系管理员重新上传')\n })\n}\n\n// 撤回相关逻辑\nconst isWithdraw = ref(false)\nasync function startWithdraw() {\n // 校验表单填写\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写')\n return\n }\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n runWithdraw()\n}\n\n// 查询提交情况\nasync function checkSubmitStatus() {\n // 校验表单填写\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写,需和提交时信息完全一致')\n return\n }\n // 卡控人员限制\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n FileApi.checkSubmitStatus(k.value, infos, validModal.peopleName).then(\n (res) => {\n if (res.data.isSubmit) {\n ElMessage.success('已经提交过啦')\n }\n else {\n ElMessage.warning('还未提交过哟')\n }\n },\n )\n}\nconst isLoadingData = ref(false)\nconst readyRefresh = ref(false)\nfunction isEqualInfos(a: InfoItem[] = [], b: InfoItem[] = []) {\n if (a.length !== b.length) {\n return false\n }\n return a.every(\n (v, i) =>\n v.type === b[i].type\n && v.text === b[i].text\n && isEqualInfos(v.children, b[i].children),\n )\n}\nfunction refreshTaskMoreInfo(hot = false) {\n TaskApi.getTaskMoreInfo(k.value).then((res) => {\n Object.assign(taskMoreInfo, res.data)\n if (!isEqualInfos(infos, parseInfo(taskMoreInfo.info))) {\n infos.splice(0, infos.length)\n infos.push(...parseInfo(taskMoreInfo.info))\n if (hot) {\n ElMessage.success('表单信息有更新')\n }\n }\n refreshWaitTime(false)\n isLoadingData.value = false\n })\n}\nfunction handleBlur() {\n readyRefresh.value = true\n}\nfunction handleFocus() {\n if (readyRefresh.value && !disableForm.value) {\n readyRefresh.value = false\n refreshTaskMoreInfo(true)\n }\n}\n\n// 展示的时间提示文案\nconst timeInfo = computed(() => {\n if (!isOver.value) {\n return ddlStr.value + waitTimeStr.value\n }\n return ddlStr.value\n})\n\n// tipImage\nconst tipData = reactive<{\n text: string\n imgs: {\n uid: number\n name: string\n }[]\n}>({\n text: '',\n imgs: [],\n})\nconst imageList = ref<\n { name: string, uid: number, preview?: string, url: string }[]\n>([])\n\nwatch(\n () => taskMoreInfo.tip,\n () => {\n // 初始化\n try {\n const parseData = JSON.parse(taskMoreInfo.tip)\n tipData.imgs = parseData.imgs\n tipData.text = parseData.text || ''\n imageList.value = tipData.imgs.map((v) => {\n return {\n ...v,\n url: 'https://img.cdn.sugarat.top/mdImg/MTY3NzkxMDI1NTU1Nw==20140524124237518.gif',\n }\n })\n if (imageList.value.length) {\n // 异步填充url\n PublicApi.getTipImageUrl(\n k.value,\n imageList.value.map(v => ({\n uid: v.uid,\n name: v.name,\n })),\n ).then((v) => {\n v.data.forEach((url, idx) => {\n imageList.value[idx].url = url.cover\n Object.assign(imageList.value[idx], {\n preview: url.preview,\n })\n })\n })\n }\n }\n catch {\n tipData.text = ''\n tipData.imgs = []\n imageList.value = []\n }\n },\n)\n\n// 禁用上传\nconst disabledUpload = useLocalStorage('disabledUpload', false)\n\nonMounted(() => {\n k.value = $route.params.key as string\n if (k.value) {\n isLoadingData.value = true\n TaskApi.getTaskInfo(k.value)\n .then((res) => {\n Object.assign(taskInfo, res.data)\n disabledUpload.value = !!res.data.limitUpload\n if (disabledUpload.value) {\n ElMessageBox.alert(\n '任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间',\n )\n }\n })\n .catch((err) => {\n if (err.code === 4001) {\n ElMessage.error('任务不存在')\n k.value = ''\n taskInfo.name = '任务不存在'\n }\n })\n refreshTaskMoreInfo()\n refreshWaitTime()\n }\n // 页面隐藏\n window.addEventListener('blur', handleBlur)\n\n // 页面展示\n window.addEventListener('focus', handleFocus)\n})\n\nonUnmounted(() => {\n // 页面隐藏\n window.removeEventListener('blur', handleBlur)\n // 页面展示\n window.removeEventListener('focus', handleFocus)\n})\n</script>\n\n<template>\n <div class=\"task-panel\">\n <div class=\"pc-nav\">\n <div class=\"nav\">\n <!-- LOGO -->\n <div class=\"logo\">\n <router-link to=\"/\">\n <img\n style=\"height: 40px; width: 170px\"\n src=\"https://img.cdn.sugarat.top/easypicker/EasyPicker.png\"\n alt=\"logo\"\n >\n </router-link>\n </div>\n <nav>\n <div\n v-for=\"(n, idx) in pcNavs\"\n :key=\"idx\"\n class=\"nav-item\"\n @click=\"handleNav(idx)\"\n >\n {{ n.title }}\n </div>\n </nav>\n </div>\n </div>\n <!-- 有效 -->\n <div\n v-if=\"k\"\n v-loading=\"isLoadingData\"\n element-loading-text=\"Loading...\"\n class=\"panel tc\"\n >\n <!-- 任务名 -->\n <h1 class=\"name\">\n {{ taskInfo.name }}\n </h1>\n <h2 v-if=\"disabledUpload\" style=\"color: red\">\n 任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间\n </h2>\n <!-- 提示信息 -->\n <!-- 时间截止了也不再展示 -->\n <template v-if=\"tipData.text && (ddlStr ? !isOver : true)\">\n <el-divider>⚠️ 注意事项 ⚠️</el-divider>\n <Tip>\n <div class=\"tip-wrapper\">\n <p v-for=\"(t, i) in tipData.text.split('\\n')\" :key=\"i\">\n {{ t.replace(/\\s/g, '&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]}
1
+ {"version":3,"file":"index-fb67TYJ8.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.4.31_typescript@4.9.5_/node_modules/@element-plus/icons-vue/dist/es/upload-filled.mjs","../../src/pages/task/index.vue"],"sourcesContent":["import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"UploadFilled\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M544 864V672h128L512 480 352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.808 239.808 0 0 1 512 192a239.872 239.872 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6H544z\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar uploadFilled = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { uploadFilled as default };\n","<script lang=\"ts\" setup>\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport type { FormInstance, UploadInstance, UploadUserFile } from 'element-plus'\nimport { computed, onMounted, onUnmounted, reactive, ref, watch } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport HomeFooter from '@components/HomeFooter/index.vue'\nimport LinkDialog from '@components/linkDialog.vue'\nimport { UploadFilled } from '@element-plus/icons-vue'\nimport { useStore } from 'vuex'\nimport { useLocalStorage } from '@vueuse/core'\nimport Tip from '../dashboard/tasks/components/infoPanel/tip.vue'\nimport {\n formatDate,\n formatSize,\n getFileMd5Hash,\n getFileSuffix,\n normalizeFileName,\n parseFileFormat,\n parseInfo,\n} from '@/utils/stringUtil'\nimport { downLoadByUrl, qiniuUpload } from '@/utils/networkUtil'\nimport { FileApi, PeopleApi, PublicApi, TaskApi } from '@/apis'\nimport InfosForm from '@/components/InfosForm/index.vue'\nimport { useIsMobile } from '@/composables'\n\nconst isMobile = useIsMobile()\n// 顶部导航\nconst $router = useRouter()\nconst $route = useRoute()\nconst pcNavs = reactive([\n {\n title: '我也要收集',\n path: 'https://docs.ep.sugarat.top/',\n },\n])\nfunction handleNav(idx: number) {\n if (pcNavs[idx].path.startsWith('http')) {\n window.location.href = pcNavs[idx].path\n return\n }\n $router.push({\n path: pcNavs[idx].path,\n })\n}\n\n// 任务基本信息展示\nconst taskInfo = reactive<TaskApiTypes.TaskInfo>({\n name: '',\n category: '',\n})\nconst taskMoreInfo = reactive<Partial<TaskApiTypes.TaskInfo>>({\n bindField: '',\n})\nconst formatData = computed(() => parseFileFormat(taskMoreInfo.format))\nconst k = ref('')\n\n// 用于展示截止日期\nconst waitTime = ref(0)\n// 判断是否结束\nconst isOver = computed(() => waitTime.value <= 0)\nconst waitTimeStr = computed(() => {\n let seconds = ~~(waitTime.value / 1000)\n let hour = ~~(seconds / (60 * 60))\n const day = ~~(hour / 24)\n hour %= 24\n const minute = ~~((seconds % 3600) / 60)\n seconds %= 60\n return `剩余${day}天${hour}时${minute}分${seconds}秒`\n})\nfunction refreshWaitTime(loop = true) {\n if (taskMoreInfo?.ddl) {\n const date = new Date(taskMoreInfo.ddl)\n waitTime.value = date.getTime() - Date.now()\n }\n else {\n waitTime.value = 0\n }\n if (loop) {\n setTimeout(() => {\n refreshWaitTime()\n }, 1000)\n }\n}\nconst ddlStr = computed(() => {\n if (taskMoreInfo?.ddl) {\n const date = new Date(taskMoreInfo.ddl)\n return formatDate(date)\n }\n return ''\n})\n\n// 必填信息\nconst infos = reactive<InfoItem[]>([])\n\n// 文件上传部分\n\n// 文件上传\nconst fileList = ref<(UploadUserFile & { md5: string, subscription: any })[]>(\n [],\n)\nconst fileUpload = ref<UploadInstance>()\nconst disableForm = computed(\n () => fileList.value.filter(item => item.status === 'uploading').length > 0,\n)\nconst handleRemoveFile: any = (file: any) => {\n if (file.status === 'uploading' || file.status === 'success') {\n return ElMessageBox.confirm(\n '不影响已经上传成功的,正在上传的将取消上传',\n '确定从列表移除文件吗?',\n )\n .then(() => {\n if (file.status === 'uploading') {\n ElMessage.info(`取消${file.name}的上传`)\n // 取消上传\n file.subscription.unsubscribe() // 取消上传\n }\n return true\n })\n .catch(() => false)\n }\n return true\n}\n\n// 校验表单填写\nconst isWriteFinish = computed(() => infos.every(item => item.value))\n// 提交文件\n\nconst limitBindField = computed(() => {\n return taskMoreInfo.bindField.trim() || '姓名'\n})\n\n// 身份核验表单\nconst isSameFieldName = computed(() =>\n infos.find(v => v.text === limitBindField.value),\n)\nconst showValidForm = computed(\n () => taskMoreInfo.people && !isSameFieldName.value,\n)\nconst validModal = reactive({\n peopleName: '',\n})\n\nfunction validatePeopleName(rule: any, value: any, callback: any) {\n if (!value) {\n const message = `请输入${limitBindField.value}`\n callback(new Error(message))\n ElMessage.error(message)\n return\n }\n // 异步校验\n PeopleApi.checkPeopleIsExist(k.value, value).then((res) => {\n if (!res.data.exist) {\n ElMessage.error('你不在此次提交名单中,如有疑问请联系管理员')\n }\n callback(\n res.data.exist\n ? undefined\n : new Error('你不在此次提交名单中,如有疑问请联系管理员'),\n )\n })\n}\n\nconst validModalRef = ref<FormInstance>()\nconst validModalRules = reactive({\n peopleName: [{ validator: validatePeopleName, trigger: 'blur' }],\n})\nfunction confirmPeopleName() {\n // 处理表单必填项含有 limitBindField 的情况\n if (isSameFieldName.value) {\n const value = infos.find(v => v.text === limitBindField.value)?.value\n validModal.peopleName = value || ''\n return new Promise((resolve) => {\n validatePeopleName(null, value, resolve)\n }).then(v => !v)\n }\n return validModalRef.value.validate((isValid: boolean) => isValid)\n}\n\nfunction startUpload() {\n const uploadFiles = fileList.value\n for (const file of uploadFiles) {\n if (!file.md5) {\n ElMessage.info(\n `文件(${file.name})的唯一指纹还在计算中,再等待一会儿再点击上传`,\n )\n setTimeout(() => {\n ElMessage.info('文件越大计算时间越长(1G通常需要20s)')\n }, 100)\n }\n else if (file.status === 'ready') {\n // 开始上传\n file.status = 'uploading'\n let { name } = file\n const originName = name\n // 如果开启了自动重命名,这里重命名一下\n if (taskMoreInfo.rewrite) {\n name\n = infos.map(v => v.value).join(formatData.value.splitChar || '-')\n + getFileSuffix(name)\n }\n // 替换不合法的字符\n name = normalizeFileName(name)\n const key = `easypicker2/${k.value}/${file.md5}/${name}`\n\n FileApi.getUploadToken().then((res) => {\n qiniuUpload(res.data.token, file.raw, key, {\n success(data: any) {\n const { fsize } = data\n FileApi.addFile({\n originName,\n name,\n taskKey: k.value,\n taskName: taskInfo.name,\n size: fsize,\n hash: file.md5,\n info: JSON.stringify(infos),\n people: validModal.peopleName,\n }).then(() => {\n file.status = 'success'\n ElMessage.success(`文件:${file.name}提交成功`)\n if (taskMoreInfo.people) {\n // 无感知更新一下\n PeopleApi.updatePeopleStatus(\n k.value,\n name,\n validModal.peopleName,\n file.md5,\n )\n }\n })\n },\n process(per: number, data: any, subscription: any) {\n file.percentage = Math.floor(per)\n // 挂载取消上传的方法\n file.subscription = subscription\n },\n })\n })\n }\n }\n}\n\nasync function submitUpload() {\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写')\n return\n }\n\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n startUpload()\n}\n\n// 是否允许上传\nconst allowUpload = computed(() => {\n for (const file of fileList.value) {\n if (file.status === 'ready') {\n return true\n }\n }\n return false\n})\n\n// 是否允许撤回\nconst allowWithdraw = computed(() => {\n for (const file of fileList.value) {\n if (['success', 'ready'].includes(file.status)) {\n return true\n }\n }\n return false\n})\n\n// 添加文件\n// 正在计算MD5值的文件个数\nconst calculateMd5Count = ref(0)\nfunction handleChangeFile(file: any) {\n // 校验文件后缀名\n const { name } = file\n if (formatData.value.format.length && formatData.value.status) {\n const suffix = getFileSuffix(name)\n if (\n !formatData.value.format.find(v => suffix.toLowerCase().endsWith(v))\n ) {\n ElMessage.error(`${name} 格式不符合要求`)\n fileUpload.value.handleRemove(file)\n return\n }\n }\n\n // 校验文件大小\n if (formatData.value.size && formatData.value.size < file.size) {\n ElMessage.error(`${name} 大小${formatSize(file.size)} 不符合要求`)\n fileUpload.value.handleRemove(file)\n return\n }\n\n calculateMd5Count.value += 1\n // 计算md5 hash\n getFileMd5Hash(file.raw).then((str) => {\n file.md5 = str\n calculateMd5Count.value -= 1\n })\n}\n\nconst limitUploadCount = computed(() => formatData.value.limit || 10)\nfunction handleExceed() {\n ElMessage.warning(\n `一次提交最多只能选择${limitUploadCount.value}个文件,请移除已经上传成功的或刷新页面`,\n )\n}\nconst showLinkModel = ref(false)\nconst templateLink = ref('')\nfunction runWithdraw() {\n const uploadFiles = fileList.value\n for (const file of uploadFiles) {\n if (!file.md5) {\n ElMessage.info(\n `文件(${file.name})的唯一指纹还在计算中,再等待一会儿再点击上传`,\n )\n setTimeout(() => {\n ElMessage.info('文件越大计算时间越长(1G通常需要20s)')\n }, 100)\n }\n else if (!['fail', 'uploading'].includes(file.status)) {\n // 准备开始撤回\n let { name } = file\n\n // 如果开启了自动重命名,这里重命名一下\n if (taskMoreInfo.rewrite) {\n name\n = infos.map(v => v.value).join(formatData.value.splitChar || '-')\n + getFileSuffix(name)\n }\n\n FileApi.withdrawFile({\n taskKey: k.value,\n taskName: taskInfo.name,\n filename: name,\n hash: file.md5,\n info: JSON.stringify(infos),\n peopleName: validModal.peopleName,\n })\n .then(() => {\n ElMessage.success(`文件:${file.name}撤回成功`)\n file.name += ' - (已撤回 ✅ )'\n file.status = 'fail'\n })\n .catch(() => {\n ElMessage.error(`撤回失败: 没有文件:${file.name}对应提交记录`)\n })\n }\n }\n}\nfunction downloadTemplate() {\n FileApi.getTemplateUrl(taskMoreInfo.template, k.value)\n .then((res) => {\n showLinkModel.value = true\n const { link } = res.data\n templateLink.value = link\n downLoadByUrl(link, taskMoreInfo.template)\n })\n .catch(() => {\n ElMessage.warning('文件已从服务器上移除,请联系管理员重新上传')\n })\n}\n\n// 撤回相关逻辑\nconst isWithdraw = ref(false)\nasync function startWithdraw() {\n // 校验表单填写\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写')\n return\n }\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n runWithdraw()\n}\n\n// 查询提交情况\nasync function checkSubmitStatus() {\n // 校验表单填写\n if (!isWriteFinish.value) {\n ElMessage.warning('请先完成必要信息的填写,需和提交时信息完全一致')\n return\n }\n // 卡控人员限制\n if (taskMoreInfo.people) {\n const isValid = await confirmPeopleName()\n if (!isValid) {\n return\n }\n }\n FileApi.checkSubmitStatus(k.value, infos, validModal.peopleName).then(\n (res) => {\n if (res.data.isSubmit) {\n ElMessage.success('已经提交过啦')\n }\n else {\n ElMessage.warning('还未提交过哟')\n }\n },\n )\n}\nconst isLoadingData = ref(false)\nconst readyRefresh = ref(false)\nfunction isEqualInfos(a: InfoItem[] = [], b: InfoItem[] = []) {\n if (a.length !== b.length) {\n return false\n }\n return a.every(\n (v, i) =>\n v.type === b[i].type\n && v.text === b[i].text\n && isEqualInfos(v.children, b[i].children),\n )\n}\nfunction refreshTaskMoreInfo(hot = false) {\n TaskApi.getTaskMoreInfo(k.value).then((res) => {\n Object.assign(taskMoreInfo, res.data)\n if (!isEqualInfos(infos, parseInfo(taskMoreInfo.info))) {\n infos.splice(0, infos.length)\n infos.push(...parseInfo(taskMoreInfo.info))\n if (hot) {\n ElMessage.success('表单信息有更新')\n }\n }\n refreshWaitTime(false)\n isLoadingData.value = false\n })\n}\nfunction handleBlur() {\n readyRefresh.value = true\n}\nfunction handleFocus() {\n if (readyRefresh.value && !disableForm.value) {\n readyRefresh.value = false\n refreshTaskMoreInfo(true)\n }\n}\n\n// 展示的时间提示文案\nconst timeInfo = computed(() => {\n if (!isOver.value) {\n return ddlStr.value + waitTimeStr.value\n }\n return ddlStr.value\n})\n\n// tipImage\nconst tipData = reactive<{\n text: string\n imgs: {\n uid: number\n name: string\n }[]\n}>({\n text: '',\n imgs: [],\n})\nconst imageList = ref<\n { name: string, uid: number, preview?: string, url: string }[]\n>([])\n\nwatch(\n () => taskMoreInfo.tip,\n () => {\n // 初始化\n try {\n const parseData = JSON.parse(taskMoreInfo.tip)\n tipData.imgs = parseData.imgs\n tipData.text = parseData.text || ''\n imageList.value = tipData.imgs.map((v) => {\n return {\n ...v,\n url: 'https://img.cdn.sugarat.top/mdImg/MTY3NzkxMDI1NTU1Nw==20140524124237518.gif',\n }\n })\n if (imageList.value.length) {\n // 异步填充url\n PublicApi.getTipImageUrl(\n k.value,\n imageList.value.map(v => ({\n uid: v.uid,\n name: v.name,\n })),\n ).then((v) => {\n v.data.forEach((url, idx) => {\n imageList.value[idx].url = url.cover\n Object.assign(imageList.value[idx], {\n preview: url.preview,\n })\n })\n })\n }\n }\n catch {\n tipData.text = ''\n tipData.imgs = []\n imageList.value = []\n }\n },\n)\n\n// 禁用上传\nconst disabledUpload = useLocalStorage('disabledUpload', false)\n\nonMounted(() => {\n k.value = $route.params.key as string\n if (k.value) {\n isLoadingData.value = true\n TaskApi.getTaskInfo(k.value)\n .then((res) => {\n Object.assign(taskInfo, res.data)\n disabledUpload.value = !!res.data.limitUpload\n if (disabledUpload.value) {\n ElMessageBox.alert(\n '任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间',\n )\n }\n })\n .catch((err) => {\n if (err.code === 4001) {\n ElMessage.error('任务不存在')\n k.value = ''\n taskInfo.name = '任务不存在'\n }\n })\n refreshTaskMoreInfo()\n refreshWaitTime()\n }\n // 页面隐藏\n window.addEventListener('blur', handleBlur)\n\n // 页面展示\n window.addEventListener('focus', handleFocus)\n})\n\nonUnmounted(() => {\n // 页面隐藏\n window.removeEventListener('blur', handleBlur)\n // 页面展示\n window.removeEventListener('focus', handleFocus)\n})\n</script>\n\n<template>\n <div class=\"task-panel\">\n <div class=\"pc-nav\">\n <div class=\"nav\">\n <!-- LOGO -->\n <div class=\"logo\">\n <router-link to=\"/\">\n <img\n style=\"height: 40px; width: 170px\"\n src=\"https://img.cdn.sugarat.top/easypicker/EasyPicker.png\"\n alt=\"logo\"\n >\n </router-link>\n </div>\n <nav>\n <div\n v-for=\"(n, idx) in pcNavs\"\n :key=\"idx\"\n class=\"nav-item\"\n @click=\"handleNav(idx)\"\n >\n {{ n.title }}\n </div>\n </nav>\n </div>\n </div>\n <!-- 有效 -->\n <div\n v-if=\"k\"\n v-loading=\"isLoadingData\"\n element-loading-text=\"Loading...\"\n class=\"panel tc\"\n >\n <!-- 任务名 -->\n <h1 class=\"name\">\n {{ taskInfo.name }}\n </h1>\n <h2 v-if=\"disabledUpload\" style=\"color: red\">\n 任务存储空间容量已达到上限,已经无法进行上传,请联系发起人扩容空间\n </h2>\n <!-- 提示信息 -->\n <!-- 时间截止了也不再展示 -->\n <template v-if=\"tipData.text && (ddlStr ? !isOver : true)\">\n <el-divider>⚠️ 注意事项 ⚠️</el-divider>\n <Tip>\n <div class=\"tip-wrapper\">\n <p v-for=\"(t, i) in tipData.text.split('\\n')\" :key=\"i\">\n {{ t.replace(/\\s/g, '&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":"o4BAGA,MAAMA,GAAYC,GAAgB,CAChC,KAAM,cACR,CAAC,EACKC,GAAa,CACjB,QAAS,gBACT,MAAO,4BACT,EACMC,GAA6BC,EAAmB,OAAQ,CAC5D,KAAM,eACN,EAAG,sTACL,EAAG,KAAM,EAAE,EACLC,GAAa,CACjBF,EACF,EACA,SAASG,GAAYC,EAAMC,EAAQC,GAAQC,GAAQC,EAAOC,GAAU,CAClE,OAAOC,EAAW,EAAEC,EAAmB,MAAOZ,GAAYG,EAAU,CACtE,CACA,IAAIU,GAA+BC,GAAYhB,GAAW,CAAC,CAAC,SAAUM,EAAW,CAAC,CAAC,+iCCKnF,MAAMW,EAAWC,KAEXC,GAAUC,KACVC,GAASC,KACTC,EAASC,EAAS,CACtB,CACE,MAAO,QACP,KAAM,8BACR,CAAA,CACD,EACD,SAASC,GAAUC,EAAa,CAC9B,GAAIH,EAAOG,CAAG,EAAE,KAAK,WAAW,MAAM,EAAG,CACvC,OAAO,SAAS,KAAOH,EAAOG,CAAG,EAAE,KACnC,MACF,CACAP,GAAQ,KAAK,CACX,KAAMI,EAAOG,CAAG,EAAE,IAAA,CACnB,CACH,CAGA,MAAMC,EAAWH,EAAgC,CAC/C,KAAM,GACN,SAAU,EAAA,CACX,EACKI,EAAeJ,EAAyC,CAC5D,UAAW,EAAA,CACZ,EACKK,EAAaC,EAAS,IAAMC,GAAgBH,EAAa,MAAM,CAAC,EAChEI,EAAIC,EAAI,EAAE,EAGVC,EAAWD,EAAI,CAAC,EAEhBE,EAASL,EAAS,IAAMI,EAAS,OAAS,CAAC,EAC3CE,GAAcN,EAAS,IAAM,CACjC,IAAIO,EAAU,CAAC,EAAEH,EAAS,MAAQ,KAC9BI,EAAO,CAAC,EAAED,GAAW,GAAK,KACxB,MAAAE,EAAM,CAAC,EAAED,EAAO,IACdA,GAAA,GACR,MAAME,EAAS,CAAC,EAAGH,EAAU,KAAQ,IAC1B,OAAAA,GAAA,GACJ,KAAK,OAAAE,EAAG,KAAI,OAAAD,EAAI,KAAI,OAAAE,EAAM,KAAI,OAAAH,EAAO,IAAA,CAC7C,EACQ,SAAAI,EAAgBC,EAAO,GAAM,CACpC,GAAId,GAAA,MAAAA,EAAc,IAAK,CACrB,MAAMe,EAAO,IAAI,KAAKf,EAAa,GAAG,EACtCM,EAAS,MAAQS,EAAK,QAAQ,EAAI,KAAK,KAAI,MAG3CT,EAAS,MAAQ,EAEfQ,GACF,WAAW,IAAM,CACCD,KACf,GAAI,CAEX,CACM,MAAAG,EAASd,EAAS,IAAM,CAC5B,GAAIF,GAAA,MAAAA,EAAc,IAAK,CACrB,MAAMe,EAAO,IAAI,KAAKf,EAAa,GAAG,EACtC,OAAOiB,GAAWF,CAAI,CACxB,CACO,MAAA,EAAA,CACR,EAGKG,EAAQtB,EAAqB,CAAA,CAAE,EAK/BuB,EAAWd,EACf,CAAC,CAAA,EAEGe,EAAaf,IACbgB,EAAcnB,EAClB,IAAMiB,EAAS,MAAM,UAAeG,EAAK,SAAW,WAAW,EAAE,OAAS,CAAA,EAEtEC,GAAyBC,GACzBA,EAAK,SAAW,aAAeA,EAAK,SAAW,UAC1CC,GAAa,QAClB,wBACA,aACF,EACG,KAAK,KACAD,EAAK,SAAW,cAClBE,EAAU,KAAK,KAAK,OAAAF,EAAK,KAAI,MAAK,EAElCA,EAAK,aAAa,eAEb,GACR,EACA,MAAM,IAAM,EAAK,EAEf,GAIHG,EAAgBzB,EAAS,IAAMgB,EAAM,MAAcI,GAAAA,EAAK,KAAK,CAAC,EAG9DM,EAAiB1B,EAAS,IACvBF,EAAa,UAAU,KAAA,GAAU,IACzC,EAGK6B,GAAkB3B,EAAS,IAC/BgB,EAAM,QAAUY,EAAE,OAASF,EAAe,KAAK,CAAA,EAE3CG,GAAgB7B,EACpB,IAAMF,EAAa,QAAU,CAAC6B,GAAgB,KAAA,EAE1CG,EAAapC,EAAS,CAC1B,WAAY,EAAA,CACb,EAEQ,SAAAqC,GAAmBC,EAAWC,EAAYC,EAAe,CAChE,GAAI,CAACD,EAAO,CACJ,MAAAE,EAAU,MAAM,OAAAT,EAAe,OAC5BQ,EAAA,IAAI,MAAMC,CAAO,CAAC,EAC3BX,EAAU,MAAMW,CAAO,EACvB,MACF,CAEAC,GAAU,mBAAmBlC,EAAE,MAAO+B,CAAK,EAAE,KAAMI,GAAQ,CACpDA,EAAI,KAAK,OACZb,EAAU,MAAM,uBAAuB,EAEzCU,EACEG,EAAI,KAAK,MACL,OACA,IAAI,MAAM,uBAAuB,CAAA,CACvC,CACD,CACH,CAEA,MAAMC,GAAgBnC,IAChBoC,GAAkB7C,EAAS,CAC/B,WAAY,CAAC,CAAE,UAAWqC,GAAoB,QAAS,OAAQ,CAAA,CAChE,EACD,SAASS,GAAoB,OAE3B,GAAIb,GAAgB,MAAO,CACnB,MAAAM,GAAQQ,EAAAzB,EAAM,KAAKY,GAAKA,EAAE,OAASF,EAAe,KAAK,IAA/C,YAAAe,EAAkD,MAChE,OAAAX,EAAW,WAAaG,GAAS,GAC1B,IAAI,QAASS,GAAY,CACXX,GAAA,KAAME,EAAOS,CAAO,CACxC,CAAA,EAAE,KAAKd,GAAK,CAACA,CAAC,CACjB,CACA,OAAOU,GAAc,MAAM,SAAUK,GAAqBA,CAAO,CACnE,CAEA,SAASC,IAAc,CACrB,MAAMC,EAAc5B,EAAS,MAC7B,UAAWK,KAAQuB,EACb,GAAA,CAACvB,EAAK,IACEE,EAAA,KACR,MAAM,OAAAF,EAAK,KAAI,0BAAA,EAEjB,WAAW,IAAM,CACfE,EAAU,KAAK,uBAAuB,GACrC,GAAG,UAECF,EAAK,SAAW,QAAS,CAEhCA,EAAK,OAAS,YACV,GAAA,CAAE,KAAAwB,CAAS,EAAAxB,EACf,MAAMyB,EAAaD,EAEfhD,EAAa,UACfgD,EACI9B,EAAM,IAASY,GAAAA,EAAE,KAAK,EAAE,KAAK7B,EAAW,MAAM,WAAa,GAAG,EAC9DiD,GAAcF,CAAI,GAGxBA,EAAOG,GAAkBH,CAAI,EACvB,MAAAI,GAAM,eAAe,OAAAhD,EAAE,MAAK,KAAI,OAAAoB,EAAK,IAAG,KAAI,OAAAwB,GAElDK,EAAQ,eAAe,EAAE,KAAMd,GAAQ,CACrCe,GAAYf,EAAI,KAAK,MAAOf,EAAK,IAAK4B,GAAK,CACzC,QAAQG,EAAW,CACX,KAAA,CAAE,MAAAC,CAAU,EAAAD,EAClBF,EAAQ,QAAQ,CACd,WAAAJ,EACA,KAAAD,EACA,QAAS5C,EAAE,MACX,SAAUL,EAAS,KACnB,KAAMyD,EACN,KAAMhC,EAAK,IACX,KAAM,KAAK,UAAUN,CAAK,EAC1B,OAAQc,EAAW,UAAA,CACpB,EAAE,KAAK,IAAM,CACZR,EAAK,OAAS,UACdE,EAAU,QAAQ,MAAM,OAAAF,EAAK,KAAI,OAAM,EACnCxB,EAAa,QAELsC,GAAA,mBACRlC,EAAE,MACF4C,EACAhB,EAAW,WACXR,EAAK,GAAA,CAET,CACD,CACH,EACA,QAAQiC,EAAaF,EAAWG,GAAmB,CAC5ClC,EAAA,WAAa,KAAK,MAAMiC,CAAG,EAEhCjC,EAAK,aAAekC,EACtB,CAAA,CACD,CAAA,CACF,CACH,CAEJ,CAEA,eAAeC,IAAe,CACxB,GAAA,CAAChC,EAAc,MAAO,CACxBD,EAAU,QAAQ,aAAa,EAC/B,MACF,CAEI1B,EAAa,QAEX,CADY,MAAM0C,KAKZI,IACd,CAGM,MAAAc,GAAc1D,EAAS,IAAM,CACtB,UAAAsB,KAAQL,EAAS,MACtB,GAAAK,EAAK,SAAW,QACX,MAAA,GAGJ,MAAA,EAAA,CACR,EAGKqC,GAAgB3D,EAAS,IAAM,CACxB,UAAAsB,KAAQL,EAAS,MAC1B,GAAI,CAAC,UAAW,OAAO,EAAE,SAASK,EAAK,MAAM,EACpC,MAAA,GAGJ,MAAA,EAAA,CACR,EAIKsC,EAAoBzD,EAAI,CAAC,EAC/B,SAAS0D,GAAiBvC,EAAW,CAE7B,KAAA,CAAE,KAAAwB,CAAS,EAAAxB,EACjB,GAAIvB,EAAW,MAAM,OAAO,QAAUA,EAAW,MAAM,OAAQ,CACvD,MAAA+D,EAASd,GAAcF,CAAI,EACjC,GACE,CAAC/C,EAAW,MAAM,OAAO,KAAK6B,GAAKkC,EAAO,YAAc,EAAA,SAASlC,CAAC,CAAC,EACnE,CACUJ,EAAA,MAAM,GAAG,OAAAsB,EAAI,WAAU,EACtB5B,EAAA,MAAM,aAAaI,CAAI,EAClC,MACF,CACF,CAGA,GAAIvB,EAAW,MAAM,MAAQA,EAAW,MAAM,KAAOuB,EAAK,KAAM,CACpDE,EAAA,MAAM,GAAG,OAAAsB,EAAI,OAAM,OAAAiB,GAAWzC,EAAK,IAAI,EAAC,SAAQ,EAC/CJ,EAAA,MAAM,aAAaI,CAAI,EAClC,MACF,CAEAsC,EAAkB,OAAS,EAE3BI,GAAe1C,EAAK,GAAG,EAAE,KAAM2C,GAAQ,CACrC3C,EAAK,IAAM2C,EACXL,EAAkB,OAAS,CAAA,CAC5B,CACH,CAEA,MAAMM,GAAmBlE,EAAS,IAAMD,EAAW,MAAM,OAAS,EAAE,EACpE,SAASoE,IAAe,CACZ3C,EAAA,QACR,aAAa,OAAA0C,GAAiB,MAAK,sBAAA,CAEvC,CACM,MAAAE,EAAgBjE,EAAI,EAAK,EACzBkE,GAAelE,EAAI,EAAE,EAC3B,SAASmE,IAAc,CACrB,MAAMzB,EAAc5B,EAAS,MAC7B,UAAWK,KAAQuB,EACb,GAAA,CAACvB,EAAK,IACEE,EAAA,KACR,MAAM,OAAAF,EAAK,KAAI,0BAAA,EAEjB,WAAW,IAAM,CACfE,EAAU,KAAK,uBAAuB,GACrC,GAAG,UAEC,CAAC,CAAC,OAAQ,WAAW,EAAE,SAASF,EAAK,MAAM,EAAG,CAEjD,GAAA,CAAE,KAAAwB,CAAS,EAAAxB,EAGXxB,EAAa,UACfgD,EACI9B,EAAM,IAASY,GAAAA,EAAE,KAAK,EAAE,KAAK7B,EAAW,MAAM,WAAa,GAAG,EAC9DiD,GAAcF,CAAI,GAGxBK,EAAQ,aAAa,CACnB,QAASjD,EAAE,MACX,SAAUL,EAAS,KACnB,SAAUiD,EACV,KAAMxB,EAAK,IACX,KAAM,KAAK,UAAUN,CAAK,EAC1B,WAAYc,EAAW,UAAA,CACxB,EACE,KAAK,IAAM,CACVN,EAAU,QAAQ,MAAM,OAAAF,EAAK,KAAI,OAAM,EACvCA,EAAK,MAAQ,cACbA,EAAK,OAAS,MAAA,CACf,EACA,MAAM,IAAM,CACXE,EAAU,MAAM,cAAc,OAAAF,EAAK,KAAI,SAAQ,CAAA,CAChD,CACL,CAEJ,CACA,SAASiD,IAAmB,CAClBpB,EAAA,eAAerD,EAAa,SAAUI,EAAE,KAAK,EAClD,KAAMmC,GAAQ,CACb+B,EAAc,MAAQ,GAChB,KAAA,CAAE,KAAAI,CAAK,EAAInC,EAAI,KACrBgC,GAAa,MAAQG,EACPC,GAAAD,EAAM1E,EAAa,QAAQ,CAAA,CAC1C,EACA,MAAM,IAAM,CACX0B,EAAU,QAAQ,uBAAuB,CAAA,CAC1C,CACL,CAGM,MAAAkD,EAAavE,EAAI,EAAK,EAC5B,eAAewE,IAAgB,CAEzB,GAAA,CAAClD,EAAc,MAAO,CACxBD,EAAU,QAAQ,aAAa,EAC/B,MACF,CACI1B,EAAa,QAEX,CADY,MAAM0C,KAKZ8B,IACd,CAGA,eAAeM,IAAoB,CAE7B,GAAA,CAACnD,EAAc,MAAO,CACxBD,EAAU,QAAQ,yBAAyB,EAC3C,MACF,CAEI1B,EAAa,QAEX,CADY,MAAM0C,KAKxBW,EAAQ,kBAAkBjD,EAAE,MAAOc,EAAOc,EAAW,UAAU,EAAE,KAC9DO,GAAQ,CACHA,EAAI,KAAK,SACXb,EAAU,QAAQ,QAAQ,EAG1BA,EAAU,QAAQ,QAAQ,CAE9B,CAAA,CAEJ,CACM,MAAAqD,EAAgB1E,EAAI,EAAK,EACzB2E,GAAe3E,EAAI,EAAK,EAC9B,SAAS4E,GAAaC,EAAgB,GAAIC,EAAgB,CAAA,EAAI,CACxD,OAAAD,EAAE,SAAWC,EAAE,OACV,GAEFD,EAAE,MACP,CAACpD,EAAG,IACFA,EAAE,OAASqD,EAAE,CAAC,EAAE,MACbrD,EAAE,OAASqD,EAAE,CAAC,EAAE,MAChBF,GAAanD,EAAE,SAAUqD,EAAE,CAAC,EAAE,QAAQ,CAAA,CAE/C,CACS,SAAAC,GAAoBC,EAAM,GAAO,CACxCC,GAAQ,gBAAgBlF,EAAE,KAAK,EAAE,KAAMmC,GAAQ,CACtC,OAAA,OAAOvC,EAAcuC,EAAI,IAAI,EAC/B0C,GAAa/D,EAAOqE,GAAUvF,EAAa,IAAI,CAAC,IAC7CkB,EAAA,OAAO,EAAGA,EAAM,MAAM,EAC5BA,EAAM,KAAK,GAAGqE,GAAUvF,EAAa,IAAI,CAAC,EACtCqF,GACF3D,EAAU,QAAQ,SAAS,GAG/Bb,EAAgB,EAAK,EACrBkE,EAAc,MAAQ,EAAA,CACvB,CACH,CACA,SAASS,IAAa,CACpBR,GAAa,MAAQ,EACvB,CACA,SAASS,IAAc,CACjBT,GAAa,OAAS,CAAC3D,EAAY,QACrC2D,GAAa,MAAQ,GACrBI,GAAoB,EAAI,EAE5B,CAGM,MAAAM,GAAWxF,EAAS,IACnBK,EAAO,MAGLS,EAAO,MAFLA,EAAO,MAAQR,GAAY,KAGrC,EAGKmF,EAAU/F,EAMb,CACD,KAAM,GACN,KAAM,CAAC,CAAA,CACR,EACKgG,EAAYvF,EAEhB,CAAA,CAAE,EAEJwF,GACE,IAAM7F,EAAa,IACnB,IAAM,CAEA,GAAA,CACF,MAAM8F,EAAY,KAAK,MAAM9F,EAAa,GAAG,EAC7C2F,EAAQ,KAAOG,EAAU,KACjBH,EAAA,KAAOG,EAAU,MAAQ,GACjCF,EAAU,MAAQD,EAAQ,KAAK,IAAK7D,IAC3B,CACL,GAAGA,EACH,IAAK,6EAAA,EAER,EACG8D,EAAU,MAAM,QAERG,GAAA,eACR3F,EAAE,MACFwF,EAAU,MAAM,IAAU9D,IAAA,CACxB,IAAKA,EAAE,IACP,KAAMA,EAAE,IAAA,EACR,CAAA,EACF,KAAMA,GAAM,CACZA,EAAE,KAAK,QAAQ,CAACkE,EAAKlG,IAAQ,CAC3B8F,EAAU,MAAM9F,CAAG,EAAE,IAAMkG,EAAI,MAC/B,OAAO,OAAOJ,EAAU,MAAM9F,CAAG,EAAG,CAClC,QAASkG,EAAI,OAAA,CACd,CAAA,CACF,CAAA,CACF,CACH,OAEIC,EAAA,CACJN,EAAQ,KAAO,GACfA,EAAQ,KAAO,GACfC,EAAU,MAAQ,EACpB,CACF,CAAA,EAII,MAAAM,EAAiBC,GAAgB,iBAAkB,EAAK,EAE9D,OAAAC,GAAU,IAAM,CACZhG,EAAA,MAAQX,GAAO,OAAO,IACpBW,EAAE,QACJ2E,EAAc,MAAQ,GACtBO,GAAQ,YAAYlF,EAAE,KAAK,EACxB,KAAMmC,GAAQ,CACN,OAAA,OAAOxC,EAAUwC,EAAI,IAAI,EAChC2D,EAAe,MAAQ,CAAC,CAAC3D,EAAI,KAAK,YAC9B2D,EAAe,OACJzE,GAAA,MACX,mCAAA,CAEJ,CACD,EACA,MAAO4E,GAAQ,CACVA,EAAI,OAAS,OACf3E,EAAU,MAAM,OAAO,EACvBtB,EAAE,MAAQ,GACVL,EAAS,KAAO,QAClB,CACD,EACiBqF,KACJvE,KAGX,OAAA,iBAAiB,OAAQ2E,EAAU,EAGnC,OAAA,iBAAiB,QAASC,EAAW,CAAA,CAC7C,EAEDa,GAAY,IAAM,CAET,OAAA,oBAAoB,OAAQd,EAAU,EAEtC,OAAA,oBAAoB,QAASC,EAAW,CAAA,CAChD","x_google_ignoreList":[0]}