From 46c14674275020c3149d549951ee41ff41f72ac0 Mon Sep 17 00:00:00 2001 From: BianLzhaoMin <11485688+bianliangzhaomin123@user.noreply.gitee.com> Date: Thu, 11 Sep 2025 13:25:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=A7=E5=93=81=E4=B8=AD=E5=BF=83=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E6=8E=A5=E5=8F=A3=E8=B0=83=E8=AF=95=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 8 - .env.production | 8 - public/favicon.ico | Bin 5663 -> 4617 bytes src/api/dataManage/product-center.js | 28 +- src/assets/logo/logo.png | Bin 5663 -> 4617 bytes src/components/ImagePreview/index.vue | 162 +++--- src/components/Pagination/index.vue | 185 ++++--- src/components/UploadImgFormData/index.vue | 5 + src/utils/request.js | 297 ++++++----- src/utils/request_formdata.js | 208 ++++++++ .../components/addAndEditForm.vue | 462 ++++++++++++++---- src/views/dataManage/product-center/index.vue | 127 +++-- 12 files changed, 1038 insertions(+), 452 deletions(-) create mode 100644 src/utils/request_formdata.js diff --git a/.env.development b/.env.development index 36c372a..55b869e 100644 --- a/.env.development +++ b/.env.development @@ -1,18 +1,10 @@ # 页面标题 -<<<<<<< HEAD -VUE_APP_TITLE = 博诺思公共微服务平台 -======= VUE_APP_TITLE = 公共服务平台 ->>>>>>> 8bd21926c835e55a8bb041e202098e441d9398f4 # 开发环境配置 ENV = 'development' -<<<<<<< HEAD -# 博诺思公共微服务平台/开发环境 -======= # 公共服务平台/开发环境 ->>>>>>> 8bd21926c835e55a8bb041e202098e441d9398f4 VUE_APP_BASE_API = '/dev-api' # 路由懒加载 diff --git a/.env.production b/.env.production index 714bdd8..7eac2ad 100644 --- a/.env.production +++ b/.env.production @@ -1,16 +1,8 @@ # 页面标题 -<<<<<<< HEAD -VUE_APP_TITLE = 博诺思公共微服务平台 -======= VUE_APP_TITLE = 公共服务平台 ->>>>>>> 8bd21926c835e55a8bb041e202098e441d9398f4 # 生产环境配置 ENV = 'production' -<<<<<<< HEAD -# 博诺思公共微服务平台/生产环境 -======= # 公共服务平台/生产环境 ->>>>>>> 8bd21926c835e55a8bb041e202098e441d9398f4 VUE_APP_BASE_API = '/prod-api' diff --git a/public/favicon.ico b/public/favicon.ico index e26376026420542212ed58d90d0ed34f554fa4ae..e3f7c2745417f108e5b012fd35c1056abb428727 100644 GIT binary patch literal 4617 zcmaJ_cQ{<#yB&-{G8ipN7=zIXF+?9VqD1d4iO~sB5}ja341%Z$Q6iEkA0iP(^hEUD zJJAM-9vP$Fll#}b_xXPJk8}2O*4cZ%d!P4x)>>!dj0|qkUgEd}0)c3Cv^7nDw)5{r z4FT@uRuy?55DcWFsb&^L_AA#j#nd^wBcF(rrWPqIEDWO5Q5TIXD2Ri8wzaMQ^x4A8 ztBU*GxcInlj=`|L;GB4W#79?RPk$_0dG)uui>J$6_LOj$OQ}nDwryW86@ytrBwf}+ z#_XKJ$O2VSM0i&)A^60ECFG0ZMB1w~;zGt_Wx}h5ECNZHB*?X{3;jw@9odo&zLz3A zv`7a-M62xzfuh{0TM#2Ht@a2IcJVrhd<5n*h#2`5U$5H22fhbOmcHa}@e~9#;o6=Y z`xl_W9hTg3GkabTgbiwbTHK;WE*XdQsj4Q@v>@hpctm_sK+q+Go!C}5xnySye2E$S z5qL8t?E@ue0s=EdF8*iam2&$g90^SP!Ckw~4_J10RlC7|0v^AVs*t-0g80UZjhEAq zOKR&^Gu-?i0E?`)spn>iw%BKx;p}5$>AVnSM#EfZ9U)4{UKtzba!1>PBj5d8AEhz2 zB<|y%9&!~Jh`YOdh$!o^qwTOLa@`iW!LC!Cnb7nyHpiC6OrkP0=x62ra*;jkkow~V zo4bDV=n&6YSRc|MgBeJM{82*m-u?{lt{84abP6W#>T1FhdVobsNcZOudXw~cBl?BVCaGWCqSA(=j zgGn%(Dy&7SqQOVuT@RM`m?l(4V*KV)!7q zw&Bxm9!tYI(QQzaA4AG0{KsRk$b=u$gl`+dq?1a}JH{X8lNiZNFaNoQ55j=7kjs!9 zr;NgZk7%ZR!pGPt+b{NfO)RzxB2Ux#|oL#0_Lz^D{e+=Ft$q> zyMs_8OwAG~hves%Iq#m_zn$;rg!{y4y#(#Jjx!9ROEB{yYskCmV1c^5r#A(9+bsB@bs&=X5~difeO#cNC%v8Mu}@Q^j-- zs!ZbFn4~(Iq^z$hhu}1$2?BDJSmXwRfs1VtQ*=GvF!!0{E2+8StB@WjhqAreHz^7< z+J*9zGsDHltaRCGVvhaQlo!PH&xfP1@i+zSgpU)Yi@#a6AVP5iG@^Ol_YDI91#sVEy@#(~Jg7RkYHbo|TNaR6C%0bAW6t<_m z`qi>uQ%yq$6kXIt5Y=J{n*2MjZjxy5wg|j7{ve`F3Y)x3dJ}dov{RK`S-z$`Zsp?k zZ0x%fMe^Qt(IdHA7Cz<9kcoY~U{JDP(6&OEC_agx)HRV`tw8a!ykal}eIC!K;wbWF z<;+M50^uUbl>LHq)$>BZWc08|HKjphk(Dw)1&5Q41a}&?Qw!&5GL||fNC~yeeG@sd zoQ3zS=(1VV`7mO2p6q8-E2$gmHC#xbY_IjB!*sa?-8%{z|dB0D0pZ@J&s!wBb-q?b5M>u zP0TJXY~lTSDkc_t>KipOi?SQkz0ox=n`X4-f*JL8PqQ4K%(iMB_&OudJfUGp>19?K z4ey>zEAeoJsWpAqd?;RaT+4_`L0-IWo~|jZ ziWDdJg=IsER7~Fsuh);)@JkrVw44Ct{M+qwHoj4`8msRou~XUfDH>brt=`F6-oNNS z-#wi(cU%*wl; zs8xH&#*3!|`4qaII1vwm7Mj-^-+v8AkUGwx!2-x;`SjKw%v=^Xbg3y1!NXHXh`a0XDFf*KAxtvT6E9Q*i4g4yq{d`eUpB^YHc(_)^O~y#I zc<@vA5FqsLbyTTXDi9GVcY6e@iiQkf!KL6R9Y7@0R9pFBY=FWhrm6lrVm5_HbBfVJ zEb;;~CuB#N&E5i(@UCIX^8{f0H4li1FE<%mOekXl*WE!jy$DJUXBZCYu_U@#3|0B; znWD6)iRsdR9(24|fcG1QEt$KellA=$XTZImrv?fx_})JoJX-peviiQygZ5dGZF-s? zBeES777p>SC93=B3!6|iJ*+0CWJ`02n?{8MJF0h6Di;^sf--vPU$D?jzZ&49aBQch zKJG`^noc~+b!VwY#Z|9***wBSzv~LKj?s2!I9ql5>$$nY829^4>Wh}cG+@v|jb(n^ zWrb1eKOD3RT^}nqq9{LyQvQfG3@(tU&@=8#%)EQnp3FLN_;n~|Q|ME|LXjuwz7_f8 z)?Dsu4gOx@FS9KuCi{@k`K~-~%SwikyVLC?V`Q3LQ@QD%ibX?G-?0tvb41`7Ui7NY zsb|JTL{Dk+dPSQ^*0W5AaZq{xV2-q8!xQLoew-#shotY89)%3i(%mzU;I(#snLwY` zt}@M`d1$AMvYE*|{VGMVQ2RxlYfuOaM;)0MS}q30Ki?jnMtqUwJ|qZ$uq!Sx3>-|6 zYSr%OOX5#}OhaXQhk&+Fzs%U}I#64fVuz#~Ky7*1JX25L0hmIA*1tl)=$osgHmxk{ z+YAE`L^zknq8MPMe*SKxt#!pg(~!WNd9?TWWq| zz)H;ODJGk3!28pzkgm&2kPY2}QwW3BV_(U)DJJnrbnZf4vqz|f_GiNrLwlw91820f zp)LUSqWI^!_Na_3vCnL}dSlEwM8TaT%Pzcw6J*(G7xYTsOdY6w<9h!5;){yd?nmgQhF}>l5;yu{ORzm>% zsuT5|2Qn}9dC+uH&ATnYYbFk##`ZiRNZh8+-?%H;M$kBypP&=zySsi>Ze-_b=Ml;> z-DSXbclFnKl*GUX$ojA|KRmE&;ezzG=jBUQ3D;|OW_PLINPEVin>&|+&vegQJtdB) zo?e5-d-l`EM;%}+=H#y%1$qmR(59)6mPQ!t8S;<4f-P`_Tw^JzZ}~!F>?i|zcI&qtnM^)j2cih+{#{;2 zSH{#ZDt>1=4)ijJ5Z)qCbr(n2GTql9y@w{m?1bkLn|Q)^*rg8gnA_)#o&Q|2{l)NS z7oM|j&o8y2=+qMkO?}{MHN4x%PkSQH^K4GtB|wj7-i%jx-bf1E=>4gaF!TK&fM$P- z85y`gn>#FdC#~iz8&RcUI9jU(- zCvRrsEE{($#C0b~_OdLjn3*h#9T_-v;z!>~4HIG_)479+J9U1k+aZNWNoXOH_gv4g z!^Sr@|7ymRXo{hJQzgw<l@(Ity_$D;$S+ZzAS)5vXSyk^~rByP0 zZ$XZiuL*0k*dc;RkK}}2>j1xP6zHm>r;c_t`&mSAAa{dKa_ktzMT;8w%{Jlx= z+T@T1kR*DU%O(E`EW!N6Y_EdPp&-!3MFC#*18|@N`I|io(6zUDcGh#=ia^G8y;1Xgl^C8S$Amyqrd1eKPKB}75GVToN(=@g_xS|pcV zYT@y|zH{E0Gjl)8mzgE0vwe;xGTK9)Pb`Ew71o)8mn z03f3HU&jG*@@N6zk*2evqK=M}hmVK1lZPjZnxZ0$rG^oYPn^M z{S!ll*~7X_SR}y4UJ2?aHTg{X39ybPB?tGsd;iFgl8P)3V$l6|>JbF~eyxxj;rR07 zd($`rbIAkd#nPtGAoTwJ^~`n0R^HalXyDkB2r_c6l)s-{04d#fFQjLgle8h-1IP$m zD#!{x3+dmXAC3e)0C0#G7!c-DD}RGi;{o6To>KxGZMTC>A z3-k-<_frD>v_P$1gWV$_4FF()Aqs3jIWe$zswPJO%$B7t(g3rc8OuOG0uGSPt;&H5 zZU?LkB6az2yM6$Lm0&gj{H|)82$N=ERon<90pOQtocsiA1w>>k@C^ejlDL54Q;HEh z7ARif^NG%tve%yP5D*-oYbbprQ)5De5|RFk-v9V;WsP<12dqxPn&ug)1K|c+US=*k z1!M~kI{Fv@=r6~=-%83SZ~fg^{p+v=L!b71zI8qHV3T7#TE6Xw$HfOowZ_o%uQxZR z@jUx*YJEFh%glgzL%?bI(n4f`u+a3;ub|7gK*<~M)BGZx{ufM)kBEr&Icj2R4kJkKK8V$4;1OQ5fkvz38A3pw0 zS=mLB_noPuiw4*FffD#JN7oBdg$ElEjE{}_(gsxj19@f+tJdn0)p$cQj1TIk1rY^mS08##l> zFS`S5r0bH6RVuj-Sf8@yb6WmKLh(8k!a*|dX+!G~D`&E>8j+eSWC6neMemE;1gUc# zlxsKHZQ#!as6L{SB{QWZ`AM?&r|W^A8!eR5J@40`gr7Ndzoe0?i`mO>;(sj=R>&?a ze>GB;KM5*-FI`}&=2qyZBd8Z!Mj`5(!#R>mtvK|Bzj*3bjZx+( zugnS8e-F2}wxdq{9}~wANA*E$xanN!g6T?WTj&I{p(O;rGqd~kpU((0WIJX($?`BT z<~ipHp-LGfPnS+NOb<)nD%UsgHjtkREGN>hFnCg7X&73fV$h(oUPd@cT`^V0WYAtF zUOlSoubZSZ_Ud&p>NWQ5l`V07%sZ9B7)Y_cZA&j*0xNZ|u>Fy-!nBtm-Y%bOmZpta z{pB9ikKmfYPcRs&r|4boQ0b830RQ`D1c#)zZskyFE>C@wb(DBCm>-W{p1*F|rOKfy ztV&`&XdX3hv+uP}y}vt;_Vt8=;e7BjX*X$%FJYT_+pD&BZ416*J958mcLTQx&j!y( zwwK0L&)iOn&uDhg)97(#iRYpq@nkxfkfiP5aI)<`*DPnm_+j+wH?kq8wv=wC;&HX& z{}5aUv5xCv0W@+Bl^%>Xm7;&_7hPXi+c*m^eChtuvw?axlIEJ@&^F%q+h=&VpKq~p zwsK%EQEDpBHQyRF*RgPu@b0T}UXOa5cwAq`d`8F+L55}qrZUS=&M?sM%y6bsZQ6X7 zZ`W0bWI(Mk~TUBmVw_mQ?GUXa&(zA(YXL|1QLVGuRkM?r*9_&k zwk(Tc51S6l4tsc$e=T!0giX5WTn#*?KGGtv!ugJ~iGz%!k8Hqm#bd_L#{c?Ij39xa z{ej?PIVy$6gv2JyUa1~kG{+2=wjzs;d^zJ(gCIDSDZ|zCVJ_&?X|lwaG0-w;m`BMa zbbGiN^nOJZ_8!6POqWe_8A|z#N4Q*I=T)Pg&l?{M-*n}M$+aUg@hGV*zEx(yrP<5R zvC;*m3$xwJMMNOV5s?A07s^MO;hx@Ws(KdgJ>ZozUy@-}kxGkk2THy1y* z()`^X9m@BAVIpRd93uHHi#)Slelv_l&=Ly*a}I*8haSww)z(F$9qayvD9oF0w8fRKf5n_YnO;Y8?=(@=c| zR%gvv*WlPCaPc@%H)`VRS4G~pMxyCuX#+#<)u*Pdwp7;Xb_Qsd%qcU&a2}fU*Oi`? z->NTaRS@)g`5St&CmZ)ZyDU*h3tOWb+5#jbk?XNU0zQ8ia8{%VmM0JWO(hS z{>P^%$mJ|?q;X_$1W(LbY~O6SxpLvSNWAzw2p(=RWQeV*XhF?!%};kO`3IknL@`mx z{6VMfbu{q?7`Y;qL(kkN4&E*$(c3Vzb^Z-oLa6#{_v9x9e+_)R)mWRzbB=axOX+<2S1UTRmG57&~H zoy=Yg#6WMdT`gW&ARQIQ^5toK4xlZsF#{)mwvsFkJ3LR>Fg6REEgDs_)v~H#p4e4L zjhV-;J!WX%=tZ^9sphWCIQn<^l}p!@_sqqNfJH$d65YGU(BjUu#E9T*JG<~Z->30^ zbO2qn2ucd5xk1ficOG6n*$HpFt+VfPTe-06vKsqo@&rvn7@L2acK17WbwYJmb&6eu zJs}Cs%*;Sck36;;O@tch>1SA=A0-H zxmTMkwh&!S00`m)fQTpnxV*c^Z2<6n4gfn=03e+O05l$-UiYZnt5K+$(o6k-`Muo0 zcym>FU%0_pH42@7ux-1Sz5P>)l9j9n94!%D$j3VkQNvGRvkoMVn+0?ce(da&q$%L8 zpoTp4=XU9KU+tUf5sKZM9OT9dxZlrxw3GT|WkWHiVoTU7q|w9h_}k2>RB2dWOBh;=T%k+Loz^cP7s&cQHe04Sf3?2Uc{|uFi_q7&Y2h>5E;_jAH4oWN z*|)r?3&mKN5Ygr~KU_?_J@Y>L8p~TX>*3W?*;s7Ol0Gab+Fn#lovzHGgPdF6lSi)G zL^yLVH+_Q=>wUEj-%sE@TUwrf1xP~1p7_iN_cAh+sDxHG1s_+;wKCzchDeCAO&#o-@o}`asDR~{uPgu1&}n#Oa=LFsLvp3f`C>Vt~|jK zy_%nl{Zg&~$MZF%AA1=UPk~<8^!g4H@3cdr`6qHkzF~rSpo=V%Q{$Dr?VYlliu04v z%=&RRf@F2de7c>);typLsxv{6>P2a7CpLZDX$>arZUIc2_Ku zUlbW`031ZK?1SN6t^_0fyGvg`-+!y|wIj(a0BaG-bmnF! z-?&Ny8zS6sLm&VVOE>O+ox*~U^9i^5Cev4Mr=}OVv(#jGI%h6)ozpvIw=QeWg5yL% zxc;dSYTByPsn;~w8I3%nVM7fPj~q;T4;*eQEH((##3K+F+ELsa=X*VuO?{$UoJERCFv1zCRtLIenGy2;i*IhzdLb#!lN%sklL-`-+F z?JxllW2nPY*Y~!;oIPgyr6C68E{%9$}}MS`_bfXO`Ru~*8xi-vjX-H zvjoT^#5dq8?}IJ&Wlp}ze&Elo>fpvkve9{Y{0o(4l0UkcbJe=OGP1WBh}U=wuzoO( zCb3vXz{I}y=8r136RhGZj7?Wab`-)4x%6(E35ET$*S>Gr{7Hy?1 zPvuKMN4}VU7FTXrm>eeq5bN>rBwlp`PgxV`{`=85$()C5uFqLw0HxJzMi4{*__${J zMO_0Q;^bTGu%N6*_-eEle8n4*dr{LGd=cI^nYaDe)$!S|w^k}Q2j^)sa|wa)rOWr7 z=U@&U{>sTuswbr)?Sjc9{E5BTD&WCFGRb!kCS_jD{BTS9)Yijf$eoGejH$BRliS>kQVwr#VP zPs^4Xc>MxrsW#M9V*lD85LOCp=F^GKJpn>%Q;Y^>4==VlYTCO|4^&7;9(e5&vsb23+jj1) z4F{o&?1`kXX!p1QbG-x^0H9^JkC(#5i6HC4TWS(z9%5Q}!C`+cIJOr-(fMiVq%-|BreT|=+0PWgXb&y5S$ zG_jI1l%yt}bT4l#k^g0eq2yHHjK&w{?`d3k@CQ?v1K)MT#dYWTTR+A7RoqtH(&|aO_;V>9LbLXPn3YBbp>+MnYOoTceweya=B)lEz5H zLp=NDAK0Im^8*inYho^qYR#Qdzn_6Db?UQTs4j<|%h}JQ5#? z5{Fs+B?@B0C()s2L3QFMo?LZZrBRzLX=X>-xfw1_^{nkMY^?6lVgoW|%aOd~y;V$f zSC2PJkfFe5A(&8sdo{0Co%f9>o#kz*CRzHQ8F$tEB>cewUnj)^>+%O%(dyCa!bQiP zd$9D}qa>x9CI;OPHw~G}AbY<}mG;j)*X33HunLBdiRVoznp0xEgd+S?KC>~mPK80W zQ^foF{<7rqIFN9hCB? zZ{1Q3@oG>#AA8vR@Mza{MS#=Uc_yV~`NUvJ{jza zT|v*pR%1$2TRUMF0e`DV+%8O#ii1Jz8+U5lkts*sd)3SKz%c(j|OkN$*b3z1o8lke_ zZzLZqleC$I#|o*|>1;QvIPMtF8WlW@z%EFY@*W$g1UVFe01tVC?CaWvKX+N~&SMFh w3o}1aSIuJtnzw?rKNs-3{y)=#g);%#4FR;juZ0`#H8`NAtff?~VD>!dj0|qkUgEd}0)c3Cv^7nDw)5{r z4FT@uRuy?55DcWFsb&^L_AA#j#nd^wBcF(rrWPqIEDWO5Q5TIXD2Ri8wzaMQ^x4A8 ztBU*GxcInlj=`|L;GB4W#79?RPk$_0dG)uui>J$6_LOj$OQ}nDwryW86@ytrBwf}+ z#_XKJ$O2VSM0i&)A^60ECFG0ZMB1w~;zGt_Wx}h5ECNZHB*?X{3;jw@9odo&zLz3A zv`7a-M62xzfuh{0TM#2Ht@a2IcJVrhd<5n*h#2`5U$5H22fhbOmcHa}@e~9#;o6=Y z`xl_W9hTg3GkabTgbiwbTHK;WE*XdQsj4Q@v>@hpctm_sK+q+Go!C}5xnySye2E$S z5qL8t?E@ue0s=EdF8*iam2&$g90^SP!Ckw~4_J10RlC7|0v^AVs*t-0g80UZjhEAq zOKR&^Gu-?i0E?`)spn>iw%BKx;p}5$>AVnSM#EfZ9U)4{UKtzba!1>PBj5d8AEhz2 zB<|y%9&!~Jh`YOdh$!o^qwTOLa@`iW!LC!Cnb7nyHpiC6OrkP0=x62ra*;jkkow~V zo4bDV=n&6YSRc|MgBeJM{82*m-u?{lt{84abP6W#>T1FhdVobsNcZOudXw~cBl?BVCaGWCqSA(=j zgGn%(Dy&7SqQOVuT@RM`m?l(4V*KV)!7q zw&Bxm9!tYI(QQzaA4AG0{KsRk$b=u$gl`+dq?1a}JH{X8lNiZNFaNoQ55j=7kjs!9 zr;NgZk7%ZR!pGPt+b{NfO)RzxB2Ux#|oL#0_Lz^D{e+=Ft$q> zyMs_8OwAG~hves%Iq#m_zn$;rg!{y4y#(#Jjx!9ROEB{yYskCmV1c^5r#A(9+bsB@bs&=X5~difeO#cNC%v8Mu}@Q^j-- zs!ZbFn4~(Iq^z$hhu}1$2?BDJSmXwRfs1VtQ*=GvF!!0{E2+8StB@WjhqAreHz^7< z+J*9zGsDHltaRCGVvhaQlo!PH&xfP1@i+zSgpU)Yi@#a6AVP5iG@^Ol_YDI91#sVEy@#(~Jg7RkYHbo|TNaR6C%0bAW6t<_m z`qi>uQ%yq$6kXIt5Y=J{n*2MjZjxy5wg|j7{ve`F3Y)x3dJ}dov{RK`S-z$`Zsp?k zZ0x%fMe^Qt(IdHA7Cz<9kcoY~U{JDP(6&OEC_agx)HRV`tw8a!ykal}eIC!K;wbWF z<;+M50^uUbl>LHq)$>BZWc08|HKjphk(Dw)1&5Q41a}&?Qw!&5GL||fNC~yeeG@sd zoQ3zS=(1VV`7mO2p6q8-E2$gmHC#xbY_IjB!*sa?-8%{z|dB0D0pZ@J&s!wBb-q?b5M>u zP0TJXY~lTSDkc_t>KipOi?SQkz0ox=n`X4-f*JL8PqQ4K%(iMB_&OudJfUGp>19?K z4ey>zEAeoJsWpAqd?;RaT+4_`L0-IWo~|jZ ziWDdJg=IsER7~Fsuh);)@JkrVw44Ct{M+qwHoj4`8msRou~XUfDH>brt=`F6-oNNS z-#wi(cU%*wl; zs8xH&#*3!|`4qaII1vwm7Mj-^-+v8AkUGwx!2-x;`SjKw%v=^Xbg3y1!NXHXh`a0XDFf*KAxtvT6E9Q*i4g4yq{d`eUpB^YHc(_)^O~y#I zc<@vA5FqsLbyTTXDi9GVcY6e@iiQkf!KL6R9Y7@0R9pFBY=FWhrm6lrVm5_HbBfVJ zEb;;~CuB#N&E5i(@UCIX^8{f0H4li1FE<%mOekXl*WE!jy$DJUXBZCYu_U@#3|0B; znWD6)iRsdR9(24|fcG1QEt$KellA=$XTZImrv?fx_})JoJX-peviiQygZ5dGZF-s? zBeES777p>SC93=B3!6|iJ*+0CWJ`02n?{8MJF0h6Di;^sf--vPU$D?jzZ&49aBQch zKJG`^noc~+b!VwY#Z|9***wBSzv~LKj?s2!I9ql5>$$nY829^4>Wh}cG+@v|jb(n^ zWrb1eKOD3RT^}nqq9{LyQvQfG3@(tU&@=8#%)EQnp3FLN_;n~|Q|ME|LXjuwz7_f8 z)?Dsu4gOx@FS9KuCi{@k`K~-~%SwikyVLC?V`Q3LQ@QD%ibX?G-?0tvb41`7Ui7NY zsb|JTL{Dk+dPSQ^*0W5AaZq{xV2-q8!xQLoew-#shotY89)%3i(%mzU;I(#snLwY` zt}@M`d1$AMvYE*|{VGMVQ2RxlYfuOaM;)0MS}q30Ki?jnMtqUwJ|qZ$uq!Sx3>-|6 zYSr%OOX5#}OhaXQhk&+Fzs%U}I#64fVuz#~Ky7*1JX25L0hmIA*1tl)=$osgHmxk{ z+YAE`L^zknq8MPMe*SKxt#!pg(~!WNd9?TWWq| zz)H;ODJGk3!28pzkgm&2kPY2}QwW3BV_(U)DJJnrbnZf4vqz|f_GiNrLwlw91820f zp)LUSqWI^!_Na_3vCnL}dSlEwM8TaT%Pzcw6J*(G7xYTsOdY6w<9h!5;){yd?nmgQhF}>l5;yu{ORzm>% zsuT5|2Qn}9dC+uH&ATnYYbFk##`ZiRNZh8+-?%H;M$kBypP&=zySsi>Ze-_b=Ml;> z-DSXbclFnKl*GUX$ojA|KRmE&;ezzG=jBUQ3D;|OW_PLINPEVin>&|+&vegQJtdB) zo?e5-d-l`EM;%}+=H#y%1$qmR(59)6mPQ!t8S;<4f-P`_Tw^JzZ}~!F>?i|zcI&qtnM^)j2cih+{#{;2 zSH{#ZDt>1=4)ijJ5Z)qCbr(n2GTql9y@w{m?1bkLn|Q)^*rg8gnA_)#o&Q|2{l)NS z7oM|j&o8y2=+qMkO?}{MHN4x%PkSQH^K4GtB|wj7-i%jx-bf1E=>4gaF!TK&fM$P- z85y`gn>#FdC#~iz8&RcUI9jU(- zCvRrsEE{($#C0b~_OdLjn3*h#9T_-v;z!>~4HIG_)479+J9U1k+aZNWNoXOH_gv4g z!^Sr@|7ymRXo{hJQzgw<l@(Ity_$D;$S+ZzAS)5vXSyk^~rByP0 zZ$XZiuL*0k*dc;RkK}}2>j1xP6zHm>r;c_t`&mSAAa{dKa_ktzMT;8w%{Jlx= z+T@T1kR*DU%O(E`EW!N6Y_EdPp&-!3MFC#*18|@N`I|io(6zUDcGh#=ia^G8y;1Xgl^C8S$Amyqrd1eKPKB}75GVToN(=@g_xS|pcV zYT@y|zH{E0Gjl)8mzgE0vwe;xGTK9)Pb`Ew71o)8mn z03f3HU&jG*@@N6zk*2evqK=M}hmVK1lZPjZnxZ0$rG^oYPn^M z{S!ll*~7X_SR}y4UJ2?aHTg{X39ybPB?tGsd;iFgl8P)3V$l6|>JbF~eyxxj;rR07 zd($`rbIAkd#nPtGAoTwJ^~`n0R^HalXyDkB2r_c6l)s-{04d#fFQjLgle8h-1IP$m zD#!{x3+dmXAC3e)0C0#G7!c-DD}RGi;{o6To>KxGZMTC>A z3-k-<_frD>v_P$1gWV$_4FF()Aqs3jIWe$zswPJO%$B7t(g3rc8OuOG0uGSPt;&H5 zZU?LkB6az2yM6$Lm0&gj{H|)82$N=ERon<90pOQtocsiA1w>>k@C^ejlDL54Q;HEh z7ARif^NG%tve%yP5D*-oYbbprQ)5De5|RFk-v9V;WsP<12dqxPn&ug)1K|c+US=*k z1!M~kI{Fv@=r6~=-%83SZ~fg^{p+v=L!b71zI8qHV3T7#TE6Xw$HfOowZ_o%uQxZR z@jUx*YJEFh%glgzL%?bI(n4f`u+a3;ub|7gK*<~M)BGZx{ufM)kBEr&Icj2R4kJkKK8V$4;1OQ5fkvz38A3pw0 zS=mLB_noPuiw4*FffD#JN7oBdg$ElEjE{}_(gsxj19@f+tJdn0)p$cQj1TIk1rY^mS08##l> zFS`S5r0bH6RVuj-Sf8@yb6WmKLh(8k!a*|dX+!G~D`&E>8j+eSWC6neMemE;1gUc# zlxsKHZQ#!as6L{SB{QWZ`AM?&r|W^A8!eR5J@40`gr7Ndzoe0?i`mO>;(sj=R>&?a ze>GB;KM5*-FI`}&=2qyZBd8Z!Mj`5(!#R>mtvK|Bzj*3bjZx+( zugnS8e-F2}wxdq{9}~wANA*E$xanN!g6T?WTj&I{p(O;rGqd~kpU((0WIJX($?`BT z<~ipHp-LGfPnS+NOb<)nD%UsgHjtkREGN>hFnCg7X&73fV$h(oUPd@cT`^V0WYAtF zUOlSoubZSZ_Ud&p>NWQ5l`V07%sZ9B7)Y_cZA&j*0xNZ|u>Fy-!nBtm-Y%bOmZpta z{pB9ikKmfYPcRs&r|4boQ0b830RQ`D1c#)zZskyFE>C@wb(DBCm>-W{p1*F|rOKfy ztV&`&XdX3hv+uP}y}vt;_Vt8=;e7BjX*X$%FJYT_+pD&BZ416*J958mcLTQx&j!y( zwwK0L&)iOn&uDhg)97(#iRYpq@nkxfkfiP5aI)<`*DPnm_+j+wH?kq8wv=wC;&HX& z{}5aUv5xCv0W@+Bl^%>Xm7;&_7hPXi+c*m^eChtuvw?axlIEJ@&^F%q+h=&VpKq~p zwsK%EQEDpBHQyRF*RgPu@b0T}UXOa5cwAq`d`8F+L55}qrZUS=&M?sM%y6bsZQ6X7 zZ`W0bWI(Mk~TUBmVw_mQ?GUXa&(zA(YXL|1QLVGuRkM?r*9_&k zwk(Tc51S6l4tsc$e=T!0giX5WTn#*?KGGtv!ugJ~iGz%!k8Hqm#bd_L#{c?Ij39xa z{ej?PIVy$6gv2JyUa1~kG{+2=wjzs;d^zJ(gCIDSDZ|zCVJ_&?X|lwaG0-w;m`BMa zbbGiN^nOJZ_8!6POqWe_8A|z#N4Q*I=T)Pg&l?{M-*n}M$+aUg@hGV*zEx(yrP<5R zvC;*m3$xwJMMNOV5s?A07s^MO;hx@Ws(KdgJ>ZozUy@-}kxGkk2THy1y* z()`^X9m@BAVIpRd93uHHi#)Slelv_l&=Ly*a}I*8haSww)z(F$9qayvD9oF0w8fRKf5n_YnO;Y8?=(@=c| zR%gvv*WlPCaPc@%H)`VRS4G~pMxyCuX#+#<)u*Pdwp7;Xb_Qsd%qcU&a2}fU*Oi`? z->NTaRS@)g`5St&CmZ)ZyDU*h3tOWb+5#jbk?XNU0zQ8ia8{%VmM0JWO(hS z{>P^%$mJ|?q;X_$1W(LbY~O6SxpLvSNWAzw2p(=RWQeV*XhF?!%};kO`3IknL@`mx z{6VMfbu{q?7`Y;qL(kkN4&E*$(c3Vzb^Z-oLa6#{_v9x9e+_)R)mWRzbB=axOX+<2S1UTRmG57&~H zoy=Yg#6WMdT`gW&ARQIQ^5toK4xlZsF#{)mwvsFkJ3LR>Fg6REEgDs_)v~H#p4e4L zjhV-;J!WX%=tZ^9sphWCIQn<^l}p!@_sqqNfJH$d65YGU(BjUu#E9T*JG<~Z->30^ zbO2qn2ucd5xk1ficOG6n*$HpFt+VfPTe-06vKsqo@&rvn7@L2acK17WbwYJmb&6eu zJs}Cs%*;Sck36;;O@tch>1SA=A0-H zxmTMkwh&!S00`m)fQTpnxV*c^Z2<6n4gfn=03e+O05l$-UiYZnt5K+$(o6k-`Muo0 zcym>FU%0_pH42@7ux-1Sz5P>)l9j9n94!%D$j3VkQNvGRvkoMVn+0?ce(da&q$%L8 zpoTp4=XU9KU+tUf5sKZM9OT9dxZlrxw3GT|WkWHiVoTU7q|w9h_}k2>RB2dWOBh;=T%k+Loz^cP7s&cQHe04Sf3?2Uc{|uFi_q7&Y2h>5E;_jAH4oWN z*|)r?3&mKN5Ygr~KU_?_J@Y>L8p~TX>*3W?*;s7Ol0Gab+Fn#lovzHGgPdF6lSi)G zL^yLVH+_Q=>wUEj-%sE@TUwrf1xP~1p7_iN_cAh+sDxHG1s_+;wKCzchDeCAO&#o-@o}`asDR~{uPgu1&}n#Oa=LFsLvp3f`C>Vt~|jK zy_%nl{Zg&~$MZF%AA1=UPk~<8^!g4H@3cdr`6qHkzF~rSpo=V%Q{$Dr?VYlliu04v z%=&RRf@F2de7c>);typLsxv{6>P2a7CpLZDX$>arZUIc2_Ku zUlbW`031ZK?1SN6t^_0fyGvg`-+!y|wIj(a0BaG-bmnF! z-?&Ny8zS6sLm&VVOE>O+ox*~U^9i^5Cev4Mr=}OVv(#jGI%h6)ozpvIw=QeWg5yL% zxc;dSYTByPsn;~w8I3%nVM7fPj~q;T4;*eQEH((##3K+F+ELsa=X*VuO?{$UoJERCFv1zCRtLIenGy2;i*IhzdLb#!lN%sklL-`-+F z?JxllW2nPY*Y~!;oIPgyr6C68E{%9$}}MS`_bfXO`Ru~*8xi-vjX-H zvjoT^#5dq8?}IJ&Wlp}ze&Elo>fpvkve9{Y{0o(4l0UkcbJe=OGP1WBh}U=wuzoO( zCb3vXz{I}y=8r136RhGZj7?Wab`-)4x%6(E35ET$*S>Gr{7Hy?1 zPvuKMN4}VU7FTXrm>eeq5bN>rBwlp`PgxV`{`=85$()C5uFqLw0HxJzMi4{*__${J zMO_0Q;^bTGu%N6*_-eEle8n4*dr{LGd=cI^nYaDe)$!S|w^k}Q2j^)sa|wa)rOWr7 z=U@&U{>sTuswbr)?Sjc9{E5BTD&WCFGRb!kCS_jD{BTS9)Yijf$eoGejH$BRliS>kQVwr#VP zPs^4Xc>MxrsW#M9V*lD85LOCp=F^GKJpn>%Q;Y^>4==VlYTCO|4^&7;9(e5&vsb23+jj1) z4F{o&?1`kXX!p1QbG-x^0H9^JkC(#5i6HC4TWS(z9%5Q}!C`+cIJOr-(fMiVq%-|BreT|=+0PWgXb&y5S$ zG_jI1l%yt}bT4l#k^g0eq2yHHjK&w{?`d3k@CQ?v1K)MT#dYWTTR+A7RoqtH(&|aO_;V>9LbLXPn3YBbp>+MnYOoTceweya=B)lEz5H zLp=NDAK0Im^8*inYho^qYR#Qdzn_6Db?UQTs4j<|%h}JQ5#? z5{Fs+B?@B0C()s2L3QFMo?LZZrBRzLX=X>-xfw1_^{nkMY^?6lVgoW|%aOd~y;V$f zSC2PJkfFe5A(&8sdo{0Co%f9>o#kz*CRzHQ8F$tEB>cewUnj)^>+%O%(dyCa!bQiP zd$9D}qa>x9CI;OPHw~G}AbY<}mG;j)*X33HunLBdiRVoznp0xEgd+S?KC>~mPK80W zQ^foF{<7rqIFN9hCB? zZ{1Q3@oG>#AA8vR@Mza{MS#=Uc_yV~`NUvJ{jza zT|v*pR%1$2TRUMF0e`DV+%8O#ii1Jz8+U5lkts*sd)3SKz%c(j|OkN$*b3z1o8lke_ zZzLZqleC$I#|o*|>1;QvIPMtF8WlW@z%EFY@*W$g1UVFe01tVC?CaWvKX+N~&SMFh w3o}1aSIuJtnzw?rKNs-3{y)=#g);%#4FR;juZ0`#H8`NAtff?~VD - -
- -
-
+ +
+ +
+
diff --git a/src/components/Pagination/index.vue b/src/components/Pagination/index.vue index 08ac487..4ec40c8 100644 --- a/src/components/Pagination/index.vue +++ b/src/components/Pagination/index.vue @@ -1,113 +1,112 @@ diff --git a/src/components/UploadImgFormData/index.vue b/src/components/UploadImgFormData/index.vue index 1f530cf..64bab59 100644 --- a/src/components/UploadImgFormData/index.vue +++ b/src/components/UploadImgFormData/index.vue @@ -103,6 +103,7 @@ export default { methods: { // 删除 async handleRemove(file, fileList) { + console.log(file, fileList, 'file,fileList') this.$emit('onUploadChange', fileList) // if (file.response && file.response.data.length > 0) { // this.$emit('deleteFile', { @@ -123,6 +124,10 @@ export default { // } // } this.$emit('update:fileList', fileList) + + if (file.id) { + this.$emit('onSelectDeleteFileId', file.id) + } }, // 预览 diff --git a/src/utils/request.js b/src/utils/request.js index 7150ecb..aea8700 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -3,7 +3,7 @@ import { Notification, MessageBox, Message, Loading } from 'element-ui' import store from '@/store' import { getToken } from '@/utils/auth' import errorCode from '@/utils/errorCode' -import { tansParams, blobValidate } from "@/utils/ruoyi" +import { tansParams, blobValidate } from '@/utils/ruoyi' import cache from '@/plugins/cache' import { saveAs } from 'file-saver' @@ -14,139 +14,186 @@ export let isRelogin = { show: false } axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' // 创建axios实例 const service = axios.create({ - // axios中请求配置有baseURL选项,表示请求URL公共部分 - baseURL: process.env.VUE_APP_BASE_API, - // 超时 - timeout: 10000 + // axios中请求配置有baseURL选项,表示请求URL公共部分 + baseURL: process.env.VUE_APP_BASE_API, + // 超时 + timeout: 10000, }) // request拦截器 -service.interceptors.request.use(config => { - // 是否需要设置 token - const isToken = (config.headers || {}).isToken === false - // 是否需要防止数据重复提交 - const isRepeatSubmit = (config.headers || {}).repeatSubmit === false - if (getToken() && !isToken) { - config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 - } - // get请求映射params参数 - if (config.method === 'get' && config.params) { - let url = config.url + '?' + tansParams(config.params) - url = url.slice(0, -1) - config.params = {} - config.url = url - } - if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { - const requestObj = { - url: config.url, - data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, - time: new Date().getTime() - } - const requestSize = Object.keys(JSON.stringify(requestObj)).length // 请求数据大小 - const limitSize = 5 * 1024 * 1024 // 限制存放数据5M - if (requestSize >= limitSize) { - console.warn(`[${config.url}]: ` + '请求数据大小超出允许的5M限制,无法进行防重复提交验证。') - return config - } - const sessionObj = cache.session.getJSON('sessionObj') - if (sessionObj === undefined || sessionObj === null || sessionObj === '') { - cache.session.setJSON('sessionObj', requestObj) - } else { - const s_url = sessionObj.url // 请求地址 - const s_data = sessionObj.data // 请求数据 - const s_time = sessionObj.time // 请求时间 - const interval = 1000 // 间隔时间(ms),小于此时间视为重复提交 - if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { - const message = '数据正在处理,请勿重复提交' - console.warn(`[${s_url}]: ` + message) - return Promise.reject(new Error(message)) - } else { - cache.session.setJSON('sessionObj', requestObj) - } - } - } - return config -}, error => { - console.log(error) - Promise.reject(error) -}) +service.interceptors.request.use( + (config) => { + // 是否需要设置 token + const isToken = (config.headers || {}).isToken === false + // 是否需要防止数据重复提交 + const isRepeatSubmit = (config.headers || {}).repeatSubmit === false + + if (getToken() && !isToken) { + config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 + } + // get请求映射params参数 + if (config.method === 'get' && config.params) { + let url = config.url + '?' + tansParams(config.params) + url = url.slice(0, -1) + config.params = {} + config.url = url + } + if ( + !isRepeatSubmit && + (config.method === 'post' || config.method === 'put') + ) { + const requestObj = { + url: config.url, + data: + typeof config.data === 'object' + ? JSON.stringify(config.data) + : config.data, + time: new Date().getTime(), + } + const requestSize = Object.keys(JSON.stringify(requestObj)).length // 请求数据大小 + const limitSize = 5 * 1024 * 1024 // 限制存放数据5M + if (requestSize >= limitSize) { + console.warn( + `[${config.url}]: ` + + '请求数据大小超出允许的5M限制,无法进行防重复提交验证。', + ) + return config + } + const sessionObj = cache.session.getJSON('sessionObj') + if ( + sessionObj === undefined || + sessionObj === null || + sessionObj === '' + ) { + cache.session.setJSON('sessionObj', requestObj) + } else { + const s_url = sessionObj.url // 请求地址 + const s_data = sessionObj.data // 请求数据 + const s_time = sessionObj.time // 请求时间 + const interval = 1000 // 间隔时间(ms),小于此时间视为重复提交 + if ( + s_data === requestObj.data && + requestObj.time - s_time < interval && + s_url === requestObj.url + ) { + const message = '数据正在处理,请勿重复提交' + console.warn(`[${s_url}]: ` + message) + return Promise.reject(new Error(message)) + } else { + cache.session.setJSON('sessionObj', requestObj) + } + } + } + return config + }, + (error) => { + console.log(error) + Promise.reject(error) + }, +) // 响应拦截器 -service.interceptors.response.use(res => { - // 未设置状态码则默认成功状态 - const code = res.data.code || 200 - // 获取错误信息 - const msg = errorCode[code] || res.data.msg || errorCode['default'] - // 二进制数据则直接返回 - if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { - return res.data - } - if (code === 401) { - if (!isRelogin.show) { - isRelogin.show = true - MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { - isRelogin.show = false - store.dispatch('LogOut').then(() => { - location.href = '/index' - }) - }).catch(() => { - isRelogin.show = false - }) - } - return Promise.reject('无效的会话,或者会话已过期,请重新登录。') - } else if (code === 500) { - Message({ message: msg, type: 'error' }) - return Promise.reject(new Error(msg)) - } else if (code === 601) { - Message({ message: msg, type: 'warning' }) - return Promise.reject('error') - } else if (code !== 200) { - Notification.error({ title: msg }) - return Promise.reject('error') - } else { - return res.data - } - }, - error => { - console.log('err' + error) - let { message } = error - if (message == "Network Error") { - message = "后端接口连接异常" - } else if (message.includes("timeout")) { - message = "系统接口请求超时" - } else if (message.includes("Request failed with status code")) { - message = "系统接口" + message.substr(message.length - 3) + "异常" - } - Message({ message: message, type: 'error', duration: 5 * 1000 }) - return Promise.reject(error) - } +service.interceptors.response.use( + (res) => { + // 未设置状态码则默认成功状态 + const code = res.data.code || 200 + // 获取错误信息 + const msg = errorCode[code] || res.data.msg || errorCode['default'] + // 二进制数据则直接返回 + if ( + res.request.responseType === 'blob' || + res.request.responseType === 'arraybuffer' + ) { + return res.data + } + if (code === 401) { + if (!isRelogin.show) { + isRelogin.show = true + MessageBox.confirm( + '登录状态已过期,您可以继续留在该页面,或者重新登录', + '系统提示', + { + confirmButtonText: '重新登录', + cancelButtonText: '取消', + type: 'warning', + }, + ) + .then(() => { + isRelogin.show = false + store.dispatch('LogOut').then(() => { + location.href = '/index' + }) + }) + .catch(() => { + isRelogin.show = false + }) + } + return Promise.reject('无效的会话,或者会话已过期,请重新登录。') + } else if (code === 500) { + Message({ message: msg, type: 'error' }) + return Promise.reject(new Error(msg)) + } else if (code === 601) { + Message({ message: msg, type: 'warning' }) + return Promise.reject('error') + } else if (code !== 200) { + Notification.error({ title: msg }) + return Promise.reject('error') + } else { + return res.data + } + }, + (error) => { + console.log('err' + error) + let { message } = error + if (message == 'Network Error') { + message = '后端接口连接异常' + } else if (message.includes('timeout')) { + message = '系统接口请求超时' + } else if (message.includes('Request failed with status code')) { + message = '系统接口' + message.substr(message.length - 3) + '异常' + } + Message({ message: message, type: 'error', duration: 5 * 1000 }) + return Promise.reject(error) + }, ) // 通用下载方法 export function download(url, params, filename, config) { - downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }) - return service.post(url, params, { - transformRequest: [(params) => { return tansParams(params) }], - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - responseType: 'blob', - ...config - }).then(async (data) => { - const isBlob = blobValidate(data) - if (isBlob) { - const blob = new Blob([data]) - saveAs(blob, filename) - } else { - const resText = await data.text() - const rspObj = JSON.parse(resText) - const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] - Message.error(errMsg) - } - downloadLoadingInstance.close() - }).catch((r) => { - console.error(r) - Message.error('下载文件出现错误,请联系管理员!') - downloadLoadingInstance.close() - }) + downloadLoadingInstance = Loading.service({ + text: '正在下载数据,请稍候', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)', + }) + return service + .post(url, params, { + transformRequest: [ + (params) => { + return tansParams(params) + }, + ], + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + responseType: 'blob', + ...config, + }) + .then(async (data) => { + const isBlob = blobValidate(data) + if (isBlob) { + const blob = new Blob([data]) + saveAs(blob, filename) + } else { + const resText = await data.text() + const rspObj = JSON.parse(resText) + const errMsg = + errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + Message.error(errMsg) + } + downloadLoadingInstance.close() + }) + .catch((r) => { + console.error(r) + Message.error('下载文件出现错误,请联系管理员!') + downloadLoadingInstance.close() + }) } export default service diff --git a/src/utils/request_formdata.js b/src/utils/request_formdata.js new file mode 100644 index 0000000..5796356 --- /dev/null +++ b/src/utils/request_formdata.js @@ -0,0 +1,208 @@ +import axios from 'axios' +import { Notification, MessageBox, Message, Loading } from 'element-ui' +import store from '@/store' +import { getToken } from '@/utils/auth' +import errorCode from '@/utils/errorCode' +import { tansParams, blobValidate } from '@/utils/ruoyi' +import cache from '@/plugins/cache' +import { saveAs } from 'file-saver' + +let downloadLoadingInstance +// 是否显示重新登录 +export let isRelogin = { show: false } + +axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' +// 创建axios实例 +const service = axios.create({ + // axios中请求配置有baseURL选项,表示请求URL公共部分 + baseURL: process.env.VUE_APP_BASE_API, + // 超时 + timeout: 10000, +}) + +// request拦截器 +service.interceptors.request.use( + (config) => { + // 是否需要设置 token + const isToken = (config.headers || {}).isToken === false + // 是否需要防止数据重复提交 + const isRepeatSubmit = (config.headers || {}).repeatSubmit === false + + if (getToken() && !isToken) { + config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 + } + // get请求映射params参数 + if (config.method === 'get' && config.params) { + let url = config.url + '?' + tansParams(config.params) + url = url.slice(0, -1) + config.params = {} + config.url = url + } + if ( + !isRepeatSubmit && + (config.method === 'post' || config.method === 'put') + ) { + if (config.data instanceof FormData) { + // 对于FormData,我们创建一个对象来保存数据以便验证 + const formDataObj = new FormData() + config.data.forEach((value, key) => { + formDataObj.append(key, value) + }) + config.data = formDataObj + delete config.headers['Content-Type'] + } + const requestObj = { + url: config.url, + data: + typeof config.data === 'object' + ? JSON.stringify(config.data) + : config.data, + time: new Date().getTime(), + } + const requestSize = Object.keys(JSON.stringify(requestObj)).length // 请求数据大小 + const limitSize = 5 * 1024 * 1024 // 限制存放数据5M + if (requestSize >= limitSize) { + console.warn( + `[${config.url}]: ` + + '请求数据大小超出允许的5M限制,无法进行防重复提交验证。', + ) + return config + } + const sessionObj = cache.session.getJSON('sessionObj') + if ( + sessionObj === undefined || + sessionObj === null || + sessionObj === '' + ) { + cache.session.setJSON('sessionObj', requestObj) + } else { + const s_url = sessionObj.url // 请求地址 + const s_data = sessionObj.data // 请求数据 + const s_time = sessionObj.time // 请求时间 + const interval = 1000 // 间隔时间(ms),小于此时间视为重复提交 + if ( + s_data === requestObj.data && + requestObj.time - s_time < interval && + s_url === requestObj.url + ) { + const message = '数据正在处理,请勿重复提交' + console.warn(`[${s_url}]: ` + message) + return Promise.reject(new Error(message)) + } else { + cache.session.setJSON('sessionObj', requestObj) + } + } + } + return config + }, + (error) => { + console.log(error) + Promise.reject(error) + }, +) + +// 响应拦截器 +service.interceptors.response.use( + (res) => { + // 未设置状态码则默认成功状态 + const code = res.data.code || 200 + // 获取错误信息 + const msg = errorCode[code] || res.data.msg || errorCode['default'] + // 二进制数据则直接返回 + if ( + res.request.responseType === 'blob' || + res.request.responseType === 'arraybuffer' + ) { + return res.data + } + if (code === 401) { + if (!isRelogin.show) { + isRelogin.show = true + MessageBox.confirm( + '登录状态已过期,您可以继续留在该页面,或者重新登录', + '系统提示', + { + confirmButtonText: '重新登录', + cancelButtonText: '取消', + type: 'warning', + }, + ) + .then(() => { + isRelogin.show = false + store.dispatch('LogOut').then(() => { + location.href = '/index' + }) + }) + .catch(() => { + isRelogin.show = false + }) + } + return Promise.reject('无效的会话,或者会话已过期,请重新登录。') + } else if (code === 500) { + Message({ message: msg, type: 'error' }) + return Promise.reject(new Error(msg)) + } else if (code === 601) { + Message({ message: msg, type: 'warning' }) + return Promise.reject('error') + } else if (code !== 200) { + Notification.error({ title: msg }) + return Promise.reject('error') + } else { + return res.data + } + }, + (error) => { + console.log('err' + error) + let { message } = error + if (message == 'Network Error') { + message = '后端接口连接异常' + } else if (message.includes('timeout')) { + message = '系统接口请求超时' + } else if (message.includes('Request failed with status code')) { + message = '系统接口' + message.substr(message.length - 3) + '异常' + } + Message({ message: message, type: 'error', duration: 5 * 1000 }) + return Promise.reject(error) + }, +) + +// 通用下载方法 +export function download(url, params, filename, config) { + downloadLoadingInstance = Loading.service({ + text: '正在下载数据,请稍候', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)', + }) + return service + .post(url, params, { + transformRequest: [ + (params) => { + return tansParams(params) + }, + ], + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + responseType: 'blob', + ...config, + }) + .then(async (data) => { + const isBlob = blobValidate(data) + if (isBlob) { + const blob = new Blob([data]) + saveAs(blob, filename) + } else { + const resText = await data.text() + const rspObj = JSON.parse(resText) + const errMsg = + errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + Message.error(errMsg) + } + downloadLoadingInstance.close() + }) + .catch((r) => { + console.error(r) + Message.error('下载文件出现错误,请联系管理员!') + downloadLoadingInstance.close() + }) +} + +export default service diff --git a/src/views/dataManage/product-center/components/addAndEditForm.vue b/src/views/dataManage/product-center/components/addAndEditForm.vue index 390f86e..9952981 100644 --- a/src/views/dataManage/product-center/components/addAndEditForm.vue +++ b/src/views/dataManage/product-center/components/addAndEditForm.vue @@ -11,19 +11,45 @@ - + - - + + + + - - + + @@ -33,6 +59,7 @@ :file-size="10" :file-type="['jpg', 'png', 'jpeg']" :file-list.sync="addAndEditForm.cover" + @onSelectDeleteFileId="handleSelectDeleteFileId" :is-uploaded="addAndEditForm.cover.length >= 1" /> @@ -40,12 +67,10 @@ - - - - + + + + @@ -53,12 +78,15 @@ - + @@ -99,56 +127,73 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -163,45 +208,62 @@