index.vue 67 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451
  1. <template>
  2. <div class="home">
  3. <header class="header">
  4. <div class="header__header">
  5. <div class="container">
  6. <div class="text-list" v-if="!userInfo">
  7. <a @click="go('/login', { state: 1 })">登录</a>
  8. <a @click="go('/login', { state: 2 })">注册</a>
  9. </div>
  10. <div class="icon-list" v-else>
  11. <!-- <a @click="go('/person-center/my-message')">
  12. <i class="el-icon-message-solid icon"></i>
  13. </a> -->
  14. <el-badge
  15. :is-dot="msgCount > 0 ? true : false"
  16. class="item"
  17. style="vertical-align: baseline"
  18. >
  19. <el-button
  20. style="font-size: 20px; padding: 0px"
  21. icon="el-icon-message-solid"
  22. type="text"
  23. @click="go('/person-center/my-message')"
  24. ></el-button>
  25. </el-badge>
  26. <!-- <el-tooltip placement="bottom-end" v-model="msgShow" :hide-after="0" manual popper-class="tooltipStyle">
  27. <el-badge :is-dot="msgCount > 0 ? true : false" class="item" style="vertical-align: baseline">
  28. <el-button style="font-size: 20px; padding: 0px" icon="el-icon-message-solid" type="text"
  29. @click="go('/person-center/my-message')"></el-button>
  30. </el-badge>
  31. <div slot="content" class="dis_plays">
  32. <p style="max-width: 247px">{{ msgData.text }}</p>
  33. <div class="toolbth" @click="newGoToStudy">立即学习</div>
  34. <i style="font-size: 18px;cursor:pointer;" class="el-icon-close" @click="clearMsg"></i>
  35. </div>
  36. </el-tooltip> -->
  37. <el-dropdown @command="handleCommand">
  38. <span class="el-dropdown-link">
  39. <i
  40. class="el-icon-user-solid"
  41. style="
  42. font-size: 20px;
  43. color: #3f8dfd;
  44. cursor: pointer;
  45. margin-left: 20px;
  46. "
  47. @click="go('/person-center/my-course')"
  48. ></i>
  49. </span>
  50. <el-dropdown-menu slot="dropdown">
  51. <el-dropdown-item command="1">我的课程</el-dropdown-item>
  52. <el-dropdown-item command="2">我的题库</el-dropdown-item>
  53. <el-dropdown-item command="3">个人中心</el-dropdown-item>
  54. <!-- <el-dropdown-item command="5">跳小程序</el-dropdown-item> -->
  55. <el-dropdown-item command="4">退出登录</el-dropdown-item>
  56. </el-dropdown-menu>
  57. </el-dropdown>
  58. </div>
  59. </div>
  60. </div>
  61. <div class="header__body">
  62. <div class="container clearfix">
  63. <a class="logo">
  64. <img
  65. v-if="header.companyLogo"
  66. :src="$tools.splitImgHost(header.companyLogo)"
  67. alt=""
  68. />
  69. <h1 v-else></h1>
  70. </a>
  71. <div class="search">
  72. <div class="search__select">
  73. <select v-model="type">
  74. <option value="1">课程</option>
  75. <option value="2">题库</option>
  76. <option value="6">直播</option>
  77. </select>
  78. </div>
  79. <div class="search__input">
  80. <input
  81. v-model="searchKey"
  82. type="text"
  83. autocomplete="new-password"
  84. />
  85. </div>
  86. <el-button type="primary" @click="search" class="search__btn"
  87. >搜索</el-button
  88. >
  89. </div>
  90. <div
  91. class="contact"
  92. v-show="false"
  93. v-if="header.serviceTel.status == 1"
  94. >
  95. <div class="contact__phone">{{ header.serviceTel.tel }}</div>
  96. <div class="contact__time">
  97. {{ header.serviceTel.time }}
  98. </div>
  99. </div>
  100. </div>
  101. </div>
  102. </header>
  103. <section class="section">
  104. <div class="container">
  105. <div class="tabs">
  106. <template v-for="(item, index) in showNav(header.Nav)">
  107. <a v-if="item.name === '首页'" :key="index" class="tab active"
  108. >首页</a
  109. >
  110. <!-- <a
  111. v-if="item.name === '走进中正'"
  112. :key="index"
  113. class="tab"
  114. @click="go('/about')"
  115. >走进中正</a
  116. > -->
  117. <a
  118. v-if="item.name === '课程'"
  119. :key="index"
  120. class="tab"
  121. @click="go('/course-list')"
  122. >课程</a
  123. >
  124. <a
  125. v-if="item.name === '题库'"
  126. :key="index"
  127. class="tab"
  128. @click="go('/bank-list')"
  129. >题库</a
  130. >
  131. <a
  132. v-if="item.name === '直播'"
  133. :key="index"
  134. class="tab"
  135. @click="go('/live-list')"
  136. >直播</a
  137. >
  138. </template>
  139. </div>
  140. </div>
  141. <div class="swiper-wrap" :style="{ background: color }">
  142. <div class="container">
  143. <div class="left-box">
  144. <div class="left-box__header">课程导航</div>
  145. <div class="left-box__body">
  146. <div class="bg"></div>
  147. <div class="slide-list">
  148. <div
  149. class="slide-list__item"
  150. v-for="(type, typeItem) in typeList"
  151. :key="'type' + typeItem"
  152. >
  153. <div class="title" @click="goCourse(type)">
  154. {{
  155. type.educationName == "继续教育"
  156. ? "继教"
  157. : type.educationName
  158. }}
  159. </div>
  160. <ul class="nav">
  161. <li
  162. v-for="(slideItem, slideIndex) in slideList[typeItem]"
  163. :key="'item' + slideIndex"
  164. @click="goCourse(slideItem)"
  165. >
  166. <div class="text">
  167. <!-- {{ slideItem.projectName }}-{{ slideItem.businessName }} -->
  168. {{ slideItem.aliasName }}
  169. </div>
  170. </li>
  171. </ul>
  172. </div>
  173. </div>
  174. <ul class="list">
  175. <li v-for="(item, index) in typeList" :key="index">
  176. <div class="text">
  177. <div class="text__title" @click="goCourse(item)">
  178. {{
  179. item.educationName == "继续教育"
  180. ? "继教"
  181. : item.educationName
  182. }}
  183. </div>
  184. <div class="text__desc">
  185. <a
  186. @click="goCourse(aItem)"
  187. class="item"
  188. v-for="(aItem, aIndex) in item.list"
  189. :key="'aItem' + aIndex"
  190. >
  191. <!-- {{ aItem.projectName }}-{{ aItem.businessName }} -->
  192. {{ aItem.aliasName }}
  193. </a>
  194. </div>
  195. </div>
  196. </li>
  197. </ul>
  198. </div>
  199. </div>
  200. <div class="swiper">
  201. <swiper
  202. v-if="bannerList.length > 0"
  203. ref="mySwiper"
  204. @slideChangeTransitionStart="slideChangeTransitionStart($event)"
  205. class=""
  206. v-bind:options="swiperOptions"
  207. >
  208. <swiper-slide
  209. v-for="(item, index) in bannerList"
  210. v-bind:key="index"
  211. @click.native="swiperJump(item)"
  212. >
  213. <img
  214. :src="$tools.splitImgHost(item.adverUrl, true, 1272)"
  215. alt=""
  216. />
  217. </swiper-slide>
  218. <div class="swiper-pagination" slot="pagination"></div>
  219. <!-- <div class="swiper-button-prev" slot="button-prev"></div>
  220. <div class="swiper-button-next" slot="button-next"></div> -->
  221. </swiper>
  222. </div>
  223. <div class="right-box">
  224. <div class="bg"></div>
  225. <div class="no-login" v-if="!userInfo">
  226. <template v-if="loginType == 1">
  227. <el-form :model="loginForm" ref="loginForm" :rules="loginRules">
  228. <div class="input">
  229. <el-form-item prop="account">
  230. <el-input
  231. autocomplete="new-password"
  232. v-model="loginForm.account"
  233. @keyup.enter.native="login"
  234. :placeholder="dualStatus ? '请输入手机号' : '请输入手机号或身份证号' "
  235. ></el-input>
  236. </el-form-item>
  237. </div>
  238. <div class="input">
  239. <el-form-item prop="pwd">
  240. <el-input
  241. autocomplete="new-password"
  242. type="password"
  243. v-model="loginForm.pwd"
  244. placeholder="请输入密码"
  245. @keyup.enter.native="login"
  246. ></el-input>
  247. </el-form-item>
  248. </div>
  249. <div class="input" v-if="dualStatus">
  250. <el-form-item prop="code">
  251. <el-input
  252. autocomplete="new-password"
  253. v-model="loginForm.code"
  254. placeholder="请输入验证码"
  255. >
  256. <span slot="suffix" @click="getLoginSms(1)" class="btn">{{
  257. countDown == 0
  258. ? "获取验证码"
  259. : `${countDown}秒重新获取`
  260. }}</span>
  261. </el-input>
  262. </el-form-item>
  263. </div>
  264. <el-button
  265. type="primary"
  266. class="submit"
  267. @click="login()"
  268. :loading="isLogin"
  269. >登录</el-button
  270. >
  271. <div class="bottom-text">
  272. <a class="text" @click="loginType = 2">手机验证码登录</a>
  273. <a class="text" @click="go('/login?state=2')">注册</a>
  274. </div>
  275. <div class="dis_flex">
  276. <div class="dis_flex_wxloginImg">
  277. <img src="@/assets/wx.png" alt="" @click="wxLoginFunc" />
  278. </div>
  279. </div>
  280. </el-form>
  281. </template>
  282. <template v-if="loginType == 2">
  283. <el-form
  284. :model="loginSmsForm"
  285. ref="loginSmsForm"
  286. :rules="loginSmsRules"
  287. >
  288. <div class="input">
  289. <el-form-item prop="tel">
  290. <el-input
  291. autocomplete="new-password"
  292. v-model="loginSmsForm.tel"
  293. placeholder="请输入手机号"
  294. ></el-input>
  295. </el-form-item>
  296. </div>
  297. <div class="input">
  298. <el-form-item prop="code">
  299. <el-input
  300. autocomplete="new-password"
  301. v-model="loginSmsForm.code"
  302. placeholder="请输入验证码"
  303. >
  304. <span slot="suffix" @click="getLoginSms(2)" class="btn">{{
  305. countDown == 0
  306. ? "获取验证码"
  307. : `${countDown}秒重新获取`
  308. }}</span>
  309. </el-input>
  310. </el-form-item>
  311. </div>
  312. <el-button
  313. type="primary"
  314. class="submit"
  315. :loading="isloginSms"
  316. @click="loginSms()"
  317. >登录</el-button
  318. >
  319. <div class="bottom-text">
  320. <a class="text" @click="loginType = 1">账号密码登录</a>
  321. <a class="text" @click="go('/login?state=2')">注册</a>
  322. </div>
  323. <div class="dis_flex">
  324. <div class="dis_flex_wxloginImg">
  325. <img src="@/assets/wx.png" alt="" @click="wxLoginFunc" />
  326. </div>
  327. </div>
  328. </el-form>
  329. </template>
  330. </div>
  331. <div class="has-login" v-else>
  332. <div class="userinfo">
  333. <img src="@/assets/ava.png" class="avatar" alt="" />
  334. <div class="nickname">{{ userInfo && userInfo.realname }}</div>
  335. </div>
  336. <div class="type-list">
  337. <div
  338. class="type-list__item"
  339. @click="go('/person-center/my-course')"
  340. >
  341. <img src="@/assets/kc.png" alt="" />
  342. <div class="text">课程</div>
  343. </div>
  344. <div
  345. class="type-list__item"
  346. @click="go('/person-center/my-bank')"
  347. >
  348. <img src="@/assets/tk.png" alt="" />
  349. <div class="text">题库</div>
  350. </div>
  351. <div
  352. class="type-list__item"
  353. @click="go('/person-center/my-order')"
  354. >
  355. <img src="@/assets/dd.png" alt="" />
  356. <div class="text">订单</div>
  357. </div>
  358. </div>
  359. <div class="history">
  360. <div class="btn">上次播放</div>
  361. <div class="title" @click="goLast">
  362. {{ recordList.goodsName }}
  363. </div>
  364. <div class="progress">
  365. <span
  366. >已学{{
  367. toFixed(
  368. (recordList.videoCurrentTime /
  369. recordList.durationTime) *
  370. 100
  371. )
  372. }}%</span
  373. >
  374. <span>{{ recordList.date }}</span>
  375. </div>
  376. </div>
  377. </div>
  378. </div>
  379. </div>
  380. </div>
  381. </section>
  382. <section class="course">
  383. <div class="container">
  384. <div class="course__header">
  385. <div class="lefts">
  386. <div class="title">推荐课程</div>
  387. <div class="tabs">
  388. <div
  389. v-for="(item, index) in courseName"
  390. :key="index"
  391. class="tab"
  392. :class="couIndex === index ? 'active' : ''"
  393. @click="changeCou(item.recommendId, index)"
  394. >
  395. {{ item.name }}
  396. </div>
  397. </div>
  398. </div>
  399. <div class="course__footer">
  400. <div class="btn" @click="go('/course-list')">查看更多</div>
  401. </div>
  402. </div>
  403. <!-- <div class="tabs">
  404. <div
  405. v-for="(item, index) in goodsList1"
  406. :key="index"
  407. class="tab"
  408. :class="active1 === index ? 'active' : ''"
  409. @click="active1 = index"
  410. >
  411. {{ item.name }}
  412. </div>
  413. </div>
  414. <div class="course__body">
  415. <p
  416. v-if="
  417. !goodsList1[active1] ||
  418. !goodsList1[active1].goodsList ||
  419. goodsList1[active1].goodsList.length === 0
  420. "
  421. class="text_align"
  422. >
  423. 该培训项目无推荐课程
  424. </p>
  425. <ul v-else class="list clearfix">
  426. <template v-for="(item, index) in goodsList1[active1].goodsList">
  427. <li class="course-item" :key="index" v-if="index < 15">
  428. <GoodsItem :item="item"></GoodsItem>
  429. </li>
  430. </template>
  431. </ul>
  432. </div> -->
  433. <div class="course__body">
  434. <p v-if="!goodsList1.length" class="text_align">
  435. 该培训项目无推荐课程
  436. </p>
  437. <ul v-else class="list clearfix">
  438. <template v-for="(item, index) in goodsList1">
  439. <li class="course-item" :key="index">
  440. <GoodsItem :item="item"></GoodsItem>
  441. </li>
  442. </template>
  443. </ul>
  444. </div>
  445. <div class="pagination">
  446. <el-pagination
  447. @current-change="currentChangeCou"
  448. background
  449. layout="prev, pager, next"
  450. :total="paramList[0].total"
  451. :current-page.sync="paramList[0].currentPage"
  452. :page-size="paramList[0].pageSize"
  453. >
  454. </el-pagination>
  455. </div>
  456. <!-- <div class="course__footer">
  457. <div class="btn" @click="go('/course-list')">查看更多</div>
  458. </div> -->
  459. </div>
  460. </section>
  461. <section class="bank">
  462. <div class="container">
  463. <div class="bank__header">
  464. <div class="lefts">
  465. <div class="title">推荐题库</div>
  466. <div class="tabs">
  467. <div
  468. v-for="(item, index) in bankName"
  469. :key="index"
  470. class="tab"
  471. :class="bankIndex === index ? 'active' : ''"
  472. @click="changebank(item.recommendId, index)"
  473. >
  474. {{ item.name }}
  475. </div>
  476. </div>
  477. </div>
  478. <div class="bank__footer">
  479. <div class="btn" @click="go('/bank-list')">查看更多</div>
  480. </div>
  481. </div>
  482. <!-- <div class="tabs">
  483. <div
  484. v-for="(item, index) in goodsList2"
  485. :key="index"
  486. class="tab"
  487. :class="active2 === index ? 'active' : ''"
  488. @click="active2 = index"
  489. >
  490. {{ item.name }}
  491. </div>
  492. </div>
  493. <div class="bank__body">
  494. <p
  495. v-if="
  496. !goodsList2[active2] ||
  497. !goodsList2[active2].goodsList ||
  498. goodsList2[active2].goodsList.length === 0
  499. "
  500. class="text_align"
  501. >
  502. 该培训项目无推荐题库
  503. </p>
  504. <ul v-else class="list clearfix">
  505. <template v-for="(item, index) in goodsList2[active2].goodsList">
  506. <li
  507. class="bank-item"
  508. v-if="index < 15"
  509. :key="index"
  510. @click="goodsDetail(item, 2)"
  511. >
  512. <GoodsItem :item="item"></GoodsItem>
  513. </li>
  514. </template>
  515. </ul>
  516. </div> -->
  517. <div class="bank__body">
  518. <p v-if="!goodsList2.length" class="text_align">
  519. 该培训项目无推荐题库
  520. </p>
  521. <ul v-else class="list clearfix">
  522. <template v-for="(item, index) in goodsList2">
  523. <!-- @click="goodsDetail(item, 2)" -->
  524. <li class="bank-item" :key="index">
  525. <GoodsItem :item="item"></GoodsItem>
  526. </li>
  527. </template>
  528. </ul>
  529. </div>
  530. <div class="pagination">
  531. <el-pagination
  532. @current-change="currentChangeBank"
  533. background
  534. layout="prev, pager, next"
  535. :total="paramList[1].total"
  536. :current-page.sync="paramList[1].currentPage"
  537. :page-size="paramList[1].pageSize"
  538. >
  539. </el-pagination>
  540. </div>
  541. </div>
  542. </section>
  543. <el-dialog
  544. :visible.sync="bindShow"
  545. width="348px"
  546. center
  547. :close-on-click-modal="false"
  548. :close-on-press-escape="false"
  549. class="bind"
  550. >
  551. <a class="bind__close" @click="bindNext">X</a>
  552. <div class="bind__header">关联学员身份</div>
  553. <div class="bind__body">
  554. <el-form
  555. class="bind-form"
  556. ref="bindForm"
  557. :model="bindForm"
  558. :rules="bindForm"
  559. >
  560. <el-form-item prop="realname"
  561. ><el-input placeholder="真实姓名" v-model="bindForm.realname">
  562. </el-input
  563. ></el-form-item>
  564. <el-form-item prop="idCard">
  565. <el-input
  566. placeholder="身份证号码"
  567. v-model="bindForm.idCard"
  568. maxlength="18"
  569. >
  570. </el-input
  571. ></el-form-item>
  572. <el-button
  573. class="submit"
  574. type="primary"
  575. :loading="isBind"
  576. round
  577. @click="bind()"
  578. >确定</el-button
  579. >
  580. <div class="bind-next" @click="bindNext">下次再关联</div>
  581. </el-form>
  582. </div>
  583. </el-dialog>
  584. <ToolBar></ToolBar>
  585. <Footer></Footer>
  586. <wx-login ref="wxLogin" @wxLoginBack="wxLoginBack"></wx-login>
  587. <RebuildModal
  588. ref="rebuildModal"
  589. @rebuildSubmit="rebuildSubmit($event)"
  590. ></RebuildModal>
  591. </div>
  592. </template>
  593. <script>
  594. import RebuildModal from "@/components/rebuildModal";
  595. import wxLogin from "@/components/wxLogin/index";
  596. import Footer from "@/components/footer/index";
  597. import ToolBar from "@/components/toolbar/index";
  598. import GoodsItem from "@/components/goodsItem/index";
  599. import { swiper, swiperSlide } from "vue-awesome-swiper";
  600. import { mapGetters, mapMutations } from "vuex";
  601. import {checkFunc} from "@/router"
  602. import "swiper/swiper-bundle.css";
  603. export default {
  604. name: "Home",
  605. components: {
  606. swiper,
  607. swiperSlide,
  608. Footer,
  609. GoodsItem,
  610. ToolBar,
  611. wxLogin,
  612. RebuildModal,
  613. },
  614. computed: {
  615. ...mapGetters(["userInfo", "token", "header", "msgCount"]),
  616. showNav: function () {
  617. return function (list) {
  618. var newList = [];
  619. if (list) {
  620. newList = list.filter((item) => {
  621. return item.status === 1;
  622. });
  623. }
  624. return newList;
  625. };
  626. },
  627. },
  628. data() {
  629. return {
  630. dualStatus:false,//是否双重校验
  631. msgShow: false,
  632. msgData: {},
  633. showBox: false,
  634. indexToken: "",
  635. indexUserAccount: "",
  636. colors: [],
  637. color: "",
  638. countDown: 0,
  639. countDownTimer: null,
  640. loginRules: {
  641. account: [
  642. { required: true, trigger: "blur", message: "请输入手机号/身份证号" },
  643. ],
  644. pwd: [{ required: true, trigger: "blur", message: "请输入密码" }],
  645. },
  646. loginSmsRules: {
  647. code: [{ required: true, trigger: "blur", message: "请输入验证码" }],
  648. tel: [{ required: true, trigger: "blur", message: "请输入手机号" }],
  649. },
  650. bindRules: {
  651. code: [{ required: true, trigger: "blur", message: "请输入验证码" }],
  652. tel: [{ required: true, trigger: "blur", message: "请输入手机号" }],
  653. pwd: [{ required: true, trigger: "blur", message: "请输入密码" }],
  654. read: [{ required: true, trigger: "blur", message: "请勾选服务协议" }],
  655. },
  656. bindShow: false,
  657. loginType: 2,
  658. loginForm: {},
  659. loginSmsForm: {},
  660. bindForm: {},
  661. isLogin: false,
  662. isLoginSms: false,
  663. isBind: false,
  664. getLoginCodeLock: false,
  665. isloginSms: false,
  666. swiperOptions: {
  667. loop: true,
  668. observer: true,
  669. observeParents: true,
  670. speed: 300,
  671. autoplayDisableOnInteraction: false,
  672. autoplayStopOnLast: false,
  673. autoplay: {
  674. delay: 1000,
  675. disableOnInteraction: false,
  676. },
  677. // 显示分页
  678. pagination: {
  679. el: ".swiper-pagination",
  680. clickable: true, //允许分页点击跳转
  681. },
  682. // 设置点击箭头
  683. navigation: {
  684. nextEl: ".swiper-button-next",
  685. prevEl: ".swiper-button-prev",
  686. },
  687. },
  688. bannerList: [],
  689. goodsList1: [{}], //推荐课程列表
  690. goodsList2: [{}], //推荐题库列表
  691. typeList: [],
  692. slideList: [],
  693. active1: 0, //推荐课程index
  694. active2: 0, //推荐题库index
  695. searchKey: "",
  696. type: "1",
  697. recordList: {},
  698. params: {
  699. pageNum: 1,
  700. pageSize: 10,
  701. },
  702. paramList: [
  703. {
  704. pageNum: 1,
  705. pageSize: 15,
  706. total: 0,
  707. },
  708. {
  709. pageNum: 1,
  710. pageSize: 15,
  711. total: 0,
  712. },
  713. ],
  714. total1: 0,
  715. total2: 0,
  716. courseName: [],
  717. bankName: [],
  718. couIndex: 0,
  719. bankIndex: 0,
  720. courseId: "",
  721. bankId: "",
  722. };
  723. },
  724. created() {
  725. this.goodsList1 = [];
  726. this.goodsList2 = [];
  727. this.courseLists();
  728. },
  729. mounted() {
  730. //双重校验
  731. this.$request.dualAuth().then((res) => {
  732. this.dualStatus = res.data === "1" ? true : false;
  733. if(this.dualStatus){
  734. this.loginRules["account"][0].message = "请输入手机号"
  735. }
  736. });
  737. if (this.userInfo) {
  738. this.getRecord();
  739. // this.getmsg();
  740. this.getMsgCount();
  741. }
  742. // this.getActivityList();
  743. // this.color = this.colors[0];
  744. this.advertisingList();
  745. this.educationTypeList();
  746. },
  747. watch: {
  748. userInfo(val) {
  749. if (val) {
  750. this.getRecord();
  751. // this.getmsg();
  752. this.getMsgCount();
  753. }
  754. },
  755. },
  756. methods: {
  757. //课程
  758. courseLists() {
  759. this.$request.appCommonActivityRecommendList({ platform: 2, status: 1 }).then(async (res) => {
  760. if (res.code == 200) {
  761. let list = res.rows || []
  762. //课程
  763. this.courseName = list.filter(x => x.type == 1).sort((a, b) => a.sort - b.sort).map(x => {
  764. return {
  765. name: x.name,
  766. recommendId: x.recommendId
  767. }
  768. });
  769. console.log('couIndex', this.couIndex, this.courseName)
  770. //题库
  771. this.bankName = list.filter(x => x.type == 2).sort((a, b) => a.sort - b.sort).map(x => {
  772. return {
  773. name: x.name,
  774. recommendId: x.recommendId
  775. }
  776. });
  777. if (this.courseName.length) {
  778. this.courseId = this.courseName[0].recommendId
  779. let list1 = await this.getGoodsList(this.courseName[0].recommendId, 0)
  780. console.log(list1, 'list1')
  781. this.goodsList1.push(...list1)
  782. }
  783. if (this.bankName.length) {
  784. this.bankId = this.bankName[0].recommendId;
  785. let list2 = await this.getGoodsList(
  786. this.bankName[0].recommendId,
  787. 1
  788. );
  789. this.goodsList2.push(...list2);
  790. }
  791. }
  792. });
  793. },
  794. getGoodsList(recommendId, num) {
  795. return new Promise((resolve, reject) => {
  796. this.$axios({
  797. url: `/app/common/activity/recommend/goodsList`,
  798. method: "get",
  799. params: {
  800. pageNum: this.paramList[num].pageNum,
  801. pageSize: this.paramList[num].pageSize,
  802. recommendId: recommendId,
  803. },
  804. noToken: true,
  805. }).then((res) => {
  806. if (res.code == 200) {
  807. this.paramList[num].total = res.total;
  808. resolve(res.rows);
  809. }
  810. });
  811. });
  812. },
  813. async currentChangeCou(val) {
  814. console.log("vallll", val);
  815. this.paramList[0].pageNum = val;
  816. this.goodsList1 = [];
  817. let list1 = await this.getGoodsList(this.courseId, 0);
  818. this.goodsList1.push(...list1);
  819. },
  820. async changeCou(recommendId, index) {
  821. this.couIndex = index;
  822. this.courseId = recommendId;
  823. this.paramList[0].pageNum = 1;
  824. this.paramList[0].currentPage = 1;
  825. this.goodsList1 = [];
  826. let list1 = await this.getGoodsList(recommendId, 0);
  827. this.goodsList1.push(...list1);
  828. },
  829. async currentChangeBank(val) {
  830. console.log("val--", val);
  831. this.paramList[1].pageNum = val;
  832. this.goodsList2 = [];
  833. let list2 = await this.getGoodsList(this.bankId, 1);
  834. this.goodsList2.push(...list2);
  835. },
  836. async changebank(recommendId, index) {
  837. this.bankIndex = index;
  838. this.bankId = recommendId;
  839. this.paramList[1].pageNum = 1;
  840. this.paramList[1].currentPage = 1;
  841. this.goodsList2 = [];
  842. let list2 = await this.getGoodsList(recommendId, 1);
  843. this.goodsList2.push(...list2);
  844. },
  845. /**
  846. * 关闭消息
  847. */
  848. clearMsg() {
  849. let ary = {
  850. userId: this.msgData.userId,
  851. msgId: this.msgData.id,
  852. updateTime: new Date(new Date().toLocaleDateString()).getTime(),
  853. };
  854. localStorage.setItem("msg", JSON.stringify(ary));
  855. this.msgShow = false;
  856. },
  857. rebuildSubmit(item) {
  858. this.$router.push({
  859. path: `/my-course-detail/${item.goodsId}`,
  860. query: {
  861. gradeId: item.gradeId,
  862. orderGoodsId: item.orderGoodsId,
  863. rebuild: 1,
  864. },
  865. });
  866. },
  867. getGoodsData() {
  868. return new Promise((resolve, reject) => {
  869. this.$request.goodsDetail(this.msgData.goodsId).then((res) => {
  870. resolve(res.data);
  871. });
  872. });
  873. },
  874. /**
  875. * 前往学习
  876. */
  877. async newGoToStudy() {
  878. let item = await this.getGoodsData();
  879. if (item.goodsType == 1) {
  880. this.sysTime = this.$tools.timest();
  881. item.orderGoodsId = this.msgData.orderGoodsId;
  882. this.canJump(item).then((res) => {
  883. this.clearMsg();
  884. this.$router.push({
  885. path: `/my-course-detail/${item.goodsId}`,
  886. query: {
  887. gradeId: item.gradeId,
  888. orderGoodsId: item.orderGoodsId,
  889. courseId: res.rows[0].courseId || "",
  890. },
  891. });
  892. });
  893. // arsty = '立刻学习';
  894. //题库
  895. } else if (item.goodsType == 2) {
  896. this.clearMsg();
  897. this.$router.push({
  898. path: "/person-center/my-bank/bank-detail/" + item.goodsId,
  899. query: {
  900. orderGoodsId: item.orderGoodsId,
  901. },
  902. });
  903. }
  904. },
  905. canJump(item) {
  906. return new Promise((resolve) => {
  907. this.$request
  908. .orderInfo({
  909. orderGoodsId: item.orderGoodsId,
  910. })
  911. .then(async (res) => {
  912. let items = res.data;
  913. let currentTime = this.$tools.timest();
  914. if (items.interfaceAccountId > 0) {
  915. //学习账号已开通
  916. if (items.learnStatus == 1) {
  917. //跳转第三方h5
  918. const confirmText = [
  919. "您的学习账号已经开通,请按照步骤操作,进行学习。",
  920. "1.点击【跳转学习网址】按钮",
  921. "2.打开学习网址后,选择【个人用户】进行登录",
  922. "(1)账号:您个人的身份证号码",
  923. "(2)密码:身份证号码,再加111111",
  924. ];
  925. const newDatas = [];
  926. const h = this.$createElement;
  927. for (const i in confirmText) {
  928. newDatas.push(h("p", null, confirmText[i]));
  929. }
  930. this.$confirm(h("div", null, newDatas), "温馨提示", {
  931. confirmButtonText: "跳转学习网址",
  932. cancelButtonText: "关闭",
  933. closeOnClickModal: false,
  934. closeOnPressEscape: false,
  935. distinguishCancelAndClose: false,
  936. showClose: false,
  937. })
  938. .then((_) => {
  939. window.open("http://admin.zhujianpeixun.com/", "_blank");
  940. })
  941. .catch((_) => {});
  942. return;
  943. } else {
  944. this.$message({
  945. type: "warning",
  946. message:
  947. "您的学习账号未开通,请稍后再尝试,有疑问,请联系020-87085982!",
  948. });
  949. return;
  950. }
  951. }
  952. // //内部系统
  953. // if (items.interfacePushId > 0 && items.officialStatus != 1) {
  954. // this.$message({
  955. // type: "warning",
  956. // message:
  957. // "机构正在为您报名中,请耐心等待,有疑问请联系020-87085982!",
  958. // });
  959. // return;
  960. // }
  961. if (items.goodsType !== 6) {
  962. if (
  963. this.sysTime <= items.serviceStartTime ||
  964. this.sysTime >= items.serviceEndTime
  965. ) {
  966. this.$message({
  967. type: "warning",
  968. message: "不在学习服务期,不能进入学习",
  969. });
  970. return;
  971. }
  972. if (
  973. (items.classStartTime &&
  974. this.sysTime <= items.classStartTime) ||
  975. (items.classEndTime && this.sysTime >= items.classEndTime)
  976. ) {
  977. this.$message({
  978. type: "warning",
  979. message: "不在班级有效期,不能进入学习",
  980. });
  981. return;
  982. }
  983. if (items.learningStatus == 2) {
  984. this.$message({
  985. type: "warning",
  986. message: "开放学习时间待定,不能进入学习",
  987. });
  988. return;
  989. }
  990. if (items.classStatus == 0) {
  991. this.$message({
  992. type: "warning",
  993. message: "尚未开班,不能进入学习",
  994. });
  995. return;
  996. }
  997. if (
  998. items.learningStatus == 3 &&
  999. this.sysTime < items.learningTimeStart
  1000. ) {
  1001. this.$message({
  1002. type: "warning",
  1003. message: "不在开放学习时间,不能进入学习",
  1004. });
  1005. return;
  1006. }
  1007. let rebuildStatus = await this.courseGoodsRebuildStatus(
  1008. items.goodsId,
  1009. items.gradeId
  1010. );
  1011. if (rebuildStatus == 0) {
  1012. this.$refs.rebuildModal.showModal(items);
  1013. return;
  1014. }
  1015. }
  1016. // if (item.educationName == "继续教育") {
  1017. this.$request
  1018. .lockLockStatus({
  1019. action: "jxjy",
  1020. })
  1021. .then((res) => {
  1022. //有其他端在操作,不能学习
  1023. this.$message({
  1024. type: "warning",
  1025. message: res.msg,
  1026. });
  1027. })
  1028. .catch((err) => {
  1029. //可以学习
  1030. this.$request
  1031. .courseCourseList({
  1032. pageNum: 1,
  1033. pageSize: 1,
  1034. goodsId: items.goodsId,
  1035. gradeId: items.gradeId,
  1036. })
  1037. .then((res) => {
  1038. if (res.rows.length) {
  1039. resolve(res);
  1040. } else {
  1041. this.$message({
  1042. type: "warning",
  1043. message: "课程内暂无可以学习的科目",
  1044. });
  1045. }
  1046. });
  1047. });
  1048. // } else {
  1049. // this.$request
  1050. // .courseCourseList({
  1051. // pageNum: 1,
  1052. // pageSize: 1,
  1053. // goodsId: items.goodsId,
  1054. // gradeId: items.gradeId,
  1055. // })
  1056. // .then((res) => {
  1057. // if (res.rows.length) {
  1058. // resolve(res);
  1059. // } else {
  1060. // this.$message({
  1061. // type: "warning",
  1062. // message: "课程内暂无可以学习的科目",
  1063. // });
  1064. // }
  1065. // });
  1066. // }
  1067. });
  1068. });
  1069. },
  1070. /**
  1071. * @param {Object} goodsId 商品id
  1072. * 查询商品重修状态
  1073. */
  1074. courseGoodsRebuildStatus(goodsId, gradeId) {
  1075. return new Promise((resolve) => {
  1076. this.$request
  1077. .courseGoodsRebuildStatus({
  1078. goodsId: goodsId,
  1079. gradeId: gradeId,
  1080. })
  1081. .then((res) => {
  1082. resolve(res.data);
  1083. });
  1084. });
  1085. },
  1086. /**
  1087. * 微信登入
  1088. */
  1089. wxLoginFunc() {
  1090. this.$refs.wxLogin.openBoxs();
  1091. },
  1092. /**
  1093. * 微信登入—返回数据
  1094. */
  1095. wxLoginBack(res) {
  1096. localStorage.setItem("user_account", res.data.user_account);
  1097. localStorage.setItem("token", res.data.token);
  1098. if (res.data.full_info) {
  1099. this.getInfo();
  1100. } else {
  1101. this.indexUserAccount = res.data.user_account;
  1102. this.indexToken = res.data.token;
  1103. this.isLogin = false;
  1104. // 弹窗
  1105. this.bindShow = true;
  1106. }
  1107. },
  1108. goLast() {
  1109. if (this.recordList.goodsType == 6) {
  1110. this.go("/my-live-detail/" + this.recordList.goodsId, {
  1111. gradeId: this.recordList.gradeId,
  1112. orderGoodsId: this.recordList.orderGoodsId,
  1113. courseId: this.recordList.courseId,
  1114. });
  1115. } else if (this.recordList.goodsType == 1) {
  1116. this.$router.push({
  1117. path: `/my-course-detail/${this.recordList.goodsId}`,
  1118. query: {
  1119. gradeId: this.recordList.gradeId,
  1120. orderGoodsId: this.recordList.orderGoodsId,
  1121. courseId: this.recordList.courseId,
  1122. chapterId: this.recordList.chapterId,
  1123. moduleId: this.recordList.moduleId,
  1124. sectionId: this.recordList.sectionId,
  1125. recordingUrl: this.recordList.recordingUrl,
  1126. liveUrl: this.recordList.liveUrl,
  1127. sectionType: this.recordList.sectionType,
  1128. liveStartTime: this.recordList.liveStartTime,
  1129. liveEndTime: this.recordList.liveEndTime,
  1130. },
  1131. });
  1132. }
  1133. },
  1134. swiperJump(swiper) {
  1135. if (swiper.jumpType == 1) {
  1136. //无跳转
  1137. return;
  1138. } else if (swiper.jumpType == 2) {
  1139. //url
  1140. window.open(swiper.jumpUrl, "_blank");
  1141. } else if (swiper.jumpType == 3) {
  1142. //内部接口
  1143. this.$router.push({
  1144. path: swiper.jumpUrl,
  1145. });
  1146. }
  1147. },
  1148. handleCommand(command) {
  1149. switch (command) {
  1150. case "1":
  1151. this.go("/person-center/my-course");
  1152. break;
  1153. case "2":
  1154. this.go("/person-center/my-bank");
  1155. break;
  1156. case "3":
  1157. this.go("/person-center/my-info");
  1158. break;
  1159. case "4":
  1160. this.$tools.exit();
  1161. break;
  1162. case "5":
  1163. console.log("------command:", command);
  1164. break;
  1165. default:
  1166. break;
  1167. }
  1168. },
  1169. toFixed(num) {
  1170. if (num) {
  1171. let str = String(num).indexOf(".");
  1172. if (str != -1) {
  1173. return +num.toFixed(2);
  1174. } else {
  1175. return num;
  1176. }
  1177. } else {
  1178. return 0;
  1179. }
  1180. },
  1181. ...mapMutations(["setUserInfo", "getMsgCount"]),
  1182. /**
  1183. * 播放记录
  1184. */
  1185. getRecord() {
  1186. this.$request
  1187. .studRrecordListUserRecord({
  1188. pageNum: 1,
  1189. pageSize: 1,
  1190. })
  1191. .then((res) => {
  1192. if (res.rows.length) {
  1193. this.recordList = res.rows[0];
  1194. }
  1195. });
  1196. },
  1197. search() {
  1198. if (!this.searchKey.trim()) {
  1199. this.$message({
  1200. type: "warning",
  1201. duration: 2000,
  1202. message: "请输入搜索内容",
  1203. });
  1204. return;
  1205. }
  1206. let type = this.type;
  1207. //根据类型跳转题库或者列表页面
  1208. if (type == "1") {
  1209. this.$router.push({
  1210. path: "/course-list",
  1211. query: {
  1212. searchKey: this.searchKey,
  1213. },
  1214. });
  1215. } else if (type == "6") {
  1216. this.$router.push({
  1217. path: "/live-list",
  1218. query: {
  1219. searchKey: this.searchKey,
  1220. },
  1221. });
  1222. } else {
  1223. this.$router.push({
  1224. path: "/bank-list",
  1225. query: {
  1226. searchKey: this.searchKey,
  1227. },
  1228. });
  1229. }
  1230. },
  1231. /**
  1232. * 查看商品详情
  1233. */
  1234. goodsDetail(item, type) {
  1235. if (type === 1) {
  1236. this.$router.push({
  1237. path: "/course-detail/" + item.goodsId,
  1238. });
  1239. }
  1240. if (type === 2) {
  1241. this.$router.push({
  1242. path: "/bank-detail/" + item.goodsId,
  1243. });
  1244. }
  1245. },
  1246. educationTypeList() {
  1247. this.$request.educationTypeList().then((res) => {
  1248. this.typeList = res.rows.slice(0, 5);
  1249. console.log(this.typeList, "this.typeList");
  1250. this.typeList.forEach((typeItem, index) => {
  1251. this.businessList(typeItem.id, index);
  1252. });
  1253. });
  1254. },
  1255. businessList(educationId, index) {
  1256. this.$request
  1257. .businessList({ educationId })
  1258. .then((res) => {
  1259. let rows = res.rows.filter((item) => item.aliasName);
  1260. this.$set(this.slideList, index, rows);
  1261. if (rows.length >= 2) {
  1262. let newRows = rows.slice(0, 2);
  1263. let length = 0;
  1264. newRows.forEach((row) => {
  1265. let str = row.projectName + "-" + row.businessName;
  1266. length = length + str.length;
  1267. });
  1268. if (length >= 17) {
  1269. this.$set(this.typeList[index], "list", rows.slice(0, 1));
  1270. } else {
  1271. this.$set(this.typeList[index], "list", rows.slice(0, 2));
  1272. }
  1273. } else {
  1274. this.$set(this.typeList[index], "list", rows);
  1275. }
  1276. console.log("this.typeList:", this.slideList, this.typeList);
  1277. })
  1278. .catch((err) => {
  1279. console.log(err, "err");
  1280. });
  1281. },
  1282. /**
  1283. * 加入购物车
  1284. */
  1285. addCart(item) {
  1286. this.$request
  1287. .addCart({ goodsId: item.goodsId })
  1288. .then((res) => {
  1289. if (res) {
  1290. this.getCartCount();
  1291. this.$message({
  1292. message: "加入购物车成功",
  1293. type: "success",
  1294. });
  1295. }
  1296. })
  1297. .catch((err) => {
  1298. if (err.code == 500) {
  1299. this.$message({
  1300. message: err.msg,
  1301. type: "warning",
  1302. });
  1303. }
  1304. });
  1305. },
  1306. /**
  1307. * 获取推荐商品
  1308. */
  1309. getActivityList() {
  1310. this.$request
  1311. .appCommonActivityRecommendList({ platform: 2, status: 1 })
  1312. .then((res) => {
  1313. let goodsList1 = []; //推荐视频商品
  1314. let goodsList2 = []; //推荐题库商品
  1315. res.rows.forEach((item) => {
  1316. if (item.type === 1) {
  1317. goodsList1.push(item);
  1318. }
  1319. if (item.type === 2) {
  1320. goodsList2.push(item);
  1321. }
  1322. });
  1323. this.goodsList1 = goodsList1.sort((a, b) => a.sort - b.sort);
  1324. this.goodsList2 = goodsList2.sort((a, b) => a.sort - b.sort);
  1325. });
  1326. },
  1327. goCourse(item) {
  1328. console.log("sdsf", item);
  1329. if (item.topicId) {
  1330. this.$router.push({
  1331. path: "/goodsTopic",
  1332. query: {
  1333. topicId: item.topicId,
  1334. },
  1335. });
  1336. return;
  1337. }
  1338. this.$router.push({
  1339. path: "/course-list",
  1340. query: {
  1341. educationId: item.educationId ? item.educationId : item.id || "",
  1342. projectId: item.projectId || "",
  1343. businessId: item.educationId ? item.id : "",
  1344. },
  1345. });
  1346. },
  1347. slideChangeTransitionStart(e) {
  1348. this.color = this.colors[this.$refs.mySwiper.swiper.realIndex];
  1349. },
  1350. advertisingList() {
  1351. this.$request
  1352. .advertisinghomeLocationList({
  1353. platform: 2, //1小程序2PC网站
  1354. status: 1,
  1355. locationKey: "home-banner", //首页轮播KEY
  1356. })
  1357. .then((res) => {
  1358. this.swiperOptions.autoplay.delay = res.data[0].intervalTime * 1000;
  1359. /**
  1360. * 如果存在-调用轮播图列表
  1361. */
  1362. if (res.data.length) {
  1363. this.$request
  1364. .advertisingList({ locationId: res.data[0].locationId })
  1365. .then((res) => {
  1366. this.bannerList = res.rows;
  1367. this.colors = res.rows.map((item) => {
  1368. return item.color ? item.color : "rgba(225,225,225,0.1)";
  1369. });
  1370. this.color = this.colors[0];
  1371. });
  1372. }
  1373. });
  1374. },
  1375. go(path, query) {
  1376. this.$router.push({
  1377. path,
  1378. query,
  1379. });
  1380. },
  1381. mouseover() {
  1382. clearTimeout(this.timer);
  1383. this.showBox = true;
  1384. },
  1385. mouseLeave() {
  1386. clearTimeout(this.timer);
  1387. this.timer = setTimeout(() => {
  1388. this.showBox = false;
  1389. }, 500);
  1390. },
  1391. login() {
  1392. this.$refs.loginForm.validate((valid) => {
  1393. if (valid) {
  1394. this.isLogin = true;
  1395. let loginForm = JSON.parse(JSON.stringify(this.loginForm));
  1396. loginForm.pwd = this.$tools.encryptor(loginForm.pwd);
  1397. console.log(this.loginForm);
  1398. if(this.dualStatus){
  1399. loginForm.tel = loginForm.account
  1400. }
  1401. this.$request
  1402. .login(loginForm)
  1403. .then((res) => {
  1404. localStorage.setItem("user_account", res.data.user_account);
  1405. localStorage.setItem("token", res.data.token);
  1406. if (res.data.full_info) {
  1407. // localStorage.setItem("user_account", res.data.user_account);
  1408. // localStorage.setItem("token", res.data.token);
  1409. this.getInfo();
  1410. } else {
  1411. this.indexUserAccount = res.data.user_account;
  1412. this.indexToken = res.data.token;
  1413. this.isLogin = false;
  1414. // 弹窗
  1415. this.bindShow = true;
  1416. }
  1417. })
  1418. .catch((err) => {
  1419. this.isLogin = false;
  1420. this.$message({
  1421. message: err.msg,
  1422. type: "error",
  1423. });
  1424. });
  1425. }
  1426. });
  1427. },
  1428. /**
  1429. * 获取登录短信
  1430. */
  1431. getLoginSms(int) {
  1432. this.$refs[int === 1 ? 'loginForm' :'loginSmsForm'].validateField(int === 1 ? "account" :"tel", (valid) => {
  1433. if (!valid) {
  1434. if (this.countDown == 0) {
  1435. if (this.getLoginCodeLock) {
  1436. return;
  1437. }
  1438. this.getLoginCodeLock = true;
  1439. this.$request
  1440. .getLoginSms({ tel: int === 1 ? this.loginForm.account : this.loginSmsForm.tel })
  1441. .then((res) => {
  1442. this.getLoginCodeLock = false;
  1443. this.$message({
  1444. message: `验证码已发送`,
  1445. type: "success",
  1446. });
  1447. this.countDown = 60;
  1448. this.countDownTimer = setInterval(() => {
  1449. if (this.countDown == 0) {
  1450. clearInterval(this.countDownTimer);
  1451. } else {
  1452. this.countDown--;
  1453. }
  1454. }, 1000);
  1455. })
  1456. .catch((err) => {
  1457. this.$message.error(err.msg);
  1458. this.getLoginCodeLock = false;
  1459. });
  1460. }
  1461. }
  1462. });
  1463. },
  1464. /**
  1465. * 手机号登录
  1466. */
  1467. loginSms() {
  1468. this.$refs.loginSmsForm.validate((valid) => {
  1469. if (valid) {
  1470. this.isloginSms = true;
  1471. this.$request
  1472. .loginSms(this.loginSmsForm)
  1473. .then((res) => {
  1474. this.isloginSms = false;
  1475. localStorage.setItem("user_account", res.data.user_account);
  1476. localStorage.setItem("token", res.data.token);
  1477. this.$tools.setUuid(new Date().valueOf() + "");
  1478. if (res.data.full_info) {
  1479. this.getInfo();
  1480. } else {
  1481. this.indexUserAccount = res.data.user_account;
  1482. this.indexToken = res.data.token;
  1483. this.bindShow = true;
  1484. }
  1485. })
  1486. .catch((err) => {
  1487. this.isloginSms = false;
  1488. this.$message({
  1489. message: err.msg,
  1490. type: "error",
  1491. });
  1492. });
  1493. }
  1494. });
  1495. },
  1496. /**
  1497. * 消息提示
  1498. */
  1499. getmsg() {
  1500. this.$request.informUserselectLastUnStudyMsg().then((res) => {
  1501. if (res.data && res.data.id) {
  1502. let today = new Date(new Date().toLocaleDateString()).getTime();
  1503. if (localStorage.getItem("msg")) {
  1504. let ary = JSON.parse(localStorage.getItem("msg"));
  1505. if (ary.updateTime === today) {
  1506. this.msgShow = false;
  1507. return;
  1508. }
  1509. }
  1510. this.$nextTick(() => {
  1511. this.msgData = res.data;
  1512. this.msgShow = true;
  1513. });
  1514. } else {
  1515. this.msgShow = false;
  1516. }
  1517. });
  1518. },
  1519. /**
  1520. * 获取用户登录信息
  1521. */
  1522. getInfo() {
  1523. this.$request
  1524. .getInfo({ fromPlat: 2 })
  1525. .then((res) => {
  1526. this.loginForm = {};
  1527. this.loginSmsForm = {};
  1528. this.isLogin = false;
  1529. this.isloginSms = false;
  1530. this.setUserInfo(res.data);
  1531. checkFunc()
  1532. // this.getmsg();
  1533. })
  1534. .catch((err) => {
  1535. this.isLogin = false;
  1536. this.isloginSms = false;
  1537. this.$message({
  1538. message: err.msg,
  1539. type: "error",
  1540. });
  1541. });
  1542. },
  1543. bind() {
  1544. this.$refs.bindForm.validate((valid) => {
  1545. if (valid) {
  1546. this.isBind = true;
  1547. let bindForm = JSON.parse(JSON.stringify(this.bindForm));
  1548. bindForm.token = this.indexToken;
  1549. this.$request
  1550. .bindIdCard(bindForm)
  1551. .then((res) => {
  1552. this.isBind = false;
  1553. this.bindShow = false;
  1554. this.$message({
  1555. message: "关联成功",
  1556. type: "success",
  1557. });
  1558. localStorage.setItem("user_account", this.indexUserAccount);
  1559. localStorage.setItem("token", this.indexToken);
  1560. this.$tools.setUuid(new Date().valueOf() + "");
  1561. this.getInfo();
  1562. })
  1563. .catch((err) => {
  1564. this.isBind = false;
  1565. this.$message({
  1566. message: err.msg,
  1567. type: "error",
  1568. });
  1569. });
  1570. }
  1571. });
  1572. },
  1573. bindNext() {
  1574. this.bindShow = false;
  1575. this.indexToken = "";
  1576. this.indexUserAccount = "";
  1577. this.getInfo();
  1578. },
  1579. },
  1580. };
  1581. </script>
  1582. <!-- Add "scoped" attribute to limit CSS to this component only -->
  1583. <style scoped lang="scss">
  1584. .text_align {
  1585. text-align: center;
  1586. font-size: 18px;
  1587. margin: 40px 0px;
  1588. }
  1589. .home {
  1590. .header {
  1591. background: #ffffff;
  1592. &__header {
  1593. box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.04);
  1594. .text-list {
  1595. height: 40px;
  1596. line-height: 40px;
  1597. text-align: right;
  1598. font-size: 0;
  1599. a {
  1600. color: #3f8dfd;
  1601. font-size: 14px;
  1602. padding: 0 14px;
  1603. &:nth-last-of-type(1) {
  1604. padding-right: 0;
  1605. border-left: 1px solid #3f8dfd;
  1606. }
  1607. }
  1608. }
  1609. .icon-list {
  1610. height: 40px;
  1611. line-height: 40px;
  1612. text-align: right;
  1613. font-size: 0;
  1614. a {
  1615. color: #3f8dfd;
  1616. font-size: 14px;
  1617. padding: 0 14px;
  1618. position: relative;
  1619. .icon {
  1620. font-size: 20px;
  1621. }
  1622. .modal-box {
  1623. width: 162px;
  1624. background: #ffffff;
  1625. box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.1);
  1626. border-radius: 8px;
  1627. position: absolute;
  1628. top: 34px;
  1629. left: -40px;
  1630. li {
  1631. margin-left: 10px;
  1632. border-bottom: 1px solid #eeeeee;
  1633. height: 40px;
  1634. line-height: 40px;
  1635. cursor: pointer;
  1636. padding-left: 5px;
  1637. color: #666666;
  1638. text-align: left;
  1639. &:hover {
  1640. background: #eeeeee;
  1641. color: #3f8dfd;
  1642. }
  1643. &:nth-last-of-type(1) {
  1644. border: 0;
  1645. }
  1646. }
  1647. }
  1648. }
  1649. }
  1650. }
  1651. &__body {
  1652. margin-top: 16px;
  1653. .logo {
  1654. float: left;
  1655. img {
  1656. width: 162px;
  1657. height: 33px;
  1658. }
  1659. h1 {
  1660. background: url("~@/assets/logo.png") no-repeat center;
  1661. width: 162px;
  1662. height: 33px;
  1663. }
  1664. }
  1665. .search {
  1666. float: left;
  1667. margin-left: 160px;
  1668. width: 648px;
  1669. background: #fafbfc;
  1670. border: 1px solid #3f8dfd;
  1671. border-radius: 8px;
  1672. display: flex;
  1673. overflow: hidden;
  1674. &__select {
  1675. width: 76px;
  1676. border-right: 1px solid #fff;
  1677. select {
  1678. text-align: center;
  1679. width: 100%;
  1680. height: 100%;
  1681. border: 0;
  1682. outline: none;
  1683. }
  1684. }
  1685. &__input {
  1686. flex: 1;
  1687. input {
  1688. width: 100%;
  1689. height: 100%;
  1690. }
  1691. }
  1692. &__btn {
  1693. padding: 0;
  1694. text-align: center;
  1695. width: 80px;
  1696. height: 40px;
  1697. line-height: 40px;
  1698. font-size: 14px;
  1699. border-radius: 0;
  1700. }
  1701. }
  1702. .contact {
  1703. float: right;
  1704. padding-left: 45px;
  1705. background: url("~@/assets/cus.png") no-repeat left top;
  1706. &__phone {
  1707. font-size: 18px;
  1708. font-family: Microsoft YaHei;
  1709. font-weight: bold;
  1710. color: #666666;
  1711. }
  1712. &__time {
  1713. font-size: 14px;
  1714. font-family: Microsoft YaHei;
  1715. font-weight: 400;
  1716. color: #666666;
  1717. }
  1718. }
  1719. }
  1720. }
  1721. .section {
  1722. margin-top: 40px;
  1723. .tabs {
  1724. margin-left: 324px;
  1725. .tab {
  1726. display: inline-block;
  1727. width: 138px;
  1728. height: 40px;
  1729. font-size: 16px;
  1730. text-align: center;
  1731. line-height: 40px;
  1732. color: #333;
  1733. &.active {
  1734. color: #3f8dfd;
  1735. background: #f0f5fc;
  1736. }
  1737. }
  1738. }
  1739. .swiper-wrap {
  1740. transition: background 0.3s;
  1741. height: 400px;
  1742. position: relative;
  1743. .container {
  1744. position: relative;
  1745. height: 400px;
  1746. .left-box {
  1747. position: absolute;
  1748. top: -40px;
  1749. left: 0;
  1750. height: 440px;
  1751. width: 300px;
  1752. z-index: 10;
  1753. &__header {
  1754. height: 40px;
  1755. line-height: 40px;
  1756. color: #fff;
  1757. font-size: 16px;
  1758. background: #3f8dfd;
  1759. text-align: center;
  1760. }
  1761. &__body {
  1762. position: relative;
  1763. height: 400px;
  1764. background: rgba(0, 0, 0, 0.5);
  1765. overflow: hidden;
  1766. &:hover {
  1767. overflow: visible;
  1768. .slide-list {
  1769. opacity: 1;
  1770. left: 100%;
  1771. }
  1772. }
  1773. .slide-list {
  1774. opacity: 0;
  1775. transition: all 0.3s;
  1776. width: 672px;
  1777. padding: 0;
  1778. background: rgba(255, 255, 255, 1);
  1779. position: absolute;
  1780. top: 0;
  1781. left: 0;
  1782. padding-left: 24px;
  1783. z-index: 10;
  1784. &__item {
  1785. min-height: 80px;
  1786. display: flex;
  1787. align-items: center;
  1788. border-bottom: 1px solid #ddd;
  1789. &:nth-last-of-type(1) {
  1790. border: 0;
  1791. }
  1792. .title {
  1793. cursor: pointer;
  1794. color: #fff;
  1795. width: 120px;
  1796. height: 28px;
  1797. border: 1px solid #ffffff;
  1798. border-radius: 14px;
  1799. background: #3f8dfd;
  1800. line-height: 26px;
  1801. text-align: center;
  1802. border-radius: 15px;
  1803. margin-right: 10px;
  1804. }
  1805. .nav {
  1806. flex: 1;
  1807. display: flex;
  1808. flex-wrap: wrap;
  1809. li {
  1810. margin: 9px 24px 9px 0;
  1811. display: flex;
  1812. .text {
  1813. cursor: pointer;
  1814. font-size: 14px;
  1815. font-family: Microsoft YaHei;
  1816. font-weight: 400;
  1817. color: #666;
  1818. }
  1819. }
  1820. }
  1821. }
  1822. }
  1823. .bg {
  1824. backdrop-filter: blur(10px);
  1825. position: absolute;
  1826. left: 0;
  1827. top: 0;
  1828. width: 100%;
  1829. height: 100%;
  1830. z-index: 12;
  1831. }
  1832. .list {
  1833. position: relative;
  1834. z-index: 22;
  1835. padding-left: 16px;
  1836. li {
  1837. padding: 12px 0;
  1838. height: 80px;
  1839. border-bottom: 1px solid rgba(255, 255, 255, 0.6);
  1840. display: flex;
  1841. &:nth-last-of-type(1) {
  1842. border: 0;
  1843. }
  1844. .text {
  1845. flex: 1;
  1846. &__title {
  1847. cursor: pointer;
  1848. font-size: 16px;
  1849. font-family: Microsoft YaHei;
  1850. font-weight: 400;
  1851. color: #ffffff;
  1852. }
  1853. &__desc {
  1854. margin-top: 16px;
  1855. .item {
  1856. font-size: 14px;
  1857. font-family: Microsoft YaHei;
  1858. font-weight: 400;
  1859. color: #ffffff;
  1860. margin-right: 30px;
  1861. }
  1862. }
  1863. }
  1864. }
  1865. }
  1866. }
  1867. }
  1868. .swiper {
  1869. .swiper-slide {
  1870. cursor: pointer;
  1871. height: 400px;
  1872. img {
  1873. width: 100%;
  1874. height: 100%;
  1875. }
  1876. }
  1877. .swiper-pagination {
  1878. text-align: right;
  1879. padding-right: 324px;
  1880. /deep/ .swiper-pagination-bullet {
  1881. background: rgba(255, 255, 255, 0.4);
  1882. &-active {
  1883. background: rgba(255, 255, 255, 1);
  1884. }
  1885. }
  1886. }
  1887. }
  1888. .right-box {
  1889. width: 300px;
  1890. background: rgba(0, 0, 0, 0.5);
  1891. position: absolute;
  1892. right: 0;
  1893. bottom: 0;
  1894. top: 0;
  1895. z-index: 10;
  1896. .bg {
  1897. backdrop-filter: blur(10px);
  1898. position: absolute;
  1899. left: 0;
  1900. top: 0;
  1901. width: 100%;
  1902. height: 100%;
  1903. z-index: 2;
  1904. }
  1905. .no-login {
  1906. position: relative;
  1907. z-index: 10;
  1908. .input {
  1909. margin: 16px;
  1910. height: 40px;
  1911. background: #ffffff;
  1912. border-radius: 8px;
  1913. input {
  1914. padding: 0 16px;
  1915. width: 100%;
  1916. height: 100%;
  1917. font-size: 14px;
  1918. color: #333;
  1919. &::placeholder {
  1920. color: #999;
  1921. }
  1922. }
  1923. .btn {
  1924. font-size: 14px;
  1925. font-family: Microsoft YaHei;
  1926. font-weight: 400;
  1927. color: #3f8dfd;
  1928. white-space: nowrap;
  1929. cursor: pointer;
  1930. }
  1931. }
  1932. .submit {
  1933. margin: 16px;
  1934. font-size: 16px;
  1935. margin-top: 16px;
  1936. box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.08);
  1937. display: block;
  1938. width: 268px;
  1939. }
  1940. .bottom-text {
  1941. margin: 16px;
  1942. display: flex;
  1943. justify-content: space-between;
  1944. .text {
  1945. color: #fff;
  1946. }
  1947. }
  1948. }
  1949. .has-login {
  1950. position: relative;
  1951. z-index: 10;
  1952. padding: 14px 0 0 14px;
  1953. .userinfo {
  1954. display: flex;
  1955. align-items: center;
  1956. .avatar {
  1957. width: 40px;
  1958. height: 40px;
  1959. }
  1960. .nickname {
  1961. font-size: 16px;
  1962. font-family: Microsoft YaHei;
  1963. font-weight: bold;
  1964. color: #ffffff;
  1965. margin-left: 7px;
  1966. }
  1967. }
  1968. .type-list {
  1969. display: flex;
  1970. margin-top: 28px;
  1971. padding-bottom: 14px;
  1972. border-bottom: 1px solid #fff;
  1973. &__item {
  1974. cursor: pointer;
  1975. margin-right: 38px;
  1976. .img {
  1977. width: 64px;
  1978. height: 64px;
  1979. }
  1980. .text {
  1981. text-align: center;
  1982. margin-top: 10px;
  1983. font-size: 14px;
  1984. font-family: Microsoft YaHei;
  1985. font-weight: 400;
  1986. color: #ffffff;
  1987. }
  1988. &:nth-last-of-type(1) {
  1989. margin-right: 0;
  1990. }
  1991. }
  1992. }
  1993. .history {
  1994. border-bottom: 1px solid #fff;
  1995. padding-bottom: 15px;
  1996. .btn {
  1997. margin-top: 15px;
  1998. width: 64px;
  1999. height: 24px;
  2000. border: 1px solid #ffffff;
  2001. border-radius: 8px;
  2002. text-align: center;
  2003. line-height: 24px;
  2004. color: #fff;
  2005. }
  2006. .title {
  2007. cursor: pointer;
  2008. margin-top: 15px;
  2009. padding-right: 15px;
  2010. font-size: 14px;
  2011. font-family: Microsoft YaHei;
  2012. font-weight: 400;
  2013. color: #ffffff;
  2014. }
  2015. .progress {
  2016. margin-top: 15px;
  2017. display: flex;
  2018. justify-content: space-between;
  2019. padding-right: 15px;
  2020. span {
  2021. font-size: 14px;
  2022. font-family: Microsoft YaHei;
  2023. font-weight: 400;
  2024. color: #ffffff;
  2025. }
  2026. }
  2027. }
  2028. }
  2029. }
  2030. }
  2031. }
  2032. }
  2033. .course {
  2034. background: #f5f7fa;
  2035. padding-top: 40px;
  2036. &__header {
  2037. display: flex;
  2038. align-items: center;
  2039. justify-content: space-between;
  2040. padding-bottom: 15px;
  2041. border-bottom: 1px solid #DCDCDC;
  2042. .lefts {
  2043. display: flex;
  2044. }
  2045. .title {
  2046. background: url("~@/assets/video.png") no-repeat left center;
  2047. padding-left: 36px;
  2048. font-size: 24px;
  2049. font-family: YouSheBiaoTiHei;
  2050. font-weight: 400;
  2051. color: #333333;
  2052. text-shadow: 0px 6px 6px rgba(249, 113, 13, 0.08);
  2053. }
  2054. }
  2055. .tabs {
  2056. margin-left: 28px;
  2057. display: flex;
  2058. align-items: center;
  2059. .tab {
  2060. cursor: pointer;
  2061. color: #888888;
  2062. font-size: 14px;
  2063. margin-right: 32px;
  2064. &.active {
  2065. font-weight: 600;
  2066. color: #222222;
  2067. }
  2068. }
  2069. }
  2070. .pagination {
  2071. padding: 30px 0;
  2072. text-align: center;
  2073. }
  2074. &__body {
  2075. .list {
  2076. width: 100%;
  2077. .course-item {
  2078. float: left;
  2079. }
  2080. }
  2081. }
  2082. &__footer {
  2083. overflow: hidden;
  2084. .btn {
  2085. cursor: pointer;
  2086. width: 72px;
  2087. height: 28px;
  2088. line-height: 28px;
  2089. background: #d5e4ff;
  2090. border-radius: 4px;
  2091. // margin: 20px auto 40px;
  2092. color: #3f8dfd;
  2093. text-align: center;
  2094. transition: all 0.2s;
  2095. &:hover {
  2096. color: #fff;
  2097. box-shadow: 0px 8px 4px 0px rgba(7, 82, 208, 0.08);
  2098. background: #3f8dfd;
  2099. }
  2100. }
  2101. }
  2102. }
  2103. .bank {
  2104. background: #fff;
  2105. padding-top: 40px;
  2106. &__header {
  2107. display: flex;
  2108. align-items: center;
  2109. justify-content: space-between;
  2110. padding-bottom: 15px;
  2111. border-bottom: 1px solid #DCDCDC;
  2112. .lefts {
  2113. display: flex;
  2114. }
  2115. .title {
  2116. background: url("~@/assets/exercise.png") no-repeat left center;
  2117. padding-left: 36px;
  2118. font-size: 24px;
  2119. font-family: YouSheBiaoTiHei;
  2120. font-weight: 400;
  2121. color: #333333;
  2122. text-shadow: 0px 6px 6px rgba(249, 113, 13, 0.08);
  2123. }
  2124. }
  2125. .tabs {
  2126. margin-left: 40px;
  2127. display: flex;
  2128. align-items: center;
  2129. .tab {
  2130. cursor: pointer;
  2131. color: #888888;
  2132. font-size: 14px;
  2133. margin-right: 32px;
  2134. &.active {
  2135. font-weight: 600;
  2136. color: #222222;
  2137. }
  2138. }
  2139. }
  2140. .pagination {
  2141. padding: 30px 0;
  2142. text-align: center;
  2143. }
  2144. &__body {
  2145. .list {
  2146. width: 100%;
  2147. .bank-item {
  2148. float: left;
  2149. }
  2150. }
  2151. }
  2152. &__footer {
  2153. overflow: hidden;
  2154. .btn {
  2155. cursor: pointer;
  2156. width: 72px;
  2157. height: 28px;
  2158. line-height: 28px;
  2159. background: #d5e4ff;
  2160. border-radius: 4px;
  2161. // margin: 20px auto 40px;
  2162. color: #3f8dfd;
  2163. text-align: center;
  2164. transition: all 0.2s;
  2165. &:hover {
  2166. color: #fff;
  2167. box-shadow: 0px 8px 4px 0px rgba(7, 82, 208, 0.08);
  2168. background: #3f8dfd;
  2169. }
  2170. }
  2171. }
  2172. }
  2173. .bind {
  2174. /deep/ .el-dialog__header {
  2175. display: none;
  2176. }
  2177. /deep/ .el-dialog__body {
  2178. padding: 0;
  2179. overflow: unset;
  2180. }
  2181. &__close {
  2182. position: absolute;
  2183. right: 0;
  2184. top: -28px;
  2185. width: 24px;
  2186. height: 24px;
  2187. line-height: 24px;
  2188. text-align: center;
  2189. color: #eee;
  2190. border: 1px solid #eee;
  2191. border-radius: 50%;
  2192. }
  2193. &__header {
  2194. height: 40px;
  2195. text-align: center;
  2196. line-height: 40px;
  2197. border-bottom: 1px solid #eeeeee;
  2198. }
  2199. &__body {
  2200. height: 248px;
  2201. padding: 24px;
  2202. position: relative;
  2203. box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.04);
  2204. border-radius: 8px;
  2205. .submit {
  2206. width: 100%;
  2207. }
  2208. .bind-next {
  2209. font-size: 14px;
  2210. text-align: center;
  2211. color: #999;
  2212. margin-top: 10px;
  2213. cursor: pointer;
  2214. }
  2215. }
  2216. }
  2217. }
  2218. .fade-enter,
  2219. .fade-leave-to {
  2220. opacity: 0;
  2221. height: 0;
  2222. }
  2223. .fade-enter-to,
  2224. .fade-leave {
  2225. opacity: 1;
  2226. height: 122px;
  2227. }
  2228. .fade-enter-active,
  2229. .fade-leave-active {
  2230. transition: all 0.3s;
  2231. }
  2232. .dis_flex {
  2233. user-select: none;
  2234. display: flex;
  2235. align-items: center;
  2236. justify-content: center;
  2237. .dis_flex_wxloginImg {
  2238. cursor: pointer;
  2239. width: 76px;
  2240. height: 76px;
  2241. border-radius: 50%;
  2242. overflow: hidden;
  2243. background-color: #fff;
  2244. line-height: 76px;
  2245. text-align: center;
  2246. img {
  2247. vertical-align: middle;
  2248. width: 40px;
  2249. height: 40px;
  2250. }
  2251. }
  2252. }
  2253. /deep/ .el-badge__content.is-fixed {
  2254. top: 7px;
  2255. }
  2256. .dis_plays {
  2257. display: flex;
  2258. align-items: center;
  2259. }
  2260. .toolbth {
  2261. border-radius: 55px;
  2262. background-color: #fff;
  2263. color: #3f8dfd;
  2264. font-size: 14px;
  2265. padding: 5px 14px;
  2266. margin-right: 16px;
  2267. user-select: none;
  2268. cursor: pointer;
  2269. }
  2270. </style>
  2271. <style lang="scss">
  2272. .tooltipStyle {
  2273. background-color: #3f8dfd !important;
  2274. color: #fff;
  2275. }
  2276. .tooltipStyle .popper__arrow {
  2277. border-bottom-color: #3f8dfd !important;
  2278. }
  2279. .tooltipStyle .popper__arrow::after {
  2280. border-bottom-color: #3f8dfd !important;
  2281. }
  2282. </style>