page.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. import React from 'react';
  2. import { Carousel } from 'antd';
  3. import './index.less';
  4. import Page from '@src/containers/Page';
  5. import Assets from '@src/components/Assets';
  6. import { formatDate } from '@src/services/Tools';
  7. import Button from '../../../components/Button';
  8. import Footer from '../../../components/Footer';
  9. import { Main } from '../../../stores/main';
  10. import { User } from '../../../stores/user';
  11. const courseIconList = ['grammar', 'read', 'logic', 'math'];
  12. export default class extends Page {
  13. constructor(props) {
  14. super(props);
  15. this.state = { courseIndex: 0 };
  16. }
  17. initData() {
  18. Main.getIndex().then(result => {
  19. this.setState(result);
  20. });
  21. setTimeout(() => {
  22. this.createLayout();
  23. }, 1);
  24. }
  25. createLayout() {
  26. const msnry = new Masonry('.grid', {
  27. itemSelector: '.grid-item',
  28. });
  29. msnry.layout();
  30. }
  31. location(url) {
  32. window.location.href = url;
  33. }
  34. test() {
  35. User.needLogin().then(() => {
  36. console.log('loginCB test');
  37. });
  38. }
  39. renderView() {
  40. const { prepare = {}, user = {}, course = [], activity = [], evaluation = [], contact = {} } = this.state;
  41. return (
  42. <div>
  43. <div className="block block-1">
  44. <div className="body">
  45. <div className="title">PREPARE THE GMAT LIKE A PRO.</div>
  46. <div className="desc">我们相信每位考生独一无二,但科学的备考方法本质相通;</div>
  47. <div className="desc">我们知道考取高分并非易事,但千行的专业指导让难度下降25%;</div>
  48. <div className="desc">我们清楚GMAT只是留学生涯的起点,但千行努力让您收获更多。</div>
  49. </div>
  50. </div>
  51. <div className="block block-2">
  52. <div className="body">
  53. <div className="title">完善备考信息,赢VIP权限</div>
  54. <div className="desc">知己知彼,百战不殆!</div>
  55. <Button theme="white" className="btn" onClick={() => this.test()}>
  56. 立即填写
  57. </Button>
  58. </div>
  59. </div>
  60. <div className="block block-3">
  61. <div className="bg">
  62. <div className="bg-1" />
  63. <div className="bg-2" />
  64. <div className="bg-3" />
  65. <div className="bg-4" />
  66. </div>
  67. <div className="fixed">
  68. <div className="body">
  69. <div className="step step-1">
  70. <div className="m-title">备考攻略</div>
  71. <div className="list">
  72. <div className="item m-r-2">
  73. <div className="title">
  74. 自学指南<span className="sub">Self-guided</span>
  75. </div>
  76. <div className="btn">
  77. <Button
  78. className="btn-shadow"
  79. size="lager"
  80. onClick={() => {
  81. this.location(prepare.first);
  82. }}
  83. >
  84. 从零开始
  85. </Button>
  86. <Button
  87. className="btn-shadow"
  88. theme="white"
  89. size="lager"
  90. onClick={() => {
  91. this.location(prepare.continue);
  92. }}
  93. >
  94. 继续学习
  95. </Button>
  96. </div>
  97. </div>
  98. <div className="item m-l-2">
  99. <div className="title">
  100. 参与课程<span className="sub">With DUKB24</span>
  101. </div>
  102. <div className="btn">
  103. <Button
  104. theme="error"
  105. size="lager"
  106. radius
  107. onClick={() => {
  108. this.location(prepare.classJunior);
  109. }}
  110. >
  111. 从零开始
  112. </Button>
  113. <Button
  114. theme="warn"
  115. size="lager"
  116. radius
  117. onClick={() => {
  118. this.location(prepare.classMiddle);
  119. }}
  120. >
  121. 继续学习
  122. </Button>
  123. </div>
  124. </div>
  125. </div>
  126. </div>
  127. <div className="step step-2">
  128. <div className="m-title">WHY 千行</div>
  129. <div className="list">
  130. <div className="item m-r-1-5">
  131. <div className="title">
  132. <Assets name="planet" />
  133. 内容全⾯<span className="sub">360° Support</span>
  134. </div>
  135. <div className="desc">
  136. 网站涵盖考试介绍、方法引导、技巧点拨、练习、课程、机经、模考、心经分享等,从入门到出分,一应俱全,满足各阶段考生的备考需求。
  137. </div>
  138. </div>
  139. <div className="item m-r-1-5 m-l-1-5">
  140. <div className="title">
  141. <Assets name="expert" />
  142. 指导专业<span className="sub">We are Pro.</span>
  143. </div>
  144. <div className="desc">专注GMAT备考8年 出分周期高于行业平均水平26% 学员均分高于行业18%</div>
  145. </div>
  146. <div className="item m-l-1-5">
  147. <div className="title">
  148. <Assets name="userfriendly" />
  149. ⼈⼈会⽤<span className="sub">User-frriendly</span>
  150. </div>
  151. <div className="desc">
  152. 除提供有用的数据信息外,网站多处设置信息导,提供必要的解释和原理说明,从源头规避误区,协助考生做出更加明智的决策,提高备考效率。
  153. </div>
  154. </div>
  155. </div>
  156. </div>
  157. <div className="step step-3">
  158. <div className="list">
  159. <div className="item m-r-1-5">
  160. <div className="title" style={{ color: '#4292F0' }}>
  161. {user.numberOffline}
  162. </div>
  163. <div className="desc">注册用户</div>
  164. <Assets className="foot-1" name="foot1" />
  165. </div>
  166. <div className="item m-r-1-5 m-l-1-5">
  167. <div className="title" style={{ color: '#FFB676' }}>
  168. {user.number700}
  169. </div>
  170. <div className="desc">700+分学员</div>
  171. <Assets className="foot-2" name="foot2" />
  172. </div>
  173. <div className="item m-l-1-5">
  174. <div className="title" style={{ color: '#F36565' }}>
  175. {user.numberScore}
  176. </div>
  177. <div className="desc">学员均分</div>
  178. <Assets className="foot-3" name="foot1" />
  179. </div>
  180. </div>
  181. </div>
  182. <div className="step step-4">
  183. <div className="m-title">
  184. 千⾏课程<span className="sub">Waste Less, Learn More</span>
  185. </div>
  186. <div className="box">
  187. <div className="detail">
  188. {course[this.state.courseIndex] && (
  189. <a href={course[this.state.courseIndex].link} target="_blank">
  190. <Assets src={course[this.state.courseIndex].image} />
  191. </a>
  192. )}
  193. </div>
  194. <div className="list">
  195. {course.map((row, index) => {
  196. if (index >= 4) return null;
  197. return (
  198. <div
  199. className={`tab ${this.state.courseIndex === index ? 'active' : ''}`}
  200. onMouseEnter={() => this.setState({ courseIndex: index })}
  201. >
  202. <Assets name={courseIconList[index]} />
  203. {row.title}
  204. <div className={`place place-${index + 1}`}>
  205. <span className="right-arrow" />
  206. </div>
  207. <i className="left-arrow" />
  208. </div>
  209. );
  210. })}
  211. </div>
  212. </div>
  213. </div>
  214. <div className="step step-5">
  215. <div className="m-title">独家服务</div>
  216. <div className="list">
  217. <div className="item m-r-1-5" style={{ height: 210 }}>
  218. <Assets className="sun" name="sun_blue" />
  219. <div className="title" style={{ color: '#4292F0' }}>
  220. 千⾏CAT模考<span className="sub">></span>
  221. </div>
  222. <div className="desc">采⽤CAT出题机制、排名制算分⽅法</div>
  223. <div className="desc">独家题源,排除重题⼲扰</div>
  224. <div className="desc">模考报告提供具体考点分析,明确提升 ⽅向</div>
  225. </div>
  226. <div className="item m-r-1-5 m-l-1-5" style={{ height: 250 }}>
  227. <Assets className="sun" name="sun_red" />
  228. <div className="title" style={{ color: '#FFB676' }}>
  229. 机经服务<span className="sub">></span>
  230. </div>
  231. <div className="desc">⾼效整理:梳理逻辑结构,⽆“反吞 噬”⻛险</div>
  232. <div className="desc">轻松获取:⾃动更新⾄邮箱代替⼿动 领取</div>
  233. <div className="desc">随时查阅:⼿机查看、在线浏览、在 线做题</div>
  234. </div>
  235. <div className="item m-l-1-5" style={{ height: 185 }}>
  236. <Assets className="sun" name="sun_yello" />
  237. <div className="title" style={{ color: '#F36565' }}>
  238. VIP服务<span className="sub">></span>
  239. </div>
  240. <div className="desc">⾃由组卷,练你想练</div>
  241. <div className="desc">独家解析,专业报告</div>
  242. <div className="desc">提问特权,1VS1答疑</div>
  243. </div>
  244. </div>
  245. </div>
  246. </div>
  247. </div>
  248. </div>
  249. <Carousel autoplay>
  250. {activity.map(row => {
  251. return (
  252. <div
  253. className="block block-4"
  254. style={{ backgroundImage: row.image }}
  255. onClick={() => {
  256. this.location(row.link);
  257. }}
  258. />
  259. );
  260. })}
  261. </Carousel>
  262. <div className="block block-5">
  263. <div className="grid">
  264. {evaluation.map(row => {
  265. return (
  266. <div className="grid-item">
  267. <div className="item">
  268. <div className="item-header">
  269. <Assets src={row.avatar} />
  270. <div className="name">{row.nickname}</div>
  271. <div className="date">{formatDate(row.date, 'yyyy年mm月dd日')}</div>
  272. </div>
  273. <div className="item-body">{row.content}</div>
  274. </div>
  275. </div>
  276. );
  277. })}
  278. </div>
  279. </div>
  280. <div className="block block-6">
  281. <div className="body">
  282. <div className="m-title">发展历程</div>
  283. <div className="step-list">
  284. <div className="step">
  285. <div className="title">
  286. <Assets name="dot1" />
  287. 2012
  288. </div>
  289. <div className="desc">“OG12语法千行”首次与大家见面,下载量过万,成为当年最热门的备考资料。</div>
  290. </div>
  291. <div className="step">
  292. <div className="title">
  293. <Assets name="dot2" />
  294. 2015
  295. </div>
  296. <div className="desc">
  297. 正式成立“广州多少教育咨询有限公司”,致力于帮助GMAT考生花更少的时间,取得更高的成绩,"Waste Less, Learn
  298. More." 同时发行“PREP0708语法千行”、“GMAT数学千行”。
  299. </div>
  300. </div>
  301. <div className="step">
  302. <div className="title">
  303. <Assets name="dot3" />
  304. 2019
  305. </div>
  306. <div className="desc">
  307. 发行“千行GMAT长难句”; 每4位GMAT考生中有3位使用“千行资料”; “千行”网站上线,我们希望为您做得更多。
  308. </div>
  309. </div>
  310. </div>
  311. </div>
  312. </div>
  313. <div className="block block-7">
  314. <div className="body">
  315. <div className="step-list">
  316. <div className="step">
  317. <div className="title">工作机会</div>
  318. <Assets name="logo2" />
  319. </div>
  320. <div className="step" style={{ paddingLeft: 80 }}>
  321. <div className="title">联系我们</div>
  322. <div className="desc">{contact.phone}</div>
  323. <div className="desc">{contact.email}</div>
  324. <div className="desc">{contact.wechat}</div>
  325. </div>
  326. <div className="step" style={{ paddingLeft: 140 }}>
  327. <div className="title">关注我们</div>
  328. <div className="qrcode">
  329. <Assets src={contact.wechatImage} />
  330. </div>
  331. </div>
  332. </div>
  333. </div>
  334. </div>
  335. <Footer />
  336. </div>
  337. );
  338. }
  339. }