@sugarat/easypicker2-client 2.5.0 → 2.6.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/assets/{data-analysis-13490516.js → data-analysis-632af70e.js} +2 -2
  2. package/dist/assets/{data-analysis-13490516.js.map → data-analysis-632af70e.js.map} +1 -1
  3. package/dist/assets/{data-analysis-legacy.f8612e65.js → data-analysis-legacy.297ff95d.js} +2 -2
  4. package/dist/assets/{data-board-229a3bf5.js → data-board-4290cade.js} +2 -2
  5. package/dist/assets/{data-board-229a3bf5.js.map → data-board-4290cade.js.map} +1 -1
  6. package/dist/assets/{data-board-legacy.a60c4519.js → data-board-legacy.b3bf2f61.js} +2 -2
  7. package/dist/assets/{el-date-picker-5a3e3d86.js → el-date-picker-b3398f8f.js} +2 -2
  8. package/dist/assets/{el-date-picker-5a3e3d86.js.map → el-date-picker-b3398f8f.js.map} +1 -1
  9. package/dist/assets/{el-date-picker-legacy.6d67764b.js → el-date-picker-legacy.fd044c30.js} +2 -2
  10. package/dist/assets/{el-dialog-463960e0.js → el-dialog-c11c4af2.js} +2 -2
  11. package/dist/assets/{el-dialog-463960e0.js.map → el-dialog-c11c4af2.js.map} +1 -1
  12. package/dist/assets/{el-dialog-legacy.0bcf48a4.js → el-dialog-legacy.d2229175.js} +2 -2
  13. package/dist/assets/{el-dropdown-item-7c33f4fa.js → el-dropdown-item-3eb29c67.js} +2 -2
  14. package/dist/assets/{el-dropdown-item-7c33f4fa.js.map → el-dropdown-item-3eb29c67.js.map} +1 -1
  15. package/dist/assets/{el-dropdown-item-legacy.8625546e.js → el-dropdown-item-legacy.60575f42.js} +2 -2
  16. package/dist/assets/{el-form-item-f40006bf.js → el-form-item-fb230be3.js} +2 -2
  17. package/dist/assets/{el-form-item-f40006bf.js.map → el-form-item-fb230be3.js.map} +1 -1
  18. package/dist/assets/{el-form-item-legacy.d28db5d0.js → el-form-item-legacy.237ed4b6.js} +2 -2
  19. package/dist/assets/{el-loading-5d91bb6c.js → el-loading-e9365e7e.js} +2 -2
  20. package/dist/assets/{el-loading-5d91bb6c.js.map → el-loading-e9365e7e.js.map} +1 -1
  21. package/dist/assets/{el-loading-legacy.0f35210f.js → el-loading-legacy.8045609e.js} +2 -2
  22. package/dist/assets/{el-pagination-ffb99240.js → el-pagination-85149e11.js} +2 -2
  23. package/dist/assets/{el-pagination-ffb99240.js.map → el-pagination-85149e11.js.map} +1 -1
  24. package/dist/assets/{el-pagination-legacy.25b54e8d.js → el-pagination-legacy.02ed0149.js} +2 -2
  25. package/dist/assets/{el-progress-2fff98be.js → el-progress-b98becda.js} +2 -2
  26. package/dist/assets/{el-progress-2fff98be.js.map → el-progress-b98becda.js.map} +1 -1
  27. package/dist/assets/{el-progress-legacy.db8b5855.js → el-progress-legacy.1165db46.js} +2 -2
  28. package/dist/assets/{el-select-7d894fd0.js → el-select-2a16e5df.js} +2 -2
  29. package/dist/assets/{el-select-7d894fd0.js.map → el-select-2a16e5df.js.map} +1 -1
  30. package/dist/assets/{el-select-legacy.ad6ded5a.js → el-select-legacy.5ccdd9a4.js} +2 -2
  31. package/dist/assets/{el-switch-2eda0412.js → el-switch-abdd5a33.js} +2 -2
  32. package/dist/assets/{el-switch-2eda0412.js.map → el-switch-abdd5a33.js.map} +1 -1
  33. package/dist/assets/{el-switch-legacy.e17e7919.js → el-switch-legacy.96786863.js} +2 -2
  34. package/dist/assets/{el-tab-pane-b3156067.js → el-tab-pane-db271c8d.js} +2 -2
  35. package/dist/assets/{el-tab-pane-b3156067.js.map → el-tab-pane-db271c8d.js.map} +1 -1
  36. package/dist/assets/{el-tab-pane-legacy.2cf21031.js → el-tab-pane-legacy.143cbc33.js} +2 -2
  37. package/dist/assets/{el-table-column-22352e92.js → el-table-column-19feeab8.js} +2 -2
  38. package/dist/assets/{el-table-column-22352e92.js.map → el-table-column-19feeab8.js.map} +1 -1
  39. package/dist/assets/{el-table-column-legacy.fd665e2a.js → el-table-column-legacy.afba06f3.js} +2 -2
  40. package/dist/assets/{index-5f3a9ae0.css → index-0f83ff96.css} +1 -1
  41. package/dist/assets/{index-c61deab7.js → index-0fbe23b2.js} +2 -2
  42. package/dist/assets/index-0fbe23b2.js.map +1 -0
  43. package/dist/assets/{index-b3774417.js → index-14d600a5.js} +2 -2
  44. package/dist/assets/{index-b3774417.js.map → index-14d600a5.js.map} +1 -1
  45. package/dist/assets/index-1639ad54.js +15 -0
  46. package/dist/assets/index-1639ad54.js.map +1 -0
  47. package/dist/assets/{index-afb7d164.js → index-16b096cf.js} +2 -2
  48. package/dist/assets/{index-afb7d164.js.map → index-16b096cf.js.map} +1 -1
  49. package/dist/assets/{index-bc1a6d96.js → index-1bd2cd2e.js} +2 -2
  50. package/dist/assets/{index-bc1a6d96.js.map → index-1bd2cd2e.js.map} +1 -1
  51. package/dist/assets/{index-ca90e8da.js → index-2c76567d.js} +2 -2
  52. package/dist/assets/{index-ca90e8da.js.map → index-2c76567d.js.map} +1 -1
  53. package/dist/assets/{index-b0a4c236.js → index-43d1d27e.js} +2 -2
  54. package/dist/assets/{index-b0a4c236.js.map → index-43d1d27e.js.map} +1 -1
  55. package/dist/assets/{index-f47a54b0.js → index-488b0f9e.js} +2 -2
  56. package/dist/assets/{index-f47a54b0.js.map → index-488b0f9e.js.map} +1 -1
  57. package/dist/assets/{index-75b8c91c.js → index-4b1f55ea.js} +2 -2
  58. package/dist/assets/{index-75b8c91c.js.map → index-4b1f55ea.js.map} +1 -1
  59. package/dist/assets/{index-c840d3aa.js → index-51740dfd.js} +2 -2
  60. package/dist/assets/{index-c840d3aa.js.map → index-51740dfd.js.map} +1 -1
  61. package/dist/assets/{index-98964915.js → index-5281fad0.js} +2 -2
  62. package/dist/assets/{index-98964915.js.map → index-5281fad0.js.map} +1 -1
  63. package/dist/assets/{index-6d7ac779.js → index-68448dbd.js} +2 -2
  64. package/dist/assets/{index-6d7ac779.js.map → index-68448dbd.js.map} +1 -1
  65. package/dist/assets/{index-34bd5929.js → index-74330c06.js} +2 -2
  66. package/dist/assets/{index-34bd5929.js.map → index-74330c06.js.map} +1 -1
  67. package/dist/assets/{index-d32645f3.js → index-78a8b3c7.js} +2 -2
  68. package/dist/assets/{index-d32645f3.js.map → index-78a8b3c7.js.map} +1 -1
  69. package/dist/assets/{index-f6ffb548.js → index-9e6a9bcf.js} +2 -2
  70. package/dist/assets/{index-f6ffb548.js.map → index-9e6a9bcf.js.map} +1 -1
  71. package/dist/assets/{index-c3a1cd43.js → index-ac06071b.js} +2 -2
  72. package/dist/assets/{index-c3a1cd43.js.map → index-ac06071b.js.map} +1 -1
  73. package/dist/assets/{index-8eff6b5a.js → index-adc1b681.js} +2 -2
  74. package/dist/assets/{index-8eff6b5a.js.map → index-adc1b681.js.map} +1 -1
  75. package/dist/assets/{index-17fa8fb7.js → index-b8357360.js} +2 -2
  76. package/dist/assets/{index-17fa8fb7.js.map → index-b8357360.js.map} +1 -1
  77. package/dist/assets/{index-f298d979.js → index-d09329eb.js} +2 -2
  78. package/dist/assets/{index-f298d979.js.map → index-d09329eb.js.map} +1 -1
  79. package/dist/assets/{index-6f4c911e.js → index-f74b7eb6.js} +2 -2
  80. package/dist/assets/{index-6f4c911e.js.map → index-f74b7eb6.js.map} +1 -1
  81. package/dist/assets/{index-legacy.08663170.js → index-legacy.082ccf5b.js} +2 -2
  82. package/dist/assets/{index-legacy.5d174bde.js → index-legacy.12de1889.js} +2 -2
  83. package/dist/assets/{index-legacy.9dc57803.js → index-legacy.1796b3ef.js} +2 -2
  84. package/dist/assets/{index-legacy.1540c5bc.js → index-legacy.227978b5.js} +2 -2
  85. package/dist/assets/{index-legacy.e6994f0a.js → index-legacy.296716c3.js} +2 -2
  86. package/dist/assets/{index-legacy.e7464d3c.js → index-legacy.36482c14.js} +2 -2
  87. package/dist/assets/{index-legacy.9c4986d3.js → index-legacy.41d8801d.js} +2 -2
  88. package/dist/assets/{index-legacy.7dae3131.js → index-legacy.4b2923ee.js} +2 -2
  89. package/dist/assets/{index-legacy.1f2405e5.js → index-legacy.4c1d6eb3.js} +2 -2
  90. package/dist/assets/{index-legacy.bd5a4368.js → index-legacy.7a041259.js} +2 -2
  91. package/dist/assets/{index-legacy.45ec3501.js → index-legacy.820f4ba0.js} +2 -2
  92. package/dist/assets/{index-legacy.51740a44.js → index-legacy.8311ba4a.js} +2 -2
  93. package/dist/assets/index-legacy.9eb93981.js +18 -0
  94. package/dist/assets/{index-legacy.4f956884.js → index-legacy.a19ed25e.js} +2 -2
  95. package/dist/assets/{index-legacy.01d9320a.js → index-legacy.b8de0bf4.js} +2 -2
  96. package/dist/assets/{index-legacy.6c7021b3.js → index-legacy.e932a3d4.js} +2 -2
  97. package/dist/assets/{index-legacy.d32480a5.js → index-legacy.e96fb189.js} +2 -2
  98. package/dist/assets/{index-legacy.9f65dcb9.js → index-legacy.ec490514.js} +2 -2
  99. package/dist/assets/{index-legacy.189f20a8.js → index-legacy.ed2883a1.js} +2 -2
  100. package/dist/assets/{index-legacy.d9854cf5.js → index-legacy.f16524a6.js} +2 -2
  101. package/dist/assets/{isEqual-9c466456.js → isEqual-95d6c129.js} +2 -2
  102. package/dist/assets/{isEqual-9c466456.js.map → isEqual-95d6c129.js.map} +1 -1
  103. package/dist/assets/{isEqual-legacy.985bb619.js → isEqual-legacy.83836994.js} +2 -2
  104. package/dist/assets/{refresh-6ae903c0.js → refresh-be31af7a.js} +2 -2
  105. package/dist/assets/{refresh-6ae903c0.js.map → refresh-be31af7a.js.map} +1 -1
  106. package/dist/assets/{refresh-legacy.8092415a.js → refresh-legacy.600c5af4.js} +2 -2
  107. package/dist/assets/{tip-00ddf749.js → tip-822b05b7.js} +2 -2
  108. package/dist/assets/{tip-00ddf749.js.map → tip-822b05b7.js.map} +1 -1
  109. package/dist/assets/{tip-legacy.6e921091.js → tip-legacy.b6d754fd.js} +2 -2
  110. package/dist/assets/validator-5c60ab85.js +2 -0
  111. package/dist/assets/{validator-853854a1.js.map → validator-5c60ab85.js.map} +1 -1
  112. package/dist/assets/validator-legacy.86b93c0e.js +2 -0
  113. package/dist/index.html +3 -3
  114. package/package.json +5 -3
  115. package/dist/assets/index-62c7029f.js +0 -15
  116. package/dist/assets/index-62c7029f.js.map +0 -1
  117. package/dist/assets/index-c61deab7.js.map +0 -1
  118. package/dist/assets/index-legacy.978f90e1.js +0 -18
  119. package/dist/assets/validator-853854a1.js +0 -2
  120. package/dist/assets/validator-legacy.b34dfdfa.js +0 -2
