page.js 13 KB

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