From cea7e09e29bc75cfb12cd24c671d94299d8cb646 Mon Sep 17 00:00:00 2001 From: jinchao <383321154@qq.com> Date: Fri, 9 May 2025 13:31:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E4=BA=86=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E4=B8=8E=E6=9C=AA=E5=AE=8C=E6=88=90=E7=9A=84=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Release/database/XNSim.db | Bin 172032 -> 172032 bytes XNSimHtml/assets/icons/png/cancel_b.png | Bin 3460 -> 0 bytes XNSimHtml/assets/icons/png/cancel_b.svg | 1 + XNSimHtml/assets/icons/png/complete_b.png | Bin 2709 -> 0 bytes XNSimHtml/assets/icons/png/complete_b.svg | 1 + XNSimHtml/components/todo-component.js | 271 +++++++++++++++++++++- 6 files changed, 269 insertions(+), 4 deletions(-) delete mode 100644 XNSimHtml/assets/icons/png/cancel_b.png create mode 100644 XNSimHtml/assets/icons/png/cancel_b.svg delete mode 100644 XNSimHtml/assets/icons/png/complete_b.png create mode 100644 XNSimHtml/assets/icons/png/complete_b.svg diff --git a/Release/database/XNSim.db b/Release/database/XNSim.db index 1e28a189d0429b1505918dab2c775a4f08be3823..437e4841563eeafe878e3db8eb01212661371f0a 100644 GIT binary patch delta 199 zcmZoTz}0YoYl1Z6s);hrjH@;#EU{-6WS=mZ-9eFweZt1ZH1?P%L3T++S!ZW)Lp=jM zLo*`-BU4=iAhI+xv@$feGO>KRuk~ryyeGT5UoPDFa^cpOa~D0`zUk?@o@X5s@JJ=5 zt~50Ov}lTcp?gJfT~WM2VWZvhCmz|H|S0SY)EFf=+cGCD9Z HrqBV<)Vv`L diff --git a/XNSimHtml/assets/icons/png/cancel_b.png b/XNSimHtml/assets/icons/png/cancel_b.png deleted file mode 100644 index 5d19dbe803f1ff530becf5f3ea8e5593fdf89c5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3460 zcmd6qc|25Y8^?zx#y+-eM-7gogdxjVCSw$XC?k|m%^+fAMu-%XtTl~OmaKV9s>f2O z(AX-Ou@|M0r5LJt8hN#-x2e46`8)fB~{JwYYULSWQd0lw~ z0-;3maPxy_{@)Ku1|A!N8Y|&Ris9$(if9}GM6d`?awGUBhb~ok)o4ghk;jaw%>HSs2ld?f|RA2wrRYy9OS~xb=z!t4!s+nEW^(3^Ln}^+Fygv zqrj9lyoN!cyJ8r6EhyvMeh$hndaOXQaAA<;B2cTA@JMmW?PiYVdIS0I~fRM zfVvBsrHqPkMG)+rFzFaz9XiLTM+ao-)i@ZWV=8u(S_x4Y55R8sNm$|#wIjSw)rDgf|)ROY~X@XIwpQv`-PkoQp9<7MaLaMm~X@WsV@1NpGL6p~cU6HKbRuqRtfq{(mydFQ^7N(6JL>xo7QoSol$Y~m^sO(lYtbbaF$X3FIc#c-IEcVIz!;3 zY0LZ$gcQ;ganP#<3$gY#Bsok+jiPfj0E8Ys$ z*H{}bb&{CxJRPd{N}>D^cPosQ0sGN#$ft-(NtqfcNch?F$5K6attX9~NMviItn2$7 zG$xS|w8gNvFei{#r zlc142z>%uWRIJu$8g&QLERG)Xg*pz$x6DsL_%gnzCf~aMWG*&9$sKKSC+rIKtamMq z(K(%R#GY|_vnHEE1}h2-Ms^#Zd*$jw4o(^euwrRY#}@vI2sieW-ySyh!KyD542FApEkQL*wcpxMLADir*&lVC{hb)xyaaD|R zijFQp-X+urn?w?4Wi||aP5B-TSSUrZA{D+W5#%!}x!`SOdQ8$n)bfDf@yoN0BTe`n zOpQ$EKvJms!uM-NUcqtU%X}xHz3ka@^+s>nHyp3Sk1WzZ+#|45V)mbS)E%Ze0{EKr z=I9UTfJKM0;v2kb(CO~<8Z_~LSf1Nn+wYP+zEHTVk_q>GNaER7va44YDu9lxcX_Sj(@nk

