Commit 00740600 by wangshuo

AI水平测试

parents 7ef773ec 95559575
{
"mrstatic/js/0.cc475f61.chunk.js": "/mrstatic/js/0.cc475f61.chunk.js",
"mrstatic/js/0.cc475f61.chunk.js.map": "/mrstatic/js/0.cc475f61.chunk.js.map",
"mrstatic/js/1.5926cefc.chunk.js": "/mrstatic/js/1.5926cefc.chunk.js",
"mrstatic/js/1.5926cefc.chunk.js.map": "/mrstatic/js/1.5926cefc.chunk.js.map",
"BargainMiddlePage.css": "/mrstatic/css/BargainMiddlePage.fc53c3d0.chunk.css",
"BargainMiddlePage.js": "/mrstatic/js/BargainMiddlePage.47d6d11b.chunk.js",
"BargainMiddlePage.js.map": "/mrstatic/js/BargainMiddlePage.47d6d11b.chunk.js.map",
"Classify.css": "/mrstatic/css/Classify.f2f19957.chunk.css",
"Classify.js": "/mrstatic/js/Classify.f4b0e95e.chunk.js",
"Classify.js.map": "/mrstatic/js/Classify.f4b0e95e.chunk.js.map",
"Country.css": "/mrstatic/css/Country.16a64650.chunk.css",
"Country.js": "/mrstatic/js/Country.2f1e3ba6.chunk.js",
"Country.js.map": "/mrstatic/js/Country.2f1e3ba6.chunk.js.map",
"CourseList.css": "/mrstatic/css/CourseList.85889ffd.chunk.css",
"CourseList.js": "/mrstatic/js/CourseList.ad80ef1f.chunk.js",
"CourseList.js.map": "/mrstatic/js/CourseList.ad80ef1f.chunk.js.map",
"DrawDocument.css": "/mrstatic/css/DrawDocument.2e7d81ca.chunk.css",
"DrawDocument.js": "/mrstatic/js/DrawDocument.b607db8f.chunk.js",
"DrawDocument.js.map": "/mrstatic/js/DrawDocument.b607db8f.chunk.js.map",
"Examination.css": "/mrstatic/css/Examination.f2cc3163.chunk.css",
"Examination.js": "/mrstatic/js/Examination.97026877.chunk.js",
"Examination.js.map": "/mrstatic/js/Examination.97026877.chunk.js.map",
"MyEdit.js": "/mrstatic/js/MyEdit.d9cf1de7.chunk.js",
"MyEdit.js.map": "/mrstatic/js/MyEdit.d9cf1de7.chunk.js.map",
"Order.css": "/mrstatic/css/Order.8bb031ea.chunk.css",
"Order.js": "/mrstatic/js/Order.1956906f.chunk.js",
"Order.js.map": "/mrstatic/js/Order.1956906f.chunk.js.map",
"Orderinfo.js": "/mrstatic/js/Orderinfo.c5a68e88.chunk.js",
"Orderinfo.js.map": "/mrstatic/js/Orderinfo.c5a68e88.chunk.js.map",
"PayOrder.css": "/mrstatic/css/PayOrder.e5315535.chunk.css",
"PayOrder.js": "/mrstatic/js/PayOrder.8534c9f2.chunk.js",
"PayOrder.js.map": "/mrstatic/js/PayOrder.8534c9f2.chunk.js.map",
"Preferential.css": "/mrstatic/css/Preferential.cda7a495.chunk.css",
"Preferential.js": "/mrstatic/js/Preferential.b9de8327.chunk.js",
"Preferential.js.map": "/mrstatic/js/Preferential.b9de8327.chunk.js.map",
"SearchResult.css": "/mrstatic/css/SearchResult.bb7c3056.chunk.css",
"SearchResult.js": "/mrstatic/js/SearchResult.82c4db68.chunk.js",
"SearchResult.js.map": "/mrstatic/js/SearchResult.82c4db68.chunk.js.map",
"ShareCourse.css": "/mrstatic/css/ShareCourse.278ad3b1.chunk.css",
"ShareCourse.js": "/mrstatic/js/ShareCourse.543c57d3.chunk.js",
"ShareCourse.js.map": "/mrstatic/js/ShareCourse.543c57d3.chunk.js.map",
"ShopCart.css": "/mrstatic/css/ShopCart.3a4dbb7a.chunk.css",
"ShopCart.js": "/mrstatic/js/ShopCart.d6804bde.chunk.js",
"ShopCart.js.map": "/mrstatic/js/ShopCart.d6804bde.chunk.js.map",
"aist-share.css": "/mrstatic/css/aist-share.bef8c404.chunk.css",
"aist-share.js": "/mrstatic/js/aist-share.cde60f9d.chunk.js",
"aist-share.js.map": "/mrstatic/js/aist-share.cde60f9d.chunk.js.map",
"coupons.css": "/mrstatic/css/coupons.2fcc3e06.chunk.css",
"coupons.js": "/mrstatic/js/coupons.1ee98542.chunk.js",
"coupons.js.map": "/mrstatic/js/coupons.1ee98542.chunk.js.map",
"detail.css": "/mrstatic/css/detail.8d310f0f.chunk.css",
"detail.js": "/mrstatic/js/detail.ea824723.chunk.js",
"detail.js.map": "/mrstatic/js/detail.ea824723.chunk.js.map",
"main.css": "/mrstatic/css/main.9977dcb1.chunk.css",
"main.js": "/mrstatic/js/main.62a77b84.chunk.js",
"main.js.map": "/mrstatic/js/main.62a77b84.chunk.js.map",
"myorders.css": "/mrstatic/css/myorders.3ae12dec.chunk.css",
"myorders.js": "/mrstatic/js/myorders.21588e23.chunk.js",
"myorders.js.map": "/mrstatic/js/myorders.21588e23.chunk.js.map",
"purchased.css": "/mrstatic/css/purchased.dd7556e0.chunk.css",
"purchased.js": "/mrstatic/js/purchased.1623b0b5.chunk.js",
"purchased.js.map": "/mrstatic/js/purchased.1623b0b5.chunk.js.map",
"runtime~main.js": "/mrstatic/js/runtime~main.62f2beae.js",
"runtime~main.js.map": "/mrstatic/js/runtime~main.62f2beae.js.map",
"search.css": "/mrstatic/css/search.fab97849.chunk.css",
"search.js": "/mrstatic/js/search.f7766add.chunk.js",
"search.js.map": "/mrstatic/js/search.f7766add.chunk.js.map",
"shareposter.css": "/mrstatic/css/shareposter.f09a5959.chunk.css",
"shareposter.js": "/mrstatic/js/shareposter.456c17f8.chunk.js",
"shareposter.js.map": "/mrstatic/js/shareposter.456c17f8.chunk.js.map",
"study.css": "/mrstatic/css/study.b002c899.chunk.css",
"study.js": "/mrstatic/js/study.0512da7d.chunk.js",
"study.js.map": "/mrstatic/js/study.0512da7d.chunk.js.map",
"togroup.css": "/mrstatic/css/togroup.49988cae.chunk.css",
"togroup.js": "/mrstatic/js/togroup.34d5a4fa.chunk.js",
"togroup.js.map": "/mrstatic/js/togroup.34d5a4fa.chunk.js.map",
"video.css": "/mrstatic/css/video.b57a1aec.chunk.css",
"video.js": "/mrstatic/js/video.71e4de46.chunk.js",
"video.js.map": "/mrstatic/js/video.71e4de46.chunk.js.map",
"mrstatic/css/28.aebbab68.chunk.css": "/mrstatic/css/28.aebbab68.chunk.css",
"mrstatic/js/28.421bdc56.chunk.js": "/mrstatic/js/28.421bdc56.chunk.js",
"mrstatic/js/28.421bdc56.chunk.js.map": "/mrstatic/js/28.421bdc56.chunk.js.map",
"mrstatic/css/29.4c706a4e.chunk.css": "/mrstatic/css/29.4c706a4e.chunk.css",
"mrstatic/js/29.55833d30.chunk.js": "/mrstatic/js/29.55833d30.chunk.js",
"mrstatic/js/29.55833d30.chunk.js.map": "/mrstatic/js/29.55833d30.chunk.js.map",
"mrstatic/css/30.2471f477.chunk.css": "/mrstatic/css/30.2471f477.chunk.css",
"mrstatic/js/30.5be43a00.chunk.js": "/mrstatic/js/30.5be43a00.chunk.js",
"mrstatic/js/30.5be43a00.chunk.js.map": "/mrstatic/js/30.5be43a00.chunk.js.map",
"mrstatic/css/31.0bb224f2.chunk.css": "/mrstatic/css/31.0bb224f2.chunk.css",
"mrstatic/js/31.00acec59.chunk.js": "/mrstatic/js/31.00acec59.chunk.js",
"mrstatic/js/31.00acec59.chunk.js.map": "/mrstatic/js/31.00acec59.chunk.js.map",
"mrstatic/css/32.5ed15c7e.chunk.css": "/mrstatic/css/32.5ed15c7e.chunk.css",
"mrstatic/js/32.63ff864e.chunk.js": "/mrstatic/js/32.63ff864e.chunk.js",
"mrstatic/js/32.63ff864e.chunk.js.map": "/mrstatic/js/32.63ff864e.chunk.js.map",
"mrstatic/css/33.ecbb6f9a.chunk.css": "/mrstatic/css/33.ecbb6f9a.chunk.css",
"mrstatic/js/33.900c665c.chunk.js": "/mrstatic/js/33.900c665c.chunk.js",
"mrstatic/js/33.900c665c.chunk.js.map": "/mrstatic/js/33.900c665c.chunk.js.map",
"index.html": "/index.html",
"mrstatic/css/28.aebbab68.chunk.css.map": "/mrstatic/css/28.aebbab68.chunk.css.map",
"mrstatic/css/29.4c706a4e.chunk.css.map": "/mrstatic/css/29.4c706a4e.chunk.css.map",
"mrstatic/css/30.2471f477.chunk.css.map": "/mrstatic/css/30.2471f477.chunk.css.map",
"mrstatic/css/31.0bb224f2.chunk.css.map": "/mrstatic/css/31.0bb224f2.chunk.css.map",
"mrstatic/css/32.5ed15c7e.chunk.css.map": "/mrstatic/css/32.5ed15c7e.chunk.css.map",
"mrstatic/css/33.ecbb6f9a.chunk.css.map": "/mrstatic/css/33.ecbb6f9a.chunk.css.map",
"mrstatic/css/BargainMiddlePage.fc53c3d0.chunk.css.map": "/mrstatic/css/BargainMiddlePage.fc53c3d0.chunk.css.map",
"mrstatic/css/Classify.f2f19957.chunk.css.map": "/mrstatic/css/Classify.f2f19957.chunk.css.map",
"mrstatic/css/Country.16a64650.chunk.css.map": "/mrstatic/css/Country.16a64650.chunk.css.map",
"mrstatic/css/CourseList.85889ffd.chunk.css.map": "/mrstatic/css/CourseList.85889ffd.chunk.css.map",
"mrstatic/css/DrawDocument.2e7d81ca.chunk.css.map": "/mrstatic/css/DrawDocument.2e7d81ca.chunk.css.map",
"mrstatic/css/Examination.f2cc3163.chunk.css.map": "/mrstatic/css/Examination.f2cc3163.chunk.css.map",
"mrstatic/css/Order.8bb031ea.chunk.css.map": "/mrstatic/css/Order.8bb031ea.chunk.css.map",
"mrstatic/css/PayOrder.e5315535.chunk.css.map": "/mrstatic/css/PayOrder.e5315535.chunk.css.map",
"mrstatic/css/Preferential.cda7a495.chunk.css.map": "/mrstatic/css/Preferential.cda7a495.chunk.css.map",
"mrstatic/css/SearchResult.bb7c3056.chunk.css.map": "/mrstatic/css/SearchResult.bb7c3056.chunk.css.map",
"mrstatic/css/ShareCourse.278ad3b1.chunk.css.map": "/mrstatic/css/ShareCourse.278ad3b1.chunk.css.map",
"mrstatic/css/ShopCart.3a4dbb7a.chunk.css.map": "/mrstatic/css/ShopCart.3a4dbb7a.chunk.css.map",
"mrstatic/css/aist-share.bef8c404.chunk.css.map": "/mrstatic/css/aist-share.bef8c404.chunk.css.map",
"mrstatic/css/coupons.2fcc3e06.chunk.css.map": "/mrstatic/css/coupons.2fcc3e06.chunk.css.map",
"mrstatic/css/detail.8d310f0f.chunk.css.map": "/mrstatic/css/detail.8d310f0f.chunk.css.map",
"mrstatic/css/main.9977dcb1.chunk.css.map": "/mrstatic/css/main.9977dcb1.chunk.css.map",
"mrstatic/css/myorders.3ae12dec.chunk.css.map": "/mrstatic/css/myorders.3ae12dec.chunk.css.map",
"mrstatic/css/purchased.dd7556e0.chunk.css.map": "/mrstatic/css/purchased.dd7556e0.chunk.css.map",
"mrstatic/css/search.fab97849.chunk.css.map": "/mrstatic/css/search.fab97849.chunk.css.map",
"mrstatic/css/shareposter.f09a5959.chunk.css.map": "/mrstatic/css/shareposter.f09a5959.chunk.css.map",
"mrstatic/css/study.b002c899.chunk.css.map": "/mrstatic/css/study.b002c899.chunk.css.map",
"mrstatic/css/togroup.49988cae.chunk.css.map": "/mrstatic/css/togroup.49988cae.chunk.css.map",
"mrstatic/css/video.b57a1aec.chunk.css.map": "/mrstatic/css/video.b57a1aec.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.543dcc7fca119c88406da24906433f0d.js": "/precache-manifest.543dcc7fca119c88406da24906433f0d.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/28.aebbab68.chunk.css" rel="stylesheet"><link href="/mrstatic/css/main.9977dcb1.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(f){function e(e){for(var r,t,n=e[0],a=e[1],o=e[2],c=0,d=[];c<n.length;c++)t=n[c],l[t]&&d.push(l[t][0]),l[t]=0;for(r in a)Object.prototype.hasOwnProperty.call(a,r)&&(f[r]=a[r]);for(h&&h(e);d.length;)d.shift()();return u.push.apply(u,o||[]),i()}function i(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,a=1;a<t.length;a++){var o=t[a];0!==l[o]&&(n=!1)}n&&(u.splice(r--,1),e=p(p.s=t[0]))}return e}var t={},s={22:0},l={22:0},u=[];function p(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return f[e].call(r.exports,r,r.exports,p),r.l=!0,r.exports}p.e=function(u){var e=[];s[u]?e.push(s[u]):0!==s[u]&&{2:1,3:1,4:1,5:1,6:1,7:1,9:1,11:1,12:1,13:1,14:1,15:1,16:1,17:1,18:1,20:1,21:1,23:1,24:1,25:1,26:1,27:1,29:1,30:1,31:1,32:1,33:1}[u]&&e.push(s[u]=new Promise(function(e,n){for(var r="mrstatic/css/"+({2:"BargainMiddlePage",3:"Classify",4:"Country",5:"CourseList",6:"DrawDocument",7:"Examination",8:"MyEdit",9:"Order",10:"Orderinfo",11:"PayOrder",12:"Preferential",13:"SearchResult",14:"ShareCourse",15:"ShopCart",16:"aist-share",17:"coupons",18:"detail",20:"myorders",21:"purchased",23:"search",24:"shareposter",25:"study",26:"togroup",27:"video"}[u]||u)+"."+{0:"31d6cfe0",1:"31d6cfe0",2:"fc53c3d0",3:"f2f19957",4:"16a64650",5:"85889ffd",6:"2e7d81ca",7:"f2cc3163",8:"31d6cfe0",9:"8bb031ea",10:"31d6cfe0",11:"e5315535",12:"cda7a495",13:"bb7c3056",14:"278ad3b1",15:"3a4dbb7a",16:"bef8c404",17:"2fcc3e06",18:"8d310f0f",20:"3ae12dec",21:"dd7556e0",23:"fab97849",24:"f09a5959",25:"b002c899",26:"49988cae",27:"b57a1aec",29:"4c706a4e",30:"2471f477",31:"0bb224f2",32:"5ed15c7e",33:"ecbb6f9a"}[u]+".chunk.css",a=p.p+r,t=document.getElementsByTagName("link"),o=0;o<t.length;o++){var c=(f=t[o]).getAttribute("data-href")||f.getAttribute("href");if("stylesheet"===f.rel&&(c===r||c===a))return e()}var d=document.getElementsByTagName("style");for(o=0;o<d.length;o++){var f;if((c=(f=d[o]).getAttribute("data-href"))===r||c===a)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||a,t=new Error("Loading CSS chunk "+u+" failed.\n("+r+")");t.request=r,delete s[u],i.parentNode.removeChild(i),n(t)},i.href=a,document.getElementsByTagName("head")[0].appendChild(i)}).then(function(){s[u]=0}));var t=l[u];if(0!==t)if(t)e.push(t[2]);else{var r=new Promise(function(e,r){t=l[u]=[e,r]});e.push(t[2]=r);var n,o=document.createElement("script");o.charset="utf-8",o.timeout=120,p.nc&&o.setAttribute("nonce",p.nc),o.src=p.p+"mrstatic/js/"+({2:"BargainMiddlePage",3:"Classify",4:"Country",5:"CourseList",6:"DrawDocument",7:"Examination",8:"MyEdit",9:"Order",10:"Orderinfo",11:"PayOrder",12:"Preferential",13:"SearchResult",14:"ShareCourse",15:"ShopCart",16:"aist-share",17:"coupons",18:"detail",20:"myorders",21:"purchased",23:"search",24:"shareposter",25:"study",26:"togroup",27:"video"}[u]||u)+"."+{0:"cc475f61",1:"5926cefc",2:"47d6d11b",3:"f4b0e95e",4:"2f1e3ba6",5:"ad80ef1f",6:"b607db8f",7:"97026877",8:"d9cf1de7",9:"1956906f",10:"c5a68e88",11:"8534c9f2",12:"b9de8327",13:"82c4db68",14:"543c57d3",15:"d6804bde",16:"cde60f9d",17:"1ee98542",18:"ea824723",20:"21588e23",21:"1623b0b5",23:"f7766add",24:"456c17f8",25:"0512da7d",26:"34d5a4fa",27:"71e4de46",29:"55833d30",30:"5be43a00",31:"00acec59",32:"63ff864e",33:"900c665c"}[u]+".chunk.js",n=function(e){o.onerror=o.onload=null,clearTimeout(c);var r=l[u];if(0!==r){if(r){var t=e&&("load"===e.type?"missing":e.type),n=e&&e.target&&e.target.src,a=new Error("Loading chunk "+u+" failed.\n("+t+": "+n+")");a.type=t,a.request=n,r[1](a)}l[u]=void 0}};var c=setTimeout(function(){n({type:"timeout",target:o})},12e4);o.onerror=o.onload=n,document.head.appendChild(o)}return Promise.all(e)},p.m=f,p.c=t,p.d=function(e,r,t){p.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},p.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},p.t=function(r,e){if(1&e&&(r=p(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(p.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var n in r)p.d(t,n,function(e){return r[e]}.bind(null,n));return t},p.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return p.d(r,"a",r),r},p.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},p.p="/",p.oe=function(e){throw console.error(e),e};var r=window.webpackJsonp=window.webpackJsonp||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var a=0;a<r.length;a++)e(r[a]);var h=n;i()}([])</script><script src="/mrstatic/js/28.421bdc56.chunk.js"></script><script src="/mrstatic/js/main.62a77b84.chunk.js"></script></body></html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
!function(e){function r(r){for(var n,a,d=r[0],f=r[1],i=r[2],u=0,l=[];u<d.length;u++)a=d[u],o[a]&&l.push(o[a][0]),o[a]=0;for(n in f)Object.prototype.hasOwnProperty.call(f,n)&&(e[n]=f[n]);for(s&&s(r);l.length;)l.shift()();return c.push.apply(c,i||[]),t()}function t(){for(var e,r=0;r<c.length;r++){for(var t=c[r],n=!0,a=1;a<t.length;a++){var f=t[a];0!==o[f]&&(n=!1)}n&&(c.splice(r--,1),e=d(d.s=t[0]))}return e}var n={},a={22:0},o={22:0},c=[];function d(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,d),t.l=!0,t.exports}d.e=function(e){var r=[];a[e]?r.push(a[e]):0!==a[e]&&{2:1,3:1,4:1,5:1,6:1,7:1,9:1,11:1,12:1,13:1,14:1,15:1,16:1,17:1,18:1,20:1,21:1,23:1,24:1,25:1,26:1,27:1,29:1,30:1,31:1,32:1,33:1}[e]&&r.push(a[e]=new Promise(function(r,t){for(var n="mrstatic/css/"+({2:"BargainMiddlePage",3:"Classify",4:"Country",5:"CourseList",6:"DrawDocument",7:"Examination",8:"MyEdit",9:"Order",10:"Orderinfo",11:"PayOrder",12:"Preferential",13:"SearchResult",14:"ShareCourse",15:"ShopCart",16:"aist-share",17:"coupons",18:"detail",20:"myorders",21:"purchased",23:"search",24:"shareposter",25:"study",26:"togroup",27:"video"}[e]||e)+"."+{0:"31d6cfe0",1:"31d6cfe0",2:"fc53c3d0",3:"f2f19957",4:"16a64650",5:"85889ffd",6:"2e7d81ca",7:"f2cc3163",8:"31d6cfe0",9:"8bb031ea",10:"31d6cfe0",11:"e5315535",12:"cda7a495",13:"bb7c3056",14:"278ad3b1",15:"3a4dbb7a",16:"bef8c404",17:"2fcc3e06",18:"8d310f0f",20:"3ae12dec",21:"dd7556e0",23:"fab97849",24:"f09a5959",25:"b002c899",26:"49988cae",27:"b57a1aec",29:"4c706a4e",30:"2471f477",31:"0bb224f2",32:"5ed15c7e",33:"ecbb6f9a"}[e]+".chunk.css",o=d.p+n,c=document.getElementsByTagName("link"),f=0;f<c.length;f++){var i=(s=c[f]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(i===n||i===o))return r()}var u=document.getElementsByTagName("style");for(f=0;f<u.length;f++){var s;if((i=(s=u[f]).getAttribute("data-href"))===n||i===o)return r()}var l=document.createElement("link");l.rel="stylesheet",l.type="text/css",l.onload=r,l.onerror=function(r){var n=r&&r.target&&r.target.src||o,c=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");c.request=n,delete a[e],l.parentNode.removeChild(l),t(c)},l.href=o,document.getElementsByTagName("head")[0].appendChild(l)}).then(function(){a[e]=0}));var t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise(function(r,n){t=o[e]=[r,n]});r.push(t[2]=n);var c,f=document.createElement("script");f.charset="utf-8",f.timeout=120,d.nc&&f.setAttribute("nonce",d.nc),f.src=function(e){return d.p+"mrstatic/js/"+({2:"BargainMiddlePage",3:"Classify",4:"Country",5:"CourseList",6:"DrawDocument",7:"Examination",8:"MyEdit",9:"Order",10:"Orderinfo",11:"PayOrder",12:"Preferential",13:"SearchResult",14:"ShareCourse",15:"ShopCart",16:"aist-share",17:"coupons",18:"detail",20:"myorders",21:"purchased",23:"search",24:"shareposter",25:"study",26:"togroup",27:"video"}[e]||e)+"."+{0:"cc475f61",1:"5926cefc",2:"47d6d11b",3:"f4b0e95e",4:"2f1e3ba6",5:"ad80ef1f",6:"b607db8f",7:"97026877",8:"d9cf1de7",9:"1956906f",10:"c5a68e88",11:"8534c9f2",12:"b9de8327",13:"82c4db68",14:"543c57d3",15:"d6804bde",16:"cde60f9d",17:"1ee98542",18:"ea824723",20:"21588e23",21:"1623b0b5",23:"f7766add",24:"456c17f8",25:"0512da7d",26:"34d5a4fa",27:"71e4de46",29:"55833d30",30:"5be43a00",31:"00acec59",32:"63ff864e",33:"900c665c"}[e]+".chunk.js"}(e),c=function(r){f.onerror=f.onload=null,clearTimeout(i);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src,c=new Error("Loading chunk "+e+" failed.\n("+n+": "+a+")");c.type=n,c.request=a,t[1](c)}o[e]=void 0}};var i=setTimeout(function(){c({type:"timeout",target:f})},12e4);f.onerror=f.onload=c,document.head.appendChild(f)}return Promise.all(r)},d.m=e,d.c=n,d.d=function(e,r,t){d.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},d.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.t=function(e,r){if(1&r&&(e=d(e)),8&r)return e;if(4&r&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(d.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)d.d(t,n,function(r){return e[r]}.bind(null,n));return t},d.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(r,"a",r),r},d.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},d.p="/",d.oe=function(e){throw console.error(e),e};var f=window.webpackJsonp=window.webpackJsonp||[],i=f.push.bind(f);f.push=r,f=f.slice();for(var u=0;u<f.length;u++)r(f[u]);var s=i;t()}([]);
//# sourceMappingURL=runtime~main.62f2beae.js.map
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
self.__precacheManifest = [
{
"revision": "69a292f24cf01684f3e8",
"url": "/mrstatic/js/myorders.21588e23.chunk.js"
},
{
"revision": "a1e160f9da0cec735c1e",
"url": "/mrstatic/js/0.cc475f61.chunk.js"
},
{
"revision": "8edaf2ff2566ed17e2dd22cf4f8ad7ae",
"url": "/mrstatic/media/redb_chai_bj@2x.8edaf2ff.png"
},
{
"revision": "d460474a908cc2d67c63",
"url": "/mrstatic/js/BargainMiddlePage.47d6d11b.chunk.js"
},
{
"revision": "c79abf5cb7ae8a82009cf68fe44d1078",
"url": "/mrstatic/media/redb_money_bj@2x.c79abf5c.png"
},
{
"revision": "9a482b6a6a2851eb9d56",
"url": "/mrstatic/js/Classify.f4b0e95e.chunk.js"
},
{
"revision": "6902434f8f18a23319d57d0ac8aaea8c",
"url": "/mrstatic/media/redb_sp_bj@2x.6902434f.png"
},
{
"revision": "a641ac9b606f7ab060ee",
"url": "/mrstatic/js/Country.2f1e3ba6.chunk.js"
},
{
"revision": "79139f6aad350256e151f9f73c226348",
"url": "/mrstatic/media/hb_bj.79139f6a.png"
},
{
"revision": "46bf4ead85006bfed40b",
"url": "/mrstatic/js/CourseList.ad80ef1f.chunk.js"
},
{
"revision": "80011994e30adf599e5f47fcc81bc06d",
"url": "/mrstatic/media/progress-share-bg.80011994.png"
},
{
"revision": "70559589cce9ba888f82",
"url": "/mrstatic/js/DrawDocument.b607db8f.chunk.js"
},
{
"revision": "81a489ac63f2f2df5ab412e0782bd54c",
"url": "/mrstatic/media/kanjia_cg_icon.81a489ac.png"
},
{
"revision": "bbb71af74995c3434dea",
"url": "/mrstatic/js/Examination.97026877.chunk.js"
},
{
"revision": "c680c98e22470e94be27",
"url": "/mrstatic/js/MyEdit.d9cf1de7.chunk.js"
},
{
"revision": "b9b072e1116fd1830cc8f425dc163a6b",
"url": "/mrstatic/media/iconfont.b9b072e1.svg"
},
{
"revision": "21549f965423895702ec",
"url": "/mrstatic/js/Order.1956906f.chunk.js"
},
{
"revision": "6c6651eb532e371714f8",
"url": "/mrstatic/js/Orderinfo.c5a68e88.chunk.js"
},
{
"revision": "258b4b114d3d9be3018cd113b2470a13",
"url": "/mrstatic/media/iconfont.258b4b11.ttf"
},
{
"revision": "6a0af3b93231533c7920",
"url": "/mrstatic/js/PayOrder.8534c9f2.chunk.js"
},
{
"revision": "7aa984cefad739ea18edb76c541aa1fd",
"url": "/mrstatic/media/iconfont.7aa984ce.eot"
},
{
"revision": "aef4b392bfb4e88325ec",
"url": "/mrstatic/js/Preferential.b9de8327.chunk.js"
},
{
"revision": "e0655d4da66dce391e6b5227b400e037",
"url": "/mrstatic/media/iconfont.e0655d4d.woff"
},
{
"revision": "d02f233f05f59d368a78",
"url": "/mrstatic/js/SearchResult.82c4db68.chunk.js"
},
{
"revision": "e1a2c9227576c0d61412",
"url": "/mrstatic/js/33.900c665c.chunk.js"
},
{
"revision": "d73cc80d15d96316f4de",
"url": "/mrstatic/js/ShareCourse.543c57d3.chunk.js"
},
{
"revision": "257831b315aec41d7e39",
"url": "/mrstatic/js/32.63ff864e.chunk.js"
},
{
"revision": "adf6dcb74f05609deb43",
"url": "/mrstatic/js/ShopCart.d6804bde.chunk.js"
},
{
"revision": "8308ba11690a91b877f6",
"url": "/mrstatic/js/31.00acec59.chunk.js"
},
{
"revision": "f0d549af21b17a886eb9",
"url": "/mrstatic/js/aist-share.cde60f9d.chunk.js"
},
{
"revision": "91440335000b6c3bf36b",
"url": "/mrstatic/js/30.5be43a00.chunk.js"
},
{
"revision": "b573f065cd1731c98546",
"url": "/mrstatic/js/coupons.1ee98542.chunk.js"
},
{
"revision": "ac15be779087898ae74b",
"url": "/mrstatic/js/29.55833d30.chunk.js"
},
{
"revision": "753ad7d2c623726d2159",
"url": "/mrstatic/js/detail.ea824723.chunk.js"
},
{
"revision": "7b1d7e35cb93582e1c95",
"url": "/mrstatic/js/28.421bdc56.chunk.js"
},
{
"revision": "37468f1d23ce99ce61c7",
"url": "/mrstatic/js/main.62a77b84.chunk.js"
},
{
"revision": "a158381e0ddcb1d3db70",
"url": "/mrstatic/js/video.71e4de46.chunk.js"
},
{
"revision": "34bd0c306743ff791d16",
"url": "/mrstatic/js/1.5926cefc.chunk.js"
},
{
"revision": "d5b97c707c04d13c5561",
"url": "/mrstatic/js/togroup.34d5a4fa.chunk.js"
},
{
"revision": "befc46c3bd02a63dacc2",
"url": "/mrstatic/js/purchased.1623b0b5.chunk.js"
},
{
"revision": "2ba1b051cd710549cef2",
"url": "/mrstatic/js/runtime~main.62f2beae.js"
},
{
"revision": "2dc90f0f37dfa04c6dc9",
"url": "/mrstatic/js/study.0512da7d.chunk.js"
},
{
"revision": "aa35286c69f052ea69ea",
"url": "/mrstatic/js/search.f7766add.chunk.js"
},
{
"revision": "ac3aed7a62101fb42282",
"url": "/mrstatic/js/shareposter.456c17f8.chunk.js"
},
{
"revision": "257831b315aec41d7e39",
"url": "/mrstatic/css/32.5ed15c7e.chunk.css"
},
{
"revision": "ac3aed7a62101fb42282",
"url": "/mrstatic/css/shareposter.f09a5959.chunk.css"
},
{
"revision": "2dc90f0f37dfa04c6dc9",
"url": "/mrstatic/css/study.b002c899.chunk.css"
},
{
"revision": "d5b97c707c04d13c5561",
"url": "/mrstatic/css/togroup.49988cae.chunk.css"
},
{
"revision": "a158381e0ddcb1d3db70",
"url": "/mrstatic/css/video.b57a1aec.chunk.css"
},
{
"revision": "e1a2c9227576c0d61412",
"url": "/mrstatic/css/33.ecbb6f9a.chunk.css"
},
{
"revision": "befc46c3bd02a63dacc2",
"url": "/mrstatic/css/purchased.dd7556e0.chunk.css"
},
{
"revision": "aa35286c69f052ea69ea",
"url": "/mrstatic/css/search.fab97849.chunk.css"
},
{
"revision": "d02f233f05f59d368a78",
"url": "/mrstatic/css/SearchResult.bb7c3056.chunk.css"
},
{
"revision": "37468f1d23ce99ce61c7",
"url": "/mrstatic/css/main.9977dcb1.chunk.css"
},
{
"revision": "69a292f24cf01684f3e8",
"url": "/mrstatic/css/myorders.3ae12dec.chunk.css"
},
{
"revision": "aef4b392bfb4e88325ec",
"url": "/mrstatic/css/Preferential.cda7a495.chunk.css"
},
{
"revision": "91440335000b6c3bf36b",
"url": "/mrstatic/css/30.2471f477.chunk.css"
},
{
"revision": "8308ba11690a91b877f6",
"url": "/mrstatic/css/31.0bb224f2.chunk.css"
},
{
"revision": "f0d549af21b17a886eb9",
"url": "/mrstatic/css/aist-share.bef8c404.chunk.css"
},
{
"revision": "d460474a908cc2d67c63",
"url": "/mrstatic/css/BargainMiddlePage.fc53c3d0.chunk.css"
},
{
"revision": "adf6dcb74f05609deb43",
"url": "/mrstatic/css/ShopCart.3a4dbb7a.chunk.css"
},
{
"revision": "753ad7d2c623726d2159",
"url": "/mrstatic/css/detail.8d310f0f.chunk.css"
},
{
"revision": "d73cc80d15d96316f4de",
"url": "/mrstatic/css/ShareCourse.278ad3b1.chunk.css"
},
{
"revision": "9a482b6a6a2851eb9d56",
"url": "/mrstatic/css/Classify.f2f19957.chunk.css"
},
{
"revision": "b573f065cd1731c98546",
"url": "/mrstatic/css/coupons.2fcc3e06.chunk.css"
},
{
"revision": "6a0af3b93231533c7920",
"url": "/mrstatic/css/PayOrder.e5315535.chunk.css"
},
{
"revision": "21549f965423895702ec",
"url": "/mrstatic/css/Order.8bb031ea.chunk.css"
},
{
"revision": "bbb71af74995c3434dea",
"url": "/mrstatic/css/Examination.f2cc3163.chunk.css"
},
{
"revision": "70559589cce9ba888f82",
"url": "/mrstatic/css/DrawDocument.2e7d81ca.chunk.css"
},
{
"revision": "46bf4ead85006bfed40b",
"url": "/mrstatic/css/CourseList.85889ffd.chunk.css"
},
{
"revision": "a641ac9b606f7ab060ee",
"url": "/mrstatic/css/Country.16a64650.chunk.css"
},
{
"revision": "ac15be779087898ae74b",
"url": "/mrstatic/css/29.4c706a4e.chunk.css"
},
{
"revision": "7b1d7e35cb93582e1c95",
"url": "/mrstatic/css/28.aebbab68.chunk.css"
},
{
"revision": "0aea54fb490e6fa3dcdbfa5436e01d21",
"url": "/index.html"
}
];
\ No newline at end of file
/**
* Welcome to your Workbox-powered service worker!
*
* You'll need to register this file in your web app and you should
* disable HTTP caching for this file too.
* See https://goo.gl/nhQhGp
*
* The rest of the code is auto-generated. Please don't update this file
* directly; instead, make changes to your Workbox build configuration
* and re-run your build process.
* See https://goo.gl/2aRDsh
*/
importScripts("https://storage.googleapis.com/workbox-cdn/releases/3.6.3/workbox-sw.js");
importScripts(
"/precache-manifest.543dcc7fca119c88406da24906433f0d.js"
);
workbox.clientsClaim();
/**
* The workboxSW.precacheAndRoute() method efficiently caches and responds to
* requests for URLs in the manifest.
* See https://goo.gl/S9QRab
*/
self.__precacheManifest = [].concat(self.__precacheManifest || []);
workbox.precaching.suppressWarnings();
workbox.precaching.precacheAndRoute(self.__precacheManifest, {});
workbox.routing.registerNavigationRoute("/index.html", {
blacklist: [/^\/_/,/\/[^\/]+\.[^\/]+$/],
});
import React from 'react'
import { Modal } from 'antd-mobile'
import './index.scss'
export default function ({
amount,
limit_amount,
onCancel = () => {
},
onConfirm
}) {
const content = (
<>
<div className="end-expansion-alert-ques">
{`你的${amount}元优惠券正在膨胀中,
确定要结束膨胀吗?`}
</div>
<div className="end-expansion-alert-hint">
{`离${limit_amount}元只差一点点了!继续膨胀,优惠更多哦`}
</div>
</>
)
Modal.alert('温馨提示', content, [
{text: '再考虑下', onPress: onCancel, style: {color: '#333'}},
{text: '确定结束膨胀', onPress: onConfirm}
])
}
.am-modal {
width: 300px;
&-title {
font-size: 15px;
}
}
.end-expansion-alert {
&-ques {
width: 200px;
margin: 0 auto 20px;
text-align: center;
color: #666;
font-size: 15px;
}
&-hint {
color: #999;
font-size: 12px;
}
}
import React, {Component} from 'react'
import './index.scss'
import {http} from '@/utils'
import { Link } from "react-router-dom"
import {Toast} from "antd-mobile";
class ExpandActiveToast extends Component {
constructor(props) {
super(props);
this.state = {
expandLength: 0,
isShowExpand:true
}
}
componentDidMount() {
http.get(`${API['base-api']}/sys/deposit/notice`).then((res) => {
if (res.data.errno == 200) {
const {data} = res.data
this.setState({
expandLength: data.num
})
} else {
Toast.info(res.data.msg, 2)
}
})
}
cleseExpand = () => {
this.setState({isShowExpand: false})
}
render() {
return (
<div>
{
this.state.expandLength > 0 && this.state.isShowExpand &&
<div className="expand-active-toast">
<img src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/active19_717/m/guanggao.png" alt=''/>
<div className="expand-toast-swiper">
<p>您有<span className="red">{this.state.expandLength}</span>待支付尾款的课程 再不支付就要过期了!</p>
</div>
<Link to='/final-deposit-order?source=1'>查看</Link>
<img
onClick={e => this.cleseExpand()}
src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/active19_717/m/guanbi.png"
alt=''
/>
</div>
}
</div>
);
}
}
export default ExpandActiveToast
.expand-active-toast {
font-size: 14px;
background-color: #e8f6ff;
display: flex;
justify-content: space-between;
padding: 0 15px;
height: 33px;
line-height: 33px;
margin-bottom: 10px;
.expand-toast-swiper {
width: 240px;
overflow: hidden;
position: relative;
p {
width: 375px;
position: absolute;
-webkit-animation: scollLeft 10s linear 0s infinite;
}
}
.red {
color: #ff3131;
}
img {
width: 15px;
height: 15px;
margin-top: 9px;
}
a {
display: inline-block;
width: 44px;
height: 22px;
background: linear-gradient(90deg, #0099ff 0%, #0080ff 100%);
border-radius: 11px;
color: #fff;
font-size: 12px;
line-height: 22px;
margin-top: 5px;
text-align: center;
}
@-webkit-keyframes scollLeft {
from {
right: -100%;
}
to {
right: 100%;
}
}
@keyframes scollLeft {
from {
right: -100%;
}
to {
right: 100%;
}
}
@-moz-keyframes scollLeft {
from {
right: -100%;
}
to {
right: 100%;
}
}
@-o-keyframes scollLeft {
from {
right: -100%;
}
to {
right: 100%;
}
}
}
......@@ -11,6 +11,7 @@ import { Link } from "react-router-dom"
import { Toast } from 'antd-mobile'
import { connect } from "react-redux";
import TopSwiper from './TopSwiper'
import ExpandActiveToast from './expandActiveToast'
// const animateTypes = Swiper.animateTypes
......@@ -135,6 +136,10 @@ class Index extends Component {
/>
</div>
<div className='zw_height'></div>
<ExpandActiveToast/>
<div className='index-swiper'>
{
this.state.banner && this.state.banner.length > 0 &&
......
......@@ -38,8 +38,11 @@
}
}
.zw_height {
height: 44px;
}
.index-swiper {
margin-top: 44px;
height: 168px;
.swiper-container {
......
import React, {Component} from 'react';
import {http} from '@/utils';
import listFrame from './../listFrame/index';
import './index.scss';
import {Toast} from "antd-mobile"
import {connect} from "react-redux";
import {Link, withRouter} from "react-router-dom"
class ReserveCourse extends Component {
constructor(props) {
super(props);
this.state = {
courseData: [],
isShowMore: false
};
}
componentDidMount() {
this.fetchAICourse();
}
fetchAICourse = () => {
http.get(`${API.home}/sys/pre_coursee`).then(res => {
const {code, data, msg} = res.data;
if (code === 200) {
this.setState({
courseData: data.filter((item, index) => index < 4),
courseDataAll: data
})
} else {
Toast.info(msg, 2);
}
});
}
// 立即付定金
expandPaydj = (courseId) => {
const {user, history} = this.props;
const uid = user && user.data && user.data.uid;
if (!uid) {
this.props.history.push('/passport/login')
} else {
this.props.history.push(
`/deposit-order?oid=${courseId}&source=${2}`,
{
id: courseId,
isexpand: 1,
sourcenum: 2
}
)
}
}
// 立即付尾款
expandPaywk = (courseId, day) => {
const {user, history} = this.props;
const uid = user && user.data && user.data.uid;
if (!uid) {
this.props.history.push('/passport/login')
} else {
Toast.info("付尾款时间将在" + day + "开启", 2);
}
}
// 去学习
tostudy = (courseId) => {
this.props.history.push(`/getDetail?id=${courseId}`)
}
// 查看更多
showMoreData = () => {
this.setState({
isShowMore:!this.state.isShowMore,
courseData: this.state.isShowMore ? this.state.courseDataAll.filter((item, index) => index < 4) : this.state.courseDataAll,
})
}
render() {
const {courseData, isShowMore} = this.state;
return (
<div className='reserve-course-module'>
<CourseList courseData={courseData}
expandPaydj={this.expandPaydj}
expandPaywk={this.expandPaywk}
tostudy={this.tostudy}/>
<button className="more-button" onClick={this.showMoreData}>
{isShowMore ? '收起' : '展开更多'}
</button>
</div>
)
}
}
function CourseList(props) {
const {courseData, expandPaydj, expandPaywk, tostudy} = props
return (
<div className="course-list">
<ul>
{
courseData.map((item, index) => {
return (
<li className="course-item-box" key={index}>
<Link to={`/getDetail?id=${item.course_id}`}>
<div className="top">
<div className="square">
<p className="circular">
到手最低¥<span>{Number(item.price) - Number(item.deduction_amount) - Number(item.limit_amount)}</span>
</p>
</div>
<img className="course-img" src={item.image_name} alt=""/>
</div>
</Link>
<p className="count-price">
=原价¥{item.price}
<span>-抵扣¥<i>{item.deduction_amount}</i></span>
<span>-膨胀券¥<i>{item.limit_amount}</i></span>
</p>
<div className="btn">
{
item.is_buy === 0 &&
<button className="to-expand-buy1"
onClick={() => expandPaydj(item.course_id)}>立即付定金</button>
}
{
item.is_buy === 1 &&
<button className="to-expand-buy2"
onClick={() => expandPaywk(item.course_id, item.final_start_time)}>立即付尾款</button>
}
{
item.is_buy === 2 &&
<button className="to-study"
onClick={() => tostudy(item.course_id)}>开始学习</button>
}
</div>
</li>
)
})
}
</ul>
</div>
)
}
export default listFrame(connect(
state => ({
user: state.user
}),
)(withRouter(ReserveCourse)))
.reserve-course-module {
margin: 20px 15px 5px 20px;
.course-list {
ul {
display: flex;
justify-content: space-between;
flex-direction: row;
flex-wrap: wrap;
.course-item-box {
width: 48%;
padding: 4px;
background-color: #fff;
border-radius: 2px;
margin-bottom: 15px;
text-align: left;
.top {
width: 100%;
height: 108px;
position: relative;
.course-img {
width: 100%;
height: 108px;
}
.square {
background-image: url("https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/active19_1111/course-label-bg.png");
background-repeat: no-repeat;
background-size: cover;
width: 60px;
height: 60px;
position: absolute;
left: 0;
bottom: 0;
.circular {
height: 100%;
width: 100%;
color: #fff;
padding-top: 15px;
text-align: left;
padding-left: 5px;
span {
font-size: 16px;
margin-left: 3px;
}
}
}
}
.count-price {
text-align: left;
color: #555;
margin-top: 8px;
line-height: 15px;
span {
color: #FF4000;
i {
font-size: 16px;
font-style: normal;
margin-left: 3px;
}
}
}
.btn {
width: 100%;
padding: 0 5px;
margin-top: 8px;
margin-bottom: 5px;
button {
width: 100%;
height: 24px;
border-radius: 2px;
font-size: 12px;
color: #fff;
border: none;
}
.to-expand-buy1 {
background: linear-gradient(-90deg, #7800FF 0%, #FF4BF0 100%);
}
.to-expand-buy2 {
background: linear-gradient(-90deg, #FF8C1B 0%, #FF3B05 100%);
}
.to-study {
background: linear-gradient(-90deg, #2ECEF0 0%, #2D56F0 100%);
}
}
}
}
}
.more-button {
display: block;
width: 100px;
height: 27px;
margin: 5px auto 15px;
border: 1px solid #fff;
border-radius: 14px;
font-size: 13px;
font-weight: 300;
color: #fff;
background-color: transparent;
cursor: pointer;
outline: none;
}
}
import React, { Component } from 'react';
import classnames from 'classnames';
import { Link } from "react-router-dom";
import { http } from '@/utils';
import listFrame from './../listFrame/index';
import { Toast } from "antd-mobile";
import ListFrame from './../listFrame/index';
import CourseItem from './../courseItem/index';
import ListHeader from './../listHeader';
import './index.scss';
......@@ -188,10 +190,77 @@ class CourseList extends Component {
});
}
handleToMore = (key) => {
let data = {};
if(this.state[key]['isMore']) {
data[key] = {
isMore: !this.state[key]['isMore'],
course: this.state[key]['courseList'],
courseList: this.state[key]['courseList']
};
this.setState({
...data
});
}else {
if(key === 'group' || key === 'training') {
data[key] = {
isMore: !this.state[key]['isMore'],
course: this.state[key]['courseList'].filter((item, index) => index < 2),
courseList: this.state[key]['courseList']
};
}else {
data[key] = {
isMore: !this.state[key]['isMore'],
course: this.state[key]['courseList'].filter((item, index) => index < 4),
courseList: this.state[key]['courseList']
};
}
this.setState({
...data
});
}
}
toReceiveCoupon(id, key = '') {
http.post(`${API.home}/sys/activity/coupon/receive`, {
course_id: id
}).then(res => {
const { code, msg } = res.data;
if(code === 200) {
Toast.info('领取成功~', 2, null, false);
let obj = {};
obj[key] = {
isMore: this.state[key]['isMore'],
course: this.state[key]['course'].map(item => {
if(item.course_id === id) {
return Object.assign({}, item, {
course_status: 2
});
}
return item;
}),
courseList: this.state[key]['courseList'].map(item => {
if(item.course_id === id) {
return Object.assign({}, item, {
course_status: 2
});
}
return item;
}),
}
this.setState({
...obj
});
} else {
Toast.info(msg, 2, null, false);
}
});
}
render() {
const { basic, advanced, higher, expand, group, training } = this.state;
return (
<div>
<div className="boutique-course">
<ListHeader text="集训营、就业班" size="middle" styles={{margin: '20px 0 15px'}} />
{/* 集训营、就业班 */}
{
......@@ -202,13 +271,18 @@ class CourseList extends Component {
group.course.map(item => (
<CourseItem image={item.image_name} key={item.course_id}>
<div className="coupon-course__footer">
<a href="" className="course-button">立抢超低团购价</a>
<a href="https://q.url.cn/AB8aue?_type=wpa&qidian=true" className="course-button">立抢超低团购价</a>
</div>
</CourseItem>
))
}
</div>
<button className="more-button">展开更多</button>
{
(group.courseList && group.courseList.length > 2) &&
<button className="more-button" onClick={() => this.handleToMore('group')}>
{group.isMore? '展开更多' : '收起'}
</button>
}
</>
}
......@@ -222,23 +296,46 @@ class CourseList extends Component {
training.course.map(item => (
<CourseItem image={item.image_name} key={item.course_id}>
<div className="coupon-course__footer">
<a href="" className={classnames("coupon-course__button", "coupon-course__button--receive")}>
{
item.course_status === 1 &&
<a
className={classnames("coupon-course__button", "coupon-course__button--receive")}
onClick={() => this.toReceiveCoupon(item.course_id, 'training')}
>
<span className="coupon-course__button-price">
<em>¥200</em>
<em>¥{item.coupon}</em>
<i>代金券</i>
</span>
<span className="coupon-course__button-label">立即领券</span>
</a>
}
{
item.course_status === 2 &&
<a className="coupon-course__button">
<span className="coupon-course__button-price">
<em>¥{item.coupon}</em>
<i>代金券</i>
</span>
<span className="coupon-course__button-label">11.11开始使用</span>
</a>
}
</div>
</CourseItem>
))
}
</div>
<button className="more-button">展开更多</button>
{
(training.courseList && training.courseList.length > 2) &&
<button className="more-button" onClick={() => this.handleToMore('training')}>
{training.isMore? '展开更多' : '收起'}
</button>
}
</>
}
{/* AI成长之路--基础 */}
<ListHeader text="AI成长之路" size="middle" styles={{margin: '0 0 15px'}} />
{
(basic.course && basic.course.length > 0) &&
<>
......@@ -262,14 +359,19 @@ class CourseList extends Component {
{
item.type === 1 &&
<div className="coupon-course__footer">
<a href="" className="course-button">1分钱开团</a>
<Link to={`/detail?id=${item.course_id}`} className="course-button">1分钱开团</Link>
</div>
}
</CourseItem>
))
}
</div>
<button className="more-button">展开更多</button>
{
(basic.courseList && basic.courseList.length > 4) &&
<button className="more-button" onClick={() => this.handleToMore('basic')}>
{basic.isMore? '展开更多' : '收起'}
</button>
}
</>
}
......@@ -297,14 +399,19 @@ class CourseList extends Component {
{
item.type === 1 &&
<div className="coupon-course__footer">
<a href="" className="course-button">1分钱开团</a>
<Link to={`/detail?id=${item.course_id}`} className="course-button">1分钱开团</Link>
</div>
}
</CourseItem>
))
}
</div>
<button className="more-button">展开更多</button>
{
(advanced.courseList && advanced.courseList.length > 4) &&
<button className="more-button" onClick={() => this.handleToMore('advanced')}>
{advanced.isMore? '展开更多' : '收起'}
</button>
}
</>
}
......@@ -332,14 +439,19 @@ class CourseList extends Component {
{
item.type === 1 &&
<div className="coupon-course__footer">
<a href="" className="course-button">1分钱开团</a>
<Link to={`/detail?id=${item.course_id}`} className="course-button">1分钱开团</Link>
</div>
}
</CourseItem>
))
}
</div>
<button className="more-button">展开更多</button>
{
(higher.courseList && higher.courseList.length > 4) &&
<button className="more-button" onClick={() => this.handleToMore('higher')}>
{higher.isMore? '展开更多' : '收起'}
</button>
}
</>
}
......@@ -367,27 +479,24 @@ class CourseList extends Component {
{
item.type === 1 &&
<div className="coupon-course__footer">
<a href="" className="course-button">1分钱开团</a>
<Link to={`/detail?id=${item.course_id}`} className="course-button">1分钱开团</Link>
</div>
}
</CourseItem>
))
}
</div>
<button className="more-button">展开更多</button>
{
(expand.courseList && expand.courseList.length > 4) &&
<button className="more-button" onClick={() => this.handleToMore('expand')}>
{expand.isMore? '展开更多' : '收起'}
</button>
}
</>
}
</div>
)
}
}
export default listFrame(CourseList);
\ No newline at end of file
export default ListFrame(CourseList);
\ No newline at end of file
.boutique-course {
padding-bottom: 5px;
}
.group-course__footer {
padding: 10px 0;
}
......@@ -59,11 +63,13 @@
width: 100px;
height: 27px;
margin: 0 auto 15px;
padding: 0;
border: 1px solid #fff;
border-radius: 14px;
font-size: 13px;
font-weight: 300;
color: #fff;
line-height: 27px;
background-color: transparent;
cursor: pointer;
outline: none;
......
import React, { Component } from 'react'
import React, { Component } from 'react';
import { http } from '@/utils';
import RulePopup from './rulePopup/index'
import CoursePopup from './coursePopup/index'
import CourseList from './courseList/index';
import LuckDraw from './luckDraw/index';
import ReserveCourse from './ReserveCourse/index';
import ListHeader from './listHeader/index';
import LevelTest from './levelTest/index';
import RankList from './rankList/index';
......@@ -21,9 +24,25 @@ class BlessingPreheat extends Component {
joinLotteryVisible: false,
timelineShareVisible: false,
showRecordList: false,
isFormal: false, // 1正式 0 预热
}
}
componentDidMount() {
this.fetchUserBlessing();
}
fetchUserBlessing() {
http.get(`${API.home}/sys/user/blessing`).then(res => {
const { code, data } = res.data;
if(code === 200) {
this.setState({
isFormal: data.is_activity
});
}
});
}
handleToHide = (key) => {
let obj = {}
obj[key] = false
......@@ -46,6 +65,13 @@ class BlessingPreheat extends Component {
const {isRule, isCourse, inviteVisible} = this.state
return (
<div id={'blessing-preheat'}>
{/* 幸运大抽奖--预热 */}
<ListHeader text="幸运大抽奖" styles={{margin: '0 0 15px'}} />
<LuckDraw></LuckDraw>
{/*定金--只在预热期间显示*/}
<ListHeader text="预付1元定金,最高可省100元" styles={{margin: '0 0 15px'}} />
<ReserveCourse/>
{/* 精品课程特惠专区 */}
......
import React, { Component } from 'react';
import { http } from '@/utils';
import { Tabs } from 'antd-mobile';
import ListFrame from './../listFrame/index';
import './index.scss';
class LuckDraw extends Component {
constructor(props) {
super(props);
this.state = {
tabs: [],
prizes: []
};
}
componentDidMount() {
this.fetchActivityPrize();
}
fetchActivityPrize = () => {
http.get(`${API.home}/sys/activity/prize_data`).then(res => {
const { code , data: { list = [] } } = res.data;
if(code === 200) {
this.setState({
tabs: list.map(item => {
return {
title: item.date
}
}),
prizes: list
});
}
});
}
render() {
const { tabs, prizes } = this.state;
return (
<div className="luck-draw__container">
<Tabs
tabs={tabs}
tabBarBackgroundColor="transparent"
tabBarUnderlineStyle={{
display: 'none'
}}
>
{
prizes.map(({ son }, index) => {
return (
<div className="tab__body" key={index}>
{
son.map(val => (
<div key={val.id}>
<h2 className="prize__label">
<i className="prize__label-icon"></i>
<span>{val.time}</span>
</h2>
<div className="prize__content">
{
val.data.map((v, k) => (
<div className="prize__container" key={`${val.id}-${k}`}>
<div className="prize__image">
<img src={v.img} alt="image"/>
</div>
<p className="prize__desc">{v.name}</p>
<p className="prize__desc">{v.num}数量)</p>
</div>
))
}
</div>
</div>
))
}
</div>
)
})
}
</Tabs>
</div>
)
}
}
export default ListFrame(LuckDraw);
\ No newline at end of file
.am-tabs {
width: 330px;
margin: 0 auto;
color: #fff;
.am-tabs-tab-bar-wrap {
height: 33px;
border: 1px solid rgba(255, 246, 4, 1);
border-radius: 0 0 6px 6px;
.am-tabs-default-bar {
.am-tabs-default-bar-tab:nth-of-type(3) {
&::after {
display: none;
}
}
.am-tabs-default-bar-tab {
height: auto;
line-height: 1;
&::after {
content: '';
display: block;
position: absolute;
right: 0;
left: unset;
top: 50%;
margin-top: -7px;
width: 1px !important;
height: 14px;
background: #FFF604;
transform: none;
}
}
.am-tabs-default-bar-tab-active {
background: #FFF604;
border-radius: 0 0 6px 6px;
}
}
}
}
.tab__body {
padding-bottom: 19px;
}
.prize__label {
display: flex;
align-items: center;
justify-content: center;
width: 125px;
height: 24px;
margin: 20px auto 0;
border-radius: 12px;
font-size: 12px;
font-weight: 500;
color: #fff;
background: linear-gradient(269deg,rgba(7,240,255,1) 0%,rgba(0,153,255,1) 100%);
}
.prize__label-icon {
width: 12px;
height: 14px;
margin-right: 7px;
background-image: url('https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/active19_1111/icon-clock.png');
background-size: cover;
}
.prize__content {
display: flex;
flex-wrap: nowrap;
padding: 10px 7px 0;
overflow-y: auto;
}
.prize__image {
width: 100px;
height: 78px;
margin: 0 3px 10px;
padding: 2px;
background-image: url('https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/active19_1111/prize-border.png');
background-size: cover;
overflow: hidden;
img {
display: block;
width: 100%;
height: 100%;
}
}
.prize__desc {
width: 100px;
font-size: 12px;
color: #fff;
white-space: nowrap;
text-overflow: ellipsis;
text-align: center;
line-height: 15px;
overflow: hidden;
}
\ No newline at end of file
$bg_type1: #FE6161;
$bg_type2: #E0B97B;
$bg_voucher: #FE6161;
$bg_free: #E0B97B;
$bg_expand: #8361FE;
.coupon {
position: relative;
margin-bottom: 15px;
......@@ -27,13 +28,14 @@ $bg_type2: #E0B97B;
}
}
.course-title{
.course-title {
width: 68.37%;
margin: 0 auto 4px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: $font_16;
text-align: center;
}
.expire {
......@@ -43,14 +45,18 @@ $bg_type2: #E0B97B;
}
&.coupon-type1 {
background: $bg_type1;
background: $bg_voucher;
}
&.coupon-type2 {
background: $E0B97B;
}
&.invalid{
&.coupon-type4 {
background: $bg_expand;
}
&.invalid {
background: $color_999;
}
......@@ -87,6 +93,44 @@ $bg_type2: #E0B97B;
transform: translateY(50%);
}
}
.progress-container {
width: 299px;
margin: 0 auto;
.denomination {
font-size: 15px;
line-height: 1.3em;
color: #F8E71C;
span{
transform: scale(0.9);
}
}
.progress-bar-container {
position: relative;
height: 7px;
background: #5C2FFF;
border-radius: 4px;
overflow: hidden;
margin-bottom: 6px;
.progress-bar {
position: absolute;
left: 0;
top: 0;
height: 100%;
background: #F8E71C;
border-radius: 4px;
}
}
.money {
display: flex;
justify-content: space-between;
}
}
}
.coupon-des {
......@@ -117,5 +161,15 @@ $bg_type2: #E0B97B;
background: transparent;
-webkit-appearance: none;
}
.stop-expanding {
padding: 3px 8px;
border: 1px solid #FF3131;
border-radius: 10px;
-webkit-appearance: none;
background: transparent;
color: #FF3131;
font-size: 10px;
}
}
}
import React, { PureComponent } from 'react'
import './coupon.scss'
import classnames from 'classnames'
import { http } from "@/utils"
import showAlert from '@common/deposit/end-expansion-alert'
import {Toast} from 'antd-mobile'
class Coupon extends PureComponent {
VOUCHER = 1 //代金券
FREE = 2 //免单券
EXPAND = 4 //膨胀全
pick = () => {
let {useCoupon, invalid} = this.props
!invalid && useCoupon && useCoupon(this.props.id)
......@@ -14,33 +22,171 @@ class Coupon extends PureComponent {
this.props.useCoupon(this.props.id)
}
ExchangeCourse = (e) => {
this.props.toExchangeCourse(e,this.props.code)
this.props.toExchangeCourse(e, this.props.code)
}
stopExpanding = (id, e) => {
const {amount, limit_amount} = this.props
e.stopPropagation()
showAlert({
amount,
limit_amount,
onConfirm: () => {
http.post(`${API.home}/m/end_expansion`, {
id
})
.then(res => {
const {data} = res
if (data.code == 200) {
this.props.endExpansion(id)
}else {
Toast.info(data.msg)
}
})
}
})
}
render() {
let {
ctype,
amount,
format_expire_time,
limit_course,
invalid,
course_title,
showUseButton,
id,
code,
selectedCouponId,
showUseButton
format_expire_time,
start_amount,
limit_amount
} = this.props
return (
<li className='coupon' onClick={this.pick}>
<div className={classnames('coupon-info', invalid ? 'invalid' : `coupon-type${ctype}`)}>
<p className='type'>{ctype === 1 ? '代金券' : '课程券'}</p>
let top, bottom
switch (ctype) {
case this.VOUCHER:
top = (
<>
<p className='denomination'>{amount} <span></span></p>
<p className='expire'>有效期至:{format_expire_time}</p>
</>
)
bottom = (
<>
<span className={'limit'}>可用于大于代金券金额的课程</span>
{
ctype === 1 ? <p className='denomination'>{amount} <span></span></p>
: <p className='course-title'>{course_title}</p>
showUseButton && ctype == this.VOUCHER &&
<button
className='use'
onClick={this.GoToUse}
>立即使用
</button>
}
</>
)
break
case this.FREE:
top = (
<>
<p className='course-title'>{course_title}</p>
<p className='expire'>有效期至:{format_expire_time}</p>
</>
)
bottom = (
<>
<span className={'limit'}>{`仅适用于《${course_title}》`}</span>
{
showUseButton && ctype == this.FREE &&
<button
className='use'
onClick={(e) => this.ExchangeCourse(e)}
>立即兑换
</button>
}
</>
)
break
case this.EXPAND:
if (!start_amount) {
top = (
<>
<p className='denomination'>{amount} <span></span></p>
<p className='expire'>有效期至:{format_expire_time}</p>
</>
)
} else {
top = (
<>
<div className="progress-container">
<p className='denomination'>{amount} <span></span></p>
<div className={'progress-bar-container'}>
<span className={'progress-bar'}
style={{width: `${Math.round((amount - start_amount) / limit_amount * 100)}%`}}
></span>
</div>
<div className={'money'}>
<span>{start_amount}</span>
<span>{limit_amount}</span>
</div>
</div>
</>
)
}
bottom = (
<>
<span className={'limit'}>全场通用</span>
{
start_amount
&& <button className='stop-expanding'
onClick={this.stopExpanding.bind(this, id)}>立即结束膨胀</button>
}
</>
)
break
}
return (
<BaseCoupon
{...this.props}
top={top}
VOUCHER={this.VOUCHER}
FREE={this.FREE}
EXPAND={this.EXPAND}
pick={this.pick}
bottom={bottom}
/>
)
}
}
function BaseCoupon(
{
pick,
ctype,
invalid,
top,
VOUCHER,
FREE,
EXPAND,
selectedCouponId,
id,
bottom
}) {
let couponTypes = {
[VOUCHER]: '代金券',
[FREE]: '课程券',
[EXPAND]: '膨胀券'
}
return (
<li className='coupon' onClick={pick}>
<div className={classnames('coupon-info', invalid ? 'invalid' : `coupon-type${ctype}`)}>
<p className='type'>{couponTypes[ctype]}</p>
{top}
{
selectedCouponId === id &&
<i className={classnames('iconfont icondanseshixintubiao-5', {
......@@ -57,30 +203,10 @@ class Coupon extends PureComponent {
</ul>
</div>
<div className="coupon-des">
<span className='limit'>{
limit_course === 0 ? '可用于大于代金券金额的课程' : `仅适用于《${course_title}》`
}</span>
{
showUseButton && ctype == 1 &&
<button
className='use'
onClick={this.GoToUse}
>立即使用
</button>
}
{
showUseButton && ctype == 2 &&
<button
className='use'
onClick={(e)=>this.ExchangeCourse(e)}
>立即兑换
</button>
}
{bottom}
</div>
</li>
);
}
)
}
export default Coupon
import React, { PureComponent } from 'react'
import './coupon.scss'
import classnames from 'classnames'
class Coupon extends PureComponent {
VOUCHER = 1 //代金券
FREE = 2 //免单券
EXPAND = 4 //膨胀全
pick = () => {
let {useCoupon, invalid} = this.props
!invalid && useCoupon && useCoupon(this.props.id)
}
GoToUse = () => {
this.props.useCoupon(this.props.id)
}
ExchangeCourse = (e) => {
this.props.toExchangeCourse(e, this.props.code)
}
render() {
let {
ctype,
amount,
format_expire_time,
limit_course,
invalid,
course_title,
id,
code,
selectedCouponId,
showUseButton
} = this.props
return (
<li className='coupon' onClick={this.pick}>
<div className={classnames('coupon-info', invalid ? 'invalid' : `coupon-type${ctype}`)}>
<p className='type'>{ctype === this.VOUCHER ? '代金券' : '课程券'}</p>
{
ctype === this.VOUCHER ? <p className='denomination'>{amount} <span>元</span></p>
: <p className='course-title'>{course_title}</p>
}
<p className='expire'>有效期至:{format_expire_time}</p>
{
selectedCouponId === id &&
<i className={classnames('iconfont icondanseshixintubiao-5', {
check: !invalid
})}
/>
}
<ul>
{
new Array(19).fill('a').map((item, index) => {
return <li key={index}/>
})
}
</ul>
</div>
<div className="coupon-des">
<span className='limit'>{
limit_course === 0 ? '可用于大于代金券金额的课程' : `仅适用于《${course_title}》`
}</span>
{
showUseButton && ctype == this.VOUCHER &&
<button
className='use'
onClick={this.GoToUse}
>立即使用
</button>
}
{
showUseButton && ctype == this.FREE &&
<button
className='use'
onClick={(e) => this.ExchangeCourse(e)}
>立即兑换
</button>
}
</div>
</li>
)
}
}
function BaseCoupon(
{
pick,
ctype,
invalid,
top,
VOUCHER,
FREE,
EXPAND,
limitMessage,
bottomButton
}) {
let couponTypes = {
[VOUCHER]: '代金券',
[FREE]: '课程券',
[EXPAND]: '膨胀券'
}
return (
<li className='coupon' onClick={pick}>
<div className={classnames('coupon-info', invalid ? 'invalid' : `coupon-type${ctype}`)}>
<p className='type'>{couponTypes[ctype]}</p>
{top}
<ul>
{
new Array(19).fill('a').map((item, index) => {
return <li key={index}/>
})
}
</ul>
</div>
<div className="coupon-des">
<span className='limit'>
{limitMessage}
</span>
{bottomButton}
</div>
</li>
)
}
export default Coupon
import React, {PureComponent} from 'react';
import React, { PureComponent } from 'react'
import './index.scss'
import RedeemBar from "../RedeemBar";
import RedeemBar from "../RedeemBar"
import Coupon from '../Coupon'
import {http, getParam} from '@/utils'
import {WithFullSize} from '@/HOCs'
import {Toast} from 'antd-mobile'
import {isEmpty} from 'lodash'
import {connect} from 'react-redux';
import { http, getParam } from '@/utils'
import { WithFullSize } from '@/HOCs'
import { Toast } from 'antd-mobile'
import { isEmpty } from 'lodash'
import { connect } from 'react-redux'
@connect()
class UseCoupon extends PureComponent {
......@@ -30,7 +30,7 @@ class UseCoupon extends PureComponent {
const {state} = this.props.location
if (state && state.from) {
if (state.from === '/my') {
this.getMyCoupons();
this.getMyCoupons()
this.setState({
showUseButton: true
})
......@@ -38,7 +38,7 @@ class UseCoupon extends PureComponent {
if (!this.state.courseId) {
location.state && location.state.from ? history.replace(location.state.from) : history.goBack()
}
this.getAllCoupons();
this.getAllCoupons()
}
}
}
......@@ -50,7 +50,7 @@ class UseCoupon extends PureComponent {
// 兑换
exchange = () => {
const {location: {state = {}}} = this.props;
const {location: {state = {}}} = this.props
if (this.state.redeemCode !== '') {
http.post(`${API.home}/m/coupon/exchange`, {
code: this.state.redeemCode,
......@@ -88,7 +88,7 @@ class UseCoupon extends PureComponent {
invalid_coupons: [...this.state.invalid_coupons, coupon],
showUseButton: null,
redeemCode: ''
});
})
} else {
this.setState({
valid_coupons: [...this.state.valid_coupons, coupon],
......@@ -109,45 +109,72 @@ class UseCoupon extends PureComponent {
}
getMyCoupons = () => {
http.get(`${API.home}/m/coupon/all`)
.then(res => {
const data = res.data
if (data.code === 200) {
this.setState({
couponList: isEmpty(data.data) ? [] : data.data
})
Promise.all([
http.get(`${API.home}/m/coupon/all`),
http.get(`${API.home}/m/coupon/expansion`)
]).then((coupons) => {
let myCoupons = []
const [allCoupons, expansionCoupons] = coupons
const {data: all} = allCoupons
const {data: expansion} = expansionCoupons
if (all.code == 200) {
Array.isArray(all.data) && (myCoupons = myCoupons.concat(all.data))
} else {
Toast.info(data.msg)
Toast.info(all.msg)
}
if (expansion.code == 200) {
Array.isArray(expansion.data)
&& (expansion.data = expansion.data.map(item => (item.ctype = 4, item)))
&& (myCoupons = myCoupons.concat(expansion.data))
} else {
Toast.info(expansion.msg)
}
this.setState({
couponList: myCoupons
})
})
}
getAllCoupons = () => {
http.post(`${API.home}/m/coupon/select`, {course_id: this.state.courseId})
.then(res => {
const data = res.data
if (data.code === 200) {
const inuse_coupon = data.data['inuse_coupon'];
Promise.all([
http.post(`${API.home}/m/coupon/select`, {course_id: this.state.courseId}),
http.get(`${API.home}/m/coupon/expansion`)
]).then((coupons) => {
const [selectCoupons, expansionCoupons] = coupons
const {data: select} = selectCoupons
const {data: expansion} = expansionCoupons
if (select.code === 200) {
const inuse_coupon = select.data['inuse_coupon']
this.setState({
valid_coupons: inuse_coupon
? [...inuse_coupon, ...data.data.valid_coupons]
: data.data.valid_coupons,
invalid_coupons: data.data.invalid_coupons,
? [...inuse_coupon, ...select.data.valid_coupons]
: select.data.valid_coupons,
invalid_coupons: select.data.invalid_coupons,
selectedCouponId: inuse_coupon.length ? inuse_coupon[0].id : 0
})
} else {
Toast.info(data.msg)
}
if (expansion.code == 200) {
Array.isArray(expansion.data)
&& (expansion.data = expansion.data.map(item => (item.ctype = 4, item)))
&& (this.setState({
valid_coupons: this.state.valid_coupons.concat(expansion.data)
}))
} else {
Toast.info(expansion.msg)
}
})
}
// 立即兑换课程
toExchangeCourse = (e, code) => {
e.stopPropagation();
e.stopPropagation()
http.post(`${API['base-api']}/pay/miandan/${code}`, {}).then(res => {
const data = res.data
if (data.errno === 200) {
......@@ -163,7 +190,7 @@ class UseCoupon extends PureComponent {
}
useCoupon = val => {
const {history, dispatch} = this.props
const {history} = this.props
const coupon = this.state.couponList.find(item => item.id === val)
if (val) {
......@@ -172,8 +199,8 @@ class UseCoupon extends PureComponent {
if (coupon['limit_course'] === 0) {
history.push(`/classify`)
} else {
history.push(`/detail?id=${coupon['limit_course']}`);
return false;
history.push(`/detail?id=${coupon['limit_course']}`)
return false
}
} else {
......@@ -233,7 +260,7 @@ class UseCoupon extends PureComponent {
// 开始学习
toStudy = (vCourseId, isHaveVideo) => {
const {history} = this.props;
const {history} = this.props
if (isHaveVideo == 0) {
Toast.info('尚未开课,开课后立即上传课程~', 2)
} else {
......@@ -251,6 +278,18 @@ class UseCoupon extends PureComponent {
})
}
endExpansion = id => {
this.setState({
couponList: this.state.couponList.map(item => {
if (item.id === id) {
delete item.start_amount
}
return item
})
})
}
render() {
const {state} = this.props.location
const {showUseButton, selectedCouponId} = this.state
......@@ -273,6 +312,7 @@ class UseCoupon extends PureComponent {
select={this.select}
useCoupon={this.useCoupon}
toExchangeCourse={this.toExchangeCourse}
endExpansion={this.endExpansion}
/>
{
this.state.invalid_coupons.length > 0 &&
......@@ -296,7 +336,7 @@ class UseCoupon extends PureComponent {
courseCouponData={this.state.courseCouponData}/>
}
</div>
);
)
}
}
......@@ -351,4 +391,4 @@ function FreeCouponCourse(props) {
)
}
export default WithFullSize(UseCoupon);
\ No newline at end of file
export default WithFullSize(UseCoupon)
......@@ -243,6 +243,41 @@ class BtnStatus extends Component {
})
}
// 付定金 付尾款
expandPay = (info,type)=>{
// type 等于1是定金 等于2是尾款
const {user, history} = this.props;
const uid = user && user.data && user.data.uid;
if (!uid) {
this.props.history.push('/passport/login')
} else {
if(type == 1){
this.props.history.push(
`/deposit-order?oid=${getParam('id')}&source=${1}`,
{
id: getParam('id'),
isexpand: 1,
sourcenum: 1
}
)
} else {
let timeStamp = Date.parse(new Date()) / 1000;
if (timeStamp >= info.start_timestamp) {
this.props.history.push(
'/final-deposit-order?source=1',
{
id: getParam('id'),
sourcenum: 1
}
)
} else {
Toast.info("付尾款时间将在" + info.final_start_time + "开启",2);
}
}
}
}
render() {
// data 课程信息;barInfo 砍价信息
const { user = {}, toCart } = this.props;
......@@ -271,6 +306,22 @@ class BtnStatus extends Component {
</div>
}
{/* 定金课程 is_deposit 是否定金课程 0-否 1-付定金 2-付尾款*/}
{
info.is_baoming === 0 && info.is_deposit != 0 &&
<div className='btns-box'>
<a className='consult consult-m' href="https://q.url.cn/AB8aue?_type=wpa&qidian=true">
<i className='iconfont iconerji' />
<span>课程咨询</span>
</a>
<div className='btn btn-m bg-FD7700' onClick={()=>this.expandPay(info.deposit_info,info.is_deposit)}>
{info.is_deposit == 1 ? '立即付定金':'立即付尾款'}
</div>
</div>
}
{/*已购买*/}
{
info.is_baoming === 1 &&
......
import React, {Component} from 'react'
import './index.scss'
import {connect} from "react-redux"
import {withRouter} from 'react-router-dom'
import {compose} from "redux"
class Deposit extends Component {
constructor(props) {
super(props)
this.state = {}
}
render() {
const {courseInfo} = this.props;
let info = ''
if (courseInfo) {
info = courseInfo.deposit_info
}
return (
<div className="buy-expand">
<p className="buy-time">付定金时间:{info.deposit_start_time}-{info.deposit_end_time}</p>
<p className="buy-time">付尾款时间:{info.final_start_time}-{info.final_end_time}</p>
<div className="expand-bgimg">
<img
className="four-year"
src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/active19_1111/m/dj-1111.png"
alt=''
/>
<span className="dingjin">定金{info.deposit_amount}元,可抵扣{info.deduction_amount}</span>
<p className="small">
到手价最低:¥
<span>{info.low_price}</span>
</p>
<p className="else-tip">另可获得最高{info.deposit_coupon}元代金券进行叠加</p>
</div>
</div>
);
}
}
export default compose(
connect(
state => ({
user: state.user
}),
null
),
withRouter
)(Deposit)
.buy-expand {
margin-top: 5px;
.buy-time {
color: #999;
font-size: 12px;
text-align: left;
padding-left: 15px;
margin-bottom: 8px;
}
.expand-bgimg {
position: relative;
width: 100%;
height: 70px;
background-size: cover;
background-image: url("https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/active19_717/m/detail-expand-bg.png");
.four-year {
width: 104px;
height: 32px;
position: absolute;
left: 12px;
top: 7px;
}
.dingjin {
color: #f5f5f5;
font-size: 15px;
position: absolute;
right: 12px;
top: 20px;
}
.small {
color: #f5f5f5;
font-size: 14px;
position: absolute;
left: 12px;
bottom: 6px;
span {
font-size: 18px;
}
}
.else-tip {
color: #f5f5f5;
font-size: 12px;
position: absolute;
right: 12px;
bottom: 10px;
}
}
}
......@@ -10,6 +10,7 @@ import Single from "./single"
import SingleSuccess from './single/singleSuccess';
import BtnStatus from "./btnstatus"
import Barrage from './barrage'
import Deposit from './deposit'
import {connect} from "react-redux"
import {getCourses, addCourseToCart} from "./actions"
import {getParam, http, browser, wxShare} from "@/utils"
......@@ -19,6 +20,7 @@ import {delCountryNum} from './../country/countryRedux';
import RedPacket from './redPacket';
import {Link} from "react-router-dom";
import ExpandActiveToast from "../Index/expandActiveToast";
class Detail extends Component {
......@@ -475,6 +477,10 @@ class Detail extends Component {
cart={true}
toHref={href}
/>
<ExpandActiveToast/>
<CallApp className='toapp' path={`/detail/id=${getParam('id')}`} />
{/*弹幕*/}
......@@ -500,10 +506,13 @@ class Detail extends Component {
<span className="old">¥{course_info.price0}</span>
</p>
}
{/*{*/}
{/*course_info.is_baoming === 1 &&*/}
{/*<span className="isbuy">已购买</span>*/}
{/*}*/}
{
!!course_info.is_deposit && course_info.is_deposit!= 0 &&
<div className="openExpand">
支付定金¥{course_info.deposit_info.deposit_amount},可抵扣¥{course_info.deposit_info.deduction_amount}
</div>
}
</div>
</div>
</div>
......@@ -550,6 +559,15 @@ class Detail extends Component {
</div>
}
{/*定金相关信息*/}
{
!!course_info.is_deposit && course_info.is_deposit!= 0 &&
<Deposit courseInfo={course_info}/>
}
{/*服务承诺*/}
<div className='promise'>
<label>服务承诺</label>
......
......@@ -222,4 +222,11 @@
}
}
}
.openExpand {
font-size: 14px;
color: #ff2121;
font-weight: 500;
width: 215px;
}
}
\ No newline at end of file
import React, {Component} from 'react'
import './callback.scss'
import {http, getParam} from '@/utils'
import {Toast} from 'antd-mobile'
import {connect} from "react-redux";
class ExpandCallback extends Component {
state = {
data: ''
}
componentDidMount() {
this.getIndexData()
}
// 获取膨胀券相关
getIndexData = () => {
http.post(`${API['base-api']}/m/deposit/coupon`, {order_id: getParam('order_id')}).then((res) => {
if (res.data.errno == 200) {
const {data} = res.data
this.setState({
data: data,
})
} else {
Toast.info(res.data.msg, 2)
}
})
}
// 邀请好友助力
invitation = (url) => {
const {user, history} = this.props;
const uid = user && user.data && user.data.uid;
if (!uid) {
this.props.history.push('/passport/login')
} else {
window.location.href = url
}
}
render() {
let data = this.state.data
return (
<div className="callback-box">
<div className="banner"></div>
<div className="content">
<div className="title">恭喜你,获得一张</div>
<div className="coupon">
<p className="coupon-name">膨胀券</p>
<p className="coupon-price"><span>{data.amount}</span>元</p>
<p className="coupon-time">有效期至:{data.expire_time}</p>
</div>
<div className="tip">
<ul>
{
new Array(19).fill('1').map((item, index) => {
return <li key={index}/>
})
}
</ul>
全场通用
</div>
<div className="expand">
<span className="expand-small">{data.amount}</span>
<img src="https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/active19_717/m/expand.png" alt=""/>
<span className="expand-big">{data.limit_amount}</span>
</div>
<button className="invitation"
onClick={() => this.invitation(data.share_url)}>邀请好友助力,{data.amount}元变{data.limit_amount}
</button>
<div className="active-time">活动时间:{data.start_time}-{data.end_time}</div>
<div className="active-tip">送助力好友{data.limit_amount}元!</div>
</div>
</div>
)
}
}
export default connect(
state => ({
user: state.user
}),
)(ExpandCallback)
.callback-box {
width: 100%;
height: 100%;
position: relative;
.banner {
width: 100%;
height: 258px;
background-image: url("https://julyedu-cdn.oss-cn-beijing.aliyuncs.com/active19_717/m/bg-img.png");
background-repeat: no-repeat;
background-size: contain;
}
.content {
position: absolute;
top: 13px;
left: 10px;
width: 355px;
background-color: #fff;
border-radius: 4px;
box-shadow: 0 3px 6px 0 rgba(0, 0, 0, .06);
padding: 18px 10px 25px 10px;
.title {
text-align: center;
color: #FF3131;
font-size: 18px;
font-weight:500;
}
.coupon {
background-color: #8361FE;
width: 335px;
height: 95px;
border-radius: 3px 3px 0 0;
margin-top: 10px;
padding: 10px 12px;
color: #fff;
p {
width: 100%;
text-align: center;
font-size: 12px;
}
.coupon-name {
text-align: left;
font-size: 14px;
height: 16px;
line-height: 16px;
}
.coupon-price {
height: 28px;
line-height: 28px;
span {
font-size: 26px;
}
}
.coupon-time {
margin-top: 3px;
}
}
.tip {
width: 335px;
height: 37px;
padding-left: 12px;
text-align: left;
font-size: 12px;
color: #666;
line-height: 37px;
background-color: #fff;
box-shadow: 0 2px 6px 0 rgba(0, 0, 0, .1);
border-radius: 0 0 3px 3px;
position: relative;
ul {
position: absolute;
top: -5px;
left: 0;
width: 100%;
display: flex;
justify-content: space-around;
li {
width: 10px;
height: 10px;
border-radius: 50%;
background-color: #fff;
}
}
}
.expand {
color: #FF3131;
margin-top: 15px;
font-size: 22px;
text-align: center;
img {
margin: 0 15px;
}
.expand-big {
font-size: 30px;
}
}
.invitation {
width: 320px;
height: 44px;
background-color: #8361FE;
border-radius: 4px;
font-size: 16px;
color: #fff;
margin-top: 15px;
border: none;
}
.active-time {
color: #999;
font-size: 14px;
margin-top: 10px;
text-align: center;
}
.active-tip {
color: #8361FE;
font-size: 16px;
margin-top: 13px;
text-align: center;
}
}
}
......@@ -16,6 +16,7 @@ const alert = Modal.alert
@connect()
class MyOrders extends Component {
page = 1
constructor(props) {
super(props)
this.state = {
......@@ -31,7 +32,7 @@ class MyOrders extends Component {
}
getMore = debounce(() => {
if(this.state.data.length % 10 === 0){
if (this.state.data.length % 10 === 0) {
this.getList(++this.page)
}
}, 200)
......@@ -74,7 +75,7 @@ class MyOrders extends Component {
}
toCourseDetail = (id) => {
const { dispatch, history } = this.props;
const {dispatch, history} = this.props;
// dispatch(getCourses(id, () => {
history.push(`/detail?id=${id}`);
return false;
......@@ -88,7 +89,7 @@ class MyOrders extends Component {
<HeaderBar title='我的订单' arrow={true} cart={false}></HeaderBar>
<Loading isLoading={this.state.isLoading}>
{
this.state.data && JSON.stringify(this.state.data) !== '[{}]'?
this.state.data && JSON.stringify(this.state.data) !== '[{}]' ?
<InfiniteScroll
pageStart={0}
hasMore={true}
......@@ -104,10 +105,9 @@ class MyOrders extends Component {
item.course && item.course.length > 0 && item.course.map((item, index) => {
const Info = (
<div className="order-info">
<p className='order-title text-overflow-one' onClick={() => this.toCourseDetail(item.course_id)}>
{/* <Link to={`/detail?id=${item.course_id}`}> */}
<p className='order-title text-overflow-one'
onClick={() => this.toCourseDetail(item.course_id)}>
{item.course_title}
{/* </Link> */}
</p>
<p className='order-content text-overflow-2'>{item.description}</p>
<p className='order-des'>
......@@ -133,6 +133,14 @@ class MyOrders extends Component {
}
<PayInfo item={item} cancel={this.cancel}/>
{
item.type == 5 && item.is_buy == 0 &&
<div className={'expand-pay-wk'}>
<span className={'expand-pay-time'}>{item.final_end_time}结束付尾款</span>
<span>还需支付尾款</span>
</div>
}
</div>
)
})
......@@ -167,11 +175,20 @@ function OrderInfo(props) {
}
function PayInfo(props) {
// type 0普通订单 1团购 2小团 3砍价 4单集购买 5定金课定金 6定金课尾款
let type = ''
if (props.item.type == 5) {
type = '(定金)'
}
if (props.item.type == 6) {
type = '(尾款)'
}
return (
<div className='order-btm'>
<div className='price-info'>
<p>
<span className='payable'>应付:</span>
<span className='payable'>应付{type}</span>
<span className='price'>¥{props.item.pay_amount}</span>
</p>
<p>
......
......@@ -25,7 +25,8 @@
font-size: 14px;
color: $redprice;
}
.oid-success{
.oid-success {
font-size: 14px;
color: $color_333;
}
......@@ -37,8 +38,9 @@
background-color: $bg_fff;
border-bottom: 1px solid $border_e7eaf1;
}
.order-info {
.order-des{
.order-des {
position: absolute;
bottom: 0;
}
......@@ -53,7 +55,7 @@
justify-content: space-between;
.price-info {
width: 120px;
width: 150px;
display: flex;
flex-direction: column;
align-self: center;
......@@ -105,6 +107,26 @@
}
}
}
.expand-pay-wk {
height: 35px;
background-color: $bg_fff;
line-height: 35px;
padding: 0 10px;
font-size: 12px;
display: flex;
justify-content: space-between;
border-top: 1px solid #E7EAF1;
span {
color: #999;
}
.expand-pay-time {
color: #09f;
}
}
}
.cart-tip {
......
.order-wrapper {
width: 100%;
height: 100vh;
margin-bottom: 50px;
background-color: $bg_f5f5f5;
.order-tab {
color: $black;
background: $bg_f7f9fc;
}
.order-information {
display: flex;
width: 100%;
overflow: hidden;
padding: 29px 15px;
color: $color_555;
background-color: $bg_fff;
position: relative;
}
.order-information::before {
content: '';
left: 0;
right: 0;
bottom: 0;
height: 2px;
position: absolute;
background: -webkit-repeating-linear-gradient(135deg, #ff6c6c 0, #ff6c6c 20%, transparent 0, transparent 25%, #1989fa 0, #1989fa 45%, transparent 0, transparent 50%);
background: repeating-linear-gradient(-45deg, #ff6c6c 0, #ff6c6c 20%, transparent 0, transparent 25%, #1989fa 0, #1989fa 45%, transparent 0, transparent 50%);
background-size: 80px;
}
.order-information2 {
height: 80px;
background-color: #FFF;
margin-top: 8px;
position: relative;
.user-icon {
font-size: 28px;
flex-basis: 40px;
}
.order-cell {
height: 50px;
font-size: 13px;
color: $color_333;
line-height: 20px;
flex: 1 1 auto;
.name {
margin-bottom: 10px;
}
}
}
.order-information2::before {
content: '';
left: 0;
right: 0;
bottom: 0;
height: 2px;
position: absolute;
background: -webkit-repeating-linear-gradient(135deg, #ff6c6c 0, #ff6c6c 20%, transparent 0, transparent 25%, #1989fa 0, #1989fa 45%, transparent 0, transparent 50%);
background: repeating-linear-gradient(-45deg, #ff6c6c 0, #ff6c6c 20%, transparent 0, transparent 25%, #1989fa 0, #1989fa 45%, transparent 0, transparent 50%);
background-size: 80px;
}
.order-addsize {
font-size: 22px !important;
margin-bottom: 0px;
height: 22px;
color: $active;
line-height: 22px;
}
.order-next {
line-height: 22px;
margin-bottom: 0px;
}
.order-list {
margin-top: 8px;
background-color: #F5F5F5;
.public-content {
padding: 10px 15px;
}
}
.order-infotext {
flex: 1;
height: 22px;
line-height: 22px;
margin-left: 10px;
font-size: $font_14;
color: $color_555;
}
.order-info {
color: $color_666;
font-size: $font_14;
min-width: 160px;
flex: 1 1 auto;
display: flex;
flex-direction: column;
justify-content: space-around;
.order-title {
color: $color_333;
font-size: $font_16;
}
.order-content {
color: $color_666;
font-size: $font_14;
line-height: 18px;
}
.order-newprice {
color: $redprice;
font-size: $font_16;
margin-right: 8px;
}
.price-des{
color: #999;
font-size: 11px;
}
}
.order-bar {
width: 100%;
position: fixed;
bottom: 0;
z-index: 2;
height: 50px;
display: flex;
font-size: 14px;
align-items: center;
background-color: $bg_fff;
}
.order-course {
margin-left: 20px;
.order-course-text {
font-size: $font_16;
color: $color_333;
}
}
.order-bar-text {
flex: 1;
text-align: right;
color: #323233;
padding-right: 20px;
.order-amount {
font-size: $font_14;
color: $color_333;
.order-amount-price {
color: $redprice;
}
}
.order-preprice {
font-size: $font_12;
color: $color_555;
}
}
.order-button {
width: 110px;
height: 50px;
display: inline-block;
padding: 0;
background-color: $bg_ff9898;
color: $white;
line-height: 48px;
font-size: 16px;
border-radius: 0px;
text-align: center;
box-sizing: border-box;
-webkit-appearance: none;
-webkit-text-size-adjust: 100%;
border: 1px solid transparent;
}
.has-info {
background-color: #FF3131;
}
.v-list-item {
margin-top: 8px;
padding: 10px 15px 0 15px;
.content {
border-bottom: none;
}
}
.order-prefer {
.am-list-body{
&::after{
display: none;
}
}
.am-list-content {
font-size: 15px !important;
}
.am-list-line {
padding: 0 15px;
}
}
.am-list-item .am-list-line .am-list-content {
color: $color_333;
}
.order-list {
.am-list-item {
padding-left: 0 !important;
}
}
.deposit-limit-time{
background: #fff;
padding: 11px 15px;
border-top: 1px solid #E5E5E5;
border-bottom: 1px solid #E5E5E5;
font-size: 13px;
color: #666;
line-height: 1.7;
}
.order-balance {
line-height: 44px;
background: #fff;
margin: 8px 0;
.am-list-item {
padding-left: 0 !important;
}
.am-list-line {
padding: 0 15px;
}
.am-list-content {
color: $color_333;
font-size: $font_16;
.iconiconfront-22 {
font-size: 18px;
margin-left: 15px;
}
}
.order-balanceprice {
color: $color_666;
font-size: $font_12;
.order-money {
color: #ff2121;
font-size: $font_12 !important;
font-weight: normal;
font-style: inherit;
vertical-align: middle;
margin: 0;
}
}
.iconiconfront-22.question-mark {
font-size: 24px;
margin-left: 15px;
}
.am-list-body {
&::before, &::after {
display: none;
}
}
.balance-used {
font-size: 24px;
color: #0099FF;
}
.circle-icon {
width: 20px;
height: 20px;
border: 1px solid #BFBFBF;
border-radius: 50%;
margin-right: 2px;
}
}
}
.pay-order {
width: 100%;
height: calc(100% - 44px);
background-color: #f5f5f5;
.order-number {
background-color: #fff;
span {
font-size: 15px;
color: #333333;
}
.number {
font-size: 12px;
color: #666666;
}
.money {
color: #ff3131;
}
}
.pay-type-list {
.am-list-body {
&::after {
display: none;
}
}
.am-list-header {
color: #333333;
font-size: 15px;
background-color: #fff;
}
.iconalipay {
font-size: 22px;
color: #01aaef;
}
.iconweixinzhifu {
font-size: 22px;
color: #3baf34;
}
.iconhuabei {
font-size: 22px;
color: #01aaef;
}
.am-radio-inner {
width: 20px;
height: 20px;
border-radius: 50%;
background-color: #c1c1c1;
}
.am-radio-inner:after {
display: block;
border-color: #fff;
top: 0;
right: 6px;
}
.am-radio.am-radio-checked .am-radio-inner {
background-color: #009aff;
border-radius: 50%;
width: 20px;
height: 20px;
}
.am-radio.am-radio-checked .am-radio-inner:after {
display: block;
}
}
.agreement {
margin-top: 8px;
background: #fff;
.am-checkbox-agree{
.am-checkbox {
left: unset;
right: 6px;
}
.am-checkbox-agree-label{
margin-left: 3px;
}
}
}
.pay-tip {
width: 100%;
height: 30px;
line-height: 30px;
text-align: center;
font-size: 12px;
color: #ff3131;
background-color: #fff4ce;
}
.pay-button {
position: fixed;
bottom: 0;
width: 100%;
height: 44px;
line-height: 44px;
text-align: center;
color: #fff;
font-size: 18px;
background-color: #18b4ed;
z-index: 9;
&.invalid{
background: #BBB;
}
}
.check-staging {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
background-color: rgba(0, 0, 0, $alpha: 0.6);
z-index: 19;
.container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 300px;
border-radius: 6px;
background-color: #FFF;
padding-bottom: 10px;
.check-title {
color: #333333;
font-size: 16px;
text-align: center;
width: 100%;
height: 44px;
line-height: 44px;
border-bottom: 1px solid #DDDDDD;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
}
}
.am-list-item .am-list-line .am-list-extra {
flex-basis: 16%;
}
.am-radio-inner {
width: 20px;
height: 20px;
border-radius: 50%;
border: 1px solid #BFBFBF;
background-color: #fff;
}
.am-radio-inner:after {
display: block;
border-color: #fff;
top: 0;
right: 6px;
}
.am-radio.am-radio-checked .am-radio-inner {
background-color: #009aff;
border: 1px solid #FFF;
border-radius: 50%;
width: 20px;
height: 20px;
}
.am-radio.am-radio-checked .am-radio-inner:after {
display: block;
}
}
.order-info {
position: relative;
flex: 1;
.order-title {
font-size: 16px;
color: $color_333;
}
.order-content {
font-size: 14px;
color: $color_666;
margin-top: 14px;
line-height: 18px;
}
.order-des {
height: 24px;
line-height: 33px;
position: absolute;
bottom: 0;
.order-newprice {
font-size: 16px;
color: $redprice;
}
.order-price {
font-size: 12px;
color: $color_999;
margin-left: 15px;
text-decoration: line-through;
}
}
}
.v-list-item {
padding: 10px 15px;
background-color: #fff;
.content {
border: none;
padding-bottom: 0;
.cover {
flex: inherit;
width: 42.2%;
img {
width: 100%;
height: 100%;
}
.course-status {
background-color: rgba(224, 46, 36, 0.6);
}
}
.price-des {
color: #999;
font-size: 11px;
}
}
.info {
width: 52.3%;
position: relative;
display: block;
.title {
font-size: 16px;
color: $color_333;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
height: 16px;
line-height: 16px;
}
.contact {
font-size: 14px;
color: $color_666;
margin-top: 14px;
}
.des {
position: absolute;
bottom: 0;
.course-price {
.price {
color: $red;
font-size: 12px;
}
.new {
color: $red;
font-size: 16px;
}
.old {
color: $color_999;
font-size: 12px;
display: inline-block;
margin-left: 15px;
text-decoration: line-through;
}
}
.isbuy {
display: inline-block;
width: 61px;
height: 18px;
background-color: $bg_active;
border-radius: 9px;
color: $white;
font-size: 12px;
text-align: center;
line-height: 18px;
}
}
}
}
}
......@@ -120,6 +120,8 @@ class Order extends Component {
orderList: [],
info: false,
offset: 0,
full_amount: 0, // 满金额
cut_amount: 0, // 减金额
};
}
// 提交订单
......@@ -267,6 +269,12 @@ class Order extends Component {
discount,
});
};
fullRules = (data) => {
this.setState({
full_amount: data.full_amount,
cut_amount: data.cut_amount,
});
};
// 公共方法 本地存储
publicLocalStorage = () => {
if(this.props.history.action === 'PUSH') {
......@@ -300,8 +308,11 @@ class Order extends Component {
// 普通课程立即报名 不带 type = 1
http.get(`${API['base-api']}/m/order/preorder`).then(res => {
if(res.data.errno === 200) {
console.log(res.data.data);
this.publicGetData(res.data.data);
this.publicLocalStorage();
this.fullRules(res.data.data);
}else{
Toast.info(res.data.msg, 2);
}
......@@ -407,7 +418,9 @@ class Order extends Component {
useBalance,
info,
offset,
groupPrice
groupPrice,
full_amount,
cut_amount,
} = this.state;
return (
......@@ -495,6 +508,20 @@ class Order extends Component {
</Item>
</List>
</div>
{
(full_amount > 0 && cut_amount > 0) ? (
<>
<div className="full__rules">
<WingBlank>
<div className="money__off">
<span>{full_amount}{cut_amount}</span>
<span className='money'>{`-¥${cut_amount}`}</span>
</div>
</WingBlank>
</div>
</>
) : (null)
}
<div className="order-bar">
<div className="order-course">
<span className="order-course-text">{`${orderList.length}门课程`}</span>
......
......@@ -265,7 +265,8 @@
.order-balance {
height: 44px;
line-height: 44px;
margin: 8px 0 50px 0;
margin: 8px 0 8px 0;
display: flow-root;
.am-list-item {
padding-left: 0 !important;
......@@ -282,4 +283,23 @@
}
}
}
.full__rules {
width: 100%;
height: 50px;
margin-top: 16px;
background: #FFF;
font-size: 14px;
background: #fff;
color: #999;
.money__off {
height: 50px;
display: flex;
justify-content: space-between;
align-items: center;
}
.money{
color: #FF3131;
}
}
}
\ No newline at end of file
import loadable from '@loadable/component'
import Index from '@/components/Index';
import My from '@/components/my';
import Passport from '@/components/passport';
import Scholarship from '@/components/scholarship';
import Index from '@/components/Index'
import My from '@/components/my'
import Passport from '@/components/passport'
import Scholarship from '@/components/scholarship'
const Coupons = loadable(() => import(/* webpackChunkName: 'coupons'*/ '@/components/coupons'))
const Study = loadable(() => import(/* webpackChunkName: 'study'*/'@/components/study'))
......@@ -31,6 +31,8 @@ const CampTest = loadable(() => import(/* webpackChunkName: 'Classify'*/'@/compo
const CampResolve = loadable(() => import(/* webpackChunkName: 'Classify'*/'@/components/video/camp/campResolve'))
const ShareCourse = loadable(() => import(/* webpackChunkName: 'ShareCourse'*/'@/components/ShareCourse/index'))
const Country = loadable(() => import(/* webpackChunkName: 'Country' */'@/components/country/index'))
const ExpandCallback = loadable(() => import('@/components/expand/callback'))
const ExpandShare = loadable(() => import('@/components/expand/share'))
export default [
{
path: '/',
......@@ -181,4 +183,29 @@ export default [
path: '/prize-winner-list',
component: loadable(() => import(/* webpackChunkName: 'prize-winner-list' */'@/components/activity/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
},
]
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