@@ -1,2 +1,2 @@
1
- import{g as U,d as $,f as b,c as k,a as o,r as u,h as A,u as M,i as S,j as a,w as d,l as q,k as m,m as H,b as h,t as N,n as g,q as V,E as n,P as I,U as j,s as F,v as L,x as R,y as G,z as J,A as K,_ as O}from"./index-62c7029f.js";const Q=$({name:"ChatDotSquare"}),W={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},X=o("path",{fill:"currentColor",d:"M273.536 736H800a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64H224a64 64 0 0 0-64 64v570.88L273.536 736zM296 800 147.968 918.4A32 32 0 0 1 96 893.44V256a128 128 0 0 1 128-128h576a128 128 0 0 1 128 128v416a128 128 0 0 1-128 128H296z"},null,-1),Y=o("path",{fill:"currentColor",d:"M512 499.2a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm192 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm-384 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4z"},null,-1),Z=[X,Y];function ee(C,s,i,r,p,x){return b(),k("svg",W,Z)}var te=U(Q,[["render",ee]]);const ae={class:"login"},oe={class:"inputArea"},ne={class:"tc"},se={class:"links"},le=$({__name:"index",setup(C){const s=u(""),i=u(""),r=u(""),p=u(""),x=A(),y=M(),D=()=>{y.replace({name:"dashboard"})},T=()=>V.test(s.value)?J.test(r.value)?r.value!==p.value?(n.warning("两次输入的密码不一致"),!1):K.test(i.value)?!0:(n.warning("验证码不正确(4位 数字)"),!1):(n.warning("密码格式不正确(6-16位 支持字母/数字/下划线)"),!1):(n.warning("手机号格式不正确"),!1),f=u("获取验证码"),c=u(0),w=()=>{if(c.value===0){f.value="获取验证码";return}f.value="".concat(c.value,"s"),c.value-=1,setTimeout(w,1e3)},z=()=>{if(!V.test(s.value)){n.warning("手机号格式不正确");return}I.getCode(s.value).then(()=>{c.value=120,w(),n.success("获取成功,请注意查看手机短信")})},B=()=>{T()&&j.resetPwd(s.value,i.value,r.value).then(_=>{n.success("密码重置成功");const{token:e}=_.data;x.commit("user/setToken",e),D()}).catch(_=>{const{code:e,data:t}=_,v={1008:"该手机号未绑定任何账号",1003:"验证码不正确",1004:"密码格式不正确",1010:"账号已被封禁,有疑问请联系管理员",1009:"账号已被冻结,解冻时间".concat((t==null?void 0:t.openTime)&&F(new Date(t.openTime)))};n.error(v[e]||"重置失败,未知错误")})};return(_,e)=>{const t=L,v=R,E=G,P=S("router-link");return b(),k("div",ae,[a(q,null,{default:d(()=>[o("div",oe,[o("div",null,[a(t,{maxlength:"11",placeholder:"手机号","prefix-icon":m(H),modelValue:s.value,"onUpdate:modelValue":e[0]||(e[0]=l=>s.value=l),clearable:""},null,8,["prefix-icon","modelValue"])]),o("div",null,[a(t,{maxlength:"4",type:"number",placeholder:"请输入验证码","prefix-icon":m(te),modelValue:i.value,"onUpdate:modelValue":e[1]||(e[1]=l=>i.value=l),clearable:""},{append:d(()=>[a(v,{disabled:c.value!==0,onClick:z},{default:d(()=>[h(N(f.value),1)]),_:1},8,["disabled"])]),_:1},8,["prefix-icon","modelValue"])]),o("div",null,[a(t,{maxlength:"16",minlength:"6",type:"password",placeholder:"请输入新密码","prefix-icon":m(g),modelValue:r.value,"onUpdate:modelValue":e[2]||(e[2]=l=>r.value=l),"show-password":"",clearable:""},null,8,["prefix-icon","modelValue"])]),o("div",null,[a(t,{maxlength:"16",minlength:"6",type:"password",placeholder:"请再次输入新密码","prefix-icon":m(g),modelValue:p.value,"onUpdate:modelValue":e[3]||(e[3]=l=>p.value=l),"show-password":"",clearable:""},null,8,["prefix-icon","modelValue"])]),o("div",ne,[a(v,{onClick:B,type:"primary",class:"fw-w100"},{default:d(()=>[h("确认重置")]),_:1})]),a(E),o("div",se,[a(P,{to:"/login"},{default:d(()=>[h("去登陆")]),_:1})])])]),_:1})])}}});const ue=O(le,[["__scopeId","data-v-4e645608"]]);export{ue as default};
2
- //# sourceMappingURL=index-ca90e8da.js.map
1
+ import{g as U,d as $,f as b,c as k,a as o,r as u,h as A,u as M,i as S,j as a,w as d,l as q,k as m,m as H,b as h,t as N,n as g,q as V,E as n,P as I,U as j,s as F,v as L,x as R,y as G,z as J,A as K,_ as O}from"./index-1639ad54.js";const Q=$({name:"ChatDotSquare"}),W={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},X=o("path",{fill:"currentColor",d:"M273.536 736H800a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64H224a64 64 0 0 0-64 64v570.88L273.536 736zM296 800 147.968 918.4A32 32 0 0 1 96 893.44V256a128 128 0 0 1 128-128h576a128 128 0 0 1 128 128v416a128 128 0 0 1-128 128H296z"},null,-1),Y=o("path",{fill:"currentColor",d:"M512 499.2a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm192 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm-384 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4z"},null,-1),Z=[X,Y];function ee(C,s,i,r,p,x){return b(),k("svg",W,Z)}var te=U(Q,[["render",ee]]);const ae={class:"login"},oe={class:"inputArea"},ne={class:"tc"},se={class:"links"},le=$({__name:"index",setup(C){const s=u(""),i=u(""),r=u(""),p=u(""),x=A(),y=M(),D=()=>{y.replace({name:"dashboard"})},T=()=>V.test(s.value)?J.test(r.value)?r.value!==p.value?(n.warning("两次输入的密码不一致"),!1):K.test(i.value)?!0:(n.warning("验证码不正确(4位 数字)"),!1):(n.warning("密码格式不正确(6-16位 支持字母/数字/下划线)"),!1):(n.warning("手机号格式不正确"),!1),f=u("获取验证码"),c=u(0),w=()=>{if(c.value===0){f.value="获取验证码";return}f.value="".concat(c.value,"s"),c.value-=1,setTimeout(w,1e3)},z=()=>{if(!V.test(s.value)){n.warning("手机号格式不正确");return}I.getCode(s.value).then(()=>{c.value=120,w(),n.success("获取成功,请注意查看手机短信")})},B=()=>{T()&&j.resetPwd(s.value,i.value,r.value).then(_=>{n.success("密码重置成功");const{token:e}=_.data;x.commit("user/setToken",e),D()}).catch(_=>{const{code:e,data:t}=_,v={1008:"该手机号未绑定任何账号",1003:"验证码不正确",1004:"密码格式不正确",1010:"账号已被封禁,有疑问请联系管理员",1009:"账号已被冻结,解冻时间".concat((t==null?void 0:t.openTime)&&F(new Date(t.openTime)))};n.error(v[e]||"重置失败,未知错误")})};return(_,e)=>{const t=L,v=R,E=G,P=S("router-link");return b(),k("div",ae,[a(q,null,{default:d(()=>[o("div",oe,[o("div",null,[a(t,{maxlength:"11",placeholder:"手机号","prefix-icon":m(H),modelValue:s.value,"onUpdate:modelValue":e[0]||(e[0]=l=>s.value=l),clearable:""},null,8,["prefix-icon","modelValue"])]),o("div",null,[a(t,{maxlength:"4",type:"number",placeholder:"请输入验证码","prefix-icon":m(te),modelValue:i.value,"onUpdate:modelValue":e[1]||(e[1]=l=>i.value=l),clearable:""},{append:d(()=>[a(v,{disabled:c.value!==0,onClick:z},{default:d(()=>[h(N(f.value),1)]),_:1},8,["disabled"])]),_:1},8,["prefix-icon","modelValue"])]),o("div",null,[a(t,{maxlength:"16",minlength:"6",type:"password",placeholder:"请输入新密码","prefix-icon":m(g),modelValue:r.value,"onUpdate:modelValue":e[2]||(e[2]=l=>r.value=l),"show-password":"",clearable:""},null,8,["prefix-icon","modelValue"])]),o("div",null,[a(t,{maxlength:"16",minlength:"6",type:"password",placeholder:"请再次输入新密码","prefix-icon":m(g),modelValue:p.value,"onUpdate:modelValue":e[3]||(e[3]=l=>p.value=l),"show-password":"",clearable:""},null,8,["prefix-icon","modelValue"])]),o("div",ne,[a(v,{onClick:B,type:"primary",class:"fw-w100"},{default:d(()=>[h("确认重置")]),_:1})]),a(E),o("div",se,[a(P,{to:"/login"},{default:d(()=>[h("去登陆")]),_:1})])])]),_:1})])}}});const ue=O(le,[["__scopeId","data-v-4e645608"]]);export{ue as default};
2
+ //# sourceMappingURL=index-2c76567d.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-ca90e8da.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.3.4/node_modules/@element-plus/icons-vue/dist/es/chat-dot-square.mjs","../../src/pages/reset/index.vue"],"sourcesContent":["import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"ChatDotSquare\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M273.536 736H800a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64H224a64 64 0 0 0-64 64v570.88L273.536 736zM296 800 147.968 918.4A32 32 0 0 1 96 893.44V256a128 128 0 0 1 128-128h576a128 128 0 0 1 128 128v416a128 128 0 0 1-128 128H296z\"\n}, null, -1);\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M512 499.2a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm192 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm-384 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4z\"\n}, null, -1);\nconst _hoisted_4 = [\n _hoisted_2,\n _hoisted_3\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_4);\n}\nvar chatDotSquare = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { chatDotSquare as default };\n","<template>\n <div class=\"login\">\n <login-panel>\n <!-- 表单输入区域 -->\n <div class=\"inputArea\">\n <div>\n <el-input\n maxlength=\"11\"\n placeholder=\"手机号\"\n :prefix-icon=\"Phone\"\n v-model=\"account\"\n clearable\n ></el-input>\n </div>\n <div>\n <el-input\n maxlength=\"4\"\n type=\"number\"\n placeholder=\"请输入验证码\"\n :prefix-icon=\"ChatDotSquare\"\n v-model=\"code\"\n clearable\n >\n <template #append>\n <!-- 获取验证码 -->\n <el-button :disabled=\"time !== 0\" @click=\"getCode\">{{ codeText }}</el-button>\n </template>\n </el-input>\n </div>\n <div>\n <el-input\n maxlength=\"16\"\n minlength=\"6\"\n type=\"password\"\n placeholder=\"请输入新密码\"\n :prefix-icon=\"Lock\"\n v-model=\"pwd1\"\n show-password\n clearable\n ></el-input>\n </div>\n <div>\n <el-input\n maxlength=\"16\"\n minlength=\"6\"\n type=\"password\"\n placeholder=\"请再次输入新密码\"\n :prefix-icon=\"Lock\"\n v-model=\"pwd2\"\n show-password\n clearable\n ></el-input>\n </div>\n <div class=\"tc\">\n <el-button @click=\"reset\" type=\"primary\" class=\"fw-w100\">确认重置</el-button>\n </div>\n <el-divider></el-divider>\n <div class=\"links\">\n <router-link to=\"/login\">去登陆</router-link>\n </div>\n </div>\n </login-panel>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { ElMessage } from 'element-plus'\nimport {\n Lock, Phone, ChatDotSquare,\n} from '@element-plus/icons-vue'\nimport {\n ref,\n} from 'vue'\nimport { useRouter } from 'vue-router'\nimport { useStore } from 'vuex'\nimport loginPanel from '@components/loginPanel.vue'\nimport { PublicApi, UserApi } from '@/apis'\nimport {\n rMobilePhone, rPassword, rVerCode,\n} from '@/utils/regExp'\nimport { formatDate } from '@/utils/stringUtil'\n\nconst account = ref('')\nconst code = ref('')\nconst pwd1 = ref('')\nconst pwd2 = ref('')\nconst $store = useStore()\nconst $router = useRouter()\nconst redirectDashBoard = () => {\n $router.replace({\n name: 'dashboard',\n })\n}\nconst checkForm = () => {\n if (!rMobilePhone.test(account.value)) {\n ElMessage.warning('手机号格式不正确')\n return false\n }\n\n if (!rPassword.test(pwd1.value)) {\n ElMessage.warning('密码格式不正确(6-16位 支持字母/数字/下划线)')\n return false\n }\n if (pwd1.value !== pwd2.value) {\n ElMessage.warning('两次输入的密码不一致')\n return false\n }\n\n if (!rVerCode.test(code.value)) {\n ElMessage.warning('验证码不正确(4位 数字)')\n return false\n }\n return true\n}\nconst codeText = ref('获取验证码')\nconst time = ref(0)\nconst refreshCodeText = () => {\n if (time.value === 0) {\n codeText.value = '获取验证码'\n return\n }\n codeText.value = `${time.value}s`\n time.value -= 1\n setTimeout(refreshCodeText, 1000)\n}\nconst getCode = () => {\n if (!rMobilePhone.test(account.value)) {\n ElMessage.warning('手机号格式不正确')\n return\n }\n PublicApi.getCode(account.value).then(() => {\n time.value = 120\n refreshCodeText()\n ElMessage.success('获取成功,请注意查看手机短信')\n })\n}\nconst reset = () => {\n if (!checkForm()) {\n return\n }\n UserApi\n .resetPwd(account.value, code.value, pwd1.value)\n .then((res) => {\n ElMessage.success('密码重置成功')\n const { token } = res.data\n $store.commit('user/setToken', token)\n redirectDashBoard()\n })\n .catch((err) => {\n const { code: c, data } = err\n const options: any = {\n 1008: '该手机号未绑定任何账号',\n 1003: '验证码不正确',\n 1004: '密码格式不正确',\n 1010: '账号已被封禁,有疑问请联系管理员',\n 1009: `账号已被冻结,解冻时间${data?.openTime && formatDate(new Date(data.openTime))}`,\n }\n ElMessage.error(options[c] || '重置失败,未知错误')\n })\n}\n\n</script>\n\n<style scoped lang=\"scss\">\n.login {\n background-image: linear-gradient(120deg, #a1c4fd 0%, #c2e9fb 100%);\n min-height: 100vh;\n}\n\n.inputArea {\n // padding: 1rem;\n margin: 0 auto;\n max-width: 320px;\n div {\n margin-top: 10px;\n }\n}\n// 登录按钮下方链接\n.links {\n display: flex;\n justify-content: center;\n a {\n color: #409eff;\n margin-left: 10px;\n }\n}\n</style>\n"],"names":["_sfc_main","defineComponent","_hoisted_1","_hoisted_2","createElementVNode","_hoisted_3","_hoisted_4","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","chatDotSquare","_export_sfc","account","ref","code","pwd1","pwd2","$store","useStore","$router","useRouter","redirectDashBoard","checkForm","rMobilePhone","rPassword","ElMessage","rVerCode","codeText","time","refreshCodeText","getCode","PublicApi","reset","UserApi","res","token","err","c","data","options","formatDate"],"mappings":"qOAGA,MAAMA,EAAYC,EAAgB,CAChC,KAAM,eACR,CAAC,EACKC,EAAa,CACjB,QAAS,gBACT,MAAO,4BACT,EACMC,EAA6BC,EAAmB,OAAQ,CAC5D,KAAM,eACN,EAAG,mOACL,EAAG,KAAM,EAAE,EACLC,EAA6BD,EAAmB,OAAQ,CAC5D,KAAM,eACN,EAAG,4KACL,EAAG,KAAM,EAAE,EACLE,EAAa,CACjBH,EACAE,CACF,EACA,SAASE,GAAYC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,EAAU,CAClE,OAAOC,EAAW,EAAEC,EAAmB,MAAOb,EAAYI,CAAU,CACtE,CACA,IAAIU,GAAgCC,EAAYjB,EAAW,CAAC,CAAC,SAAUO,EAAW,CAAC,CAAC,mHCwDpF,MAAAW,EAAAC,EAAA,EAAA,EACAC,EAAAD,EAAA,EAAA,EACAE,EAAAF,EAAA,EAAA,EACAG,EAAAH,EAAA,EAAA,EACAI,EAAAC,IACAC,EAAAC,IACAC,EAAA,IAAA,CACEF,EAAA,QAAA,CAAgB,KAAA,WACR,CAAA,CACP,EAEHG,EAAA,IACEC,EAAA,KAAAX,EAAA,KAAA,EAKAY,EAAA,KAAAT,EAAA,KAAA,EAIAA,EAAA,QAAAC,EAAA,OACES,EAAA,QAAA,YAAA,EACA,IAGFC,EAAA,KAAAZ,EAAA,KAAA,EAIA,IAHEW,EAAA,QAAA,eAAA,EACA,KAVAA,EAAA,QAAA,4BAAA,EACA,KANAA,EAAA,QAAA,UAAA,EACA,IAkBJE,EAAAd,EAAA,OAAA,EACAe,EAAAf,EAAA,CAAA,EACAgB,EAAA,IAAA,CACE,GAAAD,EAAA,QAAA,EAAA,CACED,EAAA,MAAA,QACA,MAAA,CAEFA,EAAA,MAAA,GAAA,OAAAC,EAAA,MAAA,KACAA,EAAA,OAAA,EACA,WAAAC,EAAA,GAAA,CAAgC,EAElCC,EAAA,IAAA,CACE,GAAA,CAAAP,EAAA,KAAAX,EAAA,KAAA,EAAA,CACEa,EAAA,QAAA,UAAA,EACA,MAAA,CAEFM,EAAA,QAAAnB,EAAA,KAAA,EAAA,KAAA,IAAA,CACEgB,EAAA,MAAA,IACAC,IACAJ,EAAA,QAAA,gBAAA,CAAkC,CAAA,CACnC,EAEHO,EAAA,IAAA,CACEV,EAAA,GAGAW,EAAA,SAAArB,EAAA,MAAAE,EAAA,MAAAC,EAAA,KAAA,EAAA,KAAAmB,GAAA,CAGIT,EAAA,QAAA,QAAA,EACA,KAAA,CAAA,MAAAU,CAAA,EAAAD,EAAA,KACAjB,EAAA,OAAA,gBAAAkB,CAAA,EACAd,GAAkB,CAAA,EAAA,MAAAe,GAAA,CAGlB,KAAA,CAAA,KAAAC,EAAA,KAAAC,CAAA,EAAAF,EACAG,EAAA,CAAqB,KAAA,cACb,KAAA,SACA,KAAA,UACA,KAAA,mBACA,KAAA,cAAA,QAAAD,GAAA,YAAAA,EAAA,WAAAE,EAAA,IAAA,KAAAF,EAAA,QAAA,CAAA,EACmE,EAE3Eb,EAAA,MAAAc,EAAAF,CAAA,GAAA,WAAA,CAAyC,CAAA,CAC1C","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index-2c76567d.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.3.4/node_modules/@element-plus/icons-vue/dist/es/chat-dot-square.mjs","../../src/pages/reset/index.vue"],"sourcesContent":["import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"ChatDotSquare\"\n});\nconst _hoisted_1 = {\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M273.536 736H800a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64H224a64 64 0 0 0-64 64v570.88L273.536 736zM296 800 147.968 918.4A32 32 0 0 1 96 893.44V256a128 128 0 0 1 128-128h576a128 128 0 0 1 128 128v416a128 128 0 0 1-128 128H296z\"\n}, null, -1);\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"path\", {\n fill: \"currentColor\",\n d: \"M512 499.2a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm192 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm-384 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4z\"\n}, null, -1);\nconst _hoisted_4 = [\n _hoisted_2,\n _hoisted_3\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_4);\n}\nvar chatDotSquare = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { chatDotSquare as default };\n","<template>\n <div class=\"login\">\n <login-panel>\n <!-- 表单输入区域 -->\n <div class=\"inputArea\">\n <div>\n <el-input\n maxlength=\"11\"\n placeholder=\"手机号\"\n :prefix-icon=\"Phone\"\n v-model=\"account\"\n clearable\n ></el-input>\n </div>\n <div>\n <el-input\n maxlength=\"4\"\n type=\"number\"\n placeholder=\"请输入验证码\"\n :prefix-icon=\"ChatDotSquare\"\n v-model=\"code\"\n clearable\n >\n <template #append>\n <!-- 获取验证码 -->\n <el-button :disabled=\"time !== 0\" @click=\"getCode\">{{ codeText }}</el-button>\n </template>\n </el-input>\n </div>\n <div>\n <el-input\n maxlength=\"16\"\n minlength=\"6\"\n type=\"password\"\n placeholder=\"请输入新密码\"\n :prefix-icon=\"Lock\"\n v-model=\"pwd1\"\n show-password\n clearable\n ></el-input>\n </div>\n <div>\n <el-input\n maxlength=\"16\"\n minlength=\"6\"\n type=\"password\"\n placeholder=\"请再次输入新密码\"\n :prefix-icon=\"Lock\"\n v-model=\"pwd2\"\n show-password\n clearable\n ></el-input>\n </div>\n <div class=\"tc\">\n <el-button @click=\"reset\" type=\"primary\" class=\"fw-w100\">确认重置</el-button>\n </div>\n <el-divider></el-divider>\n <div class=\"links\">\n <router-link to=\"/login\">去登陆</router-link>\n </div>\n </div>\n </login-panel>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { ElMessage } from 'element-plus'\nimport {\n Lock, Phone, ChatDotSquare,\n} from '@element-plus/icons-vue'\nimport {\n ref,\n} from 'vue'\nimport { useRouter } from 'vue-router'\nimport { useStore } from 'vuex'\nimport loginPanel from '@components/loginPanel.vue'\nimport { PublicApi, UserApi } from '@/apis'\nimport {\n rMobilePhone, rPassword, rVerCode,\n} from '@/utils/regExp'\nimport { formatDate } from '@/utils/stringUtil'\n\nconst account = ref('')\nconst code = ref('')\nconst pwd1 = ref('')\nconst pwd2 = ref('')\nconst $store = useStore()\nconst $router = useRouter()\nconst redirectDashBoard = () => {\n $router.replace({\n name: 'dashboard',\n })\n}\nconst checkForm = () => {\n if (!rMobilePhone.test(account.value)) {\n ElMessage.warning('手机号格式不正确')\n return false\n }\n\n if (!rPassword.test(pwd1.value)) {\n ElMessage.warning('密码格式不正确(6-16位 支持字母/数字/下划线)')\n return false\n }\n if (pwd1.value !== pwd2.value) {\n ElMessage.warning('两次输入的密码不一致')\n return false\n }\n\n if (!rVerCode.test(code.value)) {\n ElMessage.warning('验证码不正确(4位 数字)')\n return false\n }\n return true\n}\nconst codeText = ref('获取验证码')\nconst time = ref(0)\nconst refreshCodeText = () => {\n if (time.value === 0) {\n codeText.value = '获取验证码'\n return\n }\n codeText.value = `${time.value}s`\n time.value -= 1\n setTimeout(refreshCodeText, 1000)\n}\nconst getCode = () => {\n if (!rMobilePhone.test(account.value)) {\n ElMessage.warning('手机号格式不正确')\n return\n }\n PublicApi.getCode(account.value).then(() => {\n time.value = 120\n refreshCodeText()\n ElMessage.success('获取成功,请注意查看手机短信')\n })\n}\nconst reset = () => {\n if (!checkForm()) {\n return\n }\n UserApi\n .resetPwd(account.value, code.value, pwd1.value)\n .then((res) => {\n ElMessage.success('密码重置成功')\n const { token } = res.data\n $store.commit('user/setToken', token)\n redirectDashBoard()\n })\n .catch((err) => {\n const { code: c, data } = err\n const options: any = {\n 1008: '该手机号未绑定任何账号',\n 1003: '验证码不正确',\n 1004: '密码格式不正确',\n 1010: '账号已被封禁,有疑问请联系管理员',\n 1009: `账号已被冻结,解冻时间${data?.openTime && formatDate(new Date(data.openTime))}`,\n }\n ElMessage.error(options[c] || '重置失败,未知错误')\n })\n}\n\n</script>\n\n<style scoped lang=\"scss\">\n.login {\n background-image: linear-gradient(120deg, #a1c4fd 0%, #c2e9fb 100%);\n min-height: 100vh;\n}\n\n.inputArea {\n // padding: 1rem;\n margin: 0 auto;\n max-width: 320px;\n div {\n margin-top: 10px;\n }\n}\n// 登录按钮下方链接\n.links {\n display: flex;\n justify-content: center;\n a {\n color: #409eff;\n margin-left: 10px;\n }\n}\n</style>\n"],"names":["_sfc_main","defineComponent","_hoisted_1","_hoisted_2","createElementVNode","_hoisted_3","_hoisted_4","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","chatDotSquare","_export_sfc","account","ref","code","pwd1","pwd2","$store","useStore","$router","useRouter","redirectDashBoard","checkForm","rMobilePhone","rPassword","ElMessage","rVerCode","codeText","time","refreshCodeText","getCode","PublicApi","reset","UserApi","res","token","err","c","data","options","formatDate"],"mappings":"qOAGA,MAAMA,EAAYC,EAAgB,CAChC,KAAM,eACR,CAAC,EACKC,EAAa,CACjB,QAAS,gBACT,MAAO,4BACT,EACMC,EAA6BC,EAAmB,OAAQ,CAC5D,KAAM,eACN,EAAG,mOACL,EAAG,KAAM,EAAE,EACLC,EAA6BD,EAAmB,OAAQ,CAC5D,KAAM,eACN,EAAG,4KACL,EAAG,KAAM,EAAE,EACLE,EAAa,CACjBH,EACAE,CACF,EACA,SAASE,GAAYC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,EAAU,CAClE,OAAOC,EAAW,EAAEC,EAAmB,MAAOb,EAAYI,CAAU,CACtE,CACA,IAAIU,GAAgCC,EAAYjB,EAAW,CAAC,CAAC,SAAUO,EAAW,CAAC,CAAC,mHCwDpF,MAAAW,EAAAC,EAAA,EAAA,EACAC,EAAAD,EAAA,EAAA,EACAE,EAAAF,EAAA,EAAA,EACAG,EAAAH,EAAA,EAAA,EACAI,EAAAC,IACAC,EAAAC,IACAC,EAAA,IAAA,CACEF,EAAA,QAAA,CAAgB,KAAA,WACR,CAAA,CACP,EAEHG,EAAA,IACEC,EAAA,KAAAX,EAAA,KAAA,EAKAY,EAAA,KAAAT,EAAA,KAAA,EAIAA,EAAA,QAAAC,EAAA,OACES,EAAA,QAAA,YAAA,EACA,IAGFC,EAAA,KAAAZ,EAAA,KAAA,EAIA,IAHEW,EAAA,QAAA,eAAA,EACA,KAVAA,EAAA,QAAA,4BAAA,EACA,KANAA,EAAA,QAAA,UAAA,EACA,IAkBJE,EAAAd,EAAA,OAAA,EACAe,EAAAf,EAAA,CAAA,EACAgB,EAAA,IAAA,CACE,GAAAD,EAAA,QAAA,EAAA,CACED,EAAA,MAAA,QACA,MAAA,CAEFA,EAAA,MAAA,GAAA,OAAAC,EAAA,MAAA,KACAA,EAAA,OAAA,EACA,WAAAC,EAAA,GAAA,CAAgC,EAElCC,EAAA,IAAA,CACE,GAAA,CAAAP,EAAA,KAAAX,EAAA,KAAA,EAAA,CACEa,EAAA,QAAA,UAAA,EACA,MAAA,CAEFM,EAAA,QAAAnB,EAAA,KAAA,EAAA,KAAA,IAAA,CACEgB,EAAA,MAAA,IACAC,IACAJ,EAAA,QAAA,gBAAA,CAAkC,CAAA,CACnC,EAEHO,EAAA,IAAA,CACEV,EAAA,GAGAW,EAAA,SAAArB,EAAA,MAAAE,EAAA,MAAAC,EAAA,KAAA,EAAA,KAAAmB,GAAA,CAGIT,EAAA,QAAA,QAAA,EACA,KAAA,CAAA,MAAAU,CAAA,EAAAD,EAAA,KACAjB,EAAA,OAAA,gBAAAkB,CAAA,EACAd,GAAkB,CAAA,EAAA,MAAAe,GAAA,CAGlB,KAAA,CAAA,KAAAC,EAAA,KAAAC,CAAA,EAAAF,EACAG,EAAA,CAAqB,KAAA,cACb,KAAA,SACA,KAAA,UACA,KAAA,mBACA,KAAA,cAAA,QAAAD,GAAA,YAAAA,EAAA,WAAAE,EAAA,IAAA,KAAAF,EAAA,QAAA,CAAA,EACmE,EAE3Eb,EAAA,MAAAc,EAAAF,CAAA,GAAA,WAAA,CAAyC,CAAA,CAC1C","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- import{g as je,d as $e,f as o,c,a as s,h as Ae,O as v,u as He,a1 as Ge,Z as E,r as h,$ as Je,o as qe,aU as ge,E as u,bd as Ke,i as Ye,j as d,w as i,F,C as te,a6 as ae,t as k,S as y,a7 as ye,D as g,ae as se,a9 as we,bU as Ze,ab as W,a8 as Qe,ad as ke,y as Xe,x as et,bV as tt,aY as at,P as st,b as r,k as xe,a3 as lt,a_ as ot,s as nt,aW as be,v as it,I as rt,p as ut,e as dt,_ as ct}from"./index-62c7029f.js";import{v as pt}from"./el-loading-5d91bb6c.js";import{E as mt,a as vt}from"./el-progress-2fff98be.js";import{a as ft,E as _t}from"./el-form-item-f40006bf.js";import{T as S,E as ht}from"./tip-00ddf749.js";import{I as gt,L as yt}from"./index-34bd5929.js";import{E as wt}from"./index-17fa8fb7.js";import"./index-6d7ac779.js";import"./isEqual-9c466456.js";import"./el-dialog-463960e0.js";import"./el-select-7d894fd0.js";import"./validator-853854a1.js";import"./aria-bc8e8b0f.js";const kt=$e({name:"UploadFilled"}),xt={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},bt=s("path",{fill:"currentColor",d:"M544 864V672h128L512 480 352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.808 239.808 0 0 1 512 192a239.872 239.872 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6H544z"},null,-1),$t=[bt];function Nt(V,le,A,oe,ne,M){return o(),c("svg",xt,$t)}var Et=je(kt,[["render",Nt]]);const z=V=>(ut("data-v-d3f704e9"),V=V(),dt(),V),Ft={class:"task-panel"},St={class:"pc-nav"},zt={class:"nav"},Ct={class:"logo"},Tt=z(()=>s("img",{style:{height:"40px",width:"170px"},src:"https://img.cdn.sugarat.top/easypicker/EasyPicker.png",alt:"logo"},null,-1)),Ut=["onClick"],It={key:0,"element-loading-text":"Loading...",class:"panel tc"},Lt={class:"name"},Vt={class:"tip-wrapper"},Mt={class:"ddl"},Dt={key:0},Bt={key:3},Pt={class:"infos"},Rt={key:0},Wt={class:"infos"},Ot=z(()=>s("div",{class:"el-upload__text"},[r(" 将文件拖于此处 or "),s("em",null,"直接选择文件")],-1)),jt={class:"p10"},At={class:"p10"},Ht={class:"p10 option-tips"},Gt={style:{color:"red"}},Jt={style:{color:"red"}},qt=z(()=>s("br",null,null,-1)),Kt=z(()=>s("br",null,null,-1)),Yt=z(()=>s("br",null,null,-1)),Zt=z(()=>s("strong",null,"选择大文件后需要等待一会儿才展示处理",-1)),Qt=z(()=>s("br",null,null,-1)),Xt={class:"withdraw"},ea={key:1,class:"panel tc"},ta={class:"name"},aa={style:{"padding-top":"20px"}},sa=$e({__name:"index",setup(V){const le=Ae(),A=v(()=>le.getters["public/isMobile"]),oe=He(),ne=Ge(),M=E([{title:"我也要收集",path:"https://docs.ep.sugarat.top/"}]),Ne=t=>{if(M[t].path.startsWith("http")){window.location.href=M[t].path;return}oe.push({path:M[t].path})},C=E({name:"",category:""}),l=E({bindField:""}),f=v(()=>ot(l.format)),p=h(""),O=h(0),D=v(()=>O.value<=0),Ee=v(()=>{let t=~~(O.value/1e3),e=~~(t/(60*60));const a=~~(e/24);e%=24;const n=~~(t%3600/60);return t%=60,"剩余".concat(a,"天").concat(e,"时").concat(n,"分").concat(t,"秒")}),H=(t=!0)=>{if(l!=null&&l.ddl){const e=new Date(l.ddl);O.value=e.getTime()-Date.now()}else O.value=0;t&&setTimeout(()=>{H()},1e3)},T=v(()=>{if(l!=null&&l.ddl){const t=new Date(l.ddl);return nt(t)}return""}),_=E([]),$=h([]),G=h(),J=v(()=>$.value.filter(t=>t.status==="uploading").length>0),Fe=t=>t.status==="uploading"||t.status==="success"?wt.confirm("不影响已经上传成功的,正在上传的将取消上传","确定从列表移除文件吗?").then(()=>(t.status==="uploading"&&(u.info("取消".concat(t.name,"的上传")),t.subscription.unsubscribe()),!0)).catch(()=>!1):!0,q=v(()=>_.every(t=>t.value)),U=v(()=>l.bindField.trim()||"姓名"),ie=v(()=>_.find(t=>t.text===U.value)),Se=v(()=>l.people&&!ie.value),x=E({peopleName:""}),re=(t,e,a)=>{if(!e){const n="请输入".concat(U.value);a(new Error(n)),u.error(n);return}be.checkPeopleIsExist(p.value,e).then(n=>{n.data.exist||u.error("你不在此次提交名单中,如有疑问请联系管理员"),a(n.data.exist?void 0:new Error("你不在此次提交名单中,如有疑问请联系管理员"))})},ue=h(),ze=E({peopleName:[{validator:re,trigger:"blur"}]}),K=()=>{var t;if(ie.value){const e=(t=_.find(a=>a.text===U.value))==null?void 0:t.value;return x.peopleName=e||"",new Promise(a=>{re(null,e,a)}).then(a=>!a)}return ue.value.validate(e=>e)},Ce=()=>{const t=$.value;for(const e of t)if(!e.md5)u.info("文件(".concat(e.name,")的唯一指纹还在计算中,再等待一会儿再点击上传")),setTimeout(()=>{u.info("文件越大计算时间越长(1G通常需要20s)")},100);else if(e.status==="ready"){e.status="uploading";let{name:a}=e;const n=a;l.rewrite&&(a=_.map(P=>P.value).join(f.value.splitChar||"-")+se(a)),a=tt(a);const X="easypicker2/".concat(p.value,"/").concat(e.md5,"/").concat(a);W.getUploadToken().then(P=>{at(P.data.token,e.raw,X,{success(R){const{fsize:j}=R;W.addFile({originName:n,name:a,taskKey:p.value,taskName:C.name,size:j,hash:e.md5,info:JSON.stringify(_),people:x.peopleName}).then(()=>{e.status="success",u.success("文件:".concat(e.name,"提交成功")),l.people&&be.updatePeopleStatus(p.value,a,x.peopleName,e.md5)})},process(R,j,ee){e.percentage=Math.floor(R),e.subscription=ee}})})}},Te=async()=>{if(!q.value){u.warning("请先完成必要信息的填写");return}l.people&&!await K()||Ce()},Ue=v(()=>{for(const t of $.value)if(t.status==="ready")return!0;return!1}),Ie=v(()=>{for(const t of $.value)if(["success","ready"].includes(t.status))return!0;return!1}),I=h(0),Le=t=>{const{name:e}=t;if(f.value.format.length&&f.value.status){const a=se(e);if(!f.value.format.find(n=>a.endsWith(n))){u.error("".concat(e," 格式不符合要球")),G.value.handleRemove(t);return}}if(f.value.size&&f.value.size<t.size){u.error("".concat(e," 大小").concat(we(t.size)," 不符合要求")),G.value.handleRemove(t);return}I.value+=1,Ze(t.raw).then(a=>{t.md5=a,I.value-=1})},de=v(()=>f.value.limit||10),Ve=()=>{u.warning("一次提交最多只能选择".concat(de.value,"个文件,请移除已经上传成功的或刷新页面"))},Y=h(!1),ce=h(""),Me=()=>{const t=$.value;for(const e of t)if(!e.md5)u.info("文件(".concat(e.name,")的唯一指纹还在计算中,再等待一会儿再点击上传")),setTimeout(()=>{u.info("文件越大计算时间越长(1G通常需要20s)")},100);else if(!["fail","uploading"].includes(e.status)){let{name:a}=e;l.rewrite&&(a=_.map(n=>n.value).join(f.value.splitChar||"-")+se(a)),W.withdrawFile({taskKey:p.value,taskName:C.name,filename:a,hash:e.md5,info:JSON.stringify(_),peopleName:x.peopleName}).then(()=>{u.success("文件:".concat(e.name,"撤回成功")),e.name+=" - (已撤回 ✅ )",e.status="fail"}).catch(()=>{u.error("撤回失败: 没有文件:".concat(e.name,"对应提交记录"))})}},pe=()=>{W.getTemplateUrl(l.template,p.value).then(t=>{Y.value=!0;const{link:e}=t.data;ce.value=e,Qe(e,l.template)}).catch(()=>{u.warning("文件已从服务器上移除,请联系管理员重新上传")})},B=h(!1),De=async()=>{if(!q.value){u.warning("请先完成必要信息的填写");return}l.people&&!await K()||Me()},Be=async()=>{if(!q.value){u.warning("请先完成必要信息的填写,需和提交时信息完全一致");return}l.people&&!await K()||W.checkSubmitStatus(p.value,_,x.peopleName).then(t=>{t.data.isSubmit?u.success("已经提交过啦"):u.warning("还未提交过哟")})},Z=h(!1),Q=h(!1),me=(t=[],e=[])=>t.length!==e.length?!1:t.every((a,n)=>a.type===e[n].type&&a.text===e[n].text&&me(a.children,e[n].children)),ve=(t=!1)=>{ge.getTaskMoreInfo(p.value).then(e=>{Object.assign(l,e.data),me(_,ke(l.info))||(_.splice(0,_.length),_.push(...ke(l.info)),t&&u.success("表单信息有更新")),H(!1),Z.value=!1})},fe=()=>{Q.value=!0},_e=()=>{Q.value&&!J.value&&(Q.value=!1,ve(!0))},Pe=v(()=>D.value?T.value:T.value+Ee.value),N=E({text:"",imgs:[]}),w=h([]);return Je(()=>l.tip,()=>{try{const t=JSON.parse(l.tip);N.imgs=t.imgs,N.text=t.text||"",w.value=N.imgs.map(e=>({...e,url:"https://img.cdn.sugarat.top/mdImg/MTY3NzkxMDI1NTU1Nw==20140524124237518.gif"})),w.value.length&&st.getTipImageUrl(p.value,w.value.map(e=>({uid:e.uid,name:e.name}))).then(e=>{e.data.forEach((a,n)=>{w.value[n].url=a.cover,Object.assign(w.value[n],{preview:a.preview})})})}catch(t){N.text="",N.imgs=[],w.value=[]}}),qe(()=>{p.value=ne.params.key,p.value&&(Z.value=!0,ge.getTaskInfo(p.value).then(t=>{Object.assign(C,t.data)}).catch(t=>{t.code===4001&&(u.error("任务不存在"),p.value="",C.name="任务不存在")}),ve(),H()),window.addEventListener("blur",fe),window.addEventListener("focus",_e)}),Ke(()=>{window.removeEventListener("blur",fe),window.removeEventListener("focus",_e)}),(t,e)=>{const a=Ye("router-link"),n=Xe,X=ht,P=vt,R=it,j=_t,ee=ft,b=et,Re=rt,We=mt,Oe=pt;return o(),c("div",Ft,[s("div",St,[s("div",zt,[s("div",Ct,[d(a,{to:"/"},{default:i(()=>[Tt]),_:1})]),s("nav",null,[(o(!0),c(F,null,te(M,(m,L)=>(o(),c("div",{class:"nav-item",key:L,onClick:he=>Ne(L)},k(m.title),9,Ut))),128))])])]),p.value?ae((o(),c("div",It,[s("h1",Lt,k(C.name),1),N.text&&(!T.value||!D.value)?(o(),c(F,{key:0},[d(n,null,{default:i(()=>[r("⚠️ 注意事项 ⚠️")]),_:1}),d(S,null,{default:i(()=>[s("div",Vt,[(o(!0),c(F,null,te(N.text.split("\n"),(m,L)=>(o(),c("p",{key:L},k(m.replace(/\s/g," ")),1))),128))])]),_:1})],64)):y("",!0),w.value.length&&(!T.value||!D.value)?(o(!0),c(F,{key:1},te(w.value,(m,L)=>(o(),g(X,{"hide-on-click-modal":"",key:m.uid,style:{width:"100px",height:"100px",margin:"10px"},src:m.url,"zoom-rate":1.2,"preview-src-list":w.value.map(he=>he.preview),"initial-index":L,fit:"contain"},null,8,["src","preview-src-list","initial-index"]))),128)):y("",!0),T.value?(o(),c(F,{key:2},[d(n,null,{default:i(()=>[r("截止时间")]),_:1}),s("h2",Mt,k(Pe.value),1),D.value?(o(),c("div",Dt,[d(P,{description:"已经结束啦!"})])):y("",!0)],64)):y("",!0),!T.value||!D.value?(o(),c("div",Bt,[d(n,null,{default:i(()=>[r("必要信息填写")]),_:1}),s("div",Pt,[ae(s("div",null,[d(S,null,{default:i(()=>[r("“"+k(U.value)+"”在参与名单里才能正常提交",1)]),_:1})],512),[[ye,l.people]]),Se.value?(o(),c("div",Rt,[s("div",Wt,[d(ee,{ref_key:"validModalRef",ref:ue,rules:ze,"status-icon":"",model:x,disabled:J.value,"label-position":"top"},{default:i(()=>[d(j,{prop:"peopleName",label:U.value},{default:i(()=>[d(R,{maxlength:14,clearable:"","show-word-limit":"",placeholder:"请输入 ".concat(U.value),modelValue:x.peopleName,"onUpdate:modelValue":e[0]||(e[0]=m=>x.peopleName=m)},null,8,["placeholder","modelValue"])]),_:1},8,["label"])]),_:1},8,["rules","model","disabled"])])])):y("",!0),d(gt,{infos:_,disabled:J.value},null,8,["infos","disabled"])]),d(We,{style:{"max-width":"400px",margin:"0 auto"},drag:!A.value,action:"",ref_key:"fileUpload",ref:G,"on-change":Le,"before-remove":Fe,"on-exceed":Ve,"auto-upload":!1,multiple:"",limit:de.value,"file-list":$.value,"onUpdate:fileList":e[1]||(e[1]=m=>$.value=m)},{tip:i(()=>[ae(s("div",jt,[d(S,null,{default:i(()=>[r("还有 "+k(I.value)+" 个文件正在生成校验信息,请稍等(1G通常需要20s)",1)]),_:1})],512),[[ye,!!I.value]])]),default:i(()=>[A.value?(o(),g(b,{key:0,type:"primary"},{default:i(()=>[r("选择文件")]),_:1})):(o(),c(F,{key:1},[d(Re,{class:"el-icon--upload"},{default:i(()=>[d(xe(Et))]),_:1}),Ot],64))]),_:1},8,["drag","limit","file-list"]),s("div",At,[B.value?(o(),g(b,{key:0,size:"default",onClick:De,type:"warning",disabled:!Ie.value||!!I.value},{default:i(()=>[r("一键撤回")]),_:1},8,["disabled"])):(o(),g(b,{key:1,size:"default",onClick:Te,type:"success",disabled:!Ue.value||!!I.value},{default:i(()=>[r("提交文件")]),_:1},8,["disabled"])),d(b,{onClick:Be,size:"default"},{default:i(()=>[r("查询提交情况")]),_:1})]),s("div",Ht,[f.value.status&&f.value.format.length?(o(),g(S,{key:0},{default:i(()=>[r("限制格式为: "),s("span",Gt,k(f.value.format.join(", ")),1)]),_:1})):y("",!0),f.value.size?(o(),g(S,{key:1},{default:i(()=>[r("限制文件大小不超过: "),s("span",Jt,k(xe(we)(f.value.size)),1)]),_:1})):y("",!0),B.value?(o(),g(S,{key:2},{default:i(()=>[r("① 须保证选择的文件与提交时的文件一致"),qt,r(" ② 填写表单信息一致 "),Kt,r(" ③ 完全一模一样的文件的提交记录(内容md5+命名),将会一次性全部撤回")]),_:1})):(o(),g(S,{key:3},{default:i(()=>[r("① 选择完文件,点击 ”提交文件“即可 "),Yt,r(" ② "),Zt,l.template?(o(),c(F,{key:0},[Qt,r(" ③ "),s("strong",null,[d(b,{type:"primary",text:"",style:{color:"#85ce61"},size:"small",onClick:pe},{default:i(()=>[r("右下角可 “查看提交示例” ")]),_:1})])],64)):y("",!0)]),_:1}))]),s("div",Xt,[l.template?(o(),g(b,{key:0,type:"primary",text:"",style:{color:"#85ce61"},size:"small",onClick:pe},{default:i(()=>[r("查看提交示例")]),_:1})):y("",!0),B.value?(o(),g(b,{key:1,onClick:e[2]||(e[2]=m=>B.value=!1),size:"small",type:"primary",text:""},{default:i(()=>[r("正常提交")]),_:1})):(o(),g(b,{key:2,size:"small",onClick:e[3]||(e[3]=m=>B.value=!0),type:"primary",text:""},{default:i(()=>[r("我要撤回")]),_:1}))])])):y("",!0)])),[[Oe,Z.value]]):(o(),c("div",ea,[s("h1",ta,k(C.name),1)])),d(yt,{value:Y.value,"onUpdate:value":e[4]||(e[4]=m=>Y.value=m),title:"示例文件下载链接",link:ce.value},null,8,["value","link"]),s("div",aa,[d(lt,{type:"task"})])])}}});const ha=ct(sa,[["__scopeId","data-v-d3f704e9"]]);export{ha as default};
2
- //# sourceMappingURL=index-b0a4c236.js.map
1
+ import{g as je,d as $e,f as o,c,a as s,h as Ae,O as v,u as He,a1 as Ge,Z as E,r as h,$ as Je,o as qe,aU as ge,E as u,bd as Ke,i as Ye,j as d,w as i,F,C as te,a6 as ae,t as k,S as y,a7 as ye,D as g,ae as se,a9 as we,bU as Ze,ab as W,a8 as Qe,ad as ke,y as Xe,x as et,bV as tt,aY as at,P as st,b as r,k as xe,a3 as lt,a_ as ot,s as nt,aW as be,v as it,I as rt,p as ut,e as dt,_ as ct}from"./index-1639ad54.js";import{v as pt}from"./el-loading-e9365e7e.js";import{E as mt,a as vt}from"./el-progress-b98becda.js";import{a as ft,E as _t}from"./el-form-item-fb230be3.js";import{T as S,E as ht}from"./tip-822b05b7.js";import{I as gt,L as yt}from"./index-74330c06.js";import{E as wt}from"./index-b8357360.js";import"./index-68448dbd.js";import"./isEqual-95d6c129.js";import"./el-dialog-c11c4af2.js";import"./el-select-2a16e5df.js";import"./validator-5c60ab85.js";import"./aria-bc8e8b0f.js";const kt=$e({name:"UploadFilled"}),xt={viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},bt=s("path",{fill:"currentColor",d:"M544 864V672h128L512 480 352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.808 239.808 0 0 1 512 192a239.872 239.872 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6H544z"},null,-1),$t=[bt];function Nt(V,le,A,oe,ne,M){return o(),c("svg",xt,$t)}var Et=je(kt,[["render",Nt]]);const z=V=>(ut("data-v-d3f704e9"),V=V(),dt(),V),Ft={class:"task-panel"},St={class:"pc-nav"},zt={class:"nav"},Ct={class:"logo"},Tt=z(()=>s("img",{style:{height:"40px",width:"170px"},src:"https://img.cdn.sugarat.top/easypicker/EasyPicker.png",alt:"logo"},null,-1)),Ut=["onClick"],It={key:0,"element-loading-text":"Loading...",class:"panel tc"},Lt={class:"name"},Vt={class:"tip-wrapper"},Mt={class:"ddl"},Dt={key:0},Bt={key:3},Pt={class:"infos"},Rt={key:0},Wt={class:"infos"},Ot=z(()=>s("div",{class:"el-upload__text"},[r(" 将文件拖于此处 or "),s("em",null,"直接选择文件")],-1)),jt={class:"p10"},At={class:"p10"},Ht={class:"p10 option-tips"},Gt={style:{color:"red"}},Jt={style:{color:"red"}},qt=z(()=>s("br",null,null,-1)),Kt=z(()=>s("br",null,null,-1)),Yt=z(()=>s("br",null,null,-1)),Zt=z(()=>s("strong",null,"选择大文件后需要等待一会儿才展示处理",-1)),Qt=z(()=>s("br",null,null,-1)),Xt={class:"withdraw"},ea={key:1,class:"panel tc"},ta={class:"name"},aa={style:{"padding-top":"20px"}},sa=$e({__name:"index",setup(V){const le=Ae(),A=v(()=>le.getters["public/isMobile"]),oe=He(),ne=Ge(),M=E([{title:"我也要收集",path:"https://docs.ep.sugarat.top/"}]),Ne=t=>{if(M[t].path.startsWith("http")){window.location.href=M[t].path;return}oe.push({path:M[t].path})},C=E({name:"",category:""}),l=E({bindField:""}),f=v(()=>ot(l.format)),p=h(""),O=h(0),D=v(()=>O.value<=0),Ee=v(()=>{let t=~~(O.value/1e3),e=~~(t/(60*60));const a=~~(e/24);e%=24;const n=~~(t%3600/60);return t%=60,"剩余".concat(a,"天").concat(e,"时").concat(n,"分").concat(t,"秒")}),H=(t=!0)=>{if(l!=null&&l.ddl){const e=new Date(l.ddl);O.value=e.getTime()-Date.now()}else O.value=0;t&&setTimeout(()=>{H()},1e3)},T=v(()=>{if(l!=null&&l.ddl){const t=new Date(l.ddl);return nt(t)}return""}),_=E([]),$=h([]),G=h(),J=v(()=>$.value.filter(t=>t.status==="uploading").length>0),Fe=t=>t.status==="uploading"||t.status==="success"?wt.confirm("不影响已经上传成功的,正在上传的将取消上传","确定从列表移除文件吗?").then(()=>(t.status==="uploading"&&(u.info("取消".concat(t.name,"的上传")),t.subscription.unsubscribe()),!0)).catch(()=>!1):!0,q=v(()=>_.every(t=>t.value)),U=v(()=>l.bindField.trim()||"姓名"),ie=v(()=>_.find(t=>t.text===U.value)),Se=v(()=>l.people&&!ie.value),x=E({peopleName:""}),re=(t,e,a)=>{if(!e){const n="请输入".concat(U.value);a(new Error(n)),u.error(n);return}be.checkPeopleIsExist(p.value,e).then(n=>{n.data.exist||u.error("你不在此次提交名单中,如有疑问请联系管理员"),a(n.data.exist?void 0:new Error("你不在此次提交名单中,如有疑问请联系管理员"))})},ue=h(),ze=E({peopleName:[{validator:re,trigger:"blur"}]}),K=()=>{var t;if(ie.value){const e=(t=_.find(a=>a.text===U.value))==null?void 0:t.value;return x.peopleName=e||"",new Promise(a=>{re(null,e,a)}).then(a=>!a)}return ue.value.validate(e=>e)},Ce=()=>{const t=$.value;for(const e of t)if(!e.md5)u.info("文件(".concat(e.name,")的唯一指纹还在计算中,再等待一会儿再点击上传")),setTimeout(()=>{u.info("文件越大计算时间越长(1G通常需要20s)")},100);else if(e.status==="ready"){e.status="uploading";let{name:a}=e;const n=a;l.rewrite&&(a=_.map(P=>P.value).join(f.value.splitChar||"-")+se(a)),a=tt(a);const X="easypicker2/".concat(p.value,"/").concat(e.md5,"/").concat(a);W.getUploadToken().then(P=>{at(P.data.token,e.raw,X,{success(R){const{fsize:j}=R;W.addFile({originName:n,name:a,taskKey:p.value,taskName:C.name,size:j,hash:e.md5,info:JSON.stringify(_),people:x.peopleName}).then(()=>{e.status="success",u.success("文件:".concat(e.name,"提交成功")),l.people&&be.updatePeopleStatus(p.value,a,x.peopleName,e.md5)})},process(R,j,ee){e.percentage=Math.floor(R),e.subscription=ee}})})}},Te=async()=>{if(!q.value){u.warning("请先完成必要信息的填写");return}l.people&&!await K()||Ce()},Ue=v(()=>{for(const t of $.value)if(t.status==="ready")return!0;return!1}),Ie=v(()=>{for(const t of $.value)if(["success","ready"].includes(t.status))return!0;return!1}),I=h(0),Le=t=>{const{name:e}=t;if(f.value.format.length&&f.value.status){const a=se(e);if(!f.value.format.find(n=>a.endsWith(n))){u.error("".concat(e," 格式不符合要球")),G.value.handleRemove(t);return}}if(f.value.size&&f.value.size<t.size){u.error("".concat(e," 大小").concat(we(t.size)," 不符合要求")),G.value.handleRemove(t);return}I.value+=1,Ze(t.raw).then(a=>{t.md5=a,I.value-=1})},de=v(()=>f.value.limit||10),Ve=()=>{u.warning("一次提交最多只能选择".concat(de.value,"个文件,请移除已经上传成功的或刷新页面"))},Y=h(!1),ce=h(""),Me=()=>{const t=$.value;for(const e of t)if(!e.md5)u.info("文件(".concat(e.name,")的唯一指纹还在计算中,再等待一会儿再点击上传")),setTimeout(()=>{u.info("文件越大计算时间越长(1G通常需要20s)")},100);else if(!["fail","uploading"].includes(e.status)){let{name:a}=e;l.rewrite&&(a=_.map(n=>n.value).join(f.value.splitChar||"-")+se(a)),W.withdrawFile({taskKey:p.value,taskName:C.name,filename:a,hash:e.md5,info:JSON.stringify(_),peopleName:x.peopleName}).then(()=>{u.success("文件:".concat(e.name,"撤回成功")),e.name+=" - (已撤回 ✅ )",e.status="fail"}).catch(()=>{u.error("撤回失败: 没有文件:".concat(e.name,"对应提交记录"))})}},pe=()=>{W.getTemplateUrl(l.template,p.value).then(t=>{Y.value=!0;const{link:e}=t.data;ce.value=e,Qe(e,l.template)}).catch(()=>{u.warning("文件已从服务器上移除,请联系管理员重新上传")})},B=h(!1),De=async()=>{if(!q.value){u.warning("请先完成必要信息的填写");return}l.people&&!await K()||Me()},Be=async()=>{if(!q.value){u.warning("请先完成必要信息的填写,需和提交时信息完全一致");return}l.people&&!await K()||W.checkSubmitStatus(p.value,_,x.peopleName).then(t=>{t.data.isSubmit?u.success("已经提交过啦"):u.warning("还未提交过哟")})},Z=h(!1),Q=h(!1),me=(t=[],e=[])=>t.length!==e.length?!1:t.every((a,n)=>a.type===e[n].type&&a.text===e[n].text&&me(a.children,e[n].children)),ve=(t=!1)=>{ge.getTaskMoreInfo(p.value).then(e=>{Object.assign(l,e.data),me(_,ke(l.info))||(_.splice(0,_.length),_.push(...ke(l.info)),t&&u.success("表单信息有更新")),H(!1),Z.value=!1})},fe=()=>{Q.value=!0},_e=()=>{Q.value&&!J.value&&(Q.value=!1,ve(!0))},Pe=v(()=>D.value?T.value:T.value+Ee.value),N=E({text:"",imgs:[]}),w=h([]);return Je(()=>l.tip,()=>{try{const t=JSON.parse(l.tip);N.imgs=t.imgs,N.text=t.text||"",w.value=N.imgs.map(e=>({...e,url:"https://img.cdn.sugarat.top/mdImg/MTY3NzkxMDI1NTU1Nw==20140524124237518.gif"})),w.value.length&&st.getTipImageUrl(p.value,w.value.map(e=>({uid:e.uid,name:e.name}))).then(e=>{e.data.forEach((a,n)=>{w.value[n].url=a.cover,Object.assign(w.value[n],{preview:a.preview})})})}catch(t){N.text="",N.imgs=[],w.value=[]}}),qe(()=>{p.value=ne.params.key,p.value&&(Z.value=!0,ge.getTaskInfo(p.value).then(t=>{Object.assign(C,t.data)}).catch(t=>{t.code===4001&&(u.error("任务不存在"),p.value="",C.name="任务不存在")}),ve(),H()),window.addEventListener("blur",fe),window.addEventListener("focus",_e)}),Ke(()=>{window.removeEventListener("blur",fe),window.removeEventListener("focus",_e)}),(t,e)=>{const a=Ye("router-link"),n=Xe,X=ht,P=vt,R=it,j=_t,ee=ft,b=et,Re=rt,We=mt,Oe=pt;return o(),c("div",Ft,[s("div",St,[s("div",zt,[s("div",Ct,[d(a,{to:"/"},{default:i(()=>[Tt]),_:1})]),s("nav",null,[(o(!0),c(F,null,te(M,(m,L)=>(o(),c("div",{class:"nav-item",key:L,onClick:he=>Ne(L)},k(m.title),9,Ut))),128))])])]),p.value?ae((o(),c("div",It,[s("h1",Lt,k(C.name),1),N.text&&(!T.value||!D.value)?(o(),c(F,{key:0},[d(n,null,{default:i(()=>[r("⚠️ 注意事项 ⚠️")]),_:1}),d(S,null,{default:i(()=>[s("div",Vt,[(o(!0),c(F,null,te(N.text.split("\n"),(m,L)=>(o(),c("p",{key:L},k(m.replace(/\s/g," ")),1))),128))])]),_:1})],64)):y("",!0),w.value.length&&(!T.value||!D.value)?(o(!0),c(F,{key:1},te(w.value,(m,L)=>(o(),g(X,{"hide-on-click-modal":"",key:m.uid,style:{width:"100px",height:"100px",margin:"10px"},src:m.url,"zoom-rate":1.2,"preview-src-list":w.value.map(he=>he.preview),"initial-index":L,fit:"contain"},null,8,["src","preview-src-list","initial-index"]))),128)):y("",!0),T.value?(o(),c(F,{key:2},[d(n,null,{default:i(()=>[r("截止时间")]),_:1}),s("h2",Mt,k(Pe.value),1),D.value?(o(),c("div",Dt,[d(P,{description:"已经结束啦!"})])):y("",!0)],64)):y("",!0),!T.value||!D.value?(o(),c("div",Bt,[d(n,null,{default:i(()=>[r("必要信息填写")]),_:1}),s("div",Pt,[ae(s("div",null,[d(S,null,{default:i(()=>[r("“"+k(U.value)+"”在参与名单里才能正常提交",1)]),_:1})],512),[[ye,l.people]]),Se.value?(o(),c("div",Rt,[s("div",Wt,[d(ee,{ref_key:"validModalRef",ref:ue,rules:ze,"status-icon":"",model:x,disabled:J.value,"label-position":"top"},{default:i(()=>[d(j,{prop:"peopleName",label:U.value},{default:i(()=>[d(R,{maxlength:14,clearable:"","show-word-limit":"",placeholder:"请输入 ".concat(U.value),modelValue:x.peopleName,"onUpdate:modelValue":e[0]||(e[0]=m=>x.peopleName=m)},null,8,["placeholder","modelValue"])]),_:1},8,["label"])]),_:1},8,["rules","model","disabled"])])])):y("",!0),d(gt,{infos:_,disabled:J.value},null,8,["infos","disabled"])]),d(We,{style:{"max-width":"400px",margin:"0 auto"},drag:!A.value,action:"",ref_key:"fileUpload",ref:G,"on-change":Le,"before-remove":Fe,"on-exceed":Ve,"auto-upload":!1,multiple:"",limit:de.value,"file-list":$.value,"onUpdate:fileList":e[1]||(e[1]=m=>$.value=m)},{tip:i(()=>[ae(s("div",jt,[d(S,null,{default:i(()=>[r("还有 "+k(I.value)+" 个文件正在生成校验信息,请稍等(1G通常需要20s)",1)]),_:1})],512),[[ye,!!I.value]])]),default:i(()=>[A.value?(o(),g(b,{key:0,type:"primary"},{default:i(()=>[r("选择文件")]),_:1})):(o(),c(F,{key:1},[d(Re,{class:"el-icon--upload"},{default:i(()=>[d(xe(Et))]),_:1}),Ot],64))]),_:1},8,["drag","limit","file-list"]),s("div",At,[B.value?(o(),g(b,{key:0,size:"default",onClick:De,type:"warning",disabled:!Ie.value||!!I.value},{default:i(()=>[r("一键撤回")]),_:1},8,["disabled"])):(o(),g(b,{key:1,size:"default",onClick:Te,type:"success",disabled:!Ue.value||!!I.value},{default:i(()=>[r("提交文件")]),_:1},8,["disabled"])),d(b,{onClick:Be,size:"default"},{default:i(()=>[r("查询提交情况")]),_:1})]),s("div",Ht,[f.value.status&&f.value.format.length?(o(),g(S,{key:0},{default:i(()=>[r("限制格式为: "),s("span",Gt,k(f.value.format.join(", ")),1)]),_:1})):y("",!0),f.value.size?(o(),g(S,{key:1},{default:i(()=>[r("限制文件大小不超过: "),s("span",Jt,k(xe(we)(f.value.size)),1)]),_:1})):y("",!0),B.value?(o(),g(S,{key:2},{default:i(()=>[r("① 须保证选择的文件与提交时的文件一致"),qt,r(" ② 填写表单信息一致 "),Kt,r(" ③ 完全一模一样的文件的提交记录(内容md5+命名),将会一次性全部撤回")]),_:1})):(o(),g(S,{key:3},{default:i(()=>[r("① 选择完文件,点击 ”提交文件“即可 "),Yt,r(" ② "),Zt,l.template?(o(),c(F,{key:0},[Qt,r(" ③ "),s("strong",null,[d(b,{type:"primary",text:"",style:{color:"#85ce61"},size:"small",onClick:pe},{default:i(()=>[r("右下角可 “查看提交示例” ")]),_:1})])],64)):y("",!0)]),_:1}))]),s("div",Xt,[l.template?(o(),g(b,{key:0,type:"primary",text:"",style:{color:"#85ce61"},size:"small",onClick:pe},{default:i(()=>[r("查看提交示例")]),_:1})):y("",!0),B.value?(o(),g(b,{key:1,onClick:e[2]||(e[2]=m=>B.value=!1),size:"small",type:"primary",text:""},{default:i(()=>[r("正常提交")]),_:1})):(o(),g(b,{key:2,size:"small",onClick:e[3]||(e[3]=m=>B.value=!0),type:"primary",text:""},{default:i(()=>[r("我要撤回")]),_:1}))])])):y("",!0)])),[[Oe,Z.value]]):(o(),c("div",ea,[s("h1",ta,k(C.name),1)])),d(yt,{value:Y.value,"onUpdate:value":e[4]||(e[4]=m=>Y.value=m),title:"示例文件下载链接",link:ce.value},null,8,["value","link"]),s("div",aa,[d(lt,{type:"task"})])])}}});const ha=ct(sa,[["__scopeId","data-v-d3f704e9"]]);export{ha as default};
2
+ //# sourceMappingURL=index-43d1d27e.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-b0a4c236.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.3.4/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","<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 class=\"nav-item\"\n v-for=\"(n, idx) in pcNavs\"\n :key=\"idx\"\n @click=\"handleNav(idx)\"\n >\n {{ n.title }}\n </div>\n </nav>\n </div>\n </div>\n <!-- 有效 -->\n <div\n v-loading=\"isLoadingData\"\n element-loading-text=\"Loading...\"\n class=\"panel tc\"\n v-if=\"k\"\n >\n <!-- 任务名 -->\n <h1 class=\"name\">\n {{ taskInfo.name }}\n </h1>\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 hide-on-click-modal\n v-for=\"(img, idx) in imageList\"\n :key=\"img.uid\"\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=\"已经结束啦!\"> </el-empty>\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 :maxlength=\"14\"\n clearable\n show-word-limit\n :placeholder=\"`请输入 ${limitBindField}`\"\n v-model=\"validModal.peopleName\"\n ></el-input>\n </el-form-item>\n </el-form>\n </div>\n </div>\n <InfosForm :infos=\"infos\" :disabled=\"disableForm\"></InfosForm>\n </div>\n <el-upload\n style=\"max-width: 400px; margin: 0 auto\"\n :drag=\"!isMobile\"\n action=\"\"\n ref=\"fileUpload\"\n :on-change=\"handleChangeFile\"\n :before-remove=\"handleRemoveFile\"\n :on-exceed=\"handleExceed\"\n :auto-upload=\"false\"\n multiple\n :limit=\"limitUploadCount\"\n v-model:file-list=\"fileList\"\n >\n <el-button v-if=\"isMobile\" type=\"primary\">选择文件</el-button>\n <template v-else>\n <el-icon class=\"el-icon--upload\">\n <upload-filled />\n </el-icon>\n <div class=\"el-upload__text\">\n 将文件拖于此处 or <em>直接选择文件</em>\n </div>\n </template>\n <template #tip>\n <div class=\"p10\" v-show=\"!!calculateMd5Count\">\n <tip\n >还有\n {{ calculateMd5Count }}\n 个文件正在生成校验信息,请稍等(1G通常需要20s)</tip\n >\n </div>\n </template>\n </el-upload>\n <div class=\"p10\">\n <el-button\n v-if=\"isWithdraw\"\n size=\"default\"\n @click=\"startWithdraw\"\n type=\"warning\"\n :disabled=\"!allowWithdraw || !!calculateMd5Count\"\n >一键撤回</el-button\n >\n <el-button\n v-else\n size=\"default\"\n @click=\"submitUpload\"\n type=\"success\"\n :disabled=\"!allowUpload || !!calculateMd5Count\"\n >提交文件</el-button\n >\n <el-button @click=\"checkSubmitStatus\" size=\"default\"\n >查询提交情况</el-button\n >\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></tip\n >\n <tip v-if=\"formatData.size\"\n >限制文件大小不超过:\n <span style=\"color: red\">{{\n formatSize(formatData.size)\n }}</span></tip\n >\n <template v-if=\"isWithdraw\">\n <tip\n >① 须保证选择的文件与提交时的文件一致<br />\n ② 填写表单信息一致 <br />\n ③\n 完全一模一样的文件的提交记录(内容md5+命名),将会一次性全部撤回</tip\n >\n </template>\n <template v-else>\n <tip\n >① 选择完文件,点击 ”提交文件“即可 <br />\n ② <strong>选择大文件后需要等待一会儿才展示处理</strong>\n <template v-if=\"taskMoreInfo.template\"\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></template\n >\n </tip>\n </template>\n </div>\n <div class=\"withdraw\">\n <el-button\n type=\"primary\"\n text\n style=\"color: #85ce61\"\n v-if=\"taskMoreInfo.template\"\n size=\"small\"\n @click=\"downloadTemplate\"\n >查看提交示例</el-button\n >\n <el-button\n v-if=\"isWithdraw\"\n @click=\"isWithdraw = false\"\n size=\"small\"\n type=\"primary\"\n text\n >正常提交</el-button\n >\n <el-button\n v-else\n size=\"small\"\n @click=\"isWithdraw = true\"\n type=\"primary\"\n text\n >我要撤回</el-button\n >\n </div>\n </div>\n </div>\n <!-- 无效任务 -->\n <div class=\"panel tc\" v-else>\n <h1 class=\"name\">\n {{ taskInfo.name }}\n </h1>\n </div>\n <LinkDialog\n v-model:value=\"showLinkModel\"\n title=\"示例文件下载链接\"\n :link=\"templateLink\"\n ></LinkDialog>\n <div style=\"padding-top: 20px\">\n <home-footer type=\"task\"></home-footer>\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport type { UploadUserFile, UploadInstance, FormInstance } 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 {\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 Tip from '../dashboard/tasks/components/infoPanel/tip.vue'\nimport InfosForm from '@/components/InfosForm/index.vue'\n\nconst $store = useStore()\nconst isMobile = computed(() => $store.getters['public/isMobile'])\n// 顶部导航\nconst $router = useRouter()\nconst $route = useRoute()\nconst pcNavs = reactive([\n {\n title: '我也要收集',\n path: 'https://docs.ep.sugarat.top/'\n }\n])\nconst 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})\nconst refreshWaitTime = (loop = true) => {\n if (taskMoreInfo?.ddl) {\n const date = new Date(taskMoreInfo.ddl)\n waitTime.value = date.getTime() - Date.now()\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\nconst 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})\nconst 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\nconst 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 } 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\nconst submitUpload = async () => {\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)\nconst handleChangeFile = (file: any) => {\n // 校验文件后缀名\n const { name } = file\n if (formatData.value.format.length && formatData.value.status) {\n const suffix = getFileSuffix(name)\n if (!formatData.value.format.find((v) => suffix.endsWith(v))) {\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)\nconst handleExceed = () => {\n ElMessage.warning(\n `一次提交最多只能选择${limitUploadCount.value}个文件,请移除已经上传成功的或刷新页面`\n )\n}\nconst showLinkModel = ref(false)\nconst templateLink = ref('')\nconst 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 } 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}\nconst 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)\nconst startWithdraw = async () => {\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// 查询提交情况\nconst checkSubmitStatus = async () => {\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 } else {\n ElMessage.warning('还未提交过哟')\n }\n }\n )\n}\nconst isLoadingData = ref(false)\nconst readyRefresh = ref(false)\nconst 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}\nconst 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}\nconst handleBlur = () => {\n readyRefresh.value = true\n}\nconst 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 } catch {\n tipData.text = ''\n tipData.imgs = []\n imageList.value = []\n }\n }\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 })\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<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","$store","useStore","isMobile","computed","$router","useRouter","$route","useRoute","pcNavs","reactive","handleNav","idx","taskInfo","taskMoreInfo","formatData","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","i","refreshTaskMoreInfo","hot","TaskApi","parseInfo","handleBlur","handleFocus","timeInfo","tipData","imageList","watch","parseData","PublicApi","url","e","onMounted","err","onUnmounted"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index-43d1d27e.js","sources":["../../node_modules/.pnpm/@element-plus+icons-vue@1.1.4_vue@3.3.4/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","<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 class=\"nav-item\"\n v-for=\"(n, idx) in pcNavs\"\n :key=\"idx\"\n @click=\"handleNav(idx)\"\n >\n {{ n.title }}\n </div>\n </nav>\n </div>\n </div>\n <!-- 有效 -->\n <div\n v-loading=\"isLoadingData\"\n element-loading-text=\"Loading...\"\n class=\"panel tc\"\n v-if=\"k\"\n >\n <!-- 任务名 -->\n <h1 class=\"name\">\n {{ taskInfo.name }}\n </h1>\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 hide-on-click-modal\n v-for=\"(img, idx) in imageList\"\n :key=\"img.uid\"\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=\"已经结束啦!\"> </el-empty>\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 :maxlength=\"14\"\n clearable\n show-word-limit\n :placeholder=\"`请输入 ${limitBindField}`\"\n v-model=\"validModal.peopleName\"\n ></el-input>\n </el-form-item>\n </el-form>\n </div>\n </div>\n <InfosForm :infos=\"infos\" :disabled=\"disableForm\"></InfosForm>\n </div>\n <el-upload\n style=\"max-width: 400px; margin: 0 auto\"\n :drag=\"!isMobile\"\n action=\"\"\n ref=\"fileUpload\"\n :on-change=\"handleChangeFile\"\n :before-remove=\"handleRemoveFile\"\n :on-exceed=\"handleExceed\"\n :auto-upload=\"false\"\n multiple\n :limit=\"limitUploadCount\"\n v-model:file-list=\"fileList\"\n >\n <el-button v-if=\"isMobile\" type=\"primary\">选择文件</el-button>\n <template v-else>\n <el-icon class=\"el-icon--upload\">\n <upload-filled />\n </el-icon>\n <div class=\"el-upload__text\">\n 将文件拖于此处 or <em>直接选择文件</em>\n </div>\n </template>\n <template #tip>\n <div class=\"p10\" v-show=\"!!calculateMd5Count\">\n <tip\n >还有\n {{ calculateMd5Count }}\n 个文件正在生成校验信息,请稍等(1G通常需要20s)</tip\n >\n </div>\n </template>\n </el-upload>\n <div class=\"p10\">\n <el-button\n v-if=\"isWithdraw\"\n size=\"default\"\n @click=\"startWithdraw\"\n type=\"warning\"\n :disabled=\"!allowWithdraw || !!calculateMd5Count\"\n >一键撤回</el-button\n >\n <el-button\n v-else\n size=\"default\"\n @click=\"submitUpload\"\n type=\"success\"\n :disabled=\"!allowUpload || !!calculateMd5Count\"\n >提交文件</el-button\n >\n <el-button @click=\"checkSubmitStatus\" size=\"default\"\n >查询提交情况</el-button\n >\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></tip\n >\n <tip v-if=\"formatData.size\"\n >限制文件大小不超过:\n <span style=\"color: red\">{{\n formatSize(formatData.size)\n }}</span></tip\n >\n <template v-if=\"isWithdraw\">\n <tip\n >① 须保证选择的文件与提交时的文件一致<br />\n ② 填写表单信息一致 <br />\n ③\n 完全一模一样的文件的提交记录(内容md5+命名),将会一次性全部撤回</tip\n >\n </template>\n <template v-else>\n <tip\n >① 选择完文件,点击 ”提交文件“即可 <br />\n ② <strong>选择大文件后需要等待一会儿才展示处理</strong>\n <template v-if=\"taskMoreInfo.template\"\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></template\n >\n </tip>\n </template>\n </div>\n <div class=\"withdraw\">\n <el-button\n type=\"primary\"\n text\n style=\"color: #85ce61\"\n v-if=\"taskMoreInfo.template\"\n size=\"small\"\n @click=\"downloadTemplate\"\n >查看提交示例</el-button\n >\n <el-button\n v-if=\"isWithdraw\"\n @click=\"isWithdraw = false\"\n size=\"small\"\n type=\"primary\"\n text\n >正常提交</el-button\n >\n <el-button\n v-else\n size=\"small\"\n @click=\"isWithdraw = true\"\n type=\"primary\"\n text\n >我要撤回</el-button\n >\n </div>\n </div>\n </div>\n <!-- 无效任务 -->\n <div class=\"panel tc\" v-else>\n <h1 class=\"name\">\n {{ taskInfo.name }}\n </h1>\n </div>\n <LinkDialog\n v-model:value=\"showLinkModel\"\n title=\"示例文件下载链接\"\n :link=\"templateLink\"\n ></LinkDialog>\n <div style=\"padding-top: 20px\">\n <home-footer type=\"task\"></home-footer>\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport type { UploadUserFile, UploadInstance, FormInstance } 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 {\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 Tip from '../dashboard/tasks/components/infoPanel/tip.vue'\nimport InfosForm from '@/components/InfosForm/index.vue'\n\nconst $store = useStore()\nconst isMobile = computed(() => $store.getters['public/isMobile'])\n// 顶部导航\nconst $router = useRouter()\nconst $route = useRoute()\nconst pcNavs = reactive([\n {\n title: '我也要收集',\n path: 'https://docs.ep.sugarat.top/'\n }\n])\nconst 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})\nconst refreshWaitTime = (loop = true) => {\n if (taskMoreInfo?.ddl) {\n const date = new Date(taskMoreInfo.ddl)\n waitTime.value = date.getTime() - Date.now()\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\nconst 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})\nconst 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\nconst 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 } 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\nconst submitUpload = async () => {\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)\nconst handleChangeFile = (file: any) => {\n // 校验文件后缀名\n const { name } = file\n if (formatData.value.format.length && formatData.value.status) {\n const suffix = getFileSuffix(name)\n if (!formatData.value.format.find((v) => suffix.endsWith(v))) {\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)\nconst handleExceed = () => {\n ElMessage.warning(\n `一次提交最多只能选择${limitUploadCount.value}个文件,请移除已经上传成功的或刷新页面`\n )\n}\nconst showLinkModel = ref(false)\nconst templateLink = ref('')\nconst 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 } 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}\nconst 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)\nconst startWithdraw = async () => {\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// 查询提交情况\nconst checkSubmitStatus = async () => {\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 } else {\n ElMessage.warning('还未提交过哟')\n }\n }\n )\n}\nconst isLoadingData = ref(false)\nconst readyRefresh = ref(false)\nconst 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}\nconst 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}\nconst handleBlur = () => {\n readyRefresh.value = true\n}\nconst 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 } catch {\n tipData.text = ''\n tipData.imgs = []\n imageList.value = []\n }\n }\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 })\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<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","$store","useStore","isMobile","computed","$router","useRouter","$route","useRoute","pcNavs","reactive","handleNav","idx","taskInfo","taskMoreInfo","formatData","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","i","refreshTaskMoreInfo","hot","TaskApi","parseInfo","handleBlur","handleFocus","timeInfo","tipData","imageList","watch","parseData","PublicApi","url","e","onMounted","err","onUnmounted"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- import{d as v,h as b,u as w,O as i,Z as x,o as g,bq as d,c as n,a as o,j as _,w as y,F as C,C as D,y as R,f as l,b as S,t as r,_ as k}from"./index-62c7029f.js";import{E}from"./el-switch-2eda0412.js";import"./validator-853854a1.js";const B={class:"user"},N={class:"panel"},V={class:"routes"},$={class:"title"},F={class:"path"},M=v({__name:"index",setup(O){const u=b(),p=w(),h=i(()=>p.options.routes.filter(e=>{var t;return(t=e.meta)==null?void 0:t.allowDisabled})),c=x([]),m=e=>{d.addDisabledRoute(e.path,!e.disabled).then(()=>{e.disabled=!e.disabled})};return g(()=>{for(const e of h.value)d.checkDisabledRoute(e.path).then(t=>{var a;c.push({path:e.path,name:e.name.toString(),title:e.meta.title,disabled:!!((a=t.data)!=null&&a.status)})})}),i(()=>u.getters["public/isMobile"]),(e,t)=>{const a=R,f=E;return l(),n("div",B,[o("div",N,[_(a,null,{default:y(()=>[S("部分路由管理")]),_:1}),o("ul",V,[(l(!0),n(C,null,D(c,s=>(l(),n("li",{key:s.name},[_(f,{onChange:j=>m(s),value:!s.disabled,style:{"--el-switch-on-color":"#13ce66","--el-switch-off-color":"#ff4949"}},null,8,["onChange","value"]),o("span",$,r(s.title),1),o("span",F,r(s.path),1)]))),128))])])])}}});const L=k(M,[["__scopeId","data-v-6edac847"]]);export{L as default};
2
- //# sourceMappingURL=index-f47a54b0.js.map
1
+ import{d as v,h as b,u as w,O as i,Z as x,o as g,bq as d,c as n,a as o,j as _,w as y,F as C,C as D,y as R,f as l,b as S,t as r,_ as k}from"./index-1639ad54.js";import{E}from"./el-switch-abdd5a33.js";import"./validator-5c60ab85.js";const B={class:"user"},N={class:"panel"},V={class:"routes"},$={class:"title"},F={class:"path"},M=v({__name:"index",setup(O){const u=b(),p=w(),h=i(()=>p.options.routes.filter(e=>{var t;return(t=e.meta)==null?void 0:t.allowDisabled})),c=x([]),m=e=>{d.addDisabledRoute(e.path,!e.disabled).then(()=>{e.disabled=!e.disabled})};return g(()=>{for(const e of h.value)d.checkDisabledRoute(e.path).then(t=>{var a;c.push({path:e.path,name:e.name.toString(),title:e.meta.title,disabled:!!((a=t.data)!=null&&a.status)})})}),i(()=>u.getters["public/isMobile"]),(e,t)=>{const a=R,f=E;return l(),n("div",B,[o("div",N,[_(a,null,{default:y(()=>[S("部分路由管理")]),_:1}),o("ul",V,[(l(!0),n(C,null,D(c,s=>(l(),n("li",{key:s.name},[_(f,{onChange:j=>m(s),value:!s.disabled,style:{"--el-switch-on-color":"#13ce66","--el-switch-off-color":"#ff4949"}},null,8,["onChange","value"]),o("span",$,r(s.title),1),o("span",F,r(s.path),1)]))),128))])])])}}});const L=k(M,[["__scopeId","data-v-6edac847"]]);export{L as default};
2
+ //# sourceMappingURL=index-488b0f9e.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-f47a54b0.js","sources":["../../src/pages/dashboard/manage/config/index.vue"],"sourcesContent":["<template>\n <div class=\"user\">\n <div class=\"panel\">\n <el-divider>部分路由管理</el-divider>\n <ul class=\"routes\">\n <li v-for=\"r in showRoutes\" :key=\"r.name\">\n <el-switch\n @change=\"handleChangeRoute(r)\"\n :value=\"!r.disabled\"\n style=\"\n --el-switch-on-color: #13ce66;\n --el-switch-off-color: #ff4949;\n \"\n />\n <span class=\"title\">{{ r.title }}</span>\n <span class=\"path\">{{ r.path }}</span>\n </li>\n </ul>\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { ElMessage } from 'element-plus'\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { useStore } from 'vuex'\nimport { useRouter } from 'vue-router'\nimport { SuperOverviewApi } from '@/apis'\n\nconst $store = useStore()\nconst $router = useRouter()\nconst routes = computed(() =>\n $router.options.routes.filter((v) => v.meta?.allowDisabled)\n)\nconst showRoutes = reactive<\n {\n path: string\n name: string\n title: string\n disabled: boolean\n }[]\n>([])\n\nconst handleChangeRoute = (r: typeof showRoutes[0]) => {\n SuperOverviewApi.addDisabledRoute(r.path, !r.disabled).then(() => {\n r.disabled = !r.disabled\n })\n}\nonMounted(() => {\n for (const r of routes.value) {\n SuperOverviewApi.checkDisabledRoute(r.path).then((v) => {\n showRoutes.push({\n path: r.path,\n name: r.name.toString(),\n title: r.meta.title,\n disabled: !!v.data?.status\n })\n })\n }\n})\nconst isMobile = computed(() => $store.getters['public/isMobile'])\n</script>\n\n<style scoped lang=\"scss\">\n@media screen and (max-width: 700px) {\n .user {\n margin-top: 40px !important;\n }\n}\n\n.user {\n margin: 0 auto;\n}\n\n.panel {\n max-width: 1256px;\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n border-radius: 4px;\n}\n\n.routes {\n max-width: 500px;\n margin: 0 auto;\n li {\n display: flex;\n padding: 20px;\n align-items: center;\n .title {\n font-weight: bold;\n margin: 0 10px;\n }\n }\n}\n</style>\n"],"names":["$store","useStore","$router","useRouter","routes","computed","v","_a","showRoutes","reactive","handleChangeRoute","r","SuperOverviewApi","onMounted"],"mappings":"mWA4BA,MAAAA,EAAAC,IACAC,EAAAC,IACAC,EAAAC,EAAe,IAAAH,EAAA,QAAA,OAAA,OAAAI,GAAA,OAAA,OAAAC,EAAAD,EAAA,OAAA,YAAAC,EAAA,cAAA,CAC6C,EAE5DC,EAAAC,EAAA,CAAA,CAAA,EASAC,EAAAC,GAAA,CACEC,EAAA,iBAAAD,EAAA,KAAA,CAAAA,EAAA,QAAA,EAAA,KAAA,IAAA,CACEA,EAAA,SAAA,CAAAA,EAAA,QAAgB,CAAA,CACjB,EAEH,OAAAE,EAAA,IAAA,CACE,UAAAF,KAAAP,EAAA,MACEQ,EAAA,mBAAAD,EAAA,IAAA,EAAA,KAAAL,GAAA,OACEE,EAAA,KAAA,CAAgB,KAAAG,EAAA,KACN,KAAAA,EAAA,KAAA,SAAA,EACc,MAAAA,EAAA,KAAA,MACR,SAAA,CAAA,GAAAJ,EAAAD,EAAA,OAAA,MAAAC,EAAA,OACM,CAAA,CACrB,CAAA,CAEL,CAAA,EAEFF,EAAA,IAAAL,EAAA,QAAA,iBAAA,CAAA"}
1
+ {"version":3,"file":"index-488b0f9e.js","sources":["../../src/pages/dashboard/manage/config/index.vue"],"sourcesContent":["<template>\n <div class=\"user\">\n <div class=\"panel\">\n <el-divider>部分路由管理</el-divider>\n <ul class=\"routes\">\n <li v-for=\"r in showRoutes\" :key=\"r.name\">\n <el-switch\n @change=\"handleChangeRoute(r)\"\n :value=\"!r.disabled\"\n style=\"\n --el-switch-on-color: #13ce66;\n --el-switch-off-color: #ff4949;\n \"\n />\n <span class=\"title\">{{ r.title }}</span>\n <span class=\"path\">{{ r.path }}</span>\n </li>\n </ul>\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { ElMessage } from 'element-plus'\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { useStore } from 'vuex'\nimport { useRouter } from 'vue-router'\nimport { SuperOverviewApi } from '@/apis'\n\nconst $store = useStore()\nconst $router = useRouter()\nconst routes = computed(() =>\n $router.options.routes.filter((v) => v.meta?.allowDisabled)\n)\nconst showRoutes = reactive<\n {\n path: string\n name: string\n title: string\n disabled: boolean\n }[]\n>([])\n\nconst handleChangeRoute = (r: typeof showRoutes[0]) => {\n SuperOverviewApi.addDisabledRoute(r.path, !r.disabled).then(() => {\n r.disabled = !r.disabled\n })\n}\nonMounted(() => {\n for (const r of routes.value) {\n SuperOverviewApi.checkDisabledRoute(r.path).then((v) => {\n showRoutes.push({\n path: r.path,\n name: r.name.toString(),\n title: r.meta.title,\n disabled: !!v.data?.status\n })\n })\n }\n})\nconst isMobile = computed(() => $store.getters['public/isMobile'])\n</script>\n\n<style scoped lang=\"scss\">\n@media screen and (max-width: 700px) {\n .user {\n margin-top: 40px !important;\n }\n}\n\n.user {\n margin: 0 auto;\n}\n\n.panel {\n max-width: 1256px;\n padding: 1em;\n background-color: #fff;\n margin: 10px auto;\n box-sizing: border-box;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n border-radius: 4px;\n}\n\n.routes {\n max-width: 500px;\n margin: 0 auto;\n li {\n display: flex;\n padding: 20px;\n align-items: center;\n .title {\n font-weight: bold;\n margin: 0 10px;\n }\n }\n}\n</style>\n"],"names":["$store","useStore","$router","useRouter","routes","computed","v","_a","showRoutes","reactive","handleChangeRoute","r","SuperOverviewApi","onMounted"],"mappings":"mWA4BA,MAAAA,EAAAC,IACAC,EAAAC,IACAC,EAAAC,EAAe,IAAAH,EAAA,QAAA,OAAA,OAAAI,GAAA,OAAA,OAAAC,EAAAD,EAAA,OAAA,YAAAC,EAAA,cAAA,CAC6C,EAE5DC,EAAAC,EAAA,CAAA,CAAA,EASAC,EAAAC,GAAA,CACEC,EAAA,iBAAAD,EAAA,KAAA,CAAAA,EAAA,QAAA,EAAA,KAAA,IAAA,CACEA,EAAA,SAAA,CAAAA,EAAA,QAAgB,CAAA,CACjB,EAEH,OAAAE,EAAA,IAAA,CACE,UAAAF,KAAAP,EAAA,MACEQ,EAAA,mBAAAD,EAAA,IAAA,EAAA,KAAAL,GAAA,OACEE,EAAA,KAAA,CAAgB,KAAAG,EAAA,KACN,KAAAA,EAAA,KAAA,SAAA,EACc,MAAAA,EAAA,KAAA,MACR,SAAA,CAAA,GAAAJ,EAAAD,EAAA,OAAA,MAAAC,EAAA,OACM,CAAA,CACrB,CAAA,CAEL,CAAA,EAEFF,EAAA,IAAAL,EAAA,QAAA,iBAAA,CAAA"}
@@ -1,2 +1,2 @@
1
- import{a4 as k,d as oe,h as ne,Z as $,r as i,O as D,o as ue,c as T,a as u,j as l,w as s,k as U,v as ie,p as de,e as re,f as E,F,C as N,D as R,b as d,t as O,s as j,E as P,x as pe,_ as ce}from"./index-62c7029f.js";import{E as fe,a as _e}from"./el-form-item-f40006bf.js";import{E as me}from"./el-dialog-463960e0.js";import{E as ve,s as he}from"./el-pagination-ffb99240.js";import{E as ge,a as be}from"./el-select-7d894fd0.js";import{E as we,a as ye}from"./el-table-column-22352e92.js";import{W as m}from"./index-9e6bd406.js";import"./isEqual-9c466456.js";import"./index-6d7ac779.js";import"./validator-853854a1.js";function Ve(n){return k.post("/wish/add",n)}function Ee(){return k.get("/wish/all")}function Ce(n,v){return k.put("/wish/update",{id:n,status:v})}function We(n,v,r){return k.put("/wish/update/".concat(n),{title:v,des:r})}const L={addWish:Ve,findAllWish:Ee,updateWishStatus:Ce,updateWishDes:We},xe=n=>(de("data-v-8f592632"),n=n(),re(),n),Se={class:"user"},De={class:"panel"},ke={class:"p10 log-filter"},ze={class:"item"},Ie=xe(()=>u("span",{class:"label"},"状态",-1)),$e={class:"item"},Te={class:"text-btn-list"},Ue={class:"flex fc p10"},Le={class:"tc"},Ae={class:"dialog-footer"},Be={class:"dialog-footer"},Z="80px",Me=oe({__name:"index",setup(n){const v=ne(),r=$([]),q=()=>{L.findAllWish().then(a=>{r.splice(0,r.length,...a.data)})},C=i(-1),W=i(""),z=$([{label:"待审核",type:m.REVIEW},{label:"待开始",type:m.WAIT},{label:"关闭",type:m.CLOSE},{label:"已上线",type:m.END},{label:"开发中",type:m.START}]),I=D(()=>r.filter(a=>a.status===C.value||C.value===-1).filter(a=>{const{createDate:t,title:p,des:S,contact:y}=a;return W.value.length===0?!0:"".concat(j(new Date(t))," ").concat(p," ").concat(S," ").concat(y).includes(W.value)})),h=i(10),G=a=>{h.value=a},H=D(()=>Math.ceil(I.value.length/h.value)),x=i(1),J=D(()=>{const a=(x.value-1)*h.value,t=x.value*h.value;return I.value.slice(a,t)}),K=a=>{x.value=a},g=i(!1),c=i(""),b=i(m.REVIEW),Q=z,X=(a,t)=>{c.value=a,b.value=t,g.value=!0},Y=()=>{const a=r.find(t=>t.id===c.value);a.status=b.value,g.value=!1,L.updateWishStatus(c.value,b.value).then(()=>{P.success("修改成功")})},w=i(!1),o=$({title:"",des:""}),ee=(a,t,p)=>{c.value=a,o.title=t,o.des=p,w.value=!0},te=()=>{const a=r.find(t=>t.id===c.value);L.updateWishDes(c.value,o.title,o.des).then(()=>{w.value=!1,a.title=o.title,a.des=o.des,P.success("修改成功")})};ue(()=>{q()});const A=D(()=>v.getters["public/isMobile"]);return(a,t)=>{const p=be,S=ge,y=ie,f=ye,_=pe,le=we,ae=ve,B=me,M=fe,se=_e;return E(),T("div",Se,[u("div",De,[u("div",ke,[u("span",ze,[Ie,l(S,{modelValue:C.value,"onUpdate:modelValue":t[0]||(t[0]=e=>C.value=e),size:"default",placeholder:"请选择筛选状态"},{default:s(()=>[l(p,{label:"全部",value:-1}),(E(!0),T(F,null,N(z,(e,V)=>(E(),R(p,{key:V,label:e.label,value:e.type},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),u("span",$e,[l(y,{size:"default",clearable:"",placeholder:"请输入要检索的内容","prefix-icon":U(he),modelValue:W.value,"onUpdate:modelValue":t[1]||(t[1]=e=>W.value=e)},null,8,["prefix-icon","modelValue"])])]),l(le,{height:"550",stripe:"",border:"","default-sort":{prop:"date",order:"descending"},data:J.value,style:{width:"100%"}},{default:s(()=>[l(f,{sortable:"",prop:"createDate",label:"提交时间",width:"190"},{default:s(e=>[d(O(e.row.createDate&&U(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=>[d(O(z.find(V=>V.type===e.row.status).label),1)]),_:1}),l(f,{fixed:"right",label:"操作",width:"100"},{default:s(e=>[u("div",Te,[l(_,{onClick:V=>X(e.row.id,e.row.status),type:"primary",text:"",size:"small"},{default:s(()=>[d("修改状态 ")]),_:2},1032,["onClick"]),l(_,{onClick:V=>ee(e.row.id,e.row.title,e.row.des),type:"primary",text:"",size:"small"},{default:s(()=>[d(" 修改描述 ")]),_:2},1032,["onClick"])])]),_:1})]),_:1},8,["data"]),u("div",Ue,[l(ae,{"current-page":x.value,onCurrentChange:K,background:"","page-count":H.value,"page-sizes":[10,50,100,200],"page-size":h.value,onSizeChange:G,total:I.value.length,layout:"total, sizes, prev, pager, next, jumper"},null,8,["current-page","page-count","page-size","total"])])]),l(B,{fullscreen:A.value,center:"",title:"状态修改",modelValue:g.value,"onUpdate:modelValue":t[4]||(t[4]=e=>g.value=e)},{footer:s(()=>[u("span",Ae,[l(_,{onClick:t[3]||(t[3]=e=>g.value=!1)},{default:s(()=>[d("取 消")]),_:1}),l(_,{type:"primary",onClick:Y},{default:s(()=>[d("确 定")]),_:1})])]),default:s(()=>[u("div",Le,[l(S,{modelValue:b.value,"onUpdate:modelValue":t[2]||(t[2]=e=>b.value=e),placeholder:"请选择新状态"},{default:s(()=>[(E(!0),T(F,null,N(U(Q),e=>(E(),R(p,{key:e.type,label:e.label,value:e.type},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])]),_:1},8,["fullscreen","modelValue"]),l(B,{title:"需求信息",modelValue:w.value,"onUpdate:modelValue":t[8]||(t[8]=e=>w.value=e),fullscreen:A.value},{footer:s(()=>[u("span",Be,[l(_,{onClick:t[7]||(t[7]=e=>w.value=!1)},{default:s(()=>[d("取 消")]),_:1}),l(_,{type:"primary",onClick:te},{default:s(()=>[d("确 定")]),_:1})])]),default:s(()=>[l(se,{model:o},{default:s(()=>[l(M,{label:"需求","label-width":Z},{default:s(()=>[l(y,{placeholder:"一句简单明了的话概括一下",modelValue:o.title,"onUpdate:modelValue":t[5]||(t[5]=e=>o.title=e)},null,8,["modelValue"])]),_:1}),l(M,{label:"详细描述","label-width":Z},{default:s(()=>[l(y,{placeholder:"用朴素的话语进一步描述你的需求",type:"textarea",modelValue:o.des,"onUpdate:modelValue":t[6]||(t[6]=e=>o.des=e)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","fullscreen"])])}}});const Je=ce(Me,[["__scopeId","data-v-8f592632"]]);export{Je as default};
2
- //# sourceMappingURL=index-75b8c91c.js.map
1
+ import{a4 as k,d as oe,h as ne,Z as $,r as i,O as D,o as ue,c as T,a as u,j as l,w as s,k as U,v as ie,p as de,e as re,f as E,F,C as N,D as R,b as d,t as O,s as j,E as P,x as pe,_ as ce}from"./index-1639ad54.js";import{E as fe,a as _e}from"./el-form-item-fb230be3.js";import{E as me}from"./el-dialog-c11c4af2.js";import{E as ve,s as he}from"./el-pagination-85149e11.js";import{E as ge,a as be}from"./el-select-2a16e5df.js";import{E as we,a as ye}from"./el-table-column-19feeab8.js";import{W as m}from"./index-9e6bd406.js";import"./isEqual-95d6c129.js";import"./index-68448dbd.js";import"./validator-5c60ab85.js";function Ve(n){return k.post("/wish/add",n)}function Ee(){return k.get("/wish/all")}function Ce(n,v){return k.put("/wish/update",{id:n,status:v})}function We(n,v,r){return k.put("/wish/update/".concat(n),{title:v,des:r})}const L={addWish:Ve,findAllWish:Ee,updateWishStatus:Ce,updateWishDes:We},xe=n=>(de("data-v-8f592632"),n=n(),re(),n),Se={class:"user"},De={class:"panel"},ke={class:"p10 log-filter"},ze={class:"item"},Ie=xe(()=>u("span",{class:"label"},"状态",-1)),$e={class:"item"},Te={class:"text-btn-list"},Ue={class:"flex fc p10"},Le={class:"tc"},Ae={class:"dialog-footer"},Be={class:"dialog-footer"},Z="80px",Me=oe({__name:"index",setup(n){const v=ne(),r=$([]),q=()=>{L.findAllWish().then(a=>{r.splice(0,r.length,...a.data)})},C=i(-1),W=i(""),z=$([{label:"待审核",type:m.REVIEW},{label:"待开始",type:m.WAIT},{label:"关闭",type:m.CLOSE},{label:"已上线",type:m.END},{label:"开发中",type:m.START}]),I=D(()=>r.filter(a=>a.status===C.value||C.value===-1).filter(a=>{const{createDate:t,title:p,des:S,contact:y}=a;return W.value.length===0?!0:"".concat(j(new Date(t))," ").concat(p," ").concat(S," ").concat(y).includes(W.value)})),h=i(10),G=a=>{h.value=a},H=D(()=>Math.ceil(I.value.length/h.value)),x=i(1),J=D(()=>{const a=(x.value-1)*h.value,t=x.value*h.value;return I.value.slice(a,t)}),K=a=>{x.value=a},g=i(!1),c=i(""),b=i(m.REVIEW),Q=z,X=(a,t)=>{c.value=a,b.value=t,g.value=!0},Y=()=>{const a=r.find(t=>t.id===c.value);a.status=b.value,g.value=!1,L.updateWishStatus(c.value,b.value).then(()=>{P.success("修改成功")})},w=i(!1),o=$({title:"",des:""}),ee=(a,t,p)=>{c.value=a,o.title=t,o.des=p,w.value=!0},te=()=>{const a=r.find(t=>t.id===c.value);L.updateWishDes(c.value,o.title,o.des).then(()=>{w.value=!1,a.title=o.title,a.des=o.des,P.success("修改成功")})};ue(()=>{q()});const A=D(()=>v.getters["public/isMobile"]);return(a,t)=>{const p=be,S=ge,y=ie,f=ye,_=pe,le=we,ae=ve,B=me,M=fe,se=_e;return E(),T("div",Se,[u("div",De,[u("div",ke,[u("span",ze,[Ie,l(S,{modelValue:C.value,"onUpdate:modelValue":t[0]||(t[0]=e=>C.value=e),size:"default",placeholder:"请选择筛选状态"},{default:s(()=>[l(p,{label:"全部",value:-1}),(E(!0),T(F,null,N(z,(e,V)=>(E(),R(p,{key:V,label:e.label,value:e.type},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),u("span",$e,[l(y,{size:"default",clearable:"",placeholder:"请输入要检索的内容","prefix-icon":U(he),modelValue:W.value,"onUpdate:modelValue":t[1]||(t[1]=e=>W.value=e)},null,8,["prefix-icon","modelValue"])])]),l(le,{height:"550",stripe:"",border:"","default-sort":{prop:"date",order:"descending"},data:J.value,style:{width:"100%"}},{default:s(()=>[l(f,{sortable:"",prop:"createDate",label:"提交时间",width:"190"},{default:s(e=>[d(O(e.row.createDate&&U(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=>[d(O(z.find(V=>V.type===e.row.status).label),1)]),_:1}),l(f,{fixed:"right",label:"操作",width:"100"},{default:s(e=>[u("div",Te,[l(_,{onClick:V=>X(e.row.id,e.row.status),type:"primary",text:"",size:"small"},{default:s(()=>[d("修改状态 ")]),_:2},1032,["onClick"]),l(_,{onClick:V=>ee(e.row.id,e.row.title,e.row.des),type:"primary",text:"",size:"small"},{default:s(()=>[d(" 修改描述 ")]),_:2},1032,["onClick"])])]),_:1})]),_:1},8,["data"]),u("div",Ue,[l(ae,{"current-page":x.value,onCurrentChange:K,background:"","page-count":H.value,"page-sizes":[10,50,100,200],"page-size":h.value,onSizeChange:G,total:I.value.length,layout:"total, sizes, prev, pager, next, jumper"},null,8,["current-page","page-count","page-size","total"])])]),l(B,{fullscreen:A.value,center:"",title:"状态修改",modelValue:g.value,"onUpdate:modelValue":t[4]||(t[4]=e=>g.value=e)},{footer:s(()=>[u("span",Ae,[l(_,{onClick:t[3]||(t[3]=e=>g.value=!1)},{default:s(()=>[d("取 消")]),_:1}),l(_,{type:"primary",onClick:Y},{default:s(()=>[d("确 定")]),_:1})])]),default:s(()=>[u("div",Le,[l(S,{modelValue:b.value,"onUpdate:modelValue":t[2]||(t[2]=e=>b.value=e),placeholder:"请选择新状态"},{default:s(()=>[(E(!0),T(F,null,N(U(Q),e=>(E(),R(p,{key:e.type,label:e.label,value:e.type},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])]),_:1},8,["fullscreen","modelValue"]),l(B,{title:"需求信息",modelValue:w.value,"onUpdate:modelValue":t[8]||(t[8]=e=>w.value=e),fullscreen:A.value},{footer:s(()=>[u("span",Be,[l(_,{onClick:t[7]||(t[7]=e=>w.value=!1)},{default:s(()=>[d("取 消")]),_:1}),l(_,{type:"primary",onClick:te},{default:s(()=>[d("确 定")]),_:1})])]),default:s(()=>[l(se,{model:o},{default:s(()=>[l(M,{label:"需求","label-width":Z},{default:s(()=>[l(y,{placeholder:"一句简单明了的话概括一下",modelValue:o.title,"onUpdate:modelValue":t[5]||(t[5]=e=>o.title=e)},null,8,["modelValue"])]),_:1}),l(M,{label:"详细描述","label-width":Z},{default:s(()=>[l(y,{placeholder:"用朴素的话语进一步描述你的需求",type:"textarea",modelValue:o.des,"onUpdate:modelValue":t[6]||(t[6]=e=>o.des=e)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","fullscreen"])])}}});const Je=ce(Me,[["__scopeId","data-v-8f592632"]]);export{Je as default};
2
+ //# sourceMappingURL=index-4b1f55ea.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-75b8c91c.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","<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\"></el-option>\n <el-option v-for=\"(item, idx) in logTypeList\" :key=\"idx\" :label=\"item.label\" :value=\"item.type\"></el-option>\n </el-select>\n </span>\n <span class=\"item\">\n <el-input size=\"default\" clearable placeholder=\"请输入要检索的内容\" :prefix-icon=\"Search\" v-model=\"searchWord\">\n </el-input>\n </span>\n </div>\n <el-table height=\"550\" stripe border :default-sort=\"{ prop: 'date', order: 'descending' }\" :data=\"pageWishes\"\n style=\"width: 100%\">\n <el-table-column sortable prop=\"createDate\" label=\"提交时间\" width=\"190\">\n <template #default=\"scope\">{{ scope.row.createDate && formatDate(new Date(scope.row.createDate)) }}</template>\n </el-table-column>\n <el-table-column prop=\"title\" label=\"标题\" width=\"120\"></el-table-column>\n <el-table-column prop=\"des\" label=\"详细描述\"></el-table-column>\n <el-table-column prop=\"contact\" label=\"联系方式\"></el-table-column>\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 @click=\"handleChangeStatus(scope.row.id, scope.row.status)\" type=\"primary\" text size=\"small\">修改状态\n </el-button>\n <el-button @click=\"handleRewriteDes(scope.row.id, scope.row.title, scope.row.des)\" type=\"primary\" text\n size=\"small\">\n 修改描述\n </el-button>\n </div>\n </template>\n </el-table-column>\n </el-table>\n <div class=\"flex fc p10\">\n <el-pagination :current-page=\"pageCurrent\" @current-change=\"handlePageChange\" background :page-count=\"pageCount\"\n :page-sizes=\"[10, 50, 100, 200]\" :page-size=\"pageSize\" @size-change=\"handleSizeChange\"\n :total=\"filterWishes.length\" layout=\"total, sizes, prev, pager, next, jumper\"></el-pagination>\n </div>\n </div>\n <!-- 状态修改弹窗 -->\n <el-dialog :fullscreen=\"isMobile\" center title=\"状态修改\" v-model=\"showWishStatusDialog\">\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\"></el-option>\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 title=\"需求信息\" v-model=\"desVisible\" :fullscreen=\"isMobile\">\n <el-form :model=\"formData\">\n <el-form-item label=\"需求\" :label-width=\"formLabelWidth\">\n <el-input placeholder=\"一句简单明了的话概括一下\" v-model=\"formData.title\"></el-input>\n </el-form-item>\n <el-form-item label=\"详细描述\" :label-width=\"formLabelWidth\">\n <el-input placeholder=\"用朴素的话语进一步描述你的需求\" type=\"textarea\" v-model=\"formData.des\"></el-input>\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<script lang=\"ts\" setup>\nimport { ElMessage } from 'element-plus'\nimport {\n computed, onMounted, reactive, ref,\n} from 'vue'\nimport { useStore } from 'vuex'\nimport { Search } from '@element-plus/icons-vue'\nimport { WishApi } from '@/apis'\nimport { formatDate } from '@/utils/stringUtil'\nimport { WishStatus } from '@/constants'\n\nconst $store = useStore()\nconst wishes = reactive<WishApiTypes.WishItem[]>([])\nconst 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, title, des, contact,\n } = v\n if (searchWord.value.length === 0) return true\n return `${formatDate(new Date(createDate))} ${title} ${des} ${contact}`.includes(searchWord.value)\n }))\n\n// 分页\nconst pageSize = ref(10)\nconst 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})\nconst 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\nconst handleChangeStatus = (wishId: string, status: WishStatus) => {\n selectWishId.value = wishId\n selectStatus.value = status\n showWishStatusDialog.value = true\n}\nconst 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})\nconst handleRewriteDes = (id: string, title: string, des: string) => {\n selectWishId.value = id\n formData.title = title\n formData.des = des\n desVisible.value = true\n}\nconst 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})\nconst isMobile = computed(() => $store.getters['public/isMobile'])\n\n</script>\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","$store","useStore","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"],"mappings":"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"}
1
+ {"version":3,"file":"index-4b1f55ea.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","<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\"></el-option>\n <el-option v-for=\"(item, idx) in logTypeList\" :key=\"idx\" :label=\"item.label\" :value=\"item.type\"></el-option>\n </el-select>\n </span>\n <span class=\"item\">\n <el-input size=\"default\" clearable placeholder=\"请输入要检索的内容\" :prefix-icon=\"Search\" v-model=\"searchWord\">\n </el-input>\n </span>\n </div>\n <el-table height=\"550\" stripe border :default-sort=\"{ prop: 'date', order: 'descending' }\" :data=\"pageWishes\"\n style=\"width: 100%\">\n <el-table-column sortable prop=\"createDate\" label=\"提交时间\" width=\"190\">\n <template #default=\"scope\">{{ scope.row.createDate && formatDate(new Date(scope.row.createDate)) }}</template>\n </el-table-column>\n <el-table-column prop=\"title\" label=\"标题\" width=\"120\"></el-table-column>\n <el-table-column prop=\"des\" label=\"详细描述\"></el-table-column>\n <el-table-column prop=\"contact\" label=\"联系方式\"></el-table-column>\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 @click=\"handleChangeStatus(scope.row.id, scope.row.status)\" type=\"primary\" text size=\"small\">修改状态\n </el-button>\n <el-button @click=\"handleRewriteDes(scope.row.id, scope.row.title, scope.row.des)\" type=\"primary\" text\n size=\"small\">\n 修改描述\n </el-button>\n </div>\n </template>\n </el-table-column>\n </el-table>\n <div class=\"flex fc p10\">\n <el-pagination :current-page=\"pageCurrent\" @current-change=\"handlePageChange\" background :page-count=\"pageCount\"\n :page-sizes=\"[10, 50, 100, 200]\" :page-size=\"pageSize\" @size-change=\"handleSizeChange\"\n :total=\"filterWishes.length\" layout=\"total, sizes, prev, pager, next, jumper\"></el-pagination>\n </div>\n </div>\n <!-- 状态修改弹窗 -->\n <el-dialog :fullscreen=\"isMobile\" center title=\"状态修改\" v-model=\"showWishStatusDialog\">\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\"></el-option>\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 title=\"需求信息\" v-model=\"desVisible\" :fullscreen=\"isMobile\">\n <el-form :model=\"formData\">\n <el-form-item label=\"需求\" :label-width=\"formLabelWidth\">\n <el-input placeholder=\"一句简单明了的话概括一下\" v-model=\"formData.title\"></el-input>\n </el-form-item>\n <el-form-item label=\"详细描述\" :label-width=\"formLabelWidth\">\n <el-input placeholder=\"用朴素的话语进一步描述你的需求\" type=\"textarea\" v-model=\"formData.des\"></el-input>\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<script lang=\"ts\" setup>\nimport { ElMessage } from 'element-plus'\nimport {\n computed, onMounted, reactive, ref,\n} from 'vue'\nimport { useStore } from 'vuex'\nimport { Search } from '@element-plus/icons-vue'\nimport { WishApi } from '@/apis'\nimport { formatDate } from '@/utils/stringUtil'\nimport { WishStatus } from '@/constants'\n\nconst $store = useStore()\nconst wishes = reactive<WishApiTypes.WishItem[]>([])\nconst 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, title, des, contact,\n } = v\n if (searchWord.value.length === 0) return true\n return `${formatDate(new Date(createDate))} ${title} ${des} ${contact}`.includes(searchWord.value)\n }))\n\n// 分页\nconst pageSize = ref(10)\nconst 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})\nconst 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\nconst handleChangeStatus = (wishId: string, status: WishStatus) => {\n selectWishId.value = wishId\n selectStatus.value = status\n showWishStatusDialog.value = true\n}\nconst 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})\nconst handleRewriteDes = (id: string, title: string, des: string) => {\n selectWishId.value = id\n formData.title = title\n formData.des = des\n desVisible.value = true\n}\nconst 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})\nconst isMobile = computed(() => $store.getters['public/isMobile'])\n\n</script>\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","$store","useStore","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"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{d as a,a1 as c,c as n,a as o,t as _,k as d,p,e as i,f as l,_ as r}from"./index-62c7029f.js";const u=e=>(p("data-v-bb4c1a74"),e=e(),i(),e),h={class:"not-found"},f=u(()=>o("h1",null,"EasyPicker | 轻取",-1)),m=a({__name:"index",setup(e){const t=c(),s=()=>{window.location.href="https://docs.ep.sugarat.top/"};return(x,b)=>(l(),n("div",h,[f,o("h2",null,_(d(t).query.title)+":已被网站管理员禁用",1),o("h3",null,[o("a",{onClick:s},"查看应用介绍")])]))}});const v=r(m,[["__scopeId","data-v-bb4c1a74"]]);export{v as default};
2
- //# sourceMappingURL=index-c840d3aa.js.map
1
+ import{d as a,a1 as c,c as n,a as o,t as _,k as d,p,e as i,f as l,_ as r}from"./index-1639ad54.js";const u=e=>(p("data-v-bb4c1a74"),e=e(),i(),e),h={class:"not-found"},f=u(()=>o("h1",null,"EasyPicker | 轻取",-1)),m=a({__name:"index",setup(e){const t=c(),s=()=>{window.location.href="https://docs.ep.sugarat.top/"};return(x,b)=>(l(),n("div",h,[f,o("h2",null,_(d(t).query.title)+":已被网站管理员禁用",1),o("h3",null,[o("a",{onClick:s},"查看应用介绍")])]))}});const v=r(m,[["__scopeId","data-v-bb4c1a74"]]);export{v as default};
2
+ //# sourceMappingURL=index-51740dfd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-c840d3aa.js","sources":["../../src/pages/disabled/index.vue"],"sourcesContent":["<template>\n <div class=\"not-found\">\n <h1>EasyPicker | 轻取</h1>\n <h2>{{ $route.query.title }}:已被网站管理员禁用</h2>\n <h3><a @click=\"handleToHome\">查看应用介绍</a></h3>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { useRoute } from 'vue-router'\n\nconst $route = useRoute()\nconst handleToHome = () => {\n window.location.href = 'https://docs.ep.sugarat.top/'\n}\n</script>\n<style lang=\"scss\" scoped>\n.not-found {\n font-family: 'Avenir', Helvetica, Arial, sans-serif;\n background-image: linear-gradient(to top, #30cfd0 0%, #330867 100%);\n min-height: 100vh;\n}\nh1,\nh2,\nh3,\na {\n color: aliceblue;\n text-align: center;\n font-weight: lighter;\n}\na {\n margin-left: 10px;\n border-bottom: 2px solid aliceblue;\n cursor: pointer;\n}\nh1 {\n font-size: 48px;\n padding-top: 10%;\n}\nh2 {\n font-size: 30px;\n padding-top: 2vh;\n}\nh3 {\n font-size: 28px;\n padding-top: 1vh;\n}\n</style>\n"],"names":["$route","useRoute","handleToHome"],"mappings":"+OAUA,MAAAA,EAAAC,IACAC,EAAA,IAAA,CACE,OAAA,SAAA,KAAA,8BAAuB"}
1
+ {"version":3,"file":"index-51740dfd.js","sources":["../../src/pages/disabled/index.vue"],"sourcesContent":["<template>\n <div class=\"not-found\">\n <h1>EasyPicker | 轻取</h1>\n <h2>{{ $route.query.title }}:已被网站管理员禁用</h2>\n <h3><a @click=\"handleToHome\">查看应用介绍</a></h3>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { useRoute } from 'vue-router'\n\nconst $route = useRoute()\nconst handleToHome = () => {\n window.location.href = 'https://docs.ep.sugarat.top/'\n}\n</script>\n<style lang=\"scss\" scoped>\n.not-found {\n font-family: 'Avenir', Helvetica, Arial, sans-serif;\n background-image: linear-gradient(to top, #30cfd0 0%, #330867 100%);\n min-height: 100vh;\n}\nh1,\nh2,\nh3,\na {\n color: aliceblue;\n text-align: center;\n font-weight: lighter;\n}\na {\n margin-left: 10px;\n border-bottom: 2px solid aliceblue;\n cursor: pointer;\n}\nh1 {\n font-size: 48px;\n padding-top: 10%;\n}\nh2 {\n font-size: 30px;\n padding-top: 2vh;\n}\nh3 {\n font-size: 28px;\n padding-top: 1vh;\n}\n</style>\n"],"names":["$route","useRoute","handleToHome"],"mappings":"+OAUA,MAAAA,EAAAC,IACAC,EAAA,IAAA,CACE,OAAA,SAAA,KAAA,8BAAuB"}