Commit 75644ea3 by xuzhenghua

春节活动

parent 46ec3244
{
"mrstatic/js/0.a1f55c4b.chunk.js": "/mrstatic/js/0.a1f55c4b.chunk.js",
"mrstatic/js/0.a1f55c4b.chunk.js.map": "/mrstatic/js/0.a1f55c4b.chunk.js.map",
"mrstatic/css/1.781074ea.chunk.css": "/mrstatic/css/1.781074ea.chunk.css",
"mrstatic/js/1.b4abac31.chunk.js": "/mrstatic/js/1.b4abac31.chunk.js",
"mrstatic/js/1.b4abac31.chunk.js.map": "/mrstatic/js/1.b4abac31.chunk.js.map",
"mrstatic/css/2.bf839917.chunk.css": "/mrstatic/css/2.bf839917.chunk.css",
"mrstatic/js/2.27491ad8.chunk.js": "/mrstatic/js/2.27491ad8.chunk.js",
"mrstatic/js/2.27491ad8.chunk.js.map": "/mrstatic/js/2.27491ad8.chunk.js.map",
"mrstatic/css/3.b22f3911.chunk.css": "/mrstatic/css/3.b22f3911.chunk.css",
"mrstatic/js/3.62654a95.chunk.js": "/mrstatic/js/3.62654a95.chunk.js",
"mrstatic/js/3.62654a95.chunk.js.map": "/mrstatic/js/3.62654a95.chunk.js.map",
"Activity.css": "/mrstatic/css/Activity.6260646a.chunk.css",
"Activity.js": "/mrstatic/js/Activity.f0617e39.chunk.js",
"Activity.js.map": "/mrstatic/js/Activity.f0617e39.chunk.js.map",
"BargainMiddlePage.css": "/mrstatic/css/BargainMiddlePage.eb686c74.chunk.css",
"BargainMiddlePage.js": "/mrstatic/js/BargainMiddlePage.bed360e8.chunk.js",
"BargainMiddlePage.js.map": "/mrstatic/js/BargainMiddlePage.bed360e8.chunk.js.map",
"Classify.css": "/mrstatic/css/Classify.fb4bedde.chunk.css",
"Classify.js": "/mrstatic/js/Classify.0e91e119.chunk.js",
"Classify.js.map": "/mrstatic/js/Classify.0e91e119.chunk.js.map",
"Country.css": "/mrstatic/css/Country.2d34330b.chunk.css",
"Country.js": "/mrstatic/js/Country.47f208ff.chunk.js",
"Country.js.map": "/mrstatic/js/Country.47f208ff.chunk.js.map",
"CourseList.css": "/mrstatic/css/CourseList.afc8902e.chunk.css",
"CourseList.js": "/mrstatic/js/CourseList.b7d73fce.chunk.js",
"CourseList.js.map": "/mrstatic/js/CourseList.b7d73fce.chunk.js.map",
"DrawDocument.css": "/mrstatic/css/DrawDocument.aeb3f822.chunk.css",
"DrawDocument.js": "/mrstatic/js/DrawDocument.1b596f70.chunk.js",
"DrawDocument.js.map": "/mrstatic/js/DrawDocument.1b596f70.chunk.js.map",
"Examination.css": "/mrstatic/css/Examination.7bb0622b.chunk.css",
"Examination.js": "/mrstatic/js/Examination.add8ef1c.chunk.js",
"Examination.js.map": "/mrstatic/js/Examination.add8ef1c.chunk.js.map",
"Invite.css": "/mrstatic/css/Invite.f0f99418.chunk.css",
"Invite.js": "/mrstatic/js/Invite.a00c7d48.chunk.js",
"Invite.js.map": "/mrstatic/js/Invite.a00c7d48.chunk.js.map",
"MyEdit.js": "/mrstatic/js/MyEdit.f6e22ddf.chunk.js",
"MyEdit.js.map": "/mrstatic/js/MyEdit.f6e22ddf.chunk.js.map",
"Order.css": "/mrstatic/css/Order.8c058a7a.chunk.css",
"Order.js": "/mrstatic/js/Order.5f149b42.chunk.js",
"Order.js.map": "/mrstatic/js/Order.5f149b42.chunk.js.map",
"Orderinfo.js": "/mrstatic/js/Orderinfo.7ccf8ccf.chunk.js",
"Orderinfo.js.map": "/mrstatic/js/Orderinfo.7ccf8ccf.chunk.js.map",
"PayOrder.css": "/mrstatic/css/PayOrder.7eb7d317.chunk.css",
"PayOrder.js": "/mrstatic/js/PayOrder.1dd01042.chunk.js",
"PayOrder.js.map": "/mrstatic/js/PayOrder.1dd01042.chunk.js.map",
"Preferential.css": "/mrstatic/css/Preferential.12a8297c.chunk.css",
"Preferential.js": "/mrstatic/js/Preferential.22e27dc8.chunk.js",
"Preferential.js.map": "/mrstatic/js/Preferential.22e27dc8.chunk.js.map",
"SearchResult.css": "/mrstatic/css/SearchResult.cdf852c1.chunk.css",
"SearchResult.js": "/mrstatic/js/SearchResult.c8fb947b.chunk.js",
"SearchResult.js.map": "/mrstatic/js/SearchResult.c8fb947b.chunk.js.map",
"ShareCourse.css": "/mrstatic/css/ShareCourse.8046fb41.chunk.css",
"ShareCourse.js": "/mrstatic/js/ShareCourse.1fe4fddd.chunk.js",
"ShareCourse.js.map": "/mrstatic/js/ShareCourse.1fe4fddd.chunk.js.map",
"ShopCart.css": "/mrstatic/css/ShopCart.92ab48a3.chunk.css",
"ShopCart.js": "/mrstatic/js/ShopCart.9ed4e19b.chunk.js",
"ShopCart.js.map": "/mrstatic/js/ShopCart.9ed4e19b.chunk.js.map",
"aist-share.css": "/mrstatic/css/aist-share.40873df0.chunk.css",
"aist-share.js": "/mrstatic/js/aist-share.c957378f.chunk.js",
"aist-share.js.map": "/mrstatic/js/aist-share.c957378f.chunk.js.map",
"blessing-getPrize.css": "/mrstatic/css/blessing-getPrize.5a935f68.chunk.css",
"blessing-getPrize.js": "/mrstatic/js/blessing-getPrize.14f9e513.chunk.js",
"blessing-getPrize.js.map": "/mrstatic/js/blessing-getPrize.14f9e513.chunk.js.map",
"blessing-preheat.css": "/mrstatic/css/blessing-preheat.07827c59.chunk.css",
"blessing-preheat.js": "/mrstatic/js/blessing-preheat.4d9744f0.chunk.js",
"blessing-preheat.js.map": "/mrstatic/js/blessing-preheat.4d9744f0.chunk.js.map",
"blessing-rank.css": "/mrstatic/css/blessing-rank.91e559d5.chunk.css",
"blessing-rank.js": "/mrstatic/js/blessing-rank.2843e544.chunk.js",
"blessing-rank.js.map": "/mrstatic/js/blessing-rank.2843e544.chunk.js.map",
"coupons.css": "/mrstatic/css/coupons.466858c7.chunk.css",
"coupons.js": "/mrstatic/js/coupons.cb2c21f6.chunk.js",
"coupons.js.map": "/mrstatic/js/coupons.cb2c21f6.chunk.js.map",
"deposit-order.css": "/mrstatic/css/deposit-order.5ea077aa.chunk.css",
"deposit-order.js": "/mrstatic/js/deposit-order.2cf5b678.chunk.js",
"deposit-order.js.map": "/mrstatic/js/deposit-order.2cf5b678.chunk.js.map",
"deposit-pay-order.css": "/mrstatic/css/deposit-pay-order.09ce6fd5.chunk.css",
"deposit-pay-order.js": "/mrstatic/js/deposit-pay-order.37c046cc.chunk.js",
"deposit-pay-order.js.map": "/mrstatic/js/deposit-pay-order.37c046cc.chunk.js.map",
"detail.css": "/mrstatic/css/detail.57479076.chunk.css",
"detail.js": "/mrstatic/js/detail.5776614d.chunk.js",
"detail.js.map": "/mrstatic/js/detail.5776614d.chunk.js.map",
"main.css": "/mrstatic/css/main.bd7bbf45.chunk.css",
"main.js": "/mrstatic/js/main.0206f215.chunk.js",
"main.js.map": "/mrstatic/js/main.0206f215.chunk.js.map",
"myorders.css": "/mrstatic/css/myorders.179a42fc.chunk.css",
"myorders.js": "/mrstatic/js/myorders.b7a60cb5.chunk.js",
"myorders.js.map": "/mrstatic/js/myorders.b7a60cb5.chunk.js.map",
"newyear-2019-landing.css": "/mrstatic/css/newyear-2019-landing.6ea5fa63.chunk.css",
"newyear-2019-landing.js": "/mrstatic/js/newyear-2019-landing.81a40085.chunk.js",
"newyear-2019-landing.js.map": "/mrstatic/js/newyear-2019-landing.81a40085.chunk.js.map",
"newyear-yearIndex.css": "/mrstatic/css/newyear-yearIndex.2c89a30a.chunk.css",
"newyear-yearIndex.js": "/mrstatic/js/newyear-yearIndex.34cdb1f5.chunk.js",
"newyear-yearIndex.js.map": "/mrstatic/js/newyear-yearIndex.34cdb1f5.chunk.js.map",
"prize-winner-list.css": "/mrstatic/css/prize-winner-list.3eee90af.chunk.css",
"prize-winner-list.js": "/mrstatic/js/prize-winner-list.4782a879.chunk.js",
"prize-winner-list.js.map": "/mrstatic/js/prize-winner-list.4782a879.chunk.js.map",
"purchased.css": "/mrstatic/css/purchased.bb758677.chunk.css",
"purchased.js": "/mrstatic/js/purchased.c87dc236.chunk.js",
"purchased.js.map": "/mrstatic/js/purchased.c87dc236.chunk.js.map",
"python-class.css": "/mrstatic/css/python-class.f5f0c94e.chunk.css",
"python-class.js": "/mrstatic/js/python-class.b0f513fb.chunk.js",
"python-class.js.map": "/mrstatic/js/python-class.b0f513fb.chunk.js.map",
"runtime~main.js": "/mrstatic/js/runtime~main.886b50aa.js",
"runtime~main.js.map": "/mrstatic/js/runtime~main.886b50aa.js.map",
"search.css": "/mrstatic/css/search.5716d9b3.chunk.css",
"search.js": "/mrstatic/js/search.66e5089b.chunk.js",
"search.js.map": "/mrstatic/js/search.66e5089b.chunk.js.map",
"shareposter.css": "/mrstatic/css/shareposter.76774ba4.chunk.css",
"shareposter.js": "/mrstatic/js/shareposter.1f81bd03.chunk.js",
"shareposter.js.map": "/mrstatic/js/shareposter.1f81bd03.chunk.js.map",
"study.css": "/mrstatic/css/study.bf6b9b43.chunk.css",
"study.js": "/mrstatic/js/study.d0a40fbd.chunk.js",
"study.js.map": "/mrstatic/js/study.d0a40fbd.chunk.js.map",
"system-notices.css": "/mrstatic/css/system-notices.fd23e5fc.chunk.css",
"system-notices.js": "/mrstatic/js/system-notices.6bf87843.chunk.js",
"system-notices.js.map": "/mrstatic/js/system-notices.6bf87843.chunk.js.map",
"togroup.css": "/mrstatic/css/togroup.f08bc5f3.chunk.css",
"togroup.js": "/mrstatic/js/togroup.3413e977.chunk.js",
"togroup.js.map": "/mrstatic/js/togroup.3413e977.chunk.js.map",
"video.css": "/mrstatic/css/video.1c1131c9.chunk.css",
"video.js": "/mrstatic/js/video.a40b0688.chunk.js",
"video.js.map": "/mrstatic/js/video.a40b0688.chunk.js.map",
"mrstatic/css/42.2c78a65e.chunk.css": "/mrstatic/css/42.2c78a65e.chunk.css",
"mrstatic/js/42.27fde055.chunk.js": "/mrstatic/js/42.27fde055.chunk.js",
"mrstatic/js/42.27fde055.chunk.js.map": "/mrstatic/js/42.27fde055.chunk.js.map",
"mrstatic/js/43.f063ef63.chunk.js": "/mrstatic/js/43.f063ef63.chunk.js",
"mrstatic/js/43.f063ef63.chunk.js.map": "/mrstatic/js/43.f063ef63.chunk.js.map",
"mrstatic/css/44.a156a0a0.chunk.css": "/mrstatic/css/44.a156a0a0.chunk.css",
"mrstatic/js/44.cac199e4.chunk.js": "/mrstatic/js/44.cac199e4.chunk.js",
"mrstatic/js/44.cac199e4.chunk.js.map": "/mrstatic/js/44.cac199e4.chunk.js.map",
"mrstatic/css/45.bff100af.chunk.css": "/mrstatic/css/45.bff100af.chunk.css",
"mrstatic/js/45.53be32a6.chunk.js": "/mrstatic/js/45.53be32a6.chunk.js",
"mrstatic/js/45.53be32a6.chunk.js.map": "/mrstatic/js/45.53be32a6.chunk.js.map",
"mrstatic/js/46.88c6b419.chunk.js": "/mrstatic/js/46.88c6b419.chunk.js",
"mrstatic/js/46.88c6b419.chunk.js.map": "/mrstatic/js/46.88c6b419.chunk.js.map",
"mrstatic/css/47.820320a6.chunk.css": "/mrstatic/css/47.820320a6.chunk.css",
"mrstatic/js/47.da31c5dc.chunk.js": "/mrstatic/js/47.da31c5dc.chunk.js",
"mrstatic/js/47.da31c5dc.chunk.js.map": "/mrstatic/js/47.da31c5dc.chunk.js.map",
"mrstatic/css/48.35e22f8c.chunk.css": "/mrstatic/css/48.35e22f8c.chunk.css",
"mrstatic/js/48.6ffec0fd.chunk.js": "/mrstatic/js/48.6ffec0fd.chunk.js",
"mrstatic/js/48.6ffec0fd.chunk.js.map": "/mrstatic/js/48.6ffec0fd.chunk.js.map",
"mrstatic/css/49.befec011.chunk.css": "/mrstatic/css/49.befec011.chunk.css",
"mrstatic/js/49.09eded1d.chunk.js": "/mrstatic/js/49.09eded1d.chunk.js",
"mrstatic/js/49.09eded1d.chunk.js.map": "/mrstatic/js/49.09eded1d.chunk.js.map",
"mrstatic/css/50.b02d1de6.chunk.css": "/mrstatic/css/50.b02d1de6.chunk.css",
"mrstatic/js/50.755d8188.chunk.js": "/mrstatic/js/50.755d8188.chunk.js",
"mrstatic/js/50.755d8188.chunk.js.map": "/mrstatic/js/50.755d8188.chunk.js.map",
"mrstatic/css/51.d1a52318.chunk.css": "/mrstatic/css/51.d1a52318.chunk.css",
"mrstatic/js/51.8b00b453.chunk.js": "/mrstatic/js/51.8b00b453.chunk.js",
"mrstatic/js/51.8b00b453.chunk.js.map": "/mrstatic/js/51.8b00b453.chunk.js.map",
"mrstatic/js/0.2ac9c6a4.chunk.js": "/mrstatic/js/0.2ac9c6a4.chunk.js",
"mrstatic/js/0.2ac9c6a4.chunk.js.map": "/mrstatic/js/0.2ac9c6a4.chunk.js.map",
"mrstatic/css/1.71900497.chunk.css": "/mrstatic/css/1.71900497.chunk.css",
"mrstatic/js/1.691272b3.chunk.js": "/mrstatic/js/1.691272b3.chunk.js",
"mrstatic/js/1.691272b3.chunk.js.map": "/mrstatic/js/1.691272b3.chunk.js.map",
"mrstatic/css/2.fd1b61f1.chunk.css": "/mrstatic/css/2.fd1b61f1.chunk.css",
"mrstatic/js/2.7c2c0b10.chunk.js": "/mrstatic/js/2.7c2c0b10.chunk.js",
"mrstatic/js/2.7c2c0b10.chunk.js.map": "/mrstatic/js/2.7c2c0b10.chunk.js.map",
"mrstatic/css/3.66642611.chunk.css": "/mrstatic/css/3.66642611.chunk.css",
"mrstatic/js/3.851c1e57.chunk.js": "/mrstatic/js/3.851c1e57.chunk.js",
"mrstatic/js/3.851c1e57.chunk.js.map": "/mrstatic/js/3.851c1e57.chunk.js.map",
"Activity.css": "/mrstatic/css/Activity.fe3f3793.chunk.css",
"Activity.js": "/mrstatic/js/Activity.e9998c5c.chunk.js",
"Activity.js.map": "/mrstatic/js/Activity.e9998c5c.chunk.js.map",
"BargainMiddlePage.css": "/mrstatic/css/BargainMiddlePage.98ff5f85.chunk.css",
"BargainMiddlePage.js": "/mrstatic/js/BargainMiddlePage.f4caf5ff.chunk.js",
"BargainMiddlePage.js.map": "/mrstatic/js/BargainMiddlePage.f4caf5ff.chunk.js.map",
"Classify.css": "/mrstatic/css/Classify.4393f5d0.chunk.css",
"Classify.js": "/mrstatic/js/Classify.4a1902b4.chunk.js",
"Classify.js.map": "/mrstatic/js/Classify.4a1902b4.chunk.js.map",
"Country.css": "/mrstatic/css/Country.67334f4b.chunk.css",
"Country.js": "/mrstatic/js/Country.41179434.chunk.js",
"Country.js.map": "/mrstatic/js/Country.41179434.chunk.js.map",
"CourseList.css": "/mrstatic/css/CourseList.12a61ca3.chunk.css",
"CourseList.js": "/mrstatic/js/CourseList.a9f16b2f.chunk.js",
"CourseList.js.map": "/mrstatic/js/CourseList.a9f16b2f.chunk.js.map",
"DrawDocument.css": "/mrstatic/css/DrawDocument.58508f31.chunk.css",
"DrawDocument.js": "/mrstatic/js/DrawDocument.5cefdf13.chunk.js",
"DrawDocument.js.map": "/mrstatic/js/DrawDocument.5cefdf13.chunk.js.map",
"Examination.css": "/mrstatic/css/Examination.02475a25.chunk.css",
"Examination.js": "/mrstatic/js/Examination.a4b5e834.chunk.js",
"Examination.js.map": "/mrstatic/js/Examination.a4b5e834.chunk.js.map",
"Invite.css": "/mrstatic/css/Invite.87c792ef.chunk.css",
"Invite.js": "/mrstatic/js/Invite.29c4302b.chunk.js",
"Invite.js.map": "/mrstatic/js/Invite.29c4302b.chunk.js.map",
"MyEdit.js": "/mrstatic/js/MyEdit.9976afe0.chunk.js",
"MyEdit.js.map": "/mrstatic/js/MyEdit.9976afe0.chunk.js.map",
"Order.css": "/mrstatic/css/Order.0ab178ef.chunk.css",
"Order.js": "/mrstatic/js/Order.31936e9e.chunk.js",
"Order.js.map": "/mrstatic/js/Order.31936e9e.chunk.js.map",
"Orderinfo.js": "/mrstatic/js/Orderinfo.bca91e5b.chunk.js",
"Orderinfo.js.map": "/mrstatic/js/Orderinfo.bca91e5b.chunk.js.map",
"PayOrder.css": "/mrstatic/css/PayOrder.4a91788c.chunk.css",
"PayOrder.js": "/mrstatic/js/PayOrder.7e5d05bd.chunk.js",
"PayOrder.js.map": "/mrstatic/js/PayOrder.7e5d05bd.chunk.js.map",
"Preferential.css": "/mrstatic/css/Preferential.fd9b7b0b.chunk.css",
"Preferential.js": "/mrstatic/js/Preferential.2af6a01f.chunk.js",
"Preferential.js.map": "/mrstatic/js/Preferential.2af6a01f.chunk.js.map",
"SearchResult.css": "/mrstatic/css/SearchResult.b7ad8ad7.chunk.css",
"SearchResult.js": "/mrstatic/js/SearchResult.2943f928.chunk.js",
"SearchResult.js.map": "/mrstatic/js/SearchResult.2943f928.chunk.js.map",
"ShareCourse.css": "/mrstatic/css/ShareCourse.c571c49e.chunk.css",
"ShareCourse.js": "/mrstatic/js/ShareCourse.bbe4dc78.chunk.js",
"ShareCourse.js.map": "/mrstatic/js/ShareCourse.bbe4dc78.chunk.js.map",
"ShopCart.css": "/mrstatic/css/ShopCart.f39ca42e.chunk.css",
"ShopCart.js": "/mrstatic/js/ShopCart.13344d3e.chunk.js",
"ShopCart.js.map": "/mrstatic/js/ShopCart.13344d3e.chunk.js.map",
"aist-share.css": "/mrstatic/css/aist-share.7510d5bb.chunk.css",
"aist-share.js": "/mrstatic/js/aist-share.6d896179.chunk.js",
"aist-share.js.map": "/mrstatic/js/aist-share.6d896179.chunk.js.map",
"blessing-getPrize.css": "/mrstatic/css/blessing-getPrize.5b618764.chunk.css",
"blessing-getPrize.js": "/mrstatic/js/blessing-getPrize.58841e1d.chunk.js",
"blessing-getPrize.js.map": "/mrstatic/js/blessing-getPrize.58841e1d.chunk.js.map",
"blessing-preheat.css": "/mrstatic/css/blessing-preheat.e8b5cd61.chunk.css",
"blessing-preheat.js": "/mrstatic/js/blessing-preheat.62939ce4.chunk.js",
"blessing-preheat.js.map": "/mrstatic/js/blessing-preheat.62939ce4.chunk.js.map",
"blessing-rank.css": "/mrstatic/css/blessing-rank.4f55b203.chunk.css",
"blessing-rank.js": "/mrstatic/js/blessing-rank.39f6aa70.chunk.js",
"blessing-rank.js.map": "/mrstatic/js/blessing-rank.39f6aa70.chunk.js.map",
"coupons.css": "/mrstatic/css/coupons.940f5632.chunk.css",
"coupons.js": "/mrstatic/js/coupons.ca90eade.chunk.js",
"coupons.js.map": "/mrstatic/js/coupons.ca90eade.chunk.js.map",
"deposit-order.css": "/mrstatic/css/deposit-order.0cb67b20.chunk.css",
"deposit-order.js": "/mrstatic/js/deposit-order.8b41e43b.chunk.js",
"deposit-order.js.map": "/mrstatic/js/deposit-order.8b41e43b.chunk.js.map",
"deposit-pay-order.css": "/mrstatic/css/deposit-pay-order.fe0a9d86.chunk.css",
"deposit-pay-order.js": "/mrstatic/js/deposit-pay-order.9e575a82.chunk.js",
"deposit-pay-order.js.map": "/mrstatic/js/deposit-pay-order.9e575a82.chunk.js.map",
"detail.css": "/mrstatic/css/detail.38a8b899.chunk.css",
"detail.js": "/mrstatic/js/detail.ca6d1fc7.chunk.js",
"detail.js.map": "/mrstatic/js/detail.ca6d1fc7.chunk.js.map",
"main.css": "/mrstatic/css/main.a386cfb6.chunk.css",
"main.js": "/mrstatic/js/main.6fef321c.chunk.js",
"main.js.map": "/mrstatic/js/main.6fef321c.chunk.js.map",
"myorders.css": "/mrstatic/css/myorders.6e68e44c.chunk.css",
"myorders.js": "/mrstatic/js/myorders.a558d07f.chunk.js",
"myorders.js.map": "/mrstatic/js/myorders.a558d07f.chunk.js.map",
"newyear-2019-landing.css": "/mrstatic/css/newyear-2019-landing.974ec2e3.chunk.css",
"newyear-2019-landing.js": "/mrstatic/js/newyear-2019-landing.f3a81a29.chunk.js",
"newyear-2019-landing.js.map": "/mrstatic/js/newyear-2019-landing.f3a81a29.chunk.js.map",
"newyear-yearIndex.css": "/mrstatic/css/newyear-yearIndex.47108654.chunk.css",
"newyear-yearIndex.js": "/mrstatic/js/newyear-yearIndex.98adede9.chunk.js",
"newyear-yearIndex.js.map": "/mrstatic/js/newyear-yearIndex.98adede9.chunk.js.map",
"prize-winner-list.css": "/mrstatic/css/prize-winner-list.0f4a4332.chunk.css",
"prize-winner-list.js": "/mrstatic/js/prize-winner-list.a7bf3cca.chunk.js",
"prize-winner-list.js.map": "/mrstatic/js/prize-winner-list.a7bf3cca.chunk.js.map",
"purchased.css": "/mrstatic/css/purchased.28c23daa.chunk.css",
"purchased.js": "/mrstatic/js/purchased.3d2cba24.chunk.js",
"purchased.js.map": "/mrstatic/js/purchased.3d2cba24.chunk.js.map",
"python-class.css": "/mrstatic/css/python-class.ba9a2030.chunk.css",
"python-class.js": "/mrstatic/js/python-class.7363eb37.chunk.js",
"python-class.js.map": "/mrstatic/js/python-class.7363eb37.chunk.js.map",
"runtime~main.js": "/mrstatic/js/runtime~main.ef361010.js",
"runtime~main.js.map": "/mrstatic/js/runtime~main.ef361010.js.map",
"search.css": "/mrstatic/css/search.85280180.chunk.css",
"search.js": "/mrstatic/js/search.2a0fcef1.chunk.js",
"search.js.map": "/mrstatic/js/search.2a0fcef1.chunk.js.map",
"shareposter.css": "/mrstatic/css/shareposter.4618854a.chunk.css",
"shareposter.js": "/mrstatic/js/shareposter.e970e87f.chunk.js",
"shareposter.js.map": "/mrstatic/js/shareposter.e970e87f.chunk.js.map",
"study.css": "/mrstatic/css/study.72465fcb.chunk.css",
"study.js": "/mrstatic/js/study.28644de8.chunk.js",
"study.js.map": "/mrstatic/js/study.28644de8.chunk.js.map",
"system-notices.css": "/mrstatic/css/system-notices.0a75b211.chunk.css",
"system-notices.js": "/mrstatic/js/system-notices.fed1f62f.chunk.js",
"system-notices.js.map": "/mrstatic/js/system-notices.fed1f62f.chunk.js.map",
"togroup.css": "/mrstatic/css/togroup.acc61e40.chunk.css",
"togroup.js": "/mrstatic/js/togroup.efcf4162.chunk.js",
"togroup.js.map": "/mrstatic/js/togroup.efcf4162.chunk.js.map",
"video.css": "/mrstatic/css/video.8f752b2b.chunk.css",
"video.js": "/mrstatic/js/video.6c889dac.chunk.js",
"video.js.map": "/mrstatic/js/video.6c889dac.chunk.js.map",
"mrstatic/css/42.5632ead7.chunk.css": "/mrstatic/css/42.5632ead7.chunk.css",
"mrstatic/js/42.8ff26be5.chunk.js": "/mrstatic/js/42.8ff26be5.chunk.js",
"mrstatic/js/42.8ff26be5.chunk.js.map": "/mrstatic/js/42.8ff26be5.chunk.js.map",
"mrstatic/js/43.88208669.chunk.js": "/mrstatic/js/43.88208669.chunk.js",
"mrstatic/js/43.88208669.chunk.js.map": "/mrstatic/js/43.88208669.chunk.js.map",
"mrstatic/css/44.3d1ba5aa.chunk.css": "/mrstatic/css/44.3d1ba5aa.chunk.css",
"mrstatic/js/44.78ef3f2a.chunk.js": "/mrstatic/js/44.78ef3f2a.chunk.js",
"mrstatic/js/44.78ef3f2a.chunk.js.map": "/mrstatic/js/44.78ef3f2a.chunk.js.map",
"mrstatic/css/45.6b450e29.chunk.css": "/mrstatic/css/45.6b450e29.chunk.css",
"mrstatic/js/45.c97a0c2b.chunk.js": "/mrstatic/js/45.c97a0c2b.chunk.js",
"mrstatic/js/45.c97a0c2b.chunk.js.map": "/mrstatic/js/45.c97a0c2b.chunk.js.map",
"mrstatic/js/46.bf9b86ea.chunk.js": "/mrstatic/js/46.bf9b86ea.chunk.js",
"mrstatic/js/46.bf9b86ea.chunk.js.map": "/mrstatic/js/46.bf9b86ea.chunk.js.map",
"mrstatic/css/47.0a40f258.chunk.css": "/mrstatic/css/47.0a40f258.chunk.css",
"mrstatic/js/47.237b187c.chunk.js": "/mrstatic/js/47.237b187c.chunk.js",
"mrstatic/js/47.237b187c.chunk.js.map": "/mrstatic/js/47.237b187c.chunk.js.map",
"mrstatic/css/48.44620a41.chunk.css": "/mrstatic/css/48.44620a41.chunk.css",
"mrstatic/js/48.4224fb12.chunk.js": "/mrstatic/js/48.4224fb12.chunk.js",
"mrstatic/js/48.4224fb12.chunk.js.map": "/mrstatic/js/48.4224fb12.chunk.js.map",
"mrstatic/css/49.21f39c00.chunk.css": "/mrstatic/css/49.21f39c00.chunk.css",
"mrstatic/js/49.eb15e0dc.chunk.js": "/mrstatic/js/49.eb15e0dc.chunk.js",
"mrstatic/js/49.eb15e0dc.chunk.js.map": "/mrstatic/js/49.eb15e0dc.chunk.js.map",
"mrstatic/css/50.07af17e7.chunk.css": "/mrstatic/css/50.07af17e7.chunk.css",
"mrstatic/js/50.86b6dfe2.chunk.js": "/mrstatic/js/50.86b6dfe2.chunk.js",
"mrstatic/js/50.86b6dfe2.chunk.js.map": "/mrstatic/js/50.86b6dfe2.chunk.js.map",
"mrstatic/css/51.a756c762.chunk.css": "/mrstatic/css/51.a756c762.chunk.css",
"mrstatic/js/51.e4c07120.chunk.js": "/mrstatic/js/51.e4c07120.chunk.js",
"mrstatic/js/51.e4c07120.chunk.js.map": "/mrstatic/js/51.e4c07120.chunk.js.map",
"mrstatic/css/52.f025d450.chunk.css": "/mrstatic/css/52.f025d450.chunk.css",
"mrstatic/js/52.6f2237be.chunk.js": "/mrstatic/js/52.6f2237be.chunk.js",
"mrstatic/js/52.6f2237be.chunk.js.map": "/mrstatic/js/52.6f2237be.chunk.js.map",
"mrstatic/css/53.1620736f.chunk.css": "/mrstatic/css/53.1620736f.chunk.css",
"mrstatic/js/53.92ccb5cd.chunk.js": "/mrstatic/js/53.92ccb5cd.chunk.js",
"mrstatic/js/53.92ccb5cd.chunk.js.map": "/mrstatic/js/53.92ccb5cd.chunk.js.map",
"mrstatic/css/54.c783b09f.chunk.css": "/mrstatic/css/54.c783b09f.chunk.css",
"mrstatic/js/54.a4c3f2e0.chunk.js": "/mrstatic/js/54.a4c3f2e0.chunk.js",
"mrstatic/js/54.a4c3f2e0.chunk.js.map": "/mrstatic/js/54.a4c3f2e0.chunk.js.map",
"mrstatic/css/55.42968ec0.chunk.css": "/mrstatic/css/55.42968ec0.chunk.css",
"mrstatic/js/55.4f9f4ba0.chunk.js": "/mrstatic/js/55.4f9f4ba0.chunk.js",
"mrstatic/js/55.4f9f4ba0.chunk.js.map": "/mrstatic/js/55.4f9f4ba0.chunk.js.map",
"index.html": "/index.html",
"mrstatic/css/1.781074ea.chunk.css.map": "/mrstatic/css/1.781074ea.chunk.css.map",
"mrstatic/css/2.bf839917.chunk.css.map": "/mrstatic/css/2.bf839917.chunk.css.map",
"mrstatic/css/3.b22f3911.chunk.css.map": "/mrstatic/css/3.b22f3911.chunk.css.map",
"mrstatic/css/42.2c78a65e.chunk.css.map": "/mrstatic/css/42.2c78a65e.chunk.css.map",
"mrstatic/css/44.a156a0a0.chunk.css.map": "/mrstatic/css/44.a156a0a0.chunk.css.map",
"mrstatic/css/45.bff100af.chunk.css.map": "/mrstatic/css/45.bff100af.chunk.css.map",
"mrstatic/css/47.820320a6.chunk.css.map": "/mrstatic/css/47.820320a6.chunk.css.map",
"mrstatic/css/48.35e22f8c.chunk.css.map": "/mrstatic/css/48.35e22f8c.chunk.css.map",
"mrstatic/css/49.befec011.chunk.css.map": "/mrstatic/css/49.befec011.chunk.css.map",
"mrstatic/css/50.b02d1de6.chunk.css.map": "/mrstatic/css/50.b02d1de6.chunk.css.map",
"mrstatic/css/51.d1a52318.chunk.css.map": "/mrstatic/css/51.d1a52318.chunk.css.map",
"mrstatic/css/Activity.6260646a.chunk.css.map": "/mrstatic/css/Activity.6260646a.chunk.css.map",
"mrstatic/css/BargainMiddlePage.eb686c74.chunk.css.map": "/mrstatic/css/BargainMiddlePage.eb686c74.chunk.css.map",
"mrstatic/css/Classify.fb4bedde.chunk.css.map": "/mrstatic/css/Classify.fb4bedde.chunk.css.map",
"mrstatic/css/Country.2d34330b.chunk.css.map": "/mrstatic/css/Country.2d34330b.chunk.css.map",
"mrstatic/css/CourseList.afc8902e.chunk.css.map": "/mrstatic/css/CourseList.afc8902e.chunk.css.map",
"mrstatic/css/DrawDocument.aeb3f822.chunk.css.map": "/mrstatic/css/DrawDocument.aeb3f822.chunk.css.map",
"mrstatic/css/Examination.7bb0622b.chunk.css.map": "/mrstatic/css/Examination.7bb0622b.chunk.css.map",
"mrstatic/css/Invite.f0f99418.chunk.css.map": "/mrstatic/css/Invite.f0f99418.chunk.css.map",
"mrstatic/css/Order.8c058a7a.chunk.css.map": "/mrstatic/css/Order.8c058a7a.chunk.css.map",
"mrstatic/css/PayOrder.7eb7d317.chunk.css.map": "/mrstatic/css/PayOrder.7eb7d317.chunk.css.map",
"mrstatic/css/Preferential.12a8297c.chunk.css.map": "/mrstatic/css/Preferential.12a8297c.chunk.css.map",
"mrstatic/css/SearchResult.cdf852c1.chunk.css.map": "/mrstatic/css/SearchResult.cdf852c1.chunk.css.map",
"mrstatic/css/ShareCourse.8046fb41.chunk.css.map": "/mrstatic/css/ShareCourse.8046fb41.chunk.css.map",
"mrstatic/css/ShopCart.92ab48a3.chunk.css.map": "/mrstatic/css/ShopCart.92ab48a3.chunk.css.map",
"mrstatic/css/aist-share.40873df0.chunk.css.map": "/mrstatic/css/aist-share.40873df0.chunk.css.map",
"mrstatic/css/blessing-getPrize.5a935f68.chunk.css.map": "/mrstatic/css/blessing-getPrize.5a935f68.chunk.css.map",
"mrstatic/css/blessing-preheat.07827c59.chunk.css.map": "/mrstatic/css/blessing-preheat.07827c59.chunk.css.map",
"mrstatic/css/blessing-rank.91e559d5.chunk.css.map": "/mrstatic/css/blessing-rank.91e559d5.chunk.css.map",
"mrstatic/css/coupons.466858c7.chunk.css.map": "/mrstatic/css/coupons.466858c7.chunk.css.map",
"mrstatic/css/deposit-order.5ea077aa.chunk.css.map": "/mrstatic/css/deposit-order.5ea077aa.chunk.css.map",
"mrstatic/css/deposit-pay-order.09ce6fd5.chunk.css.map": "/mrstatic/css/deposit-pay-order.09ce6fd5.chunk.css.map",
"mrstatic/css/detail.57479076.chunk.css.map": "/mrstatic/css/detail.57479076.chunk.css.map",
"mrstatic/css/main.bd7bbf45.chunk.css.map": "/mrstatic/css/main.bd7bbf45.chunk.css.map",
"mrstatic/css/myorders.179a42fc.chunk.css.map": "/mrstatic/css/myorders.179a42fc.chunk.css.map",
"mrstatic/css/newyear-2019-landing.6ea5fa63.chunk.css.map": "/mrstatic/css/newyear-2019-landing.6ea5fa63.chunk.css.map",
"mrstatic/css/newyear-yearIndex.2c89a30a.chunk.css.map": "/mrstatic/css/newyear-yearIndex.2c89a30a.chunk.css.map",
"mrstatic/css/prize-winner-list.3eee90af.chunk.css.map": "/mrstatic/css/prize-winner-list.3eee90af.chunk.css.map",
"mrstatic/css/purchased.bb758677.chunk.css.map": "/mrstatic/css/purchased.bb758677.chunk.css.map",
"mrstatic/css/python-class.f5f0c94e.chunk.css.map": "/mrstatic/css/python-class.f5f0c94e.chunk.css.map",
"mrstatic/css/search.5716d9b3.chunk.css.map": "/mrstatic/css/search.5716d9b3.chunk.css.map",
"mrstatic/css/shareposter.76774ba4.chunk.css.map": "/mrstatic/css/shareposter.76774ba4.chunk.css.map",
"mrstatic/css/study.bf6b9b43.chunk.css.map": "/mrstatic/css/study.bf6b9b43.chunk.css.map",
"mrstatic/css/system-notices.fd23e5fc.chunk.css.map": "/mrstatic/css/system-notices.fd23e5fc.chunk.css.map",
"mrstatic/css/togroup.f08bc5f3.chunk.css.map": "/mrstatic/css/togroup.f08bc5f3.chunk.css.map",
"mrstatic/css/video.1c1131c9.chunk.css.map": "/mrstatic/css/video.1c1131c9.chunk.css.map",
"mrstatic/css/1.71900497.chunk.css.map": "/mrstatic/css/1.71900497.chunk.css.map",
"mrstatic/css/2.fd1b61f1.chunk.css.map": "/mrstatic/css/2.fd1b61f1.chunk.css.map",
"mrstatic/css/3.66642611.chunk.css.map": "/mrstatic/css/3.66642611.chunk.css.map",
"mrstatic/css/42.5632ead7.chunk.css.map": "/mrstatic/css/42.5632ead7.chunk.css.map",
"mrstatic/css/44.3d1ba5aa.chunk.css.map": "/mrstatic/css/44.3d1ba5aa.chunk.css.map",
"mrstatic/css/45.6b450e29.chunk.css.map": "/mrstatic/css/45.6b450e29.chunk.css.map",
"mrstatic/css/47.0a40f258.chunk.css.map": "/mrstatic/css/47.0a40f258.chunk.css.map",
"mrstatic/css/48.44620a41.chunk.css.map": "/mrstatic/css/48.44620a41.chunk.css.map",
"mrstatic/css/49.21f39c00.chunk.css.map": "/mrstatic/css/49.21f39c00.chunk.css.map",
"mrstatic/css/50.07af17e7.chunk.css.map": "/mrstatic/css/50.07af17e7.chunk.css.map",
"mrstatic/css/51.a756c762.chunk.css.map": "/mrstatic/css/51.a756c762.chunk.css.map",
"mrstatic/css/52.f025d450.chunk.css.map": "/mrstatic/css/52.f025d450.chunk.css.map",
"mrstatic/css/53.1620736f.chunk.css.map": "/mrstatic/css/53.1620736f.chunk.css.map",
"mrstatic/css/54.c783b09f.chunk.css.map": "/mrstatic/css/54.c783b09f.chunk.css.map",
"mrstatic/css/55.42968ec0.chunk.css.map": "/mrstatic/css/55.42968ec0.chunk.css.map",
"mrstatic/css/Activity.fe3f3793.chunk.css.map": "/mrstatic/css/Activity.fe3f3793.chunk.css.map",
"mrstatic/css/BargainMiddlePage.98ff5f85.chunk.css.map": "/mrstatic/css/BargainMiddlePage.98ff5f85.chunk.css.map",
"mrstatic/css/Classify.4393f5d0.chunk.css.map": "/mrstatic/css/Classify.4393f5d0.chunk.css.map",
"mrstatic/css/Country.67334f4b.chunk.css.map": "/mrstatic/css/Country.67334f4b.chunk.css.map",
"mrstatic/css/CourseList.12a61ca3.chunk.css.map": "/mrstatic/css/CourseList.12a61ca3.chunk.css.map",
"mrstatic/css/DrawDocument.58508f31.chunk.css.map": "/mrstatic/css/DrawDocument.58508f31.chunk.css.map",
"mrstatic/css/Examination.02475a25.chunk.css.map": "/mrstatic/css/Examination.02475a25.chunk.css.map",
"mrstatic/css/Invite.87c792ef.chunk.css.map": "/mrstatic/css/Invite.87c792ef.chunk.css.map",
"mrstatic/css/Order.0ab178ef.chunk.css.map": "/mrstatic/css/Order.0ab178ef.chunk.css.map",
"mrstatic/css/PayOrder.4a91788c.chunk.css.map": "/mrstatic/css/PayOrder.4a91788c.chunk.css.map",
"mrstatic/css/Preferential.fd9b7b0b.chunk.css.map": "/mrstatic/css/Preferential.fd9b7b0b.chunk.css.map",
"mrstatic/css/SearchResult.b7ad8ad7.chunk.css.map": "/mrstatic/css/SearchResult.b7ad8ad7.chunk.css.map",
"mrstatic/css/ShareCourse.c571c49e.chunk.css.map": "/mrstatic/css/ShareCourse.c571c49e.chunk.css.map",
"mrstatic/css/ShopCart.f39ca42e.chunk.css.map": "/mrstatic/css/ShopCart.f39ca42e.chunk.css.map",
"mrstatic/css/aist-share.7510d5bb.chunk.css.map": "/mrstatic/css/aist-share.7510d5bb.chunk.css.map",
"mrstatic/css/blessing-getPrize.5b618764.chunk.css.map": "/mrstatic/css/blessing-getPrize.5b618764.chunk.css.map",
"mrstatic/css/blessing-preheat.e8b5cd61.chunk.css.map": "/mrstatic/css/blessing-preheat.e8b5cd61.chunk.css.map",
"mrstatic/css/blessing-rank.4f55b203.chunk.css.map": "/mrstatic/css/blessing-rank.4f55b203.chunk.css.map",
"mrstatic/css/coupons.940f5632.chunk.css.map": "/mrstatic/css/coupons.940f5632.chunk.css.map",
"mrstatic/css/deposit-order.0cb67b20.chunk.css.map": "/mrstatic/css/deposit-order.0cb67b20.chunk.css.map",
"mrstatic/css/deposit-pay-order.fe0a9d86.chunk.css.map": "/mrstatic/css/deposit-pay-order.fe0a9d86.chunk.css.map",
"mrstatic/css/detail.38a8b899.chunk.css.map": "/mrstatic/css/detail.38a8b899.chunk.css.map",
"mrstatic/css/main.a386cfb6.chunk.css.map": "/mrstatic/css/main.a386cfb6.chunk.css.map",
"mrstatic/css/myorders.6e68e44c.chunk.css.map": "/mrstatic/css/myorders.6e68e44c.chunk.css.map",
"mrstatic/css/newyear-2019-landing.974ec2e3.chunk.css.map": "/mrstatic/css/newyear-2019-landing.974ec2e3.chunk.css.map",
"mrstatic/css/newyear-yearIndex.47108654.chunk.css.map": "/mrstatic/css/newyear-yearIndex.47108654.chunk.css.map",
"mrstatic/css/prize-winner-list.0f4a4332.chunk.css.map": "/mrstatic/css/prize-winner-list.0f4a4332.chunk.css.map",
"mrstatic/css/purchased.28c23daa.chunk.css.map": "/mrstatic/css/purchased.28c23daa.chunk.css.map",
"mrstatic/css/python-class.ba9a2030.chunk.css.map": "/mrstatic/css/python-class.ba9a2030.chunk.css.map",
"mrstatic/css/search.85280180.chunk.css.map": "/mrstatic/css/search.85280180.chunk.css.map",
"mrstatic/css/shareposter.4618854a.chunk.css.map": "/mrstatic/css/shareposter.4618854a.chunk.css.map",
"mrstatic/css/study.72465fcb.chunk.css.map": "/mrstatic/css/study.72465fcb.chunk.css.map",
"mrstatic/css/system-notices.0a75b211.chunk.css.map": "/mrstatic/css/system-notices.0a75b211.chunk.css.map",
"mrstatic/css/togroup.acc61e40.chunk.css.map": "/mrstatic/css/togroup.acc61e40.chunk.css.map",
"mrstatic/css/video.8f752b2b.chunk.css.map": "/mrstatic/css/video.8f752b2b.chunk.css.map",
"mrstatic/media/index.scss": "/mrstatic/media/redb_sp_bj@2x.6902434f.png",
"mrstatic/media/iconfont.css": "/mrstatic/media/iconfont.e0655d4d.woff",
"mrstatic/media/kanjia_cg_icon.png": "/mrstatic/media/kanjia_cg_icon.81a489ac.png",
"mrstatic/media/video.scss": "/mrstatic/media/progress-share-bg.80011994.png",
"precache-manifest.0f0720c31d8e92a4b165c6f098a1b6f1.js": "/precache-manifest.0f0720c31d8e92a4b165c6f098a1b6f1.js",
"precache-manifest.ad68e7bc932a1975e677804a8e6f7f83.js": "/precache-manifest.ad68e7bc932a1975e677804a8e6f7f83.js",
"service-worker.js": "/service-worker.js"
}
\ No newline at end of file
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="shortcut icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no,user-scalable=no"/><meta name="theme-color" content="#000000"/><link rel="manifest" href="/manifest.json"/><title>七月在线 - 国内领先的人工智能教育平台</title><link href="/mrstatic/css/42.2c78a65e.chunk.css" rel="stylesheet"><link href="/mrstatic/css/main.bd7bbf45.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script src="/api.js"></script><script>!function(d){function e(e){for(var r,t,a=e[0],n=e[1],o=e[2],c=0,f=[];c<a.length;c++)t=a[c],l[t]&&f.push(l[t][0]),l[t]=0;for(r in n)Object.prototype.hasOwnProperty.call(n,r)&&(d[r]=n[r]);for(p&&p(e);f.length;)f.shift()();return s.push.apply(s,o||[]),i()}function i(){for(var e,r=0;r<s.length;r++){for(var t=s[r],a=!0,n=1;n<t.length;n++){var o=t[n];0!==l[o]&&(a=!1)}a&&(s.splice(r--,1),e=b(b.s=t[0]))}return e}var t={},u={35:0},l={35:0},s=[];function b(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return d[e].call(r.exports,r,r.exports,b),r.l=!0,r.exports}b.e=function(s){var e=[];u[s]?e.push(u[s]):0!==u[s]&&{1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:1,9:1,10:1,11:1,13:1,15:1,16:1,17:1,18:1,19:1,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:1,29:1,30:1,31:1,32:1,33:1,34:1,36:1,37:1,38:1,39:1,40:1,41:1,44:1,45:1,47:1,48:1,49:1,50:1,51:1}[s]&&e.push(u[s]=new Promise(function(e,a){for(var r="mrstatic/css/"+({4:"Activity",5:"BargainMiddlePage",6:"Classify",7:"Country",8:"CourseList",9:"DrawDocument",10:"Examination",11:"Invite",12:"MyEdit",13:"Order",14:"Orderinfo",15:"PayOrder",16:"Preferential",17:"SearchResult",18:"ShareCourse",19:"ShopCart",20:"aist-share",21:"blessing-getPrize",22:"blessing-preheat",23:"blessing-rank",24:"coupons",25:"deposit-order",26:"deposit-pay-order",27:"detail",29:"myorders",30:"newyear-2019-landing",31:"newyear-yearIndex",32:"prize-winner-list",33:"purchased",34:"python-class",36:"search",37:"shareposter",38:"study",39:"system-notices",40:"togroup",41:"video"}[s]||s)+"."+{0:"31d6cfe0",1:"781074ea",2:"bf839917",3:"b22f3911",4:"6260646a",5:"eb686c74",6:"fb4bedde",7:"2d34330b",8:"afc8902e",9:"aeb3f822",10:"7bb0622b",11:"f0f99418",12:"31d6cfe0",13:"8c058a7a",14:"31d6cfe0",15:"7eb7d317",16:"12a8297c",17:"cdf852c1",18:"8046fb41",19:"92ab48a3",20:"40873df0",21:"5a935f68",22:"07827c59",23:"91e559d5",24:"466858c7",25:"5ea077aa",26:"09ce6fd5",27:"57479076",29:"179a42fc",30:"6ea5fa63",31:"2c89a30a",32:"3eee90af",33:"bb758677",34:"f5f0c94e",36:"5716d9b3",37:"76774ba4",38:"bf6b9b43",39:"fd23e5fc",40:"f08bc5f3",41:"1c1131c9",43:"31d6cfe0",44:"a156a0a0",45:"bff100af",46:"31d6cfe0",47:"820320a6",48:"35e22f8c",49:"befec011",50:"b02d1de6",51:"d1a52318"}[s]+".chunk.css",n=b.p+r,t=document.getElementsByTagName("link"),o=0;o<t.length;o++){var c=(d=t[o]).getAttribute("data-href")||d.getAttribute("href");if("stylesheet"===d.rel&&(c===r||c===n))return e()}var f=document.getElementsByTagName("style");for(o=0;o<f.length;o++){var d;if((c=(d=f[o]).getAttribute("data-href"))===r||c===n)return e()}var i=document.createElement("link");i.rel="stylesheet",i.type="text/css",i.onload=e,i.onerror=function(e){var r=e&&e.target&&e.target.src||n,t=new Error("Loading CSS chunk "+s+" failed.\n("+r+")");t.request=r,delete u[s],i.parentNode.removeChild(i),a(t)},i.href=n,document.getElementsByTagName("head")[0].appendChild(i)}).then(function(){u[s]=0}));var t=l[s];if(0!==t)if(t)e.push(t[2]);else{var r=new Promise(function(e,r){t=l[s]=[e,r]});e.push(t[2]=r);var a,o=document.createElement("script");o.charset="utf-8",o.timeout=120,b.nc&&o.setAttribute("nonce",b.nc),o.src=b.p+"mrstatic/js/"+({4:"Activity",5:"BargainMiddlePage",6:"Classify",7:"Country",8:"CourseList",9:"DrawDocument",10:"Examination",11:"Invite",12:"MyEdit",13:"Order",14:"Orderinfo",15:"PayOrder",16:"Preferential",17:"SearchResult",18:"ShareCourse",19:"ShopCart",20:"aist-share",21:"blessing-getPrize",22:"blessing-preheat",23:"blessing-rank",24:"coupons",25:"deposit-order",26:"deposit-pay-order",27:"detail",29:"myorders",30:"newyear-2019-landing",31:"newyear-yearIndex",32:"prize-winner-list",33:"purchased",34:"python-class",36:"search",37:"shareposter",38:"study",39:"system-notices",40:"togroup",41:"video"}[s]||s)+"."+{0:"a1f55c4b",1:"b4abac31",2:"27491ad8",3:"62654a95",4:"f0617e39",5:"bed360e8",6:"0e91e119",7:"47f208ff",8:"b7d73fce",9:"1b596f70",10:"add8ef1c",11:"a00c7d48",12:"f6e22ddf",13:"5f149b42",14:"7ccf8ccf",15:"1dd01042",16:"22e27dc8",17:"c8fb947b",18:"1fe4fddd",19:"9ed4e19b",20:"c957378f",21:"14f9e513",22:"4d9744f0",23:"2843e544",24:"cb2c21f6",25:"2cf5b678",26:"37c046cc",27:"5776614d",29:"b7a60cb5",30:"81a40085",31:"34cdb1f5",32:"4782a879",33:"c87dc236",34:"b0f513fb",36:"66e5089b",37:"1f81bd03",38:"d0a40fbd",39:"6bf87843",40:"3413e977",41:"a40b0688",43:"f063ef63",44:"cac199e4",45:"53be32a6",46:"88c6b419",47:"da31c5dc",48:"6ffec0fd",49:"09eded1d",50:"755d8188",51:"8b00b453"}[s]+".chunk.js",a=function(e){o.onerror=o.onload=null,clearTimeout(c);var r=l[s];if(0!==r){if(r){var t=e&&("load"===e.type?"missing":e.type),a=e&&e.target&&e.target.src,n=new Error("Loading chunk "+s+" failed.\n("+t+": "+a+")");n.type=t,n.request=a,r[1](n)}l[s]=void 0}};var c=setTimeout(function(){a({type:"timeout",target:o})},12e4);o.onerror=o.onload=a,document.head.appendChild(o)}return Promise.all(e)},b.m=d,b.c=t,b.d=function(e,r,t){b.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},b.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.t=function(r,e){if(1&e&&(r=b(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(b.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var a in r)b.d(t,a,function(e){return r[e]}.bind(null,a));return t},b.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return b.d(r,"a",r),r},b.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},b.p="/",b.oe=function(e){throw console.error(e),e};var r=window.webpackJsonp=window.webpackJsonp||[],a=r.push.bind(r);r.push=e,r=r.slice();for(var n=0;n<r.length;n++)e(r[n]);var p=a;i()}([])</script><script src="/mrstatic/js/42.27fde055.chunk.js"></script><script src="/mrstatic/js/main.0206f215.chunk.js"></script></body></html>
\ No newline at end of file
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="shortcut icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no,user-scalable=no"/><meta name="theme-color" content="#000000"/><link rel="manifest" href="/manifest.json"/><title>七月在线 - 国内领先的人工智能教育平台</title><link href="/mrstatic/css/42.5632ead7.chunk.css" rel="stylesheet"><link href="/mrstatic/css/main.a386cfb6.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script src="/api.js"></script><script>!function(i){function e(e){for(var r,t,a=e[0],n=e[1],o=e[2],c=0,f=[];c<a.length;c++)t=a[c],l[t]&&f.push(l[t][0]),l[t]=0;for(r in n)Object.prototype.hasOwnProperty.call(n,r)&&(i[r]=n[r]);for(p&&p(e);f.length;)f.shift()();return d.push.apply(d,o||[]),s()}function s(){for(var e,r=0;r<d.length;r++){for(var t=d[r],a=!0,n=1;n<t.length;n++){var o=t[n];0!==l[o]&&(a=!1)}a&&(d.splice(r--,1),e=b(b.s=t[0]))}return e}var t={},u={35:0},l={35:0},d=[];function b(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return i[e].call(r.exports,r,r.exports,b),r.l=!0,r.exports}b.e=function(d){var e=[];u[d]?e.push(u[d]):0!==u[d]&&{1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:1,9:1,10:1,11:1,13:1,15:1,16:1,17:1,18:1,19:1,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:1,29:1,30:1,31:1,32:1,33:1,34:1,36:1,37:1,38:1,39:1,40:1,41:1,44:1,45:1,47:1,48:1,49:1,50:1,51:1,52:1,53:1,54:1,55:1}[d]&&e.push(u[d]=new Promise(function(e,a){for(var r="mrstatic/css/"+({4:"Activity",5:"BargainMiddlePage",6:"Classify",7:"Country",8:"CourseList",9:"DrawDocument",10:"Examination",11:"Invite",12:"MyEdit",13:"Order",14:"Orderinfo",15:"PayOrder",16:"Preferential",17:"SearchResult",18:"ShareCourse",19:"ShopCart",20:"aist-share",21:"blessing-getPrize",22:"blessing-preheat",23:"blessing-rank",24:"coupons",25:"deposit-order",26:"deposit-pay-order",27:"detail",29:"myorders",30:"newyear-2019-landing",31:"newyear-yearIndex",32:"prize-winner-list",33:"purchased",34:"python-class",36:"search",37:"shareposter",38:"study",39:"system-notices",40:"togroup",41:"video"}[d]||d)+"."+{0:"31d6cfe0",1:"71900497",2:"fd1b61f1",3:"66642611",4:"fe3f3793",5:"98ff5f85",6:"4393f5d0",7:"67334f4b",8:"12a61ca3",9:"58508f31",10:"02475a25",11:"87c792ef",12:"31d6cfe0",13:"0ab178ef",14:"31d6cfe0",15:"4a91788c",16:"fd9b7b0b",17:"b7ad8ad7",18:"c571c49e",19:"f39ca42e",20:"7510d5bb",21:"5b618764",22:"e8b5cd61",23:"4f55b203",24:"940f5632",25:"0cb67b20",26:"fe0a9d86",27:"38a8b899",29:"6e68e44c",30:"974ec2e3",31:"47108654",32:"0f4a4332",33:"28c23daa",34:"ba9a2030",36:"85280180",37:"4618854a",38:"72465fcb",39:"0a75b211",40:"acc61e40",41:"8f752b2b",43:"31d6cfe0",44:"3d1ba5aa",45:"6b450e29",46:"31d6cfe0",47:"0a40f258",48:"44620a41",49:"21f39c00",50:"07af17e7",51:"a756c762",52:"f025d450",53:"1620736f",54:"c783b09f",55:"42968ec0"}[d]+".chunk.css",n=b.p+r,t=document.getElementsByTagName("link"),o=0;o<t.length;o++){var c=(i=t[o]).getAttribute("data-href")||i.getAttribute("href");if("stylesheet"===i.rel&&(c===r||c===n))return e()}var f=document.getElementsByTagName("style");for(o=0;o<f.length;o++){var i;if((c=(i=f[o]).getAttribute("data-href"))===r||c===n)return e()}var s=document.createElement("link");s.rel="stylesheet",s.type="text/css",s.onload=e,s.onerror=function(e){var r=e&&e.target&&e.target.src||n,t=new Error("Loading CSS chunk "+d+" failed.\n("+r+")");t.request=r,delete u[d],s.parentNode.removeChild(s),a(t)},s.href=n,document.getElementsByTagName("head")[0].appendChild(s)}).then(function(){u[d]=0}));var t=l[d];if(0!==t)if(t)e.push(t[2]);else{var r=new Promise(function(e,r){t=l[d]=[e,r]});e.push(t[2]=r);var a,o=document.createElement("script");o.charset="utf-8",o.timeout=120,b.nc&&o.setAttribute("nonce",b.nc),o.src=b.p+"mrstatic/js/"+({4:"Activity",5:"BargainMiddlePage",6:"Classify",7:"Country",8:"CourseList",9:"DrawDocument",10:"Examination",11:"Invite",12:"MyEdit",13:"Order",14:"Orderinfo",15:"PayOrder",16:"Preferential",17:"SearchResult",18:"ShareCourse",19:"ShopCart",20:"aist-share",21:"blessing-getPrize",22:"blessing-preheat",23:"blessing-rank",24:"coupons",25:"deposit-order",26:"deposit-pay-order",27:"detail",29:"myorders",30:"newyear-2019-landing",31:"newyear-yearIndex",32:"prize-winner-list",33:"purchased",34:"python-class",36:"search",37:"shareposter",38:"study",39:"system-notices",40:"togroup",41:"video"}[d]||d)+"."+{0:"2ac9c6a4",1:"691272b3",2:"7c2c0b10",3:"851c1e57",4:"e9998c5c",5:"f4caf5ff",6:"4a1902b4",7:"41179434",8:"a9f16b2f",9:"5cefdf13",10:"a4b5e834",11:"29c4302b",12:"9976afe0",13:"31936e9e",14:"bca91e5b",15:"7e5d05bd",16:"2af6a01f",17:"2943f928",18:"bbe4dc78",19:"13344d3e",20:"6d896179",21:"58841e1d",22:"62939ce4",23:"39f6aa70",24:"ca90eade",25:"8b41e43b",26:"9e575a82",27:"ca6d1fc7",29:"a558d07f",30:"f3a81a29",31:"98adede9",32:"a7bf3cca",33:"3d2cba24",34:"7363eb37",36:"2a0fcef1",37:"e970e87f",38:"28644de8",39:"fed1f62f",40:"efcf4162",41:"6c889dac",43:"88208669",44:"78ef3f2a",45:"c97a0c2b",46:"bf9b86ea",47:"237b187c",48:"4224fb12",49:"eb15e0dc",50:"86b6dfe2",51:"e4c07120",52:"6f2237be",53:"92ccb5cd",54:"a4c3f2e0",55:"4f9f4ba0"}[d]+".chunk.js",a=function(e){o.onerror=o.onload=null,clearTimeout(c);var r=l[d];if(0!==r){if(r){var t=e&&("load"===e.type?"missing":e.type),a=e&&e.target&&e.target.src,n=new Error("Loading chunk "+d+" failed.\n("+t+": "+a+")");n.type=t,n.request=a,r[1](n)}l[d]=void 0}};var c=setTimeout(function(){a({type:"timeout",target:o})},12e4);o.onerror=o.onload=a,document.head.appendChild(o)}return Promise.all(e)},b.m=i,b.c=t,b.d=function(e,r,t){b.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},b.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.t=function(r,e){if(1&e&&(r=b(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(b.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var a in r)b.d(t,a,function(e){return r[e]}.bind(null,a));return t},b.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return b.d(r,"a",r),r},b.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},b.p="/",b.oe=function(e){throw console.error(e),e};var r=window.webpackJsonp=window.webpackJsonp||[],a=r.push.bind(r);r.push=e,r=r.slice();for(var n=0;n<r.length;n++)e(r[n]);var p=a;s()}([])</script><script src="/mrstatic/js/42.8ff26be5.chunk.js"></script><script src="/mrstatic/js/main.6fef321c.chunk.js"></script></body></html>
\ No newline at end of file
self.__precacheManifest = [
{
"revision": "ae4f00315fcf14ee99a6",
"url": "/mrstatic/css/myorders.179a42fc.chunk.css"
"revision": "58846db29433cdad2222",
"url": "/mrstatic/css/newyear-yearIndex.47108654.chunk.css"
},
{
"revision": "5ac28956aad68d9ce6c5",
"url": "/mrstatic/js/0.a1f55c4b.chunk.js"
"revision": "2604fac9fcd38af9b7ca",
"url": "/mrstatic/js/0.2ac9c6a4.chunk.js"
},
{
"revision": "19808b26d22ce20cc3a3",
"url": "/mrstatic/js/1.b4abac31.chunk.js"
"revision": "9ec88b0cbb03ab12ce1e",
"url": "/mrstatic/js/1.691272b3.chunk.js"
},
{
"revision": "8edaf2ff2566ed17e2dd22cf4f8ad7ae",
"url": "/mrstatic/media/redb_chai_bj@2x.8edaf2ff.png"
},
{
"revision": "b9bac6551ac851de68e7",
"url": "/mrstatic/js/2.27491ad8.chunk.js"
"revision": "6b5a8a69aa2f63123b6c",
"url": "/mrstatic/js/2.7c2c0b10.chunk.js"
},
{
"revision": "6902434f8f18a23319d57d0ac8aaea8c",
"url": "/mrstatic/media/redb_sp_bj@2x.6902434f.png"
},
{
"revision": "e931be6a1480f5c61317",
"url": "/mrstatic/js/3.62654a95.chunk.js"
"revision": "55120d047b50187e6d7e",
"url": "/mrstatic/js/3.851c1e57.chunk.js"
},
{
"revision": "c79abf5cb7ae8a82009cf68fe44d1078",
"url": "/mrstatic/media/redb_money_bj@2x.c79abf5c.png"
},
{
"revision": "5c575947ee922558f989",
"url": "/mrstatic/js/Activity.f0617e39.chunk.js"
"revision": "b4002cffab16a6d8a645",
"url": "/mrstatic/js/Activity.e9998c5c.chunk.js"
},
{
"revision": "79139f6aad350256e151f9f73c226348",
"url": "/mrstatic/media/hb_bj.79139f6a.png"
},
{
"revision": "bc53356246096f7dbc89",
"url": "/mrstatic/js/BargainMiddlePage.bed360e8.chunk.js"
"revision": "6fdb6b346a419d3ea7c6",
"url": "/mrstatic/js/BargainMiddlePage.f4caf5ff.chunk.js"
},
{
"revision": "80011994e30adf599e5f47fcc81bc06d",
"url": "/mrstatic/media/progress-share-bg.80011994.png"
},
{
"revision": "1ef925c3e1f9bc21fd53",
"url": "/mrstatic/js/Classify.0e91e119.chunk.js"
"revision": "c1610166cfeaf97d81d0",
"url": "/mrstatic/js/Classify.4a1902b4.chunk.js"
},
{
"revision": "d76ebce726bdf3459fa14e96d84c5b9a",
"url": "/mrstatic/media/formal-banner.d76ebce7.png"
},
{
"revision": "f6b15a425a212a09cfb1",
"url": "/mrstatic/js/Country.47f208ff.chunk.js"
"revision": "39614d3f992cfc788f86",
"url": "/mrstatic/js/Country.41179434.chunk.js"
},
{
"revision": "9ab091267ae7c83bd30d0f5ad018a8c9",
"url": "/mrstatic/media/dalibao_bj.9ab09126.png"
},
{
"revision": "9a4542803e16993596a3",
"url": "/mrstatic/js/CourseList.b7d73fce.chunk.js"
"revision": "c06f6864bd6e70147244",
"url": "/mrstatic/js/CourseList.a9f16b2f.chunk.js"
},
{
"revision": "81a489ac63f2f2df5ab412e0782bd54c",
"url": "/mrstatic/media/kanjia_cg_icon.81a489ac.png"
},
{
"revision": "9753972d46b228ca8be8",
"url": "/mrstatic/js/DrawDocument.1b596f70.chunk.js"
"revision": "397d86c21e7355825c8f",
"url": "/mrstatic/js/DrawDocument.5cefdf13.chunk.js"
},
{
"revision": "b9b072e1116fd1830cc8f425dc163a6b",
"url": "/mrstatic/media/iconfont.b9b072e1.svg"
},
{
"revision": "760d98aaebaa2817d11e",
"url": "/mrstatic/js/Examination.add8ef1c.chunk.js"
"revision": "d9517b44620940b73cc4",
"url": "/mrstatic/js/Examination.a4b5e834.chunk.js"
},
{
"revision": "258b4b114d3d9be3018cd113b2470a13",
"url": "/mrstatic/media/iconfont.258b4b11.ttf"
},
{
"revision": "84b45c21cb2151eacf4c",
"url": "/mrstatic/js/Invite.a00c7d48.chunk.js"
"revision": "c9cac48f316db647cb16",
"url": "/mrstatic/js/Invite.29c4302b.chunk.js"
},
{
"revision": "212cd1441ce11503bf07",
"url": "/mrstatic/js/MyEdit.f6e22ddf.chunk.js"
"revision": "bb62e7d65ea08137a87b",
"url": "/mrstatic/js/MyEdit.9976afe0.chunk.js"
},
{
"revision": "7aa984cefad739ea18edb76c541aa1fd",
"url": "/mrstatic/media/iconfont.7aa984ce.eot"
},
{
"revision": "ca7ff79f88e4cd1848ff",
"url": "/mrstatic/js/Order.5f149b42.chunk.js"
"revision": "08a96852be437f32ea76",
"url": "/mrstatic/js/Order.31936e9e.chunk.js"
},
{
"revision": "a3b8bf3b307da37e4567",
"url": "/mrstatic/js/Orderinfo.7ccf8ccf.chunk.js"
"revision": "0dd793cd59e8d8d9af63",
"url": "/mrstatic/js/Orderinfo.bca91e5b.chunk.js"
},
{
"revision": "e0655d4da66dce391e6b5227b400e037",
"url": "/mrstatic/media/iconfont.e0655d4d.woff"
},
{
"revision": "108d7677dcb8439676bc",
"url": "/mrstatic/js/PayOrder.1dd01042.chunk.js"
"revision": "0232fb989f97df7017bf",
"url": "/mrstatic/js/PayOrder.7e5d05bd.chunk.js"
},
{
"revision": "9743a48fbc853c79bbaa",
"url": "/mrstatic/js/51.8b00b453.chunk.js"
"revision": "459650a0da68cdc443e4",
"url": "/mrstatic/js/55.4f9f4ba0.chunk.js"
},
{
"revision": "bf2516c3c8cb6449908f",
"url": "/mrstatic/js/Preferential.22e27dc8.chunk.js"
"revision": "c755315d38dab251c9e7",
"url": "/mrstatic/js/Preferential.2af6a01f.chunk.js"
},
{
"revision": "8e38a2fdcb7be270ebe4",
"url": "/mrstatic/js/50.755d8188.chunk.js"
"revision": "2fa3ed006503d612313b",
"url": "/mrstatic/js/54.a4c3f2e0.chunk.js"
},
{
"revision": "50edaaff187e659756f6",
"url": "/mrstatic/js/SearchResult.c8fb947b.chunk.js"
"revision": "1affd2f7336647f845cd",
"url": "/mrstatic/js/SearchResult.2943f928.chunk.js"
},
{
"revision": "b84833e7cd427979080f",
"url": "/mrstatic/js/49.09eded1d.chunk.js"
"revision": "a65364975e2450f53b60",
"url": "/mrstatic/js/53.92ccb5cd.chunk.js"
},
{
"revision": "82b8b9a7a090928a2e27",
"url": "/mrstatic/js/ShareCourse.1fe4fddd.chunk.js"
"revision": "549387a9260fbbe55587",
"url": "/mrstatic/js/ShareCourse.bbe4dc78.chunk.js"
},
{
"revision": "0f6c1ec3a8805633d79f",
"url": "/mrstatic/js/48.6ffec0fd.chunk.js"
"revision": "32033130dd9049a8731f",
"url": "/mrstatic/js/52.6f2237be.chunk.js"
},
{
"revision": "93c536b8dde962b29cc0",
"url": "/mrstatic/js/ShopCart.9ed4e19b.chunk.js"
"revision": "a6b1d57427e266466529",
"url": "/mrstatic/js/ShopCart.13344d3e.chunk.js"
},
{
"revision": "f5875080e40d865f571c",
"url": "/mrstatic/js/47.da31c5dc.chunk.js"
"revision": "d6000d77e901958ac1d3",
"url": "/mrstatic/js/51.e4c07120.chunk.js"
},
{
"revision": "5704a928a51da54c11d2",
"url": "/mrstatic/js/aist-share.c957378f.chunk.js"
"revision": "fd50a619133b385b195a",
"url": "/mrstatic/js/aist-share.6d896179.chunk.js"
},
{
"revision": "05f39c591725239dc595",
"url": "/mrstatic/js/46.88c6b419.chunk.js"
"revision": "16e4b6d8dbf51ee31708",
"url": "/mrstatic/js/50.86b6dfe2.chunk.js"
},
{
"revision": "87c48ea7e5cef90ba9ac",
"url": "/mrstatic/js/blessing-getPrize.14f9e513.chunk.js"
"revision": "f3aa2d2ba8b5dae0c719",
"url": "/mrstatic/js/blessing-getPrize.58841e1d.chunk.js"
},
{
"revision": "5b13d3b4dd829d1f3301",
"url": "/mrstatic/js/45.53be32a6.chunk.js"
"revision": "82101934809821ba66f1",
"url": "/mrstatic/js/49.eb15e0dc.chunk.js"
},
{
"revision": "b7c743fdcb6fdcc316da",
"url": "/mrstatic/js/blessing-preheat.4d9744f0.chunk.js"
"revision": "292988f35654951ba64f",
"url": "/mrstatic/js/blessing-preheat.62939ce4.chunk.js"
},
{
"revision": "e87fe86e8efece310c40",
"url": "/mrstatic/js/44.cac199e4.chunk.js"
"revision": "fa09203d7ec80cec3949",
"url": "/mrstatic/js/48.4224fb12.chunk.js"
},
{
"revision": "64a8907a60029a00b8c0",
"url": "/mrstatic/js/blessing-rank.2843e544.chunk.js"
"revision": "ba3367870cf16dbc23ff",
"url": "/mrstatic/js/blessing-rank.39f6aa70.chunk.js"
},
{
"revision": "7687f01b3425e629376e",
"url": "/mrstatic/js/43.f063ef63.chunk.js"
"revision": "381d1e9cd4e2fb764e47",
"url": "/mrstatic/js/47.237b187c.chunk.js"
},
{
"revision": "fc76b59b0e449de07602",
"url": "/mrstatic/js/coupons.cb2c21f6.chunk.js"
"revision": "16bb6b6494116b9489ab",
"url": "/mrstatic/js/coupons.ca90eade.chunk.js"
},
{
"revision": "c4e7d9794c06490cfb5b",
"url": "/mrstatic/js/42.27fde055.chunk.js"
"revision": "254daffaa26e8d49b5c2",
"url": "/mrstatic/js/46.bf9b86ea.chunk.js"
},
{
"revision": "1fdf8551979d4754e16a",
"url": "/mrstatic/js/deposit-order.2cf5b678.chunk.js"
"revision": "46994a7589c56402fa2b",
"url": "/mrstatic/js/deposit-order.8b41e43b.chunk.js"
},
{
"revision": "a885ef3747f6e5002b83",
"url": "/mrstatic/js/video.a40b0688.chunk.js"
"revision": "50367e2cd8dba7ddb887",
"url": "/mrstatic/js/45.c97a0c2b.chunk.js"
},
{
"revision": "aa447e46639a82cdd85b",
"url": "/mrstatic/js/deposit-pay-order.37c046cc.chunk.js"
"revision": "56dc4e7c4ef6bb23019e",
"url": "/mrstatic/js/deposit-pay-order.9e575a82.chunk.js"
},
{
"revision": "4fef2dbc8462987de228",
"url": "/mrstatic/js/togroup.3413e977.chunk.js"
"revision": "83f51ddbbd3960228e81",
"url": "/mrstatic/js/44.78ef3f2a.chunk.js"
},
{
"revision": "55ca883039122d2bf2ab",
"url": "/mrstatic/js/detail.5776614d.chunk.js"
"revision": "bd3816e2b240fe84b34e",
"url": "/mrstatic/js/detail.ca6d1fc7.chunk.js"
},
{
"revision": "5d316b539dc015d2bc85",
"url": "/mrstatic/js/system-notices.6bf87843.chunk.js"
"revision": "623a832027a3ca236459",
"url": "/mrstatic/js/43.88208669.chunk.js"
},
{
"revision": "2b4abb596aff8822e26b",
"url": "/mrstatic/js/main.0206f215.chunk.js"
"revision": "530b65f758c183d6ff2d",
"url": "/mrstatic/js/main.6fef321c.chunk.js"
},
{
"revision": "55f86e36acc379ba30d3",
"url": "/mrstatic/js/study.d0a40fbd.chunk.js"
"revision": "771f165937ca5ef74078",
"url": "/mrstatic/js/42.8ff26be5.chunk.js"
},
{
"revision": "ae4f00315fcf14ee99a6",
"url": "/mrstatic/js/myorders.b7a60cb5.chunk.js"
"revision": "595771097497ec4bf418",
"url": "/mrstatic/js/myorders.a558d07f.chunk.js"
},
{
"revision": "f0a936d654fd11fbce72",
"url": "/mrstatic/js/shareposter.1f81bd03.chunk.js"
"revision": "0670d82d210df59300d6",
"url": "/mrstatic/js/video.6c889dac.chunk.js"
},
{
"revision": "1302cc41c2a8aba84af7",
"url": "/mrstatic/js/newyear-2019-landing.81a40085.chunk.js"
"revision": "f81dc30901f886a1adc2",
"url": "/mrstatic/js/newyear-2019-landing.f3a81a29.chunk.js"
},
{
"revision": "e50895c1c1c54f587488",
"url": "/mrstatic/js/search.66e5089b.chunk.js"
"revision": "0a5a6280a7c03517532d",
"url": "/mrstatic/js/togroup.efcf4162.chunk.js"
},
{
"revision": "a98289ae451085edb1fc",
"url": "/mrstatic/js/newyear-yearIndex.34cdb1f5.chunk.js"
"revision": "58846db29433cdad2222",
"url": "/mrstatic/js/newyear-yearIndex.98adede9.chunk.js"
},
{
"revision": "36a717ce6b1b2d368ca1",
"url": "/mrstatic/js/runtime~main.886b50aa.js"
"revision": "87403273b518594e215e",
"url": "/mrstatic/js/system-notices.fed1f62f.chunk.js"
},
{
"revision": "0b688ba26b3b51beb8ba",
"url": "/mrstatic/js/prize-winner-list.4782a879.chunk.js"
"revision": "8cbaae50c7905db5b140",
"url": "/mrstatic/js/prize-winner-list.a7bf3cca.chunk.js"
},
{
"revision": "5ef00499a50146e7caa5",
"url": "/mrstatic/js/python-class.b0f513fb.chunk.js"
"revision": "c9ca46b863d62f56019c",
"url": "/mrstatic/js/study.28644de8.chunk.js"
},
{
"revision": "5f07801db4a3e605d9f6",
"url": "/mrstatic/js/purchased.c87dc236.chunk.js"
"revision": "54aca0e59b7acbf639e7",
"url": "/mrstatic/js/purchased.3d2cba24.chunk.js"
},
{
"revision": "f5875080e40d865f571c",
"url": "/mrstatic/css/47.820320a6.chunk.css"
"revision": "b84e37509736e5cecb1f",
"url": "/mrstatic/js/shareposter.e970e87f.chunk.js"
},
{
"revision": "5ef00499a50146e7caa5",
"url": "/mrstatic/css/python-class.f5f0c94e.chunk.css"
"revision": "6d199a40146419460dec",
"url": "/mrstatic/js/python-class.7363eb37.chunk.js"
},
{
"revision": "a885ef3747f6e5002b83",
"url": "/mrstatic/css/video.1c1131c9.chunk.css"
"revision": "7d9916ca4679b43ce628",
"url": "/mrstatic/js/runtime~main.ef361010.js"
},
{
"revision": "e50895c1c1c54f587488",
"url": "/mrstatic/css/search.5716d9b3.chunk.css"
"revision": "54b1d6afa9e4e610368e",
"url": "/mrstatic/js/search.2a0fcef1.chunk.js"
},
{
"revision": "4fef2dbc8462987de228",
"url": "/mrstatic/css/togroup.f08bc5f3.chunk.css"
"revision": "16e4b6d8dbf51ee31708",
"url": "/mrstatic/css/50.07af17e7.chunk.css"
},
{
"revision": "f0a936d654fd11fbce72",
"url": "/mrstatic/css/shareposter.76774ba4.chunk.css"
"revision": "54b1d6afa9e4e610368e",
"url": "/mrstatic/css/search.85280180.chunk.css"
},
{
"revision": "5d316b539dc015d2bc85",
"url": "/mrstatic/css/system-notices.fd23e5fc.chunk.css"
"revision": "b84e37509736e5cecb1f",
"url": "/mrstatic/css/shareposter.4618854a.chunk.css"
},
{
"revision": "55f86e36acc379ba30d3",
"url": "/mrstatic/css/study.bf6b9b43.chunk.css"
"revision": "c9ca46b863d62f56019c",
"url": "/mrstatic/css/study.72465fcb.chunk.css"
},
{
"revision": "b84833e7cd427979080f",
"url": "/mrstatic/css/49.befec011.chunk.css"
"revision": "0670d82d210df59300d6",
"url": "/mrstatic/css/video.8f752b2b.chunk.css"
},
{
"revision": "19808b26d22ce20cc3a3",
"url": "/mrstatic/css/1.781074ea.chunk.css"
"revision": "87403273b518594e215e",
"url": "/mrstatic/css/system-notices.0a75b211.chunk.css"
},
{
"revision": "2b4abb596aff8822e26b",
"url": "/mrstatic/css/main.bd7bbf45.chunk.css"
"revision": "0a5a6280a7c03517532d",
"url": "/mrstatic/css/togroup.acc61e40.chunk.css"
},
{
"revision": "a98289ae451085edb1fc",
"url": "/mrstatic/css/newyear-yearIndex.2c89a30a.chunk.css"
"revision": "fd50a619133b385b195a",
"url": "/mrstatic/css/aist-share.7510d5bb.chunk.css"
},
{
"revision": "55ca883039122d2bf2ab",
"url": "/mrstatic/css/detail.57479076.chunk.css"
"revision": "8cbaae50c7905db5b140",
"url": "/mrstatic/css/prize-winner-list.0f4a4332.chunk.css"
},
{
"revision": "0b688ba26b3b51beb8ba",
"url": "/mrstatic/css/prize-winner-list.3eee90af.chunk.css"
"revision": "54aca0e59b7acbf639e7",
"url": "/mrstatic/css/purchased.28c23daa.chunk.css"
},
{
"revision": "aa447e46639a82cdd85b",
"url": "/mrstatic/css/deposit-pay-order.09ce6fd5.chunk.css"
"revision": "6d199a40146419460dec",
"url": "/mrstatic/css/python-class.ba9a2030.chunk.css"
},
{
"revision": "c4e7d9794c06490cfb5b",
"url": "/mrstatic/css/42.2c78a65e.chunk.css"
"revision": "a6b1d57427e266466529",
"url": "/mrstatic/css/ShopCart.f39ca42e.chunk.css"
},
{
"revision": "1fdf8551979d4754e16a",
"url": "/mrstatic/css/deposit-order.5ea077aa.chunk.css"
"revision": "771f165937ca5ef74078",
"url": "/mrstatic/css/42.5632ead7.chunk.css"
},
{
"revision": "fc76b59b0e449de07602",
"url": "/mrstatic/css/coupons.466858c7.chunk.css"
"revision": "530b65f758c183d6ff2d",
"url": "/mrstatic/css/main.a386cfb6.chunk.css"
},
{
"revision": "e87fe86e8efece310c40",
"url": "/mrstatic/css/44.a156a0a0.chunk.css"
"revision": "83f51ddbbd3960228e81",
"url": "/mrstatic/css/44.3d1ba5aa.chunk.css"
},
{
"revision": "64a8907a60029a00b8c0",
"url": "/mrstatic/css/blessing-rank.91e559d5.chunk.css"
"revision": "bd3816e2b240fe84b34e",
"url": "/mrstatic/css/detail.38a8b899.chunk.css"
},
{
"revision": "5b13d3b4dd829d1f3301",
"url": "/mrstatic/css/45.bff100af.chunk.css"
"revision": "50367e2cd8dba7ddb887",
"url": "/mrstatic/css/45.6b450e29.chunk.css"
},
{
"revision": "b7c743fdcb6fdcc316da",
"url": "/mrstatic/css/blessing-preheat.07827c59.chunk.css"
"revision": "56dc4e7c4ef6bb23019e",
"url": "/mrstatic/css/deposit-pay-order.fe0a9d86.chunk.css"
},
{
"revision": "87c48ea7e5cef90ba9ac",
"url": "/mrstatic/css/blessing-getPrize.5a935f68.chunk.css"
"revision": "46994a7589c56402fa2b",
"url": "/mrstatic/css/deposit-order.0cb67b20.chunk.css"
},
{
"revision": "5f07801db4a3e605d9f6",
"url": "/mrstatic/css/purchased.bb758677.chunk.css"
"revision": "381d1e9cd4e2fb764e47",
"url": "/mrstatic/css/47.0a40f258.chunk.css"
},
{
"revision": "5704a928a51da54c11d2",
"url": "/mrstatic/css/aist-share.40873df0.chunk.css"
"revision": "16bb6b6494116b9489ab",
"url": "/mrstatic/css/coupons.940f5632.chunk.css"
},
{
"revision": "0f6c1ec3a8805633d79f",
"url": "/mrstatic/css/48.35e22f8c.chunk.css"
"revision": "fa09203d7ec80cec3949",
"url": "/mrstatic/css/48.44620a41.chunk.css"
},
{
"revision": "93c536b8dde962b29cc0",
"url": "/mrstatic/css/ShopCart.92ab48a3.chunk.css"
"revision": "ba3367870cf16dbc23ff",
"url": "/mrstatic/css/blessing-rank.4f55b203.chunk.css"
},
{
"revision": "1302cc41c2a8aba84af7",
"url": "/mrstatic/css/newyear-2019-landing.6ea5fa63.chunk.css"
"revision": "82101934809821ba66f1",
"url": "/mrstatic/css/49.21f39c00.chunk.css"
},
{
"revision": "82b8b9a7a090928a2e27",
"url": "/mrstatic/css/ShareCourse.8046fb41.chunk.css"
"revision": "292988f35654951ba64f",
"url": "/mrstatic/css/blessing-preheat.e8b5cd61.chunk.css"
},
{
"revision": "8e38a2fdcb7be270ebe4",
"url": "/mrstatic/css/50.b02d1de6.chunk.css"
"revision": "f81dc30901f886a1adc2",
"url": "/mrstatic/css/newyear-2019-landing.974ec2e3.chunk.css"
},
{
"revision": "50edaaff187e659756f6",
"url": "/mrstatic/css/SearchResult.cdf852c1.chunk.css"
"revision": "f3aa2d2ba8b5dae0c719",
"url": "/mrstatic/css/blessing-getPrize.5b618764.chunk.css"
},
{
"revision": "9743a48fbc853c79bbaa",
"url": "/mrstatic/css/51.d1a52318.chunk.css"
"revision": "d6000d77e901958ac1d3",
"url": "/mrstatic/css/51.a756c762.chunk.css"
},
{
"revision": "bf2516c3c8cb6449908f",
"url": "/mrstatic/css/Preferential.12a8297c.chunk.css"
"revision": "b4002cffab16a6d8a645",
"url": "/mrstatic/css/Activity.fe3f3793.chunk.css"
},
{
"revision": "108d7677dcb8439676bc",
"url": "/mrstatic/css/PayOrder.7eb7d317.chunk.css"
"revision": "32033130dd9049a8731f",
"url": "/mrstatic/css/52.f025d450.chunk.css"
},
{
"revision": "ca7ff79f88e4cd1848ff",
"url": "/mrstatic/css/Order.8c058a7a.chunk.css"
"revision": "595771097497ec4bf418",
"url": "/mrstatic/css/myorders.6e68e44c.chunk.css"
},
{
"revision": "84b45c21cb2151eacf4c",
"url": "/mrstatic/css/Invite.f0f99418.chunk.css"
"revision": "a65364975e2450f53b60",
"url": "/mrstatic/css/53.1620736f.chunk.css"
},
{
"revision": "760d98aaebaa2817d11e",
"url": "/mrstatic/css/Examination.7bb0622b.chunk.css"
"revision": "549387a9260fbbe55587",
"url": "/mrstatic/css/ShareCourse.c571c49e.chunk.css"
},
{
"revision": "9753972d46b228ca8be8",
"url": "/mrstatic/css/DrawDocument.aeb3f822.chunk.css"
"revision": "2fa3ed006503d612313b",
"url": "/mrstatic/css/54.c783b09f.chunk.css"
},
{
"revision": "9a4542803e16993596a3",
"url": "/mrstatic/css/CourseList.afc8902e.chunk.css"
"revision": "1affd2f7336647f845cd",
"url": "/mrstatic/css/SearchResult.b7ad8ad7.chunk.css"
},
{
"revision": "f6b15a425a212a09cfb1",
"url": "/mrstatic/css/Country.2d34330b.chunk.css"
"revision": "459650a0da68cdc443e4",
"url": "/mrstatic/css/55.42968ec0.chunk.css"
},
{
"revision": "1ef925c3e1f9bc21fd53",
"url": "/mrstatic/css/Classify.fb4bedde.chunk.css"
"revision": "c755315d38dab251c9e7",
"url": "/mrstatic/css/Preferential.fd9b7b0b.chunk.css"
},
{
"revision": "bc53356246096f7dbc89",
"url": "/mrstatic/css/BargainMiddlePage.eb686c74.chunk.css"
"revision": "0232fb989f97df7017bf",
"url": "/mrstatic/css/PayOrder.4a91788c.chunk.css"
},
{
"revision": "5c575947ee922558f989",
"url": "/mrstatic/css/Activity.6260646a.chunk.css"
"revision": "08a96852be437f32ea76",
"url": "/mrstatic/css/Order.0ab178ef.chunk.css"
},
{
"revision": "e931be6a1480f5c61317",
"url": "/mrstatic/css/3.b22f3911.chunk.css"
"revision": "c9cac48f316db647cb16",
"url": "/mrstatic/css/Invite.87c792ef.chunk.css"
},
{
"revision": "b9bac6551ac851de68e7",
"url": "/mrstatic/css/2.bf839917.chunk.css"
"revision": "d9517b44620940b73cc4",
"url": "/mrstatic/css/Examination.02475a25.chunk.css"
},
{
"revision": "809d0c4c07e5fec5854506d47096a585",
"revision": "397d86c21e7355825c8f",
"url": "/mrstatic/css/DrawDocument.58508f31.chunk.css"
},
{
"revision": "c06f6864bd6e70147244",
"url": "/mrstatic/css/CourseList.12a61ca3.chunk.css"
},
{
"revision": "39614d3f992cfc788f86",
"url": "/mrstatic/css/Country.67334f4b.chunk.css"
},
{
"revision": "c1610166cfeaf97d81d0",
"url": "/mrstatic/css/Classify.4393f5d0.chunk.css"
},
{
"revision": "6fdb6b346a419d3ea7c6",
"url": "/mrstatic/css/BargainMiddlePage.98ff5f85.chunk.css"
},
{
"revision": "55120d047b50187e6d7e",
"url": "/mrstatic/css/3.66642611.chunk.css"
},
{
"revision": "6b5a8a69aa2f63123b6c",
"url": "/mrstatic/css/2.fd1b61f1.chunk.css"
},
{
"revision": "9ec88b0cbb03ab12ce1e",
"url": "/mrstatic/css/1.71900497.chunk.css"
},
{
"revision": "ed308843b318ee44986d964c62e95293",
"url": "/index.html"
}
];
\ No newline at end of file
......@@ -14,7 +14,7 @@
importScripts("https://storage.googleapis.com/workbox-cdn/releases/3.6.3/workbox-sw.js");
importScripts(
"/precache-manifest.0f0720c31d8e92a4b165c6f098a1b6f1.js"
"/precache-manifest.ad68e7bc932a1975e677804a8e6f7f83.js"
);
workbox.clientsClaim();
......
......@@ -281,7 +281,8 @@ module.exports = function(webpackEnv) {
'react-native': 'react-native-web',
'@': path.resolve(__dirname, '../src'),
'@common': path.resolve(__dirname, '../src/common'),
'@components': path.resolve(__dirname, '../src/components')
'@components': path.resolve(__dirname, '../src/components'),
'@assets': path.resolve(__dirname, '../src/assets'),
},
plugins: [
// Adds support for installing with Plug'n'Play, leading to faster installs and adding
......
......@@ -1027,9 +1027,9 @@
}
},
"@babel/runtime": {
"version": "7.7.2",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.2.tgz",
"integrity": "sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==",
"version": "7.7.7",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.7.tgz",
"integrity": "sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA==",
"requires": {
"regenerator-runtime": "^0.13.2"
},
......@@ -3099,9 +3099,9 @@
"integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
},
"base64-js": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
"integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw=="
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
"integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
},
"base64id": {
"version": "1.0.0",
......
......@@ -5,6 +5,7 @@
"dependencies": {
"@babel/core": "7.2.2",
"@babel/plugin-proposal-decorators": "^7.4.4",
"@babel/runtime": "^7.7.7",
"@loadable/component": "^5.10.1",
"@svgr/webpack": "4.1.0",
"antd-mobile": "^2.3.1",
......@@ -41,7 +42,9 @@
"jest-pnp-resolver": "1.0.2",
"jest-resolve": "23.6.0",
"jest-watch-typeahead": "^0.2.1",
"js-base64": "^2.5.1",
"js-cookie": "^2.2.0",
"json-stringify-safe": "^5.0.1",
"less": "^3.9.0",
"less-loader": "^4.1.0",
"lodash": "^4.17.15",
......
......@@ -9,6 +9,7 @@ import { compose } from 'redux'
import { getParam, http, browser } from "@/utils"
import { Toast } from "antd-mobile"
import { addDays } from 'date-fns'
import stringify from 'json-stringify-safe'
//拦截ajax请求,返回mock数据
......@@ -69,7 +70,7 @@ class App extends Component {
this.getUser()
}
if (location.pathname === '/passport') {
window.localStorage.setItem('binding_redirect', JSON.stringify(this.previousLocation))
window.localStorage.setItem('binding_redirect', stringify(this.previousLocation))
}
const {pathname, state} = location
if (pathname.startsWith('/passport')) {
......@@ -306,10 +307,10 @@ class App extends Component {
var src = ''
// 知乎投放
if (utm_term && utm_source && utm_medium && utm_campaign && utm_content) {
src = 'https://webchat.7moor.com/javascripts/7moorInit.js?accessId=e2ca4f90-2d04-11ea-84c3-43908ae47640&autoShow=true&language=ZHCN'
src = 'https://webchat.7moor.com/javascripts/7moorInit.js?accessId=e2ca4f90-2d04-11ea-84c3-43908ae47640&autoShow=false&language=ZHCN'
} else {
// m端
src = 'https://webchat.7moor.com/javascripts/7moorInit.js?accessId=fbcf9aa0-2d03-11ea-84c3-43908ae47640&autoShow=true&language=ZHCN'
src = 'https://webchat.7moor.com/javascripts/7moorInit.js?accessId=fbcf9aa0-2d03-11ea-84c3-43908ae47640&autoShow=false&language=ZHCN'
}
var script = document.createElement('script')
......@@ -324,7 +325,12 @@ class App extends Component {
render() {
return <Routes/>
return <>
<Routes/>
<Link className={'year19-index'} to="/year/yearindex">
<img src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/gift-package.png" alt=""/>
</Link>
</>
}
}
......
......@@ -512,3 +512,18 @@ input[type="radio"]:checked:before {
color: #333;
font-size: 15px;
}
.year19-index {
display: block;
width: 58px;
height: 70px;
position: fixed;
top: 50%;
right: 0;
margin-top: -35px;
z-index: 9;
img {
width: 100%;
height: 100%;
}
}
\ No newline at end of file
#assistance {
width: 100%;
background: $white;
position: relative;
padding-bottom: px2rem(55);
-webkit-overflow-scrolling: touch;
text-align: center;
$mt15: 15px;
@function px2rem($px) {
@return #{$px}px;
}
@mixin px2px($prop, $value) {
#{$prop}: #{$value/2}px
}
@mixin page-big($bg, $color, $shadow) {
border-radius: 40px;
border: 1px solid transparent;
outline: none;
text-align: center;
background: $bg;
color: $color;
font-weight: bold;
box-shadow: $shadow;
}
@mixin border-b-1px($color) {
position: relative;
&::after {
display: block;
position: absolute;
left: 0;
bottom: 0;
width: 100%;
border-bottom: 1px solid $color;
content: '';
}
}
.barrage-wrapper {
width: 100%;
height: px2rem(30);
background-color: rgba(0, 0, 0, .5);
position: absolute;
top: 0;
z-index: 99;
overflow: hidden;
.barrage-list {
height: px2rem(30);
li {
height: px2rem(30);
position: relative;
display: flex;
align-items: center;
justify-content: left;
margin: 0 10px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
.person-left {
display: flex;
align-items: center;
line-height: px2rem(30);
margin-right: 5px;
.avatar {
min-width: px2rem(20);
height: px2rem(20);
border-radius: 50%;
margin-right: 5px;
}
.name {
color: $active;
max-width: px2rem(100);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.title {
color: $white;
}
.person-right {
margin-right: 58px;
.time {
@include px2px(font-size, 22);
color: $color_666;
}
}
}
}
}
.bg-image {
position: relative;
width: 100%;
height: 0;
padding-top: 60%;
transform-origin: top;
background-size: cover;
.ranklist-btn {
height: px2rem(30);
line-height: px2rem(30);
padding: 0 10px;
background-color: #2FF8FF;
box-shadow: 0 0 5px 0 rgba(47, 248, 255, .4);
border-radius: 15px 0 0 15px;
position: fixed;
top: 160px;
right: 0;
z-index: 999;
color: #15006A;
@include px2px(font-size, 20);
-webkit-appearance: none;
outline: 0;
border: none;
}
}
.christ-getwrap {
overflow: hidden;
.title {
margin-top: 10px;
margin-left: $mt15;
text-align: left;
@include px2px(font-size, 28);
.active {
color: $active;
}
}
.btn-get-wrap {
margin-top: 15px;
.btn-get {
width: px2rem(300);
height: px2rem(38);
line-height: px2rem(34);
display: block;
margin: 0 auto;
@include px2px(font-size, 32);
@include page-big($active, $white, none);
border-radius: 5px !important;
}
}
.person-tolearn {
margin-top: 10px;
color: $color_333;
font-size: 14px;
}
.person-getwarp {
width: 100%;
margin-top: $mt15;
.person-get {
height: px2rem(30);
line-height: px2rem(30);
background-color: $bg_f4f4f4;
text-align: left;
padding-left: 15px;
color: $color_333;
@include px2px(font-size, 24);
}
.person-null {
height: px2rem(105);
line-height: px2rem(105);
text-align: center;
overflow: hidden;
}
.person-list {
height: px2rem(105);
overflow: hidden;
background-color: $bg_f4f4f4;
li {
height: px2rem(35);
line-height: px2rem(35);
position: relative;
display: flex;
align-items: center;
justify-content: space-between;
@include border-b-1px(#eae7f4);
margin: 0 10px;
.person-left {
display: flex;
align-items: center;
overflow: hidden;
.avatar {
min-width: px2rem(20);
height: px2rem(20);
border-radius: 50%;
margin-right: 5px;
}
.name {
display: inline-block;
max-width: px2rem(150);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.person-right {
.time {
@include px2px(font-size, 22);
color: $color_666;
}
}
}
}
.person-encourage {
color: #FA952F;
@include px2px(font-size, 24);
margin-top: 10px;
}
.btn-morewap {
margin-top: 10px;
.btn-more {
width: px2rem(300);
height: px2rem(38);
line-height: px2rem(34);
display: block;
margin: 0 auto;
@include px2px(font-size, 32);
@include page-big(#3D1AAF, $white, none);
border-radius: 5px !important;
}
}
.more-title {
margin-top: 10px;
margin-bottom: 15px;
color: #FA952F;
@include px2px(font-size, 24);
}
.course-wrap {
padding: 0 10px;
overflow: hidden;
display: flex;
justify-content: space-between;
flex-flow: wrap;
li {
display: inline-block;
width: px2rem(160);
height: px2rem(106);
margin-right: 10px;
margin-bottom: 20px;
}
li:nth-child(2) {
margin-right: 0;
}
li:last-child {
margin-right: 0;
}
}
}
}
.christ-toactive {
width: 100%;
height: px2rem(35);
line-height: px2rem(35);
text-align: center;
color: $white;
@include px2px(font-size, 36);
font-weight: bold;
background-color: #3D1AAF;
position: fixed;
bottom: 0;
}
.module-dialog {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
height: 100%;
font-size: .8rem;
.box-mask {
z-index: 900;
position: fixed;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, .6);
display: flex;
align-items: center;
justify-content: center;
}
}
.box-container {
border-radius: 10px;
background-color: $white;
width: 80%;
position: relative;
padding-bottom: 15px;
.box-content {
.box-title {
@include px2px(font-size, 44);
line-height: px2rem(44);
height: px2rem(44);
margin-top: 10px;
color: $active;
i {
color: #f00;
@include px2px(font-size, 36);
font-style: normal;
}
.text1 {
color: $color_333;
@include px2px(font-size, 36);
}
.icon-right {
@include px2px(font-size, 80);
display: inline-block;
vertical-align: middle;
margin-top: -3px;
}
}
.box-text {
.text1 {
color: $color_333;
@include px2px(font-size, 36);
text-align: center;
margin: 15px auto 20px;
padding: 0 10px;
}
.text2 {
color: $color_333;
@include px2px(font-size, 28);
margin: 0 auto;
text-align: left;
max-width: 260px;
margin-bottom: 5px;
}
.text3 {
color: $active;
@include px2px(font-size, 24);
margin: 0 auto;
text-align: left;
max-width: 260px;
}
}
}
.box-bottom1 {
width: 100%;
img {
width: 50% !important;
}
p {
font-size: 12px;
color: $color_666;
margin-top: -15px;
}
}
.box-bottom {
width: 100%;
display: flex;
align-items: center;
justify-content: center;
.activeallcourse {
padding: 10px 30px;
border-radius: 5px;
min-width: 260px;
border: 1px solid transparent;
background-color: #09f;
color: $white;
font-size: 18px;
}
img {
width: 50% !important;
}
.bottom-item {
height: px2rem(40);
padding: 0 54px;
color: $white;
background-color: $active;
border-radius: 30px;
@include px2px(font-size, 44);
display: flex;
align-items: center;
justify-content: center;
margin-top: 14px;
}
}
.box-close {
position: absolute;
left: 50%;
bottom: -60px;
color: $white;
margin-left: -15px;
.f30 {
font-size: 30px;
}
}
}
.gift-package {
display: block;
width: 58px;
height: 72px;
position: fixed;
right: 0;
top: 50%;
margin-top: -25px;
img {
width: 100%;
height: 100%;
}
}
.iconfont{
font-size: 30px;
}
}
import React, { Component } from 'react'
import { browser, getParam, http } from "@/utils"
import { Toast } from "antd-mobile"
import { withRouter } from 'react-router-dom'
import './assistance.scss'
import { Base64 } from "js-base64"
import { connect } from 'react-redux'
import Swiper from 'swiper'
function showToast(text) {
Toast.info(text, 2, null, false)
}
@connect(({user}) => ({
user
}))
class GiveCourseAssistance extends Component {
scrollContainer = null
cloned = false
animationId = 0
swiper = null
state = {
allCourse: [],
activeName: '',
activeUrl: '',
isAwards: '',
count: '',
assistItems: [],
name: '',
courseImg: '',
code: getParam('magic_word'),
getBtnStatus: '1',
disabled: false,
successOneStatus: false,
errorStatus: false,
activeStatus: false,
friendStatus: false,
posY: 0,
scrollStyle: {
transform: `translateY(${0}px)`,
transition: 'all linear 0ms',
overflow: 'hidden'
},
headItems: []
}
componentDidMount() {
this.giveDetail()
this.assistantScroll()
this.requestHeadItems()
let baseCode = decodeURIComponent(Base64.decode(this.state.code)).split(',')
this.setState({
baseCode: baseCode[0],
getBtnStatus: this.props.user.data.uid == baseCode[0] ? '2' : '1'
})
}
componentWillUpdate(nextProps) {
const {user} = this.props
if (nextProps.user.hasError !== user.hasError) {
this.setState({
getBtnStatus: nextProps.user.data.uid == this.state.baseCode ? '2' : '1'
})
}
}
componentWillUnmount() {
window.cancelAnimationFrame(this.animationId)
this.swiper && this.swiper.destroy()
}
giveDetail = () => {
http.get(`${API["base-api"]}/assistance/detail`)
.then(res => {
const {data, msg, errno} = res.data
if (errno === 200) {
this.setState({
allCourse: data.course_info,
activeName: data.active_info.activity_name,
activeUrl: data.active_info.activity_url,
isAwards: data.is_awards
})
} else {
showToast(msg)
}
})
}
assistantScroll = () => {
http.get(`${API["base-api"]}/assistance/active_detail?code=${getParam('magic_word')}`)
.then(res => {
const {data, msg, errno} = res.data
if (errno === 0) {
this.setState({
count: data.assistant_count,
assistItems: data.assistants,
name: data.invitation_user_nickname,
courseImg: data.course_image_name
}, this.displayScrollArea)
} else {
showToast(msg)
}
})
}
getCourse = () => {
_czc && _czc.push(["_trackEvent", '中间页免费领取课程', '中间页免费领取课程'])
const {history, user} = this.props
if (browser.isWeixin) {
if (user.hasError) {
history.push('/passport')
return
}
this.setState({
disabled: true
})
http.post(`${API["base-api"]}/assistance/assistant`, {
code: this.state.code,
})
.then(res => {
const {errno, msg} = res.data
let success = errno == 200
this.setState({
successOneStatus: success,
errorStatus: !success,
disabled: false
})
})
} else {
history.push('/wxerr')
}
}
toGetDetail = courseId => {
_czc && _czc.push(["_trackEvent", `课程id=${courseId}`, '中间页查看课程详情'])
window.location.href = this.state.activeUrl
}
displayScrollArea = () => {
let {
assistItems: list,
posY
} = this.state
if (list.length < 3) return
if (!this.cloned) {
const cloneNode = this.scrollContainer.firstChild.firstChild.cloneNode(true)
this.scrollContainer.firstChild.appendChild(cloneNode)
this.cloned = true
}
const h = this.scrollContainer.firstChild.offsetHeight / 2
if (Math.abs(posY) >= h) posY = 0
posY -= 0.5
this.setState({
posY,
scrollStyle: {
transform: `translateY(${posY}px)`,
transition: 'all linear 0ms',
overflow: 'hidden'
}
})
this.animationId = window.requestAnimationFrame(this.displayScrollArea)
}
requestHeadItems = () => {
http.get(`${API["base-api"]}/assistance/roll_tip`)
.then(res => {
const {errno, data, msg} = res.data
if (errno === 200) {
this.setState({
headItems: data
}, this.setupHeadItemsSwiper)
} else {
showToast(msg)
}
})
}
setupHeadItemsSwiper = () => {
this.swiper = new Swiper('.barrage-wrapper', {
autoplay: {
delay: 5000
},
direction: 'vertical',
loop: true,
allowTouchMove: false
})
}
render() {
const {
isAwards,
courseImg,
activeName,
name,
getBtnStatus,
disabled,
count,
allCourse,
successOneStatus,
errorStatus,
activeStatus,
friendStatus,
assistItems,
scrollStyle,
headItems
} = this.state
const {history} = this.props
return (
<div id='assistance'>
{<div className="barrage-wrapper">
<ul className="barrage-list swiper-wrapper">
{
headItems.map((item, index) => {
return (
<li key={index} className={'swiper-slide'}>
<div className="person-left">
<img className="avatar" src={item.head_img} alt=""/>
<span className="name">{item["nickname"]}</span>
</div>
<div className="title">{item["word"]}</div>
</li>
)
})
}
</ul>
</div>}
<div className="bg-image" style={{backgroundImage: `url(${courseImg})`}}>
{
isAwards == 1 && <button className="ranklist-btn" type="button" onClick={() => {
_czc && _czc.push(["_trackEvent", '中间页大奖排行榜', '中间页面大奖排行榜'])
history.push(`/active/givecourse?activename=${activeName}`)
}}>大奖排行榜>></button>
}
</div>
<div className="christ-getwrap">
{
getBtnStatus === '1' &&
<div className="title">
<span className="active">@{name}</span> 赠送您一门课
</div>
}
<div className="btn-get-wrap">
{
getBtnStatus === '1'
?
<button type="button" className="btn-get" disabled={disabled} onClick={this.getCourse}>
免费领取
</button>
:
<button type="button" className="btn-get" onClick={() => {
_czc && _czc.push(["_trackEvent", '中间页继续邀请好友', '中间页继续邀请好友'])
this.setState({
friendStatus: true
})
}}>
继续邀请好友
</button>
}
</div>
<p className="person-tolearn">领取的课程可前往七月在线APP或官网学习</p>
<div className="person-getwarp">
<div className="person-get">
已有
<span>{count}</span>
人通过助力领取课程
</div>
{
assistItems.length ?
<div className='scroll-container person-list' ref={el => this.scrollContainer = el}>
<div className="wrapper" style={scrollStyle}>
<ul>
{
assistItems.map(item => {
return (
<li key={item["assistant_uid"]}>
<div className="person-left">
<img className="avatar" src={item["avatar_file"]} alt=""/>
<span className="name">{item.user_name}</span>
</div>
<div className="person-right">
<span className="time">{item["add_time"]}前领取成功</span>
</div>
</li>
)
})
}
</ul>
</div>
</div>
:
<p className="person-null">目前暂无邀请</p>
}
<div className="btn-morewap">
<button type="button" className="btn-more" onClick={() => {
_czc && _czc.push(["_trackEvent", '中间页参与活动领更多课时', '中间页参与活动领更多课时'])
this.setState({activeStatus: true})
}}>参与活动领更多课时
</button>
</div>
<p className="more-title">参与活动可免费领取以下课程</p>
<ul className="course-wrap">
{
allCourse.map((item) => {
return (
<li key={item.course_id} onClick={this.toGetDetail.bind(this, item.course_id)}>
<img src={item.image_name} alt=""/>
</li>
)
})
}
</ul>
</div>
</div>
{
successOneStatus &&
<div className="module-dialog">
<div className="box-mask">
<div className="box-container">
<div className="box-content">
<div className="box-title">
<i className="iconfont icon-chenggong icon-right"/>
领取成功
</div>
<div className="box-text">
<p className="text1">恭喜您获得第一课的免费学习权限</p>
</div>
</div>
<div className="box-bottom">
<button type="button" className="activeallcourse" onClick={() => {
this.setState({activeStatus: true, successOneStatus: false})
}}>进入服务号领取全部课时
</button>
</div>
</div>
</div>
</div>
}
{
errorStatus &&
<div className="module-dialog">
<div className="box-mask">
<div className="box-container">
<div className="box-content">
<div className="box-title" style={{color: `#f00`}}>
领取失败
</div>
<div className="box-text">
<p className="text1">只能免费领取1次,想获得更多课时快去参与活动吧!</p>
</div>
</div>
<div className="box-bottom">
<button type="button" className="activeallcourse" onClick={() => {
this.setState({errorStatus: false, friendStatus: true})
}}>确定
</button>
</div>
</div>
</div>
</div>
}
{
activeStatus &&
<div className="module-dialog">
<div className="box-mask">
<div className="box-container">
<div className="box-content">
<div className="box-title">
<p className="text1">进入服务号回复<i>77</i>免费领取课程</p>
</div>
<div className="box-bottom1">
<img src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/2018christyear/h5/qrcode.jpg" alt=""/>
<p>长按扫码进入服务号</p>
</div>
</div>
<div className="box-close" onClick={() => {
this.setState({activeStatus: false})
}}>
<i className="iconfont iconiconfront-2"/>
</div>
</div>
</div>
</div>
}
{
friendStatus &&
<div className="module-dialog">
<div className="box-mask">
<div className="box-container">
<div className="box-content">
<div className="box-title">
<p className="text1">进入服务号回复<i>77</i>免费领取课程</p>
</div>
<div className="box-bottom1">
<img src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/2018christyear/h5/qrcode.jpg" alt=""/>
<p>长按扫码进入服务号</p>
</div>
</div>
<div className="box-close" onClick={() => {
this.setState({friendStatus: false})
}}>
<i className="iconfont iconiconfront-2"/>
</div>
</div>
</div>
</div>
}
</div>
)
}
}
export default withRouter(GiveCourseAssistance)
#give-courses {
@mixin px2px($name, $px) {
#{$name}: round($px / 2) * 1px;
}
@function px2rem($px) {
@return #{$px}px
}
background: #3d1aaf;
padding-bottom: px2rem(45);
.banner {
width: 100%;
height: 187.5px;
img {
width: 100%;
height: 100%;
}
}
.give-box {
background-color: #1c008c;
box-shadow: 0 0 4px 0 #1c008c;
margin: px2rem(10);
padding: px2rem(10) px2rem(5) 0 px2rem(5);
.give-course {
width: 100%;
height: px2rem(125);
background-color: #fff;
border-radius: 2px;
margin-bottom: px2rem(10);
padding: px2rem(8) px2rem(5);
display: flex;
justify-content: space-between;
.give-course-img {
width: px2rem(150);
height: px2rem(108);
img {
width: 100%;
height: 100%;
}
}
.give-course-mess {
width: px2rem(178);
height: px2rem(108);
margin-left: px2rem(7);
position: relative;
text-align: left;
.course-title {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.course-title a {
color: #353535;
@include px2px(font-size, 26);
}
.course-teacher {
@include px2px(font-size, 24);
color: #666;
margin-top: px2rem(12);
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.course-time {
@include px2px(font-size, 24);
color: #666;
margin-top: px2rem(7);
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.tag {
display: inline-block;
color: #555;
background-color: #f2f2f2;
margin-right: px2rem(4);
padding: px2rem(2) px2rem(4);
}
.toreceive {
width: px2rem(93);
height: px2rem(24);
@include px2px(font-size, 24);
color: #fff;
background-color: #09f;
border-radius: 4px;
line-height: px2rem(24);
text-align: center;
position: absolute;
bottom: 0;
}
}
}
.rule-title {
color: #2ff8ff;
@include px2px(font-size, 32);
text-align: left;
padding-left: px2rem(5);
}
.rule-list {
text-align: left;
color: #fff;
@include px2px(font-size, 24);
padding-left: px2rem(5);
}
.marquee_box {
width: px2rem(355);
height: px2rem(30);
overflow: hidden;
background-color: rgba(0, 0, 0, .5);
margin-left: px2rem(-5);
margin-top: px2rem(15);
.marquee_list {
li {
color: #fff;
height: px2rem(30);
line-height: px2rem(30);
@include px2px(font-size, 24);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-align: center;
img {
width: px2rem(18);
height: px2rem(18);
vertical-align: middle;
border-radius: 50%;
}
span {
color: #0099ff;
display: inline-block;
margin: 0 5px;
}
}
}
.marquee_top {
transition: all .5s;
margin-top: -30px;
}
}
}
.set-prize {
background-color: #FCECB1;
border-radius: px2rem(3);
margin: px2rem(20) px2rem(10) 0 px2rem(10);
padding: px2rem(18) px2rem(15) px2rem(20) px2rem(15);
.set-prize-title {
width: 100%;
text-align: center;
color: #F75E18;
@include px2px(font-size, 28);
img {
width: px2rem(19);
height: px2rem(19);
margin-right: px2rem(10);
vertical-align: sub;
}
}
.set-prize-content {
text-align: left;
color: #6E1517;
@include px2px(font-size, 24);
display: flex;
flex-wrap: wrap;
p {
margin-top: px2rem(12);
}
}
}
.ranking-list {
margin: px2rem(30) px2rem(10) 0 px2rem(10);
.ranking_title {
width: 100%;
text-align: center;
img {
width: px2rem(18);
height: px2rem(20);
vertical-align: text-bottom;
}
span {
color: #fff;
@include px2px(font-size, 28);
display: inline-block;
margin-left: px2rem(10);
}
p {
color: #fee600;
@include px2px(font-size, 24);
margin-top: 10px;
}
}
table {
text-align: center;
margin-top: px2rem(15);
box-shadow: 0 0 5px 0 rgba(0, 0, 0, .3);
width: 100%;
border-radius: 6px 6px 0 0;
overflow: hidden;
thead tr {
background-color: #fadc7f;
height: px2rem(30);
line-height: px2rem(30);
@include px2px(font-size, 26);
color: #ad4700;
}
tbody tr:nth-of-type(even) {
background-color: #fadc7f;
height: px2rem(35);
}
tbody tr:nth-of-type(odd) {
background-color: #ffe794;
height: px2rem(35);
}
tbody tr {
color: #333;
@include px2px(font-size, 24);
}
tbody tr td {
width: 30%;
}
tbody tr td:nth-child(2) {
text-align: left;
padding-left: px2rem(15);
}
tbody tr td:nth-child(2) span {
display: inline-block;
width: 55%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
position: relative;
top: 5px;
margin-left: px2rem(5);
}
tbody tr td:nth-child(1) img {
vertical-align: middle;
width: px2rem(18);
height: px2rem(22);
}
tbody tr td:nth-child(2) img {
width: px2rem(20);
height: px2rem(20);
vertical-align: middle;
border-radius: 50%;
}
tbody .ismylist td {
background-color: #ad4700;
color: #fff;
}
}
.btm {
width: 100%;
height: px2rem(10);
background-color: #ffe794;
border-radius: 0 0 6px 6px;
}
}
.julynotice {
margin: px2rem(60) auto px2rem(30) auto;
color: #FEE600;
@include px2px(font-size, 13);
text-align: center;
}
.code-mbc {
position: fixed;
left: 0;
width: 100%;
top: 0;
bottom: 0;
background-color: rgba(0, 0, 0, .5);
z-index: 9;
text-align: center;
.code-box {
width: 80%;
background-color: #fff;
border-radius: px2rem(10);
text-align: center;
margin: px2rem(200) auto 0 auto;
padding-top: px2rem(15);
.code-title {
color: #333;
@include px2px(font-size, 36);
i {
color: #f00;
@include px2px(font-size, 36);
font-style: normal;
}
}
#qrCodeWpay {
width: px2rem(150);
height: px2rem(150);
margin: px2rem(10) auto 0 auto;
}
.btmmess {
color: #666;
padding-bottom: px2rem(15);
margin-top: px2rem(-5);
}
}
.close {
display: inline-block;
@include px2px(font-size, 60);
color: #fff;
margin-top: px2rem(20);
}
}
}
import React, { Component } from 'react'
import './give-courses.scss'
import { getParam, http } from "@/utils"
import { Toast } from "antd-mobile"
import { Link } from "react-router-dom"
function showToast(text) {
Toast.info(text, 2, null, false)
}
class GiveCourses extends Component {
state = {
banner: '',
courses: [],
rule: '',
awardstext: '',
rankList: {},
isShow: false,
animate: false,
marqueeList: []
}
componentDidMount() {
http.get(`${API["base-api"]}/assistance/detail`)
.then(res => {
const {data, errno, msg} = res.data
if (errno === 200) {
this.setState({
banner: data["active_info"]["m_banner"],
courses: data.course_info,
rule: data["active_info"]["rule"],
awardstext: data["active_info"]["awards_text"].split('\n\n'),
query: data["active_info"]["activity_name"]
})
this.isRouter(data["active_info"]["activity_name"])
} else {
showToast(msg)
}
})
this.getRankList()
this.getMarqueeList()
setInterval(this.showMarquee, 5000)
setInterval(this.getMarqueeList, 60000)
}
getRankList = () => {
http.get(`${API["base-api"]}/assistance/ranking_list/50`)
.then(res => {
const {data, errno, msg} = res.data
if (errno === 200) {
this.setState({
rankList: {
list: data.list,
first: data.list[0],
second: data.list[1],
third: data.list[2],
other: data.list.slice(3, 50),
isMyList: data["nickname"],
myList: data["nickname"] && data
}
})
} else {
showToast(msg)
}
})
}
getMarqueeList = () => {
http.get(`${API["base-api"]}/assistance/roll_tip`)
.then(res => {
const {errno, msg, data} = res.data
if (errno === 200) {
this.setState({
marqueeList: data
})
} else {
showToast(msg)
}
})
}
showMarquee = () => {
this.setState({
animate: true
}, () => {
setTimeout(() => {
const [first, second] = this.state.marqueeList
this.setState({
animate: false,
marqueeList: [second, first]
})
}, 500)
})
}
isRouter = param => {
if (decodeURIComponent(getParam('activename')) != param) {
this.props.history.push('/')
}
}
render() {
const {
banner,
courses,
rule,
awardstext,
rankList,
isShow,
animate,
marqueeList
} = this.state
return (
<div id={'give-courses'}>
<div className="banner">
<img src={banner} alt=""/>
</div>
<div className='give-box'>
{
courses.map(course => {
return (
<div className='give-course' key={course.id}>
<Link className='give-course-img' to={`/detail?id=${course.course_id}`}>
<img src={course.image_name} alt=""/>
</Link>
<ul className="give-course-mess">
<li className='course-title'>
<a href="javascript:">{course.course_title}</a>
</li>
<li className='course-teacher'><span className='tag'>讲师</span>{course["teachers"]}</li>
<li className='course-time'><span className='tag'>开课时间</span>{course["start_time"]}</li>
<li className='toreceive' onClick={() => {
_czc && _czc.push(["_trackEvent", `课程id=${course.course_id}`, '免费领取课程'])
console.log(course.course_id)
this.setState({isShow: true})
}}>免费领取课程
</li>
</ul>
</div>
)
})
}
<p className="rule-title">活动规则</p>
<div className="rule-list" dangerouslySetInnerHTML={{__html: rule}}/>
<div className="marquee_box">
<ul className={`marquee_list ${animate ? 'marquee_top' : ''}`}>
{
marqueeList.length ?
marqueeList.map((item, index) => {
return (
<li key={index}>
<img src={item.head_img} alt=""/>
<span>{item["nickname"]}</span>
{item["word"]}
</li>
)
})
: null
}
</ul>
</div>
</div>
<div className="set-prize">
<p className="set-prize-title">
<img src="//julyedu-cdn.oss-cn-beijing.aliyuncs.com/2018_1111/jpsz_icon.png"
alt=""/>奖品设置
</p>
<div className="set-prize-content">
{
awardstext && awardstext.length && awardstext.map((item, index) => <p key={index}>{item}</p>)
}
</div>
</div>
<div className="ranking-list">
<div className="ranking_title">
<img src="//julyedu-cdn.oss-cn-beijing.aliyuncs.com/2018_1111/jbei_icon.png" alt=""/>
<span>排行榜</span>
<p>数据实时更新 只显示Top50</p>
</div>
<table border="0" cellPadding="0" cellSpacing="0">
<thead>
<tr>
<td>排名</td>
<td>用户</td>
<td>邀请人数</td>
</tr>
</thead>
<tbody>
{
rankList.list && rankList.list.length > 0
?
<tr>
<td><img src="//julyedu-cdn.oss-cn-beijing.aliyuncs.com/2018_1111/jin1_icon.png" alt=""/></td>
<td><img src={rankList.first.head_img} alt=""/><span>{rankList.first.name}</span></td>
<td>{rankList.first.num}</td>
</tr>
: null
}
{
rankList.list && rankList.list.length > 1
?
<tr>
<td><img src="//julyedu-cdn.oss-cn-beijing.aliyuncs.com/2018_1111/yin2_icon.png" alt=""/></td>
<td><img src={rankList.second.head_img} alt=""/><span>{rankList.second.name}</span></td>
<td>{rankList.second.num}</td>
</tr>
: null
}
{
rankList.list && rankList.list.length > 2
?
<tr>
<td><img src="//julyedu-cdn.oss-cn-beijing.aliyuncs.com/2018_1111/tong_icon.png" alt=""/></td>
<td><img src={rankList.third.head_img} alt=""/><span>{rankList.third.name}</span></td>
<td>{rankList.third.num}</td>
</tr>
: null
}
{
rankList.list && rankList.list.length && rankList.list.length > 3 ? rankList.other.map((item, index) => {
return (
<tr key={index}>
<td>{index + 4}</td>
<td><img src={item.head_img} alt=""/><span>{item.name}</span></td>
<td>{item.num}</td>
</tr>
)
})
: null
}
{
rankList.isMyList &&
<tr className="ismylist">
<td>{rankList.myList["ranking"]}</td>
<td><img src={rankList.myList.head_img} alt=""/><span>{rankList.myList["nickname"]}</span></td>
<td>{rankList.myList["inviter_num"]}</td>
</tr>
}
</tbody>
</table>
<p className="btm"/>
</div>
<p className="julynotice">*本活动最终解释权归七月在线所有*</p>
{
isShow &&
<div className="code-mbc">
<div className="code-box">
<p className="code-title">进入服务号回复<i>77</i>免费领取课程</p>
<img id="qrCodeWpay" src="//julyedu-cdn.oss-cn-beijing.aliyuncs.com/2018christyear/h5/qrcode.jpg" alt=""/>
<p className="btmmess">长按扫码进入服务号</p>
</div>
<i className="close iconfont iconiconfront-2" onClick={() => {
this.setState({isShow: false})
}}/>
</div>
}
</div>
)
}
}
export default GiveCourses
import React, { Component } from 'react'
import './share-content.scss'
import Poster from "./poster/poster"
import Prizes from './prizes/prizes'
import {WithFullSize} from '@/HOCs'
class ShareContent extends Component {
state = {
activeIndex: 0,
tabs: ['分享海报', '活动奖品'],
poster: '',
rankingList: []
}
render() {
const {
tabs,
activeIndex,
poster,
rankingList
} = this.state
return (
<div id={'share-content'}>
<ul className="tab">
{
tabs.map((item, index) => {
return (
<li key={index} className={activeIndex === index ? 'active' : ''} onClick={() => {
this.setState({activeIndex: index})
}}>{item}</li>
)
})
}
</ul>
{
activeIndex === 0
? <Poster
poster={poster}
savePoster={poster => {
this.setState({poster})
}}/>
: <Prizes rankingList={rankingList} saveRankingList={rankingList => {this.setState({rankingList})}}/>
}
</div>
)
}
}
export default WithFullSize(ShareContent)
import React, { Component } from 'react'
import QRCode from "qrcode"
import './poster.scss'
import { getParam, http } from "@/utils"
import { Toast } from "antd-mobile"
function showToast(text) {
Toast.info(text, 2, null, false)
}
class Poster extends Component {
state = {
redirectUrl: '',
backgroundUrl: '',
avatar: '',
username: '',
poster: this.props.poster,
}
componentDidMount() {
const {poster} = this.props
if (!poster) {
http.get(`${API["base-api"]}/assistance/active_haibao_info/${getParam('assis_word')}`)
.then(res => {
const {data, errno, msg} = res.data
if (errno === 200) {
this.setState({
avatar: data.head_img,
username: data.user_name,
redirectUrl: data.m_redirect_code,
backgroundUrl: data.background_img_url
}, () => {
this.generatePoster()
})
} else {
showToast(msg)
}
})
}
}
generatePoster = async () => {
let canvas = document.createElement('canvas'),
ctx = canvas.getContext('2d'),
posterWidth = 270,
canvasWidth = 540
const {backgroundUrl, avatar, username, redirectUrl} = this.state
const bg = await this.getImage(backgroundUrl)
canvas.style.width = posterWidth + 'px'
canvas.style.height = posterWidth * bg.height / bg.width + 'px'
canvas.width = canvasWidth
canvas.height = canvasWidth * bg.height / bg.width
ctx.drawImage(bg, 0, 0, canvas.width, canvas.height)
let r = 33
const avatarImage = await this.getImage(avatar)
const ax = 40
const ay = 16
ctx.save()
ctx.beginPath()
ctx.arc(ax + r, ay + r, r, 0, Math.PI * 2)
ctx.clip()
ctx.drawImage(avatarImage, ax, ay, 66, 66)
ctx.restore()
ctx.font = `24px serif`
ctx.fillStyle = '#fff'
ctx.fillText(username, 2 * r + ax + 10, ay + r - 5)
let qrcode = await this.getQRCodeCanvas(redirectUrl, posterWidth)
ctx.drawImage(qrcode, 380, 796, 140, 140)
this.setState({
poster: canvas.toDataURL()
}, () => {
const {savePoster} = this.props
savePoster && savePoster(this.state.poster)
})
}
getImage = url => {
return new Promise(resolve => {
const img = new Image()
img.setAttribute('crossOrigin', 'anonymous')
img.onload = function () {
resolve(this)
}
img.src = url
})
}
getQRCodeCanvas = (text, posterWidth) => {
const canvas = document.createElement('canvas')
let codeWidth = 100, codeHeight = 100,
codeSize = posterWidth * (100 / (window.innerWidth * 0.72))
canvas.style.width = `${codeSize}px`
canvas.style.height = `${codeSize}px`
canvas.width = codeWidth
canvas.height = codeHeight
return QRCode.toCanvas(canvas, text)
}
render() {
const {poster} = this.state
return (
<div id='poster'>
<div className="placard-desc">
长按下方海报,分享给好友~
</div>
<div className="total-container">
<div className="placard-img-container" id='imgWrapper'>
<img src={poster} alt='分享海报'/>
</div>
</div>
</div>
)
}
}
export default Poster
#poster {
width: 100%;
height: 100%;
overflow: hidden;
background-color: #470bc8;
-webkit-overflow-scrolling: touch;
-webkit-touch-callout: none;
.placard-desc {
width: 100%;
color: #fff;
background-color: #470bc8;
font-size: 14px;
margin-bottom: 15px;
}
.total-container {
width: 100%;
height: 90%;
position: relative;
.placard-img-container {
width: 100%;
position: relative;
img {
width: 72%;
}
}
}
}
import React, { Component } from 'react'
import './prizes.scss'
import { http } from "@/utils"
import { Toast } from "antd-mobile"
function showToast(text) {
Toast.info(text, 2, null, false)
}
class Prizes extends Component {
state = {
list: [
'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/prize-1.png',
'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/prize-2.png',
'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/prize-3.png',
'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/prize-4.png',
'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/prize-5.png',
'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/prize-6.png',
],
isShowRule: false,
rankList: []
}
componentDidMount() {
const {rankingList} = this.props
console.log(rankingList)
if (!rankingList || !rankingList.length) {
this.getRankingList()
} else {
this.setState({
rankingList
})
}
}
getRankingList = () => {
const {saveRankingList} = this.props
http.get(`${API["base-api"]}/assistance/ranking_list/50`)
.then(res => {
const {data, msg, errno} = res.data
if (errno === 200) {
this.setState({
rankList: data.list
})
saveRankingList && saveRankingList(data.list)
} else {
showToast(msg)
}
})
}
render() {
const {
list,
rankList,
isShowRule
} = this.state
return (
<div id={'prizes'}>
<div className="content">
<i className="part-title__decorate"/>
<div className="part-title__txt">活动奖品</div>
<i className="part-title__decorate"/>
<div className="prize-img">
{
list.map((item, index) => {
return (
<div className='img-box' key={index}>
<img src={item} alt=""/>
</div>
)
})
}
</div>
<span className="rule" onClick={() => {
this.setState({isShowRule: true})
}}>活动规则</span>
</div>
<div className="content" style={{padding: `20px 0 30px 0`}}>
<i className="part-title__decorate"/>
<div className="part-title__txt">排行榜</div>
<i className="part-title__decorate"/>
<div className="tip">
数据实时更新 只显示Top50
</div>
<table className="ranking" cellSpacing="0" cellPadding="0" border="0">
<thead>
<tr>
<td>排名</td>
<td>用户名称</td>
<td>邀请人数</td>
</tr>
</thead>
<tbody>
{
rankList.map((item, index) => {
return (
<tr key={index}>
<td>{index + 1}</td>
<td>{item.name}</td>
<td>{item.num}</td>
</tr>
)
})
}
</tbody>
</table>
</div>
{
isShowRule ?
<div className="mbc-box">
<div className="rele-content">
<div className="title">活动规则</div>
<p>1、进入七月在线服务号<a
style={{fontSize: `16px`, color: `rgba(47, 248, 255, 1)`, display: `inline-block`}}>回复77</a>获取活动海报,将上方课程赠送给好友,每有1名好友领取后,您和好友均可免费学习1课时该课
</p>
<p>2、每多1名好友领取,您获得的课时数+1,直到获得全部课时,届时仍可赠送给好友;</p>
<p>3、活动结束后,邀请好友数超过50人且排行榜前20名用户会得到<a
style={{fontSize: `16px`, color: `rgba(47, 248, 255, 1)`, display: `inline-block`}}>19VIP年会员、樱桃键盘</a>等大奖
</p>
</div>
<img className="close"
onClick={() => {this.setState({isShowRule: false})}}
src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/newyear20/H5/close-btn.png" alt=""/>
</div>
: null
}
</div>
)
}
}
export default Prizes
#prizes {
padding: 0 10px;
height: auto;
.content {
padding: 20px 10px 30px 10px;
background-color: #3F07B8;
border: 1px solid #5970FF;
border-radius: 4px;
text-align: center;
margin-bottom: 30px;
}
.part-title__decorate {
display: block;
width: 232px;
height: 2px;
margin: 0 auto;
background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 48%, rgba(255, 255, 255, 0) 100%);
}
.part-title__txt {
display: inline-block;
height: 32px;
line-height: 32px;
font-size: 16px;
color: #fff;
font-weight: 400;
letter-spacing: 2px;
}
.prize-img {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
margin-top: 20px;
.img-box {
width: 31.3%;
height: 112px;
margin-bottom: 5px;
img {
width: 100%;
height: 100%;
}
}
}
.rule {
display: inline-block;
width: 101px;
height: 28px;
line-height: 28px;
border: 1px solid rgba(254, 228, 29, 1);
border-radius: 14px;
margin-top: 15px;
color: #FEE41D;
font-size: 15px;
}
.tip {
margin-top: 15px;
font-size: 12px;
color: #fff;
}
.ranking {
width: 100%;
margin-top: 20px;
tr {
height: 44px;
line-height: 44px;
}
thead {
color: #FEE41D;
font-size: 14px;
font-weight: 500;
background-color: #490AD1;
}
tbody {
color: #fff;
font-weight: 400;
font-size: 12px;
tr {
td:first-child {
font-size: 14px;
}
}
tr:nth-child(odd) {
background-color: #470AC9;
}
tr:nth-child(even) {
background-color: #490AD1;
}
}
}
}
.mbc-box{
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: rgba(0, 0, 0, .6);
.rele-content {
display: inline-block;
width: 320px;
background: #fff;
border-radius: 5px;
padding: 20px 28px 30px 28px;
box-sizing: border-box;
margin: 145px auto 30px auto;
.title {
font-size: 18px;
color: #111;
margin-bottom: 20px;
font-weight: normal;
}
p {
text-align: left;
font-size: 14px;
color: #666666;
line-height: 18px;
margin-bottom: 3px;
}
}
.close {
display: block;
margin: auto;
width: 33px;
height: 33px;
}
}
#share-content {
width: 100%;
height: auto;
min-height: 100%;
background-color: #470bc8;
padding: 30px 0 40px 0;
position: relative;
text-align: center;
font-family: Microsoft YaHei,Helvetica Neue,STHeiti,Helvetica,Arial,sans-serif;
.tab {
display: flex;
justify-content: center;
margin: 0 auto 20px auto;
li {
width: 83px;
height: 32px;
line-height: 32px;
color: #FEE41D;
border: 1px solid #FEE41D;
font-size: 16px;
background-color: #470bc8;
}
li:first-child {
border-radius: 4px 0 0 4px;
}
li:last-child {
border-radius: 0 4px 4px 0;
}
.active {
color: #090F08;
background: #FEE41D;
border: 1px solid #FEE41D;
}
}
}
......@@ -43,7 +43,7 @@ class MyTreasure extends Component {
componentDidMount() {
this.fetchMyTreasure()
this.fetchActivityStatus()
document.title = '七月在线年终大回馈,幸运宝箱随你开,100%有奖!人气好课免费学,精品课程1分抢!';
document.title = '七月在线新春献礼,幸运宝箱随你开,100%有奖!“薪”年好课免费学,精品课程1分秒!';
}
componentWillReceiveProps(nextProp) {
......
......@@ -141,7 +141,7 @@ class LiveRoom extends Component {
)
}
<CommonContainer title='大咖直播' id="year-live">
<CommonContainer title='“薪”年好课免费学' id="year-live">
<ul className='live__list'>
{
list.length && (
......
......@@ -92,7 +92,7 @@ class YearCourse extends Component {
this.getTeamInfo()
this.getLength()
this.fetchBigCourse()
this.fetchFreeCourse()
// this.fetchFreeCourse()
this.fetchGroupCourse()
// AI之路-基础
this.fetchAICourse('one')
......@@ -221,7 +221,7 @@ class YearCourse extends Component {
toQQque = () => {
if (!getParam('version')) {
location.href = 'https://q.url.cn/AB8aue?_type=wpa&qidian=true'
qimoChatClick()
} else {
SendMessageToApp("toQQ", 'https://q.url.cn/AB8aue?_type=wpa&qidian=true')
}
......@@ -610,44 +610,54 @@ class YearCourse extends Component {
<div className={'year-index-course'}>
{/*浮框*/}
{
Number(treasureStage) === 1 &&
<div className='nav-right'>
<span onClick={this.toBoxList} className='nav-right__link'>
未开宝箱
{
removable > 0 &&
<i className="nav-right__number">{removable}</i>
}
</span>
<a onClick={() => this.toYearWish()} className='nav-right__link'>
心愿单
{
sum > 0 &&
<i className="nav-right__number">{sum}</i>
}
</a>
</div>
}
{/*{*/}
{/*Number(treasureStage) === 1 &&*/}
{/*<div className='nav-right'>*/}
{/*<span onClick={this.toBoxList} className='nav-right__link'>*/}
{/*未开宝箱*/}
{/*{*/}
{/*removable > 0 &&*/}
{/*<i className="nav-right__number">{removable}</i>*/}
{/*}*/}
{/*</span>*/}
{/*<a onClick={() => this.toYearWish()} className='nav-right__link'>*/}
{/*心愿单*/}
{/*{*/}
{/*sum > 0 &&*/}
{/*<i className="nav-right__number">{sum}</i>*/}
{/*}*/}
{/*</a>*/}
{/*</div>*/}
{/*}*/}
{/*{*/}
{/*Number(treasureStage) === 0 &&*/}
{/*<div className='nav-right-wish nav-right'>*/}
{/*<a onClick={() => this.toYearWish()} className='nav-right__link'>*/}
{/*心愿单*/}
{/*{*/}
{/*sum > 0 &&*/}
{/*<i className="nav-right__number">{sum}</i>*/}
{/*}*/}
{/*</a>*/}
{/*</div>*/}
{/*}*/}
<div className='nav-right-wish nav-right'>
<span onClick={this.toBoxList} className='nav-right__link'>未开宝箱
{
removable > 0 &&
<i className="nav-right__number">{removable}</i>
}
</span>
</div>
{
Number(treasureStage) === 0 &&
<div className='nav-right-wish nav-right'>
<a onClick={() => this.toYearWish()} className='nav-right__link'>
心愿单
{
sum > 0 &&
<i className="nav-right__number">{sum}</i>
}
</a>
</div>
}
{/* 重磅好课 */}
<CommonContainer title='重磅好课' id='year-course'>
<CommonContainer title='重磅好课限时免费试听' id='year-course'>
{
(bigcourse.course && bigcourse.course.length > 0) &&
<>
......@@ -673,7 +683,7 @@ class YearCourse extends Component {
<a
onClick={() => this.toQQque()}
className="btn big-course"
>免费试听</a>
>{item.is_audition == 1 ? '免费试听': '抢团报名额'}</a>
}
</div>
</CourseItem>
......@@ -692,56 +702,56 @@ class YearCourse extends Component {
</CommonContainer>
{/* 人气好课免费学 */}
{
Number(stage) !== 3 &&
<CommonContainer title='人气好课免费学' id='year-free'>
<a className='boss__add' href="/active/givecourse?activename=shuangdan">更有42本技术书籍免费送</a>
{
(freecourse.course && freecourse.course.length > 0) &&
<>
<div className='freecourse course-box'>
{
freecourse.course.map(item => (
<CourseItem
image={item.image_name}
key={item.course_id}
id={item.course_id}
toCourse={this.toCourse}
>
<div className="coupon-course__footer">
{
item.is_buy == 1 &&
<a
onClick={() => this.toCourse(item.course_id)}
className="btn to-study"
>开始学习</a>
}
{
item.is_buy == 0 &&
<a
onClick={() => this.freeStudy()}
className="btn free-study"
>点击免费学</a>
}
<p className="free-course-num">
已送出<span>{item.act_num}</span>个课
</p>
</div>
</CourseItem>
))
}
</div>
{
(freecourse.courseList && freecourse.courseList.length > 4) &&
<button
className="more-button"
onClick={() => this.handleToMore('freecourse')}
>{freecourse.isMore ? '查看更多' : '收起'}</button>
}
</>
}
</CommonContainer>
}
{/*{*/}
{/*Number(stage) !== 3 &&*/}
{/*<CommonContainer title='人气好课免费学' id='year-free'>*/}
{/*<a className='boss__add' href="/active/givecourse?activename=shuangdan">更有42本技术书籍免费送</a>*/}
{/*{*/}
{/*(freecourse.course && freecourse.course.length > 0) &&*/}
{/*<>*/}
{/*<div className='freecourse course-box'>*/}
{/*{*/}
{/*freecourse.course.map(item => (*/}
{/*<CourseItem*/}
{/*image={item.image_name}*/}
{/*key={item.course_id}*/}
{/*id={item.course_id}*/}
{/*toCourse={this.toCourse}*/}
{/*>*/}
{/*<div className="coupon-course__footer">*/}
{/*{*/}
{/*item.is_buy == 1 &&*/}
{/*<a*/}
{/*onClick={() => this.toCourse(item.course_id)}*/}
{/*className="btn to-study"*/}
{/*>开始学习</a>*/}
{/*}*/}
{/*{*/}
{/*item.is_buy == 0 &&*/}
{/*<a*/}
{/*onClick={() => this.freeStudy()}*/}
{/*className="btn free-study"*/}
{/*>点击免费学</a>*/}
{/*}*/}
{/*<p className="free-course-num">*/}
{/*已送出<span>{item.act_num}</span>个课程*/}
{/*</p>*/}
{/*</div>*/}
{/*</CourseItem>*/}
{/*))*/}
{/*}*/}
{/*</div>*/}
{/*{*/}
{/*(freecourse.courseList && freecourse.courseList.length > 4) &&*/}
{/*<button*/}
{/*className="more-button"*/}
{/*onClick={() => this.handleToMore('freecourse')}*/}
{/*>{freecourse.isMore ? '查看更多' : '收起'}</button>*/}
{/*}*/}
{/*</>*/}
{/*}*/}
{/*</CommonContainer>*/}
{/*}*/}
{/* stage,活动阶段 0-不在活动时间 1-预热 2-正式 3-返场 */}
{
......@@ -850,7 +860,7 @@ class YearCourse extends Component {
</CommonContainer>
{/* 好课价到,等你抄底 */}
<CommonContainer title='好课价到,等你抄底' id='year-discount'>
<CommonContainer title='“薪”年价到,等你抄底!' id='year-discount'>
{
[1, 2, 3, 4].map(item => {
const keys = this.formatTitleAndKey(item);
......
......@@ -39,7 +39,7 @@ export default class index extends Component {
_this.loginInfo(result)
}
_this.getStage()
document.title = '七月在线年终大回馈,幸运宝箱随你开,100%有奖!人气好课免费学,精品课程1分抢!';
document.title = '七月在线新春献礼,幸运宝箱随你开,100%有奖!“薪”年好课免费学,精品课程1分秒!';
}
// 获取app登录数据
......
......@@ -13,7 +13,7 @@ class TreasureNav extends Component {
navs: [
{
id: 'year-live',
name: '大咖直播'
name: '好课免费学'
},
{
id: 'year-treasure',
......@@ -23,10 +23,10 @@ class TreasureNav extends Component {
id: 'year-course',
name: '重磅好课'
},
{
id: 'year-free',
name: '免费学'
},
// {
// id: 'year-free',
// name: '免费学'
// },
{
id: 'year-group',
name: '1分拼团'
......
import React, { PureComponent } from "react"
import './accountLogin.scss'
import { Link } from "react-router-dom";
import { withFormik, FastField, Form } from "formik";
import { compose } from 'redux';
import { accountLogin } from '@/store/userAction';
import { connect } from "react-redux";
import { Link } from "react-router-dom"
import { withFormik, FastField, Form } from "formik"
import { compose } from 'redux'
import { accountLogin } from '@/store/userAction'
import { connect } from "react-redux"
import { isEmpty } from 'lodash'
import { HeaderBar } from "@/common";
import { HeaderBar } from "@/common"
import Header from "../common/Header";
import Header from "../common/Header"
import Input from '../common/Input'
import LoginButton from '../common/LoginButton'
import PasswordInput from '../common/passwordInput'
import { Toast } from "antd-mobile";
import { Toast } from "antd-mobile"
class AccountLogin extends PureComponent {
render() {
const {
errors,
values
} = this.props
return (
<div className={'account-login'}>
<HeaderBar arrow={true} title={'登录'}/>
<Header/>
<Form className="login-info">
<FastField
name='account'
render={({field}) => (
<Input
{...field}
type={'text'}
placeholder={'手机/邮箱/昵称'}
wrapperClass={'tel-input'}
icon={
<i className={'iconfont iconshouji'}
style={{fontSize: '22px', left: '10px'}}
/>
}
/>
)}
/>
<FastField
name='password'
render={({field}) => (
<PasswordInput
{...field}
autoComplete={'on'}
placeholder={'密码'}
icon={
<i className={'iconfont iconiconfront-74 lock-icon'}/>
}
/>
)}
/>
<LoginButton active={values.account && values.password && isEmpty(errors)}/>
<Link className={'forgot-password-btn'} to='/passport/forgot-password'>忘记密码</Link>
</Form>
</div>
);
}
render() {
const {
errors,
values
} = this.props
return (
<div className={'account-login'}>
<HeaderBar arrow={true} title={'登录'}/>
<Header/>
<Form className="login-info">
<FastField
name='account'
render={({field}) => (
<Input
{...field}
type={'text'}
placeholder={'手机/邮箱/昵称'}
wrapperClass={'tel-input'}
icon={
<i className={'iconfont iconshouji'}
style={{fontSize: '22px', left: '10px'}}
/>
}
/>
)}
/>
<FastField
name='password'
render={({field}) => (
<PasswordInput
{...field}
autoComplete={'on'}
placeholder={'密码'}
icon={
<i className={'iconfont iconiconfront-74 lock-icon'}/>
}
/>
)}
/>
<LoginButton active={values.account && values.password && isEmpty(errors)}/>
<Link className={'forgot-password-btn'} to='/passport/forgot-password'>忘记密码</Link>
</Form>
</div>
)
}
}
const formikConfig = {
mapPropsToValues: () => ({
account: '',
password: ''
}),
handleSubmit(values, formikBag) {
const {account: username, password} = values
const {props, props: {history}} = formikBag
const from = props.location.state && props.location.state.from
props.accountLogin({
username, password,redirect: from && window.location.origin + from.pathname + from.search + from.hash
}).then(res => {
if (res.hasError) {
Toast.info(res.msg, 2, null, false)
}
})
mapPropsToValues: () => ({
account: '',
password: ''
}),
handleSubmit(values, formikBag) {
const {account: username, password} = values
const {props, props: {history}} = formikBag
const from = props.location.state && props.location.state.from
props.accountLogin({
username, password, redirect: from && window.location.origin + from.pathname + from.search + from.hash
}).then(res => {
if (res.hasError) {
Toast.info(res.msg, 2, null, false)
}
})
},
validate: values => {
const errors = {}
if (!values.account) {
errors.account = '账号不能为空'
} else if (!values.password) {
errors.password = '密码不能为空'
}
return errors
}
}
export default compose(
connect(
state => ({user: state.user}),
{accountLogin}
),
withFormik(formikConfig)
connect(
state => ({user: state.user}),
{accountLogin}
),
withFormik(formikConfig)
)(AccountLogin)
......@@ -48,13 +48,13 @@ class Passport extends Component {
{
logo: qq,
text: 'QQ',
url: `${API["passport-api"]}/mob/qqlogin?redirect_url=${encodeURIComponent(this.redirectURL)}`,
url: `${API["passport-api"]}/m/login/qqLogin?redirect_url=${encodeURIComponent(this.redirectURL)}`,
id: 'qq'
},
{
logo: sina,
text: '新浪',
url: `${API['passport-api']}/mob/sinalogin?redirect_url=${encodeURIComponent(this.redirectURL)}`,
url: `${API['passport-api']}/m/login/sinaLogin?redirect_url=${encodeURIComponent(this.redirectURL)}`,
id: 'sina'
}
]
......
......@@ -43,7 +43,7 @@ class Login extends Component {
window.location.assign(`https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx23dac6775ac82877&redirect_uri=${encodeURIComponent(redirectURI)}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`)
break;
case 'QQ':
window.location.assign(`${API["passport-api"]}/mob/qqlogin?redirect_url=${encodeURIComponent(redirectURI)}`);
window.location.assign(`${API["passport-api"]}/m/login/qqLogin?redirect_url=${encodeURIComponent(redirectURI)}`);
break;
default:
window.location.assign(item.url)
......
import React, {Component} from 'react'
import {http, getParam, browser} from '@/utils'
import {http, getParam, browser, SendMessageToApp} from '@/utils'
import PythonDes from './pythomDes'
import PythonStudy from './pythonStudy'
import {connect} from "react-redux"
......@@ -61,10 +61,12 @@ class Python extends Component {
this.setState({
isAppUpdate: true
})
this.fetchCourseInfo();
}
this.props.setCurrentUser(this.transformUser(this.state.userInfoList))
this.props.setCurrentUser(this.transformUser(this.state.userInfoList));
}
transformUser = res => {
let payload
......@@ -98,18 +100,16 @@ class Python extends Component {
backwardVersion: true,
isPay: 0,
})
}else{
this.setState({
backwardVersion: false,
isPay: data.course_info.is_pay
})
}
if(browser.isIOSApp && version < 380) { // ISO的低版本
}else if(browser.isIOSApp && version < 380) { // ISO的低版本
this.setState({
backwardVersion: true,
isPay: 0,
})
}else{
}else{ // 安卓/IOS 的高版本
if(data.course_info.is_pay === 1) { // 在APP内未登录-去登陆-登录后还显示此页;如果是已购买的用户 就需要跳转到 APP已购买的原生页面
SendMessageToApp('toSyllabusChapter', id); // 跳转到APP的已购买详情页 id 是课程ID
return;
}
this.setState({
backwardVersion: false,
isPay: data.course_info.is_pay
......@@ -131,7 +131,14 @@ class Python extends Component {
return (
<div>
{
isPay === 0 && <PythonDes history={this.props.history} isAppUpdate={isAppUpdate} backwardVersion={backwardVersion} isPay={isPay}></PythonDes>
isPay === 0 && (
<PythonDes
backwardVersion={backwardVersion}
history={this.props.history}
isAppUpdate={isAppUpdate}
isPay={isPay}
/>
)
}
{
(isPay === 1 && !getParam('version')) && <PythonStudy isAppUpdate={isAppUpdate}/>
......
......@@ -35,7 +35,7 @@ export default class Test extends Component {
<div className={'table_body'}>
{
this.props.practice.map((item, index)=>{
return <div key={index}>
return <div className="stage-item" key={index}>
<div className='stage'>{`第${this.Change(item.stage)}阶段 ${item.name}`}</div>
{
item.questions.map((question, index)=>{
......
......@@ -49,6 +49,10 @@
.table_body {
background: #34AFFF;
.stage-item {
border-bottom: 1px solid #0099FF;
}
.stage {
height: 38px;
font-size: 14px;
......@@ -59,6 +63,7 @@
justify-content: center;
align-items: center;
}
.line {
display: flex;
justify-content: space-between;
......@@ -94,7 +99,6 @@
.table_bottom {
height: 36px;
background: #3DB1FF;
border-top: 1px solid #0099FF;
div {
display: flex;
justify-content: center;
......
......@@ -87,7 +87,7 @@ class PythonDes extends Component {
{
url: 'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/xuexi.png',
title: '想学习,没有坚持下来',
subTitle: '以故事性的方式编写学习内容, 把生硬的知识点有趣化。精美的图片+幽默的文字+代码编写让你越学越学。'
subTitle: '以故事性的方式编写学习内容, 把生硬的知识点有趣化。精美的图片+幽默的文字+代码编写让你越学越学。'
},
{
url: 'https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/h5_python_class/zhishidian.png',
......@@ -96,7 +96,7 @@ class PythonDes extends Component {
},
],
payMoney: 0,
isOnline: false, //课程是否上架
isOnline: true, //课程是否上架
}
}
......@@ -121,7 +121,7 @@ class PythonDes extends Component {
}
toLearn = () => {
const {backwardVersion, isPay} = this.props;
const {backwardVersion} = this.props;
http.post(`${API['home']}/m/it/user/trialCourse`, {course_id: getParam('id')}).then((res) => {
const {code, msg} = res.data
if (code == 200) {
......@@ -133,7 +133,7 @@ class PythonDes extends Component {
if(backwardVersion) {
Toast.info('当前版本不支持该课程模式,请升级到最新版本或前往PC端体验', 2)
} else {
SendMessageToApp("toLearn")
SendMessageToApp("toLearn", getParam('id'))
}
}
} else {
......@@ -149,7 +149,7 @@ class PythonDes extends Component {
}
toDetail = () => {
const {backwardVersion, isPay} = this.props;
const {backwardVersion} = this.props;
const id = getParam('id')
if (!getParam('version')) { // H5
http.get(`${API['base-api']}/m/cart/addtopreorder/[${id}]`).then((res) => {
......@@ -304,10 +304,18 @@ class PythonDes extends Component {
<Description list={desList} />
<NoWorry list={worryList}></NoWorry>
<Study syllabus={syllabus} allSyllabusShow={allSyllabusShow} show={this.showAll}
hide={this.hideSome}></Study>
<Test practice={practice} allPracticeShow={allPracticeShow} show={this.showAll}
hide={this.hideSome}></Test>
{/* 课后实操 */}
<Test
practice={practice}
allPracticeShow={allPracticeShow}
show={this.showAll}
hide={this.hideSome}
/>
<Team/>
{/* 试学体验 */}
......
......@@ -59,9 +59,34 @@ html:not([data-scale]) .am-accordion.python-study__stage .am-accordion-item .am-
display: flex;
align-items: center;
justify-content: space-between;
position: relative;
height: 55px;
padding: 0 12px;
background-color: #1A9BFC;
&::after {
content: '';
position: absolute;
left: -60px;
top: 0;
width: 146px;
height: 100%;
background-repeat: no-repeat;
background-size: 100% auto;
background-image: url('https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/pythonCourse/pc/python-title-bg-1.png');
}
&::before {
content: '';
position: absolute;
right: -60px;
bottom: -20px;
width: 106px;
height: 100%;
background-repeat: no-repeat;
background-size: 100% auto;
background-image: url('https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/pythonCourse/pc/python-title-bg-0.png');
}
}
.python-study__course-name {
......
......@@ -83,14 +83,14 @@ class PythonClass extends Component {
handleToSend = (params) => {
const { history } = this.props;
const { isShare, entryMode } = this.state;
const { isShare } = this.state;
if(browser.isWeixin) {
history.push(`/pythonShare?id=${getParam('id')}&type=${getParam('type')}&ques=${getParam('ques')}&origin=python`);
this.setState({
isGuide: true
});
wxShare({
title: isShare? `我已在【${params.course_name}】上运行了行代码了${params.code_lines}` : `我在${params.course_name}${labelName}遇到了困难`,
title: isShare? `我已在【${params.course_name}】上运行了行代码了${params.code_lines}` : `我在${params.course_name}${this.formatTitle(params)}遇到了困难`,
desc: this.formatTitle(params),
link: encodeURI(location.href),
imgUrl: params.course_img,
......
import React from 'react'
import WxErrImage from '@assets/image/wx_error.png'
import './wxerr.scss'
const WxErr = () => {
return (
<div className={'wxerr'}>
<img src={WxErrImage} alt=''/>
<p className="openLink" style={{
fontSize: `16px`,
marginTop: `40px`
}}>请在微信客户端打开链接</p>
</div>
)
}
export default WxErr
.wxerr{
margin-top: 40px;
display: flex;
flex-flow: column;
align-items: center;
.openLink{
font-size: 16px;
margin-top:40px;
}
}
......@@ -37,236 +37,253 @@ const Activity = loadable(() => import(/* webpackChunkName: 'Activity' */'@/comp
const Invite = loadable(() => import(/* webpackChunkName: 'Invite' */'@/components/activity/1111/invite'))
const NewVip = loadable(() => import(/* webpackChunkName: 'Invite' */'@/components/vip/index'))
export default [
{
path: '/',
exact: true,
component: Index
},
{
path: '/vip/newvip',
component: NewVip
},
{
path: '/classify',
component: Classify
},
{
path: '/study',
component: Study
},
{
path: '/my',
component: My
},
{
path: '/myedit',
component: MyEdit,
isPrivate: true
},
{
path: '/courselist',
component: CourseList
},
{
path: '/preferential',
component: Preferential
},
{
path: '/search',
exact: true,
component: Search
},
{
path: '/search-result',
component: SearchResult
},
{
path: '/order',
component: Order,
isPrivate: true
},
{
path: '/orderinfo',
component: Orderinfo
},
{
path: '/detail',
component: Detail
},
{
path: '/getDetail',
component: Detail
},
{
path: '/examination',
component: Examination
},
{
path: '/coupons',
component: Coupons,
isPrivate: true
},
{
path: '/shopcart',
component: ShopCart,
isPrivate: true
},
{
path: '/bargain-middle-page',
component: BargainMiddlePage
},
{
path: '/passport',
component: Passport
},
{
path: '/play',
component: Video,
isPrivate: true
},
{
path: '/scholarship',
component: Scholarship
},
{
path: '/document',
component: DrawDocument
},
{
path: '/shareposter',
component: sharePoster,
isPrivate: true
},
{
path: '/myorders',
component: myOrders,
isPrivate: true
},
{
path: '/purchased',
component: Purchased,
isPrivate: true
},
{
path: '/payOrder',
component: PayOrder
},
{
path: '/campTest',
component: CampTest
},
{
path: '/campResolve',
component: CampResolve
},
// 分享领红包课程列表页
{
path: '/ShareCourse',
component: ShareCourse
},
{
path: '/',
exact: true,
component: Index
},
{
path: '/vip/newvip',
component: NewVip
},
{
path: '/classify',
component: Classify
},
{
path: '/study',
component: Study
},
{
path: '/my',
component: My
},
{
path: '/myedit',
component: MyEdit,
isPrivate: true
},
{
path: '/courselist',
component: CourseList
},
{
path: '/preferential',
component: Preferential
},
{
path: '/search',
exact: true,
component: Search
},
{
path: '/search-result',
component: SearchResult
},
{
path: '/order',
component: Order,
isPrivate: true
},
{
path: '/orderinfo',
component: Orderinfo
},
{
path: '/detail',
component: Detail
},
{
path: '/getDetail',
component: Detail
},
{
path: '/examination',
component: Examination
},
{
path: '/coupons',
component: Coupons,
isPrivate: true
},
{
path: '/shopcart',
component: ShopCart,
isPrivate: true
},
{
path: '/bargain-middle-page',
component: BargainMiddlePage
},
{
path: '/passport',
component: Passport
},
{
path: '/play',
component: Video,
isPrivate: true
},
{
path: '/scholarship',
component: Scholarship
},
{
path: '/document',
component: DrawDocument
},
{
path: '/shareposter',
component: sharePoster,
isPrivate: true
},
{
path: '/myorders',
component: myOrders,
isPrivate: true
},
{
path: '/purchased',
component: Purchased,
isPrivate: true
},
{
path: '/payOrder',
component: PayOrder
},
{
path: '/campTest',
component: CampTest
},
{
path: '/campResolve',
component: CampResolve
},
// 分享领红包课程列表页
{
path: '/ShareCourse',
component: ShareCourse
},
// 区号
{
path: '/country',
component: Country
},
{
path: '/togroup',
component: ToGroup
},
{
path: '/aist-share',
component: loadable(() => import(/* webpackChunkName: 'aist-share'*/'@/components/share-page/aist-share'))
},
{
path: '/blessingRank',
component: loadable(() => import(/* webpackChunkName: 'blessing-rank' */'@/components/blessingRank/index'))
},
{
path: '/blessingPreheat',
component: loadable(() => import(/* webpackChunkName: 'blessing-preheat' */'@/components/blessingPreheat/index'))
},
{
path: '/blessingGetPrize',
component: loadable(() => import(/* webpackChunkName: 'blessing-getPrize' */'@/components/blessingGetPrize/index'))
},
{
path: '/prize-winner-list',
component: loadable(() => import(/* webpackChunkName: 'prize-winner-list' */'@/components/activity/1111/prize-winner-list'))
},
//定金订单页面
{
path: '/deposit-order',
component: loadable(() => import(/* webpackChunkName: 'deposit-order' */ '@components/order/deposit/deposit-order'))
},
//定金支付页面
{
path: '/deposit-pay-order',
component: loadable(() => import(/* webpackChunkName: 'deposit-pay-order' */ '@components/order/deposit/deposit-pay-order'))
},
//尾款支付页面
{
path: '/final-deposit-order',
component: loadable(() => import(/* webpackChunkName: 'deposit-pay-order' */ '@components/order/deposit/final-order'))
},
// 定金支付之后
{
path: '/expand/callback',
component: ExpandCallback
},
// 定金-邀请好友助力
{
path: '/expand/index',
component: ExpandShare
},
{
path: '/toAppDemo',
component: loadable(() => import(/* webpackChunkName: 'aist-share'*/'@/components/blessingPreheat/toAppDemo'))
},
{
path: '/activity',
exact: true,
component: Activity,
},
{
path: '/invite',
component: Invite,
},
// 区号
{
path: '/country',
component: Country
},
{
path: '/togroup',
component: ToGroup
},
{
path: '/aist-share',
component: loadable(() => import(/* webpackChunkName: 'aist-share'*/'@/components/share-page/aist-share'))
},
{
path: '/blessingRank',
component: loadable(() => import(/* webpackChunkName: 'blessing-rank' */'@/components/blessingRank/index'))
},
{
path: '/blessingPreheat',
component: loadable(() => import(/* webpackChunkName: 'blessing-preheat' */'@/components/blessingPreheat/index'))
},
{
path: '/blessingGetPrize',
component: loadable(() => import(/* webpackChunkName: 'blessing-getPrize' */'@/components/blessingGetPrize/index'))
},
{
path: '/prize-winner-list',
component: loadable(() => import(/* webpackChunkName: 'prize-winner-list' */'@/components/activity/1111/prize-winner-list'))
},
//定金订单页面
{
path: '/deposit-order',
component: loadable(() => import(/* webpackChunkName: 'deposit-order' */ '@components/order/deposit/deposit-order'))
},
//定金支付页面
{
path: '/deposit-pay-order',
component: loadable(() => import(/* webpackChunkName: 'deposit-pay-order' */ '@components/order/deposit/deposit-pay-order'))
},
//尾款支付页面
{
path: '/final-deposit-order',
component: loadable(() => import(/* webpackChunkName: 'deposit-pay-order' */ '@components/order/deposit/final-order'))
},
// 定金支付之后
{
path: '/expand/callback',
component: ExpandCallback
},
// 定金-邀请好友助力
{
path: '/expand/index',
component: ExpandShare
},
{
path: '/toAppDemo',
component: loadable(() => import(/* webpackChunkName: 'aist-share'*/'@/components/blessingPreheat/toAppDemo'))
},
{
path: '/activity',
exact: true,
component: Activity,
},
{
path: '/invite',
component: Invite,
},
//双旦活动
{
path: '/activity/newyear-2019/landing',
component: loadable(() => import(/* webpackChunkName: 'newyear-2019-landing'*/ '@components/activity/newyear-2019/landing/index'))
},
//双旦活动
{
path: '/activity/newyear-2019/landing',
component: loadable(() => import(/* webpackChunkName: 'newyear-2019-landing'*/ '@components/activity/newyear-2019/landing/index'))
},
// 双旦活动预热页面
{
path: '/year/yearIndex',
component: loadable(() => import(/* webpackChunkName: 'newyear-yearIndex' */ '@components/activity/newyear-2019/preheat/index'))
},
// 双旦活动预热页面
{
path: '/year/yearIndex',
component: loadable(() => import(/* webpackChunkName: 'newyear-yearIndex' */ '@components/activity/newyear-2019/preheat/index'))
},
// 我的宝箱
{
path: '/year/yearTreasure',
component: loadable(() => import(/* webpackChunkName: 'newyear-yearIndex' */ '@components/activity/newyear-2019/myTreasure/index'))
}
,
// 双旦心愿单
{
path: '/year/yearWish',
component: loadable(() => import(/* webpackChunkName: 'newyear-yearIndex' */ '@components/activity/newyear-2019/year-wish/index'))
},
// python 小课页面
{
path: '/python',
component: loadable(() => import(/* webpackChunkName: 'python-class'*/'@/components/python'))
},
{
path: '/pythonShare',
component: loadable(() => import('@/components/pythonShare'))
},
{
path: '/pythonStudy',
component: loadable(() => import('@/components/python/pythonStudy'))
},
// 我的宝箱
{
path: '/year/yearTreasure',
component: loadable(() => import(/* webpackChunkName: 'newyear-yearIndex' */ '@components/activity/newyear-2019/myTreasure/index'))
}
,
// 双旦心愿单
{
path: '/year/yearWish',
component: loadable(() => import(/* webpackChunkName: 'newyear-yearIndex' */ '@components/activity/newyear-2019/year-wish/index'))
},
// python 小课页面
{
path: '/python',
component: loadable(() => import(/* webpackChunkName: 'python-class'*/'@/components/python'))
},
{
path: '/pythonShare',
component: loadable(() => import('@/components/pythonShare'))
},
{
path: '/pythonStudy',
component: loadable(() => import('@/components/python/pythonStudy'))
},
// 赠一得一
{
path: '/active/givecourse',
component: loadable(() => import(/* activity-give-courses */'@components/activity/give-courses/index'))
},
{
path: '/active/assistance',
component: loadable(() => import(/* activity-give-courses-assistance */'@components/activity/give-courses/assistance/index'))
},
{
path: '/active/to',
component: loadable(() => import(/* activity-give-courses-share */'@components/activity/give-courses/share-content/index'))
},
{
path: '/wxerr',
component: loadable(() => import(/* wx-err */ '@components/wxerr/index'))
},
]
......@@ -4,7 +4,7 @@ import jsCookie from 'js-cookie'
const accountLogin = user => dispatch => {
return http.post(`${API['passport-api']}/user_login`, {
return http.post(`${API['passport-api']}/m/login/accountLogin`, {
user_name: user.username,
password: encrypt(user.password),
is_encrypt: 1,
......@@ -15,7 +15,7 @@ const accountLogin = user => dispatch => {
}
const quickLogin = user => dispatch => {
return http.post(`${API['passport-api']}/quick_login`, {
return http.post(`${API['passport-api']}/m/login/quickLogin`, {
...user,
plat: 5
}).then(res => {
......@@ -26,7 +26,7 @@ const quickLogin = user => dispatch => {
const storeUser = (res, dispatch) => {
const data = res.data
let payload
if (data.errno === 0) {
if (data.errno === 200) {
const {user_name: username, avatar_file: avatar,is_vip: isVIP, ...rest} = data.data.user_info
payload = {
hasError: false,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment