From 16d31b49f7c4c3c2e1e81c8323b63aab8d1b1bf2 Mon Sep 17 00:00:00 2001 From: Candice <2675190448@qq.com> Date: Fri, 8 Aug 2025 14:41:01 +0800 Subject: [PATCH] 1 --- components/ren-calendar/ren-calendar.vue | 424 +++++++++++++ main.js | 10 +- manifest.json | 4 + pages.json | 14 +- pages/my/index.vue | 279 ++++++++- pages/shop/cart.vue | 287 +++++++++ pages/shop/index.vue | 2 +- static/agent.png | Bin 0 -> 1486 bytes static/circleR.png | Bin 0 -> 1325 bytes static/edit-w.png | Bin 0 -> 582 bytes static/my/aboutus.png | Bin 0 -> 2043 bytes static/my/address.png | Bin 0 -> 2535 bytes static/my/avatar.png | Bin 0 -> 7147 bytes static/my/daifahuo.png | Bin 0 -> 2704 bytes static/my/daishouhuo.png | Bin 0 -> 4291 bytes static/my/daizhifu.png | Bin 0 -> 5670 bytes static/my/fake.png | Bin 0 -> 2190 bytes static/my/help.png | Bin 0 -> 2253 bytes static/my/protocol.png | Bin 0 -> 1231 bytes static/my/rewardrecord.png | Bin 0 -> 1166 bytes static/my/tuikuan.png | Bin 0 -> 3498 bytes static/my/writecheck.png | Bin 0 -> 2488 bytes static/my/writerecord.png | Bin 0 -> 1384 bytes static/my/yiwancheng.png | Bin 0 -> 3493 bytes static/shop.png | Bin 0 -> 1465 bytes uni_modules/uni-calendar/changelog.md | 30 + .../components/uni-calendar/calendar.js | 544 +++++++++++++++++ .../components/uni-calendar/i18n/en.json | 12 + .../components/uni-calendar/i18n/index.js | 8 + .../components/uni-calendar/i18n/zh-Hans.json | 12 + .../components/uni-calendar/i18n/zh-Hant.json | 12 + .../uni-calendar/uni-calendar-item.vue | 191 ++++++ .../components/uni-calendar/uni-calendar.vue | 567 ++++++++++++++++++ .../components/uni-calendar/util.js | 360 +++++++++++ uni_modules/uni-calendar/package.json | 86 +++ uni_modules/uni-calendar/readme.md | 103 ++++ .../uni-number-box/uni-number-box.vue | 8 +- 37 files changed, 2937 insertions(+), 16 deletions(-) create mode 100644 components/ren-calendar/ren-calendar.vue create mode 100644 pages/shop/cart.vue create mode 100644 static/agent.png create mode 100644 static/circleR.png create mode 100644 static/edit-w.png create mode 100644 static/my/aboutus.png create mode 100644 static/my/address.png create mode 100644 static/my/avatar.png create mode 100644 static/my/daifahuo.png create mode 100644 static/my/daishouhuo.png create mode 100644 static/my/daizhifu.png create mode 100644 static/my/fake.png create mode 100644 static/my/help.png create mode 100644 static/my/protocol.png create mode 100644 static/my/rewardrecord.png create mode 100644 static/my/tuikuan.png create mode 100644 static/my/writecheck.png create mode 100644 static/my/writerecord.png create mode 100644 static/my/yiwancheng.png create mode 100644 static/shop.png create mode 100644 uni_modules/uni-calendar/changelog.md create mode 100644 uni_modules/uni-calendar/components/uni-calendar/calendar.js create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/en.json create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/index.js create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json create mode 100644 uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue create mode 100644 uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue create mode 100644 uni_modules/uni-calendar/components/uni-calendar/util.js create mode 100644 uni_modules/uni-calendar/package.json create mode 100644 uni_modules/uni-calendar/readme.md diff --git a/components/ren-calendar/ren-calendar.vue b/components/ren-calendar/ren-calendar.vue new file mode 100644 index 0000000..00fc1a7 --- /dev/null +++ b/components/ren-calendar/ren-calendar.vue @@ -0,0 +1,424 @@ + + + + + diff --git a/main.js b/main.js index 32fb7a8..219510c 100644 --- a/main.js +++ b/main.js @@ -43,14 +43,14 @@ export function createApp() { app.use(store) // 挂载全局属性(替代 Vue2 的 prototype) - // app.config.globalProperties.$http = http - // app.config.globalProperties.$util = util - // app.config.globalProperties.$siteConfig = siteConfig + app.config.globalProperties.$http = http + app.config.globalProperties.$util = util + app.config.globalProperties.$siteConfig = siteConfig // H5 端额外挂载 wxJsSdk // #ifdef H5 - // import wxJsSdk from './common/js/wxJsSdk.js' - // app.config.globalProperties.$wxjs = wxJsSdk + import wxJsSdk from './common/js/wxJsSdk.js' + app.config.globalProperties.$wxjs = wxJsSdk // #endif return { diff --git a/manifest.json b/manifest.json index d7519d0..48cc312 100644 --- a/manifest.json +++ b/manifest.json @@ -5,6 +5,9 @@ "versionName" : "1.0.0", "versionCode" : "100", "transformPx" : false, + "optimization": { + "treeShaking": true + }, /* 5+App特有相关 */ "app-plus" : { "usingComponents" : true, @@ -54,6 +57,7 @@ "setting" : { "urlCheck" : false }, + "__usePrivacyCheck__" : true, "usingComponents" : true }, "mp-alipay" : { diff --git a/pages.json b/pages.json index b1ac131..c0167f2 100644 --- a/pages.json +++ b/pages.json @@ -3,8 +3,8 @@ { "path": "pages/index/index", "style": { - "navigationBarTitleText": "" - + "navigationBarTitleText": "", + "navigationStyle": "custom" } }, { @@ -26,7 +26,15 @@ "path" : "pages/my/index", "style" : { - "navigationBarTitleText" : "" + "navigationBarTitleText" : "", + "navigationStyle": "custom" + } + }, + { + "path" : "pages/shop/cart", + "style" : + { + "navigationBarTitleText" : "购物车" } } ], diff --git a/pages/my/index.vue b/pages/my/index.vue index 0340efb..240e6f7 100644 --- a/pages/my/index.vue +++ b/pages/my/index.vue @@ -1,14 +1,283 @@ - diff --git a/pages/shop/cart.vue b/pages/shop/cart.vue new file mode 100644 index 0000000..423c951 --- /dev/null +++ b/pages/shop/cart.vue @@ -0,0 +1,287 @@ + + + + + diff --git a/pages/shop/index.vue b/pages/shop/index.vue index 4fc82a1..ce34b6a 100644 --- a/pages/shop/index.vue +++ b/pages/shop/index.vue @@ -4,7 +4,7 @@ - + 购物车 diff --git a/static/agent.png b/static/agent.png new file mode 100644 index 0000000000000000000000000000000000000000..80ec1c0acafb56257f76ff1b37a470cdc678e68a GIT binary patch literal 1486 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 literal 0 HcmV?d00001 diff --git a/static/edit-w.png b/static/edit-w.png new file mode 100644 index 0000000000000000000000000000000000000000..ca254996289697869091349a216e28b0e3e9d08c GIT binary patch literal 582 zcmV-M0=fN(P)Px%07*naR9Hvtm@#V=K@^3*3l^3NwjtVCSXfxtSlOfyRBQwl6a)(k4L1G=i}WHE z2DA`NBbY)E6l?_j3u2SP;#nnyaO9Y~5T8lr?c15H-oRtootd4FGxzPCdxC6|jsQ1+ zyTF<5`M~Q&MBFL8L(+ZViGSh2l1>6|fU~8^J^LpSas043k{$qSIc6&)9R)rD=knnM z_yG7ir2Pi0(A$GvG6k~(TrtpI!gs*+i1;;xWR|)6!bEHu=reF0_z5gUgh`vWgJ8U< zfwlo}+j>OYYD%&juX}f7cbg(MyLAnuyjhEg)s{ddm`Hl5`Dt1vm>7VVWv54@@(lzA%z5rji@gx2!Kr=F+E`)F)Me=7C9|=fG{} z&uT#P!ZZOI0#hAmC`?tL8Zgy>YQaz6$XDx)8YGHpp?%J$i2+scG6tjwQMdN4dSZySr;aM00x<_ UIi@qPX8-^I07*qoM6N<$f-u1U*8l(j literal 0 HcmV?d00001 diff --git a/static/my/aboutus.png b/static/my/aboutus.png new file mode 100644 index 0000000000000000000000000000000000000000..e6ea804c7cb537d0e852a1d891b3337e4d87afe0 GIT binary patch literal 2043 zcmVPx+wMj%lRA@u(T7QTfcNPD<*)_ZBiKj$JG}7(u-g%W)Q>ne3Ng#J5pn`>jrdXlU zlU5pI&fAF}0CxjOwZgCk95_k} z4i}!FzqLZc?VC`5rbl@|Av^@aHvvTLgXT~*{{ zHAU4R3=R%*bm3NPBE~St(u%lzZ^ELPIdzcU4nohlw`HJdo$pnEoGpQh$vE(@7;>-u zg08g6jPtv%?&fvTHTVe;c3FTK^Clrv%+l{#p&uA%VwmHf{WQkFxWDdGaDo)<3DcgO zKtyYl2(m=jY5h+afAb$0nVq0Y5WskFu;>-taOMUkX{qzDE(rK(=QwIA^fY+_2liexXpi#zbe{NQR671C^l;X!(P6kDNu3oABo`&2_b%ndEIK* z>x)8Q%-3qT<P3Y$n557H^OGnSR8n&IO_*v^cckt0292E(M6&hVoOVV~s2 zMviv)2Aa-rLLtnEG;1aj?c|uv03~Mf@klMUpDFtCh2-sjXchd%40nHwaM^lLRMGGD z)N_^SCY>K+;2|(33OV|2s|XI@0w@)-)awaU-OVYA zVOm}bYtG;^L7!SdFC~%B$7hFz0ww5fXUG%pgIg{2U5hGGOV#%}iK;r^N5FWeLrUUw zz8l@B%-+~O$iuQe-Gi9 zMG~6MuKZsIX1R@FF_V}v2BK9I!F;aNr`;45U5DrO2{dHYT?!;MUHAb&hnO)@?o&g} zx`L{1=+4LqHd!*Bw(7RvJ*8glS7AytkTX&n;iZOc#xJR@w9E}ea=P#*0^J7iV5wIN zHN8}I-a^2XukfPk{2Kyxbt+*bNZjy7BO4;DC{(pDx|! zF3}%z5>>0-Eteyd6r$4m9Q9xf`nTa zVc9fK%kXg!wwsK7#T@<23xwbG)O6u%wFsY^>Dd%oH(SlHB&?ah#W7*p>S8NaCAq=(PUbD`egViP`z!)z)&$qG9t5LKPj*iA#XQ?#|ya-+J=H=X(MP-Ut@3tD?2v(9u;ftkD2#jo)-*Ol-EE$>Eq;h2E?Q+m12Ysw%Z+>4D0D<8RJ) zc>Ko6@X~=QDP77?Ral)jt3w8iLPqaaVxY<;$IRM8jahACPE?zBaXc#N#~R*Cc>QE z4Hc*pm{jBt!xno)^=7xhWCrF?A51>SKvAjUWSHQb{B#Uxi_+}aXCDIX*wwBO;Z-Bi Ze*?Jmm}qzZSu_9u002ovPDHLkV1j=k<@Epn literal 0 HcmV?d00001 diff --git a/static/my/address.png b/static/my/address.png new file mode 100644 index 0000000000000000000000000000000000000000..ab5c21e8aebb32e886c232c6426f40fc72e75664 GIT binary patch literal 2535 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 literal 0 HcmV?d00001 diff --git a/static/my/daifahuo.png b/static/my/daifahuo.png new file mode 100644 index 0000000000000000000000000000000000000000..636908db001efae6dc7e2f59ef513f50ec2d6be4 GIT binary patch literal 2704 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 literal 0 HcmV?d00001 diff --git a/static/my/daizhifu.png b/static/my/daizhifu.png new file mode 100644 index 0000000000000000000000000000000000000000..d289ad9128c7e79c01c0994c266f2f7c706254b9 GIT binary patch literal 5670 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 M07*qoM6N<$f=DXx8UO$Q literal 0 HcmV?d00001 diff --git a/static/my/fake.png b/static/my/fake.png new file mode 100644 index 0000000000000000000000000000000000000000..bafab06cc4e2174d29f889158698fc3ace954651 GIT binary patch literal 2190 zcmV;92yyp`P)Px-NJ&INRA@u(ntyCl*A>UV$IppPlabIh#aU7?@ei7ouIYd#HcU&VAZ=2$GQl>g z@<;yJ)>YjITldG*XrmiQOk^b8+9K3RZKYOagRN|8HPEO+*WnlXLuoap()igikPs^J zt0X{vy!Xy@ojA%b`@QGbBpvv_DCgdLKIgo9?m6dP!cFp{n}icdLDxUdE-4pIBSWwT z_4FU8(@1Wi|33?~s-7PuU^fxmW|d>0UT&gi%*xM{^C%%NGi@P8Edh4}>;jRU!2d{$wOL8&KXrjNJgL z&5UK>65D96Zo7WaD)4mBdTs-uLT5CzHq#z6i>D*w?r3pJs&gL!Pl)kfuu0gIcROnG z3Q?Y$2Ukum9Av{~brfCd2twCB!?B@0d^~z>Vmba0uy0p<5B}He`qM#oGK+y1`>`bU z5~cNt7%l8R)8dkx&cnpm=pe!mmX)Bcz=frf-DoKOIn;;7-t&l#4THhMnqAr)TUB}7 za3C-}7zHOlLrs*GXe>NwR~<4y6(x2D4ix)Q?#MHv=cLStuH)&R4jjI6*%IuW9?cf0 zPmy0^#x?^GMm$;&%Y{R)!lie^-k0O7M7>8~n8{S-T zKT2~PX+tIk{T zI3}tUU-0c@6W!sUiZ>5ycn$jv3G~0BWd-mL${2DyTOs{|dma+Pq~rP`o-T zpdw>>{8GC(Q;$Y`!Ec)ZeOM#dPw%I{WE%9rB}?&Y$vs&CO?Z?Uha&#KBZi=6v`E*Z z+1#TC`@7KCdjTSDMEpVHJ(^8WF?Y73t`2OE`U0;ms7J-(zb;yZM+%mkv8QR7$#aw$ znnbRSvZ_xP9CSsF6USHF4|@iSqn8G{v8U&p2t>yszTh`aWkzPqnC>1;%$>H;n3?s31H1sDXb2!fD^L1WOGZJ{wzRS zGf|K3@4bKn{apaFs@d6Vl)P95MN5m_Tk3ofz;+{VivNqkSc9}J=BqqjbfzW0z~Oi& z(P4PL*pGYC=rH{9auk0Z?3ud!F2xskI+Z@wK__POhTpxHNn4j{a@J`GlKn)~v+lEm zT)bzL>pUzxol6w2W`0=sB~v}4e_b8G?w)h#7`q;CqY%&x#*-5jR7%*iLCttGnT)%o z#VM6IMQ7?UAtUx}ZQkwpdR`&cIP&8y77>~Iv@t|Suj7N^LHzm3Wt<DHAB{LP42@Mf%Ab#VJ7HC%AD=4lHc&p;u5HXg`j6?!f zeDV>0;HznYCi=5+m6*?hkmBlsN&(yfpi>`hzL23dJ#EFLky6s7h8sc@sS-!p4X< za4MDZ;|Ygz5R4whA1Jco|8zht^^6j&6wywZD|_*VWnqYFqXx8qa<{b<+Vh?LBHN1i zg3E4!&S8N?>rro5egS}2=^Wma*t`Fi9-XW1y#;DwvrhYT13TGk101KCDCw2?JUR@P zg3)|D>aJs_s}O5jn`ttN&wRr$7;j)VQ__g`c>vu|&-kBJLlql973b96qRZe~Cu@}to4ikTFU zK`sJZqK?$MhRb6$vmZkxOBfa$Q~;K>x9+e(-wmRC!+^*9p=Qt7)={?pleuIUHE28? zi|4U<9-GcdZ@hJzI%HI}cog|H(s`?9&sj6o7@lzGJpgOimg`C+=J6IxsiT`1mlS_6 z=^bQ7K3zi(S`-k<)5_fCGuxGAk@pMi>S%uZjH~*R&eLCXj7aL#hTF^~7bU1gyOdrx1B=@iMfD2hOaaR{lN3TP`y* zqn`n21TY-G{Q`zeXsI&cS-FXlK2I|-M^cdq#rF|I^q&lW3{(hbG2=}40M;j-<4yyu zu4em41@=u`6_~!)V_>h`M87c9A`OAS6MQ%2;A1O81tdv$DD*p;eDOJFhoN!@FP8}G zKrntS%up{5;H_*uWEOyxKjF2KWX_{1A@=Tm`e>$MEVojuSavbV-ZY^90|3}HhJQSc QEdT%j07*qoM6N<$f_bnYg8%>k literal 0 HcmV?d00001 diff --git a/static/my/help.png b/static/my/help.png new file mode 100644 index 0000000000000000000000000000000000000000..54523d8a7360114dfe8b3b75749ad4ce39dd9d6e GIT binary patch literal 2253 zcmV;;2r~DHP)Px-he~P$K?9rUACY8G@4d{;##yu@cgYFeT4~YLMR)1m zdmnk;d*5(LE_vVg^4@}W@1J+yAJ6Ce{Qg0>Nj|zsaN>QS|8Jab8b`HWj+tTXAfOA3 zP7tERXa`}v^@xmF0M{5Ofp7u91Q{614N$Qej~pmaHO+AX4gh!Nj|wgjqcj`AmDhhn|Cawh`3?TS`Z;Xi zFg5|$3dRm1JOH50A(R=z6$SmTJVk$6E#OrF-PX&SLSZ}!V82aB8I03x;#A~yygW8W zh93gEyE!~}H?|YwAjp!6R@raDIx{tXg8uI3yxO%51MN!l0R_m~94MQNPoS!;QYMA0lO~EkP%Ry9|t6 zpTpk2{EWnMd-^;B6_9N$_zeg&B4iq(SIvL|o&OuY8=Ta+FMTgE$J1xDAPlF0ewwrt;3SrH&q7#zn+9 z%*cz*n!rIfTd^WgG4bmn_^Y@OFNZC8)zQ&#eA6vI1UTjL;+Kpt?=N*|FS~K3_WyY% zFlH(hd}4fnE-klzMW9-me;A*1pth{6CLDkQX@`?;?x#otp1{Sq7N zS=#FvXjh7(3SnBfSuqjy8)L=_`T=4LfqB*pwQQP--QyY-I%3X@kz!K)j31y|Q`~kd z;j)!b80f5*>ec1w_B21qz++$x<+Ai;KbKZ@Gj|3c3E55+66&&gQ+w_m#eAP)a+ZNB z#e}-i@10tTe*wZl6L=z@p(Sck7pR(M5j%0n-Fk+683)@4O;+pR2qpD^v8+u9WY-kB(;zF1uE+ucUaHo*8@60z)=QLdWKFka-rWn3#>FSSWKv{ zAzi&Y)HL@IAbNgM&(H!(zZ7VSM~TqgsDAndDeLFC37}#sTc_{b)==q0{W{-IA&f9% zOwUqJEiFrcYH1d?60Ilajev05Gq0P~z+$MFRDD}{=MKldNb;d)sbgiJDSlf@lCvSK zcM4f<#5VeWe0uz|Fe<~<5D>quTq^G^_4o_!Ywxyl<_O-FQfe+sA9Uj=%YvK~FPiu* z0LeJ_uN&nDuWsq_TrpUVG%d|_>8~fcO$RDz8(_R@aWX)Vw&nE*w8^3?7B*}|&I8mb z8O`+@bDs`^lLFGO=r+|DC5rhzwn9BFn<4I;zGHh})p%dVNOjyx1rO*yq2C3qrm;!= zvSc*?A1@@dZwGn4n&zDZjCpb|YMP%R;BYen1}hz_n3Ch7QVDlXci#I(z(AdV;b}cX zy(?N>r#vBTfP99&7$hN%&lIsOCbV0EJlirvDLwz3w$dyPSWi2q{%~j5sO&Of zmWxU4*&u<|=;xBCNbac%v@6YzE09d0vBWz_0A9~>5^n~M>ls>Nn(|#7lY^};wqjMn%TUl6M6V@Q(4Qg3VKA;4>#)1jq1G);x&f>G-)=^WO=&d< zTbJu3xD~K}Dcx-8f$AB0$PWRF*9s?ZRa(U=S|2k`7nAC$-Ito?GX(5&bB8MewO{Mc z4Ywp}&_<_6+rsZgu2yTeRs*@=N`iCjf|dlMbEUGZYbq8*lgS}0R>(g}rr8fdsS@Jd ztBG?1Z8A9oYAJpWRBanF(38)SjL59nCk1vQjM@$1!CW?gwxOU|+z4Jvu(coqZv+e2 zo1(Sv$mmTmtl@yQ#&6m%AUbPX&lgMs>6MzWt5IfKRHfEz_gOLc)=ZPfZ)yo%JWwU= zK^dy@+j(2=5v&dw&<7d4TZ@6JTEgrYQ`!$Q&L&@VM2;{NIgj7_P4TP|xldsynb==D zA}3ur>F)V$M%U8n>PNkZoi+bsqF)-v^XnOs2#he{oQ$Yq4sTuut~hf+mcC0#C5+7o zVT(2HS{>ACx6d$`@e(tRFW1HPLYuQD5TNssO4YwT0>;C3tKJVS&f0>6bBckXAZK?2 z1zL+rDsqTmr#+&&rQTpN1J_U;OuooKUNLYkNN|CRZX;}aulF>Kqwh5kxBK1)>h?na bYybZj97-W~{{-Jf00000NkvXXu0mjfo~9~q literal 0 HcmV?d00001 diff --git a/static/my/protocol.png b/static/my/protocol.png new file mode 100644 index 0000000000000000000000000000000000000000..9b39567ed18b030bc096f005a1956430050f2d6d GIT binary patch literal 1231 zcmV;=1Tg!FP)Px(iAh93RA@u(np5Ls(7_cpZ0ijPcq=cY?novV*fHsN|5@TYCN^QkU zj3Fg>NiZ?$1EPSzcnO*s4WO~u*aDFZU{&IUhf+<96(c@K+A+4Z>Wo@?nHjTZGo5yN z=G^Cu2j;xY!`XYS^{s!md#|&XCmxT-xeOjp9`q7ZIj`tML5D}7^$Q4|f%APZGL}2J zXBERui=nO>D(35tLsQXT2Vv_zINz_|s1qZ-1<+6f^)>puse%e6>vu`W@;UJ69k5~% z_^*)0tG3GDFZbwkW_Hd*>pcU|athkMf@lo3-wn6jsO?`B^n=ggm39f)+yq7b$p&)) znvCG^Y1r8UGp51E&x6;i4yy{fQ2)zYbkatSJ;(TZ2a2Rh*4b#U)$3yNw5rS)FPwV64Y5SoMVb`TnBp|Lg(n#h3a($&ho z*89Ao2DcjrS&bz4Cp_xC=Z5yQY=qz0qB8jO@rPtU88X1DUAHlIs z8J2(?lzv!!Ej)e~1d7a^rZR#49){y*pk_Ig&6K0kA(u}J&^&LkJ)pZc!wW6Y{}&Yc zV9N&Buu>k=_O{6);OY|CUI&l8E(0=hY*gPkQg1UsPA~A<1DbTTq+Fgo%jc$?i=yC} z{qX%Slf$(eR1MO$?L|})n{S1Uwu=O^a2FIY;YfBGaldLU1I z2hSapC$s8h>S0*=l+rmAp+3~ju!Wn)K!KOw!ew0LD;$q>I2Pl+&=2GFWU|x}RmjB0 zv5#ZIX*fDYI2JXnYKhlJIzZ=8n7ZEXgw0Hl;+>Yyl6IC^suO1}cIUumjOiqw(t+U+nR+ ze&%fao`T#esw>(o4suk{EOKa?&VwqX$Wry9ner?T$SZ18(dsAUT}j8zR1;N}MKWam z)x+@qXY$^sey#dc)up>>7n}>hi;YmV#83>53?7f~0jR390Q%mi@Y)erc(HR#sn^I6 zA_XT$PRl!4apBzhG!$NJ+shP>s-oh$Z_{qs(J5dbSqCdBl$)!Z0`BRDwy$MBpl!W? zBKSmi=bIAt|MVofJ8QN7Hj^=Hwy}zVLRoQ5AM65g$0;(It4A!=8!F(=oAuqv8UoD~ tl%0NcDQc&~T-nNl<|^~q@_X4R`XAJ0PL6|o;K~31002ovPDHLkV1fmkQ}h4; literal 0 HcmV?d00001 diff --git a/static/my/rewardrecord.png b/static/my/rewardrecord.png new file mode 100644 index 0000000000000000000000000000000000000000..1d4ed13afe0cd405a85bbe6c6da97867453b979c GIT binary patch literal 1166 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 TfU-aV00000NkvXXu0mjf4^D0b literal 0 HcmV?d00001 diff --git a/static/shop.png b/static/shop.png new file mode 100644 index 0000000000000000000000000000000000000000..b7faa461792ceb302e5ce0a5133fa321fcac1928 GIT binary patch literal 1465 zcmV;q1xEUbP)Px)b4f%&RA@u(Sy?EheHed^C6O$R?LrwtTxd|Xl(-N{NhDXJq!3d>q-04B(YdhP z3|V88hR`XRP?luLnk5+`YmCrHGRg3M{r+FCocFxPalQ`+o#%!+|K-{Lzu)spIF94! z4TwZ%$P0_&y%D*(x}yI6ewv$`qy7DTy1BV|cJ+;ojmgo`k%EGP$kWqP<^3uRIX*t7 z%F0SQIy!oGadD)tudlR3)DT3XprC+GPEN?)-kzeOqR7?Nl?)9HpWUeQ z^K+V&HQdn3>Ha0d2 zOOzslXyoMN(An7;Wo2cNv$ONFM?uwvO-)TSF)<+;6(vIk1_r3Ty`3B!9GF2bNw&7O zsI;_{&;ZKH$`oov!I10gYs$~hXSI=%l5%gC(3XKEB_*`Iy-f)T3FPPJcdLeiA@lR| zR9#(7c6N3w4_~5;j*e1GOAEQUxKL(hrnn(RMMbo?w@0zDu@oE}{1WY;i;D}E@_+vP zA?V8&{cS|h70S!Y$;`}*5I$|R+J}1X+qZ8tHa4bE^tXmoRaMc#!U9D`MpAfq_(RXs z$~v*4XNK(V?ox4aF&P*bkW3~cQ&Ur|D5%M$!lGw}G&VM}*AsPt`Vh+O>@00;Y-n=N zqpbzb^6~LeI&Wxbh`xXSPHt{)^ySMJlANBNa{PNCl}hQ|yLU>P^78VuhPj{*ye||K zJ>RuZ^peibPOh)7k32j)C^a=z)RRcPwY9ZJ^RgxfAtE0>d=TBz(9l3rQ&S8JN~BUL zhnAa>k->oBYm&vqMf&>nD>*qikt8)Wl>@4*sHh+l6O-3u2LTx)y^M^ENRpJ4#5j9R zP0gz^f>$;|G7hcv^XJdx?(Y7oqQXCn zwzjq;k;~=Wj~_n>G%`LuUSmVRU%=kHyu38#E|-^=B$vzo(_Sdr*49RYgM$ z%ppM8t*x!}>(?*F^e`1cYC|dPjgF3HX|C!iz<%%%On2ZoL<4JY(JzcZ=fYnch{FH) z@gp+`3LzEn8^{-;fEgDKN=izi_wU~myxh^zLBqqt%zku0?1y78zQJA?3U&v(%XlyF+XY=MV|xuR71EZ7+|!0JT(K zUr%@d(G>2AQbh0;ps>IJ#JI^L>!#6hNV(kHT&9PM~5Eh_M@PvSX0F5tu$_*IZ*4EZC;0gkGFGLw1A7`Wq z^b?EKq1>lbT!@JA*#q!N?E8%pL;-=q*Hes0d4dHNs7=9;0#ikBBz&pD&|1i4RDNd{ z@^Nh%!r$%d>r0|u1-UlhWFU{XBvC^jJ|IgiTCL;d;?G<|N TFBPaU00000NkvXXu0mjfW+ud_ literal 0 HcmV?d00001 diff --git a/uni_modules/uni-calendar/changelog.md b/uni_modules/uni-calendar/changelog.md new file mode 100644 index 0000000..30ca0df --- /dev/null +++ b/uni_modules/uni-calendar/changelog.md @@ -0,0 +1,30 @@ +## 1.4.12(2024-09-21) +- 修复 calendar在选择日期范围后重新选择日期需要点两次的Bug +## 1.4.11(2024-01-10) +- 修复 回到今天时,月份显示不一致问题 +## 1.4.10(2023-04-10) +- 修复 某些情况 monthSwitch 未触发的Bug +## 1.4.9(2023-02-02) +- 修复 某些情况切换月份错误的Bug +## 1.4.8(2023-01-30) +- 修复 某些情况切换月份错误的Bug [详情](https://ask.dcloud.net.cn/question/161964) +## 1.4.7(2022-09-16) +- 优化 支持使用 uni-scss 控制主题色 +## 1.4.6(2022-09-08) +- 修复 表头年月切换,导致改变当前日期为选择月1号,且未触发change事件的Bug +## 1.4.5(2022-02-25) +- 修复 条件编译 nvue 不支持的 css 样式的Bug +## 1.4.4(2022-02-25) +- 修复 条件编译 nvue 不支持的 css 样式的Bug +## 1.4.3(2021-09-22) +- 修复 startDate、 endDate 属性失效的Bug +## 1.4.2(2021-08-24) +- 新增 支持国际化 +## 1.4.1(2021-08-05) +- 修复 弹出层被 tabbar 遮盖的Bug +## 1.4.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.3.16(2021-05-12) +- 新增 组件示例地址 +## 1.3.15(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-calendar/components/uni-calendar/calendar.js b/uni_modules/uni-calendar/components/uni-calendar/calendar.js new file mode 100644 index 0000000..55eed81 --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/calendar.js @@ -0,0 +1,544 @@ +/** +* @1900-2100区间内的公历、农历互转 +* @charset UTF-8 +* @github https://github.com/jjonline/calendar.js +* @Author Jea杨(JJonline@JJonline.Cn) +* @Time 2014-7-21 +* @Time 2016-8-13 Fixed 2033hex、Attribution Annals +* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug +* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year +* @Version 1.0.3 +* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] +* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] +*/ +/* eslint-disable */ +var calendar = { + + /** + * 农历1900-2100的润大小信息表 + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 + /** Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 + 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 + 0x0d520], // 2100 + + /** + * 公历每个月份的天数普通表 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 天干地支之天干速查表 + * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] + * @return Cn string + */ + Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], + + /** + * 天干地支之地支速查表 + * @Array Of Property + * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] + * @return Cn string + */ + Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], + + /** + * 天干地支之地支速查表<=>生肖 + * @Array Of Property + * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] + * @return Cn string + */ + Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], + + /** + * 24节气速查表 + * @Array Of Property + * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] + * @return Cn string + */ + solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], + + /** + * 1900-2100各年的24节气日期速查表 + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 数字转中文速查表 + * @Array Of Property + * @trans ['日','一','二','三','四','五','六','七','八','九','十'] + * @return Cn string + */ + nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], + + /** + * 日期转农历称呼速查表 + * @Array Of Property + * @trans ['初','十','廿','卅'] + * @return Cn string + */ + nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], + + /** + * 月份转农历称呼速查表 + * @Array Of Property + * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] + * @return Cn string + */ + nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], + + /** + * 返回农历y年一整年的总天数 + * @param lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + var i; var sum = 348 + for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } + return (sum + this.leapDays(y)) + }, + + /** + * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 + * @param lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { // 闰字编码 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf) + }, + + /** + * 返回农历y年闰月的天数 若该年没有闰月则返回0 + * @param lunar Year + * @return Number (0、29、30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) + } + return (0) + }, + + /** + * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 + * @param lunar Year + * @return Number (-1、29、30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) + }, + + /** + * 返回公历(!)y年m月的天数 + * @param solar Year + * @return Number (-1、28、29、30、31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var ms = m - 1 + if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29 + return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) + } else { + return (this.solarMonth[ms]) + } + }, + + /** + * 农历年份转换为干支纪年 + * @param lYear 农历年的年份数 + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10 + var zhiKey = (lYear - 3) % 12 + if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干 + if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支 + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] + }, + + /** + * 公历月、日判断所属星座 + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' + var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座 + }, + + /** + * 传入offset偏移量返回干支 + * @param offset 相对甲子的偏移量 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12] + }, + + /** + * 传入公历(!)y年获得该年第n个节气的公历日期 + * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 + */ + getTerm: function (y, n) { + if (y < 1900 || y > 2100) { return -1 } + if (n < 1 || n > 24) { return -1 } + var _table = this.sTermInfo[y - 1900] + var _info = [ + parseInt('0x' + _table.substr(0, 5)).toString(), + parseInt('0x' + _table.substr(5, 5)).toString(), + parseInt('0x' + _table.substr(10, 5)).toString(), + parseInt('0x' + _table.substr(15, 5)).toString(), + parseInt('0x' + _table.substr(20, 5)).toString(), + parseInt('0x' + _table.substr(25, 5)).toString() + ] + var _calday = [ + _info[0].substr(0, 1), + _info[0].substr(1, 2), + _info[0].substr(3, 1), + _info[0].substr(4, 2), + + _info[1].substr(0, 1), + _info[1].substr(1, 2), + _info[1].substr(3, 1), + _info[1].substr(4, 2), + + _info[2].substr(0, 1), + _info[2].substr(1, 2), + _info[2].substr(3, 1), + _info[2].substr(4, 2), + + _info[3].substr(0, 1), + _info[3].substr(1, 2), + _info[3].substr(3, 1), + _info[3].substr(4, 2), + + _info[4].substr(0, 1), + _info[4].substr(1, 2), + _info[4].substr(3, 1), + _info[4].substr(4, 2), + + _info[5].substr(0, 1), + _info[5].substr(1, 2), + _info[5].substr(3, 1), + _info[5].substr(4, 2) + ] + return parseInt(_calday[n - 1]) + }, + + /** + * 传入农历数字月份返回汉语通俗表示法 + * @param lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' + */ + toChinaMonth: function (m) { // 月 => \u6708 + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var s = this.nStr3[m - 1] + s += '\u6708'// 加上月字 + return s + }, + + /** + * 传入农历日期数字返回汉字表示法 + * @param lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' + */ + toChinaDay: function (d) { // 日 => \u65e5 + var s + switch (d) { + case 10: + s = '\u521d\u5341'; break + case 20: + s = '\u4e8c\u5341'; break + case 30: + s = '\u4e09\u5341'; break + default : + s = this.nStr2[Math.floor(d / 10)] + s += this.nStr1[d % 10] + } + return (s) + }, + + /** + * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON + * @param y solar year + * @param m solar month + * @param d solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31 + // 年份限定、上限 + if (y < 1900 || y > 2100) { + return -1// undefined转换为数字变为NaN + } + // 公历传参最下限 + if (y == 1900 && m == 1 && d < 31) { + return -1 + } + // 未传参 获得当天 + if (!y) { + var objDate = new Date() + } else { + var objDate = new Date(y, parseInt(m) - 1, d) + } + var i; var leap = 0; var temp = 0 + // 修正ymd参数 + var y = objDate.getFullYear() + var m = objDate.getMonth() + 1 + var d = objDate.getDate() + var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i) + offset -= temp + } + if (offset < 0) { + offset += temp; i-- + } + + // 是否今天 + var isTodayObj = new Date() + var isToday = false + if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { + isToday = true + } + // 星期几 + var nWeek = objDate.getDay() + var cWeek = this.nStr1[nWeek] + // 数字表示周几顺应天朝周一开始的惯例 + if (nWeek == 0) { + nWeek = 7 + } + // 农历年 + var year = i + var leap = this.leapMonth(i) // 闰哪个月 + var isLeap = false + + // 效验闰月 + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && isLeap == false) { + --i + isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数 + } else { + temp = this.monthDays(year, i)// 计算农历普通月天数 + } + // 解除闰月 + if (isLeap == true && i == (leap + 1)) { isLeap = false } + offset -= temp + } + // 闰月导致数组下标重叠取反 + if (offset == 0 && leap > 0 && i == leap + 1) { + if (isLeap) { + isLeap = false + } else { + isLeap = true; --i + } + } + if (offset < 0) { + offset += temp; --i + } + // 农历月 + var month = i + // 农历日 + var day = offset + 1 + // 天干地支处理 + var sm = m - 1 + var gzY = this.toGanZhiYear(year) + + // 当月的两个节气 + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始 + var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始 + + // 依据12节气修正干支月 + var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12) + } + + // 传入的日期的节气与否 + var isTerm = false + var Term = null + if (firstNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 2] + } + if (secondNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 1] + } + // 日柱 当月一日与 1900/1/1 相差天数 + var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 + var gzD = this.toGanZhi(dayCyclical + d - 1) + // 该日期所属的星座 + var astro = this.toAstro(m, d) + + return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } + }, + + /** + * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1 + var isLeapMonth = !!isLeapMonth + var leapOffset = 0 + var leapMonth = this.leapMonth(y) + var leapDay = this.leapDays(y) + if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 + if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值 + var day = this.monthDays(y, m) + var _day = day + // bugFix 2016-9-25 + // if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m) + } + if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验 + + // 计算农历的时间差 + var offset = 0 + for (var i = 1900; i < y; i++) { + offset += this.lYearDays(i) + } + var leap = 0; var isAdd = false + for (var i = 1; i < m; i++) { + leap = this.leapMonth(y) + if (!isAdd) { // 处理闰月 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); isAdd = true + } + } + offset += this.monthDays(y, i) + } + // 转换闰月农历 需补充该年闰月的前一个月的时差 + if (isLeapMonth) { offset += day } + // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) + var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) + var calObj = new Date((offset + d - 31) * 86400000 + stmap) + var cY = calObj.getUTCFullYear() + var cM = calObj.getUTCMonth() + 1 + var cD = calObj.getUTCDate() + + return this.solar2lunar(cY, cM, cD) + } +} + +export default calendar diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json new file mode 100644 index 0000000..fcbd13c --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "ok", + "uni-calender.cancel": "cancel", + "uni-calender.today": "today", + "uni-calender.MON": "MON", + "uni-calender.TUE": "TUE", + "uni-calender.WED": "WED", + "uni-calender.THU": "THU", + "uni-calender.FRI": "FRI", + "uni-calender.SAT": "SAT", + "uni-calender.SUN": "SUN" +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js b/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json new file mode 100644 index 0000000..1ca43de --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "确定", + "uni-calender.cancel": "取消", + "uni-calender.today": "今日", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六" +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json new file mode 100644 index 0000000..e0fe33b --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "確定", + "uni-calender.cancel": "取消", + "uni-calender.today": "今日", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六" +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue new file mode 100644 index 0000000..f22fd16 --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue @@ -0,0 +1,191 @@ + + + + + diff --git a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue new file mode 100644 index 0000000..0beebfb --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue @@ -0,0 +1,567 @@ + + + + + diff --git a/uni_modules/uni-calendar/components/uni-calendar/util.js b/uni_modules/uni-calendar/components/uni-calendar/util.js new file mode 100644 index 0000000..e0c5103 --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/util.js @@ -0,0 +1,360 @@ +import CALENDAR from './calendar.js' + +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range + } = {}) { + // 当前日期 + this.date = this.getDate(new Date()) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 范围开始 + this.startDate = startDate + // 范围结束 + this.endDate = endDate + this.range = range + // 多选状态 + this.cleanMultipleStatus() + // 每周日期 + this.weeks = {} + // this._getWeek(this.date.fullDate) + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date) { + this.selectDate = this.getDate(date) + this._getWeek(this.selectDate.fullDate) + } + + /** + * 清理多选状态 + */ + cleanMultipleStatus() { + this.multipleStatus = { + before: '', + after: '', + data: [] + } + } + + /** + * 重置开始日期 + */ + resetSatrtDate(startDate) { + // 范围开始 + this.startDate = startDate + + } + + /** + * 重置结束日期 + */ + resetEndDate(endDate) { + // 范围结束 + this.endDate = endDate + } + + /** + * 获取任意时间 + */ + getDate(date, AddDayCount = 0, str = 'day') { + if (!date) { + date = new Date() + } + if (typeof date !== 'object') { + date = date.replace(/-/g, '/') + } + const dd = new Date(date) + switch (str) { + case 'day': + dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期 + break + case 'month': + if (dd.getDate() === 31 && AddDayCount>0) { + dd.setDate(dd.getDate() + AddDayCount) + } else { + const preMonth = dd.getMonth() + dd.setMonth(preMonth + AddDayCount) // 获取AddDayCount天后的日期 + const nextMonth = dd.getMonth() + // 处理 pre 切换月份目标月份为2月没有当前日(30 31) 切换错误问题 + if(AddDayCount<0 && preMonth!==0 && nextMonth-preMonth>AddDayCount){ + dd.setMonth(nextMonth+(nextMonth-preMonth+AddDayCount)) + } + // 处理 next 切换月份目标月份为2月没有当前日(30 31) 切换错误问题 + if(AddDayCount>0 && nextMonth-preMonth>AddDayCount){ + dd.setMonth(nextMonth-(nextMonth-preMonth-AddDayCount)) + } + } + break + case 'year': + dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期 + break + } + const y = dd.getFullYear() + const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0 + const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0 + return { + fullDate: y + '-' + m + '-' + d, + year: y, + month: m, + date: d, + day: dd.getDay() + } + } + + + /** + * 获取上月剩余天数 + */ + _getLastMonthDays(firstDay, full) { + let dateArr = [] + for (let i = firstDay; i > 0; i--) { + const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() + dateArr.push({ + date: beforeDate, + month: full.month - 1, + lunar: this.getlunar(full.year, full.month - 1, beforeDate), + disable: true + }) + } + return dateArr + } + /** + * 获取本月天数 + */ + _currentMonthDys(dateData, full) { + let dateArr = [] + let fullDate = this.date.fullDate + for (let i = 1; i <= dateData; i++) { + let nowDate = full.year + '-' + (full.month < 10 ? + full.month : full.month) + '-' + (i < 10 ? + '0' + i : i) + // 是否今天 + let isDay = fullDate === nowDate + // 获取打点信息 + let info = this.selected && this.selected.find((item) => { + if (this.dateEqual(nowDate, item.date)) { + return item + } + }) + + // 日期禁用 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + // let dateCompBefore = this.dateCompare(this.startDate, fullDate) + // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) + disableBefore = this.dateCompare(this.startDate, nowDate) + } + + if (this.endDate) { + // let dateCompAfter = this.dateCompare(fullDate, this.endDate) + // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) + disableAfter = this.dateCompare(nowDate, this.endDate) + } + let multiples = this.multipleStatus.data + let checked = false + let multiplesStatus = -1 + if (this.range) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked = true + } + } + let data = { + fullDate: nowDate, + year: full.year, + date: i, + multiple: this.range ? checked : false, + beforeMultiple: this.dateEqual(this.multipleStatus.before, nowDate), + afterMultiple: this.dateEqual(this.multipleStatus.after, nowDate), + month: full.month, + lunar: this.getlunar(full.year, full.month, i), + disable: !(disableBefore && disableAfter), + isDay + } + if (info) { + data.extraInfo = info + } + + dateArr.push(data) + } + return dateArr + } + /** + * 获取下月天数 + */ + _getNextMonthDays(surplus, full) { + let dateArr = [] + for (let i = 1; i < surplus + 1; i++) { + dateArr.push({ + date: i, + month: Number(full.month) + 1, + lunar: this.getlunar(full.year, Number(full.month) + 1, i), + disable: true + }) + } + return dateArr + } + + /** + * 获取当前日期详情 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } + const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) + return dateInfo + } + + /** + * 比较时间大小 + */ + dateCompare(startDate, endDate) { + // 计算截止时间 + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + if (startDate <= endDate) { + return true + } else { + return false + } + } + + /** + * 比较时间是否相等 + */ + dateEqual(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (before.getTime() - after.getTime() === 0) { + return true + } else { + return false + } + } + + + /** + * 获取日期范围内所有日期 + * @param {Object} begin + * @param {Object} end + */ + geDateAll(begin, end) { + var arr = [] + var ab = begin.split('-') + var ae = end.split('-') + var db = new Date() + db.setFullYear(ab[0], ab[1] - 1, ab[2]) + var de = new Date() + de.setFullYear(ae[0], ae[1] - 1, ae[2]) + var unixDb = db.getTime() - 24 * 60 * 60 * 1000 + var unixDe = de.getTime() - 24 * 60 * 60 * 1000 + for (var k = unixDb; k <= unixDe;) { + k = k + 24 * 60 * 60 * 1000 + arr.push(this.getDate(new Date(parseInt(k))).fullDate) + } + return arr + } + /** + * 计算阴历日期显示 + */ + getlunar(year, month, date) { + return CALENDAR.solar2lunar(year, month, date) + } + /** + * 设置打点 + */ + setSelectInfo(data, value) { + this.selected = value + this._getWeek(data) + } + + /** + * 获取多选状态 + */ + setMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + + if (!this.range) return + if (before && after) { + this.multipleStatus.before = fullDate + this.multipleStatus.after = '' + this.multipleStatus.data = [] + } else { + if (!before) { + this.multipleStatus.before = fullDate + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); + } + } + } + this._getWeek(fullDate) + } + + /** + * 获取每周数据 + * @param {Object} dateData + */ + _getWeek(dateData) { + const { + year, + month + } = this.getDate(dateData) + let firstDay = new Date(year, month - 1, 1).getDay() + let currentDay = new Date(year, month, 0).getDate() + let dates = { + lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天 + currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 + nextMonthDays: [], // 下个月开始几天 + weeks: [] + } + let canlender = [] + const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) + dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) + canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) + let weeks = {} + // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 + for (let i = 0; i < canlender.length; i++) { + if (i % 7 === 0) { + weeks[parseInt(i / 7)] = new Array(7) + } + weeks[parseInt(i / 7)][i % 7] = canlender[i] + } + this.canlender = canlender + this.weeks = weeks + } + + //静态方法 + // static init(date) { + // if (!this.instance) { + // this.instance = new Calendar(date); + // } + // return this.instance; + // } +} + + +export default Calendar diff --git a/uni_modules/uni-calendar/package.json b/uni_modules/uni-calendar/package.json new file mode 100644 index 0000000..ec924e9 --- /dev/null +++ b/uni_modules/uni-calendar/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-calendar", + "displayName": "uni-calendar 日历", + "version": "1.4.12", + "description": "日历组件", + "keywords": [ + "uni-ui", + "uniui", + "日历", + "", + "打卡", + "日历选择" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-calendar/readme.md b/uni_modules/uni-calendar/readme.md new file mode 100644 index 0000000..4e1748c --- /dev/null +++ b/uni_modules/uni-calendar/readme.md @@ -0,0 +1,103 @@ + + +## Calendar 日历 +> **组件名:uni-calendar** +> 代码块: `uCalendar` + + +日历组件 + +> **注意事项** +> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。 +> - 本组件农历转换使用的js是 [@1900-2100区间内的公历、农历互转](https://github.com/jjonline/calendar.js) +> - 仅支持自定义组件模式 +> - `date`属性传入的应该是一个 String ,如: 2019-06-27 ,而不是 new Date() +> - 通过 `insert` 属性来确定当前的事件是 @change 还是 @confirm 。理应合并为一个事件,但是为了区分模式,现使用两个事件,这里需要注意 +> - 弹窗模式下无法阻止后面的元素滚动,如有需要阻止,请在弹窗弹出后,手动设置滚动元素为不可滚动 + + +### 安装方式 + +本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。 + +如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55) + +### 基本用法 + +在 ``template`` 中使用组件 + +```html + + + +``` + +### 通过方法打开日历 + +需要设置 `insert` 为 `false` + +```html + + + + +``` + +```javascript + +export default { + data() { + return {}; + }, + methods: { + open(){ + this.$refs.calendar.open(); + }, + confirm(e) { + console.log(e); + } + } +}; + +``` + + +## API + +### Calendar Props + +| 属性名 | 类型 | 默认值| 说明 | +| - | - | - | - | +| date | String |- | 自定义当前时间,默认为今天 | +| lunar | Boolean | false | 显示农历 | +| startDate | String |- | 日期选择范围-开始日期 | +| endDate | String |- | 日期选择范围-结束日期 | +| range | Boolean | false | 范围选择 | +| insert | Boolean | false | 插入模式,可选值,ture:插入模式;false:弹窗模式;默认为插入模式 | +|clearDate |Boolean |true |弹窗模式是否清空上次选择内容 | +| selected | Array |- | 打点,期待格式[{date: '2019-06-27', info: '签到', data: { custom: '自定义信息', name: '自定义消息头',xxx:xxx... }}] | +|showMonth | Boolean | true | 是否显示月份为背景 | + +### Calendar Events + +| 事件名 | 说明 |返回值| +| - | - | - | +| open | 弹出日历组件,`insert :false` 时生效|- | + + + + + +## 组件示例 + +点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar](https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar) diff --git a/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue b/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue index cc0856a..9e68f02 100644 --- a/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue +++ b/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue @@ -1,12 +1,12 @@