From 4639538a5a1208f9d9cb9eb0f297b80aafd6a7f2 Mon Sep 17 00:00:00 2001 From: luchenqun Date: Wed, 8 Feb 2017 14:51:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=B8=AA=E7=95=99?= =?UTF-8?q?=E8=A8=80=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/db.js | 28 +++++++++ public/images/head0.jpg | Bin 0 -> 6378 bytes public/images/head1.jpg | Bin 0 -> 6740 bytes public/images/head2.jpg | Bin 0 -> 6813 bytes public/images/head3.jpg | Bin 0 -> 6263 bytes public/images/head4.jpg | Bin 0 -> 6292 bytes public/index.html | 1 + public/scripts/app-angular.js | 1 + .../scripts/controllers/advice-controller.js | 55 ++++++++++++++++++ .../scripts/controllers/menus-controller.js | 3 + .../controllers/settings-controller.js | 2 +- public/scripts/services/bookmark-service.js | 26 +++++++++ public/views/advice.html | 46 ++++++++++++++- routes/api.js | 38 ++++++++++++ schema.sql | 13 +++++ 15 files changed, 211 insertions(+), 2 deletions(-) create mode 100644 public/images/head0.jpg create mode 100644 public/images/head1.jpg create mode 100644 public/images/head2.jpg create mode 100644 public/images/head3.jpg create mode 100644 public/images/head4.jpg create mode 100644 public/scripts/controllers/advice-controller.js diff --git a/database/db.js b/database/db.js index 7b7c01a..e2a6572 100644 --- a/database/db.js +++ b/database/db.js @@ -278,6 +278,34 @@ db.getTags = function(user_id) { }); }; +db.getAdvices = function(params) { + console.log('getAdvices'); + var sql = "SELECT mod(CEIL(RAND()*100), 5) as head_id, a.id, a.user_id, u.username, a.comment, a.category, DATE_FORMAT(a.created_at, '%Y-%m-%d %H:%i:%s') as created_at, a.state FROM `advices` as a LEFT OUTER JOIN users as u ON a.user_id = u.id ORDER BY a.created_at DESC LIMIT 0, 100"; + return new Promise(function(resolve, reject) { + client.query(sql, (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); +}; + +db.addAdvice = function(params) { + console.log('addAdvice'); + var sql = "INSERT INTO `advices` (`user_id`, `comment`, `category`) VALUES ('"+ params.user_id +"', '"+ params.comment +"', '"+ params.category +"')"; + return new Promise(function(resolve, reject) { + client.query(sql, (err, result) => { + if (err) { + reject(err); + } else { + resolve(result.affectedRows); + } + }); + }); +}; + db.getTagsByNames = function(user_id, tags_name) { console.log('getTagsByNames'); var sql = "SELECT * FROM `tags` WHERE `user_id` = '" + user_id + "' AND `name` in (" + tags_name.toString() + ")"; diff --git a/public/images/head0.jpg b/public/images/head0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c1e2b4e012b15c1f90ab71b05ca6c5c87638c9b GIT binary patch literal 6378 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 CAyaCMjyjsIO#{)2H*pdsmuhHcP5`1nz6~N^ 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 I+UdLh1Be2GQ~&?~ literal 0 HcmV?d00001 diff --git a/public/images/head2.jpg b/public/images/head2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96217deca65db898713651aec44332149624b70e GIT binary patch literal 6813 zcmbVQ2UJsAv)(6-UP2QPB=ja}5K;uB_g)3Dgd{*92@paNyCN#6SP%p|0#Z~IrP>j& zP!t6l>ZRCFR1~qH@=j3E`>*@o_tu-Nb@H9r)Ar2ll1$#6902Mr>D*`lJUq;RB=}8} zBLM51!irx4Ab^6|UI0uEpytPlM2QRnL6D4RvJ;{>cvb?Rkj_jbknltTu$h~l$YjNH zM7StU3|C;Q_vZ9@Jsg*9s~1M`A^Idbabmgd8A47_hHo${Bc4TP>&>;p*`zbl`H6gv zh>1(*^90F^bX&bC;|v&!*#te@l!z$aR?k7~6*tevALo=Hx(m_8!A0y(Y~!DFX-*UxiAW(*>2%nJixthviSFu3qEf9$ zE;O1W@t3ZLAX&r|usFZ`a$&zebgf+fRhQu;PNl4^za1Nn`3kuIE|evn2xyKTJ}B|l1Au}S6akPk4c)X503hJc z)R^JanBvy~osC!Ouci~MqO2t5rM;XSl%40{B(=IlvUM;a!@a$P_FA;K!WBT0lvhTO6EZYZBes+JcOS(?3oBIyf!$??7DJ9};5$ zQ#FIsI)3wh>;C2?6azpThjX*_H!rFXfckX+sNet1GdKV@V~A`EIOiYB7bi|CD}e_e5V&Oc80O$C{^P^+z1D z;bVv+dlqUU^|U&wlhhjN$RA=ieTPT=*4{%#Fc`*-nAMI97@^ zA%38NG*AF4Km*JI`oIKO05YJ0Ilvyc08iitfo`9EN6np>^5Clm;a*#5l0qH=7kU2z#XpkM` z0(nD$P&l+0ih%@B3bYJb3*|uDp(5xYQ~{lU8lj8ORj3=f2Ms{O&^zc00*R1Cs35cv zMhF6ehHyZ5A%YPL5HW}(LE{fL){aU?*>Ak~n%NDCwl z>4fw{Mj)e+LgWf$HZmVsj68;HLS9DRLiQs^ke^W)lrjp3vOvv2xuZf*EL0L|1!@zj z2vv@%L$#o8p$1T+sPAYwv=-VN%|Lsg=b>ZJY3M9;KDrEDi*7~tqMx8YU@#apj4_6a zamR#X;xJ1wn=pGZ)tC#IZp;v7TtY%ZL&99bR>Dt$DIt=`k|>loB5_{grofpt^q7o{jGhc#CP0QOvr1-{%yF43G6OQ7WtC*jWSwLqWm9Cg z$R3uxAbU@COioVDNX}j^LQW*NMXo~blH4P?Px8w0czF+bw){%@-STzvH|1X|NGTX9 zI4CSs$WX{vIH_=5VMI|%(MZurk*T;sakpZl;vL0ttTL8_^~3V9o3NGGtJvpC5=ur& zE=p{rOr=9gmz0K-k;?kYPRcChwaO*Rt;$bSFe=6>9x8DvIVwk0x>QD0l~k=%LsipN zcdMRN?N>vp8L4@w@ziqFYSeD4eVL&>!(j$z#>N@PX55_dQGKSmy*fudTfJJnSN)3y zPQyhbUSpd^y~aaLl%|Dtq!em z?OEDx+KJkQ+LyFPW~t4xpA|PNZ`Qe4!#c`3b~;?0Je~78FL0_j2OJN#3)g}h)z#8< z*GW!Wos~dY5XBbx*KQNIqnQM|{Qf$&=iZP{`#+&Xny1w&svcdALmAMtiYM<3ziZaEAvYygR`DRVE z7Fr*(9;O;l7gP68@6c3e{(6-+WXSdkyfL;Gw-MP%U#d8Pk_3hdAW%kb;OdaAJjySw_BsvNmYaKs2 zF`Sk=U2sM^yE$h&ceyCJgt!#BJaW}@jd87V9d)C)Ep@x#j&}EQ-{yYDL)(MpQQ<)MuND5pQcsWQpXi-pQ(1&2h;N0N85R;IUkmgW@(8$n=(2rrxVcWy{=Mm;DpVuC) z8O{xFh>(Z~jVOy4pYJk%=lmy;l*p{e+Y5{rq%XL-P;((~;n_tBiZ`=p`&m zhLRT~H;7c=%Tz~-Ny@sEfmFNH-Kn3_LeoyBW77rc9ZSrXY+Ujz!!@IHDQYQeY4bAO zWviDBEO%Iba0Rp?YDM!({gs(3pR96QRlZt!b^PkiHN-XB*SudFwzer#J9Aa$&^otu zRax>`!mK;%=d9nq0kwg$kIbS!iHeK6H+PrJ?Z?_9L=YQ9ze{sQTOl!E?U-n$wK4GOmw zel3bE>fPv`Hb`97ZNXwT#UIm)V!#<@6xp}zW%^fjzjgoF z0q22^!JxsuA=c2#$H|YsKFNG4_cZ^R&a;Z=3g1q?+cc&zcKE&3`{r@~@kbx{A0|F#f719={+agq@|UnL&nD8o zN_^e*&GcK-cdzdcCi#<-ldpmN)E^LleF44;K$CqS6Ce>{f}cn<5{X2kQAi{TjX{eE zBZ+|zFbRyLq?EL@w3MXm6v>N8ahf0`3I!j6vXYXrO7gPuN-E+J73|bF_Q#jv&#!5n zzk$gM04oV!L&!)73lLZciG?OxKsg*A3V{^gS$+{lLQ)Eeh7c$Sz|o3-7EKcdErCEu zLP$jbArUA9Mgk@CV;BL4hsFS`l7y}#iAh$rv~md0b5yaG3XEb=N0U}>J8@CpDQK-K z4GaIy!XPjhDb!D&5CULzNl26fI)Is^M8=G+KBy;DK5@}8Fv?QJN@8308p^<+!Q_1) zi-hCBBC%jDII$_f$GQ!psgXR?d9?M^&Zg9>uiE8<@#g!AKKpEzmjwh#H1W{gWRoX$Bld8OQl(C#&72s)LsQb8PMhw03nckI( z?)YUL;U^>eu54{a-x1CZ)hxhDO@iT2oh=v5H$K$gprq)g$DPy3xP1R}7@d-$nc90Z zZpTBf4ra4d<^svix)nvkQjY>Ng@f+LUDl;jm?WI;=*X!*_{wb;Qjw?0JDk_~J z8Oj=lhR#qQ}GjD)*2_hi7R#GI|l8&NJ)^Tc_*0iL3cKZQ z+>OTl(BPU~cb+mdj&}QKip-YVQlW?Vh_j_t$NW}d*S3?NV7ju?@=Mx{gFt^wrH*hH;t-l5`5^d0YnzEw_@{ zV4(kqR#IMGsFZJ^HChp3dX)RHyaaLTd8nSYR&O)HF;8*fR zr`p^>wL>Q9ZKr`13wiE z9nU!yw87nGL1KaDfwCym0@>ruyW4ZFf5B^?JC4I`C4$)ZHRnk(o>B*6cn&JtJ=-6R zA8CE21QafKl=xb*Zxe}a81)O6tR`N!9>&PoyzC%9h?}V4)+&+gqg~5Xd))GbA^P?K zj>FHr3DH*~sCd%?3rtjo!+jZ>ch{ z;ez`EXX1nhNfM_{483qP@Jnxy{1T@8+1hDo(d~Cfw|+AtIxh3P#O{KMlV^9W+pHXV zV%0a_HrA{r^9N4@;&1mB_(o;d9lB8|`e3GDdfIlDhMam~otYe=rYK!0P#=11MhV*y%%V|N~lIlC$wCx+_yjRQD1JO-$SZlyY57G<(4@CN6(cfG~H!; zUb3$^fW(9QdZ0MbJLT27Qu8?OAqQPa@9hldJsun5*3WJ7s0;DDGKOrCT}?KQKDybC zF1h$cz0U-{mh@#wa5=wDc~Ctwf5us((@!^KuG5kq^RLVu}Usx6NHgZ{r!-EiIG{`u?f&cjy!p zNjXzJnjMB!CMsl_O+K{AU;iq3?&lB(M9K-K7e#H6gKp@ANrtqY<5?&e<<|_m10t9jjgTS9`_K5(4Ad&WTCzY!WPF zguTrj-^m$E930S!IQ!S*tMq4`$_1geN7Y7F?kWFPt@B`bWQJc@b=3@2Jn;(s^4*XE z`8jTatmAm+xx{J$>D_}|!>7yI?Gy%=Z#iR;9MgB}?Zy!c?3KS#f-WpKjdmN({XDi{ z?7V63*Yj?Lo1ZbhUmxs$>R0F7aLcYyw8NJ3HGZ@(qjqH#<@Dxvmfwvx>YTXuY7(Tq z&iL}~(&iP2UIoG=SX}54bZ_M4xb2Rw=T|_zi>;>wU@LSAEg eX6;4JSoh$p{L_=*;n4T}C$+pLC`Erw-uoXAyrxS4 literal 0 HcmV?d00001 diff --git a/public/images/head3.jpg b/public/images/head3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..61955de556545166d712085e09ee51a08bdb1b05 GIT binary patch literal 6263 zcmbVQ2UJs8w>~$WUPU?~fHVUMH9>lb^sW>OhU5x?B!nas5j&!QiXdRYil73DohG6p ziUm!eJSK;jD~A7M)FUaV9#ZJEZdj zJXp*mrt`Rbkwdx@X~MVzf+cKA5^+LAoajVylXxXY1_Tp5l7ukP*20#|qEKy!_H+xX zE!Bobok_H!P^~Q~)|OOjGS$j~LU*9r5`Pd0@g`(1b_n%k{P2amIgx%$DlIL|BF)+& zNf>8IrPJw_6e~+BD>5QM7A@h6ndxM{$l#|1Pgukfas*;d5}zos$c#-&5j&BPNGGSj z69fcI8UDv?@pzJXO-PHxq42LT{!v;KzC-|9hQgwx6d?;n#0`EbBf0x`M?VGGtSLD` zijX@oPd3XE=E6LfFBTysq)tSHMD7qI3@X*$ zhGK6;v7=F`G@6H+lQBxdqi@K3)S#P6i89phhh9Xy0EQ=B9WPfFtc?3Up8Byo}`K1o3I z@F1E*aQN(`G?A&Kl0O24g`8BF%@8K>h!dr7;QWJox-HuVwvLS@Q>|l}WES0qNoG>0 zc4T@iZ83!f(<%10bkYxf_CKVJLZwmumNp8_+Rch?V~tFlL8CE9mPkNsmIG^Y0zW!6 z3{L)mxEyC+Sah*bL=0o{GaM}?U5D_9lW0=T@^AXciY zvXa^GVrB|gOmYr}lLTCt=$6V9Glj%3WF3dXETj%`DO{%TKRr&GlX(2;WFn;B7RJxm zkkuxEQ_CEAnc65|KC(Lqk!@i7CGh@LC~FG}pt<`5U?f`)01DbrG(c+^&DKT%fI>bK zV@4BWieLNna<0@}O}Dg(wZTWG4Ua#Ojr8&GhzSl2V)*!b0SE#>*4v-MPeLgIz~hUB zp|jnIkx|h^dOtD@5oH**lm>oMQjq zfD%g}6axSSBjVO7Sy19h{Q-cOa?lq{O?BiJC!b z?Z0@xbbs-Z$^f8^BDvZ8ix;~cfV#B+s6YJ0Gu(?bV-^6lH-DRtnxtQTJ3}}y%R-XS zDf(XprX>G6_|2b%#NSlzh@O+nmncapD~XF75JVAj48uh7e>U;|Tk*HBev4x!aty&j z7}=(YbCE9N@Z*qj^VytefibEx%GEiBlO{i_CGSp#IE$Ra5I_e&(4>gP$MFX@9S`Dp_CZlO+4|EVZ z8od}TL@!6@qD#^BpUP)yA4*9k4#wNNgN74V#TE!5+Y##$LkS!wzCU;BYuKoH5QG=Z%ZP zCE%9gHsE&Qj^fVaI&lNIQ9K^6fj7rH;e+r@ycnO2-;O_wKZn1KAH;tm$Pn}hRs;qi zn!qQlCX^7W2+f4sgdxJ1l%kZ8l!H`|6kBSERK8TXRHM{QsX?hRX(ef6X(#D$=>+Lj z(%YnKq%TSLO23nlks-;@WkO^)GAm`a$sCipBGWJPSyoxrOx8nozHEx@CfS3s=Vc$r zzLS%an<3{a7cD22+ay;hcTw)K+$VVzc?)?TdA9rt`BM2>`P=fZ6r>c46x zD4bNdsqjKkN^ypwhayvPxnikegJQShsFI2jRVhe`r?f$-O6jW7Q)RsJ3}r86wsMy8 ze&vhG11e}00~HSymdYBHa+OOegQ_@HV^ts31l2s%BdQ&$Bh!?p*-V=|Eqz+)w6oLt z)X-`()O^&qYWZp>)VkEZOxKz2HXWXxGreZ|?dc!YwbWhJVf9?~qw4q6zi1FOyfhLu z3N-389%*7U%``(a(=>N$UebJ_rK&Yci=~yTbwcZ*HcHz}J5+nA_I~Yl?NJ?Fo!L49 zo$WdobzbPI>ALDB=oaZV>ps&{(R0@0=oRUm(|b;wMsy=`iQ9;+#1VaMeQ*5~{eAi! z`eP(x(j3xi(oxbQ18D=A!D53VgBF7kLp{R)!%V|!!-qyvMl_>%qpe15MjvMw&xn|@ zZbsdVr^f2WKE@fw)yBOhawaY&$tGnccTI7oG}A=WU8c9pP-eDf@n)rFH_cJzcIF)O zUFMxLu`}s2`7_IAc9UhvZsb&QHM!qH&BEVewMCu9D@#MmXv+f2Hp}l6TMCy_PU)d4 zQ+=tcsg2aPR%TW#t5U1G)^gSi>lN1Z)^BXgZD5<-Hur5+Yy)i9*|ykzv$MAo+SS-S zvp2L~WWUqCo2E(&rfr~Ip=0Up^cD0b`ez3_2eHEmhu5>nvl3@j&3fu+>W60IzB9)N}my5d*5Zg zt$wn8VSYROp7@*j3;i1dPyxOHTLO9mjRN_BbwMD=CumF1qhRCU>~Cv*a_>%Y+91qS8&YJ}9 zggpr#6N3^DCXRC>xJP*e-XdNDUzwlCZ%xuoN>Az(m8B~w3hRc8M( zw`Kd5L(5~Ax2!N&k+ouQ!i>U!Edg67sukyL&Z56bN z$^)7Q@(z4E$UoS3DD+TkrF~^(m3CErHL5zL`q|<6hi@J6JW^jnuGx1~?P%UHa4hB6 z^W%$-cb)J%(Q=Y@vgVZ0shy`)PUqG_wM%M8>f-DA>Z9sA8+;pD8fP`0K4Wp_V3U4R z>Dg&#^P8ocvzo`xWt)#WuILb61?M zG+lML+Hj3_t?s(r_1bpZ_R}|PZ=CM1>!`hHf3yA;{Z?bAV`uYim)jTac;2~u*XQo_ zdx7^lyXJJ=@1Eb?cb|R#=>zVAHxE-Ej`ghU#rEbtQhZeMSo?9=AEtjC?X&AU+wa-m z{v_;4&j4#+_)pQFUk9`PlKZPE+H>Ca+Gt zc75GG5;-#XM)+p@?S^+6?+(7VdEYV`Jo@+p@59)~+)o;x4t=J5Zu=7PWoRtzEB@=Y zZ>HZGzx#df9p{aYkG}%)6MsMe_Iczk0FC#6EPzHy2zjEhXfzs&#h}p`EDkFn907+M zV0avXASEp=Ek%%>AbANXP7#F0V30#lmOzkImY0=RR+WsXDou3CT5*7!P@%jX+imDrvWMwcdd6ino@mOooNgJ`9J>nBWqcA7}{)a&b z1(eVjePya!2sU{Yv*7pzl9dW>q~AR>R%oL-{t(EbAtX+;5^w=KPrX_O$tiAVAKU(E zf8K5->)zc)H3@}krHjl8Y|3-jJi9Lw?e?8$qeHvWTQj&ZzoHGif3nP7^knDD*6oKA z{i}67?{Lm}7vrwvt>L@Pe?VzE=X79AKe5tT=ny`Q|7?MP;y9G2)2%jYSKqZaB2d?v z`eASRp$ga44vHCyDG$u$6tmZRcp7N!d{@~Uck%PWWRAYQxj3NY^dT(9zwlHW%+_5O zyY{mgk4>&FiT?atMU(ex&ec&K@5t+b2Jg`3{WT5= z?vRU0uFc1lwk|!h;4>v13_sq9=6OwD(i0HPo=0cS4mMHWWRJb99I8E=aeSa=WdgkE zmCErAcfiY*&difH0{(cvv$|r4)TW8O$H+SMFn;5l*MAN; zdn^O)I=F$O1A7O^CCS1q8p|87qsH+E2OhjGJ`?n3^*R&5krRWNo8iYZ^Jl>g?NPlA zy4#HW9Z$XteGr|ntUMwRI<(^^>pFLXYvjG6m(DRo+iV{!nn;Mp*7W8i>o+&LH}nNA zzW;6TJ|UnbBp6=Vd%5Iv^&;akRArD#fc=?eO1KtxYyZv8&@#4H1Ot!to0oE zaPN|Oc%X&Fs}t9+ZZC=Hd66>?m^Y7q9J+Y&N^-GJ-F$;q$fvNVYW=%X{4k{on|a0f zkYe|XJl;a{s9kwo5w-<|RY$7UxQ8ceHKf1I{aVmL9a}Uo4w~Oh8yl6oHYQTy*7jsB z?$`HA<3;Q1Nvp%4v7+IwLRNS|`8~CP5JuyOmT z>!`@yzk2wDcCfpaZ$`1H?^Dp}P~`)px15)s!FgiQNs-AboRxc?>r=Pj&$8&3@>XN5 z3+8PNzqTZR_M~vvx6H$7K&CC8O-_muK zvFjx!lp94$74p8B=i0p;tUK_ysH6jPxrRdOjntY~ay?Xek0w5NdeF5~cQpMOPgGMq zT9us`Nu4U$>wO10V!ni*8zqhd?z2ZnOA^Kbf5oa5CzrAme6QQIWV%@Qm#N6FAjhow o_Rx5?22U^!K8-2le^Sa^QEqdgzTL&;TLdB<+uWdjbNs>o0J^%R761SM literal 0 HcmV?d00001 diff --git a/public/images/head4.jpg b/public/images/head4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..375793f6663f5f68681be0c560f80aa44a3be96e GIT binary patch literal 6292 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 I%jo_80Y{>lQvd(} literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html index fac6c29..294ef17 100644 --- a/public/index.html +++ b/public/index.html @@ -51,6 +51,7 @@ + diff --git a/public/scripts/app-angular.js b/public/scripts/app-angular.js index 368d09f..203c3e5 100644 --- a/public/scripts/app-angular.js +++ b/public/scripts/app-angular.js @@ -33,6 +33,7 @@ app.config(function($stateProvider, $urlRouterProvider, $httpProvider) { .state('advice', { url: '/advice', templateUrl: '/views/advice.html', + controller: 'adviceCtr' }) .state('settings', { url: '/settings', diff --git a/public/scripts/controllers/advice-controller.js b/public/scripts/controllers/advice-controller.js new file mode 100644 index 0000000..119c1a7 --- /dev/null +++ b/public/scripts/controllers/advice-controller.js @@ -0,0 +1,55 @@ +app.controller('adviceCtr', ['$scope', '$state', '$timeout', 'bookmarkService', 'pubSubService', function($scope, $state, $timeout, bookmarkService, pubSubService) { + console.log("Hello adviceCtr"); + var maxSelections = 3; + + $scope.comment = ''; + $scope.advices = []; + $scope.category = ["功能", "BUG", "其他"] + + $scope.ok = function() { + if($scope.comment == ''){ + toastr.error('留言失败内容不能为空', "错误"); + return; + } + var advice = { + category: $('.ui.dropdown.js-categorys').dropdown('get value'), + comment: $scope.comment, + }; + console.log(advice); + + bookmarkService.addAdvice(advice) + .then((data) => { + if (data.retCode == 0) { + toastr.success('留言成功', "提示"); + $scope.comment = ""; + getAdvices({}); + } else { + toastr.error('留言失败。错误信息:' + data.msg, "错误"); + } + }) + .catch((err) => { + toastr.error('留言失败:' + JSON.stringify(err), "错误"); + }); + } + + function getAdvices(params) { + bookmarkService.getAdvices(params) + .then((data) => { + $scope.advices = data; + pubSubService.publish('Common.menuActive', { + login: true, + index: 2 + }); + }) + .catch((err) => console.log('getAdvices err', err)); + } + + setTimeout(function() { + $('.ui.dropdown.js-categorys').dropdown({ + onChange: function(value, text, $choice) { + } + }); + getAdvices({}); + }, 100) + +}]); diff --git a/public/scripts/controllers/menus-controller.js b/public/scripts/controllers/menus-controller.js index 5943a5d..8791165 100644 --- a/public/scripts/controllers/menus-controller.js +++ b/public/scripts/controllers/menus-controller.js @@ -19,6 +19,9 @@ app.controller('menuCtr', ['$scope', '$stateParams', '$state', 'pubSubService', }, { uiSref: 'tags', title: '书签分类' + }, { + uiSref: 'advice', + title: '留言' }, { uiSref: 'settings', title: '设置' diff --git a/public/scripts/controllers/settings-controller.js b/public/scripts/controllers/settings-controller.js index 3221315..976ae33 100644 --- a/public/scripts/controllers/settings-controller.js +++ b/public/scripts/controllers/settings-controller.js @@ -45,6 +45,6 @@ app.controller('settingsCtr', ['$scope', '$stateParams', '$filter', '$state', '$ pubSubService.publish('Common.menuActive', { login: true, - index: 2 + index: 3 }); }]); diff --git a/public/scripts/services/bookmark-service.js b/public/scripts/services/bookmark-service.js index d2b3ed6..0641efe 100644 --- a/public/scripts/services/bookmark-service.js +++ b/public/scripts/services/bookmark-service.js @@ -221,6 +221,32 @@ app.factory('bookmarkService', ['$http', '$q', function($http, $q) { }); return def.promise; }, + getAdvices: function getAdvices(params) { + var def = $q.defer(); + $http.get('/api/advices/', { + params: params + }) + .success(function(data) { + def.resolve(data); + }) + .error(function(data) { + def.reject('getAdvices error'); + }); + return def.promise; + }, + addAdvice: function(params) { + var def = $q.defer(); + $http.post('/api/addAdvice/', { + params: params + }) + .success(function(data) { + def.resolve(data); + }) + .error(function(data) { + def.reject('addAdvice error'); + }); + return def.promise; + }, }; return service; diff --git a/public/views/advice.html b/public/views/advice.html index 2453a0b..e5bb896 100644 --- a/public/views/advice.html +++ b/public/views/advice.html @@ -1 +1,45 @@ -

这是建议界面

+
+
+
+ + +
+
+ + +
+
+
+
提交
+
+
+
+
+
+

最新100条留言

+
+ + + +
+ {{ advice.username }} + + +
{{ advice.comment }}
+
+
+
+
diff --git a/routes/api.js b/routes/api.js index 1be6ad3..926dd6b 100644 --- a/routes/api.js +++ b/routes/api.js @@ -400,6 +400,44 @@ api.get('/tags', function(req, res) { .catch((err) => console.log('tags', err)); }); +api.get('/advices', function(req, res) { + if (!req.session.user) { + res.send(401); + return; + } + var params = req.query; + db.getAdvices(params) + .then((advices) => res.json(advices)) + .catch((err) => console.log('tags', err)); +}); + +api.post('/addAdvice', function(req, res) { + console.log('hello addAdvice', JSON.stringify(req.body)); + if (!req.session.user) { + res.send(401); + return; + } + + var params = req.body.params; + params.user_id = req.session.user.id; + + db.addAdvice(params) + .then((affectedRows) => { + res.json({ + retCode: 0, + msg: "留言成功 ", + }) + console.log('addAdvice affectedRows ', affectedRows) + }) + .catch((err) => { + console.log('addAdvice error', err); + res.json({ + retCode: 1, + msg: "留言失败: " + JSON.stringify(err), + }) + }); +}); + api.post('/addBookmark', function(req, res) { console.log('hello addBookmark', JSON.stringify(req.body)); if (!req.session.user) { diff --git a/schema.sql b/schema.sql index 003b98b..52a5a99 100644 --- a/schema.sql +++ b/schema.sql @@ -46,3 +46,16 @@ CREATE TABLE `tags_bookmarks` ( `bookmark_id` int(11) NOT NULL, -- 书签id PRIMARY KEY (`tag_id`, `bookmark_id`) ); + +-- 建议留言 +drop table if exists advices; +CREATE TABLE `advices` ( + `id` int(11) NOT NULL AUTO_INCREMENT, -- id + `user_id` int(11) NOT NULL, -- 用户id + `comment` text NOT NULL, -- 评论 + `category` tinyint(4) DEFAULT '1', -- 分类 + `created_at` datetime DEFAULT now(), -- 创建时间 + `state` tinyint(4) DEFAULT '0', -- 处理结果 + PRIMARY KEY (`id`), + KEY `userIdIdx` (`user_id`) +);