_wG_~p z=61VCi4ZO7Ep>{%+>0-aj$|b{G&hgtmI9aTM^x2y2}f^gYLoN9)vvCXh59U;HOx=K zZ#y3DDACBntX*1IThxmOVn=b}nyJt!7F?C!IJ3761)-j%e)op}^a!vT!Fd_6O-I~3 zFe_hwlE^;jXg&8DjFY1SV*cAKxUy?P0OxAtp`5q==oN>{L8gfZ!n;T3?)|bX$8G#q zDTZg3Hz^+F8T%QC5%2dwL~b242Xk zN622DepAJZj8=65UA@Rd%BH{7j@yMo)) z=w>F1YR3bAqUO^QO!_QLc~<*>d#s%uM}sSfRRDh;7))s!mh4nR&7aCN>8OM-3gV6_(aq{8x8%-pB>E!Ng5wb7Dn4J+NVokADyeDAU}6ied212ZWL1kWhL|wp zHCu(2c)rIndmkSsu)ncsvUU5SOXwpW-^U6sJiQu8 z?N+4%mT@?9=u6cJ+z#`Wxzx{dZFBXRn8!y>4aUc#A0t;P^L;NViyfJY>lV{`Le&4(&nJI;a&L7r-ZFKALbD-B*gN24H5%g4!axJD)Vg43H0#{HI=eNZL8$IckZ z6fT;Sj^Mc*>0AIiL0*|G~zs@C$Wn3)n%^W<2`w2grW?T@nF z&-nD1^Y#5JhaZ-DhS5TFqoUw5BG%@a1HBU}|1xEBUA1 zIpCYalTn=sGL#MK8}xUXEjJnD$nGaqMyf~-R#)JDzrVtD5Ar2-fg-()B#WblIqHJj zq#t?27|CoyfBYq4%rZL^I&Cuj;uC)p!Re-Fb8tb`ATZTcLZkmQU`#`EPGHmEP+EDO z3+$xrDoDw&(q*CfjniIP!^3ZBB#DD&Iz}@iq%iMS^yU8e8{|fE=CEo1`h2eu%0GMD zy&hN+W4MkK`cFKu{*~(jw9xxx#x-?z;h#*iJ)5(WQ^DTWFqRGOqesp@$y0xlc+f1H z)Z9|f%ff8*Ck~BkZS(bIU09pK@L~&u!Ma6;{W_3Oyx9i$H+}GZu(7^9ofXUky7h34 zi!&4ui$=0E znx7|Ag*QkJ+`agFK9p_fk?EtkBP0b@q~=xxY;O0Xl#9NYlVm+!?HuBg$6%|)@%F4| z+&Z;2m=|G(yYTEx{@RXJh*~a=IN#K4L%VK^G~HEtsuWDe?74rD;|0U5ALr@~5=?^B zDUSylFbV$OEWZy$OEzf!4Xpxm(er|2<>G{2e5~HbuI=t@8*HMPS_@Nvu{4%KUWM?C zKwkvm&p1^%9}8b>@>bU_ z(Eh(}zZrm@II{n&IN|c)!hB6`wQqGAn%`O4suJx#sRYA+?F$WEA_DeQY^@&r_4d@6 z?#P1Se=o(`4t`Zx0Qs0A4FA=AB{Z1a?HX#IYD=Tkh!?RlFkRCQ?y1Hi(O{M? \ No newline at end of file diff --git a/XNSimHtml/assets/icons/png/complete_b.png b/XNSimHtml/assets/icons/png/complete_b.png deleted file mode 100644 index 70bc05c4936ad411be74033a334fad7c9ffeb521..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2709 zcmcgu`#Y5B8-I-#FN$#pZ8Ld?nIeoF788BVtC$&Ml}SQjQPbK&4lRj|k!|GAm@q4+ z$`s0(%Ao@}%w!5Xi?+j7%U}mdc2Y#XZ-2n|r|)&`56^So*KGVdehcx ze4_yXz_9xWxNw(j%t&?+ssoJ z`Qe)<+whRXe2t4?{o<>*(ZJKSM_rG(K2YA#HW>Ih;KACLd&eG3?L7J}XiP;3niX`C z|DXbx&s$UB5gOosZU3*E5X)1j3rO}4700&gRbYxVA%G(i@t>FeB9Po+l z4C)c@=%GSLg%J+B=p-1ZxgcnFFj7go4%QX6RQ6`qs+{tX60E)n*Mhv@6Bv%yWzkTt z9+lTidyJ{XQhDYIqmD!j)bxoP@J1g4*=B4GH{1gt2F5m;C1{ZAL*cVy>acjsl%2K@ zg2nnt*+DK!U_f$@gZ zgTh;%{nn$so~rZOr>YLhcw2y+vNGv?bR)>eX)|`XR4mq# z1kCnGi4#~2NU+A>b#Y^YigBT0_?HQod!a^tl}FX2ND1!>6anC~BEYep>|#-xe}`{s zH5JXzrDDOD*r+{G71wa5i%(Sw&&*ZYksG(r`anN0Nt~DD%3eL!Q#zUk`^jTV7+}() z_r?sh*vwwisIWP1vg@9VE=lr|WAiyE&&xMA9&O=` zJMsr=dLC=B)N@0BS5FkA8nO`h^FQ@RcH2crd`s}Og>f@* z+Mdf^=SJq8>1tJ8OR7qml%EOmS??hop`QQs0uMnt(~{iSe(E?uG)OA_JyNB9&tom= z#uGhqfr%QYA>IDtQ?yL0PDLa&%g~vtG69SHFX3k4S@_BDE#CN1{=l)(m{+@J;Zr45 zqHpGl>zyEGtMWd#Wz`zZFr*C!wzu#&Y#ulmghJ+`i6s}%v(3qw$BLwZBHFC~f~ zx~=xY_uF6_E?$TUlo9e|->ZeHnaBR=mis54Y&m@++Qyk4azCpGJvdEF8Q5q8RLDhE!W~KqeSH^V0Lq zAI2Y!5JW-z`)_bqXK`U_u0WA^gezatGxg-)qQP8vllPZ9%%mhq`sAH9yGula*q3cd z_CQwB(;K~#4x+d*t{-apYj%$S zWA*xH#kR~0oNGaROjfylUmPq}eIpnAqhKaU1da?|cw9Twls5Rbv`%mjbw~?KWJt=l z_r(#=YXV05t$lDDlY=|eWg=Gf-pWj}zYxBE_6!Z*vdpb8<&X zRV}HJH!k8!=Q_?Ba*i|J2k{r_NztN~S|XCWfYl+UKa1dR9;hm2Ne}93Qlc)#FX=;C zA`?2>temIV%Z`i;ux9Wo9CV_BYb!MW$T36nmY3eQ&~VE2?bl-cI!fomw9r=Pd{eqg zw+<1FWxzP#H@_(Y;`m;l2>9x3qP2rNLe|yW5D&{@GM-)YT^m^&8!t0P=YJ7VEkZ{ z4{7PXus&X9D;|8i-kDunt?SqN^5z7R zo9H}`5H)@Fk{@dj)s+8qa(=q+x3%DVRx4M9hNG_uYqXDAV|V}=J2G%y6CKz}mY(D2 z7*8x}9>ZWD7LX-PM43SFWKC--z|rr#YQI?t%oI>8$S8YIX)wz{3BkVtO`GSu)VGfF zJ4AgG$^Xf4xKgS|d~1$t4qvJ>xHxM^Yo`qpa;6UNfbw;zJXYB7Ig?cQ${4%x8i*C< z8-2KfmR8joaNJx8G$(nan4xrLTa>{;PXO`E^f5jUaL%4D?k)Tu(AEty;a-~t|9UX^ z!*Zy5edphrnEhbjnM-$WsH-BK7E0jzOY2hF(2kJ9F00q0+~Jt5VuAy3TDfUk?&?yp z^^b-Gniy!zMD@}<8uIRzT_I!$=4KiF@bLcwr#%J!9N)L-*vwX-JQHBJd+)Au`=0Y( D5#p@t diff --git a/XNSimHtml/assets/icons/png/complete_b.svg b/XNSimHtml/assets/icons/png/complete_b.svg new file mode 100644 index 0000000..06ece07 --- /dev/null +++ b/XNSimHtml/assets/icons/png/complete_b.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/XNSimHtml/components/todo-component.js b/XNSimHtml/components/todo-component.js index 906cf0a..a37c0c8 100644 --- a/XNSimHtml/components/todo-component.js +++ b/XNSimHtml/components/todo-component.js @@ -849,6 +849,267 @@ class TodoComponent extends HTMLElement { .show-completed-container:hover { background: #e9ecef; } + .show-all-button { + width: 100%; + padding: 8px 16px; + background-color: #007bff; + color: white; + border: none; + border-radius: 4px; + cursor: pointer; + font-size: 14px; + transition: background-color 0.2s; + } + .show-all-button:hover { + background-color: #0056b3; + } + .show-all-button:active { + background-color: #004085; + } + .project-node { + margin-bottom: 10px; + } + .project-header { + padding: 8px; + background: #e9ecef; + border-radius: 4px; + cursor: pointer; + } + .project-header-content { + display: flex; + align-items: center; + gap: 8px; + } + .project-header:hover { + background: #dee2e6; + } + .expand-icon { + font-size: 12px; + transition: transform 0.2s; + color: #495057; + } + .expand-icon.expanded { + transform: rotate(90deg); + } + .subprojects-container { + margin-left: 20px; + margin-top: 5px; + } + .subproject-node { + padding: 6px 8px; + cursor: pointer; + border-radius: 4px; + display: flex; + justify-content: space-between; + align-items: center; + } + .subproject-node:hover { + background: #e9ecef; + } + .todo-count { + font-size: 0.9em; + color: #6c757d; + } + .todo-item { + background: #fff; + border: 1px solid #e9ecef; + border-radius: 8px; + padding: 15px; + margin-bottom: 15px; + box-shadow: 0 2px 4px rgba(0,0,0,0.05); + } + .todo-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 12px; + padding-bottom: 8px; + border-bottom: 1px solid #e9ecef; + } + .todo-header h3 { + margin: 0; + color: #212529; + font-size: 1.1em; + } + .todo-content { + color: #495057; + } + .todo-info { + margin-bottom: 8px; + font-size: 0.9em; + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 8px; + } + .todo-info .label { + color: #6c757d; + } + .todo-info .value { + color: #212529; + } + .todo-description { + margin-top: 12px; + padding-top: 12px; + border-top: 1px solid #e9ecef; + color: #495057; + font-size: 0.95em; + } + .description-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + } + .description-actions { + display: flex; + gap: 4px; + } + .description-content { + white-space: pre-wrap; + line-height: 1.5; + max-height: 100px; + overflow: hidden; + transition: max-height 0.3s ease-out; + position: relative; + text-indent: 0; /* 移除缩进 */ + } + .description-content.expanded { + max-height: 2000px; + } + .description-content:not(.expanded) { + max-height: 1.5em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-indent: 0; /* 移除缩进 */ + } + .description-content::after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 40px; + background: linear-gradient(transparent, white); + pointer-events: none; + opacity: 1; + transition: opacity 0.3s ease-out; + } + .description-content.expanded::after { + opacity: 0; + } + .toggle-button { + background: none; + border: none; + cursor: pointer; + padding: 4px; + border-radius: 4px; + transition: all 0.2s; + display: flex; + align-items: center; + justify-content: center; + } + .toggle-button:hover { + background-color: rgba(121, 134, 231, 0.1); + } + .toggle-icon { + transition: transform 0.3s ease; + width: 16px; + height: 16px; + display: inline-block; + } + .toggle-button.expanded .toggle-icon { + transform: rotate(180deg); + } + .status { + display: inline-block; + padding: 4px 8px; + border-radius: 4px; + font-size: 0.9em; + } + .status.completed { + background: #d4edda; + color: #155724; + } + .status.pending { + background: #fff3cd; + color: #856404; + } + .error-message { + color: #721c24; + padding: 10px; + background: #f8d7da; + border-radius: 4px; + margin: 10px; + } + .selected { + background: #cfe2ff !important; + } + .executor-link { + color: #007bff; + text-decoration: none; + cursor: pointer; + } + .executor-link:hover { + text-decoration: underline; + } + .schedule-link { + color: #007bff; + text-decoration: none; + cursor: pointer; + } + .schedule-link:hover { + text-decoration: underline; + } + .add-todo-button { + margin-bottom: 15px; + padding: 8px 16px; + background-color: #7986E7; + color: white; + border: none; + border-radius: 4px; + cursor: pointer; + font-size: 14px; + transition: background-color 0.2s; + width: 100%; + } + .add-todo-button:hover { + background-color: #6875D6; + } + .add-todo-button:active { + background-color: #5A67D8; + } + .todo-actions { + display: flex; + align-items: center; + gap: 8px; + } + .edit-button, .delete-button, .complete-button { + background: none; + border: none; + cursor: pointer; + padding: 4px; + border-radius: 4px; + transition: all 0.2s; + display: flex; + align-items: center; + justify-content: center; + } + .action-icon { + width: 16px; + height: 16px; + object-fit: contain; + } + .edit-button:hover { + background-color: rgba(121, 134, 231, 0.1); + } + .delete-button:hover { + background-color: rgba(220, 53, 69, 0.1); + } + .complete-button:hover { + background-color: rgba(40, 167, 69, 0.1); + } `; const modal = document.createElement('div'); @@ -1387,15 +1648,17 @@ class TodoComponent extends HTMLElement { todoElement.innerHTML = `

+
+ +

${todo.project} - ${todo.subproject} - ${todo.title}

- -